<?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>170001</bug_id>
          
          <creation_ts>2017-03-23 03:56:24 -0700</creation_ts>
          <short_desc>[GTK] Add MIMETypeRegistry implementation using xdgmime and remove the GTK+ one</short_desc>
          <delta_ts>2017-04-07 09:46:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>commit-queue</cc>
    
    <cc>lforschler</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1290405</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-03-23 03:56:24 -0700</bug_when>
    <thetext>The XDG implementation could be used by any port where shared-mime-info is expected to be available. It also improves the current GTK+ implementation that is based on a very small map of mime types and extensions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1290406</commentid>
    <comment_count>1</comment_count>
      <attachid>305180</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-03-23 04:02:43 -0700</bug_when>
    <thetext>Created attachment 305180
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1290413</commentid>
    <comment_count>2</comment_count>
      <attachid>305180</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-03-23 04:50:22 -0700</bug_when>
    <thetext>Comment on attachment 305180
Patch

It&apos;s a shame there is no GLib API for this, but this seems like the sort of thing that is acceptable to keep in ThirdParty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1290414</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-03-23 04:53:19 -0700</bug_when>
    <thetext>Yes, xdgmime is still designed to be copied as third party.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1290415</commentid>
    <comment_count>4</comment_count>
      <attachid>305180</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-03-23 04:54:30 -0700</bug_when>
    <thetext>Comment on attachment 305180
Patch

Thanks for the review, I still need to update the style checker to ignore xdgmime sources. And I&apos;m checking a few diffs in layout tests too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1290435</commentid>
    <comment_count>5</comment_count>
      <attachid>305192</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-03-23 06:42:45 -0700</bug_when>
    <thetext>Created attachment 305192
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1290436</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-03-23 06:44:31 -0700</bug_when>
    <thetext>I don&apos;t know how to land this. The SVN commit hooks complains about tabs in xdgmime sources and suggests to set allow-tabs svn prop, but it seems git-svn doesn&apos;t allow to set a property on a new file that is not yet in the repository</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1290437</commentid>
    <comment_count>7</comment_count>
      <attachid>305192</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-03-23 07:24:31 -0700</bug_when>
    <thetext>Comment on attachment 305192
Patch for landing

Let&apos;s see if commit-queue knows how to deal with this...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1290443</commentid>
    <comment_count>8</comment_count>
      <attachid>305192</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-23 07:55:18 -0700</bug_when>
    <thetext>Comment on attachment 305192
Patch for landing

Rejecting attachment 305192 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 305192, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
342b53b9ba47346259522a0b7beb4007cf3 062d6873dec7afe86e241f457b3b62d2d6324ca9 M	Tools
Current branch master is up to date.
ERROR: Not all changes have been committed into SVN, however the committed
ones (if any) seem to be successfully integrated into the working tree.
Please see the above messages for details.


Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;, &apos;--rmdir&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit
Updating OpenSource
Current branch master is up to date.
Total errors found: 0 in 0 files

Full output: http://webkit-queues.webkit.org/results/3395185</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1290446</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-03-23 08:00:49 -0700</bug_when>
    <thetext>Any idea Lucas? I don&apos;t want to untabify third party sources . . . Is there any way to set the allow-tabs properties in new files or bypass the svn hook somehow?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1290763</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-03-24 01:21:36 -0700</bug_when>
    <thetext>Committed r214338: &lt;http://trac.webkit.org/changeset/214338&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295368</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-04-07 09:46:36 -0700</bug_when>
    <thetext>Did you notice this build warning:

[103/5550] Building C object Source/Th...Files/xdgmime.dir/src/xdgmimecache.c.o
../../Source/ThirdParty/xdgmime/src/xdgmimecache.c: In function ‘cache_magic_matchlet_compare_to_data’:
../../Source/ThirdParty/xdgmime/src/xdgmimecache.c:200:62: warning: pointer of type ‘void *’ used in arithmetic [-Wpointer-arith]
    valid_matchlet = memcmp(cache-&gt;buffer + data_offset, data + i, data_length) == 0;

That&apos;s invalid code, so it should be fixed, not suppressed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305180</attachid>
            <date>2017-03-23 04:02:43 -0700</date>
            <delta_ts>2017-03-23 06:42:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk-xdgmime.diff</filename>
            <type>text/plain</type>
            <size>146703</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBmNjliNWRjYzZhYi4uYmJj
ZjFkMTA4YWEgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMyBAQAorMjAxNy0wMy0yMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIE1JTUVUeXBlUmVnaXN0cnkgaW1wbGVtZW50YXRp
b24gdXNpbmcgeGRnbWltZSBhbmQgcmVtb3ZlIHRoZSBHVEsrIG9uZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMDAxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvQ01ha2VMaXN0cy50eHQ6
IENvbXBpbGUgeGRnbWltZSBpZiBVU0VfWERHTUlNRSBpcyBPTi4KKyAgICAgICAgKiBTb3VyY2Uv
Y21ha2UvT3B0aW9uc0dUSy5jbWFrZTogU2V0IFVTRV9YREdNSU1FIHRvIE9OLgorCiAyMDE3LTAz
LTEwICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkIFdpbjY0IGJ1aWxkIGZpeC4gRlRMIGlzIG5vdCByZWFkeSB0byBiZSB0dXJuZWQgb24g
eWV0LgpkaWZmIC0tZ2l0IGEvU291cmNlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0NNYWtlTGlz
dHMudHh0CmluZGV4IDE1ZmRmMjI0YTg5Li5jODk4NzAyYjcwZSAxMDA2NDQKLS0tIGEvU291cmNl
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9DTWFrZUxpc3RzLnR4dApAQCAtMjIsNiArMjIs
MTAgQEAgaWYgKFVTRV9XT0ZGMikKICAgICBhZGRfc3ViZGlyZWN0b3J5KFRoaXJkUGFydHkvd29m
ZjIpCiBlbmRpZiAoKQogCitpZiAoVVNFX1hER01JTUUpCisgICAgYWRkX3N1YmRpcmVjdG9yeShU
aGlyZFBhcnR5L3hkZ21pbWUpCitlbmRpZigpCisKIGlmIChFTkFCTEVfV0VCQ09SRSkKICAgICBh
ZGRfc3ViZGlyZWN0b3J5KFdlYkNvcmUpCiBlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvQ2hhbmdlTG9nCmluZGV4IGY0
NWVkZGRiMWMyLi41ZTM4NDZmZjVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBA
CisyMDE3LTAzLTIzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4K
KworICAgICAgICBbR1RLXSBBZGQgTUlNRVR5cGVSZWdpc3RyeSBpbXBsZW1lbnRhdGlvbiB1c2lu
ZyB4ZGdtaW1lIGFuZCByZW1vdmUgdGhlIEdUSysgb25lCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAwMDEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgeGRnbWltZSB0byBUaGlyZFBhcnR5LgorCisg
ICAgICAgICogeGRnbWltZS9DTWFrZUxpc3RzLnR4dDogQWRkZWQuCisgICAgICAgICogeGRnbWlt
ZS9SRUFETUU6IEFkZGVkLgorICAgICAgICAqIHhkZ21pbWUvUkVBRE1FLndlYmtpdDogQWRkZWQu
CisgICAgICAgICogeGRnbWltZS9zcmMveGRnbWltZS5jOiBBZGRlZC4KKyAgICAgICAgKiB4ZGdt
aW1lL3NyYy94ZGdtaW1lLmg6IEFkZGVkLgorICAgICAgICAqIHhkZ21pbWUvc3JjL3hkZ21pbWVh
bGlhcy5jOiBBZGRlZC4KKyAgICAgICAgKiB4ZGdtaW1lL3NyYy94ZGdtaW1lYWxpYXMuaDogQWRk
ZWQuCisgICAgICAgICogeGRnbWltZS9zcmMveGRnbWltZWNhY2hlLmM6IEFkZGVkLgorICAgICAg
ICAqIHhkZ21pbWUvc3JjL3hkZ21pbWVjYWNoZS5oOiBBZGRlZC4KKyAgICAgICAgKiB4ZGdtaW1l
L3NyYy94ZGdtaW1lZ2xvYi5jOiBBZGRlZC4KKyAgICAgICAgKiB4ZGdtaW1lL3NyYy94ZGdtaW1l
Z2xvYi5oOiBBZGRlZC4KKyAgICAgICAgKiB4ZGdtaW1lL3NyYy94ZGdtaW1laWNvbi5jOiBBZGRl
ZC4KKyAgICAgICAgKiB4ZGdtaW1lL3NyYy94ZGdtaW1laWNvbi5oOiBBZGRlZC4KKyAgICAgICAg
KiB4ZGdtaW1lL3NyYy94ZGdtaW1laW50LmM6IEFkZGVkLgorICAgICAgICAqIHhkZ21pbWUvc3Jj
L3hkZ21pbWVpbnQuaDogQWRkZWQuCisgICAgICAgICogeGRnbWltZS9zcmMveGRnbWltZW1hZ2lj
LmM6IEFkZGVkLgorICAgICAgICAqIHhkZ21pbWUvc3JjL3hkZ21pbWVtYWdpYy5oOiBBZGRlZC4K
KyAgICAgICAgKiB4ZGdtaW1lL3NyYy94ZGdtaW1lcGFyZW50LmM6IEFkZGVkLgorICAgICAgICAq
IHhkZ21pbWUvc3JjL3hkZ21pbWVwYXJlbnQuaDogQWRkZWQuCisKIDIwMTctMDItMDkgIEFsZXgg
Q2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBCdWlsZCBs
aWJ3ZWJydGMgb24gYm90cyB3aXRob3V0IHVzaW5nIGl0IHlldApkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkveGRnbWltZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9UaGlyZFBhcnR5L3hk
Z21pbWUvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjAzMGVjOWEwZjk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkveGRn
bWltZS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDI2IEBACitzZXQoWERHTUlNRV9ESVIgIiR7
VEhJUkRQQVJUWV9ESVJ9L3hkZ21pbWUiKQorCitzZXQoWERHTUlNRV9JTkNMVURFX0RJUkVDVE9S
SUVTCisgICAgIiR7WERHTUlNRV9ESVJ9L3NyYyIKKyAgICAiJHtDTUFLRV9CSU5BUllfRElSfSIK
KykKKworc2V0KFhER01JTUVfU09VUkNFUworICAgICR7WERHTUlNRV9ESVJ9L3NyYy94ZGdtaW1l
YWxpYXMuYworICAgICR7WERHTUlNRV9ESVJ9L3NyYy94ZGdtaW1lLmMKKyAgICAke1hER01JTUVf
RElSfS9zcmMveGRnbWltZWljb24uYworICAgICR7WERHTUlNRV9ESVJ9L3NyYy94ZGdtaW1laW50
LmMKKyAgICAke1hER01JTUVfRElSfS9zcmMveGRnbWltZW1hZ2ljLmMKKyAgICAke1hER01JTUVf
RElSfS9zcmMveGRnbWltZXBhcmVudC5jCisgICAgJHtYREdNSU1FX0RJUn0vc3JjL3hkZ21pbWVj
YWNoZS5jCisgICAgJHtYREdNSU1FX0RJUn0vc3JjL3hkZ21pbWVnbG9iLmMKKykKKworaW5jbHVk
ZV9kaXJlY3RvcmllcygiJHtYREdNSU1FX0lOQ0xVREVfRElSRUNUT1JJRVN9IikKK2FkZF9kZWZp
bml0aW9ucygtRFhER19QUkVGSVg9X3drX3hkZykKK2FkZF9saWJyYXJ5KHhkZ21pbWUgU1RBVElD
ICR7WERHTUlNRV9TT1VSQ0VTfSkKK1dFQktJVF9TRVRfRVhUUkFfQ09NUElMRVJfRkxBR1MoeGRn
bWltZSkKKworaWYgKENPTVBJTEVSX0lTX0dDQ19PUl9DTEFORykKKyAgICBBRERfVEFSR0VUX1BS
T1BFUlRJRVMoeGRnbWltZSBDT01QSUxFX0ZMQUdTICItV25vLXNpZ24tY29tcGFyZSAtV25vLXVu
dXNlZC1wYXJhbWV0ZXIiKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L3hkZ21pbWUvUkVBRE1FIGIvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9SRUFETUUKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU3ZjNmNjg1OWQzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9SRUFETUUKQEAgLTAsMCArMSw4IEBA
CitUaGlzIG1vZHVsZSBpcyBhIHNpbXBsZSBtb2R1bGUgdGhhdCBwYXJzZXMgdGhlIHByb3Bvc2Vk
IE1JTUUgc3BlYyBsaXN0ZWQKK2F0IGh0dHA6Ly9mcmVlZGVza3RvcC5vcmcvLiAgSXQgaXMgY3Vy
cmVudGx5IHRhcmdldHRlZCBhdCB2ZXJzaW9uIDAuMTIuCitUaGVyZSBhcmUgbm8gZm9ybWFsIHJl
bGVhc2VzIHBsYW5uZWQgZm9yIHRoaXMgbW9kdWxlLCBhbmQgaXQgaXMgbm90CitpbnRlbmRlZCB0
byBiZSBpbnN0YWxsZWQgYXQgdGhpcyB0aW1lLiAgUmF0aGVyLCBpdCBpcyBtZWFudCB0byBiZSB1
c2VkCitieSBvdGhlciBsaWJyYXJpZXMgb3IgYXBwbGljYXRpb25zIHRvIGFkZCBzdXBwb3J0IGZv
ciB0aGUgTUlNRSBzeXN0ZW0uCisKK0l0IGlzIGR1YWwtbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlLCBhbmQgdGhlIEFjYWRl
bWljIEZyZWUgTGljZW5zZSwgdmVyc2lvbiAyLjAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS94ZGdtaW1lL1JFQURNRS53ZWJraXQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS94ZGdtaW1lL1JF
QURNRS53ZWJraXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhiNDk0
ZWQ5OGU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9SRUFE
TUUud2Via2l0CkBAIC0wLDAgKzEsMTggQEAKK1RoaXMgeGRnbWltZSBmcm9tCitodHRwczovL2Nn
aXQuZnJlZWRlc2t0b3Aub3JnL3hkZy94ZGdtaW1lLworCit4ZGdtaW1lIGlzIHRoZSByZWZlcmVu
Y2UgaW1wbGVtZW50YXRpb24gb2YgdGhlIEZyZWVkZXNrdG9wLm9yZyBNSU1FIHNwZWNpZmljYXRp
b246CitodHRwczovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9TcGVjaWZpY2F0aW9ucy9zaGFy
ZWQtbWltZS1pbmZvLXNwZWMvCisKK0N1cnJlbnQgdmVyc2lvbiBpcyBiYXNlZCBvbiByZXZpc2lv
biBmNjlmZDI1MjhlYzBlYmRiZTQ4OTgzYWQzZWFiZDAwMmRlN2JhMmJkCitjbG9uZWQgZnJvbSBn
aXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy94ZGcveGRnbWltZS4KKworQ2hhbmdlcyBmb3Ig
dGhlIFdlYktpdCBwcm9qZWN0OgorCisgLSBBZGQgeGRnX21pbWVfZ2V0X3NpbXBsZV9nbG9icwor
IC0gcy9eI2luY2x1ZGUgPGNvbmZpZy5oPi8jaW5jbHVkZSAiY21ha2Vjb25maWcuaCIvZworCitD
aGFuZ2VzIGluY2x1ZGVkIGZyb20gR0xpYiBzb3VyY2VzOgorCisgLSAyNTQyYjZmNjA0OTJmYWRm
YjIxZjJjNGEyOTk3NmMzNDk0YzdlNmM1IHhkZ21pbWU6IEhhbmRsZSBFSU5UUiBpbiBvcGVuKCkK
KyAtIDgzZDM0ZjYzMDkzOWFhMTM1MzllMDM4OTViZWY4N2RhNzM4YzQxMjcgRG9uJ3QgZm9yZ2V0
IHRvIGZyZWUgcmVzb3VyY2VzIGluIGFuIGVhcmx5IHJldHVybgpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkveGRnbWltZS9zcmMveGRnbWltZS5jIGIvU291cmNlL1RoaXJkUGFydHkveGRn
bWltZS9zcmMveGRnbWltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5hOGQ3NTQxMzM2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21p
bWUvc3JjL3hkZ21pbWUuYwpAQCAtMCwwICsxLDk0NyBAQAorLyogLSotIG1vZGU6IEM7IGMtZmls
ZS1zdHlsZTogImdudSIgLSotICovCisvKiB4ZGdtaW1lLmM6IFhERyBNaW1lIFNwZWMgbWltZSBy
ZXNvbHZlci4gIEJhc2VkIG9uIHZlcnNpb24gMC4xMSBvZiB0aGUgc3BlYy4KKyAqCisgKiBNb3Jl
IGluZm8gY2FuIGJlIGZvdW5kIGF0IGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3N0YW5kYXJk
cy8KKyAqIAorICogQ29weXJpZ2h0IChDKSAyMDAzLDIwMDQgIFJlZCBIYXQsIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAwMywyMDA0ICBKb25hdGhhbiBCbGFuZGZvcmQgPGpyYkBhbHVtLm1pdC5l
ZHU+CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJz
aW9uIDIuMAorICogT3IgdW5kZXIgdGhlIGZvbGxvd2luZyB0ZXJtczoKKyAqIAorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRo
ZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkg
VGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu
CisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjbWFrZWNvbmZpZy5oIgor
I2VuZGlmCisKKyNpbmNsdWRlICJ4ZGdtaW1lLmgiCisjaW5jbHVkZSAieGRnbWltZWludC5oIgor
I2luY2x1ZGUgInhkZ21pbWVnbG9iLmgiCisjaW5jbHVkZSAieGRnbWltZW1hZ2ljLmgiCisjaW5j
bHVkZSAieGRnbWltZWFsaWFzLmgiCisjaW5jbHVkZSAieGRnbWltZWljb24uaCIKKyNpbmNsdWRl
ICJ4ZGdtaW1lcGFyZW50LmgiCisjaW5jbHVkZSAieGRnbWltZWNhY2hlLmgiCisjaW5jbHVkZSA8
c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2lu
Y2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dW5p
c3RkLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKK3R5cGVkZWYgc3RydWN0IFhkZ0RpclRpbWVM
aXN0IFhkZ0RpclRpbWVMaXN0OwordHlwZWRlZiBzdHJ1Y3QgWGRnQ2FsbGJhY2tMaXN0IFhkZ0Nh
bGxiYWNrTGlzdDsKKworc3RhdGljIGludCBuZWVkX3JlcmVhZCA9IFRSVUU7CitzdGF0aWMgdGlt
ZV90IGxhc3Rfc3RhdF90aW1lID0gMDsKKworc3RhdGljIFhkZ0dsb2JIYXNoICpnbG9iYWxfaGFz
aCA9IE5VTEw7CitzdGF0aWMgWGRnTWltZU1hZ2ljICpnbG9iYWxfbWFnaWMgPSBOVUxMOworc3Rh
dGljIFhkZ0FsaWFzTGlzdCAqYWxpYXNfbGlzdCA9IE5VTEw7CitzdGF0aWMgWGRnUGFyZW50TGlz
dCAqcGFyZW50X2xpc3QgPSBOVUxMOworc3RhdGljIFhkZ0RpclRpbWVMaXN0ICpkaXJfdGltZV9s
aXN0ID0gTlVMTDsKK3N0YXRpYyBYZGdDYWxsYmFja0xpc3QgKmNhbGxiYWNrX2xpc3QgPSBOVUxM
Oworc3RhdGljIFhkZ0ljb25MaXN0ICppY29uX2xpc3QgPSBOVUxMOworc3RhdGljIFhkZ0ljb25M
aXN0ICpnZW5lcmljX2ljb25fbGlzdCA9IE5VTEw7CisKK1hkZ01pbWVDYWNoZSAqKl9jYWNoZXMg
PSBOVUxMOworc3RhdGljIGludCBuX2NhY2hlcyA9IDA7CisKK2NvbnN0IGNoYXIgeGRnX21pbWVf
dHlwZV91bmtub3duW10gPSAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIjsKK2NvbnN0IGNoYXIg
eGRnX21pbWVfdHlwZV9lbXB0eVtdID0gImFwcGxpY2F0aW9uL3gtemVyb3NpemUiOworY29uc3Qg
Y2hhciB4ZGdfbWltZV90eXBlX3RleHRwbGFpbltdID0gInRleHQvcGxhaW4iOworCisKK2VudW0K
K3sKKyAgWERHX0NIRUNLRURfVU5DSEVDS0VELAorICBYREdfQ0hFQ0tFRF9WQUxJRCwKKyAgWERH
X0NIRUNLRURfSU5WQUxJRAorfTsKKworc3RydWN0IFhkZ0RpclRpbWVMaXN0Cit7CisgIHRpbWVf
dCBtdGltZTsKKyAgY2hhciAqZGlyZWN0b3J5X25hbWU7CisgIGludCBjaGVja2VkOworICBYZGdE
aXJUaW1lTGlzdCAqbmV4dDsKK307CisKK3N0cnVjdCBYZGdDYWxsYmFja0xpc3QKK3sKKyAgWGRn
Q2FsbGJhY2tMaXN0ICpuZXh0OworICBYZGdDYWxsYmFja0xpc3QgKnByZXY7CisgIGludCAgICAg
ICAgICAgICAgY2FsbGJhY2tfaWQ7CisgIFhkZ01pbWVDYWxsYmFjayAgY2FsbGJhY2s7CisgIHZv
aWQgICAgICAgICAgICAqZGF0YTsKKyAgWGRnTWltZURlc3Ryb3kgICBkZXN0cm95OworfTsKKwor
LyogRnVuY3Rpb24gY2FsbGVkIGJ5IHhkZ19ydW5fY29tbWFuZF9vbl9kaXJzLiAgSWYgaXQgcmV0
dXJucyBUUlVFLCBmdXJ0aGVyCisgKiBkaXJlY3RvcmllcyBhcmVuJ3QgbG9va2VkIGF0ICovCit0
eXBlZGVmIGludCAoKlhkZ0RpcmVjdG9yeUZ1bmMpIChjb25zdCBjaGFyICpkaXJlY3RvcnksCisJ
CQkJIHZvaWQgICAgICAgKnVzZXJfZGF0YSk7CisKK3N0YXRpYyB2b2lkCit4ZGdfZGlyX3RpbWVf
bGlzdF9hZGQgKGNoYXIgICAqZmlsZV9uYW1lLCAKKwkJICAgICAgIHRpbWVfdCAgbXRpbWUpCit7
CisgIFhkZ0RpclRpbWVMaXN0ICpsaXN0OworCisgIGZvciAobGlzdCA9IGRpcl90aW1lX2xpc3Q7
IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KSAKKyAgICB7CisgICAgICBpZiAoc3RyY21wIChsaXN0
LT5kaXJlY3RvcnlfbmFtZSwgZmlsZV9uYW1lKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAg
ZnJlZSAoZmlsZV9uYW1lKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cisg
IAorICBsaXN0ID0gY2FsbG9jICgxLCBzaXplb2YgKFhkZ0RpclRpbWVMaXN0KSk7CisgIGxpc3Qt
PmNoZWNrZWQgPSBYREdfQ0hFQ0tFRF9VTkNIRUNLRUQ7CisgIGxpc3QtPmRpcmVjdG9yeV9uYW1l
ID0gZmlsZV9uYW1lOworICBsaXN0LT5tdGltZSA9IG10aW1lOworICBsaXN0LT5uZXh0ID0gZGly
X3RpbWVfbGlzdDsKKyAgZGlyX3RpbWVfbGlzdCA9IGxpc3Q7Cit9CisgCitzdGF0aWMgdm9pZAor
eGRnX2Rpcl90aW1lX2xpc3RfZnJlZSAoWGRnRGlyVGltZUxpc3QgKmxpc3QpCit7CisgIFhkZ0Rp
clRpbWVMaXN0ICpuZXh0OworCisgIHdoaWxlIChsaXN0KQorICAgIHsKKyAgICAgIG5leHQgPSBs
aXN0LT5uZXh0OworICAgICAgZnJlZSAobGlzdC0+ZGlyZWN0b3J5X25hbWUpOworICAgICAgZnJl
ZSAobGlzdCk7CisgICAgICBsaXN0ID0gbmV4dDsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQKK3hk
Z19taW1lX2luaXRfZnJvbV9kaXJlY3RvcnkgKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSkKK3sKKyAg
Y2hhciAqZmlsZV9uYW1lOworICBzdHJ1Y3Qgc3RhdCBzdDsKKworICBhc3NlcnQgKGRpcmVjdG9y
eSAhPSBOVUxMKTsKKworICBmaWxlX25hbWUgPSBtYWxsb2MgKHN0cmxlbiAoZGlyZWN0b3J5KSAr
IHN0cmxlbiAoIi9taW1lL21pbWUuY2FjaGUiKSArIDEpOworICBzdHJjcHkgKGZpbGVfbmFtZSwg
ZGlyZWN0b3J5KTsgc3RyY2F0IChmaWxlX25hbWUsICIvbWltZS9taW1lLmNhY2hlIik7CisgIGlm
IChzdGF0IChmaWxlX25hbWUsICZzdCkgPT0gMCkKKyAgICB7CisgICAgICBYZGdNaW1lQ2FjaGUg
KmNhY2hlID0gX3hkZ19taW1lX2NhY2hlX25ld19mcm9tX2ZpbGUgKGZpbGVfbmFtZSk7CisKKyAg
ICAgIGlmIChjYWNoZSAhPSBOVUxMKQorCXsKKwkgIHhkZ19kaXJfdGltZV9saXN0X2FkZCAoZmls
ZV9uYW1lLCBzdC5zdF9tdGltZSk7CisKKwkgIF9jYWNoZXMgPSByZWFsbG9jIChfY2FjaGVzLCBz
aXplb2YgKFhkZ01pbWVDYWNoZSAqKSAqIChuX2NhY2hlcyArIDIpKTsKKwkgIF9jYWNoZXNbbl9j
YWNoZXNdID0gY2FjaGU7CisgICAgICAgICAgX2NhY2hlc1tuX2NhY2hlcyArIDFdID0gTlVMTDsK
KwkgIG5fY2FjaGVzKys7CisKKwkgIHJldHVybiBGQUxTRTsKKwl9CisgICAgfQorICBmcmVlIChm
aWxlX25hbWUpOworCisgIGZpbGVfbmFtZSA9IG1hbGxvYyAoc3RybGVuIChkaXJlY3RvcnkpICsg
c3RybGVuICgiL21pbWUvZ2xvYnMyIikgKyAxKTsKKyAgc3RyY3B5IChmaWxlX25hbWUsIGRpcmVj
dG9yeSk7IHN0cmNhdCAoZmlsZV9uYW1lLCAiL21pbWUvZ2xvYnMyIik7CisgIGlmIChzdGF0IChm
aWxlX25hbWUsICZzdCkgPT0gMCkKKyAgICB7CisgICAgICBfeGRnX21pbWVfZ2xvYl9yZWFkX2Zy
b21fZmlsZSAoZ2xvYmFsX2hhc2gsIGZpbGVfbmFtZSwgVFJVRSk7CisgICAgICB4ZGdfZGlyX3Rp
bWVfbGlzdF9hZGQgKGZpbGVfbmFtZSwgc3Quc3RfbXRpbWUpOworICAgIH0KKyAgZWxzZQorICAg
IHsKKyAgICAgIGZyZWUgKGZpbGVfbmFtZSk7CisgICAgICBmaWxlX25hbWUgPSBtYWxsb2MgKHN0
cmxlbiAoZGlyZWN0b3J5KSArIHN0cmxlbiAoIi9taW1lL2dsb2JzIikgKyAxKTsKKyAgICAgIHN0
cmNweSAoZmlsZV9uYW1lLCBkaXJlY3RvcnkpOyBzdHJjYXQgKGZpbGVfbmFtZSwgIi9taW1lL2ds
b2JzIik7CisgICAgICBpZiAoc3RhdCAoZmlsZV9uYW1lLCAmc3QpID09IDApCisgICAgICAgIHsK
KyAgICAgICAgICBfeGRnX21pbWVfZ2xvYl9yZWFkX2Zyb21fZmlsZSAoZ2xvYmFsX2hhc2gsIGZp
bGVfbmFtZSwgRkFMU0UpOworICAgICAgICAgIHhkZ19kaXJfdGltZV9saXN0X2FkZCAoZmlsZV9u
YW1lLCBzdC5zdF9tdGltZSk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgIGZyZWUgKGZpbGVfbmFtZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgZmlsZV9uYW1l
ID0gbWFsbG9jIChzdHJsZW4gKGRpcmVjdG9yeSkgKyBzdHJsZW4gKCIvbWltZS9tYWdpYyIpICsg
MSk7CisgIHN0cmNweSAoZmlsZV9uYW1lLCBkaXJlY3RvcnkpOyBzdHJjYXQgKGZpbGVfbmFtZSwg
Ii9taW1lL21hZ2ljIik7CisgIGlmIChzdGF0IChmaWxlX25hbWUsICZzdCkgPT0gMCkKKyAgICB7
CisgICAgICBfeGRnX21pbWVfbWFnaWNfcmVhZF9mcm9tX2ZpbGUgKGdsb2JhbF9tYWdpYywgZmls
ZV9uYW1lKTsKKyAgICAgIHhkZ19kaXJfdGltZV9saXN0X2FkZCAoZmlsZV9uYW1lLCBzdC5zdF9t
dGltZSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZnJlZSAoZmlsZV9uYW1lKTsKKyAg
ICB9CisKKyAgZmlsZV9uYW1lID0gbWFsbG9jIChzdHJsZW4gKGRpcmVjdG9yeSkgKyBzdHJsZW4g
KCIvbWltZS9hbGlhc2VzIikgKyAxKTsKKyAgc3RyY3B5IChmaWxlX25hbWUsIGRpcmVjdG9yeSk7
IHN0cmNhdCAoZmlsZV9uYW1lLCAiL21pbWUvYWxpYXNlcyIpOworICBfeGRnX21pbWVfYWxpYXNf
cmVhZF9mcm9tX2ZpbGUgKGFsaWFzX2xpc3QsIGZpbGVfbmFtZSk7CisgIGZyZWUgKGZpbGVfbmFt
ZSk7CisKKyAgZmlsZV9uYW1lID0gbWFsbG9jIChzdHJsZW4gKGRpcmVjdG9yeSkgKyBzdHJsZW4g
KCIvbWltZS9zdWJjbGFzc2VzIikgKyAxKTsKKyAgc3RyY3B5IChmaWxlX25hbWUsIGRpcmVjdG9y
eSk7IHN0cmNhdCAoZmlsZV9uYW1lLCAiL21pbWUvc3ViY2xhc3NlcyIpOworICBfeGRnX21pbWVf
cGFyZW50X3JlYWRfZnJvbV9maWxlIChwYXJlbnRfbGlzdCwgZmlsZV9uYW1lKTsKKyAgZnJlZSAo
ZmlsZV9uYW1lKTsKKworICBmaWxlX25hbWUgPSBtYWxsb2MgKHN0cmxlbiAoZGlyZWN0b3J5KSAr
IHN0cmxlbiAoIi9taW1lL2ljb25zIikgKyAxKTsKKyAgc3RyY3B5IChmaWxlX25hbWUsIGRpcmVj
dG9yeSk7IHN0cmNhdCAoZmlsZV9uYW1lLCAiL21pbWUvaWNvbnMiKTsKKyAgX3hkZ19taW1lX2lj
b25fcmVhZF9mcm9tX2ZpbGUgKGljb25fbGlzdCwgZmlsZV9uYW1lKTsKKyAgZnJlZSAoZmlsZV9u
YW1lKTsKKworICBmaWxlX25hbWUgPSBtYWxsb2MgKHN0cmxlbiAoZGlyZWN0b3J5KSArIHN0cmxl
biAoIi9taW1lL2dlbmVyaWMtaWNvbnMiKSArIDEpOworICBzdHJjcHkgKGZpbGVfbmFtZSwgZGly
ZWN0b3J5KTsgc3RyY2F0IChmaWxlX25hbWUsICIvbWltZS9nZW5lcmljLWljb25zIik7CisgIF94
ZGdfbWltZV9pY29uX3JlYWRfZnJvbV9maWxlIChnZW5lcmljX2ljb25fbGlzdCwgZmlsZV9uYW1l
KTsKKyAgZnJlZSAoZmlsZV9uYW1lKTsKKworICByZXR1cm4gRkFMU0U7IC8qIEtlZXAgcHJvY2Vz
c2luZyAqLworfQorCisvKiBSdW5zIGEgY29tbWFuZCBvbiBhbGwgdGhlIGRpcmVjdG9yaWVzIGlu
IHRoZSBzZWFyY2ggcGF0aCAqLworc3RhdGljIHZvaWQKK3hkZ19ydW5fY29tbWFuZF9vbl9kaXJz
IChYZGdEaXJlY3RvcnlGdW5jICBmdW5jLAorCQkJIHZvaWQgICAgICAgICAgICAgKnVzZXJfZGF0
YSkKK3sKKyAgY29uc3QgY2hhciAqeGRnX2RhdGFfaG9tZTsKKyAgY29uc3QgY2hhciAqeGRnX2Rh
dGFfZGlyczsKKyAgY29uc3QgY2hhciAqcHRyOworCisgIHhkZ19kYXRhX2hvbWUgPSBnZXRlbnYg
KCJYREdfREFUQV9IT01FIik7CisgIGlmICh4ZGdfZGF0YV9ob21lKQorICAgIHsKKyAgICAgIGlm
ICgoZnVuYykgKHhkZ19kYXRhX2hvbWUsIHVzZXJfZGF0YSkpCisJcmV0dXJuOworICAgIH0KKyAg
ZWxzZQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKmhvbWU7CisKKyAgICAgIGhvbWUgPSBnZXRl
bnYgKCJIT01FIik7CisgICAgICBpZiAoaG9tZSAhPSBOVUxMKQorCXsKKwkgIGNoYXIgKmd1ZXNz
ZWRfeGRnX2hvbWU7CisJICBpbnQgc3RvcF9wcm9jZXNzaW5nOworCisJICBndWVzc2VkX3hkZ19o
b21lID0gbWFsbG9jIChzdHJsZW4gKGhvbWUpICsgc3RybGVuICgiLy5sb2NhbC9zaGFyZS8iKSAr
IDEpOworCSAgc3RyY3B5IChndWVzc2VkX3hkZ19ob21lLCBob21lKTsKKwkgIHN0cmNhdCAoZ3Vl
c3NlZF94ZGdfaG9tZSwgIi8ubG9jYWwvc2hhcmUvIik7CisJICBzdG9wX3Byb2Nlc3NpbmcgPSAo
ZnVuYykgKGd1ZXNzZWRfeGRnX2hvbWUsIHVzZXJfZGF0YSk7CisJICBmcmVlIChndWVzc2VkX3hk
Z19ob21lKTsKKworCSAgaWYgKHN0b3BfcHJvY2Vzc2luZykKKwkgICAgcmV0dXJuOworCX0KKyAg
ICB9CisKKyAgeGRnX2RhdGFfZGlycyA9IGdldGVudiAoIlhER19EQVRBX0RJUlMiKTsKKyAgaWYg
KHhkZ19kYXRhX2RpcnMgPT0gTlVMTCkKKyAgICB4ZGdfZGF0YV9kaXJzID0gIi91c3IvbG9jYWwv
c2hhcmUvOi91c3Ivc2hhcmUvIjsKKworICBwdHIgPSB4ZGdfZGF0YV9kaXJzOworCisgIHdoaWxl
ICgqcHRyICE9ICdcMDAwJykKKyAgICB7CisgICAgICBjb25zdCBjaGFyICplbmRfcHRyOworICAg
ICAgY2hhciAqZGlyOworICAgICAgaW50IGxlbjsKKyAgICAgIGludCBzdG9wX3Byb2Nlc3Npbmc7
CisKKyAgICAgIGVuZF9wdHIgPSBwdHI7CisgICAgICB3aGlsZSAoKmVuZF9wdHIgIT0gJzonICYm
ICplbmRfcHRyICE9ICdcMDAwJykKKwllbmRfcHRyICsrOworCisgICAgICBpZiAoZW5kX3B0ciA9
PSBwdHIpCisJeworCSAgcHRyKys7CisJICBjb250aW51ZTsKKwl9CisKKyAgICAgIGlmICgqZW5k
X3B0ciA9PSAnOicpCisJbGVuID0gZW5kX3B0ciAtIHB0cjsKKyAgICAgIGVsc2UKKwlsZW4gPSBl
bmRfcHRyIC0gcHRyICsgMTsKKyAgICAgIGRpciA9IG1hbGxvYyAobGVuICsgMSk7CisgICAgICBz
dHJuY3B5IChkaXIsIHB0ciwgbGVuKTsKKyAgICAgIGRpcltsZW5dID0gJ1wwJzsKKyAgICAgIHN0
b3BfcHJvY2Vzc2luZyA9IChmdW5jKSAoZGlyLCB1c2VyX2RhdGEpOworICAgICAgZnJlZSAoZGly
KTsKKworICAgICAgaWYgKHN0b3BfcHJvY2Vzc2luZykKKwlyZXR1cm47CisKKyAgICAgIHB0ciA9
IGVuZF9wdHI7CisgICAgfQorfQorCisvKiBDaGVja3MgZmlsZV9wYXRoIHRvIG1ha2Ugc3VyZSBp
dCBoYXMgdGhlIHNhbWUgbXRpbWUgYXMgbGFzdCB0aW1lIGl0IHdhcworICogY2hlY2tlZC4gIElm
IGl0IGhhcyBhIGRpZmZlcmVudCBtdGltZSwgb3IgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCwg
aXQKKyAqIHJldHVybnMgRkFMU0UuCisgKgorICogRklYTUU6IFRoaXMgZG9lc24ndCBwcm90ZWN0
IGFnYWluc3QgcGVybWlzc2lvbiBjaGFuZ2VzLgorICovCitzdGF0aWMgaW50Cit4ZGdfY2hlY2tf
ZmlsZSAoY29uc3QgY2hhciAqZmlsZV9wYXRoLAorICAgICAgICAgICAgICAgIGludCAgICAgICAg
KmV4aXN0cykKK3sKKyAgc3RydWN0IHN0YXQgc3Q7CisKKyAgLyogSWYgdGhlIGZpbGUgZXhpc3Rz
ICovCisgIGlmIChzdGF0IChmaWxlX3BhdGgsICZzdCkgPT0gMCkKKyAgICB7CisgICAgICBYZGdE
aXJUaW1lTGlzdCAqbGlzdDsKKworICAgICAgaWYgKGV4aXN0cykKKyAgICAgICAgKmV4aXN0cyA9
IFRSVUU7CisKKyAgICAgIGZvciAobGlzdCA9IGRpcl90aW1lX2xpc3Q7IGxpc3Q7IGxpc3QgPSBs
aXN0LT5uZXh0KQorCXsKKwkgIGlmICghIHN0cmNtcCAobGlzdC0+ZGlyZWN0b3J5X25hbWUsIGZp
bGVfcGF0aCkpCisJICAgIHsKKwkgICAgICBpZiAoc3Quc3RfbXRpbWUgPT0gbGlzdC0+bXRpbWUp
CisJCWxpc3QtPmNoZWNrZWQgPSBYREdfQ0hFQ0tFRF9WQUxJRDsKKwkgICAgICBlbHNlIAorCQls
aXN0LT5jaGVja2VkID0gWERHX0NIRUNLRURfSU5WQUxJRDsKKworCSAgICAgIHJldHVybiAobGlz
dC0+Y2hlY2tlZCAhPSBYREdfQ0hFQ0tFRF9WQUxJRCk7CisJICAgIH0KKwl9CisgICAgICByZXR1
cm4gVFJVRTsKKyAgICB9CisKKyAgaWYgKGV4aXN0cykKKyAgICAqZXhpc3RzID0gRkFMU0U7CisK
KyAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgaW50Cit4ZGdfY2hlY2tfZGlyIChjb25zdCBj
aGFyICpkaXJlY3RvcnksCisJICAgICAgIGludCAgICAgICAgKmludmFsaWRfZGlyX2xpc3QpCit7
CisgIGludCBpbnZhbGlkLCBleGlzdHM7CisgIGNoYXIgKmZpbGVfbmFtZTsKKworICBhc3NlcnQg
KGRpcmVjdG9yeSAhPSBOVUxMKTsKKworICAvKiBDaGVjayB0aGUgbWltZS5jYWNoZSBmaWxlICov
CisgIGZpbGVfbmFtZSA9IG1hbGxvYyAoc3RybGVuIChkaXJlY3RvcnkpICsgc3RybGVuICgiL21p
bWUvbWltZS5jYWNoZSIpICsgMSk7CisgIHN0cmNweSAoZmlsZV9uYW1lLCBkaXJlY3RvcnkpOyBz
dHJjYXQgKGZpbGVfbmFtZSwgIi9taW1lL21pbWUuY2FjaGUiKTsKKyAgaW52YWxpZCA9IHhkZ19j
aGVja19maWxlIChmaWxlX25hbWUsICZleGlzdHMpOworICBmcmVlIChmaWxlX25hbWUpOworICBp
ZiAoaW52YWxpZCkKKyAgICB7CisgICAgICAqaW52YWxpZF9kaXJfbGlzdCA9IFRSVUU7CisgICAg
ICByZXR1cm4gVFJVRTsKKyAgICB9CisgIGVsc2UgaWYgKGV4aXN0cykKKyAgICB7CisgICAgICBy
ZXR1cm4gRkFMU0U7CisgICAgfQorCisgIC8qIENoZWNrIHRoZSBnbG9icyBmaWxlICovCisgIGZp
bGVfbmFtZSA9IG1hbGxvYyAoc3RybGVuIChkaXJlY3RvcnkpICsgc3RybGVuICgiL21pbWUvZ2xv
YnMiKSArIDEpOworICBzdHJjcHkgKGZpbGVfbmFtZSwgZGlyZWN0b3J5KTsgc3RyY2F0IChmaWxl
X25hbWUsICIvbWltZS9nbG9icyIpOworICBpbnZhbGlkID0geGRnX2NoZWNrX2ZpbGUgKGZpbGVf
bmFtZSwgTlVMTCk7CisgIGZyZWUgKGZpbGVfbmFtZSk7CisgIGlmIChpbnZhbGlkKQorICAgIHsK
KyAgICAgICppbnZhbGlkX2Rpcl9saXN0ID0gVFJVRTsKKyAgICAgIHJldHVybiBUUlVFOworICAg
IH0KKworICAvKiBDaGVjayB0aGUgbWFnaWMgZmlsZSAqLworICBmaWxlX25hbWUgPSBtYWxsb2Mg
KHN0cmxlbiAoZGlyZWN0b3J5KSArIHN0cmxlbiAoIi9taW1lL21hZ2ljIikgKyAxKTsKKyAgc3Ry
Y3B5IChmaWxlX25hbWUsIGRpcmVjdG9yeSk7IHN0cmNhdCAoZmlsZV9uYW1lLCAiL21pbWUvbWFn
aWMiKTsKKyAgaW52YWxpZCA9IHhkZ19jaGVja19maWxlIChmaWxlX25hbWUsIE5VTEwpOworICBm
cmVlIChmaWxlX25hbWUpOworICBpZiAoaW52YWxpZCkKKyAgICB7CisgICAgICAqaW52YWxpZF9k
aXJfbGlzdCA9IFRSVUU7CisgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgcmV0dXJuIEZB
TFNFOyAvKiBLZWVwIHByb2Nlc3NpbmcgKi8KK30KKworLyogV2Fsa3MgdGhyb3VnaCBhbGwgdGhl
IG1pbWUgZmlsZXMgc3RhdCgpaW5nIHRoZW0gdG8gc2VlIGlmIHRoZXkndmUgY2hhbmdlZC4KKyAq
IFJldHVybnMgVFJVRSBpZiB0aGV5IGhhdmUuICovCitzdGF0aWMgaW50Cit4ZGdfY2hlY2tfZGly
cyAodm9pZCkKK3sKKyAgWGRnRGlyVGltZUxpc3QgKmxpc3Q7CisgIGludCBpbnZhbGlkX2Rpcl9s
aXN0ID0gRkFMU0U7CisKKyAgZm9yIChsaXN0ID0gZGlyX3RpbWVfbGlzdDsgbGlzdDsgbGlzdCA9
IGxpc3QtPm5leHQpCisgICAgbGlzdC0+Y2hlY2tlZCA9IFhER19DSEVDS0VEX1VOQ0hFQ0tFRDsK
KworICB4ZGdfcnVuX2NvbW1hbmRfb25fZGlycyAoKFhkZ0RpcmVjdG9yeUZ1bmMpIHhkZ19jaGVj
a19kaXIsCisJCQkgICAmaW52YWxpZF9kaXJfbGlzdCk7CisKKyAgaWYgKGludmFsaWRfZGlyX2xp
c3QpCisgICAgcmV0dXJuIFRSVUU7CisKKyAgZm9yIChsaXN0ID0gZGlyX3RpbWVfbGlzdDsgbGlz
dDsgbGlzdCA9IGxpc3QtPm5leHQpCisgICAgeworICAgICAgaWYgKGxpc3QtPmNoZWNrZWQgIT0g
WERHX0NIRUNLRURfVkFMSUQpCisJcmV0dXJuIFRSVUU7CisgICAgfQorCisgIHJldHVybiBGQUxT
RTsKK30KKworLyogV2Ugd2FudCB0byBhdm9pZCBzdGF0KClpbmcgb24gZXZlcnkgc2luZ2xlIG1p
bWUgY2FsbCwgc28gd2Ugb25seSBsb29rIGZvcgorICogbmV3ZXIgZmlsZXMgZXZlcnkgNSBzZWNv
bmRzLiAgVGhpcyB3aWxsIHJldHVybiBUUlVFIGlmIHdlIG5lZWQgdG8gcmVyZWFkIHRoZQorICog
bWltZSBkYXRhIGZyb20gZGlzay4KKyAqLworc3RhdGljIGludAoreGRnX2NoZWNrX3RpbWVfYW5k
X2RpcnMgKHZvaWQpCit7CisgIHN0cnVjdCB0aW1ldmFsIHR2OworICB0aW1lX3QgY3VycmVudF90
aW1lOworICBpbnQgcmV0dmFsID0gRkFMU0U7CisKKyAgZ2V0dGltZW9mZGF5ICgmdHYsIE5VTEwp
OworICBjdXJyZW50X3RpbWUgPSB0di50dl9zZWM7CisKKyAgaWYgKGN1cnJlbnRfdGltZSA+PSBs
YXN0X3N0YXRfdGltZSArIDUpCisgICAgeworICAgICAgcmV0dmFsID0geGRnX2NoZWNrX2RpcnMg
KCk7CisgICAgICBsYXN0X3N0YXRfdGltZSA9IGN1cnJlbnRfdGltZTsKKyAgICB9CisKKyAgcmV0
dXJuIHJldHZhbDsKK30KKworLyogQ2FsbGVkIGluIGV2ZXJ5IHB1YmxpYyBmdW5jdGlvbi4gIEl0
IHJlbG9hZHMgdGhlIGhhc2ggZnVuY3Rpb24gaWYgbmVlZCBiZS4KKyAqLworc3RhdGljIHZvaWQK
K3hkZ19taW1lX2luaXQgKHZvaWQpCit7CisgIGlmICh4ZGdfY2hlY2tfdGltZV9hbmRfZGlycyAo
KSkKKyAgICB7CisgICAgICB4ZGdfbWltZV9zaHV0ZG93biAoKTsKKyAgICB9CisKKyAgaWYgKG5l
ZWRfcmVyZWFkKQorICAgIHsKKyAgICAgIGdsb2JhbF9oYXNoID0gX3hkZ19nbG9iX2hhc2hfbmV3
ICgpOworICAgICAgZ2xvYmFsX21hZ2ljID0gX3hkZ19taW1lX21hZ2ljX25ldyAoKTsKKyAgICAg
IGFsaWFzX2xpc3QgPSBfeGRnX21pbWVfYWxpYXNfbGlzdF9uZXcgKCk7CisgICAgICBwYXJlbnRf
bGlzdCA9IF94ZGdfbWltZV9wYXJlbnRfbGlzdF9uZXcgKCk7CisgICAgICBpY29uX2xpc3QgPSBf
eGRnX21pbWVfaWNvbl9saXN0X25ldyAoKTsKKyAgICAgIGdlbmVyaWNfaWNvbl9saXN0ID0gX3hk
Z19taW1lX2ljb25fbGlzdF9uZXcgKCk7CisKKyAgICAgIHhkZ19ydW5fY29tbWFuZF9vbl9kaXJz
ICgoWGRnRGlyZWN0b3J5RnVuYykgeGRnX21pbWVfaW5pdF9mcm9tX2RpcmVjdG9yeSwKKwkJCSAg
ICAgICBOVUxMKTsKKworICAgICAgbmVlZF9yZXJlYWQgPSBGQUxTRTsKKyAgICB9Cit9CisKK2Nv
bnN0IGNoYXIgKgoreGRnX21pbWVfZ2V0X21pbWVfdHlwZV9mb3JfZGF0YSAoY29uc3Qgdm9pZCAq
ZGF0YSwKKwkJCQkgc2l6ZV90ICAgICAgbGVuLAorCQkJCSBpbnQgICAgICAgICpyZXN1bHRfcHJp
bykKK3sKKyAgY29uc3QgY2hhciAqbWltZV90eXBlOworCisgIGlmIChsZW4gPT0gMCkKKyAgICB7
CisgICAgICAqcmVzdWx0X3ByaW8gPSAxMDA7CisgICAgICByZXR1cm4gWERHX01JTUVfVFlQRV9F
TVBUWTsKKyAgICB9CisKKyAgeGRnX21pbWVfaW5pdCAoKTsKKworICBpZiAoX2NhY2hlcykKKyAg
ICBtaW1lX3R5cGUgPSBfeGRnX21pbWVfY2FjaGVfZ2V0X21pbWVfdHlwZV9mb3JfZGF0YSAoZGF0
YSwgbGVuLCByZXN1bHRfcHJpbyk7CisgIGVsc2UKKyAgICBtaW1lX3R5cGUgPSBfeGRnX21pbWVf
bWFnaWNfbG9va3VwX2RhdGEgKGdsb2JhbF9tYWdpYywgZGF0YSwgbGVuLCByZXN1bHRfcHJpbywg
TlVMTCwgMCk7CisKKyAgaWYgKG1pbWVfdHlwZSkKKyAgICByZXR1cm4gbWltZV90eXBlOworCisg
IHJldHVybiBfeGRnX2JpbmFyeV9vcl90ZXh0X2ZhbGxiYWNrKGRhdGEsIGxlbik7Cit9CisKK2Nv
bnN0IGNoYXIgKgoreGRnX21pbWVfZ2V0X21pbWVfdHlwZV9mb3JfZmlsZSAoY29uc3QgY2hhciAg
KmZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0
ICpzdGF0YnVmKQoreworICBjb25zdCBjaGFyICptaW1lX3R5cGU7CisgIC8qIGN1cnJlbnRseSwg
b25seSBhIGZldyBnbG9icyBvY2N1ciB0d2ljZSwgYW5kIG5vbmUKKyAgICogbW9yZSBvZnRlbiwg
c28gNSBzZWVtcyBwbGVudHkuCisgICAqLworICBjb25zdCBjaGFyICptaW1lX3R5cGVzWzVdOwor
ICBGSUxFICpmaWxlOworICB1bnNpZ25lZCBjaGFyICpkYXRhOworICBpbnQgbWF4X2V4dGVudDsK
KyAgaW50IGJ5dGVzX3JlYWQ7CisgIHN0cnVjdCBzdGF0IGJ1ZjsKKyAgY29uc3QgY2hhciAqYmFz
ZV9uYW1lOworICBpbnQgbjsKKworICBpZiAoZmlsZV9uYW1lID09IE5VTEwpCisgICAgcmV0dXJu
IE5VTEw7CisgIGlmICghIF94ZGdfdXRmOF92YWxpZGF0ZSAoZmlsZV9uYW1lKSkKKyAgICByZXR1
cm4gTlVMTDsKKworICB4ZGdfbWltZV9pbml0ICgpOworCisgIGlmIChfY2FjaGVzKQorICAgIHJl
dHVybiBfeGRnX21pbWVfY2FjaGVfZ2V0X21pbWVfdHlwZV9mb3JfZmlsZSAoZmlsZV9uYW1lLCBz
dGF0YnVmKTsKKworICBiYXNlX25hbWUgPSBfeGRnX2dldF9iYXNlX25hbWUgKGZpbGVfbmFtZSk7
CisgIG4gPSBfeGRnX2dsb2JfaGFzaF9sb29rdXBfZmlsZV9uYW1lIChnbG9iYWxfaGFzaCwgYmFz
ZV9uYW1lLCBtaW1lX3R5cGVzLCA1KTsKKworICBpZiAobiA9PSAxKQorICAgIHJldHVybiBtaW1l
X3R5cGVzWzBdOworCisgIGlmICghc3RhdGJ1ZikKKyAgICB7CisgICAgICBpZiAoc3RhdCAoZmls
ZV9uYW1lLCAmYnVmKSAhPSAwKQorCXJldHVybiBYREdfTUlNRV9UWVBFX1VOS05PV047CisKKyAg
ICAgIHN0YXRidWYgPSAmYnVmOworICAgIH0KKworICBpZiAoIVNfSVNSRUcgKHN0YXRidWYtPnN0
X21vZGUpKQorICAgIHJldHVybiBYREdfTUlNRV9UWVBFX1VOS05PV047CisKKyAgLyogRklYTUU6
IE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgbWF4X2V4dGVudCBpc24ndCB0b3RhbGx5IGJyb2tlbi4g
IFRoaXMgY291bGQKKyAgICogYmUgbGFyZ2UgYW5kIG5lZWQgZ2V0dGluZyBmcm9tIGEgc3RyZWFt
IGluc3RlYWQgb2YganVzdCByZWFkaW5nIGl0IGFsbAorICAgKiBpbi4gKi8KKyAgbWF4X2V4dGVu
dCA9IF94ZGdfbWltZV9tYWdpY19nZXRfYnVmZmVyX2V4dGVudHMgKGdsb2JhbF9tYWdpYyk7Cisg
IGRhdGEgPSBtYWxsb2MgKG1heF9leHRlbnQpOworICBpZiAoZGF0YSA9PSBOVUxMKQorICAgIHJl
dHVybiBYREdfTUlNRV9UWVBFX1VOS05PV047CisgICAgICAgIAorICBmaWxlID0gZm9wZW4gKGZp
bGVfbmFtZSwgInIiKTsKKyAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICB7CisgICAgICBmcmVlIChk
YXRhKTsKKyAgICAgIHJldHVybiBYREdfTUlNRV9UWVBFX1VOS05PV047CisgICAgfQorCisgIGJ5
dGVzX3JlYWQgPSBmcmVhZCAoZGF0YSwgMSwgbWF4X2V4dGVudCwgZmlsZSk7CisgIGlmIChmZXJy
b3IgKGZpbGUpKQorICAgIHsKKyAgICAgIGZyZWUgKGRhdGEpOworICAgICAgZmNsb3NlIChmaWxl
KTsKKyAgICAgIHJldHVybiBYREdfTUlNRV9UWVBFX1VOS05PV047CisgICAgfQorCisgIG1pbWVf
dHlwZSA9IF94ZGdfbWltZV9tYWdpY19sb29rdXBfZGF0YSAoZ2xvYmFsX21hZ2ljLCBkYXRhLCBi
eXRlc19yZWFkLCBOVUxMLAorCQkJCQkgICBtaW1lX3R5cGVzLCBuKTsKKworICBmcmVlIChkYXRh
KTsKKyAgZmNsb3NlIChmaWxlKTsKKworICBpZiAobWltZV90eXBlKQorICAgIHJldHVybiBtaW1l
X3R5cGU7CisKKyAgcmV0dXJuIF94ZGdfYmluYXJ5X29yX3RleHRfZmFsbGJhY2soZGF0YSwgYnl0
ZXNfcmVhZCk7Cit9CisKK2NvbnN0IGNoYXIgKgoreGRnX21pbWVfZ2V0X21pbWVfdHlwZV9mcm9t
X2ZpbGVfbmFtZSAoY29uc3QgY2hhciAqZmlsZV9uYW1lKQoreworICBjb25zdCBjaGFyICptaW1l
X3R5cGU7CisKKyAgeGRnX21pbWVfaW5pdCAoKTsKKworICBpZiAoX2NhY2hlcykKKyAgICByZXR1
cm4gX3hkZ19taW1lX2NhY2hlX2dldF9taW1lX3R5cGVfZnJvbV9maWxlX25hbWUgKGZpbGVfbmFt
ZSk7CisKKyAgaWYgKF94ZGdfZ2xvYl9oYXNoX2xvb2t1cF9maWxlX25hbWUgKGdsb2JhbF9oYXNo
LCBmaWxlX25hbWUsICZtaW1lX3R5cGUsIDEpKQorICAgIHJldHVybiBtaW1lX3R5cGU7CisgIGVs
c2UKKyAgICByZXR1cm4gWERHX01JTUVfVFlQRV9VTktOT1dOOworfQorCitpbnQKK3hkZ19taW1l
X2dldF9taW1lX3R5cGVzX2Zyb21fZmlsZV9uYW1lIChjb25zdCBjaGFyICpmaWxlX25hbWUsCisJ
CQkJCWNvbnN0IGNoYXIgICptaW1lX3R5cGVzW10sCisJCQkJCWludCAgICAgICAgICBuX21pbWVf
dHlwZXMpCit7CisgIHhkZ19taW1lX2luaXQgKCk7CisgIAorICBpZiAoX2NhY2hlcykKKyAgICBy
ZXR1cm4gX3hkZ19taW1lX2NhY2hlX2dldF9taW1lX3R5cGVzX2Zyb21fZmlsZV9uYW1lIChmaWxl
X25hbWUsIG1pbWVfdHlwZXMsIG5fbWltZV90eXBlcyk7CisgIAorICByZXR1cm4gX3hkZ19nbG9i
X2hhc2hfbG9va3VwX2ZpbGVfbmFtZSAoZ2xvYmFsX2hhc2gsIGZpbGVfbmFtZSwgbWltZV90eXBl
cywgbl9taW1lX3R5cGVzKTsKK30KKworaW50Cit4ZGdfbWltZV9pc192YWxpZF9taW1lX3R5cGUg
KGNvbnN0IGNoYXIgKm1pbWVfdHlwZSkKK3sKKyAgLyogRklYTUU6IFdlIHNob3VsZCBtYWtlIHRo
aXMgYSBiZXR0ZXIgdGVzdAorICAgKi8KKyAgcmV0dXJuIF94ZGdfdXRmOF92YWxpZGF0ZSAobWlt
ZV90eXBlKTsKK30KKwordm9pZAoreGRnX21pbWVfc2h1dGRvd24gKHZvaWQpCit7CisgIFhkZ0Nh
bGxiYWNrTGlzdCAqbGlzdDsKKworICAvKiBGSVhNRTogTmVlZCB0byBtYWtlIHRoaXMgKGFuZCB0
aGUgd2hvbGUgbGlicmFyeSkgdGhyZWFkIHNhZmUgKi8KKyAgaWYgKGRpcl90aW1lX2xpc3QpCisg
ICAgeworICAgICAgeGRnX2Rpcl90aW1lX2xpc3RfZnJlZSAoZGlyX3RpbWVfbGlzdCk7CisgICAg
ICBkaXJfdGltZV9saXN0ID0gTlVMTDsKKyAgICB9CisJCisgIGlmIChnbG9iYWxfaGFzaCkKKyAg
ICB7CisgICAgICBfeGRnX2dsb2JfaGFzaF9mcmVlIChnbG9iYWxfaGFzaCk7CisgICAgICBnbG9i
YWxfaGFzaCA9IE5VTEw7CisgICAgfQorICBpZiAoZ2xvYmFsX21hZ2ljKQorICAgIHsKKyAgICAg
IF94ZGdfbWltZV9tYWdpY19mcmVlIChnbG9iYWxfbWFnaWMpOworICAgICAgZ2xvYmFsX21hZ2lj
ID0gTlVMTDsKKyAgICB9CisKKyAgaWYgKGFsaWFzX2xpc3QpCisgICAgeworICAgICAgX3hkZ19t
aW1lX2FsaWFzX2xpc3RfZnJlZSAoYWxpYXNfbGlzdCk7CisgICAgICBhbGlhc19saXN0ID0gTlVM
TDsKKyAgICB9CisKKyAgaWYgKHBhcmVudF9saXN0KQorICAgIHsKKyAgICAgIF94ZGdfbWltZV9w
YXJlbnRfbGlzdF9mcmVlIChwYXJlbnRfbGlzdCk7CisgICAgICBwYXJlbnRfbGlzdCA9IE5VTEw7
CisgICAgfQorCisgIGlmIChpY29uX2xpc3QpCisgICAgeworICAgICAgX3hkZ19taW1lX2ljb25f
bGlzdF9mcmVlIChpY29uX2xpc3QpOworICAgICAgaWNvbl9saXN0ID0gTlVMTDsKKyAgICB9CisK
KyAgaWYgKGdlbmVyaWNfaWNvbl9saXN0KQorICAgIHsKKyAgICAgIF94ZGdfbWltZV9pY29uX2xp
c3RfZnJlZSAoZ2VuZXJpY19pY29uX2xpc3QpOworICAgICAgZ2VuZXJpY19pY29uX2xpc3QgPSBO
VUxMOworICAgIH0KKyAgCisgIGlmIChfY2FjaGVzKQorICAgIHsKKyAgICAgIGludCBpOworCisg
ICAgICBmb3IgKGkgPSAwOyBpIDwgbl9jYWNoZXM7IGkrKykKKyAgICAgICAgX3hkZ19taW1lX2Nh
Y2hlX3VucmVmIChfY2FjaGVzW2ldKTsKKyAgICAgIGZyZWUgKF9jYWNoZXMpOworICAgICAgX2Nh
Y2hlcyA9IE5VTEw7CisgICAgICBuX2NhY2hlcyA9IDA7CisgICAgfQorCisgIGZvciAobGlzdCA9
IGNhbGxiYWNrX2xpc3Q7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KQorICAgIChsaXN0LT5jYWxs
YmFjaykgKGxpc3QtPmRhdGEpOworCisgIG5lZWRfcmVyZWFkID0gVFJVRTsKK30KKworaW50Cit4
ZGdfbWltZV9nZXRfbWF4X2J1ZmZlcl9leHRlbnRzICh2b2lkKQoreworICB4ZGdfbWltZV9pbml0
ICgpOworICAKKyAgaWYgKF9jYWNoZXMpCisgICAgcmV0dXJuIF94ZGdfbWltZV9jYWNoZV9nZXRf
bWF4X2J1ZmZlcl9leHRlbnRzICgpOworCisgIHJldHVybiBfeGRnX21pbWVfbWFnaWNfZ2V0X2J1
ZmZlcl9leHRlbnRzIChnbG9iYWxfbWFnaWMpOworfQorCitjb25zdCBjaGFyICoKK194ZGdfbWlt
ZV91bmFsaWFzX21pbWVfdHlwZSAoY29uc3QgY2hhciAqbWltZV90eXBlKQoreworICBjb25zdCBj
aGFyICpsb29rdXA7CisKKyAgaWYgKF9jYWNoZXMpCisgICAgcmV0dXJuIF94ZGdfbWltZV9jYWNo
ZV91bmFsaWFzX21pbWVfdHlwZSAobWltZV90eXBlKTsKKworICBpZiAoKGxvb2t1cCA9IF94ZGdf
bWltZV9hbGlhc19saXN0X2xvb2t1cCAoYWxpYXNfbGlzdCwgbWltZV90eXBlKSkgIT0gTlVMTCkK
KyAgICByZXR1cm4gbG9va3VwOworCisgIHJldHVybiBtaW1lX3R5cGU7Cit9CisKK2NvbnN0IGNo
YXIgKgoreGRnX21pbWVfdW5hbGlhc19taW1lX3R5cGUgKGNvbnN0IGNoYXIgKm1pbWVfdHlwZSkK
K3sKKyAgeGRnX21pbWVfaW5pdCAoKTsKKworICByZXR1cm4gX3hkZ19taW1lX3VuYWxpYXNfbWlt
ZV90eXBlIChtaW1lX3R5cGUpOworfQorCitpbnQKK194ZGdfbWltZV9taW1lX3R5cGVfZXF1YWwg
KGNvbnN0IGNoYXIgKm1pbWVfYSwKKwkJCSAgIGNvbnN0IGNoYXIgKm1pbWVfYikKK3sKKyAgY29u
c3QgY2hhciAqdW5hbGlhc19hLCAqdW5hbGlhc19iOworCisgIHVuYWxpYXNfYSA9IF94ZGdfbWlt
ZV91bmFsaWFzX21pbWVfdHlwZSAobWltZV9hKTsKKyAgdW5hbGlhc19iID0gX3hkZ19taW1lX3Vu
YWxpYXNfbWltZV90eXBlIChtaW1lX2IpOworCisgIGlmIChzdHJjbXAgKHVuYWxpYXNfYSwgdW5h
bGlhc19iKSA9PSAwKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitpbnQKK3hk
Z19taW1lX21pbWVfdHlwZV9lcXVhbCAoY29uc3QgY2hhciAqbWltZV9hLAorCQkJICBjb25zdCBj
aGFyICptaW1lX2IpCit7CisgIHhkZ19taW1lX2luaXQgKCk7CisKKyAgcmV0dXJuIF94ZGdfbWlt
ZV9taW1lX3R5cGVfZXF1YWwgKG1pbWVfYSwgbWltZV9iKTsKK30KKworaW50Cit4ZGdfbWltZV9t
ZWRpYV90eXBlX2VxdWFsIChjb25zdCBjaGFyICptaW1lX2EsCisJCQkgICBjb25zdCBjaGFyICpt
aW1lX2IpCit7CisgIGNoYXIgKnNlcDsKKworICBzZXAgPSBzdHJjaHIgKG1pbWVfYSwgJy8nKTsK
KyAgCisgIGlmIChzZXAgJiYgc3RybmNtcCAobWltZV9hLCBtaW1lX2IsIHNlcCAtIG1pbWVfYSAr
IDEpID09IDApCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKKyNpZiAxCitzdGF0
aWMgaW50Cit4ZGdfbWltZV9pc19zdXBlcl90eXBlIChjb25zdCBjaGFyICptaW1lKQoreworICBp
bnQgbGVuZ3RoOworICBjb25zdCBjaGFyICp0eXBlOworCisgIGxlbmd0aCA9IHN0cmxlbiAobWlt
ZSk7CisgIHR5cGUgPSAmKG1pbWVbbGVuZ3RoIC0gMl0pOworCisgIGlmIChzdHJjbXAgKHR5cGUs
ICIvKiIpID09IDApCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwor
aW50CitfeGRnX21pbWVfbWltZV90eXBlX3N1YmNsYXNzIChjb25zdCBjaGFyICptaW1lLAorCQkJ
ICAgICAgY29uc3QgY2hhciAqYmFzZSkKK3sKKyAgY29uc3QgY2hhciAqdW1pbWUsICp1YmFzZTsK
KyAgY29uc3QgY2hhciAqKnBhcmVudHM7CisKKyAgaWYgKF9jYWNoZXMpCisgICAgcmV0dXJuIF94
ZGdfbWltZV9jYWNoZV9taW1lX3R5cGVfc3ViY2xhc3MgKG1pbWUsIGJhc2UpOworCisgIHVtaW1l
ID0gX3hkZ19taW1lX3VuYWxpYXNfbWltZV90eXBlIChtaW1lKTsKKyAgdWJhc2UgPSBfeGRnX21p
bWVfdW5hbGlhc19taW1lX3R5cGUgKGJhc2UpOworCisgIGlmIChzdHJjbXAgKHVtaW1lLCB1YmFz
ZSkgPT0gMCkKKyAgICByZXR1cm4gMTsKKworI2lmIDEgIAorICAvKiBIYW5kbGUgc3VwZXJ0eXBl
cyAqLworICBpZiAoeGRnX21pbWVfaXNfc3VwZXJfdHlwZSAodWJhc2UpICYmCisgICAgICB4ZGdf
bWltZV9tZWRpYV90eXBlX2VxdWFsICh1bWltZSwgdWJhc2UpKQorICAgIHJldHVybiAxOworI2Vu
ZGlmCisKKyAgLyogIEhhbmRsZSBzcGVjaWFsIGNhc2VzIHRleHQvcGxhaW4gYW5kIGFwcGxpY2F0
aW9uL29jdGV0LXN0cmVhbSAqLworICBpZiAoc3RyY21wICh1YmFzZSwgInRleHQvcGxhaW4iKSA9
PSAwICYmIAorICAgICAgc3RybmNtcCAodW1pbWUsICJ0ZXh0LyIsIDUpID09IDApCisgICAgcmV0
dXJuIDE7CisKKyAgaWYgKHN0cmNtcCAodWJhc2UsICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0i
KSA9PSAwKQorICAgIHJldHVybiAxOworICAKKyAgcGFyZW50cyA9IF94ZGdfbWltZV9wYXJlbnRf
bGlzdF9sb29rdXAgKHBhcmVudF9saXN0LCB1bWltZSk7CisgIGZvciAoOyBwYXJlbnRzICYmICpw
YXJlbnRzOyBwYXJlbnRzKyspCisgICAgeworICAgICAgaWYgKF94ZGdfbWltZV9taW1lX3R5cGVf
c3ViY2xhc3MgKCpwYXJlbnRzLCB1YmFzZSkpCisJcmV0dXJuIDE7CisgICAgfQorCisgIHJldHVy
biAwOworfQorCitpbnQKK3hkZ19taW1lX21pbWVfdHlwZV9zdWJjbGFzcyAoY29uc3QgY2hhciAq
bWltZSwKKwkJCSAgICAgY29uc3QgY2hhciAqYmFzZSkKK3sKKyAgeGRnX21pbWVfaW5pdCAoKTsK
KworICByZXR1cm4gX3hkZ19taW1lX21pbWVfdHlwZV9zdWJjbGFzcyAobWltZSwgYmFzZSk7Cit9
CisKK2NoYXIgKioKK3hkZ19taW1lX2xpc3RfbWltZV9wYXJlbnRzIChjb25zdCBjaGFyICptaW1l
KQoreworICBjb25zdCBjaGFyICoqcGFyZW50czsKKyAgY2hhciAqKnJlc3VsdDsKKyAgaW50IGks
IG47CisKKyAgaWYgKF9jYWNoZXMpCisgICAgcmV0dXJuIF94ZGdfbWltZV9jYWNoZV9saXN0X21p
bWVfcGFyZW50cyAobWltZSk7CisKKyAgcGFyZW50cyA9IHhkZ19taW1lX2dldF9taW1lX3BhcmVu
dHMgKG1pbWUpOworCisgIGlmICghcGFyZW50cykKKyAgICByZXR1cm4gTlVMTDsKKworICBmb3Ig
KGkgPSAwOyBwYXJlbnRzW2ldOyBpKyspIDsKKyAgCisgIG4gPSAoaSArIDEpICogc2l6ZW9mIChj
aGFyICopOworICByZXN1bHQgPSAoY2hhciAqKikgbWFsbG9jIChuKTsKKyAgbWVtY3B5IChyZXN1
bHQsIHBhcmVudHMsIG4pOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK2NvbnN0IGNoYXIgKioK
K3hkZ19taW1lX2dldF9taW1lX3BhcmVudHMgKGNvbnN0IGNoYXIgKm1pbWUpCit7CisgIGNvbnN0
IGNoYXIgKnVtaW1lOworCisgIHhkZ19taW1lX2luaXQgKCk7CisKKyAgdW1pbWUgPSBfeGRnX21p
bWVfdW5hbGlhc19taW1lX3R5cGUgKG1pbWUpOworCisgIHJldHVybiBfeGRnX21pbWVfcGFyZW50
X2xpc3RfbG9va3VwIChwYXJlbnRfbGlzdCwgdW1pbWUpOworfQorCit2b2lkIAoreGRnX21pbWVf
ZHVtcCAodm9pZCkKK3sKKyAgeGRnX21pbWVfaW5pdCgpOworCisgIHByaW50ZiAoIioqKiBBTElB
U0VTICoqKlxuXG4iKTsKKyAgX3hkZ19taW1lX2FsaWFzX2xpc3RfZHVtcCAoYWxpYXNfbGlzdCk7
CisgIHByaW50ZiAoIlxuKioqIFBBUkVOVFMgKioqXG5cbiIpOworICBfeGRnX21pbWVfcGFyZW50
X2xpc3RfZHVtcCAocGFyZW50X2xpc3QpOworICBwcmludGYgKCJcbioqKiBDQUNIRSAqKipcblxu
Iik7CisgIF94ZGdfZ2xvYl9oYXNoX2R1bXAgKGdsb2JhbF9oYXNoKTsKKyAgcHJpbnRmICgiXG4q
KiogR0xPQlMgKioqXG5cbiIpOworICBfeGRnX2dsb2JfaGFzaF9kdW1wIChnbG9iYWxfaGFzaCk7
CisgIHByaW50ZiAoIlxuKioqIEdMT0JTIFJFVkVSU0UgVFJFRSAqKipcblxuIik7CisgIF94ZGdf
bWltZV9jYWNoZV9nbG9iX2R1bXAgKCk7Cit9CisKKworLyogUmVnaXN0ZXJzIGEgZnVuY3Rpb24g
dG8gYmUgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIG1pbWUgZGF0YWJhc2UgcmVsb2FkcyBpdHMgZmls
ZXMKKyAqLworaW50Cit4ZGdfbWltZV9yZWdpc3Rlcl9yZWxvYWRfY2FsbGJhY2sgKFhkZ01pbWVD
YWxsYmFjayAgY2FsbGJhY2ssCisJCQkJICAgdm9pZCAgICAgICAgICAgICpkYXRhLAorCQkJCSAg
IFhkZ01pbWVEZXN0cm95ICAgZGVzdHJveSkKK3sKKyAgWGRnQ2FsbGJhY2tMaXN0ICpsaXN0X2Vs
OworICBzdGF0aWMgaW50IGNhbGxiYWNrX2lkID0gMTsKKworICAvKiBNYWtlIGEgbmV3IGxpc3Qg
ZWxlbWVudCAqLworICBsaXN0X2VsID0gY2FsbG9jICgxLCBzaXplb2YgKFhkZ0NhbGxiYWNrTGlz
dCkpOworICBsaXN0X2VsLT5jYWxsYmFja19pZCA9IGNhbGxiYWNrX2lkOworICBsaXN0X2VsLT5j
YWxsYmFjayA9IGNhbGxiYWNrOworICBsaXN0X2VsLT5kYXRhID0gZGF0YTsKKyAgbGlzdF9lbC0+
ZGVzdHJveSA9IGRlc3Ryb3k7CisgIGxpc3RfZWwtPm5leHQgPSBjYWxsYmFja19saXN0OworICBp
ZiAobGlzdF9lbC0+bmV4dCkKKyAgICBsaXN0X2VsLT5uZXh0LT5wcmV2ID0gbGlzdF9lbDsKKwor
ICBjYWxsYmFja19saXN0ID0gbGlzdF9lbDsKKyAgY2FsbGJhY2tfaWQgKys7CisKKyAgcmV0dXJu
IGNhbGxiYWNrX2lkIC0gMTsKK30KKwordm9pZAoreGRnX21pbWVfcmVtb3ZlX2NhbGxiYWNrIChp
bnQgY2FsbGJhY2tfaWQpCit7CisgIFhkZ0NhbGxiYWNrTGlzdCAqbGlzdDsKKworICBmb3IgKGxp
c3QgPSBjYWxsYmFja19saXN0OyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkKKyAgICB7CisgICAg
ICBpZiAobGlzdC0+Y2FsbGJhY2tfaWQgPT0gY2FsbGJhY2tfaWQpCisJeworCSAgaWYgKGxpc3Qt
Pm5leHQpCisJICAgIGxpc3QtPm5leHQgPSBsaXN0LT5wcmV2OworCisJICBpZiAobGlzdC0+cHJl
dikKKwkgICAgbGlzdC0+cHJldi0+bmV4dCA9IGxpc3QtPm5leHQ7CisJICBlbHNlCisJICAgIGNh
bGxiYWNrX2xpc3QgPSBsaXN0LT5uZXh0OworCisJICAvKiBpbnZva2UgdGhlIGRlc3Ryb3kgaGFu
ZGxlciAqLworCSAgKGxpc3QtPmRlc3Ryb3kpIChsaXN0LT5kYXRhKTsKKwkgIGZyZWUgKGxpc3Qp
OworCSAgcmV0dXJuOworCX0KKyAgICB9Cit9CisKK2NvbnN0IGNoYXIgKgoreGRnX21pbWVfZ2V0
X2ljb24gKGNvbnN0IGNoYXIgKm1pbWUpCit7CisgIHhkZ19taW1lX2luaXQgKCk7CisgIAorICBp
ZiAoX2NhY2hlcykKKyAgICByZXR1cm4gX3hkZ19taW1lX2NhY2hlX2dldF9pY29uIChtaW1lKTsK
KworICByZXR1cm4gX3hkZ19taW1lX2ljb25fbGlzdF9sb29rdXAgKGljb25fbGlzdCwgbWltZSk7
Cit9CisKK2NvbnN0IGNoYXIgKgoreGRnX21pbWVfZ2V0X2dlbmVyaWNfaWNvbiAoY29uc3QgY2hh
ciAqbWltZSkKK3sKKyAgeGRnX21pbWVfaW5pdCAoKTsKKyAgCisgIGlmIChfY2FjaGVzKQorICAg
IHJldHVybiBfeGRnX21pbWVfY2FjaGVfZ2V0X2dlbmVyaWNfaWNvbiAobWltZSk7CisKKyAgcmV0
dXJuIF94ZGdfbWltZV9pY29uX2xpc3RfbG9va3VwIChnZW5lcmljX2ljb25fbGlzdCwgbWltZSk7
Cit9CisKK2ludAoreGRnX21pbWVfZ2V0X3NpbXBsZV9nbG9icyAoY29uc3QgY2hhciAqbWltZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgKmdsb2JzW10sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICBuX2dsb2JzKQoreworICB4ZGdfbWltZV9p
bml0ICgpOworCisgIGlmIChfY2FjaGVzKQorICAgIHJldHVybiBfeGRnX21pbWVfY2FjaGVfZ2V0
X3NpbXBsZV9nbG9icyAobWltZSwgZ2xvYnMsIG5fZ2xvYnMpOworCisgIHJldHVybiBfeGRnX2ds
b2JfaGFzaF9nZXRfc2ltcGxlX2dsb2JzIChnbG9iYWxfaGFzaCwgbWltZSwgZ2xvYnMsIG5fZ2xv
YnMpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9zcmMveGRnbWlt
ZS5oIGIvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9zcmMveGRnbWltZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44ZDMzMjcyYzg0MQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvc3JjL3hkZ21pbWUuaApAQCAtMCwwICsxLDEz
NyBAQAorLyogLSotIG1vZGU6IEM7IGMtZmlsZS1zdHlsZTogImdudSIgLSotICovCisvKiB4ZGdt
aW1lLmg6IFhERyBNaW1lIFNwZWMgbWltZSByZXNvbHZlci4gIEJhc2VkIG9uIHZlcnNpb24gMC4x
MSBvZiB0aGUgc3BlYy4KKyAqCisgKiBNb3JlIGluZm8gY2FuIGJlIGZvdW5kIGF0IGh0dHA6Ly93
d3cuZnJlZWRlc2t0b3Aub3JnL3N0YW5kYXJkcy8KKyAqIAorICogQ29weXJpZ2h0IChDKSAyMDAz
ICBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgIEpvbmF0aGFuIEJsYW5kZm9y
ZCA8anJiQGFsdW0ubWl0LmVkdT4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQWNhZGVtaWMg
RnJlZSBMaWNlbnNlIHZlcnNpb24gMi4wCisgKiBPciB1bmRlciB0aGUgZm9sbG93aW5nIHRlcm1z
OgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuCSBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1B
IDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgX19YREdfTUlNRV9IX18KKyNkZWZp
bmUgX19YREdfTUlNRV9IX18KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy9z
dGF0Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19j
cGx1c3BsdXMgKi8KKworI2lmZGVmIFhER19QUkVGSVgKKyNkZWZpbmUgWERHX0VOVFJZKGZ1bmMp
IF9YREdfRU5UUlkyKFhER19QUkVGSVgsZnVuYykKKyNkZWZpbmUgX1hER19FTlRSWTIocHJlZml4
LGZ1bmMpIF9YREdfRU5UUlkzKHByZWZpeCxmdW5jKQorI2RlZmluZSBfWERHX0VOVFJZMyhwcmVm
aXgsZnVuYykgcHJlZml4IyNfIyNmdW5jCisKKyNkZWZpbmUgWERHX1JFU0VSVkVEX0VOVFJZKGZ1
bmMpIF9YREdfUkVTRVJWRURfRU5UUlkyKFhER19QUkVGSVgsZnVuYykKKyNkZWZpbmUgX1hER19S
RVNFUlZFRF9FTlRSWTIocHJlZml4LGZ1bmMpIF9YREdfUkVTRVJWRURfRU5UUlkzKHByZWZpeCxm
dW5jKQorI2RlZmluZSBfWERHX1JFU0VSVkVEX0VOVFJZMyhwcmVmaXgsZnVuYykgXyMjcHJlZml4
IyNfIyNmdW5jCisjZW5kaWYKKwordHlwZWRlZiB2b2lkICgqWGRnTWltZUNhbGxiYWNrKSAodm9p
ZCAqdXNlcl9kYXRhKTsKK3R5cGVkZWYgdm9pZCAoKlhkZ01pbWVEZXN0cm95KSAgKHZvaWQgKnVz
ZXJfZGF0YSk7CisKKyAgCisjaWZkZWYgWERHX1BSRUZJWAorI2RlZmluZSB4ZGdfbWltZV9nZXRf
bWltZV90eXBlX2Zvcl9kYXRhICAgICAgIFhER19FTlRSWShnZXRfbWltZV90eXBlX2Zvcl9kYXRh
KQorI2RlZmluZSB4ZGdfbWltZV9nZXRfbWltZV90eXBlX2Zvcl9maWxlICAgICAgIFhER19FTlRS
WShnZXRfbWltZV90eXBlX2Zvcl9maWxlKQorI2RlZmluZSB4ZGdfbWltZV9nZXRfbWltZV90eXBl
X2Zyb21fZmlsZV9uYW1lIFhER19FTlRSWShnZXRfbWltZV90eXBlX2Zyb21fZmlsZV9uYW1lKQor
I2RlZmluZSB4ZGdfbWltZV9nZXRfbWltZV90eXBlc19mcm9tX2ZpbGVfbmFtZSBYREdfRU5UUlko
Z2V0X21pbWVfdHlwZXNfZnJvbV9maWxlX25hbWUpCisjZGVmaW5lIHhkZ19taW1lX2lzX3ZhbGlk
X21pbWVfdHlwZSAgICAgICAgICAgWERHX0VOVFJZKGlzX3ZhbGlkX21pbWVfdHlwZSkKKyNkZWZp
bmUgeGRnX21pbWVfbWltZV90eXBlX2VxdWFsICAgICAgICAgICAgICBYREdfRU5UUlkobWltZV90
eXBlX2VxdWFsKQorI2RlZmluZSB4ZGdfbWltZV9tZWRpYV90eXBlX2VxdWFsICAgICAgICAgICAg
IFhER19FTlRSWShtZWRpYV90eXBlX2VxdWFsKQorI2RlZmluZSB4ZGdfbWltZV9taW1lX3R5cGVf
c3ViY2xhc3MgICAgICAgICAgIFhER19FTlRSWShtaW1lX3R5cGVfc3ViY2xhc3MpCisjZGVmaW5l
IHhkZ19taW1lX2dldF9taW1lX3BhcmVudHMgICAgICAgICAgICAgWERHX0VOVFJZKGdldF9taW1l
X3BhcmVudHMpCisjZGVmaW5lIHhkZ19taW1lX2xpc3RfbWltZV9wYXJlbnRzICAgICAgICAgICAg
WERHX0VOVFJZKGxpc3RfbWltZV9wYXJlbnRzKQorI2RlZmluZSB4ZGdfbWltZV91bmFsaWFzX21p
bWVfdHlwZSAgICAgICAgICAgIFhER19FTlRSWSh1bmFsaWFzX21pbWVfdHlwZSkKKyNkZWZpbmUg
eGRnX21pbWVfZ2V0X21heF9idWZmZXJfZXh0ZW50cyAgICAgICBYREdfRU5UUlkoZ2V0X21heF9i
dWZmZXJfZXh0ZW50cykKKyNkZWZpbmUgeGRnX21pbWVfc2h1dGRvd24gICAgICAgICAgICAgICAg
ICAgICBYREdfRU5UUlkoc2h1dGRvd24pCisjZGVmaW5lIHhkZ19taW1lX2R1bXAgICAgICAgICAg
ICAgICAgICAgICAgICAgWERHX0VOVFJZKGR1bXApCisjZGVmaW5lIHhkZ19taW1lX3JlZ2lzdGVy
X3JlbG9hZF9jYWxsYmFjayAgICAgWERHX0VOVFJZKHJlZ2lzdGVyX3JlbG9hZF9jYWxsYmFjaykK
KyNkZWZpbmUgeGRnX21pbWVfcmVtb3ZlX2NhbGxiYWNrICAgICAgICAgICAgICBYREdfRU5UUlko
cmVtb3ZlX2NhbGxiYWNrKQorI2RlZmluZSB4ZGdfbWltZV90eXBlX3Vua25vd24gICAgICAgICAg
ICAgICAgIFhER19FTlRSWSh0eXBlX3Vua25vd24pCisjZGVmaW5lIHhkZ19taW1lX3R5cGVfZW1w
dHkgICAgICAgICAgICAgICAgICAgWERHX0VOVFJZKHR5cGVfZW1wdHkpCisjZGVmaW5lIHhkZ19t
aW1lX3R5cGVfdGV4dHBsYWluICAgICAgICAgICAgICAgWERHX0VOVFJZKHR5cGVfdGV4dHBsYWlu
KQorI2RlZmluZSB4ZGdfbWltZV9nZXRfaWNvbiAgICAgICAgICAgICAgICAgICAgIFhER19FTlRS
WShnZXRfaWNvbikKKyNkZWZpbmUgeGRnX21pbWVfZ2V0X2dlbmVyaWNfaWNvbiAgICAgICAgICAg
ICBYREdfRU5UUlkoZ2V0X2dlbmVyaWNfaWNvbikKKyNkZWZpbmUgeGRnX21pbWVfZ2V0X3NpbXBs
ZV9nbG9icyAgICAgICAgICAgICBYREdfRU5UUlkoZ2V0X3NpbXBsZV9nbG9icykKKworI2RlZmlu
ZSBfeGRnX21pbWVfbWltZV90eXBlX2VxdWFsICAgICAgICAgICAgIFhER19SRVNFUlZFRF9FTlRS
WShtaW1lX3R5cGVfZXF1YWwpCisjZGVmaW5lIF94ZGdfbWltZV9taW1lX3R5cGVfc3ViY2xhc3Mg
ICAgICAgICAgWERHX1JFU0VSVkVEX0VOVFJZKG1pbWVfdHlwZV9zdWJjbGFzcykKKyNkZWZpbmUg
X3hkZ19taW1lX3VuYWxpYXNfbWltZV90eXBlICAgICAgICAgICBYREdfUkVTRVJWRURfRU5UUlko
dW5hbGlhc19taW1lX3R5cGUpICAKKyNlbmRpZgorCitleHRlcm4gY29uc3QgY2hhciB4ZGdfbWlt
ZV90eXBlX3Vua25vd25bXTsKK2V4dGVybiBjb25zdCBjaGFyIHhkZ19taW1lX3R5cGVfZW1wdHlb
XTsKK2V4dGVybiBjb25zdCBjaGFyIHhkZ19taW1lX3R5cGVfdGV4dHBsYWluW107CisjZGVmaW5l
IFhER19NSU1FX1RZUEVfVU5LTk9XTiB4ZGdfbWltZV90eXBlX3Vua25vd24KKyNkZWZpbmUgWERH
X01JTUVfVFlQRV9FTVBUWSB4ZGdfbWltZV90eXBlX2VtcHR5CisjZGVmaW5lIFhER19NSU1FX1RZ
UEVfVEVYVFBMQUlOIHhkZ19taW1lX3R5cGVfdGV4dHBsYWluCisKK2NvbnN0IGNoYXIgICp4ZGdf
bWltZV9nZXRfbWltZV90eXBlX2Zvcl9kYXRhICAgICAgIChjb25zdCB2b2lkICpkYXRhLAorCQkJ
CQkJICAgIHNpemVfdCAgICAgIGxlbiwKKwkJCQkJCSAgICBpbnQgICAgICAgICpyZXN1bHRfcHJp
byk7Citjb25zdCBjaGFyICAqeGRnX21pbWVfZ2V0X21pbWVfdHlwZV9mb3JfZmlsZSAgICAgICAo
Y29uc3QgY2hhciAqZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpzdGF0YnVmKTsKK2NvbnN0IGNoYXIgICp4
ZGdfbWltZV9nZXRfbWltZV90eXBlX2Zyb21fZmlsZV9uYW1lIChjb25zdCBjaGFyICpmaWxlX25h
bWUpOworaW50ICAgICAgICAgIHhkZ19taW1lX2dldF9taW1lX3R5cGVzX2Zyb21fZmlsZV9uYW1l
KGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwKKwkJCQkJCSAgICBjb25zdCBjaGFyICptaW1lX3R5cGVz
W10sCisJCQkJCQkgICAgaW50ICAgICAgICAgbl9taW1lX3R5cGVzKTsKK2ludCAgICAgICAgICB4
ZGdfbWltZV9pc192YWxpZF9taW1lX3R5cGUgICAgICAgICAgIChjb25zdCBjaGFyICptaW1lX3R5
cGUpOworaW50ICAgICAgICAgIHhkZ19taW1lX21pbWVfdHlwZV9lcXVhbCAgICAgICAgICAgICAg
KGNvbnN0IGNoYXIgKm1pbWVfYSwKKwkJCQkJCSAgICBjb25zdCBjaGFyICptaW1lX2IpOworaW50
ICAgICAgICAgIHhkZ19taW1lX21lZGlhX3R5cGVfZXF1YWwgICAgICAgICAgICAgKGNvbnN0IGNo
YXIgKm1pbWVfYSwKKwkJCQkJCSAgICBjb25zdCBjaGFyICptaW1lX2IpOworaW50ICAgICAgICAg
IHhkZ19taW1lX21pbWVfdHlwZV9zdWJjbGFzcyAgICAgICAgICAgKGNvbnN0IGNoYXIgKm1pbWVf
YSwKKwkJCQkJCSAgICBjb25zdCBjaGFyICptaW1lX2IpOworICAvKiB4ZGdfbWltZV9nZXRfbWlt
ZV9wYXJlbnRzKCkgaXMgZGVwcmVjYXRlZCBzaW5jZSBpdCBkb2VzCisgICAqIG5vdCB3b3JrIGNv
cnJlY3RseSB3aXRoIGNhY2hlcy4gVXNlIHhkZ19taW1lX2xpc3RfcGFyZW50cygpIAorICAgKiBp
bnN0ZWFkLCBidXQgbm90aWNlIHRoYXQgdGhhdCBmdW5jdGlvbiBleHBlY3RzIHlvdSB0byBmcmVl
CisgICAqIHRoZSBhcnJheSBpdCByZXR1cm5zLiAKKyAgICovCitjb25zdCBjaGFyICoqeGRnX21p
bWVfZ2V0X21pbWVfcGFyZW50cwkJICAgKGNvbnN0IGNoYXIgKm1pbWUpOworY2hhciAqKiAgICAg
IHhkZ19taW1lX2xpc3RfbWltZV9wYXJlbnRzCQkgICAoY29uc3QgY2hhciAqbWltZSk7Citjb25z
dCBjaGFyICAqeGRnX21pbWVfdW5hbGlhc19taW1lX3R5cGUJCSAgIChjb25zdCBjaGFyICptaW1l
KTsKK2NvbnN0IGNoYXIgICp4ZGdfbWltZV9nZXRfaWNvbiAgICAgICAgICAgICAgICAgICAgIChj
b25zdCBjaGFyICptaW1lKTsKK2NvbnN0IGNoYXIgICp4ZGdfbWltZV9nZXRfZ2VuZXJpY19pY29u
ICAgICAgICAgICAgIChjb25zdCBjaGFyICptaW1lKTsKK2ludCAgICAgICAgICB4ZGdfbWltZV9n
ZXRfc2ltcGxlX2dsb2JzICAgICAgICAgICAgIChjb25zdCBjaGFyICptaW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgKmds
b2JzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50ICAgICAgICAgbl9nbG9icyk7CitpbnQgICAgICAgICAgeGRnX21pbWVfZ2V0X21heF9i
dWZmZXJfZXh0ZW50cyAgICAgICAodm9pZCk7Cit2b2lkICAgICAgICAgeGRnX21pbWVfc2h1dGRv
d24gICAgICAgICAgICAgICAgICAgICAodm9pZCk7Cit2b2lkICAgICAgICAgeGRnX21pbWVfZHVt
cCAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCk7CitpbnQgICAgICAgICAgeGRnX21pbWVf
cmVnaXN0ZXJfcmVsb2FkX2NhbGxiYWNrICAgICAoWGRnTWltZUNhbGxiYWNrICBjYWxsYmFjaywK
KwkJCQkJCSAgICB2b2lkICAgICAgICAgICAgKmRhdGEsCisJCQkJCQkgICAgWGRnTWltZURlc3Ry
b3kgICBkZXN0cm95KTsKK3ZvaWQgICAgICAgICB4ZGdfbWltZV9yZW1vdmVfY2FsbGJhY2sgICAg
ICAgICAgICAgIChpbnQgICAgICAgICAgICAgIGNhbGxiYWNrX2lkKTsKKworICAgLyogUHJpdmF0
ZSB2ZXJzaW9ucyBvZiBmdW5jdGlvbnMgdGhhdCBkb24ndCBjYWxsIHhkZ19taW1lX2luaXQgKCkg
Ki8KK2ludCAgICAgICAgICBfeGRnX21pbWVfbWltZV90eXBlX2VxdWFsICAgICAgICAgICAgIChj
b25zdCBjaGFyICptaW1lX2EsCisJCQkJCQkgICAgY29uc3QgY2hhciAqbWltZV9iKTsKK2ludCAg
ICAgICAgICBfeGRnX21pbWVfbWltZV90eXBlX3N1YmNsYXNzICAgICAgICAgIChjb25zdCBjaGFy
ICptaW1lLAorCQkJCQkJICAgIGNvbnN0IGNoYXIgKmJhc2UpOworY29uc3QgY2hhciAgKl94ZGdf
bWltZV91bmFsaWFzX21pbWVfdHlwZSAgICAgICAgICAgKGNvbnN0IGNoYXIgKm1pbWUpOworCisK
KyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisjZW5kaWYg
LyogX19YREdfTUlNRV9IX18gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21p
bWUvc3JjL3hkZ21pbWVhbGlhcy5jIGIvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9zcmMveGRn
bWltZWFsaWFzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRjYTYy
MDkxZDJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9zcmMv
eGRnbWltZWFsaWFzLmMKQEAgLTAsMCArMSwxODQgQEAKKy8qIC0qLSBtb2RlOiBDOyBjLWZpbGUt
c3R5bGU6ICJnbnUiIC0qLSAqLworLyogeGRnbWltZWFsaWFzLmM6IFByaXZhdGUgZmlsZS4gIERh
dGFzdHJ1Y3R1cmUgZm9yIHN0b3JpbmcgdGhlIGFsaWFzZXMuCisgKgorICogTW9yZSBpbmZvIGNh
biBiZSBmb3VuZCBhdCBodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zdGFuZGFyZHMvCisgKgor
ICogQ29weXJpZ2h0IChDKSAyMDA0ICBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQgIE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPgorICoKKyAqIExpY2Vuc2Vk
IHVuZGVyIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgdmVyc2lvbiAyLjAKKyAqIE9yIHVuZGVy
IHRoZSBmb2xsb3dpbmcgdGVybXM6CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAq
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUg
MzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVf
Q09ORklHX0gKKyNpbmNsdWRlICJjbWFrZWNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ4
ZGdtaW1lYWxpYXMuaCIKKyNpbmNsdWRlICJ4ZGdtaW1laW50LmgiCisjaW5jbHVkZSA8c3RkbGli
Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxz
dHJpbmcuaD4KKyNpbmNsdWRlIDxmbm1hdGNoLmg+CisKKyNpZm5kZWYJRkFMU0UKKyNkZWZpbmUJ
RkFMU0UJKDApCisjZW5kaWYKKworI2lmbmRlZglUUlVFCisjZGVmaW5lCVRSVUUJKCFGQUxTRSkK
KyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBYZGdBbGlhcyBYZGdBbGlhczsKKworc3RydWN0IFhk
Z0FsaWFzIAoreworICBjaGFyICphbGlhczsKKyAgY2hhciAqbWltZV90eXBlOworfTsKKworc3Ry
dWN0IFhkZ0FsaWFzTGlzdAoreworICBzdHJ1Y3QgWGRnQWxpYXMgKmFsaWFzZXM7CisgIGludCBu
X2FsaWFzZXM7Cit9OworCitYZGdBbGlhc0xpc3QgKgorX3hkZ19taW1lX2FsaWFzX2xpc3RfbmV3
ICh2b2lkKQoreworICBYZGdBbGlhc0xpc3QgKmxpc3Q7CisKKyAgbGlzdCA9IG1hbGxvYyAoc2l6
ZW9mIChYZGdBbGlhc0xpc3QpKTsKKworICBsaXN0LT5hbGlhc2VzID0gTlVMTDsKKyAgbGlzdC0+
bl9hbGlhc2VzID0gMDsKKworICByZXR1cm4gbGlzdDsKK30KKwordm9pZCAgICAgICAgIAorX3hk
Z19taW1lX2FsaWFzX2xpc3RfZnJlZSAoWGRnQWxpYXNMaXN0ICpsaXN0KQoreworICBpbnQgaTsK
KworICBpZiAobGlzdC0+YWxpYXNlcykKKyAgICB7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgbGlz
dC0+bl9hbGlhc2VzOyBpKyspCisJeworCSAgZnJlZSAobGlzdC0+YWxpYXNlc1tpXS5hbGlhcyk7
CisJICBmcmVlIChsaXN0LT5hbGlhc2VzW2ldLm1pbWVfdHlwZSk7CisJfQorICAgICAgZnJlZSAo
bGlzdC0+YWxpYXNlcyk7CisgICAgfQorICBmcmVlIChsaXN0KTsKK30KKworc3RhdGljIGludAor
YWxpYXNfZW50cnlfY21wIChjb25zdCB2b2lkICp2MSwgY29uc3Qgdm9pZCAqdjIpCit7CisgIHJl
dHVybiBzdHJjbXAgKCgoWGRnQWxpYXMgKil2MSktPmFsaWFzLCAoKFhkZ0FsaWFzICopdjIpLT5h
bGlhcyk7Cit9CisKK2NvbnN0IGNoYXIgICoKK194ZGdfbWltZV9hbGlhc19saXN0X2xvb2t1cCAo
WGRnQWxpYXNMaXN0ICpsaXN0LAorCQkJICAgICBjb25zdCBjaGFyICAgKmFsaWFzKQoreworICBY
ZGdBbGlhcyAqZW50cnk7CisgIFhkZ0FsaWFzIGtleTsKKworICBpZiAobGlzdC0+bl9hbGlhc2Vz
ID4gMCkKKyAgICB7CisgICAgICBrZXkuYWxpYXMgPSAoY2hhciAqKWFsaWFzOworICAgICAga2V5
Lm1pbWVfdHlwZSA9IE5VTEw7CisKKyAgICAgIGVudHJ5ID0gYnNlYXJjaCAoJmtleSwgbGlzdC0+
YWxpYXNlcywgbGlzdC0+bl9hbGlhc2VzLAorCQkgICAgICAgc2l6ZW9mIChYZGdBbGlhcyksIGFs
aWFzX2VudHJ5X2NtcCk7CisgICAgICBpZiAoZW50cnkpCisgICAgICAgIHJldHVybiBlbnRyeS0+
bWltZV90eXBlOworICAgIH0KKworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorX3hkZ19taW1l
X2FsaWFzX3JlYWRfZnJvbV9maWxlIChYZGdBbGlhc0xpc3QgKmxpc3QsCisJCQkJY29uc3QgY2hh
ciAgICpmaWxlX25hbWUpCit7CisgIEZJTEUgKmZpbGU7CisgIGNoYXIgbGluZVsyNTVdOworICBp
bnQgYWxsb2M7CisKKyAgZmlsZSA9IGZvcGVuIChmaWxlX25hbWUsICJyIik7CisKKyAgaWYgKGZp
bGUgPT0gTlVMTCkKKyAgICByZXR1cm47CisKKyAgLyogRklYTUU6IE5vdCBVVEYtOCBzYWZlLiAg
RG9lc24ndCB3b3JrIGlmIGxpbmVzIGFyZSBncmVhdGVyIHRoYW4gMjU1IGNoYXJzLgorICAgKiBC
bGFoICovCisgIGFsbG9jID0gbGlzdC0+bl9hbGlhc2VzICsgMTY7CisgIGxpc3QtPmFsaWFzZXMg
PSByZWFsbG9jIChsaXN0LT5hbGlhc2VzLCBhbGxvYyAqIHNpemVvZiAoWGRnQWxpYXMpKTsKKyAg
d2hpbGUgKGZnZXRzIChsaW5lLCAyNTUsIGZpbGUpICE9IE5VTEwpCisgICAgeworICAgICAgY2hh
ciAqc2VwOworICAgICAgaWYgKGxpbmVbMF0gPT0gJyMnKQorCWNvbnRpbnVlOworCisgICAgICBz
ZXAgPSBzdHJjaHIgKGxpbmUsICcgJyk7CisgICAgICBpZiAoc2VwID09IE5VTEwpCisJY29udGlu
dWU7CisgICAgICAqKHNlcCsrKSA9ICdcMDAwJzsKKyAgICAgIHNlcFtzdHJsZW4gKHNlcCkgLTFd
ID0gJ1wwMDAnOworICAgICAgaWYgKGxpc3QtPm5fYWxpYXNlcyA9PSBhbGxvYykKKwl7CisJICBh
bGxvYyA8PD0gMTsKKwkgIGxpc3QtPmFsaWFzZXMgPSByZWFsbG9jIChsaXN0LT5hbGlhc2VzLCAK
KwkJCQkgICBhbGxvYyAqIHNpemVvZiAoWGRnQWxpYXMpKTsKKwl9CisgICAgICBsaXN0LT5hbGlh
c2VzW2xpc3QtPm5fYWxpYXNlc10uYWxpYXMgPSBzdHJkdXAgKGxpbmUpOworICAgICAgbGlzdC0+
YWxpYXNlc1tsaXN0LT5uX2FsaWFzZXNdLm1pbWVfdHlwZSA9IHN0cmR1cCAoc2VwKTsKKyAgICAg
IGxpc3QtPm5fYWxpYXNlcysrOworICAgIH0KKyAgbGlzdC0+YWxpYXNlcyA9IHJlYWxsb2MgKGxp
c3QtPmFsaWFzZXMsIAorCQkJICAgbGlzdC0+bl9hbGlhc2VzICogc2l6ZW9mIChYZGdBbGlhcykp
OworCisgIGZjbG9zZSAoZmlsZSk7ICAKKyAgCisgIGlmIChsaXN0LT5uX2FsaWFzZXMgPiAxKQor
ICAgIHFzb3J0IChsaXN0LT5hbGlhc2VzLCBsaXN0LT5uX2FsaWFzZXMsIAorICAgICAgICAgICBz
aXplb2YgKFhkZ0FsaWFzKSwgYWxpYXNfZW50cnlfY21wKTsKK30KKworCit2b2lkCitfeGRnX21p
bWVfYWxpYXNfbGlzdF9kdW1wIChYZGdBbGlhc0xpc3QgKmxpc3QpCit7CisgIGludCBpOworCisg
IGlmIChsaXN0LT5hbGlhc2VzKQorICAgIHsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0LT5u
X2FsaWFzZXM7IGkrKykKKwl7CisJICBwcmludGYgKCIlcyAlc1xuIiwgCisJCSAgbGlzdC0+YWxp
YXNlc1tpXS5hbGlhcywKKwkJICBsaXN0LT5hbGlhc2VzW2ldLm1pbWVfdHlwZSk7CisJfQorICAg
IH0KK30KKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS94ZGdtaW1lL3NyYy94ZGdt
aW1lYWxpYXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvc3JjL3hkZ21pbWVhbGlhcy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zYzI4MDEyZGMzNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvc3JjL3hkZ21pbWVhbGlh
cy5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qIC0qLSBtb2RlOiBDOyBjLWZpbGUtc3R5bGU6ICJnbnUi
IC0qLSAqLworLyogeGRnbWltZWFsaWFzLmg6IFByaXZhdGUgZmlsZS4gIERhdGFzdHJ1Y3R1cmUg
Zm9yIHN0b3JpbmcgdGhlIGFsaWFzZXMuCisgKgorICogTW9yZSBpbmZvIGNhbiBiZSBmb3VuZCBh
dCBodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zdGFuZGFyZHMvCisgKgorICogQ29weXJpZ2h0
IChDKSAyMDA0ICBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMCAgTWF0dGhpYXMg
Q2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFj
YWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDIuMAorICogT3IgdW5kZXIgdGhlIGZvbGxvd2lu
ZyB0ZXJtczoKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fWERHX01JTUVfQUxJQVNf
SF9fCisjZGVmaW5lIF9fWERHX01JTUVfQUxJQVNfSF9fCisKKyNpbmNsdWRlICJ4ZGdtaW1lLmgi
CisKK3R5cGVkZWYgc3RydWN0IFhkZ0FsaWFzTGlzdCBYZGdBbGlhc0xpc3Q7CisKKyNpZmRlZiBY
REdfUFJFRklYCisjZGVmaW5lIF94ZGdfbWltZV9hbGlhc19yZWFkX2Zyb21fZmlsZSAgICAgICAg
WERHX1JFU0VSVkVEX0VOVFJZKGFsaWFzX3JlYWRfZnJvbV9maWxlKQorI2RlZmluZSBfeGRnX21p
bWVfYWxpYXNfbGlzdF9uZXcgICAgICAgICAgICAgIFhER19SRVNFUlZFRF9FTlRSWShhbGlhc19s
aXN0X25ldykKKyNkZWZpbmUgX3hkZ19taW1lX2FsaWFzX2xpc3RfZnJlZSAgICAgICAgICAgICBY
REdfUkVTRVJWRURfRU5UUlkoYWxpYXNfbGlzdF9mcmVlKQorI2RlZmluZSBfeGRnX21pbWVfYWxp
YXNfbGlzdF9sb29rdXAgICAgICAgICAgIFhER19SRVNFUlZFRF9FTlRSWShhbGlhc19saXN0X2xv
b2t1cCkKKyNkZWZpbmUgX3hkZ19taW1lX2FsaWFzX2xpc3RfZHVtcCAgICAgICAgICAgICBYREdf
UkVTRVJWRURfRU5UUlkoYWxpYXNfbGlzdF9kdW1wKQorI2VuZGlmCisKK3ZvaWQgICAgICAgICAg
X3hkZ19taW1lX2FsaWFzX3JlYWRfZnJvbV9maWxlIChYZGdBbGlhc0xpc3QgKmxpc3QsCisJCQkJ
CSAgICAgIGNvbnN0IGNoYXIgICAqZmlsZV9uYW1lKTsKK1hkZ0FsaWFzTGlzdCAqX3hkZ19taW1l
X2FsaWFzX2xpc3RfbmV3ICAgICAgICh2b2lkKTsKK3ZvaWQgICAgICAgICAgX3hkZ19taW1lX2Fs
aWFzX2xpc3RfZnJlZSAgICAgIChYZGdBbGlhc0xpc3QgKmxpc3QpOworY29uc3QgY2hhciAgICpf
eGRnX21pbWVfYWxpYXNfbGlzdF9sb29rdXAgICAgKFhkZ0FsaWFzTGlzdCAqbGlzdCwKKwkJCQkJ
ICAgICAgY29uc3QgY2hhciAgKmFsaWFzKTsKK3ZvaWQgICAgICAgICAgX3hkZ19taW1lX2FsaWFz
X2xpc3RfZHVtcCAgICAgIChYZGdBbGlhc0xpc3QgKmxpc3QpOworCisjZW5kaWYgLyogX19YREdf
TUlNRV9BTElBU19IX18gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUv
c3JjL3hkZ21pbWVjYWNoZS5jIGIvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9zcmMveGRnbWlt
ZWNhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ3OGQwMjIz
YWE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9zcmMveGRn
bWltZWNhY2hlLmMKQEAgLTAsMCArMSwxMTQ5IEBACisvKiAtKi0gbW9kZTogQzsgYy1maWxlLXN0
eWxlOiAiZ251IiAtKi0gKi8KKy8qIHhkZ21pbWVhbGlhcy5jOiBQcml2YXRlIGZpbGUuICBtbWFw
cGFibGUgY2FjaGVzIGZvciBtaW1lIGRhdGEKKyAqCisgKiBNb3JlIGluZm8gY2FuIGJlIGZvdW5k
IGF0IGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3N0YW5kYXJkcy8KKyAqCisgKiBDb3B5cmln
aHQgKEMpIDIwMDUgIE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPgorICoKKyAq
IExpY2Vuc2VkIHVuZGVyIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgdmVyc2lvbiAyLjAKKyAq
IE9yIHVuZGVyIHRoZSBmb2xsb3dpbmcgdGVybXM6CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZSBHTlUKKyAqIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNl
IC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lm
ZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjbWFrZWNvbmZpZy5oIgorI2VuZGlmCisKKyNp
bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5o
PgorCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxl
cnJuby5oPgorI2luY2x1ZGUgPGZubWF0Y2guaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2lu
Y2x1ZGUgPG5ldGluZXQvaW4uaD4gLyogZm9yIG50b2hsL250b2hzICovCisKKyNpZmRlZiBIQVZF
X01NQVAKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2Vsc2UKKyN3YXJuaW5nIEJ1aWxkaW5nIHhk
Z21pbWUgd2l0aG91dCBNTUFQIHN1cHBvcnQuIEJpbmFyeSAibWltZS5jYWNoZSIgZmlsZXMgd2ls
bCBub3QgYmUgdXNlZC4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRl
IDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgInhkZ21pbWVjYWNoZS5oIgorI2luY2x1ZGUgInhk
Z21pbWVpbnQuaCIKKworI2lmbmRlZiBNQVgKKyNkZWZpbmUgTUFYKGEsYikgKChhKSA+IChiKSA/
IChhKSA6IChiKSkKKyNlbmRpZgorCisjaWZuZGVmCUZBTFNFCisjZGVmaW5lCUZBTFNFCSgwKQor
I2VuZGlmCisKKyNpZm5kZWYJVFJVRQorI2RlZmluZQlUUlVFCSghRkFMU0UpCisjZW5kaWYKKwor
I2lmbmRlZiBfT19CSU5BUlkKKyNkZWZpbmUgX09fQklOQVJZIDAKKyNlbmRpZgorCisjaWZuZGVm
IE1BUF9GQUlMRUQKKyNkZWZpbmUgTUFQX0ZBSUxFRCAoKHZvaWQgKikgLTEpCisjZW5kaWYKKwor
I2RlZmluZSBNQUpPUl9WRVJTSU9OIDEKKyNkZWZpbmUgTUlOT1JfVkVSU0lPTl9NSU4gMQorI2Rl
ZmluZSBNSU5PUl9WRVJTSU9OX01BWCAyCisKK3N0cnVjdCBfWGRnTWltZUNhY2hlCit7CisgIGlu
dCByZWZfY291bnQ7CisgIGludCBtaW5vcjsKKworICBzaXplX3QgIHNpemU7CisgIGNoYXIgICAq
YnVmZmVyOworfTsKKworI2RlZmluZSBHRVRfVUlOVDE2KGNhY2hlLG9mZnNldCkgKG50b2hzKCoo
eGRnX3VpbnQxNl90KikoKGNhY2hlKSArIChvZmZzZXQpKSkpCisjZGVmaW5lIEdFVF9VSU5UMzIo
Y2FjaGUsb2Zmc2V0KSAobnRvaGwoKih4ZGdfdWludDMyX3QqKSgoY2FjaGUpICsgKG9mZnNldCkp
KSkKKworWGRnTWltZUNhY2hlICoKK194ZGdfbWltZV9jYWNoZV9yZWYgKFhkZ01pbWVDYWNoZSAq
Y2FjaGUpCit7CisgIGNhY2hlLT5yZWZfY291bnQrKzsKKyAgcmV0dXJuIGNhY2hlOworfQorCit2
b2lkCitfeGRnX21pbWVfY2FjaGVfdW5yZWYgKFhkZ01pbWVDYWNoZSAqY2FjaGUpCit7CisgIGNh
Y2hlLT5yZWZfY291bnQtLTsKKworICBpZiAoY2FjaGUtPnJlZl9jb3VudCA9PSAwKQorICAgIHsK
KyNpZmRlZiBIQVZFX01NQVAKKyAgICAgIG11bm1hcCAoY2FjaGUtPmJ1ZmZlciwgY2FjaGUtPnNp
emUpOworI2VuZGlmCisgICAgICBmcmVlIChjYWNoZSk7CisgICAgfQorfQorCitYZGdNaW1lQ2Fj
aGUgKgorX3hkZ19taW1lX2NhY2hlX25ld19mcm9tX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGVfbmFt
ZSkKK3sKKyAgWGRnTWltZUNhY2hlICpjYWNoZSA9IE5VTEw7CisKKyNpZmRlZiBIQVZFX01NQVAK
KyAgaW50IGZkID0gLTE7CisgIHN0cnVjdCBzdGF0IHN0OworICBjaGFyICpidWZmZXIgPSBOVUxM
OworICBpbnQgbWlub3I7CisKKyAgLyogT3BlbiB0aGUgZmlsZSBhbmQgbWFwIGl0IGludG8gbWVt
b3J5ICovCisgIGRvCisgICAgZmQgPSBvcGVuIChmaWxlX25hbWUsIE9fUkRPTkxZfF9PX0JJTkFS
WSwgMCk7CisgIHdoaWxlIChmZCA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisKKyAgaWYgKGZk
IDwgMCkKKyAgICByZXR1cm4gTlVMTDsKKyAgCisgIGlmIChmc3RhdCAoZmQsICZzdCkgPCAwIHx8
IHN0LnN0X3NpemUgPCA0KQorICAgIGdvdG8gZG9uZTsKKworICBidWZmZXIgPSAoY2hhciAqKSBt
bWFwIChOVUxMLCBzdC5zdF9zaXplLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIGZkLCAwKTsKKwor
ICBpZiAoYnVmZmVyID09IE1BUF9GQUlMRUQpCisgICAgZ290byBkb25lOworCisgIG1pbm9yID0g
R0VUX1VJTlQxNiAoYnVmZmVyLCAyKTsKKyAgLyogVmVyaWZ5IHZlcnNpb24gKi8KKyAgaWYgKEdF
VF9VSU5UMTYgKGJ1ZmZlciwgMCkgIT0gTUFKT1JfVkVSU0lPTiB8fAorICAgICAgKG1pbm9yIDwg
TUlOT1JfVkVSU0lPTl9NSU4gfHwKKyAgICAgICBtaW5vciA+IE1JTk9SX1ZFUlNJT05fTUFYKSkK
KyAgICB7CisgICAgICBtdW5tYXAgKGJ1ZmZlciwgc3Quc3Rfc2l6ZSk7CisKKyAgICAgIGdvdG8g
ZG9uZTsKKyAgICB9CisgIAorICBjYWNoZSA9IChYZGdNaW1lQ2FjaGUgKikgbWFsbG9jIChzaXpl
b2YgKFhkZ01pbWVDYWNoZSkpOworICBjYWNoZS0+bWlub3IgPSBtaW5vcjsKKyAgY2FjaGUtPnJl
Zl9jb3VudCA9IDE7CisgIGNhY2hlLT5idWZmZXIgPSBidWZmZXI7CisgIGNhY2hlLT5zaXplID0g
c3Quc3Rfc2l6ZTsKKworIGRvbmU6CisgIGlmIChmZCAhPSAtMSkKKyAgICBjbG9zZSAoZmQpOwor
CisjZW5kaWYgIC8qIEhBVkVfTU1BUCAqLworCisgIHJldHVybiBjYWNoZTsKK30KKworc3RhdGlj
IGludAorY2FjaGVfbWFnaWNfbWF0Y2hsZXRfY29tcGFyZV90b19kYXRhIChYZGdNaW1lQ2FjaGUg
KmNhY2hlLCAKKwkJCQkgICAgICB4ZGdfdWludDMyX3QgIG9mZnNldCwKKwkJCQkgICAgICBjb25z
dCB2b2lkICAgKmRhdGEsCisJCQkJICAgICAgc2l6ZV90ICAgICAgICBsZW4pCit7CisgIHhkZ191
aW50MzJfdCByYW5nZV9zdGFydCA9IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIG9mZnNldCk7
CisgIHhkZ191aW50MzJfdCByYW5nZV9sZW5ndGggPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVy
LCBvZmZzZXQgKyA0KTsKKyAgeGRnX3VpbnQzMl90IGRhdGFfbGVuZ3RoID0gR0VUX1VJTlQzMiAo
Y2FjaGUtPmJ1ZmZlciwgb2Zmc2V0ICsgMTIpOworICB4ZGdfdWludDMyX3QgZGF0YV9vZmZzZXQg
PSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCBvZmZzZXQgKyAxNik7CisgIHhkZ191aW50MzJf
dCBtYXNrX29mZnNldCA9IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIG9mZnNldCArIDIwKTsK
KyAgCisgIGludCBpLCBqOworCisgIGZvciAoaSA9IHJhbmdlX3N0YXJ0OyBpIDwgcmFuZ2Vfc3Rh
cnQgKyByYW5nZV9sZW5ndGg7IGkrKykKKyAgICB7CisgICAgICBpbnQgdmFsaWRfbWF0Y2hsZXQg
PSBUUlVFOworICAgICAgCisgICAgICBpZiAoaSArIGRhdGFfbGVuZ3RoID4gbGVuKQorCXJldHVy
biBGQUxTRTsKKworICAgICAgaWYgKG1hc2tfb2Zmc2V0KQorCXsKKwkgIGZvciAoaiA9IDA7IGog
PCBkYXRhX2xlbmd0aDsgaisrKQorCSAgICB7CisJICAgICAgaWYgKCgoKHVuc2lnbmVkIGNoYXIg
KiljYWNoZS0+YnVmZmVyKVtkYXRhX29mZnNldCArIGpdICYgKCh1bnNpZ25lZCBjaGFyICopY2Fj
aGUtPmJ1ZmZlcilbbWFza19vZmZzZXQgKyBqXSkgIT0KKwkJICAoKCgodW5zaWduZWQgY2hhciAq
KSBkYXRhKVtqICsgaV0pICYgKCh1bnNpZ25lZCBjaGFyICopY2FjaGUtPmJ1ZmZlcilbbWFza19v
ZmZzZXQgKyBqXSkpCisJCXsKKwkJICB2YWxpZF9tYXRjaGxldCA9IEZBTFNFOworCQkgIGJyZWFr
OworCQl9CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgdmFsaWRfbWF0Y2hsZXQgPSBt
ZW1jbXAoY2FjaGUtPmJ1ZmZlciArIGRhdGFfb2Zmc2V0LCBkYXRhICsgaSwgZGF0YV9sZW5ndGgp
ID09IDA7CisJfQorCisgICAgICBpZiAodmFsaWRfbWF0Y2hsZXQpCisJcmV0dXJuIFRSVUU7Cisg
ICAgfQorICAKKyAgcmV0dXJuIEZBTFNFOyAgCit9CisKK3N0YXRpYyBpbnQKK2NhY2hlX21hZ2lj
X21hdGNobGV0X2NvbXBhcmUgKFhkZ01pbWVDYWNoZSAqY2FjaGUsIAorCQkJICAgICAgeGRnX3Vp
bnQzMl90ICBvZmZzZXQsCisJCQkgICAgICBjb25zdCB2b2lkICAgKmRhdGEsCisJCQkgICAgICBz
aXplX3QgICAgICAgIGxlbikKK3sKKyAgeGRnX3VpbnQzMl90IG5fY2hpbGRyZW4gPSBHRVRfVUlO
VDMyIChjYWNoZS0+YnVmZmVyLCBvZmZzZXQgKyAyNCk7CisgIHhkZ191aW50MzJfdCBjaGlsZF9v
ZmZzZXQgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCBvZmZzZXQgKyAyOCk7CisKKyAgaW50
IGk7CisgIAorICBpZiAoY2FjaGVfbWFnaWNfbWF0Y2hsZXRfY29tcGFyZV90b19kYXRhIChjYWNo
ZSwgb2Zmc2V0LCBkYXRhLCBsZW4pKQorICAgIHsKKyAgICAgIGlmIChuX2NoaWxkcmVuID09IDAp
CisJcmV0dXJuIFRSVUU7CisgICAgICAKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBuX2NoaWxkcmVu
OyBpKyspCisJeworCSAgaWYgKGNhY2hlX21hZ2ljX21hdGNobGV0X2NvbXBhcmUgKGNhY2hlLCBj
aGlsZF9vZmZzZXQgKyAzMiAqIGksCisJCQkJCSAgICBkYXRhLCBsZW4pKQorCSAgICByZXR1cm4g
VFJVRTsKKwl9CisgICAgfQorICAKKyAgcmV0dXJuIEZBTFNFOyAgCit9CisKK3N0YXRpYyBjb25z
dCBjaGFyICoKK2NhY2hlX21hZ2ljX2NvbXBhcmVfdG9fZGF0YSAoWGRnTWltZUNhY2hlICpjYWNo
ZSwgCisJCQkgICAgIHhkZ191aW50MzJfdCAgb2Zmc2V0LAorCQkJICAgICBjb25zdCB2b2lkICAg
KmRhdGEsIAorCQkJICAgICBzaXplX3QgICAgICAgIGxlbiwgCisJCQkgICAgIGludCAgICAgICAg
ICAqcHJpbykKK3sKKyAgeGRnX3VpbnQzMl90IHByaW9yaXR5ID0gR0VUX1VJTlQzMiAoY2FjaGUt
PmJ1ZmZlciwgb2Zmc2V0KTsKKyAgeGRnX3VpbnQzMl90IG1pbWV0eXBlX29mZnNldCA9IEdFVF9V
SU5UMzIgKGNhY2hlLT5idWZmZXIsIG9mZnNldCArIDQpOworICB4ZGdfdWludDMyX3Qgbl9tYXRj
aGxldHMgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCBvZmZzZXQgKyA4KTsKKyAgeGRnX3Vp
bnQzMl90IG1hdGNobGV0X29mZnNldCA9IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIG9mZnNl
dCArIDEyKTsKKworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgbl9tYXRjaGxldHM7IGkr
KykKKyAgICB7CisgICAgICBpZiAoY2FjaGVfbWFnaWNfbWF0Y2hsZXRfY29tcGFyZSAoY2FjaGUs
IG1hdGNobGV0X29mZnNldCArIGkgKiAzMiwgCisJCQkJCWRhdGEsIGxlbikpCisJeworCSAgKnBy
aW8gPSBwcmlvcml0eTsKKwkgIAorCSAgcmV0dXJuIGNhY2hlLT5idWZmZXIgKyBtaW1ldHlwZV9v
ZmZzZXQ7CisJfQorICAgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IGNo
YXIgKgorY2FjaGVfbWFnaWNfbG9va3VwX2RhdGEgKFhkZ01pbWVDYWNoZSAqY2FjaGUsIAorCQkJ
IGNvbnN0IHZvaWQgICAqZGF0YSwgCisJCQkgc2l6ZV90ICAgICAgICBsZW4sIAorCQkJIGludCAg
ICAgICAgICAqcHJpbywKKwkJCSBjb25zdCBjaGFyICAgKm1pbWVfdHlwZXNbXSwKKwkJCSBpbnQg
ICAgICAgICAgIG5fbWltZV90eXBlcykKK3sKKyAgeGRnX3VpbnQzMl90IGxpc3Rfb2Zmc2V0Owor
ICB4ZGdfdWludDMyX3Qgbl9lbnRyaWVzOworICB4ZGdfdWludDMyX3Qgb2Zmc2V0OworCisgIGlu
dCBqLCBuOworCisgICpwcmlvID0gMDsKKworICBsaXN0X29mZnNldCA9IEdFVF9VSU5UMzIgKGNh
Y2hlLT5idWZmZXIsIDI0KTsKKyAgbl9lbnRyaWVzID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZl
ciwgbGlzdF9vZmZzZXQpOworICBvZmZzZXQgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCBs
aXN0X29mZnNldCArIDgpOworICAKKyAgZm9yIChqID0gMDsgaiA8IG5fZW50cmllczsgaisrKQor
ICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKm1hdGNoOworCisgICAgICBtYXRjaCA9IGNhY2hlX21h
Z2ljX2NvbXBhcmVfdG9fZGF0YSAoY2FjaGUsIG9mZnNldCArIDE2ICogaiwgCisJCQkJCSAgIGRh
dGEsIGxlbiwgcHJpbyk7CisgICAgICBpZiAobWF0Y2gpCisJcmV0dXJuIG1hdGNoOworICAgICAg
ZWxzZQorCXsKKwkgIHhkZ191aW50MzJfdCBtaW1ldHlwZV9vZmZzZXQ7CisJICBjb25zdCBjaGFy
ICpub25fbWF0Y2g7CisJICAKKwkgIG1pbWV0eXBlX29mZnNldCA9IEdFVF9VSU5UMzIgKGNhY2hl
LT5idWZmZXIsIG9mZnNldCArIDE2ICogaiArIDQpOworCSAgbm9uX21hdGNoID0gY2FjaGUtPmJ1
ZmZlciArIG1pbWV0eXBlX29mZnNldDsKKworCSAgZm9yIChuID0gMDsgbiA8IG5fbWltZV90eXBl
czsgbisrKQorCSAgICB7CisJICAgICAgaWYgKG1pbWVfdHlwZXNbbl0gJiYgCisJCSAgX3hkZ19t
aW1lX21pbWVfdHlwZV9lcXVhbCAobWltZV90eXBlc1tuXSwgbm9uX21hdGNoKSkKKwkJbWltZV90
eXBlc1tuXSA9IE5VTEw7CisJICAgIH0KKwl9CisgICAgfQorCisgIHJldHVybiBOVUxMOworfQor
CitzdGF0aWMgY29uc3QgY2hhciAqCitjYWNoZV9hbGlhc19sb29rdXAgKGNvbnN0IGNoYXIgKmFs
aWFzKQoreworICBjb25zdCBjaGFyICpwdHI7CisgIGludCBpLCBtaW4sIG1heCwgbWlkLCBjbXA7
CisKKyAgZm9yIChpID0gMDsgX2NhY2hlc1tpXTsgaSsrKQorICAgIHsKKyAgICAgIFhkZ01pbWVD
YWNoZSAqY2FjaGUgPSBfY2FjaGVzW2ldOworICAgICAgeGRnX3VpbnQzMl90IGxpc3Rfb2Zmc2V0
ID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgNCk7CisgICAgICB4ZGdfdWludDMyX3Qgbl9l
bnRyaWVzID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgbGlzdF9vZmZzZXQpOworICAgICAg
eGRnX3VpbnQzMl90IG9mZnNldDsKKworICAgICAgbWluID0gMDsgCisgICAgICBtYXggPSBuX2Vu
dHJpZXMgLSAxOworICAgICAgd2hpbGUgKG1heCA+PSBtaW4pIAorCXsKKwkgIG1pZCA9IChtaW4g
KyBtYXgpIC8gMjsKKworCSAgb2Zmc2V0ID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgbGlz
dF9vZmZzZXQgKyA0ICsgOCAqIG1pZCk7CisJICBwdHIgPSBjYWNoZS0+YnVmZmVyICsgb2Zmc2V0
OworCSAgY21wID0gc3RyY21wIChwdHIsIGFsaWFzKTsKKwkgIAorCSAgaWYgKGNtcCA8IDApCisJ
ICAgIG1pbiA9IG1pZCArIDE7CisJICBlbHNlIGlmIChjbXAgPiAwKQorCSAgICBtYXggPSBtaWQg
LSAxOworCSAgZWxzZQorCSAgICB7CisJICAgICAgb2Zmc2V0ID0gR0VUX1VJTlQzMiAoY2FjaGUt
PmJ1ZmZlciwgbGlzdF9vZmZzZXQgKyA0ICsgOCAqIG1pZCArIDQpOworCSAgICAgIHJldHVybiBj
YWNoZS0+YnVmZmVyICsgb2Zmc2V0OworCSAgICB9CisJfQorICAgIH0KKworICByZXR1cm4gTlVM
TDsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICptaW1lOworICBpbnQgd2Vp
Z2h0OworfSBNaW1lV2VpZ2h0OworCitzdGF0aWMgaW50CitjYWNoZV9nbG9iX2xvb2t1cF9saXRl
cmFsIChjb25zdCBjaGFyICpmaWxlX25hbWUsCisJCQkgICBjb25zdCBjaGFyICptaW1lX3R5cGVz
W10sCisJCQkgICBpbnQgICAgICAgICBuX21pbWVfdHlwZXMsCisJCQkgICBpbnQgICAgICAgICBj
YXNlX3NlbnNpdGl2ZV9jaGVjaykKK3sKKyAgY29uc3QgY2hhciAqcHRyOworICBpbnQgaSwgbWlu
LCBtYXgsIG1pZCwgY21wOworCisgIGZvciAoaSA9IDA7IF9jYWNoZXNbaV07IGkrKykKKyAgICB7
CisgICAgICBYZGdNaW1lQ2FjaGUgKmNhY2hlID0gX2NhY2hlc1tpXTsKKyAgICAgIHhkZ191aW50
MzJfdCBsaXN0X29mZnNldCA9IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIDEyKTsKKyAgICAg
IHhkZ191aW50MzJfdCBuX2VudHJpZXMgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCBsaXN0
X29mZnNldCk7CisgICAgICB4ZGdfdWludDMyX3Qgb2Zmc2V0OworCisgICAgICBtaW4gPSAwOyAK
KyAgICAgIG1heCA9IG5fZW50cmllcyAtIDE7CisgICAgICB3aGlsZSAobWF4ID49IG1pbikgCisJ
eworCSAgbWlkID0gKG1pbiArIG1heCkgLyAyOworCisJICBvZmZzZXQgPSBHRVRfVUlOVDMyIChj
YWNoZS0+YnVmZmVyLCBsaXN0X29mZnNldCArIDQgKyAxMiAqIG1pZCk7CisJICBwdHIgPSBjYWNo
ZS0+YnVmZmVyICsgb2Zmc2V0OworCSAgY21wID0gc3RyY21wIChwdHIsIGZpbGVfbmFtZSk7CisK
KwkgIGlmIChjbXAgPCAwKQorCSAgICBtaW4gPSBtaWQgKyAxOworCSAgZWxzZSBpZiAoY21wID4g
MCkKKwkgICAgbWF4ID0gbWlkIC0gMTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGludCB3ZWln
aHQgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCBsaXN0X29mZnNldCArIDQgKyAxMiAqIG1p
ZCArIDgpOworCSAgICAgIGludCBjYXNlX3NlbnNpdGl2ZSA9IHdlaWdodCAmIDB4MTAwOworCSAg
ICAgIHdlaWdodCA9IHdlaWdodCAmIDB4ZmY7CisKKwkgICAgICBpZiAoY2FzZV9zZW5zaXRpdmVf
Y2hlY2sgfHwgIWNhc2Vfc2Vuc2l0aXZlKQorCQl7CisJCSAgb2Zmc2V0ID0gR0VUX1VJTlQzMiAo
Y2FjaGUtPmJ1ZmZlciwgbGlzdF9vZmZzZXQgKyA0ICsgMTIgKiBtaWQgKyA0KTsKKwkJICBtaW1l
X3R5cGVzWzBdID0gKGNvbnN0IGNoYXIgKikoY2FjaGUtPmJ1ZmZlciArIG9mZnNldCk7CisKKwkJ
ICByZXR1cm4gMTsKKwkJfQorCSAgICAgIHJldHVybiAwOworCSAgICB9CisJfQorICAgIH0KKwor
ICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorY2FjaGVfZ2xvYl9sb29rdXBfZm5tYXRjaCAo
Y29uc3QgY2hhciAqZmlsZV9uYW1lLAorCQkJICAgTWltZVdlaWdodCAgbWltZV90eXBlc1tdLAor
CQkJICAgaW50ICAgICAgICAgbl9taW1lX3R5cGVzLAorCQkJICAgaW50ICAgICAgICAgY2FzZV9z
ZW5zaXRpdmVfY2hlY2spCit7CisgIGNvbnN0IGNoYXIgKm1pbWVfdHlwZTsKKyAgY29uc3QgY2hh
ciAqcHRyOworCisgIGludCBpLCBqLCBuOworCisgIG4gPSAwOworICBmb3IgKGkgPSAwOyBfY2Fj
aGVzW2ldOyBpKyspCisgICAgeworICAgICAgWGRnTWltZUNhY2hlICpjYWNoZSA9IF9jYWNoZXNb
aV07CisKKyAgICAgIHhkZ191aW50MzJfdCBsaXN0X29mZnNldCA9IEdFVF9VSU5UMzIgKGNhY2hl
LT5idWZmZXIsIDIwKTsKKyAgICAgIHhkZ191aW50MzJfdCBuX2VudHJpZXMgPSBHRVRfVUlOVDMy
IChjYWNoZS0+YnVmZmVyLCBsaXN0X29mZnNldCk7CisKKyAgICAgIGZvciAoaiA9IDA7IGogPCBu
X2VudHJpZXMgJiYgbiA8IG5fbWltZV90eXBlczsgaisrKQorCXsKKwkgIHhkZ191aW50MzJfdCBv
ZmZzZXQgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCBsaXN0X29mZnNldCArIDQgKyAxMiAq
IGopOworCSAgeGRnX3VpbnQzMl90IG1pbWV0eXBlX29mZnNldCA9IEdFVF9VSU5UMzIgKGNhY2hl
LT5idWZmZXIsIGxpc3Rfb2Zmc2V0ICsgNCArIDEyICogaiArIDQpOworCSAgaW50IHdlaWdodCA9
IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIGxpc3Rfb2Zmc2V0ICsgNCArIDEyICogaiArIDgp
OworCSAgaW50IGNhc2Vfc2Vuc2l0aXZlID0gd2VpZ2h0ICYgMHgxMDA7CisJICB3ZWlnaHQgPSB3
ZWlnaHQgJiAweGZmOworCSAgcHRyID0gY2FjaGUtPmJ1ZmZlciArIG9mZnNldDsKKwkgIG1pbWVf
dHlwZSA9IGNhY2hlLT5idWZmZXIgKyBtaW1ldHlwZV9vZmZzZXQ7CisJICBpZiAoY2FzZV9zZW5z
aXRpdmVfY2hlY2sgfHwgIWNhc2Vfc2Vuc2l0aXZlKQorCSAgICB7CisJICAgICAgLyogRklYTUU6
IE5vdCBVVEYtOCBzYWZlICovCisJICAgICAgaWYgKGZubWF0Y2ggKHB0ciwgZmlsZV9uYW1lLCAw
KSA9PSAwKQorCSAgICAgICAgeworCSAgICAgICAgICBtaW1lX3R5cGVzW25dLm1pbWUgPSBtaW1l
X3R5cGU7CisJICAgICAgICAgIG1pbWVfdHlwZXNbbl0ud2VpZ2h0ID0gd2VpZ2h0OworCSAgICAg
ICAgICBuKys7CisJICAgICAgICB9CisJICAgIH0KKwl9CisKKyAgICAgIGlmIChuID4gMCkKKwly
ZXR1cm4gbjsKKyAgICB9CisgIAorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorY2FjaGVf
Z2xvYl9ub2RlX2xvb2t1cF9zdWZmaXggKFhkZ01pbWVDYWNoZSAgKmNhY2hlLAorCQkJICAgICAg
IHhkZ191aW50MzJfdCAgIG5fZW50cmllcywKKwkJCSAgICAgICB4ZGdfdWludDMyX3QgICBvZmZz
ZXQsCisJCQkgICAgICAgY29uc3QgY2hhciAgICAqZmlsZV9uYW1lLAorCQkJICAgICAgIGludCAg
ICAgICAgICAgIGxlbiwKKwkJCSAgICAgICBpbnQgICAgICAgICAgICBjYXNlX3NlbnNpdGl2ZV9j
aGVjaywKKwkJCSAgICAgICBNaW1lV2VpZ2h0ICAgICBtaW1lX3R5cGVzW10sCisJCQkgICAgICAg
aW50ICAgICAgICAgICAgbl9taW1lX3R5cGVzKQoreworICB4ZGdfdW5pY2hhcl90IGNoYXJhY3Rl
cjsKKyAgeGRnX3VuaWNoYXJfdCBtYXRjaF9jaGFyOworICB4ZGdfdWludDMyX3QgbWltZXR5cGVf
b2Zmc2V0OworICB4ZGdfdWludDMyX3Qgbl9jaGlsZHJlbjsKKyAgeGRnX3VpbnQzMl90IGNoaWxk
X29mZnNldDsgCisgIGludCB3ZWlnaHQ7CisgIGludCBjYXNlX3NlbnNpdGl2ZTsKKworICBpbnQg
bWluLCBtYXgsIG1pZCwgbiwgaTsKKworICBjaGFyYWN0ZXIgPSBmaWxlX25hbWVbbGVuIC0gMV07
CisKKyAgYXNzZXJ0IChjaGFyYWN0ZXIgIT0gMCk7CisKKyAgbWluID0gMDsKKyAgbWF4ID0gbl9l
bnRyaWVzIC0gMTsKKyAgd2hpbGUgKG1heCA+PSBtaW4pCisgICAgeworICAgICAgbWlkID0gKG1p
biArIG1heCkgLyAgMjsKKyAgICAgIG1hdGNoX2NoYXIgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVm
ZmVyLCBvZmZzZXQgKyAxMiAqIG1pZCk7CisgICAgICBpZiAobWF0Y2hfY2hhciA8IGNoYXJhY3Rl
cikKKwltaW4gPSBtaWQgKyAxOworICAgICAgZWxzZSBpZiAobWF0Y2hfY2hhciA+IGNoYXJhY3Rl
cikKKwltYXggPSBtaWQgLSAxOworICAgICAgZWxzZSAKKwl7CisgICAgICAgICAgbGVuLS07Cisg
ICAgICAgICAgbiA9IDA7CisgICAgICAgICAgbl9jaGlsZHJlbiA9IEdFVF9VSU5UMzIgKGNhY2hl
LT5idWZmZXIsIG9mZnNldCArIDEyICogbWlkICsgNCk7CisgICAgICAgICAgY2hpbGRfb2Zmc2V0
ID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgb2Zmc2V0ICsgMTIgKiBtaWQgKyA4KTsKKyAg
ICAgIAorICAgICAgICAgIGlmIChsZW4gPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBuID0gY2FjaGVfZ2xvYl9ub2RlX2xvb2t1cF9zdWZmaXggKGNhY2hlLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2NoaWxkcmVuLCBjaGlsZF9v
ZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmlsZV9uYW1lLCBsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2Vfc2Vuc2l0aXZlX2NoZWNrLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1pbWVfdHlwZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9taW1lX3R5cGVzKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICBpZiAobiA9PSAwKQorICAgICAgICAgICAgeworCSAgICAgIGkgPSAwOwor
CSAgICAgIHdoaWxlIChuIDwgbl9taW1lX3R5cGVzICYmIGkgPCBuX2NoaWxkcmVuKQorCQl7CisJ
CSAgbWF0Y2hfY2hhciA9IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIGNoaWxkX29mZnNldCAr
IDEyICogaSk7CisJCSAgaWYgKG1hdGNoX2NoYXIgIT0gMCkKKwkJICAgIGJyZWFrOworCisJCSAg
bWltZXR5cGVfb2Zmc2V0ID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgY2hpbGRfb2Zmc2V0
ICsgMTIgKiBpICsgNCk7CisJCSAgd2VpZ2h0ID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwg
Y2hpbGRfb2Zmc2V0ICsgMTIgKiBpICsgOCk7CisJCSAgY2FzZV9zZW5zaXRpdmUgPSB3ZWlnaHQg
JiAweDEwMDsKKwkJICB3ZWlnaHQgPSB3ZWlnaHQgJiAweGZmOworCisJCSAgaWYgKGNhc2Vfc2Vu
c2l0aXZlX2NoZWNrIHx8ICFjYXNlX3NlbnNpdGl2ZSkKKwkJICAgIHsKKwkJICAgICAgbWltZV90
eXBlc1tuXS5taW1lID0gY2FjaGUtPmJ1ZmZlciArIG1pbWV0eXBlX29mZnNldDsKKwkJICAgICAg
bWltZV90eXBlc1tuXS53ZWlnaHQgPSB3ZWlnaHQ7CisJCSAgICAgIG4rKzsKKwkJICAgIH0KKwkJ
ICBpKys7CisJCX0KKwkgICAgfQorCSAgcmV0dXJuIG47CisJfQorICAgIH0KKyAgcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyBpbnQKK2NhY2hlX2dsb2JfbG9va3VwX3N1ZmZpeCAoY29uc3QgY2hhciAq
ZmlsZV9uYW1lLAorCQkJICBpbnQgICAgICAgICBsZW4sCisJCQkgIGludCAgICAgICAgIGlnbm9y
ZV9jYXNlLAorCQkJICBNaW1lV2VpZ2h0ICBtaW1lX3R5cGVzW10sCisJCQkgIGludCAgICAgICAg
IG5fbWltZV90eXBlcykKK3sKKyAgaW50IGksIG47CisKKyAgZm9yIChpID0gMDsgX2NhY2hlc1tp
XTsgaSsrKQorICAgIHsKKyAgICAgIFhkZ01pbWVDYWNoZSAqY2FjaGUgPSBfY2FjaGVzW2ldOwor
CisgICAgICB4ZGdfdWludDMyX3QgbGlzdF9vZmZzZXQgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVm
ZmVyLCAxNik7CisgICAgICB4ZGdfdWludDMyX3Qgbl9lbnRyaWVzID0gR0VUX1VJTlQzMiAoY2Fj
aGUtPmJ1ZmZlciwgbGlzdF9vZmZzZXQpOworICAgICAgeGRnX3VpbnQzMl90IG9mZnNldCA9IEdF
VF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIGxpc3Rfb2Zmc2V0ICsgNCk7CisKKyAgICAgIG4gPSBj
YWNoZV9nbG9iX25vZGVfbG9va3VwX3N1ZmZpeCAoY2FjaGUsIAorCQkJCQkgbl9lbnRyaWVzLCBv
ZmZzZXQsIAorCQkJCQkgZmlsZV9uYW1lLCBsZW4sCisJCQkJCSBpZ25vcmVfY2FzZSwKKwkJCQkJ
IG1pbWVfdHlwZXMsCisJCQkJCSBuX21pbWVfdHlwZXMpOworICAgICAgaWYgKG4gPiAwKQorCXJl
dHVybiBuOworICAgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb21wYXJlX21p
bWVfd2VpZ2h0IChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworICBjb25zdCBNaW1l
V2VpZ2h0ICphYSA9IChjb25zdCBNaW1lV2VpZ2h0ICopYTsKKyAgY29uc3QgTWltZVdlaWdodCAq
YmIgPSAoY29uc3QgTWltZVdlaWdodCAqKWI7CisKKyAgcmV0dXJuIGJiLT53ZWlnaHQgLSBhYS0+
d2VpZ2h0OworfQorCisjZGVmaW5lIElTVVBQRVIoYykJCSgoYykgPj0gJ0EnICYmIChjKSA8PSAn
WicpCitzdGF0aWMgY2hhciAqCithc2NpaV90b2xvd2VyIChjb25zdCBjaGFyICpzdHIpCit7Cisg
IGNoYXIgKnAsICpsb3dlcjsKKworICBsb3dlciA9IHN0cmR1cCAoc3RyKTsKKyAgcCA9IGxvd2Vy
OworICB3aGlsZSAoKnAgIT0gMCkKKyAgICB7CisgICAgICBjaGFyIGMgPSAqcDsKKyAgICAgICpw
KysgPSBJU1VQUEVSIChjKSA/IGMgLSAnQScgKyAnYScgOiBjOworICAgIH0KKyAgcmV0dXJuIGxv
d2VyOworfQorCitzdGF0aWMgaW50CitjYWNoZV9nbG9iX2xvb2t1cF9maWxlX25hbWUgKGNvbnN0
IGNoYXIgKmZpbGVfbmFtZSwgCisJCQkgICAgIGNvbnN0IGNoYXIgKm1pbWVfdHlwZXNbXSwKKwkJ
CSAgICAgaW50ICAgICAgICAgbl9taW1lX3R5cGVzKQoreworICBpbnQgbjsKKyAgTWltZVdlaWdo
dCBtaW1lc1sxMF07CisgIGludCBuX21pbWVzID0gMTA7CisgIGludCBpOworICBpbnQgbGVuOwor
ICBjaGFyICpsb3dlcl9jYXNlOworCisgIGFzc2VydCAoZmlsZV9uYW1lICE9IE5VTEwgJiYgbl9t
aW1lX3R5cGVzID4gMCk7CisKKyAgLyogRmlyc3QsIGNoZWNrIHRoZSBsaXRlcmFscyAqLworCisg
IGxvd2VyX2Nhc2UgPSBhc2NpaV90b2xvd2VyIChmaWxlX25hbWUpOworCisgIG4gPSBjYWNoZV9n
bG9iX2xvb2t1cF9saXRlcmFsIChsb3dlcl9jYXNlLCBtaW1lX3R5cGVzLCBuX21pbWVfdHlwZXMs
IEZBTFNFKTsKKyAgaWYgKG4gPiAwKQorICAgIHsKKyAgICAgIGZyZWUgKGxvd2VyX2Nhc2UpOwor
ICAgICAgcmV0dXJuIG47CisgICAgfQorCisgIG4gPSBjYWNoZV9nbG9iX2xvb2t1cF9saXRlcmFs
IChmaWxlX25hbWUsIG1pbWVfdHlwZXMsIG5fbWltZV90eXBlcywgVFJVRSk7CisgIGlmIChuID4g
MCkKKyAgICB7CisgICAgICBmcmVlIChsb3dlcl9jYXNlKTsKKyAgICAgIHJldHVybiBuOworICAg
IH0KKworICBsZW4gPSBzdHJsZW4gKGZpbGVfbmFtZSk7CisgIG4gPSBjYWNoZV9nbG9iX2xvb2t1
cF9zdWZmaXggKGxvd2VyX2Nhc2UsIGxlbiwgRkFMU0UsIG1pbWVzLCBuX21pbWVzKTsKKyAgaWYg
KG4gPT0gMCkKKyAgICBuID0gY2FjaGVfZ2xvYl9sb29rdXBfc3VmZml4IChmaWxlX25hbWUsIGxl
biwgVFJVRSwgbWltZXMsIG5fbWltZXMpOworCisgIC8qIExhc3QsIHRyeSBmbm1hdGNoICovCisg
IGlmIChuID09IDApCisgICAgbiA9IGNhY2hlX2dsb2JfbG9va3VwX2ZubWF0Y2ggKGxvd2VyX2Nh
c2UsIG1pbWVzLCBuX21pbWVzLCBGQUxTRSk7CisgIGlmIChuID09IDApCisgICAgbiA9IGNhY2hl
X2dsb2JfbG9va3VwX2ZubWF0Y2ggKGZpbGVfbmFtZSwgbWltZXMsIG5fbWltZXMsIFRSVUUpOwor
CisgIGZyZWUgKGxvd2VyX2Nhc2UpOworCisgIHFzb3J0IChtaW1lcywgbiwgc2l6ZW9mIChNaW1l
V2VpZ2h0KSwgY29tcGFyZV9taW1lX3dlaWdodCk7CisKKyAgaWYgKG5fbWltZV90eXBlcyA8IG4p
CisgICAgbiA9IG5fbWltZV90eXBlczsKKworICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorICAg
IG1pbWVfdHlwZXNbaV0gPSBtaW1lc1tpXS5taW1lOworCisgIHJldHVybiBuOworfQorCitpbnQK
K194ZGdfbWltZV9jYWNoZV9nZXRfbWF4X2J1ZmZlcl9leHRlbnRzICh2b2lkKQoreworICB4ZGdf
dWludDMyX3Qgb2Zmc2V0OworICB4ZGdfdWludDMyX3QgbWF4X2V4dGVudDsKKyAgaW50IGk7CisK
KyAgbWF4X2V4dGVudCA9IDA7CisgIGZvciAoaSA9IDA7IF9jYWNoZXNbaV07IGkrKykKKyAgICB7
CisgICAgICBYZGdNaW1lQ2FjaGUgKmNhY2hlID0gX2NhY2hlc1tpXTsKKworICAgICAgb2Zmc2V0
ID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgMjQpOworICAgICAgbWF4X2V4dGVudCA9IE1B
WCAobWF4X2V4dGVudCwgR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgb2Zmc2V0ICsgNCkpOwor
ICAgIH0KKworICByZXR1cm4gbWF4X2V4dGVudDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgor
Y2FjaGVfZ2V0X21pbWVfdHlwZV9mb3JfZGF0YSAoY29uc3Qgdm9pZCAqZGF0YSwKKwkJCSAgICAg
IHNpemVfdCAgICAgIGxlbiwKKwkJCSAgICAgIGludCAgICAgICAgKnJlc3VsdF9wcmlvLAorCQkJ
ICAgICAgY29uc3QgY2hhciAqbWltZV90eXBlc1tdLAorCQkJICAgICAgaW50ICAgICAgICAgbl9t
aW1lX3R5cGVzKQoreworICBjb25zdCBjaGFyICptaW1lX3R5cGU7CisgIGludCBpLCBuLCBwcmlv
cml0eTsKKworICBwcmlvcml0eSA9IDA7CisgIG1pbWVfdHlwZSA9IE5VTEw7CisgIGZvciAoaSA9
IDA7IF9jYWNoZXNbaV07IGkrKykKKyAgICB7CisgICAgICBYZGdNaW1lQ2FjaGUgKmNhY2hlID0g
X2NhY2hlc1tpXTsKKworICAgICAgaW50IHByaW87CisgICAgICBjb25zdCBjaGFyICptYXRjaDsK
KworICAgICAgbWF0Y2ggPSBjYWNoZV9tYWdpY19sb29rdXBfZGF0YSAoY2FjaGUsIGRhdGEsIGxl
biwgJnByaW8sIAorCQkJCSAgICAgICBtaW1lX3R5cGVzLCBuX21pbWVfdHlwZXMpOworICAgICAg
aWYgKHByaW8gPiBwcmlvcml0eSkKKwl7CisJICBwcmlvcml0eSA9IHByaW87CisJICBtaW1lX3R5
cGUgPSBtYXRjaDsKKwl9CisgICAgfQorCisgIGlmIChyZXN1bHRfcHJpbykKKyAgICAqcmVzdWx0
X3ByaW8gPSBwcmlvcml0eTsKKworICBpZiAocHJpb3JpdHkgPiAwKQorICAgIHsKKyAgICAgIC8q
IFBpY2sgZ2xvYi1yZXN1bHQgUiB3aGVyZSBtaW1lX3R5cGUgaW5oZXJpdHMgZnJvbSBSICovCisg
ICAgICBmb3IgKG4gPSAwOyBuIDwgbl9taW1lX3R5cGVzOyBuKyspCisgICAgICAgIHsKKyAgICAg
ICAgICBpZiAobWltZV90eXBlc1tuXSAmJiBfeGRnX21pbWVfY2FjaGVfbWltZV90eXBlX3N1YmNs
YXNzKG1pbWVfdHlwZXNbbl0sIG1pbWVfdHlwZSkpCisgICAgICAgICAgICAgIHJldHVybiBtaW1l
X3R5cGVzW25dOworICAgICAgICB9CisKKyAgICAgIC8qIFJldHVybiBtYWdpYyBtYXRjaCAqLwor
ICAgICAgcmV0dXJuIG1pbWVfdHlwZTsKKyAgICB9CisKKyAgLyogUGljayBmaXJzdCBnbG9iIHJl
c3VsdCwgYXMgZmFsbGJhY2sgKi8KKyAgZm9yIChuID0gMDsgbiA8IG5fbWltZV90eXBlczsgbisr
KQorICAgIHsKKyAgICAgIGlmIChtaW1lX3R5cGVzW25dKQorICAgICAgICByZXR1cm4gbWltZV90
eXBlc1tuXTsKKyAgICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKgorX3hk
Z19taW1lX2NhY2hlX2dldF9taW1lX3R5cGVfZm9yX2RhdGEgKGNvbnN0IHZvaWQgKmRhdGEsCisJ
CQkJCXNpemVfdCAgICAgIGxlbiwKKwkJCQkJaW50ICAgICAgICAqcmVzdWx0X3ByaW8pCit7Cisg
IHJldHVybiBjYWNoZV9nZXRfbWltZV90eXBlX2Zvcl9kYXRhIChkYXRhLCBsZW4sIHJlc3VsdF9w
cmlvLCBOVUxMLCAwKTsKK30KKworY29uc3QgY2hhciAqCitfeGRnX21pbWVfY2FjaGVfZ2V0X21p
bWVfdHlwZV9mb3JfZmlsZSAoY29uc3QgY2hhciAgKmZpbGVfbmFtZSwKKwkJCQkJc3RydWN0IHN0
YXQgKnN0YXRidWYpCit7CisgIGNvbnN0IGNoYXIgKm1pbWVfdHlwZTsKKyAgY29uc3QgY2hhciAq
bWltZV90eXBlc1sxMF07CisgIEZJTEUgKmZpbGU7CisgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Cisg
IGludCBtYXhfZXh0ZW50OworICBpbnQgYnl0ZXNfcmVhZDsKKyAgc3RydWN0IHN0YXQgYnVmOwor
ICBjb25zdCBjaGFyICpiYXNlX25hbWU7CisgIGludCBuOworCisgIGlmIChmaWxlX25hbWUgPT0g
TlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKworICBpZiAoISBfeGRnX3V0ZjhfdmFsaWRhdGUgKGZp
bGVfbmFtZSkpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgYmFzZV9uYW1lID0gX3hkZ19nZXRfYmFz
ZV9uYW1lIChmaWxlX25hbWUpOworICBuID0gY2FjaGVfZ2xvYl9sb29rdXBfZmlsZV9uYW1lIChi
YXNlX25hbWUsIG1pbWVfdHlwZXMsIDEwKTsKKworICBpZiAobiA9PSAxKQorICAgIHJldHVybiBt
aW1lX3R5cGVzWzBdOworCisgIGlmICghc3RhdGJ1ZikKKyAgICB7CisgICAgICBpZiAoc3RhdCAo
ZmlsZV9uYW1lLCAmYnVmKSAhPSAwKQorCXJldHVybiBYREdfTUlNRV9UWVBFX1VOS05PV047CisK
KyAgICAgIHN0YXRidWYgPSAmYnVmOworICAgIH0KKworICBpZiAoc3RhdGJ1Zi0+c3Rfc2l6ZSA9
PSAwKQorICAgIHJldHVybiBYREdfTUlNRV9UWVBFX0VNUFRZOworCisgIGlmICghU19JU1JFRyAo
c3RhdGJ1Zi0+c3RfbW9kZSkpCisgICAgcmV0dXJuIFhER19NSU1FX1RZUEVfVU5LTk9XTjsKKwor
ICAvKiBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBtYXhfZXh0ZW50IGlzbid0IHRvdGFs
bHkgYnJva2VuLiAgVGhpcyBjb3VsZAorICAgKiBiZSBsYXJnZSBhbmQgbmVlZCBnZXR0aW5nIGZy
b20gYSBzdHJlYW0gaW5zdGVhZCBvZiBqdXN0IHJlYWRpbmcgaXQgYWxsCisgICAqIGluLiAqLwor
ICBtYXhfZXh0ZW50ID0gX3hkZ19taW1lX2NhY2hlX2dldF9tYXhfYnVmZmVyX2V4dGVudHMgKCk7
CisgIGRhdGEgPSBtYWxsb2MgKG1heF9leHRlbnQpOworICBpZiAoZGF0YSA9PSBOVUxMKQorICAg
IHJldHVybiBYREdfTUlNRV9UWVBFX1VOS05PV047CisgICAgICAgIAorICBmaWxlID0gZm9wZW4g
KGZpbGVfbmFtZSwgInIiKTsKKyAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICB7CisgICAgICBmcmVl
IChkYXRhKTsKKyAgICAgIHJldHVybiBYREdfTUlNRV9UWVBFX1VOS05PV047CisgICAgfQorCisg
IGJ5dGVzX3JlYWQgPSBmcmVhZCAoZGF0YSwgMSwgbWF4X2V4dGVudCwgZmlsZSk7CisgIGlmIChm
ZXJyb3IgKGZpbGUpKQorICAgIHsKKyAgICAgIGZyZWUgKGRhdGEpOworICAgICAgZmNsb3NlIChm
aWxlKTsKKyAgICAgIHJldHVybiBYREdfTUlNRV9UWVBFX1VOS05PV047CisgICAgfQorCisgIG1p
bWVfdHlwZSA9IGNhY2hlX2dldF9taW1lX3R5cGVfZm9yX2RhdGEgKGRhdGEsIGJ5dGVzX3JlYWQs
IE5VTEwsCisJCQkJCSAgICBtaW1lX3R5cGVzLCBuKTsKKworICBpZiAoIW1pbWVfdHlwZSkKKyAg
ICBtaW1lX3R5cGUgPSBfeGRnX2JpbmFyeV9vcl90ZXh0X2ZhbGxiYWNrKGRhdGEsIGJ5dGVzX3Jl
YWQpOworCisgIGZyZWUgKGRhdGEpOworICBmY2xvc2UgKGZpbGUpOworCisgIHJldHVybiBtaW1l
X3R5cGU7Cit9CisKK2NvbnN0IGNoYXIgKgorX3hkZ19taW1lX2NhY2hlX2dldF9taW1lX3R5cGVf
ZnJvbV9maWxlX25hbWUgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSkKK3sKKyAgY29uc3QgY2hhciAq
bWltZV90eXBlOworCisgIGlmIChjYWNoZV9nbG9iX2xvb2t1cF9maWxlX25hbWUgKGZpbGVfbmFt
ZSwgJm1pbWVfdHlwZSwgMSkpCisgICAgcmV0dXJuIG1pbWVfdHlwZTsKKyAgZWxzZQorICAgIHJl
dHVybiBYREdfTUlNRV9UWVBFX1VOS05PV047Cit9CisKK2ludAorX3hkZ19taW1lX2NhY2hlX2dl
dF9taW1lX3R5cGVzX2Zyb21fZmlsZV9uYW1lIChjb25zdCBjaGFyICpmaWxlX25hbWUsCisJCQkJ
CSAgICAgICBjb25zdCBjaGFyICAqbWltZV90eXBlc1tdLAorCQkJCQkgICAgICAgaW50ICAgICAg
ICAgIG5fbWltZV90eXBlcykKK3sKKyAgcmV0dXJuIGNhY2hlX2dsb2JfbG9va3VwX2ZpbGVfbmFt
ZSAoZmlsZV9uYW1lLCBtaW1lX3R5cGVzLCBuX21pbWVfdHlwZXMpOworfQorCisjaWYgMQorc3Rh
dGljIGludAoraXNfc3VwZXJfdHlwZSAoY29uc3QgY2hhciAqbWltZSkKK3sKKyAgaW50IGxlbmd0
aDsKKyAgY29uc3QgY2hhciAqdHlwZTsKKworICBsZW5ndGggPSBzdHJsZW4gKG1pbWUpOworICB0
eXBlID0gJihtaW1lW2xlbmd0aCAtIDJdKTsKKworICBpZiAoc3RyY21wICh0eXBlLCAiLyoiKSA9
PSAwKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorI2VuZGlmCisKK2ludAorX3hk
Z19taW1lX2NhY2hlX21pbWVfdHlwZV9zdWJjbGFzcyAoY29uc3QgY2hhciAqbWltZSwKKwkJCQkg
ICAgY29uc3QgY2hhciAqYmFzZSkKK3sKKyAgY29uc3QgY2hhciAqdW1pbWUsICp1YmFzZTsKKwor
ICBpbnQgaSwgaiwgbWluLCBtYXgsIG1lZCwgY21wOworICAKKyAgdW1pbWUgPSBfeGRnX21pbWVf
Y2FjaGVfdW5hbGlhc19taW1lX3R5cGUgKG1pbWUpOworICB1YmFzZSA9IF94ZGdfbWltZV9jYWNo
ZV91bmFsaWFzX21pbWVfdHlwZSAoYmFzZSk7CisKKyAgaWYgKHN0cmNtcCAodW1pbWUsIHViYXNl
KSA9PSAwKQorICAgIHJldHVybiAxOworCisgIC8qIFdlIHJlYWxseSB3YW50IHRvIGhhbmRsZSB0
ZXh0LyAqIGluIEd0a0ZpbGVGaWx0ZXIsIHNvIHdlIGp1c3QKKyAgICogdHVybiBvbiB0aGUgc3Vw
ZXJ0eXBlIG1hdGNoaW5nCisgICAqLworI2lmIDEKKyAgLyogSGFuZGxlIHN1cGVydHlwZXMgKi8K
KyAgaWYgKGlzX3N1cGVyX3R5cGUgKHViYXNlKSAmJgorICAgICAgeGRnX21pbWVfbWVkaWFfdHlw
ZV9lcXVhbCAodW1pbWUsIHViYXNlKSkKKyAgICByZXR1cm4gMTsKKyNlbmRpZgorCisgIC8qICBI
YW5kbGUgc3BlY2lhbCBjYXNlcyB0ZXh0L3BsYWluIGFuZCBhcHBsaWNhdGlvbi9vY3RldC1zdHJl
YW0gKi8KKyAgaWYgKHN0cmNtcCAodWJhc2UsICJ0ZXh0L3BsYWluIikgPT0gMCAmJiAKKyAgICAg
IHN0cm5jbXAgKHVtaW1lLCAidGV4dC8iLCA1KSA9PSAwKQorICAgIHJldHVybiAxOworCisgIGlm
IChzdHJjbXAgKHViYXNlLCAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIikgPT0gMCkKKyAgICBy
ZXR1cm4gMTsKKyAKKyAgZm9yIChpID0gMDsgX2NhY2hlc1tpXTsgaSsrKQorICAgIHsKKyAgICAg
IFhkZ01pbWVDYWNoZSAqY2FjaGUgPSBfY2FjaGVzW2ldOworICAgICAgCisgICAgICB4ZGdfdWlu
dDMyX3QgbGlzdF9vZmZzZXQgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCA4KTsKKyAgICAg
IHhkZ191aW50MzJfdCBuX2VudHJpZXMgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCBsaXN0
X29mZnNldCk7CisgICAgICB4ZGdfdWludDMyX3Qgb2Zmc2V0LCBuX3BhcmVudHMsIHBhcmVudF9v
ZmZzZXQ7CisKKyAgICAgIG1pbiA9IDA7IAorICAgICAgbWF4ID0gbl9lbnRyaWVzIC0gMTsKKyAg
ICAgIHdoaWxlIChtYXggPj0gbWluKQorCXsKKwkgIG1lZCA9IChtaW4gKyBtYXgpLzI7CisJICAK
KwkgIG9mZnNldCA9IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIGxpc3Rfb2Zmc2V0ICsgNCAr
IDggKiBtZWQpOworCSAgY21wID0gc3RyY21wIChjYWNoZS0+YnVmZmVyICsgb2Zmc2V0LCB1bWlt
ZSk7CisJICBpZiAoY21wIDwgMCkKKwkgICAgbWluID0gbWVkICsgMTsKKwkgIGVsc2UgaWYgKGNt
cCA+IDApCisJICAgIG1heCA9IG1lZCAtIDE7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBvZmZz
ZXQgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCBsaXN0X29mZnNldCArIDQgKyA4ICogbWVk
ICsgNCk7CisJICAgICAgbl9wYXJlbnRzID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgb2Zm
c2V0KTsKKwkgICAgICAKKwkgICAgICBmb3IgKGogPSAwOyBqIDwgbl9wYXJlbnRzOyBqKyspCisJ
CXsKKwkJICBwYXJlbnRfb2Zmc2V0ID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgb2Zmc2V0
ICsgNCArIDQgKiBqKTsKKwkJICBpZiAoX3hkZ19taW1lX2NhY2hlX21pbWVfdHlwZV9zdWJjbGFz
cyAoY2FjaGUtPmJ1ZmZlciArIHBhcmVudF9vZmZzZXQsIHViYXNlKSkKKwkJICAgIHJldHVybiAx
OworCQl9CisKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgcmV0dXJuIDA7
Cit9CisKK2NvbnN0IGNoYXIgKgorX3hkZ19taW1lX2NhY2hlX3VuYWxpYXNfbWltZV90eXBlIChj
b25zdCBjaGFyICptaW1lKQoreworICBjb25zdCBjaGFyICpsb29rdXA7CisgIAorICBsb29rdXAg
PSBjYWNoZV9hbGlhc19sb29rdXAgKG1pbWUpOworICAKKyAgaWYgKGxvb2t1cCkKKyAgICByZXR1
cm4gbG9va3VwOworICAKKyAgcmV0dXJuIG1pbWU7ICAKK30KKworY2hhciAqKgorX3hkZ19taW1l
X2NhY2hlX2xpc3RfbWltZV9wYXJlbnRzIChjb25zdCBjaGFyICptaW1lKQoreworICBpbnQgaSwg
aiwgaywgbCwgcDsKKyAgY2hhciAqYWxsX3BhcmVudHNbMTI4XTsgLyogd2UnbGwgc3RvcCBhdCAx
MjggKi8gCisgIGNoYXIgKipyZXN1bHQ7CisKKyAgbWltZSA9IHhkZ19taW1lX3VuYWxpYXNfbWlt
ZV90eXBlIChtaW1lKTsKKworICBwID0gMDsKKyAgZm9yIChpID0gMDsgX2NhY2hlc1tpXTsgaSsr
KQorICAgIHsKKyAgICAgIFhkZ01pbWVDYWNoZSAqY2FjaGUgPSBfY2FjaGVzW2ldOworICAKKyAg
ICAgIHhkZ191aW50MzJfdCBsaXN0X29mZnNldCA9IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIs
IDgpOworICAgICAgeGRnX3VpbnQzMl90IG5fZW50cmllcyA9IEdFVF9VSU5UMzIgKGNhY2hlLT5i
dWZmZXIsIGxpc3Rfb2Zmc2V0KTsKKworICAgICAgZm9yIChqID0gMDsgaiA8IG5fZW50cmllczsg
aisrKQorCXsKKwkgIHhkZ191aW50MzJfdCBtaW1ldHlwZV9vZmZzZXQgPSBHRVRfVUlOVDMyIChj
YWNoZS0+YnVmZmVyLCBsaXN0X29mZnNldCArIDQgKyA4ICogaik7CisJICB4ZGdfdWludDMyX3Qg
cGFyZW50c19vZmZzZXQgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCBsaXN0X29mZnNldCAr
IDQgKyA4ICogaiArIDQpOworCisJICBpZiAoc3RyY21wIChjYWNoZS0+YnVmZmVyICsgbWltZXR5
cGVfb2Zmc2V0LCBtaW1lKSA9PSAwKQorCSAgICB7CisJICAgICAgeGRnX3VpbnQzMl90IHBhcmVu
dF9taW1lX29mZnNldDsKKwkgICAgICB4ZGdfdWludDMyX3Qgbl9wYXJlbnRzID0gR0VUX1VJTlQz
MiAoY2FjaGUtPmJ1ZmZlciwgcGFyZW50c19vZmZzZXQpOworCisJICAgICAgZm9yIChrID0gMDsg
ayA8IG5fcGFyZW50cyAmJiBwIDwgMTI3OyBrKyspCisJCXsKKwkJICBwYXJlbnRfbWltZV9vZmZz
ZXQgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCBwYXJlbnRzX29mZnNldCArIDQgKyA0ICog
ayk7CisKKwkJICAvKiBEb24ndCBhZGQgc2FtZSBwYXJlbnQgbXVsdGlwbGUgdGltZXMuCisJCSAg
ICogVGhpcyBjYW4gaGFwcGVuIGZvciBpbnN0YW5jZSBpZiB0aGUgc2FtZSB0eXBlIGlzIGxpc3Rl
ZCBpbiBtdWx0aXBsZSBkaXJlY3RvcmllcworCQkgICAqLworCQkgIGZvciAobCA9IDA7IGwgPCBw
OyBsKyspCisJCSAgICB7CisJCSAgICAgIGlmIChzdHJjbXAgKGFsbF9wYXJlbnRzW2xdLCBjYWNo
ZS0+YnVmZmVyICsgcGFyZW50X21pbWVfb2Zmc2V0KSA9PSAwKQorCQkJYnJlYWs7CisJCSAgICB9
CisKKwkJICBpZiAobCA9PSBwKQorCQkgICAgYWxsX3BhcmVudHNbcCsrXSA9IGNhY2hlLT5idWZm
ZXIgKyBwYXJlbnRfbWltZV9vZmZzZXQ7CisJCX0KKworCSAgICAgIGJyZWFrOworCSAgICB9CisJ
fQorICAgIH0KKyAgYWxsX3BhcmVudHNbcCsrXSA9IE5VTEw7CisgIAorICByZXN1bHQgPSAoY2hh
ciAqKikgbWFsbG9jIChwICogc2l6ZW9mIChjaGFyICopKTsKKyAgbWVtY3B5IChyZXN1bHQsIGFs
bF9wYXJlbnRzLCBwICogc2l6ZW9mIChjaGFyICopKTsKKworICByZXR1cm4gcmVzdWx0OworfQor
CitzdGF0aWMgY29uc3QgY2hhciAqCitjYWNoZV9sb29rdXBfaWNvbiAoY29uc3QgY2hhciAqbWlt
ZSwgaW50IGhlYWRlcikKK3sKKyAgY29uc3QgY2hhciAqcHRyOworICBpbnQgaSwgbWluLCBtYXgs
IG1pZCwgY21wOworCisgIGZvciAoaSA9IDA7IF9jYWNoZXNbaV07IGkrKykKKyAgICB7CisgICAg
ICBYZGdNaW1lQ2FjaGUgKmNhY2hlID0gX2NhY2hlc1tpXTsKKyAgICAgIHhkZ191aW50MzJfdCBs
aXN0X29mZnNldCA9IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIGhlYWRlcik7CisgICAgICB4
ZGdfdWludDMyX3Qgbl9lbnRyaWVzID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgbGlzdF9v
ZmZzZXQpOworICAgICAgeGRnX3VpbnQzMl90IG9mZnNldDsKKworICAgICAgbWluID0gMDsgCisg
ICAgICBtYXggPSBuX2VudHJpZXMgLSAxOworICAgICAgd2hpbGUgKG1heCA+PSBtaW4pIAorICAg
ICAgICB7CisgICAgICAgICAgbWlkID0gKG1pbiArIG1heCkgLyAyOworCisgICAgICAgICAgb2Zm
c2V0ID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgbGlzdF9vZmZzZXQgKyA0ICsgOCAqIG1p
ZCk7CisgICAgICAgICAgcHRyID0gY2FjaGUtPmJ1ZmZlciArIG9mZnNldDsKKyAgICAgICAgICBj
bXAgPSBzdHJjbXAgKHB0ciwgbWltZSk7CisgICAgICAgICAKKyAgICAgICAgICBpZiAoY21wIDwg
MCkKKyAgICAgICAgICAgIG1pbiA9IG1pZCArIDE7CisgICAgICAgICAgZWxzZSBpZiAoY21wID4g
MCkKKyAgICAgICAgICAgIG1heCA9IG1pZCAtIDE7CisgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICBvZmZzZXQgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCBs
aXN0X29mZnNldCArIDQgKyA4ICogbWlkICsgNCk7CisgICAgICAgICAgICAgIHJldHVybiBjYWNo
ZS0+YnVmZmVyICsgb2Zmc2V0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
IHJldHVybiBOVUxMOworfQorCitjb25zdCBjaGFyICoKK194ZGdfbWltZV9jYWNoZV9nZXRfZ2Vu
ZXJpY19pY29uIChjb25zdCBjaGFyICptaW1lKQoreworICByZXR1cm4gY2FjaGVfbG9va3VwX2lj
b24gKG1pbWUsIDM2KTsKK30KKworY29uc3QgY2hhciAqCitfeGRnX21pbWVfY2FjaGVfZ2V0X2lj
b24gKGNvbnN0IGNoYXIgKm1pbWUpCit7CisgIHJldHVybiBjYWNoZV9sb29rdXBfaWNvbiAobWlt
ZSwgMzIpOworfQorCitzdGF0aWMgaW50CitnZXRfc2ltcGxlX2dsb2JzIChYZGdNaW1lQ2FjaGUg
ICpjYWNoZSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgKm1pbWUsCisgICAgICAg
ICAgICAgICAgICBjaGFyICAgICAgICAgICpnbG9ic1tdLAorICAgICAgICAgICAgICAgICAgaW50
ICAgICAgICAgICAgbl9nbG9icywKKyAgICAgICAgICAgICAgICAgIHhkZ191aW50MzJfdCAgIG9m
ZnNldCwKKyAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgKm4sCisgICAgICAgICAgICAg
ICAgICB4ZGdfdW5pY2hhcl90ICpwcmVmaXgsCisgICAgICAgICAgICAgICAgICBpbnQgICAgICAg
ICAgICBkZXB0aCkKK3sKKyAgeGRnX3VuaWNoYXJfdCBjaGFyYWN0ZXIgPSBHRVRfVUlOVDMyIChj
YWNoZS0+YnVmZmVyLCBvZmZzZXQpOworICB4ZGdfdWludDMyX3Qgbl9jaGlsZHJlbjsKKyAgeGRn
X3VpbnQzMl90IGNoaWxkX29mZnNldDsKKyAgaW50IGk7CisKKyAgaWYgKCpuID49IG5fZ2xvYnMp
CisgICAgcmV0dXJuIEZBTFNFOworCisgIGlmIChjaGFyYWN0ZXIgPT0gMCkKKyAgICB7CisgICAg
ICB4ZGdfdWludDMyX3QgbWltZV9vZmZzZXQgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCBv
ZmZzZXQgKyA0KTsKKworICAgICAgaWYgKHN0cmNhc2VjbXAgKGNhY2hlLT5idWZmZXIgKyBtaW1l
X29mZnNldCwgbWltZSkgPT0gMCkgeworICAgICAgICBnbG9ic1sqbl0gPSBtYWxsb2MgKGRlcHRo
ICogc2l6ZW9mIChjaGFyKSk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkZXB0aDsgaSsrKQor
ICAgICAgICAgIGdsb2JzWypuXVtkZXB0aCAtIGkgLSAxXSA9IHByZWZpeFtpXTsKKyAgICAgICAg
Z2xvYnNbKm5dW2RlcHRoXSA9ICdcMCc7CisKKyAgICAgICAgKCpuKSsrOworICAgICAgfQorCisg
ICAgICByZXR1cm4gKm4gPCBuX2dsb2JzOworICAgIH0KKworICBwcmVmaXhbZGVwdGhdID0gY2hh
cmFjdGVyOworICBuX2NoaWxkcmVuID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgb2Zmc2V0
ICsgNCk7CisgIGNoaWxkX29mZnNldCA9IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIG9mZnNl
dCArIDgpOworICBmb3IgKGkgPSAwOyBpIDwgbl9jaGlsZHJlbjsgaSsrKQorICAgIHsKKyAgICAg
IGlmICghZ2V0X3NpbXBsZV9nbG9icyAoY2FjaGUsIG1pbWUsIGdsb2JzLCBuX2dsb2JzLCBjaGls
ZF9vZmZzZXQgKyAxMiAqIGksIG4sIHByZWZpeCwgZGVwdGggKyAxKSkKKyAgICAgICAgcmV0dXJu
IEZBTFNFOworICAgIH0KKworICByZXR1cm4gKm4gPCBuX2dsb2JzOworfQorCitpbnQKK194ZGdf
bWltZV9jYWNoZV9nZXRfc2ltcGxlX2dsb2JzIChjb25zdCBjaGFyICptaW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgKmdsb2JzW10sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgbl9nbG9icykKK3sKKyAgaW50IGks
IGosIG47CisgIHhkZ191bmljaGFyX3QgcHJlZml4WzI1XTsKKworICBtaW1lID0geGRnX21pbWVf
dW5hbGlhc19taW1lX3R5cGUgKG1pbWUpOworCisgIG4gPSAwOworICBmb3IgKGkgPSAwOyBfY2Fj
aGVzW2ldOyBpKyspCisgICAgeworICAgICAgWGRnTWltZUNhY2hlICpjYWNoZSA9IF9jYWNoZXNb
aV07CisgICAgICB4ZGdfdWludDMyX3QgbGlzdF9vZmZzZXQgPSBHRVRfVUlOVDMyIChjYWNoZS0+
YnVmZmVyLCAxNik7CisgICAgICB4ZGdfdWludDMyX3Qgbl9lbnRyaWVzID0gR0VUX1VJTlQzMiAo
Y2FjaGUtPmJ1ZmZlciwgbGlzdF9vZmZzZXQpOworICAgICAgeGRnX3VpbnQzMl90IG9mZnNldCA9
IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIGxpc3Rfb2Zmc2V0ICsgNCk7CisKKyAgICAgIGZv
ciAoaiA9IDA7IGogPCBuX2VudHJpZXMgJiYgbiA8IG5fZ2xvYnM7IGorKykKKyAgICAgICAgewor
ICAgICAgICAgIGlmICghZ2V0X3NpbXBsZV9nbG9icyAoY2FjaGUsIG1pbWUsIGdsb2JzLCBuX2ds
b2JzLCBvZmZzZXQgKyAxMiAqIGosICZuLCBwcmVmaXgsIDApKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgaWYgKG4gPiAwKQorICAgICAgICByZXR1cm4gbjsKKyAgICB9
CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitkdW1wX2dsb2Jfbm9kZSAoWGRnTWlt
ZUNhY2hlICpjYWNoZSwKKwkJeGRnX3VpbnQzMl90ICBvZmZzZXQsCisJCWludCAgICAgICAgICAg
ZGVwdGgpCit7CisgIHhkZ191bmljaGFyX3QgY2hhcmFjdGVyOworICB4ZGdfdWludDMyX3QgbWlt
ZV9vZmZzZXQ7CisgIHhkZ191aW50MzJfdCBuX2NoaWxkcmVuOworICB4ZGdfdWludDMyX3QgY2hp
bGRfb2Zmc2V0OworICBpbnQgaTsKKworICBjaGFyYWN0ZXIgPSBHRVRfVUlOVDMyIChjYWNoZS0+
YnVmZmVyLCBvZmZzZXQpOworICBtaW1lX29mZnNldCA9IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZm
ZXIsIG9mZnNldCArIDQpOworICBuX2NoaWxkcmVuID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZl
ciwgb2Zmc2V0ICsgOCk7CisgIGNoaWxkX29mZnNldCA9IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZm
ZXIsIG9mZnNldCArIDEyKTsKKyAgZm9yIChpID0gMDsgaSA8IGRlcHRoOyBpKyspCisgICAgcHJp
bnRmICgiICIpOworICBwcmludGYgKCIlYyIsIGNoYXJhY3Rlcik7CisgIGlmIChtaW1lX29mZnNl
dCkKKyAgICBwcmludGYgKCIgLSAlcyIsIGNhY2hlLT5idWZmZXIgKyBtaW1lX29mZnNldCk7Cisg
IHByaW50ZiAoIlxuIik7CisgIGlmIChjaGlsZF9vZmZzZXQpCisgIHsKKyAgICBmb3IgKGkgPSAw
OyBpIDwgbl9jaGlsZHJlbjsgaSsrKQorICAgICAgZHVtcF9nbG9iX25vZGUgKGNhY2hlLCBjaGls
ZF9vZmZzZXQgKyAyMCAqIGksIGRlcHRoICsgMSk7CisgIH0KK30KKwordm9pZAorX3hkZ19taW1l
X2NhY2hlX2dsb2JfZHVtcCAodm9pZCkKK3sKKyAgaW50IGksIGo7CisgIGZvciAoaSA9IDA7IF9j
YWNoZXNbaV07IGkrKykKKyAgeworICAgIFhkZ01pbWVDYWNoZSAqY2FjaGUgPSBfY2FjaGVzW2ld
OworICAgIHhkZ191aW50MzJfdCBsaXN0X29mZnNldDsKKyAgICB4ZGdfdWludDMyX3Qgbl9lbnRy
aWVzOworICAgIHhkZ191aW50MzJfdCBvZmZzZXQ7CisgICAgbGlzdF9vZmZzZXQgPSBHRVRfVUlO
VDMyIChjYWNoZS0+YnVmZmVyLCAxNik7CisgICAgbl9lbnRyaWVzID0gR0VUX1VJTlQzMiAoY2Fj
aGUtPmJ1ZmZlciwgbGlzdF9vZmZzZXQpOworICAgIG9mZnNldCA9IEdFVF9VSU5UMzIgKGNhY2hl
LT5idWZmZXIsIGxpc3Rfb2Zmc2V0ICsgNCk7CisgICAgZm9yIChqID0gMDsgaiA8IG5fZW50cmll
czsgaisrKQorCSAgICBkdW1wX2dsb2Jfbm9kZSAoY2FjaGUsIG9mZnNldCArIDIwICogaiwgMCk7
CisgIH0KK30KKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS94ZGdtaW1lL3NyYy94
ZGdtaW1lY2FjaGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvc3JjL3hkZ21pbWVjYWNo
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jNjMxZDQ4MTQ1YQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvc3JjL3hkZ21pbWVj
YWNoZS5oCkBAIC0wLDAgKzEsODUgQEAKKy8qIC0qLSBtb2RlOiBDOyBjLWZpbGUtc3R5bGU6ICJn
bnUiIC0qLSAqLworLyogeGRnbWltZWNhY2hlLmg6IFByaXZhdGUgZmlsZS4gIERhdGFzdHJ1Y3R1
cmUgZm9yIG1tYXBwZWQgY2FjaGVzLgorICoKKyAqIE1vcmUgaW5mbyBjYW4gYmUgZm91bmQgYXQg
aHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc3RhbmRhcmRzLworICoKKyAqIENvcHlyaWdodCAo
QykgMjAwNSAgTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+CisgKgorICogTGlj
ZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDIuMAorICogT3Ig
dW5kZXIgdGhlIGZvbGxvd2luZyB0ZXJtczoKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlIEdOVQorICogTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBT
dWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVm
IF9fWERHX01JTUVfQ0FDSEVfSF9fCisjZGVmaW5lIF9fWERHX01JTUVfQ0FDSEVfSF9fCisKKyNp
bmNsdWRlICJ4ZGdtaW1lLmgiCisKK3R5cGVkZWYgc3RydWN0IF9YZGdNaW1lQ2FjaGUgWGRnTWlt
ZUNhY2hlOworCisjaWZkZWYgWERHX1BSRUZJWAorI2RlZmluZSBfeGRnX21pbWVfY2FjaGVfbmV3
X2Zyb21fZmlsZSAgICAgICAgICAgICAgICAgWERHX1JFU0VSVkVEX0VOVFJZKGNhY2hlX25ld19m
cm9tX2ZpbGUpCisjZGVmaW5lIF94ZGdfbWltZV9jYWNoZV9yZWYgICAgICAgICAgICAgICAgICAg
ICAgICAgICBYREdfUkVTRVJWRURfRU5UUlkoY2FjaGVfcmVmKQorI2RlZmluZSBfeGRnX21pbWVf
Y2FjaGVfdW5yZWYgICAgICAgICAgICAgICAgICAgICAgICAgWERHX1JFU0VSVkVEX0VOVFJZKGNh
Y2hlX3VucmVmKQorI2RlZmluZSBfeGRnX21pbWVfY2FjaGVfZ2V0X21heF9idWZmZXJfZXh0ZW50
cyAgICAgICAgWERHX1JFU0VSVkVEX0VOVFJZKGNhY2hlX2dldF9tYXhfYnVmZmVyX2V4dGVudHMp
CisjZGVmaW5lIF94ZGdfbWltZV9jYWNoZV9nZXRfbWltZV90eXBlX2Zvcl9kYXRhICAgICAgICBY
REdfUkVTRVJWRURfRU5UUlkoY2FjaGVfZ2V0X21pbWVfdHlwZV9mb3JfZGF0YSkKKyNkZWZpbmUg
X3hkZ19taW1lX2NhY2hlX2dldF9taW1lX3R5cGVfZm9yX2ZpbGUgICAgICAgIFhER19SRVNFUlZF
RF9FTlRSWShjYWNoZV9nZXRfbWltZV90eXBlX2Zvcl9maWxlKQorI2RlZmluZSBfeGRnX21pbWVf
Y2FjaGVfZ2V0X21pbWVfdHlwZV9mcm9tX2ZpbGVfbmFtZSAgWERHX1JFU0VSVkVEX0VOVFJZKGNh
Y2hlX2dldF9taW1lX3R5cGVfZnJvbV9maWxlX25hbWUpCisjZGVmaW5lIF94ZGdfbWltZV9jYWNo
ZV9nZXRfbWltZV90eXBlc19mcm9tX2ZpbGVfbmFtZSBYREdfUkVTRVJWRURfRU5UUlkoY2FjaGVf
Z2V0X21pbWVfdHlwZXNfZnJvbV9maWxlX25hbWUpCisjZGVmaW5lIF94ZGdfbWltZV9jYWNoZV9s
aXN0X21pbWVfcGFyZW50cyAgICAgICAgICAgICBYREdfUkVTRVJWRURfRU5UUlkoY2FjaGVfbGlz
dF9taW1lX3BhcmVudHMpCisjZGVmaW5lIF94ZGdfbWltZV9jYWNoZV9taW1lX3R5cGVfc3ViY2xh
c3MgICAgICAgICAgICBYREdfUkVTRVJWRURfRU5UUlkoY2FjaGVfbWltZV90eXBlX3N1YmNsYXNz
KQorI2RlZmluZSBfeGRnX21pbWVfY2FjaGVfdW5hbGlhc19taW1lX3R5cGUgICAgICAgICAgICAg
WERHX1JFU0VSVkVEX0VOVFJZKGNhY2hlX3VuYWxpYXNfbWltZV90eXBlKQorI2RlZmluZSBfeGRn
X21pbWVfY2FjaGVfZ2V0X2ljb24gICAgICAgICAgICAgICAgICAgICAgWERHX1JFU0VSVkVEX0VO
VFJZKGNhY2hlX2dldF9pY29uKQorI2RlZmluZSBfeGRnX21pbWVfY2FjaGVfZ2V0X2dlbmVyaWNf
aWNvbiAgICAgICAgICAgICAgWERHX1JFU0VSVkVEX0VOVFJZKGNhY2hlX2dldF9nZW5lcmljX2lj
b24pCisjZGVmaW5lIF94ZGdfbWltZV9jYWNoZV9nZXRfc2ltcGxlX2dsb2JzICAgICAgICAgICAg
ICBYREdfUkVTRVJWRURfRU5UUlkoY2FjaGVfZ2V0X3NpbXBsZV9nbG9icykKKyNkZWZpbmUgX3hk
Z19taW1lX2NhY2hlX2dsb2JfZHVtcCAgICAgICAgICAgICAgICAgICAgIFhER19SRVNFUlZFRF9F
TlRSWShjYWNoZV9nbG9iX2R1bXApCisjZW5kaWYKKworZXh0ZXJuIFhkZ01pbWVDYWNoZSAqKl9j
YWNoZXM7CisKK1hkZ01pbWVDYWNoZSAqX3hkZ19taW1lX2NhY2hlX25ld19mcm9tX2ZpbGUgKGNv
bnN0IGNoYXIgICAqZmlsZV9uYW1lKTsKK1hkZ01pbWVDYWNoZSAqX3hkZ19taW1lX2NhY2hlX3Jl
ZiAgICAgICAgICAgKFhkZ01pbWVDYWNoZSAqY2FjaGUpOwordm9pZCAgICAgICAgICBfeGRnX21p
bWVfY2FjaGVfdW5yZWYgICAgICAgICAoWGRnTWltZUNhY2hlICpjYWNoZSk7CisKKworY29uc3Qg
Y2hhciAgKl94ZGdfbWltZV9jYWNoZV9nZXRfbWltZV90eXBlX2Zvcl9kYXRhICAgICAgIChjb25z
dCB2b2lkICpkYXRhLAorCQkgCQkJCSAgICAgICAgICAgc2l6ZV90ICAgICAgbGVuLAorCQkJCQkJ
CSAgIGludCAgICAgICAgKnJlc3VsdF9wcmlvKTsKK2NvbnN0IGNoYXIgICpfeGRnX21pbWVfY2Fj
aGVfZ2V0X21pbWVfdHlwZV9mb3JfZmlsZSAgICAgICAoY29uc3QgY2hhciAgKmZpbGVfbmFtZSwK
KwkJCQkJCQkgICBzdHJ1Y3Qgc3RhdCAqc3RhdGJ1Zik7CitpbnQgICAgICAgICAgX3hkZ19taW1l
X2NhY2hlX2dldF9taW1lX3R5cGVzX2Zyb21fZmlsZV9uYW1lIChjb25zdCBjaGFyICpmaWxlX25h
bWUsCisJCQkJCQkJICAgIGNvbnN0IGNoYXIgICptaW1lX3R5cGVzW10sCisJCQkJCQkJICAgIGlu
dCAgICAgICAgICBuX21pbWVfdHlwZXMpOworY29uc3QgY2hhciAgKl94ZGdfbWltZV9jYWNoZV9n
ZXRfbWltZV90eXBlX2Zyb21fZmlsZV9uYW1lIChjb25zdCBjaGFyICpmaWxlX25hbWUpOworaW50
ICAgICAgICAgIF94ZGdfbWltZV9jYWNoZV9pc192YWxpZF9taW1lX3R5cGUgICAgICAgICAgIChj
b25zdCBjaGFyICptaW1lX3R5cGUpOworaW50ICAgICAgICAgIF94ZGdfbWltZV9jYWNoZV9taW1l
X3R5cGVfZXF1YWwgICAgICAgICAgICAgIChjb25zdCBjaGFyICptaW1lX2EsCisJCQkJCQkgICAg
ICAgICAgIGNvbnN0IGNoYXIgKm1pbWVfYik7CitpbnQgICAgICAgICAgX3hkZ19taW1lX2NhY2hl
X21lZGlhX3R5cGVfZXF1YWwgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKm1pbWVfYSwKKwkJCQkJ
CQkgICBjb25zdCBjaGFyICptaW1lX2IpOworaW50ICAgICAgICAgIF94ZGdfbWltZV9jYWNoZV9t
aW1lX3R5cGVfc3ViY2xhc3MgICAgICAgICAgIChjb25zdCBjaGFyICptaW1lX2EsCisJCQkJCQkJ
ICAgY29uc3QgY2hhciAqbWltZV9iKTsKK2NoYXIgICAgICAgKipfeGRnX21pbWVfY2FjaGVfbGlz
dF9taW1lX3BhcmVudHMJCSAgKGNvbnN0IGNoYXIgKm1pbWUpOworY29uc3QgY2hhciAgKl94ZGdf
bWltZV9jYWNoZV91bmFsaWFzX21pbWVfdHlwZSAgICAgICAgICAgIChjb25zdCBjaGFyICptaW1l
KTsKK2ludCAgICAgICAgICBfeGRnX21pbWVfY2FjaGVfZ2V0X21heF9idWZmZXJfZXh0ZW50cyAg
ICAgICAodm9pZCk7Citjb25zdCBjaGFyICAqX3hkZ19taW1lX2NhY2hlX2dldF9pY29uICAgICAg
ICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKm1pbWUpOworY29uc3QgY2hhciAgKl94ZGdfbWlt
ZV9jYWNoZV9nZXRfZ2VuZXJpY19pY29uICAgICAgICAgICAgIChjb25zdCBjaGFyICptaW1lKTsK
K2ludCAgICAgICAgICBfeGRnX21pbWVfY2FjaGVfZ2V0X3NpbXBsZV9nbG9icyAgICAgICAgICAg
ICAoY29uc3QgY2hhciAqbWltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAqZ2xvYnNbXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAg
ICAgbl9nbG9icyk7Cit2b2lkICAgICAgICAgX3hkZ19taW1lX2NhY2hlX2dsb2JfZHVtcCAgICAg
ICAgICAgICAgICAgICAgKHZvaWQpOworCisjZW5kaWYgLyogX19YREdfTUlNRV9DQUNIRV9IX18g
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvc3JjL3hkZ21pbWVnbG9i
LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS94ZGdtaW1lL3NyYy94ZGdtaW1lZ2xvYi5jCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42ZmQ5MGZjMmZhMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvc3JjL3hkZ21pbWVnbG9iLmMKQEAgLTAs
MCArMSw3NTIgQEAKKy8qIC0qLSBtb2RlOiBDOyBjLWZpbGUtc3R5bGU6ICJnbnUiIC0qLSAqLwor
LyogeGRnbWltZWdsb2IuYzogUHJpdmF0ZSBmaWxlLiAgRGF0YXN0cnVjdHVyZSBmb3Igc3Rvcmlu
ZyB0aGUgZ2xvYnMuCisgKgorICogTW9yZSBpbmZvIGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vd3d3
LmZyZWVkZXNrdG9wLm9yZy9zdGFuZGFyZHMvCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzICBS
ZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgIEpvbmF0aGFuIEJsYW5kZm9yZCA8
anJiQGFsdW0ubWl0LmVkdT4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQWNhZGVtaWMgRnJl
ZSBMaWNlbnNlIHZlcnNpb24gMi4wCisgKiBPciB1bmRlciB0aGUgZm9sbG93aW5nIHRlcm1zOgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4JIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNywgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY21h
a2Vjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAieGRnbWltZWdsb2IuaCIKKyNpbmNsdWRl
ICJ4ZGdtaW1laW50LmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4K
KyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmbm1h
dGNoLmg+CisKKyNpZm5kZWYJRkFMU0UKKyNkZWZpbmUJRkFMU0UJKDApCisjZW5kaWYKKworI2lm
bmRlZglUUlVFCisjZGVmaW5lCVRSVUUJKCFGQUxTRSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVj
dCBYZGdHbG9iSGFzaE5vZGUgWGRnR2xvYkhhc2hOb2RlOwordHlwZWRlZiBzdHJ1Y3QgWGRnR2xv
Ykxpc3QgWGRnR2xvYkxpc3Q7CisKK3N0cnVjdCBYZGdHbG9iSGFzaE5vZGUKK3sKKyAgeGRnX3Vu
aWNoYXJfdCBjaGFyYWN0ZXI7CisgIGNvbnN0IGNoYXIgKm1pbWVfdHlwZTsKKyAgaW50IHdlaWdo
dDsKKyAgaW50IGNhc2Vfc2Vuc2l0aXZlOworICBYZGdHbG9iSGFzaE5vZGUgKm5leHQ7CisgIFhk
Z0dsb2JIYXNoTm9kZSAqY2hpbGQ7Cit9Oworc3RydWN0IFhkZ0dsb2JMaXN0Cit7CisgIGNvbnN0
IGNoYXIgKmRhdGE7CisgIGNvbnN0IGNoYXIgKm1pbWVfdHlwZTsKKyAgaW50IHdlaWdodDsKKyAg
aW50IGNhc2Vfc2Vuc2l0aXZlOworICBYZGdHbG9iTGlzdCAqbmV4dDsKK307CisKK3N0cnVjdCBY
ZGdHbG9iSGFzaAoreworICBYZGdHbG9iTGlzdCAqbGl0ZXJhbF9saXN0OworICBYZGdHbG9iSGFz
aE5vZGUgKnNpbXBsZV9ub2RlOworICBYZGdHbG9iTGlzdCAqZnVsbF9saXN0OworfTsKKworCisv
KiBYZGdHbG9iTGlzdAorICovCitzdGF0aWMgWGRnR2xvYkxpc3QgKgorX3hkZ19nbG9iX2xpc3Rf
bmV3ICh2b2lkKQoreworICBYZGdHbG9iTGlzdCAqbmV3X2VsZW1lbnQ7CisKKyAgbmV3X2VsZW1l
bnQgPSBjYWxsb2MgKDEsIHNpemVvZiAoWGRnR2xvYkxpc3QpKTsKKworICByZXR1cm4gbmV3X2Vs
ZW1lbnQ7Cit9CisKKy8qIEZyZWVzIGdsb2JfbGlzdCBhbmQgYWxsIG9mIGl0J3MgY2hpbGRyZW4g
Ki8KK3N0YXRpYyB2b2lkCitfeGRnX2dsb2JfbGlzdF9mcmVlIChYZGdHbG9iTGlzdCAqZ2xvYl9s
aXN0KQoreworICBYZGdHbG9iTGlzdCAqcHRyLCAqbmV4dDsKKworICBwdHIgPSBnbG9iX2xpc3Q7
CisKKyAgd2hpbGUgKHB0ciAhPSBOVUxMKQorICAgIHsKKyAgICAgIG5leHQgPSBwdHItPm5leHQ7
CisKKyAgICAgIGlmIChwdHItPmRhdGEpCisJZnJlZSAoKHZvaWQgKikgcHRyLT5kYXRhKTsKKyAg
ICAgIGlmIChwdHItPm1pbWVfdHlwZSkKKwlmcmVlICgodm9pZCAqKSBwdHItPm1pbWVfdHlwZSk7
CisgICAgICBmcmVlIChwdHIpOworCisgICAgICBwdHIgPSBuZXh0OworICAgIH0KK30KKworc3Rh
dGljIFhkZ0dsb2JMaXN0ICoKK194ZGdfZ2xvYl9saXN0X2FwcGVuZCAoWGRnR2xvYkxpc3QgKmds
b2JfbGlzdCwKKwkJICAgICAgIHZvaWQgICAgICAgICpkYXRhLAorCQkgICAgICAgY29uc3QgY2hh
ciAgKm1pbWVfdHlwZSwKKwkJICAgICAgIGludCAgICAgICAgICB3ZWlnaHQsCisJCSAgICAgICBp
bnQgICAgICAgICAgY2FzZV9zZW5zaXRpdmUpCit7CisgIFhkZ0dsb2JMaXN0ICpuZXdfZWxlbWVu
dDsKKyAgWGRnR2xvYkxpc3QgKnRtcF9lbGVtZW50OworCisgIHRtcF9lbGVtZW50ID0gZ2xvYl9s
aXN0OworICB3aGlsZSAodG1wX2VsZW1lbnQgIT0gTlVMTCkKKyAgICB7CisgICAgICBpZiAoc3Ry
Y21wICh0bXBfZWxlbWVudC0+ZGF0YSwgZGF0YSkgPT0gMCAmJgorCSAgc3RyY21wICh0bXBfZWxl
bWVudC0+bWltZV90eXBlLCBtaW1lX3R5cGUpID09IDApCisJcmV0dXJuIGdsb2JfbGlzdDsKKwor
ICAgICAgdG1wX2VsZW1lbnQgPSB0bXBfZWxlbWVudC0+bmV4dDsKKyAgICB9CisKKyAgbmV3X2Vs
ZW1lbnQgPSBfeGRnX2dsb2JfbGlzdF9uZXcgKCk7CisgIG5ld19lbGVtZW50LT5kYXRhID0gZGF0
YTsKKyAgbmV3X2VsZW1lbnQtPm1pbWVfdHlwZSA9IG1pbWVfdHlwZTsKKyAgbmV3X2VsZW1lbnQt
PndlaWdodCA9IHdlaWdodDsKKyAgbmV3X2VsZW1lbnQtPmNhc2Vfc2Vuc2l0aXZlID0gY2FzZV9z
ZW5zaXRpdmU7CisgIGlmIChnbG9iX2xpc3QgPT0gTlVMTCkKKyAgICByZXR1cm4gbmV3X2VsZW1l
bnQ7CisKKyAgdG1wX2VsZW1lbnQgPSBnbG9iX2xpc3Q7CisgIHdoaWxlICh0bXBfZWxlbWVudC0+
bmV4dCAhPSBOVUxMKQorICAgIHRtcF9lbGVtZW50ID0gdG1wX2VsZW1lbnQtPm5leHQ7CisKKyAg
dG1wX2VsZW1lbnQtPm5leHQgPSBuZXdfZWxlbWVudDsKKworICByZXR1cm4gZ2xvYl9saXN0Owor
fQorCisvKiBYZGdHbG9iSGFzaE5vZGUKKyAqLworCitzdGF0aWMgWGRnR2xvYkhhc2hOb2RlICoK
K194ZGdfZ2xvYl9oYXNoX25vZGVfbmV3ICh2b2lkKQoreworICBYZGdHbG9iSGFzaE5vZGUgKmds
b2JfaGFzaF9ub2RlOworCisgIGdsb2JfaGFzaF9ub2RlID0gY2FsbG9jICgxLCBzaXplb2YgKFhk
Z0dsb2JIYXNoTm9kZSkpOworCisgIHJldHVybiBnbG9iX2hhc2hfbm9kZTsKK30KKworc3RhdGlj
IHZvaWQKK194ZGdfZ2xvYl9oYXNoX25vZGVfZHVtcCAoWGRnR2xvYkhhc2hOb2RlICpnbG9iX2hh
c2hfbm9kZSwKKwkJCSAgaW50IGRlcHRoKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8
IGRlcHRoOyBpKyspCisgICAgcHJpbnRmICgiICIpOworCisgIHByaW50ZiAoIiVjIiwgKGNoYXIp
Z2xvYl9oYXNoX25vZGUtPmNoYXJhY3Rlcik7CisgIGlmIChnbG9iX2hhc2hfbm9kZS0+bWltZV90
eXBlKQorICAgIHByaW50ZiAoIiAtICVzICVkXG4iLCBnbG9iX2hhc2hfbm9kZS0+bWltZV90eXBl
LCBnbG9iX2hhc2hfbm9kZS0+d2VpZ2h0KTsKKyAgZWxzZQorICAgIHByaW50ZiAoIlxuIik7Cisg
IGlmIChnbG9iX2hhc2hfbm9kZS0+Y2hpbGQpCisgICAgX3hkZ19nbG9iX2hhc2hfbm9kZV9kdW1w
IChnbG9iX2hhc2hfbm9kZS0+Y2hpbGQsIGRlcHRoICsgMSk7CisgIGlmIChnbG9iX2hhc2hfbm9k
ZS0+bmV4dCkKKyAgICBfeGRnX2dsb2JfaGFzaF9ub2RlX2R1bXAgKGdsb2JfaGFzaF9ub2RlLT5u
ZXh0LCBkZXB0aCk7Cit9CisKK3N0YXRpYyBYZGdHbG9iSGFzaE5vZGUgKgorX3hkZ19nbG9iX2hh
c2hfaW5zZXJ0X3VjczQgKFhkZ0dsb2JIYXNoTm9kZSAqZ2xvYl9oYXNoX25vZGUsCisJCQkgICAg
eGRnX3VuaWNoYXJfdCAgICp0ZXh0LAorCQkJICAgIGNvbnN0IGNoYXIgICAgICAqbWltZV90eXBl
LAorCQkJICAgIGludCAgICAgICAgICAgICAgd2VpZ2h0LAorCQkJICAgIGludCAgICAgICAgICAg
ICAgY2FzZV9zZW5zaXRpdmUpCit7CisgIFhkZ0dsb2JIYXNoTm9kZSAqbm9kZTsKKyAgeGRnX3Vu
aWNoYXJfdCBjaGFyYWN0ZXI7CisKKyAgY2hhcmFjdGVyID0gdGV4dFswXTsKKworICBpZiAoKGds
b2JfaGFzaF9ub2RlID09IE5VTEwpIHx8CisgICAgICAoY2hhcmFjdGVyIDwgZ2xvYl9oYXNoX25v
ZGUtPmNoYXJhY3RlcikpCisgICAgeworICAgICAgbm9kZSA9IF94ZGdfZ2xvYl9oYXNoX25vZGVf
bmV3ICgpOworICAgICAgbm9kZS0+Y2hhcmFjdGVyID0gY2hhcmFjdGVyOworICAgICAgbm9kZS0+
bmV4dCA9IGdsb2JfaGFzaF9ub2RlOworICAgICAgZ2xvYl9oYXNoX25vZGUgPSBub2RlOworICAg
IH0KKyAgZWxzZSBpZiAoY2hhcmFjdGVyID09IGdsb2JfaGFzaF9ub2RlLT5jaGFyYWN0ZXIpCisg
ICAgeworICAgICAgbm9kZSA9IGdsb2JfaGFzaF9ub2RlOworICAgIH0KKyAgZWxzZQorICAgIHsK
KyAgICAgIFhkZ0dsb2JIYXNoTm9kZSAqcHJldl9ub2RlOworICAgICAgaW50IGZvdW5kX25vZGUg
PSBGQUxTRTsKKworICAgICAgLyogTG9vayBmb3IgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0ZXh0
IGluIGdsb2JfaGFzaF9ub2RlLCBhbmQgaW5zZXJ0IGl0IGlmIHdlCisgICAgICAgKiBoYXZlIHRv
LiovCisgICAgICBwcmV2X25vZGUgPSBnbG9iX2hhc2hfbm9kZTsKKyAgICAgIG5vZGUgPSBwcmV2
X25vZGUtPm5leHQ7CisKKyAgICAgIHdoaWxlIChub2RlICE9IE5VTEwpCisJeworCSAgaWYgKGNo
YXJhY3RlciA8IG5vZGUtPmNoYXJhY3RlcikKKwkgICAgeworCSAgICAgIG5vZGUgPSBfeGRnX2ds
b2JfaGFzaF9ub2RlX25ldyAoKTsKKwkgICAgICBub2RlLT5jaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7
CisJICAgICAgbm9kZS0+bmV4dCA9IHByZXZfbm9kZS0+bmV4dDsKKwkgICAgICBwcmV2X25vZGUt
Pm5leHQgPSBub2RlOworCisJICAgICAgZm91bmRfbm9kZSA9IFRSVUU7CisJICAgICAgYnJlYWs7
CisJICAgIH0KKwkgIGVsc2UgaWYgKGNoYXJhY3RlciA9PSBub2RlLT5jaGFyYWN0ZXIpCisJICAg
IHsKKwkgICAgICBmb3VuZF9ub2RlID0gVFJVRTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCSAg
cHJldl9ub2RlID0gbm9kZTsKKwkgIG5vZGUgPSBub2RlLT5uZXh0OworCX0KKworICAgICAgaWYg
KCEgZm91bmRfbm9kZSkKKwl7CisJICBub2RlID0gX3hkZ19nbG9iX2hhc2hfbm9kZV9uZXcgKCk7
CisJICBub2RlLT5jaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7CisJICBub2RlLT5uZXh0ID0gcHJldl9u
b2RlLT5uZXh0OworCSAgcHJldl9ub2RlLT5uZXh0ID0gbm9kZTsKKwl9CisgICAgfQorCisgIHRl
eHQrKzsKKyAgaWYgKCp0ZXh0ID09IDApCisgICAgeworICAgICAgaWYgKG5vZGUtPm1pbWVfdHlw
ZSkKKwl7CisJICBpZiAoc3RyY21wIChub2RlLT5taW1lX3R5cGUsIG1pbWVfdHlwZSkgIT0gMCkK
KwkgICAgeworCSAgICAgIFhkZ0dsb2JIYXNoTm9kZSAqY2hpbGQ7CisJICAgICAgaW50IGZvdW5k
X25vZGUgPSBGQUxTRTsKKworCSAgICAgIGNoaWxkID0gbm9kZS0+Y2hpbGQ7CisJICAgICAgd2hp
bGUgKGNoaWxkICYmIGNoaWxkLT5jaGFyYWN0ZXIgPT0gMCkKKwkJeworCQkgIGlmIChzdHJjbXAg
KGNoaWxkLT5taW1lX3R5cGUsIG1pbWVfdHlwZSkgPT0gMCkKKwkJICAgIHsKKwkJICAgICAgZm91
bmRfbm9kZSA9IFRSVUU7CisJCSAgICAgIGJyZWFrOworCQkgICAgfQorCQkgIGNoaWxkID0gY2hp
bGQtPm5leHQ7CisJCX0KKworCSAgICAgIGlmICghZm91bmRfbm9kZSkKKwkJeworCQkgIGNoaWxk
ID0gX3hkZ19nbG9iX2hhc2hfbm9kZV9uZXcgKCk7CisJCSAgY2hpbGQtPmNoYXJhY3RlciA9IDA7
CisJCSAgY2hpbGQtPm1pbWVfdHlwZSA9IHN0cmR1cCAobWltZV90eXBlKTsKKwkJICBjaGlsZC0+
d2VpZ2h0ID0gd2VpZ2h0OworCQkgIGNoaWxkLT5jYXNlX3NlbnNpdGl2ZSA9IGNhc2Vfc2Vuc2l0
aXZlOworCQkgIGNoaWxkLT5jaGlsZCA9IE5VTEw7CisJCSAgY2hpbGQtPm5leHQgPSBub2RlLT5j
aGlsZDsKKwkJICBub2RlLT5jaGlsZCA9IGNoaWxkOworCQl9CisJICAgIH0KKwl9CisgICAgICBl
bHNlCisJeworCSAgbm9kZS0+bWltZV90eXBlID0gc3RyZHVwIChtaW1lX3R5cGUpOworCSAgbm9k
ZS0+d2VpZ2h0ID0gd2VpZ2h0OworCSAgbm9kZS0+Y2FzZV9zZW5zaXRpdmUgPSBjYXNlX3NlbnNp
dGl2ZTsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbm9kZS0+Y2hpbGQgPSBfeGRn
X2dsb2JfaGFzaF9pbnNlcnRfdWNzNCAobm9kZS0+Y2hpbGQsIHRleHQsIG1pbWVfdHlwZSwgd2Vp
Z2h0LCBjYXNlX3NlbnNpdGl2ZSk7CisgICAgfQorICByZXR1cm4gZ2xvYl9oYXNoX25vZGU7Cit9
CisKKy8qIGdsb2IgbXVzdCBiZSB2YWxpZCBVVEYtOCAqLworc3RhdGljIFhkZ0dsb2JIYXNoTm9k
ZSAqCitfeGRnX2dsb2JfaGFzaF9pbnNlcnRfdGV4dCAoWGRnR2xvYkhhc2hOb2RlICpnbG9iX2hh
c2hfbm9kZSwKKwkJCSAgICBjb25zdCBjaGFyICAgICAgKnRleHQsCisJCQkgICAgY29uc3QgY2hh
ciAgICAgICptaW1lX3R5cGUsCisJCQkgICAgaW50ICAgICAgICAgICAgICB3ZWlnaHQsCisJCQkg
ICAgaW50ICAgICAgICAgICAgICBjYXNlX3NlbnNpdGl2ZSkKK3sKKyAgWGRnR2xvYkhhc2hOb2Rl
ICpub2RlOworICB4ZGdfdW5pY2hhcl90ICp1bml0ZXh0OworICBpbnQgbGVuOworCisgIHVuaXRl
eHQgPSBfeGRnX2NvbnZlcnRfdG9fdWNzNCAodGV4dCwgJmxlbik7CisgIF94ZGdfcmV2ZXJzZV91
Y3M0ICh1bml0ZXh0LCBsZW4pOworICBub2RlID0gX3hkZ19nbG9iX2hhc2hfaW5zZXJ0X3VjczQg
KGdsb2JfaGFzaF9ub2RlLCB1bml0ZXh0LCBtaW1lX3R5cGUsIHdlaWdodCwgY2FzZV9zZW5zaXRp
dmUpOworICBmcmVlICh1bml0ZXh0KTsKKyAgcmV0dXJuIG5vZGU7Cit9CisKK3R5cGVkZWYgc3Ry
dWN0IHsKKyAgY29uc3QgY2hhciAqbWltZTsKKyAgaW50IHdlaWdodDsKK30gTWltZVdlaWdodDsK
Kworc3RhdGljIGludAorX3hkZ19nbG9iX2hhc2hfbm9kZV9sb29rdXBfZmlsZV9uYW1lIChYZGdH
bG9iSGFzaE5vZGUgKmdsb2JfaGFzaF9ub2RlLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgICAgICAq
ZmlsZV9uYW1lLAorCQkJCSAgICAgIGludCAgICAgICAgICAgICAgbGVuLAorCQkJCSAgICAgIGlu
dCAgICAgICAgICAgICAgY2FzZV9zZW5zaXRpdmVfY2hlY2ssCisJCQkJICAgICAgTWltZVdlaWdo
dCAgICAgICBtaW1lX3R5cGVzW10sCisJCQkJICAgICAgaW50ICAgICAgICAgICAgICBuX21pbWVf
dHlwZXMpCit7CisgIGludCBuOworICBYZGdHbG9iSGFzaE5vZGUgKm5vZGU7CisgIHhkZ191bmlj
aGFyX3QgY2hhcmFjdGVyOworCisgIGlmIChnbG9iX2hhc2hfbm9kZSA9PSBOVUxMKQorICAgIHJl
dHVybiAwOworCisgIGNoYXJhY3RlciA9IGZpbGVfbmFtZVtsZW4gLSAxXTsKKworICBmb3IgKG5v
ZGUgPSBnbG9iX2hhc2hfbm9kZTsgbm9kZSAmJiBjaGFyYWN0ZXIgPj0gbm9kZS0+Y2hhcmFjdGVy
OyBub2RlID0gbm9kZS0+bmV4dCkKKyAgICB7CisgICAgICBpZiAoY2hhcmFjdGVyID09IG5vZGUt
PmNoYXJhY3RlcikKKyAgICAgICAgeworICAgICAgICAgIGxlbi0tOworICAgICAgICAgIG4gPSAw
OworICAgICAgICAgIGlmIChsZW4gPiAwKSAKKwkgICAgeworCSAgICAgIG4gPSBfeGRnX2dsb2Jf
aGFzaF9ub2RlX2xvb2t1cF9maWxlX25hbWUgKG5vZGUtPmNoaWxkLAorCQkJCQkJCWZpbGVfbmFt
ZSwKKwkJCQkJCQlsZW4sCisJCQkJCQkJY2FzZV9zZW5zaXRpdmVfY2hlY2ssCisJCQkJCQkJbWlt
ZV90eXBlcywKKwkJCQkJCQluX21pbWVfdHlwZXMpOworCSAgICB9CisJICBpZiAobiA9PSAwKQor
CSAgICB7CisgICAgICAgICAgICAgIGlmIChub2RlLT5taW1lX3R5cGUgJiYKKwkJICAoY2FzZV9z
ZW5zaXRpdmVfY2hlY2sgfHwKKwkJICAgIW5vZGUtPmNhc2Vfc2Vuc2l0aXZlKSkKKyAgICAgICAg
ICAgICAgICB7CisJICAgICAgICAgIG1pbWVfdHlwZXNbbl0ubWltZSA9IG5vZGUtPm1pbWVfdHlw
ZTsKKwkJICBtaW1lX3R5cGVzW25dLndlaWdodCA9IG5vZGUtPndlaWdodDsKKwkJICBuKys7IAor
ICAgICAgICAgICAgICAgIH0KKwkgICAgICBub2RlID0gbm9kZS0+Y2hpbGQ7CisJICAgICAgd2hp
bGUgKG4gPCBuX21pbWVfdHlwZXMgJiYgbm9kZSAmJiBub2RlLT5jaGFyYWN0ZXIgPT0gMCkKKwkJ
eworICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm1pbWVfdHlwZSAmJgorCQkgICAgICAoY2Fz
ZV9zZW5zaXRpdmVfY2hlY2sgfHwKKwkJICAgICAgICFub2RlLT5jYXNlX3NlbnNpdGl2ZSkpCisJ
CSAgICB7CisJCSAgICAgIG1pbWVfdHlwZXNbbl0ubWltZSA9IG5vZGUtPm1pbWVfdHlwZTsKKwkJ
ICAgICAgbWltZV90eXBlc1tuXS53ZWlnaHQgPSBub2RlLT53ZWlnaHQ7CisJCSAgICAgIG4rKzsK
KwkJICAgIH0KKwkJICBub2RlID0gbm9kZS0+bmV4dDsKKwkJfQorCSAgICB9CisJICByZXR1cm4g
bjsKKwl9CisgICAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbXBhcmVfbWlt
ZV93ZWlnaHQgKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisgIGNvbnN0IE1pbWVX
ZWlnaHQgKmFhID0gKGNvbnN0IE1pbWVXZWlnaHQgKilhOworICBjb25zdCBNaW1lV2VpZ2h0ICpi
YiA9IChjb25zdCBNaW1lV2VpZ2h0ICopYjsKKworICByZXR1cm4gYmItPndlaWdodCAtIGFhLT53
ZWlnaHQ7Cit9CisKKyNkZWZpbmUgSVNVUFBFUihjKQkJKChjKSA+PSAnQScgJiYgKGMpIDw9ICda
JykKK3N0YXRpYyBjaGFyICoKK2FzY2lpX3RvbG93ZXIgKGNvbnN0IGNoYXIgKnN0cikKK3sKKyAg
Y2hhciAqcCwgKmxvd2VyOworCisgIGxvd2VyID0gc3RyZHVwIChzdHIpOworICBwID0gbG93ZXI7
CisgIHdoaWxlICgqcCAhPSAwKQorICAgIHsKKyAgICAgIGNoYXIgYyA9ICpwOworICAgICAgKnAr
KyA9IElTVVBQRVIgKGMpID8gYyAtICdBJyArICdhJyA6IGM7CisgICAgfQorICByZXR1cm4gbG93
ZXI7Cit9CisKK2ludAorX3hkZ19nbG9iX2hhc2hfbG9va3VwX2ZpbGVfbmFtZSAoWGRnR2xvYkhh
c2ggKmdsb2JfaGFzaCwKKwkJCQkgY29uc3QgY2hhciAgKmZpbGVfbmFtZSwKKwkJCQkgY29uc3Qg
Y2hhciAgKm1pbWVfdHlwZXNbXSwKKwkJCQkgaW50ICAgICAgICAgIG5fbWltZV90eXBlcykKK3sK
KyAgWGRnR2xvYkxpc3QgKmxpc3Q7CisgIGludCBpLCBuOworICBNaW1lV2VpZ2h0IG1pbWVzWzEw
XTsKKyAgaW50IG5fbWltZXMgPSAxMDsKKyAgaW50IGxlbjsKKyAgY2hhciAqbG93ZXJfY2FzZTsK
KworICAvKiBGaXJzdCwgY2hlY2sgdGhlIGxpdGVyYWxzICovCisKKyAgYXNzZXJ0IChmaWxlX25h
bWUgIT0gTlVMTCAmJiBuX21pbWVfdHlwZXMgPiAwKTsKKworICBuID0gMDsKKworICBsb3dlcl9j
YXNlID0gYXNjaWlfdG9sb3dlciAoZmlsZV9uYW1lKTsKKworICBmb3IgKGxpc3QgPSBnbG9iX2hh
c2gtPmxpdGVyYWxfbGlzdDsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpCisgICAgeworICAgICAg
aWYgKHN0cmNtcCAoKGNvbnN0IGNoYXIgKilsaXN0LT5kYXRhLCBmaWxlX25hbWUpID09IDApCisJ
eworCSAgbWltZV90eXBlc1swXSA9IGxpc3QtPm1pbWVfdHlwZTsKKwkgIGZyZWUgKGxvd2VyX2Nh
c2UpOworCSAgcmV0dXJuIDE7CisJfQorICAgIH0KKworICBmb3IgKGxpc3QgPSBnbG9iX2hhc2gt
PmxpdGVyYWxfbGlzdDsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpCisgICAgeworICAgICAgaWYg
KCFsaXN0LT5jYXNlX3NlbnNpdGl2ZSAmJgorCSAgc3RyY21wICgoY29uc3QgY2hhciAqKWxpc3Qt
PmRhdGEsIGxvd2VyX2Nhc2UpID09IDApCisJeworCSAgbWltZV90eXBlc1swXSA9IGxpc3QtPm1p
bWVfdHlwZTsKKwkgIGZyZWUgKGxvd2VyX2Nhc2UpOworCSAgcmV0dXJuIDE7CisJfQorICAgIH0K
KworCisgIGxlbiA9IHN0cmxlbiAoZmlsZV9uYW1lKTsKKyAgbiA9IF94ZGdfZ2xvYl9oYXNoX25v
ZGVfbG9va3VwX2ZpbGVfbmFtZSAoZ2xvYl9oYXNoLT5zaW1wbGVfbm9kZSwgbG93ZXJfY2FzZSwg
bGVuLCBGQUxTRSwKKwkJCQkJICAgIG1pbWVzLCBuX21pbWVzKTsKKyAgaWYgKG4gPT0gMCkKKyAg
ICBuID0gX3hkZ19nbG9iX2hhc2hfbm9kZV9sb29rdXBfZmlsZV9uYW1lIChnbG9iX2hhc2gtPnNp
bXBsZV9ub2RlLCBmaWxlX25hbWUsIGxlbiwgVFJVRSwKKwkJCQkJICAgICAgbWltZXMsIG5fbWlt
ZXMpOworCisgIGlmIChuID09IDApCisgICAgeworICAgICAgZm9yIChsaXN0ID0gZ2xvYl9oYXNo
LT5mdWxsX2xpc3Q7IGxpc3QgJiYgbiA8IG5fbWltZV90eXBlczsgbGlzdCA9IGxpc3QtPm5leHQp
CisgICAgICAgIHsKKyAgICAgICAgICBpZiAoZm5tYXRjaCAoKGNvbnN0IGNoYXIgKilsaXN0LT5k
YXRhLCBmaWxlX25hbWUsIDApID09IDApCisJICAgIHsKKwkgICAgICBtaW1lc1tuXS5taW1lID0g
bGlzdC0+bWltZV90eXBlOworCSAgICAgIG1pbWVzW25dLndlaWdodCA9IGxpc3QtPndlaWdodDsK
KwkgICAgICBuKys7CisJICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgZnJlZSAobG93ZXJfY2Fz
ZSk7CisKKyAgcXNvcnQgKG1pbWVzLCBuLCBzaXplb2YgKE1pbWVXZWlnaHQpLCBjb21wYXJlX21p
bWVfd2VpZ2h0KTsKKworICBpZiAobl9taW1lX3R5cGVzIDwgbikKKyAgICBuID0gbl9taW1lX3R5
cGVzOworCisgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisgICAgbWltZV90eXBlc1tpXSA9IG1p
bWVzW2ldLm1pbWU7CisKKyAgcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQKK2dldF9zaW1wbGVf
Z2xvYnMgKFhkZ0dsb2JIYXNoTm9kZSAqZ2xvYl9oYXNoX25vZGUsCisgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICAgICAgKm1pbWUsCisgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAg
ICAgKmdsb2JzW10sCisgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgIG5fZ2xvYnMs
CisgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgKm4sCisgICAgICAgICAgICAgICAg
ICB4ZGdfdW5pY2hhcl90ICAgKnByZWZpeCwKKyAgICAgICAgICAgICAgICAgIGludCAgICAgICAg
ICAgICAgZGVwdGgpCit7CisgIGlmICgqbiA+PSBuX2dsb2JzKQorICAgIHJldHVybiBGQUxTRTsK
KworICBwcmVmaXhbZGVwdGhdID0gZ2xvYl9oYXNoX25vZGUtPmNoYXJhY3RlcjsKKworICBpZiAo
Z2xvYl9oYXNoX25vZGUtPm1pbWVfdHlwZSkKKyAgICB7CisgICAgICBpZiAoc3RyY2FzZWNtcCAo
Z2xvYl9oYXNoX25vZGUtPm1pbWVfdHlwZSwgbWltZSkgPT0gMCkKKyAgICAgICAgeworICAgICAg
ICAgIGludCBpOworCisgICAgICAgICAgZ2xvYnNbKm5dID0gbWFsbG9jIChkZXB0aCAqIHNpemVv
ZiAoY2hhcikpOworICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkZXB0aDsgaSsrKQorICAgICAg
ICAgICAgZ2xvYnNbKm5dW2RlcHRoIC0gaSAtIDFdID0gcHJlZml4W2ldOworICAgICAgICAgIGds
b2JzWypuXVtkZXB0aF0gPSAnXDAnOworCisgICAgICAgICAgKCpuKSsrOworICAgICAgICB9Cisg
ICAgfQorCisgIGlmIChnbG9iX2hhc2hfbm9kZS0+Y2hpbGQpCisgICAgeworICAgICAgaWYgKCFn
ZXRfc2ltcGxlX2dsb2JzIChnbG9iX2hhc2hfbm9kZS0+Y2hpbGQsIG1pbWUsIGdsb2JzLCBuX2ds
b2JzLCBuLCBwcmVmaXgsIGRlcHRoICsgMSkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9
CisKKyAgaWYgKGdsb2JfaGFzaF9ub2RlLT5uZXh0KQorICAgIHsKKyAgICAgIGlmICghZ2V0X3Np
bXBsZV9nbG9icyAoZ2xvYl9oYXNoX25vZGUtPm5leHQsIG1pbWUsIGdsb2JzLCBuX2dsb2JzLCBu
LCBwcmVmaXgsIGRlcHRoKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICByZXR1
cm4gKm4gPCBuX2dsb2JzOworfQorCitpbnQKK194ZGdfZ2xvYl9oYXNoX2dldF9zaW1wbGVfZ2xv
YnMgKFhkZ0dsb2JIYXNoICpnbG9iX2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICAqbWltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgICAgICAgICpnbG9ic1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50ICAgICAgICAgIG5fZ2xvYnMpCit7CisgIHhkZ191bmljaGFyX3QgcHJlZml4WzI1XTsKKyAg
aW50IG47CisKKyAgaWYgKCFnbG9iX2hhc2ggfHwgZ2xvYl9oYXNoLT5zaW1wbGVfbm9kZSA9PSBO
VUxMKQorICAgIHJldHVybiAwOworCisgIG4gPSAwOworICBnZXRfc2ltcGxlX2dsb2JzIChnbG9i
X2hhc2gtPnNpbXBsZV9ub2RlLCB4ZGdfbWltZV91bmFsaWFzX21pbWVfdHlwZSAobWltZSksIGds
b2JzLCBuX2dsb2JzLCAmbiwgcHJlZml4LCAwKTsKKworICByZXR1cm4gbjsKK30KKworCisvKiBY
ZGdHbG9iSGFzaAorICovCisKK1hkZ0dsb2JIYXNoICoKK194ZGdfZ2xvYl9oYXNoX25ldyAodm9p
ZCkKK3sKKyAgWGRnR2xvYkhhc2ggKmdsb2JfaGFzaDsKKworICBnbG9iX2hhc2ggPSBjYWxsb2Mg
KDEsIHNpemVvZiAoWGRnR2xvYkhhc2gpKTsKKworICByZXR1cm4gZ2xvYl9oYXNoOworfQorCisK
K3N0YXRpYyB2b2lkCitfeGRnX2dsb2JfaGFzaF9mcmVlX25vZGVzIChYZGdHbG9iSGFzaE5vZGUg
Km5vZGUpCit7CisgIGlmIChub2RlKQorICAgIHsKKyAgICAgIGlmIChub2RlLT5jaGlsZCkKKyAg
ICAgICBfeGRnX2dsb2JfaGFzaF9mcmVlX25vZGVzIChub2RlLT5jaGlsZCk7CisgICAgICBpZiAo
bm9kZS0+bmV4dCkKKyAgICAgICBfeGRnX2dsb2JfaGFzaF9mcmVlX25vZGVzIChub2RlLT5uZXh0
KTsKKyAgICAgIGlmIChub2RlLT5taW1lX3R5cGUpCisJZnJlZSAoKHZvaWQgKikgbm9kZS0+bWlt
ZV90eXBlKTsKKyAgICAgIGZyZWUgKG5vZGUpOworICAgIH0KK30KKwordm9pZAorX3hkZ19nbG9i
X2hhc2hfZnJlZSAoWGRnR2xvYkhhc2ggKmdsb2JfaGFzaCkKK3sKKyAgX3hkZ19nbG9iX2xpc3Rf
ZnJlZSAoZ2xvYl9oYXNoLT5saXRlcmFsX2xpc3QpOworICBfeGRnX2dsb2JfbGlzdF9mcmVlIChn
bG9iX2hhc2gtPmZ1bGxfbGlzdCk7CisgIF94ZGdfZ2xvYl9oYXNoX2ZyZWVfbm9kZXMgKGdsb2Jf
aGFzaC0+c2ltcGxlX25vZGUpOworICBmcmVlIChnbG9iX2hhc2gpOworfQorCitYZGdHbG9iVHlw
ZQorX3hkZ19nbG9iX2RldGVybWluZV90eXBlIChjb25zdCBjaGFyICpnbG9iKQoreworICBjb25z
dCBjaGFyICpwdHI7CisgIGludCBtYXliZV9pbl9zaW1wbGVfZ2xvYiA9IEZBTFNFOworICBpbnQg
Zmlyc3RfY2hhciA9IFRSVUU7CisKKyAgcHRyID0gZ2xvYjsKKworICB3aGlsZSAoKnB0ciAhPSAn
XDAnKQorICAgIHsKKyAgICAgIGlmICgqcHRyID09ICcqJyAmJiBmaXJzdF9jaGFyKQorCW1heWJl
X2luX3NpbXBsZV9nbG9iID0gVFJVRTsKKyAgICAgIGVsc2UgaWYgKCpwdHIgPT0gJ1xcJyB8fCAq
cHRyID09ICdbJyB8fCAqcHRyID09ICc/JyB8fCAqcHRyID09ICcqJykKKwkgIHJldHVybiBYREdf
R0xPQl9GVUxMOworCisgICAgICBmaXJzdF9jaGFyID0gRkFMU0U7CisgICAgICBwdHIgPSBfeGRn
X3V0ZjhfbmV4dF9jaGFyIChwdHIpOworICAgIH0KKyAgaWYgKG1heWJlX2luX3NpbXBsZV9nbG9i
KQorICAgIHJldHVybiBYREdfR0xPQl9TSU1QTEU7CisgIGVsc2UKKyAgICByZXR1cm4gWERHX0dM
T0JfTElURVJBTDsKK30KKworLyogZ2xvYiBtdXN0IGJlIHZhbGlkIFVURi04ICovCit2b2lkCitf
eGRnX2dsb2JfaGFzaF9hcHBlbmRfZ2xvYiAoWGRnR2xvYkhhc2ggKmdsb2JfaGFzaCwKKwkJCSAg
ICBjb25zdCBjaGFyICAqZ2xvYiwKKwkJCSAgICBjb25zdCBjaGFyICAqbWltZV90eXBlLAorCQkJ
ICAgIGludCAgICAgICAgICB3ZWlnaHQsCisJCQkgICAgaW50ICAgICAgICAgIGNhc2Vfc2Vuc2l0
aXZlKQoreworICBYZGdHbG9iVHlwZSB0eXBlOworCisgIGFzc2VydCAoZ2xvYl9oYXNoICE9IE5V
TEwpOworICBhc3NlcnQgKGdsb2IgIT0gTlVMTCk7CisKKyAgdHlwZSA9IF94ZGdfZ2xvYl9kZXRl
cm1pbmVfdHlwZSAoZ2xvYik7CisKKyAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICBjYXNlIFhE
R19HTE9CX0xJVEVSQUw6CisgICAgICBnbG9iX2hhc2gtPmxpdGVyYWxfbGlzdCA9IF94ZGdfZ2xv
Yl9saXN0X2FwcGVuZCAoZ2xvYl9oYXNoLT5saXRlcmFsX2xpc3QsIHN0cmR1cCAoZ2xvYiksIHN0
cmR1cCAobWltZV90eXBlKSwgd2VpZ2h0LCBjYXNlX3NlbnNpdGl2ZSk7CisgICAgICBicmVhazsK
KyAgICBjYXNlIFhER19HTE9CX1NJTVBMRToKKyAgICAgIGdsb2JfaGFzaC0+c2ltcGxlX25vZGUg
PSBfeGRnX2dsb2JfaGFzaF9pbnNlcnRfdGV4dCAoZ2xvYl9oYXNoLT5zaW1wbGVfbm9kZSwgZ2xv
YiArIDEsIG1pbWVfdHlwZSwgd2VpZ2h0LCBjYXNlX3NlbnNpdGl2ZSk7CisgICAgICBicmVhazsK
KyAgICBjYXNlIFhER19HTE9CX0ZVTEw6CisgICAgICBnbG9iX2hhc2gtPmZ1bGxfbGlzdCA9IF94
ZGdfZ2xvYl9saXN0X2FwcGVuZCAoZ2xvYl9oYXNoLT5mdWxsX2xpc3QsIHN0cmR1cCAoZ2xvYiks
IHN0cmR1cCAobWltZV90eXBlKSwgd2VpZ2h0LCBjYXNlX3NlbnNpdGl2ZSk7CisgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3ZvaWQKK194ZGdfZ2xvYl9oYXNoX2R1bXAgKFhkZ0dsb2JIYXNoICpn
bG9iX2hhc2gpCit7CisgIFhkZ0dsb2JMaXN0ICpsaXN0OworICBwcmludGYgKCJMSVRFUkFMIFNU
UklOR1NcbiIpOworICBpZiAoIWdsb2JfaGFzaCB8fCBnbG9iX2hhc2gtPmxpdGVyYWxfbGlzdCA9
PSBOVUxMKQorICAgIHsKKyAgICAgIHByaW50ZiAoIiAgICBOb25lXG4iKTsKKyAgICB9CisgIGVs
c2UKKyAgICB7CisgICAgICBmb3IgKGxpc3QgPSBnbG9iX2hhc2gtPmxpdGVyYWxfbGlzdDsgbGlz
dDsgbGlzdCA9IGxpc3QtPm5leHQpCisJcHJpbnRmICgiICAgICVzIC0gJXMgJWRcbiIsIChjaGFy
ICopbGlzdC0+ZGF0YSwgbGlzdC0+bWltZV90eXBlLCBsaXN0LT53ZWlnaHQpOworICAgIH0KKyAg
cHJpbnRmICgiXG5TSU1QTEUgR0xPQlNcbiIpOworICBpZiAoIWdsb2JfaGFzaCB8fCBnbG9iX2hh
c2gtPnNpbXBsZV9ub2RlID09IE5VTEwpCisgICAgeworICAgICAgcHJpbnRmICgiICAgIE5vbmVc
biIpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIF94ZGdfZ2xvYl9oYXNoX25vZGVfZHVt
cCAoZ2xvYl9oYXNoLT5zaW1wbGVfbm9kZSwgNCk7CisgICAgfQorCisgIHByaW50ZiAoIlxuRlVM
TCBHTE9CU1xuIik7CisgIGlmICghZ2xvYl9oYXNoIHx8IGdsb2JfaGFzaC0+ZnVsbF9saXN0ID09
IE5VTEwpCisgICAgeworICAgICAgcHJpbnRmICgiICAgIE5vbmVcbiIpOworICAgIH0KKyAgZWxz
ZQorICAgIHsKKyAgICAgIGZvciAobGlzdCA9IGdsb2JfaGFzaC0+ZnVsbF9saXN0OyBsaXN0OyBs
aXN0ID0gbGlzdC0+bmV4dCkKKwlwcmludGYgKCIgICAgJXMgLSAlcyAlZFxuIiwgKGNoYXIgKils
aXN0LT5kYXRhLCBsaXN0LT5taW1lX3R5cGUsIGxpc3QtPndlaWdodCk7CisgICAgfQorfQorCisK
K3ZvaWQKK194ZGdfbWltZV9nbG9iX3JlYWRfZnJvbV9maWxlIChYZGdHbG9iSGFzaCAqZ2xvYl9o
YXNoLAorCQkJICAgICAgIGNvbnN0IGNoYXIgICpmaWxlX25hbWUsCisJCQkgICAgICAgaW50ICAg
ICAgICAgIHZlcnNpb25fdHdvKQoreworICBGSUxFICpnbG9iX2ZpbGU7CisgIGNoYXIgbGluZVsy
NTVdOworICBjaGFyICpwOworCisgIGdsb2JfZmlsZSA9IGZvcGVuIChmaWxlX25hbWUsICJyIik7
CisKKyAgaWYgKGdsb2JfZmlsZSA9PSBOVUxMKQorICAgIHJldHVybjsKKworICAvKiBGSVhNRTog
Tm90IFVURi04IHNhZmUuICBEb2Vzbid0IHdvcmsgaWYgbGluZXMgYXJlIGdyZWF0ZXIgdGhhbiAy
NTUgY2hhcnMuCisgICAqIEJsYWggKi8KKyAgd2hpbGUgKGZnZXRzIChsaW5lLCAyNTUsIGdsb2Jf
ZmlsZSkgIT0gTlVMTCkKKyAgICB7CisgICAgICBjaGFyICpjb2xvbjsKKyAgICAgIGNoYXIgKm1p
bWV0eXBlLCAqZ2xvYiwgKmVuZDsKKyAgICAgIGludCB3ZWlnaHQ7CisgICAgICBpbnQgY2FzZV9z
ZW5zaXRpdmU7CisKKyAgICAgIGlmIChsaW5lWzBdID09ICcjJyB8fCBsaW5lWzBdID09IDApCisJ
Y29udGludWU7CisKKyAgICAgIGVuZCA9IGxpbmUgKyBzdHJsZW4obGluZSkgLSAxOworICAgICAg
aWYgKCplbmQgPT0gJ1xuJykKKwkqZW5kID0gMDsKKworICAgICAgcCA9IGxpbmU7CisgICAgICBp
ZiAodmVyc2lvbl90d28pCisJeworCSAgY29sb24gPSBzdHJjaHIgKHAsICc6Jyk7CisJICBpZiAo
Y29sb24gPT0gTlVMTCkKKwkgICAgY29udGludWU7CisJICAqY29sb24gPSAwOworICAgICAgICAg
IHdlaWdodCA9IGF0b2kgKHApOworCSAgcCA9IGNvbG9uICsgMTsKKwl9CisgICAgICBlbHNlCisJ
d2VpZ2h0ID0gNTA7CisKKyAgICAgIGNvbG9uID0gc3RyY2hyIChwLCAnOicpOworICAgICAgaWYg
KGNvbG9uID09IE5VTEwpCisJY29udGludWU7CisgICAgICAqY29sb24gPSAwOworCisgICAgICBt
aW1ldHlwZSA9IHA7CisgICAgICBwID0gY29sb24gKyAxOworICAgICAgZ2xvYiA9IHA7CisgICAg
ICBjYXNlX3NlbnNpdGl2ZSA9IEZBTFNFOworCisgICAgICBjb2xvbiA9IHN0cmNociAocCwgJzon
KTsKKyAgICAgIGlmICh2ZXJzaW9uX3R3byAmJiBjb2xvbiAhPSBOVUxMKQorCXsKKwkgIGNoYXIg
KmZsYWc7CisKKwkgIC8qIFdlIGdvdCBmbGFncyAqLworCSAgKmNvbG9uID0gMDsKKwkgIHAgPSBj
b2xvbiArIDE7CisKKwkgIC8qIEZsYWdzIGVuZCBhdCBuZXh0IGNvbG9uICovCisJICBjb2xvbiA9
IHN0cmNociAocCwgJzonKTsKKwkgIGlmIChjb2xvbiAhPSBOVUxMKQorCSAgICAqY29sb24gPSAw
OworCisJICBmbGFnID0gc3Ryc3RyIChwLCAiY3MiKTsKKwkgIGlmIChmbGFnICE9IE5VTEwgJiYK
KwkgICAgICAvKiBTdGFydCBvciBhZnRlciBjb21tYSAqLworCSAgICAgIChmbGFnID09IHAgfHwK
KwkgICAgICAgZmxhZ1stMV0gPT0gJywnKSAmJgorCSAgICAgIC8qIGVuZHMgd2l0aCBjb21tYSBv
ciBlbmQgb2Ygc3RyaW5nICovCisJICAgICAgKGZsYWdbMl0gPT0gMCB8fAorCSAgICAgICBmbGFn
WzJdID09ICcsJykpCisJICAgIGNhc2Vfc2Vuc2l0aXZlID0gVFJVRTsKKwl9CisKKyAgICAgIF94
ZGdfZ2xvYl9oYXNoX2FwcGVuZF9nbG9iIChnbG9iX2hhc2gsIGdsb2IsIG1pbWV0eXBlLCB3ZWln
aHQsIGNhc2Vfc2Vuc2l0aXZlKTsKKyAgICB9CisKKyAgZmNsb3NlIChnbG9iX2ZpbGUpOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9zcmMveGRnbWltZWdsb2IuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvc3JjL3hkZ21pbWVnbG9iLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgzYmVlYWI3NmE2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9zcmMveGRnbWltZWdsb2IuaApAQCAtMCwwICsx
LDc1IEBACisvKiAtKi0gbW9kZTogQzsgYy1maWxlLXN0eWxlOiAiZ251IiAtKi0gKi8KKy8qIHhk
Z21pbWVnbG9iLmg6IFByaXZhdGUgZmlsZS4gIERhdGFzdHJ1Y3R1cmUgZm9yIHN0b3JpbmcgdGhl
IGdsb2JzLgorICoKKyAqIE1vcmUgaW5mbyBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5mcmVl
ZGVza3RvcC5vcmcvc3RhbmRhcmRzLworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyAgUmVkIEhh
dCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzICBKb25hdGhhbiBCbGFuZGZvcmQgPGpyYkBh
bHVtLm1pdC5lZHU+CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGlj
ZW5zZSB2ZXJzaW9uIDIuMAorICogT3IgdW5kZXIgdGhlIGZvbGxvd2luZyB0ZXJtczoKKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
CSBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEz
MDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fWERHX01JTUVfR0xPQl9IX18KKyNkZWZpbmUgX19Y
REdfTUlNRV9HTE9CX0hfXworCisjaW5jbHVkZSAieGRnbWltZS5oIgorCit0eXBlZGVmIHN0cnVj
dCBYZGdHbG9iSGFzaCBYZGdHbG9iSGFzaDsKKwordHlwZWRlZiBlbnVtCit7CisgIFhER19HTE9C
X0xJVEVSQUwsIC8qIE1ha2VmaWxlICovCisgIFhER19HTE9CX1NJTVBMRSwgIC8qICouZ2lmICov
CisgIFhER19HTE9CX0ZVTEwgICAgIC8qIHgqLltjaF0gKi8KK30gWGRnR2xvYlR5cGU7CisKKyAg
CisjaWZkZWYgWERHX1BSRUZJWAorI2RlZmluZSBfeGRnX21pbWVfZ2xvYl9yZWFkX2Zyb21fZmls
ZSAgICAgICAgIFhER19SRVNFUlZFRF9FTlRSWShnbG9iX3JlYWRfZnJvbV9maWxlKQorI2RlZmlu
ZSBfeGRnX2dsb2JfaGFzaF9uZXcgICAgICAgICAgICAgICAgICAgIFhER19SRVNFUlZFRF9FTlRS
WShoYXNoX25ldykKKyNkZWZpbmUgX3hkZ19nbG9iX2hhc2hfZnJlZSAgICAgICAgICAgICAgICAg
ICBYREdfUkVTRVJWRURfRU5UUlkoaGFzaF9mcmVlKQorI2RlZmluZSBfeGRnX2dsb2JfaGFzaF9s
b29rdXBfZmlsZV9uYW1lICAgICAgIFhER19SRVNFUlZFRF9FTlRSWShoYXNoX2xvb2t1cF9maWxl
X25hbWUpCisjZGVmaW5lIF94ZGdfZ2xvYl9oYXNoX2dldF9zaW1wbGVfZ2xvYnMgICAgICAgWERH
X1JFU0VSVkVEX0VOVFJZKGhhc2hfZ2V0X3NpbXBsZV9nbG9icykKKyNkZWZpbmUgX3hkZ19nbG9i
X2hhc2hfYXBwZW5kX2dsb2IgICAgICAgICAgICBYREdfUkVTRVJWRURfRU5UUlkoaGFzaF9hcHBl
bmRfZ2xvYikKKyNkZWZpbmUgX3hkZ19nbG9iX2RldGVybWluZV90eXBlICAgICAgICAgICAgICBY
REdfUkVTRVJWRURfRU5UUlkoZGV0ZXJtaW5lX3R5cGUpCisjZGVmaW5lIF94ZGdfZ2xvYl9oYXNo
X2R1bXAgICAgICAgICAgICAgICAgICAgWERHX1JFU0VSVkVEX0VOVFJZKGhhc2hfZHVtcCkKKyNl
bmRpZgorCit2b2lkICAgICAgICAgX3hkZ19taW1lX2dsb2JfcmVhZF9mcm9tX2ZpbGUgICAoWGRn
R2xvYkhhc2ggKmdsb2JfaGFzaCwKKwkJCQkJICAgICAgY29uc3QgY2hhciAgKmZpbGVfbmFtZSwK
KwkJCQkJICAgICAgaW50ICAgICAgICAgIHZlcnNpb25fdHdvKTsKK1hkZ0dsb2JIYXNoICpfeGRn
X2dsb2JfaGFzaF9uZXcgICAgICAgICAgICAgICh2b2lkKTsKK3ZvaWQgICAgICAgICBfeGRnX2ds
b2JfaGFzaF9mcmVlICAgICAgICAgICAgIChYZGdHbG9iSGFzaCAqZ2xvYl9oYXNoKTsKK2ludCAg
ICAgICAgICBfeGRnX2dsb2JfaGFzaF9sb29rdXBfZmlsZV9uYW1lIChYZGdHbG9iSGFzaCAqZ2xv
Yl9oYXNoLAorCQkJCQkgICAgICBjb25zdCBjaGFyICAqdGV4dCwKKwkJCQkJICAgICAgY29uc3Qg
Y2hhciAgKm1pbWVfdHlwZXNbXSwKKwkJCQkJICAgICAgaW50ICAgICAgICAgIG5fbWltZV90eXBl
cyk7CitpbnQgICAgICAgICAgX3hkZ19nbG9iX2hhc2hfZ2V0X3NpbXBsZV9nbG9icyAoWGRnR2xv
Ykhhc2ggKmdsb2JfaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICAqbWltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAqZ2xvYnNbXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgbl9nbG9icyk7Cit2b2lk
ICAgICAgICAgX3hkZ19nbG9iX2hhc2hfYXBwZW5kX2dsb2IgICAgICAoWGRnR2xvYkhhc2ggKmds
b2JfaGFzaCwKKwkJCQkJICAgICAgY29uc3QgY2hhciAgKmdsb2IsCisJCQkJCSAgICAgIGNvbnN0
IGNoYXIgICptaW1lX3R5cGUsCisJCQkJCSAgICAgIGludCAgICAgICAgICB3ZWlnaHQsCisJCQkJ
CSAgICAgIGludCAgICAgICAgICBjYXNlX3NlbnNpdGl2ZSk7CitYZGdHbG9iVHlwZSAgX3hkZ19n
bG9iX2RldGVybWluZV90eXBlICAgICAgICAoY29uc3QgY2hhciAgKmdsb2IpOwordm9pZCAgICAg
ICAgIF94ZGdfZ2xvYl9oYXNoX2R1bXAgICAgICAgICAgICAgKFhkZ0dsb2JIYXNoICpnbG9iX2hh
c2gpOworCisjZW5kaWYgLyogX19YREdfTUlNRV9HTE9CX0hfXyAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkveGRnbWltZS9zcmMveGRnbWltZWljb24uYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L3hkZ21pbWUvc3JjL3hkZ21pbWVpY29uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjc0YmIzMWYxNzJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkveGRnbWltZS9zcmMveGRnbWltZWljb24uYwpAQCAtMCwwICsxLDE4MyBAQAorLyogLSot
IG1vZGU6IEM7IGMtZmlsZS1zdHlsZTogImdudSIgLSotICovCisvKiB4ZGdtaW1laWNvbi5jOiBQ
cml2YXRlIGZpbGUuICBEYXRhc3RydWN0dXJlIGZvciBzdG9yaW5nIHRoZSBhbGlhc2VzLgorICoK
KyAqIE1vcmUgaW5mbyBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcv
c3RhbmRhcmRzLworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCAgUmVkIEhhdCwgSW5jLgorICoK
KyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgdmVyc2lvbiAyLjAK
KyAqIE9yIHVuZGVyIHRoZSBmb2xsb3dpbmcgdGVybXM6CisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZSBHTlUKKyAq
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKwor
I2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjbWFrZWNvbmZpZy5oIgorI2VuZGlmCisK
KyNpbmNsdWRlICJ4ZGdtaW1laWNvbi5oIgorI2luY2x1ZGUgInhkZ21pbWVpbnQuaCIKKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgor
I2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZubWF0Y2guaD4KKworI2lmbmRlZglGQUxT
RQorI2RlZmluZQlGQUxTRQkoMCkKKyNlbmRpZgorCisjaWZuZGVmCVRSVUUKKyNkZWZpbmUJVFJV
RQkoIUZBTFNFKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IFhkZ0ljb24gWGRnSWNvbjsKKwor
c3RydWN0IFhkZ0ljb24gCit7CisgIGNoYXIgKm1pbWVfdHlwZTsKKyAgY2hhciAqaWNvbl9uYW1l
OworfTsKKworc3RydWN0IFhkZ0ljb25MaXN0Cit7CisgIHN0cnVjdCBYZGdJY29uICppY29uczsK
KyAgaW50IG5faWNvbnM7Cit9OworCitYZGdJY29uTGlzdCAqCitfeGRnX21pbWVfaWNvbl9saXN0
X25ldyAodm9pZCkKK3sKKyAgWGRnSWNvbkxpc3QgKmxpc3Q7CisKKyAgbGlzdCA9IG1hbGxvYyAo
c2l6ZW9mIChYZGdJY29uTGlzdCkpOworCisgIGxpc3QtPmljb25zID0gTlVMTDsKKyAgbGlzdC0+
bl9pY29ucyA9IDA7CisKKyAgcmV0dXJuIGxpc3Q7Cit9CisKK3ZvaWQgICAgICAgICAKK194ZGdf
bWltZV9pY29uX2xpc3RfZnJlZSAoWGRnSWNvbkxpc3QgKmxpc3QpCit7CisgIGludCBpOworCisg
IGlmIChsaXN0LT5pY29ucykKKyAgICB7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC0+bl9p
Y29uczsgaSsrKQorCXsKKwkgIGZyZWUgKGxpc3QtPmljb25zW2ldLm1pbWVfdHlwZSk7CisJICBm
cmVlIChsaXN0LT5pY29uc1tpXS5pY29uX25hbWUpOworCX0KKyAgICAgIGZyZWUgKGxpc3QtPmlj
b25zKTsKKyAgICB9CisgIGZyZWUgKGxpc3QpOworfQorCitzdGF0aWMgaW50CitpY29uX2VudHJ5
X2NtcCAoY29uc3Qgdm9pZCAqdjEsIGNvbnN0IHZvaWQgKnYyKQoreworICByZXR1cm4gc3RyY21w
ICgoKFhkZ0ljb24gKil2MSktPm1pbWVfdHlwZSwgKChYZGdJY29uICopdjIpLT5taW1lX3R5cGUp
OworfQorCitjb25zdCBjaGFyICAqCitfeGRnX21pbWVfaWNvbl9saXN0X2xvb2t1cCAoWGRnSWNv
bkxpc3QgKmxpc3QsCisJCQkgICAgY29uc3QgY2hhciAgKm1pbWVfdHlwZSkKK3sKKyAgWGRnSWNv
biAqZW50cnk7CisgIFhkZ0ljb24ga2V5OworCisgIGlmIChsaXN0LT5uX2ljb25zID4gMCkKKyAg
ICB7CisgICAgICBrZXkubWltZV90eXBlID0gKGNoYXIgKiltaW1lX3R5cGU7CisgICAgICBrZXku
aWNvbl9uYW1lID0gTlVMTDsKKworICAgICAgZW50cnkgPSBic2VhcmNoICgma2V5LCBsaXN0LT5p
Y29ucywgbGlzdC0+bl9pY29ucywKKwkJICAgICAgIHNpemVvZiAoWGRnSWNvbiksIGljb25fZW50
cnlfY21wKTsKKyAgICAgIGlmIChlbnRyeSkKKyAgICAgICAgcmV0dXJuIGVudHJ5LT5pY29uX25h
bWU7CisgICAgfQorCisgIHJldHVybiBOVUxMOworfQorCit2b2lkCitfeGRnX21pbWVfaWNvbl9y
ZWFkX2Zyb21fZmlsZSAoWGRnSWNvbkxpc3QgKmxpc3QsCisJCQkgICAgICAgY29uc3QgY2hhciAg
ICpmaWxlX25hbWUpCit7CisgIEZJTEUgKmZpbGU7CisgIGNoYXIgbGluZVsyNTVdOworICBpbnQg
YWxsb2M7CisKKyAgZmlsZSA9IGZvcGVuIChmaWxlX25hbWUsICJyIik7CisKKyAgaWYgKGZpbGUg
PT0gTlVMTCkKKyAgICByZXR1cm47CisKKyAgLyogRklYTUU6IE5vdCBVVEYtOCBzYWZlLiAgRG9l
c24ndCB3b3JrIGlmIGxpbmVzIGFyZSBncmVhdGVyIHRoYW4gMjU1IGNoYXJzLgorICAgKiBCbGFo
ICovCisgIGFsbG9jID0gbGlzdC0+bl9pY29ucyArIDE2OworICBsaXN0LT5pY29ucyA9IHJlYWxs
b2MgKGxpc3QtPmljb25zLCBhbGxvYyAqIHNpemVvZiAoWGRnSWNvbikpOworICB3aGlsZSAoZmdl
dHMgKGxpbmUsIDI1NSwgZmlsZSkgIT0gTlVMTCkKKyAgICB7CisgICAgICBjaGFyICpzZXA7Cisg
ICAgICBpZiAobGluZVswXSA9PSAnIycpCisJY29udGludWU7CisKKyAgICAgIHNlcCA9IHN0cmNo
ciAobGluZSwgJzonKTsKKyAgICAgIGlmIChzZXAgPT0gTlVMTCkKKwljb250aW51ZTsKKyAgICAg
ICooc2VwKyspID0gJ1wwMDAnOworICAgICAgc2VwW3N0cmxlbiAoc2VwKSAtMV0gPSAnXDAwMCc7
CisgICAgICBpZiAobGlzdC0+bl9pY29ucyA9PSBhbGxvYykKKwl7CisJICBhbGxvYyA8PD0gMTsK
KwkgIGxpc3QtPmljb25zID0gcmVhbGxvYyAobGlzdC0+aWNvbnMsIAorCQkJCSAgIGFsbG9jICog
c2l6ZW9mIChYZGdJY29uKSk7CisJfQorICAgICAgbGlzdC0+aWNvbnNbbGlzdC0+bl9pY29uc10u
bWltZV90eXBlID0gc3RyZHVwIChsaW5lKTsKKyAgICAgIGxpc3QtPmljb25zW2xpc3QtPm5faWNv
bnNdLmljb25fbmFtZSA9IHN0cmR1cCAoc2VwKTsKKyAgICAgIGxpc3QtPm5faWNvbnMrKzsKKyAg
ICB9CisgIGxpc3QtPmljb25zID0gcmVhbGxvYyAobGlzdC0+aWNvbnMsIAorCQkJICAgbGlzdC0+
bl9pY29ucyAqIHNpemVvZiAoWGRnSWNvbikpOworCisgIGZjbG9zZSAoZmlsZSk7ICAKKyAgCisg
IGlmIChsaXN0LT5uX2ljb25zID4gMSkKKyAgICBxc29ydCAobGlzdC0+aWNvbnMsIGxpc3QtPm5f
aWNvbnMsIAorICAgICAgICAgICBzaXplb2YgKFhkZ0ljb24pLCBpY29uX2VudHJ5X2NtcCk7Cit9
CisKKwordm9pZAorX3hkZ19taW1lX2ljb25fbGlzdF9kdW1wIChYZGdJY29uTGlzdCAqbGlzdCkK
K3sKKyAgaW50IGk7CisKKyAgaWYgKGxpc3QtPmljb25zKQorICAgIHsKKyAgICAgIGZvciAoaSA9
IDA7IGkgPCBsaXN0LT5uX2ljb25zOyBpKyspCisJeworCSAgcHJpbnRmICgiJXMgJXNcbiIsIAor
CQkgIGxpc3QtPmljb25zW2ldLm1pbWVfdHlwZSwKKwkJICBsaXN0LT5pY29uc1tpXS5pY29uX25h
bWUpOworCX0KKyAgICB9Cit9CisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkveGRn
bWltZS9zcmMveGRnbWltZWljb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvc3JjL3hk
Z21pbWVpY29uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI1ZjI1
ODM1ZGIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9zcmMv
eGRnbWltZWljb24uaApAQCAtMCwwICsxLDUwIEBACisvKiAtKi0gbW9kZTogQzsgYy1maWxlLXN0
eWxlOiAiZ251IiAtKi0gKi8KKy8qIHhkZ21pbWVpY29uLmg6IFByaXZhdGUgZmlsZS4gIERhdGFz
dHJ1Y3R1cmUgZm9yIHN0b3JpbmcgdGhlIGFsaWFzZXMuCisgKgorICogTW9yZSBpbmZvIGNhbiBi
ZSBmb3VuZCBhdCBodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zdGFuZGFyZHMvCisgKgorICog
Q29weXJpZ2h0IChDKSAyMDA4ICBSZWQgSGF0LCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIg
dGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDIuMAorICogT3IgdW5kZXIgdGhlIGZv
bGxvd2luZyB0ZXJtczoKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisg
KiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fWERHX01JTUVf
SUNPTl9IX18KKyNkZWZpbmUgX19YREdfTUlNRV9JQ09OX0hfXworCisjaW5jbHVkZSAieGRnbWlt
ZS5oIgorCit0eXBlZGVmIHN0cnVjdCBYZGdJY29uTGlzdCBYZGdJY29uTGlzdDsKKworI2lmZGVm
IFhER19QUkVGSVgKKyNkZWZpbmUgX3hkZ19taW1lX2ljb25fcmVhZF9mcm9tX2ZpbGUgICAgICAg
IFhER19FTlRSWShpY29uX3JlYWRfZnJvbV9maWxlKQorI2RlZmluZSBfeGRnX21pbWVfaWNvbl9s
aXN0X25ldyAgICAgICAgICAgICAgWERHX0VOVFJZKGljb25fbGlzdF9uZXcpCisjZGVmaW5lIF94
ZGdfbWltZV9pY29uX2xpc3RfZnJlZSAgICAgICAgICAgICBYREdfRU5UUlkoaWNvbl9saXN0X2Zy
ZWUpCisjZGVmaW5lIF94ZGdfbWltZV9pY29uX2xpc3RfbG9va3VwICAgICAgICAgICBYREdfRU5U
UlkoaWNvbl9saXN0X2xvb2t1cCkKKyNkZWZpbmUgX3hkZ19taW1lX2ljb25fbGlzdF9kdW1wICAg
ICAgICAgICAgIFhER19FTlRSWShpY29uX2xpc3RfZHVtcCkKKyNlbmRpZgorCit2b2lkICAgICAg
ICAgIF94ZGdfbWltZV9pY29uX3JlYWRfZnJvbV9maWxlIChYZGdJY29uTGlzdCAqbGlzdCwKKwkJ
CQkJICAgIGNvbnN0IGNoYXIgICAqZmlsZV9uYW1lKTsKK1hkZ0ljb25MaXN0ICAqX3hkZ19taW1l
X2ljb25fbGlzdF9uZXcgICAgICAgKHZvaWQpOwordm9pZCAgICAgICAgICBfeGRnX21pbWVfaWNv
bl9saXN0X2ZyZWUgICAgICAoWGRnSWNvbkxpc3QgKmxpc3QpOworY29uc3QgY2hhciAgICpfeGRn
X21pbWVfaWNvbl9saXN0X2xvb2t1cCAgICAoWGRnSWNvbkxpc3QgKmxpc3QsCisJCQkJCSAgICAg
Y29uc3QgY2hhciAgKm1pbWUpOwordm9pZCAgICAgICAgICBfeGRnX21pbWVfaWNvbl9saXN0X2R1
bXAgICAgICAoWGRnSWNvbkxpc3QgKmxpc3QpOworCisjZW5kaWYgLyogX19YREdfTUlNRV9JQ09O
X0hfXyAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9zcmMveGRnbWlt
ZWludC5jIGIvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9zcmMveGRnbWltZWludC5jCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iNDY5YTBkMmYxOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvc3JjL3hkZ21pbWVpbnQuYwpAQCAt
MCwwICsxLDIwNiBAQAorLyogLSotIG1vZGU6IEM7IGMtZmlsZS1zdHlsZTogImdudSIgLSotICov
CisvKiB4ZGdtaW1laW50LmM6IEludGVybmFsIGRlZmluZXMgYW5kIGZ1bmN0aW9ucy4KKyAqCisg
KiBNb3JlIGluZm8gY2FuIGJlIGZvdW5kIGF0IGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3N0
YW5kYXJkcy8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgIFJlZCBIYXQsIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAwMyAgSm9uYXRoYW4gQmxhbmRmb3JkIDxqcmJAYWx1bS5taXQuZWR1Pgor
ICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgdmVyc2lvbiAy
LjAKKyAqIE9yIHVuZGVyIHRoZSBmb2xsb3dpbmcgdGVybXM6CisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZSBHTlUK
KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxl
IFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8K
KworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjbWFrZWNvbmZpZy5oIgorI2VuZGlm
CisKKyNpbmNsdWRlICJ4ZGdtaW1laW50LmgiCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRl
IDxzdHJpbmcuaD4KKworI2lmbmRlZglGQUxTRQorI2RlZmluZQlGQUxTRQkoMCkKKyNlbmRpZgor
CisjaWZuZGVmCVRSVUUKKyNkZWZpbmUJVFJVRQkoIUZBTFNFKQorI2VuZGlmCisKK3N0YXRpYyBj
b25zdCBjaGFyIF94ZGdfdXRmOF9za2lwX2RhdGFbMjU2XSA9IHsKKyAgMSwxLDEsMSwxLDEsMSwx
LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAorICAxLDEs
MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx
LDEsCisgIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEs
MSwxLDEsMSwxLDEsMSwKKyAgMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx
LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAorICAxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEs
MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsCisgIDEsMSwxLDEsMSwxLDEsMSwx
LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwKKyAgMiwyLDIs
MiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwy
LAorICAzLDMsMywzLDMsMywzLDMsMywzLDMsMywzLDMsMywzLDQsNCw0LDQsNCw0LDQsNCw1LDUs
NSw1LDYsNiwxLDEKK307CisKK2NvbnN0IGNoYXIgKiBjb25zdCBfeGRnX3V0Zjhfc2tpcCA9IF94
ZGdfdXRmOF9za2lwX2RhdGE7CisKKworCisvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdW5wcm9j
ZXNzZWQgY2hhcmFjdGVycy4gKi8KK3hkZ191bmljaGFyX3QKK194ZGdfdXRmOF90b191Y3M0KGNv
bnN0IGNoYXIgKnNvdXJjZSkKK3sKKyAgeGRnX3VuaWNoYXJfdCB1Y3MzMjsKKyAgaWYoICEgKCAq
c291cmNlICYgMHg4MCApICkKKyAgICB7CisgICAgICB1Y3MzMiA9ICpzb3VyY2U7CisgICAgfQor
ICBlbHNlCisgICAgeworICAgICAgaW50IGJ5dGVsZW5ndGggPSAwOworICAgICAgeGRnX3VuaWNo
YXJfdCByZXN1bHQ7CisgICAgICBpZiAoICEgKCpzb3VyY2UgJiAweDQwKSApCisJeworCSAgdWNz
MzIgPSAqc291cmNlOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAoICEgKCpzb3VyY2UgJiAw
eDIwKSApCisJICAgIHsKKwkgICAgICByZXN1bHQgPSAqc291cmNlKysgJiAweDFGOworCSAgICAg
IGJ5dGVsZW5ndGggPSAyOworCSAgICB9CisJICBlbHNlIGlmICggISAoKnNvdXJjZSAmIDB4MTAp
ICkKKwkgICAgeworCSAgICAgIHJlc3VsdCA9ICpzb3VyY2UrKyAmIDB4MEY7CisJICAgICAgYnl0
ZWxlbmd0aCA9IDM7CisJICAgIH0KKwkgIGVsc2UgaWYgKCAhICgqc291cmNlICYgMHgwOCkgKQor
CSAgICB7CisJICAgICAgcmVzdWx0ID0gKnNvdXJjZSsrICYgMHgwNzsKKwkgICAgICBieXRlbGVu
Z3RoID0gNDsKKwkgICAgfQorCSAgZWxzZSBpZiAoICEgKCpzb3VyY2UgJiAweDA0KSApCisJICAg
IHsKKwkgICAgICByZXN1bHQgPSAqc291cmNlKysgJiAweDAzOworCSAgICAgIGJ5dGVsZW5ndGgg
PSA1OworCSAgICB9CisJICBlbHNlIGlmICggISAoKnNvdXJjZSAmIDB4MDIpICkKKwkgICAgewor
CSAgICAgIHJlc3VsdCA9ICpzb3VyY2UrKyAmIDB4MDE7CisJICAgICAgYnl0ZWxlbmd0aCA9IDY7
CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHJlc3VsdCA9ICpzb3VyY2UrKzsKKwkg
ICAgICBieXRlbGVuZ3RoID0gMTsKKwkgICAgfQorCisJICBmb3IgKCBieXRlbGVuZ3RoIC0tOyBi
eXRlbGVuZ3RoID4gMDsgYnl0ZWxlbmd0aCAtLSApCisJICAgIHsKKwkgICAgICByZXN1bHQgPDw9
IDY7CisJICAgICAgcmVzdWx0IHw9ICpzb3VyY2UrKyAmIDB4M0Y7CisJICAgIH0KKwkgIHVjczMy
ID0gcmVzdWx0OworCX0KKyAgICB9CisgIHJldHVybiB1Y3MzMjsKK30KKworCisvKiBodWxsby4g
IHRoaXMgaXMgZ3JlYXQgY29kZS4gIGRvbid0IHJld3JpdGUgaXQgKi8KKworeGRnX3VuaWNoYXJf
dAorX3hkZ191Y3M0X3RvX2xvd2VyICh4ZGdfdW5pY2hhcl90IHNvdXJjZSkKK3sKKyAgLyogRklY
TUU6IERvIGEgcmVhbCB0b191cHBlciBzb21ldGltZSAqLworICAvKiBDYXNlRm9sZGluZy0zLjIu
MC50eHQgaGFzIGEgdGFibGUgb2YgcnVsZXMuICovCisgIGlmICgoc291cmNlICYgMHhGRikgPT0g
c291cmNlKQorICAgIHJldHVybiAoeGRnX3VuaWNoYXJfdCkgdG9sb3dlciAoKHVuc2lnbmVkIGNo
YXIpIHNvdXJjZSk7CisgIHJldHVybiBzb3VyY2U7Cit9CisKK2ludAorX3hkZ191dGY4X3ZhbGlk
YXRlIChjb25zdCBjaGFyICpzb3VyY2UpCit7CisgIC8qIEZJWE1FOiBhY3R1YWxseSB3cml0ZSAq
LworICByZXR1cm4gVFJVRTsKK30KKworY29uc3QgY2hhciAqCitfeGRnX2dldF9iYXNlX25hbWUg
KGNvbnN0IGNoYXIgKmZpbGVfbmFtZSkKK3sKKyAgY29uc3QgY2hhciAqYmFzZV9uYW1lOworCisg
IGlmIChmaWxlX25hbWUgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKworICBiYXNlX25hbWUg
PSBzdHJyY2hyIChmaWxlX25hbWUsICcvJyk7CisKKyAgaWYgKGJhc2VfbmFtZSA9PSBOVUxMKQor
ICAgIHJldHVybiBmaWxlX25hbWU7CisgIGVsc2UKKyAgICByZXR1cm4gYmFzZV9uYW1lICsgMTsK
K30KKworeGRnX3VuaWNoYXJfdCAqCitfeGRnX2NvbnZlcnRfdG9fdWNzNCAoY29uc3QgY2hhciAq
c291cmNlLCBpbnQgKmxlbikKK3sKKyAgeGRnX3VuaWNoYXJfdCAqb3V0OworICBpbnQgaTsKKyAg
Y29uc3QgY2hhciAqcDsKKworICBvdXQgPSBtYWxsb2MgKHNpemVvZiAoeGRnX3VuaWNoYXJfdCkg
KiAoc3RybGVuIChzb3VyY2UpICsgMSkpOworCisgIHAgPSBzb3VyY2U7CisgIGkgPSAwOworICB3
aGlsZSAoKnApIAorICAgIHsKKyAgICAgIG91dFtpKytdID0gX3hkZ191dGY4X3RvX3VjczQgKHAp
OworICAgICAgcCA9IF94ZGdfdXRmOF9uZXh0X2NoYXIgKHApOyAKKyAgICB9CisgIG91dFtpXSA9
IDA7CisgICpsZW4gPSBpOworIAorICByZXR1cm4gb3V0OworfQorCit2b2lkCitfeGRnX3JldmVy
c2VfdWNzNCAoeGRnX3VuaWNoYXJfdCAqc291cmNlLCBpbnQgbGVuKQoreworICB4ZGdfdW5pY2hh
cl90IGM7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBsZW4gLSBpIC0gMTsgaSsrKSAK
KyAgICB7CisgICAgICBjID0gc291cmNlW2ldOyAKKyAgICAgIHNvdXJjZVtpXSA9IHNvdXJjZVts
ZW4gLSBpIC0gMV07CisgICAgICBzb3VyY2VbbGVuIC0gaSAtIDFdID0gYzsKKyAgICB9Cit9CisK
K2NvbnN0IGNoYXIgKgorX3hkZ19iaW5hcnlfb3JfdGV4dF9mYWxsYmFjayhjb25zdCB2b2lkICpk
YXRhLCBzaXplX3QgbGVuKQoreworICB1bnNpZ25lZCBjaGFyICpjaGFyZGF0YTsKKyAgaW50IGk7
CisKKyAgY2hhcmRhdGEgPSAodW5zaWduZWQgY2hhciAqKSBkYXRhOworICBmb3IgKGkgPSAwOyBp
IDwgMzIgJiYgaSA8IGxlbjsgKytpKQorICAgIHsKKyAgICAgICBpZiAoY2hhcmRhdGFbaV0gPCAz
MiAmJiBjaGFyZGF0YVtpXSAhPSA5ICYmIGNoYXJkYXRhW2ldICE9IDEwICYmIGNoYXJkYXRhW2ld
ICE9IDEzKQorICAgICAgICAgcmV0dXJuIFhER19NSU1FX1RZUEVfVU5LTk9XTjsgLyogYmluYXJ5
IGRhdGEgKi8KKyAgICB9CisKKyAgcmV0dXJuIFhER19NSU1FX1RZUEVfVEVYVFBMQUlOOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9zcmMveGRnbWltZWludC5oIGIv
U291cmNlL1RoaXJkUGFydHkveGRnbWltZS9zcmMveGRnbWltZWludC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45ZThiMmNiODVhNAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvc3JjL3hkZ21pbWVpbnQuaApAQCAtMCwwICsxLDc4
IEBACisvKiAtKi0gbW9kZTogQzsgYy1maWxlLXN0eWxlOiAiZ251IiAtKi0gKi8KKy8qIHhkZ21p
bWVpbnQuaDogSW50ZXJuYWwgZGVmaW5lcyBhbmQgZnVuY3Rpb25zLgorICoKKyAqIE1vcmUgaW5m
byBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc3RhbmRhcmRzLwor
ICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyAgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChD
KSAyMDAzICBKb25hdGhhbiBCbGFuZGZvcmQgPGpyYkBhbHVtLm1pdC5lZHU+CisgKgorICogTGlj
ZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDIuMAorICogT3Ig
dW5kZXIgdGhlIGZvbGxvd2luZyB0ZXJtczoKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlIEdOVQorICogTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBT
dWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVm
IF9fWERHX01JTUVfSU5UX0hfXworI2RlZmluZSBfX1hER19NSU1FX0lOVF9IX18KKworI2luY2x1
ZGUgInhkZ21pbWUuaCIKKworCisjaWZuZGVmCUZBTFNFCisjZGVmaW5lCUZBTFNFICgwKQorI2Vu
ZGlmCisKKyNpZm5kZWYJVFJVRQorI2RlZmluZQlUUlVFICghRkFMU0UpCisjZW5kaWYKKworLyog
RklYTUU6IE5lZWRzIHRvIGJlIGNvbmZpZ3VyZSBjaGVjayAqLwordHlwZWRlZiB1bnNpZ25lZCBp
bnQgICB4ZGdfdW5pY2hhcl90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICB4ZGdfdWNoYXI4X3Q7
Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHhkZ191aW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQg
aW50ICAgeGRnX3VpbnQzMl90OworCisjaWZkZWYgWERHX1BSRUZJWAorI2RlZmluZSBfeGRnX3V0
Zjhfc2tpcCAgICAgICBYREdfUkVTRVJWRURfRU5UUlkodXRmOF9za2lwKQorI2RlZmluZSBfeGRn
X3V0ZjhfdG9fdWNzNCAgICBYREdfUkVTRVJWRURfRU5UUlkodXRmOF90b191Y3M0KQorI2RlZmlu
ZSBfeGRnX3VjczRfdG9fbG93ZXIgICBYREdfUkVTRVJWRURfRU5UUlkodWNzNF90b19sb3dlcikK
KyNkZWZpbmUgX3hkZ191dGY4X3ZhbGlkYXRlICAgWERHX1JFU0VSVkVEX0VOVFJZKHV0ZjhfdmFs
aWRhdGUpCisjZGVmaW5lIF94ZGdfZ2V0X2Jhc2VfbmFtZSAgIFhER19SRVNFUlZFRF9FTlRSWShn
ZXRfYmFzZV9uYW1lKQorI2RlZmluZSBfeGRnX2NvbnZlcnRfdG9fdWNzNCBYREdfUkVTRVJWRURf
RU5UUlkoY29udmVydF90b191Y3M0KQorI2RlZmluZSBfeGRnX3JldmVyc2VfdWNzNCAgICBYREdf
UkVTRVJWRURfRU5UUlkocmV2ZXJzZV91Y3M0KQorI2VuZGlmCisKKyNkZWZpbmUgU1dBUF9CRTE2
X1RPX0xFMTYodmFsKSAoeGRnX3VpbnQxNl90KSgoKHhkZ191aW50MTZfdCkodmFsKSA8PCA4KXwo
KHhkZ191aW50MTZfdCkodmFsKSA+PiA4KSkKKworI2RlZmluZSBTV0FQX0JFMzJfVE9fTEUzMih2
YWwpICh4ZGdfdWludDMyX3QpKCgoKHhkZ191aW50MzJfdCkodmFsKSAmIDB4RkYwMDAwMDBVKSA+
PiAyNCkgfAlcCisJCQkJCSAgICAgICgoKHhkZ191aW50MzJfdCkodmFsKSAmIDB4MDBGRjAwMDBV
KSA+PiA4KSB8CVwKKwkJCQkJICAgICAgKCgoeGRnX3VpbnQzMl90KSh2YWwpICYgMHgwMDAwRkYw
MFUpIDw8IDgpIHwJXAorCQkJCQkgICAgICAoKCh4ZGdfdWludDMyX3QpKHZhbCkgJiAweDAwMDAw
MEZGVSkgPDwgMjQpKQorLyogVVRGLTggdXRpbHMKKyAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKmNv
bnN0IF94ZGdfdXRmOF9za2lwOworI2RlZmluZSBfeGRnX3V0ZjhfbmV4dF9jaGFyKHApIChjaGFy
ICopKChwKSArIF94ZGdfdXRmOF9za2lwWyoodW5zaWduZWQgY2hhciAqKShwKV0pCisjZGVmaW5l
IF94ZGdfdXRmOF9jaGFyX3NpemUocCkgKGludCkgKF94ZGdfdXRmOF9za2lwWyoodW5zaWduZWQg
Y2hhciAqKShwKV0pCisKK3hkZ191bmljaGFyX3QgIF94ZGdfdXRmOF90b191Y3M0ICAoY29uc3Qg
Y2hhciAgICAqc291cmNlKTsKK3hkZ191bmljaGFyX3QgIF94ZGdfdWNzNF90b19sb3dlciAoeGRn
X3VuaWNoYXJfdCAgc291cmNlKTsKK2ludCAgICAgICAgICAgIF94ZGdfdXRmOF92YWxpZGF0ZSAo
Y29uc3QgY2hhciAgICAqc291cmNlKTsKK3hkZ191bmljaGFyX3QgKl94ZGdfY29udmVydF90b191
Y3M0IChjb25zdCBjaGFyICpzb3VyY2UsIGludCAqbGVuKTsKK3ZvaWQgICAgICAgICAgIF94ZGdf
cmV2ZXJzZV91Y3M0ICh4ZGdfdW5pY2hhcl90ICpzb3VyY2UsIGludCBsZW4pOworY29uc3QgY2hh
ciAgICAqX3hkZ19nZXRfYmFzZV9uYW1lIChjb25zdCBjaGFyICAgICpmaWxlX25hbWUpOworY29u
c3QgY2hhciAgICAqX3hkZ19iaW5hcnlfb3JfdGV4dF9mYWxsYmFjayhjb25zdCB2b2lkICpkYXRh
LCBzaXplX3QgbGVuKTsKKworI2VuZGlmIC8qIF9fWERHX01JTUVfSU5UX0hfXyAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9zcmMveGRnbWltZW1hZ2ljLmMgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS94ZGdtaW1lL3NyYy94ZGdtaW1lbWFnaWMuYwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2E2MmI5ZGY5OTUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS94ZGdtaW1lL3NyYy94ZGdtaW1lbWFnaWMuYwpAQCAtMCwwICsxLDgx
NiBAQAorLyogLSotIG1vZGU6IEM7IGMtZmlsZS1zdHlsZTogImdudSIgLSotICovCisvKiB4ZGdt
aW1lbWFnaWMuOiBQcml2YXRlIGZpbGUuICBEYXRhc3RydWN0dXJlIGZvciBzdG9yaW5nIG1hZ2lj
IGZpbGVzLgorICoKKyAqIE1vcmUgaW5mbyBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5mcmVl
ZGVza3RvcC5vcmcvc3RhbmRhcmRzLworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyAgUmVkIEhh
dCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzICBKb25hdGhhbiBCbGFuZGZvcmQgPGpyYkBh
bHVtLm1pdC5lZHU+CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGlj
ZW5zZSB2ZXJzaW9uIDIuMAorICogT3IgdW5kZXIgdGhlIGZvbGxvd2luZyB0ZXJtczoKKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
CSBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEz
MDcsIFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNtYWtlY29u
ZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgInhkZ21pbWVt
YWdpYy5oIgorI2luY2x1ZGUgInhkZ21pbWVpbnQuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+
CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2lmbmRlZglGQUxT
RQorI2RlZmluZQlGQUxTRQkoMCkKKyNlbmRpZgorCisjaWZuZGVmCVRSVUUKKyNkZWZpbmUJVFJV
RQkoIUZBTFNFKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBnZXRjX3VubG9ja2VkICYmICFkZWZp
bmVkIEhBVkVfR0VUQ19VTkxPQ0tFRAorIyBkZWZpbmUgZ2V0Y191bmxvY2tlZChmcCkgZ2V0YyAo
ZnApCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgWGRnTWltZU1hZ2ljTWF0Y2ggWGRnTWltZU1h
Z2ljTWF0Y2g7Cit0eXBlZGVmIHN0cnVjdCBYZGdNaW1lTWFnaWNNYXRjaGxldCBYZGdNaW1lTWFn
aWNNYXRjaGxldDsKKwordHlwZWRlZiBlbnVtCit7CisgIFhER19NSU1FX01BR0lDX1NFQ1RJT04s
CisgIFhER19NSU1FX01BR0lDX01BR0lDLAorICBYREdfTUlNRV9NQUdJQ19FUlJPUiwKKyAgWERH
X01JTUVfTUFHSUNfRU9GCit9IFhkZ01pbWVNYWdpY1N0YXRlOworCitzdHJ1Y3QgWGRnTWltZU1h
Z2ljTWF0Y2gKK3sKKyAgY29uc3QgY2hhciAqbWltZV90eXBlOworICBpbnQgcHJpb3JpdHk7Cisg
IFhkZ01pbWVNYWdpY01hdGNobGV0ICptYXRjaGxldDsKKyAgWGRnTWltZU1hZ2ljTWF0Y2ggKm5l
eHQ7Cit9OworCisKK3N0cnVjdCBYZGdNaW1lTWFnaWNNYXRjaGxldAoreworICBpbnQgaW5kZW50
OworICBpbnQgb2Zmc2V0OworICB1bnNpZ25lZCBpbnQgdmFsdWVfbGVuZ3RoOworICB1bnNpZ25l
ZCBjaGFyICp2YWx1ZTsKKyAgdW5zaWduZWQgY2hhciAqbWFzazsKKyAgdW5zaWduZWQgaW50IHJh
bmdlX2xlbmd0aDsKKyAgdW5zaWduZWQgaW50IHdvcmRfc2l6ZTsKKyAgWGRnTWltZU1hZ2ljTWF0
Y2hsZXQgKm5leHQ7Cit9OworCisKK3N0cnVjdCBYZGdNaW1lTWFnaWMKK3sKKyAgWGRnTWltZU1h
Z2ljTWF0Y2ggKm1hdGNoX2xpc3Q7CisgIGludCBtYXhfZXh0ZW50OworfTsKKworc3RhdGljIFhk
Z01pbWVNYWdpY01hdGNoICoKK194ZGdfbWltZV9tYWdpY19tYXRjaF9uZXcgKHZvaWQpCit7Cisg
IHJldHVybiBjYWxsb2MgKDEsIHNpemVvZiAoWGRnTWltZU1hZ2ljTWF0Y2gpKTsKK30KKworCitz
dGF0aWMgWGRnTWltZU1hZ2ljTWF0Y2hsZXQgKgorX3hkZ19taW1lX21hZ2ljX21hdGNobGV0X25l
dyAodm9pZCkKK3sKKyAgWGRnTWltZU1hZ2ljTWF0Y2hsZXQgKm1hdGNobGV0OworCisgIG1hdGNo
bGV0ID0gbWFsbG9jIChzaXplb2YgKFhkZ01pbWVNYWdpY01hdGNobGV0KSk7CisKKyAgbWF0Y2hs
ZXQtPmluZGVudCA9IDA7CisgIG1hdGNobGV0LT5vZmZzZXQgPSAwOworICBtYXRjaGxldC0+dmFs
dWVfbGVuZ3RoID0gMDsKKyAgbWF0Y2hsZXQtPnZhbHVlID0gTlVMTDsKKyAgbWF0Y2hsZXQtPm1h
c2sgPSBOVUxMOworICBtYXRjaGxldC0+cmFuZ2VfbGVuZ3RoID0gMTsKKyAgbWF0Y2hsZXQtPndv
cmRfc2l6ZSA9IDE7CisgIG1hdGNobGV0LT5uZXh0ID0gTlVMTDsKKworICByZXR1cm4gbWF0Y2hs
ZXQ7Cit9CisKKworc3RhdGljIHZvaWQKK194ZGdfbWltZV9tYWdpY19tYXRjaGxldF9mcmVlIChY
ZGdNaW1lTWFnaWNNYXRjaGxldCAqbWltZV9tYWdpY19tYXRjaGxldCkKK3sKKyAgaWYgKG1pbWVf
bWFnaWNfbWF0Y2hsZXQpCisgICAgeworICAgICAgaWYgKG1pbWVfbWFnaWNfbWF0Y2hsZXQtPm5l
eHQpCisJX3hkZ19taW1lX21hZ2ljX21hdGNobGV0X2ZyZWUgKG1pbWVfbWFnaWNfbWF0Y2hsZXQt
Pm5leHQpOworICAgICAgaWYgKG1pbWVfbWFnaWNfbWF0Y2hsZXQtPnZhbHVlKQorCWZyZWUgKG1p
bWVfbWFnaWNfbWF0Y2hsZXQtPnZhbHVlKTsKKyAgICAgIGlmIChtaW1lX21hZ2ljX21hdGNobGV0
LT5tYXNrKQorCWZyZWUgKG1pbWVfbWFnaWNfbWF0Y2hsZXQtPm1hc2spOworICAgICAgZnJlZSAo
bWltZV9tYWdpY19tYXRjaGxldCk7CisgICAgfQorfQorCisKKy8qIEZyZWVzIG1pbWVfbWFnaWNf
bWF0Y2ggYW5kIHRoZSByZW1haW5kZXIgb2YgaXRzIGxpc3QKKyAqLworc3RhdGljIHZvaWQKK194
ZGdfbWltZV9tYWdpY19tYXRjaF9mcmVlIChYZGdNaW1lTWFnaWNNYXRjaCAqbWltZV9tYWdpY19t
YXRjaCkKK3sKKyAgWGRnTWltZU1hZ2ljTWF0Y2ggKnB0ciwgKm5leHQ7CisKKyAgcHRyID0gbWlt
ZV9tYWdpY19tYXRjaDsKKyAgd2hpbGUgKHB0cikKKyAgICB7CisgICAgICBuZXh0ID0gcHRyLT5u
ZXh0OworCisgICAgICBpZiAocHRyLT5taW1lX3R5cGUpCisJZnJlZSAoKHZvaWQgKikgcHRyLT5t
aW1lX3R5cGUpOworICAgICAgaWYgKHB0ci0+bWF0Y2hsZXQpCisJX3hkZ19taW1lX21hZ2ljX21h
dGNobGV0X2ZyZWUgKHB0ci0+bWF0Y2hsZXQpOworICAgICAgZnJlZSAocHRyKTsKKworICAgICAg
cHRyID0gbmV4dDsKKyAgICB9Cit9CisKKy8qIFJlYWRzIGluIGEgaHVuayBvZiBkYXRhIHVudGls
IGEgbmV3bGluZSBjaGFyYWN0ZXIgb3IgYSAnXDAwMCcgaXMgaGl0LiAgVGhlCisgKiByZXR1cm5l
ZCBzdHJpbmcgaXMgbnVsbCB0ZXJtaW5hdGVkLCBhbmQgZG9lc24ndCBpbmNsdWRlIHRoZSBuZXds
aW5lLgorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciAqCitfeGRnX21pbWVfbWFnaWNfcmVhZF90
b19uZXdsaW5lIChGSUxFICptYWdpY19maWxlLAorCQkJCSBpbnQgICplbmRfb2ZfZmlsZSkKK3sK
KyAgdW5zaWduZWQgY2hhciAqcmV0dmFsOworICBpbnQgYzsKKyAgaW50IGxlbiwgcG9zOworCisg
IGxlbiA9IDEyODsKKyAgcG9zID0gMDsKKyAgcmV0dmFsID0gbWFsbG9jIChsZW4pOworICAqZW5k
X29mX2ZpbGUgPSBGQUxTRTsKKworICB3aGlsZSAoVFJVRSkKKyAgICB7CisgICAgICBjID0gZ2V0
Y191bmxvY2tlZCAobWFnaWNfZmlsZSk7CisgICAgICBpZiAoYyA9PSBFT0YpCisJeworCSAgKmVu
ZF9vZl9maWxlID0gVFJVRTsKKwkgIGJyZWFrOworCX0KKyAgICAgIGlmIChjID09ICdcbicgfHwg
YyA9PSAnXDAwMCcpCisJYnJlYWs7CisgICAgICByZXR2YWxbcG9zKytdID0gKHVuc2lnbmVkIGNo
YXIpIGM7CisgICAgICBpZiAocG9zICUgMTI4ID09IDEyNykKKwl7CisJICBsZW4gPSBsZW4gKyAx
Mjg7CisJICByZXR2YWwgPSByZWFsbG9jIChyZXR2YWwsIGxlbik7CisJfQorICAgIH0KKworICBy
ZXR2YWxbcG9zXSA9ICdcMDAwJzsKKyAgcmV0dXJuIHJldHZhbDsKK30KKworLyogUmV0dXJucyB0
aGUgbnVtYmVyIHJlYWQgZnJvbSB0aGUgZmlsZSwgb3IgLTEgaWYgbm8gbnVtYmVyIGNvdWxkIGJl
IHJlYWQuCisgKi8KK3N0YXRpYyBpbnQKK194ZGdfbWltZV9tYWdpY19yZWFkX2FfbnVtYmVyIChG
SUxFICptYWdpY19maWxlLAorCQkJICAgICAgIGludCAgKmVuZF9vZl9maWxlKQoreworICAvKiBM
T05HX01BWCBpcyBhYm91dCAyMCBjaGFyYWN0ZXJzIG9uIG15IHN5c3RlbSAqLworI2RlZmluZSBN
QVhfTlVNQkVSX1NJWkUgMzAKKyAgY2hhciBudW1iZXJfc3RyaW5nW01BWF9OVU1CRVJfU0laRSAr
IDFdOworICBpbnQgcG9zID0gMDsKKyAgaW50IGM7CisgIGxvbmcgcmV0dmFsID0gLTE7CisKKyAg
d2hpbGUgKFRSVUUpCisgICAgeworICAgICAgYyA9IGdldGNfdW5sb2NrZWQgKG1hZ2ljX2ZpbGUp
OworCisgICAgICBpZiAoYyA9PSBFT0YpCisJeworCSAgKmVuZF9vZl9maWxlID0gVFJVRTsKKwkg
IGJyZWFrOworCX0KKyAgICAgIGlmICghIGlzZGlnaXQgKGMpKQorCXsKKwkgIHVuZ2V0YyAoYywg
bWFnaWNfZmlsZSk7CisJICBicmVhazsKKwl9CisgICAgICBudW1iZXJfc3RyaW5nW3Bvc10gPSAo
Y2hhcikgYzsKKyAgICAgIHBvcysrOworICAgICAgaWYgKHBvcyA9PSBNQVhfTlVNQkVSX1NJWkUp
CisJYnJlYWs7CisgICAgfQorICBpZiAocG9zID4gMCkKKyAgICB7CisgICAgICBudW1iZXJfc3Ry
aW5nW3Bvc10gPSAnXDAwMCc7CisgICAgICBlcnJubyA9IDA7CisgICAgICByZXR2YWwgPSBzdHJ0
b2wgKG51bWJlcl9zdHJpbmcsIE5VTEwsIDEwKTsKKworICAgICAgaWYgKChyZXR2YWwgPCBJTlRf
TUlOKSB8fCAocmV0dmFsID4gSU5UX01BWCkgfHwgKGVycm5vICE9IDApKQorCXJldHVybiAtMTsK
KyAgICB9CisKKyAgcmV0dXJuIHJldHZhbDsKK30KKworLyogSGVhZGVycyBhcmUgb2YgdGhlIGZv
cm1hdDoKKyAqIFs8cHJpb3JpdHk+OjxtaW1lLXR5cGU+XQorICovCitzdGF0aWMgWGRnTWltZU1h
Z2ljU3RhdGUKK194ZGdfbWltZV9tYWdpY19wYXJzZV9oZWFkZXIgKEZJTEUgKm1hZ2ljX2ZpbGUs
IFhkZ01pbWVNYWdpY01hdGNoICptYXRjaCkKK3sKKyAgaW50IGM7CisgIGNoYXIgKmJ1ZmZlcjsK
KyAgY2hhciAqZW5kX3B0cjsKKyAgaW50IGVuZF9vZl9maWxlID0gMDsKKworICBhc3NlcnQgKG1h
Z2ljX2ZpbGUgIT0gTlVMTCk7CisgIGFzc2VydCAobWF0Y2ggIT0gTlVMTCk7CisKKyAgYyA9IGdl
dGNfdW5sb2NrZWQgKG1hZ2ljX2ZpbGUpOworICBpZiAoYyA9PSBFT0YpCisgICAgcmV0dXJuIFhE
R19NSU1FX01BR0lDX0VPRjsKKyAgaWYgKGMgIT0gJ1snKQorICAgIHJldHVybiBYREdfTUlNRV9N
QUdJQ19FUlJPUjsKKworICBtYXRjaC0+cHJpb3JpdHkgPSBfeGRnX21pbWVfbWFnaWNfcmVhZF9h
X251bWJlciAobWFnaWNfZmlsZSwgJmVuZF9vZl9maWxlKTsKKyAgaWYgKGVuZF9vZl9maWxlKQor
ICAgIHJldHVybiBYREdfTUlNRV9NQUdJQ19FT0Y7CisgIGlmIChtYXRjaC0+cHJpb3JpdHkgPT0g
LTEpCisgICAgcmV0dXJuIFhER19NSU1FX01BR0lDX0VSUk9SOworCisgIGMgPSBnZXRjX3VubG9j
a2VkIChtYWdpY19maWxlKTsKKyAgaWYgKGMgPT0gRU9GKQorICAgIHJldHVybiBYREdfTUlNRV9N
QUdJQ19FT0Y7CisgIGlmIChjICE9ICc6JykKKyAgICByZXR1cm4gWERHX01JTUVfTUFHSUNfRVJS
T1I7CisKKyAgYnVmZmVyID0gKGNoYXIgKilfeGRnX21pbWVfbWFnaWNfcmVhZF90b19uZXdsaW5l
IChtYWdpY19maWxlLCAmZW5kX29mX2ZpbGUpOworICBpZiAoZW5kX29mX2ZpbGUpCisgICAgewor
ICAgICAgZnJlZSAoYnVmZmVyKTsKKyAgICAgIHJldHVybiBYREdfTUlNRV9NQUdJQ19FT0Y7Cisg
ICAgfQorCisgIGVuZF9wdHIgPSBidWZmZXI7CisgIHdoaWxlICgqZW5kX3B0ciAhPSAnXScgJiYg
KmVuZF9wdHIgIT0gJ1wwMDAnICYmICplbmRfcHRyICE9ICdcbicpCisgICAgZW5kX3B0cisrOwor
ICBpZiAoKmVuZF9wdHIgIT0gJ10nKQorICAgIHsKKyAgICAgIGZyZWUgKGJ1ZmZlcik7CisgICAg
ICByZXR1cm4gWERHX01JTUVfTUFHSUNfRVJST1I7CisgICAgfQorICAqZW5kX3B0ciA9ICdcMDAw
JzsKKworICBtYXRjaC0+bWltZV90eXBlID0gc3RyZHVwIChidWZmZXIpOworICBmcmVlIChidWZm
ZXIpOworCisgIHJldHVybiBYREdfTUlNRV9NQUdJQ19NQUdJQzsKK30KKworc3RhdGljIFhkZ01p
bWVNYWdpY1N0YXRlCitfeGRnX21pbWVfbWFnaWNfcGFyc2VfZXJyb3IgKEZJTEUgKm1hZ2ljX2Zp
bGUpCit7CisgIGludCBjOworCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGMgPSBnZXRjX3Vu
bG9ja2VkIChtYWdpY19maWxlKTsKKyAgICAgIGlmIChjID09IEVPRikKKwlyZXR1cm4gWERHX01J
TUVfTUFHSUNfRU9GOworICAgICAgaWYgKGMgPT0gJ1xuJykKKwlyZXR1cm4gWERHX01JTUVfTUFH
SUNfU0VDVElPTjsKKyAgICB9Cit9CisKKy8qIEhlYWRlcnMgYXJlIG9mIHRoZSBmb3JtYXQ6Cisg
KiBbIGluZGVudCBdICI+IiBzdGFydC1vZmZzZXQgIj0iIHZhbHVlCisgKiBbICImIiBtYXNrIF0g
WyAifiIgd29yZC1zaXplIF0gWyAiKyIgcmFuZ2UtbGVuZ3RoIF0gIlxuIgorICovCitzdGF0aWMg
WGRnTWltZU1hZ2ljU3RhdGUKK194ZGdfbWltZV9tYWdpY19wYXJzZV9tYWdpY19saW5lIChGSUxF
ICAgICAgICAgICAgICAqbWFnaWNfZmlsZSwKKwkJCQkgIFhkZ01pbWVNYWdpY01hdGNoICptYXRj
aCkKK3sKKyAgWGRnTWltZU1hZ2ljTWF0Y2hsZXQgKm1hdGNobGV0OworICBpbnQgYzsKKyAgaW50
IGVuZF9vZl9maWxlOworICBpbnQgaW5kZW50ID0gMDsKKyAgaW50IGJ5dGVzX3JlYWQ7CisKKyAg
YXNzZXJ0IChtYWdpY19maWxlICE9IE5VTEwpOworCisgIC8qIFNuaWZmIHRoZSBidWZmZXIgdG8g
bWFrZSBzdXJlIGl0J3MgYSB2YWxpZCBsaW5lICovCisgIGMgPSBnZXRjX3VubG9ja2VkIChtYWdp
Y19maWxlKTsKKyAgaWYgKGMgPT0gRU9GKQorICAgIHJldHVybiBYREdfTUlNRV9NQUdJQ19FT0Y7
CisgIGVsc2UgaWYgKGMgPT0gJ1snKQorICAgIHsKKyAgICAgIHVuZ2V0YyAoYywgbWFnaWNfZmls
ZSk7CisgICAgICByZXR1cm4gWERHX01JTUVfTUFHSUNfU0VDVElPTjsKKyAgICB9CisgIGVsc2Ug
aWYgKGMgPT0gJ1xuJykKKyAgICByZXR1cm4gWERHX01JTUVfTUFHSUNfTUFHSUM7CisKKyAgLyog
QXQgdGhpcyBwb2ludCwgaXQgbXVzdCBiZSBhIGRpZ2l0IG9yIGEgJz4nICovCisgIGVuZF9vZl9m
aWxlID0gRkFMU0U7CisgIGlmIChpc2RpZ2l0IChjKSkKKyAgICB7CisgICAgICB1bmdldGMgKGMs
IG1hZ2ljX2ZpbGUpOworICAgICAgaW5kZW50ID0gX3hkZ19taW1lX21hZ2ljX3JlYWRfYV9udW1i
ZXIgKG1hZ2ljX2ZpbGUsICZlbmRfb2ZfZmlsZSk7CisgICAgICBpZiAoZW5kX29mX2ZpbGUpCisJ
cmV0dXJuIFhER19NSU1FX01BR0lDX0VPRjsKKyAgICAgIGlmIChpbmRlbnQgPT0gLTEpCisJcmV0
dXJuIFhER19NSU1FX01BR0lDX0VSUk9SOworICAgICAgYyA9IGdldGNfdW5sb2NrZWQgKG1hZ2lj
X2ZpbGUpOworICAgICAgaWYgKGMgPT0gRU9GKQorCXJldHVybiBYREdfTUlNRV9NQUdJQ19FT0Y7
CisgICAgfQorCisgIGlmIChjICE9ICc+JykKKyAgICByZXR1cm4gWERHX01JTUVfTUFHSUNfRVJS
T1I7CisKKyAgbWF0Y2hsZXQgPSBfeGRnX21pbWVfbWFnaWNfbWF0Y2hsZXRfbmV3ICgpOworICBt
YXRjaGxldC0+aW5kZW50ID0gaW5kZW50OworICBtYXRjaGxldC0+b2Zmc2V0ID0gX3hkZ19taW1l
X21hZ2ljX3JlYWRfYV9udW1iZXIgKG1hZ2ljX2ZpbGUsICZlbmRfb2ZfZmlsZSk7CisgIGlmIChl
bmRfb2ZfZmlsZSkKKyAgICB7CisgICAgICBfeGRnX21pbWVfbWFnaWNfbWF0Y2hsZXRfZnJlZSAo
bWF0Y2hsZXQpOworICAgICAgcmV0dXJuIFhER19NSU1FX01BR0lDX0VPRjsKKyAgICB9CisgIGlm
IChtYXRjaGxldC0+b2Zmc2V0ID09IC0xKQorICAgIHsKKyAgICAgIF94ZGdfbWltZV9tYWdpY19t
YXRjaGxldF9mcmVlIChtYXRjaGxldCk7CisgICAgICByZXR1cm4gWERHX01JTUVfTUFHSUNfRVJS
T1I7CisgICAgfQorICBjID0gZ2V0Y191bmxvY2tlZCAobWFnaWNfZmlsZSk7CisgIGlmIChjID09
IEVPRikKKyAgICB7CisgICAgICBfeGRnX21pbWVfbWFnaWNfbWF0Y2hsZXRfZnJlZSAobWF0Y2hs
ZXQpOworICAgICAgcmV0dXJuIFhER19NSU1FX01BR0lDX0VPRjsKKyAgICB9CisgIGVsc2UgaWYg
KGMgIT0gJz0nKQorICAgIHsKKyAgICAgIF94ZGdfbWltZV9tYWdpY19tYXRjaGxldF9mcmVlICht
YXRjaGxldCk7CisgICAgICByZXR1cm4gWERHX01JTUVfTUFHSUNfRVJST1I7CisgICAgfQorCisg
IC8qIE5leHQgdHdvIGJ5dGVzIGRldGVybWluZSBob3cgbG9uZyB0aGUgdmFsdWUgaXMgKi8KKyAg
bWF0Y2hsZXQtPnZhbHVlX2xlbmd0aCA9IDA7CisgIGMgPSBnZXRjX3VubG9ja2VkIChtYWdpY19m
aWxlKTsKKyAgaWYgKGMgPT0gRU9GKQorICAgIHsKKyAgICAgIF94ZGdfbWltZV9tYWdpY19tYXRj
aGxldF9mcmVlIChtYXRjaGxldCk7CisgICAgICByZXR1cm4gWERHX01JTUVfTUFHSUNfRU9GOwor
ICAgIH0KKyAgbWF0Y2hsZXQtPnZhbHVlX2xlbmd0aCA9IGMgJiAweEZGOworICBtYXRjaGxldC0+
dmFsdWVfbGVuZ3RoID0gbWF0Y2hsZXQtPnZhbHVlX2xlbmd0aCA8PCA4OworCisgIGMgPSBnZXRj
X3VubG9ja2VkIChtYWdpY19maWxlKTsKKyAgaWYgKGMgPT0gRU9GKQorICAgIHsKKyAgICAgIF94
ZGdfbWltZV9tYWdpY19tYXRjaGxldF9mcmVlIChtYXRjaGxldCk7CisgICAgICByZXR1cm4gWERH
X01JTUVfTUFHSUNfRU9GOworICAgIH0KKyAgbWF0Y2hsZXQtPnZhbHVlX2xlbmd0aCA9IG1hdGNo
bGV0LT52YWx1ZV9sZW5ndGggKyAoYyAmIDB4RkYpOworCisgIG1hdGNobGV0LT52YWx1ZSA9IG1h
bGxvYyAobWF0Y2hsZXQtPnZhbHVlX2xlbmd0aCk7CisKKyAgLyogT09NICovCisgIGlmIChtYXRj
aGxldC0+dmFsdWUgPT0gTlVMTCkKKyAgICB7CisgICAgICBfeGRnX21pbWVfbWFnaWNfbWF0Y2hs
ZXRfZnJlZSAobWF0Y2hsZXQpOworICAgICAgcmV0dXJuIFhER19NSU1FX01BR0lDX0VSUk9SOwor
ICAgIH0KKyAgYnl0ZXNfcmVhZCA9IGZyZWFkIChtYXRjaGxldC0+dmFsdWUsIDEsIG1hdGNobGV0
LT52YWx1ZV9sZW5ndGgsIG1hZ2ljX2ZpbGUpOworICBpZiAoYnl0ZXNfcmVhZCAhPSBtYXRjaGxl
dC0+dmFsdWVfbGVuZ3RoKQorICAgIHsKKyAgICAgIF94ZGdfbWltZV9tYWdpY19tYXRjaGxldF9m
cmVlIChtYXRjaGxldCk7CisgICAgICBpZiAoZmVvZiAobWFnaWNfZmlsZSkpCisJcmV0dXJuIFhE
R19NSU1FX01BR0lDX0VPRjsKKyAgICAgIGVsc2UKKwlyZXR1cm4gWERHX01JTUVfTUFHSUNfRVJS
T1I7CisgICAgfQorCisgIGMgPSBnZXRjX3VubG9ja2VkIChtYWdpY19maWxlKTsKKyAgaWYgKGMg
PT0gJyYnKQorICAgIHsKKyAgICAgIG1hdGNobGV0LT5tYXNrID0gbWFsbG9jIChtYXRjaGxldC0+
dmFsdWVfbGVuZ3RoKTsKKyAgICAgIC8qIE9PTSAqLworICAgICAgaWYgKG1hdGNobGV0LT5tYXNr
ID09IE5VTEwpCisJeworCSAgX3hkZ19taW1lX21hZ2ljX21hdGNobGV0X2ZyZWUgKG1hdGNobGV0
KTsKKwkgIHJldHVybiBYREdfTUlNRV9NQUdJQ19FUlJPUjsKKwl9CisgICAgICBieXRlc19yZWFk
ID0gZnJlYWQgKG1hdGNobGV0LT5tYXNrLCAxLCBtYXRjaGxldC0+dmFsdWVfbGVuZ3RoLCBtYWdp
Y19maWxlKTsKKyAgICAgIGlmIChieXRlc19yZWFkICE9IG1hdGNobGV0LT52YWx1ZV9sZW5ndGgp
CisJeworCSAgX3hkZ19taW1lX21hZ2ljX21hdGNobGV0X2ZyZWUgKG1hdGNobGV0KTsKKwkgIGlm
IChmZW9mIChtYWdpY19maWxlKSkKKwkgICAgcmV0dXJuIFhER19NSU1FX01BR0lDX0VPRjsKKwkg
IGVsc2UKKwkgICAgcmV0dXJuIFhER19NSU1FX01BR0lDX0VSUk9SOworCX0KKyAgICAgIGMgPSBn
ZXRjX3VubG9ja2VkIChtYWdpY19maWxlKTsKKyAgICB9CisKKyAgaWYgKGMgPT0gJ34nKQorICAg
IHsKKyAgICAgIG1hdGNobGV0LT53b3JkX3NpemUgPSBfeGRnX21pbWVfbWFnaWNfcmVhZF9hX251
bWJlciAobWFnaWNfZmlsZSwgJmVuZF9vZl9maWxlKTsKKyAgICAgIGlmIChlbmRfb2ZfZmlsZSkK
Kwl7CisJICBfeGRnX21pbWVfbWFnaWNfbWF0Y2hsZXRfZnJlZSAobWF0Y2hsZXQpOworCSAgcmV0
dXJuIFhER19NSU1FX01BR0lDX0VPRjsKKwl9CisgICAgICBpZiAobWF0Y2hsZXQtPndvcmRfc2l6
ZSAhPSAwICYmCisJICBtYXRjaGxldC0+d29yZF9zaXplICE9IDEgJiYKKwkgIG1hdGNobGV0LT53
b3JkX3NpemUgIT0gMiAmJgorCSAgbWF0Y2hsZXQtPndvcmRfc2l6ZSAhPSA0KQorCXsKKwkgIF94
ZGdfbWltZV9tYWdpY19tYXRjaGxldF9mcmVlIChtYXRjaGxldCk7CisJICByZXR1cm4gWERHX01J
TUVfTUFHSUNfRVJST1I7CisJfQorICAgICAgYyA9IGdldGNfdW5sb2NrZWQgKG1hZ2ljX2ZpbGUp
OworICAgIH0KKworICBpZiAoYyA9PSAnKycpCisgICAgeworICAgICAgbWF0Y2hsZXQtPnJhbmdl
X2xlbmd0aCA9IF94ZGdfbWltZV9tYWdpY19yZWFkX2FfbnVtYmVyIChtYWdpY19maWxlLCAmZW5k
X29mX2ZpbGUpOworICAgICAgaWYgKGVuZF9vZl9maWxlKQorCXsKKwkgIF94ZGdfbWltZV9tYWdp
Y19tYXRjaGxldF9mcmVlIChtYXRjaGxldCk7CisJICByZXR1cm4gWERHX01JTUVfTUFHSUNfRU9G
OworCX0KKyAgICAgIGlmIChtYXRjaGxldC0+cmFuZ2VfbGVuZ3RoID09IC0xKQorCXsKKwkgIF94
ZGdfbWltZV9tYWdpY19tYXRjaGxldF9mcmVlIChtYXRjaGxldCk7CisJICByZXR1cm4gWERHX01J
TUVfTUFHSUNfRVJST1I7CisJfQorICAgICAgYyA9IGdldGNfdW5sb2NrZWQgKG1hZ2ljX2ZpbGUp
OworICAgIH0KKworCisgIGlmIChjID09ICdcbicpCisgICAgeworICAgICAgLyogV2UgY2xlYW4g
dXAgdGhlIG1hdGNobGV0LCBieXRlIHN3YXBwaW5nIGlmIG5lZWRlZCAqLworICAgICAgaWYgKG1h
dGNobGV0LT53b3JkX3NpemUgPiAxKQorCXsKKwkgIGludCBpOworCSAgaWYgKG1hdGNobGV0LT52
YWx1ZV9sZW5ndGggJSBtYXRjaGxldC0+d29yZF9zaXplICE9IDApCisJICAgIHsKKwkgICAgICBf
eGRnX21pbWVfbWFnaWNfbWF0Y2hsZXRfZnJlZSAobWF0Y2hsZXQpOworCSAgICAgIHJldHVybiBY
REdfTUlNRV9NQUdJQ19FUlJPUjsKKwkgICAgfQorCSAgLyogRklYTUU6IG5lZWQgdG8gZ2V0IHRo
aXMgZGVmaW5lZCBpbiBhIDxjb25maWcuaD4gc3R5bGUgZmlsZSAqLworI2lmIExJVFRMRV9FTkRJ
QU4KKwkgIGZvciAoaSA9IDA7IGkgPCBtYXRjaGxldC0+dmFsdWVfbGVuZ3RoOyBpID0gaSArIG1h
dGNobGV0LT53b3JkX3NpemUpCisJICAgIHsKKwkgICAgICBpZiAobWF0Y2hsZXQtPndvcmRfc2l6
ZSA9PSAyKQorCQkqKCh4ZGdfdWludDE2X3QgKikgbWF0Y2hsZXQtPnZhbHVlICsgaSkgPSBTV0FQ
X0JFMTZfVE9fTEUxNiAoKigoeGRnX3VpbnQxNl90ICopIChtYXRjaGxldC0+dmFsdWUgKyBpKSkp
OworCSAgICAgIGVsc2UgaWYgKG1hdGNobGV0LT53b3JkX3NpemUgPT0gNCkKKwkJKigoeGRnX3Vp
bnQzMl90ICopIG1hdGNobGV0LT52YWx1ZSArIGkpID0gU1dBUF9CRTMyX1RPX0xFMzIgKCooKHhk
Z191aW50MzJfdCAqKSAobWF0Y2hsZXQtPnZhbHVlICsgaSkpKTsKKwkgICAgICBpZiAobWF0Y2hs
ZXQtPm1hc2spCisJCXsKKwkJICBpZiAobWF0Y2hsZXQtPndvcmRfc2l6ZSA9PSAyKQorCQkgICAg
KigoeGRnX3VpbnQxNl90ICopIG1hdGNobGV0LT5tYXNrICsgaSkgPSBTV0FQX0JFMTZfVE9fTEUx
NiAoKigoeGRnX3VpbnQxNl90ICopIChtYXRjaGxldC0+bWFzayArIGkpKSk7CisJCSAgZWxzZSBp
ZiAobWF0Y2hsZXQtPndvcmRfc2l6ZSA9PSA0KQorCQkgICAgKigoeGRnX3VpbnQzMl90ICopIG1h
dGNobGV0LT5tYXNrICsgaSkgPSBTV0FQX0JFMzJfVE9fTEUzMiAoKigoeGRnX3VpbnQzMl90ICop
IChtYXRjaGxldC0+bWFzayArIGkpKSk7CisKKwkJfQorCSAgICB9CisjZW5kaWYKKwl9CisKKyAg
ICAgIG1hdGNobGV0LT5uZXh0ID0gbWF0Y2gtPm1hdGNobGV0OworICAgICAgbWF0Y2gtPm1hdGNo
bGV0ID0gbWF0Y2hsZXQ7CisKKworICAgICAgcmV0dXJuIFhER19NSU1FX01BR0lDX01BR0lDOwor
ICAgIH0KKworICBfeGRnX21pbWVfbWFnaWNfbWF0Y2hsZXRfZnJlZSAobWF0Y2hsZXQpOworICBp
ZiAoYyA9PSBFT0YpCisgICAgcmV0dXJuIFhER19NSU1FX01BR0lDX0VPRjsKKworICByZXR1cm4g
WERHX01JTUVfTUFHSUNfRVJST1I7Cit9CisKK3N0YXRpYyBpbnQKK194ZGdfbWltZV9tYWdpY19t
YXRjaGxldF9jb21wYXJlX3RvX2RhdGEgKFhkZ01pbWVNYWdpY01hdGNobGV0ICptYXRjaGxldCwK
KwkJCQkJICBjb25zdCB2b2lkICAgICAgICAgICAqZGF0YSwKKwkJCQkJICBzaXplX3QgICAgICAg
ICAgICAgICAgbGVuKQoreworICBpbnQgaSwgajsKKyAgZm9yIChpID0gbWF0Y2hsZXQtPm9mZnNl
dDsgaSA8IG1hdGNobGV0LT5vZmZzZXQgKyBtYXRjaGxldC0+cmFuZ2VfbGVuZ3RoOyBpKyspCisg
ICAgeworICAgICAgaW50IHZhbGlkX21hdGNobGV0ID0gVFJVRTsKKworICAgICAgaWYgKGkgKyBt
YXRjaGxldC0+dmFsdWVfbGVuZ3RoID4gbGVuKQorCXJldHVybiBGQUxTRTsKKworICAgICAgaWYg
KG1hdGNobGV0LT5tYXNrKQorCXsKKwkgIGZvciAoaiA9IDA7IGogPCBtYXRjaGxldC0+dmFsdWVf
bGVuZ3RoOyBqKyspCisJICAgIHsKKwkgICAgICBpZiAoKG1hdGNobGV0LT52YWx1ZVtqXSAmIG1h
dGNobGV0LT5tYXNrW2pdKSAhPQorCQkgICgoKCh1bnNpZ25lZCBjaGFyICopIGRhdGEpW2ogKyBp
XSkgJiBtYXRjaGxldC0+bWFza1tqXSkpCisJCXsKKwkJICB2YWxpZF9tYXRjaGxldCA9IEZBTFNF
OworCQkgIGJyZWFrOworCQl9CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgZm9yIChq
ID0gMDsgaiA8ICBtYXRjaGxldC0+dmFsdWVfbGVuZ3RoOyBqKyspCisJICAgIHsKKwkgICAgICBp
ZiAobWF0Y2hsZXQtPnZhbHVlW2pdICE9ICgodW5zaWduZWQgY2hhciAqKSBkYXRhKVtqICsgaV0p
CisJCXsKKwkJICB2YWxpZF9tYXRjaGxldCA9IEZBTFNFOworCQkgIGJyZWFrOworCQl9CisJICAg
IH0KKwl9CisgICAgICBpZiAodmFsaWRfbWF0Y2hsZXQpCisJcmV0dXJuIFRSVUU7CisgICAgfQor
ICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBpbnQKK194ZGdfbWltZV9tYWdpY19tYXRjaGxl
dF9jb21wYXJlX2xldmVsIChYZGdNaW1lTWFnaWNNYXRjaGxldCAqbWF0Y2hsZXQsCisJCQkJCWNv
bnN0IHZvaWQgICAgICAgICAgICpkYXRhLAorCQkJCQlzaXplX3QgICAgICAgICAgICAgICAgbGVu
LAorCQkJCQlpbnQgICAgICAgICAgICAgICAgICAgaW5kZW50KQoreworICB3aGlsZSAoKG1hdGNo
bGV0ICE9IE5VTEwpICYmIChtYXRjaGxldC0+aW5kZW50ID09IGluZGVudCkpCisgICAgeworICAg
ICAgaWYgKF94ZGdfbWltZV9tYWdpY19tYXRjaGxldF9jb21wYXJlX3RvX2RhdGEgKG1hdGNobGV0
LCBkYXRhLCBsZW4pKQorCXsKKwkgIGlmICgobWF0Y2hsZXQtPm5leHQgPT0gTlVMTCkgfHwKKwkg
ICAgICAobWF0Y2hsZXQtPm5leHQtPmluZGVudCA8PSBpbmRlbnQpKQorCSAgICByZXR1cm4gVFJV
RTsKKworCSAgaWYgKF94ZGdfbWltZV9tYWdpY19tYXRjaGxldF9jb21wYXJlX2xldmVsIChtYXRj
aGxldC0+bmV4dCwKKwkJCQkJCSAgICAgIGRhdGEsCisJCQkJCQkgICAgICBsZW4sCisJCQkJCQkg
ICAgICBpbmRlbnQgKyAxKSkKKwkgICAgcmV0dXJuIFRSVUU7CisJfQorCisgICAgICBkbworCXsK
KwkgIG1hdGNobGV0ID0gbWF0Y2hsZXQtPm5leHQ7CisJfQorICAgICAgd2hpbGUgKG1hdGNobGV0
ICYmIG1hdGNobGV0LT5pbmRlbnQgPiBpbmRlbnQpOworICAgIH0KKworICByZXR1cm4gRkFMU0U7
Cit9CisKK3N0YXRpYyBpbnQKK194ZGdfbWltZV9tYWdpY19tYXRjaF9jb21wYXJlX3RvX2RhdGEg
KFhkZ01pbWVNYWdpY01hdGNoICptYXRjaCwKKwkJCQkgICAgICAgY29uc3Qgdm9pZCAgICAgICAg
KmRhdGEsCisJCQkJICAgICAgIHNpemVfdCAgICAgICAgICAgICBsZW4pCit7CisgIHJldHVybiBf
eGRnX21pbWVfbWFnaWNfbWF0Y2hsZXRfY29tcGFyZV9sZXZlbCAobWF0Y2gtPm1hdGNobGV0LCBk
YXRhLCBsZW4sIDApOworfQorCitzdGF0aWMgdm9pZAorX3hkZ19taW1lX21hZ2ljX2luc2VydF9t
YXRjaCAoWGRnTWltZU1hZ2ljICAgICAgKm1pbWVfbWFnaWMsCisJCQkgICAgICBYZGdNaW1lTWFn
aWNNYXRjaCAqbWF0Y2gpCit7CisgIFhkZ01pbWVNYWdpY01hdGNoICpsaXN0OworCisgIGlmICht
aW1lX21hZ2ljLT5tYXRjaF9saXN0ID09IE5VTEwpCisgICAgeworICAgICAgbWltZV9tYWdpYy0+
bWF0Y2hfbGlzdCA9IG1hdGNoOworICAgICAgcmV0dXJuOworICAgIH0KKworICBpZiAobWF0Y2gt
PnByaW9yaXR5ID4gbWltZV9tYWdpYy0+bWF0Y2hfbGlzdC0+cHJpb3JpdHkpCisgICAgeworICAg
ICAgbWF0Y2gtPm5leHQgPSBtaW1lX21hZ2ljLT5tYXRjaF9saXN0OworICAgICAgbWltZV9tYWdp
Yy0+bWF0Y2hfbGlzdCA9IG1hdGNoOworICAgICAgcmV0dXJuOworICAgIH0KKworICBsaXN0ID0g
bWltZV9tYWdpYy0+bWF0Y2hfbGlzdDsKKyAgd2hpbGUgKGxpc3QtPm5leHQgIT0gTlVMTCkKKyAg
ICB7CisgICAgICBpZiAobGlzdC0+bmV4dC0+cHJpb3JpdHkgPCBtYXRjaC0+cHJpb3JpdHkpCisJ
eworCSAgbWF0Y2gtPm5leHQgPSBsaXN0LT5uZXh0OworCSAgbGlzdC0+bmV4dCA9IG1hdGNoOwor
CSAgcmV0dXJuOworCX0KKyAgICAgIGxpc3QgPSBsaXN0LT5uZXh0OworICAgIH0KKyAgbGlzdC0+
bmV4dCA9IG1hdGNoOworICBtYXRjaC0+bmV4dCA9IE5VTEw7Cit9CisKK1hkZ01pbWVNYWdpYyAq
CitfeGRnX21pbWVfbWFnaWNfbmV3ICh2b2lkKQoreworICByZXR1cm4gY2FsbG9jICgxLCBzaXpl
b2YgKFhkZ01pbWVNYWdpYykpOworfQorCit2b2lkCitfeGRnX21pbWVfbWFnaWNfZnJlZSAoWGRn
TWltZU1hZ2ljICptaW1lX21hZ2ljKQoreworICBpZiAobWltZV9tYWdpYykgeworICAgIF94ZGdf
bWltZV9tYWdpY19tYXRjaF9mcmVlIChtaW1lX21hZ2ljLT5tYXRjaF9saXN0KTsKKyAgICBmcmVl
IChtaW1lX21hZ2ljKTsKKyAgfQorfQorCitpbnQKK194ZGdfbWltZV9tYWdpY19nZXRfYnVmZmVy
X2V4dGVudHMgKFhkZ01pbWVNYWdpYyAqbWltZV9tYWdpYykKK3sKKyAgcmV0dXJuIG1pbWVfbWFn
aWMtPm1heF9leHRlbnQ7Cit9CisKK2NvbnN0IGNoYXIgKgorX3hkZ19taW1lX21hZ2ljX2xvb2t1
cF9kYXRhIChYZGdNaW1lTWFnaWMgKm1pbWVfbWFnaWMsCisJCQkgICAgIGNvbnN0IHZvaWQgICAq
ZGF0YSwKKwkJCSAgICAgc2l6ZV90ICAgICAgICBsZW4sCisJCQkgICAgIGludCAgICAgICAgICAg
KnJlc3VsdF9wcmlvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAg
Km1pbWVfdHlwZXNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAg
ICBuX21pbWVfdHlwZXMpCit7CisgIFhkZ01pbWVNYWdpY01hdGNoICptYXRjaDsKKyAgY29uc3Qg
Y2hhciAqbWltZV90eXBlOworICBpbnQgbjsKKyAgaW50IHByaW87CisKKyAgcHJpbyA9IDA7Cisg
IG1pbWVfdHlwZSA9IE5VTEw7CisgIGZvciAobWF0Y2ggPSBtaW1lX21hZ2ljLT5tYXRjaF9saXN0
OyBtYXRjaDsgbWF0Y2ggPSBtYXRjaC0+bmV4dCkKKyAgICB7CisgICAgICBpZiAoX3hkZ19taW1l
X21hZ2ljX21hdGNoX2NvbXBhcmVfdG9fZGF0YSAobWF0Y2gsIGRhdGEsIGxlbikpCisJeworCSAg
cHJpbyA9IG1hdGNoLT5wcmlvcml0eTsKKwkgIG1pbWVfdHlwZSA9IG1hdGNoLT5taW1lX3R5cGU7
CisJICBicmVhazsKKwl9CisgICAgICBlbHNlIAorCXsKKwkgIGZvciAobiA9IDA7IG4gPCBuX21p
bWVfdHlwZXM7IG4rKykKKwkgICAgeworCSAgICAgIGlmIChtaW1lX3R5cGVzW25dICYmIAorCQkg
IF94ZGdfbWltZV9taW1lX3R5cGVfZXF1YWwgKG1pbWVfdHlwZXNbbl0sIG1hdGNoLT5taW1lX3R5
cGUpKQorCQltaW1lX3R5cGVzW25dID0gTlVMTDsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgaWYg
KG1pbWVfdHlwZSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGZvciAobiA9IDA7IG4gPCBuX21pbWVf
dHlwZXM7IG4rKykKKwl7CisJICBpZiAobWltZV90eXBlc1tuXSkKKwkgICAgbWltZV90eXBlID0g
bWltZV90eXBlc1tuXTsKKwl9CisgICAgfQorICAKKyAgaWYgKHJlc3VsdF9wcmlvKQorICAgICpy
ZXN1bHRfcHJpbyA9IHByaW87CisKKyAgcmV0dXJuIG1pbWVfdHlwZTsKK30KKworc3RhdGljIHZv
aWQKK194ZGdfbWltZV91cGRhdGVfbWltZV9tYWdpY19leHRlbnRzIChYZGdNaW1lTWFnaWMgKm1p
bWVfbWFnaWMpCit7CisgIFhkZ01pbWVNYWdpY01hdGNoICptYXRjaDsKKyAgaW50IG1heF9leHRl
bnQgPSAwOworCisgIGZvciAobWF0Y2ggPSBtaW1lX21hZ2ljLT5tYXRjaF9saXN0OyBtYXRjaDsg
bWF0Y2ggPSBtYXRjaC0+bmV4dCkKKyAgICB7CisgICAgICBYZGdNaW1lTWFnaWNNYXRjaGxldCAq
bWF0Y2hsZXQ7CisKKyAgICAgIGZvciAobWF0Y2hsZXQgPSBtYXRjaC0+bWF0Y2hsZXQ7IG1hdGNo
bGV0OyBtYXRjaGxldCA9IG1hdGNobGV0LT5uZXh0KQorCXsKKwkgIGludCBleHRlbnQ7CisKKwkg
IGV4dGVudCA9IG1hdGNobGV0LT52YWx1ZV9sZW5ndGggKyBtYXRjaGxldC0+b2Zmc2V0ICsgbWF0
Y2hsZXQtPnJhbmdlX2xlbmd0aDsKKwkgIGlmIChtYXhfZXh0ZW50IDwgZXh0ZW50KQorCSAgICBt
YXhfZXh0ZW50ID0gZXh0ZW50OworCX0KKyAgICB9CisKKyAgbWltZV9tYWdpYy0+bWF4X2V4dGVu
dCA9IG1heF9leHRlbnQ7Cit9CisKK3N0YXRpYyBYZGdNaW1lTWFnaWNNYXRjaGxldCAqCitfeGRn
X21pbWVfbWFnaWNfbWF0Y2hsZXRfbWlycm9yIChYZGdNaW1lTWFnaWNNYXRjaGxldCAqbWF0Y2hs
ZXRzKQoreworICBYZGdNaW1lTWFnaWNNYXRjaGxldCAqbmV3X2xpc3Q7CisgIFhkZ01pbWVNYWdp
Y01hdGNobGV0ICp0bXA7CisKKyAgaWYgKChtYXRjaGxldHMgPT0gTlVMTCkgfHwgKG1hdGNobGV0
cy0+bmV4dCA9PSBOVUxMKSkKKyAgICByZXR1cm4gbWF0Y2hsZXRzOworCisgIG5ld19saXN0ID0g
TlVMTDsKKyAgdG1wID0gbWF0Y2hsZXRzOworICB3aGlsZSAodG1wICE9IE5VTEwpCisgICAgewor
ICAgICAgWGRnTWltZU1hZ2ljTWF0Y2hsZXQgKm1hdGNobGV0OworCisgICAgICBtYXRjaGxldCA9
IHRtcDsKKyAgICAgIHRtcCA9IHRtcC0+bmV4dDsKKyAgICAgIG1hdGNobGV0LT5uZXh0ID0gbmV3
X2xpc3Q7CisgICAgICBuZXdfbGlzdCA9IG1hdGNobGV0OworICAgIH0KKworICByZXR1cm4gbmV3
X2xpc3Q7CisKK30KKworc3RhdGljIHZvaWQKK194ZGdfbWltZV9tYWdpY19yZWFkX21hZ2ljX2Zp
bGUgKFhkZ01pbWVNYWdpYyAqbWltZV9tYWdpYywKKwkJCQkgRklMRSAgICAgICAgICptYWdpY19m
aWxlKQoreworICBYZGdNaW1lTWFnaWNTdGF0ZSBzdGF0ZTsKKyAgWGRnTWltZU1hZ2ljTWF0Y2gg
Km1hdGNoID0gTlVMTDsgLyogUXVpZXQgY29tcGlsZXIgKi8KKworICBzdGF0ZSA9IFhER19NSU1F
X01BR0lDX1NFQ1RJT047CisKKyAgd2hpbGUgKHN0YXRlICE9IFhER19NSU1FX01BR0lDX0VPRikK
KyAgICB7CisgICAgICBzd2l0Y2ggKHN0YXRlKQorCXsKKwljYXNlIFhER19NSU1FX01BR0lDX1NF
Q1RJT046CisJICBtYXRjaCA9IF94ZGdfbWltZV9tYWdpY19tYXRjaF9uZXcgKCk7CisJICBzdGF0
ZSA9IF94ZGdfbWltZV9tYWdpY19wYXJzZV9oZWFkZXIgKG1hZ2ljX2ZpbGUsIG1hdGNoKTsKKwkg
IGlmIChzdGF0ZSA9PSBYREdfTUlNRV9NQUdJQ19FT0YgfHwgc3RhdGUgPT0gWERHX01JTUVfTUFH
SUNfRVJST1IpCisJICAgIF94ZGdfbWltZV9tYWdpY19tYXRjaF9mcmVlIChtYXRjaCk7CisJICBi
cmVhazsKKwljYXNlIFhER19NSU1FX01BR0lDX01BR0lDOgorCSAgc3RhdGUgPSBfeGRnX21pbWVf
bWFnaWNfcGFyc2VfbWFnaWNfbGluZSAobWFnaWNfZmlsZSwgbWF0Y2gpOworCSAgaWYgKHN0YXRl
ID09IFhER19NSU1FX01BR0lDX1NFQ1RJT04gfHwKKwkgICAgICAoc3RhdGUgPT0gWERHX01JTUVf
TUFHSUNfRU9GICYmIG1hdGNoLT5taW1lX3R5cGUpKQorCSAgICB7CisJICAgICAgbWF0Y2gtPm1h
dGNobGV0ID0gX3hkZ19taW1lX21hZ2ljX21hdGNobGV0X21pcnJvciAobWF0Y2gtPm1hdGNobGV0
KTsKKwkgICAgICBfeGRnX21pbWVfbWFnaWNfaW5zZXJ0X21hdGNoIChtaW1lX21hZ2ljLCBtYXRj
aCk7CisJICAgIH0KKwkgIGVsc2UgaWYgKHN0YXRlID09IFhER19NSU1FX01BR0lDX0VPRiB8fCBz
dGF0ZSA9PSBYREdfTUlNRV9NQUdJQ19FUlJPUikKKwkgICAgX3hkZ19taW1lX21hZ2ljX21hdGNo
X2ZyZWUgKG1hdGNoKTsKKwkgIGJyZWFrOworCWNhc2UgWERHX01JTUVfTUFHSUNfRVJST1I6CisJ
ICBzdGF0ZSA9IF94ZGdfbWltZV9tYWdpY19wYXJzZV9lcnJvciAobWFnaWNfZmlsZSk7CisJICBi
cmVhazsKKwljYXNlIFhER19NSU1FX01BR0lDX0VPRjoKKwlkZWZhdWx0OgorCSAgLyogTWFrZSB0
aGUgY29tcGlsZXIgaGFwcHkgKi8KKwkgIGFzc2VydCAoMCk7CisJfQorICAgIH0KKyAgX3hkZ19t
aW1lX3VwZGF0ZV9taW1lX21hZ2ljX2V4dGVudHMgKG1pbWVfbWFnaWMpOworfQorCit2b2lkCitf
eGRnX21pbWVfbWFnaWNfcmVhZF9mcm9tX2ZpbGUgKFhkZ01pbWVNYWdpYyAqbWltZV9tYWdpYywK
KwkJCQljb25zdCBjaGFyICAgKmZpbGVfbmFtZSkKK3sKKyAgRklMRSAqbWFnaWNfZmlsZTsKKyAg
Y2hhciBoZWFkZXJbMTJdOworCisgIG1hZ2ljX2ZpbGUgPSBmb3BlbiAoZmlsZV9uYW1lLCAiciIp
OworCisgIGlmIChtYWdpY19maWxlID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIGlmIChmcmVh
ZCAoaGVhZGVyLCAxLCAxMiwgbWFnaWNfZmlsZSkgPT0gMTIpCisgICAgeworICAgICAgaWYgKG1l
bWNtcCAoIk1JTUUtTWFnaWNcMFxuIiwgaGVhZGVyLCAxMikgPT0gMCkKKyAgICAgICAgX3hkZ19t
aW1lX21hZ2ljX3JlYWRfbWFnaWNfZmlsZSAobWltZV9tYWdpYywgbWFnaWNfZmlsZSk7CisgICAg
fQorCisgIGZjbG9zZSAobWFnaWNfZmlsZSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS94ZGdtaW1lL3NyYy94ZGdtaW1lbWFnaWMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21p
bWUvc3JjL3hkZ21pbWVtYWdpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi4zNWM4MDM5YzhlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L3hk
Z21pbWUvc3JjL3hkZ21pbWVtYWdpYy5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qIC0qLSBtb2RlOiBD
OyBjLWZpbGUtc3R5bGU6ICJnbnUiIC0qLSAqLworLyogeGRnbWltZW1hZ2ljLmg6IFByaXZhdGUg
ZmlsZS4gIERhdGFzdHJ1Y3R1cmUgZm9yIHN0b3JpbmcgdGhlIG1hZ2ljIGZpbGVzLgorICoKKyAq
IE1vcmUgaW5mbyBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc3Rh
bmRhcmRzLworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyAgUmVkIEhhdCwgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDAzICBKb25hdGhhbiBCbGFuZGZvcmQgPGpyYkBhbHVtLm1pdC5lZHU+Cisg
KgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDIu
MAorICogT3IgdW5kZXIgdGhlIGZvbGxvd2luZyB0ZXJtczoKKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlIEdOVQor
ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLwor
CisjaWZuZGVmIF9fWERHX01JTUVfTUFHSUNfSF9fCisjZGVmaW5lIF9fWERHX01JTUVfTUFHSUNf
SF9fCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlICJ4ZGdtaW1lLmgiCit0eXBlZGVm
IHN0cnVjdCBYZGdNaW1lTWFnaWMgWGRnTWltZU1hZ2ljOworCisjaWZkZWYgWERHX1BSRUZJWAor
I2RlZmluZSBfeGRnX21pbWVfZ2xvYl9yZWFkX2Zyb21fZmlsZSAgICAgICAgICAgICBYREdfUkVT
RVJWRURfRU5UUlkoZ2xvYl9yZWFkX2Zyb21fZmlsZSkKKyNkZWZpbmUgX3hkZ19taW1lX21hZ2lj
X25ldyAgICAgICAgICAgICAgICAgICAgICAgWERHX1JFU0VSVkVEX0VOVFJZKG1hZ2ljX25ldykK
KyNkZWZpbmUgX3hkZ19taW1lX21hZ2ljX3JlYWRfZnJvbV9maWxlICAgICAgICAgICAgWERHX1JF
U0VSVkVEX0VOVFJZKG1hZ2ljX3JlYWRfZnJvbV9maWxlKQorI2RlZmluZSBfeGRnX21pbWVfbWFn
aWNfZnJlZSAgICAgICAgICAgICAgICAgICAgICBYREdfUkVTRVJWRURfRU5UUlkobWFnaWNfZnJl
ZSkKKyNkZWZpbmUgX3hkZ19taW1lX21hZ2ljX2dldF9idWZmZXJfZXh0ZW50cyAgICAgICAgWERH
X1JFU0VSVkVEX0VOVFJZKG1hZ2ljX2dldF9idWZmZXJfZXh0ZW50cykKKyNkZWZpbmUgX3hkZ19t
aW1lX21hZ2ljX2xvb2t1cF9kYXRhICAgICAgICAgICAgICAgWERHX1JFU0VSVkVEX0VOVFJZKG1h
Z2ljX2xvb2t1cF9kYXRhKQorI2VuZGlmCisKKworWGRnTWltZU1hZ2ljICpfeGRnX21pbWVfbWFn
aWNfbmV3ICAgICAgICAgICAgICAgICh2b2lkKTsKK3ZvaWQgICAgICAgICAgX3hkZ19taW1lX21h
Z2ljX3JlYWRfZnJvbV9maWxlICAgICAoWGRnTWltZU1hZ2ljICptaW1lX21hZ2ljLAorCQkJCQkJ
ICBjb25zdCBjaGFyICAgKmZpbGVfbmFtZSk7Cit2b2lkICAgICAgICAgIF94ZGdfbWltZV9tYWdp
Y19mcmVlICAgICAgICAgICAgICAgKFhkZ01pbWVNYWdpYyAqbWltZV9tYWdpYyk7CitpbnQgICAg
ICAgICAgIF94ZGdfbWltZV9tYWdpY19nZXRfYnVmZmVyX2V4dGVudHMgKFhkZ01pbWVNYWdpYyAq
bWltZV9tYWdpYyk7Citjb25zdCBjaGFyICAgKl94ZGdfbWltZV9tYWdpY19sb29rdXBfZGF0YSAg
ICAgICAgKFhkZ01pbWVNYWdpYyAqbWltZV9tYWdpYywKKwkJCQkJCSAgY29uc3Qgdm9pZCAgICpk
YXRhLAorCQkJCQkJICBzaXplX3QgICAgICAgIGxlbiwKKwkJCQkJCSAgaW50ICAgICAgICAgICpy
ZXN1bHRfcHJpbywKKwkJCQkJCSAgY29uc3QgY2hhciAgICptaW1lX3R5cGVzW10sCisJCQkJCQkg
IGludCAgICAgICAgICAgbl9taW1lX3R5cGVzKTsKKworI2VuZGlmIC8qIF9fWERHX01JTUVfTUFH
SUNfSF9fICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS94ZGdtaW1lL3NyYy94ZGdt
aW1lcGFyZW50LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS94ZGdtaW1lL3NyYy94ZGdtaW1lcGFyZW50
LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQzOWUzNTJmMmFhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9zcmMveGRnbWltZXBh
cmVudC5jCkBAIC0wLDAgKzEsMjE5IEBACisvKiAtKi0gbW9kZTogQzsgYy1maWxlLXN0eWxlOiAi
Z251IiAtKi0gKi8KKy8qIHhkZ21pbWVhbGlhcy5jOiBQcml2YXRlIGZpbGUuICBEYXRhc3RydWN0
dXJlIGZvciBzdG9yaW5nIHRoZSBoaWVyYXJjaHkuCisgKgorICogTW9yZSBpbmZvIGNhbiBiZSBm
b3VuZCBhdCBodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zdGFuZGFyZHMvCisgKgorICogQ29w
eXJpZ2h0IChDKSAyMDA0ICBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgIE1h
dHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPgorICoKKyAqIExpY2Vuc2VkIHVuZGVy
IHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgdmVyc2lvbiAyLjAKKyAqIE9yIHVuZGVyIHRoZSBm
b2xsb3dpbmcgdGVybXM6CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAor
ICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklH
X0gKKyNpbmNsdWRlICJjbWFrZWNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ4ZGdtaW1l
cGFyZW50LmgiCisjaW5jbHVkZSAieGRnbWltZWludC5oIgorI2luY2x1ZGUgPHN0ZGxpYi5oPgor
I2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5n
Lmg+CisjaW5jbHVkZSA8Zm5tYXRjaC5oPgorCisjaWZuZGVmCUZBTFNFCisjZGVmaW5lCUZBTFNF
CSgwKQorI2VuZGlmCisKKyNpZm5kZWYJVFJVRQorI2RlZmluZQlUUlVFCSghRkFMU0UpCisjZW5k
aWYKKwordHlwZWRlZiBzdHJ1Y3QgWGRnTWltZVBhcmVudHMgWGRnTWltZVBhcmVudHM7CisKK3N0
cnVjdCBYZGdNaW1lUGFyZW50cworeworICBjaGFyICptaW1lOworICBjaGFyICoqcGFyZW50czsK
KyAgaW50IG5fcGFyZW50czsKK307CisKK3N0cnVjdCBYZGdQYXJlbnRMaXN0Cit7CisgIHN0cnVj
dCBYZGdNaW1lUGFyZW50cyAqcGFyZW50czsKKyAgaW50IG5fbWltZXM7Cit9OworCitYZGdQYXJl
bnRMaXN0ICoKK194ZGdfbWltZV9wYXJlbnRfbGlzdF9uZXcgKHZvaWQpCit7CisgIFhkZ1BhcmVu
dExpc3QgKmxpc3Q7CisKKyAgbGlzdCA9IG1hbGxvYyAoc2l6ZW9mIChYZGdQYXJlbnRMaXN0KSk7
CisKKyAgbGlzdC0+cGFyZW50cyA9IE5VTEw7CisgIGxpc3QtPm5fbWltZXMgPSAwOworCisgIHJl
dHVybiBsaXN0OworfQorCit2b2lkICAgICAgICAgCitfeGRnX21pbWVfcGFyZW50X2xpc3RfZnJl
ZSAoWGRnUGFyZW50TGlzdCAqbGlzdCkKK3sKKyAgaW50IGk7CisgIGNoYXIgKipwOworCisgIGlm
IChsaXN0LT5wYXJlbnRzKQorICAgIHsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0LT5uX21p
bWVzOyBpKyspCisJeworCSAgZm9yIChwID0gbGlzdC0+cGFyZW50c1tpXS5wYXJlbnRzOyAqcDsg
cCsrKQorCSAgICBmcmVlICgqcCk7CisKKwkgIGZyZWUgKGxpc3QtPnBhcmVudHNbaV0ucGFyZW50
cyk7CisJICBmcmVlIChsaXN0LT5wYXJlbnRzW2ldLm1pbWUpOworCX0KKyAgICAgIGZyZWUgKGxp
c3QtPnBhcmVudHMpOworICAgIH0KKyAgZnJlZSAobGlzdCk7Cit9CisKK3N0YXRpYyBpbnQKK3Bh
cmVudF9lbnRyeV9jbXAgKGNvbnN0IHZvaWQgKnYxLCBjb25zdCB2b2lkICp2MikKK3sKKyAgcmV0
dXJuIHN0cmNtcCAoKChYZGdNaW1lUGFyZW50cyAqKXYxKS0+bWltZSwgKChYZGdNaW1lUGFyZW50
cyAqKXYyKS0+bWltZSk7Cit9CisKK2NvbnN0IGNoYXIgKioKK194ZGdfbWltZV9wYXJlbnRfbGlz
dF9sb29rdXAgKFhkZ1BhcmVudExpc3QgKmxpc3QsCisJCQkgICAgICBjb25zdCBjaGFyICAgICpt
aW1lKQoreworICBYZGdNaW1lUGFyZW50cyAqZW50cnk7CisgIFhkZ01pbWVQYXJlbnRzIGtleTsK
KworICBpZiAobGlzdC0+bl9taW1lcyA+IDApCisgICAgeworICAgICAga2V5Lm1pbWUgPSAoY2hh
ciAqKW1pbWU7CisgICAgICBrZXkucGFyZW50cyA9IE5VTEw7CisKKyAgICAgIGVudHJ5ID0gYnNl
YXJjaCAoJmtleSwgbGlzdC0+cGFyZW50cywgbGlzdC0+bl9taW1lcywKKwkJICAgICAgIHNpemVv
ZiAoWGRnTWltZVBhcmVudHMpLCAmcGFyZW50X2VudHJ5X2NtcCk7CisgICAgICBpZiAoZW50cnkp
CisgICAgICAgIHJldHVybiAoY29uc3QgY2hhciAqKillbnRyeS0+cGFyZW50czsKKyAgICB9CisK
KyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK194ZGdfbWltZV9wYXJlbnRfcmVhZF9mcm9tX2Zp
bGUgKFhkZ1BhcmVudExpc3QgKmxpc3QsCisJCQkJIGNvbnN0IGNoYXIgICAgKmZpbGVfbmFtZSkK
K3sKKyAgRklMRSAqZmlsZTsKKyAgY2hhciBsaW5lWzI1NV07CisgIGludCBpLCBhbGxvYzsKKyAg
WGRnTWltZVBhcmVudHMgKmVudHJ5OworCisgIGZpbGUgPSBmb3BlbiAoZmlsZV9uYW1lLCAiciIp
OworCisgIGlmIChmaWxlID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIC8qIEZJWE1FOiBOb3Qg
VVRGLTggc2FmZS4gIERvZXNuJ3Qgd29yayBpZiBsaW5lcyBhcmUgZ3JlYXRlciB0aGFuIDI1NSBj
aGFycy4KKyAgICogQmxhaCAqLworICBhbGxvYyA9IGxpc3QtPm5fbWltZXMgKyAxNjsKKyAgbGlz
dC0+cGFyZW50cyA9IHJlYWxsb2MgKGxpc3QtPnBhcmVudHMsIGFsbG9jICogc2l6ZW9mIChYZGdN
aW1lUGFyZW50cykpOworICB3aGlsZSAoZmdldHMgKGxpbmUsIDI1NSwgZmlsZSkgIT0gTlVMTCkK
KyAgICB7CisgICAgICBjaGFyICpzZXA7CisgICAgICBpZiAobGluZVswXSA9PSAnIycpCisJY29u
dGludWU7CisKKyAgICAgIHNlcCA9IHN0cmNociAobGluZSwgJyAnKTsKKyAgICAgIGlmIChzZXAg
PT0gTlVMTCkKKwljb250aW51ZTsKKyAgICAgICooc2VwKyspID0gJ1wwMDAnOworICAgICAgc2Vw
W3N0cmxlbiAoc2VwKSAtMV0gPSAnXDAwMCc7CisgICAgICBlbnRyeSA9IE5VTEw7CisgICAgICBm
b3IgKGkgPSAwOyBpIDwgbGlzdC0+bl9taW1lczsgaSsrKQorCXsKKwkgIGlmIChzdHJjbXAgKGxp
c3QtPnBhcmVudHNbaV0ubWltZSwgbGluZSkgPT0gMCkKKwkgICAgeworCSAgICAgIGVudHJ5ID0g
JihsaXN0LT5wYXJlbnRzW2ldKTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICAgIAor
ICAgICAgaWYgKCFlbnRyeSkKKwl7CisJICBpZiAobGlzdC0+bl9taW1lcyA9PSBhbGxvYykKKwkg
ICAgeworCSAgICAgIGFsbG9jIDw8PSAxOworCSAgICAgIGxpc3QtPnBhcmVudHMgPSByZWFsbG9j
IChsaXN0LT5wYXJlbnRzLCAKKwkJCQkgICAgICAgYWxsb2MgKiBzaXplb2YgKFhkZ01pbWVQYXJl
bnRzKSk7CisJICAgIH0KKwkgIGxpc3QtPnBhcmVudHNbbGlzdC0+bl9taW1lc10ubWltZSA9IHN0
cmR1cCAobGluZSk7CisJICBsaXN0LT5wYXJlbnRzW2xpc3QtPm5fbWltZXNdLnBhcmVudHMgPSBO
VUxMOworCSAgZW50cnkgPSAmKGxpc3QtPnBhcmVudHNbbGlzdC0+bl9taW1lc10pOworCSAgbGlz
dC0+bl9taW1lcysrOworCX0KKworICAgICAgaWYgKCFlbnRyeS0+cGFyZW50cykKKwl7CisJICBl
bnRyeS0+bl9wYXJlbnRzID0gMTsKKwkgIGVudHJ5LT5wYXJlbnRzID0gbWFsbG9jICgoZW50cnkt
Pm5fcGFyZW50cyArIDEpICogc2l6ZW9mIChjaGFyICopKTsKKwl9CisgICAgICBlbHNlCisJewor
CSAgZW50cnktPm5fcGFyZW50cyArPSAxOworCSAgZW50cnktPnBhcmVudHMgPSByZWFsbG9jIChl
bnRyeS0+cGFyZW50cywgCisJCQkJICAgIChlbnRyeS0+bl9wYXJlbnRzICsgMikgKiBzaXplb2Yg
KGNoYXIgKikpOworCX0KKyAgICAgIGVudHJ5LT5wYXJlbnRzW2VudHJ5LT5uX3BhcmVudHMgLSAx
XSA9IHN0cmR1cCAoc2VwKTsKKyAgICAgIGVudHJ5LT5wYXJlbnRzW2VudHJ5LT5uX3BhcmVudHNd
ID0gTlVMTDsKKyAgICB9CisKKyAgbGlzdC0+cGFyZW50cyA9IHJlYWxsb2MgKGxpc3QtPnBhcmVu
dHMsIAorCQkJICAgbGlzdC0+bl9taW1lcyAqIHNpemVvZiAoWGRnTWltZVBhcmVudHMpKTsKKwor
ICBmY2xvc2UgKGZpbGUpOyAgCisgIAorICBpZiAobGlzdC0+bl9taW1lcyA+IDEpCisgICAgcXNv
cnQgKGxpc3QtPnBhcmVudHMsIGxpc3QtPm5fbWltZXMsIAorICAgICAgICAgICBzaXplb2YgKFhk
Z01pbWVQYXJlbnRzKSwgJnBhcmVudF9lbnRyeV9jbXApOworfQorCisKK3ZvaWQgICAgICAgICAK
K194ZGdfbWltZV9wYXJlbnRfbGlzdF9kdW1wIChYZGdQYXJlbnRMaXN0ICpsaXN0KQoreworICBp
bnQgaTsKKyAgY2hhciAqKnA7CisKKyAgaWYgKGxpc3QtPnBhcmVudHMpCisgICAgeworICAgICAg
Zm9yIChpID0gMDsgaSA8IGxpc3QtPm5fbWltZXM7IGkrKykKKwl7CisJICBmb3IgKHAgPSBsaXN0
LT5wYXJlbnRzW2ldLnBhcmVudHM7ICpwOyBwKyspCisJICAgIHByaW50ZiAoIiVzICVzXG4iLCBs
aXN0LT5wYXJlbnRzW2ldLm1pbWUsICpwKTsKKwl9CisgICAgfQorfQorCisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvc3JjL3hkZ21pbWVwYXJlbnQuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L3hkZ21pbWUvc3JjL3hkZ21pbWVwYXJlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uYjU2NGY0MTI3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS94ZGdtaW1lL3NyYy94ZGdtaW1lcGFyZW50LmgKQEAgLTAsMCArMSw1MSBA
QAorLyogLSotIG1vZGU6IEM7IGMtZmlsZS1zdHlsZTogImdudSIgLSotICovCisvKiB4ZGdtaW1l
cGFyZW50Lmg6IFByaXZhdGUgZmlsZS4gIERhdGFzdHJ1Y3R1cmUgZm9yIHN0b3JpbmcgdGhlIGhp
ZXJhcmNoeS4KKyAqCisgKiBNb3JlIGluZm8gY2FuIGJlIGZvdW5kIGF0IGh0dHA6Ly93d3cuZnJl
ZWRlc2t0b3Aub3JnL3N0YW5kYXJkcy8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgIFJlZCBI
YXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwICBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5A
cmVkaGF0LmNvbT4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQWNhZGVtaWMgRnJlZSBMaWNl
bnNlIHZlcnNpb24gMi4wCisgKiBPciB1bmRlciB0aGUgZm9sbG93aW5nIHRlcm1zOgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4J
IFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgorICovCisKKyNpZm5kZWYgX19YREdfTUlNRV9QQVJFTlRfSF9fCisjZGVmaW5lIF9f
WERHX01JTUVfUEFSRU5UX0hfXworCisjaW5jbHVkZSAieGRnbWltZS5oIgorCit0eXBlZGVmIHN0
cnVjdCBYZGdQYXJlbnRMaXN0IFhkZ1BhcmVudExpc3Q7CisKKyNpZmRlZiBYREdfUFJFRklYCisj
ZGVmaW5lIF94ZGdfbWltZV9wYXJlbnRfcmVhZF9mcm9tX2ZpbGUgICAgICAgIFhER19SRVNFUlZF
RF9FTlRSWShwYXJlbnRfcmVhZF9mcm9tX2ZpbGUpCisjZGVmaW5lIF94ZGdfbWltZV9wYXJlbnRf
bGlzdF9uZXcgICAgICAgICAgICAgIFhER19SRVNFUlZFRF9FTlRSWShwYXJlbnRfbGlzdF9uZXcp
CisjZGVmaW5lIF94ZGdfbWltZV9wYXJlbnRfbGlzdF9mcmVlICAgICAgICAgICAgIFhER19SRVNF
UlZFRF9FTlRSWShwYXJlbnRfbGlzdF9mcmVlKQorI2RlZmluZSBfeGRnX21pbWVfcGFyZW50X2xp
c3RfbG9va3VwICAgICAgICAgICBYREdfUkVTRVJWRURfRU5UUlkocGFyZW50X2xpc3RfbG9va3Vw
KQorI2RlZmluZSBfeGRnX21pbWVfcGFyZW50X2xpc3RfZHVtcCAgICAgICAgICAgICBYREdfUkVT
RVJWRURfRU5UUlkocGFyZW50X2xpc3RfZHVtcCkKKyNlbmRpZgorCit2b2lkICAgICAgICAgIF94
ZGdfbWltZV9wYXJlbnRfcmVhZF9mcm9tX2ZpbGUgKFhkZ1BhcmVudExpc3QgKmxpc3QsCisJCQkJ
CSAgICAgICBjb25zdCBjaGFyICAgICpmaWxlX25hbWUpOworWGRnUGFyZW50TGlzdCAqX3hkZ19t
aW1lX3BhcmVudF9saXN0X25ldyAgICAgICAodm9pZCk7Cit2b2lkICAgICAgICAgICBfeGRnX21p
bWVfcGFyZW50X2xpc3RfZnJlZSAgICAgIChYZGdQYXJlbnRMaXN0ICpsaXN0KTsKK2NvbnN0IGNo
YXIgICAqKl94ZGdfbWltZV9wYXJlbnRfbGlzdF9sb29rdXAgICAgKFhkZ1BhcmVudExpc3QgKmxp
c3QsCisJCQkJCQljb25zdCBjaGFyICAgICptaW1lKTsKK3ZvaWQgICAgICAgICAgIF94ZGdfbWlt
ZV9wYXJlbnRfbGlzdF9kdW1wICAgICAgKFhkZ1BhcmVudExpc3QgKmxpc3QpOworCisjZW5kaWYg
LyogX19YREdfTUlNRV9QQVJFTlRfSF9fICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDZmZjRh
Y2FlYzc0Li5hZjM3NzVjNzViOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTM0OTMsNiArMzQ5
MywxMSBAQCBpZiAoVVNFX1dPRkYyKQogICBsaXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUyB3
b2ZmMikKIGVuZGlmICgpCiAKK2lmIChVU0VfWERHTUlNRSkKKyAgICBsaXN0KEFQUEVORCBXZWJD
b3JlX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7VEhJUkRQQVJUWV9ESVJ9L3hkZ21pbWUvc3JjIikK
KyAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUyB4ZGdtaW1lKQorZW5kaWYoKQorCiBz
ZXQoV2ViQ29yZVRlc3RTdXBwb3J0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vbW9jayIKICAgICAiJHtXRUJDT1JFX0RJUn0vdGVzdGluZyIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCAyMGZiMGUxMTQ2ZC4uY2M5MThkMmVhZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OSBAQAorMjAxNy0wMy0yMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dUS10gQWRkIE1JTUVUeXBlUmVnaXN0cnkgaW1wbGVtZW50YXRpb24g
dXNpbmcgeGRnbWltZSBhbmQgcmVtb3ZlIHRoZSBHVEsrIG9uZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMDAxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIFhERyBpbXBsZW1lbnRhdGlvbiBjb3Vs
ZCBiZSB1c2VkIGJ5IGFueSBwb3J0IHdoZXJlIHNoYXJlZC1taW1lLWluZm8gaXMgZXhwZWN0ZWQg
dG8gYmUgYXZhaWxhYmxlLiBJdCBhbHNvCisgICAgICAgIGltcHJvdmVzIHRoZSBjdXJyZW50IEdU
SysgaW1wbGVtZW50YXRpb24gdGhhdCBpcyBiYXNlZCBvbiBhIHZlcnkgc21hbGwgbWFwIG9mIG1p
bWUgdHlwZXMgYW5kIGV4dGVuc2lvbnMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS94ZGcvTUlNRVR5
cGVSZWdpc3RyeVhkZy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvTUlNRVR5cGVSZWdpc3RyeUd0ay5jcHAuCisgICAgICAgIChXZWJDb3JlOjpNSU1FVHlwZVJl
Z2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpNSU1F
VHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSk6CisKIDIwMTct
MDMtMjIgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIExldCBN
ZW1vcnlQcmVzc3VyZUhhbmRsZXIgdHJhY2sgd2hldGhlciB0aGUgcHJvY2VzcyBpcyBhY3RpdmUg
b3IgaW5hY3RpdmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDc4Y2EzOTlmNGRlLi42
N2I5MmM2Yjk2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UK
KysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTE0MSw3ICsxNDEsNiBA
QCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ndGsvRHJhZ0RhdGFH
dGsuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL0Vycm9yc0d0ay5jcHAKICAgICBwbGF0Zm9ybS9ndGsv
TG9jYWxpemVkU3RyaW5nc0d0ay5jcHAKLSAgICBwbGF0Zm9ybS9ndGsvTUlNRVR5cGVSZWdpc3Ry
eUd0ay5jcHAKICAgICBwbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKICAgICBwbGF0Zm9y
bS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL1NlbGVjdGlvbkRh
dGEuY3BwCkBAIC0xNzksNiArMTc4LDggQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vdGV4dC9oeXBoZW4vSHlwaGVuYXRpb25MaWJIeXBoZW4uY3BwCiAKICAgICBw
bGF0Zm9ybS91bml4L0xvZ2dpbmdVbml4LmNwcAorCisgICAgcGxhdGZvcm0veGRnL01JTUVUeXBl
UmVnaXN0cnlYZGcuY3BwCiApCiAKIGxpc3QoQVBQRU5EIFdlYkNvcmVQbGF0Zm9ybUdUS19TT1VS
Q0VTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTUlNRVR5cGVSZWdp
c3RyeUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ZGcvTUlNRVR5cGVSZWdpc3Ry
eVhkZy5jcHAKc2ltaWxhcml0eSBpbmRleCA1NSUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL01JTUVUeXBlUmVnaXN0cnlHdGsuY3BwCnJlbmFtZSB0byBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS94ZGcvTUlNRVR5cGVSZWdpc3RyeVhkZy5jcHAKaW5kZXggYjI3YmUxMDJl
OWIuLjc3NWFjNWRjYWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
TUlNRVR5cGVSZWdpc3RyeUd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veGRn
L01JTUVUeXBlUmVnaXN0cnlYZGcuY3BwCkBAIC0xLDcgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
OCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHly
aWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yOCw0NCArMjYsMjEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNSU1F
VHlwZVJlZ2lzdHJ5LmgiCiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IEV4dGVuc2lv
bk1hcCB7Ci0gICAgY29uc3QgY2hhciogZXh0ZW5zaW9uOwotICAgIGNvbnN0IGNoYXIqIG1pbWVU
eXBlOwotfTsKKyNkZWZpbmUgWERHX1BSRUZJWCBfd2tfeGRnCisjaW5jbHVkZSAieGRnbWltZS5o
IgogCi1zdGF0aWMgY29uc3QgRXh0ZW5zaW9uTWFwIGV4dGVuc2lvbk1hcCBbXSA9IHsKLSAgICB7
ICJibXAiLCAiaW1hZ2UvYm1wIiB9LAotICAgIHsgImNzcyIsICJ0ZXh0L2NzcyIgfSwKLSAgICB7
ICJnaWYiLCAiaW1hZ2UvZ2lmIiB9LAotICAgIHsgImh0bWwiLCAidGV4dC9odG1sIiB9LAotICAg
IHsgImh0bSIsICJ0ZXh0L2h0bWwiIH0sCi0gICAgeyAiaWNvIiwgImltYWdlL3gtaWNvbiIgfSwK
LSAgICB7ICJqcGVnIiwgImltYWdlL2pwZWciIH0sCi0gICAgeyAianBnIiwgImltYWdlL2pwZWci
IH0sCi0gICAgeyAianMiLCAiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0IiB9LAotICAgIHsgInBk
ZiIsICJhcHBsaWNhdGlvbi9wZGYiIH0sCi0gICAgeyAicG5nIiwgImltYWdlL3BuZyIgfSwKLSAg
ICB7ICJyc3MiLCAiYXBwbGljYXRpb24vcnNzK3htbCIgfSwKLSAgICB7ICJzdmciLCAiaW1hZ2Uv
c3ZnK3htbCIgfSwKLSAgICB7ICJzd2YiLCAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2gi
IH0sCi0gICAgeyAidGV4dCIsICJ0ZXh0L3BsYWluIiB9LAotICAgIHsgInR4dCIsICJ0ZXh0L3Bs
YWluIiB9LAotICAgIHsgInhibSIsICJpbWFnZS94LXhiaXRtYXAiIH0sCi0gICAgeyAieG1sIiwg
InRleHQveG1sIiB9LAotICAgIHsgInhzbCIsICJ0ZXh0L3hzbCIgfSwKLSAgICB7ICJ4aHRtbCIs
ICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiIH0sCi0gICAgeyAid21sIiwgInRleHQvdm5kLndhcC53
bWwiIH0sCi0gICAgeyAid21sYyIsICJhcHBsaWNhdGlvbi92bmQud2FwLndtbGMiIH0sCi19Owor
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5
cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pCiB7Ci0gICAgZm9yIChhdXRv
JiBlbnRyeSA6IGV4dGVuc2lvbk1hcCkgewotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJ
Q2FzZShleHRlbnNpb24sIGVudHJ5LmV4dGVuc2lvbikpCi0gICAgICAgICAgICByZXR1cm4gZW50
cnkubWltZVR5cGU7Ci0gICAgfQorICAgIGlmIChleHRlbnNpb24uaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAvLyBCdWlsZCBhbnkgZmlsZW5hbWUgd2l0aCB0aGUg
Z2l2ZW4gZXh0ZW5zaW9uLgorICAgIFN0cmluZyBmaWxlbmFtZSA9ICJhLiIgKyBleHRlbnNpb247
CisgICAgaWYgKGNvbnN0IGNoYXIqIG1pbWVUeXBlID0geGRnX21pbWVfZ2V0X21pbWVfdHlwZV9m
cm9tX2ZpbGVfbmFtZShmaWxlbmFtZS51dGY4KCkuZGF0YSgpKSkKKyAgICAgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgobWltZVR5cGUpOworCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCkBA
IC03NiwxMSArNTEsMTcgQEAgYm9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc0FwcGxpY2F0aW9uUGx1
Z2luTUlNRVR5cGUoY29uc3QgU3RyaW5nJikKIAogU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6Omdl
dFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7
Ci0gICAgZm9yIChhdXRvJiBlbnRyeSA6IGV4dGVuc2lvbk1hcCkgewotICAgICAgICBpZiAoZXF1
YWxJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgZW50cnkubWltZVR5cGUpKQotICAgICAgICAg
ICAgcmV0dXJuIGVudHJ5LmV4dGVuc2lvbjsKKyAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBTdHJpbmcgcmV0dXJuVmFsdWU7CisgICAg
Y2hhciogZXh0ZW5zaW9uOworICAgIGlmICh4ZGdfbWltZV9nZXRfc2ltcGxlX2dsb2JzKG1pbWVU
eXBlLnV0ZjgoKS5kYXRhKCksICZleHRlbnNpb24sIDEpKSB7CisgICAgICAgIGlmIChleHRlbnNp
b25bMF0gPT0gJy4nICYmIGV4dGVuc2lvblsxXSkKKyAgICAgICAgICAgIHJldHVyblZhbHVlID0g
U3RyaW5nOjpmcm9tVVRGOChleHRlbnNpb24gKyAxKTsKKyAgICAgICAgZnJlZSAoZXh0ZW5zaW9u
KTsKICAgICB9Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgcmV0dXJuIHJldHVyblZh
bHVlOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZSBi
L1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCmluZGV4IDY2NmFmNTE4MTRlLi41MWMwMTdi
N2E4NSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKysrIGIvU291
cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKQEAgLTU1LDYgKzU1LDcgQEAgZmluZF9wYWNrYWdl
KE9wZW5HTEVTMikKIFdFQktJVF9PUFRJT05fQkVHSU4oKQogCiBzZXQoVVNFX1dPRkYyIE9OKQor
c2V0KFVTRV9YREdNSU1FIE9OKQogCiAjIEZvciBvbGQgdmVyc2lvbnMgb2YgSGFyZkJ1enogdGhh
dCBkbyBub3QgZXhwb3NlIGFuIEFQSSBmb3IgdGhlIE9wZW5UeXBlIE1BVEgKICMgdGFibGUsIHdl
IGVuYWJsZSBvdXIgb3duIGNvZGUgdG8gcGFyc2UgdGhhdCB0YWJsZS4K
</data>
<flag name="review"
          id="326641"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
    <flag name="commit-queue"
          id="326644"
          type_id="3"
          status="-"
          setter="cgarcia"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305192</attachid>
            <date>2017-03-23 06:42:45 -0700</date>
            <delta_ts>2017-03-23 07:55:18 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>wk-xdgmime.diff</filename>
            <type>text/plain</type>
            <size>149696</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBmNjliNWRjYzZhYi4uZDBl
MGRhMGU2ZTYgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMyBAQAorMjAxNy0wMy0yMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIE1JTUVUeXBlUmVnaXN0cnkgaW1wbGVtZW50YXRp
b24gdXNpbmcgeGRnbWltZSBhbmQgcmVtb3ZlIHRoZSBHVEsrIG9uZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMDAxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTWljaGFlbCBDYXRhbnphcm8uCisKKyAgICAgICAgKiBTb3VyY2UvQ01ha2VMaXN0cy50
eHQ6IENvbXBpbGUgeGRnbWltZSBpZiBVU0VfWERHTUlNRSBpcyBPTi4KKyAgICAgICAgKiBTb3Vy
Y2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZTogU2V0IFVTRV9YREdNSU1FIHRvIE9OLgorCiAyMDE3
LTAzLTEwICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkIFdpbjY0IGJ1aWxkIGZpeC4gRlRMIGlzIG5vdCByZWFkeSB0byBiZSB0dXJuZWQg
b24geWV0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDljNTQ4NDkxZWNjLi5lMTc2ODZlYmYwOCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSw1ICsx
LDE2IEBACiAyMDE3LTAzLTIzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KIAorICAgICAgICBbR1RLXSBBZGQgTUlNRVR5cGVSZWdpc3RyeSBpbXBsZW1lbnRhdGlv
biB1c2luZyB4ZGdtaW1lIGFuZCByZW1vdmUgdGhlIEdUSysgb25lCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAwMDEKKworICAgICAgICBSZXZpZXdl
ZCBieSBNaWNoYWVsIENhdGFuemFyby4KKworICAgICAgICBSZW1vdmUgcGxhdGZvcm0gc3BlY2lm
aWMgZXhwZWN0YXRpb25zIG9mIHR3byB0ZXN0IGJlY2F1c2Ugbm93IHdlIGRvIHRoZSBzYW1lIGFz
IG90aGVyIHdrMiBwb3J0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRp
b25zOgorCisyMDE3LTAzLTIzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KKwogICAgICAgICBVbnJldmlld2VkIEdUSysgZ2FyZGVuaW5nLiBNYXJrIHdlYnJ0Yy9j
b25uZWN0aW9uLXN0YXRlLmh0bWwgYXMgZmFpbGluZy4KIAogICAgICAgICAqIHBsYXRmb3JtL2d0
ay9UZXN0RXhwZWN0YXRpb25zOgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3Rr
L1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0
aW9ucwppbmRleCA2ZGYyZjE4MzliZS4uNzk5YjU2MjYwOGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCkBAIC0zMzM3LDEwICszMzM3LDYgQEAgZmFzdC9zY3Jv
bGxpbmcvcnRsLXNjcm9sbGJhcnMtYWx0ZXJuYXRlLWJvZHktZGlyLWF0dHItZG9lcy1ub3QtdXBk
YXRlLXNjcm9sbGJhci0KIGZhc3Qvc2Nyb2xsaW5nL3J0bC1zY3JvbGxiYXJzLWFsdGVybmF0ZS1i
b2R5LWRpci1hdHRyLWRvZXMtbm90LXVwZGF0ZS1zY3JvbGxiYXItcGxhY2VtZW50LTIuaHRtbCBb
IFBhc3MgXQogd2Via2l0Lm9yZy9iLzE1NjQzNyBmYXN0L3Njcm9sbGluZy9ydGwtc2Nyb2xsYmFy
cy1saXN0Ym94LXNjcm9sbC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBQYXNzIF0KIAotIyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NjEyCi1odHRwL3Rlc3RzL3Nl
Y3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9lbWJlZC1yZWRpcmVjdC1ibG9ja2VkMy5odG1s
IFsgUGFzcyBdCi1odHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9vYmpl
Y3QtcmVkaXJlY3QtYmxvY2tlZDMuaHRtbCBbIFBhc3MgXQotCiAjIFdlIGRvbid0IHN1cHBvcnQg
ZW1vamkgZ2VuZGVycywgYnV0IGhhbGYgdGhlIHJlZnRlc3RzIHBhc3MgYW55d2F5LgogZmFzdC90
ZXh0L2Vtb2ppLWdlbmRlci0yLTMuaHRtbCBbIFBhc3MgXQogZmFzdC90ZXh0L2Vtb2ppLWdlbmRl
ci0yLTQuaHRtbCBbIFBhc3MgXQpkaWZmIC0tZ2l0IGEvU291cmNlL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL0NNYWtlTGlzdHMudHh0CmluZGV4IDE1ZmRmMjI0YTg5Li5iYTllOTljMDQ1YiAxMDA2
NDQKLS0tIGEvU291cmNlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9DTWFrZUxpc3RzLnR4
dApAQCAtMjIsNiArMjIsMTAgQEAgaWYgKFVTRV9XT0ZGMikKICAgICBhZGRfc3ViZGlyZWN0b3J5
KFRoaXJkUGFydHkvd29mZjIpCiBlbmRpZiAoKQogCitpZiAoVVNFX1hER01JTUUpCisgICAgYWRk
X3N1YmRpcmVjdG9yeShUaGlyZFBhcnR5L3hkZ21pbWUpCitlbmRpZiAoKQorCiBpZiAoRU5BQkxF
X1dFQkNPUkUpCiAgICAgYWRkX3N1YmRpcmVjdG9yeShXZWJDb3JlKQogZW5kaWYgKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0NoYW5nZUxvZyBiL1NvdXJjZS9UaGlyZFBhcnR5L0No
YW5nZUxvZwppbmRleCBmNDVlZGRkYjFjMi4uMjljNGE4MTNkMDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzMiBAQAorMjAxNy0wMy0yMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2Fy
Y2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIE1JTUVUeXBlUmVnaXN0cnkgaW1w
bGVtZW50YXRpb24gdXNpbmcgeGRnbWltZSBhbmQgcmVtb3ZlIHRoZSBHVEsrIG9uZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMDAxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTWljaGFlbCBDYXRhbnphcm8uCisKKyAgICAgICAgQWRkIHhkZ21pbWUg
dG8gVGhpcmRQYXJ0eS4KKworICAgICAgICAqIHhkZ21pbWUvQ01ha2VMaXN0cy50eHQ6IEFkZGVk
LgorICAgICAgICAqIHhkZ21pbWUvUkVBRE1FOiBBZGRlZC4KKyAgICAgICAgKiB4ZGdtaW1lL1JF
QURNRS53ZWJraXQ6IEFkZGVkLgorICAgICAgICAqIHhkZ21pbWUvc3JjL3hkZ21pbWUuYzogQWRk
ZWQuCisgICAgICAgICogeGRnbWltZS9zcmMveGRnbWltZS5oOiBBZGRlZC4KKyAgICAgICAgKiB4
ZGdtaW1lL3NyYy94ZGdtaW1lYWxpYXMuYzogQWRkZWQuCisgICAgICAgICogeGRnbWltZS9zcmMv
eGRnbWltZWFsaWFzLmg6IEFkZGVkLgorICAgICAgICAqIHhkZ21pbWUvc3JjL3hkZ21pbWVjYWNo
ZS5jOiBBZGRlZC4KKyAgICAgICAgKiB4ZGdtaW1lL3NyYy94ZGdtaW1lY2FjaGUuaDogQWRkZWQu
CisgICAgICAgICogeGRnbWltZS9zcmMveGRnbWltZWdsb2IuYzogQWRkZWQuCisgICAgICAgICog
eGRnbWltZS9zcmMveGRnbWltZWdsb2IuaDogQWRkZWQuCisgICAgICAgICogeGRnbWltZS9zcmMv
eGRnbWltZWljb24uYzogQWRkZWQuCisgICAgICAgICogeGRnbWltZS9zcmMveGRnbWltZWljb24u
aDogQWRkZWQuCisgICAgICAgICogeGRnbWltZS9zcmMveGRnbWltZWludC5jOiBBZGRlZC4KKyAg
ICAgICAgKiB4ZGdtaW1lL3NyYy94ZGdtaW1laW50Lmg6IEFkZGVkLgorICAgICAgICAqIHhkZ21p
bWUvc3JjL3hkZ21pbWVtYWdpYy5jOiBBZGRlZC4KKyAgICAgICAgKiB4ZGdtaW1lL3NyYy94ZGdt
aW1lbWFnaWMuaDogQWRkZWQuCisgICAgICAgICogeGRnbWltZS9zcmMveGRnbWltZXBhcmVudC5j
OiBBZGRlZC4KKyAgICAgICAgKiB4ZGdtaW1lL3NyYy94ZGdtaW1lcGFyZW50Lmg6IEFkZGVkLgor
CiAyMDE3LTAyLTA5ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgQnVpbGQgbGlid2VicnRjIG9uIGJvdHMgd2l0aG91dCB1c2luZyBpdCB5ZXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvQ01ha2VMaXN0cy50eHQgYi9T
b3VyY2UvVGhpcmRQYXJ0eS94ZGdtaW1lL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wMzBlYzlhMGY5NwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwyNiBAQAor
c2V0KFhER01JTUVfRElSICIke1RISVJEUEFSVFlfRElSfS94ZGdtaW1lIikKKworc2V0KFhER01J
TUVfSU5DTFVERV9ESVJFQ1RPUklFUworICAgICIke1hER01JTUVfRElSfS9zcmMiCisgICAgIiR7
Q01BS0VfQklOQVJZX0RJUn0iCispCisKK3NldChYREdNSU1FX1NPVVJDRVMKKyAgICAke1hER01J
TUVfRElSfS9zcmMveGRnbWltZWFsaWFzLmMKKyAgICAke1hER01JTUVfRElSfS9zcmMveGRnbWlt
ZS5jCisgICAgJHtYREdNSU1FX0RJUn0vc3JjL3hkZ21pbWVpY29uLmMKKyAgICAke1hER01JTUVf
RElSfS9zcmMveGRnbWltZWludC5jCisgICAgJHtYREdNSU1FX0RJUn0vc3JjL3hkZ21pbWVtYWdp
Yy5jCisgICAgJHtYREdNSU1FX0RJUn0vc3JjL3hkZ21pbWVwYXJlbnQuYworICAgICR7WERHTUlN
RV9ESVJ9L3NyYy94ZGdtaW1lY2FjaGUuYworICAgICR7WERHTUlNRV9ESVJ9L3NyYy94ZGdtaW1l
Z2xvYi5jCispCisKK2luY2x1ZGVfZGlyZWN0b3JpZXMoIiR7WERHTUlNRV9JTkNMVURFX0RJUkVD
VE9SSUVTfSIpCithZGRfZGVmaW5pdGlvbnMoLURYREdfUFJFRklYPV93a194ZGcpCithZGRfbGli
cmFyeSh4ZGdtaW1lIFNUQVRJQyAke1hER01JTUVfU09VUkNFU30pCitXRUJLSVRfU0VUX0VYVFJB
X0NPTVBJTEVSX0ZMQUdTKHhkZ21pbWUpCisKK2lmIChDT01QSUxFUl9JU19HQ0NfT1JfQ0xBTkcp
CisgICAgQUREX1RBUkdFVF9QUk9QRVJUSUVTKHhkZ21pbWUgQ09NUElMRV9GTEFHUyAiLVduby1z
aWduLWNvbXBhcmUgLVduby11bnVzZWQtcGFyYW1ldGVyIikKK2VuZGlmICgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS94ZGdtaW1lL1JFQURNRSBiL1NvdXJjZS9UaGlyZFBhcnR5L3hk
Z21pbWUvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lN2Yz
ZjY4NTlkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvUkVB
RE1FCkBAIC0wLDAgKzEsOCBAQAorVGhpcyBtb2R1bGUgaXMgYSBzaW1wbGUgbW9kdWxlIHRoYXQg
cGFyc2VzIHRoZSBwcm9wb3NlZCBNSU1FIHNwZWMgbGlzdGVkCithdCBodHRwOi8vZnJlZWRlc2t0
b3Aub3JnLy4gIEl0IGlzIGN1cnJlbnRseSB0YXJnZXR0ZWQgYXQgdmVyc2lvbiAwLjEyLgorVGhl
cmUgYXJlIG5vIGZvcm1hbCByZWxlYXNlcyBwbGFubmVkIGZvciB0aGlzIG1vZHVsZSwgYW5kIGl0
IGlzIG5vdAoraW50ZW5kZWQgdG8gYmUgaW5zdGFsbGVkIGF0IHRoaXMgdGltZS4gIFJhdGhlciwg
aXQgaXMgbWVhbnQgdG8gYmUgdXNlZAorYnkgb3RoZXIgbGlicmFyaWVzIG9yIGFwcGxpY2F0aW9u
cyB0byBhZGQgc3VwcG9ydCBmb3IgdGhlIE1JTUUgc3lzdGVtLgorCitJdCBpcyBkdWFsLWxpY2Vu
c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGlj
ZW5zZSwgYW5kIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UsIHZlcnNpb24gMi4wLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9SRUFETUUud2Via2l0IGIvU291cmNlL1Ro
aXJkUGFydHkveGRnbWltZS9SRUFETUUud2Via2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi44YjQ5NGVkOThlNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L3hkZ21pbWUvUkVBRE1FLndlYmtpdApAQCAtMCwwICsxLDE4IEBACitUaGlzIHhkZ21p
bWUgZnJvbQoraHR0cHM6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy94ZGcveGRnbWltZS8KKworeGRn
bWltZSBpcyB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBGcmVlZGVza3RvcC5v
cmcgTUlNRSBzcGVjaWZpY2F0aW9uOgoraHR0cHM6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kv
U3BlY2lmaWNhdGlvbnMvc2hhcmVkLW1pbWUtaW5mby1zcGVjLworCitDdXJyZW50IHZlcnNpb24g
aXMgYmFzZWQgb24gcmV2aXNpb24gZjY5ZmQyNTI4ZWMwZWJkYmU0ODk4M2FkM2VhYmQwMDJkZTdi
YTJiZAorY2xvbmVkIGZyb20gZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcveGRnL3hkZ21p
bWUuCisKK0NoYW5nZXMgZm9yIHRoZSBXZWJLaXQgcHJvamVjdDoKKworIC0gQWRkIHhkZ19taW1l
X2dldF9zaW1wbGVfZ2xvYnMKKyAtIHMvXiNpbmNsdWRlIDxjb25maWcuaD4vI2luY2x1ZGUgImNt
YWtlY29uZmlnLmgiL2cKKworQ2hhbmdlcyBpbmNsdWRlZCBmcm9tIEdMaWIgc291cmNlczoKKwor
IC0gMjU0MmI2ZjYwNDkyZmFkZmIyMWYyYzRhMjk5NzZjMzQ5NGM3ZTZjNSB4ZGdtaW1lOiBIYW5k
bGUgRUlOVFIgaW4gb3BlbigpCisgLSA4M2QzNGY2MzA5MzlhYTEzNTM5ZTAzODk1YmVmODdkYTcz
OGM0MTI3IERvbid0IGZvcmdldCB0byBmcmVlIHJlc291cmNlcyBpbiBhbiBlYXJseSByZXR1cm4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvc3JjL3hkZ21pbWUuYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvc3JjL3hkZ21pbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uYThkNzU0MTMzNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS94ZGdtaW1lL3NyYy94ZGdtaW1lLmMKQEAgLTAsMCArMSw5NDcgQEAKKy8q
IC0qLSBtb2RlOiBDOyBjLWZpbGUtc3R5bGU6ICJnbnUiIC0qLSAqLworLyogeGRnbWltZS5jOiBY
REcgTWltZSBTcGVjIG1pbWUgcmVzb2x2ZXIuICBCYXNlZCBvbiB2ZXJzaW9uIDAuMTEgb2YgdGhl
IHNwZWMuCisgKgorICogTW9yZSBpbmZvIGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vd3d3LmZyZWVk
ZXNrdG9wLm9yZy9zdGFuZGFyZHMvCisgKiAKKyAqIENvcHlyaWdodCAoQykgMjAwMywyMDA0ICBS
ZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsMjAwNCAgSm9uYXRoYW4gQmxhbmRm
b3JkIDxqcmJAYWx1bS5taXQuZWR1PgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBY2FkZW1p
YyBGcmVlIExpY2Vuc2UgdmVyc2lvbiAyLjAKKyAqIE9yIHVuZGVyIHRoZSBmb2xsb3dpbmcgdGVy
bXM6CisgKiAKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4JIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVk
ZSAiY21ha2Vjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAieGRnbWltZS5oIgorI2luY2x1
ZGUgInhkZ21pbWVpbnQuaCIKKyNpbmNsdWRlICJ4ZGdtaW1lZ2xvYi5oIgorI2luY2x1ZGUgInhk
Z21pbWVtYWdpYy5oIgorI2luY2x1ZGUgInhkZ21pbWVhbGlhcy5oIgorI2luY2x1ZGUgInhkZ21p
bWVpY29uLmgiCisjaW5jbHVkZSAieGRnbWltZXBhcmVudC5oIgorI2luY2x1ZGUgInhkZ21pbWVj
YWNoZS5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVk
ZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdGlt
ZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCit0eXBlZGVm
IHN0cnVjdCBYZGdEaXJUaW1lTGlzdCBYZGdEaXJUaW1lTGlzdDsKK3R5cGVkZWYgc3RydWN0IFhk
Z0NhbGxiYWNrTGlzdCBYZGdDYWxsYmFja0xpc3Q7CisKK3N0YXRpYyBpbnQgbmVlZF9yZXJlYWQg
PSBUUlVFOworc3RhdGljIHRpbWVfdCBsYXN0X3N0YXRfdGltZSA9IDA7CisKK3N0YXRpYyBYZGdH
bG9iSGFzaCAqZ2xvYmFsX2hhc2ggPSBOVUxMOworc3RhdGljIFhkZ01pbWVNYWdpYyAqZ2xvYmFs
X21hZ2ljID0gTlVMTDsKK3N0YXRpYyBYZGdBbGlhc0xpc3QgKmFsaWFzX2xpc3QgPSBOVUxMOwor
c3RhdGljIFhkZ1BhcmVudExpc3QgKnBhcmVudF9saXN0ID0gTlVMTDsKK3N0YXRpYyBYZGdEaXJU
aW1lTGlzdCAqZGlyX3RpbWVfbGlzdCA9IE5VTEw7CitzdGF0aWMgWGRnQ2FsbGJhY2tMaXN0ICpj
YWxsYmFja19saXN0ID0gTlVMTDsKK3N0YXRpYyBYZGdJY29uTGlzdCAqaWNvbl9saXN0ID0gTlVM
TDsKK3N0YXRpYyBYZGdJY29uTGlzdCAqZ2VuZXJpY19pY29uX2xpc3QgPSBOVUxMOworCitYZGdN
aW1lQ2FjaGUgKipfY2FjaGVzID0gTlVMTDsKK3N0YXRpYyBpbnQgbl9jYWNoZXMgPSAwOworCitj
b25zdCBjaGFyIHhkZ19taW1lX3R5cGVfdW5rbm93bltdID0gImFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbSI7Citjb25zdCBjaGFyIHhkZ19taW1lX3R5cGVfZW1wdHlbXSA9ICJhcHBsaWNhdGlvbi94
LXplcm9zaXplIjsKK2NvbnN0IGNoYXIgeGRnX21pbWVfdHlwZV90ZXh0cGxhaW5bXSA9ICJ0ZXh0
L3BsYWluIjsKKworCitlbnVtCit7CisgIFhER19DSEVDS0VEX1VOQ0hFQ0tFRCwKKyAgWERHX0NI
RUNLRURfVkFMSUQsCisgIFhER19DSEVDS0VEX0lOVkFMSUQKK307CisKK3N0cnVjdCBYZGdEaXJU
aW1lTGlzdAoreworICB0aW1lX3QgbXRpbWU7CisgIGNoYXIgKmRpcmVjdG9yeV9uYW1lOworICBp
bnQgY2hlY2tlZDsKKyAgWGRnRGlyVGltZUxpc3QgKm5leHQ7Cit9OworCitzdHJ1Y3QgWGRnQ2Fs
bGJhY2tMaXN0Cit7CisgIFhkZ0NhbGxiYWNrTGlzdCAqbmV4dDsKKyAgWGRnQ2FsbGJhY2tMaXN0
ICpwcmV2OworICBpbnQgICAgICAgICAgICAgIGNhbGxiYWNrX2lkOworICBYZGdNaW1lQ2FsbGJh
Y2sgIGNhbGxiYWNrOworICB2b2lkICAgICAgICAgICAgKmRhdGE7CisgIFhkZ01pbWVEZXN0cm95
ICAgZGVzdHJveTsKK307CisKKy8qIEZ1bmN0aW9uIGNhbGxlZCBieSB4ZGdfcnVuX2NvbW1hbmRf
b25fZGlycy4gIElmIGl0IHJldHVybnMgVFJVRSwgZnVydGhlcgorICogZGlyZWN0b3JpZXMgYXJl
bid0IGxvb2tlZCBhdCAqLwordHlwZWRlZiBpbnQgKCpYZGdEaXJlY3RvcnlGdW5jKSAoY29uc3Qg
Y2hhciAqZGlyZWN0b3J5LAorCQkJCSB2b2lkICAgICAgICp1c2VyX2RhdGEpOworCitzdGF0aWMg
dm9pZAoreGRnX2Rpcl90aW1lX2xpc3RfYWRkIChjaGFyICAgKmZpbGVfbmFtZSwgCisJCSAgICAg
ICB0aW1lX3QgIG10aW1lKQoreworICBYZGdEaXJUaW1lTGlzdCAqbGlzdDsKKworICBmb3IgKGxp
c3QgPSBkaXJfdGltZV9saXN0OyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkgCisgICAgeworICAg
ICAgaWYgKHN0cmNtcCAobGlzdC0+ZGlyZWN0b3J5X25hbWUsIGZpbGVfbmFtZSkgPT0gMCkKKyAg
ICAgICAgeworICAgICAgICAgIGZyZWUgKGZpbGVfbmFtZSk7CisgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQorICAKKyAgbGlzdCA9IGNhbGxvYyAoMSwgc2l6ZW9mIChYZGdEaXJU
aW1lTGlzdCkpOworICBsaXN0LT5jaGVja2VkID0gWERHX0NIRUNLRURfVU5DSEVDS0VEOworICBs
aXN0LT5kaXJlY3RvcnlfbmFtZSA9IGZpbGVfbmFtZTsKKyAgbGlzdC0+bXRpbWUgPSBtdGltZTsK
KyAgbGlzdC0+bmV4dCA9IGRpcl90aW1lX2xpc3Q7CisgIGRpcl90aW1lX2xpc3QgPSBsaXN0Owor
fQorIAorc3RhdGljIHZvaWQKK3hkZ19kaXJfdGltZV9saXN0X2ZyZWUgKFhkZ0RpclRpbWVMaXN0
ICpsaXN0KQoreworICBYZGdEaXJUaW1lTGlzdCAqbmV4dDsKKworICB3aGlsZSAobGlzdCkKKyAg
ICB7CisgICAgICBuZXh0ID0gbGlzdC0+bmV4dDsKKyAgICAgIGZyZWUgKGxpc3QtPmRpcmVjdG9y
eV9uYW1lKTsKKyAgICAgIGZyZWUgKGxpc3QpOworICAgICAgbGlzdCA9IG5leHQ7CisgICAgfQor
fQorCitzdGF0aWMgaW50Cit4ZGdfbWltZV9pbml0X2Zyb21fZGlyZWN0b3J5IChjb25zdCBjaGFy
ICpkaXJlY3RvcnkpCit7CisgIGNoYXIgKmZpbGVfbmFtZTsKKyAgc3RydWN0IHN0YXQgc3Q7CisK
KyAgYXNzZXJ0IChkaXJlY3RvcnkgIT0gTlVMTCk7CisKKyAgZmlsZV9uYW1lID0gbWFsbG9jIChz
dHJsZW4gKGRpcmVjdG9yeSkgKyBzdHJsZW4gKCIvbWltZS9taW1lLmNhY2hlIikgKyAxKTsKKyAg
c3RyY3B5IChmaWxlX25hbWUsIGRpcmVjdG9yeSk7IHN0cmNhdCAoZmlsZV9uYW1lLCAiL21pbWUv
bWltZS5jYWNoZSIpOworICBpZiAoc3RhdCAoZmlsZV9uYW1lLCAmc3QpID09IDApCisgICAgewor
ICAgICAgWGRnTWltZUNhY2hlICpjYWNoZSA9IF94ZGdfbWltZV9jYWNoZV9uZXdfZnJvbV9maWxl
IChmaWxlX25hbWUpOworCisgICAgICBpZiAoY2FjaGUgIT0gTlVMTCkKKwl7CisJICB4ZGdfZGly
X3RpbWVfbGlzdF9hZGQgKGZpbGVfbmFtZSwgc3Quc3RfbXRpbWUpOworCisJICBfY2FjaGVzID0g
cmVhbGxvYyAoX2NhY2hlcywgc2l6ZW9mIChYZGdNaW1lQ2FjaGUgKikgKiAobl9jYWNoZXMgKyAy
KSk7CisJICBfY2FjaGVzW25fY2FjaGVzXSA9IGNhY2hlOworICAgICAgICAgIF9jYWNoZXNbbl9j
YWNoZXMgKyAxXSA9IE5VTEw7CisJICBuX2NhY2hlcysrOworCisJICByZXR1cm4gRkFMU0U7CisJ
fQorICAgIH0KKyAgZnJlZSAoZmlsZV9uYW1lKTsKKworICBmaWxlX25hbWUgPSBtYWxsb2MgKHN0
cmxlbiAoZGlyZWN0b3J5KSArIHN0cmxlbiAoIi9taW1lL2dsb2JzMiIpICsgMSk7CisgIHN0cmNw
eSAoZmlsZV9uYW1lLCBkaXJlY3RvcnkpOyBzdHJjYXQgKGZpbGVfbmFtZSwgIi9taW1lL2dsb2Jz
MiIpOworICBpZiAoc3RhdCAoZmlsZV9uYW1lLCAmc3QpID09IDApCisgICAgeworICAgICAgX3hk
Z19taW1lX2dsb2JfcmVhZF9mcm9tX2ZpbGUgKGdsb2JhbF9oYXNoLCBmaWxlX25hbWUsIFRSVUUp
OworICAgICAgeGRnX2Rpcl90aW1lX2xpc3RfYWRkIChmaWxlX25hbWUsIHN0LnN0X210aW1lKTsK
KyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBmcmVlIChmaWxlX25hbWUpOworICAgICAgZmls
ZV9uYW1lID0gbWFsbG9jIChzdHJsZW4gKGRpcmVjdG9yeSkgKyBzdHJsZW4gKCIvbWltZS9nbG9i
cyIpICsgMSk7CisgICAgICBzdHJjcHkgKGZpbGVfbmFtZSwgZGlyZWN0b3J5KTsgc3RyY2F0IChm
aWxlX25hbWUsICIvbWltZS9nbG9icyIpOworICAgICAgaWYgKHN0YXQgKGZpbGVfbmFtZSwgJnN0
KSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgX3hkZ19taW1lX2dsb2JfcmVhZF9mcm9tX2Zp
bGUgKGdsb2JhbF9oYXNoLCBmaWxlX25hbWUsIEZBTFNFKTsKKyAgICAgICAgICB4ZGdfZGlyX3Rp
bWVfbGlzdF9hZGQgKGZpbGVfbmFtZSwgc3Quc3RfbXRpbWUpOworICAgICAgICB9CisgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICBmcmVlIChmaWxlX25hbWUpOworICAgICAgICB9Cisg
ICAgfQorCisgIGZpbGVfbmFtZSA9IG1hbGxvYyAoc3RybGVuIChkaXJlY3RvcnkpICsgc3RybGVu
ICgiL21pbWUvbWFnaWMiKSArIDEpOworICBzdHJjcHkgKGZpbGVfbmFtZSwgZGlyZWN0b3J5KTsg
c3RyY2F0IChmaWxlX25hbWUsICIvbWltZS9tYWdpYyIpOworICBpZiAoc3RhdCAoZmlsZV9uYW1l
LCAmc3QpID09IDApCisgICAgeworICAgICAgX3hkZ19taW1lX21hZ2ljX3JlYWRfZnJvbV9maWxl
IChnbG9iYWxfbWFnaWMsIGZpbGVfbmFtZSk7CisgICAgICB4ZGdfZGlyX3RpbWVfbGlzdF9hZGQg
KGZpbGVfbmFtZSwgc3Quc3RfbXRpbWUpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGZy
ZWUgKGZpbGVfbmFtZSk7CisgICAgfQorCisgIGZpbGVfbmFtZSA9IG1hbGxvYyAoc3RybGVuIChk
aXJlY3RvcnkpICsgc3RybGVuICgiL21pbWUvYWxpYXNlcyIpICsgMSk7CisgIHN0cmNweSAoZmls
ZV9uYW1lLCBkaXJlY3RvcnkpOyBzdHJjYXQgKGZpbGVfbmFtZSwgIi9taW1lL2FsaWFzZXMiKTsK
KyAgX3hkZ19taW1lX2FsaWFzX3JlYWRfZnJvbV9maWxlIChhbGlhc19saXN0LCBmaWxlX25hbWUp
OworICBmcmVlIChmaWxlX25hbWUpOworCisgIGZpbGVfbmFtZSA9IG1hbGxvYyAoc3RybGVuIChk
aXJlY3RvcnkpICsgc3RybGVuICgiL21pbWUvc3ViY2xhc3NlcyIpICsgMSk7CisgIHN0cmNweSAo
ZmlsZV9uYW1lLCBkaXJlY3RvcnkpOyBzdHJjYXQgKGZpbGVfbmFtZSwgIi9taW1lL3N1YmNsYXNz
ZXMiKTsKKyAgX3hkZ19taW1lX3BhcmVudF9yZWFkX2Zyb21fZmlsZSAocGFyZW50X2xpc3QsIGZp
bGVfbmFtZSk7CisgIGZyZWUgKGZpbGVfbmFtZSk7CisKKyAgZmlsZV9uYW1lID0gbWFsbG9jIChz
dHJsZW4gKGRpcmVjdG9yeSkgKyBzdHJsZW4gKCIvbWltZS9pY29ucyIpICsgMSk7CisgIHN0cmNw
eSAoZmlsZV9uYW1lLCBkaXJlY3RvcnkpOyBzdHJjYXQgKGZpbGVfbmFtZSwgIi9taW1lL2ljb25z
Iik7CisgIF94ZGdfbWltZV9pY29uX3JlYWRfZnJvbV9maWxlIChpY29uX2xpc3QsIGZpbGVfbmFt
ZSk7CisgIGZyZWUgKGZpbGVfbmFtZSk7CisKKyAgZmlsZV9uYW1lID0gbWFsbG9jIChzdHJsZW4g
KGRpcmVjdG9yeSkgKyBzdHJsZW4gKCIvbWltZS9nZW5lcmljLWljb25zIikgKyAxKTsKKyAgc3Ry
Y3B5IChmaWxlX25hbWUsIGRpcmVjdG9yeSk7IHN0cmNhdCAoZmlsZV9uYW1lLCAiL21pbWUvZ2Vu
ZXJpYy1pY29ucyIpOworICBfeGRnX21pbWVfaWNvbl9yZWFkX2Zyb21fZmlsZSAoZ2VuZXJpY19p
Y29uX2xpc3QsIGZpbGVfbmFtZSk7CisgIGZyZWUgKGZpbGVfbmFtZSk7CisKKyAgcmV0dXJuIEZB
TFNFOyAvKiBLZWVwIHByb2Nlc3NpbmcgKi8KK30KKworLyogUnVucyBhIGNvbW1hbmQgb24gYWxs
IHRoZSBkaXJlY3RvcmllcyBpbiB0aGUgc2VhcmNoIHBhdGggKi8KK3N0YXRpYyB2b2lkCit4ZGdf
cnVuX2NvbW1hbmRfb25fZGlycyAoWGRnRGlyZWN0b3J5RnVuYyAgZnVuYywKKwkJCSB2b2lkICAg
ICAgICAgICAgICp1c2VyX2RhdGEpCit7CisgIGNvbnN0IGNoYXIgKnhkZ19kYXRhX2hvbWU7Cisg
IGNvbnN0IGNoYXIgKnhkZ19kYXRhX2RpcnM7CisgIGNvbnN0IGNoYXIgKnB0cjsKKworICB4ZGdf
ZGF0YV9ob21lID0gZ2V0ZW52ICgiWERHX0RBVEFfSE9NRSIpOworICBpZiAoeGRnX2RhdGFfaG9t
ZSkKKyAgICB7CisgICAgICBpZiAoKGZ1bmMpICh4ZGdfZGF0YV9ob21lLCB1c2VyX2RhdGEpKQor
CXJldHVybjsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpob21lOwor
CisgICAgICBob21lID0gZ2V0ZW52ICgiSE9NRSIpOworICAgICAgaWYgKGhvbWUgIT0gTlVMTCkK
Kwl7CisJICBjaGFyICpndWVzc2VkX3hkZ19ob21lOworCSAgaW50IHN0b3BfcHJvY2Vzc2luZzsK
KworCSAgZ3Vlc3NlZF94ZGdfaG9tZSA9IG1hbGxvYyAoc3RybGVuIChob21lKSArIHN0cmxlbiAo
Ii8ubG9jYWwvc2hhcmUvIikgKyAxKTsKKwkgIHN0cmNweSAoZ3Vlc3NlZF94ZGdfaG9tZSwgaG9t
ZSk7CisJICBzdHJjYXQgKGd1ZXNzZWRfeGRnX2hvbWUsICIvLmxvY2FsL3NoYXJlLyIpOworCSAg
c3RvcF9wcm9jZXNzaW5nID0gKGZ1bmMpIChndWVzc2VkX3hkZ19ob21lLCB1c2VyX2RhdGEpOwor
CSAgZnJlZSAoZ3Vlc3NlZF94ZGdfaG9tZSk7CisKKwkgIGlmIChzdG9wX3Byb2Nlc3NpbmcpCisJ
ICAgIHJldHVybjsKKwl9CisgICAgfQorCisgIHhkZ19kYXRhX2RpcnMgPSBnZXRlbnYgKCJYREdf
REFUQV9ESVJTIik7CisgIGlmICh4ZGdfZGF0YV9kaXJzID09IE5VTEwpCisgICAgeGRnX2RhdGFf
ZGlycyA9ICIvdXNyL2xvY2FsL3NoYXJlLzovdXNyL3NoYXJlLyI7CisKKyAgcHRyID0geGRnX2Rh
dGFfZGlyczsKKworICB3aGlsZSAoKnB0ciAhPSAnXDAwMCcpCisgICAgeworICAgICAgY29uc3Qg
Y2hhciAqZW5kX3B0cjsKKyAgICAgIGNoYXIgKmRpcjsKKyAgICAgIGludCBsZW47CisgICAgICBp
bnQgc3RvcF9wcm9jZXNzaW5nOworCisgICAgICBlbmRfcHRyID0gcHRyOworICAgICAgd2hpbGUg
KCplbmRfcHRyICE9ICc6JyAmJiAqZW5kX3B0ciAhPSAnXDAwMCcpCisJZW5kX3B0ciArKzsKKwor
ICAgICAgaWYgKGVuZF9wdHIgPT0gcHRyKQorCXsKKwkgIHB0cisrOworCSAgY29udGludWU7CisJ
fQorCisgICAgICBpZiAoKmVuZF9wdHIgPT0gJzonKQorCWxlbiA9IGVuZF9wdHIgLSBwdHI7Cisg
ICAgICBlbHNlCisJbGVuID0gZW5kX3B0ciAtIHB0ciArIDE7CisgICAgICBkaXIgPSBtYWxsb2Mg
KGxlbiArIDEpOworICAgICAgc3RybmNweSAoZGlyLCBwdHIsIGxlbik7CisgICAgICBkaXJbbGVu
XSA9ICdcMCc7CisgICAgICBzdG9wX3Byb2Nlc3NpbmcgPSAoZnVuYykgKGRpciwgdXNlcl9kYXRh
KTsKKyAgICAgIGZyZWUgKGRpcik7CisKKyAgICAgIGlmIChzdG9wX3Byb2Nlc3NpbmcpCisJcmV0
dXJuOworCisgICAgICBwdHIgPSBlbmRfcHRyOworICAgIH0KK30KKworLyogQ2hlY2tzIGZpbGVf
cGF0aCB0byBtYWtlIHN1cmUgaXQgaGFzIHRoZSBzYW1lIG10aW1lIGFzIGxhc3QgdGltZSBpdCB3
YXMKKyAqIGNoZWNrZWQuICBJZiBpdCBoYXMgYSBkaWZmZXJlbnQgbXRpbWUsIG9yIGlmIHRoZSBm
aWxlIGRvZXNuJ3QgZXhpc3QsIGl0CisgKiByZXR1cm5zIEZBTFNFLgorICoKKyAqIEZJWE1FOiBU
aGlzIGRvZXNuJ3QgcHJvdGVjdCBhZ2FpbnN0IHBlcm1pc3Npb24gY2hhbmdlcy4KKyAqLworc3Rh
dGljIGludAoreGRnX2NoZWNrX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGVfcGF0aCwKKyAgICAgICAg
ICAgICAgICBpbnQgICAgICAgICpleGlzdHMpCit7CisgIHN0cnVjdCBzdGF0IHN0OworCisgIC8q
IElmIHRoZSBmaWxlIGV4aXN0cyAqLworICBpZiAoc3RhdCAoZmlsZV9wYXRoLCAmc3QpID09IDAp
CisgICAgeworICAgICAgWGRnRGlyVGltZUxpc3QgKmxpc3Q7CisKKyAgICAgIGlmIChleGlzdHMp
CisgICAgICAgICpleGlzdHMgPSBUUlVFOworCisgICAgICBmb3IgKGxpc3QgPSBkaXJfdGltZV9s
aXN0OyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkKKwl7CisJICBpZiAoISBzdHJjbXAgKGxpc3Qt
PmRpcmVjdG9yeV9uYW1lLCBmaWxlX3BhdGgpKQorCSAgICB7CisJICAgICAgaWYgKHN0LnN0X210
aW1lID09IGxpc3QtPm10aW1lKQorCQlsaXN0LT5jaGVja2VkID0gWERHX0NIRUNLRURfVkFMSUQ7
CisJICAgICAgZWxzZSAKKwkJbGlzdC0+Y2hlY2tlZCA9IFhER19DSEVDS0VEX0lOVkFMSUQ7CisK
KwkgICAgICByZXR1cm4gKGxpc3QtPmNoZWNrZWQgIT0gWERHX0NIRUNLRURfVkFMSUQpOworCSAg
ICB9CisJfQorICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgIGlmIChleGlzdHMpCisgICAg
KmV4aXN0cyA9IEZBTFNFOworCisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGludAoreGRn
X2NoZWNrX2RpciAoY29uc3QgY2hhciAqZGlyZWN0b3J5LAorCSAgICAgICBpbnQgICAgICAgICpp
bnZhbGlkX2Rpcl9saXN0KQoreworICBpbnQgaW52YWxpZCwgZXhpc3RzOworICBjaGFyICpmaWxl
X25hbWU7CisKKyAgYXNzZXJ0IChkaXJlY3RvcnkgIT0gTlVMTCk7CisKKyAgLyogQ2hlY2sgdGhl
IG1pbWUuY2FjaGUgZmlsZSAqLworICBmaWxlX25hbWUgPSBtYWxsb2MgKHN0cmxlbiAoZGlyZWN0
b3J5KSArIHN0cmxlbiAoIi9taW1lL21pbWUuY2FjaGUiKSArIDEpOworICBzdHJjcHkgKGZpbGVf
bmFtZSwgZGlyZWN0b3J5KTsgc3RyY2F0IChmaWxlX25hbWUsICIvbWltZS9taW1lLmNhY2hlIik7
CisgIGludmFsaWQgPSB4ZGdfY2hlY2tfZmlsZSAoZmlsZV9uYW1lLCAmZXhpc3RzKTsKKyAgZnJl
ZSAoZmlsZV9uYW1lKTsKKyAgaWYgKGludmFsaWQpCisgICAgeworICAgICAgKmludmFsaWRfZGly
X2xpc3QgPSBUUlVFOworICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICBlbHNlIGlmIChleGlz
dHMpCisgICAgeworICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAvKiBDaGVjayB0aGUg
Z2xvYnMgZmlsZSAqLworICBmaWxlX25hbWUgPSBtYWxsb2MgKHN0cmxlbiAoZGlyZWN0b3J5KSAr
IHN0cmxlbiAoIi9taW1lL2dsb2JzIikgKyAxKTsKKyAgc3RyY3B5IChmaWxlX25hbWUsIGRpcmVj
dG9yeSk7IHN0cmNhdCAoZmlsZV9uYW1lLCAiL21pbWUvZ2xvYnMiKTsKKyAgaW52YWxpZCA9IHhk
Z19jaGVja19maWxlIChmaWxlX25hbWUsIE5VTEwpOworICBmcmVlIChmaWxlX25hbWUpOworICBp
ZiAoaW52YWxpZCkKKyAgICB7CisgICAgICAqaW52YWxpZF9kaXJfbGlzdCA9IFRSVUU7CisgICAg
ICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgLyogQ2hlY2sgdGhlIG1hZ2ljIGZpbGUgKi8KKyAg
ZmlsZV9uYW1lID0gbWFsbG9jIChzdHJsZW4gKGRpcmVjdG9yeSkgKyBzdHJsZW4gKCIvbWltZS9t
YWdpYyIpICsgMSk7CisgIHN0cmNweSAoZmlsZV9uYW1lLCBkaXJlY3RvcnkpOyBzdHJjYXQgKGZp
bGVfbmFtZSwgIi9taW1lL21hZ2ljIik7CisgIGludmFsaWQgPSB4ZGdfY2hlY2tfZmlsZSAoZmls
ZV9uYW1lLCBOVUxMKTsKKyAgZnJlZSAoZmlsZV9uYW1lKTsKKyAgaWYgKGludmFsaWQpCisgICAg
eworICAgICAgKmludmFsaWRfZGlyX2xpc3QgPSBUUlVFOworICAgICAgcmV0dXJuIFRSVUU7Cisg
ICAgfQorCisgIHJldHVybiBGQUxTRTsgLyogS2VlcCBwcm9jZXNzaW5nICovCit9CisKKy8qIFdh
bGtzIHRocm91Z2ggYWxsIHRoZSBtaW1lIGZpbGVzIHN0YXQoKWluZyB0aGVtIHRvIHNlZSBpZiB0
aGV5J3ZlIGNoYW5nZWQuCisgKiBSZXR1cm5zIFRSVUUgaWYgdGhleSBoYXZlLiAqLworc3RhdGlj
IGludAoreGRnX2NoZWNrX2RpcnMgKHZvaWQpCit7CisgIFhkZ0RpclRpbWVMaXN0ICpsaXN0Owor
ICBpbnQgaW52YWxpZF9kaXJfbGlzdCA9IEZBTFNFOworCisgIGZvciAobGlzdCA9IGRpcl90aW1l
X2xpc3Q7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KQorICAgIGxpc3QtPmNoZWNrZWQgPSBYREdf
Q0hFQ0tFRF9VTkNIRUNLRUQ7CisKKyAgeGRnX3J1bl9jb21tYW5kX29uX2RpcnMgKChYZGdEaXJl
Y3RvcnlGdW5jKSB4ZGdfY2hlY2tfZGlyLAorCQkJICAgJmludmFsaWRfZGlyX2xpc3QpOworCisg
IGlmIChpbnZhbGlkX2Rpcl9saXN0KQorICAgIHJldHVybiBUUlVFOworCisgIGZvciAobGlzdCA9
IGRpcl90aW1lX2xpc3Q7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KQorICAgIHsKKyAgICAgIGlm
IChsaXN0LT5jaGVja2VkICE9IFhER19DSEVDS0VEX1ZBTElEKQorCXJldHVybiBUUlVFOworICAg
IH0KKworICByZXR1cm4gRkFMU0U7Cit9CisKKy8qIFdlIHdhbnQgdG8gYXZvaWQgc3RhdCgpaW5n
IG9uIGV2ZXJ5IHNpbmdsZSBtaW1lIGNhbGwsIHNvIHdlIG9ubHkgbG9vayBmb3IKKyAqIG5ld2Vy
IGZpbGVzIGV2ZXJ5IDUgc2Vjb25kcy4gIFRoaXMgd2lsbCByZXR1cm4gVFJVRSBpZiB3ZSBuZWVk
IHRvIHJlcmVhZCB0aGUKKyAqIG1pbWUgZGF0YSBmcm9tIGRpc2suCisgKi8KK3N0YXRpYyBpbnQK
K3hkZ19jaGVja190aW1lX2FuZF9kaXJzICh2b2lkKQoreworICBzdHJ1Y3QgdGltZXZhbCB0djsK
KyAgdGltZV90IGN1cnJlbnRfdGltZTsKKyAgaW50IHJldHZhbCA9IEZBTFNFOworCisgIGdldHRp
bWVvZmRheSAoJnR2LCBOVUxMKTsKKyAgY3VycmVudF90aW1lID0gdHYudHZfc2VjOworCisgIGlm
IChjdXJyZW50X3RpbWUgPj0gbGFzdF9zdGF0X3RpbWUgKyA1KQorICAgIHsKKyAgICAgIHJldHZh
bCA9IHhkZ19jaGVja19kaXJzICgpOworICAgICAgbGFzdF9zdGF0X3RpbWUgPSBjdXJyZW50X3Rp
bWU7CisgICAgfQorCisgIHJldHVybiByZXR2YWw7Cit9CisKKy8qIENhbGxlZCBpbiBldmVyeSBw
dWJsaWMgZnVuY3Rpb24uICBJdCByZWxvYWRzIHRoZSBoYXNoIGZ1bmN0aW9uIGlmIG5lZWQgYmUu
CisgKi8KK3N0YXRpYyB2b2lkCit4ZGdfbWltZV9pbml0ICh2b2lkKQoreworICBpZiAoeGRnX2No
ZWNrX3RpbWVfYW5kX2RpcnMgKCkpCisgICAgeworICAgICAgeGRnX21pbWVfc2h1dGRvd24gKCk7
CisgICAgfQorCisgIGlmIChuZWVkX3JlcmVhZCkKKyAgICB7CisgICAgICBnbG9iYWxfaGFzaCA9
IF94ZGdfZ2xvYl9oYXNoX25ldyAoKTsKKyAgICAgIGdsb2JhbF9tYWdpYyA9IF94ZGdfbWltZV9t
YWdpY19uZXcgKCk7CisgICAgICBhbGlhc19saXN0ID0gX3hkZ19taW1lX2FsaWFzX2xpc3RfbmV3
ICgpOworICAgICAgcGFyZW50X2xpc3QgPSBfeGRnX21pbWVfcGFyZW50X2xpc3RfbmV3ICgpOwor
ICAgICAgaWNvbl9saXN0ID0gX3hkZ19taW1lX2ljb25fbGlzdF9uZXcgKCk7CisgICAgICBnZW5l
cmljX2ljb25fbGlzdCA9IF94ZGdfbWltZV9pY29uX2xpc3RfbmV3ICgpOworCisgICAgICB4ZGdf
cnVuX2NvbW1hbmRfb25fZGlycyAoKFhkZ0RpcmVjdG9yeUZ1bmMpIHhkZ19taW1lX2luaXRfZnJv
bV9kaXJlY3RvcnksCisJCQkgICAgICAgTlVMTCk7CisKKyAgICAgIG5lZWRfcmVyZWFkID0gRkFM
U0U7CisgICAgfQorfQorCitjb25zdCBjaGFyICoKK3hkZ19taW1lX2dldF9taW1lX3R5cGVfZm9y
X2RhdGEgKGNvbnN0IHZvaWQgKmRhdGEsCisJCQkJIHNpemVfdCAgICAgIGxlbiwKKwkJCQkgaW50
ICAgICAgICAqcmVzdWx0X3ByaW8pCit7CisgIGNvbnN0IGNoYXIgKm1pbWVfdHlwZTsKKworICBp
ZiAobGVuID09IDApCisgICAgeworICAgICAgKnJlc3VsdF9wcmlvID0gMTAwOworICAgICAgcmV0
dXJuIFhER19NSU1FX1RZUEVfRU1QVFk7CisgICAgfQorCisgIHhkZ19taW1lX2luaXQgKCk7CisK
KyAgaWYgKF9jYWNoZXMpCisgICAgbWltZV90eXBlID0gX3hkZ19taW1lX2NhY2hlX2dldF9taW1l
X3R5cGVfZm9yX2RhdGEgKGRhdGEsIGxlbiwgcmVzdWx0X3ByaW8pOworICBlbHNlCisgICAgbWlt
ZV90eXBlID0gX3hkZ19taW1lX21hZ2ljX2xvb2t1cF9kYXRhIChnbG9iYWxfbWFnaWMsIGRhdGEs
IGxlbiwgcmVzdWx0X3ByaW8sIE5VTEwsIDApOworCisgIGlmIChtaW1lX3R5cGUpCisgICAgcmV0
dXJuIG1pbWVfdHlwZTsKKworICByZXR1cm4gX3hkZ19iaW5hcnlfb3JfdGV4dF9mYWxsYmFjayhk
YXRhLCBsZW4pOworfQorCitjb25zdCBjaGFyICoKK3hkZ19taW1lX2dldF9taW1lX3R5cGVfZm9y
X2ZpbGUgKGNvbnN0IGNoYXIgICpmaWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3Qgc3RhdCAqc3RhdGJ1ZikKK3sKKyAgY29uc3QgY2hhciAqbWltZV90eXBl
OworICAvKiBjdXJyZW50bHksIG9ubHkgYSBmZXcgZ2xvYnMgb2NjdXIgdHdpY2UsIGFuZCBub25l
CisgICAqIG1vcmUgb2Z0ZW4sIHNvIDUgc2VlbXMgcGxlbnR5LgorICAgKi8KKyAgY29uc3QgY2hh
ciAqbWltZV90eXBlc1s1XTsKKyAgRklMRSAqZmlsZTsKKyAgdW5zaWduZWQgY2hhciAqZGF0YTsK
KyAgaW50IG1heF9leHRlbnQ7CisgIGludCBieXRlc19yZWFkOworICBzdHJ1Y3Qgc3RhdCBidWY7
CisgIGNvbnN0IGNoYXIgKmJhc2VfbmFtZTsKKyAgaW50IG47CisKKyAgaWYgKGZpbGVfbmFtZSA9
PSBOVUxMKQorICAgIHJldHVybiBOVUxMOworICBpZiAoISBfeGRnX3V0ZjhfdmFsaWRhdGUgKGZp
bGVfbmFtZSkpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgeGRnX21pbWVfaW5pdCAoKTsKKworICBp
ZiAoX2NhY2hlcykKKyAgICByZXR1cm4gX3hkZ19taW1lX2NhY2hlX2dldF9taW1lX3R5cGVfZm9y
X2ZpbGUgKGZpbGVfbmFtZSwgc3RhdGJ1Zik7CisKKyAgYmFzZV9uYW1lID0gX3hkZ19nZXRfYmFz
ZV9uYW1lIChmaWxlX25hbWUpOworICBuID0gX3hkZ19nbG9iX2hhc2hfbG9va3VwX2ZpbGVfbmFt
ZSAoZ2xvYmFsX2hhc2gsIGJhc2VfbmFtZSwgbWltZV90eXBlcywgNSk7CisKKyAgaWYgKG4gPT0g
MSkKKyAgICByZXR1cm4gbWltZV90eXBlc1swXTsKKworICBpZiAoIXN0YXRidWYpCisgICAgewor
ICAgICAgaWYgKHN0YXQgKGZpbGVfbmFtZSwgJmJ1ZikgIT0gMCkKKwlyZXR1cm4gWERHX01JTUVf
VFlQRV9VTktOT1dOOworCisgICAgICBzdGF0YnVmID0gJmJ1ZjsKKyAgICB9CisKKyAgaWYgKCFT
X0lTUkVHIChzdGF0YnVmLT5zdF9tb2RlKSkKKyAgICByZXR1cm4gWERHX01JTUVfVFlQRV9VTktO
T1dOOworCisgIC8qIEZJWE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IG1heF9leHRlbnQgaXNu
J3QgdG90YWxseSBicm9rZW4uICBUaGlzIGNvdWxkCisgICAqIGJlIGxhcmdlIGFuZCBuZWVkIGdl
dHRpbmcgZnJvbSBhIHN0cmVhbSBpbnN0ZWFkIG9mIGp1c3QgcmVhZGluZyBpdCBhbGwKKyAgICog
aW4uICovCisgIG1heF9leHRlbnQgPSBfeGRnX21pbWVfbWFnaWNfZ2V0X2J1ZmZlcl9leHRlbnRz
IChnbG9iYWxfbWFnaWMpOworICBkYXRhID0gbWFsbG9jIChtYXhfZXh0ZW50KTsKKyAgaWYgKGRh
dGEgPT0gTlVMTCkKKyAgICByZXR1cm4gWERHX01JTUVfVFlQRV9VTktOT1dOOworICAgICAgICAK
KyAgZmlsZSA9IGZvcGVuIChmaWxlX25hbWUsICJyIik7CisgIGlmIChmaWxlID09IE5VTEwpCisg
ICAgeworICAgICAgZnJlZSAoZGF0YSk7CisgICAgICByZXR1cm4gWERHX01JTUVfVFlQRV9VTktO
T1dOOworICAgIH0KKworICBieXRlc19yZWFkID0gZnJlYWQgKGRhdGEsIDEsIG1heF9leHRlbnQs
IGZpbGUpOworICBpZiAoZmVycm9yIChmaWxlKSkKKyAgICB7CisgICAgICBmcmVlIChkYXRhKTsK
KyAgICAgIGZjbG9zZSAoZmlsZSk7CisgICAgICByZXR1cm4gWERHX01JTUVfVFlQRV9VTktOT1dO
OworICAgIH0KKworICBtaW1lX3R5cGUgPSBfeGRnX21pbWVfbWFnaWNfbG9va3VwX2RhdGEgKGds
b2JhbF9tYWdpYywgZGF0YSwgYnl0ZXNfcmVhZCwgTlVMTCwKKwkJCQkJICAgbWltZV90eXBlcywg
bik7CisKKyAgZnJlZSAoZGF0YSk7CisgIGZjbG9zZSAoZmlsZSk7CisKKyAgaWYgKG1pbWVfdHlw
ZSkKKyAgICByZXR1cm4gbWltZV90eXBlOworCisgIHJldHVybiBfeGRnX2JpbmFyeV9vcl90ZXh0
X2ZhbGxiYWNrKGRhdGEsIGJ5dGVzX3JlYWQpOworfQorCitjb25zdCBjaGFyICoKK3hkZ19taW1l
X2dldF9taW1lX3R5cGVfZnJvbV9maWxlX25hbWUgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSkKK3sK
KyAgY29uc3QgY2hhciAqbWltZV90eXBlOworCisgIHhkZ19taW1lX2luaXQgKCk7CisKKyAgaWYg
KF9jYWNoZXMpCisgICAgcmV0dXJuIF94ZGdfbWltZV9jYWNoZV9nZXRfbWltZV90eXBlX2Zyb21f
ZmlsZV9uYW1lIChmaWxlX25hbWUpOworCisgIGlmIChfeGRnX2dsb2JfaGFzaF9sb29rdXBfZmls
ZV9uYW1lIChnbG9iYWxfaGFzaCwgZmlsZV9uYW1lLCAmbWltZV90eXBlLCAxKSkKKyAgICByZXR1
cm4gbWltZV90eXBlOworICBlbHNlCisgICAgcmV0dXJuIFhER19NSU1FX1RZUEVfVU5LTk9XTjsK
K30KKworaW50Cit4ZGdfbWltZV9nZXRfbWltZV90eXBlc19mcm9tX2ZpbGVfbmFtZSAoY29uc3Qg
Y2hhciAqZmlsZV9uYW1lLAorCQkJCQljb25zdCBjaGFyICAqbWltZV90eXBlc1tdLAorCQkJCQlp
bnQgICAgICAgICAgbl9taW1lX3R5cGVzKQoreworICB4ZGdfbWltZV9pbml0ICgpOworICAKKyAg
aWYgKF9jYWNoZXMpCisgICAgcmV0dXJuIF94ZGdfbWltZV9jYWNoZV9nZXRfbWltZV90eXBlc19m
cm9tX2ZpbGVfbmFtZSAoZmlsZV9uYW1lLCBtaW1lX3R5cGVzLCBuX21pbWVfdHlwZXMpOworICAK
KyAgcmV0dXJuIF94ZGdfZ2xvYl9oYXNoX2xvb2t1cF9maWxlX25hbWUgKGdsb2JhbF9oYXNoLCBm
aWxlX25hbWUsIG1pbWVfdHlwZXMsIG5fbWltZV90eXBlcyk7Cit9CisKK2ludAoreGRnX21pbWVf
aXNfdmFsaWRfbWltZV90eXBlIChjb25zdCBjaGFyICptaW1lX3R5cGUpCit7CisgIC8qIEZJWE1F
OiBXZSBzaG91bGQgbWFrZSB0aGlzIGEgYmV0dGVyIHRlc3QKKyAgICovCisgIHJldHVybiBfeGRn
X3V0ZjhfdmFsaWRhdGUgKG1pbWVfdHlwZSk7Cit9CisKK3ZvaWQKK3hkZ19taW1lX3NodXRkb3du
ICh2b2lkKQoreworICBYZGdDYWxsYmFja0xpc3QgKmxpc3Q7CisKKyAgLyogRklYTUU6IE5lZWQg
dG8gbWFrZSB0aGlzIChhbmQgdGhlIHdob2xlIGxpYnJhcnkpIHRocmVhZCBzYWZlICovCisgIGlm
IChkaXJfdGltZV9saXN0KQorICAgIHsKKyAgICAgIHhkZ19kaXJfdGltZV9saXN0X2ZyZWUgKGRp
cl90aW1lX2xpc3QpOworICAgICAgZGlyX3RpbWVfbGlzdCA9IE5VTEw7CisgICAgfQorCQorICBp
ZiAoZ2xvYmFsX2hhc2gpCisgICAgeworICAgICAgX3hkZ19nbG9iX2hhc2hfZnJlZSAoZ2xvYmFs
X2hhc2gpOworICAgICAgZ2xvYmFsX2hhc2ggPSBOVUxMOworICAgIH0KKyAgaWYgKGdsb2JhbF9t
YWdpYykKKyAgICB7CisgICAgICBfeGRnX21pbWVfbWFnaWNfZnJlZSAoZ2xvYmFsX21hZ2ljKTsK
KyAgICAgIGdsb2JhbF9tYWdpYyA9IE5VTEw7CisgICAgfQorCisgIGlmIChhbGlhc19saXN0KQor
ICAgIHsKKyAgICAgIF94ZGdfbWltZV9hbGlhc19saXN0X2ZyZWUgKGFsaWFzX2xpc3QpOworICAg
ICAgYWxpYXNfbGlzdCA9IE5VTEw7CisgICAgfQorCisgIGlmIChwYXJlbnRfbGlzdCkKKyAgICB7
CisgICAgICBfeGRnX21pbWVfcGFyZW50X2xpc3RfZnJlZSAocGFyZW50X2xpc3QpOworICAgICAg
cGFyZW50X2xpc3QgPSBOVUxMOworICAgIH0KKworICBpZiAoaWNvbl9saXN0KQorICAgIHsKKyAg
ICAgIF94ZGdfbWltZV9pY29uX2xpc3RfZnJlZSAoaWNvbl9saXN0KTsKKyAgICAgIGljb25fbGlz
dCA9IE5VTEw7CisgICAgfQorCisgIGlmIChnZW5lcmljX2ljb25fbGlzdCkKKyAgICB7CisgICAg
ICBfeGRnX21pbWVfaWNvbl9saXN0X2ZyZWUgKGdlbmVyaWNfaWNvbl9saXN0KTsKKyAgICAgIGdl
bmVyaWNfaWNvbl9saXN0ID0gTlVMTDsKKyAgICB9CisgIAorICBpZiAoX2NhY2hlcykKKyAgICB7
CisgICAgICBpbnQgaTsKKworICAgICAgZm9yIChpID0gMDsgaSA8IG5fY2FjaGVzOyBpKyspCisg
ICAgICAgIF94ZGdfbWltZV9jYWNoZV91bnJlZiAoX2NhY2hlc1tpXSk7CisgICAgICBmcmVlIChf
Y2FjaGVzKTsKKyAgICAgIF9jYWNoZXMgPSBOVUxMOworICAgICAgbl9jYWNoZXMgPSAwOworICAg
IH0KKworICBmb3IgKGxpc3QgPSBjYWxsYmFja19saXN0OyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4
dCkKKyAgICAobGlzdC0+Y2FsbGJhY2spIChsaXN0LT5kYXRhKTsKKworICBuZWVkX3JlcmVhZCA9
IFRSVUU7Cit9CisKK2ludAoreGRnX21pbWVfZ2V0X21heF9idWZmZXJfZXh0ZW50cyAodm9pZCkK
K3sKKyAgeGRnX21pbWVfaW5pdCAoKTsKKyAgCisgIGlmIChfY2FjaGVzKQorICAgIHJldHVybiBf
eGRnX21pbWVfY2FjaGVfZ2V0X21heF9idWZmZXJfZXh0ZW50cyAoKTsKKworICByZXR1cm4gX3hk
Z19taW1lX21hZ2ljX2dldF9idWZmZXJfZXh0ZW50cyAoZ2xvYmFsX21hZ2ljKTsKK30KKworY29u
c3QgY2hhciAqCitfeGRnX21pbWVfdW5hbGlhc19taW1lX3R5cGUgKGNvbnN0IGNoYXIgKm1pbWVf
dHlwZSkKK3sKKyAgY29uc3QgY2hhciAqbG9va3VwOworCisgIGlmIChfY2FjaGVzKQorICAgIHJl
dHVybiBfeGRnX21pbWVfY2FjaGVfdW5hbGlhc19taW1lX3R5cGUgKG1pbWVfdHlwZSk7CisKKyAg
aWYgKChsb29rdXAgPSBfeGRnX21pbWVfYWxpYXNfbGlzdF9sb29rdXAgKGFsaWFzX2xpc3QsIG1p
bWVfdHlwZSkpICE9IE5VTEwpCisgICAgcmV0dXJuIGxvb2t1cDsKKworICByZXR1cm4gbWltZV90
eXBlOworfQorCitjb25zdCBjaGFyICoKK3hkZ19taW1lX3VuYWxpYXNfbWltZV90eXBlIChjb25z
dCBjaGFyICptaW1lX3R5cGUpCit7CisgIHhkZ19taW1lX2luaXQgKCk7CisKKyAgcmV0dXJuIF94
ZGdfbWltZV91bmFsaWFzX21pbWVfdHlwZSAobWltZV90eXBlKTsKK30KKworaW50CitfeGRnX21p
bWVfbWltZV90eXBlX2VxdWFsIChjb25zdCBjaGFyICptaW1lX2EsCisJCQkgICBjb25zdCBjaGFy
ICptaW1lX2IpCit7CisgIGNvbnN0IGNoYXIgKnVuYWxpYXNfYSwgKnVuYWxpYXNfYjsKKworICB1
bmFsaWFzX2EgPSBfeGRnX21pbWVfdW5hbGlhc19taW1lX3R5cGUgKG1pbWVfYSk7CisgIHVuYWxp
YXNfYiA9IF94ZGdfbWltZV91bmFsaWFzX21pbWVfdHlwZSAobWltZV9iKTsKKworICBpZiAoc3Ry
Y21wICh1bmFsaWFzX2EsIHVuYWxpYXNfYikgPT0gMCkKKyAgICByZXR1cm4gMTsKKworICByZXR1
cm4gMDsKK30KKworaW50Cit4ZGdfbWltZV9taW1lX3R5cGVfZXF1YWwgKGNvbnN0IGNoYXIgKm1p
bWVfYSwKKwkJCSAgY29uc3QgY2hhciAqbWltZV9iKQoreworICB4ZGdfbWltZV9pbml0ICgpOwor
CisgIHJldHVybiBfeGRnX21pbWVfbWltZV90eXBlX2VxdWFsIChtaW1lX2EsIG1pbWVfYik7Cit9
CisKK2ludAoreGRnX21pbWVfbWVkaWFfdHlwZV9lcXVhbCAoY29uc3QgY2hhciAqbWltZV9hLAor
CQkJICAgY29uc3QgY2hhciAqbWltZV9iKQoreworICBjaGFyICpzZXA7CisKKyAgc2VwID0gc3Ry
Y2hyIChtaW1lX2EsICcvJyk7CisgIAorICBpZiAoc2VwICYmIHN0cm5jbXAgKG1pbWVfYSwgbWlt
ZV9iLCBzZXAgLSBtaW1lX2EgKyAxKSA9PSAwKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAw
OworfQorCisjaWYgMQorc3RhdGljIGludAoreGRnX21pbWVfaXNfc3VwZXJfdHlwZSAoY29uc3Qg
Y2hhciAqbWltZSkKK3sKKyAgaW50IGxlbmd0aDsKKyAgY29uc3QgY2hhciAqdHlwZTsKKworICBs
ZW5ndGggPSBzdHJsZW4gKG1pbWUpOworICB0eXBlID0gJihtaW1lW2xlbmd0aCAtIDJdKTsKKwor
ICBpZiAoc3RyY21wICh0eXBlLCAiLyoiKSA9PSAwKQorICAgIHJldHVybiAxOworCisgIHJldHVy
biAwOworfQorI2VuZGlmCisKK2ludAorX3hkZ19taW1lX21pbWVfdHlwZV9zdWJjbGFzcyAoY29u
c3QgY2hhciAqbWltZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmJhc2UpCit7CisgIGNvbnN0IGNo
YXIgKnVtaW1lLCAqdWJhc2U7CisgIGNvbnN0IGNoYXIgKipwYXJlbnRzOworCisgIGlmIChfY2Fj
aGVzKQorICAgIHJldHVybiBfeGRnX21pbWVfY2FjaGVfbWltZV90eXBlX3N1YmNsYXNzIChtaW1l
LCBiYXNlKTsKKworICB1bWltZSA9IF94ZGdfbWltZV91bmFsaWFzX21pbWVfdHlwZSAobWltZSk7
CisgIHViYXNlID0gX3hkZ19taW1lX3VuYWxpYXNfbWltZV90eXBlIChiYXNlKTsKKworICBpZiAo
c3RyY21wICh1bWltZSwgdWJhc2UpID09IDApCisgICAgcmV0dXJuIDE7CisKKyNpZiAxICAKKyAg
LyogSGFuZGxlIHN1cGVydHlwZXMgKi8KKyAgaWYgKHhkZ19taW1lX2lzX3N1cGVyX3R5cGUgKHVi
YXNlKSAmJgorICAgICAgeGRnX21pbWVfbWVkaWFfdHlwZV9lcXVhbCAodW1pbWUsIHViYXNlKSkK
KyAgICByZXR1cm4gMTsKKyNlbmRpZgorCisgIC8qICBIYW5kbGUgc3BlY2lhbCBjYXNlcyB0ZXh0
L3BsYWluIGFuZCBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0gKi8KKyAgaWYgKHN0cmNtcCAodWJh
c2UsICJ0ZXh0L3BsYWluIikgPT0gMCAmJiAKKyAgICAgIHN0cm5jbXAgKHVtaW1lLCAidGV4dC8i
LCA1KSA9PSAwKQorICAgIHJldHVybiAxOworCisgIGlmIChzdHJjbXAgKHViYXNlLCAiYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtIikgPT0gMCkKKyAgICByZXR1cm4gMTsKKyAgCisgIHBhcmVudHMg
PSBfeGRnX21pbWVfcGFyZW50X2xpc3RfbG9va3VwIChwYXJlbnRfbGlzdCwgdW1pbWUpOworICBm
b3IgKDsgcGFyZW50cyAmJiAqcGFyZW50czsgcGFyZW50cysrKQorICAgIHsKKyAgICAgIGlmIChf
eGRnX21pbWVfbWltZV90eXBlX3N1YmNsYXNzICgqcGFyZW50cywgdWJhc2UpKQorCXJldHVybiAx
OworICAgIH0KKworICByZXR1cm4gMDsKK30KKworaW50Cit4ZGdfbWltZV9taW1lX3R5cGVfc3Vi
Y2xhc3MgKGNvbnN0IGNoYXIgKm1pbWUsCisJCQkgICAgIGNvbnN0IGNoYXIgKmJhc2UpCit7Cisg
IHhkZ19taW1lX2luaXQgKCk7CisKKyAgcmV0dXJuIF94ZGdfbWltZV9taW1lX3R5cGVfc3ViY2xh
c3MgKG1pbWUsIGJhc2UpOworfQorCitjaGFyICoqCit4ZGdfbWltZV9saXN0X21pbWVfcGFyZW50
cyAoY29uc3QgY2hhciAqbWltZSkKK3sKKyAgY29uc3QgY2hhciAqKnBhcmVudHM7CisgIGNoYXIg
KipyZXN1bHQ7CisgIGludCBpLCBuOworCisgIGlmIChfY2FjaGVzKQorICAgIHJldHVybiBfeGRn
X21pbWVfY2FjaGVfbGlzdF9taW1lX3BhcmVudHMgKG1pbWUpOworCisgIHBhcmVudHMgPSB4ZGdf
bWltZV9nZXRfbWltZV9wYXJlbnRzIChtaW1lKTsKKworICBpZiAoIXBhcmVudHMpCisgICAgcmV0
dXJuIE5VTEw7CisKKyAgZm9yIChpID0gMDsgcGFyZW50c1tpXTsgaSsrKSA7CisgIAorICBuID0g
KGkgKyAxKSAqIHNpemVvZiAoY2hhciAqKTsKKyAgcmVzdWx0ID0gKGNoYXIgKiopIG1hbGxvYyAo
bik7CisgIG1lbWNweSAocmVzdWx0LCBwYXJlbnRzLCBuKTsKKworICByZXR1cm4gcmVzdWx0Owor
fQorCitjb25zdCBjaGFyICoqCit4ZGdfbWltZV9nZXRfbWltZV9wYXJlbnRzIChjb25zdCBjaGFy
ICptaW1lKQoreworICBjb25zdCBjaGFyICp1bWltZTsKKworICB4ZGdfbWltZV9pbml0ICgpOwor
CisgIHVtaW1lID0gX3hkZ19taW1lX3VuYWxpYXNfbWltZV90eXBlIChtaW1lKTsKKworICByZXR1
cm4gX3hkZ19taW1lX3BhcmVudF9saXN0X2xvb2t1cCAocGFyZW50X2xpc3QsIHVtaW1lKTsKK30K
Kwordm9pZCAKK3hkZ19taW1lX2R1bXAgKHZvaWQpCit7CisgIHhkZ19taW1lX2luaXQoKTsKKwor
ICBwcmludGYgKCIqKiogQUxJQVNFUyAqKipcblxuIik7CisgIF94ZGdfbWltZV9hbGlhc19saXN0
X2R1bXAgKGFsaWFzX2xpc3QpOworICBwcmludGYgKCJcbioqKiBQQVJFTlRTICoqKlxuXG4iKTsK
KyAgX3hkZ19taW1lX3BhcmVudF9saXN0X2R1bXAgKHBhcmVudF9saXN0KTsKKyAgcHJpbnRmICgi
XG4qKiogQ0FDSEUgKioqXG5cbiIpOworICBfeGRnX2dsb2JfaGFzaF9kdW1wIChnbG9iYWxfaGFz
aCk7CisgIHByaW50ZiAoIlxuKioqIEdMT0JTICoqKlxuXG4iKTsKKyAgX3hkZ19nbG9iX2hhc2hf
ZHVtcCAoZ2xvYmFsX2hhc2gpOworICBwcmludGYgKCJcbioqKiBHTE9CUyBSRVZFUlNFIFRSRUUg
KioqXG5cbiIpOworICBfeGRnX21pbWVfY2FjaGVfZ2xvYl9kdW1wICgpOworfQorCisKKy8qIFJl
Z2lzdGVycyBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBtaW1lIGRhdGFi
YXNlIHJlbG9hZHMgaXRzIGZpbGVzCisgKi8KK2ludAoreGRnX21pbWVfcmVnaXN0ZXJfcmVsb2Fk
X2NhbGxiYWNrIChYZGdNaW1lQ2FsbGJhY2sgIGNhbGxiYWNrLAorCQkJCSAgIHZvaWQgICAgICAg
ICAgICAqZGF0YSwKKwkJCQkgICBYZGdNaW1lRGVzdHJveSAgIGRlc3Ryb3kpCit7CisgIFhkZ0Nh
bGxiYWNrTGlzdCAqbGlzdF9lbDsKKyAgc3RhdGljIGludCBjYWxsYmFja19pZCA9IDE7CisKKyAg
LyogTWFrZSBhIG5ldyBsaXN0IGVsZW1lbnQgKi8KKyAgbGlzdF9lbCA9IGNhbGxvYyAoMSwgc2l6
ZW9mIChYZGdDYWxsYmFja0xpc3QpKTsKKyAgbGlzdF9lbC0+Y2FsbGJhY2tfaWQgPSBjYWxsYmFj
a19pZDsKKyAgbGlzdF9lbC0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgbGlzdF9lbC0+ZGF0YSA9
IGRhdGE7CisgIGxpc3RfZWwtPmRlc3Ryb3kgPSBkZXN0cm95OworICBsaXN0X2VsLT5uZXh0ID0g
Y2FsbGJhY2tfbGlzdDsKKyAgaWYgKGxpc3RfZWwtPm5leHQpCisgICAgbGlzdF9lbC0+bmV4dC0+
cHJldiA9IGxpc3RfZWw7CisKKyAgY2FsbGJhY2tfbGlzdCA9IGxpc3RfZWw7CisgIGNhbGxiYWNr
X2lkICsrOworCisgIHJldHVybiBjYWxsYmFja19pZCAtIDE7Cit9CisKK3ZvaWQKK3hkZ19taW1l
X3JlbW92ZV9jYWxsYmFjayAoaW50IGNhbGxiYWNrX2lkKQoreworICBYZGdDYWxsYmFja0xpc3Qg
Kmxpc3Q7CisKKyAgZm9yIChsaXN0ID0gY2FsbGJhY2tfbGlzdDsgbGlzdDsgbGlzdCA9IGxpc3Qt
Pm5leHQpCisgICAgeworICAgICAgaWYgKGxpc3QtPmNhbGxiYWNrX2lkID09IGNhbGxiYWNrX2lk
KQorCXsKKwkgIGlmIChsaXN0LT5uZXh0KQorCSAgICBsaXN0LT5uZXh0ID0gbGlzdC0+cHJldjsK
KworCSAgaWYgKGxpc3QtPnByZXYpCisJICAgIGxpc3QtPnByZXYtPm5leHQgPSBsaXN0LT5uZXh0
OworCSAgZWxzZQorCSAgICBjYWxsYmFja19saXN0ID0gbGlzdC0+bmV4dDsKKworCSAgLyogaW52
b2tlIHRoZSBkZXN0cm95IGhhbmRsZXIgKi8KKwkgIChsaXN0LT5kZXN0cm95KSAobGlzdC0+ZGF0
YSk7CisJICBmcmVlIChsaXN0KTsKKwkgIHJldHVybjsKKwl9CisgICAgfQorfQorCitjb25zdCBj
aGFyICoKK3hkZ19taW1lX2dldF9pY29uIChjb25zdCBjaGFyICptaW1lKQoreworICB4ZGdfbWlt
ZV9pbml0ICgpOworICAKKyAgaWYgKF9jYWNoZXMpCisgICAgcmV0dXJuIF94ZGdfbWltZV9jYWNo
ZV9nZXRfaWNvbiAobWltZSk7CisKKyAgcmV0dXJuIF94ZGdfbWltZV9pY29uX2xpc3RfbG9va3Vw
IChpY29uX2xpc3QsIG1pbWUpOworfQorCitjb25zdCBjaGFyICoKK3hkZ19taW1lX2dldF9nZW5l
cmljX2ljb24gKGNvbnN0IGNoYXIgKm1pbWUpCit7CisgIHhkZ19taW1lX2luaXQgKCk7CisgIAor
ICBpZiAoX2NhY2hlcykKKyAgICByZXR1cm4gX3hkZ19taW1lX2NhY2hlX2dldF9nZW5lcmljX2lj
b24gKG1pbWUpOworCisgIHJldHVybiBfeGRnX21pbWVfaWNvbl9saXN0X2xvb2t1cCAoZ2VuZXJp
Y19pY29uX2xpc3QsIG1pbWUpOworfQorCitpbnQKK3hkZ19taW1lX2dldF9zaW1wbGVfZ2xvYnMg
KGNvbnN0IGNoYXIgKm1pbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAg
ICpnbG9ic1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgbl9nbG9i
cykKK3sKKyAgeGRnX21pbWVfaW5pdCAoKTsKKworICBpZiAoX2NhY2hlcykKKyAgICByZXR1cm4g
X3hkZ19taW1lX2NhY2hlX2dldF9zaW1wbGVfZ2xvYnMgKG1pbWUsIGdsb2JzLCBuX2dsb2JzKTsK
KworICByZXR1cm4gX3hkZ19nbG9iX2hhc2hfZ2V0X3NpbXBsZV9nbG9icyAoZ2xvYmFsX2hhc2gs
IG1pbWUsIGdsb2JzLCBuX2dsb2JzKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L3hkZ21pbWUvc3JjL3hkZ21pbWUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvc3JjL3hk
Z21pbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGQzMzI3MmM4
NDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS94ZGdtaW1lL3NyYy94ZGdt
aW1lLmgKQEAgLTAsMCArMSwxMzcgQEAKKy8qIC0qLSBtb2RlOiBDOyBjLWZpbGUtc3R5bGU6ICJn
bnUiIC0qLSAqLworLyogeGRnbWltZS5oOiBYREcgTWltZSBTcGVjIG1pbWUgcmVzb2x2ZXIuICBC
YXNlZCBvbiB2ZXJzaW9uIDAuMTEgb2YgdGhlIHNwZWMuCisgKgorICogTW9yZSBpbmZvIGNhbiBi
ZSBmb3VuZCBhdCBodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zdGFuZGFyZHMvCisgKiAKKyAq
IENvcHlyaWdodCAoQykgMjAwMyAgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAz
ICBKb25hdGhhbiBCbGFuZGZvcmQgPGpyYkBhbHVtLm1pdC5lZHU+CisgKgorICogTGljZW5zZWQg
dW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDIuMAorICogT3IgdW5kZXIg
dGhlIGZvbGxvd2luZyB0ZXJtczoKKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAq
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUg
MzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworCisjaWZuZGVmIF9f
WERHX01JTUVfSF9fCisjZGVmaW5lIF9fWERHX01JTUVfSF9fCisKKyNpbmNsdWRlIDxzdGRsaWIu
aD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAi
QyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNpZmRlZiBYREdfUFJFRklYCisjZGVm
aW5lIFhER19FTlRSWShmdW5jKSBfWERHX0VOVFJZMihYREdfUFJFRklYLGZ1bmMpCisjZGVmaW5l
IF9YREdfRU5UUlkyKHByZWZpeCxmdW5jKSBfWERHX0VOVFJZMyhwcmVmaXgsZnVuYykKKyNkZWZp
bmUgX1hER19FTlRSWTMocHJlZml4LGZ1bmMpIHByZWZpeCMjXyMjZnVuYworCisjZGVmaW5lIFhE
R19SRVNFUlZFRF9FTlRSWShmdW5jKSBfWERHX1JFU0VSVkVEX0VOVFJZMihYREdfUFJFRklYLGZ1
bmMpCisjZGVmaW5lIF9YREdfUkVTRVJWRURfRU5UUlkyKHByZWZpeCxmdW5jKSBfWERHX1JFU0VS
VkVEX0VOVFJZMyhwcmVmaXgsZnVuYykKKyNkZWZpbmUgX1hER19SRVNFUlZFRF9FTlRSWTMocHJl
Zml4LGZ1bmMpIF8jI3ByZWZpeCMjXyMjZnVuYworI2VuZGlmCisKK3R5cGVkZWYgdm9pZCAoKlhk
Z01pbWVDYWxsYmFjaykgKHZvaWQgKnVzZXJfZGF0YSk7Cit0eXBlZGVmIHZvaWQgKCpYZGdNaW1l
RGVzdHJveSkgICh2b2lkICp1c2VyX2RhdGEpOworCisgIAorI2lmZGVmIFhER19QUkVGSVgKKyNk
ZWZpbmUgeGRnX21pbWVfZ2V0X21pbWVfdHlwZV9mb3JfZGF0YSAgICAgICBYREdfRU5UUlkoZ2V0
X21pbWVfdHlwZV9mb3JfZGF0YSkKKyNkZWZpbmUgeGRnX21pbWVfZ2V0X21pbWVfdHlwZV9mb3Jf
ZmlsZSAgICAgICBYREdfRU5UUlkoZ2V0X21pbWVfdHlwZV9mb3JfZmlsZSkKKyNkZWZpbmUgeGRn
X21pbWVfZ2V0X21pbWVfdHlwZV9mcm9tX2ZpbGVfbmFtZSBYREdfRU5UUlkoZ2V0X21pbWVfdHlw
ZV9mcm9tX2ZpbGVfbmFtZSkKKyNkZWZpbmUgeGRnX21pbWVfZ2V0X21pbWVfdHlwZXNfZnJvbV9m
aWxlX25hbWUgWERHX0VOVFJZKGdldF9taW1lX3R5cGVzX2Zyb21fZmlsZV9uYW1lKQorI2RlZmlu
ZSB4ZGdfbWltZV9pc192YWxpZF9taW1lX3R5cGUgICAgICAgICAgIFhER19FTlRSWShpc192YWxp
ZF9taW1lX3R5cGUpCisjZGVmaW5lIHhkZ19taW1lX21pbWVfdHlwZV9lcXVhbCAgICAgICAgICAg
ICAgWERHX0VOVFJZKG1pbWVfdHlwZV9lcXVhbCkKKyNkZWZpbmUgeGRnX21pbWVfbWVkaWFfdHlw
ZV9lcXVhbCAgICAgICAgICAgICBYREdfRU5UUlkobWVkaWFfdHlwZV9lcXVhbCkKKyNkZWZpbmUg
eGRnX21pbWVfbWltZV90eXBlX3N1YmNsYXNzICAgICAgICAgICBYREdfRU5UUlkobWltZV90eXBl
X3N1YmNsYXNzKQorI2RlZmluZSB4ZGdfbWltZV9nZXRfbWltZV9wYXJlbnRzICAgICAgICAgICAg
IFhER19FTlRSWShnZXRfbWltZV9wYXJlbnRzKQorI2RlZmluZSB4ZGdfbWltZV9saXN0X21pbWVf
cGFyZW50cyAgICAgICAgICAgIFhER19FTlRSWShsaXN0X21pbWVfcGFyZW50cykKKyNkZWZpbmUg
eGRnX21pbWVfdW5hbGlhc19taW1lX3R5cGUgICAgICAgICAgICBYREdfRU5UUlkodW5hbGlhc19t
aW1lX3R5cGUpCisjZGVmaW5lIHhkZ19taW1lX2dldF9tYXhfYnVmZmVyX2V4dGVudHMgICAgICAg
WERHX0VOVFJZKGdldF9tYXhfYnVmZmVyX2V4dGVudHMpCisjZGVmaW5lIHhkZ19taW1lX3NodXRk
b3duICAgICAgICAgICAgICAgICAgICAgWERHX0VOVFJZKHNodXRkb3duKQorI2RlZmluZSB4ZGdf
bWltZV9kdW1wICAgICAgICAgICAgICAgICAgICAgICAgIFhER19FTlRSWShkdW1wKQorI2RlZmlu
ZSB4ZGdfbWltZV9yZWdpc3Rlcl9yZWxvYWRfY2FsbGJhY2sgICAgIFhER19FTlRSWShyZWdpc3Rl
cl9yZWxvYWRfY2FsbGJhY2spCisjZGVmaW5lIHhkZ19taW1lX3JlbW92ZV9jYWxsYmFjayAgICAg
ICAgICAgICAgWERHX0VOVFJZKHJlbW92ZV9jYWxsYmFjaykKKyNkZWZpbmUgeGRnX21pbWVfdHlw
ZV91bmtub3duICAgICAgICAgICAgICAgICBYREdfRU5UUlkodHlwZV91bmtub3duKQorI2RlZmlu
ZSB4ZGdfbWltZV90eXBlX2VtcHR5ICAgICAgICAgICAgICAgICAgIFhER19FTlRSWSh0eXBlX2Vt
cHR5KQorI2RlZmluZSB4ZGdfbWltZV90eXBlX3RleHRwbGFpbiAgICAgICAgICAgICAgIFhER19F
TlRSWSh0eXBlX3RleHRwbGFpbikKKyNkZWZpbmUgeGRnX21pbWVfZ2V0X2ljb24gICAgICAgICAg
ICAgICAgICAgICBYREdfRU5UUlkoZ2V0X2ljb24pCisjZGVmaW5lIHhkZ19taW1lX2dldF9nZW5l
cmljX2ljb24gICAgICAgICAgICAgWERHX0VOVFJZKGdldF9nZW5lcmljX2ljb24pCisjZGVmaW5l
IHhkZ19taW1lX2dldF9zaW1wbGVfZ2xvYnMgICAgICAgICAgICAgWERHX0VOVFJZKGdldF9zaW1w
bGVfZ2xvYnMpCisKKyNkZWZpbmUgX3hkZ19taW1lX21pbWVfdHlwZV9lcXVhbCAgICAgICAgICAg
ICBYREdfUkVTRVJWRURfRU5UUlkobWltZV90eXBlX2VxdWFsKQorI2RlZmluZSBfeGRnX21pbWVf
bWltZV90eXBlX3N1YmNsYXNzICAgICAgICAgIFhER19SRVNFUlZFRF9FTlRSWShtaW1lX3R5cGVf
c3ViY2xhc3MpCisjZGVmaW5lIF94ZGdfbWltZV91bmFsaWFzX21pbWVfdHlwZSAgICAgICAgICAg
WERHX1JFU0VSVkVEX0VOVFJZKHVuYWxpYXNfbWltZV90eXBlKSAgCisjZW5kaWYKKworZXh0ZXJu
IGNvbnN0IGNoYXIgeGRnX21pbWVfdHlwZV91bmtub3duW107CitleHRlcm4gY29uc3QgY2hhciB4
ZGdfbWltZV90eXBlX2VtcHR5W107CitleHRlcm4gY29uc3QgY2hhciB4ZGdfbWltZV90eXBlX3Rl
eHRwbGFpbltdOworI2RlZmluZSBYREdfTUlNRV9UWVBFX1VOS05PV04geGRnX21pbWVfdHlwZV91
bmtub3duCisjZGVmaW5lIFhER19NSU1FX1RZUEVfRU1QVFkgeGRnX21pbWVfdHlwZV9lbXB0eQor
I2RlZmluZSBYREdfTUlNRV9UWVBFX1RFWFRQTEFJTiB4ZGdfbWltZV90eXBlX3RleHRwbGFpbgor
Citjb25zdCBjaGFyICAqeGRnX21pbWVfZ2V0X21pbWVfdHlwZV9mb3JfZGF0YSAgICAgICAoY29u
c3Qgdm9pZCAqZGF0YSwKKwkJCQkJCSAgICBzaXplX3QgICAgICBsZW4sCisJCQkJCQkgICAgaW50
ICAgICAgICAqcmVzdWx0X3ByaW8pOworY29uc3QgY2hhciAgKnhkZ19taW1lX2dldF9taW1lX3R5
cGVfZm9yX2ZpbGUgICAgICAgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCAqc3RhdGJ1
Zik7Citjb25zdCBjaGFyICAqeGRnX21pbWVfZ2V0X21pbWVfdHlwZV9mcm9tX2ZpbGVfbmFtZSAo
Y29uc3QgY2hhciAqZmlsZV9uYW1lKTsKK2ludCAgICAgICAgICB4ZGdfbWltZV9nZXRfbWltZV90
eXBlc19mcm9tX2ZpbGVfbmFtZShjb25zdCBjaGFyICpmaWxlX25hbWUsCisJCQkJCQkgICAgY29u
c3QgY2hhciAqbWltZV90eXBlc1tdLAorCQkJCQkJICAgIGludCAgICAgICAgIG5fbWltZV90eXBl
cyk7CitpbnQgICAgICAgICAgeGRnX21pbWVfaXNfdmFsaWRfbWltZV90eXBlICAgICAgICAgICAo
Y29uc3QgY2hhciAqbWltZV90eXBlKTsKK2ludCAgICAgICAgICB4ZGdfbWltZV9taW1lX3R5cGVf
ZXF1YWwgICAgICAgICAgICAgIChjb25zdCBjaGFyICptaW1lX2EsCisJCQkJCQkgICAgY29uc3Qg
Y2hhciAqbWltZV9iKTsKK2ludCAgICAgICAgICB4ZGdfbWltZV9tZWRpYV90eXBlX2VxdWFsICAg
ICAgICAgICAgIChjb25zdCBjaGFyICptaW1lX2EsCisJCQkJCQkgICAgY29uc3QgY2hhciAqbWlt
ZV9iKTsKK2ludCAgICAgICAgICB4ZGdfbWltZV9taW1lX3R5cGVfc3ViY2xhc3MgICAgICAgICAg
IChjb25zdCBjaGFyICptaW1lX2EsCisJCQkJCQkgICAgY29uc3QgY2hhciAqbWltZV9iKTsKKyAg
LyogeGRnX21pbWVfZ2V0X21pbWVfcGFyZW50cygpIGlzIGRlcHJlY2F0ZWQgc2luY2UgaXQgZG9l
cworICAgKiBub3Qgd29yayBjb3JyZWN0bHkgd2l0aCBjYWNoZXMuIFVzZSB4ZGdfbWltZV9saXN0
X3BhcmVudHMoKSAKKyAgICogaW5zdGVhZCwgYnV0IG5vdGljZSB0aGF0IHRoYXQgZnVuY3Rpb24g
ZXhwZWN0cyB5b3UgdG8gZnJlZQorICAgKiB0aGUgYXJyYXkgaXQgcmV0dXJucy4gCisgICAqLwor
Y29uc3QgY2hhciAqKnhkZ19taW1lX2dldF9taW1lX3BhcmVudHMJCSAgIChjb25zdCBjaGFyICpt
aW1lKTsKK2NoYXIgKiogICAgICB4ZGdfbWltZV9saXN0X21pbWVfcGFyZW50cwkJICAgKGNvbnN0
IGNoYXIgKm1pbWUpOworY29uc3QgY2hhciAgKnhkZ19taW1lX3VuYWxpYXNfbWltZV90eXBlCQkg
ICAoY29uc3QgY2hhciAqbWltZSk7Citjb25zdCBjaGFyICAqeGRnX21pbWVfZ2V0X2ljb24gICAg
ICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqbWltZSk7Citjb25zdCBjaGFyICAqeGRnX21p
bWVfZ2V0X2dlbmVyaWNfaWNvbiAgICAgICAgICAgICAoY29uc3QgY2hhciAqbWltZSk7CitpbnQg
ICAgICAgICAgeGRnX21pbWVfZ2V0X3NpbXBsZV9nbG9icyAgICAgICAgICAgICAoY29uc3QgY2hh
ciAqbWltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICAgICAgICpnbG9ic1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgIG5fZ2xvYnMpOworaW50ICAgICAgICAg
IHhkZ19taW1lX2dldF9tYXhfYnVmZmVyX2V4dGVudHMgICAgICAgKHZvaWQpOwordm9pZCAgICAg
ICAgIHhkZ19taW1lX3NodXRkb3duICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOwordm9pZCAg
ICAgICAgIHhkZ19taW1lX2R1bXAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOworaW50
ICAgICAgICAgIHhkZ19taW1lX3JlZ2lzdGVyX3JlbG9hZF9jYWxsYmFjayAgICAgKFhkZ01pbWVD
YWxsYmFjayAgY2FsbGJhY2ssCisJCQkJCQkgICAgdm9pZCAgICAgICAgICAgICpkYXRhLAorCQkJ
CQkJICAgIFhkZ01pbWVEZXN0cm95ICAgZGVzdHJveSk7Cit2b2lkICAgICAgICAgeGRnX21pbWVf
cmVtb3ZlX2NhbGxiYWNrICAgICAgICAgICAgICAoaW50ICAgICAgICAgICAgICBjYWxsYmFja19p
ZCk7CisKKyAgIC8qIFByaXZhdGUgdmVyc2lvbnMgb2YgZnVuY3Rpb25zIHRoYXQgZG9uJ3QgY2Fs
bCB4ZGdfbWltZV9pbml0ICgpICovCitpbnQgICAgICAgICAgX3hkZ19taW1lX21pbWVfdHlwZV9l
cXVhbCAgICAgICAgICAgICAoY29uc3QgY2hhciAqbWltZV9hLAorCQkJCQkJICAgIGNvbnN0IGNo
YXIgKm1pbWVfYik7CitpbnQgICAgICAgICAgX3hkZ19taW1lX21pbWVfdHlwZV9zdWJjbGFzcyAg
ICAgICAgICAoY29uc3QgY2hhciAqbWltZSwKKwkJCQkJCSAgICBjb25zdCBjaGFyICpiYXNlKTsK
K2NvbnN0IGNoYXIgICpfeGRnX21pbWVfdW5hbGlhc19taW1lX3R5cGUgICAgICAgICAgIChjb25z
dCBjaGFyICptaW1lKTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2Nw
bHVzcGx1cyAqLworI2VuZGlmIC8qIF9fWERHX01JTUVfSF9fICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS94ZGdtaW1lL3NyYy94ZGdtaW1lYWxpYXMuYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L3hkZ21pbWUvc3JjL3hkZ21pbWVhbGlhcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5kY2E2MjA5MWQyZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L3hkZ21pbWUvc3JjL3hkZ21pbWVhbGlhcy5jCkBAIC0wLDAgKzEsMTg0IEBACisvKiAt
Ki0gbW9kZTogQzsgYy1maWxlLXN0eWxlOiAiZ251IiAtKi0gKi8KKy8qIHhkZ21pbWVhbGlhcy5j
OiBQcml2YXRlIGZpbGUuICBEYXRhc3RydWN0dXJlIGZvciBzdG9yaW5nIHRoZSBhbGlhc2VzLgor
ICoKKyAqIE1vcmUgaW5mbyBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5mcmVlZGVza3RvcC5v
cmcvc3RhbmRhcmRzLworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCAgUmVkIEhhdCwgSW5jLgor
ICogQ29weXJpZ2h0IChDKSAyMDA0ICBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNv
bT4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIHZlcnNp
b24gMi4wCisgKiBPciB1bmRlciB0aGUgZm9sbG93aW5nIHRlcm1zOgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUg
R05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRl
bXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgor
ICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY21ha2Vjb25maWcuaCIKKyNl
bmRpZgorCisjaW5jbHVkZSAieGRnbWltZWFsaWFzLmgiCisjaW5jbHVkZSAieGRnbWltZWludC5o
IgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8YXNz
ZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Zm5tYXRjaC5oPgorCisjaWZu
ZGVmCUZBTFNFCisjZGVmaW5lCUZBTFNFCSgwKQorI2VuZGlmCisKKyNpZm5kZWYJVFJVRQorI2Rl
ZmluZQlUUlVFCSghRkFMU0UpCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgWGRnQWxpYXMgWGRn
QWxpYXM7CisKK3N0cnVjdCBYZGdBbGlhcyAKK3sKKyAgY2hhciAqYWxpYXM7CisgIGNoYXIgKm1p
bWVfdHlwZTsKK307CisKK3N0cnVjdCBYZGdBbGlhc0xpc3QKK3sKKyAgc3RydWN0IFhkZ0FsaWFz
ICphbGlhc2VzOworICBpbnQgbl9hbGlhc2VzOworfTsKKworWGRnQWxpYXNMaXN0ICoKK194ZGdf
bWltZV9hbGlhc19saXN0X25ldyAodm9pZCkKK3sKKyAgWGRnQWxpYXNMaXN0ICpsaXN0OworCisg
IGxpc3QgPSBtYWxsb2MgKHNpemVvZiAoWGRnQWxpYXNMaXN0KSk7CisKKyAgbGlzdC0+YWxpYXNl
cyA9IE5VTEw7CisgIGxpc3QtPm5fYWxpYXNlcyA9IDA7CisKKyAgcmV0dXJuIGxpc3Q7Cit9CisK
K3ZvaWQgICAgICAgICAKK194ZGdfbWltZV9hbGlhc19saXN0X2ZyZWUgKFhkZ0FsaWFzTGlzdCAq
bGlzdCkKK3sKKyAgaW50IGk7CisKKyAgaWYgKGxpc3QtPmFsaWFzZXMpCisgICAgeworICAgICAg
Zm9yIChpID0gMDsgaSA8IGxpc3QtPm5fYWxpYXNlczsgaSsrKQorCXsKKwkgIGZyZWUgKGxpc3Qt
PmFsaWFzZXNbaV0uYWxpYXMpOworCSAgZnJlZSAobGlzdC0+YWxpYXNlc1tpXS5taW1lX3R5cGUp
OworCX0KKyAgICAgIGZyZWUgKGxpc3QtPmFsaWFzZXMpOworICAgIH0KKyAgZnJlZSAobGlzdCk7
Cit9CisKK3N0YXRpYyBpbnQKK2FsaWFzX2VudHJ5X2NtcCAoY29uc3Qgdm9pZCAqdjEsIGNvbnN0
IHZvaWQgKnYyKQoreworICByZXR1cm4gc3RyY21wICgoKFhkZ0FsaWFzICopdjEpLT5hbGlhcywg
KChYZGdBbGlhcyAqKXYyKS0+YWxpYXMpOworfQorCitjb25zdCBjaGFyICAqCitfeGRnX21pbWVf
YWxpYXNfbGlzdF9sb29rdXAgKFhkZ0FsaWFzTGlzdCAqbGlzdCwKKwkJCSAgICAgY29uc3QgY2hh
ciAgICphbGlhcykKK3sKKyAgWGRnQWxpYXMgKmVudHJ5OworICBYZGdBbGlhcyBrZXk7CisKKyAg
aWYgKGxpc3QtPm5fYWxpYXNlcyA+IDApCisgICAgeworICAgICAga2V5LmFsaWFzID0gKGNoYXIg
KilhbGlhczsKKyAgICAgIGtleS5taW1lX3R5cGUgPSBOVUxMOworCisgICAgICBlbnRyeSA9IGJz
ZWFyY2ggKCZrZXksIGxpc3QtPmFsaWFzZXMsIGxpc3QtPm5fYWxpYXNlcywKKwkJICAgICAgIHNp
emVvZiAoWGRnQWxpYXMpLCBhbGlhc19lbnRyeV9jbXApOworICAgICAgaWYgKGVudHJ5KQorICAg
ICAgICByZXR1cm4gZW50cnktPm1pbWVfdHlwZTsKKyAgICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9
CisKK3ZvaWQKK194ZGdfbWltZV9hbGlhc19yZWFkX2Zyb21fZmlsZSAoWGRnQWxpYXNMaXN0ICps
aXN0LAorCQkJCWNvbnN0IGNoYXIgICAqZmlsZV9uYW1lKQoreworICBGSUxFICpmaWxlOworICBj
aGFyIGxpbmVbMjU1XTsKKyAgaW50IGFsbG9jOworCisgIGZpbGUgPSBmb3BlbiAoZmlsZV9uYW1l
LCAiciIpOworCisgIGlmIChmaWxlID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIC8qIEZJWE1F
OiBOb3QgVVRGLTggc2FmZS4gIERvZXNuJ3Qgd29yayBpZiBsaW5lcyBhcmUgZ3JlYXRlciB0aGFu
IDI1NSBjaGFycy4KKyAgICogQmxhaCAqLworICBhbGxvYyA9IGxpc3QtPm5fYWxpYXNlcyArIDE2
OworICBsaXN0LT5hbGlhc2VzID0gcmVhbGxvYyAobGlzdC0+YWxpYXNlcywgYWxsb2MgKiBzaXpl
b2YgKFhkZ0FsaWFzKSk7CisgIHdoaWxlIChmZ2V0cyAobGluZSwgMjU1LCBmaWxlKSAhPSBOVUxM
KQorICAgIHsKKyAgICAgIGNoYXIgKnNlcDsKKyAgICAgIGlmIChsaW5lWzBdID09ICcjJykKKwlj
b250aW51ZTsKKworICAgICAgc2VwID0gc3RyY2hyIChsaW5lLCAnICcpOworICAgICAgaWYgKHNl
cCA9PSBOVUxMKQorCWNvbnRpbnVlOworICAgICAgKihzZXArKykgPSAnXDAwMCc7CisgICAgICBz
ZXBbc3RybGVuIChzZXApIC0xXSA9ICdcMDAwJzsKKyAgICAgIGlmIChsaXN0LT5uX2FsaWFzZXMg
PT0gYWxsb2MpCisJeworCSAgYWxsb2MgPDw9IDE7CisJICBsaXN0LT5hbGlhc2VzID0gcmVhbGxv
YyAobGlzdC0+YWxpYXNlcywgCisJCQkJICAgYWxsb2MgKiBzaXplb2YgKFhkZ0FsaWFzKSk7CisJ
fQorICAgICAgbGlzdC0+YWxpYXNlc1tsaXN0LT5uX2FsaWFzZXNdLmFsaWFzID0gc3RyZHVwIChs
aW5lKTsKKyAgICAgIGxpc3QtPmFsaWFzZXNbbGlzdC0+bl9hbGlhc2VzXS5taW1lX3R5cGUgPSBz
dHJkdXAgKHNlcCk7CisgICAgICBsaXN0LT5uX2FsaWFzZXMrKzsKKyAgICB9CisgIGxpc3QtPmFs
aWFzZXMgPSByZWFsbG9jIChsaXN0LT5hbGlhc2VzLCAKKwkJCSAgIGxpc3QtPm5fYWxpYXNlcyAq
IHNpemVvZiAoWGRnQWxpYXMpKTsKKworICBmY2xvc2UgKGZpbGUpOyAgCisgIAorICBpZiAobGlz
dC0+bl9hbGlhc2VzID4gMSkKKyAgICBxc29ydCAobGlzdC0+YWxpYXNlcywgbGlzdC0+bl9hbGlh
c2VzLCAKKyAgICAgICAgICAgc2l6ZW9mIChYZGdBbGlhcyksIGFsaWFzX2VudHJ5X2NtcCk7Cit9
CisKKwordm9pZAorX3hkZ19taW1lX2FsaWFzX2xpc3RfZHVtcCAoWGRnQWxpYXNMaXN0ICpsaXN0
KQoreworICBpbnQgaTsKKworICBpZiAobGlzdC0+YWxpYXNlcykKKyAgICB7CisgICAgICBmb3Ig
KGkgPSAwOyBpIDwgbGlzdC0+bl9hbGlhc2VzOyBpKyspCisJeworCSAgcHJpbnRmICgiJXMgJXNc
biIsIAorCQkgIGxpc3QtPmFsaWFzZXNbaV0uYWxpYXMsCisJCSAgbGlzdC0+YWxpYXNlc1tpXS5t
aW1lX3R5cGUpOworCX0KKyAgICB9Cit9CisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkveGRnbWltZS9zcmMveGRnbWltZWFsaWFzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS94ZGdtaW1l
L3NyYy94ZGdtaW1lYWxpYXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uM2MyODAxMmRjMzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS94ZGdt
aW1lL3NyYy94ZGdtaW1lYWxpYXMuaApAQCAtMCwwICsxLDUxIEBACisvKiAtKi0gbW9kZTogQzsg
Yy1maWxlLXN0eWxlOiAiZ251IiAtKi0gKi8KKy8qIHhkZ21pbWVhbGlhcy5oOiBQcml2YXRlIGZp
bGUuICBEYXRhc3RydWN0dXJlIGZvciBzdG9yaW5nIHRoZSBhbGlhc2VzLgorICoKKyAqIE1vcmUg
aW5mbyBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc3RhbmRhcmRz
LworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCAgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0
IChDKSAyMDAgIE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPgorICoKKyAqIExp
Y2Vuc2VkIHVuZGVyIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgdmVyc2lvbiAyLjAKKyAqIE9y
IHVuZGVyIHRoZSBmb2xsb3dpbmcgdGVybXM6CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZSBHTlUKKyAqIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0g
U3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRl
ZiBfX1hER19NSU1FX0FMSUFTX0hfXworI2RlZmluZSBfX1hER19NSU1FX0FMSUFTX0hfXworCisj
aW5jbHVkZSAieGRnbWltZS5oIgorCit0eXBlZGVmIHN0cnVjdCBYZGdBbGlhc0xpc3QgWGRnQWxp
YXNMaXN0OworCisjaWZkZWYgWERHX1BSRUZJWAorI2RlZmluZSBfeGRnX21pbWVfYWxpYXNfcmVh
ZF9mcm9tX2ZpbGUgICAgICAgIFhER19SRVNFUlZFRF9FTlRSWShhbGlhc19yZWFkX2Zyb21fZmls
ZSkKKyNkZWZpbmUgX3hkZ19taW1lX2FsaWFzX2xpc3RfbmV3ICAgICAgICAgICAgICBYREdfUkVT
RVJWRURfRU5UUlkoYWxpYXNfbGlzdF9uZXcpCisjZGVmaW5lIF94ZGdfbWltZV9hbGlhc19saXN0
X2ZyZWUgICAgICAgICAgICAgWERHX1JFU0VSVkVEX0VOVFJZKGFsaWFzX2xpc3RfZnJlZSkKKyNk
ZWZpbmUgX3hkZ19taW1lX2FsaWFzX2xpc3RfbG9va3VwICAgICAgICAgICBYREdfUkVTRVJWRURf
RU5UUlkoYWxpYXNfbGlzdF9sb29rdXApCisjZGVmaW5lIF94ZGdfbWltZV9hbGlhc19saXN0X2R1
bXAgICAgICAgICAgICAgWERHX1JFU0VSVkVEX0VOVFJZKGFsaWFzX2xpc3RfZHVtcCkKKyNlbmRp
ZgorCit2b2lkICAgICAgICAgIF94ZGdfbWltZV9hbGlhc19yZWFkX2Zyb21fZmlsZSAoWGRnQWxp
YXNMaXN0ICpsaXN0LAorCQkJCQkgICAgICBjb25zdCBjaGFyICAgKmZpbGVfbmFtZSk7CitYZGdB
bGlhc0xpc3QgKl94ZGdfbWltZV9hbGlhc19saXN0X25ldyAgICAgICAodm9pZCk7Cit2b2lkICAg
ICAgICAgIF94ZGdfbWltZV9hbGlhc19saXN0X2ZyZWUgICAgICAoWGRnQWxpYXNMaXN0ICpsaXN0
KTsKK2NvbnN0IGNoYXIgICAqX3hkZ19taW1lX2FsaWFzX2xpc3RfbG9va3VwICAgIChYZGdBbGlh
c0xpc3QgKmxpc3QsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgICphbGlhcyk7Cit2b2lkICAgICAg
ICAgIF94ZGdfbWltZV9hbGlhc19saXN0X2R1bXAgICAgICAoWGRnQWxpYXNMaXN0ICpsaXN0KTsK
KworI2VuZGlmIC8qIF9fWERHX01JTUVfQUxJQVNfSF9fICovCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS94ZGdtaW1lL3NyYy94ZGdtaW1lY2FjaGUuYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L3hkZ21pbWUvc3JjL3hkZ21pbWVjYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5kNzhkMDIyM2FhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L3hkZ21pbWUvc3JjL3hkZ21pbWVjYWNoZS5jCkBAIC0wLDAgKzEsMTE0OSBAQAorLyogLSot
IG1vZGU6IEM7IGMtZmlsZS1zdHlsZTogImdudSIgLSotICovCisvKiB4ZGdtaW1lYWxpYXMuYzog
UHJpdmF0ZSBmaWxlLiAgbW1hcHBhYmxlIGNhY2hlcyBmb3IgbWltZSBkYXRhCisgKgorICogTW9y
ZSBpbmZvIGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zdGFuZGFy
ZHMvCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1ICBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5A
cmVkaGF0LmNvbT4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQWNhZGVtaWMgRnJlZSBMaWNl
bnNlIHZlcnNpb24gMi4wCisgKiBPciB1bmRlciB0aGUgZm9sbG93aW5nIHRlcm1zOgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4J
IFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY21ha2Vjb25m
aWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4K
KyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5p
c3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmbm1hdGNoLmg+CisjaW5jbHVk
ZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+IC8qIGZvciBudG9obC9udG9o
cyAqLworCisjaWZkZWYgSEFWRV9NTUFQCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNlbHNlCisj
d2FybmluZyBCdWlsZGluZyB4ZGdtaW1lIHdpdGhvdXQgTU1BUCBzdXBwb3J0LiBCaW5hcnkgIm1p
bWUuY2FjaGUiIGZpbGVzIHdpbGwgbm90IGJlIHVzZWQuCisjZW5kaWYKKworI2luY2x1ZGUgPHN5
cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlICJ4ZGdtaW1lY2Fj
aGUuaCIKKyNpbmNsdWRlICJ4ZGdtaW1laW50LmgiCisKKyNpZm5kZWYgTUFYCisjZGVmaW5lIE1B
WChhLGIpICgoYSkgPiAoYikgPyAoYSkgOiAoYikpCisjZW5kaWYKKworI2lmbmRlZglGQUxTRQor
I2RlZmluZQlGQUxTRQkoMCkKKyNlbmRpZgorCisjaWZuZGVmCVRSVUUKKyNkZWZpbmUJVFJVRQko
IUZBTFNFKQorI2VuZGlmCisKKyNpZm5kZWYgX09fQklOQVJZCisjZGVmaW5lIF9PX0JJTkFSWSAw
CisjZW5kaWYKKworI2lmbmRlZiBNQVBfRkFJTEVECisjZGVmaW5lIE1BUF9GQUlMRUQgKCh2b2lk
ICopIC0xKQorI2VuZGlmCisKKyNkZWZpbmUgTUFKT1JfVkVSU0lPTiAxCisjZGVmaW5lIE1JTk9S
X1ZFUlNJT05fTUlOIDEKKyNkZWZpbmUgTUlOT1JfVkVSU0lPTl9NQVggMgorCitzdHJ1Y3QgX1hk
Z01pbWVDYWNoZQoreworICBpbnQgcmVmX2NvdW50OworICBpbnQgbWlub3I7CisKKyAgc2l6ZV90
ICBzaXplOworICBjaGFyICAgKmJ1ZmZlcjsKK307CisKKyNkZWZpbmUgR0VUX1VJTlQxNihjYWNo
ZSxvZmZzZXQpIChudG9ocygqKHhkZ191aW50MTZfdCopKChjYWNoZSkgKyAob2Zmc2V0KSkpKQor
I2RlZmluZSBHRVRfVUlOVDMyKGNhY2hlLG9mZnNldCkgKG50b2hsKCooeGRnX3VpbnQzMl90Kiko
KGNhY2hlKSArIChvZmZzZXQpKSkpCisKK1hkZ01pbWVDYWNoZSAqCitfeGRnX21pbWVfY2FjaGVf
cmVmIChYZGdNaW1lQ2FjaGUgKmNhY2hlKQoreworICBjYWNoZS0+cmVmX2NvdW50Kys7CisgIHJl
dHVybiBjYWNoZTsKK30KKwordm9pZAorX3hkZ19taW1lX2NhY2hlX3VucmVmIChYZGdNaW1lQ2Fj
aGUgKmNhY2hlKQoreworICBjYWNoZS0+cmVmX2NvdW50LS07CisKKyAgaWYgKGNhY2hlLT5yZWZf
Y291bnQgPT0gMCkKKyAgICB7CisjaWZkZWYgSEFWRV9NTUFQCisgICAgICBtdW5tYXAgKGNhY2hl
LT5idWZmZXIsIGNhY2hlLT5zaXplKTsKKyNlbmRpZgorICAgICAgZnJlZSAoY2FjaGUpOworICAg
IH0KK30KKworWGRnTWltZUNhY2hlICoKK194ZGdfbWltZV9jYWNoZV9uZXdfZnJvbV9maWxlIChj
b25zdCBjaGFyICpmaWxlX25hbWUpCit7CisgIFhkZ01pbWVDYWNoZSAqY2FjaGUgPSBOVUxMOwor
CisjaWZkZWYgSEFWRV9NTUFQCisgIGludCBmZCA9IC0xOworICBzdHJ1Y3Qgc3RhdCBzdDsKKyAg
Y2hhciAqYnVmZmVyID0gTlVMTDsKKyAgaW50IG1pbm9yOworCisgIC8qIE9wZW4gdGhlIGZpbGUg
YW5kIG1hcCBpdCBpbnRvIG1lbW9yeSAqLworICBkbworICAgIGZkID0gb3BlbiAoZmlsZV9uYW1l
LCBPX1JET05MWXxfT19CSU5BUlksIDApOworICB3aGlsZSAoZmQgPT0gLTEgJiYgZXJybm8gPT0g
RUlOVFIpOworCisgIGlmIChmZCA8IDApCisgICAgcmV0dXJuIE5VTEw7CisgIAorICBpZiAoZnN0
YXQgKGZkLCAmc3QpIDwgMCB8fCBzdC5zdF9zaXplIDwgNCkKKyAgICBnb3RvIGRvbmU7CisKKyAg
YnVmZmVyID0gKGNoYXIgKikgbW1hcCAoTlVMTCwgc3Quc3Rfc2l6ZSwgUFJPVF9SRUFELCBNQVBf
U0hBUkVELCBmZCwgMCk7CisKKyAgaWYgKGJ1ZmZlciA9PSBNQVBfRkFJTEVEKQorICAgIGdvdG8g
ZG9uZTsKKworICBtaW5vciA9IEdFVF9VSU5UMTYgKGJ1ZmZlciwgMik7CisgIC8qIFZlcmlmeSB2
ZXJzaW9uICovCisgIGlmIChHRVRfVUlOVDE2IChidWZmZXIsIDApICE9IE1BSk9SX1ZFUlNJT04g
fHwKKyAgICAgIChtaW5vciA8IE1JTk9SX1ZFUlNJT05fTUlOIHx8CisgICAgICAgbWlub3IgPiBN
SU5PUl9WRVJTSU9OX01BWCkpCisgICAgeworICAgICAgbXVubWFwIChidWZmZXIsIHN0LnN0X3Np
emUpOworCisgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAKKyAgY2FjaGUgPSAoWGRnTWltZUNh
Y2hlICopIG1hbGxvYyAoc2l6ZW9mIChYZGdNaW1lQ2FjaGUpKTsKKyAgY2FjaGUtPm1pbm9yID0g
bWlub3I7CisgIGNhY2hlLT5yZWZfY291bnQgPSAxOworICBjYWNoZS0+YnVmZmVyID0gYnVmZmVy
OworICBjYWNoZS0+c2l6ZSA9IHN0LnN0X3NpemU7CisKKyBkb25lOgorICBpZiAoZmQgIT0gLTEp
CisgICAgY2xvc2UgKGZkKTsKKworI2VuZGlmICAvKiBIQVZFX01NQVAgKi8KKworICByZXR1cm4g
Y2FjaGU7Cit9CisKK3N0YXRpYyBpbnQKK2NhY2hlX21hZ2ljX21hdGNobGV0X2NvbXBhcmVfdG9f
ZGF0YSAoWGRnTWltZUNhY2hlICpjYWNoZSwgCisJCQkJICAgICAgeGRnX3VpbnQzMl90ICBvZmZz
ZXQsCisJCQkJICAgICAgY29uc3Qgdm9pZCAgICpkYXRhLAorCQkJCSAgICAgIHNpemVfdCAgICAg
ICAgbGVuKQoreworICB4ZGdfdWludDMyX3QgcmFuZ2Vfc3RhcnQgPSBHRVRfVUlOVDMyIChjYWNo
ZS0+YnVmZmVyLCBvZmZzZXQpOworICB4ZGdfdWludDMyX3QgcmFuZ2VfbGVuZ3RoID0gR0VUX1VJ
TlQzMiAoY2FjaGUtPmJ1ZmZlciwgb2Zmc2V0ICsgNCk7CisgIHhkZ191aW50MzJfdCBkYXRhX2xl
bmd0aCA9IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIG9mZnNldCArIDEyKTsKKyAgeGRnX3Vp
bnQzMl90IGRhdGFfb2Zmc2V0ID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgb2Zmc2V0ICsg
MTYpOworICB4ZGdfdWludDMyX3QgbWFza19vZmZzZXQgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVm
ZmVyLCBvZmZzZXQgKyAyMCk7CisgIAorICBpbnQgaSwgajsKKworICBmb3IgKGkgPSByYW5nZV9z
dGFydDsgaSA8IHJhbmdlX3N0YXJ0ICsgcmFuZ2VfbGVuZ3RoOyBpKyspCisgICAgeworICAgICAg
aW50IHZhbGlkX21hdGNobGV0ID0gVFJVRTsKKyAgICAgIAorICAgICAgaWYgKGkgKyBkYXRhX2xl
bmd0aCA+IGxlbikKKwlyZXR1cm4gRkFMU0U7CisKKyAgICAgIGlmIChtYXNrX29mZnNldCkKKwl7
CisJICBmb3IgKGogPSAwOyBqIDwgZGF0YV9sZW5ndGg7IGorKykKKwkgICAgeworCSAgICAgIGlm
ICgoKCh1bnNpZ25lZCBjaGFyICopY2FjaGUtPmJ1ZmZlcilbZGF0YV9vZmZzZXQgKyBqXSAmICgo
dW5zaWduZWQgY2hhciAqKWNhY2hlLT5idWZmZXIpW21hc2tfb2Zmc2V0ICsgal0pICE9CisJCSAg
KCgoKHVuc2lnbmVkIGNoYXIgKikgZGF0YSlbaiArIGldKSAmICgodW5zaWduZWQgY2hhciAqKWNh
Y2hlLT5idWZmZXIpW21hc2tfb2Zmc2V0ICsgal0pKQorCQl7CisJCSAgdmFsaWRfbWF0Y2hsZXQg
PSBGQUxTRTsKKwkJICBicmVhazsKKwkJfQorCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkg
IHZhbGlkX21hdGNobGV0ID0gbWVtY21wKGNhY2hlLT5idWZmZXIgKyBkYXRhX29mZnNldCwgZGF0
YSArIGksIGRhdGFfbGVuZ3RoKSA9PSAwOworCX0KKworICAgICAgaWYgKHZhbGlkX21hdGNobGV0
KQorCXJldHVybiBUUlVFOworICAgIH0KKyAgCisgIHJldHVybiBGQUxTRTsgIAorfQorCitzdGF0
aWMgaW50CitjYWNoZV9tYWdpY19tYXRjaGxldF9jb21wYXJlIChYZGdNaW1lQ2FjaGUgKmNhY2hl
LCAKKwkJCSAgICAgIHhkZ191aW50MzJfdCAgb2Zmc2V0LAorCQkJICAgICAgY29uc3Qgdm9pZCAg
ICpkYXRhLAorCQkJICAgICAgc2l6ZV90ICAgICAgICBsZW4pCit7CisgIHhkZ191aW50MzJfdCBu
X2NoaWxkcmVuID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgb2Zmc2V0ICsgMjQpOworICB4
ZGdfdWludDMyX3QgY2hpbGRfb2Zmc2V0ID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgb2Zm
c2V0ICsgMjgpOworCisgIGludCBpOworICAKKyAgaWYgKGNhY2hlX21hZ2ljX21hdGNobGV0X2Nv
bXBhcmVfdG9fZGF0YSAoY2FjaGUsIG9mZnNldCwgZGF0YSwgbGVuKSkKKyAgICB7CisgICAgICBp
ZiAobl9jaGlsZHJlbiA9PSAwKQorCXJldHVybiBUUlVFOworICAgICAgCisgICAgICBmb3IgKGkg
PSAwOyBpIDwgbl9jaGlsZHJlbjsgaSsrKQorCXsKKwkgIGlmIChjYWNoZV9tYWdpY19tYXRjaGxl
dF9jb21wYXJlIChjYWNoZSwgY2hpbGRfb2Zmc2V0ICsgMzIgKiBpLAorCQkJCQkgICAgZGF0YSwg
bGVuKSkKKwkgICAgcmV0dXJuIFRSVUU7CisJfQorICAgIH0KKyAgCisgIHJldHVybiBGQUxTRTsg
IAorfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitjYWNoZV9tYWdpY19jb21wYXJlX3RvX2RhdGEg
KFhkZ01pbWVDYWNoZSAqY2FjaGUsIAorCQkJICAgICB4ZGdfdWludDMyX3QgIG9mZnNldCwKKwkJ
CSAgICAgY29uc3Qgdm9pZCAgICpkYXRhLCAKKwkJCSAgICAgc2l6ZV90ICAgICAgICBsZW4sIAor
CQkJICAgICBpbnQgICAgICAgICAgKnByaW8pCit7CisgIHhkZ191aW50MzJfdCBwcmlvcml0eSA9
IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIG9mZnNldCk7CisgIHhkZ191aW50MzJfdCBtaW1l
dHlwZV9vZmZzZXQgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCBvZmZzZXQgKyA0KTsKKyAg
eGRnX3VpbnQzMl90IG5fbWF0Y2hsZXRzID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgb2Zm
c2V0ICsgOCk7CisgIHhkZ191aW50MzJfdCBtYXRjaGxldF9vZmZzZXQgPSBHRVRfVUlOVDMyIChj
YWNoZS0+YnVmZmVyLCBvZmZzZXQgKyAxMik7CisKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsg
aSA8IG5fbWF0Y2hsZXRzOyBpKyspCisgICAgeworICAgICAgaWYgKGNhY2hlX21hZ2ljX21hdGNo
bGV0X2NvbXBhcmUgKGNhY2hlLCBtYXRjaGxldF9vZmZzZXQgKyBpICogMzIsIAorCQkJCQlkYXRh
LCBsZW4pKQorCXsKKwkgICpwcmlvID0gcHJpb3JpdHk7CisJICAKKwkgIHJldHVybiBjYWNoZS0+
YnVmZmVyICsgbWltZXR5cGVfb2Zmc2V0OworCX0KKyAgICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9
CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2NhY2hlX21hZ2ljX2xvb2t1cF9kYXRhIChYZGdNaW1l
Q2FjaGUgKmNhY2hlLCAKKwkJCSBjb25zdCB2b2lkICAgKmRhdGEsIAorCQkJIHNpemVfdCAgICAg
ICAgbGVuLCAKKwkJCSBpbnQgICAgICAgICAgKnByaW8sCisJCQkgY29uc3QgY2hhciAgICptaW1l
X3R5cGVzW10sCisJCQkgaW50ICAgICAgICAgICBuX21pbWVfdHlwZXMpCit7CisgIHhkZ191aW50
MzJfdCBsaXN0X29mZnNldDsKKyAgeGRnX3VpbnQzMl90IG5fZW50cmllczsKKyAgeGRnX3VpbnQz
Ml90IG9mZnNldDsKKworICBpbnQgaiwgbjsKKworICAqcHJpbyA9IDA7CisKKyAgbGlzdF9vZmZz
ZXQgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCAyNCk7CisgIG5fZW50cmllcyA9IEdFVF9V
SU5UMzIgKGNhY2hlLT5idWZmZXIsIGxpc3Rfb2Zmc2V0KTsKKyAgb2Zmc2V0ID0gR0VUX1VJTlQz
MiAoY2FjaGUtPmJ1ZmZlciwgbGlzdF9vZmZzZXQgKyA4KTsKKyAgCisgIGZvciAoaiA9IDA7IGog
PCBuX2VudHJpZXM7IGorKykKKyAgICB7CisgICAgICBjb25zdCBjaGFyICptYXRjaDsKKworICAg
ICAgbWF0Y2ggPSBjYWNoZV9tYWdpY19jb21wYXJlX3RvX2RhdGEgKGNhY2hlLCBvZmZzZXQgKyAx
NiAqIGosIAorCQkJCQkgICBkYXRhLCBsZW4sIHByaW8pOworICAgICAgaWYgKG1hdGNoKQorCXJl
dHVybiBtYXRjaDsKKyAgICAgIGVsc2UKKwl7CisJICB4ZGdfdWludDMyX3QgbWltZXR5cGVfb2Zm
c2V0OworCSAgY29uc3QgY2hhciAqbm9uX21hdGNoOworCSAgCisJICBtaW1ldHlwZV9vZmZzZXQg
PSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCBvZmZzZXQgKyAxNiAqIGogKyA0KTsKKwkgIG5v
bl9tYXRjaCA9IGNhY2hlLT5idWZmZXIgKyBtaW1ldHlwZV9vZmZzZXQ7CisKKwkgIGZvciAobiA9
IDA7IG4gPCBuX21pbWVfdHlwZXM7IG4rKykKKwkgICAgeworCSAgICAgIGlmIChtaW1lX3R5cGVz
W25dICYmIAorCQkgIF94ZGdfbWltZV9taW1lX3R5cGVfZXF1YWwgKG1pbWVfdHlwZXNbbl0sIG5v
bl9tYXRjaCkpCisJCW1pbWVfdHlwZXNbbl0gPSBOVUxMOworCSAgICB9CisJfQorICAgIH0KKwor
ICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorY2FjaGVfYWxpYXNfbG9v
a3VwIChjb25zdCBjaGFyICphbGlhcykKK3sKKyAgY29uc3QgY2hhciAqcHRyOworICBpbnQgaSwg
bWluLCBtYXgsIG1pZCwgY21wOworCisgIGZvciAoaSA9IDA7IF9jYWNoZXNbaV07IGkrKykKKyAg
ICB7CisgICAgICBYZGdNaW1lQ2FjaGUgKmNhY2hlID0gX2NhY2hlc1tpXTsKKyAgICAgIHhkZ191
aW50MzJfdCBsaXN0X29mZnNldCA9IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIDQpOworICAg
ICAgeGRnX3VpbnQzMl90IG5fZW50cmllcyA9IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIGxp
c3Rfb2Zmc2V0KTsKKyAgICAgIHhkZ191aW50MzJfdCBvZmZzZXQ7CisKKyAgICAgIG1pbiA9IDA7
IAorICAgICAgbWF4ID0gbl9lbnRyaWVzIC0gMTsKKyAgICAgIHdoaWxlIChtYXggPj0gbWluKSAK
Kwl7CisJICBtaWQgPSAobWluICsgbWF4KSAvIDI7CisKKwkgIG9mZnNldCA9IEdFVF9VSU5UMzIg
KGNhY2hlLT5idWZmZXIsIGxpc3Rfb2Zmc2V0ICsgNCArIDggKiBtaWQpOworCSAgcHRyID0gY2Fj
aGUtPmJ1ZmZlciArIG9mZnNldDsKKwkgIGNtcCA9IHN0cmNtcCAocHRyLCBhbGlhcyk7CisJICAK
KwkgIGlmIChjbXAgPCAwKQorCSAgICBtaW4gPSBtaWQgKyAxOworCSAgZWxzZSBpZiAoY21wID4g
MCkKKwkgICAgbWF4ID0gbWlkIC0gMTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIG9mZnNldCA9
IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIGxpc3Rfb2Zmc2V0ICsgNCArIDggKiBtaWQgKyA0
KTsKKwkgICAgICByZXR1cm4gY2FjaGUtPmJ1ZmZlciArIG9mZnNldDsKKwkgICAgfQorCX0KKyAg
ICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hh
ciAqbWltZTsKKyAgaW50IHdlaWdodDsKK30gTWltZVdlaWdodDsKKworc3RhdGljIGludAorY2Fj
aGVfZ2xvYl9sb29rdXBfbGl0ZXJhbCAoY29uc3QgY2hhciAqZmlsZV9uYW1lLAorCQkJICAgY29u
c3QgY2hhciAqbWltZV90eXBlc1tdLAorCQkJICAgaW50ICAgICAgICAgbl9taW1lX3R5cGVzLAor
CQkJICAgaW50ICAgICAgICAgY2FzZV9zZW5zaXRpdmVfY2hlY2spCit7CisgIGNvbnN0IGNoYXIg
KnB0cjsKKyAgaW50IGksIG1pbiwgbWF4LCBtaWQsIGNtcDsKKworICBmb3IgKGkgPSAwOyBfY2Fj
aGVzW2ldOyBpKyspCisgICAgeworICAgICAgWGRnTWltZUNhY2hlICpjYWNoZSA9IF9jYWNoZXNb
aV07CisgICAgICB4ZGdfdWludDMyX3QgbGlzdF9vZmZzZXQgPSBHRVRfVUlOVDMyIChjYWNoZS0+
YnVmZmVyLCAxMik7CisgICAgICB4ZGdfdWludDMyX3Qgbl9lbnRyaWVzID0gR0VUX1VJTlQzMiAo
Y2FjaGUtPmJ1ZmZlciwgbGlzdF9vZmZzZXQpOworICAgICAgeGRnX3VpbnQzMl90IG9mZnNldDsK
KworICAgICAgbWluID0gMDsgCisgICAgICBtYXggPSBuX2VudHJpZXMgLSAxOworICAgICAgd2hp
bGUgKG1heCA+PSBtaW4pIAorCXsKKwkgIG1pZCA9IChtaW4gKyBtYXgpIC8gMjsKKworCSAgb2Zm
c2V0ID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgbGlzdF9vZmZzZXQgKyA0ICsgMTIgKiBt
aWQpOworCSAgcHRyID0gY2FjaGUtPmJ1ZmZlciArIG9mZnNldDsKKwkgIGNtcCA9IHN0cmNtcCAo
cHRyLCBmaWxlX25hbWUpOworCisJICBpZiAoY21wIDwgMCkKKwkgICAgbWluID0gbWlkICsgMTsK
KwkgIGVsc2UgaWYgKGNtcCA+IDApCisJICAgIG1heCA9IG1pZCAtIDE7CisJICBlbHNlCisJICAg
IHsKKwkgICAgICBpbnQgd2VpZ2h0ID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgbGlzdF9v
ZmZzZXQgKyA0ICsgMTIgKiBtaWQgKyA4KTsKKwkgICAgICBpbnQgY2FzZV9zZW5zaXRpdmUgPSB3
ZWlnaHQgJiAweDEwMDsKKwkgICAgICB3ZWlnaHQgPSB3ZWlnaHQgJiAweGZmOworCisJICAgICAg
aWYgKGNhc2Vfc2Vuc2l0aXZlX2NoZWNrIHx8ICFjYXNlX3NlbnNpdGl2ZSkKKwkJeworCQkgIG9m
ZnNldCA9IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIGxpc3Rfb2Zmc2V0ICsgNCArIDEyICog
bWlkICsgNCk7CisJCSAgbWltZV90eXBlc1swXSA9IChjb25zdCBjaGFyICopKGNhY2hlLT5idWZm
ZXIgKyBvZmZzZXQpOworCisJCSAgcmV0dXJuIDE7CisJCX0KKwkgICAgICByZXR1cm4gMDsKKwkg
ICAgfQorCX0KKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2NhY2hlX2ds
b2JfbG9va3VwX2ZubWF0Y2ggKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwKKwkJCSAgIE1pbWVXZWln
aHQgIG1pbWVfdHlwZXNbXSwKKwkJCSAgIGludCAgICAgICAgIG5fbWltZV90eXBlcywKKwkJCSAg
IGludCAgICAgICAgIGNhc2Vfc2Vuc2l0aXZlX2NoZWNrKQoreworICBjb25zdCBjaGFyICptaW1l
X3R5cGU7CisgIGNvbnN0IGNoYXIgKnB0cjsKKworICBpbnQgaSwgaiwgbjsKKworICBuID0gMDsK
KyAgZm9yIChpID0gMDsgX2NhY2hlc1tpXTsgaSsrKQorICAgIHsKKyAgICAgIFhkZ01pbWVDYWNo
ZSAqY2FjaGUgPSBfY2FjaGVzW2ldOworCisgICAgICB4ZGdfdWludDMyX3QgbGlzdF9vZmZzZXQg
PSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCAyMCk7CisgICAgICB4ZGdfdWludDMyX3Qgbl9l
bnRyaWVzID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgbGlzdF9vZmZzZXQpOworCisgICAg
ICBmb3IgKGogPSAwOyBqIDwgbl9lbnRyaWVzICYmIG4gPCBuX21pbWVfdHlwZXM7IGorKykKKwl7
CisJICB4ZGdfdWludDMyX3Qgb2Zmc2V0ID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgbGlz
dF9vZmZzZXQgKyA0ICsgMTIgKiBqKTsKKwkgIHhkZ191aW50MzJfdCBtaW1ldHlwZV9vZmZzZXQg
PSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCBsaXN0X29mZnNldCArIDQgKyAxMiAqIGogKyA0
KTsKKwkgIGludCB3ZWlnaHQgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCBsaXN0X29mZnNl
dCArIDQgKyAxMiAqIGogKyA4KTsKKwkgIGludCBjYXNlX3NlbnNpdGl2ZSA9IHdlaWdodCAmIDB4
MTAwOworCSAgd2VpZ2h0ID0gd2VpZ2h0ICYgMHhmZjsKKwkgIHB0ciA9IGNhY2hlLT5idWZmZXIg
KyBvZmZzZXQ7CisJICBtaW1lX3R5cGUgPSBjYWNoZS0+YnVmZmVyICsgbWltZXR5cGVfb2Zmc2V0
OworCSAgaWYgKGNhc2Vfc2Vuc2l0aXZlX2NoZWNrIHx8ICFjYXNlX3NlbnNpdGl2ZSkKKwkgICAg
eworCSAgICAgIC8qIEZJWE1FOiBOb3QgVVRGLTggc2FmZSAqLworCSAgICAgIGlmIChmbm1hdGNo
IChwdHIsIGZpbGVfbmFtZSwgMCkgPT0gMCkKKwkgICAgICAgIHsKKwkgICAgICAgICAgbWltZV90
eXBlc1tuXS5taW1lID0gbWltZV90eXBlOworCSAgICAgICAgICBtaW1lX3R5cGVzW25dLndlaWdo
dCA9IHdlaWdodDsKKwkgICAgICAgICAgbisrOworCSAgICAgICAgfQorCSAgICB9CisJfQorCisg
ICAgICBpZiAobiA+IDApCisJcmV0dXJuIG47CisgICAgfQorICAKKyAgcmV0dXJuIDA7Cit9CisK
K3N0YXRpYyBpbnQKK2NhY2hlX2dsb2Jfbm9kZV9sb29rdXBfc3VmZml4IChYZGdNaW1lQ2FjaGUg
ICpjYWNoZSwKKwkJCSAgICAgICB4ZGdfdWludDMyX3QgICBuX2VudHJpZXMsCisJCQkgICAgICAg
eGRnX3VpbnQzMl90ICAgb2Zmc2V0LAorCQkJICAgICAgIGNvbnN0IGNoYXIgICAgKmZpbGVfbmFt
ZSwKKwkJCSAgICAgICBpbnQgICAgICAgICAgICBsZW4sCisJCQkgICAgICAgaW50ICAgICAgICAg
ICAgY2FzZV9zZW5zaXRpdmVfY2hlY2ssCisJCQkgICAgICAgTWltZVdlaWdodCAgICAgbWltZV90
eXBlc1tdLAorCQkJICAgICAgIGludCAgICAgICAgICAgIG5fbWltZV90eXBlcykKK3sKKyAgeGRn
X3VuaWNoYXJfdCBjaGFyYWN0ZXI7CisgIHhkZ191bmljaGFyX3QgbWF0Y2hfY2hhcjsKKyAgeGRn
X3VpbnQzMl90IG1pbWV0eXBlX29mZnNldDsKKyAgeGRnX3VpbnQzMl90IG5fY2hpbGRyZW47Cisg
IHhkZ191aW50MzJfdCBjaGlsZF9vZmZzZXQ7IAorICBpbnQgd2VpZ2h0OworICBpbnQgY2FzZV9z
ZW5zaXRpdmU7CisKKyAgaW50IG1pbiwgbWF4LCBtaWQsIG4sIGk7CisKKyAgY2hhcmFjdGVyID0g
ZmlsZV9uYW1lW2xlbiAtIDFdOworCisgIGFzc2VydCAoY2hhcmFjdGVyICE9IDApOworCisgIG1p
biA9IDA7CisgIG1heCA9IG5fZW50cmllcyAtIDE7CisgIHdoaWxlIChtYXggPj0gbWluKQorICAg
IHsKKyAgICAgIG1pZCA9IChtaW4gKyBtYXgpIC8gIDI7CisgICAgICBtYXRjaF9jaGFyID0gR0VU
X1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgb2Zmc2V0ICsgMTIgKiBtaWQpOworICAgICAgaWYgKG1h
dGNoX2NoYXIgPCBjaGFyYWN0ZXIpCisJbWluID0gbWlkICsgMTsKKyAgICAgIGVsc2UgaWYgKG1h
dGNoX2NoYXIgPiBjaGFyYWN0ZXIpCisJbWF4ID0gbWlkIC0gMTsKKyAgICAgIGVsc2UgCisJewor
ICAgICAgICAgIGxlbi0tOworICAgICAgICAgIG4gPSAwOworICAgICAgICAgIG5fY2hpbGRyZW4g
PSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCBvZmZzZXQgKyAxMiAqIG1pZCArIDQpOworICAg
ICAgICAgIGNoaWxkX29mZnNldCA9IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIG9mZnNldCAr
IDEyICogbWlkICsgOCk7CisgICAgICAKKyAgICAgICAgICBpZiAobGVuID4gMCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgbiA9IGNhY2hlX2dsb2Jfbm9kZV9sb29rdXBfc3VmZml4IChj
YWNoZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bl9jaGlsZHJlbiwgY2hpbGRfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZSwgbGVuLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlX3NlbnNpdGl2ZV9jaGVjaywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW1lX3R5cGVzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fbWltZV90
eXBlcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKG4gPT0gMCkKKyAgICAgICAgICAg
IHsKKwkgICAgICBpID0gMDsKKwkgICAgICB3aGlsZSAobiA8IG5fbWltZV90eXBlcyAmJiBpIDwg
bl9jaGlsZHJlbikKKwkJeworCQkgIG1hdGNoX2NoYXIgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVm
ZmVyLCBjaGlsZF9vZmZzZXQgKyAxMiAqIGkpOworCQkgIGlmIChtYXRjaF9jaGFyICE9IDApCisJ
CSAgICBicmVhazsKKworCQkgIG1pbWV0eXBlX29mZnNldCA9IEdFVF9VSU5UMzIgKGNhY2hlLT5i
dWZmZXIsIGNoaWxkX29mZnNldCArIDEyICogaSArIDQpOworCQkgIHdlaWdodCA9IEdFVF9VSU5U
MzIgKGNhY2hlLT5idWZmZXIsIGNoaWxkX29mZnNldCArIDEyICogaSArIDgpOworCQkgIGNhc2Vf
c2Vuc2l0aXZlID0gd2VpZ2h0ICYgMHgxMDA7CisJCSAgd2VpZ2h0ID0gd2VpZ2h0ICYgMHhmZjsK
KworCQkgIGlmIChjYXNlX3NlbnNpdGl2ZV9jaGVjayB8fCAhY2FzZV9zZW5zaXRpdmUpCisJCSAg
ICB7CisJCSAgICAgIG1pbWVfdHlwZXNbbl0ubWltZSA9IGNhY2hlLT5idWZmZXIgKyBtaW1ldHlw
ZV9vZmZzZXQ7CisJCSAgICAgIG1pbWVfdHlwZXNbbl0ud2VpZ2h0ID0gd2VpZ2h0OworCQkgICAg
ICBuKys7CisJCSAgICB9CisJCSAgaSsrOworCQl9CisJICAgIH0KKwkgIHJldHVybiBuOworCX0K
KyAgICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitjYWNoZV9nbG9iX2xvb2t1cF9z
dWZmaXggKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwKKwkJCSAgaW50ICAgICAgICAgbGVuLAorCQkJ
ICBpbnQgICAgICAgICBpZ25vcmVfY2FzZSwKKwkJCSAgTWltZVdlaWdodCAgbWltZV90eXBlc1td
LAorCQkJICBpbnQgICAgICAgICBuX21pbWVfdHlwZXMpCit7CisgIGludCBpLCBuOworCisgIGZv
ciAoaSA9IDA7IF9jYWNoZXNbaV07IGkrKykKKyAgICB7CisgICAgICBYZGdNaW1lQ2FjaGUgKmNh
Y2hlID0gX2NhY2hlc1tpXTsKKworICAgICAgeGRnX3VpbnQzMl90IGxpc3Rfb2Zmc2V0ID0gR0VU
X1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgMTYpOworICAgICAgeGRnX3VpbnQzMl90IG5fZW50cmll
cyA9IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIGxpc3Rfb2Zmc2V0KTsKKyAgICAgIHhkZ191
aW50MzJfdCBvZmZzZXQgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCBsaXN0X29mZnNldCAr
IDQpOworCisgICAgICBuID0gY2FjaGVfZ2xvYl9ub2RlX2xvb2t1cF9zdWZmaXggKGNhY2hlLCAK
KwkJCQkJIG5fZW50cmllcywgb2Zmc2V0LCAKKwkJCQkJIGZpbGVfbmFtZSwgbGVuLAorCQkJCQkg
aWdub3JlX2Nhc2UsCisJCQkJCSBtaW1lX3R5cGVzLAorCQkJCQkgbl9taW1lX3R5cGVzKTsKKyAg
ICAgIGlmIChuID4gMCkKKwlyZXR1cm4gbjsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0
YXRpYyBpbnQgY29tcGFyZV9taW1lX3dlaWdodCAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAq
YikKK3sKKyAgY29uc3QgTWltZVdlaWdodCAqYWEgPSAoY29uc3QgTWltZVdlaWdodCAqKWE7Cisg
IGNvbnN0IE1pbWVXZWlnaHQgKmJiID0gKGNvbnN0IE1pbWVXZWlnaHQgKiliOworCisgIHJldHVy
biBiYi0+d2VpZ2h0IC0gYWEtPndlaWdodDsKK30KKworI2RlZmluZSBJU1VQUEVSKGMpCQkoKGMp
ID49ICdBJyAmJiAoYykgPD0gJ1onKQorc3RhdGljIGNoYXIgKgorYXNjaWlfdG9sb3dlciAoY29u
c3QgY2hhciAqc3RyKQoreworICBjaGFyICpwLCAqbG93ZXI7CisKKyAgbG93ZXIgPSBzdHJkdXAg
KHN0cik7CisgIHAgPSBsb3dlcjsKKyAgd2hpbGUgKCpwICE9IDApCisgICAgeworICAgICAgY2hh
ciBjID0gKnA7CisgICAgICAqcCsrID0gSVNVUFBFUiAoYykgPyBjIC0gJ0EnICsgJ2EnIDogYzsK
KyAgICB9CisgIHJldHVybiBsb3dlcjsKK30KKworc3RhdGljIGludAorY2FjaGVfZ2xvYl9sb29r
dXBfZmlsZV9uYW1lIChjb25zdCBjaGFyICpmaWxlX25hbWUsIAorCQkJICAgICBjb25zdCBjaGFy
ICptaW1lX3R5cGVzW10sCisJCQkgICAgIGludCAgICAgICAgIG5fbWltZV90eXBlcykKK3sKKyAg
aW50IG47CisgIE1pbWVXZWlnaHQgbWltZXNbMTBdOworICBpbnQgbl9taW1lcyA9IDEwOworICBp
bnQgaTsKKyAgaW50IGxlbjsKKyAgY2hhciAqbG93ZXJfY2FzZTsKKworICBhc3NlcnQgKGZpbGVf
bmFtZSAhPSBOVUxMICYmIG5fbWltZV90eXBlcyA+IDApOworCisgIC8qIEZpcnN0LCBjaGVjayB0
aGUgbGl0ZXJhbHMgKi8KKworICBsb3dlcl9jYXNlID0gYXNjaWlfdG9sb3dlciAoZmlsZV9uYW1l
KTsKKworICBuID0gY2FjaGVfZ2xvYl9sb29rdXBfbGl0ZXJhbCAobG93ZXJfY2FzZSwgbWltZV90
eXBlcywgbl9taW1lX3R5cGVzLCBGQUxTRSk7CisgIGlmIChuID4gMCkKKyAgICB7CisgICAgICBm
cmVlIChsb3dlcl9jYXNlKTsKKyAgICAgIHJldHVybiBuOworICAgIH0KKworICBuID0gY2FjaGVf
Z2xvYl9sb29rdXBfbGl0ZXJhbCAoZmlsZV9uYW1lLCBtaW1lX3R5cGVzLCBuX21pbWVfdHlwZXMs
IFRSVUUpOworICBpZiAobiA+IDApCisgICAgeworICAgICAgZnJlZSAobG93ZXJfY2FzZSk7Cisg
ICAgICByZXR1cm4gbjsKKyAgICB9CisKKyAgbGVuID0gc3RybGVuIChmaWxlX25hbWUpOworICBu
ID0gY2FjaGVfZ2xvYl9sb29rdXBfc3VmZml4IChsb3dlcl9jYXNlLCBsZW4sIEZBTFNFLCBtaW1l
cywgbl9taW1lcyk7CisgIGlmIChuID09IDApCisgICAgbiA9IGNhY2hlX2dsb2JfbG9va3VwX3N1
ZmZpeCAoZmlsZV9uYW1lLCBsZW4sIFRSVUUsIG1pbWVzLCBuX21pbWVzKTsKKworICAvKiBMYXN0
LCB0cnkgZm5tYXRjaCAqLworICBpZiAobiA9PSAwKQorICAgIG4gPSBjYWNoZV9nbG9iX2xvb2t1
cF9mbm1hdGNoIChsb3dlcl9jYXNlLCBtaW1lcywgbl9taW1lcywgRkFMU0UpOworICBpZiAobiA9
PSAwKQorICAgIG4gPSBjYWNoZV9nbG9iX2xvb2t1cF9mbm1hdGNoIChmaWxlX25hbWUsIG1pbWVz
LCBuX21pbWVzLCBUUlVFKTsKKworICBmcmVlIChsb3dlcl9jYXNlKTsKKworICBxc29ydCAobWlt
ZXMsIG4sIHNpemVvZiAoTWltZVdlaWdodCksIGNvbXBhcmVfbWltZV93ZWlnaHQpOworCisgIGlm
IChuX21pbWVfdHlwZXMgPCBuKQorICAgIG4gPSBuX21pbWVfdHlwZXM7CisKKyAgZm9yIChpID0g
MDsgaSA8IG47IGkrKykKKyAgICBtaW1lX3R5cGVzW2ldID0gbWltZXNbaV0ubWltZTsKKworICBy
ZXR1cm4gbjsKK30KKworaW50CitfeGRnX21pbWVfY2FjaGVfZ2V0X21heF9idWZmZXJfZXh0ZW50
cyAodm9pZCkKK3sKKyAgeGRnX3VpbnQzMl90IG9mZnNldDsKKyAgeGRnX3VpbnQzMl90IG1heF9l
eHRlbnQ7CisgIGludCBpOworCisgIG1heF9leHRlbnQgPSAwOworICBmb3IgKGkgPSAwOyBfY2Fj
aGVzW2ldOyBpKyspCisgICAgeworICAgICAgWGRnTWltZUNhY2hlICpjYWNoZSA9IF9jYWNoZXNb
aV07CisKKyAgICAgIG9mZnNldCA9IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIDI0KTsKKyAg
ICAgIG1heF9leHRlbnQgPSBNQVggKG1heF9leHRlbnQsIEdFVF9VSU5UMzIgKGNhY2hlLT5idWZm
ZXIsIG9mZnNldCArIDQpKTsKKyAgICB9CisKKyAgcmV0dXJuIG1heF9leHRlbnQ7Cit9CisKK3N0
YXRpYyBjb25zdCBjaGFyICoKK2NhY2hlX2dldF9taW1lX3R5cGVfZm9yX2RhdGEgKGNvbnN0IHZv
aWQgKmRhdGEsCisJCQkgICAgICBzaXplX3QgICAgICBsZW4sCisJCQkgICAgICBpbnQgICAgICAg
ICpyZXN1bHRfcHJpbywKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm1pbWVfdHlwZXNbXSwKKwkJCSAg
ICAgIGludCAgICAgICAgIG5fbWltZV90eXBlcykKK3sKKyAgY29uc3QgY2hhciAqbWltZV90eXBl
OworICBpbnQgaSwgbiwgcHJpb3JpdHk7CisKKyAgcHJpb3JpdHkgPSAwOworICBtaW1lX3R5cGUg
PSBOVUxMOworICBmb3IgKGkgPSAwOyBfY2FjaGVzW2ldOyBpKyspCisgICAgeworICAgICAgWGRn
TWltZUNhY2hlICpjYWNoZSA9IF9jYWNoZXNbaV07CisKKyAgICAgIGludCBwcmlvOworICAgICAg
Y29uc3QgY2hhciAqbWF0Y2g7CisKKyAgICAgIG1hdGNoID0gY2FjaGVfbWFnaWNfbG9va3VwX2Rh
dGEgKGNhY2hlLCBkYXRhLCBsZW4sICZwcmlvLCAKKwkJCQkgICAgICAgbWltZV90eXBlcywgbl9t
aW1lX3R5cGVzKTsKKyAgICAgIGlmIChwcmlvID4gcHJpb3JpdHkpCisJeworCSAgcHJpb3JpdHkg
PSBwcmlvOworCSAgbWltZV90eXBlID0gbWF0Y2g7CisJfQorICAgIH0KKworICBpZiAocmVzdWx0
X3ByaW8pCisgICAgKnJlc3VsdF9wcmlvID0gcHJpb3JpdHk7CisKKyAgaWYgKHByaW9yaXR5ID4g
MCkKKyAgICB7CisgICAgICAvKiBQaWNrIGdsb2ItcmVzdWx0IFIgd2hlcmUgbWltZV90eXBlIGlu
aGVyaXRzIGZyb20gUiAqLworICAgICAgZm9yIChuID0gMDsgbiA8IG5fbWltZV90eXBlczsgbisr
KQorICAgICAgICB7CisgICAgICAgICAgaWYgKG1pbWVfdHlwZXNbbl0gJiYgX3hkZ19taW1lX2Nh
Y2hlX21pbWVfdHlwZV9zdWJjbGFzcyhtaW1lX3R5cGVzW25dLCBtaW1lX3R5cGUpKQorICAgICAg
ICAgICAgICByZXR1cm4gbWltZV90eXBlc1tuXTsKKyAgICAgICAgfQorCisgICAgICAvKiBSZXR1
cm4gbWFnaWMgbWF0Y2ggKi8KKyAgICAgIHJldHVybiBtaW1lX3R5cGU7CisgICAgfQorCisgIC8q
IFBpY2sgZmlyc3QgZ2xvYiByZXN1bHQsIGFzIGZhbGxiYWNrICovCisgIGZvciAobiA9IDA7IG4g
PCBuX21pbWVfdHlwZXM7IG4rKykKKyAgICB7CisgICAgICBpZiAobWltZV90eXBlc1tuXSkKKyAg
ICAgICAgcmV0dXJuIG1pbWVfdHlwZXNbbl07CisgICAgfQorCisgIHJldHVybiBOVUxMOworfQor
Citjb25zdCBjaGFyICoKK194ZGdfbWltZV9jYWNoZV9nZXRfbWltZV90eXBlX2Zvcl9kYXRhIChj
b25zdCB2b2lkICpkYXRhLAorCQkJCQlzaXplX3QgICAgICBsZW4sCisJCQkJCWludCAgICAgICAg
KnJlc3VsdF9wcmlvKQoreworICByZXR1cm4gY2FjaGVfZ2V0X21pbWVfdHlwZV9mb3JfZGF0YSAo
ZGF0YSwgbGVuLCByZXN1bHRfcHJpbywgTlVMTCwgMCk7Cit9CisKK2NvbnN0IGNoYXIgKgorX3hk
Z19taW1lX2NhY2hlX2dldF9taW1lX3R5cGVfZm9yX2ZpbGUgKGNvbnN0IGNoYXIgICpmaWxlX25h
bWUsCisJCQkJCXN0cnVjdCBzdGF0ICpzdGF0YnVmKQoreworICBjb25zdCBjaGFyICptaW1lX3R5
cGU7CisgIGNvbnN0IGNoYXIgKm1pbWVfdHlwZXNbMTBdOworICBGSUxFICpmaWxlOworICB1bnNp
Z25lZCBjaGFyICpkYXRhOworICBpbnQgbWF4X2V4dGVudDsKKyAgaW50IGJ5dGVzX3JlYWQ7Cisg
IHN0cnVjdCBzdGF0IGJ1ZjsKKyAgY29uc3QgY2hhciAqYmFzZV9uYW1lOworICBpbnQgbjsKKwor
ICBpZiAoZmlsZV9uYW1lID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgaWYgKCEgX3hk
Z191dGY4X3ZhbGlkYXRlIChmaWxlX25hbWUpKQorICAgIHJldHVybiBOVUxMOworCisgIGJhc2Vf
bmFtZSA9IF94ZGdfZ2V0X2Jhc2VfbmFtZSAoZmlsZV9uYW1lKTsKKyAgbiA9IGNhY2hlX2dsb2Jf
bG9va3VwX2ZpbGVfbmFtZSAoYmFzZV9uYW1lLCBtaW1lX3R5cGVzLCAxMCk7CisKKyAgaWYgKG4g
PT0gMSkKKyAgICByZXR1cm4gbWltZV90eXBlc1swXTsKKworICBpZiAoIXN0YXRidWYpCisgICAg
eworICAgICAgaWYgKHN0YXQgKGZpbGVfbmFtZSwgJmJ1ZikgIT0gMCkKKwlyZXR1cm4gWERHX01J
TUVfVFlQRV9VTktOT1dOOworCisgICAgICBzdGF0YnVmID0gJmJ1ZjsKKyAgICB9CisKKyAgaWYg
KHN0YXRidWYtPnN0X3NpemUgPT0gMCkKKyAgICByZXR1cm4gWERHX01JTUVfVFlQRV9FTVBUWTsK
KworICBpZiAoIVNfSVNSRUcgKHN0YXRidWYtPnN0X21vZGUpKQorICAgIHJldHVybiBYREdfTUlN
RV9UWVBFX1VOS05PV047CisKKyAgLyogRklYTUU6IE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgbWF4
X2V4dGVudCBpc24ndCB0b3RhbGx5IGJyb2tlbi4gIFRoaXMgY291bGQKKyAgICogYmUgbGFyZ2Ug
YW5kIG5lZWQgZ2V0dGluZyBmcm9tIGEgc3RyZWFtIGluc3RlYWQgb2YganVzdCByZWFkaW5nIGl0
IGFsbAorICAgKiBpbi4gKi8KKyAgbWF4X2V4dGVudCA9IF94ZGdfbWltZV9jYWNoZV9nZXRfbWF4
X2J1ZmZlcl9leHRlbnRzICgpOworICBkYXRhID0gbWFsbG9jIChtYXhfZXh0ZW50KTsKKyAgaWYg
KGRhdGEgPT0gTlVMTCkKKyAgICByZXR1cm4gWERHX01JTUVfVFlQRV9VTktOT1dOOworICAgICAg
ICAKKyAgZmlsZSA9IGZvcGVuIChmaWxlX25hbWUsICJyIik7CisgIGlmIChmaWxlID09IE5VTEwp
CisgICAgeworICAgICAgZnJlZSAoZGF0YSk7CisgICAgICByZXR1cm4gWERHX01JTUVfVFlQRV9V
TktOT1dOOworICAgIH0KKworICBieXRlc19yZWFkID0gZnJlYWQgKGRhdGEsIDEsIG1heF9leHRl
bnQsIGZpbGUpOworICBpZiAoZmVycm9yIChmaWxlKSkKKyAgICB7CisgICAgICBmcmVlIChkYXRh
KTsKKyAgICAgIGZjbG9zZSAoZmlsZSk7CisgICAgICByZXR1cm4gWERHX01JTUVfVFlQRV9VTktO
T1dOOworICAgIH0KKworICBtaW1lX3R5cGUgPSBjYWNoZV9nZXRfbWltZV90eXBlX2Zvcl9kYXRh
IChkYXRhLCBieXRlc19yZWFkLCBOVUxMLAorCQkJCQkgICAgbWltZV90eXBlcywgbik7CisKKyAg
aWYgKCFtaW1lX3R5cGUpCisgICAgbWltZV90eXBlID0gX3hkZ19iaW5hcnlfb3JfdGV4dF9mYWxs
YmFjayhkYXRhLCBieXRlc19yZWFkKTsKKworICBmcmVlIChkYXRhKTsKKyAgZmNsb3NlIChmaWxl
KTsKKworICByZXR1cm4gbWltZV90eXBlOworfQorCitjb25zdCBjaGFyICoKK194ZGdfbWltZV9j
YWNoZV9nZXRfbWltZV90eXBlX2Zyb21fZmlsZV9uYW1lIChjb25zdCBjaGFyICpmaWxlX25hbWUp
Cit7CisgIGNvbnN0IGNoYXIgKm1pbWVfdHlwZTsKKworICBpZiAoY2FjaGVfZ2xvYl9sb29rdXBf
ZmlsZV9uYW1lIChmaWxlX25hbWUsICZtaW1lX3R5cGUsIDEpKQorICAgIHJldHVybiBtaW1lX3R5
cGU7CisgIGVsc2UKKyAgICByZXR1cm4gWERHX01JTUVfVFlQRV9VTktOT1dOOworfQorCitpbnQK
K194ZGdfbWltZV9jYWNoZV9nZXRfbWltZV90eXBlc19mcm9tX2ZpbGVfbmFtZSAoY29uc3QgY2hh
ciAqZmlsZV9uYW1lLAorCQkJCQkgICAgICAgY29uc3QgY2hhciAgKm1pbWVfdHlwZXNbXSwKKwkJ
CQkJICAgICAgIGludCAgICAgICAgICBuX21pbWVfdHlwZXMpCit7CisgIHJldHVybiBjYWNoZV9n
bG9iX2xvb2t1cF9maWxlX25hbWUgKGZpbGVfbmFtZSwgbWltZV90eXBlcywgbl9taW1lX3R5cGVz
KTsKK30KKworI2lmIDEKK3N0YXRpYyBpbnQKK2lzX3N1cGVyX3R5cGUgKGNvbnN0IGNoYXIgKm1p
bWUpCit7CisgIGludCBsZW5ndGg7CisgIGNvbnN0IGNoYXIgKnR5cGU7CisKKyAgbGVuZ3RoID0g
c3RybGVuIChtaW1lKTsKKyAgdHlwZSA9ICYobWltZVtsZW5ndGggLSAyXSk7CisKKyAgaWYgKHN0
cmNtcCAodHlwZSwgIi8qIikgPT0gMCkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30K
KyNlbmRpZgorCitpbnQKK194ZGdfbWltZV9jYWNoZV9taW1lX3R5cGVfc3ViY2xhc3MgKGNvbnN0
IGNoYXIgKm1pbWUsCisJCQkJICAgIGNvbnN0IGNoYXIgKmJhc2UpCit7CisgIGNvbnN0IGNoYXIg
KnVtaW1lLCAqdWJhc2U7CisKKyAgaW50IGksIGosIG1pbiwgbWF4LCBtZWQsIGNtcDsKKyAgCisg
IHVtaW1lID0gX3hkZ19taW1lX2NhY2hlX3VuYWxpYXNfbWltZV90eXBlIChtaW1lKTsKKyAgdWJh
c2UgPSBfeGRnX21pbWVfY2FjaGVfdW5hbGlhc19taW1lX3R5cGUgKGJhc2UpOworCisgIGlmIChz
dHJjbXAgKHVtaW1lLCB1YmFzZSkgPT0gMCkKKyAgICByZXR1cm4gMTsKKworICAvKiBXZSByZWFs
bHkgd2FudCB0byBoYW5kbGUgdGV4dC8gKiBpbiBHdGtGaWxlRmlsdGVyLCBzbyB3ZSBqdXN0Cisg
ICAqIHR1cm4gb24gdGhlIHN1cGVydHlwZSBtYXRjaGluZworICAgKi8KKyNpZiAxCisgIC8qIEhh
bmRsZSBzdXBlcnR5cGVzICovCisgIGlmIChpc19zdXBlcl90eXBlICh1YmFzZSkgJiYKKyAgICAg
IHhkZ19taW1lX21lZGlhX3R5cGVfZXF1YWwgKHVtaW1lLCB1YmFzZSkpCisgICAgcmV0dXJuIDE7
CisjZW5kaWYKKworICAvKiAgSGFuZGxlIHNwZWNpYWwgY2FzZXMgdGV4dC9wbGFpbiBhbmQgYXBw
bGljYXRpb24vb2N0ZXQtc3RyZWFtICovCisgIGlmIChzdHJjbXAgKHViYXNlLCAidGV4dC9wbGFp
biIpID09IDAgJiYgCisgICAgICBzdHJuY21wICh1bWltZSwgInRleHQvIiwgNSkgPT0gMCkKKyAg
ICByZXR1cm4gMTsKKworICBpZiAoc3RyY21wICh1YmFzZSwgImFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbSIpID09IDApCisgICAgcmV0dXJuIDE7CisgCisgIGZvciAoaSA9IDA7IF9jYWNoZXNbaV07
IGkrKykKKyAgICB7CisgICAgICBYZGdNaW1lQ2FjaGUgKmNhY2hlID0gX2NhY2hlc1tpXTsKKyAg
ICAgIAorICAgICAgeGRnX3VpbnQzMl90IGxpc3Rfb2Zmc2V0ID0gR0VUX1VJTlQzMiAoY2FjaGUt
PmJ1ZmZlciwgOCk7CisgICAgICB4ZGdfdWludDMyX3Qgbl9lbnRyaWVzID0gR0VUX1VJTlQzMiAo
Y2FjaGUtPmJ1ZmZlciwgbGlzdF9vZmZzZXQpOworICAgICAgeGRnX3VpbnQzMl90IG9mZnNldCwg
bl9wYXJlbnRzLCBwYXJlbnRfb2Zmc2V0OworCisgICAgICBtaW4gPSAwOyAKKyAgICAgIG1heCA9
IG5fZW50cmllcyAtIDE7CisgICAgICB3aGlsZSAobWF4ID49IG1pbikKKwl7CisJICBtZWQgPSAo
bWluICsgbWF4KS8yOworCSAgCisJICBvZmZzZXQgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVy
LCBsaXN0X29mZnNldCArIDQgKyA4ICogbWVkKTsKKwkgIGNtcCA9IHN0cmNtcCAoY2FjaGUtPmJ1
ZmZlciArIG9mZnNldCwgdW1pbWUpOworCSAgaWYgKGNtcCA8IDApCisJICAgIG1pbiA9IG1lZCAr
IDE7CisJICBlbHNlIGlmIChjbXAgPiAwKQorCSAgICBtYXggPSBtZWQgLSAxOworCSAgZWxzZQor
CSAgICB7CisJICAgICAgb2Zmc2V0ID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgbGlzdF9v
ZmZzZXQgKyA0ICsgOCAqIG1lZCArIDQpOworCSAgICAgIG5fcGFyZW50cyA9IEdFVF9VSU5UMzIg
KGNhY2hlLT5idWZmZXIsIG9mZnNldCk7CisJICAgICAgCisJICAgICAgZm9yIChqID0gMDsgaiA8
IG5fcGFyZW50czsgaisrKQorCQl7CisJCSAgcGFyZW50X29mZnNldCA9IEdFVF9VSU5UMzIgKGNh
Y2hlLT5idWZmZXIsIG9mZnNldCArIDQgKyA0ICogaik7CisJCSAgaWYgKF94ZGdfbWltZV9jYWNo
ZV9taW1lX3R5cGVfc3ViY2xhc3MgKGNhY2hlLT5idWZmZXIgKyBwYXJlbnRfb2Zmc2V0LCB1YmFz
ZSkpCisJCSAgICByZXR1cm4gMTsKKwkJfQorCisJICAgICAgYnJlYWs7CisJICAgIH0KKwl9Cisg
ICAgfQorCisgIHJldHVybiAwOworfQorCitjb25zdCBjaGFyICoKK194ZGdfbWltZV9jYWNoZV91
bmFsaWFzX21pbWVfdHlwZSAoY29uc3QgY2hhciAqbWltZSkKK3sKKyAgY29uc3QgY2hhciAqbG9v
a3VwOworICAKKyAgbG9va3VwID0gY2FjaGVfYWxpYXNfbG9va3VwIChtaW1lKTsKKyAgCisgIGlm
IChsb29rdXApCisgICAgcmV0dXJuIGxvb2t1cDsKKyAgCisgIHJldHVybiBtaW1lOyAgCit9CisK
K2NoYXIgKioKK194ZGdfbWltZV9jYWNoZV9saXN0X21pbWVfcGFyZW50cyAoY29uc3QgY2hhciAq
bWltZSkKK3sKKyAgaW50IGksIGosIGssIGwsIHA7CisgIGNoYXIgKmFsbF9wYXJlbnRzWzEyOF07
IC8qIHdlJ2xsIHN0b3AgYXQgMTI4ICovIAorICBjaGFyICoqcmVzdWx0OworCisgIG1pbWUgPSB4
ZGdfbWltZV91bmFsaWFzX21pbWVfdHlwZSAobWltZSk7CisKKyAgcCA9IDA7CisgIGZvciAoaSA9
IDA7IF9jYWNoZXNbaV07IGkrKykKKyAgICB7CisgICAgICBYZGdNaW1lQ2FjaGUgKmNhY2hlID0g
X2NhY2hlc1tpXTsKKyAgCisgICAgICB4ZGdfdWludDMyX3QgbGlzdF9vZmZzZXQgPSBHRVRfVUlO
VDMyIChjYWNoZS0+YnVmZmVyLCA4KTsKKyAgICAgIHhkZ191aW50MzJfdCBuX2VudHJpZXMgPSBH
RVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCBsaXN0X29mZnNldCk7CisKKyAgICAgIGZvciAoaiA9
IDA7IGogPCBuX2VudHJpZXM7IGorKykKKwl7CisJICB4ZGdfdWludDMyX3QgbWltZXR5cGVfb2Zm
c2V0ID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgbGlzdF9vZmZzZXQgKyA0ICsgOCAqIGop
OworCSAgeGRnX3VpbnQzMl90IHBhcmVudHNfb2Zmc2V0ID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1
ZmZlciwgbGlzdF9vZmZzZXQgKyA0ICsgOCAqIGogKyA0KTsKKworCSAgaWYgKHN0cmNtcCAoY2Fj
aGUtPmJ1ZmZlciArIG1pbWV0eXBlX29mZnNldCwgbWltZSkgPT0gMCkKKwkgICAgeworCSAgICAg
IHhkZ191aW50MzJfdCBwYXJlbnRfbWltZV9vZmZzZXQ7CisJICAgICAgeGRnX3VpbnQzMl90IG5f
cGFyZW50cyA9IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIHBhcmVudHNfb2Zmc2V0KTsKKwor
CSAgICAgIGZvciAoayA9IDA7IGsgPCBuX3BhcmVudHMgJiYgcCA8IDEyNzsgaysrKQorCQl7CisJ
CSAgcGFyZW50X21pbWVfb2Zmc2V0ID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgcGFyZW50
c19vZmZzZXQgKyA0ICsgNCAqIGspOworCisJCSAgLyogRG9uJ3QgYWRkIHNhbWUgcGFyZW50IG11
bHRpcGxlIHRpbWVzLgorCQkgICAqIFRoaXMgY2FuIGhhcHBlbiBmb3IgaW5zdGFuY2UgaWYgdGhl
IHNhbWUgdHlwZSBpcyBsaXN0ZWQgaW4gbXVsdGlwbGUgZGlyZWN0b3JpZXMKKwkJICAgKi8KKwkJ
ICBmb3IgKGwgPSAwOyBsIDwgcDsgbCsrKQorCQkgICAgeworCQkgICAgICBpZiAoc3RyY21wIChh
bGxfcGFyZW50c1tsXSwgY2FjaGUtPmJ1ZmZlciArIHBhcmVudF9taW1lX29mZnNldCkgPT0gMCkK
KwkJCWJyZWFrOworCQkgICAgfQorCisJCSAgaWYgKGwgPT0gcCkKKwkJICAgIGFsbF9wYXJlbnRz
W3ArK10gPSBjYWNoZS0+YnVmZmVyICsgcGFyZW50X21pbWVfb2Zmc2V0OworCQl9CisKKwkgICAg
ICBicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisgIGFsbF9wYXJlbnRzW3ArK10gPSBOVUxMOwor
ICAKKyAgcmVzdWx0ID0gKGNoYXIgKiopIG1hbGxvYyAocCAqIHNpemVvZiAoY2hhciAqKSk7Cisg
IG1lbWNweSAocmVzdWx0LCBhbGxfcGFyZW50cywgcCAqIHNpemVvZiAoY2hhciAqKSk7CisKKyAg
cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorY2FjaGVfbG9va3VwX2lj
b24gKGNvbnN0IGNoYXIgKm1pbWUsIGludCBoZWFkZXIpCit7CisgIGNvbnN0IGNoYXIgKnB0cjsK
KyAgaW50IGksIG1pbiwgbWF4LCBtaWQsIGNtcDsKKworICBmb3IgKGkgPSAwOyBfY2FjaGVzW2ld
OyBpKyspCisgICAgeworICAgICAgWGRnTWltZUNhY2hlICpjYWNoZSA9IF9jYWNoZXNbaV07Cisg
ICAgICB4ZGdfdWludDMyX3QgbGlzdF9vZmZzZXQgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVy
LCBoZWFkZXIpOworICAgICAgeGRnX3VpbnQzMl90IG5fZW50cmllcyA9IEdFVF9VSU5UMzIgKGNh
Y2hlLT5idWZmZXIsIGxpc3Rfb2Zmc2V0KTsKKyAgICAgIHhkZ191aW50MzJfdCBvZmZzZXQ7CisK
KyAgICAgIG1pbiA9IDA7IAorICAgICAgbWF4ID0gbl9lbnRyaWVzIC0gMTsKKyAgICAgIHdoaWxl
IChtYXggPj0gbWluKSAKKyAgICAgICAgeworICAgICAgICAgIG1pZCA9IChtaW4gKyBtYXgpIC8g
MjsKKworICAgICAgICAgIG9mZnNldCA9IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIGxpc3Rf
b2Zmc2V0ICsgNCArIDggKiBtaWQpOworICAgICAgICAgIHB0ciA9IGNhY2hlLT5idWZmZXIgKyBv
ZmZzZXQ7CisgICAgICAgICAgY21wID0gc3RyY21wIChwdHIsIG1pbWUpOworICAgICAgICAgCisg
ICAgICAgICAgaWYgKGNtcCA8IDApCisgICAgICAgICAgICBtaW4gPSBtaWQgKyAxOworICAgICAg
ICAgIGVsc2UgaWYgKGNtcCA+IDApCisgICAgICAgICAgICBtYXggPSBtaWQgLSAxOworICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgb2Zmc2V0ID0gR0VUX1VJTlQz
MiAoY2FjaGUtPmJ1ZmZlciwgbGlzdF9vZmZzZXQgKyA0ICsgOCAqIG1pZCArIDQpOworICAgICAg
ICAgICAgICByZXR1cm4gY2FjaGUtPmJ1ZmZlciArIG9mZnNldDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworY29uc3QgY2hhciAqCitfeGRn
X21pbWVfY2FjaGVfZ2V0X2dlbmVyaWNfaWNvbiAoY29uc3QgY2hhciAqbWltZSkKK3sKKyAgcmV0
dXJuIGNhY2hlX2xvb2t1cF9pY29uIChtaW1lLCAzNik7Cit9CisKK2NvbnN0IGNoYXIgKgorX3hk
Z19taW1lX2NhY2hlX2dldF9pY29uIChjb25zdCBjaGFyICptaW1lKQoreworICByZXR1cm4gY2Fj
aGVfbG9va3VwX2ljb24gKG1pbWUsIDMyKTsKK30KKworc3RhdGljIGludAorZ2V0X3NpbXBsZV9n
bG9icyAoWGRnTWltZUNhY2hlICAqY2FjaGUsCisgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICAgICptaW1lLAorICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAqZ2xvYnNbXSwKKyAg
ICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgIG5fZ2xvYnMsCisgICAgICAgICAgICAgICAg
ICB4ZGdfdWludDMyX3QgICBvZmZzZXQsCisgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAg
ICpuLAorICAgICAgICAgICAgICAgICAgeGRnX3VuaWNoYXJfdCAqcHJlZml4LAorICAgICAgICAg
ICAgICAgICAgaW50ICAgICAgICAgICAgZGVwdGgpCit7CisgIHhkZ191bmljaGFyX3QgY2hhcmFj
dGVyID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgb2Zmc2V0KTsKKyAgeGRnX3VpbnQzMl90
IG5fY2hpbGRyZW47CisgIHhkZ191aW50MzJfdCBjaGlsZF9vZmZzZXQ7CisgIGludCBpOworCisg
IGlmICgqbiA+PSBuX2dsb2JzKQorICAgIHJldHVybiBGQUxTRTsKKworICBpZiAoY2hhcmFjdGVy
ID09IDApCisgICAgeworICAgICAgeGRnX3VpbnQzMl90IG1pbWVfb2Zmc2V0ID0gR0VUX1VJTlQz
MiAoY2FjaGUtPmJ1ZmZlciwgb2Zmc2V0ICsgNCk7CisKKyAgICAgIGlmIChzdHJjYXNlY21wIChj
YWNoZS0+YnVmZmVyICsgbWltZV9vZmZzZXQsIG1pbWUpID09IDApIHsKKyAgICAgICAgZ2xvYnNb
Km5dID0gbWFsbG9jIChkZXB0aCAqIHNpemVvZiAoY2hhcikpOworICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgZGVwdGg7IGkrKykKKyAgICAgICAgICBnbG9ic1sqbl1bZGVwdGggLSBpIC0gMV0gPSBw
cmVmaXhbaV07CisgICAgICAgIGdsb2JzWypuXVtkZXB0aF0gPSAnXDAnOworCisgICAgICAgICgq
bikrKzsKKyAgICAgIH0KKworICAgICAgcmV0dXJuICpuIDwgbl9nbG9iczsKKyAgICB9CisKKyAg
cHJlZml4W2RlcHRoXSA9IGNoYXJhY3RlcjsKKyAgbl9jaGlsZHJlbiA9IEdFVF9VSU5UMzIgKGNh
Y2hlLT5idWZmZXIsIG9mZnNldCArIDQpOworICBjaGlsZF9vZmZzZXQgPSBHRVRfVUlOVDMyIChj
YWNoZS0+YnVmZmVyLCBvZmZzZXQgKyA4KTsKKyAgZm9yIChpID0gMDsgaSA8IG5fY2hpbGRyZW47
IGkrKykKKyAgICB7CisgICAgICBpZiAoIWdldF9zaW1wbGVfZ2xvYnMgKGNhY2hlLCBtaW1lLCBn
bG9icywgbl9nbG9icywgY2hpbGRfb2Zmc2V0ICsgMTIgKiBpLCBuLCBwcmVmaXgsIGRlcHRoICsg
MSkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgcmV0dXJuICpuIDwgbl9nbG9i
czsKK30KKworaW50CitfeGRnX21pbWVfY2FjaGVfZ2V0X3NpbXBsZV9nbG9icyAoY29uc3QgY2hh
ciAqbWltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICpn
bG9ic1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgIG5f
Z2xvYnMpCit7CisgIGludCBpLCBqLCBuOworICB4ZGdfdW5pY2hhcl90IHByZWZpeFsyNV07CisK
KyAgbWltZSA9IHhkZ19taW1lX3VuYWxpYXNfbWltZV90eXBlIChtaW1lKTsKKworICBuID0gMDsK
KyAgZm9yIChpID0gMDsgX2NhY2hlc1tpXTsgaSsrKQorICAgIHsKKyAgICAgIFhkZ01pbWVDYWNo
ZSAqY2FjaGUgPSBfY2FjaGVzW2ldOworICAgICAgeGRnX3VpbnQzMl90IGxpc3Rfb2Zmc2V0ID0g
R0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgMTYpOworICAgICAgeGRnX3VpbnQzMl90IG5fZW50
cmllcyA9IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIGxpc3Rfb2Zmc2V0KTsKKyAgICAgIHhk
Z191aW50MzJfdCBvZmZzZXQgPSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCBsaXN0X29mZnNl
dCArIDQpOworCisgICAgICBmb3IgKGogPSAwOyBqIDwgbl9lbnRyaWVzICYmIG4gPCBuX2dsb2Jz
OyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIWdldF9zaW1wbGVfZ2xvYnMgKGNhY2hl
LCBtaW1lLCBnbG9icywgbl9nbG9icywgb2Zmc2V0ICsgMTIgKiBqLCAmbiwgcHJlZml4LCAwKSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgIGlmIChuID4gMCkKKyAgICAg
ICAgcmV0dXJuIG47CisgICAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorZHVt
cF9nbG9iX25vZGUgKFhkZ01pbWVDYWNoZSAqY2FjaGUsCisJCXhkZ191aW50MzJfdCAgb2Zmc2V0
LAorCQlpbnQgICAgICAgICAgIGRlcHRoKQoreworICB4ZGdfdW5pY2hhcl90IGNoYXJhY3RlcjsK
KyAgeGRnX3VpbnQzMl90IG1pbWVfb2Zmc2V0OworICB4ZGdfdWludDMyX3Qgbl9jaGlsZHJlbjsK
KyAgeGRnX3VpbnQzMl90IGNoaWxkX29mZnNldDsKKyAgaW50IGk7CisKKyAgY2hhcmFjdGVyID0g
R0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgb2Zmc2V0KTsKKyAgbWltZV9vZmZzZXQgPSBHRVRf
VUlOVDMyIChjYWNoZS0+YnVmZmVyLCBvZmZzZXQgKyA0KTsKKyAgbl9jaGlsZHJlbiA9IEdFVF9V
SU5UMzIgKGNhY2hlLT5idWZmZXIsIG9mZnNldCArIDgpOworICBjaGlsZF9vZmZzZXQgPSBHRVRf
VUlOVDMyIChjYWNoZS0+YnVmZmVyLCBvZmZzZXQgKyAxMik7CisgIGZvciAoaSA9IDA7IGkgPCBk
ZXB0aDsgaSsrKQorICAgIHByaW50ZiAoIiAiKTsKKyAgcHJpbnRmICgiJWMiLCBjaGFyYWN0ZXIp
OworICBpZiAobWltZV9vZmZzZXQpCisgICAgcHJpbnRmICgiIC0gJXMiLCBjYWNoZS0+YnVmZmVy
ICsgbWltZV9vZmZzZXQpOworICBwcmludGYgKCJcbiIpOworICBpZiAoY2hpbGRfb2Zmc2V0KQor
ICB7CisgICAgZm9yIChpID0gMDsgaSA8IG5fY2hpbGRyZW47IGkrKykKKyAgICAgIGR1bXBfZ2xv
Yl9ub2RlIChjYWNoZSwgY2hpbGRfb2Zmc2V0ICsgMjAgKiBpLCBkZXB0aCArIDEpOworICB9Cit9
CisKK3ZvaWQKK194ZGdfbWltZV9jYWNoZV9nbG9iX2R1bXAgKHZvaWQpCit7CisgIGludCBpLCBq
OworICBmb3IgKGkgPSAwOyBfY2FjaGVzW2ldOyBpKyspCisgIHsKKyAgICBYZGdNaW1lQ2FjaGUg
KmNhY2hlID0gX2NhY2hlc1tpXTsKKyAgICB4ZGdfdWludDMyX3QgbGlzdF9vZmZzZXQ7CisgICAg
eGRnX3VpbnQzMl90IG5fZW50cmllczsKKyAgICB4ZGdfdWludDMyX3Qgb2Zmc2V0OworICAgIGxp
c3Rfb2Zmc2V0ID0gR0VUX1VJTlQzMiAoY2FjaGUtPmJ1ZmZlciwgMTYpOworICAgIG5fZW50cmll
cyA9IEdFVF9VSU5UMzIgKGNhY2hlLT5idWZmZXIsIGxpc3Rfb2Zmc2V0KTsKKyAgICBvZmZzZXQg
PSBHRVRfVUlOVDMyIChjYWNoZS0+YnVmZmVyLCBsaXN0X29mZnNldCArIDQpOworICAgIGZvciAo
aiA9IDA7IGogPCBuX2VudHJpZXM7IGorKykKKwkgICAgZHVtcF9nbG9iX25vZGUgKGNhY2hlLCBv
ZmZzZXQgKyAyMCAqIGosIDApOworICB9Cit9CisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkveGRnbWltZS9zcmMveGRnbWltZWNhY2hlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS94ZGdt
aW1lL3NyYy94ZGdtaW1lY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uYzYzMWQ0ODE0NWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS94
ZGdtaW1lL3NyYy94ZGdtaW1lY2FjaGUuaApAQCAtMCwwICsxLDg1IEBACisvKiAtKi0gbW9kZTog
QzsgYy1maWxlLXN0eWxlOiAiZ251IiAtKi0gKi8KKy8qIHhkZ21pbWVjYWNoZS5oOiBQcml2YXRl
IGZpbGUuICBEYXRhc3RydWN0dXJlIGZvciBtbWFwcGVkIGNhY2hlcy4KKyAqCisgKiBNb3JlIGlu
Zm8gY2FuIGJlIGZvdW5kIGF0IGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3N0YW5kYXJkcy8K
KyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgIE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRo
YXQuY29tPgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2Ug
dmVyc2lvbiAyLjAKKyAqIE9yIHVuZGVyIHRoZSBmb2xsb3dpbmcgdGVybXM6CisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2Vl
IHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBV
U0EuCisgKi8KKworI2lmbmRlZiBfX1hER19NSU1FX0NBQ0hFX0hfXworI2RlZmluZSBfX1hER19N
SU1FX0NBQ0hFX0hfXworCisjaW5jbHVkZSAieGRnbWltZS5oIgorCit0eXBlZGVmIHN0cnVjdCBf
WGRnTWltZUNhY2hlIFhkZ01pbWVDYWNoZTsKKworI2lmZGVmIFhER19QUkVGSVgKKyNkZWZpbmUg
X3hkZ19taW1lX2NhY2hlX25ld19mcm9tX2ZpbGUgICAgICAgICAgICAgICAgIFhER19SRVNFUlZF
RF9FTlRSWShjYWNoZV9uZXdfZnJvbV9maWxlKQorI2RlZmluZSBfeGRnX21pbWVfY2FjaGVfcmVm
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWERHX1JFU0VSVkVEX0VOVFJZKGNhY2hlX3JlZikK
KyNkZWZpbmUgX3hkZ19taW1lX2NhY2hlX3VucmVmICAgICAgICAgICAgICAgICAgICAgICAgIFhE
R19SRVNFUlZFRF9FTlRSWShjYWNoZV91bnJlZikKKyNkZWZpbmUgX3hkZ19taW1lX2NhY2hlX2dl
dF9tYXhfYnVmZmVyX2V4dGVudHMgICAgICAgIFhER19SRVNFUlZFRF9FTlRSWShjYWNoZV9nZXRf
bWF4X2J1ZmZlcl9leHRlbnRzKQorI2RlZmluZSBfeGRnX21pbWVfY2FjaGVfZ2V0X21pbWVfdHlw
ZV9mb3JfZGF0YSAgICAgICAgWERHX1JFU0VSVkVEX0VOVFJZKGNhY2hlX2dldF9taW1lX3R5cGVf
Zm9yX2RhdGEpCisjZGVmaW5lIF94ZGdfbWltZV9jYWNoZV9nZXRfbWltZV90eXBlX2Zvcl9maWxl
ICAgICAgICBYREdfUkVTRVJWRURfRU5UUlkoY2FjaGVfZ2V0X21pbWVfdHlwZV9mb3JfZmlsZSkK
KyNkZWZpbmUgX3hkZ19taW1lX2NhY2hlX2dldF9taW1lX3R5cGVfZnJvbV9maWxlX25hbWUgIFhE
R19SRVNFUlZFRF9FTlRSWShjYWNoZV9nZXRfbWltZV90eXBlX2Zyb21fZmlsZV9uYW1lKQorI2Rl
ZmluZSBfeGRnX21pbWVfY2FjaGVfZ2V0X21pbWVfdHlwZXNfZnJvbV9maWxlX25hbWUgWERHX1JF
U0VSVkVEX0VOVFJZKGNhY2hlX2dldF9taW1lX3R5cGVzX2Zyb21fZmlsZV9uYW1lKQorI2RlZmlu
ZSBfeGRnX21pbWVfY2FjaGVfbGlzdF9taW1lX3BhcmVudHMgICAgICAgICAgICAgWERHX1JFU0VS
VkVEX0VOVFJZKGNhY2hlX2xpc3RfbWltZV9wYXJlbnRzKQorI2RlZmluZSBfeGRnX21pbWVfY2Fj
aGVfbWltZV90eXBlX3N1YmNsYXNzICAgICAgICAgICAgWERHX1JFU0VSVkVEX0VOVFJZKGNhY2hl
X21pbWVfdHlwZV9zdWJjbGFzcykKKyNkZWZpbmUgX3hkZ19taW1lX2NhY2hlX3VuYWxpYXNfbWlt
ZV90eXBlICAgICAgICAgICAgIFhER19SRVNFUlZFRF9FTlRSWShjYWNoZV91bmFsaWFzX21pbWVf
dHlwZSkKKyNkZWZpbmUgX3hkZ19taW1lX2NhY2hlX2dldF9pY29uICAgICAgICAgICAgICAgICAg
ICAgIFhER19SRVNFUlZFRF9FTlRSWShjYWNoZV9nZXRfaWNvbikKKyNkZWZpbmUgX3hkZ19taW1l
X2NhY2hlX2dldF9nZW5lcmljX2ljb24gICAgICAgICAgICAgIFhER19SRVNFUlZFRF9FTlRSWShj
YWNoZV9nZXRfZ2VuZXJpY19pY29uKQorI2RlZmluZSBfeGRnX21pbWVfY2FjaGVfZ2V0X3NpbXBs
ZV9nbG9icyAgICAgICAgICAgICAgWERHX1JFU0VSVkVEX0VOVFJZKGNhY2hlX2dldF9zaW1wbGVf
Z2xvYnMpCisjZGVmaW5lIF94ZGdfbWltZV9jYWNoZV9nbG9iX2R1bXAgICAgICAgICAgICAgICAg
ICAgICBYREdfUkVTRVJWRURfRU5UUlkoY2FjaGVfZ2xvYl9kdW1wKQorI2VuZGlmCisKK2V4dGVy
biBYZGdNaW1lQ2FjaGUgKipfY2FjaGVzOworCitYZGdNaW1lQ2FjaGUgKl94ZGdfbWltZV9jYWNo
ZV9uZXdfZnJvbV9maWxlIChjb25zdCBjaGFyICAgKmZpbGVfbmFtZSk7CitYZGdNaW1lQ2FjaGUg
Kl94ZGdfbWltZV9jYWNoZV9yZWYgICAgICAgICAgIChYZGdNaW1lQ2FjaGUgKmNhY2hlKTsKK3Zv
aWQgICAgICAgICAgX3hkZ19taW1lX2NhY2hlX3VucmVmICAgICAgICAgKFhkZ01pbWVDYWNoZSAq
Y2FjaGUpOworCisKK2NvbnN0IGNoYXIgICpfeGRnX21pbWVfY2FjaGVfZ2V0X21pbWVfdHlwZV9m
b3JfZGF0YSAgICAgICAoY29uc3Qgdm9pZCAqZGF0YSwKKwkJIAkJCQkgICAgICAgICAgIHNpemVf
dCAgICAgIGxlbiwKKwkJCQkJCQkgICBpbnQgICAgICAgICpyZXN1bHRfcHJpbyk7Citjb25zdCBj
aGFyICAqX3hkZ19taW1lX2NhY2hlX2dldF9taW1lX3R5cGVfZm9yX2ZpbGUgICAgICAgKGNvbnN0
IGNoYXIgICpmaWxlX25hbWUsCisJCQkJCQkJICAgc3RydWN0IHN0YXQgKnN0YXRidWYpOworaW50
ICAgICAgICAgIF94ZGdfbWltZV9jYWNoZV9nZXRfbWltZV90eXBlc19mcm9tX2ZpbGVfbmFtZSAo
Y29uc3QgY2hhciAqZmlsZV9uYW1lLAorCQkJCQkJCSAgICBjb25zdCBjaGFyICAqbWltZV90eXBl
c1tdLAorCQkJCQkJCSAgICBpbnQgICAgICAgICAgbl9taW1lX3R5cGVzKTsKK2NvbnN0IGNoYXIg
ICpfeGRnX21pbWVfY2FjaGVfZ2V0X21pbWVfdHlwZV9mcm9tX2ZpbGVfbmFtZSAoY29uc3QgY2hh
ciAqZmlsZV9uYW1lKTsKK2ludCAgICAgICAgICBfeGRnX21pbWVfY2FjaGVfaXNfdmFsaWRfbWlt
ZV90eXBlICAgICAgICAgICAoY29uc3QgY2hhciAqbWltZV90eXBlKTsKK2ludCAgICAgICAgICBf
eGRnX21pbWVfY2FjaGVfbWltZV90eXBlX2VxdWFsICAgICAgICAgICAgICAoY29uc3QgY2hhciAq
bWltZV9hLAorCQkJCQkJICAgICAgICAgICBjb25zdCBjaGFyICptaW1lX2IpOworaW50ICAgICAg
ICAgIF94ZGdfbWltZV9jYWNoZV9tZWRpYV90eXBlX2VxdWFsICAgICAgICAgICAgIChjb25zdCBj
aGFyICptaW1lX2EsCisJCQkJCQkJICAgY29uc3QgY2hhciAqbWltZV9iKTsKK2ludCAgICAgICAg
ICBfeGRnX21pbWVfY2FjaGVfbWltZV90eXBlX3N1YmNsYXNzICAgICAgICAgICAoY29uc3QgY2hh
ciAqbWltZV9hLAorCQkJCQkJCSAgIGNvbnN0IGNoYXIgKm1pbWVfYik7CitjaGFyICAgICAgICoq
X3hkZ19taW1lX2NhY2hlX2xpc3RfbWltZV9wYXJlbnRzCQkgIChjb25zdCBjaGFyICptaW1lKTsK
K2NvbnN0IGNoYXIgICpfeGRnX21pbWVfY2FjaGVfdW5hbGlhc19taW1lX3R5cGUgICAgICAgICAg
ICAoY29uc3QgY2hhciAqbWltZSk7CitpbnQgICAgICAgICAgX3hkZ19taW1lX2NhY2hlX2dldF9t
YXhfYnVmZmVyX2V4dGVudHMgICAgICAgKHZvaWQpOworY29uc3QgY2hhciAgKl94ZGdfbWltZV9j
YWNoZV9nZXRfaWNvbiAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICptaW1lKTsKK2Nv
bnN0IGNoYXIgICpfeGRnX21pbWVfY2FjaGVfZ2V0X2dlbmVyaWNfaWNvbiAgICAgICAgICAgICAo
Y29uc3QgY2hhciAqbWltZSk7CitpbnQgICAgICAgICAgX3hkZ19taW1lX2NhY2hlX2dldF9zaW1w
bGVfZ2xvYnMgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKm1pbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgKmds
b2JzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCAgICAgICAgIG5fZ2xvYnMpOwordm9pZCAgICAgICAgIF94ZGdfbWltZV9j
YWNoZV9nbG9iX2R1bXAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKKworI2VuZGlmIC8qIF9f
WERHX01JTUVfQ0FDSEVfSF9fICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS94ZGdt
aW1lL3NyYy94ZGdtaW1lZ2xvYi5jIGIvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9zcmMveGRn
bWltZWdsb2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmZkOTBm
YzJmYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS94ZGdtaW1lL3NyYy94
ZGdtaW1lZ2xvYi5jCkBAIC0wLDAgKzEsNzUyIEBACisvKiAtKi0gbW9kZTogQzsgYy1maWxlLXN0
eWxlOiAiZ251IiAtKi0gKi8KKy8qIHhkZ21pbWVnbG9iLmM6IFByaXZhdGUgZmlsZS4gIERhdGFz
dHJ1Y3R1cmUgZm9yIHN0b3JpbmcgdGhlIGdsb2JzLgorICoKKyAqIE1vcmUgaW5mbyBjYW4gYmUg
Zm91bmQgYXQgaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc3RhbmRhcmRzLworICoKKyAqIENv
cHlyaWdodCAoQykgMjAwMyAgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzICBK
b25hdGhhbiBCbGFuZGZvcmQgPGpyYkBhbHVtLm1pdC5lZHU+CisgKgorICogTGljZW5zZWQgdW5k
ZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDIuMAorICogT3IgdW5kZXIgdGhl
IGZvbGxvd2luZyB0ZXJtczoKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAs
CisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05G
SUdfSAorI2luY2x1ZGUgImNtYWtlY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgInhkZ21p
bWVnbG9iLmgiCisjaW5jbHVkZSAieGRnbWltZWludC5oIgorI2luY2x1ZGUgPHN0ZGxpYi5oPgor
I2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5n
Lmg+CisjaW5jbHVkZSA8Zm5tYXRjaC5oPgorCisjaWZuZGVmCUZBTFNFCisjZGVmaW5lCUZBTFNF
CSgwKQorI2VuZGlmCisKKyNpZm5kZWYJVFJVRQorI2RlZmluZQlUUlVFCSghRkFMU0UpCisjZW5k
aWYKKwordHlwZWRlZiBzdHJ1Y3QgWGRnR2xvYkhhc2hOb2RlIFhkZ0dsb2JIYXNoTm9kZTsKK3R5
cGVkZWYgc3RydWN0IFhkZ0dsb2JMaXN0IFhkZ0dsb2JMaXN0OworCitzdHJ1Y3QgWGRnR2xvYkhh
c2hOb2RlCit7CisgIHhkZ191bmljaGFyX3QgY2hhcmFjdGVyOworICBjb25zdCBjaGFyICptaW1l
X3R5cGU7CisgIGludCB3ZWlnaHQ7CisgIGludCBjYXNlX3NlbnNpdGl2ZTsKKyAgWGRnR2xvYkhh
c2hOb2RlICpuZXh0OworICBYZGdHbG9iSGFzaE5vZGUgKmNoaWxkOworfTsKK3N0cnVjdCBYZGdH
bG9iTGlzdAoreworICBjb25zdCBjaGFyICpkYXRhOworICBjb25zdCBjaGFyICptaW1lX3R5cGU7
CisgIGludCB3ZWlnaHQ7CisgIGludCBjYXNlX3NlbnNpdGl2ZTsKKyAgWGRnR2xvYkxpc3QgKm5l
eHQ7Cit9OworCitzdHJ1Y3QgWGRnR2xvYkhhc2gKK3sKKyAgWGRnR2xvYkxpc3QgKmxpdGVyYWxf
bGlzdDsKKyAgWGRnR2xvYkhhc2hOb2RlICpzaW1wbGVfbm9kZTsKKyAgWGRnR2xvYkxpc3QgKmZ1
bGxfbGlzdDsKK307CisKKworLyogWGRnR2xvYkxpc3QKKyAqLworc3RhdGljIFhkZ0dsb2JMaXN0
ICoKK194ZGdfZ2xvYl9saXN0X25ldyAodm9pZCkKK3sKKyAgWGRnR2xvYkxpc3QgKm5ld19lbGVt
ZW50OworCisgIG5ld19lbGVtZW50ID0gY2FsbG9jICgxLCBzaXplb2YgKFhkZ0dsb2JMaXN0KSk7
CisKKyAgcmV0dXJuIG5ld19lbGVtZW50OworfQorCisvKiBGcmVlcyBnbG9iX2xpc3QgYW5kIGFs
bCBvZiBpdCdzIGNoaWxkcmVuICovCitzdGF0aWMgdm9pZAorX3hkZ19nbG9iX2xpc3RfZnJlZSAo
WGRnR2xvYkxpc3QgKmdsb2JfbGlzdCkKK3sKKyAgWGRnR2xvYkxpc3QgKnB0ciwgKm5leHQ7CisK
KyAgcHRyID0gZ2xvYl9saXN0OworCisgIHdoaWxlIChwdHIgIT0gTlVMTCkKKyAgICB7CisgICAg
ICBuZXh0ID0gcHRyLT5uZXh0OworCisgICAgICBpZiAocHRyLT5kYXRhKQorCWZyZWUgKCh2b2lk
ICopIHB0ci0+ZGF0YSk7CisgICAgICBpZiAocHRyLT5taW1lX3R5cGUpCisJZnJlZSAoKHZvaWQg
KikgcHRyLT5taW1lX3R5cGUpOworICAgICAgZnJlZSAocHRyKTsKKworICAgICAgcHRyID0gbmV4
dDsKKyAgICB9Cit9CisKK3N0YXRpYyBYZGdHbG9iTGlzdCAqCitfeGRnX2dsb2JfbGlzdF9hcHBl
bmQgKFhkZ0dsb2JMaXN0ICpnbG9iX2xpc3QsCisJCSAgICAgICB2b2lkICAgICAgICAqZGF0YSwK
KwkJICAgICAgIGNvbnN0IGNoYXIgICptaW1lX3R5cGUsCisJCSAgICAgICBpbnQgICAgICAgICAg
d2VpZ2h0LAorCQkgICAgICAgaW50ICAgICAgICAgIGNhc2Vfc2Vuc2l0aXZlKQoreworICBYZGdH
bG9iTGlzdCAqbmV3X2VsZW1lbnQ7CisgIFhkZ0dsb2JMaXN0ICp0bXBfZWxlbWVudDsKKworICB0
bXBfZWxlbWVudCA9IGdsb2JfbGlzdDsKKyAgd2hpbGUgKHRtcF9lbGVtZW50ICE9IE5VTEwpCisg
ICAgeworICAgICAgaWYgKHN0cmNtcCAodG1wX2VsZW1lbnQtPmRhdGEsIGRhdGEpID09IDAgJiYK
KwkgIHN0cmNtcCAodG1wX2VsZW1lbnQtPm1pbWVfdHlwZSwgbWltZV90eXBlKSA9PSAwKQorCXJl
dHVybiBnbG9iX2xpc3Q7CisKKyAgICAgIHRtcF9lbGVtZW50ID0gdG1wX2VsZW1lbnQtPm5leHQ7
CisgICAgfQorCisgIG5ld19lbGVtZW50ID0gX3hkZ19nbG9iX2xpc3RfbmV3ICgpOworICBuZXdf
ZWxlbWVudC0+ZGF0YSA9IGRhdGE7CisgIG5ld19lbGVtZW50LT5taW1lX3R5cGUgPSBtaW1lX3R5
cGU7CisgIG5ld19lbGVtZW50LT53ZWlnaHQgPSB3ZWlnaHQ7CisgIG5ld19lbGVtZW50LT5jYXNl
X3NlbnNpdGl2ZSA9IGNhc2Vfc2Vuc2l0aXZlOworICBpZiAoZ2xvYl9saXN0ID09IE5VTEwpCisg
ICAgcmV0dXJuIG5ld19lbGVtZW50OworCisgIHRtcF9lbGVtZW50ID0gZ2xvYl9saXN0OworICB3
aGlsZSAodG1wX2VsZW1lbnQtPm5leHQgIT0gTlVMTCkKKyAgICB0bXBfZWxlbWVudCA9IHRtcF9l
bGVtZW50LT5uZXh0OworCisgIHRtcF9lbGVtZW50LT5uZXh0ID0gbmV3X2VsZW1lbnQ7CisKKyAg
cmV0dXJuIGdsb2JfbGlzdDsKK30KKworLyogWGRnR2xvYkhhc2hOb2RlCisgKi8KKworc3RhdGlj
IFhkZ0dsb2JIYXNoTm9kZSAqCitfeGRnX2dsb2JfaGFzaF9ub2RlX25ldyAodm9pZCkKK3sKKyAg
WGRnR2xvYkhhc2hOb2RlICpnbG9iX2hhc2hfbm9kZTsKKworICBnbG9iX2hhc2hfbm9kZSA9IGNh
bGxvYyAoMSwgc2l6ZW9mIChYZGdHbG9iSGFzaE5vZGUpKTsKKworICByZXR1cm4gZ2xvYl9oYXNo
X25vZGU7Cit9CisKK3N0YXRpYyB2b2lkCitfeGRnX2dsb2JfaGFzaF9ub2RlX2R1bXAgKFhkZ0ds
b2JIYXNoTm9kZSAqZ2xvYl9oYXNoX25vZGUsCisJCQkgIGludCBkZXB0aCkKK3sKKyAgaW50IGk7
CisgIGZvciAoaSA9IDA7IGkgPCBkZXB0aDsgaSsrKQorICAgIHByaW50ZiAoIiAiKTsKKworICBw
cmludGYgKCIlYyIsIChjaGFyKWdsb2JfaGFzaF9ub2RlLT5jaGFyYWN0ZXIpOworICBpZiAoZ2xv
Yl9oYXNoX25vZGUtPm1pbWVfdHlwZSkKKyAgICBwcmludGYgKCIgLSAlcyAlZFxuIiwgZ2xvYl9o
YXNoX25vZGUtPm1pbWVfdHlwZSwgZ2xvYl9oYXNoX25vZGUtPndlaWdodCk7CisgIGVsc2UKKyAg
ICBwcmludGYgKCJcbiIpOworICBpZiAoZ2xvYl9oYXNoX25vZGUtPmNoaWxkKQorICAgIF94ZGdf
Z2xvYl9oYXNoX25vZGVfZHVtcCAoZ2xvYl9oYXNoX25vZGUtPmNoaWxkLCBkZXB0aCArIDEpOwor
ICBpZiAoZ2xvYl9oYXNoX25vZGUtPm5leHQpCisgICAgX3hkZ19nbG9iX2hhc2hfbm9kZV9kdW1w
IChnbG9iX2hhc2hfbm9kZS0+bmV4dCwgZGVwdGgpOworfQorCitzdGF0aWMgWGRnR2xvYkhhc2hO
b2RlICoKK194ZGdfZ2xvYl9oYXNoX2luc2VydF91Y3M0IChYZGdHbG9iSGFzaE5vZGUgKmdsb2Jf
aGFzaF9ub2RlLAorCQkJICAgIHhkZ191bmljaGFyX3QgICAqdGV4dCwKKwkJCSAgICBjb25zdCBj
aGFyICAgICAgKm1pbWVfdHlwZSwKKwkJCSAgICBpbnQgICAgICAgICAgICAgIHdlaWdodCwKKwkJ
CSAgICBpbnQgICAgICAgICAgICAgIGNhc2Vfc2Vuc2l0aXZlKQoreworICBYZGdHbG9iSGFzaE5v
ZGUgKm5vZGU7CisgIHhkZ191bmljaGFyX3QgY2hhcmFjdGVyOworCisgIGNoYXJhY3RlciA9IHRl
eHRbMF07CisKKyAgaWYgKChnbG9iX2hhc2hfbm9kZSA9PSBOVUxMKSB8fAorICAgICAgKGNoYXJh
Y3RlciA8IGdsb2JfaGFzaF9ub2RlLT5jaGFyYWN0ZXIpKQorICAgIHsKKyAgICAgIG5vZGUgPSBf
eGRnX2dsb2JfaGFzaF9ub2RlX25ldyAoKTsKKyAgICAgIG5vZGUtPmNoYXJhY3RlciA9IGNoYXJh
Y3RlcjsKKyAgICAgIG5vZGUtPm5leHQgPSBnbG9iX2hhc2hfbm9kZTsKKyAgICAgIGdsb2JfaGFz
aF9ub2RlID0gbm9kZTsKKyAgICB9CisgIGVsc2UgaWYgKGNoYXJhY3RlciA9PSBnbG9iX2hhc2hf
bm9kZS0+Y2hhcmFjdGVyKQorICAgIHsKKyAgICAgIG5vZGUgPSBnbG9iX2hhc2hfbm9kZTsKKyAg
ICB9CisgIGVsc2UKKyAgICB7CisgICAgICBYZGdHbG9iSGFzaE5vZGUgKnByZXZfbm9kZTsKKyAg
ICAgIGludCBmb3VuZF9ub2RlID0gRkFMU0U7CisKKyAgICAgIC8qIExvb2sgZm9yIHRoZSBmaXJz
dCBjaGFyYWN0ZXIgb2YgdGV4dCBpbiBnbG9iX2hhc2hfbm9kZSwgYW5kIGluc2VydCBpdCBpZiB3
ZQorICAgICAgICogaGF2ZSB0by4qLworICAgICAgcHJldl9ub2RlID0gZ2xvYl9oYXNoX25vZGU7
CisgICAgICBub2RlID0gcHJldl9ub2RlLT5uZXh0OworCisgICAgICB3aGlsZSAobm9kZSAhPSBO
VUxMKQorCXsKKwkgIGlmIChjaGFyYWN0ZXIgPCBub2RlLT5jaGFyYWN0ZXIpCisJICAgIHsKKwkg
ICAgICBub2RlID0gX3hkZ19nbG9iX2hhc2hfbm9kZV9uZXcgKCk7CisJICAgICAgbm9kZS0+Y2hh
cmFjdGVyID0gY2hhcmFjdGVyOworCSAgICAgIG5vZGUtPm5leHQgPSBwcmV2X25vZGUtPm5leHQ7
CisJICAgICAgcHJldl9ub2RlLT5uZXh0ID0gbm9kZTsKKworCSAgICAgIGZvdW5kX25vZGUgPSBU
UlVFOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICBlbHNlIGlmIChjaGFyYWN0ZXIgPT0gbm9k
ZS0+Y2hhcmFjdGVyKQorCSAgICB7CisJICAgICAgZm91bmRfbm9kZSA9IFRSVUU7CisJICAgICAg
YnJlYWs7CisJICAgIH0KKwkgIHByZXZfbm9kZSA9IG5vZGU7CisJICBub2RlID0gbm9kZS0+bmV4
dDsKKwl9CisKKyAgICAgIGlmICghIGZvdW5kX25vZGUpCisJeworCSAgbm9kZSA9IF94ZGdfZ2xv
Yl9oYXNoX25vZGVfbmV3ICgpOworCSAgbm9kZS0+Y2hhcmFjdGVyID0gY2hhcmFjdGVyOworCSAg
bm9kZS0+bmV4dCA9IHByZXZfbm9kZS0+bmV4dDsKKwkgIHByZXZfbm9kZS0+bmV4dCA9IG5vZGU7
CisJfQorICAgIH0KKworICB0ZXh0Kys7CisgIGlmICgqdGV4dCA9PSAwKQorICAgIHsKKyAgICAg
IGlmIChub2RlLT5taW1lX3R5cGUpCisJeworCSAgaWYgKHN0cmNtcCAobm9kZS0+bWltZV90eXBl
LCBtaW1lX3R5cGUpICE9IDApCisJICAgIHsKKwkgICAgICBYZGdHbG9iSGFzaE5vZGUgKmNoaWxk
OworCSAgICAgIGludCBmb3VuZF9ub2RlID0gRkFMU0U7CisKKwkgICAgICBjaGlsZCA9IG5vZGUt
PmNoaWxkOworCSAgICAgIHdoaWxlIChjaGlsZCAmJiBjaGlsZC0+Y2hhcmFjdGVyID09IDApCisJ
CXsKKwkJICBpZiAoc3RyY21wIChjaGlsZC0+bWltZV90eXBlLCBtaW1lX3R5cGUpID09IDApCisJ
CSAgICB7CisJCSAgICAgIGZvdW5kX25vZGUgPSBUUlVFOworCQkgICAgICBicmVhazsKKwkJICAg
IH0KKwkJICBjaGlsZCA9IGNoaWxkLT5uZXh0OworCQl9CisKKwkgICAgICBpZiAoIWZvdW5kX25v
ZGUpCisJCXsKKwkJICBjaGlsZCA9IF94ZGdfZ2xvYl9oYXNoX25vZGVfbmV3ICgpOworCQkgIGNo
aWxkLT5jaGFyYWN0ZXIgPSAwOworCQkgIGNoaWxkLT5taW1lX3R5cGUgPSBzdHJkdXAgKG1pbWVf
dHlwZSk7CisJCSAgY2hpbGQtPndlaWdodCA9IHdlaWdodDsKKwkJICBjaGlsZC0+Y2FzZV9zZW5z
aXRpdmUgPSBjYXNlX3NlbnNpdGl2ZTsKKwkJICBjaGlsZC0+Y2hpbGQgPSBOVUxMOworCQkgIGNo
aWxkLT5uZXh0ID0gbm9kZS0+Y2hpbGQ7CisJCSAgbm9kZS0+Y2hpbGQgPSBjaGlsZDsKKwkJfQor
CSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIG5vZGUtPm1pbWVfdHlwZSA9IHN0cmR1cCAo
bWltZV90eXBlKTsKKwkgIG5vZGUtPndlaWdodCA9IHdlaWdodDsKKwkgIG5vZGUtPmNhc2Vfc2Vu
c2l0aXZlID0gY2FzZV9zZW5zaXRpdmU7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAg
IG5vZGUtPmNoaWxkID0gX3hkZ19nbG9iX2hhc2hfaW5zZXJ0X3VjczQgKG5vZGUtPmNoaWxkLCB0
ZXh0LCBtaW1lX3R5cGUsIHdlaWdodCwgY2FzZV9zZW5zaXRpdmUpOworICAgIH0KKyAgcmV0dXJu
IGdsb2JfaGFzaF9ub2RlOworfQorCisvKiBnbG9iIG11c3QgYmUgdmFsaWQgVVRGLTggKi8KK3N0
YXRpYyBYZGdHbG9iSGFzaE5vZGUgKgorX3hkZ19nbG9iX2hhc2hfaW5zZXJ0X3RleHQgKFhkZ0ds
b2JIYXNoTm9kZSAqZ2xvYl9oYXNoX25vZGUsCisJCQkgICAgY29uc3QgY2hhciAgICAgICp0ZXh0
LAorCQkJICAgIGNvbnN0IGNoYXIgICAgICAqbWltZV90eXBlLAorCQkJICAgIGludCAgICAgICAg
ICAgICAgd2VpZ2h0LAorCQkJICAgIGludCAgICAgICAgICAgICAgY2FzZV9zZW5zaXRpdmUpCit7
CisgIFhkZ0dsb2JIYXNoTm9kZSAqbm9kZTsKKyAgeGRnX3VuaWNoYXJfdCAqdW5pdGV4dDsKKyAg
aW50IGxlbjsKKworICB1bml0ZXh0ID0gX3hkZ19jb252ZXJ0X3RvX3VjczQgKHRleHQsICZsZW4p
OworICBfeGRnX3JldmVyc2VfdWNzNCAodW5pdGV4dCwgbGVuKTsKKyAgbm9kZSA9IF94ZGdfZ2xv
Yl9oYXNoX2luc2VydF91Y3M0IChnbG9iX2hhc2hfbm9kZSwgdW5pdGV4dCwgbWltZV90eXBlLCB3
ZWlnaHQsIGNhc2Vfc2Vuc2l0aXZlKTsKKyAgZnJlZSAodW5pdGV4dCk7CisgIHJldHVybiBub2Rl
OworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm1pbWU7CisgIGludCB3ZWln
aHQ7Cit9IE1pbWVXZWlnaHQ7CisKK3N0YXRpYyBpbnQKK194ZGdfZ2xvYl9oYXNoX25vZGVfbG9v
a3VwX2ZpbGVfbmFtZSAoWGRnR2xvYkhhc2hOb2RlICpnbG9iX2hhc2hfbm9kZSwKKwkJCQkgICAg
ICBjb25zdCBjaGFyICAgICAgKmZpbGVfbmFtZSwKKwkJCQkgICAgICBpbnQgICAgICAgICAgICAg
IGxlbiwKKwkJCQkgICAgICBpbnQgICAgICAgICAgICAgIGNhc2Vfc2Vuc2l0aXZlX2NoZWNrLAor
CQkJCSAgICAgIE1pbWVXZWlnaHQgICAgICAgbWltZV90eXBlc1tdLAorCQkJCSAgICAgIGludCAg
ICAgICAgICAgICAgbl9taW1lX3R5cGVzKQoreworICBpbnQgbjsKKyAgWGRnR2xvYkhhc2hOb2Rl
ICpub2RlOworICB4ZGdfdW5pY2hhcl90IGNoYXJhY3RlcjsKKworICBpZiAoZ2xvYl9oYXNoX25v
ZGUgPT0gTlVMTCkKKyAgICByZXR1cm4gMDsKKworICBjaGFyYWN0ZXIgPSBmaWxlX25hbWVbbGVu
IC0gMV07CisKKyAgZm9yIChub2RlID0gZ2xvYl9oYXNoX25vZGU7IG5vZGUgJiYgY2hhcmFjdGVy
ID49IG5vZGUtPmNoYXJhY3Rlcjsgbm9kZSA9IG5vZGUtPm5leHQpCisgICAgeworICAgICAgaWYg
KGNoYXJhY3RlciA9PSBub2RlLT5jaGFyYWN0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICBsZW4t
LTsKKyAgICAgICAgICBuID0gMDsKKyAgICAgICAgICBpZiAobGVuID4gMCkgCisJICAgIHsKKwkg
ICAgICBuID0gX3hkZ19nbG9iX2hhc2hfbm9kZV9sb29rdXBfZmlsZV9uYW1lIChub2RlLT5jaGls
ZCwKKwkJCQkJCQlmaWxlX25hbWUsCisJCQkJCQkJbGVuLAorCQkJCQkJCWNhc2Vfc2Vuc2l0aXZl
X2NoZWNrLAorCQkJCQkJCW1pbWVfdHlwZXMsCisJCQkJCQkJbl9taW1lX3R5cGVzKTsKKwkgICAg
fQorCSAgaWYgKG4gPT0gMCkKKwkgICAgeworICAgICAgICAgICAgICBpZiAobm9kZS0+bWltZV90
eXBlICYmCisJCSAgKGNhc2Vfc2Vuc2l0aXZlX2NoZWNrIHx8CisJCSAgICFub2RlLT5jYXNlX3Nl
bnNpdGl2ZSkpCisgICAgICAgICAgICAgICAgeworCSAgICAgICAgICBtaW1lX3R5cGVzW25dLm1p
bWUgPSBub2RlLT5taW1lX3R5cGU7CisJCSAgbWltZV90eXBlc1tuXS53ZWlnaHQgPSBub2RlLT53
ZWlnaHQ7CisJCSAgbisrOyAKKyAgICAgICAgICAgICAgICB9CisJICAgICAgbm9kZSA9IG5vZGUt
PmNoaWxkOworCSAgICAgIHdoaWxlIChuIDwgbl9taW1lX3R5cGVzICYmIG5vZGUgJiYgbm9kZS0+
Y2hhcmFjdGVyID09IDApCisJCXsKKyAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5taW1lX3R5
cGUgJiYKKwkJICAgICAgKGNhc2Vfc2Vuc2l0aXZlX2NoZWNrIHx8CisJCSAgICAgICAhbm9kZS0+
Y2FzZV9zZW5zaXRpdmUpKQorCQkgICAgeworCQkgICAgICBtaW1lX3R5cGVzW25dLm1pbWUgPSBu
b2RlLT5taW1lX3R5cGU7CisJCSAgICAgIG1pbWVfdHlwZXNbbl0ud2VpZ2h0ID0gbm9kZS0+d2Vp
Z2h0OworCQkgICAgICBuKys7CisJCSAgICB9CisJCSAgbm9kZSA9IG5vZGUtPm5leHQ7CisJCX0K
KwkgICAgfQorCSAgcmV0dXJuIG47CisJfQorICAgIH0KKworICByZXR1cm4gMDsKK30KKworc3Rh
dGljIGludCBjb21wYXJlX21pbWVfd2VpZ2h0IChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpi
KQoreworICBjb25zdCBNaW1lV2VpZ2h0ICphYSA9IChjb25zdCBNaW1lV2VpZ2h0ICopYTsKKyAg
Y29uc3QgTWltZVdlaWdodCAqYmIgPSAoY29uc3QgTWltZVdlaWdodCAqKWI7CisKKyAgcmV0dXJu
IGJiLT53ZWlnaHQgLSBhYS0+d2VpZ2h0OworfQorCisjZGVmaW5lIElTVVBQRVIoYykJCSgoYykg
Pj0gJ0EnICYmIChjKSA8PSAnWicpCitzdGF0aWMgY2hhciAqCithc2NpaV90b2xvd2VyIChjb25z
dCBjaGFyICpzdHIpCit7CisgIGNoYXIgKnAsICpsb3dlcjsKKworICBsb3dlciA9IHN0cmR1cCAo
c3RyKTsKKyAgcCA9IGxvd2VyOworICB3aGlsZSAoKnAgIT0gMCkKKyAgICB7CisgICAgICBjaGFy
IGMgPSAqcDsKKyAgICAgICpwKysgPSBJU1VQUEVSIChjKSA/IGMgLSAnQScgKyAnYScgOiBjOwor
ICAgIH0KKyAgcmV0dXJuIGxvd2VyOworfQorCitpbnQKK194ZGdfZ2xvYl9oYXNoX2xvb2t1cF9m
aWxlX25hbWUgKFhkZ0dsb2JIYXNoICpnbG9iX2hhc2gsCisJCQkJIGNvbnN0IGNoYXIgICpmaWxl
X25hbWUsCisJCQkJIGNvbnN0IGNoYXIgICptaW1lX3R5cGVzW10sCisJCQkJIGludCAgICAgICAg
ICBuX21pbWVfdHlwZXMpCit7CisgIFhkZ0dsb2JMaXN0ICpsaXN0OworICBpbnQgaSwgbjsKKyAg
TWltZVdlaWdodCBtaW1lc1sxMF07CisgIGludCBuX21pbWVzID0gMTA7CisgIGludCBsZW47Cisg
IGNoYXIgKmxvd2VyX2Nhc2U7CisKKyAgLyogRmlyc3QsIGNoZWNrIHRoZSBsaXRlcmFscyAqLwor
CisgIGFzc2VydCAoZmlsZV9uYW1lICE9IE5VTEwgJiYgbl9taW1lX3R5cGVzID4gMCk7CisKKyAg
biA9IDA7CisKKyAgbG93ZXJfY2FzZSA9IGFzY2lpX3RvbG93ZXIgKGZpbGVfbmFtZSk7CisKKyAg
Zm9yIChsaXN0ID0gZ2xvYl9oYXNoLT5saXRlcmFsX2xpc3Q7IGxpc3Q7IGxpc3QgPSBsaXN0LT5u
ZXh0KQorICAgIHsKKyAgICAgIGlmIChzdHJjbXAgKChjb25zdCBjaGFyICopbGlzdC0+ZGF0YSwg
ZmlsZV9uYW1lKSA9PSAwKQorCXsKKwkgIG1pbWVfdHlwZXNbMF0gPSBsaXN0LT5taW1lX3R5cGU7
CisJICBmcmVlIChsb3dlcl9jYXNlKTsKKwkgIHJldHVybiAxOworCX0KKyAgICB9CisKKyAgZm9y
IChsaXN0ID0gZ2xvYl9oYXNoLT5saXRlcmFsX2xpc3Q7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0
KQorICAgIHsKKyAgICAgIGlmICghbGlzdC0+Y2FzZV9zZW5zaXRpdmUgJiYKKwkgIHN0cmNtcCAo
KGNvbnN0IGNoYXIgKilsaXN0LT5kYXRhLCBsb3dlcl9jYXNlKSA9PSAwKQorCXsKKwkgIG1pbWVf
dHlwZXNbMF0gPSBsaXN0LT5taW1lX3R5cGU7CisJICBmcmVlIChsb3dlcl9jYXNlKTsKKwkgIHJl
dHVybiAxOworCX0KKyAgICB9CisKKworICBsZW4gPSBzdHJsZW4gKGZpbGVfbmFtZSk7CisgIG4g
PSBfeGRnX2dsb2JfaGFzaF9ub2RlX2xvb2t1cF9maWxlX25hbWUgKGdsb2JfaGFzaC0+c2ltcGxl
X25vZGUsIGxvd2VyX2Nhc2UsIGxlbiwgRkFMU0UsCisJCQkJCSAgICBtaW1lcywgbl9taW1lcyk7
CisgIGlmIChuID09IDApCisgICAgbiA9IF94ZGdfZ2xvYl9oYXNoX25vZGVfbG9va3VwX2ZpbGVf
bmFtZSAoZ2xvYl9oYXNoLT5zaW1wbGVfbm9kZSwgZmlsZV9uYW1lLCBsZW4sIFRSVUUsCisJCQkJ
CSAgICAgIG1pbWVzLCBuX21pbWVzKTsKKworICBpZiAobiA9PSAwKQorICAgIHsKKyAgICAgIGZv
ciAobGlzdCA9IGdsb2JfaGFzaC0+ZnVsbF9saXN0OyBsaXN0ICYmIG4gPCBuX21pbWVfdHlwZXM7
IGxpc3QgPSBsaXN0LT5uZXh0KQorICAgICAgICB7CisgICAgICAgICAgaWYgKGZubWF0Y2ggKChj
b25zdCBjaGFyICopbGlzdC0+ZGF0YSwgZmlsZV9uYW1lLCAwKSA9PSAwKQorCSAgICB7CisJICAg
ICAgbWltZXNbbl0ubWltZSA9IGxpc3QtPm1pbWVfdHlwZTsKKwkgICAgICBtaW1lc1tuXS53ZWln
aHQgPSBsaXN0LT53ZWlnaHQ7CisJICAgICAgbisrOworCSAgICB9CisgICAgICAgIH0KKyAgICB9
CisgIGZyZWUgKGxvd2VyX2Nhc2UpOworCisgIHFzb3J0IChtaW1lcywgbiwgc2l6ZW9mIChNaW1l
V2VpZ2h0KSwgY29tcGFyZV9taW1lX3dlaWdodCk7CisKKyAgaWYgKG5fbWltZV90eXBlcyA8IG4p
CisgICAgbiA9IG5fbWltZV90eXBlczsKKworICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorICAg
IG1pbWVfdHlwZXNbaV0gPSBtaW1lc1tpXS5taW1lOworCisgIHJldHVybiBuOworfQorCitzdGF0
aWMgaW50CitnZXRfc2ltcGxlX2dsb2JzIChYZGdHbG9iSGFzaE5vZGUgKmdsb2JfaGFzaF9ub2Rl
LAorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICptaW1lLAorICAgICAgICAgICAg
ICAgICAgY2hhciAgICAgICAgICAgICpnbG9ic1tdLAorICAgICAgICAgICAgICAgICAgaW50ICAg
ICAgICAgICAgICBuX2dsb2JzLAorICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICpu
LAorICAgICAgICAgICAgICAgICAgeGRnX3VuaWNoYXJfdCAgICpwcmVmaXgsCisgICAgICAgICAg
ICAgICAgICBpbnQgICAgICAgICAgICAgIGRlcHRoKQoreworICBpZiAoKm4gPj0gbl9nbG9icykK
KyAgICByZXR1cm4gRkFMU0U7CisKKyAgcHJlZml4W2RlcHRoXSA9IGdsb2JfaGFzaF9ub2RlLT5j
aGFyYWN0ZXI7CisKKyAgaWYgKGdsb2JfaGFzaF9ub2RlLT5taW1lX3R5cGUpCisgICAgeworICAg
ICAgaWYgKHN0cmNhc2VjbXAgKGdsb2JfaGFzaF9ub2RlLT5taW1lX3R5cGUsIG1pbWUpID09IDAp
CisgICAgICAgIHsKKyAgICAgICAgICBpbnQgaTsKKworICAgICAgICAgIGdsb2JzWypuXSA9IG1h
bGxvYyAoZGVwdGggKiBzaXplb2YgKGNoYXIpKTsKKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
ZGVwdGg7IGkrKykKKyAgICAgICAgICAgIGdsb2JzWypuXVtkZXB0aCAtIGkgLSAxXSA9IHByZWZp
eFtpXTsKKyAgICAgICAgICBnbG9ic1sqbl1bZGVwdGhdID0gJ1wwJzsKKworICAgICAgICAgICgq
bikrKzsKKyAgICAgICAgfQorICAgIH0KKworICBpZiAoZ2xvYl9oYXNoX25vZGUtPmNoaWxkKQor
ICAgIHsKKyAgICAgIGlmICghZ2V0X3NpbXBsZV9nbG9icyAoZ2xvYl9oYXNoX25vZGUtPmNoaWxk
LCBtaW1lLCBnbG9icywgbl9nbG9icywgbiwgcHJlZml4LCBkZXB0aCArIDEpKQorICAgICAgICBy
ZXR1cm4gRkFMU0U7CisgICAgfQorCisgIGlmIChnbG9iX2hhc2hfbm9kZS0+bmV4dCkKKyAgICB7
CisgICAgICBpZiAoIWdldF9zaW1wbGVfZ2xvYnMgKGdsb2JfaGFzaF9ub2RlLT5uZXh0LCBtaW1l
LCBnbG9icywgbl9nbG9icywgbiwgcHJlZml4LCBkZXB0aCkpCisgICAgICAgIHJldHVybiBGQUxT
RTsKKyAgICB9CisKKyAgcmV0dXJuICpuIDwgbl9nbG9iczsKK30KKworaW50CitfeGRnX2dsb2Jf
aGFzaF9nZXRfc2ltcGxlX2dsb2JzIChYZGdHbG9iSGFzaCAqZ2xvYl9oYXNoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgKm1pbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAqZ2xvYnNbXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICBuX2dsb2JzKQoreworICB4ZGdfdW5pY2hh
cl90IHByZWZpeFsyNV07CisgIGludCBuOworCisgIGlmICghZ2xvYl9oYXNoIHx8IGdsb2JfaGFz
aC0+c2ltcGxlX25vZGUgPT0gTlVMTCkKKyAgICByZXR1cm4gMDsKKworICBuID0gMDsKKyAgZ2V0
X3NpbXBsZV9nbG9icyAoZ2xvYl9oYXNoLT5zaW1wbGVfbm9kZSwgeGRnX21pbWVfdW5hbGlhc19t
aW1lX3R5cGUgKG1pbWUpLCBnbG9icywgbl9nbG9icywgJm4sIHByZWZpeCwgMCk7CisKKyAgcmV0
dXJuIG47Cit9CisKKworLyogWGRnR2xvYkhhc2gKKyAqLworCitYZGdHbG9iSGFzaCAqCitfeGRn
X2dsb2JfaGFzaF9uZXcgKHZvaWQpCit7CisgIFhkZ0dsb2JIYXNoICpnbG9iX2hhc2g7CisKKyAg
Z2xvYl9oYXNoID0gY2FsbG9jICgxLCBzaXplb2YgKFhkZ0dsb2JIYXNoKSk7CisKKyAgcmV0dXJu
IGdsb2JfaGFzaDsKK30KKworCitzdGF0aWMgdm9pZAorX3hkZ19nbG9iX2hhc2hfZnJlZV9ub2Rl
cyAoWGRnR2xvYkhhc2hOb2RlICpub2RlKQoreworICBpZiAobm9kZSkKKyAgICB7CisgICAgICBp
ZiAobm9kZS0+Y2hpbGQpCisgICAgICAgX3hkZ19nbG9iX2hhc2hfZnJlZV9ub2RlcyAobm9kZS0+
Y2hpbGQpOworICAgICAgaWYgKG5vZGUtPm5leHQpCisgICAgICAgX3hkZ19nbG9iX2hhc2hfZnJl
ZV9ub2RlcyAobm9kZS0+bmV4dCk7CisgICAgICBpZiAobm9kZS0+bWltZV90eXBlKQorCWZyZWUg
KCh2b2lkICopIG5vZGUtPm1pbWVfdHlwZSk7CisgICAgICBmcmVlIChub2RlKTsKKyAgICB9Cit9
CisKK3ZvaWQKK194ZGdfZ2xvYl9oYXNoX2ZyZWUgKFhkZ0dsb2JIYXNoICpnbG9iX2hhc2gpCit7
CisgIF94ZGdfZ2xvYl9saXN0X2ZyZWUgKGdsb2JfaGFzaC0+bGl0ZXJhbF9saXN0KTsKKyAgX3hk
Z19nbG9iX2xpc3RfZnJlZSAoZ2xvYl9oYXNoLT5mdWxsX2xpc3QpOworICBfeGRnX2dsb2JfaGFz
aF9mcmVlX25vZGVzIChnbG9iX2hhc2gtPnNpbXBsZV9ub2RlKTsKKyAgZnJlZSAoZ2xvYl9oYXNo
KTsKK30KKworWGRnR2xvYlR5cGUKK194ZGdfZ2xvYl9kZXRlcm1pbmVfdHlwZSAoY29uc3QgY2hh
ciAqZ2xvYikKK3sKKyAgY29uc3QgY2hhciAqcHRyOworICBpbnQgbWF5YmVfaW5fc2ltcGxlX2ds
b2IgPSBGQUxTRTsKKyAgaW50IGZpcnN0X2NoYXIgPSBUUlVFOworCisgIHB0ciA9IGdsb2I7CisK
KyAgd2hpbGUgKCpwdHIgIT0gJ1wwJykKKyAgICB7CisgICAgICBpZiAoKnB0ciA9PSAnKicgJiYg
Zmlyc3RfY2hhcikKKwltYXliZV9pbl9zaW1wbGVfZ2xvYiA9IFRSVUU7CisgICAgICBlbHNlIGlm
ICgqcHRyID09ICdcXCcgfHwgKnB0ciA9PSAnWycgfHwgKnB0ciA9PSAnPycgfHwgKnB0ciA9PSAn
KicpCisJICByZXR1cm4gWERHX0dMT0JfRlVMTDsKKworICAgICAgZmlyc3RfY2hhciA9IEZBTFNF
OworICAgICAgcHRyID0gX3hkZ191dGY4X25leHRfY2hhciAocHRyKTsKKyAgICB9CisgIGlmICht
YXliZV9pbl9zaW1wbGVfZ2xvYikKKyAgICByZXR1cm4gWERHX0dMT0JfU0lNUExFOworICBlbHNl
CisgICAgcmV0dXJuIFhER19HTE9CX0xJVEVSQUw7Cit9CisKKy8qIGdsb2IgbXVzdCBiZSB2YWxp
ZCBVVEYtOCAqLwordm9pZAorX3hkZ19nbG9iX2hhc2hfYXBwZW5kX2dsb2IgKFhkZ0dsb2JIYXNo
ICpnbG9iX2hhc2gsCisJCQkgICAgY29uc3QgY2hhciAgKmdsb2IsCisJCQkgICAgY29uc3QgY2hh
ciAgKm1pbWVfdHlwZSwKKwkJCSAgICBpbnQgICAgICAgICAgd2VpZ2h0LAorCQkJICAgIGludCAg
ICAgICAgICBjYXNlX3NlbnNpdGl2ZSkKK3sKKyAgWGRnR2xvYlR5cGUgdHlwZTsKKworICBhc3Nl
cnQgKGdsb2JfaGFzaCAhPSBOVUxMKTsKKyAgYXNzZXJ0IChnbG9iICE9IE5VTEwpOworCisgIHR5
cGUgPSBfeGRnX2dsb2JfZGV0ZXJtaW5lX3R5cGUgKGdsb2IpOworCisgIHN3aXRjaCAodHlwZSkK
KyAgICB7CisgICAgY2FzZSBYREdfR0xPQl9MSVRFUkFMOgorICAgICAgZ2xvYl9oYXNoLT5saXRl
cmFsX2xpc3QgPSBfeGRnX2dsb2JfbGlzdF9hcHBlbmQgKGdsb2JfaGFzaC0+bGl0ZXJhbF9saXN0
LCBzdHJkdXAgKGdsb2IpLCBzdHJkdXAgKG1pbWVfdHlwZSksIHdlaWdodCwgY2FzZV9zZW5zaXRp
dmUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBYREdfR0xPQl9TSU1QTEU6CisgICAgICBnbG9i
X2hhc2gtPnNpbXBsZV9ub2RlID0gX3hkZ19nbG9iX2hhc2hfaW5zZXJ0X3RleHQgKGdsb2JfaGFz
aC0+c2ltcGxlX25vZGUsIGdsb2IgKyAxLCBtaW1lX3R5cGUsIHdlaWdodCwgY2FzZV9zZW5zaXRp
dmUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBYREdfR0xPQl9GVUxMOgorICAgICAgZ2xvYl9o
YXNoLT5mdWxsX2xpc3QgPSBfeGRnX2dsb2JfbGlzdF9hcHBlbmQgKGdsb2JfaGFzaC0+ZnVsbF9s
aXN0LCBzdHJkdXAgKGdsb2IpLCBzdHJkdXAgKG1pbWVfdHlwZSksIHdlaWdodCwgY2FzZV9zZW5z
aXRpdmUpOworICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkCitfeGRnX2dsb2JfaGFzaF9k
dW1wIChYZGdHbG9iSGFzaCAqZ2xvYl9oYXNoKQoreworICBYZGdHbG9iTGlzdCAqbGlzdDsKKyAg
cHJpbnRmICgiTElURVJBTCBTVFJJTkdTXG4iKTsKKyAgaWYgKCFnbG9iX2hhc2ggfHwgZ2xvYl9o
YXNoLT5saXRlcmFsX2xpc3QgPT0gTlVMTCkKKyAgICB7CisgICAgICBwcmludGYgKCIgICAgTm9u
ZVxuIik7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZm9yIChsaXN0ID0gZ2xvYl9oYXNo
LT5saXRlcmFsX2xpc3Q7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KQorCXByaW50ZiAoIiAgICAl
cyAtICVzICVkXG4iLCAoY2hhciAqKWxpc3QtPmRhdGEsIGxpc3QtPm1pbWVfdHlwZSwgbGlzdC0+
d2VpZ2h0KTsKKyAgICB9CisgIHByaW50ZiAoIlxuU0lNUExFIEdMT0JTXG4iKTsKKyAgaWYgKCFn
bG9iX2hhc2ggfHwgZ2xvYl9oYXNoLT5zaW1wbGVfbm9kZSA9PSBOVUxMKQorICAgIHsKKyAgICAg
IHByaW50ZiAoIiAgICBOb25lXG4iKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBfeGRn
X2dsb2JfaGFzaF9ub2RlX2R1bXAgKGdsb2JfaGFzaC0+c2ltcGxlX25vZGUsIDQpOworICAgIH0K
KworICBwcmludGYgKCJcbkZVTEwgR0xPQlNcbiIpOworICBpZiAoIWdsb2JfaGFzaCB8fCBnbG9i
X2hhc2gtPmZ1bGxfbGlzdCA9PSBOVUxMKQorICAgIHsKKyAgICAgIHByaW50ZiAoIiAgICBOb25l
XG4iKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBmb3IgKGxpc3QgPSBnbG9iX2hhc2gt
PmZ1bGxfbGlzdDsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpCisJcHJpbnRmICgiICAgICVzIC0g
JXMgJWRcbiIsIChjaGFyICopbGlzdC0+ZGF0YSwgbGlzdC0+bWltZV90eXBlLCBsaXN0LT53ZWln
aHQpOworICAgIH0KK30KKworCit2b2lkCitfeGRnX21pbWVfZ2xvYl9yZWFkX2Zyb21fZmlsZSAo
WGRnR2xvYkhhc2ggKmdsb2JfaGFzaCwKKwkJCSAgICAgICBjb25zdCBjaGFyICAqZmlsZV9uYW1l
LAorCQkJICAgICAgIGludCAgICAgICAgICB2ZXJzaW9uX3R3bykKK3sKKyAgRklMRSAqZ2xvYl9m
aWxlOworICBjaGFyIGxpbmVbMjU1XTsKKyAgY2hhciAqcDsKKworICBnbG9iX2ZpbGUgPSBmb3Bl
biAoZmlsZV9uYW1lLCAiciIpOworCisgIGlmIChnbG9iX2ZpbGUgPT0gTlVMTCkKKyAgICByZXR1
cm47CisKKyAgLyogRklYTUU6IE5vdCBVVEYtOCBzYWZlLiAgRG9lc24ndCB3b3JrIGlmIGxpbmVz
IGFyZSBncmVhdGVyIHRoYW4gMjU1IGNoYXJzLgorICAgKiBCbGFoICovCisgIHdoaWxlIChmZ2V0
cyAobGluZSwgMjU1LCBnbG9iX2ZpbGUpICE9IE5VTEwpCisgICAgeworICAgICAgY2hhciAqY29s
b247CisgICAgICBjaGFyICptaW1ldHlwZSwgKmdsb2IsICplbmQ7CisgICAgICBpbnQgd2VpZ2h0
OworICAgICAgaW50IGNhc2Vfc2Vuc2l0aXZlOworCisgICAgICBpZiAobGluZVswXSA9PSAnIycg
fHwgbGluZVswXSA9PSAwKQorCWNvbnRpbnVlOworCisgICAgICBlbmQgPSBsaW5lICsgc3RybGVu
KGxpbmUpIC0gMTsKKyAgICAgIGlmICgqZW5kID09ICdcbicpCisJKmVuZCA9IDA7CisKKyAgICAg
IHAgPSBsaW5lOworICAgICAgaWYgKHZlcnNpb25fdHdvKQorCXsKKwkgIGNvbG9uID0gc3RyY2hy
IChwLCAnOicpOworCSAgaWYgKGNvbG9uID09IE5VTEwpCisJICAgIGNvbnRpbnVlOworCSAgKmNv
bG9uID0gMDsKKyAgICAgICAgICB3ZWlnaHQgPSBhdG9pIChwKTsKKwkgIHAgPSBjb2xvbiArIDE7
CisJfQorICAgICAgZWxzZQorCXdlaWdodCA9IDUwOworCisgICAgICBjb2xvbiA9IHN0cmNociAo
cCwgJzonKTsKKyAgICAgIGlmIChjb2xvbiA9PSBOVUxMKQorCWNvbnRpbnVlOworICAgICAgKmNv
bG9uID0gMDsKKworICAgICAgbWltZXR5cGUgPSBwOworICAgICAgcCA9IGNvbG9uICsgMTsKKyAg
ICAgIGdsb2IgPSBwOworICAgICAgY2FzZV9zZW5zaXRpdmUgPSBGQUxTRTsKKworICAgICAgY29s
b24gPSBzdHJjaHIgKHAsICc6Jyk7CisgICAgICBpZiAodmVyc2lvbl90d28gJiYgY29sb24gIT0g
TlVMTCkKKwl7CisJICBjaGFyICpmbGFnOworCisJICAvKiBXZSBnb3QgZmxhZ3MgKi8KKwkgICpj
b2xvbiA9IDA7CisJICBwID0gY29sb24gKyAxOworCisJICAvKiBGbGFncyBlbmQgYXQgbmV4dCBj
b2xvbiAqLworCSAgY29sb24gPSBzdHJjaHIgKHAsICc6Jyk7CisJICBpZiAoY29sb24gIT0gTlVM
TCkKKwkgICAgKmNvbG9uID0gMDsKKworCSAgZmxhZyA9IHN0cnN0ciAocCwgImNzIik7CisJICBp
ZiAoZmxhZyAhPSBOVUxMICYmCisJICAgICAgLyogU3RhcnQgb3IgYWZ0ZXIgY29tbWEgKi8KKwkg
ICAgICAoZmxhZyA9PSBwIHx8CisJICAgICAgIGZsYWdbLTFdID09ICcsJykgJiYKKwkgICAgICAv
KiBlbmRzIHdpdGggY29tbWEgb3IgZW5kIG9mIHN0cmluZyAqLworCSAgICAgIChmbGFnWzJdID09
IDAgfHwKKwkgICAgICAgZmxhZ1syXSA9PSAnLCcpKQorCSAgICBjYXNlX3NlbnNpdGl2ZSA9IFRS
VUU7CisJfQorCisgICAgICBfeGRnX2dsb2JfaGFzaF9hcHBlbmRfZ2xvYiAoZ2xvYl9oYXNoLCBn
bG9iLCBtaW1ldHlwZSwgd2VpZ2h0LCBjYXNlX3NlbnNpdGl2ZSk7CisgICAgfQorCisgIGZjbG9z
ZSAoZ2xvYl9maWxlKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUv
c3JjL3hkZ21pbWVnbG9iLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS94ZGdtaW1lL3NyYy94ZGdtaW1l
Z2xvYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44M2JlZWFiNzZh
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvc3JjL3hkZ21p
bWVnbG9iLmgKQEAgLTAsMCArMSw3NSBAQAorLyogLSotIG1vZGU6IEM7IGMtZmlsZS1zdHlsZTog
ImdudSIgLSotICovCisvKiB4ZGdtaW1lZ2xvYi5oOiBQcml2YXRlIGZpbGUuICBEYXRhc3RydWN0
dXJlIGZvciBzdG9yaW5nIHRoZSBnbG9icy4KKyAqCisgKiBNb3JlIGluZm8gY2FuIGJlIGZvdW5k
IGF0IGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3N0YW5kYXJkcy8KKyAqCisgKiBDb3B5cmln
aHQgKEMpIDIwMDMgIFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAgSm9uYXRo
YW4gQmxhbmRmb3JkIDxqcmJAYWx1bS5taXQuZWR1PgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRo
ZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgdmVyc2lvbiAyLjAKKyAqIE9yIHVuZGVyIHRoZSBmb2xs
b3dpbmcgdGVybXM6CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICog
Qm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX1hER19NSU1FX0dM
T0JfSF9fCisjZGVmaW5lIF9fWERHX01JTUVfR0xPQl9IX18KKworI2luY2x1ZGUgInhkZ21pbWUu
aCIKKwordHlwZWRlZiBzdHJ1Y3QgWGRnR2xvYkhhc2ggWGRnR2xvYkhhc2g7CisKK3R5cGVkZWYg
ZW51bQoreworICBYREdfR0xPQl9MSVRFUkFMLCAvKiBNYWtlZmlsZSAqLworICBYREdfR0xPQl9T
SU1QTEUsICAvKiAqLmdpZiAqLworICBYREdfR0xPQl9GVUxMICAgICAvKiB4Ki5bY2hdICovCit9
IFhkZ0dsb2JUeXBlOworCisgIAorI2lmZGVmIFhER19QUkVGSVgKKyNkZWZpbmUgX3hkZ19taW1l
X2dsb2JfcmVhZF9mcm9tX2ZpbGUgICAgICAgICBYREdfUkVTRVJWRURfRU5UUlkoZ2xvYl9yZWFk
X2Zyb21fZmlsZSkKKyNkZWZpbmUgX3hkZ19nbG9iX2hhc2hfbmV3ICAgICAgICAgICAgICAgICAg
ICBYREdfUkVTRVJWRURfRU5UUlkoaGFzaF9uZXcpCisjZGVmaW5lIF94ZGdfZ2xvYl9oYXNoX2Zy
ZWUgICAgICAgICAgICAgICAgICAgWERHX1JFU0VSVkVEX0VOVFJZKGhhc2hfZnJlZSkKKyNkZWZp
bmUgX3hkZ19nbG9iX2hhc2hfbG9va3VwX2ZpbGVfbmFtZSAgICAgICBYREdfUkVTRVJWRURfRU5U
UlkoaGFzaF9sb29rdXBfZmlsZV9uYW1lKQorI2RlZmluZSBfeGRnX2dsb2JfaGFzaF9nZXRfc2lt
cGxlX2dsb2JzICAgICAgIFhER19SRVNFUlZFRF9FTlRSWShoYXNoX2dldF9zaW1wbGVfZ2xvYnMp
CisjZGVmaW5lIF94ZGdfZ2xvYl9oYXNoX2FwcGVuZF9nbG9iICAgICAgICAgICAgWERHX1JFU0VS
VkVEX0VOVFJZKGhhc2hfYXBwZW5kX2dsb2IpCisjZGVmaW5lIF94ZGdfZ2xvYl9kZXRlcm1pbmVf
dHlwZSAgICAgICAgICAgICAgWERHX1JFU0VSVkVEX0VOVFJZKGRldGVybWluZV90eXBlKQorI2Rl
ZmluZSBfeGRnX2dsb2JfaGFzaF9kdW1wICAgICAgICAgICAgICAgICAgIFhER19SRVNFUlZFRF9F
TlRSWShoYXNoX2R1bXApCisjZW5kaWYKKwordm9pZCAgICAgICAgIF94ZGdfbWltZV9nbG9iX3Jl
YWRfZnJvbV9maWxlICAgKFhkZ0dsb2JIYXNoICpnbG9iX2hhc2gsCisJCQkJCSAgICAgIGNvbnN0
IGNoYXIgICpmaWxlX25hbWUsCisJCQkJCSAgICAgIGludCAgICAgICAgICB2ZXJzaW9uX3R3byk7
CitYZGdHbG9iSGFzaCAqX3hkZ19nbG9iX2hhc2hfbmV3ICAgICAgICAgICAgICAodm9pZCk7Cit2
b2lkICAgICAgICAgX3hkZ19nbG9iX2hhc2hfZnJlZSAgICAgICAgICAgICAoWGRnR2xvYkhhc2gg
Kmdsb2JfaGFzaCk7CitpbnQgICAgICAgICAgX3hkZ19nbG9iX2hhc2hfbG9va3VwX2ZpbGVfbmFt
ZSAoWGRnR2xvYkhhc2ggKmdsb2JfaGFzaCwKKwkJCQkJICAgICAgY29uc3QgY2hhciAgKnRleHQs
CisJCQkJCSAgICAgIGNvbnN0IGNoYXIgICptaW1lX3R5cGVzW10sCisJCQkJCSAgICAgIGludCAg
ICAgICAgICBuX21pbWVfdHlwZXMpOworaW50ICAgICAgICAgIF94ZGdfZ2xvYl9oYXNoX2dldF9z
aW1wbGVfZ2xvYnMgKFhkZ0dsb2JIYXNoICpnbG9iX2hhc2gsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgKm1pbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgKmdsb2JzW10s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAg
ICAgIG5fZ2xvYnMpOwordm9pZCAgICAgICAgIF94ZGdfZ2xvYl9oYXNoX2FwcGVuZF9nbG9iICAg
ICAgKFhkZ0dsb2JIYXNoICpnbG9iX2hhc2gsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgICpnbG9i
LAorCQkJCQkgICAgICBjb25zdCBjaGFyICAqbWltZV90eXBlLAorCQkJCQkgICAgICBpbnQgICAg
ICAgICAgd2VpZ2h0LAorCQkJCQkgICAgICBpbnQgICAgICAgICAgY2FzZV9zZW5zaXRpdmUpOwor
WGRnR2xvYlR5cGUgIF94ZGdfZ2xvYl9kZXRlcm1pbmVfdHlwZSAgICAgICAgKGNvbnN0IGNoYXIg
ICpnbG9iKTsKK3ZvaWQgICAgICAgICBfeGRnX2dsb2JfaGFzaF9kdW1wICAgICAgICAgICAgIChY
ZGdHbG9iSGFzaCAqZ2xvYl9oYXNoKTsKKworI2VuZGlmIC8qIF9fWERHX01JTUVfR0xPQl9IX18g
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvc3JjL3hkZ21pbWVpY29u
LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS94ZGdtaW1lL3NyYy94ZGdtaW1laWNvbi5jCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43NGJiMzFmMTcyZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvc3JjL3hkZ21pbWVpY29uLmMKQEAgLTAs
MCArMSwxODMgQEAKKy8qIC0qLSBtb2RlOiBDOyBjLWZpbGUtc3R5bGU6ICJnbnUiIC0qLSAqLwor
LyogeGRnbWltZWljb24uYzogUHJpdmF0ZSBmaWxlLiAgRGF0YXN0cnVjdHVyZSBmb3Igc3Rvcmlu
ZyB0aGUgYWxpYXNlcy4KKyAqCisgKiBNb3JlIGluZm8gY2FuIGJlIGZvdW5kIGF0IGh0dHA6Ly93
d3cuZnJlZWRlc2t0b3Aub3JnL3N0YW5kYXJkcy8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
IFJlZCBIYXQsIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQWNhZGVtaWMgRnJlZSBM
aWNlbnNlIHZlcnNpb24gMi4wCisgKiBPciB1bmRlciB0aGUgZm9sbG93aW5nIHRlcm1zOgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4JIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEt
MTMwNywgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY21ha2Vj
b25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAieGRnbWltZWljb24uaCIKKyNpbmNsdWRlICJ4
ZGdtaW1laW50LmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNp
bmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmbm1hdGNo
Lmg+CisKKyNpZm5kZWYJRkFMU0UKKyNkZWZpbmUJRkFMU0UJKDApCisjZW5kaWYKKworI2lmbmRl
ZglUUlVFCisjZGVmaW5lCVRSVUUJKCFGQUxTRSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBY
ZGdJY29uIFhkZ0ljb247CisKK3N0cnVjdCBYZGdJY29uIAoreworICBjaGFyICptaW1lX3R5cGU7
CisgIGNoYXIgKmljb25fbmFtZTsKK307CisKK3N0cnVjdCBYZGdJY29uTGlzdAoreworICBzdHJ1
Y3QgWGRnSWNvbiAqaWNvbnM7CisgIGludCBuX2ljb25zOworfTsKKworWGRnSWNvbkxpc3QgKgor
X3hkZ19taW1lX2ljb25fbGlzdF9uZXcgKHZvaWQpCit7CisgIFhkZ0ljb25MaXN0ICpsaXN0Owor
CisgIGxpc3QgPSBtYWxsb2MgKHNpemVvZiAoWGRnSWNvbkxpc3QpKTsKKworICBsaXN0LT5pY29u
cyA9IE5VTEw7CisgIGxpc3QtPm5faWNvbnMgPSAwOworCisgIHJldHVybiBsaXN0OworfQorCit2
b2lkICAgICAgICAgCitfeGRnX21pbWVfaWNvbl9saXN0X2ZyZWUgKFhkZ0ljb25MaXN0ICpsaXN0
KQoreworICBpbnQgaTsKKworICBpZiAobGlzdC0+aWNvbnMpCisgICAgeworICAgICAgZm9yIChp
ID0gMDsgaSA8IGxpc3QtPm5faWNvbnM7IGkrKykKKwl7CisJICBmcmVlIChsaXN0LT5pY29uc1tp
XS5taW1lX3R5cGUpOworCSAgZnJlZSAobGlzdC0+aWNvbnNbaV0uaWNvbl9uYW1lKTsKKwl9Cisg
ICAgICBmcmVlIChsaXN0LT5pY29ucyk7CisgICAgfQorICBmcmVlIChsaXN0KTsKK30KKworc3Rh
dGljIGludAoraWNvbl9lbnRyeV9jbXAgKGNvbnN0IHZvaWQgKnYxLCBjb25zdCB2b2lkICp2MikK
K3sKKyAgcmV0dXJuIHN0cmNtcCAoKChYZGdJY29uICopdjEpLT5taW1lX3R5cGUsICgoWGRnSWNv
biAqKXYyKS0+bWltZV90eXBlKTsKK30KKworY29uc3QgY2hhciAgKgorX3hkZ19taW1lX2ljb25f
bGlzdF9sb29rdXAgKFhkZ0ljb25MaXN0ICpsaXN0LAorCQkJICAgIGNvbnN0IGNoYXIgICptaW1l
X3R5cGUpCit7CisgIFhkZ0ljb24gKmVudHJ5OworICBYZGdJY29uIGtleTsKKworICBpZiAobGlz
dC0+bl9pY29ucyA+IDApCisgICAgeworICAgICAga2V5Lm1pbWVfdHlwZSA9IChjaGFyICopbWlt
ZV90eXBlOworICAgICAga2V5Lmljb25fbmFtZSA9IE5VTEw7CisKKyAgICAgIGVudHJ5ID0gYnNl
YXJjaCAoJmtleSwgbGlzdC0+aWNvbnMsIGxpc3QtPm5faWNvbnMsCisJCSAgICAgICBzaXplb2Yg
KFhkZ0ljb24pLCBpY29uX2VudHJ5X2NtcCk7CisgICAgICBpZiAoZW50cnkpCisgICAgICAgIHJl
dHVybiBlbnRyeS0+aWNvbl9uYW1lOworICAgIH0KKworICByZXR1cm4gTlVMTDsKK30KKwordm9p
ZAorX3hkZ19taW1lX2ljb25fcmVhZF9mcm9tX2ZpbGUgKFhkZ0ljb25MaXN0ICpsaXN0LAorCQkJ
ICAgICAgIGNvbnN0IGNoYXIgICAqZmlsZV9uYW1lKQoreworICBGSUxFICpmaWxlOworICBjaGFy
IGxpbmVbMjU1XTsKKyAgaW50IGFsbG9jOworCisgIGZpbGUgPSBmb3BlbiAoZmlsZV9uYW1lLCAi
ciIpOworCisgIGlmIChmaWxlID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIC8qIEZJWE1FOiBO
b3QgVVRGLTggc2FmZS4gIERvZXNuJ3Qgd29yayBpZiBsaW5lcyBhcmUgZ3JlYXRlciB0aGFuIDI1
NSBjaGFycy4KKyAgICogQmxhaCAqLworICBhbGxvYyA9IGxpc3QtPm5faWNvbnMgKyAxNjsKKyAg
bGlzdC0+aWNvbnMgPSByZWFsbG9jIChsaXN0LT5pY29ucywgYWxsb2MgKiBzaXplb2YgKFhkZ0lj
b24pKTsKKyAgd2hpbGUgKGZnZXRzIChsaW5lLCAyNTUsIGZpbGUpICE9IE5VTEwpCisgICAgewor
ICAgICAgY2hhciAqc2VwOworICAgICAgaWYgKGxpbmVbMF0gPT0gJyMnKQorCWNvbnRpbnVlOwor
CisgICAgICBzZXAgPSBzdHJjaHIgKGxpbmUsICc6Jyk7CisgICAgICBpZiAoc2VwID09IE5VTEwp
CisJY29udGludWU7CisgICAgICAqKHNlcCsrKSA9ICdcMDAwJzsKKyAgICAgIHNlcFtzdHJsZW4g
KHNlcCkgLTFdID0gJ1wwMDAnOworICAgICAgaWYgKGxpc3QtPm5faWNvbnMgPT0gYWxsb2MpCisJ
eworCSAgYWxsb2MgPDw9IDE7CisJICBsaXN0LT5pY29ucyA9IHJlYWxsb2MgKGxpc3QtPmljb25z
LCAKKwkJCQkgICBhbGxvYyAqIHNpemVvZiAoWGRnSWNvbikpOworCX0KKyAgICAgIGxpc3QtPmlj
b25zW2xpc3QtPm5faWNvbnNdLm1pbWVfdHlwZSA9IHN0cmR1cCAobGluZSk7CisgICAgICBsaXN0
LT5pY29uc1tsaXN0LT5uX2ljb25zXS5pY29uX25hbWUgPSBzdHJkdXAgKHNlcCk7CisgICAgICBs
aXN0LT5uX2ljb25zKys7CisgICAgfQorICBsaXN0LT5pY29ucyA9IHJlYWxsb2MgKGxpc3QtPmlj
b25zLCAKKwkJCSAgIGxpc3QtPm5faWNvbnMgKiBzaXplb2YgKFhkZ0ljb24pKTsKKworICBmY2xv
c2UgKGZpbGUpOyAgCisgIAorICBpZiAobGlzdC0+bl9pY29ucyA+IDEpCisgICAgcXNvcnQgKGxp
c3QtPmljb25zLCBsaXN0LT5uX2ljb25zLCAKKyAgICAgICAgICAgc2l6ZW9mIChYZGdJY29uKSwg
aWNvbl9lbnRyeV9jbXApOworfQorCisKK3ZvaWQKK194ZGdfbWltZV9pY29uX2xpc3RfZHVtcCAo
WGRnSWNvbkxpc3QgKmxpc3QpCit7CisgIGludCBpOworCisgIGlmIChsaXN0LT5pY29ucykKKyAg
ICB7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC0+bl9pY29uczsgaSsrKQorCXsKKwkgIHBy
aW50ZiAoIiVzICVzXG4iLCAKKwkJICBsaXN0LT5pY29uc1tpXS5taW1lX3R5cGUsCisJCSAgbGlz
dC0+aWNvbnNbaV0uaWNvbl9uYW1lKTsKKwl9CisgICAgfQorfQorCisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvc3JjL3hkZ21pbWVpY29uLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS94ZGdtaW1lL3NyYy94ZGdtaW1laWNvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5iNWYyNTgzNWRiMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L3hkZ21pbWUvc3JjL3hkZ21pbWVpY29uLmgKQEAgLTAsMCArMSw1MCBAQAorLyogLSot
IG1vZGU6IEM7IGMtZmlsZS1zdHlsZTogImdudSIgLSotICovCisvKiB4ZGdtaW1laWNvbi5oOiBQ
cml2YXRlIGZpbGUuICBEYXRhc3RydWN0dXJlIGZvciBzdG9yaW5nIHRoZSBhbGlhc2VzLgorICoK
KyAqIE1vcmUgaW5mbyBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcv
c3RhbmRhcmRzLworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCAgUmVkIEhhdCwgSW5jLgorICoK
KyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgdmVyc2lvbiAyLjAK
KyAqIE9yIHVuZGVyIHRoZSBmb2xsb3dpbmcgdGVybXM6CisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZSBHTlUKKyAq
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKwor
I2lmbmRlZiBfX1hER19NSU1FX0lDT05fSF9fCisjZGVmaW5lIF9fWERHX01JTUVfSUNPTl9IX18K
KworI2luY2x1ZGUgInhkZ21pbWUuaCIKKwordHlwZWRlZiBzdHJ1Y3QgWGRnSWNvbkxpc3QgWGRn
SWNvbkxpc3Q7CisKKyNpZmRlZiBYREdfUFJFRklYCisjZGVmaW5lIF94ZGdfbWltZV9pY29uX3Jl
YWRfZnJvbV9maWxlICAgICAgICBYREdfRU5UUlkoaWNvbl9yZWFkX2Zyb21fZmlsZSkKKyNkZWZp
bmUgX3hkZ19taW1lX2ljb25fbGlzdF9uZXcgICAgICAgICAgICAgIFhER19FTlRSWShpY29uX2xp
c3RfbmV3KQorI2RlZmluZSBfeGRnX21pbWVfaWNvbl9saXN0X2ZyZWUgICAgICAgICAgICAgWERH
X0VOVFJZKGljb25fbGlzdF9mcmVlKQorI2RlZmluZSBfeGRnX21pbWVfaWNvbl9saXN0X2xvb2t1
cCAgICAgICAgICAgWERHX0VOVFJZKGljb25fbGlzdF9sb29rdXApCisjZGVmaW5lIF94ZGdfbWlt
ZV9pY29uX2xpc3RfZHVtcCAgICAgICAgICAgICBYREdfRU5UUlkoaWNvbl9saXN0X2R1bXApCisj
ZW5kaWYKKwordm9pZCAgICAgICAgICBfeGRnX21pbWVfaWNvbl9yZWFkX2Zyb21fZmlsZSAoWGRn
SWNvbkxpc3QgKmxpc3QsCisJCQkJCSAgICBjb25zdCBjaGFyICAgKmZpbGVfbmFtZSk7CitYZGdJ
Y29uTGlzdCAgKl94ZGdfbWltZV9pY29uX2xpc3RfbmV3ICAgICAgICh2b2lkKTsKK3ZvaWQgICAg
ICAgICAgX3hkZ19taW1lX2ljb25fbGlzdF9mcmVlICAgICAgKFhkZ0ljb25MaXN0ICpsaXN0KTsK
K2NvbnN0IGNoYXIgICAqX3hkZ19taW1lX2ljb25fbGlzdF9sb29rdXAgICAgKFhkZ0ljb25MaXN0
ICpsaXN0LAorCQkJCQkgICAgIGNvbnN0IGNoYXIgICptaW1lKTsKK3ZvaWQgICAgICAgICAgX3hk
Z19taW1lX2ljb25fbGlzdF9kdW1wICAgICAgKFhkZ0ljb25MaXN0ICpsaXN0KTsKKworI2VuZGlm
IC8qIF9fWERHX01JTUVfSUNPTl9IX18gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L3hkZ21pbWUvc3JjL3hkZ21pbWVpbnQuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvc3Jj
L3hkZ21pbWVpbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjQ2
OWEwZDJmMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS94ZGdtaW1lL3Ny
Yy94ZGdtaW1laW50LmMKQEAgLTAsMCArMSwyMDYgQEAKKy8qIC0qLSBtb2RlOiBDOyBjLWZpbGUt
c3R5bGU6ICJnbnUiIC0qLSAqLworLyogeGRnbWltZWludC5jOiBJbnRlcm5hbCBkZWZpbmVzIGFu
ZCBmdW5jdGlvbnMuCisgKgorICogTW9yZSBpbmZvIGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vd3d3
LmZyZWVkZXNrdG9wLm9yZy9zdGFuZGFyZHMvCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzICBS
ZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgIEpvbmF0aGFuIEJsYW5kZm9yZCA8
anJiQGFsdW0ubWl0LmVkdT4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQWNhZGVtaWMgRnJl
ZSBMaWNlbnNlIHZlcnNpb24gMi4wCisgKiBPciB1bmRlciB0aGUgZm9sbG93aW5nIHRlcm1zOgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4JIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNywgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY21h
a2Vjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAieGRnbWltZWludC5oIgorI2luY2x1ZGUg
PGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZm5kZWYJRkFMU0UKKyNkZWZpbmUJ
RkFMU0UJKDApCisjZW5kaWYKKworI2lmbmRlZglUUlVFCisjZGVmaW5lCVRSVUUJKCFGQUxTRSkK
KyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciBfeGRnX3V0Zjhfc2tpcF9kYXRhWzI1Nl0gPSB7
CisgIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx
LDEsMSwxLDEsMSwKKyAgMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEs
MSwxLDEsMSwxLDEsMSwxLDEsMSwxLAorICAxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx
LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsCisgIDEsMSwxLDEsMSwxLDEsMSwxLDEs
MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwKKyAgMSwxLDEsMSwx
LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAor
ICAxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx
LDEsMSwxLDEsCisgIDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIs
MiwyLDIsMiwyLDIsMiwyLDIsMiwKKyAgMywzLDMsMywzLDMsMywzLDMsMywzLDMsMywzLDMsMyw0
LDQsNCw0LDQsNCw0LDQsNSw1LDUsNSw2LDYsMSwxCit9OworCitjb25zdCBjaGFyICogY29uc3Qg
X3hkZ191dGY4X3NraXAgPSBfeGRnX3V0Zjhfc2tpcF9kYXRhOworCisKKworLyogUmV0dXJucyB0
aGUgbnVtYmVyIG9mIHVucHJvY2Vzc2VkIGNoYXJhY3RlcnMuICovCit4ZGdfdW5pY2hhcl90Citf
eGRnX3V0ZjhfdG9fdWNzNChjb25zdCBjaGFyICpzb3VyY2UpCit7CisgIHhkZ191bmljaGFyX3Qg
dWNzMzI7CisgIGlmKCAhICggKnNvdXJjZSAmIDB4ODAgKSApCisgICAgeworICAgICAgdWNzMzIg
PSAqc291cmNlOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGludCBieXRlbGVuZ3RoID0g
MDsKKyAgICAgIHhkZ191bmljaGFyX3QgcmVzdWx0OworICAgICAgaWYgKCAhICgqc291cmNlICYg
MHg0MCkgKQorCXsKKwkgIHVjczMyID0gKnNvdXJjZTsKKwl9CisgICAgICBlbHNlCisJeworCSAg
aWYgKCAhICgqc291cmNlICYgMHgyMCkgKQorCSAgICB7CisJICAgICAgcmVzdWx0ID0gKnNvdXJj
ZSsrICYgMHgxRjsKKwkgICAgICBieXRlbGVuZ3RoID0gMjsKKwkgICAgfQorCSAgZWxzZSBpZiAo
ICEgKCpzb3VyY2UgJiAweDEwKSApCisJICAgIHsKKwkgICAgICByZXN1bHQgPSAqc291cmNlKysg
JiAweDBGOworCSAgICAgIGJ5dGVsZW5ndGggPSAzOworCSAgICB9CisJICBlbHNlIGlmICggISAo
KnNvdXJjZSAmIDB4MDgpICkKKwkgICAgeworCSAgICAgIHJlc3VsdCA9ICpzb3VyY2UrKyAmIDB4
MDc7CisJICAgICAgYnl0ZWxlbmd0aCA9IDQ7CisJICAgIH0KKwkgIGVsc2UgaWYgKCAhICgqc291
cmNlICYgMHgwNCkgKQorCSAgICB7CisJICAgICAgcmVzdWx0ID0gKnNvdXJjZSsrICYgMHgwMzsK
KwkgICAgICBieXRlbGVuZ3RoID0gNTsKKwkgICAgfQorCSAgZWxzZSBpZiAoICEgKCpzb3VyY2Ug
JiAweDAyKSApCisJICAgIHsKKwkgICAgICByZXN1bHQgPSAqc291cmNlKysgJiAweDAxOworCSAg
ICAgIGJ5dGVsZW5ndGggPSA2OworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICByZXN1
bHQgPSAqc291cmNlKys7CisJICAgICAgYnl0ZWxlbmd0aCA9IDE7CisJICAgIH0KKworCSAgZm9y
ICggYnl0ZWxlbmd0aCAtLTsgYnl0ZWxlbmd0aCA+IDA7IGJ5dGVsZW5ndGggLS0gKQorCSAgICB7
CisJICAgICAgcmVzdWx0IDw8PSA2OworCSAgICAgIHJlc3VsdCB8PSAqc291cmNlKysgJiAweDNG
OworCSAgICB9CisJICB1Y3MzMiA9IHJlc3VsdDsKKwl9CisgICAgfQorICByZXR1cm4gdWNzMzI7
Cit9CisKKworLyogaHVsbG8uICB0aGlzIGlzIGdyZWF0IGNvZGUuICBkb24ndCByZXdyaXRlIGl0
ICovCisKK3hkZ191bmljaGFyX3QKK194ZGdfdWNzNF90b19sb3dlciAoeGRnX3VuaWNoYXJfdCBz
b3VyY2UpCit7CisgIC8qIEZJWE1FOiBEbyBhIHJlYWwgdG9fdXBwZXIgc29tZXRpbWUgKi8KKyAg
LyogQ2FzZUZvbGRpbmctMy4yLjAudHh0IGhhcyBhIHRhYmxlIG9mIHJ1bGVzLiAqLworICBpZiAo
KHNvdXJjZSAmIDB4RkYpID09IHNvdXJjZSkKKyAgICByZXR1cm4gKHhkZ191bmljaGFyX3QpIHRv
bG93ZXIgKCh1bnNpZ25lZCBjaGFyKSBzb3VyY2UpOworICByZXR1cm4gc291cmNlOworfQorCitp
bnQKK194ZGdfdXRmOF92YWxpZGF0ZSAoY29uc3QgY2hhciAqc291cmNlKQoreworICAvKiBGSVhN
RTogYWN0dWFsbHkgd3JpdGUgKi8KKyAgcmV0dXJuIFRSVUU7Cit9CisKK2NvbnN0IGNoYXIgKgor
X3hkZ19nZXRfYmFzZV9uYW1lIChjb25zdCBjaGFyICpmaWxlX25hbWUpCit7CisgIGNvbnN0IGNo
YXIgKmJhc2VfbmFtZTsKKworICBpZiAoZmlsZV9uYW1lID09IE5VTEwpCisgICAgcmV0dXJuIE5V
TEw7CisKKyAgYmFzZV9uYW1lID0gc3RycmNociAoZmlsZV9uYW1lLCAnLycpOworCisgIGlmIChi
YXNlX25hbWUgPT0gTlVMTCkKKyAgICByZXR1cm4gZmlsZV9uYW1lOworICBlbHNlCisgICAgcmV0
dXJuIGJhc2VfbmFtZSArIDE7Cit9CisKK3hkZ191bmljaGFyX3QgKgorX3hkZ19jb252ZXJ0X3Rv
X3VjczQgKGNvbnN0IGNoYXIgKnNvdXJjZSwgaW50ICpsZW4pCit7CisgIHhkZ191bmljaGFyX3Qg
Km91dDsKKyAgaW50IGk7CisgIGNvbnN0IGNoYXIgKnA7CisKKyAgb3V0ID0gbWFsbG9jIChzaXpl
b2YgKHhkZ191bmljaGFyX3QpICogKHN0cmxlbiAoc291cmNlKSArIDEpKTsKKworICBwID0gc291
cmNlOworICBpID0gMDsKKyAgd2hpbGUgKCpwKSAKKyAgICB7CisgICAgICBvdXRbaSsrXSA9IF94
ZGdfdXRmOF90b191Y3M0IChwKTsKKyAgICAgIHAgPSBfeGRnX3V0ZjhfbmV4dF9jaGFyIChwKTsg
CisgICAgfQorICBvdXRbaV0gPSAwOworICAqbGVuID0gaTsKKyAKKyAgcmV0dXJuIG91dDsKK30K
Kwordm9pZAorX3hkZ19yZXZlcnNlX3VjczQgKHhkZ191bmljaGFyX3QgKnNvdXJjZSwgaW50IGxl
bikKK3sKKyAgeGRnX3VuaWNoYXJfdCBjOworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwg
bGVuIC0gaSAtIDE7IGkrKykgCisgICAgeworICAgICAgYyA9IHNvdXJjZVtpXTsgCisgICAgICBz
b3VyY2VbaV0gPSBzb3VyY2VbbGVuIC0gaSAtIDFdOworICAgICAgc291cmNlW2xlbiAtIGkgLSAx
XSA9IGM7CisgICAgfQorfQorCitjb25zdCBjaGFyICoKK194ZGdfYmluYXJ5X29yX3RleHRfZmFs
bGJhY2soY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKyAgdW5zaWduZWQgY2hhciAq
Y2hhcmRhdGE7CisgIGludCBpOworCisgIGNoYXJkYXRhID0gKHVuc2lnbmVkIGNoYXIgKikgZGF0
YTsKKyAgZm9yIChpID0gMDsgaSA8IDMyICYmIGkgPCBsZW47ICsraSkKKyAgICB7CisgICAgICAg
aWYgKGNoYXJkYXRhW2ldIDwgMzIgJiYgY2hhcmRhdGFbaV0gIT0gOSAmJiBjaGFyZGF0YVtpXSAh
PSAxMCAmJiBjaGFyZGF0YVtpXSAhPSAxMykKKyAgICAgICAgIHJldHVybiBYREdfTUlNRV9UWVBF
X1VOS05PV047IC8qIGJpbmFyeSBkYXRhICovCisgICAgfQorCisgIHJldHVybiBYREdfTUlNRV9U
WVBFX1RFWFRQTEFJTjsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUv
c3JjL3hkZ21pbWVpbnQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvc3JjL3hkZ21pbWVp
bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWU4YjJjYjg1YTQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS94ZGdtaW1lL3NyYy94ZGdtaW1l
aW50LmgKQEAgLTAsMCArMSw3OCBAQAorLyogLSotIG1vZGU6IEM7IGMtZmlsZS1zdHlsZTogImdu
dSIgLSotICovCisvKiB4ZGdtaW1laW50Lmg6IEludGVybmFsIGRlZmluZXMgYW5kIGZ1bmN0aW9u
cy4KKyAqCisgKiBNb3JlIGluZm8gY2FuIGJlIGZvdW5kIGF0IGh0dHA6Ly93d3cuZnJlZWRlc2t0
b3Aub3JnL3N0YW5kYXJkcy8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgIFJlZCBIYXQsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAgSm9uYXRoYW4gQmxhbmRmb3JkIDxqcmJAYWx1bS5t
aXQuZWR1PgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2Ug
dmVyc2lvbiAyLjAKKyAqIE9yIHVuZGVyIHRoZSBmb2xsb3dpbmcgdGVybXM6CisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2Vl
IHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBV
U0EuCisgKi8KKworI2lmbmRlZiBfX1hER19NSU1FX0lOVF9IX18KKyNkZWZpbmUgX19YREdfTUlN
RV9JTlRfSF9fCisKKyNpbmNsdWRlICJ4ZGdtaW1lLmgiCisKKworI2lmbmRlZglGQUxTRQorI2Rl
ZmluZQlGQUxTRSAoMCkKKyNlbmRpZgorCisjaWZuZGVmCVRSVUUKKyNkZWZpbmUJVFJVRSAoIUZB
TFNFKQorI2VuZGlmCisKKy8qIEZJWE1FOiBOZWVkcyB0byBiZSBjb25maWd1cmUgY2hlY2sgKi8K
K3R5cGVkZWYgdW5zaWduZWQgaW50ICAgeGRnX3VuaWNoYXJfdDsKK3R5cGVkZWYgdW5zaWduZWQg
Y2hhciAgeGRnX3VjaGFyOF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB4ZGdfdWludDE2X3Q7
Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgIHhkZ191aW50MzJfdDsKKworI2lmZGVmIFhER19QUkVG
SVgKKyNkZWZpbmUgX3hkZ191dGY4X3NraXAgICAgICAgWERHX1JFU0VSVkVEX0VOVFJZKHV0Zjhf
c2tpcCkKKyNkZWZpbmUgX3hkZ191dGY4X3RvX3VjczQgICAgWERHX1JFU0VSVkVEX0VOVFJZKHV0
ZjhfdG9fdWNzNCkKKyNkZWZpbmUgX3hkZ191Y3M0X3RvX2xvd2VyICAgWERHX1JFU0VSVkVEX0VO
VFJZKHVjczRfdG9fbG93ZXIpCisjZGVmaW5lIF94ZGdfdXRmOF92YWxpZGF0ZSAgIFhER19SRVNF
UlZFRF9FTlRSWSh1dGY4X3ZhbGlkYXRlKQorI2RlZmluZSBfeGRnX2dldF9iYXNlX25hbWUgICBY
REdfUkVTRVJWRURfRU5UUlkoZ2V0X2Jhc2VfbmFtZSkKKyNkZWZpbmUgX3hkZ19jb252ZXJ0X3Rv
X3VjczQgWERHX1JFU0VSVkVEX0VOVFJZKGNvbnZlcnRfdG9fdWNzNCkKKyNkZWZpbmUgX3hkZ19y
ZXZlcnNlX3VjczQgICAgWERHX1JFU0VSVkVEX0VOVFJZKHJldmVyc2VfdWNzNCkKKyNlbmRpZgor
CisjZGVmaW5lIFNXQVBfQkUxNl9UT19MRTE2KHZhbCkgKHhkZ191aW50MTZfdCkoKCh4ZGdfdWlu
dDE2X3QpKHZhbCkgPDwgOCl8KCh4ZGdfdWludDE2X3QpKHZhbCkgPj4gOCkpCisKKyNkZWZpbmUg
U1dBUF9CRTMyX1RPX0xFMzIodmFsKSAoeGRnX3VpbnQzMl90KSgoKCh4ZGdfdWludDMyX3QpKHZh
bCkgJiAweEZGMDAwMDAwVSkgPj4gMjQpIHwJXAorCQkJCQkgICAgICAoKCh4ZGdfdWludDMyX3Qp
KHZhbCkgJiAweDAwRkYwMDAwVSkgPj4gOCkgfAlcCisJCQkJCSAgICAgICgoKHhkZ191aW50MzJf
dCkodmFsKSAmIDB4MDAwMEZGMDBVKSA8PCA4KSB8CVwKKwkJCQkJICAgICAgKCgoeGRnX3VpbnQz
Ml90KSh2YWwpICYgMHgwMDAwMDBGRlUpIDw8IDI0KSkKKy8qIFVURi04IHV0aWxzCisgKi8KK2V4
dGVybiBjb25zdCBjaGFyICpjb25zdCBfeGRnX3V0Zjhfc2tpcDsKKyNkZWZpbmUgX3hkZ191dGY4
X25leHRfY2hhcihwKSAoY2hhciAqKSgocCkgKyBfeGRnX3V0Zjhfc2tpcFsqKHVuc2lnbmVkIGNo
YXIgKikocCldKQorI2RlZmluZSBfeGRnX3V0ZjhfY2hhcl9zaXplKHApIChpbnQpIChfeGRnX3V0
Zjhfc2tpcFsqKHVuc2lnbmVkIGNoYXIgKikocCldKQorCit4ZGdfdW5pY2hhcl90ICBfeGRnX3V0
ZjhfdG9fdWNzNCAgKGNvbnN0IGNoYXIgICAgKnNvdXJjZSk7Cit4ZGdfdW5pY2hhcl90ICBfeGRn
X3VjczRfdG9fbG93ZXIgKHhkZ191bmljaGFyX3QgIHNvdXJjZSk7CitpbnQgICAgICAgICAgICBf
eGRnX3V0ZjhfdmFsaWRhdGUgKGNvbnN0IGNoYXIgICAgKnNvdXJjZSk7Cit4ZGdfdW5pY2hhcl90
ICpfeGRnX2NvbnZlcnRfdG9fdWNzNCAoY29uc3QgY2hhciAqc291cmNlLCBpbnQgKmxlbik7Cit2
b2lkICAgICAgICAgICBfeGRnX3JldmVyc2VfdWNzNCAoeGRnX3VuaWNoYXJfdCAqc291cmNlLCBp
bnQgbGVuKTsKK2NvbnN0IGNoYXIgICAgKl94ZGdfZ2V0X2Jhc2VfbmFtZSAoY29uc3QgY2hhciAg
ICAqZmlsZV9uYW1lKTsKK2NvbnN0IGNoYXIgICAgKl94ZGdfYmluYXJ5X29yX3RleHRfZmFsbGJh
Y2soY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CisKKyNlbmRpZiAvKiBfX1hER19NSU1F
X0lOVF9IX18gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L3hkZ21pbWUvc3JjL3hk
Z21pbWVtYWdpYy5jIGIvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9zcmMveGRnbWltZW1hZ2lj
LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNhNjJiOWRmOTk1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9zcmMveGRnbWltZW1h
Z2ljLmMKQEAgLTAsMCArMSw4MTYgQEAKKy8qIC0qLSBtb2RlOiBDOyBjLWZpbGUtc3R5bGU6ICJn
bnUiIC0qLSAqLworLyogeGRnbWltZW1hZ2ljLjogUHJpdmF0ZSBmaWxlLiAgRGF0YXN0cnVjdHVy
ZSBmb3Igc3RvcmluZyBtYWdpYyBmaWxlcy4KKyAqCisgKiBNb3JlIGluZm8gY2FuIGJlIGZvdW5k
IGF0IGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3N0YW5kYXJkcy8KKyAqCisgKiBDb3B5cmln
aHQgKEMpIDIwMDMgIFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAgSm9uYXRo
YW4gQmxhbmRmb3JkIDxqcmJAYWx1bS5taXQuZWR1PgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRo
ZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgdmVyc2lvbiAyLjAKKyAqIE9yIHVuZGVyIHRoZSBmb2xs
b3dpbmcgdGVybXM6CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICog
Qm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gK
KyNpbmNsdWRlICJjbWFrZWNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4K
KyNpbmNsdWRlICJ4ZGdtaW1lbWFnaWMuaCIKKyNpbmNsdWRlICJ4ZGdtaW1laW50LmgiCisjaW5j
bHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4K
KyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRz
Lmg+CisKKyNpZm5kZWYJRkFMU0UKKyNkZWZpbmUJRkFMU0UJKDApCisjZW5kaWYKKworI2lmbmRl
ZglUUlVFCisjZGVmaW5lCVRSVUUJKCFGQUxTRSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgZ2V0
Y191bmxvY2tlZCAmJiAhZGVmaW5lZCBIQVZFX0dFVENfVU5MT0NLRUQKKyMgZGVmaW5lIGdldGNf
dW5sb2NrZWQoZnApIGdldGMgKGZwKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IFhkZ01pbWVN
YWdpY01hdGNoIFhkZ01pbWVNYWdpY01hdGNoOwordHlwZWRlZiBzdHJ1Y3QgWGRnTWltZU1hZ2lj
TWF0Y2hsZXQgWGRnTWltZU1hZ2ljTWF0Y2hsZXQ7CisKK3R5cGVkZWYgZW51bQoreworICBYREdf
TUlNRV9NQUdJQ19TRUNUSU9OLAorICBYREdfTUlNRV9NQUdJQ19NQUdJQywKKyAgWERHX01JTUVf
TUFHSUNfRVJST1IsCisgIFhER19NSU1FX01BR0lDX0VPRgorfSBYZGdNaW1lTWFnaWNTdGF0ZTsK
Kworc3RydWN0IFhkZ01pbWVNYWdpY01hdGNoCit7CisgIGNvbnN0IGNoYXIgKm1pbWVfdHlwZTsK
KyAgaW50IHByaW9yaXR5OworICBYZGdNaW1lTWFnaWNNYXRjaGxldCAqbWF0Y2hsZXQ7CisgIFhk
Z01pbWVNYWdpY01hdGNoICpuZXh0OworfTsKKworCitzdHJ1Y3QgWGRnTWltZU1hZ2ljTWF0Y2hs
ZXQKK3sKKyAgaW50IGluZGVudDsKKyAgaW50IG9mZnNldDsKKyAgdW5zaWduZWQgaW50IHZhbHVl
X2xlbmd0aDsKKyAgdW5zaWduZWQgY2hhciAqdmFsdWU7CisgIHVuc2lnbmVkIGNoYXIgKm1hc2s7
CisgIHVuc2lnbmVkIGludCByYW5nZV9sZW5ndGg7CisgIHVuc2lnbmVkIGludCB3b3JkX3NpemU7
CisgIFhkZ01pbWVNYWdpY01hdGNobGV0ICpuZXh0OworfTsKKworCitzdHJ1Y3QgWGRnTWltZU1h
Z2ljCit7CisgIFhkZ01pbWVNYWdpY01hdGNoICptYXRjaF9saXN0OworICBpbnQgbWF4X2V4dGVu
dDsKK307CisKK3N0YXRpYyBYZGdNaW1lTWFnaWNNYXRjaCAqCitfeGRnX21pbWVfbWFnaWNfbWF0
Y2hfbmV3ICh2b2lkKQoreworICByZXR1cm4gY2FsbG9jICgxLCBzaXplb2YgKFhkZ01pbWVNYWdp
Y01hdGNoKSk7Cit9CisKKworc3RhdGljIFhkZ01pbWVNYWdpY01hdGNobGV0ICoKK194ZGdfbWlt
ZV9tYWdpY19tYXRjaGxldF9uZXcgKHZvaWQpCit7CisgIFhkZ01pbWVNYWdpY01hdGNobGV0ICpt
YXRjaGxldDsKKworICBtYXRjaGxldCA9IG1hbGxvYyAoc2l6ZW9mIChYZGdNaW1lTWFnaWNNYXRj
aGxldCkpOworCisgIG1hdGNobGV0LT5pbmRlbnQgPSAwOworICBtYXRjaGxldC0+b2Zmc2V0ID0g
MDsKKyAgbWF0Y2hsZXQtPnZhbHVlX2xlbmd0aCA9IDA7CisgIG1hdGNobGV0LT52YWx1ZSA9IE5V
TEw7CisgIG1hdGNobGV0LT5tYXNrID0gTlVMTDsKKyAgbWF0Y2hsZXQtPnJhbmdlX2xlbmd0aCA9
IDE7CisgIG1hdGNobGV0LT53b3JkX3NpemUgPSAxOworICBtYXRjaGxldC0+bmV4dCA9IE5VTEw7
CisKKyAgcmV0dXJuIG1hdGNobGV0OworfQorCisKK3N0YXRpYyB2b2lkCitfeGRnX21pbWVfbWFn
aWNfbWF0Y2hsZXRfZnJlZSAoWGRnTWltZU1hZ2ljTWF0Y2hsZXQgKm1pbWVfbWFnaWNfbWF0Y2hs
ZXQpCit7CisgIGlmIChtaW1lX21hZ2ljX21hdGNobGV0KQorICAgIHsKKyAgICAgIGlmIChtaW1l
X21hZ2ljX21hdGNobGV0LT5uZXh0KQorCV94ZGdfbWltZV9tYWdpY19tYXRjaGxldF9mcmVlICht
aW1lX21hZ2ljX21hdGNobGV0LT5uZXh0KTsKKyAgICAgIGlmIChtaW1lX21hZ2ljX21hdGNobGV0
LT52YWx1ZSkKKwlmcmVlIChtaW1lX21hZ2ljX21hdGNobGV0LT52YWx1ZSk7CisgICAgICBpZiAo
bWltZV9tYWdpY19tYXRjaGxldC0+bWFzaykKKwlmcmVlIChtaW1lX21hZ2ljX21hdGNobGV0LT5t
YXNrKTsKKyAgICAgIGZyZWUgKG1pbWVfbWFnaWNfbWF0Y2hsZXQpOworICAgIH0KK30KKworCisv
KiBGcmVlcyBtaW1lX21hZ2ljX21hdGNoIGFuZCB0aGUgcmVtYWluZGVyIG9mIGl0cyBsaXN0Cisg
Ki8KK3N0YXRpYyB2b2lkCitfeGRnX21pbWVfbWFnaWNfbWF0Y2hfZnJlZSAoWGRnTWltZU1hZ2lj
TWF0Y2ggKm1pbWVfbWFnaWNfbWF0Y2gpCit7CisgIFhkZ01pbWVNYWdpY01hdGNoICpwdHIsICpu
ZXh0OworCisgIHB0ciA9IG1pbWVfbWFnaWNfbWF0Y2g7CisgIHdoaWxlIChwdHIpCisgICAgewor
ICAgICAgbmV4dCA9IHB0ci0+bmV4dDsKKworICAgICAgaWYgKHB0ci0+bWltZV90eXBlKQorCWZy
ZWUgKCh2b2lkICopIHB0ci0+bWltZV90eXBlKTsKKyAgICAgIGlmIChwdHItPm1hdGNobGV0KQor
CV94ZGdfbWltZV9tYWdpY19tYXRjaGxldF9mcmVlIChwdHItPm1hdGNobGV0KTsKKyAgICAgIGZy
ZWUgKHB0cik7CisKKyAgICAgIHB0ciA9IG5leHQ7CisgICAgfQorfQorCisvKiBSZWFkcyBpbiBh
IGh1bmsgb2YgZGF0YSB1bnRpbCBhIG5ld2xpbmUgY2hhcmFjdGVyIG9yIGEgJ1wwMDAnIGlzIGhp
dC4gIFRoZQorICogcmV0dXJuZWQgc3RyaW5nIGlzIG51bGwgdGVybWluYXRlZCwgYW5kIGRvZXNu
J3QgaW5jbHVkZSB0aGUgbmV3bGluZS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgKgorX3hk
Z19taW1lX21hZ2ljX3JlYWRfdG9fbmV3bGluZSAoRklMRSAqbWFnaWNfZmlsZSwKKwkJCQkgaW50
ICAqZW5kX29mX2ZpbGUpCit7CisgIHVuc2lnbmVkIGNoYXIgKnJldHZhbDsKKyAgaW50IGM7Cisg
IGludCBsZW4sIHBvczsKKworICBsZW4gPSAxMjg7CisgIHBvcyA9IDA7CisgIHJldHZhbCA9IG1h
bGxvYyAobGVuKTsKKyAgKmVuZF9vZl9maWxlID0gRkFMU0U7CisKKyAgd2hpbGUgKFRSVUUpCisg
ICAgeworICAgICAgYyA9IGdldGNfdW5sb2NrZWQgKG1hZ2ljX2ZpbGUpOworICAgICAgaWYgKGMg
PT0gRU9GKQorCXsKKwkgICplbmRfb2ZfZmlsZSA9IFRSVUU7CisJICBicmVhazsKKwl9CisgICAg
ICBpZiAoYyA9PSAnXG4nIHx8IGMgPT0gJ1wwMDAnKQorCWJyZWFrOworICAgICAgcmV0dmFsW3Bv
cysrXSA9ICh1bnNpZ25lZCBjaGFyKSBjOworICAgICAgaWYgKHBvcyAlIDEyOCA9PSAxMjcpCisJ
eworCSAgbGVuID0gbGVuICsgMTI4OworCSAgcmV0dmFsID0gcmVhbGxvYyAocmV0dmFsLCBsZW4p
OworCX0KKyAgICB9CisKKyAgcmV0dmFsW3Bvc10gPSAnXDAwMCc7CisgIHJldHVybiByZXR2YWw7
Cit9CisKKy8qIFJldHVybnMgdGhlIG51bWJlciByZWFkIGZyb20gdGhlIGZpbGUsIG9yIC0xIGlm
IG5vIG51bWJlciBjb3VsZCBiZSByZWFkLgorICovCitzdGF0aWMgaW50CitfeGRnX21pbWVfbWFn
aWNfcmVhZF9hX251bWJlciAoRklMRSAqbWFnaWNfZmlsZSwKKwkJCSAgICAgICBpbnQgICplbmRf
b2ZfZmlsZSkKK3sKKyAgLyogTE9OR19NQVggaXMgYWJvdXQgMjAgY2hhcmFjdGVycyBvbiBteSBz
eXN0ZW0gKi8KKyNkZWZpbmUgTUFYX05VTUJFUl9TSVpFIDMwCisgIGNoYXIgbnVtYmVyX3N0cmlu
Z1tNQVhfTlVNQkVSX1NJWkUgKyAxXTsKKyAgaW50IHBvcyA9IDA7CisgIGludCBjOworICBsb25n
IHJldHZhbCA9IC0xOworCisgIHdoaWxlIChUUlVFKQorICAgIHsKKyAgICAgIGMgPSBnZXRjX3Vu
bG9ja2VkIChtYWdpY19maWxlKTsKKworICAgICAgaWYgKGMgPT0gRU9GKQorCXsKKwkgICplbmRf
b2ZfZmlsZSA9IFRSVUU7CisJICBicmVhazsKKwl9CisgICAgICBpZiAoISBpc2RpZ2l0IChjKSkK
Kwl7CisJICB1bmdldGMgKGMsIG1hZ2ljX2ZpbGUpOworCSAgYnJlYWs7CisJfQorICAgICAgbnVt
YmVyX3N0cmluZ1twb3NdID0gKGNoYXIpIGM7CisgICAgICBwb3MrKzsKKyAgICAgIGlmIChwb3Mg
PT0gTUFYX05VTUJFUl9TSVpFKQorCWJyZWFrOworICAgIH0KKyAgaWYgKHBvcyA+IDApCisgICAg
eworICAgICAgbnVtYmVyX3N0cmluZ1twb3NdID0gJ1wwMDAnOworICAgICAgZXJybm8gPSAwOwor
ICAgICAgcmV0dmFsID0gc3RydG9sIChudW1iZXJfc3RyaW5nLCBOVUxMLCAxMCk7CisKKyAgICAg
IGlmICgocmV0dmFsIDwgSU5UX01JTikgfHwgKHJldHZhbCA+IElOVF9NQVgpIHx8IChlcnJubyAh
PSAwKSkKKwlyZXR1cm4gLTE7CisgICAgfQorCisgIHJldHVybiByZXR2YWw7Cit9CisKKy8qIEhl
YWRlcnMgYXJlIG9mIHRoZSBmb3JtYXQ6CisgKiBbPHByaW9yaXR5Pjo8bWltZS10eXBlPl0KKyAq
Lworc3RhdGljIFhkZ01pbWVNYWdpY1N0YXRlCitfeGRnX21pbWVfbWFnaWNfcGFyc2VfaGVhZGVy
IChGSUxFICptYWdpY19maWxlLCBYZGdNaW1lTWFnaWNNYXRjaCAqbWF0Y2gpCit7CisgIGludCBj
OworICBjaGFyICpidWZmZXI7CisgIGNoYXIgKmVuZF9wdHI7CisgIGludCBlbmRfb2ZfZmlsZSA9
IDA7CisKKyAgYXNzZXJ0IChtYWdpY19maWxlICE9IE5VTEwpOworICBhc3NlcnQgKG1hdGNoICE9
IE5VTEwpOworCisgIGMgPSBnZXRjX3VubG9ja2VkIChtYWdpY19maWxlKTsKKyAgaWYgKGMgPT0g
RU9GKQorICAgIHJldHVybiBYREdfTUlNRV9NQUdJQ19FT0Y7CisgIGlmIChjICE9ICdbJykKKyAg
ICByZXR1cm4gWERHX01JTUVfTUFHSUNfRVJST1I7CisKKyAgbWF0Y2gtPnByaW9yaXR5ID0gX3hk
Z19taW1lX21hZ2ljX3JlYWRfYV9udW1iZXIgKG1hZ2ljX2ZpbGUsICZlbmRfb2ZfZmlsZSk7Cisg
IGlmIChlbmRfb2ZfZmlsZSkKKyAgICByZXR1cm4gWERHX01JTUVfTUFHSUNfRU9GOworICBpZiAo
bWF0Y2gtPnByaW9yaXR5ID09IC0xKQorICAgIHJldHVybiBYREdfTUlNRV9NQUdJQ19FUlJPUjsK
KworICBjID0gZ2V0Y191bmxvY2tlZCAobWFnaWNfZmlsZSk7CisgIGlmIChjID09IEVPRikKKyAg
ICByZXR1cm4gWERHX01JTUVfTUFHSUNfRU9GOworICBpZiAoYyAhPSAnOicpCisgICAgcmV0dXJu
IFhER19NSU1FX01BR0lDX0VSUk9SOworCisgIGJ1ZmZlciA9IChjaGFyICopX3hkZ19taW1lX21h
Z2ljX3JlYWRfdG9fbmV3bGluZSAobWFnaWNfZmlsZSwgJmVuZF9vZl9maWxlKTsKKyAgaWYgKGVu
ZF9vZl9maWxlKQorICAgIHsKKyAgICAgIGZyZWUgKGJ1ZmZlcik7CisgICAgICByZXR1cm4gWERH
X01JTUVfTUFHSUNfRU9GOworICAgIH0KKworICBlbmRfcHRyID0gYnVmZmVyOworICB3aGlsZSAo
KmVuZF9wdHIgIT0gJ10nICYmICplbmRfcHRyICE9ICdcMDAwJyAmJiAqZW5kX3B0ciAhPSAnXG4n
KQorICAgIGVuZF9wdHIrKzsKKyAgaWYgKCplbmRfcHRyICE9ICddJykKKyAgICB7CisgICAgICBm
cmVlIChidWZmZXIpOworICAgICAgcmV0dXJuIFhER19NSU1FX01BR0lDX0VSUk9SOworICAgIH0K
KyAgKmVuZF9wdHIgPSAnXDAwMCc7CisKKyAgbWF0Y2gtPm1pbWVfdHlwZSA9IHN0cmR1cCAoYnVm
ZmVyKTsKKyAgZnJlZSAoYnVmZmVyKTsKKworICByZXR1cm4gWERHX01JTUVfTUFHSUNfTUFHSUM7
Cit9CisKK3N0YXRpYyBYZGdNaW1lTWFnaWNTdGF0ZQorX3hkZ19taW1lX21hZ2ljX3BhcnNlX2Vy
cm9yIChGSUxFICptYWdpY19maWxlKQoreworICBpbnQgYzsKKworICB3aGlsZSAoMSkKKyAgICB7
CisgICAgICBjID0gZ2V0Y191bmxvY2tlZCAobWFnaWNfZmlsZSk7CisgICAgICBpZiAoYyA9PSBF
T0YpCisJcmV0dXJuIFhER19NSU1FX01BR0lDX0VPRjsKKyAgICAgIGlmIChjID09ICdcbicpCisJ
cmV0dXJuIFhER19NSU1FX01BR0lDX1NFQ1RJT047CisgICAgfQorfQorCisvKiBIZWFkZXJzIGFy
ZSBvZiB0aGUgZm9ybWF0OgorICogWyBpbmRlbnQgXSAiPiIgc3RhcnQtb2Zmc2V0ICI9IiB2YWx1
ZQorICogWyAiJiIgbWFzayBdIFsgIn4iIHdvcmQtc2l6ZSBdIFsgIisiIHJhbmdlLWxlbmd0aCBd
ICJcbiIKKyAqLworc3RhdGljIFhkZ01pbWVNYWdpY1N0YXRlCitfeGRnX21pbWVfbWFnaWNfcGFy
c2VfbWFnaWNfbGluZSAoRklMRSAgICAgICAgICAgICAgKm1hZ2ljX2ZpbGUsCisJCQkJICBYZGdN
aW1lTWFnaWNNYXRjaCAqbWF0Y2gpCit7CisgIFhkZ01pbWVNYWdpY01hdGNobGV0ICptYXRjaGxl
dDsKKyAgaW50IGM7CisgIGludCBlbmRfb2ZfZmlsZTsKKyAgaW50IGluZGVudCA9IDA7CisgIGlu
dCBieXRlc19yZWFkOworCisgIGFzc2VydCAobWFnaWNfZmlsZSAhPSBOVUxMKTsKKworICAvKiBT
bmlmZiB0aGUgYnVmZmVyIHRvIG1ha2Ugc3VyZSBpdCdzIGEgdmFsaWQgbGluZSAqLworICBjID0g
Z2V0Y191bmxvY2tlZCAobWFnaWNfZmlsZSk7CisgIGlmIChjID09IEVPRikKKyAgICByZXR1cm4g
WERHX01JTUVfTUFHSUNfRU9GOworICBlbHNlIGlmIChjID09ICdbJykKKyAgICB7CisgICAgICB1
bmdldGMgKGMsIG1hZ2ljX2ZpbGUpOworICAgICAgcmV0dXJuIFhER19NSU1FX01BR0lDX1NFQ1RJ
T047CisgICAgfQorICBlbHNlIGlmIChjID09ICdcbicpCisgICAgcmV0dXJuIFhER19NSU1FX01B
R0lDX01BR0lDOworCisgIC8qIEF0IHRoaXMgcG9pbnQsIGl0IG11c3QgYmUgYSBkaWdpdCBvciBh
ICc+JyAqLworICBlbmRfb2ZfZmlsZSA9IEZBTFNFOworICBpZiAoaXNkaWdpdCAoYykpCisgICAg
eworICAgICAgdW5nZXRjIChjLCBtYWdpY19maWxlKTsKKyAgICAgIGluZGVudCA9IF94ZGdfbWlt
ZV9tYWdpY19yZWFkX2FfbnVtYmVyIChtYWdpY19maWxlLCAmZW5kX29mX2ZpbGUpOworICAgICAg
aWYgKGVuZF9vZl9maWxlKQorCXJldHVybiBYREdfTUlNRV9NQUdJQ19FT0Y7CisgICAgICBpZiAo
aW5kZW50ID09IC0xKQorCXJldHVybiBYREdfTUlNRV9NQUdJQ19FUlJPUjsKKyAgICAgIGMgPSBn
ZXRjX3VubG9ja2VkIChtYWdpY19maWxlKTsKKyAgICAgIGlmIChjID09IEVPRikKKwlyZXR1cm4g
WERHX01JTUVfTUFHSUNfRU9GOworICAgIH0KKworICBpZiAoYyAhPSAnPicpCisgICAgcmV0dXJu
IFhER19NSU1FX01BR0lDX0VSUk9SOworCisgIG1hdGNobGV0ID0gX3hkZ19taW1lX21hZ2ljX21h
dGNobGV0X25ldyAoKTsKKyAgbWF0Y2hsZXQtPmluZGVudCA9IGluZGVudDsKKyAgbWF0Y2hsZXQt
Pm9mZnNldCA9IF94ZGdfbWltZV9tYWdpY19yZWFkX2FfbnVtYmVyIChtYWdpY19maWxlLCAmZW5k
X29mX2ZpbGUpOworICBpZiAoZW5kX29mX2ZpbGUpCisgICAgeworICAgICAgX3hkZ19taW1lX21h
Z2ljX21hdGNobGV0X2ZyZWUgKG1hdGNobGV0KTsKKyAgICAgIHJldHVybiBYREdfTUlNRV9NQUdJ
Q19FT0Y7CisgICAgfQorICBpZiAobWF0Y2hsZXQtPm9mZnNldCA9PSAtMSkKKyAgICB7CisgICAg
ICBfeGRnX21pbWVfbWFnaWNfbWF0Y2hsZXRfZnJlZSAobWF0Y2hsZXQpOworICAgICAgcmV0dXJu
IFhER19NSU1FX01BR0lDX0VSUk9SOworICAgIH0KKyAgYyA9IGdldGNfdW5sb2NrZWQgKG1hZ2lj
X2ZpbGUpOworICBpZiAoYyA9PSBFT0YpCisgICAgeworICAgICAgX3hkZ19taW1lX21hZ2ljX21h
dGNobGV0X2ZyZWUgKG1hdGNobGV0KTsKKyAgICAgIHJldHVybiBYREdfTUlNRV9NQUdJQ19FT0Y7
CisgICAgfQorICBlbHNlIGlmIChjICE9ICc9JykKKyAgICB7CisgICAgICBfeGRnX21pbWVfbWFn
aWNfbWF0Y2hsZXRfZnJlZSAobWF0Y2hsZXQpOworICAgICAgcmV0dXJuIFhER19NSU1FX01BR0lD
X0VSUk9SOworICAgIH0KKworICAvKiBOZXh0IHR3byBieXRlcyBkZXRlcm1pbmUgaG93IGxvbmcg
dGhlIHZhbHVlIGlzICovCisgIG1hdGNobGV0LT52YWx1ZV9sZW5ndGggPSAwOworICBjID0gZ2V0
Y191bmxvY2tlZCAobWFnaWNfZmlsZSk7CisgIGlmIChjID09IEVPRikKKyAgICB7CisgICAgICBf
eGRnX21pbWVfbWFnaWNfbWF0Y2hsZXRfZnJlZSAobWF0Y2hsZXQpOworICAgICAgcmV0dXJuIFhE
R19NSU1FX01BR0lDX0VPRjsKKyAgICB9CisgIG1hdGNobGV0LT52YWx1ZV9sZW5ndGggPSBjICYg
MHhGRjsKKyAgbWF0Y2hsZXQtPnZhbHVlX2xlbmd0aCA9IG1hdGNobGV0LT52YWx1ZV9sZW5ndGgg
PDwgODsKKworICBjID0gZ2V0Y191bmxvY2tlZCAobWFnaWNfZmlsZSk7CisgIGlmIChjID09IEVP
RikKKyAgICB7CisgICAgICBfeGRnX21pbWVfbWFnaWNfbWF0Y2hsZXRfZnJlZSAobWF0Y2hsZXQp
OworICAgICAgcmV0dXJuIFhER19NSU1FX01BR0lDX0VPRjsKKyAgICB9CisgIG1hdGNobGV0LT52
YWx1ZV9sZW5ndGggPSBtYXRjaGxldC0+dmFsdWVfbGVuZ3RoICsgKGMgJiAweEZGKTsKKworICBt
YXRjaGxldC0+dmFsdWUgPSBtYWxsb2MgKG1hdGNobGV0LT52YWx1ZV9sZW5ndGgpOworCisgIC8q
IE9PTSAqLworICBpZiAobWF0Y2hsZXQtPnZhbHVlID09IE5VTEwpCisgICAgeworICAgICAgX3hk
Z19taW1lX21hZ2ljX21hdGNobGV0X2ZyZWUgKG1hdGNobGV0KTsKKyAgICAgIHJldHVybiBYREdf
TUlNRV9NQUdJQ19FUlJPUjsKKyAgICB9CisgIGJ5dGVzX3JlYWQgPSBmcmVhZCAobWF0Y2hsZXQt
PnZhbHVlLCAxLCBtYXRjaGxldC0+dmFsdWVfbGVuZ3RoLCBtYWdpY19maWxlKTsKKyAgaWYgKGJ5
dGVzX3JlYWQgIT0gbWF0Y2hsZXQtPnZhbHVlX2xlbmd0aCkKKyAgICB7CisgICAgICBfeGRnX21p
bWVfbWFnaWNfbWF0Y2hsZXRfZnJlZSAobWF0Y2hsZXQpOworICAgICAgaWYgKGZlb2YgKG1hZ2lj
X2ZpbGUpKQorCXJldHVybiBYREdfTUlNRV9NQUdJQ19FT0Y7CisgICAgICBlbHNlCisJcmV0dXJu
IFhER19NSU1FX01BR0lDX0VSUk9SOworICAgIH0KKworICBjID0gZ2V0Y191bmxvY2tlZCAobWFn
aWNfZmlsZSk7CisgIGlmIChjID09ICcmJykKKyAgICB7CisgICAgICBtYXRjaGxldC0+bWFzayA9
IG1hbGxvYyAobWF0Y2hsZXQtPnZhbHVlX2xlbmd0aCk7CisgICAgICAvKiBPT00gKi8KKyAgICAg
IGlmIChtYXRjaGxldC0+bWFzayA9PSBOVUxMKQorCXsKKwkgIF94ZGdfbWltZV9tYWdpY19tYXRj
aGxldF9mcmVlIChtYXRjaGxldCk7CisJICByZXR1cm4gWERHX01JTUVfTUFHSUNfRVJST1I7CisJ
fQorICAgICAgYnl0ZXNfcmVhZCA9IGZyZWFkIChtYXRjaGxldC0+bWFzaywgMSwgbWF0Y2hsZXQt
PnZhbHVlX2xlbmd0aCwgbWFnaWNfZmlsZSk7CisgICAgICBpZiAoYnl0ZXNfcmVhZCAhPSBtYXRj
aGxldC0+dmFsdWVfbGVuZ3RoKQorCXsKKwkgIF94ZGdfbWltZV9tYWdpY19tYXRjaGxldF9mcmVl
IChtYXRjaGxldCk7CisJICBpZiAoZmVvZiAobWFnaWNfZmlsZSkpCisJICAgIHJldHVybiBYREdf
TUlNRV9NQUdJQ19FT0Y7CisJICBlbHNlCisJICAgIHJldHVybiBYREdfTUlNRV9NQUdJQ19FUlJP
UjsKKwl9CisgICAgICBjID0gZ2V0Y191bmxvY2tlZCAobWFnaWNfZmlsZSk7CisgICAgfQorCisg
IGlmIChjID09ICd+JykKKyAgICB7CisgICAgICBtYXRjaGxldC0+d29yZF9zaXplID0gX3hkZ19t
aW1lX21hZ2ljX3JlYWRfYV9udW1iZXIgKG1hZ2ljX2ZpbGUsICZlbmRfb2ZfZmlsZSk7CisgICAg
ICBpZiAoZW5kX29mX2ZpbGUpCisJeworCSAgX3hkZ19taW1lX21hZ2ljX21hdGNobGV0X2ZyZWUg
KG1hdGNobGV0KTsKKwkgIHJldHVybiBYREdfTUlNRV9NQUdJQ19FT0Y7CisJfQorICAgICAgaWYg
KG1hdGNobGV0LT53b3JkX3NpemUgIT0gMCAmJgorCSAgbWF0Y2hsZXQtPndvcmRfc2l6ZSAhPSAx
ICYmCisJICBtYXRjaGxldC0+d29yZF9zaXplICE9IDIgJiYKKwkgIG1hdGNobGV0LT53b3JkX3Np
emUgIT0gNCkKKwl7CisJICBfeGRnX21pbWVfbWFnaWNfbWF0Y2hsZXRfZnJlZSAobWF0Y2hsZXQp
OworCSAgcmV0dXJuIFhER19NSU1FX01BR0lDX0VSUk9SOworCX0KKyAgICAgIGMgPSBnZXRjX3Vu
bG9ja2VkIChtYWdpY19maWxlKTsKKyAgICB9CisKKyAgaWYgKGMgPT0gJysnKQorICAgIHsKKyAg
ICAgIG1hdGNobGV0LT5yYW5nZV9sZW5ndGggPSBfeGRnX21pbWVfbWFnaWNfcmVhZF9hX251bWJl
ciAobWFnaWNfZmlsZSwgJmVuZF9vZl9maWxlKTsKKyAgICAgIGlmIChlbmRfb2ZfZmlsZSkKKwl7
CisJICBfeGRnX21pbWVfbWFnaWNfbWF0Y2hsZXRfZnJlZSAobWF0Y2hsZXQpOworCSAgcmV0dXJu
IFhER19NSU1FX01BR0lDX0VPRjsKKwl9CisgICAgICBpZiAobWF0Y2hsZXQtPnJhbmdlX2xlbmd0
aCA9PSAtMSkKKwl7CisJICBfeGRnX21pbWVfbWFnaWNfbWF0Y2hsZXRfZnJlZSAobWF0Y2hsZXQp
OworCSAgcmV0dXJuIFhER19NSU1FX01BR0lDX0VSUk9SOworCX0KKyAgICAgIGMgPSBnZXRjX3Vu
bG9ja2VkIChtYWdpY19maWxlKTsKKyAgICB9CisKKworICBpZiAoYyA9PSAnXG4nKQorICAgIHsK
KyAgICAgIC8qIFdlIGNsZWFuIHVwIHRoZSBtYXRjaGxldCwgYnl0ZSBzd2FwcGluZyBpZiBuZWVk
ZWQgKi8KKyAgICAgIGlmIChtYXRjaGxldC0+d29yZF9zaXplID4gMSkKKwl7CisJICBpbnQgaTsK
KwkgIGlmIChtYXRjaGxldC0+dmFsdWVfbGVuZ3RoICUgbWF0Y2hsZXQtPndvcmRfc2l6ZSAhPSAw
KQorCSAgICB7CisJICAgICAgX3hkZ19taW1lX21hZ2ljX21hdGNobGV0X2ZyZWUgKG1hdGNobGV0
KTsKKwkgICAgICByZXR1cm4gWERHX01JTUVfTUFHSUNfRVJST1I7CisJICAgIH0KKwkgIC8qIEZJ
WE1FOiBuZWVkIHRvIGdldCB0aGlzIGRlZmluZWQgaW4gYSA8Y29uZmlnLmg+IHN0eWxlIGZpbGUg
Ki8KKyNpZiBMSVRUTEVfRU5ESUFOCisJICBmb3IgKGkgPSAwOyBpIDwgbWF0Y2hsZXQtPnZhbHVl
X2xlbmd0aDsgaSA9IGkgKyBtYXRjaGxldC0+d29yZF9zaXplKQorCSAgICB7CisJICAgICAgaWYg
KG1hdGNobGV0LT53b3JkX3NpemUgPT0gMikKKwkJKigoeGRnX3VpbnQxNl90ICopIG1hdGNobGV0
LT52YWx1ZSArIGkpID0gU1dBUF9CRTE2X1RPX0xFMTYgKCooKHhkZ191aW50MTZfdCAqKSAobWF0
Y2hsZXQtPnZhbHVlICsgaSkpKTsKKwkgICAgICBlbHNlIGlmIChtYXRjaGxldC0+d29yZF9zaXpl
ID09IDQpCisJCSooKHhkZ191aW50MzJfdCAqKSBtYXRjaGxldC0+dmFsdWUgKyBpKSA9IFNXQVBf
QkUzMl9UT19MRTMyICgqKCh4ZGdfdWludDMyX3QgKikgKG1hdGNobGV0LT52YWx1ZSArIGkpKSk7
CisJICAgICAgaWYgKG1hdGNobGV0LT5tYXNrKQorCQl7CisJCSAgaWYgKG1hdGNobGV0LT53b3Jk
X3NpemUgPT0gMikKKwkJICAgICooKHhkZ191aW50MTZfdCAqKSBtYXRjaGxldC0+bWFzayArIGkp
ID0gU1dBUF9CRTE2X1RPX0xFMTYgKCooKHhkZ191aW50MTZfdCAqKSAobWF0Y2hsZXQtPm1hc2sg
KyBpKSkpOworCQkgIGVsc2UgaWYgKG1hdGNobGV0LT53b3JkX3NpemUgPT0gNCkKKwkJICAgICoo
KHhkZ191aW50MzJfdCAqKSBtYXRjaGxldC0+bWFzayArIGkpID0gU1dBUF9CRTMyX1RPX0xFMzIg
KCooKHhkZ191aW50MzJfdCAqKSAobWF0Y2hsZXQtPm1hc2sgKyBpKSkpOworCisJCX0KKwkgICAg
fQorI2VuZGlmCisJfQorCisgICAgICBtYXRjaGxldC0+bmV4dCA9IG1hdGNoLT5tYXRjaGxldDsK
KyAgICAgIG1hdGNoLT5tYXRjaGxldCA9IG1hdGNobGV0OworCisKKyAgICAgIHJldHVybiBYREdf
TUlNRV9NQUdJQ19NQUdJQzsKKyAgICB9CisKKyAgX3hkZ19taW1lX21hZ2ljX21hdGNobGV0X2Zy
ZWUgKG1hdGNobGV0KTsKKyAgaWYgKGMgPT0gRU9GKQorICAgIHJldHVybiBYREdfTUlNRV9NQUdJ
Q19FT0Y7CisKKyAgcmV0dXJuIFhER19NSU1FX01BR0lDX0VSUk9SOworfQorCitzdGF0aWMgaW50
CitfeGRnX21pbWVfbWFnaWNfbWF0Y2hsZXRfY29tcGFyZV90b19kYXRhIChYZGdNaW1lTWFnaWNN
YXRjaGxldCAqbWF0Y2hsZXQsCisJCQkJCSAgY29uc3Qgdm9pZCAgICAgICAgICAgKmRhdGEsCisJ
CQkJCSAgc2l6ZV90ICAgICAgICAgICAgICAgIGxlbikKK3sKKyAgaW50IGksIGo7CisgIGZvciAo
aSA9IG1hdGNobGV0LT5vZmZzZXQ7IGkgPCBtYXRjaGxldC0+b2Zmc2V0ICsgbWF0Y2hsZXQtPnJh
bmdlX2xlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgIGludCB2YWxpZF9tYXRjaGxldCA9IFRSVUU7
CisKKyAgICAgIGlmIChpICsgbWF0Y2hsZXQtPnZhbHVlX2xlbmd0aCA+IGxlbikKKwlyZXR1cm4g
RkFMU0U7CisKKyAgICAgIGlmIChtYXRjaGxldC0+bWFzaykKKwl7CisJICBmb3IgKGogPSAwOyBq
IDwgbWF0Y2hsZXQtPnZhbHVlX2xlbmd0aDsgaisrKQorCSAgICB7CisJICAgICAgaWYgKChtYXRj
aGxldC0+dmFsdWVbal0gJiBtYXRjaGxldC0+bWFza1tqXSkgIT0KKwkJICAoKCgodW5zaWduZWQg
Y2hhciAqKSBkYXRhKVtqICsgaV0pICYgbWF0Y2hsZXQtPm1hc2tbal0pKQorCQl7CisJCSAgdmFs
aWRfbWF0Y2hsZXQgPSBGQUxTRTsKKwkJICBicmVhazsKKwkJfQorCSAgICB9CisJfQorICAgICAg
ZWxzZQorCXsKKwkgIGZvciAoaiA9IDA7IGogPCAgbWF0Y2hsZXQtPnZhbHVlX2xlbmd0aDsgaisr
KQorCSAgICB7CisJICAgICAgaWYgKG1hdGNobGV0LT52YWx1ZVtqXSAhPSAoKHVuc2lnbmVkIGNo
YXIgKikgZGF0YSlbaiArIGldKQorCQl7CisJCSAgdmFsaWRfbWF0Y2hsZXQgPSBGQUxTRTsKKwkJ
ICBicmVhazsKKwkJfQorCSAgICB9CisJfQorICAgICAgaWYgKHZhbGlkX21hdGNobGV0KQorCXJl
dHVybiBUUlVFOworICAgIH0KKyAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgaW50CitfeGRn
X21pbWVfbWFnaWNfbWF0Y2hsZXRfY29tcGFyZV9sZXZlbCAoWGRnTWltZU1hZ2ljTWF0Y2hsZXQg
Km1hdGNobGV0LAorCQkJCQljb25zdCB2b2lkICAgICAgICAgICAqZGF0YSwKKwkJCQkJc2l6ZV90
ICAgICAgICAgICAgICAgIGxlbiwKKwkJCQkJaW50ICAgICAgICAgICAgICAgICAgIGluZGVudCkK
K3sKKyAgd2hpbGUgKChtYXRjaGxldCAhPSBOVUxMKSAmJiAobWF0Y2hsZXQtPmluZGVudCA9PSBp
bmRlbnQpKQorICAgIHsKKyAgICAgIGlmIChfeGRnX21pbWVfbWFnaWNfbWF0Y2hsZXRfY29tcGFy
ZV90b19kYXRhIChtYXRjaGxldCwgZGF0YSwgbGVuKSkKKwl7CisJICBpZiAoKG1hdGNobGV0LT5u
ZXh0ID09IE5VTEwpIHx8CisJICAgICAgKG1hdGNobGV0LT5uZXh0LT5pbmRlbnQgPD0gaW5kZW50
KSkKKwkgICAgcmV0dXJuIFRSVUU7CisKKwkgIGlmIChfeGRnX21pbWVfbWFnaWNfbWF0Y2hsZXRf
Y29tcGFyZV9sZXZlbCAobWF0Y2hsZXQtPm5leHQsCisJCQkJCQkgICAgICBkYXRhLAorCQkJCQkJ
ICAgICAgbGVuLAorCQkJCQkJICAgICAgaW5kZW50ICsgMSkpCisJICAgIHJldHVybiBUUlVFOwor
CX0KKworICAgICAgZG8KKwl7CisJICBtYXRjaGxldCA9IG1hdGNobGV0LT5uZXh0OworCX0KKyAg
ICAgIHdoaWxlIChtYXRjaGxldCAmJiBtYXRjaGxldC0+aW5kZW50ID4gaW5kZW50KTsKKyAgICB9
CisKKyAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgaW50CitfeGRnX21pbWVfbWFnaWNfbWF0
Y2hfY29tcGFyZV90b19kYXRhIChYZGdNaW1lTWFnaWNNYXRjaCAqbWF0Y2gsCisJCQkJICAgICAg
IGNvbnN0IHZvaWQgICAgICAgICpkYXRhLAorCQkJCSAgICAgICBzaXplX3QgICAgICAgICAgICAg
bGVuKQoreworICByZXR1cm4gX3hkZ19taW1lX21hZ2ljX21hdGNobGV0X2NvbXBhcmVfbGV2ZWwg
KG1hdGNoLT5tYXRjaGxldCwgZGF0YSwgbGVuLCAwKTsKK30KKworc3RhdGljIHZvaWQKK194ZGdf
bWltZV9tYWdpY19pbnNlcnRfbWF0Y2ggKFhkZ01pbWVNYWdpYyAgICAgICptaW1lX21hZ2ljLAor
CQkJICAgICAgWGRnTWltZU1hZ2ljTWF0Y2ggKm1hdGNoKQoreworICBYZGdNaW1lTWFnaWNNYXRj
aCAqbGlzdDsKKworICBpZiAobWltZV9tYWdpYy0+bWF0Y2hfbGlzdCA9PSBOVUxMKQorICAgIHsK
KyAgICAgIG1pbWVfbWFnaWMtPm1hdGNoX2xpc3QgPSBtYXRjaDsKKyAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgaWYgKG1hdGNoLT5wcmlvcml0eSA+IG1pbWVfbWFnaWMtPm1hdGNoX2xpc3QtPnBy
aW9yaXR5KQorICAgIHsKKyAgICAgIG1hdGNoLT5uZXh0ID0gbWltZV9tYWdpYy0+bWF0Y2hfbGlz
dDsKKyAgICAgIG1pbWVfbWFnaWMtPm1hdGNoX2xpc3QgPSBtYXRjaDsKKyAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgbGlzdCA9IG1pbWVfbWFnaWMtPm1hdGNoX2xpc3Q7CisgIHdoaWxlIChsaXN0
LT5uZXh0ICE9IE5VTEwpCisgICAgeworICAgICAgaWYgKGxpc3QtPm5leHQtPnByaW9yaXR5IDwg
bWF0Y2gtPnByaW9yaXR5KQorCXsKKwkgIG1hdGNoLT5uZXh0ID0gbGlzdC0+bmV4dDsKKwkgIGxp
c3QtPm5leHQgPSBtYXRjaDsKKwkgIHJldHVybjsKKwl9CisgICAgICBsaXN0ID0gbGlzdC0+bmV4
dDsKKyAgICB9CisgIGxpc3QtPm5leHQgPSBtYXRjaDsKKyAgbWF0Y2gtPm5leHQgPSBOVUxMOwor
fQorCitYZGdNaW1lTWFnaWMgKgorX3hkZ19taW1lX21hZ2ljX25ldyAodm9pZCkKK3sKKyAgcmV0
dXJuIGNhbGxvYyAoMSwgc2l6ZW9mIChYZGdNaW1lTWFnaWMpKTsKK30KKwordm9pZAorX3hkZ19t
aW1lX21hZ2ljX2ZyZWUgKFhkZ01pbWVNYWdpYyAqbWltZV9tYWdpYykKK3sKKyAgaWYgKG1pbWVf
bWFnaWMpIHsKKyAgICBfeGRnX21pbWVfbWFnaWNfbWF0Y2hfZnJlZSAobWltZV9tYWdpYy0+bWF0
Y2hfbGlzdCk7CisgICAgZnJlZSAobWltZV9tYWdpYyk7CisgIH0KK30KKworaW50CitfeGRnX21p
bWVfbWFnaWNfZ2V0X2J1ZmZlcl9leHRlbnRzIChYZGdNaW1lTWFnaWMgKm1pbWVfbWFnaWMpCit7
CisgIHJldHVybiBtaW1lX21hZ2ljLT5tYXhfZXh0ZW50OworfQorCitjb25zdCBjaGFyICoKK194
ZGdfbWltZV9tYWdpY19sb29rdXBfZGF0YSAoWGRnTWltZU1hZ2ljICptaW1lX21hZ2ljLAorCQkJ
ICAgICBjb25zdCB2b2lkICAgKmRhdGEsCisJCQkgICAgIHNpemVfdCAgICAgICAgbGVuLAorCQkJ
ICAgICBpbnQgICAgICAgICAgICpyZXN1bHRfcHJpbywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAgICptaW1lX3R5cGVzW10sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCAgICAgICAgICAgbl9taW1lX3R5cGVzKQoreworICBYZGdNaW1lTWFnaWNNYXRj
aCAqbWF0Y2g7CisgIGNvbnN0IGNoYXIgKm1pbWVfdHlwZTsKKyAgaW50IG47CisgIGludCBwcmlv
OworCisgIHByaW8gPSAwOworICBtaW1lX3R5cGUgPSBOVUxMOworICBmb3IgKG1hdGNoID0gbWlt
ZV9tYWdpYy0+bWF0Y2hfbGlzdDsgbWF0Y2g7IG1hdGNoID0gbWF0Y2gtPm5leHQpCisgICAgewor
ICAgICAgaWYgKF94ZGdfbWltZV9tYWdpY19tYXRjaF9jb21wYXJlX3RvX2RhdGEgKG1hdGNoLCBk
YXRhLCBsZW4pKQorCXsKKwkgIHByaW8gPSBtYXRjaC0+cHJpb3JpdHk7CisJICBtaW1lX3R5cGUg
PSBtYXRjaC0+bWltZV90eXBlOworCSAgYnJlYWs7CisJfQorICAgICAgZWxzZSAKKwl7CisJICBm
b3IgKG4gPSAwOyBuIDwgbl9taW1lX3R5cGVzOyBuKyspCisJICAgIHsKKwkgICAgICBpZiAobWlt
ZV90eXBlc1tuXSAmJiAKKwkJICBfeGRnX21pbWVfbWltZV90eXBlX2VxdWFsIChtaW1lX3R5cGVz
W25dLCBtYXRjaC0+bWltZV90eXBlKSkKKwkJbWltZV90eXBlc1tuXSA9IE5VTEw7CisJICAgIH0K
Kwl9CisgICAgfQorCisgIGlmIChtaW1lX3R5cGUgPT0gTlVMTCkKKyAgICB7CisgICAgICBmb3Ig
KG4gPSAwOyBuIDwgbl9taW1lX3R5cGVzOyBuKyspCisJeworCSAgaWYgKG1pbWVfdHlwZXNbbl0p
CisJICAgIG1pbWVfdHlwZSA9IG1pbWVfdHlwZXNbbl07CisJfQorICAgIH0KKyAgCisgIGlmIChy
ZXN1bHRfcHJpbykKKyAgICAqcmVzdWx0X3ByaW8gPSBwcmlvOworCisgIHJldHVybiBtaW1lX3R5
cGU7Cit9CisKK3N0YXRpYyB2b2lkCitfeGRnX21pbWVfdXBkYXRlX21pbWVfbWFnaWNfZXh0ZW50
cyAoWGRnTWltZU1hZ2ljICptaW1lX21hZ2ljKQoreworICBYZGdNaW1lTWFnaWNNYXRjaCAqbWF0
Y2g7CisgIGludCBtYXhfZXh0ZW50ID0gMDsKKworICBmb3IgKG1hdGNoID0gbWltZV9tYWdpYy0+
bWF0Y2hfbGlzdDsgbWF0Y2g7IG1hdGNoID0gbWF0Y2gtPm5leHQpCisgICAgeworICAgICAgWGRn
TWltZU1hZ2ljTWF0Y2hsZXQgKm1hdGNobGV0OworCisgICAgICBmb3IgKG1hdGNobGV0ID0gbWF0
Y2gtPm1hdGNobGV0OyBtYXRjaGxldDsgbWF0Y2hsZXQgPSBtYXRjaGxldC0+bmV4dCkKKwl7CisJ
ICBpbnQgZXh0ZW50OworCisJICBleHRlbnQgPSBtYXRjaGxldC0+dmFsdWVfbGVuZ3RoICsgbWF0
Y2hsZXQtPm9mZnNldCArIG1hdGNobGV0LT5yYW5nZV9sZW5ndGg7CisJICBpZiAobWF4X2V4dGVu
dCA8IGV4dGVudCkKKwkgICAgbWF4X2V4dGVudCA9IGV4dGVudDsKKwl9CisgICAgfQorCisgIG1p
bWVfbWFnaWMtPm1heF9leHRlbnQgPSBtYXhfZXh0ZW50OworfQorCitzdGF0aWMgWGRnTWltZU1h
Z2ljTWF0Y2hsZXQgKgorX3hkZ19taW1lX21hZ2ljX21hdGNobGV0X21pcnJvciAoWGRnTWltZU1h
Z2ljTWF0Y2hsZXQgKm1hdGNobGV0cykKK3sKKyAgWGRnTWltZU1hZ2ljTWF0Y2hsZXQgKm5ld19s
aXN0OworICBYZGdNaW1lTWFnaWNNYXRjaGxldCAqdG1wOworCisgIGlmICgobWF0Y2hsZXRzID09
IE5VTEwpIHx8IChtYXRjaGxldHMtPm5leHQgPT0gTlVMTCkpCisgICAgcmV0dXJuIG1hdGNobGV0
czsKKworICBuZXdfbGlzdCA9IE5VTEw7CisgIHRtcCA9IG1hdGNobGV0czsKKyAgd2hpbGUgKHRt
cCAhPSBOVUxMKQorICAgIHsKKyAgICAgIFhkZ01pbWVNYWdpY01hdGNobGV0ICptYXRjaGxldDsK
KworICAgICAgbWF0Y2hsZXQgPSB0bXA7CisgICAgICB0bXAgPSB0bXAtPm5leHQ7CisgICAgICBt
YXRjaGxldC0+bmV4dCA9IG5ld19saXN0OworICAgICAgbmV3X2xpc3QgPSBtYXRjaGxldDsKKyAg
ICB9CisKKyAgcmV0dXJuIG5ld19saXN0OworCit9CisKK3N0YXRpYyB2b2lkCitfeGRnX21pbWVf
bWFnaWNfcmVhZF9tYWdpY19maWxlIChYZGdNaW1lTWFnaWMgKm1pbWVfbWFnaWMsCisJCQkJIEZJ
TEUgICAgICAgICAqbWFnaWNfZmlsZSkKK3sKKyAgWGRnTWltZU1hZ2ljU3RhdGUgc3RhdGU7Cisg
IFhkZ01pbWVNYWdpY01hdGNoICptYXRjaCA9IE5VTEw7IC8qIFF1aWV0IGNvbXBpbGVyICovCisK
KyAgc3RhdGUgPSBYREdfTUlNRV9NQUdJQ19TRUNUSU9OOworCisgIHdoaWxlIChzdGF0ZSAhPSBY
REdfTUlNRV9NQUdJQ19FT0YpCisgICAgeworICAgICAgc3dpdGNoIChzdGF0ZSkKKwl7CisJY2Fz
ZSBYREdfTUlNRV9NQUdJQ19TRUNUSU9OOgorCSAgbWF0Y2ggPSBfeGRnX21pbWVfbWFnaWNfbWF0
Y2hfbmV3ICgpOworCSAgc3RhdGUgPSBfeGRnX21pbWVfbWFnaWNfcGFyc2VfaGVhZGVyIChtYWdp
Y19maWxlLCBtYXRjaCk7CisJICBpZiAoc3RhdGUgPT0gWERHX01JTUVfTUFHSUNfRU9GIHx8IHN0
YXRlID09IFhER19NSU1FX01BR0lDX0VSUk9SKQorCSAgICBfeGRnX21pbWVfbWFnaWNfbWF0Y2hf
ZnJlZSAobWF0Y2gpOworCSAgYnJlYWs7CisJY2FzZSBYREdfTUlNRV9NQUdJQ19NQUdJQzoKKwkg
IHN0YXRlID0gX3hkZ19taW1lX21hZ2ljX3BhcnNlX21hZ2ljX2xpbmUgKG1hZ2ljX2ZpbGUsIG1h
dGNoKTsKKwkgIGlmIChzdGF0ZSA9PSBYREdfTUlNRV9NQUdJQ19TRUNUSU9OIHx8CisJICAgICAg
KHN0YXRlID09IFhER19NSU1FX01BR0lDX0VPRiAmJiBtYXRjaC0+bWltZV90eXBlKSkKKwkgICAg
eworCSAgICAgIG1hdGNoLT5tYXRjaGxldCA9IF94ZGdfbWltZV9tYWdpY19tYXRjaGxldF9taXJy
b3IgKG1hdGNoLT5tYXRjaGxldCk7CisJICAgICAgX3hkZ19taW1lX21hZ2ljX2luc2VydF9tYXRj
aCAobWltZV9tYWdpYywgbWF0Y2gpOworCSAgICB9CisJICBlbHNlIGlmIChzdGF0ZSA9PSBYREdf
TUlNRV9NQUdJQ19FT0YgfHwgc3RhdGUgPT0gWERHX01JTUVfTUFHSUNfRVJST1IpCisJICAgIF94
ZGdfbWltZV9tYWdpY19tYXRjaF9mcmVlIChtYXRjaCk7CisJICBicmVhazsKKwljYXNlIFhER19N
SU1FX01BR0lDX0VSUk9SOgorCSAgc3RhdGUgPSBfeGRnX21pbWVfbWFnaWNfcGFyc2VfZXJyb3Ig
KG1hZ2ljX2ZpbGUpOworCSAgYnJlYWs7CisJY2FzZSBYREdfTUlNRV9NQUdJQ19FT0Y6CisJZGVm
YXVsdDoKKwkgIC8qIE1ha2UgdGhlIGNvbXBpbGVyIGhhcHB5ICovCisJICBhc3NlcnQgKDApOwor
CX0KKyAgICB9CisgIF94ZGdfbWltZV91cGRhdGVfbWltZV9tYWdpY19leHRlbnRzIChtaW1lX21h
Z2ljKTsKK30KKwordm9pZAorX3hkZ19taW1lX21hZ2ljX3JlYWRfZnJvbV9maWxlIChYZGdNaW1l
TWFnaWMgKm1pbWVfbWFnaWMsCisJCQkJY29uc3QgY2hhciAgICpmaWxlX25hbWUpCit7CisgIEZJ
TEUgKm1hZ2ljX2ZpbGU7CisgIGNoYXIgaGVhZGVyWzEyXTsKKworICBtYWdpY19maWxlID0gZm9w
ZW4gKGZpbGVfbmFtZSwgInIiKTsKKworICBpZiAobWFnaWNfZmlsZSA9PSBOVUxMKQorICAgIHJl
dHVybjsKKworICBpZiAoZnJlYWQgKGhlYWRlciwgMSwgMTIsIG1hZ2ljX2ZpbGUpID09IDEyKQor
ICAgIHsKKyAgICAgIGlmIChtZW1jbXAgKCJNSU1FLU1hZ2ljXDBcbiIsIGhlYWRlciwgMTIpID09
IDApCisgICAgICAgIF94ZGdfbWltZV9tYWdpY19yZWFkX21hZ2ljX2ZpbGUgKG1pbWVfbWFnaWMs
IG1hZ2ljX2ZpbGUpOworICAgIH0KKworICBmY2xvc2UgKG1hZ2ljX2ZpbGUpOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9zcmMveGRnbWltZW1hZ2ljLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS94ZGdtaW1lL3NyYy94ZGdtaW1lbWFnaWMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzVjODAzOWM4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS94ZGdtaW1lL3NyYy94ZGdtaW1lbWFnaWMuaApAQCAtMCwwICsxLDU3
IEBACisvKiAtKi0gbW9kZTogQzsgYy1maWxlLXN0eWxlOiAiZ251IiAtKi0gKi8KKy8qIHhkZ21p
bWVtYWdpYy5oOiBQcml2YXRlIGZpbGUuICBEYXRhc3RydWN0dXJlIGZvciBzdG9yaW5nIHRoZSBt
YWdpYyBmaWxlcy4KKyAqCisgKiBNb3JlIGluZm8gY2FuIGJlIGZvdW5kIGF0IGh0dHA6Ly93d3cu
ZnJlZWRlc2t0b3Aub3JnL3N0YW5kYXJkcy8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgIFJl
ZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAgSm9uYXRoYW4gQmxhbmRmb3JkIDxq
cmJAYWx1bS5taXQuZWR1PgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBY2FkZW1pYyBGcmVl
IExpY2Vuc2UgdmVyc2lvbiAyLjAKKyAqIE9yIHVuZGVyIHRoZSBmb2xsb3dpbmcgdGVybXM6Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLgkgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjEx
MS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX1hER19NSU1FX01BR0lDX0hfXworI2RlZmlu
ZSBfX1hER19NSU1FX01BR0lDX0hfXworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSAi
eGRnbWltZS5oIgordHlwZWRlZiBzdHJ1Y3QgWGRnTWltZU1hZ2ljIFhkZ01pbWVNYWdpYzsKKwor
I2lmZGVmIFhER19QUkVGSVgKKyNkZWZpbmUgX3hkZ19taW1lX2dsb2JfcmVhZF9mcm9tX2ZpbGUg
ICAgICAgICAgICAgWERHX1JFU0VSVkVEX0VOVFJZKGdsb2JfcmVhZF9mcm9tX2ZpbGUpCisjZGVm
aW5lIF94ZGdfbWltZV9tYWdpY19uZXcgICAgICAgICAgICAgICAgICAgICAgIFhER19SRVNFUlZF
RF9FTlRSWShtYWdpY19uZXcpCisjZGVmaW5lIF94ZGdfbWltZV9tYWdpY19yZWFkX2Zyb21fZmls
ZSAgICAgICAgICAgIFhER19SRVNFUlZFRF9FTlRSWShtYWdpY19yZWFkX2Zyb21fZmlsZSkKKyNk
ZWZpbmUgX3hkZ19taW1lX21hZ2ljX2ZyZWUgICAgICAgICAgICAgICAgICAgICAgWERHX1JFU0VS
VkVEX0VOVFJZKG1hZ2ljX2ZyZWUpCisjZGVmaW5lIF94ZGdfbWltZV9tYWdpY19nZXRfYnVmZmVy
X2V4dGVudHMgICAgICAgIFhER19SRVNFUlZFRF9FTlRSWShtYWdpY19nZXRfYnVmZmVyX2V4dGVu
dHMpCisjZGVmaW5lIF94ZGdfbWltZV9tYWdpY19sb29rdXBfZGF0YSAgICAgICAgICAgICAgIFhE
R19SRVNFUlZFRF9FTlRSWShtYWdpY19sb29rdXBfZGF0YSkKKyNlbmRpZgorCisKK1hkZ01pbWVN
YWdpYyAqX3hkZ19taW1lX21hZ2ljX25ldyAgICAgICAgICAgICAgICAodm9pZCk7Cit2b2lkICAg
ICAgICAgIF94ZGdfbWltZV9tYWdpY19yZWFkX2Zyb21fZmlsZSAgICAgKFhkZ01pbWVNYWdpYyAq
bWltZV9tYWdpYywKKwkJCQkJCSAgY29uc3QgY2hhciAgICpmaWxlX25hbWUpOwordm9pZCAgICAg
ICAgICBfeGRnX21pbWVfbWFnaWNfZnJlZSAgICAgICAgICAgICAgIChYZGdNaW1lTWFnaWMgKm1p
bWVfbWFnaWMpOworaW50ICAgICAgICAgICBfeGRnX21pbWVfbWFnaWNfZ2V0X2J1ZmZlcl9leHRl
bnRzIChYZGdNaW1lTWFnaWMgKm1pbWVfbWFnaWMpOworY29uc3QgY2hhciAgICpfeGRnX21pbWVf
bWFnaWNfbG9va3VwX2RhdGEgICAgICAgIChYZGdNaW1lTWFnaWMgKm1pbWVfbWFnaWMsCisJCQkJ
CQkgIGNvbnN0IHZvaWQgICAqZGF0YSwKKwkJCQkJCSAgc2l6ZV90ICAgICAgICBsZW4sCisJCQkJ
CQkgIGludCAgICAgICAgICAqcmVzdWx0X3ByaW8sCisJCQkJCQkgIGNvbnN0IGNoYXIgICAqbWlt
ZV90eXBlc1tdLAorCQkJCQkJICBpbnQgICAgICAgICAgIG5fbWltZV90eXBlcyk7CisKKyNlbmRp
ZiAvKiBfX1hER19NSU1FX01BR0lDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkveGRnbWltZS9zcmMveGRnbWltZXBhcmVudC5jIGIvU291cmNlL1RoaXJkUGFydHkveGRnbWlt
ZS9zcmMveGRnbWltZXBhcmVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi5kMzllMzUyZjJhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L3hk
Z21pbWUvc3JjL3hkZ21pbWVwYXJlbnQuYwpAQCAtMCwwICsxLDIxOSBAQAorLyogLSotIG1vZGU6
IEM7IGMtZmlsZS1zdHlsZTogImdudSIgLSotICovCisvKiB4ZGdtaW1lYWxpYXMuYzogUHJpdmF0
ZSBmaWxlLiAgRGF0YXN0cnVjdHVyZSBmb3Igc3RvcmluZyB0aGUgaGllcmFyY2h5LgorICoKKyAq
IE1vcmUgaW5mbyBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc3Rh
bmRhcmRzLworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCAgUmVkIEhhdCwgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDA0ICBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4KKyAq
CisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIHZlcnNpb24gMi4w
CisgKiBPciB1bmRlciB0aGUgZm9sbG93aW5nIHRlcm1zOgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUgR05VCisg
KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisK
KyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY21ha2Vjb25maWcuaCIKKyNlbmRpZgor
CisjaW5jbHVkZSAieGRnbWltZXBhcmVudC5oIgorI2luY2x1ZGUgInhkZ21pbWVpbnQuaCIKKyNp
bmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGFzc2VydC5o
PgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZubWF0Y2guaD4KKworI2lmbmRlZglG
QUxTRQorI2RlZmluZQlGQUxTRQkoMCkKKyNlbmRpZgorCisjaWZuZGVmCVRSVUUKKyNkZWZpbmUJ
VFJVRQkoIUZBTFNFKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IFhkZ01pbWVQYXJlbnRzIFhk
Z01pbWVQYXJlbnRzOworCitzdHJ1Y3QgWGRnTWltZVBhcmVudHMKK3sKKyAgY2hhciAqbWltZTsK
KyAgY2hhciAqKnBhcmVudHM7CisgIGludCBuX3BhcmVudHM7Cit9OworCitzdHJ1Y3QgWGRnUGFy
ZW50TGlzdAoreworICBzdHJ1Y3QgWGRnTWltZVBhcmVudHMgKnBhcmVudHM7CisgIGludCBuX21p
bWVzOworfTsKKworWGRnUGFyZW50TGlzdCAqCitfeGRnX21pbWVfcGFyZW50X2xpc3RfbmV3ICh2
b2lkKQoreworICBYZGdQYXJlbnRMaXN0ICpsaXN0OworCisgIGxpc3QgPSBtYWxsb2MgKHNpemVv
ZiAoWGRnUGFyZW50TGlzdCkpOworCisgIGxpc3QtPnBhcmVudHMgPSBOVUxMOworICBsaXN0LT5u
X21pbWVzID0gMDsKKworICByZXR1cm4gbGlzdDsKK30KKwordm9pZCAgICAgICAgIAorX3hkZ19t
aW1lX3BhcmVudF9saXN0X2ZyZWUgKFhkZ1BhcmVudExpc3QgKmxpc3QpCit7CisgIGludCBpOwor
ICBjaGFyICoqcDsKKworICBpZiAobGlzdC0+cGFyZW50cykKKyAgICB7CisgICAgICBmb3IgKGkg
PSAwOyBpIDwgbGlzdC0+bl9taW1lczsgaSsrKQorCXsKKwkgIGZvciAocCA9IGxpc3QtPnBhcmVu
dHNbaV0ucGFyZW50czsgKnA7IHArKykKKwkgICAgZnJlZSAoKnApOworCisJICBmcmVlIChsaXN0
LT5wYXJlbnRzW2ldLnBhcmVudHMpOworCSAgZnJlZSAobGlzdC0+cGFyZW50c1tpXS5taW1lKTsK
Kwl9CisgICAgICBmcmVlIChsaXN0LT5wYXJlbnRzKTsKKyAgICB9CisgIGZyZWUgKGxpc3QpOwor
fQorCitzdGF0aWMgaW50CitwYXJlbnRfZW50cnlfY21wIChjb25zdCB2b2lkICp2MSwgY29uc3Qg
dm9pZCAqdjIpCit7CisgIHJldHVybiBzdHJjbXAgKCgoWGRnTWltZVBhcmVudHMgKil2MSktPm1p
bWUsICgoWGRnTWltZVBhcmVudHMgKil2MiktPm1pbWUpOworfQorCitjb25zdCBjaGFyICoqCitf
eGRnX21pbWVfcGFyZW50X2xpc3RfbG9va3VwIChYZGdQYXJlbnRMaXN0ICpsaXN0LAorCQkJICAg
ICAgY29uc3QgY2hhciAgICAqbWltZSkKK3sKKyAgWGRnTWltZVBhcmVudHMgKmVudHJ5OworICBY
ZGdNaW1lUGFyZW50cyBrZXk7CisKKyAgaWYgKGxpc3QtPm5fbWltZXMgPiAwKQorICAgIHsKKyAg
ICAgIGtleS5taW1lID0gKGNoYXIgKiltaW1lOworICAgICAga2V5LnBhcmVudHMgPSBOVUxMOwor
CisgICAgICBlbnRyeSA9IGJzZWFyY2ggKCZrZXksIGxpc3QtPnBhcmVudHMsIGxpc3QtPm5fbWlt
ZXMsCisJCSAgICAgICBzaXplb2YgKFhkZ01pbWVQYXJlbnRzKSwgJnBhcmVudF9lbnRyeV9jbXAp
OworICAgICAgaWYgKGVudHJ5KQorICAgICAgICByZXR1cm4gKGNvbnN0IGNoYXIgKiopZW50cnkt
PnBhcmVudHM7CisgICAgfQorCisgIHJldHVybiBOVUxMOworfQorCit2b2lkCitfeGRnX21pbWVf
cGFyZW50X3JlYWRfZnJvbV9maWxlIChYZGdQYXJlbnRMaXN0ICpsaXN0LAorCQkJCSBjb25zdCBj
aGFyICAgICpmaWxlX25hbWUpCit7CisgIEZJTEUgKmZpbGU7CisgIGNoYXIgbGluZVsyNTVdOwor
ICBpbnQgaSwgYWxsb2M7CisgIFhkZ01pbWVQYXJlbnRzICplbnRyeTsKKworICBmaWxlID0gZm9w
ZW4gKGZpbGVfbmFtZSwgInIiKTsKKworICBpZiAoZmlsZSA9PSBOVUxMKQorICAgIHJldHVybjsK
KworICAvKiBGSVhNRTogTm90IFVURi04IHNhZmUuICBEb2Vzbid0IHdvcmsgaWYgbGluZXMgYXJl
IGdyZWF0ZXIgdGhhbiAyNTUgY2hhcnMuCisgICAqIEJsYWggKi8KKyAgYWxsb2MgPSBsaXN0LT5u
X21pbWVzICsgMTY7CisgIGxpc3QtPnBhcmVudHMgPSByZWFsbG9jIChsaXN0LT5wYXJlbnRzLCBh
bGxvYyAqIHNpemVvZiAoWGRnTWltZVBhcmVudHMpKTsKKyAgd2hpbGUgKGZnZXRzIChsaW5lLCAy
NTUsIGZpbGUpICE9IE5VTEwpCisgICAgeworICAgICAgY2hhciAqc2VwOworICAgICAgaWYgKGxp
bmVbMF0gPT0gJyMnKQorCWNvbnRpbnVlOworCisgICAgICBzZXAgPSBzdHJjaHIgKGxpbmUsICcg
Jyk7CisgICAgICBpZiAoc2VwID09IE5VTEwpCisJY29udGludWU7CisgICAgICAqKHNlcCsrKSA9
ICdcMDAwJzsKKyAgICAgIHNlcFtzdHJsZW4gKHNlcCkgLTFdID0gJ1wwMDAnOworICAgICAgZW50
cnkgPSBOVUxMOworICAgICAgZm9yIChpID0gMDsgaSA8IGxpc3QtPm5fbWltZXM7IGkrKykKKwl7
CisJICBpZiAoc3RyY21wIChsaXN0LT5wYXJlbnRzW2ldLm1pbWUsIGxpbmUpID09IDApCisJICAg
IHsKKwkgICAgICBlbnRyeSA9ICYobGlzdC0+cGFyZW50c1tpXSk7CisJICAgICAgYnJlYWs7CisJ
ICAgIH0KKwl9CisgICAgICAKKyAgICAgIGlmICghZW50cnkpCisJeworCSAgaWYgKGxpc3QtPm5f
bWltZXMgPT0gYWxsb2MpCisJICAgIHsKKwkgICAgICBhbGxvYyA8PD0gMTsKKwkgICAgICBsaXN0
LT5wYXJlbnRzID0gcmVhbGxvYyAobGlzdC0+cGFyZW50cywgCisJCQkJICAgICAgIGFsbG9jICog
c2l6ZW9mIChYZGdNaW1lUGFyZW50cykpOworCSAgICB9CisJICBsaXN0LT5wYXJlbnRzW2xpc3Qt
Pm5fbWltZXNdLm1pbWUgPSBzdHJkdXAgKGxpbmUpOworCSAgbGlzdC0+cGFyZW50c1tsaXN0LT5u
X21pbWVzXS5wYXJlbnRzID0gTlVMTDsKKwkgIGVudHJ5ID0gJihsaXN0LT5wYXJlbnRzW2xpc3Qt
Pm5fbWltZXNdKTsKKwkgIGxpc3QtPm5fbWltZXMrKzsKKwl9CisKKyAgICAgIGlmICghZW50cnkt
PnBhcmVudHMpCisJeworCSAgZW50cnktPm5fcGFyZW50cyA9IDE7CisJICBlbnRyeS0+cGFyZW50
cyA9IG1hbGxvYyAoKGVudHJ5LT5uX3BhcmVudHMgKyAxKSAqIHNpemVvZiAoY2hhciAqKSk7CisJ
fQorICAgICAgZWxzZQorCXsKKwkgIGVudHJ5LT5uX3BhcmVudHMgKz0gMTsKKwkgIGVudHJ5LT5w
YXJlbnRzID0gcmVhbGxvYyAoZW50cnktPnBhcmVudHMsIAorCQkJCSAgICAoZW50cnktPm5fcGFy
ZW50cyArIDIpICogc2l6ZW9mIChjaGFyICopKTsKKwl9CisgICAgICBlbnRyeS0+cGFyZW50c1tl
bnRyeS0+bl9wYXJlbnRzIC0gMV0gPSBzdHJkdXAgKHNlcCk7CisgICAgICBlbnRyeS0+cGFyZW50
c1tlbnRyeS0+bl9wYXJlbnRzXSA9IE5VTEw7CisgICAgfQorCisgIGxpc3QtPnBhcmVudHMgPSBy
ZWFsbG9jIChsaXN0LT5wYXJlbnRzLCAKKwkJCSAgIGxpc3QtPm5fbWltZXMgKiBzaXplb2YgKFhk
Z01pbWVQYXJlbnRzKSk7CisKKyAgZmNsb3NlIChmaWxlKTsgIAorICAKKyAgaWYgKGxpc3QtPm5f
bWltZXMgPiAxKQorICAgIHFzb3J0IChsaXN0LT5wYXJlbnRzLCBsaXN0LT5uX21pbWVzLCAKKyAg
ICAgICAgICAgc2l6ZW9mIChYZGdNaW1lUGFyZW50cyksICZwYXJlbnRfZW50cnlfY21wKTsKK30K
KworCit2b2lkICAgICAgICAgCitfeGRnX21pbWVfcGFyZW50X2xpc3RfZHVtcCAoWGRnUGFyZW50
TGlzdCAqbGlzdCkKK3sKKyAgaW50IGk7CisgIGNoYXIgKipwOworCisgIGlmIChsaXN0LT5wYXJl
bnRzKQorICAgIHsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0LT5uX21pbWVzOyBpKyspCisJ
eworCSAgZm9yIChwID0gbGlzdC0+cGFyZW50c1tpXS5wYXJlbnRzOyAqcDsgcCsrKQorCSAgICBw
cmludGYgKCIlcyAlc1xuIiwgbGlzdC0+cGFyZW50c1tpXS5taW1lLCAqcCk7CisJfQorICAgIH0K
K30KKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS94ZGdtaW1lL3NyYy94ZGdtaW1l
cGFyZW50LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS94ZGdtaW1lL3NyYy94ZGdtaW1lcGFyZW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI1NjRmNDEyN2Y1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkveGRnbWltZS9zcmMveGRnbWltZXBhcmVu
dC5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qIC0qLSBtb2RlOiBDOyBjLWZpbGUtc3R5bGU6ICJnbnUi
IC0qLSAqLworLyogeGRnbWltZXBhcmVudC5oOiBQcml2YXRlIGZpbGUuICBEYXRhc3RydWN0dXJl
IGZvciBzdG9yaW5nIHRoZSBoaWVyYXJjaHkuCisgKgorICogTW9yZSBpbmZvIGNhbiBiZSBmb3Vu
ZCBhdCBodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zdGFuZGFyZHMvCisgKgorICogQ29weXJp
Z2h0IChDKSAyMDA0ICBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMCAgTWF0dGhp
YXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhl
IEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDIuMAorICogT3IgdW5kZXIgdGhlIGZvbGxv
d2luZyB0ZXJtczoKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBC
b3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fWERHX01JTUVfUEFS
RU5UX0hfXworI2RlZmluZSBfX1hER19NSU1FX1BBUkVOVF9IX18KKworI2luY2x1ZGUgInhkZ21p
bWUuaCIKKwordHlwZWRlZiBzdHJ1Y3QgWGRnUGFyZW50TGlzdCBYZGdQYXJlbnRMaXN0OworCisj
aWZkZWYgWERHX1BSRUZJWAorI2RlZmluZSBfeGRnX21pbWVfcGFyZW50X3JlYWRfZnJvbV9maWxl
ICAgICAgICBYREdfUkVTRVJWRURfRU5UUlkocGFyZW50X3JlYWRfZnJvbV9maWxlKQorI2RlZmlu
ZSBfeGRnX21pbWVfcGFyZW50X2xpc3RfbmV3ICAgICAgICAgICAgICBYREdfUkVTRVJWRURfRU5U
UlkocGFyZW50X2xpc3RfbmV3KQorI2RlZmluZSBfeGRnX21pbWVfcGFyZW50X2xpc3RfZnJlZSAg
ICAgICAgICAgICBYREdfUkVTRVJWRURfRU5UUlkocGFyZW50X2xpc3RfZnJlZSkKKyNkZWZpbmUg
X3hkZ19taW1lX3BhcmVudF9saXN0X2xvb2t1cCAgICAgICAgICAgWERHX1JFU0VSVkVEX0VOVFJZ
KHBhcmVudF9saXN0X2xvb2t1cCkKKyNkZWZpbmUgX3hkZ19taW1lX3BhcmVudF9saXN0X2R1bXAg
ICAgICAgICAgICAgWERHX1JFU0VSVkVEX0VOVFJZKHBhcmVudF9saXN0X2R1bXApCisjZW5kaWYK
Kwordm9pZCAgICAgICAgICBfeGRnX21pbWVfcGFyZW50X3JlYWRfZnJvbV9maWxlIChYZGdQYXJl
bnRMaXN0ICpsaXN0LAorCQkJCQkgICAgICAgY29uc3QgY2hhciAgICAqZmlsZV9uYW1lKTsKK1hk
Z1BhcmVudExpc3QgKl94ZGdfbWltZV9wYXJlbnRfbGlzdF9uZXcgICAgICAgKHZvaWQpOwordm9p
ZCAgICAgICAgICAgX3hkZ19taW1lX3BhcmVudF9saXN0X2ZyZWUgICAgICAoWGRnUGFyZW50TGlz
dCAqbGlzdCk7Citjb25zdCBjaGFyICAgKipfeGRnX21pbWVfcGFyZW50X2xpc3RfbG9va3VwICAg
IChYZGdQYXJlbnRMaXN0ICpsaXN0LAorCQkJCQkJY29uc3QgY2hhciAgICAqbWltZSk7Cit2b2lk
ICAgICAgICAgICBfeGRnX21pbWVfcGFyZW50X2xpc3RfZHVtcCAgICAgIChYZGdQYXJlbnRMaXN0
ICpsaXN0KTsKKworI2VuZGlmIC8qIF9fWERHX01JTUVfUEFSRU5UX0hfXyAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAppbmRleCA2ZmY0YWNhZWM3NC4uNjZlNzAyOGQ3YjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CkBAIC0zNDkzLDYgKzM0OTMsMTEgQEAgaWYgKFVTRV9XT0ZGMikKICAgbGlzdChBUFBFTkQg
V2ViQ29yZV9MSUJSQVJJRVMgd29mZjIpCiBlbmRpZiAoKQogCitpZiAoVVNFX1hER01JTUUpCisg
ICAgbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTICIke1RISVJEUEFSVFlf
RElSfS94ZGdtaW1lL3NyYyIpCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMgeGRn
bWltZSkKK2VuZGlmICgpCisKIHNldChXZWJDb3JlVGVzdFN1cHBvcnRfSU5DTFVERV9ESVJFQ1RP
UklFUwogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tb2NrIgogICAgICIke1dFQkNPUkVf
RElSfS90ZXN0aW5nIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDIwZmIwZTExNDZkLi5jYjZjYjk4ZjgxMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE3LTAzLTIzICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQgTUlNRVR5cGVSZWdp
c3RyeSBpbXBsZW1lbnRhdGlvbiB1c2luZyB4ZGdtaW1lIGFuZCByZW1vdmUgdGhlIEdUSysgb25l
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAwMDEK
KworICAgICAgICBSZXZpZXdlZCBieSBNaWNoYWVsIENhdGFuemFyby4KKworICAgICAgICBUaGUg
WERHIGltcGxlbWVudGF0aW9uIGNvdWxkIGJlIHVzZWQgYnkgYW55IHBvcnQgd2hlcmUgc2hhcmVk
LW1pbWUtaW5mbyBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUuIEl0IGFsc28KKyAgICAgICAg
aW1wcm92ZXMgdGhlIGN1cnJlbnQgR1RLKyBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzIGJhc2VkIG9u
IGEgdmVyeSBzbWFsbCBtYXAgb2YgbWltZSB0eXBlcyBhbmQgZXh0ZW5zaW9ucy4KKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAg
ICAqIHBsYXRmb3JtL3hkZy9NSU1FVHlwZVJlZ2lzdHJ5WGRnLmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9NSU1FVHlwZVJlZ2lzdHJ5R3RrLmNwcC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmdldFByZWZlcnJlZEV4dGVuc2lv
bkZvck1JTUVUeXBlKToKKwogMjAxNy0wMy0yMiAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBs
ZS5jb20+CiAKICAgICAgICAgTGV0IE1lbW9yeVByZXNzdXJlSGFuZGxlciB0cmFjayB3aGV0aGVy
IHRoZSBwcm9jZXNzIGlzIGFjdGl2ZSBvciBpbmFjdGl2ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21h
a2UKaW5kZXggNzhjYTM5OWY0ZGUuLjY3YjkyYzZiOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5j
bWFrZQpAQCAtMTQxLDcgKzE0MSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAg
IHBsYXRmb3JtL2d0ay9EcmFnRGF0YUd0ay5jcHAKICAgICBwbGF0Zm9ybS9ndGsvRXJyb3JzR3Rr
LmNwcAogICAgIHBsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRTdHJpbmdzR3RrLmNwcAotICAgIHBsYXRm
b3JtL2d0ay9NSU1FVHlwZVJlZ2lzdHJ5R3RrLmNwcAogICAgIHBsYXRmb3JtL2d0ay9QYXN0ZWJv
YXJkR3RrLmNwcAogICAgIHBsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5jcHAKICAgICBw
bGF0Zm9ybS9ndGsvU2VsZWN0aW9uRGF0YS5jcHAKQEAgLTE3OSw2ICsxNzgsOCBAQCBsaXN0KEFQ
UEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS90ZXh0L2h5cGhlbi9IeXBoZW5hdGlv
bkxpYkh5cGhlbi5jcHAKIAogICAgIHBsYXRmb3JtL3VuaXgvTG9nZ2luZ1VuaXguY3BwCisKKyAg
ICBwbGF0Zm9ybS94ZGcvTUlNRVR5cGVSZWdpc3RyeVhkZy5jcHAKICkKIAogbGlzdChBUFBFTkQg
V2ViQ29yZVBsYXRmb3JtR1RLX1NPVVJDRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9NSU1FVHlwZVJlZ2lzdHJ5R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3hkZy9NSU1FVHlwZVJlZ2lzdHJ5WGRnLmNwcApzaW1pbGFyaXR5IGluZGV4IDU1JQpyZW5h
bWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTUlNRVR5cGVSZWdpc3RyeUd0ay5j
cHAKcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hkZy9NSU1FVHlwZVJlZ2lzdHJ5
WGRnLmNwcAppbmRleCBiMjdiZTEwMmU5Yi4uNzNkMjM1NzA5MjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9NSU1FVHlwZVJlZ2lzdHJ5R3RrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS94ZGcvTUlNRVR5cGVSZWdpc3RyeVhkZy5jcHAKQEAgLTEsNyAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDQ0ICsyNiwyMSBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKIAotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1zdHJ1Y3QgRXh0ZW5zaW9uTWFwIHsKLSAgICBjb25zdCBjaGFyKiBleHRlbnNpb247
Ci0gICAgY29uc3QgY2hhciogbWltZVR5cGU7Ci19OworI2RlZmluZSBYREdfUFJFRklYIF93a194
ZGcKKyNpbmNsdWRlICJ4ZGdtaW1lLmgiCiAKLXN0YXRpYyBjb25zdCBFeHRlbnNpb25NYXAgZXh0
ZW5zaW9uTWFwIFtdID0gewotICAgIHsgImJtcCIsICJpbWFnZS9ibXAiIH0sCi0gICAgeyAiY3Nz
IiwgInRleHQvY3NzIiB9LAotICAgIHsgImdpZiIsICJpbWFnZS9naWYiIH0sCi0gICAgeyAiaHRt
bCIsICJ0ZXh0L2h0bWwiIH0sCi0gICAgeyAiaHRtIiwgInRleHQvaHRtbCIgfSwKLSAgICB7ICJp
Y28iLCAiaW1hZ2UveC1pY29uIiB9LAotICAgIHsgImpwZWciLCAiaW1hZ2UvanBlZyIgfSwKLSAg
ICB7ICJqcGciLCAiaW1hZ2UvanBlZyIgfSwKLSAgICB7ICJqcyIsICJhcHBsaWNhdGlvbi94LWph
dmFzY3JpcHQiIH0sCi0gICAgeyAicGRmIiwgImFwcGxpY2F0aW9uL3BkZiIgfSwKLSAgICB7ICJw
bmciLCAiaW1hZ2UvcG5nIiB9LAotICAgIHsgInJzcyIsICJhcHBsaWNhdGlvbi9yc3MreG1sIiB9
LAotICAgIHsgInN2ZyIsICJpbWFnZS9zdmcreG1sIiB9LAotICAgIHsgInN3ZiIsICJhcHBsaWNh
dGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIgfSwKLSAgICB7ICJ0ZXh0IiwgInRleHQvcGxhaW4iIH0s
Ci0gICAgeyAidHh0IiwgInRleHQvcGxhaW4iIH0sCi0gICAgeyAieGJtIiwgImltYWdlL3gteGJp
dG1hcCIgfSwKLSAgICB7ICJ4bWwiLCAidGV4dC94bWwiIH0sCi0gICAgeyAieHNsIiwgInRleHQv
eHNsIiB9LAotICAgIHsgInhodG1sIiwgImFwcGxpY2F0aW9uL3hodG1sK3htbCIgfSwKLSAgICB7
ICJ3bWwiLCAidGV4dC92bmQud2FwLndtbCIgfSwKLSAgICB7ICJ3bWxjIiwgImFwcGxpY2F0aW9u
L3ZuZC53YXAud21sYyIgfSwKLX07CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFN0cmluZyBNSU1F
VHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVu
c2lvbikKIHsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogZXh0ZW5zaW9uTWFwKSB7Ci0gICAgICAg
IGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGV4dGVuc2lvbiwgZW50cnkuZXh0ZW5zaW9uKSkK
LSAgICAgICAgICAgIHJldHVybiBlbnRyeS5taW1lVHlwZTsKLSAgICB9CisgICAgaWYgKGV4dGVu
c2lvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIC8vIEJ1aWxk
IGFueSBmaWxlbmFtZSB3aXRoIHRoZSBnaXZlbiBleHRlbnNpb24uCisgICAgU3RyaW5nIGZpbGVu
YW1lID0gImEuIiArIGV4dGVuc2lvbjsKKyAgICBpZiAoY29uc3QgY2hhciogbWltZVR5cGUgPSB4
ZGdfbWltZV9nZXRfbWltZV90eXBlX2Zyb21fZmlsZV9uYW1lKGZpbGVuYW1lLnV0ZjgoKS5kYXRh
KCkpKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChtaW1lVHlwZSk7CisKICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiB9CiAKQEAgLTc2LDExICs1MSwxNyBAQCBib29sIE1JTUVUeXBlUmVn
aXN0cnk6OmlzQXBwbGljYXRpb25QbHVnaW5NSU1FVHlwZShjb25zdCBTdHJpbmcmKQogCiBTdHJp
bmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogZXh0ZW5zaW9u
TWFwKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCBlbnRy
eS5taW1lVHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gZW50cnkuZXh0ZW5zaW9uOworICAgIGlm
IChtaW1lVHlwZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIFN0
cmluZyByZXR1cm5WYWx1ZTsKKyAgICBjaGFyKiBleHRlbnNpb247CisgICAgaWYgKHhkZ19taW1l
X2dldF9zaW1wbGVfZ2xvYnMobWltZVR5cGUudXRmOCgpLmRhdGEoKSwgJmV4dGVuc2lvbiwgMSkp
IHsKKyAgICAgICAgaWYgKGV4dGVuc2lvblswXSA9PSAnLicgJiYgZXh0ZW5zaW9uWzFdKQorICAg
ICAgICAgICAgcmV0dXJuVmFsdWUgPSBTdHJpbmc6OmZyb21VVEY4KGV4dGVuc2lvbiArIDEpOwor
ICAgICAgICBmcmVlKGV4dGVuc2lvbik7CiAgICAgfQotICAgIHJldHVybiBlbXB0eVN0cmluZygp
OworICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2Nt
YWtlL09wdGlvbnNHVEsuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQppbmRl
eCA2NjZhZjUxODE0ZS4uNTFjMDE3YjdhODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRp
b25zR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCkBAIC01NSw2
ICs1NSw3IEBAIGZpbmRfcGFja2FnZShPcGVuR0xFUzIpCiBXRUJLSVRfT1BUSU9OX0JFR0lOKCkK
IAogc2V0KFVTRV9XT0ZGMiBPTikKK3NldChVU0VfWERHTUlNRSBPTikKIAogIyBGb3Igb2xkIHZl
cnNpb25zIG9mIEhhcmZCdXp6IHRoYXQgZG8gbm90IGV4cG9zZSBhbiBBUEkgZm9yIHRoZSBPcGVu
VHlwZSBNQVRICiAjIHRhYmxlLCB3ZSBlbmFibGUgb3VyIG93biBjb2RlIHRvIHBhcnNlIHRoYXQg
dGFibGUuCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggZDU1NWNkMzRlYWIuLmYxNzRjZGRkM2U1IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTctMDMtMjMgIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEFk
ZCBNSU1FVHlwZVJlZ2lzdHJ5IGltcGxlbWVudGF0aW9uIHVzaW5nIHhkZ21pbWUgYW5kIHJlbW92
ZSB0aGUgR1RLKyBvbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3MDAwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE1pY2hhZWwgQ2F0YW56YXJvLgor
CisgICAgICAgIElnbm9yZSBzdHlsZSBvZiB4ZGdtaW1lIHNvdXJjZXMuCisKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvY2hlY2tzdHlsZS5weToKKwogMjAxNy0wMy0yMiAg
QW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBBZGQgYW4g
b3B0aW9uIHRvIGV4Y2x1ZGUgb3ZlcmZsb3cgd2hlbiBzbmFwc2hvdHRpbmcgYSBXS1dlYlByb2Nl
c3NQbHVnSW5Ob2RlSGFuZGxlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2NoZWNrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkK
aW5kZXggZTQyMmZjYWI0MTYuLmZkODY3OTgwY2MzIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9jaGVja2VyLnB5CkBAIC0yMjQsNyArMjI0LDggQEAgX1BBVEhfUlVMRVNfU1BFQ0lGSUVS
ID0gWwogICAgIChbb3MucGF0aC5qb2luKCd3ZWJraXRweScsICd0aGlyZHBhcnR5JyksCiAgICAg
ICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdUaGlyZFBhcnR5JywgJ0FOR0xFJyksCiAgICAgICBv
cy5wYXRoLmpvaW4oJ1NvdXJjZScsICdUaGlyZFBhcnR5JywgJ2Jyb3RsaScpLAotICAgICAgb3Mu
cGF0aC5qb2luKCdTb3VyY2UnLCAnVGhpcmRQYXJ0eScsICd3b2ZmMicpXSwKKyAgICAgIG9zLnBh
dGguam9pbignU291cmNlJywgJ1RoaXJkUGFydHknLCAnd29mZjInKSwKKyAgICAgIG9zLnBhdGgu
am9pbignU291cmNlJywgJ1RoaXJkUGFydHknLCAneGRnbWltZScpXSwKICAgICAgWyItIiwKICAg
ICAgICIrcGVwOC9XMTkxIiwgICMgVGFicwogICAgICAgIitwZXA4L1cyOTEiLCAgIyBUcmFpbGlu
ZyB3aGl0ZSBzcGFjZQo=
</data>
<flag name="commit-queue"
          id="326648"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>