Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 7 Oct 2013 16:01:58 +0900
From:      Takuya ASADA <syuu@dokukino.com>
To:        "freebsd-net@freebsd.org" <freebsd-net@freebsd.org>
Subject:   Re: Adding Flow Director sysctls to ixgbe(4) (was: netmap: traffic distribution)
Message-ID:  <CALG4x-WWqrf2Laen=zmUuiO1OCv1O2UHqV8NugnXN3BEkex%2B7g@mail.gmail.com>
In-Reply-To: <CALG4x-Xf27oEOA9K5j%2BRRndFe1VbDowpTti8a8qwu1mRaB4BkQ@mail.gmail.com>
References:  <CALCpEUHcpoJoo_gqjyDzosE1bJ_J=o3uqUuyYJA8dWZdjMrNTA@mail.gmail.com> <CAJ-VmompkSY-tU2SysaEf6p1uJPmcMeXKJ6_EZ_DJiYTQXbUzw@mail.gmail.com> <CALG4x-XowXNze82jvFX84X0=d7MRucpJbUeExug9y7XsaZXkSw@mail.gmail.com> <CALCpEUHoVJgmYptMp6Q%2BY%2BDgbxgujN8e7TcANUi1De_fnkOZ_w@mail.gmail.com> <CALG4x-Xf27oEOA9K5j%2BRRndFe1VbDowpTti8a8qwu1mRaB4BkQ@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--047d7bd90edecde4f304e8213c67
Content-Type: text/plain; charset=UTF-8

Hi,

This is updated version of "ixgbetool" patch.
Here's improved feature list:
- signature filter list feature available
- user-defined filter can be use with an ATR.
To enable it, add "hw.ixgbe.cooperative_atr=1" on /boot/loader.conf

Usage is as follows:
ixgbetool <ifname> [operation]
    add_sig_filter <proto> <src_ip> <src_port> <dst_ip> <dst_port>
<que_index>
    show_sig_filter
    del_sig_filter <id>


2013/9/30 Takuya ASADA <syuu@dokukino.com>

> Hi,
>
> I just implemented device specific ioctl with device specific
> configuration tool.
> It still doesn't support some important features such as:
>  - FDIR enable / disable via sysctl or tunable params
>  - ATR enable / disable via sysctl or tunable params
>  - IPv6 support on signature filter
>  - signature filter list
>  - support perfect filter
> But, at least it can configure signature filter manually.
>
> Usage is as follows:
> Usage: ixgbetool <ifname> [operation]
> add_sig_filter <proto> <src_ip> <src_port> <dst_ip> <dst_port> <que_index>
>  del_sig_filter <proto> <src_ip> <src_port> <dst_ip> <dst_port>
>
>
> 2013/9/28 hiren panchasara <hiren.panchasara@gmail.com>
>
>>
>>
>>
>> On Fri, Sep 27, 2013 at 1:58 AM, Takuya ASADA <syuu@dokukino.com> wrote:
>>
>>> 2013/9/27 Adrian Chadd <adrian@freebsd.org>
>>>
>>>> On 27 September 2013 00:43, hiren panchasara <
>>>> hiren.panchasara@gmail.com> wrote:
>>>>
>>>>
>>>>> Takuya,
>>>>>
>>>>> I see a lot of responses/comments on proposed changes. Was anything
>>>>> decided
>>>>> at the end of it? As far as I can tell, its still not committed to the
>>>>> tree.
>>>>>
>>>>
>>>> I'd rather see an ioctl API for that chipset and then have a separate
>>>> tool program it for now.
>>>>
>>>
>>> Ah, like cxgbetool and cxgbe? (it has device specific tool and ioctls)
>>> http://svnweb.freebsd.org/base/head/tools/tools/cxgbetool/
>>>
>>
>> Something like this for ixgbe would be nice to start with, imo.
>>
>> Cheers,
>> Hiren
>>
>>> http://svnweb.freebsd.org/base/head/sys/dev/cxgb/
>>>
>>>
>>>> So, how bout we hack that up? :)
>>>>
>>>
>>>  Sound's interesting ;-)
>>> Could you tell me more detail about your idea?
>>>
>>>
>>
>

--047d7bd90edecde4f304e8213c67
Content-Type: application/octet-stream; name="ixgbetool-v004.diff"
Content-Disposition: attachment; filename="ixgbetool-v004.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hmhcjir91

ZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVzIGIvc3lzL2NvbmYvZmlsZXMKaW5kZXggYTM3MGNm
YS4uOWU1YWRhNyAxMDA2NDQKLS0tIGEvc3lzL2NvbmYvZmlsZXMKKysrIGIvc3lzL2NvbmYvZmls
ZXMKQEAgLTE3MzQsNiArMTczNCw4IEBAIGRldi9peGdiZS9peGdiZV9kY2JfODI1OTguYwlvcHRp
b25hbCBpeGdiZSBpbmV0IFwKIAljb21waWxlLXdpdGggIiR7Tk9STUFMX0N9IC1JJFMvZGV2L2l4
Z2JlIgogZGV2L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5jCW9wdGlvbmFsIGl4Z2JlIGluZXQgXAog
CWNvbXBpbGUtd2l0aCAiJHtOT1JNQUxfQ30gLUkkUy9kZXYvaXhnYmUiCitkZXYvaXhnYmUvaXhn
YmVfdWZpbHRlci5jCW9wdGlvbmFsIGl4Z2JlIGluZXQgXAorCWNvbXBpbGUtd2l0aCAiJHtOT1JN
QUxfQ30gLUkkUy9kZXYvaXhnYmUgLURTTVAgLURJWEdCRV9GRElSIgogZGV2L2ptZS9pZl9qbWUu
YwkJb3B0aW9uYWwgam1lIHBjaQogZGV2L2pveS9qb3kuYwkJCW9wdGlvbmFsIGpveQogZGV2L2pv
eS9qb3lfaXNhLmMJCW9wdGlvbmFsIGpveSBpc2EKZGlmZiAtLWdpdCBhL3N5cy9kZXYvaXhnYmUv
aXhnYmUuYyBiL3N5cy9kZXYvaXhnYmUvaXhnYmUuYwppbmRleCBiNjVkZjcyLi40MGQ5NDhiIDEw
MDY0NAotLS0gYS9zeXMvZGV2L2l4Z2JlL2l4Z2JlLmMKKysrIGIvc3lzL2Rldi9peGdiZS9peGdi
ZS5jCkBAIC0zMjYsNyArMzI2LDggQEAgc3RhdGljIGludCBpeGdiZV90b3RhbF9wb3J0czsKICoq
IFRoaXMgZmVhdHVyZSBjYW4gYmUgZGlzYWJsZWQgYnkgCiAqKiBzZXR0aW5nIHRoaXMgdG8gMC4K
ICovCi1zdGF0aWMgaW50IGF0cl9zYW1wbGVfcmF0ZSA9IDIwOworaW50IGl4Z2JlX2F0cl9zYW1w
bGVfcmF0ZSA9IDIwOworVFVOQUJMRV9JTlQoImh3Lml4Z2JlLmF0cl9zYW1wbGVfcmF0ZSIsICZp
eGdiZV9hdHJfc2FtcGxlX3JhdGUpOwogLyogCiAqKiBGbG93IERpcmVjdG9yIGFjdHVhbGx5ICdz
dGVhbHMnCiAqKiBwYXJ0IG9mIHRoZSBwYWNrZXQgYnVmZmVyIGFzIGl0cwpAQCAtNDQyLDYgKzQ0
MywxMyBAQCBpeGdiZV9hdHRhY2goZGV2aWNlX3QgZGV2KQogCQkJT0lEX0FVVE8sICJlbmFibGVf
YWltIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKIAkJCSZpeGdiZV9lbmFibGVfYWltLCAxLCAi
SW50ZXJydXB0IE1vZGVyYXRpb24iKTsKIAorI2lmZGVmIElYR0JFX0ZESVIKKyAgICAgICAgU1lT
Q1RMX0FERF9JTlQoZGV2aWNlX2dldF9zeXNjdGxfY3R4KGRldiksCisJCQlTWVNDVExfQ0hJTERS
RU4oZGV2aWNlX2dldF9zeXNjdGxfdHJlZShkZXYpKSwKKwkJCU9JRF9BVVRPLCAiYXRyX3NhbXBs
ZV9yYXRlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SRCwKKwkJCSZpeGdiZV9hdHJfc2FtcGxlX3Jh
dGUsIDIwLCAiQVRSIHNhbXBsZSByYXRlIik7CisjZW5kaWYKKwogCS8qCiAJKiogQWxsb3cgYSBr
aW5kIG9mIHNwZWVkIGNvbnRyb2wgYnkgZm9yY2luZyB0aGUgYXV0b25lZwogCSoqIGFkdmVydGlz
ZWQgc3BlZWQgbGlzdCB0byBvbmx5IGEgY2VydGFpbiB2YWx1ZSwgdGhpcwpAQCAtNjA0LDYgKzYx
MiwxMyBAQCBpeGdiZV9hdHRhY2goZGV2aWNlX3QgZGV2KQogI2lmZGVmIERFVl9ORVRNQVAKIAlp
eGdiZV9uZXRtYXBfYXR0YWNoKGFkYXB0ZXIpOwogI2VuZGlmIC8qIERFVl9ORVRNQVAgKi8KKwor
I2lmZGVmIElYR0JFX0ZESVIKKwllcnJvciA9IGl4Z2JlX3VmaWx0ZXJfYXR0YWNoKGFkYXB0ZXIp
OworCWlmIChlcnJvcikKKwkJZ290byBlcnJfbGF0ZTsKKyNlbmRpZgorCiAJSU5JVF9ERUJVR09V
VCgiaXhnYmVfYXR0YWNoOiBlbmQiKTsKIAlyZXR1cm4gKDApOwogZXJyX2xhdGU6CkBAIC02OTMs
NiArNzA4LDEwIEBAIGl4Z2JlX2RldGFjaChkZXZpY2VfdCBkZXYpCiAJaXhnYmVfZnJlZV9yZWNl
aXZlX3N0cnVjdHVyZXMoYWRhcHRlcik7CiAJZnJlZShhZGFwdGVyLT5tdGEsIE1fREVWQlVGKTsK
IAorI2lmZGVmIElYR0JFX0ZESVIKKwlpeGdiZV91ZmlsdGVyX2RldGFjaChhZGFwdGVyKTsKKyNl
bmRpZgorCiAJSVhHQkVfQ09SRV9MT0NLX0RFU1RST1koYWRhcHRlcik7CiAJcmV0dXJuICgwKTsK
IH0KQEAgLTE4MTYsNyArMTgzNSw3IEBAIHJldHJ5OgogCS8qIERvIHRoZSBmbG93IGRpcmVjdG9y
IG1hZ2ljICovCiAJaWYgKCh0eHItPmF0cl9zYW1wbGUpICYmICghYWRhcHRlci0+ZmRpcl9yZWlu
aXQpKSB7CiAJCSsrdHhyLT5hdHJfY291bnQ7Ci0JCWlmICh0eHItPmF0cl9jb3VudCA+PSBhdHJf
c2FtcGxlX3JhdGUpIHsKKwkJaWYgKHR4ci0+YXRyX2NvdW50ID49IGl4Z2JlX2F0cl9zYW1wbGVf
cmF0ZSkgewogCQkJaXhnYmVfYXRyKHR4ciwgbV9oZWFkKTsKIAkJCXR4ci0+YXRyX2NvdW50ID0g
MDsKIAkJfQpAQCAtMzA2Miw3ICszMDgxLDcgQEAgaXhnYmVfc2V0dXBfdHJhbnNtaXRfcmluZyhz
dHJ1Y3QgdHhfcmluZyAqdHhyKQogI2lmZGVmIElYR0JFX0ZESVIKIAkvKiBTZXQgdGhlIHJhdGUg
YXQgd2hpY2ggd2Ugc2FtcGxlIHBhY2tldHMgKi8KIAlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUg
IT0gaXhnYmVfbWFjXzgyNTk4RUIpCi0JCXR4ci0+YXRyX3NhbXBsZSA9IGF0cl9zYW1wbGVfcmF0
ZTsKKwkJdHhyLT5hdHJfc2FtcGxlID0gaXhnYmVfYXRyX3NhbXBsZV9yYXRlOwogI2VuZGlmCiAK
IAkvKiBTZXQgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIGF2YWlsYWJsZSAqLwpAQCAtMzU0Niw2ICsz
NTY1LDEzIEBAIGl4Z2JlX2F0cihzdHJ1Y3QgdHhfcmluZyAqdHhyLCBzdHJ1Y3QgbWJ1ZiAqbXAp
CiAJY29tbW9uLmlwIF49IGlwLT5pcF9zcmMuc19hZGRyIF4gaXAtPmlwX2RzdC5zX2FkZHI7CiAK
IAlxdWUgPSAmYWRhcHRlci0+cXVldWVzW3R4ci0+bWVdOworCisJaWYgKGl4Z2JlX2Nvb3BlcmF0
aXZlX2F0cikgeworCQl1MzIgaGFzaDsKKwkJaGFzaCA9IGl4Z2JlX2F0cl9jb21wdXRlX3NpZ19o
YXNoXzgyNTk5KGlucHV0LCBjb21tb24pOworCQlpZiAoaXhnYmVfdWZpbHRlcl9leGlzdHMoYWRh
cHRlciwgaGFzaCkpCisJCQlyZXR1cm47CisJfQogCS8qCiAJKiogVGhpcyBhc3N1bWVzIHRoZSBS
eCBxdWV1ZSBhbmQgVHgKIAkqKiBxdWV1ZSBhcmUgYm91bmQgdG8gdGhlIHNhbWUgQ1BVCmRpZmYg
LS1naXQgYS9zeXMvZGV2L2l4Z2JlL2l4Z2JlLmggYi9zeXMvZGV2L2l4Z2JlL2l4Z2JlLmgKaW5k
ZXggNzdiNzJlZC4uMGJhMDUyMyAxMDA2NDQKLS0tIGEvc3lzL2Rldi9peGdiZS9peGdiZS5oCisr
KyBiL3N5cy9kZXYvaXhnYmUvaXhnYmUuaApAQCAtOTAsNiArOTAsNyBAQAogI2luY2x1ZGUgPG1h
Y2hpbmUvc21wLmg+CiAKICNpbmNsdWRlICJpeGdiZV9hcGkuaCIKKyNpbmNsdWRlICJpeGdiZV91
ZmlsdGVyLmgiCiAKIC8qIFR1bmFibGVzICovCiAKQEAgLTQ2OCw4ICs0NjksMTEgQEAgc3RydWN0
IGFkYXB0ZXIgewogCXVuc2lnbmVkIGxvbmcJCWxpbmtfaXJxOwogCiAJc3RydWN0IGl4Z2JlX2h3
X3N0YXRzIAlzdGF0czsKLX07CiAKKyNpZmRlZiBJWEdCRV9GRElSCisJc3RydWN0IGl4Z2JlX3Vm
aWx0ZXIJdWZpbHRlcjsKKyNlbmRpZgorfTsKIAogLyogUHJlY2lzaW9uIFRpbWUgU3luYyAoSUVF
RSAxNTg4KSBkZWZpbmVzICovCiAjZGVmaW5lIEVUSEVSVFlQRV9JRUVFMTU4OCAgICAgIDB4ODhG
NwpAQCAtNTQwLDQgKzU0NCw4IEBAIGl4Z2JlX3J4X3VucmVmcmVzaGVkKHN0cnVjdCByeF9yaW5n
ICpyeHIpCiAJCSAgICByeHItPm5leHRfdG9fcmVmcmVzaCAtIDEpOwogfSAgICAgICAKIAorI2lm
ZGVmIElYR0JFX0ZESVIKK2V4dGVybiBpbnQgaXhnYmVfYXRyX3NhbXBsZV9yYXRlOworI2VuZGlm
CisKICNlbmRpZiAvKiBfSVhHQkVfSF8gKi8KZGlmZiAtLWdpdCBhL3N5cy9kZXYvaXhnYmUvaXhn
YmVfODI1OTkuYyBiL3N5cy9kZXYvaXhnYmUvaXhnYmVfODI1OTkuYwppbmRleCAzY2M4Y2Q3Li43
NGQzYWU5IDEwMDY0NAotLS0gYS9zeXMvZGV2L2l4Z2JlL2l4Z2JlXzgyNTk5LmMKKysrIGIvc3lz
L2Rldi9peGdiZS9peGdiZV84MjU5OS5jCkBAIC0xNjY3LDYgKzE2NjcsNTUgQEAgczMyIGl4Z2Jl
X2ZkaXJfYWRkX3NpZ25hdHVyZV9maWx0ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKIAly
ZXR1cm4gSVhHQkVfU1VDQ0VTUzsKIH0KIAorLyoqCisgKiAgaXhnYmVfZmRpcl9lcmFzZV9zaWdu
YXR1cmVfZmlsdGVyXzgyNTk5IC0gRXJhc2UgYSBzaWduYXR1cmUgaGFzaCBmaWx0ZXIKKyAqICBA
aHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHN0cmVhbTogaW5wdXQgYml0
c3RyZWFtCisgKiovCitzMzIgaXhnYmVfZmRpcl9lcmFzZV9zaWduYXR1cmVfZmlsdGVyXzgyNTk5
KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bmlvbiBpeGdiZV9hdHJfaGFzaF9kd29yZCBpbnB1dCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGl4Z2JlX2F0cl9oYXNoX2R3b3JkIGNv
bW1vbikKK3sKKwl1NjQgIGZkaXJoYXNoY21kOworCXUzMiAgZmRpcmNtZDsKKworCURFQlVHRlVO
QygiaXhnYmVfZmRpcl9lcmFzZV9zaWduYXR1cmVfZmlsdGVyXzgyNTk5Iik7CisKKwkvKgorCSAq
IEdldCB0aGUgZmxvd190eXBlIGluIG9yZGVyIHRvIHByb2dyYW0gRkRJUkNNRCBwcm9wZXJseQor
CSAqIGxvd2VzdCAyIGJpdHMgYXJlIEZESVJDTUQuTDRUWVBFLCB0aGlyZCBsb3dlc3QgYml0IGlz
IEZESVJDTUQuSVBWNgorCSAqLworCXN3aXRjaCAoaW5wdXQuZm9ybWF0dGVkLmZsb3dfdHlwZSkg
eworCWNhc2UgSVhHQkVfQVRSX0ZMT1dfVFlQRV9UQ1BWNDoKKwljYXNlIElYR0JFX0FUUl9GTE9X
X1RZUEVfVURQVjQ6CisJY2FzZSBJWEdCRV9BVFJfRkxPV19UWVBFX1NDVFBWNDoKKwljYXNlIElY
R0JFX0FUUl9GTE9XX1RZUEVfVENQVjY6CisJY2FzZSBJWEdCRV9BVFJfRkxPV19UWVBFX1VEUFY2
OgorCWNhc2UgSVhHQkVfQVRSX0ZMT1dfVFlQRV9TQ1RQVjY6CisJCWJyZWFrOworCWRlZmF1bHQ6
CisJCURFQlVHT1VUKCIgRXJyb3Igb24gZmxvdyB0eXBlIGlucHV0XG4iKTsKKwkJcmV0dXJuIElY
R0JFX0VSUl9DT05GSUc7CisJfQorCisJLyogY29uZmlndXJlIEZESVJDTUQgcmVnaXN0ZXIgKi8K
KwlmZGlyY21kID0gSVhHQkVfRkRJUkNNRF9DTURfUkVNT1ZFX0ZMT1cgfCAKKwkgICAgICAgICAg
SVhHQkVfRkRJUkNNRF9MQVNUIHwgSVhHQkVfRkRJUkNNRF9RVUVVRV9FTjsKKwlmZGlyY21kIHw9
IGlucHV0LmZvcm1hdHRlZC5mbG93X3R5cGUgPDwgSVhHQkVfRkRJUkNNRF9GTE9XX1RZUEVfU0hJ
RlQ7CisKKwkvKgorCSAqIFRoZSBsb3dlciAzMi1iaXRzIG9mIGZkaXJoYXNoY21kIGlzIGZvciBG
RElSSEFTSCwgdGhlIHVwcGVyIDMyLWJpdHMKKwkgKiBpcyBmb3IgRkRJUkNNRC4gIFRoZW4gZG8g
YSA2NC1iaXQgcmVnaXN0ZXIgd3JpdGUgZnJvbSBGRElSSEFTSC4KKwkgKi8KKwlmZGlyaGFzaGNt
ZCA9ICh1NjQpZmRpcmNtZCA8PCAzMjsKKwlmZGlyaGFzaGNtZCB8PSBpeGdiZV9hdHJfY29tcHV0
ZV9zaWdfaGFzaF84MjU5OShpbnB1dCwgY29tbW9uKTsKKwlJWEdCRV9XUklURV9SRUc2NChodywg
SVhHQkVfRkRJUkhBU0gsIGZkaXJoYXNoY21kKTsKKworCURFQlVHT1VUMSgiVHggaGFzaD0leFxu
IiwgKHUzMilmZGlyaGFzaGNtZCk7CisKKwlyZXR1cm4gSVhHQkVfU1VDQ0VTUzsKK30KKwogI2Rl
ZmluZSBJWEdCRV9DT01QVVRFX0JLVF9IQVNIX0lURVJBVElPTihfbikgXAogZG8geyBcCiAJdTMy
IG4gPSAoX24pOyBcCmRpZmYgLS1naXQgYS9zeXMvZGV2L2l4Z2JlL2l4Z2JlX2FwaS5oIGIvc3lz
L2Rldi9peGdiZS9peGdiZV9hcGkuaAppbmRleCA5MTAyM2FlLi43N2M2NDI3IDEwMDY0NAotLS0g
YS9zeXMvZGV2L2l4Z2JlL2l4Z2JlX2FwaS5oCisrKyBiL3N5cy9kZXYvaXhnYmUvaXhnYmVfYXBp
LmgKQEAgLTE0NCw2ICsxNDQsOSBAQCBzMzIgaXhnYmVfZmRpcl9hZGRfc2lnbmF0dXJlX2ZpbHRl
cl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAogCQkJCQkgIHVuaW9uIGl4Z2JlX2F0cl9oYXNo
X2R3b3JkIGlucHV0LAogCQkJCQkgIHVuaW9uIGl4Z2JlX2F0cl9oYXNoX2R3b3JkIGNvbW1vbiwK
IAkJCQkJICB1OCBxdWV1ZSk7CitzMzIgaXhnYmVfZmRpcl9lcmFzZV9zaWduYXR1cmVfZmlsdGVy
XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bmlvbiBpeGdiZV9hdHJfaGFzaF9kd29yZCBpbnB1dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGl4Z2JlX2F0cl9oYXNoX2R3
b3JkIGNvbW1vbik7CiBzMzIgaXhnYmVfZmRpcl9zZXRfaW5wdXRfbWFza184MjU5OShzdHJ1Y3Qg
aXhnYmVfaHcgKmh3LAogCQkJCSAgICB1bmlvbiBpeGdiZV9hdHJfaW5wdXQgKmlucHV0X21hc2sp
OwogczMyIGl4Z2JlX2ZkaXJfd3JpdGVfcGVyZmVjdF9maWx0ZXJfODI1OTkoc3RydWN0IGl4Z2Jl
X2h3ICpodywKZGlmZiAtLWdpdCBhL3N5cy9kZXYvaXhnYmUvaXhnYmVfdWZpbHRlci5jIGIvc3lz
L2Rldi9peGdiZS9peGdiZV91ZmlsdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZTVkNDQ2MgotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9kZXYvaXhnYmUvaXhnYmVfdWZp
bHRlci5jCkBAIC0wLDAgKzEsMjYwIEBACisKKyNpbmNsdWRlICJpeGdiZS5oIgorI2luY2x1ZGUg
PHN5cy9jb25mLmg+CisjaW5jbHVkZSA8c3lzL3ByaXYuaD4KKworI2lmZGVmIElYR0JFX0ZESVIK
K3N0YXRpYyBkX29wZW5fdCBpeGdiZV91ZmlsdGVyX29wZW47CitzdGF0aWMgZF9jbG9zZV90IGl4
Z2JlX3VmaWx0ZXJfY2xvc2U7CitzdGF0aWMgZF9pb2N0bF90IGl4Z2JlX3VmaWx0ZXJfaW9jdGw7
CitzdGF0aWMgc3RydWN0IGNkZXZzdyBjZGV2c3cgPSB7CisgICAgICAgLmRfdmVyc2lvbiA9ICAg
IERfVkVSU0lPTiwKKyAgICAgICAuZF9mbGFncyA9ICAgICAgMCwKKyAgICAgICAuZF9vcGVuID0g
ICAgICAgaXhnYmVfdWZpbHRlcl9vcGVuLAorICAgICAgIC5kX2Nsb3NlID0gICAgICBpeGdiZV91
ZmlsdGVyX2Nsb3NlLAorICAgICAgIC5kX2lvY3RsID0gICAgICBpeGdiZV91ZmlsdGVyX2lvY3Rs
LAorICAgICAgIC5kX25hbWUgPSAgICAgICAiaXgiLAorfTsKKworc3RhdGljIGludCB1ZmlsdGVy
X2hhc2hfc2l6ZSA9IDY1NTM2OworVFVOQUJMRV9JTlQoImh3Lml4Z2JlLnVmaWx0ZXJfaGFzaF9z
aXplIiwgJnVmaWx0ZXJfaGFzaF9zaXplKTsKK2ludCBpeGdiZV9jb29wZXJhdGl2ZV9hdHIgPSAw
OworVFVOQUJMRV9JTlQoImh3Lml4Z2JlLmNvb3BlcmF0aXZlX2F0ciIsICZpeGdiZV9jb29wZXJh
dGl2ZV9hdHIpOworCitzdGF0aWMgaW5saW5lIHZvaWQKK2xpc3RfaW5zZXJ0KHN0cnVjdCBpeGdi
ZV91ZmlsdGVyICp1ZmlsdGVyLCBzdHJ1Y3QgdWZpbHRlcl9rZW50cnkgKmtlKQoreworCVRBSUxR
X0lOU0VSVF9UQUlMKCZ1ZmlsdGVyLT5saXN0LCBrZSwgdHFfbGluayk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgdm9pZAorbGlzdF9yZW1vdmUoc3RydWN0IGl4Z2JlX3VmaWx0ZXIgKnVmaWx0ZXIsIHN0
cnVjdCB1ZmlsdGVyX2tlbnRyeSAqa2UpCit7CisJVEFJTFFfUkVNT1ZFKCZ1ZmlsdGVyLT5saXN0
LCBrZSwgdHFfbGluayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVmaWx0ZXJfa2VudHJ5
ICoKK2xpc3RfZmluZChzdHJ1Y3QgaXhnYmVfdWZpbHRlciAqdWZpbHRlciwgdW5zaWduZWQgaWQp
Cit7CisJc3RydWN0IHVmaWx0ZXJfa2VudHJ5ICprZTsKKworCVRBSUxRX0ZPUkVBQ0goa2UsICZ1
ZmlsdGVyLT5saXN0LCB0cV9saW5rKQorCQlpZiAoa2UtPmUuaWQgPT0gaWQpCisJCQlyZXR1cm4g
KGtlKTsKKwlyZXR1cm4gKE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2xpc3RfZnJl
ZWFsbChzdHJ1Y3QgaXhnYmVfdWZpbHRlciAqdWZpbHRlcikKK3sKKwlzdHJ1Y3QgdWZpbHRlcl9r
ZW50cnkgKmtlLCAqdDsKKworCVRBSUxRX0ZPUkVBQ0hfU0FGRShrZSwgJnVmaWx0ZXItPmxpc3Qs
IHRxX2xpbmssIHQpCisJCWZyZWUoa2UsIE1fREVWQlVGKTsKK30KKworc3RhdGljIGlubGluZSB2
b2lkCitoYXNoX2luc2VydChzdHJ1Y3QgaXhnYmVfdWZpbHRlciAqdWZpbHRlciwgc3RydWN0IHVm
aWx0ZXJfa2VudHJ5ICprZSkKK3sKKwlpbnQgYnVja2V0OworCQorCWJ1Y2tldCA9IGtlLT5oYXNo
ICYgdWZpbHRlci0+aGFzaG1hc2s7CisJcm1fd2xvY2soJnVmaWx0ZXItPmhhc2hsb2NrKTsKKwlM
SVNUX0lOU0VSVF9IRUFEKCZ1ZmlsdGVyLT5oYXNoW2J1Y2tldF0sIGtlLCBsaV9saW5rKTsKKwly
bV93dW5sb2NrKCZ1ZmlsdGVyLT5oYXNobG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAor
aGFzaF9yZW1vdmUoc3RydWN0IGl4Z2JlX3VmaWx0ZXIgKnVmaWx0ZXIsIHN0cnVjdCB1ZmlsdGVy
X2tlbnRyeSAqa2UpCit7CisJaW50IGJ1Y2tldDsKKworCWJ1Y2tldCA9IGtlLT5oYXNoICYgdWZp
bHRlci0+aGFzaG1hc2s7CisJcm1fd2xvY2soJnVmaWx0ZXItPmhhc2hsb2NrKTsKKwlMSVNUX1JF
TU9WRShrZSwgbGlfbGluayk7CisJZnJlZShrZSwgTV9ERVZCVUYpOworCXJtX3d1bmxvY2soJnVm
aWx0ZXItPmhhc2hsb2NrKTsKK30KKworaW50CitpeGdiZV91ZmlsdGVyX2V4aXN0cyhzdHJ1Y3Qg
YWRhcHRlciAqYWRhcHRlciwgdTMyIGhhc2gpCit7CisJc3RydWN0IGl4Z2JlX3VmaWx0ZXIgKnVm
aWx0ZXIgPSAmYWRhcHRlci0+dWZpbHRlcjsKKwlpbnQgYnVja2V0OworCXN0cnVjdCBybV9wcmlv
dHJhY2tlciB0cmFja2VyOworCXN0cnVjdCB1ZmlsdGVyX2tlbnRyeSAqa2U7CisJaW50IGZvdW5k
ID0gMDsKKworCWJ1Y2tldCA9IGhhc2ggJiB1ZmlsdGVyLT5oYXNobWFzazsKKwlybV9ybG9jaygm
dWZpbHRlci0+aGFzaGxvY2ssICZ0cmFja2VyKTsKKwlMSVNUX0ZPUkVBQ0goa2UsICZ1ZmlsdGVy
LT5oYXNoW2J1Y2tldF0sIGxpX2xpbmspIHsKKwkJaWYgKGtlLT5oYXNoID09IGhhc2gpIHsKKwkJ
CWZvdW5kKys7CisJCQlicmVhazsKKwkJfQorCX0KKwlybV9ydW5sb2NrKCZ1ZmlsdGVyLT5oYXNo
bG9jaywgJnRyYWNrZXIpOworCisJcmV0dXJuIChmb3VuZCk7Cit9CisKK2ludAoraXhnYmVfdWZp
bHRlcl9hdHRhY2goc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJYWRhcHRlci0+dWZpbHRl
ci5jZGV2ID0gbWFrZV9kZXYoJmNkZXZzdywgYWRhcHRlci0+aWZwLT5pZl9kdW5pdCwKKwkgICAg
VUlEX1JPT1QsIEdJRF9XSEVFTCwgMDYwMCwgIiVzIiwgaWZfbmFtZShhZGFwdGVyLT5pZnApKTsK
KwlpZiAoYWRhcHRlci0+dWZpbHRlci5jZGV2ID09IE5VTEwpCisJCXJldHVybiAoRU5PTUVNKTsK
KworCWFkYXB0ZXItPnVmaWx0ZXIuY2Rldi0+c2lfZHJ2MSA9ICh2b2lkICopYWRhcHRlcjsKKwkJ
CisJbXR4X2luaXQoJmFkYXB0ZXItPnVmaWx0ZXIubXR4LCAidWZpbHRlcl9tdHgiLCBOVUxMLCBN
VFhfREVGKTsKKwlUQUlMUV9JTklUKCZhZGFwdGVyLT51ZmlsdGVyLmxpc3QpOworCWlmIChpeGdi
ZV9jb29wZXJhdGl2ZV9hdHIpIHsKKwkJYWRhcHRlci0+dWZpbHRlci5oYXNoID0gaGFzaGluaXQo
dWZpbHRlcl9oYXNoX3NpemUsIE1fREVWQlVGLAorCQkJJmFkYXB0ZXItPnVmaWx0ZXIuaGFzaG1h
c2spOworCQlybV9pbml0X2ZsYWdzKCZhZGFwdGVyLT51ZmlsdGVyLmhhc2hsb2NrLCAidWZpbHRl
cl9oYXNobG9jayIsIAorCQkJUk1fTk9XSVRORVNTKTsKKwl9CisgICAgICAgIFNZU0NUTF9BRERf
SU5UKGRldmljZV9nZXRfc3lzY3RsX2N0eChhZGFwdGVyLT5kZXYpLAorCQkJU1lTQ1RMX0NISUxE
UkVOKGRldmljZV9nZXRfc3lzY3RsX3RyZWUoYWRhcHRlci0+ZGV2KSksCisJCQlPSURfQVVUTywg
InVmaWx0ZXJfaGFzaF9zaXplIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SRCwKKwkJCSZ1ZmlsdGVy
X2hhc2hfc2l6ZSwgMjAsICJ1ZmlsdGVyIGhhc2h0YWJsZSBzaXplIik7CisgICAgICAgIFNZU0NU
TF9BRERfSU5UKGRldmljZV9nZXRfc3lzY3RsX2N0eChhZGFwdGVyLT5kZXYpLAorCQkJU1lTQ1RM
X0NISUxEUkVOKGRldmljZV9nZXRfc3lzY3RsX3RyZWUoYWRhcHRlci0+ZGV2KSksCisJCQlPSURf
QVVUTywgImNvb3BlcmF0aXZlX2F0ciIsIENUTFRZUEVfSU5UfENUTEZMQUdfUkQsCisJCQkmaXhn
YmVfY29vcGVyYXRpdmVfYXRyLCAyMCwgImNvb3BlcmF0aXZlIEFUUiIpOworCisJcmV0dXJuICgw
KTsKK30KKworaW50CitpeGdiZV91ZmlsdGVyX2RldGFjaChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRl
cikKK3sKKwlsaXN0X2ZyZWVhbGwoJmFkYXB0ZXItPnVmaWx0ZXIpOworCWlmIChpeGdiZV9jb29w
ZXJhdGl2ZV9hdHIpIHsKKwkJcm1fZGVzdHJveSgmYWRhcHRlci0+dWZpbHRlci5oYXNobG9jayk7
CisJCWhhc2hkZXN0cm95KGFkYXB0ZXItPnVmaWx0ZXIuaGFzaCwgTV9ERVZCVUYsIAorCQkJYWRh
cHRlci0+dWZpbHRlci5oYXNobWFzayk7CisJfQorCW10eF9kZXN0cm95KCZhZGFwdGVyLT51Zmls
dGVyLm10eCk7CisJaWYgKGFkYXB0ZXItPnVmaWx0ZXIuY2RldikKKwkJZGVzdHJveV9kZXYoYWRh
cHRlci0+dWZpbHRlci5jZGV2KTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitpeGdi
ZV91ZmlsdGVyX29wZW4oc3RydWN0IGNkZXYgKmRldiwgaW50IGZsYWdzLCBpbnQgZm1wLCBzdHJ1
Y3QgdGhyZWFkICp0ZCkKK3sKKyAgICAgICByZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50Citp
eGdiZV91ZmlsdGVyX2Nsb3NlKHN0cnVjdCBjZGV2ICpkZXYsIGludCBmbGFncywgaW50IGZtdCwg
c3RydWN0IHRocmVhZCAqdGQpCit7CisgICAgICAgcmV0dXJuICgwKTsKK30KKworc3RhdGljIGlu
dAoraXhnYmVfdWZpbHRlcl9pb2N0bChzdHJ1Y3QgY2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIGNt
ZCwgY2FkZHJfdCBkYXRhLAorICAgIGludCBmZmxhZywgc3RydWN0IHRocmVhZCAqdGQpCit7CisJ
c3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKilkZXYtPnNpX2RydjE7
CisJc3RydWN0IGl4Z2JlX3VmaWx0ZXIgKnVmaWx0ZXIgPSAmYWRhcHRlci0+dWZpbHRlcjsKKwlp
bnQgZXJyb3IgPSAwOworCisJaWYgKHByaXZfY2hlY2sodGQsIFBSSVZfRFJJVkVSKSkgeworCQly
ZXR1cm4gKEVQRVJNKTsKKwl9CisKKwlpZiAoIWl4Z2JlX2Nvb3BlcmF0aXZlX2F0ciAmJiBpeGdi
ZV9hdHJfc2FtcGxlX3JhdGUpCisJCXJldHVybiAoRU5PREVWKTsKKworCW10eF9sb2NrKCZ1Zmls
dGVyLT5tdHgpOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBJWEdCRV9BRERfU0lHRklMVEVSOiB7
CisJCXN0cnVjdCB1ZmlsdGVyX2VudHJ5ICplID0gKHN0cnVjdCB1ZmlsdGVyX2VudHJ5ICopZGF0
YTsKKwkJc3RydWN0IHVmaWx0ZXJfa2VudHJ5ICprZTsKKwkJdW5pb24gaXhnYmVfYXRyX2hhc2hf
ZHdvcmQgaW5wdXQgPSB7LmR3b3JkID0gMH07CisJCXVuaW9uIGl4Z2JlX2F0cl9oYXNoX2R3b3Jk
IGNvbW1vbiA9IHsuZHdvcmQgPSAwfTsKKworCQlzd2l0Y2ggKGUtPnByb3RvKSB7CisJCWNhc2Ug
VUZJTFRFUl9QUk9UT19UQ1BWNDoKKwkJCWlucHV0LmZvcm1hdHRlZC5mbG93X3R5cGUgXj0gSVhH
QkVfQVRSX0ZMT1dfVFlQRV9UQ1BWNDsKKwkJCWJyZWFrOworCQljYXNlIFVGSUxURVJfUFJPVE9f
VURQVjQ6CisJCQlpbnB1dC5mb3JtYXR0ZWQuZmxvd190eXBlIF49IElYR0JFX0FUUl9GTE9XX1RZ
UEVfVURQVjQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVycm9yID0gRUlOVkFMOworCQkJ
Z290byBvdXQ7CisJCX0KKwkJY29tbW9uLnBvcnQuc3JjIF49IGh0b25zKGUtPnNyY19wb3J0KTsK
KwkJY29tbW9uLnBvcnQuZHN0IF49IGh0b25zKGUtPmRzdF9wb3J0KTsKKwkJY29tbW9uLmZsZXhf
Ynl0ZXMgXj0gaHRvbnMoRVRIRVJUWVBFX0lQKTsKKwkJY29tbW9uLmlwIF49IGUtPnNyY19pcC5z
X2FkZHIgXiBlLT5kc3RfaXAuc19hZGRyOworCisJCWtlID0gbWFsbG9jKHNpemVvZigqa2UpLCBN
X0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8pOworCQlpZiAoIWtlKSB7CisJCQllcnJvciA9IEVO
T01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJCW1lbWNweSgma2UtPmUsIGUsIHNpemVvZihrZS0+
ZSkpOworCQlrZS0+ZS5pZCA9IHVmaWx0ZXItPm5leHRfaWQrKzsKKwkJa2UtPmlucHV0ID0gaW5w
dXQ7CisJCWtlLT5jb21tb24gPSBjb21tb247CisJCWlmIChpeGdiZV9jb29wZXJhdGl2ZV9hdHIp
IHsKKwkJCWtlLT5oYXNoID0gaXhnYmVfYXRyX2NvbXB1dGVfc2lnX2hhc2hfODI1OTkoaW5wdXQs
IAorCQkJCWNvbW1vbik7CisJCQloYXNoX2luc2VydCh1ZmlsdGVyLCBrZSk7CisJCX0KKwkJbGlz
dF9pbnNlcnQodWZpbHRlciwga2UpOworCQlpeGdiZV9mZGlyX2FkZF9zaWduYXR1cmVfZmlsdGVy
XzgyNTk5KCZhZGFwdGVyLT5odywKKwkJCWlucHV0LCBjb21tb24sIGUtPnF1ZV9pbmRleCk7CisJ
CWJyZWFrOworCX0KKwljYXNlIElYR0JFX0dFVF9TSUdGSUxURVI6IHsKKwkJc3RydWN0IHVmaWx0
ZXJfZW50cnkgKmUgPSAoc3RydWN0IHVmaWx0ZXJfZW50cnkgKilkYXRhOworCQlzdHJ1Y3QgdWZp
bHRlcl9rZW50cnkgKmtlOworCisJCWtlID0gbGlzdF9maW5kKHVmaWx0ZXIsIGUtPmlkKTsKKwkJ
aWYgKGtlKQorCQkJbWVtY3B5KGUsICZrZS0+ZSwgc2l6ZW9mKCplKSk7CisJCWVsc2UKKwkJCWVy
cm9yID0gRU5PRU5UOworCQlicmVhazsKKwl9OworCWNhc2UgSVhHQkVfQ0xSX1NJR0ZJTFRFUjog
eworCQl1bnNpZ25lZCAqaWQgPSAodW5zaWduZWQgKilkYXRhOworCQlzdHJ1Y3QgdWZpbHRlcl9r
ZW50cnkgKmtlOworCisJCWtlID0gbGlzdF9maW5kKHVmaWx0ZXIsICppZCk7CisJCWlmICgha2Up
IHsKKwkJCWVycm9yID0gRU5PRU5UOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAoaXhnYmVf
Y29vcGVyYXRpdmVfYXRyKQorCQkJaGFzaF9yZW1vdmUodWZpbHRlciwga2UpOworCQlsaXN0X3Jl
bW92ZSh1ZmlsdGVyLCBrZSk7CisKKwkJaXhnYmVfZmRpcl9lcmFzZV9zaWduYXR1cmVfZmlsdGVy
XzgyNTk5KCZhZGFwdGVyLT5odywKKwkJCWtlLT5pbnB1dCwga2UtPmNvbW1vbik7CisJCWJyZWFr
OworCX0KKwljYXNlIElYR0JFX0dFVF9TSUdGSUxURVJfTEVOOiB7CisJCXVuc2lnbmVkICppZCA9
ICh1bnNpZ25lZCAqKWRhdGE7CisJCQorCQkqaWQgPSB1ZmlsdGVyLT5uZXh0X2lkOworCQlicmVh
azsKKwl9CisJZGVmYXVsdDoKKwkJZXJyb3IgPSBFT1BOT1RTVVBQOworCQlicmVhazsKKwl9CisK
K291dDoKKwltdHhfdW5sb2NrKCZ1ZmlsdGVyLT5tdHgpOworCXJldHVybiAoZXJyb3IpOworfQor
I2VuZGlmIC8qIElYR0JFX0ZESVIgKi8KZGlmZiAtLWdpdCBhL3N5cy9kZXYvaXhnYmUvaXhnYmVf
dWZpbHRlci5oIGIvc3lzL2Rldi9peGdiZS9peGdiZV91ZmlsdGVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYTJlODMzNAotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9kZXYv
aXhnYmUvaXhnYmVfdWZpbHRlci5oCkBAIC0wLDAgKzEsODYgQEAKKy8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KgorCitDb3B5cmlnaHQgKGMpIDIwMTMgVGFrdXlhIEFTQURBCitBbGwgcmlnaHRzIHJlc2VydmVk
LgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAor
ICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisKKyAyLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaGVsc2lvIENvcnBvcmF0aW9uIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgICB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJ
UyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUK
K0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCiskRnJlZUJTRCQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9f
SVhHQkVVRklMVEVSX0hfXworI2RlZmluZSBfX0lYR0JFVUZJTFRFUl9IX18KKworZW51bSB7CisJ
VUZJTFRFUl9QUk9UT19UQ1BWNCwKKwlVRklMVEVSX1BST1RPX1VEUFY0Cit9OworCitzdHJ1Y3Qg
dWZpbHRlcl9lbnRyeSB7CisJdW5zaWduZWQgaWQ7CisJaW50IHByb3RvOworCXN0cnVjdCBpbl9h
ZGRyIHNyY19pcDsKKwlpbnQgc3JjX3BvcnQ7CisJc3RydWN0IGluX2FkZHIgZHN0X2lwOworCWlu
dCBkc3RfcG9ydDsKKwlpbnQgcXVlX2luZGV4OworfTsKKworI2RlZmluZSBJWEdCRV9BRERfU0lH
RklMVEVSCV9JT1coJ2knLCAweDAsIHN0cnVjdCB1ZmlsdGVyX2VudHJ5KQorI2RlZmluZSBJWEdC
RV9HRVRfU0lHRklMVEVSCV9JT1dSKCdpJywgMHgxLCBzdHJ1Y3QgdWZpbHRlcl9lbnRyeSkKKyNk
ZWZpbmUgSVhHQkVfQ0xSX1NJR0ZJTFRFUglfSU9XKCdpJywgMHgyLCB1bnNpZ25lZCkKKyNkZWZp
bmUgSVhHQkVfR0VUX1NJR0ZJTFRFUl9MRU4gX0lPUignaScsIDB4MywgdW5zaWduZWQpCisKKyNp
ZmRlZiBfS0VSTkVMCisjaWZkZWYgSVhHQkVfRkRJUgorI2luY2x1ZGUgPHN5cy9ybWxvY2suaD4K
Kworc3RydWN0IHVmaWx0ZXJfa2VudHJ5IHsKKwlzdHJ1Y3QgdWZpbHRlcl9lbnRyeSBlOworCVRB
SUxRX0VOVFJZKHVmaWx0ZXJfa2VudHJ5KSB0cV9saW5rOworCUxJU1RfRU5UUlkodWZpbHRlcl9r
ZW50cnkpIGxpX2xpbms7CisJdW5pb24gaXhnYmVfYXRyX2hhc2hfZHdvcmQgaW5wdXQ7CisJdW5p
b24gaXhnYmVfYXRyX2hhc2hfZHdvcmQgY29tbW9uOworCXUzMiBoYXNoOworfTsKKworc3RydWN0
IGl4Z2JlX3VmaWx0ZXIgeworCXN0cnVjdCBjZGV2CQkqY2RldjsKKwlUQUlMUV9IRUFEKCwgdWZp
bHRlcl9rZW50cnkpIGxpc3Q7CisJc3RydWN0IG10eAkJbXR4OworCXVuc2lnbmVkCQluZXh0X2lk
OworCUxJU1RfSEVBRCgsIHVmaWx0ZXJfa2VudHJ5KSAqaGFzaDsKKwl1X2xvbmcJCQloYXNobWFz
azsKKwlzdHJ1Y3Qgcm1sb2NrCQloYXNobG9jazsKK307CisKK3N0cnVjdCBhZGFwdGVyOworaW50
IGl4Z2JlX3VmaWx0ZXJfYXR0YWNoKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK2ludCBpeGdi
ZV91ZmlsdGVyX2RldGFjaChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gaW50IGl4
Z2JlX2Nvb3BlcmF0aXZlX2F0cjsKK2ludCBpeGdiZV91ZmlsdGVyX2V4aXN0cyhzdHJ1Y3QgYWRh
cHRlciAqYWRhcHRlciwgdTMyIGhhc2gpOworI2VuZGlmIC8qIElYR0JFX0ZESVIgKi8KKyNlbmRp
ZiAvKiBfS0VSTkVMICovCisjZW5kaWYgLyogX19JWEdCRVVGSUxURVJfSF9fICovCisKZGlmZiAt
LWdpdCBhL3Rvb2xzL3Rvb2xzL2l4Z2JldG9vbC9NYWtlZmlsZSBiL3Rvb2xzL3Rvb2xzL2l4Z2Jl
dG9vbC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjk1ZTkz
Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvdG9vbHMvaXhnYmV0b29sL01ha2VmaWxlCkBAIC0w
LDAgKzEsOSBAQAorIyAkRnJlZUJTRCQKKworUFJPRz0JaXhnYmV0b29sCitTUkNTPQlpeGdiZXRv
b2wuYworTk9fTUFOPQorQ0ZMQUdTKz0gLUkkey5DVVJESVJ9Ly4uLy4uLy4uL3N5cy9kZXYvaXhn
YmUgLUkuCitCSU5ESVI/PSAvdXNyL3NiaW4KKworLmluY2x1ZGUgPGJzZC5wcm9nLm1rPgpkaWZm
IC0tZ2l0IGEvdG9vbHMvdG9vbHMvaXhnYmV0b29sL2l4Z2JldG9vbC5jIGIvdG9vbHMvdG9vbHMv
aXhnYmV0b29sL2l4Z2JldG9vbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmY1YjYxZjUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy90b29scy9peGdiZXRvb2wvaXhnYmV0
b29sLmMKQEAgLTAsMCArMSwyMzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitDb3B5cmlnaHQg
KGMpIDIwMTMsIFRha3V5YSBBU0FEQS4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAzLiBOZWl0aGVyIHRoZSBu
YW1lIG9mIHRoZSBDaGVsc2lvIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
K0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQi
KTsKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8
ZmNudGwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1
ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5o
PgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5j
bHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lz
L3N5c2N0bC5oPgorI2luY2x1ZGUgPGl4Z2JlX3VmaWx0ZXIuaD4KKworc3RhdGljIHZvaWQKK3Vz
YWdlKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsICJVc2FnZTogaXhnYmV0b29sIDxpZm5hbWU+
IFtvcGVyYXRpb25dXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0YWRkX3NpZ19maWx0ZXIgPHBy
b3RvPiA8c3JjX2lwPiA8c3JjX3BvcnQ+IDxkc3RfaXA+IDxkc3RfcG9ydD4gPHF1ZV9pbmRleD5c
biIpOworCWZwcmludGYoc3RkZXJyLCAiXHRzaG93X3NpZ19maWx0ZXJcbiIpOworCWZwcmludGYo
c3RkZXJyLCAiXHRkZWxfc2lnX2ZpbHRlciA8aWQ+XG4iKTsKK30KKworc3RhdGljIGludCAKK2Fk
ZF9zaWdfZmlsdGVyKGludCBmZCwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3Qg
dWZpbHRlcl9lbnRyeSBmaWx0ZXI7CisJaW50IGVycm9yOworCisJaWYgKGFyZ2MgIT0gOSkgCisJ
CXJldHVybiAtMTsKKworCWlmICghc3RyY21wKGFyZ3ZbM10sICJ0Y3B2NCIpKQorCQlmaWx0ZXIu
cHJvdG8gPSBVRklMVEVSX1BST1RPX1RDUFY0OworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlszXSwg
InVkcHY0IikpCisJCWZpbHRlci5wcm90byA9IFVGSUxURVJfUFJPVE9fVURQVjQ7CisJZWxzZQor
CQlyZXR1cm4gLTE7CisJZXJyb3IgPSBpbmV0X2F0b24oYXJndls0XSwgJmZpbHRlci5zcmNfaXAp
OworCWlmIChlcnJvciAhPSAxKQorCQlyZXR1cm4gZXJyb3I7CisJZXJybm8gPSAwOworCWZpbHRl
ci5zcmNfcG9ydCA9IHN0cnRvbChhcmd2WzVdLCBOVUxMLCAwKTsKKwlpZiAoZXJybm8pCisJCXJl
dHVybiBlcnJubzsKKwllcnJvciA9IGluZXRfYXRvbihhcmd2WzZdLCAmZmlsdGVyLmRzdF9pcCk7
CisJaWYgKGVycm9yICE9IDEpCisJCXJldHVybiBlcnJvcjsKKwllcnJubyA9IDA7CisJZmlsdGVy
LmRzdF9wb3J0ID0gc3RydG9sKGFyZ3ZbN10sIE5VTEwsIDApOworCWlmIChlcnJubykKKwkJcmV0
dXJuIGVycm5vOworCWVycm5vID0gMDsKKwlmaWx0ZXIucXVlX2luZGV4ID0gc3RydG9sKGFyZ3Zb
OF0sIE5VTEwsIDApOworCWlmIChlcnJubykKKwkJcmV0dXJuIGVycm5vOworCisJZXJyb3IgPSBp
b2N0bChmZCwgSVhHQkVfQUREX1NJR0ZJTFRFUiwgJmZpbHRlcik7CisJaWYgKGVycm9yKSB7CisJ
CXBlcnJvcigiaXhnYmV0b29sIik7CisJCWNsb3NlKGZkKTsKKwkJZXhpdCgxKTsKKwl9CisJcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCitmaWx0ZXJfcHJvdG9fc3Ry
KGludCBwcm90bykKK3sKKwljb25zdCBjaGFyICpzdHI7CisKKwlzd2l0Y2ggKHByb3RvKSB7CisJ
Y2FzZSBVRklMVEVSX1BST1RPX1RDUFY0OgorCQlzdHIgPSAidGNwdjQiOworCQlicmVhazsKKwlj
YXNlIFVGSUxURVJfUFJPVE9fVURQVjQ6CisJCXN0ciA9ICJ1ZHB2NCI7CisJCWJyZWFrOworCWRl
ZmF1bHQ6CisJCXN0ciA9ICIoaW52YWwpIjsKKwl9CisJcmV0dXJuIHN0cjsKK30KKworc3RhdGlj
IGludCAKK3Nob3dfc2lnX2ZpbHRlcihpbnQgZmQsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7
CisJdW5zaWduZWQgaTsKKwl1bnNpZ25lZCBsZW47CisJaW50IGVycm9yOworCisJaWYgKGFyZ2Mg
IT0gMykgCisJCXJldHVybiAtMTsKKworCWVycm9yID0gaW9jdGwoZmQsIElYR0JFX0dFVF9TSUdG
SUxURVJfTEVOLCAmbGVuKTsKKwlpZiAoZXJyb3IpIHsKKwkJcGVycm9yKCJpeGdiZXRvb2wiKTsK
KwkJY2xvc2UoZmQpOworCQlleGl0KDEpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkr
KykgeworCQlzdHJ1Y3QgdWZpbHRlcl9lbnRyeSBmaWx0ZXI7CisKKwkJZmlsdGVyLmlkID0gaTsK
KwkJZXJyb3IgPSBpb2N0bChmZCwgSVhHQkVfR0VUX1NJR0ZJTFRFUiwgJmZpbHRlcik7CisJCWlm
IChlcnJvcikKKwkJCWNvbnRpbnVlOworCQlwcmludGYoImlkOiAldVxuIiwgZmlsdGVyLmlkKTsK
KwkJcHJpbnRmKCJwcm90bzogJXNcbiIsIGZpbHRlcl9wcm90b19zdHIoZmlsdGVyLnByb3RvKSk7
CisJCXByaW50Zigic3JjX2lwOiAlc1xuIiwgaW5ldF9udG9hKGZpbHRlci5zcmNfaXApKTsKKwkJ
cHJpbnRmKCJzcmNfcG9ydDogJWRcbiIsIGZpbHRlci5zcmNfcG9ydCk7CisJCXByaW50ZigiZHN0
X2lwOiAlc1xuIiwgaW5ldF9udG9hKGZpbHRlci5kc3RfaXApKTsKKwkJcHJpbnRmKCJkc3RfcG9y
dDogJWRcbiIsIGZpbHRlci5kc3RfcG9ydCk7CisJCXByaW50ZigicXVlX2luZGV4OiAlZFxuIiwg
ZmlsdGVyLnF1ZV9pbmRleCk7CisJCXByaW50ZigiXG4iKTsKKwl9CisJcmV0dXJuIDA7Cit9CisK
K3N0YXRpYyBpbnQgCitkZWxfc2lnX2ZpbHRlcihpbnQgZmQsIGludCBhcmdjLCBjaGFyICphcmd2
W10pCit7CisJdW5zaWduZWQgaWQ7CisJaW50IGVycm9yOworCisJaWYgKGFyZ2MgIT0gNCkgCisJ
CXJldHVybiAtMTsKKworCWVycm5vID0gMDsKKwlpZCA9IHN0cnRvdWwoYXJndlszXSwgTlVMTCwg
MCk7CisJaWYgKGVycm5vKQorCQlyZXR1cm4gZXJybm87CisKKwllcnJvciA9IGlvY3RsKGZkLCBJ
WEdCRV9DTFJfU0lHRklMVEVSLCAmaWQpOworCWlmIChlcnJvcikgeworCQlwZXJyb3IoIml4Z2Jl
dG9vbCIpOworCQljbG9zZShmZCk7CisJCWV4aXQoMSk7CisJfQorCXJldHVybiAwOworfQorCitp
bnQgCittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IHJldDsKKwljaGFyIGJ1
Zls2NF07CisJaW50IGZkOworCWludCBpZm5vOworCWludCBjb29wX2F0cjsKKwlpbnQgYXRyOwor
CXNpemVfdCBjb29wX2F0cl9zaXplID0gc2l6ZW9mKGNvb3BfYXRyKTsKKwlzaXplX3QgYXRyX3Np
emUgPSBzaXplb2YoYXRyKTsKKworCWlmIChhcmdjIDwgMykgeworCQl1c2FnZSgpOworCQlleGl0
KDEpOworCX0KKwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiL2Rldi8lcyIsIGFyZ3ZbMV0p
OworCWlmICgoZmQgPSBvcGVuKGJ1ZiwgT19SRFdSKSkgPCAwKSB7CisJCXBlcnJvcigiaXhnYmV0
b29sIik7CisJCWV4aXQoMSk7CisJfQorCXNzY2FuZihhcmd2WzFdLCAiaXglZCIsICZpZm5vKTsK
KwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiZGV2Lml4LiVkLmNvb3BlcmF0aXZlX2F0ciIs
IGlmbm8pOworCXJldCA9IHN5c2N0bGJ5bmFtZShidWYsICZjb29wX2F0ciwgJmNvb3BfYXRyX3Np
emUsIE5VTEwsIDApOworCWlmIChyZXQpIHsKKwkJcGVycm9yKCJpeGdiZXRvb2wiKTsKKwkJZXhp
dCgxKTsKKwl9CisJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgImRldi5peC4lZC5hdHJfc2Ft
cGxlX3JhdGUiLCBpZm5vKTsKKwlyZXQgPSBzeXNjdGxieW5hbWUoYnVmLCAmYXRyLCAmYXRyX3Np
emUsIE5VTEwsIDApOworCWlmIChyZXQpIHsKKwkJcGVycm9yKCJpeGdiZXRvb2wiKTsKKwkJZXhp
dCgxKTsKKwl9CisJaWYgKCFjb29wX2F0ciAmJiBhdHIpIHsKKwkJcHJpbnRmKCJUbyB1c2UgdXNl
ciBkZWZpbmVkIGZpbHRlciwgeW91IG5lZWQgdG8gYWRkICdody5peGdiZS5jb29wZXJhdGl2ZV9h
dHI9MScgb24gL2Jvb3QvbG9hZGVyLmNvbmYgYW5kIHJlYm9vdFxuIik7CisJCWNsb3NlKGZkKTsK
KwkJZXhpdCgxKTsKKwl9CisJaWYgKCFzdHJjbXAoYXJndlsyXSwgImFkZF9zaWdfZmlsdGVyIikp
CisJCXJldCA9IGFkZF9zaWdfZmlsdGVyKGZkLCBhcmdjLCBhcmd2KTsKKwllbHNlIGlmICghc3Ry
Y21wKGFyZ3ZbMl0sICJzaG93X3NpZ19maWx0ZXIiKSkKKwkJcmV0ID0gc2hvd19zaWdfZmlsdGVy
KGZkLCBhcmdjLCBhcmd2KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMl0sICJkZWxfc2lnX2Zp
bHRlciIpKQorCQlyZXQgPSBkZWxfc2lnX2ZpbHRlcihmZCwgYXJnYywgYXJndik7CisJZWxzZSAK
KwkJcmV0ID0gLTE7CisKKwlpZiAocmV0KQorCQl1c2FnZSgpOworCisJY2xvc2UoZmQpOworCisJ
cmV0dXJuIChyZXQpOworfQorCg==
--047d7bd90edecde4f304e8213c67--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CALG4x-WWqrf2Laen=zmUuiO1OCv1O2UHqV8NugnXN3BEkex%2B7g>