<?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>209795</bug_id>
          
          <creation_ts>2020-03-30 21:47:01 -0700</creation_ts>
          <short_desc>Add SPI WKWebpagePreferences._userContentController</short_desc>
          <delta_ts>2020-03-31 13:15:19 -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>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1635939</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-03-30 21:47:01 -0700</bug_when>
    <thetext>Add SPI WKWebpagePreferences._userContentController</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1635940</commentid>
    <comment_count>1</comment_count>
      <attachid>395014</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-03-30 21:54:25 -0700</bug_when>
    <thetext>Created attachment 395014
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1635943</commentid>
    <comment_count>2</comment_count>
      <attachid>395015</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-03-30 22:04:50 -0700</bug_when>
    <thetext>Created attachment 395015
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636039</commentid>
    <comment_count>3</comment_count>
      <attachid>395015</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-03-31 09:02:03 -0700</bug_when>
    <thetext>Comment on attachment 395015
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=395015&amp;action=review

&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:5304
&gt; +        RELEASE_ASSERT(!policies);

This was too aggressive, and technically unrelated.  I&apos;ll remove this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636041</commentid>
    <comment_count>4</comment_count>
      <attachid>395044</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-03-31 09:05:47 -0700</bug_when>
    <thetext>Created attachment 395044
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636209</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-03-31 13:14:02 -0700</bug_when>
    <thetext>http://trac.webkit.org/r259307</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636210</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-03-31 13:15:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/61121163&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395014</attachid>
            <date>2020-03-30 21:54:25 -0700</date>
            <delta_ts>2020-03-30 22:04:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209795-20200330215424.patch</filename>
            <type>text/plain</type>
            <size>79572</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTkxNjMpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBACisyMDIwLTAzLTMwICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIFNQSSBXS1dl
YnBhZ2VQcmVmZXJlbmNlcy5fdXNlckNvbnRlbnRDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk3OTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gc3dp
dGNoIHdoaWNoIFdLVXNlckNvbnRlbnRDb250cm9sbGVyIHdlIGFyZSB1c2luZyBhdCBkZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uIHRpbWUKKyAgICAgICAgbGlrZSB3ZSBkbyBXS1dlYnNp
dGVEYXRhU3RvcmVzLiAgVGhpcyBpcyBvbmx5IGFsbG93ZWQgd2l0aCBtYWluIGZyYW1lIG5hdmln
YXRpb25zLgorCisgICAgICAgIFRvIGRvIHRoaXMgSSBtb3ZlZCBVc2VyQ29udGVudENvbnRyb2xs
ZXJQYXJhbWV0ZXJzIGludG8gdGhlaXIgb3duIHN0cnVjdC4KKyAgICAgICAgSSByZW1vdmUgdW51
c2VkIFdlYnNpdGVQb2xpY2llc0RhdGEud2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuCisgICAg
ICAgIEkgcGFzcyBhbiBBUEk6OldlYnNpdGVQb2xpY2llcyogZnVydGhlciBkb3duIHRoZSBjaGFp
biBpbnN0ZWFkIG9mIHN3aXRjaGluZyB0byBPcHRpb25hbDxXZWJzaXRlUG9saWNpZXNEYXRhPiwK
KyAgICAgICAgd2hpY2ggYWxsb3dzIHVzIHRvIGFjY2VzcyB0aGUgV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHkqIGZyb20gdGhlIGZvcm1lciBpbiBXZWJQYWdlUHJveHk6OmNyZWF0aW9uUGFy
YW1ldGVycy4KKyAgICAgICAgSSByZW1vdmVkIGFuIHVudXNlZCBXZWJzaXRlUG9saWNpZXMgY29u
c3RydWN0b3IuCisgICAgICAgIEkgYWRkZWQgYSBtaXNzaW5nIGNvcGllZCBtZW1iZXIgdmFyaWFi
bGUgaW4gV2Vic2l0ZVBvbGljaWVzOjpjb3B5LgorICAgICAgICBJIGFkZGVkIHNvbWUgYXNzZXJ0
aW9ucyBpbiBXZWJQYWdlUHJveHkgdGhhdCB3ZSB3ZXJlIHVuYWJsZSB0byBhZGQgYmVmb3JlIFNh
ZmFyaSBhZG9wdGVkIFdLTmF2aWdhdGlvbkRlbGVnYXRlLgorCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAqIFNoYXJlZC9Vc2VyQ29udGVudENv
bnRyb2xsZXJQYXJhbWV0ZXJzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlVzZXJDb250
ZW50Q29udHJvbGxlclBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hh
cmVkL1VzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnMuaDogQWRkZWQuCisgICAgICAgICog
U2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9X
ZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogU2hhcmVkL1dlYnNpdGVQb2xp
Y2llc0RhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlUG9saWNpZXNEYXRhOjplbmNv
ZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlUG9saWNpZXNEYXRhOjpkZWNvZGUp
OgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlUG9saWNpZXNEYXRhLmg6CisgICAgICAgICogU291
cmNlcy50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9saWNpZXMuY3Bw
OgorICAgICAgICAoQVBJOjpXZWJzaXRlUG9saWNpZXM6OmNvcHkgY29uc3QpOgorICAgICAgICAo
QVBJOjpXZWJzaXRlUG9saWNpZXM6OnNldFVzZXJDb250ZW50Q29udHJvbGxlcik6CisgICAgICAg
IChBUEk6OldlYnNpdGVQb2xpY2llczo6ZGF0YSk6CisgICAgICAgIChBUEk6OldlYnNpdGVQb2xp
Y2llczo6V2Vic2l0ZVBvbGljaWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSVdlYnNpdGVQb2xpY2llcy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2Uu
Y3BwOgorICAgICAgICAoV0tQYWdlVXBkYXRlV2Vic2l0ZVBvbGljaWVzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF91
cGRhdGVXZWJwYWdlUHJlZmVyZW5jZXM6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYnBhZ2VQcmVmZXJlbmNlcy5tbToKKyAgICAgICAgKC1bV0tXZWJwYWdlUHJlZmVyZW5j
ZXMgX3VzZXJDb250ZW50Q29udHJvbGxlcl0pOgorICAgICAgICAoLVtXS1dlYnBhZ2VQcmVmZXJl
bmNlcyBfc2V0VXNlckNvbnRlbnRDb250cm9sbGVyOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlv
blN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9u
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpQcm92aXNpb25hbFBhZ2VQcm94eTo6UHJvdmlzaW9uYWxQYWdlUHJveHkpOgor
ICAgICAgICAoV2ViS2l0OjpQcm92aXNpb25hbFBhZ2VQcm94eTo6aW5pdGlhbGl6ZVdlYlBhZ2Up
OgorICAgICAgICAoV2ViS2l0OjpQcm92aXNpb25hbFBhZ2VQcm94eTo6Z29Ub0JhY2tGb3J3YXJk
SXRlbSk6CisgICAgICAgICogVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFk
ZFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94
eTo6cGFyYW1ldGVycyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5Ojpjb250ZW50UnVsZUxpc3REYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmNvbnRlbnRSdWxlTGlzdERhdGEpOiBE
ZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY2VpdmVkTmF2aWdhdGlvblBvbGljeURl
Y2lzaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZWNlaXZlZFBvbGljeURl
Y2lzaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpjb250aW51ZU5hdmlnYXRp
b25Jbk5ld1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OmRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2VTaGFyZWQpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjphZGRXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5o
OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6bV9wcm9j
ZXNzRGlzcGxheU5hbWUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKToKKwogMjAyMC0w
My0yOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAg
ICAgIERlcHJlY2F0ZSBpbmplY3RlZCBidW5kbGUgcGFnZSBncm91cCBTUEkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9Tb3VyY2Vz
LnR4dAkocmV2aXNpb24gMjU5MTYzKQorKysgU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMTgxLDYgKzE4MSw3IEBAIFNoYXJlZC9Ub3VjaEJhck1lbnVJdGVtRGF0
YS5jcHAKIFNoYXJlZC9VUkxTY2hlbWVUYXNrUGFyYW1ldGVycy5jcHAKIFNoYXJlZC9VcGRhdGVJ
bmZvLmNwcAogU2hhcmVkL1VzZXJEYXRhLmNwcAorU2hhcmVkL1VzZXJDb250ZW50Q29udHJvbGxl
clBhcmFtZXRlcnMuY3BwCiBTaGFyZWQvV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAKIFNoYXJl
ZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5jcHAKIFNoYXJlZC9XZWJDb21waWxlZENvbnRl
bnRSdWxlTGlzdERhdGEuY3BwCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtTZXNzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtTZXNzaW9uLmNwcAkocmV2aXNpb24gMjU5MTYzKQorKysgU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKICNp
bmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIk5ldHdv
cmtSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJh
bWV0ZXJzLmgiCiAjaW5jbHVkZSAiUGluZ0xvYWQuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgpJbmRleDogU291cmNlL1dlYktp
dC9TaGFyZWQvVXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9TaGFyZWQvVXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVycy5j
cHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvVXNlckNvbnRlbnRDb250
cm9sbGVyUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVudENvbnRy
b2xsZXJQYXJhbWV0ZXJzLmgiCisKKyNpbmNsdWRlICJEZWNvZGVyLmgiCisjaW5jbHVkZSAiRW5j
b2Rlci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBVc2VyQ29udGVudENvbnRyb2xs
ZXJQYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAg
IGVuY29kZXIgPDwgdXNlckNvbnRlbnRXb3JsZHM7CisgICAgZW5jb2RlciA8PCB1c2VyU2NyaXB0
czsKKyAgICBlbmNvZGVyIDw8IHVzZXJTdHlsZVNoZWV0czsKKyAgICBlbmNvZGVyIDw8IG1lc3Nh
Z2VIYW5kbGVyczsKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorICAgIGVuY29kZXIg
PDwgY29udGVudFJ1bGVMaXN0czsKKyNlbmRpZgorfQorCitPcHRpb25hbDxVc2VyQ29udGVudENv
bnRyb2xsZXJQYXJhbWV0ZXJzPiBVc2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzOjpkZWNv
ZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPFZlY3RvcjxzdGQ6OnBh
aXI8Q29udGVudFdvcmxkSWRlbnRpZmllciwgU3RyaW5nPj4+IHVzZXJDb250ZW50V29ybGRzOwor
ICAgIGRlY29kZXIgPj4gdXNlckNvbnRlbnRXb3JsZHM7CisgICAgaWYgKCF1c2VyQ29udGVudFdv
cmxkcykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPFZlY3Rv
cjxXZWJVc2VyU2NyaXB0RGF0YT4+IHVzZXJTY3JpcHRzOworICAgIGRlY29kZXIgPj4gdXNlclNj
cmlwdHM7CisgICAgaWYgKCF1c2VyU2NyaXB0cykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICAKKyAgICBPcHRpb25hbDxWZWN0b3I8V2ViVXNlclN0eWxlU2hlZXREYXRhPj4gdXNl
clN0eWxlU2hlZXRzOworICAgIGRlY29kZXIgPj4gdXNlclN0eWxlU2hlZXRzOworICAgIGlmICgh
dXNlclN0eWxlU2hlZXRzKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIAorICAg
IE9wdGlvbmFsPFZlY3RvcjxXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckRhdGE+PiBtZXNzYWdlSGFu
ZGxlcnM7CisgICAgZGVjb2RlciA+PiBtZXNzYWdlSGFuZGxlcnM7CisgICAgaWYgKCFtZXNzYWdl
SGFuZGxlcnMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgCisjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKKyAgICBPcHRpb25hbDxWZWN0b3I8c3RkOjpwYWlyPFN0cmlu
ZywgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhPj4+IGNvbnRlbnRSdWxlTGlzdHM7Cisg
ICAgZGVjb2RlciA+PiBjb250ZW50UnVsZUxpc3RzOworICAgIGlmICghY29udGVudFJ1bGVMaXN0
cykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyNlbmRpZgorCisgICAgcmV0dXJuIHt7
CisgICAgICAgIFdURk1vdmUoKnVzZXJDb250ZW50V29ybGRzKSwKKyAgICAgICAgV1RGTW92ZSgq
dXNlclNjcmlwdHMpLAorICAgICAgICBXVEZNb3ZlKCp1c2VyU3R5bGVTaGVldHMpLAorICAgICAg
ICBXVEZNb3ZlKCptZXNzYWdlSGFuZGxlcnMpLAorI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCisgICAgICAgIFdURk1vdmUoKmNvbnRlbnRSdWxlTGlzdHMpLAorI2VuZGlmCisgICAgfX07
Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hh
cmVkL1VzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9Vc2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvVXNlckNvbnRlbnRDb250cm9sbGVyUGFy
YW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YS5o
IgorI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oIgorCituYW1l
c3BhY2UgSVBDIHsKK2NsYXNzIEVuY29kZXI7CitjbGFzcyBEZWNvZGVyOworfQorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworc3RydWN0IFVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnMgewor
CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb250ZW50V29ybGRJZGVudGlmaWVyLCBTdHJpbmc+PiB1
c2VyQ29udGVudFdvcmxkczsKKyAgICBWZWN0b3I8V2ViVXNlclNjcmlwdERhdGE+IHVzZXJTY3Jp
cHRzOworICAgIFZlY3RvcjxXZWJVc2VyU3R5bGVTaGVldERhdGE+IHVzZXJTdHlsZVNoZWV0czsK
KyAgICBWZWN0b3I8V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXJEYXRhPiBtZXNzYWdlSGFuZGxlcnM7
CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFN0
cmluZywgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhPj4gY29udGVudFJ1bGVMaXN0czsK
KyNlbmRpZgorCisgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNvZGVyJikgY29uc3Q7CisgICAgc3Rh
dGljIE9wdGlvbmFsPFVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnM+IGRlY29kZShJUEM6
OkRlY29kZXImKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dl
YktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlz
aW9uIDI1OTE2MykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFt
ZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsMTMgKzEyNyw3IEBAIHZvaWQgV2ViUGFn
ZUNyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKEkKICAgICBlbmNvZGVyIDw8IG5lZWRzRm9udEF0
dHJpYnV0ZXM7CiAgICAgZW5jb2RlciA8PCBpY2VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkOwog
ICAgIGVuY29kZXIgPDwgZW51bWVyYXRpbmdBbGxOZXR3b3JrSW50ZXJmYWNlc0VuYWJsZWQ7Ci0g
ICAgZW5jb2RlciA8PCB1c2VyQ29udGVudFdvcmxkczsKLSAgICBlbmNvZGVyIDw8IHVzZXJTY3Jp
cHRzOwotICAgIGVuY29kZXIgPDwgdXNlclN0eWxlU2hlZXRzOwotICAgIGVuY29kZXIgPDwgbWVz
c2FnZUhhbmRsZXJzOwotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgZW5jb2Rl
ciA8PCBjb250ZW50UnVsZUxpc3RzOwotI2VuZGlmCisgICAgZW5jb2RlciA8PCB1c2VyQ29udGVu
dENvbnRyb2xsZXJQYXJhbWV0ZXJzOwogICAgIGVuY29kZXIgPDwgYmFja2dyb3VuZENvbG9yOwog
ICAgIGVuY29kZXIgPDwgb2xkUGFnZUlEOwogICAgIGVuY29kZXIgPDwgb3ZlcnJpZGRlbk1lZGlh
VHlwZTsKQEAgLTM5MiwzNyArMzg2LDExIEBAIE9wdGlvbmFsPFdlYlBhZ2VDcmVhdGlvblBhcmFt
ZXRlcnM+IFdlYlAKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMuZW51bWVyYXRp
bmdBbGxOZXR3b3JrSW50ZXJmYWNlc0VuYWJsZWQpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgT3B0aW9uYWw8VmVjdG9yPHN0ZDo6cGFpcjxDb250ZW50V29ybGRJZGVudGlm
aWVyLCBTdHJpbmc+Pj4gdXNlckNvbnRlbnRXb3JsZHM7Ci0gICAgZGVjb2RlciA+PiB1c2VyQ29u
dGVudFdvcmxkczsKLSAgICBpZiAoIXVzZXJDb250ZW50V29ybGRzKQotICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMudXNlckNvbnRlbnRXb3JsZHMgPSBXVEZNb3Zl
KCp1c2VyQ29udGVudFdvcmxkcyk7Ci0KLSAgICBPcHRpb25hbDxWZWN0b3I8V2ViVXNlclNjcmlw
dERhdGE+PiB1c2VyU2NyaXB0czsKLSAgICBkZWNvZGVyID4+IHVzZXJTY3JpcHRzOwotICAgIGlm
ICghdXNlclNjcmlwdHMpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1l
dGVycy51c2VyU2NyaXB0cyA9IFdURk1vdmUoKnVzZXJTY3JpcHRzKTsKLSAgICAKLSAgICBPcHRp
b25hbDxWZWN0b3I8V2ViVXNlclN0eWxlU2hlZXREYXRhPj4gdXNlclN0eWxlU2hlZXRzOwotICAg
IGRlY29kZXIgPj4gdXNlclN0eWxlU2hlZXRzOwotICAgIGlmICghdXNlclN0eWxlU2hlZXRzKQor
ICAgIE9wdGlvbmFsPFVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnM+IHVzZXJDb250ZW50
Q29udHJvbGxlclBhcmFtZXRlcnM7CisgICAgZGVjb2RlciA+PiB1c2VyQ29udGVudENvbnRyb2xs
ZXJQYXJhbWV0ZXJzOworICAgIGlmICghdXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVycykK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLnVzZXJTdHlsZVNo
ZWV0cyA9IFdURk1vdmUoKnVzZXJTdHlsZVNoZWV0cyk7Ci0gICAgCi0gICAgT3B0aW9uYWw8VmVj
dG9yPFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyRGF0YT4+IG1lc3NhZ2VIYW5kbGVyczsKLSAgICBk
ZWNvZGVyID4+IG1lc3NhZ2VIYW5kbGVyczsKLSAgICBpZiAoIW1lc3NhZ2VIYW5kbGVycykKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVy
cyA9IFdURk1vdmUoKm1lc3NhZ2VIYW5kbGVycyk7Ci0gICAgCi0jaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKLSAgICBPcHRpb25hbDxWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgV2ViQ29t
cGlsZWRDb250ZW50UnVsZUxpc3REYXRhPj4+IGNvbnRlbnRSdWxlTGlzdHM7Ci0gICAgZGVjb2Rl
ciA+PiBjb250ZW50UnVsZUxpc3RzOwotICAgIGlmICghY29udGVudFJ1bGVMaXN0cykKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmNvbnRlbnRSdWxlTGlzdHMg
PSBXVEZNb3ZlKCpjb250ZW50UnVsZUxpc3RzKTsKLSNlbmRpZgorICAgIHBhcmFtZXRlcnMudXNl
ckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVycyA9IFdURk1vdmUoKnVzZXJDb250ZW50Q29udHJv
bGxlclBhcmFtZXRlcnMpOwogCiAgICAgT3B0aW9uYWw8T3B0aW9uYWw8V2ViQ29yZTo6Q29sb3I+
PiBiYWNrZ3JvdW5kQ29sb3I7CiAgICAgZGVjb2RlciA+PiBiYWNrZ3JvdW5kQ29sb3I7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5o
CShyZXZpc2lvbiAyNTkxNjMpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRp
b25QYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCwxMSBAQAogI2luY2x1
ZGUgIkRyYXdpbmdBcmVhSW5mby5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNp
bmNsdWRlICJTZXNzaW9uU3RhdGUuaCIKLSNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRSdWxl
TGlzdERhdGEuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzLmgi
CiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdy
b3VwRGF0YS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eUlkZW50aWZpZXIuaCIKICNpbmNsdWRl
ICJXZWJQcmVmZXJlbmNlc1N0b3JlLmgiCi0jaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyRGF0YVR5cGVzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BY3Rpdml0eVN0YXRlLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9Db2xvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRTaXplLmg+CkBA
IC0xOTQsMTQgKzE5Myw3IEBAIHN0cnVjdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAg
ICBib29sIGljZUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWQgeyB0cnVlIH07CiAgICAgYm9vbCBl
bnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZhY2VzRW5hYmxlZCB7IGZhbHNlIH07CiAKLSAgICAv
LyBVc2VyQ29udGVudENvbnRyb2xsZXIgbWVtYmVycwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29u
dGVudFdvcmxkSWRlbnRpZmllciwgU3RyaW5nPj4gdXNlckNvbnRlbnRXb3JsZHM7Ci0gICAgVmVj
dG9yPFdlYlVzZXJTY3JpcHREYXRhPiB1c2VyU2NyaXB0czsKLSAgICBWZWN0b3I8V2ViVXNlclN0
eWxlU2hlZXREYXRhPiB1c2VyU3R5bGVTaGVldHM7Ci0gICAgVmVjdG9yPFdlYlNjcmlwdE1lc3Nh
Z2VIYW5kbGVyRGF0YT4gbWVzc2FnZUhhbmRsZXJzOwotI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFdlYkNvbXBpbGVkQ29udGVudFJ1
bGVMaXN0RGF0YT4+IGNvbnRlbnRSdWxlTGlzdHM7Ci0jZW5kaWYKKyAgICBVc2VyQ29udGVudENv
bnRyb2xsZXJQYXJhbWV0ZXJzIHVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnM7CiAKICAg
ICBPcHRpb25hbDxXZWJDb3JlOjpDb2xvcj4gYmFja2dyb3VuZENvbG9yOwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlUG9saWNpZXNEYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlUG9saWNpZXNEYXRhLmNwcAkocmV2aXNpb24gMjU5
MTYzKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZVBvbGljaWVzRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDYgQEAgdm9pZCBXZWJzaXRlUG9saWNpZXNEYXRhOjpl
bmNvZGUoSVBDOjpFbgogICAgIGVuY29kZXIgPDwgYWxsb3dlZEF1dG9wbGF5UXVpcmtzOwogICAg
IGVuY29kZXIgPDwgY3VzdG9tSGVhZGVyRmllbGRzOwogICAgIGVuY29kZXIgPDwgcG9wVXBQb2xp
Y3k7Ci0gICAgZW5jb2RlciA8PCB3ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczsKICAgICBlbmNv
ZGVyIDw8IGN1c3RvbVVzZXJBZ2VudDsKICAgICBlbmNvZGVyIDw8IGN1c3RvbVVzZXJBZ2VudEFz
U2l0ZVNwZWNpZmljUXVpcmtzOwogICAgIGVuY29kZXIgPDwgY3VzdG9tTmF2aWdhdG9yUGxhdGZv
cm07CkBAIC05MSwxMSArOTAsNiBAQCBPcHRpb25hbDxXZWJzaXRlUG9saWNpZXNEYXRhPiBXZWJz
aXRlUG9sCiAgICAgaWYgKCFwb3BVcFBvbGljeSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAotICAgIE9wdGlvbmFsPE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPj4g
d2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM7Ci0gICAgZGVjb2RlciA+PiB3ZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVyczsKLSAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzKQotICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCiAgICAgT3B0aW9uYWw8U3RyaW5nPiBjdXN0b21V
c2VyQWdlbnQ7CiAgICAgZGVjb2RlciA+PiBjdXN0b21Vc2VyQWdlbnQ7CiAgICAgaWYgKCFjdXN0
b21Vc2VyQWdlbnQpCkBAIC0xNTAsNyArMTQ0LDYgQEAgT3B0aW9uYWw8V2Vic2l0ZVBvbGljaWVz
RGF0YT4gV2Vic2l0ZVBvbAogI2VuZGlmCiAgICAgICAgIFdURk1vdmUoKmN1c3RvbUhlYWRlckZp
ZWxkcyksCiAgICAgICAgIFdURk1vdmUoKnBvcFVwUG9saWN5KSwKLSAgICAgICAgV1RGTW92ZSgq
d2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMpLAogICAgICAgICBXVEZNb3ZlKCpjdXN0b21Vc2Vy
QWdlbnQpLAogICAgICAgICBXVEZNb3ZlKCpjdXN0b21Vc2VyQWdlbnRBc1NpdGVTcGVjaWZpY1F1
aXJrcyksCiAgICAgICAgIFdURk1vdmUoKmN1c3RvbU5hdmlnYXRvclBsYXRmb3JtKSwKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVQb2xpY2llc0RhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlUG9saWNpZXNEYXRhLmgJKHJldmlzaW9uIDI1
OTE2MykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVQb2xpY2llc0RhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiV2Vic2l0ZUF1dG9wbGF5
UG9saWN5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZUF1dG9wbGF5UXVpcmsuaCIKLSNpbmNsdWRlICJX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIldlYnNpdGVMZWdhY3lPdmVy
Zmxvd1Njcm9sbGluZ1RvdWNoUG9saWN5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZU1lZGlhU291cmNl
UG9saWN5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZU1ldGFWaWV3cG9ydFBvbGljeS5oIgpAQCAtNjAs
NyArNTksNiBAQCBzdHJ1Y3QgV2Vic2l0ZVBvbGljaWVzRGF0YSB7CiAjZW5kaWYKICAgICBWZWN0
b3I8V2ViQ29yZTo6Q3VzdG9tSGVhZGVyRmllbGRzPiBjdXN0b21IZWFkZXJGaWVsZHM7CiAgICAg
V2Vic2l0ZVBvcFVwUG9saWN5IHBvcFVwUG9saWN5IHsgV2Vic2l0ZVBvcFVwUG9saWN5OjpEZWZh
dWx0IH07Ci0gICAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IHdlYnNpdGVE
YXRhU3RvcmVQYXJhbWV0ZXJzOwogICAgIFN0cmluZyBjdXN0b21Vc2VyQWdlbnQ7CiAgICAgU3Ry
aW5nIGN1c3RvbVVzZXJBZ2VudEFzU2l0ZVNwZWNpZmljUXVpcmtzOwogICAgIFN0cmluZyBjdXN0
b21OYXZpZ2F0b3JQbGF0Zm9ybTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zp
c2lvbmFsUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Qcm92aXNpb25hbFBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDI1OTE2MykKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlByb3Zpc2lvbmFsUGFnZVByb3h5LmgiCiAKICNp
bmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCisjaW5jbHVkZSAiQVBJV2Vic2l0ZVBvbGljaWVzLmgi
CiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgogI2luY2x1ZGUgIkZvcm1EYXRhUmVmZXJl
bmNlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAtNTQsNyArNTUsNyBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKICNkZWZpbmUgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChjaGFubmVsLCBm
bXQsIC4uLikgUkVMRUFTRV9MT0dfSUYobV9wYWdlLmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgp
LCBjaGFubmVsLCAiJXAgLSBQcm92aXNpb25hbFBhZ2VQcm94eTo6IiBmbXQsIHRoaXMsICMjX19W
QV9BUkdTX18pCiAjZGVmaW5lIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQoY2hhbm5lbCwg
Zm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SX0lGKG1fcGFnZS5pc0Fsd2F5c09uTG9nZ2luZ0Fs
bG93ZWQoKSwgY2hhbm5lbCwgIiVwIC0gUHJvdmlzaW9uYWxQYWdlUHJveHk6OiIgZm10LCB0aGlz
LCAjI19fVkFfQVJHU19fKQogCi1Qcm92aXNpb25hbFBhZ2VQcm94eTo6UHJvdmlzaW9uYWxQYWdl
UHJveHkoV2ViUGFnZVByb3h5JiBwYWdlLCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIHByb2Nlc3Ms
IHN0ZDo6dW5pcXVlX3B0cjxTdXNwZW5kZWRQYWdlUHJveHk+IHN1c3BlbmRlZFBhZ2UsIHVpbnQ2
NF90IG5hdmlnYXRpb25JRCwgYm9vbCBpc1NlcnZlclJlZGlyZWN0LCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJv
Y2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCkKK1Byb3Zpc2lvbmFsUGFnZVByb3h5OjpQcm92aXNp
b25hbFBhZ2VQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIFJlZjxXZWJQcm9jZXNzUHJveHk+JiYg
cHJvY2Vzcywgc3RkOjp1bmlxdWVfcHRyPFN1c3BlbmRlZFBhZ2VQcm94eT4gc3VzcGVuZGVkUGFn
ZSwgdWludDY0X3QgbmF2aWdhdGlvbklELCBib29sIGlzU2VydmVyUmVkaXJlY3QsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNs
aWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBBUEk6OldlYnNpdGVQb2xpY2llcyog
d2Vic2l0ZVBvbGljaWVzKQogICAgIDogbV9wYWdlKHBhZ2UpCiAgICAgLCBtX3dlYlBhZ2VJRChz
dXNwZW5kZWRQYWdlID8gc3VzcGVuZGVkUGFnZS0+d2ViUGFnZUlEKCkgOiBQYWdlSWRlbnRpZmll
cjo6Z2VuZXJhdGUoKSkKICAgICAsIG1fcHJvY2VzcyhXVEZNb3ZlKHByb2Nlc3MpKQpAQCAtODgs
NyArODksNyBAQCBQcm92aXNpb25hbFBhZ2VQcm94eTo6UHJvdmlzaW9uYWxQYWdlUHJvCiAgICAg
ICAgIG1fcHJvY2Vzcy0+ZnJhbWVDcmVhdGVkKHN1c3BlbmRlZFBhZ2UtPm1haW5GcmFtZUlEKCks
ICptX21haW5GcmFtZSk7CiAgICAgfQogCi0gICAgaW5pdGlhbGl6ZVdlYlBhZ2UoKTsKKyAgICBp
bml0aWFsaXplV2ViUGFnZSh3ZWJzaXRlUG9saWNpZXMpOwogCiAgICAgbV9wYWdlLmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS5kaWRDcmVhdGVQcm92aXNpb25hbFBhZ2UoKnRoaXMpOwogfQpAQCAtMTM1
LDExICsxMzYsMTEgQEAgdm9pZCBQcm92aXNpb25hbFBhZ2VQcm94eTo6Y2FuY2VsKCkKICAgICBk
aWRGYWlsUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUobV9tYWluRnJhbWUtPmZyYW1lSUQoKSwgeyB9
LCB7IH0sIG1fbmF2aWdhdGlvbklELCBtX3Byb3Zpc2lvbmFsTG9hZFVSTCwgZXJyb3IsIFdlYkNv
cmU6OldpbGxDb250aW51ZUxvYWRpbmc6Ok5vLCBVc2VyRGF0YSB7IH0pOyAvLyBXaWxsIGRlbGV0
ZSB8dGhpc3wuCiB9CiAKLXZvaWQgUHJvdmlzaW9uYWxQYWdlUHJveHk6OmluaXRpYWxpemVXZWJQ
YWdlKCkKK3ZvaWQgUHJvdmlzaW9uYWxQYWdlUHJveHk6OmluaXRpYWxpemVXZWJQYWdlKFJlZlB0
cjxBUEk6OldlYnNpdGVQb2xpY2llcz4mJiB3ZWJzaXRlUG9saWNpZXMpCiB7CiAgICAgbV9kcmF3
aW5nQXJlYSA9IG1fcGFnZS5wYWdlQ2xpZW50KCkuY3JlYXRlRHJhd2luZ0FyZWFQcm94eShtX3By
b2Nlc3MpOwogCi0gICAgYXV0byBwYXJhbWV0ZXJzID0gbV9wYWdlLmNyZWF0aW9uUGFyYW1ldGVy
cyhtX3Byb2Nlc3MsICptX2RyYXdpbmdBcmVhKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBtX3Bh
Z2UuY3JlYXRpb25QYXJhbWV0ZXJzKG1fcHJvY2VzcywgKm1fZHJhd2luZ0FyZWEsIFdURk1vdmUo
d2Vic2l0ZVBvbGljaWVzKSk7CiAgICAgcGFyYW1ldGVycy5pc1Byb2Nlc3NTd2FwID0gdHJ1ZTsK
ICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkNyZWF0ZVdlYlBhZ2Uo
bV93ZWJQYWdlSUQsIHBhcmFtZXRlcnMpLCAwKTsKICAgICBtX3Byb2Nlc3MtPmFkZFZpc2l0ZWRM
aW5rU3RvcmVVc2VyKG1fcGFnZS52aXNpdGVkTGlua1N0b3JlKCksIG1fcGFnZS5pZGVudGlmaWVy
KCkpOwpAQCAtMTY4LDcgKzE2OSw3IEBAIHZvaWQgUHJvdmlzaW9uYWxQYWdlUHJveHk6OmxvYWRS
ZXF1ZXN0KEEKICAgICBtX3BhZ2UubG9hZFJlcXVlc3RXaXRoTmF2aWdhdGlvblNoYXJlZChtX3By
b2Nlc3MuY29weVJlZigpLCBtX3dlYlBhZ2VJRCwgbmF2aWdhdGlvbiwgV1RGTW92ZShyZXF1ZXN0
KSwgbmF2aWdhdGlvbi5sYXN0TmF2aWdhdGlvbkFjdGlvbigpLnNob3VsZE9wZW5FeHRlcm5hbFVS
THNQb2xpY3ksIHVzZXJEYXRhLCBXZWJDb3JlOjpTaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQ6
OlllcywgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiwgaGFzTmF2aWdhdGVkQXdheUZyb21B
cHBCb3VuZERvbWFpbiwgV1RGTW92ZSh3ZWJzaXRlUG9saWNpZXMpKTsKIH0KIAotdm9pZCBQcm92
aXNpb25hbFBhZ2VQcm94eTo6Z29Ub0JhY2tGb3J3YXJkSXRlbShBUEk6Ok5hdmlnYXRpb24mIG5h
dmlnYXRpb24sIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0sIE9wdGlvbmFsPFdlYnNpdGVQ
b2xpY2llc0RhdGE+JiYgd2Vic2l0ZVBvbGljaWVzKQordm9pZCBQcm92aXNpb25hbFBhZ2VQcm94
eTo6Z29Ub0JhY2tGb3J3YXJkSXRlbShBUEk6Ok5hdmlnYXRpb24mIG5hdmlnYXRpb24sIFdlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0sIFJlZlB0cjxBUEk6OldlYnNpdGVQb2xpY2llcz4mJiB3
ZWJzaXRlUG9saWNpZXMpCiB7CiAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChQcm9jZXNzU3dh
cHBpbmcsICJnb1RvQmFja0ZvcndhcmRJdGVtOiBwYWdlUHJveHlJRD0lIiBQUkl1NjQgIiB3ZWJQ
YWdlSUQ9JSIgUFJJdTY0LCBtX3BhZ2UuaWRlbnRpZmllcigpLnRvVUludDY0KCksIG1fd2ViUGFn
ZUlELnRvVUludDY0KCkpOwogCkBAIC0xNzksOCArMTgwLDEzIEBAIHZvaWQgUHJvdmlzaW9uYWxQ
YWdlUHJveHk6OmdvVG9CYWNrRm9yd2EKICAgICAgICAgfQogICAgICAgICByZXR1cm4gJml0ZW0g
IT0gdGFyZ2V0SXRlbTsKICAgICB9KTsKKyAgICAKKyAgICBPcHRpb25hbDxXZWJzaXRlUG9saWNp
ZXNEYXRhPiB3ZWJzaXRlUG9saWNpZXNEYXRhOworICAgIGlmICh3ZWJzaXRlUG9saWNpZXMpCisg
ICAgICAgIHdlYnNpdGVQb2xpY2llc0RhdGEgPSB3ZWJzaXRlUG9saWNpZXMtPmRhdGEoKTsKKyAg
ICAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpVcGRhdGVCYWNrRm9yd2FyZExpc3RGb3JS
ZWF0dGFjaChXVEZNb3ZlKGl0ZW1TdGF0ZXMpKSk7Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6R29Ub0JhY2tGb3J3YXJkSXRlbShuYXZpZ2F0aW9uLm5hdmlnYXRpb25JRCgpLCBpdGVtLml0
ZW1JRCgpLCAqbmF2aWdhdGlvbi5iYWNrRm9yd2FyZEZyYW1lTG9hZFR5cGUoKSwgV2ViQ29yZTo6
U2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkOjpZZXMsIFdURk1vdmUod2Vic2l0ZVBvbGljaWVz
KSkpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdvVG9CYWNrRm9yd2FyZEl0ZW0obmF2
aWdhdGlvbi5uYXZpZ2F0aW9uSUQoKSwgaXRlbS5pdGVtSUQoKSwgKm5hdmlnYXRpb24uYmFja0Zv
cndhcmRGcmFtZUxvYWRUeXBlKCksIFdlYkNvcmU6OlNob3VsZFRyZWF0QXNDb250aW51aW5nTG9h
ZDo6WWVzLCBXVEZNb3ZlKHdlYnNpdGVQb2xpY2llc0RhdGEpKSk7CiAgICAgbV9wcm9jZXNzLT5z
dGFydFJlc3BvbnNpdmVuZXNzVGltZXIoKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCShyZXZpc2lvbiAyNTkxNjMpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02OSw3ICs2OSw3IEBAIHVzaW5nIExheWVySG9zdGluZ0NvbnRleHRJRCA9IHVpbnQz
Ml90OwogY2xhc3MgUHJvdmlzaW9uYWxQYWdlUHJveHkgOiBwdWJsaWMgSVBDOjpNZXNzYWdlUmVj
ZWl2ZXIsIHB1YmxpYyBJUEM6Ok1lc3NhZ2VTZW5kZXIsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxQ
cm92aXNpb25hbFBhZ2VQcm94eT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIFByb3Zpc2lvbmFsUGFnZVByb3h5KFdlYlBhZ2VQcm94eSYsIFJlZjxXZWJQcm9j
ZXNzUHJveHk+JiYsIHN0ZDo6dW5pcXVlX3B0cjxTdXNwZW5kZWRQYWdlUHJveHk+LCB1aW50NjRf
dCBuYXZpZ2F0aW9uSUQsIGJvb2wgaXNTZXJ2ZXJSZWRpcmVjdCwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCk7CisgICAgUHJvdmlz
aW9uYWxQYWdlUHJveHkoV2ViUGFnZVByb3h5JiwgUmVmPFdlYlByb2Nlc3NQcm94eT4mJiwgc3Rk
Ojp1bmlxdWVfcHRyPFN1c3BlbmRlZFBhZ2VQcm94eT4sIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwg
Ym9vbCBpc1NlcnZlclJlZGlyZWN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBQ
cm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBBUEk6OldlYnNpdGVQb2xpY2llcyopOwogICAg
IH5Qcm92aXNpb25hbFBhZ2VQcm94eSgpOwogCiAgICAgV2ViUGFnZVByb3h5JiBwYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9wYWdlOyB9CkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgbG9hZERhdGEoQVBJOjpOYXZpZ2F0aW9uJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwg
Y29uc3QgU3RyaW5nJiBNSU1FVHlwZSwgY29uc3QgU3RyaW5nJiBlbmNvZGluZywgY29uc3QgU3Ry
aW5nJiBiYXNlVVJMLCBBUEk6Ok9iamVjdCogdXNlckRhdGEsIE5hdmlnYXRpbmdUb0FwcEJvdW5k
RG9tYWluLCBOYXZpZ2F0ZWRBd2F5RnJvbUFwcEJvdW5kRG9tYWluLCBPcHRpb25hbDxXZWJzaXRl
UG9saWNpZXNEYXRhPiYmID0gV1RGOjpudWxsb3B0KTsKICAgICB2b2lkIGxvYWRSZXF1ZXN0KEFQ
STo6TmF2aWdhdGlvbiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBBUEk6Ok9iamVjdCog
dXNlckRhdGEsIE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluLCBOYXZpZ2F0ZWRBd2F5RnJvbUFw
cEJvdW5kRG9tYWluLCBPcHRpb25hbDxXZWJzaXRlUG9saWNpZXNEYXRhPiYmID0gV1RGOjpudWxs
b3B0KTsKLSAgICB2b2lkIGdvVG9CYWNrRm9yd2FyZEl0ZW0oQVBJOjpOYXZpZ2F0aW9uJiwgV2Vi
QmFja0ZvcndhcmRMaXN0SXRlbSYsIE9wdGlvbmFsPFdlYnNpdGVQb2xpY2llc0RhdGE+JiYpOwor
ICAgIHZvaWQgZ29Ub0JhY2tGb3J3YXJkSXRlbShBUEk6Ok5hdmlnYXRpb24mLCBXZWJCYWNrRm9y
d2FyZExpc3RJdGVtJiwgUmVmUHRyPEFQSTo6V2Vic2l0ZVBvbGljaWVzPiYmKTsKICAgICB2b2lk
IGNhbmNlbCgpOwogCiAgICAgdm9pZCB1bmZyZWV6ZUxheWVyVHJlZUR1ZVRvU3dpcGVBbmltYXRp
b24oKTsKQEAgLTE0Myw3ICsxNDMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkQ3JlYXRlQ29u
dGV4dEZvclZpc2liaWxpdHlQcm9wYWdhdGlvbihMYXllckhvc3RpbmdDb250ZXh0SUQpOwogI2Vu
ZGlmCiAKLSAgICB2b2lkIGluaXRpYWxpemVXZWJQYWdlKCk7CisgICAgdm9pZCBpbml0aWFsaXpl
V2ViUGFnZShSZWZQdHI8QVBJOjpXZWJzaXRlUG9saWNpZXM+JiYpOwogICAgIGJvb2wgdmFsaWRh
dGVJbnB1dChXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIsIGNvbnN0IE9wdGlvbmFsPHVpbnQ2NF90
PiYgbmF2aWdhdGlvbklEID0gV1RGOjpudWxsb3B0KTsKIAogICAgIFdlYlBhZ2VQcm94eSYgbV9w
YWdlOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZp
c2lvbiAyNTkxNjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMTY4LDMxICszMTY4LDMxIEBAIHZvaWQgV2ViUGFnZVByb3h5
Ojppc05hdmlnYXRpbmdUb0FwcEJvdW4KICAgICBjb21wbGV0aW9uSGFuZGxlcihtX2lzTmF2aWdh
dGluZ1RvQXBwQm91bmREb21haW4gPT0gTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW46Olllcyk7
CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpyZWNlaXZlZE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lv
bihQb2xpY3lBY3Rpb24gcG9saWN5QWN0aW9uLCBBUEk6Ok5hdmlnYXRpb24qIG5hdmlnYXRpb24s
IFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVu
dCwgV2ViRnJhbWVQcm94eSYgZnJhbWUsIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBwb2xpY2llcywg
UmVmPFBvbGljeURlY2lzaW9uU2VuZGVyPiYmIHNlbmRlcikKK3ZvaWQgV2ViUGFnZVByb3h5Ojpy
ZWNlaXZlZE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbihQb2xpY3lBY3Rpb24gcG9saWN5QWN0aW9u
LCBBUEk6Ok5hdmlnYXRpb24qIG5hdmlnYXRpb24sIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGll
bnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgV2ViRnJhbWVQcm94eSYgZnJhbWUsIFJl
ZlB0cjxBUEk6OldlYnNpdGVQb2xpY2llcz4mJiBwb2xpY2llcywgUmVmPFBvbGljeURlY2lzaW9u
U2VuZGVyPiYmIHNlbmRlcikKIHsKICAgICBSZWY8V2Vic2l0ZURhdGFTdG9yZT4gd2Vic2l0ZURh
dGFTdG9yZSA9IG1fd2Vic2l0ZURhdGFTdG9yZS5jb3B5UmVmKCk7Ci0gICAgT3B0aW9uYWw8V2Vi
c2l0ZVBvbGljaWVzRGF0YT4gZGF0YTsKICAgICBpZiAocG9saWNpZXMpIHsKLSAgICAgICAgZGF0
YSA9IHBvbGljaWVzLT5kYXRhKCk7CiAgICAgICAgIGlmIChwb2xpY2llcy0+d2Vic2l0ZURhdGFT
dG9yZSgpICYmIHBvbGljaWVzLT53ZWJzaXRlRGF0YVN0b3JlKCkgIT0gd2Vic2l0ZURhdGFTdG9y
ZS5wdHIoKSkgewogICAgICAgICAgICAgd2Vic2l0ZURhdGFTdG9yZSA9ICpwb2xpY2llcy0+d2Vi
c2l0ZURhdGFTdG9yZSgpOwogICAgICAgICAgICAgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVu
dCA9IFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQ6OlllczsKICAgICAgICAgfQorICAgICAg
ICBpZiAocG9saWNpZXMtPnVzZXJDb250ZW50Q29udHJvbGxlcigpICYmIHBvbGljaWVzLT51c2Vy
Q29udGVudENvbnRyb2xsZXIoKSAhPSBtX3VzZXJDb250ZW50Q29udHJvbGxlci5wdHIoKSkKKyAg
ICAgICAgICAgIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgPSBQcm9jZXNzU3dhcFJlcXVl
c3RlZEJ5Q2xpZW50OjpZZXM7CiAgICAgfQogCiAgICAgaWYgKG5hdmlnYXRpb24gJiYgIW5hdmln
YXRpb24tPnVzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQoKSkgewotICAgICAgICBpZiAoIWRh
dGEpCi0gICAgICAgICAgICBkYXRhID0gV2Vic2l0ZVBvbGljaWVzRGF0YSB7IH07Ci0gICAgICAg
IGRhdGEtPmNvbnRlbnRCbG9ja2Vyc0VuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKCFwb2xp
Y2llcykKKyAgICAgICAgICAgIHBvbGljaWVzID0gQVBJOjpXZWJzaXRlUG9saWNpZXM6OmNyZWF0
ZSgpOworICAgICAgICBwb2xpY2llcy0+c2V0Q29udGVudEJsb2NrZXJzRW5hYmxlZChmYWxzZSk7
CiAgICAgfQogCiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKLSAgICBpZiAobmF2aWdh
dGlvbiAmJiAoIWRhdGEgfHwgZGF0YS0+ZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NT
dGF0ZSA9PSBXZWJDb3JlOjpEZXZpY2VPcmllbnRhdGlvbk9yTW90aW9uUGVybWlzc2lvblN0YXRl
OjpQcm9tcHQpKSB7CisgICAgaWYgKG5hdmlnYXRpb24gJiYgKCFwb2xpY2llcyB8fCBwb2xpY2ll
cy0+ZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NTdGF0ZSgpID09IFdlYkNvcmU6OkRl
dmljZU9yaWVudGF0aW9uT3JNb3Rpb25QZXJtaXNzaW9uU3RhdGU6OlByb21wdCkpIHsKICAgICAg
ICAgYXV0byBkZXZpY2VPcmllbnRhdGlvblBlcm1pc3Npb24gPSB3ZWJzaXRlRGF0YVN0b3JlLT5k
ZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXIoKS5jYWNoZWREZXZpY2VP
cmllbnRhdGlvblBlcm1pc3Npb24oU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tVVJMKG5hdmlnYXRp
b24tPmN1cnJlbnRSZXF1ZXN0KCkudXJsKCkpKTsKICAgICAgICAgaWYgKGRldmljZU9yaWVudGF0
aW9uUGVybWlzc2lvbiAhPSBXZWJDb3JlOjpEZXZpY2VPcmllbnRhdGlvbk9yTW90aW9uUGVybWlz
c2lvblN0YXRlOjpQcm9tcHQpIHsKLSAgICAgICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAg
ICAgICBkYXRhID0gV2Vic2l0ZVBvbGljaWVzRGF0YSB7IH07Ci0gICAgICAgICAgICBkYXRhLT5k
ZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc1N0YXRlID0gZGV2aWNlT3JpZW50YXRpb25Q
ZXJtaXNzaW9uOworICAgICAgICAgICAgaWYgKCFwb2xpY2llcykKKyAgICAgICAgICAgICAgICBw
b2xpY2llcyA9IEFQSTo6V2Vic2l0ZVBvbGljaWVzOjpjcmVhdGUoKTsKKyAgICAgICAgICAgIHBv
bGljaWVzLT5zZXREZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc1N0YXRlKGRldmljZU9y
aWVudGF0aW9uUGVybWlzc2lvbik7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKQEAgLTMyMDYs
NyArMzIwNiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZWNlaXZlZE5hdmlnYXRpb25Qb2wKICAg
ICAgICAgcG9saWN5QWN0aW9uID0gUG9saWN5QWN0aW9uOjpEb3dubG9hZDsKIAogICAgIGlmIChw
b2xpY3lBY3Rpb24gIT0gUG9saWN5QWN0aW9uOjpVc2UgfHwgIWZyYW1lLmlzTWFpbkZyYW1lKCkg
fHwgIW5hdmlnYXRpb24pIHsKLSAgICAgICAgcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihwb2xpY3lB
Y3Rpb24sIG5hdmlnYXRpb24sIFdURk1vdmUoZGF0YSksIFdURk1vdmUoc2VuZGVyKSk7CisgICAg
ICAgIHJlY2VpdmVkUG9saWN5RGVjaXNpb24ocG9saWN5QWN0aW9uLCBuYXZpZ2F0aW9uLCBXVEZN
b3ZlKHBvbGljaWVzKSwgV1RGTW92ZShzZW5kZXIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMzIyMCwxMCArMzIyMCwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVjZWl2ZWROYXZp
Z2F0aW9uUG9sCiAgICAgfQogCiAgICAgcHJvY2VzcygpLnByb2Nlc3NQb29sKCkucHJvY2Vzc0Zv
ck5hdmlnYXRpb24oKnRoaXMsICpuYXZpZ2F0aW9uLCBzb3VyY2VQcm9jZXNzLmNvcHlSZWYoKSwg
c291cmNlVVJMLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBXVEZNb3ZlKHdlYnNpdGVE
YXRhU3RvcmUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwb2xpY3lB
Y3Rpb24sIG5hdmlnYXRpb24gPSBtYWtlUmVmKCpuYXZpZ2F0aW9uKSwgc291cmNlUHJvY2VzcyA9
IHNvdXJjZVByb2Nlc3MuY29weVJlZigpLAotICAgICAgICBkYXRhID0gV1RGTW92ZShkYXRhKSwg
c2VuZGVyID0gV1RGTW92ZShzZW5kZXIpLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50XSAo
UmVmPFdlYlByb2Nlc3NQcm94eT4mJiBwcm9jZXNzRm9yTmF2aWdhdGlvbiwgU3VzcGVuZGVkUGFn
ZVByb3h5KiBkZXN0aW5hdGlvblN1c3BlbmRlZFBhZ2UsIGNvbnN0IFN0cmluZyYgcmVhc29uKSBt
dXRhYmxlIHsKKyAgICAgICAgcG9saWNpZXMgPSBXVEZNb3ZlKHBvbGljaWVzKSwgc2VuZGVyID0g
V1RGTW92ZShzZW5kZXIpLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50XSAoUmVmPFdlYlBy
b2Nlc3NQcm94eT4mJiBwcm9jZXNzRm9yTmF2aWdhdGlvbiwgU3VzcGVuZGVkUGFnZVByb3h5KiBk
ZXN0aW5hdGlvblN1c3BlbmRlZFBhZ2UsIGNvbnN0IFN0cmluZyYgcmVhc29uKSBtdXRhYmxlIHsK
ICAgICAgICAgLy8gSWYgdGhlIG5hdmlnYXRpb24gaGFzIGJlZW4gZGVzdHJveWVkLCB0aGVuIG5v
IG5lZWQgdG8gcHJvY2VlZC4KICAgICAgICAgaWYgKGlzQ2xvc2VkKCkgfHwgIW5hdmlnYXRpb25T
dGF0ZSgpLmhhc05hdmlnYXRpb24obmF2aWdhdGlvbi0+bmF2aWdhdGlvbklEKCkpKSB7Ci0gICAg
ICAgICAgICByZWNlaXZlZFBvbGljeURlY2lzaW9uKHBvbGljeUFjdGlvbiwgbmF2aWdhdGlvbi5w
dHIoKSwgV1RGTW92ZShkYXRhKSwgV1RGTW92ZShzZW5kZXIpKTsKKyAgICAgICAgICAgIHJlY2Vp
dmVkUG9saWN5RGVjaXNpb24ocG9saWN5QWN0aW9uLCBuYXZpZ2F0aW9uLnB0cigpLCBXVEZNb3Zl
KHBvbGljaWVzKSwgV1RGTW92ZShzZW5kZXIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCkBAIC0zMjQ1LDE0ICszMjQ1LDE0IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZWNlaXZl
ZE5hdmlnYXRpb25Qb2wKICAgICAgICAgICAgIGlmIChzdXNwZW5kZWRQYWdlICYmIHN1c3BlbmRl
ZFBhZ2UtPnBhZ2VJc0Nsb3NlZE9yQ2xvc2luZygpKQogICAgICAgICAgICAgICAgIHN1c3BlbmRl
ZFBhZ2UgPSBudWxscHRyOwogCi0gICAgICAgICAgICBjb250aW51ZU5hdmlnYXRpb25Jbk5ld1By
b2Nlc3MobmF2aWdhdGlvbiwgV1RGTW92ZShzdXNwZW5kZWRQYWdlKSwgV1RGTW92ZShwcm9jZXNz
Rm9yTmF2aWdhdGlvbiksIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFdURk1vdmUoZGF0
YSkpOworICAgICAgICAgICAgY29udGludWVOYXZpZ2F0aW9uSW5OZXdQcm9jZXNzKG5hdmlnYXRp
b24sIFdURk1vdmUoc3VzcGVuZGVkUGFnZSksIFdURk1vdmUocHJvY2Vzc0Zvck5hdmlnYXRpb24p
LCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBzdGQ6OmV4Y2hhbmdlKHBvbGljaWVzLCBu
dWxscHRyKSk7CiAgICAgICAgIH0KIAotICAgICAgICByZWNlaXZlZFBvbGljeURlY2lzaW9uKHBv
bGljeUFjdGlvbiwgbmF2aWdhdGlvbi5wdHIoKSwgc2hvdWxkUHJvY2Vzc1N3YXAgPyBXVEY6Om51
bGxvcHQgOiBXVEZNb3ZlKGRhdGEpLCBXVEZNb3ZlKHNlbmRlciksIHNob3VsZFByb2Nlc3NTd2Fw
ID8gV2lsbENvbnRpbnVlTG9hZEluTmV3UHJvY2Vzczo6WWVzIDogV2lsbENvbnRpbnVlTG9hZElu
TmV3UHJvY2Vzczo6Tm8pOworICAgICAgICByZWNlaXZlZFBvbGljeURlY2lzaW9uKHBvbGljeUFj
dGlvbiwgbmF2aWdhdGlvbi5wdHIoKSwgc2hvdWxkUHJvY2Vzc1N3YXAgPyBudWxscHRyIDogV1RG
TW92ZShwb2xpY2llcyksIFdURk1vdmUoc2VuZGVyKSwgc2hvdWxkUHJvY2Vzc1N3YXAgPyBXaWxs
Q29udGludWVMb2FkSW5OZXdQcm9jZXNzOjpZZXMgOiBXaWxsQ29udGludWVMb2FkSW5OZXdQcm9j
ZXNzOjpObyk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpyZWNlaXZlZFBvbGlj
eURlY2lzaW9uKFBvbGljeUFjdGlvbiBhY3Rpb24sIEFQSTo6TmF2aWdhdGlvbiogbmF2aWdhdGlv
biwgT3B0aW9uYWw8V2Vic2l0ZVBvbGljaWVzRGF0YT4mJiB3ZWJzaXRlUG9saWNpZXMsIFJlZjxQ
b2xpY3lEZWNpc2lvblNlbmRlcj4mJiBzZW5kZXIsIFdpbGxDb250aW51ZUxvYWRJbk5ld1Byb2Nl
c3Mgd2lsbENvbnRpbnVlTG9hZEluTmV3UHJvY2VzcykKK3ZvaWQgV2ViUGFnZVByb3h5OjpyZWNl
aXZlZFBvbGljeURlY2lzaW9uKFBvbGljeUFjdGlvbiBhY3Rpb24sIEFQSTo6TmF2aWdhdGlvbiog
bmF2aWdhdGlvbiwgUmVmUHRyPEFQSTo6V2Vic2l0ZVBvbGljaWVzPiYmIHdlYnNpdGVQb2xpY2ll
cywgUmVmPFBvbGljeURlY2lzaW9uU2VuZGVyPiYmIHNlbmRlciwgV2lsbENvbnRpbnVlTG9hZElu
TmV3UHJvY2VzcyB3aWxsQ29udGludWVMb2FkSW5OZXdQcm9jZXNzKQogewogICAgIGlmICghaGFz
UnVubmluZ1Byb2Nlc3MoKSkgewogICAgICAgICBzZW5kZXItPnNlbmQoUG9saWN5RGVjaXNpb24g
eyBzZW5kZXItPmlkZW50aWZpZXIoKSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpLCBo
YXNOYXZpZ2F0ZWRBd2F5RnJvbUFwcEJvdW5kRG9tYWluKCksIFBvbGljeUFjdGlvbjo6SWdub3Jl
LCAwLCBEb3dubG9hZElEKCksIFdURjo6bnVsbG9wdCB9KTsKQEAgLTMyNzcsOCArMzI3NywxMiBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVjZWl2ZWRQb2xpY3lEZWNpc2lvCiAgICAgICAgIGhhbmRs
ZURvd25sb2FkUmVxdWVzdChkb3dubG9hZCk7CiAgICAgICAgIG1fZGVjaWRlUG9saWN5Rm9yUmVz
cG9uc2VSZXF1ZXN0ID0geyB9OwogICAgIH0KKyAgICAKKyAgICBPcHRpb25hbDxXZWJzaXRlUG9s
aWNpZXNEYXRhPiB3ZWJzaXRlUG9saWNpZXNEYXRhOworICAgIGlmICh3ZWJzaXRlUG9saWNpZXMp
CisgICAgICAgIHdlYnNpdGVQb2xpY2llc0RhdGEgPSB3ZWJzaXRlUG9saWNpZXMtPmRhdGEoKTsK
IAotICAgIHNlbmRlci0+c2VuZChQb2xpY3lEZWNpc2lvbiB7IHNlbmRlci0+aWRlbnRpZmllcigp
LCBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKCksIGhhc05hdmlnYXRlZEF3YXlGcm9tQXBw
Qm91bmREb21haW4oKSwgYWN0aW9uLCBuYXZpZ2F0aW9uID8gbmF2aWdhdGlvbi0+bmF2aWdhdGlv
bklEKCkgOiAwLCBkb3dubG9hZElELCBXVEZNb3ZlKHdlYnNpdGVQb2xpY2llcykgfSk7CisgICAg
c2VuZGVyLT5zZW5kKFBvbGljeURlY2lzaW9uIHsgc2VuZGVyLT5pZGVudGlmaWVyKCksIGlzTmF2
aWdhdGluZ1RvQXBwQm91bmREb21haW4oKSwgaGFzTmF2aWdhdGVkQXdheUZyb21BcHBCb3VuZERv
bWFpbigpLCBhY3Rpb24sIG5hdmlnYXRpb24gPyBuYXZpZ2F0aW9uLT5uYXZpZ2F0aW9uSUQoKSA6
IDAsIGRvd25sb2FkSUQsIFdURk1vdmUod2Vic2l0ZVBvbGljaWVzRGF0YSkgfSk7CiB9CiAKIHZv
aWQgV2ViUGFnZVByb3h5Ojpjb21taXRQcm92aXNpb25hbFBhZ2UoRnJhbWVJZGVudGlmaWVyIGZy
YW1lSUQsIEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8sIFJlc291cmNlUmVxdWVzdCYmIHJlcXVl
c3QsIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBm
cmFtZUhhc0N1c3RvbUNvbnRlbnRQcm92aWRlciwgdWludDMyX3QgZnJhbWVMb2FkVHlwZSwgY29u
c3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGJvb2wgdXNlZExl
Z2FjeVRMUywgYm9vbCBjb250YWluc1BsdWdpbkRvY3VtZW50LCBPcHRpb25hbDxXZWJDb3JlOjpI
YXNJbnNlY3VyZUNvbnRlbnQ+IGZvcmNlZEhhc0luc2VjdXJlQ29udGVudCwgY29uc3QgVXNlckRh
dGEmIHVzZXJEYXRhKQpAQCAtMzMyMCw3ICszMzI0LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNv
bW1pdFByb3Zpc2lvbmFsUGFnZQogICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGlkQ29tbWl0
UHJvdmlzaW9uYWxQYWdlKG9sZFdlYlBhZ2VJRCwgbV93ZWJQYWdlSUQpOwogfQogCi12b2lkIFdl
YlBhZ2VQcm94eTo6Y29udGludWVOYXZpZ2F0aW9uSW5OZXdQcm9jZXNzKEFQSTo6TmF2aWdhdGlv
biYgbmF2aWdhdGlvbiwgc3RkOjp1bmlxdWVfcHRyPFN1c3BlbmRlZFBhZ2VQcm94eT4mJiBzdXNw
ZW5kZWRQYWdlLCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIG5ld1Byb2Nlc3MsIFByb2Nlc3NTd2Fw
UmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgT3B0aW9uYWw8
V2Vic2l0ZVBvbGljaWVzRGF0YT4mJiB3ZWJzaXRlUG9saWNpZXMpCit2b2lkIFdlYlBhZ2VQcm94
eTo6Y29udGludWVOYXZpZ2F0aW9uSW5OZXdQcm9jZXNzKEFQSTo6TmF2aWdhdGlvbiYgbmF2aWdh
dGlvbiwgc3RkOjp1bmlxdWVfcHRyPFN1c3BlbmRlZFBhZ2VQcm94eT4mJiBzdXNwZW5kZWRQYWdl
LCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIG5ld1Byb2Nlc3MsIFByb2Nlc3NTd2FwUmVxdWVzdGVk
QnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPEFQSTo6V2Vic2l0
ZVBvbGljaWVzPiYmIHdlYnNpdGVQb2xpY2llcykKIHsKICAgICBSRUxFQVNFX0xPR19JRl9BTExP
V0VEKExvYWRpbmcsICJjb250aW51ZU5hdmlnYXRpb25Jbk5ld1Byb2Nlc3M6IG5ld1Byb2Nlc3NQ
SUQgPSAlaSwgaGFzU3VzcGVuZGVkUGFnZSA9ICVpIiwgbmV3UHJvY2Vzcy0+cHJvY2Vzc0lkZW50
aWZpZXIoKSwgISFzdXNwZW5kZWRQYWdlKTsKICAgICBMT0coTG9hZGluZywgIkNvbnRpbnVpbmcg
bmF2aWdhdGlvbiAlIiBQUkl1NjQgIiAnJXMnIGluIGEgbmV3IHdlYiBwcm9jZXNzIiwgbmF2aWdh
dGlvbi5uYXZpZ2F0aW9uSUQoKSwgbmF2aWdhdGlvbi5sb2dnaW5nU3RyaW5nKCkpOwpAQCAtMzMz
Myw3ICszMzM3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNvbnRpbnVlTmF2aWdhdGlvbkluTgog
ICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZSA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgbV9wcm92
aXNpb25hbFBhZ2UgPSBtYWtlVW5pcXVlPFByb3Zpc2lvbmFsUGFnZVByb3h5PigqdGhpcywgV1RG
TW92ZShuZXdQcm9jZXNzKSwgV1RGTW92ZShzdXNwZW5kZWRQYWdlKSwgbmF2aWdhdGlvbi5uYXZp
Z2F0aW9uSUQoKSwgbmF2aWdhdGlvbi5jdXJyZW50UmVxdWVzdElzUmVkaXJlY3QoKSwgbmF2aWdh
dGlvbi5jdXJyZW50UmVxdWVzdCgpLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50KTsKKyAg
ICBtX3Byb3Zpc2lvbmFsUGFnZSA9IG1ha2VVbmlxdWU8UHJvdmlzaW9uYWxQYWdlUHJveHk+KCp0
aGlzLCBXVEZNb3ZlKG5ld1Byb2Nlc3MpLCBXVEZNb3ZlKHN1c3BlbmRlZFBhZ2UpLCBuYXZpZ2F0
aW9uLm5hdmlnYXRpb25JRCgpLCBuYXZpZ2F0aW9uLmN1cnJlbnRSZXF1ZXN0SXNSZWRpcmVjdCgp
LCBuYXZpZ2F0aW9uLmN1cnJlbnRSZXF1ZXN0KCksIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGll
bnQsIHdlYnNpdGVQb2xpY2llcy5nZXQoKSk7CiAKICAgICBhdXRvIGNvbnRpbnVhdGlvbiA9IFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIG5hdmlnYXRpb24gPSBtYWtlUmVm
KG5hdmlnYXRpb24pLCB3ZWJzaXRlUG9saWNpZXMgPSBXVEZNb3ZlKHdlYnNpdGVQb2xpY2llcyld
KCkgbXV0YWJsZSB7CiAgICAgICAgIGlmIChhdXRvKiBpdGVtID0gbmF2aWdhdGlvbi0+dGFyZ2V0
SXRlbSgpKSB7CkBAIC0zMzUyLDEyICszMzU2LDE2IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpjb250
aW51ZU5hdmlnYXRpb25Jbk4KICAgICAgICAgICAgIG1fcHJvdmlzaW9uYWxQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpTZXRDdXJyZW50SGlzdG9yeUl0ZW1Gb3JSZWF0dGFjaChtX2JhY2tG
b3J3YXJkTGlzdC0+Y3VycmVudEl0ZW0oKS0+aXRlbVN0YXRlKCkpKTsKICAgICAgICAgfQogCisg
ICAgICAgIE9wdGlvbmFsPFdlYnNpdGVQb2xpY2llc0RhdGE+IHdlYnNpdGVQb2xpY2llc0RhdGE7
CisgICAgICAgIGlmICh3ZWJzaXRlUG9saWNpZXMpCisgICAgICAgICAgICB3ZWJzaXRlUG9saWNp
ZXNEYXRhID0gd2Vic2l0ZVBvbGljaWVzLT5kYXRhKCk7CisKICAgICAgICAgLy8gRklYTUU6IFdv
cmsgb3V0IHRpbWluZyBvZiByZXNwb25kaW5nIHdpdGggdGhlIGxhc3QgcG9saWN5IGRlbGVnYXRl
LCBldGMKICAgICAgICAgQVNTRVJUKCFuYXZpZ2F0aW9uLT5jdXJyZW50UmVxdWVzdCgpLmlzRW1w
dHkoKSk7CiAgICAgICAgIGlmIChhdXRvJiBzdWJzdGl0dXRlRGF0YSA9IG5hdmlnYXRpb24tPnN1
YnN0aXR1dGVEYXRhKCkpCi0gICAgICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+bG9hZERhdGEo
bmF2aWdhdGlvbiwgeyBzdWJzdGl0dXRlRGF0YS0+Y29udGVudC5kYXRhKCksIHN1YnN0aXR1dGVE
YXRhLT5jb250ZW50LnNpemUoKSB9LCBzdWJzdGl0dXRlRGF0YS0+TUlNRVR5cGUsIHN1YnN0aXR1
dGVEYXRhLT5lbmNvZGluZywgc3Vic3RpdHV0ZURhdGEtPmJhc2VVUkwsIHN1YnN0aXR1dGVEYXRh
LT51c2VyRGF0YS5nZXQoKSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpLCBoYXNOYXZp
Z2F0ZWRBd2F5RnJvbUFwcEJvdW5kRG9tYWluKCksIFdURk1vdmUod2Vic2l0ZVBvbGljaWVzKSk7
CisgICAgICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+bG9hZERhdGEobmF2aWdhdGlvbiwgeyBz
dWJzdGl0dXRlRGF0YS0+Y29udGVudC5kYXRhKCksIHN1YnN0aXR1dGVEYXRhLT5jb250ZW50LnNp
emUoKSB9LCBzdWJzdGl0dXRlRGF0YS0+TUlNRVR5cGUsIHN1YnN0aXR1dGVEYXRhLT5lbmNvZGlu
Zywgc3Vic3RpdHV0ZURhdGEtPmJhc2VVUkwsIHN1YnN0aXR1dGVEYXRhLT51c2VyRGF0YS5nZXQo
KSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpLCBoYXNOYXZpZ2F0ZWRBd2F5RnJvbUFw
cEJvdW5kRG9tYWluKCksIFdURk1vdmUod2Vic2l0ZVBvbGljaWVzRGF0YSkpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+bG9hZFJlcXVlc3QobmF2aWdhdGlv
biwgUmVzb3VyY2VSZXF1ZXN0IHsgbmF2aWdhdGlvbi0+Y3VycmVudFJlcXVlc3QoKSB9LCBudWxs
cHRyLCBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKCksIGhhc05hdmlnYXRlZEF3YXlGcm9t
QXBwQm91bmREb21haW4oKSwgV1RGTW92ZSh3ZWJzaXRlUG9saWNpZXMpKTsKKyAgICAgICAgICAg
IG1fcHJvdmlzaW9uYWxQYWdlLT5sb2FkUmVxdWVzdChuYXZpZ2F0aW9uLCBSZXNvdXJjZVJlcXVl
c3QgeyBuYXZpZ2F0aW9uLT5jdXJyZW50UmVxdWVzdCgpIH0sIG51bGxwdHIsIGlzTmF2aWdhdGlu
Z1RvQXBwQm91bmREb21haW4oKSwgaGFzTmF2aWdhdGVkQXdheUZyb21BcHBCb3VuZERvbWFpbigp
LCBXVEZNb3ZlKHdlYnNpdGVQb2xpY2llc0RhdGEpKTsKICAgICB9OwogICAgIGlmIChtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPnNob3VsZFBhdXNlTG9hZGluZygqbV9wcm92aXNpb25hbFBhZ2UpKQog
ICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldENvbnRpbnVlTG9hZGluZ0NhbGxiYWNr
KCptX3Byb3Zpc2lvbmFsUGFnZSwgV1RGTW92ZShjb250aW51YXRpb24pKTsKQEAgLTUwOTQsNyAr
NTEwMiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2EKIAogI2lm
IEVOQUJMRShDT05URU5UX0ZJTFRFUklORykKICAgICBpZiAoZnJhbWUuZGlkSGFuZGxlQ29udGVu
dEZpbHRlclVuYmxvY2tOYXZpZ2F0aW9uKHJlcXVlc3QpKQotICAgICAgICByZXR1cm4gcmVjZWl2
ZWRQb2xpY3lEZWNpc2lvbihQb2xpY3lBY3Rpb246Oklnbm9yZSwgbV9uYXZpZ2F0aW9uU3RhdGUt
Pm5hdmlnYXRpb24obmF2aWdhdGlvbklEKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHNlbmRlcikp
OworICAgICAgICByZXR1cm4gcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihQb2xpY3lBY3Rpb246Okln
bm9yZSwgbV9uYXZpZ2F0aW9uU3RhdGUtPm5hdmlnYXRpb24obmF2aWdhdGlvbklEKSwgbnVsbHB0
ciwgV1RGTW92ZShzZW5kZXIpKTsKICNlbmRpZgogCiAgICAgU2hvdWxkRXhwZWN0U2FmZUJyb3dz
aW5nUmVzdWx0IHNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCA9IFNob3VsZEV4cGVjdFNh
ZmVCcm93c2luZ1Jlc3VsdDo6WWVzOwpAQCAtNTEyMCw3ICs1MTI4LDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmRlY2lkZVBvbGljeUZvck5hdmlnYQogICAgICAgICAgICAgICAgIGlmIChwb2xpY2ll
cykKICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbi0+c2V0RWZmZWN0aXZlQ29udGVudE1v
ZGUoZWZmZWN0aXZlQ29udGVudE1vZGVBZnRlckFkanVzdGluZ1BvbGljaWVzKCpwb2xpY2llcywg
bmF2aWdhdGlvbi0+Y3VycmVudFJlcXVlc3QoKSkpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmVjZWl2ZWROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24ocG9saWN5QWN0aW9uLCBuYXZpZ2F0
aW9uLmdldCgpLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBmcmFtZSwgcG9saWNpZXMu
Z2V0KCksIFdURk1vdmUoc2VuZGVyKSk7CisgICAgICAgICAgICByZWNlaXZlZE5hdmlnYXRpb25Q
b2xpY3lEZWNpc2lvbihwb2xpY3lBY3Rpb24sIG5hdmlnYXRpb24uZ2V0KCksIHByb2Nlc3NTd2Fw
UmVxdWVzdGVkQnlDbGllbnQsIGZyYW1lLCBXVEZNb3ZlKHBvbGljaWVzKSwgV1RGTW92ZShzZW5k
ZXIpKTsKICAgICAgICAgfTsKIAogICAgICAgICBpZiAoIW1fcGFnZUNsaWVudCkKQEAgLTUyOTIs
OCArNTMwMCw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW4KICAg
ICBNRVNTQUdFX0NIRUNLKG1fcHJvY2VzcywgZnJhbWUpOwogICAgIE1FU1NBR0VfQ0hFQ0tfVVJM
KG1fcHJvY2VzcywgcmVxdWVzdC51cmwoKSk7CiAKLSAgICBhdXRvIGxpc3RlbmVyID0gbWFrZVJl
ZihmcmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyksIGlkZW50aWZpZXIsIGxpc3RlbmVySUQsIGZyYW1lSURdIChQb2xpY3lB
Y3Rpb24gcG9saWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyosIFByb2Nlc3NTd2FwUmVx
dWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVC
cm93c2luZ1dhcm5pbmc+JiYgc2FmZUJyb3dzaW5nV2FybmluZywgTmF2aWdhdGluZ1RvQXBwQm91
bmREb21haW4gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbikgbXV0YWJsZSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBBc3NlcnQgdGhlIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBpcyBudWxscHRyIGhl
cmUgb25jZSBjbGllbnRzIG9mIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclVzZVdpdGhQb2xpY2llcyBn
byBhd2F5LgorICAgIGF1dG8gbGlzdGVuZXIgPSBtYWtlUmVmKGZyYW1lLT5zZXRVcFBvbGljeUxp
c3RlbmVyUHJveHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaWRlbnRp
ZmllciwgbGlzdGVuZXJJRCwgZnJhbWVJRF0gKFBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24sIEFQ
STo6V2Vic2l0ZVBvbGljaWVzKiBwb2xpY2llcywgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVu
dCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJyb3dzaW5nV2Fybmlu
Zz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5nLCBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiBpc05h
dmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKSBtdXRhYmxlIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIXBvbGljaWVzKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocHJvY2Vzc1N3YXBSZXF1ZXN0
ZWRCeUNsaWVudCA9PSBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50OjpObyk7CiAgICAgICAg
IEFTU0VSVF9VTlVTRUQoc2FmZUJyb3dzaW5nV2FybmluZywgIXNhZmVCcm93c2luZ1dhcm5pbmcp
OwogCkBAIC01MzAxLDcgKzUzMDksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5
Rm9yTmV3V2luCiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRSZWNlaXZl
UG9saWN5RGVjaXNpb24oZnJhbWVJRCwgbGlzdGVuZXJJRCwgcG9saWN5RGVjaXNpb24pKTsKICAg
ICAgICAgfSk7CiAKLSAgICAgICAgcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihwb2xpY3lBY3Rpb24s
IG51bGxwdHIsIFdURjo6bnVsbG9wdCwgV1RGTW92ZShzZW5kZXIpKTsKKyAgICAgICAgcmVjZWl2
ZWRQb2xpY3lEZWNpc2lvbihwb2xpY3lBY3Rpb24sIG51bGxwdHIsIG51bGxwdHIsIFdURk1vdmUo
c2VuZGVyKSk7CiAgICAgfSwgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0OjpObywgU2hv
dWxkRXhwZWN0QXBwQm91bmREb21haW5SZXN1bHQ6Ok5vKSk7CiAKICAgICBpZiAobV9wb2xpY3lD
bGllbnQpCkBAIC01MzQwLDggKzUzNDgsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9s
aWN5Rm9yUmVzcG9uCiAgICAgTUVTU0FHRV9DSEVDS19VUkwocHJvY2VzcywgcmVzcG9uc2UudXJs
KCkpOwogICAgIFJlZlB0cjxBUEk6Ok5hdmlnYXRpb24+IG5hdmlnYXRpb24gPSBuYXZpZ2F0aW9u
SUQgPyBtX25hdmlnYXRpb25TdGF0ZS0+bmF2aWdhdGlvbihuYXZpZ2F0aW9uSUQpIDogbnVsbHB0
cjsKICAgICBhdXRvIGxpc3RlbmVyID0gbWFrZVJlZihmcmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5l
clByb3h5KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHdlYlBhZ2VJRCwg
ZnJhbWVJRCwgaWRlbnRpZmllciwgbGlzdGVuZXJJRCwgbmF2aWdhdGlvbiA9IFdURk1vdmUobmF2
aWdhdGlvbiksCi0gICAgICAgIHByb2Nlc3MgPSBwcm9jZXNzLmNvcHlSZWYoKV0gKFBvbGljeUFj
dGlvbiBwb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1
ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJy
b3dzaW5nV2FybmluZz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5nLCBOYXZpZ2F0aW5nVG9BcHBCb3Vu
ZERvbWFpbiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKSBtdXRhYmxlIHsKLSAgICAgICAg
Ly8gRklYTUU6IEFzc2VydCB0aGUgQVBJOjpXZWJzaXRlUG9saWNpZXMqIGlzIG51bGxwdHIgaGVy
ZSBvbmNlIGNsaWVudHMgb2YgV0tGcmFtZVBvbGljeUxpc3RlbmVyVXNlV2l0aFBvbGljaWVzIGdv
IGF3YXkuCisgICAgICAgIHByb2Nlc3MgPSBwcm9jZXNzLmNvcHlSZWYoKV0gKFBvbGljeUFjdGlv
biBwb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBwb2xpY2llcywgUHJvY2Vzc1N3
YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8
U2FmZUJyb3dzaW5nV2FybmluZz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5nLCBOYXZpZ2F0aW5nVG9B
cHBCb3VuZERvbWFpbiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKSBtdXRhYmxlIHsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIXBvbGljaWVzKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCA9PSBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xp
ZW50OjpObyk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoc2FmZUJyb3dzaW5nV2FybmluZywgIXNh
ZmVCcm93c2luZ1dhcm5pbmcpOwogCkBAIC01MzQ5LDcgKzUzNTcsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uCiAgICAgICAgICAgICBwcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpEaWRSZWNlaXZlUG9saWN5RGVjaXNpb24oZnJhbWVJRCwgbGlzdGVu
ZXJJRCwgcG9saWN5RGVjaXNpb24pLCB3ZWJQYWdlSUQpOwogICAgICAgICB9KTsKICAgICAgICAg
Ci0gICAgICAgIHJlY2VpdmVkUG9saWN5RGVjaXNpb24ocG9saWN5QWN0aW9uLCBuYXZpZ2F0aW9u
LmdldCgpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUoc2VuZGVyKSk7CisgICAgICAgIHJlY2VpdmVk
UG9saWN5RGVjaXNpb24ocG9saWN5QWN0aW9uLCBuYXZpZ2F0aW9uLmdldCgpLCBudWxscHRyLCBX
VEZNb3ZlKHNlbmRlcikpOwogICAgIH0sIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdDo6
Tm8sIFNob3VsZEV4cGVjdEFwcEJvdW5kRG9tYWluUmVzdWx0OjpObykpOwogICAgIGlmIChtX3Bv
bGljeUNsaWVudCkKICAgICAgICAgbV9wb2xpY3lDbGllbnQtPmRlY2lkZVBvbGljeUZvclJlc3Bv
bnNlKCp0aGlzLCAqZnJhbWUsIHJlc3BvbnNlLCByZXF1ZXN0LCBjYW5TaG93TUlNRVR5cGUsIFdU
Rk1vdmUobGlzdGVuZXIpLCBwcm9jZXNzLT50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJE
YXRhLm9iamVjdCgpKS5nZXQoKSk7CkBAIC03NjQ1LDcgKzc2NTMsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6cmVzZXRTdGF0ZUFmdGVyUHJvY2VzCiAgICAgbV9wcm9jZXNzLT5wcm9jZXNzVGVybWlu
YXRlZCgpOwogfQogCi1XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzIFdlYlBhZ2VQcm94eTo6Y3Jl
YXRpb25QYXJhbWV0ZXJzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcywgRHJhd2luZ0FyZWFQcm94
eSYgZHJhd2luZ0FyZWEpCitXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzIFdlYlBhZ2VQcm94eTo6
Y3JlYXRpb25QYXJhbWV0ZXJzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcywgRHJhd2luZ0FyZWFQ
cm94eSYgZHJhd2luZ0FyZWEsIFJlZlB0cjxBUEk6OldlYnNpdGVQb2xpY2llcz4mJiB3ZWJzaXRl
UG9saWNpZXMpCiB7CiAgICAgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwog
CkBAIC03NzcyLDcgKzc3ODAsMTEgQEAgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyBXZWJQYWdl
UHJveHk6OgogICAgIHBhcmFtZXRlcnMuY3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sQ2hlY2tFbmFi
bGVkID0gbV9jb25maWd1cmF0aW9uLT5jcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2xDaGVja0VuYWJs
ZWQoKTsKICAgICBwYXJhbWV0ZXJzLmhhc1Jlc291cmNlTG9hZENsaWVudCA9ICEhbV9yZXNvdXJj
ZUxvYWRDbGllbnQ7CiAKLSAgICBwcm9jZXNzLmFkZFdlYlVzZXJDb250ZW50Q29udHJvbGxlclBy
b3h5KG1fdXNlckNvbnRlbnRDb250cm9sbGVyLCBwYXJhbWV0ZXJzKTsKKyAgICBzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5PiB1c2VyQ29udGVudENv
bnRyb2xsZXIobV91c2VyQ29udGVudENvbnRyb2xsZXIuZ2V0KCkpOworICAgIGlmIChhdXRvKiB1
c2VyQ29udGVudENvbnRyb2xsZXJGcm9tV2Vic2l0ZVBvbGljaWVzID0gd2Vic2l0ZVBvbGljaWVz
ID8gd2Vic2l0ZVBvbGljaWVzLT51c2VyQ29udGVudENvbnRyb2xsZXIoKSA6IG51bGxwdHIpCisg
ICAgICAgIHVzZXJDb250ZW50Q29udHJvbGxlciA9ICp1c2VyQ29udGVudENvbnRyb2xsZXJGcm9t
V2Vic2l0ZVBvbGljaWVzOworICAgIHByb2Nlc3MuYWRkV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveHkodXNlckNvbnRlbnRDb250cm9sbGVyKTsKKyAgICBwYXJhbWV0ZXJzLnVzZXJDb250ZW50
Q29udHJvbGxlclBhcmFtZXRlcnMgPSB1c2VyQ29udGVudENvbnRyb2xsZXIuZ2V0KCkucGFyYW1l
dGVycygpOwogCiAgICAgcGFyYW1ldGVycy5zaG91bGRDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyA9
IHByZWZlcmVuY2VzKCkuY2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3NFbmFibGVkKCk7CiAgICAgcGFy
YW1ldGVycy5zaG91bGRDYXB0dXJlQXVkaW9JbkdQVVByb2Nlc3MgPSBwcmVmZXJlbmNlcygpLmNh
cHR1cmVBdWRpb0luR1BVUHJvY2Vzc0VuYWJsZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyNTkxNjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTEyMyw4ICsxMTIzLDgg
QEAgcHVibGljOgogCiAgICAgY2xhc3MgUG9saWN5RGVjaXNpb25TZW5kZXI7CiAgICAgZW51bSBj
bGFzcyBXaWxsQ29udGludWVMb2FkSW5OZXdQcm9jZXNzIDogYm9vbCB7IE5vLCBZZXMgfTsKLSAg
ICB2b2lkIHJlY2VpdmVkUG9saWN5RGVjaXNpb24oV2ViQ29yZTo6UG9saWN5QWN0aW9uLCBBUEk6
Ok5hdmlnYXRpb24qLCBPcHRpb25hbDxXZWJzaXRlUG9saWNpZXNEYXRhPiYmLCBSZWY8UG9saWN5
RGVjaXNpb25TZW5kZXI+JiYsIFdpbGxDb250aW51ZUxvYWRJbk5ld1Byb2Nlc3MgPSBXaWxsQ29u
dGludWVMb2FkSW5OZXdQcm9jZXNzOjpObyk7Ci0gICAgdm9pZCByZWNlaXZlZE5hdmlnYXRpb25Q
b2xpY3lEZWNpc2lvbihXZWJDb3JlOjpQb2xpY3lBY3Rpb24sIEFQSTo6TmF2aWdhdGlvbiosIFBy
b2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFdlYkZyYW1lUHJveHkmLCBBUEk6OldlYnNpdGVQ
b2xpY2llcyosIFJlZjxQb2xpY3lEZWNpc2lvblNlbmRlcj4mJik7CisgICAgdm9pZCByZWNlaXZl
ZFBvbGljeURlY2lzaW9uKFdlYkNvcmU6OlBvbGljeUFjdGlvbiwgQVBJOjpOYXZpZ2F0aW9uKiwg
UmVmUHRyPEFQSTo6V2Vic2l0ZVBvbGljaWVzPiYmLCBSZWY8UG9saWN5RGVjaXNpb25TZW5kZXI+
JiYsIFdpbGxDb250aW51ZUxvYWRJbk5ld1Byb2Nlc3MgPSBXaWxsQ29udGludWVMb2FkSW5OZXdQ
cm9jZXNzOjpObyk7CisgICAgdm9pZCByZWNlaXZlZE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbihX
ZWJDb3JlOjpQb2xpY3lBY3Rpb24sIEFQSTo6TmF2aWdhdGlvbiosIFByb2Nlc3NTd2FwUmVxdWVz
dGVkQnlDbGllbnQsIFdlYkZyYW1lUHJveHkmLCBSZWZQdHI8QVBJOjpXZWJzaXRlUG9saWNpZXM+
JiYsIFJlZjxQb2xpY3lEZWNpc2lvblNlbmRlcj4mJik7CiAKICAgICB2b2lkIGJhY2tGb3J3YXJk
UmVtb3ZlZEl0ZW0oY29uc3QgV2ViQ29yZTo6QmFja0ZvcndhcmRJdGVtSWRlbnRpZmllciYpOwog
CkBAIC0xMjMwLDcgKzEyMzAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRDaG9vc2VGaWxlc0Zv
ck9wZW5QYW5lbChjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwogICAgIHZvaWQgZGlkQ2FuY2VsRm9y
T3BlblBhbmVsKCk7CiAKLSAgICBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzIGNyZWF0aW9uUGFy
YW1ldGVycyhXZWJQcm9jZXNzUHJveHkmLCBEcmF3aW5nQXJlYVByb3h5Jik7CisgICAgV2ViUGFn
ZUNyZWF0aW9uUGFyYW1ldGVycyBjcmVhdGlvblBhcmFtZXRlcnMoV2ViUHJvY2Vzc1Byb3h5Jiwg
RHJhd2luZ0FyZWFQcm94eSYsIFJlZlB0cjxBUEk6OldlYnNpdGVQb2xpY2llcz4mJiA9IG51bGxw
dHIpOwogCiAgICAgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSYpOwog
CkBAIC0yMjI3LDcgKzIyMjcsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCByZXBvcnRQYWdlTG9h
ZFJlc3VsdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiA9IHsgfSk7CiAKLSAgICB2b2lk
IGNvbnRpbnVlTmF2aWdhdGlvbkluTmV3UHJvY2VzcyhBUEk6Ok5hdmlnYXRpb24mLCBzdGQ6OnVu
aXF1ZV9wdHI8U3VzcGVuZGVkUGFnZVByb3h5PiYmLCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmLCBQ
cm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBPcHRpb25hbDxXZWJzaXRlUG9saWNpZXNEYXRh
PiYmKTsKKyAgICB2b2lkIGNvbnRpbnVlTmF2aWdhdGlvbkluTmV3UHJvY2VzcyhBUEk6Ok5hdmln
YXRpb24mLCBzdGQ6OnVuaXF1ZV9wdHI8U3VzcGVuZGVkUGFnZVByb3h5PiYmLCBSZWY8V2ViUHJv
Y2Vzc1Byb3h5PiYmLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8QVBJOjpX
ZWJzaXRlUG9saWNpZXM+JiYpOwogCiAgICAgdm9pZCBzZXROZWVkc0ZvbnRBdHRyaWJ1dGVzKGJv
b2wpOwogICAgIHZvaWQgdXBkYXRlRm9udEF0dHJpYnV0ZXNBZnRlckVkaXRvclN0YXRlQ2hhbmdl
KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJ
KHJldmlzaW9uIDI1OTE2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0MiwxMCArNTQyLDEwIEBAIHZvaWQgV2ViUHJv
Y2Vzc1Byb3h5OjpyZW1vdmVWaXNpdGVkTGlua1MKICAgICB9CiB9CiAKLXZvaWQgV2ViUHJvY2Vz
c1Byb3h5OjphZGRXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eSYgcHJveHksIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRl
cnMpCit2b2lkIFdlYlByb2Nlc3NQcm94eTo6YWRkV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHkoV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkmIHByb3h5KQogewogICAgIG1fd2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveGllcy5hZGQoJnByb3h5KTsKLSAgICBwcm94eS5hZGRQcm9j
ZXNzKCp0aGlzLCBwYXJhbWV0ZXJzKTsKKyAgICBwcm94eS5hZGRQcm9jZXNzKCp0aGlzKTsKIH0K
IAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSYgcHJveHkpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAkocmV2aXNpb24gMjU5MTYzKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRWaXNpdGVkTGlua1N0
b3JlVXNlcihWaXNpdGVkTGlua1N0b3JlJiwgV2ViUGFnZVByb3h5SWRlbnRpZmllcik7CiAgICAg
dm9pZCByZW1vdmVWaXNpdGVkTGlua1N0b3JlVXNlcihWaXNpdGVkTGlua1N0b3JlJiwgV2ViUGFn
ZVByb3h5SWRlbnRpZmllcik7CiAKLSAgICB2b2lkIGFkZFdlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5KFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5JiwgV2ViUGFnZUNyZWF0aW9uUGFy
YW1ldGVycyYpOworICAgIHZvaWQgYWRkV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkoV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkmKTsKICAgICB2b2lkIGRpZERlc3Ryb3lXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSYpOwog
CiAgICAgUmVmUHRyPEFQSTo6VXNlckluaXRpYXRlZEFjdGlvbj4gdXNlckluaXRpYXRlZEFjdGl2
aXR5KHVpbnQ2NF90KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJz
aXRlUG9saWNpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElXZWJzaXRlUG9saWNpZXMuY3BwCShyZXZpc2lvbiAyNTkxNjMpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZVBvbGljaWVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFQSVdlYnNp
dGVQb2xpY2llcy5oIgogCisjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHku
aCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZVBvbGlj
aWVzRGF0YS5oIgogCkBAIC0zMywxNiArMzQsNiBAQCBuYW1lc3BhY2UgQVBJIHsKIAogV2Vic2l0
ZVBvbGljaWVzOjpXZWJzaXRlUG9saWNpZXMoKSA9IGRlZmF1bHQ7CiAKLVdlYnNpdGVQb2xpY2ll
czo6V2Vic2l0ZVBvbGljaWVzKGJvb2wgY29udGVudEJsb2NrZXJzRW5hYmxlZCwgT3B0aW9uU2V0
PFdlYktpdDo6V2Vic2l0ZUF1dG9wbGF5UXVpcms+IGFsbG93ZWRBdXRvcGxheVF1aXJrcywgV2Vi
S2l0OjpXZWJzaXRlQXV0b3BsYXlQb2xpY3kgYXV0b3BsYXlQb2xpY3ksIFZlY3RvcjxXZWJDb3Jl
OjpIVFRQSGVhZGVyRmllbGQ+JiYgbGVnYWN5Q3VzdG9tSGVhZGVyRmllbGRzLCBWZWN0b3I8V2Vi
Q29yZTo6Q3VzdG9tSGVhZGVyRmllbGRzPiYmIGN1c3RvbUhlYWRlckZpZWxkcywgV2ViS2l0OjpX
ZWJzaXRlUG9wVXBQb2xpY3kgcG9wVXBQb2xpY3ksIFJlZlB0cjxXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU+JiYgd2Vic2l0ZURhdGFTdG9yZSkKLSAgICA6IG1fY29udGVudEJsb2NrZXJzRW5hYmxl
ZChjb250ZW50QmxvY2tlcnNFbmFibGVkKQotICAgICwgbV9hbGxvd2VkQXV0b3BsYXlRdWlya3Mo
YWxsb3dlZEF1dG9wbGF5UXVpcmtzKQotICAgICwgbV9hdXRvcGxheVBvbGljeShhdXRvcGxheVBv
bGljeSkKLSAgICAsIG1fbGVnYWN5Q3VzdG9tSGVhZGVyRmllbGRzKFdURk1vdmUobGVnYWN5Q3Vz
dG9tSGVhZGVyRmllbGRzKSkKLSAgICAsIG1fY3VzdG9tSGVhZGVyRmllbGRzKFdURk1vdmUoY3Vz
dG9tSGVhZGVyRmllbGRzKSkKLSAgICAsIG1fcG9wVXBQb2xpY3kocG9wVXBQb2xpY3kpCi0gICAg
LCBtX3dlYnNpdGVEYXRhU3RvcmUoV1RGTW92ZSh3ZWJzaXRlRGF0YVN0b3JlKSkKLXsgfQotCiBS
ZWY8V2Vic2l0ZVBvbGljaWVzPiBXZWJzaXRlUG9saWNpZXM6OmNvcHkoKSBjb25zdAogewogICAg
IGF1dG8gcG9saWNpZXMgPSBXZWJzaXRlUG9saWNpZXM6OmNyZWF0ZSgpOwpAQCAtNjMsNiArNTQs
OCBAQCBSZWY8V2Vic2l0ZVBvbGljaWVzPiBXZWJzaXRlUG9saWNpZXM6OmNvCiAgICAgcG9saWNp
ZXMtPnNldFNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xpY3kobV9zaW11bGF0ZWRNb3Vz
ZUV2ZW50c0Rpc3BhdGNoUG9saWN5KTsKICAgICBwb2xpY2llcy0+c2V0TGVnYWN5T3ZlcmZsb3dT
Y3JvbGxpbmdUb3VjaFBvbGljeShtX2xlZ2FjeU92ZXJmbG93U2Nyb2xsaW5nVG91Y2hQb2xpY3kp
OwogICAgIHBvbGljaWVzLT5zZXRBbGxvd0NvbnRlbnRDaGFuZ2VPYnNlcnZlclF1aXJrKG1fYWxs
b3dDb250ZW50Q2hhbmdlT2JzZXJ2ZXJRdWlyayk7CisgICAgcG9saWNpZXMtPnNldFdlYnNpdGVE
YXRhU3RvcmUobV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpKTsKKyAgICBwb2xpY2llcy0+c2V0VXNl
ckNvbnRlbnRDb250cm9sbGVyKG1fdXNlckNvbnRlbnRDb250cm9sbGVyLmdldCgpKTsKICAgICAK
ICAgICBWZWN0b3I8V2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkPiBsZWdhY3lDdXN0b21IZWFkZXJG
aWVsZHM7CiAgICAgbGVnYWN5Q3VzdG9tSGVhZGVyRmllbGRzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobV9sZWdhY3lDdXN0b21IZWFkZXJGaWVsZHMuc2l6ZSgpKTsKQEAgLTg5LDYgKzgyLDExIEBA
IHZvaWQgV2Vic2l0ZVBvbGljaWVzOjpzZXRXZWJzaXRlRGF0YVN0b3IKICAgICBtX3dlYnNpdGVE
YXRhU3RvcmUgPSBXVEZNb3ZlKHdlYnNpdGVEYXRhU3RvcmUpOwogfQogCit2b2lkIFdlYnNpdGVQ
b2xpY2llczo6c2V0VXNlckNvbnRlbnRDb250cm9sbGVyKFJlZlB0cjxXZWJLaXQ6OldlYlVzZXJD
b250ZW50Q29udHJvbGxlclByb3h5PiYmIGNvbnRyb2xsZXIpCit7CisgICAgbV91c2VyQ29udGVu
dENvbnRyb2xsZXIgPSBXVEZNb3ZlKGNvbnRyb2xsZXIpOworfQorCiBXZWJLaXQ6OldlYnNpdGVQ
b2xpY2llc0RhdGEgV2Vic2l0ZVBvbGljaWVzOjpkYXRhKCkKIHsKICAgICBib29sIGhhc0xlZ2Fj
eUN1c3RvbUhlYWRlckZpZWxkcyA9IGxlZ2FjeUN1c3RvbUhlYWRlckZpZWxkcygpLnNpemUoKTsK
QEAgLTEwOCw3ICsxMDYsNiBAQCBXZWJLaXQ6OldlYnNpdGVQb2xpY2llc0RhdGEgV2Vic2l0ZVBv
bGljCiAjZW5kaWYKICAgICAgICAgV1RGTW92ZShjdXN0b21IZWFkZXJGaWVsZHMpLAogICAgICAg
ICBwb3BVcFBvbGljeSgpLAotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPyBPcHRpb25hbDxX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiB7IG1fd2Vic2l0ZURhdGFTdG9yZS0+
cGFyYW1ldGVycygpIH0gOiBXVEY6Om51bGxvcHQsCiAgICAgICAgIG1fY3VzdG9tVXNlckFnZW50
LAogICAgICAgICBtX2N1c3RvbVVzZXJBZ2VudEFzU2l0ZVNwZWNpZmljUXVpcmtzLAogICAgICAg
ICBtX2N1c3RvbU5hdmlnYXRvclBsYXRmb3JtLApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9saWNpZXMuaAkocmV2aXNpb24gMjU5MTYzKQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNs
dWRlICJXZWJDb250ZW50TW9kZS5oIgorI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZUF1dG9wbGF5UG9saWN5LmgiCiAjaW5jbHVkZSAi
V2Vic2l0ZUF1dG9wbGF5UXVpcmsuaCIKICNpbmNsdWRlICJXZWJzaXRlTGVnYWN5T3ZlcmZsb3dT
Y3JvbGxpbmdUb3VjaFBvbGljeS5oIgpAQCAtNTYsNiArNTcsOCBAQCBwdWJsaWM6CiAKICAgICBS
ZWY8V2Vic2l0ZVBvbGljaWVzPiBjb3B5KCkgY29uc3Q7CiAKKyAgICBXZWJLaXQ6OldlYnNpdGVQ
b2xpY2llc0RhdGEgZGF0YSgpOworCiAgICAgYm9vbCBjb250ZW50QmxvY2tlcnNFbmFibGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9jb250ZW50QmxvY2tlcnNFbmFibGVkOyB9CiAgICAgdm9pZCBzZXRD
b250ZW50QmxvY2tlcnNFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2NvbnRlbnRCbG9ja2Vyc0Vu
YWJsZWQgPSBlbmFibGVkOyB9CiAgICAgCkBAIC04MSw4ICs4NCw5IEBAIHB1YmxpYzoKIAogICAg
IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSogd2Vic2l0ZURhdGFTdG9yZSgpIGNvbnN0IHsgcmV0
dXJuIG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsgfQogICAgIHZvaWQgc2V0V2Vic2l0ZURhdGFT
dG9yZShSZWZQdHI8V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlPiYmKTsKLQotICAgIFdlYktpdDo6
V2Vic2l0ZVBvbGljaWVzRGF0YSBkYXRhKCk7CisgICAgCisgICAgV2ViS2l0OjpXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJQcm94eSogdXNlckNvbnRlbnRDb250cm9sbGVyKCkgY29uc3QgeyByZXR1
cm4gbV91c2VyQ29udGVudENvbnRyb2xsZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFVzZXJDb250
ZW50Q29udHJvbGxlcihSZWZQdHI8V2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94
eT4mJik7CiAKICAgICB2b2lkIHNldEN1c3RvbVVzZXJBZ2VudChjb25zdCBXVEY6OlN0cmluZyYg
Y3VzdG9tVXNlckFnZW50KSB7IG1fY3VzdG9tVXNlckFnZW50ID0gY3VzdG9tVXNlckFnZW50OyB9
CiAgICAgY29uc3QgV1RGOjpTdHJpbmcmIGN1c3RvbVVzZXJBZ2VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fY3VzdG9tVXNlckFnZW50OyB9CkBAIC0xMjEsOCArMTI1LDYgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0QWxsb3dzQ29udGVudEphdmFTY3JpcHQoV2ViQ29yZTo6QWxsb3dzQ29udGVudEphdmFT
Y3JpcHQgYWxsb3dzKSB7IG1fYWxsb3dzQ29udGVudEphdmFTY3JpcHQgPSBhbGxvd3M7IH0KIAog
cHJpdmF0ZToKLSAgICBXZWJzaXRlUG9saWNpZXMoYm9vbCBjb250ZW50QmxvY2tlcnNFbmFibGVk
LCBPcHRpb25TZXQ8V2ViS2l0OjpXZWJzaXRlQXV0b3BsYXlRdWlyaz4sIFdlYktpdDo6V2Vic2l0
ZUF1dG9wbGF5UG9saWN5LCBWZWN0b3I8V2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkPiYmLCBWZWN0
b3I8V2ViQ29yZTo6Q3VzdG9tSGVhZGVyRmllbGRzPiYmLCBXZWJLaXQ6OldlYnNpdGVQb3BVcFBv
bGljeSwgUmVmUHRyPFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZT4mJik7Ci0KICAgICBib29sIG1f
Y29udGVudEJsb2NrZXJzRW5hYmxlZCB7IHRydWUgfTsKICAgICBPcHRpb25TZXQ8V2ViS2l0OjpX
ZWJzaXRlQXV0b3BsYXlRdWlyaz4gbV9hbGxvd2VkQXV0b3BsYXlRdWlya3M7CiAgICAgV2ViS2l0
OjpXZWJzaXRlQXV0b3BsYXlQb2xpY3kgbV9hdXRvcGxheVBvbGljeSB7IFdlYktpdDo6V2Vic2l0
ZUF1dG9wbGF5UG9saWN5OjpEZWZhdWx0IH07CkBAIC0xMzMsNiArMTM1LDcgQEAgcHJpdmF0ZToK
ICAgICBWZWN0b3I8V2ViQ29yZTo6Q3VzdG9tSGVhZGVyRmllbGRzPiBtX2N1c3RvbUhlYWRlckZp
ZWxkczsKICAgICBXZWJLaXQ6OldlYnNpdGVQb3BVcFBvbGljeSBtX3BvcFVwUG9saWN5IHsgV2Vi
S2l0OjpXZWJzaXRlUG9wVXBQb2xpY3k6OkRlZmF1bHQgfTsKICAgICBSZWZQdHI8V2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmU7CisgICAgUmVmUHRyPFdlYktpdDo6
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk+IG1fdXNlckNvbnRlbnRDb250cm9sbGVyOwog
ICAgIFdURjo6U3RyaW5nIG1fY3VzdG9tVXNlckFnZW50OwogICAgIFdURjo6U3RyaW5nIG1fY3Vz
dG9tVXNlckFnZW50QXNTaXRlU3BlY2lmaWNRdWlya3M7CiAgICAgV1RGOjpTdHJpbmcgbV9jdXN0
b21OYXZpZ2F0b3JQbGF0Zm9ybTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tQYWdlLmNwcAkocmV2aXNpb24gMjU5MTYzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDggKzM2Nyw5IEBAIGJvb2wg
V0tQYWdlV2lsbEhhbmRsZUhvcml6b250YWxTY3JvbGxFdmUKIAogdm9pZCBXS1BhZ2VVcGRhdGVX
ZWJzaXRlUG9saWNpZXMoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLV2Vic2l0ZVBvbGljaWVzUmVmIHdl
YnNpdGVQb2xpY2llc1JlZikKIHsKKyAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoIXRv
SW1wbCh3ZWJzaXRlUG9saWNpZXNSZWYpLT53ZWJzaXRlRGF0YVN0b3JlKCksICJTZXR0aW5nIFdl
YnNpdGVQb2xpY2llcy53ZWJzaXRlRGF0YVN0b3JlIGlzIG9ubHkgc3VwcG9ydGVkIGR1cmluZyBX
S0ZyYW1lUG9saWN5TGlzdGVuZXJVc2VXaXRoUG9saWNpZXMoKS4iKTsKKyAgICBSRUxFQVNFX0FT
U0VSVF9XSVRIX01FU1NBR0UoIXRvSW1wbCh3ZWJzaXRlUG9saWNpZXNSZWYpLT51c2VyQ29udGVu
dENvbnRyb2xsZXIoKSwgIlNldHRpbmcgV2Vic2l0ZVBvbGljaWVzLnVzZXJDb250ZW50Q29udHJv
bGxlciBpcyBvbmx5IHN1cHBvcnRlZCBkdXJpbmcgV0tGcmFtZVBvbGljeUxpc3RlbmVyVXNlV2l0
aFBvbGljaWVzKCkuIik7CiAgICAgYXV0byBkYXRhID0gdG9JbXBsKHdlYnNpdGVQb2xpY2llc1Jl
ZiktPmRhdGEoKTsKLSAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoIWRhdGEud2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMsICJTZXR0aW5nIFdlYnNpdGVQb2xpY2llcy5XZWJzaXRlRGF0
YVN0b3JlIGlzIG9ubHkgc3VwcG9ydGVkIGR1cmluZyBXS0ZyYW1lUG9saWN5TGlzdGVuZXJVc2VX
aXRoUG9saWNpZXMoKS4iKTsKICAgICB0b0ltcGwocGFnZVJlZiktPnVwZGF0ZVdlYnNpdGVQb2xp
Y2llcyhXVEZNb3ZlKGRhdGEpKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAyNTkxNjMpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzE2LDkgKzIzMTYsMTEgQEAgLSAodm9pZClfdXBkYXRlV2Vic2l0ZVBvbGljaWVzOihfV0tX
ZWJzaQogCiAtICh2b2lkKV91cGRhdGVXZWJwYWdlUHJlZmVyZW5jZXM6KFdLV2VicGFnZVByZWZl
cmVuY2VzICopd2VicGFnZVByZWZlcmVuY2VzCiB7Ci0gICAgYXV0byBkYXRhID0gd2VicGFnZVBy
ZWZlcmVuY2VzLT5fd2Vic2l0ZVBvbGljaWVzLT5kYXRhKCk7Ci0gICAgaWYgKGRhdGEud2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgaWYgKHdlYnBhZ2VQcmVmZXJlbmNlcy5fd2Vic2l0
ZURhdGFTdG9yZSkKICAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50
RXhjZXB0aW9uIGZvcm1hdDpAIlVwZGF0aW5nIFdLV2Vic2l0ZURhdGFTdG9yZSBpcyBvbmx5IHN1
cHBvcnRlZCBkdXJpbmcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbi4iXTsKKyAgICBp
ZiAod2VicGFnZVByZWZlcmVuY2VzLl91c2VyQ29udGVudENvbnRyb2xsZXIpCisgICAgICAgIFtO
U0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJVcGRh
dGluZyBXS1VzZXJDb250ZW50Q29udHJvbGxlciBpcyBvbmx5IHN1cHBvcnRlZCBkdXJpbmcgZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbi4iXTsKKyAgICBhdXRvIGRhdGEgPSB3ZWJwYWdl
UHJlZmVyZW5jZXMtPl93ZWJzaXRlUG9saWNpZXMtPmRhdGEoKTsKICAgICBfcGFnZS0+dXBkYXRl
V2Vic2l0ZVBvbGljaWVzKFdURk1vdmUoZGF0YSkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2Vz
Lm1tCShyZXZpc2lvbiAyNTkxNjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJwYWdlUHJlZmVyZW5jZXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcg
QEAKICNpbXBvcnQgIldLV2VicGFnZVByZWZlcmVuY2VzLmgiCiAKICNpbXBvcnQgIkFQSUN1c3Rv
bUhlYWRlckZpZWxkcy5oIgorI2ltcG9ydCAiV0tVc2VyQ29udGVudENvbnRyb2xsZXJJbnRlcm5h
bC5oIgogI2ltcG9ydCAiV0tXZWJwYWdlUHJlZmVyZW5jZXNJbnRlcm5hbC5oIgogI2ltcG9ydCAi
V0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkNvbnRlbnRNb2RlLmgi
CkBAIC0yNzYsNiArMjc3LDE2IEBAIC0gKHZvaWQpX3NldFdlYnNpdGVEYXRhU3RvcmU6KFdLV2Vi
c2l0ZUQKICAgICBfd2Vic2l0ZVBvbGljaWVzLT5zZXRXZWJzaXRlRGF0YVN0b3JlKHdlYnNpdGVE
YXRhU3RvcmUtPl93ZWJzaXRlRGF0YVN0b3JlLmdldCgpKTsKIH0KIAorLSAoV0tVc2VyQ29udGVu
dENvbnRyb2xsZXIgKilfdXNlckNvbnRlbnRDb250cm9sbGVyCit7CisgICAgcmV0dXJuIHdyYXBw
ZXIoX3dlYnNpdGVQb2xpY2llcy0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkpOworfQorCistICh2
b2lkKV9zZXRVc2VyQ29udGVudENvbnRyb2xsZXI6KFdLVXNlckNvbnRlbnRDb250cm9sbGVyICop
dXNlckNvbnRlbnRDb250cm9sbGVyCit7CisgICAgX3dlYnNpdGVQb2xpY2llcy0+c2V0VXNlckNv
bnRlbnRDb250cm9sbGVyKHVzZXJDb250ZW50Q29udHJvbGxlci0+X3VzZXJDb250ZW50Q29udHJv
bGxlclByb3h5LmdldCgpKTsKK30KKwogLSAodm9pZClfc2V0Q3VzdG9tVXNlckFnZW50OihOU1N0
cmluZyAqKWN1c3RvbVVzZXJBZ2VudAogewogICAgIF93ZWJzaXRlUG9saWNpZXMtPnNldEN1c3Rv
bVVzZXJBZ2VudChjdXN0b21Vc2VyQWdlbnQpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2VzUHJpdmF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJlbmNlc1By
aXZhdGUuaAkocmV2aXNpb24gMjU5MTYzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2VzUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw3ICsyNyw2IEBACiAKICNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KICNpbXBvcnQg
PFdlYktpdC9XS1dlYnBhZ2VQcmVmZXJlbmNlcy5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0
ZURhdGFTdG9yZS5oPgogCiB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tXZWJzaXRlQXV0
b3BsYXlQb2xpY3kpIHsKICAgICBfV0tXZWJzaXRlQXV0b3BsYXlQb2xpY3lEZWZhdWx0LApAQCAt
NTYsNiArNTUsOCBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLV2Vic2l0CiB9
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogCiBAY2xhc3MgX1dL
Q3VzdG9tSGVhZGVyRmllbGRzOworQGNsYXNzIFdLVXNlckNvbnRlbnRDb250cm9sbGVyOworQGNs
YXNzIFdLV2Vic2l0ZURhdGFTdG9yZTsKIAogQGludGVyZmFjZSBXS1dlYnBhZ2VQcmVmZXJlbmNl
cyAoV0tQcml2YXRlKQogCkBAIC02NSw2ICs2Niw3IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJ
bnRlZ2VyLCBfV0tXZWJzaXQKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCBzZXR0ZXI9X3Nl
dEN1c3RvbUhlYWRlckZpZWxkczopIE5TQXJyYXk8X1dLQ3VzdG9tSGVhZGVyRmllbGRzICo+ICpf
Y3VzdG9tSGVhZGVyRmllbGRzOwogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0UG9w
VXBQb2xpY3k6KSBfV0tXZWJzaXRlUG9wVXBQb2xpY3kgX3BvcFVwUG9saWN5OwogQHByb3BlcnR5
IChub25hdG9taWMsIHN0cm9uZywgc2V0dGVyPV9zZXRXZWJzaXRlRGF0YVN0b3JlOikgV0tXZWJz
aXRlRGF0YVN0b3JlICpfd2Vic2l0ZURhdGFTdG9yZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBz
dHJvbmcsIHNldHRlcj1fc2V0VXNlckNvbnRlbnRDb250cm9sbGVyOikgV0tVc2VyQ29udGVudENv
bnRyb2xsZXIgKl91c2VyQ29udGVudENvbnRyb2xsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhX
S19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5
LCBzZXR0ZXI9X3NldEN1c3RvbVVzZXJBZ2VudDopIE5TU3RyaW5nICpfY3VzdG9tVXNlckFnZW50
OwogQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHNldHRlcj1fc2V0Q3VzdG9tVXNlckFnZW50
QXNTaXRlU3BlY2lmaWNRdWlya3M6KSBOU1N0cmluZyAqX2N1c3RvbVVzZXJBZ2VudEFzU2l0ZVNw
ZWNpZmljUXVpcmtzOwogQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHNldHRlcj1fc2V0Q3Vz
dG9tTmF2aWdhdG9yUGxhdGZvcm06KSBOU1N0cmluZyAqX2N1c3RvbU5hdmlnYXRvclBsYXRmb3Jt
OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25T
dGF0ZS5tbQkocmV2aXNpb24gMjU5MTYzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvTmF2aWdhdGlvblN0YXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MDIsMTAgKzYwMiwxMCBA
QCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKICAgICAgICAgICAgIGFwaVdlYnNp
dGVQb2xpY2llcyA9IGRlZmF1bHRXZWJzaXRlUG9saWNpZXM7CiAKICAgICAgICAgaWYgKGFwaVdl
YnNpdGVQb2xpY2llcykgewotICAgICAgICAgICAgaWYgKGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUg
PSBhcGlXZWJzaXRlUG9saWNpZXMtPndlYnNpdGVEYXRhU3RvcmUoKSkgewotICAgICAgICAgICAg
ICAgIGlmIChzdWJmcmFtZU5hdmlnYXRpb24pCi0gICAgICAgICAgICAgICAgICAgIFtOU0V4Y2Vw
dGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJXS1dlYnBhZ2VQ
cmVmZXJlbmNlcy5fd2Vic2l0ZURhdGFTdG9yZSBtdXN0IGJlIG5pbCBmb3Igc3ViZnJhbWUgbmF2
aWdhdGlvbnMuIl07Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXBpV2Vic2l0ZVBv
bGljaWVzLT53ZWJzaXRlRGF0YVN0b3JlKCkgJiYgc3ViZnJhbWVOYXZpZ2F0aW9uKQorICAgICAg
ICAgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBm
b3JtYXQ6QCJXS1dlYnBhZ2VQcmVmZXJlbmNlcy5fd2Vic2l0ZURhdGFTdG9yZSBtdXN0IGJlIG5p
bCBmb3Igc3ViZnJhbWUgbmF2aWdhdGlvbnMuIl07CisgICAgICAgICAgICBpZiAoYXBpV2Vic2l0
ZVBvbGljaWVzLT51c2VyQ29udGVudENvbnRyb2xsZXIoKSAmJiBzdWJmcmFtZU5hdmlnYXRpb24p
CisgICAgICAgICAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhj
ZXB0aW9uIGZvcm1hdDpAIldLV2VicGFnZVByZWZlcmVuY2VzLl91c2VyQ29udGVudENvbnRyb2xs
ZXIgbXVzdCBiZSBuaWwgZm9yIHN1YmZyYW1lIG5hdmlnYXRpb25zLiJdOwogICAgICAgICAgICAg
aWYgKCFhcGlXZWJzaXRlUG9saWNpZXMtPmN1c3RvbVVzZXJBZ2VudCgpLmlzTnVsbCgpICYmIHN1
YmZyYW1lTmF2aWdhdGlvbikKICAgICAgICAgICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJ
bnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiV0tXZWJwYWdlUHJlZmVyZW5jZXMuX2N1
c3RvbVVzZXJBZ2VudCBtdXN0IGJlIG5pbCBmb3Igc3ViZnJhbWUgbmF2aWdhdGlvbnMuIl07CiAg
ICAgICAgICAgICBpZiAoIWFwaVdlYnNpdGVQb2xpY2llcy0+Y3VzdG9tTmF2aWdhdG9yUGxhdGZv
cm0oKS5pc051bGwoKSAmJiBzdWJmcmFtZU5hdmlnYXRpb24pCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCShyZXZpc2lvbiAyNTkxNjMpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDM3ICs5NiwzOSBAQCB2b2lkIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5OjpyZW1vCiB9CiAjZW5kaWYKIAotdm9pZCBXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eTo6YWRkUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQ
cm94eSwgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3ZvaWQgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQ
cm9jZXNzUHJveHkpCiB7CiAgICAgQVNTRVJUKCFtX3Byb2Nlc3Nlcy5oYXNOdWxsUmVmZXJlbmNl
cygpKTsKIAogICAgIGlmIChtX3Byb2Nlc3Nlcy5hZGQod2ViUHJvY2Vzc1Byb3h5KS5pc05ld0Vu
dHJ5KQogICAgICAgICB3ZWJQcm9jZXNzUHJveHkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBp
ZGVudGlmaWVyKCksICp0aGlzKTsKK30KKworVXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVy
cyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cGFyYW1ldGVycygpIGNvbnN0Cit7Cisg
ICAgVXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwogCi0gICAgQVNT
RVJUKHBhcmFtZXRlcnMudXNlckNvbnRlbnRXb3JsZHMuaXNFbXB0eSgpKTsKICAgICBmb3IgKGNv
bnN0IGF1dG8mIHdvcmxkIDogbV9jb250ZW50V29ybGRzKQogICAgICAgICBwYXJhbWV0ZXJzLnVz
ZXJDb250ZW50V29ybGRzLmFwcGVuZCh3b3JsZC5rZXktPndvcmxkRGF0YSgpKTsKIAotICAgIEFT
U0VSVChwYXJhbWV0ZXJzLnVzZXJTY3JpcHRzLmlzRW1wdHkoKSk7CiAgICAgZm9yIChhdXRvIHVz
ZXJTY3JpcHQgOiBtX3VzZXJTY3JpcHRzLT5lbGVtZW50c09mVHlwZTxBUEk6OlVzZXJTY3JpcHQ+
KCkpCiAgICAgICAgIHBhcmFtZXRlcnMudXNlclNjcmlwdHMuYXBwZW5kKHsgdXNlclNjcmlwdC0+
aWRlbnRpZmllcigpLCB1c2VyU2NyaXB0LT5jb250ZW50V29ybGQoKS5pZGVudGlmaWVyKCksIHVz
ZXJTY3JpcHQtPnVzZXJTY3JpcHQoKSB9KTsKIAotICAgIEFTU0VSVChwYXJhbWV0ZXJzLnVzZXJT
dHlsZVNoZWV0cy5pc0VtcHR5KCkpOwogICAgIGZvciAoYXV0byB1c2VyU3R5bGVTaGVldCA6IG1f
dXNlclN0eWxlU2hlZXRzLT5lbGVtZW50c09mVHlwZTxBUEk6OlVzZXJTdHlsZVNoZWV0PigpKQog
ICAgICAgICBwYXJhbWV0ZXJzLnVzZXJTdHlsZVNoZWV0cy5hcHBlbmQoeyB1c2VyU3R5bGVTaGVl
dC0+aWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC0+Y29udGVudFdvcmxkKCkuaWRlbnRpZmll
cigpLCB1c2VyU3R5bGVTaGVldC0+dXNlclN0eWxlU2hlZXQoKSB9KTsKIAotICAgIEFTU0VSVChw
YXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVycy5pc0VtcHR5KCkpOwogICAgIGZvciAoYXV0byYgaGFu
ZGxlciA6IG1fc2NyaXB0TWVzc2FnZUhhbmRsZXJzLnZhbHVlcygpKQogICAgICAgICBwYXJhbWV0
ZXJzLm1lc3NhZ2VIYW5kbGVycy5hcHBlbmQoeyBoYW5kbGVyLT5pZGVudGlmaWVyKCksIGhhbmRs
ZXItPndvcmxkKCkuaWRlbnRpZmllcigpLCBoYW5kbGVyLT5uYW1lKCkgfSk7CiAKICNpZiBFTkFC
TEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIEFTU0VSVChwYXJhbWV0ZXJzLmNvbnRlbnRSdWxl
TGlzdHMuaXNFbXB0eSgpKTsKICAgICBwYXJhbWV0ZXJzLmNvbnRlbnRSdWxlTGlzdHMgPSBjb250
ZW50UnVsZUxpc3REYXRhKCk7CiAjZW5kaWYKKyAgICAKKyAgICByZXR1cm4gcGFyYW1ldGVyczsK
IH0KIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi1WZWN0b3I8c3RkOjpwYWlyPFN0
cmluZywgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhPj4gV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHk6OmNvbnRlbnRSdWxlTGlzdERhdGEoKQorVmVjdG9yPHN0ZDo6cGFpcjxTdHJp
bmcsIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YT4+IFdlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5Ojpjb250ZW50UnVsZUxpc3REYXRhKCkgY29uc3QKIHsKICAgICBWZWN0b3I8c3Rk
OjpwYWlyPFN0cmluZywgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhPj4gZGF0YTsKICAg
ICBkYXRhLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jb250ZW50UnVsZUxpc3RzLnNpemUoKSk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgJKHJldmlzaW9uIDI1
OTE2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAgY2xh
c3MgV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXI7CiBzdHJ1Y3QgRnJhbWVJbmZvRGF0YTsKIGNsYXNz
IFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YTsKIHN0cnVjdCBXZWJQYWdlQ3JlYXRpb25Q
YXJhbWV0ZXJzOworc3RydWN0IFVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnM7CiBlbnVt
IGNsYXNzIEluamVjdFVzZXJTY3JpcHRJbW1lZGlhdGVseSA6IGJvb2w7CiAKIGNsYXNzIFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9i
amVjdDo6VHlwZTo6VXNlckNvbnRlbnRDb250cm9sbGVyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciB7CkBAIC03NSw3ICs3Niw5IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eSogZ2V0KFVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZp
ZXIpOwogCi0gICAgdm9pZCBhZGRQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYsIFdlYlBhZ2VDcmVh
dGlvblBhcmFtZXRlcnMmKTsKKyAgICBVc2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzIHBh
cmFtZXRlcnMoKSBjb25zdDsKKworICAgIHZvaWQgYWRkUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkm
KTsKICAgICB2b2lkIHJlbW92ZVByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5Jik7CiAKICAgICBBUEk6
OkFycmF5JiB1c2VyU2NyaXB0cygpIHsgcmV0dXJuIG1fdXNlclNjcmlwdHMuZ2V0KCk7IH0KQEAg
LTEwNSw3ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVDb250ZW50UnVsZUxpc3Qo
Y29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCByZW1vdmVBbGxDb250ZW50UnVsZUxpc3RzKCk7CiAg
ICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxBUEk6OkNvbnRlbnRSdWxlTGlzdD4+JiBj
b250ZW50RXh0ZW5zaW9uUnVsZXMoKSB7IHJldHVybiBtX2NvbnRlbnRSdWxlTGlzdHM7IH0KLSAg
ICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRh
Pj4gY29udGVudFJ1bGVMaXN0RGF0YSgpOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBX
ZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGE+PiBjb250ZW50UnVsZUxpc3REYXRhKCkgY29u
c3Q7CiAjZW5kaWYKIAogICAgIFVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXIgaWRlbnRp
ZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQpJbmRleDogU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNTkxNjMp
CisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MDM0LDYgKzQwMzQsOCBAQAogCQk1QzhERDM3RDFGRTQ1MDExMDBGMkE1
NTYgLyogQVBJV2Vic2l0ZVBvbGljaWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEFQSVdlYnNpdGVQb2xpY2llcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTVDOEREMzdGMUZFNDUxOTIwMEYyQTU1NiAvKiBXZWJzaXRlQXV0b3BsYXlQb2xpY3ku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vic2l0ZUF1dG9wbGF5UG9saWN5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDOEREMzgxMUZFNDU1Q0EwMEYyQTU1
NiAvKiBXZWJzaXRlQXV0b3BsYXlRdWlyay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJzaXRlQXV0b3BsYXlRdWlyay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1QzlDNUMwMjI0MzA1MzU4MDBCQjY3NDAgLyogVXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1l
dGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyQ29udGVudENvbnRy
b2xsZXJQYXJhbWV0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDOUM1QzAz
MjQzMDUzNTgwMEJCNjc0MCAvKiBVc2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVzZXJDb250ZW50Q29udHJvbGxl
clBhcmFtZXRlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzlFNTY4MDFE
RjdGMDU1MDBDOUVFMzMgLyogV0tXZWJzaXRlUG9saWNpZXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV0tXZWJzaXRlUG9saWNpZXMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1QzlFNTY4MTFERjdGMDU1MDBDOUVFMzMgLyogV0tXZWJzaXRlUG9s
aWNpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlUG9saWNp
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM5RUYyRTcyMUYwNThGOTAwM0JE
QzU2IC8qIE5ldHdvcmtTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MDQyLDYgKzYwNDQsOCBAQAogCQkJCTVDMTlBNTFFMUZE
MEIxNDYwMEVFQTMyMyAvKiBVUkxTY2hlbWVUYXNrUGFyYW1ldGVycy5jcHAgKi8sCiAJCQkJNUMx
OUE1MUYxRkQwQjE0NzAwRUVBMzIzIC8qIFVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzLmggKi8sCiAJ
CQkJNDFGQkU4MjEyMDZEODdGNjAwMEYwNzQxIC8qIFVzZXJDb250ZW50Q29udHJvbGxlcklkZW50
aWZpZXIuaCAqLywKKwkJCQk1QzlDNUMwMzI0MzA1MzU4MDBCQjY3NDAgLyogVXNlckNvbnRlbnRD
b250cm9sbGVyUGFyYW1ldGVycy5jcHAgKi8sCisJCQkJNUM5QzVDMDIyNDMwNTM1ODAwQkI2NzQw
IC8qIFVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnMuaCAqLywKIAkJCQkxQUMxMzM2NTE4
NTY1QjU3MDBGM0VDMDUgLyogVXNlckRhdGEuY3BwICovLAogCQkJCTFBQzEzMzY2MTg1NjVCNTcw
MEYzRUMwNSAvKiBVc2VyRGF0YS5oICovLAogCQkJCTI2ODQwNTRBMThCODY2RkYwMDIyQzM4QiAv
KiBWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvLmNwcCAqLywKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDI1OTE2MykKKysrIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzkxLDcg
Kzc5MSw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjoKICAgICB9
CiAjZW5kaWYKIAotICAgIExPR19FUlJPUigiVW5oYW5kbGVkIHdlYiBwcm9jZXNzIG1lc3NhZ2Ug
JyVzOiVzJyAoZGVzdGluYXRpb246ICUiIFBSSXU2NCAiKSIsIGRlY29kZXIubWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLnRvU3RyaW5nKCkuZGF0YSgpLCBkZWNvZGVyLm1lc3NhZ2VOYW1lKCkudG9TdHJp
bmcoKS5kYXRhKCksIGRlY29kZXIuZGVzdGluYXRpb25JRCgpKTsKKyAgICBMT0dfRVJST1IoIlVu
aGFuZGxlZCB3ZWIgcHJvY2VzcyBtZXNzYWdlICclczo6JXMnIChkZXN0aW5hdGlvbjogJSIgUFJJ
dTY0ICIgcGlkOiAlZCkiLCBkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKS50b1N0cmluZygp
LmRhdGEoKSwgZGVjb2Rlci5tZXNzYWdlTmFtZSgpLnRvU3RyaW5nKCkuZGF0YSgpLCBkZWNvZGVy
LmRlc3RpbmF0aW9uSUQoKSwgc3RhdGljX2Nhc3Q8aW50PihnZXRDdXJyZW50UHJvY2Vzc0lEKCkp
KTsKIH0KIAogV2ViRnJhbWUqIFdlYlByb2Nlc3M6OndlYkZyYW1lKEZyYW1lSWRlbnRpZmllciBm
cmFtZUlEKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAJKHJldmlzaW9uIDI1OTE2MykKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MTcsMTIgKzcxNywxMiBA
QCBXZWJQYWdlOjpXZWJQYWdlKFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgCiAgICAgZm9yIChjb25z
dCBhdXRvJiBpdGVyYXRvciA6IHBhcmFtZXRlcnMudXJsU2NoZW1lSGFuZGxlcnMpCiAgICAgICAg
IHJlZ2lzdGVyVVJMU2NoZW1lSGFuZGxlcihpdGVyYXRvci52YWx1ZSwgaXRlcmF0b3Iua2V5KTsK
IAotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRDb250ZW50V29ybGRzKHBhcmFtZXRl
cnMudXNlckNvbnRlbnRXb3JsZHMpOwotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRV
c2VyU2NyaXB0cyhXVEZNb3ZlKHBhcmFtZXRlcnMudXNlclNjcmlwdHMpLCBJbmplY3RVc2VyU2Ny
aXB0SW1tZWRpYXRlbHk6Ok5vKTsKLSAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+YWRkVXNl
clN0eWxlU2hlZXRzKHBhcmFtZXRlcnMudXNlclN0eWxlU2hlZXRzKTsKLSAgICBtX3VzZXJDb250
ZW50Q29udHJvbGxlci0+YWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVycyhwYXJhbWV0ZXJzLm1l
c3NhZ2VIYW5kbGVycyk7CisgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPmFkZENvbnRlbnRX
b3JsZHMocGFyYW1ldGVycy51c2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzLnVzZXJDb250
ZW50V29ybGRzKTsKKyAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+YWRkVXNlclNjcmlwdHMo
V1RGTW92ZShwYXJhbWV0ZXJzLnVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnMudXNlclNj
cmlwdHMpLCBJbmplY3RVc2VyU2NyaXB0SW1tZWRpYXRlbHk6Ok5vKTsKKyAgICBtX3VzZXJDb250
ZW50Q29udHJvbGxlci0+YWRkVXNlclN0eWxlU2hlZXRzKHBhcmFtZXRlcnMudXNlckNvbnRlbnRD
b250cm9sbGVyUGFyYW1ldGVycy51c2VyU3R5bGVTaGVldHMpOworICAgIG1fdXNlckNvbnRlbnRD
b250cm9sbGVyLT5hZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJzKHBhcmFtZXRlcnMudXNlckNv
bnRlbnRDb250cm9sbGVyUGFyYW1ldGVycy5tZXNzYWdlSGFuZGxlcnMpOwogI2lmIEVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCi0gICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPmFkZENvbnRl
bnRSdWxlTGlzdHMoV1RGTW92ZShwYXJhbWV0ZXJzLmNvbnRlbnRSdWxlTGlzdHMpKTsKKyAgICBt
X3VzZXJDb250ZW50Q29udHJvbGxlci0+YWRkQ29udGVudFJ1bGVMaXN0cyhXVEZNb3ZlKHBhcmFt
ZXRlcnMudXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVycy5jb250ZW50UnVsZUxpc3RzKSk7
CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkluZGV4OiBUb29scy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTkyNzkpCisrKyBU
b29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAyMC0wMy0z
MCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAg
IEFkZCBTUEkgV0tXZWJwYWdlUHJlZmVyZW5jZXMuX3VzZXJDb250ZW50Q29udHJvbGxlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Nzk1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1NvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5tbToKKyAgICAgICAgKC1bVGVz
dFVJRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOmlu
aXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlUG9saWNpZXMubW06CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlEZWxlZ2F0ZS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RVSURlbGVnYXRlLm1tOiBBZGRlZC4KKyAgICAg
ICAgKC1bVGVzdFVJRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhN
ZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgt
W1Rlc3RVSURlbGVnYXRlIHdhaXRGb3JBbGVydF0pOgorCiAyMDIwLTAzLTMwICBQZW5nIExpdSAg
PHBlbmcubGl1NkBhcHBsZS5jb20+CiAKICAgICAgICAgUGlQIHN1cHBvcnQgb2YgTWluaUJyb3dz
ZXIgaXMgYnJva2VuCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1NvdXJjZXNDb2NvYS50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9Tb3VyY2VzQ29jb2EudHh0CShyZXZp
c2lvbiAyNTkxNjMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1NvdXJjZXNDb2NvYS50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAgY29jb2EvUGxhdGZvcm1VdGlsaXRpZXNDb2Nv
YS5tbQogY29jb2EvVGVzdENvY29hLm1tCiBjb2NvYS9UZXN0TmF2aWdhdGlvbkRlbGVnYXRlLm1t
CiBjb2NvYS9UZXN0UHJvdG9jb2wubW0KK2NvY29hL1Rlc3RVSURlbGVnYXRlLm1tCiBjb2NvYS9U
ZXN0V0tXZWJWaWV3Lm1tCiAKIFRlc3RzL1dlYktpdENvY29hL1RMU0RlcHJlY2F0aW9uLm1tCklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjU5MTYzKQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTIwODMsNiArMjA4Myw4IEBACiAJCTVDQjQwQjREMUY0Qjk4QkUwMDdEQzdC
OSAvKiBVSURlbGVnYXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gVUlEZWxlZ2F0ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNCNUIzQkQx
RkZDNTE3RTAwQzI3QkIwIC8qIEZyYW1lSGFuZGxlU2VyaWFsaXphdGlvbi5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IEZyYW1lSGFuZGxlU2VyaWFsaXphdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNUNCN0FGREIyM0M0NTFFNDAwRTQ5Q0YzIC8qIFJlc291cmNlTG9hZERl
bGVnYXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVzb3Vy
Y2VMb2FkRGVsZWdhdGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQkFBN0Yz
MjQzMjdGNkIwMDU2NEE4QiAvKiBUZXN0VUlEZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBUZXN0VUlEZWxlZ2F0ZS5oOyBwYXRoID0gY29jb2EvVGVzdFVJRGVsZWdh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNCQUE3RjQyNDMyN0Y2QjAwNTY0
QThCIC8qIFRlc3RVSURlbGVnYXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gVGVzdFVJRGVsZWdhdGUubW07IHBhdGggPSBjb2NvYS9UZXN0VUlEZWxlZ2F0ZS5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNDQjEwREQyMTM0NTc5QzAwQUM1QUYw
IC8qIFJlc3BvbnNpdmVuZXNzVGltZXJEb2VzbnRGaXJlRWFybHkubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZXNwb25zaXZlbmVzc1RpbWVyRG9lc250RmlyZUVh
cmx5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0NCMTBERTIxMzQ1NzlEMDBB
QzVBRjAgLyogUmVzdG9yZVNlc3Npb25TdGF0ZVdpdGhvdXROYXZpZ2F0aW9uLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVzdG9yZVNlc3Npb25TdGF0ZVdpdGhv
dXROYXZpZ2F0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0NCMTBERjIx
MzQ1NzlEMDBBQzVBRjAgLyogU2hvdWxkR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0ubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTaG91bGRHb1RvQmFja0ZvcndhcmRM
aXN0SXRlbS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4OTksNiArMjkwMSw4
IEBACiAJCQkJNTE2MjgxMjQyMzI1QzE3QjAwQkI3RTQyIC8qIFRlc3RQREZEb2N1bWVudC5tbSAq
LywKIAkJCQlBMTRGQzU4RDFCOEFFMzY1MDBEMTA3RUIgLyogVGVzdFByb3RvY29sLmggKi8sCiAJ
CQkJQTE0RkM1OEUxQjhBRTM2NTAwRDEwN0VCIC8qIFRlc3RQcm90b2NvbC5tbSAqLywKKwkJCQk1
Q0JBQTdGMzI0MzI3RjZCMDA1NjRBOEIgLyogVGVzdFVJRGVsZWdhdGUuaCAqLywKKwkJCQk1Q0JB
QTdGNDI0MzI3RjZCMDA1NjRBOEIgLyogVGVzdFVJRGVsZWdhdGUubW0gKi8sCiAJCQkJMkVGRjA2
RDIxRDhBRURCQjAwMDRCQjMwIC8qIFRlc3RXS1dlYlZpZXcuaCAqLywKIAkJCQkyRUZGMDZEMzFE
OEFFREJCMDAwNEJCMzAgLyogVGVzdFdLV2ViVmlldy5tbSAqLywKIAkJCQk3QzgzRTAzOTFEMEE2
MDI3MDBGRUJDRjMgLyogVXRpbGl0aWVzQ29jb2EubW0gKi8sCkluZGV4OiBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZERlbGVnYXRlLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2Fk
RGVsZWdhdGUubW0JKHJldmlzaW9uIDI1OTE2MykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI5LDYgKzI5LDcgQEAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJU
Q1BTZXJ2ZXIuaCIKICNpbXBvcnQgIlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKKyNpbXBvcnQg
IlRlc3RVSURlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgpAQCAt
ODEsMjQgKzgyLDYgQEAgLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJlcwog
CiBAZW5kCiAKLUBpbnRlcmZhY2UgVGVzdFVJRGVsZWdhdGUgOiBOU09iamVjdCA8V0tVSURlbGVn
YXRlPgotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgdm9pZCAoXnJ1bkphdmFTY3JpcHRB
bGVydFBhbmVsV2l0aE1lc3NhZ2UpKFdLV2ViVmlldyAqLCBOU1N0cmluZyAqLCBXS0ZyYW1lSW5m
byAqLCB2b2lkICheKSh2b2lkKSk7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RVSURl
bGVnYXRlCi0KLS0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBydW5KYXZhU2Ny
aXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgaW5pdGlhdGVkQnlG
cmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9p
ZCkpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBpZiAoX3J1bkphdmFTY3JpcHRBbGVydFBhbmVs
V2l0aE1lc3NhZ2UpCi0gICAgICAgIF9ydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdl
KHdlYlZpZXcsIG1lc3NhZ2UsIGZyYW1lLCBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgZWxzZQot
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotfQotCi1AZW5kCi0KIFRFU1QoUmVzb3VyY2VM
b2FkRGVsZWdhdGUsIEJhc2ljKQogewogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1dLV2Vi
VmlldyBuZXddKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
V2Vic2l0ZVBvbGljaWVzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvV2Vic2l0ZVBvbGljaWVzLm1tCShyZXZpc2lvbiAyNTkxNjMpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVQb2xpY2llcy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxp
dGllcy5oIgogI2ltcG9ydCAiVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5oIgorI2ltcG9ydCAiVGVz
dFVJRGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgPFdlYktp
dC9XS011dGFibGVEaWN0aW9uYXJ5Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tOYXZpZ2F0aW9uRGVs
ZWdhdGVQcml2YXRlLmg+CkBAIC0xNzIzLDMgKzE3MjQsNjMgQEAgVEVTVChXZWJwYWdlUHJlZmVy
ZW5jZXMsIFdlYnNpdGVQb2xpY2llcwogCiAgICAgRVhQRUNUX05FKHBpZDEsIFtjb29raWVXZWJW
aWV3IF93ZWJQcm9jZXNzSWRlbnRpZmllcl0pOwogfQorCitURVNUKFdlYnBhZ2VQcmVmZXJlbmNl
cywgV2Vic2l0ZVBvbGljaWVzVXNlckNvbnRlbnRDb250cm9sbGVyKQoreworICAgIGF1dG8gbWFr
ZVNjcmlwdCA9IFtdIChOU1N0cmluZyAqc2NyaXB0KSB7CisgICAgICAgIHJldHVybiBbW1tXS1Vz
ZXJTY3JpcHQgYWxsb2NdIGluaXRXaXRoU291cmNlOnNjcmlwdCBpbmplY3Rpb25UaW1lOldLVXNl
clNjcmlwdEluamVjdGlvblRpbWVBdERvY3VtZW50U3RhcnQgZm9yTWFpbkZyYW1lT25seTpZRVNd
IGF1dG9yZWxlYXNlXTsKKyAgICB9OworICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZp
Z3VyYXRpb24gPSBbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07Cisg
ICAgW2NvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyIGFkZFVzZXJTY3JpcHQ6bWFr
ZVNjcmlwdChAImFsZXJ0KCd0ZXN0QWxlcnQxJykiKV07CisgICAgVGVzdFdLV2ViVmlldyAqd2Vi
VmlldyA9IFtbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07
CisgICAgVGVzdFVJRGVsZWdhdGUgKnVpRGVsZWdhdGUgPSBbW1Rlc3RVSURlbGVnYXRlIG5ld10g
YXV0b3JlbGVhc2VdOworICAgIHdlYlZpZXcuVUlEZWxlZ2F0ZSA9IHVpRGVsZWdhdGU7CisgICAg
VGVzdE5hdmlnYXRpb25EZWxlZ2F0ZSAqbmF2aWdhdGlvbkRlbGVnYXRlID0gW1tUZXN0TmF2aWdh
dGlvbkRlbGVnYXRlIG5ld10gYXV0b3JlbGVhc2VdOworICAgIF9fYmxvY2sgYm9vbCBpZnJhbWVF
eGNlcHRpb25UaHJvd24gPSBmYWxzZTsKKyAgICBfX2Jsb2NrIFJldGFpblB0cjxXS1VzZXJDb250
ZW50Q29udHJvbGxlcj4gcmVwbGFjZW1lbnRVc2VyQ29udGVudENvbnRyb2xsZXI7CisgICAgbmF2
aWdhdGlvbkRlbGVnYXRlLmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25XaXRoUHJlZmVy
ZW5jZXMgPSBeKFdLTmF2aWdhdGlvbkFjdGlvbiAqYWN0aW9uLCBXS1dlYnBhZ2VQcmVmZXJlbmNl
cyAqLCB2b2lkICheY29tcGxldGlvbkhhbmRsZXIpKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeSwg
V0tXZWJwYWdlUHJlZmVyZW5jZXMgKikpIHsKKyAgICAgICAgaWYgKFthY3Rpb24ucmVxdWVzdC5V
UkwucGF0aCBoYXNTdWZmaXg6QCIvc2ltcGxlLWlmcmFtZS5odG1sIl0pIHsKKyAgICAgICAgICAg
IFdURkxvZ0Fsd2F5cygiU0lNUExFIElGUkFNRSIpOworICAgICAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUFsbG93LCBuaWwpOworICAgICAg
ICB9CisgICAgICAgIGlmIChbYWN0aW9uLnJlcXVlc3QuVVJMLnBhdGggaGFzU3VmZml4OkAiL3Np
bXBsZS5odG1sIl0pIHsKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiU0lNUExFIik7CisgICAg
ICAgICAgICBAdHJ5IHsKKyAgICAgICAgICAgICAgICBXS1dlYnBhZ2VQcmVmZXJlbmNlcyAqcHJl
ZmVyZW5jZXMgPSBbW1dLV2VicGFnZVByZWZlcmVuY2VzIG5ld10gYXV0b3JlbGVhc2VdOworICAg
ICAgICAgICAgICAgIHByZWZlcmVuY2VzLl91c2VyQ29udGVudENvbnRyb2xsZXIgPSBbW1dLVXNl
ckNvbnRlbnRDb250cm9sbGVyIG5ld10gYXV0b3JlbGVhc2VdOworICAgICAgICAgICAgICAgIHJl
dHVybiBjb21wbGV0aW9uSGFuZGxlcihXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvdywgcHJl
ZmVyZW5jZXMpOworICAgICAgICAgICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24p
IHsKKyAgICAgICAgICAgICAgICBpZnJhbWVFeGNlcHRpb25UaHJvd24gPSB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBFWFBFQ1RfVFJVRShbYWN0aW9uLnJlcXVlc3QuVVJMLnBhdGggaGFzU3VmZml4OkAiL3NpbXBs
ZTIuaHRtbCJdKTsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJTSU1QTEUyIik7CisgICAgICAgIFdL
V2VicGFnZVByZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9IFtbV0tXZWJwYWdlUHJlZmVyZW5jZXMg
bmV3XSBhdXRvcmVsZWFzZV07CisgICAgICAgIHJlcGxhY2VtZW50VXNlckNvbnRlbnRDb250cm9s
bGVyID0gYWRvcHROUyhbV0tVc2VyQ29udGVudENvbnRyb2xsZXIgbmV3XSk7CisgICAgICAgIFty
ZXBsYWNlbWVudFVzZXJDb250ZW50Q29udHJvbGxlciBhZGRVc2VyU2NyaXB0Om1ha2VTY3JpcHQo
QCJhbGVydCgndGVzdEFsZXJ0MicpIildOworICAgICAgICBwcmVmZXJlbmNlcy5fdXNlckNvbnRl
bnRDb250cm9sbGVyID0gcmVwbGFjZW1lbnRVc2VyQ29udGVudENvbnRyb2xsZXIuZ2V0KCk7Cisg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUFsbG93LCBw
cmVmZXJlbmNlcyk7CisgICAgfTsKKyAgICB3ZWJWaWV3Lm5hdmlnYXRpb25EZWxlZ2F0ZSA9IG5h
dmlnYXRpb25EZWxlZ2F0ZTsKKworICAgIFt3ZWJWaWV3IGxvYWRUZXN0UGFnZU5hbWVkOkAic2lt
cGxlLWlmcmFtZSJdOworICAgIEVYUEVDVF9XS19TVFJFUShbdWlEZWxlZ2F0ZSB3YWl0Rm9yQWxl
cnRdLCAidGVzdEFsZXJ0MSIpOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmaWZyYW1l
RXhjZXB0aW9uVGhyb3duKTsKKworICAgIFt3ZWJWaWV3IGxvYWRUZXN0UGFnZU5hbWVkOkAic2lt
cGxlMiJdOworICAgIEVYUEVDVF9XS19TVFJFUShbdWlEZWxlZ2F0ZSB3YWl0Rm9yQWxlcnRdLCAi
dGVzdEFsZXJ0MiIpOworCisgICAgYm9vbCBjYXVnaHRFeGNlcHRpb24gPSBmYWxzZTsKKyAgICBA
dHJ5IHsKKyAgICAgICAgV0tXZWJwYWdlUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gW1tXS1dl
YnBhZ2VQcmVmZXJlbmNlcyBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgcHJlZmVyZW5jZXMu
X3VzZXJDb250ZW50Q29udHJvbGxlciA9IFtbV0tVc2VyQ29udGVudENvbnRyb2xsZXIgbmV3XSBh
dXRvcmVsZWFzZV07CisgICAgICAgIFt3ZWJWaWV3IF91cGRhdGVXZWJwYWdlUHJlZmVyZW5jZXM6
cHJlZmVyZW5jZXNdOworICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7Cisg
ICAgICAgIGNhdWdodEV4Y2VwdGlvbiA9IHRydWU7CisgICAgfQorICAgIEVYUEVDVF9UUlVFKGNh
dWdodEV4Y2VwdGlvbik7CisKKyAgICAvLyBGSVhNRTogTWFrZSBfYWRkVXNlclNjcmlwdEltbWVk
aWF0ZWx5IHdvcmsgc3VjY2Vzc2Z1bGx5IGFmdGVyIHVzaW5nIFdLV2VicGFnZVByZWZlcmVuY2Vz
Ll91c2VyQ29udGVudENvbnRyb2xsZXIKK30KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29j
b2EvVGVzdFVJRGVsZWdhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL2Nv
Y29hL1Rlc3RVSURlbGVnYXRlLmgJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9jb2NvYS9UZXN0VUlEZWxlZ2F0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0
ZVByaXZhdGUuaD4KKworQGludGVyZmFjZSBUZXN0VUlEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS1VJ
RGVsZWdhdGU+CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSB2b2lkIChecnVuSmF2YVNj
cmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZSkoV0tXZWJWaWV3ICosIE5TU3RyaW5nICosIFdLRnJh
bWVJbmZvICosIHZvaWQgKF4pKHZvaWQpKTsKKworLSAoTlNTdHJpbmcgKil3YWl0Rm9yQWxlcnQ7
CisKK0BlbmQKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFVJRGVsZWdhdGUu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlEZWxlZ2F0
ZS5tbQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RVSURl
bGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RVSURlbGVnYXRlLmgiCisKKyNpbXBvcnQg
IlV0aWxpdGllcy5oIgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5n
Lmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0VUlE
ZWxlZ2F0ZQorCistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuSmF2YVNj
cmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGluaXRpYXRlZEJ5
RnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZv
aWQpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgaWYgKF9ydW5KYXZhU2NyaXB0QWxlcnRQYW5l
bFdpdGhNZXNzYWdlKQorICAgICAgICBfcnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2Fn
ZSh3ZWJWaWV3LCBtZXNzYWdlLCBmcmFtZSwgY29tcGxldGlvbkhhbmRsZXIpOworICAgIGVsc2UK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKK30KKworLSAoTlNTdHJpbmcgKil3YWl0Rm9y
QWxlcnQKK3sKKyAgICBFWFBFQ1RfRkFMU0Uoc2VsZi5ydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdp
dGhNZXNzYWdlKTsKKworICAgIF9fYmxvY2sgYm9vbCBmaW5pc2hlZCA9IGZhbHNlOworICAgIF9f
YmxvY2sgUmV0YWluUHRyPE5TU3RyaW5nPiByZXN1bHQ7CisgICAgc2VsZi5ydW5KYXZhU2NyaXB0
QWxlcnRQYW5lbFdpdGhNZXNzYWdlID0gXihXS1dlYlZpZXcgKiwgTlNTdHJpbmcgKm1lc3NhZ2Us
IFdLRnJhbWVJbmZvICosIHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlcikodm9pZCkpIHsKKyAgICAg
ICAgcmVzdWx0ID0gbWVzc2FnZTsKKyAgICAgICAgZmluaXNoZWQgPSB0cnVlOworICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOworICAgIH07CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmZpbmlzaGVkKTsKKworICAgIHNlbGYucnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVz
c2FnZSA9IG5pbDsKKyAgICByZXR1cm4gcmVzdWx0LmF1dG9yZWxlYXNlKCk7Cit9CisKK0BlbmQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395015</attachid>
            <date>2020-03-30 22:04:50 -0700</date>
            <delta_ts>2020-03-31 09:05:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209795-20200330220449.patch</filename>
            <type>text/plain</type>
            <size>79444</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTkxNjMpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBACisyMDIwLTAzLTMwICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIFNQSSBXS1dl
YnBhZ2VQcmVmZXJlbmNlcy5fdXNlckNvbnRlbnRDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk3OTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gc3dp
dGNoIHdoaWNoIFdLVXNlckNvbnRlbnRDb250cm9sbGVyIHdlIGFyZSB1c2luZyBhdCBkZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uIHRpbWUKKyAgICAgICAgbGlrZSB3ZSBkbyBXS1dlYnNp
dGVEYXRhU3RvcmVzLiAgVGhpcyBpcyBvbmx5IGFsbG93ZWQgd2l0aCBtYWluIGZyYW1lIG5hdmln
YXRpb25zLgorCisgICAgICAgIFRvIGRvIHRoaXMgSSBtb3ZlZCBVc2VyQ29udGVudENvbnRyb2xs
ZXJQYXJhbWV0ZXJzIGludG8gdGhlaXIgb3duIHN0cnVjdC4KKyAgICAgICAgSSByZW1vdmUgdW51
c2VkIFdlYnNpdGVQb2xpY2llc0RhdGEud2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuCisgICAg
ICAgIEkgcGFzcyBhbiBBUEk6OldlYnNpdGVQb2xpY2llcyogZnVydGhlciBkb3duIHRoZSBjaGFp
biBpbnN0ZWFkIG9mIHN3aXRjaGluZyB0byBPcHRpb25hbDxXZWJzaXRlUG9saWNpZXNEYXRhPiwK
KyAgICAgICAgd2hpY2ggYWxsb3dzIHVzIHRvIGFjY2VzcyB0aGUgV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHkqIGZyb20gdGhlIGZvcm1lciBpbiBXZWJQYWdlUHJveHk6OmNyZWF0aW9uUGFy
YW1ldGVycy4KKyAgICAgICAgSSByZW1vdmVkIGFuIHVudXNlZCBXZWJzaXRlUG9saWNpZXMgY29u
c3RydWN0b3IuCisgICAgICAgIEkgYWRkZWQgYSBtaXNzaW5nIGNvcGllZCBtZW1iZXIgdmFyaWFi
bGUgaW4gV2Vic2l0ZVBvbGljaWVzOjpjb3B5LgorICAgICAgICBJIGFkZGVkIHNvbWUgYXNzZXJ0
aW9ucyBpbiBXZWJQYWdlUHJveHkgdGhhdCB3ZSB3ZXJlIHVuYWJsZSB0byBhZGQgYmVmb3JlIFNh
ZmFyaSBhZG9wdGVkIFdLTmF2aWdhdGlvbkRlbGVnYXRlLgorCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAqIFNoYXJlZC9Vc2VyQ29udGVudENv
bnRyb2xsZXJQYXJhbWV0ZXJzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlVzZXJDb250
ZW50Q29udHJvbGxlclBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hh
cmVkL1VzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnMuaDogQWRkZWQuCisgICAgICAgICog
U2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9X
ZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogU2hhcmVkL1dlYnNpdGVQb2xp
Y2llc0RhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlUG9saWNpZXNEYXRhOjplbmNv
ZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlUG9saWNpZXNEYXRhOjpkZWNvZGUp
OgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlUG9saWNpZXNEYXRhLmg6CisgICAgICAgICogU291
cmNlcy50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9saWNpZXMuY3Bw
OgorICAgICAgICAoQVBJOjpXZWJzaXRlUG9saWNpZXM6OmNvcHkgY29uc3QpOgorICAgICAgICAo
QVBJOjpXZWJzaXRlUG9saWNpZXM6OnNldFVzZXJDb250ZW50Q29udHJvbGxlcik6CisgICAgICAg
IChBUEk6OldlYnNpdGVQb2xpY2llczo6ZGF0YSk6CisgICAgICAgIChBUEk6OldlYnNpdGVQb2xp
Y2llczo6V2Vic2l0ZVBvbGljaWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSVdlYnNpdGVQb2xpY2llcy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2Uu
Y3BwOgorICAgICAgICAoV0tQYWdlVXBkYXRlV2Vic2l0ZVBvbGljaWVzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF91
cGRhdGVXZWJwYWdlUHJlZmVyZW5jZXM6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYnBhZ2VQcmVmZXJlbmNlcy5tbToKKyAgICAgICAgKC1bV0tXZWJwYWdlUHJlZmVyZW5j
ZXMgX3VzZXJDb250ZW50Q29udHJvbGxlcl0pOgorICAgICAgICAoLVtXS1dlYnBhZ2VQcmVmZXJl
bmNlcyBfc2V0VXNlckNvbnRlbnRDb250cm9sbGVyOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlv
blN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9u
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpQcm92aXNpb25hbFBhZ2VQcm94eTo6UHJvdmlzaW9uYWxQYWdlUHJveHkpOgor
ICAgICAgICAoV2ViS2l0OjpQcm92aXNpb25hbFBhZ2VQcm94eTo6aW5pdGlhbGl6ZVdlYlBhZ2Up
OgorICAgICAgICAoV2ViS2l0OjpQcm92aXNpb25hbFBhZ2VQcm94eTo6Z29Ub0JhY2tGb3J3YXJk
SXRlbSk6CisgICAgICAgICogVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFk
ZFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94
eTo6cGFyYW1ldGVycyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5Ojpjb250ZW50UnVsZUxpc3REYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmNvbnRlbnRSdWxlTGlzdERhdGEpOiBE
ZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY2VpdmVkTmF2aWdhdGlvblBvbGljeURl
Y2lzaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZWNlaXZlZFBvbGljeURl
Y2lzaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpjb250aW51ZU5hdmlnYXRp
b25Jbk5ld1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OmRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2VTaGFyZWQpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjphZGRXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5o
OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6bV9wcm9j
ZXNzRGlzcGxheU5hbWUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKToKKwogMjAyMC0w
My0yOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAg
ICAgIERlcHJlY2F0ZSBpbmplY3RlZCBidW5kbGUgcGFnZSBncm91cCBTUEkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9Tb3VyY2Vz
LnR4dAkocmV2aXNpb24gMjU5MTYzKQorKysgU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMTgxLDYgKzE4MSw3IEBAIFNoYXJlZC9Ub3VjaEJhck1lbnVJdGVtRGF0
YS5jcHAKIFNoYXJlZC9VUkxTY2hlbWVUYXNrUGFyYW1ldGVycy5jcHAKIFNoYXJlZC9VcGRhdGVJ
bmZvLmNwcAogU2hhcmVkL1VzZXJEYXRhLmNwcAorU2hhcmVkL1VzZXJDb250ZW50Q29udHJvbGxl
clBhcmFtZXRlcnMuY3BwCiBTaGFyZWQvV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAKIFNoYXJl
ZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5jcHAKIFNoYXJlZC9XZWJDb21waWxlZENvbnRl
bnRSdWxlTGlzdERhdGEuY3BwCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtTZXNzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtTZXNzaW9uLmNwcAkocmV2aXNpb24gMjU5MTYzKQorKysgU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKICNp
bmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIk5ldHdv
cmtSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJh
bWV0ZXJzLmgiCiAjaW5jbHVkZSAiUGluZ0xvYWQuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgpJbmRleDogU291cmNlL1dlYktp
dC9TaGFyZWQvVXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9TaGFyZWQvVXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVycy5j
cHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvVXNlckNvbnRlbnRDb250
cm9sbGVyUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVudENvbnRy
b2xsZXJQYXJhbWV0ZXJzLmgiCisKKyNpbmNsdWRlICJEZWNvZGVyLmgiCisjaW5jbHVkZSAiRW5j
b2Rlci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBVc2VyQ29udGVudENvbnRyb2xs
ZXJQYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAg
IGVuY29kZXIgPDwgdXNlckNvbnRlbnRXb3JsZHM7CisgICAgZW5jb2RlciA8PCB1c2VyU2NyaXB0
czsKKyAgICBlbmNvZGVyIDw8IHVzZXJTdHlsZVNoZWV0czsKKyAgICBlbmNvZGVyIDw8IG1lc3Nh
Z2VIYW5kbGVyczsKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorICAgIGVuY29kZXIg
PDwgY29udGVudFJ1bGVMaXN0czsKKyNlbmRpZgorfQorCitPcHRpb25hbDxVc2VyQ29udGVudENv
bnRyb2xsZXJQYXJhbWV0ZXJzPiBVc2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzOjpkZWNv
ZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPFZlY3RvcjxzdGQ6OnBh
aXI8Q29udGVudFdvcmxkSWRlbnRpZmllciwgU3RyaW5nPj4+IHVzZXJDb250ZW50V29ybGRzOwor
ICAgIGRlY29kZXIgPj4gdXNlckNvbnRlbnRXb3JsZHM7CisgICAgaWYgKCF1c2VyQ29udGVudFdv
cmxkcykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPFZlY3Rv
cjxXZWJVc2VyU2NyaXB0RGF0YT4+IHVzZXJTY3JpcHRzOworICAgIGRlY29kZXIgPj4gdXNlclNj
cmlwdHM7CisgICAgaWYgKCF1c2VyU2NyaXB0cykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICAKKyAgICBPcHRpb25hbDxWZWN0b3I8V2ViVXNlclN0eWxlU2hlZXREYXRhPj4gdXNl
clN0eWxlU2hlZXRzOworICAgIGRlY29kZXIgPj4gdXNlclN0eWxlU2hlZXRzOworICAgIGlmICgh
dXNlclN0eWxlU2hlZXRzKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIAorICAg
IE9wdGlvbmFsPFZlY3RvcjxXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckRhdGE+PiBtZXNzYWdlSGFu
ZGxlcnM7CisgICAgZGVjb2RlciA+PiBtZXNzYWdlSGFuZGxlcnM7CisgICAgaWYgKCFtZXNzYWdl
SGFuZGxlcnMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgCisjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKKyAgICBPcHRpb25hbDxWZWN0b3I8c3RkOjpwYWlyPFN0cmlu
ZywgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhPj4+IGNvbnRlbnRSdWxlTGlzdHM7Cisg
ICAgZGVjb2RlciA+PiBjb250ZW50UnVsZUxpc3RzOworICAgIGlmICghY29udGVudFJ1bGVMaXN0
cykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyNlbmRpZgorCisgICAgcmV0dXJuIHt7
CisgICAgICAgIFdURk1vdmUoKnVzZXJDb250ZW50V29ybGRzKSwKKyAgICAgICAgV1RGTW92ZSgq
dXNlclNjcmlwdHMpLAorICAgICAgICBXVEZNb3ZlKCp1c2VyU3R5bGVTaGVldHMpLAorICAgICAg
ICBXVEZNb3ZlKCptZXNzYWdlSGFuZGxlcnMpLAorI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCisgICAgICAgIFdURk1vdmUoKmNvbnRlbnRSdWxlTGlzdHMpLAorI2VuZGlmCisgICAgfX07
Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hh
cmVkL1VzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9Vc2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvVXNlckNvbnRlbnRDb250cm9sbGVyUGFy
YW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YS5o
IgorI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oIgorCituYW1l
c3BhY2UgSVBDIHsKK2NsYXNzIEVuY29kZXI7CitjbGFzcyBEZWNvZGVyOworfQorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworc3RydWN0IFVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnMgewor
CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb250ZW50V29ybGRJZGVudGlmaWVyLCBTdHJpbmc+PiB1
c2VyQ29udGVudFdvcmxkczsKKyAgICBWZWN0b3I8V2ViVXNlclNjcmlwdERhdGE+IHVzZXJTY3Jp
cHRzOworICAgIFZlY3RvcjxXZWJVc2VyU3R5bGVTaGVldERhdGE+IHVzZXJTdHlsZVNoZWV0czsK
KyAgICBWZWN0b3I8V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXJEYXRhPiBtZXNzYWdlSGFuZGxlcnM7
CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFN0
cmluZywgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhPj4gY29udGVudFJ1bGVMaXN0czsK
KyNlbmRpZgorCisgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNvZGVyJikgY29uc3Q7CisgICAgc3Rh
dGljIE9wdGlvbmFsPFVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnM+IGRlY29kZShJUEM6
OkRlY29kZXImKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dl
YktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlz
aW9uIDI1OTE2MykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFt
ZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsMTMgKzEyNyw3IEBAIHZvaWQgV2ViUGFn
ZUNyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKEkKICAgICBlbmNvZGVyIDw8IG5lZWRzRm9udEF0
dHJpYnV0ZXM7CiAgICAgZW5jb2RlciA8PCBpY2VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkOwog
ICAgIGVuY29kZXIgPDwgZW51bWVyYXRpbmdBbGxOZXR3b3JrSW50ZXJmYWNlc0VuYWJsZWQ7Ci0g
ICAgZW5jb2RlciA8PCB1c2VyQ29udGVudFdvcmxkczsKLSAgICBlbmNvZGVyIDw8IHVzZXJTY3Jp
cHRzOwotICAgIGVuY29kZXIgPDwgdXNlclN0eWxlU2hlZXRzOwotICAgIGVuY29kZXIgPDwgbWVz
c2FnZUhhbmRsZXJzOwotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgZW5jb2Rl
ciA8PCBjb250ZW50UnVsZUxpc3RzOwotI2VuZGlmCisgICAgZW5jb2RlciA8PCB1c2VyQ29udGVu
dENvbnRyb2xsZXJQYXJhbWV0ZXJzOwogICAgIGVuY29kZXIgPDwgYmFja2dyb3VuZENvbG9yOwog
ICAgIGVuY29kZXIgPDwgb2xkUGFnZUlEOwogICAgIGVuY29kZXIgPDwgb3ZlcnJpZGRlbk1lZGlh
VHlwZTsKQEAgLTM5MiwzNyArMzg2LDExIEBAIE9wdGlvbmFsPFdlYlBhZ2VDcmVhdGlvblBhcmFt
ZXRlcnM+IFdlYlAKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMuZW51bWVyYXRp
bmdBbGxOZXR3b3JrSW50ZXJmYWNlc0VuYWJsZWQpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgT3B0aW9uYWw8VmVjdG9yPHN0ZDo6cGFpcjxDb250ZW50V29ybGRJZGVudGlm
aWVyLCBTdHJpbmc+Pj4gdXNlckNvbnRlbnRXb3JsZHM7Ci0gICAgZGVjb2RlciA+PiB1c2VyQ29u
dGVudFdvcmxkczsKLSAgICBpZiAoIXVzZXJDb250ZW50V29ybGRzKQotICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMudXNlckNvbnRlbnRXb3JsZHMgPSBXVEZNb3Zl
KCp1c2VyQ29udGVudFdvcmxkcyk7Ci0KLSAgICBPcHRpb25hbDxWZWN0b3I8V2ViVXNlclNjcmlw
dERhdGE+PiB1c2VyU2NyaXB0czsKLSAgICBkZWNvZGVyID4+IHVzZXJTY3JpcHRzOwotICAgIGlm
ICghdXNlclNjcmlwdHMpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1l
dGVycy51c2VyU2NyaXB0cyA9IFdURk1vdmUoKnVzZXJTY3JpcHRzKTsKLSAgICAKLSAgICBPcHRp
b25hbDxWZWN0b3I8V2ViVXNlclN0eWxlU2hlZXREYXRhPj4gdXNlclN0eWxlU2hlZXRzOwotICAg
IGRlY29kZXIgPj4gdXNlclN0eWxlU2hlZXRzOwotICAgIGlmICghdXNlclN0eWxlU2hlZXRzKQor
ICAgIE9wdGlvbmFsPFVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnM+IHVzZXJDb250ZW50
Q29udHJvbGxlclBhcmFtZXRlcnM7CisgICAgZGVjb2RlciA+PiB1c2VyQ29udGVudENvbnRyb2xs
ZXJQYXJhbWV0ZXJzOworICAgIGlmICghdXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVycykK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLnVzZXJTdHlsZVNo
ZWV0cyA9IFdURk1vdmUoKnVzZXJTdHlsZVNoZWV0cyk7Ci0gICAgCi0gICAgT3B0aW9uYWw8VmVj
dG9yPFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyRGF0YT4+IG1lc3NhZ2VIYW5kbGVyczsKLSAgICBk
ZWNvZGVyID4+IG1lc3NhZ2VIYW5kbGVyczsKLSAgICBpZiAoIW1lc3NhZ2VIYW5kbGVycykKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVy
cyA9IFdURk1vdmUoKm1lc3NhZ2VIYW5kbGVycyk7Ci0gICAgCi0jaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKLSAgICBPcHRpb25hbDxWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgV2ViQ29t
cGlsZWRDb250ZW50UnVsZUxpc3REYXRhPj4+IGNvbnRlbnRSdWxlTGlzdHM7Ci0gICAgZGVjb2Rl
ciA+PiBjb250ZW50UnVsZUxpc3RzOwotICAgIGlmICghY29udGVudFJ1bGVMaXN0cykKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmNvbnRlbnRSdWxlTGlzdHMg
PSBXVEZNb3ZlKCpjb250ZW50UnVsZUxpc3RzKTsKLSNlbmRpZgorICAgIHBhcmFtZXRlcnMudXNl
ckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVycyA9IFdURk1vdmUoKnVzZXJDb250ZW50Q29udHJv
bGxlclBhcmFtZXRlcnMpOwogCiAgICAgT3B0aW9uYWw8T3B0aW9uYWw8V2ViQ29yZTo6Q29sb3I+
PiBiYWNrZ3JvdW5kQ29sb3I7CiAgICAgZGVjb2RlciA+PiBiYWNrZ3JvdW5kQ29sb3I7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5o
CShyZXZpc2lvbiAyNTkxNjMpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRp
b25QYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCwxMSBAQAogI2luY2x1
ZGUgIkRyYXdpbmdBcmVhSW5mby5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNp
bmNsdWRlICJTZXNzaW9uU3RhdGUuaCIKLSNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRSdWxl
TGlzdERhdGEuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzLmgi
CiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdy
b3VwRGF0YS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eUlkZW50aWZpZXIuaCIKICNpbmNsdWRl
ICJXZWJQcmVmZXJlbmNlc1N0b3JlLmgiCi0jaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyRGF0YVR5cGVzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BY3Rpdml0eVN0YXRlLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9Db2xvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRTaXplLmg+CkBA
IC0xOTQsMTQgKzE5Myw3IEBAIHN0cnVjdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAg
ICBib29sIGljZUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWQgeyB0cnVlIH07CiAgICAgYm9vbCBl
bnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZhY2VzRW5hYmxlZCB7IGZhbHNlIH07CiAKLSAgICAv
LyBVc2VyQ29udGVudENvbnRyb2xsZXIgbWVtYmVycwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29u
dGVudFdvcmxkSWRlbnRpZmllciwgU3RyaW5nPj4gdXNlckNvbnRlbnRXb3JsZHM7Ci0gICAgVmVj
dG9yPFdlYlVzZXJTY3JpcHREYXRhPiB1c2VyU2NyaXB0czsKLSAgICBWZWN0b3I8V2ViVXNlclN0
eWxlU2hlZXREYXRhPiB1c2VyU3R5bGVTaGVldHM7Ci0gICAgVmVjdG9yPFdlYlNjcmlwdE1lc3Nh
Z2VIYW5kbGVyRGF0YT4gbWVzc2FnZUhhbmRsZXJzOwotI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFdlYkNvbXBpbGVkQ29udGVudFJ1
bGVMaXN0RGF0YT4+IGNvbnRlbnRSdWxlTGlzdHM7Ci0jZW5kaWYKKyAgICBVc2VyQ29udGVudENv
bnRyb2xsZXJQYXJhbWV0ZXJzIHVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnM7CiAKICAg
ICBPcHRpb25hbDxXZWJDb3JlOjpDb2xvcj4gYmFja2dyb3VuZENvbG9yOwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlUG9saWNpZXNEYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlUG9saWNpZXNEYXRhLmNwcAkocmV2aXNpb24gMjU5
MTYzKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZVBvbGljaWVzRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDYgQEAgdm9pZCBXZWJzaXRlUG9saWNpZXNEYXRhOjpl
bmNvZGUoSVBDOjpFbgogICAgIGVuY29kZXIgPDwgYWxsb3dlZEF1dG9wbGF5UXVpcmtzOwogICAg
IGVuY29kZXIgPDwgY3VzdG9tSGVhZGVyRmllbGRzOwogICAgIGVuY29kZXIgPDwgcG9wVXBQb2xp
Y3k7Ci0gICAgZW5jb2RlciA8PCB3ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczsKICAgICBlbmNv
ZGVyIDw8IGN1c3RvbVVzZXJBZ2VudDsKICAgICBlbmNvZGVyIDw8IGN1c3RvbVVzZXJBZ2VudEFz
U2l0ZVNwZWNpZmljUXVpcmtzOwogICAgIGVuY29kZXIgPDwgY3VzdG9tTmF2aWdhdG9yUGxhdGZv
cm07CkBAIC05MSwxMSArOTAsNiBAQCBPcHRpb25hbDxXZWJzaXRlUG9saWNpZXNEYXRhPiBXZWJz
aXRlUG9sCiAgICAgaWYgKCFwb3BVcFBvbGljeSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAotICAgIE9wdGlvbmFsPE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPj4g
d2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM7Ci0gICAgZGVjb2RlciA+PiB3ZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVyczsKLSAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzKQotICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCiAgICAgT3B0aW9uYWw8U3RyaW5nPiBjdXN0b21V
c2VyQWdlbnQ7CiAgICAgZGVjb2RlciA+PiBjdXN0b21Vc2VyQWdlbnQ7CiAgICAgaWYgKCFjdXN0
b21Vc2VyQWdlbnQpCkBAIC0xNTAsNyArMTQ0LDYgQEAgT3B0aW9uYWw8V2Vic2l0ZVBvbGljaWVz
RGF0YT4gV2Vic2l0ZVBvbAogI2VuZGlmCiAgICAgICAgIFdURk1vdmUoKmN1c3RvbUhlYWRlckZp
ZWxkcyksCiAgICAgICAgIFdURk1vdmUoKnBvcFVwUG9saWN5KSwKLSAgICAgICAgV1RGTW92ZSgq
d2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMpLAogICAgICAgICBXVEZNb3ZlKCpjdXN0b21Vc2Vy
QWdlbnQpLAogICAgICAgICBXVEZNb3ZlKCpjdXN0b21Vc2VyQWdlbnRBc1NpdGVTcGVjaWZpY1F1
aXJrcyksCiAgICAgICAgIFdURk1vdmUoKmN1c3RvbU5hdmlnYXRvclBsYXRmb3JtKSwKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVQb2xpY2llc0RhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlUG9saWNpZXNEYXRhLmgJKHJldmlzaW9uIDI1
OTE2MykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVQb2xpY2llc0RhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiV2Vic2l0ZUF1dG9wbGF5
UG9saWN5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZUF1dG9wbGF5UXVpcmsuaCIKLSNpbmNsdWRlICJX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIldlYnNpdGVMZWdhY3lPdmVy
Zmxvd1Njcm9sbGluZ1RvdWNoUG9saWN5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZU1lZGlhU291cmNl
UG9saWN5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZU1ldGFWaWV3cG9ydFBvbGljeS5oIgpAQCAtNjAs
NyArNTksNiBAQCBzdHJ1Y3QgV2Vic2l0ZVBvbGljaWVzRGF0YSB7CiAjZW5kaWYKICAgICBWZWN0
b3I8V2ViQ29yZTo6Q3VzdG9tSGVhZGVyRmllbGRzPiBjdXN0b21IZWFkZXJGaWVsZHM7CiAgICAg
V2Vic2l0ZVBvcFVwUG9saWN5IHBvcFVwUG9saWN5IHsgV2Vic2l0ZVBvcFVwUG9saWN5OjpEZWZh
dWx0IH07Ci0gICAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IHdlYnNpdGVE
YXRhU3RvcmVQYXJhbWV0ZXJzOwogICAgIFN0cmluZyBjdXN0b21Vc2VyQWdlbnQ7CiAgICAgU3Ry
aW5nIGN1c3RvbVVzZXJBZ2VudEFzU2l0ZVNwZWNpZmljUXVpcmtzOwogICAgIFN0cmluZyBjdXN0
b21OYXZpZ2F0b3JQbGF0Zm9ybTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zp
c2lvbmFsUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Qcm92aXNpb25hbFBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDI1OTE2MykKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlByb3Zpc2lvbmFsUGFnZVByb3h5LmgiCiAKICNp
bmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCisjaW5jbHVkZSAiQVBJV2Vic2l0ZVBvbGljaWVzLmgi
CiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgogI2luY2x1ZGUgIkZvcm1EYXRhUmVmZXJl
bmNlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAtNTQsNyArNTUsNyBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKICNkZWZpbmUgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChjaGFubmVsLCBm
bXQsIC4uLikgUkVMRUFTRV9MT0dfSUYobV9wYWdlLmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgp
LCBjaGFubmVsLCAiJXAgLSBQcm92aXNpb25hbFBhZ2VQcm94eTo6IiBmbXQsIHRoaXMsICMjX19W
QV9BUkdTX18pCiAjZGVmaW5lIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQoY2hhbm5lbCwg
Zm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SX0lGKG1fcGFnZS5pc0Fsd2F5c09uTG9nZ2luZ0Fs
bG93ZWQoKSwgY2hhbm5lbCwgIiVwIC0gUHJvdmlzaW9uYWxQYWdlUHJveHk6OiIgZm10LCB0aGlz
LCAjI19fVkFfQVJHU19fKQogCi1Qcm92aXNpb25hbFBhZ2VQcm94eTo6UHJvdmlzaW9uYWxQYWdl
UHJveHkoV2ViUGFnZVByb3h5JiBwYWdlLCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIHByb2Nlc3Ms
IHN0ZDo6dW5pcXVlX3B0cjxTdXNwZW5kZWRQYWdlUHJveHk+IHN1c3BlbmRlZFBhZ2UsIHVpbnQ2
NF90IG5hdmlnYXRpb25JRCwgYm9vbCBpc1NlcnZlclJlZGlyZWN0LCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJv
Y2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCkKK1Byb3Zpc2lvbmFsUGFnZVByb3h5OjpQcm92aXNp
b25hbFBhZ2VQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIFJlZjxXZWJQcm9jZXNzUHJveHk+JiYg
cHJvY2Vzcywgc3RkOjp1bmlxdWVfcHRyPFN1c3BlbmRlZFBhZ2VQcm94eT4gc3VzcGVuZGVkUGFn
ZSwgdWludDY0X3QgbmF2aWdhdGlvbklELCBib29sIGlzU2VydmVyUmVkaXJlY3QsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNs
aWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBBUEk6OldlYnNpdGVQb2xpY2llcyog
d2Vic2l0ZVBvbGljaWVzKQogICAgIDogbV9wYWdlKHBhZ2UpCiAgICAgLCBtX3dlYlBhZ2VJRChz
dXNwZW5kZWRQYWdlID8gc3VzcGVuZGVkUGFnZS0+d2ViUGFnZUlEKCkgOiBQYWdlSWRlbnRpZmll
cjo6Z2VuZXJhdGUoKSkKICAgICAsIG1fcHJvY2VzcyhXVEZNb3ZlKHByb2Nlc3MpKQpAQCAtODgs
NyArODksNyBAQCBQcm92aXNpb25hbFBhZ2VQcm94eTo6UHJvdmlzaW9uYWxQYWdlUHJvCiAgICAg
ICAgIG1fcHJvY2Vzcy0+ZnJhbWVDcmVhdGVkKHN1c3BlbmRlZFBhZ2UtPm1haW5GcmFtZUlEKCks
ICptX21haW5GcmFtZSk7CiAgICAgfQogCi0gICAgaW5pdGlhbGl6ZVdlYlBhZ2UoKTsKKyAgICBp
bml0aWFsaXplV2ViUGFnZSh3ZWJzaXRlUG9saWNpZXMpOwogCiAgICAgbV9wYWdlLmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS5kaWRDcmVhdGVQcm92aXNpb25hbFBhZ2UoKnRoaXMpOwogfQpAQCAtMTM1
LDExICsxMzYsMTEgQEAgdm9pZCBQcm92aXNpb25hbFBhZ2VQcm94eTo6Y2FuY2VsKCkKICAgICBk
aWRGYWlsUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUobV9tYWluRnJhbWUtPmZyYW1lSUQoKSwgeyB9
LCB7IH0sIG1fbmF2aWdhdGlvbklELCBtX3Byb3Zpc2lvbmFsTG9hZFVSTCwgZXJyb3IsIFdlYkNv
cmU6OldpbGxDb250aW51ZUxvYWRpbmc6Ok5vLCBVc2VyRGF0YSB7IH0pOyAvLyBXaWxsIGRlbGV0
ZSB8dGhpc3wuCiB9CiAKLXZvaWQgUHJvdmlzaW9uYWxQYWdlUHJveHk6OmluaXRpYWxpemVXZWJQ
YWdlKCkKK3ZvaWQgUHJvdmlzaW9uYWxQYWdlUHJveHk6OmluaXRpYWxpemVXZWJQYWdlKFJlZlB0
cjxBUEk6OldlYnNpdGVQb2xpY2llcz4mJiB3ZWJzaXRlUG9saWNpZXMpCiB7CiAgICAgbV9kcmF3
aW5nQXJlYSA9IG1fcGFnZS5wYWdlQ2xpZW50KCkuY3JlYXRlRHJhd2luZ0FyZWFQcm94eShtX3By
b2Nlc3MpOwogCi0gICAgYXV0byBwYXJhbWV0ZXJzID0gbV9wYWdlLmNyZWF0aW9uUGFyYW1ldGVy
cyhtX3Byb2Nlc3MsICptX2RyYXdpbmdBcmVhKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBtX3Bh
Z2UuY3JlYXRpb25QYXJhbWV0ZXJzKG1fcHJvY2VzcywgKm1fZHJhd2luZ0FyZWEsIFdURk1vdmUo
d2Vic2l0ZVBvbGljaWVzKSk7CiAgICAgcGFyYW1ldGVycy5pc1Byb2Nlc3NTd2FwID0gdHJ1ZTsK
ICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkNyZWF0ZVdlYlBhZ2Uo
bV93ZWJQYWdlSUQsIHBhcmFtZXRlcnMpLCAwKTsKICAgICBtX3Byb2Nlc3MtPmFkZFZpc2l0ZWRM
aW5rU3RvcmVVc2VyKG1fcGFnZS52aXNpdGVkTGlua1N0b3JlKCksIG1fcGFnZS5pZGVudGlmaWVy
KCkpOwpAQCAtMTY4LDcgKzE2OSw3IEBAIHZvaWQgUHJvdmlzaW9uYWxQYWdlUHJveHk6OmxvYWRS
ZXF1ZXN0KEEKICAgICBtX3BhZ2UubG9hZFJlcXVlc3RXaXRoTmF2aWdhdGlvblNoYXJlZChtX3By
b2Nlc3MuY29weVJlZigpLCBtX3dlYlBhZ2VJRCwgbmF2aWdhdGlvbiwgV1RGTW92ZShyZXF1ZXN0
KSwgbmF2aWdhdGlvbi5sYXN0TmF2aWdhdGlvbkFjdGlvbigpLnNob3VsZE9wZW5FeHRlcm5hbFVS
THNQb2xpY3ksIHVzZXJEYXRhLCBXZWJDb3JlOjpTaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQ6
OlllcywgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiwgaGFzTmF2aWdhdGVkQXdheUZyb21B
cHBCb3VuZERvbWFpbiwgV1RGTW92ZSh3ZWJzaXRlUG9saWNpZXMpKTsKIH0KIAotdm9pZCBQcm92
aXNpb25hbFBhZ2VQcm94eTo6Z29Ub0JhY2tGb3J3YXJkSXRlbShBUEk6Ok5hdmlnYXRpb24mIG5h
dmlnYXRpb24sIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0sIE9wdGlvbmFsPFdlYnNpdGVQ
b2xpY2llc0RhdGE+JiYgd2Vic2l0ZVBvbGljaWVzKQordm9pZCBQcm92aXNpb25hbFBhZ2VQcm94
eTo6Z29Ub0JhY2tGb3J3YXJkSXRlbShBUEk6Ok5hdmlnYXRpb24mIG5hdmlnYXRpb24sIFdlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0sIFJlZlB0cjxBUEk6OldlYnNpdGVQb2xpY2llcz4mJiB3
ZWJzaXRlUG9saWNpZXMpCiB7CiAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChQcm9jZXNzU3dh
cHBpbmcsICJnb1RvQmFja0ZvcndhcmRJdGVtOiBwYWdlUHJveHlJRD0lIiBQUkl1NjQgIiB3ZWJQ
YWdlSUQ9JSIgUFJJdTY0LCBtX3BhZ2UuaWRlbnRpZmllcigpLnRvVUludDY0KCksIG1fd2ViUGFn
ZUlELnRvVUludDY0KCkpOwogCkBAIC0xNzksOCArMTgwLDEzIEBAIHZvaWQgUHJvdmlzaW9uYWxQ
YWdlUHJveHk6OmdvVG9CYWNrRm9yd2EKICAgICAgICAgfQogICAgICAgICByZXR1cm4gJml0ZW0g
IT0gdGFyZ2V0SXRlbTsKICAgICB9KTsKKyAgICAKKyAgICBPcHRpb25hbDxXZWJzaXRlUG9saWNp
ZXNEYXRhPiB3ZWJzaXRlUG9saWNpZXNEYXRhOworICAgIGlmICh3ZWJzaXRlUG9saWNpZXMpCisg
ICAgICAgIHdlYnNpdGVQb2xpY2llc0RhdGEgPSB3ZWJzaXRlUG9saWNpZXMtPmRhdGEoKTsKKyAg
ICAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpVcGRhdGVCYWNrRm9yd2FyZExpc3RGb3JS
ZWF0dGFjaChXVEZNb3ZlKGl0ZW1TdGF0ZXMpKSk7Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6R29Ub0JhY2tGb3J3YXJkSXRlbShuYXZpZ2F0aW9uLm5hdmlnYXRpb25JRCgpLCBpdGVtLml0
ZW1JRCgpLCAqbmF2aWdhdGlvbi5iYWNrRm9yd2FyZEZyYW1lTG9hZFR5cGUoKSwgV2ViQ29yZTo6
U2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkOjpZZXMsIFdURk1vdmUod2Vic2l0ZVBvbGljaWVz
KSkpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdvVG9CYWNrRm9yd2FyZEl0ZW0obmF2
aWdhdGlvbi5uYXZpZ2F0aW9uSUQoKSwgaXRlbS5pdGVtSUQoKSwgKm5hdmlnYXRpb24uYmFja0Zv
cndhcmRGcmFtZUxvYWRUeXBlKCksIFdlYkNvcmU6OlNob3VsZFRyZWF0QXNDb250aW51aW5nTG9h
ZDo6WWVzLCBXVEZNb3ZlKHdlYnNpdGVQb2xpY2llc0RhdGEpKSk7CiAgICAgbV9wcm9jZXNzLT5z
dGFydFJlc3BvbnNpdmVuZXNzVGltZXIoKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCShyZXZpc2lvbiAyNTkxNjMpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02OSw3ICs2OSw3IEBAIHVzaW5nIExheWVySG9zdGluZ0NvbnRleHRJRCA9IHVpbnQz
Ml90OwogY2xhc3MgUHJvdmlzaW9uYWxQYWdlUHJveHkgOiBwdWJsaWMgSVBDOjpNZXNzYWdlUmVj
ZWl2ZXIsIHB1YmxpYyBJUEM6Ok1lc3NhZ2VTZW5kZXIsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxQ
cm92aXNpb25hbFBhZ2VQcm94eT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIFByb3Zpc2lvbmFsUGFnZVByb3h5KFdlYlBhZ2VQcm94eSYsIFJlZjxXZWJQcm9j
ZXNzUHJveHk+JiYsIHN0ZDo6dW5pcXVlX3B0cjxTdXNwZW5kZWRQYWdlUHJveHk+LCB1aW50NjRf
dCBuYXZpZ2F0aW9uSUQsIGJvb2wgaXNTZXJ2ZXJSZWRpcmVjdCwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCk7CisgICAgUHJvdmlz
aW9uYWxQYWdlUHJveHkoV2ViUGFnZVByb3h5JiwgUmVmPFdlYlByb2Nlc3NQcm94eT4mJiwgc3Rk
Ojp1bmlxdWVfcHRyPFN1c3BlbmRlZFBhZ2VQcm94eT4sIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwg
Ym9vbCBpc1NlcnZlclJlZGlyZWN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBQ
cm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBBUEk6OldlYnNpdGVQb2xpY2llcyopOwogICAg
IH5Qcm92aXNpb25hbFBhZ2VQcm94eSgpOwogCiAgICAgV2ViUGFnZVByb3h5JiBwYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9wYWdlOyB9CkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgbG9hZERhdGEoQVBJOjpOYXZpZ2F0aW9uJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwg
Y29uc3QgU3RyaW5nJiBNSU1FVHlwZSwgY29uc3QgU3RyaW5nJiBlbmNvZGluZywgY29uc3QgU3Ry
aW5nJiBiYXNlVVJMLCBBUEk6Ok9iamVjdCogdXNlckRhdGEsIE5hdmlnYXRpbmdUb0FwcEJvdW5k
RG9tYWluLCBOYXZpZ2F0ZWRBd2F5RnJvbUFwcEJvdW5kRG9tYWluLCBPcHRpb25hbDxXZWJzaXRl
UG9saWNpZXNEYXRhPiYmID0gV1RGOjpudWxsb3B0KTsKICAgICB2b2lkIGxvYWRSZXF1ZXN0KEFQ
STo6TmF2aWdhdGlvbiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBBUEk6Ok9iamVjdCog
dXNlckRhdGEsIE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluLCBOYXZpZ2F0ZWRBd2F5RnJvbUFw
cEJvdW5kRG9tYWluLCBPcHRpb25hbDxXZWJzaXRlUG9saWNpZXNEYXRhPiYmID0gV1RGOjpudWxs
b3B0KTsKLSAgICB2b2lkIGdvVG9CYWNrRm9yd2FyZEl0ZW0oQVBJOjpOYXZpZ2F0aW9uJiwgV2Vi
QmFja0ZvcndhcmRMaXN0SXRlbSYsIE9wdGlvbmFsPFdlYnNpdGVQb2xpY2llc0RhdGE+JiYpOwor
ICAgIHZvaWQgZ29Ub0JhY2tGb3J3YXJkSXRlbShBUEk6Ok5hdmlnYXRpb24mLCBXZWJCYWNrRm9y
d2FyZExpc3RJdGVtJiwgUmVmUHRyPEFQSTo6V2Vic2l0ZVBvbGljaWVzPiYmKTsKICAgICB2b2lk
IGNhbmNlbCgpOwogCiAgICAgdm9pZCB1bmZyZWV6ZUxheWVyVHJlZUR1ZVRvU3dpcGVBbmltYXRp
b24oKTsKQEAgLTE0Myw3ICsxNDMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkQ3JlYXRlQ29u
dGV4dEZvclZpc2liaWxpdHlQcm9wYWdhdGlvbihMYXllckhvc3RpbmdDb250ZXh0SUQpOwogI2Vu
ZGlmCiAKLSAgICB2b2lkIGluaXRpYWxpemVXZWJQYWdlKCk7CisgICAgdm9pZCBpbml0aWFsaXpl
V2ViUGFnZShSZWZQdHI8QVBJOjpXZWJzaXRlUG9saWNpZXM+JiYpOwogICAgIGJvb2wgdmFsaWRh
dGVJbnB1dChXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIsIGNvbnN0IE9wdGlvbmFsPHVpbnQ2NF90
PiYgbmF2aWdhdGlvbklEID0gV1RGOjpudWxsb3B0KTsKIAogICAgIFdlYlBhZ2VQcm94eSYgbV9w
YWdlOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZp
c2lvbiAyNTkxNjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMTY4LDMxICszMTY4LDMxIEBAIHZvaWQgV2ViUGFnZVByb3h5
Ojppc05hdmlnYXRpbmdUb0FwcEJvdW4KICAgICBjb21wbGV0aW9uSGFuZGxlcihtX2lzTmF2aWdh
dGluZ1RvQXBwQm91bmREb21haW4gPT0gTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW46Olllcyk7
CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpyZWNlaXZlZE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lv
bihQb2xpY3lBY3Rpb24gcG9saWN5QWN0aW9uLCBBUEk6Ok5hdmlnYXRpb24qIG5hdmlnYXRpb24s
IFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVu
dCwgV2ViRnJhbWVQcm94eSYgZnJhbWUsIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBwb2xpY2llcywg
UmVmPFBvbGljeURlY2lzaW9uU2VuZGVyPiYmIHNlbmRlcikKK3ZvaWQgV2ViUGFnZVByb3h5Ojpy
ZWNlaXZlZE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbihQb2xpY3lBY3Rpb24gcG9saWN5QWN0aW9u
LCBBUEk6Ok5hdmlnYXRpb24qIG5hdmlnYXRpb24sIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGll
bnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgV2ViRnJhbWVQcm94eSYgZnJhbWUsIFJl
ZlB0cjxBUEk6OldlYnNpdGVQb2xpY2llcz4mJiBwb2xpY2llcywgUmVmPFBvbGljeURlY2lzaW9u
U2VuZGVyPiYmIHNlbmRlcikKIHsKICAgICBSZWY8V2Vic2l0ZURhdGFTdG9yZT4gd2Vic2l0ZURh
dGFTdG9yZSA9IG1fd2Vic2l0ZURhdGFTdG9yZS5jb3B5UmVmKCk7Ci0gICAgT3B0aW9uYWw8V2Vi
c2l0ZVBvbGljaWVzRGF0YT4gZGF0YTsKICAgICBpZiAocG9saWNpZXMpIHsKLSAgICAgICAgZGF0
YSA9IHBvbGljaWVzLT5kYXRhKCk7CiAgICAgICAgIGlmIChwb2xpY2llcy0+d2Vic2l0ZURhdGFT
dG9yZSgpICYmIHBvbGljaWVzLT53ZWJzaXRlRGF0YVN0b3JlKCkgIT0gd2Vic2l0ZURhdGFTdG9y
ZS5wdHIoKSkgewogICAgICAgICAgICAgd2Vic2l0ZURhdGFTdG9yZSA9ICpwb2xpY2llcy0+d2Vi
c2l0ZURhdGFTdG9yZSgpOwogICAgICAgICAgICAgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVu
dCA9IFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQ6OlllczsKICAgICAgICAgfQorICAgICAg
ICBpZiAocG9saWNpZXMtPnVzZXJDb250ZW50Q29udHJvbGxlcigpICYmIHBvbGljaWVzLT51c2Vy
Q29udGVudENvbnRyb2xsZXIoKSAhPSBtX3VzZXJDb250ZW50Q29udHJvbGxlci5wdHIoKSkKKyAg
ICAgICAgICAgIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgPSBQcm9jZXNzU3dhcFJlcXVl
c3RlZEJ5Q2xpZW50OjpZZXM7CiAgICAgfQogCiAgICAgaWYgKG5hdmlnYXRpb24gJiYgIW5hdmln
YXRpb24tPnVzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQoKSkgewotICAgICAgICBpZiAoIWRh
dGEpCi0gICAgICAgICAgICBkYXRhID0gV2Vic2l0ZVBvbGljaWVzRGF0YSB7IH07Ci0gICAgICAg
IGRhdGEtPmNvbnRlbnRCbG9ja2Vyc0VuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKCFwb2xp
Y2llcykKKyAgICAgICAgICAgIHBvbGljaWVzID0gQVBJOjpXZWJzaXRlUG9saWNpZXM6OmNyZWF0
ZSgpOworICAgICAgICBwb2xpY2llcy0+c2V0Q29udGVudEJsb2NrZXJzRW5hYmxlZChmYWxzZSk7
CiAgICAgfQogCiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKLSAgICBpZiAobmF2aWdh
dGlvbiAmJiAoIWRhdGEgfHwgZGF0YS0+ZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NT
dGF0ZSA9PSBXZWJDb3JlOjpEZXZpY2VPcmllbnRhdGlvbk9yTW90aW9uUGVybWlzc2lvblN0YXRl
OjpQcm9tcHQpKSB7CisgICAgaWYgKG5hdmlnYXRpb24gJiYgKCFwb2xpY2llcyB8fCBwb2xpY2ll
cy0+ZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NTdGF0ZSgpID09IFdlYkNvcmU6OkRl
dmljZU9yaWVudGF0aW9uT3JNb3Rpb25QZXJtaXNzaW9uU3RhdGU6OlByb21wdCkpIHsKICAgICAg
ICAgYXV0byBkZXZpY2VPcmllbnRhdGlvblBlcm1pc3Npb24gPSB3ZWJzaXRlRGF0YVN0b3JlLT5k
ZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXIoKS5jYWNoZWREZXZpY2VP
cmllbnRhdGlvblBlcm1pc3Npb24oU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tVVJMKG5hdmlnYXRp
b24tPmN1cnJlbnRSZXF1ZXN0KCkudXJsKCkpKTsKICAgICAgICAgaWYgKGRldmljZU9yaWVudGF0
aW9uUGVybWlzc2lvbiAhPSBXZWJDb3JlOjpEZXZpY2VPcmllbnRhdGlvbk9yTW90aW9uUGVybWlz
c2lvblN0YXRlOjpQcm9tcHQpIHsKLSAgICAgICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAg
ICAgICBkYXRhID0gV2Vic2l0ZVBvbGljaWVzRGF0YSB7IH07Ci0gICAgICAgICAgICBkYXRhLT5k
ZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc1N0YXRlID0gZGV2aWNlT3JpZW50YXRpb25Q
ZXJtaXNzaW9uOworICAgICAgICAgICAgaWYgKCFwb2xpY2llcykKKyAgICAgICAgICAgICAgICBw
b2xpY2llcyA9IEFQSTo6V2Vic2l0ZVBvbGljaWVzOjpjcmVhdGUoKTsKKyAgICAgICAgICAgIHBv
bGljaWVzLT5zZXREZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc1N0YXRlKGRldmljZU9y
aWVudGF0aW9uUGVybWlzc2lvbik7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKQEAgLTMyMDYs
NyArMzIwNiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZWNlaXZlZE5hdmlnYXRpb25Qb2wKICAg
ICAgICAgcG9saWN5QWN0aW9uID0gUG9saWN5QWN0aW9uOjpEb3dubG9hZDsKIAogICAgIGlmIChw
b2xpY3lBY3Rpb24gIT0gUG9saWN5QWN0aW9uOjpVc2UgfHwgIWZyYW1lLmlzTWFpbkZyYW1lKCkg
fHwgIW5hdmlnYXRpb24pIHsKLSAgICAgICAgcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihwb2xpY3lB
Y3Rpb24sIG5hdmlnYXRpb24sIFdURk1vdmUoZGF0YSksIFdURk1vdmUoc2VuZGVyKSk7CisgICAg
ICAgIHJlY2VpdmVkUG9saWN5RGVjaXNpb24ocG9saWN5QWN0aW9uLCBuYXZpZ2F0aW9uLCBXVEZN
b3ZlKHBvbGljaWVzKSwgV1RGTW92ZShzZW5kZXIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMzIyMCwxMCArMzIyMCwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVjZWl2ZWROYXZp
Z2F0aW9uUG9sCiAgICAgfQogCiAgICAgcHJvY2VzcygpLnByb2Nlc3NQb29sKCkucHJvY2Vzc0Zv
ck5hdmlnYXRpb24oKnRoaXMsICpuYXZpZ2F0aW9uLCBzb3VyY2VQcm9jZXNzLmNvcHlSZWYoKSwg
c291cmNlVVJMLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBXVEZNb3ZlKHdlYnNpdGVE
YXRhU3RvcmUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwb2xpY3lB
Y3Rpb24sIG5hdmlnYXRpb24gPSBtYWtlUmVmKCpuYXZpZ2F0aW9uKSwgc291cmNlUHJvY2VzcyA9
IHNvdXJjZVByb2Nlc3MuY29weVJlZigpLAotICAgICAgICBkYXRhID0gV1RGTW92ZShkYXRhKSwg
c2VuZGVyID0gV1RGTW92ZShzZW5kZXIpLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50XSAo
UmVmPFdlYlByb2Nlc3NQcm94eT4mJiBwcm9jZXNzRm9yTmF2aWdhdGlvbiwgU3VzcGVuZGVkUGFn
ZVByb3h5KiBkZXN0aW5hdGlvblN1c3BlbmRlZFBhZ2UsIGNvbnN0IFN0cmluZyYgcmVhc29uKSBt
dXRhYmxlIHsKKyAgICAgICAgcG9saWNpZXMgPSBXVEZNb3ZlKHBvbGljaWVzKSwgc2VuZGVyID0g
V1RGTW92ZShzZW5kZXIpLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50XSAoUmVmPFdlYlBy
b2Nlc3NQcm94eT4mJiBwcm9jZXNzRm9yTmF2aWdhdGlvbiwgU3VzcGVuZGVkUGFnZVByb3h5KiBk
ZXN0aW5hdGlvblN1c3BlbmRlZFBhZ2UsIGNvbnN0IFN0cmluZyYgcmVhc29uKSBtdXRhYmxlIHsK
ICAgICAgICAgLy8gSWYgdGhlIG5hdmlnYXRpb24gaGFzIGJlZW4gZGVzdHJveWVkLCB0aGVuIG5v
IG5lZWQgdG8gcHJvY2VlZC4KICAgICAgICAgaWYgKGlzQ2xvc2VkKCkgfHwgIW5hdmlnYXRpb25T
dGF0ZSgpLmhhc05hdmlnYXRpb24obmF2aWdhdGlvbi0+bmF2aWdhdGlvbklEKCkpKSB7Ci0gICAg
ICAgICAgICByZWNlaXZlZFBvbGljeURlY2lzaW9uKHBvbGljeUFjdGlvbiwgbmF2aWdhdGlvbi5w
dHIoKSwgV1RGTW92ZShkYXRhKSwgV1RGTW92ZShzZW5kZXIpKTsKKyAgICAgICAgICAgIHJlY2Vp
dmVkUG9saWN5RGVjaXNpb24ocG9saWN5QWN0aW9uLCBuYXZpZ2F0aW9uLnB0cigpLCBXVEZNb3Zl
KHBvbGljaWVzKSwgV1RGTW92ZShzZW5kZXIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCkBAIC0zMjQ1LDE0ICszMjQ1LDE0IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZWNlaXZl
ZE5hdmlnYXRpb25Qb2wKICAgICAgICAgICAgIGlmIChzdXNwZW5kZWRQYWdlICYmIHN1c3BlbmRl
ZFBhZ2UtPnBhZ2VJc0Nsb3NlZE9yQ2xvc2luZygpKQogICAgICAgICAgICAgICAgIHN1c3BlbmRl
ZFBhZ2UgPSBudWxscHRyOwogCi0gICAgICAgICAgICBjb250aW51ZU5hdmlnYXRpb25Jbk5ld1By
b2Nlc3MobmF2aWdhdGlvbiwgV1RGTW92ZShzdXNwZW5kZWRQYWdlKSwgV1RGTW92ZShwcm9jZXNz
Rm9yTmF2aWdhdGlvbiksIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFdURk1vdmUoZGF0
YSkpOworICAgICAgICAgICAgY29udGludWVOYXZpZ2F0aW9uSW5OZXdQcm9jZXNzKG5hdmlnYXRp
b24sIFdURk1vdmUoc3VzcGVuZGVkUGFnZSksIFdURk1vdmUocHJvY2Vzc0Zvck5hdmlnYXRpb24p
LCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBzdGQ6OmV4Y2hhbmdlKHBvbGljaWVzLCBu
dWxscHRyKSk7CiAgICAgICAgIH0KIAotICAgICAgICByZWNlaXZlZFBvbGljeURlY2lzaW9uKHBv
bGljeUFjdGlvbiwgbmF2aWdhdGlvbi5wdHIoKSwgc2hvdWxkUHJvY2Vzc1N3YXAgPyBXVEY6Om51
bGxvcHQgOiBXVEZNb3ZlKGRhdGEpLCBXVEZNb3ZlKHNlbmRlciksIHNob3VsZFByb2Nlc3NTd2Fw
ID8gV2lsbENvbnRpbnVlTG9hZEluTmV3UHJvY2Vzczo6WWVzIDogV2lsbENvbnRpbnVlTG9hZElu
TmV3UHJvY2Vzczo6Tm8pOworICAgICAgICByZWNlaXZlZFBvbGljeURlY2lzaW9uKHBvbGljeUFj
dGlvbiwgbmF2aWdhdGlvbi5wdHIoKSwgc2hvdWxkUHJvY2Vzc1N3YXAgPyBudWxscHRyIDogV1RG
TW92ZShwb2xpY2llcyksIFdURk1vdmUoc2VuZGVyKSwgc2hvdWxkUHJvY2Vzc1N3YXAgPyBXaWxs
Q29udGludWVMb2FkSW5OZXdQcm9jZXNzOjpZZXMgOiBXaWxsQ29udGludWVMb2FkSW5OZXdQcm9j
ZXNzOjpObyk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpyZWNlaXZlZFBvbGlj
eURlY2lzaW9uKFBvbGljeUFjdGlvbiBhY3Rpb24sIEFQSTo6TmF2aWdhdGlvbiogbmF2aWdhdGlv
biwgT3B0aW9uYWw8V2Vic2l0ZVBvbGljaWVzRGF0YT4mJiB3ZWJzaXRlUG9saWNpZXMsIFJlZjxQ
b2xpY3lEZWNpc2lvblNlbmRlcj4mJiBzZW5kZXIsIFdpbGxDb250aW51ZUxvYWRJbk5ld1Byb2Nl
c3Mgd2lsbENvbnRpbnVlTG9hZEluTmV3UHJvY2VzcykKK3ZvaWQgV2ViUGFnZVByb3h5OjpyZWNl
aXZlZFBvbGljeURlY2lzaW9uKFBvbGljeUFjdGlvbiBhY3Rpb24sIEFQSTo6TmF2aWdhdGlvbiog
bmF2aWdhdGlvbiwgUmVmUHRyPEFQSTo6V2Vic2l0ZVBvbGljaWVzPiYmIHdlYnNpdGVQb2xpY2ll
cywgUmVmPFBvbGljeURlY2lzaW9uU2VuZGVyPiYmIHNlbmRlciwgV2lsbENvbnRpbnVlTG9hZElu
TmV3UHJvY2VzcyB3aWxsQ29udGludWVMb2FkSW5OZXdQcm9jZXNzKQogewogICAgIGlmICghaGFz
UnVubmluZ1Byb2Nlc3MoKSkgewogICAgICAgICBzZW5kZXItPnNlbmQoUG9saWN5RGVjaXNpb24g
eyBzZW5kZXItPmlkZW50aWZpZXIoKSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpLCBo
YXNOYXZpZ2F0ZWRBd2F5RnJvbUFwcEJvdW5kRG9tYWluKCksIFBvbGljeUFjdGlvbjo6SWdub3Jl
LCAwLCBEb3dubG9hZElEKCksIFdURjo6bnVsbG9wdCB9KTsKQEAgLTMyNzcsOCArMzI3NywxMiBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVjZWl2ZWRQb2xpY3lEZWNpc2lvCiAgICAgICAgIGhhbmRs
ZURvd25sb2FkUmVxdWVzdChkb3dubG9hZCk7CiAgICAgICAgIG1fZGVjaWRlUG9saWN5Rm9yUmVz
cG9uc2VSZXF1ZXN0ID0geyB9OwogICAgIH0KKyAgICAKKyAgICBPcHRpb25hbDxXZWJzaXRlUG9s
aWNpZXNEYXRhPiB3ZWJzaXRlUG9saWNpZXNEYXRhOworICAgIGlmICh3ZWJzaXRlUG9saWNpZXMp
CisgICAgICAgIHdlYnNpdGVQb2xpY2llc0RhdGEgPSB3ZWJzaXRlUG9saWNpZXMtPmRhdGEoKTsK
IAotICAgIHNlbmRlci0+c2VuZChQb2xpY3lEZWNpc2lvbiB7IHNlbmRlci0+aWRlbnRpZmllcigp
LCBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKCksIGhhc05hdmlnYXRlZEF3YXlGcm9tQXBw
Qm91bmREb21haW4oKSwgYWN0aW9uLCBuYXZpZ2F0aW9uID8gbmF2aWdhdGlvbi0+bmF2aWdhdGlv
bklEKCkgOiAwLCBkb3dubG9hZElELCBXVEZNb3ZlKHdlYnNpdGVQb2xpY2llcykgfSk7CisgICAg
c2VuZGVyLT5zZW5kKFBvbGljeURlY2lzaW9uIHsgc2VuZGVyLT5pZGVudGlmaWVyKCksIGlzTmF2
aWdhdGluZ1RvQXBwQm91bmREb21haW4oKSwgaGFzTmF2aWdhdGVkQXdheUZyb21BcHBCb3VuZERv
bWFpbigpLCBhY3Rpb24sIG5hdmlnYXRpb24gPyBuYXZpZ2F0aW9uLT5uYXZpZ2F0aW9uSUQoKSA6
IDAsIGRvd25sb2FkSUQsIFdURk1vdmUod2Vic2l0ZVBvbGljaWVzRGF0YSkgfSk7CiB9CiAKIHZv
aWQgV2ViUGFnZVByb3h5Ojpjb21taXRQcm92aXNpb25hbFBhZ2UoRnJhbWVJZGVudGlmaWVyIGZy
YW1lSUQsIEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8sIFJlc291cmNlUmVxdWVzdCYmIHJlcXVl
c3QsIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBm
cmFtZUhhc0N1c3RvbUNvbnRlbnRQcm92aWRlciwgdWludDMyX3QgZnJhbWVMb2FkVHlwZSwgY29u
c3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGJvb2wgdXNlZExl
Z2FjeVRMUywgYm9vbCBjb250YWluc1BsdWdpbkRvY3VtZW50LCBPcHRpb25hbDxXZWJDb3JlOjpI
YXNJbnNlY3VyZUNvbnRlbnQ+IGZvcmNlZEhhc0luc2VjdXJlQ29udGVudCwgY29uc3QgVXNlckRh
dGEmIHVzZXJEYXRhKQpAQCAtMzMyMCw3ICszMzI0LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNv
bW1pdFByb3Zpc2lvbmFsUGFnZQogICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGlkQ29tbWl0
UHJvdmlzaW9uYWxQYWdlKG9sZFdlYlBhZ2VJRCwgbV93ZWJQYWdlSUQpOwogfQogCi12b2lkIFdl
YlBhZ2VQcm94eTo6Y29udGludWVOYXZpZ2F0aW9uSW5OZXdQcm9jZXNzKEFQSTo6TmF2aWdhdGlv
biYgbmF2aWdhdGlvbiwgc3RkOjp1bmlxdWVfcHRyPFN1c3BlbmRlZFBhZ2VQcm94eT4mJiBzdXNw
ZW5kZWRQYWdlLCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIG5ld1Byb2Nlc3MsIFByb2Nlc3NTd2Fw
UmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgT3B0aW9uYWw8
V2Vic2l0ZVBvbGljaWVzRGF0YT4mJiB3ZWJzaXRlUG9saWNpZXMpCit2b2lkIFdlYlBhZ2VQcm94
eTo6Y29udGludWVOYXZpZ2F0aW9uSW5OZXdQcm9jZXNzKEFQSTo6TmF2aWdhdGlvbiYgbmF2aWdh
dGlvbiwgc3RkOjp1bmlxdWVfcHRyPFN1c3BlbmRlZFBhZ2VQcm94eT4mJiBzdXNwZW5kZWRQYWdl
LCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIG5ld1Byb2Nlc3MsIFByb2Nlc3NTd2FwUmVxdWVzdGVk
QnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPEFQSTo6V2Vic2l0
ZVBvbGljaWVzPiYmIHdlYnNpdGVQb2xpY2llcykKIHsKICAgICBSRUxFQVNFX0xPR19JRl9BTExP
V0VEKExvYWRpbmcsICJjb250aW51ZU5hdmlnYXRpb25Jbk5ld1Byb2Nlc3M6IG5ld1Byb2Nlc3NQ
SUQgPSAlaSwgaGFzU3VzcGVuZGVkUGFnZSA9ICVpIiwgbmV3UHJvY2Vzcy0+cHJvY2Vzc0lkZW50
aWZpZXIoKSwgISFzdXNwZW5kZWRQYWdlKTsKICAgICBMT0coTG9hZGluZywgIkNvbnRpbnVpbmcg
bmF2aWdhdGlvbiAlIiBQUkl1NjQgIiAnJXMnIGluIGEgbmV3IHdlYiBwcm9jZXNzIiwgbmF2aWdh
dGlvbi5uYXZpZ2F0aW9uSUQoKSwgbmF2aWdhdGlvbi5sb2dnaW5nU3RyaW5nKCkpOwpAQCAtMzMz
Myw3ICszMzM3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNvbnRpbnVlTmF2aWdhdGlvbkluTgog
ICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZSA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgbV9wcm92
aXNpb25hbFBhZ2UgPSBtYWtlVW5pcXVlPFByb3Zpc2lvbmFsUGFnZVByb3h5PigqdGhpcywgV1RG
TW92ZShuZXdQcm9jZXNzKSwgV1RGTW92ZShzdXNwZW5kZWRQYWdlKSwgbmF2aWdhdGlvbi5uYXZp
Z2F0aW9uSUQoKSwgbmF2aWdhdGlvbi5jdXJyZW50UmVxdWVzdElzUmVkaXJlY3QoKSwgbmF2aWdh
dGlvbi5jdXJyZW50UmVxdWVzdCgpLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50KTsKKyAg
ICBtX3Byb3Zpc2lvbmFsUGFnZSA9IG1ha2VVbmlxdWU8UHJvdmlzaW9uYWxQYWdlUHJveHk+KCp0
aGlzLCBXVEZNb3ZlKG5ld1Byb2Nlc3MpLCBXVEZNb3ZlKHN1c3BlbmRlZFBhZ2UpLCBuYXZpZ2F0
aW9uLm5hdmlnYXRpb25JRCgpLCBuYXZpZ2F0aW9uLmN1cnJlbnRSZXF1ZXN0SXNSZWRpcmVjdCgp
LCBuYXZpZ2F0aW9uLmN1cnJlbnRSZXF1ZXN0KCksIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGll
bnQsIHdlYnNpdGVQb2xpY2llcy5nZXQoKSk7CiAKICAgICBhdXRvIGNvbnRpbnVhdGlvbiA9IFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIG5hdmlnYXRpb24gPSBtYWtlUmVm
KG5hdmlnYXRpb24pLCB3ZWJzaXRlUG9saWNpZXMgPSBXVEZNb3ZlKHdlYnNpdGVQb2xpY2llcyld
KCkgbXV0YWJsZSB7CiAgICAgICAgIGlmIChhdXRvKiBpdGVtID0gbmF2aWdhdGlvbi0+dGFyZ2V0
SXRlbSgpKSB7CkBAIC0zMzUyLDEyICszMzU2LDE2IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpjb250
aW51ZU5hdmlnYXRpb25Jbk4KICAgICAgICAgICAgIG1fcHJvdmlzaW9uYWxQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpTZXRDdXJyZW50SGlzdG9yeUl0ZW1Gb3JSZWF0dGFjaChtX2JhY2tG
b3J3YXJkTGlzdC0+Y3VycmVudEl0ZW0oKS0+aXRlbVN0YXRlKCkpKTsKICAgICAgICAgfQogCisg
ICAgICAgIE9wdGlvbmFsPFdlYnNpdGVQb2xpY2llc0RhdGE+IHdlYnNpdGVQb2xpY2llc0RhdGE7
CisgICAgICAgIGlmICh3ZWJzaXRlUG9saWNpZXMpCisgICAgICAgICAgICB3ZWJzaXRlUG9saWNp
ZXNEYXRhID0gd2Vic2l0ZVBvbGljaWVzLT5kYXRhKCk7CisKICAgICAgICAgLy8gRklYTUU6IFdv
cmsgb3V0IHRpbWluZyBvZiByZXNwb25kaW5nIHdpdGggdGhlIGxhc3QgcG9saWN5IGRlbGVnYXRl
LCBldGMKICAgICAgICAgQVNTRVJUKCFuYXZpZ2F0aW9uLT5jdXJyZW50UmVxdWVzdCgpLmlzRW1w
dHkoKSk7CiAgICAgICAgIGlmIChhdXRvJiBzdWJzdGl0dXRlRGF0YSA9IG5hdmlnYXRpb24tPnN1
YnN0aXR1dGVEYXRhKCkpCi0gICAgICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+bG9hZERhdGEo
bmF2aWdhdGlvbiwgeyBzdWJzdGl0dXRlRGF0YS0+Y29udGVudC5kYXRhKCksIHN1YnN0aXR1dGVE
YXRhLT5jb250ZW50LnNpemUoKSB9LCBzdWJzdGl0dXRlRGF0YS0+TUlNRVR5cGUsIHN1YnN0aXR1
dGVEYXRhLT5lbmNvZGluZywgc3Vic3RpdHV0ZURhdGEtPmJhc2VVUkwsIHN1YnN0aXR1dGVEYXRh
LT51c2VyRGF0YS5nZXQoKSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpLCBoYXNOYXZp
Z2F0ZWRBd2F5RnJvbUFwcEJvdW5kRG9tYWluKCksIFdURk1vdmUod2Vic2l0ZVBvbGljaWVzKSk7
CisgICAgICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+bG9hZERhdGEobmF2aWdhdGlvbiwgeyBz
dWJzdGl0dXRlRGF0YS0+Y29udGVudC5kYXRhKCksIHN1YnN0aXR1dGVEYXRhLT5jb250ZW50LnNp
emUoKSB9LCBzdWJzdGl0dXRlRGF0YS0+TUlNRVR5cGUsIHN1YnN0aXR1dGVEYXRhLT5lbmNvZGlu
Zywgc3Vic3RpdHV0ZURhdGEtPmJhc2VVUkwsIHN1YnN0aXR1dGVEYXRhLT51c2VyRGF0YS5nZXQo
KSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpLCBoYXNOYXZpZ2F0ZWRBd2F5RnJvbUFw
cEJvdW5kRG9tYWluKCksIFdURk1vdmUod2Vic2l0ZVBvbGljaWVzRGF0YSkpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+bG9hZFJlcXVlc3QobmF2aWdhdGlv
biwgUmVzb3VyY2VSZXF1ZXN0IHsgbmF2aWdhdGlvbi0+Y3VycmVudFJlcXVlc3QoKSB9LCBudWxs
cHRyLCBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKCksIGhhc05hdmlnYXRlZEF3YXlGcm9t
QXBwQm91bmREb21haW4oKSwgV1RGTW92ZSh3ZWJzaXRlUG9saWNpZXMpKTsKKyAgICAgICAgICAg
IG1fcHJvdmlzaW9uYWxQYWdlLT5sb2FkUmVxdWVzdChuYXZpZ2F0aW9uLCBSZXNvdXJjZVJlcXVl
c3QgeyBuYXZpZ2F0aW9uLT5jdXJyZW50UmVxdWVzdCgpIH0sIG51bGxwdHIsIGlzTmF2aWdhdGlu
Z1RvQXBwQm91bmREb21haW4oKSwgaGFzTmF2aWdhdGVkQXdheUZyb21BcHBCb3VuZERvbWFpbigp
LCBXVEZNb3ZlKHdlYnNpdGVQb2xpY2llc0RhdGEpKTsKICAgICB9OwogICAgIGlmIChtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPnNob3VsZFBhdXNlTG9hZGluZygqbV9wcm92aXNpb25hbFBhZ2UpKQog
ICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldENvbnRpbnVlTG9hZGluZ0NhbGxiYWNr
KCptX3Byb3Zpc2lvbmFsUGFnZSwgV1RGTW92ZShjb250aW51YXRpb24pKTsKQEAgLTUwOTQsNyAr
NTEwMiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2EKIAogI2lm
IEVOQUJMRShDT05URU5UX0ZJTFRFUklORykKICAgICBpZiAoZnJhbWUuZGlkSGFuZGxlQ29udGVu
dEZpbHRlclVuYmxvY2tOYXZpZ2F0aW9uKHJlcXVlc3QpKQotICAgICAgICByZXR1cm4gcmVjZWl2
ZWRQb2xpY3lEZWNpc2lvbihQb2xpY3lBY3Rpb246Oklnbm9yZSwgbV9uYXZpZ2F0aW9uU3RhdGUt
Pm5hdmlnYXRpb24obmF2aWdhdGlvbklEKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHNlbmRlcikp
OworICAgICAgICByZXR1cm4gcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihQb2xpY3lBY3Rpb246Okln
bm9yZSwgbV9uYXZpZ2F0aW9uU3RhdGUtPm5hdmlnYXRpb24obmF2aWdhdGlvbklEKSwgbnVsbHB0
ciwgV1RGTW92ZShzZW5kZXIpKTsKICNlbmRpZgogCiAgICAgU2hvdWxkRXhwZWN0U2FmZUJyb3dz
aW5nUmVzdWx0IHNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCA9IFNob3VsZEV4cGVjdFNh
ZmVCcm93c2luZ1Jlc3VsdDo6WWVzOwpAQCAtNTEyMCw3ICs1MTI4LDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmRlY2lkZVBvbGljeUZvck5hdmlnYQogICAgICAgICAgICAgICAgIGlmIChwb2xpY2ll
cykKICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbi0+c2V0RWZmZWN0aXZlQ29udGVudE1v
ZGUoZWZmZWN0aXZlQ29udGVudE1vZGVBZnRlckFkanVzdGluZ1BvbGljaWVzKCpwb2xpY2llcywg
bmF2aWdhdGlvbi0+Y3VycmVudFJlcXVlc3QoKSkpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmVjZWl2ZWROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24ocG9saWN5QWN0aW9uLCBuYXZpZ2F0
aW9uLmdldCgpLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBmcmFtZSwgcG9saWNpZXMu
Z2V0KCksIFdURk1vdmUoc2VuZGVyKSk7CisgICAgICAgICAgICByZWNlaXZlZE5hdmlnYXRpb25Q
b2xpY3lEZWNpc2lvbihwb2xpY3lBY3Rpb24sIG5hdmlnYXRpb24uZ2V0KCksIHByb2Nlc3NTd2Fw
UmVxdWVzdGVkQnlDbGllbnQsIGZyYW1lLCBXVEZNb3ZlKHBvbGljaWVzKSwgV1RGTW92ZShzZW5k
ZXIpKTsKICAgICAgICAgfTsKIAogICAgICAgICBpZiAoIW1fcGFnZUNsaWVudCkKQEAgLTUyOTIs
OCArNTMwMCw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW4KICAg
ICBNRVNTQUdFX0NIRUNLKG1fcHJvY2VzcywgZnJhbWUpOwogICAgIE1FU1NBR0VfQ0hFQ0tfVVJM
KG1fcHJvY2VzcywgcmVxdWVzdC51cmwoKSk7CiAKLSAgICBhdXRvIGxpc3RlbmVyID0gbWFrZVJl
ZihmcmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyksIGlkZW50aWZpZXIsIGxpc3RlbmVySUQsIGZyYW1lSURdIChQb2xpY3lB
Y3Rpb24gcG9saWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyosIFByb2Nlc3NTd2FwUmVx
dWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVC
cm93c2luZ1dhcm5pbmc+JiYgc2FmZUJyb3dzaW5nV2FybmluZywgTmF2aWdhdGluZ1RvQXBwQm91
bmREb21haW4gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbikgbXV0YWJsZSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBBc3NlcnQgdGhlIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBpcyBudWxscHRyIGhl
cmUgb25jZSBjbGllbnRzIG9mIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclVzZVdpdGhQb2xpY2llcyBn
byBhd2F5LgorICAgIGF1dG8gbGlzdGVuZXIgPSBtYWtlUmVmKGZyYW1lLT5zZXRVcFBvbGljeUxp
c3RlbmVyUHJveHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaWRlbnRp
ZmllciwgbGlzdGVuZXJJRCwgZnJhbWVJRF0gKFBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24sIEFQ
STo6V2Vic2l0ZVBvbGljaWVzKiBwb2xpY2llcywgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVu
dCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJyb3dzaW5nV2Fybmlu
Zz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5nLCBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiBpc05h
dmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKSBtdXRhYmxlIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIXBvbGljaWVzKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocHJvY2Vzc1N3YXBSZXF1ZXN0
ZWRCeUNsaWVudCA9PSBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50OjpObyk7CiAgICAgICAg
IEFTU0VSVF9VTlVTRUQoc2FmZUJyb3dzaW5nV2FybmluZywgIXNhZmVCcm93c2luZ1dhcm5pbmcp
OwogCkBAIC01MzAxLDcgKzUzMDksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5
Rm9yTmV3V2luCiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRSZWNlaXZl
UG9saWN5RGVjaXNpb24oZnJhbWVJRCwgbGlzdGVuZXJJRCwgcG9saWN5RGVjaXNpb24pKTsKICAg
ICAgICAgfSk7CiAKLSAgICAgICAgcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihwb2xpY3lBY3Rpb24s
IG51bGxwdHIsIFdURjo6bnVsbG9wdCwgV1RGTW92ZShzZW5kZXIpKTsKKyAgICAgICAgcmVjZWl2
ZWRQb2xpY3lEZWNpc2lvbihwb2xpY3lBY3Rpb24sIG51bGxwdHIsIG51bGxwdHIsIFdURk1vdmUo
c2VuZGVyKSk7CiAgICAgfSwgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0OjpObywgU2hv
dWxkRXhwZWN0QXBwQm91bmREb21haW5SZXN1bHQ6Ok5vKSk7CiAKICAgICBpZiAobV9wb2xpY3lD
bGllbnQpCkBAIC01MzQwLDggKzUzNDgsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9s
aWN5Rm9yUmVzcG9uCiAgICAgTUVTU0FHRV9DSEVDS19VUkwocHJvY2VzcywgcmVzcG9uc2UudXJs
KCkpOwogICAgIFJlZlB0cjxBUEk6Ok5hdmlnYXRpb24+IG5hdmlnYXRpb24gPSBuYXZpZ2F0aW9u
SUQgPyBtX25hdmlnYXRpb25TdGF0ZS0+bmF2aWdhdGlvbihuYXZpZ2F0aW9uSUQpIDogbnVsbHB0
cjsKICAgICBhdXRvIGxpc3RlbmVyID0gbWFrZVJlZihmcmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5l
clByb3h5KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHdlYlBhZ2VJRCwg
ZnJhbWVJRCwgaWRlbnRpZmllciwgbGlzdGVuZXJJRCwgbmF2aWdhdGlvbiA9IFdURk1vdmUobmF2
aWdhdGlvbiksCi0gICAgICAgIHByb2Nlc3MgPSBwcm9jZXNzLmNvcHlSZWYoKV0gKFBvbGljeUFj
dGlvbiBwb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1
ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJy
b3dzaW5nV2FybmluZz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5nLCBOYXZpZ2F0aW5nVG9BcHBCb3Vu
ZERvbWFpbiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKSBtdXRhYmxlIHsKLSAgICAgICAg
Ly8gRklYTUU6IEFzc2VydCB0aGUgQVBJOjpXZWJzaXRlUG9saWNpZXMqIGlzIG51bGxwdHIgaGVy
ZSBvbmNlIGNsaWVudHMgb2YgV0tGcmFtZVBvbGljeUxpc3RlbmVyVXNlV2l0aFBvbGljaWVzIGdv
IGF3YXkuCisgICAgICAgIHByb2Nlc3MgPSBwcm9jZXNzLmNvcHlSZWYoKV0gKFBvbGljeUFjdGlv
biBwb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBwb2xpY2llcywgUHJvY2Vzc1N3
YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8
U2FmZUJyb3dzaW5nV2FybmluZz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5nLCBOYXZpZ2F0aW5nVG9B
cHBCb3VuZERvbWFpbiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKSBtdXRhYmxlIHsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIXBvbGljaWVzKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCA9PSBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xp
ZW50OjpObyk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoc2FmZUJyb3dzaW5nV2FybmluZywgIXNh
ZmVCcm93c2luZ1dhcm5pbmcpOwogCkBAIC01MzQ5LDcgKzUzNTcsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uCiAgICAgICAgICAgICBwcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpEaWRSZWNlaXZlUG9saWN5RGVjaXNpb24oZnJhbWVJRCwgbGlzdGVu
ZXJJRCwgcG9saWN5RGVjaXNpb24pLCB3ZWJQYWdlSUQpOwogICAgICAgICB9KTsKICAgICAgICAg
Ci0gICAgICAgIHJlY2VpdmVkUG9saWN5RGVjaXNpb24ocG9saWN5QWN0aW9uLCBuYXZpZ2F0aW9u
LmdldCgpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUoc2VuZGVyKSk7CisgICAgICAgIHJlY2VpdmVk
UG9saWN5RGVjaXNpb24ocG9saWN5QWN0aW9uLCBuYXZpZ2F0aW9uLmdldCgpLCBudWxscHRyLCBX
VEZNb3ZlKHNlbmRlcikpOwogICAgIH0sIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdDo6
Tm8sIFNob3VsZEV4cGVjdEFwcEJvdW5kRG9tYWluUmVzdWx0OjpObykpOwogICAgIGlmIChtX3Bv
bGljeUNsaWVudCkKICAgICAgICAgbV9wb2xpY3lDbGllbnQtPmRlY2lkZVBvbGljeUZvclJlc3Bv
bnNlKCp0aGlzLCAqZnJhbWUsIHJlc3BvbnNlLCByZXF1ZXN0LCBjYW5TaG93TUlNRVR5cGUsIFdU
Rk1vdmUobGlzdGVuZXIpLCBwcm9jZXNzLT50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJE
YXRhLm9iamVjdCgpKS5nZXQoKSk7CkBAIC03NjQ1LDcgKzc2NTMsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6cmVzZXRTdGF0ZUFmdGVyUHJvY2VzCiAgICAgbV9wcm9jZXNzLT5wcm9jZXNzVGVybWlu
YXRlZCgpOwogfQogCi1XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzIFdlYlBhZ2VQcm94eTo6Y3Jl
YXRpb25QYXJhbWV0ZXJzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcywgRHJhd2luZ0FyZWFQcm94
eSYgZHJhd2luZ0FyZWEpCitXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzIFdlYlBhZ2VQcm94eTo6
Y3JlYXRpb25QYXJhbWV0ZXJzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcywgRHJhd2luZ0FyZWFQ
cm94eSYgZHJhd2luZ0FyZWEsIFJlZlB0cjxBUEk6OldlYnNpdGVQb2xpY2llcz4mJiB3ZWJzaXRl
UG9saWNpZXMpCiB7CiAgICAgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwog
CkBAIC03NzcyLDcgKzc3ODAsMTEgQEAgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyBXZWJQYWdl
UHJveHk6OgogICAgIHBhcmFtZXRlcnMuY3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sQ2hlY2tFbmFi
bGVkID0gbV9jb25maWd1cmF0aW9uLT5jcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2xDaGVja0VuYWJs
ZWQoKTsKICAgICBwYXJhbWV0ZXJzLmhhc1Jlc291cmNlTG9hZENsaWVudCA9ICEhbV9yZXNvdXJj
ZUxvYWRDbGllbnQ7CiAKLSAgICBwcm9jZXNzLmFkZFdlYlVzZXJDb250ZW50Q29udHJvbGxlclBy
b3h5KG1fdXNlckNvbnRlbnRDb250cm9sbGVyLCBwYXJhbWV0ZXJzKTsKKyAgICBzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5PiB1c2VyQ29udGVudENv
bnRyb2xsZXIobV91c2VyQ29udGVudENvbnRyb2xsZXIuZ2V0KCkpOworICAgIGlmIChhdXRvKiB1
c2VyQ29udGVudENvbnRyb2xsZXJGcm9tV2Vic2l0ZVBvbGljaWVzID0gd2Vic2l0ZVBvbGljaWVz
ID8gd2Vic2l0ZVBvbGljaWVzLT51c2VyQ29udGVudENvbnRyb2xsZXIoKSA6IG51bGxwdHIpCisg
ICAgICAgIHVzZXJDb250ZW50Q29udHJvbGxlciA9ICp1c2VyQ29udGVudENvbnRyb2xsZXJGcm9t
V2Vic2l0ZVBvbGljaWVzOworICAgIHByb2Nlc3MuYWRkV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveHkodXNlckNvbnRlbnRDb250cm9sbGVyKTsKKyAgICBwYXJhbWV0ZXJzLnVzZXJDb250ZW50
Q29udHJvbGxlclBhcmFtZXRlcnMgPSB1c2VyQ29udGVudENvbnRyb2xsZXIuZ2V0KCkucGFyYW1l
dGVycygpOwogCiAgICAgcGFyYW1ldGVycy5zaG91bGRDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyA9
IHByZWZlcmVuY2VzKCkuY2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3NFbmFibGVkKCk7CiAgICAgcGFy
YW1ldGVycy5zaG91bGRDYXB0dXJlQXVkaW9JbkdQVVByb2Nlc3MgPSBwcmVmZXJlbmNlcygpLmNh
cHR1cmVBdWRpb0luR1BVUHJvY2Vzc0VuYWJsZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyNTkxNjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTEyMyw4ICsxMTIzLDgg
QEAgcHVibGljOgogCiAgICAgY2xhc3MgUG9saWN5RGVjaXNpb25TZW5kZXI7CiAgICAgZW51bSBj
bGFzcyBXaWxsQ29udGludWVMb2FkSW5OZXdQcm9jZXNzIDogYm9vbCB7IE5vLCBZZXMgfTsKLSAg
ICB2b2lkIHJlY2VpdmVkUG9saWN5RGVjaXNpb24oV2ViQ29yZTo6UG9saWN5QWN0aW9uLCBBUEk6
Ok5hdmlnYXRpb24qLCBPcHRpb25hbDxXZWJzaXRlUG9saWNpZXNEYXRhPiYmLCBSZWY8UG9saWN5
RGVjaXNpb25TZW5kZXI+JiYsIFdpbGxDb250aW51ZUxvYWRJbk5ld1Byb2Nlc3MgPSBXaWxsQ29u
dGludWVMb2FkSW5OZXdQcm9jZXNzOjpObyk7Ci0gICAgdm9pZCByZWNlaXZlZE5hdmlnYXRpb25Q
b2xpY3lEZWNpc2lvbihXZWJDb3JlOjpQb2xpY3lBY3Rpb24sIEFQSTo6TmF2aWdhdGlvbiosIFBy
b2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFdlYkZyYW1lUHJveHkmLCBBUEk6OldlYnNpdGVQ
b2xpY2llcyosIFJlZjxQb2xpY3lEZWNpc2lvblNlbmRlcj4mJik7CisgICAgdm9pZCByZWNlaXZl
ZFBvbGljeURlY2lzaW9uKFdlYkNvcmU6OlBvbGljeUFjdGlvbiwgQVBJOjpOYXZpZ2F0aW9uKiwg
UmVmUHRyPEFQSTo6V2Vic2l0ZVBvbGljaWVzPiYmLCBSZWY8UG9saWN5RGVjaXNpb25TZW5kZXI+
JiYsIFdpbGxDb250aW51ZUxvYWRJbk5ld1Byb2Nlc3MgPSBXaWxsQ29udGludWVMb2FkSW5OZXdQ
cm9jZXNzOjpObyk7CisgICAgdm9pZCByZWNlaXZlZE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbihX
ZWJDb3JlOjpQb2xpY3lBY3Rpb24sIEFQSTo6TmF2aWdhdGlvbiosIFByb2Nlc3NTd2FwUmVxdWVz
dGVkQnlDbGllbnQsIFdlYkZyYW1lUHJveHkmLCBSZWZQdHI8QVBJOjpXZWJzaXRlUG9saWNpZXM+
JiYsIFJlZjxQb2xpY3lEZWNpc2lvblNlbmRlcj4mJik7CiAKICAgICB2b2lkIGJhY2tGb3J3YXJk
UmVtb3ZlZEl0ZW0oY29uc3QgV2ViQ29yZTo6QmFja0ZvcndhcmRJdGVtSWRlbnRpZmllciYpOwog
CkBAIC0xMjMwLDcgKzEyMzAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRDaG9vc2VGaWxlc0Zv
ck9wZW5QYW5lbChjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwogICAgIHZvaWQgZGlkQ2FuY2VsRm9y
T3BlblBhbmVsKCk7CiAKLSAgICBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzIGNyZWF0aW9uUGFy
YW1ldGVycyhXZWJQcm9jZXNzUHJveHkmLCBEcmF3aW5nQXJlYVByb3h5Jik7CisgICAgV2ViUGFn
ZUNyZWF0aW9uUGFyYW1ldGVycyBjcmVhdGlvblBhcmFtZXRlcnMoV2ViUHJvY2Vzc1Byb3h5Jiwg
RHJhd2luZ0FyZWFQcm94eSYsIFJlZlB0cjxBUEk6OldlYnNpdGVQb2xpY2llcz4mJiA9IG51bGxw
dHIpOwogCiAgICAgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSYpOwog
CkBAIC0yMjI3LDcgKzIyMjcsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCByZXBvcnRQYWdlTG9h
ZFJlc3VsdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiA9IHsgfSk7CiAKLSAgICB2b2lk
IGNvbnRpbnVlTmF2aWdhdGlvbkluTmV3UHJvY2VzcyhBUEk6Ok5hdmlnYXRpb24mLCBzdGQ6OnVu
aXF1ZV9wdHI8U3VzcGVuZGVkUGFnZVByb3h5PiYmLCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmLCBQ
cm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBPcHRpb25hbDxXZWJzaXRlUG9saWNpZXNEYXRh
PiYmKTsKKyAgICB2b2lkIGNvbnRpbnVlTmF2aWdhdGlvbkluTmV3UHJvY2VzcyhBUEk6Ok5hdmln
YXRpb24mLCBzdGQ6OnVuaXF1ZV9wdHI8U3VzcGVuZGVkUGFnZVByb3h5PiYmLCBSZWY8V2ViUHJv
Y2Vzc1Byb3h5PiYmLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8QVBJOjpX
ZWJzaXRlUG9saWNpZXM+JiYpOwogCiAgICAgdm9pZCBzZXROZWVkc0ZvbnRBdHRyaWJ1dGVzKGJv
b2wpOwogICAgIHZvaWQgdXBkYXRlRm9udEF0dHJpYnV0ZXNBZnRlckVkaXRvclN0YXRlQ2hhbmdl
KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJ
KHJldmlzaW9uIDI1OTE2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0MiwxMCArNTQyLDEwIEBAIHZvaWQgV2ViUHJv
Y2Vzc1Byb3h5OjpyZW1vdmVWaXNpdGVkTGlua1MKICAgICB9CiB9CiAKLXZvaWQgV2ViUHJvY2Vz
c1Byb3h5OjphZGRXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eSYgcHJveHksIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRl
cnMpCit2b2lkIFdlYlByb2Nlc3NQcm94eTo6YWRkV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHkoV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkmIHByb3h5KQogewogICAgIG1fd2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveGllcy5hZGQoJnByb3h5KTsKLSAgICBwcm94eS5hZGRQcm9j
ZXNzKCp0aGlzLCBwYXJhbWV0ZXJzKTsKKyAgICBwcm94eS5hZGRQcm9jZXNzKCp0aGlzKTsKIH0K
IAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSYgcHJveHkpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAkocmV2aXNpb24gMjU5MTYzKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRWaXNpdGVkTGlua1N0
b3JlVXNlcihWaXNpdGVkTGlua1N0b3JlJiwgV2ViUGFnZVByb3h5SWRlbnRpZmllcik7CiAgICAg
dm9pZCByZW1vdmVWaXNpdGVkTGlua1N0b3JlVXNlcihWaXNpdGVkTGlua1N0b3JlJiwgV2ViUGFn
ZVByb3h5SWRlbnRpZmllcik7CiAKLSAgICB2b2lkIGFkZFdlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5KFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5JiwgV2ViUGFnZUNyZWF0aW9uUGFy
YW1ldGVycyYpOworICAgIHZvaWQgYWRkV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkoV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkmKTsKICAgICB2b2lkIGRpZERlc3Ryb3lXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSYpOwog
CiAgICAgUmVmUHRyPEFQSTo6VXNlckluaXRpYXRlZEFjdGlvbj4gdXNlckluaXRpYXRlZEFjdGl2
aXR5KHVpbnQ2NF90KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJz
aXRlUG9saWNpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElXZWJzaXRlUG9saWNpZXMuY3BwCShyZXZpc2lvbiAyNTkxNjMpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZVBvbGljaWVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFQSVdlYnNp
dGVQb2xpY2llcy5oIgogCisjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHku
aCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZVBvbGlj
aWVzRGF0YS5oIgogCkBAIC0zMywxNiArMzQsNiBAQCBuYW1lc3BhY2UgQVBJIHsKIAogV2Vic2l0
ZVBvbGljaWVzOjpXZWJzaXRlUG9saWNpZXMoKSA9IGRlZmF1bHQ7CiAKLVdlYnNpdGVQb2xpY2ll
czo6V2Vic2l0ZVBvbGljaWVzKGJvb2wgY29udGVudEJsb2NrZXJzRW5hYmxlZCwgT3B0aW9uU2V0
PFdlYktpdDo6V2Vic2l0ZUF1dG9wbGF5UXVpcms+IGFsbG93ZWRBdXRvcGxheVF1aXJrcywgV2Vi
S2l0OjpXZWJzaXRlQXV0b3BsYXlQb2xpY3kgYXV0b3BsYXlQb2xpY3ksIFZlY3RvcjxXZWJDb3Jl
OjpIVFRQSGVhZGVyRmllbGQ+JiYgbGVnYWN5Q3VzdG9tSGVhZGVyRmllbGRzLCBWZWN0b3I8V2Vi
Q29yZTo6Q3VzdG9tSGVhZGVyRmllbGRzPiYmIGN1c3RvbUhlYWRlckZpZWxkcywgV2ViS2l0OjpX
ZWJzaXRlUG9wVXBQb2xpY3kgcG9wVXBQb2xpY3ksIFJlZlB0cjxXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU+JiYgd2Vic2l0ZURhdGFTdG9yZSkKLSAgICA6IG1fY29udGVudEJsb2NrZXJzRW5hYmxl
ZChjb250ZW50QmxvY2tlcnNFbmFibGVkKQotICAgICwgbV9hbGxvd2VkQXV0b3BsYXlRdWlya3Mo
YWxsb3dlZEF1dG9wbGF5UXVpcmtzKQotICAgICwgbV9hdXRvcGxheVBvbGljeShhdXRvcGxheVBv
bGljeSkKLSAgICAsIG1fbGVnYWN5Q3VzdG9tSGVhZGVyRmllbGRzKFdURk1vdmUobGVnYWN5Q3Vz
dG9tSGVhZGVyRmllbGRzKSkKLSAgICAsIG1fY3VzdG9tSGVhZGVyRmllbGRzKFdURk1vdmUoY3Vz
dG9tSGVhZGVyRmllbGRzKSkKLSAgICAsIG1fcG9wVXBQb2xpY3kocG9wVXBQb2xpY3kpCi0gICAg
LCBtX3dlYnNpdGVEYXRhU3RvcmUoV1RGTW92ZSh3ZWJzaXRlRGF0YVN0b3JlKSkKLXsgfQotCiBS
ZWY8V2Vic2l0ZVBvbGljaWVzPiBXZWJzaXRlUG9saWNpZXM6OmNvcHkoKSBjb25zdAogewogICAg
IGF1dG8gcG9saWNpZXMgPSBXZWJzaXRlUG9saWNpZXM6OmNyZWF0ZSgpOwpAQCAtNjMsNiArNTQs
OCBAQCBSZWY8V2Vic2l0ZVBvbGljaWVzPiBXZWJzaXRlUG9saWNpZXM6OmNvCiAgICAgcG9saWNp
ZXMtPnNldFNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xpY3kobV9zaW11bGF0ZWRNb3Vz
ZUV2ZW50c0Rpc3BhdGNoUG9saWN5KTsKICAgICBwb2xpY2llcy0+c2V0TGVnYWN5T3ZlcmZsb3dT
Y3JvbGxpbmdUb3VjaFBvbGljeShtX2xlZ2FjeU92ZXJmbG93U2Nyb2xsaW5nVG91Y2hQb2xpY3kp
OwogICAgIHBvbGljaWVzLT5zZXRBbGxvd0NvbnRlbnRDaGFuZ2VPYnNlcnZlclF1aXJrKG1fYWxs
b3dDb250ZW50Q2hhbmdlT2JzZXJ2ZXJRdWlyayk7CisgICAgcG9saWNpZXMtPnNldFdlYnNpdGVE
YXRhU3RvcmUobV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpKTsKKyAgICBwb2xpY2llcy0+c2V0VXNl
ckNvbnRlbnRDb250cm9sbGVyKG1fdXNlckNvbnRlbnRDb250cm9sbGVyLmdldCgpKTsKICAgICAK
ICAgICBWZWN0b3I8V2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkPiBsZWdhY3lDdXN0b21IZWFkZXJG
aWVsZHM7CiAgICAgbGVnYWN5Q3VzdG9tSGVhZGVyRmllbGRzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobV9sZWdhY3lDdXN0b21IZWFkZXJGaWVsZHMuc2l6ZSgpKTsKQEAgLTg5LDYgKzgyLDExIEBA
IHZvaWQgV2Vic2l0ZVBvbGljaWVzOjpzZXRXZWJzaXRlRGF0YVN0b3IKICAgICBtX3dlYnNpdGVE
YXRhU3RvcmUgPSBXVEZNb3ZlKHdlYnNpdGVEYXRhU3RvcmUpOwogfQogCit2b2lkIFdlYnNpdGVQ
b2xpY2llczo6c2V0VXNlckNvbnRlbnRDb250cm9sbGVyKFJlZlB0cjxXZWJLaXQ6OldlYlVzZXJD
b250ZW50Q29udHJvbGxlclByb3h5PiYmIGNvbnRyb2xsZXIpCit7CisgICAgbV91c2VyQ29udGVu
dENvbnRyb2xsZXIgPSBXVEZNb3ZlKGNvbnRyb2xsZXIpOworfQorCiBXZWJLaXQ6OldlYnNpdGVQ
b2xpY2llc0RhdGEgV2Vic2l0ZVBvbGljaWVzOjpkYXRhKCkKIHsKICAgICBib29sIGhhc0xlZ2Fj
eUN1c3RvbUhlYWRlckZpZWxkcyA9IGxlZ2FjeUN1c3RvbUhlYWRlckZpZWxkcygpLnNpemUoKTsK
QEAgLTEwOCw3ICsxMDYsNiBAQCBXZWJLaXQ6OldlYnNpdGVQb2xpY2llc0RhdGEgV2Vic2l0ZVBv
bGljCiAjZW5kaWYKICAgICAgICAgV1RGTW92ZShjdXN0b21IZWFkZXJGaWVsZHMpLAogICAgICAg
ICBwb3BVcFBvbGljeSgpLAotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPyBPcHRpb25hbDxX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiB7IG1fd2Vic2l0ZURhdGFTdG9yZS0+
cGFyYW1ldGVycygpIH0gOiBXVEY6Om51bGxvcHQsCiAgICAgICAgIG1fY3VzdG9tVXNlckFnZW50
LAogICAgICAgICBtX2N1c3RvbVVzZXJBZ2VudEFzU2l0ZVNwZWNpZmljUXVpcmtzLAogICAgICAg
ICBtX2N1c3RvbU5hdmlnYXRvclBsYXRmb3JtLApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9saWNpZXMuaAkocmV2aXNpb24gMjU5MTYzKQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNs
dWRlICJXZWJDb250ZW50TW9kZS5oIgorI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZUF1dG9wbGF5UG9saWN5LmgiCiAjaW5jbHVkZSAi
V2Vic2l0ZUF1dG9wbGF5UXVpcmsuaCIKICNpbmNsdWRlICJXZWJzaXRlTGVnYWN5T3ZlcmZsb3dT
Y3JvbGxpbmdUb3VjaFBvbGljeS5oIgpAQCAtNTYsNiArNTcsOCBAQCBwdWJsaWM6CiAKICAgICBS
ZWY8V2Vic2l0ZVBvbGljaWVzPiBjb3B5KCkgY29uc3Q7CiAKKyAgICBXZWJLaXQ6OldlYnNpdGVQ
b2xpY2llc0RhdGEgZGF0YSgpOworCiAgICAgYm9vbCBjb250ZW50QmxvY2tlcnNFbmFibGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9jb250ZW50QmxvY2tlcnNFbmFibGVkOyB9CiAgICAgdm9pZCBzZXRD
b250ZW50QmxvY2tlcnNFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2NvbnRlbnRCbG9ja2Vyc0Vu
YWJsZWQgPSBlbmFibGVkOyB9CiAgICAgCkBAIC04MSw4ICs4NCw5IEBAIHB1YmxpYzoKIAogICAg
IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSogd2Vic2l0ZURhdGFTdG9yZSgpIGNvbnN0IHsgcmV0
dXJuIG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsgfQogICAgIHZvaWQgc2V0V2Vic2l0ZURhdGFT
dG9yZShSZWZQdHI8V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlPiYmKTsKLQotICAgIFdlYktpdDo6
V2Vic2l0ZVBvbGljaWVzRGF0YSBkYXRhKCk7CisgICAgCisgICAgV2ViS2l0OjpXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJQcm94eSogdXNlckNvbnRlbnRDb250cm9sbGVyKCkgY29uc3QgeyByZXR1
cm4gbV91c2VyQ29udGVudENvbnRyb2xsZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFVzZXJDb250
ZW50Q29udHJvbGxlcihSZWZQdHI8V2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94
eT4mJik7CiAKICAgICB2b2lkIHNldEN1c3RvbVVzZXJBZ2VudChjb25zdCBXVEY6OlN0cmluZyYg
Y3VzdG9tVXNlckFnZW50KSB7IG1fY3VzdG9tVXNlckFnZW50ID0gY3VzdG9tVXNlckFnZW50OyB9
CiAgICAgY29uc3QgV1RGOjpTdHJpbmcmIGN1c3RvbVVzZXJBZ2VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fY3VzdG9tVXNlckFnZW50OyB9CkBAIC0xMjEsOCArMTI1LDYgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0QWxsb3dzQ29udGVudEphdmFTY3JpcHQoV2ViQ29yZTo6QWxsb3dzQ29udGVudEphdmFT
Y3JpcHQgYWxsb3dzKSB7IG1fYWxsb3dzQ29udGVudEphdmFTY3JpcHQgPSBhbGxvd3M7IH0KIAog
cHJpdmF0ZToKLSAgICBXZWJzaXRlUG9saWNpZXMoYm9vbCBjb250ZW50QmxvY2tlcnNFbmFibGVk
LCBPcHRpb25TZXQ8V2ViS2l0OjpXZWJzaXRlQXV0b3BsYXlRdWlyaz4sIFdlYktpdDo6V2Vic2l0
ZUF1dG9wbGF5UG9saWN5LCBWZWN0b3I8V2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkPiYmLCBWZWN0
b3I8V2ViQ29yZTo6Q3VzdG9tSGVhZGVyRmllbGRzPiYmLCBXZWJLaXQ6OldlYnNpdGVQb3BVcFBv
bGljeSwgUmVmUHRyPFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZT4mJik7Ci0KICAgICBib29sIG1f
Y29udGVudEJsb2NrZXJzRW5hYmxlZCB7IHRydWUgfTsKICAgICBPcHRpb25TZXQ8V2ViS2l0OjpX
ZWJzaXRlQXV0b3BsYXlRdWlyaz4gbV9hbGxvd2VkQXV0b3BsYXlRdWlya3M7CiAgICAgV2ViS2l0
OjpXZWJzaXRlQXV0b3BsYXlQb2xpY3kgbV9hdXRvcGxheVBvbGljeSB7IFdlYktpdDo6V2Vic2l0
ZUF1dG9wbGF5UG9saWN5OjpEZWZhdWx0IH07CkBAIC0xMzMsNiArMTM1LDcgQEAgcHJpdmF0ZToK
ICAgICBWZWN0b3I8V2ViQ29yZTo6Q3VzdG9tSGVhZGVyRmllbGRzPiBtX2N1c3RvbUhlYWRlckZp
ZWxkczsKICAgICBXZWJLaXQ6OldlYnNpdGVQb3BVcFBvbGljeSBtX3BvcFVwUG9saWN5IHsgV2Vi
S2l0OjpXZWJzaXRlUG9wVXBQb2xpY3k6OkRlZmF1bHQgfTsKICAgICBSZWZQdHI8V2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmU7CisgICAgUmVmUHRyPFdlYktpdDo6
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk+IG1fdXNlckNvbnRlbnRDb250cm9sbGVyOwog
ICAgIFdURjo6U3RyaW5nIG1fY3VzdG9tVXNlckFnZW50OwogICAgIFdURjo6U3RyaW5nIG1fY3Vz
dG9tVXNlckFnZW50QXNTaXRlU3BlY2lmaWNRdWlya3M7CiAgICAgV1RGOjpTdHJpbmcgbV9jdXN0
b21OYXZpZ2F0b3JQbGF0Zm9ybTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tQYWdlLmNwcAkocmV2aXNpb24gMjU5MTYzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDggKzM2Nyw5IEBAIGJvb2wg
V0tQYWdlV2lsbEhhbmRsZUhvcml6b250YWxTY3JvbGxFdmUKIAogdm9pZCBXS1BhZ2VVcGRhdGVX
ZWJzaXRlUG9saWNpZXMoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLV2Vic2l0ZVBvbGljaWVzUmVmIHdl
YnNpdGVQb2xpY2llc1JlZikKIHsKKyAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoIXRv
SW1wbCh3ZWJzaXRlUG9saWNpZXNSZWYpLT53ZWJzaXRlRGF0YVN0b3JlKCksICJTZXR0aW5nIFdl
YnNpdGVQb2xpY2llcy53ZWJzaXRlRGF0YVN0b3JlIGlzIG9ubHkgc3VwcG9ydGVkIGR1cmluZyBX
S0ZyYW1lUG9saWN5TGlzdGVuZXJVc2VXaXRoUG9saWNpZXMoKS4iKTsKKyAgICBSRUxFQVNFX0FT
U0VSVF9XSVRIX01FU1NBR0UoIXRvSW1wbCh3ZWJzaXRlUG9saWNpZXNSZWYpLT51c2VyQ29udGVu
dENvbnRyb2xsZXIoKSwgIlNldHRpbmcgV2Vic2l0ZVBvbGljaWVzLnVzZXJDb250ZW50Q29udHJv
bGxlciBpcyBvbmx5IHN1cHBvcnRlZCBkdXJpbmcgV0tGcmFtZVBvbGljeUxpc3RlbmVyVXNlV2l0
aFBvbGljaWVzKCkuIik7CiAgICAgYXV0byBkYXRhID0gdG9JbXBsKHdlYnNpdGVQb2xpY2llc1Jl
ZiktPmRhdGEoKTsKLSAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoIWRhdGEud2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMsICJTZXR0aW5nIFdlYnNpdGVQb2xpY2llcy5XZWJzaXRlRGF0
YVN0b3JlIGlzIG9ubHkgc3VwcG9ydGVkIGR1cmluZyBXS0ZyYW1lUG9saWN5TGlzdGVuZXJVc2VX
aXRoUG9saWNpZXMoKS4iKTsKICAgICB0b0ltcGwocGFnZVJlZiktPnVwZGF0ZVdlYnNpdGVQb2xp
Y2llcyhXVEZNb3ZlKGRhdGEpKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAyNTkxNjMpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzE2LDkgKzIzMTYsMTEgQEAgLSAodm9pZClfdXBkYXRlV2Vic2l0ZVBvbGljaWVzOihfV0tX
ZWJzaQogCiAtICh2b2lkKV91cGRhdGVXZWJwYWdlUHJlZmVyZW5jZXM6KFdLV2VicGFnZVByZWZl
cmVuY2VzICopd2VicGFnZVByZWZlcmVuY2VzCiB7Ci0gICAgYXV0byBkYXRhID0gd2VicGFnZVBy
ZWZlcmVuY2VzLT5fd2Vic2l0ZVBvbGljaWVzLT5kYXRhKCk7Ci0gICAgaWYgKGRhdGEud2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgaWYgKHdlYnBhZ2VQcmVmZXJlbmNlcy5fd2Vic2l0
ZURhdGFTdG9yZSkKICAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50
RXhjZXB0aW9uIGZvcm1hdDpAIlVwZGF0aW5nIFdLV2Vic2l0ZURhdGFTdG9yZSBpcyBvbmx5IHN1
cHBvcnRlZCBkdXJpbmcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbi4iXTsKKyAgICBp
ZiAod2VicGFnZVByZWZlcmVuY2VzLl91c2VyQ29udGVudENvbnRyb2xsZXIpCisgICAgICAgIFtO
U0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJVcGRh
dGluZyBXS1VzZXJDb250ZW50Q29udHJvbGxlciBpcyBvbmx5IHN1cHBvcnRlZCBkdXJpbmcgZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbi4iXTsKKyAgICBhdXRvIGRhdGEgPSB3ZWJwYWdl
UHJlZmVyZW5jZXMtPl93ZWJzaXRlUG9saWNpZXMtPmRhdGEoKTsKICAgICBfcGFnZS0+dXBkYXRl
V2Vic2l0ZVBvbGljaWVzKFdURk1vdmUoZGF0YSkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2Vz
Lm1tCShyZXZpc2lvbiAyNTkxNjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJwYWdlUHJlZmVyZW5jZXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcg
QEAKICNpbXBvcnQgIldLV2VicGFnZVByZWZlcmVuY2VzLmgiCiAKICNpbXBvcnQgIkFQSUN1c3Rv
bUhlYWRlckZpZWxkcy5oIgorI2ltcG9ydCAiV0tVc2VyQ29udGVudENvbnRyb2xsZXJJbnRlcm5h
bC5oIgogI2ltcG9ydCAiV0tXZWJwYWdlUHJlZmVyZW5jZXNJbnRlcm5hbC5oIgogI2ltcG9ydCAi
V0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkNvbnRlbnRNb2RlLmgi
CkBAIC0yNzYsNiArMjc3LDE2IEBAIC0gKHZvaWQpX3NldFdlYnNpdGVEYXRhU3RvcmU6KFdLV2Vi
c2l0ZUQKICAgICBfd2Vic2l0ZVBvbGljaWVzLT5zZXRXZWJzaXRlRGF0YVN0b3JlKHdlYnNpdGVE
YXRhU3RvcmUtPl93ZWJzaXRlRGF0YVN0b3JlLmdldCgpKTsKIH0KIAorLSAoV0tVc2VyQ29udGVu
dENvbnRyb2xsZXIgKilfdXNlckNvbnRlbnRDb250cm9sbGVyCit7CisgICAgcmV0dXJuIHdyYXBw
ZXIoX3dlYnNpdGVQb2xpY2llcy0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkpOworfQorCistICh2
b2lkKV9zZXRVc2VyQ29udGVudENvbnRyb2xsZXI6KFdLVXNlckNvbnRlbnRDb250cm9sbGVyICop
dXNlckNvbnRlbnRDb250cm9sbGVyCit7CisgICAgX3dlYnNpdGVQb2xpY2llcy0+c2V0VXNlckNv
bnRlbnRDb250cm9sbGVyKHVzZXJDb250ZW50Q29udHJvbGxlci0+X3VzZXJDb250ZW50Q29udHJv
bGxlclByb3h5LmdldCgpKTsKK30KKwogLSAodm9pZClfc2V0Q3VzdG9tVXNlckFnZW50OihOU1N0
cmluZyAqKWN1c3RvbVVzZXJBZ2VudAogewogICAgIF93ZWJzaXRlUG9saWNpZXMtPnNldEN1c3Rv
bVVzZXJBZ2VudChjdXN0b21Vc2VyQWdlbnQpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2VzUHJpdmF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJlbmNlc1By
aXZhdGUuaAkocmV2aXNpb24gMjU5MTYzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2VzUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw3ICsyNyw2IEBACiAKICNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KICNpbXBvcnQg
PFdlYktpdC9XS1dlYnBhZ2VQcmVmZXJlbmNlcy5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0
ZURhdGFTdG9yZS5oPgogCiB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tXZWJzaXRlQXV0
b3BsYXlQb2xpY3kpIHsKICAgICBfV0tXZWJzaXRlQXV0b3BsYXlQb2xpY3lEZWZhdWx0LApAQCAt
NTYsNiArNTUsOCBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLV2Vic2l0CiB9
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogCiBAY2xhc3MgX1dL
Q3VzdG9tSGVhZGVyRmllbGRzOworQGNsYXNzIFdLVXNlckNvbnRlbnRDb250cm9sbGVyOworQGNs
YXNzIFdLV2Vic2l0ZURhdGFTdG9yZTsKIAogQGludGVyZmFjZSBXS1dlYnBhZ2VQcmVmZXJlbmNl
cyAoV0tQcml2YXRlKQogCkBAIC02NSw2ICs2Niw3IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJ
bnRlZ2VyLCBfV0tXZWJzaXQKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCBzZXR0ZXI9X3Nl
dEN1c3RvbUhlYWRlckZpZWxkczopIE5TQXJyYXk8X1dLQ3VzdG9tSGVhZGVyRmllbGRzICo+ICpf
Y3VzdG9tSGVhZGVyRmllbGRzOwogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0UG9w
VXBQb2xpY3k6KSBfV0tXZWJzaXRlUG9wVXBQb2xpY3kgX3BvcFVwUG9saWN5OwogQHByb3BlcnR5
IChub25hdG9taWMsIHN0cm9uZywgc2V0dGVyPV9zZXRXZWJzaXRlRGF0YVN0b3JlOikgV0tXZWJz
aXRlRGF0YVN0b3JlICpfd2Vic2l0ZURhdGFTdG9yZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBz
dHJvbmcsIHNldHRlcj1fc2V0VXNlckNvbnRlbnRDb250cm9sbGVyOikgV0tVc2VyQ29udGVudENv
bnRyb2xsZXIgKl91c2VyQ29udGVudENvbnRyb2xsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhX
S19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5
LCBzZXR0ZXI9X3NldEN1c3RvbVVzZXJBZ2VudDopIE5TU3RyaW5nICpfY3VzdG9tVXNlckFnZW50
OwogQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHNldHRlcj1fc2V0Q3VzdG9tVXNlckFnZW50
QXNTaXRlU3BlY2lmaWNRdWlya3M6KSBOU1N0cmluZyAqX2N1c3RvbVVzZXJBZ2VudEFzU2l0ZVNw
ZWNpZmljUXVpcmtzOwogQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHNldHRlcj1fc2V0Q3Vz
dG9tTmF2aWdhdG9yUGxhdGZvcm06KSBOU1N0cmluZyAqX2N1c3RvbU5hdmlnYXRvclBsYXRmb3Jt
OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25T
dGF0ZS5tbQkocmV2aXNpb24gMjU5MTYzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvTmF2aWdhdGlvblN0YXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MDIsMTAgKzYwMiwxMCBA
QCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKICAgICAgICAgICAgIGFwaVdlYnNp
dGVQb2xpY2llcyA9IGRlZmF1bHRXZWJzaXRlUG9saWNpZXM7CiAKICAgICAgICAgaWYgKGFwaVdl
YnNpdGVQb2xpY2llcykgewotICAgICAgICAgICAgaWYgKGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUg
PSBhcGlXZWJzaXRlUG9saWNpZXMtPndlYnNpdGVEYXRhU3RvcmUoKSkgewotICAgICAgICAgICAg
ICAgIGlmIChzdWJmcmFtZU5hdmlnYXRpb24pCi0gICAgICAgICAgICAgICAgICAgIFtOU0V4Y2Vw
dGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJXS1dlYnBhZ2VQ
cmVmZXJlbmNlcy5fd2Vic2l0ZURhdGFTdG9yZSBtdXN0IGJlIG5pbCBmb3Igc3ViZnJhbWUgbmF2
aWdhdGlvbnMuIl07Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXBpV2Vic2l0ZVBv
bGljaWVzLT53ZWJzaXRlRGF0YVN0b3JlKCkgJiYgc3ViZnJhbWVOYXZpZ2F0aW9uKQorICAgICAg
ICAgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBm
b3JtYXQ6QCJXS1dlYnBhZ2VQcmVmZXJlbmNlcy5fd2Vic2l0ZURhdGFTdG9yZSBtdXN0IGJlIG5p
bCBmb3Igc3ViZnJhbWUgbmF2aWdhdGlvbnMuIl07CisgICAgICAgICAgICBpZiAoYXBpV2Vic2l0
ZVBvbGljaWVzLT51c2VyQ29udGVudENvbnRyb2xsZXIoKSAmJiBzdWJmcmFtZU5hdmlnYXRpb24p
CisgICAgICAgICAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhj
ZXB0aW9uIGZvcm1hdDpAIldLV2VicGFnZVByZWZlcmVuY2VzLl91c2VyQ29udGVudENvbnRyb2xs
ZXIgbXVzdCBiZSBuaWwgZm9yIHN1YmZyYW1lIG5hdmlnYXRpb25zLiJdOwogICAgICAgICAgICAg
aWYgKCFhcGlXZWJzaXRlUG9saWNpZXMtPmN1c3RvbVVzZXJBZ2VudCgpLmlzTnVsbCgpICYmIHN1
YmZyYW1lTmF2aWdhdGlvbikKICAgICAgICAgICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJ
bnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiV0tXZWJwYWdlUHJlZmVyZW5jZXMuX2N1
c3RvbVVzZXJBZ2VudCBtdXN0IGJlIG5pbCBmb3Igc3ViZnJhbWUgbmF2aWdhdGlvbnMuIl07CiAg
ICAgICAgICAgICBpZiAoIWFwaVdlYnNpdGVQb2xpY2llcy0+Y3VzdG9tTmF2aWdhdG9yUGxhdGZv
cm0oKS5pc051bGwoKSAmJiBzdWJmcmFtZU5hdmlnYXRpb24pCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCShyZXZpc2lvbiAyNTkxNjMpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDM3ICs5NiwzOSBAQCB2b2lkIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5OjpyZW1vCiB9CiAjZW5kaWYKIAotdm9pZCBXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eTo6YWRkUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQ
cm94eSwgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3ZvaWQgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQ
cm9jZXNzUHJveHkpCiB7CiAgICAgQVNTRVJUKCFtX3Byb2Nlc3Nlcy5oYXNOdWxsUmVmZXJlbmNl
cygpKTsKIAogICAgIGlmIChtX3Byb2Nlc3Nlcy5hZGQod2ViUHJvY2Vzc1Byb3h5KS5pc05ld0Vu
dHJ5KQogICAgICAgICB3ZWJQcm9jZXNzUHJveHkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBp
ZGVudGlmaWVyKCksICp0aGlzKTsKK30KKworVXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVy
cyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cGFyYW1ldGVycygpIGNvbnN0Cit7Cisg
ICAgVXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwogCi0gICAgQVNT
RVJUKHBhcmFtZXRlcnMudXNlckNvbnRlbnRXb3JsZHMuaXNFbXB0eSgpKTsKICAgICBmb3IgKGNv
bnN0IGF1dG8mIHdvcmxkIDogbV9jb250ZW50V29ybGRzKQogICAgICAgICBwYXJhbWV0ZXJzLnVz
ZXJDb250ZW50V29ybGRzLmFwcGVuZCh3b3JsZC5rZXktPndvcmxkRGF0YSgpKTsKIAotICAgIEFT
U0VSVChwYXJhbWV0ZXJzLnVzZXJTY3JpcHRzLmlzRW1wdHkoKSk7CiAgICAgZm9yIChhdXRvIHVz
ZXJTY3JpcHQgOiBtX3VzZXJTY3JpcHRzLT5lbGVtZW50c09mVHlwZTxBUEk6OlVzZXJTY3JpcHQ+
KCkpCiAgICAgICAgIHBhcmFtZXRlcnMudXNlclNjcmlwdHMuYXBwZW5kKHsgdXNlclNjcmlwdC0+
aWRlbnRpZmllcigpLCB1c2VyU2NyaXB0LT5jb250ZW50V29ybGQoKS5pZGVudGlmaWVyKCksIHVz
ZXJTY3JpcHQtPnVzZXJTY3JpcHQoKSB9KTsKIAotICAgIEFTU0VSVChwYXJhbWV0ZXJzLnVzZXJT
dHlsZVNoZWV0cy5pc0VtcHR5KCkpOwogICAgIGZvciAoYXV0byB1c2VyU3R5bGVTaGVldCA6IG1f
dXNlclN0eWxlU2hlZXRzLT5lbGVtZW50c09mVHlwZTxBUEk6OlVzZXJTdHlsZVNoZWV0PigpKQog
ICAgICAgICBwYXJhbWV0ZXJzLnVzZXJTdHlsZVNoZWV0cy5hcHBlbmQoeyB1c2VyU3R5bGVTaGVl
dC0+aWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC0+Y29udGVudFdvcmxkKCkuaWRlbnRpZmll
cigpLCB1c2VyU3R5bGVTaGVldC0+dXNlclN0eWxlU2hlZXQoKSB9KTsKIAotICAgIEFTU0VSVChw
YXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVycy5pc0VtcHR5KCkpOwogICAgIGZvciAoYXV0byYgaGFu
ZGxlciA6IG1fc2NyaXB0TWVzc2FnZUhhbmRsZXJzLnZhbHVlcygpKQogICAgICAgICBwYXJhbWV0
ZXJzLm1lc3NhZ2VIYW5kbGVycy5hcHBlbmQoeyBoYW5kbGVyLT5pZGVudGlmaWVyKCksIGhhbmRs
ZXItPndvcmxkKCkuaWRlbnRpZmllcigpLCBoYW5kbGVyLT5uYW1lKCkgfSk7CiAKICNpZiBFTkFC
TEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIEFTU0VSVChwYXJhbWV0ZXJzLmNvbnRlbnRSdWxl
TGlzdHMuaXNFbXB0eSgpKTsKICAgICBwYXJhbWV0ZXJzLmNvbnRlbnRSdWxlTGlzdHMgPSBjb250
ZW50UnVsZUxpc3REYXRhKCk7CiAjZW5kaWYKKyAgICAKKyAgICByZXR1cm4gcGFyYW1ldGVyczsK
IH0KIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi1WZWN0b3I8c3RkOjpwYWlyPFN0
cmluZywgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhPj4gV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHk6OmNvbnRlbnRSdWxlTGlzdERhdGEoKQorVmVjdG9yPHN0ZDo6cGFpcjxTdHJp
bmcsIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YT4+IFdlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5Ojpjb250ZW50UnVsZUxpc3REYXRhKCkgY29uc3QKIHsKICAgICBWZWN0b3I8c3Rk
OjpwYWlyPFN0cmluZywgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhPj4gZGF0YTsKICAg
ICBkYXRhLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jb250ZW50UnVsZUxpc3RzLnNpemUoKSk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgJKHJldmlzaW9uIDI1
OTE2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAgY2xh
c3MgV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXI7CiBzdHJ1Y3QgRnJhbWVJbmZvRGF0YTsKIGNsYXNz
IFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YTsKIHN0cnVjdCBXZWJQYWdlQ3JlYXRpb25Q
YXJhbWV0ZXJzOworc3RydWN0IFVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnM7CiBlbnVt
IGNsYXNzIEluamVjdFVzZXJTY3JpcHRJbW1lZGlhdGVseSA6IGJvb2w7CiAKIGNsYXNzIFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9i
amVjdDo6VHlwZTo6VXNlckNvbnRlbnRDb250cm9sbGVyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciB7CkBAIC03NSw3ICs3Niw5IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eSogZ2V0KFVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZp
ZXIpOwogCi0gICAgdm9pZCBhZGRQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYsIFdlYlBhZ2VDcmVh
dGlvblBhcmFtZXRlcnMmKTsKKyAgICBVc2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzIHBh
cmFtZXRlcnMoKSBjb25zdDsKKworICAgIHZvaWQgYWRkUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkm
KTsKICAgICB2b2lkIHJlbW92ZVByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5Jik7CiAKICAgICBBUEk6
OkFycmF5JiB1c2VyU2NyaXB0cygpIHsgcmV0dXJuIG1fdXNlclNjcmlwdHMuZ2V0KCk7IH0KQEAg
LTEwNSw3ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVDb250ZW50UnVsZUxpc3Qo
Y29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCByZW1vdmVBbGxDb250ZW50UnVsZUxpc3RzKCk7CiAg
ICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxBUEk6OkNvbnRlbnRSdWxlTGlzdD4+JiBj
b250ZW50RXh0ZW5zaW9uUnVsZXMoKSB7IHJldHVybiBtX2NvbnRlbnRSdWxlTGlzdHM7IH0KLSAg
ICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRh
Pj4gY29udGVudFJ1bGVMaXN0RGF0YSgpOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBX
ZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGE+PiBjb250ZW50UnVsZUxpc3REYXRhKCkgY29u
c3Q7CiAjZW5kaWYKIAogICAgIFVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXIgaWRlbnRp
ZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQpJbmRleDogU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNTkxNjMp
CisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MDM0LDYgKzQwMzQsOCBAQAogCQk1QzhERDM3RDFGRTQ1MDExMDBGMkE1
NTYgLyogQVBJV2Vic2l0ZVBvbGljaWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEFQSVdlYnNpdGVQb2xpY2llcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTVDOEREMzdGMUZFNDUxOTIwMEYyQTU1NiAvKiBXZWJzaXRlQXV0b3BsYXlQb2xpY3ku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vic2l0ZUF1dG9wbGF5UG9saWN5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDOEREMzgxMUZFNDU1Q0EwMEYyQTU1
NiAvKiBXZWJzaXRlQXV0b3BsYXlRdWlyay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJzaXRlQXV0b3BsYXlRdWlyay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1QzlDNUMwMjI0MzA1MzU4MDBCQjY3NDAgLyogVXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1l
dGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyQ29udGVudENvbnRy
b2xsZXJQYXJhbWV0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDOUM1QzAz
MjQzMDUzNTgwMEJCNjc0MCAvKiBVc2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVzZXJDb250ZW50Q29udHJvbGxl
clBhcmFtZXRlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzlFNTY4MDFE
RjdGMDU1MDBDOUVFMzMgLyogV0tXZWJzaXRlUG9saWNpZXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV0tXZWJzaXRlUG9saWNpZXMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1QzlFNTY4MTFERjdGMDU1MDBDOUVFMzMgLyogV0tXZWJzaXRlUG9s
aWNpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlUG9saWNp
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM5RUYyRTcyMUYwNThGOTAwM0JE
QzU2IC8qIE5ldHdvcmtTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MDQyLDYgKzYwNDQsOCBAQAogCQkJCTVDMTlBNTFFMUZE
MEIxNDYwMEVFQTMyMyAvKiBVUkxTY2hlbWVUYXNrUGFyYW1ldGVycy5jcHAgKi8sCiAJCQkJNUMx
OUE1MUYxRkQwQjE0NzAwRUVBMzIzIC8qIFVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzLmggKi8sCiAJ
CQkJNDFGQkU4MjEyMDZEODdGNjAwMEYwNzQxIC8qIFVzZXJDb250ZW50Q29udHJvbGxlcklkZW50
aWZpZXIuaCAqLywKKwkJCQk1QzlDNUMwMzI0MzA1MzU4MDBCQjY3NDAgLyogVXNlckNvbnRlbnRD
b250cm9sbGVyUGFyYW1ldGVycy5jcHAgKi8sCisJCQkJNUM5QzVDMDIyNDMwNTM1ODAwQkI2NzQw
IC8qIFVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnMuaCAqLywKIAkJCQkxQUMxMzM2NTE4
NTY1QjU3MDBGM0VDMDUgLyogVXNlckRhdGEuY3BwICovLAogCQkJCTFBQzEzMzY2MTg1NjVCNTcw
MEYzRUMwNSAvKiBVc2VyRGF0YS5oICovLAogCQkJCTI2ODQwNTRBMThCODY2RkYwMDIyQzM4QiAv
KiBWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvLmNwcCAqLywKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDI1OTE2MykKKysrIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzkxLDcg
Kzc5MSw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjoKICAgICB9
CiAjZW5kaWYKIAotICAgIExPR19FUlJPUigiVW5oYW5kbGVkIHdlYiBwcm9jZXNzIG1lc3NhZ2Ug
JyVzOiVzJyAoZGVzdGluYXRpb246ICUiIFBSSXU2NCAiKSIsIGRlY29kZXIubWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLnRvU3RyaW5nKCkuZGF0YSgpLCBkZWNvZGVyLm1lc3NhZ2VOYW1lKCkudG9TdHJp
bmcoKS5kYXRhKCksIGRlY29kZXIuZGVzdGluYXRpb25JRCgpKTsKKyAgICBMT0dfRVJST1IoIlVu
aGFuZGxlZCB3ZWIgcHJvY2VzcyBtZXNzYWdlICclczo6JXMnIChkZXN0aW5hdGlvbjogJSIgUFJJ
dTY0ICIgcGlkOiAlZCkiLCBkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKS50b1N0cmluZygp
LmRhdGEoKSwgZGVjb2Rlci5tZXNzYWdlTmFtZSgpLnRvU3RyaW5nKCkuZGF0YSgpLCBkZWNvZGVy
LmRlc3RpbmF0aW9uSUQoKSwgc3RhdGljX2Nhc3Q8aW50PihnZXRDdXJyZW50UHJvY2Vzc0lEKCkp
KTsKIH0KIAogV2ViRnJhbWUqIFdlYlByb2Nlc3M6OndlYkZyYW1lKEZyYW1lSWRlbnRpZmllciBm
cmFtZUlEKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAJKHJldmlzaW9uIDI1OTE2MykKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MTcsMTIgKzcxNywxMiBA
QCBXZWJQYWdlOjpXZWJQYWdlKFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgCiAgICAgZm9yIChjb25z
dCBhdXRvJiBpdGVyYXRvciA6IHBhcmFtZXRlcnMudXJsU2NoZW1lSGFuZGxlcnMpCiAgICAgICAg
IHJlZ2lzdGVyVVJMU2NoZW1lSGFuZGxlcihpdGVyYXRvci52YWx1ZSwgaXRlcmF0b3Iua2V5KTsK
IAotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRDb250ZW50V29ybGRzKHBhcmFtZXRl
cnMudXNlckNvbnRlbnRXb3JsZHMpOwotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRV
c2VyU2NyaXB0cyhXVEZNb3ZlKHBhcmFtZXRlcnMudXNlclNjcmlwdHMpLCBJbmplY3RVc2VyU2Ny
aXB0SW1tZWRpYXRlbHk6Ok5vKTsKLSAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+YWRkVXNl
clN0eWxlU2hlZXRzKHBhcmFtZXRlcnMudXNlclN0eWxlU2hlZXRzKTsKLSAgICBtX3VzZXJDb250
ZW50Q29udHJvbGxlci0+YWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVycyhwYXJhbWV0ZXJzLm1l
c3NhZ2VIYW5kbGVycyk7CisgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPmFkZENvbnRlbnRX
b3JsZHMocGFyYW1ldGVycy51c2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzLnVzZXJDb250
ZW50V29ybGRzKTsKKyAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+YWRkVXNlclNjcmlwdHMo
V1RGTW92ZShwYXJhbWV0ZXJzLnVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnMudXNlclNj
cmlwdHMpLCBJbmplY3RVc2VyU2NyaXB0SW1tZWRpYXRlbHk6Ok5vKTsKKyAgICBtX3VzZXJDb250
ZW50Q29udHJvbGxlci0+YWRkVXNlclN0eWxlU2hlZXRzKHBhcmFtZXRlcnMudXNlckNvbnRlbnRD
b250cm9sbGVyUGFyYW1ldGVycy51c2VyU3R5bGVTaGVldHMpOworICAgIG1fdXNlckNvbnRlbnRD
b250cm9sbGVyLT5hZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJzKHBhcmFtZXRlcnMudXNlckNv
bnRlbnRDb250cm9sbGVyUGFyYW1ldGVycy5tZXNzYWdlSGFuZGxlcnMpOwogI2lmIEVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCi0gICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPmFkZENvbnRl
bnRSdWxlTGlzdHMoV1RGTW92ZShwYXJhbWV0ZXJzLmNvbnRlbnRSdWxlTGlzdHMpKTsKKyAgICBt
X3VzZXJDb250ZW50Q29udHJvbGxlci0+YWRkQ29udGVudFJ1bGVMaXN0cyhXVEZNb3ZlKHBhcmFt
ZXRlcnMudXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVycy5jb250ZW50UnVsZUxpc3RzKSk7
CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkluZGV4OiBUb29scy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTkyNzkpCisrKyBU
b29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAyMC0wMy0z
MCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAg
IEFkZCBTUEkgV0tXZWJwYWdlUHJlZmVyZW5jZXMuX3VzZXJDb250ZW50Q29udHJvbGxlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Nzk1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1NvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5tbToKKyAgICAgICAgKC1bVGVz
dFVJRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOmlu
aXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlUG9saWNpZXMubW06CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlEZWxlZ2F0ZS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RVSURlbGVnYXRlLm1tOiBBZGRlZC4KKyAgICAg
ICAgKC1bVGVzdFVJRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhN
ZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgt
W1Rlc3RVSURlbGVnYXRlIHdhaXRGb3JBbGVydF0pOgorCiAyMDIwLTAzLTMwICBQZW5nIExpdSAg
PHBlbmcubGl1NkBhcHBsZS5jb20+CiAKICAgICAgICAgUGlQIHN1cHBvcnQgb2YgTWluaUJyb3dz
ZXIgaXMgYnJva2VuCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1NvdXJjZXNDb2NvYS50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9Tb3VyY2VzQ29jb2EudHh0CShyZXZp
c2lvbiAyNTkxNjMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1NvdXJjZXNDb2NvYS50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAgY29jb2EvUGxhdGZvcm1VdGlsaXRpZXNDb2Nv
YS5tbQogY29jb2EvVGVzdENvY29hLm1tCiBjb2NvYS9UZXN0TmF2aWdhdGlvbkRlbGVnYXRlLm1t
CiBjb2NvYS9UZXN0UHJvdG9jb2wubW0KK2NvY29hL1Rlc3RVSURlbGVnYXRlLm1tCiBjb2NvYS9U
ZXN0V0tXZWJWaWV3Lm1tCiAKIFRlc3RzL1dlYktpdENvY29hL1RMU0RlcHJlY2F0aW9uLm1tCklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjU5MTYzKQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTIwODMsNiArMjA4Myw4IEBACiAJCTVDQjQwQjREMUY0Qjk4QkUwMDdEQzdC
OSAvKiBVSURlbGVnYXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gVUlEZWxlZ2F0ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNCNUIzQkQx
RkZDNTE3RTAwQzI3QkIwIC8qIEZyYW1lSGFuZGxlU2VyaWFsaXphdGlvbi5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IEZyYW1lSGFuZGxlU2VyaWFsaXphdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNUNCN0FGREIyM0M0NTFFNDAwRTQ5Q0YzIC8qIFJlc291cmNlTG9hZERl
bGVnYXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVzb3Vy
Y2VMb2FkRGVsZWdhdGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQkFBN0Yz
MjQzMjdGNkIwMDU2NEE4QiAvKiBUZXN0VUlEZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBUZXN0VUlEZWxlZ2F0ZS5oOyBwYXRoID0gY29jb2EvVGVzdFVJRGVsZWdh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNCQUE3RjQyNDMyN0Y2QjAwNTY0
QThCIC8qIFRlc3RVSURlbGVnYXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gVGVzdFVJRGVsZWdhdGUubW07IHBhdGggPSBjb2NvYS9UZXN0VUlEZWxlZ2F0ZS5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNDQjEwREQyMTM0NTc5QzAwQUM1QUYw
IC8qIFJlc3BvbnNpdmVuZXNzVGltZXJEb2VzbnRGaXJlRWFybHkubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZXNwb25zaXZlbmVzc1RpbWVyRG9lc250RmlyZUVh
cmx5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0NCMTBERTIxMzQ1NzlEMDBB
QzVBRjAgLyogUmVzdG9yZVNlc3Npb25TdGF0ZVdpdGhvdXROYXZpZ2F0aW9uLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVzdG9yZVNlc3Npb25TdGF0ZVdpdGhv
dXROYXZpZ2F0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0NCMTBERjIx
MzQ1NzlEMDBBQzVBRjAgLyogU2hvdWxkR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0ubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTaG91bGRHb1RvQmFja0ZvcndhcmRM
aXN0SXRlbS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4OTksNiArMjkwMSw4
IEBACiAJCQkJNTE2MjgxMjQyMzI1QzE3QjAwQkI3RTQyIC8qIFRlc3RQREZEb2N1bWVudC5tbSAq
LywKIAkJCQlBMTRGQzU4RDFCOEFFMzY1MDBEMTA3RUIgLyogVGVzdFByb3RvY29sLmggKi8sCiAJ
CQkJQTE0RkM1OEUxQjhBRTM2NTAwRDEwN0VCIC8qIFRlc3RQcm90b2NvbC5tbSAqLywKKwkJCQk1
Q0JBQTdGMzI0MzI3RjZCMDA1NjRBOEIgLyogVGVzdFVJRGVsZWdhdGUuaCAqLywKKwkJCQk1Q0JB
QTdGNDI0MzI3RjZCMDA1NjRBOEIgLyogVGVzdFVJRGVsZWdhdGUubW0gKi8sCiAJCQkJMkVGRjA2
RDIxRDhBRURCQjAwMDRCQjMwIC8qIFRlc3RXS1dlYlZpZXcuaCAqLywKIAkJCQkyRUZGMDZEMzFE
OEFFREJCMDAwNEJCMzAgLyogVGVzdFdLV2ViVmlldy5tbSAqLywKIAkJCQk3QzgzRTAzOTFEMEE2
MDI3MDBGRUJDRjMgLyogVXRpbGl0aWVzQ29jb2EubW0gKi8sCkluZGV4OiBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZERlbGVnYXRlLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2Fk
RGVsZWdhdGUubW0JKHJldmlzaW9uIDI1OTE2MykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI5LDYgKzI5LDcgQEAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJU
Q1BTZXJ2ZXIuaCIKICNpbXBvcnQgIlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKKyNpbXBvcnQg
IlRlc3RVSURlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgpAQCAt
ODEsMjQgKzgyLDYgQEAgLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJlcwog
CiBAZW5kCiAKLUBpbnRlcmZhY2UgVGVzdFVJRGVsZWdhdGUgOiBOU09iamVjdCA8V0tVSURlbGVn
YXRlPgotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgdm9pZCAoXnJ1bkphdmFTY3JpcHRB
bGVydFBhbmVsV2l0aE1lc3NhZ2UpKFdLV2ViVmlldyAqLCBOU1N0cmluZyAqLCBXS0ZyYW1lSW5m
byAqLCB2b2lkICheKSh2b2lkKSk7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RVSURl
bGVnYXRlCi0KLS0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBydW5KYXZhU2Ny
aXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgaW5pdGlhdGVkQnlG
cmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9p
ZCkpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBpZiAoX3J1bkphdmFTY3JpcHRBbGVydFBhbmVs
V2l0aE1lc3NhZ2UpCi0gICAgICAgIF9ydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdl
KHdlYlZpZXcsIG1lc3NhZ2UsIGZyYW1lLCBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgZWxzZQot
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotfQotCi1AZW5kCi0KIFRFU1QoUmVzb3VyY2VM
b2FkRGVsZWdhdGUsIEJhc2ljKQogewogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1dLV2Vi
VmlldyBuZXddKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
V2Vic2l0ZVBvbGljaWVzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvV2Vic2l0ZVBvbGljaWVzLm1tCShyZXZpc2lvbiAyNTkxNjMpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVQb2xpY2llcy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxp
dGllcy5oIgogI2ltcG9ydCAiVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5oIgorI2ltcG9ydCAiVGVz
dFVJRGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgPFdlYktp
dC9XS011dGFibGVEaWN0aW9uYXJ5Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tOYXZpZ2F0aW9uRGVs
ZWdhdGVQcml2YXRlLmg+CkBAIC0xNzIzLDMgKzE3MjQsNTkgQEAgVEVTVChXZWJwYWdlUHJlZmVy
ZW5jZXMsIFdlYnNpdGVQb2xpY2llcwogCiAgICAgRVhQRUNUX05FKHBpZDEsIFtjb29raWVXZWJW
aWV3IF93ZWJQcm9jZXNzSWRlbnRpZmllcl0pOwogfQorCitURVNUKFdlYnBhZ2VQcmVmZXJlbmNl
cywgV2Vic2l0ZVBvbGljaWVzVXNlckNvbnRlbnRDb250cm9sbGVyKQoreworICAgIGF1dG8gbWFr
ZVNjcmlwdCA9IFtdIChOU1N0cmluZyAqc2NyaXB0KSB7CisgICAgICAgIHJldHVybiBbW1tXS1Vz
ZXJTY3JpcHQgYWxsb2NdIGluaXRXaXRoU291cmNlOnNjcmlwdCBpbmplY3Rpb25UaW1lOldLVXNl
clNjcmlwdEluamVjdGlvblRpbWVBdERvY3VtZW50U3RhcnQgZm9yTWFpbkZyYW1lT25seTpZRVNd
IGF1dG9yZWxlYXNlXTsKKyAgICB9OworICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZp
Z3VyYXRpb24gPSBbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07Cisg
ICAgW2NvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyIGFkZFVzZXJTY3JpcHQ6bWFr
ZVNjcmlwdChAImFsZXJ0KCd0ZXN0QWxlcnQxJykiKV07CisgICAgVGVzdFdLV2ViVmlldyAqd2Vi
VmlldyA9IFtbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07
CisgICAgVGVzdFVJRGVsZWdhdGUgKnVpRGVsZWdhdGUgPSBbW1Rlc3RVSURlbGVnYXRlIG5ld10g
YXV0b3JlbGVhc2VdOworICAgIHdlYlZpZXcuVUlEZWxlZ2F0ZSA9IHVpRGVsZWdhdGU7CisgICAg
VGVzdE5hdmlnYXRpb25EZWxlZ2F0ZSAqbmF2aWdhdGlvbkRlbGVnYXRlID0gW1tUZXN0TmF2aWdh
dGlvbkRlbGVnYXRlIG5ld10gYXV0b3JlbGVhc2VdOworICAgIF9fYmxvY2sgYm9vbCBpZnJhbWVF
eGNlcHRpb25UaHJvd24gPSBmYWxzZTsKKyAgICBfX2Jsb2NrIFJldGFpblB0cjxXS1VzZXJDb250
ZW50Q29udHJvbGxlcj4gcmVwbGFjZW1lbnRVc2VyQ29udGVudENvbnRyb2xsZXI7CisgICAgbmF2
aWdhdGlvbkRlbGVnYXRlLmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25XaXRoUHJlZmVy
ZW5jZXMgPSBeKFdLTmF2aWdhdGlvbkFjdGlvbiAqYWN0aW9uLCBXS1dlYnBhZ2VQcmVmZXJlbmNl
cyAqLCB2b2lkICheY29tcGxldGlvbkhhbmRsZXIpKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeSwg
V0tXZWJwYWdlUHJlZmVyZW5jZXMgKikpIHsKKyAgICAgICAgaWYgKFthY3Rpb24ucmVxdWVzdC5V
UkwucGF0aCBoYXNTdWZmaXg6QCIvc2ltcGxlLWlmcmFtZS5odG1sIl0pCisgICAgICAgICAgICBy
ZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3csIG5p
bCk7CisgICAgICAgIGlmIChbYWN0aW9uLnJlcXVlc3QuVVJMLnBhdGggaGFzU3VmZml4OkAiL3Np
bXBsZS5odG1sIl0pIHsKKyAgICAgICAgICAgIEB0cnkgeworICAgICAgICAgICAgICAgIFdLV2Vi
cGFnZVByZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9IFtbV0tXZWJwYWdlUHJlZmVyZW5jZXMgbmV3
XSBhdXRvcmVsZWFzZV07CisgICAgICAgICAgICAgICAgcHJlZmVyZW5jZXMuX3VzZXJDb250ZW50
Q29udHJvbGxlciA9IFtbV0tVc2VyQ29udGVudENvbnRyb2xsZXIgbmV3XSBhdXRvcmVsZWFzZV07
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFj
dGlvblBvbGljeUFsbG93LCBwcmVmZXJlbmNlcyk7CisgICAgICAgICAgICB9IEBjYXRjaCAoTlNF
eGNlcHRpb24gKmV4Y2VwdGlvbikgeworICAgICAgICAgICAgICAgIGlmcmFtZUV4Y2VwdGlvblRo
cm93biA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIEVYUEVDVF9UUlVFKFthY3Rpb24ucmVxdWVzdC5VUkwucGF0
aCBoYXNTdWZmaXg6QCIvc2ltcGxlMi5odG1sIl0pOworICAgICAgICBXS1dlYnBhZ2VQcmVmZXJl
bmNlcyAqcHJlZmVyZW5jZXMgPSBbW1dLV2VicGFnZVByZWZlcmVuY2VzIG5ld10gYXV0b3JlbGVh
c2VdOworICAgICAgICByZXBsYWNlbWVudFVzZXJDb250ZW50Q29udHJvbGxlciA9IGFkb3B0TlMo
W1dLVXNlckNvbnRlbnRDb250cm9sbGVyIG5ld10pOworICAgICAgICBbcmVwbGFjZW1lbnRVc2Vy
Q29udGVudENvbnRyb2xsZXIgYWRkVXNlclNjcmlwdDptYWtlU2NyaXB0KEAiYWxlcnQoJ3Rlc3RB
bGVydDInKSIpXTsKKyAgICAgICAgcHJlZmVyZW5jZXMuX3VzZXJDb250ZW50Q29udHJvbGxlciA9
IHJlcGxhY2VtZW50VXNlckNvbnRlbnRDb250cm9sbGVyLmdldCgpOworICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvdywgcHJlZmVyZW5jZXMpOwor
ICAgIH07CisgICAgd2ViVmlldy5uYXZpZ2F0aW9uRGVsZWdhdGUgPSBuYXZpZ2F0aW9uRGVsZWdh
dGU7CisKKyAgICBbd2ViVmlldyBsb2FkVGVzdFBhZ2VOYW1lZDpAInNpbXBsZS1pZnJhbWUiXTsK
KyAgICBFWFBFQ1RfV0tfU1RSRVEoW3VpRGVsZWdhdGUgd2FpdEZvckFsZXJ0XSwgInRlc3RBbGVy
dDEiKTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmlmcmFtZUV4Y2VwdGlvblRocm93
bik7CisKKyAgICBbd2ViVmlldyBsb2FkVGVzdFBhZ2VOYW1lZDpAInNpbXBsZTIiXTsKKyAgICBF
WFBFQ1RfV0tfU1RSRVEoW3VpRGVsZWdhdGUgd2FpdEZvckFsZXJ0XSwgInRlc3RBbGVydDIiKTsK
KworICAgIGJvb2wgY2F1Z2h0RXhjZXB0aW9uID0gZmFsc2U7CisgICAgQHRyeSB7CisgICAgICAg
IFdLV2VicGFnZVByZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9IFtbV0tXZWJwYWdlUHJlZmVyZW5j
ZXMgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgICAgIHByZWZlcmVuY2VzLl91c2VyQ29udGVudENv
bnRyb2xsZXIgPSBbW1dLVXNlckNvbnRlbnRDb250cm9sbGVyIG5ld10gYXV0b3JlbGVhc2VdOwor
ICAgICAgICBbd2ViVmlldyBfdXBkYXRlV2VicGFnZVByZWZlcmVuY2VzOnByZWZlcmVuY2VzXTsK
KyAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmV4Y2VwdGlvbikgeworICAgICAgICBjYXVnaHRF
eGNlcHRpb24gPSB0cnVlOworICAgIH0KKyAgICBFWFBFQ1RfVFJVRShjYXVnaHRFeGNlcHRpb24p
OworCisgICAgLy8gRklYTUU6IE1ha2UgX2FkZFVzZXJTY3JpcHRJbW1lZGlhdGVseSB3b3JrIHN1
Y2Nlc3NmdWxseSBhZnRlciB1c2luZyBXS1dlYnBhZ2VQcmVmZXJlbmNlcy5fdXNlckNvbnRlbnRD
b250cm9sbGVyCit9CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RVSURlbGVn
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlEZWxl
Z2F0ZS5oCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFVJ
RGVsZWdhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbXBvcnQgPFdlYktpdC9XS1VJRGVsZWdhdGVQcml2YXRlLmg+CisK
K0BpbnRlcmZhY2UgVGVzdFVJRGVsZWdhdGUgOiBOU09iamVjdCA8V0tVSURlbGVnYXRlPgorCitA
cHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgdm9pZCAoXnJ1bkphdmFTY3JpcHRBbGVydFBhbmVs
V2l0aE1lc3NhZ2UpKFdLV2ViVmlldyAqLCBOU1N0cmluZyAqLCBXS0ZyYW1lSW5mbyAqLCB2b2lk
ICheKSh2b2lkKSk7CisKKy0gKE5TU3RyaW5nICopd2FpdEZvckFsZXJ0OworCitAZW5kCkluZGV4
OiBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RVSURlbGVnYXRlLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFVJRGVsZWdhdGUubW0JKG5vbmV4aXN0
ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0VUlEZWxlZ2F0ZS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJUZXN0VUlEZWxlZ2F0ZS5oIgorCisjaW1wb3J0ICJVdGlsaXRpZXMuaCIK
KyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZy5oPgorI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgorCitAaW1wbGVtZW50YXRpb24gVGVzdFVJRGVsZWdhdGUKKworLSAo
dm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVydFBhbmVs
V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOihXS0ZyYW1l
SW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9u
SGFuZGxlcgoreworICAgIGlmIChfcnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZSkK
KyAgICAgICAgX3J1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2Uod2ViVmlldywgbWVz
c2FnZSwgZnJhbWUsIGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICBlbHNlCisgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7Cit9CisKKy0gKE5TU3RyaW5nICopd2FpdEZvckFsZXJ0Cit7CisgICAg
RVhQRUNUX0ZBTFNFKHNlbGYucnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZSk7CisK
KyAgICBfX2Jsb2NrIGJvb2wgZmluaXNoZWQgPSBmYWxzZTsKKyAgICBfX2Jsb2NrIFJldGFpblB0
cjxOU1N0cmluZz4gcmVzdWx0OworICAgIHNlbGYucnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRo
TWVzc2FnZSA9IF4oV0tXZWJWaWV3ICosIE5TU3RyaW5nICptZXNzYWdlLCBXS0ZyYW1lSW5mbyAq
LCB2b2lkICheY29tcGxldGlvbkhhbmRsZXIpKHZvaWQpKSB7CisgICAgICAgIHJlc3VsdCA9IG1l
c3NhZ2U7CisgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKKyAgICB9OworCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZCk7
CisKKyAgICBzZWxmLnJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2UgPSBuaWw7Cisg
ICAgcmV0dXJuIHJlc3VsdC5hdXRvcmVsZWFzZSgpOworfQorCitAZW5kCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395044</attachid>
            <date>2020-03-31 09:05:47 -0700</date>
            <delta_ts>2020-03-31 13:10:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209795-20200331090546.patch</filename>
            <type>text/plain</type>
            <size>76845</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTkxNjMpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDIwLTAzLTMwICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIFNQSSBXS1dl
YnBhZ2VQcmVmZXJlbmNlcy5fdXNlckNvbnRlbnRDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk3OTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gc3dp
dGNoIHdoaWNoIFdLVXNlckNvbnRlbnRDb250cm9sbGVyIHdlIGFyZSB1c2luZyBhdCBkZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uIHRpbWUKKyAgICAgICAgbGlrZSB3ZSBkbyBXS1dlYnNp
dGVEYXRhU3RvcmVzLiAgVGhpcyBpcyBvbmx5IGFsbG93ZWQgd2l0aCBtYWluIGZyYW1lIG5hdmln
YXRpb25zLgorCisgICAgICAgIFRvIGRvIHRoaXMgSSBtb3ZlZCBVc2VyQ29udGVudENvbnRyb2xs
ZXJQYXJhbWV0ZXJzIGludG8gdGhlaXIgb3duIHN0cnVjdC4KKyAgICAgICAgSSByZW1vdmUgdW51
c2VkIFdlYnNpdGVQb2xpY2llc0RhdGEud2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuCisgICAg
ICAgIEkgcGFzcyBhbiBBUEk6OldlYnNpdGVQb2xpY2llcyogZnVydGhlciBkb3duIHRoZSBjaGFp
biBpbnN0ZWFkIG9mIHN3aXRjaGluZyB0byBPcHRpb25hbDxXZWJzaXRlUG9saWNpZXNEYXRhPiwK
KyAgICAgICAgd2hpY2ggYWxsb3dzIHVzIHRvIGFjY2VzcyB0aGUgV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHkqIGZyb20gdGhlIGZvcm1lciBpbiBXZWJQYWdlUHJveHk6OmNyZWF0aW9uUGFy
YW1ldGVycy4KKyAgICAgICAgSSByZW1vdmVkIGFuIHVudXNlZCBXZWJzaXRlUG9saWNpZXMgY29u
c3RydWN0b3IuCisgICAgICAgIEkgYWRkZWQgYSBtaXNzaW5nIGNvcGllZCBtZW1iZXIgdmFyaWFi
bGUgaW4gV2Vic2l0ZVBvbGljaWVzOjpjb3B5LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAqIFNoYXJlZC9Vc2VyQ29udGVudENvbnRyb2xs
ZXJQYXJhbWV0ZXJzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlVzZXJDb250ZW50Q29u
dHJvbGxlclBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlVzZXJD
b250ZW50Q29udHJvbGxlclBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1Vz
ZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnMuaDogQWRkZWQuCisgICAgICAgICogU2hhcmVk
L1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
Q3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJQYWdl
Q3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogU2hhcmVkL1dlYnNpdGVQb2xpY2llc0Rh
dGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlUG9saWNpZXNEYXRhOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlUG9saWNpZXNEYXRhOjpkZWNvZGUpOgorICAg
ICAgICAqIFNoYXJlZC9XZWJzaXRlUG9saWNpZXNEYXRhLmg6CisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9saWNpZXMuY3BwOgorICAg
ICAgICAoQVBJOjpXZWJzaXRlUG9saWNpZXM6OmNvcHkgY29uc3QpOgorICAgICAgICAoQVBJOjpX
ZWJzaXRlUG9saWNpZXM6OnNldFVzZXJDb250ZW50Q29udHJvbGxlcik6CisgICAgICAgIChBUEk6
OldlYnNpdGVQb2xpY2llczo6ZGF0YSk6CisgICAgICAgIChBUEk6OldlYnNpdGVQb2xpY2llczo6
V2Vic2l0ZVBvbGljaWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVdl
YnNpdGVQb2xpY2llcy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgor
ICAgICAgICAoV0tQYWdlVXBkYXRlV2Vic2l0ZVBvbGljaWVzKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF91cGRhdGVX
ZWJwYWdlUHJlZmVyZW5jZXM6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YnBhZ2VQcmVmZXJlbmNlcy5tbToKKyAgICAgICAgKC1bV0tXZWJwYWdlUHJlZmVyZW5jZXMgX3Vz
ZXJDb250ZW50Q29udHJvbGxlcl0pOgorICAgICAgICAoLVtXS1dlYnBhZ2VQcmVmZXJlbmNlcyBf
c2V0VXNlckNvbnRlbnRDb250cm9sbGVyOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0Nv
Y29hL05hdmlnYXRpb25TdGF0ZS5tbToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRl
OjpOYXZpZ2F0aW9uQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpQcm92aXNpb25hbFBhZ2VQcm94eTo6UHJvdmlzaW9uYWxQYWdlUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpQcm92aXNpb25hbFBhZ2VQcm94eTo6aW5pdGlhbGl6ZVdlYlBhZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpQcm92aXNpb25hbFBhZ2VQcm94eTo6Z29Ub0JhY2tGb3J3YXJkSXRlbSk6
CisgICAgICAgICogVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5Lmg6CisgICAgICAgICog
VUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZFByb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cGFy
YW1ldGVycyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5Ojpjb250ZW50UnVsZUxpc3REYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmNvbnRlbnRSdWxlTGlzdERhdGEpOiBEZWxldGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY2VpdmVkTmF2aWdhdGlvblBvbGljeURlY2lzaW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZWNlaXZlZFBvbGljeURlY2lzaW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpjb250aW51ZU5hdmlnYXRpb25Jbk5l
d1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRlY2lk
ZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2VTaGFyZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjphZGRXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oOgorICAg
ICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6bV9wcm9jZXNzRGlz
cGxheU5hbWUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKToKKwogMjAyMC0wMy0yOCAg
QWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIERl
cHJlY2F0ZSBpbmplY3RlZCBidW5kbGUgcGFnZSBncm91cCBTUEkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAko
cmV2aXNpb24gMjU5MTYzKQorKysgU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMTgxLDYgKzE4MSw3IEBAIFNoYXJlZC9Ub3VjaEJhck1lbnVJdGVtRGF0YS5jcHAK
IFNoYXJlZC9VUkxTY2hlbWVUYXNrUGFyYW1ldGVycy5jcHAKIFNoYXJlZC9VcGRhdGVJbmZvLmNw
cAogU2hhcmVkL1VzZXJEYXRhLmNwcAorU2hhcmVkL1VzZXJDb250ZW50Q29udHJvbGxlclBhcmFt
ZXRlcnMuY3BwCiBTaGFyZWQvV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAKIFNoYXJlZC9XZWJD
b21waWxlZENvbnRlbnRSdWxlTGlzdC5jcHAKIFNoYXJlZC9XZWJDb21waWxlZENvbnRlbnRSdWxl
TGlzdERhdGEuY3BwCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtT
ZXNzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtTZXNzaW9uLmNwcAkocmV2aXNpb24gMjU5MTYzKQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMy
LDcgQEAKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRl
ICJOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIk5ldHdvcmtSZXNv
dXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJz
LmgiCiAjaW5jbHVkZSAiUGluZ0xvYWQuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNp
bmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgpJbmRleDogU291cmNlL1dlYktpdC9TaGFy
ZWQvVXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9TaGFyZWQvVXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVycy5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvVXNlckNvbnRlbnRDb250cm9sbGVy
UGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVudENvbnRyb2xsZXJQ
YXJhbWV0ZXJzLmgiCisKKyNpbmNsdWRlICJEZWNvZGVyLmgiCisjaW5jbHVkZSAiRW5jb2Rlci5o
IgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXJQYXJh
bWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29k
ZXIgPDwgdXNlckNvbnRlbnRXb3JsZHM7CisgICAgZW5jb2RlciA8PCB1c2VyU2NyaXB0czsKKyAg
ICBlbmNvZGVyIDw8IHVzZXJTdHlsZVNoZWV0czsKKyAgICBlbmNvZGVyIDw8IG1lc3NhZ2VIYW5k
bGVyczsKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorICAgIGVuY29kZXIgPDwgY29u
dGVudFJ1bGVMaXN0czsKKyNlbmRpZgorfQorCitPcHRpb25hbDxVc2VyQ29udGVudENvbnRyb2xs
ZXJQYXJhbWV0ZXJzPiBVc2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzOjpkZWNvZGUoSVBD
OjpEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPFZlY3RvcjxzdGQ6OnBhaXI8Q29u
dGVudFdvcmxkSWRlbnRpZmllciwgU3RyaW5nPj4+IHVzZXJDb250ZW50V29ybGRzOworICAgIGRl
Y29kZXIgPj4gdXNlckNvbnRlbnRXb3JsZHM7CisgICAgaWYgKCF1c2VyQ29udGVudFdvcmxkcykK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJV
c2VyU2NyaXB0RGF0YT4+IHVzZXJTY3JpcHRzOworICAgIGRlY29kZXIgPj4gdXNlclNjcmlwdHM7
CisgICAgaWYgKCF1c2VyU2NyaXB0cykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICAKKyAgICBPcHRpb25hbDxWZWN0b3I8V2ViVXNlclN0eWxlU2hlZXREYXRhPj4gdXNlclN0eWxl
U2hlZXRzOworICAgIGRlY29kZXIgPj4gdXNlclN0eWxlU2hlZXRzOworICAgIGlmICghdXNlclN0
eWxlU2hlZXRzKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIAorICAgIE9wdGlv
bmFsPFZlY3RvcjxXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckRhdGE+PiBtZXNzYWdlSGFuZGxlcnM7
CisgICAgZGVjb2RlciA+PiBtZXNzYWdlSGFuZGxlcnM7CisgICAgaWYgKCFtZXNzYWdlSGFuZGxl
cnMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgCisjaWYgRU5BQkxFKENPTlRF
TlRfRVhURU5TSU9OUykKKyAgICBPcHRpb25hbDxWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgV2Vi
Q29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhPj4+IGNvbnRlbnRSdWxlTGlzdHM7CisgICAgZGVj
b2RlciA+PiBjb250ZW50UnVsZUxpc3RzOworICAgIGlmICghY29udGVudFJ1bGVMaXN0cykKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyNlbmRpZgorCisgICAgcmV0dXJuIHt7CisgICAg
ICAgIFdURk1vdmUoKnVzZXJDb250ZW50V29ybGRzKSwKKyAgICAgICAgV1RGTW92ZSgqdXNlclNj
cmlwdHMpLAorICAgICAgICBXVEZNb3ZlKCp1c2VyU3R5bGVTaGVldHMpLAorICAgICAgICBXVEZN
b3ZlKCptZXNzYWdlSGFuZGxlcnMpLAorI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisg
ICAgICAgIFdURk1vdmUoKmNvbnRlbnRSdWxlTGlzdHMpLAorI2VuZGlmCisgICAgfX07Cit9Cisg
ICAgCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1Vz
ZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9Vc2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvVXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVy
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YS5oIgorI2lu
Y2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oIgorCituYW1lc3BhY2Ug
SVBDIHsKK2NsYXNzIEVuY29kZXI7CitjbGFzcyBEZWNvZGVyOworfQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworc3RydWN0IFVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnMgeworCisgICAg
VmVjdG9yPHN0ZDo6cGFpcjxDb250ZW50V29ybGRJZGVudGlmaWVyLCBTdHJpbmc+PiB1c2VyQ29u
dGVudFdvcmxkczsKKyAgICBWZWN0b3I8V2ViVXNlclNjcmlwdERhdGE+IHVzZXJTY3JpcHRzOwor
ICAgIFZlY3RvcjxXZWJVc2VyU3R5bGVTaGVldERhdGE+IHVzZXJTdHlsZVNoZWV0czsKKyAgICBW
ZWN0b3I8V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXJEYXRhPiBtZXNzYWdlSGFuZGxlcnM7CisjaWYg
RU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywg
V2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhPj4gY29udGVudFJ1bGVMaXN0czsKKyNlbmRp
ZgorCisgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNvZGVyJikgY29uc3Q7CisgICAgc3RhdGljIE9w
dGlvbmFsPFVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnM+IGRlY29kZShJUEM6OkRlY29k
ZXImKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDI1
OTE2MykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsMTMgKzEyNyw3IEBAIHZvaWQgV2ViUGFnZUNyZWF0
aW9uUGFyYW1ldGVyczo6ZW5jb2RlKEkKICAgICBlbmNvZGVyIDw8IG5lZWRzRm9udEF0dHJpYnV0
ZXM7CiAgICAgZW5jb2RlciA8PCBpY2VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkOwogICAgIGVu
Y29kZXIgPDwgZW51bWVyYXRpbmdBbGxOZXR3b3JrSW50ZXJmYWNlc0VuYWJsZWQ7Ci0gICAgZW5j
b2RlciA8PCB1c2VyQ29udGVudFdvcmxkczsKLSAgICBlbmNvZGVyIDw8IHVzZXJTY3JpcHRzOwot
ICAgIGVuY29kZXIgPDwgdXNlclN0eWxlU2hlZXRzOwotICAgIGVuY29kZXIgPDwgbWVzc2FnZUhh
bmRsZXJzOwotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgZW5jb2RlciA8PCBj
b250ZW50UnVsZUxpc3RzOwotI2VuZGlmCisgICAgZW5jb2RlciA8PCB1c2VyQ29udGVudENvbnRy
b2xsZXJQYXJhbWV0ZXJzOwogICAgIGVuY29kZXIgPDwgYmFja2dyb3VuZENvbG9yOwogICAgIGVu
Y29kZXIgPDwgb2xkUGFnZUlEOwogICAgIGVuY29kZXIgPDwgb3ZlcnJpZGRlbk1lZGlhVHlwZTsK
QEAgLTM5MiwzNyArMzg2LDExIEBAIE9wdGlvbmFsPFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM+
IFdlYlAKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMuZW51bWVyYXRpbmdBbGxO
ZXR3b3JrSW50ZXJmYWNlc0VuYWJsZWQpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgT3B0aW9uYWw8VmVjdG9yPHN0ZDo6cGFpcjxDb250ZW50V29ybGRJZGVudGlmaWVyLCBT
dHJpbmc+Pj4gdXNlckNvbnRlbnRXb3JsZHM7Ci0gICAgZGVjb2RlciA+PiB1c2VyQ29udGVudFdv
cmxkczsKLSAgICBpZiAoIXVzZXJDb250ZW50V29ybGRzKQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotICAgIHBhcmFtZXRlcnMudXNlckNvbnRlbnRXb3JsZHMgPSBXVEZNb3ZlKCp1c2Vy
Q29udGVudFdvcmxkcyk7Ci0KLSAgICBPcHRpb25hbDxWZWN0b3I8V2ViVXNlclNjcmlwdERhdGE+
PiB1c2VyU2NyaXB0czsKLSAgICBkZWNvZGVyID4+IHVzZXJTY3JpcHRzOwotICAgIGlmICghdXNl
clNjcmlwdHMpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy51
c2VyU2NyaXB0cyA9IFdURk1vdmUoKnVzZXJTY3JpcHRzKTsKLSAgICAKLSAgICBPcHRpb25hbDxW
ZWN0b3I8V2ViVXNlclN0eWxlU2hlZXREYXRhPj4gdXNlclN0eWxlU2hlZXRzOwotICAgIGRlY29k
ZXIgPj4gdXNlclN0eWxlU2hlZXRzOwotICAgIGlmICghdXNlclN0eWxlU2hlZXRzKQorICAgIE9w
dGlvbmFsPFVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnM+IHVzZXJDb250ZW50Q29udHJv
bGxlclBhcmFtZXRlcnM7CisgICAgZGVjb2RlciA+PiB1c2VyQ29udGVudENvbnRyb2xsZXJQYXJh
bWV0ZXJzOworICAgIGlmICghdXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVycykKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLnVzZXJTdHlsZVNoZWV0cyA9
IFdURk1vdmUoKnVzZXJTdHlsZVNoZWV0cyk7Ci0gICAgCi0gICAgT3B0aW9uYWw8VmVjdG9yPFdl
YlNjcmlwdE1lc3NhZ2VIYW5kbGVyRGF0YT4+IG1lc3NhZ2VIYW5kbGVyczsKLSAgICBkZWNvZGVy
ID4+IG1lc3NhZ2VIYW5kbGVyczsKLSAgICBpZiAoIW1lc3NhZ2VIYW5kbGVycykKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVycyA9IFdU
Rk1vdmUoKm1lc3NhZ2VIYW5kbGVycyk7Ci0gICAgCi0jaWYgRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykKLSAgICBPcHRpb25hbDxWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgV2ViQ29tcGlsZWRD
b250ZW50UnVsZUxpc3REYXRhPj4+IGNvbnRlbnRSdWxlTGlzdHM7Ci0gICAgZGVjb2RlciA+PiBj
b250ZW50UnVsZUxpc3RzOwotICAgIGlmICghY29udGVudFJ1bGVMaXN0cykKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmNvbnRlbnRSdWxlTGlzdHMgPSBXVEZN
b3ZlKCpjb250ZW50UnVsZUxpc3RzKTsKLSNlbmRpZgorICAgIHBhcmFtZXRlcnMudXNlckNvbnRl
bnRDb250cm9sbGVyUGFyYW1ldGVycyA9IFdURk1vdmUoKnVzZXJDb250ZW50Q29udHJvbGxlclBh
cmFtZXRlcnMpOwogCiAgICAgT3B0aW9uYWw8T3B0aW9uYWw8V2ViQ29yZTo6Q29sb3I+PiBiYWNr
Z3JvdW5kQ29sb3I7CiAgICAgZGVjb2RlciA+PiBiYWNrZ3JvdW5kQ29sb3I7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oCShyZXZp
c2lvbiAyNTkxNjMpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJh
bWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCwxMSBAQAogI2luY2x1ZGUgIkRy
YXdpbmdBcmVhSW5mby5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRl
ICJTZXNzaW9uU3RhdGUuaCIKLSNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERh
dGEuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzLmgiCiAjaW5j
bHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdyb3VwRGF0
YS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJXZWJQ
cmVmZXJlbmNlc1N0b3JlLmgiCi0jaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0
YVR5cGVzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BY3Rpdml0eVN0YXRlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9Db2xvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRTaXplLmg+CkBAIC0xOTQs
MTQgKzE5Myw3IEBAIHN0cnVjdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBib29s
IGljZUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWQgeyB0cnVlIH07CiAgICAgYm9vbCBlbnVtZXJh
dGluZ0FsbE5ldHdvcmtJbnRlcmZhY2VzRW5hYmxlZCB7IGZhbHNlIH07CiAKLSAgICAvLyBVc2Vy
Q29udGVudENvbnRyb2xsZXIgbWVtYmVycwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29udGVudFdv
cmxkSWRlbnRpZmllciwgU3RyaW5nPj4gdXNlckNvbnRlbnRXb3JsZHM7Ci0gICAgVmVjdG9yPFdl
YlVzZXJTY3JpcHREYXRhPiB1c2VyU2NyaXB0czsKLSAgICBWZWN0b3I8V2ViVXNlclN0eWxlU2hl
ZXREYXRhPiB1c2VyU3R5bGVTaGVldHM7Ci0gICAgVmVjdG9yPFdlYlNjcmlwdE1lc3NhZ2VIYW5k
bGVyRGF0YT4gbWVzc2FnZUhhbmRsZXJzOwotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMp
Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0
RGF0YT4+IGNvbnRlbnRSdWxlTGlzdHM7Ci0jZW5kaWYKKyAgICBVc2VyQ29udGVudENvbnRyb2xs
ZXJQYXJhbWV0ZXJzIHVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnM7CiAKICAgICBPcHRp
b25hbDxXZWJDb3JlOjpDb2xvcj4gYmFja2dyb3VuZENvbG9yOwogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlUG9saWNpZXNEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJzaXRlUG9saWNpZXNEYXRhLmNwcAkocmV2aXNpb24gMjU5MTYzKQor
KysgU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZVBvbGljaWVzRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDcgKzQ1LDYgQEAgdm9pZCBXZWJzaXRlUG9saWNpZXNEYXRhOjplbmNvZGUo
SVBDOjpFbgogICAgIGVuY29kZXIgPDwgYWxsb3dlZEF1dG9wbGF5UXVpcmtzOwogICAgIGVuY29k
ZXIgPDwgY3VzdG9tSGVhZGVyRmllbGRzOwogICAgIGVuY29kZXIgPDwgcG9wVXBQb2xpY3k7Ci0g
ICAgZW5jb2RlciA8PCB3ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczsKICAgICBlbmNvZGVyIDw8
IGN1c3RvbVVzZXJBZ2VudDsKICAgICBlbmNvZGVyIDw8IGN1c3RvbVVzZXJBZ2VudEFzU2l0ZVNw
ZWNpZmljUXVpcmtzOwogICAgIGVuY29kZXIgPDwgY3VzdG9tTmF2aWdhdG9yUGxhdGZvcm07CkBA
IC05MSwxMSArOTAsNiBAQCBPcHRpb25hbDxXZWJzaXRlUG9saWNpZXNEYXRhPiBXZWJzaXRlUG9s
CiAgICAgaWYgKCFwb3BVcFBvbGljeSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIE9wdGlvbmFsPE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPj4gd2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnM7Ci0gICAgZGVjb2RlciA+PiB3ZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVyczsKLSAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzKQotICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotCiAgICAgT3B0aW9uYWw8U3RyaW5nPiBjdXN0b21Vc2VyQWdl
bnQ7CiAgICAgZGVjb2RlciA+PiBjdXN0b21Vc2VyQWdlbnQ7CiAgICAgaWYgKCFjdXN0b21Vc2Vy
QWdlbnQpCkBAIC0xNTAsNyArMTQ0LDYgQEAgT3B0aW9uYWw8V2Vic2l0ZVBvbGljaWVzRGF0YT4g
V2Vic2l0ZVBvbAogI2VuZGlmCiAgICAgICAgIFdURk1vdmUoKmN1c3RvbUhlYWRlckZpZWxkcyks
CiAgICAgICAgIFdURk1vdmUoKnBvcFVwUG9saWN5KSwKLSAgICAgICAgV1RGTW92ZSgqd2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMpLAogICAgICAgICBXVEZNb3ZlKCpjdXN0b21Vc2VyQWdlbnQp
LAogICAgICAgICBXVEZNb3ZlKCpjdXN0b21Vc2VyQWdlbnRBc1NpdGVTcGVjaWZpY1F1aXJrcyks
CiAgICAgICAgIFdURk1vdmUoKmN1c3RvbU5hdmlnYXRvclBsYXRmb3JtKSwKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVQb2xpY2llc0RhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlUG9saWNpZXNEYXRhLmgJKHJldmlzaW9uIDI1OTE2MykK
KysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVQb2xpY2llc0RhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiV2Vic2l0ZUF1dG9wbGF5UG9saWN5
LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZUF1dG9wbGF5UXVpcmsuaCIKLSNpbmNsdWRlICJXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIldlYnNpdGVMZWdhY3lPdmVyZmxvd1Nj
cm9sbGluZ1RvdWNoUG9saWN5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZU1lZGlhU291cmNlUG9saWN5
LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZU1ldGFWaWV3cG9ydFBvbGljeS5oIgpAQCAtNjAsNyArNTks
NiBAQCBzdHJ1Y3QgV2Vic2l0ZVBvbGljaWVzRGF0YSB7CiAjZW5kaWYKICAgICBWZWN0b3I8V2Vi
Q29yZTo6Q3VzdG9tSGVhZGVyRmllbGRzPiBjdXN0b21IZWFkZXJGaWVsZHM7CiAgICAgV2Vic2l0
ZVBvcFVwUG9saWN5IHBvcFVwUG9saWN5IHsgV2Vic2l0ZVBvcFVwUG9saWN5OjpEZWZhdWx0IH07
Ci0gICAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IHdlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzOwogICAgIFN0cmluZyBjdXN0b21Vc2VyQWdlbnQ7CiAgICAgU3RyaW5nIGN1
c3RvbVVzZXJBZ2VudEFzU2l0ZVNwZWNpZmljUXVpcmtzOwogICAgIFN0cmluZyBjdXN0b21OYXZp
Z2F0b3JQbGF0Zm9ybTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFs
UGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92
aXNpb25hbFBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDI1OTE2MykKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogI2luY2x1ZGUgIlByb3Zpc2lvbmFsUGFnZVByb3h5LmgiCiAKICNpbmNsdWRl
ICJBUElOYXZpZ2F0aW9uLmgiCisjaW5jbHVkZSAiQVBJV2Vic2l0ZVBvbGljaWVzLmgiCiAjaW5j
bHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgogI2luY2x1ZGUgIkZvcm1EYXRhUmVmZXJlbmNlLmgi
CiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAtNTQsNyArNTUsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKICNkZWZpbmUgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChjaGFubmVsLCBmbXQsIC4u
LikgUkVMRUFTRV9MT0dfSUYobV9wYWdlLmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBjaGFu
bmVsLCAiJXAgLSBQcm92aXNpb25hbFBhZ2VQcm94eTo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdT
X18pCiAjZGVmaW5lIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQoY2hhbm5lbCwgZm10LCAu
Li4pIFJFTEVBU0VfTE9HX0VSUk9SX0lGKG1fcGFnZS5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQo
KSwgY2hhbm5lbCwgIiVwIC0gUHJvdmlzaW9uYWxQYWdlUHJveHk6OiIgZm10LCB0aGlzLCAjI19f
VkFfQVJHU19fKQogCi1Qcm92aXNpb25hbFBhZ2VQcm94eTo6UHJvdmlzaW9uYWxQYWdlUHJveHko
V2ViUGFnZVByb3h5JiBwYWdlLCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIHByb2Nlc3MsIHN0ZDo6
dW5pcXVlX3B0cjxTdXNwZW5kZWRQYWdlUHJveHk+IHN1c3BlbmRlZFBhZ2UsIHVpbnQ2NF90IG5h
dmlnYXRpb25JRCwgYm9vbCBpc1NlcnZlclJlZGlyZWN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3
YXBSZXF1ZXN0ZWRCeUNsaWVudCkKK1Byb3Zpc2lvbmFsUGFnZVByb3h5OjpQcm92aXNpb25hbFBh
Z2VQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIFJlZjxXZWJQcm9jZXNzUHJveHk+JiYgcHJvY2Vz
cywgc3RkOjp1bmlxdWVfcHRyPFN1c3BlbmRlZFBhZ2VQcm94eT4gc3VzcGVuZGVkUGFnZSwgdWlu
dDY0X3QgbmF2aWdhdGlvbklELCBib29sIGlzU2VydmVyUmVkaXJlY3QsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCBw
cm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBBUEk6OldlYnNpdGVQb2xpY2llcyogd2Vic2l0
ZVBvbGljaWVzKQogICAgIDogbV9wYWdlKHBhZ2UpCiAgICAgLCBtX3dlYlBhZ2VJRChzdXNwZW5k
ZWRQYWdlID8gc3VzcGVuZGVkUGFnZS0+d2ViUGFnZUlEKCkgOiBQYWdlSWRlbnRpZmllcjo6Z2Vu
ZXJhdGUoKSkKICAgICAsIG1fcHJvY2VzcyhXVEZNb3ZlKHByb2Nlc3MpKQpAQCAtODgsNyArODks
NyBAQCBQcm92aXNpb25hbFBhZ2VQcm94eTo6UHJvdmlzaW9uYWxQYWdlUHJvCiAgICAgICAgIG1f
cHJvY2Vzcy0+ZnJhbWVDcmVhdGVkKHN1c3BlbmRlZFBhZ2UtPm1haW5GcmFtZUlEKCksICptX21h
aW5GcmFtZSk7CiAgICAgfQogCi0gICAgaW5pdGlhbGl6ZVdlYlBhZ2UoKTsKKyAgICBpbml0aWFs
aXplV2ViUGFnZSh3ZWJzaXRlUG9saWNpZXMpOwogCiAgICAgbV9wYWdlLmluc3BlY3RvckNvbnRy
b2xsZXIoKS5kaWRDcmVhdGVQcm92aXNpb25hbFBhZ2UoKnRoaXMpOwogfQpAQCAtMTM1LDExICsx
MzYsMTEgQEAgdm9pZCBQcm92aXNpb25hbFBhZ2VQcm94eTo6Y2FuY2VsKCkKICAgICBkaWRGYWls
UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUobV9tYWluRnJhbWUtPmZyYW1lSUQoKSwgeyB9LCB7IH0s
IG1fbmF2aWdhdGlvbklELCBtX3Byb3Zpc2lvbmFsTG9hZFVSTCwgZXJyb3IsIFdlYkNvcmU6Oldp
bGxDb250aW51ZUxvYWRpbmc6Ok5vLCBVc2VyRGF0YSB7IH0pOyAvLyBXaWxsIGRlbGV0ZSB8dGhp
c3wuCiB9CiAKLXZvaWQgUHJvdmlzaW9uYWxQYWdlUHJveHk6OmluaXRpYWxpemVXZWJQYWdlKCkK
K3ZvaWQgUHJvdmlzaW9uYWxQYWdlUHJveHk6OmluaXRpYWxpemVXZWJQYWdlKFJlZlB0cjxBUEk6
OldlYnNpdGVQb2xpY2llcz4mJiB3ZWJzaXRlUG9saWNpZXMpCiB7CiAgICAgbV9kcmF3aW5nQXJl
YSA9IG1fcGFnZS5wYWdlQ2xpZW50KCkuY3JlYXRlRHJhd2luZ0FyZWFQcm94eShtX3Byb2Nlc3Mp
OwogCi0gICAgYXV0byBwYXJhbWV0ZXJzID0gbV9wYWdlLmNyZWF0aW9uUGFyYW1ldGVycyhtX3By
b2Nlc3MsICptX2RyYXdpbmdBcmVhKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBtX3BhZ2UuY3Jl
YXRpb25QYXJhbWV0ZXJzKG1fcHJvY2VzcywgKm1fZHJhd2luZ0FyZWEsIFdURk1vdmUod2Vic2l0
ZVBvbGljaWVzKSk7CiAgICAgcGFyYW1ldGVycy5pc1Byb2Nlc3NTd2FwID0gdHJ1ZTsKICAgICBt
X3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkNyZWF0ZVdlYlBhZ2UobV93ZWJQ
YWdlSUQsIHBhcmFtZXRlcnMpLCAwKTsKICAgICBtX3Byb2Nlc3MtPmFkZFZpc2l0ZWRMaW5rU3Rv
cmVVc2VyKG1fcGFnZS52aXNpdGVkTGlua1N0b3JlKCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOwpA
QCAtMTY4LDcgKzE2OSw3IEBAIHZvaWQgUHJvdmlzaW9uYWxQYWdlUHJveHk6OmxvYWRSZXF1ZXN0
KEEKICAgICBtX3BhZ2UubG9hZFJlcXVlc3RXaXRoTmF2aWdhdGlvblNoYXJlZChtX3Byb2Nlc3Mu
Y29weVJlZigpLCBtX3dlYlBhZ2VJRCwgbmF2aWdhdGlvbiwgV1RGTW92ZShyZXF1ZXN0KSwgbmF2
aWdhdGlvbi5sYXN0TmF2aWdhdGlvbkFjdGlvbigpLnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xp
Y3ksIHVzZXJEYXRhLCBXZWJDb3JlOjpTaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQ6Olllcywg
aXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiwgaGFzTmF2aWdhdGVkQXdheUZyb21BcHBCb3Vu
ZERvbWFpbiwgV1RGTW92ZSh3ZWJzaXRlUG9saWNpZXMpKTsKIH0KIAotdm9pZCBQcm92aXNpb25h
bFBhZ2VQcm94eTo6Z29Ub0JhY2tGb3J3YXJkSXRlbShBUEk6Ok5hdmlnYXRpb24mIG5hdmlnYXRp
b24sIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0sIE9wdGlvbmFsPFdlYnNpdGVQb2xpY2ll
c0RhdGE+JiYgd2Vic2l0ZVBvbGljaWVzKQordm9pZCBQcm92aXNpb25hbFBhZ2VQcm94eTo6Z29U
b0JhY2tGb3J3YXJkSXRlbShBUEk6Ok5hdmlnYXRpb24mIG5hdmlnYXRpb24sIFdlYkJhY2tGb3J3
YXJkTGlzdEl0ZW0mIGl0ZW0sIFJlZlB0cjxBUEk6OldlYnNpdGVQb2xpY2llcz4mJiB3ZWJzaXRl
UG9saWNpZXMpCiB7CiAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChQcm9jZXNzU3dhcHBpbmcs
ICJnb1RvQmFja0ZvcndhcmRJdGVtOiBwYWdlUHJveHlJRD0lIiBQUkl1NjQgIiB3ZWJQYWdlSUQ9
JSIgUFJJdTY0LCBtX3BhZ2UuaWRlbnRpZmllcigpLnRvVUludDY0KCksIG1fd2ViUGFnZUlELnRv
VUludDY0KCkpOwogCkBAIC0xNzksOCArMTgwLDEzIEBAIHZvaWQgUHJvdmlzaW9uYWxQYWdlUHJv
eHk6OmdvVG9CYWNrRm9yd2EKICAgICAgICAgfQogICAgICAgICByZXR1cm4gJml0ZW0gIT0gdGFy
Z2V0SXRlbTsKICAgICB9KTsKKyAgICAKKyAgICBPcHRpb25hbDxXZWJzaXRlUG9saWNpZXNEYXRh
PiB3ZWJzaXRlUG9saWNpZXNEYXRhOworICAgIGlmICh3ZWJzaXRlUG9saWNpZXMpCisgICAgICAg
IHdlYnNpdGVQb2xpY2llc0RhdGEgPSB3ZWJzaXRlUG9saWNpZXMtPmRhdGEoKTsKKyAgICAKICAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpVcGRhdGVCYWNrRm9yd2FyZExpc3RGb3JSZWF0dGFj
aChXVEZNb3ZlKGl0ZW1TdGF0ZXMpKSk7Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R29U
b0JhY2tGb3J3YXJkSXRlbShuYXZpZ2F0aW9uLm5hdmlnYXRpb25JRCgpLCBpdGVtLml0ZW1JRCgp
LCAqbmF2aWdhdGlvbi5iYWNrRm9yd2FyZEZyYW1lTG9hZFR5cGUoKSwgV2ViQ29yZTo6U2hvdWxk
VHJlYXRBc0NvbnRpbnVpbmdMb2FkOjpZZXMsIFdURk1vdmUod2Vic2l0ZVBvbGljaWVzKSkpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdvVG9CYWNrRm9yd2FyZEl0ZW0obmF2aWdhdGlv
bi5uYXZpZ2F0aW9uSUQoKSwgaXRlbS5pdGVtSUQoKSwgKm5hdmlnYXRpb24uYmFja0ZvcndhcmRG
cmFtZUxvYWRUeXBlKCksIFdlYkNvcmU6OlNob3VsZFRyZWF0QXNDb250aW51aW5nTG9hZDo6WWVz
LCBXVEZNb3ZlKHdlYnNpdGVQb2xpY2llc0RhdGEpKSk7CiAgICAgbV9wcm9jZXNzLT5zdGFydFJl
c3BvbnNpdmVuZXNzVGltZXIoKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UHJvdmlzaW9uYWxQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCShyZXZpc2lvbiAyNTkxNjMpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC02OSw3ICs2OSw3IEBAIHVzaW5nIExheWVySG9zdGluZ0NvbnRleHRJRCA9IHVpbnQzMl90Owog
Y2xhc3MgUHJvdmlzaW9uYWxQYWdlUHJveHkgOiBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIs
IHB1YmxpYyBJUEM6Ok1lc3NhZ2VTZW5kZXIsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxQcm92aXNp
b25hbFBhZ2VQcm94eT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIFByb3Zpc2lvbmFsUGFnZVByb3h5KFdlYlBhZ2VQcm94eSYsIFJlZjxXZWJQcm9jZXNzUHJv
eHk+JiYsIHN0ZDo6dW5pcXVlX3B0cjxTdXNwZW5kZWRQYWdlUHJveHk+LCB1aW50NjRfdCBuYXZp
Z2F0aW9uSUQsIGJvb2wgaXNTZXJ2ZXJSZWRpcmVjdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCk7CisgICAgUHJvdmlzaW9uYWxQ
YWdlUHJveHkoV2ViUGFnZVByb3h5JiwgUmVmPFdlYlByb2Nlc3NQcm94eT4mJiwgc3RkOjp1bmlx
dWVfcHRyPFN1c3BlbmRlZFBhZ2VQcm94eT4sIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgYm9vbCBp
c1NlcnZlclJlZGlyZWN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBQcm9jZXNz
U3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBBUEk6OldlYnNpdGVQb2xpY2llcyopOwogICAgIH5Qcm92
aXNpb25hbFBhZ2VQcm94eSgpOwogCiAgICAgV2ViUGFnZVByb3h5JiBwYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9wYWdlOyB9CkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbG9h
ZERhdGEoQVBJOjpOYXZpZ2F0aW9uJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3Qg
U3RyaW5nJiBNSU1FVHlwZSwgY29uc3QgU3RyaW5nJiBlbmNvZGluZywgY29uc3QgU3RyaW5nJiBi
YXNlVVJMLCBBUEk6Ok9iamVjdCogdXNlckRhdGEsIE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWlu
LCBOYXZpZ2F0ZWRBd2F5RnJvbUFwcEJvdW5kRG9tYWluLCBPcHRpb25hbDxXZWJzaXRlUG9saWNp
ZXNEYXRhPiYmID0gV1RGOjpudWxsb3B0KTsKICAgICB2b2lkIGxvYWRSZXF1ZXN0KEFQSTo6TmF2
aWdhdGlvbiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBBUEk6Ok9iamVjdCogdXNlckRh
dGEsIE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluLCBOYXZpZ2F0ZWRBd2F5RnJvbUFwcEJvdW5k
RG9tYWluLCBPcHRpb25hbDxXZWJzaXRlUG9saWNpZXNEYXRhPiYmID0gV1RGOjpudWxsb3B0KTsK
LSAgICB2b2lkIGdvVG9CYWNrRm9yd2FyZEl0ZW0oQVBJOjpOYXZpZ2F0aW9uJiwgV2ViQmFja0Zv
cndhcmRMaXN0SXRlbSYsIE9wdGlvbmFsPFdlYnNpdGVQb2xpY2llc0RhdGE+JiYpOworICAgIHZv
aWQgZ29Ub0JhY2tGb3J3YXJkSXRlbShBUEk6Ok5hdmlnYXRpb24mLCBXZWJCYWNrRm9yd2FyZExp
c3RJdGVtJiwgUmVmUHRyPEFQSTo6V2Vic2l0ZVBvbGljaWVzPiYmKTsKICAgICB2b2lkIGNhbmNl
bCgpOwogCiAgICAgdm9pZCB1bmZyZWV6ZUxheWVyVHJlZUR1ZVRvU3dpcGVBbmltYXRpb24oKTsK
QEAgLTE0Myw3ICsxNDMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkQ3JlYXRlQ29udGV4dEZv
clZpc2liaWxpdHlQcm9wYWdhdGlvbihMYXllckhvc3RpbmdDb250ZXh0SUQpOwogI2VuZGlmCiAK
LSAgICB2b2lkIGluaXRpYWxpemVXZWJQYWdlKCk7CisgICAgdm9pZCBpbml0aWFsaXplV2ViUGFn
ZShSZWZQdHI8QVBJOjpXZWJzaXRlUG9saWNpZXM+JiYpOwogICAgIGJvb2wgdmFsaWRhdGVJbnB1
dChXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIsIGNvbnN0IE9wdGlvbmFsPHVpbnQ2NF90PiYgbmF2
aWdhdGlvbklEID0gV1RGOjpudWxsb3B0KTsKIAogICAgIFdlYlBhZ2VQcm94eSYgbV9wYWdlOwpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAy
NTkxNjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMTY4LDMxICszMTY4LDMxIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojppc05h
dmlnYXRpbmdUb0FwcEJvdW4KICAgICBjb21wbGV0aW9uSGFuZGxlcihtX2lzTmF2aWdhdGluZ1Rv
QXBwQm91bmREb21haW4gPT0gTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW46Olllcyk7CiB9CiAK
LXZvaWQgV2ViUGFnZVByb3h5OjpyZWNlaXZlZE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbihQb2xp
Y3lBY3Rpb24gcG9saWN5QWN0aW9uLCBBUEk6Ok5hdmlnYXRpb24qIG5hdmlnYXRpb24sIFByb2Nl
c3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgV2Vi
RnJhbWVQcm94eSYgZnJhbWUsIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBwb2xpY2llcywgUmVmPFBv
bGljeURlY2lzaW9uU2VuZGVyPiYmIHNlbmRlcikKK3ZvaWQgV2ViUGFnZVByb3h5OjpyZWNlaXZl
ZE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbihQb2xpY3lBY3Rpb24gcG9saWN5QWN0aW9uLCBBUEk6
Ok5hdmlnYXRpb24qIG5hdmlnYXRpb24sIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJv
Y2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgV2ViRnJhbWVQcm94eSYgZnJhbWUsIFJlZlB0cjxB
UEk6OldlYnNpdGVQb2xpY2llcz4mJiBwb2xpY2llcywgUmVmPFBvbGljeURlY2lzaW9uU2VuZGVy
PiYmIHNlbmRlcikKIHsKICAgICBSZWY8V2Vic2l0ZURhdGFTdG9yZT4gd2Vic2l0ZURhdGFTdG9y
ZSA9IG1fd2Vic2l0ZURhdGFTdG9yZS5jb3B5UmVmKCk7Ci0gICAgT3B0aW9uYWw8V2Vic2l0ZVBv
bGljaWVzRGF0YT4gZGF0YTsKICAgICBpZiAocG9saWNpZXMpIHsKLSAgICAgICAgZGF0YSA9IHBv
bGljaWVzLT5kYXRhKCk7CiAgICAgICAgIGlmIChwb2xpY2llcy0+d2Vic2l0ZURhdGFTdG9yZSgp
ICYmIHBvbGljaWVzLT53ZWJzaXRlRGF0YVN0b3JlKCkgIT0gd2Vic2l0ZURhdGFTdG9yZS5wdHIo
KSkgewogICAgICAgICAgICAgd2Vic2l0ZURhdGFTdG9yZSA9ICpwb2xpY2llcy0+d2Vic2l0ZURh
dGFTdG9yZSgpOwogICAgICAgICAgICAgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCA9IFBy
b2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQ6OlllczsKICAgICAgICAgfQorICAgICAgICBpZiAo
cG9saWNpZXMtPnVzZXJDb250ZW50Q29udHJvbGxlcigpICYmIHBvbGljaWVzLT51c2VyQ29udGVu
dENvbnRyb2xsZXIoKSAhPSBtX3VzZXJDb250ZW50Q29udHJvbGxlci5wdHIoKSkKKyAgICAgICAg
ICAgIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgPSBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5
Q2xpZW50OjpZZXM7CiAgICAgfQogCiAgICAgaWYgKG5hdmlnYXRpb24gJiYgIW5hdmlnYXRpb24t
PnVzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQoKSkgewotICAgICAgICBpZiAoIWRhdGEpCi0g
ICAgICAgICAgICBkYXRhID0gV2Vic2l0ZVBvbGljaWVzRGF0YSB7IH07Ci0gICAgICAgIGRhdGEt
PmNvbnRlbnRCbG9ja2Vyc0VuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKCFwb2xpY2llcykK
KyAgICAgICAgICAgIHBvbGljaWVzID0gQVBJOjpXZWJzaXRlUG9saWNpZXM6OmNyZWF0ZSgpOwor
ICAgICAgICBwb2xpY2llcy0+c2V0Q29udGVudEJsb2NrZXJzRW5hYmxlZChmYWxzZSk7CiAgICAg
fQogCiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKLSAgICBpZiAobmF2aWdhdGlvbiAm
JiAoIWRhdGEgfHwgZGF0YS0+ZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NTdGF0ZSA9
PSBXZWJDb3JlOjpEZXZpY2VPcmllbnRhdGlvbk9yTW90aW9uUGVybWlzc2lvblN0YXRlOjpQcm9t
cHQpKSB7CisgICAgaWYgKG5hdmlnYXRpb24gJiYgKCFwb2xpY2llcyB8fCBwb2xpY2llcy0+ZGV2
aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NTdGF0ZSgpID09IFdlYkNvcmU6OkRldmljZU9y
aWVudGF0aW9uT3JNb3Rpb25QZXJtaXNzaW9uU3RhdGU6OlByb21wdCkpIHsKICAgICAgICAgYXV0
byBkZXZpY2VPcmllbnRhdGlvblBlcm1pc3Npb24gPSB3ZWJzaXRlRGF0YVN0b3JlLT5kZXZpY2VP
cmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXIoKS5jYWNoZWREZXZpY2VPcmllbnRh
dGlvblBlcm1pc3Npb24oU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tVVJMKG5hdmlnYXRpb24tPmN1
cnJlbnRSZXF1ZXN0KCkudXJsKCkpKTsKICAgICAgICAgaWYgKGRldmljZU9yaWVudGF0aW9uUGVy
bWlzc2lvbiAhPSBXZWJDb3JlOjpEZXZpY2VPcmllbnRhdGlvbk9yTW90aW9uUGVybWlzc2lvblN0
YXRlOjpQcm9tcHQpIHsKLSAgICAgICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgICAgICBk
YXRhID0gV2Vic2l0ZVBvbGljaWVzRGF0YSB7IH07Ci0gICAgICAgICAgICBkYXRhLT5kZXZpY2VP
cmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc1N0YXRlID0gZGV2aWNlT3JpZW50YXRpb25QZXJtaXNz
aW9uOworICAgICAgICAgICAgaWYgKCFwb2xpY2llcykKKyAgICAgICAgICAgICAgICBwb2xpY2ll
cyA9IEFQSTo6V2Vic2l0ZVBvbGljaWVzOjpjcmVhdGUoKTsKKyAgICAgICAgICAgIHBvbGljaWVz
LT5zZXREZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc1N0YXRlKGRldmljZU9yaWVudGF0
aW9uUGVybWlzc2lvbik7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKQEAgLTMyMDYsNyArMzIw
Niw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZWNlaXZlZE5hdmlnYXRpb25Qb2wKICAgICAgICAg
cG9saWN5QWN0aW9uID0gUG9saWN5QWN0aW9uOjpEb3dubG9hZDsKIAogICAgIGlmIChwb2xpY3lB
Y3Rpb24gIT0gUG9saWN5QWN0aW9uOjpVc2UgfHwgIWZyYW1lLmlzTWFpbkZyYW1lKCkgfHwgIW5h
dmlnYXRpb24pIHsKLSAgICAgICAgcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihwb2xpY3lBY3Rpb24s
IG5hdmlnYXRpb24sIFdURk1vdmUoZGF0YSksIFdURk1vdmUoc2VuZGVyKSk7CisgICAgICAgIHJl
Y2VpdmVkUG9saWN5RGVjaXNpb24ocG9saWN5QWN0aW9uLCBuYXZpZ2F0aW9uLCBXVEZNb3ZlKHBv
bGljaWVzKSwgV1RGTW92ZShzZW5kZXIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MzIyMCwxMCArMzIyMCwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVjZWl2ZWROYXZpZ2F0aW9u
UG9sCiAgICAgfQogCiAgICAgcHJvY2VzcygpLnByb2Nlc3NQb29sKCkucHJvY2Vzc0Zvck5hdmln
YXRpb24oKnRoaXMsICpuYXZpZ2F0aW9uLCBzb3VyY2VQcm9jZXNzLmNvcHlSZWYoKSwgc291cmNl
VVJMLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBXVEZNb3ZlKHdlYnNpdGVEYXRhU3Rv
cmUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwb2xpY3lBY3Rpb24s
IG5hdmlnYXRpb24gPSBtYWtlUmVmKCpuYXZpZ2F0aW9uKSwgc291cmNlUHJvY2VzcyA9IHNvdXJj
ZVByb2Nlc3MuY29weVJlZigpLAotICAgICAgICBkYXRhID0gV1RGTW92ZShkYXRhKSwgc2VuZGVy
ID0gV1RGTW92ZShzZW5kZXIpLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50XSAoUmVmPFdl
YlByb2Nlc3NQcm94eT4mJiBwcm9jZXNzRm9yTmF2aWdhdGlvbiwgU3VzcGVuZGVkUGFnZVByb3h5
KiBkZXN0aW5hdGlvblN1c3BlbmRlZFBhZ2UsIGNvbnN0IFN0cmluZyYgcmVhc29uKSBtdXRhYmxl
IHsKKyAgICAgICAgcG9saWNpZXMgPSBXVEZNb3ZlKHBvbGljaWVzKSwgc2VuZGVyID0gV1RGTW92
ZShzZW5kZXIpLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50XSAoUmVmPFdlYlByb2Nlc3NQ
cm94eT4mJiBwcm9jZXNzRm9yTmF2aWdhdGlvbiwgU3VzcGVuZGVkUGFnZVByb3h5KiBkZXN0aW5h
dGlvblN1c3BlbmRlZFBhZ2UsIGNvbnN0IFN0cmluZyYgcmVhc29uKSBtdXRhYmxlIHsKICAgICAg
ICAgLy8gSWYgdGhlIG5hdmlnYXRpb24gaGFzIGJlZW4gZGVzdHJveWVkLCB0aGVuIG5vIG5lZWQg
dG8gcHJvY2VlZC4KICAgICAgICAgaWYgKGlzQ2xvc2VkKCkgfHwgIW5hdmlnYXRpb25TdGF0ZSgp
Lmhhc05hdmlnYXRpb24obmF2aWdhdGlvbi0+bmF2aWdhdGlvbklEKCkpKSB7Ci0gICAgICAgICAg
ICByZWNlaXZlZFBvbGljeURlY2lzaW9uKHBvbGljeUFjdGlvbiwgbmF2aWdhdGlvbi5wdHIoKSwg
V1RGTW92ZShkYXRhKSwgV1RGTW92ZShzZW5kZXIpKTsKKyAgICAgICAgICAgIHJlY2VpdmVkUG9s
aWN5RGVjaXNpb24ocG9saWN5QWN0aW9uLCBuYXZpZ2F0aW9uLnB0cigpLCBXVEZNb3ZlKHBvbGlj
aWVzKSwgV1RGTW92ZShzZW5kZXIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CkBAIC0zMjQ1LDE0ICszMjQ1LDE0IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZWNlaXZlZE5hdmln
YXRpb25Qb2wKICAgICAgICAgICAgIGlmIChzdXNwZW5kZWRQYWdlICYmIHN1c3BlbmRlZFBhZ2Ut
PnBhZ2VJc0Nsb3NlZE9yQ2xvc2luZygpKQogICAgICAgICAgICAgICAgIHN1c3BlbmRlZFBhZ2Ug
PSBudWxscHRyOwogCi0gICAgICAgICAgICBjb250aW51ZU5hdmlnYXRpb25Jbk5ld1Byb2Nlc3Mo
bmF2aWdhdGlvbiwgV1RGTW92ZShzdXNwZW5kZWRQYWdlKSwgV1RGTW92ZShwcm9jZXNzRm9yTmF2
aWdhdGlvbiksIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFdURk1vdmUoZGF0YSkpOwor
ICAgICAgICAgICAgY29udGludWVOYXZpZ2F0aW9uSW5OZXdQcm9jZXNzKG5hdmlnYXRpb24sIFdU
Rk1vdmUoc3VzcGVuZGVkUGFnZSksIFdURk1vdmUocHJvY2Vzc0Zvck5hdmlnYXRpb24pLCBwcm9j
ZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBzdGQ6OmV4Y2hhbmdlKHBvbGljaWVzLCBudWxscHRy
KSk7CiAgICAgICAgIH0KIAotICAgICAgICByZWNlaXZlZFBvbGljeURlY2lzaW9uKHBvbGljeUFj
dGlvbiwgbmF2aWdhdGlvbi5wdHIoKSwgc2hvdWxkUHJvY2Vzc1N3YXAgPyBXVEY6Om51bGxvcHQg
OiBXVEZNb3ZlKGRhdGEpLCBXVEZNb3ZlKHNlbmRlciksIHNob3VsZFByb2Nlc3NTd2FwID8gV2ls
bENvbnRpbnVlTG9hZEluTmV3UHJvY2Vzczo6WWVzIDogV2lsbENvbnRpbnVlTG9hZEluTmV3UHJv
Y2Vzczo6Tm8pOworICAgICAgICByZWNlaXZlZFBvbGljeURlY2lzaW9uKHBvbGljeUFjdGlvbiwg
bmF2aWdhdGlvbi5wdHIoKSwgc2hvdWxkUHJvY2Vzc1N3YXAgPyBudWxscHRyIDogV1RGTW92ZShw
b2xpY2llcyksIFdURk1vdmUoc2VuZGVyKSwgc2hvdWxkUHJvY2Vzc1N3YXAgPyBXaWxsQ29udGlu
dWVMb2FkSW5OZXdQcm9jZXNzOjpZZXMgOiBXaWxsQ29udGludWVMb2FkSW5OZXdQcm9jZXNzOjpO
byk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpyZWNlaXZlZFBvbGljeURlY2lz
aW9uKFBvbGljeUFjdGlvbiBhY3Rpb24sIEFQSTo6TmF2aWdhdGlvbiogbmF2aWdhdGlvbiwgT3B0
aW9uYWw8V2Vic2l0ZVBvbGljaWVzRGF0YT4mJiB3ZWJzaXRlUG9saWNpZXMsIFJlZjxQb2xpY3lE
ZWNpc2lvblNlbmRlcj4mJiBzZW5kZXIsIFdpbGxDb250aW51ZUxvYWRJbk5ld1Byb2Nlc3Mgd2ls
bENvbnRpbnVlTG9hZEluTmV3UHJvY2VzcykKK3ZvaWQgV2ViUGFnZVByb3h5OjpyZWNlaXZlZFBv
bGljeURlY2lzaW9uKFBvbGljeUFjdGlvbiBhY3Rpb24sIEFQSTo6TmF2aWdhdGlvbiogbmF2aWdh
dGlvbiwgUmVmUHRyPEFQSTo6V2Vic2l0ZVBvbGljaWVzPiYmIHdlYnNpdGVQb2xpY2llcywgUmVm
PFBvbGljeURlY2lzaW9uU2VuZGVyPiYmIHNlbmRlciwgV2lsbENvbnRpbnVlTG9hZEluTmV3UHJv
Y2VzcyB3aWxsQ29udGludWVMb2FkSW5OZXdQcm9jZXNzKQogewogICAgIGlmICghaGFzUnVubmlu
Z1Byb2Nlc3MoKSkgewogICAgICAgICBzZW5kZXItPnNlbmQoUG9saWN5RGVjaXNpb24geyBzZW5k
ZXItPmlkZW50aWZpZXIoKSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpLCBoYXNOYXZp
Z2F0ZWRBd2F5RnJvbUFwcEJvdW5kRG9tYWluKCksIFBvbGljeUFjdGlvbjo6SWdub3JlLCAwLCBE
b3dubG9hZElEKCksIFdURjo6bnVsbG9wdCB9KTsKQEAgLTMyNzcsOCArMzI3NywxMiBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6cmVjZWl2ZWRQb2xpY3lEZWNpc2lvCiAgICAgICAgIGhhbmRsZURvd25s
b2FkUmVxdWVzdChkb3dubG9hZCk7CiAgICAgICAgIG1fZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2VS
ZXF1ZXN0ID0geyB9OwogICAgIH0KKyAgICAKKyAgICBPcHRpb25hbDxXZWJzaXRlUG9saWNpZXNE
YXRhPiB3ZWJzaXRlUG9saWNpZXNEYXRhOworICAgIGlmICh3ZWJzaXRlUG9saWNpZXMpCisgICAg
ICAgIHdlYnNpdGVQb2xpY2llc0RhdGEgPSB3ZWJzaXRlUG9saWNpZXMtPmRhdGEoKTsKIAotICAg
IHNlbmRlci0+c2VuZChQb2xpY3lEZWNpc2lvbiB7IHNlbmRlci0+aWRlbnRpZmllcigpLCBpc05h
dmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKCksIGhhc05hdmlnYXRlZEF3YXlGcm9tQXBwQm91bmRE
b21haW4oKSwgYWN0aW9uLCBuYXZpZ2F0aW9uID8gbmF2aWdhdGlvbi0+bmF2aWdhdGlvbklEKCkg
OiAwLCBkb3dubG9hZElELCBXVEZNb3ZlKHdlYnNpdGVQb2xpY2llcykgfSk7CisgICAgc2VuZGVy
LT5zZW5kKFBvbGljeURlY2lzaW9uIHsgc2VuZGVyLT5pZGVudGlmaWVyKCksIGlzTmF2aWdhdGlu
Z1RvQXBwQm91bmREb21haW4oKSwgaGFzTmF2aWdhdGVkQXdheUZyb21BcHBCb3VuZERvbWFpbigp
LCBhY3Rpb24sIG5hdmlnYXRpb24gPyBuYXZpZ2F0aW9uLT5uYXZpZ2F0aW9uSUQoKSA6IDAsIGRv
d25sb2FkSUQsIFdURk1vdmUod2Vic2l0ZVBvbGljaWVzRGF0YSkgfSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZVByb3h5Ojpjb21taXRQcm92aXNpb25hbFBhZ2UoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQs
IEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8sIFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIHVp
bnQ2NF90IG5hdmlnYXRpb25JRCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBmcmFtZUhh
c0N1c3RvbUNvbnRlbnRQcm92aWRlciwgdWludDMyX3QgZnJhbWVMb2FkVHlwZSwgY29uc3QgV2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGJvb2wgdXNlZExlZ2FjeVRM
UywgYm9vbCBjb250YWluc1BsdWdpbkRvY3VtZW50LCBPcHRpb25hbDxXZWJDb3JlOjpIYXNJbnNl
Y3VyZUNvbnRlbnQ+IGZvcmNlZEhhc0luc2VjdXJlQ29udGVudCwgY29uc3QgVXNlckRhdGEmIHVz
ZXJEYXRhKQpAQCAtMzMyMCw3ICszMzI0LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNvbW1pdFBy
b3Zpc2lvbmFsUGFnZQogICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGlkQ29tbWl0UHJvdmlz
aW9uYWxQYWdlKG9sZFdlYlBhZ2VJRCwgbV93ZWJQYWdlSUQpOwogfQogCi12b2lkIFdlYlBhZ2VQ
cm94eTo6Y29udGludWVOYXZpZ2F0aW9uSW5OZXdQcm9jZXNzKEFQSTo6TmF2aWdhdGlvbiYgbmF2
aWdhdGlvbiwgc3RkOjp1bmlxdWVfcHRyPFN1c3BlbmRlZFBhZ2VQcm94eT4mJiBzdXNwZW5kZWRQ
YWdlLCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIG5ld1Byb2Nlc3MsIFByb2Nlc3NTd2FwUmVxdWVz
dGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgT3B0aW9uYWw8V2Vic2l0
ZVBvbGljaWVzRGF0YT4mJiB3ZWJzaXRlUG9saWNpZXMpCit2b2lkIFdlYlBhZ2VQcm94eTo6Y29u
dGludWVOYXZpZ2F0aW9uSW5OZXdQcm9jZXNzKEFQSTo6TmF2aWdhdGlvbiYgbmF2aWdhdGlvbiwg
c3RkOjp1bmlxdWVfcHRyPFN1c3BlbmRlZFBhZ2VQcm94eT4mJiBzdXNwZW5kZWRQYWdlLCBSZWY8
V2ViUHJvY2Vzc1Byb3h5PiYmIG5ld1Byb2Nlc3MsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGll
bnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPEFQSTo6V2Vic2l0ZVBvbGlj
aWVzPiYmIHdlYnNpdGVQb2xpY2llcykKIHsKICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKExv
YWRpbmcsICJjb250aW51ZU5hdmlnYXRpb25Jbk5ld1Byb2Nlc3M6IG5ld1Byb2Nlc3NQSUQgPSAl
aSwgaGFzU3VzcGVuZGVkUGFnZSA9ICVpIiwgbmV3UHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIo
KSwgISFzdXNwZW5kZWRQYWdlKTsKICAgICBMT0coTG9hZGluZywgIkNvbnRpbnVpbmcgbmF2aWdh
dGlvbiAlIiBQUkl1NjQgIiAnJXMnIGluIGEgbmV3IHdlYiBwcm9jZXNzIiwgbmF2aWdhdGlvbi5u
YXZpZ2F0aW9uSUQoKSwgbmF2aWdhdGlvbi5sb2dnaW5nU3RyaW5nKCkpOwpAQCAtMzMzMyw3ICsz
MzM3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNvbnRpbnVlTmF2aWdhdGlvbkluTgogICAgICAg
ICBtX3Byb3Zpc2lvbmFsUGFnZSA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgbV9wcm92aXNpb25h
bFBhZ2UgPSBtYWtlVW5pcXVlPFByb3Zpc2lvbmFsUGFnZVByb3h5PigqdGhpcywgV1RGTW92ZShu
ZXdQcm9jZXNzKSwgV1RGTW92ZShzdXNwZW5kZWRQYWdlKSwgbmF2aWdhdGlvbi5uYXZpZ2F0aW9u
SUQoKSwgbmF2aWdhdGlvbi5jdXJyZW50UmVxdWVzdElzUmVkaXJlY3QoKSwgbmF2aWdhdGlvbi5j
dXJyZW50UmVxdWVzdCgpLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50KTsKKyAgICBtX3By
b3Zpc2lvbmFsUGFnZSA9IG1ha2VVbmlxdWU8UHJvdmlzaW9uYWxQYWdlUHJveHk+KCp0aGlzLCBX
VEZNb3ZlKG5ld1Byb2Nlc3MpLCBXVEZNb3ZlKHN1c3BlbmRlZFBhZ2UpLCBuYXZpZ2F0aW9uLm5h
dmlnYXRpb25JRCgpLCBuYXZpZ2F0aW9uLmN1cnJlbnRSZXF1ZXN0SXNSZWRpcmVjdCgpLCBuYXZp
Z2F0aW9uLmN1cnJlbnRSZXF1ZXN0KCksIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIHdl
YnNpdGVQb2xpY2llcy5nZXQoKSk7CiAKICAgICBhdXRvIGNvbnRpbnVhdGlvbiA9IFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIG5hdmlnYXRpb24gPSBtYWtlUmVmKG5hdmln
YXRpb24pLCB3ZWJzaXRlUG9saWNpZXMgPSBXVEZNb3ZlKHdlYnNpdGVQb2xpY2llcyldKCkgbXV0
YWJsZSB7CiAgICAgICAgIGlmIChhdXRvKiBpdGVtID0gbmF2aWdhdGlvbi0+dGFyZ2V0SXRlbSgp
KSB7CkBAIC0zMzUyLDEyICszMzU2LDE2IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpjb250aW51ZU5h
dmlnYXRpb25Jbk4KICAgICAgICAgICAgIG1fcHJvdmlzaW9uYWxQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpTZXRDdXJyZW50SGlzdG9yeUl0ZW1Gb3JSZWF0dGFjaChtX2JhY2tGb3J3YXJk
TGlzdC0+Y3VycmVudEl0ZW0oKS0+aXRlbVN0YXRlKCkpKTsKICAgICAgICAgfQogCisgICAgICAg
IE9wdGlvbmFsPFdlYnNpdGVQb2xpY2llc0RhdGE+IHdlYnNpdGVQb2xpY2llc0RhdGE7CisgICAg
ICAgIGlmICh3ZWJzaXRlUG9saWNpZXMpCisgICAgICAgICAgICB3ZWJzaXRlUG9saWNpZXNEYXRh
ID0gd2Vic2l0ZVBvbGljaWVzLT5kYXRhKCk7CisKICAgICAgICAgLy8gRklYTUU6IFdvcmsgb3V0
IHRpbWluZyBvZiByZXNwb25kaW5nIHdpdGggdGhlIGxhc3QgcG9saWN5IGRlbGVnYXRlLCBldGMK
ICAgICAgICAgQVNTRVJUKCFuYXZpZ2F0aW9uLT5jdXJyZW50UmVxdWVzdCgpLmlzRW1wdHkoKSk7
CiAgICAgICAgIGlmIChhdXRvJiBzdWJzdGl0dXRlRGF0YSA9IG5hdmlnYXRpb24tPnN1YnN0aXR1
dGVEYXRhKCkpCi0gICAgICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+bG9hZERhdGEobmF2aWdh
dGlvbiwgeyBzdWJzdGl0dXRlRGF0YS0+Y29udGVudC5kYXRhKCksIHN1YnN0aXR1dGVEYXRhLT5j
b250ZW50LnNpemUoKSB9LCBzdWJzdGl0dXRlRGF0YS0+TUlNRVR5cGUsIHN1YnN0aXR1dGVEYXRh
LT5lbmNvZGluZywgc3Vic3RpdHV0ZURhdGEtPmJhc2VVUkwsIHN1YnN0aXR1dGVEYXRhLT51c2Vy
RGF0YS5nZXQoKSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpLCBoYXNOYXZpZ2F0ZWRB
d2F5RnJvbUFwcEJvdW5kRG9tYWluKCksIFdURk1vdmUod2Vic2l0ZVBvbGljaWVzKSk7CisgICAg
ICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+bG9hZERhdGEobmF2aWdhdGlvbiwgeyBzdWJzdGl0
dXRlRGF0YS0+Y29udGVudC5kYXRhKCksIHN1YnN0aXR1dGVEYXRhLT5jb250ZW50LnNpemUoKSB9
LCBzdWJzdGl0dXRlRGF0YS0+TUlNRVR5cGUsIHN1YnN0aXR1dGVEYXRhLT5lbmNvZGluZywgc3Vi
c3RpdHV0ZURhdGEtPmJhc2VVUkwsIHN1YnN0aXR1dGVEYXRhLT51c2VyRGF0YS5nZXQoKSwgaXNO
YXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpLCBoYXNOYXZpZ2F0ZWRBd2F5RnJvbUFwcEJvdW5k
RG9tYWluKCksIFdURk1vdmUod2Vic2l0ZVBvbGljaWVzRGF0YSkpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+bG9hZFJlcXVlc3QobmF2aWdhdGlvbiwgUmVz
b3VyY2VSZXF1ZXN0IHsgbmF2aWdhdGlvbi0+Y3VycmVudFJlcXVlc3QoKSB9LCBudWxscHRyLCBp
c05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKCksIGhhc05hdmlnYXRlZEF3YXlGcm9tQXBwQm91
bmREb21haW4oKSwgV1RGTW92ZSh3ZWJzaXRlUG9saWNpZXMpKTsKKyAgICAgICAgICAgIG1fcHJv
dmlzaW9uYWxQYWdlLT5sb2FkUmVxdWVzdChuYXZpZ2F0aW9uLCBSZXNvdXJjZVJlcXVlc3QgeyBu
YXZpZ2F0aW9uLT5jdXJyZW50UmVxdWVzdCgpIH0sIG51bGxwdHIsIGlzTmF2aWdhdGluZ1RvQXBw
Qm91bmREb21haW4oKSwgaGFzTmF2aWdhdGVkQXdheUZyb21BcHBCb3VuZERvbWFpbigpLCBXVEZN
b3ZlKHdlYnNpdGVQb2xpY2llc0RhdGEpKTsKICAgICB9OwogICAgIGlmIChtX2luc3BlY3RvckNv
bnRyb2xsZXItPnNob3VsZFBhdXNlTG9hZGluZygqbV9wcm92aXNpb25hbFBhZ2UpKQogICAgICAg
ICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldENvbnRpbnVlTG9hZGluZ0NhbGxiYWNrKCptX3By
b3Zpc2lvbmFsUGFnZSwgV1RGTW92ZShjb250aW51YXRpb24pKTsKQEAgLTUwOTQsNyArNTEwMiw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2EKIAogI2lmIEVOQUJM
RShDT05URU5UX0ZJTFRFUklORykKICAgICBpZiAoZnJhbWUuZGlkSGFuZGxlQ29udGVudEZpbHRl
clVuYmxvY2tOYXZpZ2F0aW9uKHJlcXVlc3QpKQotICAgICAgICByZXR1cm4gcmVjZWl2ZWRQb2xp
Y3lEZWNpc2lvbihQb2xpY3lBY3Rpb246Oklnbm9yZSwgbV9uYXZpZ2F0aW9uU3RhdGUtPm5hdmln
YXRpb24obmF2aWdhdGlvbklEKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHNlbmRlcikpOworICAg
ICAgICByZXR1cm4gcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihQb2xpY3lBY3Rpb246Oklnbm9yZSwg
bV9uYXZpZ2F0aW9uU3RhdGUtPm5hdmlnYXRpb24obmF2aWdhdGlvbklEKSwgbnVsbHB0ciwgV1RG
TW92ZShzZW5kZXIpKTsKICNlbmRpZgogCiAgICAgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVz
dWx0IHNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCA9IFNob3VsZEV4cGVjdFNhZmVCcm93
c2luZ1Jlc3VsdDo6WWVzOwpAQCAtNTEyMCw3ICs1MTI4LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OmRlY2lkZVBvbGljeUZvck5hdmlnYQogICAgICAgICAgICAgICAgIGlmIChwb2xpY2llcykKICAg
ICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbi0+c2V0RWZmZWN0aXZlQ29udGVudE1vZGUoZWZm
ZWN0aXZlQ29udGVudE1vZGVBZnRlckFkanVzdGluZ1BvbGljaWVzKCpwb2xpY2llcywgbmF2aWdh
dGlvbi0+Y3VycmVudFJlcXVlc3QoKSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVj
ZWl2ZWROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24ocG9saWN5QWN0aW9uLCBuYXZpZ2F0aW9uLmdl
dCgpLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBmcmFtZSwgcG9saWNpZXMuZ2V0KCks
IFdURk1vdmUoc2VuZGVyKSk7CisgICAgICAgICAgICByZWNlaXZlZE5hdmlnYXRpb25Qb2xpY3lE
ZWNpc2lvbihwb2xpY3lBY3Rpb24sIG5hdmlnYXRpb24uZ2V0KCksIHByb2Nlc3NTd2FwUmVxdWVz
dGVkQnlDbGllbnQsIGZyYW1lLCBXVEZNb3ZlKHBvbGljaWVzKSwgV1RGTW92ZShzZW5kZXIpKTsK
ICAgICAgICAgfTsKIAogICAgICAgICBpZiAoIW1fcGFnZUNsaWVudCkKQEAgLTUzMDEsNyArNTMw
OSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW4KICAgICAgICAg
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbihmcmFt
ZUlELCBsaXN0ZW5lcklELCBwb2xpY3lEZWNpc2lvbikpOwogICAgICAgICB9KTsKIAotICAgICAg
ICByZWNlaXZlZFBvbGljeURlY2lzaW9uKHBvbGljeUFjdGlvbiwgbnVsbHB0ciwgV1RGOjpudWxs
b3B0LCBXVEZNb3ZlKHNlbmRlcikpOworICAgICAgICByZWNlaXZlZFBvbGljeURlY2lzaW9uKHBv
bGljeUFjdGlvbiwgbnVsbHB0ciwgbnVsbHB0ciwgV1RGTW92ZShzZW5kZXIpKTsKICAgICB9LCBT
aG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQ6Ok5vLCBTaG91bGRFeHBlY3RBcHBCb3VuZERv
bWFpblJlc3VsdDo6Tm8pKTsKIAogICAgIGlmIChtX3BvbGljeUNsaWVudCkKQEAgLTUzNDksNyAr
NTM1Nyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JSZXNwb24KICAgICAg
ICAgICAgIHByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZFJlY2VpdmVQb2xpY3lE
ZWNpc2lvbihmcmFtZUlELCBsaXN0ZW5lcklELCBwb2xpY3lEZWNpc2lvbiksIHdlYlBhZ2VJRCk7
CiAgICAgICAgIH0pOwogICAgICAgICAKLSAgICAgICAgcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihw
b2xpY3lBY3Rpb24sIG5hdmlnYXRpb24uZ2V0KCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShzZW5k
ZXIpKTsKKyAgICAgICAgcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihwb2xpY3lBY3Rpb24sIG5hdmln
YXRpb24uZ2V0KCksIG51bGxwdHIsIFdURk1vdmUoc2VuZGVyKSk7CiAgICAgfSwgU2hvdWxkRXhw
ZWN0U2FmZUJyb3dzaW5nUmVzdWx0OjpObywgU2hvdWxkRXhwZWN0QXBwQm91bmREb21haW5SZXN1
bHQ6Ok5vKSk7CiAgICAgaWYgKG1fcG9saWN5Q2xpZW50KQogICAgICAgICBtX3BvbGljeUNsaWVu
dC0+ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UoKnRoaXMsICpmcmFtZSwgcmVzcG9uc2UsIHJlcXVl
c3QsIGNhblNob3dNSU1FVHlwZSwgV1RGTW92ZShsaXN0ZW5lciksIHByb2Nlc3MtPnRyYW5zZm9y
bUhhbmRsZXNUb09iamVjdHModXNlckRhdGEub2JqZWN0KCkpLmdldCgpKTsKQEAgLTc2NDUsNyAr
NzY1Myw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZXNldFN0YXRlQWZ0ZXJQcm9jZXMKICAgICBt
X3Byb2Nlc3MtPnByb2Nlc3NUZXJtaW5hdGVkKCk7CiB9CiAKLVdlYlBhZ2VDcmVhdGlvblBhcmFt
ZXRlcnMgV2ViUGFnZVByb3h5OjpjcmVhdGlvblBhcmFtZXRlcnMoV2ViUHJvY2Vzc1Byb3h5JiBw
cm9jZXNzLCBEcmF3aW5nQXJlYVByb3h5JiBkcmF3aW5nQXJlYSkKK1dlYlBhZ2VDcmVhdGlvblBh
cmFtZXRlcnMgV2ViUGFnZVByb3h5OjpjcmVhdGlvblBhcmFtZXRlcnMoV2ViUHJvY2Vzc1Byb3h5
JiBwcm9jZXNzLCBEcmF3aW5nQXJlYVByb3h5JiBkcmF3aW5nQXJlYSwgUmVmUHRyPEFQSTo6V2Vi
c2l0ZVBvbGljaWVzPiYmIHdlYnNpdGVQb2xpY2llcykKIHsKICAgICBXZWJQYWdlQ3JlYXRpb25Q
YXJhbWV0ZXJzIHBhcmFtZXRlcnM7CiAKQEAgLTc3NzIsNyArNzc4MCwxMSBAQCBXZWJQYWdlQ3Jl
YXRpb25QYXJhbWV0ZXJzIFdlYlBhZ2VQcm94eTo6CiAgICAgcGFyYW1ldGVycy5jcm9zc09yaWdp
bkFjY2Vzc0NvbnRyb2xDaGVja0VuYWJsZWQgPSBtX2NvbmZpZ3VyYXRpb24tPmNyb3NzT3JpZ2lu
QWNjZXNzQ29udHJvbENoZWNrRW5hYmxlZCgpOwogICAgIHBhcmFtZXRlcnMuaGFzUmVzb3VyY2VM
b2FkQ2xpZW50ID0gISFtX3Jlc291cmNlTG9hZENsaWVudDsKIAotICAgIHByb2Nlc3MuYWRkV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkobV91c2VyQ29udGVudENvbnRyb2xsZXIsIHBhcmFt
ZXRlcnMpOworICAgIHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8V2ViVXNlckNvbnRlbnRDb250cm9s
bGVyUHJveHk+IHVzZXJDb250ZW50Q29udHJvbGxlcihtX3VzZXJDb250ZW50Q29udHJvbGxlci5n
ZXQoKSk7CisgICAgaWYgKGF1dG8qIHVzZXJDb250ZW50Q29udHJvbGxlckZyb21XZWJzaXRlUG9s
aWNpZXMgPSB3ZWJzaXRlUG9saWNpZXMgPyB3ZWJzaXRlUG9saWNpZXMtPnVzZXJDb250ZW50Q29u
dHJvbGxlcigpIDogbnVsbHB0cikKKyAgICAgICAgdXNlckNvbnRlbnRDb250cm9sbGVyID0gKnVz
ZXJDb250ZW50Q29udHJvbGxlckZyb21XZWJzaXRlUG9saWNpZXM7CisgICAgcHJvY2Vzcy5hZGRX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSh1c2VyQ29udGVudENvbnRyb2xsZXIpOworICAg
IHBhcmFtZXRlcnMudXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVycyA9IHVzZXJDb250ZW50
Q29udHJvbGxlci5nZXQoKS5wYXJhbWV0ZXJzKCk7CiAKICAgICBwYXJhbWV0ZXJzLnNob3VsZENh
cHR1cmVBdWRpb0luVUlQcm9jZXNzID0gcHJlZmVyZW5jZXMoKS5jYXB0dXJlQXVkaW9JblVJUHJv
Y2Vzc0VuYWJsZWQoKTsKICAgICBwYXJhbWV0ZXJzLnNob3VsZENhcHR1cmVBdWRpb0luR1BVUHJv
Y2VzcyA9IHByZWZlcmVuY2VzKCkuY2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzRW5hYmxlZCgpOwpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDI1OTE2
MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTIzLDggKzExMjMsOCBAQCBwdWJsaWM6CiAKICAgICBjbGFzcyBQb2xpY3lEZWNp
c2lvblNlbmRlcjsKICAgICBlbnVtIGNsYXNzIFdpbGxDb250aW51ZUxvYWRJbk5ld1Byb2Nlc3Mg
OiBib29sIHsgTm8sIFllcyB9OwotICAgIHZvaWQgcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihXZWJD
b3JlOjpQb2xpY3lBY3Rpb24sIEFQSTo6TmF2aWdhdGlvbiosIE9wdGlvbmFsPFdlYnNpdGVQb2xp
Y2llc0RhdGE+JiYsIFJlZjxQb2xpY3lEZWNpc2lvblNlbmRlcj4mJiwgV2lsbENvbnRpbnVlTG9h
ZEluTmV3UHJvY2VzcyA9IFdpbGxDb250aW51ZUxvYWRJbk5ld1Byb2Nlc3M6Ok5vKTsKLSAgICB2
b2lkIHJlY2VpdmVkTmF2aWdhdGlvblBvbGljeURlY2lzaW9uKFdlYkNvcmU6OlBvbGljeUFjdGlv
biwgQVBJOjpOYXZpZ2F0aW9uKiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgV2ViRnJh
bWVQcm94eSYsIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwgUmVmPFBvbGljeURlY2lzaW9uU2VuZGVy
PiYmKTsKKyAgICB2b2lkIHJlY2VpdmVkUG9saWN5RGVjaXNpb24oV2ViQ29yZTo6UG9saWN5QWN0
aW9uLCBBUEk6Ok5hdmlnYXRpb24qLCBSZWZQdHI8QVBJOjpXZWJzaXRlUG9saWNpZXM+JiYsIFJl
ZjxQb2xpY3lEZWNpc2lvblNlbmRlcj4mJiwgV2lsbENvbnRpbnVlTG9hZEluTmV3UHJvY2VzcyA9
IFdpbGxDb250aW51ZUxvYWRJbk5ld1Byb2Nlc3M6Ok5vKTsKKyAgICB2b2lkIHJlY2VpdmVkTmF2
aWdhdGlvblBvbGljeURlY2lzaW9uKFdlYkNvcmU6OlBvbGljeUFjdGlvbiwgQVBJOjpOYXZpZ2F0
aW9uKiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgV2ViRnJhbWVQcm94eSYsIFJlZlB0
cjxBUEk6OldlYnNpdGVQb2xpY2llcz4mJiwgUmVmPFBvbGljeURlY2lzaW9uU2VuZGVyPiYmKTsK
IAogICAgIHZvaWQgYmFja0ZvcndhcmRSZW1vdmVkSXRlbShjb25zdCBXZWJDb3JlOjpCYWNrRm9y
d2FyZEl0ZW1JZGVudGlmaWVyJik7CiAKQEAgLTEyMzAsNyArMTIzMCw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGRpZENob29zZUZpbGVzRm9yT3BlblBhbmVsKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7
CiAgICAgdm9pZCBkaWRDYW5jZWxGb3JPcGVuUGFuZWwoKTsKIAotICAgIFdlYlBhZ2VDcmVhdGlv
blBhcmFtZXRlcnMgY3JlYXRpb25QYXJhbWV0ZXJzKFdlYlByb2Nlc3NQcm94eSYsIERyYXdpbmdB
cmVhUHJveHkmKTsKKyAgICBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzIGNyZWF0aW9uUGFyYW1l
dGVycyhXZWJQcm9jZXNzUHJveHkmLCBEcmF3aW5nQXJlYVByb3h5JiwgUmVmUHRyPEFQSTo6V2Vi
c2l0ZVBvbGljaWVzPiYmID0gbnVsbHB0cik7CiAKICAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVx
dWVzdChEb3dubG9hZFByb3h5Jik7CiAKQEAgLTIyMjcsNyArMjIyNyw3IEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIHJlcG9ydFBhZ2VMb2FkUmVzdWx0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJy
b3ImID0geyB9KTsKIAotICAgIHZvaWQgY29udGludWVOYXZpZ2F0aW9uSW5OZXdQcm9jZXNzKEFQ
STo6TmF2aWdhdGlvbiYsIHN0ZDo6dW5pcXVlX3B0cjxTdXNwZW5kZWRQYWdlUHJveHk+JiYsIFJl
ZjxXZWJQcm9jZXNzUHJveHk+JiYsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIE9wdGlv
bmFsPFdlYnNpdGVQb2xpY2llc0RhdGE+JiYpOworICAgIHZvaWQgY29udGludWVOYXZpZ2F0aW9u
SW5OZXdQcm9jZXNzKEFQSTo6TmF2aWdhdGlvbiYsIHN0ZDo6dW5pcXVlX3B0cjxTdXNwZW5kZWRQ
YWdlUHJveHk+JiYsIFJlZjxXZWJQcm9jZXNzUHJveHk+JiYsIFByb2Nlc3NTd2FwUmVxdWVzdGVk
QnlDbGllbnQsIFJlZlB0cjxBUEk6OldlYnNpdGVQb2xpY2llcz4mJik7CiAKICAgICB2b2lkIHNl
dE5lZWRzRm9udEF0dHJpYnV0ZXMoYm9vbCk7CiAgICAgdm9pZCB1cGRhdGVGb250QXR0cmlidXRl
c0FmdGVyRWRpdG9yU3RhdGVDaGFuZ2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMjU5MTYzKQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQyLDEw
ICs1NDIsMTAgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnJlbW92ZVZpc2l0ZWRMaW5rUwogICAg
IH0KIH0KIAotdm9pZCBXZWJQcm9jZXNzUHJveHk6OmFkZFdlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5KFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5JiBwcm94eSwgV2ViUGFnZUNyZWF0
aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3ZvaWQgV2ViUHJvY2Vzc1Byb3h5OjphZGRXZWJV
c2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSYg
cHJveHkpCiB7CiAgICAgbV93ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94aWVzLmFkZCgmcHJv
eHkpOwotICAgIHByb3h5LmFkZFByb2Nlc3MoKnRoaXMsIHBhcmFtZXRlcnMpOworICAgIHByb3h5
LmFkZFByb2Nlc3MoKnRoaXMpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGlkRGVzdHJv
eVdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdlYlVzZXJDb250ZW50Q29udHJvbGxlclBy
b3h5JiBwcm94eSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5oCShyZXZpc2lvbiAyNTkxNjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDcgKzE3Nyw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGFkZFZpc2l0ZWRMaW5rU3RvcmVVc2VyKFZpc2l0ZWRMaW5rU3RvcmUmLCBXZWJQYWdl
UHJveHlJZGVudGlmaWVyKTsKICAgICB2b2lkIHJlbW92ZVZpc2l0ZWRMaW5rU3RvcmVVc2VyKFZp
c2l0ZWRMaW5rU3RvcmUmLCBXZWJQYWdlUHJveHlJZGVudGlmaWVyKTsKIAotICAgIHZvaWQgYWRk
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkoV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHkmLCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisgICAgdm9pZCBhZGRXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSYpOwogICAg
IHZvaWQgZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5Jik7CiAKICAgICBSZWZQdHI8QVBJOjpVc2VySW5pdGlhdGVkQWN0
aW9uPiB1c2VySW5pdGlhdGVkQWN0aXZpdHkodWludDY0X3QpOwpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5jcHAJKHJldmlzaW9u
IDI1OTE2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9saWNp
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiQVBJV2Vic2l0ZVBvbGljaWVzLmgiCiAKKyNpbmNsdWRlICJXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIK
ICNpbmNsdWRlICJXZWJzaXRlUG9saWNpZXNEYXRhLmgiCiAKQEAgLTMzLDE2ICszNCw2IEBAIG5h
bWVzcGFjZSBBUEkgewogCiBXZWJzaXRlUG9saWNpZXM6OldlYnNpdGVQb2xpY2llcygpID0gZGVm
YXVsdDsKIAotV2Vic2l0ZVBvbGljaWVzOjpXZWJzaXRlUG9saWNpZXMoYm9vbCBjb250ZW50Qmxv
Y2tlcnNFbmFibGVkLCBPcHRpb25TZXQ8V2ViS2l0OjpXZWJzaXRlQXV0b3BsYXlRdWlyaz4gYWxs
b3dlZEF1dG9wbGF5UXVpcmtzLCBXZWJLaXQ6OldlYnNpdGVBdXRvcGxheVBvbGljeSBhdXRvcGxh
eVBvbGljeSwgVmVjdG9yPFdlYkNvcmU6OkhUVFBIZWFkZXJGaWVsZD4mJiBsZWdhY3lDdXN0b21I
ZWFkZXJGaWVsZHMsIFZlY3RvcjxXZWJDb3JlOjpDdXN0b21IZWFkZXJGaWVsZHM+JiYgY3VzdG9t
SGVhZGVyRmllbGRzLCBXZWJLaXQ6OldlYnNpdGVQb3BVcFBvbGljeSBwb3BVcFBvbGljeSwgUmVm
UHRyPFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZT4mJiB3ZWJzaXRlRGF0YVN0b3JlKQotICAgIDog
bV9jb250ZW50QmxvY2tlcnNFbmFibGVkKGNvbnRlbnRCbG9ja2Vyc0VuYWJsZWQpCi0gICAgLCBt
X2FsbG93ZWRBdXRvcGxheVF1aXJrcyhhbGxvd2VkQXV0b3BsYXlRdWlya3MpCi0gICAgLCBtX2F1
dG9wbGF5UG9saWN5KGF1dG9wbGF5UG9saWN5KQotICAgICwgbV9sZWdhY3lDdXN0b21IZWFkZXJG
aWVsZHMoV1RGTW92ZShsZWdhY3lDdXN0b21IZWFkZXJGaWVsZHMpKQotICAgICwgbV9jdXN0b21I
ZWFkZXJGaWVsZHMoV1RGTW92ZShjdXN0b21IZWFkZXJGaWVsZHMpKQotICAgICwgbV9wb3BVcFBv
bGljeShwb3BVcFBvbGljeSkKLSAgICAsIG1fd2Vic2l0ZURhdGFTdG9yZShXVEZNb3ZlKHdlYnNp
dGVEYXRhU3RvcmUpKQoteyB9Ci0KIFJlZjxXZWJzaXRlUG9saWNpZXM+IFdlYnNpdGVQb2xpY2ll
czo6Y29weSgpIGNvbnN0CiB7CiAgICAgYXV0byBwb2xpY2llcyA9IFdlYnNpdGVQb2xpY2llczo6
Y3JlYXRlKCk7CkBAIC02Myw2ICs1NCw4IEBAIFJlZjxXZWJzaXRlUG9saWNpZXM+IFdlYnNpdGVQ
b2xpY2llczo6Y28KICAgICBwb2xpY2llcy0+c2V0U2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRj
aFBvbGljeShtX3NpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xpY3kpOwogICAgIHBvbGlj
aWVzLT5zZXRMZWdhY3lPdmVyZmxvd1Njcm9sbGluZ1RvdWNoUG9saWN5KG1fbGVnYWN5T3ZlcmZs
b3dTY3JvbGxpbmdUb3VjaFBvbGljeSk7CiAgICAgcG9saWNpZXMtPnNldEFsbG93Q29udGVudENo
YW5nZU9ic2VydmVyUXVpcmsobV9hbGxvd0NvbnRlbnRDaGFuZ2VPYnNlcnZlclF1aXJrKTsKKyAg
ICBwb2xpY2llcy0+c2V0V2Vic2l0ZURhdGFTdG9yZShtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCkp
OworICAgIHBvbGljaWVzLT5zZXRVc2VyQ29udGVudENvbnRyb2xsZXIobV91c2VyQ29udGVudENv
bnRyb2xsZXIuZ2V0KCkpOwogICAgIAogICAgIFZlY3RvcjxXZWJDb3JlOjpIVFRQSGVhZGVyRmll
bGQ+IGxlZ2FjeUN1c3RvbUhlYWRlckZpZWxkczsKICAgICBsZWdhY3lDdXN0b21IZWFkZXJGaWVs
ZHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2xlZ2FjeUN1c3RvbUhlYWRlckZpZWxkcy5zaXpl
KCkpOwpAQCAtODksNiArODIsMTEgQEAgdm9pZCBXZWJzaXRlUG9saWNpZXM6OnNldFdlYnNpdGVE
YXRhU3RvcgogICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdURk1vdmUod2Vic2l0ZURhdGFTdG9y
ZSk7CiB9CiAKK3ZvaWQgV2Vic2l0ZVBvbGljaWVzOjpzZXRVc2VyQ29udGVudENvbnRyb2xsZXIo
UmVmUHRyPFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk+JiYgY29udHJvbGxl
cikKK3sKKyAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlciA9IFdURk1vdmUoY29udHJvbGxlcik7
Cit9CisKIFdlYktpdDo6V2Vic2l0ZVBvbGljaWVzRGF0YSBXZWJzaXRlUG9saWNpZXM6OmRhdGEo
KQogewogICAgIGJvb2wgaGFzTGVnYWN5Q3VzdG9tSGVhZGVyRmllbGRzID0gbGVnYWN5Q3VzdG9t
SGVhZGVyRmllbGRzKCkuc2l6ZSgpOwpAQCAtMTA4LDcgKzEwNiw2IEBAIFdlYktpdDo6V2Vic2l0
ZVBvbGljaWVzRGF0YSBXZWJzaXRlUG9saWMKICNlbmRpZgogICAgICAgICBXVEZNb3ZlKGN1c3Rv
bUhlYWRlckZpZWxkcyksCiAgICAgICAgIHBvcFVwUG9saWN5KCksCi0gICAgICAgIG1fd2Vic2l0
ZURhdGFTdG9yZSA/IE9wdGlvbmFsPFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+
IHsgbV93ZWJzaXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkgfSA6IFdURjo6bnVsbG9wdCwKICAg
ICAgICAgbV9jdXN0b21Vc2VyQWdlbnQsCiAgICAgICAgIG1fY3VzdG9tVXNlckFnZW50QXNTaXRl
U3BlY2lmaWNRdWlya3MsCiAgICAgICAgIG1fY3VzdG9tTmF2aWdhdG9yUGxhdGZvcm0sCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZVBvbGljaWVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5o
CShyZXZpc2lvbiAyNTkxNjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vi
c2l0ZVBvbGljaWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1
ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1ZGUgIldlYkNvbnRlbnRNb2RlLmgiCisjaW5jbHVkZSAi
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuaCIKICNpbmNsdWRlICJXZWJzaXRlQXV0b3Bs
YXlQb2xpY3kuaCIKICNpbmNsdWRlICJXZWJzaXRlQXV0b3BsYXlRdWlyay5oIgogI2luY2x1ZGUg
IldlYnNpdGVMZWdhY3lPdmVyZmxvd1Njcm9sbGluZ1RvdWNoUG9saWN5LmgiCkBAIC01Niw2ICs1
Nyw4IEBAIHB1YmxpYzoKIAogICAgIFJlZjxXZWJzaXRlUG9saWNpZXM+IGNvcHkoKSBjb25zdDsK
IAorICAgIFdlYktpdDo6V2Vic2l0ZVBvbGljaWVzRGF0YSBkYXRhKCk7CisKICAgICBib29sIGNv
bnRlbnRCbG9ja2Vyc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRCbG9ja2Vyc0Vu
YWJsZWQ7IH0KICAgICB2b2lkIHNldENvbnRlbnRCbG9ja2Vyc0VuYWJsZWQoYm9vbCBlbmFibGVk
KSB7IG1fY29udGVudEJsb2NrZXJzRW5hYmxlZCA9IGVuYWJsZWQ7IH0KICAgICAKQEAgLTgxLDgg
Kzg0LDkgQEAgcHVibGljOgogCiAgICAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlKiB3ZWJzaXRl
RGF0YVN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOyB9CiAg
ICAgdm9pZCBzZXRXZWJzaXRlRGF0YVN0b3JlKFJlZlB0cjxXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU+JiYpOwotCi0gICAgV2ViS2l0OjpXZWJzaXRlUG9saWNpZXNEYXRhIGRhdGEoKTsKKyAgICAK
KyAgICBXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KiB1c2VyQ29udGVudENv
bnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX3VzZXJDb250ZW50Q29udHJvbGxlci5nZXQoKTsg
fQorICAgIHZvaWQgc2V0VXNlckNvbnRlbnRDb250cm9sbGVyKFJlZlB0cjxXZWJLaXQ6OldlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5PiYmKTsKIAogICAgIHZvaWQgc2V0Q3VzdG9tVXNlckFn
ZW50KGNvbnN0IFdURjo6U3RyaW5nJiBjdXN0b21Vc2VyQWdlbnQpIHsgbV9jdXN0b21Vc2VyQWdl
bnQgPSBjdXN0b21Vc2VyQWdlbnQ7IH0KICAgICBjb25zdCBXVEY6OlN0cmluZyYgY3VzdG9tVXNl
ckFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9jdXN0b21Vc2VyQWdlbnQ7IH0KQEAgLTEyMSw4ICsx
MjUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbGxvd3NDb250ZW50SmF2YVNjcmlwdChXZWJD
b3JlOjpBbGxvd3NDb250ZW50SmF2YVNjcmlwdCBhbGxvd3MpIHsgbV9hbGxvd3NDb250ZW50SmF2
YVNjcmlwdCA9IGFsbG93czsgfQogCiBwcml2YXRlOgotICAgIFdlYnNpdGVQb2xpY2llcyhib29s
IGNvbnRlbnRCbG9ja2Vyc0VuYWJsZWQsIE9wdGlvblNldDxXZWJLaXQ6OldlYnNpdGVBdXRvcGxh
eVF1aXJrPiwgV2ViS2l0OjpXZWJzaXRlQXV0b3BsYXlQb2xpY3ksIFZlY3RvcjxXZWJDb3JlOjpI
VFRQSGVhZGVyRmllbGQ+JiYsIFZlY3RvcjxXZWJDb3JlOjpDdXN0b21IZWFkZXJGaWVsZHM+JiYs
IFdlYktpdDo6V2Vic2l0ZVBvcFVwUG9saWN5LCBSZWZQdHI8V2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlPiYmKTsKLQogICAgIGJvb2wgbV9jb250ZW50QmxvY2tlcnNFbmFibGVkIHsgdHJ1ZSB9Owog
ICAgIE9wdGlvblNldDxXZWJLaXQ6OldlYnNpdGVBdXRvcGxheVF1aXJrPiBtX2FsbG93ZWRBdXRv
cGxheVF1aXJrczsKICAgICBXZWJLaXQ6OldlYnNpdGVBdXRvcGxheVBvbGljeSBtX2F1dG9wbGF5
UG9saWN5IHsgV2ViS2l0OjpXZWJzaXRlQXV0b3BsYXlQb2xpY3k6OkRlZmF1bHQgfTsKQEAgLTEz
Myw2ICsxMzUsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxXZWJDb3JlOjpDdXN0b21IZWFkZXJG
aWVsZHM+IG1fY3VzdG9tSGVhZGVyRmllbGRzOwogICAgIFdlYktpdDo6V2Vic2l0ZVBvcFVwUG9s
aWN5IG1fcG9wVXBQb2xpY3kgeyBXZWJLaXQ6OldlYnNpdGVQb3BVcFBvbGljeTo6RGVmYXVsdCB9
OwogICAgIFJlZlB0cjxXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU+IG1fd2Vic2l0ZURhdGFTdG9y
ZTsKKyAgICBSZWZQdHI8V2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eT4gbV91
c2VyQ29udGVudENvbnRyb2xsZXI7CiAgICAgV1RGOjpTdHJpbmcgbV9jdXN0b21Vc2VyQWdlbnQ7
CiAgICAgV1RGOjpTdHJpbmcgbV9jdXN0b21Vc2VyQWdlbnRBc1NpdGVTcGVjaWZpY1F1aXJrczsK
ICAgICBXVEY6OlN0cmluZyBtX2N1c3RvbU5hdmlnYXRvclBsYXRmb3JtOwpJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCShyZXZpc2lvbiAyNTkxNjMpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNjcsOCArMzY3LDkgQEAgYm9vbCBXS1BhZ2VXaWxsSGFuZGxlSG9yaXpvbnRhbFNjcm9sbEV2
ZQogCiB2b2lkIFdLUGFnZVVwZGF0ZVdlYnNpdGVQb2xpY2llcyhXS1BhZ2VSZWYgcGFnZVJlZiwg
V0tXZWJzaXRlUG9saWNpZXNSZWYgd2Vic2l0ZVBvbGljaWVzUmVmKQogeworICAgIFJFTEVBU0Vf
QVNTRVJUX1dJVEhfTUVTU0FHRSghdG9JbXBsKHdlYnNpdGVQb2xpY2llc1JlZiktPndlYnNpdGVE
YXRhU3RvcmUoKSwgIlNldHRpbmcgV2Vic2l0ZVBvbGljaWVzLndlYnNpdGVEYXRhU3RvcmUgaXMg
b25seSBzdXBwb3J0ZWQgZHVyaW5nIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclVzZVdpdGhQb2xpY2ll
cygpLiIpOworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRSghdG9JbXBsKHdlYnNpdGVQ
b2xpY2llc1JlZiktPnVzZXJDb250ZW50Q29udHJvbGxlcigpLCAiU2V0dGluZyBXZWJzaXRlUG9s
aWNpZXMudXNlckNvbnRlbnRDb250cm9sbGVyIGlzIG9ubHkgc3VwcG9ydGVkIGR1cmluZyBXS0Zy
YW1lUG9saWN5TGlzdGVuZXJVc2VXaXRoUG9saWNpZXMoKS4iKTsKICAgICBhdXRvIGRhdGEgPSB0
b0ltcGwod2Vic2l0ZVBvbGljaWVzUmVmKS0+ZGF0YSgpOwotICAgIFJFTEVBU0VfQVNTRVJUX1dJ
VEhfTUVTU0FHRSghZGF0YS53ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycywgIlNldHRpbmcgV2Vi
c2l0ZVBvbGljaWVzLldlYnNpdGVEYXRhU3RvcmUgaXMgb25seSBzdXBwb3J0ZWQgZHVyaW5nIFdL
RnJhbWVQb2xpY3lMaXN0ZW5lclVzZVdpdGhQb2xpY2llcygpLiIpOwogICAgIHRvSW1wbChwYWdl
UmVmKS0+dXBkYXRlV2Vic2l0ZVBvbGljaWVzKFdURk1vdmUoZGF0YSkpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0JKHJldmlz
aW9uIDI1OTE2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTIzMTYsOSArMjMxNiwxMSBAQCAtICh2b2lkKV91cGRh
dGVXZWJzaXRlUG9saWNpZXM6KF9XS1dlYnNpCiAKIC0gKHZvaWQpX3VwZGF0ZVdlYnBhZ2VQcmVm
ZXJlbmNlczooV0tXZWJwYWdlUHJlZmVyZW5jZXMgKil3ZWJwYWdlUHJlZmVyZW5jZXMKIHsKLSAg
ICBhdXRvIGRhdGEgPSB3ZWJwYWdlUHJlZmVyZW5jZXMtPl93ZWJzaXRlUG9saWNpZXMtPmRhdGEo
KTsKLSAgICBpZiAoZGF0YS53ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycykKKyAgICBpZiAod2Vi
cGFnZVByZWZlcmVuY2VzLl93ZWJzaXRlRGF0YVN0b3JlKQogICAgICAgICBbTlNFeGNlcHRpb24g
cmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiVXBkYXRpbmcgV0tXZWJz
aXRlRGF0YVN0b3JlIGlzIG9ubHkgc3VwcG9ydGVkIGR1cmluZyBkZWNpZGVQb2xpY3lGb3JOYXZp
Z2F0aW9uQWN0aW9uLiJdOworICAgIGlmICh3ZWJwYWdlUHJlZmVyZW5jZXMuX3VzZXJDb250ZW50
Q29udHJvbGxlcikKKyAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50
RXhjZXB0aW9uIGZvcm1hdDpAIlVwZGF0aW5nIFdLVXNlckNvbnRlbnRDb250cm9sbGVyIGlzIG9u
bHkgc3VwcG9ydGVkIGR1cmluZyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uLiJdOwor
ICAgIGF1dG8gZGF0YSA9IHdlYnBhZ2VQcmVmZXJlbmNlcy0+X3dlYnNpdGVQb2xpY2llcy0+ZGF0
YSgpOwogICAgIF9wYWdlLT51cGRhdGVXZWJzaXRlUG9saWNpZXMoV1RGTW92ZShkYXRhKSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVm
ZXJlbmNlcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJwYWdlUHJlZmVyZW5jZXMubW0JKHJldmlzaW9uIDI1OTE2MykKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJlbmNlcy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2ltcG9ydCAiV0tXZWJwYWdlUHJlZmVyZW5jZXMu
aCIKIAogI2ltcG9ydCAiQVBJQ3VzdG9tSGVhZGVyRmllbGRzLmgiCisjaW1wb3J0ICJXS1VzZXJD
b250ZW50Q29udHJvbGxlckludGVybmFsLmgiCiAjaW1wb3J0ICJXS1dlYnBhZ2VQcmVmZXJlbmNl
c0ludGVybmFsLmgiCiAjaW1wb3J0ICJXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oIgogI2lt
cG9ydCAiV2ViQ29udGVudE1vZGUuaCIKQEAgLTI3Niw2ICsyNzcsMTYgQEAgLSAodm9pZClfc2V0
V2Vic2l0ZURhdGFTdG9yZTooV0tXZWJzaXRlRAogICAgIF93ZWJzaXRlUG9saWNpZXMtPnNldFdl
YnNpdGVEYXRhU3RvcmUod2Vic2l0ZURhdGFTdG9yZS0+X3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCkp
OwogfQogCistIChXS1VzZXJDb250ZW50Q29udHJvbGxlciAqKV91c2VyQ29udGVudENvbnRyb2xs
ZXIKK3sKKyAgICByZXR1cm4gd3JhcHBlcihfd2Vic2l0ZVBvbGljaWVzLT51c2VyQ29udGVudENv
bnRyb2xsZXIoKSk7Cit9CisKKy0gKHZvaWQpX3NldFVzZXJDb250ZW50Q29udHJvbGxlcjooV0tV
c2VyQ29udGVudENvbnRyb2xsZXIgKil1c2VyQ29udGVudENvbnRyb2xsZXIKK3sKKyAgICBfd2Vi
c2l0ZVBvbGljaWVzLT5zZXRVc2VyQ29udGVudENvbnRyb2xsZXIodXNlckNvbnRlbnRDb250cm9s
bGVyLT5fdXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuZ2V0KCkpOworfQorCiAtICh2b2lkKV9z
ZXRDdXN0b21Vc2VyQWdlbnQ6KE5TU3RyaW5nICopY3VzdG9tVXNlckFnZW50CiB7CiAgICAgX3dl
YnNpdGVQb2xpY2llcy0+c2V0Q3VzdG9tVXNlckFnZW50KGN1c3RvbVVzZXJBZ2VudCk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXNQ
cml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2VicGFnZVByZWZlcmVuY2VzUHJpdmF0ZS5oCShyZXZpc2lvbiAyNTkxNjMpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXNQcml2YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2ltcG9ydCA8V2ViS2l0L1dL
Rm91bmRhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2VicGFnZVByZWZlcmVuY2VzLmg+Ci0j
aW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlLmg+CiAKIHR5cGVkZWYgTlNfRU5VTShO
U0ludGVnZXIsIF9XS1dlYnNpdGVBdXRvcGxheVBvbGljeSkgewogICAgIF9XS1dlYnNpdGVBdXRv
cGxheVBvbGljeURlZmF1bHQsCkBAIC01Niw2ICs1NSw4IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhO
U1VJbnRlZ2VyLCBfV0tXZWJzaXQKIH0gV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlv
cygxMi4wKSk7CiAKIEBjbGFzcyBfV0tDdXN0b21IZWFkZXJGaWVsZHM7CitAY2xhc3MgV0tVc2Vy
Q29udGVudENvbnRyb2xsZXI7CitAY2xhc3MgV0tXZWJzaXRlRGF0YVN0b3JlOwogCiBAaW50ZXJm
YWNlIFdLV2VicGFnZVByZWZlcmVuY2VzIChXS1ByaXZhdGUpCiAKQEAgLTY1LDYgKzY2LDcgQEAg
dHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1dlYnNpdAogQHByb3BlcnR5IChub25h
dG9taWMsIGNvcHksIHNldHRlcj1fc2V0Q3VzdG9tSGVhZGVyRmllbGRzOikgTlNBcnJheTxfV0tD
dXN0b21IZWFkZXJGaWVsZHMgKj4gKl9jdXN0b21IZWFkZXJGaWVsZHM7CiBAcHJvcGVydHkgKG5v
bmF0b21pYywgc2V0dGVyPV9zZXRQb3BVcFBvbGljeTopIF9XS1dlYnNpdGVQb3BVcFBvbGljeSBf
cG9wVXBQb2xpY3k7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nLCBzZXR0ZXI9X3NldFdl
YnNpdGVEYXRhU3RvcmU6KSBXS1dlYnNpdGVEYXRhU3RvcmUgKl93ZWJzaXRlRGF0YVN0b3JlOwor
QHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZywgc2V0dGVyPV9zZXRVc2VyQ29udGVudENvbnRy
b2xsZXI6KSBXS1VzZXJDb250ZW50Q29udHJvbGxlciAqX3VzZXJDb250ZW50Q29udHJvbGxlciBX
S19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogQHBy
b3BlcnR5IChub25hdG9taWMsIGNvcHksIHNldHRlcj1fc2V0Q3VzdG9tVXNlckFnZW50OikgTlNT
dHJpbmcgKl9jdXN0b21Vc2VyQWdlbnQ7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgc2V0
dGVyPV9zZXRDdXN0b21Vc2VyQWdlbnRBc1NpdGVTcGVjaWZpY1F1aXJrczopIE5TU3RyaW5nICpf
Y3VzdG9tVXNlckFnZW50QXNTaXRlU3BlY2lmaWNRdWlya3M7CiBAcHJvcGVydHkgKG5vbmF0b21p
YywgY29weSwgc2V0dGVyPV9zZXRDdXN0b21OYXZpZ2F0b3JQbGF0Zm9ybTopIE5TU3RyaW5nICpf
Y3VzdG9tTmF2aWdhdG9yUGxhdGZvcm07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCShyZXZpc2lvbiAyNTkxNjMpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTYwMiwxMCArNjAyLDEwIEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VO
RAogICAgICAgICAgICAgYXBpV2Vic2l0ZVBvbGljaWVzID0gZGVmYXVsdFdlYnNpdGVQb2xpY2ll
czsKIAogICAgICAgICBpZiAoYXBpV2Vic2l0ZVBvbGljaWVzKSB7Ci0gICAgICAgICAgICBpZiAo
YXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IGFwaVdlYnNpdGVQb2xpY2llcy0+d2Vic2l0ZURhdGFT
dG9yZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN1YmZyYW1lTmF2aWdhdGlvbikKLSAgICAg
ICAgICAgICAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0
aW9uIGZvcm1hdDpAIldLV2VicGFnZVByZWZlcmVuY2VzLl93ZWJzaXRlRGF0YVN0b3JlIG11c3Qg
YmUgbmlsIGZvciBzdWJmcmFtZSBuYXZpZ2F0aW9ucy4iXTsKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChhcGlXZWJzaXRlUG9saWNpZXMtPndlYnNpdGVEYXRhU3RvcmUoKSAmJiBzdWJm
cmFtZU5hdmlnYXRpb24pCisgICAgICAgICAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52
YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIldLV2VicGFnZVByZWZlcmVuY2VzLl93ZWJz
aXRlRGF0YVN0b3JlIG11c3QgYmUgbmlsIGZvciBzdWJmcmFtZSBuYXZpZ2F0aW9ucy4iXTsKKyAg
ICAgICAgICAgIGlmIChhcGlXZWJzaXRlUG9saWNpZXMtPnVzZXJDb250ZW50Q29udHJvbGxlcigp
ICYmIHN1YmZyYW1lTmF2aWdhdGlvbikKKyAgICAgICAgICAgICAgICBbTlNFeGNlcHRpb24gcmFp
c2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiV0tXZWJwYWdlUHJlZmVyZW5j
ZXMuX3VzZXJDb250ZW50Q29udHJvbGxlciBtdXN0IGJlIG5pbCBmb3Igc3ViZnJhbWUgbmF2aWdh
dGlvbnMuIl07CiAgICAgICAgICAgICBpZiAoIWFwaVdlYnNpdGVQb2xpY2llcy0+Y3VzdG9tVXNl
ckFnZW50KCkuaXNOdWxsKCkgJiYgc3ViZnJhbWVOYXZpZ2F0aW9uKQogICAgICAgICAgICAgICAg
IFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJX
S1dlYnBhZ2VQcmVmZXJlbmNlcy5fY3VzdG9tVXNlckFnZW50IG11c3QgYmUgbmlsIGZvciBzdWJm
cmFtZSBuYXZpZ2F0aW9ucy4iXTsKICAgICAgICAgICAgIGlmICghYXBpV2Vic2l0ZVBvbGljaWVz
LT5jdXN0b21OYXZpZ2F0b3JQbGF0Zm9ybSgpLmlzTnVsbCgpICYmIHN1YmZyYW1lTmF2aWdhdGlv
bikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAJKHJldmlz
aW9uIDI1OTE2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsMzcgKzk2
LDM5IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW8KIH0KICNlbmRp
ZgogCi12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRQcm9jZXNzKFdlYlBy
b2Nlc3NQcm94eSYgd2ViUHJvY2Vzc1Byb3h5LCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBw
YXJhbWV0ZXJzKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6YWRkUHJvY2Vz
cyhXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94eSkKIHsKICAgICBBU1NFUlQoIW1fcHJv
Y2Vzc2VzLmhhc051bGxSZWZlcmVuY2VzKCkpOwogCiAgICAgaWYgKG1fcHJvY2Vzc2VzLmFkZCh3
ZWJQcm9jZXNzUHJveHkpLmlzTmV3RW50cnkpCiAgICAgICAgIHdlYlByb2Nlc3NQcm94eS5hZGRN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGlkZW50aWZpZXIoKSwgKnRoaXMpOworfQorCitVc2VyQ29u
dGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Ojpw
YXJhbWV0ZXJzKCkgY29uc3QKK3sKKyAgICBVc2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJz
IHBhcmFtZXRlcnM7CiAKLSAgICBBU1NFUlQocGFyYW1ldGVycy51c2VyQ29udGVudFdvcmxkcy5p
c0VtcHR5KCkpOwogICAgIGZvciAoY29uc3QgYXV0byYgd29ybGQgOiBtX2NvbnRlbnRXb3JsZHMp
CiAgICAgICAgIHBhcmFtZXRlcnMudXNlckNvbnRlbnRXb3JsZHMuYXBwZW5kKHdvcmxkLmtleS0+
d29ybGREYXRhKCkpOwogCi0gICAgQVNTRVJUKHBhcmFtZXRlcnMudXNlclNjcmlwdHMuaXNFbXB0
eSgpKTsKICAgICBmb3IgKGF1dG8gdXNlclNjcmlwdCA6IG1fdXNlclNjcmlwdHMtPmVsZW1lbnRz
T2ZUeXBlPEFQSTo6VXNlclNjcmlwdD4oKSkKICAgICAgICAgcGFyYW1ldGVycy51c2VyU2NyaXB0
cy5hcHBlbmQoeyB1c2VyU2NyaXB0LT5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQtPmNvbnRlbnRX
b3JsZCgpLmlkZW50aWZpZXIoKSwgdXNlclNjcmlwdC0+dXNlclNjcmlwdCgpIH0pOwogCi0gICAg
QVNTRVJUKHBhcmFtZXRlcnMudXNlclN0eWxlU2hlZXRzLmlzRW1wdHkoKSk7CiAgICAgZm9yIChh
dXRvIHVzZXJTdHlsZVNoZWV0IDogbV91c2VyU3R5bGVTaGVldHMtPmVsZW1lbnRzT2ZUeXBlPEFQ
STo6VXNlclN0eWxlU2hlZXQ+KCkpCiAgICAgICAgIHBhcmFtZXRlcnMudXNlclN0eWxlU2hlZXRz
LmFwcGVuZCh7IHVzZXJTdHlsZVNoZWV0LT5pZGVudGlmaWVyKCksIHVzZXJTdHlsZVNoZWV0LT5j
b250ZW50V29ybGQoKS5pZGVudGlmaWVyKCksIHVzZXJTdHlsZVNoZWV0LT51c2VyU3R5bGVTaGVl
dCgpIH0pOwogCi0gICAgQVNTRVJUKHBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXJzLmlzRW1wdHko
KSk7CiAgICAgZm9yIChhdXRvJiBoYW5kbGVyIDogbV9zY3JpcHRNZXNzYWdlSGFuZGxlcnMudmFs
dWVzKCkpCiAgICAgICAgIHBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXJzLmFwcGVuZCh7IGhhbmRs
ZXItPmlkZW50aWZpZXIoKSwgaGFuZGxlci0+d29ybGQoKS5pZGVudGlmaWVyKCksIGhhbmRsZXIt
Pm5hbWUoKSB9KTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgQVNTRVJU
KHBhcmFtZXRlcnMuY29udGVudFJ1bGVMaXN0cy5pc0VtcHR5KCkpOwogICAgIHBhcmFtZXRlcnMu
Y29udGVudFJ1bGVMaXN0cyA9IGNvbnRlbnRSdWxlTGlzdERhdGEoKTsKICNlbmRpZgorICAgIAor
ICAgIHJldHVybiBwYXJhbWV0ZXJzOwogfQogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKLVZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERh
dGE+PiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6Y29udGVudFJ1bGVMaXN0RGF0YSgp
CitWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRh
Pj4gV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmNvbnRlbnRSdWxlTGlzdERhdGEoKSBj
b25zdAogewogICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBXZWJDb21waWxlZENvbnRlbnRS
dWxlTGlzdERhdGE+PiBkYXRhOwogICAgIGRhdGEucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2Nv
bnRlbnRSdWxlTGlzdHMuc2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Vz
ZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyUHJveHkuaAkocmV2aXNpb24gMjU5MTYzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
VXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuaAkod29ya2luZyBjb3B5
KQpAQCAtNjIsNiArNjIsNyBAQCBjbGFzcyBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcjsKIHN0cnVj
dCBGcmFtZUluZm9EYXRhOwogY2xhc3MgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhOwog
c3RydWN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM7CitzdHJ1Y3QgVXNlckNvbnRlbnRDb250
cm9sbGVyUGFyYW1ldGVyczsKIGVudW0gY2xhc3MgSW5qZWN0VXNlclNjcmlwdEltbWVkaWF0ZWx5
IDogYm9vbDsKIAogY2xhc3MgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkgOiBwdWJsaWMg
QVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpVc2VyQ29udGVudENvbnRyb2xsZXI+
LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKQEAgLTc1LDcgKzc2LDkgQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KiBnZXQoVXNlckNv
bnRlbnRDb250cm9sbGVySWRlbnRpZmllcik7CiAKLSAgICB2b2lkIGFkZFByb2Nlc3MoV2ViUHJv
Y2Vzc1Byb3h5JiwgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYpOworICAgIFVzZXJDb250ZW50
Q29udHJvbGxlclBhcmFtZXRlcnMgcGFyYW1ldGVycygpIGNvbnN0OworCisgICAgdm9pZCBhZGRQ
cm9jZXNzKFdlYlByb2Nlc3NQcm94eSYpOwogICAgIHZvaWQgcmVtb3ZlUHJvY2VzcyhXZWJQcm9j
ZXNzUHJveHkmKTsKIAogICAgIEFQSTo6QXJyYXkmIHVzZXJTY3JpcHRzKCkgeyByZXR1cm4gbV91
c2VyU2NyaXB0cy5nZXQoKTsgfQpAQCAtMTA1LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHJlbW92ZUNvbnRlbnRSdWxlTGlzdChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHJlbW92ZUFs
bENvbnRlbnRSdWxlTGlzdHMoKTsKICAgICBjb25zdCBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEFQ
STo6Q29udGVudFJ1bGVMaXN0Pj4mIGNvbnRlbnRFeHRlbnNpb25SdWxlcygpIHsgcmV0dXJuIG1f
Y29udGVudFJ1bGVMaXN0czsgfQotICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBXZWJDb21w
aWxlZENvbnRlbnRSdWxlTGlzdERhdGE+PiBjb250ZW50UnVsZUxpc3REYXRhKCk7CisgICAgVmVj
dG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YT4+IGNv
bnRlbnRSdWxlTGlzdERhdGEoKSBjb25zdDsKICNlbmRpZgogCiAgICAgVXNlckNvbnRlbnRDb250
cm9sbGVySWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVy
OyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDI1OTE2MykKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQwMzQsNiArNDAzNCw4IEBACiAJ
CTVDOEREMzdEMUZFNDUwMTEwMEYyQTU1NiAvKiBBUElXZWJzaXRlUG9saWNpZXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVBJV2Vic2l0ZVBvbGljaWVzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM4REQzN0YxRkU0NTE5MjAwRjJBNTU2IC8q
IFdlYnNpdGVBdXRvcGxheVBvbGljeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJzaXRlQXV0b3BsYXlQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NUM4REQzODExRkU0NTVDQTAwRjJBNTU2IC8qIFdlYnNpdGVBdXRvcGxheVF1aXJrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYnNpdGVBdXRvcGxheVF1aXJrLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDOUM1QzAyMjQzMDUzNTgwMEJCNjc0MCAvKiBVc2Vy
Q29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNUM5QzVDMDMyNDMwNTM1ODAwQkI2NzQwIC8qIFVzZXJDb250ZW50Q29u
dHJvbGxlclBhcmFtZXRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTVDOUU1NjgwMURGN0YwNTUwMEM5RUUzMyAvKiBXS1dlYnNpdGVQb2xpY2ll
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS1dlYnNpdGVQb2xp
Y2llcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDOUU1NjgxMURGN0YwNTUw
MEM5RUUzMyAvKiBXS1dlYnNpdGVQb2xpY2llcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXS1dlYnNpdGVQb2xpY2llcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1QzlFRjJFNzIxRjA1OEY5MDAzQkRDNTYgLyogTmV0d29ya1N0b3JhZ2VTZXNzaW9uUHJvdmlk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya1N0b3JhZ2VTZXNz
aW9uUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYwNDIsNiArNjA0
NCw4IEBACiAJCQkJNUMxOUE1MUUxRkQwQjE0NjAwRUVBMzIzIC8qIFVSTFNjaGVtZVRhc2tQYXJh
bWV0ZXJzLmNwcCAqLywKIAkJCQk1QzE5QTUxRjFGRDBCMTQ3MDBFRUEzMjMgLyogVVJMU2NoZW1l
VGFza1BhcmFtZXRlcnMuaCAqLywKIAkJCQk0MUZCRTgyMTIwNkQ4N0Y2MDAwRjA3NDEgLyogVXNl
ckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllci5oICovLAorCQkJCTVDOUM1QzAzMjQzMDUzNTgw
MEJCNjc0MCAvKiBVc2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzLmNwcCAqLywKKwkJCQk1
QzlDNUMwMjI0MzA1MzU4MDBCQjY3NDAgLyogVXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVy
cy5oICovLAogCQkJCTFBQzEzMzY1MTg1NjVCNTcwMEYzRUMwNSAvKiBVc2VyRGF0YS5jcHAgKi8s
CiAJCQkJMUFDMTMzNjYxODU2NUI1NzAwRjNFQzA1IC8qIFVzZXJEYXRhLmggKi8sCiAJCQkJMjY4
NDA1NEExOEI4NjZGRjAwMjJDMzhCIC8qIFZpc2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8uY3Bw
ICovLApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNp
b24gMjU5MTYzKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03OTEsNyArNzkxLDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpkaWRSZWNl
aXZlTWVzc2FnZShJUEM6OgogICAgIH0KICNlbmRpZgogCi0gICAgTE9HX0VSUk9SKCJVbmhhbmRs
ZWQgd2ViIHByb2Nlc3MgbWVzc2FnZSAnJXM6JXMnIChkZXN0aW5hdGlvbjogJSIgUFJJdTY0ICIp
IiwgZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkudG9TdHJpbmcoKS5kYXRhKCksIGRlY29k
ZXIubWVzc2FnZU5hbWUoKS50b1N0cmluZygpLmRhdGEoKSwgZGVjb2Rlci5kZXN0aW5hdGlvbklE
KCkpOworICAgIExPR19FUlJPUigiVW5oYW5kbGVkIHdlYiBwcm9jZXNzIG1lc3NhZ2UgJyVzOjol
cycgKGRlc3RpbmF0aW9uOiAlIiBQUkl1NjQgIiBwaWQ6ICVkKSIsIGRlY29kZXIubWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLnRvU3RyaW5nKCkuZGF0YSgpLCBkZWNvZGVyLm1lc3NhZ2VOYW1lKCkudG9T
dHJpbmcoKS5kYXRhKCksIGRlY29kZXIuZGVzdGluYXRpb25JRCgpLCBzdGF0aWNfY2FzdDxpbnQ+
KGdldEN1cnJlbnRQcm9jZXNzSUQoKSkpOwogfQogCiBXZWJGcmFtZSogV2ViUHJvY2Vzczo6d2Vi
RnJhbWUoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjU5MTYzKQorKysg
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcxNywxMiArNzE3LDEyIEBAIFdlYlBhZ2U6OldlYlBhZ2UoUGFnZUlkZW50aWZpZXIg
cGFnZUlELCAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZXJhdG9yIDogcGFyYW1ldGVycy51cmxT
Y2hlbWVIYW5kbGVycykKICAgICAgICAgcmVnaXN0ZXJVUkxTY2hlbWVIYW5kbGVyKGl0ZXJhdG9y
LnZhbHVlLCBpdGVyYXRvci5rZXkpOwogCi0gICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPmFk
ZENvbnRlbnRXb3JsZHMocGFyYW1ldGVycy51c2VyQ29udGVudFdvcmxkcyk7Ci0gICAgbV91c2Vy
Q29udGVudENvbnRyb2xsZXItPmFkZFVzZXJTY3JpcHRzKFdURk1vdmUocGFyYW1ldGVycy51c2Vy
U2NyaXB0cyksIEluamVjdFVzZXJTY3JpcHRJbW1lZGlhdGVseTo6Tm8pOwotICAgIG1fdXNlckNv
bnRlbnRDb250cm9sbGVyLT5hZGRVc2VyU3R5bGVTaGVldHMocGFyYW1ldGVycy51c2VyU3R5bGVT
aGVldHMpOwotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRVc2VyU2NyaXB0TWVzc2Fn
ZUhhbmRsZXJzKHBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXJzKTsKKyAgICBtX3VzZXJDb250ZW50
Q29udHJvbGxlci0+YWRkQ29udGVudFdvcmxkcyhwYXJhbWV0ZXJzLnVzZXJDb250ZW50Q29udHJv
bGxlclBhcmFtZXRlcnMudXNlckNvbnRlbnRXb3JsZHMpOworICAgIG1fdXNlckNvbnRlbnRDb250
cm9sbGVyLT5hZGRVc2VyU2NyaXB0cyhXVEZNb3ZlKHBhcmFtZXRlcnMudXNlckNvbnRlbnRDb250
cm9sbGVyUGFyYW1ldGVycy51c2VyU2NyaXB0cyksIEluamVjdFVzZXJTY3JpcHRJbW1lZGlhdGVs
eTo6Tm8pOworICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRVc2VyU3R5bGVTaGVldHMo
cGFyYW1ldGVycy51c2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzLnVzZXJTdHlsZVNoZWV0
cyk7CisgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPmFkZFVzZXJTY3JpcHRNZXNzYWdlSGFu
ZGxlcnMocGFyYW1ldGVycy51c2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzLm1lc3NhZ2VI
YW5kbGVycyk7CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICBtX3VzZXJDb250
ZW50Q29udHJvbGxlci0+YWRkQ29udGVudFJ1bGVMaXN0cyhXVEZNb3ZlKHBhcmFtZXRlcnMuY29u
dGVudFJ1bGVMaXN0cykpOworICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRDb250ZW50
UnVsZUxpc3RzKFdURk1vdmUocGFyYW1ldGVycy51c2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0
ZXJzLmNvbnRlbnRSdWxlTGlzdHMpKTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDI1OTI3OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDIwIEBACisyMDIwLTAzLTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIFNQSSBXS1dlYnBhZ2VQcmVmZXJlbmNlcy5fdXNl
ckNvbnRlbnRDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDk3OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZERlbGVn
YXRlLm1tOgorICAgICAgICAoLVtUZXN0VUlEZWxlZ2F0ZSB3ZWJWaWV3OnJ1bkphdmFTY3JpcHRB
bGVydFBhbmVsV2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9uSGFuZGxlcjpd
KTogRGVsZXRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dl
YnNpdGVQb2xpY2llcy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RVSURl
bGVnYXRlLmg6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFVJRGVs
ZWdhdGUubW06IEFkZGVkLgorICAgICAgICAoLVtUZXN0VUlEZWxlZ2F0ZSB3ZWJWaWV3OnJ1bkph
dmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9u
SGFuZGxlcjpdKToKKyAgICAgICAgKC1bVGVzdFVJRGVsZWdhdGUgd2FpdEZvckFsZXJ0XSk6CisK
IDIwMjAtMDMtMzAgIFBlbmcgTGl1ICA8cGVuZy5saXU2QGFwcGxlLmNvbT4KIAogICAgICAgICBQ
aVAgc3VwcG9ydCBvZiBNaW5pQnJvd3NlciBpcyBicm9rZW4KSW5kZXg6IFRvb2xzL1Rlc3RXZWJL
aXRBUEkvU291cmNlc0NvY29hLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJ
L1NvdXJjZXNDb2NvYS50eHQJKHJldmlzaW9uIDI1OTE2MykKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvU291cmNlc0NvY29hLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQCBjb2Nv
YS9QbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tCiBjb2NvYS9UZXN0Q29jb2EubW0KIGNvY29hL1Rl
c3ROYXZpZ2F0aW9uRGVsZWdhdGUubW0KIGNvY29hL1Rlc3RQcm90b2NvbC5tbQorY29jb2EvVGVz
dFVJRGVsZWdhdGUubW0KIGNvY29hL1Rlc3RXS1dlYlZpZXcubW0KIAogVGVzdHMvV2ViS2l0Q29j
b2EvVExTRGVwcmVjYXRpb24ubW0KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyNTkxNjMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjA4Myw2ICsyMDgzLDggQEAKIAkJ
NUNCNDBCNEQxRjRCOThCRTAwN0RDN0I5IC8qIFVJRGVsZWdhdGUubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBVSURlbGVnYXRlLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1Q0I1QjNCRDFGRkM1MTdFMDBDMjdCQjAgLyogRnJhbWVIYW5kbGVTZXJp
YWxpemF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRnJhbWVIYW5kbGVTZXJpYWxpemF0
aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0I3QUZEQjIzQzQ1MUU0MDBF
NDlDRjMgLyogUmVzb3VyY2VMb2FkRGVsZWdhdGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBSZXNvdXJjZUxvYWREZWxlZ2F0ZS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNUNCQUE3RjMyNDMyN0Y2QjAwNTY0QThCIC8qIFRlc3RVSURlbGVnYXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRlc3RVSURlbGVnYXRlLmg7IHBh
dGggPSBjb2NvYS9UZXN0VUlEZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1Q0JBQTdGNDI0MzI3RjZCMDA1NjRBOEIgLyogVGVzdFVJRGVsZWdhdGUubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBUZXN0VUlEZWxlZ2F0ZS5tbTsgcGF0aCA9
IGNvY29hL1Rlc3RVSURlbGVnYXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
Q0NCMTBERDIxMzQ1NzlDMDBBQzVBRjAgLyogUmVzcG9uc2l2ZW5lc3NUaW1lckRvZXNudEZpcmVF
YXJseS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlc3BvbnNp
dmVuZXNzVGltZXJEb2VzbnRGaXJlRWFybHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTVDQ0IxMERFMjEzNDU3OUQwMEFDNUFGMCAvKiBSZXN0b3JlU2Vzc2lvblN0YXRlV2l0aG91
dE5hdmlnYXRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBS
ZXN0b3JlU2Vzc2lvblN0YXRlV2l0aG91dE5hdmlnYXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTVDQ0IxMERGMjEzNDU3OUQwMEFDNUFGMCAvKiBTaG91bGRHb1RvQmFja0Zv
cndhcmRMaXN0SXRlbS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFNob3VsZEdvVG9CYWNrRm9yd2FyZExpc3RJdGVtLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjg5OSw2ICsyOTAxLDggQEAKIAkJCQk1MTYyODEyNDIzMjVDMTdCMDBCQjdFNDIg
LyogVGVzdFBERkRvY3VtZW50Lm1tICovLAogCQkJCUExNEZDNThEMUI4QUUzNjUwMEQxMDdFQiAv
KiBUZXN0UHJvdG9jb2wuaCAqLywKIAkJCQlBMTRGQzU4RTFCOEFFMzY1MDBEMTA3RUIgLyogVGVz
dFByb3RvY29sLm1tICovLAorCQkJCTVDQkFBN0YzMjQzMjdGNkIwMDU2NEE4QiAvKiBUZXN0VUlE
ZWxlZ2F0ZS5oICovLAorCQkJCTVDQkFBN0Y0MjQzMjdGNkIwMDU2NEE4QiAvKiBUZXN0VUlEZWxl
Z2F0ZS5tbSAqLywKIAkJCQkyRUZGMDZEMjFEOEFFREJCMDAwNEJCMzAgLyogVGVzdFdLV2ViVmll
dy5oICovLAogCQkJCTJFRkYwNkQzMUQ4QUVEQkIwMDA0QkIzMCAvKiBUZXN0V0tXZWJWaWV3Lm1t
ICovLAogCQkJCTdDODNFMDM5MUQwQTYwMjcwMEZFQkNGMyAvKiBVdGlsaXRpZXNDb2NvYS5tbSAq
LywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VM
b2FkRGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5tbQkocmV2aXNpb24gMjU5MTYzKQorKysg
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWREZWxlZ2F0
ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2ltcG9ydCAiUGxhdGZvcm1V
dGlsaXRpZXMuaCIKICNpbXBvcnQgIlRDUFNlcnZlci5oIgogI2ltcG9ydCAiVGVzdE5hdmlnYXRp
b25EZWxlZ2F0ZS5oIgorI2ltcG9ydCAiVGVzdFVJRGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RX
S1dlYlZpZXcuaCIKICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV2ViS2l0Lmg+CkBAIC04MSwyNCArODIsNiBAQCAtICh2b2lkKXdlYlZpZXc6KFdL
V2ViVmlldyAqKXdlYlZpZXcgcmVzCiAKIEBlbmQKIAotQGludGVyZmFjZSBUZXN0VUlEZWxlZ2F0
ZSA6IE5TT2JqZWN0IDxXS1VJRGVsZWdhdGU+Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5
KSB2b2lkIChecnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZSkoV0tXZWJWaWV3ICos
IE5TU3RyaW5nICosIFdLRnJhbWVJbmZvICosIHZvaWQgKF4pKHZvaWQpKTsKLQotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gVGVzdFVJRGVsZWdhdGUKLQotLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZp
ZXcgKil3ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW5n
ICopbWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIGlmIChf
cnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZSkKLSAgICAgICAgX3J1bkphdmFTY3Jp
cHRBbGVydFBhbmVsV2l0aE1lc3NhZ2Uod2ViVmlldywgbWVzc2FnZSwgZnJhbWUsIGNvbXBsZXRp
b25IYW5kbGVyKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci19Ci0K
LUBlbmQKLQogVEVTVChSZXNvdXJjZUxvYWREZWxlZ2F0ZSwgQmFzaWMpCiB7CiAgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbV0tXZWJWaWV3IG5ld10pOwpJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlUG9saWNpZXMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlUG9saWNpZXMubW0J
KHJldmlzaW9uIDI1OTE2MykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvV2Vic2l0ZVBvbGljaWVzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAK
ICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0TmF2aWdhdGlvbkRl
bGVnYXRlLmgiCisjaW1wb3J0ICJUZXN0VUlEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVGVzdFdLV2Vi
Vmlldy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLTXV0YWJsZURpY3Rpb25hcnkuaD4KICNpbXBvcnQg
PFdlYktpdC9XS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaD4KQEAgLTE3MjMsMyArMTcyNCw1
OSBAQCBURVNUKFdlYnBhZ2VQcmVmZXJlbmNlcywgV2Vic2l0ZVBvbGljaWVzCiAKICAgICBFWFBF
Q1RfTkUocGlkMSwgW2Nvb2tpZVdlYlZpZXcgX3dlYlByb2Nlc3NJZGVudGlmaWVyXSk7CiB9CisK
K1RFU1QoV2VicGFnZVByZWZlcmVuY2VzLCBXZWJzaXRlUG9saWNpZXNVc2VyQ29udGVudENvbnRy
b2xsZXIpCit7CisgICAgYXV0byBtYWtlU2NyaXB0ID0gW10gKE5TU3RyaW5nICpzY3JpcHQpIHsK
KyAgICAgICAgcmV0dXJuIFtbW1dLVXNlclNjcmlwdCBhbGxvY10gaW5pdFdpdGhTb3VyY2U6c2Ny
aXB0IGluamVjdGlvblRpbWU6V0tVc2VyU2NyaXB0SW5qZWN0aW9uVGltZUF0RG9jdW1lbnRTdGFy
dCBmb3JNYWluRnJhbWVPbmx5OllFU10gYXV0b3JlbGVhc2VdOworICAgIH07CisgICAgV0tXZWJW
aWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtbV0tXZWJWaWV3Q29uZmlndXJhdGlv
biBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbY29uZmlndXJhdGlvbi51c2VyQ29udGVudENvbnRy
b2xsZXIgYWRkVXNlclNjcmlwdDptYWtlU2NyaXB0KEAiYWxlcnQoJ3Rlc3RBbGVydDEnKSIpXTsK
KyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW1tbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZp
Z3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKKyAgICBUZXN0VUlEZWxlZ2F0ZSAqdWlEZWxlZ2F0ZSA9
IFtbVGVzdFVJRGVsZWdhdGUgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgd2ViVmlldy5VSURlbGVn
YXRlID0gdWlEZWxlZ2F0ZTsKKyAgICBUZXN0TmF2aWdhdGlvbkRlbGVnYXRlICpuYXZpZ2F0aW9u
RGVsZWdhdGUgPSBbW1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUgbmV3XSBhdXRvcmVsZWFzZV07Cisg
ICAgX19ibG9jayBib29sIGlmcmFtZUV4Y2VwdGlvblRocm93biA9IGZhbHNlOworICAgIF9fYmxv
Y2sgUmV0YWluUHRyPFdLVXNlckNvbnRlbnRDb250cm9sbGVyPiByZXBsYWNlbWVudFVzZXJDb250
ZW50Q29udHJvbGxlcjsKKyAgICBuYXZpZ2F0aW9uRGVsZWdhdGUuZGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvbkFjdGlvbldpdGhQcmVmZXJlbmNlcyA9IF4oV0tOYXZpZ2F0aW9uQWN0aW9uICphY3Rp
b24sIFdLV2VicGFnZVByZWZlcmVuY2VzICosIHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlcikoV0tO
YXZpZ2F0aW9uQWN0aW9uUG9saWN5LCBXS1dlYnBhZ2VQcmVmZXJlbmNlcyAqKSkgeworICAgICAg
ICBpZiAoW2FjdGlvbi5yZXF1ZXN0LlVSTC5wYXRoIGhhc1N1ZmZpeDpAIi9zaW1wbGUtaWZyYW1l
Lmh0bWwiXSkKKyAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihXS05hdmlnYXRp
b25BY3Rpb25Qb2xpY3lBbGxvdywgbmlsKTsKKyAgICAgICAgaWYgKFthY3Rpb24ucmVxdWVzdC5V
UkwucGF0aCBoYXNTdWZmaXg6QCIvc2ltcGxlLmh0bWwiXSkgeworICAgICAgICAgICAgQHRyeSB7
CisgICAgICAgICAgICAgICAgV0tXZWJwYWdlUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gW1tX
S1dlYnBhZ2VQcmVmZXJlbmNlcyBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgICAgICAgICBw
cmVmZXJlbmNlcy5fdXNlckNvbnRlbnRDb250cm9sbGVyID0gW1tXS1VzZXJDb250ZW50Q29udHJv
bGxlciBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlv
bkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3csIHByZWZlcmVuY2VzKTsKKyAg
ICAgICAgICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7CisgICAgICAgICAg
ICAgICAgaWZyYW1lRXhjZXB0aW9uVGhyb3duID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgRVhQRUNUX1RSVUUo
W2FjdGlvbi5yZXF1ZXN0LlVSTC5wYXRoIGhhc1N1ZmZpeDpAIi9zaW1wbGUyLmh0bWwiXSk7Cisg
ICAgICAgIFdLV2VicGFnZVByZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9IFtbV0tXZWJwYWdlUHJl
ZmVyZW5jZXMgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgICAgIHJlcGxhY2VtZW50VXNlckNvbnRl
bnRDb250cm9sbGVyID0gYWRvcHROUyhbV0tVc2VyQ29udGVudENvbnRyb2xsZXIgbmV3XSk7Cisg
ICAgICAgIFtyZXBsYWNlbWVudFVzZXJDb250ZW50Q29udHJvbGxlciBhZGRVc2VyU2NyaXB0Om1h
a2VTY3JpcHQoQCJhbGVydCgndGVzdEFsZXJ0MicpIildOworICAgICAgICBwcmVmZXJlbmNlcy5f
dXNlckNvbnRlbnRDb250cm9sbGVyID0gcmVwbGFjZW1lbnRVc2VyQ29udGVudENvbnRyb2xsZXIu
Z2V0KCk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGlj
eUFsbG93LCBwcmVmZXJlbmNlcyk7CisgICAgfTsKKyAgICB3ZWJWaWV3Lm5hdmlnYXRpb25EZWxl
Z2F0ZSA9IG5hdmlnYXRpb25EZWxlZ2F0ZTsKKworICAgIFt3ZWJWaWV3IGxvYWRUZXN0UGFnZU5h
bWVkOkAic2ltcGxlLWlmcmFtZSJdOworICAgIEVYUEVDVF9XS19TVFJFUShbdWlEZWxlZ2F0ZSB3
YWl0Rm9yQWxlcnRdLCAidGVzdEFsZXJ0MSIpOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmaWZyYW1lRXhjZXB0aW9uVGhyb3duKTsKKworICAgIFt3ZWJWaWV3IGxvYWRUZXN0UGFnZU5h
bWVkOkAic2ltcGxlMiJdOworICAgIEVYUEVDVF9XS19TVFJFUShbdWlEZWxlZ2F0ZSB3YWl0Rm9y
QWxlcnRdLCAidGVzdEFsZXJ0MiIpOworCisgICAgYm9vbCBjYXVnaHRFeGNlcHRpb24gPSBmYWxz
ZTsKKyAgICBAdHJ5IHsKKyAgICAgICAgV0tXZWJwYWdlUHJlZmVyZW5jZXMgKnByZWZlcmVuY2Vz
ID0gW1tXS1dlYnBhZ2VQcmVmZXJlbmNlcyBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgcHJl
ZmVyZW5jZXMuX3VzZXJDb250ZW50Q29udHJvbGxlciA9IFtbV0tVc2VyQ29udGVudENvbnRyb2xs
ZXIgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFt3ZWJWaWV3IF91cGRhdGVXZWJwYWdlUHJl
ZmVyZW5jZXM6cHJlZmVyZW5jZXNdOworICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0
aW9uKSB7CisgICAgICAgIGNhdWdodEV4Y2VwdGlvbiA9IHRydWU7CisgICAgfQorICAgIEVYUEVD
VF9UUlVFKGNhdWdodEV4Y2VwdGlvbik7CisKKyAgICAvLyBGSVhNRTogTWFrZSBfYWRkVXNlclNj
cmlwdEltbWVkaWF0ZWx5IHdvcmsgc3VjY2Vzc2Z1bGx5IGFmdGVyIHVzaW5nIFdLV2VicGFnZVBy
ZWZlcmVuY2VzLl91c2VyQ29udGVudENvbnRyb2xsZXIKK30KSW5kZXg6IFRvb2xzL1Rlc3RXZWJL
aXRBUEkvY29jb2EvVGVzdFVJRGVsZWdhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL2NvY29hL1Rlc3RVSURlbGVnYXRlLmgJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9jb2NvYS9UZXN0VUlEZWxlZ2F0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8V2ViS2l0L1dL
VUlEZWxlZ2F0ZVByaXZhdGUuaD4KKworQGludGVyZmFjZSBUZXN0VUlEZWxlZ2F0ZSA6IE5TT2Jq
ZWN0IDxXS1VJRGVsZWdhdGU+CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSB2b2lkIChe
cnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZSkoV0tXZWJWaWV3ICosIE5TU3RyaW5n
ICosIFdLRnJhbWVJbmZvICosIHZvaWQgKF4pKHZvaWQpKTsKKworLSAoTlNTdHJpbmcgKil3YWl0
Rm9yQWxlcnQ7CisKK0BlbmQKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFVJ
RGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0
VUlEZWxlZ2F0ZS5tbQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29h
L1Rlc3RVSURlbGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RVSURlbGVnYXRlLmgiCisK
KyNpbXBvcnQgIlV0aWxpdGllcy5oIgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGVG
b3JUZXN0aW5nLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK0BpbXBsZW1lbnRhdGlv
biBUZXN0VUlEZWxlZ2F0ZQorCistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcg
cnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGlu
aXRpYXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6KHZv
aWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgaWYgKF9ydW5KYXZhU2NyaXB0
QWxlcnRQYW5lbFdpdGhNZXNzYWdlKQorICAgICAgICBfcnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxX
aXRoTWVzc2FnZSh3ZWJWaWV3LCBtZXNzYWdlLCBmcmFtZSwgY29tcGxldGlvbkhhbmRsZXIpOwor
ICAgIGVsc2UKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKK30KKworLSAoTlNTdHJpbmcg
Kil3YWl0Rm9yQWxlcnQKK3sKKyAgICBFWFBFQ1RfRkFMU0Uoc2VsZi5ydW5KYXZhU2NyaXB0QWxl
cnRQYW5lbFdpdGhNZXNzYWdlKTsKKworICAgIF9fYmxvY2sgYm9vbCBmaW5pc2hlZCA9IGZhbHNl
OworICAgIF9fYmxvY2sgUmV0YWluUHRyPE5TU3RyaW5nPiByZXN1bHQ7CisgICAgc2VsZi5ydW5K
YXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlID0gXihXS1dlYlZpZXcgKiwgTlNTdHJpbmcg
Km1lc3NhZ2UsIFdLRnJhbWVJbmZvICosIHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlcikodm9pZCkp
IHsKKyAgICAgICAgcmVzdWx0ID0gbWVzc2FnZTsKKyAgICAgICAgZmluaXNoZWQgPSB0cnVlOwor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIH07CisKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKKworICAgIHNlbGYucnVuSmF2YVNjcmlwdEFsZXJ0UGFu
ZWxXaXRoTWVzc2FnZSA9IG5pbDsKKyAgICByZXR1cm4gcmVzdWx0LmF1dG9yZWxlYXNlKCk7Cit9
CisKK0BlbmQK
</data>
<flag name="review"
          id="410463"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>