<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>26309</bug_id>
          
          <creation_ts>2011-09-15 12:27:20 +0400</creation_ts>
          <short_desc>Просьба собрать новую версию</short_desc>
          <delta_ts>2019-03-25 09:11:56 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>dhcp-server</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Moskalenko">mav</reporter>
          <assigned_to name="Mikhail Efremov">sem</assigned_to>
          <cc>mike</cc>
    
    <cc>sem</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>125308</commentid>
    <comment_count>0</comment_count>
      <attachid>5108</attachid>
    <who name="Alex Moskalenko">mav</who>
    <bug_when>2011-09-15 12:27:20 +0400</bug_when>
    <thetext>Created attachment 5108
Адаптированный chroot/droppriv патч от 3.0

Хотелось бы увидеть dhcp 3.1 в сизифе из-за нескольких полезных параметров конфигурации, отсутствующих в 3.0. Также хотелось бы увидеть версию dhcpd 3.1 с поддержкой конфигурации в ldap. Во вложениях - адаптированные к 3.1-ESV-R3 chroot/droppriv патч от dhcpd 3.0.7 и dhcp-3.1-ldap патч с исправленной проблемой соединения с ldap-сервером и генерацией нескольких директив range в переделах пула.

На данный момент dhcpd с этими патчами работает, включая DHCP failover. Конфигурация читается из LDAP.

Просьба знающих людей посмотреть патчи (особенно dhcp-3.1-alt0.1.patch), и, по возможности, собрать эту версию в сизиф. Лучше, наверное, 2мя пакетами - с поддержкой LDAP и без оной.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125309</commentid>
    <comment_count>1</comment_count>
      <attachid>5109</attachid>
    <who name="Alex Moskalenko">mav</who>
    <bug_when>2011-09-15 12:28:56 +0400</bug_when>
    <thetext>Created attachment 5109
Согласование типов параметров/значений функций</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125310</commentid>
    <comment_count>2</comment_count>
      <attachid>5110</attachid>
    <who name="Alex Moskalenko">mav</who>
    <bug_when>2011-09-15 12:29:40 +0400</bug_when>
    <thetext>Created attachment 5110
Поддержка LDAP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125323</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2011-09-15 14:36:59 +0400</bug_when>
    <thetext>На всякий -- см. тж.:
http://lists.altlinux.org/pipermail/community/2004-March/thread.html#536556
http://lists.altlinux.org/pipermail/office-server/2009-June/000681.html
http://www.freesource.info/wiki/TZ/ServerIntegracii/DHCP

Мы однажды использовали связку DHCP+LDAP на довольно развесистой сети, отказались по причине каскадирования проблем (чуть что со slapd, и ложится не просто A&amp;A, а прямо базовый уровень).  Но тогда не было hdb backend, bdb был хрупким, а ldbm не позволял горячих бэкапов IIRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125325</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Moskalenko">mav</who>
    <bug_when>2011-09-15 14:57:22 +0400</bug_when>
    <thetext>(В ответ на комментарий №3)
&gt; Мы однажды использовали связку DHCP+LDAP на довольно развесистой сети,
&gt; отказались по причине каскадирования проблем (чуть что со slapd, и ложится не
&gt; просто A&amp;A, а прямо базовый уровень).  Но тогда не было hdb backend, bdb был
&gt; хрупким, а ldbm не позволял горячих бэкапов IIRC.

Я поэтому и предложил собрать 2 пакета - без ldap и c ldap. Чтобы не тащить libldap, libssl туда, где они не требуются.

PS По моим тестам, на сегодняшний день hdb достаточно стабилен (честно говоря, ни разу не было разрушения базы). В моем конкретном случае я использую 2 dhcpd с failover, читающие конфигурацию из собственных реплик дерева LDAP. А для работы при возможном падении slapd есть опция ldap-method static.

Вообще, ldap-патч использует далеко не все возможности, заложенные в dhcp.schema, например в части failover и связей между объектами схемы. Но хранить и администрировать конфигурацию в ldap вполне позволяет.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127370</commentid>
    <comment_count>5</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2011-12-03 04:12:37 +0400</bug_when>
    <thetext>(In reply to comment #0)
&gt; Created an attachment (id=5108) [details]
&gt; Адаптированный chroot/droppriv патч от 3.0
&gt; 
&gt; Хотелось бы увидеть dhcp 3.1 в сизифе из-за нескольких полезных параметров
&gt; конфигурации, отсутствующих в 3.0.

Интересно, почему вы остановили свой выбор именно на 3.1?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127373</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Moskalenko">mav</who>
    <bug_when>2011-12-03 12:31:45 +0400</bug_when>
    <thetext>(В ответ на комментарий №5)
&gt; Интересно, почему вы остановили свой выбор именно на 3.1?

Наверное, потому, что на него получилось наложить chroot и ldap патчи, и за ненадобностью DHCPv6, присутствующей в 4.x.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141877</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Moskalenko">mav</who>
    <bug_when>2013-07-29 14:20:16 +0400</bug_when>
    <thetext>Так как новая версия dhcpd уже в сизифе, а также уже содержит в себе патч для работы с ldap (включаемый опцией configure при сборке), хотел бы попросить все-таки собрать dhcpd с поддержкой ldap в сизиф (и p7?). Возможно, отдельным пакетом, возможно, с конфликтом на обычный dhcpd.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179846</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Moskalenko">mav</who>
    <bug_when>2019-03-25 09:11:44 +0300</bug_when>
    <thetext>Закрываю за давностью лет</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5108</attachid>
            <date>2011-09-15 12:27:20 +0400</date>
            <delta_ts>2011-09-15 12:27:20 +0400</delta_ts>
            <desc>Адаптированный chroot/droppriv патч от 3.0</desc>
            <filename>dhcp-3.1-alt0.patch</filename>
            <type>text/plain</type>
            <size>59006</size>
            <attacher name="Alex Moskalenko">mav</attacher>
            
              <data encoding="base64">IE1ha2VmaWxlICAgICAgICAgICAgICAgfCAgIDE0ICsrKy0tLQogTWFrZWZpbGUuY29uZiAgICAg
ICAgICB8ICAgIDIgKy0KIFJFQURNRSAgICAgICAgICAgICAgICAgfCAgIDE2ICsrKysrKwogY2xp
ZW50L01ha2VmaWxlLmRpc3QgICB8ICAgIDIgKy0KIGNsaWVudC9kaGNsaWVudC5jICAgICAgfCAg
IDMzICsrKysrKysrKy0tLS0KIGNsaWVudC9zY3JpcHRzL2xpbnV4ICAgfCAgIDUxICsrKysrKysr
KysrKystLS0tLS0tCiBjb21tb24vTWFrZWZpbGUuZGlzdCAgIHwgICAgNCArLQogY29tbW9uL2Jw
Zi5jICAgICAgICAgICB8ICAgIDIgKy0KIGNvbW1vbi9jb21hcGkuYyAgICAgICAgfCAgICAyICst
CiBjb21tb24vZG5zLmMgICAgICAgICAgIHwgICAgNCArLQogY29tbW9uL2Ryb3Byb290LmMgICAg
ICB8ICAxMjEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
CiBjb21tb24vaW5ldC5jICAgICAgICAgIHwgICAgMiArLQogY29tbW9uL2xwZi5jICAgICAgICAg
ICB8ICAgIDEgKwogY29tbW9uL3BhY2tldC5jICAgICAgICB8ICAgIDEgKwogY29tbW9uL3BhcnNl
LmMgICAgICAgICB8ICAgMzEgKysrKysrKysrKy0tCiBjb21tb24vcHJpbnQuYyAgICAgICAgIHwg
ICAyMyArKysrKy0tLS0KIGNvbW1vbi90cmVlLmMgICAgICAgICAgfCAgIDE4ICsrKystLS0tCiBj
b21tb24vdXBmLmMgICAgICAgICAgIHwgICAgMiArLQogZGhjcGN0bC9kaGNwY3RsLjMgICAgICB8
ICAgIDUgKy0KIGRoY3BjdGwvb21zaGVsbC5jICAgICAgfCAgICAyICstCiBkc3QvTWFrZWZpbGUu
ZGlzdCAgICAgIHwgICAgNCArLQogZHN0L2RzdF9hcGkuYyAgICAgICAgICB8ICAgMTAgKysrKy0K
IGRzdC9kc3Rfc3VwcG9ydC5jICAgICAgfCAgICA0ICstCiBkc3QvaG1hY19saW5rLmMgICAgICAg
IHwgICAgMiArLQogaW5jbHVkZXMvY2YvbGludXguaCAgICB8ICAgIDQgKy0KIGluY2x1ZGVzL2Ro
Y3BkLmggICAgICAgfCAgICAzICsKIG1pbmlyZXMvcmVzX21rdXBkYXRlLmMgfCAgICA4ICsrLS0K
IG1pbmlyZXMvcmVzX3F1ZXJ5LmMgICAgfCAgICAyICstCiBvbWFwaXAvZXJyd2Fybi5jICAgICAg
IHwgICA4MiArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogb21hcGlwL2lzY3ByaW50
LmMgICAgICB8ICAgMTggKysrKy0tLS0KIG9tYXBpcC9yZXN1bHQuYyAgICAgICAgfCAgICAyICst
CiByZWxheS9NYWtlZmlsZS5kaXN0ICAgIHwgICAgMiArLQogcmVsYXkvZGhjcmVsYXkuOCAgICAg
ICB8ICAgMjIgKysrKysrKystCiByZWxheS9kaGNyZWxheS5jICAgICAgIHwgICA0OSArKysrKysr
KysrKysrLS0tLS0tCiBzZXJ2ZXIvTWFrZWZpbGUuZGlzdCAgIHwgICAgMiArLQogc2VydmVyL2Nv
bmZwYXJzLmMgICAgICB8ICAgIDcgKystCiBzZXJ2ZXIvZGIuYyAgICAgICAgICAgIHwgICAgNCAr
LQogc2VydmVyL2RkbnMuYyAgICAgICAgICB8ICAgIDQgKy0KIHNlcnZlci9kaGNwLmMgICAgICAg
ICAgfCAgICA2ICsrLQogc2VydmVyL2RoY3BkLjggICAgICAgICB8ICAgMTkgKysrKysrKysKIHNl
cnZlci9kaGNwZC5jICAgICAgICAgfCAgIDgzICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t
LS0tCiBzZXJ2ZXIvZGhjcGQuY29uZi41ICAgIHwgICAyMSArKysrLS0tLS0KIHNlcnZlci9mYWls
b3Zlci5jICAgICAgfCAgIDEyICsrLS0KIHNlcnZlci9vbWFwaS5jICAgICAgICAgfCAgICAyICst
CiA0NCBmaWxlcyBjaGFuZ2VkLCA1MDYgaW5zZXJ0aW9ucygrKSwgMjAyIGRlbGV0aW9ucygtKQoK
ZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggNzg4NjdmOC4uM2JiYzhiOCAx
MDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTMzLDcgKzMzLDcgQEAgYWxs
OgogCSBpZiBbICEgLWQgd29yay4kJHN5c25hbWUgXTsgdGhlbiBcCiAJICAgZWNobyBObyBidWls
ZCBkaXJlY3RvcnkgZm9yICQkc3lzbmFtZSAtIHBsZWFzZSBydW4gLi9jb25maWd1cmUuOyBcCiAJ
ZWxzZSBcCi0JICAgKGNkIHdvcmsuJCRzeXNuYW1lOyBtYWtlIGFsbCk7IFwKKwkgICAkKE1BS0Up
IC1DIHdvcmsuJCRzeXNuYW1lIGFsbDsgXAogCWZpCiAKIGluc3RhbGw6CkBAIC00MSw3ICs0MSw3
IEBAIGluc3RhbGw6CiAJIGlmIFsgISAtZCB3b3JrLiQkc3lzbmFtZSBdOyB0aGVuIFwKIAkgICBl
Y2hvIE5vIGJ1aWxkIGRpcmVjdG9yeSBmb3IgJCRzeXNuYW1lIC0gcGxlYXNlIHJ1biAuL2NvbmZp
Z3VyZS47IFwKIAllbHNlIFwKLQkgICAoY2Qgd29yay4kJHN5c25hbWU7IG1ha2UgaW5zdGFsbCk7
IFwKKwkgICAkKE1BS0UpIC1DIHdvcmsuJCRzeXNuYW1lIGluc3RhbGw7IFwKIAlmaQogCiBkZXBl
bmQ6CkBAIC00OSw3ICs0OSw3IEBAIGRlcGVuZDoKIAkgaWYgWyAhIC1kIHdvcmsuJCRzeXNuYW1l
IF07IHRoZW4gXAogCSAgIGVjaG8gTm8gYnVpbGQgZGlyZWN0b3J5IGZvciAkJHN5c25hbWUgLSBw
bGVhc2UgcnVuIC4vY29uZmlndXJlLjsgXAogCWVsc2UgXAotCSAgIChjZCB3b3JrLiQkc3lzbmFt
ZTsgbWFrZSBkZXBlbmQpOyBcCisJICAgJChNQUtFKSAtQyB3b3JrLiQkc3lzbmFtZSBkZXBlbmQ7
IFwKIAlmaQogCiBjbGVhbjoKQEAgLTU3LDcgKzU3LDcgQEAgY2xlYW46CiAJIGlmIFsgISAtZCB3
b3JrLiQkc3lzbmFtZSBdOyB0aGVuIFwKIAkgICBlY2hvIE5vIGJ1aWxkIGRpcmVjdG9yeSBmb3Ig
JCRzeXNuYW1lIC0gcGxlYXNlIHJ1biAuL2NvbmZpZ3VyZS47IFwKIAllbHNlIFwKLQkgICAoY2Qg
d29yay4kJHN5c25hbWU7IG1ha2UgY2xlYW4pOyBcCisJICAgJChNQUtFKSAtQyB3b3JrLiQkc3lz
bmFtZSBjbGVhbjsgXAogCWZpCiAKIHJlYWxjbGVhbjoKQEAgLTY1LDcgKzY1LDcgQEAgcmVhbGNs
ZWFuOgogCSBpZiBbICEgLWQgd29yay4kJHN5c25hbWUgXTsgdGhlbiBcCiAJICAgZWNobyBObyBi
dWlsZCBkaXJlY3RvcnkgZm9yICQkc3lzbmFtZSAtIHBsZWFzZSBydW4gLi9jb25maWd1cmUuOyBc
CiAJZWxzZSBcCi0JICAgKGNkIHdvcmsuJCRzeXNuYW1lOyBtYWtlIHJlYWxjbGVhbik7IFwKKwkg
ICAkKE1BS0UpIC1DIHdvcmsuJCRzeXNuYW1lIHJlYWxjbGVhbjsgXAogCWZpCiAKIGRpc3RjbGVh
bjoKQEAgLTczLDcgKzczLDcgQEAgZGlzdGNsZWFuOgogCSBpZiBbICEgLWQgd29yay4kJHN5c25h
bWUgXTsgdGhlbiBcCiAJICAgZWNobyBObyBidWlsZCBkaXJlY3RvcnkgZm9yICQkc3lzbmFtZSAt
IHBsZWFzZSBydW4gLi9jb25maWd1cmUuOyBcCiAJZWxzZSBcCi0JICAgKGNkIHdvcmsuJCRzeXNu
YW1lOyBtYWtlIGRpc3RjbGVhbik7IFwKKwkgICAkKE1BS0UpIC1DIHdvcmsuJCRzeXNuYW1lIGRp
c3RjbGVhbjsgXAogCWZpCiAKIGxpbmtzOgpAQCAtODEsNiArODEsNiBAQCBsaW5rczoKIAkgaWYg
WyAhIC1kIHdvcmsuJCRzeXNuYW1lIF07IHRoZW4gXAogCSAgIGVjaG8gTm8gYnVpbGQgZGlyZWN0
b3J5IGZvciAkJHN5c25hbWUgLSBwbGVhc2UgcnVuIC4vY29uZmlndXJlLjsgXAogCWVsc2UgXAot
CSAgIChjZCB3b3JrLiQkc3lzbmFtZTsgbWFrZSBsaW5rcyk7IFwKKwkgICAkKE1BS0UpIC1DIHdv
cmsuJCRzeXNuYW1lIGxpbmtzOyBcCiAJZmkKIApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuY29uZiBi
L01ha2VmaWxlLmNvbmYKaW5kZXggYWNkZmI1OC4uYzZjYjNlYSAxMDA2NDQKLS0tIGEvTWFrZWZp
bGUuY29uZgorKysgYi9NYWtlZmlsZS5jb25mCkBAIC01MCw3ICs1MCw3IEBAIERFQlVHID0gLWcK
ICNXQVJORVJSID0gLVdlcnJvcgogUkFOTElCID0gcmFubGliCiBNS0RFUCA9IG1rZGVwCi1DTElF
TlRfUEFUSCA9ICciUEFUSD0vdXNyL3VjYjovdXNyL2JpbjovdXNyL3NiaW46L2Jpbjovc2JpbiIn
CitDTElFTlRfUEFUSCA9ICciUEFUSD0vc2JpbjovdXNyL3NiaW46L3Vzci9sb2NhbC9zYmluOi9i
aW46L3Vzci9iaW46L3Vzci9sb2NhbC9iaW4iJwogCiBCSU5ETElCID0gLi4vbWluaXJlcy9saWJy
ZXMuYQogQklORElOQyA9CmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKaW5kZXggMmFhOTJi
ZC4uNDc0N2M5ZCAxMDA2NDQKLS0tIGEvUkVBRE1FCisrKyBiL1JFQURNRQpAQCAtMSw2ICsxLDcg
QEAKIAkgICAgICAgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtIERIQ1AgRGlzdHJpYnV0aW9u
CiAJCQkgICBWZXJzaW9uIDMuMS1FU1YtUjMKIAkJCSAgICAgSnVseSAyNywgMjAxMQorICAgICAg
ICAgICAgICAgICAgICAod2l0aCBtb2RpZmljYXRpb25zIGZvciBBTFQgTGludXgpCiAKIAkJCSAg
ICAgICBSRUFETUUgRklMRQogCkBAIC00NTgsNiArNDU5LDIxIEBAIGZvciBBSVggd291bGQgYmUg
d2VsY29tZS4KIAogCQkJICAgICAgIFNVUFBPUlQKIAorUGxlYXNlIG5vdGUgdGhlIGZvbGxvd2lu
ZyBiZWZvcmUgcmVxdWVzdGluZyBoZWxwOgorCitUaGlzIHNvZnR3YXJlIGlzIGEgcGFydCBvZiB0
aGUgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bSdzIERIQ1Agc3VpdGUKK3dpdGggbW9kaWZp
Y2F0aW9ucyBmb3IgQUxUIExpbnV4LgorVGhlIElTQyBmb2xrcyBxdWl0ZSByZWFzb25hYmx5IHJl
cXVpcmUgdGhhdCB5b3UgZG8gbm90IGJvdGhlciB0aGVtIHdpdGgKK3F1ZXN0aW9ucyBvbiBzb2Z0
d2FyZSB0aGF0IGluY2x1ZGVzIHRoaXJkLXBhcnR5IG1vZGlmaWNhdGlvbnMgYW5kIG1pZ2h0Citu
b3QgYmUgYmFzZWQgb2ZmIHRoZWlyIGxhdGVzdCBjb2RlLiAgSGVuY2UsIHBsZWFzZSBkaXJlY3Qg
YW55IHF1ZXN0aW9ucwordG8gdGhlIGNvbW11bml0eUAgbWFpbGluZyBsaXN0IGluc3RlYWQ7IHRo
ZSBzdWJzY3JpcHRpb24gaW5zdHJ1Y3Rpb25zCithcmUgZ2l2ZW4gYXQgaHR0cDovL2xpc3RzLmFs
dGxpbnV4Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2NvbW11bml0eSAuCisKK1RoZSByZXN0IG9mIHRo
aXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIElTQydzIG9yaWdpbmFsIGd1aWRlbGluZXMgb24KK3Jl
cXVlc3Rpbmcgc3VwcG9ydCBhbmQvb3IgcmVwb3J0aW5nIGJ1Z3MuICBUaGVzZSB3aWxsIG9ubHkg
YXBwbHkgdG8KK3lvdSBpZiB5b3UgcmVwcm9kdWNlIHlvdXIgcHJvYmxlbSBvbiB0aGUgbGF0ZXN0
IHZlcnNpb24gb2YgSVNDJ3MgREhDUAorc3VpdGUgYXMgYXZhaWxhYmxlIGZyb20gZnRwOi8vZnRw
LmlzYy5vcmcgLgorCiBUaGUgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtIERIQ1Agc2VydmVy
IGlzIGRldmVsb3BlZCBhbmQgZGlzdHJpYnV0ZWQKIGJ5IElTQyBpbiB0aGUgcHVibGljIHRydXN0
LCB0aGFua3MgdG8gdGhlIGdlbmVyb3VzIGRvbmF0aW9ucyBvZiBpdHMKIHNwb25zb3JzLiAgSVND
IG5vdyBhbHNvIG9mZmVycyBjb21tZXJjaWFsIHF1YWxpdHkgc3VwcG9ydCBjb250cmFjdHMgZm9y
CmRpZmYgLS1naXQgYS9jbGllbnQvTWFrZWZpbGUuZGlzdCBiL2NsaWVudC9NYWtlZmlsZS5kaXN0
CmluZGV4IGMxMjM5NjMuLjVlZTZlNzEgMTAwNjQ0Ci0tLSBhL2NsaWVudC9NYWtlZmlsZS5kaXN0
CisrKyBiL2NsaWVudC9NYWtlZmlsZS5kaXN0CkBAIC0xMjgsNiArMTI4LDYgQEAgZGhjbGllbnQu
bGVhc2VzLmNhdDU6CWRoY2xpZW50LmxlYXNlcy5tYW41CiAKIAogZGhjbGllbnQ6CSQoT0JKUykg
JChESENQTElCKQotCSQoQ0MpICQoTEZMQUdTKSAtbyAkKFBST0cpICQoT0JKUykgJChESENQTElC
KSAkKExJQlMpCisJJChDQykgLXBpZSAkKExGTEFHUykgLW8gJChQUk9HKSAkKE9CSlMpICQoREhD
UExJQikgJChMSUJTKQogCiAjIERlcGVuZGVuY2llcyAoc2VtaS1hdXRvbWF0aWNhbGx5LWdlbmVy
YXRlZCkKZGlmZiAtLWdpdCBhL2NsaWVudC9kaGNsaWVudC5jIGIvY2xpZW50L2RoY2xpZW50LmMK
aW5kZXggOTIxZGFkZS4uNzljNTJjOSAxMDA2NDQKLS0tIGEvY2xpZW50L2RoY2xpZW50LmMKKysr
IGIvY2xpZW50L2RoY2xpZW50LmMKQEAgLTI2Miw5ICsyNjIsOSBAQCBpbnQgbWFpbiAoYXJnYywg
YXJndiwgZW52cCkKIAogCWlmICghcXVpZXQpIHsKIAkJbG9nX2luZm8gKCIlcyAlcyIsIG1lc3Nh
Z2UsIERIQ1BfVkVSU0lPTik7Ci0JCWxvZ19pbmZvIChjb3B5cmlnaHQpOwotCQlsb2dfaW5mbyAo
YXJyKTsKLQkJbG9nX2luZm8gKHVybCk7CisJCWxvZ19pbmZvICgiJXMiLCBjb3B5cmlnaHQpOwor
CQlsb2dfaW5mbyAoIiVzIiwgYXJyKTsKKwkJbG9nX2luZm8gKCIlcyIsIHVybCk7CiAJCWxvZ19p
bmZvICgiJXMiLCAiIik7CiAJfSBlbHNlCiAJCWxvZ19wZXJyb3IgPSAwOwpAQCAtNDcwLDkgKzQ3
MCw5IEBAIGludCBtYWluIChhcmdjLCBhcmd2LCBlbnZwKQogc3RhdGljIHZvaWQgdXNhZ2UgKCkK
IHsKIAlsb2dfaW5mbyAoIiVzICVzIiwgbWVzc2FnZSwgREhDUF9WRVJTSU9OKTsKLQlsb2dfaW5m
byAoY29weXJpZ2h0KTsKLQlsb2dfaW5mbyAoYXJyKTsKLQlsb2dfaW5mbyAodXJsKTsKKwlsb2df
aW5mbyAoIiVzIiwgY29weXJpZ2h0KTsKKwlsb2dfaW5mbyAoIiVzIiwgYXJyKTsKKwlsb2dfaW5m
byAoIiVzIiwgdXJsKTsKIAogCWxvZ19lcnJvciAoIlVzYWdlOiBkaGNsaWVudCBbLTFkcXJdIFst
bnddIFstcCA8cG9ydD5dICVzIiwKIAkJICAgIlstcyBzZXJ2ZXJdIik7CkBAIC0xMDkyLDcgKzEw
OTIsOCBAQCB2b2lkIGRoY3BvZmZlciAocGFja2V0KQogCQlyZXR1cm47CiAJfQogCi0Jc3ByaW50
ZiAob2J1ZiwgIiVzIGZyb20gJXMiLCBuYW1lLCBwaWFkZHIgKHBhY2tldCAtPiBjbGllbnRfYWRk
cikpOworCXNucHJpbnRmIChvYnVmLCBzaXplb2Yob2J1ZiksCisJCSIlcyBmcm9tICVzIiwgbmFt
ZSwgcGlhZGRyIChwYWNrZXQgLT4gY2xpZW50X2FkZHIpKTsKIAogCiAJLyogSWYgdGhpcyBsZWFz
ZSBkb2Vzbid0IHN1cHBseSB0aGUgbWluaW11bSByZXF1aXJlZCBwYXJhbWV0ZXJzLApAQCAtMjY0
OCw3ICsyNjU2LDcgQEAgdm9pZCBjbGllbnRfZW52YWRkIChzdHJ1Y3QgY2xpZW50X3N0YXRlICpj
bGllbnQsCiB7CiAJY2hhciBzcGJ1ZiBbMTAyNF07CiAJY2hhciAqczsKLQl1bnNpZ25lZCBsZW4s
IGk7CisJaW50IGxlbjsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnZhbDsKIAl2YV9saXN0IGxpc3Q7
CiAKQEAgLTI2NTYsNiArMjY2NCwxMSBAQCB2b2lkIGNsaWVudF9lbnZhZGQgKHN0cnVjdCBjbGll
bnRfc3RhdGUgKmNsaWVudCwKIAlsZW4gPSB2c25wcmludGYgKHNwYnVmLCBzaXplb2Ygc3BidWYs
IGZtdCwgbGlzdCk7CiAJdmFfZW5kIChsaXN0KTsKIAorLyogSGFuZGxlIHRydW5jYXRpb24gb24g
Z2xpYmMgMi4wLnggb3IgcG9zc2libGUgdW5leHBlY3RlZCBlcnJvcnMgb24gb3RoZXJzOworICog
YXZvaWQgaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgYWRkaXRpb24gYmVsb3cuICovCisJaWYgKGxl
biA8IDAgfHwgbGVuID4gMHgzZmZmZmZmZikKKwkJcmV0dXJuOworCiAJdmFsID0gZG1hbGxvYyAo
c3RybGVuIChwcmVmaXgpICsgc3RybGVuIChuYW1lKSArIDEgLyogPSAqLyArCiAJCSAgICAgICBs
ZW4gKyBzaXplb2YgKnZhbCwgTURMKTsKIAlpZiAoIXZhbCkKZGlmZiAtLWdpdCBhL2NsaWVudC9z
Y3JpcHRzL2xpbnV4IGIvY2xpZW50L3NjcmlwdHMvbGludXgKaW5kZXggMzFkZGQyZi4uMjZhMmQy
ZSAxMDA3NTUKLS0tIGEvY2xpZW50L3NjcmlwdHMvbGludXgKKysrIGIvY2xpZW50L3NjcmlwdHMv
bGludXgKQEAgLTEsOCArMSw2IEBACiAjIS9iaW4vYmFzaAogIyBkaGNsaWVudC1zY3JpcHQgZm9y
IExpbnV4LiBEYW4gSGFsYmVydCwgTWFyY2gsIDE5OTcuCiAjIFVwZGF0ZWQgZm9yIExpbnV4IDIu
WzEyXSBieSBCcmlhbiBKLiBNdXJyZWxsLCBKYW51YXJ5IDE5OTkuCi0jIE5vIGd1YXJhbnRlZXMg
YWJvdXQgdGhpcy4gSSdtIGEgbm92aWNlIGF0IHRoZSBkZXRhaWxzIG9mIExpbnV4Ci0jIG5ldHdv
cmtpbmcuCiAKICMgTm90ZXM6CiAKQEAgLTE5LDI2ICsxOSwxNiBAQAogIyBhZGRyZXNzIGlmIGl0
IGlzIG5vdCBzdXBwbGllZC4gVGhpcyBtaWdodCBiZSBtdWNoIG1vcmUgZWFzaWx5IGRvbmUKICMg
YnkgdGhlIGRoY2xpZW50IEMgY29kZSwgYW5kIHBhc3NlZCBvbi4KIAotIyA0LiBUSU1FT1VUIG5v
dCB0ZXN0ZWQuIHBpbmcgaGFzIGEgZmxhZyBJIGRvbid0IGtub3csIGFuZCBJJ20gc3VzcGljaW91
cwotIyBvZiB0aGUgJDEgaW4gaXRzIGFyZ3MuCi0KIG1ha2VfcmVzb2x2X2NvbmYoKSB7Ci0gIGlm
IFsgeCIkbmV3X2RvbWFpbl9uYW1lX3NlcnZlcnMiICE9IHggXTsgdGhlbgotICAgIGNhdCAvZGV2
L251bGwgPiAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50Ci0gICAgY2htb2QgNjQ0IC9ldGMvcmVz
b2x2LmNvbmYuZGhjbGllbnQKLSAgICBpZiBbIHgiJG5ld19kb21haW5fc2VhcmNoIiAhPSB4IF07
IHRoZW4KLSAgICAgIGVjaG8gc2VhcmNoICRuZXdfZG9tYWluX3NlYXJjaCA+PiAvZXRjL3Jlc29s
di5jb25mLmRoY2xpZW50Ci0gICAgZWxpZiBbIHgiJG5ld19kb21haW5fbmFtZSIgIT0geCBdOyB0
aGVuCi0gICAgICAjIE5vdGUgdGhhdCB0aGUgREhDUCAnRG9tYWluIE5hbWUgT3B0aW9uJyBpcyBy
ZWFsbHkganVzdCBhIGRvbWFpbgotICAgICAgIyBuYW1lLCBhbmQgdGhhdCB0aGlzIHByYWN0aWNl
IG9mIHVzaW5nIHRoZSBkb21haW4gbmFtZSBvcHRpb24gYXMKLSAgICAgICMgYSBzZWFyY2ggcGF0
aCBpcyBib3RoIG5vbnN0YW5kYXJkIGFuZCBkZXByZWNhdGVkLgotICAgICAgZWNobyBzZWFyY2gg
JG5ld19kb21haW5fbmFtZSA+PiAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50CisgIGlmIFsgLW4g
IiRuZXdfZG9tYWluX25hbWUiIF0gfHwgWyAtbiAiJG5ld19kb21haW5fbmFtZV9zZXJ2ZXJzIiBd
OyB0aGVuCisgICAgZWNobyAnOyBnZW5lcmF0ZWQgYnkgL3NiaW4vZGhjbGllbnQtc2NyaXB0JyA+
IC9ldGMvcmVzb2x2LmNvbmYKKyAgICBjaG1vZCA2NDQgL2V0Yy9yZXNvbHYuY29uZgorICAgIGlm
IFsgLW4gIiRuZXdfZG9tYWluX25hbWUiIF07IHRoZW4KKyAgICAgICBlY2hvIHNlYXJjaCAkbmV3
X2RvbWFpbl9uYW1lID4+IC9ldGMvcmVzb2x2LmNvbmYKICAgICBmaQogICAgIGZvciBuYW1lc2Vy
dmVyIGluICRuZXdfZG9tYWluX25hbWVfc2VydmVyczsgZG8KLSAgICAgIGVjaG8gbmFtZXNlcnZl
ciAkbmFtZXNlcnZlciA+Pi9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQKKyAgICAgIGVjaG8gbmFt
ZXNlcnZlciAkbmFtZXNlcnZlciA+Pi9ldGMvcmVzb2x2LmNvbmYKICAgICBkb25lCi0KLSAgICBt
diAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50IC9ldGMvcmVzb2x2LmNvbmYKICAgZmkKIH0KIApA
QCAtNTMsNiArNTEsMjIgQEAgaWYgWyAtZiAvZXRjL2RoY2xpZW50LWVudGVyLWhvb2tzIF07IHRo
ZW4KICAgZmkKIGZpCiAKK2NkIC9ldGMvc3lzY29uZmlnL25ldHdvcmstc2NyaXB0cworLiAvZXRj
L3N5c2NvbmZpZy9uZXR3b3JrLXNjcmlwdHMvbmV0d29yay1mdW5jdGlvbnMKKy4gL2V0Yy9yYy5k
L2luaXQuZC9mdW5jdGlvbnMKKworWyAtZiAuLi9uZXR3b3JrIF0gJiYgLiAuLi9uZXR3b3JrCitb
IC1mIC4uL25ldHdvcmtpbmcvbmV0d29yayBdICYmIC4gLi4vbmV0d29ya2luZy9uZXR3b3JrCisK
K0NPTkZJRz0iaWZjZmctJGludGVyZmFjZSIKKworWyAtZiAiJHtDT05GSUd9IiBdIHx8IHsKKyAg
ICBlY2hvICQiJDA6IGNvbmZpZ3VyYXRpb24gZm9yICRpbnRlcmZhY2Ugbm90IGZvdW5kLiIgPiYy
CisgICAgZXhpdF93aXRoX2hvb2tzIDEKK30KKworc291cmNlX2NvbmZpZworCiByZWxlYXNlPWB1
bmFtZSAtcmAKIHJlbGVhc2U9YGV4cHIgJHJlbGVhc2UgOiAnXCguKlwpXC4uKidgCiByZWxtaW5v
cj1gZWNobyAkcmVsZWFzZSB8c2VkIC1lICdzL1swLTldKlwuXChbMC05XVswLTldKlwpXChcLi4q
XCkqJC9cMS8nYApAQCAtMTIyLDE0ICsxMjIsMTAgQEAKICAgCiBpZiBbIHgkcmVhc29uID0geEJP
VU5EIF0gfHwgWyB4JHJlYXNvbiA9IHhSRU5FVyBdIHx8IFwKICAgIFsgeCRyZWFzb24gPSB4UkVC
SU5EIF0gfHwgWyB4JHJlYXNvbiA9IHhSRUJPT1QgXTsgdGhlbgotICBjdXJyZW50X2hvc3RuYW1l
PWBob3N0bmFtZWAKLSAgaWYgWyB4JGN1cnJlbnRfaG9zdG5hbWUgPSB4IF0gfHwgXAotICAgICBb
IHgkY3VycmVudF9ob3N0bmFtZSA9ICJ4KG5vbmUpIiBdIHx8IFwKLSAgICAgWyB4JGN1cnJlbnRf
aG9zdG5hbWUgPSB4bG9jYWxob3N0IF0gfHwgXAotICAgICBbIHgkY3VycmVudF9ob3N0bmFtZSA9
IHgkb2xkX2hvc3RfbmFtZSBdOyB0aGVuCi0gICAgaWYgWyB4JG5ld19ob3N0X25hbWUgIT0geCRv
bGRfaG9zdF9uYW1lIF07IHRoZW4KLSAgICAgIGhvc3RuYW1lICIkbmV3X2hvc3RfbmFtZSIKLSAg
ICBmaQorICBpZiBbIC1uICIkbmV3X2hvc3RfbmFtZSIgXSAmJiBuZWVkX2hvc3RuYW1lOyB0aGVu
CisgICAgICAgaWYgbmVlZF9ob3N0bmFtZSB8fCBbICJgaG9zdG5hbWVgIiAhPSAiJG5ld19ob3N0
X25hbWUiIF07IHRoZW4KKyAgICAgICAgICAgICAgIGhvc3RuYW1lICRuZXdfaG9zdF9uYW1lCisg
ICAgICAgZmkKICAgZmkKICAgICAKICAgaWYgWyB4JG9sZF9pcF9hZGRyZXNzICE9IHggXSAmJiBb
IHgkYWxpYXNfaXBfYWRkcmVzcyAhPSB4IF0gJiYgXApAQCAtMTQ2LDcgKzE1NywxMCBAQCBpZiBb
IHgkcmVhc29uID0geEJPVU5EIF0gfHwgWyB4JHJlYXNvbiA9IHhSRU5FVyBdIHx8IFwKICAgICBp
ZmNvbmZpZyAkaW50ZXJmYWNlOjAgaW5ldCAkYWxpYXNfaXBfYWRkcmVzcyAkYWxpYXNfc3VibmV0
X2FyZwogICAgIHJvdXRlIGFkZCAtaG9zdCAkYWxpYXNfaXBfYWRkcmVzcyAkaW50ZXJmYWNlOjAK
ICAgZmkKLSAgbWFrZV9yZXNvbHZfY29uZgorICBpZiBbICIke1BFRVJETlN9IiAhPSAibm8iIF07
IHRoZW4KKyAgICBtYWtlX3Jlc29sdl9jb25mCisgIGZpCisKICAgZXhpdF93aXRoX2hvb2tzIDAK
IGZpCiAKQEAgLTE3NCw3ICsxODgsNyBAQCBpZiBbIHgkcmVhc29uID0geFRJTUVPVVQgXTsgdGhl
bgogICBpZmNvbmZpZyAkaW50ZXJmYWNlIGluZXQgJG5ld19pcF9hZGRyZXNzICRuZXdfc3VibmV0
X2FyZyBcCiAJCQkJCSRuZXdfYnJvYWRjYXN0X2FyZyAkbXR1X2FyZwogICBzZXQgJG5ld19yb3V0
ZXJzCi0gIGlmIHBpbmcgLXEgLWMgMSAkMTsgdGhlbgorICBpZiBwaW5nIC1xIC1jIDEgLXcgMTAg
JDE7IHRoZW4KICAgICBpZiBbIHgkbmV3X2lwX2FkZHJlc3MgIT0geCRhbGlhc19pcF9hZGRyZXNz
IF0gJiYgXAogCQkJWyB4JGFsaWFzX2lwX2FkZHJlc3MgIT0geCBdOyB0aGVuCiAgICAgICBpZmNv
bmZpZyAkaW50ZXJmYWNlOjAgaW5ldCAkYWxpYXNfaXBfYWRkcmVzcyAkYWxpYXNfc3VibmV0X2Fy
ZwpAQCAtMTg4LDcgKzIwMSw5IEBAIGlmIFsgeCRyZWFzb24gPSB4VElNRU9VVCBdOyB0aGVuCiAg
ICAgZm9yIHJvdXRlciBpbiAkbmV3X3JvdXRlcnM7IGRvCiAgICAgICByb3V0ZSBhZGQgZGVmYXVs
dCBndyAkcm91dGVyCiAgICAgZG9uZQotICAgIG1ha2VfcmVzb2x2X2NvbmYKKyAgICBpZiBbICIk
e1BFRVJETlN9IiAhPSAibm8iIF07IHRoZW4KKyAgICAgIG1ha2VfcmVzb2x2X2NvbmYKKyAgICBm
aQogICAgIGV4aXRfd2l0aF9ob29rcyAwCiAgIGZpCiAgIGlmY29uZmlnICRpbnRlcmZhY2UgaW5l
dCAwIGRvd24KZGlmZiAtLWdpdCBhL2NvbW1vbi9NYWtlZmlsZS5kaXN0IGIvY29tbW9uL01ha2Vm
aWxlLmRpc3QKaW5kZXggNWU0MGEwZi4uY2QyZGVmZSAxMDA2NDQKLS0tIGEvY29tbW9uL01ha2Vm
aWxlLmRpc3QKKysrIGIvY29tbW9uL01ha2VmaWxlLmRpc3QKQEAgLTI1LDExICsyNSwxMSBAQCBT
RURNQU5QQUdFUyA9IGRoY3Atb3B0aW9ucy5tYW41IGRoY3AtZXZhbC5tYW41CiBTUkMgICAgPSBy
YXcuYyBwYXJzZS5jIG5pdC5jIGljbXAuYyBkaXNwYXRjaC5jIGNvbmZsZXguYyB1cGYuYyBicGYu
YyBzb2NrZXQuYyBcCiAJIGxwZi5jIGRscGkuYyBwYWNrZXQuYyB0ci5jIGV0aGVybmV0LmMgbWVt
b3J5LmMgcHJpbnQuYyBvcHRpb25zLmMgXAogCSBpbmV0LmMgdHJlZS5jIHRhYmxlcy5jIGFsbG9j
LmMgZmRkaS5jIGN0cmFjZS5jIGRucy5jIHJlc29sdi5jIFwKLQkgZXhlY3V0ZS5jIGRpc2NvdmVy
LmMgY29tYXBpLmMKKwkgZXhlY3V0ZS5jIGRpc2NvdmVyLmMgY29tYXBpLmMgZHJvcHJvb3QuYwog
T0JKICAgID0gcmF3Lm8gcGFyc2UubyBuaXQubyBpY21wLm8gZGlzcGF0Y2gubyBjb25mbGV4Lm8g
dXBmLm8gYnBmLm8gc29ja2V0Lm8gXAogCSBscGYubyBkbHBpLm8gcGFja2V0Lm8gdHIubyBldGhl
cm5ldC5vIG1lbW9yeS5vIHByaW50Lm8gb3B0aW9ucy5vIFwKIAkgaW5ldC5vIHRyZWUubyB0YWJs
ZXMubyBhbGxvYy5vIGZkZGkubyBjdHJhY2UubyBkbnMubyByZXNvbHYubyBcCi0JIGV4ZWN1dGUu
byBkaXNjb3Zlci5vIGNvbWFwaS5vCisJIGV4ZWN1dGUubyBkaXNjb3Zlci5vIGNvbWFwaS5vIGRy
b3Byb290Lm8KIE1BTiAgICA9IGRoY3Atb3B0aW9ucy41IGRoY3AtZXZhbC41CiAKIElOQ0xVREVT
ID0gLUkkKFRPUCkgJChCSU5ESU5DKSAtSSQoVE9QKS9pbmNsdWRlcwpkaWZmIC0tZ2l0IGEvY29t
bW9uL2JwZi5jIGIvY29tbW9uL2JwZi5jCmluZGV4IDZhMzg3ZDkuLjZmNTBmMTEgMTAwNjQ0Ci0t
LSBhL2NvbW1vbi9icGYuYworKysgYi9jb21tb24vYnBmLmMKQEAgLTkxLDcgKzkxLDcgQEAgaW50
IGlmX3JlZ2lzdGVyX2JwZiAoaW5mbykKIAkvKiBPcGVuIGEgQlBGIGRldmljZSAqLwogCWZvciAo
YiA9IDA7IDE7IGIrKykgewogCQkvKiAlQXVkaXQlIDMxIGJ5dGVzIG1heC4gJTIwMDQuMDYuMTcs
U2FmZSUgKi8KLQkJc3ByaW50ZihmaWxlbmFtZSwgQlBGX0ZPUk1BVCwgYik7CisJCXNucHJpbnRm
KGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCBCUEZfRk9STUFULCBiKTsKIAkJc29jayA9IG9w
ZW4gKGZpbGVuYW1lLCBPX1JEV1IsIDApOwogCQlpZiAoc29jayA8IDApIHsKIAkJCWlmIChlcnJu
byA9PSBFQlVTWSkgewpkaWZmIC0tZ2l0IGEvY29tbW9uL2NvbWFwaS5jIGIvY29tbW9uL2NvbWFw
aS5jCmluZGV4IDEzMDc5NjguLmM1OGZmZGUgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jb21hcGkuYwor
KysgYi9jb21tb24vY29tYXBpLmMKQEAgLTI4OCw3ICsyODgsNyBAQCBpc2NfcmVzdWx0X3QgZGhj
cF9ncm91cF9zaWduYWxfaGFuZGxlciAob21hcGlfb2JqZWN0X3QgKmgsCiAJCS8qIEdyb3VwIG9i
amVjdHMgYWx3YXlzIGhhdmUgdG8gaGF2ZSBuYW1lcy4gKi8KIAkJaWYgKCFncm91cCAtPiBuYW1l
KSB7CiAJCQljaGFyIGhuYnVmIFs2NF07Ci0JCQlzcHJpbnRmIChobmJ1ZiwgIm5nJTA4bHglMDhs
eCIsCisJCQlzbnByaW50ZiAoaG5idWYsIHNpemVvZihobmJ1ZiksICJuZyUwOGx4JTA4bHgiLAog
CQkJCSAodW5zaWduZWQgbG9uZyljdXJfdGltZSwKIAkJCQkgKHVuc2lnbmVkIGxvbmcpZ3JvdXAp
OwogCQkJZ3JvdXAgLT4gbmFtZSA9IGRtYWxsb2MgKHN0cmxlbiAoaG5idWYpICsgMSwgTURMKTsK
ZGlmZiAtLWdpdCBhL2NvbW1vbi9kbnMuYyBiL2NvbW1vbi9kbnMuYwppbmRleCAwM2E3NmE4Li5j
NDg5MjAxIDEwMDY0NAotLS0gYS9jb21tb24vZG5zLmMKKysrIGIvY29tbW9uL2Rucy5jCkBAIC01
MzMsNyArNTMzLDcgQEAgaXNjX3Jlc3VsdF90IGRkbnNfdXBkYXRlX2EgKHN0cnVjdCBkYXRhX3N0
cmluZyAqZGRuc19md2RfbmFtZSwKIAkJcmV0dXJuIElTQ19SX0lOVkFMSURBUkc7CiAKIAkvKiAl
QXVkaXQlIENhbm5vdCBleGNlZWQgMTYgYnl0ZXMuICUyMDA0LjA2LjE3LFNhZmUlICovCi0Jc3By
aW50ZiAoZGRuc19hZGRyZXNzLCAiJXUuJXUuJXUuJXUiLAorCXNucHJpbnRmIChkZG5zX2FkZHJl
c3MsIHNpemVvZihkZG5zX2FkZHJlc3MpLCAiJXUuJXUuJXUuJXUiLAogCQkgIGRkbnNfYWRkci5p
YWJ1ZlswXSwgZGRuc19hZGRyLmlhYnVmWzFdLAogCQkgIGRkbnNfYWRkci5pYWJ1ZlsyXSwgZGRu
c19hZGRyLmlhYnVmWzNdKTsKIApAQCAtNzk0LDcgKzc5NCw3IEBAIGlzY19yZXN1bHRfdCBkZG5z
X3JlbW92ZV9hIChzdHJ1Y3QgZGF0YV9zdHJpbmcgKmRkbnNfZndkX25hbWUsCiAJCXJldHVybiBJ
U0NfUl9JTlZBTElEQVJHOwogCiAJLyogJUF1ZGl0JSBDYW5ub3QgZXhjZWVkIDE2IGJ5dGVzLiAl
MjAwNC4wNi4xNyxTYWZlJSAqLwotCXNwcmludGYgKGRkbnNfYWRkcmVzcywgIiV1LiV1LiV1LiV1
IiwKKwlzbnByaW50ZiAoZGRuc19hZGRyZXNzLCBzaXplb2YoZGRuc19hZGRyZXNzKSwgIiV1LiV1
LiV1LiV1IiwKIAkJICBkZG5zX2FkZHIuaWFidWZbMF0sIGRkbnNfYWRkci5pYWJ1ZlsxXSwKIAkJ
ICBkZG5zX2FkZHIuaWFidWZbMl0sIGRkbnNfYWRkci5pYWJ1ZlszXSk7CiAKZGlmZiAtLWdpdCBh
L2NvbW1vbi9kcm9wcm9vdC5jIGIvY29tbW9uL2Ryb3Byb290LmMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMzZjNDJkZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9kcm9w
cm9vdC5jCkBAIC0wLDAgKzEsMTIxIEBACisjaW5jbHVkZSAiZGhjcGQuaCIKKyNpbmNsdWRlIDx1
bmlzdGQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8cHdkLmg+CisjZGVmaW5lIGdy
b3VwIHJlYWxfZ3JvdXAKKyNpbmNsdWRlIDxncnAuaD4KKyN1bmRlZiBncm91cAorCisjaW5jbHVk
ZSA8c3lzL2NhcGFiaWxpdHkuaD4KKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKworc3RhdGljIGlu
dCBtaW5pbWl6ZWQgPSAwOworCit2b2lkCitkaGNwZF9wcml2X21pbmltaXplKGNvbnN0IGNoYXIg
KnVzZXIsIGNvbnN0IGNoYXIgKmRpcikKK3sKKwlzdHJ1Y3QgcGFzc3dkICpwdzsKKwl1aWRfdCAg
IHVpZDsKKwlnaWRfdCAgIGdpZDsKKworCWlmICghKnVzZXIpCisJCXJldHVybjsKKworCWlmICgh
KHB3ID0gZ2V0cHduYW0odXNlcikpKQorCQlsb2dfZmF0YWwoIkZhaWxlZCB0byBsb3dlciBwcml2
aWxlZ2VzOiBnZXRwd25hbTogJXMiLCB1c2VyKTsKKworCXVpZCA9IHB3LT5wd191aWQ7CisJZ2lk
ID0gcHctPnB3X2dpZDsKKworCXR6c2V0KCk7CisKKwlpZiAoaW5pdGdyb3Vwcyh1c2VyLCBnaWQp
KQorCQlsb2dfZmF0YWwoIkZhaWxlZCB0byBsb3dlciBwcml2aWxlZ2VzOiBpbml0Z3JvdXBzOiAl
cy8ldTogJW0iLAorCQkJICB1c2VyLCAodW5zaWduZWQpIGdpZCk7CisKKwllbmRwd2VudCgpOwor
CisJaWYgKCpkaXIgJiYgKGNoZGlyKGRpcikgfHwgY2hyb290KCIuIikpKQorCQlsb2dfZmF0YWwo
IkZhaWxlZCB0byBsb3dlciBwcml2aWxlZ2VzOiBjaHJvb3Q6ICVzOiAlbSIsIGRpcik7CisKKwlp
ZiAoc2V0Z2lkKGdpZCkpCisJCWxvZ19mYXRhbCgiRmFpbGVkIHRvIGxvd2VyIHByaXZpbGVnZXM6
IHNldGdpZDogJXMvJXU6ICVtIiwKKwkJCSAgdXNlciwgKHVuc2lnbmVkKSBnaWQpOworCisJaWYg
KHByY3RsKFBSX1NFVF9LRUVQQ0FQUywgMSkpCisJCWxvZ19mYXRhbCgiRmFpbGVkIHRvIGxvd2Vy
IHByaXZpbGVnZXM6IHByY3RsOiAlbSIpOworCisJaWYgKHNldHJldWlkKHVpZCwgdWlkKSkKKwkJ
bG9nX2ZhdGFsKCJGYWlsZWQgdG8gbG93ZXIgcHJpdmlsZWdlczogc2V0cmV1aWQ6ICVzLyV1OiAl
bSIsCisJCQkgIHVzZXIsICh1bnNpZ25lZCkgdWlkKTsKKworCWNhcF90ICAgY2FwcyA9IGNhcF9m
cm9tX3RleHQoImNhcF9uZXRfYmluZF9zZXJ2aWNlPWVwIik7CisKKwlpZiAoIWNhcHMpCisJCWxv
Z19mYXRhbCgiRmFpbGVkIHRvIGxvd2VyIHByaXZpbGVnZXM6IGNhcF9mcm9tX3RleHQ6ICVtIik7
CisKKwlpZiAoY2FwX3NldF9wcm9jKGNhcHMpIDwgMCkKKwkJbG9nX2ZhdGFsKCJGYWlsZWQgdG8g
bG93ZXIgcHJpdmlsZWdlczogY2FwX3NldF9wcm9jOiAlbSIpOworCisJY2FwX2ZyZWUoY2Fwcyk7
CisJbWluaW1pemVkID0gMTsKK30KKworc3RhdGljIHZvaWQKK2Ryb3BfbWluaW1pemVkKHZvaWQp
Cit7CisJY2FwX3QgICBjYXBzID0gY2FwX2Zyb21fdGV4dCgiYWxsLWVwIik7CisJaWYgKCFjYXBz
KQorCQlsb2dfZmF0YWwoIkZhaWxlZCB0byBsb3dlciBwcml2aWxlZ2VzOiBjYXBfZnJvbV90ZXh0
OiAlbSIpOworCisJaWYgKGNhcF9zZXRfcHJvYyhjYXBzKSA8IDApCisJCWxvZ19mYXRhbCgiRmFp
bGVkIHRvIGxvd2VyIHByaXZpbGVnZXM6IGNhcF9zZXRfcHJvYzogJW0iKTsKKworCWNhcF9mcmVl
KGNhcHMpOworfQorCitzdGF0aWMgdm9pZAorZHJvcF9hbGwoY29uc3QgY2hhciAqdXNlciwgY29u
c3QgY2hhciAqZGlyKQoreworCXN0cnVjdCBwYXNzd2QgKnB3OworCXVpZF90ICAgdWlkOworCWdp
ZF90ICAgZ2lkOworCisJaWYgKCEocHcgPSBnZXRwd25hbSh1c2VyKSkpCisJCWxvZ19mYXRhbCgi
RmFpbGVkIHRvIGxvd2VyIHByaXZpbGVnZXM6IGdldHB3bmFtOiAlcyIsIHVzZXIpOworCisJdWlk
ID0gcHctPnB3X3VpZDsKKwlnaWQgPSBwdy0+cHdfZ2lkOworCisJdHpzZXQoKTsKKworCWlmIChp
bml0Z3JvdXBzKHVzZXIsIGdpZCkpCisJCWxvZ19mYXRhbCgiRmFpbGVkIHRvIGxvd2VyIHByaXZp
bGVnZXM6IGluaXRncm91cHM6ICVzLyV1OiAlbSIsCisJCQkgIHVzZXIsICh1bnNpZ25lZCkgZ2lk
KTsKKworCWVuZHB3ZW50KCk7CisKKwlpZiAoKmRpciAmJiAoY2hkaXIoZGlyKSB8fCBjaHJvb3Qo
Ii4iKSkpCisJCWxvZ19mYXRhbCgiRmFpbGVkIHRvIGxvd2VyIHByaXZpbGVnZXM6IGNocm9vdDog
JXM6ICVtIiwgZGlyKTsKKworCWlmIChzZXRnaWQoZ2lkKSkKKwkJbG9nX2ZhdGFsKCJGYWlsZWQg
dG8gbG93ZXIgcHJpdmlsZWdlczogc2V0Z2lkOiAlcy8ldTogJW0iLAorCQkJICB1c2VyLCAodW5z
aWduZWQpIGdpZCk7CisKKwlpZiAoc2V0dWlkKHVpZCkpCisJCWxvZ19mYXRhbCgiRmFpbGVkIHRv
IGxvd2VyIHByaXZpbGVnZXM6IHNldHVpZDogJXMvJXU6ICVtIiwKKwkJCSAgdXNlciwgKHVuc2ln
bmVkKSB1aWQpOworfQorCisKK3ZvaWQKK2RoY3BkX3ByaXZfZHJvcChjb25zdCBjaGFyICp1c2Vy
LCBjb25zdCBjaGFyICpkaXIpCit7CisJaWYgKCEqdXNlcikKKwkJcmV0dXJuOworCisJaWYgKG1p
bmltaXplZCkKKwkJZHJvcF9taW5pbWl6ZWQoKTsKKwllbHNlCisJCWRyb3BfYWxsKHVzZXIsIGRp
cik7Cit9CmRpZmYgLS1naXQgYS9jb21tb24vaW5ldC5jIGIvY29tbW9uL2luZXQuYwppbmRleCAz
Yzg2ZTVhLi40ODhiMTVhIDEwMDY0NAotLS0gYS9jb21tb24vaW5ldC5jCisrKyBiL2NvbW1vbi9p
bmV0LmMKQEAgLTE4OCw3ICsxODgsNyBAQCBpbnQgYWRkcl9lcSAoYWRkcjEsIGFkZHIyKQogY2hh
ciAqcGlhZGRyIChhZGRyKQogCXN0cnVjdCBpYWRkciBhZGRyOwogewotCXN0YXRpYyBjaGFyIHBi
dWYgWzQgKiAxNl07CisJc3RhdGljIGNoYXIgcGJ1ZiBbNCAqIHNpemVvZihhZGRyLmlhYnVmKV07
CiAJY2hhciAqcyA9IHBidWY7CiAJaW50IGk7CiAKZGlmZiAtLWdpdCBhL2NvbW1vbi9scGYuYyBi
L2NvbW1vbi9scGYuYwppbmRleCBkYzdmM2YyLi4zZjE5YjQzIDEwMDY0NAotLS0gYS9jb21tb24v
bHBmLmMKKysrIGIvY29tbW9uL2xwZi5jCkBAIC0yNTMsNiArMjUzLDcgQEAgc3RhdGljIHZvaWQg
bHBmX3RyX2ZpbHRlcl9zZXR1cCAoaW5mbykKIAogCS8qIFNldCB1cCB0aGUgYnBmIGZpbHRlciBw
cm9ncmFtIHN0cnVjdHVyZS4gICAgVGhpcyBpcyBkZWZpbmVkIGluCiAJICAgYnBmLmMgKi8KKwlt
ZW1zZXQoJnAsICdcMCcsIHNpemVvZiBwKTsKIAlwLmxlbiA9IGRoY3BfYnBmX3RyX2ZpbHRlcl9s
ZW47CiAJcC5maWx0ZXIgPSBkaGNwX2JwZl90cl9maWx0ZXI7CiAKZGlmZiAtLWdpdCBhL2NvbW1v
bi9wYWNrZXQuYyBiL2NvbW1vbi9wYWNrZXQuYwppbmRleCA2NjgxMDZjLi5mZGQ1NjlmIDEwMDY0
NAotLS0gYS9jb21tb24vcGFja2V0LmMKKysrIGIvY29tbW9uL3BhY2tldC5jCkBAIC0xNDEsNiAr
MTQxLDcgQEAgdm9pZCBhc3NlbWJsZV91ZHBfaXBfaGVhZGVyIChpbnRlcmZhY2UsIGJ1ZiwgYnVm
aXgsCiAJc3RydWN0IHVkcGhkciB1ZHA7CiAKIAkvKiBGaWxsIG91dCB0aGUgSVAgaGVhZGVyICov
CisJbWVtc2V0KCAmaXAsICdcMCcsIHNpemVvZiBpcCk7CiAJSVBfVl9TRVQgKCZpcCwgNCk7CiAJ
SVBfSExfU0VUICgmaXAsIDIwKTsKIAlpcC5pcF90b3MgPSBJUFRPU19MT1dERUxBWTsKZGlmZiAt
LWdpdCBhL2NvbW1vbi9wYXJzZS5jIGIvY29tbW9uL3BhcnNlLmMKaW5kZXggOWVmZDE0Ni4uZjRk
NmM0NiAxMDA2NDQKLS0tIGEvY29tbW9uL3BhcnNlLmMKKysrIGIvY29tbW9uL3BhcnNlLmMKQEAg
LTQ3OTgsNiArNDc5OCwyNSBAQCBpbnQgcGFyc2VfWCAoY2ZpbGUsIGJ1ZiwgbWF4KQogCXJldHVy
biBsZW47CiB9CiAKK3N0YXRpYyBzc2l6ZV90Cit3cml0ZV9sb29wIChpbnQgZmQsIGNvbnN0IGNo
YXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KQoreworCXNzaXplX3Qgb2Zmc2V0ID0gMDsKKworCXdo
aWxlIChjb3VudCA+IDApCisJeworCQlzc2l6ZV90IGJsb2NrID0gd3JpdGUgKGZkLCAmYnVmZmVy
W29mZnNldF0sIGNvdW50KTsKKworCQlpZiAoYmxvY2sgPCAwICYmIGVycm5vID09IEVJTlRSKQor
CQkJY29udGludWU7CisJCWlmIChibG9jayA8PSAwKQorCQkJcmV0dXJuIG9mZnNldCA/IDogYmxv
Y2s7CisJCW9mZnNldCArPSBibG9jazsKKwkJY291bnQgLT0gYmxvY2s7CisJfQorCXJldHVybiBv
ZmZzZXQ7Cit9CisKIGludCBwYXJzZV93YXJuIChzdHJ1Y3QgcGFyc2UgKmNmaWxlLCBjb25zdCBj
aGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGxpc3Q7CkBAIC00ODM4LDE0ICs0ODU3LDE0IEBA
IGludCBwYXJzZV93YXJuIChzdHJ1Y3QgcGFyc2UgKmNmaWxlLCBjb25zdCBjaGFyICpmbXQsIC4u
LikKICNlbmRpZgogCiAJaWYgKGxvZ19wZXJyb3IpIHsKLQkJSUdOT1JFX1JFVCh3cml0ZShTVERF
UlJfRklMRU5PLCBtYnVmLCBzdHJsZW4gKG1idWYpKSk7Ci0JCUlHTk9SRV9SRVQod3JpdGUoU1RE
RVJSX0ZJTEVOTywgIlxuIiwgMSkpOwotCQlJR05PUkVfUkVUKHdyaXRlKFNUREVSUl9GSUxFTk8s
IGNmaWxlIC0+IHRva2VuX2xpbmUsCisJCUlHTk9SRV9SRVQod3JpdGVfbG9vcCAoU1RERVJSX0ZJ
TEVOTywgbWJ1Ziwgc3RybGVuIChtYnVmKSkpOworCQlJR05PUkVfUkVUKHdyaXRlX2xvb3AgKFNU
REVSUl9GSUxFTk8sICJcbiIsIDEpKTsKKwkJSUdOT1JFX1JFVCh3cml0ZV9sb29wIChTVERFUlJf
RklMRU5PLCBjZmlsZSAtPiB0b2tlbl9saW5lLAogCQkJCSAgc3RybGVuIChjZmlsZSAtPiB0b2tl
bl9saW5lKSkpOwotCQlJR05PUkVfUkVUKHdyaXRlKFNUREVSUl9GSUxFTk8sICJcbiIsIDEpKTsK
KwkJSUdOT1JFX1JFVCh3cml0ZV9sb29wIChTVERFUlJfRklMRU5PLCAiXG4iLCAxKSk7CiAJCWlm
IChjZmlsZSAtPiBsZXhjaGFyIDwgODEpCi0JCQlJR05PUkVfUkVUKHdyaXRlKFNUREVSUl9GSUxF
Tk8sIGxleGJ1ZiwgbGl4KSk7Ci0JCUlHTk9SRV9SRVQod3JpdGUoU1RERVJSX0ZJTEVOTywgIl5c
biIsIDIpKTsKKwkJCUlHTk9SRV9SRVQod3JpdGVfbG9vcCAoU1RERVJSX0ZJTEVOTywgbGV4YnVm
LCBsaXgpKTsKKwkJSUdOT1JFX1JFVCh3cml0ZV9sb29wIChTVERFUlJfRklMRU5PLCAiXlxuIiwg
MikpOwogCX0KIAogCWNmaWxlIC0+IHdhcm5pbmdzX29jY3VycmVkID0gMTsKZGlmZiAtLWdpdCBh
L2NvbW1vbi9wcmludC5jIGIvY29tbW9uL3ByaW50LmMKaW5kZXggNDQ2ZGU3OC4uOTY5ZjhhYiAx
MDA2NDQKLS0tIGEvY29tbW9uL3ByaW50LmMKKysrIGIvY29tbW9uL3ByaW50LmMKQEAgLTQzNyw3
ICs0MzcsNyBAQCBjaGFyICpwcmludF9kZWNfMSAodmFsKQogCXVuc2lnbmVkIGxvbmcgdmFsOwog
ewogCXN0YXRpYyBjaGFyIHZidWYgWzMyXTsKLQlzcHJpbnRmICh2YnVmLCAiJWx1IiwgdmFsKTsK
KwlzbnByaW50ZiAodmJ1Ziwgc2l6ZW9mKHZidWYpLCAiJWx1IiwgdmFsKTsKIAlyZXR1cm4gdmJ1
ZjsKIH0KIApAQCAtNDQ1LDcgKzQ0NSw3IEBAIGNoYXIgKnByaW50X2RlY18yICh2YWwpCiAJdW5z
aWduZWQgbG9uZyB2YWw7CiB7CiAJc3RhdGljIGNoYXIgdmJ1ZiBbMzJdOwotCXNwcmludGYgKHZi
dWYsICIlbHUiLCB2YWwpOworCXNucHJpbnRmICh2YnVmLCBzaXplb2YodmJ1ZiksICIlbHUiLCB2
YWwpOwogCXJldHVybiB2YnVmOwogfQogCkBAIC00NzgsNyArNDc4LDcgQEAgc3RhdGljIHVuc2ln
bmVkIHByaW50X3N1YmV4cHJlc3Npb24gKGV4cHIsIGJ1ZiwgbGVuKQogCSAgICAgIGNhc2UgZXhw
cl9jaGVjazoKIAkJcnYgPSAxMCArIHN0cmxlbiAoZXhwciAtPiBkYXRhLmNoZWNrIC0+IG5hbWUp
OwogCQlpZiAobGVuID4gcnYpIHsKLQkJCXNwcmludGYgKGJ1ZiwgIihjaGVjayAlcykiLAorCQkJ
c25wcmludGYgKGJ1ZiwgbGVuLCAiKGNoZWNrICVzKSIsCiAJCQkJIGV4cHIgLT4gZGF0YS5jaGVj
ayAtPiBuYW1lKTsKIAkJCXJldHVybiBydjsKIAkJfQpAQCAtNTg1LDcgKzU4NSw3IEBAIHN0YXRp
YyB1bnNpZ25lZCBwcmludF9zdWJleHByZXNzaW9uIChleHByLCBidWYsIGxlbikKIAkgICAgICBj
YXNlIGV4cHJfaG9zdF9sb29rdXA6CiAJCXJ2ID0gMTUgKyBzdHJsZW4gKGV4cHIgLT4gZGF0YS5o
b3N0X2xvb2t1cCAtPiBob3N0bmFtZSk7CiAJCWlmIChsZW4gPiBydikgewotCQkJc3ByaW50ZiAo
YnVmLCAiKGRucy1sb29rdXAgJXMpIiwKKwkJCXNucHJpbnRmIChidWYsIGxlbiwgIihkbnMtbG9v
a3VwICVzKSIsCiAJCQkJIGV4cHIgLT4gZGF0YS5ob3N0X2xvb2t1cCAtPiBob3N0bmFtZSk7CiAJ
CQlyZXR1cm4gcnY7CiAJCX0KQEAgLTY2OSw3ICs2NjksNyBAQCBzdGF0aWMgdW5zaWduZWQgcHJp
bnRfc3ViZXhwcmVzc2lvbiAoZXhwciwgYnVmLCBsZW4pCiAJCXJ2ID0gc3RybGVuIChzKSArIDIg
KyAoc3RybGVuIChleHByIC0+IGRhdGEub3B0aW9uIC0+IG5hbWUpICsKIAkJCSAgIHN0cmxlbiAo
ZXhwciAtPiBkYXRhLm9wdGlvbiAtPiB1bml2ZXJzZSAtPiBuYW1lKSk7CiAJCWlmIChsZW4gPiBy
dikgewotCQkJc3ByaW50ZiAoYnVmLCAiKG9wdGlvbiAlcy4lcykiLAorCQkJc25wcmludGYgKGJ1
ZiwgbGVuLCAiKG9wdGlvbiAlcy4lcykiLAogCQkJCSBleHByIC0+IGRhdGEub3B0aW9uIC0+IHVu
aXZlcnNlIC0+IG5hbWUsCiAJCQkJIGV4cHIgLT4gZGF0YS5vcHRpb24gLT4gbmFtZSk7CiAJCQly
ZXR1cm4gcnY7CkBAIC04MDUsNyArODA1LDcgQEAgc3RhdGljIHVuc2lnbmVkIHByaW50X3N1YmV4
cHJlc3Npb24gKGV4cHIsIGJ1ZiwgbGVuKQogCQlydiA9IDEwICsgKHN0cmxlbiAoZXhwciAtPiBk
YXRhLm9wdGlvbiAtPiBuYW1lKSArCiAJCQkgICBzdHJsZW4gKGV4cHIgLT4gZGF0YS5vcHRpb24g
LT4gdW5pdmVyc2UgLT4gbmFtZSkpOwogCQlpZiAobGVuID4gcnYpIHsKLQkJCXNwcmludGYgKGJ1
ZiwgIihleGlzdHMgJXMuJXMpIiwKKwkJCXNucHJpbnRmIChidWYsIGxlbiwgIihleGlzdHMgJXMu
JXMpIiwKIAkJCQkgZXhwciAtPiBkYXRhLm9wdGlvbiAtPiB1bml2ZXJzZSAtPiBuYW1lLAogCQkJ
CSBleHByIC0+IGRhdGEub3B0aW9uIC0+IG5hbWUpOwogCQkJcmV0dXJuIHJ2OwpAQCAtODE1LDcg
KzgxNSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBwcmludF9zdWJleHByZXNzaW9uIChleHByLCBidWYs
IGxlbikKIAkgICAgICBjYXNlIGV4cHJfdmFyaWFibGVfZXhpc3RzOgogCQlydiA9IDEwICsgc3Ry
bGVuIChleHByIC0+IGRhdGEudmFyaWFibGUpOwogCQlpZiAobGVuID4gcnYpIHsKLQkJCXNwcmlu
dGYgKGJ1ZiwgIihkZWZpbmVkICVzKSIsIGV4cHIgLT4gZGF0YS52YXJpYWJsZSk7CisJCQlzbnBy
aW50ZiAoYnVmLCBsZW4sCisJCQkJIihkZWZpbmVkICVzKSIsIGV4cHIgLT4gZGF0YS52YXJpYWJs
ZSk7CiAJCQlyZXR1cm4gcnY7CiAJCX0KIAkJYnJlYWs7CkBAIC04MjMsNyArODI0LDcgQEAgc3Rh
dGljIHVuc2lnbmVkIHByaW50X3N1YmV4cHJlc3Npb24gKGV4cHIsIGJ1ZiwgbGVuKQogCSAgICAg
IGNhc2UgZXhwcl92YXJpYWJsZV9yZWZlcmVuY2U6CiAJCXJ2ID0gc3RybGVuIChleHByIC0+IGRh
dGEudmFyaWFibGUpOwogCQlpZiAobGVuID4gcnYpIHsKLQkJCXNwcmludGYgKGJ1ZiwgIiVzIiwg
ZXhwciAtPiBkYXRhLnZhcmlhYmxlKTsKKwkJCXNucHJpbnRmIChidWYsIGxlbiwgIiVzIiwgZXhw
ciAtPiBkYXRhLnZhcmlhYmxlKTsKIAkJCXJldHVybiBydjsKIAkJfQogCQlicmVhazsKQEAgLTEx
MDYsNyArMTEwNyw3IEBAIGludCB0b2tlbl9pbmRlbnRfZGF0YV9zdHJpbmcgKEZJTEUgKmZpbGUs
IGludCBjb2wsIGludCBpbmRlbnQsCiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGRhdGEgLT4gbGVu
OyBpKyspIHsKLQkJc3ByaW50ZiAob2J1ZiwgIiUyLjJ4IiwgZGF0YSAtPiBkYXRhIFtpXSk7CisJ
CXNucHJpbnRmIChvYnVmLCBzaXplb2Yob2J1ZiksICIlMi4yeCIsIGRhdGEgLT4gZGF0YSBbaV0p
OwogCQljb2wgPSB0b2tlbl9wcmludF9pbmRlbnQgKGZpbGUsIGNvbCwgaW5kZW50LAogCQkJCQkg
IGkgPT0gMCA/IHByZWZpeCA6ICIiLAogCQkJCQkgIChpICsgMSA9PSBkYXRhIC0+IGxlbgpkaWZm
IC0tZ2l0IGEvY29tbW9uL3RyZWUuYyBiL2NvbW1vbi90cmVlLmMKaW5kZXggNTZkMjYyZi4uNzEz
MDgzOSAxMDA2NDQKLS0tIGEvY29tbW9uL3RyZWUuYworKysgYi9jb21tb24vdHJlZS5jCkBAIC03
MzgsOCArNzM4LDggQEAgaW50IGV2YWx1YXRlX2Ruc19leHByZXNzaW9uIChyZXN1bHQsIHBhY2tl
dCwgbGVhc2UsIGNsaWVudF9zdGF0ZSwgaW5fb3B0aW9ucywKIAkJCQkgICAgKCpyZXN1bHQpIC0+
IHJfZGF0YSA9CiAJCQkJCSAgICAoKnJlc3VsdCkgLT4gcl9kYXRhX2VwaGVtOwogCQkJCSAgICAv
KiVBdWRpdCUgMTYgYnl0ZXMgbWF4LiAlMjAwNC4wNi4xNyxTYWZlJSovCi0JCQkJICAgIHNwcmlu
dGYgKChjaGFyICopKCpyZXN1bHQpIC0+IHJfZGF0YV9lcGhlbSwKLQkJCQkJICAgICAiJXUuJXUu
JXUuJXUiLAorCQkJCSAgICBzbnByaW50ZiAoKGNoYXIgKikoKnJlc3VsdCkgLT4gcl9kYXRhX2Vw
aGVtLAorCQkJCQkgICAgIDE2LCAiJXUuJXUuJXUuJXUiLAogCQkJCQkgICAgIGRhdGEuZGF0YSBb
MF0gJiAweGZmLAogCQkJCQkgICAgIGRhdGEuZGF0YSBbMV0gJiAweGZmLAogCQkJCQkgICAgIGRh
dGEuZGF0YSBbMl0gJiAweGZmLApAQCAtMzQyOCw3ICszNDI4LDcgQEAgaW50IHdyaXRlX2V4cHJl
c3Npb24gKGZpbGUsIGV4cHIsIGNvbCwgaW5kZW50LCBmaXJzdHApCiAJCWNvbCA9IHdyaXRlX2V4
cHJlc3Npb24gKGZpbGUsIGV4cHIgLT4gZGF0YS5leHRyYWN0X2ludCwKIAkJCQkJY29sLCBpbmRl
bnQsIDEpOwogCQljb2wgPSB0b2tlbl9wcmludF9pbmRlbnQgKGZpbGUsIGNvbCwgc2NvbCwgIiIs
ICIgIiwgIiwiKTsKLQkJc3ByaW50ZiAob2J1ZiwgIiVkIiwgd2lkdGgpOworCQlzbnByaW50ZiAo
b2J1Ziwgc2l6ZW9mKG9idWYpLCAiJWQiLCB3aWR0aCk7CiAJCWNvbCA9IHRva2VuX3ByaW50X2lu
ZGVudCAoZmlsZSwgY29sLCBzY29sLCAiICIsICIiLCBvYnVmKTsKIAkJY29sID0gdG9rZW5fcHJp
bnRfaW5kZW50IChmaWxlLCBjb2wsIGluZGVudCwgIiIsICIiLCAiKSIpOwogCQlicmVhazsKQEAg
LTM0NTEsNyArMzQ1MSw3IEBAIGludCB3cml0ZV9leHByZXNzaW9uIChmaWxlLCBleHByLCBjb2ws
IGluZGVudCwgZmlyc3RwKQogCQljb2wgPSB3cml0ZV9leHByZXNzaW9uIChmaWxlLCBleHByIC0+
IGRhdGEuZXh0cmFjdF9pbnQsCiAJCQkJCWNvbCwgaW5kZW50LCAxKTsKIAkJY29sID0gdG9rZW5f
cHJpbnRfaW5kZW50IChmaWxlLCBjb2wsIHNjb2wsICIiLCAiICIsICIsIik7Ci0JCXNwcmludGYg
KG9idWYsICIlZCIsIHdpZHRoKTsKKwkJc25wcmludGYgKG9idWYsIHNpemVvZihvYnVmKSwgIiVk
Iiwgd2lkdGgpOwogCQljb2wgPSB0b2tlbl9wcmludF9pbmRlbnQgKGZpbGUsIGNvbCwgc2NvbCwg
IiAiLCAiIiwgb2J1Zik7CiAJCWNvbCA9IHRva2VuX3ByaW50X2luZGVudCAoZmlsZSwgY29sLCBp
bmRlbnQsICIiLCAiIiwKIAkJCQkJICAiKSIpOwpAQCAtMzQ2Niw3ICszNDY2LDcgQEAgaW50IHdy
aXRlX2V4cHJlc3Npb24gKGZpbGUsIGV4cHIsIGNvbCwgaW5kZW50LCBmaXJzdHApCiAJCWdvdG8g
ZW5jb2RlX2ludDsKIAogCSAgICAgIGNhc2UgZXhwcl9jb25zdF9pbnQ6Ci0JCXNwcmludGYgKG9i
dWYsICIlbHUiLCBleHByIC0+IGRhdGEuY29uc3RfaW50KTsKKwkJc25wcmludGYgKG9idWYsIHNp
emVvZihvYnVmKSwgIiVsdSIsIGV4cHIgLT4gZGF0YS5jb25zdF9pbnQpOwogCQljb2wgPSB0b2tl
bl9wcmludF9pbmRlbnQgKGZpbGUsIGNvbCwgaW5kZW50LCAiIiwgIiIsIG9idWYpOwogCQlicmVh
azsKIApAQCAtMzYxNSwxMSArMzYxNSwxMSBAQCBpbnQgd3JpdGVfZXhwcmVzc2lvbiAoZmlsZSwg
ZXhwciwgY29sLCBpbmRlbnQsIGZpcnN0cCkKIAkJY29sID0gdG9rZW5fcHJpbnRfaW5kZW50IChm
aWxlLCBjb2wsIGluZGVudCwgIiAiLCAiIiwKIAkJCQkJICAiKCIpOwogCQlzY29sID0gY29sOwot
CQlzcHJpbnRmIChvYnVmLCAiJWQiLCBleHByIC0+IGRhdGEubnNfYWRkLnJyY2xhc3MpOworCQlz
bnByaW50ZiAob2J1Ziwgc2l6ZW9mKG9idWYpLCAiJWQiLCBleHByIC0+IGRhdGEubnNfYWRkLnJy
Y2xhc3MpOwogCQljb2wgPSB0b2tlbl9wcmludF9pbmRlbnQgKGZpbGUsIGNvbCwgc2NvbCwgIiIs
ICIiLCBvYnVmKTsKIAkJY29sID0gdG9rZW5fcHJpbnRfaW5kZW50IChmaWxlLCBjb2wsIHNjb2ws
ICIiLCAiICIsCiAJCQkJCSAgIiwiKTsKLQkJc3ByaW50ZiAob2J1ZiwgIiVkIiwgZXhwciAtPiBk
YXRhLm5zX2FkZC5ycnR5cGUpOworCQlzbnByaW50ZiAob2J1Ziwgc2l6ZW9mKG9idWYpLCAiJWQi
LCBleHByIC0+IGRhdGEubnNfYWRkLnJydHlwZSk7CiAJCWNvbCA9IHRva2VuX3ByaW50X2luZGVu
dCAoZmlsZSwgY29sLCBzY29sLCAiIiwgIiIsIG9idWYpOwogCQljb2wgPSB0b2tlbl9wcmludF9p
bmRlbnQgKGZpbGUsIGNvbCwgc2NvbCwgIiIsICIgIiwKIAkJCQkJICAiLCIpOwpAQCAtMzY0NCwx
MSArMzY0NCwxMSBAQCBpbnQgd3JpdGVfZXhwcmVzc2lvbiAoZmlsZSwgZXhwciwgY29sLCBpbmRl
bnQsIGZpcnN0cCkKIAkJCQkJICAiKCIpOwogCSAgICAgIGZpbmlzaF9uc19zbWFsbDoKIAkJc2Nv
bCA9IGNvbDsKLQkJc3ByaW50ZiAob2J1ZiwgIiVkIiwgZXhwciAtPiBkYXRhLm5zX2FkZC5ycmNs
YXNzKTsKKwkJc25wcmludGYgKG9idWYsIHNpemVvZihvYnVmKSwgIiVkIiwgZXhwciAtPiBkYXRh
Lm5zX2FkZC5ycmNsYXNzKTsKIAkJY29sID0gdG9rZW5fcHJpbnRfaW5kZW50IChmaWxlLCBjb2ws
IHNjb2wsICIiLCAiIiwgb2J1Zik7CiAJCWNvbCA9IHRva2VuX3ByaW50X2luZGVudCAoZmlsZSwg
Y29sLCBzY29sLCAiIiwgIiAiLAogCQkJCQkgICIsIik7Ci0JCXNwcmludGYgKG9idWYsICIlZCIs
IGV4cHIgLT4gZGF0YS5uc19hZGQucnJ0eXBlKTsKKwkJc25wcmludGYgKG9idWYsIHNpemVvZihv
YnVmKSwgIiVkIiwgZXhwciAtPiBkYXRhLm5zX2FkZC5ycnR5cGUpOwogCQljb2wgPSB0b2tlbl9w
cmludF9pbmRlbnQgKGZpbGUsIGNvbCwgc2NvbCwgIiIsICIiLCBvYnVmKTsKIAkJY29sID0gdG9r
ZW5fcHJpbnRfaW5kZW50IChmaWxlLCBjb2wsIHNjb2wsICIiLCAiICIsCiAJCQkJCSAgIiwiKTsK
ZGlmZiAtLWdpdCBhL2NvbW1vbi91cGYuYyBiL2NvbW1vbi91cGYuYwppbmRleCA4OWMyMTdhLi4x
MTY0NDliIDEwMDY0NAotLS0gYS9jb21tb24vdXBmLmMKKysrIGIvY29tbW9uL3VwZi5jCkBAIC04
MCw3ICs4MCw3IEBAIGludCBpZl9yZWdpc3Rlcl91cGYgKGluZm8pCiAJLyogT3BlbiBhIFVQRiBk
ZXZpY2UgKi8KIAlmb3IgKGIgPSAwOyAxOyBiKyspIHsKIAkJLyogJUF1ZGl0JSBDYW5ub3QgZXhj
ZWVkIDM2IGJ5dGVzLiAlMjAwNC4wNi4xNyxTYWZlJSAqLwotCQlzcHJpbnRmKGZpbGVuYW1lLCAi
L2Rldi9wZi9wZmlsdCVkIiwgYik7CisJCXNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5h
bWUpLCAiL2Rldi9wZi9wZmlsdCVkIiwgYik7CiAKIAkJc29jayA9IG9wZW4gKGZpbGVuYW1lLCBP
X1JEV1IsIDApOwogCQlpZiAoc29jayA8IDApIHsKZGlmZiAtLWdpdCBhL2RoY3BjdGwvZGhjcGN0
bC4zIGIvZGhjcGN0bC9kaGNwY3RsLjMKaW5kZXggMzUyYmYzYi4uODgwMjg1ZCAxMDA2NDQKLS0t
IGEvZGhjcGN0bC9kaGNwY3RsLjMKKysrIGIvZGhjcGN0bC9kaGNwY3RsLjMKQEAgLTQzLDcgKzQz
LDggQEAKIC5cIgogLlwiCiAuU2ggU1lOT1BTSVMKLS5GZCAjaW5jbHVkZSA8ZGhjcGN0bC9kaGNw
Y3RsLmg+CisuRmQgI2luY2x1ZGUgPGRoY3BjdGwuaD4KKy5zcAogLkZ0IGRoY3BjdGxfc3RhdHVz
CiAuRm8gZGhjcGN0bF9pbml0aWFsaXplCiAuRmEgdm9pZApAQCAtNDI2LDcgKzQyNyw3IEBAIHRo
YXQgbW9zdCBlcnJvciBjaGVja2luZyBoYXMgYmVlbiBvbW1pdHRlZCBmb3IgYnJldml0eS4KICNp
bmNsdWRlIDxuZXRpbmV0L2luLmg+CiAKICNpbmNsdWRlIDxpc2MvcmVzdWx0Lmg+Ci0jaW5jbHVk
ZSA8ZGhjcGN0bC9kaGNwY3RsLmg+CisjaW5jbHVkZSA8ZGhjcGN0bC5oPgogCiBpbnQgbWFpbiAo
aW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CiAJZGhjcGN0bF9kYXRhX3N0cmluZyBpcGFkZHJzdHJp
bmcgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZGhjcGN0bC9vbXNoZWxsLmMgYi9kaGNwY3RsL29tc2hl
bGwuYwppbmRleCA0ZGU2MTE5Li45ZmUwZDZiIDEwMDY0NAotLS0gYS9kaGNwY3RsL29tc2hlbGwu
YworKysgYi9kaGNwY3RsL29tc2hlbGwuYwpAQCAtMTg0LDcgKzE4NCw3IEBAIGludCBtYWluIChp
bnQgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnZwKQogCSAgICBjaGVjayhzdGF0dXMsICJu
ZXdfcGFyc2UoKSIpOwogCSAgICAKIAkgICAgdG9rZW4gPSBuZXh0X3Rva2VuICgmdmFsLCAodW5z
aWduZWQgKikwLCBjZmlsZSk7Ci0JICAgIHN3aXRjaCAodG9rZW4pIHsKKwkgICAgc3dpdGNoICgo
aW50KSB0b2tlbikgewogCQkgIGRlZmF1bHQ6CiAJCSAgICBwYXJzZV93YXJuIChjZmlsZSwgInVu
a25vd24gdG9rZW46ICVzIiwgdmFsKTsKIAkJICAgIHNraXBfdG9fc2VtaSAoY2ZpbGUpOwpkaWZm
IC0tZ2l0IGEvZHN0L01ha2VmaWxlLmRpc3QgYi9kc3QvTWFrZWZpbGUuZGlzdAppbmRleCBmZmU3
ZTRlLi45MjgyZTU5IDEwMDY0NAotLS0gYS9kc3QvTWFrZWZpbGUuZGlzdAorKysgYi9kc3QvTWFr
ZWZpbGUuZGlzdApAQCAtMzAsNyArMzAsOSBAQCBDRkxBR1MgPSAkKERFQlVHKSAkKFBSRURFRklO
RVMpICQoSU5DTFVERVMpICQoQ09QVFMpIC1ESE1BQ19NRDUgLURNSU5JUkVTX0xJQgogCiBhbGw6
CWxpYmRzdC5hCiAKLWluc3RhbGw6CitpbnN0YWxsOiBhbGwKKwlta2RpciAtcCAkKERFU1RESVIp
JChMSUJESVIpCisJJChJTlNUQUxMKSBsaWJkc3QuYSAkKERFU1RESVIpJChMSUJESVIpLwogCiBs
aWJkc3QuYToJJChPQkopCiAJcm0gLWYgZHN0LmEKZGlmZiAtLWdpdCBhL2RzdC9kc3RfYXBpLmMg
Yi9kc3QvZHN0X2FwaS5jCmluZGV4IDY0MTE0Y2IuLmZmMzk2ZjIgMTAwNjQ0Ci0tLSBhL2RzdC9k
c3RfYXBpLmMKKysrIGIvZHN0L2RzdF9hcGkuYwpAQCAtNDQwLDYgKzQ0MCw3IEBAIGRzdF9zX3dy
aXRlX3ByaXZhdGVfa2V5KGNvbnN0IERTVF9LRVkgKmtleSkKIAkJaWYgKChubiA9IGZ3cml0ZShl
bmNvZGVkX2Jsb2NrLCAxLCBsZW4sIGZwKSkgIT0gbGVuKSB7CiAJCQlFUkVQT1JUKCgiZHN0X3dy
aXRlX3ByaXZhdGVfa2V5KCk6IFdyaXRlIGZhaWx1cmUgb24gJXMgJWQgIT0gJWQgZXJybm89JWRc
biIsCiAJCQkJIGZpbGUsIG91dF9sZW4sIG5uLCBlcnJubykpOworCQkJZmNsb3NlKGZwKTsKIAkJ
CXJldHVybiAoLTUpOwogCQl9CiAJCWZjbG9zZShmcCk7CkBAIC01MjYsNiArNTI3LDcgQEAgZHN0
X3NfcmVhZF9wdWJsaWNfa2V5KGNvbnN0IGNoYXIgKmluX25hbWUsIGNvbnN0IHVuc2lnbmVkIGlu
X2lkLCBpbnQgaW5fYWxnKQogCS8qIExvY2F0ZSBhbmQgc2tpcCAiS0VZIiAqLwogCWlmIChjICE9
ICdLJyAmJiBjICE9ICdrJykgewogCQlFUkVQT1JUKCgiXCJLRVlcIiBkb2Vzbid0IGFwcGVhciBp
biBmaWxlOiAlcyIsIG5hbWUpKTsKKwkJZmNsb3NlKGZwKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQog
CXdoaWxlICgoYyA9IGdldGMoZnApKSAhPSBFT0YpCkBAIC01NDIsMTIgKzU0MiwxNCBAQAogCWlm
IChmc2NhbmYoZnAsICIlZCAlZCAlZCIsICZmbGFncywgJnByb3RvLCAmYWxnKSAhPSAzKSB7CiAJ
CUVSRVBPUlQoKCJkc3RfcmVhZF9wdWJsaWNfa2V5KCk6IENhbiBub3QgcmVhZCBmbGFnL3Byb3Rv
L2FsZyBmaWVsZCBmcm9tICVzXG4iCiAJCQkgLG5hbWUpKTsKKwkJZmNsb3NlKGZwKTsKIAkJcmV0
dXJuIChOVUxMKTsKIAl9CiAJLyogcmVhZCBpbiB0aGUga2V5IHN0cmluZyAqLwogCWlmICgoZmdl
dHMoZW5ja2V5LCBzaXplb2YoZW5ja2V5KSwgZnApID09IE5VTEwpICYmCiAJICAgIChmZXJyb3Io
ZnApICE9IDApKSB7CiAJCUVSRVBPUlQoKCJkc3RfcmVhZF9wdWJsaWNfa2V0eSgpOiBFcnJvciBy
ZWFkaW5nIGtleVxuIikpOworCQlmY2xvc2UoZnApOwogCQlyZXR1cm4gKE5VTEwpOwogCX0KIApA
QCAtNTUxLDYgKzU1OCw3IEBAIGRzdF9zX3JlYWRfcHVibGljX2tleShjb25zdCBjaGFyICppbl9u
YW1lLCBjb25zdCB1bnNpZ25lZCBpbl9pZCwgaW50IGluX2FsZykKIAkJCWJyZWFrOwogCWlmICgh
ZmVvZihmcCkpIHsKIAkJRVJFUE9SVCgoIktleSB0b28gbG9uZyBpbiBmaWxlOiAlcyIsIG5hbWUp
KTsKKwkJZmNsb3NlKGZwKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCWZjbG9zZShmcCk7CmRpZmYg
LS1naXQgYS9kc3QvZHN0X3N1cHBvcnQuYyBiL2RzdC9kc3Rfc3VwcG9ydC5jCmluZGV4IDU4MTQ0
NWIuLmE4YzFiYTggMTAwNjQ0Ci0tLSBhL2RzdC9kc3Rfc3VwcG9ydC5jCisrKyBiL2RzdC9kc3Rf
c3VwcG9ydC5jCkBAIC00MTgsOCArNDE4LDggQEAgZHN0X3NfYnVpbGRfZmlsZW5hbWUoY2hhciAq
ZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGlkLAogCWlmIChmaWxlbmFtZV9s
ZW5ndGggPCAxICsgc3RybGVuKG5hbWUpICsgNCArIDYgKyAxICsgc3RybGVuKHN1ZmZpeCkpCiAJ
CXJldHVybiAoLTEpOwogCW15X2lkID0gaWQ7Ci0Jc3ByaW50ZihmaWxlbmFtZSwgIkslcyslMDNk
KyUwNWQuJXMiLCBuYW1lLCBhbGcsIG15X2lkLAotCQkoY29uc3QgY2hhciAqKSBzdWZmaXgpOwor
CXNucHJpbnRmKGZpbGVuYW1lLCBmaWxlbmFtZV9sZW5ndGgsICJLJXMrJTAzZCslMDVkLiVzIiwK
KwkJbmFtZSwgYWxnLCBteV9pZCwgKGNvbnN0IGNoYXIgKikgc3VmZml4KTsKIAlpZiAoc3RycmNo
cihmaWxlbmFtZSwgJy8nKSkKIAkJcmV0dXJuICgtMSk7CiAJaWYgKHN0cnJjaHIoZmlsZW5hbWUs
ICdcXCcpKQpkaWZmIC0tZ2l0IGEvZHN0L2htYWNfbGluay5jIGIvZHN0L2htYWNfbGluay5jCmlu
ZGV4IDkwYjkyZTIuLmFkOTVjN2EgMTAwNjQ0Ci0tLSBhL2RzdC9obWFjX2xpbmsuYworKysgYi9k
c3QvaG1hY19saW5rLmMKQEAgLTI4MCw3ICsyODAsNyBAQCBkc3RfaG1hY19tZDVfa2V5X3RvX2Zp
bGVfZm9ybWF0KGNvbnN0IERTVF9LRVkgKmRrZXksIGNoYXIgKmJ1ZmYsCiAJaGtleSA9IChITUFD
X0tleSAqKSBka2V5LT5ka19LRVlfc3RydWN0OwogCW1lbXNldChidWZmLCAwLCBidWZmX2xlbik7
CS8qIGp1c3QgaW4gY2FzZSAqLwogCS8qIHdyaXRlIGZpbGUgaGVhZGVyICovCi0Jc3ByaW50Zihi
dWZmLCBrZXlfZmlsZV9mbXRfc3RyLCBLRVlfRklMRV9GT1JNQVQsIEtFWV9ITUFDX01ENSwgIkhN
QUMiKTsKKwlzbnByaW50ZihidWZmLCBidWZmX2xlbiwga2V5X2ZpbGVfZm10X3N0ciwgS0VZX0ZJ
TEVfRk9STUFULCBLRVlfSE1BQ19NRDUsICJITUFDIik7CiAKIAlicCA9IChjaGFyICopIHN0cmNo
cihidWZmLCAnXDAnKTsKIAliX2xlbiA9IGJ1ZmZfbGVuIC0gKGJwIC0gYnVmZik7CmRpZmYgLS1n
aXQgYS9pbmNsdWRlcy9jZi9saW51eC5oIGIvaW5jbHVkZXMvY2YvbGludXguaAppbmRleCBhMjg2
MDg0Li5kMzdlMzM1IDEwMDY0NAotLS0gYS9pbmNsdWRlcy9jZi9saW51eC5oCisrKyBiL2luY2x1
ZGVzL2NmL2xpbnV4LmgKQEAgLTgzLDExICs4MywxMSBAQCBleHRlcm4gaW50IGhfZXJybm87CiAg
ICBkaXJlY3RvcnkuICovCiAKICNpZm5kZWYgX1BBVEhfREhDUERfREIKLSNkZWZpbmUgX1BBVEhf
REhDUERfREIJCSIvdmFyL3N0YXRlL2RoY3AvZGhjcGQubGVhc2VzIgorI2RlZmluZSBfUEFUSF9E
SENQRF9EQgkJIi9zdGF0ZS9kaGNwZC5sZWFzZXMiCiAjZW5kaWYKIAogI2lmbmRlZiBfUEFUSF9E
SENMSUVOVF9EQgotI2RlZmluZSBfUEFUSF9ESENMSUVOVF9EQgkiL3Zhci9zdGF0ZS9kaGNwL2Ro
Y2xpZW50LmxlYXNlcyIKKyNkZWZpbmUgX1BBVEhfREhDTElFTlRfREIJIi92YXIvbGliL2RoY3Av
ZGhjbGllbnQvc3RhdGUvZGhjbGllbnQubGVhc2VzIgogI2VuZGlmCiAKIC8qIFZhcmFyZ3Mgc3R1
ZmYuLi4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGVzL2RoY3BkLmggYi9pbmNsdWRlcy9kaGNwZC5o
CmluZGV4IGJhMjkxMWIuLmQ2YWNlYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGVzL2RoY3BkLmgKKysr
IGIvaW5jbHVkZXMvZGhjcGQuaApAQCAtMjY0MywzICsyNjQzLDYgQEAgT01BUElfT0JKRUNUX0FM
TE9DX0RFQ0wgKGRoY3BfZmFpbG92ZXJfbGluaywgZGhjcF9mYWlsb3Zlcl9saW5rX3QsCiAjZW5k
aWYgLyogRkFJTE9WRVJfUFJPVE9DT0wgKi8KIAogY29uc3QgY2hhciAqYmluZGluZ19zdGF0ZV9w
cmludCAoZW51bSBmYWlsb3Zlcl9zdGF0ZSk7CisKK2V4dGVybiB2b2lkIGRoY3BkX3ByaXZfbWlu
aW1pemUoY29uc3QgY2hhciAqc2VydmVyX3VzZXIsIGNvbnN0IGNoYXIgKnNlcnZlcl9qYWlsKTsK
K2V4dGVybiB2b2lkIGRoY3BkX3ByaXZfZHJvcChjb25zdCBjaGFyICpzZXJ2ZXJfdXNlciwgY29u
c3QgY2hhciAqc2VydmVyX2phaWwpOwpkaWZmIC0tZ2l0IGEvbWluaXJlcy9yZXNfbWt1cGRhdGUu
YyBiL21pbmlyZXMvcmVzX21rdXBkYXRlLmMKaW5kZXggMTlmMmQ1MC4uNTM3ZjYzNiAxMDA2NDQK
LS0tIGEvbWluaXJlcy9yZXNfbWt1cGRhdGUuYworKysgYi9taW5pcmVzL3Jlc19ta3VwZGF0ZS5j
CkBAIC0xMTEzLDE0ICsxMTEzLDE0IEBAIGNnZXRwcm90b2J5bnVtYmVyKGludCBwcm90bykgewkJ
CQkvKiBIb3N0IGJ5dGUgb3JkZXIuICovCiAKIGNvbnN0IGNoYXIgKgogcmVzX3Byb3RvY29sbmFt
ZShpbnQgbnVtKSB7Ci0Jc3RhdGljIGNoYXIgbnVtYmVyWzhdOworCXN0YXRpYyBjaGFyIG51bWJl
clsyICsgc2l6ZW9mKG51bSkgKiAzXTsKIAlzdHJ1Y3QgcHJvdG9lbnQgKnBwOwogCiAJaWYgKHBy
b3RvbGlzdCA9PSAoc3RydWN0IHZhbHVlbGlzdCAqKTApCiAJCXJlc19idWlsZHByb3RvbGlzdCgp
OwogCXBwID0gY2dldHByb3RvYnludW1iZXIobnVtKTsKIAlpZiAocHAgPT0gMCkgIHsKLQkJKHZv
aWQpIHNwcmludGYobnVtYmVyLCAiJWQiLCBudW0pOworCQkodm9pZCkgc25wcmludGYobnVtYmVy
LCBzaXplb2YobnVtYmVyKSwgIiVkIiwgbnVtKTsKIAkJcmV0dXJuIChudW1iZXIpOwogCX0KIAly
ZXR1cm4gKHBwLT5wX25hbWUpOwpAQCAtMTEyOCwxNCArMTEyOCwxNCBAQCByZXNfcHJvdG9jb2xu
YW1lKGludCBudW0pIHsKIAogY29uc3QgY2hhciAqCiByZXNfc2VydmljZW5hbWUodV9pbnQxNl90
IHBvcnQsIGNvbnN0IGNoYXIgKnByb3RvKSB7CS8qIEhvc3QgYnl0ZSBvcmRlci4gKi8KLQlzdGF0
aWMgY2hhciBudW1iZXJbOF07CisJc3RhdGljIGNoYXIgbnVtYmVyWzIgKyBzaXplb2YocG9ydCkg
KiAzXTsKIAlzdHJ1Y3Qgc2VydmVudCAqc3M7CiAKIAlpZiAoc2VydmljZWxpc3QgPT0gKHN0cnVj
dCB2YWx1ZWxpc3QgKikwKQogCQlyZXNfYnVpbGRzZXJ2aWNlbGlzdCgpOwogCXNzID0gY2dldHNl
cnZieXBvcnQoaHRvbnMocG9ydCksIHByb3RvKTsKIAlpZiAoc3MgPT0gMCkgIHsKLQkJKHZvaWQp
IHNwcmludGYobnVtYmVyLCAiJWQiLCBwb3J0KTsKKwkJKHZvaWQpIHNucHJpbnRmKG51bWJlciwg
c2l6ZW9mKG51bWJlciksICIlZCIsIHBvcnQpOwogCQlyZXR1cm4gKG51bWJlcik7CiAJfQogCXJl
dHVybiAoc3MtPnNfbmFtZSk7CmRpZmYgLS1naXQgYS9taW5pcmVzL3Jlc19xdWVyeS5jIGIvbWlu
aXJlcy9yZXNfcXVlcnkuYwppbmRleCA3YzM5MTJmLi4xNzBkOTk5IDEwMDY0NAotLS0gYS9taW5p
cmVzL3Jlc19xdWVyeS5jCisrKyBiL21pbmlyZXMvcmVzX3F1ZXJ5LmMKQEAgLTM3NSw3ICszNzUs
NyBAQCByZXNfbnF1ZXJ5ZG9tYWluKHJlc19zdGF0ZSBzdGF0cCwKIAkJCVJFU19TRVRfSF9FUlJO
TyhzdGF0cCwgTk9fUkVDT1ZFUlkpOwogCQkJcmV0dXJuIElTQ19SX05PU1BBQ0U7CiAJCX0KLQkJ
c3ByaW50ZihuYnVmLCAiJXMuJXMiLCBuYW1lLCBkb21haW4pOworCQlzbnByaW50ZihuYnVmLCBz
aXplb2YobmJ1ZiksICIlcy4lcyIsIG5hbWUsIGRvbWFpbik7CiAJfQogCXJldHVybiByZXNfbnF1
ZXJ5KHN0YXRwLAogCQkJICBsb25nbmFtZSwgY2xhc3MsIHR5cGUsIGFuc3dlciwgYW5zbGVuLCBh
bnNyZXQpOwpkaWZmIC0tZ2l0IGEvb21hcGlwL2Vycndhcm4uYyBiL29tYXBpcC9lcnJ3YXJuLmMK
aW5kZXggYmUwZTZkOC4uZjFkNzM0MyAxMDA2NDQKLS0tIGEvb21hcGlwL2Vycndhcm4uYworKysg
Yi9vbWFwaXAvZXJyd2Fybi5jCkBAIC01MSw2ICs1MSwyNSBAQCB2b2lkICgqbG9nX2NsZWFudXAp
ICh2b2lkKTsKIHN0YXRpYyBjaGFyIG1idWYgW0NWVF9CVUZfTUFYICsgMV07CiBzdGF0aWMgY2hh
ciBmYnVmIFtDVlRfQlVGX01BWCArIDFdOwogCitzdGF0aWMgc3NpemVfdAord3JpdGVfbG9vcCAo
aW50IGZkLCBjb25zdCBjaGFyICpidWZmZXIsIHNpemVfdCBjb3VudCkKK3sKKwlzc2l6ZV90IG9m
ZnNldCA9IDA7CisKKwl3aGlsZSAoY291bnQgPiAwKQorCXsKKwkJc3NpemVfdCBibG9jayA9IHdy
aXRlIChmZCwgJmJ1ZmZlcltvZmZzZXRdLCBjb3VudCk7CisKKwkJaWYgKGJsb2NrIDwgMCAmJiBl
cnJubyA9PSBFSU5UUikKKwkJCWNvbnRpbnVlOworCQlpZiAoYmxvY2sgPD0gMCkKKwkJCXJldHVy
biBvZmZzZXQgPyA6IGJsb2NrOworCQlvZmZzZXQgKz0gYmxvY2s7CisJCWNvdW50IC09IGJsb2Nr
OworCX0KKwlyZXR1cm4gb2Zmc2V0OworfQorCiAvKiBMb2cgYW4gZXJyb3IgbWVzc2FnZSwgdGhl
biBleGl0Li4uICovCiAKIHZvaWQgbG9nX2ZhdGFsIChjb25zdCBjaGFyICogZm10LCAuLi4gKQpA
QCAtNjcsMzMgKzg2LDMxIEBAIHZvaWQgbG9nX2ZhdGFsIChjb25zdCBjaGFyICogZm10LCAuLi4g
KQogICB2YV9lbmQgKGxpc3QpOwogCiAjaWZuZGVmIERFQlVHCi0gIHN5c2xvZyAobG9nX3ByaW9y
aXR5IHwgTE9HX0VSUiwgIiVzIiwgbWJ1Zik7CisgIGlmICgqbWJ1ZikKKwlzeXNsb2cgKGxvZ19w
cmlvcml0eSB8IExPR19FUlIsICIlcyIsIG1idWYpOwogI2VuZGlmCiAKICAgLyogQWxzbyBsb2cg
aXQgdG8gc3RkZXJyPyAqLwotICBpZiAobG9nX3BlcnJvcikgewotCSAgSUdOT1JFX1JFVCh3cml0
ZShTVERFUlJfRklMRU5PLCBtYnVmLCBzdHJsZW4gKG1idWYpKSk7Ci0JICBJR05PUkVfUkVUKHdy
aXRlKFNUREVSUl9GSUxFTk8sICJcbiIsIDEpKTsKKyAgaWYgKGxvZ19wZXJyb3IgJiYgKm1idWYp
IHsKKwkgIElHTk9SRV9SRVQod3JpdGVfbG9vcCAoU1RERVJSX0ZJTEVOTywgbWJ1Ziwgc3RybGVu
IChtYnVmKSkpOworCSAgSUdOT1JFX1JFVCh3cml0ZV9sb29wIChTVERFUlJfRklMRU5PLCAiXG4i
LCAxKSk7CiAgIH0KIAogI2lmICFkZWZpbmVkIChOT01JTlVNKQorICBsb2dfZXJyb3IgKCIlcyIs
ICJQbGVhc2Ugbm90ZSB0aGUgZm9sbG93aW5nIGJlZm9yZSByZXF1ZXN0aW5nIGhlbHA6Iik7CiAg
IGxvZ19lcnJvciAoIiVzIiwgIiIpOwotICBsb2dfZXJyb3IgKCJJZiB5b3UgZGlkIG5vdCBnZXQg
dGhpcyBzb2Z0d2FyZSBmcm9tIGZ0cC5pc2Mub3JnLCBwbGVhc2UiKTsKLSAgbG9nX2Vycm9yICgi
Z2V0IHRoZSBsYXRlc3QgZnJvbSBmdHAuaXNjLm9yZyBhbmQgaW5zdGFsbCB0aGF0IGJlZm9yZSIp
OwotICBsb2dfZXJyb3IgKCJyZXF1ZXN0aW5nIGhlbHAuIik7Ci0gIGxvZ19lcnJvciAoIiVzIiwg
IiIpOwotICBsb2dfZXJyb3IgKCJJZiB5b3UgZGlkIGdldCB0aGlzIHNvZnR3YXJlIGZyb20gZnRw
LmlzYy5vcmcgYW5kIGhhdmUgbm90Iik7Ci0gIGxvZ19lcnJvciAoInlldCByZWFkIHRoZSBSRUFE
TUUsIHBsZWFzZSByZWFkIGl0IGJlZm9yZSByZXF1ZXN0aW5nIGhlbHAuIik7Ci0gIGxvZ19lcnJv
ciAoIklmIHlvdSBpbnRlbmQgdG8gcmVxdWVzdCBoZWxwIGZyb20gdGhlIGRoY3Atc2VydmVyQGlz
Yy5vcmciKTsKLSAgbG9nX2Vycm9yICgibWFpbGluZyBsaXN0LCBwbGVhc2UgcmVhZCB0aGUgc2Vj
dGlvbiBvbiB0aGUgUkVBRE1FIGFib3V0Iik7Ci0gIGxvZ19lcnJvciAoInN1Ym1pdHRpbmcgYnVn
IHJlcG9ydHMgYW5kIHJlcXVlc3RzIGZvciBoZWxwLiIpOworICBsb2dfZXJyb3IgKCIlcyIsICJU
aGlzIHNvZnR3YXJlIGlzIGEgcGFydCBvZiB0aGUgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1
bSdzIERIQ1Agc3VpdGUiKTsKKyAgbG9nX2Vycm9yICgiJXMiLCAid2l0aCBtb2RpZmljYXRpb25z
IGZvciBBTFQgTGludXguIik7CisgIGxvZ19lcnJvciAoIiVzIiwgIlRoZSBJU0MgZm9sa3MgcXVp
dGUgcmVhc29uYWJseSByZXF1aXJlIHRoYXQgeW91IGRvIG5vdCBib3RoZXIgdGhlbSB3aXRoIik7
CisgIGxvZ19lcnJvciAoIiVzIiwgInF1ZXN0aW9ucyBvbiBzb2Z0d2FyZSB0aGF0IGluY2x1ZGVz
IHRoaXJkLXBhcnR5IG1vZGlmaWNhdGlvbnMgYW5kIG1pZ2h0Iik7CisgIGxvZ19lcnJvciAoIiVz
IiwgIm5vdCBiZSBiYXNlZCBvZmYgdGhlaXIgbGF0ZXN0IGNvZGUuICBIZW5jZSwgcGxlYXNlIGRp
cmVjdCBhbnkgcXVlc3Rpb25zIik7CisgIGxvZ19lcnJvciAoIiVzIiwgInRvIHRoZSBjb21tdW5p
dHlAIG1haWxpbmcgbGlzdCBpbnN0ZWFkOyB0aGUgc3Vic2NyaXB0aW9uIGluc3RydWN0aW9ucyIp
OworICBsb2dfZXJyb3IgKCIlcyIsICJhcmUgZ2l2ZW4gYXQgaHR0cDovL2xpc3RzLmFsdGxpbnV4
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2NvbW11bml0eSAuIik7CiAgIGxvZ19lcnJvciAoIiVzIiwg
IiIpOwotICBsb2dfZXJyb3IgKCJQbGVhc2UgZG8gbm90IHVuZGVyIGFueSBjaXJjdW1zdGFuY2Vz
IHNlbmQgcmVxdWVzdHMgZm9yIik7Ci0gIGxvZ19lcnJvciAoImhlbHAgZGlyZWN0bHkgdG8gdGhl
IGF1dGhvcnMgb2YgdGhpcyBzb2Z0d2FyZSAtIHBsZWFzZSIpOwotICBsb2dfZXJyb3IgKCJzZW5k
IHRoZW0gdG8gdGhlIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdCBhcyBkZXNjcmliZWQgaW4iKTsK
LSAgbG9nX2Vycm9yICgidGhlIFJFQURNRSBmaWxlLiIpOworICBsb2dfZXJyb3IgKCIlcyIsICJQ
bGVhc2UgYWxzbyByZWFkIHRoZSBTVVBQT1JUIHNlY3Rpb24gb24gdGhlIFJFQURNRSBhYm91dCIp
OworICBsb2dfZXJyb3IgKCIlcyIsICJzdWJtaXR0aW5nIGJ1ZyByZXBvcnRzIGFuZCByZXF1ZXN0
cyBmb3IgaGVscC4iKTsKICAgbG9nX2Vycm9yICgiJXMiLCAiIik7Ci0gIGxvZ19lcnJvciAoImV4
aXRpbmcuIik7CisgIGxvZ19lcnJvciAoIiVzIiwgImV4aXRpbmcuIik7CiAjZW5kaWYKICAgaWYg
KGxvZ19jbGVhbnVwKQogCSAgKCpsb2dfY2xlYW51cCkgKCk7CkBAIC0xMTYsMTIgKzEzMywxMyBA
QCBpbnQgbG9nX2Vycm9yIChjb25zdCBjaGFyICogZm10LCAuLi4pCiAgIHZhX2VuZCAobGlzdCk7
CiAKICNpZm5kZWYgREVCVUcKLSAgc3lzbG9nIChsb2dfcHJpb3JpdHkgfCBMT0dfRVJSLCAiJXMi
LCBtYnVmKTsKKyAgaWYgKCptYnVmKQorCXN5c2xvZyAobG9nX3ByaW9yaXR5IHwgTE9HX0VSUiwg
IiVzIiwgbWJ1Zik7CiAjZW5kaWYKIAotICBpZiAobG9nX3BlcnJvcikgewotCSAgSUdOT1JFX1JF
VCh3cml0ZShTVERFUlJfRklMRU5PLCBtYnVmLCBzdHJsZW4gKG1idWYpKSk7Ci0JICBJR05PUkVf
UkVUKHdyaXRlKFNUREVSUl9GSUxFTk8sICJcbiIsIDEpKTsKKyAgaWYgKGxvZ19wZXJyb3IgJiYg
Km1idWYpIHsKKwkgIElHTk9SRV9SRVQod3JpdGVfbG9vcCAoU1RERVJSX0ZJTEVOTywgbWJ1Ziwg
c3RybGVuIChtYnVmKSkpOworCSAgSUdOT1JFX1JFVCh3cml0ZV9sb29wIChTVERFUlJfRklMRU5P
LCAiXG4iLCAxKSk7CiAgIH0KIAogICByZXR1cm4gMDsKQEAgLTE0MywxMiArMTYxLDEzIEBAIGlu
dCBsb2dfaW5mbyAoY29uc3QgY2hhciAqZm10LCAuLi4pCiAgIHZhX2VuZCAobGlzdCk7CiAKICNp
Zm5kZWYgREVCVUcKLSAgc3lzbG9nIChsb2dfcHJpb3JpdHkgfCBMT0dfSU5GTywgIiVzIiwgbWJ1
Zik7CisgIGlmICgqbWJ1ZikKKwlzeXNsb2cgKGxvZ19wcmlvcml0eSB8IExPR19JTkZPLCAiJXMi
LCBtYnVmKTsKICNlbmRpZgogCi0gIGlmIChsb2dfcGVycm9yKSB7Ci0JICBJR05PUkVfUkVUKHdy
aXRlKFNUREVSUl9GSUxFTk8sIG1idWYsIHN0cmxlbiAobWJ1ZikpKTsKLQkgIElHTk9SRV9SRVQo
d3JpdGUoU1RERVJSX0ZJTEVOTywgIlxuIiwgMSkpOworICBpZiAobG9nX3BlcnJvciAmJiAqbWJ1
ZikgeworCSAgSUdOT1JFX1JFVCh3cml0ZV9sb29wIChTVERFUlJfRklMRU5PLCBtYnVmLCBzdHJs
ZW4gKG1idWYpKSk7CisJICBJR05PUkVfUkVUKHdyaXRlX2xvb3AgKFNUREVSUl9GSUxFTk8sICJc
biIsIDEpKTsKICAgfQogCiAgIHJldHVybiAwOwpAQCAtMTcwLDEyICsxODksMTMgQEAgaW50IGxv
Z19kZWJ1ZyAoY29uc3QgY2hhciAqZm10LCAuLi4pCiAgIHZhX2VuZCAobGlzdCk7CiAKICNpZm5k
ZWYgREVCVUcKLSAgc3lzbG9nIChsb2dfcHJpb3JpdHkgfCBMT0dfREVCVUcsICIlcyIsIG1idWYp
OworICBpZiAoKm1idWYpCisJc3lzbG9nIChsb2dfcHJpb3JpdHkgfCBMT0dfREVCVUcsICIlcyIs
IG1idWYpOwogI2VuZGlmCiAKLSAgaWYgKGxvZ19wZXJyb3IpIHsKLQkgIElHTk9SRV9SRVQod3Jp
dGUoU1RERVJSX0ZJTEVOTywgbWJ1Ziwgc3RybGVuIChtYnVmKSkpOwotCSAgSUdOT1JFX1JFVCh3
cml0ZShTVERFUlJfRklMRU5PLCAiXG4iLCAxKSk7CisgIGlmIChsb2dfcGVycm9yICYmICptYnVm
KSB7CisJICBJR05PUkVfUkVUKHdyaXRlX2xvb3AgKFNUREVSUl9GSUxFTk8sIG1idWYsIHN0cmxl
biAobWJ1ZikpKTsKKwkgIElHTk9SRV9SRVQod3JpdGVfbG9vcCAoU1RERVJSX0ZJTEVOTywgIlxu
IiwgMSkpOwogICB9CiAKICAgcmV0dXJuIDA7CkBAIC0yMzYsNyArMjU2LDcgQEAgY2hhciAqc3Ry
ZXJyb3IgKGVycikKIAlzdGF0aWMgY2hhciBlcnJidWYgWzEyOF07CiAKIAlpZiAoZXJyIDwgMCB8
fCBlcnIgPj0gc3lzX25lcnIpIHsKLQkJc3ByaW50ZiAoZXJyYnVmLCAiRXJyb3IgJWQiLCBlcnIp
OworCQlzbnByaW50ZiAoZXJyYnVmLCBzaXplb2YoZXJyYnVmKSwgIkVycm9yICVkIiwgZXJyKTsK
IAkJcmV0dXJuIGVycmJ1ZjsKIAl9CiAJcmV0dXJuIHN5c19lcnJsaXN0IFtlcnJdOwpkaWZmIC0t
Z2l0IGEvb21hcGlwL2lzY3ByaW50LmMgYi9vbWFwaXAvaXNjcHJpbnQuYwppbmRleCBkZTMzMWEx
Li5lM2U1ZTgwIDEwMDY0NAotLS0gYS9vbWFwaXAvaXNjcHJpbnQuYworKysgYi9vbWFwaXAvaXNj
cHJpbnQuYwpAQCAtMjMwLDcgKzIzMCw3IEBAIGlzY19wcmludF92c25wcmludGYoY2hhciAqc3Ry
LCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFwKSB7CiAJCQkJCQlo
ZWFkID0gIiI7CiAJCQkJCXRtcHVpID0gdG1waTsKIAkJCQl9Ci0JCQkJc3ByaW50ZihidWYsICIl
dSIsIHRtcHVpKTsKKwkJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXUiLCB0bXB1aSk7
CiAJCQkJZ290byBwcmludGludDsKIAkJCWNhc2UgJ28nOgogCQkJCWlmIChxKQpAQCAtMjM5LDcg
KzIzOSw3IEBAIGlzY19wcmludF92c25wcmludGYoY2hhciAqc3RyLCBzaXplX3Qgc2l6ZSwgY29u
c3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFwKSB7CiAJCQkJCXRtcHVpID0gdmFfYXJnKGFwLCBs
b25nIGludCk7CiAJCQkJZWxzZQogCQkJCQl0bXB1aSA9IHZhX2FyZyhhcCwgaW50KTsKLQkJCQlz
cHJpbnRmKGJ1ZiwgYWx0ID8gIiUjbyIKKwkJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBh
bHQgPyAiJSNvIgogCQkJCQkJIDogIiVvIiwgdG1wdWkpOwogCQkJCWdvdG8gcHJpbnRpbnQ7CiAJ
CQljYXNlICd1JzoKQEAgLTI0OSw3ICsyNDksNyBAQCBpc2NfcHJpbnRfdnNucHJpbnRmKGNoYXIg
KnN0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcCkgewogCQkJ
CQl0bXB1aSA9IHZhX2FyZyhhcCwgdW5zaWduZWQgbG9uZyBpbnQpOwogCQkJCWVsc2UKIAkJCQkJ
dG1wdWkgPSB2YV9hcmcoYXAsIHVuc2lnbmVkIGludCk7Ci0JCQkJc3ByaW50ZihidWYsICIldSIs
IHRtcHVpKTsKKwkJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXUiLCB0bXB1aSk7CiAJ
CQkJZ290byBwcmludGludDsKIAkJCWNhc2UgJ3gnOgogCQkJCWlmIChxKQpAQCAtMjYzLDcgKzI2
Myw3IEBAIGlzY19wcmludF92c25wcmludGYoY2hhciAqc3RyLCBzaXplX3Qgc2l6ZSwgY29uc3Qg
Y2hhciAqZm9ybWF0LCB2YV9saXN0IGFwKSB7CiAJCQkJCWlmIChwcmVjaXNpb24gPiAyKQogCQkJ
CQkJcHJlY2lzaW9uIC09IDI7CiAJCQkJfQotCQkJCXNwcmludGYoYnVmLCAiJXgiLCB0bXB1aSk7
CisJCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV4IiwgdG1wdWkpOwogCQkJCWdvdG8g
cHJpbnRpbnQ7CiAJCQljYXNlICdYJzoKIAkJCQlpZiAocSkKQEAgLTI3Nyw3ICsyNzcsNyBAQCBp
c2NfcHJpbnRfdnNucHJpbnRmKGNoYXIgKnN0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZv
cm1hdCwgdmFfbGlzdCBhcCkgewogCQkJCQlpZiAocHJlY2lzaW9uID4gMikKIAkJCQkJCXByZWNp
c2lvbiAtPSAyOwogCQkJCX0KLQkJCQlzcHJpbnRmKGJ1ZiwgIiVYIiwgdG1wdWkpOworCQkJCXNu
cHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlWCIsIHRtcHVpKTsKIAkJCQlnb3RvIHByaW50aW50
OwogCQkJcHJpbnRpbnQ6CiAJCQkJaWYgKHByZWNpc2lvbiAhPSAwIHx8IHdpZHRoICE9IDApIHsK
QEAgLTQwMyw3ICs0MDMsNyBAQCBpc2NfcHJpbnRfdnNucHJpbnRmKGNoYXIgKnN0ciwgc2l6ZV90
IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcCkgewogCQkJYnJlYWs7CiAJCWNh
c2UgJ3AnOgogCQkJdiA9IHZhX2FyZyhhcCwgdm9pZCAqKTsKLQkJCXNwcmludGYoYnVmLCAiJXAi
LCB2KTsKKwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcCIsIHYpOwogCQkJbGVuZ3Ro
ID0gc3RybGVuKGJ1Zik7CiAJCQlpZiAocHJlY2lzaW9uID4gbGVuZ3RoKQogCQkJCXplcm9wYWQg
PSBwcmVjaXNpb24gLSBsZW5ndGg7CkBAIC00NzksNyArNDc5LDcgQEAgaXNjX3ByaW50X3ZzbnBy
aW50ZihjaGFyICpzdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3Qg
YXApIHsKIAkJCSAqLwogCQkJaWYgKHByZWNpc2lvbiA+IDUxMikKIAkJCQlwcmVjaXNpb24gPSA1
MTI7Ci0JCQlzcHJpbnRmKGZtdCwgIiUlJXMlcy4lbHUlcyVjIiwgYWx0ID8gIiMiIDogIiIsCisJ
CQlzbnByaW50ZihmbXQsIHNpemVvZihmbXQpLCAiJSUlcyVzLiVsdSVzJWMiLCBhbHQgPyAiIyIg
OiAiIiwKIAkJCQlwbHVzID8gIisiIDogc3BhY2UgPyAiICIgOiAiIiwKIAkJCQlwcmVjaXNpb24s
IGwgPyAiTCIgOiAiIiwgKmZvcm1hdCk7CiAJCQlzd2l0Y2ggKCpmb3JtYXQpIHsKQEAgLTQ5MSwx
MiArNDkxLDEyIEBAIGlzY19wcmludF92c25wcmludGYoY2hhciAqc3RyLCBzaXplX3Qgc2l6ZSwg
Y29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFwKSB7CiAjaWZkZWYgSEFWRV9MT05HX0RPVUJM
RQogCQkJCWlmIChsKSB7CiAJCQkJCWxkYmwgPSB2YV9hcmcoYXAsIGxvbmcgZG91YmxlKTsKLQkJ
CQkJc3ByaW50ZihidWYsIGZtdCwgbGRibCk7CisJCQkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1
ZiksIGZtdCwgbGRibCk7CiAJCQkJfSBlbHNlCiAjZW5kaWYKIAkJCQl7CiAJCQkJCWRibCA9IHZh
X2FyZyhhcCwgZG91YmxlKTsKLQkJCQkJc3ByaW50ZihidWYsIGZtdCwgZGJsKTsKKwkJCQkJc25w
cmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBkYmwpOwogCQkJCX0KIAkJCQlsZW5ndGggPSBz
dHJsZW4oYnVmKTsKIAkJCQlpZiAod2lkdGggPiAwKSB7CmRpZmYgLS1naXQgYS9vbWFwaXAvcmVz
dWx0LmMgYi9vbWFwaXAvcmVzdWx0LmMKaW5kZXggMjI3NDY4OS4uZTU5OGUyNiAxMDA2NDQKLS0t
IGEvb21hcGlwL3Jlc3VsdC5jCisrKyBiL29tYXBpcC9yZXN1bHQuYwpAQCAtMTE0LDYgKzExNCw2
IEBAIGNvbnN0IGNoYXIgKmlzY19yZXN1bHRfdG90ZXh0IChpc2NfcmVzdWx0X3QgcmVzdWx0KQog
CiAJaWYgKHJlc3VsdCA+PSBJU0NfUl9TVUNDRVNTICYmIHJlc3VsdCA8IElTQ19SX05SRVNVTFRT
KQogCQlyZXR1cm4gdGV4dCBbcmVzdWx0XTsKLQlzcHJpbnRmKGVidWYsICJ1bmtub3duIGVycm9y
OiAlZCIsIHJlc3VsdCk7CisJc25wcmludGYoZWJ1Ziwgc2l6ZW9mKGVidWYpLCAidW5rbm93biBl
cnJvcjogJWQiLCByZXN1bHQpOwogCXJldHVybiBlYnVmOwogfQpkaWZmIC0tZ2l0IGEvcmVsYXkv
TWFrZWZpbGUuZGlzdCBiL3JlbGF5L01ha2VmaWxlLmRpc3QKaW5kZXggOGYxZGE5OC4uYjVmYzhj
NCAxMDA2NDQKLS0tIGEvcmVsYXkvTWFrZWZpbGUuZGlzdAorKysgYi9yZWxheS9NYWtlZmlsZS5k
aXN0CkBAIC04Myw2ICs4Myw2IEBAIGRoY3JlbGF5Lm1hbjg6CWRoY3JlbGF5LjgKIAkJLWUgInMj
UlVORElSIyQoVkFSUlVOKSMiIDwgZGhjcmVsYXkuOCA+ZGhjcmVsYXkubWFuOAogCiBkaGNyZWxh
eToJZGhjcmVsYXkubyAkKERIQ1BMSUIpCi0JJChDQykgJChMRkxBR1MpIC1vICQoUFJPRykgZGhj
cmVsYXkubyAkKERIQ1BMSUIpICQoTElCUykKKwkkKENDKSAtcGllICQoTEZMQUdTKSAtbyAkKFBS
T0cpIGRoY3JlbGF5Lm8gJChESENQTElCKSAkKExJQlMpIC1sY2FwCiAKICMgRGVwZW5kZW5jaWVz
IChzZW1pLWF1dG9tYXRpY2FsbHktZ2VuZXJhdGVkKQpkaWZmIC0tZ2l0IGEvcmVsYXkvZGhjcmVs
YXkuOCBiL3JlbGF5L2RoY3JlbGF5LjgKaW5kZXggMTE1ZDhhMy4uODJhZmYzNCAxMDA2NDQKLS0t
IGEvcmVsYXkvZGhjcmVsYXkuOAorKysgYi9yZWxheS9kaGNyZWxheS44CkBAIC03Nyw2ICs3Nywx
NCBAQCBkaGNyZWxheSAtIER5bmFtaWMgSG9zdCBDb25maWd1cmF0aW9uIFByb3RvY29sIFJlbGF5
IEFnZW50CiB8CiAuSSBkaXNjYXJkCiBdCitbCisuQiAtdQorLkkgdXNlcgorXQorWworLkIgLWoK
Ky5JIGNocm9vdC1kaXIKK10KIC5JIHNlcnZlcjAKIFsKIC5JIC4uLnNlcnZlck4KQEAgLTEzOSw2
ICsxNDcsMTEgQEAgVGhpcyBjYW4gYmUgdW5oZWxwZnVsIGluIGEgc3lzdGVtIHN0YXJ0dXAgc2Ny
aXB0IC0gdG8gZGlzYWJsZSB0aGlzCiBiZWhhdmlvdXIsIHNwZWNpZnkgdGhlCiAuQiAtcQogZmxh
Zy4KKy5QUAorVXBvbiBzdGFydHVwLCB0aGlzIHZlcnNpb24gb2YgZGhjcmVsYXkgd2lsbCBzd2l0
Y2ggdG8gYSBub24tcm9vdAorcHNldWRvLXVzZXIgYW5kIGVudGVyIGEgY2hyb290IGphaWwuICBU
aGUgZGVmYXVsdCB1c2VybmFtZSAoXGZJZGhjcmVsYXlcZlIpCithbmQgdGhlIGRlZmF1bHQgY2hy
b290IGphaWwgZGlyZWN0b3J5IHBhdGggKFxmSS92YXIvZW1wdHlcZlIpCittYXkgYmUgb3ZlcnJp
ZGRlbiB3aXRoIHRoZSBcZkItdVxmUiBhbmQgXGZCLWpcZlIgb3B0aW9ucywgcmVzcGVjdGl2ZWx5
LgogLlNIIFJFTEFZIEFHRU5UIElORk9STUFUSU9OIE9QVElPTlMKIElmIHRoZQogLkIgLWEKQEAg
LTIzOSw3ICsyNTIsMTIgQEAgaGFzIGJlZW4gd3JpdHRlbiBmb3IgSW50ZXJuZXQgU3lzdGVtcyBD
b25zb3J0aXVtCiBieSBUZWQgTGVtb24gaW4gY29vcGVyYXRpb24gd2l0aCBWaXhpZQogRW50ZXJw
cmlzZXMuICBUbyBsZWFybiBtb3JlIGFib3V0IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwK
IHNlZQotLkIgaHR0cHM6Ly93d3cuaXNjLm9yZy9pc2MuCisuQlIgaHR0cHM6Ly93d3cuaXNjLm9y
Zy9pc2MgLgogVG8gbGVhcm4gbW9yZSBhYm91dCBWaXhpZQogRW50ZXJwcmlzZXMsIHNlZQotLkIg
aHR0cDovL3d3dy52aXguY29tLgorLkJSIGh0dHA6Ly93d3cudml4LmNvbSAuCisuUFAKK1RoaXMg
dmVyc2lvbiBvZiBkaGNyZWxheSBoYXMgYmVlbiBtb2RpZmllZCBmb3IgQUxUIExpbnV4CisuUkIg
KCBodHRwOi8vd3d3LmFsdGxpbnV4LmNvbS8gKS4KK0luIHBhcnRpY3VsYXIsIHRoZSBwcml2aWxl
Z2UgcmVkdWN0aW9uIGZ1bmN0aW9uYWxpdHkgYW5kIHRoZSBcZkItdVxmUgorYW5kIFxmQi1qXGZS
IG9wdGlvbnMgYXJlIE9wZW53YWxsL0FMVCBMaW51eCBleHRlbnNpb25zLgpkaWZmIC0tZ2l0IGEv
cmVsYXkvZGhjcmVsYXkuYyBiL3JlbGF5L2RoY3JlbGF5LmMKaW5kZXggNWQxOWVjMi4uM2ViNjI5
ZCAxMDA2NDQKLS0tIGEvcmVsYXkvZGhjcmVsYXkuYworKysgYi9yZWxheS9kaGNyZWxheS5jCkBA
IC0xMjAsNiArMTIwLDggQEAKIAlpbnQgcXVpZXQgPSAwOwogCWlzY19yZXN1bHRfdCBzdGF0dXM7
CiAJY2hhciAqczsKKwljaGFyICpzZXJ2ZXJfdXNlciA9ICJkaGNyZWxheSI7CisJY2hhciAqc2Vy
dmVyX2phaWwgPSAiL3Zhci9lbXB0eSI7CiAKIAkvKiBNYWtlIHN1cmUgdGhhdCBmaWxlIGRlc2Ny
aXB0b3JzIDAgKHN0ZGluKSwgMSwgKHN0ZG91dCksIGFuZAogCSAgIDIgKHN0ZGVycikgYXJlIG9w
ZW4uIFRvIGRvIHRoaXMsIHdlIGFzc3VtZSB0aGF0IHdoZW4gd2UKQEAgLTEyOSwxMCArMTMxLDEy
IEBACiAJCWZkID0gb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKTsKIAlpZiAoZmQgPT0gMSkKIAkJ
ZmQgPSBvcGVuKCIvZGV2L251bGwiLCBPX1JEV1IpOwotCWlmIChmZCA9PSAyKQorCWlmIChmZCA9
PSAyKSB7CisJCWZkID0gb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKTsKIAkJbG9nX3BlcnJvciA9
IDA7IC8qIE5vIHNlbnNlIGxvZ2dpbmcgdG8gL2Rldi9udWxsLiAqLwotCWVsc2UgaWYgKGZkICE9
IC0xKQotCQljbG9zZShmZCk7CisJfQorCWlmIChmZCA8IDApCisJCWxvZ19mYXRhbCAoIkNhbid0
IG9wZW4gJXM6ICVtIiwgIi9kZXYvbnVsbCIpOwogCiAjaWZkZWYgU1lTTE9HXzRfMgogCW9wZW5s
b2cgKCJkaGNyZWxheSIsIExPR19OREVMQVkpOwpAQCAtMTg1LDYgKzE5MCwxNCBAQCBpbnQgbWFp
biAoYXJnYywgYXJndiwgZW52cCkKIAkJCQlsb2dfZmF0YWwoIiVzOiBwYWNrZXQgbGVuZ3RoIGV4
Y2VlZHMgIgogCQkJCQkgICJsb25nZXN0IHBvc3NpYmxlIE1UVVxuIiwKIAkJCQkJICBhcmd2W2ld
KTsKKwkJfSBlbHNlIGlmICghc3RyY21wIChhcmd2IFtpXSwgIi11IikpIHsKKwkJCWlmICgrK2kg
PT0gYXJnYykKKwkJCQl1c2FnZSAoKTsKKwkJCXNlcnZlcl91c2VyID0gYXJndltpXTsKKwkJfSBl
bHNlIGlmICghc3RyY21wIChhcmd2IFtpXSwgIi1qIikpIHsKKwkJCWlmICgrK2kgPT0gYXJnYykK
KwkJCQl1c2FnZSAoKTsKKwkJCXNlcnZlcl9qYWlsID0gYXJndltpXTsKIAkJfSBlbHNlIGlmICgh
c3RyY21wIChhcmd2IFtpXSwgIi1tIikpIHsKIAkJCWlmICgrK2kgPT0gYXJnYykKIAkJCQl1c2Fn
ZSAoKTsKQEAgLTIzOSw5ICsyNTIsOSBAQCBpbnQgbWFpbiAoYXJnYywgYXJndiwgZW52cCkKIAog
CWlmICghcXVpZXQpIHsKIAkJbG9nX2luZm8gKCIlcyAlcyIsIG1lc3NhZ2UsIERIQ1BfVkVSU0lP
Tik7Ci0JCWxvZ19pbmZvIChjb3B5cmlnaHQpOwotCQlsb2dfaW5mbyAoYXJyKTsKLQkJbG9nX2lu
Zm8gKHVybCk7CisJCWxvZ19pbmZvICgiJXMiLCBjb3B5cmlnaHQpOworCQlsb2dfaW5mbyAoIiVz
IiwgYXJyKTsKKwkJbG9nX2luZm8gKCIlcyIsIHVybCk7CiAJfSBlbHNlIHsKIAkJcXVpZXQgPSAw
OwogCQlsb2dfcGVycm9yID0gMDsKQEAgLTMxMCwxMiArMzIzLDE3IEBAIGludCBtYWluIChhcmdj
LCBhcmd2LCBlbnZwKQogCQkJfQkKIAkJfQogCi0JCWNsb3NlICgwKTsKLQkJY2xvc2UgKDEpOwot
CQljbG9zZSAoMik7CisJCWlmIChkdXAyIChmZCwgMCkgIT0gMCB8fAorCQkgICAgZHVwMiAoZmQs
IDEpICE9IDEgfHwKKwkJICAgIGR1cDIgKGZkLCAyKSAhPSAyKQorCQkJbG9nX2ZhdGFsKCJDYW4n
dCBkYWVtb25pemU6ICVtIik7CisJCWNsb3NlIChmZCk7CisJCWZkID0gLTE7CiAJCXBpZCA9IHNl
dHNpZCAoKTsKIAl9CiAKKwlkaGNwZF9wcml2X2Ryb3Aoc2VydmVyX3VzZXIsIHNlcnZlcl9qYWls
KTsKKwogCS8qIFN0YXJ0IGRpc3BhdGNoaW5nIHBhY2tldHMgYW5kIHRpbWVvdXRzLi4uICovCiAJ
ZGlzcGF0Y2ggKCk7CiAKQEAgLTQ1NSwxMCArNDczLDExIEBAIHZvaWQgcmVsYXkgKGlwLCBwYWNr
ZXQsIGxlbmd0aCwgZnJvbV9wb3J0LCBmcm9tLCBoZnJvbSkKIAogc3RhdGljIHZvaWQgdXNhZ2Ug
KCkKIHsKLQlsb2dfZmF0YWwgKCJVc2FnZTogZGhjcmVsYXkgWy1wIDxwb3J0Pl0gWy1kXSBbLURd
IFstaSAlcyVzJXMlcyIsCisJbG9nX2ZhdGFsICgiVXNhZ2U6IGRoY3JlbGF5IFstcCA8cG9ydD5d
IFstZF0gWy1EXSBbLWkgJXMlcyVzJXMlcyIsCiAJCSJpbnRlcmZhY2VdIFstcV0gWy1hXVxuICAg
ICAgICAgICAgICAgICIsCiAJCSJbLWMgY291bnRdIFstQSBsZW5ndGhdICIsCiAJCSJbLW0gYXBw
ZW5kfHJlcGxhY2V8Zm9yd2FyZHxkaXNjYXJkXVxuIiwKKwkJIlstdSB1c2VyXSBbLWogY2hyb290
LWRpcl1cbiIsCiAJCSIgICAgICAgICAgICAgICAgW3NlcnZlcjEgWy4uLiBzZXJ2ZXJOXV0iKTsK
IH0KIApkaWZmIC0tZ2l0IGEvc2VydmVyL01ha2VmaWxlLmRpc3QgYi9zZXJ2ZXIvTWFrZWZpbGUu
ZGlzdAppbmRleCBiN2QxMjE2Li45MjAyNDQxIDEwMDY0NAotLS0gYS9zZXJ2ZXIvTWFrZWZpbGUu
ZGlzdAorKysgYi9zZXJ2ZXIvTWFrZWZpbGUuZGlzdApAQCAtMTAzLDYgKzEwMyw2IEBAIGRoY3Bk
LmxlYXNlcy5tYW41OglkaGNwZC5sZWFzZXMuNQogCQktZSAicyNSVU5ESVIjJChWQVJSVU4pI2ci
IDwgZGhjcGQubGVhc2VzLjUgPmRoY3BkLmxlYXNlcy5tYW41CiAKIGRoY3BkOgkkKE9CSlMpICQo
Q09CSikgJChESENQTElCKQotCSQoQ0MpICQoTEZMQUdTKSAtbyBkaGNwZCAkKE9CSlMpICQoREhD
UExJQikgJChMSUJTKQorCSQoQ0MpIC1waWUgJChMRkxBR1MpIC1vIGRoY3BkICQoT0JKUykgJChE
SENQTElCKSAkKExJQlMpIC1sY2FwCiAKICMgRGVwZW5kZW5jaWVzIChzZW1pLWF1dG9tYXRpY2Fs
bHktZ2VuZXJhdGVkKQpkaWZmIC0tZ2l0IGEvc2VydmVyL2NvbmZwYXJzLmMgYi9zZXJ2ZXIvY29u
ZnBhcnMuYwppbmRleCBjYjEyMzk3Li5lNjU4ZWRkIDEwMDY0NAotLS0gYS9zZXJ2ZXIvY29uZnBh
cnMuYworKysgYi9zZXJ2ZXIvY29uZnBhcnMuYwpAQCAtMTAxMywxMCArMTAxMywxMyBAQCB2b2lk
IHBhcnNlX2ZhaWxvdmVyX3BlZXIgKGNmaWxlLCBncm91cCwgdHlwZSkKIAkJcGFyc2Vfd2FybiAo
Y2ZpbGUsICJwZWVyIGFkZHJlc3MgbWF5IG5vdCBiZSBvbWl0dGVkIik7CiAKIAkvKiBYWFggLSB3
aGVuL2lmIHdlIGdldCBhIHBvcnQgbnVtYmVyIGFzc2lnbmVkLCBqdXN0IHNldCBhcyBkZWZhdWx0
ICovCisJLyogU2VlIGh0dHA6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD0x
NjcyOTIKKwkgKiBJQU5BIHJlZ2lzdHJhdGlvbiBieSBCZXJuYXJkIFZvbHogPHZvbHogYXQgY2lz
Y28uY29tPgorCSAqLwogCWlmICghcGVlciAtPiBtZS5wb3J0KQotCQlwYXJzZV93YXJuIChjZmls
ZSwgImxvY2FsIHBvcnQgbWF5IG5vdCBiZSBvbWl0dGVkIik7CisJCXBlZXIgLT4gbWUucG9ydCA9
IDY0NzsKIAlpZiAoIXBlZXIgLT4gcGFydG5lci5wb3J0KQotCQlwYXJzZV93YXJuIChjZmlsZSwg
InBlZXIgcG9ydCBtYXkgbm90IGJlIG9taXR0ZWQiKTsKKwkJcGVlciAtPiBwYXJ0bmVyLnBvcnQg
PSA4NDc7CiAKIAlpZiAocGVlciAtPiBpX2FtID09IHByaW1hcnkpIHsKIAkgICAgaWYgKCFwZWVy
IC0+IGhiYSkgewpkaWZmIC0tZ2l0IGEvc2VydmVyL2RkbnMuYyBiL3NlcnZlci9kZG5zLmMKaW5k
ZXggN2MyZGY0Yi4uODNlMWU3NCAxMDA2NDQKLS0tIGEvc2VydmVyL2RkbnMuYworKysgYi9zZXJ2
ZXIvZGRucy5jCkBAIC00OTksNyArNDk5LDcgQEAgaW50IGRkbnNfdXBkYXRlcyAoc3RydWN0IHBh
Y2tldCAqcGFja2V0LAogCQkJZGRuc19yZXZfbmFtZS5kYXRhID0gZGRuc19yZXZfbmFtZS5idWZm
ZXIgLT4gZGF0YTsKIAogCQkJLyogJUF1ZGl0JSBDYW5ub3QgZXhjZWVkIDE3IGJ5dGVzLiAlMjAw
NC4wNi4xNyxTYWZlJSAqLwotCQkJc3ByaW50ZiAoKGNoYXIgKilkZG5zX3Jldl9uYW1lLmJ1ZmZl
ciAtPiBkYXRhLAorCQkJc25wcmludGYgKChjaGFyICopZGRuc19yZXZfbmFtZS5idWZmZXIgLT4g
ZGF0YSwgMTcsCiAJCQkJICAiJXUuJXUuJXUuJXUuIiwKIAkJCQkgIGxlYXNlIC0+IGlwX2FkZHIg
LiBpYWJ1ZlszXSAmIDB4ZmYsCiAJCQkJICBsZWFzZSAtPiBpcF9hZGRyIC4gaWFidWZbMl0gJiAw
eGZmLApAQCAtNzIxLDcgKzcyMSw3IEBAIGludCBkZG5zX3JlbW92YWxzIChzdHJ1Y3QgbGVhc2Ug
KmxlYXNlKQogCSAgICAgIHRyeV9yZXY6CiAJCWlmIChmaW5kX2JvdW5kX3N0cmluZyAoJmRkbnNf
cmV2X25hbWUsCiAJCQkJICAgICAgIGxlYXNlIC0+IHNjb3BlLCAiZGRucy1yZXYtbmFtZSIpKSB7
Ci0JCQlpZiAoZGRuc19yZW1vdmVfcHRyKCZkZG5zX3Jldl9uYW1lKSA9PSBOT0VSUk9SKSB7CisJ
CQlpZiAoZGRuc19yZW1vdmVfcHRyKCZkZG5zX3Jldl9uYW1lKSA9PSAoaXNjX3Jlc3VsdF90KSBO
T0VSUk9SKSB7CiAJCQkJdW5zZXQgKGxlYXNlIC0+IHNjb3BlLCAiZGRucy1yZXYtbmFtZSIpOwog
CQkJCWlmIChjbGllbnRfdXBkYXRlZCkKIAkJCQkJdW5zZXQgKGxlYXNlIC0+IHNjb3BlLApkaWZm
IC0tZ2l0IGEvc2VydmVyL2RoY3AuYyBiL3NlcnZlci9kaGNwLmMKaW5kZXggZjUwMmIxOS4uM2Rj
YjQ5ZCAxMDA2NDQKLS0tIGEvc2VydmVyL2RoY3AuYworKysgYi9zZXJ2ZXIvZGhjcC5jCkBAIC04
MSw3ICs4MSw3IEBAIHZvaWQgZGhjcCAocGFja2V0KQogCQkJcyA9IGRoY3BfdHlwZV9uYW1lc1tw
YWNrZXQtPnBhY2tldF90eXBlIC0gMV07CiAJCX0gZWxzZSB7CiAJCQkvKiAlQXVkaXQlIENhbm5v
dCBleGNlZWQgMjggYnl0ZXMuICUyMDA0LjA2LjE3LFNhZmUlICovCi0JCQlzcHJpbnRmKHR5cGVi
dWYsICJ0eXBlICVkIiwgcGFja2V0LT5wYWNrZXRfdHlwZSk7CisJCQlzbnByaW50Zih0eXBlYnVm
LCBzaXplb2YodHlwZWJ1ZiksICJ0eXBlICVkIiwgcGFja2V0LT5wYWNrZXRfdHlwZSk7CiAJCQlz
ID0gdHlwZWJ1ZjsKIAkJfQogCQkKQEAgLTQ0Nyw3ICs0NDcsNyBAQCB2b2lkIGRoY3ByZXF1ZXN0
IChwYWNrZXQsIG1zX251bGx0cCwgaXBfbGVhc2UpCiAJCS8qIHBpYWRkcigpIHNob3VsZCBub3Qg
cmV0dXJuIG1vcmUgdGhhbiBhIDE1IGJ5dGUgc3RyaW5nLgogCQkgKiBzYWZlLgogCQkgKi8KLQkJ
c3ByaW50ZiAoc21idWYsICIgKCVzKSIsIHBpYWRkciAoc2lwKSk7CisJCXNucHJpbnRmIChzbWJ1
Ziwgc2l6ZW9mKHNtYnVmKSwgIiAoJXMpIiwgcGlhZGRyIChzaXApKTsKIAkJaGF2ZV9zZXJ2ZXJf
aWRlbnRpZmllciA9IDE7CiAJfSBlbHNlCiAJCXNtYnVmIFswXSA9IDA7CkBAIC0xODAwLDYgKzE4
MDAsOCBAQCB2b2lkIGFja19sZWFzZSAocGFja2V0LCBsZWFzZSwgb2ZmZXIsIHdoZW4sIG1zZywg
bXNfbnVsbHRwLCBocCkKIAkJCQlob3N0X3JlZmVyZW5jZSAoJmhvc3QsIGgsIE1ETCk7CiAJCX0K
IAkJaWYgKCFob3N0KSB7CisJCQlpZiAoaHApCisJCQkJaG9zdF9kZXJlZmVyZW5jZSAoJmhwLCBN
REwpOwogCQkJZmluZF9ob3N0c19ieV9oYWRkciAoJmhwLAogCQkJCQkgICAgIHBhY2tldCAtPiBy
YXcgLT4gaHR5cGUsCiAJCQkJCSAgICAgcGFja2V0IC0+IHJhdyAtPiBjaGFkZHIsCmRpZmYgLS1n
aXQgYS9zZXJ2ZXIvZGhjcGQuOCBiL3NlcnZlci9kaGNwZC44CmluZGV4IGI2MzMzNmEuLjhmZjdi
NTAgMTAwNjQ0Ci0tLSBhL3NlcnZlci9kaGNwZC44CisrKyBiL3NlcnZlci9kaGNwZC44CkBAIC03
NCw2ICs3NCwxNCBAQCBkaGNwZCAtIER5bmFtaWMgSG9zdCBDb25maWd1cmF0aW9uIFByb3RvY29s
IFNlcnZlcgogLkkgdHJhY2UtcGxheWJhY2stZmlsZQogXQogWworLkIgLXUKKy5JIHVzZXIKK10K
K1sKKy5CIC1qCisuSSBjaHJvb3QtZGlyCitdCitbCiAuSSBpZjAKIFsKIC5JIC4uLmlmTgpAQCAt
MjM5LDYgKzI0NywxMiBAQCB1c2luZyB0aGUgXGZCLWxmXGZSIHN3aXRjaCwgc28gdGhhdCB0aGUg
REhDUCBzZXJ2ZXIgZG9lc24ndCB3aXBlIG91dAogeW91ciBleGlzdGluZyBsZWFzZSBmaWxlIHdp
dGggaXRzIHRlc3QgZGF0YS4gIFRoZSBESENQIHNlcnZlciB3aWxsCiByZWZ1c2UgdG8gb3BlcmF0
ZSBpbiBwbGF5YmFjayBtb2RlIHVubGVzcyB5b3Ugc3BlY2lmeSBhbiBhbHRlcm5hdGUKIGxlYXNl
IGZpbGUuCisuUFAKK1Vwb24gc3RhcnR1cCwgdGhpcyB2ZXJzaW9uIG9mIHRoZSBESENQIHNlcnZl
ciB3aWxsIHN3aXRjaCB0byBhIG5vbi1yb290Citwc2V1ZG8tdXNlciBhbmQgZW50ZXIgYSBjaHJv
b3QgamFpbC4gIFRoZSBkZWZhdWx0IHVzZXJuYW1lIChcZklkaGNwZFxmUikKK2FuZCB0aGUgZGVm
YXVsdCBjaHJvb3QgamFpbCBkaXJlY3RvcnkgcGF0aCAoXGZJL3Zhci9saWIvZGhjcC9kaGNwZFxm
UikKK21heSBiZSBvdmVycmlkZGVuIHdpdGggdGhlIFxmQi11XGZSIGFuZCBcZkItalxmUiBvcHRp
b25zLCByZXNwZWN0aXZlbHkuCisuUFAKIC5TSCBDT05GSUdVUkFUSU9OCiBUaGUgc3ludGF4IG9m
IHRoZSBkaGNwZC5jb25mKDUpIGZpbGUgaXMgZGlzY3Vzc2VkIHNlcGFyYXRlbHkuICAgVGhpcwog
c2VjdGlvbiBzaG91bGQgYmUgdXNlZCBhcyBhbiBvdmVydmlldyBvZiB0aGUgY29uZmlndXJhdGlv
biBwcm9jZXNzLApAQCAtNzQ2LDMgKzc2MCw4IEBAIENvbnNvcnRpdW0uICAgVmVyc2lvbiAzIG9m
IHRoZSBESENQIHNlcnZlciB3YXMgZnVuZGVkIGJ5IE5vbWludW0sIEluYy4KIEluZm9ybWF0aW9u
IGFib3V0IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSBpcyBhdmFpbGFibGUgYXQKIC5CIGh0
dHA6Ly93d3cuaXNjLm9yZy9cZlIuCiBJbmZvcm1hdGlvbiBhYm91dCBOb21pbnVtIGNhbiBiZSBm
b3VuZCBhdCBcZkJodHRwOi8vd3d3Lm5vbWludW0uY29tL1xmUi4KKy5QUAorVGhpcyB2ZXJzaW9u
IG9mIGRoY3BkIGhhcyBiZWVuIG1vZGlmaWVkIGZvciBBTFQgTGludXgKKy5SQiAoIGh0dHA6Ly93
d3cuYWx0bGludXguY29tLyApLgorSW4gcGFydGljdWxhciwgdGhlIHByaXZpbGVnZSByZWR1Y3Rp
b24gZnVuY3Rpb25hbGl0eSBhbmQgdGhlIFxmQi11XGZSCithbmQgXGZCLWpcZlIgb3B0aW9ucyBh
cmUgT3BlbndhbGwvQUxUIExpbnV4IGV4dGVuc2lvbnMuCmRpZmYgLS1naXQgYS9zZXJ2ZXIvZGhj
cGQuYyBiL3NlcnZlci9kaGNwZC5jCmluZGV4IDhkZWI4ZDAuLjk3N2RmMjUgMTAwNjQ0Ci0tLSBh
L3NlcnZlci9kaGNwZC5jCisrKyBiL3NlcnZlci9kaGNwZC5jCkBAIC0yMjYsNiArMjI2LDggQEAK
IAljaGFyICp0cmFjZWluZmlsZSA9IChjaGFyICopMDsKIAljaGFyICp0cmFjZW91dGZpbGUgPSAo
Y2hhciAqKTA7CiAjZW5kaWYKKwljaGFyICpzZXJ2ZXJfdXNlciA9ICJkaGNwZCI7CisJY2hhciAq
c2VydmVyX2phaWwgPSAiL3Zhci9saWIvZGhjcC9kaGNwZCI7CiAKICAgICAgICAgLyogTWFrZSBz
dXJlIHRoYXQgZmlsZSBkZXNjcmlwdG9ycyAwIChzdGRpbiksIDEsIChzdGRvdXQpLCBhbmQKICAg
ICAgICAgICAgMiAoc3RkZXJyKSBhcmUgb3Blbi4gVG8gZG8gdGhpcywgd2UgYXNzdW1lIHRoYXQg
d2hlbiB3ZQpAQCAtMjM1LDEwICsyMzcsMTIgQEAKICAgICAgICAgICAgICAgICBmZCA9IG9wZW4o
Ii9kZXYvbnVsbCIsIE9fUkRXUik7CiAgICAgICAgIGlmIChmZCA9PSAxKQogICAgICAgICAgICAg
ICAgIGZkID0gb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKTsKLSAgICAgICAgaWYgKGZkID09IDIp
CisgICAgICAgIGlmIChmZCA9PSAyKSB7CisgICAgICAgICAgICAgICAgZmQgPSBvcGVuICgiL2Rl
di9udWxsIiwgT19SRFdSKTsKICAgICAgICAgICAgICAgICBsb2dfcGVycm9yID0gMDsgLyogTm8g
c2Vuc2UgbG9nZ2luZyB0byAvZGV2L251bGwuICovCi0gICAgICAgIGVsc2UgaWYgKGZkICE9IC0x
KQotICAgICAgICAgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZmQg
PCAwKQorICAgICAgICAgICAgICAgbG9nX2ZhdGFsICgiQ2FuJ3Qgb3BlbiAlczogJW0iLCAiL2Rl
di9udWxsIik7CiAKIAkvKiBTZXQgdXAgdGhlIGNsaWVudCBjbGFzc2lmaWNhdGlvbiBzeXN0ZW0u
ICovCiAJY2xhc3NpZmljYXRpb25fc2V0dXAgKCk7CkBAIC0zMTksNiArMzI0LDE0IEBAIGludCBt
YWluIChhcmdjLCBhcmd2LCBlbnZwKQogCQl9IGVsc2UgaWYgKCFzdHJjbXAgKGFyZ3YgW2ldLCAi
LXEiKSkgewogCQkJcXVpZXQgPSAxOwogCQkJcXVpZXRfaW50ZXJmYWNlX2Rpc2NvdmVyeSA9IDE7
CisJCX0gZWxzZSBpZiAoIXN0cmNtcCAoYXJndiBbaV0sICItdSIpKSB7CisJCQlpZiAoKytpID09
IGFyZ2MpCisJCQkJdXNhZ2UoKTsKKwkJCXNlcnZlcl91c2VyID0gYXJndltpXTsKKwkJfSBlbHNl
IGlmICghc3RyY21wIChhcmd2IFtpXSwgIi1qIikpIHsKKwkJCWlmICgrK2kgPT0gYXJnYykKKwkJ
CQl1c2FnZSgpOworCQkJc2VydmVyX2phaWwgPSBhcmd2W2ldOwogCQl9IGVsc2UgaWYgKCFzdHJj
bXAgKGFyZ3YgW2ldLCAiLS12ZXJzaW9uIikpIHsKIAkJCWxvZ19pbmZvICgiaXNjLWRoY3BkLSVz
IiwgREhDUF9WRVJTSU9OKTsKIAkJCWV4aXQgKDApOwpAQCAtMzY2LDkgKzM3OSw5IEBAIGludCBt
YWluIChhcmdjLCBhcmd2LCBlbnZwKQogCiAJaWYgKCFxdWlldCkgewogCQlsb2dfaW5mbyAoIiVz
ICVzIiwgbWVzc2FnZSwgREhDUF9WRVJTSU9OKTsKLQkJbG9nX2luZm8gKGNvcHlyaWdodCk7Ci0J
CWxvZ19pbmZvIChhcnIpOwotCQlsb2dfaW5mbyAodXJsKTsKKwkJbG9nX2luZm8gKCIlcyIsIGNv
cHlyaWdodCk7CisJCWxvZ19pbmZvICgiJXMiLCBhcnIpOworCQlsb2dfaW5mbyAoIiVzIiwgdXJs
KTsKIAl9IGVsc2UgewogCQlxdWlldCA9IDA7CiAJCWxvZ19wZXJyb3IgPSAwOwpAQCAtNDk4LDEy
ICs1MTEsNiBAQCBpbnQgbWFpbiAoYXJnYywgYXJndiwgZW52cCkKIAogCWdyb3VwX3dyaXRlX2hv
b2sgPSBncm91cF93cml0ZXI7CiAKLQkvKiBTdGFydCB1cCB0aGUgZGF0YWJhc2UuLi4gKi8KLQlk
Yl9zdGFydHVwIChsZnRlc3QpOwotCi0JaWYgKGxmdGVzdCkKLQkJZXhpdCAoMCk7Ci0KIAkvKiBE
aXNjb3ZlciBhbGwgdGhlIG5ldHdvcmsgaW50ZXJmYWNlcyBhbmQgaW5pdGlhbGl6ZSB0aGVtLiAq
LwogCWRpc2NvdmVyX2ludGVyZmFjZXMgKERJU0NPVkVSX1NFUlZFUik7CiAKQEAgLTUyNCw3ICs1
MzEsNiBAQCBpbnQgbWFpbiAoYXJnYywgYXJndiwgZW52cCkKICNpZiBkZWZpbmVkIChUUkFDSU5H
KQogCXRyYWNlX3NlZWRfc3Rhc2ggKHRyYWNlX3NyYW5kb20sIHNlZWQgKyBjdXJfdGltZSk7CiAj
ZW5kaWYKLQlwb3N0ZGJfc3RhcnR1cCAoKTsKIAogI2lmbmRlZiBERUJVRwogCWlmIChkYWVtb24p
IHsKQEAgLTU1NSwxNCArNTYxLDE4IEBAIGludCBtYWluIChhcmdjLCBhcmd2LCBlbnZwKQogCiAg
ICAgICAgIC8qIFdyaXRlIG5ldyBwaWQgZmlsZS4gKi8KICAgICAgICAgaWYgKChpID0gb3Blbihw
YXRoX2RoY3BkX3BpZCwgT19XUk9OTFl8T19DUkVBVHxPX1RSVU5DLCAwNjQ0KSkgPj0gMCkgewot
ICAgICAgICAgICAgICAgIHNwcmludGYocGJ1ZiwgIiVkXG4iLCAoaW50KSBnZXRwaWQoKSk7Ci0g
ICAgICAgICAgICAgICAgSUdOT1JFX1JFVCh3cml0ZShpLCBwYnVmLCBzdHJsZW4ocGJ1ZikpKTsK
KyAgICAgICAgICAgICAgICBzbnByaW50ZihwYnVmLCBzaXplb2YocGJ1ZiksICIlZFxuIiwgKGlu
dCkgZ2V0cGlkKCkpOworICAgICAgICAgICAgICAgIGlmICh3cml0ZShpLCBwYnVmLCBzdHJsZW4o
cGJ1ZikpICE9IHN0cmxlbihwYnVmKSkKKwkJCWxvZ19mYXRhbCgiRXJyb3Igd3JpdGluZyBwaWQg
ZmlsZTogJXM6ICVtIiwKKwkJCQkgIHBhdGhfZGhjcGRfcGlkKTsKICAgICAgICAgICAgICAgICBj
bG9zZShpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBsb2dfZXJyb3IoIkNh
bid0IGNyZWF0ZSBQSUQgZmlsZSAlczogJW0uIiwgcGF0aF9kaGNwZF9waWQpOwogICAgICAgICB9
CiAKIAorCWRoY3BkX3ByaXZfbWluaW1pemUgKHNlcnZlcl91c2VyLCBzZXJ2ZXJfamFpbCk7CisK
IAkvKiBJZiB3ZSB3ZXJlIHJlcXVlc3RlZCB0byBsb2cgdG8gc3Rkb3V0IG9uIHRoZSBjb21tYW5k
IGxpbmUsCiAJICAga2VlcCBkb2luZyBzbzsgb3RoZXJ3aXNlLCBzdG9wLiAqLwogCWlmIChsb2df
cGVycm9yID09IC0xKQpAQCAtNTY5LDE5ICs1NjksMjUgQEAKIAogCWlmIChkYWVtb24pIHsKIAkJ
LyogQmVjb21lIHNlc3Npb24gbGVhZGVyIGFuZCBnZXQgcGlkLi4uICovCisJCWlmIChkdXAyIChm
ZCwgMCkgIT0gMCB8fAorCQkgICAgZHVwMiAoZmQsIDEpICE9IDEgfHwKKwkJICAgIGR1cDIgKGZk
LCAyKSAhPSAyKQorCQkJbG9nX2ZhdGFsKCJDYW4ndCBkYWVtb25pemU6ICVtIik7CisJCWNsb3Nl
IChmZCk7CisJCWZkID0gLTE7CiAJCXBpZCA9IHNldHNpZCgpOwotCi0gICAgICAgICAgICAgICAg
LyogQ2xvc2Ugc3RhbmRhcmQgSS9PIGRlc2NyaXB0b3JzLiAqLwotICAgICAgICAgICAgICAgIGNs
b3NlKDApOwotICAgICAgICAgICAgICAgIGNsb3NlKDEpOwotICAgICAgICAgICAgICAgIGNsb3Nl
KDIpOwotCi0gICAgICAgICAgICAgICAgLyogUmVvcGVuIHRoZW0gb24gL2Rldi9udWxsLiAqLwot
ICAgICAgICAgICAgICAgIG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUik7Ci0gICAgICAgICAgICAg
ICAgb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKTsKLSAgICAgICAgICAgICAgICBvcGVuKCIvZGV2
L251bGwiLCBPX1JEV1IpOwotICAgICAgICAgICAgICAgIGxvZ19wZXJyb3IgPSAwOyAvKiBObyBz
ZW5zZSBsb2dnaW5nIHRvIC9kZXYvbnVsbC4gKi8KIAl9CisKKwkvKiBTdGFydCB1cCB0aGUgZGF0
YWJhc2UuLi4gKi8KKwlkYl9zdGFydHVwIChsZnRlc3QpOworCisJaWYgKGxmdGVzdCkKKwkJZXhp
dCAoMCk7CisKKwlwb3N0ZGJfc3RhcnR1cCAoKTsKKworCWRoY3BkX3ByaXZfZHJvcCAoc2VydmVy
X3VzZXIsIHNlcnZlcl9qYWlsKTsKKwogI2VuZGlmIC8qICFERUJVRyAqLwogCiAjaWYgZGVmaW5l
ZCAoREVCVUdfTUVNT1JZX0xFQUtBR0UpIHx8IGRlZmluZWQgKERFQlVHX01BTExPQ19QT09MKSB8
fCBcCkBAIC03ODgsOSArODEyLDkgQEAgdm9pZCBwb3N0Y29uZl9pbml0aWFsaXphdGlvbiAoaW50
IHF1aWV0KQogCQkJCQlsb2dfcGVycm9yID0gMDsKIAkJCQkJbG9nX2luZm8gKCIlcyAlcyIsCiAJ
CQkJCQkgIG1lc3NhZ2UsIERIQ1BfVkVSU0lPTik7Ci0JCQkJCWxvZ19pbmZvIChjb3B5cmlnaHQp
OwotCQkJCQlsb2dfaW5mbyAoYXJyKTsKLQkJCQkJbG9nX2luZm8gKHVybCk7CisJCQkJCWxvZ19p
bmZvICgiJXMiLCBjb3B5cmlnaHQpOworCQkJCQlsb2dfaW5mbyAoIiVzIiwgYXJyKTsKKwkJCQkJ
bG9nX2luZm8gKCIlcyIsIHVybCk7CiAJCQkJCWxvZ19wZXJyb3IgPSB0bXA7CiAJCQkJfQogCQkJ
fSBlbHNlCkBAIC04NjIsMTEgKzg4NiwxMiBAQCB2b2lkIHBvc3RkYl9zdGFydHVwICh2b2lkKQog
c3RhdGljIHZvaWQgdXNhZ2UgKCkKIHsKIAlsb2dfaW5mbyAoIiVzICVzIiwgbWVzc2FnZSwgREhD
UF9WRVJTSU9OKTsKLQlsb2dfaW5mbyAoY29weXJpZ2h0KTsKLQlsb2dfaW5mbyAoYXJyKTsKKwls
b2dfaW5mbyAoIiVzIiwgY29weXJpZ2h0KTsKKwlsb2dfaW5mbyAoIiVzIiwgYXJyKTsKIAotCWxv
Z19mYXRhbCAoIlVzYWdlOiBkaGNwZCBbLXAgPFVEUCBwb3J0ICM+XSBbLWRdIFstZl0lcyVzJXMl
cyIsCisJbG9nX2ZhdGFsICgiVXNhZ2U6IGRoY3BkIFstcCA8VURQIHBvcnQgIz5dIFstZF0gWy1m
XSVzJXMlcyVzJXMiLAogCQkgICAiXG4gICAgICAgICAgICAgWy1jZiBjb25maWctZmlsZV0gWy1s
ZiBsZWFzZS1maWxlXSIsCisJCSAgICJcbiAgICAgICAgICAgICBbLXUgdXNlcl0gWy1qIGNocm9v
dC1kaXJdIiwKICNpZiBkZWZpbmVkIChUUkFDSU5HKQogCQkgICAiXG4JCSAgIFstdGYgdHJhY2Ut
b3V0cHV0LWZpbGVdIiwKIAkJICAgIlxuCQkgICBbLXBsYXkgdHJhY2UtaW5wdXQtZmlsZV0iLApk
aWZmIC0tZ2l0IGEvc2VydmVyL2RoY3BkLmNvbmYuNSBiL3NlcnZlci9kaGNwZC5jb25mLjUKaW5k
ZXggMDRhZmQ0ZS4uYWQyOWViYiAxMDA2NDQKLS0tIGEvc2VydmVyL2RoY3BkLmNvbmYuNQorKysg
Yi9zZXJ2ZXIvZGhjcGQuY29uZi41CkBAIC01MzEsOSArNTMxLDkgQEAgcHJpbWFyeSBzZXJ2ZXIg
bWlnaHQgbG9vayBsaWtlIHRoaXM6CiBmYWlsb3ZlciBwZWVyICJmb28iIHsKICAgcHJpbWFyeTsK
ICAgYWRkcmVzcyBhbnRocmF4LnJjLnZpeC5jb207Ci0gIHBvcnQgNTE5OworICBwb3J0IDY0NzsK
ICAgcGVlciBhZGRyZXNzIHRyYW50b3IucmMudml4LmNvbTsKLSAgcGVlciBwb3J0IDUyMDsKKyAg
cGVlciBwb3J0IDg0NzsKICAgbWF4LXJlc3BvbnNlLWRlbGF5IDYwOwogICBtYXgtdW5hY2tlZC11
cGRhdGVzIDEwOwogICBtY2x0IDM2MDA7CkBAIC01OTIsOSArNTkyLDcgQEAgc3RhdGVtZW50CiAu
QiBwb3J0IFxmSXBvcnQtbnVtYmVyXGZSXGZCO1xmUgogLlBQCiBUaGUgXGZCcG9ydFxmUiBzdGF0
ZW1lbnQgZGVjbGFyZXMgdGhlIFRDUCBwb3J0IG9uIHdoaWNoIHRoZSBzZXJ2ZXIKLXNob3VsZCBs
aXN0ZW4gZm9yIGNvbm5lY3Rpb25zIGZyb20gaXRzIGZhaWxvdmVyIHBlZXIuICAgVGhpcyBzdGF0
ZW1lbnQKLW1heSBub3QgY3VycmVudGx5IGJlIG9taXR0ZWQsIGJlY2F1c2UgdGhlIGZhaWxvdmVy
IHByb3RvY29sIGRvZXMgbm90Ci15ZXQgaGF2ZSBhIHJlc2VydmVkIFRDUCBwb3J0IG51bWJlci4K
K3Nob3VsZCBsaXN0ZW4gZm9yIGNvbm5lY3Rpb25zIGZyb20gaXRzIGZhaWxvdmVyIHBlZXIuCiAu
UkUKIC5QUAogVGhlIApAQCAtNjA2LDEwICs2MDQsOCBAQCBzdGF0ZW1lbnQKIC5QUAogVGhlIFxm
QnBlZXIgcG9ydFxmUiBzdGF0ZW1lbnQgZGVjbGFyZXMgdGhlIFRDUCBwb3J0IHRvIHdoaWNoIHRo
ZQogc2VydmVyIHNob3VsZCBjb25uZWN0IHRvIHJlYWNoIGl0cyBmYWlsb3ZlciBwZWVyIGZvciBm
YWlsb3ZlcgotbWVzc2FnZXMuICAgVGhpcyBzdGF0ZW1lbnQgbWF5IG5vdCBiZSBvbWl0dGVkIGJl
Y2F1c2UgdGhlIGZhaWxvdmVyCi1wcm90b2NvbCBkb2VzIG5vdCB5ZXQgaGF2ZSBhIHJlc2VydmVk
IFRDUCBwb3J0IG51bWJlci4gICBUaGUgcG9ydAotbnVtYmVyIGRlY2xhcmVkIGluIHRoZSBcZkJw
ZWVyIHBvcnRcZlIgc3RhdGVtZW50IG1heSBiZSB0aGUgc2FtZSBhcwotdGhlIHBvcnQgbnVtYmVy
IGRlY2xhcmVkIGluIHRoZSBcZkJwb3J0XGZSIHN0YXRlbWVudC4KK21lc3NhZ2VzLiAgVGhlIHBv
cnQgbnVtYmVyIGRlY2xhcmVkIGluIHRoZSBcZkJwZWVyIHBvcnRcZlIgc3RhdGVtZW50CittYXkg
YmUgdGhlIHNhbWUgYXMgdGhlIHBvcnQgbnVtYmVyIGRlY2xhcmVkIGluIHRoZSBcZkJwb3J0XGZS
IHN0YXRlbWVudC4KIC5SRQogLlBQCiBUaGUgCkBAIC0yMDM4LDggKzIwMzQsOCBAQCBUaGUgc3lu
dGF4IG9mIHRoZSBcZklzeXNsb2cuY29uZlxmUiBmaWxlIG1heSBiZSBkaWZmZXJlbnQgb24gc29t
ZQogb3BlcmF0aW5nIHN5c3RlbXMgLSBjb25zdWx0IHRoZSBcZklzeXNsb2cuY29uZlxmUiBtYW51
YWwgcGFnZSB0byBiZQogc3VyZS4gIFRvIGdldCBzeXNsb2cgdG8gc3RhcnQgbG9nZ2luZyB0byB0
aGUgbmV3IGZpbGUsIHlvdSBtdXN0IGZpcnN0CiBjcmVhdGUgdGhlIGZpbGUgd2l0aCBjb3JyZWN0
IG93bmVyc2hpcCBhbmQgcGVybWlzc2lvbnMgKHVzdWFsbHksIHRoZQotc2FtZSBvd25lciBhbmQg
cGVybWlzc2lvbnMgb2YgeW91ciAvdmFyL2xvZy9tZXNzYWdlcyBvcgotL3Vzci9hZG0vbWVzc2Fn
ZXMgZmlsZSBzaG91bGQgYmUgZmluZSkgYW5kIHNlbmQgYSBTSUdIVVAgdG8gc3lzbG9nZC4KK3Nh
bWUgb3duZXIgYW5kIHBlcm1pc3Npb25zIG9mIHlvdXIgL3Zhci9sb2cvbWVzc2FnZXMKK2ZpbGUg
c2hvdWxkIGJlIGZpbmUpIGFuZCBzZW5kIGEgU0lHSFVQIHRvIHN5c2xvZ2QuCiBTb21lIHN5c3Rl
bXMgc3VwcG9ydCBsb2cgcm9sbG92ZXIgdXNpbmcgYSBzaGVsbCBzY3JpcHQgb3IgcHJvZ3JhbQog
Y2FsbGVkIG5ld3N5c2xvZyBvciBsb2dyb3RhdGUsIGFuZCB5b3UgbWF5IGJlIGFibGUgdG8gY29u
ZmlndXJlIHRoaXMKIGFzIHdlbGwgc28gdGhhdCB5b3VyIGxvZyBmaWxlIGRvZXNuJ3QgZ3JvdyB1
bmNvbnRyb2xsYWJseS4KQEAgLTIxMTQsNyArMjExMCw4IEBAIHN0YXRlbWVudAogVGhlIFxmSW5l
eHQtc2VydmVyXGZSIHN0YXRlbWVudCBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGhvc3QgYWRkcmVz
cyBvZgogdGhlIHNlcnZlciBmcm9tIHdoaWNoIHRoZSBpbml0aWFsIGJvb3QgZmlsZSAoc3BlY2lm
aWVkIGluIHRoZQogXGZJZmlsZW5hbWVcZlIgc3RhdGVtZW50KSBpcyB0byBiZSBsb2FkZWQuICAg
XGZJU2VydmVyLW5hbWVcZlIgc2hvdWxkCi1iZSBhIG51bWVyaWMgSVAgYWRkcmVzcyBvciBhIGRv
bWFpbiBuYW1lLgorYmUgYSBudW1lcmljIElQIGFkZHJlc3Mgb3IgYSBkb21haW4gbmFtZS4gIElm
IG5vIFxmSW5leHQtc2VydmVyXGZSCitzdGF0ZW1lbnQgYXBwbGllcyB0byBhIGdpdmVuIGNsaWVu
dCwgdGhlIGFkZHJlc3MgMC4wLjAuMCBpcyB1c2VkLgogLlJFCiAuUFAKIFRoZQpkaWZmIC0tZ2l0
IGEvc2VydmVyL2ZhaWxvdmVyLmMgYi9zZXJ2ZXIvZmFpbG92ZXIuYwppbmRleCAxYmU2YzA0Li44
ZGNhNTc1IDEwMDY0NAotLS0gYS9zZXJ2ZXIvZmFpbG92ZXIuYworKysgYi9zZXJ2ZXIvZmFpbG92
ZXIuYwpAQCAtMzYxNSw3ICszNjE1LDcgQEAgZmFpbG92ZXJfb3B0aW9uX3QgKmRoY3BfZmFpbG92
ZXJfbWFrZV9vcHRpb24gKHVuc2lnbmVkIGNvZGUsCiAJCQl2YWwgPSB2YV9hcmcgKHZhLCB1bnNp
Z25lZCk7CiAjaWYgZGVmaW5lZCAoREVCVUdfRkFJTE9WRVJfTUVTU0FHRVMpCiAJCQkvKiAlQXVk
aXQlIENhbm5vdCBleGNlZWQgMjQgYnl0ZXMuICUyMDA0LjA2LjE3LFNhZmUlICovCi0JCQlzcHJp
bnRmICh0YnVmLCAiICVkIiwgdmFsKTsKKwkJCXNucHJpbnRmICh0YnVmLCBzaXplb2YodGJ1Ziks
ICIgJWQiLCB2YWwpOwogCQkJZmFpbG92ZXJfcHJpbnQgKG9idWYsIG9idWZpeCwgb2J1Zm1heCwg
dGJ1Zik7CiAjZW5kaWYKIAkJCW9wdGlvbi5kYXRhIFtpICsgNF0gPSB2YWw7CkBAIC0zNjM1LDcg
KzM2MzUsNyBAQCBmYWlsb3Zlcl9vcHRpb25fdCAqZGhjcF9mYWlsb3Zlcl9tYWtlX29wdGlvbiAo
dW5zaWduZWQgY29kZSwKIAkJCQkKICNpZiBkZWZpbmVkIChERUJVR19GQUlMT1ZFUl9NRVNTQUdF
UykKIAkJCS8qJUF1ZGl0JSBDYW5ub3QgZXhjZWVkIDE3IGJ5dGVzLiAgJTIwMDQuMDYuMTcsU2Fm
ZSUqLwotCQkJc3ByaW50ZiAodGJ1ZiwgIiAldS4ldS4ldS4ldSIsCisJCQlzbnByaW50ZiAodGJ1
Ziwgc2l6ZW9mKHRidWYpLCAiICV1LiV1LiV1LiV1IiwKIAkJCQkgIGlhZGRyIFswXSwgaWFkZHIg
WzFdLCBpYWRkciBbMl0sIGlhZGRyIFszXSk7CiAJCQlmYWlsb3Zlcl9wcmludCAob2J1Ziwgb2J1
Zml4LCBvYnVmbWF4LCB0YnVmKTsKICNlbmRpZgpAQCAtMzY0OCw3ICszNjQ4LDcgQEAgZmFpbG92
ZXJfb3B0aW9uX3QgKmRoY3BfZmFpbG92ZXJfbWFrZV9vcHRpb24gKHVuc2lnbmVkIGNvZGUsCiAJ
CQl2YWwgPSB2YV9hcmcgKHZhLCB1bnNpZ25lZCk7CiAjaWYgZGVmaW5lZCAoREVCVUdfRkFJTE9W
RVJfTUVTU0FHRVMpCiAJCQkvKiVBdWRpdCUgQ2Fubm90IGV4Y2VlZCAyNCBieXRlcy4gICUyMDA0
LjA2LjE3LFNhZmUlKi8KLQkJCXNwcmludGYgKHRidWYsICIgJWQiLCB2YWwpOworCQkJc25wcmlu
dGYgKHRidWYsIHNpemVvZih0YnVmKSwgIiAlZCIsIHZhbCk7CiAJCQlmYWlsb3Zlcl9wcmludCAo
b2J1Ziwgb2J1Zml4LCBvYnVmbWF4LCB0YnVmKTsKICNlbmRpZgogCQkJcHV0VUxvbmcgKCZvcHRp
b24uZGF0YSBbNCArIGkgKiA0XSwgdmFsKTsKQEAgLTM2NjEsNyArMzY2MSw3IEBAIGZhaWxvdmVy
X29wdGlvbl90ICpkaGNwX2ZhaWxvdmVyX21ha2Vfb3B0aW9uICh1bnNpZ25lZCBjb2RlLAogI2lm
IGRlZmluZWQgKERFQlVHX0ZBSUxPVkVSX01FU1NBR0VTKQogCQlmb3IgKGkgPSAwOyBpIDwgY291
bnQ7IGkrKykgewogCQkJLyogMjMgYnl0ZXMgcGx1cyBudWwsIHNhZmUuICovCi0JCQlzcHJpbnRm
ICh0YnVmLCAiICVkIiwgYnZhbCBbaV0pOworCQkJc25wcmludGYgKHRidWYsIHNpemVvZih0YnVm
KSwgIiAlZCIsIGJ2YWwgW2ldKTsKIAkJCWZhaWxvdmVyX3ByaW50IChvYnVmLCBvYnVmaXgsIG9i
dWZtYXgsIHRidWYpOwogCQl9CiAjZW5kaWYKQEAgLTM2OTksNyArMzY5OSw3IEBAIGZhaWxvdmVy
X29wdGlvbl90ICpkaGNwX2ZhaWxvdmVyX21ha2Vfb3B0aW9uICh1bnNpZ25lZCBjb2RlLAogI2lm
IGRlZmluZWQgKERFQlVHX0ZBSUxPVkVSX01FU1NBR0VTKQogCQlmb3IgKGkgPSA0OyBpIDwgc2l6
ZTsgaSsrKSB7CiAJCQkvKiVBdWRpdCUgQ2Fubm90IGV4Y2VlZCAyNCBieXRlcy4gJTIwMDQuMDYu
MTcsU2FmZSUqLwotCQkJc3ByaW50ZiAodGJ1ZiwgIiAlZCIsIG9wdGlvbi5kYXRhIFtpXSk7CisJ
CQlzbnByaW50ZiAodGJ1Ziwgc2l6ZW9mKHRidWYpLCAiICVkIiwgb3B0aW9uLmRhdGEgW2ldKTsK
IAkJCWZhaWxvdmVyX3ByaW50IChvYnVmLCBvYnVmaXgsIG9idWZtYXgsIHRidWYpOwogCQl9CiAj
ZW5kaWYKQEAgLTM3MTAsNyArMzcxMCw3IEBAIGZhaWxvdmVyX29wdGlvbl90ICpkaGNwX2ZhaWxv
dmVyX21ha2Vfb3B0aW9uICh1bnNpZ25lZCBjb2RlLAogCQkJdmFsID0gdmFfYXJnICh2YSwgdV9p
bnQzMl90KTsKICNpZiBkZWZpbmVkIChERUJVR19GQUlMT1ZFUl9NRVNTQUdFUykKIAkJCS8qJUF1
ZGl0JSBDYW5ub3QgZXhjZWVkIDI0IGJ5dGVzLiAlMjAwNC4wNi4xNyxTYWZlJSovCi0JCQlzcHJp
bnRmICh0YnVmLCAiICVkIiwgdmFsKTsKKwkJCXNucHJpbnRmICh0YnVmLCBzaXplb2YodGJ1Ziks
ICIgJWQiLCB2YWwpOwogCQkJZmFpbG92ZXJfcHJpbnQgKG9idWYsIG9idWZpeCwgb2J1Zm1heCwg
dGJ1Zik7CiAjZW5kaWYKIAkJCXB1dFVTaG9ydCAoJm9wdGlvbi5kYXRhIFs0ICsgaSAqIDJdLCB2
YWwpOwpkaWZmIC0tZ2l0IGEvc2VydmVyL29tYXBpLmMgYi9zZXJ2ZXIvb21hcGkuYwppbmRleCBj
ODdmMDViLi5mODA3YzVkIDEwMDY0NAotLS0gYS9zZXJ2ZXIvb21hcGkuYworKysgYi9zZXJ2ZXIv
b21hcGkuYwpAQCAtMTE4Niw3ICsxMTg2LDcgQEAgaXNjX3Jlc3VsdF90IGRoY3BfaG9zdF9zaWdu
YWxfaGFuZGxlciAob21hcGlfb2JqZWN0X3QgKmgsCiAKIAkJaWYgKCFob3N0IC0+IG5hbWUpIHsK
IAkJCWNoYXIgaG5idWYgWzY0XTsKLQkJCXNwcmludGYgKGhuYnVmLCAibmglMDhseCUwOGx4IiwK
KwkJCXNucHJpbnRmIChobmJ1Ziwgc2l6ZW9mKGhuYnVmKSwgIm5oJTA4bHglMDhseCIsCiAJCQkJ
ICh1bnNpZ25lZCBsb25nKWN1cl90aW1lLCAodW5zaWduZWQgbG9uZylob3N0KTsKIAkJCWhvc3Qg
LT4gbmFtZSA9IGRtYWxsb2MgKHN0cmxlbiAoaG5idWYpICsgMSwgTURMKTsKIAkJCWlmICghaG9z
dCAtPiBuYW1lKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5109</attachid>
            <date>2011-09-15 12:28:56 +0400</date>
            <delta_ts>2011-09-15 12:28:56 +0400</delta_ts>
            <desc>Согласование типов параметров/значений функций</desc>
            <filename>dhcp-3.1-alt0.1.patch</filename>
            <type>text/plain</type>
            <size>7837</size>
            <attacher name="Alex Moskalenko">mav</attacher>
            
              <data encoding="base64">ZGlmZiAtdU5yIGRoY3AtMy4xLm9yaWcvY29tbW9uL2NvbmZsZXguYyBkaGNwLTMuMS9jb21tb24v
Y29uZmxleC5jCi0tLSBkaGNwLTMuMS5vcmlnL2NvbW1vbi9jb25mbGV4LmMJMjAwOS0wOS0wMiAw
MDozMjoyNy4wMDAwMDAwMDAgKzA0MDAKKysrIGRoY3AtMy4xL2NvbW1vbi9jb25mbGV4LmMJMjAx
MS0wOS0xMyAxNDozNjo0OS4wMDAwMDAwMDAgKzA0MDAKQEAgLTQ2LDcgKzQ2LDcgQEAKIHN0YXRp
YyBlbnVtIGRoY3BfdG9rZW4gcmVhZF9zdHJpbmcgUFJPVE8gKChzdHJ1Y3QgcGFyc2UgKikpOwog
c3RhdGljIGVudW0gZGhjcF90b2tlbiByZWFkX251bWJlciBQUk9UTyAoKGludCwgc3RydWN0IHBh
cnNlICopKTsKIHN0YXRpYyBlbnVtIGRoY3BfdG9rZW4gcmVhZF9udW1fb3JfbmFtZSBQUk9UTyAo
KGludCwgc3RydWN0IHBhcnNlICopKTsKLXN0YXRpYyBlbnVtIGRoY3BfdG9rZW4gaW50ZXJuIFBS
T1RPICgodW5zaWduZWQgY2hhciAqLCBlbnVtIGRoY3BfdG9rZW4pKTsKK3N0YXRpYyBlbnVtIGRo
Y3BfdG9rZW4gaW50ZXJuIFBST1RPICgoY2hhciAqLCBlbnVtIGRoY3BfdG9rZW4pKTsKIAogaXNj
X3Jlc3VsdF90IG5ld19wYXJzZSAoY2ZpbGUsIGZpbGUsIGluYnVmLCBidWZsZW4sIG5hbWUsIGVv
bHApCiAJc3RydWN0IHBhcnNlICoqY2ZpbGU7CkBAIC01MjgsNyArNTI4LDcgQEAKIH0KIAogc3Rh
dGljIGVudW0gZGhjcF90b2tlbiBpbnRlcm4gKGF0b20sIGRmdikKLQl1bnNpZ25lZCBjaGFyICph
dG9tOworCWNoYXIgKmF0b207CiAJZW51bSBkaGNwX3Rva2VuIGRmdjsKIHsKIAlpZiAoIWlzYXNj
aWkgKGF0b20gWzBdKSkKZGlmZiAtdU5yIGRoY3AtMy4xLm9yaWcvY29tbW9uL2Rucy5jIGRoY3At
My4xL2NvbW1vbi9kbnMuYwotLS0gZGhjcC0zLjEub3JpZy9jb21tb24vZG5zLmMJMjAxMS0wOS0x
MyAxNDozMjowMS4wMDAwMDAwMDAgKzA0MDAKKysrIGRoY3AtMy4xL2NvbW1vbi9kbnMuYwkyMDEx
LTA5LTEzIDE0OjQwOjQ3LjAwMDAwMDAwMCArMDQwMApAQCAtNjc4LDcgKzY3OCw3IEBACiAJCS8q
CiAJCSAqIENvbmZsaWN0IGRldGVjdGlvbiBvdmVycmlkZTogZGVsZXRlIERIQ0lEIFJScy4KIAkJ
ICovCi0JCXVwZHJlYyA9IG1pbmlyZXNfbWt1cGRyZWMoU19VUERBVEUsIGRkbnNfZndkX25hbWUt
PmRhdGEsCisJCXVwZHJlYyA9IG1pbmlyZXNfbWt1cGRyZWMoU19VUERBVEUsIChjaGFyICopZGRu
c19md2RfbmFtZS0+ZGF0YSwKIAkJCQkJICBDX0lOLCBUX0RIQ0lELCAwKTsKIAogCQlpZiAoIXVw
ZHJlYykgewpkaWZmIC11TnIgZGhjcC0zLjEub3JpZy9jb21tb24vb3B0aW9ucy5jIGRoY3AtMy4x
L2NvbW1vbi9vcHRpb25zLmMKLS0tIGRoY3AtMy4xLm9yaWcvY29tbW9uL29wdGlvbnMuYwkyMDEx
LTA3LTA3IDIzOjE4OjQ3LjAwMDAwMDAwMCArMDQwMAorKysgZGhjcC0zLjEvY29tbW9uL29wdGlv
bnMuYwkyMDExLTA5LTEzIDE0OjM5OjU2LjAwMDAwMDAwMCArMDQwMApAQCAtMjIzNiw3ICsyMjM2
LDcgQEAKIAkJCQkJCSAgInJlZmVycyB0byB1bmtub3duICIKIAkJCQkJCSAgIm9wdGlvbiBzcGFj
ZSAnJS4qcycuIiwKIAkJCQkJCSAgb2MtPm9wdGlvbi0+Y29kZSwKLQkJCQkJCSAgZW5kIC0gc3Rh
cnQsIHN0YXJ0KTsKKwkJCQkJCSAgKGludCkgKGVuZCAtIHN0YXJ0KSwgc3RhcnQpOwogCQkJCQli
cmVhazsKIAkJCQl9CiAKQEAgLTIyNzgsNyArMjI3OCw3IEBACiAJaW50IHN0YXR1cyA9IDA7CiAJ
aW50IGk7CiAKLQl1bml2ZXJzZV9oYXNoX2xvb2t1cCgmdSwgdW5pdmVyc2VfaGFzaCwgbmFtZS0+
ZGF0YSwgbmFtZS0+bGVuLCBNREwpOworCXVuaXZlcnNlX2hhc2hfbG9va3VwKCZ1LCB1bml2ZXJz
ZV9oYXNoLCAoY2hhciAqKW5hbWUtPmRhdGEsIG5hbWUtPmxlbiwgTURMKTsKIAlpZiAodSA9PSBO
VUxMKSB7CiAJCWxvZ19lcnJvcigib3B0aW9uX3NwYWNlX2VuY2Fwc3VsYXRlOiBvcHRpb24gc3Bh
Y2UgJS4qcyBkb2VzICIKIAkJCSAgIm5vdCBleGlzdCwgYnV0IGlzIGNvbmZpZ3VyZWQuIiwKZGlm
ZiAtdU5yIGRoY3AtMy4xLm9yaWcvY29tbW9uL3BhcnNlLmMgZGhjcC0zLjEvY29tbW9uL3BhcnNl
LmMKLS0tIGRoY3AtMy4xLm9yaWcvY29tbW9uL3BhcnNlLmMJMjAxMS0wOS0xMyAxNDozMjowMS4w
MDAwMDAwMDAgKzA0MDAKKysrIGRoY3AtMy4xL2NvbW1vbi9wYXJzZS5jCTIwMTEtMDktMTMgMTQ6
MzQ6MjQuMDAwMDAwMDAwICswNDAwCkBAIC02MTQsNyArNjE0LDcgQEAKIAlpbnQgYmFzZTsKIAl1
bnNpZ25lZCBzaXplOwogewotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0ciA9IHN0cjsKKwljb25z
dCBjaGFyICpwdHIgPSBzdHI7CiAJaW50IG5lZ2F0aXZlID0gMDsKIAl1X2ludDMyX3QgdmFsID0g
MDsKIAlpbnQgdHZhbDsKZGlmZiAtdU5yIGRoY3AtMy4xLm9yaWcvY29tbW9uL3ByaW50LmMgZGhj
cC0zLjEvY29tbW9uL3ByaW50LmMKLS0tIGRoY3AtMy4xLm9yaWcvY29tbW9uL3ByaW50LmMJMjAx
MS0wOS0xMyAxNDozMjowMS4wMDAwMDAwMDAgKzA0MDAKKysrIGRoY3AtMy4xL2NvbW1vbi9wcmlu
dC5jCTIwMTEtMDktMTMgMTQ6Mzc6MTMuMDAwMDAwMDAwICswNDAwCkBAIC00NSw3ICs0NSw3IEBA
CiBjaGFyICpxdW90aWZ5X3N0cmluZyAoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqZmlsZSwg
aW50IGxpbmUpCiB7CiAJdW5zaWduZWQgbGVuID0gMDsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpz
cDsKKwljb25zdCBjaGFyICpzcDsKIAljaGFyICpidWYsICpuc3A7CiAKIAlmb3IgKHNwID0gczsg
c3AgJiYgKnNwOyBzcCsrKSB7CmRpZmYgLXVOciBkaGNwLTMuMS5vcmlnL2RzdC9kc3RfYXBpLmMg
ZGhjcC0zLjEvZHN0L2RzdF9hcGkuYwotLS0gZGhjcC0zLjEub3JpZy9kc3QvZHN0X2FwaS5jCTIw
MTEtMDktMTMgMTQ6MzI6MDEuMDAwMDAwMDAwICswNDAwCisrKyBkaGNwLTMuMS9kc3QvZHN0X2Fw
aS5jCTIwMTEtMDktMTMgMTQ6NDI6NDkuMDAwMDAwMDAwICswNDAwCkBAIC00NzMsNyArNDczLDcg
QEAKIAlpbnQgcHJvdG8sIGFsZywgZGxlbjsKIAlpbnQgYzsKIAljaGFyIG5hbWVbUEFUSF9NQVhd
LCBlbmNrZXlbUkFXX0tFWV9TSVpFXTsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqbm90c3BhY2U7
CisgICAgICAgIGNoYXIgKm5vdHNwYWNlOwogCXVfY2hhciBkZWNrZXlbUkFXX0tFWV9TSVpFXTsK
IAlGSUxFICpmcDsKIApkaWZmIC11TnIgZGhjcC0zLjEub3JpZy9pbmNsdWRlcy9kaGNwZC5oIGRo
Y3AtMy4xL2luY2x1ZGVzL2RoY3BkLmgKLS0tIGRoY3AtMy4xLm9yaWcvaW5jbHVkZXMvZGhjcGQu
aAkyMDExLTA5LTEzIDE0OjMyOjAxLjAwMDAwMDAwMCArMDQwMAorKysgZGhjcC0zLjEvaW5jbHVk
ZXMvZGhjcGQuaAkyMDExLTA5LTEzIDE0OjQ4OjE3LjAwMDAwMDAwMCArMDQwMApAQCAtMjA5Niw3
ICsyMDk2LDcgQEAKICNpZiBkZWZpbmVkIChGQUlMT1ZFUl9QUk9UT0NPTCkKIGludCB3cml0ZV9m
YWlsb3Zlcl9zdGF0ZSAoZGhjcF9mYWlsb3Zlcl9zdGF0ZV90ICopOwogI2VuZGlmCi1pbnQgZGJf
cHJpbnRhYmxlIFBST1RPICgoY29uc3QgdW5zaWduZWQgY2hhciAqKSk7CitpbnQgZGJfcHJpbnRh
YmxlIFBST1RPICgoY29uc3QgY2hhciAqKSk7CiBpbnQgZGJfcHJpbnRhYmxlX2xlbiBQUk9UTyAo
KGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQpKTsKIGlzY19yZXN1bHRfdCB3cml0ZV9u
YW1lZF9iaWxsaW5nX2NsYXNzKGNvbnN0IHZvaWQgKiwgdW5zaWduZWQsIHZvaWQgKik7CiB2b2lk
IHdyaXRlX2JpbGxpbmdfY2xhc3NlcyAodm9pZCk7CmRpZmYgLXVOciBkaGNwLTMuMS5vcmlnL21p
bmlyZXMvbnNfZGF0ZS5jIGRoY3AtMy4xL21pbmlyZXMvbnNfZGF0ZS5jCi0tLSBkaGNwLTMuMS5v
cmlnL21pbmlyZXMvbnNfZGF0ZS5jCTIwMDktMDctMjQgMDE6NDM6MzQuMDAwMDAwMDAwICswNDAw
CisrKyBkaGNwLTMuMS9taW5pcmVzL25zX2RhdGUuYwkyMDExLTA5LTEzIDE0OjQyOjA3LjAwMDAw
MDAwMCArMDQwMApAQCAtNDgsNyArNDgsNyBAQAogCiAvKiBGb3J3YXJkLiAqLwogCi1zdGF0aWMg
aW50CWRhdGVwYXJ0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgaW50LCBpbnQsIGludCwgaW50ICop
Oworc3RhdGljIGludAlkYXRlcGFydChjb25zdCBjaGFyICosIGludCwgaW50LCBpbnQsIGludCAq
KTsKIAogLyogUHVibGljLiAqLwogCkBAIC0xMTgsNyArMTE4LDcgQEAKICAqIERvbid0IHJlc2V0
IHRoZSBmbGFnIGlmIHRoZXJlIGlzIG5vIGVycm9yLgogICovCiBzdGF0aWMgaW50Ci1kYXRlcGFy
dChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBzaXplLCBpbnQgbWluLCBpbnQgbWF4LCBp
bnQgKmVycnApIHsKK2RhdGVwYXJ0KGNvbnN0IGNoYXIgKmJ1ZiwgaW50IHNpemUsIGludCBtaW4s
IGludCBtYXgsIGludCAqZXJycCkgewogCWludCByZXN1bHQgPSAwOwogCWludCBpOwogCmRpZmYg
LXVOciBkaGNwLTMuMS5vcmlnL21pbmlyZXMvcmVzX2luaXQuYyBkaGNwLTMuMS9taW5pcmVzL3Jl
c19pbml0LmMKLS0tIGRoY3AtMy4xLm9yaWcvbWluaXJlcy9yZXNfaW5pdC5jCTIwMDktMDctMjQg
MDE6NDM6MzQuMDAwMDAwMDAwICswNDAwCisrKyBkaGNwLTMuMS9taW5pcmVzL3Jlc19pbml0LmMJ
MjAxMS0wOS0xMyAxNDo0MToxMy4wMDAwMDAwMDAgKzA0MDAKQEAgLTE1NCw3ICsxNTQsNyBAQAog
aW50CiBtaW5pcmVzX3Zpbml0KHJlc19zdGF0ZSBzdGF0cCwgaW50IHByZWluaXQpIHsKIAlyZWdp
c3RlciBGSUxFICpmcDsKLQlyZWdpc3RlciB1bnNpZ25lZCBjaGFyICpjcDsKKwlyZWdpc3RlciBj
aGFyICpjcDsKIAlyZWdpc3RlciBjaGFyICoqcHA7CiAJcmVnaXN0ZXIgaW50IG47CiAJY2hhciBi
dWZbQlVGU0laXTsKZGlmZiAtdU5yIGRoY3AtMy4xLm9yaWcvbWluaXJlcy9yZXNfcXVlcnkuYyBk
aGNwLTMuMS9taW5pcmVzL3Jlc19xdWVyeS5jCi0tLSBkaGNwLTMuMS5vcmlnL21pbmlyZXMvcmVz
X3F1ZXJ5LmMJMjAxMS0wOS0xMyAxNDozMjowMS4wMDAwMDAwMDAgKzA0MDAKKysrIGRoY3AtMy4x
L21pbmlyZXMvcmVzX3F1ZXJ5LmMJMjAxMS0wOS0xMyAxNDo0MTozMi4wMDAwMDAwMDAgKzA0MDAK
QEAgLTM4NCw3ICszODQsNyBAQAogY29uc3QgY2hhciAqCiByZXNfaG9zdGFsaWFzKGNvbnN0IHJl
c19zdGF0ZSBzdGF0cCwgY29uc3QgY2hhciAqbmFtZSwgY2hhciAqZHN0LCBzaXplX3Qgc2l6KSB7
CiAJY2hhciAqZmlsZTsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqY3AxLCAqY3AyOworICAgICAg
ICBjaGFyICpjcDEsICpjcDI7CiAJY2hhciBidWZbQlVGU0laXTsKIAlGSUxFICpmcDsKIApkaWZm
IC11TnIgZGhjcC0zLjEub3JpZy9vbWFwaXAvaGFzaC5jIGRoY3AtMy4xL29tYXBpcC9oYXNoLmMK
LS0tIGRoY3AtMy4xLm9yaWcvb21hcGlwL2hhc2guYwkyMDA5LTA3LTI0IDAxOjQzOjM1LjAwMDAw
MDAwMCArMDQwMAorKysgZGhjcC0zLjEvb21hcGlwL2hhc2guYwkyMDExLTA5LTEzIDE0OjQ0OjI2
LjAwMDAwMDAwMCArMDQwMApAQCAtMzUyLDcgKzM1Miw3IEBACiAJCXJldHVybiAodW5zaWduZWQg
Y2hhciAqKSAiTm8gdGFibGUuIjsKIAogCWlmICh0YWJsZS0+aGFzaF9jb3VudCA9PSAwKQotCQly
ZXR1cm4gKGNoYXIgKikgIkludmFsaWQgaGFzaCB0YWJsZS4iOworCQlyZXR1cm4gKHVuc2lnbmVk
IGNoYXIgKikgIkludmFsaWQgaGFzaCB0YWJsZS4iOwogCiAJZm9yIChpID0gMCA7IGkgPCB0YWJs
ZS0+aGFzaF9jb3VudCA7IGkrKykgewogCQljdXJsZW4gPSAwOwpAQCAtMzgxLDkgKzM4MSw5IEBA
CiAJICAgIHBjdCA+IDIxNDc0ODM2NDcgfHwKIAkgICAgbWlubGVuID4gMjE0NzQ4MzY0NyB8fAog
CSAgICBtYXhsZW4gPiAyMTQ3NDgzNjQ3KQotCQlyZXR1cm4gKGNoYXIgKikgIlJlcG9ydCBvdXQg
b2YgcmFuZ2UgZm9yIGRpc3BsYXkuIjsKKwkJcmV0dXJuICh1bnNpZ25lZCBjaGFyICopICJSZXBv
cnQgb3V0IG9mIHJhbmdlIGZvciBkaXNwbGF5LiI7CiAKLQlzcHJpbnRmKHJldGJ1ZiwgIkNvbnRl
bnRzL1NpemUgKCUlKTogJXUvJXUgKCV1JSUpLiBNaW4vbWF4OiAldS8ldSIsCisJc3ByaW50Zigo
Y2hhciAqKSByZXRidWYsICJDb250ZW50cy9TaXplICglJSk6ICV1LyV1ICgldSUlKS4gTWluL21h
eDogJXUvJXUiLAogCQljb250ZW50cywgdGFibGUtPmhhc2hfY291bnQsIHBjdCwgbWlubGVuLCBt
YXhsZW4pOwogCiAJcmV0dXJuIHJldGJ1ZjsKZGlmZiAtdU5yIGRoY3AtMy4xLm9yaWcvc2VydmVy
L2RiLmMgZGhjcC0zLjEvc2VydmVyL2RiLmMKLS0tIGRoY3AtMy4xLm9yaWcvc2VydmVyL2RiLmMJ
MjAwOS0wNy0yNCAwMTo0MzozNS4wMDAwMDAwMDAgKzA0MDAKKysrIGRoY3AtMy4xL3NlcnZlci9k
Yi5jCTIwMTEtMDktMTMgMTQ6NDk6MjcuMDAwMDAwMDAwICswNDAwCkBAIC01MzksNyArNTM5LDcg
QEAKICNlbmRpZgogCiBpbnQgZGJfcHJpbnRhYmxlIChzKQotCWNvbnN0IHVuc2lnbmVkIGNoYXIg
KnM7CisJY29uc3QgY2hhciAqczsKIHsKIAlpbnQgaTsKIAlmb3IgKGkgPSAwOyBzIFtpXTsgaSsr
KQpkaWZmIC11TnIgZGhjcC0zLjEub3JpZy9zZXJ2ZXIvZGhjcC5jIGRoY3AtMy4xL3NlcnZlci9k
aGNwLmMKLS0tIGRoY3AtMy4xLm9yaWcvc2VydmVyL2RoY3AuYwkyMDExLTA5LTEzIDE0OjMyOjAx
LjAwMDAwMDAwMCArMDQwMAorKysgZGhjcC0zLjEvc2VydmVyL2RoY3AuYwkyMDExLTA5LTEzIDE0
OjQ4OjU2LjAwMDAwMDAwMCArMDQwMApAQCAtNDAwMiw3ICs0MDAyLDcgQEAKIAlpZiAob3B0aW9u
X2NhY2hlX2FsbG9jYXRlKCZvYywgTURMKSkgewogCQlhID0gJnBhY2tldC0+aW50ZXJmYWNlLT5w
cmltYXJ5X2FkZHJlc3M7CiAJCWlmIChtYWtlX2NvbnN0X2RhdGEoJm9jLT5leHByZXNzaW9uLAot
CQkJCSAgICAoY2hhciAqKWEsIHNpemVvZigqYSksCisJCQkJICAgICh1bnNpZ25lZCBjaGFyICop
YSwgc2l6ZW9mKCphKSwKIAkJCQkgICAgMCwgMCwgTURMKSkgewogCQkJb3B0aW9uX2NvZGVfaGFz
aF9sb29rdXAoJm9jLT5vcHRpb24sIAogCQkJCQkJZGhjcF91bml2ZXJzZS5jb2RlX2hhc2gsCmRp
ZmYgLXVOciBkaGNwLTMuMS5vcmlnL3NlcnZlci9kaGNwZC5jIGRoY3AtMy4xL3NlcnZlci9kaGNw
ZC5jCi0tLSBkaGNwLTMuMS5vcmlnL3NlcnZlci9kaGNwZC5jCTIwMTEtMDktMTMgMTQ6MzI6MDEu
MDAwMDAwMDAwICswNDAwCisrKyBkaGNwLTMuMS9zZXJ2ZXIvZGhjcGQuYwkyMDExLTA5LTEzIDE0
OjQ1OjIzLjAwMDAwMDAwMCArMDQwMApAQCAtMjAxLDcgKzIwMSw3IEBACiAJaW50IGZkOwogCWlu
dCBpLCBzdGF0dXM7CiAJc3RydWN0IHNlcnZlbnQgKmVudDsKLQl1bnNpZ25lZCBjaGFyICpzOwor
CWNoYXIgKnM7CiAJaW50IGNmdGVzdCA9IDA7CiAJaW50IGxmdGVzdCA9IDA7CiAjaWZuZGVmIERF
QlVHCmRpZmYgLXVOciBkaGNwLTMuMS5vcmlnL3NlcnZlci9mYWlsb3Zlci5jIGRoY3AtMy4xL3Nl
cnZlci9mYWlsb3Zlci5jCi0tLSBkaGNwLTMuMS5vcmlnL3NlcnZlci9mYWlsb3Zlci5jCTIwMTEt
MDktMTMgMTQ6MzI6MDEuMDAwMDAwMDAwICswNDAwCisrKyBkaGNwLTMuMS9zZXJ2ZXIvZmFpbG92
ZXIuYwkyMDExLTA5LTEzIDE0OjUyOjE1LjAwMDAwMDAwMCArMDQwMApAQCAtNTI3LDcgKzUyNyw3
IEBACiAJCQkJc2xlbiA9IHN0cmxlbihzbmFtZSk7CiAJCQkgICAgfSBlbHNlIGlmIChsaW5rLT5p
bXNnLT5vcHRpb25zX3ByZXNlbnQgJgogCQkJCSAgICAgICBGVEJfUkVMQVRJT05TSElQX05BTUUp
IHsKLQkJCQlzbmFtZSA9IGxpbmstPmltc2ctPnJlbGF0aW9uc2hpcF9uYW1lLmRhdGE7CisJCQkJ
c25hbWUgPSAoY2hhciAqKWxpbmstPmltc2ctPnJlbGF0aW9uc2hpcF9uYW1lLmRhdGE7CiAJCQkJ
c2xlbiA9IGxpbmstPmltc2ctPnJlbGF0aW9uc2hpcF9uYW1lLmNvdW50OwogCQkJICAgIH0gZWxz
ZSB7CiAJCQkJc25hbWUgPSAidW5rbm93biI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5110</attachid>
            <date>2011-09-15 12:29:40 +0400</date>
            <delta_ts>2011-09-15 12:29:40 +0400</delta_ts>
            <desc>Поддержка LDAP</desc>
            <filename>dhcp-3.1-ldap-alt0.patch</filename>
            <type>text/plain</type>
            <size>83468</size>
            <attacher name="Alex Moskalenko">mav</attacher>
            
              <data encoding="base64">ZGlmZiAtdXAgZGhjcC0zLjEuMy9jb21tb24vY29uZmxleC5jLmxkYXAgZGhjcC0zLjEuMy9jb21t
b24vY29uZmxleC5jCi0tLSBkaGNwLTMuMS4zL2NvbW1vbi9jb25mbGV4LmMubGRhcAkyMDA5LTA5
LTAxIDEwOjMyOjI3LjAwMDAwMDAwMCAtMTAwMAorKysgZGhjcC0zLjEuMy9jb21tb24vY29uZmxl
eC5jCTIwMTAtMDItMTMgMTI6NTU6MTIuMDAwMDAwMDAwIC0xMDAwCkBAIC00Nyw2ICs0Nyw3IEBA
IHN0YXRpYyBlbnVtIGRoY3BfdG9rZW4gcmVhZF9zdHJpbmcgUFJPVE8KIHN0YXRpYyBlbnVtIGRo
Y3BfdG9rZW4gcmVhZF9udW1iZXIgUFJPVE8gKChpbnQsIHN0cnVjdCBwYXJzZSAqKSk7CiBzdGF0
aWMgZW51bSBkaGNwX3Rva2VuIHJlYWRfbnVtX29yX25hbWUgUFJPVE8gKChpbnQsIHN0cnVjdCBw
YXJzZSAqKSk7CiBzdGF0aWMgZW51bSBkaGNwX3Rva2VuIGludGVybiBQUk9UTyAoKGNoYXIgKiwg
ZW51bSBkaGNwX3Rva2VuKSk7CitzdGF0aWMgaW50IHJlYWRfZnVuY3Rpb24gUFJPVE8gKChzdHJ1
Y3QgcGFyc2UgKikpOwogCiBpc2NfcmVzdWx0X3QgbmV3X3BhcnNlIChjZmlsZSwgZmlsZSwgaW5i
dWYsIGJ1ZmxlbiwgbmFtZSwgZW9scCkKIAlzdHJ1Y3QgcGFyc2UgKipjZmlsZTsKQEAgLTc0LDYg
Kzc1LDEwIEBAIGlzY19yZXN1bHRfdCBuZXdfcGFyc2UgKGNmaWxlLCBmaWxlLCBpbmIKIAl0bXAg
LT4gZmlsZSA9IGZpbGU7CiAJdG1wIC0+IGVvbF90b2tlbiA9IGVvbHA7CiAKKwlpZiAoZmlsZSAh
PSAtMSkgeworCQl0bXAgLT4gcmVhZF9mdW5jdGlvbiA9IHJlYWRfZnVuY3Rpb247OworCX0KKwog
CXRtcCAtPiBidWZpeCA9IDA7CiAJdG1wIC0+IGJ1ZmxlbiA9IGJ1ZmxlbjsKIAlpZiAoaW5idWYp
IHsKQEAgLTExMywyMiArMTE4LDExIEBAIHN0YXRpYyBpbnQgZ2V0X2NoYXIgKGNmaWxlKQogCWlu
dCBjOwogCiAJaWYgKGNmaWxlIC0+IGJ1Zml4ID09IGNmaWxlIC0+IGJ1ZmxlbikgewotCQlpZiAo
Y2ZpbGUgLT4gZmlsZSAhPSAtMSkgewotCQkJY2ZpbGUgLT4gYnVmbGVuID0KLQkJCQlyZWFkIChj
ZmlsZSAtPiBmaWxlLAotCQkJCSAgICAgIGNmaWxlIC0+IGluYnVmLCBjZmlsZSAtPiBidWZzaXop
OwotCQkJaWYgKGNmaWxlIC0+IGJ1ZmxlbiA9PSAwKSB7Ci0JCQkJYyA9IEVPRjsKLQkJCQljZmls
ZSAtPiBidWZpeCA9IDA7Ci0JCQl9IGVsc2UgaWYgKGNmaWxlIC0+IGJ1ZmxlbiA8IDApIHsKLQkJ
CQljID0gRU9GOwotCQkJCWNmaWxlIC0+IGJ1Zml4ID0gY2ZpbGUgLT4gYnVmbGVuID0gMDsKLQkJ
CX0gZWxzZSB7Ci0JCQkJYyA9IGNmaWxlIC0+IGluYnVmIFswXTsKLQkJCQljZmlsZSAtPiBidWZp
eCA9IDE7Ci0JCQl9Ci0JCX0gZWxzZQorCQlpZiAoY2ZpbGUgLT4gcmVhZF9mdW5jdGlvbikgewor
CQkJYyA9IGNmaWxlIC0+IHJlYWRfZnVuY3Rpb24gKGNmaWxlKTsKKwkJfSBlbHNlIHsKIAkJCWMg
PSBFT0Y7CisJCX0KIAl9IGVsc2UgewogCQljID0gY2ZpbGUgLT4gaW5idWYgW2NmaWxlIC0+IGJ1
Zml4XTsKIAkJY2ZpbGUgLT4gYnVmaXgrKzsKQEAgLTEyMzYsMyArMTIzMCwyMyBAQCBzdGF0aWMg
ZW51bSBkaGNwX3Rva2VuIGludGVybiAoYXRvbSwgZGZ2CiAJfQogCXJldHVybiBkZnY7CiB9CisK
K3N0YXRpYyBpbnQKK3JlYWRfZnVuY3Rpb24gKHN0cnVjdCBwYXJzZSAqIGNmaWxlKQoreworCWlu
dCBjOworCisJY2ZpbGUgLT4gYnVmbGVuID0gcmVhZCAoY2ZpbGUgLT4gZmlsZSwgY2ZpbGUgLT4g
aW5idWYsIGNmaWxlIC0+IGJ1ZnNpeik7CisJaWYgKGNmaWxlIC0+IGJ1ZmxlbiA9PSAwKSB7CisJ
CWMgPSBFT0Y7CisJCWNmaWxlIC0+IGJ1Zml4ID0gMDsKKwl9IGVsc2UgaWYgKGNmaWxlIC0+IGJ1
ZmxlbiA8IDApIHsKKwkJYyA9IEVPRjsKKwkJY2ZpbGUgLT4gYnVmaXggPSBjZmlsZSAtPiBidWZs
ZW4gPSAwOworCX0gZWxzZSB7CisJCWMgPSBjZmlsZSAtPiBpbmJ1ZiBbMF07CisJCWNmaWxlIC0+
IGJ1Zml4ID0gMTsKKwl9CisKKwlyZXR1cm4gYzsKK30KZGlmZiAtdXAgZGhjcC0zLjEuMy9jb21t
b24vcHJpbnQuYy5sZGFwIGRoY3AtMy4xLjMvY29tbW9uL3ByaW50LmMKLS0tIGRoY3AtMy4xLjMv
Y29tbW9uL3ByaW50LmMubGRhcAkyMDA5LTA5LTAxIDEwOjMyOjI3LjAwMDAwMDAwMCAtMTAwMAor
KysgZGhjcC0zLjEuMy9jb21tb24vcHJpbnQuYwkyMDEwLTAyLTEzIDEyOjU1OjEyLjAwMDAwMDAw
MCAtMTAwMApAQCAtMTY4LDkgKzE2OCw5IEBAIGNoYXIgKnByaW50X2Jhc2U2NCAoY29uc3QgdW5z
aWduZWQgY2hhciAKIH0KIAogY2hhciAqcHJpbnRfaHdfYWRkciAoaHR5cGUsIGhsZW4sIGRhdGEp
Ci0JaW50IGh0eXBlOwotCWludCBobGVuOwotCXVuc2lnbmVkIGNoYXIgKmRhdGE7CisJY29uc3Qg
aW50IGh0eXBlOworCWNvbnN0IGludCBobGVuOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGE7
CiB7CiAJc3RhdGljIGNoYXIgaGFidWYgWzQ5XTsKIAljaGFyICpzOwpkaWZmIC11cCBkaGNwLTMu
MS4zL2RzdC9NYWtlZmlsZS5kaXN0LmxkYXAgZGhjcC0zLjEuMy9kc3QvTWFrZWZpbGUuZGlzdAot
LS0gZGhjcC0zLjEuMy9kc3QvTWFrZWZpbGUuZGlzdC5sZGFwCTIwMDktMDctMjMgMTE6NDM6MzQu
MDAwMDAwMDAwIC0xMDAwCisrKyBkaGNwLTMuMS4zL2RzdC9NYWtlZmlsZS5kaXN0CTIwMTAtMDIt
MTMgMTI6NTU6MTIuMDAwMDAwMDAwIC0xMDAwCkBAIC0yMywxMiArMjMsMTMgQEAKIAogU1JDICAg
ID0gZHN0X3N1cHBvcnQuYyBkc3RfYXBpLmMgaG1hY19saW5rLmMgbWQ1X2Rnc3QuYyBiYXNlNjQu
YyBwcmFuZG9tLmMKIE9CSiAgICA9IGRzdF9zdXBwb3J0Lm8gZHN0X2FwaS5vIGhtYWNfbGluay5v
IG1kNV9kZ3N0Lm8gYmFzZTY0Lm8gcHJhbmRvbS5vCitPQkpfTk01PSBkc3Rfc3VwcG9ydC5vIGRz
dF9hcGkubyBobWFjX2xpbmsubyBiYXNlNjQubyBwcmFuZG9tLm8KIEhEUlMgICA9IGRzdF9pbnRl
cm5hbC5oIG1kNS5oIG1kNV9sb2NsLmgKIAogSU5DTFVERVMgPSAkKEJJTkRJTkMpIC1JJChUT1Ap
L2luY2x1ZGVzCiBDRkxBR1MgPSAkKERFQlVHKSAkKFBSRURFRklORVMpICQoSU5DTFVERVMpICQo
Q09QVFMpIC1ESE1BQ19NRDUgLURNSU5JUkVTX0xJQgogCi1hbGw6CWxpYmRzdC5hCithbGw6CWxp
YmRzdC5hIGxpYmRzdC1ub21kNS5hCiAKIGluc3RhbGw6CiAKQEAgLTM3LDExICszOCwxNiBAQCBs
aWJkc3QuYToJJChPQkopCiAJYXIgY3J1diBsaWJkc3QuYSAkKE9CSikKIAkkKFJBTkxJQikgbGli
ZHN0LmEKIAorbGliZHN0LW5vbWQ1LmE6CSQoT0JKX05NNSkKKwlybSAtZiBsaWJkc3Qtbm9tZDUu
YQorCWFyIGNydXYgbGliZHN0LW5vbWQ1LmEgJChPQkpfTk01KQorCSQoUkFOTElCKSBsaWJkc3Qt
bm9tZDUuYQorCiBkZXBlbmQ6CiAJJChNS0RFUCkgJChJTkNMVURFUykgJChQUkVERUZJTkVTKSAk
KFNSQykKIAogY2xlYW46Ci0JLXJtIC1mICQoT0JKKSBsaWJkc3QuYQorCS1ybSAtZiAkKE9CSikg
bGliZHN0LmEgbGliZHN0LW5vbWQ1LmEKIAogcmVhbGNsZWFuOiBjbGVhbgogCS1ybSAtZiAqfiAk
KENBVE1BTlBBR0VTKSAkKFNFRE1BTlBBR0VTKQpkaWZmIC11cCBkaGNwLTMuMS4zL2luY2x1ZGVz
L2RoY3BkLmgubGRhcCBkaGNwLTMuMS4zL2luY2x1ZGVzL2RoY3BkLmgKLS0tIGRoY3AtMy4xLjMv
aW5jbHVkZXMvZGhjcGQuaC5sZGFwCTIwMDktMDktMDEgMTA6MzI6MjcuMDAwMDAwMDAwIC0xMDAw
CisrKyBkaGNwLTMuMS4zL2luY2x1ZGVzL2RoY3BkLmgJMjAxMC0wMi0xMyAxMjo1NToxMi4wMDAw
MDAwMDAgLTEwMDAKQEAgLTgyLDYgKzgyLDExIEBAIHR5cGVkZWYgc3RydWN0IGhhc2hfdGFibGUg
Y2xhc3NfaGFzaF90OwogI2luY2x1ZGUgPGlzYy1kaGNwL3Jlc3VsdC5oPgogI2luY2x1ZGUgPG9t
YXBpcC9vbWFwaXBfcC5oPgogCisjaWYgZGVmaW5lZChMREFQX0NPTkZJR1VSQVRJT04pCisjIGlu
Y2x1ZGUgPGxkYXAuaD4KKyMgaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4gLyogZm9yIHVuYW1lKCkg
Ki8KKyNlbmRpZgorCiAjaWYgIWRlZmluZWQgKEJZVEVfTkFNRV9IQVNIX1NJWkUpCiAjIGRlZmlu
ZSBCWVRFX05BTUVfSEFTSF9TSVpFCTQwMQkvKiBEZWZhdWx0IHdvdWxkIGJlIHJlZGljdWxvdXMu
ICovCiAjZW5kaWYKQEAgLTI1Miw2ICsyNTcsOCBAQCBzdHJ1Y3QgcGFyc2UgewogCWNoYXIgKmlu
YnVmOwogCXVuc2lnbmVkIGJ1Zml4LCBidWZsZW47CiAJdW5zaWduZWQgYnVmc2l6OworCisJaW50
ICgqcmVhZF9mdW5jdGlvbikgKHN0cnVjdCBwYXJzZSAqKTsKIH07CiAKIC8qIFZhcmlhYmxlLWxl
bmd0aCBhcnJheSBvZiBkYXRhLiAqLwpAQCAtMzYzLDYgKzM3MCwzMiBAQCBzdHJ1Y3QgaGFyZHdh
cmUgewogCXVfaW50OF90IGhidWYgWzE3XTsKIH07CiAKKyNpZiBkZWZpbmVkKExEQVBfQ09ORklH
VVJBVElPTikKKyMgZGVmaW5lIExEQVBfQlVGRkVSX1NJWkUJCTgxOTIKKyMgZGVmaW5lIExEQVBf
TUVUSE9EX1NUQVRJQwkJMAorIyBkZWZpbmUgTERBUF9NRVRIT0RfRFlOQU1JQwkxCisjaWYgZGVm
aW5lZCAoVVNFX1NTTCkKKyMgZGVmaW5lIExEQVBfU1NMX09GRgkJCTAKKyMgZGVmaW5lIExEQVBf
U1NMX09OCQkJMQorIyBkZWZpbmUgTERBUF9TU0xfVExTCQkJMgorIyBkZWZpbmUgTERBUF9TU0xf
TERBUFMJCQkzCisjZW5kaWYKKworLyogVGhpcyBpcyBhIHRyZWUgb2YgdGhlIGN1cnJlbnQgY29u
ZmlndXJhdGlvbiB3ZSBhcmUgYnVpbGRpbmcgZnJvbSBMREFQICovCitzdHJ1Y3QgbGRhcF9jb25m
aWdfc3RhY2sgeworCUxEQVBNZXNzYWdlICogcmVzOwkvKiBQb2ludGVyIHJldHVybmVkIGZyb20g
bGRhcF9zZWFyY2ggKi8KKwlMREFQTWVzc2FnZSAqIGxkZW50OwkvKiBDdXJyZW50IGl0ZW0gaW4g
TERBUCB0aGF0IHdlJ3JlIHByb2Nlc3NpbmcuCisJCQkJCQkJaW4gcmVzICovCisJaW50IGNsb3Nl
X2JyYWNlOwkvKiBQdXQgYSBjbG9zaW5nIH0gYWZ0ZXIgd2UncmUgdGhyb3VnaCB3aXRoCisJCQkJ
CQl0aGlzIGl0ZW0gKi8KKwlpbnQgcHJvY2Vzc2VkOwkvKiBXZSBzZXQgdGhpcyBmbGFnIGlmIHRo
aXMgYmFzZSBpdGVtIGhhcyBiZWVuCisJCQkJCXByb2Nlc3NlZC4gQWZ0ZXIgdGhpcyBiYXNlIGl0
ZW0gaXMgcHJvY2Vzc2VkLAorCQkJCQl3ZSBjYW4gc3RhcnQgcHJvY2Vzc2luZyB0aGUgY2hpbGRy
ZW4gKi8KKwlzdHJ1Y3QgbGRhcF9jb25maWdfc3RhY2sgKmNoaWxkcmVuOworCXN0cnVjdCBsZGFw
X2NvbmZpZ19zdGFjayAqbmV4dDsKK307CisjZW5kaWYKKwogdHlwZWRlZiBlbnVtIHsKIAlzZXJ2
ZXJfc3RhcnR1cCA9IDAsCiAJc2VydmVyX3J1bm5pbmcgPSAxLApAQCAtNTU5LDYgKzU5MiwyOSBA
QCBzdHJ1Y3QgbGVhc2Vfc3RhdGUgewogIyBkZWZpbmUgREVGQVVMVF9QSU5HX1RJTUVPVVQgMQog
I2VuZGlmCiAKKyNpZiBkZWZpbmVkKExEQVBfQ09ORklHVVJBVElPTikKKyMgZGVmaW5lIFNWX0xE
QVBfU0VSVkVSCQk1MworIyBkZWZpbmUgU1ZfTERBUF9QT1JUCQk1NAorIyBkZWZpbmUgU1ZfTERB
UF9VU0VSTkFNRQk1NQorIyBkZWZpbmUgU1ZfTERBUF9QQVNTV09SRAk1NgorIyBkZWZpbmUgU1Zf
TERBUF9CQVNFX0ROCTU3CisjIGRlZmluZSBTVl9MREFQX01FVEhPRAkJNTgKKyMgZGVmaW5lIFNW
X0xEQVBfREVCVUdfRklMRQkJNTkKKyMgZGVmaW5lIFNWX0xEQVBfREhDUF9TRVJWRVJfQ04JCTYw
CisjIGRlZmluZSBTVl9MREFQX1JFRkVSUkFMUwkJNjEKKyNpZiBkZWZpbmVkIChVU0VfU1NMKQor
IyBkZWZpbmUgU1ZfTERBUF9TU0wJCTYyCisjIGRlZmluZSBTVl9MREFQX1RMU19SRVFDRVJUCQk2
MworIyBkZWZpbmUgU1ZfTERBUF9UTFNfQ0FfRklMRQkJNjQKKyMgZGVmaW5lIFNWX0xEQVBfVExT
X0NBX0RJUgkJNjUKKyMgZGVmaW5lIFNWX0xEQVBfVExTX0NFUlQJCTY2CisjIGRlZmluZSBTVl9M
REFQX1RMU19LRVkJCTY3CisjIGRlZmluZSBTVl9MREFQX1RMU19DUkxDSEVDSwkJNjgKKyMgZGVm
aW5lIFNWX0xEQVBfVExTX0NJUEhFUlMJCTY5CisjIGRlZmluZSBTVl9MREFQX1RMU19SQU5ERklM
RQkJNzAKKyNlbmRpZgorI2VuZGlmCisKICNpZiAhZGVmaW5lZCAoREVGQVVMVF9ERUZBVUxUX0xF
QVNFX1RJTUUpCiAjIGRlZmluZSBERUZBVUxUX0RFRkFVTFRfTEVBU0VfVElNRSA0MzIwMAogI2Vu
ZGlmCkBAIC0xNzExLDcgKzE3NjcsNyBAQCBleHRlcm4gaW50IGRiX3RpbWVfZm9ybWF0OwogY2hh
ciAqcXVvdGlmeV9zdHJpbmcgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOwogY2hh
ciAqcXVvdGlmeV9idWYgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQsIGNvbnN0IGNo
YXIgKiwgaW50KTsKIGNoYXIgKnByaW50X2Jhc2U2NCAoY29uc3QgdW5zaWduZWQgY2hhciAqLCB1
bnNpZ25lZCwgY29uc3QgY2hhciAqLCBpbnQpOwotY2hhciAqcHJpbnRfaHdfYWRkciBQUk9UTyAo
KGludCwgaW50LCB1bnNpZ25lZCBjaGFyICopKTsKK2NoYXIgKnByaW50X2h3X2FkZHIgUFJPVE8g
KChjb25zdCBpbnQsIGNvbnN0IGludCwgY29uc3QgdW5zaWduZWQgY2hhciAqKSk7CiB2b2lkIHBy
aW50X2xlYXNlIFBST1RPICgoc3RydWN0IGxlYXNlICopKTsKIHZvaWQgZHVtcF9yYXcgUFJPVE8g
KChjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkKSk7CiB2b2lkIGR1bXBfcGFja2V0X29w
dGlvbiAoc3RydWN0IG9wdGlvbl9jYWNoZSAqLCBzdHJ1Y3QgcGFja2V0ICosCkBAIC0yODIyLDMg
KzI4NzgsMTggQEAgT01BUElfT0JKRUNUX0FMTE9DX0RFQ0wgKGRoY3BfZmFpbG92ZXJfbAogCiBl
eHRlcm4gdm9pZCBkaGNwZF9wcml2X21pbmltaXplKGNvbnN0IGNoYXIgKnNlcnZlcl91c2VyLCBj
b25zdCBjaGFyICpzZXJ2ZXJfamFpbCk7CiBleHRlcm4gdm9pZCBkaGNwZF9wcml2X2Ryb3AoY29u
c3QgY2hhciAqc2VydmVyX3VzZXIsIGNvbnN0IGNoYXIgKnNlcnZlcl9qYWlsKTsKKworLyogbGRh
cC5jICovCisjaWYgZGVmaW5lZChMREFQX0NPTkZJR1VSQVRJT04pCitleHRlcm4gc3RydWN0IGVu
dW1lcmF0aW9uIGxkYXBfbWV0aG9kczsKKyNpZiBkZWZpbmVkIChVU0VfU1NMKQorZXh0ZXJuIHN0
cnVjdCBlbnVtZXJhdGlvbiBsZGFwX3NzbF91c2FnZV9lbnVtOworZXh0ZXJuIHN0cnVjdCBlbnVt
ZXJhdGlvbiBsZGFwX3Rsc19yZXFjZXJ0X2VudW07CitleHRlcm4gc3RydWN0IGVudW1lcmF0aW9u
IGxkYXBfdGxzX2NybGNoZWNrX2VudW07CisjZW5kaWYKK2lzY19yZXN1bHRfdCBsZGFwX3JlYWRf
Y29uZmlnICh2b2lkKTsKK2ludCBmaW5kX2hhZGRyX2luX2xkYXAgKHN0cnVjdCBob3N0X2RlY2wg
KiosIGludCwgdW5zaWduZWQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2ludCBmaW5kX3N1YmNsYXNzX2luX2xkYXAg
KHN0cnVjdCBjbGFzcyAqLCBzdHJ1Y3QgY2xhc3MgKiosCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgZGF0YV9zdHJpbmcgKik7CisjZW5kaWYKZGlmZiAtdXAgZGhjcC0zLjEuMy9p
bmNsdWRlcy9sZGFwX2Nhc2EuaC5sZGFwIGRoY3AtMy4xLjMvaW5jbHVkZXMvbGRhcF9jYXNhLmgK
LS0tIGRoY3AtMy4xLjMvaW5jbHVkZXMvbGRhcF9jYXNhLmgubGRhcAkyMDEwLTAyLTEzIDEyOjU1
OjEyLjAwMDAwMDAwMCAtMTAwMAorKysgZGhjcC0zLjEuMy9pbmNsdWRlcy9sZGFwX2Nhc2EuaAky
MDEwLTAyLTEzIDEyOjU1OjEyLjAwMDAwMDAwMCAtMTAwMApAQCAtMCwwICsxLDgzIEBACisvKiBs
ZGFwX2Nhc2EuaAorICAgCisgICBEZWZpbml0aW9uIGZvciBDQVNBIG1vZHVsZXMuLi4gKi8KKwor
LyogQ29weXJpZ2h0IChjKSAyMDA0IEludGVybmV0IFN5c3RlbXMgQ29uc29yaXVtLCBJbmMuICgi
SVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5NS0yMDAzIEludGVybmV0IFNvZnR3YXJlIENvbnNv
cnRpdW0uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgTm92ZWxsLCBJbmMuCisKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDogCisgKiAx
LlJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0IG5vdGljZSwgCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuIAorICogMi5SZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIAorICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4gCisgKiAzLk5laXRoZXIgdGhlIG5hbWUgb2YgSVNDLCBJU0MgREhDUCwg
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgCisg
KiAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKworICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBJTlRFUk5FVCBTWVNURU1TIENPTlNPUlRJVU0gQU5E
IENPTlRSSUJVVE9SUyAKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IAorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgSVNDIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCAKKyAqIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIAorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIAorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCAKKyAqIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiAKKyAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSAKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisgKiBU
aGlzIGZpbGUgd2FzIHdyaXR0ZW4gYnkgUyBLYWx5YW5hc3VuZGFyYW0gPHNrYWx5YW5hc3VuZGFy
YW1Abm92ZWxsLmNvbT4KKyAqLworCisjaWYgZGVmaW5lZChMREFQX0NBU0FfQVVUSCkKKyNpZm5k
ZWYgX19MREFQX0NBU0FfSF9fCisjZGVmaW5lIF9fTERBUF9DQVNBX0hfXworCisjaW5jbHVkZSA8
bWljYXNhX21nbWQuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgor
CisjZGVmaW5lIE1JQ0FTQV9MSUIgICAgICJsaWJtaWNhc2Euc28uMSIKKworU1NDU19UWVBFREVG
X0xJQkNBTEwoaW50LCBDQVNBX0dldENyZWRlbnRpYWxfVCkKKygKKyAgICAgICB1aW50MzJfdCAg
ICAgICAgICAgIHNzRmxhZ3MsCisgICAgICAgU1NDU19TRUNSRVRfSURfVCAgICphcHBTZWNyZXRJ
RCwKKyAgICAgICBTU0NTX1NFQ1JFVF9JRF9UICAgKnNoYXJlZFNlY3JldElELAorICAgICAgIHVp
bnQzMl90ICAgICAgICAgICAqY3JlZGVudGlhbFR5cGUsCisgICAgICAgdm9pZCAgICAgICAgICAg
ICAgICpjcmVkZW50aWFsLAorICAgICAgIFNTQ1NfRVhUX1QgICAgICAgICAqZXh0IAorKTsKK1NT
Q1NfVFlQRURFRl9MSUJDQUxMKGludCwgQ0FTQV9TZXRDcmVkZW50aWFsX1QpCisoCisgICAgICAg
dWludDMyX3QgICAgICAgICAgICBzc0ZsYWdzLAorICAgICAgIFNTQ1NfU0VDUkVUX0lEX1QgICAq
YXBwU2VjcmV0SUQsCisgICAgICAgU1NDU19TRUNSRVRfSURfVCAgICpzaGFyZWRTZWNyZXRJRCwK
KyAgICAgICB1aW50MzJfdCAgICAgICAgICAgIGNyZWRlbnRpYWxUeXBlLAorICAgICAgIHZvaWQg
ICAgICAgICAgICAgICAqY3JlZGVudGlhbCwKKyAgICAgICBTU0NTX0VYVF9UICAgICAgICAgKmV4
dAorKTsKKworU1NDU19UWVBFREVGX0xJQkNBTEwoaW50LCBDQVNBX1JlbW92ZUNyZWRlbnRpYWxf
VCkKKygKKyAgICAgICB1aW50MzJfdCAgICAgICAgICAgIHNzRmxhZ3MsCisgICAgICAgU1NDU19T
RUNSRVRfSURfVCAgICphcHBTZWNyZXRJRCwKKyAgICAgICBTU0NTX1NFQ1JFVF9JRF9UICAgKnNo
YXJlZFNlY3JldElELAorICAgICAgIFNTQ1NfRVhUX1QgICAgICAgICAqZXh0CispOworc3RhdGlj
IENBU0FfR2V0Q3JlZGVudGlhbF9UICAgICAgICAgICAgcF9taUNBU0FHZXRDcmVkZW50aWFsID0g
TlVMTDsKK3N0YXRpYyBDQVNBX1NldENyZWRlbnRpYWxfVCAgICAgICAgICAgIHBfbWlDQVNBU2V0
Q3JlZGVudGlhbCA9IE5VTEw7CitzdGF0aWMgQ0FTQV9SZW1vdmVDcmVkZW50aWFsX1QgICAgICAg
ICBwX21pQ0FTQVJlbW92ZUNyZWRlbnRpYWwgPSBOVUxMOworc3RhdGljIHZvaWQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKmNhc2FJREsgPSBOVUxMOworCitpbnQgbG9hZF9jYXNhKHZvaWQp
Oworc3RhdGljIHZvaWQgcmVsZWFzZV9jYXNhKHZvaWQpOworaW50IGxvYWRfdW5hbWVfcHdkX2Zy
b21fbWlDQVNBKGNoYXIgKiosIGNoYXIgKiopOworCisjZW5kaWYgLyogX19MREFQX0NBU0FfSF9f
ICovCisjZW5kaWYgLyogTERBUF9DQVNBX0FVVEggKi8KKwpkaWZmIC11cCBkaGNwLTMuMS4zL2lu
Y2x1ZGVzL3NpdGUuaC5sZGFwIGRoY3AtMy4xLjMvaW5jbHVkZXMvc2l0ZS5oCi0tLSBkaGNwLTMu
MS4zL2luY2x1ZGVzL3NpdGUuaC5sZGFwCTIwMDktMDQtMDcgMTA6MDA6NDIuMDAwMDAwMDAwIC0x
MDAwCisrKyBkaGNwLTMuMS4zL2luY2x1ZGVzL3NpdGUuaAkyMDEwLTAyLTEzIDEyOjU1OjEyLjAw
MDAwMDAwMCAtMTAwMApAQCAtMTk1LDMgKzE5NSwxNiBAQAogICAgdHJhY2VzLiAqLwogCiAjZGVm
aW5lIFRSQUNJTkcKKworLyogRGVmaW5lIHRoaXMgaWYgeW91IHdhbnQgdG8gcmVhZCB5b3VyIGNv
bmZpZyBmcm9tIExEQVAuIFJlYWQgUkVBRE1FLmxkYXAKKyAgIGFib3V0IGhvdyB0byBzZXQgdGhp
cyB1cCAqLworCisjZGVmaW5lIExEQVBfQ09ORklHVVJBVElPTgorCisvKiBEZWZpbmUgdGhpcyBp
ZiB5b3Ugd2FudCB0byBlbmFibGUgTERBUCBvdmVyIGEgU1NMIGNvbm5lY3Rpb24uIFlvdSB3aWxs
IG5lZWQKKyAgIHRvIGFkZCAtbGNyeXB0byAtbHNzbCB0byB0aGUgTElCUz0gbGluZSBvZiBzZXJ2
ZXIvTWFrZWZpbGUgKi8KKworI2RlZmluZSBVU0VfU1NMCisKKyNkZWZpbmUgX1BBVEhfREhDUERf
REIgICAgIi9zdGF0ZS9kaGNwZC5sZWFzZXMiCisjZGVmaW5lIF9QQVRIX0RIQ0xJRU5UX0RCICIv
dmFyL2xpYi8vdmFyL2xpYi9kaGNwL2RoY2xpZW50L3N0YXRlL2RoY2xpZW50LmxlYXNlcyIKZGlm
ZiAtdXAgZGhjcC0zLjEuMy9zZXJ2ZXIvTWFrZWZpbGUuZGlzdC5sZGFwIGRoY3AtMy4xLjMvc2Vy
dmVyL01ha2VmaWxlLmRpc3QKLS0tIGRoY3AtMy4xLjMvc2VydmVyL01ha2VmaWxlLmRpc3QubGRh
cAkyMDA5LTA3LTIzIDExOjQzOjM1LjAwMDAwMDAwMCAtMTAwMAorKysgZGhjcC0zLjEuMy9zZXJ2
ZXIvTWFrZWZpbGUuZGlzdAkyMDEwLTAyLTEzIDEyOjU1OjEyLjAwMDAwMDAwMCAtMTAwMApAQCAt
MjUsMTQgKzI1LDE0IEBACiBDQVRNQU5QQUdFUyA9IGRoY3BkLmNhdDggZGhjcGQuY29uZi5jYXQ1
IGRoY3BkLmxlYXNlcy5jYXQ1CiBTRURNQU5QQUdFUyA9IGRoY3BkLm1hbjggZGhjcGQuY29uZi5t
YW41IGRoY3BkLmxlYXNlcy5tYW41CiBTUkNTICAgPSBkaGNwZC5jIGRoY3AuYyBib290cC5jIGNv
bmZwYXJzLmMgZGIuYyBjbGFzcy5jIGZhaWxvdmVyLmMgXAotCSBvbWFwaS5jIG1kYi5jIHN0YWJs
ZXMuYyBzYWxsb2MuYyBkZG5zLmMgZGhjcGxlYXNlcXVlcnkuYworCSBvbWFwaS5jIG1kYi5jIHN0
YWJsZXMuYyBzYWxsb2MuYyBkZG5zLmMgZGhjcGxlYXNlcXVlcnkuYyBsZGFwLmMgbGRhcF9jYXNh
LmMKIE9CSlMgICA9IGRoY3BkLm8gZGhjcC5vIGJvb3RwLm8gY29uZnBhcnMubyBkYi5vIGNsYXNz
Lm8gZmFpbG92ZXIubyBcCi0JIG9tYXBpLm8gbWRiLm8gc3RhYmxlcy5vIHNhbGxvYy5vIGRkbnMu
byBkaGNwbGVhc2VxdWVyeS5vCisJIG9tYXBpLm8gbWRiLm8gc3RhYmxlcy5vIHNhbGxvYy5vIGRk
bnMubyBkaGNwbGVhc2VxdWVyeS5vIGxkYXAubyBsZGFwX2Nhc2EubwogUFJPRyAgID0gZGhjcGQK
IE1BTiAgICA9IGRoY3BkLjggZGhjcGQuY29uZi41IGRoY3BkLmxlYXNlcy41CiAKIElOQ0xVREVT
ID0gLUkkKFRPUCkgJChCSU5ESU5DKSAtSSQoVE9QKS9pbmNsdWRlcwotREhDUExJQiA9IC4uL2Nv
bW1vbi9saWJkaGNwLmEgJChCSU5ETElCKSAuLi9vbWFwaXAvbGlib21hcGkuYSAuLi9kc3QvbGli
ZHN0LmEKK0RIQ1BMSUIgPSAuLi9jb21tb24vbGliZGhjcC5hICQoQklORExJQikgLi4vb21hcGlw
L2xpYm9tYXBpLmEgLi4vZHN0L2xpYmRzdC1ub21kNS5hCiBDRkxBR1MgPSAkKERFQlVHKSAkKFBS
RURFRklORVMpICQoSU5DTFVERVMpICQoQ09QVFMpCiAKIGFsbDoJJChQUk9HKSAkKENBVE1BTlBB
R0VTKQpAQCAtMTA2LDYgKzEwNiw2IEBAIGRoY3BkLmxlYXNlcy5tYW41OglkaGNwZC5sZWFzZXMu
NQogCQktZSAicyNSVU5ESVIjJChWQVJSVU4pI2ciIDwgZGhjcGQubGVhc2VzLjUgPmRoY3BkLmxl
YXNlcy5tYW41CiAKIGRoY3BkOgkkKE9CSlMpICQoQ09CSikgJChESENQTElCKQotCSQoQ0MpIC1w
aWUgJChMRkxBR1MpIC1vIGRoY3BkICQoT0JKUykgJChESENQTElCKSAkKExJQlMpIC1sY2FwCisJ
JChDQykgLXBpZSAkKExGTEFHUykgLW8gZGhjcGQgJChPQkpTKSAkKERIQ1BMSUIpICQoTElCUykg
JChMREFQTElCKSAkKFNTTExJQikgLWxjYXAKIAogIyBEZXBlbmRlbmNpZXMgKHNlbWktYXV0b21h
dGljYWxseS1nZW5lcmF0ZWQpCmRpZmYgLXVwIGRoY3AtMy4xLjMvc2VydmVyL2NsYXNzLmMubGRh
cCBkaGNwLTMuMS4zL3NlcnZlci9jbGFzcy5jCi0tLSBkaGNwLTMuMS4zL3NlcnZlci9jbGFzcy5j
LmxkYXAJMjAwOS0wNy0yMyAxMTo0MzozNS4wMDAwMDAwMDAgLTEwMDAKKysrIGRoY3AtMy4xLjMv
c2VydmVyL2NsYXNzLmMJMjAxMC0wMi0xMyAxMjo1NToxMi4wMDAwMDAwMDAgLTEwMDAKQEAgLTkw
LDYgKzkwLDcgQEAgaW50IGNoZWNrX2NvbGxlY3Rpb24gKHBhY2tldCwgbGVhc2UsIGNvbAogCWlu
dCBtYXRjaGVkID0gMDsKIAlpbnQgc3RhdHVzOwogCWludCBpZ25vcmVwOworCWludCBjbGFzc2Zv
dW5kOwogCiAJZm9yIChjbGFzcyA9IGNvbGxlY3Rpb24gLT4gY2xhc3NlczsgY2xhc3M7IGNsYXNz
ID0gY2xhc3MgLT4gbmljKSB7CiAjaWYgZGVmaW5lZCAoREVCVUdfQ0xBU1NfTUFUQ0hJTkcpCkBA
IC0xMzUsOSArMTM2LDE1IEBAIGludCBjaGVja19jb2xsZWN0aW9uIChwYWNrZXQsIGxlYXNlLCBj
b2wKIAkJCQkgICBjbGFzcyAtPiBzdWJtYXRjaCwgTURMKSk7CiAJCQlpZiAoc3RhdHVzICYmIGRh
dGEubGVuKSB7CiAJCQkJbmMgPSAoc3RydWN0IGNsYXNzICopMDsKLQkJCQlpZiAoY2xhc3NfaGFz
aF9sb29rdXAgKCZuYywgY2xhc3MgLT4gaGFzaCwKLQkJCQkJCSAgICAgICAoY29uc3QgY2hhciAq
KWRhdGEuZGF0YSwKLQkJCQkJCSAgICAgICBkYXRhLmxlbiwgTURMKSkgeworCQkJCWNsYXNzZm91
bmQgPSBjbGFzc19oYXNoX2xvb2t1cCAoJm5jLCBjbGFzcyAtPiBoYXNoLAorCQkJCQkoY29uc3Qg
Y2hhciAqKWRhdGEuZGF0YSwgZGF0YS5sZW4sIE1ETCk7CisKKyNpZmRlZiBMREFQX0NPTkZJR1VS
QVRJT04KKwkJCQlpZiAoIWNsYXNzZm91bmQgJiYgZmluZF9zdWJjbGFzc19pbl9sZGFwIChjbGFz
cywgJm5jLCAmZGF0YSkpCisJCQkJCWNsYXNzZm91bmQgPSAxOworI2VuZGlmCisKKwkJCQlpZiAo
Y2xhc3Nmb3VuZCkgewogI2lmIGRlZmluZWQgKERFQlVHX0NMQVNTX01BVENISU5HKQogCQkJCQls
b2dfaW5mbyAoIm1hdGNoZXMgc3ViY2xhc3MgJXMuIiwKIAkJCQkJICAgICAgcHJpbnRfaGV4XzEg
KGRhdGEubGVuLApkaWZmIC11cCBkaGNwLTMuMS4zL3NlcnZlci9jb25mcGFycy5jLmxkYXAgZGhj
cC0zLjEuMy9zZXJ2ZXIvY29uZnBhcnMuYwotLS0gZGhjcC0zLjEuMy9zZXJ2ZXIvY29uZnBhcnMu
Yy5sZGFwCTIwMDktMDktMDEgMTA6MzI6MjguMDAwMDAwMDAwIC0xMDAwCisrKyBkaGNwLTMuMS4z
L3NlcnZlci9jb25mcGFycy5jCTIwMTAtMDItMTMgMTI6NTU6MTIuMDAwMDAwMDAwIC0xMDAwCkBA
IC02Myw3ICs2MywxNyBAQCB2b2lkIHBhcnNlX3RyYWNlX3NldHVwICgpCiAKIGlzY19yZXN1bHRf
dCByZWFkY29uZiAoKQogewotCXJldHVybiByZWFkX2NvbmZfZmlsZSAocGF0aF9kaGNwZF9jb25m
LCByb290X2dyb3VwLCBST09UX0dST1VQLCAwKTsKKwlpc2NfcmVzdWx0X3QgcmVzOworCisJcmVz
ID0gcmVhZF9jb25mX2ZpbGUgKHBhdGhfZGhjcGRfY29uZiwgcm9vdF9ncm91cCwgUk9PVF9HUk9V
UCwgMCk7CisjaWYgZGVmaW5lZChMREFQX0NPTkZJR1VSQVRJT04pCisJaWYgKHJlcyAhPSBJU0Nf
Ul9TVUNDRVNTKQorCQlyZXR1cm4gKHJlcyk7CisKKwlyZXR1cm4gbGRhcF9yZWFkX2NvbmZpZyAo
KTsKKyNlbHNlCisJcmV0dXJuIChyZXMpOworI2VuZGlmCiB9CiAKIGlzY19yZXN1bHRfdCByZWFk
X2NvbmZfZmlsZSAoY29uc3QgY2hhciAqZmlsZW5hbWUsIHN0cnVjdCBncm91cCAqZ3JvdXAsCmRp
ZmYgLXVwIGRoY3AtMy4xLjMvc2VydmVyL2RoY3BkLmMubGRhcCBkaGNwLTMuMS4zL3NlcnZlci9k
aGNwZC5jCi0tLSBkaGNwLTMuMS4zL3NlcnZlci9kaGNwZC5jLmxkYXAJMjAwOS0wOS0wMSAxMDoz
MjoyOC4wMDAwMDAwMDAgLTEwMDAKKysrIGRoY3AtMy4xLjMvc2VydmVyL2RoY3BkLmMJMjAxMC0w
Mi0xMyAxMjo1NToxMi4wMDAwMDAwMDAgLTEwMDAKQEAgLTQzMiw2ICs0MzIsMTQgQEAgaW50IG1h
aW4gKGFyZ2MsIGFyZ3YsIGVudnApCiAJLyogQWRkIHRoZSBkZG5zIHVwZGF0ZSBzdHlsZSBlbnVt
ZXJhdGlvbiBwcmlvciB0byBwYXJzaW5nLiAqLwogCWFkZF9lbnVtZXJhdGlvbiAoJmRkbnNfc3R5
bGVzKTsKIAlhZGRfZW51bWVyYXRpb24gKCZzeXNsb2dfZW51bSk7CisjaWYgZGVmaW5lZCAoTERB
UF9DT05GSUdVUkFUSU9OKQorCWFkZF9lbnVtZXJhdGlvbiAoJmxkYXBfbWV0aG9kcyk7CisjaWYg
ZGVmaW5lZCAoVVNFX1NTTCkKKwlhZGRfZW51bWVyYXRpb24gKCZsZGFwX3NzbF91c2FnZV9lbnVt
KTsKKwlhZGRfZW51bWVyYXRpb24gKCZsZGFwX3Rsc19yZXFjZXJ0X2VudW0pOworCWFkZF9lbnVt
ZXJhdGlvbiAoJmxkYXBfdGxzX2NybGNoZWNrX2VudW0pOworI2VuZGlmCisjZW5kaWYKIAogCWlm
ICghZ3JvdXBfYWxsb2NhdGUgKCZyb290X2dyb3VwLCBNREwpKQogCQlsb2dfZmF0YWwgKCJDYW4n
dCBhbGxvY2F0ZSByb290IGdyb3VwISIpOwpkaWZmIC11cCBkaGNwLTMuMS4zL3NlcnZlci9sZGFw
LmMubGRhcCBkaGNwLTMuMS4zL3NlcnZlci9sZGFwLmMKLS0tIGRoY3AtMy4xLjMvc2VydmVyL2xk
YXAuYy5sZGFwCTIwMTAtMDItMTMgMTI6NTU6MTIuMDAwMDAwMDAwIC0xMDAwCisrKyBkaGNwLTMu
MS4zL3NlcnZlci9sZGFwLmMJMjAxMC0wMi0xMyAxMjo1NTo0OC4wMDAwMDAwMDAgLTEwMDAKQEAg
LTAsMCArMSwyMDAzIEBACisvKiBsZGFwLmMKKworICAgUm91dGluZXMgZm9yIHJlYWRpbmcgdGhl
IGNvbmZpZ3VyYXRpb24gZnJvbSBMREFQICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMt
MjAwNiBOdGVsb3MsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1
bSBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgSU5URVJORVQgU09GVFdBUkUgQ09OU09S
VElVTSBBTkQKKyAqIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBJTlRFUk5FVCBTT0ZUV0FSRSBDT05TT1JUSVVNIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
CisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqIFRoaXMgTERBUCBtb2R1bGUg
d2FzIHdyaXR0ZW4gYnkgQnJpYW4gTWFzbmV5IDxtYXNuZXliQG50ZWxvcy5uZXQ+LiBJdHMKKyAq
IGRldmVsb3BtZW50IHdhcyBzcG9uc29yZWQgYnkgTnRlbG9zLCBJbmMuICh3d3cubnRlbG9zLmNv
bSkuCisgKi8KKworI2luY2x1ZGUgImRoY3BkLmgiCisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKyNp
ZiBkZWZpbmVkKExEQVBfQ09ORklHVVJBVElPTikKKworI2lmIGRlZmluZWQoTERBUF9DQVNBX0FV
VEgpCisjaW5jbHVkZSAibGRhcF9jYXNhLmgiCisjZW5kaWYKKworc3RhdGljIExEQVAgKiBsZCA9
IE5VTEw7CitzdGF0aWMgY2hhciAqbGRhcF9zZXJ2ZXIgPSBOVUxMLCAKKyAgICAgICAgICAgICps
ZGFwX3VzZXJuYW1lID0gTlVMTCwgCisgICAgICAgICAgICAqbGRhcF9wYXNzd29yZCA9IE5VTEws
CisgICAgICAgICAgICAqbGRhcF9iYXNlX2RuID0gTlVMTCwKKyAgICAgICAgICAgICpsZGFwX2Ro
Y3Bfc2VydmVyX2NuID0gTlVMTCwKKyAgICAgICAgICAgICpsZGFwX2RlYnVnX2ZpbGUgPSBOVUxM
Oworc3RhdGljIGludCBsZGFwX3BvcnQgPSBMREFQX1BPUlQsCisgICAgICAgICAgIGxkYXBfbWV0
aG9kID0gTERBUF9NRVRIT0RfRFlOQU1JQywKKyAgICAgICAgICAgbGRhcF9yZWZlcnJhbHMgPSAt
MSwKKyAgICAgICAgICAgbGRhcF9kZWJ1Z19mZCA9IC0xOworI2lmIGRlZmluZWQgKFVTRV9TU0wp
CitzdGF0aWMgaW50IGxkYXBfdXNlX3NzbCA9IC0xLCAgICAgICAgLyogdHJ5IFRMUyBpZiBwb3Nz
aWJsZSAqLworICAgICAgICAgICBsZGFwX3Rsc19yZXFjZXJ0ID0gLTEsCisgICAgICAgICAgIGxk
YXBfdGxzX2NybGNoZWNrID0gLTE7CitzdGF0aWMgY2hhciAqbGRhcF90bHNfY2FfZmlsZSA9IE5V
TEwsCisgICAgICAgICAgICAqbGRhcF90bHNfY2FfZGlyID0gTlVMTCwKKyAgICAgICAgICAgICps
ZGFwX3Rsc19jZXJ0ID0gTlVMTCwKKyAgICAgICAgICAgICpsZGFwX3Rsc19rZXkgPSBOVUxMLAor
ICAgICAgICAgICAgKmxkYXBfdGxzX2NpcGhlcnMgPSBOVUxMLAorICAgICAgICAgICAgKmxkYXBf
dGxzX3JhbmRmaWxlID0gTlVMTDsKKyNlbmRpZgorc3RhdGljIHN0cnVjdCBsZGFwX2NvbmZpZ19z
dGFjayAqbGRhcF9zdGFjayA9IE5VTEw7CisKK3R5cGVkZWYgc3RydWN0IGxkYXBfZG5fbm9kZSB7
CisgICAgc3RydWN0IGxkYXBfZG5fbm9kZSAqbmV4dDsKKyAgICBzaXplX3QgcmVmczsKKyAgICBj
aGFyICpkbjsKK30gbGRhcF9kbl9ub2RlOworCitzdGF0aWMgbGRhcF9kbl9ub2RlICpsZGFwX3Nl
cnZpY2VfZG5faGVhZCA9IE5VTEw7CitzdGF0aWMgbGRhcF9kbl9ub2RlICpsZGFwX3NlcnZpY2Vf
ZG5fdGFpbCA9IE5VTEw7CisKKworc3RhdGljIGNoYXIgKgoreF9zdHJuY2F0KGNoYXIgKmRzdCwg
Y29uc3QgY2hhciAqc3JjLCBzaXplX3QgZHN0X3NpemUpCit7CisgIHNpemVfdCBsZW4gPSBzdHJs
ZW4oZHN0KTsKKyAgcmV0dXJuIHN0cm5jYXQoZHN0LCBzcmMsIGRzdF9zaXplID4gbGVuID8gZHN0
X3NpemUgLSBsZW4gLSAxOiAwKTsKK30KKworc3RhdGljIHZvaWQKK2xkYXBfcGFyc2VfY2xhc3Mg
KHN0cnVjdCBsZGFwX2NvbmZpZ19zdGFjayAqaXRlbSwgc3RydWN0IHBhcnNlICpjZmlsZSkKK3sK
KyAgc3RydWN0IGJlcnZhbCAqKnRlbXBidjsKKworICBpZiAoKHRlbXBidiA9IGxkYXBfZ2V0X3Zh
bHVlc19sZW4gKGxkLCBpdGVtLT5sZGVudCwgImNuIikpID09IE5VTEwgfHwKKyAgICAgIHRlbXBi
dlswXSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGlmICh0ZW1wYnYgIT0gTlVMTCkKKyAgICAgICAg
bGRhcF92YWx1ZV9mcmVlX2xlbiAodGVtcGJ2KTsKKworICAgICAgcmV0dXJuOworICAgIH0KKwor
ICB4X3N0cm5jYXQgKGNmaWxlLT5pbmJ1ZiwgImNsYXNzIFwiIiwgTERBUF9CVUZGRVJfU0laRSk7
CisgIHhfc3RybmNhdCAoY2ZpbGUtPmluYnVmLCB0ZW1wYnZbMF0tPmJ2X3ZhbCwgTERBUF9CVUZG
RVJfU0laRSk7CisgIHhfc3RybmNhdCAoY2ZpbGUtPmluYnVmLCAiXCIge1xuIiwgTERBUF9CVUZG
RVJfU0laRSk7CisKKyAgaXRlbS0+Y2xvc2VfYnJhY2UgPSAxOworICBsZGFwX3ZhbHVlX2ZyZWVf
bGVuICh0ZW1wYnYpOworfQorCisKK3N0YXRpYyB2b2lkCitsZGFwX3BhcnNlX3N1YmNsYXNzIChz
dHJ1Y3QgbGRhcF9jb25maWdfc3RhY2sgKml0ZW0sIHN0cnVjdCBwYXJzZSAqY2ZpbGUpCit7Cisg
IHN0cnVjdCBiZXJ2YWwgKip0ZW1wYnYsICoqY2xhc3NkYXRhOworCisgIGlmICgodGVtcGJ2ID0g
bGRhcF9nZXRfdmFsdWVzX2xlbiAobGQsIGl0ZW0tPmxkZW50LCAiY24iKSkgPT0gTlVMTCB8fAor
ICAgICAgdGVtcGJ2WzBdID09IE5VTEwpCisgICAgeworICAgICAgaWYgKHRlbXBidiAhPSBOVUxM
KQorICAgICAgICBsZGFwX3ZhbHVlX2ZyZWVfbGVuICh0ZW1wYnYpOworCisgICAgICByZXR1cm47
CisgICAgfQorCisgIGlmICgoY2xhc3NkYXRhID0gbGRhcF9nZXRfdmFsdWVzX2xlbiAobGQsIGl0
ZW0tPmxkZW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGhjcENsYXNz
RGF0YSIpKSA9PSBOVUxMIHx8IAorICAgICAgY2xhc3NkYXRhWzBdID09IE5VTEwpCisgICAgewor
ICAgICAgaWYgKGNsYXNzZGF0YSAhPSBOVUxMKQorICAgICAgICBsZGFwX3ZhbHVlX2ZyZWVfbGVu
IChjbGFzc2RhdGEpOworICAgICAgbGRhcF92YWx1ZV9mcmVlX2xlbiAodGVtcGJ2KTsKKworICAg
ICAgcmV0dXJuOworICAgIH0KKworICB4X3N0cm5jYXQgKGNmaWxlLT5pbmJ1ZiwgInN1YmNsYXNz
ICIsIExEQVBfQlVGRkVSX1NJWkUpOworICB4X3N0cm5jYXQgKGNmaWxlLT5pbmJ1ZiwgY2xhc3Nk
YXRhWzBdLT5idl92YWwsIExEQVBfQlVGRkVSX1NJWkUpOworICB4X3N0cm5jYXQgKGNmaWxlLT5p
bmJ1ZiwgIiAiLCBMREFQX0JVRkZFUl9TSVpFKTsKKyAgeF9zdHJuY2F0IChjZmlsZS0+aW5idWYs
IHRlbXBidlswXS0+YnZfdmFsLCBMREFQX0JVRkZFUl9TSVpFKTsKKyAgeF9zdHJuY2F0IChjZmls
ZS0+aW5idWYsICIge1xuIiwgTERBUF9CVUZGRVJfU0laRSk7CisKKyAgaXRlbS0+Y2xvc2VfYnJh
Y2UgPSAxOworICBsZGFwX3ZhbHVlX2ZyZWVfbGVuICh0ZW1wYnYpOworICBsZGFwX3ZhbHVlX2Zy
ZWVfbGVuIChjbGFzc2RhdGEpOworfQorCisKK3N0YXRpYyB2b2lkCitsZGFwX3BhcnNlX2hvc3Qg
KHN0cnVjdCBsZGFwX2NvbmZpZ19zdGFjayAqaXRlbSwgc3RydWN0IHBhcnNlICpjZmlsZSkKK3sK
KyAgc3RydWN0IGJlcnZhbCAqKnRlbXBidiwgKipod2FkZHI7CisKKyAgaWYgKCh0ZW1wYnYgPSBs
ZGFwX2dldF92YWx1ZXNfbGVuIChsZCwgaXRlbS0+bGRlbnQsICJjbiIpKSA9PSBOVUxMIHx8Cisg
ICAgICB0ZW1wYnZbMF0gPT0gTlVMTCkKKyAgICB7CisgICAgICBpZiAodGVtcGJ2ICE9IE5VTEwp
CisgICAgICAgIGxkYXBfdmFsdWVfZnJlZV9sZW4gKHRlbXBidik7CisKKyAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgaHdhZGRyID0gbGRhcF9nZXRfdmFsdWVzX2xlbiAobGQsIGl0ZW0tPmxkZW50
LCAiZGhjcEhXQWRkcmVzcyIpOworCisgIHhfc3RybmNhdCAoY2ZpbGUtPmluYnVmLCAiaG9zdCAi
LCBMREFQX0JVRkZFUl9TSVpFKTsKKyAgeF9zdHJuY2F0IChjZmlsZS0+aW5idWYsIHRlbXBidlsw
XS0+YnZfdmFsLCBMREFQX0JVRkZFUl9TSVpFKTsKKworICBpZiAoaHdhZGRyICE9IE5VTEwgJiYg
aHdhZGRyWzBdICE9IE5VTEwpCisgICAgeworICAgICAgeF9zdHJuY2F0IChjZmlsZS0+aW5idWYs
ICIge1xuaGFyZHdhcmUgIiwgTERBUF9CVUZGRVJfU0laRSk7CisgICAgICB4X3N0cm5jYXQgKGNm
aWxlLT5pbmJ1ZiwgaHdhZGRyWzBdLT5idl92YWwsIExEQVBfQlVGRkVSX1NJWkUpOworICAgICAg
eF9zdHJuY2F0IChjZmlsZS0+aW5idWYsICI7XG4iLCBMREFQX0JVRkZFUl9TSVpFKTsKKyAgICAg
IGxkYXBfdmFsdWVfZnJlZV9sZW4gKGh3YWRkcik7CisgICAgfQorCisgIGl0ZW0tPmNsb3NlX2Jy
YWNlID0gMTsKKyAgbGRhcF92YWx1ZV9mcmVlX2xlbiAodGVtcGJ2KTsKK30KKworCitzdGF0aWMg
dm9pZAorbGRhcF9wYXJzZV9zaGFyZWRfbmV0d29yayAoc3RydWN0IGxkYXBfY29uZmlnX3N0YWNr
ICppdGVtLCBzdHJ1Y3QgcGFyc2UgKmNmaWxlKQoreworICBzdHJ1Y3QgYmVydmFsICoqdGVtcGJ2
OworCisgIGlmICgodGVtcGJ2ID0gbGRhcF9nZXRfdmFsdWVzX2xlbiAobGQsIGl0ZW0tPmxkZW50
LCAiY24iKSkgPT0gTlVMTCB8fAorICAgICAgdGVtcGJ2WzBdID09IE5VTEwpCisgICAgeworICAg
ICAgaWYgKHRlbXBidiAhPSBOVUxMKQorICAgICAgICBsZGFwX3ZhbHVlX2ZyZWVfbGVuICh0ZW1w
YnYpOworCisgICAgICByZXR1cm47CisgICAgfQorCisgIHhfc3RybmNhdCAoY2ZpbGUtPmluYnVm
LCAic2hhcmVkLW5ldHdvcmsgXCIiLCBMREFQX0JVRkZFUl9TSVpFKTsKKyAgeF9zdHJuY2F0IChj
ZmlsZS0+aW5idWYsIHRlbXBidlswXS0+YnZfdmFsLCBMREFQX0JVRkZFUl9TSVpFKTsKKyAgeF9z
dHJuY2F0IChjZmlsZS0+aW5idWYsICJcIiB7XG4iLCBMREFQX0JVRkZFUl9TSVpFKTsKKworICBp
dGVtLT5jbG9zZV9icmFjZSA9IDE7CisgIGxkYXBfdmFsdWVfZnJlZV9sZW4gKHRlbXBidik7Cit9
CisKKworc3RhdGljIHZvaWQKK3BhcnNlX25ldG1hc2sgKGludCBuZXRtYXNrLCBjaGFyICpuZXRt
YXNrYnVmKQoreworICB1bnNpZ25lZCBsb25nIG5tOworICBpbnQgaTsKKworICBubSA9IDA7Cisg
IGZvciAoaT0xOyBpIDw9IG5ldG1hc2s7IGkrKykKKyAgICB7CisgICAgICBubSB8PSAxIDw8ICgz
MiAtIGkpOworICAgIH0KKworICBzcHJpbnRmIChuZXRtYXNrYnVmLCAiJWQuJWQuJWQuJWQiLCAo
aW50KSAobm0gPj4gMjQpICYgMHhmZiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChpbnQpIChubSA+PiAxNikgJiAweGZmLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGludCkgKG5tID4+IDgpICYgMHhmZiwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChpbnQpIG5tICYgMHhmZik7Cit9CisKKworc3RhdGljIHZv
aWQKK2xkYXBfcGFyc2Vfc3VibmV0IChzdHJ1Y3QgbGRhcF9jb25maWdfc3RhY2sgKml0ZW0sIHN0
cnVjdCBwYXJzZSAqY2ZpbGUpCit7CisgIHN0cnVjdCBiZXJ2YWwgKip0ZW1wYnYsICoqbmV0bWFz
a3N0cjsKKyAgY2hhciBuZXRtYXNrYnVmWzE2XTsKKyAgaW50IGk7CisKKyAgaWYgKCh0ZW1wYnYg
PSBsZGFwX2dldF92YWx1ZXNfbGVuIChsZCwgaXRlbS0+bGRlbnQsICJjbiIpKSA9PSBOVUxMIHx8
CisgICAgICB0ZW1wYnZbMF0gPT0gTlVMTCkKKyAgICB7CisgICAgICBpZiAodGVtcGJ2ICE9IE5V
TEwpCisgICAgICAgIGxkYXBfdmFsdWVfZnJlZV9sZW4gKHRlbXBidik7CisKKyAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgaWYgKChuZXRtYXNrc3RyID0gbGRhcF9nZXRfdmFsdWVzX2xlbiAobGQs
IGl0ZW0tPmxkZW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGhj
cE5ldG1hc2siKSkgPT0gTlVMTCB8fCAKKyAgICAgIG5ldG1hc2tzdHJbMF0gPT0gTlVMTCkKKyAg
ICB7CisgICAgICBpZiAobmV0bWFza3N0ciAhPSBOVUxMKQorICAgICAgICBsZGFwX3ZhbHVlX2Zy
ZWVfbGVuIChuZXRtYXNrc3RyKTsKKyAgICAgIGxkYXBfdmFsdWVfZnJlZV9sZW4gKHRlbXBidik7
CisKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgeF9zdHJuY2F0IChjZmlsZS0+aW5idWYsICJz
dWJuZXQgIiwgTERBUF9CVUZGRVJfU0laRSk7CisgIHhfc3RybmNhdCAoY2ZpbGUtPmluYnVmLCB0
ZW1wYnZbMF0tPmJ2X3ZhbCwgTERBUF9CVUZGRVJfU0laRSk7CisKKyAgeF9zdHJuY2F0IChjZmls
ZS0+aW5idWYsICIgbmV0bWFzayAiLCBMREFQX0JVRkZFUl9TSVpFKTsKKyAgcGFyc2VfbmV0bWFz
ayAoc3RydG9sIChuZXRtYXNrc3RyWzBdLT5idl92YWwsIE5VTEwsIDEwKSwgbmV0bWFza2J1Zik7
CisgIHhfc3RybmNhdCAoY2ZpbGUtPmluYnVmLCBuZXRtYXNrYnVmLCBMREFQX0JVRkZFUl9TSVpF
KTsKKworICB4X3N0cm5jYXQgKGNmaWxlLT5pbmJ1ZiwgIiB7XG4iLCBMREFQX0JVRkZFUl9TSVpF
KTsKKworICBsZGFwX3ZhbHVlX2ZyZWVfbGVuICh0ZW1wYnYpOworICBsZGFwX3ZhbHVlX2ZyZWVf
bGVuIChuZXRtYXNrc3RyKTsKKworICBpZiAoKHRlbXBidiA9IGxkYXBfZ2V0X3ZhbHVlc19sZW4g
KGxkLCBpdGVtLT5sZGVudCwgImRoY3BSYW5nZSIpKSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGZv
ciAoaT0wOyB0ZW1wYnZbaV0gIT0gTlVMTDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgeF9z
dHJuY2F0IChjZmlsZS0+aW5idWYsICJyYW5nZSIsIExEQVBfQlVGRkVSX1NJWkUpOworICAgICAg
ICAgIHhfc3RybmNhdCAoY2ZpbGUtPmluYnVmLCAiICIsIExEQVBfQlVGRkVSX1NJWkUpOworICAg
ICAgICAgIHhfc3RybmNhdCAoY2ZpbGUtPmluYnVmLCB0ZW1wYnZbaV0tPmJ2X3ZhbCwgTERBUF9C
VUZGRVJfU0laRSk7CisgICAgICAgICAgeF9zdHJuY2F0IChjZmlsZS0+aW5idWYsICI7XG4iLCBM
REFQX0JVRkZFUl9TSVpFKTsKKyAgICAgICAgfQorICAgIH0KKworICBpdGVtLT5jbG9zZV9icmFj
ZSA9IDE7Cit9CisKKworc3RhdGljIHZvaWQKK2xkYXBfcGFyc2VfcG9vbCAoc3RydWN0IGxkYXBf
Y29uZmlnX3N0YWNrICppdGVtLCBzdHJ1Y3QgcGFyc2UgKmNmaWxlKQoreworICBzdHJ1Y3QgYmVy
dmFsICoqdGVtcGJ2OworICBpbnQgaTsKKworICB4X3N0cm5jYXQgKGNmaWxlLT5pbmJ1ZiwgInBv
b2wge1xuIiwgTERBUF9CVUZGRVJfU0laRSk7CisKKyAgaWYgKCh0ZW1wYnYgPSBsZGFwX2dldF92
YWx1ZXNfbGVuIChsZCwgaXRlbS0+bGRlbnQsICJkaGNwUmFuZ2UiKSkgIT0gTlVMTCkKKyAgICB7
CisgICAgICBmb3IgKGk9MDsgdGVtcGJ2W2ldICE9IE5VTEw7IGkrKykKKyAgICAgICAgeworICAg
ICAgICAgIHhfc3RybmNhdCAoY2ZpbGUtPmluYnVmLCAicmFuZ2UiLCBMREFQX0JVRkZFUl9TSVpF
KTsKKyAgICAgICAgICB4X3N0cm5jYXQgKGNmaWxlLT5pbmJ1ZiwgIiAiLCBMREFQX0JVRkZFUl9T
SVpFKTsKKyAgICAgICAgICB4X3N0cm5jYXQgKGNmaWxlLT5pbmJ1ZiwgdGVtcGJ2W2ldLT5idl92
YWwsIExEQVBfQlVGRkVSX1NJWkUpOworICAgICAgICAgIHhfc3RybmNhdCAoY2ZpbGUtPmluYnVm
LCAiO1xuIiwgTERBUF9CVUZGRVJfU0laRSk7CisgICAgICAgIH0KKyAgICAgIGxkYXBfdmFsdWVf
ZnJlZV9sZW4gKHRlbXBidik7CisgICAgfQorCisgIGlmICgodGVtcGJ2ID0gbGRhcF9nZXRfdmFs
dWVzX2xlbiAobGQsIGl0ZW0tPmxkZW50LCAiZGhjcFBlcm1pdExpc3QiKSkgIT0gTlVMTCkKKyAg
ICB7CisgICAgICBmb3IgKGk9MDsgdGVtcGJ2W2ldICE9IE5VTEw7IGkrKykKKyAgICAgICAgewor
ICAgICAgICAgIHhfc3RybmNhdCAoY2ZpbGUtPmluYnVmLCB0ZW1wYnZbaV0tPmJ2X3ZhbCwgTERB
UF9CVUZGRVJfU0laRSk7CisgICAgICAgICAgeF9zdHJuY2F0IChjZmlsZS0+aW5idWYsICI7XG4i
LCBMREFQX0JVRkZFUl9TSVpFKTsKKyAgICAgICAgfQorICAgICAgbGRhcF92YWx1ZV9mcmVlX2xl
biAodGVtcGJ2KTsKKyAgICB9CisKKyAgaXRlbS0+Y2xvc2VfYnJhY2UgPSAxOworfQorCisKK3N0
YXRpYyB2b2lkCitsZGFwX3BhcnNlX2dyb3VwIChzdHJ1Y3QgbGRhcF9jb25maWdfc3RhY2sgKml0
ZW0sIHN0cnVjdCBwYXJzZSAqY2ZpbGUpCit7CisgIHhfc3RybmNhdCAoY2ZpbGUtPmluYnVmLCAi
Z3JvdXAge1xuIiwgTERBUF9CVUZGRVJfU0laRSk7CisgIGl0ZW0tPmNsb3NlX2JyYWNlID0gMTsK
K30KKworCitzdGF0aWMgdm9pZAorbGRhcF9wYXJzZV9rZXkgKHN0cnVjdCBsZGFwX2NvbmZpZ19z
dGFjayAqaXRlbSwgc3RydWN0IHBhcnNlICpjZmlsZSkKK3sKKyAgc3RydWN0IGJlcnZhbCAqKnRl
bXBidjsKKworICBpZiAoKHRlbXBidiA9IGxkYXBfZ2V0X3ZhbHVlc19sZW4gKGxkLCBpdGVtLT5s
ZGVudCwgImNuIikpICE9IE5VTEwpCisgICAgeworICAgICAgeF9zdHJuY2F0IChjZmlsZS0+aW5i
dWYsICJrZXkgIiwgTERBUF9CVUZGRVJfU0laRSk7CisgICAgICB4X3N0cm5jYXQgKGNmaWxlLT5p
bmJ1ZiwgdGVtcGJ2WzBdLT5idl92YWwsIExEQVBfQlVGRkVSX1NJWkUpOworICAgICAgeF9zdHJu
Y2F0IChjZmlsZS0+aW5idWYsICIge1xuIiwgTERBUF9CVUZGRVJfU0laRSk7CisgICAgICBsZGFw
X3ZhbHVlX2ZyZWVfbGVuICh0ZW1wYnYpOworICAgIH0KKworICBpZiAoKHRlbXBidiA9IGxkYXBf
Z2V0X3ZhbHVlc19sZW4gKGxkLCBpdGVtLT5sZGVudCwgImRoY3BLZXlBbGdvcml0aG0iKSkgIT0g
TlVMTCkKKyAgICB7CisgICAgICB4X3N0cm5jYXQgKGNmaWxlLT5pbmJ1ZiwgImFsZ29yaXRobSAi
LCBMREFQX0JVRkZFUl9TSVpFKTsKKyAgICAgIHhfc3RybmNhdCAoY2ZpbGUtPmluYnVmLCB0ZW1w
YnZbMF0tPmJ2X3ZhbCwgTERBUF9CVUZGRVJfU0laRSk7CisgICAgICB4X3N0cm5jYXQgKGNmaWxl
LT5pbmJ1ZiwgIjtcbiIsIExEQVBfQlVGRkVSX1NJWkUpOworICAgICAgbGRhcF92YWx1ZV9mcmVl
X2xlbiAodGVtcGJ2KTsKKyAgICB9CisKKyAgaWYgKCh0ZW1wYnYgPSBsZGFwX2dldF92YWx1ZXNf
bGVuIChsZCwgaXRlbS0+bGRlbnQsICJkaGNwS2V5U2VjcmV0IikpICE9IE5VTEwpCisgICAgewor
ICAgICAgeF9zdHJuY2F0IChjZmlsZS0+aW5idWYsICJzZWNyZXQgIiwgTERBUF9CVUZGRVJfU0la
RSk7CisgICAgICB4X3N0cm5jYXQgKGNmaWxlLT5pbmJ1ZiwgdGVtcGJ2WzBdLT5idl92YWwsIExE
QVBfQlVGRkVSX1NJWkUpOworICAgICAgeF9zdHJuY2F0IChjZmlsZS0+aW5idWYsICI7XG4iLCBM
REFQX0JVRkZFUl9TSVpFKTsKKyAgICAgIGxkYXBfdmFsdWVfZnJlZV9sZW4gKHRlbXBidik7Cisg
ICAgfQorCisgIGl0ZW0tPmNsb3NlX2JyYWNlID0gMTsKK30KKworCitzdGF0aWMgdm9pZAorbGRh
cF9wYXJzZV96b25lIChzdHJ1Y3QgbGRhcF9jb25maWdfc3RhY2sgKml0ZW0sIHN0cnVjdCBwYXJz
ZSAqY2ZpbGUpCit7CisgIGNoYXIgKmNuRmluZFN0YXJ0LCAqY25GaW5kRW5kOworICBzdHJ1Y3Qg
YmVydmFsICoqdGVtcGJ2OworICBjaGFyICprZXlDbjsKKyAgc2l6ZV90IGxlbjsKKworICBpZiAo
KHRlbXBidiA9IGxkYXBfZ2V0X3ZhbHVlc19sZW4gKGxkLCBpdGVtLT5sZGVudCwgImNuIikpICE9
IE5VTEwpCisgICAgeworICAgICAgeF9zdHJuY2F0IChjZmlsZS0+aW5idWYsICJ6b25lICIsIExE
QVBfQlVGRkVSX1NJWkUpOworICAgICAgeF9zdHJuY2F0IChjZmlsZS0+aW5idWYsIHRlbXBidlsw
XS0+YnZfdmFsLCBMREFQX0JVRkZFUl9TSVpFKTsKKyAgICAgIHhfc3RybmNhdCAoY2ZpbGUtPmlu
YnVmLCAiIHtcbiIsIExEQVBfQlVGRkVSX1NJWkUpOworICAgICAgbGRhcF92YWx1ZV9mcmVlX2xl
biAodGVtcGJ2KTsKKyAgICB9CisKKyAgaWYgKCh0ZW1wYnYgPSBsZGFwX2dldF92YWx1ZXNfbGVu
IChsZCwgaXRlbS0+bGRlbnQsICJkaGNwRG5zWm9uZVNlcnZlciIpKSAhPSBOVUxMKQorICAgIHsK
KyAgICAgIHhfc3RybmNhdCAoY2ZpbGUtPmluYnVmLCAicHJpbWFyeSAiLCBMREFQX0JVRkZFUl9T
SVpFKTsKKyAgICAgIHhfc3RybmNhdCAoY2ZpbGUtPmluYnVmLCB0ZW1wYnZbMF0tPmJ2X3ZhbCwg
TERBUF9CVUZGRVJfU0laRSk7CisKKyAgICAgIHhfc3RybmNhdCAoY2ZpbGUtPmluYnVmLCAiO1xu
IiwgTERBUF9CVUZGRVJfU0laRSk7CisgICAgICBsZGFwX3ZhbHVlX2ZyZWVfbGVuICh0ZW1wYnYp
OworICAgIH0KKworICBpZiAoKHRlbXBidiA9IGxkYXBfZ2V0X3ZhbHVlc19sZW4gKGxkLCBpdGVt
LT5sZGVudCwgImRoY3BLZXlETiIpKSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGNuRmluZFN0YXJ0
ID0gc3RyY2hyKHRlbXBidlswXS0+YnZfdmFsLCc9Jyk7CisgICAgICBpZiAoY25GaW5kU3RhcnQg
IT0gTlVMTCkKKyAgICAgICAgY25GaW5kRW5kID0gc3RyY2hyKCsrY25GaW5kU3RhcnQsJywnKTsK
KyAgICAgIGVsc2UKKyAgICAgICAgY25GaW5kRW5kID0gTlVMTDsKKworICAgICAgaWYgKGNuRmlu
ZEVuZCAhPSBOVUxMICYmIGNuRmluZEVuZCA+IGNuRmluZFN0YXJ0KQorICAgICAgICB7CisgICAg
ICAgICAgbGVuID0gY25GaW5kRW5kIC0gY25GaW5kU3RhcnQ7CisgICAgICAgICAga2V5Q24gPSBk
bWFsbG9jIChsZW4gKyAxLCBNREwpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsK
KyAgICAgICAgICBsZW4gPSAwOworICAgICAgICAgIGtleUNuID0gTlVMTDsKKyAgICAgICAgfQor
CisgICAgICBpZiAoa2V5Q24gIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIHN0cm5jcHkg
KGtleUNuLCBjbkZpbmRTdGFydCwgbGVuKTsKKyAgICAgICAgICBrZXlDbltsZW5dID0gJ1wwJzsK
KworICAgICAgICAgIHhfc3RybmNhdCAoY2ZpbGUtPmluYnVmLCAia2V5ICIsIExEQVBfQlVGRkVS
X1NJWkUpOworICAgICAgICAgIHhfc3RybmNhdCAoY2ZpbGUtPmluYnVmLCBrZXlDbiwgTERBUF9C
VUZGRVJfU0laRSk7CisgICAgICAgICAgeF9zdHJuY2F0IChjZmlsZS0+aW5idWYsICI7XG4iLCBM
REFQX0JVRkZFUl9TSVpFKTsKKworICAgICAgICAgIGRmcmVlIChrZXlDbiwgTURMKTsKKyAgICAg
ICAgfQorCisgICAgICBsZGFwX3ZhbHVlX2ZyZWVfbGVuICh0ZW1wYnYpOworICAgICB9CisKKyAg
aXRlbS0+Y2xvc2VfYnJhY2UgPSAxOworfQorCisKK3N0YXRpYyB2b2lkCithZGRfdG9fY29uZmln
X3N0YWNrIChMREFQTWVzc2FnZSAqIHJlcywgTERBUE1lc3NhZ2UgKiBlbnQpCit7CisgIHN0cnVj
dCBsZGFwX2NvbmZpZ19zdGFjayAqbnM7CisKKyAgbnMgPSBkbWFsbG9jIChzaXplb2YgKCpucyks
IE1ETCk7CisgIG5zLT5yZXMgPSByZXM7CisgIG5zLT5sZGVudCA9IGVudDsKKyAgbnMtPmNsb3Nl
X2JyYWNlID0gMDsKKyAgbnMtPnByb2Nlc3NlZCA9IDA7CisgIG5zLT5uZXh0ID0gbGRhcF9zdGFj
azsKKyAgbGRhcF9zdGFjayA9IG5zOworfQorCisKK3N0YXRpYyB2b2lkCitsZGFwX3N0b3AoKQor
eworICBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZCwgbmV3OworCisgIGlmIChsZCA9PSBOVUxMKQorICAg
IHJldHVybjsKKworICAvKgorICAgKiogbGRhcF91bmJpbmQgYWZ0ZXIgYSBMREFQX1NFUlZFUl9E
T1dOIHJlc3VsdAorICAgKiogY2F1c2VzIGEgU0lHUElQRSBhbmQgZGhjcGQgZ2V0cyB0ZXJtaW5h
dGVkLAorICAgKiogc2luY2UgaXQgZG9lc24ndCBoYW5kbGUgaXQuLi4KKyAgICovCisKKyAgbmV3
LnNhX2ZsYWdzICAgPSAwOworICBuZXcuc2FfaGFuZGxlciA9IFNJR19JR047CisgIHNpZ2VtcHR5
c2V0ICgmbmV3LnNhX21hc2spOworICBzaWdhY3Rpb24gKFNJR1BJUEUsICZuZXcsICZvbGQpOwor
CisgIGxkYXBfdW5iaW5kX2V4dF9zIChsZCwgTlVMTCwgTlVMTCk7CisgIGxkID0gTlVMTDsKKwor
ICBzaWdhY3Rpb24gKFNJR1BJUEUsICZvbGQsICZuZXcpOworfQorCisKK3N0YXRpYyBjaGFyICoK
K19kb19sb29rdXBfZGhjcF9zdHJpbmdfb3B0aW9uIChzdHJ1Y3Qgb3B0aW9uX3N0YXRlICpvcHRp
b25zLCBpbnQgb3B0aW9uX25hbWUpCit7CisgIHN0cnVjdCBvcHRpb25fY2FjaGUgKm9jOworICBz
dHJ1Y3QgZGF0YV9zdHJpbmcgZGI7CisgIGNoYXIgKnJldDsKKworICBtZW1zZXQgKCZkYiwgMCwg
c2l6ZW9mIChkYikpOworICBvYyA9IGxvb2t1cF9vcHRpb24gKCZzZXJ2ZXJfdW5pdmVyc2UsIG9w
dGlvbnMsIG9wdGlvbl9uYW1lKTsKKyAgaWYgKG9jICYmCisgICAgICBldmFsdWF0ZV9vcHRpb25f
Y2FjaGUgKCZkYiwgKHN0cnVjdCBwYWNrZXQqKSBOVUxMLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoc3RydWN0IGxlYXNlICopIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChzdHJ1Y3QgY2xpZW50X3N0YXRlICopIE5VTEwsIG9wdGlvbnMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChzdHJ1Y3Qgb3B0aW9uX3N0YXRlICopIE5VTEwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZnbG9iYWxfc2NvcGUsIG9jLCBNREwpICYmCisgICAgICBkYi5k
YXRhICE9IE5VTEwgJiYgKmRiLmRhdGEgIT0gJ1wwJykKKworICAgIHsKKyAgICAgIHJldCA9IGRt
YWxsb2MgKGRiLmxlbiArIDEsIE1ETCk7CisgICAgICBpZiAocmV0ID09IE5VTEwpCisgICAgICAg
IGxvZ19mYXRhbCAoIm5vIG1lbW9yeSBmb3IgbGRhcCBvcHRpb24gJWQgdmFsdWUiLCBvcHRpb25f
bmFtZSk7CisKKyAgICAgIG1lbWNweSAocmV0LCBkYi5kYXRhLCBkYi5sZW4pOworICAgICAgcmV0
W2RiLmxlbl0gPSAwOworICAgICAgZGF0YV9zdHJpbmdfZm9yZ2V0ICgmZGIsIE1ETCk7CisgICAg
fQorICBlbHNlCisgICAgcmV0ID0gTlVMTDsKKworICByZXR1cm4gKHJldCk7Cit9CisKKworc3Rh
dGljIGludAorX2RvX2xvb2t1cF9kaGNwX2ludF9vcHRpb24gKHN0cnVjdCBvcHRpb25fc3RhdGUg
Km9wdGlvbnMsIGludCBvcHRpb25fbmFtZSkKK3sKKyAgc3RydWN0IG9wdGlvbl9jYWNoZSAqb2M7
CisgIHN0cnVjdCBkYXRhX3N0cmluZyBkYjsKKyAgaW50IHJldDsKKworICBtZW1zZXQgKCZkYiwg
MCwgc2l6ZW9mIChkYikpOworICBvYyA9IGxvb2t1cF9vcHRpb24gKCZzZXJ2ZXJfdW5pdmVyc2Us
IG9wdGlvbnMsIG9wdGlvbl9uYW1lKTsKKyAgaWYgKG9jICYmCisgICAgICBldmFsdWF0ZV9vcHRp
b25fY2FjaGUgKCZkYiwgKHN0cnVjdCBwYWNrZXQqKSBOVUxMLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoc3RydWN0IGxlYXNlICopIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChzdHJ1Y3QgY2xpZW50X3N0YXRlICopIE5VTEwsIG9wdGlvbnMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgb3B0aW9uX3N0YXRlICopIE5VTEwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZnbG9iYWxfc2NvcGUsIG9jLCBNREwpICYmCisgICAgICBk
Yi5kYXRhICE9IE5VTEwgJiYgKmRiLmRhdGEgIT0gJ1wwJykKKyAgICB7CisgICAgICByZXQgPSBz
dHJ0b2wgKChjb25zdCBjaGFyICopIGRiLmRhdGEsIE5VTEwsIDEwKTsKKyAgICAgIGRhdGFfc3Ry
aW5nX2ZvcmdldCAoJmRiLCBNREwpOworICAgIH0KKyAgZWxzZQorICAgIHJldCA9IDA7CisKKyAg
cmV0dXJuIChyZXQpOworfQorCisKK3N0YXRpYyBpbnQKK19kb19sb29rdXBfZGhjcF9lbnVtX29w
dGlvbiAoc3RydWN0IG9wdGlvbl9zdGF0ZSAqb3B0aW9ucywgaW50IG9wdGlvbl9uYW1lKQorewor
ICBzdHJ1Y3Qgb3B0aW9uX2NhY2hlICpvYzsKKyAgc3RydWN0IGRhdGFfc3RyaW5nIGRiOworICBp
bnQgcmV0ID0gLTE7CisKKyAgbWVtc2V0ICgmZGIsIDAsIHNpemVvZiAoZGIpKTsKKyAgb2MgPSBs
b29rdXBfb3B0aW9uICgmc2VydmVyX3VuaXZlcnNlLCBvcHRpb25zLCBvcHRpb25fbmFtZSk7Cisg
IGlmIChvYyAmJgorICAgICAgZXZhbHVhdGVfb3B0aW9uX2NhY2hlICgmZGIsIChzdHJ1Y3QgcGFj
a2V0KikgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBsZWFzZSAq
KSBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNsaWVudF9zdGF0
ZSAqKSBOVUxMLCBvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0
IG9wdGlvbl9zdGF0ZSAqKSBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2xv
YmFsX3Njb3BlLCBvYywgTURMKSAmJgorICAgICAgZGIuZGF0YSAhPSBOVUxMICYmICpkYi5kYXRh
ICE9ICdcMCcpCisgICAgeworICAgICAgaWYgKGRiLmxlbiA9PSAxKSAKKyAgICAgICAgcmV0ID0g
ZGIuZGF0YSBbMF07CisgICAgICBlbHNlCisgICAgICAgIGxvZ19mYXRhbCAoImludmFsaWQgb3B0
aW9uIG5hbWUgJWQiLCBvcHRpb25fbmFtZSk7CisKKyAgICAgIGRhdGFfc3RyaW5nX2ZvcmdldCAo
JmRiLCBNREwpOworICAgIH0KKyAgZWxzZQorICAgIHJldCA9IDA7CisKKyAgcmV0dXJuIChyZXQp
OworfQorCitpbnQKK2xkYXBfcmViaW5kX2NiIChMREFQICpsZCwgTERBUF9DT05TVCBjaGFyICp1
cmwsIGJlcl90YWdfdCByZXF1ZXN0LCBiZXJfaW50X3QgbXNnaWQsIHZvaWQgKnBhcm1zKQorewor
ICBpbnQgcmV0OworICBMREFQVVJMRGVzYyAqbGRhcHVybCA9IE5VTEw7CisgIGNoYXIgKndobyA9
IE5VTEw7CisgIHN0cnVjdCBiZXJ2YWwgY3JlZHM7CisKKyAgbG9nX2luZm8oIkxEQVAgcmViaW5k
IHRvICclcyciLCB1cmwpOworICBpZiAoKHJldCA9IGxkYXBfdXJsX3BhcnNlKHVybCwgJmxkYXB1
cmwpKSAhPSBMREFQX1NVQ0NFU1MpCisgICAgeworICAgICAgbG9nX2Vycm9yICgiRXJyb3I6IENh
biBub3QgcGFyc2UgbGRhcCByZWJpbmQgdXJsICclcyc6ICVzIiwKKyAgICAgICAgICAgICAgICAg
dXJsLCBsZGFwX2VycjJzdHJpbmcocmV0KSk7CisgICAgICByZXR1cm4gcmV0OworICAgIH0KKwor
CisjaWYgZGVmaW5lZCAoVVNFX1NTTCkKKyAgaWYgKHN0cmNhc2VjbXAobGRhcHVybC0+bHVkX3Nj
aGVtZSwgImxkYXBzIikgPT0gMCkKKyAgICB7CisgICAgICBpbnQgb3B0ID0gTERBUF9PUFRfWF9U
TFNfSEFSRDsKKyAgICAgIGlmICgocmV0ID0gbGRhcF9zZXRfb3B0aW9uIChsZCwgTERBUF9PUFRf
WF9UTFMsICZvcHQpKSAhPSBMREFQX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICBsb2df
ZXJyb3IgKCJFcnJvcjogQ2Fubm90IGluaXQgTERBUFMgc2Vzc2lvbiB0byAlczolZDogJXMiLAor
ICAgICAgICAgICAgICAgICAgICBsZGFwdXJsLT5sdWRfaG9zdCwgbGRhcHVybC0+bHVkX3BvcnQs
IGxkYXBfZXJyMnN0cmluZyAocmV0KSk7CisgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAg
fQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgbG9nX2luZm8gKCJMREFQUyBzZXNz
aW9uIHN1Y2Nlc3NmdWxseSBlbmFibGVkIHRvICVzIiwgbGRhcF9zZXJ2ZXIpOworICAgICAgICB9
CisgICAgfQorICBlbHNlCisgIGlmIChzdHJjYXNlY21wKGxkYXB1cmwtPmx1ZF9zY2hlbWUsICJs
ZGFwIikgPT0gMCAmJgorICAgICAgbGRhcF91c2Vfc3NsICE9IExEQVBfU1NMX09GRikKKyAgICB7
CisgICAgICBpZiAoKHJldCA9IGxkYXBfc3RhcnRfdGxzX3MgKGxkLCBOVUxMLCBOVUxMKSkgIT0g
TERBUF9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgbG9nX2Vycm9yICgiRXJyb3I6IENh
bm5vdCBzdGFydCBUTFMgc2Vzc2lvbiB0byAlczolZDogJXMiLAorICAgICAgICAgICAgICAgICAg
ICAgbGRhcHVybC0+bHVkX2hvc3QsIGxkYXB1cmwtPmx1ZF9wb3J0LCBsZGFwX2VycjJzdHJpbmcg
KHJldCkpOworICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgIGxvZ19pbmZvICgiVExTIHNlc3Npb24gc3VjY2Vzc2Z1bGx5IHN0
YXJ0ZWQgdG8gJXM6JWQiLAorICAgICAgICAgICAgICAgICAgICBsZGFwdXJsLT5sdWRfaG9zdCwg
bGRhcHVybC0+bHVkX3BvcnQpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKworICBpZiAo
bGRhcF91c2VybmFtZSAhPSBOVUxMIHx8ICpsZGFwX3VzZXJuYW1lICE9ICdcMCcpCisgICAgewor
ICAgICAgd2hvID0gbGRhcF91c2VybmFtZTsKKyAgICAgIGNyZWRzLmJ2X3ZhbCA9IHN0cmR1cChs
ZGFwX3Bhc3N3b3JkKTsKKyAgICAgIGNyZWRzLmJ2X2xlbiA9IHN0cmxlbihsZGFwX3Bhc3N3b3Jk
KTsKKyAgICB9CisKKyAgaWYgKChyZXQgPSBsZGFwX3Nhc2xfYmluZF9zIChsZCwgd2hvLCBMREFQ
X1NBU0xfU0lNUExFLCAmY3JlZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM
TCwgTlVMTCwgTlVMTCkpICE9IExEQVBfU1VDQ0VTUykKKyAgICB7CisgICAgICBsb2dfZXJyb3Ig
KCJFcnJvcjogQ2Fubm90IGxvZ2luIGludG8gbGRhcCBzZXJ2ZXIgJXM6JWQ6ICVzIiwKKyAgICAg
ICAgICAgICAgICAgbGRhcHVybC0+bHVkX2hvc3QsIGxkYXB1cmwtPmx1ZF9wb3J0LCBsZGFwX2Vy
cjJzdHJpbmcgKHJldCkpOworICAgIH0KKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQK
K2xkYXBfc3RhcnQgKHZvaWQpCit7CisgIHN0cnVjdCBvcHRpb25fc3RhdGUgKm9wdGlvbnM7Cisg
IGludCByZXQsIHZlcnNpb247CisgIGNoYXIgKnVyaSA9IE5VTEw7CisgIHN0cnVjdCBiZXJ2YWwg
Y3JlZHM7CisKKyAgaWYgKGxkICE9IE5VTEwpCisgICAgcmV0dXJuOworCisgIGlmIChsZGFwX3Nl
cnZlciA9PSBOVUxMKQorICAgIHsKKyAgICAgIG9wdGlvbnMgPSBOVUxMOworICAgICAgb3B0aW9u
X3N0YXRlX2FsbG9jYXRlICgmb3B0aW9ucywgTURMKTsKKworICAgICAgZXhlY3V0ZV9zdGF0ZW1l
bnRzX2luX3Njb3BlICgoc3RydWN0IGJpbmRpbmdfdmFsdWUgKiopIE5VTEwsCisgICAgICAgICAg
ICAgICAgIChzdHJ1Y3QgcGFja2V0ICopIE5VTEwsIChzdHJ1Y3QgbGVhc2UgKikgTlVMTCwKKyAg
ICAgICAgICAgICAgICAgKHN0cnVjdCBjbGllbnRfc3RhdGUgKikgTlVMTCwgKHN0cnVjdCBvcHRp
b25fc3RhdGUgKikgTlVMTCwKKyAgICAgICAgICAgICAgICAgb3B0aW9ucywgJmdsb2JhbF9zY29w
ZSwgcm9vdF9ncm91cCwgKHN0cnVjdCBncm91cCAqKSBOVUxMKTsKKworICAgICAgbGRhcF9zZXJ2
ZXIgPSBfZG9fbG9va3VwX2RoY3Bfc3RyaW5nX29wdGlvbiAob3B0aW9ucywgU1ZfTERBUF9TRVJW
RVIpOworICAgICAgbGRhcF9kaGNwX3NlcnZlcl9jbiA9IF9kb19sb29rdXBfZGhjcF9zdHJpbmdf
b3B0aW9uIChvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU1ZfTERBUF9ESENQX1NFUlZFUl9DTik7CisgICAgICBsZGFwX3BvcnQg
PSBfZG9fbG9va3VwX2RoY3BfaW50X29wdGlvbiAob3B0aW9ucywgU1ZfTERBUF9QT1JUKTsKKyAg
ICAgIGxkYXBfYmFzZV9kbiA9IF9kb19sb29rdXBfZGhjcF9zdHJpbmdfb3B0aW9uIChvcHRpb25z
LCBTVl9MREFQX0JBU0VfRE4pOworICAgICAgbGRhcF9tZXRob2QgPSBfZG9fbG9va3VwX2RoY3Bf
ZW51bV9vcHRpb24gKG9wdGlvbnMsIFNWX0xEQVBfTUVUSE9EKTsKKyAgICAgIGxkYXBfZGVidWdf
ZmlsZSA9IF9kb19sb29rdXBfZGhjcF9zdHJpbmdfb3B0aW9uIChvcHRpb25zLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNWX0xEQVBfREVC
VUdfRklMRSk7CisgICAgICBsZGFwX3JlZmVycmFscyA9IF9kb19sb29rdXBfZGhjcF9lbnVtX29w
dGlvbiAob3B0aW9ucywgU1ZfTERBUF9SRUZFUlJBTFMpOworCisjaWYgZGVmaW5lZCAoVVNFX1NT
TCkKKyAgICAgIGxkYXBfdXNlX3NzbCA9IF9kb19sb29rdXBfZGhjcF9lbnVtX29wdGlvbiAob3B0
aW9ucywgU1ZfTERBUF9TU0wpOworICAgICAgaWYoIGxkYXBfdXNlX3NzbCAhPSBMREFQX1NTTF9P
RkYpCisgICAgICAgIHsKKyAgICAgICAgICBsZGFwX3Rsc19yZXFjZXJ0ID0gX2RvX2xvb2t1cF9k
aGNwX2VudW1fb3B0aW9uIChvcHRpb25zLCBTVl9MREFQX1RMU19SRVFDRVJUKTsKKyAgICAgICAg
ICBsZGFwX3Rsc19jYV9maWxlID0gX2RvX2xvb2t1cF9kaGNwX3N0cmluZ19vcHRpb24gKG9wdGlv
bnMsIFNWX0xEQVBfVExTX0NBX0ZJTEUpOworICAgICAgICAgIGxkYXBfdGxzX2NhX2RpciA9IF9k
b19sb29rdXBfZGhjcF9zdHJpbmdfb3B0aW9uIChvcHRpb25zLCBTVl9MREFQX1RMU19DQV9ESVIp
OworICAgICAgICAgIGxkYXBfdGxzX2NlcnQgPSBfZG9fbG9va3VwX2RoY3Bfc3RyaW5nX29wdGlv
biAob3B0aW9ucywgU1ZfTERBUF9UTFNfQ0VSVCk7CisgICAgICAgICAgbGRhcF90bHNfa2V5ID0g
X2RvX2xvb2t1cF9kaGNwX3N0cmluZ19vcHRpb24gKG9wdGlvbnMsIFNWX0xEQVBfVExTX0tFWSk7
CisgICAgICAgICAgbGRhcF90bHNfY3JsY2hlY2sgPSBfZG9fbG9va3VwX2RoY3BfZW51bV9vcHRp
b24gKG9wdGlvbnMsIFNWX0xEQVBfVExTX0NSTENIRUNLKTsKKyAgICAgICAgICBsZGFwX3Rsc19j
aXBoZXJzID0gX2RvX2xvb2t1cF9kaGNwX3N0cmluZ19vcHRpb24gKG9wdGlvbnMsIFNWX0xEQVBf
VExTX0NJUEhFUlMpOworICAgICAgICAgIGxkYXBfdGxzX3JhbmRmaWxlID0gX2RvX2xvb2t1cF9k
aGNwX3N0cmluZ19vcHRpb24gKG9wdGlvbnMsIFNWX0xEQVBfVExTX1JBTkRGSUxFKTsKKyAgICAg
ICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChMREFQX0NBU0FfQVVUSCkKKyAgICAgIGlmICgh
bG9hZF91bmFtZV9wd2RfZnJvbV9taUNBU0EoJmxkYXBfdXNlcm5hbWUsJmxkYXBfcGFzc3dvcmQp
KQorICAgICAgICB7CisjaWYgZGVmaW5lZCAoREVCVUdfTERBUCkKKyAgICAgICAgICBsb2dfaW5m
byAoIkF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWwgdGFrZW4gZnJvbSBmaWxlIik7CisjZW5kaWYK
KyNlbmRpZgorCisgICAgICBsZGFwX3VzZXJuYW1lID0gX2RvX2xvb2t1cF9kaGNwX3N0cmluZ19v
cHRpb24gKG9wdGlvbnMsIFNWX0xEQVBfVVNFUk5BTUUpOworICAgICAgbGRhcF9wYXNzd29yZCA9
IF9kb19sb29rdXBfZGhjcF9zdHJpbmdfb3B0aW9uIChvcHRpb25zLCBTVl9MREFQX1BBU1NXT1JE
KTsKKworI2lmIGRlZmluZWQgKExEQVBfQ0FTQV9BVVRIKQorICAgICAgfQorI2VuZGlmCisKKyAg
ICAgIG9wdGlvbl9zdGF0ZV9kZXJlZmVyZW5jZSAoJm9wdGlvbnMsIE1ETCk7CisgICAgfQorCisg
IGlmIChsZGFwX3NlcnZlciA9PSBOVUxMIHx8IGxkYXBfYmFzZV9kbiA9PSBOVUxMKQorICAgIHsK
KyAgICAgIGxvZ19pbmZvICgiTm90IHNlYXJjaGluZyBMREFQIHNpbmNlIGxkYXAtc2VydmVyLCBs
ZGFwLXBvcnQgYW5kIGxkYXAtYmFzZS1kbiB3ZXJlIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbmZp
ZyBmaWxlIik7CisgICAgICBsZGFwX21ldGhvZCA9IExEQVBfTUVUSE9EX1NUQVRJQzsKKyAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgaWYgKGxkYXBfZGVidWdfZmlsZSAhPSBOVUxMICYmIGxkYXBf
ZGVidWdfZmQgPT0gLTEpCisgICAgeworICAgICAgaWYgKChsZGFwX2RlYnVnX2ZkID0gb3BlbiAo
bGRhcF9kZWJ1Z19maWxlLCBPX0NSRUFUIHwgT19UUlVOQyB8IE9fV1JPTkxZLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU19JUlVTUiB8IFNfSVdVU1IpKSA8IDApCisgICAgICAg
IGxvZ19lcnJvciAoIkVycm9yIG9wZW5pbmcgZGVidWcgTERBUCBsb2cgZmlsZSAlczogJXMiLCBs
ZGFwX2RlYnVnX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IgKGVycm5vKSk7Cisg
ICAgfQorCisjaWYgZGVmaW5lZCAoREVCVUdfTERBUCkKKyAgbG9nX2luZm8gKCJDb25uZWN0aW5n
IHRvIExEQVAgc2VydmVyICVzOiVkIiwgbGRhcF9zZXJ2ZXIsIGxkYXBfcG9ydCk7CisjZW5kaWYK
KworI2lmIGRlZmluZWQgKFVTRV9TU0wpCisgIGlmIChsZGFwX3VzZV9zc2wgPT0gLTEpCisgICAg
eworICAgICAgLyoKKyAgICAgICoqIFRoZXJlIHdhcyBubyAibGRhcC1zc2wiIG9wdGlvbiBpbiBk
aGNwZC5jb25mIChhbHNvIG5vdCAib2ZmIikuCisgICAgICAqKiBMZXQncyB0cnksIGlmIHdlIGNh
biB1c2UgYW4gYW5vbnltb3VzIFRMUyBzZXNzaW9uIHdpdGhvdXQgdG8KKyAgICAgICoqIHZlcmlm
eSB0aGUgc2VydmVyIGNlcnRpZmljYXRlIC0tIGlmIG5vdCBjb250aW51ZSB3aXRob3V0IFRMUy4K
KyAgICAgICovCisgICAgICBpbnQgb3B0ID0gTERBUF9PUFRfWF9UTFNfQUxMT1c7CisgICAgICBp
ZiAoKHJldCA9IGxkYXBfc2V0X29wdGlvbiAoTlVMTCwgTERBUF9PUFRfWF9UTFNfUkVRVUlSRV9D
RVJULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcHQpKSAhPSBMREFQX1NV
Q0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICBsb2dfZXJyb3IgKCJXYXJuaW5nOiBDYW5ub3Qg
c2V0IExEQVAgVExTIHJlcXVpcmUgY2VydCBvcHRpb24gdG8gJ2FsbG93JzogJXMiLAorICAgICAg
ICAgICAgICAgICAgICAgbGRhcF9lcnIyc3RyaW5nIChyZXQpKTsKKyAgICAgICAgfQorICAgIH0K
KworICBpZiAobGRhcF91c2Vfc3NsICE9IExEQVBfU1NMX09GRikKKyAgICB7CisgICAgICBpZiAo
bGRhcF90bHNfcmVxY2VydCAhPSAtMSkKKyAgICAgICAgeworICAgICAgICAgIGlmICgocmV0ID0g
bGRhcF9zZXRfb3B0aW9uIChOVUxMLCBMREFQX09QVF9YX1RMU19SRVFVSVJFX0NFUlQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsZGFwX3Rsc19yZXFjZXJ0KSkgIT0g
TERBUF9TVUNDRVNTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBsb2dfZXJyb3IgKCJD
YW5ub3Qgc2V0IExEQVAgVExTIHJlcXVpcmUgY2VydCBvcHRpb246ICVzIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBsZGFwX2VycjJzdHJpbmcgKHJldCkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgIGlmKCBsZGFwX3Rsc19jYV9maWxlICE9IE5VTEwpCisgICAgICAgIHsK
KyAgICAgICAgICBpZiAoKHJldCA9IGxkYXBfc2V0X29wdGlvbiAoTlVMTCwgTERBUF9PUFRfWF9U
TFNfQ0FDRVJURklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGRh
cF90bHNfY2FfZmlsZSkpICE9IExEQVBfU1VDQ0VTUykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgbG9nX2Vycm9yICgiQ2Fubm90IHNldCBMREFQIFRMUyBDQSBjZXJ0aWZpY2F0ZSBmaWxl
ICVzOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgbGRhcF90bHNfY2FfZmlsZSwgbGRh
cF9lcnIyc3RyaW5nIChyZXQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgaWYo
IGxkYXBfdGxzX2NhX2RpciAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgaWYgKChyZXQg
PSBsZGFwX3NldF9vcHRpb24gKE5VTEwsIExEQVBfT1BUX1hfVExTX0NBQ0VSVERJUiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGRhcF90bHNfY2FfZGlyKSkgIT0gTERB
UF9TVUNDRVNTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBsb2dfZXJyb3IgKCJDYW5u
b3Qgc2V0IExEQVAgVExTIENBIGNlcnRpZmljYXRlIGRpciAlczogJXMiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIGxkYXBfdGxzX2NhX2RpciwgbGRhcF9lcnIyc3RyaW5nIChyZXQpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgaWYoIGxkYXBfdGxzX2NlcnQgIT0gTlVMTCkK
KyAgICAgICAgeworICAgICAgICAgIGlmICgocmV0ID0gbGRhcF9zZXRfb3B0aW9uIChOVUxMLCBM
REFQX09QVF9YX1RMU19DRVJURklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGRhcF90bHNfY2VydCkpICE9IExEQVBfU1VDQ0VTUykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgbG9nX2Vycm9yICgiQ2Fubm90IHNldCBMREFQIFRMUyBjbGllbnQgY2VydGlm
aWNhdGUgZmlsZSAlczogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxkYXBfdGxzX2Nl
cnQsIGxkYXBfZXJyMnN0cmluZyAocmV0KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgIGlmKCBsZGFwX3Rsc19rZXkgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIGlmICgo
cmV0ID0gbGRhcF9zZXRfb3B0aW9uIChOVUxMLCBMREFQX09QVF9YX1RMU19LRVlGSUxFLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZGFwX3Rsc19rZXkpKSAhPSBMREFQ
X1NVQ0NFU1MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGxvZ19lcnJvciAoIkNhbm5v
dCBzZXQgTERBUCBUTFMgY2VydGlmaWNhdGUga2V5IGZpbGUgJXM6ICVzIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBsZGFwX3Rsc19rZXksIGxkYXBfZXJyMnN0cmluZyAocmV0KSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGlmKCBsZGFwX3Rsc19jcmxjaGVjayAhPSAtMSkK
KyAgICAgICAgeworICAgICAgICAgIGludCBvcHQgPSBsZGFwX3Rsc19jcmxjaGVjazsKKyAgICAg
ICAgICBpZiAoKHJldCA9IGxkYXBfc2V0X29wdGlvbiAoTlVMTCwgTERBUF9PUFRfWF9UTFNfQ1JM
Q0hFQ0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcHQpKSAhPSBM
REFQX1NVQ0NFU1MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGxvZ19lcnJvciAoIkNh
bm5vdCBzZXQgTERBUCBUTFMgY3JsIGNoZWNrIG9wdGlvbjogJXMiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGxkYXBfZXJyMnN0cmluZyAocmV0KSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgIGlmKCBsZGFwX3Rsc19jaXBoZXJzICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAg
ICAgICBpZiAoKHJldCA9IGxkYXBfc2V0X29wdGlvbiAoTlVMTCwgTERBUF9PUFRfWF9UTFNfQ0lQ
SEVSX1NVSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZGFwX3Rs
c19jaXBoZXJzKSkgIT0gTERBUF9TVUNDRVNTKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBsb2dfZXJyb3IgKCJDYW5ub3Qgc2V0IExEQVAgVExTIGNpcGhlciBzdWl0ZSAlczogJXMiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGxkYXBfdGxzX2NpcGhlcnMsIGxkYXBfZXJyMnN0cmlu
ZyAocmV0KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGlmKCBsZGFwX3Rsc19y
YW5kZmlsZSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgaWYgKChyZXQgPSBsZGFwX3Nl
dF9vcHRpb24gKE5VTEwsIExEQVBfT1BUX1hfVExTX1JBTkRPTV9GSUxFLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsZGFwX3Rsc19yYW5kZmlsZSkpICE9IExEQVBfU1VD
Q0VTUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbG9nX2Vycm9yICgiQ2Fubm90IHNl
dCBMREFQIFRMUyByYW5kb20gZmlsZSAlczogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAg
IGxkYXBfdGxzX3JhbmRmaWxlLCBsZGFwX2VycjJzdHJpbmcgKHJldCkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgLyogZW5vdWdoIGZvciAnbGRhcDovLysg
KyBob3N0bmFtZSArICc6JyArIHBvcnQgbnVtYmVyICovCisgIHVyaSA9IG1hbGxvYyhzdHJsZW4o
bGRhcF9zZXJ2ZXIpICsgMTYpOworICBpZiAodXJpID09IE5VTEwpCisgICAgeworICAgICAgbG9n
X2Vycm9yICgiQ2Fubm90IGJ1aWxkIGxkYXAgaW5pdCBVUkkgJXM6JWQiLCBsZGFwX3NlcnZlciwg
bGRhcF9wb3J0KTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgc3ByaW50Zih1cmksICJsZGFw
Oi8vJXM6JWQiLCBsZGFwX3NlcnZlciwgbGRhcF9wb3J0KTsKKyAgbGRhcF9pbml0aWFsaXplKCZs
ZCwgdXJpKTsKKworICBpZiAobGQgPT0gTlVMTCkKKyAgICB7CisgICAgICBsb2dfZXJyb3IgKCJD
YW5ub3QgaW5pdCBsZGFwIHNlc3Npb24gdG8gJXM6JWQiLCBsZGFwX3NlcnZlciwgbGRhcF9wb3J0
KTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgZnJlZSh1cmkpOworCisgIHZlcnNpb24gPSBM
REFQX1ZFUlNJT04zOworICBpZiAoKHJldCA9IGxkYXBfc2V0X29wdGlvbiAobGQsIExEQVBfT1BU
X1BST1RPQ09MX1ZFUlNJT04sICZ2ZXJzaW9uKSkgIT0gTERBUF9PUFRfU1VDQ0VTUykKKyAgICB7
CisgICAgICBsb2dfZXJyb3IgKCJDYW5ub3Qgc2V0IExEQVAgdmVyc2lvbiB0byAlZDogJXMiLCB2
ZXJzaW9uLAorICAgICAgICAgICAgICAgICBsZGFwX2VycjJzdHJpbmcgKHJldCkpOworICAgIH0K
KworICBpZiAobGRhcF9yZWZlcnJhbHMgIT0gLTEpCisgICAgeworICAgICAgaWYgKChyZXQgPSBs
ZGFwX3NldF9vcHRpb24gKGxkLCBMREFQX09QVF9SRUZFUlJBTFMsIGxkYXBfcmVmZXJyYWxzID8K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMREFQX09QVF9PTiA6IExEQVBfT1BU
X09GRikpICE9IExEQVBfT1BUX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICBsb2dfZXJy
b3IgKCJDYW5ub3QgJXMgTERBUCByZWZlcnJhbHMgb3B0aW9uOiAlcyIsCisgICAgICAgICAgICAg
ICAgICAgICAobGRhcF9yZWZlcnJhbHMgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIiksCisgICAgICAg
ICAgICAgICAgICAgICBsZGFwX2VycjJzdHJpbmcgKHJldCkpOworICAgICAgICB9CisgICAgfQor
CisgIGlmICgocmV0ID0gbGRhcF9zZXRfcmViaW5kX3Byb2MobGQsIGxkYXBfcmViaW5kX2NiLCBO
VUxMKSkgIT0gTERBUF9TVUNDRVNTKQorICAgIHsKKyAgICAgIGxvZ19lcnJvciAoIldhcm5pbmc6
IENhbm5vdCBzZXQgbGRhcCByZWJpbmQgcHJvY2VkdXJlOiAlcyIsCisgICAgICAgICAgICAgICAg
IGxkYXBfZXJyMnN0cmluZyAocmV0KSk7CisgICAgfQorCisjaWYgZGVmaW5lZCAoVVNFX1NTTCkK
KyAgaWYgKGxkYXBfdXNlX3NzbCA9PSBMREFQX1NTTF9MREFQUyB8fAorICAgICAobGRhcF91c2Vf
c3NsID09IExEQVBfU1NMX09OICYmIGxkYXBfcG9ydCA9PSBMREFQU19QT1JUKSkKKyAgICB7Cisg
ICAgICBpbnQgb3B0ID0gTERBUF9PUFRfWF9UTFNfSEFSRDsKKyAgICAgIGlmICgocmV0ID0gbGRh
cF9zZXRfb3B0aW9uIChsZCwgTERBUF9PUFRfWF9UTFMsICZvcHQpKSAhPSBMREFQX1NVQ0NFU1Mp
CisgICAgICAgIHsKKyAgICAgICAgICBsb2dfZXJyb3IgKCJFcnJvcjogQ2Fubm90IGluaXQgTERB
UFMgc2Vzc2lvbiB0byAlczolZDogJXMiLAorICAgICAgICAgICAgICAgICAgICBsZGFwX3NlcnZl
ciwgbGRhcF9wb3J0LCBsZGFwX2VycjJzdHJpbmcgKHJldCkpOworICAgICAgICAgIGxkYXBfc3Rv
cCgpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgbG9nX2luZm8gKCJMREFQUyBzZXNzaW9uIHN1Y2Nlc3NmdWxseSBlbmFibGVk
IHRvICVzOiVkIiwKKyAgICAgICAgICAgICAgICAgICAgbGRhcF9zZXJ2ZXIsIGxkYXBfcG9ydCk7
CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UgaWYgKGxkYXBfdXNlX3NzbCAhPSBMREFQX1NTTF9P
RkYpCisgICAgeworICAgICAgaWYgKChyZXQgPSBsZGFwX3N0YXJ0X3Rsc19zIChsZCwgTlVMTCwg
TlVMTCkpICE9IExEQVBfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgIGxvZ19lcnJvciAo
IkVycm9yOiBDYW5ub3Qgc3RhcnQgVExTIHNlc3Npb24gdG8gJXM6JWQ6ICVzIiwKKyAgICAgICAg
ICAgICAgICAgICAgIGxkYXBfc2VydmVyLCBsZGFwX3BvcnQsIGxkYXBfZXJyMnN0cmluZyAocmV0
KSk7CisgICAgICAgICAgbGRhcF9zdG9wKCk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBsb2dfaW5mbyAoIlRMUyBzZXNzaW9u
IHN1Y2Nlc3NmdWxseSBzdGFydGVkIHRvICVzOiVkIiwKKyAgICAgICAgICAgICAgICAgICAgbGRh
cF9zZXJ2ZXIsIGxkYXBfcG9ydCk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICBpZiAo
bGRhcF91c2VybmFtZSAhPSBOVUxMICYmICpsZGFwX3VzZXJuYW1lICE9ICdcMCcpCisgICAgewor
ICAgICAgY3JlZHMuYnZfdmFsID0gc3RyZHVwKGxkYXBfcGFzc3dvcmQpOworICAgICAgY3JlZHMu
YnZfbGVuID0gc3RybGVuKGxkYXBfcGFzc3dvcmQpOworCisgICAgICBpZiAoKHJldCA9IGxkYXBf
c2FzbF9iaW5kX3MgKGxkLCBsZGFwX3VzZXJuYW1lLCBMREFQX1NBU0xfU0lNUExFLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNyZWRzLCBOVUxMLCBOVUxMLCBOVUxMKSkg
IT0gTERBUF9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgbG9nX2Vycm9yICgiRXJyb3I6
IENhbm5vdCBsb2dpbiBpbnRvIGxkYXAgc2VydmVyICVzOiVkOiAlcyIsCisgICAgICAgICAgICAg
ICAgICAgICBsZGFwX3NlcnZlciwgbGRhcF9wb3J0LCBsZGFwX2VycjJzdHJpbmcgKHJldCkpOwor
ICAgICAgICAgIGxkYXBfc3RvcCgpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworI2lmIGRlZmluZWQgKERFQlVHX0xEQVApCisgIGxvZ19pbmZvICgiU3VjY2Vzc2Z1bGx5
IGxvZ2dlZCBpbnRvIExEQVAgc2VydmVyICVzIiwgbGRhcF9zZXJ2ZXIpOworI2VuZGlmCit9CisK
Kworc3RhdGljIHZvaWQKK3BhcnNlX2V4dGVybmFsX2RucyAoTERBUE1lc3NhZ2UgKiBlbnQpCit7
CisgIGNoYXIgKnNlYXJjaFtdID0geyJkaGNwT3B0aW9uc0ROIiwgImRoY3BTaGFyZWROZXR3b3Jr
RE4iLCAiZGhjcFN1Ym5ldEROIiwKKyAgICAgICAgICAgICAgICAgICAgImRoY3BHcm91cEROIiwg
ImRoY3BIb3N0RE4iLCAiZGhjcENsYXNzZXNETiIsCisgICAgICAgICAgICAgICAgICAgICJkaGNw
UG9vbEROIiwgTlVMTH07CisgIExEQVBNZXNzYWdlICogbmV3cmVzLCAqIG5ld2VudDsKKyAgc3Ry
dWN0IGJlcnZhbCAqKnRlbXBidjsKKyAgaW50IGksIGosIHJldDsKKyNpZiBkZWZpbmVkIChERUJV
R19MREFQKQorICBjaGFyICpkbjsKKworICBkbiA9IGxkYXBfZ2V0X2RuIChsZCwgZW50KTsKKyAg
aWYgKGRuICE9IE5VTEwpCisgICAgeworICAgICAgbG9nX2luZm8gKCJQYXJzaW5nIGV4dGVybmFs
IEROcyBmb3IgJyVzJyIsIGRuKTsKKyAgICAgIGxkYXBfbWVtZnJlZSAoZG4pOworICAgIH0KKyNl
bmRpZgorCisgIGlmIChsZCA9PSBOVUxMKQorICAgIGxkYXBfc3RhcnQgKCk7CisgIGlmIChsZCA9
PSBOVUxMKQorICAgIHJldHVybjsKKworICBmb3IgKGk9MDsgc2VhcmNoW2ldICE9IE5VTEw7IGkr
KykKKyAgICB7CisgICAgICBpZiAoKHRlbXBidiA9IGxkYXBfZ2V0X3ZhbHVlc19sZW4gKGxkLCBl
bnQsIHNlYXJjaFtpXSkpID09IE5VTEwpCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBmb3Ig
KGo9MDsgdGVtcGJ2W2pdICE9IE5VTEw7IGorKykKKyAgICAgICAgeworICAgICAgICAgIGlmICgq
dGVtcGJ2W2pdLT5idl92YWwgPT0gJ1wwJykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgaWYgKChyZXQgPSBsZGFwX3NlYXJjaF9leHRfcyhsZCwgdGVtcGJ2W2pdLT5idl92YWws
IExEQVBfU0NPUEVfQkFTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJvYmplY3RDbGFzcz0qIiwgTlVMTCwgMCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIDAsICZuZXdyZXMpKSAhPSBMREFQX1NVQ0NFU1Mp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGxkYXBfdmFsdWVfZnJlZV9sZW4gKHRlbXBi
dik7CisgICAgICAgICAgICAgIGxkYXBfc3RvcCgpOworICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgCisjaWYgZGVmaW5lZCAoREVCVUdfTERBUCkKKyAgICAgICAgICBs
b2dfaW5mbyAoIkFkZGluZyBjb250ZW50cyBvZiBzdWJ0cmVlICclcycgdG8gY29uZmlnIHN0YWNr
IGZyb20gJyVzJyByZWZlcmVuY2UiLCB0ZW1wYnZbal0sIHNlYXJjaFtpXSk7CisjZW5kaWYKKyAg
ICAgICAgICBmb3IgKG5ld2VudCA9IGxkYXBfZmlyc3RfZW50cnkgKGxkLCBuZXdyZXMpOworICAg
ICAgICAgICAgICAgbmV3ZW50ICE9IE5VTEw7CisgICAgICAgICAgICAgICBuZXdlbnQgPSBsZGFw
X25leHRfZW50cnkgKGxkLCBuZXdlbnQpKQorICAgICAgICAgICAgeworI2lmIGRlZmluZWQgKERF
QlVHX0xEQVApCisgICAgICAgICAgICAgIGRuID0gbGRhcF9nZXRfZG4gKGxkLCBuZXdlbnQpOwor
ICAgICAgICAgICAgICBpZiAoZG4gIT0gTlVMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICBsb2dfaW5mbyAoIkFkZGluZyBMREFQIHJlc3VsdCBzZXQgc3RhcnRpbmcgd2l0
aCAnJXMnIHRvIGNvbmZpZyBzdGFjayIsIGRuKTsKKyAgICAgICAgICAgICAgICAgIGxkYXBfbWVt
ZnJlZSAoZG4pOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgICAgICAgIGFk
ZF90b19jb25maWdfc3RhY2sgKG5ld3JlcywgbmV3ZW50KTsKKyAgICAgICAgICAgICAgLyogZG9u
J3QgZnJlZSBuZXdyZXMgaGVyZSAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
IGxkYXBfdmFsdWVfZnJlZV9sZW4gKHRlbXBidik7CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lk
CitmcmVlX3N0YWNrX2VudHJ5IChzdHJ1Y3QgbGRhcF9jb25maWdfc3RhY2sgKml0ZW0pCit7Cisg
IHN0cnVjdCBsZGFwX2NvbmZpZ19zdGFjayAqbG9va19haGVhZF9wb2ludGVyID0gaXRlbTsKKyAg
aW50IG1heV9mcmVlX21zZyA9IDE7CisKKyAgd2hpbGUgKGxvb2tfYWhlYWRfcG9pbnRlci0+bmV4
dCAhPSBOVUxMKQorICAgIHsKKyAgICAgIGxvb2tfYWhlYWRfcG9pbnRlciA9IGxvb2tfYWhlYWRf
cG9pbnRlci0+bmV4dDsKKyAgICAgIGlmIChsb29rX2FoZWFkX3BvaW50ZXItPnJlcyA9PSBpdGVt
LT5yZXMpCisgICAgICAgIHsKKyAgICAgICAgICBtYXlfZnJlZV9tc2cgPSAwOworICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgIGlmIChtYXlfZnJlZV9tc2cpIAorICAgIGxk
YXBfbXNnZnJlZSAoaXRlbS0+cmVzKTsKKworICBkZnJlZSAoaXRlbSwgTURMKTsKK30KKworCitz
dGF0aWMgdm9pZAorbmV4dF9sZGFwX2VudHJ5IChzdHJ1Y3QgcGFyc2UgKmNmaWxlKQoreworICBz
dHJ1Y3QgbGRhcF9jb25maWdfc3RhY2sgKnRlbXBfc3RhY2s7CisKKyAgaWYgKGxkYXBfc3RhY2sg
IT0gTlVMTCAmJiBsZGFwX3N0YWNrLT5jbG9zZV9icmFjZSkKKyAgICB7CisgICAgICB4X3N0cm5j
YXQgKGNmaWxlLT5pbmJ1ZiwgIn1cbiIsIExEQVBfQlVGRkVSX1NJWkUpOworICAgICAgbGRhcF9z
dGFjay0+Y2xvc2VfYnJhY2UgPSAwOworICAgIH0KKworICB3aGlsZSAobGRhcF9zdGFjayAhPSBO
VUxMICYmIAorICAgICAgICAgKGxkYXBfc3RhY2stPmxkZW50ID09IE5VTEwgfHwKKyAgICAgICAg
ICAobGRhcF9zdGFjay0+bGRlbnQgPSBsZGFwX25leHRfZW50cnkgKGxkLCBsZGFwX3N0YWNrLT5s
ZGVudCkpID09IE5VTEwpKQorICAgIHsKKyAgICAgIGlmIChsZGFwX3N0YWNrLT5jbG9zZV9icmFj
ZSkKKyAgICAgICAgeworICAgICAgICAgIHhfc3RybmNhdCAoY2ZpbGUtPmluYnVmLCAifVxuIiwg
TERBUF9CVUZGRVJfU0laRSk7CisgICAgICAgICAgbGRhcF9zdGFjay0+Y2xvc2VfYnJhY2UgPSAw
OworICAgICAgICB9CisKKyAgICAgIHRlbXBfc3RhY2sgPSBsZGFwX3N0YWNrOworICAgICAgbGRh
cF9zdGFjayA9IGxkYXBfc3RhY2stPm5leHQ7CisgICAgICBmcmVlX3N0YWNrX2VudHJ5ICh0ZW1w
X3N0YWNrKTsKKyAgICB9CisKKyAgaWYgKGxkYXBfc3RhY2sgIT0gTlVMTCAmJiBsZGFwX3N0YWNr
LT5jbG9zZV9icmFjZSkKKyAgICB7CisgICAgICB4X3N0cm5jYXQgKGNmaWxlLT5pbmJ1ZiwgIn1c
biIsIExEQVBfQlVGRkVSX1NJWkUpOworICAgICAgbGRhcF9zdGFjay0+Y2xvc2VfYnJhY2UgPSAw
OworICAgIH0KK30KKworCitzdGF0aWMgY2hhcgorY2hlY2tfc3RhdGVtZW50X2VuZCAoY29uc3Qg
Y2hhciAqc3RhdGVtZW50KQoreworICBjaGFyICpwdHI7CisKKyAgaWYgKHN0YXRlbWVudCA9PSBO
VUxMIHx8ICpzdGF0ZW1lbnQgPT0gJ1wwJykKKyAgICByZXR1cm4gKCdcMCcpOworCisgIC8qCisg
ICoqIGNoZWNrIGlmIGl0IGVuZHMgd2l0aCAifSIsIGUuZy46CisgICoqICAgInpvbmUgbXkuZG9t
YWluLiB7IC4uLiB9IgorICAqKiBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IHNwYWNlcworICAqLwor
ICBwdHIgPSBzdHJyY2hyIChzdGF0ZW1lbnQsICd9Jyk7CisgIGlmIChwdHIgIT0gTlVMTCkKKyAg
ICB7CisgICAgICAvKiBza2lwIGZvbGxvd2luZyB3aGl0ZS1zcGFjZXMgKi8KKyAgICAgIGZvciAo
KytwdHI7IGlzc3BhY2UgKChpbnQpKnB0cik7IHB0cisrKTsKKworICAgICAgLyogY2hlY2sgaWYg
d2UgcmVhY2hlZCB0aGUgZW5kICovCisgICAgICBpZiAoKnB0ciA9PSAnXDAnKQorICAgICAgICBy
ZXR1cm4gKCd9Jyk7IC8qIHllcywgYmxvY2sgZW5kICovCisgICAgICBlbHNlCisgICAgICAgIHJl
dHVybiAoKnB0cik7CisgICAgfQorCisgIC8qCisgICoqIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4s
IGJ1dC4uLgorICAqKiBjaGVjayBpZiBpdCBlbmRzIHdpdGggIjsiLCBlLmcuOgorICAqKiAgICJh
dXRob3JpdGF0aXZlOyIKKyAgKiogb3B0aW9uYWxseSBmb2xsb3dlZCBieSBzcGFjZXMKKyAgKi8K
KyAgcHRyID0gc3RycmNociAoc3RhdGVtZW50LCAnOycpOworICBpZiAocHRyICE9IE5VTEwpCisg
ICAgeworICAgICAgLyogc2tpcCBmb2xsb3dpbmcgd2hpdGUtc3BhY2VzICovCisgICAgICBmb3Ig
KCsrcHRyOyBpc3NwYWNlICgoaW50KSpwdHIpOyBwdHIrKyk7CisKKyAgICAgIC8qIGNoZWNrIGlm
IHdlIHJlYWNoZWQgdGhlIGVuZCAqLworICAgICAgaWYgKCpwdHIgPT0gJ1wwJykKKyAgICAgICAg
cmV0dXJuICgnOycpOyAvKiBlbmRzIHdpdGggYSA7ICovCisgICAgICBlbHNlCisgICAgICAgIHJl
dHVybiAoKnB0cik7CisgICAgfQorCisgIHJldHVybiAoJ1wwJyk7Cit9CisKKworc3RhdGljIGlz
Y19yZXN1bHRfdAorbGRhcF9wYXJzZV9lbnRyeV9vcHRpb25zIChMREFQTWVzc2FnZSAqZW50LCBj
aGFyICpidWZmZXIsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
KmxlYXNlX2xpbWl0KQoreworICBzdHJ1Y3QgYmVydmFsICoqdGVtcGJ2OworICBpbnQgaTsKKwor
ICBpZiAoZW50ID09IE5VTEwgfHwgYnVmZmVyID09IE5VTEwgfHwgc2l6ZSA9PSAwKQorICAgIHJl
dHVybiAoSVNDX1JfRkFJTFVSRSk7CisKKyAgaWYgKCh0ZW1wYnYgPSBsZGFwX2dldF92YWx1ZXNf
bGVuIChsZCwgZW50LCAiZGhjcFN0YXRlbWVudHMiKSkgIT0gTlVMTCkKKyAgICB7CisgICAgICBm
b3IgKGk9MDsgdGVtcGJ2W2ldICE9IE5VTEw7IGkrKykKKyAgICAgICAgeworICAgICAgICAgIGlm
IChsZWFzZV9saW1pdCAhPSBOVUxMICYmCisgICAgICAgICAgICAgIHN0cm5jYXNlY21wICgibGVh
c2UgbGltaXQgIiwgdGVtcGJ2W2ldLT5idl92YWwsIDEyKSA9PSAwKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAqbGVhc2VfbGltaXQgPSAoaW50KSBzdHJ0b2wgKCh0ZW1wYnZbaV0tPmJ2
X3ZhbCkgKyAxMiwgTlVMTCwgMTApOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgIHhfc3RybmNhdCAoYnVmZmVyLCB0ZW1wYnZbaV0tPmJ2X3ZhbCwg
c2l6ZSk7CisKKyAgICAgICAgICBzd2l0Y2goKGludCkgY2hlY2tfc3RhdGVtZW50X2VuZCAodGVt
cGJ2W2ldLT5idl92YWwpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlICd9JzoK
KyAgICAgICAgICAgICAgY2FzZSAnOyc6CisgICAgICAgICAgICAgICAgeF9zdHJuY2F0IChidWZm
ZXIsICJcbiIsIHNpemUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIHhfc3RybmNhdCAoYnVmZmVyLCAiO1xuIiwgc2l6ZSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
IGxkYXBfdmFsdWVfZnJlZV9sZW4gKHRlbXBidik7CisgICAgfQorCisgIGlmICgodGVtcGJ2ID0g
bGRhcF9nZXRfdmFsdWVzX2xlbiAobGQsIGVudCwgImRoY3BPcHRpb24iKSkgIT0gTlVMTCkKKyAg
ICB7CisgICAgICBmb3IgKGk9MDsgdGVtcGJ2W2ldICE9IE5VTEw7IGkrKykKKyAgICAgICAgewor
ICAgICAgICAgIHhfc3RybmNhdCAoYnVmZmVyLCAib3B0aW9uICIsIHNpemUpOworICAgICAgICAg
IHhfc3RybmNhdCAoYnVmZmVyLCB0ZW1wYnZbaV0tPmJ2X3ZhbCwgc2l6ZSk7CisgICAgICAgICAg
c3dpdGNoICgoaW50KSBjaGVja19zdGF0ZW1lbnRfZW5kICh0ZW1wYnZbaV0tPmJ2X3ZhbCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgJzsnOgorICAgICAgICAgICAgICAgIHhf
c3RybmNhdCAoYnVmZmVyLCAiXG4iLCBzaXplKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB4X3N0cm5jYXQgKGJ1ZmZlciwg
IjtcbiIsIHNpemUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICBsZGFwX3ZhbHVlX2ZyZWVfbGVuICh0ZW1wYnYpOworICAgIH0KKworICBy
ZXR1cm4gKElTQ19SX1NVQ0NFU1MpOworfQorCisKK3N0YXRpYyB2b2lkCitsZGFwX2dlbmVyYXRl
X2NvbmZpZ19zdHJpbmcgKHN0cnVjdCBwYXJzZSAqY2ZpbGUpCit7CisgIHN0cnVjdCBiZXJ2YWwg
KipvYmplY3RDbGFzczsKKyAgY2hhciAqZG47CisgIHN0cnVjdCBsZGFwX2NvbmZpZ19zdGFjayAq
ZW50cnk7CisgIExEQVBNZXNzYWdlICogZW50LCAqIHJlczsKKyAgaW50IGksIGlnbm9yZSwgZm91
bmQ7CisgIGludCByZXQ7CisKKyAgaWYgKGxkID09IE5VTEwpCisgICAgbGRhcF9zdGFydCAoKTsK
KyAgaWYgKGxkID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIGVudHJ5ID0gbGRhcF9zdGFjazsK
KyAgaWYgKChvYmplY3RDbGFzcyA9IGxkYXBfZ2V0X3ZhbHVlc19sZW4gKGxkLCBlbnRyeS0+bGRl
bnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0Q2xhc3Mi
KSkgPT0gTlVMTCkKKyAgICByZXR1cm47CisgICAgCisgIGlnbm9yZSA9IDA7CisgIGZvdW5kID0g
MTsKKyAgZm9yIChpPTA7IG9iamVjdENsYXNzW2ldICE9IE5VTEw7IGkrKykKKyAgICB7CisgICAg
ICBpZiAoc3RyY2FzZWNtcCAob2JqZWN0Q2xhc3NbaV0tPmJ2X3ZhbCwgImRoY3BTaGFyZWROZXR3
b3JrIikgPT0gMCkKKyAgICAgICAgbGRhcF9wYXJzZV9zaGFyZWRfbmV0d29yayAoZW50cnksIGNm
aWxlKTsKKyAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAgKG9iamVjdENsYXNzW2ldLT5idl92YWws
ICJkaGNwQ2xhc3MiKSA9PSAwKQorICAgICAgICBsZGFwX3BhcnNlX2NsYXNzIChlbnRyeSwgY2Zp
bGUpOworICAgICAgZWxzZSBpZiAoc3RyY2FzZWNtcCAob2JqZWN0Q2xhc3NbaV0tPmJ2X3ZhbCwg
ImRoY3BTdWJuZXQiKSA9PSAwKQorICAgICAgICBsZGFwX3BhcnNlX3N1Ym5ldCAoZW50cnksIGNm
aWxlKTsKKyAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAgKG9iamVjdENsYXNzW2ldLT5idl92YWws
ICJkaGNwUG9vbCIpID09IDApCisgICAgICAgIGxkYXBfcGFyc2VfcG9vbCAoZW50cnksIGNmaWxl
KTsKKyAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAgKG9iamVjdENsYXNzW2ldLT5idl92YWwsICJk
aGNwR3JvdXAiKSA9PSAwKQorICAgICAgICBsZGFwX3BhcnNlX2dyb3VwIChlbnRyeSwgY2ZpbGUp
OworICAgICAgZWxzZSBpZiAoc3RyY2FzZWNtcCAob2JqZWN0Q2xhc3NbaV0tPmJ2X3ZhbCwgImRo
Y3BUU2lnS2V5IikgPT0gMCkKKyAgICAgICAgbGRhcF9wYXJzZV9rZXkgKGVudHJ5LCBjZmlsZSk7
CisgICAgICBlbHNlIGlmIChzdHJjYXNlY21wIChvYmplY3RDbGFzc1tpXS0+YnZfdmFsLCAiZGhj
cERuc1pvbmUiKSA9PSAwKQorICAgICAgICBsZGFwX3BhcnNlX3pvbmUgKGVudHJ5LCBjZmlsZSk7
CisgICAgICBlbHNlIGlmIChzdHJjYXNlY21wIChvYmplY3RDbGFzc1tpXS0+YnZfdmFsLCAiZGhj
cEhvc3QiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGxkYXBfbWV0aG9kID09IExE
QVBfTUVUSE9EX1NUQVRJQykKKyAgICAgICAgICAgIGxkYXBfcGFyc2VfaG9zdCAoZW50cnksIGNm
aWxlKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlnbm9y
ZSA9IDE7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICBlbHNlIGlmIChzdHJjYXNlY21wIChvYmplY3RDbGFzc1tpXS0+YnZfdmFsLCAiZGhjcFN1
YkNsYXNzIikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChsZGFwX21ldGhvZCA9PSBM
REFQX01FVEhPRF9TVEFUSUMpCisgICAgICAgICAgICBsZGFwX3BhcnNlX3N1YmNsYXNzIChlbnRy
eSwgY2ZpbGUpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
aWdub3JlID0gMTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgIGVsc2UKKyAgICAgICAgZm91bmQgPSAwOworCisgICAgICBpZiAoZm91bmQgJiYg
Y2ZpbGUtPmluYnVmWzBdID09ICdcMCcpCisgICAgICAgIHsKKyAgICAgICAgICBpZ25vcmUgPSAx
OworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgIGxkYXBfdmFsdWVfZnJl
ZV9sZW4gKG9iamVjdENsYXNzKTsKKworICBpZiAoaWdub3JlKQorICAgIHsKKyAgICAgIG5leHRf
bGRhcF9lbnRyeSAoY2ZpbGUpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBsZGFwX3BhcnNl
X2VudHJ5X29wdGlvbnMoZW50cnktPmxkZW50LCBjZmlsZS0+aW5idWYsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBMREFQX0JVRkZFUl9TSVpFLTEsIE5VTEwpOworCisgIGRuID0gbGRhcF9n
ZXRfZG4gKGxkLCBlbnRyeS0+bGRlbnQpOworCisjaWYgZGVmaW5lZChERUJVR19MREFQKQorICBp
ZiAoZG4gIT0gTlVMTCkKKyAgICBsb2dfaW5mbyAoIkZvdW5kIExEQVAgZW50cnkgJyVzJyIsIGRu
KTsKKyNlbmRpZgorCisgIGlmIChkbiA9PSBOVUxMIHx8CisgICAgICAocmV0ID0gbGRhcF9zZWFy
Y2hfZXh0X3MgKGxkLCBkbiwgTERBUF9TQ09QRV9PTkVMRVZFTCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIm9iamVjdENsYXNzPSoiLCBOVUxMLCAwLCBOVUxMLCBOVUxMLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAmcmVzKSkgIT0gTERBUF9TVUND
RVNTKQorICAgIHsKKyAgICAgIGlmIChkbikKKyAgICAgICAgbGRhcF9tZW1mcmVlIChkbik7CisK
KyAgICAgIGxkYXBfc3RvcCgpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBsZGFwX21lbWZy
ZWUgKGRuKTsKKworICBpZiAoKGVudCA9IGxkYXBfZmlyc3RfZW50cnkgKGxkLCByZXMpKSAhPSBO
VUxMKQorICAgIHsKKyAgICAgIGFkZF90b19jb25maWdfc3RhY2sgKHJlcywgZW50KTsKKyAgICAg
IHBhcnNlX2V4dGVybmFsX2RucyAoZW50cnktPmxkZW50KTsKKyAgICB9CisgIGVsc2UKKyAgICB7
CisgICAgICBsZGFwX21zZ2ZyZWUgKHJlcyk7CisgICAgICBwYXJzZV9leHRlcm5hbF9kbnMgKGVu
dHJ5LT5sZGVudCk7CisgICAgICBuZXh0X2xkYXBfZW50cnkgKGNmaWxlKTsKKyAgICB9Cit9CisK
Kworc3RhdGljIHZvaWQKK2xkYXBfY2xvc2VfZGVidWdfZmQoKQoreworICBpZiAobGRhcF9kZWJ1
Z19mZCAhPSAtMSkKKyAgICB7CisgICAgICBjbG9zZSAobGRhcF9kZWJ1Z19mZCk7CisgICAgICBs
ZGFwX2RlYnVnX2ZkID0gLTE7CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lkCitsZGFwX3dyaXRl
X2RlYnVnIChjb25zdCB2b2lkICpidWZmLCBzaXplX3Qgc2l6ZSkKK3sKKyAgaWYgKGxkYXBfZGVi
dWdfZmQgIT0gLTEpCisgICAgeworICAgICAgaWYgKHdyaXRlIChsZGFwX2RlYnVnX2ZkLCBidWZm
LCBzaXplKSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICBsb2dfZXJyb3IgKCJFcnJvciB3cml0
aW5nIHRvIExEQVAgZGVidWcgZmlsZSAlczogJXMuIgorICAgICAgICAgICAgICAgICAgICAgIiBE
aXNhYmxpbmcgbG9nIGZpbGUuIiwgbGRhcF9kZWJ1Z19maWxlLAorICAgICAgICAgICAgICAgICAg
ICAgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAgICAgbGRhcF9jbG9zZV9kZWJ1Z19mZCgpOwor
ICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgaW50CitsZGFwX3JlYWRfZnVuY3Rpb24gKHN0
cnVjdCBwYXJzZSAqY2ZpbGUpCit7CisgIGNmaWxlLT5pbmJ1ZlswXSA9ICdcMCc7CisgIGNmaWxl
LT5idWZsZW4gPSAwOworIAorICB3aGlsZSAobGRhcF9zdGFjayAhPSBOVUxMICYmICpjZmlsZS0+
aW5idWYgPT0gJ1wwJykKKyAgICBsZGFwX2dlbmVyYXRlX2NvbmZpZ19zdHJpbmcgKGNmaWxlKTsK
KworICBpZiAobGRhcF9zdGFjayA9PSBOVUxMICYmICpjZmlsZS0+aW5idWYgPT0gJ1wwJykKKyAg
ICByZXR1cm4gKEVPRik7CisKKyAgY2ZpbGUtPmJ1Zml4ID0gMTsKKyAgY2ZpbGUtPmJ1ZmxlbiA9
IHN0cmxlbiAoY2ZpbGUtPmluYnVmKTsKKyAgaWYgKGNmaWxlLT5idWZsZW4gPiAwKQorICAgIGxk
YXBfd3JpdGVfZGVidWcgKGNmaWxlLT5pbmJ1ZiwgY2ZpbGUtPmJ1Zmxlbik7CisKKyNpZiBkZWZp
bmVkIChERUJVR19MREFQKQorICBsb2dfaW5mbyAoIlNlbmRpbmcgY29uZmlnIGxpbmUgJyVzJyIs
IGNmaWxlLT5pbmJ1Zik7CisjZW5kaWYKKworICByZXR1cm4gKGNmaWxlLT5pbmJ1ZlswXSk7Cit9
CisKKworc3RhdGljIGNoYXIgKgorbGRhcF9nZXRfaG9zdF9uYW1lIChMREFQTWVzc2FnZSAqIGVu
dCkKK3sKKyAgc3RydWN0IGJlcnZhbCAqKm5hbWU7CisgIGNoYXIgKnJldDsKKworICByZXQgPSBO
VUxMOworICBpZiAoKG5hbWUgPSBsZGFwX2dldF92YWx1ZXNfbGVuIChsZCwgZW50LCAiY24iKSkg
PT0gTlVMTCB8fCBuYW1lWzBdID09IE5VTEwpCisgICAgeworICAgICAgaWYgKG5hbWUgIT0gTlVM
TCkKKyAgICAgICAgbGRhcF92YWx1ZV9mcmVlX2xlbiAobmFtZSk7CisKKyNpZiBkZWZpbmVkIChE
RUJVR19MREFQKQorICAgICAgcmV0ID0gbGRhcF9nZXRfZG4gKGxkLCBlbnQpOworICAgICAgaWYg
KHJldCAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgbG9nX2luZm8gKCJDYW5ub3QgZ2V0
IGNuIGF0dHJpYnV0ZSBmb3IgTERBUCBlbnRyeSAlcyIsIHJldCk7CisgICAgICAgICAgbGRhcF9t
ZW1mcmVlKHJldCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgcmV0dXJuIChOVUxMKTsKKyAg
ICB9CisKKyAgcmV0ID0gZG1hbGxvYyAoc3RybGVuIChuYW1lWzBdLT5idl92YWwpICsgMSwgTURM
KTsKKyAgc3RyY3B5IChyZXQsIG5hbWVbMF0tPmJ2X3ZhbCk7CisgIGxkYXBfdmFsdWVfZnJlZV9s
ZW4gKG5hbWUpOworCisgIHJldHVybiAocmV0KTsKK30KKworCitzdGF0aWMgaW50CitnZXRmcWhv
c3RuYW1lKGNoYXIgKmZxaG9zdCwgc2l6ZV90IHNpemUpCit7CisjaWYgZGVmaW5lZChNQVhIT1NU
TkFNRUxFTikKKyAgY2hhciAgIGhuYW1lW01BWEhPU1ROQU1FTEVOXTsKKyNlbHNlCisgIGNoYXIg
ICBobmFtZVs2NV07CisjZW5kaWYKKyAgc3RydWN0IGhvc3RlbnQgKmhwOworCisgIGlmKE5VTEwg
PT0gZnFob3N0IHx8IDEgPj0gc2l6ZSkKKyAgICByZXR1cm4gLTE7CisKKyAgbWVtc2V0KGhuYW1l
LCAwLCBzaXplb2YoaG5hbWUpKTsKKyAgaWYoIGdldGhvc3RuYW1lKGhuYW1lLCBzaXplb2YoaG5h
bWUpLTEpKQorICAgIHJldHVybiAtMTsKKworICBpZihOVUxMID09IChocCA9IGdldGhvc3RieW5h
bWUoaG5hbWUpKSkKKyAgICByZXR1cm4gLTE7CisKKyAgc3RybmNweShmcWhvc3QsIGhwLT5oX25h
bWUsIHNpemUtMSk7CisgIGZxaG9zdFtzaXplLTFdID0gJ1wwJzsKKyAgcmV0dXJuIDA7Cit9CisK
KworaXNjX3Jlc3VsdF90CitsZGFwX3JlYWRfY29uZmlnICh2b2lkKQoreworICBMREFQTWVzc2Fn
ZSAqIGxkcmVzLCAqIGhvc3RyZXMsICogZW50LCAqIGhvc3RlbnQ7CisgIGNoYXIgaGZpbHRlclsx
MDI0XSwgc2ZpbHRlclsxMDI0XSwgZnFkblsyNTddOworICBjaGFyICpidWZmZXIsICpob3N0ZG47
CisgIGxkYXBfZG5fbm9kZSAqY3VyciA9IE5VTEw7CisgIHN0cnVjdCBwYXJzZSAqY2ZpbGU7Cisg
IHN0cnVjdCB1dHNuYW1lIHVubWU7CisgIGlzY19yZXN1bHRfdCByZXM7CisgIHNpemVfdCBsZW5n
dGg7CisgIGludCByZXQsIGNudDsKKyAgc3RydWN0IGJlcnZhbCAqKnRlbXBidiA9IE5VTEw7CisK
KyAgaWYgKGxkID09IE5VTEwpCisgICAgbGRhcF9zdGFydCAoKTsKKyAgaWYgKGxkID09IE5VTEwp
CisgICAgcmV0dXJuIChsZGFwX3NlcnZlciA9PSBOVUxMID8gSVNDX1JfU1VDQ0VTUyA6IElTQ19S
X0ZBSUxVUkUpOworIAorICBidWZmZXIgPSBkbWFsbG9jIChMREFQX0JVRkZFUl9TSVpFKzEsIE1E
TCk7CisgIGlmIChidWZmZXIgPT0gTlVMTCkKKyAgICByZXR1cm4gKElTQ19SX0ZBSUxVUkUpOwor
CisgIGNmaWxlID0gKHN0cnVjdCBwYXJzZSAqKSBOVUxMOworICByZXMgPSBuZXdfcGFyc2UgKCZj
ZmlsZSwgLTEsIGJ1ZmZlciwgTERBUF9CVUZGRVJfU0laRSwgIkxEQVAiLCAwKTsKKyAgaWYgKHJl
cyAhPSBJU0NfUl9TVUNDRVNTKQorICAgIHJldHVybiAocmVzKTsKKyAKKyAgdW5hbWUgKCZ1bm1l
KTsKKyAgaWYgKGxkYXBfZGhjcF9zZXJ2ZXJfY24gIT0gTlVMTCkKKyAgICB7CisgICAgIHNucHJp
bnRmIChoZmlsdGVyLCBzaXplb2YgKGhmaWx0ZXIpLAorICAgICAgICAgICAgICAgICIoJihvYmpl
Y3RDbGFzcz1kaGNwU2VydmVyKShjbj0lcykpIiwgbGRhcF9kaGNwX3NlcnZlcl9jbik7CisgICAg
fQorICBlbHNlCisgIHsKKyAgaWYoMCA9PSBnZXRmcWhvc3RuYW1lKGZxZG4sIHNpemVvZihmcWRu
KSkpCisgICAgeworICAgICAgc25wcmludGYgKGhmaWx0ZXIsIHNpemVvZiAoaGZpbHRlciksCisg
ICAgICAgICAgICAgICAgIigmKG9iamVjdENsYXNzPWRoY3BTZXJ2ZXIpKHwoY249JXMpKGNuPSVz
KSkpIiwgCisgICAgICAgICAgICAgICAgdW5tZS5ub2RlbmFtZSwgZnFkbik7CisgICAgfQorICBl
bHNlCisgICAgeworICAgICAgc25wcmludGYgKGhmaWx0ZXIsIHNpemVvZiAoaGZpbHRlciksCisg
ICAgICAgICAgICAgICAgIigmKG9iamVjdENsYXNzPWRoY3BTZXJ2ZXIpKGNuPSVzKSkiLCB1bm1l
Lm5vZGVuYW1lKTsKKyAgICB9CisKKyAgfQorICBob3N0cmVzID0gTlVMTDsKKyAgaWYgKChyZXQg
PSBsZGFwX3NlYXJjaF9leHRfcyAobGQsIGxkYXBfYmFzZV9kbiwgTERBUF9TQ09QRV9TVUJUUkVF
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZmlsdGVyLCBOVUxMLCAwLCBOVUxM
LCBOVUxMLCBOVUxMLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9zdHJl
cykpICE9IExEQVBfU1VDQ0VTUykKKyAgICB7CisgICAgICBsb2dfZXJyb3IgKCJDYW5ub3QgZmlu
ZCBob3N0IExEQVAgZW50cnkgJXMgJXMiLAorCQkgKChsZGFwX2RoY3Bfc2VydmVyX2NuID09IE5V
TEwpPyh1bm1lLm5vZGVuYW1lKToobGRhcF9kaGNwX3NlcnZlcl9jbikpLCBoZmlsdGVyKTsKKyAg
ICAgIGlmKE5VTEwgIT0gaG9zdHJlcykKKyAgICAgICAgbGRhcF9tc2dmcmVlIChob3N0cmVzKTsK
KyAgICAgIGxkYXBfc3RvcCgpOworICAgICAgcmV0dXJuIChJU0NfUl9GQUlMVVJFKTsKKyAgICB9
CisKKyAgaWYgKChob3N0ZW50ID0gbGRhcF9maXJzdF9lbnRyeSAobGQsIGhvc3RyZXMpKSA9PSBO
VUxMKQorICAgIHsKKyAgICAgIGxvZ19lcnJvciAoIkVycm9yOiBDYW5ub3QgZmluZCBMREFQIGVu
dHJ5IG1hdGNoaW5nICVzIiwgaGZpbHRlcik7CisgICAgICBsZGFwX21zZ2ZyZWUgKGhvc3RyZXMp
OworICAgICAgbGRhcF9zdG9wKCk7CisgICAgICByZXR1cm4gKElTQ19SX0ZBSUxVUkUpOworICAg
IH0KKworICBob3N0ZG4gPSBsZGFwX2dldF9kbiAobGQsIGhvc3RlbnQpOworI2lmIGRlZmluZWQo
REVCVUdfTERBUCkKKyAgaWYgKGhvc3RkbiAhPSBOVUxMKQorICAgIGxvZ19pbmZvICgiRm91bmQg
ZGhjcFNlcnZlciBMREFQIGVudHJ5ICclcyciLCBob3N0ZG4pOworI2VuZGlmCisKKyAgaWYgKGhv
c3RkbiA9PSBOVUxMIHx8CisgICAgICAodGVtcGJ2ID0gbGRhcF9nZXRfdmFsdWVzX2xlbiAobGQs
IGhvc3RlbnQsICJkaGNwU2VydmljZUROIikpID09IE5VTEwgfHwKKyAgICAgIHRlbXBidlswXSA9
PSBOVUxMKQorICAgIHsKKyAgICAgIGxvZ19lcnJvciAoIkVycm9yOiBDYW5ub3QgZmluZCBMREFQ
IGVudHJ5IG1hdGNoaW5nICVzIiwgaGZpbHRlcik7CisKKyAgICAgIGlmICh0ZW1wYnYgIT0gTlVM
TCkKKyAgICAgICAgbGRhcF92YWx1ZV9mcmVlX2xlbiAodGVtcGJ2KTsKKworICAgICAgaWYgKGhv
c3RkbikKKyAgICAgICAgbGRhcF9tZW1mcmVlIChob3N0ZG4pOworICAgICAgbGRhcF9tc2dmcmVl
IChob3N0cmVzKTsKKyAgICAgIGxkYXBfc3RvcCgpOworICAgICAgcmV0dXJuIChJU0NfUl9GQUlM
VVJFKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKERFQlVHX0xEQVApCisgIGxvZ19pbmZvICgiTERB
UDogUGFyc2luZyBkaGNwU2VydmVyIG9wdGlvbnMgJyVzJyAuLi4iLCBob3N0ZG4pOworI2VuZGlm
CisKKyAgY2ZpbGUtPmluYnVmWzBdID0gJ1wwJzsKKyAgbGRhcF9wYXJzZV9lbnRyeV9vcHRpb25z
KGhvc3RlbnQsIGNmaWxlLT5pbmJ1ZiwgTERBUF9CVUZGRVJfU0laRSwgTlVMTCk7CisgIGNmaWxl
LT5idWZsZW4gPSBzdHJsZW4gKGNmaWxlLT5pbmJ1Zik7CisgIGlmKGNmaWxlLT5idWZsZW4gPiAw
KQorICAgIHsKKyAgICAgIGxkYXBfd3JpdGVfZGVidWcgKGNmaWxlLT5pbmJ1ZiwgY2ZpbGUtPmJ1
Zmxlbik7CisKKyAgICAgIHJlcyA9IGNvbmZfZmlsZV9zdWJwYXJzZSAoY2ZpbGUsIHJvb3RfZ3Jv
dXAsIFJPT1RfR1JPVVApOworICAgICAgaWYgKHJlcyAhPSBJU0NfUl9TVUNDRVNTKQorICAgICAg
ICB7CisgICAgICAgICAgbG9nX2Vycm9yICgiTERBUDogY2Fubm90IHBhcnNlIGRoY3BTZXJ2ZXIg
ZW50cnkgJyVzJyIsIGhvc3Rkbik7CisgICAgICAgICAgbGRhcF9tZW1mcmVlIChob3N0ZG4pOwor
ICAgICAgICAgIGxkYXBfc3RvcCgpOworICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH0K
KyAgICAgIGNmaWxlLT5pbmJ1ZlswXSA9ICdcMCc7CisgICAgfQorICBsZGFwX21zZ2ZyZWUgKGhv
c3RyZXMpOworCisgIC8qCisgICoqIGF0dGFjaCBsZGFwICh0cmVlKSByZWFkIGZ1bmN0aW9uIG5v
dworICAqLworICBjZmlsZS0+YnVmaXggPSBjZmlsZS0+YnVmbGVuID0gMDsKKyAgY2ZpbGUtPnJl
YWRfZnVuY3Rpb24gPSBsZGFwX3JlYWRfZnVuY3Rpb247CisKKyAgcmVzID0gSVNDX1JfU1VDQ0VT
UzsKKyAgZm9yIChjbnQ9MDsgdGVtcGJ2W2NudF0gIT0gTlVMTDsgY250KyspCisgICAgeworICAg
ICAgc25wcmludGYoc2ZpbHRlciwgc2l6ZW9mKHNmaWx0ZXIpLCAiKCYob2JqZWN0Q2xhc3M9ZGhj
cFNlcnZpY2UpIgorICAgICAgICAgICAgICAgICAgICAgICAgIih8KGRoY3BQcmltYXJ5RE49JXMp
KGRoY3BTZWNvbmRhcnlETj0lcykpKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBob3N0ZG4s
IGhvc3Rkbik7CisgICAgICBsZHJlcyA9IE5VTEw7CisgICAgICBpZiAoKHJldCA9IGxkYXBfc2Vh
cmNoX2V4dF9zIChsZCwgdGVtcGJ2W2NudF0tPmJ2X3ZhbCwgTERBUF9TQ09QRV9CQVNFLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ZpbHRlciwgTlVMTCwgMCwgTlVMTCwg
TlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICZsZHJl
cykpICE9IExEQVBfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgIGxvZ19lcnJvciAoIkVy
cm9yIHNlYXJjaGluZyBmb3IgZGhjcFNlcnZpY2VETiAnJXMnOiAlcy4gUGxlYXNlIHVwZGF0ZSB0
aGUgTERBUCBlbnRyeSAnJXMnIiwKKyAgICAgICAgICAgICAgICAgICAgIHRlbXBidltjbnRdLT5i
dl92YWwsIGxkYXBfZXJyMnN0cmluZyAocmV0KSwgaG9zdGRuKTsKKyAgICAgICAgICBpZihOVUxM
ICE9IGxkcmVzKQorICAgICAgICAgICAgbGRhcF9tc2dmcmVlKGxkcmVzKTsKKyAgICAgICAgICBy
ZXMgPSBJU0NfUl9GQUlMVVJFOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
IGlmICgoZW50ID0gbGRhcF9maXJzdF9lbnRyeSAobGQsIGxkcmVzKSkgPT0gTlVMTCkKKyAgICAg
ICAgeworICAgICAgICAgIGxvZ19lcnJvciAoIkVycm9yOiBDYW5ub3QgZmluZCBkaGNwU2Vydmlj
ZSBETiAnJXMnIHdpdGggcHJpbWFyeSBvciBzZWNvbmRhcnkgc2VydmVyIHJlZmVyZW5jZS4gUGxl
YXNlIHVwZGF0ZSB0aGUgTERBUCBzZXJ2ZXIgZW50cnkgJyVzJyIsCisgICAgICAgICAgICAgICAg
ICAgICB0ZW1wYnZbY250XS0+YnZfdmFsLCBob3N0ZG4pOworCisgICAgICAgICAgbGRhcF9tc2dm
cmVlKGxkcmVzKTsKKyAgICAgICAgICByZXMgPSBJU0NfUl9GQUlMVVJFOworICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgIC8qCisgICAgICAqKiBGSVhNRTogaG93IHRvIGZyZWUg
dGhlIHJlbWVtYmVyZWQgZG4ncyBvbiBleGl0PworICAgICAgKiogICAgICAgIFRoaXMgc2hvdWxk
IGJlIE9LIGlmIGRtYWxsb2MgcmVnaXN0ZXJzIHRoZQorICAgICAgKiogICAgICAgIG1lbW9yeSBp
dCBhbGxvY2F0ZWQgYW5kIGZyZWVzIGl0IG9uIGV4aXQuLgorICAgICAgKi8KKworICAgICAgY3Vy
ciA9IGRtYWxsb2MgKHNpemVvZiAoKmN1cnIpLCBNREwpOworICAgICAgaWYgKGN1cnIgIT0gTlVM
TCkKKyAgICAgICAgeworICAgICAgICAgIGxlbmd0aCA9IHN0cmxlbiAodGVtcGJ2W2NudF0tPmJ2
X3ZhbCk7CisgICAgICAgICAgY3Vyci0+ZG4gPSBkbWFsbG9jIChsZW5ndGggKyAxLCBNREwpOwor
ICAgICAgICAgIGlmIChjdXJyLT5kbiA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBkZnJlZSAoY3VyciwgTURMKTsKKyAgICAgICAgICAgICAgY3VyciA9IE5VTEw7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RyY3B5IChjdXJyLT5kbiwg
dGVtcGJ2W2NudF0tPmJ2X3ZhbCk7CisgICAgICAgIH0KKworICAgICAgaWYgKGN1cnIgIT0gTlVM
TCkKKyAgICAgICAgeworICAgICAgICAgIGN1cnItPnJlZnMrKzsKKworICAgICAgICAgIC8qIGFw
cGVuZCB0byBzZXJ2aWNlLWRuIGxpc3QgKi8KKyAgICAgICAgICBpZiAobGRhcF9zZXJ2aWNlX2Ru
X3RhaWwgIT0gTlVMTCkKKyAgICAgICAgICAgIGxkYXBfc2VydmljZV9kbl90YWlsLT5uZXh0ID0g
Y3VycjsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBsZGFwX3NlcnZpY2VfZG5faGVhZCA9
IGN1cnI7CisKKyAgICAgICAgICBsZGFwX3NlcnZpY2VfZG5fdGFpbCA9IGN1cnI7CisgICAgICAg
IH0KKyAgICAgIGVsc2UKKyAgICAgICAgbG9nX2ZhdGFsICgibm8gbWVtb3J5IHRvIHJlbWVtYmVy
IGxkYXAgc2VydmljZSBkbiIpOworCisjaWYgZGVmaW5lZCAoREVCVUdfTERBUCkKKyAgICAgIGxv
Z19pbmZvICgiTERBUDogUGFyc2luZyBkaGNwU2VydmljZSBETiAnJXMnIC4uLiIsIHRlbXBidltj
bnRdKTsKKyNlbmRpZgorICAgICAgYWRkX3RvX2NvbmZpZ19zdGFjayAobGRyZXMsIGVudCk7Cisg
ICAgICByZXMgPSBjb25mX2ZpbGVfc3VicGFyc2UgKGNmaWxlLCByb290X2dyb3VwLCBST09UX0dS
T1VQKTsKKyAgICAgIGlmIChyZXMgIT0gSVNDX1JfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAg
ICAgIGxvZ19lcnJvciAoIkxEQVA6IGNhbm5vdCBwYXJzZSBkaGNwU2VydmljZSBlbnRyeSAnJXMn
IiwgdGVtcGJ2W2NudF0tPmJ2X3ZhbCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgZW5kX3BhcnNlICgmY2ZpbGUpOworICBsZGFwX2Nsb3NlX2RlYnVnX2ZkKCk7CisK
KyAgbGRhcF9tZW1mcmVlIChob3N0ZG4pOworICBsZGFwX3ZhbHVlX2ZyZWVfbGVuICh0ZW1wYnYp
OworCisgIGlmIChyZXMgIT0gSVNDX1JfU1VDQ0VTUykKKyAgICB7CisgICAgICBzdHJ1Y3QgbGRh
cF9jb25maWdfc3RhY2sgKnRlbXBfc3RhY2s7CisKKyAgICAgIHdoaWxlICgoY3VyciA9IGxkYXBf
c2VydmljZV9kbl9oZWFkKSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgbGRhcF9zZXJ2
aWNlX2RuX2hlYWQgPSBjdXJyLT5uZXh0OworICAgICAgICAgIGRmcmVlIChjdXJyLT5kbiwgTURM
KTsKKyAgICAgICAgICBkZnJlZSAoY3VyciwgTURMKTsKKyAgICAgICAgfQorCisgICAgICBsZGFw
X3NlcnZpY2VfZG5fdGFpbCA9IE5VTEw7CisKKyAgICAgIHdoaWxlICgodGVtcF9zdGFjayA9IGxk
YXBfc3RhY2spICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICBsZGFwX3N0YWNrID0gdGVt
cF9zdGFjay0+bmV4dDsKKyAgICAgICAgICBmcmVlX3N0YWNrX2VudHJ5ICh0ZW1wX3N0YWNrKTsK
KyAgICAgICAgfQorCisgICAgICBsZGFwX3N0b3AoKTsKKyAgICB9CisKKyAgLyogVW5iaW5kIGZy
b20gbGRhcCBpbW1lZGlhdGVseSBhZnRlciByZWFkaW5nIGNvbmZpZyBpbiBzdGF0aWMgbW9kZS4g
Ki8KKyAgaWYgKGxkYXBfbWV0aG9kID09IExEQVBfTUVUSE9EX1NUQVRJQykKKyAgICBsZGFwX3N0
b3AoKTsKKworICByZXR1cm4gKHJlcyk7Cit9CisKKworLyogVGhpcyBmdW5jdGlvbiB3aWxsIHBh
cnNlIHRoZSBkaGNwT3B0aW9uIGFuZCBkaGNwU3RhdGVtZW50cyBmaWVsZCBpbiB0aGUgTERBUAor
ICAgZW50cnkgaWYgaXQgZXhpc3RzLiBSaWdodCBub3csIHR5cGUgd2lsbCBiZSBlaXRoZXIgSE9T
VF9ERUNMIG9yIENMQVNTX0RFQ0wuCisgICBJZiB3ZSBhcmUgcGFyc2luZyBhIEhPU1RfREVDTCwg
dGhpcyBhbHdheXMgcmV0dXJucyAwLiBJZiB3ZSBhcmUgcGFyc2luZyBhIAorICAgQ0xBU1NfREVD
TCwgdGhpcyB3aWxsIHJldHVybiB3aGF0IHRoZSBjdXJyZW50IGxlYXNlIGxpbWl0IGlzIGluIExE
QVAuIElmCisgICB0aGVyZSBpcyBubyBsZWFzZSBsaW1pdCBzcGVjaWZpZWQsIHdlIHJldHVybiAw
ICovCisKK3N0YXRpYyBpbnQKK2xkYXBfcGFyc2Vfb3B0aW9ucyAoTERBUE1lc3NhZ2UgKiBlbnQs
IHN0cnVjdCBncm91cCAqZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUs
IHN0cnVjdCBob3N0X2RlY2wgKmhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IGNsYXNzICoqY2xhc3MpCit7CisgIGludCBkZWNsYXJhdGlvbiwgbGVhc2VfbGltaXQ7CisgIGNo
YXIgb3B0aW9uX2J1ZmZlcls4MTkyXTsKKyAgZW51bSBkaGNwX3Rva2VuIHRva2VuOworICBzdHJ1
Y3QgcGFyc2UgKmNmaWxlOworICBpc2NfcmVzdWx0X3QgcmVzOworICBjb25zdCBjaGFyICp2YWw7
CisKKyAgbGVhc2VfbGltaXQgPSAwOworICAqb3B0aW9uX2J1ZmZlciA9ICdcMCc7CisgCisgLyog
VGhpcyBibG9jayBvZiBjb2RlIHdpbGwgdHJ5IHRvIGZpbmQgdGhlIHBhcmVudCBvZiB0aGUgaG9z
dCwgYW5kCisgICAgaWYgaXQgaXMgYSBncm91cCBvYmplY3QsIGZldGNoIHRoZSBvcHRpb25zIGFu
ZCBhcHBseSB0byB0aGUgaG9zdC4gKi8KKyAgaWYgKHR5cGUgPT0gSE9TVF9ERUNMKSAKKyAgICB7
CisgICAgICBjaGFyICpob3N0ZG4sICpiYXNlZG4sICp0ZW1wMSwgKnRlbXAyLCBmaWx0ZXJbMTAy
NF07CisgICAgICBMREFQTWVzc2FnZSAqZ3JvdXBkbiwgKmVudHJ5OworICAgICAgaW50IHJldDsK
KworICAgICAgaG9zdGRuID0gbGRhcF9nZXRfZG4gKGxkLCBlbnQpOworICAgICAgaWYoIGhvc3Rk
biAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgYmFzZWRuID0gTlVMTDsKKworICAgICAg
ICAgIHRlbXAxID0gc3RyY2hyIChob3N0ZG4sICc9Jyk7CisgICAgICAgICAgaWYgKHRlbXAxICE9
IE5VTEwpCisgICAgICAgICAgICB0ZW1wMSA9IHN0cmNociAoKyt0ZW1wMSwgJz0nKTsKKyAgICAg
ICAgICBpZiAodGVtcDEgIT0gTlVMTCkKKyAgICAgICAgICAgIHRlbXAyID0gc3RyY2hyICgrK3Rl
bXAxLCAnLCcpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRlbXAyID0gTlVMTDsKKwor
ICAgICAgICAgIGlmICh0ZW1wMiAhPSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBzbnByaW50ZiAoZmlsdGVyLCBzaXplb2YoZmlsdGVyKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICIoJihjbj0lLipzKShvYmplY3RDbGFzcz1kaGNwR3JvdXApKSIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAoaW50KSh0ZW1wMiAtIHRlbXAxKSwgdGVtcDEpOworCisgICAgICAgICAgICAg
IGJhc2VkbiA9IHN0cmNociAodGVtcDEsICcsJyk7CisgICAgICAgICAgICAgIGlmIChiYXNlZG4g
IT0gTlVMTCkKKyAgICAgICAgICAgICAgICArK2Jhc2VkbjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgIGlmIChiYXNlZG4gIT0gTlVMTCAmJiAqYmFzZWRuICE9ICdcMCcpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIHJldCA9IGxkYXBfc2VhcmNoX2V4dF9zIChsZCwgYmFzZWRuLCBM
REFQX1NDT1BFX1NVQlRSRUUsIGZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5VTEwsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIDAsICZncm91cGRuKTsKKyAgICAg
ICAgICAgICAgaWYgKHJldCA9PSBMREFQX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgaWYgKChlbnRyeSA9IGxkYXBfZmlyc3RfZW50cnkgKGxkLCBncm91cGRu
KSkgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
IHJlcyA9IGxkYXBfcGFyc2VfZW50cnlfb3B0aW9ucyAoZW50cnksIG9wdGlvbl9idWZmZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
b2Yob3B0aW9uX2J1ZmZlcikgLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJmxlYXNlX2xpbWl0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICBpZiAocmVzICE9IElTQ19SX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlc2V0IG9wdGlvbiBidWZmZXIgZGlzY2FyZGlu
ZyBhbnkgcmVzdWx0cyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAqb3B0aW9uX2J1ZmZl
ciA9ICdcMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYXNlX2xpbWl0ID0gMDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgbGRhcF9tc2dmcmVlKCBncm91cGRuKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgbGRhcF9tZW1mcmVlKCBob3N0ZG4pOworICAgICAgICB9Cisg
ICAgfQorCisgIHJlcyA9IGxkYXBfcGFyc2VfZW50cnlfb3B0aW9ucyAoZW50LCBvcHRpb25fYnVm
ZmVyLCBzaXplb2Yob3B0aW9uX2J1ZmZlcikgLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZsZWFzZV9saW1pdCk7CisgIGlmIChyZXMgIT0gSVNDX1JfU1VDQ0VTUykKKyAg
ICByZXR1cm4gKGxlYXNlX2xpbWl0KTsKKworICBvcHRpb25fYnVmZmVyW3NpemVvZihvcHRpb25f
YnVmZmVyKSAtIDFdID0gJ1wwJzsKKyAgaWYgKCpvcHRpb25fYnVmZmVyID09ICdcMCcpCisgICAg
cmV0dXJuIChsZWFzZV9saW1pdCk7CisKKyAgY2ZpbGUgPSAoc3RydWN0IHBhcnNlICopIE5VTEw7
CisgIHJlcyA9IG5ld19wYXJzZSAoJmNmaWxlLCAtMSwgb3B0aW9uX2J1ZmZlciwgc3RybGVuIChv
cHRpb25fYnVmZmVyKSwgCisgICAgICAgICAgICAgICAgICAgdHlwZSA9PSBIT1NUX0RFQ0wgPyAi
TERBUC1IT1NUIiA6ICJMREFQLVNVQkNMQVNTIiwgMCk7CisgIGlmIChyZXMgIT0gSVNDX1JfU1VD
Q0VTUykKKyAgICByZXR1cm4gKGxlYXNlX2xpbWl0KTsKKworI2lmIGRlZmluZWQgKERFQlVHX0xE
QVApCisgIGxvZ19pbmZvICgiU2VuZGluZyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6ICclcyciLCBv
cHRpb25fYnVmZmVyKTsKKyNlbmRpZgorCisgIGRlY2xhcmF0aW9uID0gMDsKKyAgZG8KKyAgICB7
CisgICAgICB0b2tlbiA9IHBlZWtfdG9rZW4gKCZ2YWwsIE5VTEwsIGNmaWxlKTsKKyAgICAgIGlm
ICh0b2tlbiA9PSBFTkRfT0ZfRklMRSkKKyAgICAgICAgYnJlYWs7CisgICAgICAgZGVjbGFyYXRp
b24gPSBwYXJzZV9zdGF0ZW1lbnQgKGNmaWxlLCBncm91cCwgdHlwZSwgaG9zdCwgZGVjbGFyYXRp
b24pOworICAgIH0gd2hpbGUgKDEpOworCisgIGVuZF9wYXJzZSAoJmNmaWxlKTsKKworICByZXR1
cm4gKGxlYXNlX2xpbWl0KTsKK30KKworCisKK2ludAorZmluZF9oYWRkcl9pbl9sZGFwIChzdHJ1
Y3QgaG9zdF9kZWNsICoqaHAsIGludCBodHlwZSwgdW5zaWduZWQgaGxlbiwKKyAgICAgICAgICAg
ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFkZHIsIGNvbnN0IGNoYXIgKmZpbGUsIGlu
dCBsaW5lKQoreworICBjaGFyIGJ1ZlsxMjhdLCAqdHlwZV9zdHI7CisgIExEQVBNZXNzYWdlICog
cmVzLCAqZW50OworICBzdHJ1Y3QgaG9zdF9kZWNsICogaG9zdDsKKyAgaXNjX3Jlc3VsdF90IHN0
YXR1czsKKyAgbGRhcF9kbl9ub2RlICpjdXJyOworICBpbnQgcmV0OworCisgIGlmIChsZGFwX21l
dGhvZCA9PSBMREFQX01FVEhPRF9TVEFUSUMpCisgICAgcmV0dXJuICgwKTsKKworICBpZiAobGQg
PT0gTlVMTCkKKyAgICBsZGFwX3N0YXJ0ICgpOworICBpZiAobGQgPT0gTlVMTCkKKyAgICByZXR1
cm4gKDApOworCisgIHN3aXRjaCAoaHR5cGUpCisgICAgeworICAgICAgY2FzZSBIVFlQRV9FVEhF
UjoKKyAgICAgICAgdHlwZV9zdHIgPSAiZXRoZXJuZXQiOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgSFRZUEVfSUVFRTgwMjoKKyAgICAgICAgdHlwZV9zdHIgPSAidG9rZW4tcmluZyI7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIVFlQRV9GRERJOgorICAgICAgICB0eXBlX3N0ciA9
ICJmZGRpIjsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBsb2dfaW5m
byAoIklnbm9yaW5nIHVua25vd24gdHlwZSAlZCIsIGh0eXBlKTsKKyAgICAgICAgcmV0dXJuICgw
KTsKKyAgICB9CisKKyAgLyoKKyAgKiogRklYTUU6IEl0IGlzIG5vdCBndWFyYW50ZWVkLCB0aGF0
IHRoZSBkaGNwSFdBZGRyZXNzIGF0dHJpYnV0ZQorICAqKiAgICAgICAgY29udGFpbnMgX2V4YWN0
bHlfICJ0eXBlIGFkZHIiIHdpdGggb25lIHNwYWNlIGJldHdlZW4hCisgICovCisgIHNucHJpbnRm
IChidWYsIHNpemVvZiAoYnVmKSwKKyAgICAgICAgICAgICIoJihvYmplY3RDbGFzcz1kaGNwSG9z
dCkoZGhjcEhXQWRkcmVzcz0lcyAlcykpIiwKKyAgICAgICAgICAgdHlwZV9zdHIsIHByaW50X2h3
X2FkZHIgKGh0eXBlLCBobGVuLCBoYWRkcikpOworCisgIHJlcyA9IGVudCA9IE5VTEw7CisgIGZv
ciAoY3VyciA9IGxkYXBfc2VydmljZV9kbl9oZWFkOworICAgICAgIGN1cnIgIT0gTlVMTCAmJiAq
Y3Vyci0+ZG4gIT0gJ1wwJzsKKyAgICAgICBjdXJyID0gY3Vyci0+bmV4dCkKKyAgICB7CisjaWYg
ZGVmaW5lZCAoREVCVUdfTERBUCkKKyAgICAgIGxvZ19pbmZvICgiU2VhcmNoaW5nIGZvciAlcyBp
biBMREFQIHRyZWUgJXMiLCBidWYsIGN1cnItPmRuKTsKKyNlbmRpZgorICAgICAgcmV0ID0gbGRh
cF9zZWFyY2hfZXh0X3MgKGxkLCBjdXJyLT5kbiwgTERBUF9TQ09QRV9TVUJUUkVFLCBidWYsIE5V
TEwsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwg
MCwgJnJlcyk7CisKKyAgICAgIGlmKHJldCA9PSBMREFQX1NFUlZFUl9ET1dOKQorICAgICAgICB7
CisgICAgICAgICAgbG9nX2luZm8gKCJMREFQIHNlcnZlciB3YXMgZG93biwgdHJ5aW5nIHRvIHJl
Y29ubmVjdC4uLiIpOworCisgICAgICAgICAgbGRhcF9zdG9wKCk7CisgICAgICAgICAgbGRhcF9z
dGFydCgpOworICAgICAgICAgIGlmKGxkID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgIGxvZ19pbmZvICgiTERBUCByZWNvbm5lY3QgZmFpbGVkIC0gdHJ5IGFnYWluIGxhdGVy
Li4uIik7CisgICAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICByZXQgPSBsZGFwX3NlYXJjaF9leHRfcyAobGQsIGN1cnItPmRuLCBMREFQX1NDT1BFX1NV
QlRSRUUsIGJ1ZiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwg
TlVMTCwgTlVMTCwgTlVMTCwgMCwgJnJlcyk7CisgICAgICAgIH0KKworICAgICAgaWYgKHJldCA9
PSBMREFQX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICBpZiggKGVudCA9IGxkYXBfZmly
c3RfZW50cnkgKGxkLCByZXMpKSAhPSBOVUxMKQorICAgICAgICAgICAgYnJlYWs7IC8qIHNlYXJj
aCBPSyBhbmQgaGF2ZSBlbnRyeSAqLworCisjaWYgZGVmaW5lZCAoREVCVUdfTERBUCkKKyAgICAg
ICAgICBsb2dfaW5mbyAoIk5vIGhvc3QgZW50cnkgZm9yICVzIGluIExEQVAgdHJlZSAlcyIsCisg
ICAgICAgICAgICAgICAgICAgIGJ1ZiwgY3Vyci0+ZG4pOworI2VuZGlmCisgICAgICAgICAgaWYo
cmVzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBsZGFwX21zZ2ZyZWUgKHJlcyk7Cisg
ICAgICAgICAgICAgIHJlcyA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGlmKHJlcykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgbGRhcF9tc2dmcmVlIChyZXMpOworICAgICAgICAgICAgICByZXMgPSBOVUxMOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKHJldCAhPSBMREFQX05PX1NVQ0hfT0JKRUNU
ICYmIHJldCAhPSBMREFQX1NVQ0NFU1MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGxv
Z19lcnJvciAoIkNhbm5vdCBzZWFyY2ggZm9yICVzIGluIExEQVAgdHJlZSAlczogJXMiLCBidWYs
IAorICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnItPmRuLCBsZGFwX2VycjJzdHJpbmcgKHJl
dCkpOworICAgICAgICAgICAgICBsZGFwX3N0b3AoKTsKKyAgICAgICAgICAgICAgcmV0dXJuICgw
KTsKKyAgICAgICAgICAgIH0KKyNpZiBkZWZpbmVkIChERUJVR19MREFQKQorICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbG9nX2luZm8gKCJsZGFwX3NlYXJjaF9l
eHRfcyByZXR1cm5lZCAlcyB3aGVuIHNlYXJjaGluZyBmb3IgJXMgaW4gJXMiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgbGRhcF9lcnIyc3RyaW5nIChyZXQpLCBidWYsIGN1cnItPmRuKTsKKyAg
ICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB9CisgICAgfQorCisgIGlmIChyZXMgJiYgZW50
KQorICAgIHsKKyNpZiBkZWZpbmVkIChERUJVR19MREFQKQorICAgICAgY2hhciAqZG4gPSBsZGFw
X2dldF9kbiAobGQsIGVudCk7CisgICAgICBpZiAoZG4gIT0gTlVMTCkKKyAgICAgICAgeworICAg
ICAgICAgIGxvZ19pbmZvICgiRm91bmQgZGhjcEhXQWRkcmVzcyBMREFQIGVudHJ5ICVzIiwgZG4p
OworICAgICAgICAgIGxkYXBfbWVtZnJlZShkbik7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAg
ICBob3N0ID0gKHN0cnVjdCBob3N0X2RlY2wgKikwOworICAgICAgc3RhdHVzID0gaG9zdF9hbGxv
Y2F0ZSAoJmhvc3QsIE1ETCk7CisgICAgICBpZiAoc3RhdHVzICE9IElTQ19SX1NVQ0NFU1MpCisg
ICAgICAgIHsKKyAgICAgICAgICBsb2dfZmF0YWwgKCJjYW4ndCBhbGxvY2F0ZSBob3N0IGRlY2wg
c3RydWN0OiAlcyIsIAorICAgICAgICAgICAgICAgICAgICAgaXNjX3Jlc3VsdF90b3RleHQgKHN0
YXR1cykpOyAKKyAgICAgICAgICBsZGFwX21zZ2ZyZWUgKHJlcyk7CisgICAgICAgICAgcmV0dXJu
ICgwKTsKKyAgICAgICAgfQorCisgICAgICBob3N0LT5uYW1lID0gbGRhcF9nZXRfaG9zdF9uYW1l
IChlbnQpOworICAgICAgaWYgKGhvc3QtPm5hbWUgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAg
ICAgIGhvc3RfZGVyZWZlcmVuY2UgKCZob3N0LCBNREwpOworICAgICAgICAgIGxkYXBfbXNnZnJl
ZSAocmVzKTsKKyAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICB9CisKKyAgICAgIGlmICgh
Y2xvbmVfZ3JvdXAgKCZob3N0LT5ncm91cCwgcm9vdF9ncm91cCwgTURMKSkKKyAgICAgICAgewor
ICAgICAgICAgIGxvZ19mYXRhbCAoImNhbid0IGNsb25lIGdyb3VwIGZvciBob3N0ICVzIiwgaG9z
dC0+bmFtZSk7CisgICAgICAgICAgaG9zdF9kZXJlZmVyZW5jZSAoJmhvc3QsIE1ETCk7CisgICAg
ICAgICAgbGRhcF9tc2dmcmVlIChyZXMpOworICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAg
IH0KKworICAgICAgbGRhcF9wYXJzZV9vcHRpb25zIChlbnQsIGhvc3QtPmdyb3VwLCBIT1NUX0RF
Q0wsIGhvc3QsIE5VTEwpOworCisgICAgICAqaHAgPSBob3N0OworICAgICAgbGRhcF9tc2dmcmVl
IChyZXMpOworICAgICAgcmV0dXJuICgxKTsKKyAgICB9CisKKworICBpZihyZXMpIGxkYXBfbXNn
ZnJlZSAocmVzKTsKKyAgcmV0dXJuICgwKTsKK30KKworCitpbnQKK2ZpbmRfc3ViY2xhc3NfaW5f
bGRhcCAoc3RydWN0IGNsYXNzICpjbGFzcywgc3RydWN0IGNsYXNzICoqbmV3Y2xhc3MsIAorICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGF0YV9zdHJpbmcgKmRhdGEpCit7CisgIExEQVBN
ZXNzYWdlICogcmVzLCAqIGVudDsKKyAgaW50IHJldCwgbGVhc2VfbGltaXQ7CisgIGlzY19yZXN1
bHRfdCBzdGF0dXM7CisgIGxkYXBfZG5fbm9kZSAqY3VycjsKKyAgY2hhciBidWZbMTAyNF07CisK
KyAgaWYgKGxkYXBfbWV0aG9kID09IExEQVBfTUVUSE9EX1NUQVRJQykKKyAgICByZXR1cm4gKDAp
OworCisgIGlmIChsZCA9PSBOVUxMKQorICAgIGxkYXBfc3RhcnQgKCk7CisgIGlmIChsZCA9PSBO
VUxMKQorICAgIHJldHVybiAoMCk7CisKKyAgc25wcmludGYgKGJ1Ziwgc2l6ZW9mIChidWYpLAor
ICAgICAgICAgICAgIigmKG9iamVjdENsYXNzPWRoY3BTdWJDbGFzcykoY249JXMpKGRoY3BDbGFz
c0RhdGE9JXMpKSIsCisgICAgICAgICAgICBwcmludF9oZXhfMSAoZGF0YS0+bGVuLCBkYXRhLT5k
YXRhLCA2MCksCisgICAgICAgICAgICBwcmludF9oZXhfMiAoc3RybGVuIChjbGFzcy0+bmFtZSks
ICh1X2ludDhfdCAqKSBjbGFzcy0+bmFtZSwgNjApKTsKKyNpZiBkZWZpbmVkIChERUJVR19MREFQ
KQorICBsb2dfaW5mbyAoIlNlYXJjaGluZyBMREFQIGZvciAlcyIsIGJ1Zik7CisjZW5kaWYKKwor
ICByZXMgPSBlbnQgPSBOVUxMOworICBmb3IgKGN1cnIgPSBsZGFwX3NlcnZpY2VfZG5faGVhZDsK
KyAgICAgICBjdXJyICE9IE5VTEwgJiYgKmN1cnItPmRuICE9ICdcMCc7CisgICAgICAgY3VyciA9
IGN1cnItPm5leHQpCisgICAgeworI2lmIGRlZmluZWQgKERFQlVHX0xEQVApCisgICAgICBsb2df
aW5mbyAoIlNlYXJjaGluZyBmb3IgJXMgaW4gTERBUCB0cmVlICVzIiwgYnVmLCBjdXJyLT5kbik7
CisjZW5kaWYKKyAgICAgIHJldCA9IGxkYXBfc2VhcmNoX2V4dF9zIChsZCwgY3Vyci0+ZG4sIExE
QVBfU0NPUEVfU1VCVFJFRSwgYnVmLCBOVUxMLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIDAsICZyZXMpOworCisgICAgICBpZihyZXQgPT0gTERB
UF9TRVJWRVJfRE9XTikKKyAgICAgICAgeworICAgICAgICAgIGxvZ19pbmZvICgiTERBUCBzZXJ2
ZXIgd2FzIGRvd24sIHRyeWluZyB0byByZWNvbm5lY3QuLi4iKTsKKworICAgICAgICAgIGxkYXBf
c3RvcCgpOworICAgICAgICAgIGxkYXBfc3RhcnQoKTsKKworICAgICAgICAgIGlmKGxkID09IE5V
TEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGxvZ19pbmZvICgiTERBUCByZWNvbm5l
Y3QgZmFpbGVkIC0gdHJ5IGFnYWluIGxhdGVyLi4uIik7CisgICAgICAgICAgICAgIHJldHVybiAo
MCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICByZXQgPSBsZGFwX3NlYXJjaF9leHRfcyAo
bGQsIGN1cnItPmRuLCBMREFQX1NDT1BFX1NVQlRSRUUsIGJ1ZiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgMCwgJnJlcyk7Cisg
ICAgICAgIH0KKworICAgICAgaWYgKHJldCA9PSBMREFQX1NVQ0NFU1MpCisgICAgICAgIHsKKyAg
ICAgICAgICBpZiggKGVudCA9IGxkYXBfZmlyc3RfZW50cnkgKGxkLCByZXMpKSAhPSBOVUxMKQor
ICAgICAgICAgICAgYnJlYWs7IC8qIHNlYXJjaCBPSyBhbmQgaGF2ZSBlbnRyeSAqLworCisjaWYg
ZGVmaW5lZCAoREVCVUdfTERBUCkKKyAgICAgICAgICBsb2dfaW5mbyAoIk5vIHN1YmNsYXNzIGVu
dHJ5IGZvciAlcyBpbiBMREFQIHRyZWUgJXMiLAorICAgICAgICAgICAgICAgICAgICBidWYsIGN1
cnItPmRuKTsKKyNlbmRpZgorICAgICAgICAgIGlmKHJlcykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgbGRhcF9tc2dmcmVlIChyZXMpOworICAgICAgICAgICAgICByZXMgPSBOVUxMOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICBpZihyZXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGxkYXBfbXNnZnJlZSAocmVz
KTsKKyAgICAgICAgICAgICAgcmVzID0gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
IGlmIChyZXQgIT0gTERBUF9OT19TVUNIX09CSkVDVCAmJiByZXQgIT0gTERBUF9TVUNDRVNTKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBsb2dfZXJyb3IgKCJDYW5ub3Qgc2VhcmNoIGZv
ciAlcyBpbiBMREFQIHRyZWUgJXM6ICVzIiwgYnVmLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJyLT5kbiwgbGRhcF9lcnIyc3RyaW5nIChyZXQpKTsKKyAgICAgICAgICAgICAgbGRhcF9z
dG9wKCk7CisgICAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgICAgICB9CisjaWYgZGVm
aW5lZCAoREVCVUdfTERBUCkKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgIGxvZ19pbmZvICgibGRhcF9zZWFyY2hfZXh0X3MgcmV0dXJuZWQgJXMgd2hlbiBzZWFy
Y2hpbmcgZm9yICVzIGluICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxkYXBfZXJyMnN0
cmluZyAocmV0KSwgYnVmLCBjdXJyLT5kbik7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAg
ICAgfQorICAgIH0KKworICBpZiAocmVzICYmIGVudCkKKyAgICB7CisjaWYgZGVmaW5lZCAoREVC
VUdfTERBUCkKKyAgICAgIGNoYXIgKmRuID0gbGRhcF9nZXRfZG4gKGxkLCBlbnQpOworICAgICAg
aWYgKGRuICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICBsb2dfaW5mbyAoIkZvdW5kIHN1
YmNsYXNzIExEQVAgZW50cnkgJXMiLCBkbik7CisgICAgICAgICAgbGRhcF9tZW1mcmVlKGRuKTsK
KyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgIHN0YXR1cyA9IGNsYXNzX2FsbG9jYXRlIChuZXdj
bGFzcywgTURMKTsKKyAgICAgIGlmIChzdGF0dXMgIT0gSVNDX1JfU1VDQ0VTUykKKyAgICAgICAg
eworICAgICAgICAgIGxvZ19lcnJvciAoIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGEgbmV3
IGNsYXNzIik7CisgICAgICAgICAgbGRhcF9tc2dmcmVlIChyZXMpOworICAgICAgICAgIHJldHVy
biAoMCk7CisgICAgICAgIH0KKworICAgICAgZ3JvdXBfcmVmZXJlbmNlICgmKCpuZXdjbGFzcykt
Pmdyb3VwLCBjbGFzcy0+Z3JvdXAsIE1ETCk7CisgICAgICBjbGFzc19yZWZlcmVuY2UgKCYoKm5l
d2NsYXNzKS0+c3VwZXJjbGFzcywgY2xhc3MsIE1ETCk7CisgICAgICBsZWFzZV9saW1pdCA9IGxk
YXBfcGFyc2Vfb3B0aW9ucyAoZW50LCAoKm5ld2NsYXNzKS0+Z3JvdXAsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMQVNTX0RFQ0wsIE5VTEwsIG5ld2NsYXNzKTsK
KyAgICAgIGlmIChsZWFzZV9saW1pdCA9PSAwKQorICAgICAgICAoKm5ld2NsYXNzKS0+bGVhc2Vf
bGltaXQgPSBjbGFzcy0+bGVhc2VfbGltaXQ7IAorICAgICAgZWxzZQorICAgICAgICBjbGFzcy0+
bGVhc2VfbGltaXQgPSBsZWFzZV9saW1pdDsKKworICAgICAgaWYgKCgqbmV3Y2xhc3MpLT5sZWFz
ZV9saW1pdCkgCisgICAgICAgIHsKKyAgICAgICAgICAoKm5ld2NsYXNzKS0+YmlsbGVkX2xlYXNl
cyA9IAorICAgICAgICAgICAgICBkbWFsbG9jICgoKm5ld2NsYXNzKS0+bGVhc2VfbGltaXQgKiBz
aXplb2YgKHN0cnVjdCBsZWFzZSAqKSwgTURMKTsKKyAgICAgICAgICBpZiAoISgqbmV3Y2xhc3Mp
LT5iaWxsZWRfbGVhc2VzKSAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbG9nX2Vycm9y
ICgibm8gbWVtb3J5IGZvciBiaWxsaW5nIik7CisgICAgICAgICAgICAgIGNsYXNzX2RlcmVmZXJl
bmNlIChuZXdjbGFzcywgTURMKTsKKyAgICAgICAgICAgICAgbGRhcF9tc2dmcmVlIChyZXMpOwor
ICAgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICAgICAgfQorICAgICAgICAgIG1lbXNl
dCAoKCpuZXdjbGFzcyktPmJpbGxlZF9sZWFzZXMsIDAsIAorICAgICAgICAgICAgICAgICgoKm5l
d2NsYXNzKS0+bGVhc2VfbGltaXQgKiBzaXplb2YgKCpuZXdjbGFzcyktPmJpbGxlZF9sZWFzZXMp
KTsKKyAgICAgICAgfQorCisgICAgICBkYXRhX3N0cmluZ19jb3B5ICgmKCpuZXdjbGFzcyktPmhh
c2hfc3RyaW5nLCBkYXRhLCBNREwpOworCisgICAgICBsZGFwX21zZ2ZyZWUgKHJlcyk7CisgICAg
ICByZXR1cm4gKDEpOworICAgIH0KKworICBpZihyZXMpIGxkYXBfbXNnZnJlZSAocmVzKTsKKyAg
cmV0dXJuICgwKTsKK30KKworI2VuZGlmCmRpZmYgLXVwIGRoY3AtMy4xLjMvc2VydmVyL2xkYXBf
Y2FzYS5jLmxkYXAgZGhjcC0zLjEuMy9zZXJ2ZXIvbGRhcF9jYXNhLmMKLS0tIGRoY3AtMy4xLjMv
c2VydmVyL2xkYXBfY2FzYS5jLmxkYXAJMjAxMC0wMi0xMyAxMjo1NToxMi4wMDAwMDAwMDAgLTEw
MDAKKysrIGRoY3AtMy4xLjMvc2VydmVyL2xkYXBfY2FzYS5jCTIwMTAtMDItMTMgMTI6NTU6MTIu
MDAwMDAwMDAwIC0xMDAwCkBAIC0wLDAgKzEsMTM4IEBACisvKiBsZGFwX2Nhc2EuYworICAgCisg
ICBDQVNBIHJvdXRpbmVzIGZvciBESENQRC4uLiAqLworCisvKiBDb3B5cmlnaHQgKGMpIDIwMDQg
SW50ZXJuZXQgU3lzdGVtcyBDb25zb3JpdW0sIEluYy4gKCJJU0MiKQorICogQ29weXJpZ2h0IChj
KSAxOTk1LTIwMDMgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqIENvcHlyaWdodCAo
YykgMjAwNiBOb3ZlbGwsIEluYy4KKworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dCAKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OiAKKyAqIDEuUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisg
KiAyLlJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMu
TmVpdGhlciB0aGUgbmFtZSBvZiBJU0MsIElTQyBESENQLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBj
b250cmlidXRvcnMgCisgKiAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSAKKyAqICAgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIElOVEVSTkVUIFNZU1RFTVMgQ09OU09SVElVTSBBTkQgQ09OVFJJQlVUT1JTIAorICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSAK
KyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgCisgKiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIAorICogQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIAorICog
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyAqIFRoaXMgZmlsZSB3YXMgd3JpdHRlbiBi
eSBTIEthbHlhbmFzdW5kYXJhbSA8c2thbHlhbmFzdW5kYXJhbUBub3ZlbGwuY29tPgorICovCisK
KyNpZiBkZWZpbmVkKExEQVBfQ0FTQV9BVVRIKQorI2luY2x1ZGUgImxkYXBfY2FzYS5oIgorI2lu
Y2x1ZGUgImRoY3BkLmgiCisKK2ludAorbG9hZF9jYXNhICh2b2lkKQoreworICAgICAgIGlmKCAh
KGNhc2FJREsgPSBkbG9wZW4oTUlDQVNBX0xJQixSVExEX0xBWlkpKSkKKyAgICAgICAJICByZXR1
cm4gMDsKKyAgICAgICBwX21pQ0FTQUdldENyZWRlbnRpYWwgPSAoQ0FTQV9HZXRDcmVkZW50aWFs
X1QpIGRsc3ltKGNhc2FJREssICJtaUNBU0FHZXRDcmVkZW50aWFsIik7CisgICAgICAgcF9taUNB
U0FTZXRDcmVkZW50aWFsID0gKENBU0FfU2V0Q3JlZGVudGlhbF9UKSBkbHN5bShjYXNhSURLLCAi
bWlDQVNBU2V0Q3JlZGVudGlhbCIpOworICAgICAgIHBfbWlDQVNBUmVtb3ZlQ3JlZGVudGlhbCA9
IChDQVNBX1JlbW92ZUNyZWRlbnRpYWxfVCkgZGxzeW0oY2FzYUlESywgIm1pQ0FTQVJlbW92ZUNy
ZWRlbnRpYWwiKTsKKworICAgICAgIGlmKChwX21pQ0FTQUdldENyZWRlbnRpYWwgPT0gTlVMTCkg
fHwKKyAgICAgICAgIChwX21pQ0FTQVNldENyZWRlbnRpYWwgPT0gTlVMTCkgfHwKKyAgICAgICAg
IChwX21pQ0FTQVJlbW92ZUNyZWRlbnRpYWwgPT0gTlVMTCkpCisgICAgICAgeworICAgICAgICAg
IGlmKGNhc2FJREspCisgICAgICAgICAgICBkbGNsb3NlKGNhc2FJREspOworICAgICAgICAgIGNh
c2FJREsgPSBOVUxMOworICAgICAgICAgIHBfbWlDQVNBR2V0Q3JlZGVudGlhbCA9IE5VTEw7Cisg
ICAgICAgICAgcF9taUNBU0FTZXRDcmVkZW50aWFsID0gTlVMTDsKKyAgICAgICAgICBwX21pQ0FT
QVJlbW92ZUNyZWRlbnRpYWwgPSBOVUxMOworICAgICAgICAgIHJldHVybiAwOworICAgICAgIH0K
KyAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCityZWxl
YXNlX2Nhc2Eodm9pZCkKK3sKKyAgIGlmKGNhc2FJREspCisgICB7CisgICAgICBkbGNsb3NlKGNh
c2FJREspOworICAgICAgY2FzYUlESyA9IE5VTEw7CisgICB9CisKKyAgIHBfbWlDQVNBR2V0Q3Jl
ZGVudGlhbCA9IE5VTEw7CisgICBwX21pQ0FTQVNldENyZWRlbnRpYWwgPSBOVUxMOworICAgcF9t
aUNBU0FSZW1vdmVDcmVkZW50aWFsID0gTlVMTDsKKworfQorCitpbnQKK2xvYWRfdW5hbWVfcHdk
X2Zyb21fbWlDQVNBIChjaGFyICoqbGRhcF91c2VybmFtZSwgY2hhciAqKmxkYXBfcGFzc3dvcmQp
CisgeworICAgaW50ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gMDsKKyAgIHVpbnQzMl90
ICAgICAgICAgICAgICAgIGNyZWRlbnRpYWx0eXBlID0gU1NDU19DUkVEX1RZUEVfU0VSVkVSX0Y7
CisgICBTU0NTX0JBU0lDX0NSRURFTlRJQUwgICBjcmVkZW50aWFsOworICAgU1NDU19TRUNSRVRf
SURfVCAgICAgICAgYXBwbGljYXRpb25TZWNyZXRJZDsKKyAgIGNoYXIgICAgICAgICAgICAgICAg
ICAgICp0ZW1wVmFyID0gTlVMTDsKKworICAgY29uc3QgY2hhciBhcHBsaWNhdGlvbk5hbWVbMTBd
ID0gImRoY3AtbGRhcCI7CisKKyAgIGlmICggbG9hZF9jYXNhKCkgKQorICAgeworICAgICAgbWVt
c2V0KCZjcmVkZW50aWFsLCAwLCBzaXplb2YoU1NDU19CQVNJQ19DUkVERU5USUFMKSk7CisgICAg
ICBtZW1zZXQoJmFwcGxpY2F0aW9uU2VjcmV0SWQsIDAsIHNpemVvZihTU0NTX1NFQ1JFVF9JRF9U
KSk7CisKKyAgICAgIGFwcGxpY2F0aW9uU2VjcmV0SWQubGVuID0gc3RybGVuKGFwcGxpY2F0aW9u
TmFtZSkgKyAxOworICAgICAgbWVtY3B5IChhcHBsaWNhdGlvblNlY3JldElkLmlkLCBhcHBsaWNh
dGlvbk5hbWUsIGFwcGxpY2F0aW9uU2VjcmV0SWQubGVuKTsKKworICAgICAgY3JlZGVudGlhbC51
bkZsYWdzID0gVVNFUk5BTUVfVFlQRV9DTl9GOworCisgICAgICByZXN1bHQgPSBwX21pQ0FTQUdl
dENyZWRlbnRpYWwgKDAsCisgICAgICAgICAgICAgICAgICZhcHBsaWNhdGlvblNlY3JldElkLE5V
TEwsJmNyZWRlbnRpYWx0eXBlLAorICAgICAgICAgICAgICAgICAmY3JlZGVudGlhbCxOVUxMKTsK
KworICAgICAgaWYoY3JlZGVudGlhbC51bkxlbikKKyAgICAgIHsKKyAgICAgICAgIHRlbXBWYXIg
PSBkbWFsbG9jIChjcmVkZW50aWFsLnVuTGVuICsgMSwgTURMKTsKKyAgICAgICAgIGlmICghdGVt
cFZhcikKKyAgICAgICAgICAgICBsb2dfZmF0YWwgKCJubyBtZW1vcnkgZm9yIGxkYXBfdXNlcm5h
bWUiKTsKKyAgICAgICAgIG1lbWNweSh0ZW1wVmFyICwgY3JlZGVudGlhbC51c2VybmFtZSwgY3Jl
ZGVudGlhbC51bkxlbik7CisgICAgICAgICAqbGRhcF91c2VybmFtZSA9IHRlbXBWYXI7CisKKyAg
ICAgICAgIHRlbXBWYXIgPSBkbWFsbG9jIChjcmVkZW50aWFsLnB3b3JkTGVuICsgMSwgTURMKTsK
KyAgICAgICAgIGlmICghdGVtcFZhcikKKyAgICAgICAgICAgICBsb2dfZmF0YWwgKCJubyBtZW1v
cnkgZm9yIGxkYXBfcGFzc3dvcmQiKTsKKyAgICAgICAgIG1lbWNweSh0ZW1wVmFyLCBjcmVkZW50
aWFsLnBhc3N3b3JkLCBjcmVkZW50aWFsLnB3b3JkTGVuKTsKKyAgICAgICAgICpsZGFwX3Bhc3N3
b3JkID0gdGVtcFZhcjsKKworI2lmIGRlZmluZWQgKERFQlVHX0xEQVApCisgICAgICAgICBsb2df
aW5mbyAoIkF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWwgdGFrZW4gZnJvbSBDQVNBIik7CisjZW5k
aWYKKworICAgICAgICAgcmVsZWFzZV9jYXNhKCk7CisgICAgICAgICByZXR1cm4gMTsKKworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmVsZWFzZV9jYXNh
KCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxz
ZQorICAgICAgICAgIHJldHVybiAwOyAvL2Nhc2EgbGlicmFyaWVzIG5vdCBsb2FkZWQKKyB9CisK
KyNlbmRpZiAvKiBMREFQX0NBU0FfQVVUSCAqLworCmRpZmYgLXVwIGRoY3AtMy4xLjMvc2VydmVy
L21kYi5jLmxkYXAgZGhjcC0zLjEuMy9zZXJ2ZXIvbWRiLmMKLS0tIGRoY3AtMy4xLjMvc2VydmVy
L21kYi5jLmxkYXAJMjAwOS0wOS0wMSAxMDozMjoyOC4wMDAwMDAwMDAgLTEwMDAKKysrIGRoY3At
My4xLjMvc2VydmVyL21kYi5jCTIwMTAtMDItMTMgMTI6NTU6MTIuMDAwMDAwMDAwIC0xMDAwCkBA
IC00NTQsNiArNDU0LDEyIEBAIGludCBmaW5kX2hvc3RzX2J5X2hhZGRyIChzdHJ1Y3QgaG9zdF9k
ZWMKIHsKIAlzdHJ1Y3QgaG9zdF9kZWNsICpmb287CiAJc3RydWN0IGhhcmR3YXJlIGg7CisJaW50
IHJldDsKKworI2lmIGRlZmluZWQoTERBUF9DT05GSUdVUkFUSU9OKQorCWlmICgocmV0ID0gZmlu
ZF9oYWRkcl9pbl9sZGFwIChocCwgaHR5cGUsIGhsZW4sIGhhZGRyLCBmaWxlLCBsaW5lKSkpCisJ
CXJldHVybiByZXQ7CisjZW5kaWYKIAogCWguaGxlbiA9IGhsZW4gKyAxOwogCWguaGJ1ZiBbMF0g
PSBodHlwZTsKZGlmZiAtdXAgZGhjcC0zLjEuMy9zZXJ2ZXIvc3RhYmxlcy5jLmxkYXAgZGhjcC0z
LjEuMy9zZXJ2ZXIvc3RhYmxlcy5jCi0tLSBkaGNwLTMuMS4zL3NlcnZlci9zdGFibGVzLmMubGRh
cAkyMDA5LTA3LTIzIDExOjQzOjM1LjAwMDAwMDAwMCAtMTAwMAorKysgZGhjcC0zLjEuMy9zZXJ2
ZXIvc3RhYmxlcy5jCTIwMTAtMDItMTMgMTI6NTU6MTIuMDAwMDAwMDAwIC0xMDAwCkBAIC0yMzgs
OSArMjM4LDEwNyBAQCBzdGF0aWMgc3RydWN0IG9wdGlvbiBzZXJ2ZXJfb3B0aW9uc1tdID0gCiAJ
eyAiYWRhcHRpdmUtbGVhc2UtdGltZS10aHJlc2hvbGQiLCAiQiIsCSZzZXJ2ZXJfdW5pdmVyc2Us
ICA1MCwgMSB9LAogCXsgImRvLXJldmVyc2UtdXBkYXRlcyIsICJmIiwJCSZzZXJ2ZXJfdW5pdmVy
c2UsICA1MSwgMSB9LAogCXsgImZxZG4tcmVwbHkiLCAiZiIsCQkJJnNlcnZlcl91bml2ZXJzZSwg
IDUyLCAxIH0sCisjaWYgZGVmaW5lZChMREFQX0NPTkZJR1VSQVRJT04pCisJeyAibGRhcC1zZXJ2
ZXIiLCAidCIsCQkJCSZzZXJ2ZXJfdW5pdmVyc2UsIDUzIH0sCisJeyAibGRhcC1wb3J0IiwgImQi
LAkJCQkJJnNlcnZlcl91bml2ZXJzZSwgNTQgfSwKKwl7ICJsZGFwLXVzZXJuYW1lIiwgInQiLAkJ
CQkmc2VydmVyX3VuaXZlcnNlLCA1NSB9LAorCXsgImxkYXAtcGFzc3dvcmQiLCAidCIsCQkJCSZz
ZXJ2ZXJfdW5pdmVyc2UsIDU2IH0sCisJeyAibGRhcC1iYXNlLWRuIiwgInQiLAkJCQkmc2VydmVy
X3VuaXZlcnNlLCA1NyB9LAorCXsgImxkYXAtbWV0aG9kIiwgIk5sZGFwLW1ldGhvZHMuIiwJJnNl
cnZlcl91bml2ZXJzZSwgNTggfSwKKwl7ICJsZGFwLWRlYnVnLWZpbGUiLCAidCIsCQkJJnNlcnZl
cl91bml2ZXJzZSwgNTkgfSwKKwl7ICJsZGFwLWRoY3Atc2VydmVyLWNuIiwgInQiLAkJJnNlcnZl
cl91bml2ZXJzZSwgNjAgfSwKKwl7ICJsZGFwLXJlZmVycmFscyIsICJmIiwJCQkmc2VydmVyX3Vu
aXZlcnNlLCA2MSB9LAorI2lmIGRlZmluZWQoVVNFX1NTTCkKKwl7ICJsZGFwLXNzbCIsICJObGRh
cC1zc2wtdXNhZ2UuIiwJJnNlcnZlcl91bml2ZXJzZSwgNjIgfSwKKwl7ICJsZGFwLXRscy1yZXFj
ZXJ0IiwgIk5sZGFwLXRscy1yZXFjZXJ0LiIsCSZzZXJ2ZXJfdW5pdmVyc2UsIDYzIH0sCisJeyAi
bGRhcC10bHMtY2EtZmlsZSIsICJ0IiwJCQkmc2VydmVyX3VuaXZlcnNlLCA2NCB9LAorCXsgImxk
YXAtdGxzLWNhLWRpciIsICJ0IiwJCQkmc2VydmVyX3VuaXZlcnNlLCA2NSB9LAorCXsgImxkYXAt
dGxzLWNlcnQiLCAidCIsCQkJCSZzZXJ2ZXJfdW5pdmVyc2UsIDY2IH0sCisJeyAibGRhcC10bHMt
a2V5IiwgInQiLAkJCQkmc2VydmVyX3VuaXZlcnNlLCA2NyB9LAorCXsgImxkYXAtdGxzLWNybGNo
ZWNrIiwgIk5sZGFwLXRscy1jcmxjaGVjay4iLAkmc2VydmVyX3VuaXZlcnNlLCA2OCB9LAorCXsg
ImxkYXAtdGxzLWNpcGhlcnMiLCAidCIsCQkJJnNlcnZlcl91bml2ZXJzZSwgNjkgfSwKKwl7ICJs
ZGFwLXRscy1yYW5kZmlsZSIsICJ0IiwJCQkmc2VydmVyX3VuaXZlcnNlLCA3MCB9LAorI2Vsc2UK
Kwl7ICJ1bmtub3duLTYyIiwgIlgiLAkJCSZzZXJ2ZXJfdW5pdmVyc2UsIDYyIH0sCisJeyAidW5r
bm93bi02MyIsICJYIiwJCQkmc2VydmVyX3VuaXZlcnNlLCA2MyB9LAorCXsgInVua25vd24tNjQi
LCAiWCIsCQkJJnNlcnZlcl91bml2ZXJzZSwgNjQgfSwKKwl7ICJ1bmtub3duLTY1IiwgIlgiLAkJ
CSZzZXJ2ZXJfdW5pdmVyc2UsIDY1IH0sCisJeyAidW5rbm93bi02NiIsICJYIiwJCQkmc2VydmVy
X3VuaXZlcnNlLCA2NiB9LAorCXsgInVua25vd24tNjciLCAiWCIsCQkJJnNlcnZlcl91bml2ZXJz
ZSwgNjcgfSwKKwl7ICJ1bmtub3duLTY4IiwgIlgiLAkJCSZzZXJ2ZXJfdW5pdmVyc2UsIDY4IH0s
CisJeyAidW5rbm93bi02OSIsICJYIiwJCQkmc2VydmVyX3VuaXZlcnNlLCA2OSB9LAorCXsgInVu
a25vd24tNzAiLCAiWCIsCQkJJnNlcnZlcl91bml2ZXJzZSwgNzAgfSwKKyNlbmRpZgorI2Vsc2UK
Kwl7ICJ1bmtub3duLTUzIiwgIlgiLAkJCSZzZXJ2ZXJfdW5pdmVyc2UsIDUzIH0sCisJeyAidW5r
bm93bi01NCIsICJYIiwJCQkmc2VydmVyX3VuaXZlcnNlLCA1NCB9LAorCXsgInVua25vd24tNTUi
LCAiWCIsCQkJJnNlcnZlcl91bml2ZXJzZSwgNTUgfSwKKwl7ICJ1bmtub3duLTU2IiwgIlgiLAkJ
CSZzZXJ2ZXJfdW5pdmVyc2UsIDU2IH0sCisJeyAidW5rbm93bi01NyIsICJYIiwJCQkmc2VydmVy
X3VuaXZlcnNlLCA1NyB9LAorCXsgInVua25vd24tNTgiLCAiWCIsCQkJJnNlcnZlcl91bml2ZXJz
ZSwgNTggfSwKKwl7ICJ1bmtub3duLTU5IiwgIlgiLAkJCSZzZXJ2ZXJfdW5pdmVyc2UsIDU5IH0s
CisJeyAidW5rbm93bi02MCIsICJYIiwJCQkmc2VydmVyX3VuaXZlcnNlLCA2MCB9LAorCXsgInVu
a25vd24tNjEiLCAiWCIsCQkJJnNlcnZlcl91bml2ZXJzZSwgNjEgfSwKKyNlbmRpZgogCXsgTlVM
TCwgTlVMTCwgTlVMTCwgMCwgMCB9CiB9OwogCisjaWYgZGVmaW5lZChMREFQX0NPTkZJR1VSQVRJ
T04pCitzdHJ1Y3QgZW51bWVyYXRpb25fdmFsdWUgbGRhcF92YWx1ZXMgW10gPSB7CisJeyAic3Rh
dGljIiwgTERBUF9NRVRIT0RfU1RBVElDIH0sCisJeyAiZHluYW1pYyIsIExEQVBfTUVUSE9EX0RZ
TkFNSUMgfSwKKwl7IChjaGFyICopIDAsIDAgfQorfTsKKworc3RydWN0IGVudW1lcmF0aW9uIGxk
YXBfbWV0aG9kcyA9IHsKKwkoc3RydWN0IGVudW1lcmF0aW9uICopMCwKKwkibGRhcC1tZXRob2Rz
IiwKKwlsZGFwX3ZhbHVlcworfTsKKworI2lmIGRlZmluZWQoVVNFX1NTTCkKK3N0cnVjdCBlbnVt
ZXJhdGlvbl92YWx1ZSBsZGFwX3NzbF91c2FnZV92YWx1ZXMgW10gPSB7CisJeyAib2ZmIiwgTERB
UF9TU0xfT0ZGIH0sCisJeyAib24iLExEQVBfU1NMX09OIH0sCisJeyAibGRhcHMiLCBMREFQX1NT
TF9MREFQUyB9LAorCXsgInN0YXJ0X3RscyIsIExEQVBfU1NMX1RMUyB9LAorCXsgKGNoYXIgKikg
MCwgMCB9Cit9OworCitzdHJ1Y3QgZW51bWVyYXRpb24gbGRhcF9zc2xfdXNhZ2VfZW51bSA9IHsK
Kwkoc3RydWN0IGVudW1lcmF0aW9uICopMCwKKwkibGRhcC1zc2wtdXNhZ2UiLAorCWxkYXBfc3Ns
X3VzYWdlX3ZhbHVlcworfTsKKworc3RydWN0IGVudW1lcmF0aW9uX3ZhbHVlIGxkYXBfdGxzX3Jl
cWNlcnRfdmFsdWVzIFtdID0geworCXsgIm5ldmVyIiwgTERBUF9PUFRfWF9UTFNfTkVWRVIgfSwK
Kwl7ICJoYXJkIiwgTERBUF9PUFRfWF9UTFNfSEFSRCAgfSwKKwl7ICJkZW1hbmQiLCBMREFQX09Q
VF9YX1RMU19ERU1BTkR9LAorCXsgImFsbG93IiwgTERBUF9PUFRfWF9UTFNfQUxMT1cgfSwKKwl7
ICJ0cnkiLCBMREFQX09QVF9YX1RMU19UUlkgICB9LAorCXsgKGNoYXIgKikgMCwgMCB9Cit9Owor
c3RydWN0IGVudW1lcmF0aW9uIGxkYXBfdGxzX3JlcWNlcnRfZW51bSA9IHsKKwkoc3RydWN0IGVu
dW1lcmF0aW9uICopMCwKKwkibGRhcC10bHMtcmVxY2VydCIsCisJbGRhcF90bHNfcmVxY2VydF92
YWx1ZXMKK307CisKK3N0cnVjdCBlbnVtZXJhdGlvbl92YWx1ZSBsZGFwX3Rsc19jcmxjaGVja192
YWx1ZXMgW10gPSB7CisJeyAibm9uZSIsIExEQVBfT1BUX1hfVExTX0NSTF9OT05FfSwKKwl7ICJw
ZWVyIiwgTERBUF9PUFRfWF9UTFNfQ1JMX1BFRVJ9LAorCXsgImFsbCIsICBMREFQX09QVF9YX1RM
U19DUkxfQUxMIH0sCisJeyAoY2hhciAqKSAwLCAwIH0KK307CitzdHJ1Y3QgZW51bWVyYXRpb24g
bGRhcF90bHNfY3JsY2hlY2tfZW51bSA9IHsKKwkoc3RydWN0IGVudW1lcmF0aW9uICopMCwKKwki
bGRhcC10bHMtY3JsY2hlY2siLAorCWxkYXBfdGxzX2NybGNoZWNrX3ZhbHVlcworfTsKKyNlbmRp
ZgorI2VuZGlmCisKIHN0cnVjdCBlbnVtZXJhdGlvbl92YWx1ZSBkZG5zX3N0eWxlc192YWx1ZXMg
W10gPSB7CiAJeyAibm9uZSIsIDAgfSwKIAl7ICJhZC1ob2MiLCAxIH0sCmRpZmYgLXVwIGRoY3At
My4xL3NpdGUuY29uZiBkaGNwLTMuMS9zaXRlLmNvbmYubmV3IAotLS0gb2xkL3NpdGUuY29uZgkx
OTk5LTA3LTA3IDE5OjIwOjEwLjAwMDAwMDAwMCArMDQwMAorKysgbmV3L3NpdGUuY29uZgkyMDEx
LTA5LTE0IDE1OjM3OjEzLjAwMDAwMDAwMCArMDQwMApAQCAtMSwyICsxLDYgQEAKICMgUHV0IGxv
Y2FsIHNpdGUgY29uZmlndXJhdGlvbiBzdHVmZiBoZXJlIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0
CiAjIHNldHRpbmdzIGluIE1ha2VmaWxlLmNvbmYKKworTERBUExJQiA9IC1sbGRhcAorCitTU0xM
SUIgPSAtbGNyeXB0byAtbHNzbAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>