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

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

    <bug>
          <bug_id>13916</bug_id>
          
          <creation_ts>2008-01-07 13:21:08 +0300</creation_ts>
          <short_desc>ping6 &amp; tracepath6 не работают даже от root</short_desc>
          <delta_ts>2008-09-15 17:57:15 +0400</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>iputils</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>14167</blocked>
    
    <blocked>17072</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Denis Ovsienko">pilot</reporter>
          <assigned_to name="Dmitry V. Levin">ldv</assigned_to>
          <cc>ender</cc>
    
    <cc>evg</cc>
    
    <cc>php-coder</cc>
    
    <cc>sem</cc>
    
    <cc>thresh</cc>
    
    <cc>vvk</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>60508</commentid>
    <comment_count>0</comment_count>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2008-01-07 13:21:08 +0300</bug_when>
    <thetext>Исходная ситуация: при загрузке конечного хоста в Fedora 8 ping6 на нём
работает; на маршрутизирующем хосте с Desktop 4.0.2 ping6 не работает.

Загружаем конечный хост в Sisyphus, на нём также перестаёт работать ping6:
# ping6 6bone.net
can&apos;t receive hop limit: Protocol not available

При этом в обоих случаях снаружи через looking-glass конечный хост по IPv6
пингуется. Также, порывшись в архивах, обнаружил, что tracepath6 также должна
была сломаться, и это оказалось правдой. Для версии iputils-20020927 эти
регрессии чинились в Debian:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=397935
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=402121

В то же время, например, доступна версия
http://www.skbuff.net/iputils/iputils-s20071127.tar.bz2 (я её не проверял).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60513</commentid>
    <comment_count>1</comment_count>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2008-01-07 13:42:59 +0300</bug_when>
    <thetext>Взяв патч из Debian #397935 и немного его переделав (иначе он не прикладывался),
я получил рабочие ping6 и tracepath6.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60514</commentid>
    <comment_count>2</comment_count>
      <attachid>2358</attachid>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2008-01-07 13:51:01 +0300</bug_when>
    <thetext>Created attachment 2358
fixing patch

Патч соответственно прикладываю. На ядрах из недавнего Sisyphus
(2.6.18-std-smp-alt8 и 2.6.18-std-smp-alt10) работает.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60515</commentid>
    <comment_count>3</comment_count>
      <attachid>2359</attachid>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2008-01-07 13:54:49 +0300</bug_when>
    <thetext>Created attachment 2359
fixing patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77366</commentid>
    <comment_count>4</comment_count>
    <who name="Slava Semushin">php-coder</who>
    <bug_when>2008-09-09 15:12:37 +0400</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created an attachment (id=2359) [details]
&gt; fixing patch

-	if (setsockopt(fd, SOL_IPV6, IPV6_HOPLIMIT, &amp;on, sizeof(on))) {
+	if (setsockopt(fd, SOL_IPV6, IPV6_2292HOPLIMIT, &amp;on, sizeof(on))) {
 		perror(&quot;IPV6_HOPLIMIT&quot;);
 		exit(1);

Я думаю, что сообщение об ошибке, тоже нужно поправить (s/IPV6_HOPLIMIT/IPV6_2292HOPLIMIT/).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77368</commentid>
    <comment_count>5</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2008-09-09 15:18:12 +0400</bug_when>
    <thetext>Слишком старая версия iputils, не интересно фиксить. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77373</commentid>
    <comment_count>6</comment_count>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2008-09-09 16:04:56 +0400</bug_when>
    <thetext>Слава, можно править, а можно и оставить.
Дима, тут вопрос не об интересе, а о функционале, сломанном в коробочном продукте.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77374</commentid>
    <comment_count>7</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2008-09-09 16:07:39 +0400</bug_when>
    <thetext>(In reply to comment #6)
&gt; Дима, тут вопрос не об интересе, а о функционале, сломанном в коробочном
&gt; продукте.

Баг висит на Сизифе, а не на коробочном продукте.  Наверное, надо его клонировать.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77381</commentid>
    <comment_count>8</comment_count>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2008-09-09 17:36:36 +0400</bug_when>
    <thetext>Я перевесил на Desktop, но в нём нет пакетов (то есть iputils тоже нет). Ничего лучше я сейчас изобретать не буду, нужно заниматься делами.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77802</commentid>
    <comment_count>9</comment_count>
    <who name="Afanasov Dmitry">ender</who>
    <bug_when>2008-09-15 17:57:14 +0400</bug_when>
    <thetext>в сизиф ушел iputils-20071127-alt1

по ошибке в ping6.c наличествует:
#ifdef IPV6_RECVHOPLIMIT
            setsockopt(icmp_sock, IPPROTO_IPV6, IPV6_RECVHOPLIMIT,
                   &amp;on, sizeof(on)) == -1 &amp;&amp;
            setsockopt(icmp_sock, IPPROTO_IPV6, IPV6_2292HOPLIMIT,
                   &amp;on, sizeof(on)) == -1
#else
            setsockopt(icmp_sock, IPPROTO_IPV6, IPV6_HOPLIMIT,
                   &amp;on, sizeof(on)) == -1
#endif

bug закрываю.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2358</attachid>
            <date>2008-01-07 13:51:01 +0300</date>
            <delta_ts>2008-01-07 13:54:49 +0300</delta_ts>
            <desc>fixing patch</desc>
            <filename>iputils-20020927-alt-hoplimit.patch</filename>
            <type>text/plain</type>
            <size>35187</size>
            <attacher name="Denis Ovsienko">pilot</attacher>
            
              <data encoding="base64">ZGlmZiAtTnVyIGlwdXRpbHMucDgvcGluZzYuYyBpcHV0aWxzL3Bpbmc2LmMKLS0tIGlwdXRpbHMu
cDgvcGluZzYuYwkyMDA4LTAxLTA3IDEzOjI0OjI1ICswMzAwCisrKyBpcHV0aWxzL3Bpbmc2LmMJ
MjAwOC0wMS0wNyAxMzoyODo0NyArMDMwMApAQCAtNDg2LDcgKzQ4Niw3IEBACiAKIAlpZiAoMSkg
ewogCQlpbnQgb24gPSAxOwotCQlpZiAoc2V0c29ja29wdChpY21wX3NvY2ssIElQUFJPVE9fSVBW
NiwgSVBWNl9IT1BMSU1JVCwKKwkJaWYgKHNldHNvY2tvcHQoaWNtcF9zb2NrLCBJUFBST1RPX0lQ
VjYsIElQVjZfMjI5MkhPUExJTUlULAogCQkJICAgICAgICZvbiwgc2l6ZW9mKG9uKSkgPT0gLTEp
IHsKIAkJCXBlcnJvciAoImNhbid0IHJlY2VpdmUgaG9wIGxpbWl0Iik7CiAJCQlleGl0KDIpOwpA
QCAtNzA0LDcgKzcwNCw3IEBACiAKIAlmb3IgKGMgPSBDTVNHX0ZJUlNUSERSKG1zZyk7IGM7IGMg
PSBDTVNHX05YVEhEUihtc2csIGMpKSB7CiAJCWlmIChjLT5jbXNnX2xldmVsICE9IFNPTF9JUFY2
IHx8Ci0JCSAgICBjLT5jbXNnX3R5cGUgIT0gSVBWNl9IT1BMSU1JVCkKKwkJICAgIGMtPmNtc2df
dHlwZSAhPSBJUFY2XzIyOTJIT1BMSU1JVCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoYy0+Y21zZ19s
ZW4gPCBDTVNHX0xFTihzaXplb2YoaW50KSkpCiAJCQljb250aW51ZTsKZGlmZiAtTnVyIGlwdXRp
bHMucDgvcGluZzYuY34gaXB1dGlscy9waW5nNi5jfgotLS0gaXB1dGlscy5wOC9waW5nNi5jfgkx
OTcwLTAxLTAxIDAzOjAwOjAwICswMzAwCisrKyBpcHV0aWxzL3Bpbmc2LmN+CTIwMDgtMDEtMDcg
MTM6MjQ6MjUgKzAzMDAKQEAgLTAsMCArMSw5MjIgQEAKKy8qCisgKgorICoJTW9kaWZpZWQgZm9y
IEFGX0lORVQ2IGJ5IFBlZHJvIFJvcXVlCisgKgorICoJPHJvcXVlQGRpLmZjLnVsLnB0PgorICoK
KyAqCU9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgaW5jbHVkZWQgYmVsbG93CisgKi8KKworLyoK
KyAqIENvcHlyaWdodCAoYykgMTk4OSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBD
YWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMg
ZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBNaWtl
IE11dXNzLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u
aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkg
dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMg
c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKglDYWxpZm9ybmlhLCBC
ZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
dGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
aXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5E
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdF
TlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICog
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBsaW50CitjaGFyIGNvcHlyaWdodFtdID0KKyJAKCMpIENvcHlyaWdodCAoYykg
MTk4OSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLlxuXAorIEFs
bCByaWdodHMgcmVzZXJ2ZWQuXG4iOworI2VuZGlmIC8qIG5vdCBsaW50ICovCisKKy8qCisgKgkJ
CVAgSSBOIEcgLiBDCisgKgorICogVXNpbmcgdGhlIEludGVyTmV0IENvbnRyb2wgTWVzc2FnZSBQ
cm90b2NvbCAoSUNNUCkgIkVDSE8iIGZhY2lsaXR5LAorICogbWVhc3VyZSByb3VuZC10cmlwLWRl
bGF5cyBhbmQgcGFja2V0IGxvc3MgYWNyb3NzIG5ldHdvcmsgcGF0aHMuCisgKgorICogQXV0aG9y
IC0KKyAqCU1pa2UgTXV1c3MKKyAqCVUuIFMuIEFybXkgQmFsbGlzdGljIFJlc2VhcmNoIExhYm9y
YXRvcnkKKyAqCURlY2VtYmVyLCAxOTgzCisgKgorICogU3RhdHVzIC0KKyAqCVB1YmxpYyBEb21h
aW4uICBEaXN0cmlidXRpb24gVW5saW1pdGVkLgorICogQnVncyAtCisgKglNb3JlIHN0YXRpc3Rp
Y3MgY291bGQgYWx3YXlzIGJlIGdhdGhlcmVkLgorICoJVGhpcyBwcm9ncmFtIGhhcyB0byBydW4g
U1VJRCB0byBST09UIHRvIGFjY2VzcyB0aGUgSUNNUCBzb2NrZXQuCisgKi8KKyNpbmNsdWRlICJw
aW5nX2NvbW1vbi5oIgorI2luY2x1ZGUgImZpeGZkcy5oIgorI2luY2x1ZGUgImRyb3Bwcml2Lmgi
CisKKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKyNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CisjaW5j
bHVkZSA8bGludXgvaWNtcHY2Lmg+CisKKyNkZWZpbmUgQklUX0NMRUFSKG5yLCBhZGRyKSBkbyB7
ICgoX191MzIgKikoYWRkcikpWyhucikgPj4gNV0gJj0gfigxVSA8PCAoKG5yKSAmIDMxKSk7IH0g
d2hpbGUoMCkKKyNkZWZpbmUgQklUX1NFVChuciwgYWRkcikgZG8geyAoKF9fdTMyICopKGFkZHIp
KVsobnIpID4+IDVdIHw9ICgxVSA8PCAoKG5yKSAmIDMxKSk7IH0gd2hpbGUoMCkKKyNkZWZpbmUg
QklUX1RFU1QobnIsIGFkZHIpIGRvIHsgKF9fdTMyICopKGFkZHIpKVsobnIpID4+IDVdICYgKDFV
IDw8ICgobnIpICYgMzEpKTsgfSB3aGlsZSgwKQorCisjZGVmaW5lIElDTVBWNl9GSUxURVJfV0lM
TFBBU1ModHlwZSwgZmlsdGVycCkgXAorCShCSVRfVEVTVCgodHlwZSksIGZpbHRlcnApID09IDAp
CisKKyNkZWZpbmUgSUNNUFY2X0ZJTFRFUl9XSUxMQkxPQ0sodHlwZSwgZmlsdGVycCkgXAorCUJJ
VF9URVNUKCh0eXBlKSwgZmlsdGVycCkKKworI2RlZmluZSBJQ01QVjZfRklMVEVSX1NFVFBBU1Mo
dHlwZSwgZmlsdGVycCkgXAorCUJJVF9DTEVBUigodHlwZSksIGZpbHRlcnApCisKKyNkZWZpbmUg
SUNNUFY2X0ZJTFRFUl9TRVRCTE9DSyh0eXBlLCBmaWx0ZXJwKSBcCisJQklUX1NFVCgodHlwZSks
IGZpbHRlcnApCisKKyNkZWZpbmUgSUNNUFY2X0ZJTFRFUl9TRVRQQVNTQUxMKGZpbHRlcnApIFwK
KwltZW1zZXQoZmlsdGVycCwgMCwgc2l6ZW9mKHN0cnVjdCBpY21wNl9maWx0ZXIpKTsKKworI2Rl
ZmluZSBJQ01QVjZfRklMVEVSX1NFVEJMT0NLQUxMKGZpbHRlcnApIFwKKwltZW1zZXQoZmlsdGVy
cCwgMHhGRiwgc2l6ZW9mKHN0cnVjdCBpY21wNl9maWx0ZXIpKTsKKworCisjZGVmaW5lCU1BWFBB
Q0tFVAkxMjgwMDAJCS8qIG1heCBwYWNrZXQgc2l6ZSAqLworCisjaWZkZWYgU09fVElNRVNUQU1Q
CisjZGVmaW5lIEhBVkVfU0lONl9TQ09QRUlEIDEKKyNlbmRpZgorCisKK19fdTMyIGZsb3dsYWJl
bDsKK19fdTMyIHRjbGFzczsKK3N0cnVjdCBjbXNnaGRyICpzcmNydDsKKworc3RydWN0IHNvY2th
ZGRyX2luNiB3aGVyZXRvOwkvKiB3aG8gdG8gcGluZyAqLwordV9jaGFyIG91dHBhY2tbTUFYUEFD
S0VUXTsKK2ludCBtYXhwYWNrZXQgPSBzaXplb2Yob3V0cGFjayk7CisKK3N0YXRpYyB1bnNpZ25l
ZCBjaGFyIGNtc2didWZbNDA5Nl07CitzdGF0aWMgaW50IGNtc2dsZW4gPSAwOworCitzdGF0aWMg
Y2hhciAqIHByX2FkZHIoc3RydWN0IGluNl9hZGRyICphZGRyKTsKK3N0YXRpYyBjaGFyICogcHJf
YWRkcl9uKHN0cnVjdCBpbjZfYWRkciAqYWRkcik7CitzdGF0aWMgaW50IHByX2ljbXBoKF9fdTgg
dHlwZSwgX191OCBjb2RlLCBfX3UzMiBpbmZvKTsKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpIF9f
YXR0cmlidXRlKChub3JldHVybikpOworCitzdHJ1Y3Qgc29ja2FkZHJfaW42IHNvdXJjZTsKK2No
YXIgKmRldmljZTsKK2ludCBwbXR1ZGlzYz0tMTsKKworc3RhdGljIGludCBpY21wX3NvY2s7CisK
KworCitzdGF0aWMgc3RydWN0IGluNl9hZGRyIGluNl9hbnlhZGRyOworc3RhdGljIF9faW5saW5l
X18gaW50IGlwdjZfYWRkcl9hbnkoc3RydWN0IGluNl9hZGRyICphZGRyKQoreworCXJldHVybiAo
bWVtY21wKGFkZHIsICZpbjZfYW55YWRkciwgMTYpID09IDApOworfQorCitzaXplX3QgaW5ldDZf
c3JjcnRfc3BhY2UoaW50IHR5cGUsIGludCBzZWdtZW50cykKK3sKKwlpZiAodHlwZSAhPSAwIHx8
IHNlZ21lbnRzID4gMjQpCisJCXJldHVybiAwOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGNt
c2doZHIpICsgc2l6ZW9mKHN0cnVjdCBydDBfaGRyKSArCisJCXNlZ21lbnRzICogc2l6ZW9mKHN0
cnVjdCBpbjZfYWRkcikpOworfQorCitleHRlcm4gc3RydWN0IGNtc2doZHIgKglpbmV0Nl9zcmNy
dF9pbml0KHZvaWQgKmJwLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgY21zZ2hkciAqY21zZzsKKwor
CWlmICh0eXBlKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldChicCwgMCwgc2l6ZW9mKHN0cnVj
dCBjbXNnaGRyKSArIHNpemVvZihzdHJ1Y3QgcnQwX2hkcikpOworCWNtc2cgPSAoc3RydWN0IGNt
c2doZHIgKikgYnA7CisKKwljbXNnLT5jbXNnX2xlbiA9IHNpemVvZihzdHJ1Y3QgY21zZ2hkcikg
KyBzaXplb2Yoc3RydWN0IHJ0MF9oZHIpOworCWNtc2ctPmNtc2dfbGV2ZWwgPSBTT0xfSVBWNjsK
KwljbXNnLT5jbXNnX3R5cGUgPSBJUFY2X1JUSERSOworCisJcmV0dXJuIGNtc2c7Cit9CisKK2lu
dCBpbmV0Nl9zcmNydF9hZGQoc3RydWN0IGNtc2doZHIgKmNtc2csIGNvbnN0IHN0cnVjdCBpbjZf
YWRkciAqYWRkcikKK3sKKwlzdHJ1Y3QgcnQwX2hkciAqaGRyOworCQorCWhkciA9IChzdHJ1Y3Qg
cnQwX2hkciAqKSBDTVNHX0RBVEEoY21zZyk7CisKKwljbXNnLT5jbXNnX2xlbiArPSBzaXplb2Yo
c3RydWN0IGluNl9hZGRyKTsKKwloZHItPnJ0X2hkci5oZHJsZW4gKz0gc2l6ZW9mKHN0cnVjdCBp
bjZfYWRkcikgLyA4OworCisJbWVtY3B5KCZoZHItPmFkZHJbaGRyLT5ydF9oZHIuc2VnbWVudHNf
bGVmdCsrXSwgYWRkciwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworCQkKKwly
ZXR1cm4gMDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQg
Y2gsIGhvbGQsIHBhY2tsZW47CisJdV9jaGFyICpwYWNrZXQ7CisJY2hhciAqdGFyZ2V0OworCXN0
cnVjdCBzb2NrYWRkcl9pbjYgZmlyc3Rob3A7CisJaW50IHNvY2tldF9lcnJubzsKKwlzdHJ1Y3Qg
aWNtcDZfZmlsdGVyIGZpbHRlcjsKKwlpbnQgZXJyLCBjc3VtX29mZnNldCwgc3pfb3B0OworCisJ
Zml4X2ZkcygpOworCisJaWNtcF9zb2NrID0gc29ja2V0KEFGX0lORVQ2LCBTT0NLX1JBVywgSVBQ
Uk9UT19JQ01QVjYpOworCXNvY2tldF9lcnJubyA9IGVycm5vOworCisJZHJvcF9wcml2KCk7CisK
Kwlzb3VyY2Uuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKwltZW1zZXQoJmZpcnN0aG9wLCAwLCBz
aXplb2YoZmlyc3Rob3ApKTsKKwlmaXJzdGhvcC5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworCisJ
cHJlbG9hZCA9IDE7CisJd2hpbGUgKChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCBDT01NT05fT1BU
U1RSICJGOiIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoKGNoKSB7CisJCWNhc2UgJ0YnOgorCQkJc3Nj
YW5mKG9wdGFyZywgIiV4IiwgJmZsb3dsYWJlbCk7CisJCQlvcHRpb25zIHw9IEZfRkxPV0lORk87
CisJCQlicmVhazsKKwkJY2FzZSAnUSc6CisJCQlzc2NhbmYob3B0YXJnLCAiJXgiLCAmdGNsYXNz
KTsKKwkJCW9wdGlvbnMgfD0gRl9UQ0xBU1M7CisJCQlicmVhazsKKwkJY2FzZSAnSSc6CisJCQlp
ZiAoc3RyY2hyKG9wdGFyZywgJzonKSkgeworCQkJCWlmIChpbmV0X3B0b24oQUZfSU5FVDYsIG9w
dGFyZywgKGNoYXIqKSZzb3VyY2Uuc2luNl9hZGRyKSA8PSAwKSB7CisJCQkJCWZwcmludGYoc3Rk
ZXJyLCAicGluZzogaW52YWxpZCBzb3VyY2UgYWRkcmVzcyAlc1xuIiwgb3B0YXJnKTsKKwkJCQkJ
ZXhpdCgyKTsKKwkJCQl9CisJCQkJb3B0aW9ucyB8PSBGX1NUUklDVFNPVVJDRTsKKwkJCX0gZWxz
ZSB7CisJCQkJZGV2aWNlID0gb3B0YXJnOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ00nOgor
CQkJaWYgKHN0cmNtcChvcHRhcmcsICJkbyIpID09IDApCisJCQkJcG10dWRpc2MgPSBJUFY2X1BN
VFVESVNDX0RPOworCQkJZWxzZSBpZiAoc3RyY21wKG9wdGFyZywgImRvbnQiKSA9PSAwKQorCQkJ
CXBtdHVkaXNjID0gSVBWNl9QTVRVRElTQ19ET05UOworCQkJZWxzZSBpZiAoc3RyY21wKG9wdGFy
ZywgIndhbnQiKSA9PSAwKQorCQkJCXBtdHVkaXNjID0gSVBWNl9QTVRVRElTQ19XQU5UOworCQkJ
ZWxzZSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJwaW5nOiB3cm9uZyB2YWx1ZSBmb3IgLU06IGRv
LCBkb250LCB3YW50IGFyZSB2YWxpZCBvbmVzLlxuIik7CisJCQkJZXhpdCgyKTsKKwkJCX0KKwkJ
CWJyZWFrOworCQljYXNlICdWJzoKKwkJCXByaW50ZigicGluZzYgdXRpbGl0eSwgaXB1dGlscy1z
cyVzXG4iLCBTTkFQU0hPVCk7CisJCQlleGl0KDApOworCQlDT01NT05fT1BUSU9OUworCQkJY29t
bW9uX29wdGlvbnMoY2gpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl1c2FnZSgpOworCQl9
CisJfQorCWFyZ2MgLT0gb3B0aW5kOworCWFyZ3YgKz0gb3B0aW5kOworCisJd2hpbGUgKGFyZ2Mg
PiAxKSB7CisJCXN0cnVjdCBpbjZfYWRkciBhZGRyOworCisJCWlmIChzcmNydCA9PSBOVUxMKSB7
CisJCQlpbnQgc3BhY2U7CisJCQkKKwkJCXNwYWNlID0gaW5ldDZfc3JjcnRfc3BhY2UoSVBWNl9T
UkNSVF9UWVBFXzAsIGFyZ2MgLSAxKTsKKworCQkJaWYgKHNwYWNlID09IDApCXsKKwkJCQlmcHJp
bnRmKHN0ZGVyciwgInNyY3J0X3NwYWNlIGZhaWxlZFxuIik7CisJCQkJZXhpdCgyKTsKKwkJCX0K
KwkJCWlmIChzcGFjZSArIGNtc2dsZW4gPiBzaXplb2YoY21zZ2J1ZikpIHsKKwkJCQlmcHJpbnRm
KHN0ZGVyciwgIm5vIHJvb20gZm9yIG9wdGlvbnNcbiIpOworCQkJCWV4aXQoMik7CisJCQl9CisK
KwkJCXNyY3J0ID0gKHN0cnVjdCBjbXNnaGRyKikoY21zZ2J1ZitjbXNnbGVuKTsKKwkJCWNtc2ds
ZW4gKz0gQ01TR19BTElHTihzcGFjZSk7CisJCQlpbmV0Nl9zcmNydF9pbml0KHNyY3J0LCBJUFY2
X1NSQ1JUX1RZUEVfMCk7CisJCX0KKworCQl0YXJnZXQgPSAqYXJndjsKKworCQlpZiAoaW5ldF9w
dG9uKEFGX0lORVQ2LCB0YXJnZXQsICZhZGRyKSA8PSAwKSB7CisJCQlzdHJ1Y3QgaG9zdGVudCAq
aHA7CisKKwkJCWhwID0gZ2V0aG9zdGJ5bmFtZTIodGFyZ2V0LCBBRl9JTkVUNik7CisKKwkJCWlm
IChocCA9PSBOVUxMKQl7CisJCQkJZnByaW50ZihzdGRlcnIsICJ1bmtub3duIGhvc3QgJXNcbiIs
IHRhcmdldCk7CisJCQkJZXhpdCgyKTsKKwkJCX0KKworCQkJbWVtY3B5KCZhZGRyLCBocC0+aF9h
ZGRyX2xpc3RbMF0sIDE2KTsKKwkJfQorCisJCWluZXQ2X3NyY3J0X2FkZChzcmNydCwgJmFkZHIp
OworCQlpZiAoaXB2Nl9hZGRyX2FueSgmZmlyc3Rob3Auc2luNl9hZGRyKSkKKwkJCW1lbWNweSgm
Zmlyc3Rob3Auc2luNl9hZGRyLCAmYWRkciwgMTYpOworCisJCWFyZ3YrKzsKKwkJYXJnYy0tOwor
CX0KKworCWlmIChhcmdjICE9IDEpCisJCXVzYWdlKCk7CisJdGFyZ2V0ID0gKmFyZ3Y7CisKKwlt
ZW1zZXQoJndoZXJldG8sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJd2hlcmV0
by5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworCXdoZXJldG8uc2luNl9wb3J0ID0gaHRvbnMoSVBQ
Uk9UT19JQ01QVjYpOworCisJaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgdGFyZ2V0LCAmd2hlcmV0
by5zaW42X2FkZHIpIDw9IDApIHsKKwkJc3RydWN0IGhvc3RlbnQgKmhwOworCisJCWhwID0gZ2V0
aG9zdGJ5bmFtZTIodGFyZ2V0LCBBRl9JTkVUNik7CisKKwkJaWYgKGhwID09IE5VTEwpIHsKKwkJ
CWZwcmludGYoc3RkZXJyLCAidW5rbm93biBob3N0XG4iKTsKKwkJCWV4aXQoMik7CisJCX0KKwkJ
CisJCW1lbWNweSgmd2hlcmV0by5zaW42X2FkZHIsIGhwLT5oX2FkZHJfbGlzdFswXSwgMTYpOwor
CX0gZWxzZSB7CisJCW9wdGlvbnMgfD0gRl9OVU1FUklDOworCX0KKwlpZiAoaXB2Nl9hZGRyX2Fu
eSgmZmlyc3Rob3Auc2luNl9hZGRyKSkKKwkJbWVtY3B5KCZmaXJzdGhvcC5zaW42X2FkZHIsICZ3
aGVyZXRvLnNpbjZfYWRkciwgMTYpOworCisJaG9zdG5hbWUgPSB0YXJnZXQ7CisKKwlpZiAoaXB2
Nl9hZGRyX2FueSgmc291cmNlLnNpbjZfYWRkcikpIHsKKwkJaW50IGFsZW47CisJCWludCBwcm9i
ZV9mZCA9IHNvY2tldChBRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CisKKwkJaWYgKHByb2JlX2Zk
IDwgMCkgeworCQkJcGVycm9yKCJzb2NrZXQiKTsKKwkJCWV4aXQoMik7CisJCX0KKwkJaWYgKGRl
dmljZSkgeworCQkJc3RydWN0IGlmcmVxIGlmcjsKKwkJCW1lbXNldCgmaWZyLCAwLCBzaXplb2Yo
aWZyKSk7CisJCQlzdHJuY3B5KGlmci5pZnJfbmFtZSwgZGV2aWNlLCBJRk5BTVNJWi0xKTsKKwkJ
CWlmIChzZXRzb2Nrb3B0KHByb2JlX2ZkLCBTT0xfU09DS0VULCBTT19CSU5EVE9ERVZJQ0UsIGRl
dmljZSwgc3RybGVuKGRldmljZSkrMSkgPT0gLTEpIHsKKyNpZmRlZiBIQVZFX1NJTjZfU0NPUEVJ
RAorCQkJCWlmICgoZmlyc3Rob3Auc2luNl9hZGRyLnM2X2FkZHIxNlswXSZodG9ucygweGZmYzAp
KSA9PSBodG9ucyAoMHhmZTgwKSB8fAorCQkJCSAgICAoZmlyc3Rob3Auc2luNl9hZGRyLnM2X2Fk
ZHIxNlswXSZodG9ucygweGZmZmYpKSA9PSBodG9ucyAoMHhmZjAyKSkgeworCQkJCQlpZiAoaW9j
dGwocHJvYmVfZmQsIFNJT0NHSUZJTkRFWCwgJmlmcikgPCAwKSB7CisJCQkJCQlmcHJpbnRmKHN0
ZGVyciwgInBpbmc6IHVua25vd24gaWZhY2UgJXNcbiIsIGRldmljZSk7CisJCQkJCQlleGl0KDIp
OworCQkJCQl9CisJCQkJCWZpcnN0aG9wLnNpbjZfc2NvcGVfaWQgPSBpZnIuaWZyX2lmaW5kZXg7
CisJCQkJfQorI2VuZGlmCisJCQl9CisJCX0KKwkJZmlyc3Rob3Auc2luNl9wb3J0ID0gaHRvbnMo
MTAyNSk7CisJCWlmIChjb25uZWN0KHByb2JlX2ZkLCAoc3RydWN0IHNvY2thZGRyKikmZmlyc3Ro
b3AsIHNpemVvZihmaXJzdGhvcCkpID09IC0xKSB7CisJCQlwZXJyb3IoImNvbm5lY3QiKTsKKwkJ
CWV4aXQoMik7CisJCX0KKwkJYWxlbiA9IHNpemVvZihzb3VyY2UpOworCQlpZiAoZ2V0c29ja25h
bWUocHJvYmVfZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSZzb3VyY2UsICZhbGVuKSA9PSAtMSkgewor
CQkJcGVycm9yKCJnZXRzb2NrbmFtZSIpOworCQkJZXhpdCgyKTsKKwkJfQorCQlzb3VyY2Uuc2lu
Nl9wb3J0ID0gMDsKKwkJY2xvc2UocHJvYmVfZmQpOworCX0KKworCWlmIChpY21wX3NvY2sgPCAw
KSB7CisJCWVycm5vID0gc29ja2V0X2Vycm5vOworCQlwZXJyb3IoInBpbmc6IGljbXAgb3BlbiBz
b2NrZXQiKTsKKwkJZXhpdCgyKTsKKwl9CisKKwlpZiAoZGV2aWNlKSB7CisJCXN0cnVjdCBpZnJl
cSBpZnI7CisJCXN0cnVjdCBjbXNnaGRyICpjbXNnOworCQlzdHJ1Y3QgaW42X3BrdGluZm8gKmlw
aTsKKwkJCQkKKwkJbWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKwkJc3RybmNweShpZnIu
aWZyX25hbWUsIGRldmljZSwgSUZOQU1TSVotMSk7CisJCWlmIChpb2N0bChpY21wX3NvY2ssIFNJ
T0NHSUZJTkRFWCwgJmlmcikgPCAwKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgInBpbmc6IHVua25v
d24gaWZhY2UgJXNcbiIsIGRldmljZSk7CisJCQlleGl0KDIpOworCQl9CisJCWNtc2cgPSAoc3Ry
dWN0IGNtc2doZHIqKWNtc2didWY7CisJCWNtc2dsZW4gKz0gQ01TR19TUEFDRShzaXplb2YoKmlw
aSkpOworCQljbXNnLT5jbXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZigqaXBpKSk7CisJCWNtc2ct
PmNtc2dfbGV2ZWwgPSBTT0xfSVBWNjsKKwkJY21zZy0+Y21zZ190eXBlID0gSVBWNl9QS1RJTkZP
OworCQkJCQorCQlpcGkgPSAoc3RydWN0IGluNl9wa3RpbmZvKilDTVNHX0RBVEEoY21zZyk7CisJ
CW1lbXNldChpcGksIDAsIHNpemVvZigqaXBpKSk7CisJCWlwaS0+aXBpNl9pZmluZGV4ID0gaWZy
Lmlmcl9pZmluZGV4OworCX0KKworCWlmICgod2hlcmV0by5zaW42X2FkZHIuczZfYWRkcjE2WzBd
Jmh0b25zKDB4ZmYwMCkpID09IGh0b25zICgweGZmMDApKSB7CisJCWlmICh1aWQpIHsKKwkJCWlm
IChpbnRlcnZhbCA8IDEwMDApIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgInBpbmc6IG11bHRpY2Fz
dCBwaW5nIHdpdGggdG9vIHNob3J0IGludGVydmFsLlxuIik7CisJCQkJZXhpdCgyKTsKKwkJCX0K
KwkJCWlmIChwbXR1ZGlzYyA+PSAwICYmIHBtdHVkaXNjICE9IElQVjZfUE1UVURJU0NfRE8pIHsK
KwkJCQlmcHJpbnRmKHN0ZGVyciwgInBpbmc6IG11bHRpY2FzdCBwaW5nIGRvZXMgbm90IGZyYWdt
ZW50LlxuIik7CisJCQkJZXhpdCgyKTsKKwkJCX0KKwkJfQorCQlpZiAocG10dWRpc2MgPCAwKQor
CQkJcG10dWRpc2MgPSBJUFY2X1BNVFVESVNDX0RPOworCX0KKworCWlmIChwbXR1ZGlzYyA+PSAw
KSB7CisJCWlmIChzZXRzb2Nrb3B0KGljbXBfc29jaywgU09MX0lQVjYsIElQVjZfTVRVX0RJU0NP
VkVSLCAmcG10dWRpc2MsIHNpemVvZihwbXR1ZGlzYykpID09IC0xKSB7CisJCQlwZXJyb3IoInBp
bmc6IElQVjZfTVRVX0RJU0NPVkVSIik7CisJCQlleGl0KDIpOworCQl9CisJfQorCisJaWYgKChv
cHRpb25zJkZfU1RSSUNUU09VUkNFKSAmJgorCSAgICBiaW5kKGljbXBfc29jaywgKHN0cnVjdCBz
b2NrYWRkciopJnNvdXJjZSwgc2l6ZW9mKHNvdXJjZSkpID09IC0xKSB7CisJCXBlcnJvcigicGlu
ZzogYmluZCBpY21wIHNvY2tldCIpOworCQlleGl0KDIpOworCX0KKworCWlmIChkYXRhbGVuID49
IHNpemVvZihzdHJ1Y3QgdGltZXZhbCkpCS8qIGNhbiB3ZSB0aW1lIHRyYW5zZmVyICovCisJCXRp
bWluZyA9IDE7CisJcGFja2xlbiA9IGRhdGFsZW4gKyA4ICsgNDA5NiArIDQwICsgODsgLyogNDA5
NiBmb3IgcnRoZHIgKi8KKwlpZiAoIShwYWNrZXQgPSAodV9jaGFyICopbWFsbG9jKCh1X2ludClw
YWNrbGVuKSkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJwaW5nOiBvdXQgb2YgbWVtb3J5LlxuIik7
CisJCWV4aXQoMik7CisJfQorCisJd29ya2luZ19yZWN2ZXJyID0gMTsKKwlob2xkID0gMTsKKwlp
ZiAoc2V0c29ja29wdChpY21wX3NvY2ssIFNPTF9JUFY2LCBJUFY2X1JFQ1ZFUlIsIChjaGFyICop
JmhvbGQsIHNpemVvZihob2xkKSkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJXQVJOSU5HOiB5b3Vy
IGtlcm5lbCBpcyB2ZWVlcnkgb2xkLiBObyBwcm9ibGVtcy5cbiIpOworCQl3b3JraW5nX3JlY3Zl
cnIgPSAwOworCX0KKworCS8qIEVzdGltYXRlIG1lbW9yeSBlYXRlbiBieSBzaW5nbGUgcGFja2V0
LiBJdCBpcyByb3VnaCBlc3RpbWF0ZS4KKwkgKiBBY3R1YWxseSwgZm9yIHNtYWxsIGRhdGFsZW4n
cyBpdCBkZXBlbmRzIG9uIGtlcm5lbCBzaWRlIGEgbG90LiAqLworCWhvbGQgPSBkYXRhbGVuKzg7
CisJaG9sZCArPSAoKGhvbGQrNTExKS81MTIpKig0MCsxNis2NCsxNjApOworCXNvY2tfc2V0YnVm
cyhpY21wX3NvY2ssIGhvbGQpOworCisJY3N1bV9vZmZzZXQgPSAyOworCXN6X29wdCA9IHNpemVv
ZihpbnQpOworCisJZXJyID0gc2V0c29ja29wdChpY21wX3NvY2ssIFNPTF9SQVcsIElQVjZfQ0hF
Q0tTVU0sICZjc3VtX29mZnNldCwgc3pfb3B0KTsKKwlpZiAoZXJyIDwgMCkgeworCQlwZXJyb3Io
InNldHNvY2tvcHQoUkFXX0NIRUNLU1VNKSIpOworCQlleGl0KDIpOworCX0KKworCS8qCisJICoJ
c2VsZWN0IGljbXAgZWNobyByZXBseSBhcyBpY21wIHR5cGUgdG8gcmVjZWl2ZQorCSAqLworCisJ
SUNNUFY2X0ZJTFRFUl9TRVRCTE9DS0FMTCgmZmlsdGVyKTsKKworCWlmICghd29ya2luZ19yZWN2
ZXJyKSB7CisJCUlDTVBWNl9GSUxURVJfU0VUUEFTUyhJQ01QVjZfREVTVF9VTlJFQUNILCAmZmls
dGVyKTsKKwkJSUNNUFY2X0ZJTFRFUl9TRVRQQVNTKElDTVBWNl9QS1RfVE9PQklHLCAmZmlsdGVy
KTsKKwkJSUNNUFY2X0ZJTFRFUl9TRVRQQVNTKElDTVBWNl9USU1FX0VYQ0VFRCwgJmZpbHRlcik7
CisJCUlDTVBWNl9GSUxURVJfU0VUUEFTUyhJQ01QVjZfUEFSQU1QUk9CLCAmZmlsdGVyKTsKKwl9
CisKKwlJQ01QVjZfRklMVEVSX1NFVFBBU1MoSUNNUFY2X0VDSE9fUkVQTFksICZmaWx0ZXIpOwor
CisJZXJyID0gc2V0c29ja29wdChpY21wX3NvY2ssIFNPTF9JQ01QVjYsIElDTVBWNl9GSUxURVIs
ICZmaWx0ZXIsCisJCQkgc2l6ZW9mKHN0cnVjdCBpY21wNl9maWx0ZXIpKTsKKworCWlmIChlcnIg
PCAwKSB7CisJCXBlcnJvcigic2V0c29ja29wdChJQ01QVjZfRklMVEVSKSIpOworCQlleGl0KDIp
OworCX0KKworCWlmIChvcHRpb25zICYgRl9OT0xPT1ApIHsKKwkJaW50IGxvb3AgPSAwOworCQlp
ZiAoc2V0c29ja29wdChpY21wX3NvY2ssIElQUFJPVE9fSVBWNiwgSVBWNl9NVUxUSUNBU1RfTE9P
UCwKKwkJCQkJCQkmbG9vcCwgc2l6ZW9mKGxvb3ApKSA9PSAtMSkgeworCQkJcGVycm9yICgiY2Fu
J3QgZGlzYWJsZSBtdWx0aWNhc3QgbG9vcGJhY2siKTsKKwkJCWV4aXQoMik7CisJCX0KKwl9CisJ
aWYgKG9wdGlvbnMgJiBGX1RUTCkgeworCQlpZiAoc2V0c29ja29wdChpY21wX3NvY2ssIElQUFJP
VE9fSVBWNiwgSVBWNl9NVUxUSUNBU1RfSE9QUywKKwkJCSAgICAgICAmdHRsLCBzaXplb2YodHRs
KSkgPT0gLTEpIHsKKwkJCXBlcnJvciAoImNhbid0IHNldCBtdWx0aWNhc3QgaG9wIGxpbWl0Iik7
CisJCQlleGl0KDIpOworCQl9CisJCWlmIChzZXRzb2Nrb3B0KGljbXBfc29jaywgSVBQUk9UT19J
UFY2LCBJUFY2X1VOSUNBU1RfSE9QUywKKwkJCSAgICAgICAmdHRsLCBzaXplb2YodHRsKSkgPT0g
LTEpIHsKKwkJCXBlcnJvciAoImNhbid0IHNldCB1bmljYXN0IGhvcCBsaW1pdCIpOworCQkJZXhp
dCgyKTsKKwkJfQorCX0KKworCWlmICgxKSB7CisJCWludCBvbiA9IDE7CisJCWlmIChzZXRzb2Nr
b3B0KGljbXBfc29jaywgSVBQUk9UT19JUFY2LCBJUFY2X0hPUExJTUlULAorCQkJICAgICAgICZv
biwgc2l6ZW9mKG9uKSkgPT0gLTEpIHsKKwkJCXBlcnJvciAoImNhbid0IHJlY2VpdmUgaG9wIGxp
bWl0Iik7CisJCQlleGl0KDIpOworCQl9CisJfQorCisJaWYgKG9wdGlvbnMmRl9GTE9XSU5GTykg
eworI2lmZGVmIElQVjZfRkxPV0xBQkVMX01HUgorCQljaGFyIGZyZXFfYnVmW0NNU0dfQUxJR04o
c2l6ZW9mKHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSkpICsgY21zZ2xlbl07CisJCXN0cnVjdCBp
bjZfZmxvd2xhYmVsX3JlcSAqZnJlcSA9IChzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgKilmcmVx
X2J1ZjsKKwkJaW50IGZyZXFfbGVuID0gc2l6ZW9mKCpmcmVxKTsKKwkJaWYgKHNyY3J0KQorCQkJ
ZnJlcV9sZW4gPSBDTVNHX0FMSUdOKHNpemVvZigqZnJlcSkpICsgc3JjcnQtPmNtc2dfbGVuOwor
CQltZW1zZXQoZnJlcSwgMCwgc2l6ZW9mKCpmcmVxKSk7CisJCWZyZXEtPmZscl9sYWJlbCA9IGh0
b25sKGZsb3dsYWJlbCYweEZGRkZGKTsKKwkJZnJlcS0+ZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9H
RVQ7CisJCWZyZXEtPmZscl9mbGFncyA9IElQVjZfRkxfRl9DUkVBVEU7CisJCWZyZXEtPmZscl9z
aGFyZSA9IElQVjZfRkxfU19FWENMOworCQltZW1jcHkoJmZyZXEtPmZscl9kc3QsICZ3aGVyZXRv
LnNpbjZfYWRkciwgMTYpOworCQlpZiAoc3JjcnQpCisJCQltZW1jcHkoZnJlcV9idWYgKyBDTVNH
X0FMSUdOKHNpemVvZigqZnJlcSkpLCBzcmNydCwgc3JjcnQtPmNtc2dfbGVuKTsKKwkJaWYgKHNl
dHNvY2tvcHQoaWNtcF9zb2NrLCBJUFBST1RPX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwKKwkJ
CSAgICAgICBmcmVxLCBmcmVxX2xlbikgPT0gLTEpIHsKKwkJCXBlcnJvciAoImNhbid0IHNldCBm
bG93bGFiZWwiKTsKKwkJCWV4aXQoMik7CisJCX0KKwkJZmxvd2xhYmVsID0gZnJlcS0+ZmxyX2xh
YmVsOworCQlpZiAoc3JjcnQpIHsKKwkJCWNtc2dsZW4gPSAoY2hhciopc3JjcnQgLSAoY2hhciop
Y21zZ2J1ZjsKKwkJCXNyY3J0ID0gTlVMTDsKKwkJfQorI2Vsc2UKKwkJZnByaW50ZihzdGRlcnIs
ICJGbG93IGxhYmVscyBhcmUgbm90IHN1cHBvcnRlZC5cbiIpOworCQlleGl0KDIpOworI2VuZGlm
CisJfQorCWlmIChvcHRpb25zJihGX0ZMT1dJTkZPfEZfVENMQVNTKSkgeworI2lmZGVmIElQVjZf
RkxPV0lORk9fU0VORAorCQlpbnQgb24gPSAxOworCQl3aGVyZXRvLnNpbjZfZmxvd2luZm8gPSBm
bG93bGFiZWwgfCBodG9ubCgodGNsYXNzJjB4RkYpPDwyMCk7CisJCWlmIChzZXRzb2Nrb3B0KGlj
bXBfc29jaywgSVBQUk9UT19JUFY2LCBJUFY2X0ZMT1dJTkZPX1NFTkQsCisJCQkgICAgICAgJm9u
LCBzaXplb2Yob24pKSA9PSAtMSkgeworCQkJcGVycm9yICgiY2FuJ3Qgc2VuZCBmbG93aW5mbyIp
OworCQkJZXhpdCgyKTsKKwkJfQorI2Vsc2UKKwkJZnByaW50ZihzdGRlcnIsICJGbG93aW5mbyBp
cyBub3Qgc3VwcG9ydGVkLlxuIik7CisJCWV4aXQoMik7CisjZW5kaWYKKwl9CisKKwlwcmludGYo
IlBJTkcgJXMoJXMpICIsIGhvc3RuYW1lLCBwcl9hZGRyKCZ3aGVyZXRvLnNpbjZfYWRkcikpOwor
CWlmIChmbG93bGFiZWwpCisJCXByaW50ZigiLCBmbG93IDB4JTA1eCwgIiwgKHVuc2lnbmVkKW50
b2hsKGZsb3dsYWJlbCkpOworCWlmIChkZXZpY2UgfHwgKG9wdGlvbnMmRl9TVFJJQ1RTT1VSQ0Up
KSB7CisJCXByaW50ZigiZnJvbSAlcyAlczogIiwKKwkJICAgICAgIHByX2FkZHJfbigmc291cmNl
LnNpbjZfYWRkciksIGRldmljZSA/IDogIiIpOworCX0KKwlwcmludGYoIiVkIGRhdGEgYnl0ZXNc
biIsIGRhdGFsZW4pOworCisJc2V0dXAoaWNtcF9zb2NrKTsKKworCW1haW5fbG9vcChpY21wX3Nv
Y2ssIHBhY2tldCwgcGFja2xlbik7Cit9CisKK2ludCByZWNlaXZlX2Vycm9yX21zZygpCit7CisJ
aW50IHJlczsKKwljaGFyIGNidWZbNTEyXTsKKwlzdHJ1Y3QgaW92ZWMgIGlvdjsKKwlzdHJ1Y3Qg
bXNnaGRyIG1zZzsKKwlzdHJ1Y3QgY21zZ2hkciAqY21zZzsKKwlzdHJ1Y3Qgc29ja19leHRlbmRl
ZF9lcnIgKmU7CisJc3RydWN0IGljbXA2aGRyIGljbXBoOworCXN0cnVjdCBzb2NrYWRkcl9pbjYg
dGFyZ2V0OworCWludCBuZXRfZXJyb3JzID0gMDsKKwlpbnQgbG9jYWxfZXJyb3JzID0gMDsKKwlp
bnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKworCWlvdi5pb3ZfYmFzZSA9ICZpY21waDsKKwlpb3Yu
aW92X2xlbiA9IHNpemVvZihpY21waCk7CisJbXNnLm1zZ19uYW1lID0gKHZvaWQqKSZ0YXJnZXQ7
CisJbXNnLm1zZ19uYW1lbGVuID0gc2l6ZW9mKHRhcmdldCk7CisJbXNnLm1zZ19pb3YgPSAmaW92
OworCW1zZy5tc2dfaW92bGVuID0gMTsKKwltc2cubXNnX2ZsYWdzID0gMDsKKwltc2cubXNnX2Nv
bnRyb2wgPSBjYnVmOworCW1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjYnVmKTsKKworCXJl
cyA9IHJlY3Ztc2coaWNtcF9zb2NrLCAmbXNnLCBNU0dfRVJSUVVFVUV8TVNHX0RPTlRXQUlUKTsK
KwlpZiAocmVzIDwgMCkKKwkJZ290byBvdXQ7CisKKwllID0gTlVMTDsKKwlmb3IgKGNtc2cgPSBD
TVNHX0ZJUlNUSERSKCZtc2cpOyBjbXNnOyBjbXNnID0gQ01TR19OWFRIRFIoJm1zZywgY21zZykp
IHsKKwkJaWYgKGNtc2ctPmNtc2dfbGV2ZWwgPT0gU09MX0lQVjYpIHsKKwkJCWlmIChjbXNnLT5j
bXNnX3R5cGUgPT0gSVBWNl9SRUNWRVJSKQorCQkJCWUgPSAoc3RydWN0IHNvY2tfZXh0ZW5kZWRf
ZXJyICopQ01TR19EQVRBKGNtc2cpOworCQl9CisJfQorCWlmIChlID09IE5VTEwpCisJCWFib3J0
KCk7CisKKwlpZiAoZS0+ZWVfb3JpZ2luID09IFNPX0VFX09SSUdJTl9MT0NBTCkgeworCQlsb2Nh
bF9lcnJvcnMrKzsKKwkJaWYgKG9wdGlvbnMgJiBGX1FVSUVUKQorCQkJZ290byBvdXQ7CisJCWlm
IChvcHRpb25zICYgRl9GTE9PRCkKKwkJCXdyaXRlKFNURE9VVF9GSUxFTk8sICJFIiwgMSk7CisJ
CWVsc2UgaWYgKGUtPmVlX2Vycm5vICE9IEVNU0dTSVpFKQorCQkJZnByaW50ZihzdGRlcnIsICJw
aW5nOiBsb2NhbCBlcnJvcjogJXNcbiIsIHN0cmVycm9yKGUtPmVlX2Vycm5vKSk7CisJCWVsc2UK
KwkJCWZwcmludGYoc3RkZXJyLCAicGluZzogbG9jYWwgZXJyb3I6IE1lc3NhZ2UgdG9vIGxvbmcs
IG10dT0ldVxuIiwgZS0+ZWVfaW5mbyk7CisJCW5lcnJvcnMrKzsKKwl9IGVsc2UgaWYgKGUtPmVl
X29yaWdpbiA9PSBTT19FRV9PUklHSU5fSUNNUDYpIHsKKwkJc3RydWN0IHNvY2thZGRyX2luNiAq
c2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42KikoZSsxKTsKKworCQlpZiAocmVzIDwgc2l6ZW9m
KGljbXBoKSB8fAorCQkgICAgbWVtY21wKCZ0YXJnZXQuc2luNl9hZGRyLCAmd2hlcmV0by5zaW42
X2FkZHIsIDE2KSB8fAorCQkgICAgaWNtcGguaWNtcDZfdHlwZSAhPSBJQ01QVjZfRUNIT19SRVFV
RVNUIHx8CisJCSAgICBpY21waC5pY21wNl9pZGVudGlmaWVyICE9IGlkZW50KSB7CisJCQkvKiBO
b3Qgb3VyIGVycm9yLCBub3QgYW4gZXJyb3IgYXQgYWxsLiBDbGVhci4gKi8KKwkJCXNhdmVkX2Vy
cm5vID0gMDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJbmV0X2Vycm9ycysrOworCQluZXJyb3Jz
Kys7CisJCWlmIChvcHRpb25zICYgRl9RVUlFVCkKKwkJCWdvdG8gb3V0OworCQlpZiAob3B0aW9u
cyAmIEZfRkxPT0QpIHsKKwkJCXdyaXRlKFNURE9VVF9GSUxFTk8sICJcYkUiLCAyKTsKKwkJfSBl
bHNlIHsKKwkJCXByaW50ZigiRnJvbSAlcyBpY21wX3NlcT0ldSAiLCBwcl9hZGRyKCZzaW42LT5z
aW42X2FkZHIpLCBudG9ocyhpY21waC5pY21wNl9zZXF1ZW5jZSkpOworCQkJcHJfaWNtcGgoZS0+
ZWVfdHlwZSwgZS0+ZWVfY29kZSwgZS0+ZWVfaW5mbyk7CisJCQlwdXRjaGFyKCdcbicpOworCQkJ
ZmZsdXNoKHN0ZG91dCk7CisJCX0KKwl9CisKK291dDoKKwllcnJubyA9IHNhdmVkX2Vycm5vOwor
CXJldHVybiBuZXRfZXJyb3JzID8gOiAtbG9jYWxfZXJyb3JzOworfQorCisvKgorICogcGluZ2Vy
IC0tCisgKiAJQ29tcG9zZSBhbmQgdHJhbnNtaXQgYW4gSUNNUCBFQ0hPIFJFUVVFU1QgcGFja2V0
LiAgVGhlIElQIHBhY2tldAorICogd2lsbCBiZSBhZGRlZCBvbiBieSB0aGUga2VybmVsLiAgVGhl
IElEIGZpZWxkIGlzIG91ciBVTklYIHByb2Nlc3MgSUQsCisgKiBhbmQgdGhlIHNlcXVlbmNlIG51
bWJlciBpcyBhbiBhc2NlbmRpbmcgaW50ZWdlci4gIFRoZSBmaXJzdCA4IGJ5dGVzCisgKiBvZiB0
aGUgZGF0YSBwb3J0aW9uIGFyZSB1c2VkIHRvIGhvbGQgYSBVTklYICJ0aW1ldmFsIiBzdHJ1Y3Qg
aW4gVkFYCisgKiBieXRlLW9yZGVyLCB0byBjb21wdXRlIHRoZSByb3VuZC10cmlwIHRpbWUuCisg
Ki8KK2ludCBzZW5kX3Byb2JlKHZvaWQpCit7CisJc3RydWN0IGljbXA2aGRyICppY21waDsKKwlp
bnQgY2M7CisJaW50IGk7CisKKwlpY21waCA9IChzdHJ1Y3QgaWNtcDZoZHIgKilvdXRwYWNrOwor
CWljbXBoLT5pY21wNl90eXBlID0gSUNNUFY2X0VDSE9fUkVRVUVTVDsKKwlpY21waC0+aWNtcDZf
Y29kZSA9IDA7CisJaWNtcGgtPmljbXA2X2Nrc3VtID0gMDsKKwlpY21waC0+aWNtcDZfc2VxdWVu
Y2UgPSBodG9ucyhudHJhbnNtaXR0ZWQrMSk7CisJaWNtcGgtPmljbXA2X2lkZW50aWZpZXIgPSBp
ZGVudDsKKworCUNMUigobnRyYW5zbWl0dGVkKzEpICUgbXhfZHVwX2NrKTsKKworCWlmICh0aW1p
bmcpCisJCWdldHRpbWVvZmRheSgoc3RydWN0IHRpbWV2YWwgKikmb3V0cGFja1s4XSwKKwkJICAg
IChzdHJ1Y3QgdGltZXpvbmUgKilOVUxMKTsKKworCWNjID0gZGF0YWxlbiArIDg7CQkJLyogc2tp
cHMgSUNNUCBwb3J0aW9uICovCisKKwlpZiAoY21zZ2xlbiA9PSAwKSB7CisJCWkgPSBzZW5kdG8o
aWNtcF9zb2NrLCAoY2hhciAqKW91dHBhY2ssIGNjLCBjb25maXJtLAorCQkJICAgKHN0cnVjdCBz
b2NrYWRkciAqKSAmd2hlcmV0bywKKwkJCSAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7
CisJfSBlbHNlIHsKKwkJc3RydWN0IG1zZ2hkciBtaGRyOworCQlzdHJ1Y3QgaW92ZWMgaW92Owor
CisJCWlvdi5pb3ZfbGVuICA9IGNjOworCQlpb3YuaW92X2Jhc2UgPSBvdXRwYWNrOworCisJCW1o
ZHIubXNnX25hbWUgPSAmd2hlcmV0bzsKKwkJbWhkci5tc2dfbmFtZWxlbiA9IHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW42KTsKKwkJbWhkci5tc2dfaW92ID0gJmlvdjsKKwkJbWhkci5tc2dfaW92
bGVuID0gMTsKKwkJbWhkci5tc2dfY29udHJvbCA9IGNtc2didWY7CisJCW1oZHIubXNnX2NvbnRy
b2xsZW4gPSBjbXNnbGVuOworCisJCWkgPSBzZW5kbXNnKGljbXBfc29jaywgJm1oZHIsIGNvbmZp
cm0pOworCX0KKwljb25maXJtID0gMDsKKworCXJldHVybiAoY2MgPT0gaSA/IDAgOiBpKTsKK30K
KworLyoKKyAqIHBhcnNlX3JlcGx5IC0tCisgKglQcmludCBvdXQgdGhlIHBhY2tldCwgaWYgaXQg
Y2FtZSBmcm9tIHVzLiAgVGhpcyBsb2dpYyBpcyBuZWNlc3NhcnkKKyAqIGJlY2F1c2UgQUxMIHJl
YWRlcnMgb2YgdGhlIElDTVAgc29ja2V0IGdldCBhIGNvcHkgb2YgQUxMIElDTVAgcGFja2V0cwor
ICogd2hpY2ggYXJyaXZlICgndGlzIG9ubHkgZmFpcikuICBUaGlzIHBlcm1pdHMgbXVsdGlwbGUg
Y29waWVzIG9mIHRoaXMKKyAqIHByb2dyYW0gdG8gYmUgcnVuIHdpdGhvdXQgaGF2aW5nIGludGVy
bWluZ2xlZCBvdXRwdXQgKG9yIHN0YXRpc3RpY3MhKS4KKyAqLworaW50CitwYXJzZV9yZXBseShz
dHJ1Y3QgbXNnaGRyICptc2csIGludCBjYywgdm9pZCAqYWRkciwgc3RydWN0IHRpbWV2YWwgKnR2
KQoreworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKmZyb20gPSBhZGRyOworCV9fdTggKmJ1ZiA9IG1z
Zy0+bXNnX2lvdi0+aW92X2Jhc2U7CisJc3RydWN0IGNtc2doZHIgKmM7CisJc3RydWN0IGljbXA2
aGRyICppY21waDsKKwlpbnQgaG9wcyA9IC0xOworCisJZm9yIChjID0gQ01TR19GSVJTVEhEUiht
c2cpOyBjOyBjID0gQ01TR19OWFRIRFIobXNnLCBjKSkgeworCQlpZiAoYy0+Y21zZ19sZXZlbCAh
PSBTT0xfSVBWNiB8fAorCQkgICAgYy0+Y21zZ190eXBlICE9IElQVjZfSE9QTElNSVQpCisJCQlj
b250aW51ZTsKKwkJaWYgKGMtPmNtc2dfbGVuIDwgQ01TR19MRU4oc2l6ZW9mKGludCkpKQorCQkJ
Y29udGludWU7CisJCWhvcHMgPSAqKGludCopQ01TR19EQVRBKGMpOworCX0KKworCisJLyogTm93
IHRoZSBJQ01QIHBhcnQgKi8KKworCWljbXBoID0gKHN0cnVjdCBpY21wNmhkciAqKSBidWY7CisJ
aWYgKGNjIDwgOCkgeworCQlpZiAob3B0aW9ucyAmIEZfVkVSQk9TRSkKKwkJCWZwcmludGYoc3Rk
ZXJyLCAicGluZzogcGFja2V0IHRvbyBzaG9ydCAoJWQgYnl0ZXMpXG4iLCBjYyk7CisJCXJldHVy
biAxOworCX0KKworCWlmIChpY21waC0+aWNtcDZfdHlwZSA9PSBJQ01QVjZfRUNIT19SRVBMWSkg
eworCQlpZiAoaWNtcGgtPmljbXA2X2lkZW50aWZpZXIgIT0gaWRlbnQpCisJCQlyZXR1cm4gMTsK
KwkJaWYgKGdhdGhlcl9zdGF0aXN0aWNzKChfX3U4KikoaWNtcGgrMSksIGNjLAorCQkJCSAgICAg
IG50b2hzKGljbXBoLT5pY21wNl9zZXF1ZW5jZSksCisJCQkJICAgICAgaG9wcywgMCwgdHYsIHBy
X2FkZHIoJmZyb20tPnNpbjZfYWRkcikpKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJaW50
IG5leHRoZHI7CisJCXN0cnVjdCBpcHY2aGRyICppcGgxID0gKHN0cnVjdCBpcHY2aGRyKikoaWNt
cGgrMSk7CisJCXN0cnVjdCBpY21wNmhkciAqaWNtcGgxID0gKHN0cnVjdCBpY21wNmhkciAqKShp
cGgxKzEpOworCisJCS8qIFdlIG11c3Qgbm90IGV2ZXIgZmFsbCBoZXJlLiBBbGwgdGhlIG1lc3Nh
Z2VzIGJ1dAorCQkgKiBlY2hvIHJlcGx5IGFyZSBibG9ja2VkIGJ5IGZpbHRlciBhbmQgZXJyb3Ig
YXJlCisJCSAqIHJlY2VpdmVkIHdpdGggSVBWNl9SRUNWRVJSLiBVZ2x5IGNvZGUgaXMgcHJlc2Vy
dmVkCisJCSAqIGhvd2V2ZXIsIGp1c3QgdG8gcmVtZW1iZXIgd2hhdCBjcmFwIHdlIGF2b2lkZWQK
KwkJICogdXNpbmcgUkVDVlJFUlIuIDotKQorCQkgKi8KKworCQlpZiAoY2MgPCA4K3NpemVvZihz
dHJ1Y3QgaXB2NmhkcikrOCkKKwkJCXJldHVybiAxOworCisJCWlmIChtZW1jbXAoJmlwaDEtPmRh
ZGRyLCAmd2hlcmV0by5zaW42X2FkZHIsIDE2KSkKKwkJCXJldHVybiAxOworCisJCW5leHRoZHIg
PSBpcGgxLT5uZXh0aGRyOworCisJCWlmIChuZXh0aGRyID09IDQ0KSB7CisJCQluZXh0aGRyID0g
KihfX3U4KilpY21waDE7CisJCQlpY21waDErKzsKKwkJfQorCQlpZiAobmV4dGhkciA9PSBJUFBS
T1RPX0lDTVBWNikgeworCQkJaWYgKGljbXBoMS0+aWNtcDZfdHlwZSAhPSBJQ01QVjZfRUNIT19S
RVFVRVNUIHx8CisJCQkgICAgaWNtcGgxLT5pY21wNl9pZGVudGlmaWVyICE9IGlkZW50KQorCQkJ
CXJldHVybiAxOworCQkJYWNrbm93bGVkZ2UobnRvaHMoaWNtcGgxLT5pY21wNl9zZXF1ZW5jZSkp
OworCQkJaWYgKHdvcmtpbmdfcmVjdmVycikKKwkJCQlyZXR1cm4gMDsKKwkJCW5lcnJvcnMrKzsK
KwkJCWlmIChvcHRpb25zICYgRl9GTE9PRCkgeworCQkJCXdyaXRlKFNURE9VVF9GSUxFTk8sICJc
YkUiLCAyKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXByaW50ZigiRnJvbSAlczogaWNtcF9z
ZXE9JXUgIiwgcHJfYWRkcigmZnJvbS0+c2luNl9hZGRyKSwgbnRvaHMoaWNtcGgxLT5pY21wNl9z
ZXF1ZW5jZSkpOworCQl9IGVsc2UgeworCQkJLyogV2UndmUgZ290IHNvbWV0aGluZyBvdGhlciB0
aGFuIGFuIEVDSE9SRVBMWSAqLworCQkJaWYgKCEob3B0aW9ucyAmIEZfVkVSQk9TRSkgfHwgdWlk
KQorCQkJCXJldHVybiAxOworCQkJcHJpbnRmKCJGcm9tICVzOiAiLCBwcl9hZGRyKCZmcm9tLT5z
aW42X2FkZHIpKTsKKwkJfQorCQlwcl9pY21waChpY21waC0+aWNtcDZfdHlwZSwgaWNtcGgtPmlj
bXA2X2NvZGUsIG50b2hsKGljbXBoLT5pY21wNl9tdHUpKTsKKwl9CisKKwlpZiAoIShvcHRpb25z
ICYgRl9GTE9PRCkpIHsKKwkJaWYgKG9wdGlvbnMgJiBGX0FVRElCTEUpCisJCQlwdXRjaGFyKCdc
YScpOworCQlwdXRjaGFyKCdcbicpOworCQlmZmx1c2goc3Rkb3V0KTsKKwl9CisJcmV0dXJuIDA7
Cit9CisKKworaW50IHByX2ljbXBoKF9fdTggdHlwZSwgX191OCBjb2RlLCBfX3UzMiBpbmZvKQor
eworCXN3aXRjaCh0eXBlKSB7CisJY2FzZSBJQ01QVjZfREVTVF9VTlJFQUNIOgorCQlwcmludGYo
IkRlc3RpbmF0aW9uIHVucmVhY2hhYmxlOiAiKTsKKwkJc3dpdGNoIChjb2RlKSB7CisJCWNhc2Ug
SUNNUFY2X05PUk9VVEU6CisJCQlwcmludGYoIk5vIHJvdXRlIik7CisJCQlicmVhazsKKwkJY2Fz
ZSBJQ01QVjZfQURNX1BST0hJQklURUQ6CisJCQlwcmludGYoIkFkbWluaXN0cmF0aXZlbHkgcHJv
aGliaXRlZCIpOworCQkJYnJlYWs7CisJCWNhc2UgSUNNUFY2X05PVF9ORUlHSEJPVVI6CisJCQlw
cmludGYoIk5vdCBuZWlnaGJvdXIiKTsKKwkJCWJyZWFrOworCQljYXNlIElDTVBWNl9BRERSX1VO
UkVBQ0g6CisJCQlwcmludGYoIkFkZHJlc3MgdW5yZWFjaGFibGUiKTsKKwkJCWJyZWFrOworCQlj
YXNlIElDTVBWNl9QT1JUX1VOUkVBQ0g6CisJCQlwcmludGYoIlBvcnQgdW5yZWFjaGFibGUiKTsK
KwkJCWJyZWFrOworCQlkZWZhdWx0OgkKKwkJCXByaW50ZigiVW5rbm93biBjb2RlICVkIiwgY29k
ZSk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIElDTVBWNl9QS1RfVE9PQklHOgor
CQlwcmludGYoIlBhY2tldCB0b28gYmlnOiBtdHU9JXUiLCBpbmZvKTsKKwkJaWYgKGNvZGUpCisJ
CQlwcmludGYoIiwgY29kZT0lZCIsIGNvZGUpOworCQlicmVhazsKKwljYXNlIElDTVBWNl9USU1F
X0VYQ0VFRDoKKwkJcHJpbnRmKCJUaW1lIGV4Y2VlZGVkOiAiKTsKKwkJaWYgKGNvZGUgPT0gSUNN
UFY2X0VYQ19IT1BMSU1JVCkKKwkJCXByaW50ZigiSG9wIGxpbWl0Iik7CisJCWVsc2UgaWYgKGNv
ZGUgPT0gSUNNUFY2X0VYQ19GUkFHVElNRSkKKwkJCXByaW50ZigiRGVmcmFnbWVudGF0aW9uIGZh
aWx1cmUiKTsKKwkJZWxzZQorCQkJcHJpbnRmKCJjb2RlICVkIiwgY29kZSk7CisJCWJyZWFrOwor
CWNhc2UgSUNNUFY2X1BBUkFNUFJPQjoKKwkJcHJpbnRmKCJQYXJhbWV0ZXIgcHJvYmxlbTogIik7
CisJCWlmIChjb2RlID09IElDTVBWNl9IRFJfRklFTEQpCisJCQlwcmludGYoIldyb25nIGhlYWRl
ciBmaWVsZCAiKTsKKwkJZWxzZSBpZiAoY29kZSA9PSBJQ01QVjZfVU5LX05FWFRIRFIpCisJCQlw
cmludGYoIlVua25vd24gaGVhZGVyICIpOworCQllbHNlIGlmIChjb2RlID09IElDTVBWNl9VTktf
T1BUSU9OKQorCQkJcHJpbnRmKCJVbmtub3duIG9wdGlvbiAiKTsKKwkJZWxzZQorCQkJcHJpbnRm
KCJjb2RlICVkICIsIGNvZGUpOworCQlwcmludGYgKCJhdCAldSIsIGluZm8pOworCQlicmVhazsK
KwljYXNlIElDTVBWNl9FQ0hPX1JFUVVFU1Q6CisJCXByaW50ZigiRWNobyByZXF1ZXN0Iik7CisJ
CWJyZWFrOworCWNhc2UgSUNNUFY2X0VDSE9fUkVQTFk6CisJCXByaW50ZigiRWNobyByZXBseSIp
OworCQlicmVhazsKKwljYXNlIElDTVBWNl9NR01fUVVFUlk6CisJCXByaW50ZigiTUxEIFF1ZXJ5
Iik7CisJCWJyZWFrOworCWNhc2UgSUNNUFY2X01HTV9SRVBPUlQ6CisJCXByaW50ZigiTUxEIFJl
cG9ydCIpOworCQlicmVhazsKKwljYXNlIElDTVBWNl9NR01fUkVEVUNUSU9OOgorCQlwcmludGYo
Ik1MRCBSZWR1Y3Rpb24iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmKCJ1bmtub3du
IGljbXAgdHlwZSIpOworCQkKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNpbmNsdWRlIDxsaW51eC9m
aWx0ZXIuaD4KKwordm9pZCBpbnN0YWxsX2ZpbHRlcih2b2lkKQoreworCXN0YXRpYyBpbnQgb25j
ZTsKKwlzdGF0aWMgc3RydWN0IHNvY2tfZmlsdGVyIGluc25zW10gPSB7CisJCUJQRl9TVE1UKEJQ
Rl9MRHxCUEZfSHxCUEZfQUJTLCA0KSwgIC8qIExvYWQgaWNtcCBlY2hvIGlkZW50ICovCisJCUJQ
Rl9KVU1QKEJQRl9KTVB8QlBGX0pFUXxCUEZfSywgMHhBQUFBLCAwLCAxKSwgIC8qIE91cnM/ICov
CisJCUJQRl9TVE1UKEJQRl9SRVR8QlBGX0ssIH4wVSksICAvKiBZZXMsIGl0IHBhc3Nlcy4gKi8K
KwkJQlBGX1NUTVQoQlBGX0xEfEJQRl9CfEJQRl9BQlMsIDApLCAgLyogTG9hZCBpY21wIHR5cGUg
Ki8KKwkJQlBGX0pVTVAoQlBGX0pNUHxCUEZfSkVRfEJQRl9LLCBJQ01QVjZfRUNIT19SRVBMWSwg
MSwgMCksIC8qIEVjaG8/ICovCisJCUJQRl9TVE1UKEJQRl9SRVR8QlBGX0ssIH4wVSksIC8qIE5v
LiBJdCBwYXNzZXMuIFRoaXMgbXVzdCBub3QgaGFwcGVuLiAqLworCQlCUEZfU1RNVChCUEZfUkVU
fEJQRl9LLCAwKSwgLyogRWNobyB3aXRoIHdyb25nIGlkZW50LiBSZWplY3QuICovCisJfTsKKwlz
dGF0aWMgc3RydWN0IHNvY2tfZnByb2cgZmlsdGVyID0geworCQlzaXplb2YgaW5zbnMgLyBzaXpl
b2YoaW5zbnNbMF0pLAorCQlpbnNucworCX07CisKKwlpZiAob25jZSkKKwkJcmV0dXJuOworCW9u
Y2UgPSAxOworCisJLyogUGF0Y2ggYnBmbGV0IGZvciBjdXJyZW50IGlkZW50aWZpZXIuICovCisJ
aW5zbnNbMV0gPSAoc3RydWN0IHNvY2tfZmlsdGVyKUJQRl9KVU1QKEJQRl9KTVB8QlBGX0pFUXxC
UEZfSywgX19jb25zdGFudF9odG9ucyhpZGVudCksIDAsIDEpOworCisJaWYgKHNldHNvY2tvcHQo
aWNtcF9zb2NrLCBTT0xfU09DS0VULCBTT19BVFRBQ0hfRklMVEVSLCAmZmlsdGVyLCBzaXplb2Yo
ZmlsdGVyKSkpCisJCXBlcnJvcigiV0FSTklORzogZmFpbGVkIHRvIGluc3RhbGwgc29ja2V0IGZp
bHRlclxuIik7Cit9CisKKworLyoKKyAqIHByX2FkZHIgLS0KKyAqCVJldHVybiBhbiBhc2NpaSBo
b3N0IGFkZHJlc3MgYXMgYSBkb3R0ZWQgcXVhZCBhbmQgb3B0aW9uYWxseSB3aXRoCisgKiBhIGhv
c3RuYW1lLgorICovCitjaGFyICogcHJfYWRkcihzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCit7CisJ
c3RydWN0IGhvc3RlbnQgKmhwID0gTlVMTDsKKworCWlmICghKG9wdGlvbnMmRl9OVU1FUklDKSkK
KwkJaHAgPSBnZXRob3N0YnlhZGRyKChfX3U4KilhZGRyLCBzaXplb2Yoc3RydWN0IGluNl9hZGRy
KSwgQUZfSU5FVDYpOworCisJcmV0dXJuIGhwID8gaHAtPmhfbmFtZSA6IHByX2FkZHJfbihhZGRy
KTsKK30KKworY2hhciAqIHByX2FkZHJfbihzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCit7CisJc3Rh
dGljIGNoYXIgc3RyWzY0XTsKKwlpbmV0X250b3AoQUZfSU5FVDYsIGFkZHIsIHN0ciwgc2l6ZW9m
KHN0cikpOworCXJldHVybiBzdHI7Cit9CisKK3ZvaWQgdXNhZ2Uodm9pZCkKK3sKKwlmcHJpbnRm
KHN0ZGVyciwKKyJVc2FnZTogcGluZzYgWy1MVWRmbnFydlZhQV0gWy1jIGNvdW50XSBbLWkgaW50
ZXJ2YWxdIFstdyBkZWFkbGluZV1cbiIKKyIgICAgICAgICAgICAgWy1wIHBhdHRlcm5dIFstcyBw
YWNrZXRzaXplXSBbLXQgdHRsXSBbLUkgaW50ZXJmYWNlXVxuIgorIiAgICAgICAgICAgICBbLU0g
bXR1IGRpc2NvdmVyeSBoaW50XSBbLVMgc25kYnVmXVxuIgorIiAgICAgICAgICAgICBbLUYgZmxv
dyBsYWJlbF0gWy1RIHRyYWZmaWMgY2xhc3NdIFtob3AxIC4uLl0gZGVzdGluYXRpb25cbiIpOwor
CWV4aXQoMik7Cit9CmRpZmYgLU51ciBpcHV0aWxzLnA4L3RyYWNlcGF0aDYuYyBpcHV0aWxzL3Ry
YWNlcGF0aDYuYwotLS0gaXB1dGlscy5wOC90cmFjZXBhdGg2LmMJMjAwOC0wMS0wNyAxMzoyNDoy
NSArMDMwMAorKysgaXB1dGlscy90cmFjZXBhdGg2LmMJMjAwOC0wMS0wNyAxMzoyOTo1OSArMDMw
MApAQCAtMTEzLDcgKzExMyw3IEBACiAJCWlmIChjbXNnLT5jbXNnX2xldmVsID09IFNPTF9JUFY2
KSB7CiAJCQlpZiAoY21zZy0+Y21zZ190eXBlID09IElQVjZfUkVDVkVSUikgewogCQkJCWUgPSAo
c3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICopQ01TR19EQVRBKGNtc2cpOwotCQkJfSBlbHNlIGlm
IChjbXNnLT5jbXNnX3R5cGUgPT0gSVBWNl9IT1BMSU1JVCkgeworCQkJfSBlbHNlIGlmIChjbXNn
LT5jbXNnX3R5cGUgPT0gSVBWNl8yMjkySE9QTElNSVQpIHsKIAkJCQlyZXRob3BzID0gKihpbnQq
KUNNU0dfREFUQShjbXNnKTsKIAkJCX0KIAkJfSBlbHNlIGlmIChjbXNnLT5jbXNnX2xldmVsID09
IFNPTF9JUCkgewpAQCAtMzU5LDcgKzM1OSw3IEBACiAJCXBlcnJvcigiSVBfUkVDVkVSUiIpOwog
CQlleGl0KDEpOwogCX0KLQlpZiAoc2V0c29ja29wdChmZCwgU09MX0lQVjYsIElQVjZfSE9QTElN
SVQsICZvbiwgc2l6ZW9mKG9uKSkpIHsKKwlpZiAoc2V0c29ja29wdChmZCwgU09MX0lQVjYsIElQ
VjZfMjI5MkhPUExJTUlULCAmb24sIHNpemVvZihvbikpKSB7CiAJCXBlcnJvcigiSVBWNl9IT1BM
SU1JVCIpOwogCQlleGl0KDEpOwogCX0KZGlmZiAtTnVyIGlwdXRpbHMucDgvdHJhY2VwYXRoNi5j
fiBpcHV0aWxzL3RyYWNlcGF0aDYuY34KLS0tIGlwdXRpbHMucDgvdHJhY2VwYXRoNi5jfgkxOTcw
LTAxLTAxIDAzOjAwOjAwICswMzAwCisrKyBpcHV0aWxzL3RyYWNlcGF0aDYuY34JMjAwOC0wMS0w
NyAxMzoyNDoyNSArMDMwMApAQCAtMCwwICsxLDQwNiBAQAorLyoKKyAqIHRyYWNlcGF0aDYuYwor
ICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEF1dGhvcnM6CUFsZXhl
eSBLdXpuZXRzb3YsIDxrdXpuZXRAbXMyLmluci5hYy5ydT4KKyAqLworCisjaW5jbHVkZSA8c3Rk
aW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRl
IDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorCisjaW5jbHVkZSA8bGlu
dXgvaW42Lmg+CisjaW5jbHVkZSA8bGludXgvZXJycXVldWUuaD4KKyNpbmNsdWRlIDxlcnJuby5o
PgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8cmVz
b2x2Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdWlvLmg+CisjaW5j
bHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSAiZml4ZmRzLmgiCisjaW5jbHVkZSAiZHJvcHBy
aXYuaCIKKworaW50IG92ZXJoZWFkID0gNDg7CitpbnQgbXR1ID0gMTI4MDAwOworaW50IGhvcHNf
dG8gPSAtMTsKK2ludCBob3BzX2Zyb20gPSAtMTsKK2ludCBub19yZXNvbHZlID0gMDsKK2ludCBz
aG93X2JvdGggPSAwOworaW50IG1hcHBlZDsKKworc3RydWN0IHByb2JlaGRyCit7CisJX191MzIg
dHRsOworCXN0cnVjdCB0aW1ldmFsIHR2OworfTsKKwordm9pZCBkYXRhX3dhaXQoaW50IGZkKQor
eworCWZkX3NldCBmZHM7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJRkRfWkVSTygmZmRzKTsKKwlG
RF9TRVQoZmQsICZmZHMpOworCXR2LnR2X3NlYyA9IDE7CisJdHYudHZfdXNlYyA9IDA7CisJc2Vs
ZWN0KGZkKzEsICZmZHMsIE5VTEwsIE5VTEwsICZ0dik7Cit9CisKK2ludCByZWN2ZXJyKGludCBm
ZCwgaW50IHR0bCkKK3sKKwlpbnQgcmVzOworCXN0cnVjdCBwcm9iZWhkciByY3ZidWY7CisJY2hh
ciBjYnVmWzUxMl07CisJc3RydWN0IGlvdmVjICBpb3Y7CisJc3RydWN0IG1zZ2hkciBtc2c7CisJ
c3RydWN0IGNtc2doZHIgKmNtc2c7CisJc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICplOworCXN0
cnVjdCB0aW1ldmFsIHR2OworCXN0cnVjdCB0aW1ldmFsICpyZXR0djsKKwlpbnQgcmV0aG9wczsK
KwlpbnQgc25kaG9wczsKKwlpbnQgcHJvZ3Jlc3MgPSAtMTsKKwlpbnQgYnJva2VuX3JvdXRlcjsK
KworcmVzdGFydDoKKwltZW1zZXQoJnJjdmJ1ZiwgLTEsIHNpemVvZihyY3ZidWYpKTsKKwlpb3Yu
aW92X2Jhc2UgPSAmcmN2YnVmOworCWlvdi5pb3ZfbGVuID0gc2l6ZW9mKHJjdmJ1Zik7CisJbXNn
Lm1zZ19uYW1lID0gTlVMTDsKKwltc2cubXNnX25hbWVsZW4gPSAwOworCW1zZy5tc2dfaW92ID0g
JmlvdjsKKwltc2cubXNnX2lvdmxlbiA9IDE7CisJbXNnLm1zZ19mbGFncyA9IDA7CisJbXNnLm1z
Z19jb250cm9sID0gY2J1ZjsKKwltc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY2J1Zik7CisK
KwlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKKwlyZXMgPSByZWN2bXNnKGZkLCAmbXNnLCBNU0df
RVJSUVVFVUUpOworCWlmIChyZXMgPCAwKSB7CisJCWlmIChlcnJubyA9PSBFQUdBSU4pCisJCQly
ZXR1cm4gcHJvZ3Jlc3M7CisJCWdvdG8gcmVzdGFydDsKKwl9CisKKwlwcm9ncmVzcyA9IDI7CisK
KwlyZXRob3BzID0gLTE7CisJc25kaG9wcyA9IC0xOworCWUgPSBOVUxMOworCXJldHR2ID0gTlVM
TDsKKwlicm9rZW5fcm91dGVyID0gMDsKKwlpZiAocmVzID09IHNpemVvZihyY3ZidWYpKSB7CisJ
CWlmIChyY3ZidWYudHRsID09IDAgfHwgcmN2YnVmLnR2LnR2X3NlYyA9PSAwKQorCQkJYnJva2Vu
X3JvdXRlciA9IDE7CisKKwkJc25kaG9wcyA9IHJjdmJ1Zi50dGw7CisJCXJldHR2ID0gJnJjdmJ1
Zi50djsKKwkJaWYgKHNuZGhvcHMgIT0gdHRsKQorCQkJcHJvZ3Jlc3MgPSAtMTsKKwl9CisJaWYg
KHNuZGhvcHM+MCkKKwkJcHJpbnRmKCIlMmQ6ICAiLCBzbmRob3BzKTsKKwllbHNlCisJCXByaW50
ZigiJTJkPzogIiwgdHRsKTsKKworCWZvciAoY21zZyA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGNt
c2c7IGNtc2cgPSBDTVNHX05YVEhEUigmbXNnLCBjbXNnKSkgeworCQlpZiAoY21zZy0+Y21zZ19s
ZXZlbCA9PSBTT0xfSVBWNikgeworCQkJaWYgKGNtc2ctPmNtc2dfdHlwZSA9PSBJUFY2X1JFQ1ZF
UlIpIHsKKwkJCQllID0gKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqKUNNU0dfREFUQShjbXNn
KTsKKwkJCX0gZWxzZSBpZiAoY21zZy0+Y21zZ190eXBlID09IElQVjZfSE9QTElNSVQpIHsKKwkJ
CQlyZXRob3BzID0gKihpbnQqKUNNU0dfREFUQShjbXNnKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChj
bXNnLT5jbXNnX2xldmVsID09IFNPTF9JUCkgeworCQkJaWYgKGNtc2ctPmNtc2dfdHlwZSA9PSBJ
UF9UVEwpIHsKKwkJCQlyZXRob3BzID0gKihfX3U4KilDTVNHX0RBVEEoY21zZyk7CisJCQl9CisJ
CX0KKwl9CisJaWYgKGUgPT0gTlVMTCkgeworCQlwcmludGYoIm5vIGluZm9cbiIpOworCQlyZXR1
cm4gMDsKKwl9CisJaWYgKGUtPmVlX29yaWdpbiA9PSBTT19FRV9PUklHSU5fTE9DQUwpCisJCXBy
aW50ZigiJS0zMnMgIiwgIltMT0NBTEhPU1RdIik7CisJZWxzZSBpZiAoZS0+ZWVfb3JpZ2luID09
IFNPX0VFX09SSUdJTl9JQ01QNiB8fAorCQkgZS0+ZWVfb3JpZ2luID09IFNPX0VFX09SSUdJTl9J
Q01QKSB7CisJCXN0cnVjdCBob3N0ZW50ICogaCA9IE5VTEw7CisJCWNoYXIgYWJ1ZlsxMjhdOwor
CQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYqKShlKzEp
OworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4qKShlKzEp
OworCisJCWlmICghbm9fcmVzb2x2ZSkKKwkJCWZmbHVzaChzdGRvdXQpOworCisJCWlmIChzaW4t
PnNpbl9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCWluZXRfbnRvcChBRl9JTkVUNiwgJnNpbjYt
PnNpbjZfYWRkciwgYWJ1Ziwgc2l6ZW9mKGFidWYpKTsKKwkJCWlmICghbm9fcmVzb2x2ZSkKKwkJ
CQloID0gZ2V0aG9zdGJ5YWRkcigoY2hhciAqKSAmc2luNi0+c2luNl9hZGRyLCBzaXplb2Yoc2lu
Ni0+c2luNl9hZGRyKSwgQUZfSU5FVDYpOworCQl9IGVsc2UgeworCQkJaW5ldF9udG9wKEFGX0lO
RVQsICZzaW4tPnNpbl9hZGRyLCBhYnVmLCBzaXplb2YoYWJ1ZikpOworCQkJaWYgKCFub19yZXNv
bHZlKQorCQkJCWggPSBnZXRob3N0YnlhZGRyKChjaGFyICopICZzaW4tPnNpbl9hZGRyLCBzaXpl
b2Yoc2luLT5zaW5fYWRkciksIEFGX0lORVQpOworCQl9CisJCWlmICghbm9fcmVzb2x2ZSkgewor
CQkJY2hhciBmYWJ1ZlsyNTZdOworCQkJaWYgKHNob3dfYm90aCkgeworCQkJCWlmIChoKQorCQkJ
CQlzbnByaW50ZihmYWJ1Ziwgc2l6ZW9mKGZhYnVmKSwgIiVzICVzIiwgaC0+aF9uYW1lLCBhYnVm
KTsKKwkJCQllbHNlCisJCQkJCXNucHJpbnRmKGZhYnVmLCBzaXplb2YoZmFidWYpLCAiJXMiLCBh
YnVmKTsKKwkJCX0gZWxzZSB7CisJCQkJc25wcmludGYoZmFidWYsIHNpemVvZihmYWJ1ZiksICIl
cyIsIGggPyBoLT5oX25hbWUgOiBhYnVmKTsKKwkJCX0KKwkJCXByaW50ZigiJS00MHMgIiwgZmFi
dWYpOworCQl9IGVsc2UgeworCQkJcHJpbnRmKCIlLTMycyAiLCBhYnVmKTsKKwkJfQorCX0KKwor
CWlmIChyZXRob3BzPj0wKSB7CisJCWlmIChyZXRob3BzPD02NCkKKwkJCXJldGhvcHMgPSA2NS1y
ZXRob3BzOworCQllbHNlIGlmIChyZXRob3BzPD0xMjgpCisJCQlyZXRob3BzID0gMTI5LXJldGhv
cHM7CisJCWVsc2UKKwkJCXJldGhvcHMgPSAyNTYtcmV0aG9wczsKKwkJaWYgKHNuZGhvcHM+PTAg
JiYgcmV0aG9wcyAhPSBzbmRob3BzKQorCQkJcHJpbnRmKCJhc3ltbSAlMmQgIiwgcmV0aG9wcyk7
CisJCWVsc2UgaWYgKHNuZGhvcHM8MCAmJiByZXRob3BzICE9IHR0bCkKKwkJCXByaW50ZigiYXN5
bW0gJTJkICIsIHJldGhvcHMpOworCX0KKworCWlmIChyZXR0dikgeworCQlpbnQgZGlmZiA9ICh0
di50dl9zZWMtcmV0dHYtPnR2X3NlYykqMTAwMDAwMCsodHYudHZfdXNlYy1yZXR0di0+dHZfdXNl
Yyk7CisJCXByaW50ZigiJTNkLiUzZG1zICIsIGRpZmYvMTAwMCwgZGlmZiUxMDAwKTsKKwkJaWYg
KGJyb2tlbl9yb3V0ZXIpCisJCQlwcmludGYoIihUaGlzIGJyb2tlbiByb3V0ZXIgcmV0dXJuZWQg
Y29ycnVwdGVkIHBheWxvYWQpICIpOworCX0KKworCXN3aXRjaCAoZS0+ZWVfZXJybm8pIHsKKwlj
YXNlIEVUSU1FRE9VVDoKKwkJcHJpbnRmKCJcbiIpOworCQlicmVhazsKKwljYXNlIEVNU0dTSVpF
OgorCQlwcmludGYoInBtdHUgJWRcbiIsIGUtPmVlX2luZm8pOworCQltdHUgPSBlLT5lZV9pbmZv
OworCQlwcm9ncmVzcyA9IDE7CisJCWJyZWFrOworCWNhc2UgRUNPTk5SRUZVU0VEOgorCQlwcmlu
dGYoInJlYWNoZWRcbiIpOworCQlob3BzX3RvID0gc25kaG9wczwwID8gdHRsIDogc25kaG9wczsK
KwkJaG9wc19mcm9tID0gcmV0aG9wczsKKwkJcmV0dXJuIDA7CisJY2FzZSBFUFJPVE86CisJCXBy
aW50ZigiIVBcbiIpOworCQlyZXR1cm4gMDsKKwljYXNlIEVIT1NUVU5SRUFDSDoKKwkJaWYgKChl
LT5lZV9vcmlnaW4gPT0gU09fRUVfT1JJR0lOX0lDTVAgJiYKKwkJICAgICBlLT5lZV90eXBlID09
IDExICYmCisJCSAgICAgZS0+ZWVfY29kZSA9PSAwKSB8fAorCQkgICAgKGUtPmVlX29yaWdpbiA9
PSBTT19FRV9PUklHSU5fSUNNUDYgJiYKKwkJICAgICBlLT5lZV90eXBlID09IDMgJiYKKwkJICAg
ICBlLT5lZV9jb2RlID09IDApKSB7CisJCQlwcmludGYoIlxuIik7CisJCQlicmVhazsKKwkJfQor
CQlwcmludGYoIiFIXG4iKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBFTkVUVU5SRUFDSDoKKwkJcHJp
bnRmKCIhTlxuIik7CisJCXJldHVybiAwOworCWNhc2UgRUFDQ0VTOgorCQlwcmludGYoIiFBXG4i
KTsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcHJpbnRmKCJcbiIpOworCQllcnJubyA9IGUt
PmVlX2Vycm5vOworCQlwZXJyb3IoIk5FVCBFUlJPUiIpOworCQlyZXR1cm4gMDsKKwl9CisJZ290
byByZXN0YXJ0OworfQorCitpbnQgcHJvYmVfdHRsKGludCBmZCwgaW50IHR0bCkKK3sKKwlpbnQg
aTsKKwljaGFyIHNuZGJ1ZlttdHVdOworCXN0cnVjdCBwcm9iZWhkciAqaGRyID0gKHN0cnVjdCBw
cm9iZWhkciopc25kYnVmOworCityZXN0YXJ0OgorCisJZm9yIChpPTA7IGk8MTA7IGkrKykgewor
CQlpbnQgcmVzOworCisJCWhkci0+dHRsID0gdHRsOworCQlnZXR0aW1lb2ZkYXkoJmhkci0+dHYs
IE5VTEwpOworCQlpZiAoc2VuZChmZCwgc25kYnVmLCBtdHUtb3ZlcmhlYWQsIDApID4gMCkKKwkJ
CWJyZWFrOworCQlyZXMgPSByZWN2ZXJyKGZkLCB0dGwpOworCQlpZiAocmVzPT0wKQorCQkJcmV0
dXJuIDA7CisJCWlmIChyZXMgPiAwKQorCQkJZ290byByZXN0YXJ0OworCX0KKworCWlmIChpPDEw
KSB7CisJCWludCByZXM7CisKKwkJZGF0YV93YWl0KGZkKTsKKwkJaWYgKHJlY3YoZmQsIHNuZGJ1
Ziwgc2l6ZW9mKHNuZGJ1ZiksIE1TR19ET05UV0FJVCkgPiAwKSB7CisJCQlwcmludGYoIiUyZD86
IHJlcGx5IHJlY2VpdmVkIDgpXG4iLCB0dGwpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmVzID0g
cmVjdmVycihmZCwgdHRsKTsKKwkJaWYgKHJlcyA9PSAxKQorCQkJZ290byByZXN0YXJ0OworCQly
ZXR1cm4gcmVzOworCX0KKworCXByaW50ZigiJTJkOiAgc2VuZCBmYWlsZWRcbiIsIHR0bCk7CisJ
cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpIF9fYXR0cmlidXRlKChub3Jl
dHVybikpOworCitzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQoreworCWZwcmludGYoc3RkZXJyLCAi
VXNhZ2U6IHRyYWNlcGF0aDYgWy1uXSBbLWJdIDxkZXN0aW5hdGlvbj5bLzxwb3J0Pl1cbiIpOwor
CWV4aXQoLTEpOworfQorCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlp
bnQgZmQ7CisJaW50IG9uOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luOworCWludCB0dGw7CisJ
Y2hhciAqcDsKKwlzdHJ1Y3QgaG9zdGVudCAqaGU7CisJaW50IGNoOworCisJZml4X2ZkcygpOwor
CWRyb3BfcHJpdigpOworCisJd2hpbGUgKChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCAibmJoPyIp
KSAhPSBFT0YpIHsKKwkJc3dpdGNoKGNoKSB7CisJCWNhc2UgJ24nOgkKKwkJCW5vX3Jlc29sdmUg
PSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ2InOgkKKwkJCXNob3dfYm90aCA9IDE7CisJCQlicmVh
azsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKCk7CisJCX0KKwl9CisKKwlhcmdjIC09IG9wdGluZDsK
Kwlhcmd2ICs9IG9wdGluZDsKKworCWlmIChhcmdjICE9IDEpCisJCXVzYWdlKCk7CisKKworCWZk
ID0gc29ja2V0KEFGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKKwlpZiAoZmQgPCAwKSB7CisJCXBl
cnJvcigic29ja2V0Iik7CisJCWV4aXQoMSk7CisJfQorCXNpbi5zaW42X2ZhbWlseSA9IEFGX0lO
RVQ2OworCisJcCA9IHN0cmNocihhcmd2WzBdLCAnLycpOworCWlmIChwKSB7CisJCSpwID0gMDsK
KwkJc2luLnNpbjZfcG9ydCA9IGh0b25zKGF0b2kocCsxKSk7CisJfSBlbHNlCisJCXNpbi5zaW42
X3BvcnQgPSBodG9ucygweDgwMDAgfCBnZXRwaWQoKSk7CisJaGUgPSBnZXRob3N0YnluYW1lMihh
cmd2WzBdLCBBRl9JTkVUNik7CisJaWYgKGhlID09IE5VTEwpIHsKKwkJaGVycm9yKCJnZXRob3N0
YnluYW1lMiIpOworCQlleGl0KDEpOworCX0KKwltZW1jcHkoJnNpbi5zaW42X2FkZHIsIGhlLT5o
X2FkZHIsIDE2KTsKKworCWlmIChjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyKikmc2luLCBz
aXplb2Yoc2luKSkgPCAwKSB7CisJCXBlcnJvcigiY29ubmVjdCIpOworCQlleGl0KDEpOworCX0K
KworCWlmICghc2luLnNpbjZfYWRkci5zNl9hZGRyMzJbMF0gJiYgIXNpbi5zaW42X2FkZHIuczZf
YWRkcjMyWzFdCisJICAgICYmIHNpbi5zaW42X2FkZHIuczZfYWRkcjMyWzJdID09IGh0b25sKDB4
RkZGRikpIHsKKwkJbXR1ID0gNjU1MzU7CisJCW92ZXJoZWFkID0gMjg7CisJCW1hcHBlZCA9IDE7
CisJfQorCisJb24gPSBJUFY2X1BNVFVESVNDX0RPOworCWlmIChzZXRzb2Nrb3B0KGZkLCBTT0xf
SVBWNiwgSVBWNl9NVFVfRElTQ09WRVIsICZvbiwgc2l6ZW9mKG9uKSkpIHsKKwkJcGVycm9yKCJJ
UFY2X01UVV9ESVNDT1ZFUiIpOworCQlleGl0KDEpOworCX0KKwlpZiAobWFwcGVkICYmIHNldHNv
Y2tvcHQoZmQsIFNPTF9JUCwgSVBfTVRVX0RJU0NPVkVSLCAmb24sIHNpemVvZihvbikpKSB7CisJ
CXBlcnJvcigiSVBfTVRVX0RJU0NPVkVSIik7CisJCWV4aXQoMSk7CisJfQorCW9uID0gMTsKKwlp
ZiAoc2V0c29ja29wdChmZCwgU09MX0lQVjYsIElQVjZfUkVDVkVSUiwgJm9uLCBzaXplb2Yob24p
KSkgeworCQlwZXJyb3IoIklQVjZfUkVDVkVSUiIpOworCQlleGl0KDEpOworCX0KKwlpZiAobWFw
cGVkICYmIHNldHNvY2tvcHQoZmQsIFNPTF9JUCwgSVBfUkVDVkVSUiwgJm9uLCBzaXplb2Yob24p
KSkgeworCQlwZXJyb3IoIklQX1JFQ1ZFUlIiKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKHNldHNv
Y2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X0hPUExJTUlULCAmb24sIHNpemVvZihvbikpKSB7CisJ
CXBlcnJvcigiSVBWNl9IT1BMSU1JVCIpOworCQlleGl0KDEpOworCX0KKwlpZiAobWFwcGVkICYm
IHNldHNvY2tvcHQoZmQsIFNPTF9JUCwgSVBfUkVDVlRUTCwgJm9uLCBzaXplb2Yob24pKSkgewor
CQlwZXJyb3IoIklQX1JFQ1ZUVEwiKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlmb3IgKHR0bD0xOyB0
dGw8MzI7IHR0bCsrKSB7CisJCWludCByZXMgPSAwOworCQlpbnQgaTsKKworCQlvbiA9IHR0bDsK
KwkJaWYgKHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X1VOSUNBU1RfSE9QUywgJm9uLCBz
aXplb2Yob24pKSkgeworCQkJcGVycm9yKCJJUFY2X1VOSUNBU1RfSE9QUyIpOworCQkJZXhpdCgx
KTsKKwkJfQorCQlpZiAobWFwcGVkICYmIHNldHNvY2tvcHQoZmQsIFNPTF9JUCwgSVBfVFRMLCAm
b24sIHNpemVvZihvbikpKSB7CisJCQlwZXJyb3IoIklQX1RUTCIpOworCQkJZXhpdCgxKTsKKwkJ
fQorCisJCWZvciAoaT0wOyBpPDM7IGkrKykgeworCQkJcmVzID0gcHJvYmVfdHRsKGZkLCB0dGwp
OworCQkJaWYgKHJlcyA9PSAwKQorCQkJCWdvdG8gZG9uZTsKKwkJCWlmIChyZXMgPiAwKQorCQkJ
CWJyZWFrOworCQl9CisKKwkJaWYgKHJlcyA8IDApCisJCQlwcmludGYoIiUyZDogIG5vIHJlcGx5
XG4iLCB0dGwpOworCX0KKwlwcmludGYoIiAgICAgVG9vIG1hbnkgaG9wczogcG10dSAlZFxuIiwg
bXR1KTsKKworZG9uZToKKwlwcmludGYoIiAgICAgUmVzdW1lOiBwbXR1ICVkICIsIG10dSk7CisJ
aWYgKGhvcHNfdG8+PTApCisJCXByaW50ZigiaG9wcyAlZCAiLCBob3BzX3RvKTsKKwlpZiAoaG9w
c19mcm9tPj0wKQorCQlwcmludGYoImJhY2sgJWQgIiwgaG9wc19mcm9tKTsKKwlwcmludGYoIlxu
Iik7CisJZXhpdCgwKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2359</attachid>
            <date>2008-01-07 13:54:49 +0300</date>
            <delta_ts>2008-01-07 13:54:49 +0300</delta_ts>
            <desc>fixing patch</desc>
            <filename>iputils-20020927-alt-hoplimit.patch</filename>
            <type>text/plain</type>
            <size>1421</size>
            <attacher name="Denis Ovsienko">pilot</attacher>
            
              <data encoding="base64">ZGlmZiAtTnVyIGlwdXRpbHMucDgvcGluZzYuYyBpcHV0aWxzL3Bpbmc2LmMKLS0tIGlwdXRpbHMu
cDgvcGluZzYuYwkyMDA4LTAxLTA3IDEzOjI0OjI1ICswMzAwCisrKyBpcHV0aWxzL3Bpbmc2LmMJ
MjAwOC0wMS0wNyAxMzoyODo0NyArMDMwMApAQCAtNDg2LDcgKzQ4Niw3IEBACiAKIAlpZiAoMSkg
ewogCQlpbnQgb24gPSAxOwotCQlpZiAoc2V0c29ja29wdChpY21wX3NvY2ssIElQUFJPVE9fSVBW
NiwgSVBWNl9IT1BMSU1JVCwKKwkJaWYgKHNldHNvY2tvcHQoaWNtcF9zb2NrLCBJUFBST1RPX0lQ
VjYsIElQVjZfMjI5MkhPUExJTUlULAogCQkJICAgICAgICZvbiwgc2l6ZW9mKG9uKSkgPT0gLTEp
IHsKIAkJCXBlcnJvciAoImNhbid0IHJlY2VpdmUgaG9wIGxpbWl0Iik7CiAJCQlleGl0KDIpOwpA
QCAtNzA0LDcgKzcwNCw3IEBACiAKIAlmb3IgKGMgPSBDTVNHX0ZJUlNUSERSKG1zZyk7IGM7IGMg
PSBDTVNHX05YVEhEUihtc2csIGMpKSB7CiAJCWlmIChjLT5jbXNnX2xldmVsICE9IFNPTF9JUFY2
IHx8Ci0JCSAgICBjLT5jbXNnX3R5cGUgIT0gSVBWNl9IT1BMSU1JVCkKKwkJICAgIGMtPmNtc2df
dHlwZSAhPSBJUFY2XzIyOTJIT1BMSU1JVCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoYy0+Y21zZ19s
ZW4gPCBDTVNHX0xFTihzaXplb2YoaW50KSkpCiAJCQljb250aW51ZTsKZGlmZiAtTnVyIGlwdXRp
bHMucDgvdHJhY2VwYXRoNi5jIGlwdXRpbHMvdHJhY2VwYXRoNi5jCi0tLSBpcHV0aWxzLnA4L3Ry
YWNlcGF0aDYuYwkyMDA4LTAxLTA3IDEzOjI0OjI1ICswMzAwCisrKyBpcHV0aWxzL3RyYWNlcGF0
aDYuYwkyMDA4LTAxLTA3IDEzOjI5OjU5ICswMzAwCkBAIC0xMTMsNyArMTEzLDcgQEAKIAkJaWYg
KGNtc2ctPmNtc2dfbGV2ZWwgPT0gU09MX0lQVjYpIHsKIAkJCWlmIChjbXNnLT5jbXNnX3R5cGUg
PT0gSVBWNl9SRUNWRVJSKSB7CiAJCQkJZSA9IChzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKilD
TVNHX0RBVEEoY21zZyk7Ci0JCQl9IGVsc2UgaWYgKGNtc2ctPmNtc2dfdHlwZSA9PSBJUFY2X0hP
UExJTUlUKSB7CisJCQl9IGVsc2UgaWYgKGNtc2ctPmNtc2dfdHlwZSA9PSBJUFY2XzIyOTJIT1BM
SU1JVCkgewogCQkJCXJldGhvcHMgPSAqKGludCopQ01TR19EQVRBKGNtc2cpOwogCQkJfQogCQl9
IGVsc2UgaWYgKGNtc2ctPmNtc2dfbGV2ZWwgPT0gU09MX0lQKSB7CkBAIC0zNTksNyArMzU5LDcg
QEAKIAkJcGVycm9yKCJJUF9SRUNWRVJSIik7CiAJCWV4aXQoMSk7CiAJfQotCWlmIChzZXRzb2Nr
b3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9IT1BMSU1JVCwgJm9uLCBzaXplb2Yob24pKSkgeworCWlm
IChzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl8yMjkySE9QTElNSVQsICZvbiwgc2l6ZW9m
KG9uKSkpIHsKIAkJcGVycm9yKCJJUFY2X0hPUExJTUlUIik7CiAJCWV4aXQoMSk7CiAJfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>