<?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>38060</bug_id>
          
          <creation_ts>2010-04-23 14:34:41 -0700</creation_ts>
          <short_desc>Split up Threading.h</short_desc>
          <delta_ts>2010-04-23 18:07:55 -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>Web Template Framework</component>
          <version>528+ (Nightly 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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>216564</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-23 14:34:41 -0700</bug_when>
    <thetext>Threading.h is getting a little large. Time for a split.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216568</commentid>
    <comment_count>1</comment_count>
      <attachid>54194</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-23 14:39:01 -0700</bug_when>
    <thetext>Created attachment 54194
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216604</commentid>
    <comment_count>2</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-04-23 15:56:39 -0700</bug_when>
    <thetext>Two comments:
1. The include&lt;wtf/*&gt; sorting is off for the newly added items. 
2. I&apos;m surprised that the new headers don&apos;t have entries in the ForwardingHeaders/wtf directories in 
JavaScriptGlue, WebCore, WebKit/mac, WebKitTools/DumpRenderTree (which is where Threading.h appears). Is this not necessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216606</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-23 16:06:24 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Two comments:
&gt; 1. The include&lt;wtf/*&gt; sorting is off for the newly added items. 

Will fix.

&gt; 2. I&apos;m surprised that the new headers don&apos;t have entries in the
&gt; ForwardingHeaders/wtf directories in 
&gt; JavaScriptGlue, WebCore, WebKit/mac, WebKitTools/DumpRenderTree (which is where
&gt; Threading.h appears). Is this not necessary?

:( They do. I just forgot to upload that part of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216608</commentid>
    <comment_count>4</comment_count>
      <attachid>54198</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-23 16:10:19 -0700</bug_when>
    <thetext>Created attachment 54198
Updated patch

Updated.  The WebKit/mac forwarding headers are not needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216611</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-23 16:17:52 -0700</bug_when>
    <thetext>Attachment 54198 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
JavaScriptCore/wtf/ThreadSafeShared.h:65:  Alphabetical sorting problem.  [build/include_order] [4]
JavaScriptCore/wtf/Atomics.h:71:  More than one command on the same line in if  [whitespace/parens] [4]
Total errors found: 2 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>216614</commentid>
    <comment_count>6</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-04-23 16:25:34 -0700</bug_when>
    <thetext>Atomics.h is messed up in this version. &quot;#ifndef Threading_h&quot; etc.

Also, none of your fwd&apos;ing headers have ifndef guards but that seems rather useless and just adds extra clutter so I&apos;m fine with omitting that.

And the style bot noticed a sorting issue.

I would r+ except for the Atomics.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216626</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-23 16:55:56 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Atomics.h is messed up in this version. &quot;#ifndef Threading_h&quot; etc.
&gt; 

I don&apos;s see the issue you are referring to.

&gt; Also, none of your fwd&apos;ing headers have ifndef guards but that seems rather
&gt; useless and just adds extra clutter so I&apos;m fine with omitting that.

Some do (the ones in WebCore/ForwardingHeaders).  I tried to be consistent with the files around them.

&gt; And the style bot noticed a sorting issue.

Will fix before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216648</commentid>
    <comment_count>8</comment_count>
      <attachid>54198</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-04-23 18:02:33 -0700</bug_when>
    <thetext>Comment on attachment 54198
Updated patch

You&apos;re missing the changes in WebCore, so please make sure to include that when you land it.

About this &quot;Atomics.h is messed up in this version.&quot;... I got mixed up because it was in the patch twice (due to the svn cp I guess).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216652</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-23 18:07:55 -0700</bug_when>
    <thetext>Landed in r58206.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54194</attachid>
            <date>2010-04-23 14:39:01 -0700</date>
            <delta_ts>2010-04-23 16:10:19 -0700</delta_ts>
            <desc>patch</desc>
            <filename>splitThreading.diff</filename>
            <type>text/plain</type>
            <size>39363</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU4MTg4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDQtMjMgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBGaXggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zODA2MAorICAgICAgICBTcGxpdCB1cCBUaHJlYWRpbmcuaAorCisgICAgICAgIE1vdmUg
Yml0cyBmb3Igb2YgVGhyZWFkaW5nLmggaW50byAzIG5ldyBmaWxlcy4KKyAgICAgICAgLSBBdG9t
aWNzLmggZm9yIGF0b21pYyBvcGVyYXRpb25zLgorICAgICAgICAtIFRocmVhZFNhZmVTaGFyZWQu
aCBmb3IgdGhlIFRocmVhZFNhZmVTaGFyZWQgY2xhc3MuCisgICAgICAgIC0gVGhyZWFkaW5nUHJp
bWl0aXZlcy5oIGZvciB0aGUgcHJpbWl0aXZlcyBhbmQgcGxhdGZvcm0gdHlwZXMuCisKKyAgICAg
ICAgQmFzaWMgdGhyZWFkaW5nIG9wZXJhdGlvbnMgKGNyZWF0aW9uLCBldGMuKSByZW1haW4gaW4g
VGhyZWFkaW5nLmguCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RG
LnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIHd0Zi9BdG9taWNzLmg6IENvcGllZCBmcm9tIHd0Zi9UaHJlYWRpbmcu
aC4KKyAgICAgICAgKiB3dGYvVGhyZWFkU2FmZVNoYXJlZC5oOiBDb3BpZWQgZnJvbSB3dGYvVGhy
ZWFkaW5nLmguCisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAqIHd0Zi9UaHJl
YWRpbmdQcmltaXRpdmVzLmg6IENvcGllZCBmcm9tIHd0Zi9UaHJlYWRpbmcuaC4KKwogMjAxMC0w
NC0yMyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBRdCBidWls
ZC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA1ODE3OCkKKysrIEphdmFTY3Jp
cHRDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNiArMjI0LDcgQEAg
amF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL0Fsd2F5c0lu
bGluZS5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvQXNzZXJ0aW9ucy5jcHAgXAogCUphdmFTY3Jp
cHRDb3JlL3d0Zi9Bc3NlcnRpb25zLmggXAorCUphdmFTY3JpcHRDb3JlL3d0Zi9BdG9taWNzLmgg
XAogCUphdmFTY3JpcHRDb3JlL3d0Zi9CeXRlQXJyYXkuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS93
dGYvQnl0ZUFycmF5LmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9Dcm9zc1RocmVhZFJlZkNvdW50
ZWQuaCBcCkBAIC0yODMsNyArMjg0LDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
SmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBcCiAJSmF2
YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZy5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9UaHJl
YWRpbmcuaCBcCisJSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaCBcCiAJ
SmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcCBcCisJSmF2YVNjcmlwdENv
cmUvd3RmL1RocmVhZFNhZmVTaGFyZWQuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZFNw
ZWNpZmljLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9UeXBlVHJhaXRzLmNwcCBcCiAJSmF2YVNj
cmlwdENvcmUvd3RmL1R5cGVUcmFpdHMuaCBcCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lmd5cGkJKHJldmlzaW9uIDU4MTc4KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzM2LDYgKzMzNiw3IEBACiAgICAgICAgICAgICAnd3Rm
L0FTQ0lJQ1R5cGUuaCcsCiAgICAgICAgICAgICAnd3RmL0Fzc2VydGlvbnMuY3BwJywKICAgICAg
ICAgICAgICd3dGYvQXNzZXJ0aW9ucy5oJywKKyAgICAgICAgICAgICd3dGYvQXRvbWljcy5oJywK
ICAgICAgICAgICAgICd3dGYvQVZMVHJlZS5oJywKICAgICAgICAgICAgICd3dGYvQnl0ZUFycmF5
LmNwcCcsCiAgICAgICAgICAgICAnd3RmL0J5dGVBcnJheS5oJywKQEAgLTQxNCw4ICs0MTUsMTAg
QEAKICAgICAgICAgICAgICd3dGYvVGhyZWFkaW5nLmNwcCcsCiAgICAgICAgICAgICAnd3RmL1Ro
cmVhZGluZy5oJywKICAgICAgICAgICAgICd3dGYvVGhyZWFkaW5nTm9uZS5jcHAnLAorICAgICAg
ICAgICAgJ3d0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmgnLAogICAgICAgICAgICAgJ3d0Zi9UaHJl
YWRpbmdQdGhyZWFkcy5jcHAnLAogICAgICAgICAgICAgJ3d0Zi9UaHJlYWRpbmdXaW4uY3BwJywK
KyAgICAgICAgICAgICd3dGYvVGhyZWFkU2FmZVNoYXJlZC5oJywKICAgICAgICAgICAgICd3dGYv
VGhyZWFkU3BlY2lmaWMuaCcsCiAgICAgICAgICAgICAnd3RmL1RocmVhZFNwZWNpZmljV2luLmNw
cCcsCiAgICAgICAgICAgICAnd3RmL1R5cGVUcmFpdHMuY3BwJywKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oJKHJldmlz
aW9uIDU4MTc4KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9X
VEYudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNiArMjYxLDEwIEBACiAJCQk+DQogCQk8
L0ZpbGU+DQogCQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXEF0b21pY3MuaCIN
CisJCQk+DQorCQk8L0ZpbGU+DQorCQk8RmlsZQ0KIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3Rm
XEJ5dGVBcnJheS5jcHAiDQogCQkJPg0KIAkJPC9GaWxlPg0KQEAgLTUxMywxMCArNTE3LDE4IEBA
CiAJCQk+DQogCQk8L0ZpbGU+DQogCQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3Rm
XFRocmVhZGluZ1ByaW1pdGl2ZXMuaCINCisJCQk+DQorCQk8L0ZpbGU+DQorCQk8RmlsZQ0KIAkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXFRocmVhZGluZ1dpbi5jcHAiDQogCQkJPg0KIAkJPC9G
aWxlPg0KIAkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxUaHJlYWRTYWZlU2hh
cmVkLmgiDQorCQkJPg0KKwkJPC9GaWxlPg0KKwkJPEZpbGUNCiAJCQlSZWxhdGl2ZVBhdGg9Ii4u
XC4uXHd0ZlxUaHJlYWRTcGVjaWZpYy5oIg0KIAkJCT4NCiAJCTwvRmlsZT4NCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDU4MTc4KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDYxLDYgKzQ2
MSw5IEBACiAJCUJDMzA0NjA3MEUxRjQ5N0YwMDMyMzJDRiAvKiBFcnJvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzMDQ2MDYwRTFGNDk3RjAwMzIz
MkNGIC8qIEVycm9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQkMzMTM1NjQwRjMwMkZBMzAwM0RGRDNBIC8qIERlYnVnZ2VyQWN0aXZhdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzMTM1NjIw
RjMwMkZBMzAwM0RGRDNBIC8qIERlYnVnZ2VyQWN0aXZhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMzEzNTY1MEYzMDJGQTMwMDNERkQz
QSAvKiBEZWJ1Z2dlckFjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkMzMTM1NjMwRjMwMkZBMzAwM0RGRDNBIC8qIERlYnVnZ2VyQWN0
aXZhdGlvbi5jcHAgKi87IH07CisJCUJDNUY3QkJFMTE4MjNCNTkwMDUyQzAyQyAvKiBBdG9taWNz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzVGN0JC
QjExODIzQjU5MDA1MkMwMkMgLyogQXRvbWljcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDNUY3QkJGMTE4MjNCNTkwMDUyQzAyQyAvKiBUaHJl
YWRpbmdQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQzVGN0JCQzExODIzQjU5MDA1MkMwMkMgLyogVGhyZWFkaW5nUHJpbWl0aXZlcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDNUY3
QkMwMTE4MjNCNTkwMDUyQzAyQyAvKiBUaHJlYWRTYWZlU2hhcmVkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzVGN0JCRDExODIzQjU5MDA1MkMwMkMg
LyogVGhyZWFkU2FmZVNoYXJlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUJDNkFBQUU1MEUxRjQyNjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNkFBQUU0MEUx
RjQyNjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzc1NkZDOTBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9i
YWxPYmplY3RGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDNzU2RkM3MEUyMDMxQjIwMERFN0QxMiAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0
aW9ucy5oICovOyB9OwogCQlCQzdGOEZCOTBFMTlEMUMzMDA4NjMyQzAgLyogSlNOdW1iZXJDZWxs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdGOEZC
ODBFMTlEMUMzMDA4NjMyQzAgLyogSlNOdW1iZXJDZWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk1Niw2ICs5NTksOSBAQAogCQlCQzMxMzU2
MzBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlYnVnZ2VyQWN0aXZhdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMzM3QkRFMEUxQUYwQjgwMDc2OTE4QSAvKiBHZXR0ZXJT
ZXR0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0dGVyU2V0dGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMzM3QkVBMEUxQjAwQ0IwMDc2OTE4QSAv
KiBFcnJvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFcnJvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDNUY3QkJCMTE4MjNCNTkwMDUyQzAy
QyAvKiBBdG9taWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF0b21pY3Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM1RjdCQkMxMTgyM0I1OTAwNTJDMDJD
IC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGhyZWFkaW5nUHJpbWl0aXZlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlC
QzVGN0JCRDExODIzQjU5MDA1MkMwMkMgLyogVGhyZWFkU2FmZVNoYXJlZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRTYWZlU2hhcmVkLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDNkFBQUU0MEUxRjQyNjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xhc3NJbmZvLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDNzU2RkM2MEUyMDMxQjIwMERFN0QxMiAvKiBKU0dsb2JhbE9i
amVjdEZ1bmN0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDNzU2RkM3MEUyMDMxQjIwMERFN0QxMiAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM2Nyw2ICsxMzczLDkgQEAKIAkJCQk5
M0I2QTBERTBBQTY0REE0MDA3NkRFMjcgLyogR2V0UHRyLmggKi8sCiAJCQkJNjU3RUVCQkYwOTRF
NDQ1RTAwOEM5QzdCIC8qIEhhc2hDb3VudGVkU2V0LmggKi8sCiAJCQkJNjVERkM5MkEwOEVBMTcz
QTAwRjczMDBCIC8qIEhhc2hGdW5jdGlvbnMuaCAqLywKKwkJCQlCQzVGN0JCQjExODIzQjU5MDA1
MkMwMkMgLyogQXRvbWljcy5oICovLAorCQkJCUJDNUY3QkJDMTE4MjNCNTkwMDUyQzAyQyAvKiBU
aHJlYWRpbmdQcmltaXRpdmVzLmggKi8sCisJCQkJQkM1RjdCQkQxMTgyM0I1OTAwNTJDMDJDIC8q
IFRocmVhZFNhZmVTaGFyZWQuaCAqLywKIAkJCQk2NTIyNDZBNDBDOEQ3QTBFMDA3QkRBRjcgLyog
SGFzaEl0ZXJhdG9ycy5oICovLAogCQkJCTY1REZDOTJCMDhFQTE3M0EwMEY3MzAwQiAvKiBIYXNo
TWFwLmggKi8sCiAJCQkJNjVERkM5MkMwOEVBMTczQTAwRjczMDBCIC8qIEhhc2hTZXQuaCAqLywK
QEAgLTIxMDAsNiArMjEwOSw5IEBACiAJCQkJODZCOTlBRTQxMTdFNTc4MTAwREY1QTkwIC8qIFN0
cmluZ0ltcGxCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkI5OURBNzExODAwRjg1MDBERjVB
OTAgLyogQXRvbWljU3RyaW5nVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMUZDNENCMTE3
RUUyQTgwMDQyNTI3MiAvKiBNRDUuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDNUY3QkJFMTE4MjNC
NTkwMDUyQzAyQyAvKiBBdG9taWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzVGN0JCRjExODIz
QjU5MDA1MkMwMkMgLyogVGhyZWFkaW5nUHJpbWl0aXZlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QkM1RjdCQzAxMTgyM0I1OTAwNTJDMDJDIC8qIFRocmVhZFNhZmVTaGFyZWQuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpJbmRleDogd3RmL0F0b21pY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3dGYvQXRvbWljcy5oCShy
ZXZpc2lvbiA1ODE3OSkJKGZyb20gd3RmL1RocmVhZGluZy5oOjU4MTc5KQorKysgd3RmL0F0b21p
Y3MuaAkod29ya2luZyBjb3B5KQpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL0F0b21pY3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvQXRvbWljcy5oCShyZXZpc2lvbiA1ODE3
OCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGlu
IEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTYs
MjEgKzU2LDEyIEBACiAgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAotI2lmbmRl
ZiBUaHJlYWRpbmdfaAotI2RlZmluZSBUaHJlYWRpbmdfaAorI2lmbmRlZiBBdG9taWNzX2gKKyNk
ZWZpbmUgQXRvbWljc19oCiAKICNpbmNsdWRlICJQbGF0Zm9ybS5oIgogCi0jaWYgT1MoV0lOQ0Up
Ci0jaW5jbHVkZSA8d2luZG93cy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgotI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi0jaWYgT1MoV0lORE9XUykgJiYgIU9T
KFdJTkNFKQorI2lmIE9TKFdJTkRPV1MpCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2VsaWYgT1Mo
REFSV0lOKQogI2luY2x1ZGUgPGxpYmtlcm4vT1NBdG9taWMuaD4KQEAgLTg0LDEzOSArNzUsOCBA
QAogI2VuZGlmCiAjZW5kaWYKIAotI2lmIFVTRShQVEhSRUFEUykKLSNpbmNsdWRlIDxwdGhyZWFk
Lmg+Ci0jZWxpZiBQTEFURk9STShHVEspCi0jaW5jbHVkZSAiR093blB0ci5oIgotdHlwZWRlZiBz
dHJ1Y3QgX0dNdXRleCBHTXV0ZXg7Ci10eXBlZGVmIHN0cnVjdCBfR0NvbmQgR0NvbmQ7Ci0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgPHFnbG9iYWwuaD4KLVFUX0JFR0lOX05B
TUVTUEFDRQotY2xhc3MgUU11dGV4OwotY2xhc3MgUVdhaXRDb25kaXRpb247Ci1RVF9FTkRfTkFN
RVNQQUNFCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGludC5oPgotCi0vLyBGb3IgcG9ydGFiaWxp
dHksIHdlIGRvIG5vdCB1c2UgdGhyZWFkLXNhZmUgc3RhdGljcyBuYXRpdmVseSBzdXBwb3J0ZWQg
Ynkgc29tZSBjb21waWxlcnMgKGUuZy4gZ2NjKS4KLSNkZWZpbmUgQXRvbWljYWxseUluaXRpYWxp
emVkU3RhdGljKFQsIG5hbWUpIFwKLSAgICBXVEY6OmxvY2tBdG9taWNhbGx5SW5pdGlhbGl6ZWRT
dGF0aWNNdXRleCgpOyBcCi0gICAgc3RhdGljIFQgbmFtZTsgXAotICAgIFdURjo6dW5sb2NrQXRv
bWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgoKTsKLQogbmFtZXNwYWNlIFdURiB7CiAKLXR5
cGVkZWYgdWludDMyX3QgVGhyZWFkSWRlbnRpZmllcjsKLXR5cGVkZWYgdm9pZCogKCpUaHJlYWRG
dW5jdGlvbikodm9pZCogYXJndW1lbnQpOwotCi0vLyBSZXR1cm5zIDAgaWYgdGhyZWFkIGNyZWF0
aW9uIGZhaWxlZC4KLS8vIFRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIGEgbGl0ZXJhbCBzaW5jZSBv
biBzb21lIHBsYXRmb3JtcyBpdCdzIHBhc3NlZCBpbiB0byB0aGUgdGhyZWFkLgotVGhyZWFkSWRl
bnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb24sIHZvaWQqLCBjb25zdCBjaGFyKiB0
aHJlYWROYW1lKTsKLQotLy8gSW50ZXJuYWwgcGxhdGZvcm0tc3BlY2lmaWMgY3JlYXRlVGhyZWFk
IGltcGxlbWVudGF0aW9uLgotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChU
aHJlYWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwotCi0vLyBDYWxs
ZWQgaW4gdGhlIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0vLyBIZWxwZnVsIGZvciBw
bGF0Zm9ybXMgd2hlcmUgdGhlIHRocmVhZCBuYW1lIG11c3QgYmUgc2V0IGZyb20gd2l0aGluIHRo
ZSB0aHJlYWQuCi12b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hh
ciogdGhyZWFkTmFtZSk7Ci0KLVRocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVhZCgpOwotaW50
IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIsIHZvaWQqKik7Ci12b2lk
IGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyKTsKLQotI2lmIFVTRShQVEhSRUFEUykKLXR5
cGVkZWYgcHRocmVhZF9tdXRleF90IFBsYXRmb3JtTXV0ZXg7Ci0jaWYgSEFWRShQVEhSRUFEX1JX
TE9DSykKLXR5cGVkZWYgcHRocmVhZF9yd2xvY2tfdCBQbGF0Zm9ybVJlYWRXcml0ZUxvY2s7Ci0j
ZWxzZQotdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybVJlYWRXcml0ZUxvY2s7Ci0jZW5kaWYKLXR5cGVk
ZWYgcHRocmVhZF9jb25kX3QgUGxhdGZvcm1Db25kaXRpb247Ci0jZWxpZiBQTEFURk9STShHVEsp
Ci10eXBlZGVmIEdPd25QdHI8R011dGV4PiBQbGF0Zm9ybU11dGV4OwotdHlwZWRlZiB2b2lkKiBQ
bGF0Zm9ybVJlYWRXcml0ZUxvY2s7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCi10eXBlZGVmIEdPd25Q
dHI8R0NvbmQ+IFBsYXRmb3JtQ29uZGl0aW9uOwotI2VsaWYgUExBVEZPUk0oUVQpCi10eXBlZGVm
IFFUX1BSRVBFTkRfTkFNRVNQQUNFKFFNdXRleCkqIFBsYXRmb3JtTXV0ZXg7Ci10eXBlZGVmIHZv
aWQqIFBsYXRmb3JtUmVhZFdyaXRlTG9jazsgLy8gRklYTUU6IEltcGxlbWVudC4KLXR5cGVkZWYg
UVRfUFJFUEVORF9OQU1FU1BBQ0UoUVdhaXRDb25kaXRpb24pKiBQbGF0Zm9ybUNvbmRpdGlvbjsK
LSNlbGlmIE9TKFdJTkRPV1MpCi1zdHJ1Y3QgUGxhdGZvcm1NdXRleCB7Ci0gICAgQ1JJVElDQUxf
U0VDVElPTiBtX2ludGVybmFsTXV0ZXg7Ci0gICAgc2l6ZV90IG1fcmVjdXJzaW9uQ291bnQ7Ci19
OwotdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybVJlYWRXcml0ZUxvY2s7IC8vIEZJWE1FOiBJbXBsZW1l
bnQuCi1zdHJ1Y3QgUGxhdGZvcm1Db25kaXRpb24gewotICAgIHNpemVfdCBtX3dhaXRlcnNHb25l
OwotICAgIHNpemVfdCBtX3dhaXRlcnNCbG9ja2VkOwotICAgIHNpemVfdCBtX3dhaXRlcnNUb1Vu
YmxvY2s7IAotICAgIEhBTkRMRSBtX2Jsb2NrTG9jazsKLSAgICBIQU5ETEUgbV9ibG9ja1F1ZXVl
OwotICAgIEhBTkRMRSBtX3VuYmxvY2tMb2NrOwotCi0gICAgYm9vbCB0aW1lZFdhaXQoUGxhdGZv
cm1NdXRleCYsIERXT1JEIGR1cmF0aW9uTWlsbGlzZWNvbmRzKTsKLSAgICB2b2lkIHNpZ25hbChi
b29sIHVuYmxvY2tBbGwpOwotfTsKLSNlbHNlCi10eXBlZGVmIHZvaWQqIFBsYXRmb3JtTXV0ZXg7
Ci10eXBlZGVmIHZvaWQqIFBsYXRmb3JtUmVhZFdyaXRlTG9jazsKLXR5cGVkZWYgdm9pZCogUGxh
dGZvcm1Db25kaXRpb247Ci0jZW5kaWYKLSAgICAKLWNsYXNzIE11dGV4IDogcHVibGljIE5vbmNv
cHlhYmxlIHsKLXB1YmxpYzoKLSAgICBNdXRleCgpOwotICAgIH5NdXRleCgpOwotCi0gICAgdm9p
ZCBsb2NrKCk7Ci0gICAgYm9vbCB0cnlMb2NrKCk7Ci0gICAgdm9pZCB1bmxvY2soKTsKLQotcHVi
bGljOgotICAgIFBsYXRmb3JtTXV0ZXgmIGltcGwoKSB7IHJldHVybiBtX211dGV4OyB9Ci1wcml2
YXRlOgotICAgIFBsYXRmb3JtTXV0ZXggbV9tdXRleDsKLX07Ci0KLXR5cGVkZWYgTG9ja2VyPE11
dGV4PiBNdXRleExvY2tlcjsKLQotY2xhc3MgUmVhZFdyaXRlTG9jayA6IHB1YmxpYyBOb25jb3B5
YWJsZSB7Ci1wdWJsaWM6Ci0gICAgUmVhZFdyaXRlTG9jaygpOwotICAgIH5SZWFkV3JpdGVMb2Nr
KCk7Ci0KLSAgICB2b2lkIHJlYWRMb2NrKCk7Ci0gICAgYm9vbCB0cnlSZWFkTG9jaygpOwotCi0g
ICAgdm9pZCB3cml0ZUxvY2soKTsKLSAgICBib29sIHRyeVdyaXRlTG9jaygpOwotICAgIAotICAg
IHZvaWQgdW5sb2NrKCk7Ci0KLXByaXZhdGU6Ci0gICAgUGxhdGZvcm1SZWFkV3JpdGVMb2NrIG1f
cmVhZFdyaXRlTG9jazsKLX07Ci0KLWNsYXNzIFRocmVhZENvbmRpdGlvbiA6IHB1YmxpYyBOb25j
b3B5YWJsZSB7Ci1wdWJsaWM6Ci0gICAgVGhyZWFkQ29uZGl0aW9uKCk7Ci0gICAgflRocmVhZENv
bmRpdGlvbigpOwotICAgIAotICAgIHZvaWQgd2FpdChNdXRleCYgbXV0ZXgpOwotICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgY29uZGl0aW9uIHdhcyBzaWduYWxlZCBiZWZvcmUgYWJzb2x1dGVU
aW1lLCBmYWxzZSBpZiB0aGUgYWJzb2x1dGVUaW1lIHdhcyByZWFjaGVkIG9yIGlzIGluIHRoZSBw
YXN0LgotICAgIC8vIFRoZSBhYnNvbHV0ZVRpbWUgaXMgaW4gc2Vjb25kcywgc3RhcnRpbmcgb24g
SmFudWFyeSAxLCAxOTcwLiBUaGUgdGltZSBpcyBhc3N1bWVkIHRvIHVzZSB0aGUgc2FtZSB0aW1l
IHpvbmUgYXMgV1RGOjpjdXJyZW50VGltZSgpLgotICAgIGJvb2wgdGltZWRXYWl0KE11dGV4Jiwg
ZG91YmxlIGFic29sdXRlVGltZSk7Ci0gICAgdm9pZCBzaWduYWwoKTsKLSAgICB2b2lkIGJyb2Fk
Y2FzdCgpOwotICAgIAotcHJpdmF0ZToKLSAgICBQbGF0Zm9ybUNvbmRpdGlvbiBtX2NvbmRpdGlv
bjsKLX07Ci0KICNpZiBPUyhXSU5ET1dTKQogI2RlZmluZSBXVEZfVVNFX0xPQ0tGUkVFX1RIUkVB
RFNBRkVTSEFSRUQgMQogCkBAIC0yNDcsMTAzICsxMDcsMTEgQEAgaW5saW5lIGludCBhdG9taWNE
ZWNyZW1lbnQoaW50IHZvbGF0aWxlKgogCiAjZW5kaWYKIAotY2xhc3MgVGhyZWFkU2FmZVNoYXJl
ZEJhc2UgOiBwdWJsaWMgTm9uY29weWFibGUgewotcHVibGljOgotICAgIFRocmVhZFNhZmVTaGFy
ZWRCYXNlKGludCBpbml0aWFsUmVmQ291bnQgPSAxKQotICAgICAgICA6IG1fcmVmQ291bnQoaW5p
dGlhbFJlZkNvdW50KQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIHJlZigpCi0gICAgewotI2lm
IFVTRShMT0NLRlJFRV9USFJFQURTQUZFU0hBUkVEKQotICAgICAgICBhdG9taWNJbmNyZW1lbnQo
Jm1fcmVmQ291bnQpOwotI2Vsc2UKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgp
OwotICAgICAgICArK21fcmVmQ291bnQ7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBib29sIGhhc09u
ZVJlZigpCi0gICAgewotICAgICAgICByZXR1cm4gcmVmQ291bnQoKSA9PSAxOwotICAgIH0KLQot
ICAgIGludCByZWZDb3VudCgpIGNvbnN0Ci0gICAgewotI2lmICFVU0UoTE9DS0ZSRUVfVEhSRUFE
U0FGRVNIQVJFRCkKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwotI2VuZGlm
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQgY29uc3Qgdm9sYXRpbGUgJj4obV9yZWZD
b3VudCk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBw
b2ludGVyIHNob3VsZCBiZSBmcmVlZCBvciBub3QuCi0gICAgYm9vbCBkZXJlZkJhc2UoKQotICAg
IHsKLSNpZiBVU0UoTE9DS0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCkKLSAgICAgICAgaWYgKGF0b21p
Y0RlY3JlbWVudCgmbV9yZWZDb3VudCkgPD0gMCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
I2Vsc2UKLSAgICAgICAgaW50IHJlZkNvdW50OwotICAgICAgICB7Ci0gICAgICAgICAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9tdXRleCk7Ci0gICAgICAgICAgICAtLW1fcmVmQ291bnQ7Ci0gICAg
ICAgICAgICByZWZDb3VudCA9IG1fcmVmQ291bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJl
ZkNvdW50IDw9IDApCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0g
ICAgZnJpZW5kIGNsYXNzIENyb3NzVGhyZWFkUmVmQ291bnRlZDsKLQotICAgIGludCBtX3JlZkNv
dW50OwotI2lmICFVU0UoTE9DS0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCkKLSAgICBtdXRhYmxlIE11
dGV4IG1fbXV0ZXg7Ci0jZW5kaWYKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+IGNsYXNzIFRocmVh
ZFNhZmVTaGFyZWQgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZEJhc2UgewotcHVibGljOgotICAg
IFRocmVhZFNhZmVTaGFyZWQoaW50IGluaXRpYWxSZWZDb3VudCA9IDEpCi0gICAgICAgIDogVGhy
ZWFkU2FmZVNoYXJlZEJhc2UoaW5pdGlhbFJlZkNvdW50KQotICAgIHsKLSAgICB9Ci0KLSAgICB2
b2lkIGRlcmVmKCkKLSAgICB7Ci0gICAgICAgIGlmIChkZXJlZkJhc2UoKSkKLSAgICAgICAgICAg
IGRlbGV0ZSBzdGF0aWNfY2FzdDxUKj4odGhpcyk7Ci0gICAgfQotfTsKLQotLy8gVGhpcyBmdW5j
dGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4gSXQgaXMgc2FmZSB0byBj
YWxsIGl0IHJlcGVhdGVkbHkuCi0vLyBEYXJ3aW4gaXMgYW4gZXhjZXB0aW9uIHRvIHRoaXMgcnVs
ZTogaXQgaXMgT0sgdG8gY2FsbCBpdCBmcm9tIGFueSB0aHJlYWQsIHRoZSBvbmx5IHJlcXVpcmVt
ZW50IGlzIHRoYXQgdGhlIGNhbGxzIGFyZSBub3QgcmVlbnRyYW50Lgotdm9pZCBpbml0aWFsaXpl
VGhyZWFkaW5nKCk7Ci0KLXZvaWQgbG9ja0F0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4
KCk7Ci12b2lkIHVubG9ja0F0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCk7Ci0KIH0g
Ly8gbmFtZXNwYWNlIFdURgogCi11c2luZyBXVEY6Ok11dGV4OwotdXNpbmcgV1RGOjpNdXRleExv
Y2tlcjsKLXVzaW5nIFdURjo6VGhyZWFkQ29uZGl0aW9uOwotdXNpbmcgV1RGOjpUaHJlYWRJZGVu
dGlmaWVyOwotdXNpbmcgV1RGOjpUaHJlYWRTYWZlU2hhcmVkOwotCiAjaWYgVVNFKExPQ0tGUkVF
X1RIUkVBRFNBRkVTSEFSRUQpCiB1c2luZyBXVEY6OmF0b21pY0RlY3JlbWVudDsKIHVzaW5nIFdU
Rjo6YXRvbWljSW5jcmVtZW50OwogI2VuZGlmCiAKLXVzaW5nIFdURjo6Y3JlYXRlVGhyZWFkOwot
dXNpbmcgV1RGOjpjdXJyZW50VGhyZWFkOwotdXNpbmcgV1RGOjpkZXRhY2hUaHJlYWQ7Ci11c2lu
ZyBXVEY6OndhaXRGb3JUaHJlYWRDb21wbGV0aW9uOwotCi0jZW5kaWYgLy8gVGhyZWFkaW5nX2gK
KyNlbmRpZiAvLyBBdG9taWNzX2gKSW5kZXg6IHd0Zi9UaHJlYWRTYWZlU2hhcmVkLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gd3RmL1RocmVhZFNhZmVTaGFyZWQuaAkocmV2aXNpb24gNTgxNzkpCShmcm9tIHd0
Zi9UaHJlYWRpbmcuaDo1ODE3OSkKKysrIHd0Zi9UaHJlYWRTYWZlU2hhcmVkLmgJKHdvcmtpbmcg
Y29weSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRTYWZlU2hhcmVkLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZFNhZmVTaGFyZWQuaAkocmV2aXNpb24g
NTgxNzgpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkU2FmZVNoYXJlZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIw
MDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDA3IEp1c3RpbiBIYXlnb29kIChqaGF5Z29vZEByZWFrdGl4LmNvbSkKICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTU2LDE5NyArNTYsMjEgQEAKICAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K
ICAqLwogCi0jaWZuZGVmIFRocmVhZGluZ19oCi0jZGVmaW5lIFRocmVhZGluZ19oCisjaWZuZGVm
IFRocmVhZFNhZmVTaGFyZWRfaAorI2RlZmluZSBUaHJlYWRTYWZlU2hhcmVkX2gKIAogI2luY2x1
ZGUgIlBsYXRmb3JtLmgiCiAKLSNpZiBPUyhXSU5DRSkKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0j
ZW5kaWYKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0xvY2tl
ci5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGlu
Z1ByaW1pdGl2ZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgogCi0jaWYgT1MoV0lORE9XUykgJiYgIU9TKFdJTkNFKQorI2lmIE9TKFdJ
TkRPV1MpCiAjaW5jbHVkZSA8d2luZG93cy5oPgotI2VsaWYgT1MoREFSV0lOKQotI2luY2x1ZGUg
PGxpYmtlcm4vT1NBdG9taWMuaD4KLSNlbGlmIE9TKEFORFJPSUQpCi0jaW5jbHVkZSA8Y3V0aWxz
L2F0b21pYy5oPgotI2VsaWYgQ09NUElMRVIoR0NDKSAmJiAhT1MoU1lNQklBTikKLSNpZiAoX19H
TlVDX18gPiA0KSB8fCAoKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAyKSkK
LSNpbmNsdWRlIDxleHQvYXRvbWljaXR5Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPGJpdHMvYXRvbWlj
aXR5Lmg+Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgVVNFKFBUSFJFQURTKQotI2luY2x1ZGUgPHB0
aHJlYWQuaD4KLSNlbGlmIFBMQVRGT1JNKEdUSykKLSNpbmNsdWRlICJHT3duUHRyLmgiCi10eXBl
ZGVmIHN0cnVjdCBfR011dGV4IEdNdXRleDsKLXR5cGVkZWYgc3RydWN0IF9HQ29uZCBHQ29uZDsK
ICNlbmRpZgogCi0jaWYgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSA8cWdsb2JhbC5oPgotUVRfQkVH
SU5fTkFNRVNQQUNFCi1jbGFzcyBRTXV0ZXg7Ci1jbGFzcyBRV2FpdENvbmRpdGlvbjsKLVFUX0VO
RF9OQU1FU1BBQ0UKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0KLS8vIEZvciBwb3J0
YWJpbGl0eSwgd2UgZG8gbm90IHVzZSB0aHJlYWQtc2FmZSBzdGF0aWNzIG5hdGl2ZWx5IHN1cHBv
cnRlZCBieSBzb21lIGNvbXBpbGVycyAoZS5nLiBnY2MpLgotI2RlZmluZSBBdG9taWNhbGx5SW5p
dGlhbGl6ZWRTdGF0aWMoVCwgbmFtZSkgXAotICAgIFdURjo6bG9ja0F0b21pY2FsbHlJbml0aWFs
aXplZFN0YXRpY011dGV4KCk7IFwKLSAgICBzdGF0aWMgVCBuYW1lOyBcCi0gICAgV1RGOjp1bmxv
Y2tBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleCgpOwotCiBuYW1lc3BhY2UgV1RGIHsK
IAotdHlwZWRlZiB1aW50MzJfdCBUaHJlYWRJZGVudGlmaWVyOwotdHlwZWRlZiB2b2lkKiAoKlRo
cmVhZEZ1bmN0aW9uKSh2b2lkKiBhcmd1bWVudCk7Ci0KLS8vIFJldHVybnMgMCBpZiB0aHJlYWQg
Y3JlYXRpb24gZmFpbGVkLgotLy8gVGhlIHRocmVhZCBuYW1lIG11c3QgYmUgYSBsaXRlcmFsIHNp
bmNlIG9uIHNvbWUgcGxhdGZvcm1zIGl0J3MgcGFzc2VkIGluIHRvIHRoZSB0aHJlYWQuCi1UaHJl
YWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNo
YXIqIHRocmVhZE5hbWUpOwotCi0vLyBJbnRlcm5hbCBwbGF0Zm9ybS1zcGVjaWZpYyBjcmVhdGVU
aHJlYWQgaW1wbGVtZW50YXRpb24uCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVy
bmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhyZWFkTmFtZSk7Ci0KLS8v
IENhbGxlZCBpbiB0aGUgdGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlvbi4KLS8vIEhlbHBmdWwg
Zm9yIHBsYXRmb3JtcyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRo
aW4gdGhlIHRocmVhZC4KLXZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25z
dCBjaGFyKiB0aHJlYWROYW1lKTsKLQotVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCk7
Ci1pbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllciwgdm9pZCoqKTsK
LXZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOwotCi0jaWYgVVNFKFBUSFJFQURT
KQotdHlwZWRlZiBwdGhyZWFkX211dGV4X3QgUGxhdGZvcm1NdXRleDsKLSNpZiBIQVZFKFBUSFJF
QURfUldMT0NLKQotdHlwZWRlZiBwdGhyZWFkX3J3bG9ja190IFBsYXRmb3JtUmVhZFdyaXRlTG9j
azsKLSNlbHNlCi10eXBlZGVmIHZvaWQqIFBsYXRmb3JtUmVhZFdyaXRlTG9jazsKLSNlbmRpZgot
dHlwZWRlZiBwdGhyZWFkX2NvbmRfdCBQbGF0Zm9ybUNvbmRpdGlvbjsKLSNlbGlmIFBMQVRGT1JN
KEdUSykKLXR5cGVkZWYgR093blB0cjxHTXV0ZXg+IFBsYXRmb3JtTXV0ZXg7Ci10eXBlZGVmIHZv
aWQqIFBsYXRmb3JtUmVhZFdyaXRlTG9jazsgLy8gRklYTUU6IEltcGxlbWVudC4KLXR5cGVkZWYg
R093blB0cjxHQ29uZD4gUGxhdGZvcm1Db25kaXRpb247Ci0jZWxpZiBQTEFURk9STShRVCkKLXR5
cGVkZWYgUVRfUFJFUEVORF9OQU1FU1BBQ0UoUU11dGV4KSogUGxhdGZvcm1NdXRleDsKLXR5cGVk
ZWYgdm9pZCogUGxhdGZvcm1SZWFkV3JpdGVMb2NrOyAvLyBGSVhNRTogSW1wbGVtZW50LgotdHlw
ZWRlZiBRVF9QUkVQRU5EX05BTUVTUEFDRShRV2FpdENvbmRpdGlvbikqIFBsYXRmb3JtQ29uZGl0
aW9uOwotI2VsaWYgT1MoV0lORE9XUykKLXN0cnVjdCBQbGF0Zm9ybU11dGV4IHsKLSAgICBDUklU
SUNBTF9TRUNUSU9OIG1faW50ZXJuYWxNdXRleDsKLSAgICBzaXplX3QgbV9yZWN1cnNpb25Db3Vu
dDsKLX07Ci10eXBlZGVmIHZvaWQqIFBsYXRmb3JtUmVhZFdyaXRlTG9jazsgLy8gRklYTUU6IElt
cGxlbWVudC4KLXN0cnVjdCBQbGF0Zm9ybUNvbmRpdGlvbiB7Ci0gICAgc2l6ZV90IG1fd2FpdGVy
c0dvbmU7Ci0gICAgc2l6ZV90IG1fd2FpdGVyc0Jsb2NrZWQ7Ci0gICAgc2l6ZV90IG1fd2FpdGVy
c1RvVW5ibG9jazsgCi0gICAgSEFORExFIG1fYmxvY2tMb2NrOwotICAgIEhBTkRMRSBtX2Jsb2Nr
UXVldWU7Ci0gICAgSEFORExFIG1fdW5ibG9ja0xvY2s7Ci0KLSAgICBib29sIHRpbWVkV2FpdChQ
bGF0Zm9ybU11dGV4JiwgRFdPUkQgZHVyYXRpb25NaWxsaXNlY29uZHMpOwotICAgIHZvaWQgc2ln
bmFsKGJvb2wgdW5ibG9ja0FsbCk7Ci19OwotI2Vsc2UKLXR5cGVkZWYgdm9pZCogUGxhdGZvcm1N
dXRleDsKLXR5cGVkZWYgdm9pZCogUGxhdGZvcm1SZWFkV3JpdGVMb2NrOwotdHlwZWRlZiB2b2lk
KiBQbGF0Zm9ybUNvbmRpdGlvbjsKLSNlbmRpZgotICAgIAotY2xhc3MgTXV0ZXggOiBwdWJsaWMg
Tm9uY29weWFibGUgewotcHVibGljOgotICAgIE11dGV4KCk7Ci0gICAgfk11dGV4KCk7Ci0KLSAg
ICB2b2lkIGxvY2soKTsKLSAgICBib29sIHRyeUxvY2soKTsKLSAgICB2b2lkIHVubG9jaygpOwot
Ci1wdWJsaWM6Ci0gICAgUGxhdGZvcm1NdXRleCYgaW1wbCgpIHsgcmV0dXJuIG1fbXV0ZXg7IH0K
LXByaXZhdGU6Ci0gICAgUGxhdGZvcm1NdXRleCBtX211dGV4OwotfTsKLQotdHlwZWRlZiBMb2Nr
ZXI8TXV0ZXg+IE11dGV4TG9ja2VyOwotCi1jbGFzcyBSZWFkV3JpdGVMb2NrIDogcHVibGljIE5v
bmNvcHlhYmxlIHsKLXB1YmxpYzoKLSAgICBSZWFkV3JpdGVMb2NrKCk7Ci0gICAgflJlYWRXcml0
ZUxvY2soKTsKLQotICAgIHZvaWQgcmVhZExvY2soKTsKLSAgICBib29sIHRyeVJlYWRMb2NrKCk7
Ci0KLSAgICB2b2lkIHdyaXRlTG9jaygpOwotICAgIGJvb2wgdHJ5V3JpdGVMb2NrKCk7Ci0gICAg
Ci0gICAgdm9pZCB1bmxvY2soKTsKLQotcHJpdmF0ZToKLSAgICBQbGF0Zm9ybVJlYWRXcml0ZUxv
Y2sgbV9yZWFkV3JpdGVMb2NrOwotfTsKLQotY2xhc3MgVGhyZWFkQ29uZGl0aW9uIDogcHVibGlj
IE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoKLSAgICBUaHJlYWRDb25kaXRpb24oKTsKLSAgICB+VGhy
ZWFkQ29uZGl0aW9uKCk7Ci0gICAgCi0gICAgdm9pZCB3YWl0KE11dGV4JiBtdXRleCk7Ci0gICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb25kaXRpb24gd2FzIHNpZ25hbGVkIGJlZm9yZSBhYnNv
bHV0ZVRpbWUsIGZhbHNlIGlmIHRoZSBhYnNvbHV0ZVRpbWUgd2FzIHJlYWNoZWQgb3IgaXMgaW4g
dGhlIHBhc3QuCi0gICAgLy8gVGhlIGFic29sdXRlVGltZSBpcyBpbiBzZWNvbmRzLCBzdGFydGlu
ZyBvbiBKYW51YXJ5IDEsIDE5NzAuIFRoZSB0aW1lIGlzIGFzc3VtZWQgdG8gdXNlIHRoZSBzYW1l
IHRpbWUgem9uZSBhcyBXVEY6OmN1cnJlbnRUaW1lKCkuCi0gICAgYm9vbCB0aW1lZFdhaXQoTXV0
ZXgmLCBkb3VibGUgYWJzb2x1dGVUaW1lKTsKLSAgICB2b2lkIHNpZ25hbCgpOwotICAgIHZvaWQg
YnJvYWRjYXN0KCk7Ci0gICAgCi1wcml2YXRlOgotICAgIFBsYXRmb3JtQ29uZGl0aW9uIG1fY29u
ZGl0aW9uOwotfTsKLQotI2lmIE9TKFdJTkRPV1MpCi0jZGVmaW5lIFdURl9VU0VfTE9DS0ZSRUVf
VEhSRUFEU0FGRVNIQVJFRCAxCi0KLSNpZiBDT01QSUxFUihNSU5HVykgfHwgQ09NUElMRVIoTVNW
QzcpIHx8IE9TKFdJTkNFKQotaW5saW5lIGludCBhdG9taWNJbmNyZW1lbnQoaW50KiBhZGRlbmQp
IHsgcmV0dXJuIEludGVybG9ja2VkSW5jcmVtZW50KHJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyo+KGFk
ZGVuZCkpOyB9Ci1pbmxpbmUgaW50IGF0b21pY0RlY3JlbWVudChpbnQqIGFkZGVuZCkgeyByZXR1
cm4gSW50ZXJsb2NrZWREZWNyZW1lbnQocmVpbnRlcnByZXRfY2FzdDxsb25nKj4oYWRkZW5kKSk7
IH0KLSNlbHNlCi1pbmxpbmUgaW50IGF0b21pY0luY3JlbWVudChpbnQgdm9sYXRpbGUqIGFkZGVu
ZCkgeyByZXR1cm4gSW50ZXJsb2NrZWRJbmNyZW1lbnQocmVpbnRlcnByZXRfY2FzdDxsb25nIHZv
bGF0aWxlKj4oYWRkZW5kKSk7IH0KLWlubGluZSBpbnQgYXRvbWljRGVjcmVtZW50KGludCB2b2xh
dGlsZSogYWRkZW5kKSB7IHJldHVybiBJbnRlcmxvY2tlZERlY3JlbWVudChyZWludGVycHJldF9j
YXN0PGxvbmcgdm9sYXRpbGUqPihhZGRlbmQpKTsgfQotI2VuZGlmCi0KLSNlbGlmIE9TKERBUldJ
TikKLSNkZWZpbmUgV1RGX1VTRV9MT0NLRlJFRV9USFJFQURTQUZFU0hBUkVEIDEKLQotaW5saW5l
IGludCBhdG9taWNJbmNyZW1lbnQoaW50IHZvbGF0aWxlKiBhZGRlbmQpIHsgcmV0dXJuIE9TQXRv
bWljSW5jcmVtZW50MzJCYXJyaWVyKGNvbnN0X2Nhc3Q8aW50Kj4oYWRkZW5kKSk7IH0KLWlubGlu
ZSBpbnQgYXRvbWljRGVjcmVtZW50KGludCB2b2xhdGlsZSogYWRkZW5kKSB7IHJldHVybiBPU0F0
b21pY0RlY3JlbWVudDMyQmFycmllcihjb25zdF9jYXN0PGludCo+KGFkZGVuZCkpOyB9Ci0KLSNl
bGlmIE9TKEFORFJPSUQpCi0KLWlubGluZSBpbnQgYXRvbWljSW5jcmVtZW50KGludCB2b2xhdGls
ZSogYWRkZW5kKSB7IHJldHVybiBhbmRyb2lkX2F0b21pY19pbmMoYWRkZW5kKTsgfQotaW5saW5l
IGludCBhdG9taWNEZWNyZW1lbnQoaW50IHZvbGF0aWxlKiBhZGRlbmQpIHsgcmV0dXJuIGFuZHJv
aWRfYXRvbWljX2RlYyhhZGRlbmQpOyB9Ci0KLSNlbGlmIENPTVBJTEVSKEdDQykgJiYgIUNQVShT
UEFSQzY0KSAmJiAhT1MoU1lNQklBTikgLy8gc2l6ZW9mKF9BdG9taWNfd29yZCkgIT0gc2l6ZW9m
KGludCkgb24gc3BhcmM2NCBnY2MKLSNkZWZpbmUgV1RGX1VTRV9MT0NLRlJFRV9USFJFQURTQUZF
U0hBUkVEIDEKLQotaW5saW5lIGludCBhdG9taWNJbmNyZW1lbnQoaW50IHZvbGF0aWxlKiBhZGRl
bmQpIHsgcmV0dXJuIF9fZ251X2N4eDo6X19leGNoYW5nZV9hbmRfYWRkKGFkZGVuZCwgMSkgKyAx
OyB9Ci1pbmxpbmUgaW50IGF0b21pY0RlY3JlbWVudChpbnQgdm9sYXRpbGUqIGFkZGVuZCkgeyBy
ZXR1cm4gX19nbnVfY3h4OjpfX2V4Y2hhbmdlX2FuZF9hZGQoYWRkZW5kLCAtMSkgLSAxOyB9Ci0K
LSNlbmRpZgotCiBjbGFzcyBUaHJlYWRTYWZlU2hhcmVkQmFzZSA6IHB1YmxpYyBOb25jb3B5YWJs
ZSB7CiBwdWJsaWM6CiAgICAgVGhyZWFkU2FmZVNoYXJlZEJhc2UoaW50IGluaXRpYWxSZWZDb3Vu
dCA9IDEpCkBAIC0zMjEsMjkgKzE0NSw4IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi0vLyBUaGlz
IGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLiBJdCBpcyBzYWZl
IHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KLS8vIERhcndpbiBpcyBhbiBleGNlcHRpb24gdG8gdGhp
cyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0IGZyb20gYW55IHRocmVhZCwgdGhlIG9ubHkgcmVx
dWlyZW1lbnQgaXMgdGhhdCB0aGUgY2FsbHMgYXJlIG5vdCByZWVudHJhbnQuCi12b2lkIGluaXRp
YWxpemVUaHJlYWRpbmcoKTsKLQotdm9pZCBsb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGlj
TXV0ZXgoKTsKLXZvaWQgdW5sb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgoKTsK
LQogfSAvLyBuYW1lc3BhY2UgV1RGCiAKLXVzaW5nIFdURjo6TXV0ZXg7Ci11c2luZyBXVEY6Ok11
dGV4TG9ja2VyOwotdXNpbmcgV1RGOjpUaHJlYWRDb25kaXRpb247Ci11c2luZyBXVEY6OlRocmVh
ZElkZW50aWZpZXI7CiB1c2luZyBXVEY6OlRocmVhZFNhZmVTaGFyZWQ7CiAKLSNpZiBVU0UoTE9D
S0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCkKLXVzaW5nIFdURjo6YXRvbWljRGVjcmVtZW50OwotdXNp
bmcgV1RGOjphdG9taWNJbmNyZW1lbnQ7Ci0jZW5kaWYKLQotdXNpbmcgV1RGOjpjcmVhdGVUaHJl
YWQ7Ci11c2luZyBXVEY6OmN1cnJlbnRUaHJlYWQ7Ci11c2luZyBXVEY6OmRldGFjaFRocmVhZDsK
LXVzaW5nIFdURjo6d2FpdEZvclRocmVhZENvbXBsZXRpb247Ci0KLSNlbmRpZiAvLyBUaHJlYWRp
bmdfaAorI2VuZGlmIC8vIFRocmVhZFNhZmVTaGFyZWRfaApJbmRleDogSmF2YVNjcmlwdENvcmUv
d3RmL1RocmVhZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRp
bmcuaAkocmV2aXNpb24gNTgxNzkpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApAQCAtNjEsNDUgKzYxLDEzIEBACiAKICNpbmNsdWRlICJQbGF0Zm9ybS5o
IgogCi0jaWYgT1MoV0lOQ0UpCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2VuZGlmCi0KICNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8
d3RmL1RocmVhZFNhZmVTaGFyZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZl
cy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi0jaWYgT1MoV0lORE9XUykgJiYg
IU9TKFdJTkNFKQotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNlbGlmIE9TKERBUldJTikKLSNpbmNs
dWRlIDxsaWJrZXJuL09TQXRvbWljLmg+Ci0jZWxpZiBPUyhBTkRST0lEKQotI2luY2x1ZGUgPGN1
dGlscy9hdG9taWMuaD4KLSNlbGlmIENPTVBJTEVSKEdDQykgJiYgIU9TKFNZTUJJQU4pCi0jaWYg
KF9fR05VQ19fID4gNCkgfHwgKChfX0dOVUNfXyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPj0g
MikpCi0jaW5jbHVkZSA8ZXh0L2F0b21pY2l0eS5oPgotI2Vsc2UKLSNpbmNsdWRlIDxiaXRzL2F0
b21pY2l0eS5oPgotI2VuZGlmCi0jZW5kaWYKLQotI2lmIFVTRShQVEhSRUFEUykKLSNpbmNsdWRl
IDxwdGhyZWFkLmg+Ci0jZWxpZiBQTEFURk9STShHVEspCi0jaW5jbHVkZSAiR093blB0ci5oIgot
dHlwZWRlZiBzdHJ1Y3QgX0dNdXRleCBHTXV0ZXg7Ci10eXBlZGVmIHN0cnVjdCBfR0NvbmQgR0Nv
bmQ7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgPHFnbG9iYWwuaD4KLVFU
X0JFR0lOX05BTUVTUEFDRQotY2xhc3MgUU11dGV4OwotY2xhc3MgUVdhaXRDb25kaXRpb247Ci1R
VF9FTkRfTkFNRVNQQUNFCi0jZW5kaWYKLQogI2luY2x1ZGUgPHN0ZGludC5oPgogCiAvLyBGb3Ig
cG9ydGFiaWxpdHksIHdlIGRvIG5vdCB1c2UgdGhyZWFkLXNhZmUgc3RhdGljcyBuYXRpdmVseSBz
dXBwb3J0ZWQgYnkgc29tZSBjb21waWxlcnMgKGUuZy4gZ2NjKS4KQEAgLTEyOCwxOTkgKzk2LDYg
QEAgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCk7CiBpbnQgd2FpdEZvclRocmVhZENv
bXBsZXRpb24oVGhyZWFkSWRlbnRpZmllciwgdm9pZCoqKTsKIHZvaWQgZGV0YWNoVGhyZWFkKFRo
cmVhZElkZW50aWZpZXIpOwogCi0jaWYgVVNFKFBUSFJFQURTKQotdHlwZWRlZiBwdGhyZWFkX211
dGV4X3QgUGxhdGZvcm1NdXRleDsKLSNpZiBIQVZFKFBUSFJFQURfUldMT0NLKQotdHlwZWRlZiBw
dGhyZWFkX3J3bG9ja190IFBsYXRmb3JtUmVhZFdyaXRlTG9jazsKLSNlbHNlCi10eXBlZGVmIHZv
aWQqIFBsYXRmb3JtUmVhZFdyaXRlTG9jazsKLSNlbmRpZgotdHlwZWRlZiBwdGhyZWFkX2NvbmRf
dCBQbGF0Zm9ybUNvbmRpdGlvbjsKLSNlbGlmIFBMQVRGT1JNKEdUSykKLXR5cGVkZWYgR093blB0
cjxHTXV0ZXg+IFBsYXRmb3JtTXV0ZXg7Ci10eXBlZGVmIHZvaWQqIFBsYXRmb3JtUmVhZFdyaXRl
TG9jazsgLy8gRklYTUU6IEltcGxlbWVudC4KLXR5cGVkZWYgR093blB0cjxHQ29uZD4gUGxhdGZv
cm1Db25kaXRpb247Ci0jZWxpZiBQTEFURk9STShRVCkKLXR5cGVkZWYgUVRfUFJFUEVORF9OQU1F
U1BBQ0UoUU11dGV4KSogUGxhdGZvcm1NdXRleDsKLXR5cGVkZWYgdm9pZCogUGxhdGZvcm1SZWFk
V3JpdGVMb2NrOyAvLyBGSVhNRTogSW1wbGVtZW50LgotdHlwZWRlZiBRVF9QUkVQRU5EX05BTUVT
UEFDRShRV2FpdENvbmRpdGlvbikqIFBsYXRmb3JtQ29uZGl0aW9uOwotI2VsaWYgT1MoV0lORE9X
UykKLXN0cnVjdCBQbGF0Zm9ybU11dGV4IHsKLSAgICBDUklUSUNBTF9TRUNUSU9OIG1faW50ZXJu
YWxNdXRleDsKLSAgICBzaXplX3QgbV9yZWN1cnNpb25Db3VudDsKLX07Ci10eXBlZGVmIHZvaWQq
IFBsYXRmb3JtUmVhZFdyaXRlTG9jazsgLy8gRklYTUU6IEltcGxlbWVudC4KLXN0cnVjdCBQbGF0
Zm9ybUNvbmRpdGlvbiB7Ci0gICAgc2l6ZV90IG1fd2FpdGVyc0dvbmU7Ci0gICAgc2l6ZV90IG1f
d2FpdGVyc0Jsb2NrZWQ7Ci0gICAgc2l6ZV90IG1fd2FpdGVyc1RvVW5ibG9jazsgCi0gICAgSEFO
RExFIG1fYmxvY2tMb2NrOwotICAgIEhBTkRMRSBtX2Jsb2NrUXVldWU7Ci0gICAgSEFORExFIG1f
dW5ibG9ja0xvY2s7Ci0KLSAgICBib29sIHRpbWVkV2FpdChQbGF0Zm9ybU11dGV4JiwgRFdPUkQg
ZHVyYXRpb25NaWxsaXNlY29uZHMpOwotICAgIHZvaWQgc2lnbmFsKGJvb2wgdW5ibG9ja0FsbCk7
Ci19OwotI2Vsc2UKLXR5cGVkZWYgdm9pZCogUGxhdGZvcm1NdXRleDsKLXR5cGVkZWYgdm9pZCog
UGxhdGZvcm1SZWFkV3JpdGVMb2NrOwotdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUNvbmRpdGlvbjsK
LSNlbmRpZgotICAgIAotY2xhc3MgTXV0ZXggOiBwdWJsaWMgTm9uY29weWFibGUgewotcHVibGlj
OgotICAgIE11dGV4KCk7Ci0gICAgfk11dGV4KCk7Ci0KLSAgICB2b2lkIGxvY2soKTsKLSAgICBi
b29sIHRyeUxvY2soKTsKLSAgICB2b2lkIHVubG9jaygpOwotCi1wdWJsaWM6Ci0gICAgUGxhdGZv
cm1NdXRleCYgaW1wbCgpIHsgcmV0dXJuIG1fbXV0ZXg7IH0KLXByaXZhdGU6Ci0gICAgUGxhdGZv
cm1NdXRleCBtX211dGV4OwotfTsKLQotdHlwZWRlZiBMb2NrZXI8TXV0ZXg+IE11dGV4TG9ja2Vy
OwotCi1jbGFzcyBSZWFkV3JpdGVMb2NrIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoK
LSAgICBSZWFkV3JpdGVMb2NrKCk7Ci0gICAgflJlYWRXcml0ZUxvY2soKTsKLQotICAgIHZvaWQg
cmVhZExvY2soKTsKLSAgICBib29sIHRyeVJlYWRMb2NrKCk7Ci0KLSAgICB2b2lkIHdyaXRlTG9j
aygpOwotICAgIGJvb2wgdHJ5V3JpdGVMb2NrKCk7Ci0gICAgCi0gICAgdm9pZCB1bmxvY2soKTsK
LQotcHJpdmF0ZToKLSAgICBQbGF0Zm9ybVJlYWRXcml0ZUxvY2sgbV9yZWFkV3JpdGVMb2NrOwot
fTsKLQotY2xhc3MgVGhyZWFkQ29uZGl0aW9uIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLXB1Ymxp
YzoKLSAgICBUaHJlYWRDb25kaXRpb24oKTsKLSAgICB+VGhyZWFkQ29uZGl0aW9uKCk7Ci0gICAg
Ci0gICAgdm9pZCB3YWl0KE11dGV4JiBtdXRleCk7Ci0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZSBjb25kaXRpb24gd2FzIHNpZ25hbGVkIGJlZm9yZSBhYnNvbHV0ZVRpbWUsIGZhbHNlIGlmIHRo
ZSBhYnNvbHV0ZVRpbWUgd2FzIHJlYWNoZWQgb3IgaXMgaW4gdGhlIHBhc3QuCi0gICAgLy8gVGhl
IGFic29sdXRlVGltZSBpcyBpbiBzZWNvbmRzLCBzdGFydGluZyBvbiBKYW51YXJ5IDEsIDE5NzAu
IFRoZSB0aW1lIGlzIGFzc3VtZWQgdG8gdXNlIHRoZSBzYW1lIHRpbWUgem9uZSBhcyBXVEY6OmN1
cnJlbnRUaW1lKCkuCi0gICAgYm9vbCB0aW1lZFdhaXQoTXV0ZXgmLCBkb3VibGUgYWJzb2x1dGVU
aW1lKTsKLSAgICB2b2lkIHNpZ25hbCgpOwotICAgIHZvaWQgYnJvYWRjYXN0KCk7Ci0gICAgCi1w
cml2YXRlOgotICAgIFBsYXRmb3JtQ29uZGl0aW9uIG1fY29uZGl0aW9uOwotfTsKLQotI2lmIE9T
KFdJTkRPV1MpCi0jZGVmaW5lIFdURl9VU0VfTE9DS0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCAxCi0K
LSNpZiBDT01QSUxFUihNSU5HVykgfHwgQ09NUElMRVIoTVNWQzcpIHx8IE9TKFdJTkNFKQotaW5s
aW5lIGludCBhdG9taWNJbmNyZW1lbnQoaW50KiBhZGRlbmQpIHsgcmV0dXJuIEludGVybG9ja2Vk
SW5jcmVtZW50KHJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyo+KGFkZGVuZCkpOyB9Ci1pbmxpbmUgaW50
IGF0b21pY0RlY3JlbWVudChpbnQqIGFkZGVuZCkgeyByZXR1cm4gSW50ZXJsb2NrZWREZWNyZW1l
bnQocmVpbnRlcnByZXRfY2FzdDxsb25nKj4oYWRkZW5kKSk7IH0KLSNlbHNlCi1pbmxpbmUgaW50
IGF0b21pY0luY3JlbWVudChpbnQgdm9sYXRpbGUqIGFkZGVuZCkgeyByZXR1cm4gSW50ZXJsb2Nr
ZWRJbmNyZW1lbnQocmVpbnRlcnByZXRfY2FzdDxsb25nIHZvbGF0aWxlKj4oYWRkZW5kKSk7IH0K
LWlubGluZSBpbnQgYXRvbWljRGVjcmVtZW50KGludCB2b2xhdGlsZSogYWRkZW5kKSB7IHJldHVy
biBJbnRlcmxvY2tlZERlY3JlbWVudChyZWludGVycHJldF9jYXN0PGxvbmcgdm9sYXRpbGUqPihh
ZGRlbmQpKTsgfQotI2VuZGlmCi0KLSNlbGlmIE9TKERBUldJTikKLSNkZWZpbmUgV1RGX1VTRV9M
T0NLRlJFRV9USFJFQURTQUZFU0hBUkVEIDEKLQotaW5saW5lIGludCBhdG9taWNJbmNyZW1lbnQo
aW50IHZvbGF0aWxlKiBhZGRlbmQpIHsgcmV0dXJuIE9TQXRvbWljSW5jcmVtZW50MzJCYXJyaWVy
KGNvbnN0X2Nhc3Q8aW50Kj4oYWRkZW5kKSk7IH0KLWlubGluZSBpbnQgYXRvbWljRGVjcmVtZW50
KGludCB2b2xhdGlsZSogYWRkZW5kKSB7IHJldHVybiBPU0F0b21pY0RlY3JlbWVudDMyQmFycmll
cihjb25zdF9jYXN0PGludCo+KGFkZGVuZCkpOyB9Ci0KLSNlbGlmIE9TKEFORFJPSUQpCi0KLWlu
bGluZSBpbnQgYXRvbWljSW5jcmVtZW50KGludCB2b2xhdGlsZSogYWRkZW5kKSB7IHJldHVybiBh
bmRyb2lkX2F0b21pY19pbmMoYWRkZW5kKTsgfQotaW5saW5lIGludCBhdG9taWNEZWNyZW1lbnQo
aW50IHZvbGF0aWxlKiBhZGRlbmQpIHsgcmV0dXJuIGFuZHJvaWRfYXRvbWljX2RlYyhhZGRlbmQp
OyB9Ci0KLSNlbGlmIENPTVBJTEVSKEdDQykgJiYgIUNQVShTUEFSQzY0KSAmJiAhT1MoU1lNQklB
TikgLy8gc2l6ZW9mKF9BdG9taWNfd29yZCkgIT0gc2l6ZW9mKGludCkgb24gc3BhcmM2NCBnY2MK
LSNkZWZpbmUgV1RGX1VTRV9MT0NLRlJFRV9USFJFQURTQUZFU0hBUkVEIDEKLQotaW5saW5lIGlu
dCBhdG9taWNJbmNyZW1lbnQoaW50IHZvbGF0aWxlKiBhZGRlbmQpIHsgcmV0dXJuIF9fZ251X2N4
eDo6X19leGNoYW5nZV9hbmRfYWRkKGFkZGVuZCwgMSkgKyAxOyB9Ci1pbmxpbmUgaW50IGF0b21p
Y0RlY3JlbWVudChpbnQgdm9sYXRpbGUqIGFkZGVuZCkgeyByZXR1cm4gX19nbnVfY3h4OjpfX2V4
Y2hhbmdlX2FuZF9hZGQoYWRkZW5kLCAtMSkgLSAxOyB9Ci0KLSNlbmRpZgotCi1jbGFzcyBUaHJl
YWRTYWZlU2hhcmVkQmFzZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci1wdWJsaWM6Ci0gICAgVGhy
ZWFkU2FmZVNoYXJlZEJhc2UoaW50IGluaXRpYWxSZWZDb3VudCA9IDEpCi0gICAgICAgIDogbV9y
ZWZDb3VudChpbml0aWFsUmVmQ291bnQpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgcmVmKCkK
LSAgICB7Ci0jaWYgVVNFKExPQ0tGUkVFX1RIUkVBRFNBRkVTSEFSRUQpCi0gICAgICAgIGF0b21p
Y0luY3JlbWVudCgmbV9yZWZDb3VudCk7Ci0jZWxzZQotICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9tdXRleCk7Ci0gICAgICAgICsrbV9yZWZDb3VudDsKLSNlbmRpZgotICAgIH0KLQotICAg
IGJvb2wgaGFzT25lUmVmKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZWZDb3VudCgpID09IDE7
Ci0gICAgfQotCi0gICAgaW50IHJlZkNvdW50KCkgY29uc3QKLSAgICB7Ci0jaWYgIVVTRShMT0NL
RlJFRV9USFJFQURTQUZFU0hBUkVEKQotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRl
eCk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludCBjb25zdCB2b2xhdGls
ZSAmPihtX3JlZkNvdW50KTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICAvLyBSZXR1cm5zIHdo
ZXRoZXIgdGhlIHBvaW50ZXIgc2hvdWxkIGJlIGZyZWVkIG9yIG5vdC4KLSAgICBib29sIGRlcmVm
QmFzZSgpCi0gICAgewotI2lmIFVTRShMT0NLRlJFRV9USFJFQURTQUZFU0hBUkVEKQotICAgICAg
ICBpZiAoYXRvbWljRGVjcmVtZW50KCZtX3JlZkNvdW50KSA8PSAwKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0jZWxzZQotICAgICAgICBpbnQgcmVmQ291bnQ7Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKLSAgICAgICAgICAgIC0tbV9yZWZD
b3VudDsKLSAgICAgICAgICAgIHJlZkNvdW50ID0gbV9yZWZDb3VudDsKLSAgICAgICAgfQotICAg
ICAgICBpZiAocmVmQ291bnQgPD0gMCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotI2VuZGlm
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdGVtcGxhdGU8
Y2xhc3MgVD4KLSAgICBmcmllbmQgY2xhc3MgQ3Jvc3NUaHJlYWRSZWZDb3VudGVkOwotCi0gICAg
aW50IG1fcmVmQ291bnQ7Ci0jaWYgIVVTRShMT0NLRlJFRV9USFJFQURTQUZFU0hBUkVEKQotICAg
IG11dGFibGUgTXV0ZXggbV9tdXRleDsKLSNlbmRpZgotfTsKLQotdGVtcGxhdGU8Y2xhc3MgVD4g
Y2xhc3MgVGhyZWFkU2FmZVNoYXJlZCA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkQmFzZSB7Ci1w
dWJsaWM6Ci0gICAgVGhyZWFkU2FmZVNoYXJlZChpbnQgaW5pdGlhbFJlZkNvdW50ID0gMSkKLSAg
ICAgICAgOiBUaHJlYWRTYWZlU2hhcmVkQmFzZShpbml0aWFsUmVmQ291bnQpCi0gICAgewotICAg
IH0KLQotICAgIHZvaWQgZGVyZWYoKQotICAgIHsKLSAgICAgICAgaWYgKGRlcmVmQmFzZSgpKQot
ICAgICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKLSAgICB9Ci19OwotCiAv
LyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLiBJdCBp
cyBzYWZlIHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KIC8vIERhcndpbiBpcyBhbiBleGNlcHRpb24g
dG8gdGhpcyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0IGZyb20gYW55IHRocmVhZCwgdGhlIG9u
bHkgcmVxdWlyZW1lbnQgaXMgdGhhdCB0aGUgY2FsbHMgYXJlIG5vdCByZWVudHJhbnQuCiB2b2lk
IGluaXRpYWxpemVUaHJlYWRpbmcoKTsKQEAgLTMzMCwxNyArMTA1LDcgQEAgdm9pZCB1bmxvY2tB
dG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAotdXNp
bmcgV1RGOjpNdXRleDsKLXVzaW5nIFdURjo6TXV0ZXhMb2NrZXI7Ci11c2luZyBXVEY6OlRocmVh
ZENvbmRpdGlvbjsKIHVzaW5nIFdURjo6VGhyZWFkSWRlbnRpZmllcjsKLXVzaW5nIFdURjo6VGhy
ZWFkU2FmZVNoYXJlZDsKLQotI2lmIFVTRShMT0NLRlJFRV9USFJFQURTQUZFU0hBUkVEKQotdXNp
bmcgV1RGOjphdG9taWNEZWNyZW1lbnQ7Ci11c2luZyBXVEY6OmF0b21pY0luY3JlbWVudDsKLSNl
bmRpZgotCiB1c2luZyBXVEY6OmNyZWF0ZVRocmVhZDsKIHVzaW5nIFdURjo6Y3VycmVudFRocmVh
ZDsKIHVzaW5nIFdURjo6ZGV0YWNoVGhyZWFkOwpJbmRleDogd3RmL1RocmVhZGluZ1ByaW1pdGl2
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSB3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oCShyZXZpc2lvbiA1
ODE3OSkJKGZyb20gd3RmL1RocmVhZGluZy5oOjU4MTc5KQorKysgd3RmL1RocmVhZGluZ1ByaW1p
dGl2ZXMuaAkod29ya2luZyBjb3B5KQpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGlu
Z1ByaW1pdGl2ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5n
UHJpbWl0aXZlcy5oCShyZXZpc2lvbiA1ODE3OCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9UaHJl
YWRpbmdQcmltaXRpdmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29k
QHJlYWt0aXguY29tKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjYsNjIgKzI2LDE5IEBACiAgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKgotICoKLSAqIE5vdGU6IFRoZSBpbXBsZW1l
bnRhdGlvbnMgb2YgSW50ZXJsb2NrZWRJbmNyZW1lbnQgYW5kIEludGVybG9ja2VkRGVjcmVtZW50
IGFyZSBiYXNlZAotICogb24gYXRvbWljX2luY3JlbWVudCBhbmQgYXRvbWljX2V4Y2hhbmdlX2Fu
ZF9hZGQgZnJvbSB0aGUgQm9vc3QgQysrIExpYnJhcnkuIFRoZSBsaWNlbnNlCi0gKiBpcyB2aXJ0
dWFsbHkgaWRlbnRpY2FsIHRvIHRoZSBBcHBsZSBsaWNlbnNlIGFib3ZlIGJ1dCBpcyBpbmNsdWRl
ZCBoZXJlIGZvciBjb21wbGV0ZW5lc3MuCi0gKgotICogQm9vc3QgU29mdHdhcmUgTGljZW5zZSAt
IFZlcnNpb24gMS4wIC0gQXVndXN0IDE3dGgsIDIwMDMKLSAqIAotICogUGVybWlzc2lvbiBpcyBo
ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb3Igb3JnYW5pemF0
aW9uCi0gKiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5n
IGRvY3VtZW50YXRpb24gY292ZXJlZCBieQotICogdGhpcyBsaWNlbnNlICh0aGUgIlNvZnR3YXJl
IikgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIGRpc3RyaWJ1dGUsCi0gKiBleGVjdXRlLCBh
bmQgdHJhbnNtaXQgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtz
IG9mIHRoZQotICogU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgdGhpcmQtcGFydGllcyB0byB3aG9t
IHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KLSAqIGRvIHNvLCBhbGwgc3ViamVjdCB0byB0
aGUgZm9sbG93aW5nOgotICogCi0gKiBUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3
YXJlIGFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZwotICogdGhlIGFib3ZlIGxp
Y2Vuc2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciwKLSAqIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGlu
IHdob2xlIG9yIGluIHBhcnQsIGFuZAotICogYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNv
ZnR3YXJlLCB1bmxlc3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQotICogd29ya3MgYXJlIHNv
bGVseSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJh
dGVkIGJ5Ci0gKiBhIHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCi0gKiAKLSAqIFRIRSBTT0ZU
V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF
WFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKLSAqIFNI
QUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZU
V0FSRSBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAotICogQVJJU0lORyBGUk9NLCBP
VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9U
SEVSCi0gKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAotI2lmbmRlZiBUaHJlYWRp
bmdfaAotI2RlZmluZSBUaHJlYWRpbmdfaAorI2lmbmRlZiBUaHJlYWRpbmdQcmltaXRpdmVzX2gK
KyNkZWZpbmUgVGhyZWFkaW5nUHJpbWl0aXZlc19oCiAKICNpbmNsdWRlICJQbGF0Zm9ybS5oIgog
Ci0jaWYgT1MoV0lOQ0UpCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2VuZGlmCi0KICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KLSNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCi0jaWYgT1Mo
V0lORE9XUykgJiYgIU9TKFdJTkNFKQorI2lmIE9TKFdJTkRPV1MpCiAjaW5jbHVkZSA8d2luZG93
cy5oPgotI2VsaWYgT1MoREFSV0lOKQotI2luY2x1ZGUgPGxpYmtlcm4vT1NBdG9taWMuaD4KLSNl
bGlmIE9TKEFORFJPSUQpCi0jaW5jbHVkZSA8Y3V0aWxzL2F0b21pYy5oPgotI2VsaWYgQ09NUElM
RVIoR0NDKSAmJiAhT1MoU1lNQklBTikKLSNpZiAoX19HTlVDX18gPiA0KSB8fCAoKF9fR05VQ19f
ID09IDQpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAyKSkKLSNpbmNsdWRlIDxleHQvYXRvbWljaXR5
Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPGJpdHMvYXRvbWljaXR5Lmg+Ci0jZW5kaWYKICNlbmRpZgog
CiAjaWYgVVNFKFBUSFJFQURTKQpAQCAtMTAwLDM0ICs1Nyw4IEBAIGNsYXNzIFFXYWl0Q29uZGl0
aW9uOwogUVRfRU5EX05BTUVTUEFDRQogI2VuZGlmCiAKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLQot
Ly8gRm9yIHBvcnRhYmlsaXR5LCB3ZSBkbyBub3QgdXNlIHRocmVhZC1zYWZlIHN0YXRpY3MgbmF0
aXZlbHkgc3VwcG9ydGVkIGJ5IHNvbWUgY29tcGlsZXJzIChlLmcuIGdjYykuCi0jZGVmaW5lIEF0
b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhULCBuYW1lKSBcCi0gICAgV1RGOjpsb2NrQXRvbWlj
YWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgoKTsgXAotICAgIHN0YXRpYyBUIG5hbWU7IFwKLSAg
ICBXVEY6OnVubG9ja0F0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCk7Ci0KIG5hbWVz
cGFjZSBXVEYgewogCi10eXBlZGVmIHVpbnQzMl90IFRocmVhZElkZW50aWZpZXI7Ci10eXBlZGVm
IHZvaWQqICgqVGhyZWFkRnVuY3Rpb24pKHZvaWQqIGFyZ3VtZW50KTsKLQotLy8gUmV0dXJucyAw
IGlmIHRocmVhZCBjcmVhdGlvbiBmYWlsZWQuCi0vLyBUaGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBh
IGxpdGVyYWwgc2luY2Ugb24gc29tZSBwbGF0Zm9ybXMgaXQncyBwYXNzZWQgaW4gdG8gdGhlIHRo
cmVhZC4KLVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKFRocmVhZEZ1bmN0aW9uLCB2b2lk
KiwgY29uc3QgY2hhciogdGhyZWFkTmFtZSk7Ci0KLS8vIEludGVybmFsIHBsYXRmb3JtLXNwZWNp
ZmljIGNyZWF0ZVRocmVhZCBpbXBsZW1lbnRhdGlvbi4KLVRocmVhZElkZW50aWZpZXIgY3JlYXRl
VGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24sIHZvaWQqLCBjb25zdCBjaGFyKiB0aHJlYWRO
YW1lKTsKLQotLy8gQ2FsbGVkIGluIHRoZSB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgot
Ly8gSGVscGZ1bCBmb3IgcGxhdGZvcm1zIHdoZXJlIHRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIHNl
dCBmcm9tIHdpdGhpbiB0aGUgdGhyZWFkLgotdm9pZCBpbml0aWFsaXplQ3VycmVudFRocmVhZElu
dGVybmFsKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwotCi1UaHJlYWRJZGVudGlmaWVyIGN1cnJl
bnRUaHJlYWQoKTsKLWludCB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihUaHJlYWRJZGVudGlmaWVy
LCB2b2lkKiopOwotdm9pZCBkZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllcik7Ci0KICNpZiBV
U0UoUFRIUkVBRFMpCiB0eXBlZGVmIHB0aHJlYWRfbXV0ZXhfdCBQbGF0Zm9ybU11dGV4OwogI2lm
IEhBVkUoUFRIUkVBRF9SV0xPQ0spCkBAIC0yMTcsMTMzICsxNDgsMTAgQEAgcHJpdmF0ZToKICAg
ICBQbGF0Zm9ybUNvbmRpdGlvbiBtX2NvbmRpdGlvbjsKIH07CiAKLSNpZiBPUyhXSU5ET1dTKQot
I2RlZmluZSBXVEZfVVNFX0xPQ0tGUkVFX1RIUkVBRFNBRkVTSEFSRUQgMQotCi0jaWYgQ09NUElM
RVIoTUlOR1cpIHx8IENPTVBJTEVSKE1TVkM3KSB8fCBPUyhXSU5DRSkKLWlubGluZSBpbnQgYXRv
bWljSW5jcmVtZW50KGludCogYWRkZW5kKSB7IHJldHVybiBJbnRlcmxvY2tlZEluY3JlbWVudChy
ZWludGVycHJldF9jYXN0PGxvbmcqPihhZGRlbmQpKTsgfQotaW5saW5lIGludCBhdG9taWNEZWNy
ZW1lbnQoaW50KiBhZGRlbmQpIHsgcmV0dXJuIEludGVybG9ja2VkRGVjcmVtZW50KHJlaW50ZXJw
cmV0X2Nhc3Q8bG9uZyo+KGFkZGVuZCkpOyB9Ci0jZWxzZQotaW5saW5lIGludCBhdG9taWNJbmNy
ZW1lbnQoaW50IHZvbGF0aWxlKiBhZGRlbmQpIHsgcmV0dXJuIEludGVybG9ja2VkSW5jcmVtZW50
KHJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyB2b2xhdGlsZSo+KGFkZGVuZCkpOyB9Ci1pbmxpbmUgaW50
IGF0b21pY0RlY3JlbWVudChpbnQgdm9sYXRpbGUqIGFkZGVuZCkgeyByZXR1cm4gSW50ZXJsb2Nr
ZWREZWNyZW1lbnQocmVpbnRlcnByZXRfY2FzdDxsb25nIHZvbGF0aWxlKj4oYWRkZW5kKSk7IH0K
LSNlbmRpZgotCi0jZWxpZiBPUyhEQVJXSU4pCi0jZGVmaW5lIFdURl9VU0VfTE9DS0ZSRUVfVEhS
RUFEU0FGRVNIQVJFRCAxCi0KLWlubGluZSBpbnQgYXRvbWljSW5jcmVtZW50KGludCB2b2xhdGls
ZSogYWRkZW5kKSB7IHJldHVybiBPU0F0b21pY0luY3JlbWVudDMyQmFycmllcihjb25zdF9jYXN0
PGludCo+KGFkZGVuZCkpOyB9Ci1pbmxpbmUgaW50IGF0b21pY0RlY3JlbWVudChpbnQgdm9sYXRp
bGUqIGFkZGVuZCkgeyByZXR1cm4gT1NBdG9taWNEZWNyZW1lbnQzMkJhcnJpZXIoY29uc3RfY2Fz
dDxpbnQqPihhZGRlbmQpKTsgfQotCi0jZWxpZiBPUyhBTkRST0lEKQotCi1pbmxpbmUgaW50IGF0
b21pY0luY3JlbWVudChpbnQgdm9sYXRpbGUqIGFkZGVuZCkgeyByZXR1cm4gYW5kcm9pZF9hdG9t
aWNfaW5jKGFkZGVuZCk7IH0KLWlubGluZSBpbnQgYXRvbWljRGVjcmVtZW50KGludCB2b2xhdGls
ZSogYWRkZW5kKSB7IHJldHVybiBhbmRyb2lkX2F0b21pY19kZWMoYWRkZW5kKTsgfQotCi0jZWxp
ZiBDT01QSUxFUihHQ0MpICYmICFDUFUoU1BBUkM2NCkgJiYgIU9TKFNZTUJJQU4pIC8vIHNpemVv
ZihfQXRvbWljX3dvcmQpICE9IHNpemVvZihpbnQpIG9uIHNwYXJjNjQgZ2NjCi0jZGVmaW5lIFdU
Rl9VU0VfTE9DS0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCAxCi0KLWlubGluZSBpbnQgYXRvbWljSW5j
cmVtZW50KGludCB2b2xhdGlsZSogYWRkZW5kKSB7IHJldHVybiBfX2dudV9jeHg6Ol9fZXhjaGFu
Z2VfYW5kX2FkZChhZGRlbmQsIDEpICsgMTsgfQotaW5saW5lIGludCBhdG9taWNEZWNyZW1lbnQo
aW50IHZvbGF0aWxlKiBhZGRlbmQpIHsgcmV0dXJuIF9fZ251X2N4eDo6X19leGNoYW5nZV9hbmRf
YWRkKGFkZGVuZCwgLTEpIC0gMTsgfQotCi0jZW5kaWYKLQotY2xhc3MgVGhyZWFkU2FmZVNoYXJl
ZEJhc2UgOiBwdWJsaWMgTm9uY29weWFibGUgewotcHVibGljOgotICAgIFRocmVhZFNhZmVTaGFy
ZWRCYXNlKGludCBpbml0aWFsUmVmQ291bnQgPSAxKQotICAgICAgICA6IG1fcmVmQ291bnQoaW5p
dGlhbFJlZkNvdW50KQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIHJlZigpCi0gICAgewotI2lm
IFVTRShMT0NLRlJFRV9USFJFQURTQUZFU0hBUkVEKQotICAgICAgICBhdG9taWNJbmNyZW1lbnQo
Jm1fcmVmQ291bnQpOwotI2Vsc2UKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgp
OwotICAgICAgICArK21fcmVmQ291bnQ7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBib29sIGhhc09u
ZVJlZigpCi0gICAgewotICAgICAgICByZXR1cm4gcmVmQ291bnQoKSA9PSAxOwotICAgIH0KLQot
ICAgIGludCByZWZDb3VudCgpIGNvbnN0Ci0gICAgewotI2lmICFVU0UoTE9DS0ZSRUVfVEhSRUFE
U0FGRVNIQVJFRCkKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwotI2VuZGlm
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQgY29uc3Qgdm9sYXRpbGUgJj4obV9yZWZD
b3VudCk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBw
b2ludGVyIHNob3VsZCBiZSBmcmVlZCBvciBub3QuCi0gICAgYm9vbCBkZXJlZkJhc2UoKQotICAg
IHsKLSNpZiBVU0UoTE9DS0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCkKLSAgICAgICAgaWYgKGF0b21p
Y0RlY3JlbWVudCgmbV9yZWZDb3VudCkgPD0gMCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
I2Vsc2UKLSAgICAgICAgaW50IHJlZkNvdW50OwotICAgICAgICB7Ci0gICAgICAgICAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9tdXRleCk7Ci0gICAgICAgICAgICAtLW1fcmVmQ291bnQ7Ci0gICAg
ICAgICAgICByZWZDb3VudCA9IG1fcmVmQ291bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJl
ZkNvdW50IDw9IDApCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0g
ICAgZnJpZW5kIGNsYXNzIENyb3NzVGhyZWFkUmVmQ291bnRlZDsKLQotICAgIGludCBtX3JlZkNv
dW50OwotI2lmICFVU0UoTE9DS0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCkKLSAgICBtdXRhYmxlIE11
dGV4IG1fbXV0ZXg7Ci0jZW5kaWYKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+IGNsYXNzIFRocmVh
ZFNhZmVTaGFyZWQgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZEJhc2UgewotcHVibGljOgotICAg
IFRocmVhZFNhZmVTaGFyZWQoaW50IGluaXRpYWxSZWZDb3VudCA9IDEpCi0gICAgICAgIDogVGhy
ZWFkU2FmZVNoYXJlZEJhc2UoaW5pdGlhbFJlZkNvdW50KQotICAgIHsKLSAgICB9Ci0KLSAgICB2
b2lkIGRlcmVmKCkKLSAgICB7Ci0gICAgICAgIGlmIChkZXJlZkJhc2UoKSkKLSAgICAgICAgICAg
IGRlbGV0ZSBzdGF0aWNfY2FzdDxUKj4odGhpcyk7Ci0gICAgfQotfTsKLQotLy8gVGhpcyBmdW5j
dGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4gSXQgaXMgc2FmZSB0byBj
YWxsIGl0IHJlcGVhdGVkbHkuCi0vLyBEYXJ3aW4gaXMgYW4gZXhjZXB0aW9uIHRvIHRoaXMgcnVs
ZTogaXQgaXMgT0sgdG8gY2FsbCBpdCBmcm9tIGFueSB0aHJlYWQsIHRoZSBvbmx5IHJlcXVpcmVt
ZW50IGlzIHRoYXQgdGhlIGNhbGxzIGFyZSBub3QgcmVlbnRyYW50Lgotdm9pZCBpbml0aWFsaXpl
VGhyZWFkaW5nKCk7Ci0KLXZvaWQgbG9ja0F0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4
KCk7Ci12b2lkIHVubG9ja0F0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCk7Ci0KIH0g
Ly8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Ok11dGV4OwogdXNpbmcgV1RGOjpNdXRleExv
Y2tlcjsKIHVzaW5nIFdURjo6VGhyZWFkQ29uZGl0aW9uOwotdXNpbmcgV1RGOjpUaHJlYWRJZGVu
dGlmaWVyOwotdXNpbmcgV1RGOjpUaHJlYWRTYWZlU2hhcmVkOwotCi0jaWYgVVNFKExPQ0tGUkVF
X1RIUkVBRFNBRkVTSEFSRUQpCi11c2luZyBXVEY6OmF0b21pY0RlY3JlbWVudDsKLXVzaW5nIFdU
Rjo6YXRvbWljSW5jcmVtZW50OwotI2VuZGlmCi0KLXVzaW5nIFdURjo6Y3JlYXRlVGhyZWFkOwot
dXNpbmcgV1RGOjpjdXJyZW50VGhyZWFkOwotdXNpbmcgV1RGOjpkZXRhY2hUaHJlYWQ7Ci11c2lu
ZyBXVEY6OndhaXRGb3JUaHJlYWRDb21wbGV0aW9uOwogCi0jZW5kaWYgLy8gVGhyZWFkaW5nX2gK
KyNlbmRpZiAvLyBUaHJlYWRpbmdQcmltaXRpdmVzX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54198</attachid>
            <date>2010-04-23 16:10:19 -0700</date>
            <delta_ts>2010-04-23 18:02:33 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>threadPatch2.diff</filename>
            <type>text/plain</type>
            <size>77425</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU4MTg4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDQtMjMgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBGaXggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zODA2MAorICAgICAgICBTcGxpdCB1cCBUaHJlYWRpbmcuaAorCisgICAgICAgIE1vdmUg
Yml0cyBmb3Igb2YgVGhyZWFkaW5nLmggaW50byAzIG5ldyBmaWxlcy4KKyAgICAgICAgLSBBdG9t
aWNzLmggZm9yIGF0b21pYyBvcGVyYXRpb25zLgorICAgICAgICAtIFRocmVhZFNhZmVTaGFyZWQu
aCBmb3IgdGhlIFRocmVhZFNhZmVTaGFyZWQgY2xhc3MuCisgICAgICAgIC0gVGhyZWFkaW5nUHJp
bWl0aXZlcy5oIGZvciB0aGUgcHJpbWl0aXZlcyBhbmQgcGxhdGZvcm0gdHlwZXMuCisKKyAgICAg
ICAgQmFzaWMgdGhyZWFkaW5nIG9wZXJhdGlvbnMgKGNyZWF0aW9uLCBldGMuKSByZW1haW4gaW4g
VGhyZWFkaW5nLmguCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RG
LnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIHd0Zi9BdG9taWNzLmg6IENvcGllZCBmcm9tIHd0Zi9UaHJlYWRpbmcu
aC4KKyAgICAgICAgKiB3dGYvVGhyZWFkU2FmZVNoYXJlZC5oOiBDb3BpZWQgZnJvbSB3dGYvVGhy
ZWFkaW5nLmguCisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAqIHd0Zi9UaHJl
YWRpbmdQcmltaXRpdmVzLmg6IENvcGllZCBmcm9tIHd0Zi9UaHJlYWRpbmcuaC4KKwogMjAxMC0w
NC0yMyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBRdCBidWls
ZC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA1ODE3OCkKKysrIEphdmFTY3Jp
cHRDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNiArMjI0LDcgQEAg
amF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL0Fsd2F5c0lu
bGluZS5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvQXNzZXJ0aW9ucy5jcHAgXAogCUphdmFTY3Jp
cHRDb3JlL3d0Zi9Bc3NlcnRpb25zLmggXAorCUphdmFTY3JpcHRDb3JlL3d0Zi9BdG9taWNzLmgg
XAogCUphdmFTY3JpcHRDb3JlL3d0Zi9CeXRlQXJyYXkuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS93
dGYvQnl0ZUFycmF5LmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9Dcm9zc1RocmVhZFJlZkNvdW50
ZWQuaCBcCkBAIC0yODMsNyArMjg0LDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
SmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBcCiAJSmF2
YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZy5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9UaHJl
YWRpbmcuaCBcCisJSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaCBcCiAJ
SmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcCBcCisJSmF2YVNjcmlwdENv
cmUvd3RmL1RocmVhZFNhZmVTaGFyZWQuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZFNw
ZWNpZmljLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9UeXBlVHJhaXRzLmNwcCBcCiAJSmF2YVNj
cmlwdENvcmUvd3RmL1R5cGVUcmFpdHMuaCBcCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lmd5cGkJKHJldmlzaW9uIDU4MTc4KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzM2LDYgKzMzNiw3IEBACiAgICAgICAgICAgICAnd3Rm
L0FTQ0lJQ1R5cGUuaCcsCiAgICAgICAgICAgICAnd3RmL0Fzc2VydGlvbnMuY3BwJywKICAgICAg
ICAgICAgICd3dGYvQXNzZXJ0aW9ucy5oJywKKyAgICAgICAgICAgICd3dGYvQXRvbWljcy5oJywK
ICAgICAgICAgICAgICd3dGYvQVZMVHJlZS5oJywKICAgICAgICAgICAgICd3dGYvQnl0ZUFycmF5
LmNwcCcsCiAgICAgICAgICAgICAnd3RmL0J5dGVBcnJheS5oJywKQEAgLTQxNCw4ICs0MTUsMTAg
QEAKICAgICAgICAgICAgICd3dGYvVGhyZWFkaW5nLmNwcCcsCiAgICAgICAgICAgICAnd3RmL1Ro
cmVhZGluZy5oJywKICAgICAgICAgICAgICd3dGYvVGhyZWFkaW5nTm9uZS5jcHAnLAorICAgICAg
ICAgICAgJ3d0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmgnLAogICAgICAgICAgICAgJ3d0Zi9UaHJl
YWRpbmdQdGhyZWFkcy5jcHAnLAogICAgICAgICAgICAgJ3d0Zi9UaHJlYWRpbmdXaW4uY3BwJywK
KyAgICAgICAgICAgICd3dGYvVGhyZWFkU2FmZVNoYXJlZC5oJywKICAgICAgICAgICAgICd3dGYv
VGhyZWFkU3BlY2lmaWMuaCcsCiAgICAgICAgICAgICAnd3RmL1RocmVhZFNwZWNpZmljV2luLmNw
cCcsCiAgICAgICAgICAgICAnd3RmL1R5cGVUcmFpdHMuY3BwJywKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oJKHJldmlz
aW9uIDU4MTc4KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9X
VEYudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNiArMjYxLDEwIEBACiAJCQk+DQogCQk8
L0ZpbGU+DQogCQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXEF0b21pY3MuaCIN
CisJCQk+DQorCQk8L0ZpbGU+DQorCQk8RmlsZQ0KIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3Rm
XEJ5dGVBcnJheS5jcHAiDQogCQkJPg0KIAkJPC9GaWxlPg0KQEAgLTUxMywxMCArNTE3LDE4IEBA
CiAJCQk+DQogCQk8L0ZpbGU+DQogCQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3Rm
XFRocmVhZGluZ1ByaW1pdGl2ZXMuaCINCisJCQk+DQorCQk8L0ZpbGU+DQorCQk8RmlsZQ0KIAkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXFRocmVhZGluZ1dpbi5jcHAiDQogCQkJPg0KIAkJPC9G
aWxlPg0KIAkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxUaHJlYWRTYWZlU2hh
cmVkLmgiDQorCQkJPg0KKwkJPC9GaWxlPg0KKwkJPEZpbGUNCiAJCQlSZWxhdGl2ZVBhdGg9Ii4u
XC4uXHd0ZlxUaHJlYWRTcGVjaWZpYy5oIg0KIAkJCT4NCiAJCTwvRmlsZT4NCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDU4MTc4KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDYxLDYgKzQ2
MSw5IEBACiAJCUJDMzA0NjA3MEUxRjQ5N0YwMDMyMzJDRiAvKiBFcnJvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzMDQ2MDYwRTFGNDk3RjAwMzIz
MkNGIC8qIEVycm9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQkMzMTM1NjQwRjMwMkZBMzAwM0RGRDNBIC8qIERlYnVnZ2VyQWN0aXZhdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzMTM1NjIw
RjMwMkZBMzAwM0RGRDNBIC8qIERlYnVnZ2VyQWN0aXZhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMzEzNTY1MEYzMDJGQTMwMDNERkQz
QSAvKiBEZWJ1Z2dlckFjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkMzMTM1NjMwRjMwMkZBMzAwM0RGRDNBIC8qIERlYnVnZ2VyQWN0
aXZhdGlvbi5jcHAgKi87IH07CisJCUJDNUY3QkJFMTE4MjNCNTkwMDUyQzAyQyAvKiBBdG9taWNz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzVGN0JC
QjExODIzQjU5MDA1MkMwMkMgLyogQXRvbWljcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDNUY3QkJGMTE4MjNCNTkwMDUyQzAyQyAvKiBUaHJl
YWRpbmdQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQzVGN0JCQzExODIzQjU5MDA1MkMwMkMgLyogVGhyZWFkaW5nUHJpbWl0aXZlcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDNUY3
QkMwMTE4MjNCNTkwMDUyQzAyQyAvKiBUaHJlYWRTYWZlU2hhcmVkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzVGN0JCRDExODIzQjU5MDA1MkMwMkMg
LyogVGhyZWFkU2FmZVNoYXJlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUJDNkFBQUU1MEUxRjQyNjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNkFBQUU0MEUx
RjQyNjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzc1NkZDOTBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9i
YWxPYmplY3RGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDNzU2RkM3MEUyMDMxQjIwMERFN0QxMiAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0
aW9ucy5oICovOyB9OwogCQlCQzdGOEZCOTBFMTlEMUMzMDA4NjMyQzAgLyogSlNOdW1iZXJDZWxs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdGOEZC
ODBFMTlEMUMzMDA4NjMyQzAgLyogSlNOdW1iZXJDZWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk1Niw2ICs5NTksOSBAQAogCQlCQzMxMzU2
MzBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlYnVnZ2VyQWN0aXZhdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMzM3QkRFMEUxQUYwQjgwMDc2OTE4QSAvKiBHZXR0ZXJT
ZXR0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0dGVyU2V0dGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMzM3QkVBMEUxQjAwQ0IwMDc2OTE4QSAv
KiBFcnJvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFcnJvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDNUY3QkJCMTE4MjNCNTkwMDUyQzAy
QyAvKiBBdG9taWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF0b21pY3Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM1RjdCQkMxMTgyM0I1OTAwNTJDMDJD
IC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGhyZWFkaW5nUHJpbWl0aXZlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlC
QzVGN0JCRDExODIzQjU5MDA1MkMwMkMgLyogVGhyZWFkU2FmZVNoYXJlZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRTYWZlU2hhcmVkLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDNkFBQUU0MEUxRjQyNjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xhc3NJbmZvLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDNzU2RkM2MEUyMDMxQjIwMERFN0QxMiAvKiBKU0dsb2JhbE9i
amVjdEZ1bmN0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDNzU2RkM3MEUyMDMxQjIwMERFN0QxMiAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM2Nyw2ICsxMzczLDkgQEAKIAkJCQk5
M0I2QTBERTBBQTY0REE0MDA3NkRFMjcgLyogR2V0UHRyLmggKi8sCiAJCQkJNjU3RUVCQkYwOTRF
NDQ1RTAwOEM5QzdCIC8qIEhhc2hDb3VudGVkU2V0LmggKi8sCiAJCQkJNjVERkM5MkEwOEVBMTcz
QTAwRjczMDBCIC8qIEhhc2hGdW5jdGlvbnMuaCAqLywKKwkJCQlCQzVGN0JCQjExODIzQjU5MDA1
MkMwMkMgLyogQXRvbWljcy5oICovLAorCQkJCUJDNUY3QkJDMTE4MjNCNTkwMDUyQzAyQyAvKiBU
aHJlYWRpbmdQcmltaXRpdmVzLmggKi8sCisJCQkJQkM1RjdCQkQxMTgyM0I1OTAwNTJDMDJDIC8q
IFRocmVhZFNhZmVTaGFyZWQuaCAqLywKIAkJCQk2NTIyNDZBNDBDOEQ3QTBFMDA3QkRBRjcgLyog
SGFzaEl0ZXJhdG9ycy5oICovLAogCQkJCTY1REZDOTJCMDhFQTE3M0EwMEY3MzAwQiAvKiBIYXNo
TWFwLmggKi8sCiAJCQkJNjVERkM5MkMwOEVBMTczQTAwRjczMDBCIC8qIEhhc2hTZXQuaCAqLywK
QEAgLTIxMDAsNiArMjEwOSw5IEBACiAJCQkJODZCOTlBRTQxMTdFNTc4MTAwREY1QTkwIC8qIFN0
cmluZ0ltcGxCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkI5OURBNzExODAwRjg1MDBERjVB
OTAgLyogQXRvbWljU3RyaW5nVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMUZDNENCMTE3
RUUyQTgwMDQyNTI3MiAvKiBNRDUuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDNUY3QkJFMTE4MjNC
NTkwMDUyQzAyQyAvKiBBdG9taWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzVGN0JCRjExODIz
QjU5MDA1MkMwMkMgLyogVGhyZWFkaW5nUHJpbWl0aXZlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QkM1RjdCQzAxMTgyM0I1OTAwNTJDMDJDIC8qIFRocmVhZFNhZmVTaGFyZWQuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL0F0b21pY3MuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS93dGYvQXRvbWljcy5oCShyZXZpc2lvbiA1ODE3OSkJKGZyb20gSmF2YVNj
cmlwdENvcmUvd3RmL1RocmVhZGluZy5oOjU4MTc5KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL0F0
b21pY3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisg
KiBOb3RlOiBUaGUgaW1wbGVtZW50YXRpb25zIG9mIEludGVybG9ja2VkSW5jcmVtZW50IGFuZCBJ
bnRlcmxvY2tlZERlY3JlbWVudCBhcmUgYmFzZWQKKyAqIG9uIGF0b21pY19pbmNyZW1lbnQgYW5k
IGF0b21pY19leGNoYW5nZV9hbmRfYWRkIGZyb20gdGhlIEJvb3N0IEMrKyBMaWJyYXJ5LiBUaGUg
bGljZW5zZQorICogaXMgdmlydHVhbGx5IGlkZW50aWNhbCB0byB0aGUgQXBwbGUgbGljZW5zZSBh
Ym92ZSBidXQgaXMgaW5jbHVkZWQgaGVyZSBmb3IgY29tcGxldGVuZXNzLgorICoKKyAqIEJvb3N0
IFNvZnR3YXJlIExpY2Vuc2UgLSBWZXJzaW9uIDEuMCAtIEF1Z3VzdCAxN3RoLCAyMDAzCisgKiAK
KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg
cGVyc29uIG9yIG9yZ2FuaXphdGlvbgorICogb2J0YWluaW5nIGEgY29weSBvZiB0aGUgc29mdHdh
cmUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKKyAqIHRoaXMgbGlj
ZW5zZSAodGhlICJTb2Z0d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBkaXN0cmli
dXRlLAorICogZXhlY3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHByZXBh
cmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUKKyAqIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHRo
aXJkLXBhcnRpZXMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCisgKiBkbyBz
bywgYWxsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZzoKKyAqIAorICogVGhlIGNvcHlyaWdodCBu
b3RpY2VzIGluIHRoZSBTb2Z0d2FyZSBhbmQgdGhpcyBlbnRpcmUgc3RhdGVtZW50LCBpbmNsdWRp
bmcKKyAqIHRoZSBhYm92ZSBsaWNlbnNlIGdyYW50LCB0aGlzIHJlc3RyaWN0aW9uIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMg
b2YgdGhlIFNvZnR3YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBhbmQKKyAqIGFsbCBkZXJpdmF0
aXZlIHdvcmtzIG9mIHRoZSBTb2Z0d2FyZSwgdW5sZXNzIHN1Y2ggY29waWVzIG9yIGRlcml2YXRp
dmUKKyAqIHdvcmtzIGFyZSBzb2xlbHkgaW4gdGhlIGZvcm0gb2YgbWFjaGluZS1leGVjdXRhYmxl
IG9iamVjdCBjb2RlIGdlbmVyYXRlZCBieQorICogYSBzb3VyY2UgbGFuZ3VhZ2UgcHJvY2Vzc29y
LgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS
QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO
T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUgQU5EIE5PTi1JTkZSSU5HRU1FTlQu
IElOIE5PIEVWRU5UCisgKiBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQU5ZT05FIERJ
U1RSSUJVVElORyBUSEUgU09GVFdBUkUgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERBTUFHRVMgT1Ig
T1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwK
KyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB
UkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICov
CisKKyNpZm5kZWYgVGhyZWFkaW5nX2gKKyNkZWZpbmUgVGhyZWFkaW5nX2gKKworI2luY2x1ZGUg
IlBsYXRmb3JtLmgiCisKKyNpZiBPUyhXSU5DRSkKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZW5k
aWYKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5o
PgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisKKyNpZiBPUyhXSU5ET1dTKSAmJiAhT1MoV0lOQ0UpCisjaW5jbHVkZSA8d2luZG93cy5o
PgorI2VsaWYgT1MoREFSV0lOKQorI2luY2x1ZGUgPGxpYmtlcm4vT1NBdG9taWMuaD4KKyNlbGlm
IE9TKEFORFJPSUQpCisjaW5jbHVkZSA8Y3V0aWxzL2F0b21pYy5oPgorI2VsaWYgQ09NUElMRVIo
R0NDKSAmJiAhT1MoU1lNQklBTikKKyNpZiAoX19HTlVDX18gPiA0KSB8fCAoKF9fR05VQ19fID09
IDQpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAyKSkKKyNpbmNsdWRlIDxleHQvYXRvbWljaXR5Lmg+
CisjZWxzZQorI2luY2x1ZGUgPGJpdHMvYXRvbWljaXR5Lmg+CisjZW5kaWYKKyNlbmRpZgorCisj
aWYgVVNFKFBUSFJFQURTKQorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNlbGlmIFBMQVRGT1JNKEdU
SykKKyNpbmNsdWRlICJHT3duUHRyLmgiCit0eXBlZGVmIHN0cnVjdCBfR011dGV4IEdNdXRleDsK
K3R5cGVkZWYgc3RydWN0IF9HQ29uZCBHQ29uZDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQp
CisjaW5jbHVkZSA8cWdsb2JhbC5oPgorUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRTXV0ZXg7
CitjbGFzcyBRV2FpdENvbmRpdGlvbjsKK1FUX0VORF9OQU1FU1BBQ0UKKyNlbmRpZgorCisjaW5j
bHVkZSA8c3RkaW50Lmg+CisKKy8vIEZvciBwb3J0YWJpbGl0eSwgd2UgZG8gbm90IHVzZSB0aHJl
YWQtc2FmZSBzdGF0aWNzIG5hdGl2ZWx5IHN1cHBvcnRlZCBieSBzb21lIGNvbXBpbGVycyAoZS5n
LiBnY2MpLgorI2RlZmluZSBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMoVCwgbmFtZSkgXAor
ICAgIFdURjo6bG9ja0F0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCk7IFwKKyAgICBz
dGF0aWMgVCBuYW1lOyBcCisgICAgV1RGOjp1bmxvY2tBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0
aWNNdXRleCgpOworCituYW1lc3BhY2UgV1RGIHsKKwordHlwZWRlZiB1aW50MzJfdCBUaHJlYWRJ
ZGVudGlmaWVyOwordHlwZWRlZiB2b2lkKiAoKlRocmVhZEZ1bmN0aW9uKSh2b2lkKiBhcmd1bWVu
dCk7CisKKy8vIFJldHVybnMgMCBpZiB0aHJlYWQgY3JlYXRpb24gZmFpbGVkLgorLy8gVGhlIHRo
cmVhZCBuYW1lIG11c3QgYmUgYSBsaXRlcmFsIHNpbmNlIG9uIHNvbWUgcGxhdGZvcm1zIGl0J3Mg
cGFzc2VkIGluIHRvIHRoZSB0aHJlYWQuCitUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChU
aHJlYWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworCisvLyBJbnRl
cm5hbCBwbGF0Zm9ybS1zcGVjaWZpYyBjcmVhdGVUaHJlYWQgaW1wbGVtZW50YXRpb24uCitUaHJl
YWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwg
Y29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisKKy8vIENhbGxlZCBpbiB0aGUgdGhyZWFkIGR1cmlu
ZyBpbml0aWFsaXphdGlvbi4KKy8vIEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3aGVyZSB0aGUgdGhy
ZWFkIG5hbWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4KK3ZvaWQgaW5pdGlh
bGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKKworVGhy
ZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCk7CitpbnQgd2FpdEZvclRocmVhZENvbXBsZXRp
b24oVGhyZWFkSWRlbnRpZmllciwgdm9pZCoqKTsKK3ZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElk
ZW50aWZpZXIpOworCisjaWYgVVNFKFBUSFJFQURTKQordHlwZWRlZiBwdGhyZWFkX211dGV4X3Qg
UGxhdGZvcm1NdXRleDsKKyNpZiBIQVZFKFBUSFJFQURfUldMT0NLKQordHlwZWRlZiBwdGhyZWFk
X3J3bG9ja190IFBsYXRmb3JtUmVhZFdyaXRlTG9jazsKKyNlbHNlCit0eXBlZGVmIHZvaWQqIFBs
YXRmb3JtUmVhZFdyaXRlTG9jazsKKyNlbmRpZgordHlwZWRlZiBwdGhyZWFkX2NvbmRfdCBQbGF0
Zm9ybUNvbmRpdGlvbjsKKyNlbGlmIFBMQVRGT1JNKEdUSykKK3R5cGVkZWYgR093blB0cjxHTXV0
ZXg+IFBsYXRmb3JtTXV0ZXg7Cit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtUmVhZFdyaXRlTG9jazsg
Ly8gRklYTUU6IEltcGxlbWVudC4KK3R5cGVkZWYgR093blB0cjxHQ29uZD4gUGxhdGZvcm1Db25k
aXRpb247CisjZWxpZiBQTEFURk9STShRVCkKK3R5cGVkZWYgUVRfUFJFUEVORF9OQU1FU1BBQ0Uo
UU11dGV4KSogUGxhdGZvcm1NdXRleDsKK3R5cGVkZWYgdm9pZCogUGxhdGZvcm1SZWFkV3JpdGVM
b2NrOyAvLyBGSVhNRTogSW1wbGVtZW50LgordHlwZWRlZiBRVF9QUkVQRU5EX05BTUVTUEFDRShR
V2FpdENvbmRpdGlvbikqIFBsYXRmb3JtQ29uZGl0aW9uOworI2VsaWYgT1MoV0lORE9XUykKK3N0
cnVjdCBQbGF0Zm9ybU11dGV4IHsKKyAgICBDUklUSUNBTF9TRUNUSU9OIG1faW50ZXJuYWxNdXRl
eDsKKyAgICBzaXplX3QgbV9yZWN1cnNpb25Db3VudDsKK307Cit0eXBlZGVmIHZvaWQqIFBsYXRm
b3JtUmVhZFdyaXRlTG9jazsgLy8gRklYTUU6IEltcGxlbWVudC4KK3N0cnVjdCBQbGF0Zm9ybUNv
bmRpdGlvbiB7CisgICAgc2l6ZV90IG1fd2FpdGVyc0dvbmU7CisgICAgc2l6ZV90IG1fd2FpdGVy
c0Jsb2NrZWQ7CisgICAgc2l6ZV90IG1fd2FpdGVyc1RvVW5ibG9jazsgCisgICAgSEFORExFIG1f
YmxvY2tMb2NrOworICAgIEhBTkRMRSBtX2Jsb2NrUXVldWU7CisgICAgSEFORExFIG1fdW5ibG9j
a0xvY2s7CisKKyAgICBib29sIHRpbWVkV2FpdChQbGF0Zm9ybU11dGV4JiwgRFdPUkQgZHVyYXRp
b25NaWxsaXNlY29uZHMpOworICAgIHZvaWQgc2lnbmFsKGJvb2wgdW5ibG9ja0FsbCk7Cit9Owor
I2Vsc2UKK3R5cGVkZWYgdm9pZCogUGxhdGZvcm1NdXRleDsKK3R5cGVkZWYgdm9pZCogUGxhdGZv
cm1SZWFkV3JpdGVMb2NrOwordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUNvbmRpdGlvbjsKKyNlbmRp
ZgorICAgIAorY2xhc3MgTXV0ZXggOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAg
IE11dGV4KCk7CisgICAgfk11dGV4KCk7CisKKyAgICB2b2lkIGxvY2soKTsKKyAgICBib29sIHRy
eUxvY2soKTsKKyAgICB2b2lkIHVubG9jaygpOworCitwdWJsaWM6CisgICAgUGxhdGZvcm1NdXRl
eCYgaW1wbCgpIHsgcmV0dXJuIG1fbXV0ZXg7IH0KK3ByaXZhdGU6CisgICAgUGxhdGZvcm1NdXRl
eCBtX211dGV4OworfTsKKwordHlwZWRlZiBMb2NrZXI8TXV0ZXg+IE11dGV4TG9ja2VyOworCitj
bGFzcyBSZWFkV3JpdGVMb2NrIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBS
ZWFkV3JpdGVMb2NrKCk7CisgICAgflJlYWRXcml0ZUxvY2soKTsKKworICAgIHZvaWQgcmVhZExv
Y2soKTsKKyAgICBib29sIHRyeVJlYWRMb2NrKCk7CisKKyAgICB2b2lkIHdyaXRlTG9jaygpOwor
ICAgIGJvb2wgdHJ5V3JpdGVMb2NrKCk7CisgICAgCisgICAgdm9pZCB1bmxvY2soKTsKKworcHJp
dmF0ZToKKyAgICBQbGF0Zm9ybVJlYWRXcml0ZUxvY2sgbV9yZWFkV3JpdGVMb2NrOworfTsKKwor
Y2xhc3MgVGhyZWFkQ29uZGl0aW9uIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAg
ICBUaHJlYWRDb25kaXRpb24oKTsKKyAgICB+VGhyZWFkQ29uZGl0aW9uKCk7CisgICAgCisgICAg
dm9pZCB3YWl0KE11dGV4JiBtdXRleCk7CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb25k
aXRpb24gd2FzIHNpZ25hbGVkIGJlZm9yZSBhYnNvbHV0ZVRpbWUsIGZhbHNlIGlmIHRoZSBhYnNv
bHV0ZVRpbWUgd2FzIHJlYWNoZWQgb3IgaXMgaW4gdGhlIHBhc3QuCisgICAgLy8gVGhlIGFic29s
dXRlVGltZSBpcyBpbiBzZWNvbmRzLCBzdGFydGluZyBvbiBKYW51YXJ5IDEsIDE5NzAuIFRoZSB0
aW1lIGlzIGFzc3VtZWQgdG8gdXNlIHRoZSBzYW1lIHRpbWUgem9uZSBhcyBXVEY6OmN1cnJlbnRU
aW1lKCkuCisgICAgYm9vbCB0aW1lZFdhaXQoTXV0ZXgmLCBkb3VibGUgYWJzb2x1dGVUaW1lKTsK
KyAgICB2b2lkIHNpZ25hbCgpOworICAgIHZvaWQgYnJvYWRjYXN0KCk7CisgICAgCitwcml2YXRl
OgorICAgIFBsYXRmb3JtQ29uZGl0aW9uIG1fY29uZGl0aW9uOworfTsKKworI2lmIE9TKFdJTkRP
V1MpCisjZGVmaW5lIFdURl9VU0VfTE9DS0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCAxCisKKyNpZiBD
T01QSUxFUihNSU5HVykgfHwgQ09NUElMRVIoTVNWQzcpIHx8IE9TKFdJTkNFKQoraW5saW5lIGlu
dCBhdG9taWNJbmNyZW1lbnQoaW50KiBhZGRlbmQpIHsgcmV0dXJuIEludGVybG9ja2VkSW5jcmVt
ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyo+KGFkZGVuZCkpOyB9CitpbmxpbmUgaW50IGF0b21p
Y0RlY3JlbWVudChpbnQqIGFkZGVuZCkgeyByZXR1cm4gSW50ZXJsb2NrZWREZWNyZW1lbnQocmVp
bnRlcnByZXRfY2FzdDxsb25nKj4oYWRkZW5kKSk7IH0KKyNlbHNlCitpbmxpbmUgaW50IGF0b21p
Y0luY3JlbWVudChpbnQgdm9sYXRpbGUqIGFkZGVuZCkgeyByZXR1cm4gSW50ZXJsb2NrZWRJbmNy
ZW1lbnQocmVpbnRlcnByZXRfY2FzdDxsb25nIHZvbGF0aWxlKj4oYWRkZW5kKSk7IH0KK2lubGlu
ZSBpbnQgYXRvbWljRGVjcmVtZW50KGludCB2b2xhdGlsZSogYWRkZW5kKSB7IHJldHVybiBJbnRl
cmxvY2tlZERlY3JlbWVudChyZWludGVycHJldF9jYXN0PGxvbmcgdm9sYXRpbGUqPihhZGRlbmQp
KTsgfQorI2VuZGlmCisKKyNlbGlmIE9TKERBUldJTikKKyNkZWZpbmUgV1RGX1VTRV9MT0NLRlJF
RV9USFJFQURTQUZFU0hBUkVEIDEKKworaW5saW5lIGludCBhdG9taWNJbmNyZW1lbnQoaW50IHZv
bGF0aWxlKiBhZGRlbmQpIHsgcmV0dXJuIE9TQXRvbWljSW5jcmVtZW50MzJCYXJyaWVyKGNvbnN0
X2Nhc3Q8aW50Kj4oYWRkZW5kKSk7IH0KK2lubGluZSBpbnQgYXRvbWljRGVjcmVtZW50KGludCB2
b2xhdGlsZSogYWRkZW5kKSB7IHJldHVybiBPU0F0b21pY0RlY3JlbWVudDMyQmFycmllcihjb25z
dF9jYXN0PGludCo+KGFkZGVuZCkpOyB9CisKKyNlbGlmIE9TKEFORFJPSUQpCisKK2lubGluZSBp
bnQgYXRvbWljSW5jcmVtZW50KGludCB2b2xhdGlsZSogYWRkZW5kKSB7IHJldHVybiBhbmRyb2lk
X2F0b21pY19pbmMoYWRkZW5kKTsgfQoraW5saW5lIGludCBhdG9taWNEZWNyZW1lbnQoaW50IHZv
bGF0aWxlKiBhZGRlbmQpIHsgcmV0dXJuIGFuZHJvaWRfYXRvbWljX2RlYyhhZGRlbmQpOyB9CisK
KyNlbGlmIENPTVBJTEVSKEdDQykgJiYgIUNQVShTUEFSQzY0KSAmJiAhT1MoU1lNQklBTikgLy8g
c2l6ZW9mKF9BdG9taWNfd29yZCkgIT0gc2l6ZW9mKGludCkgb24gc3BhcmM2NCBnY2MKKyNkZWZp
bmUgV1RGX1VTRV9MT0NLRlJFRV9USFJFQURTQUZFU0hBUkVEIDEKKworaW5saW5lIGludCBhdG9t
aWNJbmNyZW1lbnQoaW50IHZvbGF0aWxlKiBhZGRlbmQpIHsgcmV0dXJuIF9fZ251X2N4eDo6X19l
eGNoYW5nZV9hbmRfYWRkKGFkZGVuZCwgMSkgKyAxOyB9CitpbmxpbmUgaW50IGF0b21pY0RlY3Jl
bWVudChpbnQgdm9sYXRpbGUqIGFkZGVuZCkgeyByZXR1cm4gX19nbnVfY3h4OjpfX2V4Y2hhbmdl
X2FuZF9hZGQoYWRkZW5kLCAtMSkgLSAxOyB9CisKKyNlbmRpZgorCitjbGFzcyBUaHJlYWRTYWZl
U2hhcmVkQmFzZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgVGhyZWFkU2Fm
ZVNoYXJlZEJhc2UoaW50IGluaXRpYWxSZWZDb3VudCA9IDEpCisgICAgICAgIDogbV9yZWZDb3Vu
dChpbml0aWFsUmVmQ291bnQpCisgICAgeworICAgIH0KKworICAgIHZvaWQgcmVmKCkKKyAgICB7
CisjaWYgVVNFKExPQ0tGUkVFX1RIUkVBRFNBRkVTSEFSRUQpCisgICAgICAgIGF0b21pY0luY3Jl
bWVudCgmbV9yZWZDb3VudCk7CisjZWxzZQorICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9t
dXRleCk7CisgICAgICAgICsrbV9yZWZDb3VudDsKKyNlbmRpZgorICAgIH0KKworICAgIGJvb2wg
aGFzT25lUmVmKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWZDb3VudCgpID09IDE7CisgICAg
fQorCisgICAgaW50IHJlZkNvdW50KCkgY29uc3QKKyAgICB7CisjaWYgIVVTRShMT0NLRlJFRV9U
SFJFQURTQUZFU0hBUkVEKQorICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7Cisj
ZW5kaWYKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludCBjb25zdCB2b2xhdGlsZSAmPiht
X3JlZkNvdW50KTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICAvLyBSZXR1cm5zIHdoZXRoZXIg
dGhlIHBvaW50ZXIgc2hvdWxkIGJlIGZyZWVkIG9yIG5vdC4KKyAgICBib29sIGRlcmVmQmFzZSgp
CisgICAgeworI2lmIFVTRShMT0NLRlJFRV9USFJFQURTQUZFU0hBUkVEKQorICAgICAgICBpZiAo
YXRvbWljRGVjcmVtZW50KCZtX3JlZkNvdW50KSA8PSAwKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisjZWxzZQorICAgICAgICBpbnQgcmVmQ291bnQ7CisgICAgICAgIHsKKyAgICAgICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgICAgIC0tbV9yZWZDb3VudDsK
KyAgICAgICAgICAgIHJlZkNvdW50ID0gbV9yZWZDb3VudDsKKyAgICAgICAgfQorICAgICAgICBp
ZiAocmVmQ291bnQgPD0gMCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8Y2xhc3Mg
VD4KKyAgICBmcmllbmQgY2xhc3MgQ3Jvc3NUaHJlYWRSZWZDb3VudGVkOworCisgICAgaW50IG1f
cmVmQ291bnQ7CisjaWYgIVVTRShMT0NLRlJFRV9USFJFQURTQUZFU0hBUkVEKQorICAgIG11dGFi
bGUgTXV0ZXggbV9tdXRleDsKKyNlbmRpZgorfTsKKwordGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3Mg
VGhyZWFkU2FmZVNoYXJlZCA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkQmFzZSB7CitwdWJsaWM6
CisgICAgVGhyZWFkU2FmZVNoYXJlZChpbnQgaW5pdGlhbFJlZkNvdW50ID0gMSkKKyAgICAgICAg
OiBUaHJlYWRTYWZlU2hhcmVkQmFzZShpbml0aWFsUmVmQ291bnQpCisgICAgeworICAgIH0KKwor
ICAgIHZvaWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAgaWYgKGRlcmVmQmFzZSgpKQorICAgICAg
ICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICB9Cit9OworCisvLyBUaGlz
IGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLiBJdCBpcyBzYWZl
IHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KKy8vIERhcndpbiBpcyBhbiBleGNlcHRpb24gdG8gdGhp
cyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0IGZyb20gYW55IHRocmVhZCwgdGhlIG9ubHkgcmVx
dWlyZW1lbnQgaXMgdGhhdCB0aGUgY2FsbHMgYXJlIG5vdCByZWVudHJhbnQuCit2b2lkIGluaXRp
YWxpemVUaHJlYWRpbmcoKTsKKwordm9pZCBsb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGlj
TXV0ZXgoKTsKK3ZvaWQgdW5sb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgoKTsK
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6TXV0ZXg7Cit1c2luZyBXVEY6Ok11
dGV4TG9ja2VyOwordXNpbmcgV1RGOjpUaHJlYWRDb25kaXRpb247Cit1c2luZyBXVEY6OlRocmVh
ZElkZW50aWZpZXI7Cit1c2luZyBXVEY6OlRocmVhZFNhZmVTaGFyZWQ7CisKKyNpZiBVU0UoTE9D
S0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCkKK3VzaW5nIFdURjo6YXRvbWljRGVjcmVtZW50OwordXNp
bmcgV1RGOjphdG9taWNJbmNyZW1lbnQ7CisjZW5kaWYKKwordXNpbmcgV1RGOjpjcmVhdGVUaHJl
YWQ7Cit1c2luZyBXVEY6OmN1cnJlbnRUaHJlYWQ7Cit1c2luZyBXVEY6OmRldGFjaFRocmVhZDsK
K3VzaW5nIFdURjo6d2FpdEZvclRocmVhZENvbXBsZXRpb247CisKKyNlbmRpZiAvLyBUaHJlYWRp
bmdfaApJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL0F0b21pY3MuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS93dGYvQXRvbWljcy5oCShyZXZpc2lvbiA1ODE3OCkKKysrIEphdmFTY3Jp
cHRDb3JlL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXln
b29kQHJlYWt0aXguY29tKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTYsMjEgKzU2LDEyIEBACiAg
KiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAotI2lmbmRlZiBUaHJlYWRpbmdfaAot
I2RlZmluZSBUaHJlYWRpbmdfaAorI2lmbmRlZiBBdG9taWNzX2gKKyNkZWZpbmUgQXRvbWljc19o
CiAKICNpbmNsdWRlICJQbGF0Zm9ybS5oIgogCi0jaWYgT1MoV0lOQ0UpCi0jaW5jbHVkZSA8d2lu
ZG93cy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUg
PHd0Zi9Mb2NrZXIuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgotCi0jaWYgT1MoV0lORE9XUykgJiYgIU9TKFdJTkNFKQorI2lmIE9T
KFdJTkRPV1MpCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2VsaWYgT1MoREFSV0lOKQogI2luY2x1
ZGUgPGxpYmtlcm4vT1NBdG9taWMuaD4KQEAgLTg0LDEzOSArNzUsOCBAQAogI2VuZGlmCiAjZW5k
aWYKIAotI2lmIFVTRShQVEhSRUFEUykKLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jZWxpZiBQTEFU
Rk9STShHVEspCi0jaW5jbHVkZSAiR093blB0ci5oIgotdHlwZWRlZiBzdHJ1Y3QgX0dNdXRleCBH
TXV0ZXg7Ci10eXBlZGVmIHN0cnVjdCBfR0NvbmQgR0NvbmQ7Ci0jZW5kaWYKLQotI2lmIFBMQVRG
T1JNKFFUKQotI2luY2x1ZGUgPHFnbG9iYWwuaD4KLVFUX0JFR0lOX05BTUVTUEFDRQotY2xhc3Mg
UU11dGV4OwotY2xhc3MgUVdhaXRDb25kaXRpb247Ci1RVF9FTkRfTkFNRVNQQUNFCi0jZW5kaWYK
LQotI2luY2x1ZGUgPHN0ZGludC5oPgotCi0vLyBGb3IgcG9ydGFiaWxpdHksIHdlIGRvIG5vdCB1
c2UgdGhyZWFkLXNhZmUgc3RhdGljcyBuYXRpdmVseSBzdXBwb3J0ZWQgYnkgc29tZSBjb21waWxl
cnMgKGUuZy4gZ2NjKS4KLSNkZWZpbmUgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljKFQsIG5h
bWUpIFwKLSAgICBXVEY6OmxvY2tBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleCgpOyBc
Ci0gICAgc3RhdGljIFQgbmFtZTsgXAotICAgIFdURjo6dW5sb2NrQXRvbWljYWxseUluaXRpYWxp
emVkU3RhdGljTXV0ZXgoKTsKLQogbmFtZXNwYWNlIFdURiB7CiAKLXR5cGVkZWYgdWludDMyX3Qg
VGhyZWFkSWRlbnRpZmllcjsKLXR5cGVkZWYgdm9pZCogKCpUaHJlYWRGdW5jdGlvbikodm9pZCog
YXJndW1lbnQpOwotCi0vLyBSZXR1cm5zIDAgaWYgdGhyZWFkIGNyZWF0aW9uIGZhaWxlZC4KLS8v
IFRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIGEgbGl0ZXJhbCBzaW5jZSBvbiBzb21lIHBsYXRmb3Jt
cyBpdCdzIHBhc3NlZCBpbiB0byB0aGUgdGhyZWFkLgotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVU
aHJlYWQoVGhyZWFkRnVuY3Rpb24sIHZvaWQqLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKLQot
Ly8gSW50ZXJuYWwgcGxhdGZvcm0tc3BlY2lmaWMgY3JlYXRlVGhyZWFkIGltcGxlbWVudGF0aW9u
LgotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiwg
dm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwotCi0vLyBDYWxsZWQgaW4gdGhlIHRocmVh
ZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0vLyBIZWxwZnVsIGZvciBwbGF0Zm9ybXMgd2hlcmUg
dGhlIHRocmVhZCBuYW1lIG11c3QgYmUgc2V0IGZyb20gd2l0aGluIHRoZSB0aHJlYWQuCi12b2lk
IGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSk7
Ci0KLVRocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVhZCgpOwotaW50IHdhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIsIHZvaWQqKik7Ci12b2lkIGRldGFjaFRocmVhZChU
aHJlYWRJZGVudGlmaWVyKTsKLQotI2lmIFVTRShQVEhSRUFEUykKLXR5cGVkZWYgcHRocmVhZF9t
dXRleF90IFBsYXRmb3JtTXV0ZXg7Ci0jaWYgSEFWRShQVEhSRUFEX1JXTE9DSykKLXR5cGVkZWYg
cHRocmVhZF9yd2xvY2tfdCBQbGF0Zm9ybVJlYWRXcml0ZUxvY2s7Ci0jZWxzZQotdHlwZWRlZiB2
b2lkKiBQbGF0Zm9ybVJlYWRXcml0ZUxvY2s7Ci0jZW5kaWYKLXR5cGVkZWYgcHRocmVhZF9jb25k
X3QgUGxhdGZvcm1Db25kaXRpb247Ci0jZWxpZiBQTEFURk9STShHVEspCi10eXBlZGVmIEdPd25Q
dHI8R011dGV4PiBQbGF0Zm9ybU11dGV4OwotdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybVJlYWRXcml0
ZUxvY2s7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCi10eXBlZGVmIEdPd25QdHI8R0NvbmQ+IFBsYXRm
b3JtQ29uZGl0aW9uOwotI2VsaWYgUExBVEZPUk0oUVQpCi10eXBlZGVmIFFUX1BSRVBFTkRfTkFN
RVNQQUNFKFFNdXRleCkqIFBsYXRmb3JtTXV0ZXg7Ci10eXBlZGVmIHZvaWQqIFBsYXRmb3JtUmVh
ZFdyaXRlTG9jazsgLy8gRklYTUU6IEltcGxlbWVudC4KLXR5cGVkZWYgUVRfUFJFUEVORF9OQU1F
U1BBQ0UoUVdhaXRDb25kaXRpb24pKiBQbGF0Zm9ybUNvbmRpdGlvbjsKLSNlbGlmIE9TKFdJTkRP
V1MpCi1zdHJ1Y3QgUGxhdGZvcm1NdXRleCB7Ci0gICAgQ1JJVElDQUxfU0VDVElPTiBtX2ludGVy
bmFsTXV0ZXg7Ci0gICAgc2l6ZV90IG1fcmVjdXJzaW9uQ291bnQ7Ci19OwotdHlwZWRlZiB2b2lk
KiBQbGF0Zm9ybVJlYWRXcml0ZUxvY2s7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCi1zdHJ1Y3QgUGxh
dGZvcm1Db25kaXRpb24gewotICAgIHNpemVfdCBtX3dhaXRlcnNHb25lOwotICAgIHNpemVfdCBt
X3dhaXRlcnNCbG9ja2VkOwotICAgIHNpemVfdCBtX3dhaXRlcnNUb1VuYmxvY2s7IAotICAgIEhB
TkRMRSBtX2Jsb2NrTG9jazsKLSAgICBIQU5ETEUgbV9ibG9ja1F1ZXVlOwotICAgIEhBTkRMRSBt
X3VuYmxvY2tMb2NrOwotCi0gICAgYm9vbCB0aW1lZFdhaXQoUGxhdGZvcm1NdXRleCYsIERXT1JE
IGR1cmF0aW9uTWlsbGlzZWNvbmRzKTsKLSAgICB2b2lkIHNpZ25hbChib29sIHVuYmxvY2tBbGwp
OwotfTsKLSNlbHNlCi10eXBlZGVmIHZvaWQqIFBsYXRmb3JtTXV0ZXg7Ci10eXBlZGVmIHZvaWQq
IFBsYXRmb3JtUmVhZFdyaXRlTG9jazsKLXR5cGVkZWYgdm9pZCogUGxhdGZvcm1Db25kaXRpb247
Ci0jZW5kaWYKLSAgICAKLWNsYXNzIE11dGV4IDogcHVibGljIE5vbmNvcHlhYmxlIHsKLXB1Ymxp
YzoKLSAgICBNdXRleCgpOwotICAgIH5NdXRleCgpOwotCi0gICAgdm9pZCBsb2NrKCk7Ci0gICAg
Ym9vbCB0cnlMb2NrKCk7Ci0gICAgdm9pZCB1bmxvY2soKTsKLQotcHVibGljOgotICAgIFBsYXRm
b3JtTXV0ZXgmIGltcGwoKSB7IHJldHVybiBtX211dGV4OyB9Ci1wcml2YXRlOgotICAgIFBsYXRm
b3JtTXV0ZXggbV9tdXRleDsKLX07Ci0KLXR5cGVkZWYgTG9ja2VyPE11dGV4PiBNdXRleExvY2tl
cjsKLQotY2xhc3MgUmVhZFdyaXRlTG9jayA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci1wdWJsaWM6
Ci0gICAgUmVhZFdyaXRlTG9jaygpOwotICAgIH5SZWFkV3JpdGVMb2NrKCk7Ci0KLSAgICB2b2lk
IHJlYWRMb2NrKCk7Ci0gICAgYm9vbCB0cnlSZWFkTG9jaygpOwotCi0gICAgdm9pZCB3cml0ZUxv
Y2soKTsKLSAgICBib29sIHRyeVdyaXRlTG9jaygpOwotICAgIAotICAgIHZvaWQgdW5sb2NrKCk7
Ci0KLXByaXZhdGU6Ci0gICAgUGxhdGZvcm1SZWFkV3JpdGVMb2NrIG1fcmVhZFdyaXRlTG9jazsK
LX07Ci0KLWNsYXNzIFRocmVhZENvbmRpdGlvbiA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci1wdWJs
aWM6Ci0gICAgVGhyZWFkQ29uZGl0aW9uKCk7Ci0gICAgflRocmVhZENvbmRpdGlvbigpOwotICAg
IAotICAgIHZvaWQgd2FpdChNdXRleCYgbXV0ZXgpOwotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgY29uZGl0aW9uIHdhcyBzaWduYWxlZCBiZWZvcmUgYWJzb2x1dGVUaW1lLCBmYWxzZSBpZiB0
aGUgYWJzb2x1dGVUaW1lIHdhcyByZWFjaGVkIG9yIGlzIGluIHRoZSBwYXN0LgotICAgIC8vIFRo
ZSBhYnNvbHV0ZVRpbWUgaXMgaW4gc2Vjb25kcywgc3RhcnRpbmcgb24gSmFudWFyeSAxLCAxOTcw
LiBUaGUgdGltZSBpcyBhc3N1bWVkIHRvIHVzZSB0aGUgc2FtZSB0aW1lIHpvbmUgYXMgV1RGOjpj
dXJyZW50VGltZSgpLgotICAgIGJvb2wgdGltZWRXYWl0KE11dGV4JiwgZG91YmxlIGFic29sdXRl
VGltZSk7Ci0gICAgdm9pZCBzaWduYWwoKTsKLSAgICB2b2lkIGJyb2FkY2FzdCgpOwotICAgIAot
cHJpdmF0ZToKLSAgICBQbGF0Zm9ybUNvbmRpdGlvbiBtX2NvbmRpdGlvbjsKLX07Ci0KICNpZiBP
UyhXSU5ET1dTKQogI2RlZmluZSBXVEZfVVNFX0xPQ0tGUkVFX1RIUkVBRFNBRkVTSEFSRUQgMQog
CkBAIC0yNDcsMTAzICsxMDcsMTEgQEAgaW5saW5lIGludCBhdG9taWNEZWNyZW1lbnQoaW50IHZv
bGF0aWxlKgogCiAjZW5kaWYKIAotY2xhc3MgVGhyZWFkU2FmZVNoYXJlZEJhc2UgOiBwdWJsaWMg
Tm9uY29weWFibGUgewotcHVibGljOgotICAgIFRocmVhZFNhZmVTaGFyZWRCYXNlKGludCBpbml0
aWFsUmVmQ291bnQgPSAxKQotICAgICAgICA6IG1fcmVmQ291bnQoaW5pdGlhbFJlZkNvdW50KQot
ICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIHJlZigpCi0gICAgewotI2lmIFVTRShMT0NLRlJFRV9U
SFJFQURTQUZFU0hBUkVEKQotICAgICAgICBhdG9taWNJbmNyZW1lbnQoJm1fcmVmQ291bnQpOwot
I2Vsc2UKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwotICAgICAgICArK21f
cmVmQ291bnQ7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBib29sIGhhc09uZVJlZigpCi0gICAgewot
ICAgICAgICByZXR1cm4gcmVmQ291bnQoKSA9PSAxOwotICAgIH0KLQotICAgIGludCByZWZDb3Vu
dCgpIGNvbnN0Ci0gICAgewotI2lmICFVU0UoTE9DS0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCkKLSAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwotI2VuZGlmCi0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQgY29uc3Qgdm9sYXRpbGUgJj4obV9yZWZDb3VudCk7Ci0gICAgfQot
Ci1wcm90ZWN0ZWQ6Ci0gICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBwb2ludGVyIHNob3VsZCBi
ZSBmcmVlZCBvciBub3QuCi0gICAgYm9vbCBkZXJlZkJhc2UoKQotICAgIHsKLSNpZiBVU0UoTE9D
S0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCkKLSAgICAgICAgaWYgKGF0b21pY0RlY3JlbWVudCgmbV9y
ZWZDb3VudCkgPD0gMCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICAgICAg
aW50IHJlZkNvdW50OwotICAgICAgICB7Ci0gICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9tdXRleCk7Ci0gICAgICAgICAgICAtLW1fcmVmQ291bnQ7Ci0gICAgICAgICAgICByZWZDb3Vu
dCA9IG1fcmVmQ291bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlZkNvdW50IDw9IDApCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICAgZnJpZW5kIGNsYXNz
IENyb3NzVGhyZWFkUmVmQ291bnRlZDsKLQotICAgIGludCBtX3JlZkNvdW50OwotI2lmICFVU0Uo
TE9DS0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCkKLSAgICBtdXRhYmxlIE11dGV4IG1fbXV0ZXg7Ci0j
ZW5kaWYKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+IGNsYXNzIFRocmVhZFNhZmVTaGFyZWQgOiBw
dWJsaWMgVGhyZWFkU2FmZVNoYXJlZEJhc2UgewotcHVibGljOgotICAgIFRocmVhZFNhZmVTaGFy
ZWQoaW50IGluaXRpYWxSZWZDb3VudCA9IDEpCi0gICAgICAgIDogVGhyZWFkU2FmZVNoYXJlZEJh
c2UoaW5pdGlhbFJlZkNvdW50KQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGRlcmVmKCkKLSAg
ICB7Ci0gICAgICAgIGlmIChkZXJlZkJhc2UoKSkKLSAgICAgICAgICAgIGRlbGV0ZSBzdGF0aWNf
Y2FzdDxUKj4odGhpcyk7Ci0gICAgfQotfTsKLQotLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNh
bGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4gSXQgaXMgc2FmZSB0byBjYWxsIGl0IHJlcGVhdGVk
bHkuCi0vLyBEYXJ3aW4gaXMgYW4gZXhjZXB0aW9uIHRvIHRoaXMgcnVsZTogaXQgaXMgT0sgdG8g
Y2FsbCBpdCBmcm9tIGFueSB0aHJlYWQsIHRoZSBvbmx5IHJlcXVpcmVtZW50IGlzIHRoYXQgdGhl
IGNhbGxzIGFyZSBub3QgcmVlbnRyYW50Lgotdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0K
LXZvaWQgbG9ja0F0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCk7Ci12b2lkIHVubG9j
a0F0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCk7Ci0KIH0gLy8gbmFtZXNwYWNlIFdU
RgogCi11c2luZyBXVEY6Ok11dGV4OwotdXNpbmcgV1RGOjpNdXRleExvY2tlcjsKLXVzaW5nIFdU
Rjo6VGhyZWFkQ29uZGl0aW9uOwotdXNpbmcgV1RGOjpUaHJlYWRJZGVudGlmaWVyOwotdXNpbmcg
V1RGOjpUaHJlYWRTYWZlU2hhcmVkOwotCiAjaWYgVVNFKExPQ0tGUkVFX1RIUkVBRFNBRkVTSEFS
RUQpCiB1c2luZyBXVEY6OmF0b21pY0RlY3JlbWVudDsKIHVzaW5nIFdURjo6YXRvbWljSW5jcmVt
ZW50OwogI2VuZGlmCiAKLXVzaW5nIFdURjo6Y3JlYXRlVGhyZWFkOwotdXNpbmcgV1RGOjpjdXJy
ZW50VGhyZWFkOwotdXNpbmcgV1RGOjpkZXRhY2hUaHJlYWQ7Ci11c2luZyBXVEY6OndhaXRGb3JU
aHJlYWRDb21wbGV0aW9uOwotCi0jZW5kaWYgLy8gVGhyZWFkaW5nX2gKKyNlbmRpZiAvLyBBdG9t
aWNzX2gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRTYWZlU2hhcmVkLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZFNhZmVTaGFyZWQuaAkocmV2aXNpb24g
NTgxNzkpCShmcm9tIEphdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmcuaDo1ODE3OSkKKysrIEph
dmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRTYWZlU2hhcmVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29k
IChqaGF5Z29vZEByZWFrdGl4LmNvbSkKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICogTm90ZTogVGhlIGltcGxlbWVudGF0aW9ucyBv
ZiBJbnRlcmxvY2tlZEluY3JlbWVudCBhbmQgSW50ZXJsb2NrZWREZWNyZW1lbnQgYXJlIGJhc2Vk
CisgKiBvbiBhdG9taWNfaW5jcmVtZW50IGFuZCBhdG9taWNfZXhjaGFuZ2VfYW5kX2FkZCBmcm9t
IHRoZSBCb29zdCBDKysgTGlicmFyeS4gVGhlIGxpY2Vuc2UKKyAqIGlzIHZpcnR1YWxseSBpZGVu
dGljYWwgdG8gdGhlIEFwcGxlIGxpY2Vuc2UgYWJvdmUgYnV0IGlzIGluY2x1ZGVkIGhlcmUgZm9y
IGNvbXBsZXRlbmVzcy4KKyAqCisgKiBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlIC0gVmVyc2lvbiAx
LjAgLSBBdWd1c3QgMTd0aCwgMjAwMworICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu
dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24KKyAqIG9i
dGFpbmluZyBhIGNvcHkgb2YgdGhlIHNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRh
dGlvbiBjb3ZlcmVkIGJ5CisgKiB0aGlzIGxpY2Vuc2UgKHRoZSAiU29mdHdhcmUiKSB0byB1c2Us
IHJlcHJvZHVjZSwgZGlzcGxheSwgZGlzdHJpYnV0ZSwKKyAqIGV4ZWN1dGUsIGFuZCB0cmFuc21p
dCB0aGUgU29mdHdhcmUsIGFuZCB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlCisg
KiBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCB0aGlyZC1wYXJ0aWVzIHRvIHdob20gdGhlIFNvZnR3
YXJlIGlzIGZ1cm5pc2hlZCB0bworICogZG8gc28sIGFsbCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp
bmc6CisgKiAKKyAqIFRoZSBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgU29mdHdhcmUgYW5kIHRo
aXMgZW50aXJlIHN0YXRlbWVudCwgaW5jbHVkaW5nCisgKiB0aGUgYWJvdmUgbGljZW5zZSBncmFu
dCwgdGhpcyByZXN0cmljdGlvbiBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogbXVz
dCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgaW4gd2hvbGUgb3Ig
aW4gcGFydCwgYW5kCisgKiBhbGwgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU29mdHdhcmUsIHVu
bGVzcyBzdWNoIGNvcGllcyBvciBkZXJpdmF0aXZlCisgKiB3b3JrcyBhcmUgc29sZWx5IGluIHRo
ZSBmb3JtIG9mIG1hY2hpbmUtZXhlY3V0YWJsZSBvYmplY3QgY29kZSBnZW5lcmF0ZWQgYnkKKyAq
IGEgc291cmNlIGxhbmd1YWdlIHByb2Nlc3Nvci4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBS
T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK
KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Us
IFRJVExFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVAorICogU0hBTEwgVEhFIENP
UFlSSUdIVCBIT0xERVJTIE9SIEFOWU9ORSBESVNUUklCVVRJTkcgVEhFIFNPRlRXQVJFIEJFIExJ
QUJMRQorICogRk9SIEFOWSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJ
TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERF
QUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIFRocmVhZGluZ19oCisjZGVm
aW5lIFRocmVhZGluZ19oCisKKyNpbmNsdWRlICJQbGF0Zm9ybS5oIgorCisjaWYgT1MoV0lOQ0Up
CisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCisjaWYgT1MoV0lORE9XUykgJiYgIU9T
KFdJTkNFKQorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbGlmIE9TKERBUldJTikKKyNpbmNsdWRl
IDxsaWJrZXJuL09TQXRvbWljLmg+CisjZWxpZiBPUyhBTkRST0lEKQorI2luY2x1ZGUgPGN1dGls
cy9hdG9taWMuaD4KKyNlbGlmIENPTVBJTEVSKEdDQykgJiYgIU9TKFNZTUJJQU4pCisjaWYgKF9f
R05VQ19fID4gNCkgfHwgKChfX0dOVUNfXyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPj0gMikp
CisjaW5jbHVkZSA8ZXh0L2F0b21pY2l0eS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxiaXRzL2F0b21p
Y2l0eS5oPgorI2VuZGlmCisjZW5kaWYKKworI2lmIFVTRShQVEhSRUFEUykKKyNpbmNsdWRlIDxw
dGhyZWFkLmg+CisjZWxpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiR093blB0ci5oIgordHlw
ZWRlZiBzdHJ1Y3QgX0dNdXRleCBHTXV0ZXg7Cit0eXBlZGVmIHN0cnVjdCBfR0NvbmQgR0NvbmQ7
CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgPHFnbG9iYWwuaD4KK1FUX0JF
R0lOX05BTUVTUEFDRQorY2xhc3MgUU11dGV4OworY2xhc3MgUVdhaXRDb25kaXRpb247CitRVF9F
TkRfTkFNRVNQQUNFCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisvLyBGb3IgcG9y
dGFiaWxpdHksIHdlIGRvIG5vdCB1c2UgdGhyZWFkLXNhZmUgc3RhdGljcyBuYXRpdmVseSBzdXBw
b3J0ZWQgYnkgc29tZSBjb21waWxlcnMgKGUuZy4gZ2NjKS4KKyNkZWZpbmUgQXRvbWljYWxseUlu
aXRpYWxpemVkU3RhdGljKFQsIG5hbWUpIFwKKyAgICBXVEY6OmxvY2tBdG9taWNhbGx5SW5pdGlh
bGl6ZWRTdGF0aWNNdXRleCgpOyBcCisgICAgc3RhdGljIFQgbmFtZTsgXAorICAgIFdURjo6dW5s
b2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgoKTsKKworbmFtZXNwYWNlIFdURiB7
CisKK3R5cGVkZWYgdWludDMyX3QgVGhyZWFkSWRlbnRpZmllcjsKK3R5cGVkZWYgdm9pZCogKCpU
aHJlYWRGdW5jdGlvbikodm9pZCogYXJndW1lbnQpOworCisvLyBSZXR1cm5zIDAgaWYgdGhyZWFk
IGNyZWF0aW9uIGZhaWxlZC4KKy8vIFRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIGEgbGl0ZXJhbCBz
aW5jZSBvbiBzb21lIHBsYXRmb3JtcyBpdCdzIHBhc3NlZCBpbiB0byB0aGUgdGhyZWFkLgorVGhy
ZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb24sIHZvaWQqLCBjb25zdCBj
aGFyKiB0aHJlYWROYW1lKTsKKworLy8gSW50ZXJuYWwgcGxhdGZvcm0tc3BlY2lmaWMgY3JlYXRl
VGhyZWFkIGltcGxlbWVudGF0aW9uLgorVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRl
cm5hbChUaHJlYWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworCisv
LyBDYWxsZWQgaW4gdGhlIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisvLyBIZWxwZnVs
IGZvciBwbGF0Zm9ybXMgd2hlcmUgdGhlIHRocmVhZCBuYW1lIG11c3QgYmUgc2V0IGZyb20gd2l0
aGluIHRoZSB0aHJlYWQuCit2b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29u
c3QgY2hhciogdGhyZWFkTmFtZSk7CisKK1RocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVhZCgp
OworaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIsIHZvaWQqKik7
Cit2b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyKTsKKworI2lmIFVTRShQVEhSRUFE
UykKK3R5cGVkZWYgcHRocmVhZF9tdXRleF90IFBsYXRmb3JtTXV0ZXg7CisjaWYgSEFWRShQVEhS
RUFEX1JXTE9DSykKK3R5cGVkZWYgcHRocmVhZF9yd2xvY2tfdCBQbGF0Zm9ybVJlYWRXcml0ZUxv
Y2s7CisjZWxzZQordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybVJlYWRXcml0ZUxvY2s7CisjZW5kaWYK
K3R5cGVkZWYgcHRocmVhZF9jb25kX3QgUGxhdGZvcm1Db25kaXRpb247CisjZWxpZiBQTEFURk9S
TShHVEspCit0eXBlZGVmIEdPd25QdHI8R011dGV4PiBQbGF0Zm9ybU11dGV4OwordHlwZWRlZiB2
b2lkKiBQbGF0Zm9ybVJlYWRXcml0ZUxvY2s7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCit0eXBlZGVm
IEdPd25QdHI8R0NvbmQ+IFBsYXRmb3JtQ29uZGl0aW9uOworI2VsaWYgUExBVEZPUk0oUVQpCit0
eXBlZGVmIFFUX1BSRVBFTkRfTkFNRVNQQUNFKFFNdXRleCkqIFBsYXRmb3JtTXV0ZXg7Cit0eXBl
ZGVmIHZvaWQqIFBsYXRmb3JtUmVhZFdyaXRlTG9jazsgLy8gRklYTUU6IEltcGxlbWVudC4KK3R5
cGVkZWYgUVRfUFJFUEVORF9OQU1FU1BBQ0UoUVdhaXRDb25kaXRpb24pKiBQbGF0Zm9ybUNvbmRp
dGlvbjsKKyNlbGlmIE9TKFdJTkRPV1MpCitzdHJ1Y3QgUGxhdGZvcm1NdXRleCB7CisgICAgQ1JJ
VElDQUxfU0VDVElPTiBtX2ludGVybmFsTXV0ZXg7CisgICAgc2l6ZV90IG1fcmVjdXJzaW9uQ291
bnQ7Cit9OwordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybVJlYWRXcml0ZUxvY2s7IC8vIEZJWE1FOiBJ
bXBsZW1lbnQuCitzdHJ1Y3QgUGxhdGZvcm1Db25kaXRpb24geworICAgIHNpemVfdCBtX3dhaXRl
cnNHb25lOworICAgIHNpemVfdCBtX3dhaXRlcnNCbG9ja2VkOworICAgIHNpemVfdCBtX3dhaXRl
cnNUb1VuYmxvY2s7IAorICAgIEhBTkRMRSBtX2Jsb2NrTG9jazsKKyAgICBIQU5ETEUgbV9ibG9j
a1F1ZXVlOworICAgIEhBTkRMRSBtX3VuYmxvY2tMb2NrOworCisgICAgYm9vbCB0aW1lZFdhaXQo
UGxhdGZvcm1NdXRleCYsIERXT1JEIGR1cmF0aW9uTWlsbGlzZWNvbmRzKTsKKyAgICB2b2lkIHNp
Z25hbChib29sIHVuYmxvY2tBbGwpOworfTsKKyNlbHNlCit0eXBlZGVmIHZvaWQqIFBsYXRmb3Jt
TXV0ZXg7Cit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtUmVhZFdyaXRlTG9jazsKK3R5cGVkZWYgdm9p
ZCogUGxhdGZvcm1Db25kaXRpb247CisjZW5kaWYKKyAgICAKK2NsYXNzIE11dGV4IDogcHVibGlj
IE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBNdXRleCgpOworICAgIH5NdXRleCgpOworCisg
ICAgdm9pZCBsb2NrKCk7CisgICAgYm9vbCB0cnlMb2NrKCk7CisgICAgdm9pZCB1bmxvY2soKTsK
KworcHVibGljOgorICAgIFBsYXRmb3JtTXV0ZXgmIGltcGwoKSB7IHJldHVybiBtX211dGV4OyB9
Citwcml2YXRlOgorICAgIFBsYXRmb3JtTXV0ZXggbV9tdXRleDsKK307CisKK3R5cGVkZWYgTG9j
a2VyPE11dGV4PiBNdXRleExvY2tlcjsKKworY2xhc3MgUmVhZFdyaXRlTG9jayA6IHB1YmxpYyBO
b25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgUmVhZFdyaXRlTG9jaygpOworICAgIH5SZWFkV3Jp
dGVMb2NrKCk7CisKKyAgICB2b2lkIHJlYWRMb2NrKCk7CisgICAgYm9vbCB0cnlSZWFkTG9jaygp
OworCisgICAgdm9pZCB3cml0ZUxvY2soKTsKKyAgICBib29sIHRyeVdyaXRlTG9jaygpOworICAg
IAorICAgIHZvaWQgdW5sb2NrKCk7CisKK3ByaXZhdGU6CisgICAgUGxhdGZvcm1SZWFkV3JpdGVM
b2NrIG1fcmVhZFdyaXRlTG9jazsKK307CisKK2NsYXNzIFRocmVhZENvbmRpdGlvbiA6IHB1Ymxp
YyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgVGhyZWFkQ29uZGl0aW9uKCk7CisgICAgflRo
cmVhZENvbmRpdGlvbigpOworICAgIAorICAgIHZvaWQgd2FpdChNdXRleCYgbXV0ZXgpOworICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29uZGl0aW9uIHdhcyBzaWduYWxlZCBiZWZvcmUgYWJz
b2x1dGVUaW1lLCBmYWxzZSBpZiB0aGUgYWJzb2x1dGVUaW1lIHdhcyByZWFjaGVkIG9yIGlzIGlu
IHRoZSBwYXN0LgorICAgIC8vIFRoZSBhYnNvbHV0ZVRpbWUgaXMgaW4gc2Vjb25kcywgc3RhcnRp
bmcgb24gSmFudWFyeSAxLCAxOTcwLiBUaGUgdGltZSBpcyBhc3N1bWVkIHRvIHVzZSB0aGUgc2Ft
ZSB0aW1lIHpvbmUgYXMgV1RGOjpjdXJyZW50VGltZSgpLgorICAgIGJvb2wgdGltZWRXYWl0KE11
dGV4JiwgZG91YmxlIGFic29sdXRlVGltZSk7CisgICAgdm9pZCBzaWduYWwoKTsKKyAgICB2b2lk
IGJyb2FkY2FzdCgpOworICAgIAorcHJpdmF0ZToKKyAgICBQbGF0Zm9ybUNvbmRpdGlvbiBtX2Nv
bmRpdGlvbjsKK307CisKKyNpZiBPUyhXSU5ET1dTKQorI2RlZmluZSBXVEZfVVNFX0xPQ0tGUkVF
X1RIUkVBRFNBRkVTSEFSRUQgMQorCisjaWYgQ09NUElMRVIoTUlOR1cpIHx8IENPTVBJTEVSKE1T
VkM3KSB8fCBPUyhXSU5DRSkKK2lubGluZSBpbnQgYXRvbWljSW5jcmVtZW50KGludCogYWRkZW5k
KSB7IHJldHVybiBJbnRlcmxvY2tlZEluY3JlbWVudChyZWludGVycHJldF9jYXN0PGxvbmcqPihh
ZGRlbmQpKTsgfQoraW5saW5lIGludCBhdG9taWNEZWNyZW1lbnQoaW50KiBhZGRlbmQpIHsgcmV0
dXJuIEludGVybG9ja2VkRGVjcmVtZW50KHJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyo+KGFkZGVuZCkp
OyB9CisjZWxzZQoraW5saW5lIGludCBhdG9taWNJbmNyZW1lbnQoaW50IHZvbGF0aWxlKiBhZGRl
bmQpIHsgcmV0dXJuIEludGVybG9ja2VkSW5jcmVtZW50KHJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyB2
b2xhdGlsZSo+KGFkZGVuZCkpOyB9CitpbmxpbmUgaW50IGF0b21pY0RlY3JlbWVudChpbnQgdm9s
YXRpbGUqIGFkZGVuZCkgeyByZXR1cm4gSW50ZXJsb2NrZWREZWNyZW1lbnQocmVpbnRlcnByZXRf
Y2FzdDxsb25nIHZvbGF0aWxlKj4oYWRkZW5kKSk7IH0KKyNlbmRpZgorCisjZWxpZiBPUyhEQVJX
SU4pCisjZGVmaW5lIFdURl9VU0VfTE9DS0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCAxCisKK2lubGlu
ZSBpbnQgYXRvbWljSW5jcmVtZW50KGludCB2b2xhdGlsZSogYWRkZW5kKSB7IHJldHVybiBPU0F0
b21pY0luY3JlbWVudDMyQmFycmllcihjb25zdF9jYXN0PGludCo+KGFkZGVuZCkpOyB9Citpbmxp
bmUgaW50IGF0b21pY0RlY3JlbWVudChpbnQgdm9sYXRpbGUqIGFkZGVuZCkgeyByZXR1cm4gT1NB
dG9taWNEZWNyZW1lbnQzMkJhcnJpZXIoY29uc3RfY2FzdDxpbnQqPihhZGRlbmQpKTsgfQorCisj
ZWxpZiBPUyhBTkRST0lEKQorCitpbmxpbmUgaW50IGF0b21pY0luY3JlbWVudChpbnQgdm9sYXRp
bGUqIGFkZGVuZCkgeyByZXR1cm4gYW5kcm9pZF9hdG9taWNfaW5jKGFkZGVuZCk7IH0KK2lubGlu
ZSBpbnQgYXRvbWljRGVjcmVtZW50KGludCB2b2xhdGlsZSogYWRkZW5kKSB7IHJldHVybiBhbmRy
b2lkX2F0b21pY19kZWMoYWRkZW5kKTsgfQorCisjZWxpZiBDT01QSUxFUihHQ0MpICYmICFDUFUo
U1BBUkM2NCkgJiYgIU9TKFNZTUJJQU4pIC8vIHNpemVvZihfQXRvbWljX3dvcmQpICE9IHNpemVv
ZihpbnQpIG9uIHNwYXJjNjQgZ2NjCisjZGVmaW5lIFdURl9VU0VfTE9DS0ZSRUVfVEhSRUFEU0FG
RVNIQVJFRCAxCisKK2lubGluZSBpbnQgYXRvbWljSW5jcmVtZW50KGludCB2b2xhdGlsZSogYWRk
ZW5kKSB7IHJldHVybiBfX2dudV9jeHg6Ol9fZXhjaGFuZ2VfYW5kX2FkZChhZGRlbmQsIDEpICsg
MTsgfQoraW5saW5lIGludCBhdG9taWNEZWNyZW1lbnQoaW50IHZvbGF0aWxlKiBhZGRlbmQpIHsg
cmV0dXJuIF9fZ251X2N4eDo6X19leGNoYW5nZV9hbmRfYWRkKGFkZGVuZCwgLTEpIC0gMTsgfQor
CisjZW5kaWYKKworY2xhc3MgVGhyZWFkU2FmZVNoYXJlZEJhc2UgOiBwdWJsaWMgTm9uY29weWFi
bGUgeworcHVibGljOgorICAgIFRocmVhZFNhZmVTaGFyZWRCYXNlKGludCBpbml0aWFsUmVmQ291
bnQgPSAxKQorICAgICAgICA6IG1fcmVmQ291bnQoaW5pdGlhbFJlZkNvdW50KQorICAgIHsKKyAg
ICB9CisKKyAgICB2b2lkIHJlZigpCisgICAgeworI2lmIFVTRShMT0NLRlJFRV9USFJFQURTQUZF
U0hBUkVEKQorICAgICAgICBhdG9taWNJbmNyZW1lbnQoJm1fcmVmQ291bnQpOworI2Vsc2UKKyAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICArK21fcmVmQ291bnQ7
CisjZW5kaWYKKyAgICB9CisKKyAgICBib29sIGhhc09uZVJlZigpCisgICAgeworICAgICAgICBy
ZXR1cm4gcmVmQ291bnQoKSA9PSAxOworICAgIH0KKworICAgIGludCByZWZDb3VudCgpIGNvbnN0
CisgICAgeworI2lmICFVU0UoTE9DS0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCkKKyAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworI2VuZGlmCisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQgY29uc3Qgdm9sYXRpbGUgJj4obV9yZWZDb3VudCk7CisgICAgfQorCitwcm90ZWN0
ZWQ6CisgICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBwb2ludGVyIHNob3VsZCBiZSBmcmVlZCBv
ciBub3QuCisgICAgYm9vbCBkZXJlZkJhc2UoKQorICAgIHsKKyNpZiBVU0UoTE9DS0ZSRUVfVEhS
RUFEU0FGRVNIQVJFRCkKKyAgICAgICAgaWYgKGF0b21pY0RlY3JlbWVudCgmbV9yZWZDb3VudCkg
PD0gMCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICAgICAgaW50IHJlZkNv
dW50OworICAgICAgICB7CisgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7
CisgICAgICAgICAgICAtLW1fcmVmQ291bnQ7CisgICAgICAgICAgICByZWZDb3VudCA9IG1fcmVm
Q291bnQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlZkNvdW50IDw9IDApCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCitw
cml2YXRlOgorICAgIHRlbXBsYXRlPGNsYXNzIFQ+CisgICAgZnJpZW5kIGNsYXNzIENyb3NzVGhy
ZWFkUmVmQ291bnRlZDsKKworICAgIGludCBtX3JlZkNvdW50OworI2lmICFVU0UoTE9DS0ZSRUVf
VEhSRUFEU0FGRVNIQVJFRCkKKyAgICBtdXRhYmxlIE11dGV4IG1fbXV0ZXg7CisjZW5kaWYKK307
CisKK3RlbXBsYXRlPGNsYXNzIFQ+IGNsYXNzIFRocmVhZFNhZmVTaGFyZWQgOiBwdWJsaWMgVGhy
ZWFkU2FmZVNoYXJlZEJhc2UgeworcHVibGljOgorICAgIFRocmVhZFNhZmVTaGFyZWQoaW50IGlu
aXRpYWxSZWZDb3VudCA9IDEpCisgICAgICAgIDogVGhyZWFkU2FmZVNoYXJlZEJhc2UoaW5pdGlh
bFJlZkNvdW50KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGRlcmVmKCkKKyAgICB7CisgICAg
ICAgIGlmIChkZXJlZkJhc2UoKSkKKyAgICAgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxUKj4o
dGhpcyk7CisgICAgfQorfTsKKworLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9t
IHRoZSBtYWluIHRocmVhZC4gSXQgaXMgc2FmZSB0byBjYWxsIGl0IHJlcGVhdGVkbHkuCisvLyBE
YXJ3aW4gaXMgYW4gZXhjZXB0aW9uIHRvIHRoaXMgcnVsZTogaXQgaXMgT0sgdG8gY2FsbCBpdCBm
cm9tIGFueSB0aHJlYWQsIHRoZSBvbmx5IHJlcXVpcmVtZW50IGlzIHRoYXQgdGhlIGNhbGxzIGFy
ZSBub3QgcmVlbnRyYW50Lgordm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCk7CisKK3ZvaWQgbG9j
a0F0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCk7Cit2b2lkIHVubG9ja0F0b21pY2Fs
bHlJbml0aWFsaXplZFN0YXRpY011dGV4KCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2lu
ZyBXVEY6Ok11dGV4OwordXNpbmcgV1RGOjpNdXRleExvY2tlcjsKK3VzaW5nIFdURjo6VGhyZWFk
Q29uZGl0aW9uOwordXNpbmcgV1RGOjpUaHJlYWRJZGVudGlmaWVyOwordXNpbmcgV1RGOjpUaHJl
YWRTYWZlU2hhcmVkOworCisjaWYgVVNFKExPQ0tGUkVFX1RIUkVBRFNBRkVTSEFSRUQpCit1c2lu
ZyBXVEY6OmF0b21pY0RlY3JlbWVudDsKK3VzaW5nIFdURjo6YXRvbWljSW5jcmVtZW50OworI2Vu
ZGlmCisKK3VzaW5nIFdURjo6Y3JlYXRlVGhyZWFkOwordXNpbmcgV1RGOjpjdXJyZW50VGhyZWFk
OwordXNpbmcgV1RGOjpkZXRhY2hUaHJlYWQ7Cit1c2luZyBXVEY6OndhaXRGb3JUaHJlYWRDb21w
bGV0aW9uOworCisjZW5kaWYgLy8gVGhyZWFkaW5nX2gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0
Zi9UaHJlYWRTYWZlU2hhcmVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL1Ro
cmVhZFNhZmVTaGFyZWQuaAkocmV2aXNpb24gNTgxNzgpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYv
VGhyZWFkU2FmZVNoYXJlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIChqaGF5Z29v
ZEByZWFrdGl4LmNvbSkKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTU2LDE5NyArNTYsMjEgQEAKICAq
IERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCi0jaWZuZGVmIFRocmVhZGluZ19oCi0j
ZGVmaW5lIFRocmVhZGluZ19oCisjaWZuZGVmIFRocmVhZFNhZmVTaGFyZWRfaAorI2RlZmluZSBU
aHJlYWRTYWZlU2hhcmVkX2gKIAogI2luY2x1ZGUgIlBsYXRmb3JtLmgiCiAKLSNpZiBPUyhXSU5D
RSkKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0jaW5jbHVkZSA8d3RmL0xvY2tlci5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
QXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCi0jaWYgT1MoV0lORE9X
UykgJiYgIU9TKFdJTkNFKQorI2lmIE9TKFdJTkRPV1MpCiAjaW5jbHVkZSA8d2luZG93cy5oPgot
I2VsaWYgT1MoREFSV0lOKQotI2luY2x1ZGUgPGxpYmtlcm4vT1NBdG9taWMuaD4KLSNlbGlmIE9T
KEFORFJPSUQpCi0jaW5jbHVkZSA8Y3V0aWxzL2F0b21pYy5oPgotI2VsaWYgQ09NUElMRVIoR0ND
KSAmJiAhT1MoU1lNQklBTikKLSNpZiAoX19HTlVDX18gPiA0KSB8fCAoKF9fR05VQ19fID09IDQp
ICYmIChfX0dOVUNfTUlOT1JfXyA+PSAyKSkKLSNpbmNsdWRlIDxleHQvYXRvbWljaXR5Lmg+Ci0j
ZWxzZQotI2luY2x1ZGUgPGJpdHMvYXRvbWljaXR5Lmg+Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYg
VVNFKFBUSFJFQURTKQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNlbGlmIFBMQVRGT1JNKEdUSykK
LSNpbmNsdWRlICJHT3duUHRyLmgiCi10eXBlZGVmIHN0cnVjdCBfR011dGV4IEdNdXRleDsKLXR5
cGVkZWYgc3RydWN0IF9HQ29uZCBHQ29uZDsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oUVQpCi0j
aW5jbHVkZSA8cWdsb2JhbC5oPgotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRTXV0ZXg7Ci1j
bGFzcyBRV2FpdENvbmRpdGlvbjsKLVFUX0VORF9OQU1FU1BBQ0UKLSNlbmRpZgotCi0jaW5jbHVk
ZSA8c3RkaW50Lmg+Ci0KLS8vIEZvciBwb3J0YWJpbGl0eSwgd2UgZG8gbm90IHVzZSB0aHJlYWQt
c2FmZSBzdGF0aWNzIG5hdGl2ZWx5IHN1cHBvcnRlZCBieSBzb21lIGNvbXBpbGVycyAoZS5nLiBn
Y2MpLgotI2RlZmluZSBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMoVCwgbmFtZSkgXAotICAg
IFdURjo6bG9ja0F0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCk7IFwKLSAgICBzdGF0
aWMgVCBuYW1lOyBcCi0gICAgV1RGOjp1bmxvY2tBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNN
dXRleCgpOwotCiBuYW1lc3BhY2UgV1RGIHsKIAotdHlwZWRlZiB1aW50MzJfdCBUaHJlYWRJZGVu
dGlmaWVyOwotdHlwZWRlZiB2b2lkKiAoKlRocmVhZEZ1bmN0aW9uKSh2b2lkKiBhcmd1bWVudCk7
Ci0KLS8vIFJldHVybnMgMCBpZiB0aHJlYWQgY3JlYXRpb24gZmFpbGVkLgotLy8gVGhlIHRocmVh
ZCBuYW1lIG11c3QgYmUgYSBsaXRlcmFsIHNpbmNlIG9uIHNvbWUgcGxhdGZvcm1zIGl0J3MgcGFz
c2VkIGluIHRvIHRoZSB0aHJlYWQuCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJl
YWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwotCi0vLyBJbnRlcm5h
bCBwbGF0Zm9ybS1zcGVjaWZpYyBjcmVhdGVUaHJlYWQgaW1wbGVtZW50YXRpb24uCi1UaHJlYWRJ
ZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29u
c3QgY2hhciogdGhyZWFkTmFtZSk7Ci0KLS8vIENhbGxlZCBpbiB0aGUgdGhyZWFkIGR1cmluZyBp
bml0aWFsaXphdGlvbi4KLS8vIEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3aGVyZSB0aGUgdGhyZWFk
IG5hbWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4KLXZvaWQgaW5pdGlhbGl6
ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKLQotVGhyZWFk
SWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCk7Ci1pbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24o
VGhyZWFkSWRlbnRpZmllciwgdm9pZCoqKTsKLXZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50
aWZpZXIpOwotCi0jaWYgVVNFKFBUSFJFQURTKQotdHlwZWRlZiBwdGhyZWFkX211dGV4X3QgUGxh
dGZvcm1NdXRleDsKLSNpZiBIQVZFKFBUSFJFQURfUldMT0NLKQotdHlwZWRlZiBwdGhyZWFkX3J3
bG9ja190IFBsYXRmb3JtUmVhZFdyaXRlTG9jazsKLSNlbHNlCi10eXBlZGVmIHZvaWQqIFBsYXRm
b3JtUmVhZFdyaXRlTG9jazsKLSNlbmRpZgotdHlwZWRlZiBwdGhyZWFkX2NvbmRfdCBQbGF0Zm9y
bUNvbmRpdGlvbjsKLSNlbGlmIFBMQVRGT1JNKEdUSykKLXR5cGVkZWYgR093blB0cjxHTXV0ZXg+
IFBsYXRmb3JtTXV0ZXg7Ci10eXBlZGVmIHZvaWQqIFBsYXRmb3JtUmVhZFdyaXRlTG9jazsgLy8g
RklYTUU6IEltcGxlbWVudC4KLXR5cGVkZWYgR093blB0cjxHQ29uZD4gUGxhdGZvcm1Db25kaXRp
b247Ci0jZWxpZiBQTEFURk9STShRVCkKLXR5cGVkZWYgUVRfUFJFUEVORF9OQU1FU1BBQ0UoUU11
dGV4KSogUGxhdGZvcm1NdXRleDsKLXR5cGVkZWYgdm9pZCogUGxhdGZvcm1SZWFkV3JpdGVMb2Nr
OyAvLyBGSVhNRTogSW1wbGVtZW50LgotdHlwZWRlZiBRVF9QUkVQRU5EX05BTUVTUEFDRShRV2Fp
dENvbmRpdGlvbikqIFBsYXRmb3JtQ29uZGl0aW9uOwotI2VsaWYgT1MoV0lORE9XUykKLXN0cnVj
dCBQbGF0Zm9ybU11dGV4IHsKLSAgICBDUklUSUNBTF9TRUNUSU9OIG1faW50ZXJuYWxNdXRleDsK
LSAgICBzaXplX3QgbV9yZWN1cnNpb25Db3VudDsKLX07Ci10eXBlZGVmIHZvaWQqIFBsYXRmb3Jt
UmVhZFdyaXRlTG9jazsgLy8gRklYTUU6IEltcGxlbWVudC4KLXN0cnVjdCBQbGF0Zm9ybUNvbmRp
dGlvbiB7Ci0gICAgc2l6ZV90IG1fd2FpdGVyc0dvbmU7Ci0gICAgc2l6ZV90IG1fd2FpdGVyc0Js
b2NrZWQ7Ci0gICAgc2l6ZV90IG1fd2FpdGVyc1RvVW5ibG9jazsgCi0gICAgSEFORExFIG1fYmxv
Y2tMb2NrOwotICAgIEhBTkRMRSBtX2Jsb2NrUXVldWU7Ci0gICAgSEFORExFIG1fdW5ibG9ja0xv
Y2s7Ci0KLSAgICBib29sIHRpbWVkV2FpdChQbGF0Zm9ybU11dGV4JiwgRFdPUkQgZHVyYXRpb25N
aWxsaXNlY29uZHMpOwotICAgIHZvaWQgc2lnbmFsKGJvb2wgdW5ibG9ja0FsbCk7Ci19OwotI2Vs
c2UKLXR5cGVkZWYgdm9pZCogUGxhdGZvcm1NdXRleDsKLXR5cGVkZWYgdm9pZCogUGxhdGZvcm1S
ZWFkV3JpdGVMb2NrOwotdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUNvbmRpdGlvbjsKLSNlbmRpZgot
ICAgIAotY2xhc3MgTXV0ZXggOiBwdWJsaWMgTm9uY29weWFibGUgewotcHVibGljOgotICAgIE11
dGV4KCk7Ci0gICAgfk11dGV4KCk7Ci0KLSAgICB2b2lkIGxvY2soKTsKLSAgICBib29sIHRyeUxv
Y2soKTsKLSAgICB2b2lkIHVubG9jaygpOwotCi1wdWJsaWM6Ci0gICAgUGxhdGZvcm1NdXRleCYg
aW1wbCgpIHsgcmV0dXJuIG1fbXV0ZXg7IH0KLXByaXZhdGU6Ci0gICAgUGxhdGZvcm1NdXRleCBt
X211dGV4OwotfTsKLQotdHlwZWRlZiBMb2NrZXI8TXV0ZXg+IE11dGV4TG9ja2VyOwotCi1jbGFz
cyBSZWFkV3JpdGVMb2NrIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoKLSAgICBSZWFk
V3JpdGVMb2NrKCk7Ci0gICAgflJlYWRXcml0ZUxvY2soKTsKLQotICAgIHZvaWQgcmVhZExvY2so
KTsKLSAgICBib29sIHRyeVJlYWRMb2NrKCk7Ci0KLSAgICB2b2lkIHdyaXRlTG9jaygpOwotICAg
IGJvb2wgdHJ5V3JpdGVMb2NrKCk7Ci0gICAgCi0gICAgdm9pZCB1bmxvY2soKTsKLQotcHJpdmF0
ZToKLSAgICBQbGF0Zm9ybVJlYWRXcml0ZUxvY2sgbV9yZWFkV3JpdGVMb2NrOwotfTsKLQotY2xh
c3MgVGhyZWFkQ29uZGl0aW9uIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoKLSAgICBU
aHJlYWRDb25kaXRpb24oKTsKLSAgICB+VGhyZWFkQ29uZGl0aW9uKCk7Ci0gICAgCi0gICAgdm9p
ZCB3YWl0KE11dGV4JiBtdXRleCk7Ci0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb25kaXRp
b24gd2FzIHNpZ25hbGVkIGJlZm9yZSBhYnNvbHV0ZVRpbWUsIGZhbHNlIGlmIHRoZSBhYnNvbHV0
ZVRpbWUgd2FzIHJlYWNoZWQgb3IgaXMgaW4gdGhlIHBhc3QuCi0gICAgLy8gVGhlIGFic29sdXRl
VGltZSBpcyBpbiBzZWNvbmRzLCBzdGFydGluZyBvbiBKYW51YXJ5IDEsIDE5NzAuIFRoZSB0aW1l
IGlzIGFzc3VtZWQgdG8gdXNlIHRoZSBzYW1lIHRpbWUgem9uZSBhcyBXVEY6OmN1cnJlbnRUaW1l
KCkuCi0gICAgYm9vbCB0aW1lZFdhaXQoTXV0ZXgmLCBkb3VibGUgYWJzb2x1dGVUaW1lKTsKLSAg
ICB2b2lkIHNpZ25hbCgpOwotICAgIHZvaWQgYnJvYWRjYXN0KCk7Ci0gICAgCi1wcml2YXRlOgot
ICAgIFBsYXRmb3JtQ29uZGl0aW9uIG1fY29uZGl0aW9uOwotfTsKLQotI2lmIE9TKFdJTkRPV1Mp
Ci0jZGVmaW5lIFdURl9VU0VfTE9DS0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCAxCi0KLSNpZiBDT01Q
SUxFUihNSU5HVykgfHwgQ09NUElMRVIoTVNWQzcpIHx8IE9TKFdJTkNFKQotaW5saW5lIGludCBh
dG9taWNJbmNyZW1lbnQoaW50KiBhZGRlbmQpIHsgcmV0dXJuIEludGVybG9ja2VkSW5jcmVtZW50
KHJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyo+KGFkZGVuZCkpOyB9Ci1pbmxpbmUgaW50IGF0b21pY0Rl
Y3JlbWVudChpbnQqIGFkZGVuZCkgeyByZXR1cm4gSW50ZXJsb2NrZWREZWNyZW1lbnQocmVpbnRl
cnByZXRfY2FzdDxsb25nKj4oYWRkZW5kKSk7IH0KLSNlbHNlCi1pbmxpbmUgaW50IGF0b21pY0lu
Y3JlbWVudChpbnQgdm9sYXRpbGUqIGFkZGVuZCkgeyByZXR1cm4gSW50ZXJsb2NrZWRJbmNyZW1l
bnQocmVpbnRlcnByZXRfY2FzdDxsb25nIHZvbGF0aWxlKj4oYWRkZW5kKSk7IH0KLWlubGluZSBp
bnQgYXRvbWljRGVjcmVtZW50KGludCB2b2xhdGlsZSogYWRkZW5kKSB7IHJldHVybiBJbnRlcmxv
Y2tlZERlY3JlbWVudChyZWludGVycHJldF9jYXN0PGxvbmcgdm9sYXRpbGUqPihhZGRlbmQpKTsg
fQotI2VuZGlmCi0KLSNlbGlmIE9TKERBUldJTikKLSNkZWZpbmUgV1RGX1VTRV9MT0NLRlJFRV9U
SFJFQURTQUZFU0hBUkVEIDEKLQotaW5saW5lIGludCBhdG9taWNJbmNyZW1lbnQoaW50IHZvbGF0
aWxlKiBhZGRlbmQpIHsgcmV0dXJuIE9TQXRvbWljSW5jcmVtZW50MzJCYXJyaWVyKGNvbnN0X2Nh
c3Q8aW50Kj4oYWRkZW5kKSk7IH0KLWlubGluZSBpbnQgYXRvbWljRGVjcmVtZW50KGludCB2b2xh
dGlsZSogYWRkZW5kKSB7IHJldHVybiBPU0F0b21pY0RlY3JlbWVudDMyQmFycmllcihjb25zdF9j
YXN0PGludCo+KGFkZGVuZCkpOyB9Ci0KLSNlbGlmIE9TKEFORFJPSUQpCi0KLWlubGluZSBpbnQg
YXRvbWljSW5jcmVtZW50KGludCB2b2xhdGlsZSogYWRkZW5kKSB7IHJldHVybiBhbmRyb2lkX2F0
b21pY19pbmMoYWRkZW5kKTsgfQotaW5saW5lIGludCBhdG9taWNEZWNyZW1lbnQoaW50IHZvbGF0
aWxlKiBhZGRlbmQpIHsgcmV0dXJuIGFuZHJvaWRfYXRvbWljX2RlYyhhZGRlbmQpOyB9Ci0KLSNl
bGlmIENPTVBJTEVSKEdDQykgJiYgIUNQVShTUEFSQzY0KSAmJiAhT1MoU1lNQklBTikgLy8gc2l6
ZW9mKF9BdG9taWNfd29yZCkgIT0gc2l6ZW9mKGludCkgb24gc3BhcmM2NCBnY2MKLSNkZWZpbmUg
V1RGX1VTRV9MT0NLRlJFRV9USFJFQURTQUZFU0hBUkVEIDEKLQotaW5saW5lIGludCBhdG9taWNJ
bmNyZW1lbnQoaW50IHZvbGF0aWxlKiBhZGRlbmQpIHsgcmV0dXJuIF9fZ251X2N4eDo6X19leGNo
YW5nZV9hbmRfYWRkKGFkZGVuZCwgMSkgKyAxOyB9Ci1pbmxpbmUgaW50IGF0b21pY0RlY3JlbWVu
dChpbnQgdm9sYXRpbGUqIGFkZGVuZCkgeyByZXR1cm4gX19nbnVfY3h4OjpfX2V4Y2hhbmdlX2Fu
ZF9hZGQoYWRkZW5kLCAtMSkgLSAxOyB9Ci0KLSNlbmRpZgotCiBjbGFzcyBUaHJlYWRTYWZlU2hh
cmVkQmFzZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgVGhyZWFkU2FmZVNo
YXJlZEJhc2UoaW50IGluaXRpYWxSZWZDb3VudCA9IDEpCkBAIC0zMjEsMjkgKzE0NSw4IEBAIHB1
YmxpYzoKICAgICB9CiB9OwogCi0vLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20g
dGhlIG1haW4gdGhyZWFkLiBJdCBpcyBzYWZlIHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KLS8vIERh
cndpbiBpcyBhbiBleGNlcHRpb24gdG8gdGhpcyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0IGZy
b20gYW55IHRocmVhZCwgdGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMgdGhhdCB0aGUgY2FsbHMgYXJl
IG5vdCByZWVudHJhbnQuCi12b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKTsKLQotdm9pZCBsb2Nr
QXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgoKTsKLXZvaWQgdW5sb2NrQXRvbWljYWxs
eUluaXRpYWxpemVkU3RhdGljTXV0ZXgoKTsKLQogfSAvLyBuYW1lc3BhY2UgV1RGCiAKLXVzaW5n
IFdURjo6TXV0ZXg7Ci11c2luZyBXVEY6Ok11dGV4TG9ja2VyOwotdXNpbmcgV1RGOjpUaHJlYWRD
b25kaXRpb247Ci11c2luZyBXVEY6OlRocmVhZElkZW50aWZpZXI7CiB1c2luZyBXVEY6OlRocmVh
ZFNhZmVTaGFyZWQ7CiAKLSNpZiBVU0UoTE9DS0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCkKLXVzaW5n
IFdURjo6YXRvbWljRGVjcmVtZW50OwotdXNpbmcgV1RGOjphdG9taWNJbmNyZW1lbnQ7Ci0jZW5k
aWYKLQotdXNpbmcgV1RGOjpjcmVhdGVUaHJlYWQ7Ci11c2luZyBXVEY6OmN1cnJlbnRUaHJlYWQ7
Ci11c2luZyBXVEY6OmRldGFjaFRocmVhZDsKLXVzaW5nIFdURjo6d2FpdEZvclRocmVhZENvbXBs
ZXRpb247Ci0KLSNlbmRpZiAvLyBUaHJlYWRpbmdfaAorI2VuZGlmIC8vIFRocmVhZFNhZmVTaGFy
ZWRfaApJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmcuaAkocmV2aXNpb24gNTgxNzkpCisrKyBKYXZh
U2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2Qg
KGpoYXlnb29kQHJlYWt0aXguY29tKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNjEsNDYgKzYxLDE0
IEBACiAKICNpbmNsdWRlICJQbGF0Zm9ybS5oIgogCi0jaWYgT1MoV0lOQ0UpCi0jaW5jbHVkZSA8
d2luZG93cy5oPgotI2VuZGlmCi0KKyNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0xv
Y2tlci5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+Ci0KLSNpZiBPUyhXSU5ET1dTKSAmJiAhT1MoV0lOQ0UpCi0jaW5jbHVkZSA8d2lu
ZG93cy5oPgotI2VsaWYgT1MoREFSV0lOKQotI2luY2x1ZGUgPGxpYmtlcm4vT1NBdG9taWMuaD4K
LSNlbGlmIE9TKEFORFJPSUQpCi0jaW5jbHVkZSA8Y3V0aWxzL2F0b21pYy5oPgotI2VsaWYgQ09N
UElMRVIoR0NDKSAmJiAhT1MoU1lNQklBTikKLSNpZiAoX19HTlVDX18gPiA0KSB8fCAoKF9fR05V
Q19fID09IDQpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAyKSkKLSNpbmNsdWRlIDxleHQvYXRvbWlj
aXR5Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPGJpdHMvYXRvbWljaXR5Lmg+Ci0jZW5kaWYKLSNlbmRp
ZgotCi0jaWYgVVNFKFBUSFJFQURTKQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNlbGlmIFBMQVRG
T1JNKEdUSykKLSNpbmNsdWRlICJHT3duUHRyLmgiCi10eXBlZGVmIHN0cnVjdCBfR011dGV4IEdN
dXRleDsKLXR5cGVkZWYgc3RydWN0IF9HQ29uZCBHQ29uZDsKLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oUVQpCi0jaW5jbHVkZSA8cWdsb2JhbC5oPgotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBR
TXV0ZXg7Ci1jbGFzcyBRV2FpdENvbmRpdGlvbjsKLVFUX0VORF9OQU1FU1BBQ0UKLSNlbmRpZgot
Ci0jaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVTaGFyZWQuaD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogCiAvLyBGb3IgcG9ydGFiaWxp
dHksIHdlIGRvIG5vdCB1c2UgdGhyZWFkLXNhZmUgc3RhdGljcyBuYXRpdmVseSBzdXBwb3J0ZWQg
Ynkgc29tZSBjb21waWxlcnMgKGUuZy4gZ2NjKS4KICNkZWZpbmUgQXRvbWljYWxseUluaXRpYWxp
emVkU3RhdGljKFQsIG5hbWUpIFwKQEAgLTEyOCwxOTkgKzk2LDYgQEAgVGhyZWFkSWRlbnRpZmll
ciBjdXJyZW50VGhyZWFkKCk7CiBpbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRl
bnRpZmllciwgdm9pZCoqKTsKIHZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOwog
Ci0jaWYgVVNFKFBUSFJFQURTKQotdHlwZWRlZiBwdGhyZWFkX211dGV4X3QgUGxhdGZvcm1NdXRl
eDsKLSNpZiBIQVZFKFBUSFJFQURfUldMT0NLKQotdHlwZWRlZiBwdGhyZWFkX3J3bG9ja190IFBs
YXRmb3JtUmVhZFdyaXRlTG9jazsKLSNlbHNlCi10eXBlZGVmIHZvaWQqIFBsYXRmb3JtUmVhZFdy
aXRlTG9jazsKLSNlbmRpZgotdHlwZWRlZiBwdGhyZWFkX2NvbmRfdCBQbGF0Zm9ybUNvbmRpdGlv
bjsKLSNlbGlmIFBMQVRGT1JNKEdUSykKLXR5cGVkZWYgR093blB0cjxHTXV0ZXg+IFBsYXRmb3Jt
TXV0ZXg7Ci10eXBlZGVmIHZvaWQqIFBsYXRmb3JtUmVhZFdyaXRlTG9jazsgLy8gRklYTUU6IElt
cGxlbWVudC4KLXR5cGVkZWYgR093blB0cjxHQ29uZD4gUGxhdGZvcm1Db25kaXRpb247Ci0jZWxp
ZiBQTEFURk9STShRVCkKLXR5cGVkZWYgUVRfUFJFUEVORF9OQU1FU1BBQ0UoUU11dGV4KSogUGxh
dGZvcm1NdXRleDsKLXR5cGVkZWYgdm9pZCogUGxhdGZvcm1SZWFkV3JpdGVMb2NrOyAvLyBGSVhN
RTogSW1wbGVtZW50LgotdHlwZWRlZiBRVF9QUkVQRU5EX05BTUVTUEFDRShRV2FpdENvbmRpdGlv
bikqIFBsYXRmb3JtQ29uZGl0aW9uOwotI2VsaWYgT1MoV0lORE9XUykKLXN0cnVjdCBQbGF0Zm9y
bU11dGV4IHsKLSAgICBDUklUSUNBTF9TRUNUSU9OIG1faW50ZXJuYWxNdXRleDsKLSAgICBzaXpl
X3QgbV9yZWN1cnNpb25Db3VudDsKLX07Ci10eXBlZGVmIHZvaWQqIFBsYXRmb3JtUmVhZFdyaXRl
TG9jazsgLy8gRklYTUU6IEltcGxlbWVudC4KLXN0cnVjdCBQbGF0Zm9ybUNvbmRpdGlvbiB7Ci0g
ICAgc2l6ZV90IG1fd2FpdGVyc0dvbmU7Ci0gICAgc2l6ZV90IG1fd2FpdGVyc0Jsb2NrZWQ7Ci0g
ICAgc2l6ZV90IG1fd2FpdGVyc1RvVW5ibG9jazsgCi0gICAgSEFORExFIG1fYmxvY2tMb2NrOwot
ICAgIEhBTkRMRSBtX2Jsb2NrUXVldWU7Ci0gICAgSEFORExFIG1fdW5ibG9ja0xvY2s7Ci0KLSAg
ICBib29sIHRpbWVkV2FpdChQbGF0Zm9ybU11dGV4JiwgRFdPUkQgZHVyYXRpb25NaWxsaXNlY29u
ZHMpOwotICAgIHZvaWQgc2lnbmFsKGJvb2wgdW5ibG9ja0FsbCk7Ci19OwotI2Vsc2UKLXR5cGVk
ZWYgdm9pZCogUGxhdGZvcm1NdXRleDsKLXR5cGVkZWYgdm9pZCogUGxhdGZvcm1SZWFkV3JpdGVM
b2NrOwotdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUNvbmRpdGlvbjsKLSNlbmRpZgotICAgIAotY2xh
c3MgTXV0ZXggOiBwdWJsaWMgTm9uY29weWFibGUgewotcHVibGljOgotICAgIE11dGV4KCk7Ci0g
ICAgfk11dGV4KCk7Ci0KLSAgICB2b2lkIGxvY2soKTsKLSAgICBib29sIHRyeUxvY2soKTsKLSAg
ICB2b2lkIHVubG9jaygpOwotCi1wdWJsaWM6Ci0gICAgUGxhdGZvcm1NdXRleCYgaW1wbCgpIHsg
cmV0dXJuIG1fbXV0ZXg7IH0KLXByaXZhdGU6Ci0gICAgUGxhdGZvcm1NdXRleCBtX211dGV4Owot
fTsKLQotdHlwZWRlZiBMb2NrZXI8TXV0ZXg+IE11dGV4TG9ja2VyOwotCi1jbGFzcyBSZWFkV3Jp
dGVMb2NrIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoKLSAgICBSZWFkV3JpdGVMb2Nr
KCk7Ci0gICAgflJlYWRXcml0ZUxvY2soKTsKLQotICAgIHZvaWQgcmVhZExvY2soKTsKLSAgICBi
b29sIHRyeVJlYWRMb2NrKCk7Ci0KLSAgICB2b2lkIHdyaXRlTG9jaygpOwotICAgIGJvb2wgdHJ5
V3JpdGVMb2NrKCk7Ci0gICAgCi0gICAgdm9pZCB1bmxvY2soKTsKLQotcHJpdmF0ZToKLSAgICBQ
bGF0Zm9ybVJlYWRXcml0ZUxvY2sgbV9yZWFkV3JpdGVMb2NrOwotfTsKLQotY2xhc3MgVGhyZWFk
Q29uZGl0aW9uIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoKLSAgICBUaHJlYWRDb25k
aXRpb24oKTsKLSAgICB+VGhyZWFkQ29uZGl0aW9uKCk7Ci0gICAgCi0gICAgdm9pZCB3YWl0KE11
dGV4JiBtdXRleCk7Ci0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb25kaXRpb24gd2FzIHNp
Z25hbGVkIGJlZm9yZSBhYnNvbHV0ZVRpbWUsIGZhbHNlIGlmIHRoZSBhYnNvbHV0ZVRpbWUgd2Fz
IHJlYWNoZWQgb3IgaXMgaW4gdGhlIHBhc3QuCi0gICAgLy8gVGhlIGFic29sdXRlVGltZSBpcyBp
biBzZWNvbmRzLCBzdGFydGluZyBvbiBKYW51YXJ5IDEsIDE5NzAuIFRoZSB0aW1lIGlzIGFzc3Vt
ZWQgdG8gdXNlIHRoZSBzYW1lIHRpbWUgem9uZSBhcyBXVEY6OmN1cnJlbnRUaW1lKCkuCi0gICAg
Ym9vbCB0aW1lZFdhaXQoTXV0ZXgmLCBkb3VibGUgYWJzb2x1dGVUaW1lKTsKLSAgICB2b2lkIHNp
Z25hbCgpOwotICAgIHZvaWQgYnJvYWRjYXN0KCk7Ci0gICAgCi1wcml2YXRlOgotICAgIFBsYXRm
b3JtQ29uZGl0aW9uIG1fY29uZGl0aW9uOwotfTsKLQotI2lmIE9TKFdJTkRPV1MpCi0jZGVmaW5l
IFdURl9VU0VfTE9DS0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCAxCi0KLSNpZiBDT01QSUxFUihNSU5H
VykgfHwgQ09NUElMRVIoTVNWQzcpIHx8IE9TKFdJTkNFKQotaW5saW5lIGludCBhdG9taWNJbmNy
ZW1lbnQoaW50KiBhZGRlbmQpIHsgcmV0dXJuIEludGVybG9ja2VkSW5jcmVtZW50KHJlaW50ZXJw
cmV0X2Nhc3Q8bG9uZyo+KGFkZGVuZCkpOyB9Ci1pbmxpbmUgaW50IGF0b21pY0RlY3JlbWVudChp
bnQqIGFkZGVuZCkgeyByZXR1cm4gSW50ZXJsb2NrZWREZWNyZW1lbnQocmVpbnRlcnByZXRfY2Fz
dDxsb25nKj4oYWRkZW5kKSk7IH0KLSNlbHNlCi1pbmxpbmUgaW50IGF0b21pY0luY3JlbWVudChp
bnQgdm9sYXRpbGUqIGFkZGVuZCkgeyByZXR1cm4gSW50ZXJsb2NrZWRJbmNyZW1lbnQocmVpbnRl
cnByZXRfY2FzdDxsb25nIHZvbGF0aWxlKj4oYWRkZW5kKSk7IH0KLWlubGluZSBpbnQgYXRvbWlj
RGVjcmVtZW50KGludCB2b2xhdGlsZSogYWRkZW5kKSB7IHJldHVybiBJbnRlcmxvY2tlZERlY3Jl
bWVudChyZWludGVycHJldF9jYXN0PGxvbmcgdm9sYXRpbGUqPihhZGRlbmQpKTsgfQotI2VuZGlm
Ci0KLSNlbGlmIE9TKERBUldJTikKLSNkZWZpbmUgV1RGX1VTRV9MT0NLRlJFRV9USFJFQURTQUZF
U0hBUkVEIDEKLQotaW5saW5lIGludCBhdG9taWNJbmNyZW1lbnQoaW50IHZvbGF0aWxlKiBhZGRl
bmQpIHsgcmV0dXJuIE9TQXRvbWljSW5jcmVtZW50MzJCYXJyaWVyKGNvbnN0X2Nhc3Q8aW50Kj4o
YWRkZW5kKSk7IH0KLWlubGluZSBpbnQgYXRvbWljRGVjcmVtZW50KGludCB2b2xhdGlsZSogYWRk
ZW5kKSB7IHJldHVybiBPU0F0b21pY0RlY3JlbWVudDMyQmFycmllcihjb25zdF9jYXN0PGludCo+
KGFkZGVuZCkpOyB9Ci0KLSNlbGlmIE9TKEFORFJPSUQpCi0KLWlubGluZSBpbnQgYXRvbWljSW5j
cmVtZW50KGludCB2b2xhdGlsZSogYWRkZW5kKSB7IHJldHVybiBhbmRyb2lkX2F0b21pY19pbmMo
YWRkZW5kKTsgfQotaW5saW5lIGludCBhdG9taWNEZWNyZW1lbnQoaW50IHZvbGF0aWxlKiBhZGRl
bmQpIHsgcmV0dXJuIGFuZHJvaWRfYXRvbWljX2RlYyhhZGRlbmQpOyB9Ci0KLSNlbGlmIENPTVBJ
TEVSKEdDQykgJiYgIUNQVShTUEFSQzY0KSAmJiAhT1MoU1lNQklBTikgLy8gc2l6ZW9mKF9BdG9t
aWNfd29yZCkgIT0gc2l6ZW9mKGludCkgb24gc3BhcmM2NCBnY2MKLSNkZWZpbmUgV1RGX1VTRV9M
T0NLRlJFRV9USFJFQURTQUZFU0hBUkVEIDEKLQotaW5saW5lIGludCBhdG9taWNJbmNyZW1lbnQo
aW50IHZvbGF0aWxlKiBhZGRlbmQpIHsgcmV0dXJuIF9fZ251X2N4eDo6X19leGNoYW5nZV9hbmRf
YWRkKGFkZGVuZCwgMSkgKyAxOyB9Ci1pbmxpbmUgaW50IGF0b21pY0RlY3JlbWVudChpbnQgdm9s
YXRpbGUqIGFkZGVuZCkgeyByZXR1cm4gX19nbnVfY3h4OjpfX2V4Y2hhbmdlX2FuZF9hZGQoYWRk
ZW5kLCAtMSkgLSAxOyB9Ci0KLSNlbmRpZgotCi1jbGFzcyBUaHJlYWRTYWZlU2hhcmVkQmFzZSA6
IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci1wdWJsaWM6Ci0gICAgVGhyZWFkU2FmZVNoYXJlZEJhc2Uo
aW50IGluaXRpYWxSZWZDb3VudCA9IDEpCi0gICAgICAgIDogbV9yZWZDb3VudChpbml0aWFsUmVm
Q291bnQpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgcmVmKCkKLSAgICB7Ci0jaWYgVVNFKExP
Q0tGUkVFX1RIUkVBRFNBRkVTSEFSRUQpCi0gICAgICAgIGF0b21pY0luY3JlbWVudCgmbV9yZWZD
b3VudCk7Ci0jZWxzZQotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7Ci0gICAg
ICAgICsrbV9yZWZDb3VudDsKLSNlbmRpZgotICAgIH0KLQotICAgIGJvb2wgaGFzT25lUmVmKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiByZWZDb3VudCgpID09IDE7Ci0gICAgfQotCi0gICAgaW50
IHJlZkNvdW50KCkgY29uc3QKLSAgICB7Ci0jaWYgIVVTRShMT0NLRlJFRV9USFJFQURTQUZFU0hB
UkVEKQotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7Ci0jZW5kaWYKLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludCBjb25zdCB2b2xhdGlsZSAmPihtX3JlZkNvdW50KTsK
LSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIHBvaW50ZXIg
c2hvdWxkIGJlIGZyZWVkIG9yIG5vdC4KLSAgICBib29sIGRlcmVmQmFzZSgpCi0gICAgewotI2lm
IFVTRShMT0NLRlJFRV9USFJFQURTQUZFU0hBUkVEKQotICAgICAgICBpZiAoYXRvbWljRGVjcmVt
ZW50KCZtX3JlZkNvdW50KSA8PSAwKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZWxzZQot
ICAgICAgICBpbnQgcmVmQ291bnQ7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX211dGV4KTsKLSAgICAgICAgICAgIC0tbV9yZWZDb3VudDsKLSAgICAgICAgICAg
IHJlZkNvdW50ID0gbV9yZWZDb3VudDsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVmQ291bnQg
PD0gMCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdGVtcGxhdGU8Y2xhc3MgVD4KLSAgICBmcmll
bmQgY2xhc3MgQ3Jvc3NUaHJlYWRSZWZDb3VudGVkOwotCi0gICAgaW50IG1fcmVmQ291bnQ7Ci0j
aWYgIVVTRShMT0NLRlJFRV9USFJFQURTQUZFU0hBUkVEKQotICAgIG11dGFibGUgTXV0ZXggbV9t
dXRleDsKLSNlbmRpZgotfTsKLQotdGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgVGhyZWFkU2FmZVNo
YXJlZCA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkQmFzZSB7Ci1wdWJsaWM6Ci0gICAgVGhyZWFk
U2FmZVNoYXJlZChpbnQgaW5pdGlhbFJlZkNvdW50ID0gMSkKLSAgICAgICAgOiBUaHJlYWRTYWZl
U2hhcmVkQmFzZShpbml0aWFsUmVmQ291bnQpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgZGVy
ZWYoKQotICAgIHsKLSAgICAgICAgaWYgKGRlcmVmQmFzZSgpKQotICAgICAgICAgICAgZGVsZXRl
IHN0YXRpY19jYXN0PFQqPih0aGlzKTsKLSAgICB9Ci19OwotCiAvLyBUaGlzIGZ1bmN0aW9uIG11
c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLiBJdCBpcyBzYWZlIHRvIGNhbGwgaXQg
cmVwZWF0ZWRseS4KIC8vIERhcndpbiBpcyBhbiBleGNlcHRpb24gdG8gdGhpcyBydWxlOiBpdCBp
cyBPSyB0byBjYWxsIGl0IGZyb20gYW55IHRocmVhZCwgdGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMg
dGhhdCB0aGUgY2FsbHMgYXJlIG5vdCByZWVudHJhbnQuCiB2b2lkIGluaXRpYWxpemVUaHJlYWRp
bmcoKTsKQEAgLTMzMCwxNyArMTA1LDcgQEAgdm9pZCB1bmxvY2tBdG9taWNhbGx5SW5pdGlhbGl6
ZWRTdGF0aWNNdQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAotdXNpbmcgV1RGOjpNdXRleDsKLXVz
aW5nIFdURjo6TXV0ZXhMb2NrZXI7Ci11c2luZyBXVEY6OlRocmVhZENvbmRpdGlvbjsKIHVzaW5n
IFdURjo6VGhyZWFkSWRlbnRpZmllcjsKLXVzaW5nIFdURjo6VGhyZWFkU2FmZVNoYXJlZDsKLQot
I2lmIFVTRShMT0NLRlJFRV9USFJFQURTQUZFU0hBUkVEKQotdXNpbmcgV1RGOjphdG9taWNEZWNy
ZW1lbnQ7Ci11c2luZyBXVEY6OmF0b21pY0luY3JlbWVudDsKLSNlbmRpZgotCiB1c2luZyBXVEY6
OmNyZWF0ZVRocmVhZDsKIHVzaW5nIFdURjo6Y3VycmVudFRocmVhZDsKIHVzaW5nIFdURjo6ZGV0
YWNoVGhyZWFkOwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5o
CShyZXZpc2lvbiA1ODE3OSkJKGZyb20gSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZy5oOjU4
MTc5KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDM0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
SnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4g
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKiBOb3RlOiBUaGUgaW1w
bGVtZW50YXRpb25zIG9mIEludGVybG9ja2VkSW5jcmVtZW50IGFuZCBJbnRlcmxvY2tlZERlY3Jl
bWVudCBhcmUgYmFzZWQKKyAqIG9uIGF0b21pY19pbmNyZW1lbnQgYW5kIGF0b21pY19leGNoYW5n
ZV9hbmRfYWRkIGZyb20gdGhlIEJvb3N0IEMrKyBMaWJyYXJ5LiBUaGUgbGljZW5zZQorICogaXMg
dmlydHVhbGx5IGlkZW50aWNhbCB0byB0aGUgQXBwbGUgbGljZW5zZSBhYm92ZSBidXQgaXMgaW5j
bHVkZWQgaGVyZSBmb3IgY29tcGxldGVuZXNzLgorICoKKyAqIEJvb3N0IFNvZnR3YXJlIExpY2Vu
c2UgLSBWZXJzaW9uIDEuMCAtIEF1Z3VzdCAxN3RoLCAyMDAzCisgKiAKKyAqIFBlcm1pc3Npb24g
aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9yIG9yZ2Fu
aXphdGlvbgorICogb2J0YWluaW5nIGEgY29weSBvZiB0aGUgc29mdHdhcmUgYW5kIGFjY29tcGFu
eWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKKyAqIHRoaXMgbGljZW5zZSAodGhlICJTb2Z0
d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBkaXN0cmlidXRlLAorICogZXhlY3V0
ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3
b3JrcyBvZiB0aGUKKyAqIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHRoaXJkLXBhcnRpZXMgdG8g
d2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCisgKiBkbyBzbywgYWxsIHN1YmplY3Qg
dG8gdGhlIGZvbGxvd2luZzoKKyAqIAorICogVGhlIGNvcHlyaWdodCBub3RpY2VzIGluIHRoZSBT
b2Z0d2FyZSBhbmQgdGhpcyBlbnRpcmUgc3RhdGVtZW50LCBpbmNsdWRpbmcKKyAqIHRoZSBhYm92
ZSBsaWNlbnNlIGdyYW50LCB0aGlzIHJlc3RyaWN0aW9uIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIsCisgKiBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl
LCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBhbmQKKyAqIGFsbCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRo
ZSBTb2Z0d2FyZSwgdW5sZXNzIHN1Y2ggY29waWVzIG9yIGRlcml2YXRpdmUKKyAqIHdvcmtzIGFy
ZSBzb2xlbHkgaW4gdGhlIGZvcm0gb2YgbWFjaGluZS1leGVjdXRhYmxlIG9iamVjdCBjb2RlIGdl
bmVyYXRlZCBieQorICogYSBzb3VyY2UgbGFuZ3VhZ2UgcHJvY2Vzc29yLgorICogCisgKiBUSEUg
U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO
RCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU
SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSwgVElUTEUgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UCisg
KiBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQU5ZT05FIERJU1RSSUJVVElORyBUSEUg
U09GVFdBUkUgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJP
TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP
UiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgVGhy
ZWFkaW5nX2gKKyNkZWZpbmUgVGhyZWFkaW5nX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtLmgiCisK
KyNpZiBPUyhXSU5DRSkKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYKKworI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKKyNpZiBPUyhX
SU5ET1dTKSAmJiAhT1MoV0lOQ0UpCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VsaWYgT1MoREFS
V0lOKQorI2luY2x1ZGUgPGxpYmtlcm4vT1NBdG9taWMuaD4KKyNlbGlmIE9TKEFORFJPSUQpCisj
aW5jbHVkZSA8Y3V0aWxzL2F0b21pYy5oPgorI2VsaWYgQ09NUElMRVIoR0NDKSAmJiAhT1MoU1lN
QklBTikKKyNpZiAoX19HTlVDX18gPiA0KSB8fCAoKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNf
TUlOT1JfXyA+PSAyKSkKKyNpbmNsdWRlIDxleHQvYXRvbWljaXR5Lmg+CisjZWxzZQorI2luY2x1
ZGUgPGJpdHMvYXRvbWljaXR5Lmg+CisjZW5kaWYKKyNlbmRpZgorCisjaWYgVVNFKFBUSFJFQURT
KQorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNlbGlmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlICJH
T3duUHRyLmgiCit0eXBlZGVmIHN0cnVjdCBfR011dGV4IEdNdXRleDsKK3R5cGVkZWYgc3RydWN0
IF9HQ29uZCBHQ29uZDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8cWds
b2JhbC5oPgorUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRTXV0ZXg7CitjbGFzcyBRV2FpdENv
bmRpdGlvbjsKK1FUX0VORF9OQU1FU1BBQ0UKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW50Lmg+
CisKKy8vIEZvciBwb3J0YWJpbGl0eSwgd2UgZG8gbm90IHVzZSB0aHJlYWQtc2FmZSBzdGF0aWNz
IG5hdGl2ZWx5IHN1cHBvcnRlZCBieSBzb21lIGNvbXBpbGVycyAoZS5nLiBnY2MpLgorI2RlZmlu
ZSBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMoVCwgbmFtZSkgXAorICAgIFdURjo6bG9ja0F0
b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCk7IFwKKyAgICBzdGF0aWMgVCBuYW1lOyBc
CisgICAgV1RGOjp1bmxvY2tBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleCgpOworCitu
YW1lc3BhY2UgV1RGIHsKKwordHlwZWRlZiB1aW50MzJfdCBUaHJlYWRJZGVudGlmaWVyOwordHlw
ZWRlZiB2b2lkKiAoKlRocmVhZEZ1bmN0aW9uKSh2b2lkKiBhcmd1bWVudCk7CisKKy8vIFJldHVy
bnMgMCBpZiB0aHJlYWQgY3JlYXRpb24gZmFpbGVkLgorLy8gVGhlIHRocmVhZCBuYW1lIG11c3Qg
YmUgYSBsaXRlcmFsIHNpbmNlIG9uIHNvbWUgcGxhdGZvcm1zIGl0J3MgcGFzc2VkIGluIHRvIHRo
ZSB0aHJlYWQuCitUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiwg
dm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworCisvLyBJbnRlcm5hbCBwbGF0Zm9ybS1z
cGVjaWZpYyBjcmVhdGVUaHJlYWQgaW1wbGVtZW50YXRpb24uCitUaHJlYWRJZGVudGlmaWVyIGNy
ZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhy
ZWFkTmFtZSk7CisKKy8vIENhbGxlZCBpbiB0aGUgdGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlv
bi4KKy8vIEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBi
ZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4KK3ZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJl
YWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKKworVGhyZWFkSWRlbnRpZmllciBj
dXJyZW50VGhyZWFkKCk7CitpbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRp
Zmllciwgdm9pZCoqKTsKK3ZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOworCisj
aWYgVVNFKFBUSFJFQURTKQordHlwZWRlZiBwdGhyZWFkX211dGV4X3QgUGxhdGZvcm1NdXRleDsK
KyNpZiBIQVZFKFBUSFJFQURfUldMT0NLKQordHlwZWRlZiBwdGhyZWFkX3J3bG9ja190IFBsYXRm
b3JtUmVhZFdyaXRlTG9jazsKKyNlbHNlCit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtUmVhZFdyaXRl
TG9jazsKKyNlbmRpZgordHlwZWRlZiBwdGhyZWFkX2NvbmRfdCBQbGF0Zm9ybUNvbmRpdGlvbjsK
KyNlbGlmIFBMQVRGT1JNKEdUSykKK3R5cGVkZWYgR093blB0cjxHTXV0ZXg+IFBsYXRmb3JtTXV0
ZXg7Cit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtUmVhZFdyaXRlTG9jazsgLy8gRklYTUU6IEltcGxl
bWVudC4KK3R5cGVkZWYgR093blB0cjxHQ29uZD4gUGxhdGZvcm1Db25kaXRpb247CisjZWxpZiBQ
TEFURk9STShRVCkKK3R5cGVkZWYgUVRfUFJFUEVORF9OQU1FU1BBQ0UoUU11dGV4KSogUGxhdGZv
cm1NdXRleDsKK3R5cGVkZWYgdm9pZCogUGxhdGZvcm1SZWFkV3JpdGVMb2NrOyAvLyBGSVhNRTog
SW1wbGVtZW50LgordHlwZWRlZiBRVF9QUkVQRU5EX05BTUVTUEFDRShRV2FpdENvbmRpdGlvbikq
IFBsYXRmb3JtQ29uZGl0aW9uOworI2VsaWYgT1MoV0lORE9XUykKK3N0cnVjdCBQbGF0Zm9ybU11
dGV4IHsKKyAgICBDUklUSUNBTF9TRUNUSU9OIG1faW50ZXJuYWxNdXRleDsKKyAgICBzaXplX3Qg
bV9yZWN1cnNpb25Db3VudDsKK307Cit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtUmVhZFdyaXRlTG9j
azsgLy8gRklYTUU6IEltcGxlbWVudC4KK3N0cnVjdCBQbGF0Zm9ybUNvbmRpdGlvbiB7CisgICAg
c2l6ZV90IG1fd2FpdGVyc0dvbmU7CisgICAgc2l6ZV90IG1fd2FpdGVyc0Jsb2NrZWQ7CisgICAg
c2l6ZV90IG1fd2FpdGVyc1RvVW5ibG9jazsgCisgICAgSEFORExFIG1fYmxvY2tMb2NrOworICAg
IEhBTkRMRSBtX2Jsb2NrUXVldWU7CisgICAgSEFORExFIG1fdW5ibG9ja0xvY2s7CisKKyAgICBi
b29sIHRpbWVkV2FpdChQbGF0Zm9ybU11dGV4JiwgRFdPUkQgZHVyYXRpb25NaWxsaXNlY29uZHMp
OworICAgIHZvaWQgc2lnbmFsKGJvb2wgdW5ibG9ja0FsbCk7Cit9OworI2Vsc2UKK3R5cGVkZWYg
dm9pZCogUGxhdGZvcm1NdXRleDsKK3R5cGVkZWYgdm9pZCogUGxhdGZvcm1SZWFkV3JpdGVMb2Nr
OwordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUNvbmRpdGlvbjsKKyNlbmRpZgorICAgIAorY2xhc3Mg
TXV0ZXggOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIE11dGV4KCk7CisgICAg
fk11dGV4KCk7CisKKyAgICB2b2lkIGxvY2soKTsKKyAgICBib29sIHRyeUxvY2soKTsKKyAgICB2
b2lkIHVubG9jaygpOworCitwdWJsaWM6CisgICAgUGxhdGZvcm1NdXRleCYgaW1wbCgpIHsgcmV0
dXJuIG1fbXV0ZXg7IH0KK3ByaXZhdGU6CisgICAgUGxhdGZvcm1NdXRleCBtX211dGV4OworfTsK
KwordHlwZWRlZiBMb2NrZXI8TXV0ZXg+IE11dGV4TG9ja2VyOworCitjbGFzcyBSZWFkV3JpdGVM
b2NrIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBSZWFkV3JpdGVMb2NrKCk7
CisgICAgflJlYWRXcml0ZUxvY2soKTsKKworICAgIHZvaWQgcmVhZExvY2soKTsKKyAgICBib29s
IHRyeVJlYWRMb2NrKCk7CisKKyAgICB2b2lkIHdyaXRlTG9jaygpOworICAgIGJvb2wgdHJ5V3Jp
dGVMb2NrKCk7CisgICAgCisgICAgdm9pZCB1bmxvY2soKTsKKworcHJpdmF0ZToKKyAgICBQbGF0
Zm9ybVJlYWRXcml0ZUxvY2sgbV9yZWFkV3JpdGVMb2NrOworfTsKKworY2xhc3MgVGhyZWFkQ29u
ZGl0aW9uIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBUaHJlYWRDb25kaXRp
b24oKTsKKyAgICB+VGhyZWFkQ29uZGl0aW9uKCk7CisgICAgCisgICAgdm9pZCB3YWl0KE11dGV4
JiBtdXRleCk7CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb25kaXRpb24gd2FzIHNpZ25h
bGVkIGJlZm9yZSBhYnNvbHV0ZVRpbWUsIGZhbHNlIGlmIHRoZSBhYnNvbHV0ZVRpbWUgd2FzIHJl
YWNoZWQgb3IgaXMgaW4gdGhlIHBhc3QuCisgICAgLy8gVGhlIGFic29sdXRlVGltZSBpcyBpbiBz
ZWNvbmRzLCBzdGFydGluZyBvbiBKYW51YXJ5IDEsIDE5NzAuIFRoZSB0aW1lIGlzIGFzc3VtZWQg
dG8gdXNlIHRoZSBzYW1lIHRpbWUgem9uZSBhcyBXVEY6OmN1cnJlbnRUaW1lKCkuCisgICAgYm9v
bCB0aW1lZFdhaXQoTXV0ZXgmLCBkb3VibGUgYWJzb2x1dGVUaW1lKTsKKyAgICB2b2lkIHNpZ25h
bCgpOworICAgIHZvaWQgYnJvYWRjYXN0KCk7CisgICAgCitwcml2YXRlOgorICAgIFBsYXRmb3Jt
Q29uZGl0aW9uIG1fY29uZGl0aW9uOworfTsKKworI2lmIE9TKFdJTkRPV1MpCisjZGVmaW5lIFdU
Rl9VU0VfTE9DS0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCAxCisKKyNpZiBDT01QSUxFUihNSU5HVykg
fHwgQ09NUElMRVIoTVNWQzcpIHx8IE9TKFdJTkNFKQoraW5saW5lIGludCBhdG9taWNJbmNyZW1l
bnQoaW50KiBhZGRlbmQpIHsgcmV0dXJuIEludGVybG9ja2VkSW5jcmVtZW50KHJlaW50ZXJwcmV0
X2Nhc3Q8bG9uZyo+KGFkZGVuZCkpOyB9CitpbmxpbmUgaW50IGF0b21pY0RlY3JlbWVudChpbnQq
IGFkZGVuZCkgeyByZXR1cm4gSW50ZXJsb2NrZWREZWNyZW1lbnQocmVpbnRlcnByZXRfY2FzdDxs
b25nKj4oYWRkZW5kKSk7IH0KKyNlbHNlCitpbmxpbmUgaW50IGF0b21pY0luY3JlbWVudChpbnQg
dm9sYXRpbGUqIGFkZGVuZCkgeyByZXR1cm4gSW50ZXJsb2NrZWRJbmNyZW1lbnQocmVpbnRlcnBy
ZXRfY2FzdDxsb25nIHZvbGF0aWxlKj4oYWRkZW5kKSk7IH0KK2lubGluZSBpbnQgYXRvbWljRGVj
cmVtZW50KGludCB2b2xhdGlsZSogYWRkZW5kKSB7IHJldHVybiBJbnRlcmxvY2tlZERlY3JlbWVu
dChyZWludGVycHJldF9jYXN0PGxvbmcgdm9sYXRpbGUqPihhZGRlbmQpKTsgfQorI2VuZGlmCisK
KyNlbGlmIE9TKERBUldJTikKKyNkZWZpbmUgV1RGX1VTRV9MT0NLRlJFRV9USFJFQURTQUZFU0hB
UkVEIDEKKworaW5saW5lIGludCBhdG9taWNJbmNyZW1lbnQoaW50IHZvbGF0aWxlKiBhZGRlbmQp
IHsgcmV0dXJuIE9TQXRvbWljSW5jcmVtZW50MzJCYXJyaWVyKGNvbnN0X2Nhc3Q8aW50Kj4oYWRk
ZW5kKSk7IH0KK2lubGluZSBpbnQgYXRvbWljRGVjcmVtZW50KGludCB2b2xhdGlsZSogYWRkZW5k
KSB7IHJldHVybiBPU0F0b21pY0RlY3JlbWVudDMyQmFycmllcihjb25zdF9jYXN0PGludCo+KGFk
ZGVuZCkpOyB9CisKKyNlbGlmIE9TKEFORFJPSUQpCisKK2lubGluZSBpbnQgYXRvbWljSW5jcmVt
ZW50KGludCB2b2xhdGlsZSogYWRkZW5kKSB7IHJldHVybiBhbmRyb2lkX2F0b21pY19pbmMoYWRk
ZW5kKTsgfQoraW5saW5lIGludCBhdG9taWNEZWNyZW1lbnQoaW50IHZvbGF0aWxlKiBhZGRlbmQp
IHsgcmV0dXJuIGFuZHJvaWRfYXRvbWljX2RlYyhhZGRlbmQpOyB9CisKKyNlbGlmIENPTVBJTEVS
KEdDQykgJiYgIUNQVShTUEFSQzY0KSAmJiAhT1MoU1lNQklBTikgLy8gc2l6ZW9mKF9BdG9taWNf
d29yZCkgIT0gc2l6ZW9mKGludCkgb24gc3BhcmM2NCBnY2MKKyNkZWZpbmUgV1RGX1VTRV9MT0NL
RlJFRV9USFJFQURTQUZFU0hBUkVEIDEKKworaW5saW5lIGludCBhdG9taWNJbmNyZW1lbnQoaW50
IHZvbGF0aWxlKiBhZGRlbmQpIHsgcmV0dXJuIF9fZ251X2N4eDo6X19leGNoYW5nZV9hbmRfYWRk
KGFkZGVuZCwgMSkgKyAxOyB9CitpbmxpbmUgaW50IGF0b21pY0RlY3JlbWVudChpbnQgdm9sYXRp
bGUqIGFkZGVuZCkgeyByZXR1cm4gX19nbnVfY3h4OjpfX2V4Y2hhbmdlX2FuZF9hZGQoYWRkZW5k
LCAtMSkgLSAxOyB9CisKKyNlbmRpZgorCitjbGFzcyBUaHJlYWRTYWZlU2hhcmVkQmFzZSA6IHB1
YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgVGhyZWFkU2FmZVNoYXJlZEJhc2UoaW50
IGluaXRpYWxSZWZDb3VudCA9IDEpCisgICAgICAgIDogbV9yZWZDb3VudChpbml0aWFsUmVmQ291
bnQpCisgICAgeworICAgIH0KKworICAgIHZvaWQgcmVmKCkKKyAgICB7CisjaWYgVVNFKExPQ0tG
UkVFX1RIUkVBRFNBRkVTSEFSRUQpCisgICAgICAgIGF0b21pY0luY3JlbWVudCgmbV9yZWZDb3Vu
dCk7CisjZWxzZQorICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAg
ICsrbV9yZWZDb3VudDsKKyNlbmRpZgorICAgIH0KKworICAgIGJvb2wgaGFzT25lUmVmKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiByZWZDb3VudCgpID09IDE7CisgICAgfQorCisgICAgaW50IHJl
ZkNvdW50KCkgY29uc3QKKyAgICB7CisjaWYgIVVTRShMT0NLRlJFRV9USFJFQURTQUZFU0hBUkVE
KQorICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisjZW5kaWYKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGludCBjb25zdCB2b2xhdGlsZSAmPihtX3JlZkNvdW50KTsKKyAg
ICB9CisKK3Byb3RlY3RlZDoKKyAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIHBvaW50ZXIgc2hv
dWxkIGJlIGZyZWVkIG9yIG5vdC4KKyAgICBib29sIGRlcmVmQmFzZSgpCisgICAgeworI2lmIFVT
RShMT0NLRlJFRV9USFJFQURTQUZFU0hBUkVEKQorICAgICAgICBpZiAoYXRvbWljRGVjcmVtZW50
KCZtX3JlZkNvdW50KSA8PSAwKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAg
ICAgICBpbnQgcmVmQ291bnQ7CisgICAgICAgIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX211dGV4KTsKKyAgICAgICAgICAgIC0tbV9yZWZDb3VudDsKKyAgICAgICAgICAgIHJl
ZkNvdW50ID0gbV9yZWZDb3VudDsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVmQ291bnQgPD0g
MCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8Y2xhc3MgVD4KKyAgICBmcmllbmQg
Y2xhc3MgQ3Jvc3NUaHJlYWRSZWZDb3VudGVkOworCisgICAgaW50IG1fcmVmQ291bnQ7CisjaWYg
IVVTRShMT0NLRlJFRV9USFJFQURTQUZFU0hBUkVEKQorICAgIG11dGFibGUgTXV0ZXggbV9tdXRl
eDsKKyNlbmRpZgorfTsKKwordGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgVGhyZWFkU2FmZVNoYXJl
ZCA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkQmFzZSB7CitwdWJsaWM6CisgICAgVGhyZWFkU2Fm
ZVNoYXJlZChpbnQgaW5pdGlhbFJlZkNvdW50ID0gMSkKKyAgICAgICAgOiBUaHJlYWRTYWZlU2hh
cmVkQmFzZShpbml0aWFsUmVmQ291bnQpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZGVyZWYo
KQorICAgIHsKKyAgICAgICAgaWYgKGRlcmVmQmFzZSgpKQorICAgICAgICAgICAgZGVsZXRlIHN0
YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICB9Cit9OworCisvLyBUaGlzIGZ1bmN0aW9uIG11c3Qg
YmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLiBJdCBpcyBzYWZlIHRvIGNhbGwgaXQgcmVw
ZWF0ZWRseS4KKy8vIERhcndpbiBpcyBhbiBleGNlcHRpb24gdG8gdGhpcyBydWxlOiBpdCBpcyBP
SyB0byBjYWxsIGl0IGZyb20gYW55IHRocmVhZCwgdGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMgdGhh
dCB0aGUgY2FsbHMgYXJlIG5vdCByZWVudHJhbnQuCit2b2lkIGluaXRpYWxpemVUaHJlYWRpbmco
KTsKKwordm9pZCBsb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgoKTsKK3ZvaWQg
dW5sb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgoKTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKK3VzaW5nIFdURjo6TXV0ZXg7Cit1c2luZyBXVEY6Ok11dGV4TG9ja2VyOwordXNp
bmcgV1RGOjpUaHJlYWRDb25kaXRpb247Cit1c2luZyBXVEY6OlRocmVhZElkZW50aWZpZXI7Cit1
c2luZyBXVEY6OlRocmVhZFNhZmVTaGFyZWQ7CisKKyNpZiBVU0UoTE9DS0ZSRUVfVEhSRUFEU0FG
RVNIQVJFRCkKK3VzaW5nIFdURjo6YXRvbWljRGVjcmVtZW50OwordXNpbmcgV1RGOjphdG9taWNJ
bmNyZW1lbnQ7CisjZW5kaWYKKwordXNpbmcgV1RGOjpjcmVhdGVUaHJlYWQ7Cit1c2luZyBXVEY6
OmN1cnJlbnRUaHJlYWQ7Cit1c2luZyBXVEY6OmRldGFjaFRocmVhZDsKK3VzaW5nIFdURjo6d2Fp
dEZvclRocmVhZENvbXBsZXRpb247CisKKyNlbmRpZiAvLyBUaHJlYWRpbmdfaApJbmRleDogSmF2
YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oCShyZXZpc2lvbiA1ODE3OCkKKysr
IEphdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
SnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtMjYsNjIgKzI2LDE5IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKgot
ICoKLSAqIE5vdGU6IFRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgSW50ZXJsb2NrZWRJbmNyZW1lbnQg
YW5kIEludGVybG9ja2VkRGVjcmVtZW50IGFyZSBiYXNlZAotICogb24gYXRvbWljX2luY3JlbWVu
dCBhbmQgYXRvbWljX2V4Y2hhbmdlX2FuZF9hZGQgZnJvbSB0aGUgQm9vc3QgQysrIExpYnJhcnku
IFRoZSBsaWNlbnNlCi0gKiBpcyB2aXJ0dWFsbHkgaWRlbnRpY2FsIHRvIHRoZSBBcHBsZSBsaWNl
bnNlIGFib3ZlIGJ1dCBpcyBpbmNsdWRlZCBoZXJlIGZvciBjb21wbGV0ZW5lc3MuCi0gKgotICog
Qm9vc3QgU29mdHdhcmUgTGljZW5zZSAtIFZlcnNpb24gMS4wIC0gQXVndXN0IDE3dGgsIDIwMDMK
LSAqIAotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv
IGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uCi0gKiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBz
b2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gY292ZXJlZCBieQotICogdGhp
cyBsaWNlbnNlICh0aGUgIlNvZnR3YXJlIikgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIGRp
c3RyaWJ1dGUsCi0gKiBleGVjdXRlLCBhbmQgdHJhbnNtaXQgdGhlIFNvZnR3YXJlLCBhbmQgdG8g
cHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZQotICogU29mdHdhcmUsIGFuZCB0byBwZXJt
aXQgdGhpcmQtcGFydGllcyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KLSAq
IGRvIHNvLCBhbGwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nOgotICogCi0gKiBUaGUgY29weXJp
Z2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQsIGlu
Y2x1ZGluZwotICogdGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKLSAqIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNv
cGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQsIGFuZAotICogYWxsIGRl
cml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxlc3Mgc3VjaCBjb3BpZXMgb3IgZGVy
aXZhdGl2ZQotICogd29ya3MgYXJlIHNvbGVseSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1
dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5Ci0gKiBhIHNvdXJjZSBsYW5ndWFnZSBwcm9j
ZXNzb3IuCi0gKiAKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU
IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcg
QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAq
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdF
TUVOVC4gSU4gTk8gRVZFTlQKLSAqIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllP
TkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgREFNQUdF
UyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX
SVNFLAotICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT
T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCi0gKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUu
CiAgKi8KIAotI2lmbmRlZiBUaHJlYWRpbmdfaAotI2RlZmluZSBUaHJlYWRpbmdfaAorI2lmbmRl
ZiBUaHJlYWRpbmdQcmltaXRpdmVzX2gKKyNkZWZpbmUgVGhyZWFkaW5nUHJpbWl0aXZlc19oCiAK
ICNpbmNsdWRlICJQbGF0Zm9ybS5oIgogCi0jaWYgT1MoV0lOQ0UpCi0jaW5jbHVkZSA8d2luZG93
cy5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0
Zi9Mb2NrZXIuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgogCi0jaWYgT1MoV0lORE9XUykgJiYgIU9TKFdJTkNFKQorI2lmIE9TKFdJ
TkRPV1MpCiAjaW5jbHVkZSA8d2luZG93cy5oPgotI2VsaWYgT1MoREFSV0lOKQotI2luY2x1ZGUg
PGxpYmtlcm4vT1NBdG9taWMuaD4KLSNlbGlmIE9TKEFORFJPSUQpCi0jaW5jbHVkZSA8Y3V0aWxz
L2F0b21pYy5oPgotI2VsaWYgQ09NUElMRVIoR0NDKSAmJiAhT1MoU1lNQklBTikKLSNpZiAoX19H
TlVDX18gPiA0KSB8fCAoKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAyKSkK
LSNpbmNsdWRlIDxleHQvYXRvbWljaXR5Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPGJpdHMvYXRvbWlj
aXR5Lmg+Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgVVNFKFBUSFJFQURTKQpAQCAtMTAwLDM0ICs1
Nyw4IEBAIGNsYXNzIFFXYWl0Q29uZGl0aW9uOwogUVRfRU5EX05BTUVTUEFDRQogI2VuZGlmCiAK
LSNpbmNsdWRlIDxzdGRpbnQuaD4KLQotLy8gRm9yIHBvcnRhYmlsaXR5LCB3ZSBkbyBub3QgdXNl
IHRocmVhZC1zYWZlIHN0YXRpY3MgbmF0aXZlbHkgc3VwcG9ydGVkIGJ5IHNvbWUgY29tcGlsZXJz
IChlLmcuIGdjYykuCi0jZGVmaW5lIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhULCBuYW1l
KSBcCi0gICAgV1RGOjpsb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgoKTsgXAot
ICAgIHN0YXRpYyBUIG5hbWU7IFwKLSAgICBXVEY6OnVubG9ja0F0b21pY2FsbHlJbml0aWFsaXpl
ZFN0YXRpY011dGV4KCk7Ci0KIG5hbWVzcGFjZSBXVEYgewogCi10eXBlZGVmIHVpbnQzMl90IFRo
cmVhZElkZW50aWZpZXI7Ci10eXBlZGVmIHZvaWQqICgqVGhyZWFkRnVuY3Rpb24pKHZvaWQqIGFy
Z3VtZW50KTsKLQotLy8gUmV0dXJucyAwIGlmIHRocmVhZCBjcmVhdGlvbiBmYWlsZWQuCi0vLyBU
aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBhIGxpdGVyYWwgc2luY2Ugb24gc29tZSBwbGF0Zm9ybXMg
aXQncyBwYXNzZWQgaW4gdG8gdGhlIHRocmVhZC4KLVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhy
ZWFkKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhyZWFkTmFtZSk7Ci0KLS8v
IEludGVybmFsIHBsYXRmb3JtLXNwZWNpZmljIGNyZWF0ZVRocmVhZCBpbXBsZW1lbnRhdGlvbi4K
LVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24sIHZv
aWQqLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKLQotLy8gQ2FsbGVkIGluIHRoZSB0aHJlYWQg
ZHVyaW5nIGluaXRpYWxpemF0aW9uLgotLy8gSGVscGZ1bCBmb3IgcGxhdGZvcm1zIHdoZXJlIHRo
ZSB0aHJlYWQgbmFtZSBtdXN0IGJlIHNldCBmcm9tIHdpdGhpbiB0aGUgdGhyZWFkLgotdm9pZCBp
bml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwot
Ci1UaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQoKTsKLWludCB3YWl0Rm9yVGhyZWFkQ29t
cGxldGlvbihUaHJlYWRJZGVudGlmaWVyLCB2b2lkKiopOwotdm9pZCBkZXRhY2hUaHJlYWQoVGhy
ZWFkSWRlbnRpZmllcik7Ci0KICNpZiBVU0UoUFRIUkVBRFMpCiB0eXBlZGVmIHB0aHJlYWRfbXV0
ZXhfdCBQbGF0Zm9ybU11dGV4OwogI2lmIEhBVkUoUFRIUkVBRF9SV0xPQ0spCkBAIC0yMTcsMTMz
ICsxNDgsMTAgQEAgcHJpdmF0ZToKICAgICBQbGF0Zm9ybUNvbmRpdGlvbiBtX2NvbmRpdGlvbjsK
IH07CiAKLSNpZiBPUyhXSU5ET1dTKQotI2RlZmluZSBXVEZfVVNFX0xPQ0tGUkVFX1RIUkVBRFNB
RkVTSEFSRUQgMQotCi0jaWYgQ09NUElMRVIoTUlOR1cpIHx8IENPTVBJTEVSKE1TVkM3KSB8fCBP
UyhXSU5DRSkKLWlubGluZSBpbnQgYXRvbWljSW5jcmVtZW50KGludCogYWRkZW5kKSB7IHJldHVy
biBJbnRlcmxvY2tlZEluY3JlbWVudChyZWludGVycHJldF9jYXN0PGxvbmcqPihhZGRlbmQpKTsg
fQotaW5saW5lIGludCBhdG9taWNEZWNyZW1lbnQoaW50KiBhZGRlbmQpIHsgcmV0dXJuIEludGVy
bG9ja2VkRGVjcmVtZW50KHJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyo+KGFkZGVuZCkpOyB9Ci0jZWxz
ZQotaW5saW5lIGludCBhdG9taWNJbmNyZW1lbnQoaW50IHZvbGF0aWxlKiBhZGRlbmQpIHsgcmV0
dXJuIEludGVybG9ja2VkSW5jcmVtZW50KHJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyB2b2xhdGlsZSo+
KGFkZGVuZCkpOyB9Ci1pbmxpbmUgaW50IGF0b21pY0RlY3JlbWVudChpbnQgdm9sYXRpbGUqIGFk
ZGVuZCkgeyByZXR1cm4gSW50ZXJsb2NrZWREZWNyZW1lbnQocmVpbnRlcnByZXRfY2FzdDxsb25n
IHZvbGF0aWxlKj4oYWRkZW5kKSk7IH0KLSNlbmRpZgotCi0jZWxpZiBPUyhEQVJXSU4pCi0jZGVm
aW5lIFdURl9VU0VfTE9DS0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCAxCi0KLWlubGluZSBpbnQgYXRv
bWljSW5jcmVtZW50KGludCB2b2xhdGlsZSogYWRkZW5kKSB7IHJldHVybiBPU0F0b21pY0luY3Jl
bWVudDMyQmFycmllcihjb25zdF9jYXN0PGludCo+KGFkZGVuZCkpOyB9Ci1pbmxpbmUgaW50IGF0
b21pY0RlY3JlbWVudChpbnQgdm9sYXRpbGUqIGFkZGVuZCkgeyByZXR1cm4gT1NBdG9taWNEZWNy
ZW1lbnQzMkJhcnJpZXIoY29uc3RfY2FzdDxpbnQqPihhZGRlbmQpKTsgfQotCi0jZWxpZiBPUyhB
TkRST0lEKQotCi1pbmxpbmUgaW50IGF0b21pY0luY3JlbWVudChpbnQgdm9sYXRpbGUqIGFkZGVu
ZCkgeyByZXR1cm4gYW5kcm9pZF9hdG9taWNfaW5jKGFkZGVuZCk7IH0KLWlubGluZSBpbnQgYXRv
bWljRGVjcmVtZW50KGludCB2b2xhdGlsZSogYWRkZW5kKSB7IHJldHVybiBhbmRyb2lkX2F0b21p
Y19kZWMoYWRkZW5kKTsgfQotCi0jZWxpZiBDT01QSUxFUihHQ0MpICYmICFDUFUoU1BBUkM2NCkg
JiYgIU9TKFNZTUJJQU4pIC8vIHNpemVvZihfQXRvbWljX3dvcmQpICE9IHNpemVvZihpbnQpIG9u
IHNwYXJjNjQgZ2NjCi0jZGVmaW5lIFdURl9VU0VfTE9DS0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCAx
Ci0KLWlubGluZSBpbnQgYXRvbWljSW5jcmVtZW50KGludCB2b2xhdGlsZSogYWRkZW5kKSB7IHJl
dHVybiBfX2dudV9jeHg6Ol9fZXhjaGFuZ2VfYW5kX2FkZChhZGRlbmQsIDEpICsgMTsgfQotaW5s
aW5lIGludCBhdG9taWNEZWNyZW1lbnQoaW50IHZvbGF0aWxlKiBhZGRlbmQpIHsgcmV0dXJuIF9f
Z251X2N4eDo6X19leGNoYW5nZV9hbmRfYWRkKGFkZGVuZCwgLTEpIC0gMTsgfQotCi0jZW5kaWYK
LQotY2xhc3MgVGhyZWFkU2FmZVNoYXJlZEJhc2UgOiBwdWJsaWMgTm9uY29weWFibGUgewotcHVi
bGljOgotICAgIFRocmVhZFNhZmVTaGFyZWRCYXNlKGludCBpbml0aWFsUmVmQ291bnQgPSAxKQot
ICAgICAgICA6IG1fcmVmQ291bnQoaW5pdGlhbFJlZkNvdW50KQotICAgIHsKLSAgICB9Ci0KLSAg
ICB2b2lkIHJlZigpCi0gICAgewotI2lmIFVTRShMT0NLRlJFRV9USFJFQURTQUZFU0hBUkVEKQot
ICAgICAgICBhdG9taWNJbmNyZW1lbnQoJm1fcmVmQ291bnQpOwotI2Vsc2UKLSAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwotICAgICAgICArK21fcmVmQ291bnQ7Ci0jZW5kaWYK
LSAgICB9Ci0KLSAgICBib29sIGhhc09uZVJlZigpCi0gICAgewotICAgICAgICByZXR1cm4gcmVm
Q291bnQoKSA9PSAxOwotICAgIH0KLQotICAgIGludCByZWZDb3VudCgpIGNvbnN0Ci0gICAgewot
I2lmICFVU0UoTE9DS0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCkKLSAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fbXV0ZXgpOwotI2VuZGlmCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQg
Y29uc3Qgdm9sYXRpbGUgJj4obV9yZWZDb3VudCk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAg
Ly8gUmV0dXJucyB3aGV0aGVyIHRoZSBwb2ludGVyIHNob3VsZCBiZSBmcmVlZCBvciBub3QuCi0g
ICAgYm9vbCBkZXJlZkJhc2UoKQotICAgIHsKLSNpZiBVU0UoTE9DS0ZSRUVfVEhSRUFEU0FGRVNI
QVJFRCkKLSAgICAgICAgaWYgKGF0b21pY0RlY3JlbWVudCgmbV9yZWZDb3VudCkgPD0gMCkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICAgICAgaW50IHJlZkNvdW50OwotICAg
ICAgICB7Ci0gICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7Ci0gICAgICAg
ICAgICAtLW1fcmVmQ291bnQ7Ci0gICAgICAgICAgICByZWZDb3VudCA9IG1fcmVmQ291bnQ7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKHJlZkNvdW50IDw9IDApCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSNlbmRpZgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICAgZnJpZW5kIGNsYXNzIENyb3NzVGhyZWFkUmVmQ291
bnRlZDsKLQotICAgIGludCBtX3JlZkNvdW50OwotI2lmICFVU0UoTE9DS0ZSRUVfVEhSRUFEU0FG
RVNIQVJFRCkKLSAgICBtdXRhYmxlIE11dGV4IG1fbXV0ZXg7Ci0jZW5kaWYKLX07Ci0KLXRlbXBs
YXRlPGNsYXNzIFQ+IGNsYXNzIFRocmVhZFNhZmVTaGFyZWQgOiBwdWJsaWMgVGhyZWFkU2FmZVNo
YXJlZEJhc2UgewotcHVibGljOgotICAgIFRocmVhZFNhZmVTaGFyZWQoaW50IGluaXRpYWxSZWZD
b3VudCA9IDEpCi0gICAgICAgIDogVGhyZWFkU2FmZVNoYXJlZEJhc2UoaW5pdGlhbFJlZkNvdW50
KQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGRlcmVmKCkKLSAgICB7Ci0gICAgICAgIGlmIChk
ZXJlZkJhc2UoKSkKLSAgICAgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxUKj4odGhpcyk7Ci0g
ICAgfQotfTsKLQotLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWlu
IHRocmVhZC4gSXQgaXMgc2FmZSB0byBjYWxsIGl0IHJlcGVhdGVkbHkuCi0vLyBEYXJ3aW4gaXMg
YW4gZXhjZXB0aW9uIHRvIHRoaXMgcnVsZTogaXQgaXMgT0sgdG8gY2FsbCBpdCBmcm9tIGFueSB0
aHJlYWQsIHRoZSBvbmx5IHJlcXVpcmVtZW50IGlzIHRoYXQgdGhlIGNhbGxzIGFyZSBub3QgcmVl
bnRyYW50Lgotdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0KLXZvaWQgbG9ja0F0b21pY2Fs
bHlJbml0aWFsaXplZFN0YXRpY011dGV4KCk7Ci12b2lkIHVubG9ja0F0b21pY2FsbHlJbml0aWFs
aXplZFN0YXRpY011dGV4KCk7Ci0KIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Ok11
dGV4OwogdXNpbmcgV1RGOjpNdXRleExvY2tlcjsKIHVzaW5nIFdURjo6VGhyZWFkQ29uZGl0aW9u
OwotdXNpbmcgV1RGOjpUaHJlYWRJZGVudGlmaWVyOwotdXNpbmcgV1RGOjpUaHJlYWRTYWZlU2hh
cmVkOwotCi0jaWYgVVNFKExPQ0tGUkVFX1RIUkVBRFNBRkVTSEFSRUQpCi11c2luZyBXVEY6OmF0
b21pY0RlY3JlbWVudDsKLXVzaW5nIFdURjo6YXRvbWljSW5jcmVtZW50OwotI2VuZGlmCi0KLXVz
aW5nIFdURjo6Y3JlYXRlVGhyZWFkOwotdXNpbmcgV1RGOjpjdXJyZW50VGhyZWFkOwotdXNpbmcg
V1RGOjpkZXRhY2hUaHJlYWQ7Ci11c2luZyBXVEY6OndhaXRGb3JUaHJlYWRDb21wbGV0aW9uOwog
Ci0jZW5kaWYgLy8gVGhyZWFkaW5nX2gKKyNlbmRpZiAvLyBUaHJlYWRpbmdQcmltaXRpdmVzX2gK
SW5kZXg6IEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU4MTk2KQorKysgSmF2YVNjcmlwdEdsdWUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDQtMjMgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBGaXggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zODA2MAorICAgICAgICBTcGxpdCB1cCBUaHJlYWRpbmcuaAorCisgICAgICAgIEFkZCBu
ZWNlc3NhcnkgZm9yd2FyZGluZyBoZWFkZXJzLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRl
cnMvd3RmL0F0b21pY3MuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3Rm
L1RocmVhZFNhZmVTaGFyZWQuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMv
d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaDogQWRkZWQuCisKIDIwMTAtMDQtMjIgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNz
b24uCkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvQXRvbWljcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9BdG9t
aWNzLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93
dGYvQXRvbWljcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvQXRvbWljcy5oPgpJbmRleDogSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRl
cnMvd3RmL1RocmVhZFNhZmVTaGFyZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9G
b3J3YXJkaW5nSGVhZGVycy93dGYvVGhyZWFkU2FmZVNoYXJlZC5oCShyZXZpc2lvbiAwKQorKysg
SmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1RocmVhZFNhZmVTaGFyZWQuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1RocmVh
ZFNhZmVTaGFyZWQuaD4KSW5kZXg6IEphdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0
Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvRm9y
d2FyZGluZ0hlYWRlcnMvd3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaAkocmV2aXNpb24gMCkKKysr
IEphdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9UaHJlYWRpbmdQcmltaXRpdmVz
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9U
aHJlYWRpbmdQcmltaXRpdmVzLmg+CkluZGV4OiBXZWJLaXRUb29scy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1ODE5NikKKysrIFdlYktp
dFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEwLTA0
LTIzICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzgwNjAKKyAgICAgICAgU3BsaXQgdXAgVGhyZWFkaW5nLmgKKwor
ICAgICAgICBBZGQgbmVjZXNzYXJ5IGZvcndhcmRpbmcgaGVhZGVycy4KKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9BdG9taWNzLmg6IEFkZGVkLgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9UaHJlYWRTYWZlU2hh
cmVkLmg6IEFkZGVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0ZvcndhcmRpbmdIZWFkZXJz
L3d0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg6IEFkZGVkLgorCiAyMDEwLTA0LTE5ICBEaXJrIFBy
YW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0g
QmFydGguCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9Gb3J3YXJkaW5nSGVhZGVy
cy93dGYvQXRvbWljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9BdG9taWNzLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvQXRvbWljcy5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQXRvbWljcy5o
PgpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvRm9yd2FyZGluZ0hlYWRlcnMvd3Rm
L1RocmVhZFNhZmVTaGFyZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvVGhyZWFkU2FmZVNoYXJlZC5oCShyZXZpc2lvbiAw
KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1Ro
cmVhZFNhZmVTaGFyZWQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1RocmVhZFNhZmVTaGFyZWQuaD4KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvRm9yd2FyZGluZ0hlYWRlcnMv
d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UaHJl
YWRpbmdQcmltaXRpdmVzLmg+Cg==
</data>
<flag name="review"
          id="38103"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>