Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 6 Nov 2010 01:13:23 -0700
From:      Garrett Cooper <yanegomi@gmail.com>
To:        freebsd-hackers@freebsd.org
Subject:   [PATCH] mptutil(8) - capture errors and percolate up to caller
Message-ID:  <AANLkTinK_gPuqke7UAusJVV6apK0w=gU3sHjBsjhd00r@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--0016e6567d28fde28604945df687
Content-Type: text/plain; charset=ISO-8859-1

    Similar to r214396, this patch deals with properly capturing error
and passing it up to the caller in mptutil just in case the errno
value gets stomped on by warn*(3); this patch deals with an improper
use of warn(3), and also some malloc(3) errors, as well as shrink down
some static buffers to fit the data being output.
    If someone could review and help me commit this patch it would be
much appreciated; all I could do is run negative tests on my local box
and minor positive tests on my vmware fusion instance because it
doesn't fully emulate a fully working mpt(4) device (the vmware
instance consistently crashed with a warning about the mpt
controller's unimplemented features after I poked at it enough).
    I'll submit another patch to fix up style(9) in this app if requested.
Thanks!
-Garrett

--0016e6567d28fde28604945df687
Content-Type: text/x-patch; charset=US-ASCII;
	name="mptutil-capture-errno-values.patch"
Content-Disposition: attachment; filename="mptutil-capture-errno-values.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gg67siny1

SW5kZXg6IHVzci5zYmluL21wdHV0aWwvbXB0X2V2dC5jCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHVzci5zYmlu
L21wdHV0aWwvbXB0X2V2dC5jCShyZXZpc2lvbiAyMTQ1NjgpCisrKyB1c3Iuc2Jpbi9tcHR1dGls
L21wdF9ldnQuYwkod29ya2luZyBjb3B5KQpAQCAtOTQsMTggKzk0LDIwIEBACiB7CiAJQ09ORklH
X1BBR0VfTE9HXzAgKmxvZzsKIAlNUElfTE9HXzBfRU5UUlkgKiplbnRyaWVzOwotCWludCBjaCwg
ZmQsIGksIG51bV9ldmVudHMsIHZlcmJvc2U7CisJaW50IGNoLCBlcnJvciwgZmQsIGksIG51bV9l
dmVudHMsIHZlcmJvc2U7CiAKIAlmZCA9IG1wdF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQgPCAw
KSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAoZXJy
bm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlsb2cgPSBtcHRfZ2V0X2V2ZW50cyhmZCwg
TlVMTCk7CiAJaWYgKGxvZyA9PSBOVUxMKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZh
aWxlZCB0byBnZXQgZXZlbnQgbG9nIGluZm8iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVy
biAoZXJyb3IpOwogCX0KIAogCS8qIERlZmF1bHQgc2V0dGluZ3MuICovCkBAIC0xMjgsNiArMTMw
LDggQEAKIAogCS8qIEJ1aWxkIGEgbGlzdCBvZiB2YWxpZCBlbnRyaWVzIGFuZCBzb3J0IHRoZW0g
Ynkgc2VxdWVuY2UuICovCiAJZW50cmllcyA9IG1hbGxvYyhzaXplb2YoTVBJX0xPR18wX0VOVFJZ
ICopICogbG9nLT5OdW1Mb2dFbnRyaWVzKTsKKwlpZiAoZW50cmllcyA9PSBOVUxMKQorCQlyZXR1
cm4gKGVycm5vKTsKIAludW1fZXZlbnRzID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgbG9nLT5OdW1M
b2dFbnRyaWVzOyBpKyspIHsKIAkJaWYgKGxvZy0+TG9nRW50cnlbaV0uTG9nRW50cnlRdWFsaWZp
ZXIgPT0KSW5kZXg6IHVzci5zYmluL21wdHV0aWwvbXB0X2NhbS5jCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHVz
ci5zYmluL21wdHV0aWwvbXB0X2NhbS5jCShyZXZpc2lvbiAyMTQ1NjgpCisrKyB1c3Iuc2Jpbi9t
cHR1dGlsL21wdF9jYW0uYwkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQAogCXN0cnVj
dCBidXNfbWF0Y2hfcGF0dGVybiAqYjsKIAl1bmlvbiBjY2IgY2NiOwogCXNpemVfdCBidWZzaXpl
OworCWludCBlcnJvcjsKIAogCWlmICh4cHRfb3BlbigpIDwgMCkKIAkJcmV0dXJuIChFTlhJTyk7
CkBAIC05MSw5ICs5MiwxMCBAQAogCWItPmZsYWdzID0gQlVTX01BVENIX05BTUUgfCBCVVNfTUFU
Q0hfVU5JVCB8IEJVU19NQVRDSF9CVVNfSUQ7CiAKIAlpZiAoaW9jdGwoeHB0ZmQsIENBTUlPQ09N
TUFORCwgJmNjYikgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCWZyZWUoY2NiLmNkbS5tYXRj
aGVzKTsKIAkJZnJlZShjY2IuY2RtLnBhdHRlcm5zKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJl
dHVybiAoZXJyb3IpOwogCX0KIAlmcmVlKGNjYi5jZG0ucGF0dGVybnMpOwogCkBAIC0xMjQsNyAr
MTI2LDcgQEAKIAl1bmlvbiBjY2IgY2NiOwogCXBhdGhfaWRfdCBwYXRoX2lkOwogCXNpemVfdCBi
dWZzaXplOwotCWludCBlcnJvciwgaTsKKwlpbnQgZXJyb3I7CiAKIAkvKiBtcHQoNCkgb25seSBo
YW5kbGVzIGRldmljZXMgb24gYnVzIDAuICovCiAJaWYgKFZvbHVtZUJ1cyAhPSAwKQpAQCAtMTY0
LDEwICsxNjYsMTAgQEAKIAlwLT5mbGFncyA9IFBFUklQSF9NQVRDSF9QQVRIIHwgUEVSSVBIX01B
VENIX05BTUUgfCBQRVJJUEhfTUFUQ0hfVEFSR0VUOwogCiAJaWYgKGlvY3RsKHhwdGZkLCBDQU1J
T0NPTU1BTkQsICZjY2IpIDwgMCkgewotCQlpID0gZXJybm87CisJCWVycm9yID0gZXJybm87CiAJ
CWZyZWUoY2NiLmNkbS5tYXRjaGVzKTsKIAkJZnJlZShjY2IuY2RtLnBhdHRlcm5zKTsKLQkJcmV0
dXJuIChpKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCWZyZWUoY2NiLmNkbS5wYXR0ZXJucyk7
CiAKQEAgLTIzNiw3ICsyMzgsNyBAQAogCiAJY2NiID0gY2FtX2dldGNjYihkZXYpOwogCWlmIChj
Y2IgPT0gTlVMTCkKLQkJcmV0dXJuIChFTk9NRU0pOworCQlyZXR1cm4gKGVycm5vKTsKIAogCS8q
IFplcm8gdGhlIHJlc3Qgb2YgdGhlIGNjYi4gKi8KIAliemVybygmKCZjY2ItPmNjYl9oKVsxXSwg
c2l6ZW9mKHN0cnVjdCBjY2Jfc2NzaWlvKSAtCkBAIC0zNTAsNyArMzUyLDcgQEAKIAogCWNjYiA9
IGNhbV9nZXRjY2IoZGV2KTsKIAlpZiAoY2NiID09IE5VTEwpCi0JCXJldHVybiAoRU5PTUVNKTsK
KwkJcmV0dXJuIChlcnJubyk7CiAKIAkvKiBaZXJvIHRoZSByZXN0IG9mIHRoZSBjY2IuICovCiAJ
Ynplcm8oJigmY2NiLT5jY2JfaClbMV0sIHNpemVvZihzdHJ1Y3QgY2NiX3Njc2lpbykgLQpAQCAt
MzU4LDggKzM2MCw5IEBACiAKIAlpbnFfYnVmID0gY2FsbG9jKDEsIHNpemVvZigqaW5xX2J1Zikp
OwogCWlmIChpbnFfYnVmID09IE5VTEwpIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJY2FtX2ZyZWVj
Y2IoY2NiKTsKLQkJcmV0dXJuIChFTk9NRU0pOworCQlyZXR1cm4gKGVycm5vKTsKIAl9CiAJc2Nz
aV9pbnF1aXJ5KCZjY2ItPmNzaW8sIDEsIE5VTEwsIE1TR19TSU1QTEVfUV9UQUcsICh2b2lkICop
aW5xX2J1ZiwKIAkgICAgU0hPUlRfSU5RVUlSWV9MRU5HVEgsIDAsIDAsIFNTRF9GVUxMX1NJWkUs
IDUwMDApOwpAQCAtMzk3LDggKzQwMCw4IEBACiAJdW5pb24gY2NiIGNjYjsKIAlwYXRoX2lkX3Qg
cGF0aF9pZDsKIAlzaXplX3QgYnVmc2l6ZTsKLQl1X2ludCBpOwogCWludCBjb3VudCwgZXJyb3I7
CisJdWludDMyX3QgaTsKIAogCWlmICh4cHRfb3BlbigpIDwgMCkKIAkJcmV0dXJuIChFTlhJTyk7
CkBAIC00MzEsMTAgKzQzNCwxMCBAQAogCQlwLT5mbGFncyA9IFBFUklQSF9NQVRDSF9QQVRIIHwg
UEVSSVBIX01BVENIX05BTUU7CiAKIAkJaWYgKGlvY3RsKHhwdGZkLCBDQU1JT0NPTU1BTkQsICZj
Y2IpIDwgMCkgewotCQkJaSA9IGVycm5vOworCQkJZXJyb3IgPSBlcnJubzsKIAkJCWZyZWUoY2Ni
LmNkbS5tYXRjaGVzKTsKIAkJCWZyZWUoY2NiLmNkbS5wYXR0ZXJucyk7Ci0JCQlyZXR1cm4gKGkp
OworCQkJcmV0dXJuIChlcnJvcik7CiAJCX0KIAkJZnJlZShjY2IuY2RtLnBhdHRlcm5zKTsKIApA
QCAtNDgxLDYgKzQ4NCw4IEBACiAJICogZXhjbHVkZSB0aGVtIGZyb20gdGhlIGxpc3QuCiAJICov
CiAJaW9jMiA9IG1wdF9yZWFkX2lvY19wYWdlKGZkLCAyLCBOVUxMKTsKKwlpZiAoaW9jMiA9PSBO
VUxMKQorCQlyZXR1cm4gKGVycm5vKTsKIAlkaXNrcyA9IGNhbGxvYyhjY2IuY2RtLm51bV9tYXRj
aGVzLCBzaXplb2YoKmRpc2tzKSk7CiAJY291bnQgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBjY2Iu
Y2RtLm51bV9tYXRjaGVzOyBpKyspIHsKSW5kZXg6IHVzci5zYmluL21wdHV0aWwvbXB0X3Nob3cu
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSB1c3Iuc2Jpbi9tcHR1dGlsL21wdF9zaG93LmMJKHJldmlzaW9uIDIx
NDU2OCkKKysrIHVzci5zYmluL21wdHV0aWwvbXB0X3Nob3cuYwkod29ya2luZyBjb3B5KQpAQCAt
NzksNyArNzksNyBAQAogCUNPTkZJR19QQUdFX0lPQ18yICppb2MyOwogCUNPTkZJR19QQUdFX0lP
Q182ICppb2M2OwogCVUxNiBJT0NTdGF0dXM7Ci0JaW50IGZkLCBjb21tYTsKKwlpbnQgY29tbWEs
IGVycm9yLCBmZDsKIAogCWlmIChhYyAhPSAxKSB7CiAJCXdhcm54KCJzaG93IGFkYXB0ZXI6IGV4
dHJhIGFyZ3VtZW50cyIpOwpAQCAtODgsMTcgKzg4LDE5IEBACiAKIAlmZCA9IG1wdF9vcGVuKG1w
dF91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1wdF9v
cGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAltYW4w
ID0gbXB0X3JlYWRfbWFuX3BhZ2UoZmQsIDAsIE5VTEwpOwogCWlmIChtYW4wID09IE5VTEwpIHsK
KwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCBjb250cm9sbGVyIGluZm8i
KTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAlpZiAobWFuMC0+
SGVhZGVyLlBhZ2VMZW5ndGggPCBzaXplb2YoKm1hbjApIC8gNCkgewotCQl3YXJuKCJJbnZhbGlk
IGNvbnRyb2xsZXIgaW5mbyIpOworCQl3YXJueCgiSW52YWxpZCBjb250cm9sbGVyIGluZm8iKTsK
IAkJcmV0dXJuIChFSU5WQUwpOwogCX0KIAlwcmludGYoIm1wdCVkIEFkYXB0ZXI6XG4iLCBtcHRf
dW5pdCk7CkBAIC0yODMsNyArMjg1LDcgQEAKIAlDT05GSUdfUEFHRV9SQUlEX1ZPTF8xICp2bmFt
ZXM7CiAJQ09ORklHX1BBR0VfUkFJRF9QSFlTX0RJU0tfMCAqcGluZm87CiAJc3RydWN0IG1wdF9z
dGFuZGFsb25lX2Rpc2sgKnNkaXNrczsKLQlpbnQgZmQsIGksIGosIG5zZGlza3M7CisJaW50IGVy
cm9yLCBmZCwgaSwgaiwgbnNkaXNrczsKIAogCWlmIChhYyAhPSAxKSB7CiAJCXdhcm54KCJzaG93
IGNvbmZpZzogZXh0cmEgYXJndW1lbnRzIik7CkBAIC0yOTIsMjAgKzI5NCwyMyBAQAogCiAJZmQg
PSBtcHRfb3BlbihtcHRfdW5pdCk7CiAJaWYgKGZkIDwgMCkgeworCQllcnJvciA9IGVycm5vOwog
CQl3YXJuKCJtcHRfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7
CiAJfQogCiAJLyogR2V0IHRoZSBjb25maWcgZnJvbSB0aGUgY29udHJvbGxlci4gKi8KIAlpb2My
ID0gbXB0X3JlYWRfaW9jX3BhZ2UoZmQsIDIsIE5VTEwpOwogCWlvYzUgPSBtcHRfcmVhZF9pb2Nf
cGFnZShmZCwgNSwgTlVMTCk7CiAJaWYgKGlvYzIgPT0gTlVMTCB8fCBpb2M1ID09IE5VTEwpIHsK
KwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCBjb25maWciKTsKLQkJcmV0
dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAlpZiAobXB0X2ZldGNoX2Rpc2tz
KGZkLCAmbnNkaXNrcywgJnNkaXNrcykgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4o
IkZhaWxlZCB0byBnZXQgc3RhbmRhbG9uZSBkcml2ZSBsaXN0Iik7Ci0JCXJldHVybiAoZXJybm8p
OworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAkvKiBEdW1wIG91dCB0aGUgY29uZmlndXJhdGlv
bi4gKi8KQEAgLTM4MSw3ICszODYsNyBAQAogCUNPTkZJR19QQUdFX0lPQ18yX1JBSURfVk9MICp2
b2w7CiAJQ09ORklHX1BBR0VfUkFJRF9WT0xfMCAqKnZvbHVtZXM7CiAJQ09ORklHX1BBR0VfUkFJ
RF9WT0xfMSAqdm5hbWVzOwotCWludCBmZCwgaSwgbGVuLCBzdGF0ZV9sZW47CisJaW50IGVycm9y
LCBmZCwgaSwgbGVuLCBzdGF0ZV9sZW47CiAKIAlpZiAoYWMgIT0gMSkgewogCQl3YXJueCgic2hv
dyB2b2x1bWVzOiBleHRyYSBhcmd1bWVudHMiKTsKQEAgLTM5MCwxNSArMzk1LDE3IEBACiAKIAlm
ZCA9IG1wdF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87
CiAJCXdhcm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9y
KTsKIAl9CiAKIAkvKiBHZXQgdGhlIHZvbHVtZSBsaXN0IGZyb20gdGhlIGNvbnRyb2xsZXIuICov
CiAJaW9jMiA9IG1wdF9yZWFkX2lvY19wYWdlKGZkLCAyLCBOVUxMKTsKIAlpZiAoaW9jMiA9PSBO
VUxMKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBnZXQgdm9sdW1lIGxp
c3QiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCS8qCkBA
IC00NjYsNyArNDczLDcgQEAKIHsKIAlzdHJ1Y3QgbXB0X2RyaXZlX2xpc3QgKmxpc3Q7CiAJc3Ry
dWN0IG1wdF9zdGFuZGFsb25lX2Rpc2sgKnNkaXNrczsKLQlpbnQgZmQsIGksIGxlbiwgbnNkaXNr
cywgc3RhdGVfbGVuOworCWludCBlcnJvciwgZmQsIGksIGxlbiwgbnNkaXNrcywgc3RhdGVfbGVu
OwogCiAJaWYgKGFjICE9IDEpIHsKIAkJd2FybngoInNob3cgZHJpdmVzOiBleHRyYSBhcmd1bWVu
dHMiKTsKQEAgLTQ3NSwxNSArNDgyLDE3IEBACiAKIAlmZCA9IG1wdF9vcGVuKG1wdF91bml0KTsK
IAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1wdF9vcGVuIik7Ci0J
CXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAkvKiBHZXQgdGhlIGRy
aXZlIGxpc3QuICovCiAJbGlzdCA9IG1wdF9wZF9saXN0KGZkKTsKIAlpZiAobGlzdCA9PSBOVUxM
KSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBnZXQgZHJpdmUgbGlzdCIp
OwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJLyogRmV0Y2gg
dGhlIGxpc3Qgb2Ygc3RhbmRhbG9uZSBkaXNrcyBmb3IgdGhpcyBjb250cm9sbGVyLiAqLwpAQCAt
NTM4LDggKzU0Nyw5IEBACiAKIAlmZCA9IG1wdF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQgPCAw
KSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAoZXJy
bm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAkvKiBUcnkgdG8gZmluZCBlYWNoIHBvc3Np
YmxlIHBoeXMgZGlzayBwYWdlLiAqLwpJbmRleDogdXNyLnNiaW4vbXB0dXRpbC9tcHRfY21kLmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gdXNyLnNiaW4vbXB0dXRpbC9tcHRfY21kLmMJKHJldmlzaW9uIDIxNDU2
OCkKKysrIHVzci5zYmluL21wdHV0aWwvbXB0X2NtZC5jCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEs
NyArMjIxLDcgQEAKIGNvbnN0IGNoYXIgKgogbXB0X2lvY19zdGF0dXMoVTE2IElPQ1N0YXR1cykK
IHsKLQlzdGF0aWMgY2hhciBidWZmZXJbMTZdOworCXN0YXRpYyBjaGFyIGJ1ZmZlclsxNV07CiAK
IAlJT0NTdGF0dXMgJj0gTVBJX0lPQ1NUQVRVU19NQVNLOwogCWlmIChJT0NTdGF0dXMgPCBzaXpl
b2YobXB0X2lvY19zdGF0dXNfY29kZXMpIC8gc2l6ZW9mKGNoYXIgKikgJiYKQEAgLTIzNCw3ICsy
MzQsNyBAQAogY29uc3QgY2hhciAqCiBtcHRfcmFpZF9zdGF0dXMoVTE2IEFjdGlvblN0YXR1cykK
IHsKLQlzdGF0aWMgY2hhciBidWZmZXJbMTZdOworCXN0YXRpYyBjaGFyIGJ1ZmZlclsxNV07CiAK
IAlpZiAoQWN0aW9uU3RhdHVzIDwgc2l6ZW9mKG1wdF9yYWlkX2FjdGlvbl9zdGF0dXNfY29kZXMp
IC8KIAkgICAgc2l6ZW9mKGNoYXIgKikpCkBAIC0yNDYsNyArMjQ2LDYgQEAKIGNvbnN0IGNoYXIg
KgogbXB0X3JhaWRfbGV2ZWwoVTggVm9sdW1lVHlwZSkKIHsKLQlzdGF0aWMgY2hhciBidWZbMTZd
OwogCiAJc3dpdGNoIChWb2x1bWVUeXBlKSB7CiAJY2FzZSBNUElfUkFJRF9WT0xfVFlQRV9JUzoK
QEAgLTI2MywxMCArMjYyLDEyIEBACiAJCXJldHVybiAoIlJBSUQtMTAiKTsKIAljYXNlIE1QSV9S
QUlEX1ZPTF9UWVBFX1JBSURfNTA6CiAJCXJldHVybiAoIlJBSUQtNTAiKTsKLQlkZWZhdWx0Ogor
CWRlZmF1bHQ6IHsKKwkJc3RhdGljIGNoYXIgYnVmWzldOwogCQlzcHJpbnRmKGJ1ZiwgIkxWTCAw
eCUwMngiLCBWb2x1bWVUeXBlKTsKIAkJcmV0dXJuIChidWYpOwogCX0KKwl9CiB9CiAKIGNvbnN0
IGNoYXIgKgpAQCAtMzEwLDE4ICszMTEsMTUgQEAKIAkJaWQgPSBzdHJ0b2woY3AgKyAxLCAmY3As
IDApOwogCQlpZiAoKmNwID09ICdcMCcpIHsKIAkJCWlmIChidXMgPCAwIHx8IGJ1cyA+IDB4ZmYg
fHwgaWQgPCAwIHx8IGlkID4gMHhmZikgewotCQkJCWVycm5vID0gRUlOVkFMOwotCQkJCXJldHVy
biAoLTEpOworCQkJCXJldHVybiAoRUlOVkFMKTsKIAkJCX0KIAkJCSpWb2x1bWVCdXMgPSBidXM7
CiAJCQkqVm9sdW1lSUQgPSBpZDsKIAkJCXJldHVybiAoMCk7CiAJCX0KIAl9IGVsc2UgaWYgKCpj
cCA9PSAnXDAnKSB7Ci0JCWlmIChidXMgPCAwIHx8IGJ1cyA+IDB4ZmYpIHsKLQkJCWVycm5vID0g
RUlOVkFMOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KKwkJaWYgKGJ1cyA8IDAgfHwgYnVzID4gMHhm
ZikKKwkJCXJldHVybiAoRUlOVkFMKTsKIAkJKlZvbHVtZUJ1cyA9IDA7CiAJCSpWb2x1bWVJRCA9
IGJ1czsKIAkJcmV0dXJuICgwKTsKQEAgLTMyOSw3ICszMjcsNyBAQAogCiAJaW9jMiA9IG1wdF9y
ZWFkX2lvY19wYWdlKGZkLCAyLCBOVUxMKTsKIAlpZiAoaW9jMiA9PSBOVUxMKQotCQlyZXR1cm4g
KC0xKTsKKwkJcmV0dXJuIChlcnJubyk7CiAKIAl2b2wgPSBpb2MyLT5SYWlkVm9sdW1lOwogCWZv
ciAoaSA9IDA7IGkgPCBpb2MyLT5OdW1BY3RpdmVWb2x1bWVzOyB2b2wrKywgaSsrKSB7CkBAIC0z
NDMsOCArMzQxLDcgQEAKIAkJfQogCX0KIAlmcmVlKGlvYzIpOwotCWVycm5vID0gRUlOVkFMOwot
CXJldHVybiAoLTEpOworCXJldHVybiAoRUlOVkFMKTsKIH0KIAogaW50CkBAIC0zNjAsMTUgKzM1
NywxNCBAQAogCXJlcS5oZWFkZXIuUGFnZU51bWJlciA9IFBhZ2VOdW1iZXI7CiAJcmVxLnBhZ2Vf
YWRkcmVzcyA9IFBhZ2VBZGRyZXNzOwogCWlmIChpb2N0bChmZCwgTVBUSU9fUkVBRF9DRkdfSEVB
REVSLCAmcmVxKSA8IDApCi0JCXJldHVybiAoLTEpOwotCWlmICghSU9DX1NUQVRVU19TVUNDRVNT
KHJlcS5pb2Nfc3RhdHVzKSkgeworCQlyZXR1cm4gKGVycm5vKTsKKwlpZiAoSU9DX1NUQVRVU19T
VUNDRVNTKHJlcS5pb2Nfc3RhdHVzKSA9PSAwKSB7CiAJCWlmIChJT0NTdGF0dXMgIT0gTlVMTCkK
IAkJCSpJT0NTdGF0dXMgPSByZXEuaW9jX3N0YXR1czsKIAkJZWxzZQogCQkJd2FybngoIlJlYWRp
bmcgY29uZmlnIHBhZ2UgaGVhZGVyIGZhaWxlZDogJXMiLAogCQkJICAgIG1wdF9pb2Nfc3RhdHVz
KHJlcS5pb2Nfc3RhdHVzKSk7Ci0JCWVycm5vID0gRUlPOwotCQlyZXR1cm4gKC0xKTsKKwkJcmV0
dXJuIChFSU8pOwogCX0KIAkqaGVhZGVyID0gcmVxLmhlYWRlcjsKIAlyZXR1cm4gKDApOwpAQCAt
MzgwLDcgKzM3Niw3IEBACiB7CiAJc3RydWN0IG1wdF9jZmdfcGFnZV9yZXEgcmVxOwogCXZvaWQg
KmJ1ZjsKLQlpbnQgc2F2ZV9lcnJubzsKKwlpbnQgZXJyb3I7CiAKIAlpZiAoSU9DU3RhdHVzICE9
IE5VTEwpCiAJCSpJT0NTdGF0dXMgPSBNUElfSU9DU1RBVFVTX1NVQ0NFU1M7CkBAIC0zOTAsNyAr
Mzg2LDcgQEAKIAlyZXEucGFnZV9hZGRyZXNzID0gUGFnZUFkZHJlc3M7CiAJaWYgKGlvY3RsKGZk
LCBNUFRJT19SRUFEX0NGR19IRUFERVIsICZyZXEpIDwgMCkKIAkJcmV0dXJuIChOVUxMKTsKLQlp
ZiAoIUlPQ19TVEFUVVNfU1VDQ0VTUyhyZXEuaW9jX3N0YXR1cykpIHsKKwlpZiAoSU9DX1NUQVRV
U19TVUNDRVNTKHJlcS5pb2Nfc3RhdHVzKSA9PSAwKSB7CiAJCWlmIChJT0NTdGF0dXMgIT0gTlVM
TCkKIAkJCSpJT0NTdGF0dXMgPSByZXEuaW9jX3N0YXR1czsKIAkJZWxzZQpAQCAtNDA0LDkgKzQw
MCw5IEBACiAJcmVxLmJ1ZiA9IGJ1ZjsKIAliY29weSgmcmVxLmhlYWRlciwgYnVmLCBzaXplb2Yo
cmVxLmhlYWRlcikpOwogCWlmIChpb2N0bChmZCwgTVBUSU9fUkVBRF9DRkdfUEFHRSwgJnJlcSkg
PCAwKSB7Ci0JCXNhdmVfZXJybm8gPSBlcnJubzsKKwkJZXJyb3IgPSBlcnJubzsKIAkJZnJlZShi
dWYpOwotCQllcnJubyA9IHNhdmVfZXJybm87CisJCWVycm5vID0gZXJyb3I7CiAJCXJldHVybiAo
TlVMTCk7CiAJfQogCWlmICghSU9DX1NUQVRVU19TVUNDRVNTKHJlcS5pb2Nfc3RhdHVzKSkgewpA
QCAtNDI4LDcgKzQyNCw3IEBACiB7CiAJc3RydWN0IG1wdF9leHRfY2ZnX3BhZ2VfcmVxIHJlcTsK
IAl2b2lkICpidWY7Ci0JaW50IHNhdmVfZXJybm87CisJaW50IGVycm9yOwogCiAJaWYgKElPQ1N0
YXR1cyAhPSBOVUxMKQogCQkqSU9DU3RhdHVzID0gTVBJX0lPQ1NUQVRVU19TVUNDRVNTOwpAQCAt
NDM5LDcgKzQzNSw3IEBACiAJcmVxLnBhZ2VfYWRkcmVzcyA9IFBhZ2VBZGRyZXNzOwogCWlmIChp
b2N0bChmZCwgTVBUSU9fUkVBRF9FWFRfQ0ZHX0hFQURFUiwgJnJlcSkgPCAwKQogCQlyZXR1cm4g
KE5VTEwpOwotCWlmICghSU9DX1NUQVRVU19TVUNDRVNTKHJlcS5pb2Nfc3RhdHVzKSkgeworCWlm
IChJT0NfU1RBVFVTX1NVQ0NFU1MocmVxLmlvY19zdGF0dXMpID09IDApIHsKIAkJaWYgKElPQ1N0
YXR1cyAhPSBOVUxMKQogCQkJKklPQ1N0YXR1cyA9IHJlcS5pb2Nfc3RhdHVzOwogCQllbHNlCkBA
IC00NTMsMTIgKzQ0OSwxMiBAQAogCXJlcS5idWYgPSBidWY7CiAJYmNvcHkoJnJlcS5oZWFkZXIs
IGJ1Ziwgc2l6ZW9mKHJlcS5oZWFkZXIpKTsKIAlpZiAoaW9jdGwoZmQsIE1QVElPX1JFQURfRVhU
X0NGR19QQUdFLCAmcmVxKSA8IDApIHsKLQkJc2F2ZV9lcnJubyA9IGVycm5vOworCQllcnJvciA9
IGVycm5vOwogCQlmcmVlKGJ1Zik7Ci0JCWVycm5vID0gc2F2ZV9lcnJubzsKKwkJZXJybm8gPSBl
cnJvcjsKIAkJcmV0dXJuIChOVUxMKTsKIAl9Ci0JaWYgKCFJT0NfU1RBVFVTX1NVQ0NFU1MocmVx
LmlvY19zdGF0dXMpKSB7CisJaWYgKElPQ19TVEFUVVNfU1VDQ0VTUyhyZXEuaW9jX3N0YXR1cykg
PT0gMCkgewogCQlpZiAoSU9DU3RhdHVzICE9IE5VTEwpCiAJCQkqSU9DU3RhdHVzID0gcmVxLmlv
Y19zdGF0dXM7CiAJCWVsc2UKQEAgLTQ4NCwxNiArNDgwLDE1IEBACiAJaGRyID0gYnVmOwogCXJl
cS5sZW4gPSBoZHItPlBhZ2VMZW5ndGggKiA0OwogCWlmIChpb2N0bChmZCwgTVBUSU9fV1JJVEVf
Q0ZHX1BBR0UsICZyZXEpIDwgMCkKLQkJcmV0dXJuICgtMSk7Ci0JaWYgKCFJT0NfU1RBVFVTX1NV
Q0NFU1MocmVxLmlvY19zdGF0dXMpKSB7CisJCXJldHVybiAoZXJybm8pOworCWlmIChJT0NfU1RB
VFVTX1NVQ0NFU1MocmVxLmlvY19zdGF0dXMpID09IDApIHsKIAkJaWYgKElPQ1N0YXR1cyAhPSBO
VUxMKSB7CiAJCQkqSU9DU3RhdHVzID0gcmVxLmlvY19zdGF0dXM7CiAJCQlyZXR1cm4gKDApOwog
CQl9CiAJCXdhcm54KCJXcml0aW5nIGNvbmZpZyBwYWdlIGZhaWxlZDogJXMiLAogCQkgICAgbXB0
X2lvY19zdGF0dXMocmVxLmlvY19zdGF0dXMpKTsKLQkJZXJybm8gPSBFSU87Ci0JCXJldHVybiAo
LTEpOworCQlyZXR1cm4gKEVJTyk7CiAJfQogCXJldHVybiAoMCk7CiB9CkBAIC01MDcsMTAgKzUw
Miw4IEBACiAKIAlpZiAoSU9DU3RhdHVzICE9IE5VTEwpCiAJCSpJT0NTdGF0dXMgPSBNUElfSU9D
U1RBVFVTX1NVQ0NFU1M7Ci0JaWYgKGRhdGFsZW4gPCAwIHx8ICh1bnNpZ25lZClkYXRhbGVuID4g
c2l6ZW9mKHJhaWRfYWN0LmFjdGlvbl9kYXRhKSkgewotCQllcnJubyA9IEVJTlZBTDsKLQkJcmV0
dXJuICgtMSk7Ci0JfQorCWlmIChkYXRhbGVuIDwgMCB8fCAodW5zaWduZWQpZGF0YWxlbiA+IHNp
emVvZihyYWlkX2FjdC5hY3Rpb25fZGF0YSkpCisJCXJldHVybiAoRUlOVkFMKTsKIAliemVybygm
cmFpZF9hY3QsIHNpemVvZihyYWlkX2FjdCkpOwogCXJhaWRfYWN0LmFjdGlvbiA9IEFjdGlvbjsK
IAlyYWlkX2FjdC52b2x1bWVfYnVzID0gVm9sdW1lQnVzOwpAQCAtNTI0LDE3ICs1MTcsMTYgQEAK
IAl9CiAKIAlpZiAoaW9jdGwoZmQsIE1QVElPX1JBSURfQUNUSU9OLCAmcmFpZF9hY3QpIDwgMCkK
LQkJcmV0dXJuICgtMSk7CisJCXJldHVybiAoZXJybm8pOwogCi0JaWYgKCFJT0NfU1RBVFVTX1NV
Q0NFU1MocmFpZF9hY3QuaW9jX3N0YXR1cykpIHsKKwlpZiAoSU9DX1NUQVRVU19TVUNDRVNTKHJh
aWRfYWN0LmlvY19zdGF0dXMpID09IDApIHsKIAkJaWYgKElPQ1N0YXR1cyAhPSBOVUxMKSB7CiAJ
CQkqSU9DU3RhdHVzID0gcmFpZF9hY3QuaW9jX3N0YXR1czsKIAkJCXJldHVybiAoMCk7CiAJCX0K
IAkJd2FybngoIlJBSUQgYWN0aW9uIGZhaWxlZDogJXMiLAogCQkgICAgbXB0X2lvY19zdGF0dXMo
cmFpZF9hY3QuaW9jX3N0YXR1cykpOwotCQllcnJubyA9IEVJTzsKLQkJcmV0dXJuICgtMSk7CisJ
CXJldHVybiAoRUlPKTsKIAl9CiAKIAlpZiAoQWN0aW9uU3RhdHVzICE9IE5VTEwpCkBAIC01NDQs
OCArNTM2LDcgQEAKIAkJCXJldHVybiAoMCk7CiAJCXdhcm54KCJSQUlEIGFjdGlvbiBmYWlsZWQ6
ICVzIiwKIAkJICAgIG1wdF9yYWlkX3N0YXR1cyhyYWlkX2FjdC5hY3Rpb25fc3RhdHVzKSk7Ci0J
CWVycm5vID0gRUlPOwotCQlyZXR1cm4gKC0xKTsKKwkJcmV0dXJuIChFSU8pOwogCX0KIAogCWlm
IChWb2x1bWVTdGF0dXMgIT0gTlVMTCkKSW5kZXg6IHVzci5zYmluL21wdHV0aWwvbXB0X2NvbmZp
Zy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHVzci5zYmluL21wdHV0aWwvbXB0X2NvbmZpZy5jCShyZXZpc2lv
biAyMTQ1NjgpCisrKyB1c3Iuc2Jpbi9tcHR1dGlsL21wdF9jb25maWcuYwkod29ya2luZyBjb3B5
KQpAQCAtMTA0LDEzICsxMDQsMTQgQEAKIAlpZiAoZXJyb3IpIHsKIAkJZXJybm8gPSBlcnJvcjsK
IAkJd2FybigiVW5hYmxlIHRvIGxvb2t1cCB2b2x1bWUgZGV2aWNlIG5hbWUiKTsKLQkJcmV0dXJu
ICgtMSk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0
aCksICIlcyVzIiwgX1BBVEhfREVWLCBxZC5kZXZuYW1lKTsKIAl2ZmQgPSBvcGVuKHBhdGgsIE9f
UkRXUik7CiAJaWYgKHZmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiVW5hYmxl
IHRvIGxvY2sgdm9sdW1lICVzIiwgcWQuZGV2bmFtZSk7Ci0JCXJldHVybiAoLTEpOworCQlyZXR1
cm4gKGVycm9yKTsKIAl9CiAJcmV0dXJuICgwKTsKIH0KQEAgLTExOSwxMyArMTIwLDE0IEBACiBt
cHRfbG9ja19waHlzZGlzayhzdHJ1Y3QgbXB0X3N0YW5kYWxvbmVfZGlzayAqZGlzaykKIHsKIAlj
aGFyIHBhdGhbTUFYUEFUSExFTl07Ci0JaW50IGRmZDsKKwlpbnQgZGZkLCBlcnJvcjsKIAogCXNu
cHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIiVzJXMiLCBfUEFUSF9ERVYsIGRpc2stPmRldm5h
bWUpOwogCWRmZCA9IG9wZW4ocGF0aCwgT19SRFdSKTsKIAlpZiAoZGZkIDwgMCkgeworCQllcnJv
ciA9IGVycm5vOwogCQl3YXJuKCJVbmFibGUgdG8gbG9jayBkaXNrICVzIiwgZGlzay0+ZGV2bmFt
ZSk7Ci0JCXJldHVybiAoLTEpOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJcmV0dXJuICgwKTsK
IH0KQEAgLTE0NCw4ICsxNDYsNyBAQAogCQlpZCA9IHN0cnRvbChjcCArIDEsICZjcCwgMCk7CiAJ
CWlmICgqY3AgPT0gJ1wwJykgewogCQkJaWYgKGJ1cyA8IDAgfHwgYnVzID4gMHhmZiB8fCBpZCA8
IDAgfHwgaWQgPiAweGZmKSB7Ci0JCQkJZXJybm8gPSBFSU5WQUw7Ci0JCQkJcmV0dXJuICgtMSk7
CisJCQkJcmV0dXJuIChFSU5WQUwpOwogCQkJfQogCQkJZm9yIChpID0gMDsgaSA8IG5kaXNrczsg
aSsrKSB7CiAJCQkJaWYgKGRpc2tzW2ldLmJ1cyA9PSAoVTgpYnVzICYmCkBAIC0xNTQsOCArMTU1
LDcgQEAKIAkJCQkJcmV0dXJuICgwKTsKIAkJCQl9CiAJCQl9Ci0JCQllcnJubyA9IEVOT0VOVDsK
LQkJCXJldHVybiAoLTEpOworCQkJcmV0dXJuIChFTk9FTlQpOwogCQl9CiAJfQogCkBAIC0xNjYs
MTIgKzE2NiwxMCBAQAogCQkJCXJldHVybiAoMCk7CiAJCQl9CiAJCX0KLQkJZXJybm8gPSBFTk9F
TlQ7Ci0JCXJldHVybiAoLTEpOworCQlyZXR1cm4gKEVOT0VOVCk7CiAJfQogCi0JZXJybm8gPSBF
SU5WQUw7Ci0JcmV0dXJuICgtMSk7CisJcmV0dXJuIChFSU5WQUwpOwogfQogCiAvKgpAQCAtMTgy
LDE2ICsxODAsMTcgQEAKIHsKIAlDT05GSUdfUEFHRV9IRUFERVIgaGVhZGVyOwogCUNPTkZJR19Q
QUdFX1JBSURfUEhZU19ESVNLXzAgKmNvbmZpZ19wYWdlOworCWludCBlcnJvcjsKIAlVMzIgQWN0
aW9uRGF0YTsKIAotCWlmIChtcHRfcmVhZF9jb25maWdfcGFnZV9oZWFkZXIoZmQsIE1QSV9DT05G
SUdfUEFHRVRZUEVfUkFJRF9QSFlTRElTSywKLQkgICAgMCwgMCwgJmhlYWRlciwgTlVMTCkgPCAw
KQotCQlyZXR1cm4gKC0xKTsKKwllcnJvciA9IG1wdF9yZWFkX2NvbmZpZ19wYWdlX2hlYWRlcihm
ZCwgTVBJX0NPTkZJR19QQUdFVFlQRV9SQUlEX1BIWVNESVNLLAorCSAgICAwLCAwLCAmaGVhZGVy
LCBOVUxMKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiAoZXJyb3IpOwogCWlmIChoZWFkZXIuUGFn
ZVZlcnNpb24gPiBNUElfUkFJRFBIWVNESVNLUEFHRTBfUEFHRVZFUlNJT04pIHsKIAkJd2Fybngo
IlVuc3VwcG9ydGVkIFJBSUQgcGh5c2Rpc2sgcGFnZSAwIHZlcnNpb24gJWQiLAogCQkgICAgaGVh
ZGVyLlBhZ2VWZXJzaW9uKTsKLQkJZXJybm8gPSBFT1BOT1RTVVBQOwotCQlyZXR1cm4gKC0xKTsK
KwkJcmV0dXJuIChFT1BOT1RTVVBQKTsKIAl9CQkKIAljb25maWdfcGFnZSA9IGNhbGxvYygxLCBz
aXplb2YoQ09ORklHX1BBR0VfUkFJRF9QSFlTX0RJU0tfMCkpOwogCWNvbmZpZ19wYWdlLT5IZWFk
ZXIuUGFnZVR5cGUgPSBNUElfQ09ORklHX1BBR0VUWVBFX1JBSURfUEhZU0RJU0s7CkBAIC0yMDMs
MTAgKzIwMiwxMSBAQAogCWNvbmZpZ19wYWdlLT5QaHlzRGlza0lEID0gZGlzay0+dGFyZ2V0Owog
CiAJLyogWFhYOiBFbmNsb3N1cmUgaW5mbyBmb3IgUGh5c0Rpc2tTZXR0aW5ncz8gKi8KLQlpZiAo
bXB0X3JhaWRfYWN0aW9uKGZkLCBNUElfUkFJRF9BQ1RJT05fQ1JFQVRFX1BIWVNESVNLLCAwLCAw
LCAwLCAwLAorCWVycm9yID0gbXB0X3JhaWRfYWN0aW9uKGZkLCBNUElfUkFJRF9BQ1RJT05fQ1JF
QVRFX1BIWVNESVNLLCAwLCAwLCAwLCAwLAogCSAgICBjb25maWdfcGFnZSwgc2l6ZW9mKENPTkZJ
R19QQUdFX1JBSURfUEhZU19ESVNLXzApLCBOVUxMLAotCSAgICAmQWN0aW9uRGF0YSwgc2l6ZW9m
KEFjdGlvbkRhdGEpLCBOVUxMLCBOVUxMLCAxKSA8IDApCi0JCXJldHVybiAoLTEpOworCSAgICAm
QWN0aW9uRGF0YSwgc2l6ZW9mKEFjdGlvbkRhdGEpLCBOVUxMLCBOVUxMLCAxKTsKKwlpZiAoZXJy
b3IpCisJCXJldHVybiAoZXJyb3IpOwogCSpQaHlzRGlza051bSA9IEFjdGlvbkRhdGEgJiAweGZm
OwogCXJldHVybiAoMCk7CiB9CkBAIC0yMzIsMTggKzIzMiwyMCBAQAogCUlPQ18zX1BIWVNfRElT
SyAqZGlzazsKIAlDT05GSUdfUEFHRV9JT0NfNSAqaW9jNTsKIAlJT0NfNV9IT1RfU1BBUkUgKnNw
YXJlOwotCWludCBjaCwgZmQsIGk7CisJaW50IGNoLCBlcnJvciwgZmQsIGk7CiAKIAlmZCA9IG1w
dF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdh
cm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9
CiAKIAlpb2MyID0gbXB0X3JlYWRfaW9jX3BhZ2UoZmQsIDIsIE5VTEwpOwogCWlmIChpb2MyID09
IE5VTEwpIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZldGNoIHZvbHVt
ZSBsaXN0Iik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAkv
KiBMb2NrIGFsbCB0aGUgdm9sdW1lcyBmaXJzdC4gKi8KQEAgLTI2NywxNCArMjY5LDE4IEBACiAK
IAkvKiBEZWxldGUgYWxsIHRoZSB2b2x1bWVzLiAqLwogCXZvbCA9IGlvYzItPlJhaWRWb2x1bWU7
Ci0JZm9yIChpID0gMDsgaSA8IGlvYzItPk51bUFjdGl2ZVZvbHVtZXM7IHZvbCsrLCBpKyspCi0J
CWlmIChtcHRfcmFpZF9hY3Rpb24oZmQsIE1QSV9SQUlEX0FDVElPTl9ERUxFVEVfVk9MVU1FLAor
CWZvciAoaSA9IDA7IGkgPCBpb2MyLT5OdW1BY3RpdmVWb2x1bWVzOyB2b2wrKywgaSsrKSB7CisJ
CWVycm9yID0gbXB0X3JhaWRfYWN0aW9uKGZkLCBNUElfUkFJRF9BQ1RJT05fREVMRVRFX1ZPTFVN
RSwKIAkJICAgIHZvbC0+Vm9sdW1lQnVzLCB2b2wtPlZvbHVtZUlELCAwLAogCQkgICAgTVBJX1JB
SURfQUNUSU9OX0FEQVRBX0RFTF9QSFlTX0RJU0tTIHwKIAkJICAgIE1QSV9SQUlEX0FDVElPTl9B
REFUQV9aRVJPX0xCQTAsIE5VTEwsIDAsIE5VTEwsIE5VTEwsIDAsCi0JCSAgICBOVUxMLCBOVUxM
LCAwKSA8IDApCisJCSAgICBOVUxMLCBOVUxMLCAwKTsKKwkJaWYgKGVycm9yKSB7CisJCQllcnJu
byA9IGVycm9yOwogCQkJd2FybigiRmFpbGVkIHRvIGRlbGV0ZSB2b2x1bWUgJXMiLAogCQkJICAg
IG1wdF92b2x1bWVfbmFtZSh2b2wtPlZvbHVtZUJ1cywgdm9sLT5Wb2x1bWVJRCkpOworCQl9CisJ
fQogCWZyZWUoaW9jMik7CiAKIAkvKiBEZWxldGUgYWxsIHRoZSBzcGFyZXMuICovCkBAIC00MTEs
OCArNDE3LDkgQEAKIAkJLyogU2VlIGlmIGl0IGlzIGEgc3RhbmRhbG9uZSBkaXNrLiAqLwogCQlp
ZiAobXB0X2xvb2t1cF9zdGFuZGFsb25lX2Rpc2soY3AsIHN0YXRlLT5zZGlza3MsCiAJCSAgICBz
dGF0ZS0+bnNkaXNrcywgJmkpIDwgMCkgeworCQkJZXJyb3IgPSBlcnJubzsKIAkJCXdhcm4oIlVu
YWJsZSB0byBsb29rdXAgZHJpdmUgJXMiLCBjcCk7Ci0JCQlyZXR1cm4gKGVycm5vKTsKKwkJCXJl
dHVybiAoZXJyb3IpOwogCQl9CiAJCWRpbmZvLT5zZGlzayA9ICZzdGF0ZS0+c2Rpc2tzW2ldOwog
CkBAIC00MzMsMTcgKzQ0MCwxOCBAQAogewogCXN0cnVjdCBkcml2ZV9pbmZvICpkaW5mbzsKIAlV
OCBQaHlzRGlza051bTsKLQlpbnQgaTsKKwlpbnQgZXJyb3IsIGk7CiAKIAlmb3IgKGkgPSAwLCBk
aW5mbyA9IGluZm8tPmRyaXZlczsgaSA8IGluZm8tPmRyaXZlX2NvdW50OwogCSAgICAgaSsrLCBk
aW5mbysrKSB7CiAJCWlmIChkaW5mby0+aW5mbyA9PSBOVUxMKSB7CiAJCQlpZiAobXB0X2NyZWF0
ZV9waHlzZGlzayhmZCwgZGluZm8tPnNkaXNrLAogCQkJICAgICZQaHlzRGlza051bSkgPCAwKSB7
CisJCQkJZXJyb3IgPSBlcnJubzsKIAkJCQl3YXJuKAogCQkJICAgICJGYWlsZWQgdG8gY3JlYXRl
IHBoeXNpY2FsIGRpc2sgcGFnZSBmb3IgJXMiLAogCQkJCSAgICBkaW5mby0+c2Rpc2stPmRldm5h
bWUpOwotCQkJCXJldHVybiAoZXJybm8pOworCQkJCXJldHVybiAoZXJyb3IpOwogCQkJfQogCQkJ
aWYgKHZlcmJvc2UpCiAJCQkJcHJpbnRmKCJBZGRlZCBkcml2ZSAlcyB3aXRoIFBoeXNEaXNrTnVt
ICV1XG4iLApAQCAtNTAwLDExICs1MDgsMTQgQEAKICAgICAgICAgVTMyIE1pbkxCQTsKIAl1aW50
NjRfdCBNYXhMQkE7CiAJc2l6ZV90IHBhZ2Vfc2l6ZTsKLQlpbnQgaTsKKwlpbnQgZXJyb3IsIGk7
CiAKLQlpZiAobXB0X3JlYWRfY29uZmlnX3BhZ2VfaGVhZGVyKGZkLCBNUElfQ09ORklHX1BBR0VU
WVBFX1JBSURfVk9MVU1FLAotCSAgICAwLCAwLCAmaGVhZGVyLCBOVUxMKSA8IDApCisJZXJyb3Ig
PSBtcHRfcmVhZF9jb25maWdfcGFnZV9oZWFkZXIoZmQsIE1QSV9DT05GSUdfUEFHRVRZUEVfUkFJ
RF9WT0xVTUUsCisJICAgIDAsIDAsICZoZWFkZXIsIE5VTEwpOworCWlmIChlcnJvcikgeworCQll
cnJubyA9IGVycm9yOwogCQlyZXR1cm4gKE5VTEwpOworCX0KIAlpZiAoaGVhZGVyLlBhZ2VWZXJz
aW9uID4gTVBJX1JBSURWT0xQQUdFMF9QQUdFVkVSU0lPTikgewogCQl3YXJueCgiVW5zdXBwb3J0
ZWQgUkFJRCB2b2x1bWUgcGFnZSAwIHZlcnNpb24gJWQiLAogCQkgICAgaGVhZGVyLlBhZ2VWZXJz
aW9uKTsKQEAgLTUxNCw2ICs1MjUsOCBAQAogCXBhZ2Vfc2l6ZSA9IHNpemVvZihDT05GSUdfUEFH
RV9SQUlEX1ZPTF8wKSArCiAJICAgIHNpemVvZihSQUlEX1ZPTDBfUEhZU19ESVNLKSAqIChpbmZv
LT5kcml2ZV9jb3VudCAtIDEpOwogCXZvbCA9IGNhbGxvYygxLCBwYWdlX3NpemUpOworCWlmICh2
b2wgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKIAogCS8qIEhlYWRlciAqLwogCXZvbC0+SGVh
ZGVyLlBhZ2VUeXBlID0gTVBJX0NPTkZJR19QQUdFVFlQRV9SQUlEX1ZPTFVNRTsKQEAgLTYwNyw4
ICs2MjAsOCBAQAogCUNPTkZJR19QQUdFX1JBSURfVk9MXzAgKnZvbDsKIAlzdHJ1Y3QgY29uZmln
X2lkX3N0YXRlIHN0YXRlOwogCXN0cnVjdCB2b2x1bWVfaW5mbyAqaW5mbzsKLQlpbnQgY2gsIGVy
cm9yLCBmZCwgaSwgcmFpZF90eXBlLCB2ZXJib3NlLCBxdWljazsKIAlsb25nIHN0cmlwZV9zaXpl
OworCWludCBjaCwgZXJyb3IsIGZkLCBpLCBxdWljaywgcmFpZF90eXBlLCB2ZXJib3NlOwogI2lm
ZGVmIERFQlVHCiAJaW50IGR1bXA7CiAjZW5kaWYKQEAgLTYyMCw4ICs2MzMsOSBAQAogCQogCWZk
ID0gbXB0X29wZW4obXB0X3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsK
IAkJd2FybigibXB0X29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3Ip
OwogCX0KIAogCS8qIExvb2t1cCB0aGUgUkFJRCB0eXBlIGZpcnN0LiAqLwpAQCAtNjc3LDggKzY5
MSw5IEBACiAJLyogRmV0Y2ggZXhpc3RpbmcgY29uZmlnIGRhdGEuICovCiAJc3RhdGUuaW9jMiA9
IG1wdF9yZWFkX2lvY19wYWdlKGZkLCAyLCBOVUxMKTsKIAlpZiAoc3RhdGUuaW9jMiA9PSBOVUxM
KSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byByZWFkIHZvbHVtZSBsaXN0
Iik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJc3RhdGUubGlz
dCA9IG1wdF9wZF9saXN0KGZkKTsKIAlpZiAoc3RhdGUubGlzdCA9PSBOVUxMKQpAQCAtNjk2LDYg
KzcxMSw4IEBACiAJCXJldHVybiAoRUlOVkFMKTsKIAl9CiAJaW5mbyA9IGNhbGxvYygxLCBzaXpl
b2YoKmluZm8pKTsKKwlpZiAoaW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT01FTSk7CiAJZXJy
b3IgPSBwYXJzZV92b2x1bWUoZmQsIHJhaWRfdHlwZSwgJnN0YXRlLCBhdlswXSwgaW5mbyk7CiAJ
aWYgKGVycm9yKQogCQlyZXR1cm4gKGVycm9yKTsKQEAgLTcwNyw2ICs3MjQsOCBAQAogCiAJLyog
QnVpbGQgdGhlIHZvbHVtZS4gKi8KIAl2b2wgPSBidWlsZF92b2x1bWUoZmQsIGluZm8sIHJhaWRf
dHlwZSwgc3RyaXBlX3NpemUsICZzdGF0ZSwgdmVyYm9zZSk7CisJaWYgKHZvbCA9PSBOVUxMKQor
CQlyZXR1cm4gKGVycm5vKTsKIAogI2lmZGVmIERFQlVHCiAJaWYgKGR1bXApIHsKQEAgLTcxNiwx
MiArNzM1LDEzIEBACiAjZW5kaWYKIAogCS8qIFNlbmQgdGhlIG5ldyB2b2x1bWUgdG8gdGhlIGNv
bnRyb2xsZXIuICovCi0JaWYgKG1wdF9yYWlkX2FjdGlvbihmZCwgTVBJX1JBSURfQUNUSU9OX0NS
RUFURV9WT0xVTUUsIHZvbC0+Vm9sdW1lQnVzLAorCWVycm9yID0gbXB0X3JhaWRfYWN0aW9uKGZk
LCBNUElfUkFJRF9BQ1RJT05fQ1JFQVRFX1ZPTFVNRSwgdm9sLT5Wb2x1bWVCdXMsCiAJICAgIHZv
bC0+Vm9sdW1lSUQsIDAsIHF1aWNrID8gTVBJX1JBSURfQUNUSU9OX0FEQVRBX0RPX05PVF9TWU5D
IDogMCwKLQkgICAgdm9sLCB2b2wtPkhlYWRlci5QYWdlTGVuZ3RoICogNCwgTlVMTCwgTlVMTCwg
MCwgTlVMTCwgTlVMTCwgMSkgPAotCSAgICAwKSB7CisJICAgIHZvbCwgdm9sLT5IZWFkZXIuUGFn
ZUxlbmd0aCAqIDQsIE5VTEwsIE5VTEwsIDAsIE5VTEwsIE5VTEwsIDEpOworCWlmIChlcnJvcikg
eworCQllcnJubyA9IGVycm9yOwogCQl3YXJuKCJGYWlsZWQgdG8gYWRkIHZvbHVtZSIpOwotCQly
ZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAjaWZkZWYgREVCVUcKQEAg
LTc0NSw3ICs3NjUsNyBAQAogZGVsZXRlX3ZvbHVtZShpbnQgYWMsIGNoYXIgKiphdikKIHsKIAlV
OCBWb2x1bWVCdXMsIFZvbHVtZUlEOwotCWludCBmZDsKKwlpbnQgZXJyb3IsIGZkOwogCiAJaWYg
KGFjICE9IDIpIHsKIAkJd2FybngoImRlbGV0ZTogdm9sdW1lIHJlcXVpcmVkIik7CkBAIC03NTQs
MjQgKzc3NCwyOSBAQAogCiAJZmQgPSBtcHRfb3BlbihtcHRfdW5pdCk7CiAJaWYgKGZkIDwgMCkg
eworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtcHRfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5v
KTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCi0JaWYgKG1wdF9sb29rdXBfdm9sdW1lKGZkLCBh
dlsxXSwgJlZvbHVtZUJ1cywgJlZvbHVtZUlEKSA8IDApIHsKKwllcnJvciA9IG1wdF9sb29rdXBf
dm9sdW1lKGZkLCBhdlsxXSwgJlZvbHVtZUJ1cywgJlZvbHVtZUlEKTsKKwlpZiAoZXJyb3IpIHsK
KwkJZXJybm8gPSBlcnJvcjsKIAkJd2FybigiSW52YWxpZCB2b2x1bWUgJXMiLCBhdlsxXSk7Ci0J
CXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAobXB0X2xvY2tf
dm9sdW1lKFZvbHVtZUJ1cywgVm9sdW1lSUQpIDwgMCkKIAkJcmV0dXJuIChlcnJubyk7CiAKLQlp
ZiAobXB0X3JhaWRfYWN0aW9uKGZkLCBNUElfUkFJRF9BQ1RJT05fREVMRVRFX1ZPTFVNRSwgVm9s
dW1lQnVzLAorCWVycm9yID0gbXB0X3JhaWRfYWN0aW9uKGZkLCBNUElfUkFJRF9BQ1RJT05fREVM
RVRFX1ZPTFVNRSwgVm9sdW1lQnVzLAogCSAgICBWb2x1bWVJRCwgMCwgTVBJX1JBSURfQUNUSU9O
X0FEQVRBX0RFTF9QSFlTX0RJU0tTIHwKIAkgICAgTVBJX1JBSURfQUNUSU9OX0FEQVRBX1pFUk9f
TEJBMCwgTlVMTCwgMCwgTlVMTCwgTlVMTCwgMCwgTlVMTCwKLQkgICAgTlVMTCwgMCkgPCAwKSB7
CisJICAgIE5VTEwsIDApOworCWlmIChlcnJvcikgeworCQllcnJubyA9IGVycm9yOwogCQl3YXJu
KCJGYWlsZWQgdG8gZGVsZXRlIHZvbHVtZSIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJu
IChlcnJvcik7CiAJfQogCiAJbXB0X3Jlc2Nhbl9idXMoLTEsIC0xKTsKQEAgLTc4OCwxNiArODEz
LDE4IEBACiAJQ09ORklHX1BBR0VfSU9DXzIgKmlvYzI7CiAJQ09ORklHX1BBR0VfSU9DXzJfUkFJ
RF9WT0wgKnZvbDsKIAlVOCBWb2x1bWVCdXMsIFZvbHVtZUlEOwotCWludCBpLCBqLCBuZXdfcG9v
bCwgcG9vbF9jb3VudFs3XTsKKwlpbnQgZXJyb3IsIGksIGosIG5ld19wb29sLCBwb29sX2NvdW50
WzddOwogCi0JaWYgKG1wdF9sb29rdXBfdm9sdW1lKGZkLCBuYW1lLCAmVm9sdW1lQnVzLCAmVm9s
dW1lSUQpIDwgMCkgeworCWVycm9yID0gbXB0X2xvb2t1cF92b2x1bWUoZmQsIG5hbWUsICZWb2x1
bWVCdXMsICZWb2x1bWVJRCk7CisJaWYgKGVycm9yKSB7CisJCWVycm5vID0gZXJyb3I7CiAJCXdh
cm4oIkludmFsaWQgdm9sdW1lICVzIiwgbmFtZSk7Ci0JCXJldHVybiAoLTEpOworCQlyZXR1cm4g
KGVycm9yKTsKIAl9CiAKIAlpbmZvID0gbXB0X3ZvbF9pbmZvKGZkLCBWb2x1bWVCdXMsIFZvbHVt
ZUlELCBOVUxMKTsKIAlpZiAoaW5mbyA9PSBOVUxMKQotCQlyZXR1cm4gKC0xKTsKKwkJcmV0dXJu
IChlcnJubyk7CiAKIAkvKgogCSAqIENoZWNrIGZvciBhbiBleGlzdGluZyBwb29sIG90aGVyIHRo
YW4gcG9vbCAwICh1c2VkIGZvcgpAQCAtODE3LDE1ICs4NDQsMTYgQEAKIAkgKi8KIAlpb2MyID0g
bXB0X3JlYWRfaW9jX3BhZ2UoZmQsIDIsIE5VTEwpOwogCWlmIChpb2MyID09IE5VTEwpIHsKKwkJ
ZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZldGNoIHZvbHVtZSBsaXN0Iik7Ci0J
CXJldHVybiAoLTEpOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJYnplcm8ocG9vbF9jb3VudCwg
c2l6ZW9mKHBvb2xfY291bnQpKTsJCiAJdm9sID0gaW9jMi0+UmFpZFZvbHVtZTsKIAlmb3IgKGkg
PSAwOyBpIDwgaW9jMi0+TnVtQWN0aXZlVm9sdW1lczsgdm9sKyssIGkrKykgewogCQlpbmZvID0g
bXB0X3ZvbF9pbmZvKGZkLCB2b2wtPlZvbHVtZUJ1cywgdm9sLT5Wb2x1bWVJRCwgTlVMTCk7CiAJ
CWlmIChpbmZvID09IE5VTEwpCi0JCQlyZXR1cm4gKC0xKTsKKwkJCXJldHVybiAoZXJybm8pOwog
CQlmb3IgKGogPSAwOyBqIDwgNzsgaisrKQogCQkJaWYgKGluZm8tPlZvbHVtZVNldHRpbmdzLkhv
dFNwYXJlUG9vbCAmICgxIDw8IChqICsgMSkpKQogCQkJCXBvb2xfY291bnRbal0rKzsKQEAgLTg0
MywxNCArODcxLDE1IEBACiAJLyogQWRkIHRoaXMgcG9vbCB0byB0aGUgdm9sdW1lLiAqLwogCWlu
Zm8gPSBtcHRfdm9sX2luZm8oZmQsIFZvbHVtZUJ1cywgVm9sdW1lSUQsIE5VTEwpOwogCWlmIChp
bmZvID09IE5VTEwpCi0JCXJldHVybiAoLTEpOworCQlyZXR1cm4gKGVycm9yKTsKIAlpbmZvLT5W
b2x1bWVTZXR0aW5ncy5Ib3RTcGFyZVBvb2wgfD0gKDEgPDwgbmV3X3Bvb2wpOwotCWlmIChtcHRf
cmFpZF9hY3Rpb24oZmQsIE1QSV9SQUlEX0FDVElPTl9DSEFOR0VfVk9MVU1FX1NFVFRJTkdTLAor
CWVycm9yID0gbXB0X3JhaWRfYWN0aW9uKGZkLCBNUElfUkFJRF9BQ1RJT05fQ0hBTkdFX1ZPTFVN
RV9TRVRUSU5HUywKIAkgICAgVm9sdW1lQnVzLCBWb2x1bWVJRCwgMCwgKihVMzIgKikmaW5mby0+
Vm9sdW1lU2V0dGluZ3MsIE5VTEwsIDAsCi0JICAgIE5VTEwsIE5VTEwsIDAsIE5VTEwsIE5VTEws
IDApIDwgMCkgeworCSAgICBOVUxMLCBOVUxMLCAwLCBOVUxMLCBOVUxMLCAwKTsKKwlpZiAoZXJy
b3IpIHsKIAkJd2FybngoIkZhaWxlZCB0byBhZGQgc3BhcmUgcG9vbCAlZCB0byAlcyIsIG5ld19w
b29sLAogCQkgICAgbXB0X3ZvbHVtZV9uYW1lKFZvbHVtZUJ1cywgVm9sdW1lSUQpKTsKLQkJcmV0
dXJuICgtMSk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAlmcmVlKGluZm8pOwogCkBAIC04Nzgs
MTMgKzkwNywxNSBAQAogCiAJZmQgPSBtcHRfb3BlbihtcHRfdW5pdCk7CiAJaWYgKGZkIDwgMCkg
eworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtcHRfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5v
KTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJaWYgKGFjID09IDMpIHsKLQkJaWYgKGZpbmRf
dm9sdW1lX3NwYXJlX3Bvb2woZmQsIGF2WzJdLCAmcG9vbCkgPCAwKQotCQkJcmV0dXJuIChlcnJu
byk7CisJCWVycm9yID0gZmluZF92b2x1bWVfc3BhcmVfcG9vbChmZCwgYXZbMl0sICZwb29sKTsK
KwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIChlcnJvcik7CiAJfSBlbHNlCiAJCXBvb2wgPSBNUElf
UkFJRF9IT1RfU1BBUkVfUE9PTF8wOwogCkBAIC05MDIsMTYgKzkzMywxOCBAQAogCiAJCWlmICht
cHRfbG9va3VwX3N0YW5kYWxvbmVfZGlzayhhdlsxXSwgc2Rpc2tzLCBuc2Rpc2tzLCAmaSkgPAog
CQkgICAgMCkgeworCQkJZXJyb3IgPSBlcnJubzsKIAkJCXdhcm4oIlVuYWJsZSB0byBsb29rdXAg
ZHJpdmUgJXMiLCBhdlsxXSk7Ci0JCQlyZXR1cm4gKGVycm5vKTsKKwkJCXJldHVybiAoZXJyb3Ip
OwogCQl9CiAKIAkJaWYgKG1wdF9sb2NrX3BoeXNkaXNrKCZzZGlza3NbaV0pIDwgMCkKIAkJCXJl
dHVybiAoZXJybm8pOwogCiAJCWlmIChtcHRfY3JlYXRlX3BoeXNkaXNrKGZkLCAmc2Rpc2tzW2ld
LCAmUGh5c0Rpc2tOdW0pIDwgMCkgeworCQkJZXJyb3IgPSBlcnJubzsKIAkJCXdhcm4oIkZhaWxl
ZCB0byBjcmVhdGUgcGh5c2ljYWwgZGlzayBwYWdlIik7Ci0JCQlyZXR1cm4gKGVycm5vKTsKKwkJ
CXJldHVybiAoZXJyb3IpOwogCQl9CiAJCWZyZWUoc2Rpc2tzKTsKIAl9CkBAIC05MTksOCArOTUy
LDkgQEAKIAogCWluZm8gPSBtcHRfcGRfaW5mbyhmZCwgUGh5c0Rpc2tOdW0sIE5VTEwpOwogCWlm
IChpbmZvID09IE5VTEwpIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZl
dGNoIGRyaXZlIGluZm8iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwog
CX0KIAogCWluZm8tPlBoeXNEaXNrU2V0dGluZ3MuSG90U3BhcmVQb29sID0gcG9vbDsKQEAgLTky
OCw4ICs5NjIsOSBAQAogCSAgICAwLCBQaHlzRGlza051bSwgKihVMzIgKikmaW5mby0+UGh5c0Rp
c2tTZXR0aW5ncywgTlVMTCwgMCwgTlVMTCwKIAkgICAgTlVMTCwgMCwgTlVMTCwgTlVMTCwgMCk7
CiAJaWYgKGVycm9yKSB7CisJCWVycm5vID0gZXJyb3I7CiAJCXdhcm4oIkZhaWxlZCB0byBhc3Np
Z24gc3BhcmUiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAog
CWZyZWUoaW5mbyk7CkBAIC05NTQsOCArOTg5LDkgQEAKIAogCWZkID0gbXB0X29wZW4obXB0X3Vu
aXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibXB0X29wZW4i
KTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWxpc3QgPSBt
cHRfcGRfbGlzdChmZCk7CkBAIC05NzIsOCArMTAwOCw5IEBACiAJCiAJaW5mbyA9IG1wdF9wZF9p
bmZvKGZkLCBQaHlzRGlza051bSwgTlVMTCk7CiAJaWYgKGluZm8gPT0gTlVMTCkgeworCQllcnJv
ciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gZmV0Y2ggZHJpdmUgaW5mbyIpOwotCQlyZXR1
cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJaWYgKGluZm8tPlBoeXNEaXNr
U2V0dGluZ3MuSG90U3BhcmVQb29sID09IDApIHsKQEAgLTk4MiwxMSArMTAxOSwxNCBAQAogCX0K
IAogCWlmIChtcHRfZGVsZXRlX3BoeXNkaXNrKGZkLCBQaHlzRGlza051bSkgPCAwKSB7CisJCWVy
cm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBkZWxldGUgcGh5c2ljYWwgZGlzayBwYWdl
Iik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKLQltcHRfcmVz
Y2FuX2J1cyhpbmZvLT5QaHlzRGlza0J1cywgaW5mby0+UGh5c0Rpc2tJRCk7CisJZXJyb3IgPSBt
cHRfcmVzY2FuX2J1cyhpbmZvLT5QaHlzRGlza0J1cywgaW5mby0+UGh5c0Rpc2tJRCk7CisJaWYg
KGVycm9yKQorCQlyZXR1cm4gKGVycm9yKTsKIAlmcmVlKGluZm8pOwogCWNsb3NlKGZkKTsKIApA
QCAtMTAxMSw4ICsxMDUxLDkgQEAKIAogCWZkID0gbXB0X29wZW4obXB0X3VuaXQpOwogCWlmIChm
ZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibXB0X29wZW4iKTsKLQkJcmV0dXJu
IChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWVycm9yID0gbXB0X2ZldGNoX2Rp
c2tzKGZkLCAmbmRpc2tzLCAmZGlza3MpOwpAQCAtMTAyMiwxNiArMTA2MywxOCBAQAogCX0KIAog
CWlmIChtcHRfbG9va3VwX3N0YW5kYWxvbmVfZGlzayhhdlsxXSwgZGlza3MsIG5kaXNrcywgJmkp
IDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJVbmFibGUgdG8gbG9va3VwIGRyaXZl
Iik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAobXB0
X2xvY2tfcGh5c2Rpc2soJmRpc2tzW2ldKSA8IDApCiAJCXJldHVybiAoZXJybm8pOwogCiAJaWYg
KG1wdF9jcmVhdGVfcGh5c2Rpc2soZmQsICZkaXNrc1tpXSwgJlBoeXNEaXNrTnVtKSA8IDApIHsK
KwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGNyZWF0ZSBwaHlzaWNhbCBkaXNr
IHBhZ2UiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAlmcmVl
KGRpc2tzKTsKIApAQCAtMTA0OCw3ICsxMDkxLDcgQEAKIHsKIAlDT05GSUdfUEFHRV9SQUlEX1BI
WVNfRElTS18wICppbmZvOwogCXN0cnVjdCBtcHRfZHJpdmVfbGlzdCAqbGlzdDsKLQlpbnQgZmQ7
CisJaW50IGVycm9yLCBmZDsKIAlVOCBQaHlzRGlza051bTsKIAogCWlmIChhYyAhPSAyKSB7CkBA
IC0xMDU4LDggKzExMDEsOSBAQAogCiAJZmQgPSBtcHRfb3BlbihtcHRfdW5pdCk7CiAJaWYgKGZk
IDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtcHRfb3BlbiIpOwotCQlyZXR1cm4g
KGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJbGlzdCA9IG1wdF9wZF9saXN0KGZk
KTsKQEAgLTEwNjcsMjMgKzExMTEsMjggQEAKIAkJcmV0dXJuIChlcnJubyk7CiAKIAlpZiAobXB0
X2xvb2t1cF9kcml2ZShsaXN0LCBhdlsxXSwgJlBoeXNEaXNrTnVtKSA8IDApIHsKKwkJZXJyb3Ig
PSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZpbmQgZHJpdmUgJXMiLCBhdlsxXSk7Ci0JCXJl
dHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJbXB0X2ZyZWVfcGRfbGlzdChs
aXN0KTsKIAogCWluZm8gPSBtcHRfcGRfaW5mbyhmZCwgUGh5c0Rpc2tOdW0sIE5VTEwpOwogCWlm
IChpbmZvID09IE5VTEwpIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZl
dGNoIGRyaXZlIGluZm8iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwog
CX0KIAogCWlmIChtcHRfZGVsZXRlX3BoeXNkaXNrKGZkLCBQaHlzRGlza051bSkgPCAwKSB7CisJ
CWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBkZWxldGUgcGh5c2ljYWwgZGlzayBw
YWdlIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKLQltcHRf
cmVzY2FuX2J1cyhpbmZvLT5QaHlzRGlza0J1cywgaW5mby0+UGh5c0Rpc2tJRCk7CisJZXJyb3Ig
PSBtcHRfcmVzY2FuX2J1cyhpbmZvLT5QaHlzRGlza0J1cywgaW5mby0+UGh5c0Rpc2tJRCk7CisJ
aWYgKGVycm9yKQorCQlyZXR1cm4gKGVycm9yKTsKIAlmcmVlKGluZm8pOwogCWNsb3NlKGZkKTsK
IApAQCAtMTEyNiw3ICsxMTc1LDcgQEAKIHsKIAlDT05GSUdfUEFHRV9SQUlEX1ZPTF8wICp2b2w7
CiAJVTggVm9sdW1lQnVzLCBWb2x1bWVJRDsKLQlpbnQgZmQ7CisJaW50IGVycm9yLCBmZDsKIAog
CWlmIChhYyAhPSAyKSB7CiAJCXdhcm54KCJkZWJ1Zzogdm9sdW1lIHJlcXVpcmVkIik7CkBAIC0x
MTM1LDE5ICsxMTg0LDIzIEBACiAKIAlmZCA9IG1wdF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQg
PCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAo
ZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKLQlpZiAobXB0X2xvb2t1cF92b2x1bWUo
ZmQsIGF2WzFdLCAmVm9sdW1lQnVzLCAmVm9sdW1lSUQpIDwgMCkgeworCWVycm9yID0gbXB0X2xv
b2t1cF92b2x1bWUoZmQsIGF2WzFdLCAmVm9sdW1lQnVzLCAmVm9sdW1lSUQpOworCWlmIChlcnJv
cikgeworCQllcnJubyA9IGVycm9yOwogCQl3YXJuKCJJbnZhbGlkIHZvbHVtZTogJXMiLCBhdlsx
XSk7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAl2b2wgPSBt
cHRfdm9sX2luZm8oZmQsIFZvbHVtZUJ1cywgVm9sdW1lSUQsIE5VTEwpOwogCWlmICh2b2wgPT0g
TlVMTCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gZ2V0IHZvbHVtZSBp
bmZvIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlkdW1w
X2NvbmZpZyh2b2wpOwpJbmRleDogdXNyLnNiaW4vbXB0dXRpbC9tcHRfdm9sdW1lLmMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gdXNyLnNiaW4vbXB0dXRpbC9tcHRfdm9sdW1lLmMJKHJldmlzaW9uIDIxNDU2OCkK
KysrIHVzci5zYmluL21wdHV0aWwvbXB0X3ZvbHVtZS5jCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3
ICs0Nyw2IEBACiBjb25zdCBjaGFyICoKIG1wdF92b2xzdGF0ZShVOCBTdGF0ZSkKIHsKLQlzdGF0
aWMgY2hhciBidWZbMTZdOwogCiAJc3dpdGNoIChTdGF0ZSkgewogCWNhc2UgTVBJX1JBSURWT0ww
X1NUQVRVU19TVEFURV9PUFRJTUFMOgpAQCAtNTgsMTAgKzU3LDEyIEBACiAJCXJldHVybiAoIkZB
SUxFRCIpOwogCWNhc2UgTVBJX1JBSURWT0wwX1NUQVRVU19TVEFURV9NSVNTSU5HOgogCQlyZXR1
cm4gKCJNSVNTSU5HIik7Ci0JZGVmYXVsdDoKKwlkZWZhdWx0OiB7CisJCXN0YXRpYyBjaGFyIGJ1
ZiBbMTJdOwogCQlzcHJpbnRmKGJ1ZiwgIlZTVEFURSAweCUwMngiLCBTdGF0ZSk7CiAJCXJldHVy
biAoYnVmKTsKIAl9CisJfQogfQogCiBzdGF0aWMgaW50CkBAIC02OSw3ICs3MCw3IEBACiB7CiAJ
Q09ORklHX1BBR0VfUkFJRF9WT0xfMSAqdm5hbWVzOwogCVU4IFZvbHVtZUJ1cywgVm9sdW1lSUQ7
Ci0JaW50IGZkOworCWludCBlcnJvciwgZmQ7CiAKIAlpZiAoYWMgIT0gMykgewogCQl3YXJueCgi
bmFtZTogdm9sdW1lIGFuZCBuYW1lIHJlcXVpcmVkIik7CkBAIC04MywxOSArODQsMjMgQEAKIAog
CWZkID0gbXB0X29wZW4obXB0X3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJu
bzsKIAkJd2FybigibXB0X29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJy
b3IpOwogCX0KIAotCWlmIChtcHRfbG9va3VwX3ZvbHVtZShmZCwgYXZbMV0sICZWb2x1bWVCdXMs
ICZWb2x1bWVJRCkgPCAwKSB7CisJZXJyb3IgPSBtcHRfbG9va3VwX3ZvbHVtZShmZCwgYXZbMV0s
ICZWb2x1bWVCdXMsICZWb2x1bWVJRCk7CisJaWYgKGVycm9yKSB7CisJCWVycm5vID0gZXJyb3I7
CiAJCXdhcm4oIkludmFsaWQgdm9sdW1lOiAlcyIsIGF2WzFdKTsKLQkJcmV0dXJuIChlcnJubyk7
CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCXZuYW1lcyA9IG1wdF92b2xfbmFtZXMoZmQsIFZv
bHVtZUJ1cywgVm9sdW1lSUQsIE5VTEwpOwogCWlmICh2bmFtZXMgPT0gTlVMTCkgeworCQllcnJv
ciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gZmV0Y2ggdm9sdW1lIG5hbWVzIik7Ci0JCXJl
dHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAodm5hbWVzLT5IZWFk
ZXIuUGFnZVR5cGUgIT0gTVBJX0NPTkZJR19QQUdFQVRUUl9DSEFOR0VBQkxFKSB7CkBAIC0xMDks
OCArMTE0LDkgQEAKIAlzdHJjcHkodm5hbWVzLT5OYW1lLCBhdlsyXSk7CiAKIAlpZiAobXB0X3dy
aXRlX2NvbmZpZ19wYWdlKGZkLCB2bmFtZXMsIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5v
OwogCQl3YXJuKCJGYWlsZWQgdG8gc2V0IHZvbHVtZSBuYW1lIik7Ci0JCXJldHVybiAoZXJybm8p
OworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlmcmVlKHZuYW1lcyk7CkBAIC0xMjgsNyArMTM0
LDcgQEAKIAl1aW50NjRfdCB0b3RhbCwgcmVtYWluaW5nOwogCWZsb2F0IHBjdDsKIAlVOCBWb2x1
bWVCdXMsIFZvbHVtZUlEOwotCWludCBmZDsKKwlpbnQgZXJyb3IsIGZkOwogCiAJaWYgKGFjICE9
IDIpIHsKIAkJd2FybngoInZvbHVtZSBzdGF0dXM6ICVzIiwgYWMgPiAyID8gImV4dHJhIGFyZ3Vt
ZW50cyIgOgpAQCAtMTM4LDIwICsxNDQsMjUgQEAKIAogCWZkID0gbXB0X29wZW4obXB0X3VuaXQp
OwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibXB0X29wZW4iKTsK
LQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAotCWlmIChtcHRfbG9v
a3VwX3ZvbHVtZShmZCwgYXZbMV0sICZWb2x1bWVCdXMsICZWb2x1bWVJRCkgPCAwKSB7CisJZXJy
b3IgPSBtcHRfbG9va3VwX3ZvbHVtZShmZCwgYXZbMV0sICZWb2x1bWVCdXMsICZWb2x1bWVJRCk7
CisJaWYgKGVycm9yKSB7CisJCWVycm5vID0gZXJyb3I7CiAJCXdhcm4oIkludmFsaWQgdm9sdW1l
OiAlcyIsIGF2WzFdKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0K
IAotCWlmIChtcHRfcmFpZF9hY3Rpb24oZmQsIE1QSV9SQUlEX0FDVElPTl9JTkRJQ0FUT1JfU1RS
VUNULCBWb2x1bWVCdXMsCisJZXJyb3IgPSBtcHRfcmFpZF9hY3Rpb24oZmQsIE1QSV9SQUlEX0FD
VElPTl9JTkRJQ0FUT1JfU1RSVUNULCBWb2x1bWVCdXMsCiAJICAgIFZvbHVtZUlELCAwLCAwLCBO
VUxMLCAwLCAmVm9sdW1lU3RhdHVzLCAoVTMyICopJnByb2csIHNpemVvZihwcm9nKSwKLQkgICAg
TlVMTCwgTlVMTCwgMCkgPCAwKSB7CisJICAgIE5VTEwsIE5VTEwsIDApOworCWlmIChlcnJvcikg
eworCQllcnJubyA9IGVycm9yOwogCQl3YXJuKCJGZXRjaGluZyB2b2x1bWUgc3RhdHVzIGZhaWxl
ZCIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJcHJpbnRm
KCJWb2x1bWUgJXMgc3RhdHVzOlxuIiwgbXB0X3ZvbHVtZV9uYW1lKFZvbHVtZUJ1cywgVm9sdW1l
SUQpKTsKQEAgLTE5MSwxMSArMjAyLDExIEBACiAJVTMyIFNldHRpbmdzLCBOZXdTZXR0aW5nczsK
IAlVOCBWb2x1bWVCdXMsIFZvbHVtZUlEOwogCWNoYXIgKnMxOwotCWludCBmZDsKKwlpbnQgZXJy
b3IsIGZkOwogCiAJaWYgKGFjICE9IDMpIHsKIAkJd2FybngoInZvbHVtZSBjYWNoZTogJXMiLCBh
YyA+IDMgPyAiZXh0cmEgYXJndW1lbnRzIiA6Ci0JCSAgICAidm9sdW1lIHJlcXVpcmVkIik7CisJ
CSAgICAibWlzc2luZyBhcmd1bWVudHMiKTsKIAkJcmV0dXJuIChFSU5WQUwpOwogCX0KIApAQCAt
MjA5LDE4ICsyMjAsMjEgQEAKIAogCWZkID0gbXB0X29wZW4obXB0X3VuaXQpOwogCWlmIChmZCA8
IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibXB0X29wZW4iKTsKLQkJcmV0dXJuIChl
cnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAotCWlmIChtcHRfbG9va3VwX3ZvbHVtZShm
ZCwgYXZbMV0sICZWb2x1bWVCdXMsICZWb2x1bWVJRCkgPCAwKSB7CisJZXJyb3IgPSBtcHRfbG9v
a3VwX3ZvbHVtZShmZCwgYXZbMV0sICZWb2x1bWVCdXMsICZWb2x1bWVJRCk7CisJaWYgKGVycm9y
KSB7CisJCWVycm5vID0gZXJyb3I7CiAJCXdhcm4oIkludmFsaWQgdm9sdW1lOiAlcyIsIGF2WzFd
KTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCXZvbHVtZSA9
IG1wdF92b2xfaW5mbyhmZCwgVm9sdW1lQnVzLCBWb2x1bWVJRCwgTlVMTCk7CiAJaWYgKHZvbHVt
ZSA9PSBOVUxMKQotCQlyZXR1cm4gKC0xKTsKKwkJcmV0dXJuIChlcnJubyk7CiAKIAlTZXR0aW5n
cyA9IHZvbHVtZS0+Vm9sdW1lU2V0dGluZ3MuU2V0dGluZ3M7CiAKQEAgLTIzMSwxOCArMjQ1LDE5
IEBACiAJCU5ld1NldHRpbmdzICY9IH4weDAxOwogCiAJaWYgKE5ld1NldHRpbmdzID09IFNldHRp
bmdzKSB7Ci0JCXdhcm54KCJ2b2x1bWUgY2FjaGUgdW5jaGFuZ2VkXG4iKTsKKwkJd2FybngoInZv
bHVtZSBjYWNoZSB1bmNoYW5nZWQiKTsKIAkJY2xvc2UoZmQpOwogCQlyZXR1cm4gKDApOwogCX0K
IAogCXZvbHVtZS0+Vm9sdW1lU2V0dGluZ3MuU2V0dGluZ3MgPSBOZXdTZXR0aW5nczsKLQlpZiAo
bXB0X3JhaWRfYWN0aW9uKGZkLCBNUElfUkFJRF9BQ1RJT05fQ0hBTkdFX1ZPTFVNRV9TRVRUSU5H
UywKKwllcnJvciA9IG1wdF9yYWlkX2FjdGlvbihmZCwgTVBJX1JBSURfQUNUSU9OX0NIQU5HRV9W
T0xVTUVfU0VUVElOR1MsCiAJICAgIFZvbHVtZUJ1cywgVm9sdW1lSUQsIDAsICooVTMyICopJnZv
bHVtZS0+Vm9sdW1lU2V0dGluZ3MsIE5VTEwsIDAsCi0JICAgIE5VTEwsIE5VTEwsIDAsIE5VTEws
IE5VTEwsIDApIDwgMCkKLQkJd2FybngoInZvbHVtZSBjYWNoZSBjaGFuZ2UgZmFpbGVkLCBlcnJu
bz0gJWRcbiIsIGVycm5vKTsKKwkgICAgTlVMTCwgTlVMTCwgMCwgTlVMTCwgTlVMTCwgMCk7CisJ
aWYgKGVycm9yKQorCQl3YXJuKCJ2b2x1bWUgY2FjaGUgY2hhbmdlIGZhaWxlZCIpOwogCiAJY2xv
c2UoZmQpOwotCXJldHVybiAoMCk7CisJcmV0dXJuIChlcnJvcik7CiB9CiBNUFRfQ09NTUFORCh2
b2x1bWUsIGNhY2hlLCB2b2x1bWVfY2FjaGUpOwpJbmRleDogdXNyLnNiaW4vbXB0dXRpbC9tcHRf
ZHJpdmUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSB1c3Iuc2Jpbi9tcHR1dGlsL21wdF9kcml2ZS5jCShyZXZp
c2lvbiAyMTQ1NjgpCisrKyB1c3Iuc2Jpbi9tcHR1dGlsL21wdF9kcml2ZS5jCSh3b3JraW5nIGNv
cHkpCkBAIC01MSw3ICs1MSw2IEBACiBjb25zdCBjaGFyICoKIG1wdF9wZHN0YXRlKENPTkZJR19Q
QUdFX1JBSURfUEhZU19ESVNLXzAgKmluZm8pCiB7Ci0Jc3RhdGljIGNoYXIgYnVmWzE2XTsKIAog
CXN3aXRjaCAoaW5mby0+UGh5c0Rpc2tTdGF0dXMuU3RhdGUpIHsKIAljYXNlIE1QSV9QSFlTRElT
SzBfU1RBVFVTX09OTElORToKQEAgLTc2LDkgKzc1LDEyIEBACiAJY2FzZSBNUElfUEhZU0RJU0sw
X1NUQVRVU19PVEhFUl9PRkZMSU5FOgogCQlyZXR1cm4gKCJPVEhFUiBPRkZMSU5FIik7CiAJZGVm
YXVsdDoKKwl7CisJCXN0YXRpYyBjaGFyIGJ1ZlsxMl07CiAJCXNwcmludGYoYnVmLCAiUFNUQVRF
IDB4JTAyeCIsIGluZm8tPlBoeXNEaXNrU3RhdHVzLlN0YXRlKTsKIAkJcmV0dXJuIChidWYpOwog
CX0KKwl9CiB9CiAKIC8qCkBAIC0xMjksNyArMTMxLDcgQEAKIAkJbGlzdC0+ZHJpdmVzW2ogKyAx
XSA9IGxpc3QtPmRyaXZlc1tqXTsKIAlsaXN0LT5kcml2ZXNbaV0gPSBtcHRfcGRfaW5mbyhmZCwg
UGh5c0Rpc2tOdW0sIE5VTEwpOwogCWlmIChsaXN0LT5kcml2ZXNbaV0gPT0gTlVMTCkKLQkJcmV0
dXJuICgtMSk7CisJCXJldHVybiAoZXJybm8pOwogCWxpc3QtPm5kcml2ZXMrKzsKIAlyZXR1cm4g
KDApOwogfQpAQCAtMTQ2LDI2ICsxNDgsMzIgQEAKIAlDT05GSUdfUEFHRV9JT0NfNSAqaW9jNTsK
IAlJT0NfNV9IT1RfU1BBUkUgKnNwYXJlOwogCXN0cnVjdCBtcHRfZHJpdmVfbGlzdCAqbGlzdDsK
LQlpbnQgY291bnQsIGksIGo7CisJaW50IGNvdW50LCBlcnJvciwgaSwgajsKIAogCWlvYzIgPSBt
cHRfcmVhZF9pb2NfcGFnZShmZCwgMiwgTlVMTCk7CiAJaWYgKGlvYzIgPT0gTlVMTCkgeworCQll
cnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gZmV0Y2ggdm9sdW1lIGxpc3QiKTsKKwkJ
ZXJybm8gPSBlcnJvcjsKIAkJcmV0dXJuIChOVUxMKTsKIAl9CiAKIAlpb2MzID0gbXB0X3JlYWRf
aW9jX3BhZ2UoZmQsIDMsIE5VTEwpOwogCWlmIChpb2MzID09IE5VTEwpIHsKKwkJZXJyb3IgPSBl
cnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZldGNoIGRyaXZlIGxpc3QiKTsKIAkJZnJlZShpb2My
KTsKKwkJZXJybm8gPSBlcnJvcjsKIAkJcmV0dXJuIChOVUxMKTsKIAl9CiAKIAlpb2M1ID0gbXB0
X3JlYWRfaW9jX3BhZ2UoZmQsIDUsIE5VTEwpOwogCWlmIChpb2M1ID09IE5VTEwpIHsKKwkJZXJy
b3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZldGNoIHNwYXJlIGxpc3QiKTsKIAkJZnJl
ZShpb2MzKTsKIAkJZnJlZShpb2MyKTsKKwkJZXJybm8gPSBlcnJvcjsKIAkJcmV0dXJuIChOVUxM
KTsKIAl9CiAKQEAgLTE4MCw3ICsxODgsOSBAQAogCQl2b2x1bWVzW2ldID0gbXB0X3ZvbF9pbmZv
KGZkLCB2b2wtPlZvbHVtZUJ1cywgdm9sLT5Wb2x1bWVJRCwKIAkJICAgIE5VTEwpOwogCQlpZiAo
dm9sdW1lc1tpXSA9PSBOVUxMKSB7CisJCQllcnJvciA9IGVycm5vOwogCQkJd2FybigiRmFpbGVk
IHRvIHJlYWQgdm9sdW1lIGluZm8iKTsKKwkJCWVycm5vID0gZXJyb3I7CiAJCQlyZXR1cm4gKE5V
TEwpOwogCQl9CiAJCWNvdW50ICs9IHZvbHVtZXNbaV0tPk51bVBoeXNEaXNrczsKQEAgLTI2NCwx
MyArMjc0LDExIEBACiAJCQkJcmV0dXJuICgwKTsKIAkJCX0KIAkJfQotCQllcnJubyA9IEVOT0VO
VDsKLQkJcmV0dXJuICgtMSk7CisJCXJldHVybiAoRU5PRU5UKTsKIAl9CiAKIGJhZDoKLQllcnJu
byA9IEVJTlZBTDsKLQlyZXR1cm4gKC0xKTsKKwlyZXR1cm4gKEVJTlZBTCk7CiB9CiAKIC8qIEJv
cnJvd2VkIGhlYXZpbHkgZnJvbSBzY3NpX2FsbC5jOnNjc2lfcHJpbnRfaW5xdWlyeSgpLiAqLwpA
QCAtMzA2LDEyICszMTQsMTMgQEAKIAlDT05GSUdfUEFHRV9SQUlEX1BIWVNfRElTS18wICppbmZv
OwogCXN0cnVjdCBtcHRfZHJpdmVfbGlzdCAqbGlzdDsKIAlVOCBQaHlzRGlza051bTsKLQlpbnQg
ZmQ7CisJaW50IGVycm9yLCBmZDsKIAogCWZkID0gbXB0X29wZW4obXB0X3VuaXQpOwogCWlmIChm
ZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibXB0X29wZW4iKTsKLQkJcmV0dXJu
IChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWxpc3QgPSBtcHRfcGRfbGlzdChm
ZCk7CkBAIC0zMTksMTYgKzMyOCwxOCBAQAogCQlyZXR1cm4gKGVycm5vKTsKIAogCWlmIChtcHRf
bG9va3VwX2RyaXZlKGxpc3QsIGRyaXZlLCAmUGh5c0Rpc2tOdW0pIDwgMCkgeworCQllcnJvciA9
IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gZmluZCBkcml2ZSAlcyIsIGRyaXZlKTsKLQkJcmV0
dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAltcHRfZnJlZV9wZF9saXN0KGxp
c3QpOwogCiAJLyogR2V0IHRoZSBpbmZvIGZvciB0aGlzIGRyaXZlLiAqLwogCWluZm8gPSBtcHRf
cGRfaW5mbyhmZCwgUGh5c0Rpc2tOdW0sIE5VTEwpOwogCWlmIChpbmZvID09IE5VTEwpIHsKKwkJ
ZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZldGNoIGluZm8gZm9yIGRyaXZlICV1
IiwgUGh5c0Rpc2tOdW0pOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJ
fQogCiAJLyogVHJ5IHRvIGNoYW5nZSB0aGUgc3RhdGUuICovCkBAIC0zMzcsMTAgKzM0OCwxMiBA
QAogCQlyZXR1cm4gKEVJTlZBTCk7CiAJfQogCi0JaWYgKG1wdF9yYWlkX2FjdGlvbihmZCwgQWN0
aW9uLCAwLCAwLCBQaHlzRGlza051bSwgMCwgTlVMTCwgMCwgTlVMTCwKLQkgICAgTlVMTCwgMCwg
TlVMTCwgTlVMTCwgMCkgPCAwKSB7CisJZXJyb3IgPSBtcHRfcmFpZF9hY3Rpb24oZmQsIEFjdGlv
biwgMCwgMCwgUGh5c0Rpc2tOdW0sIDAsIE5VTEwsIDAsIE5VTEwsCisJICAgIE5VTEwsIDAsIE5V
TEwsIE5VTEwsIDApOworCWlmIChlcnJvcikgeworCQllcnJubyA9IGVycm9yOwogCQl3YXJuKCJG
YWlsZWQgdG8gc2V0IGRyaXZlICV1IHRvICVzIiwgUGh5c0Rpc2tOdW0sIG5hbWUpOwotCQlyZXR1
cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJZnJlZShpbmZvKTsK
--0016e6567d28fde28604945df687--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTinK_gPuqke7UAusJVV6apK0w=gU3sHjBsjhd00r>