<?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>188137</bug_id>
          
          <creation_ts>2018-07-28 10:42:10 -0700</creation_ts>
          <short_desc>Merge PlatformCookieJar functions into NetworkStorageSession</short_desc>
          <delta_ts>2018-07-30 12:41:08 -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>Platform</component>
          <version>WebKit Local Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Rob Buis">rbuis</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>andersca</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>mjs</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1445988</commentid>
    <comment_count>0</comment_count>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2018-07-28 10:42:10 -0700</bug_when>
    <thetext>From PlatformCookieJar.h:

// FIXME: These should probably be NetworkStorageSession member functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446006</commentid>
    <comment_count>1</comment_count>
      <attachid>345998</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2018-07-28 13:19:43 -0700</bug_when>
    <thetext>Created attachment 345998
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446007</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-07-28 13:22:51 -0700</bug_when>
    <thetext>Attachment 345998 did not pass style-queue:


ERROR: Source/WebCore/platform/network/cocoa/NetworkStorageSessionCocoa.mm:206:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446056</commentid>
    <comment_count>3</comment_count>
      <attachid>346015</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2018-07-28 23:13:04 -0700</bug_when>
    <thetext>Created attachment 346015
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446057</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-07-28 23:15:57 -0700</bug_when>
    <thetext>Attachment 346015 did not pass style-queue:


ERROR: Source/WebCore/platform/network/cocoa/NetworkStorageSessionCocoa.mm:206:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446073</commentid>
    <comment_count>5</comment_count>
      <attachid>346023</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2018-07-29 02:08:08 -0700</bug_when>
    <thetext>Created attachment 346023
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446075</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-07-29 02:12:58 -0700</bug_when>
    <thetext>Attachment 346023 did not pass style-queue:


ERROR: Source/WebCore/platform/network/cocoa/NetworkStorageSessionCocoa.mm:206:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp:48:  &quot;WebKitSystemInterface/WebKitSystemInterface.h&quot; already included at Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp:38  [build/include] [4]
Total errors found: 2 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446078</commentid>
    <comment_count>7</comment_count>
      <attachid>346026</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2018-07-29 04:32:08 -0700</bug_when>
    <thetext>Created attachment 346026
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446079</commentid>
    <comment_count>8</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-07-29 04:33:58 -0700</bug_when>
    <thetext>Attachment 346026 did not pass style-queue:


ERROR: Source/WebCore/platform/network/cocoa/NetworkStorageSessionCocoa.mm:206:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp:48:  &quot;WebKitSystemInterface/WebKitSystemInterface.h&quot; already included at Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp:38  [build/include] [4]
Total errors found: 2 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446086</commentid>
    <comment_count>9</comment_count>
      <attachid>346030</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2018-07-29 08:32:45 -0700</bug_when>
    <thetext>Created attachment 346030
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446201</commentid>
    <comment_count>10</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2018-07-30 07:39:42 -0700</bug_when>
    <thetext>This LGTM but maybe someone familiar with the networking code should review it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446281</commentid>
    <comment_count>11</comment_count>
      <attachid>346030</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-07-30 11:49:14 -0700</bug_when>
    <thetext>Comment on attachment 346030
Patch

r=me, too.
I wonder if https://bugs.webkit.org/show_bug.cgi?id=161106 would be easier after this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446294</commentid>
    <comment_count>12</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2018-07-30 12:04:04 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #11)
&gt; Comment on attachment 346030 [details]
&gt; Patch
&gt; 
&gt; r=me, too.
&gt; I wonder if https://bugs.webkit.org/show_bug.cgi?id=161106 would be easier
&gt; after this.

@Alex: Rob is in vacations so I guess we can land this patch now, especially if that helps you for bug 161106.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446299</commentid>
    <comment_count>13</comment_count>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2018-07-30 12:14:32 -0700</bug_when>
    <thetext>Hi guys, I am officially on vacations but only flying away next week, so feel free to CC me on bugs. Bug 161106 may be more something for Alex as I am still pretty new to cookie related code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446309</commentid>
    <comment_count>14</comment_count>
      <attachid>346030</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-07-30 12:37:49 -0700</bug_when>
    <thetext>Comment on attachment 346030
Patch

Clearing flags on attachment: 346030

Committed r234376: &lt;https://trac.webkit.org/changeset/234376&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446310</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-07-30 12:37:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446314</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-07-30 12:41:08 -0700</bug_when>
    <thetext>&lt;rdar://problem/42742897&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345998</attachid>
            <date>2018-07-28 13:19:43 -0700</date>
            <delta_ts>2018-07-28 23:12:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188137-20180728221941.patch</filename>
            <type>text/plain</type>
            <size>112695</size>
            <attacher name="Rob Buis">rbuis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0MzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTAyYzI1N2ZhMWQ0YmU5
YmEyYjFkMWFkOWVjNjFlMGVlNzU4ZGM3Mi4uYjU5ZmQ4Y2EzOTFiN2VjNTIxMzU2MDkxZDRjMjA2
ODUzMmJmOGM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDE4LTA3LTI4ICBSb2Ig
QnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CisKKyAgICAgICAgTWVyZ2UgUGxhdGZvcm1Db29raWVK
YXIgZnVuY3Rpb25zIGludG8gTmV0d29ya1N0b3JhZ2VTZXNzaW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODgxMzcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLS0gbm8gY2hhbmdl
IGluIFdlYktpdCBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6
CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbG9hZGVyL0Nvb2tpZUphci5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vQ3VybC5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9Tb3VyY2VzU291
cC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6aGVhZGVyVmFsdWVGb3JWYXJ5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvUGxhdGZvcm1Db29raWVKYXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29v
a2llRGF0YUZvckhhbmRzaGFrZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Db29r
aWVKYXJDRk5ldC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3Jr
U3RvcmFnZVNlc3Npb25Db2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6Omh0dHBDb29raWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUhUVFBDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6
cG9saWN5UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzRm9yVVJMKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEhUVFBDb29raWVzRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6
Omh0dHBDb29raWVzRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbHRlckNvb2tpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6YXBwbHlQYXJ0aXRpb25Ub0Nvb2tpZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29va2llc0FyZUJsb2NrZWRGb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2ll
c0luUGFydGl0aW9uRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNGb3JTZXNzaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUFsbEhUVFBDb29raWVzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0ZvckRPTSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bjo6c2V0Q29va2llc0Zyb21ET00gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6aHR0cENvb2tp
ZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246
OmNvb2tpZXNFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6Z2V0UmF3Q29va2llcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZXNGb3JIb3N0
bmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVB
bGxDb29raWVzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJs
L0Nvb2tpZUphckN1cmwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9Db29raWVKYXJDdXJsLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL05l
dHdvcmtTdG9yYWdlU2Vzc2lvbkN1cmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVzRnJvbURPTSBjb25zdCk6CisKIDIwMTgtMDctMjQgIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQW5pbWF0aW9u
IHN0b3BzIHdpdGggb2JqZWN0LWZpdDpjb250YWluIG9uIGFuIGFuaW1hdGVkIDJkIGNhbnZhcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwppbmRleCBmY2IzN2QxNDY1NWIzNDRiZWI5M2I3ZjY5MGU1ZWE4Njk1ZDA1MWZmLi4xMjM4
NmFiNmFmYTBkNTNmOTk0OTBkMGMwMTg5N2I3NGZjYWFmOTc3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDMxIEBACisyMDE4LTA3LTI4ICBSb2IgQnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CisgCisgICAg
ICAgICBNZXJnZSBQbGF0Zm9ybUNvb2tpZUphciBmdW5jdGlvbnMgaW50byBOZXR3b3JrU3RvcmFn
ZVNlc3Npb24KKyAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xODgxMzcKKyAKKyAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorIAorICAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwOgorICAg
ICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMp
OgorICAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKToKKyAgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OmRlbGV0ZUFsbENv
b2tpZXMpOgorICAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQWxsQ29v
a2llc01vZGlmaWVkU2luY2UpOgorICAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6Y29va2llc0ZvckRPTSk6CisgICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAg
KFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZXNFbmFibGVkKToK
KyAgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEpOgorICAgICAgICAgKFdlYktpdDo6TmV0d29ya1By
b2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKToKKyAgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMpOgorICAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAgKFdlYktpdDo6bG9nQ29v
a2llSW5mb3JtYXRpb25JbnRlcm5hbCk6CisgICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZS5jcHA6CisgICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcDoKKwogMjAxOC0wNy0yNyAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aHJlYWQtc2FmZXR5IGlzc3VlcyByZWxh
dGVkIHRvIFJlYWx0aW1lTWVkaWFTb3VyY2U6OmF1ZGlvU2FtcGxlc0F2YWlsYWJsZSgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggMGUzMzc1NjYzYjkzZDViODZlM2NiNTAxODU2NmNh
YjQ4ZmFlNWQwNi4uZjIxYWIxZTMxZDQyMzRmNjQ4MjZmYjUwODM3ZDNjOThmNzNhMDIyNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE4LTA3LTI4ICBS
b2IgQnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CisKKyAgICAgICAgTWVyZ2UgUGxhdGZvcm1Db29r
aWVKYXIgZnVuY3Rpb25zIGludG8gTmV0d29ya1N0b3JhZ2VTZXNzaW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODgxMzcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBs
YXRmb3JtU3RyYXRlZ2llcy5tbToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29v
a2llc0ZvckRPTSk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldENvb2tpZXNG
cm9tRE9NKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llc0VuYWJsZWQp
OgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZSk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFJhd0Nvb2tpZXMp
OgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpkZWxldGVDb29raWUpOgorICAgICAg
ICAqIFdlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW06CisgICAgICAgICgrW1dlYlByZWZlcmVuY2Vz
IF9jbGVhck5ldHdvcmtMb2FkZXJTZXNzaW9uXSk6CisKIDIwMTgtMDctMjYgIEFuZHkgVmFuV2Fn
b25lciAgPGFuZHlAdmFud2Fnb25lci5mYW1pbHk+CiAKICAgICAgICAgW0lOVExdIFJlbW92ZSBJ
TlRMIHN1Yi1mZWF0dXJlIGNvbXBpbGUgZmxhZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5k
ZXggZjNkOGQwMjhjZmQxZTA2MWY5ZjJjNmYzMDJiZGY5Yjk1ZDFkNDk0OS4uNWRmZTc0Yzc5YjUy
MzEwMGQ0ZWM3YjhiNGJkZjVkODM1Zjg2ZjI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UK
QEAgLTQzNCw3ICs0MzQsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9uZXR3b3JrL21hYy9BdXRoZW50aWNhdGlvbk1hYy5tbQogICAgIHBsYXRmb3JtL25ldHdv
cmsvbWFjL0Jsb2JEYXRhRmlsZVJlZmVyZW5jZU1hYy5tbQogICAgIHBsYXRmb3JtL25ldHdvcmsv
bWFjL0NlcnRpZmljYXRlSW5mb01hYy5tbQotICAgIHBsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tp
ZUphck1hYy5tbQogICAgIHBsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZVN0b3JhZ2VNYWMubW0K
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL21hYy9DcmVkZW50aWFsU3RvcmFnZU1hYy5tbQogICAgIHBs
YXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dAppbmRleCBlMzUyZTUzYjhkNjFmY2I4MGEyZjJhMGNhNmNlZmU1YzFhOTFiOTNkLi5lZTll
OGIwYTFmMzE3NTM1MmYyNTUyMDcwNDUzMzg5NWIzYjE5YjRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2Nv
YS50eHQKQEAgLTUwNyw3ICs1MDcsNiBAQCBwbGF0Zm9ybS9uZXR3b3JrL2lvcy9XZWJDb3JlVVJM
UmVzcG9uc2VJT1MubW0KIHBsYXRmb3JtL25ldHdvcmsvbWFjL0F1dGhlbnRpY2F0aW9uTWFjLm1t
CiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9CbG9iRGF0YUZpbGVSZWZlcmVuY2VNYWMubW0KIHBsYXRm
b3JtL25ldHdvcmsvbWFjL0NlcnRpZmljYXRlSW5mb01hYy5tbQotcGxhdGZvcm0vbmV0d29yay9t
YWMvQ29va2llSmFyTWFjLm1tCiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVTdG9yYWdlTWFj
Lm1tCiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9DcmVkZW50aWFsU3RvcmFnZU1hYy5tbQogcGxhdGZv
cm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmYzFmYTFkMmVjZjhlMDM1
ZDI1NDgyZmVmYjc1OWZjZmExZWI1NTYxLi43ODdkY2ZhYjU3ZDFjMmQ1ZDJjOWU2YzIxNTRjMDIw
ODEzYjBiZGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC00NjAzLDcgKzQ2MDMsNiBAQAogCQlFMTM0RjVBQjEyRUUzNDNGMDA0
RUM1OEQgLyogSW50UmVjdEhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxMzRGNUFBMTJFRTM0M0YwMDRFQzU4RCAvKiBJbnRSZWN0SGFzaC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUxMzk4NjY0
MTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM5ODY2MjE1NDc4NDc0MDAxRTNGNjUgLyogU3R5
bGVSZXNvbHZlci5oICovOyB9OwogCQlFMTNFRjM0NDE2ODRFQ0Y0MDAzNEM4M0YgLyogTmV0d29y
a1N0b3JhZ2VTZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMTNFRjM0MjE2ODRFQ0Y0MDAzNEM4M0YgLyogTmV0d29ya1N0b3JhZ2VTZXNzaW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRTE0
MjRDOEExNjRCM0I0RTAwRjMyRDQwIC8qIFBsYXRmb3JtQ29va2llSmFyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTQyNEM4OTE2NEIzQjRFMDBGMzJE
NDAgLyogUGxhdGZvcm1Db29raWVKYXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlFMTQyNEM5NDE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTQyNEM5
MjE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTE0RjFDNDUxNEI1REFDNjAwRUE5MDA5IC8qIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNEYxQzQzMTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTE1MjU1MTUxNkZEMjM1MDAwM0Q3QURCIC8qIFdlYkNvcmVS
ZXNvdXJjZUhhbmRsZUFzT3BlcmF0aW9uUXVldWVEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1MjU1MTMxNkZEMjM0RjAwM0Q3QURCIC8q
IFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzT3BlcmF0aW9uUXVldWVEZWxlZ2F0ZS5oICovOyB9OwpA
QCAtMTQxMzAsOCArMTQxMjksNiBAQAogCQlFMTNFRjM0NzE2ODUwQzQ3MDAzNEM4M0YgLyogTmV0
d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFMTNGMDFFQTEyNzBFMTBEMDBERkJBNzEgLyogQ29va2llU3RvcmFnZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb29raWVTdG9yYWdlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxM0YwMUYwMTI3MEUxOTAwMERGQkE3MSAvKiBDb29r
aWVTdG9yYWdlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
Q29va2llU3RvcmFnZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTE0MjRD
ODkxNjRCM0I0RTAwRjMyRDQwIC8qIFBsYXRmb3JtQ29va2llSmFyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtQ29va2llSmFyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUUxNDI0QzhGMTY0QjQ2MEIwMEYzMkQ0MCAvKiBDb29raWVKYXJNYWMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb29raWVKYXJNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNDI0QzkxMTY0QjUyQzgwMEYzMkQ0MCAv
KiBDb29raWVKYXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29v
a2llSmFyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE0MjRDOTIxNjRCNTJD
ODAwRjMyRDQwIC8qIENvb2tpZUphci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb29raWVKYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE0QTk0RDYxNkRG
REY5NTAwNjhERTgyIC8qIEJsb2JSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBCbG9iUmVnaXN0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTkwNzMsNyArMTkwNzAsNiBAQAogCQkJCUNEQ0Q0MUU2MUMzRERCMDkwMDk2NUQ5OSAv
KiBQYXJzZWRDb250ZW50UmFuZ2UuaCAqLywKIAkJCQk0NDc5NTgwMjE2NDNCNDdCMDAxRTBBN0Yg
LyogUGFyc2VkQ29udGVudFR5cGUuY3BwICovLAogCQkJCTQ0Nzk1ODAzMTY0M0I0N0IwMDFFMEE3
RiAvKiBQYXJzZWRDb250ZW50VHlwZS5oICovLAotCQkJCUUxNDI0Qzg5MTY0QjNCNEUwMEYzMkQ0
MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICovLAogCQkJCTM3QkFBRTU3MTk4MEQxREQwMDVERkU3
MSAvKiBQcm90ZWN0aW9uU3BhY2UuaCAqLywKIAkJCQk1MTRDNzY1RjBDRTkyM0ExMDA3RUYzQ0Qg
LyogUHJvdGVjdGlvblNwYWNlQmFzZS5jcHAgKi8sCiAJCQkJNTE0Qzc2NjAwQ0U5MjNBMTAwN0VG
M0NEIC8qIFByb3RlY3Rpb25TcGFjZUJhc2UuaCAqLywKQEAgLTE5MTEzLDcgKzE5MTA5LDYgQEAK
IAkJCQk1MTRDNzY0MzBDRTkyMzRFMDA3RUYzQ0QgLyogQXV0aGVudGljYXRpb25NYWMubW0gKi8s
CiAJCQkJRTE2NEEyRUIxOTFBRTYzNTAwMTA3MzdEIC8qIEJsb2JEYXRhRmlsZVJlZmVyZW5jZU1h
Yy5tbSAqLywKIAkJCQk1RjJEQkJFNzE3OEUzMzJEMDAxNDE0ODYgLyogQ2VydGlmaWNhdGVJbmZv
TWFjLm1tICovLAotCQkJCUUxNDI0QzhGMTY0QjQ2MEIwMEYzMkQ0MCAvKiBDb29raWVKYXJNYWMu
bW0gKi8sCiAJCQkJRTEzRjAxRjAxMjcwRTE5MDAwREZCQTcxIC8qIENvb2tpZVN0b3JhZ2VNYWMu
bW0gKi8sCiAJCQkJRTFCNENEMjQxMEIzMjJFMjAwQkZGRDdFIC8qIENyZWRlbnRpYWxTdG9yYWdl
TWFjLm1tICovLAogCQkJCTUxNEM3NjQ0MENFOTIzNEUwMDdFRjNDRCAvKiBGb3JtRGF0YVN0cmVh
bU1hYy5oICovLApAQCAtMjk3MTUsNyArMjk3MTAsNiBAQAogCQkJCTQ5M0U1RTA5MTJENjQyMDUw
MDAyMDA4MSAvKiBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJE
NzBCQTEzMTgwNzREREYwMDAxOTA4QSAvKiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTE0OTc4NzExQUJBRjNBNTAwQ0VGN0U0IC8qIFBsYXRmb3JtQ29udGVudEZp
bHRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTE0MjRDOEExNjRCM0I0RTAwRjMyRDQwIC8qIFBs
YXRmb3JtQ29va2llSmFyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVDNzYyQjE0OTdGRTE0MDBC
QzQ3NzUgLyogUGxhdGZvcm1FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjY2MDFFQkYxNEIz
QjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0FBNDg3MDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMu
aCBpbiBIZWFkZXJzICovLApAQCAtMjk4OTQsOCArMjk4ODgsNiBAQAogCQkJCTNDMjQ0RkVBQTM3
NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwQkUwMzBBMjBGMzExMkZCMDAzQzFBNDYgLyogUmVuZGVyTGluZUJveExpc3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDRUE0ODY0MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJMaW5lQnJl
YWsuaCBpbiBIZWFkZXJzICovLAotCQkJCTk0Q0ZENjBBMUZFOTg2N0UwMDI0ODhBRCAvKiBSZW5k
ZXJMaW5lc0NsYW1wRmxvdy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTRDRkQ2MEQxRkVBQ0VGRTAw
MjQ4OEFEIC8qIFJlbmRlckxpbmVzQ2xhbXBTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFCQjU0
MTlGMEFDRERGRTQwMDI4MjBFQiAvKiBSZW5kZXJMaXN0Qm94LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEVBN0E1MjBBMTkxQTUyMDBBOEVGNUYgLyogUmVuZGVyTGlzdEl0ZW0uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4RUE3QTUwMEExOTFBNTIwMEE4RUY1RiAvKiBSZW5kZXJMaXN0TWFya2VyLmgg
aW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVK
YXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5jcHAKaW5kZXggNDliNzk4
ZDdkMmNlYWJkOWE4ZGFmZWRkODUzNDhhMjRhYmE4MmMzZS4uMDY4MzA2NzQ0YWY4MTRiZDI3NjBh
NWUxODY1YTVhOWFiNDM1MmIxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nv
b2tpZUphci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5jcHAKQEAg
LTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0
ZWdpZXMuaCIKICNpbmNsdWRlICJTYW1lU2l0ZUluZm8uaCIKICNpbmNsdWRlIDx3dGYvU3lzdGVt
VHJhY2luZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cmwuY21ha2UKaW5kZXggMTA1MTEzMDY5NjRk
ODcwYWI5ZGZmYTE1ZGJkZTkxMTNkNWQwOTNkMC4uMTYwM2VmODYxNjI4NmVhYjI2ZjczYTgzNGIy
NzAyZjJmMGNlYzcyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5j
bWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJsLmNtYWtlCkBAIC01LDcgKzUs
NiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlv
bkNoYWxsZW5nZUN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0NlcnRpZmljYXRl
SW5mby5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybERhdGFiYXNlLmNwcAogICAgIHBs
YXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ29va2llU3RvcmFnZUN1cmwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Tb3VyY2VzU291cC50eHQgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2Vz
U291cC50eHQKaW5kZXggZDY0ZmNmYmVhMjgxNDdkYWRmNDMwYjJmZmI0YzBmZWE2MGI5NWQ4YS4u
YzAyZTQ5ZTRlNTFlZjc0OTMxZjcwZGQ4NjU1ZDM0ZGUyZDYzZTQ4YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc1NvdXAudHh0CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NvdXJjZXNTb3VwLnR4dApAQCAtMjMsNyArMjMsNiBAQAogCiBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTb3VwLmNwcAogcGxhdGZvcm0vbmV0
d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5jcHAKLXBsYXRmb3JtL25ldHdvcmsvc291cC9Db29r
aWVKYXJTb3VwLmNwcAogcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVNvdXAuY3BwCiBwbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU3RvcmFnZVNvdXAuY3BwCiBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvQ3JlZGVudGlhbFN0b3JhZ2VTb3VwLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24uY3BwCmluZGV4IDMwMmE4ZDY3ODliMGM5
OGE5NjBlMjMzYmE0MjgyY2QyZTc4MjY3M2UuLjkxMGZiZjk1NjgyMWZiNzBjNmU2MzI1MWYwYWI0
ODE1MjIzZjFlMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Q2FjaGVWYWxpZGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0NhY2hlVmFsaWRhdGlvbi5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJDb29raWVz
U3RyYXRlZ3kuaCIKICNpbmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCiAjaW5jbHVkZSAiTmV0d29y
a1N0b3JhZ2VTZXNzaW9uLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCkBAIC0zMzgsNyArMzM3LDcgQEAgc3RhdGlj
IFN0cmluZyBoZWFkZXJWYWx1ZUZvclZhcnkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBjb25zdCBTdHJpbmcmIGgKICAgICAgICAgYXV0byogY29va2llU3RyYXRlZ3kgPSBwbGF0Zm9y
bVN0cmF0ZWdpZXMoKSA/IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5jb29raWVzU3RyYXRlZ3koKSA6
IG51bGxwdHI7CiAgICAgICAgIGlmICghY29va2llU3RyYXRlZ3kpIHsKICAgICAgICAgICAgIEFT
U0VSVChzZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSwgcmVxdWVzdC5maXJzdFBhcnR5
Rm9yQ29va2llcygpLCBTYW1lU2l0ZUluZm86OmNyZWF0ZShyZXF1ZXN0KSwgcmVxdWVzdC51cmwo
KSwgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQsIGluY2x1ZGVTZWN1cmVDb29raWVzKS5maXJz
dDsKKyAgICAgICAgICAgIHJldHVybiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9y
YWdlU2Vzc2lvbigpLmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHJlcXVlc3QuZmlyc3RQ
YXJ0eUZvckNvb2tpZXMoKSwgU2FtZVNpdGVJbmZvOjpjcmVhdGUocmVxdWVzdCksIHJlcXVlc3Qu
dXJsKCksIHN0ZDo6bnVsbG9wdCwgc3RkOjpudWxsb3B0LCBpbmNsdWRlU2VjdXJlQ29va2llcyku
Zmlyc3Q7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvb2tpZVN0cmF0ZWd5LT5jb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShzZXNzaW9uSUQsIHJlcXVlc3QuZmlyc3RQYXJ0eUZvckNv
b2tpZXMoKSwgU2FtZVNpdGVJbmZvOjpjcmVhdGUocmVxdWVzdCksIHJlcXVlc3QudXJsKCksIHN0
ZDo6bnVsbG9wdCwgc3RkOjpudWxsb3B0LCBpbmNsdWRlU2VjdXJlQ29va2llcykuZmlyc3Q7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3Jr
U3RvcmFnZVNlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29y
a1N0b3JhZ2VTZXNzaW9uLmgKaW5kZXggNmU5OTM5M2RmMmI4OWQ2YzBmZmRhZGQ5ZjI0MWFiOGZj
MDkyZmI5My4uMDhhODJkZDVhM2QwODliM2JhNGY4YjBkZDU0MTYzNTQyODdlMjUxNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Np
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdl
U2Vzc2lvbi5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9XYWxsVGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAj
aWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShDRlVSTENPTk5FQ1RJT04pCkBAIC02NCw2ICs2NSwx
MCBAQCBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiBjbGFzcyBTb3VwTmV0d29ya1Nlc3Npb247CiAK
IHN0cnVjdCBDb29raWU7CitzdHJ1Y3QgQ29va2llUmVxdWVzdEhlYWRlckZpZWxkUHJveHk7Citz
dHJ1Y3QgU2FtZVNpdGVJbmZvOworCitlbnVtIGNsYXNzIEluY2x1ZGVTZWN1cmVDb29raWVzOwog
CiBjbGFzcyBOZXR3b3JrU3RvcmFnZVNlc3Npb24gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMTM3
LDEyICsxNDIsMjQgQEAgcHVibGljOgogICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0KCkg
Y29uc3Q7CiAjZW5kaWYKIAorICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgY29va2llc0VuYWJsZWQo
KSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENvb2tpZShjb25zdCBDb29raWUm
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENvb2tpZXMoY29uc3QgVmVjdG9yPENvb2tp
ZT4mLCBjb25zdCBVUkwmLCBjb25zdCBVUkwmIG1haW5Eb2N1bWVudFVSTCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRDb29raWVzRnJvbURPTShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNv
bnN0IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZy
YW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgY29uc3QgU3RyaW5nJikgY29u
c3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVDb29raWUoY29uc3QgQ29va2llJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVDb29raWUoY29uc3QgVVJMJiwgY29uc3Qg
U3RyaW5nJikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVBbGxDb29raWVz
KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5j
ZShXYWxsVGltZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVDb29raWVzRm9ySG9z
dG5hbWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb29raWVIb3N0TmFtZXMpOwogICAgIFdFQkNP
UkVfRVhQT1JUIFZlY3RvcjxDb29raWU+IGdldEFsbENvb2tpZXMoKTsKICAgICBXRUJDT1JFX0VY
UE9SVCBWZWN0b3I8Q29va2llPiBnZXRDb29raWVzKGNvbnN0IFVSTCYpOworICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNh
bWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQs
IHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgVmVjdG9yPENvb2tpZT4mKSBjb25zdDsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZsdXNoQ29va2llU3RvcmUoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9z
dG5hbWVzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29r
aWVzRm9yRE9NKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29u
c3QgVVJMJiwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1
aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcykgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBV
UkwmLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2
NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVzKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eSYpIGNvbnN0OworCiAKIHByaXZh
dGU6CiAgICAgc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxO
ZXR3b3JrU3RvcmFnZVNlc3Npb24+PiYgZ2xvYmFsU2Vzc2lvbk1hcCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybUNvb2tpZUphci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybUNvb2tpZUphci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODk0M2Q5Y2Y4MTgxZjYzODA0NjNlZTg3YmYxOTMxNzQ0
NzY1YzNjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1Db29raWVKYXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIFVSTDsKLWNsYXNzIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjsKLQotc3RydWN0IENvb2tp
ZTsKLXN0cnVjdCBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eTsKLXN0cnVjdCBTYW1lU2l0
ZUluZm87Ci0KLWVudW0gY2xhc3MgSW5jbHVkZVNlY3VyZUNvb2tpZXM7Ci0KLS8vIEZJWE1FOiBU
aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgTmV0d29ya1N0b3JhZ2VTZXNzaW9uIG1lbWJlciBmdW5j
dGlvbnMuCi0KLVdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZXNG
b3JET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5
LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90
PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVD
b29raWVzKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q29va2llc0Zyb21ET00oY29uc3QgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0
ZUluZm8mLCBjb25zdCBVUkwmLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIGNvbnN0IFN0cmluZyYpOwotV0VCQ09SRV9FWFBP
UlQgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mKTsKLVdF
QkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFVSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiwgc3RkOjpvcHRpb25hbDx1aW50
NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2Vj
dXJlQ29va2llcyk7Ci1XRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBj
b25zdCBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eSYpOwotV0VCQ09SRV9FWFBPUlQgYm9v
bCBnZXRSYXdDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFVSTCYg
Zmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiwgc3RkOjpvcHRpb25h
bDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBWZWN0
b3I8Q29va2llPiYpOwotV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVDb29raWUoY29uc3QgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJik7Ci1XRUJDT1JF
X0VYUE9SVCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiYsIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsKLVdFQkNPUkVfRVhQT1JUIHZv
aWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24m
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgY29va2llSG9zdE5hbWVzKTsKLVdFQkNPUkVfRVhQT1JU
IHZvaWQgZGVsZXRlQWxsQ29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mKTsKLVdF
QkNPUkVfRVhQT1JUIHZvaWQgZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoY29uc3QgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiwgV2FsbFRpbWUpOwotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmNwcApp
bmRleCA3NTlkNjNhNDY4NWJmZGFmYTcyNzAwNWJiNzQ0YzhhNTY3YWQxYWMzLi4zODliNmVhMDM2
NmE2OWFmYzY1Y2EzMGYxODU3MWRkZjQ0MGFlNGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5jcHAKQEAg
LTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5
LmgiCiAjaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1Db29raWVKYXIuaCIKICNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCIKICNp
bmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KIApAQCAtODUsNyArODQsNyBAQCBzdGF0aWMgc3RkOjpv
cHRpb25hbDxzdGQ6OnBhaXI8VmVjdG9yPHVpbnQ4X3Q+LCBib29sPj4gY29va2llRGF0YUZvckhh
bmRzaGFrZShjbwogICAgIAogICAgIFN0cmluZyBjb29raWVEYXRhU3RyaW5nOwogICAgIGJvb2wg
c2VjdXJlQ29va2llc0FjY2Vzc2VkID0gZmFsc2U7Ci0gICAgc3RkOjp0aWUoY29va2llRGF0YVN0
cmluZywgc2VjdXJlQ29va2llc0FjY2Vzc2VkKSA9IFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKCpuZXR3b3JrU3RvcmFnZVNlc3Npb24sIGhlYWRlckZpZWxkUHJveHkpOwor
ICAgIHN0ZDo6dGllKGNvb2tpZURhdGFTdHJpbmcsIHNlY3VyZUNvb2tpZXNBY2Nlc3NlZCkgPSBu
ZXR3b3JrU3RvcmFnZVNlc3Npb24tPmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGhlYWRl
ckZpZWxkUHJveHkpOwogICAgIGlmIChjb29raWVEYXRhU3RyaW5nLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIHN0ZDo6cGFpcjxWZWN0b3I8dWludDhfdD4sIGJvb2w+IHsgeyB9LCBzZWN1cmVD
b29raWVzQWNjZXNzZWQgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAppbmRleCAxZTBjNzRhMjdhYzA2OGY3NWE5ZjMz
MTBmZjc0Zjk2NzA5MDM1NGMzLi42OGQ2OGZiN2ZmNTRmOTY3YjBmZDg2NDQxYzEyZmEwNjc4ODkz
NzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tp
ZUphckNGTmV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nv
b2tpZUphckNGTmV0LmNwcApAQCAtMjQsNyArMjQsNiBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvb2tpZUphci5oIgogCiAjaWYgVVNFKENGVVJMQ09O
TkVDVElPTikKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
b2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0KaW5kZXggM2Ez
ZGYwZmE1MDM2Y2ExNTk5YmEzMjNiMDUxYWIzMDMyOTFiZmI5NC4uMjFiMTQ4NjUyZmE1NTk5NWU1
ZDcxZGVhZmM0ODZkZjQxZmQ4Yzg4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNv
Y29hLm1tCkBAIC0yNywxMSArMjcsMjcgQEAKICNpbXBvcnQgIk5ldHdvcmtTdG9yYWdlU2Vzc2lv
bi5oIgogCiAjaW1wb3J0ICJDb29raWUuaCIKKyNpbXBvcnQgIkNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFByb3h5LmgiCiAjaW1wb3J0ICJDb29raWVTdG9yYWdlT2JzZXJ2ZXIuaCIKKyNpbXBvcnQg
IkNvb2tpZXNTdHJhdGVneS5oIgorI2ltcG9ydCAiU2FtZVNpdGVJbmZvLmgiCiAjaW1wb3J0ICJV
UkwuaCIKICNpbXBvcnQgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+CiAjaW1wb3J0IDx3dGYv
QmxvY2tPYmpDRXhjZXB0aW9ucy5oPgorI2ltcG9ydCA8d3RmL09wdGlvbmFsLmg+CiAjaW1wb3J0
IDx3dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgorI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgorCitAaW50ZXJmYWNlIE5TVVJMICgpCistIChDRlVSTFJlZilfY2Z1cmw7CitAZW5kCisK
KyNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEwMTQwMCkgfHwgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTIwMDAwKQorQGludGVyZmFjZSBOU0hUVFBDb29raWVTdG9yYWdlIChTdGFnaW5n
KQorLSAodm9pZClfZ2V0Q29va2llc0ZvclVSTDooTlNVUkwgKil1cmwgbWFpbkRvY3VtZW50VVJM
OihOU1VSTCAqKW1haW5Eb2N1bWVudFVSTCBwYXJ0aXRpb246KE5TU3RyaW5nICopcGFydGl0aW9u
IHBvbGljeVByb3BlcnRpZXM6KE5TRGljdGlvbmFyeSopcHJvcHMgY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKE5TQXJyYXkgKikpY29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKV9zZXRDb29r
aWVzOihOU0FycmF5ICopY29va2llcyBmb3JVUkw6KE5TVVJMICopVVJMIG1haW5Eb2N1bWVudFVS
TDooTlNVUkwgKiltYWluRG9jdW1lbnRVUkwgcG9saWN5UHJvcGVydGllczooTlNEaWN0aW9uYXJ5
KikgcHJvcHM7CitAZW5kCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNTAs
NCArMTY2LDQxOCBAQCBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIGNyZWF0ZVByaXZhdGVTdG9yYWdl
U2Vzc2lvbihDRlN0cmluZ1JlZiBpZGVudGlmaWVyKQogICAgIHJldHVybiBzdG9yYWdlU2Vzc2lv
bi5sZWFrUmVmKCk7CiB9CiAKK3N0YXRpYyBOU0FycmF5ICpodHRwQ29va2llcyhDRkhUVFBDb29r
aWVTdG9yYWdlUmVmIGNvb2tpZVN0b3JhZ2UpCit7CisgICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2
aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOworICAgIGlmICgh
Y29va2llU3RvcmFnZSkKKyAgICAgICAgcmV0dXJuIFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFy
ZWRIVFRQQ29va2llU3RvcmFnZV0gY29va2llc107CisgICAgCisgICAgYXV0byBjb29raWVzID0g
YWRvcHRDRihDRkhUVFBDb29raWVTdG9yYWdlQ29weUNvb2tpZXMoY29va2llU3RvcmFnZSkpOwor
ICAgIHJldHVybiBbTlNIVFRQQ29va2llIF9jZjJuc0Nvb2tpZXM6Y29va2llcy5nZXQoKV07Cit9
CisKK3N0YXRpYyB2b2lkIGRlbGV0ZUhUVFBDb29raWUoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBj
b29raWVTdG9yYWdlLCBOU0hUVFBDb29raWUgKmNvb2tpZSkKK3sKKyAgICBBU1NFUlQoaGFzUHJv
Y2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7Cisg
ICAgaWYgKCFjb29raWVTdG9yYWdlKSB7CisgICAgICAgIFtbTlNIVFRQQ29va2llU3RvcmFnZSBz
aGFyZWRIVFRQQ29va2llU3RvcmFnZV0gZGVsZXRlQ29va2llOmNvb2tpZV07CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgQ0ZIVFRQQ29va2llU3RvcmFnZURlbGV0ZUNvb2tpZShj
b29raWVTdG9yYWdlLCBbY29va2llIF9HZXRJbnRlcm5hbENGSFRUUENvb2tpZV0pOworfQorCisj
aWYgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MDE0MDApIHx8IChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDEyMDAwMCkKK3N0YXRpYyBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBwb2xpY3lQcm9w
ZXJ0aWVzKGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBOU1VSTCAqdXJsKQorewor
ICAgIHN0YXRpYyBOU1VSTCAqZW1wdHlVUkwgPSBbW05TVVJMIGFsbG9jXSBpbml0V2l0aFN0cmlu
ZzpAIiJdOworICAgIE5TRGljdGlvbmFyeSAqcG9saWN5UHJvcGVydGllcyA9IEB7CisgICAgICAg
IEAiX2tDRkhUVFBDb29raWVQb2xpY3lQcm9wZXJ0eVNpdGVGb3JDb29raWVzIjogc2FtZVNpdGVJ
bmZvLmlzU2FtZVNpdGUgPyB1cmwgOiBlbXB0eVVSTCwKKyAgICAgICAgQCJfa0NGSFRUUENvb2tp
ZVBvbGljeVByb3BlcnR5SXNUb3BMZXZlbE5hdmlnYXRpb24iOiBbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6c2FtZVNpdGVJbmZvLmlzVG9wU2l0ZV0sCisgICAgfTsKKyAgICByZXR1cm4gcG9saWN5
UHJvcGVydGllczsKK30KKyNlbmRpZgorCitzdGF0aWMgTlNBcnJheSAqY29va2llc0ZvclVSTChO
U0hUVFBDb29raWVTdG9yYWdlICpzdG9yYWdlLCBOU1VSTCAqdXJsLCBOU1VSTCAqbWFpbkRvY3Vt
ZW50VVJMLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFNhbWVTaXRlSW5mbz4mIHNhbWVTaXRlSW5mbywg
TlNTdHJpbmcgKnBhcnRpdGlvbiA9IG51bGxwdHIpCit7CisgICAgLy8gVGhlIF9nZXRDb29raWVz
Rm9yVVJMOiBtZXRob2QgY2FsbHMgdGhlIGNvbXBsZXRpb25IYW5kbGVyIHN5bmNocm9ub3VzbHku
IFdlIHVzZSBzdGQ6Om9wdGlvbmFsPD4gdG8gZW5zdXJlIHRoaXMgaW52YXJpYW50LgorICAgIHN0
ZDo6b3B0aW9uYWw8UmV0YWluUHRyPE5TQXJyYXkgKj4+IGNvb2tpZXNQdHI7CisgICAgYXV0byBj
b21wbGV0aW9uSGFuZGxlciA9IFsmY29va2llc1B0cl0gKE5TQXJyYXkgKmNvb2tpZXMpIHsgY29v
a2llc1B0ciA9IHJldGFpblB0cihjb29raWVzKTsgfTsKKyNpZiAoUExBVEZPUk0oTUFDKSAmJiBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTQwMCkgfHwgKFBMQVRGT1JNKElP
UykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTIwMDAwKQorICAgIGlm
IChbc3RvcmFnZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF9nZXRDb29raWVzRm9yVVJM
Om1haW5Eb2N1bWVudFVSTDpwYXJ0aXRpb246cG9saWN5UHJvcGVydGllczpjb21wbGV0aW9uSGFu
ZGxlcjopXSkKKyAgICAgICAgW3N0b3JhZ2UgX2dldENvb2tpZXNGb3JVUkw6dXJsIG1haW5Eb2N1
bWVudFVSTDptYWluRG9jdW1lbnRVUkwgcGFydGl0aW9uOnBhcnRpdGlvbiBwb2xpY3lQcm9wZXJ0
aWVzOnNhbWVTaXRlSW5mbyA/IHBvbGljeVByb3BlcnRpZXMoc2FtZVNpdGVJbmZvLnZhbHVlKCks
IHVybCkuZ2V0KCkgOiBudWxscHRyIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVy
XTsKKyAgICBlbHNlCisgICAgICAgIFtzdG9yYWdlIF9nZXRDb29raWVzRm9yVVJMOnVybCBtYWlu
RG9jdW1lbnRVUkw6bWFpbkRvY3VtZW50VVJMIHBhcnRpdGlvbjpwYXJ0aXRpb24gY29tcGxldGlv
bkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOworI2Vsc2UKKyAgICBbc3RvcmFnZSBfZ2V0Q29v
a2llc0ZvclVSTDp1cmwgbWFpbkRvY3VtZW50VVJMOm1haW5Eb2N1bWVudFVSTCBwYXJ0aXRpb246
cGFydGl0aW9uIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKKyAgICBVTlVT
RURfUEFSQU0oc2FtZVNpdGVJbmZvKTsKKyNlbmRpZgorICAgIEFTU0VSVCghIWNvb2tpZXNQdHIp
OworICAgIHJldHVybiBjb29raWVzUHRyLT5hdXRvcmVsZWFzZSgpOworfQorCitzdGF0aWMgdm9p
ZCBzZXRIVFRQQ29va2llc0ZvclVSTChDRkhUVFBDb29raWVTdG9yYWdlUmVmIGNvb2tpZVN0b3Jh
Z2UsIE5TQXJyYXkgKmNvb2tpZXMsIE5TVVJMICp1cmwsIE5TVVJMICptYWluRG9jdW1lbnRVUkws
IGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvKQoreworICAgIEFTU0VSVChoYXNQcm9j
ZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKKyAg
ICBpZiAoIWNvb2tpZVN0b3JhZ2UpIHsKKyNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTQwMCkgfHwgKFBMQVRGT1JNKElPUykgJiYgX19J
UEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTIwMDAwKQorICAgICAgICBpZiAoW05T
SFRUUENvb2tpZVN0b3JhZ2UgaW5zdGFuY2VzUmVzcG9uZFRvU2VsZWN0b3I6QHNlbGVjdG9yKF9z
ZXRDb29raWVzOmZvclVSTDptYWluRG9jdW1lbnRVUkw6cG9saWN5UHJvcGVydGllczopXSkKKyAg
ICAgICAgICAgIFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0g
X3NldENvb2tpZXM6Y29va2llcyBmb3JVUkw6dXJsIG1haW5Eb2N1bWVudFVSTDptYWluRG9jdW1l
bnRVUkwgcG9saWN5UHJvcGVydGllczpwb2xpY3lQcm9wZXJ0aWVzKHNhbWVTaXRlSW5mbywgdXJs
KS5nZXQoKV07CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgW1tOU0hUVFBDb29r
aWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBzZXRDb29raWVzOmNvb2tpZXMgZm9y
VVJMOnVybCBtYWluRG9jdW1lbnRVUkw6bWFpbkRvY3VtZW50VVJMXTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwMTQwMCkgfHwgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTIwMDAwKQorICAgIGlmIChbTlNIVFRQQ29va2llU3RvcmFnZSBp
bnN0YW5jZXNSZXNwb25kVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3NldENvb2tpZXM6Zm9yVVJMOm1h
aW5Eb2N1bWVudFVSTDpwb2xpY3lQcm9wZXJ0aWVzOildKSB7CisgICAgICAgIC8vIEZJWE1FOiBT
dG9wIGNyZWF0aW5nIGEgbmV3IE5TSFRUUENvb2tpZVN0b3JhZ2Ugb2JqZWN0IGVhY2ggdGltZSB3
ZSB3YW50IHRvIHF1ZXJ5IHRoZSBjb29raWUgamFyLgorICAgICAgICAvLyBOZXR3b3JrU3RvcmFn
ZVNlc3Npb24gY291bGQgaW5zdGVhZCBrZWVwIGEgTlNIVFRQQ29va2llU3RvcmFnZSBvYmplY3Qg
Zm9yIHVzLgorICAgICAgICBSZXRhaW5QdHI8TlNIVFRQQ29va2llU3RvcmFnZT4gbnNDb29raWVT
dG9yYWdlID0gYWRvcHROUyhbW05TSFRUUENvb2tpZVN0b3JhZ2UgYWxsb2NdIF9pbml0V2l0aENG
SFRUUENvb2tpZVN0b3JhZ2U6Y29va2llU3RvcmFnZV0pOworICAgICAgICBbbnNDb29raWVTdG9y
YWdlIF9zZXRDb29raWVzOmNvb2tpZXMgZm9yVVJMOnVybCBtYWluRG9jdW1lbnRVUkw6bWFpbkRv
Y3VtZW50VVJMIHBvbGljeVByb3BlcnRpZXM6cG9saWN5UHJvcGVydGllcyhzYW1lU2l0ZUluZm8s
IHVybCkuZ2V0KCldOworICAgIH0gZWxzZSB7CisjZW5kaWYKKyAgICAgICAgYXV0byBjZkNvb2tp
ZXMgPSBhZG9wdENGKFtOU0hUVFBDb29raWUgX25zMmNmQ29va2llczpjb29raWVzXSk7CisgICAg
ICAgIENGSFRUUENvb2tpZVN0b3JhZ2VTZXRDb29raWVzKGNvb2tpZVN0b3JhZ2UsIGNmQ29va2ll
cy5nZXQoKSwgW3VybCBfY2Z1cmxdLCBbbWFpbkRvY3VtZW50VVJMIF9jZnVybF0pOworI2lmIChQ
TEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNDAw
KSB8fCAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMjAwMDApCisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2FtZVNpdGVJbmZvKTsK
KyNlbmRpZgorfQorCitzdGF0aWMgTlNBcnJheSAqaHR0cENvb2tpZXNGb3JVUkwoQ0ZIVFRQQ29v
a2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlLCBOU1VSTCAqZmlyc3RQYXJ0eSwgY29uc3Qgc3Rk
OjpvcHRpb25hbDxTYW1lU2l0ZUluZm8+JiBzYW1lU2l0ZUluZm8sIE5TVVJMICp1cmwpCit7Cisg
ICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNz
UmF3Q29va2llcykpOworICAgIGlmICghY29va2llU3RvcmFnZSkKKyAgICAgICAgY29va2llU3Rv
cmFnZSA9IF9DRkhUVFBDb29raWVTdG9yYWdlR2V0RGVmYXVsdChrQ0ZBbGxvY2F0b3JEZWZhdWx0
KTsKKworICAgIC8vIEZJWE1FOiBTdG9wIGNyZWF0aW5nIGEgbmV3IE5TSFRUUENvb2tpZVN0b3Jh
Z2Ugb2JqZWN0IGVhY2ggdGltZSB3ZSB3YW50IHRvIHF1ZXJ5IHRoZSBjb29raWUgamFyLgorICAg
IC8vIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiBjb3VsZCBpbnN0ZWFkIGtlZXAgYSBOU0hUVFBDb29r
aWVTdG9yYWdlIG9iamVjdCBmb3IgdXMuCisgICAgUmV0YWluUHRyPE5TSFRUUENvb2tpZVN0b3Jh
Z2U+IG5zQ29va2llU3RvcmFnZSA9IGFkb3B0TlMoW1tOU0hUVFBDb29raWVTdG9yYWdlIGFsbG9j
XSBfaW5pdFdpdGhDRkhUVFBDb29raWVTdG9yYWdlOmNvb2tpZVN0b3JhZ2VdKTsKKyAgICByZXR1
cm4gY29va2llc0ZvclVSTChuc0Nvb2tpZVN0b3JhZ2UuZ2V0KCksIHVybCwgZmlyc3RQYXJ0eSwg
c2FtZVNpdGVJbmZvKTsKK30KKworc3RhdGljIFJldGFpblB0cjxOU0FycmF5PiBmaWx0ZXJDb29r
aWVzKE5TQXJyYXkgKnVuZmlsdGVyZWRDb29raWVzKQoreworICAgIEFTU0VSVChoYXNQcm9jZXNz
UHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKKyAgICBO
U1VJbnRlZ2VyIGNvdW50ID0gW3VuZmlsdGVyZWRDb29raWVzIGNvdW50XTsKKyAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlQXJyYXk+IGZpbHRlcmVkQ29va2llcyA9IGFkb3B0TlMoW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpjb3VudF0pOworCisgICAgZm9yIChOU1VJbnRl
Z2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBOU0hUVFBDb29raWUgKmNvb2tp
ZSA9IChOU0hUVFBDb29raWUgKilbdW5maWx0ZXJlZENvb2tpZXMgb2JqZWN0QXRJbmRleDppXTsK
KworICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTYzMjg4Mz4gT24gMTAuNSwgTlNIVFRQQ29v
a2llU3RvcmFnZSB3b3VsZCBzdG9yZSBhbiBlbXB0eSBjb29raWUsCisgICAgICAgIC8vIHdoaWNo
IHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIuIFdlIGhhdmUgYSB3b3JrYXJvdW5kIGluIHNl
dENvb2tpZXMoKSB0byBwcmV2ZW50CisgICAgICAgIC8vIHRoYXQsIGJ1dCB3ZSBhbHNvIG5lZWQg
dG8gYXZvaWQgc2VuZGluZyBjb29raWVzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHN0b3JlZCwgYW5k
CisgICAgICAgIC8vIHRoZXJlJ3Mgbm8gaGFybSB0byBkb2luZyB0aGlzIGNoZWNrIGJlY2F1c2Ug
c3VjaCBhIGNvb2tpZSBpcyBuZXZlciB2YWxpZC4KKyAgICAgICAgaWYgKCFbW2Nvb2tpZSBuYW1l
XSBsZW5ndGhdKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKFtjb29raWUg
aXNIVFRQT25seV0pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBbZmlsdGVyZWRD
b29raWVzLmdldCgpIGFkZE9iamVjdDpjb29raWVdOworICAgIH0KKworICAgIHJldHVybiBmaWx0
ZXJlZENvb2tpZXM7Cit9CisKKyNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklO
RykKKworc3RhdGljIE5TQXJyYXkgKmFwcGx5UGFydGl0aW9uVG9Db29raWVzKE5TU3RyaW5nICpw
YXJ0aXRpb24sIE5TQXJyYXkgKmNvb2tpZXMpCit7CisgICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2
aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOworCisgICAgLy8g
RklYTUUgMjQ3NDc3Mzk6IENGTmV0d29yayBzaG91bGQgZXhwb3NlIHRoaXMga2V5IGFzIFNQSQor
ICAgIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IHBhcnRpdGlvbktleSA9IEAiU3RvcmFnZVBhcnRp
dGlvbiI7CisKKyAgICBOU011dGFibGVBcnJheSAqcGFydGl0aW9uZWRDb29raWVzID0gW05TTXV0
YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmNvb2tpZXMuY291bnRdOworICAgIGZvciAoTlNI
VFRQQ29va2llICpjb29raWUgaW4gY29va2llcykgeworICAgICAgICBSZXRhaW5QdHI8TlNNdXRh
YmxlRGljdGlvbmFyeT4gcHJvcGVydGllcyA9IGFkb3B0TlMoW2Nvb2tpZS5wcm9wZXJ0aWVzIG11
dGFibGVDb3B5XSk7CisgICAgICAgIFtwcm9wZXJ0aWVzIHNldE9iamVjdDpwYXJ0aXRpb24gZm9y
S2V5OnBhcnRpdGlvbktleV07CisgICAgICAgIFtwYXJ0aXRpb25lZENvb2tpZXMgYWRkT2JqZWN0
OltOU0hUVFBDb29raWUgY29va2llV2l0aFByb3BlcnRpZXM6cHJvcGVydGllcy5nZXQoKV1dOwor
ICAgIH0KKworICAgIHJldHVybiBwYXJ0aXRpb25lZENvb2tpZXM7Cit9CisKK3N0YXRpYyBib29s
IGNvb2tpZXNBcmVCbG9ja2VkRm9yVVJMKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vz
c2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKK3sKKyAgICByZXR1
cm4gc2Vzc2lvbi5zaG91bGRCbG9ja0Nvb2tpZXMoZmlyc3RQYXJ0eSwgdXJsKTsKK30KKworc3Rh
dGljIE5TQXJyYXkgKmNvb2tpZXNJblBhcnRpdGlvbkZvclVSTChjb25zdCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJ
bmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90
PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQpCit7CisgICAgQVNTRVJU
KGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2ll
cykpOworICAgIFN0cmluZyBwYXJ0aXRpb24gPSBzZXNzaW9uLmNvb2tpZVN0b3JhZ2VQYXJ0aXRp
b24oZmlyc3RQYXJ0eSwgdXJsLCBmcmFtZUlELCBwYWdlSUQpOworICAgIGlmIChwYXJ0aXRpb24u
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgLy8gRklYTUU6IFN0b3AgY3Jl
YXRpbmcgYSBuZXcgTlNIVFRQQ29va2llU3RvcmFnZSBvYmplY3QgZWFjaCB0aW1lIHdlIHdhbnQg
dG8gcXVlcnkgdGhlIGNvb2tpZSBqYXIuCisgICAgLy8gTmV0d29ya1N0b3JhZ2VTZXNzaW9uIGNv
dWxkIGluc3RlYWQga2VlcCBhIE5TSFRUUENvb2tpZVN0b3JhZ2Ugb2JqZWN0IGZvciB1cy4KKyAg
ICBSZXRhaW5QdHI8TlNIVFRQQ29va2llU3RvcmFnZT4gY29va2llU3RvcmFnZTsKKyAgICBpZiAo
YXV0byBzdG9yYWdlID0gc2Vzc2lvbi5jb29raWVTdG9yYWdlKCkpCisgICAgICAgIGNvb2tpZVN0
b3JhZ2UgPSBhZG9wdE5TKFtbTlNIVFRQQ29va2llU3RvcmFnZSBhbGxvY10gX2luaXRXaXRoQ0ZI
VFRQQ29va2llU3RvcmFnZTpzdG9yYWdlLmdldCgpXSk7CisgICAgZWxzZQorICAgICAgICBjb29r
aWVTdG9yYWdlID0gW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2Vd
OworICAgIHJldHVybiBjb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHVybCwgZmly
c3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCBwYXJ0aXRpb24pOworfQorCisjZW5kaWYgLy8gSEFWRShD
Rk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCisgICAgCitzdGF0aWMgTlNBcnJheSAqY29v
a2llc0ZvclVSTChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVS
TCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVS
TCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVp
bnQ2NF90PiBwYWdlSUQpCit7CisjaWYgSEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05J
TkcpCisgICAgaWYgKGNvb2tpZXNBcmVCbG9ja2VkRm9yVVJMKHNlc3Npb24sIGZpcnN0UGFydHks
IHVybCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgaWYgKE5TQXJyYXkgKmNvb2tp
ZXMgPSBjb29raWVzSW5QYXJ0aXRpb25Gb3JVUkwoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgc2FtZVNp
dGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCkpCisgICAgICAgIHJldHVybiBjb29raWVzOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7CisgICAgVU5VU0VEX1BBUkFNKHBhZ2VJ
RCk7CisjZW5kaWYKKyAgICByZXR1cm4gaHR0cENvb2tpZXNGb3JVUkwoc2Vzc2lvbi5jb29raWVT
dG9yYWdlKCkuZ2V0KCksIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsKTsKK30KKworZW51
bSBJbmNsdWRlSFRUUE9ubHlPck5vdCB7IERvTm90SW5jbHVkZUhUVFBPbmx5LCBJbmNsdWRlSFRU
UE9ubHkgfTsKK3N0YXRpYyBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVzRm9yU2Vzc2lv
bihjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBz
dGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBw
YWdlSUQsIEluY2x1ZGVIVFRQT25seU9yTm90IGluY2x1ZGVIVFRQT25seSwgSW5jbHVkZVNlY3Vy
ZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpCit7CisgICAgQVNTRVJUKGhhc1Byb2Nlc3NQ
cml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOworCisgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgTlNBcnJheSAqY29va2llcyA9IGNv
b2tpZXNGb3JVUkwoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1l
SUQsIHBhZ2VJRCk7CisgICAgaWYgKCFbY29va2llcyBjb3VudF0pCisgICAgICAgIHJldHVybiB7
IFN0cmluZygpLCBmYWxzZSB9OyAvLyBSZXR1cm4gYSBudWxsIHN0cmluZywgbm90IGFuIGVtcHR5
IG9uZSB0aGF0IFN0cmluZ0J1aWxkZXIgd291bGQgY3JlYXRlIGJlbG93LgorCisgICAgU3RyaW5n
QnVpbGRlciBjb29raWVzQnVpbGRlcjsKKyAgICBib29sIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMg
PSBmYWxzZTsKKyAgICBmb3IgKE5TSFRUUENvb2tpZSAqY29va2llIGluIGNvb2tpZXMpIHsKKyAg
ICAgICAgaWYgKCFbW2Nvb2tpZSBuYW1lXSBsZW5ndGhdKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgaWYgKCFpbmNsdWRlSFRUUE9ubHkgJiYgW2Nvb2tpZSBpc0hUVFBPbmx5XSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChbY29va2llIGlzU2VjdXJlXSkg
eworICAgICAgICAgICAgZGlkQWNjZXNzU2VjdXJlQ29va2llcyA9IHRydWU7CisgICAgICAgICAg
ICBpZiAoaW5jbHVkZVNlY3VyZUNvb2tpZXMgPT0gSW5jbHVkZVNlY3VyZUNvb2tpZXM6Ok5vKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFjb29r
aWVzQnVpbGRlci5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb29raWVzQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCI7ICIpOworCisgICAgICAgIGNvb2tpZXNCdWlsZGVyLmFwcGVuZChbY29va2llIG5h
bWVdKTsKKyAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kKCc9Jyk7CisgICAgICAgIGNvb2tp
ZXNCdWlsZGVyLmFwcGVuZChbY29va2llIHZhbHVlXSk7CisgICAgfQorICAgIHJldHVybiB7IGNv
b2tpZXNCdWlsZGVyLnRvU3RyaW5nKCksIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMgfTsKKworICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIHsgU3RyaW5nKCksIGZhbHNl
IH07Cit9CisKK3N0YXRpYyB2b2lkIGRlbGV0ZUFsbEhUVFBDb29raWVzKENGSFRUUENvb2tpZVN0
b3JhZ2VSZWYgY29va2llU3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVn
ZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7CisKKyAgICBpZiAoIWNv
b2tpZVN0b3JhZ2UpIHsKKyAgICAgICAgTlNIVFRQQ29va2llU3RvcmFnZSAqY29va2llU3RvcmFn
ZSA9IFtOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXTsKKyAgICAg
ICAgTlNBcnJheSAqY29va2llcyA9IFtjb29raWVTdG9yYWdlIGNvb2tpZXNdOworICAgICAgICBp
ZiAoIWNvb2tpZXMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZm9yIChOU0hUVFBD
b29raWUgKmNvb2tpZSBpbiBjb29raWVzKQorICAgICAgICAgICAgW2Nvb2tpZVN0b3JhZ2UgZGVs
ZXRlQ29va2llOmNvb2tpZV07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDRkhUVFBD
b29raWVTdG9yYWdlRGVsZXRlQWxsQ29va2llcyhjb29raWVTdG9yYWdlKTsKK30KKworc3RkOjpw
YWlyPFN0cmluZywgYm9vbD4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVzRm9yRE9NKGNv
bnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNv
bnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlv
bmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVD
b29raWVzKSBjb25zdAoreworICAgIHJldHVybiBjb29raWVzRm9yU2Vzc2lvbigqdGhpcywgZmly
c3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgRG9Ob3RJbmNsdWRl
SFRUUE9ubHksIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKK30KKworc3RkOjpwYWlyPFN0cmluZywg
Ym9vbD4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZv
LCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpv
cHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2Vj
dXJlQ29va2llcykgY29uc3QKK3sKKyAgICByZXR1cm4gY29va2llc0ZvclNlc3Npb24oKnRoaXMs
IGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIEluY2x1ZGVI
VFRQT25seSwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOworfQorCitzdGQ6OnBhaXI8U3RyaW5nLCBi
b29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KGNvbnN0IENvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5JiBoZWFkZXJGaWVsZFByb3h5KSBj
b25zdAoreworICAgIHJldHVybiBjb29raWVzRm9yU2Vzc2lvbigqdGhpcywgaGVhZGVyRmllbGRQ
cm94eS5maXJzdFBhcnR5LCBoZWFkZXJGaWVsZFByb3h5LnNhbWVTaXRlSW5mbywgaGVhZGVyRmll
bGRQcm94eS51cmwsIGhlYWRlckZpZWxkUHJveHkuZnJhbWVJRCwgaGVhZGVyRmllbGRQcm94eS5w
YWdlSUQsIEluY2x1ZGVIVFRQT25seSwgaGVhZGVyRmllbGRQcm94eS5pbmNsdWRlU2VjdXJlQ29v
a2llcyk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVzRnJvbURP
TShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZv
LCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpv
cHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cikgY29uc3QK
K3sKKyAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5B
Y2Nlc3NSYXdDb29raWVzKSk7CisKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisK
KyAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTYzMjg4Mz4gT24gMTAuNSwgTlNIVFRQQ29va2llU3Rv
cmFnZSB3b3VsZCBzdG9yZSBhbiBlbXB0eSBjb29raWUsCisgICAgLy8gd2hpY2ggd291bGQgYmUg
c2VudCBhcyAiQ29va2llOiA9Ii4KKyAgICBpZiAoY29va2llU3RyLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY1MzE+LCA8cmRhcjovLzQ0MDkwMzQ+CisgICAgLy8gY29va2llc1dpdGhSZXNwb25zZUhl
YWRlckZpZWxkcyBkb2Vzbid0IHBhcnNlIGNvb2tpZXMgd2l0aG91dCBhIHZhbHVlCisgICAgU3Ry
aW5nIGNvb2tpZVN0cmluZyA9IGNvb2tpZVN0ci5jb250YWlucygnPScpID8gY29va2llU3RyIDog
Y29va2llU3RyICsgIj0iOworCisgICAgTlNVUkwgKmNvb2tpZVVSTCA9IHVybDsKKyAgICBOU0Rp
Y3Rpb25hcnkgKmhlYWRlckZpZWxkcyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmpl
Y3Q6Y29va2llU3RyaW5nIGZvcktleTpAIlNldC1Db29raWUiXTsKKworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBOU0FycmF5ICp1bmZpbHRlcmVkQ29va2llcyA9IFtOU0hUVFBDb29raWUgX3BhcnNl
ZENvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHM6aGVhZGVyRmllbGRzIGZvclVSTDpjb29r
aWVVUkxdOworI2Vsc2UKKyAgICBOU0FycmF5ICp1bmZpbHRlcmVkQ29va2llcyA9IFtOU0hUVFBD
b29raWUgY29va2llc1dpdGhSZXNwb25zZUhlYWRlckZpZWxkczpoZWFkZXJGaWVsZHMgZm9yVVJM
OmNvb2tpZVVSTF07CisjZW5kaWYKKworICAgIFJldGFpblB0cjxOU0FycmF5PiBmaWx0ZXJlZENv
b2tpZXMgPSBmaWx0ZXJDb29raWVzKHVuZmlsdGVyZWRDb29raWVzKTsKKyAgICBBU1NFUlQoW2Zp
bHRlcmVkQ29va2llcy5nZXQoKSBjb3VudF0gPD0gMSk7CisKKyNpZiBIQVZFKENGTkVUV09SS19T
VE9SQUdFX1BBUlRJVElPTklORykKKyAgICBpZiAoc2hvdWxkQmxvY2tDb29raWVzKGZpcnN0UGFy
dHksIHVybCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBwYXJ0aXRpb24gPSBjb29r
aWVTdG9yYWdlUGFydGl0aW9uKGZpcnN0UGFydHksIHVybCwgZnJhbWVJRCwgcGFnZUlEKTsKKyAg
ICBpZiAoIXBhcnRpdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIGZpbHRlcmVkQ29va2llcyA9IGFw
cGx5UGFydGl0aW9uVG9Db29raWVzKHBhcnRpdGlvbiwgZmlsdGVyZWRDb29raWVzLmdldCgpKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGZyYW1lSUQpOworICAgIFVOVVNFRF9QQVJBTShwYWdl
SUQpOworI2VuZGlmCisKKyAgICBzZXRIVFRQQ29va2llc0ZvclVSTChjb29raWVTdG9yYWdlKCku
Z2V0KCksIGZpbHRlcmVkQ29va2llcy5nZXQoKSwgY29va2llVVJMLCBmaXJzdFBhcnR5LCBzYW1l
U2l0ZUluZm8pOworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKworc3RhdGlj
IE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSBodHRwQ29va2llQWNjZXB0UG9saWN5KENGSFRUUENv
b2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoaGFzUHJvY2Vzc1By
aXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7CisKKyAgICBp
ZiAoIWNvb2tpZVN0b3JhZ2UpCisgICAgICAgIHJldHVybiBbW05TSFRUUENvb2tpZVN0b3JhZ2Ug
c2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIGNvb2tpZUFjY2VwdFBvbGljeV07CisKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8TlNIVFRQQ29va2llQWNjZXB0UG9saWN5PihDRkhUVFBDb29raWVTdG9y
YWdlR2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UpKTsKK30KKworYm9vbCBOZXR3
b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZXNFbmFibGVkKCkgY29uc3QKK3sKKyAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kgY29v
a2llQWNjZXB0UG9saWN5ID0gaHR0cENvb2tpZUFjY2VwdFBvbGljeShjb29raWVTdG9yYWdlKCku
Z2V0KCkpOworICAgIHJldHVybiBjb29raWVBY2NlcHRQb2xpY3kgPT0gTlNIVFRQQ29va2llQWNj
ZXB0UG9saWN5QWx3YXlzIHx8IGNvb2tpZUFjY2VwdFBvbGljeSA9PSBOU0hUVFBDb29raWVBY2Nl
cHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbiB8fCBjb29raWVBY2NlcHRQb2xpY3kg
PT0gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5RXhjbHVzaXZlbHlGcm9tTWFpbkRvY3VtZW50RG9t
YWluOworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRSYXdDb29raWVzKGNvbnN0IFVS
TCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVS
TCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVp
bnQ2NF90PiBwYWdlSUQsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKSBjb25zdAoreworICAg
IHJhd0Nvb2tpZXMuY2xlYXIoKTsKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisK
KyAgICBOU0FycmF5ICpjb29raWVzID0gY29va2llc0ZvclVSTCgqdGhpcywgZmlyc3RQYXJ0eSwg
c2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCk7CisgICAgTlNVSW50ZWdlciBjb3Vu
dCA9IFtjb29raWVzIGNvdW50XTsKKyAgICByYXdDb29raWVzLnJlc2VydmVDYXBhY2l0eShjb3Vu
dCk7CisgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAg
ICBOU0hUVFBDb29raWUgKmNvb2tpZSA9IChOU0hUVFBDb29raWUgKilbY29va2llcyBvYmplY3RB
dEluZGV4OmldOworICAgICAgICByYXdDb29raWVzLnVuY2hlY2tlZEFwcGVuZCh7IGNvb2tpZSB9
KTsKKyAgICB9CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llKGNvbnN0
IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpIGNvbnN0Cit7CisgICAgQVNTRVJU
KGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2ll
cykpOworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgUmV0YWluUHRy
PENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSB0aGlzLT5jb29raWVTdG9y
YWdlKCk7CisgICAgTlNBcnJheSAqY29va2llcyA9IGh0dHBDb29raWVzRm9yVVJMKGNvb2tpZVN0
b3JhZ2UuZ2V0KCksIG5pbCwgc3RkOjpudWxsb3B0LCB1cmwpOworCisgICAgTlNTdHJpbmcgKmNv
b2tpZU5hbWVTdHJpbmcgPSBjb29raWVOYW1lOworCisgICAgTlNVSW50ZWdlciBjb3VudCA9IFtj
b29raWVzIGNvdW50XTsKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7CisgICAgICAgIE5TSFRUUENvb2tpZSAqY29va2llID0gKE5TSFRUUENvb2tpZSAqKVtjb29r
aWVzIG9iamVjdEF0SW5kZXg6aV07CisgICAgICAgIGlmIChbW2Nvb2tpZSBuYW1lXSBpc0VxdWFs
VG9TdHJpbmc6Y29va2llTmFtZVN0cmluZ10pCisgICAgICAgICAgICBkZWxldGVIVFRQQ29va2ll
KGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZSk7CisgICAgfQorCisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQoreworICAgIEJFR0lO
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIE5TQXJyYXkgKmNvb2tpZXMgPSBodHRwQ29v
a2llcyhjb29raWVTdG9yYWdlKCkuZ2V0KCkpOworICAgIAorICAgIGZvciAoTlNIVFRQQ29va2ll
KiBjb29raWUgaW4gY29va2llcykKKyAgICAgICAgaG9zdG5hbWVzLmFkZChbY29va2llIGRvbWFp
bl0pOworICAgIAorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3ZvaWQgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKCkKK3sKKyAgICBkZWxldGVBbGxI
VFRQQ29va2llcyhjb29raWVTdG9yYWdlKCkuZ2V0KCkpOworfQorCit2b2lkIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgaG9zdG5hbWVzKQoreworICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQ
cml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKKworICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKKworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29r
aWVTdG9yYWdlID0gdGhpcy0+Y29va2llU3RvcmFnZSgpOworICAgIE5TQXJyYXkgKmNvb2tpZXMg
PSBodHRwQ29va2llcyhjb29raWVTdG9yYWdlLmdldCgpKTsKKyAgICBpZiAoIWNvb2tpZXMpCisg
ICAgICAgIHJldHVybjsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmV0YWluUHRyPE5T
SFRUUENvb2tpZT4+PiBjb29raWVzQnlEb21haW47CisgICAgZm9yIChOU0hUVFBDb29raWUqIGNv
b2tpZSBpbiBjb29raWVzKSB7CisgICAgICAgIGF1dG8mIGNvb2tpZXMgPSBjb29raWVzQnlEb21h
aW4uYWRkKGNvb2tpZS5kb21haW4sIFZlY3RvcjxSZXRhaW5QdHI8TlNIVFRQQ29va2llPj4oKSku
aXRlcmF0b3ItPnZhbHVlOworICAgICAgICBjb29raWVzLmFwcGVuZChjb29raWUpOworICAgIH0K
KworICAgIGZvciAoY29uc3QgYXV0byYgaG9zdG5hbWUgOiBob3N0bmFtZXMpIHsKKyAgICAgICAg
YXV0byBpdCA9IGNvb2tpZXNCeURvbWFpbi5maW5kKGhvc3RuYW1lKTsKKyAgICAgICAgaWYgKGl0
ID09IGNvb2tpZXNCeURvbWFpbi5lbmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGZvciAoYXV0byYgY29va2llIDogaXQtPnZhbHVlKQorICAgICAgICAgICAgZGVsZXRlSFRU
UENvb2tpZShjb29raWVTdG9yYWdlLmdldCgpLCBjb29raWUuZ2V0KCkpOworICAgIH0KKworICAg
IFtuc0Nvb2tpZVN0b3JhZ2UoKSBfc2F2ZUNvb2tpZXNdOworCisgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUFsbENv
b2tpZXNNb2RpZmllZFNpbmNlKFdhbGxUaW1lIHRpbWVQb2ludCkKK3sKKyAgICBBU1NFUlQoaGFz
UHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7
CisKKyAgICBpZiAoIVtOU0hUVFBDb29raWVTdG9yYWdlIGluc3RhbmNlc1Jlc3BvbmRUb1NlbGVj
dG9yOkBzZWxlY3RvcihyZW1vdmVDb29raWVzU2luY2VEYXRlOildKQorICAgICAgICByZXR1cm47
CisKKyAgICBOU1RpbWVJbnRlcnZhbCB0aW1lSW50ZXJ2YWwgPSB0aW1lUG9pbnQuc2Vjb25kc1Np
bmNlRXBvY2goKS5zZWNvbmRzKCk7CisgICAgTlNEYXRlICpkYXRlID0gW05TRGF0ZSBkYXRlV2l0
aFRpbWVJbnRlcnZhbFNpbmNlMTk3MDp0aW1lSW50ZXJ2YWxdOworCisgICAgYXV0byAqc3RvcmFn
ZSA9IG5zQ29va2llU3RvcmFnZSgpOworCisgICAgW3N0b3JhZ2UgcmVtb3ZlQ29va2llc1NpbmNl
RGF0ZTpkYXRlXTsKKyAgICBbc3RvcmFnZSBfc2F2ZUNvb2tpZXNdOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ29va2llSmFyQ3VybC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ29va2llSmFyQ3VybC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVi
NGEyNDUyNzU4MjRjMDgwZDk4MmQ5NjA5MDVlNDQ0ZGU2MTkwOTYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50
IEluYy4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJDb29raWVKYXJDdXJsLmgiCi0KLSNpZiBVU0UoQ1VSTCkKLSNpbmNsdWRl
ICJDb29raWUuaCIKLSNpbmNsdWRlICJDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eS5oIgot
I2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oIgotI2luY2x1ZGUgIlVSTC5oIgotCi0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
c3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29va2llc0ZvckRPTShjb25zdCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJ
bmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90
PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVD
b29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKQotewotICAgIHJldHVybiBzZXNzaW9uLmNvb2tp
ZVN0b3JhZ2UoKS5jb29raWVzRm9yRE9NKHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5m
bywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKLX0KLQotdm9p
ZCBzZXRDb29raWVzRnJvbURPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24s
IGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8s
IGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9w
dGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2Vz
c2lvbi5jb29raWVTdG9yYWdlKCkuc2V0Q29va2llc0Zyb21ET00oc2Vzc2lvbiwgZmlyc3RQYXJ0
eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgdmFsdWUpOwotfQotCi1zdGQ6
OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29u
c3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlv
bmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIElu
Y2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKQotewotICAgIHJldHVybiBz
ZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShzZXNz
aW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNs
dWRlU2VjdXJlQ29va2llcyk7Ci19Ci0KLXN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lv
biwgY29uc3QgQ29va2llUmVxdWVzdEhlYWRlckZpZWxkUHJveHkmIGhlYWRlckZpZWxkUHJveHkp
Ci17Ci0gICAgcmV0dXJuIHNlc3Npb24uY29va2llU3RvcmFnZSgpLmNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKHNlc3Npb24sIGhlYWRlckZpZWxkUHJveHkuZmlyc3RQYXJ0eSwgaGVhZGVy
RmllbGRQcm94eS5zYW1lU2l0ZUluZm8sIGhlYWRlckZpZWxkUHJveHkudXJsLCBoZWFkZXJGaWVs
ZFByb3h5LmZyYW1lSUQsIGhlYWRlckZpZWxkUHJveHkucGFnZUlELCBoZWFkZXJGaWVsZFByb3h5
LmluY2x1ZGVTZWN1cmVDb29raWVzKTsKLX0KLQotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24pCi17Ci0gICAgcmV0dXJuIHNlc3Npb24uY29v
a2llU3RvcmFnZSgpLmNvb2tpZXNFbmFibGVkKHNlc3Npb24pOwotfQotCi1ib29sIGdldFJhd0Nv
b2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZp
cnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVy
bCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRf
dD4gcGFnZUlELCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKLXsKLSAgICByZXR1cm4gc2Vz
c2lvbi5jb29raWVTdG9yYWdlKCkuZ2V0UmF3Q29va2llcyhzZXNzaW9uLCBmaXJzdFBhcnR5LCBz
YW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCByYXdDb29raWVzKTsKLX0KLQotdm9p
ZCBkZWxldGVDb29raWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25z
dCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWUpCi17Ci0gICAgc2Vzc2lvbi5jb29raWVT
dG9yYWdlKCkuZGVsZXRlQ29va2llKHNlc3Npb24sIHVybCwgY29va2llKTsKLX0KLQotdm9pZCBn
ZXRIb3N0bmFtZXNXaXRoQ29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Np
b24sIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQotewotICAgIHNlc3Npb24uY29va2llU3Rv
cmFnZSgpLmdldEhvc3RuYW1lc1dpdGhDb29raWVzKHNlc3Npb24sIGhvc3RuYW1lcyk7Ci19Ci0K
LXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Np
b24mIHNlc3Npb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb29raWVIb3N0TmFtZXMpCi17Ci0g
ICAgc2Vzc2lvbi5jb29raWVTdG9yYWdlKCkuZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNz
aW9uLCBjb29raWVIb3N0TmFtZXMpOwotfQotCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoY29uc3Qg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uKQotewotICAgIHNlc3Npb24uY29va2llU3Rv
cmFnZSgpLmRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbik7Ci19Ci0KLXZvaWQgZGVsZXRlQWxsQ29v
a2llc01vZGlmaWVkU2luY2UoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBX
YWxsVGltZSBzaW5jZSkKLXsKLSAgICBzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5kZWxldGVBbGxD
b29raWVzTW9kaWZpZWRTaW5jZShzZXNzaW9uLCBzaW5jZSk7Ci19Ci0KLX0KLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFy
Q3VybC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1
cmwuaAppbmRleCAyYWE4ZGZkYTFiNzBlMTA5Y2ZlYjhhNGJlZjNiNDFmNDY2NmU2OGVlLi5lMGIy
MWNjMTM3NzQ4YThlMTYyNzQ4MzI2MDdjMThkN2E0ODE2MGZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmgKQEAgLTE4LDEw
ICsxOCwyMiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlBsYXRmb3JtQ29va2llSmFy
LmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFVSTDsKK2NsYXNzIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjsKKworc3RydWN0IENvb2tpZTsKK3N0cnVjdCBDb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRQcm94eTsKK3N0cnVjdCBTYW1lU2l0ZUluZm87CisKK2VudW0gY2xhc3MgSW5jbHVkZVNl
Y3VyZUNvb2tpZXM7CisKIGNsYXNzIENvb2tpZUphckN1cmwgewogcHVibGljOgogICAgIHZpcnR1
YWwgc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29va2llc0ZvckRPTShjb25zdCBOZXR3b3JrU3Rv
cmFnZVNlc3Npb24mLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYs
IGNvbnN0IFVSTCYsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9u
YWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMpIGNvbnN0ID0gMDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9OZXR3b3JrU3Rv
cmFnZVNlc3Npb25DdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9OZXR3b3JrU3RvcmFnZVNlc3Npb25DdXJsLmNwcAppbmRleCAwNjFkZjE5MDU5NmUzYmI5ZjFm
ZjlkMTY1Yjc3ZjdmZmFmM2NjNzkzLi5kOThlNmMxZTJiYzY2ZDA5NGQyNTJjMTY0NjRhZjA4MmE1
NGEwNjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
TmV0d29ya1N0b3JhZ2VTZXNzaW9uQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkN1cmwuY3BwCkBAIC0zMSwxMyAr
MzEsMTYgQEAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJDb29raWVKYXJDdXJsRGF0
YWJhc2UuaCIKICNpbmNsdWRlICJDb29raWVKYXJEQi5oIgorI2luY2x1ZGUgIkNvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFByb3h5LmgiCiAjaW5jbHVkZSAiQ3VybENvbnRleHQuaCIKICNpbmNsdWRl
ICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlVSTC5oIgogCiAjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMDMsNiAr
MTA2LDIxIEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzd2l0Y2hUb05ld1Rlc3RpbmdT
ZXNzaW9uKCkKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBXZWJLaXQgdG8gdXNlLgogfQog
Cit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llc0Zyb21ET00oY29uc3QgVVJM
JiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJM
JiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWlu
dDY0X3Q+IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKK3sKKyAgICBjb29raWVT
dG9yYWdlKCkuc2V0Q29va2llc0Zyb21ET00oKnRoaXMsIGZpcnN0UGFydHksIHNhbWVTaXRlSW5m
bywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIHZhbHVlKTsKK30KKworYm9vbCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmNvb2tpZXNFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29va2llU3Rv
cmFnZSgpLmNvb2tpZXNFbmFibGVkKCp0aGlzKTsKK30KKworc3RkOjpwYWlyPFN0cmluZywgYm9v
bD4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVzRm9yRE9NKGNvbnN0IFVSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBz
dGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBw
YWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKSBjb25zdAor
eworICAgIHJldHVybiBjb29raWVTdG9yYWdlKCkuY29va2llc0ZvckRPTSgqdGhpcywgZmlyc3RQ
YXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVkZVNlY3VyZUNv
b2tpZXMpOworfQorCiB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llcyhjb25z
dCBWZWN0b3I8Q29va2llPiYsIGNvbnN0IFVSTCYsIGNvbnN0IFVSTCYpCiB7CiAgICAgLy8gRklY
TUU6IEltcGxlbWVudCBmb3IgV2ViS2l0IHRvIHVzZS4KQEAgLTExOCwyMyArMTM2LDYzIEBAIHZv
aWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVDb29raWUoY29uc3QgQ29va2llJikKICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBXZWJLaXQgdG8gdXNlLgogfQogCit2b2lkIE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIGNvb2tpZSkgY29uc3QKK3sKKyAgICBjb29raWVTdG9yYWdlKCkuZGVsZXRlQ29va2llKCp0
aGlzLCB1cmwsIGNvb2tpZSk7Cit9CisKK3ZvaWQgZGVsZXRlQWxsQ29va2llcygpCit7CisgICAg
Y29va2llU3RvcmFnZSgpLmRlbGV0ZUFsbENvb2tpZXMoKnRoaXMpOworfQorCit2b2lkIE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoV2FsbFRpbWUg
c2luY2UpCit7CisgICAgY29va2llU3RvcmFnZSgpLmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNp
bmNlKCp0aGlzLCBzaW5jZSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxl
dGVDb29raWVzRm9ySG9zdG5hbWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb29raWVIb3N0TmFt
ZXMpCit7CisgICAgY29va2llU3RvcmFnZSgpLmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoKnRo
aXMsIGNvb2tpZUhvc3ROYW1lcyk7Cit9CisKIFZlY3RvcjxDb29raWU+IE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6Z2V0QWxsQ29va2llcygpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Ig
V2ViS2l0IHRvIHVzZS4KICAgICByZXR1cm4geyB9OwogfQogCit2b2lkIE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFt
ZXMpCit7CisgICAgY29va2llU3RvcmFnZSgpLmdldEhvc3RuYW1lc1dpdGhDb29raWVzKCp0aGlz
LCBob3N0bmFtZXMpOworfQorCiBWZWN0b3I8Q29va2llPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246
OmdldENvb2tpZXMoY29uc3QgVVJMJikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBX
ZWJLaXQgdG8gdXNlLgogICAgIHJldHVybiB7IH07CiB9CiAKK2Jvb2wgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpnZXRSYXdDb29raWVzKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNp
dGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2
NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIFZlY3RvcjxDb29r
aWU+JiByYXdDb29raWVzKSBjb25zdAoreworICAgIHJldHVybiBjb29raWVTdG9yYWdlKCkuZ2V0
UmF3Q29va2llcygqdGhpcywgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQs
IHBhZ2VJRCwgcmF3Q29va2llcyk7Cit9CisKIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpm
bHVzaENvb2tpZVN0b3JlKCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBXZWJLaXQg
dG8gdXNlLgogfQogCitzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Np
b246OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwg
Y29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9w
dGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQs
IEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKSBjb25zdAoreworICAg
IHJldHVybiBjb29raWVTdG9yYWdlKCkuY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoKnRo
aXMsIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1
ZGVTZWN1cmVDb29raWVzKTsKK30KKworc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gTmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBDb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRQcm94eSYgaGVhZGVyRmllbGRQcm94eSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gY29va2llU3RvcmFnZSgpLmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKCp0aGlz
LCBoZWFkZXJGaWVsZFByb3h5LmZpcnN0UGFydHksIGhlYWRlckZpZWxkUHJveHkuc2FtZVNpdGVJ
bmZvLCBoZWFkZXJGaWVsZFByb3h5LnVybCwgaGVhZGVyRmllbGRQcm94eS5mcmFtZUlELCBoZWFk
ZXJGaWVsZFByb3h5LnBhZ2VJRCwgaGVhZGVyRmllbGRQcm94eS5pbmNsdWRlU2VjdXJlQ29va2ll
cyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShDVVJMKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llSmFy
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llSmFyTWFj
Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjY0MGJkMDZkZjIxMGI2ZDJkMzIw
ODI2NTA2MTEwMmY4ZDkyMTg1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZUphck1h
Yy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDQ3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIlBsYXRmb3JtQ29va2llSmFyLmgiCi0KLSNpbXBvcnQgIkNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFByb3h5LmgiCi0jaW1wb3J0ICJDb29raWVzU3RyYXRlZ3kuaCIKLSNpbXBvcnQgIk5ldHdv
cmtTdG9yYWdlU2Vzc2lvbi5oIgotI2ltcG9ydCA8cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4K
LSNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+Ci0KLSNpbXBvcnQgIkNvb2tpZS5o
IgotI2ltcG9ydCAiQ29va2llU3RvcmFnZS5oIgotI2ltcG9ydCAiU2FtZVNpdGVJbmZvLmgiCi0j
aW1wb3J0ICJVUkwuaCIKLSNpbXBvcnQgPHd0Zi9PcHRpb25hbC5oPgotI2ltcG9ydCA8d3RmL1By
b2Nlc3NQcml2aWxlZ2UuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQot
QGludGVyZmFjZSBOU1VSTCAoKQotLSAoQ0ZVUkxSZWYpX2NmdXJsOwotQGVuZAotCi0jaWYgKFBM
QVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE0MDAp
IHx8IChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEyMDAwMCkKLUBpbnRlcmZhY2UgTlNIVFRQQ29va2llU3RvcmFnZSAoU3RhZ2luZykKLS0gKHZv
aWQpX2dldENvb2tpZXNGb3JVUkw6KE5TVVJMICopdXJsIG1haW5Eb2N1bWVudFVSTDooTlNVUkwg
KiltYWluRG9jdW1lbnRVUkwgcGFydGl0aW9uOihOU1N0cmluZyAqKXBhcnRpdGlvbiBwb2xpY3lQ
cm9wZXJ0aWVzOihOU0RpY3Rpb25hcnkqKXByb3BzIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShOU0FycmF5ICopKWNvbXBsZXRpb25IYW5kbGVyOwotLSAodm9pZClfc2V0Q29va2llczooTlNB
cnJheSAqKWNvb2tpZXMgZm9yVVJMOihOU1VSTCAqKVVSTCBtYWluRG9jdW1lbnRVUkw6KE5TVVJM
ICopbWFpbkRvY3VtZW50VVJMIHBvbGljeVByb3BlcnRpZXM6KE5TRGljdGlvbmFyeSopIHByb3Bz
OwotQGVuZAotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIE5TQXJyYXkg
Kmh0dHBDb29raWVzKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSkKLXsKLSAg
ICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NS
YXdDb29raWVzKSk7Ci0gICAgaWYgKCFjb29raWVTdG9yYWdlKQotICAgICAgICByZXR1cm4gW1tO
U0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBjb29raWVzXTsKLSAg
ICAKLSAgICBhdXRvIGNvb2tpZXMgPSBhZG9wdENGKENGSFRUUENvb2tpZVN0b3JhZ2VDb3B5Q29v
a2llcyhjb29raWVTdG9yYWdlKSk7Ci0gICAgcmV0dXJuIFtOU0hUVFBDb29raWUgX2NmMm5zQ29v
a2llczpjb29raWVzLmdldCgpXTsKLX0KLQotc3RhdGljIHZvaWQgZGVsZXRlSFRUUENvb2tpZShD
RkhUVFBDb29raWVTdG9yYWdlUmVmIGNvb2tpZVN0b3JhZ2UsIE5TSFRUUENvb2tpZSAqY29va2ll
KQotewotICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNh
bkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKLSAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpIHsKLSAgICAgICAg
W1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBkZWxldGVDb29r
aWU6Y29va2llXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBDRkhUVFBDb29r
aWVTdG9yYWdlRGVsZXRlQ29va2llKGNvb2tpZVN0b3JhZ2UsIFtjb29raWUgX0dldEludGVybmFs
Q0ZIVFRQQ29va2llXSk7Ci19Ci0KLSNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTQwMCkgfHwgKFBMQVRGT1JNKElPUykgJiYgX19JUEhP
TkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTIwMDAwKQotc3RhdGljIFJldGFpblB0cjxO
U0RpY3Rpb25hcnk+IHBvbGljeVByb3BlcnRpZXMoY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0
ZUluZm8sIE5TVVJMICp1cmwpCi17Ci0gICAgc3RhdGljIE5TVVJMICplbXB0eVVSTCA9IFtbTlNV
UkwgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiIl07Ci0gICAgTlNEaWN0aW9uYXJ5ICpwb2xpY3lQ
cm9wZXJ0aWVzID0gQHsKLSAgICAgICAgQCJfa0NGSFRUUENvb2tpZVBvbGljeVByb3BlcnR5U2l0
ZUZvckNvb2tpZXMiOiBzYW1lU2l0ZUluZm8uaXNTYW1lU2l0ZSA/IHVybCA6IGVtcHR5VVJMLAot
ICAgICAgICBAIl9rQ0ZIVFRQQ29va2llUG9saWN5UHJvcGVydHlJc1RvcExldmVsTmF2aWdhdGlv
biI6IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpzYW1lU2l0ZUluZm8uaXNUb3BTaXRlXSwKLSAg
ICB9OwotICAgIHJldHVybiBwb2xpY3lQcm9wZXJ0aWVzOwotfQotI2VuZGlmCi0KLXN0YXRpYyBO
U0FycmF5ICpjb29raWVzRm9yVVJMKE5TSFRUUENvb2tpZVN0b3JhZ2UgKnN0b3JhZ2UsIE5TVVJM
ICp1cmwsIE5TVVJMICptYWluRG9jdW1lbnRVUkwsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8U2FtZVNp
dGVJbmZvPiYgc2FtZVNpdGVJbmZvLCBOU1N0cmluZyAqcGFydGl0aW9uID0gbnVsbHB0cikKLXsK
LSAgICAvLyBUaGUgX2dldENvb2tpZXNGb3JVUkw6IG1ldGhvZCBjYWxscyB0aGUgY29tcGxldGlv
bkhhbmRsZXIgc3luY2hyb25vdXNseS4gV2UgdXNlIHN0ZDo6b3B0aW9uYWw8PiB0byBlbnN1cmUg
dGhpcyBpbnZhcmlhbnQuCi0gICAgc3RkOjpvcHRpb25hbDxSZXRhaW5QdHI8TlNBcnJheSAqPj4g
Y29va2llc1B0cjsKLSAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0gWyZjb29raWVzUHRyXSAo
TlNBcnJheSAqY29va2llcykgeyBjb29raWVzUHRyID0gcmV0YWluUHRyKGNvb2tpZXMpOyB9Owot
I2lmIChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0g
MTAxNDAwKSB8fCAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxMjAwMDApCi0gICAgaWYgKFtzdG9yYWdlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IoX2dldENvb2tpZXNGb3JVUkw6bWFpbkRvY3VtZW50VVJMOnBhcnRpdGlvbjpwb2xpY3lQ
cm9wZXJ0aWVzOmNvbXBsZXRpb25IYW5kbGVyOildKQotICAgICAgICBbc3RvcmFnZSBfZ2V0Q29v
a2llc0ZvclVSTDp1cmwgbWFpbkRvY3VtZW50VVJMOm1haW5Eb2N1bWVudFVSTCBwYXJ0aXRpb246
cGFydGl0aW9uIHBvbGljeVByb3BlcnRpZXM6c2FtZVNpdGVJbmZvID8gcG9saWN5UHJvcGVydGll
cyhzYW1lU2l0ZUluZm8udmFsdWUoKSwgdXJsKS5nZXQoKSA6IG51bGxwdHIgY29tcGxldGlvbkhh
bmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwotICAgIGVsc2UKLSAgICAgICAgW3N0b3JhZ2UgX2dl
dENvb2tpZXNGb3JVUkw6dXJsIG1haW5Eb2N1bWVudFVSTDptYWluRG9jdW1lbnRVUkwgcGFydGl0
aW9uOnBhcnRpdGlvbiBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07Ci0jZWxz
ZQotICAgIFtzdG9yYWdlIF9nZXRDb29raWVzRm9yVVJMOnVybCBtYWluRG9jdW1lbnRVUkw6bWFp
bkRvY3VtZW50VVJMIHBhcnRpdGlvbjpwYXJ0aXRpb24gY29tcGxldGlvbkhhbmRsZXI6Y29tcGxl
dGlvbkhhbmRsZXJdOwotICAgIFVOVVNFRF9QQVJBTShzYW1lU2l0ZUluZm8pOwotI2VuZGlmCi0g
ICAgQVNTRVJUKCEhY29va2llc1B0cik7Ci0gICAgcmV0dXJuIGNvb2tpZXNQdHItPmF1dG9yZWxl
YXNlKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldEhUVFBDb29raWVzRm9yVVJMKENGSFRUUENvb2tp
ZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSwgTlNBcnJheSAqY29va2llcywgTlNVUkwgKnVybCwg
TlNVUkwgKm1haW5Eb2N1bWVudFVSTCwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8p
Ci17Ci0gICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2Fu
QWNjZXNzUmF3Q29va2llcykpOwotICAgIGlmICghY29va2llU3RvcmFnZSkgewotI2lmIChQTEFU
Rk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNDAwKSB8
fCAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MjAwMDApCi0gICAgICAgIGlmIChbTlNIVFRQQ29va2llU3RvcmFnZSBpbnN0YW5jZXNSZXNwb25k
VG9TZWxlY3RvcjpAc2VsZWN0b3IoX3NldENvb2tpZXM6Zm9yVVJMOm1haW5Eb2N1bWVudFVSTDpw
b2xpY3lQcm9wZXJ0aWVzOildKQotICAgICAgICAgICAgW1tOU0hUVFBDb29raWVTdG9yYWdlIHNo
YXJlZEhUVFBDb29raWVTdG9yYWdlXSBfc2V0Q29va2llczpjb29raWVzIGZvclVSTDp1cmwgbWFp
bkRvY3VtZW50VVJMOm1haW5Eb2N1bWVudFVSTCBwb2xpY3lQcm9wZXJ0aWVzOnBvbGljeVByb3Bl
cnRpZXMoc2FtZVNpdGVJbmZvLCB1cmwpLmdldCgpXTsKLSAgICAgICAgZWxzZQotI2VuZGlmCi0g
ICAgICAgICAgICBbW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2Vd
IHNldENvb2tpZXM6Y29va2llcyBmb3JVUkw6dXJsIG1haW5Eb2N1bWVudFVSTDptYWluRG9jdW1l
bnRVUkxdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2lmIChQTEFURk9STShNQUMpICYmIF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNDAwKSB8fCAoUExBVEZPUk0oSU9T
KSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMjAwMDApCi0gICAgaWYg
KFtOU0hUVFBDb29raWVTdG9yYWdlIGluc3RhbmNlc1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxlY3Rv
cihfc2V0Q29va2llczpmb3JVUkw6bWFpbkRvY3VtZW50VVJMOnBvbGljeVByb3BlcnRpZXM6KV0p
IHsKLSAgICAgICAgLy8gRklYTUU6IFN0b3AgY3JlYXRpbmcgYSBuZXcgTlNIVFRQQ29va2llU3Rv
cmFnZSBvYmplY3QgZWFjaCB0aW1lIHdlIHdhbnQgdG8gcXVlcnkgdGhlIGNvb2tpZSBqYXIuCi0g
ICAgICAgIC8vIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiBjb3VsZCBpbnN0ZWFkIGtlZXAgYSBOU0hU
VFBDb29raWVTdG9yYWdlIG9iamVjdCBmb3IgdXMuCi0gICAgICAgIFJldGFpblB0cjxOU0hUVFBD
b29raWVTdG9yYWdlPiBuc0Nvb2tpZVN0b3JhZ2UgPSBhZG9wdE5TKFtbTlNIVFRQQ29va2llU3Rv
cmFnZSBhbGxvY10gX2luaXRXaXRoQ0ZIVFRQQ29va2llU3RvcmFnZTpjb29raWVTdG9yYWdlXSk7
Ci0gICAgICAgIFtuc0Nvb2tpZVN0b3JhZ2UgX3NldENvb2tpZXM6Y29va2llcyBmb3JVUkw6dXJs
IG1haW5Eb2N1bWVudFVSTDptYWluRG9jdW1lbnRVUkwgcG9saWN5UHJvcGVydGllczpwb2xpY3lQ
cm9wZXJ0aWVzKHNhbWVTaXRlSW5mbywgdXJsKS5nZXQoKV07Ci0gICAgfSBlbHNlIHsKLSNlbmRp
ZgotICAgICAgICBhdXRvIGNmQ29va2llcyA9IGFkb3B0Q0YoW05TSFRUUENvb2tpZSBfbnMyY2ZD
b29raWVzOmNvb2tpZXNdKTsKLSAgICAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tpZXMo
Y29va2llU3RvcmFnZSwgY2ZDb29raWVzLmdldCgpLCBbdXJsIF9jZnVybF0sIFttYWluRG9jdW1l
bnRVUkwgX2NmdXJsXSk7Ci0jaWYgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA+PSAxMDE0MDApIHx8IChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09T
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEyMDAwMCkKLSAgICB9Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShzYW1lU2l0ZUluZm8pOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBOU0FycmF5ICpodHRw
Q29va2llc0ZvclVSTChDRkhUVFBDb29raWVTdG9yYWdlUmVmIGNvb2tpZVN0b3JhZ2UsIE5TVVJM
ICpmaXJzdFBhcnR5LCBjb25zdCBzdGQ6Om9wdGlvbmFsPFNhbWVTaXRlSW5mbz4mIHNhbWVTaXRl
SW5mbywgTlNVUkwgKnVybCkKLXsKLSAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9j
ZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7Ci0gICAgaWYgKCFjb29raWVTdG9y
YWdlKQotICAgICAgICBjb29raWVTdG9yYWdlID0gX0NGSFRUUENvb2tpZVN0b3JhZ2VHZXREZWZh
dWx0KGtDRkFsbG9jYXRvckRlZmF1bHQpOwotCi0gICAgLy8gRklYTUU6IFN0b3AgY3JlYXRpbmcg
YSBuZXcgTlNIVFRQQ29va2llU3RvcmFnZSBvYmplY3QgZWFjaCB0aW1lIHdlIHdhbnQgdG8gcXVl
cnkgdGhlIGNvb2tpZSBqYXIuCi0gICAgLy8gTmV0d29ya1N0b3JhZ2VTZXNzaW9uIGNvdWxkIGlu
c3RlYWQga2VlcCBhIE5TSFRUUENvb2tpZVN0b3JhZ2Ugb2JqZWN0IGZvciB1cy4KLSAgICBSZXRh
aW5QdHI8TlNIVFRQQ29va2llU3RvcmFnZT4gbnNDb29raWVTdG9yYWdlID0gYWRvcHROUyhbW05T
SFRUUENvb2tpZVN0b3JhZ2UgYWxsb2NdIF9pbml0V2l0aENGSFRUUENvb2tpZVN0b3JhZ2U6Y29v
a2llU3RvcmFnZV0pOwotICAgIHJldHVybiBjb29raWVzRm9yVVJMKG5zQ29va2llU3RvcmFnZS5n
ZXQoKSwgdXJsLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8pOwotfQotCi1zdGF0aWMgUmV0YWlu
UHRyPE5TQXJyYXk+IGZpbHRlckNvb2tpZXMoTlNBcnJheSAqdW5maWx0ZXJlZENvb2tpZXMpCi17
Ci0gICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNj
ZXNzUmF3Q29va2llcykpOwotICAgIE5TVUludGVnZXIgY291bnQgPSBbdW5maWx0ZXJlZENvb2tp
ZXMgY291bnRdOwotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gZmlsdGVyZWRDb29raWVz
ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmNvdW50
XSk7Ci0KLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAg
ICAgIE5TSFRUUENvb2tpZSAqY29va2llID0gKE5TSFRUUENvb2tpZSAqKVt1bmZpbHRlcmVkQ29v
a2llcyBvYmplY3RBdEluZGV4OmldOwotCi0gICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NjMy
ODgzPiBPbiAxMC41LCBOU0hUVFBDb29raWVTdG9yYWdlIHdvdWxkIHN0b3JlIGFuIGVtcHR5IGNv
b2tpZSwKLSAgICAgICAgLy8gd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4gV2Ug
aGF2ZSBhIHdvcmthcm91bmQgaW4gc2V0Q29va2llcygpIHRvIHByZXZlbnQKLSAgICAgICAgLy8g
dGhhdCwgYnV0IHdlIGFsc28gbmVlZCB0byBhdm9pZCBzZW5kaW5nIGNvb2tpZXMgdGhhdCB3ZXJl
IHByZXZpb3VzbHkgc3RvcmVkLCBhbmQKLSAgICAgICAgLy8gdGhlcmUncyBubyBoYXJtIHRvIGRv
aW5nIHRoaXMgY2hlY2sgYmVjYXVzZSBzdWNoIGEgY29va2llIGlzIG5ldmVyIHZhbGlkLgotICAg
ICAgICBpZiAoIVtbY29va2llIG5hbWVdIGxlbmd0aF0pCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBpZiAoW2Nvb2tpZSBpc0hUVFBPbmx5XSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIFtmaWx0ZXJlZENvb2tpZXMuZ2V0KCkgYWRkT2JqZWN0OmNvb2tpZV07Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGZpbHRlcmVkQ29va2llczsKLX0KLQotI2lmIEhBVkUoQ0ZORVRX
T1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQotCi1zdGF0aWMgTlNBcnJheSAqYXBwbHlQYXJ0aXRp
b25Ub0Nvb2tpZXMoTlNTdHJpbmcgKnBhcnRpdGlvbiwgTlNBcnJheSAqY29va2llcykKLXsKLSAg
ICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NS
YXdDb29raWVzKSk7Ci0KLSAgICAvLyBGSVhNRSAyNDc0NzczOTogQ0ZOZXR3b3JrIHNob3VsZCBl
eHBvc2UgdGhpcyBrZXkgYXMgU1BJCi0gICAgc3RhdGljIE5TU3RyaW5nICogY29uc3QgcGFydGl0
aW9uS2V5ID0gQCJTdG9yYWdlUGFydGl0aW9uIjsKLQotICAgIE5TTXV0YWJsZUFycmF5ICpwYXJ0
aXRpb25lZENvb2tpZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6Y29va2ll
cy5jb3VudF07Ci0gICAgZm9yIChOU0hUVFBDb29raWUgKmNvb2tpZSBpbiBjb29raWVzKSB7Ci0g
ICAgICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBwcm9wZXJ0aWVzID0gYWRvcHRO
UyhbY29va2llLnByb3BlcnRpZXMgbXV0YWJsZUNvcHldKTsKLSAgICAgICAgW3Byb3BlcnRpZXMg
c2V0T2JqZWN0OnBhcnRpdGlvbiBmb3JLZXk6cGFydGl0aW9uS2V5XTsKLSAgICAgICAgW3BhcnRp
dGlvbmVkQ29va2llcyBhZGRPYmplY3Q6W05TSFRUUENvb2tpZSBjb29raWVXaXRoUHJvcGVydGll
czpwcm9wZXJ0aWVzLmdldCgpXV07Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhcnRpdGlvbmVkQ29v
a2llczsKLX0KLQotc3RhdGljIGJvb2wgY29va2llc0FyZUJsb2NrZWRGb3JVUkwoY29uc3QgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0
IFVSTCYgdXJsKQotewotICAgIHJldHVybiBzZXNzaW9uLnNob3VsZEJsb2NrQ29va2llcyhmaXJz
dFBhcnR5LCB1cmwpOwotfQotCi1zdGF0aWMgTlNBcnJheSAqY29va2llc0luUGFydGl0aW9uRm9y
VVJMKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJz
dFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmws
IHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+
IHBhZ2VJRCkKLXsKLSAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmls
ZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7Ci0gICAgU3RyaW5nIHBhcnRpdGlvbiA9IHNlc3Np
b24uY29va2llU3RvcmFnZVBhcnRpdGlvbihmaXJzdFBhcnR5LCB1cmwsIGZyYW1lSUQsIHBhZ2VJ
RCk7Ci0gICAgaWYgKHBhcnRpdGlvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0K
LSAgICAvLyBGSVhNRTogU3RvcCBjcmVhdGluZyBhIG5ldyBOU0hUVFBDb29raWVTdG9yYWdlIG9i
amVjdCBlYWNoIHRpbWUgd2Ugd2FudCB0byBxdWVyeSB0aGUgY29va2llIGphci4KLSAgICAvLyBO
ZXR3b3JrU3RvcmFnZVNlc3Npb24gY291bGQgaW5zdGVhZCBrZWVwIGEgTlNIVFRQQ29va2llU3Rv
cmFnZSBvYmplY3QgZm9yIHVzLgotICAgIFJldGFpblB0cjxOU0hUVFBDb29raWVTdG9yYWdlPiBj
b29raWVTdG9yYWdlOwotICAgIGlmIChhdXRvIHN0b3JhZ2UgPSBzZXNzaW9uLmNvb2tpZVN0b3Jh
Z2UoKSkKLSAgICAgICAgY29va2llU3RvcmFnZSA9IGFkb3B0TlMoW1tOU0hUVFBDb29raWVTdG9y
YWdlIGFsbG9jXSBfaW5pdFdpdGhDRkhUVFBDb29raWVTdG9yYWdlOnN0b3JhZ2UuZ2V0KCldKTsK
LSAgICBlbHNlCi0gICAgICAgIGNvb2tpZVN0b3JhZ2UgPSBbTlNIVFRQQ29va2llU3RvcmFnZSBz
aGFyZWRIVFRQQ29va2llU3RvcmFnZV07Ci0gICAgcmV0dXJuIGNvb2tpZXNGb3JVUkwoY29va2ll
U3RvcmFnZS5nZXQoKSwgdXJsLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHBhcnRpdGlvbik7
Ci19Ci0KLSNlbmRpZiAvLyBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykKLSAg
ICAKLXN0YXRpYyBOU0FycmF5ICpjb29raWVzRm9yVVJMKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8m
IHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZy
YW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCkKLXsKLSNpZiBIQVZFKENGTkVU
V09SS19TVE9SQUdFX1BBUlRJVElPTklORykKLSAgICBpZiAoY29va2llc0FyZUJsb2NrZWRGb3JV
Ukwoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgdXJsKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAK
LSAgICBpZiAoTlNBcnJheSAqY29va2llcyA9IGNvb2tpZXNJblBhcnRpdGlvbkZvclVSTChzZXNz
aW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlEKSkKLSAg
ICAgICAgcmV0dXJuIGNvb2tpZXM7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsK
LSAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKLSNlbmRpZgotICAgIHJldHVybiBodHRwQ29va2ll
c0ZvclVSTChzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgZmlyc3RQYXJ0eSwgc2FtZVNp
dGVJbmZvLCB1cmwpOwotfQotCi1lbnVtIEluY2x1ZGVIVFRQT25seU9yTm90IHsgRG9Ob3RJbmNs
dWRlSFRUUE9ubHksIEluY2x1ZGVIVFRQT25seSB9Owotc3RhdGljIHN0ZDo6cGFpcjxTdHJpbmcs
IGJvb2w+IGNvb2tpZXNGb3JTZXNzaW9uKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vz
c2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRl
SW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0
ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZUhUVFBPbmx5T3JOb3QgaW5jbHVk
ZUhUVFBPbmx5LCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykKLXsK
LSAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nl
c3NSYXdDb29raWVzKSk7Ci0KLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAg
ICBOU0FycmF5ICpjb29raWVzID0gY29va2llc0ZvclVSTChzZXNzaW9uLCBmaXJzdFBhcnR5LCBz
YW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlEKTsKLSAgICBpZiAoIVtjb29raWVzIGNv
dW50XSkKLSAgICAgICAgcmV0dXJuIHsgU3RyaW5nKCksIGZhbHNlIH07IC8vIFJldHVybiBhIG51
bGwgc3RyaW5nLCBub3QgYW4gZW1wdHkgb25lIHRoYXQgU3RyaW5nQnVpbGRlciB3b3VsZCBjcmVh
dGUgYmVsb3cuCi0KLSAgICBTdHJpbmdCdWlsZGVyIGNvb2tpZXNCdWlsZGVyOwotICAgIGJvb2wg
ZGlkQWNjZXNzU2VjdXJlQ29va2llcyA9IGZhbHNlOwotICAgIGZvciAoTlNIVFRQQ29va2llICpj
b29raWUgaW4gY29va2llcykgewotICAgICAgICBpZiAoIVtbY29va2llIG5hbWVdIGxlbmd0aF0p
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoIWluY2x1ZGVIVFRQT25seSAm
JiBbY29va2llIGlzSFRUUE9ubHldKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
aWYgKFtjb29raWUgaXNTZWN1cmVdKSB7Ci0gICAgICAgICAgICBkaWRBY2Nlc3NTZWN1cmVDb29r
aWVzID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChpbmNsdWRlU2VjdXJlQ29va2llcyA9PSBJbmNs
dWRlU2VjdXJlQ29va2llczo6Tm8pCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIWNvb2tpZXNCdWlsZGVyLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IGNvb2tpZXNCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjsgIik7Ci0KLSAgICAgICAgY29va2llc0J1
aWxkZXIuYXBwZW5kKFtjb29raWUgbmFtZV0pOwotICAgICAgICBjb29raWVzQnVpbGRlci5hcHBl
bmQoJz0nKTsKLSAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kKFtjb29raWUgdmFsdWVdKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHsgY29va2llc0J1aWxkZXIudG9TdHJpbmcoKSwgZGlkQWNjZXNz
U2VjdXJlQ29va2llcyB9OwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBy
ZXR1cm4geyBTdHJpbmcoKSwgZmFsc2UgfTsKLX0KLQotc3RhdGljIHZvaWQgZGVsZXRlQWxsSFRU
UENvb2tpZXMoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlKQotewotICAgIEFT
U0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nv
b2tpZXMpKTsKLQotICAgIGlmICghY29va2llU3RvcmFnZSkgewotICAgICAgICBOU0hUVFBDb29r
aWVTdG9yYWdlICpjb29raWVTdG9yYWdlID0gW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRU
UENvb2tpZVN0b3JhZ2VdOwotICAgICAgICBOU0FycmF5ICpjb29raWVzID0gW2Nvb2tpZVN0b3Jh
Z2UgY29va2llc107Ci0gICAgICAgIGlmICghY29va2llcykKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBmb3IgKE5TSFRUUENvb2tpZSAqY29va2llIGluIGNvb2tpZXMpCi0gICAgICAg
ICAgICBbY29va2llU3RvcmFnZSBkZWxldGVDb29raWU6Y29va2llXTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIENGSFRUUENvb2tpZVN0b3JhZ2VEZWxldGVBbGxDb29raWVzKGNvb2tp
ZVN0b3JhZ2UpOwotfQotCi1zdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVzRm9yRE9NKGNv
bnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5
LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6
b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJ
RCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpCi17Ci0gICAgcmV0
dXJuIGNvb2tpZXNGb3JTZXNzaW9uKHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywg
dXJsLCBmcmFtZUlELCBwYWdlSUQsIERvTm90SW5jbHVkZUhUVFBPbmx5LCBpbmNsdWRlU2VjdXJl
Q29va2llcyk7Ci19Ci0KLXN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3Qg
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3Qg
VVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8
dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tp
ZXMpCi17Ci0gICAgcmV0dXJuIGNvb2tpZXNGb3JTZXNzaW9uKHNlc3Npb24sIGZpcnN0UGFydHks
IHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIEluY2x1ZGVIVFRQT25seSwgaW5j
bHVkZVNlY3VyZUNvb2tpZXMpOwotfQotCi1zdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Np
b24sIGNvbnN0IENvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5JiBoZWFkZXJGaWVsZFByb3h5
KQotewotICAgIHJldHVybiBjb29raWVzRm9yU2Vzc2lvbihzZXNzaW9uLCBoZWFkZXJGaWVsZFBy
b3h5LmZpcnN0UGFydHksIGhlYWRlckZpZWxkUHJveHkuc2FtZVNpdGVJbmZvLCBoZWFkZXJGaWVs
ZFByb3h5LnVybCwgaGVhZGVyRmllbGRQcm94eS5mcmFtZUlELCBoZWFkZXJGaWVsZFByb3h5LnBh
Z2VJRCwgSW5jbHVkZUhUVFBPbmx5LCBoZWFkZXJGaWVsZFByb3h5LmluY2x1ZGVTZWN1cmVDb29r
aWVzKTsKLX0KLQotdm9pZCBzZXRDb29raWVzRnJvbURPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNl
c3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZv
JiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBm
cmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIGNvbnN0IFN0cmluZyYgY29v
a2llU3RyKQotewotICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxl
Z2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKLQotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKLQotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NjMyODgzPiBPbiAxMC41LCBOU0hUVFBD
b29raWVTdG9yYWdlIHdvdWxkIHN0b3JlIGFuIGVtcHR5IGNvb2tpZSwKLSAgICAvLyB3aGljaCB3
b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLgotICAgIGlmIChjb29raWVTdHIuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjUzMT4sIDxyZGFyOi8vNDQwOTAzND4KLSAgICAvLyBjb29raWVzV2l0aFJl
c3BvbnNlSGVhZGVyRmllbGRzIGRvZXNuJ3QgcGFyc2UgY29va2llcyB3aXRob3V0IGEgdmFsdWUK
LSAgICBTdHJpbmcgY29va2llU3RyaW5nID0gY29va2llU3RyLmNvbnRhaW5zKCc9JykgPyBjb29r
aWVTdHIgOiBjb29raWVTdHIgKyAiPSI7Ci0KLSAgICBOU1VSTCAqY29va2llVVJMID0gdXJsOwot
ICAgIE5TRGljdGlvbmFyeSAqaGVhZGVyRmllbGRzID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5
V2l0aE9iamVjdDpjb29raWVTdHJpbmcgZm9yS2V5OkAiU2V0LUNvb2tpZSJdOwotCi0jaWYgUExB
VEZPUk0oTUFDKQotICAgIE5TQXJyYXkgKnVuZmlsdGVyZWRDb29raWVzID0gW05TSFRUUENvb2tp
ZSBfcGFyc2VkQ29va2llc1dpdGhSZXNwb25zZUhlYWRlckZpZWxkczpoZWFkZXJGaWVsZHMgZm9y
VVJMOmNvb2tpZVVSTF07Ci0jZWxzZQotICAgIE5TQXJyYXkgKnVuZmlsdGVyZWRDb29raWVzID0g
W05TSFRUUENvb2tpZSBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzOmhlYWRlckZpZWxk
cyBmb3JVUkw6Y29va2llVVJMXTsKLSNlbmRpZgotCi0gICAgUmV0YWluUHRyPE5TQXJyYXk+IGZp
bHRlcmVkQ29va2llcyA9IGZpbHRlckNvb2tpZXModW5maWx0ZXJlZENvb2tpZXMpOwotICAgIEFT
U0VSVChbZmlsdGVyZWRDb29raWVzLmdldCgpIGNvdW50XSA8PSAxKTsKLQotI2lmIEhBVkUoQ0ZO
RVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQotICAgIGlmIChzZXNzaW9uLnNob3VsZEJsb2Nr
Q29va2llcyhmaXJzdFBhcnR5LCB1cmwpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcg
cGFydGl0aW9uID0gc2Vzc2lvbi5jb29raWVTdG9yYWdlUGFydGl0aW9uKGZpcnN0UGFydHksIHVy
bCwgZnJhbWVJRCwgcGFnZUlEKTsKLSAgICBpZiAoIXBhcnRpdGlvbi5pc0VtcHR5KCkpCi0gICAg
ICAgIGZpbHRlcmVkQ29va2llcyA9IGFwcGx5UGFydGl0aW9uVG9Db29raWVzKHBhcnRpdGlvbiwg
ZmlsdGVyZWRDb29raWVzLmdldCgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGZyYW1lSUQp
OwotICAgIFVOVVNFRF9QQVJBTShwYWdlSUQpOwotI2VuZGlmCi0KLSAgICBzZXRIVFRQQ29va2ll
c0ZvclVSTChzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgZmlsdGVyZWRDb29raWVzLmdl
dCgpLCBjb29raWVVUkwsIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbyk7Ci0KLSAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwotfQotCi1zdGF0aWMgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5
IGh0dHBDb29raWVBY2NlcHRQb2xpY3koQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9y
YWdlKQotewotICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6
OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKLQotICAgIGlmICghY29va2llU3RvcmFnZSkKLSAgICAg
ICAgcmV0dXJuIFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0g
Y29va2llQWNjZXB0UG9saWN5XTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxOU0hUVFBDb29r
aWVBY2NlcHRQb2xpY3k+KENGSFRUUENvb2tpZVN0b3JhZ2VHZXRDb29raWVBY2NlcHRQb2xpY3ko
Y29va2llU3RvcmFnZSkpOwotfQotCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbikKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7Ci0KLSAgICBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5ID0g
aHR0cENvb2tpZUFjY2VwdFBvbGljeShzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSk7Ci0g
ICAgcmV0dXJuIGNvb2tpZUFjY2VwdFBvbGljeSA9PSBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lB
bHdheXMgfHwgY29va2llQWNjZXB0UG9saWN5ID09IE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeU9u
bHlGcm9tTWFpbkRvY3VtZW50RG9tYWluIHx8IGNvb2tpZUFjY2VwdFBvbGljeSA9PSBOU0hUVFBD
b29raWVBY2NlcHRQb2xpY3lFeGNsdXNpdmVseUZyb21NYWluRG9jdW1lbnREb21haW47Ci0KLSAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBnZXRSYXdDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29u
c3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29u
c3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9u
YWw8dWludDY0X3Q+IHBhZ2VJRCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0gICAg
cmF3Q29va2llcy5jbGVhcigpOwotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQot
ICAgIE5TQXJyYXkgKmNvb2tpZXMgPSBjb29raWVzRm9yVVJMKHNlc3Npb24sIGZpcnN0UGFydHks
IHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQpOwotICAgIE5TVUludGVnZXIgY291
bnQgPSBbY29va2llcyBjb3VudF07Ci0gICAgcmF3Q29va2llcy5yZXNlcnZlQ2FwYWNpdHkoY291
bnQpOwotICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAg
ICAgTlNIVFRQQ29va2llICpjb29raWUgPSAoTlNIVFRQQ29va2llICopW2Nvb2tpZXMgb2JqZWN0
QXRJbmRleDppXTsKLSAgICAgICAgcmF3Q29va2llcy51bmNoZWNrZWRBcHBlbmQoeyBjb29raWUg
fSk7Ci0gICAgfQotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBkZWxldGVDb29raWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9u
JiBzZXNzaW9uLCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQotewot
ICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vz
c1Jhd0Nvb2tpZXMpKTsKLQotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAg
IFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gc2Vzc2lv
bi5jb29raWVTdG9yYWdlKCk7Ci0gICAgTlNBcnJheSAqY29va2llcyA9IGh0dHBDb29raWVzRm9y
VVJMKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIG5pbCwgc3RkOjpudWxsb3B0LCB1cmwpOwotCi0gICAg
TlNTdHJpbmcgKmNvb2tpZU5hbWVTdHJpbmcgPSBjb29raWVOYW1lOwotCi0gICAgTlNVSW50ZWdl
ciBjb3VudCA9IFtjb29raWVzIGNvdW50XTsKLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkg
PCBjb3VudDsgKytpKSB7Ci0gICAgICAgIE5TSFRUUENvb2tpZSAqY29va2llID0gKE5TSFRUUENv
b2tpZSAqKVtjb29raWVzIG9iamVjdEF0SW5kZXg6aV07Ci0gICAgICAgIGlmIChbW2Nvb2tpZSBu
YW1lXSBpc0VxdWFsVG9TdHJpbmc6Y29va2llTmFtZVN0cmluZ10pCi0gICAgICAgICAgICBkZWxl
dGVIVFRQQ29va2llKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZSk7Ci0gICAgfQotCi0gICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLX0KLQotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29v
a2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIEhhc2hTZXQ8U3RyaW5n
PiYgaG9zdG5hbWVzKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAg
IE5TQXJyYXkgKmNvb2tpZXMgPSBodHRwQ29va2llcyhzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5n
ZXQoKSk7Ci0gICAgCi0gICAgZm9yIChOU0hUVFBDb29raWUqIGNvb2tpZSBpbiBjb29raWVzKQot
ICAgICAgICBob3N0bmFtZXMuYWRkKFtjb29raWUgZG9tYWluXSk7Ci0gICAgCi0gICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKLX0KLQotdm9pZCBkZWxldGVBbGxDb29raWVzKGNvbnN0IE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbikKLXsKLSAgICBkZWxldGVBbGxIVFRQQ29va2ll
cyhzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSk7Ci19Ci0KLXZvaWQgZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBob3N0bmFtZXMpCi17Ci0gICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2
aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOwotCi0gICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0
b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKTsKLSAgICBO
U0FycmF5ICpjb29raWVzID0gaHR0cENvb2tpZXMoY29va2llU3RvcmFnZS5nZXQoKSk7Ci0gICAg
aWYgKCFjb29raWVzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgVmVj
dG9yPFJldGFpblB0cjxOU0hUVFBDb29raWU+Pj4gY29va2llc0J5RG9tYWluOwotICAgIGZvciAo
TlNIVFRQQ29va2llKiBjb29raWUgaW4gY29va2llcykgewotICAgICAgICBhdXRvJiBjb29raWVz
ID0gY29va2llc0J5RG9tYWluLmFkZChjb29raWUuZG9tYWluLCBWZWN0b3I8UmV0YWluUHRyPE5T
SFRUUENvb2tpZT4+KCkpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgY29va2llcy5hcHBlbmQo
Y29va2llKTsKLSAgICB9Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGhvc3RuYW1lIDogaG9zdG5h
bWVzKSB7Ci0gICAgICAgIGF1dG8gaXQgPSBjb29raWVzQnlEb21haW4uZmluZChob3N0bmFtZSk7
Ci0gICAgICAgIGlmIChpdCA9PSBjb29raWVzQnlEb21haW4uZW5kKCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGl0LT52YWx1ZSkKLSAgICAg
ICAgICAgIGRlbGV0ZUhUVFBDb29raWUoY29va2llU3RvcmFnZS5nZXQoKSwgY29va2llLmdldCgp
KTsKLSAgICB9Ci0KLSAgICBbc2Vzc2lvbi5uc0Nvb2tpZVN0b3JhZ2UoKSBfc2F2ZUNvb2tpZXNd
OwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLX0KLQotdm9pZCBkZWxldGVBbGxD
b29raWVzTW9kaWZpZWRTaW5jZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24s
IFdhbGxUaW1lIHRpbWVQb2ludCkKLXsKLSAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQ
cm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7Ci0KLSAgICBpZiAoIVtOU0hU
VFBDb29raWVTdG9yYWdlIGluc3RhbmNlc1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxlY3RvcihyZW1v
dmVDb29raWVzU2luY2VEYXRlOildKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU1RpbWVJbnRl
cnZhbCB0aW1lSW50ZXJ2YWwgPSB0aW1lUG9pbnQuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRz
KCk7Ci0gICAgTlNEYXRlICpkYXRlID0gW05TRGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNl
MTk3MDp0aW1lSW50ZXJ2YWxdOwotCi0gICAgYXV0byAqc3RvcmFnZSA9IHNlc3Npb24ubnNDb29r
aWVTdG9yYWdlKCk7Ci0KLSAgICBbc3RvcmFnZSByZW1vdmVDb29raWVzU2luY2VEYXRlOmRhdGVd
OwotICAgIFtzdG9yYWdlIF9zYXZlQ29va2llc107Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzT3Bl
cmF0aW9uUXVldWVEZWxlZ2F0ZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
bWFjL1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzT3BlcmF0aW9uUXVldWVEZWxlZ2F0ZS5tbQppbmRl
eCA4ODc2MzEwMGFkNGU2NmQ5NDEyMjY4YTdhOTFjMzlmZDM5OTAyNjMzLi5iM2U5MDdmZmRkZTI4
NWY4YzgwM2Q2NzFhMjdmZjc0YTA5MjFjMjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlUmVzb3VyY2VIYW5kbGVBc09wZXJhdGlvblF1ZXVl
RGVsZWdhdGUubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvV2Vi
Q29yZVJlc291cmNlSGFuZGxlQXNPcGVyYXRpb25RdWV1ZURlbGVnYXRlLm1tCkBAIC0yOSw2ICsy
OSw3IEBACiAjaW1wb3J0ICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIgogI2ltcG9ydCAiQXV0
aGVudGljYXRpb25NYWMuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk5ldHdvcmtp
bmdDb250ZXh0LmgiCiAjaW1wb3J0ICJSZXNvdXJjZUhhbmRsZS5oIgogI2ltcG9ydCAiUmVzb3Vy
Y2VIYW5kbGVDbGllbnQuaCIKICNpbXBvcnQgIlJlc291cmNlUmVxdWVzdC5oIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWU4NzYxZjY1YjE1YWIwOWEyNGVkYjkw
ZWRhYTg1MjMzZDUzMWM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3Vw
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2MCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAo
QykgMjAwOCBYYW4gTG9wZXogPHhhbkBnbm9tZS5vcmc+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA5
IElnYWxpYSBTLkwuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2lmIFVTRShTT1VQKQotCi0jaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVk
ZSAiQ29va2llUmVxdWVzdEhlYWRlckZpZWxkUHJveHkuaCIKLSNpbmNsdWRlICJDb29raWVzU3Ry
YXRlZ3kuaCIKLSNpbmNsdWRlICJHVW5pcXVlUHRyU291cC5oIgotI2luY2x1ZGUgIk5ldHdvcmtT
dG9yYWdlU2Vzc2lvbi5oIgotI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1Db29raWVKYXIuaCIKLSNpbmNsdWRlICJTb3VwTmV0d29ya1Nlc3Npb24uaCIK
LSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KLSNpbmNsdWRlIDx3
dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBodHRwT25seUNvb2tpZUV4aXN0
cyhjb25zdCBHU0xpc3QqIGNvb2tpZXMsIGNvbnN0IGdjaGFyKiBuYW1lLCBjb25zdCBnY2hhciog
cGF0aCkKLXsKLSAgICBmb3IgKGNvbnN0IEdTTGlzdCogaXRlciA9IGNvb2tpZXM7IGl0ZXI7IGl0
ZXIgPSBnX3NsaXN0X25leHQoaXRlcikpIHsKLSAgICAgICAgU291cENvb2tpZSogY29va2llID0g
c3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZXItPmRhdGEpOwotICAgICAgICBpZiAoIXN0cmNt
cChzb3VwX2Nvb2tpZV9nZXRfbmFtZShjb29raWUpLCBuYW1lKQotICAgICAgICAgICAgJiYgIWdf
c3RyY21wMChzb3VwX2Nvb2tpZV9nZXRfcGF0aChjb29raWUpLCBwYXRoKSkgewotICAgICAgICAg
ICAgaWYgKHNvdXBfY29va2llX2dldF9odHRwX29ubHkoY29va2llKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBzZXRDb29raWVzRnJvbURPTShjb25zdCBOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2Ft
ZVNpdGVJbmZvJiwgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1l
SUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LXsKLSAgICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7
Ci0gICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiBvcmlnaW4gPSB1cmwuY3JlYXRlU291cFVSSSgpOwot
ICAgIGlmICghb3JpZ2luKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHVW5pcXVlUHRyPFNvdXBV
Ukk+IGZpcnN0UGFydHlVUkkgPSBmaXJzdFBhcnR5LmNyZWF0ZVNvdXBVUkkoKTsKLSAgICBpZiAo
IWZpcnN0UGFydHlVUkkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEdldCBleGlzdGluZyBj
b29raWVzIGZvciB0aGlzIG9yaWdpbi4KLSAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBzZXNzaW9u
LmNvb2tpZVN0b3JhZ2UoKTsKLSAgICBHU0xpc3QqIGV4aXN0aW5nQ29va2llcyA9IHNvdXBfY29v
a2llX2phcl9nZXRfY29va2llX2xpc3QoamFyLCBvcmlnaW4uZ2V0KCksIFRSVUUpOwotCi0gICAg
Zm9yIChhdXRvJiBjb29raWVTdHJpbmcgOiB2YWx1ZS5zcGxpdCgnXG4nKSkgewotICAgICAgICBH
VW5pcXVlUHRyPFNvdXBDb29raWU+IGNvb2tpZShzb3VwX2Nvb2tpZV9wYXJzZShjb29raWVTdHJp
bmcudXRmOCgpLmRhdGEoKSwgb3JpZ2luLmdldCgpKSk7Ci0gICAgICAgIGlmICghY29va2llKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb29raWUg
aXMgbm90IGh0dHBPbmx5IHNpbmNlIHN1Y2ggY29va2llcyBzaG91bGQgbm90IGJlIHNldCBmcm9t
IEphdmFTY3JpcHQuCi0gICAgICAgIGlmIChzb3VwX2Nvb2tpZV9nZXRfaHR0cF9vbmx5KGNvb2tp
ZS5nZXQoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBNYWtlIHN1cmUg
d2UgZG8gbm90IG92ZXJ3cml0ZSBodHRwT25seSBjb29raWVzIGZyb20gSmF2YVNjcmlwdC4KLSAg
ICAgICAgaWYgKGh0dHBPbmx5Q29va2llRXhpc3RzKGV4aXN0aW5nQ29va2llcywgc291cF9jb29r
aWVfZ2V0X25hbWUoY29va2llLmdldCgpKSwgc291cF9jb29raWVfZ2V0X3BhdGgoY29va2llLmdl
dCgpKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBzb3VwX2Nvb2tpZV9qYXJf
YWRkX2Nvb2tpZV93aXRoX2ZpcnN0X3BhcnR5KGphciwgZmlyc3RQYXJ0eVVSSS5nZXQoKSwgY29v
a2llLnJlbGVhc2UoKSk7Ci0gICAgfQotCi0gICAgc291cF9jb29raWVzX2ZyZWUoZXhpc3RpbmdD
b29raWVzKTsKLX0KLQotc3RhdGljIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZXNGb3JT
ZXNzaW9uKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiB1
cmwsIGJvb2wgZm9ySFRUUEhlYWRlciwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3Vy
ZUNvb2tpZXMpCi17Ci0gICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiB1cmkgPSB1cmwuY3JlYXRlU291
cFVSSSgpOwotICAgIGlmICghdXJpKQotICAgICAgICByZXR1cm4geyB7IH0sIGZhbHNlIH07Ci0K
LSAgICBHU0xpc3QqIGNvb2tpZXMgPSBzb3VwX2Nvb2tpZV9qYXJfZ2V0X2Nvb2tpZV9saXN0KHNl
c3Npb24uY29va2llU3RvcmFnZSgpLCB1cmkuZ2V0KCksIGZvckhUVFBIZWFkZXIpOwotICAgIGJv
b2wgZGlkQWNjZXNzU2VjdXJlQ29va2llcyA9IGZhbHNlOwotCi0gICAgLy8gbGlic291cCBzaG91
bGQgb21pdCBzZWN1cmUgY29va2llcyBpdHNlbGYgaWYgdGhlIHByb3RvY29sIGlzIG5vdCBodHRw
cy4KLSAgICBpZiAodXJsLnByb3RvY29sSXMoImh0dHBzIikpIHsKLSAgICAgICAgR1NMaXN0KiBp
dGVtID0gY29va2llczsKLSAgICAgICAgd2hpbGUgKGl0ZW0pIHsKLSAgICAgICAgICAgIGF1dG8g
Y29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpOwotICAgICAgICAg
ICAgaWYgKHNvdXBfY29va2llX2dldF9zZWN1cmUoY29va2llKSkgewotICAgICAgICAgICAgICAg
IGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmIChpbmNs
dWRlU2VjdXJlQ29va2llcyA9PSBJbmNsdWRlU2VjdXJlQ29va2llczo6Tm8pIHsKLSAgICAgICAg
ICAgICAgICAgICAgR1NMaXN0KiBuZXh0ID0gaXRlbS0+bmV4dDsKLSAgICAgICAgICAgICAgICAg
ICAgc291cF9jb29raWVfZnJlZShzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSkp
OwotICAgICAgICAgICAgICAgICAgICBjb29raWVzID0gZ19zbGlzdF9yZW1vdmVfbGluayhjb29r
aWVzLCBpdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgaXRlbSA9IG5leHQ7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGl0ZW0gPSBpdGVtLT5uZXh0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KCFjb29raWVzKQotICAgICAgICByZXR1cm4geyB7IH0sIGZhbHNlIH07Ci0KLSAgICBHVW5pcXVl
UHRyPGNoYXI+IGNvb2tpZUhlYWRlcihzb3VwX2Nvb2tpZXNfdG9fY29va2llX2hlYWRlcihjb29r
aWVzKSk7Ci0gICAgc291cF9jb29raWVzX2ZyZWUoY29va2llcyk7Ci0KLSAgICByZXR1cm4geyBT
dHJpbmc6OmZyb21VVEY4KGNvb2tpZUhlYWRlci5nZXQoKSksIGRpZEFjY2Vzc1NlY3VyZUNvb2tp
ZXMgfTsKLX0KLQotc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29va2llc0ZvckRPTShjb25zdCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29u
c3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+
IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNv
b2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZpcnN0UGFy
dHkpOwotICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsKLSAgICBVTlVTRURfUEFSQU0ocGFnZUlE
KTsKLSAgICByZXR1cm4gY29va2llc0ZvclNlc3Npb24oc2Vzc2lvbiwgdXJsLCBmYWxzZSwgaW5j
bHVkZVNlY3VyZUNvb2tpZXMpOwotfQotCi1zdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Np
b24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJM
JiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWlu
dDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGZpcnN0UGFydHkpOwotICAgIFVOVVNFRF9QQVJBTShmcmFt
ZUlEKTsKLSAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKLSAgICAvLyBTZWN1cmUgY29va2llcyB3
aWxsIHN0aWxsIG9ubHkgYmUgaW5jbHVkZWQgaWYgdXJsJ3MgcHJvdG9jb2wgaXMgaHR0cHMuCi0g
ICAgcmV0dXJuIGNvb2tpZXNGb3JTZXNzaW9uKHNlc3Npb24sIHVybCwgdHJ1ZSwgaW5jbHVkZVNl
Y3VyZUNvb2tpZXMpOwotfQotCi1zdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVSZXF1ZXN0
SGVhZGVyRmllbGRWYWx1ZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNv
bnN0IENvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5JiBoZWFkZXJGaWVsZFByb3h5KQotewot
ICAgIHJldHVybiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShzZXNzaW9uLCBoZWFkZXJG
aWVsZFByb3h5LmZpcnN0UGFydHksIGhlYWRlckZpZWxkUHJveHkuc2FtZVNpdGVJbmZvLCBoZWFk
ZXJGaWVsZFByb3h5LnVybCwgaGVhZGVyRmllbGRQcm94eS5mcmFtZUlELCBoZWFkZXJGaWVsZFBy
b3h5LnBhZ2VJRCwgaGVhZGVyRmllbGRQcm94eS5pbmNsdWRlU2VjdXJlQ29va2llcyk7Ci19Ci0K
LWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9u
KQotewotICAgIGF1dG8gcG9saWN5ID0gc291cF9jb29raWVfamFyX2dldF9hY2NlcHRfcG9saWN5
KHNlc3Npb24uY29va2llU3RvcmFnZSgpKTsKLSAgICByZXR1cm4gcG9saWN5ID09IFNPVVBfQ09P
S0lFX0pBUl9BQ0NFUFRfQUxXQVlTIHx8IHBvbGljeSA9PSBTT1VQX0NPT0tJRV9KQVJfQUNDRVBU
X05PX1RISVJEX1BBUlRZOwotfQotCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgTmV0d29ya1N0
b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVT
aXRlSW5mbyYsIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlE
LCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIFZlY3RvcjxDb29raWU+JiByYXdDb29r
aWVzKQotewotICAgIFVOVVNFRF9QQVJBTShmaXJzdFBhcnR5KTsKLSAgICBVTlVTRURfUEFSQU0o
ZnJhbWVJRCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7Ci0gICAgcmF3Q29va2llcy5jbGVh
cigpOwotICAgIEdVbmlxdWVQdHI8U291cFVSST4gdXJpID0gdXJsLmNyZWF0ZVNvdXBVUkkoKTsK
LSAgICBpZiAoIXVyaSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1VuaXF1ZVB0cjxH
U0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFyX2dldF9jb29raWVfbGlzdChzZXNzaW9uLmNv
b2tpZVN0b3JhZ2UoKSwgdXJpLmdldCgpLCBUUlVFKSk7Ci0gICAgaWYgKCFjb29raWVzKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKEdTTGlzdCogaXRlciA9IGNvb2tpZXMuZ2V0
KCk7IGl0ZXI7IGl0ZXIgPSBnX3NsaXN0X25leHQoaXRlcikpIHsKLSAgICAgICAgU291cENvb2tp
ZSogc291cENvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVyLT5kYXRhKTsKLSAg
ICAgICAgQ29va2llIGNvb2tpZTsKLSAgICAgICAgY29va2llLm5hbWUgPSBTdHJpbmc6OmZyb21V
VEY4KHNvdXBDb29raWUtPm5hbWUpOwotICAgICAgICBjb29raWUudmFsdWUgPSBTdHJpbmc6OmZy
b21VVEY4KHNvdXBDb29raWUtPnZhbHVlKTsKLSAgICAgICAgY29va2llLmRvbWFpbiA9IFN0cmlu
Zzo6ZnJvbVVURjgoc291cENvb2tpZS0+ZG9tYWluKTsKLSAgICAgICAgY29va2llLnBhdGggPSBT
dHJpbmc6OmZyb21VVEY4KHNvdXBDb29raWUtPnBhdGgpOwotICAgICAgICBjb29raWUuY3JlYXRl
ZCA9IDA7Ci0gICAgICAgIGNvb2tpZS5leHBpcmVzID0gc291cENvb2tpZS0+ZXhwaXJlcyA/IHN0
YXRpY19jYXN0PGRvdWJsZT4oc291cF9kYXRlX3RvX3RpbWVfdChzb3VwQ29va2llLT5leHBpcmVz
KSkgKiAxMDAwIDogMDsKLSAgICAgICAgY29va2llLmh0dHBPbmx5ID0gc291cENvb2tpZS0+aHR0
cF9vbmx5OwotICAgICAgICBjb29raWUuc2VjdXJlID0gc291cENvb2tpZS0+c2VjdXJlOwotICAg
ICAgICBjb29raWUuc2Vzc2lvbiA9ICFzb3VwQ29va2llLT5leHBpcmVzOwotICAgICAgICByYXdD
b29raWVzLmFwcGVuZChXVEZNb3ZlKGNvb2tpZSkpOwotICAgICAgICBzb3VwX2Nvb2tpZV9mcmVl
KHNvdXBDb29raWUpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIGRlbGV0
ZUNvb2tpZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiB1cmkg
PSB1cmwuY3JlYXRlU291cFVSSSgpOwotICAgIGlmICghdXJpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKTsKLSAgICBH
VW5pcXVlUHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nvb2tpZV9qYXJfZ2V0X2Nvb2tpZV9saXN0
KGphciwgdXJpLmdldCgpLCBUUlVFKSk7Ci0gICAgaWYgKCFjb29raWVzKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBDU3RyaW5nIGNvb2tpZU5hbWUgPSBuYW1lLnV0ZjgoKTsKLSAgICBib29sIHdh
c0RlbGV0ZWQgPSBmYWxzZTsKLSAgICBmb3IgKEdTTGlzdCogaXRlciA9IGNvb2tpZXMuZ2V0KCk7
IGl0ZXI7IGl0ZXIgPSBnX3NsaXN0X25leHQoaXRlcikpIHsKLSAgICAgICAgU291cENvb2tpZSog
Y29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZXItPmRhdGEpOwotICAgICAgICBp
ZiAoIXdhc0RlbGV0ZWQgJiYgY29va2llTmFtZSA9PSBjb29raWUtPm5hbWUpIHsKLSAgICAgICAg
ICAgIHNvdXBfY29va2llX2phcl9kZWxldGVfY29va2llKGphciwgY29va2llKTsKLSAgICAgICAg
ICAgIHdhc0RlbGV0ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHNvdXBfY29va2llX2Zy
ZWUoY29va2llKTsKLSAgICB9Ci19Ci0KLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoY29u
c3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBIYXNoU2V0PFN0cmluZz4mIGhvc3Ru
YW1lcykKLXsKLSAgICBHVW5pcXVlUHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nvb2tpZV9qYXJf
YWxsX2Nvb2tpZXMoc2Vzc2lvbi5jb29raWVTdG9yYWdlKCkpKTsKLSAgICBmb3IgKEdTTGlzdCog
aXRlbSA9IGNvb2tpZXMuZ2V0KCk7IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsK
LSAgICAgICAgU291cENvb2tpZSogY29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0
ZW0tPmRhdGEpOwotICAgICAgICBpZiAoY29va2llLT5kb21haW4pCi0gICAgICAgICAgICBob3N0
bmFtZXMuYWRkKFN0cmluZzo6ZnJvbVVURjgoY29va2llLT5kb21haW4pKTsKLSAgICAgICAgc291
cF9jb29raWVfZnJlZShjb29raWUpOwotICAgIH0KLX0KLQotdm9pZCBkZWxldGVDb29raWVzRm9y
SG9zdG5hbWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGhvc3RuYW1lcykKLXsKLSAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIg
PSBzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgaG9zdG5h
bWUgOiBob3N0bmFtZXMpIHsKLSAgICAgICAgQ1N0cmluZyBob3N0TmFtZVN0cmluZyA9IGhvc3Ru
YW1lLnV0ZjgoKTsKLQotICAgICAgICBHVW5pcXVlUHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nv
b2tpZV9qYXJfYWxsX2Nvb2tpZXMoY29va2llSmFyKSk7Ci0gICAgICAgIGZvciAoR1NMaXN0KiBp
dGVtID0gY29va2llcy5nZXQoKTsgaXRlbTsgaXRlbSA9IGdfc2xpc3RfbmV4dChpdGVtKSkgewot
ICAgICAgICAgICAgU291cENvb2tpZSogY29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+
KGl0ZW0tPmRhdGEpOwotICAgICAgICAgICAgaWYgKHNvdXBfY29va2llX2RvbWFpbl9tYXRjaGVz
KGNvb2tpZSwgaG9zdE5hbWVTdHJpbmcuZGF0YSgpKSkKLSAgICAgICAgICAgICAgICBzb3VwX2Nv
b2tpZV9qYXJfZGVsZXRlX2Nvb2tpZShjb29raWVKYXIsIGNvb2tpZSk7Ci0gICAgICAgICAgICBz
b3VwX2Nvb2tpZV9mcmVlKGNvb2tpZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgZGVs
ZXRlQWxsQ29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24pCi17Ci0g
ICAgU291cENvb2tpZUphciogY29va2llSmFyID0gc2Vzc2lvbi5jb29raWVTdG9yYWdlKCk7Ci0g
ICAgR1VuaXF1ZVB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFyX2FsbF9jb29raWVz
KGNvb2tpZUphcikpOwotICAgIGZvciAoR1NMaXN0KiBpdGVtID0gY29va2llcy5nZXQoKTsgaXRl
bTsgaXRlbSA9IGdfc2xpc3RfbmV4dChpdGVtKSkgewotICAgICAgICBTb3VwQ29va2llKiBjb29r
aWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSk7Ci0gICAgICAgIHNvdXBf
Y29va2llX2phcl9kZWxldGVfY29va2llKGNvb2tpZUphciwgY29va2llKTsKLSAgICAgICAgc291
cF9jb29raWVfZnJlZShjb29raWUpOwotICAgIH0KLX0KLQotdm9pZCBkZWxldGVBbGxDb29raWVz
TW9kaWZpZWRTaW5jZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIFdhbGxU
aW1lIHRpbWVzdGFtcCkKLXsKLSAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGRlbGV0aW5n
IGNvb2tpZXMgbW9kaWZpZWQgc2luY2UgdGhlIGdpdmVuIHRpbWVzdGFtcC4gSXQgc2hvdWxkIHBy
b2JhYmx5IGJlIGFkZGVkIHRvIGxpYnNvdXAuCi0gICAgaWYgKHRpbWVzdGFtcCA9PSBXYWxsVGlt
ZTo6ZnJvbVJhd1NlY29uZHMoMCkpCi0gICAgICAgIGRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbik7
Ci0gICAgZWxzZQotICAgICAgICBnX3dhcm5pbmcoIkRlbGV0aW5nIGNvb2tpZXMgbW9kaWZpZWQg
c2luY2UgYSBnaXZlbiB0aW1lIHNwYW4gaXMgbm90IHN1cHBvcnRlZCB5ZXQiKTsKLX0KLQotfQot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9OZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9OZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcAppbmRleCA1ZTNjMjQ1
YTNjNmM2MzZiN2U2MmQzMzYxYzNiN2ZmM2ZjODJkNjAwLi43ZDQ5YzZmYjBkODE2MjcxMmU5NjA0
M2Y2ZmZiMDRjNDcyZjBlZTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3Bw
CkBAIC0zMiw2ICszMiw3IEBACiAjaWYgVVNFKFNPVVApCiAKICNpbmNsdWRlICJDb29raWUuaCIK
KyNpbmNsdWRlICJDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eS5oIgogI2luY2x1ZGUgIkdV
bmlxdWVQdHJTb3VwLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJT
b3VwTmV0d29ya1Nlc3Npb24uaCIKQEAgLTI5MSw2ICsyOTIsNjQgQEAgdm9pZCBOZXR3b3JrU3Rv
cmFnZVNlc3Npb246OnNhdmVDcmVkZW50aWFsVG9QZXJzaXN0ZW50U3RvcmFnZShjb25zdCBQcm90
ZWN0aW9uU3AKICNlbmRpZgogfQogCitib29sIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2ll
c0VuYWJsZWQoKSBjb25zdAoreworICAgIGF1dG8gcG9saWN5ID0gc291cF9jb29raWVfamFyX2dl
dF9hY2NlcHRfcG9saWN5KGNvb2tpZVN0b3JhZ2UoKSk7CisgICAgcmV0dXJuIHBvbGljeSA9PSBT
T1VQX0NPT0tJRV9KQVJfQUNDRVBUX0FMV0FZUyB8fCBwb2xpY3kgPT0gU09VUF9DT09LSUVfSkFS
X0FDQ0VQVF9OT19USElSRF9QQVJUWTsKK30KKworc3RhdGljIGlubGluZSBib29sIGh0dHBPbmx5
Q29va2llRXhpc3RzKGNvbnN0IEdTTGlzdCogY29va2llcywgY29uc3QgZ2NoYXIqIG5hbWUsIGNv
bnN0IGdjaGFyKiBwYXRoKQoreworICAgIGZvciAoY29uc3QgR1NMaXN0KiBpdGVyID0gY29va2ll
czsgaXRlcjsgaXRlciA9IGdfc2xpc3RfbmV4dChpdGVyKSkgeworICAgICAgICBTb3VwQ29va2ll
KiBjb29raWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlci0+ZGF0YSk7CisgICAgICAg
IGlmICghc3RyY21wKHNvdXBfY29va2llX2dldF9uYW1lKGNvb2tpZSksIG5hbWUpIAorICAgICAg
ICAgICAgJiYgIWdfc3RyY21wMChzb3VwX2Nvb2tpZV9nZXRfcGF0aChjb29raWUpLCBwYXRoKSkg
eworICAgICAgICAgICAgaWYgKHNvdXBfY29va2llX2dldF9odHRwX29ubHkoY29va2llKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Np
b246OnNldENvb2tpZXNGcm9tRE9NKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNp
dGVJbmZvJiwgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQs
IHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29u
c3QKK3sKKyAgICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7CisgICAgVU5VU0VEX1BBUkFNKHBhZ2VJ
RCk7CisgICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiBvcmlnaW4gPSB1cmwuY3JlYXRlU291cFVSSSgp
OworICAgIGlmICghb3JpZ2luKQorICAgICAgICByZXR1cm47CisKKyAgICBHVW5pcXVlUHRyPFNv
dXBVUkk+IGZpcnN0UGFydHlVUkkgPSBmaXJzdFBhcnR5LmNyZWF0ZVNvdXBVUkkoKTsKKyAgICBp
ZiAoIWZpcnN0UGFydHlVUkkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEdldCBleGlzdGlu
ZyBjb29raWVzIGZvciB0aGlzIG9yaWdpbi4KKyAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBjb29r
aWVTdG9yYWdlKCk7CisgICAgR1NMaXN0KiBleGlzdGluZ0Nvb2tpZXMgPSBzb3VwX2Nvb2tpZV9q
YXJfZ2V0X2Nvb2tpZV9saXN0KGphciwgb3JpZ2luLmdldCgpLCBUUlVFKTsKKworICAgIFZlY3Rv
cjxTdHJpbmc+IGNvb2tpZXM7CisgICAgdmFsdWUuc3BsaXQoJ1xuJywgY29va2llcyk7CisgICAg
Y29uc3Qgc2l6ZV90IGNvb2tpZXNDb3VudCA9IGNvb2tpZXMuc2l6ZSgpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY29va2llc0NvdW50OyArK2kpIHsKKyAgICAgICAgR1VuaXF1ZVB0cjxT
b3VwQ29va2llPiBjb29raWUoc291cF9jb29raWVfcGFyc2UoY29va2llc1tpXS51dGY4KCkuZGF0
YSgpLCBvcmlnaW4uZ2V0KCkpKTsKKyAgICAgICAgaWYgKCFjb29raWUpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvb2tpZSBpcyBub3QgaHR0cE9u
bHkgc2luY2Ugc3VjaCBjb29raWVzIHNob3VsZCBub3QgYmUgc2V0IGZyb20gSmF2YVNjcmlwdC4K
KyAgICAgICAgaWYgKHNvdXBfY29va2llX2dldF9odHRwX29ubHkoY29va2llLmdldCgpKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkbyBub3Qgb3Zl
cndyaXRlIGh0dHBPbmx5IGNvb2tpZXMgZnJvbSBKYXZhU2NyaXB0LgorICAgICAgICBpZiAoaHR0
cE9ubHlDb29raWVFeGlzdHMoZXhpc3RpbmdDb29raWVzLCBzb3VwX2Nvb2tpZV9nZXRfbmFtZShj
b29raWUuZ2V0KCkpLCBzb3VwX2Nvb2tpZV9nZXRfcGF0aChjb29raWUuZ2V0KCkpKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHNvdXBfY29va2llX2phcl9hZGRfY29va2llX3dp
dGhfZmlyc3RfcGFydHkoamFyLCBmaXJzdFBhcnR5VVJJLmdldCgpLCBjb29raWUucmVsZWFzZSgp
KTsKKyAgICB9CisKKyAgICBzb3VwX2Nvb2tpZXNfZnJlZShleGlzdGluZ0Nvb2tpZXMpOworfQor
CiB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llcyhjb25zdCBWZWN0b3I8Q29v
a2llPiYgY29va2llcywgY29uc3QgVVJMJiwgY29uc3QgVVJMJikKIHsKICAgICBmb3IgKGF1dG8g
Y29va2llIDogY29va2llcykKQEAgLTMwOCw2ICszNjcsNzcgQEAgdm9pZCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmRlbGV0ZUNvb2tpZShjb25zdCBDb29raWUmIGNvb2tpZSkKICAgICBzb3VwX2Nv
b2tpZV9qYXJfZGVsZXRlX2Nvb2tpZShjb29raWVTdG9yYWdlKCksIHRhcmdldENvb2tpZS5nZXQo
KSk7CiB9CiAKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVDb29raWUoY29uc3Qg
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyAgICBHVW5pcXVlUHRyPFNv
dXBVUkk+IHVyaSA9IHVybC5jcmVhdGVTb3VwVVJJKCk7CisgICAgaWYgKCF1cmkpCisgICAgICAg
IHJldHVybjsKKworICAgIFNvdXBDb29raWVKYXIqIGphciA9IGNvb2tpZVN0b3JhZ2UoKTsKKyAg
ICBHVW5pcXVlUHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nvb2tpZV9qYXJfZ2V0X2Nvb2tpZV9s
aXN0KGphciwgdXJpLmdldCgpLCBUUlVFKSk7CisgICAgaWYgKCFjb29raWVzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBDU3RyaW5nIGNvb2tpZU5hbWUgPSBuYW1lLnV0ZjgoKTsKKyAgICBib29s
IHdhc0RlbGV0ZWQgPSBmYWxzZTsKKyAgICBmb3IgKEdTTGlzdCogaXRlciA9IGNvb2tpZXMuZ2V0
KCk7IGl0ZXI7IGl0ZXIgPSBnX3NsaXN0X25leHQoaXRlcikpIHsKKyAgICAgICAgU291cENvb2tp
ZSogY29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZXItPmRhdGEpOworICAgICAg
ICBpZiAoIXdhc0RlbGV0ZWQgJiYgY29va2llTmFtZSA9PSBjb29raWUtPm5hbWUpIHsKKyAgICAg
ICAgICAgIHNvdXBfY29va2llX2phcl9kZWxldGVfY29va2llKGphciwgY29va2llKTsKKyAgICAg
ICAgICAgIHdhc0RlbGV0ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHNvdXBfY29va2ll
X2ZyZWUoY29va2llKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpk
ZWxldGVBbGxDb29raWVzKCkKK3sKKyAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBjb29r
aWVTdG9yYWdlKCk7CisgICAgR1VuaXF1ZVB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVf
amFyX2FsbF9jb29raWVzKGNvb2tpZUphcikpOworICAgIGZvciAoR1NMaXN0KiBpdGVtID0gY29v
a2llcy5nZXQoKTsgaXRlbTsgaXRlbSA9IGdfc2xpc3RfbmV4dChpdGVtKSkgeworICAgICAgICBT
b3VwQ29va2llKiBjb29raWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSk7
CisgICAgICAgIHNvdXBfY29va2llX2phcl9kZWxldGVfY29va2llKGNvb2tpZUphciwgY29va2ll
KTsKKyAgICAgICAgc291cF9jb29raWVfZnJlZShjb29raWUpOworICAgIH0KK30KKwordm9pZCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFdhbGxU
aW1lIHRpbWVzdGFtcCkKK3sKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGRlbGV0aW5n
IGNvb2tpZXMgbW9kaWZpZWQgc2luY2UgdGhlIGdpdmVuIHRpbWVzdGFtcC4gSXQgc2hvdWxkIHBy
b2JhYmx5IGJlIGFkZGVkIHRvIGxpYnNvdXAuCisgICAgaWYgKHRpbWVzdGFtcCA9PSBXYWxsVGlt
ZTo6ZnJvbVJhd1NlY29uZHMoMCkpCisgICAgICAgIGRlbGV0ZUFsbENvb2tpZXMoKTsKKyAgICBl
bHNlCisgICAgICAgIGdfd2FybmluZygiRGVsZXRpbmcgY29va2llcyBtb2RpZmllZCBzaW5jZSBh
IGdpdmVuIHRpbWUgc3BhbiBpcyBub3Qgc3VwcG9ydGVkIHlldCIpOworfQorCit2b2lkIE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYgaG9zdG5hbWVzKQoreworICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZUphciA9IGNv
b2tpZVN0b3JhZ2UoKTsKKworICAgIGZvciAoY29uc3QgYXV0byYgaG9zdG5hbWUgOiBob3N0bmFt
ZXMpIHsKKyAgICAgICAgQ1N0cmluZyBob3N0TmFtZVN0cmluZyA9IGhvc3RuYW1lLnV0ZjgoKTsK
KworICAgICAgICBHVW5pcXVlUHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nvb2tpZV9qYXJfYWxs
X2Nvb2tpZXMoY29va2llSmFyKSk7CisgICAgICAgIGZvciAoR1NMaXN0KiBpdGVtID0gY29va2ll
cy5nZXQoKTsgaXRlbTsgaXRlbSA9IGdfc2xpc3RfbmV4dChpdGVtKSkgeworICAgICAgICAgICAg
U291cENvb2tpZSogY29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEp
OworICAgICAgICAgICAgaWYgKHNvdXBfY29va2llX2RvbWFpbl9tYXRjaGVzKGNvb2tpZSwgaG9z
dE5hbWVTdHJpbmcuZGF0YSgpKSkKKyAgICAgICAgICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfZGVs
ZXRlX2Nvb2tpZShjb29raWVKYXIsIGNvb2tpZSk7CisgICAgICAgICAgICBzb3VwX2Nvb2tpZV9m
cmVlKGNvb2tpZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1l
cykKK3sKKyAgICBHVW5pcXVlUHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nvb2tpZV9qYXJfYWxs
X2Nvb2tpZXMoY29va2llU3RvcmFnZSgpKSk7CisgICAgZm9yIChHU0xpc3QqIGl0ZW0gPSBjb29r
aWVzLmdldCgpOyBpdGVtOyBpdGVtID0gZ19zbGlzdF9uZXh0KGl0ZW0pKSB7CisgICAgICAgIFNv
dXBDb29raWUqIGNvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5kYXRhKTsK
KyAgICAgICAgaWYgKGNvb2tpZS0+ZG9tYWluKQorICAgICAgICAgICAgaG9zdG5hbWVzLmFkZChT
dHJpbmc6OmZyb21VVEY4KGNvb2tpZS0+ZG9tYWluKSk7CisgICAgICAgIHNvdXBfY29va2llX2Zy
ZWUoY29va2llKTsKKyAgICB9Cit9CisKIFZlY3RvcjxDb29raWU+IE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6Z2V0QWxsQ29va2llcygpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgV0sy
IHRvIHVzZS4KQEAgLTMzMCw2ICs0NjAsOTggQEAgVmVjdG9yPENvb2tpZT4gTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpnZXRDb29raWVzKGNvbnN0IFVSTCYgdXJsKQogICAgIHJldHVybiBjb29raWVz
OwogfQogCitib29sIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0UmF3Q29va2llcyhjb25zdCBV
UkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYgdXJsLCBzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdl
SUQsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKSBjb25zdAoreworICAgIFVOVVNFRF9QQVJB
TShmaXJzdFBhcnR5KTsKKyAgICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7CisgICAgVU5VU0VEX1BB
UkFNKHBhZ2VJRCk7CisgICAgcmF3Q29va2llcy5jbGVhcigpOworICAgIEdVbmlxdWVQdHI8U291
cFVSST4gdXJpID0gdXJsLmNyZWF0ZVNvdXBVUkkoKTsKKyAgICBpZiAoIXVyaSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgR1VuaXF1ZVB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29r
aWVfamFyX2dldF9jb29raWVfbGlzdChjb29raWVTdG9yYWdlKCksIHVyaS5nZXQoKSwgVFJVRSkp
OworICAgIGlmICghY29va2llcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChH
U0xpc3QqIGl0ZXIgPSBjb29raWVzLmdldCgpOyBpdGVyOyBpdGVyID0gZ19zbGlzdF9uZXh0KGl0
ZXIpKSB7CisgICAgICAgIFNvdXBDb29raWUqIHNvdXBDb29raWUgPSBzdGF0aWNfY2FzdDxTb3Vw
Q29va2llKj4oaXRlci0+ZGF0YSk7CisgICAgICAgIENvb2tpZSBjb29raWU7CisgICAgICAgIGNv
b2tpZS5uYW1lID0gU3RyaW5nOjpmcm9tVVRGOChzb3VwQ29va2llLT5uYW1lKTsKKyAgICAgICAg
Y29va2llLnZhbHVlID0gU3RyaW5nOjpmcm9tVVRGOChzb3VwQ29va2llLT52YWx1ZSk7CisgICAg
ICAgIGNvb2tpZS5kb21haW4gPSBTdHJpbmc6OmZyb21VVEY4KHNvdXBDb29raWUtPmRvbWFpbik7
CisgICAgICAgIGNvb2tpZS5wYXRoID0gU3RyaW5nOjpmcm9tVVRGOChzb3VwQ29va2llLT5wYXRo
KTsKKyAgICAgICAgY29va2llLmNyZWF0ZWQgPSAwOworICAgICAgICBjb29raWUuZXhwaXJlcyA9
IHNvdXBDb29raWUtPmV4cGlyZXMgPyBzdGF0aWNfY2FzdDxkb3VibGU+KHNvdXBfZGF0ZV90b190
aW1lX3Qoc291cENvb2tpZS0+ZXhwaXJlcykpICogMTAwMCA6IDA7CisgICAgICAgIGNvb2tpZS5o
dHRwT25seSA9IHNvdXBDb29raWUtPmh0dHBfb25seTsKKyAgICAgICAgY29va2llLnNlY3VyZSA9
IHNvdXBDb29raWUtPnNlY3VyZTsKKyAgICAgICAgY29va2llLnNlc3Npb24gPSAhc291cENvb2tp
ZS0+ZXhwaXJlczsKKyAgICAgICAgcmF3Q29va2llcy5hcHBlbmQoV1RGTW92ZShjb29raWUpKTsK
KyAgICAgICAgc291cF9jb29raWVfZnJlZShzb3VwQ29va2llKTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZXNGb3JT
ZXNzaW9uKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiB1
cmwsIGJvb2wgZm9ySFRUUEhlYWRlciwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3Vy
ZUNvb2tpZXMpCit7CisgICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiB1cmkgPSB1cmwuY3JlYXRlU291
cFVSSSgpOworICAgIGlmICghdXJpKQorICAgICAgICByZXR1cm4geyB7IH0sIGZhbHNlIH07CisK
KyAgICBHU0xpc3QqIGNvb2tpZXMgPSBzb3VwX2Nvb2tpZV9qYXJfZ2V0X2Nvb2tpZV9saXN0KHNl
c3Npb24uY29va2llU3RvcmFnZSgpLCB1cmkuZ2V0KCksIGZvckhUVFBIZWFkZXIpOworICAgIGJv
b2wgZGlkQWNjZXNzU2VjdXJlQ29va2llcyA9IGZhbHNlOworCisgICAgLy8gbGlic291cCBzaG91
bGQgb21pdCBzZWN1cmUgY29va2llcyBpdHNlbGYgaWYgdGhlIHByb3RvY29sIGlzIG5vdCBodHRw
cy4KKyAgICBpZiAodXJsLnByb3RvY29sSXMoImh0dHBzIikpIHsKKyAgICAgICAgR1NMaXN0KiBp
dGVtID0gY29va2llczsKKyAgICAgICAgd2hpbGUgKGl0ZW0pIHsKKyAgICAgICAgICAgIGF1dG8g
Y29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpOworICAgICAgICAg
ICAgaWYgKHNvdXBfY29va2llX2dldF9zZWN1cmUoY29va2llKSkgeworICAgICAgICAgICAgICAg
IGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChpbmNs
dWRlU2VjdXJlQ29va2llcyA9PSBJbmNsdWRlU2VjdXJlQ29va2llczo6Tm8pIHsKKyAgICAgICAg
ICAgICAgICAgICAgR1NMaXN0KiBuZXh0ID0gaXRlbS0+bmV4dDsKKyAgICAgICAgICAgICAgICAg
ICAgc291cF9jb29raWVfZnJlZShzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSkp
OworICAgICAgICAgICAgICAgICAgICBjb29raWVzID0gZ19zbGlzdF9yZW1vdmVfbGluayhjb29r
aWVzLCBpdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgaXRlbSA9IG5leHQ7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGl0ZW0gPSBpdGVtLT5uZXh0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCFjb29raWVzKQorICAgICAgICByZXR1cm4geyB7IH0sIGZhbHNlIH07CisKKyAgICBHVW5pcXVl
UHRyPGNoYXI+IGNvb2tpZUhlYWRlcihzb3VwX2Nvb2tpZXNfdG9fY29va2llX2hlYWRlcihjb29r
aWVzKSk7CisgICAgc291cF9jb29raWVzX2ZyZWUoY29va2llcyk7CisKKyAgICByZXR1cm4geyBT
dHJpbmc6OmZyb21VVEY4KGNvb2tpZUhlYWRlci5nZXQoKSksIGRpZEFjY2Vzc1NlY3VyZUNvb2tp
ZXMgfTsKK30KKworc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gTmV0d29ya1N0b3JhZ2VTZXNzaW9u
Ojpjb29raWVzRm9yRE9NKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZv
JiwgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6
b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNl
Y3VyZUNvb2tpZXMpCit7CisgICAgVU5VU0VEX1BBUkFNKGZpcnN0UGFydHkpOworICAgIFVOVVNF
RF9QQVJBTShmcmFtZUlEKTsKKyAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKKyAgICByZXR1cm4g
Y29va2llc0ZvclNlc3Npb24oKnRoaXMsIHVybCwgZmFsc2UsIGluY2x1ZGVTZWN1cmVDb29raWVz
KTsKK30KKworc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0
IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBm
cmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29r
aWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTShmaXJz
dFBhcnR5KTsKKyAgICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7CisgICAgVU5VU0VEX1BBUkFNKHBh
Z2VJRCk7CisgICAgLy8gU2VjdXJlIGNvb2tpZXMgd2lsbCBzdGlsbCBvbmx5IGJlIGluY2x1ZGVk
IGlmIHVybCdzIHByb3RvY29sIGlzIGh0dHBzLgorICAgIHJldHVybiBjb29raWVzRm9yU2Vzc2lv
bigqdGhpcywgdXJsLCB0cnVlLCBpbmNsdWRlU2VjdXJlQ29va2llcyk7Cit9CisKK3N0ZDo6cGFp
cjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoY29uc3QgQ29va2llUmVxdWVzdEhlYWRlckZpZWxkUHJveHkmIGhlYWRlckZp
ZWxkUHJveHkpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKGhlYWRlckZpZWxkUHJveHkuZmlyc3RQYXJ0eSwgaGVhZGVyRmllbGRQcm94eS5zYW1lU2l0
ZUluZm8sIGhlYWRlckZpZWxkUHJveHkudXJsLCBoZWFkZXJGaWVsZFByb3h5LmZyYW1lSUQsIGhl
YWRlckZpZWxkUHJveHkucGFnZUlELCBoZWFkZXJGaWVsZFByb3h5LmluY2x1ZGVTZWN1cmVDb29r
aWVzKTsKK30KKwogdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmZsdXNoQ29va2llU3RvcmUo
KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIFdLMiB0byB1c2UuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdl
ci5jcHAKaW5kZXggZmU5MmJjMWM5OGZmZjNjZjc2MDM4NDI2Y2I5Nzk1YzFjZWU4ODIwNS4uMGJi
MTQ5Y2ExNTU1MGUxYTljOGQzZTQ2OWFiMjZjZTY0NmI4Y2JhNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNw
cApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Db29raWVTdG9yYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3Rv
cmFnZVNlc3Npb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29va2llSmFyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KQEAgLTYwLDcgKzU5LDcgQEAgdm9pZCBXZWJD
b29raWVNYW5hZ2VyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIENhbGxiYWMKIHsKICAgICBIYXNoU2V0PFN0cmluZz4gaG9zdG5hbWVzOwogICAgIGlm
IChhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFnZVNl
c3Npb24oc2Vzc2lvbklEKSkKLSAgICAgICAgV2ViQ29yZTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tp
ZXMoKnN0b3JhZ2VTZXNzaW9uLCBob3N0bmFtZXMpOworICAgICAgICBzdG9yYWdlU2Vzc2lvbi0+
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoaG9zdG5hbWVzKTsKIAogICAgIG1fcHJvY2Vzcy5zZW5k
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OkRpZEdldEhvc3RuYW1lc1dpdGhDb29r
aWVzKGNvcHlUb1ZlY3Rvcihob3N0bmFtZXMpLCBjYWxsYmFja0lEKSwgMCk7CiB9CkBAIC02OCwx
NCArNjcsMTQgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2ll
cyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENhbGxiYWMKIHZvaWQgV2ViQ29va2llTWFuYWdl
cjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgU3RyaW5nJiBob3N0bmFtZSkKIHsKICAgICBpZiAoYXV0byogc3RvcmFnZVNlc3Npb24gPSBO
ZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCi0gICAgICAg
IFdlYkNvcmU6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoKnN0b3JhZ2VTZXNzaW9uLCB7IGhv
c3RuYW1lIH0pOworICAgICAgICBzdG9yYWdlU2Vzc2lvbi0+ZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lcyh7IGhvc3RuYW1lIH0pOwogfQogCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6ZGVsZXRl
QWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7CiAgICAgaWYgKGF1dG8qIHN0
b3JhZ2VTZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihzZXNz
aW9uSUQpKQotICAgICAgICBXZWJDb3JlOjpkZWxldGVBbGxDb29raWVzKCpzdG9yYWdlU2Vzc2lv
bik7CisgICAgICAgIHN0b3JhZ2VTZXNzaW9uLT5kZWxldGVBbGxDb29raWVzKCk7CiB9CiAKIHZv
aWQgV2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgQ29va2llJiBjb29raWUsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKQEAgLTg5LDcg
Kzg4LDcgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpkZWxldGVDb29raWUoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBjb25zdCBDb29raWUmIGNvb2sKIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6
ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBX
YWxsVGltZSB0aW1lLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgaWYgKGF1dG8qIHN0
b3JhZ2VTZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihzZXNz
aW9uSUQpKQotICAgICAgICBXZWJDb3JlOjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZSgq
c3RvcmFnZVNlc3Npb24sIHRpbWUpOworICAgICAgICBzdG9yYWdlU2Vzc2lvbi0+ZGVsZXRlQWxs
Q29va2llc01vZGlmaWVkU2luY2UodGltZSk7CiAKICAgICBtX3Byb2Nlc3Muc2VuZChNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlclByb3h5OjpEaWREZWxldGVDb29raWVzKGNhbGxiYWNrSUQpLCAw
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKaW5kZXggYTMxZjE3MTIxN2U0NTA3M2Uz
NTk2NTgzODU4OWQxZjQyNWQxZWY2MS4uMDgzODkzMDg1MmIxMmZhN2IxNDA2Y2JjNDBlNzFkNzY5
ZTg0OWVlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTUyLDcgKzUyLDYgQEAK
ICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db29raWVKYXIuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1Jlc291cmNlTG9hZGVyT3B0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VS
ZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TYW1lU2l0ZUluZm8uaD4KQEAgLTM3OSw3ICsz
NzgsNyBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb252ZXJ0TWFpblJl
c291cmNlTG9hZFRvRG93bmxvYWQoUEFMOjpTZXNzaQogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6Y29va2llc0ZvckRPTShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0
IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFs
PHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29r
aWVzLCBTdHJpbmcmIGNvb2tpZVN0cmluZywgYm9vbCYgc2VjdXJlQ29va2llc0FjY2Vzc2VkKQog
ewogICAgIGF1dG8mIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IHN0b3JhZ2VTZXNzaW9uKHNlc3Np
b25JRCk7Ci0gICAgc3RkOjp0aWUoY29va2llU3RyaW5nLCBzZWN1cmVDb29raWVzQWNjZXNzZWQp
ID0gV2ViQ29yZTo6Y29va2llc0ZvckRPTShuZXR3b3JrU3RvcmFnZVNlc3Npb24sIGZpcnN0UGFy
dHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1ZGVTZWN1cmVDb29r
aWVzKTsKKyAgICBzdGQ6OnRpZShjb29raWVTdHJpbmcsIHNlY3VyZUNvb2tpZXNBY2Nlc3NlZCkg
PSBuZXR3b3JrU3RvcmFnZVNlc3Npb24uY29va2llc0ZvckRPTShmaXJzdFBhcnR5LCBzYW1lU2l0
ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNsdWRlU2VjdXJlQ29va2llcyk7CiAjaWYg
SEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpICYmICFSRUxFQVNFX0xPR19ESVNB
QkxFRAogICAgIGlmIChOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuc2hvdWxkTG9nQ29va2ll
SW5mb3JtYXRpb24oKSkKICAgICAgICAgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpsb2dDb29raWVJ
bmZvcm1hdGlvbigiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZXNGb3JET00i
LCByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqPih0aGlzKSwgbmV0d29ya1N0b3JhZ2VTZXNz
aW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZW1wdHlTdHJpbmcoKSwgZnJhbWVJ
RCwgcGFnZUlELCBzdGQ6Om51bGxvcHQpOwpAQCAtMzg5LDcgKzM4OCw3IEBAIHZvaWQgTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZXNGb3JET00oUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBjb25zCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzZXRDb29r
aWVzRnJvbURPTShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFVSTCYgZmlyc3RQYXJ0
eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdl
SUQsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKQogewogICAgIGF1dG8mIG5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiA9IHN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCk7Ci0gICAgV2ViQ29yZTo6c2V0
Q29va2llc0Zyb21ET00obmV0d29ya1N0b3JhZ2VTZXNzaW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0
ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBjb29raWVTdHJpbmcpOworICAgIG5ldHdvcmtT
dG9yYWdlU2Vzc2lvbi5zZXRDb29raWVzRnJvbURPTShmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8s
IHVybCwgZnJhbWVJRCwgcGFnZUlELCBjb29raWVTdHJpbmcpOwogI2lmIEhBVkUoQ0ZORVRXT1JL
X1NUT1JBR0VfUEFSVElUSU9OSU5HKSAmJiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICBpZiAo
TmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLnNob3VsZExvZ0Nvb2tpZUluZm9ybWF0aW9uKCkp
CiAgICAgICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6bG9nQ29va2llSW5mb3JtYXRpb24oIk5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzZXRDb29raWVzRnJvbURPTSIsIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3Qgdm9pZCo+KHRoaXMpLCBuZXR3b3JrU3RvcmFnZVNlc3Npb24sIGZpcnN0
UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBlbXB0eVN0cmluZygpLCBmcmFtZUlELCBwYWdlSUQs
IHN0ZDo6bnVsbG9wdCk7CkBAIC0zOTgsMjIgKzM5NywyMiBAQCB2b2lkIE5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpzZXRDb29raWVzRnJvbURPTShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsCiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZXNFbmFibGVk
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgYm9vbCYgcmVzdWx0KQogewotICAgIHJlc3VsdCA9
IFdlYkNvcmU6OmNvb2tpZXNFbmFibGVkKHN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpOworICAg
IHJlc3VsdCA9IHN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkuY29va2llc0VuYWJsZWQoKTsKIH0K
IAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIGZpcnN0UGFy
dHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3Rk
OjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFn
ZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcywgU3RyaW5nJiBj
b29raWVTdHJpbmcsIGJvb2wmIHNlY3VyZUNvb2tpZXNBY2Nlc3NlZCkKIHsKLSAgICBzdGQ6OnRp
ZShjb29raWVTdHJpbmcsIHNlY3VyZUNvb2tpZXNBY2Nlc3NlZCkgPSBXZWJDb3JlOjpjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpLCBmaXJzdFBh
cnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNsdWRlU2VjdXJlQ29v
a2llcyk7CisgICAgc3RkOjp0aWUoY29va2llU3RyaW5nLCBzZWN1cmVDb29raWVzQWNjZXNzZWQp
ID0gc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKS5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNsdWRl
U2VjdXJlQ29va2llcyk7CiB9CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OmdldFJhd0Nvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIGZpcnN0
UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwg
c3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4g
cGFnZUlELCBWZWN0b3I8Q29va2llPiYgcmVzdWx0KQogewotICAgIFdlYkNvcmU6OmdldFJhd0Nv
b2tpZXMoc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKSwgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZv
LCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgcmVzdWx0KTsKKyAgICBzdG9yYWdlU2Vzc2lvbihzZXNz
aW9uSUQpLmdldFJhd0Nvb2tpZXMoZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1l
SUQsIHBhZ2VJRCwgcmVzdWx0KTsKIH0KIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6ZGVsZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKIHsKLSAgICBXZWJDb3JlOjpkZWxldGVDb29r
aWUoc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKSwgdXJsLCBjb29raWVOYW1lKTsKKyAgICBzdG9y
YWdlU2Vzc2lvbihzZXNzaW9uSUQpLmRlbGV0ZUNvb2tpZSh1cmwsIGNvb2tpZU5hbWUpOwogfQog
CiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWdpc3RlckZpbGVCbG9iVVJM
KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHBhdGgsIFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSYmIGV4dGVuc2lvbkhhbmRsZSwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggOGJm
ZWZlMzYyYTg1YmYyNTk0ODQ1YWMyOGY2NDA5MzNjYTY4OTY2OS4uNWExMjRjOGNjOGVhYjc5Nzgx
MjIyY2FlYWQ0Yjg3M2IyOGI5YjMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTY1LDcgKzY1LDYgQEAKICNpbmNsdWRlIDxXZWJD
b3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdGF0ZU5v
dGlmaWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29va2llSmFyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
ZXNvdXJjZVJlcXVlc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNo
ZWNrcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2NoZW1lUmVnaXN0cnkuaD4KQEAgLTUzMyw3ICs1
MzIsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdAogCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlw
ZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpDb29raWVzKSkgewogICAgICAgICBpZiAoYXV0
byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdl
U2Vzc2lvbihzZXNzaW9uSUQpKQotICAgICAgICAgICAgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMo
Km5ldHdvcmtTdG9yYWdlU2Vzc2lvbiwgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRh
Lmhvc3ROYW1lc1dpdGhDb29raWVzKTsKKyAgICAgICAgICAgIG5ldHdvcmtTdG9yYWdlU2Vzc2lv
bi0+Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVE
YXRhLmhvc3ROYW1lc1dpdGhDb29raWVzKTsKICAgICB9CiAKICAgICBpZiAod2Vic2l0ZURhdGFU
eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkNyZWRlbnRpYWxzKSkgewpAQCAtNTY1LDcg
KzU2NCw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpCiAKICAgICBpZiAod2Vic2l0ZURhdGFU
eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXMpKSB7CiAgICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3Jh
Z2VTZXNzaW9uKHNlc3Npb25JRCkpCi0gICAgICAgICAgICBkZWxldGVBbGxDb29raWVzTW9kaWZp
ZWRTaW5jZSgqbmV0d29ya1N0b3JhZ2VTZXNzaW9uLCBtb2RpZmllZFNpbmNlKTsKKyAgICAgICAg
ICAgIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi0+ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uo
bW9kaWZpZWRTaW5jZSk7CiAgICAgfQogCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFp
bnMoV2Vic2l0ZURhdGFUeXBlOjpDcmVkZW50aWFscykpIHsKQEAgLTYxMyw3ICs2MTIsNyBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBPcHRpbwogewogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRh
aW5zKFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcykpIHsKICAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFnZVNlc3Npb24o
c2Vzc2lvbklEKSkKLSAgICAgICAgICAgIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoKm5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiwgY29va2llSG9zdE5hbWVzKTsKKyAgICAgICAgICAgIG5ldHdvcmtT
dG9yYWdlU2Vzc2lvbi0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhjb29raWVIb3N0TmFtZXMp
OwogICAgIH0KIAogICAgIGF1dG8gY2xlYXJUYXNrc0hhbmRsZXIgPSBXVEY6OkNhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFt0aGlzLCBjYWxsYmFja0lEXSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggNTJl
YmY5YWY1MzlkYzgwZGUyMTY5MmYwNTZiMWMzM2ZiOThhYmQ3MC4uY2FhN2NkNWViZThkNWFjYzg1
MDE3Nzk1NWUwZmI1MTk2ZTlhMWE5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcApAQCAtNTksNyArNTksNiBAQAog
CiAjaWYgSEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpICYmICFSRUxFQVNFX0xP
R19ESVNBQkxFRAogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogI2VuZGlmCiAKICNpZiBVU0Uo
UVVJQ0tfTE9PSykKQEAgLTEwMTQsNyArMTAxMyw3IEBAIHN0YXRpYyB2b2lkIGxvZ0Nvb2tpZUlu
Zm9ybWF0aW9uSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBsYWJlbCwgY29uc3Qgdm9pZCogbG9nZ2Vk
CiAgICAgQVNTRVJUKE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hvdWxkTG9nQ29va2llSW5mb3Jt
YXRpb24oKSk7CiAKICAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBjb29raWVzOwotICAgIGlm
ICghV2ViQ29yZTo6Z2V0UmF3Q29va2llcyhuZXR3b3JrU3RvcmFnZVNlc3Npb24sIHBhcnRpdGlv
biwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgY29va2llcykpCisgICAgaWYg
KCFuZXR3b3JrU3RvcmFnZVNlc3Npb24uZ2V0UmF3Q29va2llcyhwYXJ0aXRpb24sIHNhbWVTaXRl
SW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGNvb2tpZXMpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBhdXRvIGVzY2FwZWRVUkwgPSBlc2NhcGVGb3JKU09OKHVybC5zdHJpbmcoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAK
aW5kZXggYjcyZGMxNWZmZTBhZTkzODhkNmRmYmI0Y2U2YzBlZDE3ZTc0YWY5OC4uMmZmMGNhMjY5
MWIwNjVmNDBjZDgwNzViNzhkZDQ1OWRkMWFkZWY5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcApAQCAtMzUsNyArMzUsNiBA
QAogI2luY2x1ZGUgPFdlYkNvcmUvSFRUUEhlYWRlck5hbWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9Mb3dQb3dlck1vZGVOb3RpZmllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZVJlc3BvbnNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9y
bVN0cmF0ZWdpZXMuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKaW5kZXggNjkxMzEzNTgxNWVhN2QwMDgxOTQyNWNj
ZTg0ODQ2OGVlM2U0ZmRmNy4uYWU3Mzg4ZjlhNDljMzBmY2M2Yzg2Yzg1MWZhMDY1ODIxNzMzYmY1
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKQEAgLTU0LDcgKzU0LDYgQEAK
ICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VHcm91cC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUGFzdGVib2FyZEl0ZW1JbmZvLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1QYXN0
ZWJvYXJkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Qcm9ncmVzc1RyYWNrZXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbSBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQpp
bmRleCAzNDUwNjcyZDVjYjUxOTZkZDNhM2E2ZmIwNjAwOWNkNzdiOThlN2M4Li5iNTMxODhlYmZj
ZGY1YTc0MTMzMTg1MTk4ZWMzZDI0ZmUzOWFkODU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0KKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVn
aWVzLm1tCkBAIC0zMyw3ICszMyw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9Q
YXN0ZWJvYXJkSXRlbUluZm8uaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1Db29raWVKYXIu
aD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1QYXN0ZWJvYXJkLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TdWJmcmFtZUxvYWRlci5oPgpA
QCAtNzUsMzggKzc0LDM4IEBAIEJsb2JSZWdpc3RyeSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpj
cmVhdGVCbG9iUmVnaXN0cnkoKQogCiBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OmNvb2tpZXNGb3JET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBz
ZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNp
dGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwg
c3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNs
dWRlU2VjdXJlQ29va2llcykKIHsKLSAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llc0ZvckRPTShz
ZXNzaW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBp
bmNsdWRlU2VjdXJlQ29va2llcyk7CisgICAgcmV0dXJuIHNlc3Npb24uY29va2llc0ZvckRPTShm
aXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNsdWRlU2Vj
dXJlQ29va2llcyk7CiB9CiAKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRDb29raWVz
RnJvbURPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYg
Zmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYg
dXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2
NF90PiBwYWdlSUQsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKQogewotICAgIFdlYkNvcmU6
OnNldENvb2tpZXNGcm9tRE9NKHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJs
LCBmcmFtZUlELCBwYWdlSUQsIGNvb2tpZVN0cmluZyk7CisgICAgc2Vzc2lvbi5zZXRDb29raWVz
RnJvbURPTShmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBj
b29raWVTdHJpbmcpOwogfQogCiBib29sIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llc0Vu
YWJsZWQoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uKQogewotICAgIHJldHVy
biBXZWJDb3JlOjpjb29raWVzRW5hYmxlZChzZXNzaW9uKTsKKyAgICByZXR1cm4gc2Vzc2lvbi5j
b29raWVzRW5hYmxlZCgpOwogfQogCiBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1l
U2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWlu
dDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNl
Y3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFdlYkNvcmU6
OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVT
aXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKKyAg
ICByZXR1cm4gc2Vzc2lvbi5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShmaXJzdFBhcnR5
LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNsdWRlU2VjdXJlQ29va2ll
cyk7CiB9CiAKIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBj
b25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBj
b25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRp
b25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJl
Q29va2llcykKIHsKICAgICBhdXRvJiBzZXNzaW9uID0gc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkg
PyBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9u
KCkgOiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwotICAg
IHJldHVybiBXZWJDb3JlOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShzZXNzaW9uLCBm
aXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNsdWRlU2Vj
dXJlQ29va2llcyk7CisgICAgcmV0dXJuIHNlc3Npb24uY29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUoZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5j
bHVkZVNlY3VyZUNvb2tpZXMpOwogfQogCiBib29sIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0
UmF3Q29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVS
TCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVS
TCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVp
bnQ2NF90PiBwYWdlSUQsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewotICAgIHJldHVy
biBXZWJDb3JlOjpnZXRSYXdDb29raWVzKHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5m
bywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIHJhd0Nvb2tpZXMpOworICAgIHJldHVybiBzZXNzaW9u
LmdldFJhd0Nvb2tpZXMoZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBh
Z2VJRCwgcmF3Q29va2llcyk7CiB9CiAKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpkZWxl
dGVDb29raWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQogewotICAgIFdlYkNvcmU6OmRlbGV0ZUNv
b2tpZShzZXNzaW9uLCB1cmwsIGNvb2tpZU5hbWUpOworICAgIHNlc3Npb24uZGVsZXRlQ29va2ll
KHVybCwgY29va2llTmFtZSk7CiB9CiAKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRU
eXBlcyhWZWN0b3I8U3RyaW5nPiYgdHlwZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVu
Y2VzLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5t
bQppbmRleCBjNGQ3NDIyZGU3MWZmY2MxNGNkZGE4MzMzZTY5NzI2YTcwNGVlNzQzLi43NzE4ZDA1
YWVkYTYyNjZlMjMxMzBhMTRlODIxYmUxZTg2NmM0N2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KQEAgLTQyLDcgKzQyLDYgQEAK
ICNpbXBvcnQgPFdlYkNvcmUvQXVkaW9TZXNzaW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RlcHJl
Y2F0ZWRHbG9iYWxTZXR0aW5ncy5oPgogI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNl
c3Npb24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1Db29raWVKYXIuaD4KICNpbXBvcnQg
PFdlYkNvcmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Nl
dHRpbmdzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RleHRFbmNvZGluZ1JlZ2lzdHJ5Lmg+CkBAIC0x
ODc3LDcgKzE4NzYsNyBAQCBzdGF0aWMgTlNTdHJpbmcgKmNsYXNzSUJDcmVhdG9ySUQgPSBuaWw7
CiAKICsgKHZvaWQpX2NsZWFyTmV0d29ya0xvYWRlclNlc3Npb24KIHsKLSAgICBXZWJDb3JlOjpk
ZWxldGVBbGxDb29raWVzKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNz
aW9uKCkpOworICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCkuZGVsZXRlQWxsQ29va2llcygpOwogfQogCiArICh2b2lkKV9zZXRDdXJyZW50TmV0d29ya0xv
YWRlclNlc3Npb25Db29raWVBY2NlcHRQb2xpY3k6KE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSlw
b2xpY3kK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346015</attachid>
            <date>2018-07-28 23:13:04 -0700</date>
            <delta_ts>2018-07-29 02:08:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188137-20180729081302.patch</filename>
            <type>text/plain</type>
            <size>112620</size>
            <attacher name="Rob Buis">rbuis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0MzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTAyYzI1N2ZhMWQ0YmU5
YmEyYjFkMWFkOWVjNjFlMGVlNzU4ZGM3Mi4uYjU5ZmQ4Y2EzOTFiN2VjNTIxMzU2MDkxZDRjMjA2
ODUzMmJmOGM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDE4LTA3LTI4ICBSb2Ig
QnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CisKKyAgICAgICAgTWVyZ2UgUGxhdGZvcm1Db29raWVK
YXIgZnVuY3Rpb25zIGludG8gTmV0d29ya1N0b3JhZ2VTZXNzaW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODgxMzcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLS0gbm8gY2hhbmdl
IGluIFdlYktpdCBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6
CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbG9hZGVyL0Nvb2tpZUphci5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vQ3VybC5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9Tb3VyY2VzU291
cC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6aGVhZGVyVmFsdWVGb3JWYXJ5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvUGxhdGZvcm1Db29raWVKYXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29v
a2llRGF0YUZvckhhbmRzaGFrZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Db29r
aWVKYXJDRk5ldC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3Jr
U3RvcmFnZVNlc3Npb25Db2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6Omh0dHBDb29raWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUhUVFBDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6
cG9saWN5UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzRm9yVVJMKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEhUVFBDb29raWVzRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6
Omh0dHBDb29raWVzRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbHRlckNvb2tpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6YXBwbHlQYXJ0aXRpb25Ub0Nvb2tpZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29va2llc0FyZUJsb2NrZWRGb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2ll
c0luUGFydGl0aW9uRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNGb3JTZXNzaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUFsbEhUVFBDb29raWVzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0ZvckRPTSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bjo6c2V0Q29va2llc0Zyb21ET00gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6aHR0cENvb2tp
ZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246
OmNvb2tpZXNFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6Z2V0UmF3Q29va2llcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZXNGb3JIb3N0
bmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVB
bGxDb29raWVzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJs
L0Nvb2tpZUphckN1cmwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9Db29raWVKYXJDdXJsLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL05l
dHdvcmtTdG9yYWdlU2Vzc2lvbkN1cmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVzRnJvbURPTSBjb25zdCk6CisKIDIwMTgtMDctMjQgIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQW5pbWF0aW9u
IHN0b3BzIHdpdGggb2JqZWN0LWZpdDpjb250YWluIG9uIGFuIGFuaW1hdGVkIDJkIGNhbnZhcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwppbmRleCBmY2IzN2QxNDY1NWIzNDRiZWI5M2I3ZjY5MGU1ZWE4Njk1ZDA1MWZmLi4xMjM4
NmFiNmFmYTBkNTNmOTk0OTBkMGMwMTg5N2I3NGZjYWFmOTc3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDMxIEBACisyMDE4LTA3LTI4ICBSb2IgQnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CisgCisgICAg
ICAgICBNZXJnZSBQbGF0Zm9ybUNvb2tpZUphciBmdW5jdGlvbnMgaW50byBOZXR3b3JrU3RvcmFn
ZVNlc3Npb24KKyAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xODgxMzcKKyAKKyAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorIAorICAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwOgorICAg
ICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMp
OgorICAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKToKKyAgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OmRlbGV0ZUFsbENv
b2tpZXMpOgorICAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQWxsQ29v
a2llc01vZGlmaWVkU2luY2UpOgorICAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6Y29va2llc0ZvckRPTSk6CisgICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAg
KFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZXNFbmFibGVkKToK
KyAgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEpOgorICAgICAgICAgKFdlYktpdDo6TmV0d29ya1By
b2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKToKKyAgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMpOgorICAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAgKFdlYktpdDo6bG9nQ29v
a2llSW5mb3JtYXRpb25JbnRlcm5hbCk6CisgICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZS5jcHA6CisgICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcDoKKwogMjAxOC0wNy0yNyAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aHJlYWQtc2FmZXR5IGlzc3VlcyByZWxh
dGVkIHRvIFJlYWx0aW1lTWVkaWFTb3VyY2U6OmF1ZGlvU2FtcGxlc0F2YWlsYWJsZSgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggMGUzMzc1NjYzYjkzZDViODZlM2NiNTAxODU2NmNh
YjQ4ZmFlNWQwNi4uZjIxYWIxZTMxZDQyMzRmNjQ4MjZmYjUwODM3ZDNjOThmNzNhMDIyNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE4LTA3LTI4ICBS
b2IgQnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CisKKyAgICAgICAgTWVyZ2UgUGxhdGZvcm1Db29r
aWVKYXIgZnVuY3Rpb25zIGludG8gTmV0d29ya1N0b3JhZ2VTZXNzaW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODgxMzcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBs
YXRmb3JtU3RyYXRlZ2llcy5tbToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29v
a2llc0ZvckRPTSk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldENvb2tpZXNG
cm9tRE9NKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llc0VuYWJsZWQp
OgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZSk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFJhd0Nvb2tpZXMp
OgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpkZWxldGVDb29raWUpOgorICAgICAg
ICAqIFdlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW06CisgICAgICAgICgrW1dlYlByZWZlcmVuY2Vz
IF9jbGVhck5ldHdvcmtMb2FkZXJTZXNzaW9uXSk6CisKIDIwMTgtMDctMjYgIEFuZHkgVmFuV2Fn
b25lciAgPGFuZHlAdmFud2Fnb25lci5mYW1pbHk+CiAKICAgICAgICAgW0lOVExdIFJlbW92ZSBJ
TlRMIHN1Yi1mZWF0dXJlIGNvbXBpbGUgZmxhZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5k
ZXggZjNkOGQwMjhjZmQxZTA2MWY5ZjJjNmYzMDJiZGY5Yjk1ZDFkNDk0OS4uNWRmZTc0Yzc5YjUy
MzEwMGQ0ZWM3YjhiNGJkZjVkODM1Zjg2ZjI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UK
QEAgLTQzNCw3ICs0MzQsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9uZXR3b3JrL21hYy9BdXRoZW50aWNhdGlvbk1hYy5tbQogICAgIHBsYXRmb3JtL25ldHdv
cmsvbWFjL0Jsb2JEYXRhRmlsZVJlZmVyZW5jZU1hYy5tbQogICAgIHBsYXRmb3JtL25ldHdvcmsv
bWFjL0NlcnRpZmljYXRlSW5mb01hYy5tbQotICAgIHBsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tp
ZUphck1hYy5tbQogICAgIHBsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZVN0b3JhZ2VNYWMubW0K
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL21hYy9DcmVkZW50aWFsU3RvcmFnZU1hYy5tbQogICAgIHBs
YXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dAppbmRleCBlMzUyZTUzYjhkNjFmY2I4MGEyZjJhMGNhNmNlZmU1YzFhOTFiOTNkLi5lZTll
OGIwYTFmMzE3NTM1MmYyNTUyMDcwNDUzMzg5NWIzYjE5YjRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2Nv
YS50eHQKQEAgLTUwNyw3ICs1MDcsNiBAQCBwbGF0Zm9ybS9uZXR3b3JrL2lvcy9XZWJDb3JlVVJM
UmVzcG9uc2VJT1MubW0KIHBsYXRmb3JtL25ldHdvcmsvbWFjL0F1dGhlbnRpY2F0aW9uTWFjLm1t
CiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9CbG9iRGF0YUZpbGVSZWZlcmVuY2VNYWMubW0KIHBsYXRm
b3JtL25ldHdvcmsvbWFjL0NlcnRpZmljYXRlSW5mb01hYy5tbQotcGxhdGZvcm0vbmV0d29yay9t
YWMvQ29va2llSmFyTWFjLm1tCiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVTdG9yYWdlTWFj
Lm1tCiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9DcmVkZW50aWFsU3RvcmFnZU1hYy5tbQogcGxhdGZv
cm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmYzFmYTFkMmVjZjhlMDM1
ZDI1NDgyZmVmYjc1OWZjZmExZWI1NTYxLi43ODdkY2ZhYjU3ZDFjMmQ1ZDJjOWU2YzIxNTRjMDIw
ODEzYjBiZGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC00NjAzLDcgKzQ2MDMsNiBAQAogCQlFMTM0RjVBQjEyRUUzNDNGMDA0
RUM1OEQgLyogSW50UmVjdEhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxMzRGNUFBMTJFRTM0M0YwMDRFQzU4RCAvKiBJbnRSZWN0SGFzaC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUxMzk4NjY0
MTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM5ODY2MjE1NDc4NDc0MDAxRTNGNjUgLyogU3R5
bGVSZXNvbHZlci5oICovOyB9OwogCQlFMTNFRjM0NDE2ODRFQ0Y0MDAzNEM4M0YgLyogTmV0d29y
a1N0b3JhZ2VTZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMTNFRjM0MjE2ODRFQ0Y0MDAzNEM4M0YgLyogTmV0d29ya1N0b3JhZ2VTZXNzaW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRTE0
MjRDOEExNjRCM0I0RTAwRjMyRDQwIC8qIFBsYXRmb3JtQ29va2llSmFyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTQyNEM4OTE2NEIzQjRFMDBGMzJE
NDAgLyogUGxhdGZvcm1Db29raWVKYXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlFMTQyNEM5NDE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTQyNEM5
MjE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTE0RjFDNDUxNEI1REFDNjAwRUE5MDA5IC8qIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNEYxQzQzMTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTE1MjU1MTUxNkZEMjM1MDAwM0Q3QURCIC8qIFdlYkNvcmVS
ZXNvdXJjZUhhbmRsZUFzT3BlcmF0aW9uUXVldWVEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1MjU1MTMxNkZEMjM0RjAwM0Q3QURCIC8q
IFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzT3BlcmF0aW9uUXVldWVEZWxlZ2F0ZS5oICovOyB9OwpA
QCAtMTQxMzAsOCArMTQxMjksNiBAQAogCQlFMTNFRjM0NzE2ODUwQzQ3MDAzNEM4M0YgLyogTmV0
d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFMTNGMDFFQTEyNzBFMTBEMDBERkJBNzEgLyogQ29va2llU3RvcmFnZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb29raWVTdG9yYWdlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxM0YwMUYwMTI3MEUxOTAwMERGQkE3MSAvKiBDb29r
aWVTdG9yYWdlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
Q29va2llU3RvcmFnZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTE0MjRD
ODkxNjRCM0I0RTAwRjMyRDQwIC8qIFBsYXRmb3JtQ29va2llSmFyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtQ29va2llSmFyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUUxNDI0QzhGMTY0QjQ2MEIwMEYzMkQ0MCAvKiBDb29raWVKYXJNYWMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb29raWVKYXJNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNDI0QzkxMTY0QjUyQzgwMEYzMkQ0MCAv
KiBDb29raWVKYXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29v
a2llSmFyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE0MjRDOTIxNjRCNTJD
ODAwRjMyRDQwIC8qIENvb2tpZUphci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb29raWVKYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE0QTk0RDYxNkRG
REY5NTAwNjhERTgyIC8qIEJsb2JSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBCbG9iUmVnaXN0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTkwNzMsNyArMTkwNzAsNiBAQAogCQkJCUNEQ0Q0MUU2MUMzRERCMDkwMDk2NUQ5OSAv
KiBQYXJzZWRDb250ZW50UmFuZ2UuaCAqLywKIAkJCQk0NDc5NTgwMjE2NDNCNDdCMDAxRTBBN0Yg
LyogUGFyc2VkQ29udGVudFR5cGUuY3BwICovLAogCQkJCTQ0Nzk1ODAzMTY0M0I0N0IwMDFFMEE3
RiAvKiBQYXJzZWRDb250ZW50VHlwZS5oICovLAotCQkJCUUxNDI0Qzg5MTY0QjNCNEUwMEYzMkQ0
MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICovLAogCQkJCTM3QkFBRTU3MTk4MEQxREQwMDVERkU3
MSAvKiBQcm90ZWN0aW9uU3BhY2UuaCAqLywKIAkJCQk1MTRDNzY1RjBDRTkyM0ExMDA3RUYzQ0Qg
LyogUHJvdGVjdGlvblNwYWNlQmFzZS5jcHAgKi8sCiAJCQkJNTE0Qzc2NjAwQ0U5MjNBMTAwN0VG
M0NEIC8qIFByb3RlY3Rpb25TcGFjZUJhc2UuaCAqLywKQEAgLTE5MTEzLDcgKzE5MTA5LDYgQEAK
IAkJCQk1MTRDNzY0MzBDRTkyMzRFMDA3RUYzQ0QgLyogQXV0aGVudGljYXRpb25NYWMubW0gKi8s
CiAJCQkJRTE2NEEyRUIxOTFBRTYzNTAwMTA3MzdEIC8qIEJsb2JEYXRhRmlsZVJlZmVyZW5jZU1h
Yy5tbSAqLywKIAkJCQk1RjJEQkJFNzE3OEUzMzJEMDAxNDE0ODYgLyogQ2VydGlmaWNhdGVJbmZv
TWFjLm1tICovLAotCQkJCUUxNDI0QzhGMTY0QjQ2MEIwMEYzMkQ0MCAvKiBDb29raWVKYXJNYWMu
bW0gKi8sCiAJCQkJRTEzRjAxRjAxMjcwRTE5MDAwREZCQTcxIC8qIENvb2tpZVN0b3JhZ2VNYWMu
bW0gKi8sCiAJCQkJRTFCNENEMjQxMEIzMjJFMjAwQkZGRDdFIC8qIENyZWRlbnRpYWxTdG9yYWdl
TWFjLm1tICovLAogCQkJCTUxNEM3NjQ0MENFOTIzNEUwMDdFRjNDRCAvKiBGb3JtRGF0YVN0cmVh
bU1hYy5oICovLApAQCAtMjk3MTUsNyArMjk3MTAsNiBAQAogCQkJCTQ5M0U1RTA5MTJENjQyMDUw
MDAyMDA4MSAvKiBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJE
NzBCQTEzMTgwNzREREYwMDAxOTA4QSAvKiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTE0OTc4NzExQUJBRjNBNTAwQ0VGN0U0IC8qIFBsYXRmb3JtQ29udGVudEZp
bHRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTE0MjRDOEExNjRCM0I0RTAwRjMyRDQwIC8qIFBs
YXRmb3JtQ29va2llSmFyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVDNzYyQjE0OTdGRTE0MDBC
QzQ3NzUgLyogUGxhdGZvcm1FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjY2MDFFQkYxNEIz
QjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0FBNDg3MDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMu
aCBpbiBIZWFkZXJzICovLApAQCAtMjk4OTQsOCArMjk4ODgsNiBAQAogCQkJCTNDMjQ0RkVBQTM3
NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwQkUwMzBBMjBGMzExMkZCMDAzQzFBNDYgLyogUmVuZGVyTGluZUJveExpc3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDRUE0ODY0MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJMaW5lQnJl
YWsuaCBpbiBIZWFkZXJzICovLAotCQkJCTk0Q0ZENjBBMUZFOTg2N0UwMDI0ODhBRCAvKiBSZW5k
ZXJMaW5lc0NsYW1wRmxvdy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTRDRkQ2MEQxRkVBQ0VGRTAw
MjQ4OEFEIC8qIFJlbmRlckxpbmVzQ2xhbXBTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFCQjU0
MTlGMEFDRERGRTQwMDI4MjBFQiAvKiBSZW5kZXJMaXN0Qm94LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEVBN0E1MjBBMTkxQTUyMDBBOEVGNUYgLyogUmVuZGVyTGlzdEl0ZW0uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4RUE3QTUwMEExOTFBNTIwMEE4RUY1RiAvKiBSZW5kZXJMaXN0TWFya2VyLmgg
aW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVK
YXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5jcHAKaW5kZXggNDliNzk4
ZDdkMmNlYWJkOWE4ZGFmZWRkODUzNDhhMjRhYmE4MmMzZS4uMDY4MzA2NzQ0YWY4MTRiZDI3NjBh
NWUxODY1YTVhOWFiNDM1MmIxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nv
b2tpZUphci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5jcHAKQEAg
LTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0
ZWdpZXMuaCIKICNpbmNsdWRlICJTYW1lU2l0ZUluZm8uaCIKICNpbmNsdWRlIDx3dGYvU3lzdGVt
VHJhY2luZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cmwuY21ha2UKaW5kZXggMTA1MTEzMDY5NjRk
ODcwYWI5ZGZmYTE1ZGJkZTkxMTNkNWQwOTNkMC4uMTYwM2VmODYxNjI4NmVhYjI2ZjczYTgzNGIy
NzAyZjJmMGNlYzcyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5j
bWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJsLmNtYWtlCkBAIC01LDcgKzUs
NiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlv
bkNoYWxsZW5nZUN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0NlcnRpZmljYXRl
SW5mby5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybERhdGFiYXNlLmNwcAogICAgIHBs
YXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ29va2llU3RvcmFnZUN1cmwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Tb3VyY2VzU291cC50eHQgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2Vz
U291cC50eHQKaW5kZXggZDY0ZmNmYmVhMjgxNDdkYWRmNDMwYjJmZmI0YzBmZWE2MGI5NWQ4YS4u
YzAyZTQ5ZTRlNTFlZjc0OTMxZjcwZGQ4NjU1ZDM0ZGUyZDYzZTQ4YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc1NvdXAudHh0CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NvdXJjZXNTb3VwLnR4dApAQCAtMjMsNyArMjMsNiBAQAogCiBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTb3VwLmNwcAogcGxhdGZvcm0vbmV0
d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5jcHAKLXBsYXRmb3JtL25ldHdvcmsvc291cC9Db29r
aWVKYXJTb3VwLmNwcAogcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVNvdXAuY3BwCiBwbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU3RvcmFnZVNvdXAuY3BwCiBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvQ3JlZGVudGlhbFN0b3JhZ2VTb3VwLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24uY3BwCmluZGV4IDMwMmE4ZDY3ODliMGM5
OGE5NjBlMjMzYmE0MjgyY2QyZTc4MjY3M2UuLjkxMGZiZjk1NjgyMWZiNzBjNmU2MzI1MWYwYWI0
ODE1MjIzZjFlMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Q2FjaGVWYWxpZGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0NhY2hlVmFsaWRhdGlvbi5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJDb29raWVz
U3RyYXRlZ3kuaCIKICNpbmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCiAjaW5jbHVkZSAiTmV0d29y
a1N0b3JhZ2VTZXNzaW9uLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCkBAIC0zMzgsNyArMzM3LDcgQEAgc3RhdGlj
IFN0cmluZyBoZWFkZXJWYWx1ZUZvclZhcnkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBjb25zdCBTdHJpbmcmIGgKICAgICAgICAgYXV0byogY29va2llU3RyYXRlZ3kgPSBwbGF0Zm9y
bVN0cmF0ZWdpZXMoKSA/IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5jb29raWVzU3RyYXRlZ3koKSA6
IG51bGxwdHI7CiAgICAgICAgIGlmICghY29va2llU3RyYXRlZ3kpIHsKICAgICAgICAgICAgIEFT
U0VSVChzZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSwgcmVxdWVzdC5maXJzdFBhcnR5
Rm9yQ29va2llcygpLCBTYW1lU2l0ZUluZm86OmNyZWF0ZShyZXF1ZXN0KSwgcmVxdWVzdC51cmwo
KSwgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQsIGluY2x1ZGVTZWN1cmVDb29raWVzKS5maXJz
dDsKKyAgICAgICAgICAgIHJldHVybiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9y
YWdlU2Vzc2lvbigpLmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHJlcXVlc3QuZmlyc3RQ
YXJ0eUZvckNvb2tpZXMoKSwgU2FtZVNpdGVJbmZvOjpjcmVhdGUocmVxdWVzdCksIHJlcXVlc3Qu
dXJsKCksIHN0ZDo6bnVsbG9wdCwgc3RkOjpudWxsb3B0LCBpbmNsdWRlU2VjdXJlQ29va2llcyku
Zmlyc3Q7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvb2tpZVN0cmF0ZWd5LT5jb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShzZXNzaW9uSUQsIHJlcXVlc3QuZmlyc3RQYXJ0eUZvckNv
b2tpZXMoKSwgU2FtZVNpdGVJbmZvOjpjcmVhdGUocmVxdWVzdCksIHJlcXVlc3QudXJsKCksIHN0
ZDo6bnVsbG9wdCwgc3RkOjpudWxsb3B0LCBpbmNsdWRlU2VjdXJlQ29va2llcykuZmlyc3Q7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3Jr
U3RvcmFnZVNlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29y
a1N0b3JhZ2VTZXNzaW9uLmgKaW5kZXggNmU5OTM5M2RmMmI4OWQ2YzBmZmRhZGQ5ZjI0MWFiOGZj
MDkyZmI5My4uMDhhODJkZDVhM2QwODliM2JhNGY4YjBkZDU0MTYzNTQyODdlMjUxNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Np
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdl
U2Vzc2lvbi5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9XYWxsVGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAj
aWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShDRlVSTENPTk5FQ1RJT04pCkBAIC02NCw2ICs2NSwx
MCBAQCBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiBjbGFzcyBTb3VwTmV0d29ya1Nlc3Npb247CiAK
IHN0cnVjdCBDb29raWU7CitzdHJ1Y3QgQ29va2llUmVxdWVzdEhlYWRlckZpZWxkUHJveHk7Citz
dHJ1Y3QgU2FtZVNpdGVJbmZvOworCitlbnVtIGNsYXNzIEluY2x1ZGVTZWN1cmVDb29raWVzOwog
CiBjbGFzcyBOZXR3b3JrU3RvcmFnZVNlc3Npb24gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMTM3
LDEyICsxNDIsMjQgQEAgcHVibGljOgogICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0KCkg
Y29uc3Q7CiAjZW5kaWYKIAorICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgY29va2llc0VuYWJsZWQo
KSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENvb2tpZShjb25zdCBDb29raWUm
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENvb2tpZXMoY29uc3QgVmVjdG9yPENvb2tp
ZT4mLCBjb25zdCBVUkwmLCBjb25zdCBVUkwmIG1haW5Eb2N1bWVudFVSTCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRDb29raWVzRnJvbURPTShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNv
bnN0IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZy
YW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgY29uc3QgU3RyaW5nJikgY29u
c3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVDb29raWUoY29uc3QgQ29va2llJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVDb29raWUoY29uc3QgVVJMJiwgY29uc3Qg
U3RyaW5nJikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVBbGxDb29raWVz
KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5j
ZShXYWxsVGltZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVDb29raWVzRm9ySG9z
dG5hbWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb29raWVIb3N0TmFtZXMpOwogICAgIFdFQkNP
UkVfRVhQT1JUIFZlY3RvcjxDb29raWU+IGdldEFsbENvb2tpZXMoKTsKICAgICBXRUJDT1JFX0VY
UE9SVCBWZWN0b3I8Q29va2llPiBnZXRDb29raWVzKGNvbnN0IFVSTCYpOworICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNh
bWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQs
IHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgVmVjdG9yPENvb2tpZT4mKSBjb25zdDsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZsdXNoQ29va2llU3RvcmUoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9z
dG5hbWVzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29r
aWVzRm9yRE9NKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29u
c3QgVVJMJiwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1
aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcykgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBV
UkwmLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2
NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVzKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eSYpIGNvbnN0OworCiAKIHByaXZh
dGU6CiAgICAgc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxO
ZXR3b3JrU3RvcmFnZVNlc3Npb24+PiYgZ2xvYmFsU2Vzc2lvbk1hcCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybUNvb2tpZUphci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybUNvb2tpZUphci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODk0M2Q5Y2Y4MTgxZjYzODA0NjNlZTg3YmYxOTMxNzQ0
NzY1YzNjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1Db29raWVKYXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIFVSTDsKLWNsYXNzIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjsKLQotc3RydWN0IENvb2tp
ZTsKLXN0cnVjdCBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eTsKLXN0cnVjdCBTYW1lU2l0
ZUluZm87Ci0KLWVudW0gY2xhc3MgSW5jbHVkZVNlY3VyZUNvb2tpZXM7Ci0KLS8vIEZJWE1FOiBU
aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgTmV0d29ya1N0b3JhZ2VTZXNzaW9uIG1lbWJlciBmdW5j
dGlvbnMuCi0KLVdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZXNG
b3JET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5
LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90
PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVD
b29raWVzKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q29va2llc0Zyb21ET00oY29uc3QgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0
ZUluZm8mLCBjb25zdCBVUkwmLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIGNvbnN0IFN0cmluZyYpOwotV0VCQ09SRV9FWFBP
UlQgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mKTsKLVdF
QkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFVSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiwgc3RkOjpvcHRpb25hbDx1aW50
NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2Vj
dXJlQ29va2llcyk7Ci1XRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBj
b25zdCBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eSYpOwotV0VCQ09SRV9FWFBPUlQgYm9v
bCBnZXRSYXdDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFVSTCYg
Zmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiwgc3RkOjpvcHRpb25h
bDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBWZWN0
b3I8Q29va2llPiYpOwotV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVDb29raWUoY29uc3QgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJik7Ci1XRUJDT1JF
X0VYUE9SVCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiYsIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsKLVdFQkNPUkVfRVhQT1JUIHZv
aWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24m
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgY29va2llSG9zdE5hbWVzKTsKLVdFQkNPUkVfRVhQT1JU
IHZvaWQgZGVsZXRlQWxsQ29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mKTsKLVdF
QkNPUkVfRVhQT1JUIHZvaWQgZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoY29uc3QgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiwgV2FsbFRpbWUpOwotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmNwcApp
bmRleCA3NTlkNjNhNDY4NWJmZGFmYTcyNzAwNWJiNzQ0YzhhNTY3YWQxYWMzLi4zODliNmVhMDM2
NmE2OWFmYzY1Y2EzMGYxODU3MWRkZjQ0MGFlNGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5jcHAKQEAg
LTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5
LmgiCiAjaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1Db29raWVKYXIuaCIKICNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCIKICNp
bmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KIApAQCAtODUsNyArODQsNyBAQCBzdGF0aWMgc3RkOjpv
cHRpb25hbDxzdGQ6OnBhaXI8VmVjdG9yPHVpbnQ4X3Q+LCBib29sPj4gY29va2llRGF0YUZvckhh
bmRzaGFrZShjbwogICAgIAogICAgIFN0cmluZyBjb29raWVEYXRhU3RyaW5nOwogICAgIGJvb2wg
c2VjdXJlQ29va2llc0FjY2Vzc2VkID0gZmFsc2U7Ci0gICAgc3RkOjp0aWUoY29va2llRGF0YVN0
cmluZywgc2VjdXJlQ29va2llc0FjY2Vzc2VkKSA9IFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKCpuZXR3b3JrU3RvcmFnZVNlc3Npb24sIGhlYWRlckZpZWxkUHJveHkpOwor
ICAgIHN0ZDo6dGllKGNvb2tpZURhdGFTdHJpbmcsIHNlY3VyZUNvb2tpZXNBY2Nlc3NlZCkgPSBu
ZXR3b3JrU3RvcmFnZVNlc3Npb24tPmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGhlYWRl
ckZpZWxkUHJveHkpOwogICAgIGlmIChjb29raWVEYXRhU3RyaW5nLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIHN0ZDo6cGFpcjxWZWN0b3I8dWludDhfdD4sIGJvb2w+IHsgeyB9LCBzZWN1cmVD
b29raWVzQWNjZXNzZWQgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAppbmRleCAxZTBjNzRhMjdhYzA2OGY3NWE5ZjMz
MTBmZjc0Zjk2NzA5MDM1NGMzLi42OGQ2OGZiN2ZmNTRmOTY3YjBmZDg2NDQxYzEyZmEwNjc4ODkz
NzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tp
ZUphckNGTmV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nv
b2tpZUphckNGTmV0LmNwcApAQCAtMjQsNyArMjQsNiBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvb2tpZUphci5oIgogCiAjaWYgVVNFKENGVVJMQ09O
TkVDVElPTikKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
b2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0KaW5kZXggM2Ez
ZGYwZmE1MDM2Y2ExNTk5YmEzMjNiMDUxYWIzMDMyOTFiZmI5NC4uMjFiMTQ4NjUyZmE1NTk5NWU1
ZDcxZGVhZmM0ODZkZjQxZmQ4Yzg4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNv
Y29hLm1tCkBAIC0yNywxMSArMjcsMjcgQEAKICNpbXBvcnQgIk5ldHdvcmtTdG9yYWdlU2Vzc2lv
bi5oIgogCiAjaW1wb3J0ICJDb29raWUuaCIKKyNpbXBvcnQgIkNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFByb3h5LmgiCiAjaW1wb3J0ICJDb29raWVTdG9yYWdlT2JzZXJ2ZXIuaCIKKyNpbXBvcnQg
IkNvb2tpZXNTdHJhdGVneS5oIgorI2ltcG9ydCAiU2FtZVNpdGVJbmZvLmgiCiAjaW1wb3J0ICJV
UkwuaCIKICNpbXBvcnQgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+CiAjaW1wb3J0IDx3dGYv
QmxvY2tPYmpDRXhjZXB0aW9ucy5oPgorI2ltcG9ydCA8d3RmL09wdGlvbmFsLmg+CiAjaW1wb3J0
IDx3dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgorI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgorCitAaW50ZXJmYWNlIE5TVVJMICgpCistIChDRlVSTFJlZilfY2Z1cmw7CitAZW5kCisK
KyNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEwMTQwMCkgfHwgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTIwMDAwKQorQGludGVyZmFjZSBOU0hUVFBDb29raWVTdG9yYWdlIChTdGFnaW5n
KQorLSAodm9pZClfZ2V0Q29va2llc0ZvclVSTDooTlNVUkwgKil1cmwgbWFpbkRvY3VtZW50VVJM
OihOU1VSTCAqKW1haW5Eb2N1bWVudFVSTCBwYXJ0aXRpb246KE5TU3RyaW5nICopcGFydGl0aW9u
IHBvbGljeVByb3BlcnRpZXM6KE5TRGljdGlvbmFyeSopcHJvcHMgY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKE5TQXJyYXkgKikpY29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKV9zZXRDb29r
aWVzOihOU0FycmF5ICopY29va2llcyBmb3JVUkw6KE5TVVJMICopVVJMIG1haW5Eb2N1bWVudFVS
TDooTlNVUkwgKiltYWluRG9jdW1lbnRVUkwgcG9saWN5UHJvcGVydGllczooTlNEaWN0aW9uYXJ5
KikgcHJvcHM7CitAZW5kCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNTAs
NCArMTY2LDQxOCBAQCBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIGNyZWF0ZVByaXZhdGVTdG9yYWdl
U2Vzc2lvbihDRlN0cmluZ1JlZiBpZGVudGlmaWVyKQogICAgIHJldHVybiBzdG9yYWdlU2Vzc2lv
bi5sZWFrUmVmKCk7CiB9CiAKK3N0YXRpYyBOU0FycmF5ICpodHRwQ29va2llcyhDRkhUVFBDb29r
aWVTdG9yYWdlUmVmIGNvb2tpZVN0b3JhZ2UpCit7CisgICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2
aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOworICAgIGlmICgh
Y29va2llU3RvcmFnZSkKKyAgICAgICAgcmV0dXJuIFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFy
ZWRIVFRQQ29va2llU3RvcmFnZV0gY29va2llc107CisgICAgCisgICAgYXV0byBjb29raWVzID0g
YWRvcHRDRihDRkhUVFBDb29raWVTdG9yYWdlQ29weUNvb2tpZXMoY29va2llU3RvcmFnZSkpOwor
ICAgIHJldHVybiBbTlNIVFRQQ29va2llIF9jZjJuc0Nvb2tpZXM6Y29va2llcy5nZXQoKV07Cit9
CisKK3N0YXRpYyB2b2lkIGRlbGV0ZUhUVFBDb29raWUoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBj
b29raWVTdG9yYWdlLCBOU0hUVFBDb29raWUgKmNvb2tpZSkKK3sKKyAgICBBU1NFUlQoaGFzUHJv
Y2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7Cisg
ICAgaWYgKCFjb29raWVTdG9yYWdlKSB7CisgICAgICAgIFtbTlNIVFRQQ29va2llU3RvcmFnZSBz
aGFyZWRIVFRQQ29va2llU3RvcmFnZV0gZGVsZXRlQ29va2llOmNvb2tpZV07CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgQ0ZIVFRQQ29va2llU3RvcmFnZURlbGV0ZUNvb2tpZShj
b29raWVTdG9yYWdlLCBbY29va2llIF9HZXRJbnRlcm5hbENGSFRUUENvb2tpZV0pOworfQorCisj
aWYgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MDE0MDApIHx8IChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDEyMDAwMCkKK3N0YXRpYyBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBwb2xpY3lQcm9w
ZXJ0aWVzKGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBOU1VSTCAqdXJsKQorewor
ICAgIHN0YXRpYyBOU1VSTCAqZW1wdHlVUkwgPSBbW05TVVJMIGFsbG9jXSBpbml0V2l0aFN0cmlu
ZzpAIiJdOworICAgIE5TRGljdGlvbmFyeSAqcG9saWN5UHJvcGVydGllcyA9IEB7CisgICAgICAg
IEAiX2tDRkhUVFBDb29raWVQb2xpY3lQcm9wZXJ0eVNpdGVGb3JDb29raWVzIjogc2FtZVNpdGVJ
bmZvLmlzU2FtZVNpdGUgPyB1cmwgOiBlbXB0eVVSTCwKKyAgICAgICAgQCJfa0NGSFRUUENvb2tp
ZVBvbGljeVByb3BlcnR5SXNUb3BMZXZlbE5hdmlnYXRpb24iOiBbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6c2FtZVNpdGVJbmZvLmlzVG9wU2l0ZV0sCisgICAgfTsKKyAgICByZXR1cm4gcG9saWN5
UHJvcGVydGllczsKK30KKyNlbmRpZgorCitzdGF0aWMgTlNBcnJheSAqY29va2llc0ZvclVSTChO
U0hUVFBDb29raWVTdG9yYWdlICpzdG9yYWdlLCBOU1VSTCAqdXJsLCBOU1VSTCAqbWFpbkRvY3Vt
ZW50VVJMLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFNhbWVTaXRlSW5mbz4mIHNhbWVTaXRlSW5mbywg
TlNTdHJpbmcgKnBhcnRpdGlvbiA9IG51bGxwdHIpCit7CisgICAgLy8gVGhlIF9nZXRDb29raWVz
Rm9yVVJMOiBtZXRob2QgY2FsbHMgdGhlIGNvbXBsZXRpb25IYW5kbGVyIHN5bmNocm9ub3VzbHku
IFdlIHVzZSBzdGQ6Om9wdGlvbmFsPD4gdG8gZW5zdXJlIHRoaXMgaW52YXJpYW50LgorICAgIHN0
ZDo6b3B0aW9uYWw8UmV0YWluUHRyPE5TQXJyYXkgKj4+IGNvb2tpZXNQdHI7CisgICAgYXV0byBj
b21wbGV0aW9uSGFuZGxlciA9IFsmY29va2llc1B0cl0gKE5TQXJyYXkgKmNvb2tpZXMpIHsgY29v
a2llc1B0ciA9IHJldGFpblB0cihjb29raWVzKTsgfTsKKyNpZiAoUExBVEZPUk0oTUFDKSAmJiBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTQwMCkgfHwgKFBMQVRGT1JNKElP
UykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTIwMDAwKQorICAgIGlm
IChbc3RvcmFnZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF9nZXRDb29raWVzRm9yVVJM
Om1haW5Eb2N1bWVudFVSTDpwYXJ0aXRpb246cG9saWN5UHJvcGVydGllczpjb21wbGV0aW9uSGFu
ZGxlcjopXSkKKyAgICAgICAgW3N0b3JhZ2UgX2dldENvb2tpZXNGb3JVUkw6dXJsIG1haW5Eb2N1
bWVudFVSTDptYWluRG9jdW1lbnRVUkwgcGFydGl0aW9uOnBhcnRpdGlvbiBwb2xpY3lQcm9wZXJ0
aWVzOnNhbWVTaXRlSW5mbyA/IHBvbGljeVByb3BlcnRpZXMoc2FtZVNpdGVJbmZvLnZhbHVlKCks
IHVybCkuZ2V0KCkgOiBudWxscHRyIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVy
XTsKKyAgICBlbHNlCisgICAgICAgIFtzdG9yYWdlIF9nZXRDb29raWVzRm9yVVJMOnVybCBtYWlu
RG9jdW1lbnRVUkw6bWFpbkRvY3VtZW50VVJMIHBhcnRpdGlvbjpwYXJ0aXRpb24gY29tcGxldGlv
bkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOworI2Vsc2UKKyAgICBbc3RvcmFnZSBfZ2V0Q29v
a2llc0ZvclVSTDp1cmwgbWFpbkRvY3VtZW50VVJMOm1haW5Eb2N1bWVudFVSTCBwYXJ0aXRpb246
cGFydGl0aW9uIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKKyAgICBVTlVT
RURfUEFSQU0oc2FtZVNpdGVJbmZvKTsKKyNlbmRpZgorICAgIEFTU0VSVCghIWNvb2tpZXNQdHIp
OworICAgIHJldHVybiBjb29raWVzUHRyLT5hdXRvcmVsZWFzZSgpOworfQorCitzdGF0aWMgdm9p
ZCBzZXRIVFRQQ29va2llc0ZvclVSTChDRkhUVFBDb29raWVTdG9yYWdlUmVmIGNvb2tpZVN0b3Jh
Z2UsIE5TQXJyYXkgKmNvb2tpZXMsIE5TVVJMICp1cmwsIE5TVVJMICptYWluRG9jdW1lbnRVUkws
IGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvKQoreworICAgIEFTU0VSVChoYXNQcm9j
ZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKKyAg
ICBpZiAoIWNvb2tpZVN0b3JhZ2UpIHsKKyNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTQwMCkgfHwgKFBMQVRGT1JNKElPUykgJiYgX19J
UEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTIwMDAwKQorICAgICAgICBpZiAoW05T
SFRUUENvb2tpZVN0b3JhZ2UgaW5zdGFuY2VzUmVzcG9uZFRvU2VsZWN0b3I6QHNlbGVjdG9yKF9z
ZXRDb29raWVzOmZvclVSTDptYWluRG9jdW1lbnRVUkw6cG9saWN5UHJvcGVydGllczopXSkKKyAg
ICAgICAgICAgIFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0g
X3NldENvb2tpZXM6Y29va2llcyBmb3JVUkw6dXJsIG1haW5Eb2N1bWVudFVSTDptYWluRG9jdW1l
bnRVUkwgcG9saWN5UHJvcGVydGllczpwb2xpY3lQcm9wZXJ0aWVzKHNhbWVTaXRlSW5mbywgdXJs
KS5nZXQoKV07CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgW1tOU0hUVFBDb29r
aWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBzZXRDb29raWVzOmNvb2tpZXMgZm9y
VVJMOnVybCBtYWluRG9jdW1lbnRVUkw6bWFpbkRvY3VtZW50VVJMXTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwMTQwMCkgfHwgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTIwMDAwKQorICAgIGlmIChbTlNIVFRQQ29va2llU3RvcmFnZSBp
bnN0YW5jZXNSZXNwb25kVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3NldENvb2tpZXM6Zm9yVVJMOm1h
aW5Eb2N1bWVudFVSTDpwb2xpY3lQcm9wZXJ0aWVzOildKSB7CisgICAgICAgIC8vIEZJWE1FOiBT
dG9wIGNyZWF0aW5nIGEgbmV3IE5TSFRUUENvb2tpZVN0b3JhZ2Ugb2JqZWN0IGVhY2ggdGltZSB3
ZSB3YW50IHRvIHF1ZXJ5IHRoZSBjb29raWUgamFyLgorICAgICAgICAvLyBOZXR3b3JrU3RvcmFn
ZVNlc3Npb24gY291bGQgaW5zdGVhZCBrZWVwIGEgTlNIVFRQQ29va2llU3RvcmFnZSBvYmplY3Qg
Zm9yIHVzLgorICAgICAgICBSZXRhaW5QdHI8TlNIVFRQQ29va2llU3RvcmFnZT4gbnNDb29raWVT
dG9yYWdlID0gYWRvcHROUyhbW05TSFRUUENvb2tpZVN0b3JhZ2UgYWxsb2NdIF9pbml0V2l0aENG
SFRUUENvb2tpZVN0b3JhZ2U6Y29va2llU3RvcmFnZV0pOworICAgICAgICBbbnNDb29raWVTdG9y
YWdlIF9zZXRDb29raWVzOmNvb2tpZXMgZm9yVVJMOnVybCBtYWluRG9jdW1lbnRVUkw6bWFpbkRv
Y3VtZW50VVJMIHBvbGljeVByb3BlcnRpZXM6cG9saWN5UHJvcGVydGllcyhzYW1lU2l0ZUluZm8s
IHVybCkuZ2V0KCldOworICAgIH0gZWxzZSB7CisjZW5kaWYKKyAgICAgICAgYXV0byBjZkNvb2tp
ZXMgPSBhZG9wdENGKFtOU0hUVFBDb29raWUgX25zMmNmQ29va2llczpjb29raWVzXSk7CisgICAg
ICAgIENGSFRUUENvb2tpZVN0b3JhZ2VTZXRDb29raWVzKGNvb2tpZVN0b3JhZ2UsIGNmQ29va2ll
cy5nZXQoKSwgW3VybCBfY2Z1cmxdLCBbbWFpbkRvY3VtZW50VVJMIF9jZnVybF0pOworI2lmIChQ
TEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNDAw
KSB8fCAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMjAwMDApCisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2FtZVNpdGVJbmZvKTsK
KyNlbmRpZgorfQorCitzdGF0aWMgTlNBcnJheSAqaHR0cENvb2tpZXNGb3JVUkwoQ0ZIVFRQQ29v
a2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlLCBOU1VSTCAqZmlyc3RQYXJ0eSwgY29uc3Qgc3Rk
OjpvcHRpb25hbDxTYW1lU2l0ZUluZm8+JiBzYW1lU2l0ZUluZm8sIE5TVVJMICp1cmwpCit7Cisg
ICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNz
UmF3Q29va2llcykpOworICAgIGlmICghY29va2llU3RvcmFnZSkKKyAgICAgICAgY29va2llU3Rv
cmFnZSA9IF9DRkhUVFBDb29raWVTdG9yYWdlR2V0RGVmYXVsdChrQ0ZBbGxvY2F0b3JEZWZhdWx0
KTsKKworICAgIC8vIEZJWE1FOiBTdG9wIGNyZWF0aW5nIGEgbmV3IE5TSFRUUENvb2tpZVN0b3Jh
Z2Ugb2JqZWN0IGVhY2ggdGltZSB3ZSB3YW50IHRvIHF1ZXJ5IHRoZSBjb29raWUgamFyLgorICAg
IC8vIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiBjb3VsZCBpbnN0ZWFkIGtlZXAgYSBOU0hUVFBDb29r
aWVTdG9yYWdlIG9iamVjdCBmb3IgdXMuCisgICAgUmV0YWluUHRyPE5TSFRUUENvb2tpZVN0b3Jh
Z2U+IG5zQ29va2llU3RvcmFnZSA9IGFkb3B0TlMoW1tOU0hUVFBDb29raWVTdG9yYWdlIGFsbG9j
XSBfaW5pdFdpdGhDRkhUVFBDb29raWVTdG9yYWdlOmNvb2tpZVN0b3JhZ2VdKTsKKyAgICByZXR1
cm4gY29va2llc0ZvclVSTChuc0Nvb2tpZVN0b3JhZ2UuZ2V0KCksIHVybCwgZmlyc3RQYXJ0eSwg
c2FtZVNpdGVJbmZvKTsKK30KKworc3RhdGljIFJldGFpblB0cjxOU0FycmF5PiBmaWx0ZXJDb29r
aWVzKE5TQXJyYXkgKnVuZmlsdGVyZWRDb29raWVzKQoreworICAgIEFTU0VSVChoYXNQcm9jZXNz
UHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKKyAgICBO
U1VJbnRlZ2VyIGNvdW50ID0gW3VuZmlsdGVyZWRDb29raWVzIGNvdW50XTsKKyAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlQXJyYXk+IGZpbHRlcmVkQ29va2llcyA9IGFkb3B0TlMoW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpjb3VudF0pOworCisgICAgZm9yIChOU1VJbnRl
Z2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBOU0hUVFBDb29raWUgKmNvb2tp
ZSA9IChOU0hUVFBDb29raWUgKilbdW5maWx0ZXJlZENvb2tpZXMgb2JqZWN0QXRJbmRleDppXTsK
KworICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTYzMjg4Mz4gT24gMTAuNSwgTlNIVFRQQ29v
a2llU3RvcmFnZSB3b3VsZCBzdG9yZSBhbiBlbXB0eSBjb29raWUsCisgICAgICAgIC8vIHdoaWNo
IHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIuIFdlIGhhdmUgYSB3b3JrYXJvdW5kIGluIHNl
dENvb2tpZXMoKSB0byBwcmV2ZW50CisgICAgICAgIC8vIHRoYXQsIGJ1dCB3ZSBhbHNvIG5lZWQg
dG8gYXZvaWQgc2VuZGluZyBjb29raWVzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHN0b3JlZCwgYW5k
CisgICAgICAgIC8vIHRoZXJlJ3Mgbm8gaGFybSB0byBkb2luZyB0aGlzIGNoZWNrIGJlY2F1c2Ug
c3VjaCBhIGNvb2tpZSBpcyBuZXZlciB2YWxpZC4KKyAgICAgICAgaWYgKCFbW2Nvb2tpZSBuYW1l
XSBsZW5ndGhdKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKFtjb29raWUg
aXNIVFRQT25seV0pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBbZmlsdGVyZWRD
b29raWVzLmdldCgpIGFkZE9iamVjdDpjb29raWVdOworICAgIH0KKworICAgIHJldHVybiBmaWx0
ZXJlZENvb2tpZXM7Cit9CisKKyNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklO
RykKKworc3RhdGljIE5TQXJyYXkgKmFwcGx5UGFydGl0aW9uVG9Db29raWVzKE5TU3RyaW5nICpw
YXJ0aXRpb24sIE5TQXJyYXkgKmNvb2tpZXMpCit7CisgICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2
aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOworCisgICAgLy8g
RklYTUUgMjQ3NDc3Mzk6IENGTmV0d29yayBzaG91bGQgZXhwb3NlIHRoaXMga2V5IGFzIFNQSQor
ICAgIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IHBhcnRpdGlvbktleSA9IEAiU3RvcmFnZVBhcnRp
dGlvbiI7CisKKyAgICBOU011dGFibGVBcnJheSAqcGFydGl0aW9uZWRDb29raWVzID0gW05TTXV0
YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmNvb2tpZXMuY291bnRdOworICAgIGZvciAoTlNI
VFRQQ29va2llICpjb29raWUgaW4gY29va2llcykgeworICAgICAgICBSZXRhaW5QdHI8TlNNdXRh
YmxlRGljdGlvbmFyeT4gcHJvcGVydGllcyA9IGFkb3B0TlMoW2Nvb2tpZS5wcm9wZXJ0aWVzIG11
dGFibGVDb3B5XSk7CisgICAgICAgIFtwcm9wZXJ0aWVzIHNldE9iamVjdDpwYXJ0aXRpb24gZm9y
S2V5OnBhcnRpdGlvbktleV07CisgICAgICAgIFtwYXJ0aXRpb25lZENvb2tpZXMgYWRkT2JqZWN0
OltOU0hUVFBDb29raWUgY29va2llV2l0aFByb3BlcnRpZXM6cHJvcGVydGllcy5nZXQoKV1dOwor
ICAgIH0KKworICAgIHJldHVybiBwYXJ0aXRpb25lZENvb2tpZXM7Cit9CisKK3N0YXRpYyBib29s
IGNvb2tpZXNBcmVCbG9ja2VkRm9yVVJMKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vz
c2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKK3sKKyAgICByZXR1
cm4gc2Vzc2lvbi5zaG91bGRCbG9ja0Nvb2tpZXMoZmlyc3RQYXJ0eSwgdXJsKTsKK30KKworc3Rh
dGljIE5TQXJyYXkgKmNvb2tpZXNJblBhcnRpdGlvbkZvclVSTChjb25zdCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJ
bmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90
PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQpCit7CisgICAgQVNTRVJU
KGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2ll
cykpOworICAgIFN0cmluZyBwYXJ0aXRpb24gPSBzZXNzaW9uLmNvb2tpZVN0b3JhZ2VQYXJ0aXRp
b24oZmlyc3RQYXJ0eSwgdXJsLCBmcmFtZUlELCBwYWdlSUQpOworICAgIGlmIChwYXJ0aXRpb24u
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgLy8gRklYTUU6IFN0b3AgY3Jl
YXRpbmcgYSBuZXcgTlNIVFRQQ29va2llU3RvcmFnZSBvYmplY3QgZWFjaCB0aW1lIHdlIHdhbnQg
dG8gcXVlcnkgdGhlIGNvb2tpZSBqYXIuCisgICAgLy8gTmV0d29ya1N0b3JhZ2VTZXNzaW9uIGNv
dWxkIGluc3RlYWQga2VlcCBhIE5TSFRUUENvb2tpZVN0b3JhZ2Ugb2JqZWN0IGZvciB1cy4KKyAg
ICBSZXRhaW5QdHI8TlNIVFRQQ29va2llU3RvcmFnZT4gY29va2llU3RvcmFnZTsKKyAgICBpZiAo
YXV0byBzdG9yYWdlID0gc2Vzc2lvbi5jb29raWVTdG9yYWdlKCkpCisgICAgICAgIGNvb2tpZVN0
b3JhZ2UgPSBhZG9wdE5TKFtbTlNIVFRQQ29va2llU3RvcmFnZSBhbGxvY10gX2luaXRXaXRoQ0ZI
VFRQQ29va2llU3RvcmFnZTpzdG9yYWdlLmdldCgpXSk7CisgICAgZWxzZQorICAgICAgICBjb29r
aWVTdG9yYWdlID0gW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2Vd
OworICAgIHJldHVybiBjb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHVybCwgZmly
c3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCBwYXJ0aXRpb24pOworfQorCisjZW5kaWYgLy8gSEFWRShD
Rk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCisgICAgCitzdGF0aWMgTlNBcnJheSAqY29v
a2llc0ZvclVSTChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVS
TCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVS
TCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVp
bnQ2NF90PiBwYWdlSUQpCit7CisjaWYgSEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05J
TkcpCisgICAgaWYgKGNvb2tpZXNBcmVCbG9ja2VkRm9yVVJMKHNlc3Npb24sIGZpcnN0UGFydHks
IHVybCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgaWYgKE5TQXJyYXkgKmNvb2tp
ZXMgPSBjb29raWVzSW5QYXJ0aXRpb25Gb3JVUkwoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgc2FtZVNp
dGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCkpCisgICAgICAgIHJldHVybiBjb29raWVzOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7CisgICAgVU5VU0VEX1BBUkFNKHBhZ2VJ
RCk7CisjZW5kaWYKKyAgICByZXR1cm4gaHR0cENvb2tpZXNGb3JVUkwoc2Vzc2lvbi5jb29raWVT
dG9yYWdlKCkuZ2V0KCksIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsKTsKK30KKworZW51
bSBJbmNsdWRlSFRUUE9ubHlPck5vdCB7IERvTm90SW5jbHVkZUhUVFBPbmx5LCBJbmNsdWRlSFRU
UE9ubHkgfTsKK3N0YXRpYyBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVzRm9yU2Vzc2lv
bihjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBz
dGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBw
YWdlSUQsIEluY2x1ZGVIVFRQT25seU9yTm90IGluY2x1ZGVIVFRQT25seSwgSW5jbHVkZVNlY3Vy
ZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpCit7CisgICAgQVNTRVJUKGhhc1Byb2Nlc3NQ
cml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOworCisgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgTlNBcnJheSAqY29va2llcyA9IGNv
b2tpZXNGb3JVUkwoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1l
SUQsIHBhZ2VJRCk7CisgICAgaWYgKCFbY29va2llcyBjb3VudF0pCisgICAgICAgIHJldHVybiB7
IFN0cmluZygpLCBmYWxzZSB9OyAvLyBSZXR1cm4gYSBudWxsIHN0cmluZywgbm90IGFuIGVtcHR5
IG9uZSB0aGF0IFN0cmluZ0J1aWxkZXIgd291bGQgY3JlYXRlIGJlbG93LgorCisgICAgU3RyaW5n
QnVpbGRlciBjb29raWVzQnVpbGRlcjsKKyAgICBib29sIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMg
PSBmYWxzZTsKKyAgICBmb3IgKE5TSFRUUENvb2tpZSAqY29va2llIGluIGNvb2tpZXMpIHsKKyAg
ICAgICAgaWYgKCFbW2Nvb2tpZSBuYW1lXSBsZW5ndGhdKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgaWYgKCFpbmNsdWRlSFRUUE9ubHkgJiYgW2Nvb2tpZSBpc0hUVFBPbmx5XSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChbY29va2llIGlzU2VjdXJlXSkg
eworICAgICAgICAgICAgZGlkQWNjZXNzU2VjdXJlQ29va2llcyA9IHRydWU7CisgICAgICAgICAg
ICBpZiAoaW5jbHVkZVNlY3VyZUNvb2tpZXMgPT0gSW5jbHVkZVNlY3VyZUNvb2tpZXM6Ok5vKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFjb29r
aWVzQnVpbGRlci5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb29raWVzQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCI7ICIpOworCisgICAgICAgIGNvb2tpZXNCdWlsZGVyLmFwcGVuZChbY29va2llIG5h
bWVdKTsKKyAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kKCc9Jyk7CisgICAgICAgIGNvb2tp
ZXNCdWlsZGVyLmFwcGVuZChbY29va2llIHZhbHVlXSk7CisgICAgfQorICAgIHJldHVybiB7IGNv
b2tpZXNCdWlsZGVyLnRvU3RyaW5nKCksIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMgfTsKKworICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIHsgU3RyaW5nKCksIGZhbHNl
IH07Cit9CisKK3N0YXRpYyB2b2lkIGRlbGV0ZUFsbEhUVFBDb29raWVzKENGSFRUUENvb2tpZVN0
b3JhZ2VSZWYgY29va2llU3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVn
ZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7CisKKyAgICBpZiAoIWNv
b2tpZVN0b3JhZ2UpIHsKKyAgICAgICAgTlNIVFRQQ29va2llU3RvcmFnZSAqY29va2llU3RvcmFn
ZSA9IFtOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXTsKKyAgICAg
ICAgTlNBcnJheSAqY29va2llcyA9IFtjb29raWVTdG9yYWdlIGNvb2tpZXNdOworICAgICAgICBp
ZiAoIWNvb2tpZXMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZm9yIChOU0hUVFBD
b29raWUgKmNvb2tpZSBpbiBjb29raWVzKQorICAgICAgICAgICAgW2Nvb2tpZVN0b3JhZ2UgZGVs
ZXRlQ29va2llOmNvb2tpZV07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDRkhUVFBD
b29raWVTdG9yYWdlRGVsZXRlQWxsQ29va2llcyhjb29raWVTdG9yYWdlKTsKK30KKworc3RkOjpw
YWlyPFN0cmluZywgYm9vbD4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVzRm9yRE9NKGNv
bnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNv
bnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlv
bmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVD
b29raWVzKSBjb25zdAoreworICAgIHJldHVybiBjb29raWVzRm9yU2Vzc2lvbigqdGhpcywgZmly
c3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgRG9Ob3RJbmNsdWRl
SFRUUE9ubHksIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKK30KKworc3RkOjpwYWlyPFN0cmluZywg
Ym9vbD4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZv
LCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpv
cHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2Vj
dXJlQ29va2llcykgY29uc3QKK3sKKyAgICByZXR1cm4gY29va2llc0ZvclNlc3Npb24oKnRoaXMs
IGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIEluY2x1ZGVI
VFRQT25seSwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOworfQorCitzdGQ6OnBhaXI8U3RyaW5nLCBi
b29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KGNvbnN0IENvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5JiBoZWFkZXJGaWVsZFByb3h5KSBj
b25zdAoreworICAgIHJldHVybiBjb29raWVzRm9yU2Vzc2lvbigqdGhpcywgaGVhZGVyRmllbGRQ
cm94eS5maXJzdFBhcnR5LCBoZWFkZXJGaWVsZFByb3h5LnNhbWVTaXRlSW5mbywgaGVhZGVyRmll
bGRQcm94eS51cmwsIGhlYWRlckZpZWxkUHJveHkuZnJhbWVJRCwgaGVhZGVyRmllbGRQcm94eS5w
YWdlSUQsIEluY2x1ZGVIVFRQT25seSwgaGVhZGVyRmllbGRQcm94eS5pbmNsdWRlU2VjdXJlQ29v
a2llcyk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVzRnJvbURP
TShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZv
LCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpv
cHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cikgY29uc3QK
K3sKKyAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5B
Y2Nlc3NSYXdDb29raWVzKSk7CisKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisK
KyAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTYzMjg4Mz4gT24gMTAuNSwgTlNIVFRQQ29va2llU3Rv
cmFnZSB3b3VsZCBzdG9yZSBhbiBlbXB0eSBjb29raWUsCisgICAgLy8gd2hpY2ggd291bGQgYmUg
c2VudCBhcyAiQ29va2llOiA9Ii4KKyAgICBpZiAoY29va2llU3RyLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY1MzE+LCA8cmRhcjovLzQ0MDkwMzQ+CisgICAgLy8gY29va2llc1dpdGhSZXNwb25zZUhl
YWRlckZpZWxkcyBkb2Vzbid0IHBhcnNlIGNvb2tpZXMgd2l0aG91dCBhIHZhbHVlCisgICAgU3Ry
aW5nIGNvb2tpZVN0cmluZyA9IGNvb2tpZVN0ci5jb250YWlucygnPScpID8gY29va2llU3RyIDog
Y29va2llU3RyICsgIj0iOworCisgICAgTlNVUkwgKmNvb2tpZVVSTCA9IHVybDsKKyAgICBOU0Rp
Y3Rpb25hcnkgKmhlYWRlckZpZWxkcyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmpl
Y3Q6Y29va2llU3RyaW5nIGZvcktleTpAIlNldC1Db29raWUiXTsKKworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBOU0FycmF5ICp1bmZpbHRlcmVkQ29va2llcyA9IFtOU0hUVFBDb29raWUgX3BhcnNl
ZENvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHM6aGVhZGVyRmllbGRzIGZvclVSTDpjb29r
aWVVUkxdOworI2Vsc2UKKyAgICBOU0FycmF5ICp1bmZpbHRlcmVkQ29va2llcyA9IFtOU0hUVFBD
b29raWUgY29va2llc1dpdGhSZXNwb25zZUhlYWRlckZpZWxkczpoZWFkZXJGaWVsZHMgZm9yVVJM
OmNvb2tpZVVSTF07CisjZW5kaWYKKworICAgIFJldGFpblB0cjxOU0FycmF5PiBmaWx0ZXJlZENv
b2tpZXMgPSBmaWx0ZXJDb29raWVzKHVuZmlsdGVyZWRDb29raWVzKTsKKyAgICBBU1NFUlQoW2Zp
bHRlcmVkQ29va2llcy5nZXQoKSBjb3VudF0gPD0gMSk7CisKKyNpZiBIQVZFKENGTkVUV09SS19T
VE9SQUdFX1BBUlRJVElPTklORykKKyAgICBpZiAoc2hvdWxkQmxvY2tDb29raWVzKGZpcnN0UGFy
dHksIHVybCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBwYXJ0aXRpb24gPSBjb29r
aWVTdG9yYWdlUGFydGl0aW9uKGZpcnN0UGFydHksIHVybCwgZnJhbWVJRCwgcGFnZUlEKTsKKyAg
ICBpZiAoIXBhcnRpdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIGZpbHRlcmVkQ29va2llcyA9IGFw
cGx5UGFydGl0aW9uVG9Db29raWVzKHBhcnRpdGlvbiwgZmlsdGVyZWRDb29raWVzLmdldCgpKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGZyYW1lSUQpOworICAgIFVOVVNFRF9QQVJBTShwYWdl
SUQpOworI2VuZGlmCisKKyAgICBzZXRIVFRQQ29va2llc0ZvclVSTChjb29raWVTdG9yYWdlKCku
Z2V0KCksIGZpbHRlcmVkQ29va2llcy5nZXQoKSwgY29va2llVVJMLCBmaXJzdFBhcnR5LCBzYW1l
U2l0ZUluZm8pOworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKworc3RhdGlj
IE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSBodHRwQ29va2llQWNjZXB0UG9saWN5KENGSFRUUENv
b2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoaGFzUHJvY2Vzc1By
aXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7CisKKyAgICBp
ZiAoIWNvb2tpZVN0b3JhZ2UpCisgICAgICAgIHJldHVybiBbW05TSFRUUENvb2tpZVN0b3JhZ2Ug
c2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIGNvb2tpZUFjY2VwdFBvbGljeV07CisKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8TlNIVFRQQ29va2llQWNjZXB0UG9saWN5PihDRkhUVFBDb29raWVTdG9y
YWdlR2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UpKTsKK30KKworYm9vbCBOZXR3
b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZXNFbmFibGVkKCkgY29uc3QKK3sKKyAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kgY29v
a2llQWNjZXB0UG9saWN5ID0gaHR0cENvb2tpZUFjY2VwdFBvbGljeShjb29raWVTdG9yYWdlKCku
Z2V0KCkpOworICAgIHJldHVybiBjb29raWVBY2NlcHRQb2xpY3kgPT0gTlNIVFRQQ29va2llQWNj
ZXB0UG9saWN5QWx3YXlzIHx8IGNvb2tpZUFjY2VwdFBvbGljeSA9PSBOU0hUVFBDb29raWVBY2Nl
cHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbiB8fCBjb29raWVBY2NlcHRQb2xpY3kg
PT0gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5RXhjbHVzaXZlbHlGcm9tTWFpbkRvY3VtZW50RG9t
YWluOworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRSYXdDb29raWVzKGNvbnN0IFVS
TCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVS
TCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVp
bnQ2NF90PiBwYWdlSUQsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKSBjb25zdAoreworICAg
IHJhd0Nvb2tpZXMuY2xlYXIoKTsKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisK
KyAgICBOU0FycmF5ICpjb29raWVzID0gY29va2llc0ZvclVSTCgqdGhpcywgZmlyc3RQYXJ0eSwg
c2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCk7CisgICAgTlNVSW50ZWdlciBjb3Vu
dCA9IFtjb29raWVzIGNvdW50XTsKKyAgICByYXdDb29raWVzLnJlc2VydmVDYXBhY2l0eShjb3Vu
dCk7CisgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAg
ICBOU0hUVFBDb29raWUgKmNvb2tpZSA9IChOU0hUVFBDb29raWUgKilbY29va2llcyBvYmplY3RB
dEluZGV4OmldOworICAgICAgICByYXdDb29raWVzLnVuY2hlY2tlZEFwcGVuZCh7IGNvb2tpZSB9
KTsKKyAgICB9CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llKGNvbnN0
IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpIGNvbnN0Cit7CisgICAgQVNTRVJU
KGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2ll
cykpOworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgUmV0YWluUHRy
PENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSB0aGlzLT5jb29raWVTdG9y
YWdlKCk7CisgICAgTlNBcnJheSAqY29va2llcyA9IGh0dHBDb29raWVzRm9yVVJMKGNvb2tpZVN0
b3JhZ2UuZ2V0KCksIG5pbCwgc3RkOjpudWxsb3B0LCB1cmwpOworCisgICAgTlNTdHJpbmcgKmNv
b2tpZU5hbWVTdHJpbmcgPSBjb29raWVOYW1lOworCisgICAgTlNVSW50ZWdlciBjb3VudCA9IFtj
b29raWVzIGNvdW50XTsKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7CisgICAgICAgIE5TSFRUUENvb2tpZSAqY29va2llID0gKE5TSFRUUENvb2tpZSAqKVtjb29r
aWVzIG9iamVjdEF0SW5kZXg6aV07CisgICAgICAgIGlmIChbW2Nvb2tpZSBuYW1lXSBpc0VxdWFs
VG9TdHJpbmc6Y29va2llTmFtZVN0cmluZ10pCisgICAgICAgICAgICBkZWxldGVIVFRQQ29va2ll
KGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZSk7CisgICAgfQorCisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQoreworICAgIEJFR0lO
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIE5TQXJyYXkgKmNvb2tpZXMgPSBodHRwQ29v
a2llcyhjb29raWVTdG9yYWdlKCkuZ2V0KCkpOworICAgIAorICAgIGZvciAoTlNIVFRQQ29va2ll
KiBjb29raWUgaW4gY29va2llcykKKyAgICAgICAgaG9zdG5hbWVzLmFkZChbY29va2llIGRvbWFp
bl0pOworICAgIAorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3ZvaWQgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKCkKK3sKKyAgICBkZWxldGVBbGxI
VFRQQ29va2llcyhjb29raWVTdG9yYWdlKCkuZ2V0KCkpOworfQorCit2b2lkIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgaG9zdG5hbWVzKQoreworICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQ
cml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKKworICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKKworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29r
aWVTdG9yYWdlID0gdGhpcy0+Y29va2llU3RvcmFnZSgpOworICAgIE5TQXJyYXkgKmNvb2tpZXMg
PSBodHRwQ29va2llcyhjb29raWVTdG9yYWdlLmdldCgpKTsKKyAgICBpZiAoIWNvb2tpZXMpCisg
ICAgICAgIHJldHVybjsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmV0YWluUHRyPE5T
SFRUUENvb2tpZT4+PiBjb29raWVzQnlEb21haW47CisgICAgZm9yIChOU0hUVFBDb29raWUqIGNv
b2tpZSBpbiBjb29raWVzKSB7CisgICAgICAgIGF1dG8mIGNvb2tpZXMgPSBjb29raWVzQnlEb21h
aW4uYWRkKGNvb2tpZS5kb21haW4sIFZlY3RvcjxSZXRhaW5QdHI8TlNIVFRQQ29va2llPj4oKSku
aXRlcmF0b3ItPnZhbHVlOworICAgICAgICBjb29raWVzLmFwcGVuZChjb29raWUpOworICAgIH0K
KworICAgIGZvciAoY29uc3QgYXV0byYgaG9zdG5hbWUgOiBob3N0bmFtZXMpIHsKKyAgICAgICAg
YXV0byBpdCA9IGNvb2tpZXNCeURvbWFpbi5maW5kKGhvc3RuYW1lKTsKKyAgICAgICAgaWYgKGl0
ID09IGNvb2tpZXNCeURvbWFpbi5lbmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGZvciAoYXV0byYgY29va2llIDogaXQtPnZhbHVlKQorICAgICAgICAgICAgZGVsZXRlSFRU
UENvb2tpZShjb29raWVTdG9yYWdlLmdldCgpLCBjb29raWUuZ2V0KCkpOworICAgIH0KKworICAg
IFtuc0Nvb2tpZVN0b3JhZ2UoKSBfc2F2ZUNvb2tpZXNdOworCisgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUFsbENv
b2tpZXNNb2RpZmllZFNpbmNlKFdhbGxUaW1lIHRpbWVQb2ludCkKK3sKKyAgICBBU1NFUlQoaGFz
UHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7
CisKKyAgICBpZiAoIVtOU0hUVFBDb29raWVTdG9yYWdlIGluc3RhbmNlc1Jlc3BvbmRUb1NlbGVj
dG9yOkBzZWxlY3RvcihyZW1vdmVDb29raWVzU2luY2VEYXRlOildKQorICAgICAgICByZXR1cm47
CisKKyAgICBOU1RpbWVJbnRlcnZhbCB0aW1lSW50ZXJ2YWwgPSB0aW1lUG9pbnQuc2Vjb25kc1Np
bmNlRXBvY2goKS5zZWNvbmRzKCk7CisgICAgTlNEYXRlICpkYXRlID0gW05TRGF0ZSBkYXRlV2l0
aFRpbWVJbnRlcnZhbFNpbmNlMTk3MDp0aW1lSW50ZXJ2YWxdOworCisgICAgYXV0byAqc3RvcmFn
ZSA9IG5zQ29va2llU3RvcmFnZSgpOworCisgICAgW3N0b3JhZ2UgcmVtb3ZlQ29va2llc1NpbmNl
RGF0ZTpkYXRlXTsKKyAgICBbc3RvcmFnZSBfc2F2ZUNvb2tpZXNdOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ29va2llSmFyQ3VybC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ29va2llSmFyQ3VybC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVi
NGEyNDUyNzU4MjRjMDgwZDk4MmQ5NjA5MDVlNDQ0ZGU2MTkwOTYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50
IEluYy4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJDb29raWVKYXJDdXJsLmgiCi0KLSNpZiBVU0UoQ1VSTCkKLSNpbmNsdWRl
ICJDb29raWUuaCIKLSNpbmNsdWRlICJDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eS5oIgot
I2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oIgotI2luY2x1ZGUgIlVSTC5oIgotCi0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
c3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29va2llc0ZvckRPTShjb25zdCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJ
bmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90
PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVD
b29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKQotewotICAgIHJldHVybiBzZXNzaW9uLmNvb2tp
ZVN0b3JhZ2UoKS5jb29raWVzRm9yRE9NKHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5m
bywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKLX0KLQotdm9p
ZCBzZXRDb29raWVzRnJvbURPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24s
IGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8s
IGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9w
dGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2Vz
c2lvbi5jb29raWVTdG9yYWdlKCkuc2V0Q29va2llc0Zyb21ET00oc2Vzc2lvbiwgZmlyc3RQYXJ0
eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgdmFsdWUpOwotfQotCi1zdGQ6
OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29u
c3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlv
bmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIElu
Y2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKQotewotICAgIHJldHVybiBz
ZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShzZXNz
aW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNs
dWRlU2VjdXJlQ29va2llcyk7Ci19Ci0KLXN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lv
biwgY29uc3QgQ29va2llUmVxdWVzdEhlYWRlckZpZWxkUHJveHkmIGhlYWRlckZpZWxkUHJveHkp
Ci17Ci0gICAgcmV0dXJuIHNlc3Npb24uY29va2llU3RvcmFnZSgpLmNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKHNlc3Npb24sIGhlYWRlckZpZWxkUHJveHkuZmlyc3RQYXJ0eSwgaGVhZGVy
RmllbGRQcm94eS5zYW1lU2l0ZUluZm8sIGhlYWRlckZpZWxkUHJveHkudXJsLCBoZWFkZXJGaWVs
ZFByb3h5LmZyYW1lSUQsIGhlYWRlckZpZWxkUHJveHkucGFnZUlELCBoZWFkZXJGaWVsZFByb3h5
LmluY2x1ZGVTZWN1cmVDb29raWVzKTsKLX0KLQotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24pCi17Ci0gICAgcmV0dXJuIHNlc3Npb24uY29v
a2llU3RvcmFnZSgpLmNvb2tpZXNFbmFibGVkKHNlc3Npb24pOwotfQotCi1ib29sIGdldFJhd0Nv
b2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZp
cnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVy
bCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRf
dD4gcGFnZUlELCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKLXsKLSAgICByZXR1cm4gc2Vz
c2lvbi5jb29raWVTdG9yYWdlKCkuZ2V0UmF3Q29va2llcyhzZXNzaW9uLCBmaXJzdFBhcnR5LCBz
YW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCByYXdDb29raWVzKTsKLX0KLQotdm9p
ZCBkZWxldGVDb29raWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25z
dCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWUpCi17Ci0gICAgc2Vzc2lvbi5jb29raWVT
dG9yYWdlKCkuZGVsZXRlQ29va2llKHNlc3Npb24sIHVybCwgY29va2llKTsKLX0KLQotdm9pZCBn
ZXRIb3N0bmFtZXNXaXRoQ29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Np
b24sIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQotewotICAgIHNlc3Npb24uY29va2llU3Rv
cmFnZSgpLmdldEhvc3RuYW1lc1dpdGhDb29raWVzKHNlc3Npb24sIGhvc3RuYW1lcyk7Ci19Ci0K
LXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Np
b24mIHNlc3Npb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb29raWVIb3N0TmFtZXMpCi17Ci0g
ICAgc2Vzc2lvbi5jb29raWVTdG9yYWdlKCkuZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNz
aW9uLCBjb29raWVIb3N0TmFtZXMpOwotfQotCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoY29uc3Qg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uKQotewotICAgIHNlc3Npb24uY29va2llU3Rv
cmFnZSgpLmRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbik7Ci19Ci0KLXZvaWQgZGVsZXRlQWxsQ29v
a2llc01vZGlmaWVkU2luY2UoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBX
YWxsVGltZSBzaW5jZSkKLXsKLSAgICBzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5kZWxldGVBbGxD
b29raWVzTW9kaWZpZWRTaW5jZShzZXNzaW9uLCBzaW5jZSk7Ci19Ci0KLX0KLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFy
Q3VybC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1
cmwuaAppbmRleCAyYWE4ZGZkYTFiNzBlMTA5Y2ZlYjhhNGJlZjNiNDFmNDY2NmU2OGVlLi5lMGIy
MWNjMTM3NzQ4YThlMTYyNzQ4MzI2MDdjMThkN2E0ODE2MGZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmgKQEAgLTE4LDEw
ICsxOCwyMiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlBsYXRmb3JtQ29va2llSmFy
LmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFVSTDsKK2NsYXNzIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjsKKworc3RydWN0IENvb2tpZTsKK3N0cnVjdCBDb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRQcm94eTsKK3N0cnVjdCBTYW1lU2l0ZUluZm87CisKK2VudW0gY2xhc3MgSW5jbHVkZVNl
Y3VyZUNvb2tpZXM7CisKIGNsYXNzIENvb2tpZUphckN1cmwgewogcHVibGljOgogICAgIHZpcnR1
YWwgc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29va2llc0ZvckRPTShjb25zdCBOZXR3b3JrU3Rv
cmFnZVNlc3Npb24mLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYs
IGNvbnN0IFVSTCYsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9u
YWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMpIGNvbnN0ID0gMDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9OZXR3b3JrU3Rv
cmFnZVNlc3Npb25DdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9OZXR3b3JrU3RvcmFnZVNlc3Npb25DdXJsLmNwcAppbmRleCAwNjFkZjE5MDU5NmUzYmI5ZjFm
ZjlkMTY1Yjc3ZjdmZmFmM2NjNzkzLi44NmE0MWRmNzMyYzdmZTBmMmM1ZTYxY2I1ZGIzNWRlYzQ1
NTk2YzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
TmV0d29ya1N0b3JhZ2VTZXNzaW9uQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkN1cmwuY3BwCkBAIC0zMSwxMyAr
MzEsMTYgQEAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJDb29raWVKYXJDdXJsRGF0
YWJhc2UuaCIKICNpbmNsdWRlICJDb29raWVKYXJEQi5oIgorI2luY2x1ZGUgIkNvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFByb3h5LmgiCiAjaW5jbHVkZSAiQ3VybENvbnRleHQuaCIKICNpbmNsdWRl
ICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlVSTC5oIgogCiAjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMDMsNiAr
MTA2LDIxIEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzd2l0Y2hUb05ld1Rlc3RpbmdT
ZXNzaW9uKCkKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBXZWJLaXQgdG8gdXNlLgogfQog
Cit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llc0Zyb21ET00oY29uc3QgVVJM
JiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJM
JiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWlu
dDY0X3Q+IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKK3sKKyAgICBjb29raWVT
dG9yYWdlKCkuc2V0Q29va2llc0Zyb21ET00oKnRoaXMsIGZpcnN0UGFydHksIHNhbWVTaXRlSW5m
bywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIHZhbHVlKTsKK30KKworYm9vbCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmNvb2tpZXNFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29va2llU3Rv
cmFnZSgpLmNvb2tpZXNFbmFibGVkKCp0aGlzKTsKK30KKworc3RkOjpwYWlyPFN0cmluZywgYm9v
bD4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVzRm9yRE9NKGNvbnN0IFVSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBz
dGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBw
YWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKSBjb25zdAor
eworICAgIHJldHVybiBjb29raWVTdG9yYWdlKCkuY29va2llc0ZvckRPTSgqdGhpcywgZmlyc3RQ
YXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVkZVNlY3VyZUNv
b2tpZXMpOworfQorCiB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llcyhjb25z
dCBWZWN0b3I8Q29va2llPiYsIGNvbnN0IFVSTCYsIGNvbnN0IFVSTCYpCiB7CiAgICAgLy8gRklY
TUU6IEltcGxlbWVudCBmb3IgV2ViS2l0IHRvIHVzZS4KQEAgLTExOCwyMyArMTM2LDYzIEBAIHZv
aWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVDb29raWUoY29uc3QgQ29va2llJikKICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBXZWJLaXQgdG8gdXNlLgogfQogCit2b2lkIE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIGNvb2tpZSkgY29uc3QKK3sKKyAgICBjb29raWVTdG9yYWdlKCkuZGVsZXRlQ29va2llKCp0
aGlzLCB1cmwsIGNvb2tpZSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxl
dGVBbGxDb29raWVzKCkKK3sKKyAgICBjb29raWVTdG9yYWdlKCkuZGVsZXRlQWxsQ29va2llcygq
dGhpcyk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVBbGxDb29raWVz
TW9kaWZpZWRTaW5jZShXYWxsVGltZSBzaW5jZSkKK3sKKyAgICBjb29raWVTdG9yYWdlKCkuZGVs
ZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoKnRoaXMsIHNpbmNlKTsKK30KKwordm9pZCBOZXR3
b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoY29uc3QgVmVjdG9y
PFN0cmluZz4mIGNvb2tpZUhvc3ROYW1lcykKK3sKKyAgICBjb29raWVTdG9yYWdlKCkuZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lcygqdGhpcywgY29va2llSG9zdE5hbWVzKTsKK30KKwogVmVjdG9y
PENvb2tpZT4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRBbGxDb29raWVzKCkKIHsKICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IGZvciBXZWJLaXQgdG8gdXNlLgogICAgIHJldHVybiB7IH07CiB9
CiAKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhI
YXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3sKKyAgICBjb29raWVTdG9yYWdlKCkuZ2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMoKnRoaXMsIGhvc3RuYW1lcyk7Cit9CisKIFZlY3RvcjxDb29raWU+
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0Q29va2llcyhjb25zdCBVUkwmKQogewogICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgZm9yIFdlYktpdCB0byB1c2UuCiAgICAgcmV0dXJuIHsgfTsKIH0K
IAorYm9vbCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldFJhd0Nvb2tpZXMoY29uc3QgVVJMJiBm
aXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1
cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0
X3Q+IHBhZ2VJRCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGNvb2tpZVN0b3JhZ2UoKS5nZXRSYXdDb29raWVzKCp0aGlzLCBmaXJzdFBhcnR5LCBzYW1l
U2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCByYXdDb29raWVzKTsKK30KKwogdm9pZCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb246OmZsdXNoQ29va2llU3RvcmUoKQogewogICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgZm9yIFdlYktpdCB0byB1c2UuCiB9CiAKK3N0ZDo6cGFpcjxTdHJpbmcsIGJv
b2w+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUo
Y29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywg
Y29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0
aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3Vy
ZUNvb2tpZXMpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvb2tpZVN0b3JhZ2UoKS5jb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZSgqdGhpcywgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmws
IGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOworfQorCitzdGQ6OnBhaXI8
U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKGNvbnN0IENvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5JiBoZWFkZXJGaWVs
ZFByb3h5KSBjb25zdAoreworICAgIHJldHVybiBjb29raWVTdG9yYWdlKCkuY29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoKnRoaXMsIGhlYWRlckZpZWxkUHJveHkuZmlyc3RQYXJ0eSwgaGVh
ZGVyRmllbGRQcm94eS5zYW1lU2l0ZUluZm8sIGhlYWRlckZpZWxkUHJveHkudXJsLCBoZWFkZXJG
aWVsZFByb3h5LmZyYW1lSUQsIGhlYWRlckZpZWxkUHJveHkucGFnZUlELCBoZWFkZXJGaWVsZFBy
b3h5LmluY2x1ZGVTZWN1cmVDb29raWVzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gVVNFKENVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGMyNjQwYmQwNmRmMjEwYjZkMmQzMjA4MjY1MDYxMTAyZjhkOTIxODUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9tYWMvQ29va2llSmFyTWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNDcwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUGxhdGZvcm1Db29raWVKYXIuaCIKLQotI2ltcG9y
dCAiQ29va2llUmVxdWVzdEhlYWRlckZpZWxkUHJveHkuaCIKLSNpbXBvcnQgIkNvb2tpZXNTdHJh
dGVneS5oIgotI2ltcG9ydCAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCi0jaW1wb3J0IDxwYWwv
c3BpL2NmL0NGTmV0d29ya1NQSS5oPgotI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMu
aD4KLQotI2ltcG9ydCAiQ29va2llLmgiCi0jaW1wb3J0ICJDb29raWVTdG9yYWdlLmgiCi0jaW1w
b3J0ICJTYW1lU2l0ZUluZm8uaCIKLSNpbXBvcnQgIlVSTC5oIgotI2ltcG9ydCA8d3RmL09wdGlv
bmFsLmg+Ci0jaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgotI2ltcG9ydCA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgotCi1AaW50ZXJmYWNlIE5TVVJMICgpCi0tIChDRlVSTFJlZilf
Y2Z1cmw7Ci1AZW5kCi0KLSNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDEwMTQwMCkgfHwgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1Nf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTIwMDAwKQotQGludGVyZmFjZSBOU0hUVFBDb29raWVT
dG9yYWdlIChTdGFnaW5nKQotLSAodm9pZClfZ2V0Q29va2llc0ZvclVSTDooTlNVUkwgKil1cmwg
bWFpbkRvY3VtZW50VVJMOihOU1VSTCAqKW1haW5Eb2N1bWVudFVSTCBwYXJ0aXRpb246KE5TU3Ry
aW5nICopcGFydGl0aW9uIHBvbGljeVByb3BlcnRpZXM6KE5TRGljdGlvbmFyeSopcHJvcHMgY29t
cGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TQXJyYXkgKikpY29tcGxldGlvbkhhbmRsZXI7Ci0t
ICh2b2lkKV9zZXRDb29raWVzOihOU0FycmF5ICopY29va2llcyBmb3JVUkw6KE5TVVJMICopVVJM
IG1haW5Eb2N1bWVudFVSTDooTlNVUkwgKiltYWluRG9jdW1lbnRVUkwgcG9saWN5UHJvcGVydGll
czooTlNEaWN0aW9uYXJ5KikgcHJvcHM7Ci1AZW5kCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1zdGF0aWMgTlNBcnJheSAqaHR0cENvb2tpZXMoQ0ZIVFRQQ29va2llU3RvcmFnZVJl
ZiBjb29raWVTdG9yYWdlKQotewotICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nl
c3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKLSAgICBpZiAoIWNvb2tpZVN0b3Jh
Z2UpCi0gICAgICAgIHJldHVybiBbW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tp
ZVN0b3JhZ2VdIGNvb2tpZXNdOwotICAgIAotICAgIGF1dG8gY29va2llcyA9IGFkb3B0Q0YoQ0ZI
VFRQQ29va2llU3RvcmFnZUNvcHlDb29raWVzKGNvb2tpZVN0b3JhZ2UpKTsKLSAgICByZXR1cm4g
W05TSFRUUENvb2tpZSBfY2YybnNDb29raWVzOmNvb2tpZXMuZ2V0KCldOwotfQotCi1zdGF0aWMg
dm9pZCBkZWxldGVIVFRQQ29va2llKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFn
ZSwgTlNIVFRQQ29va2llICpjb29raWUpCi17Ci0gICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxl
Z2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOwotICAgIGlmICghY29v
a2llU3RvcmFnZSkgewotICAgICAgICBbW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENv
b2tpZVN0b3JhZ2VdIGRlbGV0ZUNvb2tpZTpjb29raWVdOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIAotICAgIENGSFRUUENvb2tpZVN0b3JhZ2VEZWxldGVDb29raWUoY29va2llU3RvcmFn
ZSwgW2Nvb2tpZSBfR2V0SW50ZXJuYWxDRkhUVFBDb29raWVdKTsKLX0KLQotI2lmIChQTEFURk9S
TShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNDAwKSB8fCAo
UExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMjAw
MDApCi1zdGF0aWMgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gcG9saWN5UHJvcGVydGllcyhjb25z
dCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgTlNVUkwgKnVybCkKLXsKLSAgICBzdGF0aWMg
TlNVUkwgKmVtcHR5VVJMID0gW1tOU1VSTCBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCIiXTsKLSAg
ICBOU0RpY3Rpb25hcnkgKnBvbGljeVByb3BlcnRpZXMgPSBAewotICAgICAgICBAIl9rQ0ZIVFRQ
Q29va2llUG9saWN5UHJvcGVydHlTaXRlRm9yQ29va2llcyI6IHNhbWVTaXRlSW5mby5pc1NhbWVT
aXRlID8gdXJsIDogZW1wdHlVUkwsCi0gICAgICAgIEAiX2tDRkhUVFBDb29raWVQb2xpY3lQcm9w
ZXJ0eUlzVG9wTGV2ZWxOYXZpZ2F0aW9uIjogW05TTnVtYmVyIG51bWJlcldpdGhCb29sOnNhbWVT
aXRlSW5mby5pc1RvcFNpdGVdLAotICAgIH07Ci0gICAgcmV0dXJuIHBvbGljeVByb3BlcnRpZXM7
Ci19Ci0jZW5kaWYKLQotc3RhdGljIE5TQXJyYXkgKmNvb2tpZXNGb3JVUkwoTlNIVFRQQ29va2ll
U3RvcmFnZSAqc3RvcmFnZSwgTlNVUkwgKnVybCwgTlNVUkwgKm1haW5Eb2N1bWVudFVSTCwgY29u
c3Qgc3RkOjpvcHRpb25hbDxTYW1lU2l0ZUluZm8+JiBzYW1lU2l0ZUluZm8sIE5TU3RyaW5nICpw
YXJ0aXRpb24gPSBudWxscHRyKQotewotICAgIC8vIFRoZSBfZ2V0Q29va2llc0ZvclVSTDogbWV0
aG9kIGNhbGxzIHRoZSBjb21wbGV0aW9uSGFuZGxlciBzeW5jaHJvbm91c2x5LiBXZSB1c2Ugc3Rk
OjpvcHRpb25hbDw+IHRvIGVuc3VyZSB0aGlzIGludmFyaWFudC4KLSAgICBzdGQ6Om9wdGlvbmFs
PFJldGFpblB0cjxOU0FycmF5ICo+PiBjb29raWVzUHRyOwotICAgIGF1dG8gY29tcGxldGlvbkhh
bmRsZXIgPSBbJmNvb2tpZXNQdHJdIChOU0FycmF5ICpjb29raWVzKSB7IGNvb2tpZXNQdHIgPSBy
ZXRhaW5QdHIoY29va2llcyk7IH07Ci0jaWYgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE0MDApIHx8IChQTEFURk9STShJT1MpICYmIF9fSVBI
T05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEyMDAwMCkKLSAgICBpZiAoW3N0b3JhZ2Ug
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihfZ2V0Q29va2llc0ZvclVSTDptYWluRG9jdW1l
bnRVUkw6cGFydGl0aW9uOnBvbGljeVByb3BlcnRpZXM6Y29tcGxldGlvbkhhbmRsZXI6KV0pCi0g
ICAgICAgIFtzdG9yYWdlIF9nZXRDb29raWVzRm9yVVJMOnVybCBtYWluRG9jdW1lbnRVUkw6bWFp
bkRvY3VtZW50VVJMIHBhcnRpdGlvbjpwYXJ0aXRpb24gcG9saWN5UHJvcGVydGllczpzYW1lU2l0
ZUluZm8gPyBwb2xpY3lQcm9wZXJ0aWVzKHNhbWVTaXRlSW5mby52YWx1ZSgpLCB1cmwpLmdldCgp
IDogbnVsbHB0ciBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07Ci0gICAgZWxz
ZQotICAgICAgICBbc3RvcmFnZSBfZ2V0Q29va2llc0ZvclVSTDp1cmwgbWFpbkRvY3VtZW50VVJM
Om1haW5Eb2N1bWVudFVSTCBwYXJ0aXRpb246cGFydGl0aW9uIGNvbXBsZXRpb25IYW5kbGVyOmNv
bXBsZXRpb25IYW5kbGVyXTsKLSNlbHNlCi0gICAgW3N0b3JhZ2UgX2dldENvb2tpZXNGb3JVUkw6
dXJsIG1haW5Eb2N1bWVudFVSTDptYWluRG9jdW1lbnRVUkwgcGFydGl0aW9uOnBhcnRpdGlvbiBj
b21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07Ci0gICAgVU5VU0VEX1BBUkFNKHNh
bWVTaXRlSW5mbyk7Ci0jZW5kaWYKLSAgICBBU1NFUlQoISFjb29raWVzUHRyKTsKLSAgICByZXR1
cm4gY29va2llc1B0ci0+YXV0b3JlbGVhc2UoKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0SFRUUENv
b2tpZXNGb3JVUkwoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlLCBOU0FycmF5
ICpjb29raWVzLCBOU1VSTCAqdXJsLCBOU1VSTCAqbWFpbkRvY3VtZW50VVJMLCBjb25zdCBTYW1l
U2l0ZUluZm8mIHNhbWVTaXRlSW5mbykKLXsKLSAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVn
ZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7Ci0gICAgaWYgKCFjb29r
aWVTdG9yYWdlKSB7Ci0jaWYgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA+PSAxMDE0MDApIHx8IChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEyMDAwMCkKLSAgICAgICAgaWYgKFtOU0hUVFBDb29raWVT
dG9yYWdlIGluc3RhbmNlc1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxlY3Rvcihfc2V0Q29va2llczpm
b3JVUkw6bWFpbkRvY3VtZW50VVJMOnBvbGljeVByb3BlcnRpZXM6KV0pCi0gICAgICAgICAgICBb
W05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIF9zZXRDb29raWVz
OmNvb2tpZXMgZm9yVVJMOnVybCBtYWluRG9jdW1lbnRVUkw6bWFpbkRvY3VtZW50VVJMIHBvbGlj
eVByb3BlcnRpZXM6cG9saWN5UHJvcGVydGllcyhzYW1lU2l0ZUluZm8sIHVybCkuZ2V0KCldOwot
ICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgIFtbTlNIVFRQQ29va2llU3RvcmFnZSBz
aGFyZWRIVFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2llczpjb29raWVzIGZvclVSTDp1cmwgbWFp
bkRvY3VtZW50VVJMOm1haW5Eb2N1bWVudFVSTF07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j
aWYgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MDE0MDApIHx8IChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDEyMDAwMCkKLSAgICBpZiAoW05TSFRUUENvb2tpZVN0b3JhZ2UgaW5zdGFuY2VzUmVz
cG9uZFRvU2VsZWN0b3I6QHNlbGVjdG9yKF9zZXRDb29raWVzOmZvclVSTDptYWluRG9jdW1lbnRV
Ukw6cG9saWN5UHJvcGVydGllczopXSkgewotICAgICAgICAvLyBGSVhNRTogU3RvcCBjcmVhdGlu
ZyBhIG5ldyBOU0hUVFBDb29raWVTdG9yYWdlIG9iamVjdCBlYWNoIHRpbWUgd2Ugd2FudCB0byBx
dWVyeSB0aGUgY29va2llIGphci4KLSAgICAgICAgLy8gTmV0d29ya1N0b3JhZ2VTZXNzaW9uIGNv
dWxkIGluc3RlYWQga2VlcCBhIE5TSFRUUENvb2tpZVN0b3JhZ2Ugb2JqZWN0IGZvciB1cy4KLSAg
ICAgICAgUmV0YWluUHRyPE5TSFRUUENvb2tpZVN0b3JhZ2U+IG5zQ29va2llU3RvcmFnZSA9IGFk
b3B0TlMoW1tOU0hUVFBDb29raWVTdG9yYWdlIGFsbG9jXSBfaW5pdFdpdGhDRkhUVFBDb29raWVT
dG9yYWdlOmNvb2tpZVN0b3JhZ2VdKTsKLSAgICAgICAgW25zQ29va2llU3RvcmFnZSBfc2V0Q29v
a2llczpjb29raWVzIGZvclVSTDp1cmwgbWFpbkRvY3VtZW50VVJMOm1haW5Eb2N1bWVudFVSTCBw
b2xpY3lQcm9wZXJ0aWVzOnBvbGljeVByb3BlcnRpZXMoc2FtZVNpdGVJbmZvLCB1cmwpLmdldCgp
XTsKLSAgICB9IGVsc2UgewotI2VuZGlmCi0gICAgICAgIGF1dG8gY2ZDb29raWVzID0gYWRvcHRD
RihbTlNIVFRQQ29va2llIF9uczJjZkNvb2tpZXM6Y29va2llc10pOwotICAgICAgICBDRkhUVFBD
b29raWVTdG9yYWdlU2V0Q29va2llcyhjb29raWVTdG9yYWdlLCBjZkNvb2tpZXMuZ2V0KCksIFt1
cmwgX2NmdXJsXSwgW21haW5Eb2N1bWVudFVSTCBfY2Z1cmxdKTsKLSNpZiAoUExBVEZPUk0oTUFD
KSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTQwMCkgfHwgKFBMQVRG
T1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTIwMDAwKQot
ICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNhbWVTaXRlSW5mbyk7Ci0jZW5kaWYKLX0K
LQotc3RhdGljIE5TQXJyYXkgKmh0dHBDb29raWVzRm9yVVJMKENGSFRUUENvb2tpZVN0b3JhZ2VS
ZWYgY29va2llU3RvcmFnZSwgTlNVUkwgKmZpcnN0UGFydHksIGNvbnN0IHN0ZDo6b3B0aW9uYWw8
U2FtZVNpdGVJbmZvPiYgc2FtZVNpdGVJbmZvLCBOU1VSTCAqdXJsKQotewotICAgIEFTU0VSVCho
YXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMp
KTsKLSAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCi0gICAgICAgIGNvb2tpZVN0b3JhZ2UgPSBfQ0ZI
VFRQQ29va2llU3RvcmFnZUdldERlZmF1bHQoa0NGQWxsb2NhdG9yRGVmYXVsdCk7Ci0KLSAgICAv
LyBGSVhNRTogU3RvcCBjcmVhdGluZyBhIG5ldyBOU0hUVFBDb29raWVTdG9yYWdlIG9iamVjdCBl
YWNoIHRpbWUgd2Ugd2FudCB0byBxdWVyeSB0aGUgY29va2llIGphci4KLSAgICAvLyBOZXR3b3Jr
U3RvcmFnZVNlc3Npb24gY291bGQgaW5zdGVhZCBrZWVwIGEgTlNIVFRQQ29va2llU3RvcmFnZSBv
YmplY3QgZm9yIHVzLgotICAgIFJldGFpblB0cjxOU0hUVFBDb29raWVTdG9yYWdlPiBuc0Nvb2tp
ZVN0b3JhZ2UgPSBhZG9wdE5TKFtbTlNIVFRQQ29va2llU3RvcmFnZSBhbGxvY10gX2luaXRXaXRo
Q0ZIVFRQQ29va2llU3RvcmFnZTpjb29raWVTdG9yYWdlXSk7Ci0gICAgcmV0dXJuIGNvb2tpZXNG
b3JVUkwobnNDb29raWVTdG9yYWdlLmdldCgpLCB1cmwsIGZpcnN0UGFydHksIHNhbWVTaXRlSW5m
byk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyQ29va2llcyhOU0FycmF5
ICp1bmZpbHRlcmVkQ29va2llcykKLXsKLSAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQ
cm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7Ci0gICAgTlNVSW50ZWdlciBj
b3VudCA9IFt1bmZpbHRlcmVkQ29va2llcyBjb3VudF07Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJs
ZUFycmF5PiBmaWx0ZXJlZENvb2tpZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRXaXRoQ2FwYWNpdHk6Y291bnRdKTsKLQotICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgTlNIVFRQQ29va2llICpjb29raWUgPSAoTlNIVFRQ
Q29va2llICopW3VuZmlsdGVyZWRDb29raWVzIG9iamVjdEF0SW5kZXg6aV07Ci0KLSAgICAgICAg
Ly8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IE9uIDEwLjUsIE5TSFRUUENvb2tpZVN0b3JhZ2Ug
d291bGQgc3RvcmUgYW4gZW1wdHkgY29va2llLAotICAgICAgICAvLyB3aGljaCB3b3VsZCBiZSBz
ZW50IGFzICJDb29raWU6ID0iLiBXZSBoYXZlIGEgd29ya2Fyb3VuZCBpbiBzZXRDb29raWVzKCkg
dG8gcHJldmVudAotICAgICAgICAvLyB0aGF0LCBidXQgd2UgYWxzbyBuZWVkIHRvIGF2b2lkIHNl
bmRpbmcgY29va2llcyB0aGF0IHdlcmUgcHJldmlvdXNseSBzdG9yZWQsIGFuZAotICAgICAgICAv
LyB0aGVyZSdzIG5vIGhhcm0gdG8gZG9pbmcgdGhpcyBjaGVjayBiZWNhdXNlIHN1Y2ggYSBjb29r
aWUgaXMgbmV2ZXIgdmFsaWQuCi0gICAgICAgIGlmICghW1tjb29raWUgbmFtZV0gbGVuZ3RoXSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChbY29va2llIGlzSFRUUE9ubHld
KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgW2ZpbHRlcmVkQ29va2llcy5nZXQo
KSBhZGRPYmplY3Q6Y29va2llXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmlsdGVyZWRDb29raWVz
OwotfQotCi0jaWYgSEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCi0KLXN0YXRp
YyBOU0FycmF5ICphcHBseVBhcnRpdGlvblRvQ29va2llcyhOU1N0cmluZyAqcGFydGl0aW9uLCBO
U0FycmF5ICpjb29raWVzKQotewotICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nl
c3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKLQotICAgIC8vIEZJWE1FIDI0NzQ3
NzM5OiBDRk5ldHdvcmsgc2hvdWxkIGV4cG9zZSB0aGlzIGtleSBhcyBTUEkKLSAgICBzdGF0aWMg
TlNTdHJpbmcgKiBjb25zdCBwYXJ0aXRpb25LZXkgPSBAIlN0b3JhZ2VQYXJ0aXRpb24iOwotCi0g
ICAgTlNNdXRhYmxlQXJyYXkgKnBhcnRpdGlvbmVkQ29va2llcyA9IFtOU011dGFibGVBcnJheSBh
cnJheVdpdGhDYXBhY2l0eTpjb29raWVzLmNvdW50XTsKLSAgICBmb3IgKE5TSFRUUENvb2tpZSAq
Y29va2llIGluIGNvb2tpZXMpIHsKLSAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25h
cnk+IHByb3BlcnRpZXMgPSBhZG9wdE5TKFtjb29raWUucHJvcGVydGllcyBtdXRhYmxlQ29weV0p
OwotICAgICAgICBbcHJvcGVydGllcyBzZXRPYmplY3Q6cGFydGl0aW9uIGZvcktleTpwYXJ0aXRp
b25LZXldOwotICAgICAgICBbcGFydGl0aW9uZWRDb29raWVzIGFkZE9iamVjdDpbTlNIVFRQQ29v
a2llIGNvb2tpZVdpdGhQcm9wZXJ0aWVzOnByb3BlcnRpZXMuZ2V0KCldXTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gcGFydGl0aW9uZWRDb29raWVzOwotfQotCi1zdGF0aWMgYm9vbCBjb29raWVzQXJl
QmxvY2tlZEZvclVSTChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0
IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwpCi17Ci0gICAgcmV0dXJuIHNlc3Npb24u
c2hvdWxkQmxvY2tDb29raWVzKGZpcnN0UGFydHksIHVybCk7Ci19Ci0KLXN0YXRpYyBOU0FycmF5
ICpjb29raWVzSW5QYXJ0aXRpb25Gb3JVUkwoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBz
ZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNp
dGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwg
c3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlEKQotewotICAgIEFTU0VSVChoYXNQcm9jZXNz
UHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKLSAgICBT
dHJpbmcgcGFydGl0aW9uID0gc2Vzc2lvbi5jb29raWVTdG9yYWdlUGFydGl0aW9uKGZpcnN0UGFy
dHksIHVybCwgZnJhbWVJRCwgcGFnZUlEKTsKLSAgICBpZiAocGFydGl0aW9uLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIC8vIEZJWE1FOiBTdG9wIGNyZWF0aW5nIGEgbmV3
IE5TSFRUUENvb2tpZVN0b3JhZ2Ugb2JqZWN0IGVhY2ggdGltZSB3ZSB3YW50IHRvIHF1ZXJ5IHRo
ZSBjb29raWUgamFyLgotICAgIC8vIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiBjb3VsZCBpbnN0ZWFk
IGtlZXAgYSBOU0hUVFBDb29raWVTdG9yYWdlIG9iamVjdCBmb3IgdXMuCi0gICAgUmV0YWluUHRy
PE5TSFRUUENvb2tpZVN0b3JhZ2U+IGNvb2tpZVN0b3JhZ2U7Ci0gICAgaWYgKGF1dG8gc3RvcmFn
ZSA9IHNlc3Npb24uY29va2llU3RvcmFnZSgpKQotICAgICAgICBjb29raWVTdG9yYWdlID0gYWRv
cHROUyhbW05TSFRUUENvb2tpZVN0b3JhZ2UgYWxsb2NdIF9pbml0V2l0aENGSFRUUENvb2tpZVN0
b3JhZ2U6c3RvcmFnZS5nZXQoKV0pOwotICAgIGVsc2UKLSAgICAgICAgY29va2llU3RvcmFnZSA9
IFtOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXTsKLSAgICByZXR1
cm4gY29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLmdldCgpLCB1cmwsIGZpcnN0UGFydHksIHNh
bWVTaXRlSW5mbywgcGFydGl0aW9uKTsKLX0KLQotI2VuZGlmIC8vIEhBVkUoQ0ZORVRXT1JLX1NU
T1JBR0VfUEFSVElUSU9OSU5HKQotICAgIAotc3RhdGljIE5TQXJyYXkgKmNvb2tpZXNGb3JVUkwo
Y29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFy
dHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3Rk
OjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFn
ZUlEKQotewotI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQotICAgIGlm
IChjb29raWVzQXJlQmxvY2tlZEZvclVSTChzZXNzaW9uLCBmaXJzdFBhcnR5LCB1cmwpKQotICAg
ICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIGlmIChOU0FycmF5ICpjb29raWVzID0gY29va2ll
c0luUGFydGl0aW9uRm9yVVJMKHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJs
LCBmcmFtZUlELCBwYWdlSUQpKQotICAgICAgICByZXR1cm4gY29va2llczsKLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKGZyYW1lSUQpOwotICAgIFVOVVNFRF9QQVJBTShwYWdlSUQpOwotI2VuZGlm
Ci0gICAgcmV0dXJuIGh0dHBDb29raWVzRm9yVVJMKHNlc3Npb24uY29va2llU3RvcmFnZSgpLmdl
dCgpLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCk7Ci19Ci0KLWVudW0gSW5jbHVkZUhU
VFBPbmx5T3JOb3QgeyBEb05vdEluY2x1ZGVIVFRQT25seSwgSW5jbHVkZUhUVFBPbmx5IH07Ci1z
dGF0aWMgc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29va2llc0ZvclNlc3Npb24oY29uc3QgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0
IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25h
bDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNs
dWRlSFRUUE9ubHlPck5vdCBpbmNsdWRlSFRUUE9ubHksIEluY2x1ZGVTZWN1cmVDb29raWVzIGlu
Y2x1ZGVTZWN1cmVDb29raWVzKQotewotICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFBy
b2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKLQotICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKLQotICAgIE5TQXJyYXkgKmNvb2tpZXMgPSBjb29raWVzRm9yVVJM
KHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQp
OwotICAgIGlmICghW2Nvb2tpZXMgY291bnRdKQotICAgICAgICByZXR1cm4geyBTdHJpbmcoKSwg
ZmFsc2UgfTsgLy8gUmV0dXJuIGEgbnVsbCBzdHJpbmcsIG5vdCBhbiBlbXB0eSBvbmUgdGhhdCBT
dHJpbmdCdWlsZGVyIHdvdWxkIGNyZWF0ZSBiZWxvdy4KLQotICAgIFN0cmluZ0J1aWxkZXIgY29v
a2llc0J1aWxkZXI7Ci0gICAgYm9vbCBkaWRBY2Nlc3NTZWN1cmVDb29raWVzID0gZmFsc2U7Ci0g
ICAgZm9yIChOU0hUVFBDb29raWUgKmNvb2tpZSBpbiBjb29raWVzKSB7Ci0gICAgICAgIGlmICgh
W1tjb29raWUgbmFtZV0gbGVuZ3RoXSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IGlmICghaW5jbHVkZUhUVFBPbmx5ICYmIFtjb29raWUgaXNIVFRQT25seV0pCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBpZiAoW2Nvb2tpZSBpc1NlY3VyZV0pIHsKLSAgICAgICAg
ICAgIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMgPSB0cnVlOwotICAgICAgICAgICAgaWYgKGluY2x1
ZGVTZWN1cmVDb29raWVzID09IEluY2x1ZGVTZWN1cmVDb29raWVzOjpObykKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghY29va2llc0J1aWxkZXIu
aXNFbXB0eSgpKQotICAgICAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiOyAi
KTsKLQotICAgICAgICBjb29raWVzQnVpbGRlci5hcHBlbmQoW2Nvb2tpZSBuYW1lXSk7Ci0gICAg
ICAgIGNvb2tpZXNCdWlsZGVyLmFwcGVuZCgnPScpOwotICAgICAgICBjb29raWVzQnVpbGRlci5h
cHBlbmQoW2Nvb2tpZSB2YWx1ZV0pOwotICAgIH0KLSAgICByZXR1cm4geyBjb29raWVzQnVpbGRl
ci50b1N0cmluZygpLCBkaWRBY2Nlc3NTZWN1cmVDb29raWVzIH07Ci0KLSAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiB7IFN0cmluZygpLCBmYWxzZSB9OwotfQotCi1z
dGF0aWMgdm9pZCBkZWxldGVBbGxIVFRQQ29va2llcyhDRkhUVFBDb29raWVTdG9yYWdlUmVmIGNv
b2tpZVN0b3JhZ2UpCi17Ci0gICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1By
aXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOwotCi0gICAgaWYgKCFjb29raWVTdG9yYWdl
KSB7Ci0gICAgICAgIE5TSFRUUENvb2tpZVN0b3JhZ2UgKmNvb2tpZVN0b3JhZ2UgPSBbTlNIVFRQ
Q29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV07Ci0gICAgICAgIE5TQXJyYXkg
KmNvb2tpZXMgPSBbY29va2llU3RvcmFnZSBjb29raWVzXTsKLSAgICAgICAgaWYgKCFjb29raWVz
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGZvciAoTlNIVFRQQ29va2llICpjb29r
aWUgaW4gY29va2llcykKLSAgICAgICAgICAgIFtjb29raWVTdG9yYWdlIGRlbGV0ZUNvb2tpZTpj
b29raWVdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ0ZIVFRQQ29va2llU3RvcmFn
ZURlbGV0ZUFsbENvb2tpZXMoY29va2llU3RvcmFnZSk7Ci19Ci0KLXN0ZDo6cGFpcjxTdHJpbmcs
IGJvb2w+IGNvb2tpZXNGb3JET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9u
LCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZv
LCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpv
cHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2Vj
dXJlQ29va2llcykKLXsKLSAgICByZXR1cm4gY29va2llc0ZvclNlc3Npb24oc2Vzc2lvbiwgZmly
c3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgRG9Ob3RJbmNsdWRl
SFRUUE9ubHksIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKLX0KLQotc3RkOjpwYWlyPFN0cmluZywg
Ym9vbD4gY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5m
byYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4g
ZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29v
a2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykKLXsKLSAgICByZXR1cm4gY29va2llc0ZvclNlc3Np
b24oc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJ
RCwgSW5jbHVkZUhUVFBPbmx5LCBpbmNsdWRlU2VjdXJlQ29va2llcyk7Ci19Ci0KLXN0ZDo6cGFp
cjxTdHJpbmcsIGJvb2w+IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgQ29va2llUmVxdWVzdEhlYWRlckZpZWxk
UHJveHkmIGhlYWRlckZpZWxkUHJveHkpCi17Ci0gICAgcmV0dXJuIGNvb2tpZXNGb3JTZXNzaW9u
KHNlc3Npb24sIGhlYWRlckZpZWxkUHJveHkuZmlyc3RQYXJ0eSwgaGVhZGVyRmllbGRQcm94eS5z
YW1lU2l0ZUluZm8sIGhlYWRlckZpZWxkUHJveHkudXJsLCBoZWFkZXJGaWVsZFByb3h5LmZyYW1l
SUQsIGhlYWRlckZpZWxkUHJveHkucGFnZUlELCBJbmNsdWRlSFRUUE9ubHksIGhlYWRlckZpZWxk
UHJveHkuaW5jbHVkZVNlY3VyZUNvb2tpZXMpOwotfQotCi12b2lkIHNldENvb2tpZXNGcm9tRE9N
KGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBh
cnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0
ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBh
Z2VJRCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHIpCi17Ci0gICAgQVNTRVJUKGhhc1Byb2Nlc3NQ
cml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOwotCi0gICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2
MzI4ODM+IE9uIDEwLjUsIE5TSFRUUENvb2tpZVN0b3JhZ2Ugd291bGQgc3RvcmUgYW4gZW1wdHkg
Y29va2llLAotICAgIC8vIHdoaWNoIHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIuCi0gICAg
aWYgKGNvb2tpZVN0ci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIDxodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTMxPiwgPHJkYXI6Ly80NDA5MDM0
PgotICAgIC8vIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHMgZG9lc24ndCBwYXJzZSBj
b29raWVzIHdpdGhvdXQgYSB2YWx1ZQotICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBjb29raWVT
dHIuY29udGFpbnMoJz0nKSA/IGNvb2tpZVN0ciA6IGNvb2tpZVN0ciArICI9IjsKLQotICAgIE5T
VVJMICpjb29raWVVUkwgPSB1cmw7Ci0gICAgTlNEaWN0aW9uYXJ5ICpoZWFkZXJGaWVsZHMgPSBb
TlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0OmNvb2tpZVN0cmluZyBmb3JLZXk6QCJT
ZXQtQ29va2llIl07Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgTlNBcnJheSAqdW5maWx0ZXJl
ZENvb2tpZXMgPSBbTlNIVFRQQ29va2llIF9wYXJzZWRDb29raWVzV2l0aFJlc3BvbnNlSGVhZGVy
RmllbGRzOmhlYWRlckZpZWxkcyBmb3JVUkw6Y29va2llVVJMXTsKLSNlbHNlCi0gICAgTlNBcnJh
eSAqdW5maWx0ZXJlZENvb2tpZXMgPSBbTlNIVFRQQ29va2llIGNvb2tpZXNXaXRoUmVzcG9uc2VI
ZWFkZXJGaWVsZHM6aGVhZGVyRmllbGRzIGZvclVSTDpjb29raWVVUkxdOwotI2VuZGlmCi0KLSAg
ICBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyZWRDb29raWVzID0gZmlsdGVyQ29va2llcyh1bmZp
bHRlcmVkQ29va2llcyk7Ci0gICAgQVNTRVJUKFtmaWx0ZXJlZENvb2tpZXMuZ2V0KCkgY291bnRd
IDw9IDEpOwotCi0jaWYgSEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCi0gICAg
aWYgKHNlc3Npb24uc2hvdWxkQmxvY2tDb29raWVzKGZpcnN0UGFydHksIHVybCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFN0cmluZyBwYXJ0aXRpb24gPSBzZXNzaW9uLmNvb2tpZVN0b3JhZ2VQ
YXJ0aXRpb24oZmlyc3RQYXJ0eSwgdXJsLCBmcmFtZUlELCBwYWdlSUQpOwotICAgIGlmICghcGFy
dGl0aW9uLmlzRW1wdHkoKSkKLSAgICAgICAgZmlsdGVyZWRDb29raWVzID0gYXBwbHlQYXJ0aXRp
b25Ub0Nvb2tpZXMocGFydGl0aW9uLCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCkpOwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7Ci0jZW5k
aWYKLQotICAgIHNldEhUVFBDb29raWVzRm9yVVJMKHNlc3Npb24uY29va2llU3RvcmFnZSgpLmdl
dCgpLCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNvb2tpZVVSTCwgZmlyc3RQYXJ0eSwgc2FtZVNp
dGVJbmZvKTsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci19Ci0KLXN0YXRpYyBO
U0hUVFBDb29raWVBY2NlcHRQb2xpY3kgaHR0cENvb2tpZUFjY2VwdFBvbGljeShDRkhUVFBDb29r
aWVTdG9yYWdlUmVmIGNvb2tpZVN0b3JhZ2UpCi17Ci0gICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2
aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOwotCi0gICAgaWYg
KCFjb29raWVTdG9yYWdlKQotICAgICAgICByZXR1cm4gW1tOU0hUVFBDb29raWVTdG9yYWdlIHNo
YXJlZEhUVFBDb29raWVTdG9yYWdlXSBjb29raWVBY2NlcHRQb2xpY3ldOwotCi0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeT4oQ0ZIVFRQQ29va2llU3RvcmFn
ZUdldENvb2tpZUFjY2VwdFBvbGljeShjb29raWVTdG9yYWdlKSk7Ci19Ci0KLWJvb2wgY29va2ll
c0VuYWJsZWQoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uKQotewotICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIE5TSFRUUENvb2tpZUFjY2VwdFBvbGlj
eSBjb29raWVBY2NlcHRQb2xpY3kgPSBodHRwQ29va2llQWNjZXB0UG9saWN5KHNlc3Npb24uY29v
a2llU3RvcmFnZSgpLmdldCgpKTsKLSAgICByZXR1cm4gY29va2llQWNjZXB0UG9saWN5ID09IE5T
SFRUUENvb2tpZUFjY2VwdFBvbGljeUFsd2F5cyB8fCBjb29raWVBY2NlcHRQb2xpY3kgPT0gTlNI
VFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW4gfHwgY29va2ll
QWNjZXB0UG9saWN5ID09IE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeUV4Y2x1c2l2ZWx5RnJvbU1h
aW5Eb2N1bWVudERvbWFpbjsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRl
SW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRf
dD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBWZWN0b3I8Q29va2ll
PiYgcmF3Q29va2llcykKLXsKLSAgICByYXdDb29raWVzLmNsZWFyKCk7Ci0gICAgQkVHSU5fQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgTlNBcnJheSAqY29va2llcyA9IGNvb2tpZXNGb3JV
Ukwoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJ
RCk7Ci0gICAgTlNVSW50ZWdlciBjb3VudCA9IFtjb29raWVzIGNvdW50XTsKLSAgICByYXdDb29r
aWVzLnJlc2VydmVDYXBhY2l0eShjb3VudCk7Ci0gICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgewotICAgICAgICBOU0hUVFBDb29raWUgKmNvb2tpZSA9IChOU0hUVFBD
b29raWUgKilbY29va2llcyBvYmplY3RBdEluZGV4OmldOwotICAgICAgICByYXdDb29raWVzLnVu
Y2hlY2tlZEFwcGVuZCh7IGNvb2tpZSB9KTsKLSAgICB9Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIGRlbGV0ZUNvb2tpZShjb25z
dCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIGNvb2tpZU5hbWUpCi17Ci0gICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJv
Y2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOwotCi0gICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwotCi0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+
IGNvb2tpZVN0b3JhZ2UgPSBzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKTsKLSAgICBOU0FycmF5ICpj
b29raWVzID0gaHR0cENvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5nZXQoKSwgbmlsLCBzdGQ6
Om51bGxvcHQsIHVybCk7Ci0KLSAgICBOU1N0cmluZyAqY29va2llTmFtZVN0cmluZyA9IGNvb2tp
ZU5hbWU7Ci0KLSAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW2Nvb2tpZXMgY291bnRdOwotICAgIGZv
ciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgTlNIVFRQQ29v
a2llICpjb29raWUgPSAoTlNIVFRQQ29va2llICopW2Nvb2tpZXMgb2JqZWN0QXRJbmRleDppXTsK
LSAgICAgICAgaWYgKFtbY29va2llIG5hbWVdIGlzRXF1YWxUb1N0cmluZzpjb29raWVOYW1lU3Ry
aW5nXSkKLSAgICAgICAgICAgIGRlbGV0ZUhUVFBDb29raWUoY29va2llU3RvcmFnZS5nZXQoKSwg
Y29va2llKTsKLSAgICB9Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotfQotCi12
b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYg
c2Vzc2lvbiwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCi17Ci0gICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwotCi0gICAgTlNBcnJheSAqY29va2llcyA9IGh0dHBDb29raWVzKHNl
c3Npb24uY29va2llU3RvcmFnZSgpLmdldCgpKTsKLSAgICAKLSAgICBmb3IgKE5TSFRUUENvb2tp
ZSogY29va2llIGluIGNvb2tpZXMpCi0gICAgICAgIGhvc3RuYW1lcy5hZGQoW2Nvb2tpZSBkb21h
aW5dKTsKLSAgICAKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotfQotCi12b2lkIGRl
bGV0ZUFsbENvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uKQotewot
ICAgIGRlbGV0ZUFsbEhUVFBDb29raWVzKHNlc3Npb24uY29va2llU3RvcmFnZSgpLmdldCgpKTsK
LX0KLQotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKLXsKLSAg
ICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NS
YXdDb29raWVzKSk7Ci0KLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBS
ZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IHNlc3Npb24u
Y29va2llU3RvcmFnZSgpOwotICAgIE5TQXJyYXkgKmNvb2tpZXMgPSBodHRwQ29va2llcyhjb29r
aWVTdG9yYWdlLmdldCgpKTsKLSAgICBpZiAoIWNvb2tpZXMpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmV0YWluUHRyPE5TSFRUUENvb2tpZT4+PiBjb29r
aWVzQnlEb21haW47Ci0gICAgZm9yIChOU0hUVFBDb29raWUqIGNvb2tpZSBpbiBjb29raWVzKSB7
Ci0gICAgICAgIGF1dG8mIGNvb2tpZXMgPSBjb29raWVzQnlEb21haW4uYWRkKGNvb2tpZS5kb21h
aW4sIFZlY3RvcjxSZXRhaW5QdHI8TlNIVFRQQ29va2llPj4oKSkuaXRlcmF0b3ItPnZhbHVlOwot
ICAgICAgICBjb29raWVzLmFwcGVuZChjb29raWUpOwotICAgIH0KLQotICAgIGZvciAoY29uc3Qg
YXV0byYgaG9zdG5hbWUgOiBob3N0bmFtZXMpIHsKLSAgICAgICAgYXV0byBpdCA9IGNvb2tpZXNC
eURvbWFpbi5maW5kKGhvc3RuYW1lKTsKLSAgICAgICAgaWYgKGl0ID09IGNvb2tpZXNCeURvbWFp
bi5lbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZvciAoYXV0byYgY29v
a2llIDogaXQtPnZhbHVlKQotICAgICAgICAgICAgZGVsZXRlSFRUUENvb2tpZShjb29raWVTdG9y
YWdlLmdldCgpLCBjb29raWUuZ2V0KCkpOwotICAgIH0KLQotICAgIFtzZXNzaW9uLm5zQ29va2ll
U3RvcmFnZSgpIF9zYXZlQ29va2llc107Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwotfQotCi12b2lkIGRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKGNvbnN0IE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgV2FsbFRpbWUgdGltZVBvaW50KQotewotICAgIEFTU0VS
VChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tp
ZXMpKTsKLQotICAgIGlmICghW05TSFRUUENvb2tpZVN0b3JhZ2UgaW5zdGFuY2VzUmVzcG9uZFRv
U2VsZWN0b3I6QHNlbGVjdG9yKHJlbW92ZUNvb2tpZXNTaW5jZURhdGU6KV0pCi0gICAgICAgIHJl
dHVybjsKLQotICAgIE5TVGltZUludGVydmFsIHRpbWVJbnRlcnZhbCA9IHRpbWVQb2ludC5zZWNv
bmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKTsKLSAgICBOU0RhdGUgKmRhdGUgPSBbTlNEYXRlIGRh
dGVXaXRoVGltZUludGVydmFsU2luY2UxOTcwOnRpbWVJbnRlcnZhbF07Ci0KLSAgICBhdXRvICpz
dG9yYWdlID0gc2Vzc2lvbi5uc0Nvb2tpZVN0b3JhZ2UoKTsKLQotICAgIFtzdG9yYWdlIHJlbW92
ZUNvb2tpZXNTaW5jZURhdGU6ZGF0ZV07Ci0gICAgW3N0b3JhZ2UgX3NhdmVDb29raWVzXTsKLX0K
LQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvV2Vi
Q29yZVJlc291cmNlSGFuZGxlQXNPcGVyYXRpb25RdWV1ZURlbGVnYXRlLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvV2ViQ29yZVJlc291cmNlSGFuZGxlQXNPcGVyYXRp
b25RdWV1ZURlbGVnYXRlLm1tCmluZGV4IDg4NzYzMTAwYWQ0ZTY2ZDk0MTIyNjhhN2E5MWMzOWZk
Mzk5MDI2MzMuLmIzZTkwN2ZmZGRlMjg1ZjhjODAzZDY3MWEyN2ZmNzRhMDkyMWMyNmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1dlYkNvcmVSZXNvdXJj
ZUhhbmRsZUFzT3BlcmF0aW9uUXVldWVEZWxlZ2F0ZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlUmVzb3VyY2VIYW5kbGVBc09wZXJhdGlvblF1ZXVl
RGVsZWdhdGUubW0KQEAgLTI5LDYgKzI5LDcgQEAKICNpbXBvcnQgIkF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlLmgiCiAjaW1wb3J0ICJBdXRoZW50aWNhdGlvbk1hYy5oIgogI2ltcG9ydCAiTG9nZ2lu
Zy5oIgorI2ltcG9ydCAiTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbXBvcnQgIlJlc291cmNlSGFu
ZGxlLmgiCiAjaW1wb3J0ICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgogI2ltcG9ydCAiUmVzb3Vy
Y2VSZXF1ZXN0LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvQ29va2llSmFyU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvQ29va2llSmFyU291cC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVl
ZTg3NjFmNjViMTVhYjA5YTI0ZWRiOTBlZGFhODUyMzNkNTMxYzcuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjYwICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4IFhhbiBMb3BleiA8eGFuQGdub21lLm9yZz4K
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4KLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKFNPVVApCi0KLSNpbmNs
dWRlICJDb29raWUuaCIKLSNpbmNsdWRlICJDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eS5o
IgotI2luY2x1ZGUgIkNvb2tpZXNTdHJhdGVneS5oIgotI2luY2x1ZGUgIkdVbmlxdWVQdHJTb3Vw
LmgiCi0jaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCi0jaW5jbHVkZSAiTmV0d29y
a2luZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvb2tpZUphci5oIgotI2luY2x1ZGUg
IlNvdXBOZXR3b3JrU2Vzc2lvbi5oIgotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgPHd0Zi9E
YXRlTWF0aC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBi
b29sIGh0dHBPbmx5Q29va2llRXhpc3RzKGNvbnN0IEdTTGlzdCogY29va2llcywgY29uc3QgZ2No
YXIqIG5hbWUsIGNvbnN0IGdjaGFyKiBwYXRoKQotewotICAgIGZvciAoY29uc3QgR1NMaXN0KiBp
dGVyID0gY29va2llczsgaXRlcjsgaXRlciA9IGdfc2xpc3RfbmV4dChpdGVyKSkgewotICAgICAg
ICBTb3VwQ29va2llKiBjb29raWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlci0+ZGF0
YSk7Ci0gICAgICAgIGlmICghc3RyY21wKHNvdXBfY29va2llX2dldF9uYW1lKGNvb2tpZSksIG5h
bWUpCi0gICAgICAgICAgICAmJiAhZ19zdHJjbXAwKHNvdXBfY29va2llX2dldF9wYXRoKGNvb2tp
ZSksIHBhdGgpKSB7Ci0gICAgICAgICAgICBpZiAoc291cF9jb29raWVfZ2V0X2h0dHBfb25seShj
b29raWUpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIHNldENvb2tp
ZXNGcm9tRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJM
JiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVybCwgc3RkOjpv
cHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlE
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsKLSAg
ICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKLSAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IG9yaWdpbiA9
IHVybC5jcmVhdGVTb3VwVVJJKCk7Ci0gICAgaWYgKCFvcmlnaW4pCi0gICAgICAgIHJldHVybjsK
LQotICAgIEdVbmlxdWVQdHI8U291cFVSST4gZmlyc3RQYXJ0eVVSSSA9IGZpcnN0UGFydHkuY3Jl
YXRlU291cFVSSSgpOwotICAgIGlmICghZmlyc3RQYXJ0eVVSSSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gR2V0IGV4aXN0aW5nIGNvb2tpZXMgZm9yIHRoaXMgb3JpZ2luLgotICAgIFNvdXBD
b29raWVKYXIqIGphciA9IHNlc3Npb24uY29va2llU3RvcmFnZSgpOwotICAgIEdTTGlzdCogZXhp
c3RpbmdDb29raWVzID0gc291cF9jb29raWVfamFyX2dldF9jb29raWVfbGlzdChqYXIsIG9yaWdp
bi5nZXQoKSwgVFJVRSk7Ci0KLSAgICBmb3IgKGF1dG8mIGNvb2tpZVN0cmluZyA6IHZhbHVlLnNw
bGl0KCdcbicpKSB7Ci0gICAgICAgIEdVbmlxdWVQdHI8U291cENvb2tpZT4gY29va2llKHNvdXBf
Y29va2llX3BhcnNlKGNvb2tpZVN0cmluZy51dGY4KCkuZGF0YSgpLCBvcmlnaW4uZ2V0KCkpKTsK
LSAgICAgICAgaWYgKCFjb29raWUpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAv
LyBNYWtlIHN1cmUgdGhlIGNvb2tpZSBpcyBub3QgaHR0cE9ubHkgc2luY2Ugc3VjaCBjb29raWVz
IHNob3VsZCBub3QgYmUgc2V0IGZyb20gSmF2YVNjcmlwdC4KLSAgICAgICAgaWYgKHNvdXBfY29v
a2llX2dldF9odHRwX29ubHkoY29va2llLmdldCgpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkbyBub3Qgb3ZlcndyaXRlIGh0dHBPbmx5IGNvb2tp
ZXMgZnJvbSBKYXZhU2NyaXB0LgotICAgICAgICBpZiAoaHR0cE9ubHlDb29raWVFeGlzdHMoZXhp
c3RpbmdDb29raWVzLCBzb3VwX2Nvb2tpZV9nZXRfbmFtZShjb29raWUuZ2V0KCkpLCBzb3VwX2Nv
b2tpZV9nZXRfcGF0aChjb29raWUuZ2V0KCkpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIHNvdXBfY29va2llX2phcl9hZGRfY29va2llX3dpdGhfZmlyc3RfcGFydHkoamFyLCBm
aXJzdFBhcnR5VVJJLmdldCgpLCBjb29raWUucmVsZWFzZSgpKTsKLSAgICB9Ci0KLSAgICBzb3Vw
X2Nvb2tpZXNfZnJlZShleGlzdGluZ0Nvb2tpZXMpOwotfQotCi1zdGF0aWMgc3RkOjpwYWlyPFN0
cmluZywgYm9vbD4gY29va2llc0ZvclNlc3Npb24oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9u
JiBzZXNzaW9uLCBjb25zdCBVUkwmIHVybCwgYm9vbCBmb3JIVFRQSGVhZGVyLCBJbmNsdWRlU2Vj
dXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykKLXsKLSAgICBHVW5pcXVlUHRyPFNvdXBV
Ukk+IHVyaSA9IHVybC5jcmVhdGVTb3VwVVJJKCk7Ci0gICAgaWYgKCF1cmkpCi0gICAgICAgIHJl
dHVybiB7IHsgfSwgZmFsc2UgfTsKLQotICAgIEdTTGlzdCogY29va2llcyA9IHNvdXBfY29va2ll
X2phcl9nZXRfY29va2llX2xpc3Qoc2Vzc2lvbi5jb29raWVTdG9yYWdlKCksIHVyaS5nZXQoKSwg
Zm9ySFRUUEhlYWRlcik7Ci0gICAgYm9vbCBkaWRBY2Nlc3NTZWN1cmVDb29raWVzID0gZmFsc2U7
Ci0KLSAgICAvLyBsaWJzb3VwIHNob3VsZCBvbWl0IHNlY3VyZSBjb29raWVzIGl0c2VsZiBpZiB0
aGUgcHJvdG9jb2wgaXMgbm90IGh0dHBzLgotICAgIGlmICh1cmwucHJvdG9jb2xJcygiaHR0cHMi
KSkgewotICAgICAgICBHU0xpc3QqIGl0ZW0gPSBjb29raWVzOwotICAgICAgICB3aGlsZSAoaXRl
bSkgewotICAgICAgICAgICAgYXV0byBjb29raWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4o
aXRlbS0+ZGF0YSk7Ci0gICAgICAgICAgICBpZiAoc291cF9jb29raWVfZ2V0X3NlY3VyZShjb29r
aWUpKSB7Ci0gICAgICAgICAgICAgICAgZGlkQWNjZXNzU2VjdXJlQ29va2llcyA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgaWYgKGluY2x1ZGVTZWN1cmVDb29raWVzID09IEluY2x1ZGVTZWN1cmVD
b29raWVzOjpObykgewotICAgICAgICAgICAgICAgICAgICBHU0xpc3QqIG5leHQgPSBpdGVtLT5u
ZXh0OwotICAgICAgICAgICAgICAgICAgICBzb3VwX2Nvb2tpZV9mcmVlKHN0YXRpY19jYXN0PFNv
dXBDb29raWUqPihpdGVtLT5kYXRhKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvb2tpZXMgPSBn
X3NsaXN0X3JlbW92ZV9saW5rKGNvb2tpZXMsIGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBp
dGVtID0gbmV4dDsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaXRlbSA9IGl0ZW0tPm5leHQ7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWNvb2tpZXMpCi0gICAgICAgIHJldHVybiB7IHsgfSwg
ZmFsc2UgfTsKLQotICAgIEdVbmlxdWVQdHI8Y2hhcj4gY29va2llSGVhZGVyKHNvdXBfY29va2ll
c190b19jb29raWVfaGVhZGVyKGNvb2tpZXMpKTsKLSAgICBzb3VwX2Nvb2tpZXNfZnJlZShjb29r
aWVzKTsKLQotICAgIHJldHVybiB7IFN0cmluZzo6ZnJvbVVURjgoY29va2llSGVhZGVyLmdldCgp
KSwgZGlkQWNjZXNzU2VjdXJlQ29va2llcyB9OwotfQotCi1zdGQ6OnBhaXI8U3RyaW5nLCBib29s
PiBjb29raWVzRm9yRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29u
c3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVybCwg
c3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4g
cGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykKLXsKLSAg
ICBVTlVTRURfUEFSQU0oZmlyc3RQYXJ0eSk7Ci0gICAgVU5VU0VEX1BBUkFNKGZyYW1lSUQpOwot
ICAgIFVOVVNFRF9QQVJBTShwYWdlSUQpOwotICAgIHJldHVybiBjb29raWVzRm9yU2Vzc2lvbihz
ZXNzaW9uLCB1cmwsIGZhbHNlLCBpbmNsdWRlU2VjdXJlQ29va2llcyk7Ci19Ci0KLXN0ZDo6cGFp
cjxTdHJpbmcsIGJvb2w+IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBT
YW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJh
bWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2ll
cyBpbmNsdWRlU2VjdXJlQ29va2llcykKLXsKLSAgICBVTlVTRURfUEFSQU0oZmlyc3RQYXJ0eSk7
Ci0gICAgVU5VU0VEX1BBUkFNKGZyYW1lSUQpOwotICAgIFVOVVNFRF9QQVJBTShwYWdlSUQpOwot
ICAgIC8vIFNlY3VyZSBjb29raWVzIHdpbGwgc3RpbGwgb25seSBiZSBpbmNsdWRlZCBpZiB1cmwn
cyBwcm90b2NvbCBpcyBodHRwcy4KLSAgICByZXR1cm4gY29va2llc0ZvclNlc3Npb24oc2Vzc2lv
biwgdXJsLCB0cnVlLCBpbmNsdWRlU2VjdXJlQ29va2llcyk7Ci19Ci0KLXN0ZDo6cGFpcjxTdHJp
bmcsIGJvb2w+IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgQ29va2llUmVxdWVzdEhlYWRlckZpZWxkUHJveHkm
IGhlYWRlckZpZWxkUHJveHkpCi17Ci0gICAgcmV0dXJuIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKHNlc3Npb24sIGhlYWRlckZpZWxkUHJveHkuZmlyc3RQYXJ0eSwgaGVhZGVyRmllbGRQ
cm94eS5zYW1lU2l0ZUluZm8sIGhlYWRlckZpZWxkUHJveHkudXJsLCBoZWFkZXJGaWVsZFByb3h5
LmZyYW1lSUQsIGhlYWRlckZpZWxkUHJveHkucGFnZUlELCBoZWFkZXJGaWVsZFByb3h5LmluY2x1
ZGVTZWN1cmVDb29raWVzKTsKLX0KLQotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIHNlc3Npb24pCi17Ci0gICAgYXV0byBwb2xpY3kgPSBzb3VwX2Nvb2tp
ZV9qYXJfZ2V0X2FjY2VwdF9wb2xpY3koc2Vzc2lvbi5jb29raWVTdG9yYWdlKCkpOwotICAgIHJl
dHVybiBwb2xpY3kgPT0gU09VUF9DT09LSUVfSkFSX0FDQ0VQVF9BTFdBWVMgfHwgcG9saWN5ID09
IFNPVVBfQ09PS0lFX0pBUl9BQ0NFUFRfTk9fVEhJUkRfUEFSVFk7Ci19Ci0KLWJvb2wgZ2V0UmF3
Q29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYg
Zmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0
aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwg
VmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZpcnN0UGFy
dHkpOwotICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsKLSAgICBVTlVTRURfUEFSQU0ocGFnZUlE
KTsKLSAgICByYXdDb29raWVzLmNsZWFyKCk7Ci0gICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiB1cmkg
PSB1cmwuY3JlYXRlU291cFVSSSgpOwotICAgIGlmICghdXJpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBHVW5pcXVlUHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nvb2tpZV9qYXJfZ2V0
X2Nvb2tpZV9saXN0KHNlc3Npb24uY29va2llU3RvcmFnZSgpLCB1cmkuZ2V0KCksIFRSVUUpKTsK
LSAgICBpZiAoIWNvb2tpZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAoR1NM
aXN0KiBpdGVyID0gY29va2llcy5nZXQoKTsgaXRlcjsgaXRlciA9IGdfc2xpc3RfbmV4dChpdGVy
KSkgewotICAgICAgICBTb3VwQ29va2llKiBzb3VwQ29va2llID0gc3RhdGljX2Nhc3Q8U291cENv
b2tpZSo+KGl0ZXItPmRhdGEpOwotICAgICAgICBDb29raWUgY29va2llOwotICAgICAgICBjb29r
aWUubmFtZSA9IFN0cmluZzo6ZnJvbVVURjgoc291cENvb2tpZS0+bmFtZSk7Ci0gICAgICAgIGNv
b2tpZS52YWx1ZSA9IFN0cmluZzo6ZnJvbVVURjgoc291cENvb2tpZS0+dmFsdWUpOwotICAgICAg
ICBjb29raWUuZG9tYWluID0gU3RyaW5nOjpmcm9tVVRGOChzb3VwQ29va2llLT5kb21haW4pOwot
ICAgICAgICBjb29raWUucGF0aCA9IFN0cmluZzo6ZnJvbVVURjgoc291cENvb2tpZS0+cGF0aCk7
Ci0gICAgICAgIGNvb2tpZS5jcmVhdGVkID0gMDsKLSAgICAgICAgY29va2llLmV4cGlyZXMgPSBz
b3VwQ29va2llLT5leHBpcmVzID8gc3RhdGljX2Nhc3Q8ZG91YmxlPihzb3VwX2RhdGVfdG9fdGlt
ZV90KHNvdXBDb29raWUtPmV4cGlyZXMpKSAqIDEwMDAgOiAwOwotICAgICAgICBjb29raWUuaHR0
cE9ubHkgPSBzb3VwQ29va2llLT5odHRwX29ubHk7Ci0gICAgICAgIGNvb2tpZS5zZWN1cmUgPSBz
b3VwQ29va2llLT5zZWN1cmU7Ci0gICAgICAgIGNvb2tpZS5zZXNzaW9uID0gIXNvdXBDb29raWUt
PmV4cGlyZXM7Ci0gICAgICAgIHJhd0Nvb2tpZXMuYXBwZW5kKFdURk1vdmUoY29va2llKSk7Ci0g
ICAgICAgIHNvdXBfY29va2llX2ZyZWUoc291cENvb2tpZSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lv
biYgc2Vzc2lvbiwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBH
VW5pcXVlUHRyPFNvdXBVUkk+IHVyaSA9IHVybC5jcmVhdGVTb3VwVVJJKCk7Ci0gICAgaWYgKCF1
cmkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNvdXBDb29raWVKYXIqIGphciA9IHNlc3Npb24u
Y29va2llU3RvcmFnZSgpOwotICAgIEdVbmlxdWVQdHI8R1NMaXN0PiBjb29raWVzKHNvdXBfY29v
a2llX2phcl9nZXRfY29va2llX2xpc3QoamFyLCB1cmkuZ2V0KCksIFRSVUUpKTsKLSAgICBpZiAo
IWNvb2tpZXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIENTdHJpbmcgY29va2llTmFtZSA9IG5h
bWUudXRmOCgpOwotICAgIGJvb2wgd2FzRGVsZXRlZCA9IGZhbHNlOwotICAgIGZvciAoR1NMaXN0
KiBpdGVyID0gY29va2llcy5nZXQoKTsgaXRlcjsgaXRlciA9IGdfc2xpc3RfbmV4dChpdGVyKSkg
ewotICAgICAgICBTb3VwQ29va2llKiBjb29raWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4o
aXRlci0+ZGF0YSk7Ci0gICAgICAgIGlmICghd2FzRGVsZXRlZCAmJiBjb29raWVOYW1lID09IGNv
b2tpZS0+bmFtZSkgewotICAgICAgICAgICAgc291cF9jb29raWVfamFyX2RlbGV0ZV9jb29raWUo
amFyLCBjb29raWUpOwotICAgICAgICAgICAgd2FzRGVsZXRlZCA9IHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgc291cF9jb29raWVfZnJlZShjb29raWUpOwotICAgIH0KLX0KLQotdm9pZCBnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24s
IEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQotewotICAgIEdVbmlxdWVQdHI8R1NMaXN0PiBj
b29raWVzKHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhzZXNzaW9uLmNvb2tpZVN0b3JhZ2Uo
KSkpOwotICAgIGZvciAoR1NMaXN0KiBpdGVtID0gY29va2llcy5nZXQoKTsgaXRlbTsgaXRlbSA9
IGdfc2xpc3RfbmV4dChpdGVtKSkgewotICAgICAgICBTb3VwQ29va2llKiBjb29raWUgPSBzdGF0
aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSk7Ci0gICAgICAgIGlmIChjb29raWUtPmRv
bWFpbikKLSAgICAgICAgICAgIGhvc3RuYW1lcy5hZGQoU3RyaW5nOjpmcm9tVVRGOChjb29raWUt
PmRvbWFpbikpOwotICAgICAgICBzb3VwX2Nvb2tpZV9mcmVlKGNvb2tpZSk7Ci0gICAgfQotfQot
Ci12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNz
aW9uJiBzZXNzaW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKQotewotICAgIFNv
dXBDb29raWVKYXIqIGNvb2tpZUphciA9IHNlc3Npb24uY29va2llU3RvcmFnZSgpOwotCi0gICAg
Zm9yIChjb25zdCBhdXRvJiBob3N0bmFtZSA6IGhvc3RuYW1lcykgewotICAgICAgICBDU3RyaW5n
IGhvc3ROYW1lU3RyaW5nID0gaG9zdG5hbWUudXRmOCgpOwotCi0gICAgICAgIEdVbmlxdWVQdHI8
R1NMaXN0PiBjb29raWVzKHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVKYXIpKTsK
LSAgICAgICAgZm9yIChHU0xpc3QqIGl0ZW0gPSBjb29raWVzLmdldCgpOyBpdGVtOyBpdGVtID0g
Z19zbGlzdF9uZXh0KGl0ZW0pKSB7Ci0gICAgICAgICAgICBTb3VwQ29va2llKiBjb29raWUgPSBz
dGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSk7Ci0gICAgICAgICAgICBpZiAoc291
cF9jb29raWVfZG9tYWluX21hdGNoZXMoY29va2llLCBob3N0TmFtZVN0cmluZy5kYXRhKCkpKQot
ICAgICAgICAgICAgICAgIHNvdXBfY29va2llX2phcl9kZWxldGVfY29va2llKGNvb2tpZUphciwg
Y29va2llKTsKLSAgICAgICAgICAgIHNvdXBfY29va2llX2ZyZWUoY29va2llKTsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotdm9pZCBkZWxldGVBbGxDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiYgc2Vzc2lvbikKLXsKLSAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBzZXNz
aW9uLmNvb2tpZVN0b3JhZ2UoKTsKLSAgICBHVW5pcXVlUHRyPEdTTGlzdD4gY29va2llcyhzb3Vw
X2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMoY29va2llSmFyKSk7Ci0gICAgZm9yIChHU0xpc3QqIGl0
ZW0gPSBjb29raWVzLmdldCgpOyBpdGVtOyBpdGVtID0gZ19zbGlzdF9uZXh0KGl0ZW0pKSB7Ci0g
ICAgICAgIFNvdXBDb29raWUqIGNvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVt
LT5kYXRhKTsKLSAgICAgICAgc291cF9jb29raWVfamFyX2RlbGV0ZV9jb29raWUoY29va2llSmFy
LCBjb29raWUpOwotICAgICAgICBzb3VwX2Nvb2tpZV9mcmVlKGNvb2tpZSk7Ci0gICAgfQotfQot
Ci12b2lkIGRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKGNvbnN0IE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiYgc2Vzc2lvbiwgV2FsbFRpbWUgdGltZXN0YW1wKQotewotICAgIC8vIEZJWE1FOiBB
ZGQgc3VwcG9ydCBmb3IgZGVsZXRpbmcgY29va2llcyBtb2RpZmllZCBzaW5jZSB0aGUgZ2l2ZW4g
dGltZXN0YW1wLiBJdCBzaG91bGQgcHJvYmFibHkgYmUgYWRkZWQgdG8gbGlic291cC4KLSAgICBp
ZiAodGltZXN0YW1wID09IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcygwKSkKLSAgICAgICAgZGVs
ZXRlQWxsQ29va2llcyhzZXNzaW9uKTsKLSAgICBlbHNlCi0gICAgICAgIGdfd2FybmluZygiRGVs
ZXRpbmcgY29va2llcyBtb2RpZmllZCBzaW5jZSBhIGdpdmVuIHRpbWUgc3BhbiBpcyBub3Qgc3Vw
cG9ydGVkIHlldCIpOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lv
blNvdXAuY3BwCmluZGV4IDVlM2MyNDVhM2M2YzYzNmI3ZTYyZDMzNjFjM2I3ZmYzZmM4MmQ2MDAu
LmIzZDcxYTRiNDBlNWRlZDA5YjY4MzIwMDhiZWYwMDYxZDFmZWQxNWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3JrU3RvcmFnZVNlc3Npb25T
b3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29y
a1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpZiBVU0UoU09VUCkK
IAogI2luY2x1ZGUgIkNvb2tpZS5oIgorI2luY2x1ZGUgIkNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFByb3h5LmgiCiAjaW5jbHVkZSAiR1VuaXF1ZVB0clNvdXAuaCIKICNpbmNsdWRlICJSZXNvdXJj
ZUhhbmRsZS5oIgogI2luY2x1ZGUgIlNvdXBOZXR3b3JrU2Vzc2lvbi5oIgpAQCAtMjkxLDYgKzI5
Miw2MiBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2F2ZUNyZWRlbnRpYWxUb1BlcnNp
c3RlbnRTdG9yYWdlKGNvbnN0IFByb3RlY3Rpb25TcAogI2VuZGlmCiB9CiAKK2Jvb2wgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uOjpjb29raWVzRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgYXV0byBwb2xp
Y3kgPSBzb3VwX2Nvb2tpZV9qYXJfZ2V0X2FjY2VwdF9wb2xpY3koY29va2llU3RvcmFnZSgpKTsK
KyAgICByZXR1cm4gcG9saWN5ID09IFNPVVBfQ09PS0lFX0pBUl9BQ0NFUFRfQUxXQVlTIHx8IHBv
bGljeSA9PSBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX05PX1RISVJEX1BBUlRZOworfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgaHR0cE9ubHlDb29raWVFeGlzdHMoY29uc3QgR1NMaXN0KiBjb29raWVz
LCBjb25zdCBnY2hhciogbmFtZSwgY29uc3QgZ2NoYXIqIHBhdGgpCit7CisgICAgZm9yIChjb25z
dCBHU0xpc3QqIGl0ZXIgPSBjb29raWVzOyBpdGVyOyBpdGVyID0gZ19zbGlzdF9uZXh0KGl0ZXIp
KSB7CisgICAgICAgIFNvdXBDb29raWUqIGNvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUq
PihpdGVyLT5kYXRhKTsKKyAgICAgICAgaWYgKCFzdHJjbXAoc291cF9jb29raWVfZ2V0X25hbWUo
Y29va2llKSwgbmFtZSkgCisgICAgICAgICAgICAmJiAhZ19zdHJjbXAwKHNvdXBfY29va2llX2dl
dF9wYXRoKGNvb2tpZSksIHBhdGgpKSB7CisgICAgICAgICAgICBpZiAoc291cF9jb29raWVfZ2V0
X2h0dHBfb25seShjb29raWUpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llc0Zyb21ET00oY29uc3QgVVJMJiBm
aXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRp
b25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBj
b25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsK
KyAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKKyAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IG9yaWdp
biA9IHVybC5jcmVhdGVTb3VwVVJJKCk7CisgICAgaWYgKCFvcmlnaW4pCisgICAgICAgIHJldHVy
bjsKKworICAgIEdVbmlxdWVQdHI8U291cFVSST4gZmlyc3RQYXJ0eVVSSSA9IGZpcnN0UGFydHku
Y3JlYXRlU291cFVSSSgpOworICAgIGlmICghZmlyc3RQYXJ0eVVSSSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gR2V0IGV4aXN0aW5nIGNvb2tpZXMgZm9yIHRoaXMgb3JpZ2luLgorICAgIFNv
dXBDb29raWVKYXIqIGphciA9IGNvb2tpZVN0b3JhZ2UoKTsKKyAgICBHU0xpc3QqIGV4aXN0aW5n
Q29va2llcyA9IHNvdXBfY29va2llX2phcl9nZXRfY29va2llX2xpc3QoamFyLCBvcmlnaW4uZ2V0
KCksIFRSVUUpOworCisgICAgZm9yIChhdXRvJiBjb29raWVTdHJpbmcgOiB2YWx1ZS5zcGxpdCgn
XG4nKSkgeworICAgICAgICBHVW5pcXVlUHRyPFNvdXBDb29raWU+IGNvb2tpZShzb3VwX2Nvb2tp
ZV9wYXJzZShjb29raWVTdHJpbmcudXRmOCgpLmRhdGEoKSwgb3JpZ2luLmdldCgpKSk7CisKKyAg
ICAgICAgaWYgKCFjb29raWUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBN
YWtlIHN1cmUgdGhlIGNvb2tpZSBpcyBub3QgaHR0cE9ubHkgc2luY2Ugc3VjaCBjb29raWVzIHNo
b3VsZCBub3QgYmUgc2V0IGZyb20gSmF2YVNjcmlwdC4KKyAgICAgICAgaWYgKHNvdXBfY29va2ll
X2dldF9odHRwX29ubHkoY29va2llLmdldCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkbyBub3Qgb3ZlcndyaXRlIGh0dHBPbmx5IGNvb2tpZXMg
ZnJvbSBKYXZhU2NyaXB0LgorICAgICAgICBpZiAoaHR0cE9ubHlDb29raWVFeGlzdHMoZXhpc3Rp
bmdDb29raWVzLCBzb3VwX2Nvb2tpZV9nZXRfbmFtZShjb29raWUuZ2V0KCkpLCBzb3VwX2Nvb2tp
ZV9nZXRfcGF0aChjb29raWUuZ2V0KCkpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIHNvdXBfY29va2llX2phcl9hZGRfY29va2llX3dpdGhfZmlyc3RfcGFydHkoamFyLCBmaXJz
dFBhcnR5VVJJLmdldCgpLCBjb29raWUucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICBzb3VwX2Nv
b2tpZXNfZnJlZShleGlzdGluZ0Nvb2tpZXMpOworfQorCiB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6c2V0Q29va2llcyhjb25zdCBWZWN0b3I8Q29va2llPiYgY29va2llcywgY29uc3QgVVJM
JiwgY29uc3QgVVJMJikKIHsKICAgICBmb3IgKGF1dG8gY29va2llIDogY29va2llcykKQEAgLTMw
OCw2ICszNjUsNzcgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZShj
b25zdCBDb29raWUmIGNvb2tpZSkKICAgICBzb3VwX2Nvb2tpZV9qYXJfZGVsZXRlX2Nvb2tpZShj
b29raWVTdG9yYWdlKCksIHRhcmdldENvb2tpZS5nZXQoKSk7CiB9CiAKK3ZvaWQgTmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpkZWxldGVDb29raWUoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
bmFtZSkgY29uc3QKK3sKKyAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IHVyaSA9IHVybC5jcmVhdGVT
b3VwVVJJKCk7CisgICAgaWYgKCF1cmkpCisgICAgICAgIHJldHVybjsKKworICAgIFNvdXBDb29r
aWVKYXIqIGphciA9IGNvb2tpZVN0b3JhZ2UoKTsKKyAgICBHVW5pcXVlUHRyPEdTTGlzdD4gY29v
a2llcyhzb3VwX2Nvb2tpZV9qYXJfZ2V0X2Nvb2tpZV9saXN0KGphciwgdXJpLmdldCgpLCBUUlVF
KSk7CisgICAgaWYgKCFjb29raWVzKQorICAgICAgICByZXR1cm47CisKKyAgICBDU3RyaW5nIGNv
b2tpZU5hbWUgPSBuYW1lLnV0ZjgoKTsKKyAgICBib29sIHdhc0RlbGV0ZWQgPSBmYWxzZTsKKyAg
ICBmb3IgKEdTTGlzdCogaXRlciA9IGNvb2tpZXMuZ2V0KCk7IGl0ZXI7IGl0ZXIgPSBnX3NsaXN0
X25leHQoaXRlcikpIHsKKyAgICAgICAgU291cENvb2tpZSogY29va2llID0gc3RhdGljX2Nhc3Q8
U291cENvb2tpZSo+KGl0ZXItPmRhdGEpOworICAgICAgICBpZiAoIXdhc0RlbGV0ZWQgJiYgY29v
a2llTmFtZSA9PSBjb29raWUtPm5hbWUpIHsKKyAgICAgICAgICAgIHNvdXBfY29va2llX2phcl9k
ZWxldGVfY29va2llKGphciwgY29va2llKTsKKyAgICAgICAgICAgIHdhc0RlbGV0ZWQgPSB0cnVl
OworICAgICAgICB9CisgICAgICAgIHNvdXBfY29va2llX2ZyZWUoY29va2llKTsKKyAgICB9Cit9
CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKCkKK3sKKyAg
ICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBjb29raWVTdG9yYWdlKCk7CisgICAgR1VuaXF1
ZVB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNvb2tpZUph
cikpOworICAgIGZvciAoR1NMaXN0KiBpdGVtID0gY29va2llcy5nZXQoKTsgaXRlbTsgaXRlbSA9
IGdfc2xpc3RfbmV4dChpdGVtKSkgeworICAgICAgICBTb3VwQ29va2llKiBjb29raWUgPSBzdGF0
aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSk7CisgICAgICAgIHNvdXBfY29va2llX2ph
cl9kZWxldGVfY29va2llKGNvb2tpZUphciwgY29va2llKTsKKyAgICAgICAgc291cF9jb29raWVf
ZnJlZShjb29raWUpOworICAgIH0KK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRl
bGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFdhbGxUaW1lIHRpbWVzdGFtcCkKK3sKKyAgICAv
LyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGRlbGV0aW5nIGNvb2tpZXMgbW9kaWZpZWQgc2luY2Ug
dGhlIGdpdmVuIHRpbWVzdGFtcC4gSXQgc2hvdWxkIHByb2JhYmx5IGJlIGFkZGVkIHRvIGxpYnNv
dXAuCisgICAgaWYgKHRpbWVzdGFtcCA9PSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoMCkpCisg
ICAgICAgIGRlbGV0ZUFsbENvb2tpZXMoKTsKKyAgICBlbHNlCisgICAgICAgIGdfd2FybmluZygi
RGVsZXRpbmcgY29va2llcyBtb2RpZmllZCBzaW5jZSBhIGdpdmVuIHRpbWUgc3BhbiBpcyBub3Qg
c3VwcG9ydGVkIHlldCIpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKQorewor
ICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZUphciA9IGNvb2tpZVN0b3JhZ2UoKTsKKworICAgIGZv
ciAoY29uc3QgYXV0byYgaG9zdG5hbWUgOiBob3N0bmFtZXMpIHsKKyAgICAgICAgQ1N0cmluZyBo
b3N0TmFtZVN0cmluZyA9IGhvc3RuYW1lLnV0ZjgoKTsKKworICAgICAgICBHVW5pcXVlUHRyPEdT
TGlzdD4gY29va2llcyhzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMoY29va2llSmFyKSk7Cisg
ICAgICAgIGZvciAoR1NMaXN0KiBpdGVtID0gY29va2llcy5nZXQoKTsgaXRlbTsgaXRlbSA9IGdf
c2xpc3RfbmV4dChpdGVtKSkgeworICAgICAgICAgICAgU291cENvb2tpZSogY29va2llID0gc3Rh
dGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpOworICAgICAgICAgICAgaWYgKHNvdXBf
Y29va2llX2RvbWFpbl9tYXRjaGVzKGNvb2tpZSwgaG9zdE5hbWVTdHJpbmcuZGF0YSgpKSkKKyAg
ICAgICAgICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfZGVsZXRlX2Nvb2tpZShjb29raWVKYXIsIGNv
b2tpZSk7CisgICAgICAgICAgICBzb3VwX2Nvb2tpZV9mcmVlKGNvb2tpZSk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRIb3N0bmFtZXNXaXRo
Q29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3sKKyAgICBHVW5pcXVlUHRyPEdT
TGlzdD4gY29va2llcyhzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMoY29va2llU3RvcmFnZSgp
KSk7CisgICAgZm9yIChHU0xpc3QqIGl0ZW0gPSBjb29raWVzLmdldCgpOyBpdGVtOyBpdGVtID0g
Z19zbGlzdF9uZXh0KGl0ZW0pKSB7CisgICAgICAgIFNvdXBDb29raWUqIGNvb2tpZSA9IHN0YXRp
Y19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5kYXRhKTsKKyAgICAgICAgaWYgKGNvb2tpZS0+ZG9t
YWluKQorICAgICAgICAgICAgaG9zdG5hbWVzLmFkZChTdHJpbmc6OmZyb21VVEY4KGNvb2tpZS0+
ZG9tYWluKSk7CisgICAgICAgIHNvdXBfY29va2llX2ZyZWUoY29va2llKTsKKyAgICB9Cit9CisK
IFZlY3RvcjxDb29raWU+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0QWxsQ29va2llcygpCiB7
CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgV0syIHRvIHVzZS4KQEAgLTMzMCw2ICs0NTgs
OTggQEAgVmVjdG9yPENvb2tpZT4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRDb29raWVzKGNv
bnN0IFVSTCYgdXJsKQogICAgIHJldHVybiBjb29raWVzOwogfQogCitib29sIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6Z2V0UmF3Q29va2llcyhjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNh
bWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFt
ZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIFZlY3RvcjxDb29raWU+JiByYXdD
b29raWVzKSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTShmaXJzdFBhcnR5KTsKKyAgICBVTlVT
RURfUEFSQU0oZnJhbWVJRCk7CisgICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7CisgICAgcmF3Q29v
a2llcy5jbGVhcigpOworICAgIEdVbmlxdWVQdHI8U291cFVSST4gdXJpID0gdXJsLmNyZWF0ZVNv
dXBVUkkoKTsKKyAgICBpZiAoIXVyaSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1Vu
aXF1ZVB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFyX2dldF9jb29raWVfbGlzdChj
b29raWVTdG9yYWdlKCksIHVyaS5nZXQoKSwgVFJVRSkpOworICAgIGlmICghY29va2llcykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChHU0xpc3QqIGl0ZXIgPSBjb29raWVzLmdl
dCgpOyBpdGVyOyBpdGVyID0gZ19zbGlzdF9uZXh0KGl0ZXIpKSB7CisgICAgICAgIFNvdXBDb29r
aWUqIHNvdXBDb29raWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlci0+ZGF0YSk7Cisg
ICAgICAgIENvb2tpZSBjb29raWU7CisgICAgICAgIGNvb2tpZS5uYW1lID0gU3RyaW5nOjpmcm9t
VVRGOChzb3VwQ29va2llLT5uYW1lKTsKKyAgICAgICAgY29va2llLnZhbHVlID0gU3RyaW5nOjpm
cm9tVVRGOChzb3VwQ29va2llLT52YWx1ZSk7CisgICAgICAgIGNvb2tpZS5kb21haW4gPSBTdHJp
bmc6OmZyb21VVEY4KHNvdXBDb29raWUtPmRvbWFpbik7CisgICAgICAgIGNvb2tpZS5wYXRoID0g
U3RyaW5nOjpmcm9tVVRGOChzb3VwQ29va2llLT5wYXRoKTsKKyAgICAgICAgY29va2llLmNyZWF0
ZWQgPSAwOworICAgICAgICBjb29raWUuZXhwaXJlcyA9IHNvdXBDb29raWUtPmV4cGlyZXMgPyBz
dGF0aWNfY2FzdDxkb3VibGU+KHNvdXBfZGF0ZV90b190aW1lX3Qoc291cENvb2tpZS0+ZXhwaXJl
cykpICogMTAwMCA6IDA7CisgICAgICAgIGNvb2tpZS5odHRwT25seSA9IHNvdXBDb29raWUtPmh0
dHBfb25seTsKKyAgICAgICAgY29va2llLnNlY3VyZSA9IHNvdXBDb29raWUtPnNlY3VyZTsKKyAg
ICAgICAgY29va2llLnNlc3Npb24gPSAhc291cENvb2tpZS0+ZXhwaXJlczsKKyAgICAgICAgcmF3
Q29va2llcy5hcHBlbmQoV1RGTW92ZShjb29raWUpKTsKKyAgICAgICAgc291cF9jb29raWVfZnJl
ZShzb3VwQ29va2llKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0
ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZXNGb3JTZXNzaW9uKGNvbnN0IE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiB1cmwsIGJvb2wgZm9ySFRUUEhlYWRlciwg
SW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpCit7CisgICAgR1VuaXF1
ZVB0cjxTb3VwVVJJPiB1cmkgPSB1cmwuY3JlYXRlU291cFVSSSgpOworICAgIGlmICghdXJpKQor
ICAgICAgICByZXR1cm4geyB7IH0sIGZhbHNlIH07CisKKyAgICBHU0xpc3QqIGNvb2tpZXMgPSBz
b3VwX2Nvb2tpZV9qYXJfZ2V0X2Nvb2tpZV9saXN0KHNlc3Npb24uY29va2llU3RvcmFnZSgpLCB1
cmkuZ2V0KCksIGZvckhUVFBIZWFkZXIpOworICAgIGJvb2wgZGlkQWNjZXNzU2VjdXJlQ29va2ll
cyA9IGZhbHNlOworCisgICAgLy8gbGlic291cCBzaG91bGQgb21pdCBzZWN1cmUgY29va2llcyBp
dHNlbGYgaWYgdGhlIHByb3RvY29sIGlzIG5vdCBodHRwcy4KKyAgICBpZiAodXJsLnByb3RvY29s
SXMoImh0dHBzIikpIHsKKyAgICAgICAgR1NMaXN0KiBpdGVtID0gY29va2llczsKKyAgICAgICAg
d2hpbGUgKGl0ZW0pIHsKKyAgICAgICAgICAgIGF1dG8gY29va2llID0gc3RhdGljX2Nhc3Q8U291
cENvb2tpZSo+KGl0ZW0tPmRhdGEpOworICAgICAgICAgICAgaWYgKHNvdXBfY29va2llX2dldF9z
ZWN1cmUoY29va2llKSkgeworICAgICAgICAgICAgICAgIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMg
PSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChpbmNsdWRlU2VjdXJlQ29va2llcyA9PSBJbmNs
dWRlU2VjdXJlQ29va2llczo6Tm8pIHsKKyAgICAgICAgICAgICAgICAgICAgR1NMaXN0KiBuZXh0
ID0gaXRlbS0+bmV4dDsKKyAgICAgICAgICAgICAgICAgICAgc291cF9jb29raWVfZnJlZShzdGF0
aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSkpOworICAgICAgICAgICAgICAgICAgICBj
b29raWVzID0gZ19zbGlzdF9yZW1vdmVfbGluayhjb29raWVzLCBpdGVtKTsKKyAgICAgICAgICAg
ICAgICAgICAgaXRlbSA9IG5leHQ7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGl0ZW0gPSBpdGVtLT5u
ZXh0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFjb29raWVzKQorICAgICAgICByZXR1
cm4geyB7IH0sIGZhbHNlIH07CisKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGNvb2tpZUhlYWRlcihz
b3VwX2Nvb2tpZXNfdG9fY29va2llX2hlYWRlcihjb29raWVzKSk7CisgICAgc291cF9jb29raWVz
X2ZyZWUoY29va2llcyk7CisKKyAgICByZXR1cm4geyBTdHJpbmc6OmZyb21VVEY4KGNvb2tpZUhl
YWRlci5nZXQoKSksIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMgfTsKK30KKworc3RkOjpwYWlyPFN0
cmluZywgYm9vbD4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVzRm9yRE9NKGNvbnN0IFVS
TCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiB1cmwsIHN0ZDo6
b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJ
RCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpIGNvbnN0Cit7Cisg
ICAgVU5VU0VEX1BBUkFNKGZpcnN0UGFydHkpOworICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsK
KyAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKKyAgICByZXR1cm4gY29va2llc0ZvclNlc3Npb24o
KnRoaXMsIHVybCwgZmFsc2UsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKK30KKworc3RkOjpwYWly
PFN0cmluZywgYm9vbD4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYsIGNv
bnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlv
bmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVD
b29raWVzKSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTShmaXJzdFBhcnR5KTsKKyAgICBVTlVT
RURfUEFSQU0oZnJhbWVJRCk7CisgICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7CisgICAgLy8gU2Vj
dXJlIGNvb2tpZXMgd2lsbCBzdGlsbCBvbmx5IGJlIGluY2x1ZGVkIGlmIHVybCdzIHByb3RvY29s
IGlzIGh0dHBzLgorICAgIHJldHVybiBjb29raWVzRm9yU2Vzc2lvbigqdGhpcywgdXJsLCB0cnVl
LCBpbmNsdWRlU2VjdXJlQ29va2llcyk7Cit9CisKK3N0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3Qg
Q29va2llUmVxdWVzdEhlYWRlckZpZWxkUHJveHkmIGhlYWRlckZpZWxkUHJveHkpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGhlYWRlckZpZWxkUHJv
eHkuZmlyc3RQYXJ0eSwgaGVhZGVyRmllbGRQcm94eS5zYW1lU2l0ZUluZm8sIGhlYWRlckZpZWxk
UHJveHkudXJsLCBoZWFkZXJGaWVsZFByb3h5LmZyYW1lSUQsIGhlYWRlckZpZWxkUHJveHkucGFn
ZUlELCBoZWFkZXJGaWVsZFByb3h5LmluY2x1ZGVTZWN1cmVDb29raWVzKTsKK30KKwogdm9pZCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb246OmZsdXNoQ29va2llU3RvcmUoKQogewogICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgZm9yIFdLMiB0byB1c2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKaW5kZXggZmU5MmJj
MWM5OGZmZjNjZjc2MDM4NDI2Y2I5Nzk1YzFjZWU4ODIwNS4uMGJiMTQ5Y2ExNTU1MGUxYTljOGQz
ZTQ2OWFiMjZjZTY0NmI4Y2JhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcApAQCAtMzMsNyArMzMsNiBA
QAogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db29raWVT
dG9yYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29va2llSmFyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9V
UkwuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KQEAgLTYwLDcgKzU5LDcgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENhbGxiYWMKIHsK
ICAgICBIYXNoU2V0PFN0cmluZz4gaG9zdG5hbWVzOwogICAgIGlmIChhdXRvKiBzdG9yYWdlU2Vz
c2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKSkK
LSAgICAgICAgV2ViQ29yZTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoKnN0b3JhZ2VTZXNzaW9u
LCBob3N0bmFtZXMpOworICAgICAgICBzdG9yYWdlU2Vzc2lvbi0+Z2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoaG9zdG5hbWVzKTsKIAogICAgIG1fcHJvY2Vzcy5zZW5kKE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OkRpZEdldEhvc3RuYW1lc1dpdGhDb29raWVzKGNvcHlUb1ZlY3Rvciho
b3N0bmFtZXMpLCBjYWxsYmFja0lEKSwgMCk7CiB9CkBAIC02OCwxNCArNjcsMTQgQEAgdm9pZCBX
ZWJDb29raWVNYW5hZ2VyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIENhbGxiYWMKIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBob3N0bmFt
ZSkKIHsKICAgICBpZiAoYXV0byogc3RvcmFnZVNlc3Npb24gPSBOZXR3b3JrU3RvcmFnZVNlc3Np
b246OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCi0gICAgICAgIFdlYkNvcmU6OmRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZXMoKnN0b3JhZ2VTZXNzaW9uLCB7IGhvc3RuYW1lIH0pOworICAgICAg
ICBzdG9yYWdlU2Vzc2lvbi0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyh7IGhvc3RuYW1lIH0p
OwogfQogCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQWxsQ29va2llcyhQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpCiB7CiAgICAgaWYgKGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQotICAgICAgICBX
ZWJDb3JlOjpkZWxldGVBbGxDb29raWVzKCpzdG9yYWdlU2Vzc2lvbik7CisgICAgICAgIHN0b3Jh
Z2VTZXNzaW9uLT5kZWxldGVBbGxDb29raWVzKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdl
cjo6ZGVsZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ29va2llJiBj
b29raWUsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKQEAgLTg5LDcgKzg4LDcgQEAgdm9pZCBXZWJD
b29raWVNYW5hZ2VyOjpkZWxldGVDb29raWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25z
dCBDb29raWUmIGNvb2sKIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQWxsQ29va2llc01v
ZGlmaWVkU2luY2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lLCBDYWxs
YmFja0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgaWYgKGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQotICAgICAgICBX
ZWJDb3JlOjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZSgqc3RvcmFnZVNlc3Npb24sIHRp
bWUpOworICAgICAgICBzdG9yYWdlU2Vzc2lvbi0+ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2lu
Y2UodGltZSk7CiAKICAgICBtX3Byb2Nlc3Muc2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpEaWREZWxldGVDb29raWVzKGNhbGxiYWNrSUQpLCAwKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5jcHAKaW5kZXggYTMxZjE3MTIxN2U0NTA3M2UzNTk2NTgzODU4OWQxZjQyNWQx
ZWY2MS4uMDgzODkzMDg1MmIxMmZhN2IxNDA2Y2JjNDBlNzFkNzY5ZTg0OWVlYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTUyLDcgKzUyLDYgQEAKICNpbmNsdWRlICJXZWJzaXRl
RGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvUGxhdGZvcm1Db29raWVKYXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZGVy
T3B0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9TYW1lU2l0ZUluZm8uaD4KQEAgLTM3OSw3ICszNzgsNyBAQCB2b2lkIE5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxv
YWQoUEFMOjpTZXNzaQogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y29va2ll
c0ZvckRPTShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwg
Y29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9w
dGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQs
IEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzLCBTdHJpbmcmIGNvb2tp
ZVN0cmluZywgYm9vbCYgc2VjdXJlQ29va2llc0FjY2Vzc2VkKQogewogICAgIGF1dG8mIG5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiA9IHN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCk7Ci0gICAgc3RkOjp0
aWUoY29va2llU3RyaW5nLCBzZWN1cmVDb29raWVzQWNjZXNzZWQpID0gV2ViQ29yZTo6Y29va2ll
c0ZvckRPTShuZXR3b3JrU3RvcmFnZVNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywg
dXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKKyAgICBzdGQ6OnRp
ZShjb29raWVTdHJpbmcsIHNlY3VyZUNvb2tpZXNBY2Nlc3NlZCkgPSBuZXR3b3JrU3RvcmFnZVNl
c3Npb24uY29va2llc0ZvckRPTShmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJ
RCwgcGFnZUlELCBpbmNsdWRlU2VjdXJlQ29va2llcyk7CiAjaWYgSEFWRShDRk5FVFdPUktfU1RP
UkFHRV9QQVJUSVRJT05JTkcpICYmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIGlmIChOZXR3
b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuc2hvdWxkTG9nQ29va2llSW5mb3JtYXRpb24oKSkKICAg
ICAgICAgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpsb2dDb29raWVJbmZvcm1hdGlvbigiTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZXNGb3JET00iLCByZWludGVycHJldF9jYXN0
PGNvbnN0IHZvaWQqPih0aGlzKSwgbmV0d29ya1N0b3JhZ2VTZXNzaW9uLCBmaXJzdFBhcnR5LCBz
YW1lU2l0ZUluZm8sIHVybCwgZW1wdHlTdHJpbmcoKSwgZnJhbWVJRCwgcGFnZUlELCBzdGQ6Om51
bGxvcHQpOwpAQCAtMzg5LDcgKzM4OCw3IEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OmNvb2tpZXNGb3JET00oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zCiB2b2lk
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzZXRDb29raWVzRnJvbURPTShQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJ
bmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90
PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIGNvbnN0IFN0cmluZyYg
Y29va2llU3RyaW5nKQogewogICAgIGF1dG8mIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IHN0b3Jh
Z2VTZXNzaW9uKHNlc3Npb25JRCk7Ci0gICAgV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00obmV0
d29ya1N0b3JhZ2VTZXNzaW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJ
RCwgcGFnZUlELCBjb29raWVTdHJpbmcpOworICAgIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5zZXRD
b29raWVzRnJvbURPTShmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFn
ZUlELCBjb29raWVTdHJpbmcpOwogI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9O
SU5HKSAmJiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICBpZiAoTmV0d29ya1Byb2Nlc3M6OnNp
bmdsZXRvbigpLnNob3VsZExvZ0Nvb2tpZUluZm9ybWF0aW9uKCkpCiAgICAgICAgIE5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6bG9nQ29va2llSW5mb3JtYXRpb24oIk5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpzZXRDb29raWVzRnJvbURPTSIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9p
ZCo+KHRoaXMpLCBuZXR3b3JrU3RvcmFnZVNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5m
bywgdXJsLCBlbXB0eVN0cmluZygpLCBmcmFtZUlELCBwYWdlSUQsIHN0ZDo6bnVsbG9wdCk7CkBA
IC0zOTgsMjIgKzM5NywyMiBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpz
ZXRDb29raWVzRnJvbURPTShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsCiAKIHZvaWQgTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZXNFbmFibGVkKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgYm9vbCYgcmVzdWx0KQogewotICAgIHJlc3VsdCA9IFdlYkNvcmU6OmNvb2tpZXNF
bmFibGVkKHN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpOworICAgIHJlc3VsdCA9IHN0b3JhZ2VT
ZXNzaW9uKHNlc3Npb25JRCkuY29va2llc0VuYWJsZWQoKTsKIH0KIAogdm9pZCBOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRl
SW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRf
dD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJl
Q29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcywgU3RyaW5nJiBjb29raWVTdHJpbmcsIGJvb2wm
IHNlY3VyZUNvb2tpZXNBY2Nlc3NlZCkKIHsKLSAgICBzdGQ6OnRpZShjb29raWVTdHJpbmcsIHNl
Y3VyZUNvb2tpZXNBY2Nlc3NlZCkgPSBXZWJDb3JlOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRW
YWx1ZShzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8s
IHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNsdWRlU2VjdXJlQ29va2llcyk7CisgICAgc3RkOjp0
aWUoY29va2llU3RyaW5nLCBzZWN1cmVDb29raWVzQWNjZXNzZWQpID0gc3RvcmFnZVNlc3Npb24o
c2Vzc2lvbklEKS5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShmaXJzdFBhcnR5LCBzYW1l
U2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNsdWRlU2VjdXJlQ29va2llcyk7CiB9
CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmdldFJhd0Nvb2tpZXMoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVT
aXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50
NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBWZWN0b3I8Q29v
a2llPiYgcmVzdWx0KQogewotICAgIFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMoc3RvcmFnZVNlc3Np
b24oc2Vzc2lvbklEKSwgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBh
Z2VJRCwgcmVzdWx0KTsKKyAgICBzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpLmdldFJhd0Nvb2tp
ZXMoZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgcmVzdWx0
KTsKIH0KIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGVsZXRlQ29va2ll
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
Y29va2llTmFtZSkKIHsKLSAgICBXZWJDb3JlOjpkZWxldGVDb29raWUoc3RvcmFnZVNlc3Npb24o
c2Vzc2lvbklEKSwgdXJsLCBjb29raWVOYW1lKTsKKyAgICBzdG9yYWdlU2Vzc2lvbihzZXNzaW9u
SUQpLmRlbGV0ZUNvb2tpZSh1cmwsIGNvb2tpZU5hbWUpOwogfQogCiB2b2lkIE5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWdpc3RlckZpbGVCbG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIHBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmIGV4dGVuc2lvbkhh
bmRsZSwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggOGJmZWZlMzYyYTg1YmYyNTk0ODQ1
YWMyOGY2NDA5MzNjYTY4OTY2OS4uNWExMjRjOGNjOGVhYjc5NzgxMjIyY2FlYWQ0Yjg3M2IyOGI5
YjMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAKQEAgLTY1LDcgKzY1LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0
cnkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdGF0ZU5vdGlmaWVyLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Bs
YXRmb3JtQ29va2llSmFyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvU2NoZW1lUmVnaXN0cnkuaD4KQEAgLTUzMyw3ICs1MzIsNyBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0
aW9uU2V0PFdlYnNpdAogCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0
ZURhdGFUeXBlOjpDb29raWVzKSkgewogICAgICAgICBpZiAoYXV0byogbmV0d29ya1N0b3JhZ2VT
ZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQp
KQotICAgICAgICAgICAgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoKm5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiwgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmhvc3ROYW1lc1dpdGhDb29r
aWVzKTsKKyAgICAgICAgICAgIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi0+Z2V0SG9zdG5hbWVzV2l0
aENvb2tpZXMoY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmhvc3ROYW1lc1dpdGhD
b29raWVzKTsKICAgICB9CiAKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJz
aXRlRGF0YVR5cGU6OkNyZWRlbnRpYWxzKSkgewpAQCAtNTY1LDcgKzU2NCw3IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
T3B0aW9uU2V0PFdlYnNpCiAKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJz
aXRlRGF0YVR5cGU6OkNvb2tpZXMpKSB7CiAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU3RvcmFn
ZVNlc3Npb24gPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25J
RCkpCi0gICAgICAgICAgICBkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZSgqbmV0d29ya1N0
b3JhZ2VTZXNzaW9uLCBtb2RpZmllZFNpbmNlKTsKKyAgICAgICAgICAgIG5ldHdvcmtTdG9yYWdl
U2Vzc2lvbi0+ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UobW9kaWZpZWRTaW5jZSk7CiAg
ICAgfQogCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpDcmVkZW50aWFscykpIHsKQEAgLTYxMyw3ICs2MTIsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
OjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBP
cHRpbwogewogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6Q29va2llcykpIHsKICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKSkKLSAgICAg
ICAgICAgIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoKm5ldHdvcmtTdG9yYWdlU2Vzc2lvbiwg
Y29va2llSG9zdE5hbWVzKTsKKyAgICAgICAgICAgIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi0+ZGVs
ZXRlQ29va2llc0Zvckhvc3RuYW1lcyhjb29raWVIb3N0TmFtZXMpOwogICAgIH0KIAogICAgIGF1
dG8gY2xlYXJUYXNrc0hhbmRsZXIgPSBXVEY6OkNhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFt0
aGlzLCBjYWxsYmFja0lEXSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggNTJlYmY5YWY1MzlkYzgwZGUyMTY5
MmYwNTZiMWMzM2ZiOThhYmQ3MC4uY2FhN2NkNWViZThkNWFjYzg1MDE3Nzk1NWUwZmI1MTk2ZTlh
MWE5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Jlc291cmNlTG9hZGVyLmNwcApAQCAtNTksNyArNTksNiBAQAogCiAjaWYgSEFWRShDRk5FVFdP
UktfU1RPUkFHRV9QQVJUSVRJT05JTkcpICYmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogI2luY2x1
ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Q
bGF0Zm9ybUNvb2tpZUphci5oPgogI2VuZGlmCiAKICNpZiBVU0UoUVVJQ0tfTE9PSykKQEAgLTEw
MTQsNyArMTAxMyw3IEBAIHN0YXRpYyB2b2lkIGxvZ0Nvb2tpZUluZm9ybWF0aW9uSW50ZXJuYWwo
Y29uc3QgU3RyaW5nJiBsYWJlbCwgY29uc3Qgdm9pZCogbG9nZ2VkCiAgICAgQVNTRVJUKE5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6c2hvdWxkTG9nQ29va2llSW5mb3JtYXRpb24oKSk7CiAKICAgICBW
ZWN0b3I8V2ViQ29yZTo6Q29va2llPiBjb29raWVzOwotICAgIGlmICghV2ViQ29yZTo6Z2V0UmF3
Q29va2llcyhuZXR3b3JrU3RvcmFnZVNlc3Npb24sIHBhcnRpdGlvbiwgc2FtZVNpdGVJbmZvLCB1
cmwsIGZyYW1lSUQsIHBhZ2VJRCwgY29va2llcykpCisgICAgaWYgKCFuZXR3b3JrU3RvcmFnZVNl
c3Npb24uZ2V0UmF3Q29va2llcyhwYXJ0aXRpb24sIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlE
LCBwYWdlSUQsIGNvb2tpZXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIGVzY2FwZWRV
UkwgPSBlc2NhcGVGb3JKU09OKHVybC5zdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKaW5kZXggYjcyZGMxNWZmZTBh
ZTkzODhkNmRmYmI0Y2U2YzBlZDE3ZTc0YWY5OC4uMmZmMGNhMjY5MWIwNjVmNDBjZDgwNzViNzhk
ZDQ1OWRkMWFkZWY5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlLmNwcApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvSFRUUEhlYWRlck5hbWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Mb3dQb3dlck1vZGVOb3Rp
Zmllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVz
b3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRl
Z2llcy5jcHAKaW5kZXggNjkxMzEzNTgxNWVhN2QwMDgxOTQyNWNjZTg0ODQ2OGVlM2U0ZmRmNy4u
YWU3Mzg4ZjlhNDljMzBmY2M2Yzg2Yzg1MWZhMDY1ODIxNzMzYmY1MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2ll
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBs
YXRmb3JtU3RyYXRlZ2llcy5jcHAKQEAgLTU0LDcgKzU0LDYgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VHcm91cC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUGFzdGVib2FyZEl0ZW1JbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tp
ZUphci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1QYXN0ZWJvYXJkLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Qcm9ncmVzc1RyYWNrZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
RXJyb3IuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQppbmRleCAzNDUwNjcyZDVjYjUx
OTZkZDNhM2E2ZmIwNjAwOWNkNzdiOThlN2M4Li5iNTMxODhlYmZjZGY1YTc0MTMzMTg1MTk4ZWMz
ZDI0ZmUzOWFkODU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tCkBAIC0zMyw3ICsz
Myw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05ldHdv
cmtTdG9yYWdlU2Vzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYXN0ZWJvYXJkSXRlbUluZm8u
aD4KLSNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1Db29raWVKYXIuaD4KICNpbXBvcnQgPFdlYkNv
cmUvUGxhdGZvcm1QYXN0ZWJvYXJkLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9TdWJmcmFtZUxvYWRlci5oPgpAQCAtNzUsMzggKzc0LDM4IEBA
IEJsb2JSZWdpc3RyeSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVCbG9iUmVnaXN0cnko
KQogCiBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tp
ZXNGb3JET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwm
IGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwm
IHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50
NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykK
IHsKLSAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llc0ZvckRPTShzZXNzaW9uLCBmaXJzdFBhcnR5
LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNsdWRlU2VjdXJlQ29va2ll
cyk7CisgICAgcmV0dXJuIHNlc3Npb24uY29va2llc0ZvckRPTShmaXJzdFBhcnR5LCBzYW1lU2l0
ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNsdWRlU2VjdXJlQ29va2llcyk7CiB9CiAK
IHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRDb29raWVzRnJvbURPTShjb25zdCBOZXR3
b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3Qg
U2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFs
PHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIGNvbnN0
IFN0cmluZyYgY29va2llU3RyaW5nKQogewotICAgIFdlYkNvcmU6OnNldENvb2tpZXNGcm9tRE9N
KHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQs
IGNvb2tpZVN0cmluZyk7CisgICAgc2Vzc2lvbi5zZXRDb29raWVzRnJvbURPTShmaXJzdFBhcnR5
LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBjb29raWVTdHJpbmcpOwogfQog
CiBib29sIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llc0VuYWJsZWQoY29uc3QgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uKQogewotICAgIHJldHVybiBXZWJDb3JlOjpjb29raWVz
RW5hYmxlZChzZXNzaW9uKTsKKyAgICByZXR1cm4gc2Vzc2lvbi5jb29raWVzRW5hYmxlZCgpOwog
fQogCiBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vz
c2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRl
SW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0
ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVk
ZVNlY3VyZUNvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFt
ZUlELCBwYWdlSUQsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKKyAgICByZXR1cm4gc2Vzc2lvbi5j
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVy
bCwgZnJhbWVJRCwgcGFnZUlELCBpbmNsdWRlU2VjdXJlQ29va2llcyk7CiB9CiAKIHN0ZDo6cGFp
cjxTdHJpbmcsIGJvb2w+IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIGZpcnN0UGFy
dHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3Rk
OjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFn
ZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykKIHsKICAgICBh
dXRvJiBzZXNzaW9uID0gc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgPyBXZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKCkgOiBOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwotICAgIHJldHVybiBXZWJDb3JlOjpj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShzZXNzaW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0
ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNsdWRlU2VjdXJlQ29va2llcyk7CisgICAg
cmV0dXJuIHNlc3Npb24uY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoZmlyc3RQYXJ0eSwg
c2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMp
OwogfQogCiBib29sIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UmF3Q29va2llcyhjb25zdCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29u
c3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlv
bmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIFZl
Y3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewotICAgIHJldHVybiBXZWJDb3JlOjpnZXRSYXdD
b29raWVzKHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBw
YWdlSUQsIHJhd0Nvb2tpZXMpOworICAgIHJldHVybiBzZXNzaW9uLmdldFJhd0Nvb2tpZXMoZmly
c3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgcmF3Q29va2llcyk7
CiB9CiAKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpkZWxldGVDb29raWUoY29uc3QgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiBjb29raWVOYW1lKQogewotICAgIFdlYkNvcmU6OmRlbGV0ZUNvb2tpZShzZXNzaW9uLCB1cmws
IGNvb2tpZU5hbWUpOworICAgIHNlc3Npb24uZGVsZXRlQ29va2llKHVybCwgY29va2llTmFtZSk7
CiB9CiAKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRUeXBlcyhWZWN0b3I8U3RyaW5n
PiYgdHlwZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQppbmRleCBjNGQ3NDIyZGU3
MWZmY2MxNGNkZGE4MzMzZTY5NzI2YTcwNGVlNzQzLi43NzE4ZDA1YWVkYTYyNjZlMjMxMzBhMTRl
ODIxYmUxZTg2NmM0N2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYlByZWZlcmVuY2VzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViUHJlZmVyZW5jZXMubW0KQEAgLTQyLDcgKzQyLDYgQEAKICNpbXBvcnQgPFdlYkNvcmUv
QXVkaW9TZXNzaW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RlcHJlY2F0ZWRHbG9iYWxTZXR0aW5n
cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KLSNpbXBvcnQg
PFdlYkNvcmUvUGxhdGZvcm1Db29raWVKYXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvUnVudGltZUFw
cGxpY2F0aW9uQ2hlY2tzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1RleHRFbmNvZGluZ1JlZ2lzdHJ5Lmg+CkBAIC0xODc3LDcgKzE4NzYsNyBAQCBz
dGF0aWMgTlNTdHJpbmcgKmNsYXNzSUJDcmVhdG9ySUQgPSBuaWw7CiAKICsgKHZvaWQpX2NsZWFy
TmV0d29ya0xvYWRlclNlc3Npb24KIHsKLSAgICBXZWJDb3JlOjpkZWxldGVBbGxDb29raWVzKE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOworICAgIE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuZGVsZXRlQWxsQ29va2ll
cygpOwogfQogCiArICh2b2lkKV9zZXRDdXJyZW50TmV0d29ya0xvYWRlclNlc3Npb25Db29raWVB
Y2NlcHRQb2xpY3k6KE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSlwb2xpY3kK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346023</attachid>
            <date>2018-07-29 02:08:08 -0700</date>
            <delta_ts>2018-07-29 04:32:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188137-20180729110806.patch</filename>
            <type>text/plain</type>
            <size>129815</size>
            <attacher name="Rob Buis">rbuis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0MzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTAyYzI1N2ZhMWQ0YmU5
YmEyYjFkMWFkOWVjNjFlMGVlNzU4ZGM3Mi4uYjU5ZmQ4Y2EzOTFiN2VjNTIxMzU2MDkxZDRjMjA2
ODUzMmJmOGM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDE4LTA3LTI4ICBSb2Ig
QnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CisKKyAgICAgICAgTWVyZ2UgUGxhdGZvcm1Db29raWVK
YXIgZnVuY3Rpb25zIGludG8gTmV0d29ya1N0b3JhZ2VTZXNzaW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODgxMzcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLS0gbm8gY2hhbmdl
IGluIFdlYktpdCBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6
CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbG9hZGVyL0Nvb2tpZUphci5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vQ3VybC5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9Tb3VyY2VzU291
cC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6aGVhZGVyVmFsdWVGb3JWYXJ5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvUGxhdGZvcm1Db29raWVKYXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29v
a2llRGF0YUZvckhhbmRzaGFrZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Db29r
aWVKYXJDRk5ldC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3Jr
U3RvcmFnZVNlc3Npb25Db2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6Omh0dHBDb29raWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUhUVFBDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6
cG9saWN5UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzRm9yVVJMKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEhUVFBDb29raWVzRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6
Omh0dHBDb29raWVzRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbHRlckNvb2tpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6YXBwbHlQYXJ0aXRpb25Ub0Nvb2tpZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29va2llc0FyZUJsb2NrZWRGb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2ll
c0luUGFydGl0aW9uRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNGb3JTZXNzaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUFsbEhUVFBDb29raWVzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0ZvckRPTSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bjo6c2V0Q29va2llc0Zyb21ET00gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6aHR0cENvb2tp
ZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246
OmNvb2tpZXNFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6Z2V0UmF3Q29va2llcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZXNGb3JIb3N0
bmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVB
bGxDb29raWVzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJs
L0Nvb2tpZUphckN1cmwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9Db29raWVKYXJDdXJsLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL05l
dHdvcmtTdG9yYWdlU2Vzc2lvbkN1cmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVzRnJvbURPTSBjb25zdCk6CisKIDIwMTgtMDctMjQgIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQW5pbWF0aW9u
IHN0b3BzIHdpdGggb2JqZWN0LWZpdDpjb250YWluIG9uIGFuIGFuaW1hdGVkIDJkIGNhbnZhcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwppbmRleCBmY2IzN2QxNDY1NWIzNDRiZWI5M2I3ZjY5MGU1ZWE4Njk1ZDA1MWZmLi4xMjM4
NmFiNmFmYTBkNTNmOTk0OTBkMGMwMTg5N2I3NGZjYWFmOTc3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDMxIEBACisyMDE4LTA3LTI4ICBSb2IgQnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CisgCisgICAg
ICAgICBNZXJnZSBQbGF0Zm9ybUNvb2tpZUphciBmdW5jdGlvbnMgaW50byBOZXR3b3JrU3RvcmFn
ZVNlc3Npb24KKyAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xODgxMzcKKyAKKyAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorIAorICAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwOgorICAg
ICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMp
OgorICAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKToKKyAgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OmRlbGV0ZUFsbENv
b2tpZXMpOgorICAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQWxsQ29v
a2llc01vZGlmaWVkU2luY2UpOgorICAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6Y29va2llc0ZvckRPTSk6CisgICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAg
KFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZXNFbmFibGVkKToK
KyAgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEpOgorICAgICAgICAgKFdlYktpdDo6TmV0d29ya1By
b2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKToKKyAgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMpOgorICAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAgKFdlYktpdDo6bG9nQ29v
a2llSW5mb3JtYXRpb25JbnRlcm5hbCk6CisgICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZS5jcHA6CisgICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcDoKKwogMjAxOC0wNy0yNyAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aHJlYWQtc2FmZXR5IGlzc3VlcyByZWxh
dGVkIHRvIFJlYWx0aW1lTWVkaWFTb3VyY2U6OmF1ZGlvU2FtcGxlc0F2YWlsYWJsZSgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggMGUzMzc1NjYzYjkzZDViODZlM2NiNTAxODU2NmNh
YjQ4ZmFlNWQwNi4uZjIxYWIxZTMxZDQyMzRmNjQ4MjZmYjUwODM3ZDNjOThmNzNhMDIyNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE4LTA3LTI4ICBS
b2IgQnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CisKKyAgICAgICAgTWVyZ2UgUGxhdGZvcm1Db29r
aWVKYXIgZnVuY3Rpb25zIGludG8gTmV0d29ya1N0b3JhZ2VTZXNzaW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODgxMzcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBs
YXRmb3JtU3RyYXRlZ2llcy5tbToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29v
a2llc0ZvckRPTSk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldENvb2tpZXNG
cm9tRE9NKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llc0VuYWJsZWQp
OgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZSk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFJhd0Nvb2tpZXMp
OgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpkZWxldGVDb29raWUpOgorICAgICAg
ICAqIFdlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW06CisgICAgICAgICgrW1dlYlByZWZlcmVuY2Vz
IF9jbGVhck5ldHdvcmtMb2FkZXJTZXNzaW9uXSk6CisKIDIwMTgtMDctMjYgIEFuZHkgVmFuV2Fn
b25lciAgPGFuZHlAdmFud2Fnb25lci5mYW1pbHk+CiAKICAgICAgICAgW0lOVExdIFJlbW92ZSBJ
TlRMIHN1Yi1mZWF0dXJlIGNvbXBpbGUgZmxhZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5k
ZXggZjNkOGQwMjhjZmQxZTA2MWY5ZjJjNmYzMDJiZGY5Yjk1ZDFkNDk0OS4uNWRmZTc0Yzc5YjUy
MzEwMGQ0ZWM3YjhiNGJkZjVkODM1Zjg2ZjI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UK
QEAgLTQzNCw3ICs0MzQsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9uZXR3b3JrL21hYy9BdXRoZW50aWNhdGlvbk1hYy5tbQogICAgIHBsYXRmb3JtL25ldHdv
cmsvbWFjL0Jsb2JEYXRhRmlsZVJlZmVyZW5jZU1hYy5tbQogICAgIHBsYXRmb3JtL25ldHdvcmsv
bWFjL0NlcnRpZmljYXRlSW5mb01hYy5tbQotICAgIHBsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tp
ZUphck1hYy5tbQogICAgIHBsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZVN0b3JhZ2VNYWMubW0K
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL21hYy9DcmVkZW50aWFsU3RvcmFnZU1hYy5tbQogICAgIHBs
YXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dAppbmRleCBlMzUyZTUzYjhkNjFmY2I4MGEyZjJhMGNhNmNlZmU1YzFhOTFiOTNkLi5lZTll
OGIwYTFmMzE3NTM1MmYyNTUyMDcwNDUzMzg5NWIzYjE5YjRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2Nv
YS50eHQKQEAgLTUwNyw3ICs1MDcsNiBAQCBwbGF0Zm9ybS9uZXR3b3JrL2lvcy9XZWJDb3JlVVJM
UmVzcG9uc2VJT1MubW0KIHBsYXRmb3JtL25ldHdvcmsvbWFjL0F1dGhlbnRpY2F0aW9uTWFjLm1t
CiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9CbG9iRGF0YUZpbGVSZWZlcmVuY2VNYWMubW0KIHBsYXRm
b3JtL25ldHdvcmsvbWFjL0NlcnRpZmljYXRlSW5mb01hYy5tbQotcGxhdGZvcm0vbmV0d29yay9t
YWMvQ29va2llSmFyTWFjLm1tCiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVTdG9yYWdlTWFj
Lm1tCiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9DcmVkZW50aWFsU3RvcmFnZU1hYy5tbQogcGxhdGZv
cm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmYzFmYTFkMmVjZjhlMDM1
ZDI1NDgyZmVmYjc1OWZjZmExZWI1NTYxLi43ODdkY2ZhYjU3ZDFjMmQ1ZDJjOWU2YzIxNTRjMDIw
ODEzYjBiZGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC00NjAzLDcgKzQ2MDMsNiBAQAogCQlFMTM0RjVBQjEyRUUzNDNGMDA0
RUM1OEQgLyogSW50UmVjdEhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxMzRGNUFBMTJFRTM0M0YwMDRFQzU4RCAvKiBJbnRSZWN0SGFzaC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUxMzk4NjY0
MTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM5ODY2MjE1NDc4NDc0MDAxRTNGNjUgLyogU3R5
bGVSZXNvbHZlci5oICovOyB9OwogCQlFMTNFRjM0NDE2ODRFQ0Y0MDAzNEM4M0YgLyogTmV0d29y
a1N0b3JhZ2VTZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMTNFRjM0MjE2ODRFQ0Y0MDAzNEM4M0YgLyogTmV0d29ya1N0b3JhZ2VTZXNzaW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRTE0
MjRDOEExNjRCM0I0RTAwRjMyRDQwIC8qIFBsYXRmb3JtQ29va2llSmFyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTQyNEM4OTE2NEIzQjRFMDBGMzJE
NDAgLyogUGxhdGZvcm1Db29raWVKYXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlFMTQyNEM5NDE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTQyNEM5
MjE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTE0RjFDNDUxNEI1REFDNjAwRUE5MDA5IC8qIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNEYxQzQzMTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTE1MjU1MTUxNkZEMjM1MDAwM0Q3QURCIC8qIFdlYkNvcmVS
ZXNvdXJjZUhhbmRsZUFzT3BlcmF0aW9uUXVldWVEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1MjU1MTMxNkZEMjM0RjAwM0Q3QURCIC8q
IFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzT3BlcmF0aW9uUXVldWVEZWxlZ2F0ZS5oICovOyB9OwpA
QCAtMTQxMzAsOCArMTQxMjksNiBAQAogCQlFMTNFRjM0NzE2ODUwQzQ3MDAzNEM4M0YgLyogTmV0
d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFMTNGMDFFQTEyNzBFMTBEMDBERkJBNzEgLyogQ29va2llU3RvcmFnZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb29raWVTdG9yYWdlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxM0YwMUYwMTI3MEUxOTAwMERGQkE3MSAvKiBDb29r
aWVTdG9yYWdlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
Q29va2llU3RvcmFnZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTE0MjRD
ODkxNjRCM0I0RTAwRjMyRDQwIC8qIFBsYXRmb3JtQ29va2llSmFyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtQ29va2llSmFyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUUxNDI0QzhGMTY0QjQ2MEIwMEYzMkQ0MCAvKiBDb29raWVKYXJNYWMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb29raWVKYXJNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNDI0QzkxMTY0QjUyQzgwMEYzMkQ0MCAv
KiBDb29raWVKYXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29v
a2llSmFyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE0MjRDOTIxNjRCNTJD
ODAwRjMyRDQwIC8qIENvb2tpZUphci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb29raWVKYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE0QTk0RDYxNkRG
REY5NTAwNjhERTgyIC8qIEJsb2JSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBCbG9iUmVnaXN0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTkwNzMsNyArMTkwNzAsNiBAQAogCQkJCUNEQ0Q0MUU2MUMzRERCMDkwMDk2NUQ5OSAv
KiBQYXJzZWRDb250ZW50UmFuZ2UuaCAqLywKIAkJCQk0NDc5NTgwMjE2NDNCNDdCMDAxRTBBN0Yg
LyogUGFyc2VkQ29udGVudFR5cGUuY3BwICovLAogCQkJCTQ0Nzk1ODAzMTY0M0I0N0IwMDFFMEE3
RiAvKiBQYXJzZWRDb250ZW50VHlwZS5oICovLAotCQkJCUUxNDI0Qzg5MTY0QjNCNEUwMEYzMkQ0
MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICovLAogCQkJCTM3QkFBRTU3MTk4MEQxREQwMDVERkU3
MSAvKiBQcm90ZWN0aW9uU3BhY2UuaCAqLywKIAkJCQk1MTRDNzY1RjBDRTkyM0ExMDA3RUYzQ0Qg
LyogUHJvdGVjdGlvblNwYWNlQmFzZS5jcHAgKi8sCiAJCQkJNTE0Qzc2NjAwQ0U5MjNBMTAwN0VG
M0NEIC8qIFByb3RlY3Rpb25TcGFjZUJhc2UuaCAqLywKQEAgLTE5MTEzLDcgKzE5MTA5LDYgQEAK
IAkJCQk1MTRDNzY0MzBDRTkyMzRFMDA3RUYzQ0QgLyogQXV0aGVudGljYXRpb25NYWMubW0gKi8s
CiAJCQkJRTE2NEEyRUIxOTFBRTYzNTAwMTA3MzdEIC8qIEJsb2JEYXRhRmlsZVJlZmVyZW5jZU1h
Yy5tbSAqLywKIAkJCQk1RjJEQkJFNzE3OEUzMzJEMDAxNDE0ODYgLyogQ2VydGlmaWNhdGVJbmZv
TWFjLm1tICovLAotCQkJCUUxNDI0QzhGMTY0QjQ2MEIwMEYzMkQ0MCAvKiBDb29raWVKYXJNYWMu
bW0gKi8sCiAJCQkJRTEzRjAxRjAxMjcwRTE5MDAwREZCQTcxIC8qIENvb2tpZVN0b3JhZ2VNYWMu
bW0gKi8sCiAJCQkJRTFCNENEMjQxMEIzMjJFMjAwQkZGRDdFIC8qIENyZWRlbnRpYWxTdG9yYWdl
TWFjLm1tICovLAogCQkJCTUxNEM3NjQ0MENFOTIzNEUwMDdFRjNDRCAvKiBGb3JtRGF0YVN0cmVh
bU1hYy5oICovLApAQCAtMjk3MTUsNyArMjk3MTAsNiBAQAogCQkJCTQ5M0U1RTA5MTJENjQyMDUw
MDAyMDA4MSAvKiBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJE
NzBCQTEzMTgwNzREREYwMDAxOTA4QSAvKiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTE0OTc4NzExQUJBRjNBNTAwQ0VGN0U0IC8qIFBsYXRmb3JtQ29udGVudEZp
bHRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTE0MjRDOEExNjRCM0I0RTAwRjMyRDQwIC8qIFBs
YXRmb3JtQ29va2llSmFyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVDNzYyQjE0OTdGRTE0MDBC
QzQ3NzUgLyogUGxhdGZvcm1FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjY2MDFFQkYxNEIz
QjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0FBNDg3MDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMu
aCBpbiBIZWFkZXJzICovLApAQCAtMjk4OTQsOCArMjk4ODgsNiBAQAogCQkJCTNDMjQ0RkVBQTM3
NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwQkUwMzBBMjBGMzExMkZCMDAzQzFBNDYgLyogUmVuZGVyTGluZUJveExpc3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDRUE0ODY0MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJMaW5lQnJl
YWsuaCBpbiBIZWFkZXJzICovLAotCQkJCTk0Q0ZENjBBMUZFOTg2N0UwMDI0ODhBRCAvKiBSZW5k
ZXJMaW5lc0NsYW1wRmxvdy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTRDRkQ2MEQxRkVBQ0VGRTAw
MjQ4OEFEIC8qIFJlbmRlckxpbmVzQ2xhbXBTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFCQjU0
MTlGMEFDRERGRTQwMDI4MjBFQiAvKiBSZW5kZXJMaXN0Qm94LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEVBN0E1MjBBMTkxQTUyMDBBOEVGNUYgLyogUmVuZGVyTGlzdEl0ZW0uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4RUE3QTUwMEExOTFBNTIwMEE4RUY1RiAvKiBSZW5kZXJMaXN0TWFya2VyLmgg
aW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVK
YXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5jcHAKaW5kZXggNDliNzk4
ZDdkMmNlYWJkOWE4ZGFmZWRkODUzNDhhMjRhYmE4MmMzZS4uMDY4MzA2NzQ0YWY4MTRiZDI3NjBh
NWUxODY1YTVhOWFiNDM1MmIxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nv
b2tpZUphci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5jcHAKQEAg
LTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0
ZWdpZXMuaCIKICNpbmNsdWRlICJTYW1lU2l0ZUluZm8uaCIKICNpbmNsdWRlIDx3dGYvU3lzdGVt
VHJhY2luZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cmwuY21ha2UKaW5kZXggMTA1MTEzMDY5NjRk
ODcwYWI5ZGZmYTE1ZGJkZTkxMTNkNWQwOTNkMC4uMTYwM2VmODYxNjI4NmVhYjI2ZjczYTgzNGIy
NzAyZjJmMGNlYzcyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5j
bWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJsLmNtYWtlCkBAIC01LDcgKzUs
NiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlv
bkNoYWxsZW5nZUN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0NlcnRpZmljYXRl
SW5mby5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybERhdGFiYXNlLmNwcAogICAgIHBs
YXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ29va2llU3RvcmFnZUN1cmwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Tb3VyY2VzU291cC50eHQgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2Vz
U291cC50eHQKaW5kZXggZDY0ZmNmYmVhMjgxNDdkYWRmNDMwYjJmZmI0YzBmZWE2MGI5NWQ4YS4u
YzAyZTQ5ZTRlNTFlZjc0OTMxZjcwZGQ4NjU1ZDM0ZGUyZDYzZTQ4YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc1NvdXAudHh0CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NvdXJjZXNTb3VwLnR4dApAQCAtMjMsNyArMjMsNiBAQAogCiBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTb3VwLmNwcAogcGxhdGZvcm0vbmV0
d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5jcHAKLXBsYXRmb3JtL25ldHdvcmsvc291cC9Db29r
aWVKYXJTb3VwLmNwcAogcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVNvdXAuY3BwCiBwbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU3RvcmFnZVNvdXAuY3BwCiBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvQ3JlZGVudGlhbFN0b3JhZ2VTb3VwLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24uY3BwCmluZGV4IDMwMmE4ZDY3ODliMGM5
OGE5NjBlMjMzYmE0MjgyY2QyZTc4MjY3M2UuLjkxMGZiZjk1NjgyMWZiNzBjNmU2MzI1MWYwYWI0
ODE1MjIzZjFlMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Q2FjaGVWYWxpZGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0NhY2hlVmFsaWRhdGlvbi5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJDb29raWVz
U3RyYXRlZ3kuaCIKICNpbmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCiAjaW5jbHVkZSAiTmV0d29y
a1N0b3JhZ2VTZXNzaW9uLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCkBAIC0zMzgsNyArMzM3LDcgQEAgc3RhdGlj
IFN0cmluZyBoZWFkZXJWYWx1ZUZvclZhcnkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBjb25zdCBTdHJpbmcmIGgKICAgICAgICAgYXV0byogY29va2llU3RyYXRlZ3kgPSBwbGF0Zm9y
bVN0cmF0ZWdpZXMoKSA/IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5jb29raWVzU3RyYXRlZ3koKSA6
IG51bGxwdHI7CiAgICAgICAgIGlmICghY29va2llU3RyYXRlZ3kpIHsKICAgICAgICAgICAgIEFT
U0VSVChzZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSwgcmVxdWVzdC5maXJzdFBhcnR5
Rm9yQ29va2llcygpLCBTYW1lU2l0ZUluZm86OmNyZWF0ZShyZXF1ZXN0KSwgcmVxdWVzdC51cmwo
KSwgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQsIGluY2x1ZGVTZWN1cmVDb29raWVzKS5maXJz
dDsKKyAgICAgICAgICAgIHJldHVybiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9y
YWdlU2Vzc2lvbigpLmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHJlcXVlc3QuZmlyc3RQ
YXJ0eUZvckNvb2tpZXMoKSwgU2FtZVNpdGVJbmZvOjpjcmVhdGUocmVxdWVzdCksIHJlcXVlc3Qu
dXJsKCksIHN0ZDo6bnVsbG9wdCwgc3RkOjpudWxsb3B0LCBpbmNsdWRlU2VjdXJlQ29va2llcyku
Zmlyc3Q7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvb2tpZVN0cmF0ZWd5LT5jb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShzZXNzaW9uSUQsIHJlcXVlc3QuZmlyc3RQYXJ0eUZvckNv
b2tpZXMoKSwgU2FtZVNpdGVJbmZvOjpjcmVhdGUocmVxdWVzdCksIHJlcXVlc3QudXJsKCksIHN0
ZDo6bnVsbG9wdCwgc3RkOjpudWxsb3B0LCBpbmNsdWRlU2VjdXJlQ29va2llcykuZmlyc3Q7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3Jr
U3RvcmFnZVNlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29y
a1N0b3JhZ2VTZXNzaW9uLmgKaW5kZXggNmU5OTM5M2RmMmI4OWQ2YzBmZmRhZGQ5ZjI0MWFiOGZj
MDkyZmI5My4uMDhhODJkZDVhM2QwODliM2JhNGY4YjBkZDU0MTYzNTQyODdlMjUxNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Np
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdl
U2Vzc2lvbi5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9XYWxsVGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAj
aWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShDRlVSTENPTk5FQ1RJT04pCkBAIC02NCw2ICs2NSwx
MCBAQCBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiBjbGFzcyBTb3VwTmV0d29ya1Nlc3Npb247CiAK
IHN0cnVjdCBDb29raWU7CitzdHJ1Y3QgQ29va2llUmVxdWVzdEhlYWRlckZpZWxkUHJveHk7Citz
dHJ1Y3QgU2FtZVNpdGVJbmZvOworCitlbnVtIGNsYXNzIEluY2x1ZGVTZWN1cmVDb29raWVzOwog
CiBjbGFzcyBOZXR3b3JrU3RvcmFnZVNlc3Npb24gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMTM3
LDEyICsxNDIsMjQgQEAgcHVibGljOgogICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0KCkg
Y29uc3Q7CiAjZW5kaWYKIAorICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgY29va2llc0VuYWJsZWQo
KSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENvb2tpZShjb25zdCBDb29raWUm
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENvb2tpZXMoY29uc3QgVmVjdG9yPENvb2tp
ZT4mLCBjb25zdCBVUkwmLCBjb25zdCBVUkwmIG1haW5Eb2N1bWVudFVSTCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRDb29raWVzRnJvbURPTShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNv
bnN0IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZy
YW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgY29uc3QgU3RyaW5nJikgY29u
c3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVDb29raWUoY29uc3QgQ29va2llJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVDb29raWUoY29uc3QgVVJMJiwgY29uc3Qg
U3RyaW5nJikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVBbGxDb29raWVz
KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5j
ZShXYWxsVGltZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVDb29raWVzRm9ySG9z
dG5hbWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb29raWVIb3N0TmFtZXMpOwogICAgIFdFQkNP
UkVfRVhQT1JUIFZlY3RvcjxDb29raWU+IGdldEFsbENvb2tpZXMoKTsKICAgICBXRUJDT1JFX0VY
UE9SVCBWZWN0b3I8Q29va2llPiBnZXRDb29raWVzKGNvbnN0IFVSTCYpOworICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNh
bWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQs
IHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgVmVjdG9yPENvb2tpZT4mKSBjb25zdDsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZsdXNoQ29va2llU3RvcmUoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9z
dG5hbWVzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29r
aWVzRm9yRE9NKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29u
c3QgVVJMJiwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1
aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcykgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBV
UkwmLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2
NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVzKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eSYpIGNvbnN0OworCiAKIHByaXZh
dGU6CiAgICAgc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxO
ZXR3b3JrU3RvcmFnZVNlc3Npb24+PiYgZ2xvYmFsU2Vzc2lvbk1hcCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybUNvb2tpZUphci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybUNvb2tpZUphci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODk0M2Q5Y2Y4MTgxZjYzODA0NjNlZTg3YmYxOTMxNzQ0
NzY1YzNjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1Db29raWVKYXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIFVSTDsKLWNsYXNzIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjsKLQotc3RydWN0IENvb2tp
ZTsKLXN0cnVjdCBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eTsKLXN0cnVjdCBTYW1lU2l0
ZUluZm87Ci0KLWVudW0gY2xhc3MgSW5jbHVkZVNlY3VyZUNvb2tpZXM7Ci0KLS8vIEZJWE1FOiBU
aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgTmV0d29ya1N0b3JhZ2VTZXNzaW9uIG1lbWJlciBmdW5j
dGlvbnMuCi0KLVdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZXNG
b3JET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5
LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90
PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVD
b29raWVzKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q29va2llc0Zyb21ET00oY29uc3QgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0
ZUluZm8mLCBjb25zdCBVUkwmLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIGNvbnN0IFN0cmluZyYpOwotV0VCQ09SRV9FWFBP
UlQgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mKTsKLVdF
QkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFVSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiwgc3RkOjpvcHRpb25hbDx1aW50
NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2Vj
dXJlQ29va2llcyk7Ci1XRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBj
b25zdCBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eSYpOwotV0VCQ09SRV9FWFBPUlQgYm9v
bCBnZXRSYXdDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFVSTCYg
Zmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiwgc3RkOjpvcHRpb25h
bDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBWZWN0
b3I8Q29va2llPiYpOwotV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVDb29raWUoY29uc3QgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJik7Ci1XRUJDT1JF
X0VYUE9SVCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiYsIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsKLVdFQkNPUkVfRVhQT1JUIHZv
aWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24m
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgY29va2llSG9zdE5hbWVzKTsKLVdFQkNPUkVfRVhQT1JU
IHZvaWQgZGVsZXRlQWxsQ29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mKTsKLVdF
QkNPUkVfRVhQT1JUIHZvaWQgZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoY29uc3QgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiwgV2FsbFRpbWUpOwotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmNwcApp
bmRleCA3NTlkNjNhNDY4NWJmZGFmYTcyNzAwNWJiNzQ0YzhhNTY3YWQxYWMzLi4zODliNmVhMDM2
NmE2OWFmYzY1Y2EzMGYxODU3MWRkZjQ0MGFlNGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5jcHAKQEAg
LTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5
LmgiCiAjaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1Db29raWVKYXIuaCIKICNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCIKICNp
bmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KIApAQCAtODUsNyArODQsNyBAQCBzdGF0aWMgc3RkOjpv
cHRpb25hbDxzdGQ6OnBhaXI8VmVjdG9yPHVpbnQ4X3Q+LCBib29sPj4gY29va2llRGF0YUZvckhh
bmRzaGFrZShjbwogICAgIAogICAgIFN0cmluZyBjb29raWVEYXRhU3RyaW5nOwogICAgIGJvb2wg
c2VjdXJlQ29va2llc0FjY2Vzc2VkID0gZmFsc2U7Ci0gICAgc3RkOjp0aWUoY29va2llRGF0YVN0
cmluZywgc2VjdXJlQ29va2llc0FjY2Vzc2VkKSA9IFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKCpuZXR3b3JrU3RvcmFnZVNlc3Npb24sIGhlYWRlckZpZWxkUHJveHkpOwor
ICAgIHN0ZDo6dGllKGNvb2tpZURhdGFTdHJpbmcsIHNlY3VyZUNvb2tpZXNBY2Nlc3NlZCkgPSBu
ZXR3b3JrU3RvcmFnZVNlc3Npb24tPmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGhlYWRl
ckZpZWxkUHJveHkpOwogICAgIGlmIChjb29raWVEYXRhU3RyaW5nLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIHN0ZDo6cGFpcjxWZWN0b3I8dWludDhfdD4sIGJvb2w+IHsgeyB9LCBzZWN1cmVD
b29raWVzQWNjZXNzZWQgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAppbmRleCAxZTBjNzRhMjdhYzA2OGY3NWE5ZjMz
MTBmZjc0Zjk2NzA5MDM1NGMzLi42OGQ2OGZiN2ZmNTRmOTY3YjBmZDg2NDQxYzEyZmEwNjc4ODkz
NzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tp
ZUphckNGTmV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nv
b2tpZUphckNGTmV0LmNwcApAQCAtMjQsNyArMjQsNiBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvb2tpZUphci5oIgogCiAjaWYgVVNFKENGVVJMQ09O
TkVDVElPTikKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0LmNwcAppbmRleCA0ZTMxMDU2
MTBjOTliOWU4NmYzZGFiMTRkZDVmY2MzYzVkMzFkMzA3Li5hOTM0M2M0NmYzZTY2ZTYwZTM2ZTkx
YjQ4MDgzNWQ3Nzc0MjYyYTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0LmNwcApA
QCAtMzYsNiArMzYsNDYgQEAKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNlbHNlCiAj
aW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgor
I2VuZGlmCisjaWYgVVNFKENGVVJMQ09OTkVDVElPTikKKyNpbmNsdWRlICJDb29raWUuaCIKKyNp
bmNsdWRlICJDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eS5oIgorI2luY2x1ZGUgIkNvb2tp
ZXNTdHJhdGVneS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiVVJM
LmgiCisjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGSFRUUENvb2tpZXNQcml2Lmg+CisjaW5jbHVkZSA8
Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1J
bnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jZi9D
Rk5ldHdvcmtTUEkuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d3RmL1NvZnRM
aW5raW5nLmg+CisjaW5jbHVkZSA8d3RmL2NmL1R5cGVDYXN0c0NGLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK2VudW0geworICAgIENGSFRUUENvb2tpZVN0b3JhZ2VBY2Nl
cHRQb2xpY3lFeGNsdXNpdmVseUZyb21NYWluRG9jdW1lbnREb21haW4gPSAzCit9OworCituYW1l
c3BhY2UgV1RGIHsKKworI2RlZmluZSBERUNMQVJFX0NGX1RZUEVfVFJBSVQoQ2xhc3NOYW1lKSBc
Cit0ZW1wbGF0ZSA8PiBcCitzdHJ1Y3QgQ0ZUeXBlVHJhaXQ8Q2xhc3NOYW1lIyNSZWY+IHsgXAor
c3RhdGljIGlubGluZSBDRlR5cGVJRCB0eXBlSUQoKSB7IHJldHVybiBDbGFzc05hbWUjI0dldFR5
cGVJRCgpOyB9IFwKK307CisKKyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNh
dGVkLWRlY2xhcmF0aW9ucyIKKyNlbmRpZgorREVDTEFSRV9DRl9UWVBFX1RSQUlUKENGSFRUUENv
b2tpZSk7CisjaWYgQ09NUElMRVIoQ0xBTkcpCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9w
CisjZW5kaWYKKworI3VuZGVmIERFQ0xBUkVfQ0ZfVFlQRV9UUkFJVAorfSAvLyBuYW1lc3BhY2Ug
V1RGCisKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MDIsNCArNDQyLDI2MyBA
QCB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llcyhjb25zdCBWZWN0b3I8Q29v
a2llPiYsIGNvbnN0IFVSTCYsIGNvbnN0CiB9CiAjZW5kaWYKIAorfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjaWYgVVNFKENGVVJMQ09OTkVDVElPTikKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgc19zZXRDb29raWVLZXlDRiA9IENGU1RSKCJTZXQt
Q29va2llIik7CitzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgc19jb29raWVDRiA9IENGU1RSKCJD
b29raWUiKTsKK3N0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBzX2NyZWF0ZWRDRiA9IENGU1RSKCJD
cmVhdGVkIik7CisKK3N0YXRpYyBpbmxpbmUgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjb29raWVE
b21haW4oQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSkKK3sKKyAgICByZXR1cm4gYWRvcHRDRihDRkhU
VFBDb29raWVDb3B5RG9tYWluKGNvb2tpZSkpOworfQorCitzdGF0aWMgZG91YmxlIGNhbm9uaWNh
bENvb2tpZVRpbWUoZG91YmxlIHRpbWUpCit7CisgICAgaWYgKCF0aW1lKQorICAgICAgICByZXR1
cm4gdGltZTsKKworICAgIHJldHVybiAodGltZSArIGtDRkFic29sdXRlVGltZUludGVydmFsU2lu
Y2UxOTcwKSAqIDEwMDA7Cit9CisKK3N0YXRpYyBkb3VibGUgY29va2llQ3JlYXRlZFRpbWUoQ0ZI
VFRQQ29va2llUmVmIGNvb2tpZSkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBw
cm9wcyA9IGFkb3B0Q0YoQ0ZIVFRQQ29va2llQ29weVByb3BlcnRpZXMoY29va2llKSk7CisgICAg
YXV0byB2YWx1ZSA9IENGRGljdGlvbmFyeUdldFZhbHVlKHByb3BzLmdldCgpLCBzX2NyZWF0ZWRD
Rik7CisKKyAgICBhdXRvIGFzTnVtYmVyID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPih2
YWx1ZSk7CisgICAgaWYgKGFzTnVtYmVyKSB7CisgICAgICAgIGRvdWJsZSBhc0RvdWJsZTsKKyAg
ICAgICAgaWYgKENGTnVtYmVyR2V0VmFsdWUoYXNOdW1iZXIsIGtDRk51bWJlckZsb2F0NjRUeXBl
LCAmYXNEb3VibGUpKQorICAgICAgICAgICAgcmV0dXJuIGNhbm9uaWNhbENvb2tpZVRpbWUoYXNE
b3VibGUpOworICAgICAgICByZXR1cm4gMC4wOworICAgIH0KKworICAgIGF1dG8gYXNTdHJpbmcg
PSBkeW5hbWljX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KHZhbHVlKTsKKyAgICBpZiAoYXNTdHJpbmcp
CisgICAgICAgIHJldHVybiBjYW5vbmljYWxDb29raWVUaW1lKENGU3RyaW5nR2V0RG91YmxlVmFs
dWUoYXNTdHJpbmcpKTsKKworICAgIHJldHVybiAwLjA7Cit9CisKK3N0YXRpYyBpbmxpbmUgQ0ZB
YnNvbHV0ZVRpbWUgY29va2llRXhwaXJhdGlvblRpbWUoQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSkK
K3sKKyAgICByZXR1cm4gY2Fub25pY2FsQ29va2llVGltZShDRkhUVFBDb29raWVHZXRFeHBpcmF0
aW9uVGltZShjb29raWUpKTsKK30KKworc3RhdGljIGlubGluZSBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IGNvb2tpZU5hbWUoQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSkKK3sKKyAgICByZXR1cm4gYWRv
cHRDRihDRkhUVFBDb29raWVDb3B5TmFtZShjb29raWUpKTsKK30KKworc3RhdGljIGlubGluZSBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNvb2tpZVBhdGgoQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSkK
K3sKKyAgICByZXR1cm4gYWRvcHRDRihDRkhUVFBDb29raWVDb3B5UGF0aChjb29raWUpKTsKK30K
Kworc3RhdGljIGlubGluZSBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNvb2tpZVZhbHVlKENGSFRU
UENvb2tpZVJlZiBjb29raWUpCit7CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZIVFRQQ29va2llQ29w
eVZhbHVlKGNvb2tpZSkpOworfQorCitzdGF0aWMgUmV0YWluUHRyPENGQXJyYXlSZWY+IGZpbHRl
ckNvb2tpZXMoQ0ZBcnJheVJlZiB1bmZpbHRlcmVkQ29va2llcykKK3sKKyAgICBBU1NFUlQodW5m
aWx0ZXJlZENvb2tpZXMpOworICAgIENGSW5kZXggY291bnQgPSBDRkFycmF5R2V0Q291bnQodW5m
aWx0ZXJlZENvb2tpZXMpOworICAgIFJldGFpblB0cjxDRk11dGFibGVBcnJheVJlZj4gZmlsdGVy
ZWRDb29raWVzID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZSgwLCBjb3VudCwgJmtDRlR5
cGVBcnJheUNhbGxCYWNrcykpOworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKKyAgICAgICAgQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSA9IChDRkhUVFBDb29raWVSZWYp
Q0ZBcnJheUdldFZhbHVlQXRJbmRleCh1bmZpbHRlcmVkQ29va2llcywgaSk7CisKKyAgICAgICAg
Ly8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IENGSFRUUENvb2tpZVN0b3JhZ2Ugd291bGQgc3Rv
cmUgYW4gZW1wdHkgY29va2llLAorICAgICAgICAvLyB3aGljaCB3b3VsZCBiZSBzZW50IGFzICJD
b29raWU6ID0iLiBXZSBoYXZlIGEgd29ya2Fyb3VuZCBpbiBzZXRDb29raWVzKCkgdG8gcHJldmVu
dAorICAgICAgICAvLyB0aGF0LCBidXQgd2UgYWxzbyBuZWVkIHRvIGF2b2lkIHNlbmRpbmcgY29v
a2llcyB0aGF0IHdlcmUgcHJldmlvdXNseSBzdG9yZWQsIGFuZAorICAgICAgICAvLyB0aGVyZSdz
IG5vIGhhcm0gdG8gZG9pbmcgdGhpcyBjaGVjayBiZWNhdXNlIHN1Y2ggYSBjb29raWUgaXMgbmV2
ZXIgdmFsaWQuCisgICAgICAgIGlmICghQ0ZTdHJpbmdHZXRMZW5ndGgoY29va2llTmFtZShjb29r
aWUpLmdldCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChDRkhUVFBD
b29raWVJc0hUVFBPbmx5KGNvb2tpZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBDRkFycmF5QXBwZW5kVmFsdWUoZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29raWUpOworICAg
IH0KKyAgICByZXR1cm4gZmlsdGVyZWRDb29raWVzOworfQorCitzdGF0aWMgUmV0YWluUHRyPENG
QXJyYXlSZWY+IGNvcHlDb29raWVzRm9yVVJMV2l0aEZpcnN0UGFydHlVUkwoY29uc3QgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVS
TCYgdXJsLCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykKK3sKKyAg
ICBib29sIHNlY3VyZSA9IGluY2x1ZGVTZWN1cmVDb29raWVzID09IEluY2x1ZGVTZWN1cmVDb29r
aWVzOjpZZXM7CisKKyAgICBBU1NFUlQoIXNlY3VyZSB8fCAoc2VjdXJlICYmIHVybC5wcm90b2Nv
bElzKCJodHRwcyIpKSk7CisKKyAgICBVTlVTRURfUEFSQU0oZmlyc3RQYXJ0eSk7CisgICAgcmV0
dXJuIGFkb3B0Q0YoQ0ZIVFRQQ29va2llU3RvcmFnZUNvcHlDb29raWVzRm9yVVJMKHNlc3Npb24u
Y29va2llU3RvcmFnZSgpLmdldCgpLCB1cmwuY3JlYXRlQ0ZVUkwoKS5nZXQoKSwgc2VjdXJlKSk7
Cit9CisKK3N0YXRpYyBDRkFycmF5UmVmIGNyZWF0ZUNvb2tpZXMoQ0ZEaWN0aW9uYXJ5UmVmIGhl
YWRlckZpZWxkcywgQ0ZVUkxSZWYgdXJsKQoreworICAgIENGQXJyYXlSZWYgcGFyc2VkQ29va2ll
cyA9IENGSFRUUENvb2tpZUNyZWF0ZVdpdGhSZXNwb25zZUhlYWRlckZpZWxkcyhrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBoZWFkZXJGaWVsZHMsIHVybCk7CisgICAgaWYgKCFwYXJzZWRDb29raWVzKQor
ICAgICAgICBwYXJzZWRDb29raWVzID0gQ0ZBcnJheUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCAwLCAwLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKKworICAgIHJldHVybiBwYXJzZWRDb29r
aWVzOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llc0Zyb21ET00o
Y29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVy
bCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRf
dD4gcGFnZUlELCBjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAoreworICAgIFVOVVNFRF9QQVJB
TShmcmFtZUlEKTsKKyAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKKyAgICAvLyA8cmRhcjovL3By
b2JsZW0vNTYzMjg4Mz4gQ0ZIVFRQQ29va2llU3RvcmFnZSBzdG9yZXMgYW4gZW1wdHkgY29va2ll
LCB3aGljaCB3b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLgorICAgIGlmICh2YWx1ZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsQ0Yg
PSB1cmwuY3JlYXRlQ0ZVUkwoKTsKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpcnN0UGFydHlG
b3JDb29raWVzQ0YgPSBmaXJzdFBhcnR5LmNyZWF0ZUNGVVJMKCk7CisKKyAgICAvLyA8aHR0cDov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzMT4sIDxyZGFyOi8vNDQwOTAzND4K
KyAgICAvLyBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzIGRvZXNuJ3QgcGFyc2UgY29v
a2llcyB3aXRob3V0IGEgdmFsdWUKKyAgICBTdHJpbmcgY29va2llU3RyaW5nID0gdmFsdWUuY29u
dGFpbnMoJz0nKSA/IHZhbHVlIDogdmFsdWUgKyAiPSI7CisKKyAgICBSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+IGNvb2tpZVN0cmluZ0NGID0gY29va2llU3RyaW5nLmNyZWF0ZUNGU3RyaW5nKCk7Cisg
ICAgYXV0byBjb29raWVTdHJpbmdDRlB0ciA9IGNvb2tpZVN0cmluZ0NGLmdldCgpOworICAgIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGhlYWRlckZpZWxkc0NGID0gYWRvcHRDRihDRkRpY3Rp
b25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwKKyAgICAgICAgKGNvbnN0IHZvaWQqKikm
c19zZXRDb29raWVLZXlDRiwgKGNvbnN0IHZvaWQqKikmY29va2llU3RyaW5nQ0ZQdHIsIDEsCisg
ICAgICAgICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5
VmFsdWVDYWxsQmFja3MpKTsKKworICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiB1bmZpbHRlcmVk
Q29va2llcyA9IGFkb3B0Q0YoY3JlYXRlQ29va2llcyhoZWFkZXJGaWVsZHNDRi5nZXQoKSwgdXJs
Q0YuZ2V0KCkpKTsKKyAgICBDRkhUVFBDb29raWVTdG9yYWdlU2V0Q29va2llcyhjb29raWVTdG9y
YWdlKCkuZ2V0KCksIGZpbHRlckNvb2tpZXModW5maWx0ZXJlZENvb2tpZXMuZ2V0KCkpLmdldCgp
LCB1cmxDRi5nZXQoKSwgZmlyc3RQYXJ0eUZvckNvb2tpZXNDRi5nZXQoKSk7Cit9CisKK3N0YXRp
YyBib29sIGNvbnRhaW5zU2VjdXJlQ29va2llcyhDRkFycmF5UmVmIGNvb2tpZXMpCit7CisgICAg
Q0ZJbmRleCBjb29raWVDb3VudCA9IENGQXJyYXlHZXRDb3VudChjb29raWVzKTsKKyAgICB3aGls
ZSAoY29va2llQ291bnQtLSkgeworICAgICAgICBpZiAoQ0ZIVFRQQ29va2llSXNTZWN1cmUoY2hl
Y2tlZF9jZl9jYXN0PENGSFRUUENvb2tpZVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChjb29r
aWVzLCBjb29raWVDb3VudCkpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gTmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpjb29raWVzRm9yRE9NKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3Qg
U2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZy
YW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tp
ZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpIGNvbnN0Cit7CisgICAgVU5VU0VEX1BBUkFNKGZyYW1l
SUQpOworICAgIFVOVVNFRF9QQVJBTShwYWdlSUQpOworICAgIFJldGFpblB0cjxDRkFycmF5UmVm
PiBjb29raWVzQ0YgPSBjb3B5Q29va2llc0ZvclVSTFdpdGhGaXJzdFBhcnR5VVJMKCp0aGlzLCBm
aXJzdFBhcnR5LCB1cmwsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKKworICAgIGF1dG8gZmlsdGVy
ZWRDb29raWVzID0gZmlsdGVyQ29va2llcyhjb29raWVzQ0YuZ2V0KCkpOworCisgICAgYm9vbCBk
aWRBY2Nlc3NTZWN1cmVDb29raWVzID0gY29udGFpbnNTZWN1cmVDb29raWVzKGZpbHRlcmVkQ29v
a2llcy5nZXQoKSk7CisKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBoZWFkZXJDRiA9
IGFkb3B0Q0YoQ0ZIVFRQQ29va2llQ29weVJlcXVlc3RIZWFkZXJGaWVsZHMoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgZmlsdGVyZWRDb29raWVzLmdldCgpKSk7CisgICAgU3RyaW5nIGNvb2tpZVN0cmlu
ZyA9IGNoZWNrZWRfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaGVh
ZGVyQ0YuZ2V0KCksIHNfY29va2llQ0YpKTsKKyAgICByZXR1cm4geyBjb29raWVTdHJpbmcsIGRp
ZEFjY2Vzc1NlY3VyZUNvb2tpZXMgfTsKIH0KKworc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBV
UkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYgdXJsLCBzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdl
SUQsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKSBjb25zdAorewor
ICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsKKyAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKKyAg
ICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY29va2llc0NGID0gY29weUNvb2tpZXNGb3JVUkxXaXRo
Rmlyc3RQYXJ0eVVSTCgqdGhpcywgZmlyc3RQYXJ0eSwgdXJsLCBpbmNsdWRlU2VjdXJlQ29va2ll
cyk7CisKKyAgICBib29sIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMgPSBjb250YWluc1NlY3VyZUNv
b2tpZXMoY29va2llc0NGLmdldCgpKTsKKworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
IGhlYWRlckNGID0gYWRvcHRDRihDRkhUVFBDb29raWVDb3B5UmVxdWVzdEhlYWRlckZpZWxkcyhr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBjb29raWVzQ0YuZ2V0KCkpKTsKKyAgICBTdHJpbmcgY29va2ll
U3RyaW5nID0gY2hlY2tlZF9jZl9jYXN0PENGU3RyaW5nUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1
ZShoZWFkZXJDRi5nZXQoKSwgc19jb29raWVDRikpOworICAgIHJldHVybiB7IGNvb2tpZVN0cmlu
ZywgZGlkQWNjZXNzU2VjdXJlQ29va2llcyB9OworfQorCitzdGQ6OnBhaXI8U3RyaW5nLCBib29s
PiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNv
bnN0IENvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5JiBoZWFkZXJGaWVsZFByb3h5KSBjb25z
dAoreworICAgIHJldHVybiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSgqdGhpcywgaGVh
ZGVyRmllbGRQcm94eS5maXJzdFBhcnR5LCBoZWFkZXJGaWVsZFByb3h5LnNhbWVTaXRlSW5mbywg
aGVhZGVyRmllbGRQcm94eS51cmwsIGhlYWRlckZpZWxkUHJveHkuZnJhbWVJRCwgaGVhZGVyRmll
bGRQcm94eS5wYWdlSUQsIGhlYWRlckZpZWxkUHJveHkuaW5jbHVkZVNlY3VyZUNvb2tpZXMpOwor
fQorCitib29sIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0VuYWJsZWQoKSBjb25zdAor
eworICAgIENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3kgcG9saWN5ID0gQ0ZIVFRQQ29v
a2llU3RvcmFnZUdldENvb2tpZUFjY2VwdFBvbGljeShjb29raWVTdG9yYWdlKCkuZ2V0KCkpOwor
ICAgIHJldHVybiBwb2xpY3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlG
cm9tTWFpbkRvY3VtZW50RG9tYWluIHx8IHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdlQWNj
ZXB0UG9saWN5RXhjbHVzaXZlbHlGcm9tTWFpbkRvY3VtZW50RG9tYWluIHx8IHBvbGljeSA9PSBD
RkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5QWx3YXlzOworfQorCitib29sIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6Z2V0UmF3Q29va2llcyhjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0
IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBm
cmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIFZlY3RvcjxDb29raWU+JiBy
YXdDb29raWVzKSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsKKyAgICBVTlVT
RURfUEFSQU0ocGFnZUlEKTsKKyAgICByYXdDb29raWVzLmNsZWFyKCk7CisKKyAgICBhdXRvIGlu
Y2x1ZGVTZWN1cmVDb29raWVzID0gdXJsLnByb3RvY29sSXMoImh0dHBzIikgPyBJbmNsdWRlU2Vj
dXJlQ29va2llczo6WWVzIDogSW5jbHVkZVNlY3VyZUNvb2tpZXM6Ok5vOworCisgICAgUmV0YWlu
UHRyPENGQXJyYXlSZWY+IGNvb2tpZXNDRiA9IGNvcHlDb29raWVzRm9yVVJMV2l0aEZpcnN0UGFy
dHlVUkwoKnRoaXMsIGZpcnN0UGFydHksIHVybCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOworCisg
ICAgQ0ZJbmRleCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChjb29raWVzQ0YuZ2V0KCkpOworICAg
IHJhd0Nvb2tpZXMucmVzZXJ2ZUNhcGFjaXR5KGNvdW50KTsKKworICAgIGZvciAoQ0ZJbmRleCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgQ0ZIVFRQQ29va2llUmVmIGNmQ29va2ll
ID0gY2hlY2tlZF9jZl9jYXN0PENGSFRUUENvb2tpZVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRl
eChjb29raWVzQ0YuZ2V0KCksIGkpKTsKKyAgICAgICAgQ29va2llIGNvb2tpZTsKKyAgICAgICAg
Y29va2llLm5hbWUgPSBjb29raWVOYW1lKGNmQ29va2llKS5nZXQoKTsKKyAgICAgICAgY29va2ll
LnZhbHVlID0gY29va2llVmFsdWUoY2ZDb29raWUpLmdldCgpOworICAgICAgICBjb29raWUuZG9t
YWluID0gY29va2llRG9tYWluKGNmQ29va2llKS5nZXQoKTsKKyAgICAgICAgY29va2llLnBhdGgg
PSBjb29raWVQYXRoKGNmQ29va2llKS5nZXQoKTsKKyAgICAgICAgY29va2llLmNyZWF0ZWQgPSBj
b29raWVDcmVhdGVkVGltZShjZkNvb2tpZSk7CisgICAgICAgIGNvb2tpZS5leHBpcmVzID0gY29v
a2llRXhwaXJhdGlvblRpbWUoY2ZDb29raWUpOworICAgICAgICBjb29raWUuaHR0cE9ubHkgPSBD
RkhUVFBDb29raWVJc0hUVFBPbmx5KGNmQ29va2llKTsKKyAgICAgICAgY29va2llLnNlY3VyZSA9
IENGSFRUUENvb2tpZUlzU2VjdXJlKGNmQ29va2llKTsKKyAgICAgICAgY29va2llLnNlc3Npb24g
PSBmYWxzZTsgLy8gRklYTUU6IE5lZWQgQVBJIGZvciBpZiBhIGNvb2tpZSBpcyBhIHNlc3Npb24g
Y29va2llLgorICAgICAgICByYXdDb29raWVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGNvb2tp
ZSkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6ZGVsZXRlQ29va2llKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUp
IGNvbnN0Cit7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0
b3JhZ2UgPSBjb29raWVTdG9yYWdlKCk7CisKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENG
ID0gdXJsLmNyZWF0ZUNGVVJMKCk7CisKKyAgICBib29sIHNlbmRTZWN1cmVDb29raWVzID0gdXJs
LnByb3RvY29sSXMoImh0dHBzIik7CisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXND
RiA9IGFkb3B0Q0YoQ0ZIVFRQQ29va2llU3RvcmFnZUNvcHlDb29raWVzRm9yVVJMKGNvb2tpZVN0
b3JhZ2UuZ2V0KCksIHVybENGLmdldCgpLCBzZW5kU2VjdXJlQ29va2llcykpOworCisgICAgQ0ZJ
bmRleCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChjb29raWVzQ0YuZ2V0KCkpOworICAgIGZvciAo
Q0ZJbmRleCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgQ0ZIVFRQQ29va2llUmVm
IGNvb2tpZSA9IGNoZWNrZWRfY2ZfY2FzdDxDRkhUVFBDb29raWVSZWY+KENGQXJyYXlHZXRWYWx1
ZUF0SW5kZXgoY29va2llc0NGLmdldCgpLCBpKSk7CisgICAgICAgIGlmIChTdHJpbmcoY29va2ll
TmFtZShjb29raWUpLmdldCgpKSA9PSBuYW1lKSB7CisgICAgICAgICAgICBDRkhUVFBDb29raWVT
dG9yYWdlRGVsZXRlQ29va2llKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNl
c3Npb246OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVz
KQoreworICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBjb29raWVzQ0YgPSBhZG9wdENGKENGSFRU
UENvb2tpZVN0b3JhZ2VDb3B5Q29va2llcyhjb29raWVTdG9yYWdlKCkuZ2V0KCkpKTsKKyAgICBp
ZiAoIWNvb2tpZXNDRikKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0ZJbmRleCBjb3VudCA9IENG
QXJyYXlHZXRDb3VudChjb29raWVzQ0YuZ2V0KCkpOworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSA9IGNoZWNr
ZWRfY2ZfY2FzdDxDRkhUVFBDb29raWVSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY29va2ll
c0NGLmdldCgpLCBpKSk7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZG9tYWluID0g
Y29va2llRG9tYWluKGNvb2tpZSk7CisgICAgICAgIGhvc3RuYW1lcy5hZGQoZG9tYWluLmdldCgp
KTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVBbGxDb29r
aWVzKCkKK3sKKyAgICBDRkhUVFBDb29raWVTdG9yYWdlRGVsZXRlQWxsQ29va2llcyhjb29raWVT
dG9yYWdlKCkuZ2V0KCkpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKQorewor
fQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVk
U2luY2UoV2FsbFRpbWUpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFVTRShDRlVSTENPTk5FQ1RJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2Nv
YS5tbQppbmRleCAzYTNkZjBmYTUwMzZjYTE1OTliYTMyM2IwNTFhYjMwMzI5MWJmYjk0Li4yMWIx
NDg2NTJmYTU1OTk1ZTVkNzFkZWFmYzQ4NmRmNDFmZDhjODhhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29h
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0
b3JhZ2VTZXNzaW9uQ29jb2EubW0KQEAgLTI3LDExICsyNywyNyBAQAogI2ltcG9ydCAiTmV0d29y
a1N0b3JhZ2VTZXNzaW9uLmgiCiAKICNpbXBvcnQgIkNvb2tpZS5oIgorI2ltcG9ydCAiQ29va2ll
UmVxdWVzdEhlYWRlckZpZWxkUHJveHkuaCIKICNpbXBvcnQgIkNvb2tpZVN0b3JhZ2VPYnNlcnZl
ci5oIgorI2ltcG9ydCAiQ29va2llc1N0cmF0ZWd5LmgiCisjaW1wb3J0ICJTYW1lU2l0ZUluZm8u
aCIKICNpbXBvcnQgIlVSTC5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4K
ICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CisjaW1wb3J0IDx3dGYvT3B0aW9u
YWwuaD4KICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CisjaW1wb3J0IDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CisKK0BpbnRlcmZhY2UgTlNVUkwgKCkKKy0gKENGVVJMUmVmKV9j
ZnVybDsKK0BlbmQKKworI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTAxNDAwKSB8fCAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMjAwMDApCitAaW50ZXJmYWNlIE5TSFRUUENvb2tpZVN0
b3JhZ2UgKFN0YWdpbmcpCistICh2b2lkKV9nZXRDb29raWVzRm9yVVJMOihOU1VSTCAqKXVybCBt
YWluRG9jdW1lbnRVUkw6KE5TVVJMICopbWFpbkRvY3VtZW50VVJMIHBhcnRpdGlvbjooTlNTdHJp
bmcgKilwYXJ0aXRpb24gcG9saWN5UHJvcGVydGllczooTlNEaWN0aW9uYXJ5Kilwcm9wcyBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNBcnJheSAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0g
KHZvaWQpX3NldENvb2tpZXM6KE5TQXJyYXkgKiljb29raWVzIGZvclVSTDooTlNVUkwgKilVUkwg
bWFpbkRvY3VtZW50VVJMOihOU1VSTCAqKW1haW5Eb2N1bWVudFVSTCBwb2xpY3lQcm9wZXJ0aWVz
OihOU0RpY3Rpb25hcnkqKSBwcm9wczsKK0BlbmQKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTE1MCw0ICsxNjYsNDE4IEBAIENGVVJMU3RvcmFnZVNlc3Npb25SZWYgY3JlYXRl
UHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKENGU3RyaW5nUmVmIGlkZW50aWZpZXIpCiAgICAgcmV0dXJu
IHN0b3JhZ2VTZXNzaW9uLmxlYWtSZWYoKTsKIH0KIAorc3RhdGljIE5TQXJyYXkgKmh0dHBDb29r
aWVzKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSkKK3sKKyAgICBBU1NFUlQo
aGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVz
KSk7CisgICAgaWYgKCFjb29raWVTdG9yYWdlKQorICAgICAgICByZXR1cm4gW1tOU0hUVFBDb29r
aWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBjb29raWVzXTsKKyAgICAKKyAgICBh
dXRvIGNvb2tpZXMgPSBhZG9wdENGKENGSFRUUENvb2tpZVN0b3JhZ2VDb3B5Q29va2llcyhjb29r
aWVTdG9yYWdlKSk7CisgICAgcmV0dXJuIFtOU0hUVFBDb29raWUgX2NmMm5zQ29va2llczpjb29r
aWVzLmdldCgpXTsKK30KKworc3RhdGljIHZvaWQgZGVsZXRlSFRUUENvb2tpZShDRkhUVFBDb29r
aWVTdG9yYWdlUmVmIGNvb2tpZVN0b3JhZ2UsIE5TSFRUUENvb2tpZSAqY29va2llKQoreworICAg
IEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jh
d0Nvb2tpZXMpKTsKKyAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpIHsKKyAgICAgICAgW1tOU0hUVFBD
b29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBkZWxldGVDb29raWU6Y29va2ll
XTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBDRkhUVFBDb29raWVTdG9yYWdl
RGVsZXRlQ29va2llKGNvb2tpZVN0b3JhZ2UsIFtjb29raWUgX0dldEludGVybmFsQ0ZIVFRQQ29v
a2llXSk7Cit9CisKKyNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwMTQwMCkgfHwgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTIwMDAwKQorc3RhdGljIFJldGFpblB0cjxOU0RpY3Rpb25h
cnk+IHBvbGljeVByb3BlcnRpZXMoY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIE5T
VVJMICp1cmwpCit7CisgICAgc3RhdGljIE5TVVJMICplbXB0eVVSTCA9IFtbTlNVUkwgYWxsb2Nd
IGluaXRXaXRoU3RyaW5nOkAiIl07CisgICAgTlNEaWN0aW9uYXJ5ICpwb2xpY3lQcm9wZXJ0aWVz
ID0gQHsKKyAgICAgICAgQCJfa0NGSFRUUENvb2tpZVBvbGljeVByb3BlcnR5U2l0ZUZvckNvb2tp
ZXMiOiBzYW1lU2l0ZUluZm8uaXNTYW1lU2l0ZSA/IHVybCA6IGVtcHR5VVJMLAorICAgICAgICBA
Il9rQ0ZIVFRQQ29va2llUG9saWN5UHJvcGVydHlJc1RvcExldmVsTmF2aWdhdGlvbiI6IFtOU051
bWJlciBudW1iZXJXaXRoQm9vbDpzYW1lU2l0ZUluZm8uaXNUb3BTaXRlXSwKKyAgICB9OworICAg
IHJldHVybiBwb2xpY3lQcm9wZXJ0aWVzOworfQorI2VuZGlmCisKK3N0YXRpYyBOU0FycmF5ICpj
b29raWVzRm9yVVJMKE5TSFRUUENvb2tpZVN0b3JhZ2UgKnN0b3JhZ2UsIE5TVVJMICp1cmwsIE5T
VVJMICptYWluRG9jdW1lbnRVUkwsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8U2FtZVNpdGVJbmZvPiYg
c2FtZVNpdGVJbmZvLCBOU1N0cmluZyAqcGFydGl0aW9uID0gbnVsbHB0cikKK3sKKyAgICAvLyBU
aGUgX2dldENvb2tpZXNGb3JVUkw6IG1ldGhvZCBjYWxscyB0aGUgY29tcGxldGlvbkhhbmRsZXIg
c3luY2hyb25vdXNseS4gV2UgdXNlIHN0ZDo6b3B0aW9uYWw8PiB0byBlbnN1cmUgdGhpcyBpbnZh
cmlhbnQuCisgICAgc3RkOjpvcHRpb25hbDxSZXRhaW5QdHI8TlNBcnJheSAqPj4gY29va2llc1B0
cjsKKyAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0gWyZjb29raWVzUHRyXSAoTlNBcnJheSAq
Y29va2llcykgeyBjb29raWVzUHRyID0gcmV0YWluUHRyKGNvb2tpZXMpOyB9OworI2lmIChQTEFU
Rk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNDAwKSB8
fCAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MjAwMDApCisgICAgaWYgKFtzdG9yYWdlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX2dl
dENvb2tpZXNGb3JVUkw6bWFpbkRvY3VtZW50VVJMOnBhcnRpdGlvbjpwb2xpY3lQcm9wZXJ0aWVz
OmNvbXBsZXRpb25IYW5kbGVyOildKQorICAgICAgICBbc3RvcmFnZSBfZ2V0Q29va2llc0ZvclVS
TDp1cmwgbWFpbkRvY3VtZW50VVJMOm1haW5Eb2N1bWVudFVSTCBwYXJ0aXRpb246cGFydGl0aW9u
IHBvbGljeVByb3BlcnRpZXM6c2FtZVNpdGVJbmZvID8gcG9saWN5UHJvcGVydGllcyhzYW1lU2l0
ZUluZm8udmFsdWUoKSwgdXJsKS5nZXQoKSA6IG51bGxwdHIgY29tcGxldGlvbkhhbmRsZXI6Y29t
cGxldGlvbkhhbmRsZXJdOworICAgIGVsc2UKKyAgICAgICAgW3N0b3JhZ2UgX2dldENvb2tpZXNG
b3JVUkw6dXJsIG1haW5Eb2N1bWVudFVSTDptYWluRG9jdW1lbnRVUkwgcGFydGl0aW9uOnBhcnRp
dGlvbiBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07CisjZWxzZQorICAgIFtz
dG9yYWdlIF9nZXRDb29raWVzRm9yVVJMOnVybCBtYWluRG9jdW1lbnRVUkw6bWFpbkRvY3VtZW50
VVJMIHBhcnRpdGlvbjpwYXJ0aXRpb24gY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRs
ZXJdOworICAgIFVOVVNFRF9QQVJBTShzYW1lU2l0ZUluZm8pOworI2VuZGlmCisgICAgQVNTRVJU
KCEhY29va2llc1B0cik7CisgICAgcmV0dXJuIGNvb2tpZXNQdHItPmF1dG9yZWxlYXNlKCk7Cit9
CisKK3N0YXRpYyB2b2lkIHNldEhUVFBDb29raWVzRm9yVVJMKENGSFRUUENvb2tpZVN0b3JhZ2VS
ZWYgY29va2llU3RvcmFnZSwgTlNBcnJheSAqY29va2llcywgTlNVUkwgKnVybCwgTlNVUkwgKm1h
aW5Eb2N1bWVudFVSTCwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8pCit7CisgICAg
QVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3
Q29va2llcykpOworICAgIGlmICghY29va2llU3RvcmFnZSkgeworI2lmIChQTEFURk9STShNQUMp
ICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNDAwKSB8fCAoUExBVEZP
Uk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMjAwMDApCisg
ICAgICAgIGlmIChbTlNIVFRQQ29va2llU3RvcmFnZSBpbnN0YW5jZXNSZXNwb25kVG9TZWxlY3Rv
cjpAc2VsZWN0b3IoX3NldENvb2tpZXM6Zm9yVVJMOm1haW5Eb2N1bWVudFVSTDpwb2xpY3lQcm9w
ZXJ0aWVzOildKQorICAgICAgICAgICAgW1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBD
b29raWVTdG9yYWdlXSBfc2V0Q29va2llczpjb29raWVzIGZvclVSTDp1cmwgbWFpbkRvY3VtZW50
VVJMOm1haW5Eb2N1bWVudFVSTCBwb2xpY3lQcm9wZXJ0aWVzOnBvbGljeVByb3BlcnRpZXMoc2Ft
ZVNpdGVJbmZvLCB1cmwpLmdldCgpXTsKKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAg
ICBbW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tp
ZXM6Y29va2llcyBmb3JVUkw6dXJsIG1haW5Eb2N1bWVudFVSTDptYWluRG9jdW1lbnRVUkxdOwor
ICAgICAgICByZXR1cm47CisgICAgfQorI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNDAwKSB8fCAoUExBVEZPUk0oSU9TKSAmJiBfX0lQ
SE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMjAwMDApCisgICAgaWYgKFtOU0hUVFBD
b29raWVTdG9yYWdlIGluc3RhbmNlc1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxlY3Rvcihfc2V0Q29v
a2llczpmb3JVUkw6bWFpbkRvY3VtZW50VVJMOnBvbGljeVByb3BlcnRpZXM6KV0pIHsKKyAgICAg
ICAgLy8gRklYTUU6IFN0b3AgY3JlYXRpbmcgYSBuZXcgTlNIVFRQQ29va2llU3RvcmFnZSBvYmpl
Y3QgZWFjaCB0aW1lIHdlIHdhbnQgdG8gcXVlcnkgdGhlIGNvb2tpZSBqYXIuCisgICAgICAgIC8v
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiBjb3VsZCBpbnN0ZWFkIGtlZXAgYSBOU0hUVFBDb29raWVT
dG9yYWdlIG9iamVjdCBmb3IgdXMuCisgICAgICAgIFJldGFpblB0cjxOU0hUVFBDb29raWVTdG9y
YWdlPiBuc0Nvb2tpZVN0b3JhZ2UgPSBhZG9wdE5TKFtbTlNIVFRQQ29va2llU3RvcmFnZSBhbGxv
Y10gX2luaXRXaXRoQ0ZIVFRQQ29va2llU3RvcmFnZTpjb29raWVTdG9yYWdlXSk7CisgICAgICAg
IFtuc0Nvb2tpZVN0b3JhZ2UgX3NldENvb2tpZXM6Y29va2llcyBmb3JVUkw6dXJsIG1haW5Eb2N1
bWVudFVSTDptYWluRG9jdW1lbnRVUkwgcG9saWN5UHJvcGVydGllczpwb2xpY3lQcm9wZXJ0aWVz
KHNhbWVTaXRlSW5mbywgdXJsKS5nZXQoKV07CisgICAgfSBlbHNlIHsKKyNlbmRpZgorICAgICAg
ICBhdXRvIGNmQ29va2llcyA9IGFkb3B0Q0YoW05TSFRUUENvb2tpZSBfbnMyY2ZDb29raWVzOmNv
b2tpZXNdKTsKKyAgICAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tpZXMoY29va2llU3Rv
cmFnZSwgY2ZDb29raWVzLmdldCgpLCBbdXJsIF9jZnVybF0sIFttYWluRG9jdW1lbnRVUkwgX2Nm
dXJsXSk7CisjaWYgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxMDE0MDApIHx8IChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDEyMDAwMCkKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShz
YW1lU2l0ZUluZm8pOworI2VuZGlmCit9CisKK3N0YXRpYyBOU0FycmF5ICpodHRwQ29va2llc0Zv
clVSTChDRkhUVFBDb29raWVTdG9yYWdlUmVmIGNvb2tpZVN0b3JhZ2UsIE5TVVJMICpmaXJzdFBh
cnR5LCBjb25zdCBzdGQ6Om9wdGlvbmFsPFNhbWVTaXRlSW5mbz4mIHNhbWVTaXRlSW5mbywgTlNV
UkwgKnVybCkKK3sKKyAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmls
ZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7CisgICAgaWYgKCFjb29raWVTdG9yYWdlKQorICAg
ICAgICBjb29raWVTdG9yYWdlID0gX0NGSFRUUENvb2tpZVN0b3JhZ2VHZXREZWZhdWx0KGtDRkFs
bG9jYXRvckRlZmF1bHQpOworCisgICAgLy8gRklYTUU6IFN0b3AgY3JlYXRpbmcgYSBuZXcgTlNI
VFRQQ29va2llU3RvcmFnZSBvYmplY3QgZWFjaCB0aW1lIHdlIHdhbnQgdG8gcXVlcnkgdGhlIGNv
b2tpZSBqYXIuCisgICAgLy8gTmV0d29ya1N0b3JhZ2VTZXNzaW9uIGNvdWxkIGluc3RlYWQga2Vl
cCBhIE5TSFRUUENvb2tpZVN0b3JhZ2Ugb2JqZWN0IGZvciB1cy4KKyAgICBSZXRhaW5QdHI8TlNI
VFRQQ29va2llU3RvcmFnZT4gbnNDb29raWVTdG9yYWdlID0gYWRvcHROUyhbW05TSFRUUENvb2tp
ZVN0b3JhZ2UgYWxsb2NdIF9pbml0V2l0aENGSFRUUENvb2tpZVN0b3JhZ2U6Y29va2llU3RvcmFn
ZV0pOworICAgIHJldHVybiBjb29raWVzRm9yVVJMKG5zQ29va2llU3RvcmFnZS5nZXQoKSwgdXJs
LCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8pOworfQorCitzdGF0aWMgUmV0YWluUHRyPE5TQXJy
YXk+IGZpbHRlckNvb2tpZXMoTlNBcnJheSAqdW5maWx0ZXJlZENvb2tpZXMpCit7CisgICAgQVNT
RVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29v
a2llcykpOworICAgIE5TVUludGVnZXIgY291bnQgPSBbdW5maWx0ZXJlZENvb2tpZXMgY291bnRd
OworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gZmlsdGVyZWRDb29raWVzID0gYWRvcHRO
UyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmNvdW50XSk7CisKKyAg
ICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIE5TSFRU
UENvb2tpZSAqY29va2llID0gKE5TSFRUUENvb2tpZSAqKVt1bmZpbHRlcmVkQ29va2llcyBvYmpl
Y3RBdEluZGV4OmldOworCisgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NjMyODgzPiBPbiAx
MC41LCBOU0hUVFBDb29raWVTdG9yYWdlIHdvdWxkIHN0b3JlIGFuIGVtcHR5IGNvb2tpZSwKKyAg
ICAgICAgLy8gd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4gV2UgaGF2ZSBhIHdv
cmthcm91bmQgaW4gc2V0Q29va2llcygpIHRvIHByZXZlbnQKKyAgICAgICAgLy8gdGhhdCwgYnV0
IHdlIGFsc28gbmVlZCB0byBhdm9pZCBzZW5kaW5nIGNvb2tpZXMgdGhhdCB3ZXJlIHByZXZpb3Vz
bHkgc3RvcmVkLCBhbmQKKyAgICAgICAgLy8gdGhlcmUncyBubyBoYXJtIHRvIGRvaW5nIHRoaXMg
Y2hlY2sgYmVjYXVzZSBzdWNoIGEgY29va2llIGlzIG5ldmVyIHZhbGlkLgorICAgICAgICBpZiAo
IVtbY29va2llIG5hbWVdIGxlbmd0aF0pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBpZiAoW2Nvb2tpZSBpc0hUVFBPbmx5XSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIFtmaWx0ZXJlZENvb2tpZXMuZ2V0KCkgYWRkT2JqZWN0OmNvb2tpZV07CisgICAgfQorCisg
ICAgcmV0dXJuIGZpbHRlcmVkQ29va2llczsKK30KKworI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JB
R0VfUEFSVElUSU9OSU5HKQorCitzdGF0aWMgTlNBcnJheSAqYXBwbHlQYXJ0aXRpb25Ub0Nvb2tp
ZXMoTlNTdHJpbmcgKnBhcnRpdGlvbiwgTlNBcnJheSAqY29va2llcykKK3sKKyAgICBBU1NFUlQo
aGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVz
KSk7CisKKyAgICAvLyBGSVhNRSAyNDc0NzczOTogQ0ZOZXR3b3JrIHNob3VsZCBleHBvc2UgdGhp
cyBrZXkgYXMgU1BJCisgICAgc3RhdGljIE5TU3RyaW5nICogY29uc3QgcGFydGl0aW9uS2V5ID0g
QCJTdG9yYWdlUGFydGl0aW9uIjsKKworICAgIE5TTXV0YWJsZUFycmF5ICpwYXJ0aXRpb25lZENv
b2tpZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6Y29va2llcy5jb3VudF07
CisgICAgZm9yIChOU0hUVFBDb29raWUgKmNvb2tpZSBpbiBjb29raWVzKSB7CisgICAgICAgIFJl
dGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBwcm9wZXJ0aWVzID0gYWRvcHROUyhbY29va2ll
LnByb3BlcnRpZXMgbXV0YWJsZUNvcHldKTsKKyAgICAgICAgW3Byb3BlcnRpZXMgc2V0T2JqZWN0
OnBhcnRpdGlvbiBmb3JLZXk6cGFydGl0aW9uS2V5XTsKKyAgICAgICAgW3BhcnRpdGlvbmVkQ29v
a2llcyBhZGRPYmplY3Q6W05TSFRUUENvb2tpZSBjb29raWVXaXRoUHJvcGVydGllczpwcm9wZXJ0
aWVzLmdldCgpXV07CisgICAgfQorCisgICAgcmV0dXJuIHBhcnRpdGlvbmVkQ29va2llczsKK30K
Kworc3RhdGljIGJvb2wgY29va2llc0FyZUJsb2NrZWRGb3JVUkwoY29uc3QgTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJs
KQoreworICAgIHJldHVybiBzZXNzaW9uLnNob3VsZEJsb2NrQ29va2llcyhmaXJzdFBhcnR5LCB1
cmwpOworfQorCitzdGF0aWMgTlNBcnJheSAqY29va2llc0luUGFydGl0aW9uRm9yVVJMKGNvbnN0
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBj
b25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0
aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCkK
K3sKKyAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5B
Y2Nlc3NSYXdDb29raWVzKSk7CisgICAgU3RyaW5nIHBhcnRpdGlvbiA9IHNlc3Npb24uY29va2ll
U3RvcmFnZVBhcnRpdGlvbihmaXJzdFBhcnR5LCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCk7CisgICAg
aWYgKHBhcnRpdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAvLyBG
SVhNRTogU3RvcCBjcmVhdGluZyBhIG5ldyBOU0hUVFBDb29raWVTdG9yYWdlIG9iamVjdCBlYWNo
IHRpbWUgd2Ugd2FudCB0byBxdWVyeSB0aGUgY29va2llIGphci4KKyAgICAvLyBOZXR3b3JrU3Rv
cmFnZVNlc3Npb24gY291bGQgaW5zdGVhZCBrZWVwIGEgTlNIVFRQQ29va2llU3RvcmFnZSBvYmpl
Y3QgZm9yIHVzLgorICAgIFJldGFpblB0cjxOU0hUVFBDb29raWVTdG9yYWdlPiBjb29raWVTdG9y
YWdlOworICAgIGlmIChhdXRvIHN0b3JhZ2UgPSBzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKSkKKyAg
ICAgICAgY29va2llU3RvcmFnZSA9IGFkb3B0TlMoW1tOU0hUVFBDb29raWVTdG9yYWdlIGFsbG9j
XSBfaW5pdFdpdGhDRkhUVFBDb29raWVTdG9yYWdlOnN0b3JhZ2UuZ2V0KCldKTsKKyAgICBlbHNl
CisgICAgICAgIGNvb2tpZVN0b3JhZ2UgPSBbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQ
Q29va2llU3RvcmFnZV07CisgICAgcmV0dXJuIGNvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5n
ZXQoKSwgdXJsLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHBhcnRpdGlvbik7Cit9CisKKyNl
bmRpZiAvLyBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykKKyAgICAKK3N0YXRp
YyBOU0FycmF5ICpjb29raWVzRm9yVVJMKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vz
c2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRl
SW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0
ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCkKK3sKKyNpZiBIQVZFKENGTkVUV09SS19TVE9S
QUdFX1BBUlRJVElPTklORykKKyAgICBpZiAoY29va2llc0FyZUJsb2NrZWRGb3JVUkwoc2Vzc2lv
biwgZmlyc3RQYXJ0eSwgdXJsKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBpZiAo
TlNBcnJheSAqY29va2llcyA9IGNvb2tpZXNJblBhcnRpdGlvbkZvclVSTChzZXNzaW9uLCBmaXJz
dFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlEKSkKKyAgICAgICAgcmV0
dXJuIGNvb2tpZXM7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsKKyAgICBVTlVT
RURfUEFSQU0ocGFnZUlEKTsKKyNlbmRpZgorICAgIHJldHVybiBodHRwQ29va2llc0ZvclVSTChz
ZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1
cmwpOworfQorCitlbnVtIEluY2x1ZGVIVFRQT25seU9yTm90IHsgRG9Ob3RJbmNsdWRlSFRUUE9u
bHksIEluY2x1ZGVIVFRQT25seSB9Oworc3RhdGljIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNv
b2tpZXNGb3JTZXNzaW9uKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29u
c3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29u
c3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9u
YWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZUhUVFBPbmx5T3JOb3QgaW5jbHVkZUhUVFBPbmx5
LCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykKK3sKKyAgICBBU1NF
UlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29r
aWVzKSk7CisKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBOU0FycmF5
ICpjb29raWVzID0gY29va2llc0ZvclVSTChzZXNzaW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUlu
Zm8sIHVybCwgZnJhbWVJRCwgcGFnZUlEKTsKKyAgICBpZiAoIVtjb29raWVzIGNvdW50XSkKKyAg
ICAgICAgcmV0dXJuIHsgU3RyaW5nKCksIGZhbHNlIH07IC8vIFJldHVybiBhIG51bGwgc3RyaW5n
LCBub3QgYW4gZW1wdHkgb25lIHRoYXQgU3RyaW5nQnVpbGRlciB3b3VsZCBjcmVhdGUgYmVsb3cu
CisKKyAgICBTdHJpbmdCdWlsZGVyIGNvb2tpZXNCdWlsZGVyOworICAgIGJvb2wgZGlkQWNjZXNz
U2VjdXJlQ29va2llcyA9IGZhbHNlOworICAgIGZvciAoTlNIVFRQQ29va2llICpjb29raWUgaW4g
Y29va2llcykgeworICAgICAgICBpZiAoIVtbY29va2llIG5hbWVdIGxlbmd0aF0pCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoIWluY2x1ZGVIVFRQT25seSAmJiBbY29va2ll
IGlzSFRUUE9ubHldKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKFtjb29r
aWUgaXNTZWN1cmVdKSB7CisgICAgICAgICAgICBkaWRBY2Nlc3NTZWN1cmVDb29raWVzID0gdHJ1
ZTsKKyAgICAgICAgICAgIGlmIChpbmNsdWRlU2VjdXJlQ29va2llcyA9PSBJbmNsdWRlU2VjdXJl
Q29va2llczo6Tm8pCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIWNvb2tpZXNCdWlsZGVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvb2tpZXNC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIjsgIik7CisKKyAgICAgICAgY29va2llc0J1aWxkZXIuYXBw
ZW5kKFtjb29raWUgbmFtZV0pOworICAgICAgICBjb29raWVzQnVpbGRlci5hcHBlbmQoJz0nKTsK
KyAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kKFtjb29raWUgdmFsdWVdKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHsgY29va2llc0J1aWxkZXIudG9TdHJpbmcoKSwgZGlkQWNjZXNzU2VjdXJlQ29v
a2llcyB9OworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4geyBT
dHJpbmcoKSwgZmFsc2UgfTsKK30KKworc3RhdGljIHZvaWQgZGVsZXRlQWxsSFRUUENvb2tpZXMo
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlKQoreworICAgIEFTU0VSVChoYXNQ
cm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsK
KworICAgIGlmICghY29va2llU3RvcmFnZSkgeworICAgICAgICBOU0hUVFBDb29raWVTdG9yYWdl
ICpjb29raWVTdG9yYWdlID0gW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0
b3JhZ2VdOworICAgICAgICBOU0FycmF5ICpjb29raWVzID0gW2Nvb2tpZVN0b3JhZ2UgY29va2ll
c107CisgICAgICAgIGlmICghY29va2llcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBmb3IgKE5TSFRUUENvb2tpZSAqY29va2llIGluIGNvb2tpZXMpCisgICAgICAgICAgICBbY29v
a2llU3RvcmFnZSBkZWxldGVDb29raWU6Y29va2llXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIENGSFRUUENvb2tpZVN0b3JhZ2VEZWxldGVBbGxDb29raWVzKGNvb2tpZVN0b3JhZ2Up
OworfQorCitzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNv
b2tpZXNGb3JET00oY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNh
bWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1l
SUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMg
aW5jbHVkZVNlY3VyZUNvb2tpZXMpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvb2tpZXNGb3JTZXNz
aW9uKCp0aGlzLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlE
LCBEb05vdEluY2x1ZGVIVFRQT25seSwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOworfQorCitzdGQ6
OnBhaXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZv
JiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBm
cmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29r
aWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKSBjb25zdAoreworICAgIHJldHVybiBjb29raWVzRm9y
U2Vzc2lvbigqdGhpcywgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBh
Z2VJRCwgSW5jbHVkZUhUVFBPbmx5LCBpbmNsdWRlU2VjdXJlQ29va2llcyk7Cit9CisKK3N0ZDo6
cGFpcjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llUmVxdWVzdEhl
YWRlckZpZWxkVmFsdWUoY29uc3QgQ29va2llUmVxdWVzdEhlYWRlckZpZWxkUHJveHkmIGhlYWRl
ckZpZWxkUHJveHkpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvb2tpZXNGb3JTZXNzaW9uKCp0aGlz
LCBoZWFkZXJGaWVsZFByb3h5LmZpcnN0UGFydHksIGhlYWRlckZpZWxkUHJveHkuc2FtZVNpdGVJ
bmZvLCBoZWFkZXJGaWVsZFByb3h5LnVybCwgaGVhZGVyRmllbGRQcm94eS5mcmFtZUlELCBoZWFk
ZXJGaWVsZFByb3h5LnBhZ2VJRCwgSW5jbHVkZUhUVFBPbmx5LCBoZWFkZXJGaWVsZFByb3h5Lmlu
Y2x1ZGVTZWN1cmVDb29raWVzKTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNl
dENvb2tpZXNGcm9tRE9NKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZv
JiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBm
cmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIGNvbnN0IFN0cmluZyYgY29v
a2llU3RyKSBjb25zdAoreworICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQ
cml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKKworICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKKworICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NjMyODgzPiBPbiAxMC41LCBO
U0hUVFBDb29raWVTdG9yYWdlIHdvdWxkIHN0b3JlIGFuIGVtcHR5IGNvb2tpZSwKKyAgICAvLyB3
aGljaCB3b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLgorICAgIGlmIChjb29raWVTdHIuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjUzMT4sIDxyZGFyOi8vNDQwOTAzND4KKyAgICAvLyBjb29raWVz
V2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzIGRvZXNuJ3QgcGFyc2UgY29va2llcyB3aXRob3V0IGEg
dmFsdWUKKyAgICBTdHJpbmcgY29va2llU3RyaW5nID0gY29va2llU3RyLmNvbnRhaW5zKCc9Jykg
PyBjb29raWVTdHIgOiBjb29raWVTdHIgKyAiPSI7CisKKyAgICBOU1VSTCAqY29va2llVVJMID0g
dXJsOworICAgIE5TRGljdGlvbmFyeSAqaGVhZGVyRmllbGRzID0gW05TRGljdGlvbmFyeSBkaWN0
aW9uYXJ5V2l0aE9iamVjdDpjb29raWVTdHJpbmcgZm9yS2V5OkAiU2V0LUNvb2tpZSJdOworCisj
aWYgUExBVEZPUk0oTUFDKQorICAgIE5TQXJyYXkgKnVuZmlsdGVyZWRDb29raWVzID0gW05TSFRU
UENvb2tpZSBfcGFyc2VkQ29va2llc1dpdGhSZXNwb25zZUhlYWRlckZpZWxkczpoZWFkZXJGaWVs
ZHMgZm9yVVJMOmNvb2tpZVVSTF07CisjZWxzZQorICAgIE5TQXJyYXkgKnVuZmlsdGVyZWRDb29r
aWVzID0gW05TSFRUUENvb2tpZSBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzOmhlYWRl
ckZpZWxkcyBmb3JVUkw6Y29va2llVVJMXTsKKyNlbmRpZgorCisgICAgUmV0YWluUHRyPE5TQXJy
YXk+IGZpbHRlcmVkQ29va2llcyA9IGZpbHRlckNvb2tpZXModW5maWx0ZXJlZENvb2tpZXMpOwor
ICAgIEFTU0VSVChbZmlsdGVyZWRDb29raWVzLmdldCgpIGNvdW50XSA8PSAxKTsKKworI2lmIEhB
VkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQorICAgIGlmIChzaG91bGRCbG9ja0Nv
b2tpZXMoZmlyc3RQYXJ0eSwgdXJsKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIHBh
cnRpdGlvbiA9IGNvb2tpZVN0b3JhZ2VQYXJ0aXRpb24oZmlyc3RQYXJ0eSwgdXJsLCBmcmFtZUlE
LCBwYWdlSUQpOworICAgIGlmICghcGFydGl0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgZmlsdGVy
ZWRDb29raWVzID0gYXBwbHlQYXJ0aXRpb25Ub0Nvb2tpZXMocGFydGl0aW9uLCBmaWx0ZXJlZENv
b2tpZXMuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7CisgICAgVU5V
U0VEX1BBUkFNKHBhZ2VJRCk7CisjZW5kaWYKKworICAgIHNldEhUVFBDb29raWVzRm9yVVJMKGNv
b2tpZVN0b3JhZ2UoKS5nZXQoKSwgZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29raWVVUkwsIGZp
cnN0UGFydHksIHNhbWVTaXRlSW5mbyk7CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OworfQorCitzdGF0aWMgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5IGh0dHBDb29raWVBY2NlcHRQ
b2xpY3koQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlKQoreworICAgIEFTU0VS
VChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tp
ZXMpKTsKKworICAgIGlmICghY29va2llU3RvcmFnZSkKKyAgICAgICAgcmV0dXJuIFtbTlNIVFRQ
Q29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gY29va2llQWNjZXB0UG9saWN5
XTsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxOU0hUVFBDb29raWVBY2NlcHRQb2xpY3k+KENG
SFRUUENvb2tpZVN0b3JhZ2VHZXRDb29raWVBY2NlcHRQb2xpY3koY29va2llU3RvcmFnZSkpOwor
fQorCitib29sIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0VuYWJsZWQoKSBjb25zdAor
eworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIE5TSFRUUENvb2tpZUFj
Y2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgPSBodHRwQ29va2llQWNjZXB0UG9saWN5KGNv
b2tpZVN0b3JhZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIGNvb2tpZUFjY2VwdFBvbGljeSA9PSBO
U0hUVFBDb29raWVBY2NlcHRQb2xpY3lBbHdheXMgfHwgY29va2llQWNjZXB0UG9saWN5ID09IE5T
SFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluIHx8IGNvb2tp
ZUFjY2VwdFBvbGljeSA9PSBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lFeGNsdXNpdmVseUZyb21N
YWluRG9jdW1lbnREb21haW47CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldFJhd0Nv
b2tpZXMoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRl
SW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0
ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMp
IGNvbnN0Cit7CisgICAgcmF3Q29va2llcy5jbGVhcigpOworICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKKworICAgIE5TQXJyYXkgKmNvb2tpZXMgPSBjb29raWVzRm9yVVJMKCp0aGlz
LCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlEKTsKKyAgICBO
U1VJbnRlZ2VyIGNvdW50ID0gW2Nvb2tpZXMgY291bnRdOworICAgIHJhd0Nvb2tpZXMucmVzZXJ2
ZUNhcGFjaXR5KGNvdW50KTsKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7CisgICAgICAgIE5TSFRUUENvb2tpZSAqY29va2llID0gKE5TSFRUUENvb2tpZSAqKVtj
b29raWVzIG9iamVjdEF0SW5kZXg6aV07CisgICAgICAgIHJhd0Nvb2tpZXMudW5jaGVja2VkQXBw
ZW5kKHsgY29va2llIH0pOworICAgIH0KKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxl
dGVDb29raWUoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkgY29uc3QK
K3sKKyAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5B
Y2Nlc3NSYXdDb29raWVzKSk7CisKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisK
KyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IHRo
aXMtPmNvb2tpZVN0b3JhZ2UoKTsKKyAgICBOU0FycmF5ICpjb29raWVzID0gaHR0cENvb2tpZXNG
b3JVUkwoY29va2llU3RvcmFnZS5nZXQoKSwgbmlsLCBzdGQ6Om51bGxvcHQsIHVybCk7CisKKyAg
ICBOU1N0cmluZyAqY29va2llTmFtZVN0cmluZyA9IGNvb2tpZU5hbWU7CisKKyAgICBOU1VJbnRl
Z2VyIGNvdW50ID0gW2Nvb2tpZXMgY291bnRdOworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgTlNIVFRQQ29va2llICpjb29raWUgPSAoTlNIVFRQ
Q29va2llICopW2Nvb2tpZXMgb2JqZWN0QXRJbmRleDppXTsKKyAgICAgICAgaWYgKFtbY29va2ll
IG5hbWVdIGlzRXF1YWxUb1N0cmluZzpjb29raWVOYW1lU3RyaW5nXSkKKyAgICAgICAgICAgIGRl
bGV0ZUhUVFBDb29raWUoY29va2llU3RvcmFnZS5nZXQoKSwgY29va2llKTsKKyAgICB9CisKKyAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMp
Cit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgTlNBcnJheSAqY29v
a2llcyA9IGh0dHBDb29raWVzKGNvb2tpZVN0b3JhZ2UoKS5nZXQoKSk7CisgICAgCisgICAgZm9y
IChOU0hUVFBDb29raWUqIGNvb2tpZSBpbiBjb29raWVzKQorICAgICAgICBob3N0bmFtZXMuYWRk
KFtjb29raWUgZG9tYWluXSk7CisgICAgCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
K30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXMoKQorewor
ICAgIGRlbGV0ZUFsbEhUVFBDb29raWVzKGNvb2tpZVN0b3JhZ2UoKS5nZXQoKSk7Cit9CisKK3Zv
aWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBob3N0bmFtZXMpCit7CisgICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2
aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOworCisgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0
b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSB0aGlzLT5jb29raWVTdG9yYWdlKCk7CisgICAgTlNB
cnJheSAqY29va2llcyA9IGh0dHBDb29raWVzKGNvb2tpZVN0b3JhZ2UuZ2V0KCkpOworICAgIGlm
ICghY29va2llcykKKyAgICAgICAgcmV0dXJuOworCisgICAgSGFzaE1hcDxTdHJpbmcsIFZlY3Rv
cjxSZXRhaW5QdHI8TlNIVFRQQ29va2llPj4+IGNvb2tpZXNCeURvbWFpbjsKKyAgICBmb3IgKE5T
SFRUUENvb2tpZSogY29va2llIGluIGNvb2tpZXMpIHsKKyAgICAgICAgYXV0byYgY29va2llcyA9
IGNvb2tpZXNCeURvbWFpbi5hZGQoY29va2llLmRvbWFpbiwgVmVjdG9yPFJldGFpblB0cjxOU0hU
VFBDb29raWU+PigpKS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGNvb2tpZXMuYXBwZW5kKGNv
b2tpZSk7CisgICAgfQorCisgICAgZm9yIChjb25zdCBhdXRvJiBob3N0bmFtZSA6IGhvc3RuYW1l
cykgeworICAgICAgICBhdXRvIGl0ID0gY29va2llc0J5RG9tYWluLmZpbmQoaG9zdG5hbWUpOwor
ICAgICAgICBpZiAoaXQgPT0gY29va2llc0J5RG9tYWluLmVuZCgpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBpdC0+dmFsdWUpCisgICAgICAg
ICAgICBkZWxldGVIVFRQQ29va2llKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZS5nZXQoKSk7
CisgICAgfQorCisgICAgW25zQ29va2llU3RvcmFnZSgpIF9zYXZlQ29va2llc107CisKKyAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lv
bjo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoV2FsbFRpbWUgdGltZVBvaW50KQorewor
ICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vz
c1Jhd0Nvb2tpZXMpKTsKKworICAgIGlmICghW05TSFRUUENvb2tpZVN0b3JhZ2UgaW5zdGFuY2Vz
UmVzcG9uZFRvU2VsZWN0b3I6QHNlbGVjdG9yKHJlbW92ZUNvb2tpZXNTaW5jZURhdGU6KV0pCisg
ICAgICAgIHJldHVybjsKKworICAgIE5TVGltZUludGVydmFsIHRpbWVJbnRlcnZhbCA9IHRpbWVQ
b2ludC5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKTsKKyAgICBOU0RhdGUgKmRhdGUgPSBb
TlNEYXRlIGRhdGVXaXRoVGltZUludGVydmFsU2luY2UxOTcwOnRpbWVJbnRlcnZhbF07CisKKyAg
ICBhdXRvICpzdG9yYWdlID0gbnNDb29raWVTdG9yYWdlKCk7CisKKyAgICBbc3RvcmFnZSByZW1v
dmVDb29raWVzU2luY2VEYXRlOmRhdGVdOworICAgIFtzdG9yYWdlIF9zYXZlQ29va2llc107Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNWI0YTI0NTI3NTgyNGMwODBkOTgyZDk2MDkwNWU0NDRkZTYxOTA5Ni4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZl
IEVudGVydGFpbm1lbnQgSW5jLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvb2tpZUphckN1cmwuaCIKLQotI2lmIFVTRShD
VVJMKQotI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFByb3h5LmgiCi0jaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCi0jaW5jbHVk
ZSAiVVJMLmgiCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1zdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVzRm9yRE9NKGNvbnN0
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBj
b25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0
aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwg
SW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpCi17Ci0gICAgcmV0dXJu
IHNlc3Npb24uY29va2llU3RvcmFnZSgpLmNvb2tpZXNGb3JET00oc2Vzc2lvbiwgZmlyc3RQYXJ0
eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVkZVNlY3VyZUNvb2tp
ZXMpOwotfQotCi12b2lkIHNldENvb2tpZXNGcm9tRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8m
IHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZy
YW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLXsKLSAgICBzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5zZXRDb29raWVzRnJvbURPTShzZXNz
aW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCB2YWx1
ZSk7Ci19Ci0KLXN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBm
aXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1
cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0
X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpCi17
Ci0gICAgcmV0dXJuIHNlc3Npb24uY29va2llU3RvcmFnZSgpLmNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlE
LCBwYWdlSUQsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKLX0KLQotc3RkOjpwYWlyPFN0cmluZywg
Ym9vbD4gY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eSYgaGVh
ZGVyRmllbGRQcm94eSkKLXsKLSAgICByZXR1cm4gc2Vzc2lvbi5jb29raWVTdG9yYWdlKCkuY29v
a2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoc2Vzc2lvbiwgaGVhZGVyRmllbGRQcm94eS5maXJz
dFBhcnR5LCBoZWFkZXJGaWVsZFByb3h5LnNhbWVTaXRlSW5mbywgaGVhZGVyRmllbGRQcm94eS51
cmwsIGhlYWRlckZpZWxkUHJveHkuZnJhbWVJRCwgaGVhZGVyRmllbGRQcm94eS5wYWdlSUQsIGhl
YWRlckZpZWxkUHJveHkuaW5jbHVkZVNlY3VyZUNvb2tpZXMpOwotfQotCi1ib29sIGNvb2tpZXNF
bmFibGVkKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbikKLXsKLSAgICByZXR1
cm4gc2Vzc2lvbi5jb29raWVTdG9yYWdlKCkuY29va2llc0VuYWJsZWQoc2Vzc2lvbik7Ci19Ci0K
LWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24s
IGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8s
IGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9w
dGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQotewot
ICAgIHJldHVybiBzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5nZXRSYXdDb29raWVzKHNlc3Npb24s
IGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIHJhd0Nvb2tp
ZXMpOwotfQotCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24m
IHNlc3Npb24sIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZSkKLXsKLSAgICBz
ZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5kZWxldGVDb29raWUoc2Vzc2lvbiwgdXJsLCBjb29raWUp
OwotfQotCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiYgc2Vzc2lvbiwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCi17Ci0gICAgc2Vz
c2lvbi5jb29raWVTdG9yYWdlKCkuZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbiwgaG9z
dG5hbWVzKTsKLX0KLQotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKGNvbnN0IE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGNvb2tpZUhv
c3ROYW1lcykKLXsKLSAgICBzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5kZWxldGVDb29raWVzRm9y
SG9zdG5hbWVzKHNlc3Npb24sIGNvb2tpZUhvc3ROYW1lcyk7Ci19Ci0KLXZvaWQgZGVsZXRlQWxs
Q29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24pCi17Ci0gICAgc2Vz
c2lvbi5jb29raWVTdG9yYWdlKCkuZGVsZXRlQWxsQ29va2llcyhzZXNzaW9uKTsKLX0KLQotdm9p
ZCBkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Np
b24mIHNlc3Npb24sIFdhbGxUaW1lIHNpbmNlKQotewotICAgIHNlc3Npb24uY29va2llU3RvcmFn
ZSgpLmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKHNlc3Npb24sIHNpbmNlKTsKLX0KLQot
fQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9Db29raWVKYXJDdXJsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ29va2llSmFyQ3VybC5oCmluZGV4IDJhYThkZmRhMWI3MGUxMDljZmViOGE0YmVmM2I0MWY0
NjY2ZTY4ZWUuLmUwYjIxY2MxMzc3NDhhOGUxNjI3NDgzMjYwN2MxOGQ3YTQ4MTYwZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1
cmwuaApAQCAtMTgsMTAgKzE4LDIyIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiUGxh
dGZvcm1Db29raWVKYXIuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1dhbGxUaW1lLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgVVJMOworY2xh
c3MgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOworCitzdHJ1Y3QgQ29va2llOworc3RydWN0IENvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5Oworc3RydWN0IFNhbWVTaXRlSW5mbzsKKworZW51bSBj
bGFzcyBJbmNsdWRlU2VjdXJlQ29va2llczsKKwogY2xhc3MgQ29va2llSmFyQ3VybCB7CiBwdWJs
aWM6CiAgICAgdmlydHVhbCBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVzRm9yRE9NKGNv
bnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3Qg
U2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJ
RCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcykg
Y29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkN1cmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkN1cmwuY3BwCmluZGV4IDA2MWRm
MTkwNTk2ZTNiYjlmMWZmOWQxNjViNzdmN2ZmYWYzY2M3OTMuLjg2YTQxZGY3MzJjN2ZlMGYyYzVl
NjFjYjVkYjM1ZGVjNDU1OTZjNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9OZXR3b3JrU3RvcmFnZVNlc3Npb25DdXJsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ3VybC5j
cHAKQEAgLTMxLDEzICszMSwxNiBAQAogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkNv
b2tpZUphckN1cmxEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphckRCLmgiCisjaW5jbHVk
ZSAiQ29va2llUmVxdWVzdEhlYWRlckZpZWxkUHJveHkuaCIKICNpbmNsdWRlICJDdXJsQ29udGV4
dC5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4
dC5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiVVJMLmgiCiAKICNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTEwMyw2ICsxMDYsMjEgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN3aXRj
aFRvTmV3VGVzdGluZ1Nlc3Npb24oKQogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIFdlYktp
dCB0byB1c2UuCiB9CiAKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVzRnJv
bURPTShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJ
bmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3Rk
OjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAor
eworICAgIGNvb2tpZVN0b3JhZ2UoKS5zZXRDb29raWVzRnJvbURPTSgqdGhpcywgZmlyc3RQYXJ0
eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgdmFsdWUpOworfQorCitib29s
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0VuYWJsZWQoKSBjb25zdAoreworICAgIHJl
dHVybiBjb29raWVTdG9yYWdlKCkuY29va2llc0VuYWJsZWQoKnRoaXMpOworfQorCitzdGQ6OnBh
aXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZXNGb3JET00oY29u
c3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29u
c3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9u
YWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNv
b2tpZXMpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvb2tpZVN0b3JhZ2UoKS5jb29raWVzRm9yRE9N
KCp0aGlzLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBp
bmNsdWRlU2VjdXJlQ29va2llcyk7Cit9CisKIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpz
ZXRDb29raWVzKGNvbnN0IFZlY3RvcjxDb29raWU+JiwgY29uc3QgVVJMJiwgY29uc3QgVVJMJikK
IHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBXZWJLaXQgdG8gdXNlLgpAQCAtMTE4LDIz
ICsxMzYsNjMgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZShjb25z
dCBDb29raWUmKQogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIFdlYktpdCB0byB1c2UuCiB9
CiAKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVDb29raWUoY29uc3QgVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgY29va2llKSBjb25zdAoreworICAgIGNvb2tpZVN0b3JhZ2UoKS5k
ZWxldGVDb29raWUoKnRoaXMsIHVybCwgY29va2llKTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXMoKQoreworICAgIGNvb2tpZVN0b3JhZ2UoKS5kZWxl
dGVBbGxDb29raWVzKCp0aGlzKTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRl
bGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFdhbGxUaW1lIHNpbmNlKQoreworICAgIGNvb2tp
ZVN0b3JhZ2UoKS5kZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZSgqdGhpcywgc2luY2UpOwor
fQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1l
cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgY29va2llSG9zdE5hbWVzKQoreworICAgIGNvb2tpZVN0
b3JhZ2UoKS5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKCp0aGlzLCBjb29raWVIb3N0TmFtZXMp
OworfQorCiBWZWN0b3I8Q29va2llPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEFsbENvb2tp
ZXMoKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIFdlYktpdCB0byB1c2UuCiAgICAg
cmV0dXJuIHsgfTsKIH0KIAordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEhvc3RuYW1l
c1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQoreworICAgIGNvb2tpZVN0
b3JhZ2UoKS5nZXRIb3N0bmFtZXNXaXRoQ29va2llcygqdGhpcywgaG9zdG5hbWVzKTsKK30KKwog
VmVjdG9yPENvb2tpZT4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRDb29raWVzKGNvbnN0IFVS
TCYpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgV2ViS2l0IHRvIHVzZS4KICAgICBy
ZXR1cm4geyB9OwogfQogCitib29sIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0UmF3Q29va2ll
cyhjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZv
LCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpv
cHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykgY29u
c3QKK3sKKyAgICByZXR1cm4gY29va2llU3RvcmFnZSgpLmdldFJhd0Nvb2tpZXMoKnRoaXMsIGZp
cnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIHJhd0Nvb2tpZXMp
OworfQorCiB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Zmx1c2hDb29raWVTdG9yZSgpCiB7
CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgV2ViS2l0IHRvIHVzZS4KIH0KIAorc3RkOjpw
YWlyPFN0cmluZywgYm9vbD4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYg
c2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJh
bWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2ll
cyBpbmNsdWRlU2VjdXJlQ29va2llcykgY29uc3QKK3sKKyAgICByZXR1cm4gY29va2llU3RvcmFn
ZSgpLmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKCp0aGlzLCBmaXJzdFBhcnR5LCBzYW1l
U2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNsdWRlU2VjdXJlQ29va2llcyk7Cit9
CisKK3N0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgQ29va2llUmVxdWVzdEhlYWRlckZpZWxkUHJv
eHkmIGhlYWRlckZpZWxkUHJveHkpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvb2tpZVN0b3JhZ2Uo
KS5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSgqdGhpcywgaGVhZGVyRmllbGRQcm94eS5m
aXJzdFBhcnR5LCBoZWFkZXJGaWVsZFByb3h5LnNhbWVTaXRlSW5mbywgaGVhZGVyRmllbGRQcm94
eS51cmwsIGhlYWRlckZpZWxkUHJveHkuZnJhbWVJRCwgaGVhZGVyRmllbGRQcm94eS5wYWdlSUQs
IGhlYWRlckZpZWxkUHJveHkuaW5jbHVkZVNlY3VyZUNvb2tpZXMpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoQ1VSTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZUphck1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZUphck1hYy5tbQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYzI2NDBiZDA2ZGYyMTBiNmQyZDMyMDgyNjUwNjExMDJmOGQ5MjE4NS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW0KKysrIC9kZXYvbnVsbApA
QCAtMSw0NzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJQbGF0Zm9ybUNvb2tpZUph
ci5oIgotCi0jaW1wb3J0ICJDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eS5oIgotI2ltcG9y
dCAiQ29va2llc1N0cmF0ZWd5LmgiCi0jaW1wb3J0ICJOZXR3b3JrU3RvcmFnZVNlc3Npb24uaCIK
LSNpbXBvcnQgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+Ci0jaW1wb3J0IDx3dGYvQmxvY2tP
YmpDRXhjZXB0aW9ucy5oPgotCi0jaW1wb3J0ICJDb29raWUuaCIKLSNpbXBvcnQgIkNvb2tpZVN0
b3JhZ2UuaCIKLSNpbXBvcnQgIlNhbWVTaXRlSW5mby5oIgotI2ltcG9ydCAiVVJMLmgiCi0jaW1w
b3J0IDx3dGYvT3B0aW9uYWwuaD4KLSNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+Ci0j
aW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLUBpbnRlcmZhY2UgTlNVUkwgKCkK
LS0gKENGVVJMUmVmKV9jZnVybDsKLUBlbmQKLQotI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNDAwKSB8fCAoUExBVEZPUk0oSU9TKSAm
JiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMjAwMDApCi1AaW50ZXJmYWNl
IE5TSFRUUENvb2tpZVN0b3JhZ2UgKFN0YWdpbmcpCi0tICh2b2lkKV9nZXRDb29raWVzRm9yVVJM
OihOU1VSTCAqKXVybCBtYWluRG9jdW1lbnRVUkw6KE5TVVJMICopbWFpbkRvY3VtZW50VVJMIHBh
cnRpdGlvbjooTlNTdHJpbmcgKilwYXJ0aXRpb24gcG9saWN5UHJvcGVydGllczooTlNEaWN0aW9u
YXJ5Kilwcm9wcyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNBcnJheSAqKSljb21wbGV0
aW9uSGFuZGxlcjsKLS0gKHZvaWQpX3NldENvb2tpZXM6KE5TQXJyYXkgKiljb29raWVzIGZvclVS
TDooTlNVUkwgKilVUkwgbWFpbkRvY3VtZW50VVJMOihOU1VSTCAqKW1haW5Eb2N1bWVudFVSTCBw
b2xpY3lQcm9wZXJ0aWVzOihOU0RpY3Rpb25hcnkqKSBwcm9wczsKLUBlbmQKLSNlbmRpZgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBOU0FycmF5ICpodHRwQ29va2llcyhDRkhUVFBD
b29raWVTdG9yYWdlUmVmIGNvb2tpZVN0b3JhZ2UpCi17Ci0gICAgQVNTRVJUKGhhc1Byb2Nlc3NQ
cml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOwotICAgIGlm
ICghY29va2llU3RvcmFnZSkKLSAgICAgICAgcmV0dXJuIFtbTlNIVFRQQ29va2llU3RvcmFnZSBz
aGFyZWRIVFRQQ29va2llU3RvcmFnZV0gY29va2llc107Ci0gICAgCi0gICAgYXV0byBjb29raWVz
ID0gYWRvcHRDRihDRkhUVFBDb29raWVTdG9yYWdlQ29weUNvb2tpZXMoY29va2llU3RvcmFnZSkp
OwotICAgIHJldHVybiBbTlNIVFRQQ29va2llIF9jZjJuc0Nvb2tpZXM6Y29va2llcy5nZXQoKV07
Ci19Ci0KLXN0YXRpYyB2b2lkIGRlbGV0ZUhUVFBDb29raWUoQ0ZIVFRQQ29va2llU3RvcmFnZVJl
ZiBjb29raWVTdG9yYWdlLCBOU0hUVFBDb29raWUgKmNvb2tpZSkKLXsKLSAgICBBU1NFUlQoaGFz
UHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7
Ci0gICAgaWYgKCFjb29raWVTdG9yYWdlKSB7Ci0gICAgICAgIFtbTlNIVFRQQ29va2llU3RvcmFn
ZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gZGVsZXRlQ29va2llOmNvb2tpZV07Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgQ0ZIVFRQQ29va2llU3RvcmFnZURlbGV0ZUNvb2tp
ZShjb29raWVTdG9yYWdlLCBbY29va2llIF9HZXRJbnRlcm5hbENGSFRUUENvb2tpZV0pOwotfQot
Ci0jaWYgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDE0MDApIHx8IChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEyMDAwMCkKLXN0YXRpYyBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBwb2xpY3lQ
cm9wZXJ0aWVzKGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBOU1VSTCAqdXJsKQot
ewotICAgIHN0YXRpYyBOU1VSTCAqZW1wdHlVUkwgPSBbW05TVVJMIGFsbG9jXSBpbml0V2l0aFN0
cmluZzpAIiJdOwotICAgIE5TRGljdGlvbmFyeSAqcG9saWN5UHJvcGVydGllcyA9IEB7Ci0gICAg
ICAgIEAiX2tDRkhUVFBDb29raWVQb2xpY3lQcm9wZXJ0eVNpdGVGb3JDb29raWVzIjogc2FtZVNp
dGVJbmZvLmlzU2FtZVNpdGUgPyB1cmwgOiBlbXB0eVVSTCwKLSAgICAgICAgQCJfa0NGSFRUUENv
b2tpZVBvbGljeVByb3BlcnR5SXNUb3BMZXZlbE5hdmlnYXRpb24iOiBbTlNOdW1iZXIgbnVtYmVy
V2l0aEJvb2w6c2FtZVNpdGVJbmZvLmlzVG9wU2l0ZV0sCi0gICAgfTsKLSAgICByZXR1cm4gcG9s
aWN5UHJvcGVydGllczsKLX0KLSNlbmRpZgotCi1zdGF0aWMgTlNBcnJheSAqY29va2llc0ZvclVS
TChOU0hUVFBDb29raWVTdG9yYWdlICpzdG9yYWdlLCBOU1VSTCAqdXJsLCBOU1VSTCAqbWFpbkRv
Y3VtZW50VVJMLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFNhbWVTaXRlSW5mbz4mIHNhbWVTaXRlSW5m
bywgTlNTdHJpbmcgKnBhcnRpdGlvbiA9IG51bGxwdHIpCi17Ci0gICAgLy8gVGhlIF9nZXRDb29r
aWVzRm9yVVJMOiBtZXRob2QgY2FsbHMgdGhlIGNvbXBsZXRpb25IYW5kbGVyIHN5bmNocm9ub3Vz
bHkuIFdlIHVzZSBzdGQ6Om9wdGlvbmFsPD4gdG8gZW5zdXJlIHRoaXMgaW52YXJpYW50LgotICAg
IHN0ZDo6b3B0aW9uYWw8UmV0YWluUHRyPE5TQXJyYXkgKj4+IGNvb2tpZXNQdHI7Ci0gICAgYXV0
byBjb21wbGV0aW9uSGFuZGxlciA9IFsmY29va2llc1B0cl0gKE5TQXJyYXkgKmNvb2tpZXMpIHsg
Y29va2llc1B0ciA9IHJldGFpblB0cihjb29raWVzKTsgfTsKLSNpZiAoUExBVEZPUk0oTUFDKSAm
JiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTQwMCkgfHwgKFBMQVRGT1JN
KElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTIwMDAwKQotICAg
IGlmIChbc3RvcmFnZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF9nZXRDb29raWVzRm9y
VVJMOm1haW5Eb2N1bWVudFVSTDpwYXJ0aXRpb246cG9saWN5UHJvcGVydGllczpjb21wbGV0aW9u
SGFuZGxlcjopXSkKLSAgICAgICAgW3N0b3JhZ2UgX2dldENvb2tpZXNGb3JVUkw6dXJsIG1haW5E
b2N1bWVudFVSTDptYWluRG9jdW1lbnRVUkwgcGFydGl0aW9uOnBhcnRpdGlvbiBwb2xpY3lQcm9w
ZXJ0aWVzOnNhbWVTaXRlSW5mbyA/IHBvbGljeVByb3BlcnRpZXMoc2FtZVNpdGVJbmZvLnZhbHVl
KCksIHVybCkuZ2V0KCkgOiBudWxscHRyIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5k
bGVyXTsKLSAgICBlbHNlCi0gICAgICAgIFtzdG9yYWdlIF9nZXRDb29raWVzRm9yVVJMOnVybCBt
YWluRG9jdW1lbnRVUkw6bWFpbkRvY3VtZW50VVJMIHBhcnRpdGlvbjpwYXJ0aXRpb24gY29tcGxl
dGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwotI2Vsc2UKLSAgICBbc3RvcmFnZSBfZ2V0
Q29va2llc0ZvclVSTDp1cmwgbWFpbkRvY3VtZW50VVJMOm1haW5Eb2N1bWVudFVSTCBwYXJ0aXRp
b246cGFydGl0aW9uIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKLSAgICBV
TlVTRURfUEFSQU0oc2FtZVNpdGVJbmZvKTsKLSNlbmRpZgotICAgIEFTU0VSVCghIWNvb2tpZXNQ
dHIpOwotICAgIHJldHVybiBjb29raWVzUHRyLT5hdXRvcmVsZWFzZSgpOwotfQotCi1zdGF0aWMg
dm9pZCBzZXRIVFRQQ29va2llc0ZvclVSTChDRkhUVFBDb29raWVTdG9yYWdlUmVmIGNvb2tpZVN0
b3JhZ2UsIE5TQXJyYXkgKmNvb2tpZXMsIE5TVVJMICp1cmwsIE5TVVJMICptYWluRG9jdW1lbnRV
UkwsIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvKQotewotICAgIEFTU0VSVChoYXNQ
cm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsK
LSAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpIHsKLSNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTQwMCkgfHwgKFBMQVRGT1JNKElPUykgJiYg
X19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTIwMDAwKQotICAgICAgICBpZiAo
W05TSFRUUENvb2tpZVN0b3JhZ2UgaW5zdGFuY2VzUmVzcG9uZFRvU2VsZWN0b3I6QHNlbGVjdG9y
KF9zZXRDb29raWVzOmZvclVSTDptYWluRG9jdW1lbnRVUkw6cG9saWN5UHJvcGVydGllczopXSkK
LSAgICAgICAgICAgIFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFn
ZV0gX3NldENvb2tpZXM6Y29va2llcyBmb3JVUkw6dXJsIG1haW5Eb2N1bWVudFVSTDptYWluRG9j
dW1lbnRVUkwgcG9saWN5UHJvcGVydGllczpwb2xpY3lQcm9wZXJ0aWVzKHNhbWVTaXRlSW5mbywg
dXJsKS5nZXQoKV07Ci0gICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgW1tOU0hUVFBD
b29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBzZXRDb29raWVzOmNvb2tpZXMg
Zm9yVVJMOnVybCBtYWluRG9jdW1lbnRVUkw6bWFpbkRvY3VtZW50VVJMXTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwMTQwMCkgfHwgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTIwMDAwKQotICAgIGlmIChbTlNIVFRQQ29va2llU3RvcmFn
ZSBpbnN0YW5jZXNSZXNwb25kVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3NldENvb2tpZXM6Zm9yVVJM
Om1haW5Eb2N1bWVudFVSTDpwb2xpY3lQcm9wZXJ0aWVzOildKSB7Ci0gICAgICAgIC8vIEZJWE1F
OiBTdG9wIGNyZWF0aW5nIGEgbmV3IE5TSFRUUENvb2tpZVN0b3JhZ2Ugb2JqZWN0IGVhY2ggdGlt
ZSB3ZSB3YW50IHRvIHF1ZXJ5IHRoZSBjb29raWUgamFyLgotICAgICAgICAvLyBOZXR3b3JrU3Rv
cmFnZVNlc3Npb24gY291bGQgaW5zdGVhZCBrZWVwIGEgTlNIVFRQQ29va2llU3RvcmFnZSBvYmpl
Y3QgZm9yIHVzLgotICAgICAgICBSZXRhaW5QdHI8TlNIVFRQQ29va2llU3RvcmFnZT4gbnNDb29r
aWVTdG9yYWdlID0gYWRvcHROUyhbW05TSFRUUENvb2tpZVN0b3JhZ2UgYWxsb2NdIF9pbml0V2l0
aENGSFRUUENvb2tpZVN0b3JhZ2U6Y29va2llU3RvcmFnZV0pOwotICAgICAgICBbbnNDb29raWVT
dG9yYWdlIF9zZXRDb29raWVzOmNvb2tpZXMgZm9yVVJMOnVybCBtYWluRG9jdW1lbnRVUkw6bWFp
bkRvY3VtZW50VVJMIHBvbGljeVByb3BlcnRpZXM6cG9saWN5UHJvcGVydGllcyhzYW1lU2l0ZUlu
Zm8sIHVybCkuZ2V0KCldOwotICAgIH0gZWxzZSB7Ci0jZW5kaWYKLSAgICAgICAgYXV0byBjZkNv
b2tpZXMgPSBhZG9wdENGKFtOU0hUVFBDb29raWUgX25zMmNmQ29va2llczpjb29raWVzXSk7Ci0g
ICAgICAgIENGSFRUUENvb2tpZVN0b3JhZ2VTZXRDb29raWVzKGNvb2tpZVN0b3JhZ2UsIGNmQ29v
a2llcy5nZXQoKSwgW3VybCBfY2Z1cmxdLCBbbWFpbkRvY3VtZW50VVJMIF9jZnVybF0pOwotI2lm
IChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAx
NDAwKSB8fCAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMjAwMDApCi0gICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2FtZVNpdGVJbmZv
KTsKLSNlbmRpZgotfQotCi1zdGF0aWMgTlNBcnJheSAqaHR0cENvb2tpZXNGb3JVUkwoQ0ZIVFRQ
Q29va2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlLCBOU1VSTCAqZmlyc3RQYXJ0eSwgY29uc3Qg
c3RkOjpvcHRpb25hbDxTYW1lU2l0ZUluZm8+JiBzYW1lU2l0ZUluZm8sIE5TVVJMICp1cmwpCi17
Ci0gICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNj
ZXNzUmF3Q29va2llcykpOwotICAgIGlmICghY29va2llU3RvcmFnZSkKLSAgICAgICAgY29va2ll
U3RvcmFnZSA9IF9DRkhUVFBDb29raWVTdG9yYWdlR2V0RGVmYXVsdChrQ0ZBbGxvY2F0b3JEZWZh
dWx0KTsKLQotICAgIC8vIEZJWE1FOiBTdG9wIGNyZWF0aW5nIGEgbmV3IE5TSFRUUENvb2tpZVN0
b3JhZ2Ugb2JqZWN0IGVhY2ggdGltZSB3ZSB3YW50IHRvIHF1ZXJ5IHRoZSBjb29raWUgamFyLgot
ICAgIC8vIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiBjb3VsZCBpbnN0ZWFkIGtlZXAgYSBOU0hUVFBD
b29raWVTdG9yYWdlIG9iamVjdCBmb3IgdXMuCi0gICAgUmV0YWluUHRyPE5TSFRUUENvb2tpZVN0
b3JhZ2U+IG5zQ29va2llU3RvcmFnZSA9IGFkb3B0TlMoW1tOU0hUVFBDb29raWVTdG9yYWdlIGFs
bG9jXSBfaW5pdFdpdGhDRkhUVFBDb29raWVTdG9yYWdlOmNvb2tpZVN0b3JhZ2VdKTsKLSAgICBy
ZXR1cm4gY29va2llc0ZvclVSTChuc0Nvb2tpZVN0b3JhZ2UuZ2V0KCksIHVybCwgZmlyc3RQYXJ0
eSwgc2FtZVNpdGVJbmZvKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxOU0FycmF5PiBmaWx0ZXJD
b29raWVzKE5TQXJyYXkgKnVuZmlsdGVyZWRDb29raWVzKQotewotICAgIEFTU0VSVChoYXNQcm9j
ZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKLSAg
ICBOU1VJbnRlZ2VyIGNvdW50ID0gW3VuZmlsdGVyZWRDb29raWVzIGNvdW50XTsKLSAgICBSZXRh
aW5QdHI8TlNNdXRhYmxlQXJyYXk+IGZpbHRlcmVkQ29va2llcyA9IGFkb3B0TlMoW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpjb3VudF0pOwotCi0gICAgZm9yIChOU1VJ
bnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBOU0hUVFBDb29raWUgKmNv
b2tpZSA9IChOU0hUVFBDb29raWUgKilbdW5maWx0ZXJlZENvb2tpZXMgb2JqZWN0QXRJbmRleDpp
XTsKLQotICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTYzMjg4Mz4gT24gMTAuNSwgTlNIVFRQ
Q29va2llU3RvcmFnZSB3b3VsZCBzdG9yZSBhbiBlbXB0eSBjb29raWUsCi0gICAgICAgIC8vIHdo
aWNoIHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIuIFdlIGhhdmUgYSB3b3JrYXJvdW5kIGlu
IHNldENvb2tpZXMoKSB0byBwcmV2ZW50Ci0gICAgICAgIC8vIHRoYXQsIGJ1dCB3ZSBhbHNvIG5l
ZWQgdG8gYXZvaWQgc2VuZGluZyBjb29raWVzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHN0b3JlZCwg
YW5kCi0gICAgICAgIC8vIHRoZXJlJ3Mgbm8gaGFybSB0byBkb2luZyB0aGlzIGNoZWNrIGJlY2F1
c2Ugc3VjaCBhIGNvb2tpZSBpcyBuZXZlciB2YWxpZC4KLSAgICAgICAgaWYgKCFbW2Nvb2tpZSBu
YW1lXSBsZW5ndGhdKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKFtjb29r
aWUgaXNIVFRQT25seV0pCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBbZmlsdGVy
ZWRDb29raWVzLmdldCgpIGFkZE9iamVjdDpjb29raWVdOwotICAgIH0KLQotICAgIHJldHVybiBm
aWx0ZXJlZENvb2tpZXM7Ci19Ci0KLSNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElP
TklORykKLQotc3RhdGljIE5TQXJyYXkgKmFwcGx5UGFydGl0aW9uVG9Db29raWVzKE5TU3RyaW5n
ICpwYXJ0aXRpb24sIE5TQXJyYXkgKmNvb2tpZXMpCi17Ci0gICAgQVNTRVJUKGhhc1Byb2Nlc3NQ
cml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOwotCi0gICAg
Ly8gRklYTUUgMjQ3NDc3Mzk6IENGTmV0d29yayBzaG91bGQgZXhwb3NlIHRoaXMga2V5IGFzIFNQ
SQotICAgIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IHBhcnRpdGlvbktleSA9IEAiU3RvcmFnZVBh
cnRpdGlvbiI7Ci0KLSAgICBOU011dGFibGVBcnJheSAqcGFydGl0aW9uZWRDb29raWVzID0gW05T
TXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmNvb2tpZXMuY291bnRdOwotICAgIGZvciAo
TlNIVFRQQ29va2llICpjb29raWUgaW4gY29va2llcykgewotICAgICAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlRGljdGlvbmFyeT4gcHJvcGVydGllcyA9IGFkb3B0TlMoW2Nvb2tpZS5wcm9wZXJ0aWVz
IG11dGFibGVDb3B5XSk7Ci0gICAgICAgIFtwcm9wZXJ0aWVzIHNldE9iamVjdDpwYXJ0aXRpb24g
Zm9yS2V5OnBhcnRpdGlvbktleV07Ci0gICAgICAgIFtwYXJ0aXRpb25lZENvb2tpZXMgYWRkT2Jq
ZWN0OltOU0hUVFBDb29raWUgY29va2llV2l0aFByb3BlcnRpZXM6cHJvcGVydGllcy5nZXQoKV1d
OwotICAgIH0KLQotICAgIHJldHVybiBwYXJ0aXRpb25lZENvb2tpZXM7Ci19Ci0KLXN0YXRpYyBi
b29sIGNvb2tpZXNBcmVCbG9ja2VkRm9yVVJMKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYg
c2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKLXsKLSAgICBy
ZXR1cm4gc2Vzc2lvbi5zaG91bGRCbG9ja0Nvb2tpZXMoZmlyc3RQYXJ0eSwgdXJsKTsKLX0KLQot
c3RhdGljIE5TQXJyYXkgKmNvb2tpZXNJblBhcnRpdGlvbkZvclVSTChjb25zdCBOZXR3b3JrU3Rv
cmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNp
dGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2
NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQpCi17Ci0gICAgQVNT
RVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29v
a2llcykpOwotICAgIFN0cmluZyBwYXJ0aXRpb24gPSBzZXNzaW9uLmNvb2tpZVN0b3JhZ2VQYXJ0
aXRpb24oZmlyc3RQYXJ0eSwgdXJsLCBmcmFtZUlELCBwYWdlSUQpOwotICAgIGlmIChwYXJ0aXRp
b24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgLy8gRklYTUU6IFN0b3Ag
Y3JlYXRpbmcgYSBuZXcgTlNIVFRQQ29va2llU3RvcmFnZSBvYmplY3QgZWFjaCB0aW1lIHdlIHdh
bnQgdG8gcXVlcnkgdGhlIGNvb2tpZSBqYXIuCi0gICAgLy8gTmV0d29ya1N0b3JhZ2VTZXNzaW9u
IGNvdWxkIGluc3RlYWQga2VlcCBhIE5TSFRUUENvb2tpZVN0b3JhZ2Ugb2JqZWN0IGZvciB1cy4K
LSAgICBSZXRhaW5QdHI8TlNIVFRQQ29va2llU3RvcmFnZT4gY29va2llU3RvcmFnZTsKLSAgICBp
ZiAoYXV0byBzdG9yYWdlID0gc2Vzc2lvbi5jb29raWVTdG9yYWdlKCkpCi0gICAgICAgIGNvb2tp
ZVN0b3JhZ2UgPSBhZG9wdE5TKFtbTlNIVFRQQ29va2llU3RvcmFnZSBhbGxvY10gX2luaXRXaXRo
Q0ZIVFRQQ29va2llU3RvcmFnZTpzdG9yYWdlLmdldCgpXSk7Ci0gICAgZWxzZQotICAgICAgICBj
b29raWVTdG9yYWdlID0gW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3Jh
Z2VdOwotICAgIHJldHVybiBjb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHVybCwg
Zmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCBwYXJ0aXRpb24pOwotfQotCi0jZW5kaWYgLy8gSEFW
RShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCi0gICAgCi1zdGF0aWMgTlNBcnJheSAq
Y29va2llc0ZvclVSTChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0
IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0
IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFs
PHVpbnQ2NF90PiBwYWdlSUQpCi17Ci0jaWYgSEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJ
T05JTkcpCi0gICAgaWYgKGNvb2tpZXNBcmVCbG9ja2VkRm9yVVJMKHNlc3Npb24sIGZpcnN0UGFy
dHksIHVybCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgaWYgKE5TQXJyYXkgKmNv
b2tpZXMgPSBjb29raWVzSW5QYXJ0aXRpb25Gb3JVUkwoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgc2Ft
ZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCkpCi0gICAgICAgIHJldHVybiBjb29raWVz
OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBh
Z2VJRCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gaHR0cENvb2tpZXNGb3JVUkwoc2Vzc2lvbi5jb29r
aWVTdG9yYWdlKCkuZ2V0KCksIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsKTsKLX0KLQot
ZW51bSBJbmNsdWRlSFRUUE9ubHlPck5vdCB7IERvTm90SW5jbHVkZUhUVFBPbmx5LCBJbmNsdWRl
SFRUUE9ubHkgfTsKLXN0YXRpYyBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVzRm9yU2Vz
c2lvbihjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmly
c3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJs
LCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90
PiBwYWdlSUQsIEluY2x1ZGVIVFRQT25seU9yTm90IGluY2x1ZGVIVFRQT25seSwgSW5jbHVkZVNl
Y3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpCi17Ci0gICAgQVNTRVJUKGhhc1Byb2Nl
c3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOwotCi0g
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgTlNBcnJheSAqY29va2llcyA9
IGNvb2tpZXNGb3JVUkwoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZy
YW1lSUQsIHBhZ2VJRCk7Ci0gICAgaWYgKCFbY29va2llcyBjb3VudF0pCi0gICAgICAgIHJldHVy
biB7IFN0cmluZygpLCBmYWxzZSB9OyAvLyBSZXR1cm4gYSBudWxsIHN0cmluZywgbm90IGFuIGVt
cHR5IG9uZSB0aGF0IFN0cmluZ0J1aWxkZXIgd291bGQgY3JlYXRlIGJlbG93LgotCi0gICAgU3Ry
aW5nQnVpbGRlciBjb29raWVzQnVpbGRlcjsKLSAgICBib29sIGRpZEFjY2Vzc1NlY3VyZUNvb2tp
ZXMgPSBmYWxzZTsKLSAgICBmb3IgKE5TSFRUUENvb2tpZSAqY29va2llIGluIGNvb2tpZXMpIHsK
LSAgICAgICAgaWYgKCFbW2Nvb2tpZSBuYW1lXSBsZW5ndGhdKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgaWYgKCFpbmNsdWRlSFRUUE9ubHkgJiYgW2Nvb2tpZSBpc0hUVFBPbmx5
XSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChbY29va2llIGlzU2VjdXJl
XSkgewotICAgICAgICAgICAgZGlkQWNjZXNzU2VjdXJlQ29va2llcyA9IHRydWU7Ci0gICAgICAg
ICAgICBpZiAoaW5jbHVkZVNlY3VyZUNvb2tpZXMgPT0gSW5jbHVkZVNlY3VyZUNvb2tpZXM6Ok5v
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFj
b29raWVzQnVpbGRlci5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb29raWVzQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCI7ICIpOwotCi0gICAgICAgIGNvb2tpZXNCdWlsZGVyLmFwcGVuZChbY29va2ll
IG5hbWVdKTsKLSAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGNv
b2tpZXNCdWlsZGVyLmFwcGVuZChbY29va2llIHZhbHVlXSk7Ci0gICAgfQotICAgIHJldHVybiB7
IGNvb2tpZXNCdWlsZGVyLnRvU3RyaW5nKCksIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMgfTsKLQot
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIHsgU3RyaW5nKCksIGZh
bHNlIH07Ci19Ci0KLXN0YXRpYyB2b2lkIGRlbGV0ZUFsbEhUVFBDb29raWVzKENGSFRUUENvb2tp
ZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSkKLXsKLSAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZp
bGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7Ci0KLSAgICBpZiAo
IWNvb2tpZVN0b3JhZ2UpIHsKLSAgICAgICAgTlNIVFRQQ29va2llU3RvcmFnZSAqY29va2llU3Rv
cmFnZSA9IFtOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXTsKLSAg
ICAgICAgTlNBcnJheSAqY29va2llcyA9IFtjb29raWVTdG9yYWdlIGNvb2tpZXNdOwotICAgICAg
ICBpZiAoIWNvb2tpZXMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZm9yIChOU0hU
VFBDb29raWUgKmNvb2tpZSBpbiBjb29raWVzKQotICAgICAgICAgICAgW2Nvb2tpZVN0b3JhZ2Ug
ZGVsZXRlQ29va2llOmNvb2tpZV07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDRkhU
VFBDb29raWVTdG9yYWdlRGVsZXRlQWxsQ29va2llcyhjb29raWVTdG9yYWdlKTsKLX0KLQotc3Rk
OjpwYWlyPFN0cmluZywgYm9vbD4gY29va2llc0ZvckRPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNl
c3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZv
JiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBm
cmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29r
aWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKQotewotICAgIHJldHVybiBjb29raWVzRm9yU2Vzc2lv
bihzZXNzaW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlE
LCBEb05vdEluY2x1ZGVIVFRQT25seSwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOwotfQotCi1zdGQ6
OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29u
c3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlv
bmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIElu
Y2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKQotewotICAgIHJldHVybiBj
b29raWVzRm9yU2Vzc2lvbihzZXNzaW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwg
ZnJhbWVJRCwgcGFnZUlELCBJbmNsdWRlSFRUUE9ubHksIGluY2x1ZGVTZWN1cmVDb29raWVzKTsK
LX0KLQotc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFs
dWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBDb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRQcm94eSYgaGVhZGVyRmllbGRQcm94eSkKLXsKLSAgICByZXR1cm4gY29v
a2llc0ZvclNlc3Npb24oc2Vzc2lvbiwgaGVhZGVyRmllbGRQcm94eS5maXJzdFBhcnR5LCBoZWFk
ZXJGaWVsZFByb3h5LnNhbWVTaXRlSW5mbywgaGVhZGVyRmllbGRQcm94eS51cmwsIGhlYWRlckZp
ZWxkUHJveHkuZnJhbWVJRCwgaGVhZGVyRmllbGRQcm94eS5wYWdlSUQsIEluY2x1ZGVIVFRQT25s
eSwgaGVhZGVyRmllbGRQcm94eS5pbmNsdWRlU2VjdXJlQ29va2llcyk7Ci19Ci0KLXZvaWQgc2V0
Q29va2llc0Zyb21ET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25z
dCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25z
dCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25h
bDx1aW50NjRfdD4gcGFnZUlELCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cikKLXsKLSAgICBBU1NF
UlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29r
aWVzKSk7Ci0KLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICAvLyA8cmRh
cjovL3Byb2JsZW0vNTYzMjg4Mz4gT24gMTAuNSwgTlNIVFRQQ29va2llU3RvcmFnZSB3b3VsZCBz
dG9yZSBhbiBlbXB0eSBjb29raWUsCi0gICAgLy8gd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29v
a2llOiA9Ii4KLSAgICBpZiAoY29va2llU3RyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1MzE+LCA8
cmRhcjovLzQ0MDkwMzQ+Ci0gICAgLy8gY29va2llc1dpdGhSZXNwb25zZUhlYWRlckZpZWxkcyBk
b2Vzbid0IHBhcnNlIGNvb2tpZXMgd2l0aG91dCBhIHZhbHVlCi0gICAgU3RyaW5nIGNvb2tpZVN0
cmluZyA9IGNvb2tpZVN0ci5jb250YWlucygnPScpID8gY29va2llU3RyIDogY29va2llU3RyICsg
Ij0iOwotCi0gICAgTlNVUkwgKmNvb2tpZVVSTCA9IHVybDsKLSAgICBOU0RpY3Rpb25hcnkgKmhl
YWRlckZpZWxkcyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6Y29va2llU3Ry
aW5nIGZvcktleTpAIlNldC1Db29raWUiXTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBOU0Fy
cmF5ICp1bmZpbHRlcmVkQ29va2llcyA9IFtOU0hUVFBDb29raWUgX3BhcnNlZENvb2tpZXNXaXRo
UmVzcG9uc2VIZWFkZXJGaWVsZHM6aGVhZGVyRmllbGRzIGZvclVSTDpjb29raWVVUkxdOwotI2Vs
c2UKLSAgICBOU0FycmF5ICp1bmZpbHRlcmVkQ29va2llcyA9IFtOU0hUVFBDb29raWUgY29va2ll
c1dpdGhSZXNwb25zZUhlYWRlckZpZWxkczpoZWFkZXJGaWVsZHMgZm9yVVJMOmNvb2tpZVVSTF07
Ci0jZW5kaWYKLQotICAgIFJldGFpblB0cjxOU0FycmF5PiBmaWx0ZXJlZENvb2tpZXMgPSBmaWx0
ZXJDb29raWVzKHVuZmlsdGVyZWRDb29raWVzKTsKLSAgICBBU1NFUlQoW2ZpbHRlcmVkQ29va2ll
cy5nZXQoKSBjb3VudF0gPD0gMSk7Ci0KLSNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJ
VElPTklORykKLSAgICBpZiAoc2Vzc2lvbi5zaG91bGRCbG9ja0Nvb2tpZXMoZmlyc3RQYXJ0eSwg
dXJsKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIHBhcnRpdGlvbiA9IHNlc3Npb24u
Y29va2llU3RvcmFnZVBhcnRpdGlvbihmaXJzdFBhcnR5LCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCk7
Ci0gICAgaWYgKCFwYXJ0aXRpb24uaXNFbXB0eSgpKQotICAgICAgICBmaWx0ZXJlZENvb2tpZXMg
PSBhcHBseVBhcnRpdGlvblRvQ29va2llcyhwYXJ0aXRpb24sIGZpbHRlcmVkQ29va2llcy5nZXQo
KSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsKLSAgICBVTlVTRURfUEFSQU0o
cGFnZUlEKTsKLSNlbmRpZgotCi0gICAgc2V0SFRUUENvb2tpZXNGb3JVUkwoc2Vzc2lvbi5jb29r
aWVTdG9yYWdlKCkuZ2V0KCksIGZpbHRlcmVkQ29va2llcy5nZXQoKSwgY29va2llVVJMLCBmaXJz
dFBhcnR5LCBzYW1lU2l0ZUluZm8pOwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
LX0KLQotc3RhdGljIE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSBodHRwQ29va2llQWNjZXB0UG9s
aWN5KENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSkKLXsKLSAgICBBU1NFUlQo
aGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVz
KSk7Ci0KLSAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCi0gICAgICAgIHJldHVybiBbW05TSFRUUENv
b2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIGNvb2tpZUFjY2VwdFBvbGljeV07
Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlNIVFRQQ29va2llQWNjZXB0UG9saWN5PihDRkhU
VFBDb29raWVTdG9yYWdlR2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UpKTsKLX0K
LQotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Np
b24pCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgTlNIVFRQQ29v
a2llQWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSA9IGh0dHBDb29raWVBY2NlcHRQb2xp
Y3koc2Vzc2lvbi5jb29raWVTdG9yYWdlKCkuZ2V0KCkpOwotICAgIHJldHVybiBjb29raWVBY2Nl
cHRQb2xpY3kgPT0gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5QWx3YXlzIHx8IGNvb2tpZUFjY2Vw
dFBvbGljeSA9PSBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERv
bWFpbiB8fCBjb29raWVBY2NlcHRQb2xpY3kgPT0gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5RXhj
bHVzaXZlbHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgZ2V0UmF3Q29va2llcyhjb25z
dCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwg
Y29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9w
dGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQs
IFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQotewotICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsK
LSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBOU0FycmF5ICpjb29raWVz
ID0gY29va2llc0ZvclVSTChzZXNzaW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwg
ZnJhbWVJRCwgcGFnZUlEKTsKLSAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW2Nvb2tpZXMgY291bnRd
OwotICAgIHJhd0Nvb2tpZXMucmVzZXJ2ZUNhcGFjaXR5KGNvdW50KTsKLSAgICBmb3IgKE5TVUlu
dGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIE5TSFRUUENvb2tpZSAqY29v
a2llID0gKE5TSFRUUENvb2tpZSAqKVtjb29raWVzIG9iamVjdEF0SW5kZXg6aV07Ci0gICAgICAg
IHJhd0Nvb2tpZXMudW5jaGVja2VkQXBwZW5kKHsgY29va2llIH0pOwotICAgIH0KLQotICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgZGVs
ZXRlQ29va2llKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKLXsKLSAgICBBU1NFUlQoaGFzUHJvY2Vz
c1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7Ci0KLSAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29v
a2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IHNlc3Npb24uY29va2llU3RvcmFnZSgpOwot
ICAgIE5TQXJyYXkgKmNvb2tpZXMgPSBodHRwQ29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLmdl
dCgpLCBuaWwsIHN0ZDo6bnVsbG9wdCwgdXJsKTsKLQotICAgIE5TU3RyaW5nICpjb29raWVOYW1l
U3RyaW5nID0gY29va2llTmFtZTsKLQotICAgIE5TVUludGVnZXIgY291bnQgPSBbY29va2llcyBj
b3VudF07Ci0gICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAg
ICAgICBOU0hUVFBDb29raWUgKmNvb2tpZSA9IChOU0hUVFBDb29raWUgKilbY29va2llcyBvYmpl
Y3RBdEluZGV4OmldOwotICAgICAgICBpZiAoW1tjb29raWUgbmFtZV0gaXNFcXVhbFRvU3RyaW5n
OmNvb2tpZU5hbWVTdHJpbmddKQotICAgICAgICAgICAgZGVsZXRlSFRUUENvb2tpZShjb29raWVT
dG9yYWdlLmdldCgpLCBjb29raWUpOwotICAgIH0KLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7Ci19Ci0KLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoY29uc3QgTmV0d29ya1N0
b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKLXsKLSAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBOU0FycmF5ICpjb29raWVzID0g
aHR0cENvb2tpZXMoc2Vzc2lvbi5jb29raWVTdG9yYWdlKCkuZ2V0KCkpOwotICAgIAotICAgIGZv
ciAoTlNIVFRQQ29va2llKiBjb29raWUgaW4gY29va2llcykKLSAgICAgICAgaG9zdG5hbWVzLmFk
ZChbY29va2llIGRvbWFpbl0pOwotICAgIAotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
Ci19Ci0KLXZvaWQgZGVsZXRlQWxsQ29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24m
IHNlc3Npb24pCi17Ci0gICAgZGVsZXRlQWxsSFRUUENvb2tpZXMoc2Vzc2lvbi5jb29raWVTdG9y
YWdlKCkuZ2V0KCkpOwotfQotCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoY29uc3Qg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9z
dG5hbWVzKQotewotICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxl
Z2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKLQotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKLQotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9y
YWdlID0gc2Vzc2lvbi5jb29raWVTdG9yYWdlKCk7Ci0gICAgTlNBcnJheSAqY29va2llcyA9IGh0
dHBDb29raWVzKGNvb2tpZVN0b3JhZ2UuZ2V0KCkpOwotICAgIGlmICghY29va2llcykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxSZXRhaW5QdHI8TlNIVFRQ
Q29va2llPj4+IGNvb2tpZXNCeURvbWFpbjsKLSAgICBmb3IgKE5TSFRUUENvb2tpZSogY29va2ll
IGluIGNvb2tpZXMpIHsKLSAgICAgICAgYXV0byYgY29va2llcyA9IGNvb2tpZXNCeURvbWFpbi5h
ZGQoY29va2llLmRvbWFpbiwgVmVjdG9yPFJldGFpblB0cjxOU0hUVFBDb29raWU+PigpKS5pdGVy
YXRvci0+dmFsdWU7Ci0gICAgICAgIGNvb2tpZXMuYXBwZW5kKGNvb2tpZSk7Ci0gICAgfQotCi0g
ICAgZm9yIChjb25zdCBhdXRvJiBob3N0bmFtZSA6IGhvc3RuYW1lcykgewotICAgICAgICBhdXRv
IGl0ID0gY29va2llc0J5RG9tYWluLmZpbmQoaG9zdG5hbWUpOwotICAgICAgICBpZiAoaXQgPT0g
Y29va2llc0J5RG9tYWluLmVuZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
Zm9yIChhdXRvJiBjb29raWUgOiBpdC0+dmFsdWUpCi0gICAgICAgICAgICBkZWxldGVIVFRQQ29v
a2llKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZS5nZXQoKSk7Ci0gICAgfQotCi0gICAgW3Nl
c3Npb24ubnNDb29raWVTdG9yYWdlKCkgX3NhdmVDb29raWVzXTsKLQotICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7Ci19Ci0KLXZvaWQgZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uo
Y29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBXYWxsVGltZSB0aW1lUG9pbnQp
Ci17Ci0gICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2Fu
QWNjZXNzUmF3Q29va2llcykpOwotCi0gICAgaWYgKCFbTlNIVFRQQ29va2llU3RvcmFnZSBpbnN0
YW5jZXNSZXNwb25kVG9TZWxlY3RvcjpAc2VsZWN0b3IocmVtb3ZlQ29va2llc1NpbmNlRGF0ZTop
XSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNUaW1lSW50ZXJ2YWwgdGltZUludGVydmFsID0g
dGltZVBvaW50LnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpOwotICAgIE5TRGF0ZSAqZGF0
ZSA9IFtOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZTE5NzA6dGltZUludGVydmFsXTsK
LQotICAgIGF1dG8gKnN0b3JhZ2UgPSBzZXNzaW9uLm5zQ29va2llU3RvcmFnZSgpOwotCi0gICAg
W3N0b3JhZ2UgcmVtb3ZlQ29va2llc1NpbmNlRGF0ZTpkYXRlXTsKLSAgICBbc3RvcmFnZSBfc2F2
ZUNvb2tpZXNdOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL21hYy9XZWJDb3JlUmVzb3VyY2VIYW5kbGVBc09wZXJhdGlvblF1ZXVlRGVsZWdhdGUu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlUmVzb3VyY2VI
YW5kbGVBc09wZXJhdGlvblF1ZXVlRGVsZWdhdGUubW0KaW5kZXggODg3NjMxMDBhZDRlNjZkOTQx
MjI2OGE3YTkxYzM5ZmQzOTkwMjYzMy4uYjNlOTA3ZmZkZGUyODVmOGM4MDNkNjcxYTI3ZmY3NGEw
OTIxYzI2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMv
V2ViQ29yZVJlc291cmNlSGFuZGxlQXNPcGVyYXRpb25RdWV1ZURlbGVnYXRlLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFz
T3BlcmF0aW9uUXVldWVEZWxlZ2F0ZS5tbQpAQCAtMjksNiArMjksNyBAQAogI2ltcG9ydCAiQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKICNpbXBvcnQgIkF1dGhlbnRpY2F0aW9uTWFjLmgiCiAj
aW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJOZXR3b3JraW5nQ29udGV4dC5oIgogI2ltcG9y
dCAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbXBvcnQgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCiAj
aW1wb3J0ICJSZXNvdXJjZVJlcXVlc3QuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNWVlODc2MWY2NWIxNWFiMDlhMjRlZGI5MGVkYWE4NTIzM2Q1MzFjNy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwyNjAgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDggWGFuIExvcGV6IDx4
YW5AZ25vbWUub3JnPgotICogIENvcHlyaWdodCAoQykgMjAwOSBJZ2FsaWEgUy5MLgotICogIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0Uo
U09VUCkKLQotI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFByb3h5LmgiCi0jaW5jbHVkZSAiQ29va2llc1N0cmF0ZWd5LmgiCi0jaW5jbHVkZSAi
R1VuaXF1ZVB0clNvdXAuaCIKLSNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZVNlc3Npb24uaCIKLSNp
bmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29va2llSmFy
LmgiCi0jaW5jbHVkZSAiU291cE5ldHdvcmtTZXNzaW9uLmgiCi0jaW5jbHVkZSAiVVJMLmgiCi0j
aW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1z
dGF0aWMgaW5saW5lIGJvb2wgaHR0cE9ubHlDb29raWVFeGlzdHMoY29uc3QgR1NMaXN0KiBjb29r
aWVzLCBjb25zdCBnY2hhciogbmFtZSwgY29uc3QgZ2NoYXIqIHBhdGgpCi17Ci0gICAgZm9yIChj
b25zdCBHU0xpc3QqIGl0ZXIgPSBjb29raWVzOyBpdGVyOyBpdGVyID0gZ19zbGlzdF9uZXh0KGl0
ZXIpKSB7Ci0gICAgICAgIFNvdXBDb29raWUqIGNvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29r
aWUqPihpdGVyLT5kYXRhKTsKLSAgICAgICAgaWYgKCFzdHJjbXAoc291cF9jb29raWVfZ2V0X25h
bWUoY29va2llKSwgbmFtZSkKLSAgICAgICAgICAgICYmICFnX3N0cmNtcDAoc291cF9jb29raWVf
Z2V0X3BhdGgoY29va2llKSwgcGF0aCkpIHsKLSAgICAgICAgICAgIGlmIChzb3VwX2Nvb2tpZV9n
ZXRfaHR0cF9vbmx5KGNvb2tpZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXZvaWQgc2V0Q29va2llc0Zyb21ET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNz
aW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVS
TCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVp
bnQ2NF90PiBwYWdlSUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KGZyYW1lSUQpOwotICAgIFVOVVNFRF9QQVJBTShwYWdlSUQpOwotICAgIEdVbmlxdWVQdHI8U291
cFVSST4gb3JpZ2luID0gdXJsLmNyZWF0ZVNvdXBVUkkoKTsKLSAgICBpZiAoIW9yaWdpbikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiBmaXJzdFBhcnR5VVJJID0g
Zmlyc3RQYXJ0eS5jcmVhdGVTb3VwVVJJKCk7Ci0gICAgaWYgKCFmaXJzdFBhcnR5VVJJKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBHZXQgZXhpc3RpbmcgY29va2llcyBmb3IgdGhpcyBvcmln
aW4uCi0gICAgU291cENvb2tpZUphciogamFyID0gc2Vzc2lvbi5jb29raWVTdG9yYWdlKCk7Ci0g
ICAgR1NMaXN0KiBleGlzdGluZ0Nvb2tpZXMgPSBzb3VwX2Nvb2tpZV9qYXJfZ2V0X2Nvb2tpZV9s
aXN0KGphciwgb3JpZ2luLmdldCgpLCBUUlVFKTsKLQotICAgIGZvciAoYXV0byYgY29va2llU3Ry
aW5nIDogdmFsdWUuc3BsaXQoJ1xuJykpIHsKLSAgICAgICAgR1VuaXF1ZVB0cjxTb3VwQ29va2ll
PiBjb29raWUoc291cF9jb29raWVfcGFyc2UoY29va2llU3RyaW5nLnV0ZjgoKS5kYXRhKCksIG9y
aWdpbi5nZXQoKSkpOwotICAgICAgICBpZiAoIWNvb2tpZSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29va2llIGlzIG5vdCBodHRwT25seSBzaW5j
ZSBzdWNoIGNvb2tpZXMgc2hvdWxkIG5vdCBiZSBzZXQgZnJvbSBKYXZhU2NyaXB0LgotICAgICAg
ICBpZiAoc291cF9jb29raWVfZ2V0X2h0dHBfb25seShjb29raWUuZ2V0KCkpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvIG5vdCBvdmVyd3JpdGUg
aHR0cE9ubHkgY29va2llcyBmcm9tIEphdmFTY3JpcHQuCi0gICAgICAgIGlmIChodHRwT25seUNv
b2tpZUV4aXN0cyhleGlzdGluZ0Nvb2tpZXMsIHNvdXBfY29va2llX2dldF9uYW1lKGNvb2tpZS5n
ZXQoKSksIHNvdXBfY29va2llX2dldF9wYXRoKGNvb2tpZS5nZXQoKSkpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgc291cF9jb29raWVfamFyX2FkZF9jb29raWVfd2l0aF9maXJz
dF9wYXJ0eShqYXIsIGZpcnN0UGFydHlVUkkuZ2V0KCksIGNvb2tpZS5yZWxlYXNlKCkpOwotICAg
IH0KLQotICAgIHNvdXBfY29va2llc19mcmVlKGV4aXN0aW5nQ29va2llcyk7Ci19Ci0KLXN0YXRp
YyBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVzRm9yU2Vzc2lvbihjb25zdCBOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgdXJsLCBib29sIGZvckhUVFBIZWFk
ZXIsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKQotewotICAgIEdV
bmlxdWVQdHI8U291cFVSST4gdXJpID0gdXJsLmNyZWF0ZVNvdXBVUkkoKTsKLSAgICBpZiAoIXVy
aSkKLSAgICAgICAgcmV0dXJuIHsgeyB9LCBmYWxzZSB9OwotCi0gICAgR1NMaXN0KiBjb29raWVz
ID0gc291cF9jb29raWVfamFyX2dldF9jb29raWVfbGlzdChzZXNzaW9uLmNvb2tpZVN0b3JhZ2Uo
KSwgdXJpLmdldCgpLCBmb3JIVFRQSGVhZGVyKTsKLSAgICBib29sIGRpZEFjY2Vzc1NlY3VyZUNv
b2tpZXMgPSBmYWxzZTsKLQotICAgIC8vIGxpYnNvdXAgc2hvdWxkIG9taXQgc2VjdXJlIGNvb2tp
ZXMgaXRzZWxmIGlmIHRoZSBwcm90b2NvbCBpcyBub3QgaHR0cHMuCi0gICAgaWYgKHVybC5wcm90
b2NvbElzKCJodHRwcyIpKSB7Ci0gICAgICAgIEdTTGlzdCogaXRlbSA9IGNvb2tpZXM7Ci0gICAg
ICAgIHdoaWxlIChpdGVtKSB7Ci0gICAgICAgICAgICBhdXRvIGNvb2tpZSA9IHN0YXRpY19jYXN0
PFNvdXBDb29raWUqPihpdGVtLT5kYXRhKTsKLSAgICAgICAgICAgIGlmIChzb3VwX2Nvb2tpZV9n
ZXRfc2VjdXJlKGNvb2tpZSkpIHsKLSAgICAgICAgICAgICAgICBkaWRBY2Nlc3NTZWN1cmVDb29r
aWVzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZVNlY3VyZUNvb2tpZXMgPT0g
SW5jbHVkZVNlY3VyZUNvb2tpZXM6Ok5vKSB7Ci0gICAgICAgICAgICAgICAgICAgIEdTTGlzdCog
bmV4dCA9IGl0ZW0tPm5leHQ7Ci0gICAgICAgICAgICAgICAgICAgIHNvdXBfY29va2llX2ZyZWUo
c3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpKTsKLSAgICAgICAgICAgICAgICAg
ICAgY29va2llcyA9IGdfc2xpc3RfcmVtb3ZlX2xpbmsoY29va2llcywgaXRlbSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGl0ZW0gPSBuZXh0OwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpdGVtID0gaXRl
bS0+bmV4dDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghY29va2llcykKLSAgICAgICAg
cmV0dXJuIHsgeyB9LCBmYWxzZSB9OwotCi0gICAgR1VuaXF1ZVB0cjxjaGFyPiBjb29raWVIZWFk
ZXIoc291cF9jb29raWVzX3RvX2Nvb2tpZV9oZWFkZXIoY29va2llcykpOwotICAgIHNvdXBfY29v
a2llc19mcmVlKGNvb2tpZXMpOwotCi0gICAgcmV0dXJuIHsgU3RyaW5nOjpmcm9tVVRGOChjb29r
aWVIZWFkZXIuZ2V0KCkpLCBkaWRBY2Nlc3NTZWN1cmVDb29raWVzIH07Ci19Ci0KLXN0ZDo6cGFp
cjxTdHJpbmcsIGJvb2w+IGNvb2tpZXNGb3JET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9u
JiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYsIGNv
bnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlv
bmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVD
b29raWVzKQotewotICAgIFVOVVNFRF9QQVJBTShmaXJzdFBhcnR5KTsKLSAgICBVTlVTRURfUEFS
QU0oZnJhbWVJRCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7Ci0gICAgcmV0dXJuIGNvb2tp
ZXNGb3JTZXNzaW9uKHNlc3Npb24sIHVybCwgZmFsc2UsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsK
LX0KLQotc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFs
dWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0
UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFs
PHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1
ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKQotewotICAgIFVOVVNFRF9QQVJB
TShmaXJzdFBhcnR5KTsKLSAgICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7Ci0gICAgVU5VU0VEX1BB
UkFNKHBhZ2VJRCk7Ci0gICAgLy8gU2VjdXJlIGNvb2tpZXMgd2lsbCBzdGlsbCBvbmx5IGJlIGlu
Y2x1ZGVkIGlmIHVybCdzIHByb3RvY29sIGlzIGh0dHBzLgotICAgIHJldHVybiBjb29raWVzRm9y
U2Vzc2lvbihzZXNzaW9uLCB1cmwsIHRydWUsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKLX0KLQot
c3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29u
c3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBDb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRQcm94eSYgaGVhZGVyRmllbGRQcm94eSkKLXsKLSAgICByZXR1cm4gY29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWUoc2Vzc2lvbiwgaGVhZGVyRmllbGRQcm94eS5maXJzdFBhcnR5
LCBoZWFkZXJGaWVsZFByb3h5LnNhbWVTaXRlSW5mbywgaGVhZGVyRmllbGRQcm94eS51cmwsIGhl
YWRlckZpZWxkUHJveHkuZnJhbWVJRCwgaGVhZGVyRmllbGRQcm94eS5wYWdlSUQsIGhlYWRlckZp
ZWxkUHJveHkuaW5jbHVkZVNlY3VyZUNvb2tpZXMpOwotfQotCi1ib29sIGNvb2tpZXNFbmFibGVk
KGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbikKLXsKLSAgICBhdXRvIHBvbGlj
eSA9IHNvdXBfY29va2llX2phcl9nZXRfYWNjZXB0X3BvbGljeShzZXNzaW9uLmNvb2tpZVN0b3Jh
Z2UoKSk7Ci0gICAgcmV0dXJuIHBvbGljeSA9PSBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX0FMV0FZ
UyB8fCBwb2xpY3kgPT0gU09VUF9DT09LSUVfSkFSX0FDQ0VQVF9OT19USElSRF9QQVJUWTsKLX0K
LQotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lv
biwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwm
IHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50
NjRfdD4gcGFnZUlELCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKLXsKLSAgICBVTlVTRURf
UEFSQU0oZmlyc3RQYXJ0eSk7Ci0gICAgVU5VU0VEX1BBUkFNKGZyYW1lSUQpOwotICAgIFVOVVNF
RF9QQVJBTShwYWdlSUQpOwotICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAgICBHVW5pcXVlUHRy
PFNvdXBVUkk+IHVyaSA9IHVybC5jcmVhdGVTb3VwVVJJKCk7Ci0gICAgaWYgKCF1cmkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdVbmlxdWVQdHI8R1NMaXN0PiBjb29raWVzKHNvdXBf
Y29va2llX2phcl9nZXRfY29va2llX2xpc3Qoc2Vzc2lvbi5jb29raWVTdG9yYWdlKCksIHVyaS5n
ZXQoKSwgVFJVRSkpOwotICAgIGlmICghY29va2llcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgZm9yIChHU0xpc3QqIGl0ZXIgPSBjb29raWVzLmdldCgpOyBpdGVyOyBpdGVyID0gZ19z
bGlzdF9uZXh0KGl0ZXIpKSB7Ci0gICAgICAgIFNvdXBDb29raWUqIHNvdXBDb29raWUgPSBzdGF0
aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlci0+ZGF0YSk7Ci0gICAgICAgIENvb2tpZSBjb29raWU7
Ci0gICAgICAgIGNvb2tpZS5uYW1lID0gU3RyaW5nOjpmcm9tVVRGOChzb3VwQ29va2llLT5uYW1l
KTsKLSAgICAgICAgY29va2llLnZhbHVlID0gU3RyaW5nOjpmcm9tVVRGOChzb3VwQ29va2llLT52
YWx1ZSk7Ci0gICAgICAgIGNvb2tpZS5kb21haW4gPSBTdHJpbmc6OmZyb21VVEY4KHNvdXBDb29r
aWUtPmRvbWFpbik7Ci0gICAgICAgIGNvb2tpZS5wYXRoID0gU3RyaW5nOjpmcm9tVVRGOChzb3Vw
Q29va2llLT5wYXRoKTsKLSAgICAgICAgY29va2llLmNyZWF0ZWQgPSAwOwotICAgICAgICBjb29r
aWUuZXhwaXJlcyA9IHNvdXBDb29raWUtPmV4cGlyZXMgPyBzdGF0aWNfY2FzdDxkb3VibGU+KHNv
dXBfZGF0ZV90b190aW1lX3Qoc291cENvb2tpZS0+ZXhwaXJlcykpICogMTAwMCA6IDA7Ci0gICAg
ICAgIGNvb2tpZS5odHRwT25seSA9IHNvdXBDb29raWUtPmh0dHBfb25seTsKLSAgICAgICAgY29v
a2llLnNlY3VyZSA9IHNvdXBDb29raWUtPnNlY3VyZTsKLSAgICAgICAgY29va2llLnNlc3Npb24g
PSAhc291cENvb2tpZS0+ZXhwaXJlczsKLSAgICAgICAgcmF3Q29va2llcy5hcHBlbmQoV1RGTW92
ZShjb29raWUpKTsKLSAgICAgICAgc291cF9jb29raWVfZnJlZShzb3VwQ29va2llKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBkZWxldGVDb29raWUoY29uc3QgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBu
YW1lKQotewotICAgIEdVbmlxdWVQdHI8U291cFVSST4gdXJpID0gdXJsLmNyZWF0ZVNvdXBVUkko
KTsKLSAgICBpZiAoIXVyaSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU291cENvb2tpZUphciog
amFyID0gc2Vzc2lvbi5jb29raWVTdG9yYWdlKCk7Ci0gICAgR1VuaXF1ZVB0cjxHU0xpc3Q+IGNv
b2tpZXMoc291cF9jb29raWVfamFyX2dldF9jb29raWVfbGlzdChqYXIsIHVyaS5nZXQoKSwgVFJV
RSkpOwotICAgIGlmICghY29va2llcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1N0cmluZyBj
b29raWVOYW1lID0gbmFtZS51dGY4KCk7Ci0gICAgYm9vbCB3YXNEZWxldGVkID0gZmFsc2U7Ci0g
ICAgZm9yIChHU0xpc3QqIGl0ZXIgPSBjb29raWVzLmdldCgpOyBpdGVyOyBpdGVyID0gZ19zbGlz
dF9uZXh0KGl0ZXIpKSB7Ci0gICAgICAgIFNvdXBDb29raWUqIGNvb2tpZSA9IHN0YXRpY19jYXN0
PFNvdXBDb29raWUqPihpdGVyLT5kYXRhKTsKLSAgICAgICAgaWYgKCF3YXNEZWxldGVkICYmIGNv
b2tpZU5hbWUgPT0gY29va2llLT5uYW1lKSB7Ci0gICAgICAgICAgICBzb3VwX2Nvb2tpZV9qYXJf
ZGVsZXRlX2Nvb2tpZShqYXIsIGNvb2tpZSk7Ci0gICAgICAgICAgICB3YXNEZWxldGVkID0gdHJ1
ZTsKLSAgICAgICAgfQotICAgICAgICBzb3VwX2Nvb2tpZV9mcmVlKGNvb2tpZSk7Ci0gICAgfQot
fQotCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgc2Vzc2lvbiwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCi17Ci0gICAgR1VuaXF1
ZVB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKHNlc3Npb24u
Y29va2llU3RvcmFnZSgpKSk7Ci0gICAgZm9yIChHU0xpc3QqIGl0ZW0gPSBjb29raWVzLmdldCgp
OyBpdGVtOyBpdGVtID0gZ19zbGlzdF9uZXh0KGl0ZW0pKSB7Ci0gICAgICAgIFNvdXBDb29raWUq
IGNvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5kYXRhKTsKLSAgICAgICAg
aWYgKGNvb2tpZS0+ZG9tYWluKQotICAgICAgICAgICAgaG9zdG5hbWVzLmFkZChTdHJpbmc6OmZy
b21VVEY4KGNvb2tpZS0+ZG9tYWluKSk7Ci0gICAgICAgIHNvdXBfY29va2llX2ZyZWUoY29va2ll
KTsKLSAgICB9Ci19Ci0KLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhjb25zdCBOZXR3
b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBob3N0bmFt
ZXMpCi17Ci0gICAgU291cENvb2tpZUphciogY29va2llSmFyID0gc2Vzc2lvbi5jb29raWVTdG9y
YWdlKCk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGhvc3RuYW1lIDogaG9zdG5hbWVzKSB7Ci0g
ICAgICAgIENTdHJpbmcgaG9zdE5hbWVTdHJpbmcgPSBob3N0bmFtZS51dGY4KCk7Ci0KLSAgICAg
ICAgR1VuaXF1ZVB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFyX2FsbF9jb29raWVz
KGNvb2tpZUphcikpOwotICAgICAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXMuZ2V0KCk7
IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsKLSAgICAgICAgICAgIFNvdXBDb29r
aWUqIGNvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5kYXRhKTsKLSAgICAg
ICAgICAgIGlmIChzb3VwX2Nvb2tpZV9kb21haW5fbWF0Y2hlcyhjb29raWUsIGhvc3ROYW1lU3Ry
aW5nLmRhdGEoKSkpCi0gICAgICAgICAgICAgICAgc291cF9jb29raWVfamFyX2RlbGV0ZV9jb29r
aWUoY29va2llSmFyLCBjb29raWUpOwotICAgICAgICAgICAgc291cF9jb29raWVfZnJlZShjb29r
aWUpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoY29uc3Qg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uKQotewotICAgIFNvdXBDb29raWVKYXIqIGNv
b2tpZUphciA9IHNlc3Npb24uY29va2llU3RvcmFnZSgpOwotICAgIEdVbmlxdWVQdHI8R1NMaXN0
PiBjb29raWVzKHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVKYXIpKTsKLSAgICBm
b3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXMuZ2V0KCk7IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25l
eHQoaXRlbSkpIHsKLSAgICAgICAgU291cENvb2tpZSogY29va2llID0gc3RhdGljX2Nhc3Q8U291
cENvb2tpZSo+KGl0ZW0tPmRhdGEpOwotICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfZGVsZXRlX2Nv
b2tpZShjb29raWVKYXIsIGNvb2tpZSk7Ci0gICAgICAgIHNvdXBfY29va2llX2ZyZWUoY29va2ll
KTsKLSAgICB9Ci19Ci0KLXZvaWQgZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoY29uc3Qg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBXYWxsVGltZSB0aW1lc3RhbXApCi17Ci0g
ICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBkZWxldGluZyBjb29raWVzIG1vZGlmaWVkIHNp
bmNlIHRoZSBnaXZlbiB0aW1lc3RhbXAuIEl0IHNob3VsZCBwcm9iYWJseSBiZSBhZGRlZCB0byBs
aWJzb3VwLgotICAgIGlmICh0aW1lc3RhbXAgPT0gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKDAp
KQotICAgICAgICBkZWxldGVBbGxDb29raWVzKHNlc3Npb24pOwotICAgIGVsc2UKLSAgICAgICAg
Z193YXJuaW5nKCJEZWxldGluZyBjb29raWVzIG1vZGlmaWVkIHNpbmNlIGEgZ2l2ZW4gdGltZSBz
cGFuIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Iik7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNz
aW9uU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29y
a1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKaW5kZXggNWUzYzI0NWEzYzZjNjM2YjdlNjJkMzM2MWMz
YjdmZjNmYzgyZDYwMC4uYjNkNzFhNGI0MGU1ZGVkMDliNjgzMjAwOGJlZjAwNjFkMWZlZDE1ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtT
dG9yYWdlU2Vzc2lvblNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9OZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcApAQCAtMzIsNiArMzIsNyBAQAog
I2lmIFVTRShTT1VQKQogCiAjaW5jbHVkZSAiQ29va2llLmgiCisjaW5jbHVkZSAiQ29va2llUmVx
dWVzdEhlYWRlckZpZWxkUHJveHkuaCIKICNpbmNsdWRlICJHVW5pcXVlUHRyU291cC5oIgogI2lu
Y2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiU291cE5ldHdvcmtTZXNzaW9uLmgi
CkBAIC0yOTEsNiArMjkyLDYyIEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzYXZlQ3Jl
ZGVudGlhbFRvUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgUHJvdGVjdGlvblNwCiAjZW5kaWYKIH0K
IAorYm9vbCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZXNFbmFibGVkKCkgY29uc3QKK3sK
KyAgICBhdXRvIHBvbGljeSA9IHNvdXBfY29va2llX2phcl9nZXRfYWNjZXB0X3BvbGljeShjb29r
aWVTdG9yYWdlKCkpOworICAgIHJldHVybiBwb2xpY3kgPT0gU09VUF9DT09LSUVfSkFSX0FDQ0VQ
VF9BTFdBWVMgfHwgcG9saWN5ID09IFNPVVBfQ09PS0lFX0pBUl9BQ0NFUFRfTk9fVEhJUkRfUEFS
VFk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBodHRwT25seUNvb2tpZUV4aXN0cyhjb25zdCBH
U0xpc3QqIGNvb2tpZXMsIGNvbnN0IGdjaGFyKiBuYW1lLCBjb25zdCBnY2hhciogcGF0aCkKK3sK
KyAgICBmb3IgKGNvbnN0IEdTTGlzdCogaXRlciA9IGNvb2tpZXM7IGl0ZXI7IGl0ZXIgPSBnX3Ns
aXN0X25leHQoaXRlcikpIHsKKyAgICAgICAgU291cENvb2tpZSogY29va2llID0gc3RhdGljX2Nh
c3Q8U291cENvb2tpZSo+KGl0ZXItPmRhdGEpOworICAgICAgICBpZiAoIXN0cmNtcChzb3VwX2Nv
b2tpZV9nZXRfbmFtZShjb29raWUpLCBuYW1lKSAKKyAgICAgICAgICAgICYmICFnX3N0cmNtcDAo
c291cF9jb29raWVfZ2V0X3BhdGgoY29va2llKSwgcGF0aCkpIHsKKyAgICAgICAgICAgIGlmIChz
b3VwX2Nvb2tpZV9nZXRfaHR0cF9vbmx5KGNvb2tpZSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVzRnJvbURP
TShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYg
dXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2
NF90PiBwYWdlSUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0Cit7CisgICAgVU5VU0VEX1BB
UkFNKGZyYW1lSUQpOworICAgIFVOVVNFRF9QQVJBTShwYWdlSUQpOworICAgIEdVbmlxdWVQdHI8
U291cFVSST4gb3JpZ2luID0gdXJsLmNyZWF0ZVNvdXBVUkkoKTsKKyAgICBpZiAoIW9yaWdpbikK
KyAgICAgICAgcmV0dXJuOworCisgICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiBmaXJzdFBhcnR5VVJJ
ID0gZmlyc3RQYXJ0eS5jcmVhdGVTb3VwVVJJKCk7CisgICAgaWYgKCFmaXJzdFBhcnR5VVJJKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBHZXQgZXhpc3RpbmcgY29va2llcyBmb3IgdGhpcyBv
cmlnaW4uCisgICAgU291cENvb2tpZUphciogamFyID0gY29va2llU3RvcmFnZSgpOworICAgIEdT
TGlzdCogZXhpc3RpbmdDb29raWVzID0gc291cF9jb29raWVfamFyX2dldF9jb29raWVfbGlzdChq
YXIsIG9yaWdpbi5nZXQoKSwgVFJVRSk7CisKKyAgICBmb3IgKGF1dG8mIGNvb2tpZVN0cmluZyA6
IHZhbHVlLnNwbGl0KCdcbicpKSB7CisgICAgICAgIEdVbmlxdWVQdHI8U291cENvb2tpZT4gY29v
a2llKHNvdXBfY29va2llX3BhcnNlKGNvb2tpZVN0cmluZy51dGY4KCkuZGF0YSgpLCBvcmlnaW4u
Z2V0KCkpKTsKKworICAgICAgICBpZiAoIWNvb2tpZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29va2llIGlzIG5vdCBodHRwT25seSBzaW5jZSBz
dWNoIGNvb2tpZXMgc2hvdWxkIG5vdCBiZSBzZXQgZnJvbSBKYXZhU2NyaXB0LgorICAgICAgICBp
ZiAoc291cF9jb29raWVfZ2V0X2h0dHBfb25seShjb29raWUuZ2V0KCkpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvIG5vdCBvdmVyd3JpdGUgaHR0
cE9ubHkgY29va2llcyBmcm9tIEphdmFTY3JpcHQuCisgICAgICAgIGlmIChodHRwT25seUNvb2tp
ZUV4aXN0cyhleGlzdGluZ0Nvb2tpZXMsIHNvdXBfY29va2llX2dldF9uYW1lKGNvb2tpZS5nZXQo
KSksIHNvdXBfY29va2llX2dldF9wYXRoKGNvb2tpZS5nZXQoKSkpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgc291cF9jb29raWVfamFyX2FkZF9jb29raWVfd2l0aF9maXJzdF9w
YXJ0eShqYXIsIGZpcnN0UGFydHlVUkkuZ2V0KCksIGNvb2tpZS5yZWxlYXNlKCkpOworICAgIH0K
KworICAgIHNvdXBfY29va2llc19mcmVlKGV4aXN0aW5nQ29va2llcyk7Cit9CisKIHZvaWQgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxDb29raWU+JiBjb29r
aWVzLCBjb25zdCBVUkwmLCBjb25zdCBVUkwmKQogewogICAgIGZvciAoYXV0byBjb29raWUgOiBj
b29raWVzKQpAQCAtMzA4LDYgKzM2NSw3NyBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6
ZGVsZXRlQ29va2llKGNvbnN0IENvb2tpZSYgY29va2llKQogICAgIHNvdXBfY29va2llX2phcl9k
ZWxldGVfY29va2llKGNvb2tpZVN0b3JhZ2UoKSwgdGFyZ2V0Q29va2llLmdldCgpKTsKIH0KIAor
dm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZShjb25zdCBVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIEdVbmlxdWVQdHI8U291cFVSST4gdXJp
ID0gdXJsLmNyZWF0ZVNvdXBVUkkoKTsKKyAgICBpZiAoIXVyaSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgU291cENvb2tpZUphciogamFyID0gY29va2llU3RvcmFnZSgpOworICAgIEdVbmlxdWVQ
dHI8R1NMaXN0PiBjb29raWVzKHNvdXBfY29va2llX2phcl9nZXRfY29va2llX2xpc3QoamFyLCB1
cmkuZ2V0KCksIFRSVUUpKTsKKyAgICBpZiAoIWNvb2tpZXMpCisgICAgICAgIHJldHVybjsKKwor
ICAgIENTdHJpbmcgY29va2llTmFtZSA9IG5hbWUudXRmOCgpOworICAgIGJvb2wgd2FzRGVsZXRl
ZCA9IGZhbHNlOworICAgIGZvciAoR1NMaXN0KiBpdGVyID0gY29va2llcy5nZXQoKTsgaXRlcjsg
aXRlciA9IGdfc2xpc3RfbmV4dChpdGVyKSkgeworICAgICAgICBTb3VwQ29va2llKiBjb29raWUg
PSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlci0+ZGF0YSk7CisgICAgICAgIGlmICghd2Fz
RGVsZXRlZCAmJiBjb29raWVOYW1lID09IGNvb2tpZS0+bmFtZSkgeworICAgICAgICAgICAgc291
cF9jb29raWVfamFyX2RlbGV0ZV9jb29raWUoamFyLCBjb29raWUpOworICAgICAgICAgICAgd2Fz
RGVsZXRlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgc291cF9jb29raWVfZnJlZShjb29r
aWUpOworICAgIH0KK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUFsbENv
b2tpZXMoKQoreworICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZUphciA9IGNvb2tpZVN0b3JhZ2Uo
KTsKKyAgICBHVW5pcXVlUHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nv
b2tpZXMoY29va2llSmFyKSk7CisgICAgZm9yIChHU0xpc3QqIGl0ZW0gPSBjb29raWVzLmdldCgp
OyBpdGVtOyBpdGVtID0gZ19zbGlzdF9uZXh0KGl0ZW0pKSB7CisgICAgICAgIFNvdXBDb29raWUq
IGNvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5kYXRhKTsKKyAgICAgICAg
c291cF9jb29raWVfamFyX2RlbGV0ZV9jb29raWUoY29va2llSmFyLCBjb29raWUpOworICAgICAg
ICBzb3VwX2Nvb2tpZV9mcmVlKGNvb2tpZSk7CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoV2FsbFRpbWUgdGltZXN0
YW1wKQoreworICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgZGVsZXRpbmcgY29va2llcyBt
b2RpZmllZCBzaW5jZSB0aGUgZ2l2ZW4gdGltZXN0YW1wLiBJdCBzaG91bGQgcHJvYmFibHkgYmUg
YWRkZWQgdG8gbGlic291cC4KKyAgICBpZiAodGltZXN0YW1wID09IFdhbGxUaW1lOjpmcm9tUmF3
U2Vjb25kcygwKSkKKyAgICAgICAgZGVsZXRlQWxsQ29va2llcygpOworICAgIGVsc2UKKyAgICAg
ICAgZ193YXJuaW5nKCJEZWxldGluZyBjb29raWVzIG1vZGlmaWVkIHNpbmNlIGEgZ2l2ZW4gdGlt
ZSBzcGFuIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Iik7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBo
b3N0bmFtZXMpCit7CisgICAgU291cENvb2tpZUphciogY29va2llSmFyID0gY29va2llU3RvcmFn
ZSgpOworCisgICAgZm9yIChjb25zdCBhdXRvJiBob3N0bmFtZSA6IGhvc3RuYW1lcykgeworICAg
ICAgICBDU3RyaW5nIGhvc3ROYW1lU3RyaW5nID0gaG9zdG5hbWUudXRmOCgpOworCisgICAgICAg
IEdVbmlxdWVQdHI8R1NMaXN0PiBjb29raWVzKHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhj
b29raWVKYXIpKTsKKyAgICAgICAgZm9yIChHU0xpc3QqIGl0ZW0gPSBjb29raWVzLmdldCgpOyBp
dGVtOyBpdGVtID0gZ19zbGlzdF9uZXh0KGl0ZW0pKSB7CisgICAgICAgICAgICBTb3VwQ29va2ll
KiBjb29raWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSk7CisgICAgICAg
ICAgICBpZiAoc291cF9jb29raWVfZG9tYWluX21hdGNoZXMoY29va2llLCBob3N0TmFtZVN0cmlu
Zy5kYXRhKCkpKQorICAgICAgICAgICAgICAgIHNvdXBfY29va2llX2phcl9kZWxldGVfY29va2ll
KGNvb2tpZUphciwgY29va2llKTsKKyAgICAgICAgICAgIHNvdXBfY29va2llX2ZyZWUoY29va2ll
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246Omdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQoreworICAg
IEdVbmlxdWVQdHI8R1NMaXN0PiBjb29raWVzKHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhj
b29raWVTdG9yYWdlKCkpKTsKKyAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXMuZ2V0KCk7
IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsKKyAgICAgICAgU291cENvb2tpZSog
Y29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpOworICAgICAgICBp
ZiAoY29va2llLT5kb21haW4pCisgICAgICAgICAgICBob3N0bmFtZXMuYWRkKFN0cmluZzo6ZnJv
bVVURjgoY29va2llLT5kb21haW4pKTsKKyAgICAgICAgc291cF9jb29raWVfZnJlZShjb29raWUp
OworICAgIH0KK30KKwogVmVjdG9yPENvb2tpZT4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRB
bGxDb29raWVzKCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBXSzIgdG8gdXNlLgpA
QCAtMzMwLDYgKzQ1OCw5OCBAQCBWZWN0b3I8Q29va2llPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246
OmdldENvb2tpZXMoY29uc3QgVVJMJiB1cmwpCiAgICAgcmV0dXJuIGNvb2tpZXM7CiB9CiAKK2Jv
b2wgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRSYXdDb29raWVzKGNvbnN0IFVSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8
dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgVmVjdG9y
PENvb2tpZT4mIHJhd0Nvb2tpZXMpIGNvbnN0Cit7CisgICAgVU5VU0VEX1BBUkFNKGZpcnN0UGFy
dHkpOworICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsKKyAgICBVTlVTRURfUEFSQU0ocGFnZUlE
KTsKKyAgICByYXdDb29raWVzLmNsZWFyKCk7CisgICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiB1cmkg
PSB1cmwuY3JlYXRlU291cFVSSSgpOworICAgIGlmICghdXJpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBHVW5pcXVlUHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nvb2tpZV9qYXJfZ2V0
X2Nvb2tpZV9saXN0KGNvb2tpZVN0b3JhZ2UoKSwgdXJpLmdldCgpLCBUUlVFKSk7CisgICAgaWYg
KCFjb29raWVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKEdTTGlzdCogaXRl
ciA9IGNvb2tpZXMuZ2V0KCk7IGl0ZXI7IGl0ZXIgPSBnX3NsaXN0X25leHQoaXRlcikpIHsKKyAg
ICAgICAgU291cENvb2tpZSogc291cENvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihp
dGVyLT5kYXRhKTsKKyAgICAgICAgQ29va2llIGNvb2tpZTsKKyAgICAgICAgY29va2llLm5hbWUg
PSBTdHJpbmc6OmZyb21VVEY4KHNvdXBDb29raWUtPm5hbWUpOworICAgICAgICBjb29raWUudmFs
dWUgPSBTdHJpbmc6OmZyb21VVEY4KHNvdXBDb29raWUtPnZhbHVlKTsKKyAgICAgICAgY29va2ll
LmRvbWFpbiA9IFN0cmluZzo6ZnJvbVVURjgoc291cENvb2tpZS0+ZG9tYWluKTsKKyAgICAgICAg
Y29va2llLnBhdGggPSBTdHJpbmc6OmZyb21VVEY4KHNvdXBDb29raWUtPnBhdGgpOworICAgICAg
ICBjb29raWUuY3JlYXRlZCA9IDA7CisgICAgICAgIGNvb2tpZS5leHBpcmVzID0gc291cENvb2tp
ZS0+ZXhwaXJlcyA/IHN0YXRpY19jYXN0PGRvdWJsZT4oc291cF9kYXRlX3RvX3RpbWVfdChzb3Vw
Q29va2llLT5leHBpcmVzKSkgKiAxMDAwIDogMDsKKyAgICAgICAgY29va2llLmh0dHBPbmx5ID0g
c291cENvb2tpZS0+aHR0cF9vbmx5OworICAgICAgICBjb29raWUuc2VjdXJlID0gc291cENvb2tp
ZS0+c2VjdXJlOworICAgICAgICBjb29raWUuc2Vzc2lvbiA9ICFzb3VwQ29va2llLT5leHBpcmVz
OworICAgICAgICByYXdDb29raWVzLmFwcGVuZChXVEZNb3ZlKGNvb2tpZSkpOworICAgICAgICBz
b3VwX2Nvb2tpZV9mcmVlKHNvdXBDb29raWUpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCitzdGF0aWMgc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29va2llc0ZvclNlc3Npb24oY29u
c3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIHVybCwgYm9vbCBm
b3JIVFRQSGVhZGVyLCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykK
K3sKKyAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IHVyaSA9IHVybC5jcmVhdGVTb3VwVVJJKCk7Cisg
ICAgaWYgKCF1cmkpCisgICAgICAgIHJldHVybiB7IHsgfSwgZmFsc2UgfTsKKworICAgIEdTTGlz
dCogY29va2llcyA9IHNvdXBfY29va2llX2phcl9nZXRfY29va2llX2xpc3Qoc2Vzc2lvbi5jb29r
aWVTdG9yYWdlKCksIHVyaS5nZXQoKSwgZm9ySFRUUEhlYWRlcik7CisgICAgYm9vbCBkaWRBY2Nl
c3NTZWN1cmVDb29raWVzID0gZmFsc2U7CisKKyAgICAvLyBsaWJzb3VwIHNob3VsZCBvbWl0IHNl
Y3VyZSBjb29raWVzIGl0c2VsZiBpZiB0aGUgcHJvdG9jb2wgaXMgbm90IGh0dHBzLgorICAgIGlm
ICh1cmwucHJvdG9jb2xJcygiaHR0cHMiKSkgeworICAgICAgICBHU0xpc3QqIGl0ZW0gPSBjb29r
aWVzOworICAgICAgICB3aGlsZSAoaXRlbSkgeworICAgICAgICAgICAgYXV0byBjb29raWUgPSBz
dGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSk7CisgICAgICAgICAgICBpZiAoc291
cF9jb29raWVfZ2V0X3NlY3VyZShjb29raWUpKSB7CisgICAgICAgICAgICAgICAgZGlkQWNjZXNz
U2VjdXJlQ29va2llcyA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKGluY2x1ZGVTZWN1cmVD
b29raWVzID09IEluY2x1ZGVTZWN1cmVDb29raWVzOjpObykgeworICAgICAgICAgICAgICAgICAg
ICBHU0xpc3QqIG5leHQgPSBpdGVtLT5uZXh0OworICAgICAgICAgICAgICAgICAgICBzb3VwX2Nv
b2tpZV9mcmVlKHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5kYXRhKSk7CisgICAgICAg
ICAgICAgICAgICAgIGNvb2tpZXMgPSBnX3NsaXN0X3JlbW92ZV9saW5rKGNvb2tpZXMsIGl0ZW0p
OworICAgICAgICAgICAgICAgICAgICBpdGVtID0gbmV4dDsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
aXRlbSA9IGl0ZW0tPm5leHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWNvb2tpZXMp
CisgICAgICAgIHJldHVybiB7IHsgfSwgZmFsc2UgfTsKKworICAgIEdVbmlxdWVQdHI8Y2hhcj4g
Y29va2llSGVhZGVyKHNvdXBfY29va2llc190b19jb29raWVfaGVhZGVyKGNvb2tpZXMpKTsKKyAg
ICBzb3VwX2Nvb2tpZXNfZnJlZShjb29raWVzKTsKKworICAgIHJldHVybiB7IFN0cmluZzo6ZnJv
bVVURjgoY29va2llSGVhZGVyLmdldCgpKSwgZGlkQWNjZXNzU2VjdXJlQ29va2llcyB9OworfQor
CitzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZXNG
b3JET00oY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBV
UkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1
aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2ll
cykgY29uc3QKK3sKKyAgICBVTlVTRURfUEFSQU0oZmlyc3RQYXJ0eSk7CisgICAgVU5VU0VEX1BB
UkFNKGZyYW1lSUQpOworICAgIFVOVVNFRF9QQVJBTShwYWdlSUQpOworICAgIHJldHVybiBjb29r
aWVzRm9yU2Vzc2lvbigqdGhpcywgdXJsLCBmYWxzZSwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOwor
fQorCitzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2Ft
ZVNpdGVJbmZvJiwgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1l
SUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMg
aW5jbHVkZVNlY3VyZUNvb2tpZXMpIGNvbnN0Cit7CisgICAgVU5VU0VEX1BBUkFNKGZpcnN0UGFy
dHkpOworICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsKKyAgICBVTlVTRURfUEFSQU0ocGFnZUlE
KTsKKyAgICAvLyBTZWN1cmUgY29va2llcyB3aWxsIHN0aWxsIG9ubHkgYmUgaW5jbHVkZWQgaWYg
dXJsJ3MgcHJvdG9jb2wgaXMgaHR0cHMuCisgICAgcmV0dXJuIGNvb2tpZXNGb3JTZXNzaW9uKCp0
aGlzLCB1cmwsIHRydWUsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKK30KKworc3RkOjpwYWlyPFN0
cmluZywgYm9vbD4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShjb25zdCBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eSYgaGVhZGVyRmllbGRQ
cm94eSkgY29uc3QKK3sKKyAgICByZXR1cm4gY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUo
aGVhZGVyRmllbGRQcm94eS5maXJzdFBhcnR5LCBoZWFkZXJGaWVsZFByb3h5LnNhbWVTaXRlSW5m
bywgaGVhZGVyRmllbGRQcm94eS51cmwsIGhlYWRlckZpZWxkUHJveHkuZnJhbWVJRCwgaGVhZGVy
RmllbGRQcm94eS5wYWdlSUQsIGhlYWRlckZpZWxkUHJveHkuaW5jbHVkZVNlY3VyZUNvb2tpZXMp
OworfQorCiB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Zmx1c2hDb29raWVTdG9yZSgpCiB7
CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgV0syIHRvIHVzZS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcCBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNw
cAppbmRleCBmZTkyYmMxYzk4ZmZmM2NmNzYwMzg0MjZjYjk3OTVjMWNlZTg4MjA1Li4wYmIxNDlj
YTE1NTUwZTFhOWM4ZDNlNDY5YWIyNmNlNjQ2YjhjYmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCkBA
IC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Db29raWUuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0Nvb2tpZVN0b3JhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdl
U2Vzc2lvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db29raWVKYXIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgpAQCAtNjAsNyArNTksNyBAQCB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgQ2FsbGJhYwogewogICAgIEhhc2hTZXQ8U3RyaW5nPiBob3N0bmFtZXM7CiAgICAgaWYgKGF1
dG8qIHN0b3JhZ2VTZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lv
bihzZXNzaW9uSUQpKQotICAgICAgICBXZWJDb3JlOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcygq
c3RvcmFnZVNlc3Npb24sIGhvc3RuYW1lcyk7CisgICAgICAgIHN0b3JhZ2VTZXNzaW9uLT5nZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhob3N0bmFtZXMpOwogCiAgICAgbV9wcm9jZXNzLnNlbmQoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6RGlkR2V0SG9zdG5hbWVzV2l0aENvb2tpZXMo
Y29weVRvVmVjdG9yKGhvc3RuYW1lcyksIGNhbGxiYWNrSUQpLCAwKTsKIH0KQEAgLTY4LDE0ICs2
NywxNCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ2FsbGJhYwogdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpk
ZWxldGVDb29raWVzRm9ySG9zdG5hbWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBT
dHJpbmcmIGhvc3RuYW1lKQogewogICAgIGlmIChhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKSkKLSAgICAgICAgV2Vi
Q29yZTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcygqc3RvcmFnZVNlc3Npb24sIHsgaG9zdG5h
bWUgfSk7CisgICAgICAgIHN0b3JhZ2VTZXNzaW9uLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVz
KHsgaG9zdG5hbWUgfSk7CiB9CiAKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpkZWxldGVBbGxD
b29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKICAgICBpZiAoYXV0byogc3RvcmFn
ZVNlc3Npb24gPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25J
RCkpCi0gICAgICAgIFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tpZXMoKnN0b3JhZ2VTZXNzaW9uKTsK
KyAgICAgICAgc3RvcmFnZVNlc3Npb24tPmRlbGV0ZUFsbENvb2tpZXMoKTsKIH0KIAogdm9pZCBX
ZWJDb29raWVNYW5hZ2VyOjpkZWxldGVDb29raWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBj
b25zdCBDb29raWUmIGNvb2tpZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQpAQCAtODksNyArODgs
NyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmRlbGV0ZUNvb2tpZShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIGNvbnN0IENvb2tpZSYgY29vawogdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpkZWxl
dGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdhbGxU
aW1lIHRpbWUsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAgICBpZiAoYXV0byogc3RvcmFn
ZVNlc3Npb24gPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25J
RCkpCi0gICAgICAgIFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKCpzdG9y
YWdlU2Vzc2lvbiwgdGltZSk7CisgICAgICAgIHN0b3JhZ2VTZXNzaW9uLT5kZWxldGVBbGxDb29r
aWVzTW9kaWZpZWRTaW5jZSh0aW1lKTsKIAogICAgIG1fcHJvY2Vzcy5zZW5kKE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OkRpZERlbGV0ZUNvb2tpZXMoY2FsbGJhY2tJRCksIDApOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCBhMzFmMTcxMjE3ZTQ1MDczZTM1OTY1
ODM4NTg5ZDFmNDI1ZDFlZjYxLi4wODM4OTMwODUyYjEyZmE3YjE0MDZjYmM0MGU3MWQ3NjllODQ5
ZWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtNTIsNyArNTIsNiBAQAogI2lu
Y2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VMb2FkZXJPcHRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVl
c3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NhbWVTaXRlSW5mby5oPgpAQCAtMzc5LDcgKzM3OCw3
IEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvbnZlcnRNYWluUmVzb3Vy
Y2VMb2FkVG9Eb3dubG9hZChQQUw6OlNlc3NpCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpjb29raWVzRm9yRE9NKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJM
JiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJM
JiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWlu
dDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMs
IFN0cmluZyYgY29va2llU3RyaW5nLCBib29sJiBzZWN1cmVDb29raWVzQWNjZXNzZWQpCiB7CiAg
ICAgYXV0byYgbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklE
KTsKLSAgICBzdGQ6OnRpZShjb29raWVTdHJpbmcsIHNlY3VyZUNvb2tpZXNBY2Nlc3NlZCkgPSBX
ZWJDb3JlOjpjb29raWVzRm9yRE9NKG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiwgZmlyc3RQYXJ0eSwg
c2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMp
OworICAgIHN0ZDo6dGllKGNvb2tpZVN0cmluZywgc2VjdXJlQ29va2llc0FjY2Vzc2VkKSA9IG5l
dHdvcmtTdG9yYWdlU2Vzc2lvbi5jb29raWVzRm9yRE9NKGZpcnN0UGFydHksIHNhbWVTaXRlSW5m
bywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKICNpZiBIQVZF
KENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykgJiYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
CiAgICAgaWYgKE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5zaG91bGRMb2dDb29raWVJbmZv
cm1hdGlvbigpKQogICAgICAgICBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmxvZ0Nvb2tpZUluZm9y
bWF0aW9uKCJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y29va2llc0ZvckRPTSIsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCo+KHRoaXMpLCBuZXR3b3JrU3RvcmFnZVNlc3Npb24s
IGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBlbXB0eVN0cmluZygpLCBmcmFtZUlELCBw
YWdlSUQsIHN0ZDo6bnVsbG9wdCk7CkBAIC0zODksNyArMzg4LDcgQEAgdm9pZCBOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6Y29va2llc0ZvckRPTShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIGNvbnMKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnNldENvb2tpZXNG
cm9tRE9NKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBj
b25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0
aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwg
Y29uc3QgU3RyaW5nJiBjb29raWVTdHJpbmcpCiB7CiAgICAgYXV0byYgbmV0d29ya1N0b3JhZ2VT
ZXNzaW9uID0gc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKTsKLSAgICBXZWJDb3JlOjpzZXRDb29r
aWVzRnJvbURPTShuZXR3b3JrU3RvcmFnZVNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5m
bywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGNvb2tpZVN0cmluZyk7CisgICAgbmV0d29ya1N0b3Jh
Z2VTZXNzaW9uLnNldENvb2tpZXNGcm9tRE9NKGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJs
LCBmcmFtZUlELCBwYWdlSUQsIGNvb2tpZVN0cmluZyk7CiAjaWYgSEFWRShDRk5FVFdPUktfU1RP
UkFHRV9QQVJUSVRJT05JTkcpICYmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIGlmIChOZXR3
b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuc2hvdWxkTG9nQ29va2llSW5mb3JtYXRpb24oKSkKICAg
ICAgICAgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpsb2dDb29raWVJbmZvcm1hdGlvbigiTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnNldENvb2tpZXNGcm9tRE9NIiwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB2b2lkKj4odGhpcyksIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiwgZmlyc3RQYXJ0
eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGVtcHR5U3RyaW5nKCksIGZyYW1lSUQsIHBhZ2VJRCwgc3Rk
OjpudWxsb3B0KTsKQEAgLTM5OCwyMiArMzk3LDIyIEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OnNldENvb2tpZXNGcm9tRE9NKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwK
IAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y29va2llc0VuYWJsZWQoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBib29sJiByZXN1bHQpCiB7Ci0gICAgcmVzdWx0ID0gV2Vi
Q29yZTo6Y29va2llc0VuYWJsZWQoc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKSk7CisgICAgcmVz
dWx0ID0gc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKS5jb29raWVzRW5hYmxlZCgpOwogfQogCiB2
b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwg
Y29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9w
dGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQs
IEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzLCBTdHJpbmcmIGNvb2tp
ZVN0cmluZywgYm9vbCYgc2VjdXJlQ29va2llc0FjY2Vzc2VkKQogewotICAgIHN0ZDo6dGllKGNv
b2tpZVN0cmluZywgc2VjdXJlQ29va2llc0FjY2Vzc2VkKSA9IFdlYkNvcmU6OmNvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFZhbHVlKHN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCksIGZpcnN0UGFydHks
IHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1ZGVTZWN1cmVDb29raWVz
KTsKKyAgICBzdGQ6OnRpZShjb29raWVTdHJpbmcsIHNlY3VyZUNvb2tpZXNBY2Nlc3NlZCkgPSBz
dG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpLmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGZp
cnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1ZGVTZWN1
cmVDb29raWVzKTsKIH0KIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Z2V0
UmF3Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFVSTCYgZmlyc3RQYXJ0
eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdl
SUQsIFZlY3RvcjxDb29raWU+JiByZXN1bHQpCiB7Ci0gICAgV2ViQ29yZTo6Z2V0UmF3Q29va2ll
cyhzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVy
bCwgZnJhbWVJRCwgcGFnZUlELCByZXN1bHQpOworICAgIHN0b3JhZ2VTZXNzaW9uKHNlc3Npb25J
RCkuZ2V0UmF3Q29va2llcyhmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwg
cGFnZUlELCByZXN1bHQpOwogfQogCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpkZWxldGVDb29raWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQogewotICAgIFdlYkNvcmU6OmRlbGV0ZUNvb2tpZShz
dG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpLCB1cmwsIGNvb2tpZU5hbWUpOworICAgIHN0b3JhZ2VT
ZXNzaW9uKHNlc3Npb25JRCkuZGVsZXRlQ29va2llKHVybCwgY29va2llTmFtZSk7CiB9CiAKIHZv
aWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlZ2lzdGVyRmlsZUJsb2JVUkwoY29u
c3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
JiYgZXh0ZW5zaW9uSGFuZGxlLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCA4YmZlZmUz
NjJhODViZjI1OTQ4NDVhYzI4ZjY0MDkzM2NhNjg5NjY5Li41YTEyNGM4Y2M4ZWFiNzk3ODEyMjJj
YWVhZDRiODczYjI4YjliMzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcApAQCAtNjUsNyArNjUsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
TUlNRVR5cGVSZWdpc3RyeS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0YXRlTm90aWZp
ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db29raWVKYXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291
cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tz
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY2hlbWVSZWdpc3RyeS5oPgpAQCAtNTMzLDcgKzUzMiw3
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0CiAKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5j
b250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXMpKSB7CiAgICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3JhZ2VTZXNz
aW9uKHNlc3Npb25JRCkpCi0gICAgICAgICAgICBnZXRIb3N0bmFtZXNXaXRoQ29va2llcygqbmV0
d29ya1N0b3JhZ2VTZXNzaW9uLCBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEuaG9z
dE5hbWVzV2l0aENvb2tpZXMpOworICAgICAgICAgICAgbmV0d29ya1N0b3JhZ2VTZXNzaW9uLT5n
ZXRIb3N0bmFtZXNXaXRoQ29va2llcyhjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEu
aG9zdE5hbWVzV2l0aENvb2tpZXMpOwogICAgIH0KIAogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVz
LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6Q3JlZGVudGlhbHMpKSB7CkBAIC01NjUsNyArNTY0
LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2kKIAogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVz
LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcykpIHsKICAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFnZVNl
c3Npb24oc2Vzc2lvbklEKSkKLSAgICAgICAgICAgIGRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNp
bmNlKCpuZXR3b3JrU3RvcmFnZVNlc3Npb24sIG1vZGlmaWVkU2luY2UpOworICAgICAgICAgICAg
bmV0d29ya1N0b3JhZ2VTZXNzaW9uLT5kZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShtb2Rp
ZmllZFNpbmNlKTsKICAgICB9CiAKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhX
ZWJzaXRlRGF0YVR5cGU6OkNyZWRlbnRpYWxzKSkgewpAQCAtNjEzLDcgKzYxMiw3IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIE9wdGlvCiB7CiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMo
V2Vic2l0ZURhdGFUeXBlOjpDb29raWVzKSkgewogICAgICAgICBpZiAoYXV0byogbmV0d29ya1N0
b3JhZ2VTZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihzZXNz
aW9uSUQpKQotICAgICAgICAgICAgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcygqbmV0d29ya1N0
b3JhZ2VTZXNzaW9uLCBjb29raWVIb3N0TmFtZXMpOworICAgICAgICAgICAgbmV0d29ya1N0b3Jh
Z2VTZXNzaW9uLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKGNvb2tpZUhvc3ROYW1lcyk7CiAg
ICAgfQogCiAgICAgYXV0byBjbGVhclRhc2tzSGFuZGxlciA9IFdURjo6Q2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoW3RoaXMsIGNhbGxiYWNrSURdIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAppbmRleCA1MmViZjlh
ZjUzOWRjODBkZTIxNjkyZjA1NmIxYzMzZmI5OGFiZDcwLi5jYWE3Y2Q1ZWJlOGQ1YWNjODUwMTc3
OTU1ZTBmYjUxOTZlOWExYTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC01OSw3ICs1OSw2IEBACiAKICNp
ZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykgJiYgIVJFTEVBU0VfTE9HX0RJ
U0FCTEVECiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29va2llSmFyLmg+CiAjZW5kaWYKIAogI2lmIFVTRShRVUlD
S19MT09LKQpAQCAtMTAxNCw3ICsxMDEzLDcgQEAgc3RhdGljIHZvaWQgbG9nQ29va2llSW5mb3Jt
YXRpb25JbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsLCBjb25zdCB2b2lkKiBsb2dnZWQKICAg
ICBBU1NFUlQoTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzaG91bGRMb2dDb29raWVJbmZvcm1hdGlv
bigpKTsKIAogICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGNvb2tpZXM7Ci0gICAgaWYgKCFX
ZWJDb3JlOjpnZXRSYXdDb29raWVzKG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiwgcGFydGl0aW9uLCBz
YW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBjb29raWVzKSkKKyAgICBpZiAoIW5l
dHdvcmtTdG9yYWdlU2Vzc2lvbi5nZXRSYXdDb29raWVzKHBhcnRpdGlvbiwgc2FtZVNpdGVJbmZv
LCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgY29va2llcykpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGF1dG8gZXNjYXBlZFVSTCA9IGVzY2FwZUZvckpTT04odXJsLnN0cmluZygpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAppbmRl
eCBiNzJkYzE1ZmZlMGFlOTM4OGQ2ZGZiYjRjZTZjMGVkMTdlNzRhZjk4Li4yZmYwY2EyNjkxYjA2
NWY0MGNkODA3NWI3OGRkNDU5ZGQxYWRlZjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCkBAIC0zNSw3ICszNSw2IEBACiAj
aW5jbHVkZSA8V2ViQ29yZS9IVFRQSGVhZGVyTmFtZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0xv
d1Bvd2VyTW9kZU5vdGlmaWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNl
c3Npb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29va2llSmFyLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
UmVzcG9uc2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzLmNwcAppbmRleCA2OTEzMTM1ODE1ZWE3ZDAwODE5NDI1Y2NlODQ4
NDY4ZWUzZTRmZGY3Li5hZTczODhmOWE0OWMzMGZjYzZjODZjODUxZmEwNjU4MjE3MzNiZjUwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxh
dGZvcm1TdHJhdGVnaWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcApAQCAtNTQsNyArNTQsNiBAQAogI2lu
Y2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZUdyb3VwLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9QYXN0ZWJvYXJkSXRlbUluZm8uaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1BsYXRmb3JtQ29va2llSmFyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVBhc3RlYm9h
cmQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Byb2dyZXNzVHJhY2tlci5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvUmVzb3VyY2VFcnJvci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tCmluZGV4
IDM0NTA2NzJkNWNiNTE5NmRkM2EzYTZmYjA2MDA5Y2Q3N2I5OGU3YzguLmI1MzE4OGViZmNkZjVh
NzQxMzMxODUxOThlYzNkMjRmZTM5YWQ4NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMu
bW0KQEAgLTMzLDcgKzMzLDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQg
PFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Bhc3Rl
Ym9hcmRJdGVtSW5mby5oPgotI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgog
I2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVBhc3RlYm9hcmQuaD4KICNpbXBvcnQgPFdlYkNvcmUv
U2hhcmVkQnVmZmVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1N1YmZyYW1lTG9hZGVyLmg+CkBAIC03
NSwzOCArNzQsMzggQEAgQmxvYlJlZ2lzdHJ5KiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0
ZUJsb2JSZWdpc3RyeSgpCiAKIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6Y29va2llc0ZvckRPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Np
b24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUlu
Zm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVT
ZWN1cmVDb29raWVzKQogewotICAgIHJldHVybiBXZWJDb3JlOjpjb29raWVzRm9yRE9NKHNlc3Np
b24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1
ZGVTZWN1cmVDb29raWVzKTsKKyAgICByZXR1cm4gc2Vzc2lvbi5jb29raWVzRm9yRE9NKGZpcnN0
UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1ZGVTZWN1cmVD
b29raWVzKTsKIH0KIAogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldENvb2tpZXNGcm9t
RE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJz
dFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmws
IHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+
IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHJpbmcpCiB7Ci0gICAgV2ViQ29yZTo6c2V0
Q29va2llc0Zyb21ET00oc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZy
YW1lSUQsIHBhZ2VJRCwgY29va2llU3RyaW5nKTsKKyAgICBzZXNzaW9uLnNldENvb2tpZXNGcm9t
RE9NKGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGNvb2tp
ZVN0cmluZyk7CiB9CiAKIGJvb2wgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRW5hYmxl
ZChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24pCiB7Ci0gICAgcmV0dXJuIFdl
YkNvcmU6OmNvb2tpZXNFbmFibGVkKHNlc3Npb24pOworICAgIHJldHVybiBzZXNzaW9uLmNvb2tp
ZXNFbmFibGVkKCk7CiB9CiAKIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRl
SW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRf
dD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJl
Q29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykKIHsKLSAgICByZXR1cm4gV2ViQ29yZTo6Y29v
a2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJ
bmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOworICAgIHJl
dHVybiBzZXNzaW9uLmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGZpcnN0UGFydHksIHNh
bWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsK
IH0KIAogc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0
IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFs
PHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29r
aWVzKQogewogICAgIGF1dG8mIHNlc3Npb24gPSBzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSA/IFdl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oKSA6
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgcmV0
dXJuIFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHNlc3Npb24sIGZpcnN0
UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1ZGVTZWN1cmVD
b29raWVzKTsKKyAgICByZXR1cm4gc2Vzc2lvbi5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNsdWRl
U2VjdXJlQ29va2llcyk7CiB9CiAKIGJvb2wgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRSYXdD
b29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBm
aXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1
cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0
X3Q+IHBhZ2VJRCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFdl
YkNvcmU6OmdldFJhd0Nvb2tpZXMoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1
cmwsIGZyYW1lSUQsIHBhZ2VJRCwgcmF3Q29va2llcyk7CisgICAgcmV0dXJuIHNlc3Npb24uZ2V0
UmF3Q29va2llcyhmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlE
LCByYXdDb29raWVzKTsKIH0KIAogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmRlbGV0ZUNv
b2tpZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCiB7Ci0gICAgV2ViQ29yZTo6ZGVsZXRlQ29va2ll
KHNlc3Npb24sIHVybCwgY29va2llTmFtZSk7CisgICAgc2Vzc2lvbi5kZWxldGVDb29raWUodXJs
LCBjb29raWVOYW1lKTsKIH0KIAogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFR5cGVz
KFZlY3RvcjxTdHJpbmc+JiB0eXBlcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMu
bW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCmlu
ZGV4IGM0ZDc0MjJkZTcxZmZjYzE0Y2RkYTgzMzNlNjk3MjZhNzA0ZWU3NDMuLjc3MThkMDVhZWRh
NjI2NmUyMzEzMGExNGU4MjFiZTFlODY2YzQ3YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQpAQCAtNDIsNyArNDIsNiBAQAogI2lt
cG9ydCA8V2ViQ29yZS9BdWRpb1Nlc3Npb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRGVwcmVjYXRl
ZEdsb2JhbFNldHRpbmdzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lv
bi5oPgotI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2V0dGlu
Z3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dEVuY29kaW5nUmVnaXN0cnkuaD4KQEAgLTE4Nzcs
NyArMTg3Niw3IEBAIHN0YXRpYyBOU1N0cmluZyAqY2xhc3NJQkNyZWF0b3JJRCA9IG5pbDsKIAog
KyAodm9pZClfY2xlYXJOZXR3b3JrTG9hZGVyU2Vzc2lvbgogewotICAgIFdlYkNvcmU6OmRlbGV0
ZUFsbENvb2tpZXMoTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24o
KSk7CisgICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5k
ZWxldGVBbGxDb29raWVzKCk7CiB9CiAKICsgKHZvaWQpX3NldEN1cnJlbnROZXR3b3JrTG9hZGVy
U2Vzc2lvbkNvb2tpZUFjY2VwdFBvbGljeTooTlNIVFRQQ29va2llQWNjZXB0UG9saWN5KXBvbGlj
eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVT
dXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKaW5kZXggZGUyNjI2ODQzODhkYmFlYjNi
Mzk2NjAwMDY4ZjkyZWEzYTMwMDg3Ni4uZmFiNDIxODQ4NjhmMjI3NjE5ODhhYjQwODQ1Zjc5ZWM3
Mzk4OGU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN1cHBv
cnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCkBAIC0zMiw3ICszMiw2
IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VHcm91cC5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db29raWVKYXIuaD4KIAogI2lmIFVTRShDRlVSTENPTk5FQ1RJ
T04pCiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFj
ZS5oPgpAQCAtNzIsMzYgKzcxLDM2IEBAIEJsb2JSZWdpc3RyeSogV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpjcmVhdGVCbG9iUmVnaXN0cnkoKQogCiBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZXNGb3JET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNz
aW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYg
c2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJh
bWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2ll
cyBpbmNsdWRlU2VjdXJlQ29va2llcykKIHsKLSAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llc0Zv
ckRPTShzZXNzaW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFn
ZUlELCBpbmNsdWRlU2VjdXJlQ29va2llcyk7CisgICAgcmV0dXJuIHNlc3Npb24uY29va2llc0Zv
ckRPTShmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNs
dWRlU2VjdXJlQ29va2llcyk7CiB9CiAKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRD
b29raWVzRnJvbURPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0
IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0
IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFs
PHVpbnQ2NF90PiBwYWdlSUQsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKQogewotICAgIFdl
YkNvcmU6OnNldENvb2tpZXNGcm9tRE9NKHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5m
bywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGNvb2tpZVN0cmluZyk7CisgICAgc2Vzc2lvbi5zZXRD
b29raWVzRnJvbURPTShmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFn
ZUlELCBjb29raWVTdHJpbmcpOwogfQogCiBib29sIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29v
a2llc0VuYWJsZWQoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uKQogewotICAg
IHJldHVybiBXZWJDb3JlOjpjb29raWVzRW5hYmxlZChzZXNzaW9uKTsKKyAgICByZXR1cm4gc2Vz
c2lvbi5jb29raWVzRW5hYmxlZCgpOwogfQogCiBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25z
dCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9u
YWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5j
bHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFdl
YkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHNlc3Npb24sIGZpcnN0UGFydHks
IHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1ZGVTZWN1cmVDb29raWVz
KTsKKyAgICByZXR1cm4gc2Vzc2lvbi5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShmaXJz
dFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNsdWRlU2VjdXJl
Q29va2llcyk7CiB9CiAKIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJ
bmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3Rk
OjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRl
U2VjdXJlQ29va2llcykKIHsKICAgICBhdXRvJiBzZXNzaW9uID0gc2Vzc2lvbklELmlzRXBoZW1l
cmFsKCkgPyBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdT
ZXNzaW9uKCkgOiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigp
OwotICAgIHJldHVybiBXZWJDb3JlOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShzZXNz
aW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNs
dWRlU2VjdXJlQ29va2llcyk7CisgICAgcmV0dXJuIHNlc3Npb24uY29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJ
RCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOwogfQogCiBib29sIFdlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6Z2V0UmF3Q29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNv
bnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNv
bnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlv
bmFsPHVpbnQ2NF90PiBwYWdlSUQsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewotICAg
IHJldHVybiBXZWJDb3JlOjpnZXRSYXdDb29raWVzKHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVT
aXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIHJhd0Nvb2tpZXMpOworICAgIHJldHVybiBz
ZXNzaW9uLmdldFJhd0Nvb2tpZXMoZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1l
SUQsIHBhZ2VJRCwgcmF3Q29va2llcyk7CiB9CiAKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVz
OjpkZWxldGVDb29raWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25z
dCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQogewotICAgIFdlYkNvcmU6OmRl
bGV0ZUNvb2tpZShzZXNzaW9uLCB1cmwsIGNvb2tpZU5hbWUpOworICAgIHNlc3Npb24uZGVsZXRl
Q29va2llKHVybCwgY29va2llTmFtZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9XZWJQcmVmZXJlbmNlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQ
cmVmZXJlbmNlcy5jcHAKaW5kZXggZTEwMDQxMjAyOGEzM2M0OTQzOTI4N2RkNzkwOGU2YTNhNTcy
MGQ2Ni4uYzA4ZjJmNzI3MjBhMjZhYzY3ZTY5ZTkyMzYxN2FkNzYxNjUzMWFmOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VzLmNwcApAQCAtNDIsNyArNDIsNiBAQAog
I2luY2x1ZGUgPFdlYkNvcmUvRm9udENhc2NhZGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0xvY2Fs
aXplZFN0cmluZ3MuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db29raWVKYXIuaD4KICNpbmNsdWRlIDxsaW1p
dHM+CiAjaW5jbHVkZSA8c2hsb2JqLmg+CiAjaW5jbHVkZSA8d2NoYXIuaD4KQEAgLTIxMjAsNyAr
MjExOSw3IEBAIEhSRVNVTFQgV2ViUHJlZmVyZW5jZXM6Om1lZGlhUHJlbG9hZGluZ0VuYWJsZWQo
X091dF8gQk9PTCogZW5hYmxlZCkKIAogSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6Y2xlYXJOZXR3
b3JrTG9hZGVyU2Vzc2lvbigpCiB7Ci0gICAgV2ViQ29yZTo6ZGVsZXRlQWxsQ29va2llcyhOZXR3
b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpKTsKKyAgICBOZXR3b3Jr
U3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLmRlbGV0ZUFsbENvb2tpZXMo
KTsKICAgICByZXR1cm4gU19PSzsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346026</attachid>
            <date>2018-07-29 04:32:08 -0700</date>
            <delta_ts>2018-07-29 08:32:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188137-20180729133206.patch</filename>
            <type>text/plain</type>
            <size>129814</size>
            <attacher name="Rob Buis">rbuis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0MzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTAyYzI1N2ZhMWQ0YmU5
YmEyYjFkMWFkOWVjNjFlMGVlNzU4ZGM3Mi4uYjU5ZmQ4Y2EzOTFiN2VjNTIxMzU2MDkxZDRjMjA2
ODUzMmJmOGM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDE4LTA3LTI4ICBSb2Ig
QnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CisKKyAgICAgICAgTWVyZ2UgUGxhdGZvcm1Db29raWVK
YXIgZnVuY3Rpb25zIGludG8gTmV0d29ya1N0b3JhZ2VTZXNzaW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODgxMzcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLS0gbm8gY2hhbmdl
IGluIFdlYktpdCBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6
CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbG9hZGVyL0Nvb2tpZUphci5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vQ3VybC5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9Tb3VyY2VzU291
cC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6aGVhZGVyVmFsdWVGb3JWYXJ5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvUGxhdGZvcm1Db29raWVKYXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29v
a2llRGF0YUZvckhhbmRzaGFrZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Db29r
aWVKYXJDRk5ldC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3Jr
U3RvcmFnZVNlc3Npb25Db2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6Omh0dHBDb29raWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUhUVFBDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6
cG9saWN5UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzRm9yVVJMKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEhUVFBDb29raWVzRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6
Omh0dHBDb29raWVzRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbHRlckNvb2tpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6YXBwbHlQYXJ0aXRpb25Ub0Nvb2tpZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29va2llc0FyZUJsb2NrZWRGb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2ll
c0luUGFydGl0aW9uRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNGb3JTZXNzaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUFsbEhUVFBDb29raWVzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0ZvckRPTSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bjo6c2V0Q29va2llc0Zyb21ET00gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6aHR0cENvb2tp
ZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246
OmNvb2tpZXNFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6Z2V0UmF3Q29va2llcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZXNGb3JIb3N0
bmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVB
bGxDb29raWVzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJs
L0Nvb2tpZUphckN1cmwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9Db29raWVKYXJDdXJsLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL05l
dHdvcmtTdG9yYWdlU2Vzc2lvbkN1cmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVzRnJvbURPTSBjb25zdCk6CisKIDIwMTgtMDctMjQgIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQW5pbWF0aW9u
IHN0b3BzIHdpdGggb2JqZWN0LWZpdDpjb250YWluIG9uIGFuIGFuaW1hdGVkIDJkIGNhbnZhcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwppbmRleCBmY2IzN2QxNDY1NWIzNDRiZWI5M2I3ZjY5MGU1ZWE4Njk1ZDA1MWZmLi4xMjM4
NmFiNmFmYTBkNTNmOTk0OTBkMGMwMTg5N2I3NGZjYWFmOTc3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDMxIEBACisyMDE4LTA3LTI4ICBSb2IgQnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CisgCisgICAg
ICAgICBNZXJnZSBQbGF0Zm9ybUNvb2tpZUphciBmdW5jdGlvbnMgaW50byBOZXR3b3JrU3RvcmFn
ZVNlc3Npb24KKyAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xODgxMzcKKyAKKyAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorIAorICAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwOgorICAg
ICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMp
OgorICAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKToKKyAgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OmRlbGV0ZUFsbENv
b2tpZXMpOgorICAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQWxsQ29v
a2llc01vZGlmaWVkU2luY2UpOgorICAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6Y29va2llc0ZvckRPTSk6CisgICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAg
KFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZXNFbmFibGVkKToK
KyAgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEpOgorICAgICAgICAgKFdlYktpdDo6TmV0d29ya1By
b2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKToKKyAgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMpOgorICAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAgKFdlYktpdDo6bG9nQ29v
a2llSW5mb3JtYXRpb25JbnRlcm5hbCk6CisgICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZS5jcHA6CisgICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcDoKKwogMjAxOC0wNy0yNyAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aHJlYWQtc2FmZXR5IGlzc3VlcyByZWxh
dGVkIHRvIFJlYWx0aW1lTWVkaWFTb3VyY2U6OmF1ZGlvU2FtcGxlc0F2YWlsYWJsZSgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggMGUzMzc1NjYzYjkzZDViODZlM2NiNTAxODU2NmNh
YjQ4ZmFlNWQwNi4uZjIxYWIxZTMxZDQyMzRmNjQ4MjZmYjUwODM3ZDNjOThmNzNhMDIyNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE4LTA3LTI4ICBS
b2IgQnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CisKKyAgICAgICAgTWVyZ2UgUGxhdGZvcm1Db29r
aWVKYXIgZnVuY3Rpb25zIGludG8gTmV0d29ya1N0b3JhZ2VTZXNzaW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODgxMzcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBs
YXRmb3JtU3RyYXRlZ2llcy5tbToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29v
a2llc0ZvckRPTSk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldENvb2tpZXNG
cm9tRE9NKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llc0VuYWJsZWQp
OgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZSk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFJhd0Nvb2tpZXMp
OgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpkZWxldGVDb29raWUpOgorICAgICAg
ICAqIFdlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW06CisgICAgICAgICgrW1dlYlByZWZlcmVuY2Vz
IF9jbGVhck5ldHdvcmtMb2FkZXJTZXNzaW9uXSk6CisKIDIwMTgtMDctMjYgIEFuZHkgVmFuV2Fn
b25lciAgPGFuZHlAdmFud2Fnb25lci5mYW1pbHk+CiAKICAgICAgICAgW0lOVExdIFJlbW92ZSBJ
TlRMIHN1Yi1mZWF0dXJlIGNvbXBpbGUgZmxhZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5k
ZXggZjNkOGQwMjhjZmQxZTA2MWY5ZjJjNmYzMDJiZGY5Yjk1ZDFkNDk0OS4uNWRmZTc0Yzc5YjUy
MzEwMGQ0ZWM3YjhiNGJkZjVkODM1Zjg2ZjI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UK
QEAgLTQzNCw3ICs0MzQsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9uZXR3b3JrL21hYy9BdXRoZW50aWNhdGlvbk1hYy5tbQogICAgIHBsYXRmb3JtL25ldHdv
cmsvbWFjL0Jsb2JEYXRhRmlsZVJlZmVyZW5jZU1hYy5tbQogICAgIHBsYXRmb3JtL25ldHdvcmsv
bWFjL0NlcnRpZmljYXRlSW5mb01hYy5tbQotICAgIHBsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tp
ZUphck1hYy5tbQogICAgIHBsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZVN0b3JhZ2VNYWMubW0K
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL21hYy9DcmVkZW50aWFsU3RvcmFnZU1hYy5tbQogICAgIHBs
YXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dAppbmRleCBlMzUyZTUzYjhkNjFmY2I4MGEyZjJhMGNhNmNlZmU1YzFhOTFiOTNkLi5lZTll
OGIwYTFmMzE3NTM1MmYyNTUyMDcwNDUzMzg5NWIzYjE5YjRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2Nv
YS50eHQKQEAgLTUwNyw3ICs1MDcsNiBAQCBwbGF0Zm9ybS9uZXR3b3JrL2lvcy9XZWJDb3JlVVJM
UmVzcG9uc2VJT1MubW0KIHBsYXRmb3JtL25ldHdvcmsvbWFjL0F1dGhlbnRpY2F0aW9uTWFjLm1t
CiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9CbG9iRGF0YUZpbGVSZWZlcmVuY2VNYWMubW0KIHBsYXRm
b3JtL25ldHdvcmsvbWFjL0NlcnRpZmljYXRlSW5mb01hYy5tbQotcGxhdGZvcm0vbmV0d29yay9t
YWMvQ29va2llSmFyTWFjLm1tCiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVTdG9yYWdlTWFj
Lm1tCiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9DcmVkZW50aWFsU3RvcmFnZU1hYy5tbQogcGxhdGZv
cm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmYzFmYTFkMmVjZjhlMDM1
ZDI1NDgyZmVmYjc1OWZjZmExZWI1NTYxLi43ODdkY2ZhYjU3ZDFjMmQ1ZDJjOWU2YzIxNTRjMDIw
ODEzYjBiZGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC00NjAzLDcgKzQ2MDMsNiBAQAogCQlFMTM0RjVBQjEyRUUzNDNGMDA0
RUM1OEQgLyogSW50UmVjdEhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxMzRGNUFBMTJFRTM0M0YwMDRFQzU4RCAvKiBJbnRSZWN0SGFzaC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUxMzk4NjY0
MTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM5ODY2MjE1NDc4NDc0MDAxRTNGNjUgLyogU3R5
bGVSZXNvbHZlci5oICovOyB9OwogCQlFMTNFRjM0NDE2ODRFQ0Y0MDAzNEM4M0YgLyogTmV0d29y
a1N0b3JhZ2VTZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMTNFRjM0MjE2ODRFQ0Y0MDAzNEM4M0YgLyogTmV0d29ya1N0b3JhZ2VTZXNzaW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRTE0
MjRDOEExNjRCM0I0RTAwRjMyRDQwIC8qIFBsYXRmb3JtQ29va2llSmFyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTQyNEM4OTE2NEIzQjRFMDBGMzJE
NDAgLyogUGxhdGZvcm1Db29raWVKYXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlFMTQyNEM5NDE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTQyNEM5
MjE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTE0RjFDNDUxNEI1REFDNjAwRUE5MDA5IC8qIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNEYxQzQzMTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTE1MjU1MTUxNkZEMjM1MDAwM0Q3QURCIC8qIFdlYkNvcmVS
ZXNvdXJjZUhhbmRsZUFzT3BlcmF0aW9uUXVldWVEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1MjU1MTMxNkZEMjM0RjAwM0Q3QURCIC8q
IFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzT3BlcmF0aW9uUXVldWVEZWxlZ2F0ZS5oICovOyB9OwpA
QCAtMTQxMzAsOCArMTQxMjksNiBAQAogCQlFMTNFRjM0NzE2ODUwQzQ3MDAzNEM4M0YgLyogTmV0
d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFMTNGMDFFQTEyNzBFMTBEMDBERkJBNzEgLyogQ29va2llU3RvcmFnZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb29raWVTdG9yYWdlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxM0YwMUYwMTI3MEUxOTAwMERGQkE3MSAvKiBDb29r
aWVTdG9yYWdlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
Q29va2llU3RvcmFnZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTE0MjRD
ODkxNjRCM0I0RTAwRjMyRDQwIC8qIFBsYXRmb3JtQ29va2llSmFyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtQ29va2llSmFyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUUxNDI0QzhGMTY0QjQ2MEIwMEYzMkQ0MCAvKiBDb29raWVKYXJNYWMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb29raWVKYXJNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNDI0QzkxMTY0QjUyQzgwMEYzMkQ0MCAv
KiBDb29raWVKYXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29v
a2llSmFyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE0MjRDOTIxNjRCNTJD
ODAwRjMyRDQwIC8qIENvb2tpZUphci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb29raWVKYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE0QTk0RDYxNkRG
REY5NTAwNjhERTgyIC8qIEJsb2JSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBCbG9iUmVnaXN0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTkwNzMsNyArMTkwNzAsNiBAQAogCQkJCUNEQ0Q0MUU2MUMzRERCMDkwMDk2NUQ5OSAv
KiBQYXJzZWRDb250ZW50UmFuZ2UuaCAqLywKIAkJCQk0NDc5NTgwMjE2NDNCNDdCMDAxRTBBN0Yg
LyogUGFyc2VkQ29udGVudFR5cGUuY3BwICovLAogCQkJCTQ0Nzk1ODAzMTY0M0I0N0IwMDFFMEE3
RiAvKiBQYXJzZWRDb250ZW50VHlwZS5oICovLAotCQkJCUUxNDI0Qzg5MTY0QjNCNEUwMEYzMkQ0
MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICovLAogCQkJCTM3QkFBRTU3MTk4MEQxREQwMDVERkU3
MSAvKiBQcm90ZWN0aW9uU3BhY2UuaCAqLywKIAkJCQk1MTRDNzY1RjBDRTkyM0ExMDA3RUYzQ0Qg
LyogUHJvdGVjdGlvblNwYWNlQmFzZS5jcHAgKi8sCiAJCQkJNTE0Qzc2NjAwQ0U5MjNBMTAwN0VG
M0NEIC8qIFByb3RlY3Rpb25TcGFjZUJhc2UuaCAqLywKQEAgLTE5MTEzLDcgKzE5MTA5LDYgQEAK
IAkJCQk1MTRDNzY0MzBDRTkyMzRFMDA3RUYzQ0QgLyogQXV0aGVudGljYXRpb25NYWMubW0gKi8s
CiAJCQkJRTE2NEEyRUIxOTFBRTYzNTAwMTA3MzdEIC8qIEJsb2JEYXRhRmlsZVJlZmVyZW5jZU1h
Yy5tbSAqLywKIAkJCQk1RjJEQkJFNzE3OEUzMzJEMDAxNDE0ODYgLyogQ2VydGlmaWNhdGVJbmZv
TWFjLm1tICovLAotCQkJCUUxNDI0QzhGMTY0QjQ2MEIwMEYzMkQ0MCAvKiBDb29raWVKYXJNYWMu
bW0gKi8sCiAJCQkJRTEzRjAxRjAxMjcwRTE5MDAwREZCQTcxIC8qIENvb2tpZVN0b3JhZ2VNYWMu
bW0gKi8sCiAJCQkJRTFCNENEMjQxMEIzMjJFMjAwQkZGRDdFIC8qIENyZWRlbnRpYWxTdG9yYWdl
TWFjLm1tICovLAogCQkJCTUxNEM3NjQ0MENFOTIzNEUwMDdFRjNDRCAvKiBGb3JtRGF0YVN0cmVh
bU1hYy5oICovLApAQCAtMjk3MTUsNyArMjk3MTAsNiBAQAogCQkJCTQ5M0U1RTA5MTJENjQyMDUw
MDAyMDA4MSAvKiBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJE
NzBCQTEzMTgwNzREREYwMDAxOTA4QSAvKiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTE0OTc4NzExQUJBRjNBNTAwQ0VGN0U0IC8qIFBsYXRmb3JtQ29udGVudEZp
bHRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTE0MjRDOEExNjRCM0I0RTAwRjMyRDQwIC8qIFBs
YXRmb3JtQ29va2llSmFyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVDNzYyQjE0OTdGRTE0MDBC
QzQ3NzUgLyogUGxhdGZvcm1FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjY2MDFFQkYxNEIz
QjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0FBNDg3MDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMu
aCBpbiBIZWFkZXJzICovLApAQCAtMjk4OTQsOCArMjk4ODgsNiBAQAogCQkJCTNDMjQ0RkVBQTM3
NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwQkUwMzBBMjBGMzExMkZCMDAzQzFBNDYgLyogUmVuZGVyTGluZUJveExpc3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDRUE0ODY0MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJMaW5lQnJl
YWsuaCBpbiBIZWFkZXJzICovLAotCQkJCTk0Q0ZENjBBMUZFOTg2N0UwMDI0ODhBRCAvKiBSZW5k
ZXJMaW5lc0NsYW1wRmxvdy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTRDRkQ2MEQxRkVBQ0VGRTAw
MjQ4OEFEIC8qIFJlbmRlckxpbmVzQ2xhbXBTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFCQjU0
MTlGMEFDRERGRTQwMDI4MjBFQiAvKiBSZW5kZXJMaXN0Qm94LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEVBN0E1MjBBMTkxQTUyMDBBOEVGNUYgLyogUmVuZGVyTGlzdEl0ZW0uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4RUE3QTUwMEExOTFBNTIwMEE4RUY1RiAvKiBSZW5kZXJMaXN0TWFya2VyLmgg
aW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVK
YXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5jcHAKaW5kZXggNDliNzk4
ZDdkMmNlYWJkOWE4ZGFmZWRkODUzNDhhMjRhYmE4MmMzZS4uMDY4MzA2NzQ0YWY4MTRiZDI3NjBh
NWUxODY1YTVhOWFiNDM1MmIxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nv
b2tpZUphci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5jcHAKQEAg
LTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0
ZWdpZXMuaCIKICNpbmNsdWRlICJTYW1lU2l0ZUluZm8uaCIKICNpbmNsdWRlIDx3dGYvU3lzdGVt
VHJhY2luZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cmwuY21ha2UKaW5kZXggMTA1MTEzMDY5NjRk
ODcwYWI5ZGZmYTE1ZGJkZTkxMTNkNWQwOTNkMC4uMTYwM2VmODYxNjI4NmVhYjI2ZjczYTgzNGIy
NzAyZjJmMGNlYzcyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5j
bWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJsLmNtYWtlCkBAIC01LDcgKzUs
NiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlv
bkNoYWxsZW5nZUN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0NlcnRpZmljYXRl
SW5mby5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybERhdGFiYXNlLmNwcAogICAgIHBs
YXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ29va2llU3RvcmFnZUN1cmwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Tb3VyY2VzU291cC50eHQgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2Vz
U291cC50eHQKaW5kZXggZDY0ZmNmYmVhMjgxNDdkYWRmNDMwYjJmZmI0YzBmZWE2MGI5NWQ4YS4u
YzAyZTQ5ZTRlNTFlZjc0OTMxZjcwZGQ4NjU1ZDM0ZGUyZDYzZTQ4YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc1NvdXAudHh0CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NvdXJjZXNTb3VwLnR4dApAQCAtMjMsNyArMjMsNiBAQAogCiBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTb3VwLmNwcAogcGxhdGZvcm0vbmV0
d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5jcHAKLXBsYXRmb3JtL25ldHdvcmsvc291cC9Db29r
aWVKYXJTb3VwLmNwcAogcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVNvdXAuY3BwCiBwbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU3RvcmFnZVNvdXAuY3BwCiBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvQ3JlZGVudGlhbFN0b3JhZ2VTb3VwLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24uY3BwCmluZGV4IDMwMmE4ZDY3ODliMGM5
OGE5NjBlMjMzYmE0MjgyY2QyZTc4MjY3M2UuLjkxMGZiZjk1NjgyMWZiNzBjNmU2MzI1MWYwYWI0
ODE1MjIzZjFlMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Q2FjaGVWYWxpZGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0NhY2hlVmFsaWRhdGlvbi5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJDb29raWVz
U3RyYXRlZ3kuaCIKICNpbmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCiAjaW5jbHVkZSAiTmV0d29y
a1N0b3JhZ2VTZXNzaW9uLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCkBAIC0zMzgsNyArMzM3LDcgQEAgc3RhdGlj
IFN0cmluZyBoZWFkZXJWYWx1ZUZvclZhcnkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBjb25zdCBTdHJpbmcmIGgKICAgICAgICAgYXV0byogY29va2llU3RyYXRlZ3kgPSBwbGF0Zm9y
bVN0cmF0ZWdpZXMoKSA/IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5jb29raWVzU3RyYXRlZ3koKSA6
IG51bGxwdHI7CiAgICAgICAgIGlmICghY29va2llU3RyYXRlZ3kpIHsKICAgICAgICAgICAgIEFT
U0VSVChzZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSwgcmVxdWVzdC5maXJzdFBhcnR5
Rm9yQ29va2llcygpLCBTYW1lU2l0ZUluZm86OmNyZWF0ZShyZXF1ZXN0KSwgcmVxdWVzdC51cmwo
KSwgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQsIGluY2x1ZGVTZWN1cmVDb29raWVzKS5maXJz
dDsKKyAgICAgICAgICAgIHJldHVybiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9y
YWdlU2Vzc2lvbigpLmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHJlcXVlc3QuZmlyc3RQ
YXJ0eUZvckNvb2tpZXMoKSwgU2FtZVNpdGVJbmZvOjpjcmVhdGUocmVxdWVzdCksIHJlcXVlc3Qu
dXJsKCksIHN0ZDo6bnVsbG9wdCwgc3RkOjpudWxsb3B0LCBpbmNsdWRlU2VjdXJlQ29va2llcyku
Zmlyc3Q7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvb2tpZVN0cmF0ZWd5LT5jb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShzZXNzaW9uSUQsIHJlcXVlc3QuZmlyc3RQYXJ0eUZvckNv
b2tpZXMoKSwgU2FtZVNpdGVJbmZvOjpjcmVhdGUocmVxdWVzdCksIHJlcXVlc3QudXJsKCksIHN0
ZDo6bnVsbG9wdCwgc3RkOjpudWxsb3B0LCBpbmNsdWRlU2VjdXJlQ29va2llcykuZmlyc3Q7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3Jr
U3RvcmFnZVNlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29y
a1N0b3JhZ2VTZXNzaW9uLmgKaW5kZXggNmU5OTM5M2RmMmI4OWQ2YzBmZmRhZGQ5ZjI0MWFiOGZj
MDkyZmI5My4uMDhhODJkZDVhM2QwODliM2JhNGY4YjBkZDU0MTYzNTQyODdlMjUxNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Np
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdl
U2Vzc2lvbi5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9XYWxsVGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAj
aWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShDRlVSTENPTk5FQ1RJT04pCkBAIC02NCw2ICs2NSwx
MCBAQCBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiBjbGFzcyBTb3VwTmV0d29ya1Nlc3Npb247CiAK
IHN0cnVjdCBDb29raWU7CitzdHJ1Y3QgQ29va2llUmVxdWVzdEhlYWRlckZpZWxkUHJveHk7Citz
dHJ1Y3QgU2FtZVNpdGVJbmZvOworCitlbnVtIGNsYXNzIEluY2x1ZGVTZWN1cmVDb29raWVzOwog
CiBjbGFzcyBOZXR3b3JrU3RvcmFnZVNlc3Npb24gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMTM3
LDEyICsxNDIsMjQgQEAgcHVibGljOgogICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0KCkg
Y29uc3Q7CiAjZW5kaWYKIAorICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgY29va2llc0VuYWJsZWQo
KSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENvb2tpZShjb25zdCBDb29raWUm
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENvb2tpZXMoY29uc3QgVmVjdG9yPENvb2tp
ZT4mLCBjb25zdCBVUkwmLCBjb25zdCBVUkwmIG1haW5Eb2N1bWVudFVSTCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRDb29raWVzRnJvbURPTShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNv
bnN0IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZy
YW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgY29uc3QgU3RyaW5nJikgY29u
c3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVDb29raWUoY29uc3QgQ29va2llJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVDb29raWUoY29uc3QgVVJMJiwgY29uc3Qg
U3RyaW5nJikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVBbGxDb29raWVz
KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5j
ZShXYWxsVGltZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVDb29raWVzRm9ySG9z
dG5hbWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb29raWVIb3N0TmFtZXMpOwogICAgIFdFQkNP
UkVfRVhQT1JUIFZlY3RvcjxDb29raWU+IGdldEFsbENvb2tpZXMoKTsKICAgICBXRUJDT1JFX0VY
UE9SVCBWZWN0b3I8Q29va2llPiBnZXRDb29raWVzKGNvbnN0IFVSTCYpOworICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNh
bWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQs
IHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgVmVjdG9yPENvb2tpZT4mKSBjb25zdDsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZsdXNoQ29va2llU3RvcmUoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9z
dG5hbWVzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29r
aWVzRm9yRE9NKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29u
c3QgVVJMJiwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1
aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcykgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBV
UkwmLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2
NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVzKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eSYpIGNvbnN0OworCiAKIHByaXZh
dGU6CiAgICAgc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxO
ZXR3b3JrU3RvcmFnZVNlc3Npb24+PiYgZ2xvYmFsU2Vzc2lvbk1hcCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybUNvb2tpZUphci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybUNvb2tpZUphci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODk0M2Q5Y2Y4MTgxZjYzODA0NjNlZTg3YmYxOTMxNzQ0
NzY1YzNjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1Db29raWVKYXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIFVSTDsKLWNsYXNzIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjsKLQotc3RydWN0IENvb2tp
ZTsKLXN0cnVjdCBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eTsKLXN0cnVjdCBTYW1lU2l0
ZUluZm87Ci0KLWVudW0gY2xhc3MgSW5jbHVkZVNlY3VyZUNvb2tpZXM7Ci0KLS8vIEZJWE1FOiBU
aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgTmV0d29ya1N0b3JhZ2VTZXNzaW9uIG1lbWJlciBmdW5j
dGlvbnMuCi0KLVdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZXNG
b3JET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5
LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90
PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVD
b29raWVzKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q29va2llc0Zyb21ET00oY29uc3QgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0
ZUluZm8mLCBjb25zdCBVUkwmLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIGNvbnN0IFN0cmluZyYpOwotV0VCQ09SRV9FWFBP
UlQgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mKTsKLVdF
QkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFVSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiwgc3RkOjpvcHRpb25hbDx1aW50
NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2Vj
dXJlQ29va2llcyk7Ci1XRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBj
b25zdCBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eSYpOwotV0VCQ09SRV9FWFBPUlQgYm9v
bCBnZXRSYXdDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFVSTCYg
Zmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiwgc3RkOjpvcHRpb25h
bDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBWZWN0
b3I8Q29va2llPiYpOwotV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVDb29raWUoY29uc3QgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJik7Ci1XRUJDT1JF
X0VYUE9SVCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiYsIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsKLVdFQkNPUkVfRVhQT1JUIHZv
aWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24m
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgY29va2llSG9zdE5hbWVzKTsKLVdFQkNPUkVfRVhQT1JU
IHZvaWQgZGVsZXRlQWxsQ29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mKTsKLVdF
QkNPUkVfRVhQT1JUIHZvaWQgZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoY29uc3QgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiwgV2FsbFRpbWUpOwotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmNwcApp
bmRleCA3NTlkNjNhNDY4NWJmZGFmYTcyNzAwNWJiNzQ0YzhhNTY3YWQxYWMzLi4zODliNmVhMDM2
NmE2OWFmYzY1Y2EzMGYxODU3MWRkZjQ0MGFlNGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5jcHAKQEAg
LTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5
LmgiCiAjaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1Db29raWVKYXIuaCIKICNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCIKICNp
bmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KIApAQCAtODUsNyArODQsNyBAQCBzdGF0aWMgc3RkOjpv
cHRpb25hbDxzdGQ6OnBhaXI8VmVjdG9yPHVpbnQ4X3Q+LCBib29sPj4gY29va2llRGF0YUZvckhh
bmRzaGFrZShjbwogICAgIAogICAgIFN0cmluZyBjb29raWVEYXRhU3RyaW5nOwogICAgIGJvb2wg
c2VjdXJlQ29va2llc0FjY2Vzc2VkID0gZmFsc2U7Ci0gICAgc3RkOjp0aWUoY29va2llRGF0YVN0
cmluZywgc2VjdXJlQ29va2llc0FjY2Vzc2VkKSA9IFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKCpuZXR3b3JrU3RvcmFnZVNlc3Npb24sIGhlYWRlckZpZWxkUHJveHkpOwor
ICAgIHN0ZDo6dGllKGNvb2tpZURhdGFTdHJpbmcsIHNlY3VyZUNvb2tpZXNBY2Nlc3NlZCkgPSBu
ZXR3b3JrU3RvcmFnZVNlc3Npb24tPmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGhlYWRl
ckZpZWxkUHJveHkpOwogICAgIGlmIChjb29raWVEYXRhU3RyaW5nLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIHN0ZDo6cGFpcjxWZWN0b3I8dWludDhfdD4sIGJvb2w+IHsgeyB9LCBzZWN1cmVD
b29raWVzQWNjZXNzZWQgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAppbmRleCAxZTBjNzRhMjdhYzA2OGY3NWE5ZjMz
MTBmZjc0Zjk2NzA5MDM1NGMzLi42OGQ2OGZiN2ZmNTRmOTY3YjBmZDg2NDQxYzEyZmEwNjc4ODkz
NzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tp
ZUphckNGTmV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nv
b2tpZUphckNGTmV0LmNwcApAQCAtMjQsNyArMjQsNiBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvb2tpZUphci5oIgogCiAjaWYgVVNFKENGVVJMQ09O
TkVDVElPTikKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0LmNwcAppbmRleCA0ZTMxMDU2
MTBjOTliOWU4NmYzZGFiMTRkZDVmY2MzYzVkMzFkMzA3Li4wNzA0MTBjMmU0YjA4NzliZDFjNzhm
YWUyOTZjMjE1ZDZjNGFkYTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0LmNwcApA
QCAtMzYsNiArMzYsNDYgQEAKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNlbHNlCiAj
aW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgor
I2VuZGlmCisjaWYgVVNFKENGVVJMQ09OTkVDVElPTikKKyNpbmNsdWRlICJDb29raWUuaCIKKyNp
bmNsdWRlICJDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eS5oIgorI2luY2x1ZGUgIkNvb2tp
ZXNTdHJhdGVneS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiVVJM
LmgiCisjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGSFRUUENvb2tpZXNQcml2Lmg+CisjaW5jbHVkZSA8
Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1J
bnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jZi9D
Rk5ldHdvcmtTUEkuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d3RmL1NvZnRM
aW5raW5nLmg+CisjaW5jbHVkZSA8d3RmL2NmL1R5cGVDYXN0c0NGLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK2VudW0geworICAgIENGSFRUUENvb2tpZVN0b3JhZ2VBY2Nl
cHRQb2xpY3lFeGNsdXNpdmVseUZyb21NYWluRG9jdW1lbnREb21haW4gPSAzCit9OworCituYW1l
c3BhY2UgV1RGIHsKKworI2RlZmluZSBERUNMQVJFX0NGX1RZUEVfVFJBSVQoQ2xhc3NOYW1lKSBc
Cit0ZW1wbGF0ZSA8PiBcCitzdHJ1Y3QgQ0ZUeXBlVHJhaXQ8Q2xhc3NOYW1lIyNSZWY+IHsgXAor
c3RhdGljIGlubGluZSBDRlR5cGVJRCB0eXBlSUQoKSB7IHJldHVybiBDbGFzc05hbWUjI0dldFR5
cGVJRCgpOyB9IFwKK307CisKKyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNh
dGVkLWRlY2xhcmF0aW9ucyIKKyNlbmRpZgorREVDTEFSRV9DRl9UWVBFX1RSQUlUKENGSFRUUENv
b2tpZSk7CisjaWYgQ09NUElMRVIoQ0xBTkcpCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9w
CisjZW5kaWYKKworI3VuZGVmIERFQ0xBUkVfQ0ZfVFlQRV9UUkFJVAorfSAvLyBuYW1lc3BhY2Ug
V1RGCisKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MDIsNCArNDQyLDI2MyBA
QCB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llcyhjb25zdCBWZWN0b3I8Q29v
a2llPiYsIGNvbnN0IFVSTCYsIGNvbnN0CiB9CiAjZW5kaWYKIAorfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjaWYgVVNFKENGVVJMQ09OTkVDVElPTikKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgc19zZXRDb29raWVLZXlDRiA9IENGU1RSKCJTZXQt
Q29va2llIik7CitzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgc19jb29raWVDRiA9IENGU1RSKCJD
b29raWUiKTsKK3N0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBzX2NyZWF0ZWRDRiA9IENGU1RSKCJD
cmVhdGVkIik7CisKK3N0YXRpYyBpbmxpbmUgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjb29raWVE
b21haW4oQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSkKK3sKKyAgICByZXR1cm4gYWRvcHRDRihDRkhU
VFBDb29raWVDb3B5RG9tYWluKGNvb2tpZSkpOworfQorCitzdGF0aWMgZG91YmxlIGNhbm9uaWNh
bENvb2tpZVRpbWUoZG91YmxlIHRpbWUpCit7CisgICAgaWYgKCF0aW1lKQorICAgICAgICByZXR1
cm4gdGltZTsKKworICAgIHJldHVybiAodGltZSArIGtDRkFic29sdXRlVGltZUludGVydmFsU2lu
Y2UxOTcwKSAqIDEwMDA7Cit9CisKK3N0YXRpYyBkb3VibGUgY29va2llQ3JlYXRlZFRpbWUoQ0ZI
VFRQQ29va2llUmVmIGNvb2tpZSkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBw
cm9wcyA9IGFkb3B0Q0YoQ0ZIVFRQQ29va2llQ29weVByb3BlcnRpZXMoY29va2llKSk7CisgICAg
YXV0byB2YWx1ZSA9IENGRGljdGlvbmFyeUdldFZhbHVlKHByb3BzLmdldCgpLCBzX2NyZWF0ZWRD
Rik7CisKKyAgICBhdXRvIGFzTnVtYmVyID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPih2
YWx1ZSk7CisgICAgaWYgKGFzTnVtYmVyKSB7CisgICAgICAgIGRvdWJsZSBhc0RvdWJsZTsKKyAg
ICAgICAgaWYgKENGTnVtYmVyR2V0VmFsdWUoYXNOdW1iZXIsIGtDRk51bWJlckZsb2F0NjRUeXBl
LCAmYXNEb3VibGUpKQorICAgICAgICAgICAgcmV0dXJuIGNhbm9uaWNhbENvb2tpZVRpbWUoYXNE
b3VibGUpOworICAgICAgICByZXR1cm4gMC4wOworICAgIH0KKworICAgIGF1dG8gYXNTdHJpbmcg
PSBkeW5hbWljX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KHZhbHVlKTsKKyAgICBpZiAoYXNTdHJpbmcp
CisgICAgICAgIHJldHVybiBjYW5vbmljYWxDb29raWVUaW1lKENGU3RyaW5nR2V0RG91YmxlVmFs
dWUoYXNTdHJpbmcpKTsKKworICAgIHJldHVybiAwLjA7Cit9CisKK3N0YXRpYyBpbmxpbmUgQ0ZB
YnNvbHV0ZVRpbWUgY29va2llRXhwaXJhdGlvblRpbWUoQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSkK
K3sKKyAgICByZXR1cm4gY2Fub25pY2FsQ29va2llVGltZShDRkhUVFBDb29raWVHZXRFeHBpcmF0
aW9uVGltZShjb29raWUpKTsKK30KKworc3RhdGljIGlubGluZSBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IGNvb2tpZU5hbWUoQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSkKK3sKKyAgICByZXR1cm4gYWRv
cHRDRihDRkhUVFBDb29raWVDb3B5TmFtZShjb29raWUpKTsKK30KKworc3RhdGljIGlubGluZSBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNvb2tpZVBhdGgoQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSkK
K3sKKyAgICByZXR1cm4gYWRvcHRDRihDRkhUVFBDb29raWVDb3B5UGF0aChjb29raWUpKTsKK30K
Kworc3RhdGljIGlubGluZSBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNvb2tpZVZhbHVlKENGSFRU
UENvb2tpZVJlZiBjb29raWUpCit7CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZIVFRQQ29va2llQ29w
eVZhbHVlKGNvb2tpZSkpOworfQorCitzdGF0aWMgUmV0YWluUHRyPENGQXJyYXlSZWY+IGZpbHRl
ckNvb2tpZXMoQ0ZBcnJheVJlZiB1bmZpbHRlcmVkQ29va2llcykKK3sKKyAgICBBU1NFUlQodW5m
aWx0ZXJlZENvb2tpZXMpOworICAgIENGSW5kZXggY291bnQgPSBDRkFycmF5R2V0Q291bnQodW5m
aWx0ZXJlZENvb2tpZXMpOworICAgIFJldGFpblB0cjxDRk11dGFibGVBcnJheVJlZj4gZmlsdGVy
ZWRDb29raWVzID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZSgwLCBjb3VudCwgJmtDRlR5
cGVBcnJheUNhbGxCYWNrcykpOworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKKyAgICAgICAgQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSA9IChDRkhUVFBDb29raWVSZWYp
Q0ZBcnJheUdldFZhbHVlQXRJbmRleCh1bmZpbHRlcmVkQ29va2llcywgaSk7CisKKyAgICAgICAg
Ly8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IENGSFRUUENvb2tpZVN0b3JhZ2Ugd291bGQgc3Rv
cmUgYW4gZW1wdHkgY29va2llLAorICAgICAgICAvLyB3aGljaCB3b3VsZCBiZSBzZW50IGFzICJD
b29raWU6ID0iLiBXZSBoYXZlIGEgd29ya2Fyb3VuZCBpbiBzZXRDb29raWVzKCkgdG8gcHJldmVu
dAorICAgICAgICAvLyB0aGF0LCBidXQgd2UgYWxzbyBuZWVkIHRvIGF2b2lkIHNlbmRpbmcgY29v
a2llcyB0aGF0IHdlcmUgcHJldmlvdXNseSBzdG9yZWQsIGFuZAorICAgICAgICAvLyB0aGVyZSdz
IG5vIGhhcm0gdG8gZG9pbmcgdGhpcyBjaGVjayBiZWNhdXNlIHN1Y2ggYSBjb29raWUgaXMgbmV2
ZXIgdmFsaWQuCisgICAgICAgIGlmICghQ0ZTdHJpbmdHZXRMZW5ndGgoY29va2llTmFtZShjb29r
aWUpLmdldCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChDRkhUVFBD
b29raWVJc0hUVFBPbmx5KGNvb2tpZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBDRkFycmF5QXBwZW5kVmFsdWUoZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29raWUpOworICAg
IH0KKyAgICByZXR1cm4gZmlsdGVyZWRDb29raWVzOworfQorCitzdGF0aWMgUmV0YWluUHRyPENG
QXJyYXlSZWY+IGNvcHlDb29raWVzRm9yVVJMV2l0aEZpcnN0UGFydHlVUkwoY29uc3QgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVS
TCYgdXJsLCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykKK3sKKyAg
ICBib29sIHNlY3VyZSA9IGluY2x1ZGVTZWN1cmVDb29raWVzID09IEluY2x1ZGVTZWN1cmVDb29r
aWVzOjpZZXM7CisKKyAgICBBU1NFUlQoIXNlY3VyZSB8fCAoc2VjdXJlICYmIHVybC5wcm90b2Nv
bElzKCJodHRwcyIpKSk7CisKKyAgICBVTlVTRURfUEFSQU0oZmlyc3RQYXJ0eSk7CisgICAgcmV0
dXJuIGFkb3B0Q0YoQ0ZIVFRQQ29va2llU3RvcmFnZUNvcHlDb29raWVzRm9yVVJMKHNlc3Npb24u
Y29va2llU3RvcmFnZSgpLmdldCgpLCB1cmwuY3JlYXRlQ0ZVUkwoKS5nZXQoKSwgc2VjdXJlKSk7
Cit9CisKK3N0YXRpYyBDRkFycmF5UmVmIGNyZWF0ZUNvb2tpZXMoQ0ZEaWN0aW9uYXJ5UmVmIGhl
YWRlckZpZWxkcywgQ0ZVUkxSZWYgdXJsKQoreworICAgIENGQXJyYXlSZWYgcGFyc2VkQ29va2ll
cyA9IENGSFRUUENvb2tpZUNyZWF0ZVdpdGhSZXNwb25zZUhlYWRlckZpZWxkcyhrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBoZWFkZXJGaWVsZHMsIHVybCk7CisgICAgaWYgKCFwYXJzZWRDb29raWVzKQor
ICAgICAgICBwYXJzZWRDb29raWVzID0gQ0ZBcnJheUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCAwLCAwLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKKworICAgIHJldHVybiBwYXJzZWRDb29r
aWVzOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llc0Zyb21ET00o
Y29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVy
bCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRf
dD4gcGFnZUlELCBjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAoreworICAgIFVOVVNFRF9QQVJB
TShmcmFtZUlEKTsKKyAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKKyAgICAvLyA8cmRhcjovL3By
b2JsZW0vNTYzMjg4Mz4gQ0ZIVFRQQ29va2llU3RvcmFnZSBzdG9yZXMgYW4gZW1wdHkgY29va2ll
LCB3aGljaCB3b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLgorICAgIGlmICh2YWx1ZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsQ0Yg
PSB1cmwuY3JlYXRlQ0ZVUkwoKTsKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpcnN0UGFydHlG
b3JDb29raWVzQ0YgPSBmaXJzdFBhcnR5LmNyZWF0ZUNGVVJMKCk7CisKKyAgICAvLyA8aHR0cDov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzMT4sIDxyZGFyOi8vNDQwOTAzND4K
KyAgICAvLyBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzIGRvZXNuJ3QgcGFyc2UgY29v
a2llcyB3aXRob3V0IGEgdmFsdWUKKyAgICBTdHJpbmcgY29va2llU3RyaW5nID0gdmFsdWUuY29u
dGFpbnMoJz0nKSA/IHZhbHVlIDogdmFsdWUgKyAiPSI7CisKKyAgICBSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+IGNvb2tpZVN0cmluZ0NGID0gY29va2llU3RyaW5nLmNyZWF0ZUNGU3RyaW5nKCk7Cisg
ICAgYXV0byBjb29raWVTdHJpbmdDRlB0ciA9IGNvb2tpZVN0cmluZ0NGLmdldCgpOworICAgIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGhlYWRlckZpZWxkc0NGID0gYWRvcHRDRihDRkRpY3Rp
b25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwKKyAgICAgICAgKGNvbnN0IHZvaWQqKikm
c19zZXRDb29raWVLZXlDRiwgKGNvbnN0IHZvaWQqKikmY29va2llU3RyaW5nQ0ZQdHIsIDEsCisg
ICAgICAgICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5
VmFsdWVDYWxsQmFja3MpKTsKKworICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiB1bmZpbHRlcmVk
Q29va2llcyA9IGFkb3B0Q0YoY3JlYXRlQ29va2llcyhoZWFkZXJGaWVsZHNDRi5nZXQoKSwgdXJs
Q0YuZ2V0KCkpKTsKKyAgICBDRkhUVFBDb29raWVTdG9yYWdlU2V0Q29va2llcyhjb29raWVTdG9y
YWdlKCkuZ2V0KCksIGZpbHRlckNvb2tpZXModW5maWx0ZXJlZENvb2tpZXMuZ2V0KCkpLmdldCgp
LCB1cmxDRi5nZXQoKSwgZmlyc3RQYXJ0eUZvckNvb2tpZXNDRi5nZXQoKSk7Cit9CisKK3N0YXRp
YyBib29sIGNvbnRhaW5zU2VjdXJlQ29va2llcyhDRkFycmF5UmVmIGNvb2tpZXMpCit7CisgICAg
Q0ZJbmRleCBjb29raWVDb3VudCA9IENGQXJyYXlHZXRDb3VudChjb29raWVzKTsKKyAgICB3aGls
ZSAoY29va2llQ291bnQtLSkgeworICAgICAgICBpZiAoQ0ZIVFRQQ29va2llSXNTZWN1cmUoY2hl
Y2tlZF9jZl9jYXN0PENGSFRUUENvb2tpZVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChjb29r
aWVzLCBjb29raWVDb3VudCkpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gTmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpjb29raWVzRm9yRE9NKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3Qg
U2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZy
YW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tp
ZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpIGNvbnN0Cit7CisgICAgVU5VU0VEX1BBUkFNKGZyYW1l
SUQpOworICAgIFVOVVNFRF9QQVJBTShwYWdlSUQpOworICAgIFJldGFpblB0cjxDRkFycmF5UmVm
PiBjb29raWVzQ0YgPSBjb3B5Q29va2llc0ZvclVSTFdpdGhGaXJzdFBhcnR5VVJMKCp0aGlzLCBm
aXJzdFBhcnR5LCB1cmwsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKKworICAgIGF1dG8gZmlsdGVy
ZWRDb29raWVzID0gZmlsdGVyQ29va2llcyhjb29raWVzQ0YuZ2V0KCkpOworCisgICAgYm9vbCBk
aWRBY2Nlc3NTZWN1cmVDb29raWVzID0gY29udGFpbnNTZWN1cmVDb29raWVzKGZpbHRlcmVkQ29v
a2llcy5nZXQoKSk7CisKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBoZWFkZXJDRiA9
IGFkb3B0Q0YoQ0ZIVFRQQ29va2llQ29weVJlcXVlc3RIZWFkZXJGaWVsZHMoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgZmlsdGVyZWRDb29raWVzLmdldCgpKSk7CisgICAgU3RyaW5nIGNvb2tpZVN0cmlu
ZyA9IGNoZWNrZWRfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaGVh
ZGVyQ0YuZ2V0KCksIHNfY29va2llQ0YpKTsKKyAgICByZXR1cm4geyBjb29raWVTdHJpbmcsIGRp
ZEFjY2Vzc1NlY3VyZUNvb2tpZXMgfTsKIH0KKworc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBV
UkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYgdXJsLCBzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdl
SUQsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKSBjb25zdAorewor
ICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsKKyAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKKyAg
ICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY29va2llc0NGID0gY29weUNvb2tpZXNGb3JVUkxXaXRo
Rmlyc3RQYXJ0eVVSTCgqdGhpcywgZmlyc3RQYXJ0eSwgdXJsLCBpbmNsdWRlU2VjdXJlQ29va2ll
cyk7CisKKyAgICBib29sIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMgPSBjb250YWluc1NlY3VyZUNv
b2tpZXMoY29va2llc0NGLmdldCgpKTsKKworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
IGhlYWRlckNGID0gYWRvcHRDRihDRkhUVFBDb29raWVDb3B5UmVxdWVzdEhlYWRlckZpZWxkcyhr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBjb29raWVzQ0YuZ2V0KCkpKTsKKyAgICBTdHJpbmcgY29va2ll
U3RyaW5nID0gY2hlY2tlZF9jZl9jYXN0PENGU3RyaW5nUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1
ZShoZWFkZXJDRi5nZXQoKSwgc19jb29raWVDRikpOworICAgIHJldHVybiB7IGNvb2tpZVN0cmlu
ZywgZGlkQWNjZXNzU2VjdXJlQ29va2llcyB9OworfQorCitzdGQ6OnBhaXI8U3RyaW5nLCBib29s
PiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNv
bnN0IENvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5JiBoZWFkZXJGaWVsZFByb3h5KSBjb25z
dAoreworICAgIHJldHVybiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShoZWFkZXJGaWVs
ZFByb3h5LmZpcnN0UGFydHksIGhlYWRlckZpZWxkUHJveHkuc2FtZVNpdGVJbmZvLCBoZWFkZXJG
aWVsZFByb3h5LnVybCwgaGVhZGVyRmllbGRQcm94eS5mcmFtZUlELCBoZWFkZXJGaWVsZFByb3h5
LnBhZ2VJRCwgaGVhZGVyRmllbGRQcm94eS5pbmNsdWRlU2VjdXJlQ29va2llcyk7Cit9CisKK2Jv
b2wgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVzRW5hYmxlZCgpIGNvbnN0Cit7CisgICAg
Q0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeSBwb2xpY3kgPSBDRkhUVFBDb29raWVTdG9y
YWdlR2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UoKS5nZXQoKSk7CisgICAgcmV0
dXJuIHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5T25seUZyb21NYWlu
RG9jdW1lbnREb21haW4gfHwgcG9saWN5ID09IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xp
Y3lFeGNsdXNpdmVseUZyb21NYWluRG9jdW1lbnREb21haW4gfHwgcG9saWN5ID09IENGSFRUUENv
b2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lBbHdheXM7Cit9CisKK2Jvb2wgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpnZXRSYXdDb29raWVzKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNp
dGVJbmZvJiwgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQs
IHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tp
ZXMpIGNvbnN0Cit7CisgICAgVU5VU0VEX1BBUkFNKGZyYW1lSUQpOworICAgIFVOVVNFRF9QQVJB
TShwYWdlSUQpOworICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKKworICAgIGF1dG8gaW5jbHVkZVNl
Y3VyZUNvb2tpZXMgPSB1cmwucHJvdG9jb2xJcygiaHR0cHMiKSA/IEluY2x1ZGVTZWN1cmVDb29r
aWVzOjpZZXMgOiBJbmNsdWRlU2VjdXJlQ29va2llczo6Tm87CisKKyAgICBSZXRhaW5QdHI8Q0ZB
cnJheVJlZj4gY29va2llc0NGID0gY29weUNvb2tpZXNGb3JVUkxXaXRoRmlyc3RQYXJ0eVVSTCgq
dGhpcywgZmlyc3RQYXJ0eSwgdXJsLCBpbmNsdWRlU2VjdXJlQ29va2llcyk7CisKKyAgICBDRklu
ZGV4IGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGNvb2tpZXNDRi5nZXQoKSk7CisgICAgcmF3Q29v
a2llcy5yZXNlcnZlQ2FwYWNpdHkoY291bnQpOworCisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykgeworICAgICAgICBDRkhUVFBDb29raWVSZWYgY2ZDb29raWUgPSBjaGVj
a2VkX2NmX2Nhc3Q8Q0ZIVFRQQ29va2llUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGNvb2tp
ZXNDRi5nZXQoKSwgaSkpOworICAgICAgICBDb29raWUgY29va2llOworICAgICAgICBjb29raWUu
bmFtZSA9IGNvb2tpZU5hbWUoY2ZDb29raWUpLmdldCgpOworICAgICAgICBjb29raWUudmFsdWUg
PSBjb29raWVWYWx1ZShjZkNvb2tpZSkuZ2V0KCk7CisgICAgICAgIGNvb2tpZS5kb21haW4gPSBj
b29raWVEb21haW4oY2ZDb29raWUpLmdldCgpOworICAgICAgICBjb29raWUucGF0aCA9IGNvb2tp
ZVBhdGgoY2ZDb29raWUpLmdldCgpOworICAgICAgICBjb29raWUuY3JlYXRlZCA9IGNvb2tpZUNy
ZWF0ZWRUaW1lKGNmQ29va2llKTsKKyAgICAgICAgY29va2llLmV4cGlyZXMgPSBjb29raWVFeHBp
cmF0aW9uVGltZShjZkNvb2tpZSk7CisgICAgICAgIGNvb2tpZS5odHRwT25seSA9IENGSFRUUENv
b2tpZUlzSFRUUE9ubHkoY2ZDb29raWUpOworICAgICAgICBjb29raWUuc2VjdXJlID0gQ0ZIVFRQ
Q29va2llSXNTZWN1cmUoY2ZDb29raWUpOworICAgICAgICBjb29raWUuc2Vzc2lvbiA9IGZhbHNl
OyAvLyBGSVhNRTogTmVlZCBBUEkgZm9yIGlmIGEgY29va2llIGlzIGEgc2Vzc2lvbiBjb29raWUu
CisgICAgICAgIHJhd0Nvb2tpZXMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoY29va2llKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9u
OjpkZWxldGVDb29raWUoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QK
K3sKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9
IHRoaXMtPmNvb2tpZVN0b3JhZ2UoKTsKKworICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsQ0Yg
PSB1cmwuY3JlYXRlQ0ZVUkwoKTsKKworICAgIGJvb2wgc2VuZFNlY3VyZUNvb2tpZXMgPSB1cmwu
cHJvdG9jb2xJcygiaHR0cHMiKTsKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY29va2llc0NG
ID0gYWRvcHRDRihDRkhUVFBDb29raWVTdG9yYWdlQ29weUNvb2tpZXNGb3JVUkwoY29va2llU3Rv
cmFnZS5nZXQoKSwgdXJsQ0YuZ2V0KCksIHNlbmRTZWN1cmVDb29raWVzKSk7CisKKyAgICBDRklu
ZGV4IGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGNvb2tpZXNDRi5nZXQoKSk7CisgICAgZm9yIChD
RkluZGV4IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBDRkhUVFBDb29raWVSZWYg
Y29va2llID0gY2hlY2tlZF9jZl9jYXN0PENGSFRUUENvb2tpZVJlZj4oQ0ZBcnJheUdldFZhbHVl
QXRJbmRleChjb29raWVzQ0YuZ2V0KCksIGkpKTsKKyAgICAgICAgaWYgKFN0cmluZyhjb29raWVO
YW1lKGNvb2tpZSkuZ2V0KCkpID09IG5hbWUpIHsKKyAgICAgICAgICAgIENGSFRUUENvb2tpZVN0
b3JhZ2VEZWxldGVDb29raWUoY29va2llU3RvcmFnZS5nZXQoKSwgY29va2llKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMp
Cit7CisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXNDRiA9IGFkb3B0Q0YoQ0ZIVFRQ
Q29va2llU3RvcmFnZUNvcHlDb29raWVzKGNvb2tpZVN0b3JhZ2UoKS5nZXQoKSkpOworICAgIGlm
ICghY29va2llc0NGKQorICAgICAgICByZXR1cm47CisKKyAgICBDRkluZGV4IGNvdW50ID0gQ0ZB
cnJheUdldENvdW50KGNvb2tpZXNDRi5nZXQoKSk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgeworICAgICAgICBDRkhUVFBDb29raWVSZWYgY29va2llID0gY2hlY2tl
ZF9jZl9jYXN0PENGSFRUUENvb2tpZVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChjb29raWVz
Q0YuZ2V0KCksIGkpKTsKKyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBkb21haW4gPSBj
b29raWVEb21haW4oY29va2llKTsKKyAgICAgICAgaG9zdG5hbWVzLmFkZChkb21haW4uZ2V0KCkp
OworICAgIH0KK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUFsbENvb2tp
ZXMoKQoreworICAgIENGSFRUUENvb2tpZVN0b3JhZ2VEZWxldGVBbGxDb29raWVzKGNvb2tpZVN0
b3JhZ2UoKS5nZXQoKSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVD
b29raWVzRm9ySG9zdG5hbWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBob3N0bmFtZXMpCit7Cit9
CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRT
aW5jZShXYWxsVGltZSkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKENGVVJMQ09OTkVDVElPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29h
Lm1tCmluZGV4IDNhM2RmMGZhNTAzNmNhMTU5OWJhMzIzYjA1MWFiMzAzMjkxYmZiOTQuLjIxYjE0
ODY1MmZhNTU5OTVlNWQ3MWRlYWZjNDg2ZGY0MWZkOGM4OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2Eu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3Rv
cmFnZVNlc3Npb25Db2NvYS5tbQpAQCAtMjcsMTEgKzI3LDI3IEBACiAjaW1wb3J0ICJOZXR3b3Jr
U3RvcmFnZVNlc3Npb24uaCIKIAogI2ltcG9ydCAiQ29va2llLmgiCisjaW1wb3J0ICJDb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRQcm94eS5oIgogI2ltcG9ydCAiQ29va2llU3RvcmFnZU9ic2VydmVy
LmgiCisjaW1wb3J0ICJDb29raWVzU3RyYXRlZ3kuaCIKKyNpbXBvcnQgIlNhbWVTaXRlSW5mby5o
IgogI2ltcG9ydCAiVVJMLmgiCiAjaW1wb3J0IDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgog
I2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9PcHRpb25h
bC5oPgogI2ltcG9ydCA8d3RmL1Byb2Nlc3NQcml2aWxlZ2UuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKworQGludGVyZmFjZSBOU1VSTCAoKQorLSAoQ0ZVUkxSZWYpX2Nm
dXJsOworQGVuZAorCisjaWYgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA+PSAxMDE0MDApIHx8IChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEyMDAwMCkKK0BpbnRlcmZhY2UgTlNIVFRQQ29va2llU3Rv
cmFnZSAoU3RhZ2luZykKKy0gKHZvaWQpX2dldENvb2tpZXNGb3JVUkw6KE5TVVJMICopdXJsIG1h
aW5Eb2N1bWVudFVSTDooTlNVUkwgKiltYWluRG9jdW1lbnRVUkwgcGFydGl0aW9uOihOU1N0cmlu
ZyAqKXBhcnRpdGlvbiBwb2xpY3lQcm9wZXJ0aWVzOihOU0RpY3Rpb25hcnkqKXByb3BzIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkICheKShOU0FycmF5ICopKWNvbXBsZXRpb25IYW5kbGVyOworLSAo
dm9pZClfc2V0Q29va2llczooTlNBcnJheSAqKWNvb2tpZXMgZm9yVVJMOihOU1VSTCAqKVVSTCBt
YWluRG9jdW1lbnRVUkw6KE5TVVJMICopbWFpbkRvY3VtZW50VVJMIHBvbGljeVByb3BlcnRpZXM6
KE5TRGljdGlvbmFyeSopIHByb3BzOworQGVuZAorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMTUwLDQgKzE2Niw0MTggQEAgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBjcmVhdGVQ
cml2YXRlU3RvcmFnZVNlc3Npb24oQ0ZTdHJpbmdSZWYgaWRlbnRpZmllcikKICAgICByZXR1cm4g
c3RvcmFnZVNlc3Npb24ubGVha1JlZigpOwogfQogCitzdGF0aWMgTlNBcnJheSAqaHR0cENvb2tp
ZXMoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlKQoreworICAgIEFTU0VSVCho
YXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMp
KTsKKyAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCisgICAgICAgIHJldHVybiBbW05TSFRUUENvb2tp
ZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIGNvb2tpZXNdOworICAgIAorICAgIGF1
dG8gY29va2llcyA9IGFkb3B0Q0YoQ0ZIVFRQQ29va2llU3RvcmFnZUNvcHlDb29raWVzKGNvb2tp
ZVN0b3JhZ2UpKTsKKyAgICByZXR1cm4gW05TSFRUUENvb2tpZSBfY2YybnNDb29raWVzOmNvb2tp
ZXMuZ2V0KCldOworfQorCitzdGF0aWMgdm9pZCBkZWxldGVIVFRQQ29va2llKENGSFRUUENvb2tp
ZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSwgTlNIVFRQQ29va2llICpjb29raWUpCit7CisgICAg
QVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3
Q29va2llcykpOworICAgIGlmICghY29va2llU3RvcmFnZSkgeworICAgICAgICBbW05TSFRUUENv
b2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIGRlbGV0ZUNvb2tpZTpjb29raWVd
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIENGSFRUUENvb2tpZVN0b3JhZ2VE
ZWxldGVDb29raWUoY29va2llU3RvcmFnZSwgW2Nvb2tpZSBfR2V0SW50ZXJuYWxDRkhUVFBDb29r
aWVdKTsKK30KKworI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPj0gMTAxNDAwKSB8fCAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMjAwMDApCitzdGF0aWMgUmV0YWluUHRyPE5TRGljdGlvbmFy
eT4gcG9saWN5UHJvcGVydGllcyhjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgTlNV
UkwgKnVybCkKK3sKKyAgICBzdGF0aWMgTlNVUkwgKmVtcHR5VVJMID0gW1tOU1VSTCBhbGxvY10g
aW5pdFdpdGhTdHJpbmc6QCIiXTsKKyAgICBOU0RpY3Rpb25hcnkgKnBvbGljeVByb3BlcnRpZXMg
PSBAeworICAgICAgICBAIl9rQ0ZIVFRQQ29va2llUG9saWN5UHJvcGVydHlTaXRlRm9yQ29va2ll
cyI6IHNhbWVTaXRlSW5mby5pc1NhbWVTaXRlID8gdXJsIDogZW1wdHlVUkwsCisgICAgICAgIEAi
X2tDRkhUVFBDb29raWVQb2xpY3lQcm9wZXJ0eUlzVG9wTGV2ZWxOYXZpZ2F0aW9uIjogW05TTnVt
YmVyIG51bWJlcldpdGhCb29sOnNhbWVTaXRlSW5mby5pc1RvcFNpdGVdLAorICAgIH07CisgICAg
cmV0dXJuIHBvbGljeVByb3BlcnRpZXM7Cit9CisjZW5kaWYKKworc3RhdGljIE5TQXJyYXkgKmNv
b2tpZXNGb3JVUkwoTlNIVFRQQ29va2llU3RvcmFnZSAqc3RvcmFnZSwgTlNVUkwgKnVybCwgTlNV
UkwgKm1haW5Eb2N1bWVudFVSTCwgY29uc3Qgc3RkOjpvcHRpb25hbDxTYW1lU2l0ZUluZm8+JiBz
YW1lU2l0ZUluZm8sIE5TU3RyaW5nICpwYXJ0aXRpb24gPSBudWxscHRyKQoreworICAgIC8vIFRo
ZSBfZ2V0Q29va2llc0ZvclVSTDogbWV0aG9kIGNhbGxzIHRoZSBjb21wbGV0aW9uSGFuZGxlciBz
eW5jaHJvbm91c2x5LiBXZSB1c2Ugc3RkOjpvcHRpb25hbDw+IHRvIGVuc3VyZSB0aGlzIGludmFy
aWFudC4KKyAgICBzdGQ6Om9wdGlvbmFsPFJldGFpblB0cjxOU0FycmF5ICo+PiBjb29raWVzUHRy
OworICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBbJmNvb2tpZXNQdHJdIChOU0FycmF5ICpj
b29raWVzKSB7IGNvb2tpZXNQdHIgPSByZXRhaW5QdHIoY29va2llcyk7IH07CisjaWYgKFBMQVRG
T1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE0MDApIHx8
IChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEy
MDAwMCkKKyAgICBpZiAoW3N0b3JhZ2UgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihfZ2V0
Q29va2llc0ZvclVSTDptYWluRG9jdW1lbnRVUkw6cGFydGl0aW9uOnBvbGljeVByb3BlcnRpZXM6
Y29tcGxldGlvbkhhbmRsZXI6KV0pCisgICAgICAgIFtzdG9yYWdlIF9nZXRDb29raWVzRm9yVVJM
OnVybCBtYWluRG9jdW1lbnRVUkw6bWFpbkRvY3VtZW50VVJMIHBhcnRpdGlvbjpwYXJ0aXRpb24g
cG9saWN5UHJvcGVydGllczpzYW1lU2l0ZUluZm8gPyBwb2xpY3lQcm9wZXJ0aWVzKHNhbWVTaXRl
SW5mby52YWx1ZSgpLCB1cmwpLmdldCgpIDogbnVsbHB0ciBjb21wbGV0aW9uSGFuZGxlcjpjb21w
bGV0aW9uSGFuZGxlcl07CisgICAgZWxzZQorICAgICAgICBbc3RvcmFnZSBfZ2V0Q29va2llc0Zv
clVSTDp1cmwgbWFpbkRvY3VtZW50VVJMOm1haW5Eb2N1bWVudFVSTCBwYXJ0aXRpb246cGFydGl0
aW9uIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKKyNlbHNlCisgICAgW3N0
b3JhZ2UgX2dldENvb2tpZXNGb3JVUkw6dXJsIG1haW5Eb2N1bWVudFVSTDptYWluRG9jdW1lbnRV
UkwgcGFydGl0aW9uOnBhcnRpdGlvbiBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxl
cl07CisgICAgVU5VU0VEX1BBUkFNKHNhbWVTaXRlSW5mbyk7CisjZW5kaWYKKyAgICBBU1NFUlQo
ISFjb29raWVzUHRyKTsKKyAgICByZXR1cm4gY29va2llc1B0ci0+YXV0b3JlbGVhc2UoKTsKK30K
Kworc3RhdGljIHZvaWQgc2V0SFRUUENvb2tpZXNGb3JVUkwoQ0ZIVFRQQ29va2llU3RvcmFnZVJl
ZiBjb29raWVTdG9yYWdlLCBOU0FycmF5ICpjb29raWVzLCBOU1VSTCAqdXJsLCBOU1VSTCAqbWFp
bkRvY3VtZW50VVJMLCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbykKK3sKKyAgICBB
U1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdD
b29raWVzKSk7CisgICAgaWYgKCFjb29raWVTdG9yYWdlKSB7CisjaWYgKFBMQVRGT1JNKE1BQykg
JiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE0MDApIHx8IChQTEFURk9S
TShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEyMDAwMCkKKyAg
ICAgICAgaWYgKFtOU0hUVFBDb29raWVTdG9yYWdlIGluc3RhbmNlc1Jlc3BvbmRUb1NlbGVjdG9y
OkBzZWxlY3Rvcihfc2V0Q29va2llczpmb3JVUkw6bWFpbkRvY3VtZW50VVJMOnBvbGljeVByb3Bl
cnRpZXM6KV0pCisgICAgICAgICAgICBbW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENv
b2tpZVN0b3JhZ2VdIF9zZXRDb29raWVzOmNvb2tpZXMgZm9yVVJMOnVybCBtYWluRG9jdW1lbnRV
Ukw6bWFpbkRvY3VtZW50VVJMIHBvbGljeVByb3BlcnRpZXM6cG9saWN5UHJvcGVydGllcyhzYW1l
U2l0ZUluZm8sIHVybCkuZ2V0KCldOworICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAg
IFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2ll
czpjb29raWVzIGZvclVSTDp1cmwgbWFpbkRvY3VtZW50VVJMOm1haW5Eb2N1bWVudFVSTF07Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE0MDApIHx8IChQTEFURk9STShJT1MpICYmIF9fSVBI
T05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEyMDAwMCkKKyAgICBpZiAoW05TSFRUUENv
b2tpZVN0b3JhZ2UgaW5zdGFuY2VzUmVzcG9uZFRvU2VsZWN0b3I6QHNlbGVjdG9yKF9zZXRDb29r
aWVzOmZvclVSTDptYWluRG9jdW1lbnRVUkw6cG9saWN5UHJvcGVydGllczopXSkgeworICAgICAg
ICAvLyBGSVhNRTogU3RvcCBjcmVhdGluZyBhIG5ldyBOU0hUVFBDb29raWVTdG9yYWdlIG9iamVj
dCBlYWNoIHRpbWUgd2Ugd2FudCB0byBxdWVyeSB0aGUgY29va2llIGphci4KKyAgICAgICAgLy8g
TmV0d29ya1N0b3JhZ2VTZXNzaW9uIGNvdWxkIGluc3RlYWQga2VlcCBhIE5TSFRUUENvb2tpZVN0
b3JhZ2Ugb2JqZWN0IGZvciB1cy4KKyAgICAgICAgUmV0YWluUHRyPE5TSFRUUENvb2tpZVN0b3Jh
Z2U+IG5zQ29va2llU3RvcmFnZSA9IGFkb3B0TlMoW1tOU0hUVFBDb29raWVTdG9yYWdlIGFsbG9j
XSBfaW5pdFdpdGhDRkhUVFBDb29raWVTdG9yYWdlOmNvb2tpZVN0b3JhZ2VdKTsKKyAgICAgICAg
W25zQ29va2llU3RvcmFnZSBfc2V0Q29va2llczpjb29raWVzIGZvclVSTDp1cmwgbWFpbkRvY3Vt
ZW50VVJMOm1haW5Eb2N1bWVudFVSTCBwb2xpY3lQcm9wZXJ0aWVzOnBvbGljeVByb3BlcnRpZXMo
c2FtZVNpdGVJbmZvLCB1cmwpLmdldCgpXTsKKyAgICB9IGVsc2UgeworI2VuZGlmCisgICAgICAg
IGF1dG8gY2ZDb29raWVzID0gYWRvcHRDRihbTlNIVFRQQ29va2llIF9uczJjZkNvb2tpZXM6Y29v
a2llc10pOworICAgICAgICBDRkhUVFBDb29raWVTdG9yYWdlU2V0Q29va2llcyhjb29raWVTdG9y
YWdlLCBjZkNvb2tpZXMuZ2V0KCksIFt1cmwgX2NmdXJsXSwgW21haW5Eb2N1bWVudFVSTCBfY2Z1
cmxdKTsKKyNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDEwMTQwMCkgfHwgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTIwMDAwKQorICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNh
bWVTaXRlSW5mbyk7CisjZW5kaWYKK30KKworc3RhdGljIE5TQXJyYXkgKmh0dHBDb29raWVzRm9y
VVJMKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSwgTlNVUkwgKmZpcnN0UGFy
dHksIGNvbnN0IHN0ZDo6b3B0aW9uYWw8U2FtZVNpdGVJbmZvPiYgc2FtZVNpdGVJbmZvLCBOU1VS
TCAqdXJsKQoreworICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxl
Z2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKKyAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCisgICAg
ICAgIGNvb2tpZVN0b3JhZ2UgPSBfQ0ZIVFRQQ29va2llU3RvcmFnZUdldERlZmF1bHQoa0NGQWxs
b2NhdG9yRGVmYXVsdCk7CisKKyAgICAvLyBGSVhNRTogU3RvcCBjcmVhdGluZyBhIG5ldyBOU0hU
VFBDb29raWVTdG9yYWdlIG9iamVjdCBlYWNoIHRpbWUgd2Ugd2FudCB0byBxdWVyeSB0aGUgY29v
a2llIGphci4KKyAgICAvLyBOZXR3b3JrU3RvcmFnZVNlc3Npb24gY291bGQgaW5zdGVhZCBrZWVw
IGEgTlNIVFRQQ29va2llU3RvcmFnZSBvYmplY3QgZm9yIHVzLgorICAgIFJldGFpblB0cjxOU0hU
VFBDb29raWVTdG9yYWdlPiBuc0Nvb2tpZVN0b3JhZ2UgPSBhZG9wdE5TKFtbTlNIVFRQQ29va2ll
U3RvcmFnZSBhbGxvY10gX2luaXRXaXRoQ0ZIVFRQQ29va2llU3RvcmFnZTpjb29raWVTdG9yYWdl
XSk7CisgICAgcmV0dXJuIGNvb2tpZXNGb3JVUkwobnNDb29raWVTdG9yYWdlLmdldCgpLCB1cmws
IGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbyk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8TlNBcnJh
eT4gZmlsdGVyQ29va2llcyhOU0FycmF5ICp1bmZpbHRlcmVkQ29va2llcykKK3sKKyAgICBBU1NF
UlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29r
aWVzKSk7CisgICAgTlNVSW50ZWdlciBjb3VudCA9IFt1bmZpbHRlcmVkQ29va2llcyBjb3VudF07
CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBmaWx0ZXJlZENvb2tpZXMgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y291bnRdKTsKKworICAg
IGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgTlNIVFRQ
Q29va2llICpjb29raWUgPSAoTlNIVFRQQ29va2llICopW3VuZmlsdGVyZWRDb29raWVzIG9iamVj
dEF0SW5kZXg6aV07CisKKyAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IE9uIDEw
LjUsIE5TSFRUUENvb2tpZVN0b3JhZ2Ugd291bGQgc3RvcmUgYW4gZW1wdHkgY29va2llLAorICAg
ICAgICAvLyB3aGljaCB3b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLiBXZSBoYXZlIGEgd29y
a2Fyb3VuZCBpbiBzZXRDb29raWVzKCkgdG8gcHJldmVudAorICAgICAgICAvLyB0aGF0LCBidXQg
d2UgYWxzbyBuZWVkIHRvIGF2b2lkIHNlbmRpbmcgY29va2llcyB0aGF0IHdlcmUgcHJldmlvdXNs
eSBzdG9yZWQsIGFuZAorICAgICAgICAvLyB0aGVyZSdzIG5vIGhhcm0gdG8gZG9pbmcgdGhpcyBj
aGVjayBiZWNhdXNlIHN1Y2ggYSBjb29raWUgaXMgbmV2ZXIgdmFsaWQuCisgICAgICAgIGlmICgh
W1tjb29raWUgbmFtZV0gbGVuZ3RoXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGlmIChbY29va2llIGlzSFRUUE9ubHldKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgW2ZpbHRlcmVkQ29va2llcy5nZXQoKSBhZGRPYmplY3Q6Y29va2llXTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmlsdGVyZWRDb29raWVzOworfQorCisjaWYgSEFWRShDRk5FVFdPUktfU1RPUkFH
RV9QQVJUSVRJT05JTkcpCisKK3N0YXRpYyBOU0FycmF5ICphcHBseVBhcnRpdGlvblRvQ29va2ll
cyhOU1N0cmluZyAqcGFydGl0aW9uLCBOU0FycmF5ICpjb29raWVzKQoreworICAgIEFTU0VSVCho
YXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMp
KTsKKworICAgIC8vIEZJWE1FIDI0NzQ3NzM5OiBDRk5ldHdvcmsgc2hvdWxkIGV4cG9zZSB0aGlz
IGtleSBhcyBTUEkKKyAgICBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBwYXJ0aXRpb25LZXkgPSBA
IlN0b3JhZ2VQYXJ0aXRpb24iOworCisgICAgTlNNdXRhYmxlQXJyYXkgKnBhcnRpdGlvbmVkQ29v
a2llcyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpjb29raWVzLmNvdW50XTsK
KyAgICBmb3IgKE5TSFRUUENvb2tpZSAqY29va2llIGluIGNvb2tpZXMpIHsKKyAgICAgICAgUmV0
YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IHByb3BlcnRpZXMgPSBhZG9wdE5TKFtjb29raWUu
cHJvcGVydGllcyBtdXRhYmxlQ29weV0pOworICAgICAgICBbcHJvcGVydGllcyBzZXRPYmplY3Q6
cGFydGl0aW9uIGZvcktleTpwYXJ0aXRpb25LZXldOworICAgICAgICBbcGFydGl0aW9uZWRDb29r
aWVzIGFkZE9iamVjdDpbTlNIVFRQQ29va2llIGNvb2tpZVdpdGhQcm9wZXJ0aWVzOnByb3BlcnRp
ZXMuZ2V0KCldXTsKKyAgICB9CisKKyAgICByZXR1cm4gcGFydGl0aW9uZWRDb29raWVzOworfQor
CitzdGF0aWMgYm9vbCBjb29raWVzQXJlQmxvY2tlZEZvclVSTChjb25zdCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwp
Cit7CisgICAgcmV0dXJuIHNlc3Npb24uc2hvdWxkQmxvY2tDb29raWVzKGZpcnN0UGFydHksIHVy
bCk7Cit9CisKK3N0YXRpYyBOU0FycmF5ICpjb29raWVzSW5QYXJ0aXRpb25Gb3JVUkwoY29uc3Qg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNv
bnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRp
b25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlEKQor
eworICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFj
Y2Vzc1Jhd0Nvb2tpZXMpKTsKKyAgICBTdHJpbmcgcGFydGl0aW9uID0gc2Vzc2lvbi5jb29raWVT
dG9yYWdlUGFydGl0aW9uKGZpcnN0UGFydHksIHVybCwgZnJhbWVJRCwgcGFnZUlEKTsKKyAgICBp
ZiAocGFydGl0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIC8vIEZJ
WE1FOiBTdG9wIGNyZWF0aW5nIGEgbmV3IE5TSFRUUENvb2tpZVN0b3JhZ2Ugb2JqZWN0IGVhY2gg
dGltZSB3ZSB3YW50IHRvIHF1ZXJ5IHRoZSBjb29raWUgamFyLgorICAgIC8vIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiBjb3VsZCBpbnN0ZWFkIGtlZXAgYSBOU0hUVFBDb29raWVTdG9yYWdlIG9iamVj
dCBmb3IgdXMuCisgICAgUmV0YWluUHRyPE5TSFRUUENvb2tpZVN0b3JhZ2U+IGNvb2tpZVN0b3Jh
Z2U7CisgICAgaWYgKGF1dG8gc3RvcmFnZSA9IHNlc3Npb24uY29va2llU3RvcmFnZSgpKQorICAg
ICAgICBjb29raWVTdG9yYWdlID0gYWRvcHROUyhbW05TSFRUUENvb2tpZVN0b3JhZ2UgYWxsb2Nd
IF9pbml0V2l0aENGSFRUUENvb2tpZVN0b3JhZ2U6c3RvcmFnZS5nZXQoKV0pOworICAgIGVsc2UK
KyAgICAgICAgY29va2llU3RvcmFnZSA9IFtOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBD
b29raWVTdG9yYWdlXTsKKyAgICByZXR1cm4gY29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLmdl
dCgpLCB1cmwsIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgcGFydGl0aW9uKTsKK30KKworI2Vu
ZGlmIC8vIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQorICAgIAorc3RhdGlj
IE5TQXJyYXkgKmNvb2tpZXNGb3JVUkwoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNz
aW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJ
bmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3Rk
OjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlEKQoreworI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JB
R0VfUEFSVElUSU9OSU5HKQorICAgIGlmIChjb29raWVzQXJlQmxvY2tlZEZvclVSTChzZXNzaW9u
LCBmaXJzdFBhcnR5LCB1cmwpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIGlmIChO
U0FycmF5ICpjb29raWVzID0gY29va2llc0luUGFydGl0aW9uRm9yVVJMKHNlc3Npb24sIGZpcnN0
UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQpKQorICAgICAgICByZXR1
cm4gY29va2llczsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGZyYW1lSUQpOworICAgIFVOVVNF
RF9QQVJBTShwYWdlSUQpOworI2VuZGlmCisgICAgcmV0dXJuIGh0dHBDb29raWVzRm9yVVJMKHNl
c3Npb24uY29va2llU3RvcmFnZSgpLmdldCgpLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVy
bCk7Cit9CisKK2VudW0gSW5jbHVkZUhUVFBPbmx5T3JOb3QgeyBEb05vdEluY2x1ZGVIVFRQT25s
eSwgSW5jbHVkZUhUVFBPbmx5IH07CitzdGF0aWMgc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29v
a2llc0ZvclNlc3Npb24oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25z
dCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25z
dCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25h
bDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlSFRUUE9ubHlPck5vdCBpbmNsdWRlSFRUUE9ubHks
IEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKQoreworICAgIEFTU0VS
VChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tp
ZXMpKTsKKworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIE5TQXJyYXkg
KmNvb2tpZXMgPSBjb29raWVzRm9yVVJMKHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5m
bywgdXJsLCBmcmFtZUlELCBwYWdlSUQpOworICAgIGlmICghW2Nvb2tpZXMgY291bnRdKQorICAg
ICAgICByZXR1cm4geyBTdHJpbmcoKSwgZmFsc2UgfTsgLy8gUmV0dXJuIGEgbnVsbCBzdHJpbmcs
IG5vdCBhbiBlbXB0eSBvbmUgdGhhdCBTdHJpbmdCdWlsZGVyIHdvdWxkIGNyZWF0ZSBiZWxvdy4K
KworICAgIFN0cmluZ0J1aWxkZXIgY29va2llc0J1aWxkZXI7CisgICAgYm9vbCBkaWRBY2Nlc3NT
ZWN1cmVDb29raWVzID0gZmFsc2U7CisgICAgZm9yIChOU0hUVFBDb29raWUgKmNvb2tpZSBpbiBj
b29raWVzKSB7CisgICAgICAgIGlmICghW1tjb29raWUgbmFtZV0gbGVuZ3RoXSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICghaW5jbHVkZUhUVFBPbmx5ICYmIFtjb29raWUg
aXNIVFRQT25seV0pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoW2Nvb2tp
ZSBpc1NlY3VyZV0pIHsKKyAgICAgICAgICAgIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMgPSB0cnVl
OworICAgICAgICAgICAgaWYgKGluY2x1ZGVTZWN1cmVDb29raWVzID09IEluY2x1ZGVTZWN1cmVD
b29raWVzOjpObykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICghY29va2llc0J1aWxkZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29va2llc0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiOyAiKTsKKworICAgICAgICBjb29raWVzQnVpbGRlci5hcHBl
bmQoW2Nvb2tpZSBuYW1lXSk7CisgICAgICAgIGNvb2tpZXNCdWlsZGVyLmFwcGVuZCgnPScpOwor
ICAgICAgICBjb29raWVzQnVpbGRlci5hcHBlbmQoW2Nvb2tpZSB2YWx1ZV0pOworICAgIH0KKyAg
ICByZXR1cm4geyBjb29raWVzQnVpbGRlci50b1N0cmluZygpLCBkaWRBY2Nlc3NTZWN1cmVDb29r
aWVzIH07CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiB7IFN0
cmluZygpLCBmYWxzZSB9OworfQorCitzdGF0aWMgdm9pZCBkZWxldGVBbGxIVFRQQ29va2llcyhD
RkhUVFBDb29raWVTdG9yYWdlUmVmIGNvb2tpZVN0b3JhZ2UpCit7CisgICAgQVNTRVJUKGhhc1By
b2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOwor
CisgICAgaWYgKCFjb29raWVTdG9yYWdlKSB7CisgICAgICAgIE5TSFRUUENvb2tpZVN0b3JhZ2Ug
KmNvb2tpZVN0b3JhZ2UgPSBbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3Rv
cmFnZV07CisgICAgICAgIE5TQXJyYXkgKmNvb2tpZXMgPSBbY29va2llU3RvcmFnZSBjb29raWVz
XTsKKyAgICAgICAgaWYgKCFjb29raWVzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGZvciAoTlNIVFRQQ29va2llICpjb29raWUgaW4gY29va2llcykKKyAgICAgICAgICAgIFtjb29r
aWVTdG9yYWdlIGRlbGV0ZUNvb2tpZTpjb29raWVdOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQ0ZIVFRQQ29va2llU3RvcmFnZURlbGV0ZUFsbENvb2tpZXMoY29va2llU3RvcmFnZSk7
Cit9CisKK3N0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29v
a2llc0ZvckRPTShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2Ft
ZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJ
RCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBp
bmNsdWRlU2VjdXJlQ29va2llcykgY29uc3QKK3sKKyAgICByZXR1cm4gY29va2llc0ZvclNlc3Np
b24oKnRoaXMsIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQs
IERvTm90SW5jbHVkZUhUVFBPbmx5LCBpbmNsdWRlU2VjdXJlQ29va2llcyk7Cit9CisKK3N0ZDo6
cGFpcjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llUmVxdWVzdEhl
YWRlckZpZWxkVmFsdWUoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8m
IHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZy
YW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tp
ZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvb2tpZXNGb3JT
ZXNzaW9uKCp0aGlzLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFn
ZUlELCBJbmNsdWRlSFRUUE9ubHksIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKK30KKworc3RkOjpw
YWlyPFN0cmluZywgYm9vbD4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShjb25zdCBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eSYgaGVhZGVy
RmllbGRQcm94eSkgY29uc3QKK3sKKyAgICByZXR1cm4gY29va2llc0ZvclNlc3Npb24oKnRoaXMs
IGhlYWRlckZpZWxkUHJveHkuZmlyc3RQYXJ0eSwgaGVhZGVyRmllbGRQcm94eS5zYW1lU2l0ZUlu
Zm8sIGhlYWRlckZpZWxkUHJveHkudXJsLCBoZWFkZXJGaWVsZFByb3h5LmZyYW1lSUQsIGhlYWRl
ckZpZWxkUHJveHkucGFnZUlELCBJbmNsdWRlSFRUUE9ubHksIGhlYWRlckZpZWxkUHJveHkuaW5j
bHVkZVNlY3VyZUNvb2tpZXMpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0
Q29va2llc0Zyb21ET00oY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8m
IHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZy
YW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiBjb29r
aWVTdHIpIGNvbnN0Cit7CisgICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1By
aXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOworCisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IE9uIDEwLjUsIE5T
SFRUUENvb2tpZVN0b3JhZ2Ugd291bGQgc3RvcmUgYW4gZW1wdHkgY29va2llLAorICAgIC8vIHdo
aWNoIHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIuCisgICAgaWYgKGNvb2tpZVN0ci5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIDxodHRwOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02NTMxPiwgPHJkYXI6Ly80NDA5MDM0PgorICAgIC8vIGNvb2tpZXNX
aXRoUmVzcG9uc2VIZWFkZXJGaWVsZHMgZG9lc24ndCBwYXJzZSBjb29raWVzIHdpdGhvdXQgYSB2
YWx1ZQorICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBjb29raWVTdHIuY29udGFpbnMoJz0nKSA/
IGNvb2tpZVN0ciA6IGNvb2tpZVN0ciArICI9IjsKKworICAgIE5TVVJMICpjb29raWVVUkwgPSB1
cmw7CisgICAgTlNEaWN0aW9uYXJ5ICpoZWFkZXJGaWVsZHMgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rp
b25hcnlXaXRoT2JqZWN0OmNvb2tpZVN0cmluZyBmb3JLZXk6QCJTZXQtQ29va2llIl07CisKKyNp
ZiBQTEFURk9STShNQUMpCisgICAgTlNBcnJheSAqdW5maWx0ZXJlZENvb2tpZXMgPSBbTlNIVFRQ
Q29va2llIF9wYXJzZWRDb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzOmhlYWRlckZpZWxk
cyBmb3JVUkw6Y29va2llVVJMXTsKKyNlbHNlCisgICAgTlNBcnJheSAqdW5maWx0ZXJlZENvb2tp
ZXMgPSBbTlNIVFRQQ29va2llIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHM6aGVhZGVy
RmllbGRzIGZvclVSTDpjb29raWVVUkxdOworI2VuZGlmCisKKyAgICBSZXRhaW5QdHI8TlNBcnJh
eT4gZmlsdGVyZWRDb29raWVzID0gZmlsdGVyQ29va2llcyh1bmZpbHRlcmVkQ29va2llcyk7Cisg
ICAgQVNTRVJUKFtmaWx0ZXJlZENvb2tpZXMuZ2V0KCkgY291bnRdIDw9IDEpOworCisjaWYgSEFW
RShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCisgICAgaWYgKHNob3VsZEJsb2NrQ29v
a2llcyhmaXJzdFBhcnR5LCB1cmwpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgcGFy
dGl0aW9uID0gY29va2llU3RvcmFnZVBhcnRpdGlvbihmaXJzdFBhcnR5LCB1cmwsIGZyYW1lSUQs
IHBhZ2VJRCk7CisgICAgaWYgKCFwYXJ0aXRpb24uaXNFbXB0eSgpKQorICAgICAgICBmaWx0ZXJl
ZENvb2tpZXMgPSBhcHBseVBhcnRpdGlvblRvQ29va2llcyhwYXJ0aXRpb24sIGZpbHRlcmVkQ29v
a2llcy5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsKKyAgICBVTlVT
RURfUEFSQU0ocGFnZUlEKTsKKyNlbmRpZgorCisgICAgc2V0SFRUUENvb2tpZXNGb3JVUkwoY29v
a2llU3RvcmFnZSgpLmdldCgpLCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNvb2tpZVVSTCwgZmly
c3RQYXJ0eSwgc2FtZVNpdGVJbmZvKTsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
Cit9CisKK3N0YXRpYyBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kgaHR0cENvb2tpZUFjY2VwdFBv
bGljeShDRkhUVFBDb29raWVTdG9yYWdlUmVmIGNvb2tpZVN0b3JhZ2UpCit7CisgICAgQVNTRVJU
KGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2ll
cykpOworCisgICAgaWYgKCFjb29raWVTdG9yYWdlKQorICAgICAgICByZXR1cm4gW1tOU0hUVFBD
b29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBjb29raWVBY2NlcHRQb2xpY3ld
OworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeT4oQ0ZI
VFRQQ29va2llU3RvcmFnZUdldENvb2tpZUFjY2VwdFBvbGljeShjb29raWVTdG9yYWdlKSk7Cit9
CisKK2Jvb2wgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVzRW5hYmxlZCgpIGNvbnN0Cit7
CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgTlNIVFRQQ29va2llQWNj
ZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSA9IGh0dHBDb29raWVBY2NlcHRQb2xpY3koY29v
a2llU3RvcmFnZSgpLmdldCgpKTsKKyAgICByZXR1cm4gY29va2llQWNjZXB0UG9saWN5ID09IE5T
SFRUUENvb2tpZUFjY2VwdFBvbGljeUFsd2F5cyB8fCBjb29raWVBY2NlcHRQb2xpY3kgPT0gTlNI
VFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW4gfHwgY29va2ll
QWNjZXB0UG9saWN5ID09IE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeUV4Y2x1c2l2ZWx5RnJvbU1h
aW5Eb2N1bWVudERvbWFpbjsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0UmF3Q29v
a2llcyhjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJ
bmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3Rk
OjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykg
Y29uc3QKK3sKKyAgICByYXdDb29raWVzLmNsZWFyKCk7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOworCisgICAgTlNBcnJheSAqY29va2llcyA9IGNvb2tpZXNGb3JVUkwoKnRoaXMs
IGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQpOworICAgIE5T
VUludGVnZXIgY291bnQgPSBbY29va2llcyBjb3VudF07CisgICAgcmF3Q29va2llcy5yZXNlcnZl
Q2FwYWNpdHkoY291bnQpOworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKKyAgICAgICAgTlNIVFRQQ29va2llICpjb29raWUgPSAoTlNIVFRQQ29va2llICopW2Nv
b2tpZXMgb2JqZWN0QXRJbmRleDppXTsKKyAgICAgICAgcmF3Q29va2llcy51bmNoZWNrZWRBcHBl
bmQoeyBjb29raWUgfSk7CisgICAgfQorCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0
ZUNvb2tpZShjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKSBjb25zdAor
eworICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFj
Y2Vzc1Jhd0Nvb2tpZXMpKTsKKworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKwor
ICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gdGhp
cy0+Y29va2llU3RvcmFnZSgpOworICAgIE5TQXJyYXkgKmNvb2tpZXMgPSBodHRwQ29va2llc0Zv
clVSTChjb29raWVTdG9yYWdlLmdldCgpLCBuaWwsIHN0ZDo6bnVsbG9wdCwgdXJsKTsKKworICAg
IE5TU3RyaW5nICpjb29raWVOYW1lU3RyaW5nID0gY29va2llTmFtZTsKKworICAgIE5TVUludGVn
ZXIgY291bnQgPSBbY29va2llcyBjb3VudF07CisgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgeworICAgICAgICBOU0hUVFBDb29raWUgKmNvb2tpZSA9IChOU0hUVFBD
b29raWUgKilbY29va2llcyBvYmplY3RBdEluZGV4OmldOworICAgICAgICBpZiAoW1tjb29raWUg
bmFtZV0gaXNFcXVhbFRvU3RyaW5nOmNvb2tpZU5hbWVTdHJpbmddKQorICAgICAgICAgICAgZGVs
ZXRlSFRUUENvb2tpZShjb29raWVTdG9yYWdlLmdldCgpLCBjb29raWUpOworICAgIH0KKworICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNz
aW9uOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykK
K3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBOU0FycmF5ICpjb29r
aWVzID0gaHR0cENvb2tpZXMoY29va2llU3RvcmFnZSgpLmdldCgpKTsKKyAgICAKKyAgICBmb3Ig
KE5TSFRUUENvb2tpZSogY29va2llIGluIGNvb2tpZXMpCisgICAgICAgIGhvc3RuYW1lcy5hZGQo
W2Nvb2tpZSBkb21haW5dKTsKKyAgICAKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwor
fQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcygpCit7Cisg
ICAgZGVsZXRlQWxsSFRUUENvb2tpZXMoY29va2llU3RvcmFnZSgpLmdldCgpKTsKK30KKwordm9p
ZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKK3sKKyAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZp
bGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7CisKKyAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gY29va2llU3RvcmFnZSA9IHRoaXMtPmNvb2tpZVN0b3JhZ2UoKTsKKyAgICBOU0Fy
cmF5ICpjb29raWVzID0gaHR0cENvb2tpZXMoY29va2llU3RvcmFnZS5nZXQoKSk7CisgICAgaWYg
KCFjb29raWVzKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9y
PFJldGFpblB0cjxOU0hUVFBDb29raWU+Pj4gY29va2llc0J5RG9tYWluOworICAgIGZvciAoTlNI
VFRQQ29va2llKiBjb29raWUgaW4gY29va2llcykgeworICAgICAgICBhdXRvJiBjb29raWVzID0g
Y29va2llc0J5RG9tYWluLmFkZChjb29raWUuZG9tYWluLCBWZWN0b3I8UmV0YWluUHRyPE5TSFRU
UENvb2tpZT4+KCkpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgY29va2llcy5hcHBlbmQoY29v
a2llKTsKKyAgICB9CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGhvc3RuYW1lIDogaG9zdG5hbWVz
KSB7CisgICAgICAgIGF1dG8gaXQgPSBjb29raWVzQnlEb21haW4uZmluZChob3N0bmFtZSk7Cisg
ICAgICAgIGlmIChpdCA9PSBjb29raWVzQnlEb21haW4uZW5kKCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGl0LT52YWx1ZSkKKyAgICAgICAg
ICAgIGRlbGV0ZUhUVFBDb29raWUoY29va2llU3RvcmFnZS5nZXQoKSwgY29va2llLmdldCgpKTsK
KyAgICB9CisKKyAgICBbbnNDb29raWVTdG9yYWdlKCkgX3NhdmVDb29raWVzXTsKKworICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9u
OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShXYWxsVGltZSB0aW1lUG9pbnQpCit7Cisg
ICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNz
UmF3Q29va2llcykpOworCisgICAgaWYgKCFbTlNIVFRQQ29va2llU3RvcmFnZSBpbnN0YW5jZXNS
ZXNwb25kVG9TZWxlY3RvcjpAc2VsZWN0b3IocmVtb3ZlQ29va2llc1NpbmNlRGF0ZTopXSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTlNUaW1lSW50ZXJ2YWwgdGltZUludGVydmFsID0gdGltZVBv
aW50LnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpOworICAgIE5TRGF0ZSAqZGF0ZSA9IFtO
U0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZTE5NzA6dGltZUludGVydmFsXTsKKworICAg
IGF1dG8gKnN0b3JhZ2UgPSBuc0Nvb2tpZVN0b3JhZ2UoKTsKKworICAgIFtzdG9yYWdlIHJlbW92
ZUNvb2tpZXNTaW5jZURhdGU6ZGF0ZV07CisgICAgW3N0b3JhZ2UgX3NhdmVDb29raWVzXTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1YjRhMjQ1Mjc1ODI0YzA4MGQ5ODJkOTYwOTA1ZTQ0NGRlNjE5MDk2Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE4IFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29va2llSmFyQ3VybC5oIgotCi0jaWYgVVNFKENV
UkwpCi0jaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiQ29va2llUmVxdWVzdEhlYWRlckZp
ZWxkUHJveHkuaCIKLSNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZVNlc3Npb24uaCIKLSNpbmNsdWRl
ICJVUkwuaCIKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZXNGb3JET00oY29uc3Qg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNv
bnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRp
b25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJ
bmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykKLXsKLSAgICByZXR1cm4g
c2Vzc2lvbi5jb29raWVTdG9yYWdlKCkuY29va2llc0ZvckRPTShzZXNzaW9uLCBmaXJzdFBhcnR5
LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNsdWRlU2VjdXJlQ29va2ll
cyk7Ci19Ci0KLXZvaWQgc2V0Q29va2llc0Zyb21ET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNz
aW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYg
c2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJh
bWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBjb25zdCBTdHJpbmcmIHZhbHVl
KQotewotICAgIHNlc3Npb24uY29va2llU3RvcmFnZSgpLnNldENvb2tpZXNGcm9tRE9NKHNlc3Np
b24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIHZhbHVl
KTsKLX0KLQotc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZp
cnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVy
bCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRf
dD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykKLXsK
LSAgICByZXR1cm4gc2Vzc2lvbi5jb29raWVTdG9yYWdlKCkuY29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQs
IHBhZ2VJRCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOwotfQotCi1zdGQ6OnBhaXI8U3RyaW5nLCBi
b29sPiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBOZXR3b3JrU3RvcmFnZVNl
c3Npb24mIHNlc3Npb24sIGNvbnN0IENvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5JiBoZWFk
ZXJGaWVsZFByb3h5KQotewotICAgIHJldHVybiBzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5jb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShzZXNzaW9uLCBoZWFkZXJGaWVsZFByb3h5LmZpcnN0
UGFydHksIGhlYWRlckZpZWxkUHJveHkuc2FtZVNpdGVJbmZvLCBoZWFkZXJGaWVsZFByb3h5LnVy
bCwgaGVhZGVyRmllbGRQcm94eS5mcmFtZUlELCBoZWFkZXJGaWVsZFByb3h5LnBhZ2VJRCwgaGVh
ZGVyRmllbGRQcm94eS5pbmNsdWRlU2VjdXJlQ29va2llcyk7Ci19Ci0KLWJvb2wgY29va2llc0Vu
YWJsZWQoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uKQotewotICAgIHJldHVy
biBzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5jb29raWVzRW5hYmxlZChzZXNzaW9uKTsKLX0KLQot
Ym9vbCBnZXRSYXdDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwg
Y29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywg
Y29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0
aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0g
ICAgcmV0dXJuIHNlc3Npb24uY29va2llU3RvcmFnZSgpLmdldFJhd0Nvb2tpZXMoc2Vzc2lvbiwg
Zmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgcmF3Q29va2ll
cyk7Ci19Ci0KLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYg
c2Vzc2lvbiwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llKQotewotICAgIHNl
c3Npb24uY29va2llU3RvcmFnZSgpLmRlbGV0ZUNvb2tpZShzZXNzaW9uLCB1cmwsIGNvb2tpZSk7
Ci19Ci0KLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uJiBzZXNzaW9uLCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKLXsKLSAgICBzZXNz
aW9uLmNvb2tpZVN0b3JhZ2UoKS5nZXRIb3N0bmFtZXNXaXRoQ29va2llcyhzZXNzaW9uLCBob3N0
bmFtZXMpOwotfQotCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoY29uc3QgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgY29va2llSG9z
dE5hbWVzKQotewotICAgIHNlc3Npb24uY29va2llU3RvcmFnZSgpLmRlbGV0ZUNvb2tpZXNGb3JI
b3N0bmFtZXMoc2Vzc2lvbiwgY29va2llSG9zdE5hbWVzKTsKLX0KLQotdm9pZCBkZWxldGVBbGxD
b29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbikKLXsKLSAgICBzZXNz
aW9uLmNvb2tpZVN0b3JhZ2UoKS5kZWxldGVBbGxDb29raWVzKHNlc3Npb24pOwotfQotCi12b2lk
IGRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lv
biYgc2Vzc2lvbiwgV2FsbFRpbWUgc2luY2UpCi17Ci0gICAgc2Vzc2lvbi5jb29raWVTdG9yYWdl
KCkuZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbiwgc2luY2UpOwotfQotCi19
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0Nvb2tpZUphckN1cmwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9Db29raWVKYXJDdXJsLmgKaW5kZXggMmFhOGRmZGExYjcwZTEwOWNmZWI4YTRiZWYzYjQxZjQ2
NjZlNjhlZS4uZTBiMjFjYzEzNzc0OGE4ZTE2Mjc0ODMyNjA3YzE4ZDdhNDgxNjBmZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3Vy
bC5oCkBAIC0xOCwxMCArMTgsMjIgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJQbGF0
Zm9ybUNvb2tpZUphci5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBVUkw7CitjbGFz
cyBOZXR3b3JrU3RvcmFnZVNlc3Npb247CisKK3N0cnVjdCBDb29raWU7CitzdHJ1Y3QgQ29va2ll
UmVxdWVzdEhlYWRlckZpZWxkUHJveHk7CitzdHJ1Y3QgU2FtZVNpdGVJbmZvOworCitlbnVtIGNs
YXNzIEluY2x1ZGVTZWN1cmVDb29raWVzOworCiBjbGFzcyBDb29raWVKYXJDdXJsIHsKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZXNGb3JET00oY29u
c3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBT
YW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlE
LCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVzKSBj
b25zdCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ3VybC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ3VybC5jcHAKaW5kZXggMDYxZGYx
OTA1OTZlM2JiOWYxZmY5ZDE2NWI3N2Y3ZmZhZjNjYzc5My4uODZhNDFkZjczMmM3ZmUwZjJjNWU2
MWNiNWRiMzVkZWM0NTU5NmM2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkN1cmwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9OZXR3b3JrU3RvcmFnZVNlc3Npb25DdXJsLmNw
cApAQCAtMzEsMTMgKzMxLDE2IEBACiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29v
a2llSmFyQ3VybERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiQ29va2llSmFyREIuaCIKKyNpbmNsdWRl
ICJDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eS5oIgogI2luY2x1ZGUgIkN1cmxDb250ZXh0
LmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJVUkwuaCIKIAogI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtMTAzLDYgKzEwNiwyMSBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3dpdGNo
VG9OZXdUZXN0aW5nU2Vzc2lvbigpCiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgV2ViS2l0
IHRvIHVzZS4KIH0KIAordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXNGcm9t
RE9NKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUlu
Zm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0Cit7
CisgICAgY29va2llU3RvcmFnZSgpLnNldENvb2tpZXNGcm9tRE9NKCp0aGlzLCBmaXJzdFBhcnR5
LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCB2YWx1ZSk7Cit9CisKK2Jvb2wg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVzRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGNvb2tpZVN0b3JhZ2UoKS5jb29raWVzRW5hYmxlZCgqdGhpcyk7Cit9CisKK3N0ZDo6cGFp
cjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0ZvckRPTShjb25z
dCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25z
dCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25h
bDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29v
a2llcykgY29uc3QKK3sKKyAgICByZXR1cm4gY29va2llU3RvcmFnZSgpLmNvb2tpZXNGb3JET00o
KnRoaXMsIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGlu
Y2x1ZGVTZWN1cmVDb29raWVzKTsKK30KKwogdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNl
dENvb2tpZXMoY29uc3QgVmVjdG9yPENvb2tpZT4mLCBjb25zdCBVUkwmLCBjb25zdCBVUkwmKQog
ewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIFdlYktpdCB0byB1c2UuCkBAIC0xMTgsMjMg
KzEzNiw2MyBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llKGNvbnN0
IENvb2tpZSYpCiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgV2ViS2l0IHRvIHVzZS4KIH0K
IAordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZShjb25zdCBVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBjb29raWUpIGNvbnN0Cit7CisgICAgY29va2llU3RvcmFnZSgpLmRl
bGV0ZUNvb2tpZSgqdGhpcywgdXJsLCBjb29raWUpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcygpCit7CisgICAgY29va2llU3RvcmFnZSgpLmRlbGV0
ZUFsbENvb2tpZXMoKnRoaXMpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVs
ZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoV2FsbFRpbWUgc2luY2UpCit7CisgICAgY29va2ll
U3RvcmFnZSgpLmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKCp0aGlzLCBzaW5jZSk7Cit9
CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb29raWVIb3N0TmFtZXMpCit7CisgICAgY29va2llU3Rv
cmFnZSgpLmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoKnRoaXMsIGNvb2tpZUhvc3ROYW1lcyk7
Cit9CisKIFZlY3RvcjxDb29raWU+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0QWxsQ29va2ll
cygpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgV2ViS2l0IHRvIHVzZS4KICAgICBy
ZXR1cm4geyB9OwogfQogCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit7CisgICAgY29va2llU3Rv
cmFnZSgpLmdldEhvc3RuYW1lc1dpdGhDb29raWVzKCp0aGlzLCBob3N0bmFtZXMpOworfQorCiBW
ZWN0b3I8Q29va2llPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldENvb2tpZXMoY29uc3QgVVJM
JikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBXZWJLaXQgdG8gdXNlLgogICAgIHJl
dHVybiB7IH07CiB9CiAKK2Jvb2wgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRSYXdDb29raWVz
KGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8s
IGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9w
dGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKSBjb25z
dAoreworICAgIHJldHVybiBjb29raWVTdG9yYWdlKCkuZ2V0UmF3Q29va2llcygqdGhpcywgZmly
c3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgcmF3Q29va2llcyk7
Cit9CisKIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpmbHVzaENvb2tpZVN0b3JlKCkKIHsK
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBXZWJLaXQgdG8gdXNlLgogfQogCitzdGQ6OnBh
aXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBz
YW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFt
ZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVz
IGluY2x1ZGVTZWN1cmVDb29raWVzKSBjb25zdAoreworICAgIHJldHVybiBjb29raWVTdG9yYWdl
KCkuY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoKnRoaXMsIGZpcnN0UGFydHksIHNhbWVT
aXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKK30K
Kworc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94
eSYgaGVhZGVyRmllbGRQcm94eSkgY29uc3QKK3sKKyAgICByZXR1cm4gY29va2llU3RvcmFnZSgp
LmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKCp0aGlzLCBoZWFkZXJGaWVsZFByb3h5LmZp
cnN0UGFydHksIGhlYWRlckZpZWxkUHJveHkuc2FtZVNpdGVJbmZvLCBoZWFkZXJGaWVsZFByb3h5
LnVybCwgaGVhZGVyRmllbGRQcm94eS5mcmFtZUlELCBoZWFkZXJGaWVsZFByb3h5LnBhZ2VJRCwg
aGVhZGVyRmllbGRQcm94eS5pbmNsdWRlU2VjdXJlQ29va2llcyk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShDVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llSmFyTWFjLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llSmFyTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBjMjY0MGJkMDZkZjIxMGI2ZDJkMzIwODI2NTA2MTEwMmY4ZDkyMTg1Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZUphck1hYy5tbQorKysgL2Rldi9udWxsCkBA
IC0xLDQ3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlBsYXRmb3JtQ29va2llSmFy
LmgiCi0KLSNpbXBvcnQgIkNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5LmgiCi0jaW1wb3J0
ICJDb29raWVzU3RyYXRlZ3kuaCIKLSNpbXBvcnQgIk5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oIgot
I2ltcG9ydCA8cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4KLSNpbXBvcnQgPHd0Zi9CbG9ja09i
akNFeGNlcHRpb25zLmg+Ci0KLSNpbXBvcnQgIkNvb2tpZS5oIgotI2ltcG9ydCAiQ29va2llU3Rv
cmFnZS5oIgotI2ltcG9ydCAiU2FtZVNpdGVJbmZvLmgiCi0jaW1wb3J0ICJVUkwuaCIKLSNpbXBv
cnQgPHd0Zi9PcHRpb25hbC5oPgotI2ltcG9ydCA8d3RmL1Byb2Nlc3NQcml2aWxlZ2UuaD4KLSNp
bXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotQGludGVyZmFjZSBOU1VSTCAoKQot
LSAoQ0ZVUkxSZWYpX2NmdXJsOwotQGVuZAotCi0jaWYgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE0MDApIHx8IChQTEFURk9STShJT1MpICYm
IF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEyMDAwMCkKLUBpbnRlcmZhY2Ug
TlNIVFRQQ29va2llU3RvcmFnZSAoU3RhZ2luZykKLS0gKHZvaWQpX2dldENvb2tpZXNGb3JVUkw6
KE5TVVJMICopdXJsIG1haW5Eb2N1bWVudFVSTDooTlNVUkwgKiltYWluRG9jdW1lbnRVUkwgcGFy
dGl0aW9uOihOU1N0cmluZyAqKXBhcnRpdGlvbiBwb2xpY3lQcm9wZXJ0aWVzOihOU0RpY3Rpb25h
cnkqKXByb3BzIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0FycmF5ICopKWNvbXBsZXRp
b25IYW5kbGVyOwotLSAodm9pZClfc2V0Q29va2llczooTlNBcnJheSAqKWNvb2tpZXMgZm9yVVJM
OihOU1VSTCAqKVVSTCBtYWluRG9jdW1lbnRVUkw6KE5TVVJMICopbWFpbkRvY3VtZW50VVJMIHBv
bGljeVByb3BlcnRpZXM6KE5TRGljdGlvbmFyeSopIHByb3BzOwotQGVuZAotI2VuZGlmCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIE5TQXJyYXkgKmh0dHBDb29raWVzKENGSFRUUENv
b2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSkKLXsKLSAgICBBU1NFUlQoaGFzUHJvY2Vzc1By
aXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7Ci0gICAgaWYg
KCFjb29raWVTdG9yYWdlKQotICAgICAgICByZXR1cm4gW1tOU0hUVFBDb29raWVTdG9yYWdlIHNo
YXJlZEhUVFBDb29raWVTdG9yYWdlXSBjb29raWVzXTsKLSAgICAKLSAgICBhdXRvIGNvb2tpZXMg
PSBhZG9wdENGKENGSFRUUENvb2tpZVN0b3JhZ2VDb3B5Q29va2llcyhjb29raWVTdG9yYWdlKSk7
Ci0gICAgcmV0dXJuIFtOU0hUVFBDb29raWUgX2NmMm5zQ29va2llczpjb29raWVzLmdldCgpXTsK
LX0KLQotc3RhdGljIHZvaWQgZGVsZXRlSFRUUENvb2tpZShDRkhUVFBDb29raWVTdG9yYWdlUmVm
IGNvb2tpZVN0b3JhZ2UsIE5TSFRUUENvb2tpZSAqY29va2llKQotewotICAgIEFTU0VSVChoYXNQ
cm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsK
LSAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpIHsKLSAgICAgICAgW1tOU0hUVFBDb29raWVTdG9yYWdl
IHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBkZWxldGVDb29raWU6Y29va2llXTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBDRkhUVFBDb29raWVTdG9yYWdlRGVsZXRlQ29va2ll
KGNvb2tpZVN0b3JhZ2UsIFtjb29raWUgX0dldEludGVybmFsQ0ZIVFRQQ29va2llXSk7Ci19Ci0K
LSNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEwMTQwMCkgfHwgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTIwMDAwKQotc3RhdGljIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IHBvbGljeVBy
b3BlcnRpZXMoY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIE5TVVJMICp1cmwpCi17
Ci0gICAgc3RhdGljIE5TVVJMICplbXB0eVVSTCA9IFtbTlNVUkwgYWxsb2NdIGluaXRXaXRoU3Ry
aW5nOkAiIl07Ci0gICAgTlNEaWN0aW9uYXJ5ICpwb2xpY3lQcm9wZXJ0aWVzID0gQHsKLSAgICAg
ICAgQCJfa0NGSFRUUENvb2tpZVBvbGljeVByb3BlcnR5U2l0ZUZvckNvb2tpZXMiOiBzYW1lU2l0
ZUluZm8uaXNTYW1lU2l0ZSA/IHVybCA6IGVtcHR5VVJMLAotICAgICAgICBAIl9rQ0ZIVFRQQ29v
a2llUG9saWN5UHJvcGVydHlJc1RvcExldmVsTmF2aWdhdGlvbiI6IFtOU051bWJlciBudW1iZXJX
aXRoQm9vbDpzYW1lU2l0ZUluZm8uaXNUb3BTaXRlXSwKLSAgICB9OwotICAgIHJldHVybiBwb2xp
Y3lQcm9wZXJ0aWVzOwotfQotI2VuZGlmCi0KLXN0YXRpYyBOU0FycmF5ICpjb29raWVzRm9yVVJM
KE5TSFRUUENvb2tpZVN0b3JhZ2UgKnN0b3JhZ2UsIE5TVVJMICp1cmwsIE5TVVJMICptYWluRG9j
dW1lbnRVUkwsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8U2FtZVNpdGVJbmZvPiYgc2FtZVNpdGVJbmZv
LCBOU1N0cmluZyAqcGFydGl0aW9uID0gbnVsbHB0cikKLXsKLSAgICAvLyBUaGUgX2dldENvb2tp
ZXNGb3JVUkw6IG1ldGhvZCBjYWxscyB0aGUgY29tcGxldGlvbkhhbmRsZXIgc3luY2hyb25vdXNs
eS4gV2UgdXNlIHN0ZDo6b3B0aW9uYWw8PiB0byBlbnN1cmUgdGhpcyBpbnZhcmlhbnQuCi0gICAg
c3RkOjpvcHRpb25hbDxSZXRhaW5QdHI8TlNBcnJheSAqPj4gY29va2llc1B0cjsKLSAgICBhdXRv
IGNvbXBsZXRpb25IYW5kbGVyID0gWyZjb29raWVzUHRyXSAoTlNBcnJheSAqY29va2llcykgeyBj
b29raWVzUHRyID0gcmV0YWluUHRyKGNvb2tpZXMpOyB9OwotI2lmIChQTEFURk9STShNQUMpICYm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNDAwKSB8fCAoUExBVEZPUk0o
SU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMjAwMDApCi0gICAg
aWYgKFtzdG9yYWdlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX2dldENvb2tpZXNGb3JV
Ukw6bWFpbkRvY3VtZW50VVJMOnBhcnRpdGlvbjpwb2xpY3lQcm9wZXJ0aWVzOmNvbXBsZXRpb25I
YW5kbGVyOildKQotICAgICAgICBbc3RvcmFnZSBfZ2V0Q29va2llc0ZvclVSTDp1cmwgbWFpbkRv
Y3VtZW50VVJMOm1haW5Eb2N1bWVudFVSTCBwYXJ0aXRpb246cGFydGl0aW9uIHBvbGljeVByb3Bl
cnRpZXM6c2FtZVNpdGVJbmZvID8gcG9saWN5UHJvcGVydGllcyhzYW1lU2l0ZUluZm8udmFsdWUo
KSwgdXJsKS5nZXQoKSA6IG51bGxwdHIgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRs
ZXJdOwotICAgIGVsc2UKLSAgICAgICAgW3N0b3JhZ2UgX2dldENvb2tpZXNGb3JVUkw6dXJsIG1h
aW5Eb2N1bWVudFVSTDptYWluRG9jdW1lbnRVUkwgcGFydGl0aW9uOnBhcnRpdGlvbiBjb21wbGV0
aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07Ci0jZWxzZQotICAgIFtzdG9yYWdlIF9nZXRD
b29raWVzRm9yVVJMOnVybCBtYWluRG9jdW1lbnRVUkw6bWFpbkRvY3VtZW50VVJMIHBhcnRpdGlv
bjpwYXJ0aXRpb24gY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwotICAgIFVO
VVNFRF9QQVJBTShzYW1lU2l0ZUluZm8pOwotI2VuZGlmCi0gICAgQVNTRVJUKCEhY29va2llc1B0
cik7Ci0gICAgcmV0dXJuIGNvb2tpZXNQdHItPmF1dG9yZWxlYXNlKCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHNldEhUVFBDb29raWVzRm9yVVJMKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3Rv
cmFnZSwgTlNBcnJheSAqY29va2llcywgTlNVUkwgKnVybCwgTlNVUkwgKm1haW5Eb2N1bWVudFVS
TCwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8pCi17Ci0gICAgQVNTRVJUKGhhc1By
b2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOwot
ICAgIGlmICghY29va2llU3RvcmFnZSkgewotI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNDAwKSB8fCAoUExBVEZPUk0oSU9TKSAmJiBf
X0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMjAwMDApCi0gICAgICAgIGlmIChb
TlNIVFRQQ29va2llU3RvcmFnZSBpbnN0YW5jZXNSZXNwb25kVG9TZWxlY3RvcjpAc2VsZWN0b3Io
X3NldENvb2tpZXM6Zm9yVVJMOm1haW5Eb2N1bWVudFVSTDpwb2xpY3lQcm9wZXJ0aWVzOildKQot
ICAgICAgICAgICAgW1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdl
XSBfc2V0Q29va2llczpjb29raWVzIGZvclVSTDp1cmwgbWFpbkRvY3VtZW50VVJMOm1haW5Eb2N1
bWVudFVSTCBwb2xpY3lQcm9wZXJ0aWVzOnBvbGljeVByb3BlcnRpZXMoc2FtZVNpdGVJbmZvLCB1
cmwpLmdldCgpXTsKLSAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICBbW05TSFRUUENv
b2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZXM6Y29va2llcyBm
b3JVUkw6dXJsIG1haW5Eb2N1bWVudFVSTDptYWluRG9jdW1lbnRVUkxdOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPj0gMTAxNDAwKSB8fCAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMjAwMDApCi0gICAgaWYgKFtOU0hUVFBDb29raWVTdG9yYWdl
IGluc3RhbmNlc1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxlY3Rvcihfc2V0Q29va2llczpmb3JVUkw6
bWFpbkRvY3VtZW50VVJMOnBvbGljeVByb3BlcnRpZXM6KV0pIHsKLSAgICAgICAgLy8gRklYTUU6
IFN0b3AgY3JlYXRpbmcgYSBuZXcgTlNIVFRQQ29va2llU3RvcmFnZSBvYmplY3QgZWFjaCB0aW1l
IHdlIHdhbnQgdG8gcXVlcnkgdGhlIGNvb2tpZSBqYXIuCi0gICAgICAgIC8vIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiBjb3VsZCBpbnN0ZWFkIGtlZXAgYSBOU0hUVFBDb29raWVTdG9yYWdlIG9iamVj
dCBmb3IgdXMuCi0gICAgICAgIFJldGFpblB0cjxOU0hUVFBDb29raWVTdG9yYWdlPiBuc0Nvb2tp
ZVN0b3JhZ2UgPSBhZG9wdE5TKFtbTlNIVFRQQ29va2llU3RvcmFnZSBhbGxvY10gX2luaXRXaXRo
Q0ZIVFRQQ29va2llU3RvcmFnZTpjb29raWVTdG9yYWdlXSk7Ci0gICAgICAgIFtuc0Nvb2tpZVN0
b3JhZ2UgX3NldENvb2tpZXM6Y29va2llcyBmb3JVUkw6dXJsIG1haW5Eb2N1bWVudFVSTDptYWlu
RG9jdW1lbnRVUkwgcG9saWN5UHJvcGVydGllczpwb2xpY3lQcm9wZXJ0aWVzKHNhbWVTaXRlSW5m
bywgdXJsKS5nZXQoKV07Ci0gICAgfSBlbHNlIHsKLSNlbmRpZgotICAgICAgICBhdXRvIGNmQ29v
a2llcyA9IGFkb3B0Q0YoW05TSFRUUENvb2tpZSBfbnMyY2ZDb29raWVzOmNvb2tpZXNdKTsKLSAg
ICAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tpZXMoY29va2llU3RvcmFnZSwgY2ZDb29r
aWVzLmdldCgpLCBbdXJsIF9jZnVybF0sIFttYWluRG9jdW1lbnRVUkwgX2NmdXJsXSk7Ci0jaWYg
KFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE0
MDApIHx8IChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEyMDAwMCkKLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzYW1lU2l0ZUluZm8p
OwotI2VuZGlmCi19Ci0KLXN0YXRpYyBOU0FycmF5ICpodHRwQ29va2llc0ZvclVSTChDRkhUVFBD
b29raWVTdG9yYWdlUmVmIGNvb2tpZVN0b3JhZ2UsIE5TVVJMICpmaXJzdFBhcnR5LCBjb25zdCBz
dGQ6Om9wdGlvbmFsPFNhbWVTaXRlSW5mbz4mIHNhbWVTaXRlSW5mbywgTlNVUkwgKnVybCkKLXsK
LSAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nl
c3NSYXdDb29raWVzKSk7Ci0gICAgaWYgKCFjb29raWVTdG9yYWdlKQotICAgICAgICBjb29raWVT
dG9yYWdlID0gX0NGSFRUUENvb2tpZVN0b3JhZ2VHZXREZWZhdWx0KGtDRkFsbG9jYXRvckRlZmF1
bHQpOwotCi0gICAgLy8gRklYTUU6IFN0b3AgY3JlYXRpbmcgYSBuZXcgTlNIVFRQQ29va2llU3Rv
cmFnZSBvYmplY3QgZWFjaCB0aW1lIHdlIHdhbnQgdG8gcXVlcnkgdGhlIGNvb2tpZSBqYXIuCi0g
ICAgLy8gTmV0d29ya1N0b3JhZ2VTZXNzaW9uIGNvdWxkIGluc3RlYWQga2VlcCBhIE5TSFRUUENv
b2tpZVN0b3JhZ2Ugb2JqZWN0IGZvciB1cy4KLSAgICBSZXRhaW5QdHI8TlNIVFRQQ29va2llU3Rv
cmFnZT4gbnNDb29raWVTdG9yYWdlID0gYWRvcHROUyhbW05TSFRUUENvb2tpZVN0b3JhZ2UgYWxs
b2NdIF9pbml0V2l0aENGSFRUUENvb2tpZVN0b3JhZ2U6Y29va2llU3RvcmFnZV0pOwotICAgIHJl
dHVybiBjb29raWVzRm9yVVJMKG5zQ29va2llU3RvcmFnZS5nZXQoKSwgdXJsLCBmaXJzdFBhcnR5
LCBzYW1lU2l0ZUluZm8pOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlckNv
b2tpZXMoTlNBcnJheSAqdW5maWx0ZXJlZENvb2tpZXMpCi17Ci0gICAgQVNTRVJUKGhhc1Byb2Nl
c3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOwotICAg
IE5TVUludGVnZXIgY291bnQgPSBbdW5maWx0ZXJlZENvb2tpZXMgY291bnRdOwotICAgIFJldGFp
blB0cjxOU011dGFibGVBcnJheT4gZmlsdGVyZWRDb29raWVzID0gYWRvcHROUyhbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmNvdW50XSk7Ci0KLSAgICBmb3IgKE5TVUlu
dGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIE5TSFRUUENvb2tpZSAqY29v
a2llID0gKE5TSFRUUENvb2tpZSAqKVt1bmZpbHRlcmVkQ29va2llcyBvYmplY3RBdEluZGV4Omld
OwotCi0gICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NjMyODgzPiBPbiAxMC41LCBOU0hUVFBD
b29raWVTdG9yYWdlIHdvdWxkIHN0b3JlIGFuIGVtcHR5IGNvb2tpZSwKLSAgICAgICAgLy8gd2hp
Y2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4gV2UgaGF2ZSBhIHdvcmthcm91bmQgaW4g
c2V0Q29va2llcygpIHRvIHByZXZlbnQKLSAgICAgICAgLy8gdGhhdCwgYnV0IHdlIGFsc28gbmVl
ZCB0byBhdm9pZCBzZW5kaW5nIGNvb2tpZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgc3RvcmVkLCBh
bmQKLSAgICAgICAgLy8gdGhlcmUncyBubyBoYXJtIHRvIGRvaW5nIHRoaXMgY2hlY2sgYmVjYXVz
ZSBzdWNoIGEgY29va2llIGlzIG5ldmVyIHZhbGlkLgotICAgICAgICBpZiAoIVtbY29va2llIG5h
bWVdIGxlbmd0aF0pCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoW2Nvb2tp
ZSBpc0hUVFBPbmx5XSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFtmaWx0ZXJl
ZENvb2tpZXMuZ2V0KCkgYWRkT2JqZWN0OmNvb2tpZV07Ci0gICAgfQotCi0gICAgcmV0dXJuIGZp
bHRlcmVkQ29va2llczsKLX0KLQotI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9O
SU5HKQotCi1zdGF0aWMgTlNBcnJheSAqYXBwbHlQYXJ0aXRpb25Ub0Nvb2tpZXMoTlNTdHJpbmcg
KnBhcnRpdGlvbiwgTlNBcnJheSAqY29va2llcykKLXsKLSAgICBBU1NFUlQoaGFzUHJvY2Vzc1By
aXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7Ci0KLSAgICAv
LyBGSVhNRSAyNDc0NzczOTogQ0ZOZXR3b3JrIHNob3VsZCBleHBvc2UgdGhpcyBrZXkgYXMgU1BJ
Ci0gICAgc3RhdGljIE5TU3RyaW5nICogY29uc3QgcGFydGl0aW9uS2V5ID0gQCJTdG9yYWdlUGFy
dGl0aW9uIjsKLQotICAgIE5TTXV0YWJsZUFycmF5ICpwYXJ0aXRpb25lZENvb2tpZXMgPSBbTlNN
dXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6Y29va2llcy5jb3VudF07Ci0gICAgZm9yIChO
U0hUVFBDb29raWUgKmNvb2tpZSBpbiBjb29raWVzKSB7Ci0gICAgICAgIFJldGFpblB0cjxOU011
dGFibGVEaWN0aW9uYXJ5PiBwcm9wZXJ0aWVzID0gYWRvcHROUyhbY29va2llLnByb3BlcnRpZXMg
bXV0YWJsZUNvcHldKTsKLSAgICAgICAgW3Byb3BlcnRpZXMgc2V0T2JqZWN0OnBhcnRpdGlvbiBm
b3JLZXk6cGFydGl0aW9uS2V5XTsKLSAgICAgICAgW3BhcnRpdGlvbmVkQ29va2llcyBhZGRPYmpl
Y3Q6W05TSFRUUENvb2tpZSBjb29raWVXaXRoUHJvcGVydGllczpwcm9wZXJ0aWVzLmdldCgpXV07
Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhcnRpdGlvbmVkQ29va2llczsKLX0KLQotc3RhdGljIGJv
b2wgY29va2llc0FyZUJsb2NrZWRGb3JVUkwoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBz
ZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsKQotewotICAgIHJl
dHVybiBzZXNzaW9uLnNob3VsZEJsb2NrQ29va2llcyhmaXJzdFBhcnR5LCB1cmwpOwotfQotCi1z
dGF0aWMgTlNBcnJheSAqY29va2llc0luUGFydGl0aW9uRm9yVVJMKGNvbnN0IE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0
ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0
X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCkKLXsKLSAgICBBU1NF
UlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29r
aWVzKSk7Ci0gICAgU3RyaW5nIHBhcnRpdGlvbiA9IHNlc3Npb24uY29va2llU3RvcmFnZVBhcnRp
dGlvbihmaXJzdFBhcnR5LCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCk7Ci0gICAgaWYgKHBhcnRpdGlv
bi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICAvLyBGSVhNRTogU3RvcCBj
cmVhdGluZyBhIG5ldyBOU0hUVFBDb29raWVTdG9yYWdlIG9iamVjdCBlYWNoIHRpbWUgd2Ugd2Fu
dCB0byBxdWVyeSB0aGUgY29va2llIGphci4KLSAgICAvLyBOZXR3b3JrU3RvcmFnZVNlc3Npb24g
Y291bGQgaW5zdGVhZCBrZWVwIGEgTlNIVFRQQ29va2llU3RvcmFnZSBvYmplY3QgZm9yIHVzLgot
ICAgIFJldGFpblB0cjxOU0hUVFBDb29raWVTdG9yYWdlPiBjb29raWVTdG9yYWdlOwotICAgIGlm
IChhdXRvIHN0b3JhZ2UgPSBzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKSkKLSAgICAgICAgY29va2ll
U3RvcmFnZSA9IGFkb3B0TlMoW1tOU0hUVFBDb29raWVTdG9yYWdlIGFsbG9jXSBfaW5pdFdpdGhD
RkhUVFBDb29raWVTdG9yYWdlOnN0b3JhZ2UuZ2V0KCldKTsKLSAgICBlbHNlCi0gICAgICAgIGNv
b2tpZVN0b3JhZ2UgPSBbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFn
ZV07Ci0gICAgcmV0dXJuIGNvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5nZXQoKSwgdXJsLCBm
aXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHBhcnRpdGlvbik7Ci19Ci0KLSNlbmRpZiAvLyBIQVZF
KENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykKLSAgICAKLXN0YXRpYyBOU0FycmF5ICpj
b29raWVzRm9yVVJMKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3Qg
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3Qg
VVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8
dWludDY0X3Q+IHBhZ2VJRCkKLXsKLSNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElP
TklORykKLSAgICBpZiAoY29va2llc0FyZUJsb2NrZWRGb3JVUkwoc2Vzc2lvbiwgZmlyc3RQYXJ0
eSwgdXJsKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBpZiAoTlNBcnJheSAqY29v
a2llcyA9IGNvb2tpZXNJblBhcnRpdGlvbkZvclVSTChzZXNzaW9uLCBmaXJzdFBhcnR5LCBzYW1l
U2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlEKSkKLSAgICAgICAgcmV0dXJuIGNvb2tpZXM7
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsKLSAgICBVTlVTRURfUEFSQU0ocGFn
ZUlEKTsKLSNlbmRpZgotICAgIHJldHVybiBodHRwQ29va2llc0ZvclVSTChzZXNzaW9uLmNvb2tp
ZVN0b3JhZ2UoKS5nZXQoKSwgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwpOwotfQotCi1l
bnVtIEluY2x1ZGVIVFRQT25seU9yTm90IHsgRG9Ob3RJbmNsdWRlSFRUUE9ubHksIEluY2x1ZGVI
VFRQT25seSB9Owotc3RhdGljIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZXNGb3JTZXNz
aW9uKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJz
dFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmws
IHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+
IHBhZ2VJRCwgSW5jbHVkZUhUVFBPbmx5T3JOb3QgaW5jbHVkZUhUVFBPbmx5LCBJbmNsdWRlU2Vj
dXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykKLXsKLSAgICBBU1NFUlQoaGFzUHJvY2Vz
c1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7Ci0KLSAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBOU0FycmF5ICpjb29raWVzID0g
Y29va2llc0ZvclVSTChzZXNzaW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJh
bWVJRCwgcGFnZUlEKTsKLSAgICBpZiAoIVtjb29raWVzIGNvdW50XSkKLSAgICAgICAgcmV0dXJu
IHsgU3RyaW5nKCksIGZhbHNlIH07IC8vIFJldHVybiBhIG51bGwgc3RyaW5nLCBub3QgYW4gZW1w
dHkgb25lIHRoYXQgU3RyaW5nQnVpbGRlciB3b3VsZCBjcmVhdGUgYmVsb3cuCi0KLSAgICBTdHJp
bmdCdWlsZGVyIGNvb2tpZXNCdWlsZGVyOwotICAgIGJvb2wgZGlkQWNjZXNzU2VjdXJlQ29va2ll
cyA9IGZhbHNlOwotICAgIGZvciAoTlNIVFRQQ29va2llICpjb29raWUgaW4gY29va2llcykgewot
ICAgICAgICBpZiAoIVtbY29va2llIG5hbWVdIGxlbmd0aF0pCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBpZiAoIWluY2x1ZGVIVFRQT25seSAmJiBbY29va2llIGlzSFRUUE9ubHld
KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKFtjb29raWUgaXNTZWN1cmVd
KSB7Ci0gICAgICAgICAgICBkaWRBY2Nlc3NTZWN1cmVDb29raWVzID0gdHJ1ZTsKLSAgICAgICAg
ICAgIGlmIChpbmNsdWRlU2VjdXJlQ29va2llcyA9PSBJbmNsdWRlU2VjdXJlQ29va2llczo6Tm8p
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWNv
b2tpZXNCdWlsZGVyLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvb2tpZXNCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIjsgIik7Ci0KLSAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kKFtjb29raWUg
bmFtZV0pOwotICAgICAgICBjb29raWVzQnVpbGRlci5hcHBlbmQoJz0nKTsKLSAgICAgICAgY29v
a2llc0J1aWxkZXIuYXBwZW5kKFtjb29raWUgdmFsdWVdKTsKLSAgICB9Ci0gICAgcmV0dXJuIHsg
Y29va2llc0J1aWxkZXIudG9TdHJpbmcoKSwgZGlkQWNjZXNzU2VjdXJlQ29va2llcyB9OwotCi0g
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4geyBTdHJpbmcoKSwgZmFs
c2UgfTsKLX0KLQotc3RhdGljIHZvaWQgZGVsZXRlQWxsSFRUUENvb2tpZXMoQ0ZIVFRQQ29va2ll
U3RvcmFnZVJlZiBjb29raWVTdG9yYWdlKQotewotICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmls
ZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKLQotICAgIGlmICgh
Y29va2llU3RvcmFnZSkgewotICAgICAgICBOU0hUVFBDb29raWVTdG9yYWdlICpjb29raWVTdG9y
YWdlID0gW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdOwotICAg
ICAgICBOU0FycmF5ICpjb29raWVzID0gW2Nvb2tpZVN0b3JhZ2UgY29va2llc107Ci0gICAgICAg
IGlmICghY29va2llcykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBmb3IgKE5TSFRU
UENvb2tpZSAqY29va2llIGluIGNvb2tpZXMpCi0gICAgICAgICAgICBbY29va2llU3RvcmFnZSBk
ZWxldGVDb29raWU6Y29va2llXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENGSFRU
UENvb2tpZVN0b3JhZ2VEZWxldGVBbGxDb29raWVzKGNvb2tpZVN0b3JhZ2UpOwotfQotCi1zdGQ6
OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVzRm9yRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8m
IHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZy
YW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tp
ZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpCi17Ci0gICAgcmV0dXJuIGNvb2tpZXNGb3JTZXNzaW9u
KHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQs
IERvTm90SW5jbHVkZUhUVFBPbmx5LCBpbmNsdWRlU2VjdXJlQ29va2llcyk7Ci19Ci0KLXN0ZDo6
cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25z
dCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9u
YWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5j
bHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpCi17Ci0gICAgcmV0dXJuIGNv
b2tpZXNGb3JTZXNzaW9uKHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBm
cmFtZUlELCBwYWdlSUQsIEluY2x1ZGVIVFRQT25seSwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOwot
fQotCi1zdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IENvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFByb3h5JiBoZWFkZXJGaWVsZFByb3h5KQotewotICAgIHJldHVybiBjb29r
aWVzRm9yU2Vzc2lvbihzZXNzaW9uLCBoZWFkZXJGaWVsZFByb3h5LmZpcnN0UGFydHksIGhlYWRl
ckZpZWxkUHJveHkuc2FtZVNpdGVJbmZvLCBoZWFkZXJGaWVsZFByb3h5LnVybCwgaGVhZGVyRmll
bGRQcm94eS5mcmFtZUlELCBoZWFkZXJGaWVsZFByb3h5LnBhZ2VJRCwgSW5jbHVkZUhUVFBPbmx5
LCBoZWFkZXJGaWVsZFByb3h5LmluY2x1ZGVTZWN1cmVDb29raWVzKTsKLX0KLQotdm9pZCBzZXRD
b29raWVzRnJvbURPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0
IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0
IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFs
PHVpbnQ2NF90PiBwYWdlSUQsIGNvbnN0IFN0cmluZyYgY29va2llU3RyKQotewotICAgIEFTU0VS
VChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tp
ZXMpKTsKLQotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIC8vIDxyZGFy
Oi8vcHJvYmxlbS81NjMyODgzPiBPbiAxMC41LCBOU0hUVFBDb29raWVTdG9yYWdlIHdvdWxkIHN0
b3JlIGFuIGVtcHR5IGNvb2tpZSwKLSAgICAvLyB3aGljaCB3b3VsZCBiZSBzZW50IGFzICJDb29r
aWU6ID0iLgotICAgIGlmIChjb29raWVTdHIuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzMT4sIDxy
ZGFyOi8vNDQwOTAzND4KLSAgICAvLyBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzIGRv
ZXNuJ3QgcGFyc2UgY29va2llcyB3aXRob3V0IGEgdmFsdWUKLSAgICBTdHJpbmcgY29va2llU3Ry
aW5nID0gY29va2llU3RyLmNvbnRhaW5zKCc9JykgPyBjb29raWVTdHIgOiBjb29raWVTdHIgKyAi
PSI7Ci0KLSAgICBOU1VSTCAqY29va2llVVJMID0gdXJsOwotICAgIE5TRGljdGlvbmFyeSAqaGVh
ZGVyRmllbGRzID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpjb29raWVTdHJp
bmcgZm9yS2V5OkAiU2V0LUNvb2tpZSJdOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIE5TQXJy
YXkgKnVuZmlsdGVyZWRDb29raWVzID0gW05TSFRUUENvb2tpZSBfcGFyc2VkQ29va2llc1dpdGhS
ZXNwb25zZUhlYWRlckZpZWxkczpoZWFkZXJGaWVsZHMgZm9yVVJMOmNvb2tpZVVSTF07Ci0jZWxz
ZQotICAgIE5TQXJyYXkgKnVuZmlsdGVyZWRDb29raWVzID0gW05TSFRUUENvb2tpZSBjb29raWVz
V2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzOmhlYWRlckZpZWxkcyBmb3JVUkw6Y29va2llVVJMXTsK
LSNlbmRpZgotCi0gICAgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlcmVkQ29va2llcyA9IGZpbHRl
ckNvb2tpZXModW5maWx0ZXJlZENvb2tpZXMpOwotICAgIEFTU0VSVChbZmlsdGVyZWRDb29raWVz
LmdldCgpIGNvdW50XSA8PSAxKTsKLQotI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElU
SU9OSU5HKQotICAgIGlmIChzZXNzaW9uLnNob3VsZEJsb2NrQ29va2llcyhmaXJzdFBhcnR5LCB1
cmwpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgcGFydGl0aW9uID0gc2Vzc2lvbi5j
b29raWVTdG9yYWdlUGFydGl0aW9uKGZpcnN0UGFydHksIHVybCwgZnJhbWVJRCwgcGFnZUlEKTsK
LSAgICBpZiAoIXBhcnRpdGlvbi5pc0VtcHR5KCkpCi0gICAgICAgIGZpbHRlcmVkQ29va2llcyA9
IGFwcGx5UGFydGl0aW9uVG9Db29raWVzKHBhcnRpdGlvbiwgZmlsdGVyZWRDb29raWVzLmdldCgp
KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGZyYW1lSUQpOwotICAgIFVOVVNFRF9QQVJBTShw
YWdlSUQpOwotI2VuZGlmCi0KLSAgICBzZXRIVFRQQ29va2llc0ZvclVSTChzZXNzaW9uLmNvb2tp
ZVN0b3JhZ2UoKS5nZXQoKSwgZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29raWVVUkwsIGZpcnN0
UGFydHksIHNhbWVTaXRlSW5mbyk7Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwot
fQotCi1zdGF0aWMgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5IGh0dHBDb29raWVBY2NlcHRQb2xp
Y3koQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlKQotewotICAgIEFTU0VSVCho
YXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMp
KTsKLQotICAgIGlmICghY29va2llU3RvcmFnZSkKLSAgICAgICAgcmV0dXJuIFtbTlNIVFRQQ29v
a2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gY29va2llQWNjZXB0UG9saWN5XTsK
LQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxOU0hUVFBDb29raWVBY2NlcHRQb2xpY3k+KENGSFRU
UENvb2tpZVN0b3JhZ2VHZXRDb29raWVBY2NlcHRQb2xpY3koY29va2llU3RvcmFnZSkpOwotfQot
Ci1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lv
bikKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBOU0hUVFBDb29r
aWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5ID0gaHR0cENvb2tpZUFjY2VwdFBvbGlj
eShzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSk7Ci0gICAgcmV0dXJuIGNvb2tpZUFjY2Vw
dFBvbGljeSA9PSBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lBbHdheXMgfHwgY29va2llQWNjZXB0
UG9saWN5ID09IE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9t
YWluIHx8IGNvb2tpZUFjY2VwdFBvbGljeSA9PSBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lFeGNs
dXNpdmVseUZyb21NYWluRG9jdW1lbnREb21haW47Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBj
b25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0
aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwg
VmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0gICAgcmF3Q29va2llcy5jbGVhcigpOwot
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIE5TQXJyYXkgKmNvb2tpZXMg
PSBjb29raWVzRm9yVVJMKHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBm
cmFtZUlELCBwYWdlSUQpOwotICAgIE5TVUludGVnZXIgY291bnQgPSBbY29va2llcyBjb3VudF07
Ci0gICAgcmF3Q29va2llcy5yZXNlcnZlQ2FwYWNpdHkoY291bnQpOwotICAgIGZvciAoTlNVSW50
ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgTlNIVFRQQ29va2llICpjb29r
aWUgPSAoTlNIVFRQQ29va2llICopW2Nvb2tpZXMgb2JqZWN0QXRJbmRleDppXTsKLSAgICAgICAg
cmF3Q29va2llcy51bmNoZWNrZWRBcHBlbmQoeyBjb29raWUgfSk7Ci0gICAgfQotCi0gICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBkZWxl
dGVDb29raWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQotewotICAgIEFTU0VSVChoYXNQcm9jZXNz
UHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKLQotICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIFJldGFpblB0cjxDRkhUVFBDb29r
aWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gc2Vzc2lvbi5jb29raWVTdG9yYWdlKCk7Ci0g
ICAgTlNBcnJheSAqY29va2llcyA9IGh0dHBDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0
KCksIG5pbCwgc3RkOjpudWxsb3B0LCB1cmwpOwotCi0gICAgTlNTdHJpbmcgKmNvb2tpZU5hbWVT
dHJpbmcgPSBjb29raWVOYW1lOwotCi0gICAgTlNVSW50ZWdlciBjb3VudCA9IFtjb29raWVzIGNv
dW50XTsKLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAg
ICAgIE5TSFRUUENvb2tpZSAqY29va2llID0gKE5TSFRUUENvb2tpZSAqKVtjb29raWVzIG9iamVj
dEF0SW5kZXg6aV07Ci0gICAgICAgIGlmIChbW2Nvb2tpZSBuYW1lXSBpc0VxdWFsVG9TdHJpbmc6
Y29va2llTmFtZVN0cmluZ10pCi0gICAgICAgICAgICBkZWxldGVIVFRQQ29va2llKGNvb2tpZVN0
b3JhZ2UuZ2V0KCksIGNvb2tpZSk7Ci0gICAgfQotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKLX0KLQotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhjb25zdCBOZXR3b3JrU3Rv
cmFnZVNlc3Npb24mIHNlc3Npb24sIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQotewotICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIE5TQXJyYXkgKmNvb2tpZXMgPSBo
dHRwQ29va2llcyhzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSk7Ci0gICAgCi0gICAgZm9y
IChOU0hUVFBDb29raWUqIGNvb2tpZSBpbiBjb29raWVzKQotICAgICAgICBob3N0bmFtZXMuYWRk
KFtjb29raWUgZG9tYWluXSk7Ci0gICAgCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
LX0KLQotdm9pZCBkZWxldGVBbGxDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYg
c2Vzc2lvbikKLXsKLSAgICBkZWxldGVBbGxIVFRQQ29va2llcyhzZXNzaW9uLmNvb2tpZVN0b3Jh
Z2UoKS5nZXQoKSk7Ci19Ci0KLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhjb25zdCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBob3N0
bmFtZXMpCi17Ci0gICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVn
ZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOwotCi0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotCi0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3Jh
Z2UgPSBzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKTsKLSAgICBOU0FycmF5ICpjb29raWVzID0gaHR0
cENvb2tpZXMoY29va2llU3RvcmFnZS5nZXQoKSk7Ci0gICAgaWYgKCFjb29raWVzKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJldGFpblB0cjxOU0hUVFBD
b29raWU+Pj4gY29va2llc0J5RG9tYWluOwotICAgIGZvciAoTlNIVFRQQ29va2llKiBjb29raWUg
aW4gY29va2llcykgewotICAgICAgICBhdXRvJiBjb29raWVzID0gY29va2llc0J5RG9tYWluLmFk
ZChjb29raWUuZG9tYWluLCBWZWN0b3I8UmV0YWluUHRyPE5TSFRUUENvb2tpZT4+KCkpLml0ZXJh
dG9yLT52YWx1ZTsKLSAgICAgICAgY29va2llcy5hcHBlbmQoY29va2llKTsKLSAgICB9Ci0KLSAg
ICBmb3IgKGNvbnN0IGF1dG8mIGhvc3RuYW1lIDogaG9zdG5hbWVzKSB7Ci0gICAgICAgIGF1dG8g
aXQgPSBjb29raWVzQnlEb21haW4uZmluZChob3N0bmFtZSk7Ci0gICAgICAgIGlmIChpdCA9PSBj
b29raWVzQnlEb21haW4uZW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBm
b3IgKGF1dG8mIGNvb2tpZSA6IGl0LT52YWx1ZSkKLSAgICAgICAgICAgIGRlbGV0ZUhUVFBDb29r
aWUoY29va2llU3RvcmFnZS5nZXQoKSwgY29va2llLmdldCgpKTsKLSAgICB9Ci0KLSAgICBbc2Vz
c2lvbi5uc0Nvb2tpZVN0b3JhZ2UoKSBfc2F2ZUNvb2tpZXNdOwotCi0gICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKLX0KLQotdm9pZCBkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShj
b25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIFdhbGxUaW1lIHRpbWVQb2ludCkK
LXsKLSAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5B
Y2Nlc3NSYXdDb29raWVzKSk7Ci0KLSAgICBpZiAoIVtOU0hUVFBDb29raWVTdG9yYWdlIGluc3Rh
bmNlc1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxlY3RvcihyZW1vdmVDb29raWVzU2luY2VEYXRlOild
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU1RpbWVJbnRlcnZhbCB0aW1lSW50ZXJ2YWwgPSB0
aW1lUG9pbnQuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCk7Ci0gICAgTlNEYXRlICpkYXRl
ID0gW05TRGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlMTk3MDp0aW1lSW50ZXJ2YWxdOwot
Ci0gICAgYXV0byAqc3RvcmFnZSA9IHNlc3Npb24ubnNDb29raWVTdG9yYWdlKCk7Ci0KLSAgICBb
c3RvcmFnZSByZW1vdmVDb29raWVzU2luY2VEYXRlOmRhdGVdOwotICAgIFtzdG9yYWdlIF9zYXZl
Q29va2llc107Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvbWFjL1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzT3BlcmF0aW9uUXVldWVEZWxlZ2F0ZS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1dlYkNvcmVSZXNvdXJjZUhh
bmRsZUFzT3BlcmF0aW9uUXVldWVEZWxlZ2F0ZS5tbQppbmRleCA4ODc2MzEwMGFkNGU2NmQ5NDEy
MjY4YTdhOTFjMzlmZDM5OTAyNjMzLi5iM2U5MDdmZmRkZTI4NWY4YzgwM2Q2NzFhMjdmZjc0YTA5
MjFjMjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9X
ZWJDb3JlUmVzb3VyY2VIYW5kbGVBc09wZXJhdGlvblF1ZXVlRGVsZWdhdGUubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvV2ViQ29yZVJlc291cmNlSGFuZGxlQXNP
cGVyYXRpb25RdWV1ZURlbGVnYXRlLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaW1wb3J0ICJBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZS5oIgogI2ltcG9ydCAiQXV0aGVudGljYXRpb25NYWMuaCIKICNp
bXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW1wb3J0
ICJSZXNvdXJjZUhhbmRsZS5oIgogI2ltcG9ydCAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKICNp
bXBvcnQgIlJlc291cmNlUmVxdWVzdC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1ZWU4NzYxZjY1YjE1YWIwOWEyNGVkYjkwZWRhYTg1MjMzZDUzMWM3Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDI2MCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwOCBYYW4gTG9wZXogPHhh
bkBnbm9tZS5vcmc+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBTLkwuCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShT
T1VQKQotCi0jaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiQ29va2llUmVxdWVzdEhlYWRl
ckZpZWxkUHJveHkuaCIKLSNpbmNsdWRlICJDb29raWVzU3RyYXRlZ3kuaCIKLSNpbmNsdWRlICJH
VW5pcXVlUHRyU291cC5oIgotI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oIgotI2lu
Y2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIu
aCIKLSNpbmNsdWRlICJTb3VwTmV0d29ya1Nlc3Npb24uaCIKLSNpbmNsdWRlICJVUkwuaCIKLSNp
bmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBpbmxpbmUgYm9vbCBodHRwT25seUNvb2tpZUV4aXN0cyhjb25zdCBHU0xpc3QqIGNvb2tp
ZXMsIGNvbnN0IGdjaGFyKiBuYW1lLCBjb25zdCBnY2hhciogcGF0aCkKLXsKLSAgICBmb3IgKGNv
bnN0IEdTTGlzdCogaXRlciA9IGNvb2tpZXM7IGl0ZXI7IGl0ZXIgPSBnX3NsaXN0X25leHQoaXRl
cikpIHsKLSAgICAgICAgU291cENvb2tpZSogY29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tp
ZSo+KGl0ZXItPmRhdGEpOwotICAgICAgICBpZiAoIXN0cmNtcChzb3VwX2Nvb2tpZV9nZXRfbmFt
ZShjb29raWUpLCBuYW1lKQotICAgICAgICAgICAgJiYgIWdfc3RyY21wMChzb3VwX2Nvb2tpZV9n
ZXRfcGF0aChjb29raWUpLCBwYXRoKSkgewotICAgICAgICAgICAgaWYgKHNvdXBfY29va2llX2dl
dF9odHRwX29ubHkoY29va2llKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBzZXRDb29raWVzRnJvbURPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Np
b24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJM
JiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWlu
dDY0X3Q+IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBVTlVTRURfUEFSQU0o
ZnJhbWVJRCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7Ci0gICAgR1VuaXF1ZVB0cjxTb3Vw
VVJJPiBvcmlnaW4gPSB1cmwuY3JlYXRlU291cFVSSSgpOwotICAgIGlmICghb3JpZ2luKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IGZpcnN0UGFydHlVUkkgPSBm
aXJzdFBhcnR5LmNyZWF0ZVNvdXBVUkkoKTsKLSAgICBpZiAoIWZpcnN0UGFydHlVUkkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIEdldCBleGlzdGluZyBjb29raWVzIGZvciB0aGlzIG9yaWdp
bi4KLSAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKTsKLSAg
ICBHU0xpc3QqIGV4aXN0aW5nQ29va2llcyA9IHNvdXBfY29va2llX2phcl9nZXRfY29va2llX2xp
c3QoamFyLCBvcmlnaW4uZ2V0KCksIFRSVUUpOwotCi0gICAgZm9yIChhdXRvJiBjb29raWVTdHJp
bmcgOiB2YWx1ZS5zcGxpdCgnXG4nKSkgewotICAgICAgICBHVW5pcXVlUHRyPFNvdXBDb29raWU+
IGNvb2tpZShzb3VwX2Nvb2tpZV9wYXJzZShjb29raWVTdHJpbmcudXRmOCgpLmRhdGEoKSwgb3Jp
Z2luLmdldCgpKSk7Ci0gICAgICAgIGlmICghY29va2llKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb29raWUgaXMgbm90IGh0dHBPbmx5IHNpbmNl
IHN1Y2ggY29va2llcyBzaG91bGQgbm90IGJlIHNldCBmcm9tIEphdmFTY3JpcHQuCi0gICAgICAg
IGlmIChzb3VwX2Nvb2tpZV9nZXRfaHR0cF9vbmx5KGNvb2tpZS5nZXQoKSkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZG8gbm90IG92ZXJ3cml0ZSBo
dHRwT25seSBjb29raWVzIGZyb20gSmF2YVNjcmlwdC4KLSAgICAgICAgaWYgKGh0dHBPbmx5Q29v
a2llRXhpc3RzKGV4aXN0aW5nQ29va2llcywgc291cF9jb29raWVfZ2V0X25hbWUoY29va2llLmdl
dCgpKSwgc291cF9jb29raWVfZ2V0X3BhdGgoY29va2llLmdldCgpKSkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfYWRkX2Nvb2tpZV93aXRoX2ZpcnN0
X3BhcnR5KGphciwgZmlyc3RQYXJ0eVVSSS5nZXQoKSwgY29va2llLnJlbGVhc2UoKSk7Ci0gICAg
fQotCi0gICAgc291cF9jb29raWVzX2ZyZWUoZXhpc3RpbmdDb29raWVzKTsKLX0KLQotc3RhdGlj
IHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZXNGb3JTZXNzaW9uKGNvbnN0IE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiB1cmwsIGJvb2wgZm9ySFRUUEhlYWRl
ciwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpCi17Ci0gICAgR1Vu
aXF1ZVB0cjxTb3VwVVJJPiB1cmkgPSB1cmwuY3JlYXRlU291cFVSSSgpOwotICAgIGlmICghdXJp
KQotICAgICAgICByZXR1cm4geyB7IH0sIGZhbHNlIH07Ci0KLSAgICBHU0xpc3QqIGNvb2tpZXMg
PSBzb3VwX2Nvb2tpZV9qYXJfZ2V0X2Nvb2tpZV9saXN0KHNlc3Npb24uY29va2llU3RvcmFnZSgp
LCB1cmkuZ2V0KCksIGZvckhUVFBIZWFkZXIpOwotICAgIGJvb2wgZGlkQWNjZXNzU2VjdXJlQ29v
a2llcyA9IGZhbHNlOwotCi0gICAgLy8gbGlic291cCBzaG91bGQgb21pdCBzZWN1cmUgY29va2ll
cyBpdHNlbGYgaWYgdGhlIHByb3RvY29sIGlzIG5vdCBodHRwcy4KLSAgICBpZiAodXJsLnByb3Rv
Y29sSXMoImh0dHBzIikpIHsKLSAgICAgICAgR1NMaXN0KiBpdGVtID0gY29va2llczsKLSAgICAg
ICAgd2hpbGUgKGl0ZW0pIHsKLSAgICAgICAgICAgIGF1dG8gY29va2llID0gc3RhdGljX2Nhc3Q8
U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpOwotICAgICAgICAgICAgaWYgKHNvdXBfY29va2llX2dl
dF9zZWN1cmUoY29va2llKSkgewotICAgICAgICAgICAgICAgIGRpZEFjY2Vzc1NlY3VyZUNvb2tp
ZXMgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmIChpbmNsdWRlU2VjdXJlQ29va2llcyA9PSBJ
bmNsdWRlU2VjdXJlQ29va2llczo6Tm8pIHsKLSAgICAgICAgICAgICAgICAgICAgR1NMaXN0KiBu
ZXh0ID0gaXRlbS0+bmV4dDsKLSAgICAgICAgICAgICAgICAgICAgc291cF9jb29raWVfZnJlZShz
dGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSkpOwotICAgICAgICAgICAgICAgICAg
ICBjb29raWVzID0gZ19zbGlzdF9yZW1vdmVfbGluayhjb29raWVzLCBpdGVtKTsKLSAgICAgICAg
ICAgICAgICAgICAgaXRlbSA9IG5leHQ7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGl0ZW0gPSBpdGVt
LT5uZXh0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFjb29raWVzKQotICAgICAgICBy
ZXR1cm4geyB7IH0sIGZhbHNlIH07Ci0KLSAgICBHVW5pcXVlUHRyPGNoYXI+IGNvb2tpZUhlYWRl
cihzb3VwX2Nvb2tpZXNfdG9fY29va2llX2hlYWRlcihjb29raWVzKSk7Ci0gICAgc291cF9jb29r
aWVzX2ZyZWUoY29va2llcyk7Ci0KLSAgICByZXR1cm4geyBTdHJpbmc6OmZyb21VVEY4KGNvb2tp
ZUhlYWRlci5nZXQoKSksIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMgfTsKLX0KLQotc3RkOjpwYWly
PFN0cmluZywgYm9vbD4gY29va2llc0ZvckRPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24m
IHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29u
c3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9u
YWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNv
b2tpZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZpcnN0UGFydHkpOwotICAgIFVOVVNFRF9QQVJB
TShmcmFtZUlEKTsKLSAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKLSAgICByZXR1cm4gY29va2ll
c0ZvclNlc3Npb24oc2Vzc2lvbiwgdXJsLCBmYWxzZSwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOwot
fQotCi1zdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8
dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVk
ZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KGZpcnN0UGFydHkpOwotICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsKLSAgICBVTlVTRURfUEFS
QU0ocGFnZUlEKTsKLSAgICAvLyBTZWN1cmUgY29va2llcyB3aWxsIHN0aWxsIG9ubHkgYmUgaW5j
bHVkZWQgaWYgdXJsJ3MgcHJvdG9jb2wgaXMgaHR0cHMuCi0gICAgcmV0dXJuIGNvb2tpZXNGb3JT
ZXNzaW9uKHNlc3Npb24sIHVybCwgdHJ1ZSwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOwotfQotCi1z
dGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25z
dCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IENvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFByb3h5JiBoZWFkZXJGaWVsZFByb3h5KQotewotICAgIHJldHVybiBjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShzZXNzaW9uLCBoZWFkZXJGaWVsZFByb3h5LmZpcnN0UGFydHks
IGhlYWRlckZpZWxkUHJveHkuc2FtZVNpdGVJbmZvLCBoZWFkZXJGaWVsZFByb3h5LnVybCwgaGVh
ZGVyRmllbGRQcm94eS5mcmFtZUlELCBoZWFkZXJGaWVsZFByb3h5LnBhZ2VJRCwgaGVhZGVyRmll
bGRQcm94eS5pbmNsdWRlU2VjdXJlQ29va2llcyk7Ci19Ci0KLWJvb2wgY29va2llc0VuYWJsZWQo
Y29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uKQotewotICAgIGF1dG8gcG9saWN5
ID0gc291cF9jb29raWVfamFyX2dldF9hY2NlcHRfcG9saWN5KHNlc3Npb24uY29va2llU3RvcmFn
ZSgpKTsKLSAgICByZXR1cm4gcG9saWN5ID09IFNPVVBfQ09PS0lFX0pBUl9BQ0NFUFRfQUxXQVlT
IHx8IHBvbGljeSA9PSBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX05PX1RISVJEX1BBUlRZOwotfQot
Ci1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9u
LCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYg
dXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2
NF90PiBwYWdlSUQsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQotewotICAgIFVOVVNFRF9Q
QVJBTShmaXJzdFBhcnR5KTsKLSAgICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7Ci0gICAgVU5VU0VE
X1BBUkFNKHBhZ2VJRCk7Ci0gICAgcmF3Q29va2llcy5jbGVhcigpOwotICAgIEdVbmlxdWVQdHI8
U291cFVSST4gdXJpID0gdXJsLmNyZWF0ZVNvdXBVUkkoKTsKLSAgICBpZiAoIXVyaSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1VuaXF1ZVB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9j
b29raWVfamFyX2dldF9jb29raWVfbGlzdChzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKSwgdXJpLmdl
dCgpLCBUUlVFKSk7Ci0gICAgaWYgKCFjb29raWVzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBmb3IgKEdTTGlzdCogaXRlciA9IGNvb2tpZXMuZ2V0KCk7IGl0ZXI7IGl0ZXIgPSBnX3Ns
aXN0X25leHQoaXRlcikpIHsKLSAgICAgICAgU291cENvb2tpZSogc291cENvb2tpZSA9IHN0YXRp
Y19jYXN0PFNvdXBDb29raWUqPihpdGVyLT5kYXRhKTsKLSAgICAgICAgQ29va2llIGNvb2tpZTsK
LSAgICAgICAgY29va2llLm5hbWUgPSBTdHJpbmc6OmZyb21VVEY4KHNvdXBDb29raWUtPm5hbWUp
OwotICAgICAgICBjb29raWUudmFsdWUgPSBTdHJpbmc6OmZyb21VVEY4KHNvdXBDb29raWUtPnZh
bHVlKTsKLSAgICAgICAgY29va2llLmRvbWFpbiA9IFN0cmluZzo6ZnJvbVVURjgoc291cENvb2tp
ZS0+ZG9tYWluKTsKLSAgICAgICAgY29va2llLnBhdGggPSBTdHJpbmc6OmZyb21VVEY4KHNvdXBD
b29raWUtPnBhdGgpOwotICAgICAgICBjb29raWUuY3JlYXRlZCA9IDA7Ci0gICAgICAgIGNvb2tp
ZS5leHBpcmVzID0gc291cENvb2tpZS0+ZXhwaXJlcyA/IHN0YXRpY19jYXN0PGRvdWJsZT4oc291
cF9kYXRlX3RvX3RpbWVfdChzb3VwQ29va2llLT5leHBpcmVzKSkgKiAxMDAwIDogMDsKLSAgICAg
ICAgY29va2llLmh0dHBPbmx5ID0gc291cENvb2tpZS0+aHR0cF9vbmx5OwotICAgICAgICBjb29r
aWUuc2VjdXJlID0gc291cENvb2tpZS0+c2VjdXJlOwotICAgICAgICBjb29raWUuc2Vzc2lvbiA9
ICFzb3VwQ29va2llLT5leHBpcmVzOwotICAgICAgICByYXdDb29raWVzLmFwcGVuZChXVEZNb3Zl
KGNvb2tpZSkpOwotICAgICAgICBzb3VwX2Nvb2tpZV9mcmVlKHNvdXBDb29raWUpOwotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5h
bWUpCi17Ci0gICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiB1cmkgPSB1cmwuY3JlYXRlU291cFVSSSgp
OwotICAgIGlmICghdXJpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTb3VwQ29va2llSmFyKiBq
YXIgPSBzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKTsKLSAgICBHVW5pcXVlUHRyPEdTTGlzdD4gY29v
a2llcyhzb3VwX2Nvb2tpZV9qYXJfZ2V0X2Nvb2tpZV9saXN0KGphciwgdXJpLmdldCgpLCBUUlVF
KSk7Ci0gICAgaWYgKCFjb29raWVzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDU3RyaW5nIGNv
b2tpZU5hbWUgPSBuYW1lLnV0ZjgoKTsKLSAgICBib29sIHdhc0RlbGV0ZWQgPSBmYWxzZTsKLSAg
ICBmb3IgKEdTTGlzdCogaXRlciA9IGNvb2tpZXMuZ2V0KCk7IGl0ZXI7IGl0ZXIgPSBnX3NsaXN0
X25leHQoaXRlcikpIHsKLSAgICAgICAgU291cENvb2tpZSogY29va2llID0gc3RhdGljX2Nhc3Q8
U291cENvb2tpZSo+KGl0ZXItPmRhdGEpOwotICAgICAgICBpZiAoIXdhc0RlbGV0ZWQgJiYgY29v
a2llTmFtZSA9PSBjb29raWUtPm5hbWUpIHsKLSAgICAgICAgICAgIHNvdXBfY29va2llX2phcl9k
ZWxldGVfY29va2llKGphciwgY29va2llKTsKLSAgICAgICAgICAgIHdhc0RlbGV0ZWQgPSB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIHNvdXBfY29va2llX2ZyZWUoY29va2llKTsKLSAgICB9Ci19
Ci0KLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNz
aW9uJiBzZXNzaW9uLCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKLXsKLSAgICBHVW5pcXVl
UHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMoc2Vzc2lvbi5j
b29raWVTdG9yYWdlKCkpKTsKLSAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXMuZ2V0KCk7
IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsKLSAgICAgICAgU291cENvb2tpZSog
Y29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpOwotICAgICAgICBp
ZiAoY29va2llLT5kb21haW4pCi0gICAgICAgICAgICBob3N0bmFtZXMuYWRkKFN0cmluZzo6ZnJv
bVVURjgoY29va2llLT5kb21haW4pKTsKLSAgICAgICAgc291cF9jb29raWVfZnJlZShjb29raWUp
OwotICAgIH0KLX0KLQotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKGNvbnN0IE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1l
cykKLXsKLSAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBzZXNzaW9uLmNvb2tpZVN0b3Jh
Z2UoKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgaG9zdG5hbWUgOiBob3N0bmFtZXMpIHsKLSAg
ICAgICAgQ1N0cmluZyBob3N0TmFtZVN0cmluZyA9IGhvc3RuYW1lLnV0ZjgoKTsKLQotICAgICAg
ICBHVW5pcXVlUHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMo
Y29va2llSmFyKSk7Ci0gICAgICAgIGZvciAoR1NMaXN0KiBpdGVtID0gY29va2llcy5nZXQoKTsg
aXRlbTsgaXRlbSA9IGdfc2xpc3RfbmV4dChpdGVtKSkgewotICAgICAgICAgICAgU291cENvb2tp
ZSogY29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpOwotICAgICAg
ICAgICAgaWYgKHNvdXBfY29va2llX2RvbWFpbl9tYXRjaGVzKGNvb2tpZSwgaG9zdE5hbWVTdHJp
bmcuZGF0YSgpKSkKLSAgICAgICAgICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfZGVsZXRlX2Nvb2tp
ZShjb29raWVKYXIsIGNvb2tpZSk7Ci0gICAgICAgICAgICBzb3VwX2Nvb2tpZV9mcmVlKGNvb2tp
ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgZGVsZXRlQWxsQ29va2llcyhjb25zdCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24pCi17Ci0gICAgU291cENvb2tpZUphciogY29v
a2llSmFyID0gc2Vzc2lvbi5jb29raWVTdG9yYWdlKCk7Ci0gICAgR1VuaXF1ZVB0cjxHU0xpc3Q+
IGNvb2tpZXMoc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNvb2tpZUphcikpOwotICAgIGZv
ciAoR1NMaXN0KiBpdGVtID0gY29va2llcy5nZXQoKTsgaXRlbTsgaXRlbSA9IGdfc2xpc3RfbmV4
dChpdGVtKSkgewotICAgICAgICBTb3VwQ29va2llKiBjb29raWUgPSBzdGF0aWNfY2FzdDxTb3Vw
Q29va2llKj4oaXRlbS0+ZGF0YSk7Ci0gICAgICAgIHNvdXBfY29va2llX2phcl9kZWxldGVfY29v
a2llKGNvb2tpZUphciwgY29va2llKTsKLSAgICAgICAgc291cF9jb29raWVfZnJlZShjb29raWUp
OwotICAgIH0KLX0KLQotdm9pZCBkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShjb25zdCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIFdhbGxUaW1lIHRpbWVzdGFtcCkKLXsKLSAg
ICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGRlbGV0aW5nIGNvb2tpZXMgbW9kaWZpZWQgc2lu
Y2UgdGhlIGdpdmVuIHRpbWVzdGFtcC4gSXQgc2hvdWxkIHByb2JhYmx5IGJlIGFkZGVkIHRvIGxp
YnNvdXAuCi0gICAgaWYgKHRpbWVzdGFtcCA9PSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoMCkp
Ci0gICAgICAgIGRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbik7Ci0gICAgZWxzZQotICAgICAgICBn
X3dhcm5pbmcoIkRlbGV0aW5nIGNvb2tpZXMgbW9kaWZpZWQgc2luY2UgYSBnaXZlbiB0aW1lIHNw
YW4gaXMgbm90IHN1cHBvcnRlZCB5ZXQiKTsKLX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3JrU3RvcmFnZVNlc3Np
b25Tb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3Jr
U3RvcmFnZVNlc3Npb25Tb3VwLmNwcAppbmRleCA1ZTNjMjQ1YTNjNmM2MzZiN2U2MmQzMzYxYzNi
N2ZmM2ZjODJkNjAwLi5iM2Q3MWE0YjQwZTVkZWQwOWI2ODMyMDA4YmVmMDA2MWQxZmVkMTVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0
b3JhZ2VTZXNzaW9uU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAj
aWYgVVNFKFNPVVApCiAKICNpbmNsdWRlICJDb29raWUuaCIKKyNpbmNsdWRlICJDb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRQcm94eS5oIgogI2luY2x1ZGUgIkdVbmlxdWVQdHJTb3VwLmgiCiAjaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTb3VwTmV0d29ya1Nlc3Npb24uaCIK
QEAgLTI5MSw2ICsyOTIsNjIgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNhdmVDcmVk
ZW50aWFsVG9QZXJzaXN0ZW50U3RvcmFnZShjb25zdCBQcm90ZWN0aW9uU3AKICNlbmRpZgogfQog
Citib29sIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0VuYWJsZWQoKSBjb25zdAorewor
ICAgIGF1dG8gcG9saWN5ID0gc291cF9jb29raWVfamFyX2dldF9hY2NlcHRfcG9saWN5KGNvb2tp
ZVN0b3JhZ2UoKSk7CisgICAgcmV0dXJuIHBvbGljeSA9PSBTT1VQX0NPT0tJRV9KQVJfQUNDRVBU
X0FMV0FZUyB8fCBwb2xpY3kgPT0gU09VUF9DT09LSUVfSkFSX0FDQ0VQVF9OT19USElSRF9QQVJU
WTsKK30KKworc3RhdGljIGlubGluZSBib29sIGh0dHBPbmx5Q29va2llRXhpc3RzKGNvbnN0IEdT
TGlzdCogY29va2llcywgY29uc3QgZ2NoYXIqIG5hbWUsIGNvbnN0IGdjaGFyKiBwYXRoKQorewor
ICAgIGZvciAoY29uc3QgR1NMaXN0KiBpdGVyID0gY29va2llczsgaXRlcjsgaXRlciA9IGdfc2xp
c3RfbmV4dChpdGVyKSkgeworICAgICAgICBTb3VwQ29va2llKiBjb29raWUgPSBzdGF0aWNfY2Fz
dDxTb3VwQ29va2llKj4oaXRlci0+ZGF0YSk7CisgICAgICAgIGlmICghc3RyY21wKHNvdXBfY29v
a2llX2dldF9uYW1lKGNvb2tpZSksIG5hbWUpIAorICAgICAgICAgICAgJiYgIWdfc3RyY21wMChz
b3VwX2Nvb2tpZV9nZXRfcGF0aChjb29raWUpLCBwYXRoKSkgeworICAgICAgICAgICAgaWYgKHNv
dXBfY29va2llX2dldF9odHRwX29ubHkoY29va2llKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXNGcm9tRE9N
KGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiB1
cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0
X3Q+IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKK3sKKyAgICBVTlVTRURfUEFS
QU0oZnJhbWVJRCk7CisgICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7CisgICAgR1VuaXF1ZVB0cjxT
b3VwVVJJPiBvcmlnaW4gPSB1cmwuY3JlYXRlU291cFVSSSgpOworICAgIGlmICghb3JpZ2luKQor
ICAgICAgICByZXR1cm47CisKKyAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IGZpcnN0UGFydHlVUkkg
PSBmaXJzdFBhcnR5LmNyZWF0ZVNvdXBVUkkoKTsKKyAgICBpZiAoIWZpcnN0UGFydHlVUkkpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIEdldCBleGlzdGluZyBjb29raWVzIGZvciB0aGlzIG9y
aWdpbi4KKyAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBjb29raWVTdG9yYWdlKCk7CisgICAgR1NM
aXN0KiBleGlzdGluZ0Nvb2tpZXMgPSBzb3VwX2Nvb2tpZV9qYXJfZ2V0X2Nvb2tpZV9saXN0KGph
ciwgb3JpZ2luLmdldCgpLCBUUlVFKTsKKworICAgIGZvciAoYXV0byYgY29va2llU3RyaW5nIDog
dmFsdWUuc3BsaXQoJ1xuJykpIHsKKyAgICAgICAgR1VuaXF1ZVB0cjxTb3VwQ29va2llPiBjb29r
aWUoc291cF9jb29raWVfcGFyc2UoY29va2llU3RyaW5nLnV0ZjgoKS5kYXRhKCksIG9yaWdpbi5n
ZXQoKSkpOworCisgICAgICAgIGlmICghY29va2llKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb29raWUgaXMgbm90IGh0dHBPbmx5IHNpbmNlIHN1
Y2ggY29va2llcyBzaG91bGQgbm90IGJlIHNldCBmcm9tIEphdmFTY3JpcHQuCisgICAgICAgIGlm
IChzb3VwX2Nvb2tpZV9nZXRfaHR0cF9vbmx5KGNvb2tpZS5nZXQoKSkpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZG8gbm90IG92ZXJ3cml0ZSBodHRw
T25seSBjb29raWVzIGZyb20gSmF2YVNjcmlwdC4KKyAgICAgICAgaWYgKGh0dHBPbmx5Q29va2ll
RXhpc3RzKGV4aXN0aW5nQ29va2llcywgc291cF9jb29raWVfZ2V0X25hbWUoY29va2llLmdldCgp
KSwgc291cF9jb29raWVfZ2V0X3BhdGgoY29va2llLmdldCgpKSkpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfYWRkX2Nvb2tpZV93aXRoX2ZpcnN0X3Bh
cnR5KGphciwgZmlyc3RQYXJ0eVVSSS5nZXQoKSwgY29va2llLnJlbGVhc2UoKSk7CisgICAgfQor
CisgICAgc291cF9jb29raWVzX2ZyZWUoZXhpc3RpbmdDb29raWVzKTsKK30KKwogdm9pZCBOZXR3
b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXMoY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tp
ZXMsIGNvbnN0IFVSTCYsIGNvbnN0IFVSTCYpCiB7CiAgICAgZm9yIChhdXRvIGNvb2tpZSA6IGNv
b2tpZXMpCkBAIC0zMDgsNiArMzY1LDc3IEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpk
ZWxldGVDb29raWUoY29uc3QgQ29va2llJiBjb29raWUpCiAgICAgc291cF9jb29raWVfamFyX2Rl
bGV0ZV9jb29raWUoY29va2llU3RvcmFnZSgpLCB0YXJnZXRDb29raWUuZ2V0KCkpOwogfQogCit2
b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llKGNvbnN0IFVSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiB1cmkg
PSB1cmwuY3JlYXRlU291cFVSSSgpOworICAgIGlmICghdXJpKQorICAgICAgICByZXR1cm47CisK
KyAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBjb29raWVTdG9yYWdlKCk7CisgICAgR1VuaXF1ZVB0
cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFyX2dldF9jb29raWVfbGlzdChqYXIsIHVy
aS5nZXQoKSwgVFJVRSkpOworICAgIGlmICghY29va2llcykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQ1N0cmluZyBjb29raWVOYW1lID0gbmFtZS51dGY4KCk7CisgICAgYm9vbCB3YXNEZWxldGVk
ID0gZmFsc2U7CisgICAgZm9yIChHU0xpc3QqIGl0ZXIgPSBjb29raWVzLmdldCgpOyBpdGVyOyBp
dGVyID0gZ19zbGlzdF9uZXh0KGl0ZXIpKSB7CisgICAgICAgIFNvdXBDb29raWUqIGNvb2tpZSA9
IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVyLT5kYXRhKTsKKyAgICAgICAgaWYgKCF3YXNE
ZWxldGVkICYmIGNvb2tpZU5hbWUgPT0gY29va2llLT5uYW1lKSB7CisgICAgICAgICAgICBzb3Vw
X2Nvb2tpZV9qYXJfZGVsZXRlX2Nvb2tpZShqYXIsIGNvb2tpZSk7CisgICAgICAgICAgICB3YXNE
ZWxldGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBzb3VwX2Nvb2tpZV9mcmVlKGNvb2tp
ZSk7CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29v
a2llcygpCit7CisgICAgU291cENvb2tpZUphciogY29va2llSmFyID0gY29va2llU3RvcmFnZSgp
OworICAgIEdVbmlxdWVQdHI8R1NMaXN0PiBjb29raWVzKHNvdXBfY29va2llX2phcl9hbGxfY29v
a2llcyhjb29raWVKYXIpKTsKKyAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXMuZ2V0KCk7
IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsKKyAgICAgICAgU291cENvb2tpZSog
Y29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpOworICAgICAgICBz
b3VwX2Nvb2tpZV9qYXJfZGVsZXRlX2Nvb2tpZShjb29raWVKYXIsIGNvb2tpZSk7CisgICAgICAg
IHNvdXBfY29va2llX2ZyZWUoY29va2llKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShXYWxsVGltZSB0aW1lc3Rh
bXApCit7CisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBkZWxldGluZyBjb29raWVzIG1v
ZGlmaWVkIHNpbmNlIHRoZSBnaXZlbiB0aW1lc3RhbXAuIEl0IHNob3VsZCBwcm9iYWJseSBiZSBh
ZGRlZCB0byBsaWJzb3VwLgorICAgIGlmICh0aW1lc3RhbXAgPT0gV2FsbFRpbWU6OmZyb21SYXdT
ZWNvbmRzKDApKQorICAgICAgICBkZWxldGVBbGxDb29raWVzKCk7CisgICAgZWxzZQorICAgICAg
ICBnX3dhcm5pbmcoIkRlbGV0aW5nIGNvb2tpZXMgbW9kaWZpZWQgc2luY2UgYSBnaXZlbiB0aW1l
IHNwYW4gaXMgbm90IHN1cHBvcnRlZCB5ZXQiKTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNl
c3Npb246OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGhv
c3RuYW1lcykKK3sKKyAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBjb29raWVTdG9yYWdl
KCk7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGhvc3RuYW1lIDogaG9zdG5hbWVzKSB7CisgICAg
ICAgIENTdHJpbmcgaG9zdE5hbWVTdHJpbmcgPSBob3N0bmFtZS51dGY4KCk7CisKKyAgICAgICAg
R1VuaXF1ZVB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNv
b2tpZUphcikpOworICAgICAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXMuZ2V0KCk7IGl0
ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsKKyAgICAgICAgICAgIFNvdXBDb29raWUq
IGNvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5kYXRhKTsKKyAgICAgICAg
ICAgIGlmIChzb3VwX2Nvb2tpZV9kb21haW5fbWF0Y2hlcyhjb29raWUsIGhvc3ROYW1lU3RyaW5n
LmRhdGEoKSkpCisgICAgICAgICAgICAgICAgc291cF9jb29raWVfamFyX2RlbGV0ZV9jb29raWUo
Y29va2llSmFyLCBjb29raWUpOworICAgICAgICAgICAgc291cF9jb29raWVfZnJlZShjb29raWUp
OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0
SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit7CisgICAg
R1VuaXF1ZVB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNv
b2tpZVN0b3JhZ2UoKSkpOworICAgIGZvciAoR1NMaXN0KiBpdGVtID0gY29va2llcy5nZXQoKTsg
aXRlbTsgaXRlbSA9IGdfc2xpc3RfbmV4dChpdGVtKSkgeworICAgICAgICBTb3VwQ29va2llKiBj
b29raWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSk7CisgICAgICAgIGlm
IChjb29raWUtPmRvbWFpbikKKyAgICAgICAgICAgIGhvc3RuYW1lcy5hZGQoU3RyaW5nOjpmcm9t
VVRGOChjb29raWUtPmRvbWFpbikpOworICAgICAgICBzb3VwX2Nvb2tpZV9mcmVlKGNvb2tpZSk7
CisgICAgfQorfQorCiBWZWN0b3I8Q29va2llPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEFs
bENvb2tpZXMoKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIFdLMiB0byB1c2UuCkBA
IC0zMzAsNiArNDU4LDk4IEBAIFZlY3RvcjxDb29raWU+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6
Z2V0Q29va2llcyhjb25zdCBVUkwmIHVybCkKICAgICByZXR1cm4gY29va2llczsKIH0KIAorYm9v
bCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldFJhd0Nvb2tpZXMoY29uc3QgVVJMJiBmaXJzdFBh
cnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1
aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBWZWN0b3I8
Q29va2llPiYgcmF3Q29va2llcykgY29uc3QKK3sKKyAgICBVTlVTRURfUEFSQU0oZmlyc3RQYXJ0
eSk7CisgICAgVU5VU0VEX1BBUkFNKGZyYW1lSUQpOworICAgIFVOVVNFRF9QQVJBTShwYWdlSUQp
OworICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKKyAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IHVyaSA9
IHVybC5jcmVhdGVTb3VwVVJJKCk7CisgICAgaWYgKCF1cmkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIEdVbmlxdWVQdHI8R1NMaXN0PiBjb29raWVzKHNvdXBfY29va2llX2phcl9nZXRf
Y29va2llX2xpc3QoY29va2llU3RvcmFnZSgpLCB1cmkuZ2V0KCksIFRSVUUpKTsKKyAgICBpZiAo
IWNvb2tpZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoR1NMaXN0KiBpdGVy
ID0gY29va2llcy5nZXQoKTsgaXRlcjsgaXRlciA9IGdfc2xpc3RfbmV4dChpdGVyKSkgeworICAg
ICAgICBTb3VwQ29va2llKiBzb3VwQ29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0
ZXItPmRhdGEpOworICAgICAgICBDb29raWUgY29va2llOworICAgICAgICBjb29raWUubmFtZSA9
IFN0cmluZzo6ZnJvbVVURjgoc291cENvb2tpZS0+bmFtZSk7CisgICAgICAgIGNvb2tpZS52YWx1
ZSA9IFN0cmluZzo6ZnJvbVVURjgoc291cENvb2tpZS0+dmFsdWUpOworICAgICAgICBjb29raWUu
ZG9tYWluID0gU3RyaW5nOjpmcm9tVVRGOChzb3VwQ29va2llLT5kb21haW4pOworICAgICAgICBj
b29raWUucGF0aCA9IFN0cmluZzo6ZnJvbVVURjgoc291cENvb2tpZS0+cGF0aCk7CisgICAgICAg
IGNvb2tpZS5jcmVhdGVkID0gMDsKKyAgICAgICAgY29va2llLmV4cGlyZXMgPSBzb3VwQ29va2ll
LT5leHBpcmVzID8gc3RhdGljX2Nhc3Q8ZG91YmxlPihzb3VwX2RhdGVfdG9fdGltZV90KHNvdXBD
b29raWUtPmV4cGlyZXMpKSAqIDEwMDAgOiAwOworICAgICAgICBjb29raWUuaHR0cE9ubHkgPSBz
b3VwQ29va2llLT5odHRwX29ubHk7CisgICAgICAgIGNvb2tpZS5zZWN1cmUgPSBzb3VwQ29va2ll
LT5zZWN1cmU7CisgICAgICAgIGNvb2tpZS5zZXNzaW9uID0gIXNvdXBDb29raWUtPmV4cGlyZXM7
CisgICAgICAgIHJhd0Nvb2tpZXMuYXBwZW5kKFdURk1vdmUoY29va2llKSk7CisgICAgICAgIHNv
dXBfY29va2llX2ZyZWUoc291cENvb2tpZSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3N0YXRpYyBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVzRm9yU2Vzc2lvbihjb25z
dCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgdXJsLCBib29sIGZv
ckhUVFBIZWFkZXIsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKQor
eworICAgIEdVbmlxdWVQdHI8U291cFVSST4gdXJpID0gdXJsLmNyZWF0ZVNvdXBVUkkoKTsKKyAg
ICBpZiAoIXVyaSkKKyAgICAgICAgcmV0dXJuIHsgeyB9LCBmYWxzZSB9OworCisgICAgR1NMaXN0
KiBjb29raWVzID0gc291cF9jb29raWVfamFyX2dldF9jb29raWVfbGlzdChzZXNzaW9uLmNvb2tp
ZVN0b3JhZ2UoKSwgdXJpLmdldCgpLCBmb3JIVFRQSGVhZGVyKTsKKyAgICBib29sIGRpZEFjY2Vz
c1NlY3VyZUNvb2tpZXMgPSBmYWxzZTsKKworICAgIC8vIGxpYnNvdXAgc2hvdWxkIG9taXQgc2Vj
dXJlIGNvb2tpZXMgaXRzZWxmIGlmIHRoZSBwcm90b2NvbCBpcyBub3QgaHR0cHMuCisgICAgaWYg
KHVybC5wcm90b2NvbElzKCJodHRwcyIpKSB7CisgICAgICAgIEdTTGlzdCogaXRlbSA9IGNvb2tp
ZXM7CisgICAgICAgIHdoaWxlIChpdGVtKSB7CisgICAgICAgICAgICBhdXRvIGNvb2tpZSA9IHN0
YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5kYXRhKTsKKyAgICAgICAgICAgIGlmIChzb3Vw
X2Nvb2tpZV9nZXRfc2VjdXJlKGNvb2tpZSkpIHsKKyAgICAgICAgICAgICAgICBkaWRBY2Nlc3NT
ZWN1cmVDb29raWVzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZVNlY3VyZUNv
b2tpZXMgPT0gSW5jbHVkZVNlY3VyZUNvb2tpZXM6Ok5vKSB7CisgICAgICAgICAgICAgICAgICAg
IEdTTGlzdCogbmV4dCA9IGl0ZW0tPm5leHQ7CisgICAgICAgICAgICAgICAgICAgIHNvdXBfY29v
a2llX2ZyZWUoc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpKTsKKyAgICAgICAg
ICAgICAgICAgICAgY29va2llcyA9IGdfc2xpc3RfcmVtb3ZlX2xpbmsoY29va2llcywgaXRlbSk7
CisgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBuZXh0OworICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
dGVtID0gaXRlbS0+bmV4dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghY29va2llcykK
KyAgICAgICAgcmV0dXJuIHsgeyB9LCBmYWxzZSB9OworCisgICAgR1VuaXF1ZVB0cjxjaGFyPiBj
b29raWVIZWFkZXIoc291cF9jb29raWVzX3RvX2Nvb2tpZV9oZWFkZXIoY29va2llcykpOworICAg
IHNvdXBfY29va2llc19mcmVlKGNvb2tpZXMpOworCisgICAgcmV0dXJuIHsgU3RyaW5nOjpmcm9t
VVRGOChjb29raWVIZWFkZXIuZ2V0KCkpLCBkaWRBY2Nlc3NTZWN1cmVDb29raWVzIH07Cit9CisK
K3N0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0Zv
ckRPTShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVS
TCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVp
bnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVz
KSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTShmaXJzdFBhcnR5KTsKKyAgICBVTlVTRURfUEFS
QU0oZnJhbWVJRCk7CisgICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7CisgICAgcmV0dXJuIGNvb2tp
ZXNGb3JTZXNzaW9uKCp0aGlzLCB1cmwsIGZhbHNlLCBpbmNsdWRlU2VjdXJlQ29va2llcyk7Cit9
CisKK3N0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1l
U2l0ZUluZm8mLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJ
RCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBp
bmNsdWRlU2VjdXJlQ29va2llcykgY29uc3QKK3sKKyAgICBVTlVTRURfUEFSQU0oZmlyc3RQYXJ0
eSk7CisgICAgVU5VU0VEX1BBUkFNKGZyYW1lSUQpOworICAgIFVOVVNFRF9QQVJBTShwYWdlSUQp
OworICAgIC8vIFNlY3VyZSBjb29raWVzIHdpbGwgc3RpbGwgb25seSBiZSBpbmNsdWRlZCBpZiB1
cmwncyBwcm90b2NvbCBpcyBodHRwcy4KKyAgICByZXR1cm4gY29va2llc0ZvclNlc3Npb24oKnRo
aXMsIHVybCwgdHJ1ZSwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOworfQorCitzdGQ6OnBhaXI8U3Ry
aW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IENvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5JiBoZWFkZXJGaWVsZFBy
b3h5KSBjb25zdAoreworICAgIHJldHVybiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSho
ZWFkZXJGaWVsZFByb3h5LmZpcnN0UGFydHksIGhlYWRlckZpZWxkUHJveHkuc2FtZVNpdGVJbmZv
LCBoZWFkZXJGaWVsZFByb3h5LnVybCwgaGVhZGVyRmllbGRQcm94eS5mcmFtZUlELCBoZWFkZXJG
aWVsZFByb3h5LnBhZ2VJRCwgaGVhZGVyRmllbGRQcm94eS5pbmNsdWRlU2VjdXJlQ29va2llcyk7
Cit9CisKIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpmbHVzaENvb2tpZVN0b3JlKCkKIHsK
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBXSzIgdG8gdXNlLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3Bw
CmluZGV4IGZlOTJiYzFjOThmZmYzY2Y3NjAzODQyNmNiOTc5NWMxY2VlODgyMDUuLjBiYjE0OWNh
MTU1NTBlMWE5YzhkM2U0NjlhYjI2Y2U2NDZiOGNiYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKQEAg
LTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvQ29va2llU3RvcmFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvVVJMLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC02MCw3ICs1OSw3IEBAIHZvaWQgV2ViQ29va2ll
TWFuYWdlcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBDYWxsYmFjCiB7CiAgICAgSGFzaFNldDxTdHJpbmc+IGhvc3RuYW1lczsKICAgICBpZiAoYXV0
byogc3RvcmFnZVNlc3Npb24gPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3JhZ2VTZXNzaW9u
KHNlc3Npb25JRCkpCi0gICAgICAgIFdlYkNvcmU6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKCpz
dG9yYWdlU2Vzc2lvbiwgaG9zdG5hbWVzKTsKKyAgICAgICAgc3RvcmFnZVNlc3Npb24tPmdldEhv
c3RuYW1lc1dpdGhDb29raWVzKGhvc3RuYW1lcyk7CiAKICAgICBtX3Byb2Nlc3Muc2VuZChNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjpEaWRHZXRIb3N0bmFtZXNXaXRoQ29va2llcyhj
b3B5VG9WZWN0b3IoaG9zdG5hbWVzKSwgY2FsbGJhY2tJRCksIDApOwogfQpAQCAtNjgsMTQgKzY3
LDE0IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDYWxsYmFjCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmRl
bGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0
cmluZyYgaG9zdG5hbWUpCiB7CiAgICAgaWYgKGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gTmV0d29y
a1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQotICAgICAgICBXZWJD
b3JlOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKCpzdG9yYWdlU2Vzc2lvbiwgeyBob3N0bmFt
ZSB9KTsKKyAgICAgICAgc3RvcmFnZVNlc3Npb24tPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMo
eyBob3N0bmFtZSB9KTsKIH0KIAogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmRlbGV0ZUFsbENv
b2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewogICAgIGlmIChhdXRvKiBzdG9yYWdl
U2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFnZVNlc3Npb24oc2Vzc2lvbklE
KSkKLSAgICAgICAgV2ViQ29yZTo6ZGVsZXRlQWxsQ29va2llcygqc3RvcmFnZVNlc3Npb24pOwor
ICAgICAgICBzdG9yYWdlU2Vzc2lvbi0+ZGVsZXRlQWxsQ29va2llcygpOwogfQogCiB2b2lkIFdl
YkNvb2tpZU1hbmFnZXI6OmRlbGV0ZUNvb2tpZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IENvb2tpZSYgY29va2llLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCkBAIC04OSw3ICs4OCw3
IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgY29uc3QgQ29va2llJiBjb29rCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmRlbGV0
ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2FsbFRp
bWUgdGltZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewogICAgIGlmIChhdXRvKiBzdG9yYWdl
U2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFnZVNlc3Npb24oc2Vzc2lvbklE
KSkKLSAgICAgICAgV2ViQ29yZTo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoKnN0b3Jh
Z2VTZXNzaW9uLCB0aW1lKTsKKyAgICAgICAgc3RvcmFnZVNlc3Npb24tPmRlbGV0ZUFsbENvb2tp
ZXNNb2RpZmllZFNpbmNlKHRpbWUpOwogCiAgICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eTo6RGlkRGVsZXRlQ29va2llcyhjYWxsYmFja0lEKSwgMCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IGEzMWYxNzEyMTdlNDUwNzNlMzU5NjU4
Mzg1ODlkMWY0MjVkMWVmNjEuLjA4Mzg5MzA4NTJiMTJmYTdiMTQwNmNiYzQwZTcxZDc2OWU4NDll
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC01Miw3ICs1Miw2IEBACiAjaW5j
bHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29va2llSmFyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
ZXNvdXJjZUxvYWRlck9wdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVz
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2FtZVNpdGVJbmZvLmg+CkBAIC0zNzksNyArMzc4LDcg
QEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y29udmVydE1haW5SZXNvdXJj
ZUxvYWRUb0Rvd25sb2FkKFBBTDo6U2Vzc2kKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OmNvb2tpZXNGb3JET00oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwm
IGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwm
IHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50
NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcywg
U3RyaW5nJiBjb29raWVTdHJpbmcsIGJvb2wmIHNlY3VyZUNvb2tpZXNBY2Nlc3NlZCkKIHsKICAg
ICBhdXRvJiBuZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQp
OwotICAgIHN0ZDo6dGllKGNvb2tpZVN0cmluZywgc2VjdXJlQ29va2llc0FjY2Vzc2VkKSA9IFdl
YkNvcmU6OmNvb2tpZXNGb3JET00obmV0d29ya1N0b3JhZ2VTZXNzaW9uLCBmaXJzdFBhcnR5LCBz
YW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNsdWRlU2VjdXJlQ29va2llcyk7
CisgICAgc3RkOjp0aWUoY29va2llU3RyaW5nLCBzZWN1cmVDb29raWVzQWNjZXNzZWQpID0gbmV0
d29ya1N0b3JhZ2VTZXNzaW9uLmNvb2tpZXNGb3JET00oZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZv
LCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOwogI2lmIEhBVkUo
Q0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKSAmJiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
ICAgICBpZiAoTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLnNob3VsZExvZ0Nvb2tpZUluZm9y
bWF0aW9uKCkpCiAgICAgICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6bG9nQ29va2llSW5mb3Jt
YXRpb24oIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb29raWVzRm9yRE9NIiwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4odGhpcyksIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiwg
Zmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGVtcHR5U3RyaW5nKCksIGZyYW1lSUQsIHBh
Z2VJRCwgc3RkOjpudWxsb3B0KTsKQEAgLTM4OSw3ICszODgsNyBAQCB2b2lkIE5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpjb29raWVzRm9yRE9NKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29ucwogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c2V0Q29va2llc0Zy
b21ET00oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNv
bnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRp
b25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBj
b25zdCBTdHJpbmcmIGNvb2tpZVN0cmluZykKIHsKICAgICBhdXRvJiBuZXR3b3JrU3RvcmFnZVNl
c3Npb24gPSBzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIFdlYkNvcmU6OnNldENvb2tp
ZXNGcm9tRE9NKG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiwgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZv
LCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgY29va2llU3RyaW5nKTsKKyAgICBuZXR3b3JrU3RvcmFn
ZVNlc3Npb24uc2V0Q29va2llc0Zyb21ET00oZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmws
IGZyYW1lSUQsIHBhZ2VJRCwgY29va2llU3RyaW5nKTsKICNpZiBIQVZFKENGTkVUV09SS19TVE9S
QUdFX1BBUlRJVElPTklORykgJiYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECiAgICAgaWYgKE5ldHdv
cmtQcm9jZXNzOjpzaW5nbGV0b24oKS5zaG91bGRMb2dDb29raWVJbmZvcm1hdGlvbigpKQogICAg
ICAgICBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmxvZ0Nvb2tpZUluZm9ybWF0aW9uKCJOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c2V0Q29va2llc0Zyb21ET00iLCByZWludGVycHJldF9j
YXN0PGNvbnN0IHZvaWQqPih0aGlzKSwgbmV0d29ya1N0b3JhZ2VTZXNzaW9uLCBmaXJzdFBhcnR5
LCBzYW1lU2l0ZUluZm8sIHVybCwgZW1wdHlTdHJpbmcoKSwgZnJhbWVJRCwgcGFnZUlELCBzdGQ6
Om51bGxvcHQpOwpAQCAtMzk4LDIyICszOTcsMjIgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6c2V0Q29va2llc0Zyb21ET00oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELAog
CiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb29raWVzRW5hYmxlZChQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIGJvb2wmIHJlc3VsdCkKIHsKLSAgICByZXN1bHQgPSBXZWJD
b3JlOjpjb29raWVzRW5hYmxlZChzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKTsKKyAgICByZXN1
bHQgPSBzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpLmNvb2tpZXNFbmFibGVkKCk7CiB9CiAKIHZv
aWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBj
b25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0
aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwg
SW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMsIFN0cmluZyYgY29va2ll
U3RyaW5nLCBib29sJiBzZWN1cmVDb29raWVzQWNjZXNzZWQpCiB7Ci0gICAgc3RkOjp0aWUoY29v
a2llU3RyaW5nLCBzZWN1cmVDb29raWVzQWNjZXNzZWQpID0gV2ViQ29yZTo6Y29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKSwgZmlyc3RQYXJ0eSwg
c2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMp
OworICAgIHN0ZDo6dGllKGNvb2tpZVN0cmluZywgc2VjdXJlQ29va2llc0FjY2Vzc2VkKSA9IHN0
b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkuY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoZmly
c3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVkZVNlY3Vy
ZUNvb2tpZXMpOwogfQogCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpnZXRS
YXdDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiBmaXJzdFBhcnR5
LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6
b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJ
RCwgVmVjdG9yPENvb2tpZT4mIHJlc3VsdCkKIHsKLSAgICBXZWJDb3JlOjpnZXRSYXdDb29raWVz
KHN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCksIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJs
LCBmcmFtZUlELCBwYWdlSUQsIHJlc3VsdCk7CisgICAgc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklE
KS5nZXRSYXdDb29raWVzKGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBw
YWdlSUQsIHJlc3VsdCk7CiB9CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OmRlbGV0ZUNvb2tpZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFVSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCiB7Ci0gICAgV2ViQ29yZTo6ZGVsZXRlQ29va2llKHN0
b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCksIHVybCwgY29va2llTmFtZSk7CisgICAgc3RvcmFnZVNl
c3Npb24oc2Vzc2lvbklEKS5kZWxldGVDb29raWUodXJsLCBjb29raWVOYW1lKTsKIH0KIAogdm9p
ZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVnaXN0ZXJGaWxlQmxvYlVSTChjb25z
dCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUm
JiBleHRlbnNpb25IYW5kbGUsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDhiZmVmZTM2
MmE4NWJmMjU5NDg0NWFjMjhmNjQwOTMzY2E2ODk2NjkuLjVhMTI0YzhjYzhlYWI3OTc4MTIyMmNh
ZWFkNGI4NzNiMjhiOWIzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwCkBAIC02NSw3ICs2NSw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9N
SU1FVHlwZVJlZ2lzdHJ5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RhdGVOb3RpZmll
ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3Vy
Y2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SdW50aW1lQXBwbGljYXRpb25DaGVja3Mu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1NjaGVtZVJlZ2lzdHJ5Lmg+CkBAIC01MzMsNyArNTMyLDcg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXQKIAogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNv
bnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcykpIHsKICAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtTdG9yYWdlU2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFnZVNlc3Np
b24oc2Vzc2lvbklEKSkKLSAgICAgICAgICAgIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKCpuZXR3
b3JrU3RvcmFnZVNlc3Npb24sIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5ob3N0
TmFtZXNXaXRoQ29va2llcyk7CisgICAgICAgICAgICBuZXR3b3JrU3RvcmFnZVNlc3Npb24tPmdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5o
b3N0TmFtZXNXaXRoQ29va2llcyk7CiAgICAgfQogCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMu
Y29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpDcmVkZW50aWFscykpIHsKQEAgLTU2NSw3ICs1NjQs
NyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaQogCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMu
Y29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpDb29raWVzKSkgewogICAgICAgICBpZiAoYXV0byog
bmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vz
c2lvbihzZXNzaW9uSUQpKQotICAgICAgICAgICAgZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2lu
Y2UoKm5ldHdvcmtTdG9yYWdlU2Vzc2lvbiwgbW9kaWZpZWRTaW5jZSk7CisgICAgICAgICAgICBu
ZXR3b3JrU3RvcmFnZVNlc3Npb24tPmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKG1vZGlm
aWVkU2luY2UpOwogICAgIH0KIAogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdl
YnNpdGVEYXRhVHlwZTo6Q3JlZGVudGlhbHMpKSB7CkBAIC02MTMsNyArNjEyLDcgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgT3B0aW8KIHsKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhX
ZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXMpKSB7CiAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU3Rv
cmFnZVNlc3Npb24gPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3JhZ2VTZXNzaW9uKHNlc3Np
b25JRCkpCi0gICAgICAgICAgICBkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKCpuZXR3b3JrU3Rv
cmFnZVNlc3Npb24sIGNvb2tpZUhvc3ROYW1lcyk7CisgICAgICAgICAgICBuZXR3b3JrU3RvcmFn
ZVNlc3Npb24tPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoY29va2llSG9zdE5hbWVzKTsKICAg
ICB9CiAKICAgICBhdXRvIGNsZWFyVGFza3NIYW5kbGVyID0gV1RGOjpDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShbdGhpcywgY2FsbGJhY2tJRF0gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IDUyZWJmOWFm
NTM5ZGM4MGRlMjE2OTJmMDU2YjFjMzNmYjk4YWJkNzAuLmNhYTdjZDVlYmU4ZDVhY2M4NTAxNzc5
NTVlMGZiNTE5NmU5YTFhOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKQEAgLTU5LDcgKzU5LDYgQEAKIAogI2lm
IEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKSAmJiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db29raWVKYXIuaD4KICNlbmRpZgogCiAjaWYgVVNFKFFVSUNL
X0xPT0spCkBAIC0xMDE0LDcgKzEwMTMsNyBAQCBzdGF0aWMgdm9pZCBsb2dDb29raWVJbmZvcm1h
dGlvbkludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IHZvaWQqIGxvZ2dlZAogICAg
IEFTU0VSVChOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNob3VsZExvZ0Nvb2tpZUluZm9ybWF0aW9u
KCkpOwogCiAgICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gY29va2llczsKLSAgICBpZiAoIVdl
YkNvcmU6OmdldFJhd0Nvb2tpZXMobmV0d29ya1N0b3JhZ2VTZXNzaW9uLCBwYXJ0aXRpb24sIHNh
bWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGNvb2tpZXMpKQorICAgIGlmICghbmV0
d29ya1N0b3JhZ2VTZXNzaW9uLmdldFJhd0Nvb2tpZXMocGFydGl0aW9uLCBzYW1lU2l0ZUluZm8s
IHVybCwgZnJhbWVJRCwgcGFnZUlELCBjb29raWVzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
YXV0byBlc2NhcGVkVVJMID0gZXNjYXBlRm9ySlNPTih1cmwuc3RyaW5nKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCmluZGV4
IGI3MmRjMTVmZmUwYWU5Mzg4ZDZkZmJiNGNlNmMwZWQxN2U3NGFmOTguLjJmZjBjYTI2OTFiMDY1
ZjQwY2Q4MDc1Yjc4ZGQ0NTlkZDFhZGVmOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKQEAgLTM1LDcgKzM1LDYgQEAKICNp
bmNsdWRlIDxXZWJDb3JlL0hUVFBIZWFkZXJOYW1lcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTG93
UG93ZXJNb2RlTm90aWZpZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vz
c2lvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db29raWVKYXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VS
ZXNwb25zZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJh
dGVnaWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCmluZGV4IDY5MTMxMzU4MTVlYTdkMDA4MTk0MjVjY2U4NDg0
NjhlZTNlNGZkZjcuLmFlNzM4OGY5YTQ5YzMwZmNjNmM4NmM4NTFmYTA2NTgyMTczM2JmNTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0
Zm9ybVN0cmF0ZWdpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCkBAIC01NCw3ICs1NCw2IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlR3JvdXAuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1Bhc3RlYm9hcmRJdGVtSW5mby5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
UGxhdGZvcm1Db29raWVKYXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtUGFzdGVib2Fy
ZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUHJvZ3Jlc3NUcmFja2VyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZXNvdXJjZUVycm9yLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0gYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0KaW5kZXgg
MzQ1MDY3MmQ1Y2I1MTk2ZGQzYTNhNmZiMDYwMDljZDc3Yjk4ZTdjOC4uYjUzMTg4ZWJmY2RmNWE3
NDEzMzE4NTE5OGVjM2QyNGZlMzlhZDg1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5t
bQpAQCAtMzMsNyArMzMsNiBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFzdGVi
b2FyZEl0ZW1JbmZvLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtQ29va2llSmFyLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtUGFzdGVib2FyZC5oPgogI2ltcG9ydCA8V2ViQ29yZS9T
aGFyZWRCdWZmZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvU3ViZnJhbWVMb2FkZXIuaD4KQEAgLTc1
LDM4ICs3NCwzOCBAQCBCbG9iUmVnaXN0cnkqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRl
QmxvYlJlZ2lzdHJ5KCkKIAogc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpjb29raWVzRm9yRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lv
biwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5m
bywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6
b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNl
Y3VyZUNvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tpZXNGb3JET00oc2Vzc2lv
biwgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVk
ZVNlY3VyZUNvb2tpZXMpOworICAgIHJldHVybiBzZXNzaW9uLmNvb2tpZXNGb3JET00oZmlyc3RQ
YXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVkZVNlY3VyZUNv
b2tpZXMpOwogfQogCiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0Q29va2llc0Zyb21E
T00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0
UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwg
c3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4g
cGFnZUlELCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cmluZykKIHsKLSAgICBXZWJDb3JlOjpzZXRD
b29raWVzRnJvbURPTShzZXNzaW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJh
bWVJRCwgcGFnZUlELCBjb29raWVTdHJpbmcpOworICAgIHNlc3Npb24uc2V0Q29va2llc0Zyb21E
T00oZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgY29va2ll
U3RyaW5nKTsKIH0KIAogYm9vbCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZXNFbmFibGVk
KGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbikKIHsKLSAgICByZXR1cm4gV2Vi
Q29yZTo6Y29va2llc0VuYWJsZWQoc2Vzc2lvbik7CisgICAgcmV0dXJuIHNlc3Npb24uY29va2ll
c0VuYWJsZWQoKTsKIH0KIAogc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJ
bmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90
PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVD
b29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKQogewotICAgIHJldHVybiBXZWJDb3JlOjpjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShzZXNzaW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUlu
Zm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNsdWRlU2VjdXJlQ29va2llcyk7CisgICAgcmV0
dXJuIHNlc3Npb24uY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoZmlyc3RQYXJ0eSwgc2Ft
ZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOwog
fQogCiBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3Qg
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3Qg
VVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8
dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tp
ZXMpCiB7CiAgICAgYXV0byYgc2Vzc2lvbiA9IHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpID8gV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpIDog
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKLSAgICByZXR1
cm4gV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoc2Vzc2lvbiwgZmlyc3RQ
YXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVkZVNlY3VyZUNv
b2tpZXMpOworICAgIHJldHVybiBzZXNzaW9uLmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1ZGVT
ZWN1cmVDb29raWVzKTsKIH0KIAogYm9vbCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFJhd0Nv
b2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZp
cnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVy
bCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRf
dD4gcGFnZUlELCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKLSAgICByZXR1cm4gV2Vi
Q29yZTo6Z2V0UmF3Q29va2llcyhzZXNzaW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVy
bCwgZnJhbWVJRCwgcGFnZUlELCByYXdDb29raWVzKTsKKyAgICByZXR1cm4gc2Vzc2lvbi5nZXRS
YXdDb29raWVzKGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQs
IHJhd0Nvb2tpZXMpOwogfQogCiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRlQ29v
a2llKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKIHsKLSAgICBXZWJDb3JlOjpkZWxldGVDb29raWUo
c2Vzc2lvbiwgdXJsLCBjb29raWVOYW1lKTsKKyAgICBzZXNzaW9uLmRlbGV0ZUNvb2tpZSh1cmws
IGNvb2tpZU5hbWUpOwogfQogCiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0VHlwZXMo
VmVjdG9yPFN0cmluZz4mIHR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5t
bSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KaW5k
ZXggYzRkNzQyMmRlNzFmZmNjMTRjZGRhODMzM2U2OTcyNmE3MDRlZTc0My4uNzcxOGQwNWFlZGE2
MjY2ZTIzMTMwYTE0ZTgyMWJlMWU4NjZjNDdjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCkBAIC00Miw3ICs0Miw2IEBACiAjaW1w
b3J0IDxXZWJDb3JlL0F1ZGlvU2Vzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9EZXByZWNhdGVk
R2xvYmFsU2V0dGluZ3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9u
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtQ29va2llSmFyLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5n
cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0RW5jb2RpbmdSZWdpc3RyeS5oPgpAQCAtMTg3Nyw3
ICsxODc2LDcgQEAgc3RhdGljIE5TU3RyaW5nICpjbGFzc0lCQ3JlYXRvcklEID0gbmlsOwogCiAr
ICh2b2lkKV9jbGVhck5ldHdvcmtMb2FkZXJTZXNzaW9uCiB7Ci0gICAgV2ViQ29yZTo6ZGVsZXRl
QWxsQ29va2llcyhOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigp
KTsKKyAgICBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLmRl
bGV0ZUFsbENvb2tpZXMoKTsKIH0KIAogKyAodm9pZClfc2V0Q3VycmVudE5ldHdvcmtMb2FkZXJT
ZXNzaW9uQ29va2llQWNjZXB0UG9saWN5OihOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kpcG9saWN5
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN1
cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAppbmRleCBkZTI2MjY4NDM4OGRiYWViM2Iz
OTY2MDAwNjhmOTJlYTNhMzAwODc2Li5mYWI0MjE4NDg2OGYyMjc2MTk4OGFiNDA4NDVmNzllYzcz
OTg4ZTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9y
dC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKQEAgLTMyLDcgKzMyLDYg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZUdyb3VwLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogCiAjaWYgVVNFKENGVVJMQ09OTkVDVElP
TikKICNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNl
Lmg+CkBAIC03MiwzNiArNzEsMzYgQEAgQmxvYlJlZ2lzdHJ5KiBXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSgpCiAKIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6Y29va2llc0ZvckRPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Np
b24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBz
YW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFt
ZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVz
IGluY2x1ZGVTZWN1cmVDb29raWVzKQogewotICAgIHJldHVybiBXZWJDb3JlOjpjb29raWVzRm9y
RE9NKHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdl
SUQsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKKyAgICByZXR1cm4gc2Vzc2lvbi5jb29raWVzRm9y
RE9NKGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1
ZGVTZWN1cmVDb29raWVzKTsKIH0KIAogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldENv
b2tpZXNGcm9tRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3Qg
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3Qg
VVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8
dWludDY0X3Q+IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHJpbmcpCiB7Ci0gICAgV2Vi
Q29yZTo6c2V0Q29va2llc0Zyb21ET00oc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZv
LCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgY29va2llU3RyaW5nKTsKKyAgICBzZXNzaW9uLnNldENv
b2tpZXNGcm9tRE9NKGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdl
SUQsIGNvb2tpZVN0cmluZyk7CiB9CiAKIGJvb2wgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29r
aWVzRW5hYmxlZChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24pCiB7Ci0gICAg
cmV0dXJuIFdlYkNvcmU6OmNvb2tpZXNFbmFibGVkKHNlc3Npb24pOworICAgIHJldHVybiBzZXNz
aW9uLmNvb2tpZXNFbmFibGVkKCk7CiB9CiAKIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0
IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25h
bDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNs
dWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykKIHsKLSAgICByZXR1cm4gV2Vi
Q29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwg
c2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMp
OworICAgIHJldHVybiBzZXNzaW9uLmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGZpcnN0
UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1ZGVTZWN1cmVD
b29raWVzKTsKIH0KIAogc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUlu
Zm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVT
ZWN1cmVDb29raWVzKQogewogICAgIGF1dG8mIHNlc3Npb24gPSBzZXNzaW9uSUQuaXNFcGhlbWVy
YWwoKSA/IFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nl
c3Npb24oKSA6IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7
Ci0gICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHNlc3Np
b24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1
ZGVTZWN1cmVDb29raWVzKTsKKyAgICByZXR1cm4gc2Vzc2lvbi5jb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlE
LCBpbmNsdWRlU2VjdXJlQ29va2llcyk7CiB9CiAKIGJvb2wgV2ViUGxhdGZvcm1TdHJhdGVnaWVz
OjpnZXRSYXdDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29u
c3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29u
c3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9u
YWw8dWludDY0X3Q+IHBhZ2VJRCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7Ci0gICAg
cmV0dXJuIFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgc2FtZVNp
dGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgcmF3Q29va2llcyk7CisgICAgcmV0dXJuIHNl
c3Npb24uZ2V0UmF3Q29va2llcyhmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJ
RCwgcGFnZUlELCByYXdDb29raWVzKTsKIH0KIAogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmRlbGV0ZUNvb2tpZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0
IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCiB7Ci0gICAgV2ViQ29yZTo6ZGVs
ZXRlQ29va2llKHNlc3Npb24sIHVybCwgY29va2llTmFtZSk7CisgICAgc2Vzc2lvbi5kZWxldGVD
b29raWUodXJsLCBjb29raWVOYW1lKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL1dlYlByZWZlcmVuY2VzLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlBy
ZWZlcmVuY2VzLmNwcAppbmRleCBlMTAwNDEyMDI4YTMzYzQ5NDM5Mjg3ZGQ3OTA4ZTZhM2E1NzIw
ZDY2Li5jMDhmMmY3MjcyMGEyNmFjNjdlNjllOTIzNjE3YWQ3NjE2NTMxYWY5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlcy5jcHAKKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZXMuY3BwCkBAIC00Miw3ICs0Miw2IEBACiAj
aW5jbHVkZSA8V2ViQ29yZS9Gb250Q2FzY2FkZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTG9jYWxp
emVkU3RyaW5ncy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogI2luY2x1ZGUgPGxpbWl0
cz4KICNpbmNsdWRlIDxzaGxvYmouaD4KICNpbmNsdWRlIDx3Y2hhci5oPgpAQCAtMjEyMCw3ICsy
MTE5LDcgQEAgSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6bWVkaWFQcmVsb2FkaW5nRW5hYmxlZChf
T3V0XyBCT09MKiBlbmFibGVkKQogCiBIUkVTVUxUIFdlYlByZWZlcmVuY2VzOjpjbGVhck5ldHdv
cmtMb2FkZXJTZXNzaW9uKCkKIHsKLSAgICBXZWJDb3JlOjpkZWxldGVBbGxDb29raWVzKE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOworICAgIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuZGVsZXRlQWxsQ29va2llcygp
OwogICAgIHJldHVybiBTX09LOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346030</attachid>
            <date>2018-07-29 08:32:45 -0700</date>
            <delta_ts>2018-07-30 12:37:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188137-20180729173242.patch</filename>
            <type>text/plain</type>
            <size>148453</size>
            <attacher name="Rob Buis">rbuis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0MzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTAyYzI1N2ZhMWQ0YmU5
YmEyYjFkMWFkOWVjNjFlMGVlNzU4ZGM3Mi4uMjI2YmJlMTc0MWFjOTFjN2Y0MzBjYjk1NjkyZWYx
MDkyNDAwNWZhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMCBAQAorMjAxOC0wNy0yOSAgUm9i
IEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgorCisgICAgICAgIE1lcmdlIFBsYXRmb3JtQ29va2ll
SmFyIGZ1bmN0aW9ucyBpbnRvIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4MTM3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0tIG5vIGNoYW5n
ZSBpbiBXZWJLaXQgZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtl
OiBSZW1vdmUgQ29va2llSmFyTWFjLm1tIHJlZmVyZW5jZQorICAgICAgICAqIFNvdXJjZXNDb2Nv
YS50eHQ6IFJlbW92ZSBDb29raWVKYXJNYWMubW0gcmVmZXJlbmNlCisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxvYWRlci9Db29raWVKYXIu
Y3BwOiBSZW1vdmUgUGxhdGZvcm1Db29raWVKYXIuaCByZWZlcmVuY2UuCisgICAgICAgICogcGxh
dGZvcm0vQ3VybC5jbWFrZTogUmVtb3ZlIENvb2tpZUphckN1cmwuY3BwIHJlZmVyZW5jZS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9Tb3VyY2VzU291cC50eHQ6IFJlbW92ZSBDb29raWVKYXJTb3VwLmNw
cCByZWZlcmVuY2UuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24u
Y3BwOiBBZGFwdCBjYWxsc2l0ZXMgdG8gdXNlCisgICAgICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lv
biBpbnN0ZWFkIG9mIENvb2tpZUphciBmdW5jdGlvbnMuCisKKyAgICAgICAgKFdlYkNvcmU6Omhl
YWRlclZhbHVlRm9yVmFyeSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3Rv
cmFnZVNlc3Npb24uaDogQWRkIFBsYXRmb3JtQ29va2llSmFyCisgICAgICAgIGZ1bmN0aW9ucy4K
KworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1Db29raWVKYXIuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuY3Bw
OiBBZGFwdCBjYWxsc2l0ZXMgdG8KKyAgICAgICAgdXNlIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiBp
bnN0ZWFkIG9mIENvb2tpZUphciBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpjb29raWVE
YXRhRm9ySGFuZHNoYWtlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUph
ckNGTmV0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdv
cmtTdG9yYWdlU2Vzc2lvbkNGTmV0LmNwcDogTW92ZSBmdW5jdGlvbnMKKyAgICAgICAgZnJvbSBD
b29raWVKYXJDRk5ldC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpjb29raWVEb21haW4pOgorICAg
ICAgICAoV2ViQ29yZTo6Y2Fub25pY2FsQ29va2llVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpj
b29raWVDcmVhdGVkVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVFeHBpcmF0aW9uVGlt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmNv
b2tpZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6ZmlsdGVyQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5Q29va2llc0ZvclVS
TFdpdGhGaXJzdFBhcnR5VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNvb2tpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVzRnJvbURP
TSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjb250YWluc1NlY3VyZUNvb2tpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVzRm9yRE9NIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpjb29raWVzRW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb246OmdldFJhd0Nvb2tpZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVDb29raWUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUFsbENvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bjo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UpOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW06IE1vdmUgZnVuY3Rpb25z
CisgICAgICAgIGZyb20gQ29va2llSmFyTWFjLm1tLgorICAgICAgICAoV2ViQ29yZTo6aHR0cENv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlSFRUUENvb2tpZSk6CisgICAgICAgIChX
ZWJDb3JlOjpwb2xpY3lQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNGb3JV
UkwpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SFRUUENvb2tpZXNGb3JVUkwpOgorICAgICAgICAo
V2ViQ29yZTo6aHR0cENvb2tpZXNGb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsdGVyQ29v
a2llcyk6CisgICAgICAgIChXZWJDb3JlOjphcHBseVBhcnRpdGlvblRvQ29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpjb29raWVzQXJlQmxvY2tlZEZvclVSTCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb29raWVzSW5QYXJ0aXRpb25Gb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0Zv
clNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlQWxsSFRUUENvb2tpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVzRm9yRE9NIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpzZXRDb29raWVzRnJvbURPTSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpo
dHRwQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6Y29va2llc0VuYWJsZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uOjpnZXRSYXdDb29raWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVBbGxDb29raWVz
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246
OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ3VybC5jcHA6IE1lcmdlIGZ1bmN0aW9ucworICAg
ICAgICBmcm9tIENvb2tpZUphckN1cmwuY3BwLgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVzRnJvbURPTSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZXNFbmFibGVkIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0ZvckRPTSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUFsbENv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVB
bGxDb29raWVzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldFJhd0Nvb2tpZXMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvQ29v
a2llSmFyTWFjLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL1dl
YkNvcmVSZXNvdXJjZUhhbmRsZUFzT3BlcmF0aW9uUXVldWVEZWxlZ2F0ZS5tbToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3Bw
OiBNZXJnZSBmdW5jdGlvbnMKKyAgICAgICAgZnJvbSBDb29raWVKYXJTb3VwLmNwcC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0VuYWJsZWQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6aHR0cE9ubHlDb29raWVFeGlzdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVzRnJvbURPTSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUFsbENv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVB
bGxDb29raWVzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldFJhd0Nvb2tpZXMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29va2llc0ZvclNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVzRm9yRE9NIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFs
dWUgY29uc3QpOgorCiAyMDE4LTA3LTI0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIEFuaW1hdGlvbiBzdG9wcyB3aXRoIG9iamVjdC1maXQ6Y29udGFp
biBvbiBhbiBhbmltYXRlZCAyZCBjYW52YXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmNiMzdkMTQ2NTViMzQ0YmVi
OTNiN2Y2OTBlNWVhODY5NWQwNTFmZi4uNTgwYmQ5ZjE4NThkMWUwOWM2MGVhOTY5NWZiYjhlMTM4
ZWI5YmU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAxOC0wNy0yOSAgUm9iIEJ1aXMg
IDxyYnVpc0BpZ2FsaWEuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODgxMzcKKyAgICAgICAgTWVyZ2UgUGxhdGZvcm1Db29raWVKYXIgZnVu
Y3Rpb25zIGludG8gTmV0d29ya1N0b3JhZ2VTZXNzaW9uCisKKyAgICAgICAgQWRhcHQgY2FsbHNp
dGVzIHRvIHVzZSBOZXR3b3JrU3RvcmFnZVNlc3Npb24gaW5zdGVhZCBvZiBDb29raWVKYXIgZnVu
Y3Rpb25zLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpkZWxldGVBbGxDb29raWVzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQWxsQ29va2llc01vZGlm
aWVkU2luY2UpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OmNvb2tpZXNGb3JET00pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpkZWxldGVDb29raWUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vi
c2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0
ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURh
dGFGb3JPcmlnaW5zKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0Ojpsb2dDb29raWVJbmZvcm1hdGlvbkludGVybmFs
KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNw
cDoKKwogMjAxOC0wNy0yNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAg
ICAgIEZpeCB0aHJlYWQtc2FmZXR5IGlzc3VlcyByZWxhdGVkIHRvIFJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OmF1ZGlvU2FtcGxlc0F2YWlsYWJsZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5k
ZXggMGUzMzc1NjYzYjkzZDViODZlM2NiNTAxODU2NmNhYjQ4ZmFlNWQwNi4uMzk2YmFlODk0ZGZj
YjgyYjhkMjE5ZjcxMGQ4ZmQ0ZjJjZmEyZTczYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIyIEBACisyMDE4LTA3LTI5ICBSb2IgQnVpcyAgPHJidWlzQGlnYWxpYS5j
b20+CisKKyAgICAgICAgTWVyZ2UgUGxhdGZvcm1Db29raWVKYXIgZnVuY3Rpb25zIGludG8gTmV0
d29ya1N0b3JhZ2VTZXNzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODgxMzcKKworICAgICAgICBBZGFwdCBjYWxsc2l0ZXMgdG8gdXNlIE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiBpbnN0ZWFkIG9mIENvb2tpZUphciBmdW5jdGlvbnMuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW06CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXM6OmNvb2tpZXNGb3JET00pOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRD
b29raWVzRnJvbURPTSk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZXNF
bmFibGVkKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llUmVxdWVzdEhl
YWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRSYXdD
b29raWVzKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRlQ29va2llKToK
KyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tOgorICAgICAgICAoK1tXZWJQcmVm
ZXJlbmNlcyBfY2xlYXJOZXR3b3JrTG9hZGVyU2Vzc2lvbl0pOgorCiAyMDE4LTA3LTI2ICBBbmR5
IFZhbldhZ29uZXIgIDxhbmR5QHZhbndhZ29uZXIuZmFtaWx5PgogCiAgICAgICAgIFtJTlRMXSBS
ZW1vdmUgSU5UTCBzdWItZmVhdHVyZSBjb21waWxlIGZsYWdzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFu
Z2VMb2cKaW5kZXggYTczZGZlZmJlZjBjZmM4NjZjY2NhYjY0ODEyNjU1ZDQ0OWM3NDhmNi4uNTEy
NzExMjYzMzRkOThkZmNhOTA5MDUxYTY3ZGZlMWU3NmFkNWNiZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE4LTA3LTI5ICBSb2IgQnVpcyAgPHJidWlz
QGlnYWxpYS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4ODEzNworICAgICAgICBNZXJnZSBQbGF0Zm9ybUNvb2tpZUphciBmdW5jdGlvbnMg
aW50byBOZXR3b3JrU3RvcmFnZVNlc3Npb24KKworICAgICAgICBBZGFwdCBjYWxsc2l0ZXMgdG8g
dXNlIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiBpbnN0ZWFkIG9mIENvb2tpZUphciBmdW5jdGlvbnMu
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwOgorICAgICAgICAoV2ViUGxhdGZv
cm1TdHJhdGVnaWVzOjpjb29raWVzRm9yRE9NKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVz
Ojpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmRlbGV0
ZUNvb2tpZSk6CisgICAgICAgICogV2ViUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAoV2ViUHJl
ZmVyZW5jZXM6OmNsZWFyTmV0d29ya0xvYWRlclNlc3Npb24pOgorCiAyMDE4LTA3LTI2ICBSb3Nz
IEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAgICAgICBTdHJpbmcoVmll
dykgc2hvdWxkIGhhdmUgYSBzcGxpdEFsbG93aW5nRW1wdHlFbnRyaWVzIGZ1bmN0aW9uIGluc3Rl
YWQgb2YgYSBmbGFnIHBhcmFtZXRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1BcHBsZVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UK
aW5kZXggMmMwN2YzYTJkNzJkN2E3MTM5OWRlZWZkYzkyNTc5NmFjZDhlMTBmYi4uYjg2MDI5Yjg4
YmU3MWI3OWRmMzg0MDY4NmFlZjU1M2E4OTIxMjI5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFw
cGxlV2luLmNtYWtlCkBAIC00Nyw3ICs0Nyw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAog
CiAgICAgcGxhdGZvcm0vbmV0d29yay9jZi9BdXRoZW50aWNhdGlvbkNGLmNwcAotICAgIHBsYXRm
b3JtL25ldHdvcmsvY2YvQ29va2llSmFyQ0ZOZXQuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9j
Zi9Db29raWVTdG9yYWdlQ0ZOZXQuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jZi9DcmVkZW50
aWFsU3RvcmFnZUNGTmV0LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvRE5TUmVzb2x2ZVF1
ZXVlQ0ZOZXQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IGYzZDhkMDI4Y2ZkMWUw
NjFmOWYyYzZmMzAyYmRmOWI5NWQxZDQ5NDkuLjVkZmU3NGM3OWI1MjMxMDBkNGVjN2I4YjRiZGY1
ZDgzNWY4NmYyOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCkBAIC00MzQsNyArNDM0LDYg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vbmV0d29yay9tYWMv
QXV0aGVudGljYXRpb25NYWMubW0KICAgICBwbGF0Zm9ybS9uZXR3b3JrL21hYy9CbG9iRGF0YUZp
bGVSZWZlcmVuY2VNYWMubW0KICAgICBwbGF0Zm9ybS9uZXR3b3JrL21hYy9DZXJ0aWZpY2F0ZUlu
Zm9NYWMubW0KLSAgICBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW0KICAgICBw
bGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVTdG9yYWdlTWFjLm1tCiAgICAgcGxhdGZvcm0vbmV0
d29yay9tYWMvQ3JlZGVudGlhbFN0b3JhZ2VNYWMubW0KICAgICBwbGF0Zm9ybS9uZXR3b3JrL21h
Yy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNl
c0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZTM1MmU1
M2I4ZDYxZmNiODBhMmYyYTBjYTZjZWZlNWMxYTkxYjkzZC4uZWU5ZThiMGExZjMxNzUzNTJmMjU1
MjA3MDQ1MzM4OTViM2IxOWI0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0Nv
Y29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC01MDcsNyAr
NTA3LDYgQEAgcGxhdGZvcm0vbmV0d29yay9pb3MvV2ViQ29yZVVSTFJlc3BvbnNlSU9TLm1tCiBw
bGF0Zm9ybS9uZXR3b3JrL21hYy9BdXRoZW50aWNhdGlvbk1hYy5tbQogcGxhdGZvcm0vbmV0d29y
ay9tYWMvQmxvYkRhdGFGaWxlUmVmZXJlbmNlTWFjLm1tCiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9D
ZXJ0aWZpY2F0ZUluZm9NYWMubW0KLXBsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZUphck1hYy5t
bQogcGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llU3RvcmFnZU1hYy5tbQogcGxhdGZvcm0vbmV0
d29yay9tYWMvQ3JlZGVudGlhbFN0b3JhZ2VNYWMubW0KIHBsYXRmb3JtL25ldHdvcmsvbWFjL0Zv
cm1EYXRhU3RyZWFtTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggZmMxZmExZDJlY2Y4ZTAzNWQyNTQ4MmZlZmI3NTlmY2Zh
MWViNTU2MS4uNzg3ZGNmYWI1N2QxYzJkNWQyYzllNmMyMTU0YzAyMDgxM2IwYmRkZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
NDYwMyw3ICs0NjAzLDYgQEAKIAkJRTEzNEY1QUIxMkVFMzQzRjAwNEVDNThEIC8qIEludFJlY3RI
YXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM0
RjVBQTEyRUUzNDNGMDA0RUM1OEQgLyogSW50UmVjdEhhc2guaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMTM5ODY2NDE1NDc4NDc0MDAxRTNGNjUg
LyogU3R5bGVSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTEzOTg2NjIxNTQ3ODQ3NDAwMUUzRjY1IC8qIFN0eWxlUmVzb2x2ZXIuaCAqLzsg
fTsKIAkJRTEzRUYzNDQxNjg0RUNGNDAwMzRDODNGIC8qIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEzRUYzNDIx
Njg0RUNGNDAwMzRDODNGIC8qIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUUxNDI0QzhBMTY0QjNCNEUwMEYz
MkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTE0MjRDODkxNjRCM0I0RTAwRjMyRDQwIC8qIFBsYXRmb3JtQ29v
a2llSmFyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRTE0MjRDOTQxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tpZUphci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0MjRDOTIxNjRCNTJDODAwRjMyRDQw
IC8qIENvb2tpZUphci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUUxNEYxQzQ1MTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMTRGMUM0MzE0QjVEQUM2MDBFQTkwMDkgLyogSFRNTEZvcm1Db250cm9sRWxlbWVudFdp
dGhTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUUxNTI1NTE1MTZGRDIzNTAwMDNEN0FEQiAvKiBXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc09w
ZXJhdGlvblF1ZXVlRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxNTI1NTEzMTZGRDIzNEYwMDNEN0FEQiAvKiBXZWJDb3JlUmVzb3VyY2VI
YW5kbGVBc09wZXJhdGlvblF1ZXVlRGVsZWdhdGUuaCAqLzsgfTsKQEAgLTE0MTMwLDggKzE0MTI5
LDYgQEAKIAkJRTEzRUYzNDcxNjg1MEM0NzAwMzRDODNGIC8qIE5ldHdvcmtTdG9yYWdlU2Vzc2lv
bkNGTmV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbkNGTmV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEz
RjAxRUExMjcwRTEwRDAwREZCQTcxIC8qIENvb2tpZVN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29va2llU3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMTNGMDFGMDEyNzBFMTkwMDBERkJBNzEgLyogQ29va2llU3RvcmFnZU1hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvb2tpZVN0b3JhZ2VNYWMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxNDI0Qzg5MTY0QjNCNEUwMEYzMkQ0
MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQbGF0Zm9ybUNvb2tpZUphci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMTQy
NEM4RjE2NEI0NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29va2llSmFyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFMTQyNEM5MTE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvb2tpZUphci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNDI0QzkyMTY0QjUyQzgwMEYzMkQ0MCAvKiBDb29r
aWVKYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29va2llSmFyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNEE5NEQ2MTZERkRGOTUwMDY4REU4MiAvKiBC
bG9iUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmxv
YlJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5MDczLDcgKzE5
MDcwLDYgQEAKIAkJCQlDRENENDFFNjFDM0REQjA5MDA5NjVEOTkgLyogUGFyc2VkQ29udGVudFJh
bmdlLmggKi8sCiAJCQkJNDQ3OTU4MDIxNjQzQjQ3QjAwMUUwQTdGIC8qIFBhcnNlZENvbnRlbnRU
eXBlLmNwcCAqLywKIAkJCQk0NDc5NTgwMzE2NDNCNDdCMDAxRTBBN0YgLyogUGFyc2VkQ29udGVu
dFR5cGUuaCAqLywKLQkJCQlFMTQyNEM4OTE2NEIzQjRFMDBGMzJENDAgLyogUGxhdGZvcm1Db29r
aWVKYXIuaCAqLywKIAkJCQkzN0JBQUU1NzE5ODBEMUREMDA1REZFNzEgLyogUHJvdGVjdGlvblNw
YWNlLmggKi8sCiAJCQkJNTE0Qzc2NUYwQ0U5MjNBMTAwN0VGM0NEIC8qIFByb3RlY3Rpb25TcGFj
ZUJhc2UuY3BwICovLAogCQkJCTUxNEM3NjYwMENFOTIzQTEwMDdFRjNDRCAvKiBQcm90ZWN0aW9u
U3BhY2VCYXNlLmggKi8sCkBAIC0xOTExMyw3ICsxOTEwOSw2IEBACiAJCQkJNTE0Qzc2NDMwQ0U5
MjM0RTAwN0VGM0NEIC8qIEF1dGhlbnRpY2F0aW9uTWFjLm1tICovLAogCQkJCUUxNjRBMkVCMTkx
QUU2MzUwMDEwNzM3RCAvKiBCbG9iRGF0YUZpbGVSZWZlcmVuY2VNYWMubW0gKi8sCiAJCQkJNUYy
REJCRTcxNzhFMzMyRDAwMTQxNDg2IC8qIENlcnRpZmljYXRlSW5mb01hYy5tbSAqLywKLQkJCQlF
MTQyNEM4RjE2NEI0NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tICovLAogCQkJCUUxM0Yw
MUYwMTI3MEUxOTAwMERGQkE3MSAvKiBDb29raWVTdG9yYWdlTWFjLm1tICovLAogCQkJCUUxQjRD
RDI0MTBCMzIyRTIwMEJGRkQ3RSAvKiBDcmVkZW50aWFsU3RvcmFnZU1hYy5tbSAqLywKIAkJCQk1
MTRDNzY0NDBDRTkyMzRFMDA3RUYzQ0QgLyogRm9ybURhdGFTdHJlYW1NYWMuaCAqLywKQEAgLTI5
NzE1LDcgKzI5NzEwLDYgQEAKIAkJCQk0OTNFNUUwOTEyRDY0MjA1MDAwMjAwODEgLyogUGxhdGZv
cm1DQUxheWVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDcwQkExMzE4MDc0RERGMDAw
MTkwOEEgLyogUGxhdGZvcm1DQUxheWVyQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNDk3
ODcxMUFCQUYzQTUwMENFRjdFNCAvKiBQbGF0Zm9ybUNvbnRlbnRGaWx0ZXIuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUUxNDI0QzhBMTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1Qzc2MkIxNDk3RkUxNDAwQkM0Nzc1IC8qIFBsYXRmb3Jt
RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2NjAxRUJGMTRCM0I5QUQwMDEyQzBGRSAvKiBQ
bGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBQTQ4NzAxNEEw
NTI1MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmggaW4gSGVhZGVycyAqLywK
QEAgLTI5ODk0LDggKzI5ODg4LDYgQEAKIAkJCQkzQzI0NEZFQUEzNzVBQzYzM0Y4OEJFNkYgLyog
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEJFMDMwQTIwRjMx
MTJGQjAwM0MxQTQ2IC8qIFJlbmRlckxpbmVCb3hMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0VBNDg2NDA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyTGluZUJyZWFrLmggaW4gSGVhZGVycyAq
LywKLQkJCQk5NENGRDYwQTFGRTk4NjdFMDAyNDg4QUQgLyogUmVuZGVyTGluZXNDbGFtcEZsb3cu
aCBpbiBIZWFkZXJzICovLAotCQkJCTk0Q0ZENjBEMUZFQUNFRkUwMDI0ODhBRCAvKiBSZW5kZXJM
aW5lc0NsYW1wU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBQkI1NDE5RjBBQ0RERkU0MDAyODIw
RUIgLyogUmVuZGVyTGlzdEJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThFQTdBNTIwQTE5MUE1
MjAwQThFRjVGIC8qIFJlbmRlckxpc3RJdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEVBN0E1
MDBBMTkxQTUyMDBBOEVGNUYgLyogUmVuZGVyTGlzdE1hcmtlci5oIGluIEhlYWRlcnMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Db29raWVKYXIuY3BwCmluZGV4IDQ5Yjc5OGQ3ZDJjZWFiZDlhOGRhZmVk
ZDg1MzQ4YTI0YWJhODJjM2UuLjA2ODMwNjc0NGFmODE0YmQyNzYwYTVlMTg2NWE1YTlhYjQzNTJi
MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuY3BwCkBAIC0zNSw3ICszNSw2IEBACiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZVNl
c3Npb24uaCIKICNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIlBsYXRm
b3JtQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCiAjaW5jbHVk
ZSAiU2FtZVNpdGVJbmZvLmgiCiAjaW5jbHVkZSA8d3RmL1N5c3RlbVRyYWNpbmcuaD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9DdXJsLmNtYWtlCmluZGV4IDEwNTExMzA2OTY0ZDg3MGFiOWRmZmExNWRiZGU5
MTEzZDVkMDkzZDAuLjE2MDNlZjg2MTYyODZlYWIyNmY3M2E4MzRiMjcwMmYyZjBjZWM3MjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cmwuY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFrZQpAQCAtNSw3ICs1LDYgQEAgbGlzdChBUFBFTkQg
V2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VDdXJsLmNw
cAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUluZm8uY3BwCi0gICAgcGxh
dGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0Nvb2tpZUphckN1cmxEYXRhYmFzZS5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ29va2llSmFyREIuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZVN0b3Jh
Z2VDdXJsLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc1Nv
dXAudHh0IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc1NvdXAudHh0CmluZGV4IGQ2
NGZjZmJlYTI4MTQ3ZGFkZjQzMGIyZmZiNGMwZmVhNjBiOTVkOGEuLmMwMmU0OWU0ZTUxZWY3NDkz
MWY3MGRkODY1NWQzNGRlMmQ2M2U0OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1NvdXJjZXNTb3VwLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2Vz
U291cC50eHQKQEAgLTIzLDcgKzIzLDYgQEAKIAogcGxhdGZvcm0vbmV0d29yay9zb3VwL0F1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlU291cC5jcHAKIHBsYXRmb3JtL25ldHdvcmsvc291cC9DZXJ0aWZp
Y2F0ZUluZm8uY3BwCi1wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAKIHBs
YXRmb3JtL25ldHdvcmsvc291cC9Db29raWVTb3VwLmNwcAogcGxhdGZvcm0vbmV0d29yay9zb3Vw
L0Nvb2tpZVN0b3JhZ2VTb3VwLmNwcAogcGxhdGZvcm0vbmV0d29yay9zb3VwL0NyZWRlbnRpYWxT
dG9yYWdlU291cC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQ2FjaGVWYWxpZGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Q2FjaGVWYWxpZGF0aW9uLmNwcAppbmRleCAzMDJhOGQ2Nzg5YjBjOThhOTYwZTIzM2JhNDI4MmNk
MmU3ODI2NzNlLi45MTBmYmY5NTY4MjFmYjcwYzZlNjMyNTFmMGFiNDgxNTIyM2YxZTAyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NhY2hlVmFsaWRhdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24u
Y3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiQ29va2llc1N0cmF0ZWd5LmgiCiAjaW5j
bHVkZSAiSFRUUEhlYWRlck1hcC5oIgogI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5o
IgotI2luY2x1ZGUgIlBsYXRmb3JtQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJh
dGVnaWVzLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VSZXNwb25zZS5oIgpAQCAtMzM4LDcgKzMzNyw3IEBAIHN0YXRpYyBTdHJpbmcgaGVhZGVyVmFs
dWVGb3JWYXJ5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBo
CiAgICAgICAgIGF1dG8qIGNvb2tpZVN0cmF0ZWd5ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCkgPyBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+Y29va2llc1N0cmF0ZWd5KCkgOiBudWxscHRyOwogICAgICAg
ICBpZiAoIWNvb2tpZVN0cmF0ZWd5KSB7CiAgICAgICAgICAgICBBU1NFUlQoc2Vzc2lvbklEID09
IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotICAgICAgICAgICAgcmV0dXJu
IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVm
YXVsdFN0b3JhZ2VTZXNzaW9uKCksIHJlcXVlc3QuZmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgU2Ft
ZVNpdGVJbmZvOjpjcmVhdGUocmVxdWVzdCksIHJlcXVlc3QudXJsKCksIHN0ZDo6bnVsbG9wdCwg
c3RkOjpudWxsb3B0LCBpbmNsdWRlU2VjdXJlQ29va2llcykuZmlyc3Q7CisgICAgICAgICAgICBy
ZXR1cm4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShyZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCks
IFNhbWVTaXRlSW5mbzo6Y3JlYXRlKHJlcXVlc3QpLCByZXF1ZXN0LnVybCgpLCBzdGQ6Om51bGxv
cHQsIHN0ZDo6bnVsbG9wdCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpLmZpcnN0OwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiBjb29raWVTdHJhdGVneS0+Y29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUoc2Vzc2lvbklELCByZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCksIFNhbWVTaXRl
SW5mbzo6Y3JlYXRlKHJlcXVlc3QpLCByZXF1ZXN0LnVybCgpLCBzdGQ6Om51bGxvcHQsIHN0ZDo6
bnVsbG9wdCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpLmZpcnN0OwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5o
CmluZGV4IDZlOTkzOTNkZjJiODlkNmMwZmZkYWRkOWYyNDFhYjhmYzA5MmZiOTMuLjA4YTgyZGQ1
YTNkMDg5YjNiYTRmOGIwZGQ1NDE2MzU0Mjg3ZTI1MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaApAQCAtMzAs
NiArMzAsNyBAQAogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvV2FsbFRpbWUu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2lmIFBMQVRGT1JNKENPQ09B
KSB8fCBVU0UoQ0ZVUkxDT05ORUNUSU9OKQpAQCAtNjQsNiArNjUsMTAgQEAgY2xhc3MgUmVzb3Vy
Y2VSZXF1ZXN0OwogY2xhc3MgU291cE5ldHdvcmtTZXNzaW9uOwogCiBzdHJ1Y3QgQ29va2llOwor
c3RydWN0IENvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5Oworc3RydWN0IFNhbWVTaXRlSW5m
bzsKKworZW51bSBjbGFzcyBJbmNsdWRlU2VjdXJlQ29va2llczsKIAogY2xhc3MgTmV0d29ya1N0
b3JhZ2VTZXNzaW9uIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShOZXR3b3JrU3RvcmFnZVNl
c3Npb24pOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTEzNywxMiArMTQyLDI0IEBAIHB1
YmxpYzoKICAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCgpIGNvbnN0OwogI2VuZGlmCiAK
KyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNvb2tpZXNFbmFibGVkKCkgY29uc3Q7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRDb29raWUoY29uc3QgQ29va2llJik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxDb29raWU+JiwgY29uc3QgVVJMJiwg
Y29uc3QgVVJMJiBtYWluRG9jdW1lbnRVUkwpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
Q29va2llc0Zyb21ET00oY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8m
LCBjb25zdCBVUkwmLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlv
bmFsPHVpbnQ2NF90PiBwYWdlSUQsIGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IENvb2tpZSYpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYpIGNvbnN0Owor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGVsZXRlQWxsQ29va2llcygpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoV2FsbFRpbWUpOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgY29va2llSG9zdE5hbWVzKTsKICAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8
Q29va2llPiBnZXRBbGxDb29raWVzKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPENvb2tp
ZT4gZ2V0Q29va2llcyhjb25zdCBVUkwmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGdldFJh
d0Nvb2tpZXMoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25z
dCBVUkwmLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVp
bnQ2NF90PiBwYWdlSUQsIFZlY3RvcjxDb29raWU+JikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBmbHVzaENvb2tpZVN0b3JlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcyk7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29va2llc0ZvckRPTShjb25zdCBV
UkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYsIHN0ZDo6b3B0
aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwg
SW5jbHVkZVNlY3VyZUNvb2tpZXMpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFp
cjxTdHJpbmcsIGJvb2w+IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IFVSTCYg
Zmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiwgc3RkOjpvcHRpb25h
bDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNs
dWRlU2VjdXJlQ29va2llcykgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPFN0
cmluZywgYm9vbD4gY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgQ29va2llUmVx
dWVzdEhlYWRlckZpZWxkUHJveHkmKSBjb25zdDsKKwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBI
YXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPj4mIGdsb2JhbFNlc3Npb25NYXAoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUGxhdGZvcm1Db29raWVKYXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUGxhdGZvcm1Db29raWVKYXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNzg5NDNkOWNmODE4MWY2MzgwNDYzZWU4N2JmMTkzMTc0NDc2NWMzYy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1BsYXRmb3JtQ29va2llSmFyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBVUkw7Ci1jbGFz
cyBOZXR3b3JrU3RvcmFnZVNlc3Npb247Ci0KLXN0cnVjdCBDb29raWU7Ci1zdHJ1Y3QgQ29va2ll
UmVxdWVzdEhlYWRlckZpZWxkUHJveHk7Ci1zdHJ1Y3QgU2FtZVNpdGVJbmZvOwotCi1lbnVtIGNs
YXNzIEluY2x1ZGVTZWN1cmVDb29raWVzOwotCi0vLyBGSVhNRTogVGhlc2Ugc2hvdWxkIHByb2Jh
Ymx5IGJlIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiBtZW1iZXIgZnVuY3Rpb25zLgotCi1XRUJDT1JF
X0VYUE9SVCBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVzRm9yRE9NKGNvbnN0IE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJ
bmZvJiwgY29uc3QgVVJMJiwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpv
cHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyk7Ci1XRUJDT1JF
X0VYUE9SVCB2b2lkIHNldENvb2tpZXNGcm9tRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lv
biYsIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJM
Jiwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRf
dD4gcGFnZUlELCBjb25zdCBTdHJpbmcmKTsKLVdFQkNPUkVfRVhQT1JUIGJvb2wgY29va2llc0Vu
YWJsZWQoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJik7Ci1XRUJDT1JFX0VYUE9SVCBzdGQ6
OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVT
aXRlSW5mbyYsIGNvbnN0IFVSTCYsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0
ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMpOwotV0VC
Q09SRV9FWFBPUlQgc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgQ29va2llUmVxdWVz
dEhlYWRlckZpZWxkUHJveHkmKTsKLVdFQkNPUkVfRVhQT1JUIGJvb2wgZ2V0UmF3Q29va2llcyhj
b25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0
IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1l
SUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgVmVjdG9yPENvb2tpZT4mKTsKLVdF
QkNPUkVfRVhQT1JUIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lv
biYsIGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYpOwotV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBIYXNoU2V0
PFN0cmluZz4mIGhvc3RuYW1lcyk7Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIGRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGNvb2tpZUhvc3ROYW1lcyk7Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIGRlbGV0ZUFsbENv
b2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJik7Ci1XRUJDT1JFX0VYUE9SVCB2b2lk
IGRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lv
biYsIFdhbGxUaW1lKTsKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5jcHAKaW5kZXggNzU5ZDYzYTQ2ODVi
ZmRhZmE3MjcwMDViYjc0NGM4YTU2N2FkMWFjMy4uMzg5YjZlYTAzNjZhNjlhZmM2NWNhMzBmMTg1
NzFkZGY0NDBhZTRkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAK
ICNpbmNsdWRlICJDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eS5oIgogI2luY2x1ZGUgIk5l
dHdvcmtTdG9yYWdlU2Vzc2lvbi5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29va2llSmFyLmgiCiAj
aW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0
aW9uLmg+CiAKQEAgLTg1LDcgKzg0LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8c3RkOjpwYWly
PFZlY3Rvcjx1aW50OF90PiwgYm9vbD4+IGNvb2tpZURhdGFGb3JIYW5kc2hha2UoY28KICAgICAK
ICAgICBTdHJpbmcgY29va2llRGF0YVN0cmluZzsKICAgICBib29sIHNlY3VyZUNvb2tpZXNBY2Nl
c3NlZCA9IGZhbHNlOwotICAgIHN0ZDo6dGllKGNvb2tpZURhdGFTdHJpbmcsIHNlY3VyZUNvb2tp
ZXNBY2Nlc3NlZCkgPSBXZWJDb3JlOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSgqbmV0
d29ya1N0b3JhZ2VTZXNzaW9uLCBoZWFkZXJGaWVsZFByb3h5KTsKKyAgICBzdGQ6OnRpZShjb29r
aWVEYXRhU3RyaW5nLCBzZWN1cmVDb29raWVzQWNjZXNzZWQpID0gbmV0d29ya1N0b3JhZ2VTZXNz
aW9uLT5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShoZWFkZXJGaWVsZFByb3h5KTsKICAg
ICBpZiAoY29va2llRGF0YVN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBzdGQ6OnBh
aXI8VmVjdG9yPHVpbnQ4X3Q+LCBib29sPiB7IHsgfSwgc2VjdXJlQ29va2llc0FjY2Vzc2VkIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2ll
SmFyQ0ZOZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVK
YXJDRk5ldC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlMGM3NGEyN2FjMDY4
Zjc1YTlmMzMxMGZmNzRmOTY3MDkwMzU0YzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29r
aWVKYXJDRk5ldC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMjUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvb2tpZUphci5oIgotCi0jaWYgVVNFKENGVVJMQ09O
TkVDVElPTikKLQotI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFByb3h5LmgiCi0jaW5jbHVkZSAiQ29va2llc1N0cmF0ZWd5LmgiCi0jaW5jbHVk
ZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
LSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZIVFRQQ29va2llc1ByaXYu
aD4KLSNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgotI2luY2x1ZGUg
PFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLSNpbmNsdWRl
IDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNs
dWRlIDx3dGYvU29mdExpbmtpbmcuaD4KLSNpbmNsdWRlIDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotZW51bSB7Ci0gICAgQ0ZIVFRQQ29v
a2llU3RvcmFnZUFjY2VwdFBvbGljeUV4Y2x1c2l2ZWx5RnJvbU1haW5Eb2N1bWVudERvbWFpbiA9
IDMKLX07Ci0KLW5hbWVzcGFjZSBXVEYgewotCi0jZGVmaW5lIERFQ0xBUkVfQ0ZfVFlQRV9UUkFJ
VChDbGFzc05hbWUpIFwKLXRlbXBsYXRlIDw+IFwKLXN0cnVjdCBDRlR5cGVUcmFpdDxDbGFzc05h
bWUjI1JlZj4geyBcCi1zdGF0aWMgaW5saW5lIENGVHlwZUlEIHR5cGVJRCgpIHsgcmV0dXJuIENs
YXNzTmFtZSMjR2V0VHlwZUlEKCk7IH0gXAotfTsKLQotI2lmIENPTVBJTEVSKENMQU5HKQotI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25v
cmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgotI2VuZGlmCi1ERUNMQVJFX0NGX1RZUEVf
VFJBSVQoQ0ZIVFRQQ29va2llKTsKLSNpZiBDT01QSUxFUihDTEFORykKLSNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBwb3AKLSNlbmRpZgotCi0jdW5kZWYgREVDTEFSRV9DRl9UWVBFX1RSQUlUCi19
IC8vIG5hbWVzcGFjZSBXVEYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3Qg
Q0ZTdHJpbmdSZWYgc19zZXRDb29raWVLZXlDRiA9IENGU1RSKCJTZXQtQ29va2llIik7Ci1zdGF0
aWMgY29uc3QgQ0ZTdHJpbmdSZWYgc19jb29raWVDRiA9IENGU1RSKCJDb29raWUiKTsKLXN0YXRp
YyBjb25zdCBDRlN0cmluZ1JlZiBzX2NyZWF0ZWRDRiA9IENGU1RSKCJDcmVhdGVkIik7Ci0KLXN0
YXRpYyBpbmxpbmUgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjb29raWVEb21haW4oQ0ZIVFRQQ29v
a2llUmVmIGNvb2tpZSkKLXsKLSAgICByZXR1cm4gYWRvcHRDRihDRkhUVFBDb29raWVDb3B5RG9t
YWluKGNvb2tpZSkpOwotfQotCi1zdGF0aWMgZG91YmxlIGNhbm9uaWNhbENvb2tpZVRpbWUoZG91
YmxlIHRpbWUpCi17Ci0gICAgaWYgKCF0aW1lKQotICAgICAgICByZXR1cm4gdGltZTsKLQotICAg
IHJldHVybiAodGltZSArIGtDRkFic29sdXRlVGltZUludGVydmFsU2luY2UxOTcwKSAqIDEwMDA7
Ci19Ci0KLXN0YXRpYyBkb3VibGUgY29va2llQ3JlYXRlZFRpbWUoQ0ZIVFRQQ29va2llUmVmIGNv
b2tpZSkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wcyA9IGFkb3B0Q0Yo
Q0ZIVFRQQ29va2llQ29weVByb3BlcnRpZXMoY29va2llKSk7Ci0gICAgYXV0byB2YWx1ZSA9IENG
RGljdGlvbmFyeUdldFZhbHVlKHByb3BzLmdldCgpLCBzX2NyZWF0ZWRDRik7Ci0KLSAgICBhdXRv
IGFzTnVtYmVyID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPih2YWx1ZSk7Ci0gICAgaWYg
KGFzTnVtYmVyKSB7Ci0gICAgICAgIGRvdWJsZSBhc0RvdWJsZTsKLSAgICAgICAgaWYgKENGTnVt
YmVyR2V0VmFsdWUoYXNOdW1iZXIsIGtDRk51bWJlckZsb2F0NjRUeXBlLCAmYXNEb3VibGUpKQot
ICAgICAgICAgICAgcmV0dXJuIGNhbm9uaWNhbENvb2tpZVRpbWUoYXNEb3VibGUpOwotICAgICAg
ICByZXR1cm4gMC4wOwotICAgIH0KLQotICAgIGF1dG8gYXNTdHJpbmcgPSBkeW5hbWljX2NmX2Nh
c3Q8Q0ZTdHJpbmdSZWY+KHZhbHVlKTsKLSAgICBpZiAoYXNTdHJpbmcpCi0gICAgICAgIHJldHVy
biBjYW5vbmljYWxDb29raWVUaW1lKENGU3RyaW5nR2V0RG91YmxlVmFsdWUoYXNTdHJpbmcpKTsK
LQotICAgIHJldHVybiAwLjA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgQ0ZBYnNvbHV0ZVRpbWUgY29v
a2llRXhwaXJhdGlvblRpbWUoQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSkKLXsKLSAgICByZXR1cm4g
Y2Fub25pY2FsQ29va2llVGltZShDRkhUVFBDb29raWVHZXRFeHBpcmF0aW9uVGltZShjb29raWUp
KTsKLX0KLQotc3RhdGljIGlubGluZSBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNvb2tpZU5hbWUo
Q0ZIVFRQQ29va2llUmVmIGNvb2tpZSkKLXsKLSAgICByZXR1cm4gYWRvcHRDRihDRkhUVFBDb29r
aWVDb3B5TmFtZShjb29raWUpKTsKLX0KLQotc3RhdGljIGlubGluZSBSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+IGNvb2tpZVBhdGgoQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSkKLXsKLSAgICByZXR1cm4g
YWRvcHRDRihDRkhUVFBDb29raWVDb3B5UGF0aChjb29raWUpKTsKLX0KLQotc3RhdGljIGlubGlu
ZSBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNvb2tpZVZhbHVlKENGSFRUUENvb2tpZVJlZiBjb29r
aWUpCi17Ci0gICAgcmV0dXJuIGFkb3B0Q0YoQ0ZIVFRQQ29va2llQ29weVZhbHVlKGNvb2tpZSkp
OwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENGQXJyYXlSZWY+IGZpbHRlckNvb2tpZXMoQ0ZBcnJh
eVJlZiB1bmZpbHRlcmVkQ29va2llcykKLXsKLSAgICBBU1NFUlQodW5maWx0ZXJlZENvb2tpZXMp
OwotICAgIENGSW5kZXggY291bnQgPSBDRkFycmF5R2V0Q291bnQodW5maWx0ZXJlZENvb2tpZXMp
OwotICAgIFJldGFpblB0cjxDRk11dGFibGVBcnJheVJlZj4gZmlsdGVyZWRDb29raWVzID0gYWRv
cHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZSgwLCBjb3VudCwgJmtDRlR5cGVBcnJheUNhbGxCYWNr
cykpOwotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAg
Q0ZIVFRQQ29va2llUmVmIGNvb2tpZSA9IChDRkhUVFBDb29raWVSZWYpQ0ZBcnJheUdldFZhbHVl
QXRJbmRleCh1bmZpbHRlcmVkQ29va2llcywgaSk7Ci0KLSAgICAgICAgLy8gPHJkYXI6Ly9wcm9i
bGVtLzU2MzI4ODM+IENGSFRUUENvb2tpZVN0b3JhZ2Ugd291bGQgc3RvcmUgYW4gZW1wdHkgY29v
a2llLAotICAgICAgICAvLyB3aGljaCB3b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLiBXZSBo
YXZlIGEgd29ya2Fyb3VuZCBpbiBzZXRDb29raWVzKCkgdG8gcHJldmVudAotICAgICAgICAvLyB0
aGF0LCBidXQgd2UgYWxzbyBuZWVkIHRvIGF2b2lkIHNlbmRpbmcgY29va2llcyB0aGF0IHdlcmUg
cHJldmlvdXNseSBzdG9yZWQsIGFuZAotICAgICAgICAvLyB0aGVyZSdzIG5vIGhhcm0gdG8gZG9p
bmcgdGhpcyBjaGVjayBiZWNhdXNlIHN1Y2ggYSBjb29raWUgaXMgbmV2ZXIgdmFsaWQuCi0gICAg
ICAgIGlmICghQ0ZTdHJpbmdHZXRMZW5ndGgoY29va2llTmFtZShjb29raWUpLmdldCgpKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChDRkhUVFBDb29raWVJc0hUVFBPbmx5
KGNvb2tpZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBDRkFycmF5QXBwZW5k
VmFsdWUoZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29raWUpOwotICAgIH0KLSAgICByZXR1cm4g
ZmlsdGVyZWRDb29raWVzOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvcHlD
b29raWVzRm9yVVJMV2l0aEZpcnN0UGFydHlVUkwoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9u
JiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsLCBJbmNsdWRl
U2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykKLXsKLSAgICBib29sIHNlY3VyZSA9
IGluY2x1ZGVTZWN1cmVDb29raWVzID09IEluY2x1ZGVTZWN1cmVDb29raWVzOjpZZXM7Ci0KLSAg
ICBBU1NFUlQoIXNlY3VyZSB8fCAoc2VjdXJlICYmIHVybC5wcm90b2NvbElzKCJodHRwcyIpKSk7
Ci0KLSAgICBVTlVTRURfUEFSQU0oZmlyc3RQYXJ0eSk7Ci0gICAgcmV0dXJuIGFkb3B0Q0YoQ0ZI
VFRQQ29va2llU3RvcmFnZUNvcHlDb29raWVzRm9yVVJMKHNlc3Npb24uY29va2llU3RvcmFnZSgp
LmdldCgpLCB1cmwuY3JlYXRlQ0ZVUkwoKS5nZXQoKSwgc2VjdXJlKSk7Ci19Ci0KLXN0YXRpYyBD
RkFycmF5UmVmIGNyZWF0ZUNvb2tpZXMoQ0ZEaWN0aW9uYXJ5UmVmIGhlYWRlckZpZWxkcywgQ0ZV
UkxSZWYgdXJsKQotewotICAgIENGQXJyYXlSZWYgcGFyc2VkQ29va2llcyA9IENGSFRUUENvb2tp
ZUNyZWF0ZVdpdGhSZXNwb25zZUhlYWRlckZpZWxkcyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBoZWFk
ZXJGaWVsZHMsIHVybCk7Ci0gICAgaWYgKCFwYXJzZWRDb29raWVzKQotICAgICAgICBwYXJzZWRD
b29raWVzID0gQ0ZBcnJheUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAwLCAma0NGVHlw
ZUFycmF5Q2FsbEJhY2tzKTsKLQotICAgIHJldHVybiBwYXJzZWRDb29raWVzOwotfQotCi12b2lk
IHNldENvb2tpZXNGcm9tRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwg
Y29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVy
bCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRf
dD4gcGFnZUlELCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIFVOVVNFRF9QQVJBTShmcmFt
ZUlEKTsKLSAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKLSAgICAvLyA8cmRhcjovL3Byb2JsZW0v
NTYzMjg4Mz4gQ0ZIVFRQQ29va2llU3RvcmFnZSBzdG9yZXMgYW4gZW1wdHkgY29va2llLCB3aGlj
aCB3b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLgotICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsQ0YgPSB1cmwu
Y3JlYXRlQ0ZVUkwoKTsKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpcnN0UGFydHlGb3JDb29r
aWVzQ0YgPSBmaXJzdFBhcnR5LmNyZWF0ZUNGVVJMKCk7Ci0KLSAgICAvLyA8aHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzMT4sIDxyZGFyOi8vNDQwOTAzND4KLSAgICAv
LyBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzIGRvZXNuJ3QgcGFyc2UgY29va2llcyB3
aXRob3V0IGEgdmFsdWUKLSAgICBTdHJpbmcgY29va2llU3RyaW5nID0gdmFsdWUuY29udGFpbnMo
Jz0nKSA/IHZhbHVlIDogdmFsdWUgKyAiPSI7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGNvb2tpZVN0cmluZ0NGID0gY29va2llU3RyaW5nLmNyZWF0ZUNGU3RyaW5nKCk7Ci0gICAgYXV0
byBjb29raWVTdHJpbmdDRlB0ciA9IGNvb2tpZVN0cmluZ0NGLmdldCgpOwotICAgIFJldGFpblB0
cjxDRkRpY3Rpb25hcnlSZWY+IGhlYWRlckZpZWxkc0NGID0gYWRvcHRDRihDRkRpY3Rpb25hcnlD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwKLSAgICAgICAgKGNvbnN0IHZvaWQqKikmc19zZXRD
b29raWVLZXlDRiwgKGNvbnN0IHZvaWQqKikmY29va2llU3RyaW5nQ0ZQdHIsIDEsCi0gICAgICAg
ICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVD
YWxsQmFja3MpKTsKLQotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiB1bmZpbHRlcmVkQ29va2ll
cyA9IGFkb3B0Q0YoY3JlYXRlQ29va2llcyhoZWFkZXJGaWVsZHNDRi5nZXQoKSwgdXJsQ0YuZ2V0
KCkpKTsKLSAgICBDRkhUVFBDb29raWVTdG9yYWdlU2V0Q29va2llcyhzZXNzaW9uLmNvb2tpZVN0
b3JhZ2UoKS5nZXQoKSwgZmlsdGVyQ29va2llcyh1bmZpbHRlcmVkQ29va2llcy5nZXQoKSkuZ2V0
KCksIHVybENGLmdldCgpLCBmaXJzdFBhcnR5Rm9yQ29va2llc0NGLmdldCgpKTsKLX0KLQotc3Rh
dGljIGJvb2wgY29udGFpbnNTZWN1cmVDb29raWVzKENGQXJyYXlSZWYgY29va2llcykKLXsKLSAg
ICBDRkluZGV4IGNvb2tpZUNvdW50ID0gQ0ZBcnJheUdldENvdW50KGNvb2tpZXMpOwotICAgIHdo
aWxlIChjb29raWVDb3VudC0tKSB7Ci0gICAgICAgIGlmIChDRkhUVFBDb29raWVJc1NlY3VyZShj
aGVja2VkX2NmX2Nhc3Q8Q0ZIVFRQQ29va2llUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGNv
b2tpZXMsIGNvb2tpZUNvdW50KSkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVz
Rm9yRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBm
aXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRp
b25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJ
bmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykKLXsKLSAgICBVTlVTRURf
UEFSQU0oZnJhbWVJRCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7Ci0gICAgUmV0YWluUHRy
PENGQXJyYXlSZWY+IGNvb2tpZXNDRiA9IGNvcHlDb29raWVzRm9yVVJMV2l0aEZpcnN0UGFydHlV
Ukwoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgdXJsLCBpbmNsdWRlU2VjdXJlQ29va2llcyk7Ci0KLSAg
ICBhdXRvIGZpbHRlcmVkQ29va2llcyA9IGZpbHRlckNvb2tpZXMoY29va2llc0NGLmdldCgpKTsK
LQotICAgIGJvb2wgZGlkQWNjZXNzU2VjdXJlQ29va2llcyA9IGNvbnRhaW5zU2VjdXJlQ29va2ll
cyhmaWx0ZXJlZENvb2tpZXMuZ2V0KCkpOwotCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gaGVhZGVyQ0YgPSBhZG9wdENGKENGSFRUUENvb2tpZUNvcHlSZXF1ZXN0SGVhZGVyRmllbGRz
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGZpbHRlcmVkQ29va2llcy5nZXQoKSkpOwotICAgIFN0cmlu
ZyBjb29raWVTdHJpbmcgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlvbmFy
eUdldFZhbHVlKGhlYWRlckNGLmdldCgpLCBzX2Nvb2tpZUNGKSk7Ci0gICAgcmV0dXJuIHsgY29v
a2llU3RyaW5nLCBkaWRBY2Nlc3NTZWN1cmVDb29raWVzIH07Ci19Ci0KLXN0ZDo6cGFpcjxTdHJp
bmcsIGJvb2w+IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0
ZUluZm8mLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwg
c3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNs
dWRlU2VjdXJlQ29va2llcykKLXsKLSAgICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7Ci0gICAgVU5V
U0VEX1BBUkFNKHBhZ2VJRCk7Ci0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXNDRiA9
IGNvcHlDb29raWVzRm9yVVJMV2l0aEZpcnN0UGFydHlVUkwoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwg
dXJsLCBpbmNsdWRlU2VjdXJlQ29va2llcyk7Ci0KLSAgICBib29sIGRpZEFjY2Vzc1NlY3VyZUNv
b2tpZXMgPSBjb250YWluc1NlY3VyZUNvb2tpZXMoY29va2llc0NGLmdldCgpKTsKLQotICAgIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGhlYWRlckNGID0gYWRvcHRDRihDRkhUVFBDb29raWVD
b3B5UmVxdWVzdEhlYWRlckZpZWxkcyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb29raWVzQ0YuZ2V0
KCkpKTsKLSAgICBTdHJpbmcgY29va2llU3RyaW5nID0gY2hlY2tlZF9jZl9jYXN0PENGU3RyaW5n
UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShoZWFkZXJDRi5nZXQoKSwgc19jb29raWVDRikpOwot
ICAgIHJldHVybiB7IGNvb2tpZVN0cmluZywgZGlkQWNjZXNzU2VjdXJlQ29va2llcyB9OwotfQot
Ci1zdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShj
b25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IENvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFByb3h5JiBoZWFkZXJGaWVsZFByb3h5KQotewotICAgIHJldHVybiBjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShzZXNzaW9uLCBoZWFkZXJGaWVsZFByb3h5LmZpcnN0UGFy
dHksIGhlYWRlckZpZWxkUHJveHkuc2FtZVNpdGVJbmZvLCBoZWFkZXJGaWVsZFByb3h5LnVybCwg
aGVhZGVyRmllbGRQcm94eS5mcmFtZUlELCBoZWFkZXJGaWVsZFByb3h5LnBhZ2VJRCwgaGVhZGVy
RmllbGRQcm94eS5pbmNsdWRlU2VjdXJlQ29va2llcyk7Ci19Ci0KLWJvb2wgY29va2llc0VuYWJs
ZWQoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uKQotewotICAgIENGSFRUUENv
b2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3kgcG9saWN5ID0gQ0ZIVFRQQ29va2llU3RvcmFnZUdldENv
b2tpZUFjY2VwdFBvbGljeShzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSk7Ci0gICAgcmV0
dXJuIHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5T25seUZyb21NYWlu
RG9jdW1lbnREb21haW4gfHwgcG9saWN5ID09IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xp
Y3lFeGNsdXNpdmVseUZyb21NYWluRG9jdW1lbnREb21haW4gfHwgcG9saWN5ID09IENGSFRUUENv
b2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lBbHdheXM7Ci19Ci0KLWJvb2wgZ2V0UmF3Q29va2llcyhj
b25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0
eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWlu
dDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgVmVjdG9yPENv
b2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZyYW1lSUQpOwotICAgIFVO
VVNFRF9QQVJBTShwYWdlSUQpOwotICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLQotICAgIGF1dG8g
aW5jbHVkZVNlY3VyZUNvb2tpZXMgPSB1cmwucHJvdG9jb2xJcygiaHR0cHMiKSA/IEluY2x1ZGVT
ZWN1cmVDb29raWVzOjpZZXMgOiBJbmNsdWRlU2VjdXJlQ29va2llczo6Tm87Ci0KLSAgICBSZXRh
aW5QdHI8Q0ZBcnJheVJlZj4gY29va2llc0NGID0gY29weUNvb2tpZXNGb3JVUkxXaXRoRmlyc3RQ
YXJ0eVVSTChzZXNzaW9uLCBmaXJzdFBhcnR5LCB1cmwsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsK
LQotICAgIENGSW5kZXggY291bnQgPSBDRkFycmF5R2V0Q291bnQoY29va2llc0NGLmdldCgpKTsK
LSAgICByYXdDb29raWVzLnJlc2VydmVDYXBhY2l0eShjb3VudCk7Ci0KLSAgICBmb3IgKENGSW5k
ZXggaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgIENGSFRUUENvb2tpZVJlZiBjZkNv
b2tpZSA9IGNoZWNrZWRfY2ZfY2FzdDxDRkhUVFBDb29raWVSZWY+KENGQXJyYXlHZXRWYWx1ZUF0
SW5kZXgoY29va2llc0NGLmdldCgpLCBpKSk7Ci0gICAgICAgIENvb2tpZSBjb29raWU7Ci0gICAg
ICAgIGNvb2tpZS5uYW1lID0gY29va2llTmFtZShjZkNvb2tpZSkuZ2V0KCk7Ci0gICAgICAgIGNv
b2tpZS52YWx1ZSA9IGNvb2tpZVZhbHVlKGNmQ29va2llKS5nZXQoKTsKLSAgICAgICAgY29va2ll
LmRvbWFpbiA9IGNvb2tpZURvbWFpbihjZkNvb2tpZSkuZ2V0KCk7Ci0gICAgICAgIGNvb2tpZS5w
YXRoID0gY29va2llUGF0aChjZkNvb2tpZSkuZ2V0KCk7Ci0gICAgICAgIGNvb2tpZS5jcmVhdGVk
ID0gY29va2llQ3JlYXRlZFRpbWUoY2ZDb29raWUpOwotICAgICAgICBjb29raWUuZXhwaXJlcyA9
IGNvb2tpZUV4cGlyYXRpb25UaW1lKGNmQ29va2llKTsKLSAgICAgICAgY29va2llLmh0dHBPbmx5
ID0gQ0ZIVFRQQ29va2llSXNIVFRQT25seShjZkNvb2tpZSk7Ci0gICAgICAgIGNvb2tpZS5zZWN1
cmUgPSBDRkhUVFBDb29raWVJc1NlY3VyZShjZkNvb2tpZSk7Ci0gICAgICAgIGNvb2tpZS5zZXNz
aW9uID0gZmFsc2U7IC8vIEZJWE1FOiBOZWVkIEFQSSBmb3IgaWYgYSBjb29raWUgaXMgYSBzZXNz
aW9uIGNvb2tpZS4KLSAgICAgICAgcmF3Q29va2llcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShj
b29raWUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBkZWxldGVDb29r
aWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdl
UmVmPiBjb29raWVTdG9yYWdlID0gc2Vzc2lvbi5jb29raWVTdG9yYWdlKCk7Ci0KLSAgICBSZXRh
aW5QdHI8Q0ZVUkxSZWY+IHVybENGID0gdXJsLmNyZWF0ZUNGVVJMKCk7Ci0KLSAgICBib29sIHNl
bmRTZWN1cmVDb29raWVzID0gdXJsLnByb3RvY29sSXMoImh0dHBzIik7Ci0gICAgUmV0YWluUHRy
PENGQXJyYXlSZWY+IGNvb2tpZXNDRiA9IGFkb3B0Q0YoQ0ZIVFRQQ29va2llU3RvcmFnZUNvcHlD
b29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHVybENGLmdldCgpLCBzZW5kU2VjdXJl
Q29va2llcykpOwotCi0gICAgQ0ZJbmRleCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChjb29raWVz
Q0YuZ2V0KCkpOwotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAg
ICAgICAgQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSA9IGNoZWNrZWRfY2ZfY2FzdDxDRkhUVFBDb29r
aWVSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY29va2llc0NGLmdldCgpLCBpKSk7Ci0gICAg
ICAgIGlmIChTdHJpbmcoY29va2llTmFtZShjb29raWUpLmdldCgpKSA9PSBuYW1lKSB7Ci0gICAg
ICAgICAgICBDRkhUVFBDb29raWVTdG9yYWdlRGVsZXRlQ29va2llKGNvb2tpZVN0b3JhZ2UuZ2V0
KCksIGNvb2tpZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQot
dm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24m
IHNlc3Npb24sIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQotewotICAgIFJldGFpblB0cjxD
RkFycmF5UmVmPiBjb29raWVzQ0YgPSBhZG9wdENGKENGSFRUUENvb2tpZVN0b3JhZ2VDb3B5Q29v
a2llcyhzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSkpOwotICAgIGlmICghY29va2llc0NG
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBDRkluZGV4IGNvdW50ID0gQ0ZBcnJheUdldENvdW50
KGNvb2tpZXNDRi5nZXQoKSk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgewotICAgICAgICBDRkhUVFBDb29raWVSZWYgY29va2llID0gY2hlY2tlZF9jZl9jYXN0PENG
SFRUUENvb2tpZVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChjb29raWVzQ0YuZ2V0KCksIGkp
KTsKLSAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBkb21haW4gPSBjb29raWVEb21haW4o
Y29va2llKTsKLSAgICAgICAgaG9zdG5hbWVzLmFkZChkb21haW4uZ2V0KCkpOwotICAgIH0KLX0K
LQotdm9pZCBkZWxldGVBbGxDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vz
c2lvbikKLXsKLSAgICBDRkhUVFBDb29raWVTdG9yYWdlRGVsZXRlQWxsQ29va2llcyhzZXNzaW9u
LmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSk7Ci19Ci0KLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBob3N0bmFtZXMpCi17Ci19Ci0KLXZvaWQgZGVsZXRlQWxsQ29va2llc01vZGlmaWVk
U2luY2UoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgV2FsbFRpbWUpCi17Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDRlVSTENPTk5FQ1RJT04pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtTdG9y
YWdlU2Vzc2lvbkNGTmV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2Yv
TmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwCmluZGV4IDRlMzEwNTYxMGM5OWI5ZTg2ZjNk
YWIxNGRkNWZjYzNjNWQzMWQzMDcuLmY5NDJlYzk0M2U4ZmIxOGJmMTEzYmNmMGQzZDYxZGVmY2Fm
Nzg2MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0
d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwCkBAIC0zNiw2ICszNiw0
NSBAQAogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2Vsc2UKICNpbmNsdWRlIDxXZWJL
aXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjZW5kaWYKKyNpZiBV
U0UoQ0ZVUkxDT05ORUNUSU9OKQorI2luY2x1ZGUgIkNvb2tpZS5oIgorI2luY2x1ZGUgIkNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5LmgiCisjaW5jbHVkZSAiQ29va2llc1N0cmF0ZWd5Lmgi
CisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRl
IDxDRk5ldHdvcmsvQ0ZIVFRQQ29va2llc1ByaXYuaD4KKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlv
bi9Db3JlRm91bmRhdGlvbi5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+
CisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHd0Zi9Tb2Z0TGlua2luZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCitlbnVtIHsKKyAgICBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5RXhjbHVz
aXZlbHlGcm9tTWFpbkRvY3VtZW50RG9tYWluID0gMworfTsKKworbmFtZXNwYWNlIFdURiB7CisK
KyNkZWZpbmUgREVDTEFSRV9DRl9UWVBFX1RSQUlUKENsYXNzTmFtZSkgXAordGVtcGxhdGUgPD4g
XAorc3RydWN0IENGVHlwZVRyYWl0PENsYXNzTmFtZSMjUmVmPiB7IFwKK3N0YXRpYyBpbmxpbmUg
Q0ZUeXBlSUQgdHlwZUlEKCkgeyByZXR1cm4gQ2xhc3NOYW1lIyNHZXRUeXBlSUQoKTsgfSBcCit9
OworCisjaWYgQ09NUElMRVIoQ0xBTkcpCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAor
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlv
bnMiCisjZW5kaWYKK0RFQ0xBUkVfQ0ZfVFlQRV9UUkFJVChDRkhUVFBDb29raWUpOworI2lmIENP
TVBJTEVSKENMQU5HKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisKKyN1
bmRlZiBERUNMQVJFX0NGX1RZUEVfVFJBSVQKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDAyLDQgKzQ0MSwyNjMgQEAgdm9pZCBOZXR3b3Jr
U3RvcmFnZVNlc3Npb246OnNldENvb2tpZXMoY29uc3QgVmVjdG9yPENvb2tpZT4mLCBjb25zdCBV
UkwmLCBjb25zdAogfQogI2VuZGlmCiAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2lmIFVT
RShDRlVSTENPTk5FQ1RJT04pCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0
IENGU3RyaW5nUmVmIHNfc2V0Q29va2llS2V5Q0YgPSBDRlNUUigiU2V0LUNvb2tpZSIpOworc3Rh
dGljIGNvbnN0IENGU3RyaW5nUmVmIHNfY29va2llQ0YgPSBDRlNUUigiQ29va2llIik7CitzdGF0
aWMgY29uc3QgQ0ZTdHJpbmdSZWYgc19jcmVhdGVkQ0YgPSBDRlNUUigiQ3JlYXRlZCIpOworCitz
dGF0aWMgaW5saW5lIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY29va2llRG9tYWluKENGSFRUUENv
b2tpZVJlZiBjb29raWUpCit7CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZIVFRQQ29va2llQ29weURv
bWFpbihjb29raWUpKTsKK30KKworc3RhdGljIGRvdWJsZSBjYW5vbmljYWxDb29raWVUaW1lKGRv
dWJsZSB0aW1lKQoreworICAgIGlmICghdGltZSkKKyAgICAgICAgcmV0dXJuIHRpbWU7CisKKyAg
ICByZXR1cm4gKHRpbWUgKyBrQ0ZBYnNvbHV0ZVRpbWVJbnRlcnZhbFNpbmNlMTk3MCkgKiAxMDAw
OworfQorCitzdGF0aWMgZG91YmxlIGNvb2tpZUNyZWF0ZWRUaW1lKENGSFRUUENvb2tpZVJlZiBj
b29raWUpCit7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcHMgPSBhZG9wdENG
KENGSFRUUENvb2tpZUNvcHlQcm9wZXJ0aWVzKGNvb2tpZSkpOworICAgIGF1dG8gdmFsdWUgPSBD
RkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wcy5nZXQoKSwgc19jcmVhdGVkQ0YpOworCisgICAgYXV0
byBhc051bWJlciA9IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4odmFsdWUpOworICAgIGlm
IChhc051bWJlcikgeworICAgICAgICBkb3VibGUgYXNEb3VibGU7CisgICAgICAgIGlmIChDRk51
bWJlckdldFZhbHVlKGFzTnVtYmVyLCBrQ0ZOdW1iZXJGbG9hdDY0VHlwZSwgJmFzRG91YmxlKSkK
KyAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxDb29raWVUaW1lKGFzRG91YmxlKTsKKyAgICAg
ICAgcmV0dXJuIDAuMDsKKyAgICB9CisKKyAgICBhdXRvIGFzU3RyaW5nID0gZHluYW1pY19jZl9j
YXN0PENGU3RyaW5nUmVmPih2YWx1ZSk7CisgICAgaWYgKGFzU3RyaW5nKQorICAgICAgICByZXR1
cm4gY2Fub25pY2FsQ29va2llVGltZShDRlN0cmluZ0dldERvdWJsZVZhbHVlKGFzU3RyaW5nKSk7
CisKKyAgICByZXR1cm4gMC4wOwogfQorCitzdGF0aWMgaW5saW5lIENGQWJzb2x1dGVUaW1lIGNv
b2tpZUV4cGlyYXRpb25UaW1lKENGSFRUUENvb2tpZVJlZiBjb29raWUpCit7CisgICAgcmV0dXJu
IGNhbm9uaWNhbENvb2tpZVRpbWUoQ0ZIVFRQQ29va2llR2V0RXhwaXJhdGlvblRpbWUoY29va2ll
KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjb29raWVOYW1l
KENGSFRUUENvb2tpZVJlZiBjb29raWUpCit7CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZIVFRQQ29v
a2llQ29weU5hbWUoY29va2llKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiBjb29raWVQYXRoKENGSFRUUENvb2tpZVJlZiBjb29raWUpCit7CisgICAgcmV0dXJu
IGFkb3B0Q0YoQ0ZIVFRQQ29va2llQ29weVBhdGgoY29va2llKSk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjb29raWVWYWx1ZShDRkhUVFBDb29raWVSZWYgY29v
a2llKQoreworICAgIHJldHVybiBhZG9wdENGKENGSFRUUENvb2tpZUNvcHlWYWx1ZShjb29raWUp
KTsKK30KKworc3RhdGljIFJldGFpblB0cjxDRkFycmF5UmVmPiBmaWx0ZXJDb29raWVzKENGQXJy
YXlSZWYgdW5maWx0ZXJlZENvb2tpZXMpCit7CisgICAgQVNTRVJUKHVuZmlsdGVyZWRDb29raWVz
KTsKKyAgICBDRkluZGV4IGNvdW50ID0gQ0ZBcnJheUdldENvdW50KHVuZmlsdGVyZWRDb29raWVz
KTsKKyAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IGZpbHRlcmVkQ29va2llcyA9IGFk
b3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoMCwgY291bnQsICZrQ0ZUeXBlQXJyYXlDYWxsQmFj
a3MpKTsKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAg
IENGSFRUUENvb2tpZVJlZiBjb29raWUgPSAoQ0ZIVFRQQ29va2llUmVmKUNGQXJyYXlHZXRWYWx1
ZUF0SW5kZXgodW5maWx0ZXJlZENvb2tpZXMsIGkpOworCisgICAgICAgIC8vIDxyZGFyOi8vcHJv
YmxlbS81NjMyODgzPiBDRkhUVFBDb29raWVTdG9yYWdlIHdvdWxkIHN0b3JlIGFuIGVtcHR5IGNv
b2tpZSwKKyAgICAgICAgLy8gd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4gV2Ug
aGF2ZSBhIHdvcmthcm91bmQgaW4gc2V0Q29va2llcygpIHRvIHByZXZlbnQKKyAgICAgICAgLy8g
dGhhdCwgYnV0IHdlIGFsc28gbmVlZCB0byBhdm9pZCBzZW5kaW5nIGNvb2tpZXMgdGhhdCB3ZXJl
IHByZXZpb3VzbHkgc3RvcmVkLCBhbmQKKyAgICAgICAgLy8gdGhlcmUncyBubyBoYXJtIHRvIGRv
aW5nIHRoaXMgY2hlY2sgYmVjYXVzZSBzdWNoIGEgY29va2llIGlzIG5ldmVyIHZhbGlkLgorICAg
ICAgICBpZiAoIUNGU3RyaW5nR2V0TGVuZ3RoKGNvb2tpZU5hbWUoY29va2llKS5nZXQoKSkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoQ0ZIVFRQQ29va2llSXNIVFRQT25s
eShjb29raWUpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgQ0ZBcnJheUFwcGVu
ZFZhbHVlKGZpbHRlcmVkQ29va2llcy5nZXQoKSwgY29va2llKTsKKyAgICB9CisgICAgcmV0dXJu
IGZpbHRlcmVkQ29va2llczsKK30KKworc3RhdGljIFJldGFpblB0cjxDRkFycmF5UmVmPiBjb3B5
Q29va2llc0ZvclVSTFdpdGhGaXJzdFBhcnR5VVJMKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lv
biYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCwgSW5jbHVk
ZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpCit7CisgICAgYm9vbCBzZWN1cmUg
PSBpbmNsdWRlU2VjdXJlQ29va2llcyA9PSBJbmNsdWRlU2VjdXJlQ29va2llczo6WWVzOworCisg
ICAgQVNTRVJUKCFzZWN1cmUgfHwgKHNlY3VyZSAmJiB1cmwucHJvdG9jb2xJcygiaHR0cHMiKSkp
OworCisgICAgVU5VU0VEX1BBUkFNKGZpcnN0UGFydHkpOworICAgIHJldHVybiBhZG9wdENGKENG
SFRUUENvb2tpZVN0b3JhZ2VDb3B5Q29va2llc0ZvclVSTChzZXNzaW9uLmNvb2tpZVN0b3JhZ2Uo
KS5nZXQoKSwgdXJsLmNyZWF0ZUNGVVJMKCkuZ2V0KCksIHNlY3VyZSkpOworfQorCitzdGF0aWMg
Q0ZBcnJheVJlZiBjcmVhdGVDb29raWVzKENGRGljdGlvbmFyeVJlZiBoZWFkZXJGaWVsZHMsIENG
VVJMUmVmIHVybCkKK3sKKyAgICBDRkFycmF5UmVmIHBhcnNlZENvb2tpZXMgPSBDRkhUVFBDb29r
aWVDcmVhdGVXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgaGVh
ZGVyRmllbGRzLCB1cmwpOworICAgIGlmICghcGFyc2VkQ29va2llcykKKyAgICAgICAgcGFyc2Vk
Q29va2llcyA9IENGQXJyYXlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgMCwgJmtDRlR5
cGVBcnJheUNhbGxCYWNrcyk7CisKKyAgICByZXR1cm4gcGFyc2VkQ29va2llczsKK30KKwordm9p
ZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXNGcm9tRE9NKGNvbnN0IFVSTCYgZmly
c3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9u
YWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKK3sKKyAgICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7CisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+
IENGSFRUUENvb2tpZVN0b3JhZ2Ugc3RvcmVzIGFuIGVtcHR5IGNvb2tpZSwgd2hpY2ggd291bGQg
YmUgc2VudCBhcyAiQ29va2llOiA9Ii4KKyAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENGID0gdXJsLmNyZWF0ZUNG
VVJMKCk7CisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaXJzdFBhcnR5Rm9yQ29va2llc0NGID0g
Zmlyc3RQYXJ0eS5jcmVhdGVDRlVSTCgpOworCisgICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY1MzE+LCA8cmRhcjovLzQ0MDkwMzQ+CisgICAgLy8gY29va2ll
c1dpdGhSZXNwb25zZUhlYWRlckZpZWxkcyBkb2Vzbid0IHBhcnNlIGNvb2tpZXMgd2l0aG91dCBh
IHZhbHVlCisgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IHZhbHVlLmNvbnRhaW5zKCc9JykgPyB2
YWx1ZSA6IHZhbHVlICsgIj0iOworCisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjb29raWVT
dHJpbmdDRiA9IGNvb2tpZVN0cmluZy5jcmVhdGVDRlN0cmluZygpOworICAgIGF1dG8gY29va2ll
U3RyaW5nQ0ZQdHIgPSBjb29raWVTdHJpbmdDRi5nZXQoKTsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0
aW9uYXJ5UmVmPiBoZWFkZXJGaWVsZHNDRiA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtD
RkFsbG9jYXRvckRlZmF1bHQsCisgICAgICAgIChjb25zdCB2b2lkKiopJnNfc2V0Q29va2llS2V5
Q0YsIChjb25zdCB2b2lkKiopJmNvb2tpZVN0cmluZ0NGUHRyLCAxLAorICAgICAgICAma0NGVHlw
ZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tz
KSk7CisKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gdW5maWx0ZXJlZENvb2tpZXMgPSBhZG9w
dENGKGNyZWF0ZUNvb2tpZXMoaGVhZGVyRmllbGRzQ0YuZ2V0KCksIHVybENGLmdldCgpKSk7Cisg
ICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tpZXMoY29va2llU3RvcmFnZSgpLmdldCgpLCBm
aWx0ZXJDb29raWVzKHVuZmlsdGVyZWRDb29raWVzLmdldCgpKS5nZXQoKSwgdXJsQ0YuZ2V0KCks
IGZpcnN0UGFydHlGb3JDb29raWVzQ0YuZ2V0KCkpOworfQorCitzdGF0aWMgYm9vbCBjb250YWlu
c1NlY3VyZUNvb2tpZXMoQ0ZBcnJheVJlZiBjb29raWVzKQoreworICAgIENGSW5kZXggY29va2ll
Q291bnQgPSBDRkFycmF5R2V0Q291bnQoY29va2llcyk7CisgICAgd2hpbGUgKGNvb2tpZUNvdW50
LS0pIHsKKyAgICAgICAgaWYgKENGSFRUUENvb2tpZUlzU2VjdXJlKGNoZWNrZWRfY2ZfY2FzdDxD
RkhUVFBDb29raWVSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY29va2llcywgY29va2llQ291
bnQpKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3N0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6
Y29va2llc0ZvckRPTShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYs
IGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9w
dGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1
cmVDb29raWVzKSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsKKyAgICBVTlVT
RURfUEFSQU0ocGFnZUlEKTsKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY29va2llc0NGID0g
Y29weUNvb2tpZXNGb3JVUkxXaXRoRmlyc3RQYXJ0eVVSTCgqdGhpcywgZmlyc3RQYXJ0eSwgdXJs
LCBpbmNsdWRlU2VjdXJlQ29va2llcyk7CisKKyAgICBhdXRvIGZpbHRlcmVkQ29va2llcyA9IGZp
bHRlckNvb2tpZXMoY29va2llc0NGLmdldCgpKTsKKworICAgIGJvb2wgZGlkQWNjZXNzU2VjdXJl
Q29va2llcyA9IGNvbnRhaW5zU2VjdXJlQ29va2llcyhmaWx0ZXJlZENvb2tpZXMuZ2V0KCkpOwor
CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaGVhZGVyQ0YgPSBhZG9wdENGKENGSFRU
UENvb2tpZUNvcHlSZXF1ZXN0SGVhZGVyRmllbGRzKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZpbHRl
cmVkQ29va2llcy5nZXQoKSkpOworICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBjaGVja2VkX2Nm
X2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGhlYWRlckNGLmdldCgpLCBz
X2Nvb2tpZUNGKSk7CisgICAgcmV0dXJuIHsgY29va2llU3RyaW5nLCBkaWRBY2Nlc3NTZWN1cmVD
b29raWVzIH07Cit9CisKK3N0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgVVJMJiBmaXJzdFBhcnR5
LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50
NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2Vj
dXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykgY29uc3QKK3sKKyAgICBVTlVTRURfUEFS
QU0oZnJhbWVJRCk7CisgICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7CisgICAgUmV0YWluUHRyPENG
QXJyYXlSZWY+IGNvb2tpZXNDRiA9IGNvcHlDb29raWVzRm9yVVJMV2l0aEZpcnN0UGFydHlVUkwo
KnRoaXMsIGZpcnN0UGFydHksIHVybCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOworCisgICAgYm9v
bCBkaWRBY2Nlc3NTZWN1cmVDb29raWVzID0gY29udGFpbnNTZWN1cmVDb29raWVzKGNvb2tpZXND
Ri5nZXQoKSk7CisKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBoZWFkZXJDRiA9IGFk
b3B0Q0YoQ0ZIVFRQQ29va2llQ29weVJlcXVlc3RIZWFkZXJGaWVsZHMoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgY29va2llc0NGLmdldCgpKSk7CisgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IGNoZWNr
ZWRfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaGVhZGVyQ0YuZ2V0
KCksIHNfY29va2llQ0YpKTsKKyAgICByZXR1cm4geyBjb29raWVTdHJpbmcsIGRpZEFjY2Vzc1Nl
Y3VyZUNvb2tpZXMgfTsKK30KKworc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBDb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRQcm94eSYgaGVhZGVyRmllbGRQcm94eSkgY29uc3QKK3sKKyAgICByZXR1
cm4gY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoaGVhZGVyRmllbGRQcm94eS5maXJzdFBh
cnR5LCBoZWFkZXJGaWVsZFByb3h5LnNhbWVTaXRlSW5mbywgaGVhZGVyRmllbGRQcm94eS51cmws
IGhlYWRlckZpZWxkUHJveHkuZnJhbWVJRCwgaGVhZGVyRmllbGRQcm94eS5wYWdlSUQsIGhlYWRl
ckZpZWxkUHJveHkuaW5jbHVkZVNlY3VyZUNvb2tpZXMpOworfQorCitib29sIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6Y29va2llc0VuYWJsZWQoKSBjb25zdAoreworICAgIENGSFRUUENvb2tpZVN0
b3JhZ2VBY2NlcHRQb2xpY3kgcG9saWN5ID0gQ0ZIVFRQQ29va2llU3RvcmFnZUdldENvb2tpZUFj
Y2VwdFBvbGljeShjb29raWVTdG9yYWdlKCkuZ2V0KCkpOworICAgIHJldHVybiBwb2xpY3kgPT0g
Q0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWlu
IHx8IHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5RXhjbHVzaXZlbHlG
cm9tTWFpbkRvY3VtZW50RG9tYWluIHx8IHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdlQWNj
ZXB0UG9saWN5QWx3YXlzOworfQorCitib29sIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0UmF3
Q29va2llcyhjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYsIGNvbnN0
IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFs
PHVpbnQ2NF90PiBwYWdlSUQsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKSBjb25zdAorewor
ICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsKKyAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKKyAg
ICByYXdDb29raWVzLmNsZWFyKCk7CisKKyAgICBhdXRvIGluY2x1ZGVTZWN1cmVDb29raWVzID0g
dXJsLnByb3RvY29sSXMoImh0dHBzIikgPyBJbmNsdWRlU2VjdXJlQ29va2llczo6WWVzIDogSW5j
bHVkZVNlY3VyZUNvb2tpZXM6Ok5vOworCisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tp
ZXNDRiA9IGNvcHlDb29raWVzRm9yVVJMV2l0aEZpcnN0UGFydHlVUkwoKnRoaXMsIGZpcnN0UGFy
dHksIHVybCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOworCisgICAgQ0ZJbmRleCBjb3VudCA9IENG
QXJyYXlHZXRDb3VudChjb29raWVzQ0YuZ2V0KCkpOworICAgIHJhd0Nvb2tpZXMucmVzZXJ2ZUNh
cGFjaXR5KGNvdW50KTsKKworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNvdW50OyBpKysp
IHsKKyAgICAgICAgQ0ZIVFRQQ29va2llUmVmIGNmQ29va2llID0gY2hlY2tlZF9jZl9jYXN0PENG
SFRUUENvb2tpZVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChjb29raWVzQ0YuZ2V0KCksIGkp
KTsKKyAgICAgICAgQ29va2llIGNvb2tpZTsKKyAgICAgICAgY29va2llLm5hbWUgPSBjb29raWVO
YW1lKGNmQ29va2llKS5nZXQoKTsKKyAgICAgICAgY29va2llLnZhbHVlID0gY29va2llVmFsdWUo
Y2ZDb29raWUpLmdldCgpOworICAgICAgICBjb29raWUuZG9tYWluID0gY29va2llRG9tYWluKGNm
Q29va2llKS5nZXQoKTsKKyAgICAgICAgY29va2llLnBhdGggPSBjb29raWVQYXRoKGNmQ29va2ll
KS5nZXQoKTsKKyAgICAgICAgY29va2llLmNyZWF0ZWQgPSBjb29raWVDcmVhdGVkVGltZShjZkNv
b2tpZSk7CisgICAgICAgIGNvb2tpZS5leHBpcmVzID0gY29va2llRXhwaXJhdGlvblRpbWUoY2ZD
b29raWUpOworICAgICAgICBjb29raWUuaHR0cE9ubHkgPSBDRkhUVFBDb29raWVJc0hUVFBPbmx5
KGNmQ29va2llKTsKKyAgICAgICAgY29va2llLnNlY3VyZSA9IENGSFRUUENvb2tpZUlzU2VjdXJl
KGNmQ29va2llKTsKKyAgICAgICAgY29va2llLnNlc3Npb24gPSBmYWxzZTsgLy8gRklYTUU6IE5l
ZWQgQVBJIGZvciBpZiBhIGNvb2tpZSBpcyBhIHNlc3Npb24gY29va2llLgorICAgICAgICByYXdD
b29raWVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGNvb2tpZSkpOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2ll
KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgUmV0YWlu
UHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSB0aGlzLT5jb29raWVT
dG9yYWdlKCk7CisKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENGID0gdXJsLmNyZWF0ZUNG
VVJMKCk7CisKKyAgICBib29sIHNlbmRTZWN1cmVDb29raWVzID0gdXJsLnByb3RvY29sSXMoImh0
dHBzIik7CisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXNDRiA9IGFkb3B0Q0YoQ0ZI
VFRQQ29va2llU3RvcmFnZUNvcHlDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHVy
bENGLmdldCgpLCBzZW5kU2VjdXJlQ29va2llcykpOworCisgICAgQ0ZJbmRleCBjb3VudCA9IENG
QXJyYXlHZXRDb3VudChjb29raWVzQ0YuZ2V0KCkpOworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsg
aSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSA9IGNoZWNr
ZWRfY2ZfY2FzdDxDRkhUVFBDb29raWVSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY29va2ll
c0NGLmdldCgpLCBpKSk7CisgICAgICAgIGlmIChTdHJpbmcoY29va2llTmFtZShjb29raWUpLmdl
dCgpKSA9PSBuYW1lKSB7CisgICAgICAgICAgICBDRkhUVFBDb29raWVTdG9yYWdlRGVsZXRlQ29v
a2llKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQoreworICAgIFJldGFp
blB0cjxDRkFycmF5UmVmPiBjb29raWVzQ0YgPSBhZG9wdENGKENGSFRUUENvb2tpZVN0b3JhZ2VD
b3B5Q29va2llcyhjb29raWVTdG9yYWdlKCkuZ2V0KCkpKTsKKyAgICBpZiAoIWNvb2tpZXNDRikK
KyAgICAgICAgcmV0dXJuOworCisgICAgQ0ZJbmRleCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChj
b29raWVzQ0YuZ2V0KCkpOworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKKyAgICAgICAgQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSA9IGNoZWNrZWRfY2ZfY2FzdDxDRkhU
VFBDb29raWVSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY29va2llc0NGLmdldCgpLCBpKSk7
CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZG9tYWluID0gY29va2llRG9tYWluKGNv
b2tpZSk7CisgICAgICAgIGhvc3RuYW1lcy5hZGQoZG9tYWluLmdldCgpKTsKKyAgICB9Cit9CisK
K3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKCkKK3sKKyAgICBD
RkhUVFBDb29raWVTdG9yYWdlRGVsZXRlQWxsQ29va2llcyhjb29raWVTdG9yYWdlKCkuZ2V0KCkp
OworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKQoreworfQorCit2b2lkIE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoV2FsbFRpbWUp
Cit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRlVSTENP
Tk5FQ1RJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nv
Y29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbQppbmRleCAzYTNk
ZjBmYTUwMzZjYTE1OTliYTMyM2IwNTFhYjMwMzI5MWJmYjk0Li4zODVjNDRiOTlmZjVjYjYzMzE0
MmUzMzgxZmEyYWRlMTIxMTFjMTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29j
b2EubW0KQEAgLTI3LDExICsyNywyNyBAQAogI2ltcG9ydCAiTmV0d29ya1N0b3JhZ2VTZXNzaW9u
LmgiCiAKICNpbXBvcnQgIkNvb2tpZS5oIgorI2ltcG9ydCAiQ29va2llUmVxdWVzdEhlYWRlckZp
ZWxkUHJveHkuaCIKICNpbXBvcnQgIkNvb2tpZVN0b3JhZ2VPYnNlcnZlci5oIgorI2ltcG9ydCAi
Q29va2llc1N0cmF0ZWd5LmgiCisjaW1wb3J0ICJTYW1lU2l0ZUluZm8uaCIKICNpbXBvcnQgIlVS
TC5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4KICNpbXBvcnQgPHd0Zi9C
bG9ja09iakNFeGNlcHRpb25zLmg+CisjaW1wb3J0IDx3dGYvT3B0aW9uYWwuaD4KICNpbXBvcnQg
PHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CisKK0BpbnRlcmZhY2UgTlNVUkwgKCkKKy0gKENGVVJMUmVmKV9jZnVybDsKK0BlbmQKKwor
I2lmIChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0g
MTAxNDAwKSB8fCAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxMjAwMDApCitAaW50ZXJmYWNlIE5TSFRUUENvb2tpZVN0b3JhZ2UgKFN0YWdpbmcp
CistICh2b2lkKV9nZXRDb29raWVzRm9yVVJMOihOU1VSTCAqKXVybCBtYWluRG9jdW1lbnRVUkw6
KE5TVVJMICopbWFpbkRvY3VtZW50VVJMIHBhcnRpdGlvbjooTlNTdHJpbmcgKilwYXJ0aXRpb24g
cG9saWN5UHJvcGVydGllczooTlNEaWN0aW9uYXJ5Kilwcm9wcyBjb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikoTlNBcnJheSAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQpX3NldENvb2tp
ZXM6KE5TQXJyYXkgKiljb29raWVzIGZvclVSTDooTlNVUkwgKilVUkwgbWFpbkRvY3VtZW50VVJM
OihOU1VSTCAqKW1haW5Eb2N1bWVudFVSTCBwb2xpY3lQcm9wZXJ0aWVzOihOU0RpY3Rpb25hcnkq
KSBwcm9wczsKK0BlbmQKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE1MCw0
ICsxNjYsNDIwIEBAIENGVVJMU3RvcmFnZVNlc3Npb25SZWYgY3JlYXRlUHJpdmF0ZVN0b3JhZ2VT
ZXNzaW9uKENGU3RyaW5nUmVmIGlkZW50aWZpZXIpCiAgICAgcmV0dXJuIHN0b3JhZ2VTZXNzaW9u
LmxlYWtSZWYoKTsKIH0KIAorc3RhdGljIE5TQXJyYXkgKmh0dHBDb29raWVzKENGSFRUUENvb2tp
ZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZp
bGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7CisgICAgaWYgKCFj
b29raWVTdG9yYWdlKQorICAgICAgICByZXR1cm4gW1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJl
ZEhUVFBDb29raWVTdG9yYWdlXSBjb29raWVzXTsKKyAgICAKKyAgICBhdXRvIGNvb2tpZXMgPSBh
ZG9wdENGKENGSFRUUENvb2tpZVN0b3JhZ2VDb3B5Q29va2llcyhjb29raWVTdG9yYWdlKSk7Cisg
ICAgcmV0dXJuIFtOU0hUVFBDb29raWUgX2NmMm5zQ29va2llczpjb29raWVzLmdldCgpXTsKK30K
Kworc3RhdGljIHZvaWQgZGVsZXRlSFRUUENvb2tpZShDRkhUVFBDb29raWVTdG9yYWdlUmVmIGNv
b2tpZVN0b3JhZ2UsIE5TSFRUUENvb2tpZSAqY29va2llKQoreworICAgIEFTU0VSVChoYXNQcm9j
ZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKKyAg
ICBpZiAoIWNvb2tpZVN0b3JhZ2UpIHsKKyAgICAgICAgW1tOU0hUVFBDb29raWVTdG9yYWdlIHNo
YXJlZEhUVFBDb29raWVTdG9yYWdlXSBkZWxldGVDb29raWU6Y29va2llXTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBDRkhUVFBDb29raWVTdG9yYWdlRGVsZXRlQ29va2llKGNv
b2tpZVN0b3JhZ2UsIFtjb29raWUgX0dldEludGVybmFsQ0ZIVFRQQ29va2llXSk7Cit9CisKKyNp
ZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEw
MTQwMCkgfHwgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTIwMDAwKQorc3RhdGljIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IHBvbGljeVByb3Bl
cnRpZXMoY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIE5TVVJMICp1cmwpCit7Cisg
ICAgc3RhdGljIE5TVVJMICplbXB0eVVSTCA9IFtbTlNVUkwgYWxsb2NdIGluaXRXaXRoU3RyaW5n
OkAiIl07CisgICAgTlNEaWN0aW9uYXJ5ICpwb2xpY3lQcm9wZXJ0aWVzID0gQHsKKyAgICAgICAg
QCJfa0NGSFRUUENvb2tpZVBvbGljeVByb3BlcnR5U2l0ZUZvckNvb2tpZXMiOiBzYW1lU2l0ZUlu
Zm8uaXNTYW1lU2l0ZSA/IHVybCA6IGVtcHR5VVJMLAorICAgICAgICBAIl9rQ0ZIVFRQQ29va2ll
UG9saWN5UHJvcGVydHlJc1RvcExldmVsTmF2aWdhdGlvbiI6IFtOU051bWJlciBudW1iZXJXaXRo
Qm9vbDpzYW1lU2l0ZUluZm8uaXNUb3BTaXRlXSwKKyAgICB9OworICAgIHJldHVybiBwb2xpY3lQ
cm9wZXJ0aWVzOworfQorI2VuZGlmCisKK3N0YXRpYyBOU0FycmF5ICpjb29raWVzRm9yVVJMKE5T
SFRUUENvb2tpZVN0b3JhZ2UgKnN0b3JhZ2UsIE5TVVJMICp1cmwsIE5TVVJMICptYWluRG9jdW1l
bnRVUkwsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8U2FtZVNpdGVJbmZvPiYgc2FtZVNpdGVJbmZvLCBO
U1N0cmluZyAqcGFydGl0aW9uID0gbnVsbHB0cikKK3sKKyAgICAvLyBUaGUgX2dldENvb2tpZXNG
b3JVUkw6IG1ldGhvZCBjYWxscyB0aGUgY29tcGxldGlvbkhhbmRsZXIgc3luY2hyb25vdXNseS4g
V2UgdXNlIHN0ZDo6b3B0aW9uYWw8PiB0byBlbnN1cmUgdGhpcyBpbnZhcmlhbnQuCisgICAgc3Rk
OjpvcHRpb25hbDxSZXRhaW5QdHI8TlNBcnJheSAqPj4gY29va2llc1B0cjsKKyAgICBhdXRvIGNv
bXBsZXRpb25IYW5kbGVyID0gWyZjb29raWVzUHRyXSAoTlNBcnJheSAqY29va2llcykgeworICAg
ICAgICBjb29raWVzUHRyID0gcmV0YWluUHRyKGNvb2tpZXMpOworICAgIH07CisjaWYgKFBMQVRG
T1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE0MDApIHx8
IChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEy
MDAwMCkKKyAgICBpZiAoW3N0b3JhZ2UgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihfZ2V0
Q29va2llc0ZvclVSTDptYWluRG9jdW1lbnRVUkw6cGFydGl0aW9uOnBvbGljeVByb3BlcnRpZXM6
Y29tcGxldGlvbkhhbmRsZXI6KV0pCisgICAgICAgIFtzdG9yYWdlIF9nZXRDb29raWVzRm9yVVJM
OnVybCBtYWluRG9jdW1lbnRVUkw6bWFpbkRvY3VtZW50VVJMIHBhcnRpdGlvbjpwYXJ0aXRpb24g
cG9saWN5UHJvcGVydGllczpzYW1lU2l0ZUluZm8gPyBwb2xpY3lQcm9wZXJ0aWVzKHNhbWVTaXRl
SW5mby52YWx1ZSgpLCB1cmwpLmdldCgpIDogbnVsbHB0ciBjb21wbGV0aW9uSGFuZGxlcjpjb21w
bGV0aW9uSGFuZGxlcl07CisgICAgZWxzZQorICAgICAgICBbc3RvcmFnZSBfZ2V0Q29va2llc0Zv
clVSTDp1cmwgbWFpbkRvY3VtZW50VVJMOm1haW5Eb2N1bWVudFVSTCBwYXJ0aXRpb246cGFydGl0
aW9uIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKKyNlbHNlCisgICAgW3N0
b3JhZ2UgX2dldENvb2tpZXNGb3JVUkw6dXJsIG1haW5Eb2N1bWVudFVSTDptYWluRG9jdW1lbnRV
UkwgcGFydGl0aW9uOnBhcnRpdGlvbiBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxl
cl07CisgICAgVU5VU0VEX1BBUkFNKHNhbWVTaXRlSW5mbyk7CisjZW5kaWYKKyAgICBBU1NFUlQo
ISFjb29raWVzUHRyKTsKKyAgICByZXR1cm4gY29va2llc1B0ci0+YXV0b3JlbGVhc2UoKTsKK30K
Kworc3RhdGljIHZvaWQgc2V0SFRUUENvb2tpZXNGb3JVUkwoQ0ZIVFRQQ29va2llU3RvcmFnZVJl
ZiBjb29raWVTdG9yYWdlLCBOU0FycmF5ICpjb29raWVzLCBOU1VSTCAqdXJsLCBOU1VSTCAqbWFp
bkRvY3VtZW50VVJMLCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbykKK3sKKyAgICBB
U1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdD
b29raWVzKSk7CisgICAgaWYgKCFjb29raWVTdG9yYWdlKSB7CisjaWYgKFBMQVRGT1JNKE1BQykg
JiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE0MDApIHx8IChQTEFURk9S
TShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEyMDAwMCkKKyAg
ICAgICAgaWYgKFtOU0hUVFBDb29raWVTdG9yYWdlIGluc3RhbmNlc1Jlc3BvbmRUb1NlbGVjdG9y
OkBzZWxlY3Rvcihfc2V0Q29va2llczpmb3JVUkw6bWFpbkRvY3VtZW50VVJMOnBvbGljeVByb3Bl
cnRpZXM6KV0pCisgICAgICAgICAgICBbW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENv
b2tpZVN0b3JhZ2VdIF9zZXRDb29raWVzOmNvb2tpZXMgZm9yVVJMOnVybCBtYWluRG9jdW1lbnRV
Ukw6bWFpbkRvY3VtZW50VVJMIHBvbGljeVByb3BlcnRpZXM6cG9saWN5UHJvcGVydGllcyhzYW1l
U2l0ZUluZm8sIHVybCkuZ2V0KCldOworICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAg
IFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2ll
czpjb29raWVzIGZvclVSTDp1cmwgbWFpbkRvY3VtZW50VVJMOm1haW5Eb2N1bWVudFVSTF07Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE0MDApIHx8IChQTEFURk9STShJT1MpICYmIF9fSVBI
T05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEyMDAwMCkKKyAgICBpZiAoW05TSFRUUENv
b2tpZVN0b3JhZ2UgaW5zdGFuY2VzUmVzcG9uZFRvU2VsZWN0b3I6QHNlbGVjdG9yKF9zZXRDb29r
aWVzOmZvclVSTDptYWluRG9jdW1lbnRVUkw6cG9saWN5UHJvcGVydGllczopXSkgeworICAgICAg
ICAvLyBGSVhNRTogU3RvcCBjcmVhdGluZyBhIG5ldyBOU0hUVFBDb29raWVTdG9yYWdlIG9iamVj
dCBlYWNoIHRpbWUgd2Ugd2FudCB0byBxdWVyeSB0aGUgY29va2llIGphci4KKyAgICAgICAgLy8g
TmV0d29ya1N0b3JhZ2VTZXNzaW9uIGNvdWxkIGluc3RlYWQga2VlcCBhIE5TSFRUUENvb2tpZVN0
b3JhZ2Ugb2JqZWN0IGZvciB1cy4KKyAgICAgICAgUmV0YWluUHRyPE5TSFRUUENvb2tpZVN0b3Jh
Z2U+IG5zQ29va2llU3RvcmFnZSA9IGFkb3B0TlMoW1tOU0hUVFBDb29raWVTdG9yYWdlIGFsbG9j
XSBfaW5pdFdpdGhDRkhUVFBDb29raWVTdG9yYWdlOmNvb2tpZVN0b3JhZ2VdKTsKKyAgICAgICAg
W25zQ29va2llU3RvcmFnZSBfc2V0Q29va2llczpjb29raWVzIGZvclVSTDp1cmwgbWFpbkRvY3Vt
ZW50VVJMOm1haW5Eb2N1bWVudFVSTCBwb2xpY3lQcm9wZXJ0aWVzOnBvbGljeVByb3BlcnRpZXMo
c2FtZVNpdGVJbmZvLCB1cmwpLmdldCgpXTsKKyAgICB9IGVsc2UgeworI2VuZGlmCisgICAgICAg
IGF1dG8gY2ZDb29raWVzID0gYWRvcHRDRihbTlNIVFRQQ29va2llIF9uczJjZkNvb2tpZXM6Y29v
a2llc10pOworICAgICAgICBDRkhUVFBDb29raWVTdG9yYWdlU2V0Q29va2llcyhjb29raWVTdG9y
YWdlLCBjZkNvb2tpZXMuZ2V0KCksIFt1cmwgX2NmdXJsXSwgW21haW5Eb2N1bWVudFVSTCBfY2Z1
cmxdKTsKKyNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDEwMTQwMCkgfHwgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTIwMDAwKQorICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNh
bWVTaXRlSW5mbyk7CisjZW5kaWYKK30KKworc3RhdGljIE5TQXJyYXkgKmh0dHBDb29raWVzRm9y
VVJMKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSwgTlNVUkwgKmZpcnN0UGFy
dHksIGNvbnN0IHN0ZDo6b3B0aW9uYWw8U2FtZVNpdGVJbmZvPiYgc2FtZVNpdGVJbmZvLCBOU1VS
TCAqdXJsKQoreworICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxl
Z2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKKyAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCisgICAg
ICAgIGNvb2tpZVN0b3JhZ2UgPSBfQ0ZIVFRQQ29va2llU3RvcmFnZUdldERlZmF1bHQoa0NGQWxs
b2NhdG9yRGVmYXVsdCk7CisKKyAgICAvLyBGSVhNRTogU3RvcCBjcmVhdGluZyBhIG5ldyBOU0hU
VFBDb29raWVTdG9yYWdlIG9iamVjdCBlYWNoIHRpbWUgd2Ugd2FudCB0byBxdWVyeSB0aGUgY29v
a2llIGphci4KKyAgICAvLyBOZXR3b3JrU3RvcmFnZVNlc3Npb24gY291bGQgaW5zdGVhZCBrZWVw
IGEgTlNIVFRQQ29va2llU3RvcmFnZSBvYmplY3QgZm9yIHVzLgorICAgIFJldGFpblB0cjxOU0hU
VFBDb29raWVTdG9yYWdlPiBuc0Nvb2tpZVN0b3JhZ2UgPSBhZG9wdE5TKFtbTlNIVFRQQ29va2ll
U3RvcmFnZSBhbGxvY10gX2luaXRXaXRoQ0ZIVFRQQ29va2llU3RvcmFnZTpjb29raWVTdG9yYWdl
XSk7CisgICAgcmV0dXJuIGNvb2tpZXNGb3JVUkwobnNDb29raWVTdG9yYWdlLmdldCgpLCB1cmws
IGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbyk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8TlNBcnJh
eT4gZmlsdGVyQ29va2llcyhOU0FycmF5ICp1bmZpbHRlcmVkQ29va2llcykKK3sKKyAgICBBU1NF
UlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29r
aWVzKSk7CisgICAgTlNVSW50ZWdlciBjb3VudCA9IFt1bmZpbHRlcmVkQ29va2llcyBjb3VudF07
CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBmaWx0ZXJlZENvb2tpZXMgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y291bnRdKTsKKworICAg
IGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgTlNIVFRQ
Q29va2llICpjb29raWUgPSAoTlNIVFRQQ29va2llICopW3VuZmlsdGVyZWRDb29raWVzIG9iamVj
dEF0SW5kZXg6aV07CisKKyAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IE9uIDEw
LjUsIE5TSFRUUENvb2tpZVN0b3JhZ2Ugd291bGQgc3RvcmUgYW4gZW1wdHkgY29va2llLAorICAg
ICAgICAvLyB3aGljaCB3b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLiBXZSBoYXZlIGEgd29y
a2Fyb3VuZCBpbiBzZXRDb29raWVzKCkgdG8gcHJldmVudAorICAgICAgICAvLyB0aGF0LCBidXQg
d2UgYWxzbyBuZWVkIHRvIGF2b2lkIHNlbmRpbmcgY29va2llcyB0aGF0IHdlcmUgcHJldmlvdXNs
eSBzdG9yZWQsIGFuZAorICAgICAgICAvLyB0aGVyZSdzIG5vIGhhcm0gdG8gZG9pbmcgdGhpcyBj
aGVjayBiZWNhdXNlIHN1Y2ggYSBjb29raWUgaXMgbmV2ZXIgdmFsaWQuCisgICAgICAgIGlmICgh
W1tjb29raWUgbmFtZV0gbGVuZ3RoXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGlmIChbY29va2llIGlzSFRUUE9ubHldKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgW2ZpbHRlcmVkQ29va2llcy5nZXQoKSBhZGRPYmplY3Q6Y29va2llXTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmlsdGVyZWRDb29raWVzOworfQorCisjaWYgSEFWRShDRk5FVFdPUktfU1RPUkFH
RV9QQVJUSVRJT05JTkcpCisKK3N0YXRpYyBOU0FycmF5ICphcHBseVBhcnRpdGlvblRvQ29va2ll
cyhOU1N0cmluZyAqcGFydGl0aW9uLCBOU0FycmF5ICpjb29raWVzKQoreworICAgIEFTU0VSVCho
YXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMp
KTsKKworICAgIC8vIEZJWE1FIDI0NzQ3NzM5OiBDRk5ldHdvcmsgc2hvdWxkIGV4cG9zZSB0aGlz
IGtleSBhcyBTUEkKKyAgICBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBwYXJ0aXRpb25LZXkgPSBA
IlN0b3JhZ2VQYXJ0aXRpb24iOworCisgICAgTlNNdXRhYmxlQXJyYXkgKnBhcnRpdGlvbmVkQ29v
a2llcyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpjb29raWVzLmNvdW50XTsK
KyAgICBmb3IgKE5TSFRUUENvb2tpZSAqY29va2llIGluIGNvb2tpZXMpIHsKKyAgICAgICAgUmV0
YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IHByb3BlcnRpZXMgPSBhZG9wdE5TKFtjb29raWUu
cHJvcGVydGllcyBtdXRhYmxlQ29weV0pOworICAgICAgICBbcHJvcGVydGllcyBzZXRPYmplY3Q6
cGFydGl0aW9uIGZvcktleTpwYXJ0aXRpb25LZXldOworICAgICAgICBbcGFydGl0aW9uZWRDb29r
aWVzIGFkZE9iamVjdDpbTlNIVFRQQ29va2llIGNvb2tpZVdpdGhQcm9wZXJ0aWVzOnByb3BlcnRp
ZXMuZ2V0KCldXTsKKyAgICB9CisKKyAgICByZXR1cm4gcGFydGl0aW9uZWRDb29raWVzOworfQor
CitzdGF0aWMgYm9vbCBjb29raWVzQXJlQmxvY2tlZEZvclVSTChjb25zdCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwp
Cit7CisgICAgcmV0dXJuIHNlc3Npb24uc2hvdWxkQmxvY2tDb29raWVzKGZpcnN0UGFydHksIHVy
bCk7Cit9CisKK3N0YXRpYyBOU0FycmF5ICpjb29raWVzSW5QYXJ0aXRpb25Gb3JVUkwoY29uc3Qg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNv
bnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRp
b25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlEKQor
eworICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFj
Y2Vzc1Jhd0Nvb2tpZXMpKTsKKyAgICBTdHJpbmcgcGFydGl0aW9uID0gc2Vzc2lvbi5jb29raWVT
dG9yYWdlUGFydGl0aW9uKGZpcnN0UGFydHksIHVybCwgZnJhbWVJRCwgcGFnZUlEKTsKKyAgICBp
ZiAocGFydGl0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIC8vIEZJ
WE1FOiBTdG9wIGNyZWF0aW5nIGEgbmV3IE5TSFRUUENvb2tpZVN0b3JhZ2Ugb2JqZWN0IGVhY2gg
dGltZSB3ZSB3YW50IHRvIHF1ZXJ5IHRoZSBjb29raWUgamFyLgorICAgIC8vIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiBjb3VsZCBpbnN0ZWFkIGtlZXAgYSBOU0hUVFBDb29raWVTdG9yYWdlIG9iamVj
dCBmb3IgdXMuCisgICAgUmV0YWluUHRyPE5TSFRUUENvb2tpZVN0b3JhZ2U+IGNvb2tpZVN0b3Jh
Z2U7CisgICAgaWYgKGF1dG8gc3RvcmFnZSA9IHNlc3Npb24uY29va2llU3RvcmFnZSgpKQorICAg
ICAgICBjb29raWVTdG9yYWdlID0gYWRvcHROUyhbW05TSFRUUENvb2tpZVN0b3JhZ2UgYWxsb2Nd
IF9pbml0V2l0aENGSFRUUENvb2tpZVN0b3JhZ2U6c3RvcmFnZS5nZXQoKV0pOworICAgIGVsc2UK
KyAgICAgICAgY29va2llU3RvcmFnZSA9IFtOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBD
b29raWVTdG9yYWdlXTsKKyAgICByZXR1cm4gY29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLmdl
dCgpLCB1cmwsIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgcGFydGl0aW9uKTsKK30KKworI2Vu
ZGlmIC8vIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQorICAgIAorc3RhdGlj
IE5TQXJyYXkgKmNvb2tpZXNGb3JVUkwoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNz
aW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJ
bmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3Rk
OjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlEKQoreworI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JB
R0VfUEFSVElUSU9OSU5HKQorICAgIGlmIChjb29raWVzQXJlQmxvY2tlZEZvclVSTChzZXNzaW9u
LCBmaXJzdFBhcnR5LCB1cmwpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIGlmIChO
U0FycmF5ICpjb29raWVzID0gY29va2llc0luUGFydGl0aW9uRm9yVVJMKHNlc3Npb24sIGZpcnN0
UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQpKQorICAgICAgICByZXR1
cm4gY29va2llczsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGZyYW1lSUQpOworICAgIFVOVVNF
RF9QQVJBTShwYWdlSUQpOworI2VuZGlmCisgICAgcmV0dXJuIGh0dHBDb29raWVzRm9yVVJMKHNl
c3Npb24uY29va2llU3RvcmFnZSgpLmdldCgpLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVy
bCk7Cit9CisKK2VudW0gSW5jbHVkZUhUVFBPbmx5T3JOb3QgeyBEb05vdEluY2x1ZGVIVFRQT25s
eSwgSW5jbHVkZUhUVFBPbmx5IH07CitzdGF0aWMgc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29v
a2llc0ZvclNlc3Npb24oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25z
dCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25z
dCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25h
bDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlSFRUUE9ubHlPck5vdCBpbmNsdWRlSFRUUE9ubHks
IEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKQoreworICAgIEFTU0VS
VChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tp
ZXMpKTsKKworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIE5TQXJyYXkg
KmNvb2tpZXMgPSBjb29raWVzRm9yVVJMKHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5m
bywgdXJsLCBmcmFtZUlELCBwYWdlSUQpOworICAgIGlmICghW2Nvb2tpZXMgY291bnRdKQorICAg
ICAgICByZXR1cm4geyBTdHJpbmcoKSwgZmFsc2UgfTsgLy8gUmV0dXJuIGEgbnVsbCBzdHJpbmcs
IG5vdCBhbiBlbXB0eSBvbmUgdGhhdCBTdHJpbmdCdWlsZGVyIHdvdWxkIGNyZWF0ZSBiZWxvdy4K
KworICAgIFN0cmluZ0J1aWxkZXIgY29va2llc0J1aWxkZXI7CisgICAgYm9vbCBkaWRBY2Nlc3NT
ZWN1cmVDb29raWVzID0gZmFsc2U7CisgICAgZm9yIChOU0hUVFBDb29raWUgKmNvb2tpZSBpbiBj
b29raWVzKSB7CisgICAgICAgIGlmICghW1tjb29raWUgbmFtZV0gbGVuZ3RoXSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICghaW5jbHVkZUhUVFBPbmx5ICYmIFtjb29raWUg
aXNIVFRQT25seV0pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoW2Nvb2tp
ZSBpc1NlY3VyZV0pIHsKKyAgICAgICAgICAgIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMgPSB0cnVl
OworICAgICAgICAgICAgaWYgKGluY2x1ZGVTZWN1cmVDb29raWVzID09IEluY2x1ZGVTZWN1cmVD
b29raWVzOjpObykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICghY29va2llc0J1aWxkZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29va2llc0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiOyAiKTsKKworICAgICAgICBjb29raWVzQnVpbGRlci5hcHBl
bmQoW2Nvb2tpZSBuYW1lXSk7CisgICAgICAgIGNvb2tpZXNCdWlsZGVyLmFwcGVuZCgnPScpOwor
ICAgICAgICBjb29raWVzQnVpbGRlci5hcHBlbmQoW2Nvb2tpZSB2YWx1ZV0pOworICAgIH0KKyAg
ICByZXR1cm4geyBjb29raWVzQnVpbGRlci50b1N0cmluZygpLCBkaWRBY2Nlc3NTZWN1cmVDb29r
aWVzIH07CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiB7IFN0
cmluZygpLCBmYWxzZSB9OworfQorCitzdGF0aWMgdm9pZCBkZWxldGVBbGxIVFRQQ29va2llcyhD
RkhUVFBDb29raWVTdG9yYWdlUmVmIGNvb2tpZVN0b3JhZ2UpCit7CisgICAgQVNTRVJUKGhhc1By
b2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOwor
CisgICAgaWYgKCFjb29raWVTdG9yYWdlKSB7CisgICAgICAgIE5TSFRUUENvb2tpZVN0b3JhZ2Ug
KmNvb2tpZVN0b3JhZ2UgPSBbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3Rv
cmFnZV07CisgICAgICAgIE5TQXJyYXkgKmNvb2tpZXMgPSBbY29va2llU3RvcmFnZSBjb29raWVz
XTsKKyAgICAgICAgaWYgKCFjb29raWVzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGZvciAoTlNIVFRQQ29va2llICpjb29raWUgaW4gY29va2llcykKKyAgICAgICAgICAgIFtjb29r
aWVTdG9yYWdlIGRlbGV0ZUNvb2tpZTpjb29raWVdOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQ0ZIVFRQQ29va2llU3RvcmFnZURlbGV0ZUFsbENvb2tpZXMoY29va2llU3RvcmFnZSk7
Cit9CisKK3N0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29v
a2llc0ZvckRPTShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2Ft
ZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJ
RCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBp
bmNsdWRlU2VjdXJlQ29va2llcykgY29uc3QKK3sKKyAgICByZXR1cm4gY29va2llc0ZvclNlc3Np
b24oKnRoaXMsIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQs
IERvTm90SW5jbHVkZUhUVFBPbmx5LCBpbmNsdWRlU2VjdXJlQ29va2llcyk7Cit9CisKK3N0ZDo6
cGFpcjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llUmVxdWVzdEhl
YWRlckZpZWxkVmFsdWUoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8m
IHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZy
YW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tp
ZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvb2tpZXNGb3JT
ZXNzaW9uKCp0aGlzLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFn
ZUlELCBJbmNsdWRlSFRUUE9ubHksIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKK30KKworc3RkOjpw
YWlyPFN0cmluZywgYm9vbD4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShjb25zdCBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eSYgaGVhZGVy
RmllbGRQcm94eSkgY29uc3QKK3sKKyAgICByZXR1cm4gY29va2llc0ZvclNlc3Npb24oKnRoaXMs
IGhlYWRlckZpZWxkUHJveHkuZmlyc3RQYXJ0eSwgaGVhZGVyRmllbGRQcm94eS5zYW1lU2l0ZUlu
Zm8sIGhlYWRlckZpZWxkUHJveHkudXJsLCBoZWFkZXJGaWVsZFByb3h5LmZyYW1lSUQsIGhlYWRl
ckZpZWxkUHJveHkucGFnZUlELCBJbmNsdWRlSFRUUE9ubHksIGhlYWRlckZpZWxkUHJveHkuaW5j
bHVkZVNlY3VyZUNvb2tpZXMpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0
Q29va2llc0Zyb21ET00oY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8m
IHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZy
YW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiBjb29r
aWVTdHIpIGNvbnN0Cit7CisgICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1By
aXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOworCisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IE9uIDEwLjUsIE5T
SFRUUENvb2tpZVN0b3JhZ2Ugd291bGQgc3RvcmUgYW4gZW1wdHkgY29va2llLAorICAgIC8vIHdo
aWNoIHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIuCisgICAgaWYgKGNvb2tpZVN0ci5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIDxodHRwOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02NTMxPiwgPHJkYXI6Ly80NDA5MDM0PgorICAgIC8vIGNvb2tpZXNX
aXRoUmVzcG9uc2VIZWFkZXJGaWVsZHMgZG9lc24ndCBwYXJzZSBjb29raWVzIHdpdGhvdXQgYSB2
YWx1ZQorICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBjb29raWVTdHIuY29udGFpbnMoJz0nKSA/
IGNvb2tpZVN0ciA6IGNvb2tpZVN0ciArICI9IjsKKworICAgIE5TVVJMICpjb29raWVVUkwgPSB1
cmw7CisgICAgTlNEaWN0aW9uYXJ5ICpoZWFkZXJGaWVsZHMgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rp
b25hcnlXaXRoT2JqZWN0OmNvb2tpZVN0cmluZyBmb3JLZXk6QCJTZXQtQ29va2llIl07CisKKyNp
ZiBQTEFURk9STShNQUMpCisgICAgTlNBcnJheSAqdW5maWx0ZXJlZENvb2tpZXMgPSBbTlNIVFRQ
Q29va2llIF9wYXJzZWRDb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzOmhlYWRlckZpZWxk
cyBmb3JVUkw6Y29va2llVVJMXTsKKyNlbHNlCisgICAgTlNBcnJheSAqdW5maWx0ZXJlZENvb2tp
ZXMgPSBbTlNIVFRQQ29va2llIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHM6aGVhZGVy
RmllbGRzIGZvclVSTDpjb29raWVVUkxdOworI2VuZGlmCisKKyAgICBSZXRhaW5QdHI8TlNBcnJh
eT4gZmlsdGVyZWRDb29raWVzID0gZmlsdGVyQ29va2llcyh1bmZpbHRlcmVkQ29va2llcyk7Cisg
ICAgQVNTRVJUKFtmaWx0ZXJlZENvb2tpZXMuZ2V0KCkgY291bnRdIDw9IDEpOworCisjaWYgSEFW
RShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCisgICAgaWYgKHNob3VsZEJsb2NrQ29v
a2llcyhmaXJzdFBhcnR5LCB1cmwpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgcGFy
dGl0aW9uID0gY29va2llU3RvcmFnZVBhcnRpdGlvbihmaXJzdFBhcnR5LCB1cmwsIGZyYW1lSUQs
IHBhZ2VJRCk7CisgICAgaWYgKCFwYXJ0aXRpb24uaXNFbXB0eSgpKQorICAgICAgICBmaWx0ZXJl
ZENvb2tpZXMgPSBhcHBseVBhcnRpdGlvblRvQ29va2llcyhwYXJ0aXRpb24sIGZpbHRlcmVkQ29v
a2llcy5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsKKyAgICBVTlVT
RURfUEFSQU0ocGFnZUlEKTsKKyNlbmRpZgorCisgICAgc2V0SFRUUENvb2tpZXNGb3JVUkwoY29v
a2llU3RvcmFnZSgpLmdldCgpLCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNvb2tpZVVSTCwgZmly
c3RQYXJ0eSwgc2FtZVNpdGVJbmZvKTsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
Cit9CisKK3N0YXRpYyBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kgaHR0cENvb2tpZUFjY2VwdFBv
bGljeShDRkhUVFBDb29raWVTdG9yYWdlUmVmIGNvb2tpZVN0b3JhZ2UpCit7CisgICAgQVNTRVJU
KGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2ll
cykpOworCisgICAgaWYgKCFjb29raWVTdG9yYWdlKQorICAgICAgICByZXR1cm4gW1tOU0hUVFBD
b29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBjb29raWVBY2NlcHRQb2xpY3ld
OworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeT4oQ0ZI
VFRQQ29va2llU3RvcmFnZUdldENvb2tpZUFjY2VwdFBvbGljeShjb29raWVTdG9yYWdlKSk7Cit9
CisKK2Jvb2wgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVzRW5hYmxlZCgpIGNvbnN0Cit7
CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgTlNIVFRQQ29va2llQWNj
ZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSA9IGh0dHBDb29raWVBY2NlcHRQb2xpY3koY29v
a2llU3RvcmFnZSgpLmdldCgpKTsKKyAgICByZXR1cm4gY29va2llQWNjZXB0UG9saWN5ID09IE5T
SFRUUENvb2tpZUFjY2VwdFBvbGljeUFsd2F5cyB8fCBjb29raWVBY2NlcHRQb2xpY3kgPT0gTlNI
VFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW4gfHwgY29va2ll
QWNjZXB0UG9saWN5ID09IE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeUV4Y2x1c2l2ZWx5RnJvbU1h
aW5Eb2N1bWVudERvbWFpbjsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0UmF3Q29v
a2llcyhjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJ
bmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3Rk
OjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykg
Y29uc3QKK3sKKyAgICByYXdDb29raWVzLmNsZWFyKCk7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOworCisgICAgTlNBcnJheSAqY29va2llcyA9IGNvb2tpZXNGb3JVUkwoKnRoaXMs
IGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQpOworICAgIE5T
VUludGVnZXIgY291bnQgPSBbY29va2llcyBjb3VudF07CisgICAgcmF3Q29va2llcy5yZXNlcnZl
Q2FwYWNpdHkoY291bnQpOworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKKyAgICAgICAgTlNIVFRQQ29va2llICpjb29raWUgPSAoTlNIVFRQQ29va2llICopW2Nv
b2tpZXMgb2JqZWN0QXRJbmRleDppXTsKKyAgICAgICAgcmF3Q29va2llcy51bmNoZWNrZWRBcHBl
bmQoeyBjb29raWUgfSk7CisgICAgfQorCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0
ZUNvb2tpZShjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKSBjb25zdAor
eworICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFj
Y2Vzc1Jhd0Nvb2tpZXMpKTsKKworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKwor
ICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gdGhp
cy0+Y29va2llU3RvcmFnZSgpOworICAgIE5TQXJyYXkgKmNvb2tpZXMgPSBodHRwQ29va2llc0Zv
clVSTChjb29raWVTdG9yYWdlLmdldCgpLCBuaWwsIHN0ZDo6bnVsbG9wdCwgdXJsKTsKKworICAg
IE5TU3RyaW5nICpjb29raWVOYW1lU3RyaW5nID0gY29va2llTmFtZTsKKworICAgIE5TVUludGVn
ZXIgY291bnQgPSBbY29va2llcyBjb3VudF07CisgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgeworICAgICAgICBOU0hUVFBDb29raWUgKmNvb2tpZSA9IChOU0hUVFBD
b29raWUgKilbY29va2llcyBvYmplY3RBdEluZGV4OmldOworICAgICAgICBpZiAoW1tjb29raWUg
bmFtZV0gaXNFcXVhbFRvU3RyaW5nOmNvb2tpZU5hbWVTdHJpbmddKQorICAgICAgICAgICAgZGVs
ZXRlSFRUUENvb2tpZShjb29raWVTdG9yYWdlLmdldCgpLCBjb29raWUpOworICAgIH0KKworICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNz
aW9uOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykK
K3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBOU0FycmF5ICpjb29r
aWVzID0gaHR0cENvb2tpZXMoY29va2llU3RvcmFnZSgpLmdldCgpKTsKKyAgICAKKyAgICBmb3Ig
KE5TSFRUUENvb2tpZSogY29va2llIGluIGNvb2tpZXMpCisgICAgICAgIGhvc3RuYW1lcy5hZGQo
W2Nvb2tpZSBkb21haW5dKTsKKyAgICAKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwor
fQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcygpCit7Cisg
ICAgZGVsZXRlQWxsSFRUUENvb2tpZXMoY29va2llU3RvcmFnZSgpLmdldCgpKTsKK30KKwordm9p
ZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKK3sKKyAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZp
bGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7CisKKyAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gY29va2llU3RvcmFnZSA9IHRoaXMtPmNvb2tpZVN0b3JhZ2UoKTsKKyAgICBOU0Fy
cmF5ICpjb29raWVzID0gaHR0cENvb2tpZXMoY29va2llU3RvcmFnZS5nZXQoKSk7CisgICAgaWYg
KCFjb29raWVzKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9y
PFJldGFpblB0cjxOU0hUVFBDb29raWU+Pj4gY29va2llc0J5RG9tYWluOworICAgIGZvciAoTlNI
VFRQQ29va2llKiBjb29raWUgaW4gY29va2llcykgeworICAgICAgICBhdXRvJiBjb29raWVzID0g
Y29va2llc0J5RG9tYWluLmFkZChjb29raWUuZG9tYWluLCBWZWN0b3I8UmV0YWluUHRyPE5TSFRU
UENvb2tpZT4+KCkpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgY29va2llcy5hcHBlbmQoY29v
a2llKTsKKyAgICB9CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGhvc3RuYW1lIDogaG9zdG5hbWVz
KSB7CisgICAgICAgIGF1dG8gaXQgPSBjb29raWVzQnlEb21haW4uZmluZChob3N0bmFtZSk7Cisg
ICAgICAgIGlmIChpdCA9PSBjb29raWVzQnlEb21haW4uZW5kKCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGl0LT52YWx1ZSkKKyAgICAgICAg
ICAgIGRlbGV0ZUhUVFBDb29raWUoY29va2llU3RvcmFnZS5nZXQoKSwgY29va2llLmdldCgpKTsK
KyAgICB9CisKKyAgICBbbnNDb29raWVTdG9yYWdlKCkgX3NhdmVDb29raWVzXTsKKworICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9u
OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShXYWxsVGltZSB0aW1lUG9pbnQpCit7Cisg
ICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNz
UmF3Q29va2llcykpOworCisgICAgaWYgKCFbTlNIVFRQQ29va2llU3RvcmFnZSBpbnN0YW5jZXNS
ZXNwb25kVG9TZWxlY3RvcjpAc2VsZWN0b3IocmVtb3ZlQ29va2llc1NpbmNlRGF0ZTopXSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTlNUaW1lSW50ZXJ2YWwgdGltZUludGVydmFsID0gdGltZVBv
aW50LnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpOworICAgIE5TRGF0ZSAqZGF0ZSA9IFtO
U0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZTE5NzA6dGltZUludGVydmFsXTsKKworICAg
IGF1dG8gKnN0b3JhZ2UgPSBuc0Nvb2tpZVN0b3JhZ2UoKTsKKworICAgIFtzdG9yYWdlIHJlbW92
ZUNvb2tpZXNTaW5jZURhdGU6ZGF0ZV07CisgICAgW3N0b3JhZ2UgX3NhdmVDb29raWVzXTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1YjRhMjQ1Mjc1ODI0YzA4MGQ5ODJkOTYwOTA1ZTQ0NGRlNjE5MDk2Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE4IFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29va2llSmFyQ3VybC5oIgotCi0jaWYgVVNFKENV
UkwpCi0jaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiQ29va2llUmVxdWVzdEhlYWRlckZp
ZWxkUHJveHkuaCIKLSNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZVNlc3Npb24uaCIKLSNpbmNsdWRl
ICJVUkwuaCIKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZXNGb3JET00oY29uc3Qg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNv
bnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRp
b25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJ
bmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykKLXsKLSAgICByZXR1cm4g
c2Vzc2lvbi5jb29raWVTdG9yYWdlKCkuY29va2llc0ZvckRPTShzZXNzaW9uLCBmaXJzdFBhcnR5
LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNsdWRlU2VjdXJlQ29va2ll
cyk7Ci19Ci0KLXZvaWQgc2V0Q29va2llc0Zyb21ET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNz
aW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYg
c2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJh
bWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBjb25zdCBTdHJpbmcmIHZhbHVl
KQotewotICAgIHNlc3Npb24uY29va2llU3RvcmFnZSgpLnNldENvb2tpZXNGcm9tRE9NKHNlc3Np
b24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIHZhbHVl
KTsKLX0KLQotc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZp
cnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVy
bCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRf
dD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykKLXsK
LSAgICByZXR1cm4gc2Vzc2lvbi5jb29raWVTdG9yYWdlKCkuY29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQs
IHBhZ2VJRCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOwotfQotCi1zdGQ6OnBhaXI8U3RyaW5nLCBi
b29sPiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBOZXR3b3JrU3RvcmFnZVNl
c3Npb24mIHNlc3Npb24sIGNvbnN0IENvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5JiBoZWFk
ZXJGaWVsZFByb3h5KQotewotICAgIHJldHVybiBzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5jb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShzZXNzaW9uLCBoZWFkZXJGaWVsZFByb3h5LmZpcnN0
UGFydHksIGhlYWRlckZpZWxkUHJveHkuc2FtZVNpdGVJbmZvLCBoZWFkZXJGaWVsZFByb3h5LnVy
bCwgaGVhZGVyRmllbGRQcm94eS5mcmFtZUlELCBoZWFkZXJGaWVsZFByb3h5LnBhZ2VJRCwgaGVh
ZGVyRmllbGRQcm94eS5pbmNsdWRlU2VjdXJlQ29va2llcyk7Ci19Ci0KLWJvb2wgY29va2llc0Vu
YWJsZWQoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uKQotewotICAgIHJldHVy
biBzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5jb29raWVzRW5hYmxlZChzZXNzaW9uKTsKLX0KLQot
Ym9vbCBnZXRSYXdDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwg
Y29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywg
Y29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0
aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0g
ICAgcmV0dXJuIHNlc3Npb24uY29va2llU3RvcmFnZSgpLmdldFJhd0Nvb2tpZXMoc2Vzc2lvbiwg
Zmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgcmF3Q29va2ll
cyk7Ci19Ci0KLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYg
c2Vzc2lvbiwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llKQotewotICAgIHNl
c3Npb24uY29va2llU3RvcmFnZSgpLmRlbGV0ZUNvb2tpZShzZXNzaW9uLCB1cmwsIGNvb2tpZSk7
Ci19Ci0KLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uJiBzZXNzaW9uLCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKLXsKLSAgICBzZXNz
aW9uLmNvb2tpZVN0b3JhZ2UoKS5nZXRIb3N0bmFtZXNXaXRoQ29va2llcyhzZXNzaW9uLCBob3N0
bmFtZXMpOwotfQotCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoY29uc3QgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgY29va2llSG9z
dE5hbWVzKQotewotICAgIHNlc3Npb24uY29va2llU3RvcmFnZSgpLmRlbGV0ZUNvb2tpZXNGb3JI
b3N0bmFtZXMoc2Vzc2lvbiwgY29va2llSG9zdE5hbWVzKTsKLX0KLQotdm9pZCBkZWxldGVBbGxD
b29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbikKLXsKLSAgICBzZXNz
aW9uLmNvb2tpZVN0b3JhZ2UoKS5kZWxldGVBbGxDb29raWVzKHNlc3Npb24pOwotfQotCi12b2lk
IGRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lv
biYgc2Vzc2lvbiwgV2FsbFRpbWUgc2luY2UpCi17Ci0gICAgc2Vzc2lvbi5jb29raWVTdG9yYWdl
KCkuZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbiwgc2luY2UpOwotfQotCi19
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0Nvb2tpZUphckN1cmwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9Db29raWVKYXJDdXJsLmgKaW5kZXggMmFhOGRmZGExYjcwZTEwOWNmZWI4YTRiZWYzYjQxZjQ2
NjZlNjhlZS4uZTBiMjFjYzEzNzc0OGE4ZTE2Mjc0ODMyNjA3YzE4ZDdhNDgxNjBmZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3Vy
bC5oCkBAIC0xOCwxMCArMTgsMjIgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJQbGF0
Zm9ybUNvb2tpZUphci5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBVUkw7CitjbGFz
cyBOZXR3b3JrU3RvcmFnZVNlc3Npb247CisKK3N0cnVjdCBDb29raWU7CitzdHJ1Y3QgQ29va2ll
UmVxdWVzdEhlYWRlckZpZWxkUHJveHk7CitzdHJ1Y3QgU2FtZVNpdGVJbmZvOworCitlbnVtIGNs
YXNzIEluY2x1ZGVTZWN1cmVDb29raWVzOworCiBjbGFzcyBDb29raWVKYXJDdXJsIHsKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZXNGb3JET00oY29u
c3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBT
YW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlE
LCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVzKSBj
b25zdCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ3VybC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ3VybC5jcHAKaW5kZXggMDYxZGYx
OTA1OTZlM2JiOWYxZmY5ZDE2NWI3N2Y3ZmZhZjNjYzc5My4uODZhNDFkZjczMmM3ZmUwZjJjNWU2
MWNiNWRiMzVkZWM0NTU5NmM2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkN1cmwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9OZXR3b3JrU3RvcmFnZVNlc3Npb25DdXJsLmNw
cApAQCAtMzEsMTMgKzMxLDE2IEBACiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29v
a2llSmFyQ3VybERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiQ29va2llSmFyREIuaCIKKyNpbmNsdWRl
ICJDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eS5oIgogI2luY2x1ZGUgIkN1cmxDb250ZXh0
LmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJVUkwuaCIKIAogI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtMTAzLDYgKzEwNiwyMSBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3dpdGNo
VG9OZXdUZXN0aW5nU2Vzc2lvbigpCiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgV2ViS2l0
IHRvIHVzZS4KIH0KIAordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXNGcm9t
RE9NKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUlu
Zm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0Cit7
CisgICAgY29va2llU3RvcmFnZSgpLnNldENvb2tpZXNGcm9tRE9NKCp0aGlzLCBmaXJzdFBhcnR5
LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCB2YWx1ZSk7Cit9CisKK2Jvb2wg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVzRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGNvb2tpZVN0b3JhZ2UoKS5jb29raWVzRW5hYmxlZCgqdGhpcyk7Cit9CisKK3N0ZDo6cGFp
cjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0ZvckRPTShjb25z
dCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25z
dCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25h
bDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29v
a2llcykgY29uc3QKK3sKKyAgICByZXR1cm4gY29va2llU3RvcmFnZSgpLmNvb2tpZXNGb3JET00o
KnRoaXMsIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGlu
Y2x1ZGVTZWN1cmVDb29raWVzKTsKK30KKwogdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNl
dENvb2tpZXMoY29uc3QgVmVjdG9yPENvb2tpZT4mLCBjb25zdCBVUkwmLCBjb25zdCBVUkwmKQog
ewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIFdlYktpdCB0byB1c2UuCkBAIC0xMTgsMjMg
KzEzNiw2MyBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llKGNvbnN0
IENvb2tpZSYpCiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgV2ViS2l0IHRvIHVzZS4KIH0K
IAordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZShjb25zdCBVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBjb29raWUpIGNvbnN0Cit7CisgICAgY29va2llU3RvcmFnZSgpLmRl
bGV0ZUNvb2tpZSgqdGhpcywgdXJsLCBjb29raWUpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcygpCit7CisgICAgY29va2llU3RvcmFnZSgpLmRlbGV0
ZUFsbENvb2tpZXMoKnRoaXMpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVs
ZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoV2FsbFRpbWUgc2luY2UpCit7CisgICAgY29va2ll
U3RvcmFnZSgpLmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKCp0aGlzLCBzaW5jZSk7Cit9
CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb29raWVIb3N0TmFtZXMpCit7CisgICAgY29va2llU3Rv
cmFnZSgpLmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoKnRoaXMsIGNvb2tpZUhvc3ROYW1lcyk7
Cit9CisKIFZlY3RvcjxDb29raWU+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0QWxsQ29va2ll
cygpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgV2ViS2l0IHRvIHVzZS4KICAgICBy
ZXR1cm4geyB9OwogfQogCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit7CisgICAgY29va2llU3Rv
cmFnZSgpLmdldEhvc3RuYW1lc1dpdGhDb29raWVzKCp0aGlzLCBob3N0bmFtZXMpOworfQorCiBW
ZWN0b3I8Q29va2llPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldENvb2tpZXMoY29uc3QgVVJM
JikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBXZWJLaXQgdG8gdXNlLgogICAgIHJl
dHVybiB7IH07CiB9CiAKK2Jvb2wgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRSYXdDb29raWVz
KGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8s
IGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9w
dGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKSBjb25z
dAoreworICAgIHJldHVybiBjb29raWVTdG9yYWdlKCkuZ2V0UmF3Q29va2llcygqdGhpcywgZmly
c3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgcmF3Q29va2llcyk7
Cit9CisKIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpmbHVzaENvb2tpZVN0b3JlKCkKIHsK
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBXZWJLaXQgdG8gdXNlLgogfQogCitzdGQ6OnBh
aXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBz
YW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFt
ZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVz
IGluY2x1ZGVTZWN1cmVDb29raWVzKSBjb25zdAoreworICAgIHJldHVybiBjb29raWVTdG9yYWdl
KCkuY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoKnRoaXMsIGZpcnN0UGFydHksIHNhbWVT
aXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKK30K
Kworc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94
eSYgaGVhZGVyRmllbGRQcm94eSkgY29uc3QKK3sKKyAgICByZXR1cm4gY29va2llU3RvcmFnZSgp
LmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKCp0aGlzLCBoZWFkZXJGaWVsZFByb3h5LmZp
cnN0UGFydHksIGhlYWRlckZpZWxkUHJveHkuc2FtZVNpdGVJbmZvLCBoZWFkZXJGaWVsZFByb3h5
LnVybCwgaGVhZGVyRmllbGRQcm94eS5mcmFtZUlELCBoZWFkZXJGaWVsZFByb3h5LnBhZ2VJRCwg
aGVhZGVyRmllbGRQcm94eS5pbmNsdWRlU2VjdXJlQ29va2llcyk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShDVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llSmFyTWFjLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llSmFyTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBjMjY0MGJkMDZkZjIxMGI2ZDJkMzIwODI2NTA2MTEwMmY4ZDkyMTg1Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZUphck1hYy5tbQorKysgL2Rldi9udWxsCkBA
IC0xLDQ3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlBsYXRmb3JtQ29va2llSmFy
LmgiCi0KLSNpbXBvcnQgIkNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5LmgiCi0jaW1wb3J0
ICJDb29raWVzU3RyYXRlZ3kuaCIKLSNpbXBvcnQgIk5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oIgot
I2ltcG9ydCA8cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4KLSNpbXBvcnQgPHd0Zi9CbG9ja09i
akNFeGNlcHRpb25zLmg+Ci0KLSNpbXBvcnQgIkNvb2tpZS5oIgotI2ltcG9ydCAiQ29va2llU3Rv
cmFnZS5oIgotI2ltcG9ydCAiU2FtZVNpdGVJbmZvLmgiCi0jaW1wb3J0ICJVUkwuaCIKLSNpbXBv
cnQgPHd0Zi9PcHRpb25hbC5oPgotI2ltcG9ydCA8d3RmL1Byb2Nlc3NQcml2aWxlZ2UuaD4KLSNp
bXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotQGludGVyZmFjZSBOU1VSTCAoKQot
LSAoQ0ZVUkxSZWYpX2NmdXJsOwotQGVuZAotCi0jaWYgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE0MDApIHx8IChQTEFURk9STShJT1MpICYm
IF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEyMDAwMCkKLUBpbnRlcmZhY2Ug
TlNIVFRQQ29va2llU3RvcmFnZSAoU3RhZ2luZykKLS0gKHZvaWQpX2dldENvb2tpZXNGb3JVUkw6
KE5TVVJMICopdXJsIG1haW5Eb2N1bWVudFVSTDooTlNVUkwgKiltYWluRG9jdW1lbnRVUkwgcGFy
dGl0aW9uOihOU1N0cmluZyAqKXBhcnRpdGlvbiBwb2xpY3lQcm9wZXJ0aWVzOihOU0RpY3Rpb25h
cnkqKXByb3BzIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0FycmF5ICopKWNvbXBsZXRp
b25IYW5kbGVyOwotLSAodm9pZClfc2V0Q29va2llczooTlNBcnJheSAqKWNvb2tpZXMgZm9yVVJM
OihOU1VSTCAqKVVSTCBtYWluRG9jdW1lbnRVUkw6KE5TVVJMICopbWFpbkRvY3VtZW50VVJMIHBv
bGljeVByb3BlcnRpZXM6KE5TRGljdGlvbmFyeSopIHByb3BzOwotQGVuZAotI2VuZGlmCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIE5TQXJyYXkgKmh0dHBDb29raWVzKENGSFRUUENv
b2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSkKLXsKLSAgICBBU1NFUlQoaGFzUHJvY2Vzc1By
aXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7Ci0gICAgaWYg
KCFjb29raWVTdG9yYWdlKQotICAgICAgICByZXR1cm4gW1tOU0hUVFBDb29raWVTdG9yYWdlIHNo
YXJlZEhUVFBDb29raWVTdG9yYWdlXSBjb29raWVzXTsKLSAgICAKLSAgICBhdXRvIGNvb2tpZXMg
PSBhZG9wdENGKENGSFRUUENvb2tpZVN0b3JhZ2VDb3B5Q29va2llcyhjb29raWVTdG9yYWdlKSk7
Ci0gICAgcmV0dXJuIFtOU0hUVFBDb29raWUgX2NmMm5zQ29va2llczpjb29raWVzLmdldCgpXTsK
LX0KLQotc3RhdGljIHZvaWQgZGVsZXRlSFRUUENvb2tpZShDRkhUVFBDb29raWVTdG9yYWdlUmVm
IGNvb2tpZVN0b3JhZ2UsIE5TSFRUUENvb2tpZSAqY29va2llKQotewotICAgIEFTU0VSVChoYXNQ
cm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsK
LSAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpIHsKLSAgICAgICAgW1tOU0hUVFBDb29raWVTdG9yYWdl
IHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBkZWxldGVDb29raWU6Y29va2llXTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBDRkhUVFBDb29raWVTdG9yYWdlRGVsZXRlQ29va2ll
KGNvb2tpZVN0b3JhZ2UsIFtjb29raWUgX0dldEludGVybmFsQ0ZIVFRQQ29va2llXSk7Ci19Ci0K
LSNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEwMTQwMCkgfHwgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTIwMDAwKQotc3RhdGljIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IHBvbGljeVBy
b3BlcnRpZXMoY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIE5TVVJMICp1cmwpCi17
Ci0gICAgc3RhdGljIE5TVVJMICplbXB0eVVSTCA9IFtbTlNVUkwgYWxsb2NdIGluaXRXaXRoU3Ry
aW5nOkAiIl07Ci0gICAgTlNEaWN0aW9uYXJ5ICpwb2xpY3lQcm9wZXJ0aWVzID0gQHsKLSAgICAg
ICAgQCJfa0NGSFRUUENvb2tpZVBvbGljeVByb3BlcnR5U2l0ZUZvckNvb2tpZXMiOiBzYW1lU2l0
ZUluZm8uaXNTYW1lU2l0ZSA/IHVybCA6IGVtcHR5VVJMLAotICAgICAgICBAIl9rQ0ZIVFRQQ29v
a2llUG9saWN5UHJvcGVydHlJc1RvcExldmVsTmF2aWdhdGlvbiI6IFtOU051bWJlciBudW1iZXJX
aXRoQm9vbDpzYW1lU2l0ZUluZm8uaXNUb3BTaXRlXSwKLSAgICB9OwotICAgIHJldHVybiBwb2xp
Y3lQcm9wZXJ0aWVzOwotfQotI2VuZGlmCi0KLXN0YXRpYyBOU0FycmF5ICpjb29raWVzRm9yVVJM
KE5TSFRUUENvb2tpZVN0b3JhZ2UgKnN0b3JhZ2UsIE5TVVJMICp1cmwsIE5TVVJMICptYWluRG9j
dW1lbnRVUkwsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8U2FtZVNpdGVJbmZvPiYgc2FtZVNpdGVJbmZv
LCBOU1N0cmluZyAqcGFydGl0aW9uID0gbnVsbHB0cikKLXsKLSAgICAvLyBUaGUgX2dldENvb2tp
ZXNGb3JVUkw6IG1ldGhvZCBjYWxscyB0aGUgY29tcGxldGlvbkhhbmRsZXIgc3luY2hyb25vdXNs
eS4gV2UgdXNlIHN0ZDo6b3B0aW9uYWw8PiB0byBlbnN1cmUgdGhpcyBpbnZhcmlhbnQuCi0gICAg
c3RkOjpvcHRpb25hbDxSZXRhaW5QdHI8TlNBcnJheSAqPj4gY29va2llc1B0cjsKLSAgICBhdXRv
IGNvbXBsZXRpb25IYW5kbGVyID0gWyZjb29raWVzUHRyXSAoTlNBcnJheSAqY29va2llcykgeyBj
b29raWVzUHRyID0gcmV0YWluUHRyKGNvb2tpZXMpOyB9OwotI2lmIChQTEFURk9STShNQUMpICYm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNDAwKSB8fCAoUExBVEZPUk0o
SU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMjAwMDApCi0gICAg
aWYgKFtzdG9yYWdlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX2dldENvb2tpZXNGb3JV
Ukw6bWFpbkRvY3VtZW50VVJMOnBhcnRpdGlvbjpwb2xpY3lQcm9wZXJ0aWVzOmNvbXBsZXRpb25I
YW5kbGVyOildKQotICAgICAgICBbc3RvcmFnZSBfZ2V0Q29va2llc0ZvclVSTDp1cmwgbWFpbkRv
Y3VtZW50VVJMOm1haW5Eb2N1bWVudFVSTCBwYXJ0aXRpb246cGFydGl0aW9uIHBvbGljeVByb3Bl
cnRpZXM6c2FtZVNpdGVJbmZvID8gcG9saWN5UHJvcGVydGllcyhzYW1lU2l0ZUluZm8udmFsdWUo
KSwgdXJsKS5nZXQoKSA6IG51bGxwdHIgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRs
ZXJdOwotICAgIGVsc2UKLSAgICAgICAgW3N0b3JhZ2UgX2dldENvb2tpZXNGb3JVUkw6dXJsIG1h
aW5Eb2N1bWVudFVSTDptYWluRG9jdW1lbnRVUkwgcGFydGl0aW9uOnBhcnRpdGlvbiBjb21wbGV0
aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07Ci0jZWxzZQotICAgIFtzdG9yYWdlIF9nZXRD
b29raWVzRm9yVVJMOnVybCBtYWluRG9jdW1lbnRVUkw6bWFpbkRvY3VtZW50VVJMIHBhcnRpdGlv
bjpwYXJ0aXRpb24gY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwotICAgIFVO
VVNFRF9QQVJBTShzYW1lU2l0ZUluZm8pOwotI2VuZGlmCi0gICAgQVNTRVJUKCEhY29va2llc1B0
cik7Ci0gICAgcmV0dXJuIGNvb2tpZXNQdHItPmF1dG9yZWxlYXNlKCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHNldEhUVFBDb29raWVzRm9yVVJMKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3Rv
cmFnZSwgTlNBcnJheSAqY29va2llcywgTlNVUkwgKnVybCwgTlNVUkwgKm1haW5Eb2N1bWVudFVS
TCwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8pCi17Ci0gICAgQVNTRVJUKGhhc1By
b2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOwot
ICAgIGlmICghY29va2llU3RvcmFnZSkgewotI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNDAwKSB8fCAoUExBVEZPUk0oSU9TKSAmJiBf
X0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMjAwMDApCi0gICAgICAgIGlmIChb
TlNIVFRQQ29va2llU3RvcmFnZSBpbnN0YW5jZXNSZXNwb25kVG9TZWxlY3RvcjpAc2VsZWN0b3Io
X3NldENvb2tpZXM6Zm9yVVJMOm1haW5Eb2N1bWVudFVSTDpwb2xpY3lQcm9wZXJ0aWVzOildKQot
ICAgICAgICAgICAgW1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdl
XSBfc2V0Q29va2llczpjb29raWVzIGZvclVSTDp1cmwgbWFpbkRvY3VtZW50VVJMOm1haW5Eb2N1
bWVudFVSTCBwb2xpY3lQcm9wZXJ0aWVzOnBvbGljeVByb3BlcnRpZXMoc2FtZVNpdGVJbmZvLCB1
cmwpLmdldCgpXTsKLSAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICBbW05TSFRUUENv
b2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZXM6Y29va2llcyBm
b3JVUkw6dXJsIG1haW5Eb2N1bWVudFVSTDptYWluRG9jdW1lbnRVUkxdOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPj0gMTAxNDAwKSB8fCAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMjAwMDApCi0gICAgaWYgKFtOU0hUVFBDb29raWVTdG9yYWdl
IGluc3RhbmNlc1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxlY3Rvcihfc2V0Q29va2llczpmb3JVUkw6
bWFpbkRvY3VtZW50VVJMOnBvbGljeVByb3BlcnRpZXM6KV0pIHsKLSAgICAgICAgLy8gRklYTUU6
IFN0b3AgY3JlYXRpbmcgYSBuZXcgTlNIVFRQQ29va2llU3RvcmFnZSBvYmplY3QgZWFjaCB0aW1l
IHdlIHdhbnQgdG8gcXVlcnkgdGhlIGNvb2tpZSBqYXIuCi0gICAgICAgIC8vIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiBjb3VsZCBpbnN0ZWFkIGtlZXAgYSBOU0hUVFBDb29raWVTdG9yYWdlIG9iamVj
dCBmb3IgdXMuCi0gICAgICAgIFJldGFpblB0cjxOU0hUVFBDb29raWVTdG9yYWdlPiBuc0Nvb2tp
ZVN0b3JhZ2UgPSBhZG9wdE5TKFtbTlNIVFRQQ29va2llU3RvcmFnZSBhbGxvY10gX2luaXRXaXRo
Q0ZIVFRQQ29va2llU3RvcmFnZTpjb29raWVTdG9yYWdlXSk7Ci0gICAgICAgIFtuc0Nvb2tpZVN0
b3JhZ2UgX3NldENvb2tpZXM6Y29va2llcyBmb3JVUkw6dXJsIG1haW5Eb2N1bWVudFVSTDptYWlu
RG9jdW1lbnRVUkwgcG9saWN5UHJvcGVydGllczpwb2xpY3lQcm9wZXJ0aWVzKHNhbWVTaXRlSW5m
bywgdXJsKS5nZXQoKV07Ci0gICAgfSBlbHNlIHsKLSNlbmRpZgotICAgICAgICBhdXRvIGNmQ29v
a2llcyA9IGFkb3B0Q0YoW05TSFRUUENvb2tpZSBfbnMyY2ZDb29raWVzOmNvb2tpZXNdKTsKLSAg
ICAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tpZXMoY29va2llU3RvcmFnZSwgY2ZDb29r
aWVzLmdldCgpLCBbdXJsIF9jZnVybF0sIFttYWluRG9jdW1lbnRVUkwgX2NmdXJsXSk7Ci0jaWYg
KFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE0
MDApIHx8IChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEyMDAwMCkKLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzYW1lU2l0ZUluZm8p
OwotI2VuZGlmCi19Ci0KLXN0YXRpYyBOU0FycmF5ICpodHRwQ29va2llc0ZvclVSTChDRkhUVFBD
b29raWVTdG9yYWdlUmVmIGNvb2tpZVN0b3JhZ2UsIE5TVVJMICpmaXJzdFBhcnR5LCBjb25zdCBz
dGQ6Om9wdGlvbmFsPFNhbWVTaXRlSW5mbz4mIHNhbWVTaXRlSW5mbywgTlNVUkwgKnVybCkKLXsK
LSAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nl
c3NSYXdDb29raWVzKSk7Ci0gICAgaWYgKCFjb29raWVTdG9yYWdlKQotICAgICAgICBjb29raWVT
dG9yYWdlID0gX0NGSFRUUENvb2tpZVN0b3JhZ2VHZXREZWZhdWx0KGtDRkFsbG9jYXRvckRlZmF1
bHQpOwotCi0gICAgLy8gRklYTUU6IFN0b3AgY3JlYXRpbmcgYSBuZXcgTlNIVFRQQ29va2llU3Rv
cmFnZSBvYmplY3QgZWFjaCB0aW1lIHdlIHdhbnQgdG8gcXVlcnkgdGhlIGNvb2tpZSBqYXIuCi0g
ICAgLy8gTmV0d29ya1N0b3JhZ2VTZXNzaW9uIGNvdWxkIGluc3RlYWQga2VlcCBhIE5TSFRUUENv
b2tpZVN0b3JhZ2Ugb2JqZWN0IGZvciB1cy4KLSAgICBSZXRhaW5QdHI8TlNIVFRQQ29va2llU3Rv
cmFnZT4gbnNDb29raWVTdG9yYWdlID0gYWRvcHROUyhbW05TSFRUUENvb2tpZVN0b3JhZ2UgYWxs
b2NdIF9pbml0V2l0aENGSFRUUENvb2tpZVN0b3JhZ2U6Y29va2llU3RvcmFnZV0pOwotICAgIHJl
dHVybiBjb29raWVzRm9yVVJMKG5zQ29va2llU3RvcmFnZS5nZXQoKSwgdXJsLCBmaXJzdFBhcnR5
LCBzYW1lU2l0ZUluZm8pOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlckNv
b2tpZXMoTlNBcnJheSAqdW5maWx0ZXJlZENvb2tpZXMpCi17Ci0gICAgQVNTRVJUKGhhc1Byb2Nl
c3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOwotICAg
IE5TVUludGVnZXIgY291bnQgPSBbdW5maWx0ZXJlZENvb2tpZXMgY291bnRdOwotICAgIFJldGFp
blB0cjxOU011dGFibGVBcnJheT4gZmlsdGVyZWRDb29raWVzID0gYWRvcHROUyhbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmNvdW50XSk7Ci0KLSAgICBmb3IgKE5TVUlu
dGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIE5TSFRUUENvb2tpZSAqY29v
a2llID0gKE5TSFRUUENvb2tpZSAqKVt1bmZpbHRlcmVkQ29va2llcyBvYmplY3RBdEluZGV4Omld
OwotCi0gICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NjMyODgzPiBPbiAxMC41LCBOU0hUVFBD
b29raWVTdG9yYWdlIHdvdWxkIHN0b3JlIGFuIGVtcHR5IGNvb2tpZSwKLSAgICAgICAgLy8gd2hp
Y2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4gV2UgaGF2ZSBhIHdvcmthcm91bmQgaW4g
c2V0Q29va2llcygpIHRvIHByZXZlbnQKLSAgICAgICAgLy8gdGhhdCwgYnV0IHdlIGFsc28gbmVl
ZCB0byBhdm9pZCBzZW5kaW5nIGNvb2tpZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgc3RvcmVkLCBh
bmQKLSAgICAgICAgLy8gdGhlcmUncyBubyBoYXJtIHRvIGRvaW5nIHRoaXMgY2hlY2sgYmVjYXVz
ZSBzdWNoIGEgY29va2llIGlzIG5ldmVyIHZhbGlkLgotICAgICAgICBpZiAoIVtbY29va2llIG5h
bWVdIGxlbmd0aF0pCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoW2Nvb2tp
ZSBpc0hUVFBPbmx5XSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFtmaWx0ZXJl
ZENvb2tpZXMuZ2V0KCkgYWRkT2JqZWN0OmNvb2tpZV07Ci0gICAgfQotCi0gICAgcmV0dXJuIGZp
bHRlcmVkQ29va2llczsKLX0KLQotI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9O
SU5HKQotCi1zdGF0aWMgTlNBcnJheSAqYXBwbHlQYXJ0aXRpb25Ub0Nvb2tpZXMoTlNTdHJpbmcg
KnBhcnRpdGlvbiwgTlNBcnJheSAqY29va2llcykKLXsKLSAgICBBU1NFUlQoaGFzUHJvY2Vzc1By
aXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7Ci0KLSAgICAv
LyBGSVhNRSAyNDc0NzczOTogQ0ZOZXR3b3JrIHNob3VsZCBleHBvc2UgdGhpcyBrZXkgYXMgU1BJ
Ci0gICAgc3RhdGljIE5TU3RyaW5nICogY29uc3QgcGFydGl0aW9uS2V5ID0gQCJTdG9yYWdlUGFy
dGl0aW9uIjsKLQotICAgIE5TTXV0YWJsZUFycmF5ICpwYXJ0aXRpb25lZENvb2tpZXMgPSBbTlNN
dXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6Y29va2llcy5jb3VudF07Ci0gICAgZm9yIChO
U0hUVFBDb29raWUgKmNvb2tpZSBpbiBjb29raWVzKSB7Ci0gICAgICAgIFJldGFpblB0cjxOU011
dGFibGVEaWN0aW9uYXJ5PiBwcm9wZXJ0aWVzID0gYWRvcHROUyhbY29va2llLnByb3BlcnRpZXMg
bXV0YWJsZUNvcHldKTsKLSAgICAgICAgW3Byb3BlcnRpZXMgc2V0T2JqZWN0OnBhcnRpdGlvbiBm
b3JLZXk6cGFydGl0aW9uS2V5XTsKLSAgICAgICAgW3BhcnRpdGlvbmVkQ29va2llcyBhZGRPYmpl
Y3Q6W05TSFRUUENvb2tpZSBjb29raWVXaXRoUHJvcGVydGllczpwcm9wZXJ0aWVzLmdldCgpXV07
Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhcnRpdGlvbmVkQ29va2llczsKLX0KLQotc3RhdGljIGJv
b2wgY29va2llc0FyZUJsb2NrZWRGb3JVUkwoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBz
ZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsKQotewotICAgIHJl
dHVybiBzZXNzaW9uLnNob3VsZEJsb2NrQ29va2llcyhmaXJzdFBhcnR5LCB1cmwpOwotfQotCi1z
dGF0aWMgTlNBcnJheSAqY29va2llc0luUGFydGl0aW9uRm9yVVJMKGNvbnN0IE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0
ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0
X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCkKLXsKLSAgICBBU1NF
UlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29r
aWVzKSk7Ci0gICAgU3RyaW5nIHBhcnRpdGlvbiA9IHNlc3Npb24uY29va2llU3RvcmFnZVBhcnRp
dGlvbihmaXJzdFBhcnR5LCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCk7Ci0gICAgaWYgKHBhcnRpdGlv
bi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICAvLyBGSVhNRTogU3RvcCBj
cmVhdGluZyBhIG5ldyBOU0hUVFBDb29raWVTdG9yYWdlIG9iamVjdCBlYWNoIHRpbWUgd2Ugd2Fu
dCB0byBxdWVyeSB0aGUgY29va2llIGphci4KLSAgICAvLyBOZXR3b3JrU3RvcmFnZVNlc3Npb24g
Y291bGQgaW5zdGVhZCBrZWVwIGEgTlNIVFRQQ29va2llU3RvcmFnZSBvYmplY3QgZm9yIHVzLgot
ICAgIFJldGFpblB0cjxOU0hUVFBDb29raWVTdG9yYWdlPiBjb29raWVTdG9yYWdlOwotICAgIGlm
IChhdXRvIHN0b3JhZ2UgPSBzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKSkKLSAgICAgICAgY29va2ll
U3RvcmFnZSA9IGFkb3B0TlMoW1tOU0hUVFBDb29raWVTdG9yYWdlIGFsbG9jXSBfaW5pdFdpdGhD
RkhUVFBDb29raWVTdG9yYWdlOnN0b3JhZ2UuZ2V0KCldKTsKLSAgICBlbHNlCi0gICAgICAgIGNv
b2tpZVN0b3JhZ2UgPSBbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFn
ZV07Ci0gICAgcmV0dXJuIGNvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5nZXQoKSwgdXJsLCBm
aXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHBhcnRpdGlvbik7Ci19Ci0KLSNlbmRpZiAvLyBIQVZF
KENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykKLSAgICAKLXN0YXRpYyBOU0FycmF5ICpj
b29raWVzRm9yVVJMKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3Qg
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3Qg
VVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8
dWludDY0X3Q+IHBhZ2VJRCkKLXsKLSNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElP
TklORykKLSAgICBpZiAoY29va2llc0FyZUJsb2NrZWRGb3JVUkwoc2Vzc2lvbiwgZmlyc3RQYXJ0
eSwgdXJsKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBpZiAoTlNBcnJheSAqY29v
a2llcyA9IGNvb2tpZXNJblBhcnRpdGlvbkZvclVSTChzZXNzaW9uLCBmaXJzdFBhcnR5LCBzYW1l
U2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlEKSkKLSAgICAgICAgcmV0dXJuIGNvb2tpZXM7
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsKLSAgICBVTlVTRURfUEFSQU0ocGFn
ZUlEKTsKLSNlbmRpZgotICAgIHJldHVybiBodHRwQ29va2llc0ZvclVSTChzZXNzaW9uLmNvb2tp
ZVN0b3JhZ2UoKS5nZXQoKSwgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwpOwotfQotCi1l
bnVtIEluY2x1ZGVIVFRQT25seU9yTm90IHsgRG9Ob3RJbmNsdWRlSFRUUE9ubHksIEluY2x1ZGVI
VFRQT25seSB9Owotc3RhdGljIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZXNGb3JTZXNz
aW9uKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJz
dFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmws
IHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+
IHBhZ2VJRCwgSW5jbHVkZUhUVFBPbmx5T3JOb3QgaW5jbHVkZUhUVFBPbmx5LCBJbmNsdWRlU2Vj
dXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykKLXsKLSAgICBBU1NFUlQoaGFzUHJvY2Vz
c1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7Ci0KLSAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBOU0FycmF5ICpjb29raWVzID0g
Y29va2llc0ZvclVSTChzZXNzaW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJh
bWVJRCwgcGFnZUlEKTsKLSAgICBpZiAoIVtjb29raWVzIGNvdW50XSkKLSAgICAgICAgcmV0dXJu
IHsgU3RyaW5nKCksIGZhbHNlIH07IC8vIFJldHVybiBhIG51bGwgc3RyaW5nLCBub3QgYW4gZW1w
dHkgb25lIHRoYXQgU3RyaW5nQnVpbGRlciB3b3VsZCBjcmVhdGUgYmVsb3cuCi0KLSAgICBTdHJp
bmdCdWlsZGVyIGNvb2tpZXNCdWlsZGVyOwotICAgIGJvb2wgZGlkQWNjZXNzU2VjdXJlQ29va2ll
cyA9IGZhbHNlOwotICAgIGZvciAoTlNIVFRQQ29va2llICpjb29raWUgaW4gY29va2llcykgewot
ICAgICAgICBpZiAoIVtbY29va2llIG5hbWVdIGxlbmd0aF0pCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBpZiAoIWluY2x1ZGVIVFRQT25seSAmJiBbY29va2llIGlzSFRUUE9ubHld
KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKFtjb29raWUgaXNTZWN1cmVd
KSB7Ci0gICAgICAgICAgICBkaWRBY2Nlc3NTZWN1cmVDb29raWVzID0gdHJ1ZTsKLSAgICAgICAg
ICAgIGlmIChpbmNsdWRlU2VjdXJlQ29va2llcyA9PSBJbmNsdWRlU2VjdXJlQ29va2llczo6Tm8p
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWNv
b2tpZXNCdWlsZGVyLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvb2tpZXNCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIjsgIik7Ci0KLSAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kKFtjb29raWUg
bmFtZV0pOwotICAgICAgICBjb29raWVzQnVpbGRlci5hcHBlbmQoJz0nKTsKLSAgICAgICAgY29v
a2llc0J1aWxkZXIuYXBwZW5kKFtjb29raWUgdmFsdWVdKTsKLSAgICB9Ci0gICAgcmV0dXJuIHsg
Y29va2llc0J1aWxkZXIudG9TdHJpbmcoKSwgZGlkQWNjZXNzU2VjdXJlQ29va2llcyB9OwotCi0g
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4geyBTdHJpbmcoKSwgZmFs
c2UgfTsKLX0KLQotc3RhdGljIHZvaWQgZGVsZXRlQWxsSFRUUENvb2tpZXMoQ0ZIVFRQQ29va2ll
U3RvcmFnZVJlZiBjb29raWVTdG9yYWdlKQotewotICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmls
ZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKLQotICAgIGlmICgh
Y29va2llU3RvcmFnZSkgewotICAgICAgICBOU0hUVFBDb29raWVTdG9yYWdlICpjb29raWVTdG9y
YWdlID0gW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdOwotICAg
ICAgICBOU0FycmF5ICpjb29raWVzID0gW2Nvb2tpZVN0b3JhZ2UgY29va2llc107Ci0gICAgICAg
IGlmICghY29va2llcykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBmb3IgKE5TSFRU
UENvb2tpZSAqY29va2llIGluIGNvb2tpZXMpCi0gICAgICAgICAgICBbY29va2llU3RvcmFnZSBk
ZWxldGVDb29raWU6Y29va2llXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENGSFRU
UENvb2tpZVN0b3JhZ2VEZWxldGVBbGxDb29raWVzKGNvb2tpZVN0b3JhZ2UpOwotfQotCi1zdGQ6
OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVzRm9yRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8m
IHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZy
YW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tp
ZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpCi17Ci0gICAgcmV0dXJuIGNvb2tpZXNGb3JTZXNzaW9u
KHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQs
IERvTm90SW5jbHVkZUhUVFBPbmx5LCBpbmNsdWRlU2VjdXJlQ29va2llcyk7Ci19Ci0KLXN0ZDo6
cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25z
dCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9u
YWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5j
bHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpCi17Ci0gICAgcmV0dXJuIGNv
b2tpZXNGb3JTZXNzaW9uKHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBm
cmFtZUlELCBwYWdlSUQsIEluY2x1ZGVIVFRQT25seSwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOwot
fQotCi1zdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IENvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFByb3h5JiBoZWFkZXJGaWVsZFByb3h5KQotewotICAgIHJldHVybiBjb29r
aWVzRm9yU2Vzc2lvbihzZXNzaW9uLCBoZWFkZXJGaWVsZFByb3h5LmZpcnN0UGFydHksIGhlYWRl
ckZpZWxkUHJveHkuc2FtZVNpdGVJbmZvLCBoZWFkZXJGaWVsZFByb3h5LnVybCwgaGVhZGVyRmll
bGRQcm94eS5mcmFtZUlELCBoZWFkZXJGaWVsZFByb3h5LnBhZ2VJRCwgSW5jbHVkZUhUVFBPbmx5
LCBoZWFkZXJGaWVsZFByb3h5LmluY2x1ZGVTZWN1cmVDb29raWVzKTsKLX0KLQotdm9pZCBzZXRD
b29raWVzRnJvbURPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0
IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0
IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFs
PHVpbnQ2NF90PiBwYWdlSUQsIGNvbnN0IFN0cmluZyYgY29va2llU3RyKQotewotICAgIEFTU0VS
VChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tp
ZXMpKTsKLQotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIC8vIDxyZGFy
Oi8vcHJvYmxlbS81NjMyODgzPiBPbiAxMC41LCBOU0hUVFBDb29raWVTdG9yYWdlIHdvdWxkIHN0
b3JlIGFuIGVtcHR5IGNvb2tpZSwKLSAgICAvLyB3aGljaCB3b3VsZCBiZSBzZW50IGFzICJDb29r
aWU6ID0iLgotICAgIGlmIChjb29raWVTdHIuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzMT4sIDxy
ZGFyOi8vNDQwOTAzND4KLSAgICAvLyBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzIGRv
ZXNuJ3QgcGFyc2UgY29va2llcyB3aXRob3V0IGEgdmFsdWUKLSAgICBTdHJpbmcgY29va2llU3Ry
aW5nID0gY29va2llU3RyLmNvbnRhaW5zKCc9JykgPyBjb29raWVTdHIgOiBjb29raWVTdHIgKyAi
PSI7Ci0KLSAgICBOU1VSTCAqY29va2llVVJMID0gdXJsOwotICAgIE5TRGljdGlvbmFyeSAqaGVh
ZGVyRmllbGRzID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpjb29raWVTdHJp
bmcgZm9yS2V5OkAiU2V0LUNvb2tpZSJdOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIE5TQXJy
YXkgKnVuZmlsdGVyZWRDb29raWVzID0gW05TSFRUUENvb2tpZSBfcGFyc2VkQ29va2llc1dpdGhS
ZXNwb25zZUhlYWRlckZpZWxkczpoZWFkZXJGaWVsZHMgZm9yVVJMOmNvb2tpZVVSTF07Ci0jZWxz
ZQotICAgIE5TQXJyYXkgKnVuZmlsdGVyZWRDb29raWVzID0gW05TSFRUUENvb2tpZSBjb29raWVz
V2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzOmhlYWRlckZpZWxkcyBmb3JVUkw6Y29va2llVVJMXTsK
LSNlbmRpZgotCi0gICAgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlcmVkQ29va2llcyA9IGZpbHRl
ckNvb2tpZXModW5maWx0ZXJlZENvb2tpZXMpOwotICAgIEFTU0VSVChbZmlsdGVyZWRDb29raWVz
LmdldCgpIGNvdW50XSA8PSAxKTsKLQotI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElU
SU9OSU5HKQotICAgIGlmIChzZXNzaW9uLnNob3VsZEJsb2NrQ29va2llcyhmaXJzdFBhcnR5LCB1
cmwpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgcGFydGl0aW9uID0gc2Vzc2lvbi5j
b29raWVTdG9yYWdlUGFydGl0aW9uKGZpcnN0UGFydHksIHVybCwgZnJhbWVJRCwgcGFnZUlEKTsK
LSAgICBpZiAoIXBhcnRpdGlvbi5pc0VtcHR5KCkpCi0gICAgICAgIGZpbHRlcmVkQ29va2llcyA9
IGFwcGx5UGFydGl0aW9uVG9Db29raWVzKHBhcnRpdGlvbiwgZmlsdGVyZWRDb29raWVzLmdldCgp
KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGZyYW1lSUQpOwotICAgIFVOVVNFRF9QQVJBTShw
YWdlSUQpOwotI2VuZGlmCi0KLSAgICBzZXRIVFRQQ29va2llc0ZvclVSTChzZXNzaW9uLmNvb2tp
ZVN0b3JhZ2UoKS5nZXQoKSwgZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29raWVVUkwsIGZpcnN0
UGFydHksIHNhbWVTaXRlSW5mbyk7Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwot
fQotCi1zdGF0aWMgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5IGh0dHBDb29raWVBY2NlcHRQb2xp
Y3koQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlKQotewotICAgIEFTU0VSVCho
YXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMp
KTsKLQotICAgIGlmICghY29va2llU3RvcmFnZSkKLSAgICAgICAgcmV0dXJuIFtbTlNIVFRQQ29v
a2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gY29va2llQWNjZXB0UG9saWN5XTsK
LQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxOU0hUVFBDb29raWVBY2NlcHRQb2xpY3k+KENGSFRU
UENvb2tpZVN0b3JhZ2VHZXRDb29raWVBY2NlcHRQb2xpY3koY29va2llU3RvcmFnZSkpOwotfQot
Ci1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lv
bikKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBOU0hUVFBDb29r
aWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5ID0gaHR0cENvb2tpZUFjY2VwdFBvbGlj
eShzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSk7Ci0gICAgcmV0dXJuIGNvb2tpZUFjY2Vw
dFBvbGljeSA9PSBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lBbHdheXMgfHwgY29va2llQWNjZXB0
UG9saWN5ID09IE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9t
YWluIHx8IGNvb2tpZUFjY2VwdFBvbGljeSA9PSBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lFeGNs
dXNpdmVseUZyb21NYWluRG9jdW1lbnREb21haW47Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBj
b25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0
aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwg
VmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0gICAgcmF3Q29va2llcy5jbGVhcigpOwot
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIE5TQXJyYXkgKmNvb2tpZXMg
PSBjb29raWVzRm9yVVJMKHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBm
cmFtZUlELCBwYWdlSUQpOwotICAgIE5TVUludGVnZXIgY291bnQgPSBbY29va2llcyBjb3VudF07
Ci0gICAgcmF3Q29va2llcy5yZXNlcnZlQ2FwYWNpdHkoY291bnQpOwotICAgIGZvciAoTlNVSW50
ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgTlNIVFRQQ29va2llICpjb29r
aWUgPSAoTlNIVFRQQ29va2llICopW2Nvb2tpZXMgb2JqZWN0QXRJbmRleDppXTsKLSAgICAgICAg
cmF3Q29va2llcy51bmNoZWNrZWRBcHBlbmQoeyBjb29raWUgfSk7Ci0gICAgfQotCi0gICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBkZWxl
dGVDb29raWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQotewotICAgIEFTU0VSVChoYXNQcm9jZXNz
UHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKLQotICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIFJldGFpblB0cjxDRkhUVFBDb29r
aWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gc2Vzc2lvbi5jb29raWVTdG9yYWdlKCk7Ci0g
ICAgTlNBcnJheSAqY29va2llcyA9IGh0dHBDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0
KCksIG5pbCwgc3RkOjpudWxsb3B0LCB1cmwpOwotCi0gICAgTlNTdHJpbmcgKmNvb2tpZU5hbWVT
dHJpbmcgPSBjb29raWVOYW1lOwotCi0gICAgTlNVSW50ZWdlciBjb3VudCA9IFtjb29raWVzIGNv
dW50XTsKLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAg
ICAgIE5TSFRUUENvb2tpZSAqY29va2llID0gKE5TSFRUUENvb2tpZSAqKVtjb29raWVzIG9iamVj
dEF0SW5kZXg6aV07Ci0gICAgICAgIGlmIChbW2Nvb2tpZSBuYW1lXSBpc0VxdWFsVG9TdHJpbmc6
Y29va2llTmFtZVN0cmluZ10pCi0gICAgICAgICAgICBkZWxldGVIVFRQQ29va2llKGNvb2tpZVN0
b3JhZ2UuZ2V0KCksIGNvb2tpZSk7Ci0gICAgfQotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKLX0KLQotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhjb25zdCBOZXR3b3JrU3Rv
cmFnZVNlc3Npb24mIHNlc3Npb24sIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQotewotICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIE5TQXJyYXkgKmNvb2tpZXMgPSBo
dHRwQ29va2llcyhzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSk7Ci0gICAgCi0gICAgZm9y
IChOU0hUVFBDb29raWUqIGNvb2tpZSBpbiBjb29raWVzKQotICAgICAgICBob3N0bmFtZXMuYWRk
KFtjb29raWUgZG9tYWluXSk7Ci0gICAgCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
LX0KLQotdm9pZCBkZWxldGVBbGxDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYg
c2Vzc2lvbikKLXsKLSAgICBkZWxldGVBbGxIVFRQQ29va2llcyhzZXNzaW9uLmNvb2tpZVN0b3Jh
Z2UoKS5nZXQoKSk7Ci19Ci0KLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhjb25zdCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBob3N0
bmFtZXMpCi17Ci0gICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVn
ZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOwotCi0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotCi0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3Jh
Z2UgPSBzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKTsKLSAgICBOU0FycmF5ICpjb29raWVzID0gaHR0
cENvb2tpZXMoY29va2llU3RvcmFnZS5nZXQoKSk7Ci0gICAgaWYgKCFjb29raWVzKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJldGFpblB0cjxOU0hUVFBD
b29raWU+Pj4gY29va2llc0J5RG9tYWluOwotICAgIGZvciAoTlNIVFRQQ29va2llKiBjb29raWUg
aW4gY29va2llcykgewotICAgICAgICBhdXRvJiBjb29raWVzID0gY29va2llc0J5RG9tYWluLmFk
ZChjb29raWUuZG9tYWluLCBWZWN0b3I8UmV0YWluUHRyPE5TSFRUUENvb2tpZT4+KCkpLml0ZXJh
dG9yLT52YWx1ZTsKLSAgICAgICAgY29va2llcy5hcHBlbmQoY29va2llKTsKLSAgICB9Ci0KLSAg
ICBmb3IgKGNvbnN0IGF1dG8mIGhvc3RuYW1lIDogaG9zdG5hbWVzKSB7Ci0gICAgICAgIGF1dG8g
aXQgPSBjb29raWVzQnlEb21haW4uZmluZChob3N0bmFtZSk7Ci0gICAgICAgIGlmIChpdCA9PSBj
b29raWVzQnlEb21haW4uZW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBm
b3IgKGF1dG8mIGNvb2tpZSA6IGl0LT52YWx1ZSkKLSAgICAgICAgICAgIGRlbGV0ZUhUVFBDb29r
aWUoY29va2llU3RvcmFnZS5nZXQoKSwgY29va2llLmdldCgpKTsKLSAgICB9Ci0KLSAgICBbc2Vz
c2lvbi5uc0Nvb2tpZVN0b3JhZ2UoKSBfc2F2ZUNvb2tpZXNdOwotCi0gICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKLX0KLQotdm9pZCBkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShj
b25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIFdhbGxUaW1lIHRpbWVQb2ludCkK
LXsKLSAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5B
Y2Nlc3NSYXdDb29raWVzKSk7Ci0KLSAgICBpZiAoIVtOU0hUVFBDb29raWVTdG9yYWdlIGluc3Rh
bmNlc1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxlY3RvcihyZW1vdmVDb29raWVzU2luY2VEYXRlOild
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU1RpbWVJbnRlcnZhbCB0aW1lSW50ZXJ2YWwgPSB0
aW1lUG9pbnQuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCk7Ci0gICAgTlNEYXRlICpkYXRl
ID0gW05TRGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlMTk3MDp0aW1lSW50ZXJ2YWxdOwot
Ci0gICAgYXV0byAqc3RvcmFnZSA9IHNlc3Npb24ubnNDb29raWVTdG9yYWdlKCk7Ci0KLSAgICBb
c3RvcmFnZSByZW1vdmVDb29raWVzU2luY2VEYXRlOmRhdGVdOwotICAgIFtzdG9yYWdlIF9zYXZl
Q29va2llc107Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvbWFjL1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzT3BlcmF0aW9uUXVldWVEZWxlZ2F0ZS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1dlYkNvcmVSZXNvdXJjZUhh
bmRsZUFzT3BlcmF0aW9uUXVldWVEZWxlZ2F0ZS5tbQppbmRleCA4ODc2MzEwMGFkNGU2NmQ5NDEy
MjY4YTdhOTFjMzlmZDM5OTAyNjMzLi5iM2U5MDdmZmRkZTI4NWY4YzgwM2Q2NzFhMjdmZjc0YTA5
MjFjMjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9X
ZWJDb3JlUmVzb3VyY2VIYW5kbGVBc09wZXJhdGlvblF1ZXVlRGVsZWdhdGUubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvV2ViQ29yZVJlc291cmNlSGFuZGxlQXNP
cGVyYXRpb25RdWV1ZURlbGVnYXRlLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaW1wb3J0ICJBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZS5oIgogI2ltcG9ydCAiQXV0aGVudGljYXRpb25NYWMuaCIKICNp
bXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW1wb3J0
ICJSZXNvdXJjZUhhbmRsZS5oIgogI2ltcG9ydCAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKICNp
bXBvcnQgIlJlc291cmNlUmVxdWVzdC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1ZWU4NzYxZjY1YjE1YWIwOWEyNGVkYjkwZWRhYTg1MjMzZDUzMWM3Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDI2MCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwOCBYYW4gTG9wZXogPHhh
bkBnbm9tZS5vcmc+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBTLkwuCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShT
T1VQKQotCi0jaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiQ29va2llUmVxdWVzdEhlYWRl
ckZpZWxkUHJveHkuaCIKLSNpbmNsdWRlICJDb29raWVzU3RyYXRlZ3kuaCIKLSNpbmNsdWRlICJH
VW5pcXVlUHRyU291cC5oIgotI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oIgotI2lu
Y2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIu
aCIKLSNpbmNsdWRlICJTb3VwTmV0d29ya1Nlc3Npb24uaCIKLSNpbmNsdWRlICJVUkwuaCIKLSNp
bmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBpbmxpbmUgYm9vbCBodHRwT25seUNvb2tpZUV4aXN0cyhjb25zdCBHU0xpc3QqIGNvb2tp
ZXMsIGNvbnN0IGdjaGFyKiBuYW1lLCBjb25zdCBnY2hhciogcGF0aCkKLXsKLSAgICBmb3IgKGNv
bnN0IEdTTGlzdCogaXRlciA9IGNvb2tpZXM7IGl0ZXI7IGl0ZXIgPSBnX3NsaXN0X25leHQoaXRl
cikpIHsKLSAgICAgICAgU291cENvb2tpZSogY29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tp
ZSo+KGl0ZXItPmRhdGEpOwotICAgICAgICBpZiAoIXN0cmNtcChzb3VwX2Nvb2tpZV9nZXRfbmFt
ZShjb29raWUpLCBuYW1lKQotICAgICAgICAgICAgJiYgIWdfc3RyY21wMChzb3VwX2Nvb2tpZV9n
ZXRfcGF0aChjb29raWUpLCBwYXRoKSkgewotICAgICAgICAgICAgaWYgKHNvdXBfY29va2llX2dl
dF9odHRwX29ubHkoY29va2llKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBzZXRDb29raWVzRnJvbURPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Np
b24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJM
JiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWlu
dDY0X3Q+IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBVTlVTRURfUEFSQU0o
ZnJhbWVJRCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7Ci0gICAgR1VuaXF1ZVB0cjxTb3Vw
VVJJPiBvcmlnaW4gPSB1cmwuY3JlYXRlU291cFVSSSgpOwotICAgIGlmICghb3JpZ2luKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IGZpcnN0UGFydHlVUkkgPSBm
aXJzdFBhcnR5LmNyZWF0ZVNvdXBVUkkoKTsKLSAgICBpZiAoIWZpcnN0UGFydHlVUkkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIEdldCBleGlzdGluZyBjb29raWVzIGZvciB0aGlzIG9yaWdp
bi4KLSAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKTsKLSAg
ICBHU0xpc3QqIGV4aXN0aW5nQ29va2llcyA9IHNvdXBfY29va2llX2phcl9nZXRfY29va2llX2xp
c3QoamFyLCBvcmlnaW4uZ2V0KCksIFRSVUUpOwotCi0gICAgZm9yIChhdXRvJiBjb29raWVTdHJp
bmcgOiB2YWx1ZS5zcGxpdCgnXG4nKSkgewotICAgICAgICBHVW5pcXVlUHRyPFNvdXBDb29raWU+
IGNvb2tpZShzb3VwX2Nvb2tpZV9wYXJzZShjb29raWVTdHJpbmcudXRmOCgpLmRhdGEoKSwgb3Jp
Z2luLmdldCgpKSk7Ci0gICAgICAgIGlmICghY29va2llKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb29raWUgaXMgbm90IGh0dHBPbmx5IHNpbmNl
IHN1Y2ggY29va2llcyBzaG91bGQgbm90IGJlIHNldCBmcm9tIEphdmFTY3JpcHQuCi0gICAgICAg
IGlmIChzb3VwX2Nvb2tpZV9nZXRfaHR0cF9vbmx5KGNvb2tpZS5nZXQoKSkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZG8gbm90IG92ZXJ3cml0ZSBo
dHRwT25seSBjb29raWVzIGZyb20gSmF2YVNjcmlwdC4KLSAgICAgICAgaWYgKGh0dHBPbmx5Q29v
a2llRXhpc3RzKGV4aXN0aW5nQ29va2llcywgc291cF9jb29raWVfZ2V0X25hbWUoY29va2llLmdl
dCgpKSwgc291cF9jb29raWVfZ2V0X3BhdGgoY29va2llLmdldCgpKSkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfYWRkX2Nvb2tpZV93aXRoX2ZpcnN0
X3BhcnR5KGphciwgZmlyc3RQYXJ0eVVSSS5nZXQoKSwgY29va2llLnJlbGVhc2UoKSk7Ci0gICAg
fQotCi0gICAgc291cF9jb29raWVzX2ZyZWUoZXhpc3RpbmdDb29raWVzKTsKLX0KLQotc3RhdGlj
IHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZXNGb3JTZXNzaW9uKGNvbnN0IE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiB1cmwsIGJvb2wgZm9ySFRUUEhlYWRl
ciwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpCi17Ci0gICAgR1Vu
aXF1ZVB0cjxTb3VwVVJJPiB1cmkgPSB1cmwuY3JlYXRlU291cFVSSSgpOwotICAgIGlmICghdXJp
KQotICAgICAgICByZXR1cm4geyB7IH0sIGZhbHNlIH07Ci0KLSAgICBHU0xpc3QqIGNvb2tpZXMg
PSBzb3VwX2Nvb2tpZV9qYXJfZ2V0X2Nvb2tpZV9saXN0KHNlc3Npb24uY29va2llU3RvcmFnZSgp
LCB1cmkuZ2V0KCksIGZvckhUVFBIZWFkZXIpOwotICAgIGJvb2wgZGlkQWNjZXNzU2VjdXJlQ29v
a2llcyA9IGZhbHNlOwotCi0gICAgLy8gbGlic291cCBzaG91bGQgb21pdCBzZWN1cmUgY29va2ll
cyBpdHNlbGYgaWYgdGhlIHByb3RvY29sIGlzIG5vdCBodHRwcy4KLSAgICBpZiAodXJsLnByb3Rv
Y29sSXMoImh0dHBzIikpIHsKLSAgICAgICAgR1NMaXN0KiBpdGVtID0gY29va2llczsKLSAgICAg
ICAgd2hpbGUgKGl0ZW0pIHsKLSAgICAgICAgICAgIGF1dG8gY29va2llID0gc3RhdGljX2Nhc3Q8
U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpOwotICAgICAgICAgICAgaWYgKHNvdXBfY29va2llX2dl
dF9zZWN1cmUoY29va2llKSkgewotICAgICAgICAgICAgICAgIGRpZEFjY2Vzc1NlY3VyZUNvb2tp
ZXMgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmIChpbmNsdWRlU2VjdXJlQ29va2llcyA9PSBJ
bmNsdWRlU2VjdXJlQ29va2llczo6Tm8pIHsKLSAgICAgICAgICAgICAgICAgICAgR1NMaXN0KiBu
ZXh0ID0gaXRlbS0+bmV4dDsKLSAgICAgICAgICAgICAgICAgICAgc291cF9jb29raWVfZnJlZShz
dGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSkpOwotICAgICAgICAgICAgICAgICAg
ICBjb29raWVzID0gZ19zbGlzdF9yZW1vdmVfbGluayhjb29raWVzLCBpdGVtKTsKLSAgICAgICAg
ICAgICAgICAgICAgaXRlbSA9IG5leHQ7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGl0ZW0gPSBpdGVt
LT5uZXh0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFjb29raWVzKQotICAgICAgICBy
ZXR1cm4geyB7IH0sIGZhbHNlIH07Ci0KLSAgICBHVW5pcXVlUHRyPGNoYXI+IGNvb2tpZUhlYWRl
cihzb3VwX2Nvb2tpZXNfdG9fY29va2llX2hlYWRlcihjb29raWVzKSk7Ci0gICAgc291cF9jb29r
aWVzX2ZyZWUoY29va2llcyk7Ci0KLSAgICByZXR1cm4geyBTdHJpbmc6OmZyb21VVEY4KGNvb2tp
ZUhlYWRlci5nZXQoKSksIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMgfTsKLX0KLQotc3RkOjpwYWly
PFN0cmluZywgYm9vbD4gY29va2llc0ZvckRPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24m
IHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29u
c3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9u
YWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNv
b2tpZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZpcnN0UGFydHkpOwotICAgIFVOVVNFRF9QQVJB
TShmcmFtZUlEKTsKLSAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKLSAgICByZXR1cm4gY29va2ll
c0ZvclNlc3Npb24oc2Vzc2lvbiwgdXJsLCBmYWxzZSwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOwot
fQotCi1zdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8
dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVk
ZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KGZpcnN0UGFydHkpOwotICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsKLSAgICBVTlVTRURfUEFS
QU0ocGFnZUlEKTsKLSAgICAvLyBTZWN1cmUgY29va2llcyB3aWxsIHN0aWxsIG9ubHkgYmUgaW5j
bHVkZWQgaWYgdXJsJ3MgcHJvdG9jb2wgaXMgaHR0cHMuCi0gICAgcmV0dXJuIGNvb2tpZXNGb3JT
ZXNzaW9uKHNlc3Npb24sIHVybCwgdHJ1ZSwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOwotfQotCi1z
dGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25z
dCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IENvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFByb3h5JiBoZWFkZXJGaWVsZFByb3h5KQotewotICAgIHJldHVybiBjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShzZXNzaW9uLCBoZWFkZXJGaWVsZFByb3h5LmZpcnN0UGFydHks
IGhlYWRlckZpZWxkUHJveHkuc2FtZVNpdGVJbmZvLCBoZWFkZXJGaWVsZFByb3h5LnVybCwgaGVh
ZGVyRmllbGRQcm94eS5mcmFtZUlELCBoZWFkZXJGaWVsZFByb3h5LnBhZ2VJRCwgaGVhZGVyRmll
bGRQcm94eS5pbmNsdWRlU2VjdXJlQ29va2llcyk7Ci19Ci0KLWJvb2wgY29va2llc0VuYWJsZWQo
Y29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uKQotewotICAgIGF1dG8gcG9saWN5
ID0gc291cF9jb29raWVfamFyX2dldF9hY2NlcHRfcG9saWN5KHNlc3Npb24uY29va2llU3RvcmFn
ZSgpKTsKLSAgICByZXR1cm4gcG9saWN5ID09IFNPVVBfQ09PS0lFX0pBUl9BQ0NFUFRfQUxXQVlT
IHx8IHBvbGljeSA9PSBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX05PX1RISVJEX1BBUlRZOwotfQot
Ci1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9u
LCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYg
dXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2
NF90PiBwYWdlSUQsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQotewotICAgIFVOVVNFRF9Q
QVJBTShmaXJzdFBhcnR5KTsKLSAgICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7Ci0gICAgVU5VU0VE
X1BBUkFNKHBhZ2VJRCk7Ci0gICAgcmF3Q29va2llcy5jbGVhcigpOwotICAgIEdVbmlxdWVQdHI8
U291cFVSST4gdXJpID0gdXJsLmNyZWF0ZVNvdXBVUkkoKTsKLSAgICBpZiAoIXVyaSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1VuaXF1ZVB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9j
b29raWVfamFyX2dldF9jb29raWVfbGlzdChzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKSwgdXJpLmdl
dCgpLCBUUlVFKSk7Ci0gICAgaWYgKCFjb29raWVzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBmb3IgKEdTTGlzdCogaXRlciA9IGNvb2tpZXMuZ2V0KCk7IGl0ZXI7IGl0ZXIgPSBnX3Ns
aXN0X25leHQoaXRlcikpIHsKLSAgICAgICAgU291cENvb2tpZSogc291cENvb2tpZSA9IHN0YXRp
Y19jYXN0PFNvdXBDb29raWUqPihpdGVyLT5kYXRhKTsKLSAgICAgICAgQ29va2llIGNvb2tpZTsK
LSAgICAgICAgY29va2llLm5hbWUgPSBTdHJpbmc6OmZyb21VVEY4KHNvdXBDb29raWUtPm5hbWUp
OwotICAgICAgICBjb29raWUudmFsdWUgPSBTdHJpbmc6OmZyb21VVEY4KHNvdXBDb29raWUtPnZh
bHVlKTsKLSAgICAgICAgY29va2llLmRvbWFpbiA9IFN0cmluZzo6ZnJvbVVURjgoc291cENvb2tp
ZS0+ZG9tYWluKTsKLSAgICAgICAgY29va2llLnBhdGggPSBTdHJpbmc6OmZyb21VVEY4KHNvdXBD
b29raWUtPnBhdGgpOwotICAgICAgICBjb29raWUuY3JlYXRlZCA9IDA7Ci0gICAgICAgIGNvb2tp
ZS5leHBpcmVzID0gc291cENvb2tpZS0+ZXhwaXJlcyA/IHN0YXRpY19jYXN0PGRvdWJsZT4oc291
cF9kYXRlX3RvX3RpbWVfdChzb3VwQ29va2llLT5leHBpcmVzKSkgKiAxMDAwIDogMDsKLSAgICAg
ICAgY29va2llLmh0dHBPbmx5ID0gc291cENvb2tpZS0+aHR0cF9vbmx5OwotICAgICAgICBjb29r
aWUuc2VjdXJlID0gc291cENvb2tpZS0+c2VjdXJlOwotICAgICAgICBjb29raWUuc2Vzc2lvbiA9
ICFzb3VwQ29va2llLT5leHBpcmVzOwotICAgICAgICByYXdDb29raWVzLmFwcGVuZChXVEZNb3Zl
KGNvb2tpZSkpOwotICAgICAgICBzb3VwX2Nvb2tpZV9mcmVlKHNvdXBDb29raWUpOwotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5h
bWUpCi17Ci0gICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiB1cmkgPSB1cmwuY3JlYXRlU291cFVSSSgp
OwotICAgIGlmICghdXJpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTb3VwQ29va2llSmFyKiBq
YXIgPSBzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKTsKLSAgICBHVW5pcXVlUHRyPEdTTGlzdD4gY29v
a2llcyhzb3VwX2Nvb2tpZV9qYXJfZ2V0X2Nvb2tpZV9saXN0KGphciwgdXJpLmdldCgpLCBUUlVF
KSk7Ci0gICAgaWYgKCFjb29raWVzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDU3RyaW5nIGNv
b2tpZU5hbWUgPSBuYW1lLnV0ZjgoKTsKLSAgICBib29sIHdhc0RlbGV0ZWQgPSBmYWxzZTsKLSAg
ICBmb3IgKEdTTGlzdCogaXRlciA9IGNvb2tpZXMuZ2V0KCk7IGl0ZXI7IGl0ZXIgPSBnX3NsaXN0
X25leHQoaXRlcikpIHsKLSAgICAgICAgU291cENvb2tpZSogY29va2llID0gc3RhdGljX2Nhc3Q8
U291cENvb2tpZSo+KGl0ZXItPmRhdGEpOwotICAgICAgICBpZiAoIXdhc0RlbGV0ZWQgJiYgY29v
a2llTmFtZSA9PSBjb29raWUtPm5hbWUpIHsKLSAgICAgICAgICAgIHNvdXBfY29va2llX2phcl9k
ZWxldGVfY29va2llKGphciwgY29va2llKTsKLSAgICAgICAgICAgIHdhc0RlbGV0ZWQgPSB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIHNvdXBfY29va2llX2ZyZWUoY29va2llKTsKLSAgICB9Ci19
Ci0KLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNz
aW9uJiBzZXNzaW9uLCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKLXsKLSAgICBHVW5pcXVl
UHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMoc2Vzc2lvbi5j
b29raWVTdG9yYWdlKCkpKTsKLSAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXMuZ2V0KCk7
IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsKLSAgICAgICAgU291cENvb2tpZSog
Y29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpOwotICAgICAgICBp
ZiAoY29va2llLT5kb21haW4pCi0gICAgICAgICAgICBob3N0bmFtZXMuYWRkKFN0cmluZzo6ZnJv
bVVURjgoY29va2llLT5kb21haW4pKTsKLSAgICAgICAgc291cF9jb29raWVfZnJlZShjb29raWUp
OwotICAgIH0KLX0KLQotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKGNvbnN0IE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1l
cykKLXsKLSAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBzZXNzaW9uLmNvb2tpZVN0b3Jh
Z2UoKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgaG9zdG5hbWUgOiBob3N0bmFtZXMpIHsKLSAg
ICAgICAgQ1N0cmluZyBob3N0TmFtZVN0cmluZyA9IGhvc3RuYW1lLnV0ZjgoKTsKLQotICAgICAg
ICBHVW5pcXVlUHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMo
Y29va2llSmFyKSk7Ci0gICAgICAgIGZvciAoR1NMaXN0KiBpdGVtID0gY29va2llcy5nZXQoKTsg
aXRlbTsgaXRlbSA9IGdfc2xpc3RfbmV4dChpdGVtKSkgewotICAgICAgICAgICAgU291cENvb2tp
ZSogY29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpOwotICAgICAg
ICAgICAgaWYgKHNvdXBfY29va2llX2RvbWFpbl9tYXRjaGVzKGNvb2tpZSwgaG9zdE5hbWVTdHJp
bmcuZGF0YSgpKSkKLSAgICAgICAgICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfZGVsZXRlX2Nvb2tp
ZShjb29raWVKYXIsIGNvb2tpZSk7Ci0gICAgICAgICAgICBzb3VwX2Nvb2tpZV9mcmVlKGNvb2tp
ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgZGVsZXRlQWxsQ29va2llcyhjb25zdCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24pCi17Ci0gICAgU291cENvb2tpZUphciogY29v
a2llSmFyID0gc2Vzc2lvbi5jb29raWVTdG9yYWdlKCk7Ci0gICAgR1VuaXF1ZVB0cjxHU0xpc3Q+
IGNvb2tpZXMoc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNvb2tpZUphcikpOwotICAgIGZv
ciAoR1NMaXN0KiBpdGVtID0gY29va2llcy5nZXQoKTsgaXRlbTsgaXRlbSA9IGdfc2xpc3RfbmV4
dChpdGVtKSkgewotICAgICAgICBTb3VwQ29va2llKiBjb29raWUgPSBzdGF0aWNfY2FzdDxTb3Vw
Q29va2llKj4oaXRlbS0+ZGF0YSk7Ci0gICAgICAgIHNvdXBfY29va2llX2phcl9kZWxldGVfY29v
a2llKGNvb2tpZUphciwgY29va2llKTsKLSAgICAgICAgc291cF9jb29raWVfZnJlZShjb29raWUp
OwotICAgIH0KLX0KLQotdm9pZCBkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShjb25zdCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIFdhbGxUaW1lIHRpbWVzdGFtcCkKLXsKLSAg
ICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGRlbGV0aW5nIGNvb2tpZXMgbW9kaWZpZWQgc2lu
Y2UgdGhlIGdpdmVuIHRpbWVzdGFtcC4gSXQgc2hvdWxkIHByb2JhYmx5IGJlIGFkZGVkIHRvIGxp
YnNvdXAuCi0gICAgaWYgKHRpbWVzdGFtcCA9PSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoMCkp
Ci0gICAgICAgIGRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbik7Ci0gICAgZWxzZQotICAgICAgICBn
X3dhcm5pbmcoIkRlbGV0aW5nIGNvb2tpZXMgbW9kaWZpZWQgc2luY2UgYSBnaXZlbiB0aW1lIHNw
YW4gaXMgbm90IHN1cHBvcnRlZCB5ZXQiKTsKLX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3JrU3RvcmFnZVNlc3Np
b25Tb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3Jr
U3RvcmFnZVNlc3Npb25Tb3VwLmNwcAppbmRleCA1ZTNjMjQ1YTNjNmM2MzZiN2U2MmQzMzYxYzNi
N2ZmM2ZjODJkNjAwLi5iM2Q3MWE0YjQwZTVkZWQwOWI2ODMyMDA4YmVmMDA2MWQxZmVkMTVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0
b3JhZ2VTZXNzaW9uU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAj
aWYgVVNFKFNPVVApCiAKICNpbmNsdWRlICJDb29raWUuaCIKKyNpbmNsdWRlICJDb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRQcm94eS5oIgogI2luY2x1ZGUgIkdVbmlxdWVQdHJTb3VwLmgiCiAjaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTb3VwTmV0d29ya1Nlc3Npb24uaCIK
QEAgLTI5MSw2ICsyOTIsNjIgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNhdmVDcmVk
ZW50aWFsVG9QZXJzaXN0ZW50U3RvcmFnZShjb25zdCBQcm90ZWN0aW9uU3AKICNlbmRpZgogfQog
Citib29sIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0VuYWJsZWQoKSBjb25zdAorewor
ICAgIGF1dG8gcG9saWN5ID0gc291cF9jb29raWVfamFyX2dldF9hY2NlcHRfcG9saWN5KGNvb2tp
ZVN0b3JhZ2UoKSk7CisgICAgcmV0dXJuIHBvbGljeSA9PSBTT1VQX0NPT0tJRV9KQVJfQUNDRVBU
X0FMV0FZUyB8fCBwb2xpY3kgPT0gU09VUF9DT09LSUVfSkFSX0FDQ0VQVF9OT19USElSRF9QQVJU
WTsKK30KKworc3RhdGljIGlubGluZSBib29sIGh0dHBPbmx5Q29va2llRXhpc3RzKGNvbnN0IEdT
TGlzdCogY29va2llcywgY29uc3QgZ2NoYXIqIG5hbWUsIGNvbnN0IGdjaGFyKiBwYXRoKQorewor
ICAgIGZvciAoY29uc3QgR1NMaXN0KiBpdGVyID0gY29va2llczsgaXRlcjsgaXRlciA9IGdfc2xp
c3RfbmV4dChpdGVyKSkgeworICAgICAgICBTb3VwQ29va2llKiBjb29raWUgPSBzdGF0aWNfY2Fz
dDxTb3VwQ29va2llKj4oaXRlci0+ZGF0YSk7CisgICAgICAgIGlmICghc3RyY21wKHNvdXBfY29v
a2llX2dldF9uYW1lKGNvb2tpZSksIG5hbWUpIAorICAgICAgICAgICAgJiYgIWdfc3RyY21wMChz
b3VwX2Nvb2tpZV9nZXRfcGF0aChjb29raWUpLCBwYXRoKSkgeworICAgICAgICAgICAgaWYgKHNv
dXBfY29va2llX2dldF9odHRwX29ubHkoY29va2llKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXNGcm9tRE9N
KGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiB1
cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0
X3Q+IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKK3sKKyAgICBVTlVTRURfUEFS
QU0oZnJhbWVJRCk7CisgICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7CisgICAgR1VuaXF1ZVB0cjxT
b3VwVVJJPiBvcmlnaW4gPSB1cmwuY3JlYXRlU291cFVSSSgpOworICAgIGlmICghb3JpZ2luKQor
ICAgICAgICByZXR1cm47CisKKyAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IGZpcnN0UGFydHlVUkkg
PSBmaXJzdFBhcnR5LmNyZWF0ZVNvdXBVUkkoKTsKKyAgICBpZiAoIWZpcnN0UGFydHlVUkkpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIEdldCBleGlzdGluZyBjb29raWVzIGZvciB0aGlzIG9y
aWdpbi4KKyAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBjb29raWVTdG9yYWdlKCk7CisgICAgR1NM
aXN0KiBleGlzdGluZ0Nvb2tpZXMgPSBzb3VwX2Nvb2tpZV9qYXJfZ2V0X2Nvb2tpZV9saXN0KGph
ciwgb3JpZ2luLmdldCgpLCBUUlVFKTsKKworICAgIGZvciAoYXV0byYgY29va2llU3RyaW5nIDog
dmFsdWUuc3BsaXQoJ1xuJykpIHsKKyAgICAgICAgR1VuaXF1ZVB0cjxTb3VwQ29va2llPiBjb29r
aWUoc291cF9jb29raWVfcGFyc2UoY29va2llU3RyaW5nLnV0ZjgoKS5kYXRhKCksIG9yaWdpbi5n
ZXQoKSkpOworCisgICAgICAgIGlmICghY29va2llKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb29raWUgaXMgbm90IGh0dHBPbmx5IHNpbmNlIHN1
Y2ggY29va2llcyBzaG91bGQgbm90IGJlIHNldCBmcm9tIEphdmFTY3JpcHQuCisgICAgICAgIGlm
IChzb3VwX2Nvb2tpZV9nZXRfaHR0cF9vbmx5KGNvb2tpZS5nZXQoKSkpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZG8gbm90IG92ZXJ3cml0ZSBodHRw
T25seSBjb29raWVzIGZyb20gSmF2YVNjcmlwdC4KKyAgICAgICAgaWYgKGh0dHBPbmx5Q29va2ll
RXhpc3RzKGV4aXN0aW5nQ29va2llcywgc291cF9jb29raWVfZ2V0X25hbWUoY29va2llLmdldCgp
KSwgc291cF9jb29raWVfZ2V0X3BhdGgoY29va2llLmdldCgpKSkpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfYWRkX2Nvb2tpZV93aXRoX2ZpcnN0X3Bh
cnR5KGphciwgZmlyc3RQYXJ0eVVSSS5nZXQoKSwgY29va2llLnJlbGVhc2UoKSk7CisgICAgfQor
CisgICAgc291cF9jb29raWVzX2ZyZWUoZXhpc3RpbmdDb29raWVzKTsKK30KKwogdm9pZCBOZXR3
b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXMoY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tp
ZXMsIGNvbnN0IFVSTCYsIGNvbnN0IFVSTCYpCiB7CiAgICAgZm9yIChhdXRvIGNvb2tpZSA6IGNv
b2tpZXMpCkBAIC0zMDgsNiArMzY1LDc3IEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpk
ZWxldGVDb29raWUoY29uc3QgQ29va2llJiBjb29raWUpCiAgICAgc291cF9jb29raWVfamFyX2Rl
bGV0ZV9jb29raWUoY29va2llU3RvcmFnZSgpLCB0YXJnZXRDb29raWUuZ2V0KCkpOwogfQogCit2
b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llKGNvbnN0IFVSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiB1cmkg
PSB1cmwuY3JlYXRlU291cFVSSSgpOworICAgIGlmICghdXJpKQorICAgICAgICByZXR1cm47CisK
KyAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBjb29raWVTdG9yYWdlKCk7CisgICAgR1VuaXF1ZVB0
cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFyX2dldF9jb29raWVfbGlzdChqYXIsIHVy
aS5nZXQoKSwgVFJVRSkpOworICAgIGlmICghY29va2llcykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQ1N0cmluZyBjb29raWVOYW1lID0gbmFtZS51dGY4KCk7CisgICAgYm9vbCB3YXNEZWxldGVk
ID0gZmFsc2U7CisgICAgZm9yIChHU0xpc3QqIGl0ZXIgPSBjb29raWVzLmdldCgpOyBpdGVyOyBp
dGVyID0gZ19zbGlzdF9uZXh0KGl0ZXIpKSB7CisgICAgICAgIFNvdXBDb29raWUqIGNvb2tpZSA9
IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVyLT5kYXRhKTsKKyAgICAgICAgaWYgKCF3YXNE
ZWxldGVkICYmIGNvb2tpZU5hbWUgPT0gY29va2llLT5uYW1lKSB7CisgICAgICAgICAgICBzb3Vw
X2Nvb2tpZV9qYXJfZGVsZXRlX2Nvb2tpZShqYXIsIGNvb2tpZSk7CisgICAgICAgICAgICB3YXNE
ZWxldGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBzb3VwX2Nvb2tpZV9mcmVlKGNvb2tp
ZSk7CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29v
a2llcygpCit7CisgICAgU291cENvb2tpZUphciogY29va2llSmFyID0gY29va2llU3RvcmFnZSgp
OworICAgIEdVbmlxdWVQdHI8R1NMaXN0PiBjb29raWVzKHNvdXBfY29va2llX2phcl9hbGxfY29v
a2llcyhjb29raWVKYXIpKTsKKyAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXMuZ2V0KCk7
IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsKKyAgICAgICAgU291cENvb2tpZSog
Y29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpOworICAgICAgICBz
b3VwX2Nvb2tpZV9qYXJfZGVsZXRlX2Nvb2tpZShjb29raWVKYXIsIGNvb2tpZSk7CisgICAgICAg
IHNvdXBfY29va2llX2ZyZWUoY29va2llKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShXYWxsVGltZSB0aW1lc3Rh
bXApCit7CisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBkZWxldGluZyBjb29raWVzIG1v
ZGlmaWVkIHNpbmNlIHRoZSBnaXZlbiB0aW1lc3RhbXAuIEl0IHNob3VsZCBwcm9iYWJseSBiZSBh
ZGRlZCB0byBsaWJzb3VwLgorICAgIGlmICh0aW1lc3RhbXAgPT0gV2FsbFRpbWU6OmZyb21SYXdT
ZWNvbmRzKDApKQorICAgICAgICBkZWxldGVBbGxDb29raWVzKCk7CisgICAgZWxzZQorICAgICAg
ICBnX3dhcm5pbmcoIkRlbGV0aW5nIGNvb2tpZXMgbW9kaWZpZWQgc2luY2UgYSBnaXZlbiB0aW1l
IHNwYW4gaXMgbm90IHN1cHBvcnRlZCB5ZXQiKTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNl
c3Npb246OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGhv
c3RuYW1lcykKK3sKKyAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBjb29raWVTdG9yYWdl
KCk7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGhvc3RuYW1lIDogaG9zdG5hbWVzKSB7CisgICAg
ICAgIENTdHJpbmcgaG9zdE5hbWVTdHJpbmcgPSBob3N0bmFtZS51dGY4KCk7CisKKyAgICAgICAg
R1VuaXF1ZVB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNv
b2tpZUphcikpOworICAgICAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXMuZ2V0KCk7IGl0
ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsKKyAgICAgICAgICAgIFNvdXBDb29raWUq
IGNvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5kYXRhKTsKKyAgICAgICAg
ICAgIGlmIChzb3VwX2Nvb2tpZV9kb21haW5fbWF0Y2hlcyhjb29raWUsIGhvc3ROYW1lU3RyaW5n
LmRhdGEoKSkpCisgICAgICAgICAgICAgICAgc291cF9jb29raWVfamFyX2RlbGV0ZV9jb29raWUo
Y29va2llSmFyLCBjb29raWUpOworICAgICAgICAgICAgc291cF9jb29raWVfZnJlZShjb29raWUp
OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0
SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit7CisgICAg
R1VuaXF1ZVB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNv
b2tpZVN0b3JhZ2UoKSkpOworICAgIGZvciAoR1NMaXN0KiBpdGVtID0gY29va2llcy5nZXQoKTsg
aXRlbTsgaXRlbSA9IGdfc2xpc3RfbmV4dChpdGVtKSkgeworICAgICAgICBTb3VwQ29va2llKiBj
b29raWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSk7CisgICAgICAgIGlm
IChjb29raWUtPmRvbWFpbikKKyAgICAgICAgICAgIGhvc3RuYW1lcy5hZGQoU3RyaW5nOjpmcm9t
VVRGOChjb29raWUtPmRvbWFpbikpOworICAgICAgICBzb3VwX2Nvb2tpZV9mcmVlKGNvb2tpZSk7
CisgICAgfQorfQorCiBWZWN0b3I8Q29va2llPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEFs
bENvb2tpZXMoKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIFdLMiB0byB1c2UuCkBA
IC0zMzAsNiArNDU4LDk4IEBAIFZlY3RvcjxDb29raWU+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6
Z2V0Q29va2llcyhjb25zdCBVUkwmIHVybCkKICAgICByZXR1cm4gY29va2llczsKIH0KIAorYm9v
bCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldFJhd0Nvb2tpZXMoY29uc3QgVVJMJiBmaXJzdFBh
cnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1
aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBWZWN0b3I8
Q29va2llPiYgcmF3Q29va2llcykgY29uc3QKK3sKKyAgICBVTlVTRURfUEFSQU0oZmlyc3RQYXJ0
eSk7CisgICAgVU5VU0VEX1BBUkFNKGZyYW1lSUQpOworICAgIFVOVVNFRF9QQVJBTShwYWdlSUQp
OworICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKKyAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IHVyaSA9
IHVybC5jcmVhdGVTb3VwVVJJKCk7CisgICAgaWYgKCF1cmkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIEdVbmlxdWVQdHI8R1NMaXN0PiBjb29raWVzKHNvdXBfY29va2llX2phcl9nZXRf
Y29va2llX2xpc3QoY29va2llU3RvcmFnZSgpLCB1cmkuZ2V0KCksIFRSVUUpKTsKKyAgICBpZiAo
IWNvb2tpZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoR1NMaXN0KiBpdGVy
ID0gY29va2llcy5nZXQoKTsgaXRlcjsgaXRlciA9IGdfc2xpc3RfbmV4dChpdGVyKSkgeworICAg
ICAgICBTb3VwQ29va2llKiBzb3VwQ29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0
ZXItPmRhdGEpOworICAgICAgICBDb29raWUgY29va2llOworICAgICAgICBjb29raWUubmFtZSA9
IFN0cmluZzo6ZnJvbVVURjgoc291cENvb2tpZS0+bmFtZSk7CisgICAgICAgIGNvb2tpZS52YWx1
ZSA9IFN0cmluZzo6ZnJvbVVURjgoc291cENvb2tpZS0+dmFsdWUpOworICAgICAgICBjb29raWUu
ZG9tYWluID0gU3RyaW5nOjpmcm9tVVRGOChzb3VwQ29va2llLT5kb21haW4pOworICAgICAgICBj
b29raWUucGF0aCA9IFN0cmluZzo6ZnJvbVVURjgoc291cENvb2tpZS0+cGF0aCk7CisgICAgICAg
IGNvb2tpZS5jcmVhdGVkID0gMDsKKyAgICAgICAgY29va2llLmV4cGlyZXMgPSBzb3VwQ29va2ll
LT5leHBpcmVzID8gc3RhdGljX2Nhc3Q8ZG91YmxlPihzb3VwX2RhdGVfdG9fdGltZV90KHNvdXBD
b29raWUtPmV4cGlyZXMpKSAqIDEwMDAgOiAwOworICAgICAgICBjb29raWUuaHR0cE9ubHkgPSBz
b3VwQ29va2llLT5odHRwX29ubHk7CisgICAgICAgIGNvb2tpZS5zZWN1cmUgPSBzb3VwQ29va2ll
LT5zZWN1cmU7CisgICAgICAgIGNvb2tpZS5zZXNzaW9uID0gIXNvdXBDb29raWUtPmV4cGlyZXM7
CisgICAgICAgIHJhd0Nvb2tpZXMuYXBwZW5kKFdURk1vdmUoY29va2llKSk7CisgICAgICAgIHNv
dXBfY29va2llX2ZyZWUoc291cENvb2tpZSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3N0YXRpYyBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBjb29raWVzRm9yU2Vzc2lvbihjb25z
dCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgdXJsLCBib29sIGZv
ckhUVFBIZWFkZXIsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKQor
eworICAgIEdVbmlxdWVQdHI8U291cFVSST4gdXJpID0gdXJsLmNyZWF0ZVNvdXBVUkkoKTsKKyAg
ICBpZiAoIXVyaSkKKyAgICAgICAgcmV0dXJuIHsgeyB9LCBmYWxzZSB9OworCisgICAgR1NMaXN0
KiBjb29raWVzID0gc291cF9jb29raWVfamFyX2dldF9jb29raWVfbGlzdChzZXNzaW9uLmNvb2tp
ZVN0b3JhZ2UoKSwgdXJpLmdldCgpLCBmb3JIVFRQSGVhZGVyKTsKKyAgICBib29sIGRpZEFjY2Vz
c1NlY3VyZUNvb2tpZXMgPSBmYWxzZTsKKworICAgIC8vIGxpYnNvdXAgc2hvdWxkIG9taXQgc2Vj
dXJlIGNvb2tpZXMgaXRzZWxmIGlmIHRoZSBwcm90b2NvbCBpcyBub3QgaHR0cHMuCisgICAgaWYg
KHVybC5wcm90b2NvbElzKCJodHRwcyIpKSB7CisgICAgICAgIEdTTGlzdCogaXRlbSA9IGNvb2tp
ZXM7CisgICAgICAgIHdoaWxlIChpdGVtKSB7CisgICAgICAgICAgICBhdXRvIGNvb2tpZSA9IHN0
YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5kYXRhKTsKKyAgICAgICAgICAgIGlmIChzb3Vw
X2Nvb2tpZV9nZXRfc2VjdXJlKGNvb2tpZSkpIHsKKyAgICAgICAgICAgICAgICBkaWRBY2Nlc3NT
ZWN1cmVDb29raWVzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZVNlY3VyZUNv
b2tpZXMgPT0gSW5jbHVkZVNlY3VyZUNvb2tpZXM6Ok5vKSB7CisgICAgICAgICAgICAgICAgICAg
IEdTTGlzdCogbmV4dCA9IGl0ZW0tPm5leHQ7CisgICAgICAgICAgICAgICAgICAgIHNvdXBfY29v
a2llX2ZyZWUoc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpKTsKKyAgICAgICAg
ICAgICAgICAgICAgY29va2llcyA9IGdfc2xpc3RfcmVtb3ZlX2xpbmsoY29va2llcywgaXRlbSk7
CisgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBuZXh0OworICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
dGVtID0gaXRlbS0+bmV4dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghY29va2llcykK
KyAgICAgICAgcmV0dXJuIHsgeyB9LCBmYWxzZSB9OworCisgICAgR1VuaXF1ZVB0cjxjaGFyPiBj
b29raWVIZWFkZXIoc291cF9jb29raWVzX3RvX2Nvb2tpZV9oZWFkZXIoY29va2llcykpOworICAg
IHNvdXBfY29va2llc19mcmVlKGNvb2tpZXMpOworCisgICAgcmV0dXJuIHsgU3RyaW5nOjpmcm9t
VVRGOChjb29raWVIZWFkZXIuZ2V0KCkpLCBkaWRBY2Nlc3NTZWN1cmVDb29raWVzIH07Cit9CisK
K3N0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0Zv
ckRPTShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVS
TCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVp
bnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVz
KSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTShmaXJzdFBhcnR5KTsKKyAgICBVTlVTRURfUEFS
QU0oZnJhbWVJRCk7CisgICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7CisgICAgcmV0dXJuIGNvb2tp
ZXNGb3JTZXNzaW9uKCp0aGlzLCB1cmwsIGZhbHNlLCBpbmNsdWRlU2VjdXJlQ29va2llcyk7Cit9
CisKK3N0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1l
U2l0ZUluZm8mLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJ
RCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBp
bmNsdWRlU2VjdXJlQ29va2llcykgY29uc3QKK3sKKyAgICBVTlVTRURfUEFSQU0oZmlyc3RQYXJ0
eSk7CisgICAgVU5VU0VEX1BBUkFNKGZyYW1lSUQpOworICAgIFVOVVNFRF9QQVJBTShwYWdlSUQp
OworICAgIC8vIFNlY3VyZSBjb29raWVzIHdpbGwgc3RpbGwgb25seSBiZSBpbmNsdWRlZCBpZiB1
cmwncyBwcm90b2NvbCBpcyBodHRwcy4KKyAgICByZXR1cm4gY29va2llc0ZvclNlc3Npb24oKnRo
aXMsIHVybCwgdHJ1ZSwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOworfQorCitzdGQ6OnBhaXI8U3Ry
aW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IENvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5JiBoZWFkZXJGaWVsZFBy
b3h5KSBjb25zdAoreworICAgIHJldHVybiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSho
ZWFkZXJGaWVsZFByb3h5LmZpcnN0UGFydHksIGhlYWRlckZpZWxkUHJveHkuc2FtZVNpdGVJbmZv
LCBoZWFkZXJGaWVsZFByb3h5LnVybCwgaGVhZGVyRmllbGRQcm94eS5mcmFtZUlELCBoZWFkZXJG
aWVsZFByb3h5LnBhZ2VJRCwgaGVhZGVyRmllbGRQcm94eS5pbmNsdWRlU2VjdXJlQ29va2llcyk7
Cit9CisKIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpmbHVzaENvb2tpZVN0b3JlKCkKIHsK
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBXSzIgdG8gdXNlLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3Bw
CmluZGV4IGZlOTJiYzFjOThmZmYzY2Y3NjAzODQyNmNiOTc5NWMxY2VlODgyMDUuLjBiYjE0OWNh
MTU1NTBlMWE5YzhkM2U0NjlhYjI2Y2U2NDZiOGNiYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKQEAg
LTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvQ29va2llU3RvcmFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvVVJMLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC02MCw3ICs1OSw3IEBAIHZvaWQgV2ViQ29va2ll
TWFuYWdlcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBDYWxsYmFjCiB7CiAgICAgSGFzaFNldDxTdHJpbmc+IGhvc3RuYW1lczsKICAgICBpZiAoYXV0
byogc3RvcmFnZVNlc3Npb24gPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3JhZ2VTZXNzaW9u
KHNlc3Npb25JRCkpCi0gICAgICAgIFdlYkNvcmU6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKCpz
dG9yYWdlU2Vzc2lvbiwgaG9zdG5hbWVzKTsKKyAgICAgICAgc3RvcmFnZVNlc3Npb24tPmdldEhv
c3RuYW1lc1dpdGhDb29raWVzKGhvc3RuYW1lcyk7CiAKICAgICBtX3Byb2Nlc3Muc2VuZChNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjpEaWRHZXRIb3N0bmFtZXNXaXRoQ29va2llcyhj
b3B5VG9WZWN0b3IoaG9zdG5hbWVzKSwgY2FsbGJhY2tJRCksIDApOwogfQpAQCAtNjgsMTQgKzY3
LDE0IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDYWxsYmFjCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmRl
bGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0
cmluZyYgaG9zdG5hbWUpCiB7CiAgICAgaWYgKGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gTmV0d29y
a1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQotICAgICAgICBXZWJD
b3JlOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKCpzdG9yYWdlU2Vzc2lvbiwgeyBob3N0bmFt
ZSB9KTsKKyAgICAgICAgc3RvcmFnZVNlc3Npb24tPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMo
eyBob3N0bmFtZSB9KTsKIH0KIAogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmRlbGV0ZUFsbENv
b2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewogICAgIGlmIChhdXRvKiBzdG9yYWdl
U2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFnZVNlc3Npb24oc2Vzc2lvbklE
KSkKLSAgICAgICAgV2ViQ29yZTo6ZGVsZXRlQWxsQ29va2llcygqc3RvcmFnZVNlc3Npb24pOwor
ICAgICAgICBzdG9yYWdlU2Vzc2lvbi0+ZGVsZXRlQWxsQ29va2llcygpOwogfQogCiB2b2lkIFdl
YkNvb2tpZU1hbmFnZXI6OmRlbGV0ZUNvb2tpZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IENvb2tpZSYgY29va2llLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCkBAIC04OSw3ICs4OCw3
IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgY29uc3QgQ29va2llJiBjb29rCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmRlbGV0
ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2FsbFRp
bWUgdGltZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewogICAgIGlmIChhdXRvKiBzdG9yYWdl
U2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFnZVNlc3Npb24oc2Vzc2lvbklE
KSkKLSAgICAgICAgV2ViQ29yZTo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoKnN0b3Jh
Z2VTZXNzaW9uLCB0aW1lKTsKKyAgICAgICAgc3RvcmFnZVNlc3Npb24tPmRlbGV0ZUFsbENvb2tp
ZXNNb2RpZmllZFNpbmNlKHRpbWUpOwogCiAgICAgbV9wcm9jZXNzLnNlbmQoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eTo6RGlkRGVsZXRlQ29va2llcyhjYWxsYmFja0lEKSwgMCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IGEzMWYxNzEyMTdlNDUwNzNlMzU5NjU4
Mzg1ODlkMWY0MjVkMWVmNjEuLjA4Mzg5MzA4NTJiMTJmYTdiMTQwNmNiYzQwZTcxZDc2OWU4NDll
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC01Miw3ICs1Miw2IEBACiAjaW5j
bHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29va2llSmFyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
ZXNvdXJjZUxvYWRlck9wdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVz
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2FtZVNpdGVJbmZvLmg+CkBAIC0zNzksNyArMzc4LDcg
QEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y29udmVydE1haW5SZXNvdXJj
ZUxvYWRUb0Rvd25sb2FkKFBBTDo6U2Vzc2kKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OmNvb2tpZXNGb3JET00oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwm
IGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwm
IHVybCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50
NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcywg
U3RyaW5nJiBjb29raWVTdHJpbmcsIGJvb2wmIHNlY3VyZUNvb2tpZXNBY2Nlc3NlZCkKIHsKICAg
ICBhdXRvJiBuZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQp
OwotICAgIHN0ZDo6dGllKGNvb2tpZVN0cmluZywgc2VjdXJlQ29va2llc0FjY2Vzc2VkKSA9IFdl
YkNvcmU6OmNvb2tpZXNGb3JET00obmV0d29ya1N0b3JhZ2VTZXNzaW9uLCBmaXJzdFBhcnR5LCBz
YW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNsdWRlU2VjdXJlQ29va2llcyk7
CisgICAgc3RkOjp0aWUoY29va2llU3RyaW5nLCBzZWN1cmVDb29raWVzQWNjZXNzZWQpID0gbmV0
d29ya1N0b3JhZ2VTZXNzaW9uLmNvb2tpZXNGb3JET00oZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZv
LCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOwogI2lmIEhBVkUo
Q0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKSAmJiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
ICAgICBpZiAoTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLnNob3VsZExvZ0Nvb2tpZUluZm9y
bWF0aW9uKCkpCiAgICAgICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6bG9nQ29va2llSW5mb3Jt
YXRpb24oIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb29raWVzRm9yRE9NIiwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4odGhpcyksIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiwg
Zmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGVtcHR5U3RyaW5nKCksIGZyYW1lSUQsIHBh
Z2VJRCwgc3RkOjpudWxsb3B0KTsKQEAgLTM4OSw3ICszODgsNyBAQCB2b2lkIE5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpjb29raWVzRm9yRE9NKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29ucwogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c2V0Q29va2llc0Zy
b21ET00oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNv
bnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRp
b25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBj
b25zdCBTdHJpbmcmIGNvb2tpZVN0cmluZykKIHsKICAgICBhdXRvJiBuZXR3b3JrU3RvcmFnZVNl
c3Npb24gPSBzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIFdlYkNvcmU6OnNldENvb2tp
ZXNGcm9tRE9NKG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiwgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZv
LCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgY29va2llU3RyaW5nKTsKKyAgICBuZXR3b3JrU3RvcmFn
ZVNlc3Npb24uc2V0Q29va2llc0Zyb21ET00oZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmws
IGZyYW1lSUQsIHBhZ2VJRCwgY29va2llU3RyaW5nKTsKICNpZiBIQVZFKENGTkVUV09SS19TVE9S
QUdFX1BBUlRJVElPTklORykgJiYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECiAgICAgaWYgKE5ldHdv
cmtQcm9jZXNzOjpzaW5nbGV0b24oKS5zaG91bGRMb2dDb29raWVJbmZvcm1hdGlvbigpKQogICAg
ICAgICBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmxvZ0Nvb2tpZUluZm9ybWF0aW9uKCJOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c2V0Q29va2llc0Zyb21ET00iLCByZWludGVycHJldF9j
YXN0PGNvbnN0IHZvaWQqPih0aGlzKSwgbmV0d29ya1N0b3JhZ2VTZXNzaW9uLCBmaXJzdFBhcnR5
LCBzYW1lU2l0ZUluZm8sIHVybCwgZW1wdHlTdHJpbmcoKSwgZnJhbWVJRCwgcGFnZUlELCBzdGQ6
Om51bGxvcHQpOwpAQCAtMzk4LDIyICszOTcsMjIgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6c2V0Q29va2llc0Zyb21ET00oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELAog
CiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb29raWVzRW5hYmxlZChQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIGJvb2wmIHJlc3VsdCkKIHsKLSAgICByZXN1bHQgPSBXZWJD
b3JlOjpjb29raWVzRW5hYmxlZChzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKTsKKyAgICByZXN1
bHQgPSBzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpLmNvb2tpZXNFbmFibGVkKCk7CiB9CiAKIHZv
aWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBj
b25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0
aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwg
SW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMsIFN0cmluZyYgY29va2ll
U3RyaW5nLCBib29sJiBzZWN1cmVDb29raWVzQWNjZXNzZWQpCiB7Ci0gICAgc3RkOjp0aWUoY29v
a2llU3RyaW5nLCBzZWN1cmVDb29raWVzQWNjZXNzZWQpID0gV2ViQ29yZTo6Y29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKSwgZmlyc3RQYXJ0eSwg
c2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMp
OworICAgIHN0ZDo6dGllKGNvb2tpZVN0cmluZywgc2VjdXJlQ29va2llc0FjY2Vzc2VkKSA9IHN0
b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkuY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoZmly
c3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVkZVNlY3Vy
ZUNvb2tpZXMpOwogfQogCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpnZXRS
YXdDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiBmaXJzdFBhcnR5
LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6
b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJ
RCwgVmVjdG9yPENvb2tpZT4mIHJlc3VsdCkKIHsKLSAgICBXZWJDb3JlOjpnZXRSYXdDb29raWVz
KHN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCksIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJs
LCBmcmFtZUlELCBwYWdlSUQsIHJlc3VsdCk7CisgICAgc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklE
KS5nZXRSYXdDb29raWVzKGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBw
YWdlSUQsIHJlc3VsdCk7CiB9CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OmRlbGV0ZUNvb2tpZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFVSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCiB7Ci0gICAgV2ViQ29yZTo6ZGVsZXRlQ29va2llKHN0
b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCksIHVybCwgY29va2llTmFtZSk7CisgICAgc3RvcmFnZVNl
c3Npb24oc2Vzc2lvbklEKS5kZWxldGVDb29raWUodXJsLCBjb29raWVOYW1lKTsKIH0KIAogdm9p
ZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVnaXN0ZXJGaWxlQmxvYlVSTChjb25z
dCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUm
JiBleHRlbnNpb25IYW5kbGUsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDhiZmVmZTM2
MmE4NWJmMjU5NDg0NWFjMjhmNjQwOTMzY2E2ODk2NjkuLjVhMTI0YzhjYzhlYWI3OTc4MTIyMmNh
ZWFkNGI4NzNiMjhiOWIzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwCkBAIC02NSw3ICs2NSw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9N
SU1FVHlwZVJlZ2lzdHJ5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RhdGVOb3RpZmll
ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3Vy
Y2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SdW50aW1lQXBwbGljYXRpb25DaGVja3Mu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1NjaGVtZVJlZ2lzdHJ5Lmg+CkBAIC01MzMsNyArNTMyLDcg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXQKIAogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNv
bnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcykpIHsKICAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtTdG9yYWdlU2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFnZVNlc3Np
b24oc2Vzc2lvbklEKSkKLSAgICAgICAgICAgIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKCpuZXR3
b3JrU3RvcmFnZVNlc3Npb24sIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5ob3N0
TmFtZXNXaXRoQ29va2llcyk7CisgICAgICAgICAgICBuZXR3b3JrU3RvcmFnZVNlc3Npb24tPmdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5o
b3N0TmFtZXNXaXRoQ29va2llcyk7CiAgICAgfQogCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMu
Y29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpDcmVkZW50aWFscykpIHsKQEAgLTU2NSw3ICs1NjQs
NyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaQogCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMu
Y29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpDb29raWVzKSkgewogICAgICAgICBpZiAoYXV0byog
bmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vz
c2lvbihzZXNzaW9uSUQpKQotICAgICAgICAgICAgZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2lu
Y2UoKm5ldHdvcmtTdG9yYWdlU2Vzc2lvbiwgbW9kaWZpZWRTaW5jZSk7CisgICAgICAgICAgICBu
ZXR3b3JrU3RvcmFnZVNlc3Npb24tPmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKG1vZGlm
aWVkU2luY2UpOwogICAgIH0KIAogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdl
YnNpdGVEYXRhVHlwZTo6Q3JlZGVudGlhbHMpKSB7CkBAIC02MTMsNyArNjEyLDcgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgT3B0aW8KIHsKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhX
ZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXMpKSB7CiAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU3Rv
cmFnZVNlc3Npb24gPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3JhZ2VTZXNzaW9uKHNlc3Np
b25JRCkpCi0gICAgICAgICAgICBkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKCpuZXR3b3JrU3Rv
cmFnZVNlc3Npb24sIGNvb2tpZUhvc3ROYW1lcyk7CisgICAgICAgICAgICBuZXR3b3JrU3RvcmFn
ZVNlc3Npb24tPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoY29va2llSG9zdE5hbWVzKTsKICAg
ICB9CiAKICAgICBhdXRvIGNsZWFyVGFza3NIYW5kbGVyID0gV1RGOjpDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShbdGhpcywgY2FsbGJhY2tJRF0gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IDUyZWJmOWFm
NTM5ZGM4MGRlMjE2OTJmMDU2YjFjMzNmYjk4YWJkNzAuLmNhYTdjZDVlYmU4ZDVhY2M4NTAxNzc5
NTVlMGZiNTE5NmU5YTFhOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKQEAgLTU5LDcgKzU5LDYgQEAKIAogI2lm
IEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKSAmJiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db29raWVKYXIuaD4KICNlbmRpZgogCiAjaWYgVVNFKFFVSUNL
X0xPT0spCkBAIC0xMDE0LDcgKzEwMTMsNyBAQCBzdGF0aWMgdm9pZCBsb2dDb29raWVJbmZvcm1h
dGlvbkludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IHZvaWQqIGxvZ2dlZAogICAg
IEFTU0VSVChOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNob3VsZExvZ0Nvb2tpZUluZm9ybWF0aW9u
KCkpOwogCiAgICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gY29va2llczsKLSAgICBpZiAoIVdl
YkNvcmU6OmdldFJhd0Nvb2tpZXMobmV0d29ya1N0b3JhZ2VTZXNzaW9uLCBwYXJ0aXRpb24sIHNh
bWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGNvb2tpZXMpKQorICAgIGlmICghbmV0
d29ya1N0b3JhZ2VTZXNzaW9uLmdldFJhd0Nvb2tpZXMocGFydGl0aW9uLCBzYW1lU2l0ZUluZm8s
IHVybCwgZnJhbWVJRCwgcGFnZUlELCBjb29raWVzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
YXV0byBlc2NhcGVkVVJMID0gZXNjYXBlRm9ySlNPTih1cmwuc3RyaW5nKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCmluZGV4
IGI3MmRjMTVmZmUwYWU5Mzg4ZDZkZmJiNGNlNmMwZWQxN2U3NGFmOTguLjJmZjBjYTI2OTFiMDY1
ZjQwY2Q4MDc1Yjc4ZGQ0NTlkZDFhZGVmOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKQEAgLTM1LDcgKzM1LDYgQEAKICNp
bmNsdWRlIDxXZWJDb3JlL0hUVFBIZWFkZXJOYW1lcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTG93
UG93ZXJNb2RlTm90aWZpZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vz
c2lvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db29raWVKYXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VS
ZXNwb25zZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJh
dGVnaWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCmluZGV4IDY5MTMxMzU4MTVlYTdkMDA4MTk0MjVjY2U4NDg0
NjhlZTNlNGZkZjcuLmFlNzM4OGY5YTQ5YzMwZmNjNmM4NmM4NTFmYTA2NTgyMTczM2JmNTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0
Zm9ybVN0cmF0ZWdpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCkBAIC01NCw3ICs1NCw2IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlR3JvdXAuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1Bhc3RlYm9hcmRJdGVtSW5mby5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
UGxhdGZvcm1Db29raWVKYXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtUGFzdGVib2Fy
ZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUHJvZ3Jlc3NUcmFja2VyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZXNvdXJjZUVycm9yLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0gYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0KaW5kZXgg
MzQ1MDY3MmQ1Y2I1MTk2ZGQzYTNhNmZiMDYwMDljZDc3Yjk4ZTdjOC4uYjUzMTg4ZWJmY2RmNWE3
NDEzMzE4NTE5OGVjM2QyNGZlMzlhZDg1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5t
bQpAQCAtMzMsNyArMzMsNiBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFzdGVi
b2FyZEl0ZW1JbmZvLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtQ29va2llSmFyLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtUGFzdGVib2FyZC5oPgogI2ltcG9ydCA8V2ViQ29yZS9T
aGFyZWRCdWZmZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvU3ViZnJhbWVMb2FkZXIuaD4KQEAgLTc1
LDM4ICs3NCwzOCBAQCBCbG9iUmVnaXN0cnkqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRl
QmxvYlJlZ2lzdHJ5KCkKIAogc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpjb29raWVzRm9yRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lv
biwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5m
bywgY29uc3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6
b3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNl
Y3VyZUNvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tpZXNGb3JET00oc2Vzc2lv
biwgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVk
ZVNlY3VyZUNvb2tpZXMpOworICAgIHJldHVybiBzZXNzaW9uLmNvb2tpZXNGb3JET00oZmlyc3RQ
YXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVkZVNlY3VyZUNv
b2tpZXMpOwogfQogCiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0Q29va2llc0Zyb21E
T00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0
UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwg
c3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4g
cGFnZUlELCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cmluZykKIHsKLSAgICBXZWJDb3JlOjpzZXRD
b29raWVzRnJvbURPTShzZXNzaW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJh
bWVJRCwgcGFnZUlELCBjb29raWVTdHJpbmcpOworICAgIHNlc3Npb24uc2V0Q29va2llc0Zyb21E
T00oZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgY29va2ll
U3RyaW5nKTsKIH0KIAogYm9vbCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZXNFbmFibGVk
KGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbikKIHsKLSAgICByZXR1cm4gV2Vi
Q29yZTo6Y29va2llc0VuYWJsZWQoc2Vzc2lvbik7CisgICAgcmV0dXJuIHNlc3Npb24uY29va2ll
c0VuYWJsZWQoKTsKIH0KIAogc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJ
bmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90
PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVD
b29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKQogewotICAgIHJldHVybiBXZWJDb3JlOjpjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShzZXNzaW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUlu
Zm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBpbmNsdWRlU2VjdXJlQ29va2llcyk7CisgICAgcmV0
dXJuIHNlc3Npb24uY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoZmlyc3RQYXJ0eSwgc2Ft
ZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOwog
fQogCiBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3Qg
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3Qg
VVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8
dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tp
ZXMpCiB7CiAgICAgYXV0byYgc2Vzc2lvbiA9IHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpID8gV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpIDog
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKLSAgICByZXR1
cm4gV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoc2Vzc2lvbiwgZmlyc3RQ
YXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVkZVNlY3VyZUNv
b2tpZXMpOworICAgIHJldHVybiBzZXNzaW9uLmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1ZGVT
ZWN1cmVDb29raWVzKTsKIH0KIAogYm9vbCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFJhd0Nv
b2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZp
cnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVy
bCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRf
dD4gcGFnZUlELCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKLSAgICByZXR1cm4gV2Vi
Q29yZTo6Z2V0UmF3Q29va2llcyhzZXNzaW9uLCBmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVy
bCwgZnJhbWVJRCwgcGFnZUlELCByYXdDb29raWVzKTsKKyAgICByZXR1cm4gc2Vzc2lvbi5nZXRS
YXdDb29raWVzKGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQs
IHJhd0Nvb2tpZXMpOwogfQogCiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRlQ29v
a2llKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKIHsKLSAgICBXZWJDb3JlOjpkZWxldGVDb29raWUo
c2Vzc2lvbiwgdXJsLCBjb29raWVOYW1lKTsKKyAgICBzZXNzaW9uLmRlbGV0ZUNvb2tpZSh1cmws
IGNvb2tpZU5hbWUpOwogfQogCiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0VHlwZXMo
VmVjdG9yPFN0cmluZz4mIHR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5t
bSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KaW5k
ZXggYzRkNzQyMmRlNzFmZmNjMTRjZGRhODMzM2U2OTcyNmE3MDRlZTc0My4uNzcxOGQwNWFlZGE2
MjY2ZTIzMTMwYTE0ZTgyMWJlMWU4NjZjNDdjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCkBAIC00Miw3ICs0Miw2IEBACiAjaW1w
b3J0IDxXZWJDb3JlL0F1ZGlvU2Vzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9EZXByZWNhdGVk
R2xvYmFsU2V0dGluZ3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9u
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtQ29va2llSmFyLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5n
cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0RW5jb2RpbmdSZWdpc3RyeS5oPgpAQCAtMTg3Nyw3
ICsxODc2LDcgQEAgc3RhdGljIE5TU3RyaW5nICpjbGFzc0lCQ3JlYXRvcklEID0gbmlsOwogCiAr
ICh2b2lkKV9jbGVhck5ldHdvcmtMb2FkZXJTZXNzaW9uCiB7Ci0gICAgV2ViQ29yZTo6ZGVsZXRl
QWxsQ29va2llcyhOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigp
KTsKKyAgICBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLmRl
bGV0ZUFsbENvb2tpZXMoKTsKIH0KIAogKyAodm9pZClfc2V0Q3VycmVudE5ldHdvcmtMb2FkZXJT
ZXNzaW9uQ29va2llQWNjZXB0UG9saWN5OihOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kpcG9saWN5
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN1
cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAppbmRleCBkZTI2MjY4NDM4OGRiYWViM2Iz
OTY2MDAwNjhmOTJlYTNhMzAwODc2Li5mYWI0MjE4NDg2OGYyMjc2MTk4OGFiNDA4NDVmNzllYzcz
OTg4ZTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9y
dC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKQEAgLTMyLDcgKzMyLDYg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZUdyb3VwLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogCiAjaWYgVVNFKENGVVJMQ09OTkVDVElP
TikKICNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNl
Lmg+CkBAIC03MiwzNiArNzEsMzYgQEAgQmxvYlJlZ2lzdHJ5KiBXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSgpCiAKIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6Y29va2llc0ZvckRPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Np
b24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBz
YW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFt
ZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVz
IGluY2x1ZGVTZWN1cmVDb29raWVzKQogewotICAgIHJldHVybiBXZWJDb3JlOjpjb29raWVzRm9y
RE9NKHNlc3Npb24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdl
SUQsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKKyAgICByZXR1cm4gc2Vzc2lvbi5jb29raWVzRm9y
RE9NKGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1
ZGVTZWN1cmVDb29raWVzKTsKIH0KIAogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldENv
b2tpZXNGcm9tRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3Qg
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3Qg
VVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9uYWw8
dWludDY0X3Q+IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHJpbmcpCiB7Ci0gICAgV2Vi
Q29yZTo6c2V0Q29va2llc0Zyb21ET00oc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZv
LCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgY29va2llU3RyaW5nKTsKKyAgICBzZXNzaW9uLnNldENv
b2tpZXNGcm9tRE9NKGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdl
SUQsIGNvb2tpZVN0cmluZyk7CiB9CiAKIGJvb2wgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29r
aWVzRW5hYmxlZChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24pCiB7Ci0gICAg
cmV0dXJuIFdlYkNvcmU6OmNvb2tpZXNFbmFibGVkKHNlc3Npb24pOworICAgIHJldHVybiBzZXNz
aW9uLmNvb2tpZXNFbmFibGVkKCk7CiB9CiAKIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0
IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25h
bDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNs
dWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykKIHsKLSAgICByZXR1cm4gV2Vi
Q29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwg
c2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMp
OworICAgIHJldHVybiBzZXNzaW9uLmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGZpcnN0
UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1ZGVTZWN1cmVD
b29raWVzKTsKIH0KIAogc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUlu
Zm8sIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVT
ZWN1cmVDb29raWVzKQogewogICAgIGF1dG8mIHNlc3Npb24gPSBzZXNzaW9uSUQuaXNFcGhlbWVy
YWwoKSA/IFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nl
c3Npb24oKSA6IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7
Ci0gICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHNlc3Np
b24sIGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIGluY2x1
ZGVTZWN1cmVDb29raWVzKTsKKyAgICByZXR1cm4gc2Vzc2lvbi5jb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlE
LCBpbmNsdWRlU2VjdXJlQ29va2llcyk7CiB9CiAKIGJvb2wgV2ViUGxhdGZvcm1TdHJhdGVnaWVz
OjpnZXRSYXdDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29u
c3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29u
c3QgVVJMJiB1cmwsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHN0ZDo6b3B0aW9u
YWw8dWludDY0X3Q+IHBhZ2VJRCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7Ci0gICAg
cmV0dXJuIFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgc2FtZVNp
dGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgcmF3Q29va2llcyk7CisgICAgcmV0dXJuIHNl
c3Npb24uZ2V0UmF3Q29va2llcyhmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJ
RCwgcGFnZUlELCByYXdDb29raWVzKTsKIH0KIAogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmRlbGV0ZUNvb2tpZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0
IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCiB7Ci0gICAgV2ViQ29yZTo6ZGVs
ZXRlQ29va2llKHNlc3Npb24sIHVybCwgY29va2llTmFtZSk7CisgICAgc2Vzc2lvbi5kZWxldGVD
b29raWUodXJsLCBjb29raWVOYW1lKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL1dlYlByZWZlcmVuY2VzLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlBy
ZWZlcmVuY2VzLmNwcAppbmRleCBlMTAwNDEyMDI4YTMzYzQ5NDM5Mjg3ZGQ3OTA4ZTZhM2E1NzIw
ZDY2Li5jMDhmMmY3MjcyMGEyNmFjNjdlNjllOTIzNjE3YWQ3NjE2NTMxYWY5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlcy5jcHAKKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZXMuY3BwCkBAIC00Miw3ICs0Miw2IEBACiAj
aW5jbHVkZSA8V2ViQ29yZS9Gb250Q2FzY2FkZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTG9jYWxp
emVkU3RyaW5ncy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogI2luY2x1ZGUgPGxpbWl0
cz4KICNpbmNsdWRlIDxzaGxvYmouaD4KICNpbmNsdWRlIDx3Y2hhci5oPgpAQCAtMjEyMCw3ICsy
MTE5LDcgQEAgSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6bWVkaWFQcmVsb2FkaW5nRW5hYmxlZChf
T3V0XyBCT09MKiBlbmFibGVkKQogCiBIUkVTVUxUIFdlYlByZWZlcmVuY2VzOjpjbGVhck5ldHdv
cmtMb2FkZXJTZXNzaW9uKCkKIHsKLSAgICBXZWJDb3JlOjpkZWxldGVBbGxDb29raWVzKE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOworICAgIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuZGVsZXRlQWxsQ29va2llcygp
OwogICAgIHJldHVybiBTX09LOwogfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>