From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jbLGp-00085X-Hw for barebox@lists.infradead.org; Wed, 20 May 2020 09:44:26 +0000 From: Sascha Hauer Date: Wed, 20 May 2020 11:43:47 +0200 Message-Id: <20200520094403.12651-4-s.hauer@pengutronix.de> In-Reply-To: <20200520094403.12651-1-s.hauer@pengutronix.de> References: <20200520094403.12651-1-s.hauer@pengutronix.de> MIME-Version: 1.0 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "barebox" Errors-To: barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org Subject: [PATCH 03/19] fastboot: split generic code from USB gadget To: Barebox List Cc: Edmund Henniges , =?UTF-8?q?Daniel=20Gl=C3=B6ckner?= RnJvbTogRWRtdW5kIEhlbm5pZ2VzIDxlaEBlbWxpeC5jb20+CgpUaGUgZmFzdGJvb3Qgc3BlY2lm aWNhdGlvbiBkZXNjcmliZXMgb3RoZXIgcHJvdG9jb2xzIGJleW9uZCBVU0IuIEFsbG93CnRoZXNl IHRvIHJldXNlIHRoZSBnZW5lcmljIHBhcnRzIG9mIHRoZSBleGlzdGluZyBmYXN0Ym9vdCBjb2Rl IHdoZW4gdGhleQphcmUgaW1wbGVtZW50ZWQuCgpNb3N0IG9mIHRoZSBjaGFuZ2VzIGluIGNvbW1v bi9mYXN0Ym9vdC5jIGFyZSBkdWUgdG8gdGhlIHJlbmFtaW5nIG9mIHN0cnVjdApmX2Zhc3Rib290 ICpmX2ZiIHRvIHN0cnVjdCBmYXN0Ym9vdCAqZmIuCgpTaWduZWQtb2ZmLWJ5OiBFZG11bmQgSGVu bmlnZXMgPGVoQGVtbGl4LmNvbT4KU2lnbmVkLW9mZi1ieTogRGFuaWVsIEdsw7Zja25lciA8ZGdA ZW1saXguY29tPgpTaWduZWQtb2ZmLWJ5OiBTYXNjaGEgSGF1ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9u aXguZGU+Ci0tLQogY29tbW9uL0tjb25maWcgICAgICAgICAgICAgICAgICB8ICA0MCArKwogY29t bW9uL01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgMSArCiBjb21tb24vZmFzdGJvb3QuYyAg ICAgICAgICAgICAgIHwgOTU3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZl cnMvdXNiL2dhZGdldC9LY29uZmlnICAgICAgfCAgMzYgKy0KIGRyaXZlcnMvdXNiL2dhZGdldC9m X2Zhc3Rib290LmMgfCA5NzAgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZl cnMvdXNiL2dhZGdldC9tdWx0aS5jICAgICAgfCAgIDUgKy0KIGluY2x1ZGUvZmFzdGJvb3QuaCAg ICAgICAgICAgICAgfCAgNjYgKysrCiBpbmNsdWRlL3VzYi9mYXN0Ym9vdC5oICAgICAgICAgIHwg IDM0ICstCiBpbmNsdWRlL3VzYi9nYWRnZXQtbXVsdGkuaCAgICAgIHwgICAyICstCiA5IGZpbGVz IGNoYW5nZWQsIDExMTIgaW5zZXJ0aW9ucygrKSwgOTk5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbW1vbi9mYXN0Ym9vdC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9m YXN0Ym9vdC5oCgpkaWZmIC0tZ2l0IGEvY29tbW9uL0tjb25maWcgYi9jb21tb24vS2NvbmZpZwpp bmRleCA0NjBhYzQ4N2NiLi4xODc5NmM2ODg4IDEwMDY0NAotLS0gYS9jb21tb24vS2NvbmZpZwor KysgYi9jb21tb24vS2NvbmZpZwpAQCAtMTEzLDYgKzExMyw5IEBAIGNvbmZpZyBVU0JHQURHRVRf U1RBUlQKIGNvbmZpZyBCT09UCiAJYm9vbAogCitjb25maWcgRkFTVEJPT1RfQkFTRQorCWJvb2wK KwogbWVudSAiR2VuZXJhbCBTZXR0aW5ncyIKIAogY29uZmlnIExPQ0FMVkVSU0lPTgpAQCAtMTAw OSw2ICsxMDEyLDQzIEBAIGNvbmZpZyBQQkxfT1BURUUKIAogZW5kbWVudQogCitpZiBGQVNUQk9P VF9CQVNFCisKK21lbnUgIkFuZHJvaWQgRmFzdGJvb3QiCisKK2NvbmZpZyBGQVNUQk9PVF9TUEFS U0UKKwlib29sCisJc2VsZWN0IElNQUdFX1NQQVJTRQorCXByb21wdCAiRW5hYmxlIEZhc3Rib290 IHNwYXJzZSBpbWFnZSBzdXBwb3J0IgorCWhlbHAKKwkgIFNwYXJzZSBpbWFnZXMgYXJlIGEgd2F5 IGZvciB0aGUgZmFzdGJvb3QgcHJvdG9jb2wgdG8gd3JpdGUKKwkgIGltYWdlcyB0aGF0IGFyZSBi aWdnZXIgdGhhbiB0aGUgYXZhaWxhYmxlIG1lbW9yeS4gSWYgdW5zdXJlLAorCSAgc2F5IHllcyBo ZXJlLgorCitjb25maWcgRkFTVEJPT1RfQlVGCisJYm9vbAorCXByb21wdCAiRG93bmxvYWQgZmls ZXMgdG8gdGVtcG9yYXJ5IGJ1ZmZlciBpbnN0ZWFkIG9mIGZpbGUiCisJaGVscAorCSAgV2l0aCB0 aGlzIG9wdGlvbiBlbmFibGVkIHRoZSBmYXN0Ym9vdCBjb2RlIHdpbGwgZG93bmxvYWQgZmlsZXMg dG8gYQorCSAgdGVtcG9yYXJ5IGJ1ZmZlciBpbnN0ZWFkIG9mIGEgdGVtcG9yYXJ5IGZpbGUuIE5v cm1hbGx5IHlvdSB3YW50IHRvCisJICB1c2UgYSBmaWxlIGFzIHRoaXMgYWxzbyB3b3JrcyB3aGVu IHlvdXIgbWVtb3J5IGlzIGZyYWdtZW50ZWQuIEhvd2V2ZXIsCisJICBpbiBzb21lIHNwZWNpYWwg Y2FzZXMsIHdoZW4gdGhlIGZpbGUgY29uc3VtZXIgYWxzbyBiZXR0ZXIgY29wZXMgd2l0aAorCSAg YSBidWZmZXIsIHRoZW4gdXNpbmcgYSBidWZmZXIgbWlnaHQgYmUgYmV0dGVyLgorCisJICBTYXkg bm8gaGVyZSB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorCitjb25maWcgRkFT VEJPT1RfQ01EX09FTQorCWJvb2wKKwlwcm9tcHQgIkVuYWJsZSBPRU0gY29tbWFuZHMiCisJaGVs cAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgZmFzdGJvb3QgIm9lbSIgZ3JvdXAgb2YgY29t bWFuZHMuIFRoZXkgYWxsb3cgdG8KKwkgIGV4ZWN1dGluZyBhcmJpdHJhcnkgYmFyZWJveCBjb21t YW5kcyBhbmQgbWF5IGJlIGRpc2FibGVkIGluIHNlY3VyZQorCSAgZW52aXJvbm1lbnRzLgorCitl bmRtZW51CisKK2VuZGlmCisKIGVuZG1lbnUKIAogbWVudSAiRGVidWdnaW5nIgpkaWZmIC0tZ2l0 IGEvY29tbW9uL01ha2VmaWxlIGIvY29tbW9uL01ha2VmaWxlCmluZGV4IGMxNGFmNjkyZjkuLjUz ODU5ZDhkMTQgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9NYWtlZmlsZQorKysgYi9jb21tb24vTWFrZWZp bGUKQEAgLTY5LDYgKzY5LDcgQEAgb2JqLSQoQ09ORklHX1NFUklBTF9ERVZfQlVTKQkrPSBzZXJk ZXYubwogb2JqLSQoQ09ORklHX1VTQkdBREdFVF9TVEFSVCkJKz0gdXNiZ2FkZ2V0Lm8KIHBibC0k KENPTkZJR19QQkxfT1BURUUpCQkrPSBvcHRlZS5vCiBvYmotJChDT05GSUdfQk9PVE1fT1BURUUp CSs9IG9wdGVlLm8KK29iai0kKENPTkZJR19GQVNUQk9PVF9CQVNFKQkrPSBmYXN0Ym9vdC5vCiAK IGlmZGVmIENPTkZJR19QQVNTV09SRAogCmRpZmYgLS1naXQgYS9jb21tb24vZmFzdGJvb3QuYyBi L2NvbW1vbi9mYXN0Ym9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LmQ1OGY2OGYxYmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vZmFzdGJvb3QuYwpAQCAtMCww ICsxLDk1NyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOCAtIDIwMDkKKyAqIFdpbmRyaXZl ciwgPHd3dy53aW5kcml2ZXIuY29tPgorICogVG9tIFJpeCA8VG9tLlJpeEB3aW5kcml2ZXIuY29t PgorICoKKyAqIENvcHlyaWdodCAyMDExIFNlYmFzdGlhbiBBbmRyemVqIFNpZXdpb3IgPGJpZ2Vh c3lAbGludXRyb25peC5kZT4KKyAqCisgKiBDb3B5cmlnaHQgMjAxNCBMaW5hcm8sIEx0ZC4KKyAq IFJvYiBIZXJyaW5nIDxyb2JoQGtlcm5lbC5vcmc+CisgKgorICogQ29weXJpZ2h0IDIwMTQgU2Fz Y2hhIEhhdWVyIDxzLmhhdWVyQHBlbmd1dHJvbml4LmRlPgorICogUG9ydGVkIHRvIGJhcmVib3gK KyAqCisgKiBDb3B5cmlnaHQgMjAyMCBFZG11bmQgSGVubmlnZXMgPGVoQGVtbGl4LmNvbT4KKyAq IENvcHlyaWdodCAyMDIwIERhbmllbCBHbMO2Y2tuZXIgPGRnQGVtbGl4LmNvbT4KKyAqIFNwbGl0 IG9mZiBvZiBnZW5lcmljIHBhcnRzCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQ TC0yLjArCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KSAiZmFzdGJvb3Q6ICIgZm10CisKKyNp bmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8aW9jdGwu aD4KKyNpbmNsdWRlIDxiYnUuaD4KKyNpbmNsdWRlIDxib290bS5oPgorI2luY2x1ZGUgPGZzLmg+ CisjaW5jbHVkZSA8aW5pdC5oPgorI2luY2x1ZGUgPGxpYmZpbGUuaD4KKyNpbmNsdWRlIDx1Ymlm b3JtYXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxtYWdpY3Zhci5oPgorI2lu Y2x1ZGUgPGxpbnV4L3NpemVzLmg+CisjaW5jbHVkZSA8cHJvZ3Jlc3MuaD4KKyNpbmNsdWRlIDxl bnZpcm9ubWVudC5oPgorI2luY2x1ZGUgPGdsb2JhbHZhci5oPgorI2luY2x1ZGUgPHJlc3RhcnQu aD4KKyNpbmNsdWRlIDxjb25zb2xlX2NvdW50ZG93bi5oPgorI2luY2x1ZGUgPGltYWdlLXNwYXJz ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RhdC5oPgor I2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxmYXN0Ym9vdC5oPgorCisjZGVm aW5lIEZBU1RCT09UX1ZFUlNJT04JCSIwLjQiCisKKyNkZWZpbmUgRkFTVEJPT1RfVE1QRklMRQkJ Ii8uZmFzdGJvb3QuaW1nIgorCitzdGF0aWMgdW5zaWduZWQgaW50IGZhc3Rib290X21heF9kb3du bG9hZF9zaXplID0gU1pfOE07CisKK3N0cnVjdCBmYl92YXJpYWJsZSB7CisJY2hhciAqbmFtZTsK KwljaGFyICp2YWx1ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCitzdGF0aWMgaW5s aW5lIGJvb2wgZmFzdGJvb3RfZG93bmxvYWRfdG9fYnVmKHN0cnVjdCBmYXN0Ym9vdCAqZmIpCit7 CisJaWYgKElTX0VOQUJMRUQoQ09ORklHX0ZBU1RCT09UX0JVRikpCisJCXJldHVybiB0cnVlOwor CWVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBmYl9zZXR2YXIoc3RydWN0 IGZiX3ZhcmlhYmxlICp2YXIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7 CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl2YXItPnZhbHVlID0gYnZhc3ByaW50ZihmbXQsIGFw KTsKKwl2YV9lbmQoYXApOworfQorCitzdGF0aWMgc3RydWN0IGZiX3ZhcmlhYmxlICpmYl9hZGR2 YXIoc3RydWN0IGZhc3Rib290ICpmYiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJc3RydWN0 IGZiX3ZhcmlhYmxlICp2YXIgPSB4emFsbG9jKHNpemVvZigqdmFyKSk7CisJdmFfbGlzdCBhcDsK KworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZhci0+bmFtZSA9IGJ2YXNwcmludGYoZm10LCBhcCk7 CisJdmFfZW5kKGFwKTsKKworCWxpc3RfYWRkX3RhaWwoJnZhci0+bGlzdCwgJmZiLT52YXJpYWJs ZXMpOworCisJcmV0dXJuIHZhcjsKK30KKworc3RhdGljIGludCBmYXN0Ym9vdF9hZGRfcGFydGl0 aW9uX3ZhcmlhYmxlcyhzdHJ1Y3QgZmFzdGJvb3QgKmZiLAorCQlzdHJ1Y3QgZmlsZV9saXN0X2Vu dHJ5ICpmZW50cnkpCit7CisJc3RydWN0IHN0YXQgczsKKwlzaXplX3Qgc2l6ZSA9IDA7CisJaW50 IGZkLCByZXQ7CisJc3RydWN0IG10ZF9pbmZvX3VzZXIgbXRkaW5mbzsKKwljaGFyICp0eXBlID0g TlVMTDsKKwlzdHJ1Y3QgZmJfdmFyaWFibGUgKnZhcjsKKworCXJldCA9IHN0YXQoZmVudHJ5LT5m aWxlbmFtZSwgJnMpOworCWlmIChyZXQpIHsKKwkJZGV2aWNlX2RldGVjdF9ieV9uYW1lKGRldnBh dGhfdG9fbmFtZShmZW50cnktPmZpbGVuYW1lKSk7CisJCXJldCA9IHN0YXQoZmVudHJ5LT5maWxl bmFtZSwgJnMpOworCX0KKworCWlmIChyZXQpIHsKKwkJaWYgKGZlbnRyeS0+ZmxhZ3MgJiBGSUxF X0xJU1RfRkxBR19DUkVBVEUpIHsKKwkJCXJldCA9IDA7CisJCQl0eXBlID0gImZpbGUiOworCQkJ Z290byBvdXQ7CisJCX0KKworCQlnb3RvIG91dDsKKwl9CisKKwlmZCA9IG9wZW4oZmVudHJ5LT5m aWxlbmFtZSwgT19SRFdSKTsKKwlpZiAoZmQgPCAwKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdv dG8gb3V0OworCX0KKworCXNpemUgPSBzLnN0X3NpemU7CisKKwlyZXQgPSBpb2N0bChmZCwgTUVN R0VUSU5GTywgJm10ZGluZm8pOworCisJY2xvc2UoZmQpOworCisJaWYgKCFyZXQpIHsKKwkJc3dp dGNoIChtdGRpbmZvLnR5cGUpIHsKKwkJY2FzZSBNVERfTkFOREZMQVNIOgorCQkJdHlwZSA9ICJO QU5ELWZsYXNoIjsKKwkJCWJyZWFrOworCQljYXNlIE1URF9OT1JGTEFTSDoKKwkJCXR5cGUgPSAi Tk9SLWZsYXNoIjsKKwkJCWJyZWFrOworCQljYXNlIE1URF9VQklWT0xVTUU6CisJCQl0eXBlID0g IlVCSSI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXR5cGUgPSAiZmxhc2giOworCQkJYnJl YWs7CisJCX0KKworCQlnb3RvIG91dDsKKwl9CisKKwl0eXBlID0gImJhc2ljIjsKKwlyZXQgPSAw OworCitvdXQ6CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXZhciA9IGZiX2FkZHZhcihm YiwgInBhcnRpdGlvbi1zaXplOiVzIiwgZmVudHJ5LT5uYW1lKTsKKwlmYl9zZXR2YXIodmFyLCAi JTA4engiLCBzaXplKTsKKwl2YXIgPSBmYl9hZGR2YXIoZmIsICJwYXJ0aXRpb24tdHlwZTolcyIs IGZlbnRyeS0+bmFtZSk7CisJZmJfc2V0dmFyKHZhciwgIiVzIiwgdHlwZSk7CisKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgaW50IGZhc3Rib290X2FkZF9iYnVfdmFyaWFibGVzKHN0cnVjdCBi YnVfaGFuZGxlciAqaGFuZGxlciwgdm9pZCAqY3R4KQoreworCXN0cnVjdCBmYXN0Ym9vdCAqZmIg PSBjdHg7CisJY2hhciAqbmFtZTsKKwlpbnQgcmV0OworCisJbmFtZSA9IGJhc3ByaW50ZigiYmJ1 LSVzIiwgaGFuZGxlci0+bmFtZSk7CisKKwlyZXQgPSBmaWxlX2xpc3RfYWRkX2VudHJ5KGZiLT5m aWxlcywgbmFtZSwgaGFuZGxlci0+ZGV2aWNlZmlsZSwgMCk7CisKKwlmcmVlKG5hbWUpOworCisJ cmV0dXJuIHJldDsKK30KKworaW50IGZhc3Rib290X2dlbmVyaWNfaW5pdChzdHJ1Y3QgZmFzdGJv b3QgKmZiLCBib29sIGV4cG9ydF9iYnUpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgZmlsZV9saXN0 X2VudHJ5ICpmZW50cnk7CisJc3RydWN0IGZiX3ZhcmlhYmxlICp2YXI7CisKKwl2YXIgPSBmYl9h ZGR2YXIoZmIsICJ2ZXJzaW9uIik7CisJZmJfc2V0dmFyKHZhciwgIjAuNCIpOworCXZhciA9IGZi X2FkZHZhcihmYiwgImJvb3Rsb2FkZXItdmVyc2lvbiIpOworCWZiX3NldHZhcih2YXIsIHJlbGVh c2Vfc3RyaW5nKTsKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfRkFTVEJPT1RfU1BBUlNFKSkgewor CQl2YXIgPSBmYl9hZGR2YXIoZmIsICJtYXgtZG93bmxvYWQtc2l6ZSIpOworCQlmYl9zZXR2YXIo dmFyLCAiJXUiLCBmYXN0Ym9vdF9tYXhfZG93bmxvYWRfc2l6ZSk7CisJfQorCisJaWYgKElTX0VO QUJMRUQoQ09ORklHX0JBUkVCT1hfVVBEQVRFKSAmJiBleHBvcnRfYmJ1KQorCQliYnVfaGFuZGxl cnNfaXRlcmF0ZShmYXN0Ym9vdF9hZGRfYmJ1X3ZhcmlhYmxlcywgZmIpOworCisJZmlsZV9saXN0 X2Zvcl9lYWNoX2VudHJ5KGZiLT5maWxlcywgZmVudHJ5KSB7CisJCXJldCA9IGZhc3Rib290X2Fk ZF9wYXJ0aXRpb25fdmFyaWFibGVzKGZiLCBmZW50cnkpOworCQlpZiAocmV0KQorCQkJcmV0dXJu IHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBmYXN0Ym9vdF9nZW5lcmljX2ZyZWUo c3RydWN0IGZhc3Rib290ICpmYikKK3sKKwlzdHJ1Y3QgZmJfdmFyaWFibGUgKnZhciwgKnRtcDsK KworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2YXIsIHRtcCwgJmZiLT52YXJpYWJsZXMsIGxp c3QpIHsKKwkJZnJlZSh2YXItPm5hbWUpOworCQlmcmVlKHZhci0+dmFsdWUpOworCQlsaXN0X2Rl bCgmdmFyLT5saXN0KTsKKwkJZnJlZSh2YXIpOworCX0KKworCWZiLT5hY3RpdmUgPSBmYWxzZTsK K30KKworc3RhdGljIHN0cnVjdCBmYXN0Ym9vdCAqZ19mYjsKKwordm9pZCBmYXN0Ym9vdF9nZW5l cmljX2Nsb3NlKHN0cnVjdCBmYXN0Ym9vdCAqZmIpCit7CisJaWYgKGdfZmIgPT0gZmIpCisJCWdf ZmIgPSBOVUxMOworfQorCisvKgorICogQSAib2VtIGV4ZWMgYm9vdG0iIG9yIHNpbWlsYXIgY29t bWFuZHMgd2lsbCBzdG9wIGJhcmVib3guIFRlbGwgdGhlCisgKiBmYXN0Ym9vdCBjb21tYW5kIG9u IHRoZSBvdGhlciBzaWRlIHNvIHRoYXQgaXQgZG9lc24ndCBydW4gaW50byBhCisgKiB0aW1lb3V0 LgorICovCitzdGF0aWMgdm9pZCBmYXN0Ym9vdF9zaHV0ZG93bih2b2lkKQoreworCXN0cnVjdCBm YXN0Ym9vdCAqZmIgPSBnX2ZiOworCisJaWYgKCFmYiB8fCAhZmItPmFjdGl2ZSkKKwkJcmV0dXJu OworCisJZmFzdGJvb3RfdHhfcHJpbnQoZmIsIEZBU1RCT09UX01TR19JTkZPLCAiYmFyZWJveCBz aHV0dGluZyBkb3duIik7CisJZmFzdGJvb3RfdHhfcHJpbnQoZmIsIEZBU1RCT09UX01TR19PS0FZ LCAiIik7Cit9CisKK2Vhcmx5X2V4aXRjYWxsKGZhc3Rib290X3NodXRkb3duKTsKKworc3RhdGlj IGNoYXIgKmZhc3Rib290X21zZ1tdID0geworCVtGQVNUQk9PVF9NU0dfT0tBWV0gPSAiT0tBWSIs CisJW0ZBU1RCT09UX01TR19GQUlMXSA9ICJGQUlMIiwKKwlbRkFTVEJPT1RfTVNHX0lORk9dID0g IklORk8iLAorCVtGQVNUQk9PVF9NU0dfREFUQV0gPSAiREFUQSIsCit9OworCitpbnQgZmFzdGJv b3RfdHhfcHJpbnQoc3RydWN0IGZhc3Rib290ICpmYiwgZW51bSBmYXN0Ym9vdF9tc2dfdHlwZSB0 eXBlLAorCQkgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlzdHJ1Y3QgdmFfZm9ybWF0 IHZhZjsKKwljaGFyIGJ1Zls2NF07CisJdmFfbGlzdCBhcDsKKwlpbnQgbjsKKwljb25zdCBjaGFy ICptc2cgPSBmYXN0Ym9vdF9tc2dbdHlwZV07CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl2YWYu Zm10ID0gZm10OworCXZhZi52YSA9ICZhcDsKKworCW4gPSBzbnByaW50ZihidWYsIDY0LCAiJXMl cFYiLCBtc2csICZ2YWYpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBGQVNUQk9PVF9NU0df T0tBWToKKwkJZmItPmFjdGl2ZSA9IGZhbHNlOworCQlicmVhazsKKwljYXNlIEZBU1RCT09UX01T R19GQUlMOgorCQlmYi0+YWN0aXZlID0gZmFsc2U7CisJCXByX2VycigiJXBWXG4iLCAmdmFmKTsK KwkJYnJlYWs7CisJY2FzZSBGQVNUQk9PVF9NU0dfSU5GTzoKKwkJcHJfaW5mbygiJXBWXG4iLCAm dmFmKTsKKwkJYnJlYWs7CisJY2FzZSBGQVNUQk9PVF9NU0dfREFUQToKKwkJYnJlYWs7CisJfQor CisJdmFfZW5kKGFwKTsKKworCWlmIChuID4gNjQpCisJCW4gPSA2NDsKKworCXJldHVybiBmYi0+ d3JpdGUoZmIsIGJ1Ziwgbik7Cit9CisKK3N0YXRpYyB2b2lkIGNiX3JlYm9vdChzdHJ1Y3QgZmFz dGJvb3QgKmZiLCBjb25zdCBjaGFyICpjbWQpCit7CisJcmVzdGFydF9tYWNoaW5lKCk7Cit9CisK K3N0YXRpYyBpbnQgc3RyY21wX2wxKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMikKK3sK KwlpZiAoIXMxIHx8ICFzMikKKwkJcmV0dXJuIC0xOworCXJldHVybiBzdHJuY21wKHMxLCBzMiwg c3RybGVuKHMxKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNiX2dldHZhcihzdHJ1Y3QgZmFzdGJvb3Qg KmZiLCBjb25zdCBjaGFyICpjbWQpCit7CisJc3RydWN0IGZiX3ZhcmlhYmxlICp2YXI7CisKKwlw cl9kZWJ1ZygiZ2V0dmFyOiBcIiVzXCJcbiIsIGNtZCk7CisKKwlpZiAoIXN0cmNtcF9sMShjbWQs ICJhbGwiKSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZhciwgJmZiLT52YXJpYWJsZXMsIGxp c3QpIHsKKwkJCWZhc3Rib290X3R4X3ByaW50KGZiLCBGQVNUQk9PVF9NU0dfSU5GTywgIiVzOiAl cyIsCisJCQkJCSAgdmFyLT5uYW1lLCB2YXItPnZhbHVlKTsKKwkJfQorCQlmYXN0Ym9vdF90eF9w cmludChmYiwgRkFTVEJPT1RfTVNHX09LQVksICIiKTsKKwkJcmV0dXJuOworCX0KKworCWxpc3Rf Zm9yX2VhY2hfZW50cnkodmFyLCAmZmItPnZhcmlhYmxlcywgbGlzdCkgeworCQlpZiAoIXN0cmNt cChjbWQsIHZhci0+bmFtZSkpIHsKKwkJCWZhc3Rib290X3R4X3ByaW50KGZiLCBGQVNUQk9PVF9N U0dfT0tBWSwgdmFyLT52YWx1ZSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlmYXN0Ym9vdF90 eF9wcmludChmYiwgRkFTVEJPT1RfTVNHX09LQVksICIiKTsKK30KKworaW50IGZhc3Rib290X2hh bmRsZV9kb3dubG9hZF9kYXRhKHN0cnVjdCBmYXN0Ym9vdCAqZmIsIGNvbnN0IHZvaWQgKmJ1ZmZl ciwKKwkJCQkgIHVuc2lnbmVkIGludCBsZW4pCit7CisJaW50IHJldDsKKworCWlmIChmYXN0Ym9v dF9kb3dubG9hZF90b19idWYoZmIpKSB7CisJCW1lbWNweShmYi0+YnVmICsgZmItPmRvd25sb2Fk X2J5dGVzLCBidWZmZXIsIGxlbik7CisJfSBlbHNlIHsKKwkJcmV0ID0gd3JpdGUoZmItPmRvd25s b2FkX2ZkLCBidWZmZXIsIGxlbik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9 CisKKwlmYi0+ZG93bmxvYWRfYnl0ZXMgKz0gbGVuOworCXNob3dfcHJvZ3Jlc3MoZmItPmRvd25s b2FkX2J5dGVzKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBmYXN0Ym9vdF9kb3dubG9hZF9maW5p c2hlZChzdHJ1Y3QgZmFzdGJvb3QgKmZiKQoreworCWNsb3NlKGZiLT5kb3dubG9hZF9mZCk7CisK KwlwcmludGYoIlxuIik7CisKKwlmYXN0Ym9vdF90eF9wcmludChmYiwgRkFTVEJPT1RfTVNHX0lO Rk8sICJEb3dubG9hZGluZyAlZCBieXRlcyBmaW5pc2hlZCIsCisJCQkgIGZiLT5kb3dubG9hZF9i eXRlcyk7CisKKwlmYXN0Ym9vdF90eF9wcmludChmYiwgRkFTVEJPT1RfTVNHX09LQVksICIiKTsK K30KKworc3RhdGljIHZvaWQgY2JfZG93bmxvYWQoc3RydWN0IGZhc3Rib290ICpmYiwgY29uc3Qg Y2hhciAqY21kKQoreworCWZiLT5kb3dubG9hZF9zaXplID0gc2ltcGxlX3N0cnRvdWwoY21kLCBO VUxMLCAxNik7CisJZmItPmRvd25sb2FkX2J5dGVzID0gMDsKKworCWZhc3Rib290X3R4X3ByaW50 KGZiLCBGQVNUQk9PVF9NU0dfSU5GTywgIkRvd25sb2FkaW5nICVkIGJ5dGVzLi4uIiwKKwkJCSAg ZmItPmRvd25sb2FkX3NpemUpOworCisJaW5pdF9wcm9ncmVzc2lvbl9iYXIoZmItPmRvd25sb2Fk X3NpemUpOworCisJaWYgKGZhc3Rib290X2Rvd25sb2FkX3RvX2J1ZihmYikpIHsKKwkJZnJlZShm Yi0+YnVmKTsKKwkJZmItPmJ1ZiA9IG1hbGxvYyhmYi0+ZG93bmxvYWRfc2l6ZSk7CisJCWlmICgh ZmItPmJ1ZikgeworCQkJZmFzdGJvb3RfdHhfcHJpbnQoZmIsIEZBU1RCT09UX01TR19GQUlMLAor CQkJCQkgICJub3QgZW5vdWdoIG1lbW9yeSIpOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIHsK KwkJZmItPmRvd25sb2FkX2ZkID0gb3BlbihGQVNUQk9PVF9UTVBGSUxFLCBPX1dST05MWSB8IE9f Q1JFQVQgfCBPX1RSVU5DKTsKKwkJaWYgKGZiLT5kb3dubG9hZF9mZCA8IDApIHsKKwkJCWZhc3Ri b290X3R4X3ByaW50KGZiLCBGQVNUQk9PVF9NU0dfRkFJTCwKKwkJCQkJICAiaW50ZXJuYWwgZXJy b3IiKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWlmICghZmItPmRvd25sb2FkX3NpemUpCisJ CWZhc3Rib290X3R4X3ByaW50KGZiLCBGQVNUQk9PVF9NU0dfRkFJTCwKKwkJCQkJICAiZGF0YSBp bnZhbGlkIHNpemUiKTsKKwllbHNlCisJCWZiLT5zdGFydF9kb3dubG9hZChmYik7Cit9CisKK3Zv aWQgZmFzdGJvb3Rfc3RhcnRfZG93bmxvYWRfZ2VuZXJpYyhzdHJ1Y3QgZmFzdGJvb3QgKmZiKQor eworCWZhc3Rib290X3R4X3ByaW50KGZiLCBGQVNUQk9PVF9NU0dfREFUQSwgIiUwOHgiLCBmYi0+ ZG93bmxvYWRfc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2VkIGNiX2Jvb3Qo c3RydWN0IGZhc3Rib290ICpmYiwgY29uc3QgY2hhciAqb3B0KQoreworCWludCByZXQ7CisJc3Ry dWN0IGJvb3RtX2RhdGEgZGF0YSA9IHsKKwkJLmluaXRyZF9hZGRyZXNzID0gVUlNQUdFX0lOVkFM SURfQUREUkVTUywKKwkJLm9zX2FkZHJlc3MgPSBVSU1BR0VfU09NRV9BRERSRVNTLAorCX07CisK KwlmYXN0Ym9vdF90eF9wcmludChmYiwgRkFTVEJPT1RfTVNHX0lORk8sICJCb290aW5nIGtlcm5l bC4uXG4iKTsKKworCWdsb2JhbHZhcl9zZXRfbWF0Y2goImxpbnV4LmJvb3RhcmdzLmR5bi4iLCAi Iik7CisJZ2xvYmFsdmFyX3NldF9tYXRjaCgiYm9vdG0uaW1hZ2UiLCAiIik7CisKKwlkYXRhLm9z X2ZpbGUgPSBGQVNUQk9PVF9UTVBGSUxFOworCisJcmV0ID0gYm9vdG1fYm9vdCgmZGF0YSk7CisK KwlpZiAocmV0KQorCQlmYXN0Ym9vdF90eF9wcmludChmYiwgRkFTVEJPT1RfTVNHX0ZBSUwsICJC b290aW5nIGZhaWxlZDogJXMiLAorCQkJCSAgIHN0cmVycm9yKC1yZXQpKTsKKwllbHNlCisJCWZh c3Rib290X3R4X3ByaW50KGZiLCBGQVNUQk9PVF9NU0dfT0tBWSwgIiIpOworfQorCitzdGF0aWMg c3RydWN0IG10ZF9pbmZvICpnZXRfbXRkKHN0cnVjdCBmYXN0Ym9vdCAqZmIsIGNvbnN0IGNoYXIg KmZpbGVuYW1lKQoreworCWludCBmZCwgcmV0OworCXN0cnVjdCBtdGRfaW5mb191c2VyIG1lbWlu Zm87CisKKwlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQly ZXR1cm4gRVJSX1BUUigtZXJybm8pOworCisJcmV0ID0gaW9jdGwoZmQsIE1FTUdFVElORk8sICZt ZW1pbmZvKTsKKworCWNsb3NlKGZkKTsKKworCWlmIChyZXQpCisJCXJldHVybiBFUlJfUFRSKHJl dCk7CisKKwlyZXR1cm4gbWVtaW5mby5tdGQ7Cit9CisKK3N0YXRpYyBpbnQgZG9fdWJpZm9ybWF0 KHN0cnVjdCBmYXN0Ym9vdCAqZmIsIHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJY29uc3QgY2hh ciAqZmlsZSwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCB1Ymlmb3Jt YXRfYXJncyBhcmdzID0geworCQkueWVzID0gMSwKKwkJLmltYWdlID0gZmlsZSwKKwkJLmltYWdl X2J1ZiA9IGJ1ZiwKKwkJLmltYWdlX3NpemUgPSBsZW4sCisJfTsKKworCWlmICghZmlsZSkKKwkJ YXJncy5ub3Z0YmwgPSAxOworCisJaWYgKCFJU19FTkFCTEVEKENPTkZJR19VQklGT1JNQVQpKSB7 CisJCWZhc3Rib290X3R4X3ByaW50KGZiLCBGQVNUQk9PVF9NU0dfRkFJTCwKKwkJCQkJICAidWJp Zm9ybWF0IGlzIG5vdCBhdmFpbGFibGUiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0 dXJuIHViaWZvcm1hdChtdGQsICZhcmdzKTsKK30KKworCitzdGF0aWMgaW50IGNoZWNrX3ViaShz dHJ1Y3QgZmFzdGJvb3QgKmZiLCBzdHJ1Y3QgZmlsZV9saXN0X2VudHJ5ICpmZW50cnksCisJCSAg ICAgZW51bSBmaWxldHlwZSBmaWxldHlwZSkKK3sKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKKwor CW10ZCA9IGdldF9tdGQoZmIsIGZlbnRyeS0+ZmlsZW5hbWUpOworCisJLyoKKwkgKiBJc3N1ZSBh IHdhcm5pbmcgd2hlbiB3ZSBhcmUgYWJvdXQgdG8gd3JpdGUgYSBVQkkgaW1hZ2UgdG8gYSBNVEQg ZGV2aWNlCisJICogYW5kIHRoZSBGSUxFX0xJU1RfRkxBR19VQkkgaXMgbm90IGdpdmVuIGFzIHRo aXMgbWVhbnMgd2UgbG9vc2UgYWxsCisJICogZXJhc2UgY291bnRlcnMuCisJICovCisJaWYgKCFJ U19FUlIobXRkKSAmJiBmaWxldHlwZSA9PSBmaWxldHlwZV91YmkgJiYKKwkgICAgIShmZW50cnkt PmZsYWdzICYgRklMRV9MSVNUX0ZMQUdfVUJJKSkgeworCQlmYXN0Ym9vdF90eF9wcmludChmYiwg RkFTVEJPT1RfTVNHX0lORk8sCisJCQkJICAid3JpdGluZyBVQkkgaW1hZ2UgdG8gTVREIGRldmlj ZSwgIgorCQkJCSAgImFkZCB0aGUgJ3UnICIpOworCQlmYXN0Ym9vdF90eF9wcmludChmYiwgRkFT VEJPT1RfTVNHX0lORk8sCisJCQkJICAiZmxhZyB0byB0aGUgcGFydGl0aW9uIGRlc2NyaXB0aW9u Iik7CisJCXJldHVybiAwOworCX0KKworCWlmICghKGZlbnRyeS0+ZmxhZ3MgJiBGSUxFX0xJU1Rf RkxBR19VQkkpKQorCQlyZXR1cm4gMDsKKworCWlmICghSVNfRU5BQkxFRChDT05GSUdfVUJJRk9S TUFUKSkgeworCQlmYXN0Ym9vdF90eF9wcmludChmYiwgRkFTVEJPT1RfTVNHX0ZBSUwsCisJCQkJ ICAidWJpZm9ybWF0IG5vdCBhdmFpbGFibGUiKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCisJ aWYgKElTX0VSUihtdGQpKSB7CisJCWZhc3Rib290X3R4X3ByaW50KGZiLCBGQVNUQk9PVF9NU0df RkFJTCwKKwkJCQkgICJVQkkgZmxhZyBnaXZlbiBvbiBub24tTVREIGRldmljZSIpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZmlsZXR5cGUgPT0gZmlsZXR5cGVfdWJpKSB7CisJCWZh c3Rib290X3R4X3ByaW50KGZiLCBGQVNUQk9PVF9NU0dfSU5GTywKKwkJCQkgICJUaGlzIGlzIGEg VUJJIGltYWdlLi4uIik7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCWZhc3Rib290X3R4X3By aW50KGZiLCBGQVNUQk9PVF9NU0dfRkFJTCwKKwkJCQkgICJUaGlzIGlzIG5vIFVCSSBpbWFnZSBi dXQgJXMiLAorCQkJCSBmaWxlX3R5cGVfdG9fc3RyaW5nKGZpbGV0eXBlKSk7CisJCXJldHVybiAt RUlOVkFMOworCX0KK30KKworc3RhdGljIGludCBmYXN0Ym9vdF9oYW5kbGVfc3BhcnNlKHN0cnVj dCBmYXN0Ym9vdCAqZmIsCisJCQkJICBzdHJ1Y3QgZmlsZV9saXN0X2VudHJ5ICpmZW50cnkpCit7 CisJc3RydWN0IHNwYXJzZV9pbWFnZV9jdHggKnNwYXJzZTsKKwl2b2lkICpidWYgPSBOVUxMOwor CWludCByZXQsIGZkOworCXVuc2lnbmVkIGludCBmbGFncyA9IE9fUkRXUjsKKwlpbnQgYnVmc2l6 ID0gU1pfMTI4SzsKKwlzdHJ1Y3Qgc3RhdCBzOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gTlVM TDsKKworCXJldCA9IHN0YXQoZmVudHJ5LT5maWxlbmFtZSwgJnMpOworCWlmIChyZXQpIHsKKwkJ aWYgKGZlbnRyeS0+ZmxhZ3MgJiBGSUxFX0xJU1RfRkxBR19DUkVBVEUpCisJCQlmbGFncyB8PSBP X0NSRUFUOworCQllbHNlCisJCQlyZXR1cm4gcmV0OworCX0KKworCWZkID0gb3BlbihmZW50cnkt PmZpbGVuYW1lLCBmbGFncyk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIC1lcnJubzsKKworCXJl dCA9IGZzdGF0KGZkLCAmcyk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfY2xvc2VfZmQ7CisKKwlz cGFyc2UgPSBzcGFyc2VfaW1hZ2Vfb3BlbihGQVNUQk9PVF9UTVBGSUxFKTsKKwlpZiAoSVNfRVJS KHNwYXJzZSkpIHsKKwkJcHJfZXJyKCJDYW5ub3Qgb3BlbiBzcGFyc2UgaW1hZ2VcbiIpOworCQly ZXQgPSBQVFJfRVJSKHNwYXJzZSk7CisJCWdvdG8gb3V0X2Nsb3NlX2ZkOworCX0KKworCWlmIChT X0lTUkVHKHMuc3RfbW9kZSkpIHsKKwkJcmV0ID0gZnRydW5jYXRlKGZkLCBzcGFyc2VfaW1hZ2Vf c2l6ZShzcGFyc2UpKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKworCWJ1ZiA9IG1h bGxvYyhidWZzaXopOworCWlmICghYnVmKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0 OworCX0KKworCWlmIChmZW50cnktPmZsYWdzICYgRklMRV9MSVNUX0ZMQUdfVUJJKSB7CisJCW10 ZCA9IGdldF9tdGQoZmIsIGZlbnRyeS0+ZmlsZW5hbWUpOworCQlpZiAoSVNfRVJSKG10ZCkpIHsK KwkJCXJldCA9IFBUUl9FUlIobXRkKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJd2hpbGUg KDEpIHsKKwkJaW50IHJldGxlbjsKKwkJbG9mZl90IHBvczsKKworCQlyZXQgPSBzcGFyc2VfaW1h Z2VfcmVhZChzcGFyc2UsIGJ1ZiwgJnBvcywgYnVmc2l6LCAmcmV0bGVuKTsKKwkJaWYgKHJldCkK KwkJCWdvdG8gb3V0OworCQlpZiAoIXJldGxlbikKKwkJCWJyZWFrOworCisJCWlmIChwb3MgPT0g MCkgeworCQkJcmV0ID0gY2hlY2tfdWJpKGZiLCBmZW50cnksIGZpbGVfZGV0ZWN0X3R5cGUoYnVm LCByZXRsZW4pKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYg KGZlbnRyeS0+ZmxhZ3MgJiBGSUxFX0xJU1RfRkxBR19VQkkpIHsKKwkJCWlmICghSVNfRU5BQkxF RChDT05GSUdfVUJJRk9STUFUKSkgeworCQkJCXJldCA9IC1FTk9TWVM7CisJCQkJZ290byBvdXQ7 CisJCQl9CisKKwkJCWlmIChwb3MgPT0gMCkgeworCQkJCXJldCA9IGRvX3ViaWZvcm1hdChmYiwg bXRkLCBOVUxMLCBOVUxMLCAwKTsKKwkJCQlpZiAocmV0KQorCQkJCQlnb3RvIG91dDsKKwkJCX0K KworCQkJcmV0ID0gdWJpZm9ybWF0X3dyaXRlKG10ZCwgYnVmLCByZXRsZW4sIHBvcyk7CisJCQlp ZiAocmV0KQorCQkJCWdvdG8gb3V0OworCQl9IGVsc2UgeworCQkJZGlzY2FyZF9yYW5nZShmZCwg cmV0bGVuLCBwb3MpOworCisJCQlwb3MgPSBsc2VlayhmZCwgcG9zLCBTRUVLX1NFVCk7CisJCQlp ZiAocG9zID09IC0xKSB7CisJCQkJcmV0ID0gLWVycm5vOworCQkJCWdvdG8gb3V0OworCQkJfQor CisJCQlyZXQgPSB3cml0ZV9mdWxsKGZkLCBidWYsIHJldGxlbik7CisJCQlpZiAocmV0IDwgMCkK KwkJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXJldCA9IDA7CisKK291dDoKKwlmcmVlKGJ1Zik7 CisJc3BhcnNlX2ltYWdlX2Nsb3NlKHNwYXJzZSk7CitvdXRfY2xvc2VfZmQ6CisJY2xvc2UoZmQp OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgY2JfZmxhc2goc3RydWN0IGZhc3Ri b290ICpmYiwgY29uc3QgY2hhciAqY21kKQoreworCXN0cnVjdCBmaWxlX2xpc3RfZW50cnkgKmZl bnRyeTsKKwlpbnQgcmV0OworCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gTlVMTCwgKnNvdXJjZWZp bGU7CisJZW51bSBmaWxldHlwZSBmaWxldHlwZTsKKworCWlmIChmYXN0Ym9vdF9kb3dubG9hZF90 b19idWYoZmIpKSB7CisJCXNvdXJjZWZpbGUgPSBOVUxMOworCQlmaWxldHlwZSA9IGZpbGVfZGV0 ZWN0X3R5cGUoZmItPmJ1ZiwgZmItPmRvd25sb2FkX2J5dGVzKTsKKwl9IGVsc2UgeworCQlzb3Vy Y2VmaWxlID0gRkFTVEJPT1RfVE1QRklMRTsKKwkJZmlsZXR5cGUgPSBmaWxlX25hbWVfZGV0ZWN0 X3R5cGUoRkFTVEJPT1RfVE1QRklMRSk7CisJfQorCisJZmFzdGJvb3RfdHhfcHJpbnQoZmIsIEZB U1RCT09UX01TR19JTkZPLCAiQ29weWluZyBmaWxlIHRvICVzLi4uIiwKKwkJCSAgY21kKTsKKwor CWZlbnRyeSA9IGZpbGVfbGlzdF9lbnRyeV9ieV9uYW1lKGZiLT5maWxlcywgY21kKTsKKworCWlm ICghZmVudHJ5KSB7CisJCWZhc3Rib290X3R4X3ByaW50KGZiLCBGQVNUQk9PVF9NU0dfRkFJTCwg Ik5vIHN1Y2ggcGFydGl0aW9uOiAlcyIsCisJCQkJICBjbWQpOworCQlyZXQgPSAtRU5PRU5UOwor CQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZmItPmNtZF9mbGFzaCkgeworCQlyZXQgPSBmYi0+Y21k X2ZsYXNoKGZiLCBmZW50cnksIHNvdXJjZWZpbGUsIGZiLT5idWYsCisJCQkJICAgICAgZmItPmRv d25sb2FkX3NpemUpOworCQlpZiAocmV0ICE9IEZBU1RCT09UX0NNRF9GQUxMVEhST1VHSCkKKwkJ CWdvdG8gb3V0OworCX0KKworCWZpbGVuYW1lID0gZmVudHJ5LT5maWxlbmFtZTsKKworCWlmIChm aWxldHlwZSA9PSBmaWxldHlwZV9hbmRyb2lkX3NwYXJzZSkgeworCQlpZiAoIUlTX0VOQUJMRUQo Q09ORklHX0ZBU1RCT09UX1NQQVJTRSkgfHwKKwkJICAgIGZhc3Rib290X2Rvd25sb2FkX3RvX2J1 ZihmYikpIHsKKwkJCWZhc3Rib290X3R4X3ByaW50KGZiLCBGQVNUQk9PVF9NU0dfRkFJTCwKKwkJ CQkJICAic3BhcnNlIGltYWdlIG5vdCBzdXBwb3J0ZWQiKTsKKwkJCXJldCA9IC1FT1BOT1RTVVBQ OworCQkJZ290byBvdXQ7CisJCX0KKworCQlyZXQgPSBmYXN0Ym9vdF9oYW5kbGVfc3BhcnNlKGZi LCBmZW50cnkpOworCQlpZiAocmV0KQorCQkJZmFzdGJvb3RfdHhfcHJpbnQoZmIsIEZBU1RCT09U X01TR19GQUlMLAorCQkJCQkgICJ3cml0aW5nIHNwYXJzZSBpbWFnZTogJXMiLAorCQkJCQkgIHN0 cmVycm9yKC1yZXQpKTsKKworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBjaGVja191YmkoZmIs IGZlbnRyeSwgZmlsZXR5cGUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCWlmIChy ZXQgPiAwKSB7CisJCXN0cnVjdCBtdGRfaW5mbyAqbXRkOworCisJCW10ZCA9IGdldF9tdGQoZmIs IGZlbnRyeS0+ZmlsZW5hbWUpOworCisJCXJldCA9IGRvX3ViaWZvcm1hdChmYiwgbXRkLCBzb3Vy Y2VmaWxlLCBmYi0+YnVmLAorCQkJCSAgIGZiLT5kb3dubG9hZF9zaXplKTsKKwkJaWYgKHJldCkg eworCQkJZmFzdGJvb3RfdHhfcHJpbnQoZmIsIEZBU1RCT09UX01TR19GQUlMLAorCQkJCQkgICJ3 cml0ZSBwYXJ0aXRpb246ICVzIiwKKwkJCQkJICBzdHJlcnJvcigtcmV0KSk7CisJCQlnb3RvIG91 dDsKKwkJfQorCisJCWdvdG8gb3V0OworCX0KKworCWlmIChJU19FTkFCTEVEKENPTkZJR19CQVJF Qk9YX1VQREFURSkgJiYgZmlsZXR5cGVfaXNfYmFyZWJveF9pbWFnZShmaWxldHlwZSkpIHsKKwkJ c3RydWN0IGJidV9oYW5kbGVyICpoYW5kbGVyOworCQlzdHJ1Y3QgYmJ1X2RhdGEgZGF0YSA9IHsK KwkJCS5kZXZpY2VmaWxlID0gZmlsZW5hbWUsCisJCQkuZmxhZ3MgPSBCQlVfRkxBR19ZRVMsCisJ CX07CisKKwkJaGFuZGxlciA9IGJidV9maW5kX2hhbmRsZXJfYnlfZGV2aWNlKGRhdGEuZGV2aWNl ZmlsZSk7CisJCWlmICghaGFuZGxlcikKKwkJCWdvdG8gY29weTsKKworCQlmYXN0Ym9vdF90eF9w cmludChmYiwgRkFTVEJPT1RfTVNHX0lORk8sCisJCQkJICAiVGhpcyBpcyBhIGJhcmVib3ggaW1h Z2UuLi4iKTsKKworCQlpZiAoZmFzdGJvb3RfZG93bmxvYWRfdG9fYnVmKGZiKSkgeworCQkJZGF0 YS5sZW4gPSBmYi0+ZG93bmxvYWRfc2l6ZTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IHJlYWRfZmls ZV8yKHNvdXJjZWZpbGUsICZkYXRhLmxlbiwgJmZiLT5idWYsCisJCQkJCWZiLT5kb3dubG9hZF9z aXplKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlmYXN0Ym9vdF90eF9wcmludChmYiwgRkFTVEJPT1Rf TVNHX0ZBSUwsCisJCQkJCQkgICJyZWFkaW5nIGJhcmVib3giKTsKKwkJCQlnb3RvIG91dDsKKwkJ CX0KKwkJfQorCisJCWRhdGEuaW1hZ2UgPSBmYi0+YnVmOworCQlkYXRhLmltYWdlZmlsZSA9IHNv dXJjZWZpbGU7CisKKwkJcmV0ID0gYmFyZWJveF91cGRhdGUoJmRhdGEsIGhhbmRsZXIpOworCisJ CWlmIChyZXQpCisJCQlmYXN0Ym9vdF90eF9wcmludChmYiwgRkFTVEJPT1RfTVNHX0ZBSUwsCisJ CQkJICAidXBkYXRlIGJhcmVib3g6ICVzIiwgc3RyZXJyb3IoLXJldCkpOworCisJCWdvdG8gb3V0 OworCX0KKworY29weToKKwlpZiAoZmFzdGJvb3RfZG93bmxvYWRfdG9fYnVmKGZiKSkKKwkJcmV0 ID0gd3JpdGVfZmlsZShmaWxlbmFtZSwgZmItPmJ1ZiwgZmItPmRvd25sb2FkX3NpemUpOworCWVs c2UKKwkJcmV0ID0gY29weV9maWxlKEZBU1RCT09UX1RNUEZJTEUsIGZpbGVuYW1lLCAxKTsKKwor CWlmIChyZXQpCisJCWZhc3Rib290X3R4X3ByaW50KGZiLCBGQVNUQk9PVF9NU0dfRkFJTCwKKwkJ CQkgICJ3cml0ZSBwYXJ0aXRpb246ICVzIiwgc3RyZXJyb3IoLXJldCkpOworCitvdXQ6CisJaWYg KCFyZXQpCisJCWZhc3Rib290X3R4X3ByaW50KGZiLCBGQVNUQk9PVF9NU0dfT0tBWSwgIiIpOwor CisJZnJlZShmYi0+YnVmKTsKKwlmYi0+YnVmID0gTlVMTDsKKworCWlmICghZmFzdGJvb3RfZG93 bmxvYWRfdG9fYnVmKGZiKSkKKwkJdW5saW5rKEZBU1RCT09UX1RNUEZJTEUpOworfQorCitzdGF0 aWMgdm9pZCBjYl9lcmFzZShzdHJ1Y3QgZmFzdGJvb3QgKmZiLCBjb25zdCBjaGFyICpjbWQpCit7 CisJc3RydWN0IGZpbGVfbGlzdF9lbnRyeSAqZmVudHJ5OworCWludCByZXQ7CisJY29uc3QgY2hh ciAqZmlsZW5hbWUgPSBOVUxMOworCWludCBmZDsKKworCWZhc3Rib290X3R4X3ByaW50KGZiLCBG QVNUQk9PVF9NU0dfSU5GTywgIkVyYXNpbmcgJXMuLi4iLCBjbWQpOworCisJZmlsZV9saXN0X2Zv cl9lYWNoX2VudHJ5KGZiLT5maWxlcywgZmVudHJ5KSB7CisJCWlmICghc3RyY21wKGNtZCwgZmVu dHJ5LT5uYW1lKSkgeworCQkJZmlsZW5hbWUgPSBmZW50cnktPmZpbGVuYW1lOworCQkJYnJlYWs7 CisJCX0KKwl9CisKKwlpZiAoIWZpbGVuYW1lKSB7CisJCWZhc3Rib290X3R4X3ByaW50KGZiLCBG QVNUQk9PVF9NU0dfRkFJTCwKKwkJCQkgICJObyBzdWNoIHBhcnRpdGlvbjogJXMiLCBjbWQpOwor CQlyZXR1cm47CisJfQorCisJZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JEV1IpOworCWlmIChmZCA8 IDApCisJCWZhc3Rib290X3R4X3ByaW50KGZiLCBGQVNUQk9PVF9NU0dfRkFJTCwgc3RyZXJyb3Io LWZkKSk7CisKKwlyZXQgPSBlcmFzZShmZCwgRVJBU0VfU0laRV9BTEwsIDApOworCisJY2xvc2Uo ZmQpOworCisJaWYgKHJldCkKKwkJZmFzdGJvb3RfdHhfcHJpbnQoZmIsIEZBU1RCT09UX01TR19G QUlMLAorCQkJCSAgImNhbm5vdCBlcmFzZSBwYXJ0aXRpb24gJXM6ICVzIiwKKwkJCQkgIGZpbGVu YW1lLCBzdHJlcnJvcigtcmV0KSk7CisJZWxzZQorCQlmYXN0Ym9vdF90eF9wcmludChmYiwgRkFT VEJPT1RfTVNHX09LQVksICIiKTsKK30KKworc3RydWN0IGNtZF9kaXNwYXRjaF9pbmZvIHsKKwlj aGFyICpjbWQ7CisJdm9pZCAoKmNiKShzdHJ1Y3QgZmFzdGJvb3QgKmZiLCBjb25zdCBjaGFyICpv cHQpOworfTsKKworc3RhdGljIHZvaWQgZmJfcnVuX2NvbW1hbmQoc3RydWN0IGZhc3Rib290ICpm YiwgY29uc3QgY2hhciAqY21kYnVmLAorCQljb25zdCBzdHJ1Y3QgY21kX2Rpc3BhdGNoX2luZm8g KmNtZHMsIGludCBudW1fY29tbWFuZHMpCit7CisJY29uc3Qgc3RydWN0IGNtZF9kaXNwYXRjaF9p bmZvICpjbWQ7CisJaW50IGk7CisKKwljb25zb2xlX2NvdW50ZG93bl9hYm9ydCgpOworCisJZm9y IChpID0gMDsgaSA8IG51bV9jb21tYW5kczsgaSsrKSB7CisJCWNtZCA9ICZjbWRzW2ldOworCisJ CWlmICghc3RyY21wX2wxKGNtZC0+Y21kLCBjbWRidWYpKSB7CisJCQljbWQtPmNiKGZiLCBjbWRi dWYgKyBzdHJsZW4oY21kLT5jbWQpKTsKKworCQkJcmV0dXJuOworCQl9CisJfQorCisJZmFzdGJv b3RfdHhfcHJpbnQoZmIsIEZBU1RCT09UX01TR19GQUlMLCAidW5rbm93biBjb21tYW5kICVzIiwK KwkJCSAgY21kYnVmKTsKK30KKworc3RhdGljIHZvaWQgY2Jfb2VtX2dldGVudihzdHJ1Y3QgZmFz dGJvb3QgKmZiLCBjb25zdCBjaGFyICpjbWQpCit7CisJY29uc3QgY2hhciAqdmFsdWU7CisKKwlw cl9kZWJ1ZygiJXM6IFwiJXNcIlxuIiwgX19mdW5jX18sIGNtZCk7CisKKwl2YWx1ZSA9IGdldGVu dihjbWQpOworCisJZmFzdGJvb3RfdHhfcHJpbnQoZmIsIEZBU1RCT09UX01TR19JTkZPLCB2YWx1 ZSA/IHZhbHVlIDogIiIpOworCWZhc3Rib290X3R4X3ByaW50KGZiLCBGQVNUQk9PVF9NU0dfT0tB WSwgIiIpOworfQorCitzdGF0aWMgdm9pZCBjYl9vZW1fc2V0ZW52KHN0cnVjdCBmYXN0Ym9vdCAq ZmIsIGNvbnN0IGNoYXIgKmNtZCkKK3sKKwljaGFyICp2YXIgPSB4c3RyZHVwKGNtZCk7CisJY2hh ciAqdmFsdWU7CisJaW50IHJldDsKKworCXByX2RlYnVnKCIlczogXCIlc1wiXG4iLCBfX2Z1bmNf XywgY21kKTsKKworCXZhbHVlID0gc3RyY2hyKHZhciwgJz0nKTsKKwlpZiAoIXZhbHVlKSB7CisJ CXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCSp2YWx1ZSsrID0gMDsKKworCXJl dCA9IHNldGVudih2YXIsIHZhbHVlKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWZhc3Ri b290X3R4X3ByaW50KGZiLCBGQVNUQk9PVF9NU0dfT0tBWSwgIiIpOworb3V0OgorCWZyZWUodmFy KTsKKworCWlmIChyZXQpCisJCWZhc3Rib290X3R4X3ByaW50KGZiLCBGQVNUQk9PVF9NU0dfRkFJ TCwgc3RyZXJyb3IoLXJldCkpOworfQorCitzdGF0aWMgdm9pZCBjYl9vZW1fZXhlYyhzdHJ1Y3Qg ZmFzdGJvb3QgKmZiLCBjb25zdCBjaGFyICpjbWQpCit7CisJaW50IHJldDsKKworCWlmICghSVNf RU5BQkxFRChDT05GSUdfQ09NTUFORF9TVVBQT1JUKSkgeworCQlmYXN0Ym9vdF90eF9wcmludChm YiwgRkFTVEJPT1RfTVNHX0ZBSUwsCisJCQkJICAibm8gY29tbWFuZCBzdXBwb3J0IGF2YWlsYWJs ZSIpOworCQlyZXR1cm47CisJfQorCisJcmV0ID0gcnVuX2NvbW1hbmQoY21kKTsKKwlpZiAocmV0 IDwgMCkKKwkJZmFzdGJvb3RfdHhfcHJpbnQoZmIsIEZBU1RCT09UX01TR19GQUlMLCBzdHJlcnJv cigtcmV0KSk7CisJZWxzZSBpZiAocmV0ID4gMCkKKwkJZmFzdGJvb3RfdHhfcHJpbnQoZmIsIEZB U1RCT09UX01TR19GQUlMLCAiIik7CisJZWxzZQorCQlmYXN0Ym9vdF90eF9wcmludChmYiwgRkFT VEJPT1RfTVNHX09LQVksICIiKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbWRfZGlzcGF0 Y2hfaW5mbyBjbWRfb2VtX2Rpc3BhdGNoX2luZm9bXSA9IHsKKwl7CisJCS5jbWQgPSAiZ2V0ZW52 ICIsCisJCS5jYiA9IGNiX29lbV9nZXRlbnYsCisJfSwgeworCQkuY21kID0gInNldGVudiAiLAor CQkuY2IgPSBjYl9vZW1fc2V0ZW52LAorCX0sIHsKKwkJLmNtZCA9ICJleGVjICIsCisJCS5jYiA9 IGNiX29lbV9leGVjLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX21heWJlX3VudXNlZCBjYl9v ZW0oc3RydWN0IGZhc3Rib290ICpmYiwgY29uc3QgY2hhciAqY21kKQoreworCXByX2RlYnVnKCIl czogXCIlc1wiXG4iLCBfX2Z1bmNfXywgY21kKTsKKworCWZiX3J1bl9jb21tYW5kKGZiLCBjbWQs IGNtZF9vZW1fZGlzcGF0Y2hfaW5mbywgQVJSQVlfU0laRShjbWRfb2VtX2Rpc3BhdGNoX2luZm8p KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbWRfZGlzcGF0Y2hfaW5mbyBjbWRfZGlzcGF0 Y2hfaW5mb1tdID0geworCXsKKwkJLmNtZCA9ICJyZWJvb3QiLAorCQkuY2IgPSBjYl9yZWJvb3Qs CisJfSwgeworCQkuY21kID0gImdldHZhcjoiLAorCQkuY2IgPSBjYl9nZXR2YXIsCisJfSwgewor CQkuY21kID0gImRvd25sb2FkOiIsCisJCS5jYiA9IGNiX2Rvd25sb2FkLAorI2lmIGRlZmluZWQo Q09ORklHX0JPT1RNKQorCX0sIHsKKwkJLmNtZCA9ICJib290IiwKKwkJLmNiID0gY2JfYm9vdCwK KyNlbmRpZgorCX0sIHsKKwkJLmNtZCA9ICJmbGFzaDoiLAorCQkuY2IgPSBjYl9mbGFzaCwKKwl9 LCB7CisJCS5jbWQgPSAiZXJhc2U6IiwKKwkJLmNiID0gY2JfZXJhc2UsCisjaWYgZGVmaW5lZChD T05GSUdfRkFTVEJPT1RfQ01EX09FTSkKKwl9LCB7CisJCS5jbWQgPSAib2VtICIsCisJCS5jYiA9 IGNiX29lbSwKKyNlbmRpZgorCX0sCit9OworCit2b2lkIGZhc3Rib290X2V4ZWNfY21kKHN0cnVj dCBmYXN0Ym9vdCAqZmIsIGNvbnN0IGNoYXIgKmNtZGJ1ZikKK3sKKwlpbnQgcmV0OworCisJZ19m YiA9IGZiOworCWZiLT5hY3RpdmUgPSB0cnVlOworCisJaWYgKGZiLT5jbWRfZXhlYykgeworCQly ZXQgPSBmYi0+Y21kX2V4ZWMoZmIsIGNtZGJ1Zik7CisJCWlmIChyZXQgIT0gRkFTVEJPT1RfQ01E X0ZBTExUSFJPVUdIKQorCQkJcmV0dXJuOworCX0KKworCWZiX3J1bl9jb21tYW5kKGZiLCBjbWRi dWYsIGNtZF9kaXNwYXRjaF9pbmZvLAorCQkJCUFSUkFZX1NJWkUoY21kX2Rpc3BhdGNoX2luZm8p KTsKK30KKworc3RhdGljIGludCBmYXN0Ym9vdF9nbG9iYWx2YXJzX2luaXQodm9pZCkKK3sKKwlp ZiAoSVNfRU5BQkxFRChDT05GSUdfRkFTVEJPT1RfU1BBUlNFKSkKKwkJZ2xvYmFsdmFyX2FkZF9z aW1wbGVfaW50KCJ1c2JnYWRnZXQuZmFzdGJvb3RfbWF4X2Rvd25sb2FkX3NpemUiLAorCQkJCSAm ZmFzdGJvb3RfbWF4X2Rvd25sb2FkX3NpemUsICIldSIpOworCisJcmV0dXJuIDA7Cit9CisKK2Rl dmljZV9pbml0Y2FsbChmYXN0Ym9vdF9nbG9iYWx2YXJzX2luaXQpOworCitCQVJFQk9YX01BR0lD VkFSX05BTUVEKGdsb2JhbF91c2JnYWRnZXRfZmFzdGJvb3RfbWF4X2Rvd25sb2FkX3NpemUsCisJ CSAgICAgICBnbG9iYWwudXNiZ2FkZ2V0LmZhc3Rib290X21heF9kb3dubG9hZF9zaXplLAorCQkg ICAgICAgIkZhc3Rib290IG1heGltdW0gZG93bmxvYWQgc2l6ZSIpOwpkaWZmIC0tZ2l0IGEvZHJp dmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRl eCA2ZTYwYzdhZWU4Li45NzdmNmMwZGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQv S2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtNTcsMzggKzU3LDYg QEAgY29uZmlnIFVTQl9HQURHRVRfRkFTVEJPT1QKIAlib29sCiAJc2VsZWN0IEJBTk5FUgogCXNl bGVjdCBGSUxFX0xJU1QKLQlwcm9tcHQgIkFuZHJvaWQgRmFzdGJvb3Qgc3VwcG9ydCIKLQotY29u ZmlnIFVTQl9HQURHRVRfRkFTVEJPT1RfU1BBUlNFCi0JYm9vbAotCWRlcGVuZHMgb24gVVNCX0dB REdFVF9GQVNUQk9PVAotCXNlbGVjdCBJTUFHRV9TUEFSU0UKLQlwcm9tcHQgIkVuYWJsZSBGYXN0 Ym9vdCBzcGFyc2UgaW1hZ2Ugc3VwcG9ydCIKLQloZWxwCi0JICBTcGFyc2UgaW1hZ2VzIGFyZSBh IHdheSBmb3IgdGhlIGZhc3Rib290IHByb3RvY29sIHRvIHdyaXRlCi0JICBpbWFnZXMgdGhhdCBh cmUgYmlnZ2VyIHRoYW4gdGhlIGF2YWlsYWJsZSBtZW1vcnkuIElmIHVuc3VyZSwKLQkgIHNheSB5 ZXMgaGVyZS4KLQotY29uZmlnIFVTQl9HQURHRVRfRkFTVEJPT1RfQlVGCi0JYm9vbAotCWRlcGVu ZHMgb24gVVNCX0dBREdFVF9GQVNUQk9PVAotCXByb21wdCAiRG93bmxvYWQgZmlsZXMgdG8gdGVt cG9yYXJ5IGJ1ZmZlciBpbnN0ZWFkIG9mIGZpbGUiCi0JaGVscAotCSAgV2l0aCB0aGlzIG9wdGlv biBlbmFibGVkIHRoZSBmYXN0Ym9vdCBjb2RlIHdpbGwgZG93bmxvYWQgZmlsZXMgdG8gYQotCSAg dGVtcG9yYXJ5IGJ1ZmZlciBpbnN0ZWFkIG9mIGEgdGVtcG9yYXJ5IGZpbGUuIE5vcm1hbGx5IHlv dSB3YW50IHRvCi0JICB1c2UgYSBmaWxlIGFzIHRoaXMgYWxzbyB3b3JrcyB3aGVuIHlvdXIgbWVt b3J5IGlzIGZyYWdtZW50ZWQuIEhvd2V2ZXIsCi0JICBpbiBzb21lIHNwZWNpYWwgY2FzZXMsIHdo ZW4gdGhlIGZpbGUgY29uc3VtZXIgYWxzbyBiZXR0ZXIgY29wZXMgd2l0aAotCSAgYSBidWZmZXIs IHRoZW4gdXNpbmcgYSBidWZmZXIgbWlnaHQgYmUgYmV0dGVyLgotCi0JICBTYXkgbm8gaGVyZSB1 bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgotCi1jb25maWcgVVNCX0dBREdFVF9G QVNUQk9PVF9DTURfT0VNCi0JYm9vbAotCWRlcGVuZHMgb24gVVNCX0dBREdFVF9GQVNUQk9PVAot CXByb21wdCAiRW5hYmxlIE9FTSBjb21tYW5kcyIKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBlbmFi bGVzIHRoZSBmYXN0Ym9vdCAib2VtIiBncm91cCBvZiBjb21tYW5kcy4gVGhleSBhbGxvdyB0bwot CSAgZXhlY3V0aW5nIGFyYml0cmFyeSBiYXJlYm94IGNvbW1hbmRzIGFuZCBtYXkgYmUgZGlzYWJs ZWQgaW4gc2VjdXJlCi0JICBlbnZpcm9ubWVudHMuCi0KKwlzZWxlY3QgRkFTVEJPT1RfQkFTRQor CXByb21wdCAiQW5kcm9pZCBGYXN0Ym9vdCBVU0IgR2FkZ2V0IgogZW5kaWYKZGlmZiAtLWdpdCBh L2RyaXZlcnMvdXNiL2dhZGdldC9mX2Zhc3Rib290LmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9m YXN0Ym9vdC5jCmluZGV4IGNmM2NjNmRhYzcuLmY4YTljMzI1MzAgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvdXNiL2dhZGdldC9mX2Zhc3Rib290LmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZmFz dGJvb3QuYwpAQCAtMTEsOTAgKzExLDM2IEBACiAgKiBDb3B5cmlnaHQgMjAxNCBTYXNjaGEgSGF1 ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+CiAgKiBQb3J0ZWQgdG8gYmFyZWJveAogICoKKyAq IENvcHlyaWdodCAyMDIwIEVkbXVuZCBIZW5uaWdlcyA8ZWhAZW1saXguY29tPgorICogQ29weXJp Z2h0IDIwMjAgRGFuaWVsIEdsw7Zja25lciA8ZGdAZW1saXguY29tPgorICogU3BsaXQgb2ZmIG9m IGdlbmVyaWMgcGFydHMKKyAqCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsK ICAqLwogCiAjZGVmaW5lIHByX2ZtdChmbXQpICJmYXN0Ym9vdDogIiBmbXQKIAotI2luY2x1ZGUg PGNvbW1vbi5oPgotI2luY2x1ZGUgPGNvbW1hbmQuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2lu Y2x1ZGUgPG1hbGxvYy5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8Y2xvY2suaD4K LSNpbmNsdWRlIDxpb2N0bC5oPgotI2luY2x1ZGUgPGxpYmJiLmg+Ci0jaW5jbHVkZSA8YmJ1Lmg+ Ci0jaW5jbHVkZSA8Ym9vdG0uaD4KICNpbmNsdWRlIDxkbWEuaD4KLSNpbmNsdWRlIDxmcy5oPgot I2luY2x1ZGUgPGxpYmZpbGUuaD4KLSNpbmNsdWRlIDx1Ymlmb3JtYXQuaD4KLSNpbmNsdWRlIDxz dGRsaWIuaD4KLSNpbmNsdWRlIDxmaWxlLWxpc3QuaD4KLSNpbmNsdWRlIDxtYWdpY3Zhci5oPgot I2luY2x1ZGUgPGxpbnV4L3NpemVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8 cHJvZ3Jlc3MuaD4KLSNpbmNsdWRlIDxlbnZpcm9ubWVudC5oPgotI2luY2x1ZGUgPGdsb2JhbHZh ci5oPgotI2luY2x1ZGUgPHJlc3RhcnQuaD4KLSNpbmNsdWRlIDxjb25zb2xlX2NvdW50ZG93bi5o PgotI2luY2x1ZGUgPGltYWdlLXNwYXJzZS5oPgotI2luY2x1ZGUgPHVzYi9jaDkuaD4KLSNpbmNs dWRlIDx1c2IvZ2FkZ2V0Lmg+CisjaW5jbHVkZSA8ZmFzdGJvb3QuaD4KICNpbmNsdWRlIDx1c2Iv ZmFzdGJvb3QuaD4KLSNpbmNsdWRlIDx1c2IvY29tcG9zaXRlLmg+Ci0jaW5jbHVkZSA8bGludXgv ZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGF0 Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC1hYmkuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQv bXRkLmg+Ci0KLSNkZWZpbmUgRkFTVEJPT1RfVkVSU0lPTgkJIjAuNCIKIAogI2RlZmluZSBGQVNU Qk9PVF9JTlRFUkZBQ0VfQ0xBU1MJMHhmZgogI2RlZmluZSBGQVNUQk9PVF9JTlRFUkZBQ0VfU1VC X0NMQVNTCTB4NDIKICNkZWZpbmUgRkFTVEJPT1RfSU5URVJGQUNFX1BST1RPQ09MCTB4MDMKIAot I2RlZmluZSBGQVNUQk9PVF9UTVBGSUxFCQkiLy5mYXN0Ym9vdC5pbWciCi0KICNkZWZpbmUgRVBf QlVGRkVSX1NJWkUJCQk0MDk2CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZmFzdGJvb3RfbWF4X2Rv d25sb2FkX3NpemUgPSBTWl84TTsKLQotc3RydWN0IGZiX3ZhcmlhYmxlIHsKLQljaGFyICpuYW1l OwotCWNoYXIgKnZhbHVlOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07Ci0KIHN0cnVjdCBm X2Zhc3Rib290IHsKKwlzdHJ1Y3QgZmFzdGJvb3QgZmFzdGJvb3Q7CiAJc3RydWN0IHVzYl9mdW5j dGlvbiBmdW5jOwogCiAJLyogSU4vT1VUIEVQJ3MgYW5kIGNvcnJlc3BvbmRpbmcgcmVxdWVzdHMg Ki8KIAlzdHJ1Y3QgdXNiX2VwICppbl9lcCwgKm91dF9lcDsKIAlzdHJ1Y3QgdXNiX3JlcXVlc3Qg KmluX3JlcSwgKm91dF9yZXE7Ci0Jc3RydWN0IGZpbGVfbGlzdCAqZmlsZXM7Ci0JaW50ICgqY21k X2V4ZWMpKHN0cnVjdCBmX2Zhc3Rib290ICosIGNvbnN0IGNoYXIgKmNtZCk7Ci0JaW50ICgqY21k X2ZsYXNoKShzdHJ1Y3QgZl9mYXN0Ym9vdCAqLCBzdHJ1Y3QgZmlsZV9saXN0X2VudHJ5ICplbnRy eSwKLQkJCSBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVu KTsKLQlpbnQgZG93bmxvYWRfZmQ7Ci0Jdm9pZCAqYnVmOwotCWJvb2wgYWN0aXZlOwotCi0Jc2l6 ZV90IGRvd25sb2FkX2J5dGVzOwotCXNpemVfdCBkb3dubG9hZF9zaXplOwotCXN0cnVjdCBsaXN0 X2hlYWQgdmFyaWFibGVzOwogfTsKIAotc3RhdGljIGlubGluZSBib29sIGZhc3Rib290X2Rvd25s b2FkX3RvX2J1ZihzdHJ1Y3QgZl9mYXN0Ym9vdCAqZl9mYikKLXsKLQlpZiAoSVNfRU5BQkxFRChD T05GSUdfVVNCX0dBREdFVF9GQVNUQk9PVF9CVUYpKQotCQlyZXR1cm4gdHJ1ZTsKLQllbHNlCi0J CXJldHVybiBmYWxzZTsKLX0KLQogc3RhdGljIGlubGluZSBzdHJ1Y3QgZl9mYXN0Ym9vdCAqZnVu Y190b19mYXN0Ym9vdChzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQogewogCXJldHVybiBjb250YWlu ZXJfb2YoZiwgc3RydWN0IGZfZmFzdGJvb3QsIGZ1bmMpOwpAQCAtMTgyLDYgKzEyOCw5IEBAIHN0 YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzICpmYXN0Ym9vdF9zdHJpbmdzW10gPSB7CiB9 OwogCiBzdGF0aWMgdm9pZCByeF9oYW5kbGVyX2NvbW1hbmQoc3RydWN0IHVzYl9lcCAqZXAsIHN0 cnVjdCB1c2JfcmVxdWVzdCAqcmVxKTsKK3N0YXRpYyBpbnQgZmFzdGJvb3Rfd3JpdGVfdXNiKHN0 cnVjdCBmYXN0Ym9vdCAqZmIsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKKwkJCSAgICAgIHVuc2lnbmVk IGludCBidWZmZXJfc2l6ZSk7CitzdGF0aWMgdm9pZCBmYXN0Ym9vdF9zdGFydF9kb3dubG9hZF91 c2Ioc3RydWN0IGZhc3Rib290ICpmYik7CiAKIHN0YXRpYyB2b2lkIGZhc3Rib290X2NvbXBsZXRl KHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKIHsKQEAgLTIwNiwx MTYgKzE1NSw2IEBAIHN0YXRpYyBzdHJ1Y3QgdXNiX3JlcXVlc3QgKmZhc3Rib290X2FsbG9jX3Jl cXVlc3Qoc3RydWN0IHVzYl9lcCAqZXApCiAJcmV0dXJuIHJlcTsKIH0KIAotc3RhdGljIHZvaWQg ZmJfc2V0dmFyKHN0cnVjdCBmYl92YXJpYWJsZSAqdmFyLCBjb25zdCBjaGFyICpmbXQsIC4uLikK LXsKLQl2YV9saXN0IGFwOwotCi0JdmFfc3RhcnQoYXAsIGZtdCk7Ci0JdmFyLT52YWx1ZSA9IGJ2 YXNwcmludGYoZm10LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBmYl92 YXJpYWJsZSAqZmJfYWRkdmFyKHN0cnVjdCBmX2Zhc3Rib290ICpmX2ZiLCBjb25zdCBjaGFyICpm bXQsIC4uLikKLXsKLQlzdHJ1Y3QgZmJfdmFyaWFibGUgKnZhciA9IHh6YWxsb2Moc2l6ZW9mKCp2 YXIpKTsKLQl2YV9saXN0IGFwOwotCi0JdmFfc3RhcnQoYXAsIGZtdCk7Ci0JdmFyLT5uYW1lID0g YnZhc3ByaW50ZihmbXQsIGFwKTsKLQl2YV9lbmQoYXApOwotCi0JbGlzdF9hZGRfdGFpbCgmdmFy LT5saXN0LCAmZl9mYi0+dmFyaWFibGVzKTsKLQotCXJldHVybiB2YXI7Ci19Ci0KLXN0YXRpYyBp bnQgZmFzdGJvb3RfYWRkX3BhcnRpdGlvbl92YXJpYWJsZXMoc3RydWN0IGZfZmFzdGJvb3QgKmZf ZmIsCi0JCXN0cnVjdCBmaWxlX2xpc3RfZW50cnkgKmZlbnRyeSkKLXsKLQlzdHJ1Y3Qgc3RhdCBz OwotCXNpemVfdCBzaXplID0gMDsKLQlpbnQgZmQsIHJldDsKLQlzdHJ1Y3QgbXRkX2luZm9fdXNl ciBtdGRpbmZvOwotCWNoYXIgKnR5cGUgPSBOVUxMOwotCXN0cnVjdCBmYl92YXJpYWJsZSAqdmFy OwotCi0JcmV0ID0gc3RhdChmZW50cnktPmZpbGVuYW1lLCAmcyk7Ci0JaWYgKHJldCkgewotCQlk ZXZpY2VfZGV0ZWN0X2J5X25hbWUoZGV2cGF0aF90b19uYW1lKGZlbnRyeS0+ZmlsZW5hbWUpKTsK LQkJcmV0ID0gc3RhdChmZW50cnktPmZpbGVuYW1lLCAmcyk7Ci0JfQotCi0JaWYgKHJldCkgewot CQlpZiAoZmVudHJ5LT5mbGFncyAmIEZJTEVfTElTVF9GTEFHX0NSRUFURSkgewotCQkJcmV0ID0g MDsKLQkJCXR5cGUgPSAiZmlsZSI7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCWdvdG8gb3V0Owot CX0KLQotCWZkID0gb3BlbihmZW50cnktPmZpbGVuYW1lLCBPX1JEV1IpOwotCWlmIChmZCA8IDAp IHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jc2l6ZSA9IHMuc3Rfc2l6 ZTsKLQotCXJldCA9IGlvY3RsKGZkLCBNRU1HRVRJTkZPLCAmbXRkaW5mbyk7Ci0KLQljbG9zZShm ZCk7Ci0KLQlpZiAoIXJldCkgewotCQlzd2l0Y2ggKG10ZGluZm8udHlwZSkgewotCQljYXNlIE1U RF9OQU5ERkxBU0g6Ci0JCQl0eXBlID0gIk5BTkQtZmxhc2giOwotCQkJYnJlYWs7Ci0JCWNhc2Ug TVREX05PUkZMQVNIOgotCQkJdHlwZSA9ICJOT1ItZmxhc2giOwotCQkJYnJlYWs7Ci0JCWNhc2Ug TVREX1VCSVZPTFVNRToKLQkJCXR5cGUgPSAiVUJJIjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0Ogot CQkJdHlwZSA9ICJmbGFzaCI7Ci0JCQlicmVhazsKLQkJfQotCi0JCWdvdG8gb3V0OwotCX0KLQot CXR5cGUgPSAiYmFzaWMiOwotCXJldCA9IDA7Ci0KLW91dDoKLQlpZiAocmV0KQotCQlyZXR1cm4g cmV0OwotCi0JdmFyID0gZmJfYWRkdmFyKGZfZmIsICJwYXJ0aXRpb24tc2l6ZTolcyIsIGZlbnRy eS0+bmFtZSk7Ci0JZmJfc2V0dmFyKHZhciwgIiUwOHp4Iiwgc2l6ZSk7Ci0JdmFyID0gZmJfYWRk dmFyKGZfZmIsICJwYXJ0aXRpb24tdHlwZTolcyIsIGZlbnRyeS0+bmFtZSk7Ci0JZmJfc2V0dmFy KHZhciwgIiVzIiwgdHlwZSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGZhc3Ri b290X2FkZF9iYnVfdmFyaWFibGVzKHN0cnVjdCBiYnVfaGFuZGxlciAqaGFuZGxlciwgdm9pZCAq Y3R4KQotewotCXN0cnVjdCBmX2Zhc3Rib290ICpmX2ZiID0gY3R4OwotCWNoYXIgKm5hbWU7Ci0J aW50IHJldDsKLQotCW5hbWUgPSBiYXNwcmludGYoImJidS0lcyIsIGhhbmRsZXItPm5hbWUpOwot Ci0JcmV0ID0gZmlsZV9saXN0X2FkZF9lbnRyeShmX2ZiLT5maWxlcywgbmFtZSwgaGFuZGxlci0+ ZGV2aWNlZmlsZSwgMCk7Ci0KLQlmcmVlKG5hbWUpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3Rh dGljIGludCBmYXN0Ym9vdF9iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgc3RydWN0 IHVzYl9mdW5jdGlvbiAqZikKIHsKIAlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBj LT5jZGV2OwpAQCAtMzI1LDMwICsxNjQsMTcgQEAgc3RhdGljIGludCBmYXN0Ym9vdF9iaW5kKHN0 cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKIAlzdHJ1 Y3QgdXNiX3N0cmluZyAqdXM7CiAJY29uc3Qgc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSAq ZmkgPSBmLT5maTsKIAlzdHJ1Y3QgZl9mYXN0Ym9vdF9vcHRzICpvcHRzID0gY29udGFpbmVyX29m KGZpLCBzdHJ1Y3QgZl9mYXN0Ym9vdF9vcHRzLCBmdW5jX2luc3QpOwotCXN0cnVjdCBmaWxlX2xp c3RfZW50cnkgKmZlbnRyeTsKLQlzdHJ1Y3QgZmJfdmFyaWFibGUgKnZhcjsKLQotCWZfZmItPmZp bGVzID0gb3B0cy0+ZmlsZXM7Ci0JZl9mYi0+Y21kX2V4ZWMgPSBvcHRzLT5jbWRfZXhlYzsKLQlm X2ZiLT5jbWRfZmxhc2ggPSBvcHRzLT5jbWRfZmxhc2g7Ci0KLQl2YXIgPSBmYl9hZGR2YXIoZl9m YiwgInZlcnNpb24iKTsKLQlmYl9zZXR2YXIodmFyLCAiMC40Iik7Ci0JdmFyID0gZmJfYWRkdmFy KGZfZmIsICJib290bG9hZGVyLXZlcnNpb24iKTsKLQlmYl9zZXR2YXIodmFyLCByZWxlYXNlX3N0 cmluZyk7Ci0JaWYgKElTX0VOQUJMRUQoQ09ORklHX1VTQl9HQURHRVRfRkFTVEJPT1RfU1BBUlNF KSkgewotCQl2YXIgPSBmYl9hZGR2YXIoZl9mYiwgIm1heC1kb3dubG9hZC1zaXplIik7Ci0JCWZi X3NldHZhcih2YXIsICIldSIsIGZhc3Rib290X21heF9kb3dubG9hZF9zaXplKTsKLQl9CiAKLQlp ZiAoSVNfRU5BQkxFRChDT05GSUdfQkFSRUJPWF9VUERBVEUpICYmIG9wdHMtPmV4cG9ydF9iYnUp Ci0JCWJidV9oYW5kbGVyc19pdGVyYXRlKGZhc3Rib290X2FkZF9iYnVfdmFyaWFibGVzLCBmX2Zi KTsKKwlmX2ZiLT5mYXN0Ym9vdC53cml0ZSA9IGZhc3Rib290X3dyaXRlX3VzYjsKKwlmX2ZiLT5m YXN0Ym9vdC5zdGFydF9kb3dubG9hZCA9IGZhc3Rib290X3N0YXJ0X2Rvd25sb2FkX3VzYjsKIAot CWZpbGVfbGlzdF9mb3JfZWFjaF9lbnRyeShmX2ZiLT5maWxlcywgZmVudHJ5KSB7Ci0JCXJldCA9 IGZhc3Rib290X2FkZF9wYXJ0aXRpb25fdmFyaWFibGVzKGZfZmIsIGZlbnRyeSk7Ci0JCWlmIChy ZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KKwlmX2ZiLT5mYXN0Ym9vdC5maWxlcyA9IG9wdHMtPmNv bW1vbi5maWxlczsKKwlmX2ZiLT5mYXN0Ym9vdC5jbWRfZXhlYyA9IG9wdHMtPmNvbW1vbi5jbWRf ZXhlYzsKKwlmX2ZiLT5mYXN0Ym9vdC5jbWRfZmxhc2ggPSBvcHRzLT5jb21tb24uY21kX2ZsYXNo OworCisJcmV0ID0gZmFzdGJvb3RfZ2VuZXJpY19pbml0KCZmX2ZiLT5mYXN0Ym9vdCwgb3B0cy0+ Y29tbW9uLmV4cG9ydF9iYnUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAkvKiBEWU5B TUlDIGludGVyZmFjZSBudW1iZXJzIGFzc2lnbm1lbnRzICovCiAJaWQgPSB1c2JfaW50ZXJmYWNl X2lkKGMsIGYpOwpAQCAtNDA5LDcgKzIzNSw2IEBAIHN0YXRpYyBpbnQgZmFzdGJvb3RfYmluZChz dHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCiBzdGF0 aWMgdm9pZCBmYXN0Ym9vdF91bmJpbmQoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCBzdHJ1 Y3QgdXNiX2Z1bmN0aW9uICpmKQogewogCXN0cnVjdCBmX2Zhc3Rib290ICpmX2ZiID0gZnVuY190 b19mYXN0Ym9vdChmKTsKLQlzdHJ1Y3QgZmJfdmFyaWFibGUgKnZhciwgKnRtcDsKIAogCXVzYl9l cF9kZXF1ZXVlKGZfZmItPmluX2VwLCBmX2ZiLT5pbl9yZXEpOwogCWZyZWUoZl9mYi0+aW5fcmVx LT5idWYpOwpAQCAtNDIxLDE0ICsyNDYsNyBAQCBzdGF0aWMgdm9pZCBmYXN0Ym9vdF91bmJpbmQo c3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQogCXVz Yl9lcF9mcmVlX3JlcXVlc3QoZl9mYi0+b3V0X2VwLCBmX2ZiLT5vdXRfcmVxKTsKIAlmX2ZiLT5v dXRfcmVxID0gTlVMTDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2YXIsIHRtcCwgJmZf ZmItPnZhcmlhYmxlcywgbGlzdCkgewotCQlmcmVlKHZhci0+bmFtZSk7Ci0JCWZyZWUodmFyLT52 YWx1ZSk7Ci0JCWxpc3RfZGVsKCZ2YXItPmxpc3QpOwotCQlmcmVlKHZhcik7Ci0JfQotCi0JZl9m Yi0+YWN0aXZlID0gZmFsc2U7CisJZmFzdGJvb3RfZ2VuZXJpY19mcmVlKCZmX2ZiLT5mYXN0Ym9v dCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZhc3Rib290X2Rpc2FibGUoc3RydWN0IHVzYl9mdW5jdGlv biAqZikKQEAgLTQ4MSw0MyArMjk5LDIxIEBAIGVycjoKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0 aWMgc3RydWN0IGZfZmFzdGJvb3QgKmdfZl9mYjsKLQogc3RhdGljIHZvaWQgZmFzdGJvb3RfZnJl ZV9mdW5jKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCiB7CiAJc3RydWN0IGZfZmFzdGJvb3QgKmZf ZmIgPSBjb250YWluZXJfb2YoZiwgc3RydWN0IGZfZmFzdGJvb3QsIGZ1bmMpOwogCi0JaWYgKGdf Zl9mYiA9PSBmX2ZiKQotCQlnX2ZfZmIgPSBOVUxMOwotCisJZmFzdGJvb3RfZ2VuZXJpY19jbG9z ZSgmZl9mYi0+ZmFzdGJvb3QpOwogCWZyZWUoZl9mYik7CiB9CiAKLS8qCi0gKiBBICJvZW0gZXhl YyBib290bSIgb3Igc2ltaWxhciBjb21tYW5kcyB3aWxsIHN0b3AgYmFyZWJveC4gVGVsbCB0aGUK LSAqIGZhc3Rib290IGNvbW1hbmQgb24gdGhlIG90aGVyIHNpZGUgc28gdGhhdCBpdCBkb2Vzbid0 IHJ1biBpbnRvIGEKLSAqIHRpbWVvdXQuCi0gKi8KLXN0YXRpYyB2b2lkIGZhc3Rib290X3NodXRk b3duKHZvaWQpCi17Ci0Jc3RydWN0IGZfZmFzdGJvb3QgKmZfZmIgPSBnX2ZfZmI7Ci0KLQlpZiAo IWZfZmIgfHwgIWZfZmItPmFjdGl2ZSkKLQkJcmV0dXJuOwotCi0JZmFzdGJvb3RfdHhfcHJpbnQo Zl9mYiwgRkFTVEJPT1RfTVNHX0lORk8sICJiYXJlYm94IHNodXR0aW5nIGRvd24iKTsKLQlmYXN0 Ym9vdF90eF9wcmludChmX2ZiLCBGQVNUQk9PVF9NU0dfT0tBWSwgIiIpOwotfQotCi1lYXJseV9l eGl0Y2FsbChmYXN0Ym9vdF9zaHV0ZG93bik7Ci0KIHN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9u ICpmYXN0Ym9vdF9hbGxvY19mdW5jKHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKmZpKQog ewogCXN0cnVjdCBmX2Zhc3Rib290ICpmX2ZiOwogCiAJZl9mYiA9IHh6YWxsb2Moc2l6ZW9mKCpm X2ZiKSk7CiAKLQlJTklUX0xJU1RfSEVBRCgmZl9mYi0+dmFyaWFibGVzKTsKKwlJTklUX0xJU1Rf SEVBRCgmZl9mYi0+ZmFzdGJvb3QudmFyaWFibGVzKTsKIAogCWZfZmItPmZ1bmMubmFtZSA9ICJm YXN0Ym9vdCI7CiAJZl9mYi0+ZnVuYy5zdHJpbmdzID0gZmFzdGJvb3Rfc3RyaW5nczsKQEAgLTUy Nyw5ICszMjMsNiBAQCBzdGF0aWMgc3RydWN0IHVzYl9mdW5jdGlvbiAqZmFzdGJvb3RfYWxsb2Nf ZnVuYyhzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNlICpmaQogCWZfZmItPmZ1bmMudW5iaW5k ID0gZmFzdGJvb3RfdW5iaW5kOwogCWZfZmItPmZ1bmMuZnJlZV9mdW5jID0gZmFzdGJvb3RfZnJl ZV9mdW5jOwogCi0JaWYgKCFnX2ZfZmIpCi0JCWdfZl9mYiA9IGZfZmI7Ci0KIAlyZXR1cm4gJmZf ZmItPmZ1bmM7CiB9CiAKQEAgLTU1Myw4ICszNDYsOSBAQCBzdGF0aWMgc3RydWN0IHVzYl9mdW5j dGlvbl9pbnN0YW5jZSAqZmFzdGJvb3RfYWxsb2NfaW5zdGFuY2Uodm9pZCkKIAogREVDTEFSRV9V U0JfRlVOQ1RJT05fSU5JVChmYXN0Ym9vdCwgZmFzdGJvb3RfYWxsb2NfaW5zdGFuY2UsIGZhc3Ri b290X2FsbG9jX2Z1bmMpOwogCi1zdGF0aWMgaW50IGZhc3Rib290X3R4X3dyaXRlKHN0cnVjdCBm X2Zhc3Rib290ICpmX2ZiLCBjb25zdCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBidWZmZXJf c2l6ZSkKK3N0YXRpYyBpbnQgZmFzdGJvb3Rfd3JpdGVfdXNiKHN0cnVjdCBmYXN0Ym9vdCAqZmIs IGNvbnN0IGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGJ1ZmZlcl9zaXplKQogeworCXN0cnVj dCBmX2Zhc3Rib290ICpmX2ZiID0gY29udGFpbmVyX29mKGZiLCBzdHJ1Y3QgZl9mYXN0Ym9vdCwg ZmFzdGJvb3QpOwogCXN0cnVjdCB1c2JfcmVxdWVzdCAqaW5fcmVxID0gZl9mYi0+aW5fcmVxOwog CXVpbnQ2NF90IHN0YXJ0OwogCWludCByZXQ7CkBAIC01ODAsOTEgKzM3NCwxMCBAQCBzdGF0aWMg aW50IGZhc3Rib290X3R4X3dyaXRlKHN0cnVjdCBmX2Zhc3Rib290ICpmX2ZiLCBjb25zdCBjaGFy ICpidWZmZXIsIHVuc2lnbgogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY2hhciAqZmFzdGJvb3Rf bXNnW10gPSB7Ci0JW0ZBU1RCT09UX01TR19PS0FZXSA9ICJPS0FZIiwKLQlbRkFTVEJPT1RfTVNH X0ZBSUxdID0gIkZBSUwiLAotCVtGQVNUQk9PVF9NU0dfSU5GT10gPSAiSU5GTyIsCi0JW0ZBU1RC T09UX01TR19EQVRBXSA9ICJEQVRBIiwKLX07Ci0KLWludCBmYXN0Ym9vdF90eF9wcmludChzdHJ1 Y3QgZl9mYXN0Ym9vdCAqZl9mYiwgZW51bSBmYXN0Ym9vdF9tc2dfdHlwZSB0eXBlLAotCQkgICAg ICBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsKLQljaGFy IGJ1Zls2NF07Ci0JdmFfbGlzdCBhcDsKLQlpbnQgbjsKLQljb25zdCBjaGFyICptc2cgPSBmYXN0 Ym9vdF9tc2dbdHlwZV07Ci0KLQl2YV9zdGFydChhcCwgZm10KTsKLQl2YWYuZm10ID0gZm10Owot CXZhZi52YSA9ICZhcDsKLQotCW4gPSBzbnByaW50ZihidWYsIDY0LCAiJXMlcFYiLCBtc2csICZ2 YWYpOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBGQVNUQk9PVF9NU0dfT0tBWToKLQkJZl9m Yi0+YWN0aXZlID0gZmFsc2U7Ci0JCWJyZWFrOwotCWNhc2UgRkFTVEJPT1RfTVNHX0ZBSUw6Ci0J CWZfZmItPmFjdGl2ZSA9IGZhbHNlOwotCQlwcl9lcnIoIiVwVlxuIiwgJnZhZik7Ci0JCWJyZWFr OwotCWNhc2UgRkFTVEJPT1RfTVNHX0lORk86Ci0JCXByX2luZm8oIiVwVlxuIiwgJnZhZik7Ci0J CWJyZWFrOwotCWNhc2UgRkFTVEJPT1RfTVNHX0RBVEE6Ci0JCWJyZWFrOwotCX0KLQotCXZhX2Vu ZChhcCk7Ci0KLQlpZiAobiA+IDY0KQotCQluID0gNjQ7Ci0KLQlyZXR1cm4gZmFzdGJvb3RfdHhf d3JpdGUoZl9mYiwgYnVmLCBuKTsKLX0KLQotc3RhdGljIHZvaWQgY2JfcmVib290KHN0cnVjdCBm X2Zhc3Rib290ICpmX2ZiLCBjb25zdCBjaGFyICpjbWQpCi17Ci0JcmVzdGFydF9tYWNoaW5lKCk7 Ci19Ci0KLXN0YXRpYyBpbnQgc3RyY21wX2wxKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpz MikKLXsKLQlpZiAoIXMxIHx8ICFzMikKLQkJcmV0dXJuIC0xOwotCXJldHVybiBzdHJuY21wKHMx LCBzMiwgc3RybGVuKHMxKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNiX2dldHZhcihzdHJ1Y3QgZl9m YXN0Ym9vdCAqZl9mYiwgY29uc3QgY2hhciAqY21kKQotewotCXN0cnVjdCBmYl92YXJpYWJsZSAq dmFyOwotCi0JcHJfZGVidWcoImdldHZhcjogXCIlc1wiXG4iLCBjbWQpOwotCi0JaWYgKCFzdHJj bXBfbDEoY21kLCAiYWxsIikpIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2YXIsICZmX2ZiLT52 YXJpYWJsZXMsIGxpc3QpIHsKLQkJCWZhc3Rib290X3R4X3ByaW50KGZfZmIsIEZBU1RCT09UX01T R19JTkZPLCAiJXM6ICVzIiwKLQkJCQkJICB2YXItPm5hbWUsIHZhci0+dmFsdWUpOwotCQl9Ci0J CWZhc3Rib290X3R4X3ByaW50KGZfZmIsIEZBU1RCT09UX01TR19PS0FZLCAiIik7Ci0JCXJldHVy bjsKLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZhciwgJmZfZmItPnZhcmlhYmxlcywgbGlz dCkgewotCQlpZiAoIXN0cmNtcChjbWQsIHZhci0+bmFtZSkpIHsKLQkJCWZhc3Rib290X3R4X3By aW50KGZfZmIsIEZBU1RCT09UX01TR19PS0FZLCB2YXItPnZhbHVlKTsKLQkJCXJldHVybjsKLQkJ fQotCX0KLQotCWZhc3Rib290X3R4X3ByaW50KGZfZmIsIEZBU1RCT09UX01TR19PS0FZLCAiIik7 Ci19Ci0KIHN0YXRpYyBpbnQgcnhfYnl0ZXNfZXhwZWN0ZWQoc3RydWN0IGZfZmFzdGJvb3QgKmZf ZmIpCiB7Ci0JaW50IHJlbWFpbmluZyA9IGZfZmItPmRvd25sb2FkX3NpemUgLSBmX2ZiLT5kb3du bG9hZF9ieXRlczsKKwlpbnQgcmVtYWluaW5nID0gZl9mYi0+ZmFzdGJvb3QuZG93bmxvYWRfc2l6 ZQorCQkgICAgICAtIGZfZmItPmZhc3Rib290LmRvd25sb2FkX2J5dGVzOwogCiAJaWYgKHJlbWFp bmluZyA+PSBFUF9CVUZGRVJfU0laRSkKIAkJcmV0dXJuIEVQX0JVRkZFUl9TSVpFOwpAQCAtNjgz LDY1MSArMzk2LDUwIEBAIHN0YXRpYyB2b2lkIHJ4X2hhbmRsZXJfZGxfaW1hZ2Uoc3RydWN0IHVz Yl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQogCQlyZXR1cm47CiAJfQogCi0JaWYg KGZhc3Rib290X2Rvd25sb2FkX3RvX2J1ZihmX2ZiKSkgewotCQltZW1jcHkoZl9mYi0+YnVmICsg Zl9mYi0+ZG93bmxvYWRfYnl0ZXMsIGJ1ZmZlciwgcmVxLT5hY3R1YWwpOwotCX0gZWxzZSB7Ci0J CXJldCA9IHdyaXRlKGZfZmItPmRvd25sb2FkX2ZkLCBidWZmZXIsIHJlcS0+YWN0dWFsKTsKLQkJ aWYgKHJldCA8IDApIHsKLQkJCWZhc3Rib290X3R4X3ByaW50KGZfZmIsIEZBU1RCT09UX01TR19G QUlMLCBzdHJlcnJvcigtcmV0KSk7Ci0JCQlyZXR1cm47Ci0JCX0KKwlyZXQgPSBmYXN0Ym9vdF9o YW5kbGVfZG93bmxvYWRfZGF0YSgmZl9mYi0+ZmFzdGJvb3QsIGJ1ZmZlciwKKwkJCQkJICAgIHJl cS0+YWN0dWFsKTsKKwlpZiAocmV0IDwgMCkgeworCQlmYXN0Ym9vdF90eF9wcmludCgmZl9mYi0+ ZmFzdGJvb3QsIEZBU1RCT09UX01TR19GQUlMLAorCQkJCSAgc3RyZXJyb3IoLXJldCkpOworCQly ZXR1cm47CiAJfQogCi0JZl9mYi0+ZG93bmxvYWRfYnl0ZXMgKz0gcmVxLT5hY3R1YWw7Ci0KIAly ZXEtPmxlbmd0aCA9IHJ4X2J5dGVzX2V4cGVjdGVkKGZfZmIpOwogCi0Jc2hvd19wcm9ncmVzcyhm X2ZiLT5kb3dubG9hZF9ieXRlcyk7Ci0KIAkvKiBDaGVjayBpZiB0cmFuc2ZlciBpcyBkb25lICov Ci0JaWYgKGZfZmItPmRvd25sb2FkX2J5dGVzID49IGZfZmItPmRvd25sb2FkX3NpemUpIHsKKwlp ZiAoZl9mYi0+ZmFzdGJvb3QuZG93bmxvYWRfYnl0ZXMgPj0gZl9mYi0+ZmFzdGJvb3QuZG93bmxv YWRfc2l6ZSkgewogCQlyZXEtPmNvbXBsZXRlID0gcnhfaGFuZGxlcl9jb21tYW5kOwogCQlyZXEt Pmxlbmd0aCA9IEVQX0JVRkZFUl9TSVpFOwotCQljbG9zZShmX2ZiLT5kb3dubG9hZF9mZCk7Ci0K LQkJcHJpbnRmKCJcbiIpOwogCi0JCWZhc3Rib290X3R4X3ByaW50KGZfZmIsIEZBU1RCT09UX01T R19JTkZPLCAiRG93bmxvYWRpbmcgJWQgYnl0ZXMgZmluaXNoZWQiLAotCQkJCSAgZl9mYi0+ZG93 bmxvYWRfYnl0ZXMpOwotCi0JCWZhc3Rib290X3R4X3ByaW50KGZfZmIsIEZBU1RCT09UX01TR19P S0FZLCAiIik7CisJCWZhc3Rib290X2Rvd25sb2FkX2ZpbmlzaGVkKCZmX2ZiLT5mYXN0Ym9vdCk7 CiAJfQogCiAJcmVxLT5hY3R1YWwgPSAwOwogCXVzYl9lcF9xdWV1ZShlcCwgcmVxKTsKIH0KIAot c3RhdGljIHZvaWQgY2JfZG93bmxvYWQoc3RydWN0IGZfZmFzdGJvb3QgKmZfZmIsIGNvbnN0IGNo YXIgKmNtZCkKLXsKLQlmX2ZiLT5kb3dubG9hZF9zaXplID0gc2ltcGxlX3N0cnRvdWwoY21kLCBO VUxMLCAxNik7Ci0JZl9mYi0+ZG93bmxvYWRfYnl0ZXMgPSAwOwotCi0JZmFzdGJvb3RfdHhfcHJp bnQoZl9mYiwgRkFTVEJPT1RfTVNHX0lORk8sICJEb3dubG9hZGluZyAlZCBieXRlcy4uLiIsCi0J CQkgIGZfZmItPmRvd25sb2FkX3NpemUpOwotCi0JaW5pdF9wcm9ncmVzc2lvbl9iYXIoZl9mYi0+ ZG93bmxvYWRfc2l6ZSk7Ci0KLQlpZiAoZmFzdGJvb3RfZG93bmxvYWRfdG9fYnVmKGZfZmIpKSB7 Ci0JCWZyZWUoZl9mYi0+YnVmKTsKLQkJZl9mYi0+YnVmID0gbWFsbG9jKGZfZmItPmRvd25sb2Fk X3NpemUpOwotCQlpZiAoIWZfZmItPmJ1ZikgewotCQkJZmFzdGJvb3RfdHhfcHJpbnQoZl9mYiwg RkFTVEJPT1RfTVNHX0ZBSUwsCi0JCQkJCSAgIm5vdCBlbm91Z2ggbWVtb3J5Iik7Ci0JCQlyZXR1 cm47Ci0JCX0KLQl9IGVsc2UgewotCQlmX2ZiLT5kb3dubG9hZF9mZCA9IG9wZW4oRkFTVEJPT1Rf VE1QRklMRSwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQyk7Ci0JCWlmIChmX2ZiLT5kb3du bG9hZF9mZCA8IDApIHsKLQkJCWZhc3Rib290X3R4X3ByaW50KGZfZmIsIEZBU1RCT09UX01TR19G QUlMLAotCQkJCQkgICJpbnRlcm5hbCBlcnJvciIpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0J aWYgKCFmX2ZiLT5kb3dubG9hZF9zaXplKSB7Ci0JCWZhc3Rib290X3R4X3ByaW50KGZfZmIsIEZB U1RCT09UX01TR19GQUlMLAotCQkJCQkgICJkYXRhIGludmFsaWQgc2l6ZSIpOwotCX0gZWxzZSB7 Ci0JCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxID0gZl9mYi0+b3V0X3JlcTsKLQkJZmFzdGJvb3Rf dHhfcHJpbnQoZl9mYiwgRkFTVEJPT1RfTVNHX0RBVEEsCi0JCQkJCSAgIiUwOHgiLCBmX2ZiLT5k b3dubG9hZF9zaXplKTsKLQkJcmVxLT5jb21wbGV0ZSA9IHJ4X2hhbmRsZXJfZGxfaW1hZ2U7Ci0J CXJlcS0+bGVuZ3RoID0gcnhfYnl0ZXNfZXhwZWN0ZWQoZl9mYik7Ci0JfQotfQotCi1zdGF0aWMg dm9pZCBfX21heWJlX3VudXNlZCBjYl9ib290KHN0cnVjdCBmX2Zhc3Rib290ICpmX2ZiLCBjb25z dCBjaGFyICpvcHQpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgYm9vdG1fZGF0YSBkYXRhID0gewot CQkuaW5pdHJkX2FkZHJlc3MgPSBVSU1BR0VfSU5WQUxJRF9BRERSRVNTLAotCQkub3NfYWRkcmVz cyA9IFVJTUFHRV9TT01FX0FERFJFU1MsCi0JfTsKLQotCWZhc3Rib290X3R4X3ByaW50KGZfZmIs IEZBU1RCT09UX01TR19JTkZPLCAiQm9vdGluZyBrZXJuZWwuLlxuIik7Ci0KLQlnbG9iYWx2YXJf c2V0X21hdGNoKCJsaW51eC5ib290YXJncy5keW4uIiwgIiIpOwotCWdsb2JhbHZhcl9zZXRfbWF0 Y2goImJvb3RtLmltYWdlIiwgIiIpOwotCi0JZGF0YS5vc19maWxlID0gRkFTVEJPT1RfVE1QRklM RTsKLQotCXJldCA9IGJvb3RtX2Jvb3QoJmRhdGEpOwotCi0JaWYgKHJldCkKLQkJZmFzdGJvb3Rf dHhfcHJpbnQoZl9mYiwgRkFTVEJPT1RfTVNHX0ZBSUwsICJCb290aW5nIGZhaWxlZDogJXMiLAot CQkJCSAgIHN0cmVycm9yKC1yZXQpKTsKLQllbHNlCi0JCWZhc3Rib290X3R4X3ByaW50KGZfZmIs IEZBU1RCT09UX01TR19PS0FZLCAiIik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmdl dF9tdGQoc3RydWN0IGZfZmFzdGJvb3QgKmZfZmIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQotewot CWludCBmZCwgcmV0OwotCXN0cnVjdCBtdGRfaW5mb191c2VyIG1lbWluZm87Ci0KLQlmZCA9IG9w ZW4oZmlsZW5hbWUsIE9fUkRPTkxZKTsKLQlpZiAoZmQgPCAwKQotCQlyZXR1cm4gRVJSX1BUUigt ZXJybm8pOwotCi0JcmV0ID0gaW9jdGwoZmQsIE1FTUdFVElORk8sICZtZW1pbmZvKTsKLQotCWNs b3NlKGZkKTsKLQotCWlmIChyZXQpCi0JCXJldHVybiBFUlJfUFRSKHJldCk7Ci0KLQlyZXR1cm4g bWVtaW5mby5tdGQ7Ci19Ci0KLXN0YXRpYyBpbnQgZG9fdWJpZm9ybWF0KHN0cnVjdCBmX2Zhc3Ri b290ICpmX2ZiLCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKLQkJCWNvbnN0IGNoYXIgKmZpbGUsIGNv bnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgdWJpZm9ybWF0X2FyZ3MgYXJn cyA9IHsKLQkJLnllcyA9IDEsCi0JCS5pbWFnZSA9IGZpbGUsCi0JCS5pbWFnZV9idWYgPSBidWYs Ci0JCS5pbWFnZV9zaXplID0gbGVuLAotCX07Ci0KLQlpZiAoIWZpbGUpCi0JCWFyZ3Mubm92dGJs ID0gMTsKLQotCWlmICghSVNfRU5BQkxFRChDT05GSUdfVUJJRk9STUFUKSkgewotCQlmYXN0Ym9v dF90eF9wcmludChmX2ZiLCBGQVNUQk9PVF9NU0dfRkFJTCwKLQkJCQkJICAidWJpZm9ybWF0IGlz IG5vdCBhdmFpbGFibGUiKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcmV0dXJuIHViaWZv cm1hdChtdGQsICZhcmdzKTsKLX0KLQotCi1zdGF0aWMgaW50IGNoZWNrX3ViaShzdHJ1Y3QgZl9m YXN0Ym9vdCAqZl9mYiwgc3RydWN0IGZpbGVfbGlzdF9lbnRyeSAqZmVudHJ5LAotCQkgICAgIGVu dW0gZmlsZXR5cGUgZmlsZXR5cGUpCi17Ci0Jc3RydWN0IG10ZF9pbmZvICptdGQ7Ci0KLQltdGQg PSBnZXRfbXRkKGZfZmIsIGZlbnRyeS0+ZmlsZW5hbWUpOwotCi0JLyoKLQkgKiBJc3N1ZSBhIHdh cm5pbmcgd2hlbiB3ZSBhcmUgYWJvdXQgdG8gd3JpdGUgYSBVQkkgaW1hZ2UgdG8gYSBNVEQgZGV2 aWNlCi0JICogYW5kIHRoZSBGSUxFX0xJU1RfRkxBR19VQkkgaXMgbm90IGdpdmVuIGFzIHRoaXMg bWVhbnMgd2UgbG9vc2UgYWxsCi0JICogZXJhc2UgY291bnRlcnMuCi0JICovCi0JaWYgKCFJU19F UlIobXRkKSAmJiBmaWxldHlwZSA9PSBmaWxldHlwZV91YmkgJiYKLQkgICAgIShmZW50cnktPmZs YWdzICYgRklMRV9MSVNUX0ZMQUdfVUJJKSkgewotCQlmYXN0Ym9vdF90eF9wcmludChmX2ZiLCBG QVNUQk9PVF9NU0dfSU5GTywKLQkJCQkgICJ3cml0aW5nIFVCSSBpbWFnZSB0byBNVEQgZGV2aWNl LCAiCi0JCQkJICAiYWRkIHRoZSAndScgIik7Ci0JCWZhc3Rib290X3R4X3ByaW50KGZfZmIsIEZB U1RCT09UX01TR19JTkZPLAotCQkJCSAgImZsYWcgdG8gdGhlIHBhcnRpdGlvbiBkZXNjcmlwdGlv biIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoIShmZW50cnktPmZsYWdzICYgRklMRV9MSVNU X0ZMQUdfVUJJKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1VCSUZP Uk1BVCkpIHsKLQkJZmFzdGJvb3RfdHhfcHJpbnQoZl9mYiwgRkFTVEJPT1RfTVNHX0ZBSUwsCi0J CQkJICAidWJpZm9ybWF0IG5vdCBhdmFpbGFibGUiKTsKLQkJcmV0dXJuIC1FTk9TWVM7Ci0JfQot Ci0JaWYgKElTX0VSUihtdGQpKSB7Ci0JCWZhc3Rib290X3R4X3ByaW50KGZfZmIsIEZBU1RCT09U X01TR19GQUlMLAotCQkJCSAgIlVCSSBmbGFnIGdpdmVuIG9uIG5vbi1NVEQgZGV2aWNlIik7Ci0J CXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChmaWxldHlwZSA9PSBmaWxldHlwZV91YmkpIHsK LQkJZmFzdGJvb3RfdHhfcHJpbnQoZl9mYiwgRkFTVEJPT1RfTVNHX0lORk8sCi0JCQkJICAiVGhp cyBpcyBhIFVCSSBpbWFnZS4uLiIpOwotCQlyZXR1cm4gMTsKLQl9IGVsc2UgewotCQlmYXN0Ym9v dF90eF9wcmludChmX2ZiLCBGQVNUQk9PVF9NU0dfRkFJTCwKLQkJCQkgICJUaGlzIGlzIG5vIFVC SSBpbWFnZSBidXQgJXMiLAotCQkJCSBmaWxlX3R5cGVfdG9fc3RyaW5nKGZpbGV0eXBlKSk7Ci0J CXJldHVybiAtRUlOVkFMOwotCX0KLX0KLQotc3RhdGljIGludCBmYXN0Ym9vdF9oYW5kbGVfc3Bh cnNlKHN0cnVjdCBmX2Zhc3Rib290ICpmX2ZiLAotCQkJCSAgc3RydWN0IGZpbGVfbGlzdF9lbnRy eSAqZmVudHJ5KQotewotCXN0cnVjdCBzcGFyc2VfaW1hZ2VfY3R4ICpzcGFyc2U7Ci0Jdm9pZCAq YnVmID0gTlVMTDsKLQlpbnQgcmV0LCBmZDsKLQl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBPX1JEV1I7 Ci0JaW50IGJ1ZnNpeiA9IFNaXzEyOEs7Ci0Jc3RydWN0IHN0YXQgczsKLQlzdHJ1Y3QgbXRkX2lu Zm8gKm10ZCA9IE5VTEw7Ci0KLQlyZXQgPSBzdGF0KGZlbnRyeS0+ZmlsZW5hbWUsICZzKTsKLQlp ZiAocmV0KSB7Ci0JCWlmIChmZW50cnktPmZsYWdzICYgRklMRV9MSVNUX0ZMQUdfQ1JFQVRFKQot CQkJZmxhZ3MgfD0gT19DUkVBVDsKLQkJZWxzZQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlmZCA9 IG9wZW4oZmVudHJ5LT5maWxlbmFtZSwgZmxhZ3MpOwotCWlmIChmZCA8IDApCi0JCXJldHVybiAt ZXJybm87Ci0KLQlyZXQgPSBmc3RhdChmZCwgJnMpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2Ns b3NlX2ZkOwotCi0Jc3BhcnNlID0gc3BhcnNlX2ltYWdlX29wZW4oRkFTVEJPT1RfVE1QRklMRSk7 Ci0JaWYgKElTX0VSUihzcGFyc2UpKSB7Ci0JCXByX2VycigiQ2Fubm90IG9wZW4gc3BhcnNlIGlt YWdlXG4iKTsKLQkJcmV0ID0gUFRSX0VSUihzcGFyc2UpOwotCQlnb3RvIG91dF9jbG9zZV9mZDsK LQl9Ci0KLQlpZiAoU19JU1JFRyhzLnN0X21vZGUpKSB7Ci0JCXJldCA9IGZ0cnVuY2F0ZShmZCwg c3BhcnNlX2ltYWdlX3NpemUoc3BhcnNlKSk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKLQl9 Ci0KLQlidWYgPSBtYWxsb2MoYnVmc2l6KTsKLQlpZiAoIWJ1ZikgewotCQlyZXQgPSAtRU5PTUVN OwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoZmVudHJ5LT5mbGFncyAmIEZJTEVfTElTVF9GTEFH X1VCSSkgewotCQltdGQgPSBnZXRfbXRkKGZfZmIsIGZlbnRyeS0+ZmlsZW5hbWUpOwotCQlpZiAo SVNfRVJSKG10ZCkpIHsKLQkJCXJldCA9IFBUUl9FUlIobXRkKTsKLQkJCWdvdG8gb3V0OwotCQl9 Ci0JfQotCi0Jd2hpbGUgKDEpIHsKLQkJaW50IHJldGxlbjsKLQkJbG9mZl90IHBvczsKLQotCQly ZXQgPSBzcGFyc2VfaW1hZ2VfcmVhZChzcGFyc2UsIGJ1ZiwgJnBvcywgYnVmc2l6LCAmcmV0bGVu KTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCQlpZiAoIXJldGxlbikKLQkJCWJyZWFrOwot Ci0JCWlmIChwb3MgPT0gMCkgewotCQkJcmV0ID0gY2hlY2tfdWJpKGZfZmIsIGZlbnRyeSwgZmls ZV9kZXRlY3RfdHlwZShidWYsIHJldGxlbikpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJZ290byBv dXQ7Ci0JCX0KLQotCQlpZiAoZmVudHJ5LT5mbGFncyAmIEZJTEVfTElTVF9GTEFHX1VCSSkgewot CQkJaWYgKCFJU19FTkFCTEVEKENPTkZJR19VQklGT1JNQVQpKSB7Ci0JCQkJcmV0ID0gLUVOT1NZ UzsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQotCQkJaWYgKHBvcyA9PSAwKSB7Ci0JCQkJcmV0ID0g ZG9fdWJpZm9ybWF0KGZfZmIsIG10ZCwgTlVMTCwgTlVMTCwgMCk7Ci0JCQkJaWYgKHJldCkKLQkJ CQkJZ290byBvdXQ7Ci0JCQl9Ci0KLQkJCXJldCA9IHViaWZvcm1hdF93cml0ZShtdGQsIGJ1Ziwg cmV0bGVuLCBwb3MpOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIG91dDsKLQkJfSBlbHNlIHsKLQkJ CWRpc2NhcmRfcmFuZ2UoZmQsIHJldGxlbiwgcG9zKTsKLQotCQkJcG9zID0gbHNlZWsoZmQsIHBv cywgU0VFS19TRVQpOwotCQkJaWYgKHBvcyA9PSAtMSkgewotCQkJCXJldCA9IC1lcnJubzsKLQkJ CQlnb3RvIG91dDsKLQkJCX0KLQotCQkJcmV0ID0gd3JpdGVfZnVsbChmZCwgYnVmLCByZXRsZW4p OwotCQkJaWYgKHJldCA8IDApCi0JCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLQlyZXQgPSAwOwot Ci1vdXQ6Ci0JZnJlZShidWYpOwotCXNwYXJzZV9pbWFnZV9jbG9zZShzcGFyc2UpOwotb3V0X2Ns b3NlX2ZkOgotCWNsb3NlKGZkKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGNi X2ZsYXNoKHN0cnVjdCBmX2Zhc3Rib290ICpmX2ZiLCBjb25zdCBjaGFyICpjbWQpCi17Ci0Jc3Ry dWN0IGZpbGVfbGlzdF9lbnRyeSAqZmVudHJ5OwotCWludCByZXQ7Ci0JY29uc3QgY2hhciAqZmls ZW5hbWUgPSBOVUxMLCAqc291cmNlZmlsZTsKLQllbnVtIGZpbGV0eXBlIGZpbGV0eXBlOwotCi0J aWYgKGZhc3Rib290X2Rvd25sb2FkX3RvX2J1ZihmX2ZiKSkgewotCQlzb3VyY2VmaWxlID0gTlVM TDsKLQkJZmlsZXR5cGUgPSBmaWxlX2RldGVjdF90eXBlKGZfZmItPmJ1ZiwgZl9mYi0+ZG93bmxv YWRfYnl0ZXMpOwotCX0gZWxzZSB7Ci0JCXNvdXJjZWZpbGUgPSBGQVNUQk9PVF9UTVBGSUxFOwot CQlmaWxldHlwZSA9IGZpbGVfbmFtZV9kZXRlY3RfdHlwZShGQVNUQk9PVF9UTVBGSUxFKTsKLQl9 Ci0KLQlmYXN0Ym9vdF90eF9wcmludChmX2ZiLCBGQVNUQk9PVF9NU0dfSU5GTywgIkNvcHlpbmcg ZmlsZSB0byAlcy4uLiIsCi0JCQkgIGNtZCk7Ci0KLQlmZW50cnkgPSBmaWxlX2xpc3RfZW50cnlf YnlfbmFtZShmX2ZiLT5maWxlcywgY21kKTsKLQotCWlmICghZmVudHJ5KSB7Ci0JCWZhc3Rib290 X3R4X3ByaW50KGZfZmIsIEZBU1RCT09UX01TR19GQUlMLCAiTm8gc3VjaCBwYXJ0aXRpb246ICVz IiwKLQkJCQkgIGNtZCk7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlm IChmX2ZiLT5jbWRfZmxhc2gpIHsKLQkJcmV0ID0gZl9mYi0+Y21kX2ZsYXNoKGZfZmIsIGZlbnRy eSwgc291cmNlZmlsZSwgZl9mYi0+YnVmLAotCQkJCSAgICAgIGZfZmItPmRvd25sb2FkX3NpemUp OwotCQlpZiAocmV0ICE9IEZBU1RCT09UX0NNRF9GQUxMVEhST1VHSCkKLQkJCWdvdG8gb3V0Owot CX0KLQotCWZpbGVuYW1lID0gZmVudHJ5LT5maWxlbmFtZTsKLQotCWlmIChmaWxldHlwZSA9PSBm aWxldHlwZV9hbmRyb2lkX3NwYXJzZSkgewotCQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1VTQl9H QURHRVRfRkFTVEJPT1RfU1BBUlNFKSB8fAotCQkgICAgZmFzdGJvb3RfZG93bmxvYWRfdG9fYnVm KGZfZmIpKSB7Ci0JCQlmYXN0Ym9vdF90eF9wcmludChmX2ZiLCBGQVNUQk9PVF9NU0dfRkFJTCwK LQkJCQkJICAic3BhcnNlIGltYWdlIG5vdCBzdXBwb3J0ZWQiKTsKLQkJCXJldCA9IC1FT1BOT1RT VVBQOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlyZXQgPSBmYXN0Ym9vdF9oYW5kbGVfc3BhcnNl KGZfZmIsIGZlbnRyeSk7Ci0JCWlmIChyZXQpCi0JCQlmYXN0Ym9vdF90eF9wcmludChmX2ZiLCBG QVNUQk9PVF9NU0dfRkFJTCwKLQkJCQkJICAid3JpdGluZyBzcGFyc2UgaW1hZ2U6ICVzIiwKLQkJ CQkJICBzdHJlcnJvcigtcmV0KSk7Ci0KLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gY2hlY2tf dWJpKGZfZmIsIGZlbnRyeSwgZmlsZXR5cGUpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsK LQotCWlmIChyZXQgPiAwKSB7Ci0JCXN0cnVjdCBtdGRfaW5mbyAqbXRkOwotCi0JCW10ZCA9IGdl dF9tdGQoZl9mYiwgZmVudHJ5LT5maWxlbmFtZSk7Ci0KLQkJcmV0ID0gZG9fdWJpZm9ybWF0KGZf ZmIsIG10ZCwgc291cmNlZmlsZSwgZl9mYi0+YnVmLAotCQkJCSAgIGZfZmItPmRvd25sb2FkX3Np emUpOwotCQlpZiAocmV0KSB7Ci0JCQlmYXN0Ym9vdF90eF9wcmludChmX2ZiLCBGQVNUQk9PVF9N U0dfRkFJTCwKLQkJCQkJICAid3JpdGUgcGFydGl0aW9uOiAlcyIsCi0JCQkJCSAgc3RyZXJyb3Io LXJldCkpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoSVNf RU5BQkxFRChDT05GSUdfQkFSRUJPWF9VUERBVEUpICYmIGZpbGV0eXBlX2lzX2JhcmVib3hfaW1h Z2UoZmlsZXR5cGUpKSB7Ci0JCXN0cnVjdCBiYnVfaGFuZGxlciAqaGFuZGxlcjsKLQkJc3RydWN0 IGJidV9kYXRhIGRhdGEgPSB7Ci0JCQkuZGV2aWNlZmlsZSA9IGZpbGVuYW1lLAotCQkJLmZsYWdz ID0gQkJVX0ZMQUdfWUVTLAotCQl9OwotCi0JCWhhbmRsZXIgPSBiYnVfZmluZF9oYW5kbGVyX2J5 X2RldmljZShkYXRhLmRldmljZWZpbGUpOwotCQlpZiAoIWhhbmRsZXIpCi0JCQlnb3RvIGNvcHk7 Ci0KLQkJZmFzdGJvb3RfdHhfcHJpbnQoZl9mYiwgRkFTVEJPT1RfTVNHX0lORk8sCi0JCQkJICAi VGhpcyBpcyBhIGJhcmVib3ggaW1hZ2UuLi4iKTsKLQotCQlpZiAoZmFzdGJvb3RfZG93bmxvYWRf dG9fYnVmKGZfZmIpKSB7Ci0JCQlkYXRhLmxlbiA9IGZfZmItPmRvd25sb2FkX3NpemU7Ci0JCX0g ZWxzZSB7Ci0JCQlyZXQgPSByZWFkX2ZpbGVfMihzb3VyY2VmaWxlLCAmZGF0YS5sZW4sICZmX2Zi LT5idWYsCi0JCQkJCWZfZmItPmRvd25sb2FkX3NpemUpOwotCQkJaWYgKHJldCkgewotCQkJCWZh c3Rib290X3R4X3ByaW50KGZfZmIsIEZBU1RCT09UX01TR19GQUlMLAotCQkJCQkJICAicmVhZGlu ZyBiYXJlYm94Iik7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCX0KLQotCQlkYXRhLmltYWdlID0g Zl9mYi0+YnVmOwotCQlkYXRhLmltYWdlZmlsZSA9IHNvdXJjZWZpbGU7Ci0KLQkJcmV0ID0gYmFy ZWJveF91cGRhdGUoJmRhdGEsIGhhbmRsZXIpOwotCi0JCWlmIChyZXQpCi0JCQlmYXN0Ym9vdF90 eF9wcmludChmX2ZiLCBGQVNUQk9PVF9NU0dfRkFJTCwKLQkJCQkgICJ1cGRhdGUgYmFyZWJveDog JXMiLCBzdHJlcnJvcigtcmV0KSk7Ci0KLQkJZ290byBvdXQ7Ci0JfQotCi1jb3B5OgotCWlmIChm YXN0Ym9vdF9kb3dubG9hZF90b19idWYoZl9mYikpCi0JCXJldCA9IHdyaXRlX2ZpbGUoZmlsZW5h bWUsIGZfZmItPmJ1ZiwgZl9mYi0+ZG93bmxvYWRfc2l6ZSk7Ci0JZWxzZQotCQlyZXQgPSBjb3B5 X2ZpbGUoRkFTVEJPT1RfVE1QRklMRSwgZmlsZW5hbWUsIDEpOwotCi0JaWYgKHJldCkKLQkJZmFz dGJvb3RfdHhfcHJpbnQoZl9mYiwgRkFTVEJPT1RfTVNHX0ZBSUwsCi0JCQkJICAid3JpdGUgcGFy dGl0aW9uOiAlcyIsIHN0cmVycm9yKC1yZXQpKTsKLQotb3V0OgotCWlmICghcmV0KQotCQlmYXN0 Ym9vdF90eF9wcmludChmX2ZiLCBGQVNUQk9PVF9NU0dfT0tBWSwgIiIpOwotCi0JZnJlZShmX2Zi LT5idWYpOwotCWZfZmItPmJ1ZiA9IE5VTEw7Ci0KLQlpZiAoIWZhc3Rib290X2Rvd25sb2FkX3Rv X2J1ZihmX2ZiKSkKLQkJdW5saW5rKEZBU1RCT09UX1RNUEZJTEUpOwotfQotCi1zdGF0aWMgdm9p ZCBjYl9lcmFzZShzdHJ1Y3QgZl9mYXN0Ym9vdCAqZl9mYiwgY29uc3QgY2hhciAqY21kKQotewot CXN0cnVjdCBmaWxlX2xpc3RfZW50cnkgKmZlbnRyeTsKLQlpbnQgcmV0OwotCWNvbnN0IGNoYXIg KmZpbGVuYW1lID0gTlVMTDsKLQlpbnQgZmQ7Ci0KLQlmYXN0Ym9vdF90eF9wcmludChmX2ZiLCBG QVNUQk9PVF9NU0dfSU5GTywgIkVyYXNpbmcgJXMuLi4iLCBjbWQpOwotCi0JZmlsZV9saXN0X2Zv cl9lYWNoX2VudHJ5KGZfZmItPmZpbGVzLCBmZW50cnkpIHsKLQkJaWYgKCFzdHJjbXAoY21kLCBm ZW50cnktPm5hbWUpKSB7Ci0JCQlmaWxlbmFtZSA9IGZlbnRyeS0+ZmlsZW5hbWU7Ci0JCQlicmVh azsKLQkJfQotCX0KLQotCWlmICghZmlsZW5hbWUpIHsKLQkJZmFzdGJvb3RfdHhfcHJpbnQoZl9m YiwgRkFTVEJPT1RfTVNHX0ZBSUwsCi0JCQkJICAiTm8gc3VjaCBwYXJ0aXRpb246ICVzIiwgY21k KTsKLQkJcmV0dXJuOwotCX0KLQotCWZkID0gb3BlbihmaWxlbmFtZSwgT19SRFdSKTsKLQlpZiAo ZmQgPCAwKQotCQlmYXN0Ym9vdF90eF9wcmludChmX2ZiLCBGQVNUQk9PVF9NU0dfRkFJTCwgc3Ry ZXJyb3IoLWZkKSk7Ci0KLQlyZXQgPSBlcmFzZShmZCwgRVJBU0VfU0laRV9BTEwsIDApOwotCi0J Y2xvc2UoZmQpOwotCi0JaWYgKHJldCkKLQkJZmFzdGJvb3RfdHhfcHJpbnQoZl9mYiwgRkFTVEJP T1RfTVNHX0ZBSUwsCi0JCQkJICAiY2Fubm90IGVyYXNlIHBhcnRpdGlvbiAlczogJXMiLAotCQkJ CSAgZmlsZW5hbWUsIHN0cmVycm9yKC1yZXQpKTsKLQllbHNlCi0JCWZhc3Rib290X3R4X3ByaW50 KGZfZmIsIEZBU1RCT09UX01TR19PS0FZLCAiIik7Ci19Ci0KLXN0cnVjdCBjbWRfZGlzcGF0Y2hf aW5mbyB7Ci0JY2hhciAqY21kOwotCXZvaWQgKCpjYikoc3RydWN0IGZfZmFzdGJvb3QgKmZfZmIs IGNvbnN0IGNoYXIgKm9wdCk7Ci19OwotCi1zdGF0aWMgdm9pZCBmYl9ydW5fY29tbWFuZChzdHJ1 Y3QgZl9mYXN0Ym9vdCAqZl9mYiwgY29uc3QgY2hhciAqY21kYnVmLAotCQljb25zdCBzdHJ1Y3Qg Y21kX2Rpc3BhdGNoX2luZm8gKmNtZHMsIGludCBudW1fY29tbWFuZHMpCi17Ci0JY29uc3Qgc3Ry dWN0IGNtZF9kaXNwYXRjaF9pbmZvICpjbWQ7Ci0JaW50IGk7Ci0KLQljb25zb2xlX2NvdW50ZG93 bl9hYm9ydCgpOwotCi0JZm9yIChpID0gMDsgaSA8IG51bV9jb21tYW5kczsgaSsrKSB7Ci0JCWNt ZCA9ICZjbWRzW2ldOwotCi0JCWlmICghc3RyY21wX2wxKGNtZC0+Y21kLCBjbWRidWYpKSB7Ci0J CQljbWQtPmNiKGZfZmIsIGNtZGJ1ZiArIHN0cmxlbihjbWQtPmNtZCkpOwotCi0JCQlyZXR1cm47 Ci0JCX0KLQl9Ci0KLQlmYXN0Ym9vdF90eF9wcmludChmX2ZiLCBGQVNUQk9PVF9NU0dfRkFJTCwg InVua25vd24gY29tbWFuZCAlcyIsCi0JCQkgIGNtZGJ1Zik7Ci19Ci0KLXN0YXRpYyB2b2lkIGNi X29lbV9nZXRlbnYoc3RydWN0IGZfZmFzdGJvb3QgKmZfZmIsIGNvbnN0IGNoYXIgKmNtZCkKLXsK LQljb25zdCBjaGFyICp2YWx1ZTsKLQotCXByX2RlYnVnKCIlczogXCIlc1wiXG4iLCBfX2Z1bmNf XywgY21kKTsKLQotCXZhbHVlID0gZ2V0ZW52KGNtZCk7Ci0KLQlmYXN0Ym9vdF90eF9wcmludChm X2ZiLCBGQVNUQk9PVF9NU0dfSU5GTywgdmFsdWUgPyB2YWx1ZSA6ICIiKTsKLQlmYXN0Ym9vdF90 eF9wcmludChmX2ZiLCBGQVNUQk9PVF9NU0dfT0tBWSwgIiIpOwotfQotCi1zdGF0aWMgdm9pZCBj Yl9vZW1fc2V0ZW52KHN0cnVjdCBmX2Zhc3Rib290ICpmX2ZiLCBjb25zdCBjaGFyICpjbWQpCi17 Ci0JY2hhciAqdmFyID0geHN0cmR1cChjbWQpOwotCWNoYXIgKnZhbHVlOwotCWludCByZXQ7Ci0K LQlwcl9kZWJ1ZygiJXM6IFwiJXNcIlxuIiwgX19mdW5jX18sIGNtZCk7Ci0KLQl2YWx1ZSA9IHN0 cmNocih2YXIsICc9Jyk7Ci0JaWYgKCF2YWx1ZSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3Rv IG91dDsKLQl9Ci0KLQkqdmFsdWUrKyA9IDA7Ci0KLQlyZXQgPSBzZXRlbnYodmFyLCB2YWx1ZSk7 Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlmYXN0Ym9vdF90eF9wcmludChmX2ZiLCBGQVNU Qk9PVF9NU0dfT0tBWSwgIiIpOwotb3V0OgotCWZyZWUodmFyKTsKLQotCWlmIChyZXQpCi0JCWZh c3Rib290X3R4X3ByaW50KGZfZmIsIEZBU1RCT09UX01TR19GQUlMLCBzdHJlcnJvcigtcmV0KSk7 Ci19Ci0KLXN0YXRpYyB2b2lkIGNiX29lbV9leGVjKHN0cnVjdCBmX2Zhc3Rib290ICpmX2ZiLCBj b25zdCBjaGFyICpjbWQpCitzdGF0aWMgdm9pZCBmYXN0Ym9vdF9zdGFydF9kb3dubG9hZF91c2Io c3RydWN0IGZhc3Rib290ICpmYikKIHsKLQlpbnQgcmV0OworCXN0cnVjdCBmX2Zhc3Rib290ICpm X2ZiID0gY29udGFpbmVyX29mKGZiLCBzdHJ1Y3QgZl9mYXN0Ym9vdCwgZmFzdGJvb3QpOworCXN0 cnVjdCB1c2JfcmVxdWVzdCAqcmVxID0gZl9mYi0+b3V0X3JlcTsKIAotCWlmICghSVNfRU5BQkxF RChDT05GSUdfQ09NTUFORF9TVVBQT1JUKSkgewotCQlmYXN0Ym9vdF90eF9wcmludChmX2ZiLCBG QVNUQk9PVF9NU0dfRkFJTCwKLQkJCQkgICJubyBjb21tYW5kIHN1cHBvcnQgYXZhaWxhYmxlIik7 Ci0JCXJldHVybjsKLQl9Ci0KLQlyZXQgPSBydW5fY29tbWFuZChjbWQpOwotCWlmIChyZXQgPCAw KQotCQlmYXN0Ym9vdF90eF9wcmludChmX2ZiLCBGQVNUQk9PVF9NU0dfRkFJTCwgc3RyZXJyb3Io LXJldCkpOwotCWVsc2UgaWYgKHJldCA+IDApCi0JCWZhc3Rib290X3R4X3ByaW50KGZfZmIsIEZB U1RCT09UX01TR19GQUlMLCAiIik7Ci0JZWxzZQotCQlmYXN0Ym9vdF90eF9wcmludChmX2ZiLCBG QVNUQk9PVF9NU0dfT0tBWSwgIiIpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNtZF9kaXNw YXRjaF9pbmZvIGNtZF9vZW1fZGlzcGF0Y2hfaW5mb1tdID0gewotCXsKLQkJLmNtZCA9ICJnZXRl bnYgIiwKLQkJLmNiID0gY2Jfb2VtX2dldGVudiwKLQl9LCB7Ci0JCS5jbWQgPSAic2V0ZW52ICIs Ci0JCS5jYiA9IGNiX29lbV9zZXRlbnYsCi0JfSwgewotCQkuY21kID0gImV4ZWMgIiwKLQkJLmNi ID0gY2Jfb2VtX2V4ZWMsCi0JfSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2VkIGNi X29lbShzdHJ1Y3QgZl9mYXN0Ym9vdCAqZl9mYiwgY29uc3QgY2hhciAqY21kKQotewotCXByX2Rl YnVnKCIlczogXCIlc1wiXG4iLCBfX2Z1bmNfXywgY21kKTsKLQotCWZiX3J1bl9jb21tYW5kKGZf ZmIsIGNtZCwgY21kX29lbV9kaXNwYXRjaF9pbmZvLCBBUlJBWV9TSVpFKGNtZF9vZW1fZGlzcGF0 Y2hfaW5mbykpOworCXJlcS0+Y29tcGxldGUgPSByeF9oYW5kbGVyX2RsX2ltYWdlOworCXJlcS0+ bGVuZ3RoID0gcnhfYnl0ZXNfZXhwZWN0ZWQoZl9mYik7CisJZmFzdGJvb3Rfc3RhcnRfZG93bmxv YWRfZ2VuZXJpYyhmYik7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY21kX2Rpc3BhdGNoX2lu Zm8gY21kX2Rpc3BhdGNoX2luZm9bXSA9IHsKLQl7Ci0JCS5jbWQgPSAicmVib290IiwKLQkJLmNi ID0gY2JfcmVib290LAotCX0sIHsKLQkJLmNtZCA9ICJnZXR2YXI6IiwKLQkJLmNiID0gY2JfZ2V0 dmFyLAotCX0sIHsKLQkJLmNtZCA9ICJkb3dubG9hZDoiLAotCQkuY2IgPSBjYl9kb3dubG9hZCwK LSNpZiBkZWZpbmVkKENPTkZJR19CT09UTSkKLQl9LCB7Ci0JCS5jbWQgPSAiYm9vdCIsCi0JCS5j YiA9IGNiX2Jvb3QsCi0jZW5kaWYKLQl9LCB7Ci0JCS5jbWQgPSAiZmxhc2g6IiwKLQkJLmNiID0g Y2JfZmxhc2gsCi0JfSwgewotCQkuY21kID0gImVyYXNlOiIsCi0JCS5jYiA9IGNiX2VyYXNlLAot I2lmIGRlZmluZWQoQ09ORklHX1VTQl9HQURHRVRfRkFTVEJPT1RfQ01EX09FTSkKLQl9LCB7Ci0J CS5jbWQgPSAib2VtICIsCi0JCS5jYiA9IGNiX29lbSwKLSNlbmRpZgotCX0sCi19OwotCiBzdGF0 aWMgdm9pZCByeF9oYW5kbGVyX2NvbW1hbmQoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2Jf cmVxdWVzdCAqcmVxKQogewogCWNoYXIgKmNtZGJ1ZiA9IHJlcS0+YnVmOwogCXN0cnVjdCBmX2Zh c3Rib290ICpmX2ZiID0gcmVxLT5jb250ZXh0OwotCWludCByZXQ7CiAKIAlpZiAocmVxLT5zdGF0 dXMgIT0gMCkKIAkJcmV0dXJuOwogCi0JZl9mYi0+YWN0aXZlID0gdHJ1ZTsKLQogCSooY21kYnVm ICsgcmVxLT5hY3R1YWwpID0gMDsKLQotCWlmIChmX2ZiLT5jbWRfZXhlYykgewotCQlyZXQgPSBm X2ZiLT5jbWRfZXhlYyhmX2ZiLCBjbWRidWYpOwotCQlpZiAocmV0ICE9IEZBU1RCT09UX0NNRF9G QUxMVEhST1VHSCkKLQkJCWdvdG8gZG9uZTsKLQl9Ci0KLQlmYl9ydW5fY29tbWFuZChmX2ZiLCBj bWRidWYsIGNtZF9kaXNwYXRjaF9pbmZvLAotCQkJCUFSUkFZX1NJWkUoY21kX2Rpc3BhdGNoX2lu Zm8pKTsKLWRvbmU6CisJZmFzdGJvb3RfZXhlY19jbWQoJmZfZmItPmZhc3Rib290LCBjbWRidWYp OwogCSpjbWRidWYgPSAnXDAnOwogCXJlcS0+YWN0dWFsID0gMDsKIAltZW1zZXQocmVxLT5idWYs IDAsIEVQX0JVRkZFUl9TSVpFKTsKIAl1c2JfZXBfcXVldWUoZXAsIHJlcSk7CiB9Ci0KLXN0YXRp YyBpbnQgZmFzdGJvb3RfZ2xvYmFsdmFyc19pbml0KHZvaWQpCi17Ci0JaWYgKElTX0VOQUJMRUQo Q09ORklHX1VTQl9HQURHRVRfRkFTVEJPT1RfU1BBUlNFKSkKLQkJZ2xvYmFsdmFyX2FkZF9zaW1w bGVfaW50KCJ1c2JnYWRnZXQuZmFzdGJvb3RfbWF4X2Rvd25sb2FkX3NpemUiLAotCQkJCSAmZmFz dGJvb3RfbWF4X2Rvd25sb2FkX3NpemUsICIldSIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWRldmlj ZV9pbml0Y2FsbChmYXN0Ym9vdF9nbG9iYWx2YXJzX2luaXQpOwotCi1CQVJFQk9YX01BR0lDVkFS X05BTUVEKGdsb2JhbF91c2JnYWRnZXRfZmFzdGJvb3RfbWF4X2Rvd25sb2FkX3NpemUsCi0JCSAg ICAgICBnbG9iYWwudXNiZ2FkZ2V0LmZhc3Rib290X21heF9kb3dubG9hZF9zaXplLAotCQkgICAg ICAgIkZhc3Rib290IG1heGltdW0gZG93bmxvYWQgc2l6ZSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy91c2IvZ2FkZ2V0L211bHRpLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbXVsdGkuYwppbmRleCBk NmVkZmI4Y2YyLi40NDVjYzMyNDIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbXVs dGkuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbXVsdGkuYwpAQCAtMTI3LDEwICsxMjcsNyBA QCBzdGF0aWMgaW50IG11bHRpX2JpbmRfZmFzdGJvb3Qoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2 ICpjZGV2KQogCX0KIAogCW9wdHMgPSBjb250YWluZXJfb2YoZmlfZmFzdGJvb3QsIHN0cnVjdCBm X2Zhc3Rib290X29wdHMsIGZ1bmNfaW5zdCk7Ci0Jb3B0cy0+ZmlsZXMgPSBnYWRnZXRfbXVsdGlf b3B0cy0+ZmFzdGJvb3Rfb3B0cy5maWxlczsKLQlvcHRzLT5jbWRfZXhlYyA9IGdhZGdldF9tdWx0 aV9vcHRzLT5mYXN0Ym9vdF9vcHRzLmNtZF9leGVjOwotCW9wdHMtPmNtZF9mbGFzaCA9IGdhZGdl dF9tdWx0aV9vcHRzLT5mYXN0Ym9vdF9vcHRzLmNtZF9mbGFzaDsKLQlvcHRzLT5leHBvcnRfYmJ1 ID0gZ2FkZ2V0X211bHRpX29wdHMtPmZhc3Rib290X29wdHMuZXhwb3J0X2JidTsKKwlvcHRzLT5j b21tb24gPSBnYWRnZXRfbXVsdGlfb3B0cy0+ZmFzdGJvb3Rfb3B0czsKIAogCWZfZmFzdGJvb3Qg PSB1c2JfZ2V0X2Z1bmN0aW9uKGZpX2Zhc3Rib290KTsKIAlpZiAoSVNfRVJSKGZfZmFzdGJvb3Qp KSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2Zhc3Rib290LmggYi9pbmNsdWRlL2Zhc3Rib290LmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uM2I2Y2FlOGE1OAotLS0gL2Rl di9udWxsCisrKyBiL2luY2x1ZGUvZmFzdGJvb3QuaApAQCAtMCwwICsxLDY2IEBACisjaWZuZGVm IF9fRkFTVEJPT1RfXworI2RlZmluZSBfX0ZBU1RCT09UX18KKworI2luY2x1ZGUgPGNvbW1vbi5o PgorI2luY2x1ZGUgPGZpbGUtbGlzdC5oPgorI2luY2x1ZGUgPG5ldC5oPgorCisvKgorICogUmV0 dXJuIGNvZGVzIGZvciB0aGUgZXhlY19jbWQgY2FsbGJhY2sgYWJvdmU6CisgKgorICogRkFTVEJP T1RfQ01EX0ZBTExUSFJPVUdIIC0gTm90IGhhbmRsZWQgYnkgdGhlIGV4dGVybmFsIGNvbW1hbmQg ZGlzcGF0Y2hlciwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSBpdCB3aXRo IGludGVybmFsIGRpc3BhdGNoZXIKKyAqIE90aGVyIHRoYW4gdGhlc2UgbmVnYXRpdmUgZXJyb3Ig Y29kZXMgbWVhbiBlcnJvcnMgaGFuZGxpbmcgdGhlIGNvbW1hbmQgYW5kCisgKiB6ZXJvIG1lYW5z IHRoZSBjb21tYW5kIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBoYW5kbGVkLgorICovCisjZGVmaW5l IEZBU1RCT09UX0NNRF9GQUxMVEhST1VHSAkxCisKK3N0cnVjdCBmYXN0Ym9vdCB7CisJaW50ICgq d3JpdGUpKHN0cnVjdCBmYXN0Ym9vdCAqZmIsIGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50 IG4pOworCXZvaWQgKCpzdGFydF9kb3dubG9hZCkoc3RydWN0IGZhc3Rib290ICpmYik7CisKKwlz dHJ1Y3QgZmlsZV9saXN0ICpmaWxlczsKKwlpbnQgKCpjbWRfZXhlYykoc3RydWN0IGZhc3Rib290 ICpmYiwgY29uc3QgY2hhciAqY21kKTsKKwlpbnQgKCpjbWRfZmxhc2gpKHN0cnVjdCBmYXN0Ym9v dCAqZmIsIHN0cnVjdCBmaWxlX2xpc3RfZW50cnkgKmVudHJ5LAorCQkJIGNvbnN0IGNoYXIgKmZp bGVuYW1lLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pOworCWludCBkb3dubG9hZF9mZDsK Kwl2b2lkICpidWY7CisKKwlib29sIGFjdGl2ZTsKKworCXNpemVfdCBkb3dubG9hZF9ieXRlczsK KwlzaXplX3QgZG93bmxvYWRfc2l6ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHZhcmlhYmxlczsKK307 CisKKy8qKgorICogc3RydWN0IGZhc3Rib290X29wdHMgLSBvcHRpb25zIHRvIGNvbmZpZ3VyZSBm YXN0Ym9vdAorICogQGZpbGVzOglBIGZpbGVfbGlzdCBjb250YWluaW5nIHRoZSBmaWxlcyAocGFy dGl0aW9ucykgdG8gZXhwb3J0IHZpYSBmYXN0Ym9vdAorICogQGV4cG9ydF9iYnU6CUF1dG9tYXRp Y2FsbHkgaW5jbHVkZSB0aGUgcGFydGl0aW9ucyBwcm92aWRlZCBieSBiYXJlYm94IHVwZGF0ZSAo YmJ1KQorICovCitzdHJ1Y3QgZmFzdGJvb3Rfb3B0cyB7CisJc3RydWN0IGZpbGVfbGlzdCAqZmls ZXM7CisJYm9vbCBleHBvcnRfYmJ1OworCWludCAoKmNtZF9leGVjKShzdHJ1Y3QgZmFzdGJvb3Qg KmZiLCBjb25zdCBjaGFyICpjbWQpOworCWludCAoKmNtZF9mbGFzaCkoc3RydWN0IGZhc3Rib290 ICpmYiwgc3RydWN0IGZpbGVfbGlzdF9lbnRyeSAqZW50cnksCisJCQkgY29uc3QgY2hhciAqZmls ZW5hbWUsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7Cit9OworCitlbnVtIGZhc3Rib290 X21zZ190eXBlIHsKKwlGQVNUQk9PVF9NU0dfT0tBWSwKKwlGQVNUQk9PVF9NU0dfRkFJTCwKKwlG QVNUQk9PVF9NU0dfSU5GTywKKwlGQVNUQk9PVF9NU0dfREFUQSwKK307CisKK2ludCBmYXN0Ym9v dF9nZW5lcmljX2luaXQoc3RydWN0IGZhc3Rib290ICpmYiwgYm9vbCBleHBvcnRfYmJ1KTsKK3Zv aWQgZmFzdGJvb3RfZ2VuZXJpY19jbG9zZShzdHJ1Y3QgZmFzdGJvb3QgKmZiKTsKK3ZvaWQgZmFz dGJvb3RfZ2VuZXJpY19mcmVlKHN0cnVjdCBmYXN0Ym9vdCAqZmIpOworaW50IGZhc3Rib290X2hh bmRsZV9kb3dubG9hZF9kYXRhKHN0cnVjdCBmYXN0Ym9vdCAqZmIsIGNvbnN0IHZvaWQgKmJ1ZmZl ciwKKwkJCQkgIHVuc2lnbmVkIGludCBsZW4pOworaW50IGZhc3Rib290X3R4X3ByaW50KHN0cnVj dCBmYXN0Ym9vdCAqZmIsIGVudW0gZmFzdGJvb3RfbXNnX3R5cGUgdHlwZSwKKwkJICAgICAgY29u c3QgY2hhciAqZm10LCAuLi4pOwordm9pZCBmYXN0Ym9vdF9zdGFydF9kb3dubG9hZF9nZW5lcmlj KHN0cnVjdCBmYXN0Ym9vdCAqZmIpOwordm9pZCBmYXN0Ym9vdF9kb3dubG9hZF9maW5pc2hlZChz dHJ1Y3QgZmFzdGJvb3QgKmZiKTsKK3ZvaWQgZmFzdGJvb3RfZXhlY19jbWQoc3RydWN0IGZhc3Ri b290ICpmYiwgY29uc3QgY2hhciAqY21kYnVmKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVk ZS91c2IvZmFzdGJvb3QuaCBiL2luY2x1ZGUvdXNiL2Zhc3Rib290LmgKaW5kZXggYzA3NzVjNjdk ZC4uYTM2MDliYTVkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91c2IvZmFzdGJvb3QuaAorKysgYi9p bmNsdWRlL3VzYi9mYXN0Ym9vdC5oCkBAIC0xLDQ1ICsxLDE3IEBACiAjaWZuZGVmIF9VU0JfRkFT VEJPT1RfSAogI2RlZmluZSBfVVNCX0ZBU1RCT09UX0gKIAotI2luY2x1ZGUgPGxpbnV4L3R5cGVz Lmg+Ci0jaW5jbHVkZSA8ZmlsZS1saXN0Lmg+CiAjaW5jbHVkZSA8dXNiL2NvbXBvc2l0ZS5oPgot Ci1zdHJ1Y3QgZl9mYXN0Ym9vdDsKKyNpbmNsdWRlIDxmYXN0Ym9vdC5oPgogCiAvKioKICAqIHN0 cnVjdCBmX2Zhc3Rib290X29wdHMgLSBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgZmFzdGJvb3Qg Z2FkZ2V0CisgKiBAY29tbW9uOglPcHRpb25zIGNvbW1vbiB0byBhbGwgZmFzdGJvb3QgcHJvdG9j b2wgdmFyaWFudHMKICAqIEBmdW5jX2luc3Q6CVRoZSBVU0IgZnVuY3Rpb24gaW5zdGFuY2UgdG8g cmVnaXN0ZXIgb24KLSAqIEBmaWxlczoJQSBmaWxlX2xpc3QgY29udGFpbmluZyB0aGUgZmlsZXMg KHBhcnRpdGlvbnMpIHRvIGV4cG9ydCB2aWEgZmFzdGJvb3QKLSAqIEBleHBvcnRfYmJ1OglBdXRv bWF0aWNhbGx5IGluY2x1ZGUgdGhlIHBhcnRpdGlvbnMgcHJvdmlkZWQgYnkgYmFyZWJveCB1cGRh dGUgKGJidSkKICAqLwogc3RydWN0IGZfZmFzdGJvb3Rfb3B0cyB7CisJc3RydWN0IGZhc3Rib290 X29wdHMgY29tbW9uOwogCXN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgZnVuY19pbnN0Owot CXN0cnVjdCBmaWxlX2xpc3QgKmZpbGVzOwotCWJvb2wgZXhwb3J0X2JidTsKLQlpbnQgKCpjbWRf ZXhlYykoc3RydWN0IGZfZmFzdGJvb3QgKiwgY29uc3QgY2hhciAqY21kKTsKLQlpbnQgKCpjbWRf Zmxhc2gpKHN0cnVjdCBmX2Zhc3Rib290ICosIHN0cnVjdCBmaWxlX2xpc3RfZW50cnkgKmVudHJ5 LAotCQkJIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4p OwotfTsKLQotLyoKLSAqIFJldHVybiBjb2RlcyBmb3IgdGhlIGV4ZWNfY21kIGNhbGxiYWNrIGFi b3ZlOgotICoKLSAqIEZBU1RCT09UX0NNRF9GQUxMVEhST1VHSCAtIE5vdCBoYW5kbGVkIGJ5IHRo ZSBleHRlcm5hbCBjb21tYW5kIGRpc3BhdGNoZXIsCi0gKiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBoYW5kbGUgaXQgd2l0aCBpbnRlcm5hbCBkaXNwYXRjaGVyCi0gKiBPdGhlciB0aGFuIHRo ZXNlIG5lZ2F0aXZlIGVycm9yIGNvZGVzIG1lYW4gZXJyb3JzIGhhbmRsaW5nIHRoZSBjb21tYW5k IGFuZAotICogemVybyBtZWFucyB0aGUgY29tbWFuZCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgaGFu ZGxlZC4KLSAqLwotI2RlZmluZSBGQVNUQk9PVF9DTURfRkFMTFRIUk9VR0gJMQotCi1lbnVtIGZh c3Rib290X21zZ190eXBlIHsKLQlGQVNUQk9PVF9NU0dfT0tBWSwKLQlGQVNUQk9PVF9NU0dfRkFJ TCwKLQlGQVNUQk9PVF9NU0dfSU5GTywKLQlGQVNUQk9PVF9NU0dfREFUQSwKIH07CiAKLWludCBm YXN0Ym9vdF90eF9wcmludChzdHJ1Y3QgZl9mYXN0Ym9vdCAqZl9mYiwgZW51bSBmYXN0Ym9vdF9t c2dfdHlwZSB0eXBlLAotCQkgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLik7Ci0KICNlbmRpZiAv KiBfVVNCX0ZBU1RCT09UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXNiL2dhZGdldC1tdWx0 aS5oIGIvaW5jbHVkZS91c2IvZ2FkZ2V0LW11bHRpLmgKaW5kZXggMDMwZTYwNGZlNy4uOWJiNmM4 ODlmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS91c2IvZ2FkZ2V0LW11bHRpLmgKKysrIGIvaW5jbHVk ZS91c2IvZ2FkZ2V0LW11bHRpLmgKQEAgLTYsNyArNiw3IEBACiAjaW5jbHVkZSA8dXNiL3VzYnNl cmlhbC5oPgogCiBzdHJ1Y3QgZl9tdWx0aV9vcHRzIHsKLQlzdHJ1Y3QgZl9mYXN0Ym9vdF9vcHRz IGZhc3Rib290X29wdHM7CisJc3RydWN0IGZhc3Rib290X29wdHMgZmFzdGJvb3Rfb3B0czsKIAlz dHJ1Y3QgZl9kZnVfb3B0cyBkZnVfb3B0czsKIAlpbnQgY3JlYXRlX2FjbTsKIAl2b2lkICgqcmVs ZWFzZSkoc3RydWN0IGZfbXVsdGlfb3B0cyAqb3B0cyk7Ci0tIAoyLjI2LjIKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpiYXJlYm94IG1haWxpbmcgbGlz dApiYXJlYm94QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9iYXJlYm94Cg==