From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2EE00C2D0DB for ; Tue, 28 Jan 2020 20:43:43 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 084F921739 for ; Tue, 28 Jan 2020 20:43:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 084F921739 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=chris-wilson.co.uk Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A37D86F405; Tue, 28 Jan 2020 20:43:42 +0000 (UTC) Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7E2A06F404 for ; Tue, 28 Jan 2020 20:43:38 +0000 (UTC) X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Received: from haswell.alporthouse.com (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP id 20040622-1500050 for multiple; Tue, 28 Jan 2020 20:43:19 +0000 From: Chris Wilson To: intel-gfx@lists.freedesktop.org Date: Tue, 28 Jan 2020 20:43:18 +0000 Message-Id: <20200128204318.4182039-5-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200128204318.4182039-1-chris@chris-wilson.co.uk> References: <20200128204318.4182039-1-chris@chris-wilson.co.uk> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH 5/5] drm/i915/gt: Split logical ring context manipulation into intel_lrc.c X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RXh0cmFjdCB0aGUgY29yZSBmdW5jdGlvbnMgZm9yIHNldHRpbmcgdXAgdGhlIG1hY2hpbmUgZGVw ZW5kZW50IGxvZ2ljYWwKcmluZyBjb250ZXh0IHRvIGludGVsX2xyYy5jLiBUaGlzIHdpbGwgYmUg c2hhcmVkIGJ5IGFsbCBzdWJtaXNzaW9uCmJhY2tlbmRzIHRoYXQgdXRpbGlzZSBsb2dpY2FsIHJp bmcgY29udGV4dHMuCgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdp bHNvbi5jby51az4KQ2M6IERhbmllbGUgQ2VyYW9sbyBTcHVyaW8gPGRhbmllbGUuY2VyYW9sb3Nw dXJpb0BpbnRlbC5jb20+CkNjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwu Y29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICAgICB8 ICAgIDMgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHQuYyAgIHwg ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW44X2VuZ2luZV9jcy5jICAgICAgfCAg MzQwICsrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjhfZW5naW5lX2NzLmggICAgICB8 ICAgMjcgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3Bvb2wuYyAgIHwg ICAgMSArCiAuLi4vZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3dvcmthcm91bmRfYmIuYyAgfCAg MzM1ICsrKysKIC4uLi9kcm0vaTkxNS9ndC9pbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5jICB8 IDE1NTIgKy0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xy Yy5jICAgICAgICAgICB8ICA4MzAgKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9scmMuaCAgICAgICAgICAgfCAgIDMyICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9z ZWxmdGVzdF9leGVjbGlzdHMuYyAgfCAgNDk4ICstLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3Qvc2VsZnRlc3RfbHJjLmMgICAgICAgIHwgIDU0NCArKysrKysKIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L3VjL2ludGVsX2d1Y19hZHMuYyAgICB8ICAgIDEgKwogLi4uL2dwdS9kcm0vaTkxNS9n dC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jIHwgICAzNiArLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Z0L21taW9fY29udGV4dC5jICAgICAgIHwgICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9ndnQvc2NoZWR1bGVyLmMgICAgICAgICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmggICAgICAgICAgICAgICB8ICAgIDEgLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9wZXJmLmMgICAgICAgICAgICAgIHwgICAgMSArCiAxNyBmaWxlcyBjaGFuZ2VkLCAyMTc4 IGluc2VydGlvbnMoKyksIDIwMjYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuOF9lbmdpbmVfY3MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjhfZW5naW5lX2NzLmgKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfd29ya2Fyb3VuZF9iYi5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9scmMu YwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggNThiMGU4NmM3MWY3Li41ZjQ1Mzc5ZjViYTEgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L01ha2VmaWxlCkBAIC03OCw2ICs3OCw3IEBAIGd0LXkgKz0gXAogCWd0L2RlYnVn ZnNfZ3QubyBcCiAJZ3QvZGVidWdmc19ndF9wbS5vIFwKIAlndC9nZW42X3BwZ3R0Lm8gXAorCWd0 L2dlbjhfZW5naW5lX2NzLm8gXAogCWd0L2dlbjhfcHBndHQubyBcCiAJZ3QvaW50ZWxfYnJlYWRj cnVtYnMubyBcCiAJZ3QvaW50ZWxfY29udGV4dC5vIFwKQEAgLTg2LDYgKzg3LDcgQEAgZ3QteSAr PSBcCiAJZ3QvaW50ZWxfZW5naW5lX3BtLm8gXAogCWd0L2ludGVsX2VuZ2luZV9wb29sLm8gXAog CWd0L2ludGVsX2VuZ2luZV91c2VyLm8gXAorCWd0L2ludGVsX2VuZ2luZV93b3JrYXJvdW5kX2Ji Lm8gXAogCWd0L2ludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uLm8gXAogCWd0L2ludGVsX2dndHQu byBcCiAJZ3QvaW50ZWxfZ3QubyBcCkBAIC05NSw2ICs5Nyw3IEBAIGd0LXkgKz0gXAogCWd0L2lu dGVsX2d0X3JlcXVlc3RzLm8gXAogCWd0L2ludGVsX2d0dC5vIFwKIAlndC9pbnRlbF9sbGMubyBc CisJZ3QvaW50ZWxfbHJjLm8gXAogCWd0L2ludGVsX21vY3MubyBcCiAJZ3QvaW50ZWxfcHBndHQu byBcCiAJZ3QvaW50ZWxfcmM2Lm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX2NvbnRleHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV9jb250ZXh0LmMKaW5kZXggZGExYmE4ZmVlZWRjLi5mMjJhMmRiODc1OGUgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jb250ZXh0LmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHQuYwpAQCAtNzQsNiArNzQsNyBAQAog I2luY2x1ZGUgImd0L2ludGVsX2VuZ2luZV9oZWFydGJlYXQuaCIKICNpbmNsdWRlICJndC9pbnRl bF9lbmdpbmVfcG0uaCIKICNpbmNsdWRlICJndC9pbnRlbF9lbmdpbmVfdXNlci5oIgorI2luY2x1 ZGUgImd0L2ludGVsX2xyYy5oIgogI2luY2x1ZGUgImd0L2ludGVsX2xyY19yZWcuaCIKICNpbmNs dWRlICJndC9pbnRlbF9yaW5nLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2dlbjhfZW5naW5lX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW44X2VuZ2lu ZV9jcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODZhOGIzMjg2 MjFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuOF9lbmdp bmVfY3MuYwpAQCAtMCwwICsxLDM0MCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1J VAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lu Y2x1ZGUgImdlbjhfZW5naW5lX2NzLmgiCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRl ICJpbnRlbF9ncHVfY29tbWFuZHMuaCIKKyNpbmNsdWRlICJpbnRlbF9yaW5nLmgiCisjaW5jbHVk ZSAiaW50ZWxfbHJjLmgiCisKK2ludCBnZW44X2VtaXRfZmx1c2hfeGNzKHN0cnVjdCBpOTE1X3Jl cXVlc3QgKnJlcXVlc3QsIHUzMiBtb2RlKQoreworCXUzMiBjbWQsICpjczsKKworCWNzID0gaW50 ZWxfcmluZ19iZWdpbihyZXF1ZXN0LCA0KTsKKwlpZiAoSVNfRVJSKGNzKSkKKwkJcmV0dXJuIFBU Ul9FUlIoY3MpOworCisJY21kID0gTUlfRkxVU0hfRFcgKyAxOworCisJLyogV2UgYWx3YXlzIHJl cXVpcmUgYSBjb21tYW5kIGJhcnJpZXIgc28gdGhhdCBzdWJzZXF1ZW50CisJICogY29tbWFuZHMs IHN1Y2ggYXMgYnJlYWRjcnVtYiBpbnRlcnJ1cHRzLCBhcmUgc3RyaWN0bHkgb3JkZXJlZAorCSAq IHdydCB0aGUgY29udGVudHMgb2YgdGhlIHdyaXRlIGNhY2hlIGJlaW5nIGZsdXNoZWQgdG8gbWVt b3J5CisJICogKGFuZCB0aHVzIGJlaW5nIGNvaGVyZW50IGZyb20gdGhlIENQVSkuCisJICovCisJ Y21kIHw9IE1JX0ZMVVNIX0RXX1NUT1JFX0lOREVYIHwgTUlfRkxVU0hfRFdfT1BfU1RPUkVEVzsK KworCWlmIChtb2RlICYgRU1JVF9JTlZBTElEQVRFKSB7CisJCWNtZCB8PSBNSV9JTlZBTElEQVRF X1RMQjsKKwkJaWYgKHJlcXVlc3QtPmVuZ2luZS0+Y2xhc3MgPT0gVklERU9fREVDT0RFX0NMQVNT KQorCQkJY21kIHw9IE1JX0lOVkFMSURBVEVfQlNEOworCX0KKworCSpjcysrID0gY21kOworCSpj cysrID0gTFJDX1BQSFdTUF9TQ1JBVENIX0FERFI7CisJKmNzKysgPSAwOyAvKiB1cHBlciBhZGRy ICovCisJKmNzKysgPSAwOyAvKiB2YWx1ZSAqLworCWludGVsX3JpbmdfYWR2YW5jZShyZXF1ZXN0 LCBjcyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGdlbjhfZW1pdF9mbHVzaF9yY3Moc3RydWN0 IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCwgdTMyIG1vZGUpCit7CisJdTMyICpjcywgZmxhZ3MgPSAw OworCisJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NTX1NUQUxMOworCisJaWYgKG1vZGUgJiBFTUlU X0ZMVVNIKSB7CisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9SRU5ERVJfVEFSR0VUX0NBQ0hFX0ZM VVNIOworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfREVQVEhfQ0FDSEVfRkxVU0g7CisJCWZsYWdz IHw9IFBJUEVfQ09OVFJPTF9EQ19GTFVTSF9FTkFCTEU7CisJCWZsYWdzIHw9IFBJUEVfQ09OVFJP TF9GTFVTSF9FTkFCTEU7CisJfQorCisJaWYgKG1vZGUgJiBFTUlUX0lOVkFMSURBVEUpIHsKKwkJ ZmxhZ3MgfD0gUElQRV9DT05UUk9MX1RMQl9JTlZBTElEQVRFOworCQlmbGFncyB8PSBQSVBFX0NP TlRST0xfSU5TVFJVQ1RJT05fQ0FDSEVfSU5WQUxJREFURTsKKwkJZmxhZ3MgfD0gUElQRV9DT05U Uk9MX1RFWFRVUkVfQ0FDSEVfSU5WQUxJREFURTsKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1ZG X0NBQ0hFX0lOVkFMSURBVEU7CisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9DT05TVF9DQUNIRV9J TlZBTElEQVRFOworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfU1RBVEVfQ0FDSEVfSU5WQUxJREFU RTsKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1FXX1dSSVRFOworCQlmbGFncyB8PSBQSVBFX0NP TlRST0xfU1RPUkVfREFUQV9JTkRFWDsKKwl9CisKKwljcyA9IGludGVsX3JpbmdfYmVnaW4ocmVx dWVzdCwgNik7CisJaWYgKElTX0VSUihjcykpCisJCXJldHVybiBQVFJfRVJSKGNzKTsKKworCWNz ID0gZ2VuOF9lbWl0X3BpcGVfY29udHJvbChjcywgZmxhZ3MsIExSQ19QUEhXU1BfU0NSQVRDSF9B RERSKTsKKworCWludGVsX3JpbmdfYWR2YW5jZShyZXF1ZXN0LCBjcyk7CisKKwlyZXR1cm4gMDsK K30KKworaW50IGdlbjlfZW1pdF9mbHVzaF9yY3Moc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVz dCwgdTMyIG1vZGUpCit7CisJYm9vbCB2Zl9mbHVzaF93YSA9IGZhbHNlLCBkY19mbHVzaF93YSA9 IGZhbHNlOworCXUzMiAqY3MsIGZsYWdzID0gMDsKKwlpbnQgbGVuID0gNjsKKworCWZsYWdzIHw9 IFBJUEVfQ09OVFJPTF9DU19TVEFMTDsKKworCWlmIChtb2RlICYgRU1JVF9GTFVTSCkgeworCQlm bGFncyB8PSBQSVBFX0NPTlRST0xfUkVOREVSX1RBUkdFVF9DQUNIRV9GTFVTSDsKKwkJZmxhZ3Mg fD0gUElQRV9DT05UUk9MX0RFUFRIX0NBQ0hFX0ZMVVNIOworCQlmbGFncyB8PSBQSVBFX0NPTlRS T0xfRENfRkxVU0hfRU5BQkxFOworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfRkxVU0hfRU5BQkxF OworCX0KKworCWlmIChtb2RlICYgRU1JVF9JTlZBTElEQVRFKSB7CisJCWZsYWdzIHw9IFBJUEVf Q09OVFJPTF9UTEJfSU5WQUxJREFURTsKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0lOU1RSVUNU SU9OX0NBQ0hFX0lOVkFMSURBVEU7CisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9URVhUVVJFX0NB Q0hFX0lOVkFMSURBVEU7CisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9WRl9DQUNIRV9JTlZBTElE QVRFOworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfQ09OU1RfQ0FDSEVfSU5WQUxJREFURTsKKwkJ ZmxhZ3MgfD0gUElQRV9DT05UUk9MX1NUQVRFX0NBQ0hFX0lOVkFMSURBVEU7CisJCWZsYWdzIHw9 IFBJUEVfQ09OVFJPTF9RV19XUklURTsKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1NUT1JFX0RB VEFfSU5ERVg7CisKKwkJLyoKKwkJICogT24gR0VOOTogYmVmb3JlIFZGX0NBQ0hFX0lOVkFMSURB VEUgd2UgbmVlZCB0byBlbWl0IGEgTlVMTAorCQkgKiBwaXBlIGNvbnRyb2wuCisJCSAqLworCQl2 Zl9mbHVzaF93YSA9IHRydWU7CisJCWxlbiArPSA2OworCisJCS8qIFdhRm9yR0FNSGFuZzprYmwg Ki8KKwkJaWYgKElTX0tCTF9SRVZJRChyZXF1ZXN0LT5pOTE1LCAwLCBLQkxfUkVWSURfQjApKSB7 CisJCQlkY19mbHVzaF93YSA9IHRydWU7CisJCQlsZW4gKz0gMTI7CisJCX0KKwl9CisKKwljcyA9 IGludGVsX3JpbmdfYmVnaW4ocmVxdWVzdCwgbGVuKTsKKwlpZiAoSVNfRVJSKGNzKSkKKwkJcmV0 dXJuIFBUUl9FUlIoY3MpOworCisJaWYgKHZmX2ZsdXNoX3dhKQorCQljcyA9IGdlbjhfZW1pdF9w aXBlX2NvbnRyb2woY3MsIDAsIDApOworCisJaWYgKGRjX2ZsdXNoX3dhKQorCQljcyA9IGdlbjhf ZW1pdF9waXBlX2NvbnRyb2woY3MsIFBJUEVfQ09OVFJPTF9EQ19GTFVTSF9FTkFCTEUsCisJCQkJ CSAgICAwKTsKKworCWNzID0gZ2VuOF9lbWl0X3BpcGVfY29udHJvbChjcywgZmxhZ3MsIExSQ19Q UEhXU1BfU0NSQVRDSF9BRERSKTsKKworCWlmIChkY19mbHVzaF93YSkKKwkJY3MgPSBnZW44X2Vt aXRfcGlwZV9jb250cm9sKGNzLCBQSVBFX0NPTlRST0xfQ1NfU1RBTEwsIDApOworCisJaW50ZWxf cmluZ19hZHZhbmNlKHJlcXVlc3QsIGNzKTsKKworCXJldHVybiAwOworfQorCitpbnQgZ2VuMTFf ZW1pdF9mbHVzaF9yY3Moc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCwgdTMyIG1vZGUpCit7 CisJaWYgKG1vZGUgJiBFTUlUX0ZMVVNIKSB7CisJCXUzMiAqY3M7CisJCXUzMiBmbGFncyA9IDA7 CisKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NTX1NUQUxMOworCisJCWZsYWdzIHw9IFBJUEVf Q09OVFJPTF9USUxFX0NBQ0hFX0ZMVVNIOworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfUkVOREVS X1RBUkdFVF9DQUNIRV9GTFVTSDsKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0RFUFRIX0NBQ0hF X0ZMVVNIOworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfRENfRkxVU0hfRU5BQkxFOworCQlmbGFn cyB8PSBQSVBFX0NPTlRST0xfRkxVU0hfRU5BQkxFOworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xf UVdfV1JJVEU7CisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9TVE9SRV9EQVRBX0lOREVYOworCisJ CWNzID0gaW50ZWxfcmluZ19iZWdpbihyZXF1ZXN0LCA2KTsKKwkJaWYgKElTX0VSUihjcykpCisJ CQlyZXR1cm4gUFRSX0VSUihjcyk7CisKKwkJY3MgPSBnZW44X2VtaXRfcGlwZV9jb250cm9sKGNz LCBmbGFncywgTFJDX1BQSFdTUF9TQ1JBVENIX0FERFIpOworCQlpbnRlbF9yaW5nX2FkdmFuY2Uo cmVxdWVzdCwgY3MpOworCX0KKworCWlmIChtb2RlICYgRU1JVF9JTlZBTElEQVRFKSB7CisJCXUz MiAqY3M7CisJCXUzMiBmbGFncyA9IDA7CisKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NTX1NU QUxMOworCisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9DT01NQU5EX0NBQ0hFX0lOVkFMSURBVEU7 CisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9UTEJfSU5WQUxJREFURTsKKwkJZmxhZ3MgfD0gUElQ RV9DT05UUk9MX0lOU1RSVUNUSU9OX0NBQ0hFX0lOVkFMSURBVEU7CisJCWZsYWdzIHw9IFBJUEVf Q09OVFJPTF9URVhUVVJFX0NBQ0hFX0lOVkFMSURBVEU7CisJCWZsYWdzIHw9IFBJUEVfQ09OVFJP TF9WRl9DQUNIRV9JTlZBTElEQVRFOworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfQ09OU1RfQ0FD SEVfSU5WQUxJREFURTsKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1NUQVRFX0NBQ0hFX0lOVkFM SURBVEU7CisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9RV19XUklURTsKKwkJZmxhZ3MgfD0gUElQ RV9DT05UUk9MX1NUT1JFX0RBVEFfSU5ERVg7CisKKwkJY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJl cXVlc3QsIDYpOworCQlpZiAoSVNfRVJSKGNzKSkKKwkJCXJldHVybiBQVFJfRVJSKGNzKTsKKwor CQljcyA9IGdlbjhfZW1pdF9waXBlX2NvbnRyb2woY3MsIGZsYWdzLCBMUkNfUFBIV1NQX1NDUkFU Q0hfQUREUik7CisJCWludGVsX3JpbmdfYWR2YW5jZShyZXF1ZXN0LCBjcyk7CisJfQorCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgcHJlcGFyc2VyX2Rpc2FibGUoYm9vbCBzdGF0ZSkKK3sK KwlyZXR1cm4gTUlfQVJCX0NIRUNLIHwgMSA8PCA4IHwgc3RhdGU7Cit9CisKK2ludCBnZW4xMl9l bWl0X2ZsdXNoX3JjcyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0LCB1MzIgbW9kZSkKK3sK KwlpZiAobW9kZSAmIEVNSVRfRkxVU0gpIHsKKwkJdTMyIGZsYWdzID0gMDsKKwkJdTMyICpjczsK KworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfVElMRV9DQUNIRV9GTFVTSDsKKwkJZmxhZ3MgfD0g UElQRV9DT05UUk9MX1JFTkRFUl9UQVJHRVRfQ0FDSEVfRkxVU0g7CisJCWZsYWdzIHw9IFBJUEVf Q09OVFJPTF9ERVBUSF9DQUNIRV9GTFVTSDsKKwkJLyogV2FfMTQwOTYwMDkwNzp0Z2wgKi8KKwkJ ZmxhZ3MgfD0gUElQRV9DT05UUk9MX0RFUFRIX1NUQUxMOworCQlmbGFncyB8PSBQSVBFX0NPTlRS T0xfRENfRkxVU0hfRU5BQkxFOworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfRkxVU0hfRU5BQkxF OworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfSERDX1BJUEVMSU5FX0ZMVVNIOworCisJCWZsYWdz IHw9IFBJUEVfQ09OVFJPTF9TVE9SRV9EQVRBX0lOREVYOworCQlmbGFncyB8PSBQSVBFX0NPTlRS T0xfUVdfV1JJVEU7CisKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NTX1NUQUxMOworCisJCWNz ID0gaW50ZWxfcmluZ19iZWdpbihyZXF1ZXN0LCA2KTsKKwkJaWYgKElTX0VSUihjcykpCisJCQly ZXR1cm4gUFRSX0VSUihjcyk7CisKKwkJY3MgPSBnZW44X2VtaXRfcGlwZV9jb250cm9sKGNzLCBm bGFncywgTFJDX1BQSFdTUF9TQ1JBVENIX0FERFIpOworCQlpbnRlbF9yaW5nX2FkdmFuY2UocmVx dWVzdCwgY3MpOworCX0KKworCWlmIChtb2RlICYgRU1JVF9JTlZBTElEQVRFKSB7CisJCXUzMiBm bGFncyA9IDA7CisJCXUzMiAqY3M7CisKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NPTU1BTkRf Q0FDSEVfSU5WQUxJREFURTsKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1RMQl9JTlZBTElEQVRF OworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfSU5TVFJVQ1RJT05fQ0FDSEVfSU5WQUxJREFURTsK KwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1RFWFRVUkVfQ0FDSEVfSU5WQUxJREFURTsKKwkJZmxh Z3MgfD0gUElQRV9DT05UUk9MX1ZGX0NBQ0hFX0lOVkFMSURBVEU7CisJCWZsYWdzIHw9IFBJUEVf Q09OVFJPTF9DT05TVF9DQUNIRV9JTlZBTElEQVRFOworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xf U1RBVEVfQ0FDSEVfSU5WQUxJREFURTsKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0wzX1JPX0NB Q0hFX0lOVkFMSURBVEU7CisKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1NUT1JFX0RBVEFfSU5E RVg7CisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9RV19XUklURTsKKworCQlmbGFncyB8PSBQSVBF X0NPTlRST0xfQ1NfU1RBTEw7CisKKwkJY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJlcXVlc3QsIDgp OworCQlpZiAoSVNfRVJSKGNzKSkKKwkJCXJldHVybiBQVFJfRVJSKGNzKTsKKworCQkvKgorCQkg KiBQcmV2ZW50IHRoZSBwcmUtcGFyc2VyIGZyb20gc2tpcHBpbmcgcGFzdCB0aGUgVExCCisJCSAq IGludmFsaWRhdGUgYW5kIGxvYWRpbmcgYSBzdGFsZSBwYWdlIGZvciB0aGUgYmF0Y2gKKwkJICog YnVmZmVyIC8gcmVxdWVzdCBwYXlsb2FkLgorCQkgKi8KKwkJKmNzKysgPSBwcmVwYXJzZXJfZGlz YWJsZSh0cnVlKTsKKworCQljcyA9IGdlbjhfZW1pdF9waXBlX2NvbnRyb2woY3MsIGZsYWdzLCBM UkNfUFBIV1NQX1NDUkFUQ0hfQUREUik7CisKKwkJKmNzKysgPSBwcmVwYXJzZXJfZGlzYWJsZShm YWxzZSk7CisJCWludGVsX3JpbmdfYWR2YW5jZShyZXF1ZXN0LCBjcyk7CisKKwkJLyoKKwkJICog V2FfMTYwNDU0NDg4OTp0Z2wKKwkJICovCisJCWlmIChJU19UR0xfUkVWSUQocmVxdWVzdC0+aTkx NSwgVEdMX1JFVklEX0EwLCBUR0xfUkVWSURfQTApKSB7CisJCQlmbGFncyA9IDA7CisJCQlmbGFn cyB8PSBQSVBFX0NPTlRST0xfQ1NfU1RBTEw7CisJCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfSERD X1BJUEVMSU5FX0ZMVVNIOworCisJCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfU1RPUkVfREFUQV9J TkRFWDsKKwkJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9RV19XUklURTsKKworCQkJY3MgPSBpbnRl bF9yaW5nX2JlZ2luKHJlcXVlc3QsIDYpOworCQkJaWYgKElTX0VSUihjcykpCisJCQkJcmV0dXJu IFBUUl9FUlIoY3MpOworCisJCQljcyA9IGdlbjhfZW1pdF9waXBlX2NvbnRyb2woY3MsIGZsYWdz LAorCQkJCQkJICAgIExSQ19QUEhXU1BfU0NSQVRDSF9BRERSKTsKKwkJCWludGVsX3JpbmdfYWR2 YW5jZShyZXF1ZXN0LCBjcyk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGdlbjhf ZW1pdF9iYl9zdGFydChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKKwkJICAgICAgIHU2NCBvZmZz ZXQsIHUzMiBsZW4sCisJCSAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJdTMy ICpjczsKKworCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgNik7CisJaWYgKElTX0VSUihjcykp CisJCXJldHVybiBQVFJfRVJSKGNzKTsKKworCSpjcysrID0gTUlfQVJCX09OX09GRiB8IE1JX0FS Ql9FTkFCTEU7CisKKwkqY3MrKyA9IE1JX0JBVENIX0JVRkZFUl9TVEFSVF9HRU44IHwKKwkJKGZs YWdzICYgSTkxNV9ESVNQQVRDSF9TRUNVUkUgPyAwIDogQklUKDgpKTsKKwkqY3MrKyA9IGxvd2Vy XzMyX2JpdHMob2Zmc2V0KTsKKwkqY3MrKyA9IHVwcGVyXzMyX2JpdHMob2Zmc2V0KTsKKworCSpj cysrID0gTUlfQVJCX09OX09GRiB8IE1JX0FSQl9ESVNBQkxFOworCSpjcysrID0gTUlfTk9PUDsK KworCWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBn ZW44X2VtaXRfYmJfc3RhcnRfbm9hcmIoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCisJCQkgICAg IHU2NCBvZmZzZXQsIHUzMiBsZW4sCisJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbGFncykK K3sKKwl1MzIgKmNzOworCisJY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA0KTsKKwlpZiAoSVNf RVJSKGNzKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3MpOworCisJLyoKKwkgKiBXYURpc2FibGVDdHhS ZXN0b3JlQXJiaXRyYXRpb246YmR3LGNodgorCSAqCisJICogV2UgZG9uJ3QgbmVlZCB0byBwZXJm b3JtIE1JX0FSQl9FTkFCTEUgYXMgb2Z0ZW4gYXMgd2UgZG8gKGluCisJICogcGFydGljdWxhciBh bGwgdGhlIGdlbiB0aGF0IGRvIG5vdCBuZWVkIHRoZSB3L2EgYXQgYWxsISksIGlmIHdlCisJICog dG9vayBjYXJlIHRvIG1ha2Ugc3VyZSB0aGF0IG9uIGV2ZXJ5IHN3aXRjaCBpbnRvIHRoaXMgY29u dGV4dAorCSAqIChib3RoIG9yZGluYXJ5IGFuZCBmb3IgcHJlZW1wdGlvbikgdGhhdCBhcmJpdHJh cnRpb24gd2FzIGVuYWJsZWQKKwkgKiB3ZSB3b3VsZCBiZSBmaW5lLiAgSG93ZXZlciwgZm9yIGdl bjggdGhlcmUgaXMgYW5vdGhlciB3L2EgdGhhdAorCSAqIHJlcXVpcmVzIHVzIHRvIG5vdCBwcmVl bXB0IGluc2lkZSBHUEdQVSBleGVjdXRpb24sIHNvIHdlIGtlZXAKKwkgKiBhcmJpdHJhdGlvbiBk aXNhYmxlZCBmb3IgZ2VuOCBiYXRjaGVzLiBBcmJpdHJhdGlvbiB3aWxsIGJlCisJICogcmUtZW5h YmxlZCBiZWZvcmUgd2UgY2xvc2UgdGhlIHJlcXVlc3QKKwkgKiAoZW5naW5lLT5lbWl0X2Zpbmlf YnJlYWRjcnVtYikuCisJICovCisJKmNzKysgPSBNSV9BUkJfT05fT0ZGIHwgTUlfQVJCX0RJU0FC TEU7CisKKwkvKiBGSVhNRShCRFcrKTogQWRkcmVzcyBzcGFjZSBhbmQgc2VjdXJpdHkgc2VsZWN0 b3JzLiAqLworCSpjcysrID0gTUlfQkFUQ0hfQlVGRkVSX1NUQVJUX0dFTjggfAorCQkoZmxhZ3Mg JiBJOTE1X0RJU1BBVENIX1NFQ1VSRSA/IDAgOiBCSVQoOCkpOworCSpjcysrID0gbG93ZXJfMzJf Yml0cyhvZmZzZXQpOworCSpjcysrID0gdXBwZXJfMzJfYml0cyhvZmZzZXQpOworCisJaW50ZWxf cmluZ19hZHZhbmNlKHJxLCBjcyk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2dlbjhfZW5naW5lX2NzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9nZW44X2VuZ2luZV9jcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uZWJjYTQzYTVlMzNjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvZ2VuOF9lbmdpbmVfY3MuaApAQCAtMCwwICsxLDI3IEBACisvKiBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogTUlUICovCisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQgSW50ZWwgQ29ycG9y YXRpb24KKyAqLworCisjaWZuZGVmIF9fR0VOOF9FTkdJTkVfQ1NfSF9fCisjZGVmaW5lIF9fR0VO OF9FTkdJTkVfQ1NfSF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgaTkx NV9yZXF1ZXN0OworCitpbnQgZ2VuOF9lbWl0X2ZsdXNoX3hjcyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0 ICpyZXF1ZXN0LCB1MzIgbW9kZSk7CisKK2ludCBnZW44X2VtaXRfZmx1c2hfcmNzKHN0cnVjdCBp OTE1X3JlcXVlc3QgKnJlcXVlc3QsIHUzMiBtb2RlKTsKK2ludCBnZW45X2VtaXRfZmx1c2hfcmNz KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QsIHUzMiBtb2RlKTsKK2ludCBnZW4xMV9lbWl0 X2ZsdXNoX3JjcyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0LCB1MzIgbW9kZSk7CitpbnQg Z2VuMTJfZW1pdF9mbHVzaF9yY3Moc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCwgdTMyIG1v ZGUpOworCitpbnQgZ2VuOF9lbWl0X2JiX3N0YXJ0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAor CQkgICAgICAgdTY0IG9mZnNldCwgdTMyIGxlbiwKKwkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu dCBmbGFncyk7CitpbnQgZ2VuOF9lbWl0X2JiX3N0YXJ0X25vYXJiKHN0cnVjdCBpOTE1X3JlcXVl c3QgKnJxLAorCQkJICAgICB1NjQgb2Zmc2V0LCB1MzIgbGVuLAorCQkJICAgICBjb25zdCB1bnNp Z25lZCBpbnQgZmxhZ3MpOworCisjZW5kaWYgLyogX19HRU44X0VOR0lORV9DU19IX18gKi8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV9wb29sLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfcG9vbC5jCmluZGV4IDM5NzE4Njgx ODMwNS4uNjI1N2YyYjE3ZDMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9lbmdpbmVfcG9vbC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2Vu Z2luZV9wb29sLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKICNpbmNs dWRlICJpbnRlbF9lbmdpbmVfcG0uaCIKICNpbmNsdWRlICJpbnRlbF9lbmdpbmVfcG9vbC5oIgor I2luY2x1ZGUgImludGVsX2xyYy5oIgogCiBzdGF0aWMgc3RydWN0IGludGVsX2VuZ2luZV9jcyAq dG9fZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfcG9vbCAqcG9vbCkKIHsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV93b3JrYXJvdW5kX2JiLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfd29ya2Fyb3VuZF9iYi5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjdiM2VmYWIxMTI4Ci0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3dvcmthcm91 bmRfYmIuYwpAQCAtMCwwICsxLDMzNSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1J VAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lu Y2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaTkxNV9yZWcuaCIKKyNpbmNsdWRlICJpbnRl bF9lbmdpbmUuaCIKKyNpbmNsdWRlICJpbnRlbF9ncHVfY29tbWFuZHMuaCIKKyNpbmNsdWRlICJp bnRlbF9ndC5oIgorI2luY2x1ZGUgImludGVsX2xyYy5oIgorCisvKgorICogSW4gdGhpcyBXQSB3 ZSBuZWVkIHRvIHNldCBHRU44X0wzU1FDUkVHNFsyMToyMV0gYW5kIHJlc2V0IGl0IGFmdGVyCisg KiBQSVBFX0NPTlRST0wgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMgcmVxdWlyZWQgZm9yIHRoZSBmbHVz aCB0byBoYXBwZW4gY29ycmVjdGx5CisgKiBidXQgdGhlcmUgaXMgYSBzbGlnaHQgY29tcGxpY2F0 aW9uIGFzIHRoaXMgaXMgYXBwbGllZCBpbiBXQSBiYXRjaCB3aGVyZSB0aGUKKyAqIHZhbHVlcyBh cmUgb25seSBpbml0aWFsaXplZCBvbmNlIHNvIHdlIGNhbm5vdCB0YWtlIHJlZ2lzdGVyIHZhbHVl IGF0IHRoZQorICogYmVnaW5uaW5nIGFuZCByZXVzZSBpdCBmdXJ0aGVyOyBoZW5jZSB3ZSBzYXZl IGl0cyB2YWx1ZSB0byBtZW1vcnksIHVwbG9hZCBhCisgKiBjb25zdGFudCB2YWx1ZSB3aXRoIGJp dDIxIHNldCBhbmQgdGhlbiB3ZSByZXN0b3JlIGl0IGJhY2sgd2l0aCB0aGUgc2F2ZWQgdmFsdWUu CisgKiBUbyBzaW1wbGlmeSB0aGUgV0EsIGEgY29uc3RhbnQgdmFsdWUgaXMgZm9ybWVkIGJ5IHVz aW5nIHRoZSBkZWZhdWx0IHZhbHVlCisgKiBvZiB0aGlzIHJlZ2lzdGVyLiBUaGlzIHNob3VsZG4n dCBiZSBhIHByb2JsZW0gYmVjYXVzZSB3ZSBhcmUgb25seSBtb2RpZnlpbmcKKyAqIGl0IGZvciBh IHNob3J0IHBlcmlvZCBhbmQgdGhpcyBiYXRjaCBpbiBub24tcHJlbXB0aWJsZS4gV2UgY2FuIG9m Y291cnNlCisgKiB1c2UgYWRkaXRpb25hbCBpbnN0cnVjdGlvbnMgdGhhdCByZWFkIHRoZSBhY3R1 YWwgdmFsdWUgb2YgdGhlIHJlZ2lzdGVyCisgKiBhdCB0aGF0IHRpbWUgYW5kIHNldCBvdXIgYml0 IG9mIGludGVyZXN0IGJ1dCBpdCBtYWtlcyB0aGUgV0EgY29tcGxpY2F0ZWQuCisgKgorICogVGhp cyBXQSBpcyBhbHNvIHJlcXVpcmVkIGZvciBHZW45IHNvIGV4dHJhY3RpbmcgYXMgYSBmdW5jdGlv biBhdm9pZHMKKyAqIGNvZGUgZHVwbGljYXRpb24uCisgKi8KK3N0YXRpYyB1MzIgKgorZ2VuOF9l bWl0X2ZsdXNoX2NvaGVyZW50bDNfd2Eoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1 MzIgKmJhdGNoKQoreworCS8qIE5CIG5vIG9uZSBlbHNlIGlzIGFsbG93ZWQgdG8gc2NyaWJibGUg b3ZlciBzY3JhdGNoICsgMjU2ISAqLworCSpiYXRjaCsrID0gTUlfU1RPUkVfUkVHSVNURVJfTUVN X0dFTjggfCBNSV9TUk1fTFJNX0dMT0JBTF9HVFQ7CisJKmJhdGNoKysgPSBpOTE1X21taW9fcmVn X29mZnNldChHRU44X0wzU1FDUkVHNCk7CisJKmJhdGNoKysgPSBpbnRlbF9ndF9zY3JhdGNoX29m ZnNldChlbmdpbmUtPmd0LAorCQkJCQkgICBJTlRFTF9HVF9TQ1JBVENIX0ZJRUxEX0NPSEVSRU5U TDNfV0EpOworCSpiYXRjaCsrID0gMDsKKworCSpiYXRjaCsrID0gTUlfTE9BRF9SRUdJU1RFUl9J TU0oMSk7CisJKmJhdGNoKysgPSBpOTE1X21taW9fcmVnX29mZnNldChHRU44X0wzU1FDUkVHNCk7 CisJKmJhdGNoKysgPSAweDQwNDAwMDAwIHwgR0VOOF9MUVNDX0ZMVVNIX0NPSEVSRU5UX0xJTkVT OworCisJYmF0Y2ggPSBnZW44X2VtaXRfcGlwZV9jb250cm9sKGJhdGNoLAorCQkJCSAgICAgICBQ SVBFX0NPTlRST0xfQ1NfU1RBTEwgfAorCQkJCSAgICAgICBQSVBFX0NPTlRST0xfRENfRkxVU0hf RU5BQkxFLAorCQkJCSAgICAgICAwKTsKKworCSpiYXRjaCsrID0gTUlfTE9BRF9SRUdJU1RFUl9N RU1fR0VOOCB8IE1JX1NSTV9MUk1fR0xPQkFMX0dUVDsKKwkqYmF0Y2grKyA9IGk5MTVfbW1pb19y ZWdfb2Zmc2V0KEdFTjhfTDNTUUNSRUc0KTsKKwkqYmF0Y2grKyA9IGludGVsX2d0X3NjcmF0Y2hf b2Zmc2V0KGVuZ2luZS0+Z3QsCisJCQkJCSAgIElOVEVMX0dUX1NDUkFUQ0hfRklFTERfQ09IRVJF TlRMM19XQSk7CisJKmJhdGNoKysgPSAwOworCisJcmV0dXJuIGJhdGNoOworfQorCisvKgorICog VHlwaWNhbGx5IHdlIG9ubHkgaGF2ZSBvbmUgaW5kaXJlY3RfY3R4IGFuZCBwZXJfY3R4IGJhdGNo IGJ1ZmZlciB3aGljaCBhcmUKKyAqIGluaXRpYWxpemVkIGF0IHRoZSBiZWdpbm5pbmcgYW5kIHNo YXJlZCBhY3Jvc3MgYWxsIGNvbnRleHRzIGJ1dCB0aGlzIGZpZWxkCisgKiBoZWxwcyB1cyB0byBo YXZlIG11bHRpcGxlIGJhdGNoZXMgYXQgZGlmZmVyZW50IG9mZnNldHMgYW5kIHNlbGVjdCB0aGVt IGJhc2VkCisgKiBvbiBhIGNyaXRlcmlhLiBBdCB0aGUgbW9tZW50IHRoaXMgYmF0Y2ggYWx3YXlz IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhZ2UKKyAqIGFuZCBhdCB0aGlzIHBvaW50 IHdlIGRvbid0IGhhdmUgbXVsdGlwbGUgd2FfY3R4IGJhdGNoIGJ1ZmZlcnMuCisgKgorICogVGhl IG51bWJlciBvZiBXQSBhcHBsaWVkIGFyZSBub3Qga25vd24gYXQgdGhlIGJlZ2lubmluZzsgd2Ug dXNlIHRoaXMgZmllbGQKKyAqIHRvIHJldHVybiB0aGUgbm8gb2YgRFdPUkRTIHdyaXR0ZW4uCisg KgorICogSXQgaXMgdG8gYmUgbm90ZWQgdGhhdCB0aGlzIGJhdGNoIGRvZXMgbm90IGNvbnRhaW4g TUlfQkFUQ0hfQlVGRkVSX0VORAorICogc28gaXQgYWRkcyBOT09QcyBhcyBwYWRkaW5nIHRvIG1h a2UgaXQgY2FjaGVsaW5lIGFsaWduZWQuCisgKiBNSV9CQVRDSF9CVUZGRVJfRU5EIHdpbGwgYmUg YWRkZWQgdG8gcGVyY3R4IGJhdGNoIGFuZCBib3RoIG9mIHRoZW0gdG9nZXRoZXIKKyAqIG1ha2Vz IGEgY29tcGxldGUgYmF0Y2ggYnVmZmVyLgorICovCitzdGF0aWMgdTMyICpnZW44X2luaXRfaW5k aXJlY3RjdHhfYmIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgKmJhdGNoKQor eworCS8qIFdhRGlzYWJsZUN0eFJlc3RvcmVBcmJpdHJhdGlvbjpiZHcsY2h2ICovCisJKmJhdGNo KysgPSBNSV9BUkJfT05fT0ZGIHwgTUlfQVJCX0RJU0FCTEU7CisKKwkvKiBXYUZsdXNoQ29oZXJl bnRMM0NhY2hlTGluZXNBdENvbnRleHRTd2l0Y2g6YmR3ICovCisJaWYgKElTX0JST0FEV0VMTChl bmdpbmUtPmk5MTUpKQorCQliYXRjaCA9IGdlbjhfZW1pdF9mbHVzaF9jb2hlcmVudGwzX3dhKGVu Z2luZSwgYmF0Y2gpOworCisJLyogV2FDbGVhclNsbVNwYWNlQXRDb250ZXh0U3dpdGNoOmJkdyxj aHYgKi8KKwkvKiBBY3R1YWwgc2NyYXRjaCBsb2NhdGlvbiBpcyBhdCAxMjggYnl0ZXMgb2Zmc2V0 ICovCisJYmF0Y2ggPSBnZW44X2VtaXRfcGlwZV9jb250cm9sKGJhdGNoLAorCQkJCSAgICAgICBQ SVBFX0NPTlRST0xfRkxVU0hfTDMgfAorCQkJCSAgICAgICBQSVBFX0NPTlRST0xfU1RPUkVfREFU QV9JTkRFWCB8CisJCQkJICAgICAgIFBJUEVfQ09OVFJPTF9DU19TVEFMTCB8CisJCQkJICAgICAg IFBJUEVfQ09OVFJPTF9RV19XUklURSwKKwkJCQkgICAgICAgTFJDX1BQSFdTUF9TQ1JBVENIX0FE RFIpOworCisJKmJhdGNoKysgPSBNSV9BUkJfT05fT0ZGIHwgTUlfQVJCX0VOQUJMRTsKKworCS8q IFBhZCB0byBlbmQgb2YgY2FjaGVsaW5lICovCisJd2hpbGUgKCh1bnNpZ25lZCBsb25nKWJhdGNo ICUgQ0FDSEVMSU5FX0JZVEVTKQorCQkqYmF0Y2grKyA9IE1JX05PT1A7CisKKwkvKgorCSAqIE1J X0JBVENIX0JVRkZFUl9FTkQgaXMgbm90IHJlcXVpcmVkIGluIEluZGlyZWN0IGN0eCBCQiBiZWNh dXNlCisJICogZXhlY3V0aW9uIGRlcGVuZHMgb24gdGhlIGxlbmd0aCBzcGVjaWZpZWQgaW4gdGVy bXMgb2YgY2FjaGUgbGluZXMKKwkgKiBpbiB0aGUgcmVnaXN0ZXIgQ1RYX1JDU19JTkRJUkVDVF9D VFgKKwkgKi8KKworCXJldHVybiBiYXRjaDsKK30KKworc3RydWN0IGxyaSB7CisJaTkxNV9yZWdf dCByZWc7CisJdTMyIHZhbHVlOworfTsKKworc3RhdGljIHUzMiAqZW1pdF9scmkodTMyICpiYXRj aCwgY29uc3Qgc3RydWN0IGxyaSAqbHJpLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJR0VNX0JV R19PTighY291bnQgfHwgY291bnQgPiA2Myk7CisKKwkqYmF0Y2grKyA9IE1JX0xPQURfUkVHSVNU RVJfSU1NKGNvdW50KTsKKwlkbyB7CisJCSpiYXRjaCsrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQo bHJpLT5yZWcpOworCQkqYmF0Y2grKyA9IGxyaS0+dmFsdWU7CisJfSB3aGlsZSAobHJpKyssIC0t Y291bnQpOworCSpiYXRjaCsrID0gTUlfTk9PUDsKKworCXJldHVybiBiYXRjaDsKK30KKworc3Rh dGljIHUzMiAqZ2VuOV9pbml0X2luZGlyZWN0Y3R4X2JiKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSwgdTMyICpiYXRjaCkKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGxyaSBscmlbXSA9 IHsKKwkJLyogV2FEaXNhYmxlR2F0aGVyQXRTZXRTaGFkZXJDb21tb25TbGljZTpza2wsYnh0LGti bCxnbGsgKi8KKwkJeworCQkJQ09NTU9OX1NMSUNFX0NISUNLRU4yLAorCQkJX19NQVNLRURfRklF TEQoR0VOOV9ESVNBQkxFX0dBVEhFUl9BVF9TRVRfU0hBREVSX0NPTU1PTl9TTElDRSwKKwkJCQkg ICAgICAgMCksCisJCX0sCisKKwkJLyogQlNwZWM6IDExMzkxICovCisJCXsKKwkJCUZGX1NMSUNF X0NISUNLRU4sCisJCQlfX01BU0tFRF9GSUVMRChGRl9TTElDRV9DSElDS0VOX0NMX1BST1ZPS0lO R19WRVJURVhfRklYLAorCQkJCSAgICAgICBGRl9TTElDRV9DSElDS0VOX0NMX1BST1ZPS0lOR19W RVJURVhfRklYKSwKKwkJfSwKKworCQkvKiBCU3BlYzogMTEyOTkgKi8KKwkJeworCQkJXzNEX0NI SUNLRU4zLAorCQkJX19NQVNLRURfRklFTEQoXzNEX0NISUNLRU5fU0ZfUFJPVk9LSU5HX1ZFUlRF WF9GSVgsCisJCQkJICAgICAgIF8zRF9DSElDS0VOX1NGX1BST1ZPS0lOR19WRVJURVhfRklYKSwK KwkJfQorCX07CisKKwkqYmF0Y2grKyA9IE1JX0FSQl9PTl9PRkYgfCBNSV9BUkJfRElTQUJMRTsK KworCS8qIFdhRmx1c2hDb2hlcmVudEwzQ2FjaGVMaW5lc0F0Q29udGV4dFN3aXRjaDpza2wsYnh0 LGdsayAqLworCWJhdGNoID0gZ2VuOF9lbWl0X2ZsdXNoX2NvaGVyZW50bDNfd2EoZW5naW5lLCBi YXRjaCk7CisKKwkvKiBXYUNsZWFyU2xtU3BhY2VBdENvbnRleHRTd2l0Y2g6c2tsLGJ4dCxrYmws Z2xrLGNmbCAqLworCWJhdGNoID0gZ2VuOF9lbWl0X3BpcGVfY29udHJvbChiYXRjaCwKKwkJCQkg ICAgICAgUElQRV9DT05UUk9MX0ZMVVNIX0wzIHwKKwkJCQkgICAgICAgUElQRV9DT05UUk9MX1NU T1JFX0RBVEFfSU5ERVggfAorCQkJCSAgICAgICBQSVBFX0NPTlRST0xfQ1NfU1RBTEwgfAorCQkJ CSAgICAgICBQSVBFX0NPTlRST0xfUVdfV1JJVEUsCisJCQkJICAgICAgIExSQ19QUEhXU1BfU0NS QVRDSF9BRERSKTsKKworCWJhdGNoID0gZW1pdF9scmkoYmF0Y2gsIGxyaSwgQVJSQVlfU0laRShs cmkpKTsKKworCS8qIFdhTWVkaWFQb29sU3RhdGVDbWRJbldBQkI6Ynh0LGdsayAqLworCWlmIChI QVNfUE9PTEVEX0VVKGVuZ2luZS0+aTkxNSkpIHsKKwkJLyoKKwkJICogRVUgcG9vbCBjb25maWd1 cmF0aW9uIGlzIHNldHVwIGFsb25nIHdpdGggZ29sZGVuIGNvbnRleHQKKwkJICogZHVyaW5nIGNv bnRleHQgaW5pdGlhbGl6YXRpb24uIFRoaXMgdmFsdWUgZGVwZW5kcyBvbgorCQkgKiBkZXZpY2Ug dHlwZSAoMng2IG9yIDN4NikgYW5kIG5lZWRzIHRvIGJlIHVwZGF0ZWQgYmFzZWQKKwkJICogb24g d2hpY2ggc3Vic2xpY2UgaXMgZGlzYWJsZWQgZXNwZWNpYWxseSBmb3IgMng2CisJCSAqIGRldmlj ZXMsIGhvd2V2ZXIgaXQgaXMgc2FmZSB0byBsb2FkIGRlZmF1bHQKKwkJICogY29uZmlndXJhdGlv biBvZiAzeDYgZGV2aWNlIGluc3RlYWQgb2YgbWFza2luZyBvZmYKKwkJICogY29ycmVzcG9uZGlu ZyBiaXRzIGJlY2F1c2UgSFcgaWdub3JlcyBiaXRzIG9mIGEgZGlzYWJsZWQKKwkJICogc3Vic2xp Y2UgYW5kIGRyb3BzIGRvd24gdG8gYXBwcm9wcmlhdGUgY29uZmlnLiBQbGVhc2UKKwkJICogc2Vl IHJlbmRlcl9zdGF0ZV9zZXR1cCgpIGluIGk5MTVfZ2VtX3JlbmRlcl9zdGF0ZS5jIGZvcgorCQkg KiBwb3NzaWJsZSBjb25maWd1cmF0aW9ucywgdG8gYXZvaWQgZHVwbGljYXRpb24gdGhleSBhcmUK KwkJICogbm90IHNob3duIGhlcmUgYWdhaW4uCisJCSAqLworCQkqYmF0Y2grKyA9IEdFTjlfTUVE SUFfUE9PTF9TVEFURTsKKwkJKmJhdGNoKysgPSBHRU45X01FRElBX1BPT0xfRU5BQkxFOworCQkq YmF0Y2grKyA9IDB4MDA3NzcwMDA7CisJCSpiYXRjaCsrID0gMDsKKwkJKmJhdGNoKysgPSAwOwor CQkqYmF0Y2grKyA9IDA7CisJfQorCisJKmJhdGNoKysgPSBNSV9BUkJfT05fT0ZGIHwgTUlfQVJC X0VOQUJMRTsKKworCS8qIFBhZCB0byBlbmQgb2YgY2FjaGVsaW5lICovCisJd2hpbGUgKCh1bnNp Z25lZCBsb25nKWJhdGNoICUgQ0FDSEVMSU5FX0JZVEVTKQorCQkqYmF0Y2grKyA9IE1JX05PT1A7 CisKKwlyZXR1cm4gYmF0Y2g7Cit9CisKK3N0YXRpYyB1MzIgKgorZ2VuMTBfaW5pdF9pbmRpcmVj dGN0eF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiAqYmF0Y2gpCit7CisJ aW50IGk7CisKKwkvKgorCSAqIFdhUGlwZUNvbnRyb2xCZWZvcmUzRFN0YXRlU2FtcGxlUGF0dGVy bjogY25sCisJICoKKwkgKiBFbnN1cmUgdGhlIGVuZ2luZSBpcyBpZGxlIHByaW9yIHRvIHByb2dy YW1taW5nIGEKKwkgKiAzRFNUQVRFX1NBTVBMRV9QQVRURVJOIGR1cmluZyBhIGNvbnRleHQgcmVz dG9yZS4KKwkgKi8KKwliYXRjaCA9IGdlbjhfZW1pdF9waXBlX2NvbnRyb2woYmF0Y2gsCisJCQkJ ICAgICAgIFBJUEVfQ09OVFJPTF9DU19TVEFMTCwKKwkJCQkgICAgICAgMCk7CisJLyoKKwkgKiBX YVBpcGVDb250cm9sQmVmb3JlM0RTdGF0ZVNhbXBsZVBhdHRlcm4gc2F5cyB3ZSBuZWVkIDQgZHdv cmRzIGZvcgorCSAqIHRoZSBQSVBFX0NPTlRST0wgZm9sbG93ZWQgYnkgMTIgZHdvcmRzIG9mIDB4 MCwgc28gMTYgZHdvcmRzIGluCisJICogdG90YWwuIEhvd2V2ZXIsIGEgUElQRV9DT05UUk9MIGlz IDYgZHdvcmRzIGxvbmcsIG5vdCA0LCB3aGljaCBpcworCSAqIGNvbmZ1c2luZy4gU2luY2UgZ2Vu OF9lbWl0X3BpcGVfY29udHJvbCgpIGFscmVhZHkgYWR2YW5jZXMgdGhlCisJICogYmF0Y2ggYnkg NiBkd29yZHMsIHdlIGFkdmFuY2UgdGhlIG90aGVyIDEwIGhlcmUsIGNvbXBsZXRpbmcgYQorCSAq IGNhY2hlbGluZS4gSXQncyBub3QgY2xlYXIgaWYgdGhlIHdvcmthcm91bmQgcmVxdWlyZXMgdGhp cyBwYWRkaW5nCisJICogYmVmb3JlIG90aGVyIGNvbW1hbmRzLCBvciBpZiBpdCdzIGp1c3QgdGhl IHJlZ3VsYXIgcGFkZGluZyB3ZSB3b3VsZAorCSAqIGFscmVhZHkgaGF2ZSBmb3IgdGhlIHdvcmth cm91bmQgYmIsIHNvIGxlYXZlIGl0IGhlcmUgZm9yIG5vdy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBp IDwgMTA7IGkrKykKKwkJKmJhdGNoKysgPSBNSV9OT09QOworCisJLyogUGFkIHRvIGVuZCBvZiBj YWNoZWxpbmUgKi8KKwl3aGlsZSAoKHVuc2lnbmVkIGxvbmcpYmF0Y2ggJSBDQUNIRUxJTkVfQllU RVMpCisJCSpiYXRjaCsrID0gTUlfTk9PUDsKKworCXJldHVybiBiYXRjaDsKK30KKworI2RlZmlu ZSBDVFhfV0FfQkJfT0JKX1NJWkUgKFBBR0VfU0laRSkKKworc3RhdGljIGludCBscmNfc2V0dXBf d2FfY3R4KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOworCWludCBlcnI7CisK KwlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtKGVuZ2luZS0+aTkxNSwgQ1RYX1dB X0JCX09CSl9TSVpFKTsKKwlpZiAoSVNfRVJSKG9iaikpCisJCXJldHVybiBQVFJfRVJSKG9iaik7 CisKKwl2bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShvYmosICZlbmdpbmUtPmd0LT5nZ3R0LT52bSwg TlVMTCk7CisJaWYgKElTX0VSUih2bWEpKSB7CisJCWVyciA9IFBUUl9FUlIodm1hKTsKKwkJZ290 byBlcnI7CisJfQorCisJZXJyID0gaTkxNV92bWFfcGluKHZtYSwgMCwgMCwgUElOX0dMT0JBTCB8 IFBJTl9ISUdIKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjsKKworCWVuZ2luZS0+d2FfY3R4LnZt YSA9IHZtYTsKKwlyZXR1cm4gMDsKKworZXJyOgorCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsK KwlyZXR1cm4gZXJyOworfQorCit0eXBlZGVmIHUzMiAqKCp3YV9iYl9mdW5jX3QpKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyICpiYXRjaCk7CisKK2ludCBpbnRlbF9lbmdpbmVf aW5pdF93b3JrYXJvdW5kX2JiKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlz dHJ1Y3QgaTkxNV9jdHhfd29ya2Fyb3VuZHMgKndhX2N0eCA9ICZlbmdpbmUtPndhX2N0eDsKKwlz dHJ1Y3QgaTkxNV93YV9jdHhfYmIgKndhX2JiWzJdID0geyAmd2FfY3R4LT5pbmRpcmVjdF9jdHgs CisJCQkJCSAgICAmd2FfY3R4LT5wZXJfY3R4IH07CisJd2FfYmJfZnVuY190IHdhX2JiX2ZuWzJd OworCXN0cnVjdCBwYWdlICpwYWdlOworCXZvaWQgKmJhdGNoLCAqYmF0Y2hfcHRyOworCXVuc2ln bmVkIGludCBpOworCWludCByZXQ7CisKKwlpZiAoZW5naW5lLT5jbGFzcyAhPSBSRU5ERVJfQ0xB U1MpCisJCXJldHVybiAwOworCisJc3dpdGNoIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSkgewor CWNhc2UgMTI6CisJY2FzZSAxMToKKwkJcmV0dXJuIDA7CisJY2FzZSAxMDoKKwkJd2FfYmJfZm5b MF0gPSBnZW4xMF9pbml0X2luZGlyZWN0Y3R4X2JiOworCQl3YV9iYl9mblsxXSA9IE5VTEw7CisJ CWJyZWFrOworCWNhc2UgOToKKwkJd2FfYmJfZm5bMF0gPSBnZW45X2luaXRfaW5kaXJlY3RjdHhf YmI7CisJCXdhX2JiX2ZuWzFdID0gTlVMTDsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQl3YV9iYl9m blswXSA9IGdlbjhfaW5pdF9pbmRpcmVjdGN0eF9iYjsKKwkJd2FfYmJfZm5bMV0gPSBOVUxMOwor CQlicmVhazsKKwlkZWZhdWx0OgorCQlNSVNTSU5HX0NBU0UoSU5URUxfR0VOKGVuZ2luZS0+aTkx NSkpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSBscmNfc2V0dXBfd2FfY3R4KGVuZ2luZSk7 CisJaWYgKHJldCkgeworCQlEUk1fREVCVUdfRFJJVkVSKCJGYWlsZWQgdG8gc2V0dXAgY29udGV4 dCBXQSBwYWdlOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwYWdlID0gaTkx NV9nZW1fb2JqZWN0X2dldF9kaXJ0eV9wYWdlKHdhX2N0eC0+dm1hLT5vYmosIDApOworCWJhdGNo ID0gYmF0Y2hfcHRyID0ga21hcF9hdG9taWMocGFnZSk7CisKKwkvKgorCSAqIEVtaXQgdGhlIHR3 byB3b3JrYXJvdW5kIGJhdGNoIGJ1ZmZlcnMsIHJlY29yZGluZyB0aGUgb2Zmc2V0IGZyb20gdGhl CisJICogc3RhcnQgb2YgdGhlIHdvcmthcm91bmQgYmF0Y2ggYnVmZmVyIG9iamVjdCBmb3IgZWFj aCBhbmQgdGhlaXIKKwkgKiByZXNwZWN0aXZlIHNpemVzLgorCSAqLworCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKHdhX2JiX2ZuKTsgaSsrKSB7CisJCXdhX2JiW2ldLT5vZmZzZXQgPSBiYXRj aF9wdHIgLSBiYXRjaDsKKwkJaWYgKEdFTV9ERUJVR19XQVJOX09OKCFJU19BTElHTkVEKHdhX2Ji W2ldLT5vZmZzZXQsCisJCQkJCQkgIENBQ0hFTElORV9CWVRFUykpKSB7CisJCQlyZXQgPSAtRUlO VkFMOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHdhX2JiX2ZuW2ldKQorCQkJYmF0Y2hfcHRyID0g d2FfYmJfZm5baV0oZW5naW5lLCBiYXRjaF9wdHIpOworCQl3YV9iYltpXS0+c2l6ZSA9IGJhdGNo X3B0ciAtIChiYXRjaCArIHdhX2JiW2ldLT5vZmZzZXQpOworCX0KKworCUdFTV9CVUdfT04oYmF0 Y2hfcHRyIC0gYmF0Y2ggPiBDVFhfV0FfQkJfT0JKX1NJWkUpOworCisJa3VubWFwX2F0b21pYyhi YXRjaCk7CisJaWYgKHJldCkKKwkJaW50ZWxfZW5naW5lX2Zpbmlfd29ya2Fyb3VuZF9iYihlbmdp bmUpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBpbnRlbF9lbmdpbmVfZmluaV93b3JrYXJv dW5kX2JiKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlpOTE1X3ZtYV91bnBp bl9hbmRfcmVsZWFzZSgmZW5naW5lLT53YV9jdHgudm1hLCAwKTsKK30KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5jCmluZGV4IGFh Njc1NjFmZWU1My4uYTJhYTZjNWNmYmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uLmMKQEAgLTEsMTQ3ICsxLDE5IEBACisv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCiAvKgogICogQ29weXJpZ2h0IMKpIDIwMTQg SW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBt b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29y IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKLSAqIHBhcmFn cmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIK LSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCi0gKiBJTiBUSEUgU09G VFdBUkUuCi0gKgotICogQXV0aG9yczoKLSAqICAgIEJlbiBXaWRhd3NreSA8YmVuQGJ3aWRhd3Nr Lm5ldD4KLSAqICAgIE1pY2hlbCBUaGllcnJ5IDxtaWNoZWwudGhpZXJyeUBpbnRlbC5jb20+Ci0g KiAgICBUaG9tYXMgRGFuaWVsIDx0aG9tYXMuZGFuaWVsQGludGVsLmNvbT4KLSAqICAgIE9zY2Fy IE1hdGVvIDxvc2Nhci5tYXRlb0BpbnRlbC5jb20+Ci0gKgogICovCiAKLS8qKgotICogRE9DOiBM b2dpY2FsIFJpbmdzLCBMb2dpY2FsIFJpbmcgQ29udGV4dHMgYW5kIEV4ZWNsaXN0cwotICoKLSAq IE1vdGl2YXRpb246Ci0gKiBHRU44IGJyaW5ncyBhbiBleHBhbnNpb24gb2YgdGhlIEhXIGNvbnRl eHRzOiAiTG9naWNhbCBSaW5nIENvbnRleHRzIi4KLSAqIFRoZXNlIGV4cGFuZGVkIGNvbnRleHRz IGVuYWJsZSBhIG51bWJlciBvZiBuZXcgYWJpbGl0aWVzLCBlc3BlY2lhbGx5Ci0gKiAiRXhlY2xp c3RzIiAoYWxzbyBpbXBsZW1lbnRlZCBpbiB0aGlzIGZpbGUpLgotICoKLSAqIE9uZSBvZiB0aGUg bWFpbiBkaWZmZXJlbmNlcyB3aXRoIHRoZSBsZWdhY3kgSFcgY29udGV4dHMgaXMgdGhhdCBsb2dp Y2FsCi0gKiByaW5nIGNvbnRleHRzIGluY29ycG9yYXRlIG1hbnkgbW9yZSB0aGluZ3MgdG8gdGhl IGNvbnRleHQncyBzdGF0ZSwgbGlrZQotICogUERQcyBvciByaW5nYnVmZmVyIGNvbnRyb2wgcmVn aXN0ZXJzOgotICoKLSAqIFRoZSByZWFzb24gd2h5IFBEUHMgYXJlIGluY2x1ZGVkIGluIHRoZSBj b250ZXh0IGlzIHN0cmFpZ2h0Zm9yd2FyZDogYXMKLSAqIFBQR1RUcyAocGVyLXByb2Nlc3MgR1RU cykgYXJlIGFjdHVhbGx5IHBlci1jb250ZXh0LCBoYXZpbmcgdGhlIFBEUHMKLSAqIGNvbnRhaW5l ZCB0aGVyZSBtZWFuIHlvdSBkb24ndCBuZWVkIHRvIGRvIGEgcHBndHQtPnN3aXRjaF9tbSB5b3Vy c2VsZiwKLSAqIGluc3RlYWQsIHRoZSBHUFUgd2lsbCBkbyBpdCBmb3IgeW91IG9uIHRoZSBjb250 ZXh0IHN3aXRjaC4KLSAqCi0gKiBCdXQsIHdoYXQgYWJvdXQgdGhlIHJpbmdidWZmZXIgY29udHJv bCByZWdpc3RlcnMgKGhlYWQsIHRhaWwsIGV0Yy4uKT8KLSAqIHNob3VsZG4ndCB3ZSBqdXN0IG5l ZWQgYSBzZXQgb2YgdGhvc2UgcGVyIGVuZ2luZSBjb21tYW5kIHN0cmVhbWVyPyBUaGlzIGlzCi0g KiB3aGVyZSB0aGUgbmFtZSAiTG9naWNhbCBSaW5ncyIgc3RhcnRzIHRvIG1ha2Ugc2Vuc2U6IGJ5 IHZpcnR1YWxpemluZyB0aGUKLSAqIHJpbmdzLCB0aGUgZW5naW5lIGNzIHNoaWZ0cyB0byBhIG5l dyAicmluZyBidWZmZXIiIHdpdGggZXZlcnkgY29udGV4dAotICogc3dpdGNoLiBXaGVuIHlvdSB3 YW50IHRvIHN1Ym1pdCBhIHdvcmtsb2FkIHRvIHRoZSBHUFUgeW91OiBBKSBjaG9vc2UgeW91cgot ICogY29udGV4dCwgQikgZmluZCBpdHMgYXBwcm9wcmlhdGUgdmlydHVhbGl6ZWQgcmluZywgQykg d3JpdGUgY29tbWFuZHMgdG8gaXQKLSAqIGFuZCB0aGVuLCBmaW5hbGx5LCBEKSB0ZWxsIHRoZSBH UFUgdG8gc3dpdGNoIHRvIHRoYXQgY29udGV4dC4KLSAqCi0gKiBJbnN0ZWFkIG9mIHRoZSBsZWdh Y3kgTUlfU0VUX0NPTlRFWFQsIHRoZSB3YXkgeW91IHRlbGwgdGhlIEdQVSB0byBzd2l0Y2gKLSAq IHRvIGEgY29udGV4dHMgaXMgdmlhIGEgY29udGV4dCBleGVjdXRpb24gbGlzdCwgZXJnbyAiRXhl Y2xpc3RzIi4KLSAqCi0gKiBMUkMgaW1wbGVtZW50YXRpb246Ci0gKiBSZWdhcmRpbmcgdGhlIGNy ZWF0aW9uIG9mIGNvbnRleHRzLCB3ZSBoYXZlOgotICoKLSAqIC0gT25lIGdsb2JhbCBkZWZhdWx0 IGNvbnRleHQuCi0gKiAtIE9uZSBsb2NhbCBkZWZhdWx0IGNvbnRleHQgZm9yIGVhY2ggb3BlbmVk IGZkLgotICogLSBPbmUgbG9jYWwgZXh0cmEgY29udGV4dCBmb3IgZWFjaCBjb250ZXh0IGNyZWF0 ZSBpb2N0bCBjYWxsLgotICoKLSAqIE5vdyB0aGF0IHJpbmdidWZmZXJzIGJlbG9uZyBwZXItY29u dGV4dCAoYW5kIG5vdCBwZXItZW5naW5lLCBsaWtlIGJlZm9yZSkKLSAqIGFuZCB0aGF0IGNvbnRl eHRzIGFyZSB1bmlxdWVseSB0aWVkIHRvIGEgZ2l2ZW4gZW5naW5lIChhbmQgbm90IHJldXNhYmxl LAotICogbGlrZSBiZWZvcmUpIHdlIG5lZWQ6Ci0gKgotICogLSBPbmUgcmluZ2J1ZmZlciBwZXIt ZW5naW5lIGluc2lkZSBlYWNoIGNvbnRleHQuCi0gKiAtIE9uZSBiYWNraW5nIG9iamVjdCBwZXIt ZW5naW5lIGluc2lkZSBlYWNoIGNvbnRleHQuCi0gKgotICogVGhlIGdsb2JhbCBkZWZhdWx0IGNv bnRleHQgc3RhcnRzIGl0cyBsaWZlIHdpdGggdGhlc2UgbmV3IG9iamVjdHMgZnVsbHkKLSAqIGFs bG9jYXRlZCBhbmQgcG9wdWxhdGVkLiBUaGUgbG9jYWwgZGVmYXVsdCBjb250ZXh0IGZvciBlYWNo IG9wZW5lZCBmZCBpcwotICogbW9yZSBjb21wbGV4LCBiZWNhdXNlIHdlIGRvbid0IGtub3cgYXQg Y3JlYXRpb24gdGltZSB3aGljaCBlbmdpbmUgaXMgZ29pbmcKLSAqIHRvIHVzZSB0aGVtLiBUbyBo YW5kbGUgdGhpcywgd2UgaGF2ZSBpbXBsZW1lbnRlZCBhIGRlZmVycmVkIGNyZWF0aW9uIG9mIExS Ci0gKiBjb250ZXh0czoKLSAqCi0gKiBUaGUgbG9jYWwgY29udGV4dCBzdGFydHMgaXRzIGxpZmUg YXMgYSBob2xsb3cgb3IgYmxhbmsgaG9sZGVyLCB0aGF0IG9ubHkKLSAqIGdldHMgcG9wdWxhdGVk IGZvciBhIGdpdmVuIGVuZ2luZSBvbmNlIHdlIHJlY2VpdmUgYW4gZXhlY2J1ZmZlci4gSWYgbGF0 ZXIKLSAqIG9uIHdlIHJlY2VpdmUgYW5vdGhlciBleGVjYnVmZmVyIGlvY3RsIGZvciB0aGUgc2Ft ZSBjb250ZXh0IGJ1dCBhIGRpZmZlcmVudAotICogZW5naW5lLCB3ZSBhbGxvY2F0ZS9wb3B1bGF0 ZSBhIG5ldyByaW5nYnVmZmVyIGFuZCBjb250ZXh0IGJhY2tpbmcgb2JqZWN0IGFuZAotICogc28g b24uCi0gKgotICogRmluYWxseSwgcmVnYXJkaW5nIGxvY2FsIGNvbnRleHRzIGNyZWF0ZWQgdXNp bmcgdGhlIGlvY3RsIGNhbGw6IGFzIHRoZXkgYXJlCi0gKiBvbmx5IGFsbG93ZWQgd2l0aCB0aGUg cmVuZGVyIHJpbmcsIHdlIGNhbiBhbGxvY2F0ZSAmIHBvcHVsYXRlIHRoZW0gcmlnaHQKLSAqIGF3 YXkgKG5vIG5lZWQgdG8gZGVmZXIgYW55dGhpbmcsIGF0IGxlYXN0IGZvciBub3cpLgotICoKLSAq IEV4ZWNsaXN0cyBpbXBsZW1lbnRhdGlvbjoKLSAqIEV4ZWNsaXN0cyBhcmUgdGhlIG5ldyBtZXRo b2QgYnkgd2hpY2gsIG9uIGdlbjgrIGhhcmR3YXJlLCB3b3JrbG9hZHMgYXJlCi0gKiBzdWJtaXR0 ZWQgZm9yIGV4ZWN1dGlvbiAoYXMgb3Bwb3NlZCB0byB0aGUgbGVnYWN5LCByaW5nYnVmZmVyLWJh c2VkLCBtZXRob2QpLgotICogVGhpcyBtZXRob2Qgd29ya3MgYXMgZm9sbG93czoKLSAqCi0gKiBX aGVuIGEgcmVxdWVzdCBpcyBjb21taXR0ZWQsIGl0cyBjb21tYW5kcyAodGhlIEJCIHN0YXJ0IGFu ZCBhbnkgbGVhZGluZyBvcgotICogdHJhaWxpbmcgY29tbWFuZHMsIGxpa2UgdGhlIHNlcW5vIGJy ZWFkY3J1bWJzKSBhcmUgcGxhY2VkIGluIHRoZSByaW5nYnVmZmVyCi0gKiBmb3IgdGhlIGFwcHJv cHJpYXRlIGNvbnRleHQuIFRoZSB0YWlsIHBvaW50ZXIgaW4gdGhlIGhhcmR3YXJlIGNvbnRleHQg aXMgbm90Ci0gKiB1cGRhdGVkIGF0IHRoaXMgdGltZSwgYnV0IGluc3RlYWQsIGtlcHQgYnkgdGhl IGRyaXZlciBpbiB0aGUgcmluZ2J1ZmZlcgotICogc3RydWN0dXJlLiBBIHN0cnVjdHVyZSByZXBy ZXNlbnRpbmcgdGhpcyByZXF1ZXN0IGlzIGFkZGVkIHRvIGEgcmVxdWVzdCBxdWV1ZQotICogZm9y IHRoZSBhcHByb3ByaWF0ZSBlbmdpbmU6IHRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGEgY29weSBv ZiB0aGUgY29udGV4dCdzCi0gKiB0YWlsIGFmdGVyIHRoZSByZXF1ZXN0IHdhcyB3cml0dGVuIHRv IHRoZSByaW5nIGJ1ZmZlciBhbmQgYSBwb2ludGVyIHRvIHRoZQotICogY29udGV4dCBpdHNlbGYu Ci0gKgotICogSWYgdGhlIGVuZ2luZSdzIHJlcXVlc3QgcXVldWUgd2FzIGVtcHR5IGJlZm9yZSB0 aGUgcmVxdWVzdCB3YXMgYWRkZWQsIHRoZQotICogcXVldWUgaXMgcHJvY2Vzc2VkIGltbWVkaWF0 ZWx5LiBPdGhlcndpc2UgdGhlIHF1ZXVlIHdpbGwgYmUgcHJvY2Vzc2VkIGR1cmluZwotICogYSBj b250ZXh0IHN3aXRjaCBpbnRlcnJ1cHQuIEluIGFueSBjYXNlLCBlbGVtZW50cyBvbiB0aGUgcXVl dWUgd2lsbCBnZXQgc2VudAotICogKGluIHBhaXJzKSB0byB0aGUgR1BVJ3MgRXhlY0xpc3RzIFN1 Ym1pdCBQb3J0IChFTFNQLCBmb3Igc2hvcnQpIHdpdGggYQotICogZ2xvYmFsbHkgdW5pcXVlIDIw LWJpdHMgc3VibWlzc2lvbiBJRC4KLSAqCi0gKiBXaGVuIGV4ZWN1dGlvbiBvZiBhIHJlcXVlc3Qg Y29tcGxldGVzLCB0aGUgR1BVIHVwZGF0ZXMgdGhlIGNvbnRleHQgc3RhdHVzCi0gKiBidWZmZXIg d2l0aCBhIGNvbnRleHQgY29tcGxldGUgZXZlbnQgYW5kIGdlbmVyYXRlcyBhIGNvbnRleHQgc3dp dGNoIGludGVycnVwdC4KLSAqIER1cmluZyB0aGUgaW50ZXJydXB0IGhhbmRsaW5nLCB0aGUgZHJp dmVyIGV4YW1pbmVzIHRoZSBldmVudHMgaW4gdGhlIGJ1ZmZlcjoKLSAqIGZvciBlYWNoIGNvbnRl eHQgY29tcGxldGUgZXZlbnQsIGlmIHRoZSBhbm5vdW5jZWQgSUQgbWF0Y2hlcyB0aGF0IG9uIHRo ZSBoZWFkCi0gKiBvZiB0aGUgcmVxdWVzdCBxdWV1ZSwgdGhlbiB0aGF0IHJlcXVlc3QgaXMgcmV0 aXJlZCBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBxdWV1ZS4KLSAqCi0gKiBBZnRlciBwcm9jZXNzaW5n LCBpZiBhbnkgcmVxdWVzdHMgd2VyZSByZXRpcmVkIGFuZCB0aGUgcXVldWUgaXMgbm90IGVtcHR5 Ci0gKiB0aGVuIGEgbmV3IGV4ZWN1dGlvbiBsaXN0IGNhbiBiZSBzdWJtaXR0ZWQuIFRoZSB0d28g cmVxdWVzdHMgYXQgdGhlIGZyb250IG9mCi0gKiB0aGUgcXVldWUgYXJlIG5leHQgdG8gYmUgc3Vi bWl0dGVkIGJ1dCBzaW5jZSBhIGNvbnRleHQgbWF5IG5vdCBvY2N1ciB0d2ljZSBpbgotICogYW4g ZXhlY3V0aW9uIGxpc3QsIGlmIHN1YnNlcXVlbnQgcmVxdWVzdHMgaGF2ZSB0aGUgc2FtZSBJRCBh cyB0aGUgZmlyc3QgdGhlbgotICogdGhlIHR3byByZXF1ZXN0cyBtdXN0IGJlIGNvbWJpbmVkLiBU aGlzIGlzIGRvbmUgc2ltcGx5IGJ5IGRpc2NhcmRpbmcgcmVxdWVzdHMKLSAqIGF0IHRoZSBoZWFk IG9mIHRoZSBxdWV1ZSB1bnRpbCBlaXRoZXIgb25seSBvbmUgcmVxdWVzdHMgaXMgbGVmdCAoaW4g d2hpY2ggY2FzZQotICogd2UgdXNlIGEgTlVMTCBzZWNvbmQgY29udGV4dCkgb3IgdGhlIGZpcnN0 IHR3byByZXF1ZXN0cyBoYXZlIHVuaXF1ZSBJRHMuCi0gKgotICogQnkgYWx3YXlzIGV4ZWN1dGlu ZyB0aGUgZmlyc3QgdHdvIHJlcXVlc3RzIGluIHRoZSBxdWV1ZSB0aGUgZHJpdmVyIGVuc3VyZXMK LSAqIHRoYXQgdGhlIEdQVSBpcyBrZXB0IGFzIGJ1c3kgYXMgcG9zc2libGUuIEluIHRoZSBjYXNl IHdoZXJlIGEgc2luZ2xlIGNvbnRleHQKLSAqIGNvbXBsZXRlcyBidXQgYSBzZWNvbmQgY29udGV4 dCBpcyBzdGlsbCBleGVjdXRpbmcsIHRoZSByZXF1ZXN0IGZvciB0aGlzIHNlY29uZAotICogY29u dGV4dCB3aWxsIGJlIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSB3aGVuIHdlIHJlbW92ZSB0aGUg Zmlyc3Qgb25lLiBUaGlzCi0gKiByZXF1ZXN0IHdpbGwgdGhlbiBiZSByZXN1Ym1pdHRlZCBhbG9u ZyB3aXRoIGEgbmV3IHJlcXVlc3QgZm9yIGEgZGlmZmVyZW50IGNvbnRleHQsCi0gKiB3aGljaCB3 aWxsIGNhdXNlIHRoZSBoYXJkd2FyZSB0byBjb250aW51ZSBleGVjdXRpbmcgdGhlIHNlY29uZCBy ZXF1ZXN0IGFuZCBxdWV1ZQotICogdGhlIG5ldyByZXF1ZXN0ICh0aGUgR1BVIGRldGVjdHMgdGhl IGNvbmRpdGlvbiBvZiBhIGNvbnRleHQgZ2V0dGluZyBwcmVlbXB0ZWQKLSAqIHdpdGggdGhlIHNh bWUgY29udGV4dCBhbmQgb3B0aW1pemVzIHRoZSBjb250ZXh0IHN3aXRjaCBmbG93IGJ5IG5vdCBk b2luZwotICogcHJlZW1wdGlvbiwgYnV0IGp1c3Qgc2FtcGxpbmcgdGhlIG5ldyB0YWlsIHBvaW50 ZXIpLgotICoKLSAqLwogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCisjaW5jbHVkZSAi Z2VuOF9lbmdpbmVfY3MuaCIKICNpbmNsdWRlICJpOTE1X2Rydi5oIgotI2luY2x1ZGUgImk5MTVf cGVyZi5oIgogI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKLSNpbmNsdWRlICJpOTE1X3ZncHUuaCIK ICNpbmNsdWRlICJpbnRlbF9jb250ZXh0LmgiCiAjaW5jbHVkZSAiaW50ZWxfZW5naW5lX3BtLmgi CiAjaW5jbHVkZSAiaW50ZWxfZ3QuaCIKICNpbmNsdWRlICJpbnRlbF9ndF9wbS5oIgogI2luY2x1 ZGUgImludGVsX2d0X3JlcXVlc3RzLmgiCisjaW5jbHVkZSAiaW50ZWxfbHJjLmgiCiAjaW5jbHVk ZSAiaW50ZWxfbHJjX3JlZy5oIgogI2luY2x1ZGUgImludGVsX21vY3MuaCIKICNpbmNsdWRlICJp bnRlbF9yZXNldC5oIgpAQCAtMjMwLDE1ICsxMDIsNiBAQCBzdGF0aWMgc3RydWN0IHZpcnR1YWxf ZW5naW5lICp0b192aXJ0dWFsX2VuZ2luZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp CiBzdGF0aWMgaW50IF9fZXhlY2xpc3RzX2NvbnRleHRfYWxsb2Moc3RydWN0IGludGVsX2NvbnRl eHQgKmNlLAogCQkJCSAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKIAotc3Rh dGljIHZvaWQgZXhlY2xpc3RzX2luaXRfcmVnX3N0YXRlKHUzMiAqcmVnX3N0YXRlLAotCQkJCSAg ICAgY29uc3Qgc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAotCQkJCSAgICAgY29uc3Qgc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX3Jp bmcgKnJpbmcsCi0JCQkJICAgICBib29sIGNsb3NlKTsKLXN0YXRpYyB2b2lkCi1fX2V4ZWNsaXN0 c191cGRhdGVfcmVnX3N0YXRlKGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKLQkJCSAg ICAgY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKLQogc3RhdGljIHZvaWQg bWFya19laW8oc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCiB7CiAJaWYgKGk5MTVfcmVxdWVzdF9j b21wbGV0ZWQocnEpKQpAQCAtNDMxLDUyNyArMjk0LDYgQEAgYXNzZXJ0X3ByaW9yaXR5X3F1ZXVl KGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnByZXYsCiAJcmV0dXJuIHJxX3ByaW8ocHJldikg Pj0gcnFfcHJpbyhuZXh0KTsKIH0KIAotLyoKLSAqIFRoZSBjb250ZXh0IGRlc2NyaXB0b3IgZW5j b2RlcyB2YXJpb3VzIGF0dHJpYnV0ZXMgb2YgYSBjb250ZXh0LAotICogaW5jbHVkaW5nIGl0cyBH VFQgYWRkcmVzcyBhbmQgc29tZSBmbGFncy4gQmVjYXVzZSBpdCdzIGZhaXJseQotICogZXhwZW5z aXZlIHRvIGNhbGN1bGF0ZSwgd2UnbGwganVzdCBkbyBpdCBvbmNlIGFuZCBjYWNoZSB0aGUgcmVz dWx0LAotICogd2hpY2ggcmVtYWlucyB2YWxpZCB1bnRpbCB0aGUgY29udGV4dCBpcyB1bnBpbm5l ZC4KLSAqCi0gKiBUaGlzIGlzIHdoYXQgYSBkZXNjcmlwdG9yIGxvb2tzIGxpa2UsIGZyb20gTFNC IHRvIE1TQjo6Ci0gKgotICogICAgICBiaXRzICAwLTExOiAgICBmbGFncywgR0VOOF9DVFhfKiAo Y2FjaGVkIGluIGN0eC0+ZGVzY190ZW1wbGF0ZSkKLSAqICAgICAgYml0cyAxMi0zMTogICAgTFJD QSwgR1RUIGFkZHJlc3Mgb2YgKHRoZSBIV1NQIG9mKSB0aGlzIGNvbnRleHQKLSAqICAgICAgYml0 cyAzMi01MjogICAgY3R4IElELCBhIGdsb2JhbGx5IHVuaXF1ZSB0YWcgKGhpZ2hlc3QgYml0IHVz ZWQgYnkgR3VDKQotICogICAgICBiaXRzIDUzLTU0OiAgICBtYnosIHJlc2VydmVkIGZvciB1c2Ug YnkgaGFyZHdhcmUKLSAqICAgICAgYml0cyA1NS02MzogICAgZ3JvdXAgSUQsIGN1cnJlbnRseSB1 bnVzZWQgYW5kIHNldCB0byAwCi0gKgotICogU3RhcnRpbmcgZnJvbSBHZW4xMSwgdGhlIHVwcGVy IGR3b3JkIG9mIHRoZSBkZXNjcmlwdG9yIGhhcyBhIG5ldyBmb3JtYXQ6Ci0gKgotICogICAgICBi aXRzIDMyLTM2OiAgICByZXNlcnZlZAotICogICAgICBiaXRzIDM3LTQ3OiAgICBTVyBjb250ZXh0 IElECi0gKiAgICAgIGJpdHMgNDg6NTM6ICAgIGVuZ2luZSBpbnN0YW5jZQotICogICAgICBiaXQg NTQ6ICAgICAgICBtYnosIHJlc2VydmVkIGZvciB1c2UgYnkgaGFyZHdhcmUKLSAqICAgICAgYml0 cyA1NS02MDogICAgU1cgY291bnRlcgotICogICAgICBiaXRzIDYxLTYzOiAgICBlbmdpbmUgY2xh c3MKLSAqCi0gKiBlbmdpbmUgaW5mbywgU1cgY29udGV4dCBJRCBhbmQgU1cgY291bnRlciBuZWVk IHRvIGZvcm0gYSB1bmlxdWUgbnVtYmVyCi0gKiAoQ29udGV4dCBJRCkgcGVyIGxyYy4KLSAqLwot c3RhdGljIHU2NAotbHJjX2Rlc2NyaXB0b3Ioc3RydWN0IGludGVsX2NvbnRleHQgKmNlLCBzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCi17Ci0JdTY0IGRlc2M7Ci0KLQlkZXNjID0gSU5U RUxfTEVHQUNZXzMyQl9DT05URVhUOwotCWlmIChpOTE1X3ZtX2lzXzRsdmwoY2UtPnZtKSkKLQkJ ZGVzYyA9IElOVEVMX0xFR0FDWV82NEJfQ09OVEVYVDsKLQlkZXNjIDw8PSBHRU44X0NUWF9BRERS RVNTSU5HX01PREVfU0hJRlQ7Ci0KLQlkZXNjIHw9IEdFTjhfQ1RYX1ZBTElEIHwgR0VOOF9DVFhf UFJJVklMRUdFOwotCWlmIChJU19HRU4oZW5naW5lLT5pOTE1LCA4KSkKLQkJZGVzYyB8PSBHRU44 X0NUWF9MM0xMQ19DT0hFUkVOVDsKLQotCWRlc2MgfD0gaTkxNV9nZ3R0X29mZnNldChjZS0+c3Rh dGUpOyAvKiBiaXRzIDEyLTMxICovCi0JLyoKLQkgKiBUaGUgZm9sbG93aW5nIDMyYml0cyBhcmUg Y29waWVkIGludG8gdGhlIE9BIHJlcG9ydHMgKGR3b3JkIDIpLgotCSAqIENvbnNpZGVyIHVwZGF0 aW5nIG9hX2dldF9yZW5kZXJfY3R4X2lkIGluIGk5MTVfcGVyZi5jIHdoZW4gY2hhbmdpbmcKLQkg KiBhbnl0aGluZyBiZWxvdy4KLQkgKi8KLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0g MTEpIHsKLQkJZGVzYyB8PSAodTY0KWVuZ2luZS0+aW5zdGFuY2UgPDwgR0VOMTFfRU5HSU5FX0lO U1RBTkNFX1NISUZUOwotCQkJCQkJCQkvKiBiaXRzIDQ4LTUzICovCi0KLQkJZGVzYyB8PSAodTY0 KWVuZ2luZS0+Y2xhc3MgPDwgR0VOMTFfRU5HSU5FX0NMQVNTX1NISUZUOwotCQkJCQkJCQkvKiBi aXRzIDYxLTYzICovCi0JfQotCi0JcmV0dXJuIGRlc2M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5z aWduZWQgaW50IGR3b3JkX2luX3BhZ2Uodm9pZCAqYWRkcikKLXsKLQlyZXR1cm4gb2Zmc2V0X2lu X3BhZ2UoYWRkcikgLyBzaXplb2YodTMyKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0X29mZnNldHMo dTMyICpyZWdzLAotCQkJY29uc3QgdTggKmRhdGEsCi0JCQljb25zdCBzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUsCi0JCQlib29sIGNsZWFyKQotI2RlZmluZSBOT1AoeCkgKEJJVCg3KSB8 ICh4KSkKLSNkZWZpbmUgTFJJKGNvdW50LCBmbGFncykgKChmbGFncykgPDwgNiB8IChjb3VudCkg fCBCVUlMRF9CVUdfT05fWkVSTyhjb3VudCA+PSBCSVQoNikpKQotI2RlZmluZSBQT1NURUQgQklU KDApCi0jZGVmaW5lIFJFRyh4KSAoKCh4KSA+PiAyKSB8IEJVSUxEX0JVR19PTl9aRVJPKHggPj0g MHgyMDApKQotI2RlZmluZSBSRUcxNih4KSBcCi0JKCgoeCkgPj4gOSkgfCBCSVQoNykgfCBCVUlM RF9CVUdfT05fWkVSTyh4ID49IDB4MTAwMDApKSwgXAotCSgoKHgpID4+IDIpICYgMHg3ZikKLSNk ZWZpbmUgRU5EKHgpIDAsICh4KQotewotCWNvbnN0IHUzMiBiYXNlID0gZW5naW5lLT5tbWlvX2Jh c2U7Ci0KLQl3aGlsZSAoKmRhdGEpIHsKLQkJdTggY291bnQsIGZsYWdzOwotCi0JCWlmICgqZGF0 YSAmIEJJVCg3KSkgeyAvKiBza2lwICovCi0JCQljb3VudCA9ICpkYXRhKysgJiB+QklUKDcpOwot CQkJaWYgKGNsZWFyKQotCQkJCW1lbXNldDMyKHJlZ3MsIE1JX05PT1AsIGNvdW50KTsKLQkJCXJl Z3MgKz0gY291bnQ7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWNvdW50ID0gKmRhdGEgJiAweDNm OwotCQlmbGFncyA9ICpkYXRhID4+IDY7Ci0JCWRhdGErKzsKLQotCQkqcmVncyA9IE1JX0xPQURf UkVHSVNURVJfSU1NKGNvdW50KTsKLQkJaWYgKGZsYWdzICYgUE9TVEVEKQotCQkJKnJlZ3MgfD0g TUlfTFJJX0ZPUkNFX1BPU1RFRDsKLQkJaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDEx KQotCQkJKnJlZ3MgfD0gTUlfTFJJX0NTX01NSU87Ci0JCXJlZ3MrKzsKLQotCQlHRU1fQlVHX09O KCFjb3VudCk7Ci0JCWRvIHsKLQkJCXUzMiBvZmZzZXQgPSAwOwotCQkJdTggdjsKLQotCQkJZG8g ewotCQkJCXYgPSAqZGF0YSsrOwotCQkJCW9mZnNldCA8PD0gNzsKLQkJCQlvZmZzZXQgfD0gdiAm IH5CSVQoNyk7Ci0JCQl9IHdoaWxlICh2ICYgQklUKDcpKTsKLQotCQkJcmVnc1swXSA9IGJhc2Ug KyAob2Zmc2V0IDw8IDIpOwotCQkJaWYgKGNsZWFyKQotCQkJCXJlZ3NbMV0gPSAwOwotCQkJcmVn cyArPSAyOwotCQl9IHdoaWxlICgtLWNvdW50KTsKLQl9Ci0KLQlpZiAoY2xlYXIpIHsKLQkJdTgg Y291bnQgPSAqKytkYXRhOwotCi0JCS8qIENsZWFyIHBhc3QgdGhlIHRhaWwgZm9yIEhXIGFjY2Vz cyAqLwotCQlHRU1fQlVHX09OKGR3b3JkX2luX3BhZ2UocmVncykgPiBjb3VudCk7Ci0JCW1lbXNl dDMyKHJlZ3MsIE1JX05PT1AsIGNvdW50IC0gZHdvcmRfaW5fcGFnZShyZWdzKSk7Ci0KLQkJLyog Q2xvc2UgdGhlIGJhdGNoOyB1c2VkIG1haW5seSBieSBsaXZlX2xyY19sYXlvdXQoKSAqLwotCQkq cmVncyA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Ci0JCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1 KSA+PSAxMCkKLQkJCSpyZWdzIHw9IEJJVCgwKTsKLQl9Ci19Ci0KLXN0YXRpYyBjb25zdCB1OCBn ZW44X3hjc19vZmZzZXRzW10gPSB7Ci0JTk9QKDEpLAotCUxSSSgxMSwgMCksCi0JUkVHMTYoMHgy NDQpLAotCVJFRygweDAzNCksCi0JUkVHKDB4MDMwKSwKLQlSRUcoMHgwMzgpLAotCVJFRygweDAz YyksCi0JUkVHKDB4MTY4KSwKLQlSRUcoMHgxNDApLAotCVJFRygweDExMCksCi0JUkVHKDB4MTFj KSwKLQlSRUcoMHgxMTQpLAotCVJFRygweDExOCksCi0KLQlOT1AoOSksCi0JTFJJKDksIDApLAot CVJFRzE2KDB4M2E4KSwKLQlSRUcxNigweDI4YyksCi0JUkVHMTYoMHgyODgpLAotCVJFRzE2KDB4 Mjg0KSwKLQlSRUcxNigweDI4MCksCi0JUkVHMTYoMHgyN2MpLAotCVJFRzE2KDB4Mjc4KSwKLQlS RUcxNigweDI3NCksCi0JUkVHMTYoMHgyNzApLAotCi0JTk9QKDEzKSwKLQlMUkkoMiwgMCksCi0J UkVHMTYoMHgyMDApLAotCVJFRygweDAyOCksCi0KLQlFTkQoODApCi19OwotCi1zdGF0aWMgY29u c3QgdTggZ2VuOV94Y3Nfb2Zmc2V0c1tdID0gewotCU5PUCgxKSwKLQlMUkkoMTQsIFBPU1RFRCks Ci0JUkVHMTYoMHgyNDQpLAotCVJFRygweDAzNCksCi0JUkVHKDB4MDMwKSwKLQlSRUcoMHgwMzgp LAotCVJFRygweDAzYyksCi0JUkVHKDB4MTY4KSwKLQlSRUcoMHgxNDApLAotCVJFRygweDExMCks Ci0JUkVHKDB4MTFjKSwKLQlSRUcoMHgxMTQpLAotCVJFRygweDExOCksCi0JUkVHKDB4MWMwKSwK LQlSRUcoMHgxYzQpLAotCVJFRygweDFjOCksCi0KLQlOT1AoMyksCi0JTFJJKDksIFBPU1RFRCks Ci0JUkVHMTYoMHgzYTgpLAotCVJFRzE2KDB4MjhjKSwKLQlSRUcxNigweDI4OCksCi0JUkVHMTYo MHgyODQpLAotCVJFRzE2KDB4MjgwKSwKLQlSRUcxNigweDI3YyksCi0JUkVHMTYoMHgyNzgpLAot CVJFRzE2KDB4Mjc0KSwKLQlSRUcxNigweDI3MCksCi0KLQlOT1AoMTMpLAotCUxSSSgxLCBQT1NU RUQpLAotCVJFRzE2KDB4MjAwKSwKLQotCU5PUCgxMyksCi0JTFJJKDQ0LCBQT1NURUQpLAotCVJF RygweDAyOCksCi0JUkVHKDB4MDljKSwKLQlSRUcoMHgwYzApLAotCVJFRygweDE3OCksCi0JUkVH KDB4MTdjKSwKLQlSRUcxNigweDM1OCksCi0JUkVHKDB4MTcwKSwKLQlSRUcoMHgxNTApLAotCVJF RygweDE1NCksCi0JUkVHKDB4MTU4KSwKLQlSRUcxNigweDQxYyksCi0JUkVHMTYoMHg2MDApLAot CVJFRzE2KDB4NjA0KSwKLQlSRUcxNigweDYwOCksCi0JUkVHMTYoMHg2MGMpLAotCVJFRzE2KDB4 NjEwKSwKLQlSRUcxNigweDYxNCksCi0JUkVHMTYoMHg2MTgpLAotCVJFRzE2KDB4NjFjKSwKLQlS RUcxNigweDYyMCksCi0JUkVHMTYoMHg2MjQpLAotCVJFRzE2KDB4NjI4KSwKLQlSRUcxNigweDYy YyksCi0JUkVHMTYoMHg2MzApLAotCVJFRzE2KDB4NjM0KSwKLQlSRUcxNigweDYzOCksCi0JUkVH MTYoMHg2M2MpLAotCVJFRzE2KDB4NjQwKSwKLQlSRUcxNigweDY0NCksCi0JUkVHMTYoMHg2NDgp LAotCVJFRzE2KDB4NjRjKSwKLQlSRUcxNigweDY1MCksCi0JUkVHMTYoMHg2NTQpLAotCVJFRzE2 KDB4NjU4KSwKLQlSRUcxNigweDY1YyksCi0JUkVHMTYoMHg2NjApLAotCVJFRzE2KDB4NjY0KSwK LQlSRUcxNigweDY2OCksCi0JUkVHMTYoMHg2NmMpLAotCVJFRzE2KDB4NjcwKSwKLQlSRUcxNigw eDY3NCksCi0JUkVHMTYoMHg2NzgpLAotCVJFRzE2KDB4NjdjKSwKLQlSRUcoMHgwNjgpLAotCi0J RU5EKDE3NikKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBnZW4xMl94Y3Nfb2Zmc2V0c1tdID0gewot CU5PUCgxKSwKLQlMUkkoMTMsIFBPU1RFRCksCi0JUkVHMTYoMHgyNDQpLAotCVJFRygweDAzNCks Ci0JUkVHKDB4MDMwKSwKLQlSRUcoMHgwMzgpLAotCVJFRygweDAzYyksCi0JUkVHKDB4MTY4KSwK LQlSRUcoMHgxNDApLAotCVJFRygweDExMCksCi0JUkVHKDB4MWMwKSwKLQlSRUcoMHgxYzQpLAot CVJFRygweDFjOCksCi0JUkVHKDB4MTgwKSwKLQlSRUcxNigweDJiNCksCi0KLQlOT1AoNSksCi0J TFJJKDksIFBPU1RFRCksCi0JUkVHMTYoMHgzYTgpLAotCVJFRzE2KDB4MjhjKSwKLQlSRUcxNigw eDI4OCksCi0JUkVHMTYoMHgyODQpLAotCVJFRzE2KDB4MjgwKSwKLQlSRUcxNigweDI3YyksCi0J UkVHMTYoMHgyNzgpLAotCVJFRzE2KDB4Mjc0KSwKLQlSRUcxNigweDI3MCksCi0KLQlFTkQoODAp Ci19OwotCi1zdGF0aWMgY29uc3QgdTggZ2VuOF9yY3Nfb2Zmc2V0c1tdID0gewotCU5PUCgxKSwK LQlMUkkoMTQsIFBPU1RFRCksCi0JUkVHMTYoMHgyNDQpLAotCVJFRygweDAzNCksCi0JUkVHKDB4 MDMwKSwKLQlSRUcoMHgwMzgpLAotCVJFRygweDAzYyksCi0JUkVHKDB4MTY4KSwKLQlSRUcoMHgx NDApLAotCVJFRygweDExMCksCi0JUkVHKDB4MTFjKSwKLQlSRUcoMHgxMTQpLAotCVJFRygweDEx OCksCi0JUkVHKDB4MWMwKSwKLQlSRUcoMHgxYzQpLAotCVJFRygweDFjOCksCi0KLQlOT1AoMyks Ci0JTFJJKDksIFBPU1RFRCksCi0JUkVHMTYoMHgzYTgpLAotCVJFRzE2KDB4MjhjKSwKLQlSRUcx NigweDI4OCksCi0JUkVHMTYoMHgyODQpLAotCVJFRzE2KDB4MjgwKSwKLQlSRUcxNigweDI3Yyks Ci0JUkVHMTYoMHgyNzgpLAotCVJFRzE2KDB4Mjc0KSwKLQlSRUcxNigweDI3MCksCi0KLQlOT1Ao MTMpLAotCUxSSSgxLCAwKSwKLQlSRUcoMHgwYzgpLAotCi0JRU5EKDgwKQotfTsKLQotc3RhdGlj IGNvbnN0IHU4IGdlbjlfcmNzX29mZnNldHNbXSA9IHsKLQlOT1AoMSksCi0JTFJJKDE0LCBQT1NU RUQpLAotCVJFRzE2KDB4MjQ0KSwKLQlSRUcoMHgzNCksCi0JUkVHKDB4MzApLAotCVJFRygweDM4 KSwKLQlSRUcoMHgzYyksCi0JUkVHKDB4MTY4KSwKLQlSRUcoMHgxNDApLAotCVJFRygweDExMCks Ci0JUkVHKDB4MTFjKSwKLQlSRUcoMHgxMTQpLAotCVJFRygweDExOCksCi0JUkVHKDB4MWMwKSwK LQlSRUcoMHgxYzQpLAotCVJFRygweDFjOCksCi0KLQlOT1AoMyksCi0JTFJJKDksIFBPU1RFRCks Ci0JUkVHMTYoMHgzYTgpLAotCVJFRzE2KDB4MjhjKSwKLQlSRUcxNigweDI4OCksCi0JUkVHMTYo MHgyODQpLAotCVJFRzE2KDB4MjgwKSwKLQlSRUcxNigweDI3YyksCi0JUkVHMTYoMHgyNzgpLAot CVJFRzE2KDB4Mjc0KSwKLQlSRUcxNigweDI3MCksCi0KLQlOT1AoMTMpLAotCUxSSSgxLCAwKSwK LQlSRUcoMHhjOCksCi0KLQlOT1AoMTMpLAotCUxSSSg0NCwgUE9TVEVEKSwKLQlSRUcoMHgyOCks Ci0JUkVHKDB4OWMpLAotCVJFRygweGMwKSwKLQlSRUcoMHgxNzgpLAotCVJFRygweDE3YyksCi0J UkVHMTYoMHgzNTgpLAotCVJFRygweDE3MCksCi0JUkVHKDB4MTUwKSwKLQlSRUcoMHgxNTQpLAot CVJFRygweDE1OCksCi0JUkVHMTYoMHg0MWMpLAotCVJFRzE2KDB4NjAwKSwKLQlSRUcxNigweDYw NCksCi0JUkVHMTYoMHg2MDgpLAotCVJFRzE2KDB4NjBjKSwKLQlSRUcxNigweDYxMCksCi0JUkVH MTYoMHg2MTQpLAotCVJFRzE2KDB4NjE4KSwKLQlSRUcxNigweDYxYyksCi0JUkVHMTYoMHg2MjAp LAotCVJFRzE2KDB4NjI0KSwKLQlSRUcxNigweDYyOCksCi0JUkVHMTYoMHg2MmMpLAotCVJFRzE2 KDB4NjMwKSwKLQlSRUcxNigweDYzNCksCi0JUkVHMTYoMHg2MzgpLAotCVJFRzE2KDB4NjNjKSwK LQlSRUcxNigweDY0MCksCi0JUkVHMTYoMHg2NDQpLAotCVJFRzE2KDB4NjQ4KSwKLQlSRUcxNigw eDY0YyksCi0JUkVHMTYoMHg2NTApLAotCVJFRzE2KDB4NjU0KSwKLQlSRUcxNigweDY1OCksCi0J UkVHMTYoMHg2NWMpLAotCVJFRzE2KDB4NjYwKSwKLQlSRUcxNigweDY2NCksCi0JUkVHMTYoMHg2 NjgpLAotCVJFRzE2KDB4NjZjKSwKLQlSRUcxNigweDY3MCksCi0JUkVHMTYoMHg2NzQpLAotCVJF RzE2KDB4Njc4KSwKLQlSRUcxNigweDY3YyksCi0JUkVHKDB4NjgpLAotCi0JRU5EKDE3NikKLX07 Ci0KLXN0YXRpYyBjb25zdCB1OCBnZW4xMV9yY3Nfb2Zmc2V0c1tdID0gewotCU5PUCgxKSwKLQlM UkkoMTUsIFBPU1RFRCksCi0JUkVHMTYoMHgyNDQpLAotCVJFRygweDAzNCksCi0JUkVHKDB4MDMw KSwKLQlSRUcoMHgwMzgpLAotCVJFRygweDAzYyksCi0JUkVHKDB4MTY4KSwKLQlSRUcoMHgxNDAp LAotCVJFRygweDExMCksCi0JUkVHKDB4MTFjKSwKLQlSRUcoMHgxMTQpLAotCVJFRygweDExOCks Ci0JUkVHKDB4MWMwKSwKLQlSRUcoMHgxYzQpLAotCVJFRygweDFjOCksCi0JUkVHKDB4MTgwKSwK LQotCU5PUCgxKSwKLQlMUkkoOSwgUE9TVEVEKSwKLQlSRUcxNigweDNhOCksCi0JUkVHMTYoMHgy OGMpLAotCVJFRzE2KDB4Mjg4KSwKLQlSRUcxNigweDI4NCksCi0JUkVHMTYoMHgyODApLAotCVJF RzE2KDB4MjdjKSwKLQlSRUcxNigweDI3OCksCi0JUkVHMTYoMHgyNzQpLAotCVJFRzE2KDB4Mjcw KSwKLQotCUxSSSgxLCBQT1NURUQpLAotCVJFRygweDFiMCksCi0KLQlOT1AoMTApLAotCUxSSSgx LCAwKSwKLQlSRUcoMHgwYzgpLAotCi0JRU5EKDgwKQotfTsKLQotc3RhdGljIGNvbnN0IHU4IGdl bjEyX3Jjc19vZmZzZXRzW10gPSB7Ci0JTk9QKDEpLAotCUxSSSgxMywgUE9TVEVEKSwKLQlSRUcx NigweDI0NCksCi0JUkVHKDB4MDM0KSwKLQlSRUcoMHgwMzApLAotCVJFRygweDAzOCksCi0JUkVH KDB4MDNjKSwKLQlSRUcoMHgxNjgpLAotCVJFRygweDE0MCksCi0JUkVHKDB4MTEwKSwKLQlSRUco MHgxYzApLAotCVJFRygweDFjNCksCi0JUkVHKDB4MWM4KSwKLQlSRUcoMHgxODApLAotCVJFRzE2 KDB4MmI0KSwKLQotCU5PUCg1KSwKLQlMUkkoOSwgUE9TVEVEKSwKLQlSRUcxNigweDNhOCksCi0J UkVHMTYoMHgyOGMpLAotCVJFRzE2KDB4Mjg4KSwKLQlSRUcxNigweDI4NCksCi0JUkVHMTYoMHgy ODApLAotCVJFRzE2KDB4MjdjKSwKLQlSRUcxNigweDI3OCksCi0JUkVHMTYoMHgyNzQpLAotCVJF RzE2KDB4MjcwKSwKLQotCUxSSSgzLCBQT1NURUQpLAotCVJFRygweDFiMCksCi0JUkVHMTYoMHg1 YTgpLAotCVJFRzE2KDB4NWFjKSwKLQotCU5PUCg2KSwKLQlMUkkoMSwgMCksCi0JUkVHKDB4MGM4 KSwKLQotCUVORCg4MCkKLX07Ci0KLSN1bmRlZiBFTkQKLSN1bmRlZiBSRUcxNgotI3VuZGVmIFJF RwotI3VuZGVmIExSSQotI3VuZGVmIE5PUAotCi1zdGF0aWMgY29uc3QgdTggKnJlZ19vZmZzZXRz KGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsKLQkvKgotCSAqIFRoZSBn ZW4xMisgbGlzdHMgb25seSBoYXZlIHRoZSByZWdpc3RlcnMgd2UgcHJvZ3JhbSBpbiB0aGUgYmFz aWMKLQkgKiBkZWZhdWx0IHN0YXRlLiBXZSByZWx5IG9uIHRoZSBjb250ZXh0IGltYWdlIHVzaW5n IHJlbGF0aXZlCi0JICogYWRkcmVzc2luZyB0byBhdXRvbWF0aWMgZml4dXAgdGhlIHJlZ2lzdGVy IHN0YXRlIGJldHdlZW4gdGhlCi0JICogcGh5c2ljYWwgZW5naW5lcyBmb3IgdmlydHVhbCBlbmdp bmUuCi0JICovCi0JR0VNX0JVR19PTihJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMiAmJgot CQkgICAhaW50ZWxfZW5naW5lX2hhc19yZWxhdGl2ZV9tbWlvKGVuZ2luZSkpOwotCi0JaWYgKGVu Z2luZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNTKSB7Ci0JCWlmIChJTlRFTF9HRU4oZW5naW5lLT5p OTE1KSA+PSAxMikKLQkJCXJldHVybiBnZW4xMl9yY3Nfb2Zmc2V0czsKLQkJZWxzZSBpZiAoSU5U RUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTEpCi0JCQlyZXR1cm4gZ2VuMTFfcmNzX29mZnNldHM7 Ci0JCWVsc2UgaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDkpCi0JCQlyZXR1cm4gZ2Vu OV9yY3Nfb2Zmc2V0czsKLQkJZWxzZQotCQkJcmV0dXJuIGdlbjhfcmNzX29mZnNldHM7Ci0JfSBl bHNlIHsKLQkJaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDEyKQotCQkJcmV0dXJuIGdl bjEyX3hjc19vZmZzZXRzOwotCQllbHNlIGlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSA5 KQotCQkJcmV0dXJuIGdlbjlfeGNzX29mZnNldHM7Ci0JCWVsc2UKLQkJCXJldHVybiBnZW44X3hj c19vZmZzZXRzOwotCX0KLX0KLQogc3RhdGljIHN0cnVjdCBpOTE1X3JlcXVlc3QgKgogX191bndp bmRfaW5jb21wbGV0ZV9yZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7 CkBAIC0xMDkyLDE4ICs0MzQsNiBAQCBzdGF0aWMgdm9pZCBpbnRlbF9lbmdpbmVfY29udGV4dF9v dXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCXdyaXRlX3NlcXVubG9ja19pcnFy ZXN0b3JlKCZlbmdpbmUtPnN0YXRzLmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBscmNf cmluZ19taV9tb2RlKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsKLQlp ZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTIpCi0JCXJldHVybiAweDYwOwotCWVsc2Ug aWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDkpCi0JCXJldHVybiAweDU0OwotCWVsc2Ug aWYgKGVuZ2luZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNTKQotCQlyZXR1cm4gMHg1ODsKLQllbHNl Ci0JCXJldHVybiAtMTsKLX0KLQogc3RhdGljIHZvaWQKIGV4ZWNsaXN0c19jaGVja19jb250ZXh0 KGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKIAkJCWNvbnN0IHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSkKQEAgLTExMzIsNyArNDYyLDcgQEAgZXhlY2xpc3RzX2NoZWNrX2Nv bnRleHQoY29uc3Qgc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAogCQl2YWxpZCA9IGZhbHNlOwog CX0KIAotCXggPSBscmNfcmluZ19taV9tb2RlKGVuZ2luZSk7CisJeCA9IGludGVsX2xyY19yaW5n X21pX21vZGUoZW5naW5lKTsKIAlpZiAoeCAhPSAtMSAmJiByZWdzW3ggKyAxXSAmIChyZWdzW3gg KyAxXSA+PiAxNikgJiBTVE9QX1JJTkcpIHsKIAkJcHJfZXJyKCIlczogY29udGV4dCBzdWJtaXR0 ZWQgd2l0aCBTVE9QX1JJTkcgWyUwOHhdIGluIFJJTkdfTUlfTU9ERVxuIiwKIAkJICAgICAgIGVu Z2luZS0+bmFtZSwgcmVnc1t4ICsgMV0pOwpAQCAtMTE1NCw3ICs0ODQsNyBAQCBzdGF0aWMgdm9p ZCByZXN0b3JlX2RlZmF1bHRfc3RhdGUoc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAogCQkgICAg ICAgZW5naW5lLT5waW5uZWRfZGVmYXVsdF9zdGF0ZSArIExSQ19TVEFURV9QTiAqIFBBR0VfU0la RSwKIAkJICAgICAgIGVuZ2luZS0+Y29udGV4dF9zaXplIC0gUEFHRV9TSVpFKTsKIAotCWV4ZWNs aXN0c19pbml0X3JlZ19zdGF0ZShyZWdzLCBjZSwgZW5naW5lLCBjZS0+cmluZywgZmFsc2UpOwor CWludGVsX2xyY19pbml0X3JlZ19zdGF0ZShyZWdzLCBjZSwgZW5naW5lLCBjZS0+cmluZywgZmFs c2UpOwogfQogCiBzdGF0aWMgdm9pZCByZXNldF9hY3RpdmUoc3RydWN0IGk5MTVfcmVxdWVzdCAq cnEsCkBAIC0xMTkxLDcgKzUyMSw3IEBAIHN0YXRpYyB2b2lkIHJlc2V0X2FjdGl2ZShzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycSwKIAogCS8qIFNjcnViIHRoZSBjb250ZXh0IGltYWdlIHRvIHByZXZl bnQgcmVwbGF5aW5nIHRoZSBwcmV2aW91cyBiYXRjaCAqLwogCXJlc3RvcmVfZGVmYXVsdF9zdGF0 ZShjZSwgZW5naW5lKTsKLQlfX2V4ZWNsaXN0c191cGRhdGVfcmVnX3N0YXRlKGNlLCBlbmdpbmUp OworCWludGVsX2xyY191cGRhdGVfcmVnX3N0YXRlKGNlLCBlbmdpbmUpOwogCiAJLyogV2UndmUg c3dpdGNoZWQgYXdheSwgc28gdGhpcyBzaG91bGQgYmUgYSBuby1vcCwgYnV0IGludGVudCBtYXR0 ZXJzICovCiAJY2UtPmxyY19kZXNjIHw9IENUWF9ERVNDX0ZPUkNFX1JFU1RPUkU7CkBAIC0xNTUw LDcgKzg4MCw3IEBAIHN0YXRpYyBib29sIGNhbl9tZXJnZV9ycShjb25zdCBzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpwcmV2LAogc3RhdGljIHZvaWQgdmlydHVhbF91cGRhdGVfcmVnaXN0ZXJfb2Zmc2V0 cyh1MzIgKnJlZ3MsCiAJCQkJCSAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7 Ci0Jc2V0X29mZnNldHMocmVncywgcmVnX29mZnNldHMoZW5naW5lKSwgZW5naW5lLCBmYWxzZSk7 CisJaW50ZWxfbHJjX3NldF9yZWdfb2Zmc2V0cyhyZWdzLCBlbmdpbmUpOwogfQogCiBzdGF0aWMg Ym9vbCB2aXJ0dWFsX21hdGNoZXMoY29uc3Qgc3RydWN0IHZpcnR1YWxfZW5naW5lICp2ZSwKQEAg LTI4OTEsMjkgKzIyMjEsNiBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfY29udGV4dF91bnBpbihz dHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCiAJaTkxNV9nZW1fb2JqZWN0X3VucGluX21hcChjZS0+ c3RhdGUtPm9iaik7CiB9CiAKLXN0YXRpYyB2b2lkCi1fX2V4ZWNsaXN0c191cGRhdGVfcmVnX3N0 YXRlKGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKLQkJCSAgICAgY29uc3Qgc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQotewotCXN0cnVjdCBpbnRlbF9yaW5nICpyaW5nID0g Y2UtPnJpbmc7Ci0JdTMyICpyZWdzID0gY2UtPmxyY19yZWdfc3RhdGU7Ci0KLQlHRU1fQlVHX09O KCFpbnRlbF9yaW5nX29mZnNldF92YWxpZChyaW5nLCByaW5nLT5oZWFkKSk7Ci0JR0VNX0JVR19P TighaW50ZWxfcmluZ19vZmZzZXRfdmFsaWQocmluZywgcmluZy0+dGFpbCkpOwotCi0JcmVnc1tD VFhfUklOR19TVEFSVF0gPSBpOTE1X2dndHRfb2Zmc2V0KHJpbmctPnZtYSk7Ci0JcmVnc1tDVFhf UklOR19IRUFEXSA9IHJpbmctPmhlYWQ7Ci0JcmVnc1tDVFhfUklOR19UQUlMXSA9IHJpbmctPnRh aWw7Ci0KLQkvKiBSUENTICovCi0JaWYgKGVuZ2luZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNTKSB7 Ci0JCXJlZ3NbQ1RYX1JfUFdSX0NMS19TVEFURV0gPQotCQkJaW50ZWxfc3NldV9tYWtlX3JwY3Mo ZW5naW5lLT5pOTE1LCAmY2UtPnNzZXUpOwotCi0JCWk5MTVfb2FfaW5pdF9yZWdfc3RhdGUoY2Us IGVuZ2luZSk7Ci0JfQotfQotCiBzdGF0aWMgaW50CiBfX2V4ZWNsaXN0c19jb250ZXh0X3Bpbihz dHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCiAJCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpCkBAIC0yOTI5LDkgKzIyMzYsMTEgQEAgX19leGVjbGlzdHNfY29udGV4dF9waW4oc3RydWN0 IGludGVsX2NvbnRleHQgKmNlLAogCWlmIChJU19FUlIodmFkZHIpKQogCQlyZXR1cm4gUFRSX0VS Uih2YWRkcik7CiAKLQljZS0+bHJjX2Rlc2MgPSBscmNfZGVzY3JpcHRvcihjZSwgZW5naW5lKSB8 IENUWF9ERVNDX0ZPUkNFX1JFU1RPUkU7CisJY2UtPmxyY19kZXNjID0KKwkJaW50ZWxfbHJjX2Rl c2NyaXB0b3IoY2UsIGVuZ2luZSkgfCBDVFhfREVTQ19GT1JDRV9SRVNUT1JFOworCiAJY2UtPmxy Y19yZWdfc3RhdGUgPSB2YWRkciArIExSQ19TVEFURV9QTiAqIFBBR0VfU0laRTsKLQlfX2V4ZWNs aXN0c191cGRhdGVfcmVnX3N0YXRlKGNlLCBlbmdpbmUpOworCWludGVsX2xyY191cGRhdGVfcmVn X3N0YXRlKGNlLCBlbmdpbmUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yOTcwLDkgKzIyNzksOSBA QCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfY29udGV4dF9yZXNldChzdHJ1Y3QgaW50ZWxfY29udGV4 dCAqY2UpCiAJaW50ZWxfcmluZ19yZXNldChjZS0+cmluZywgY2UtPnJpbmctPmVtaXQpOwogCiAJ LyogU2NydWIgYXdheSB0aGUgZ2FyYmFnZSAqLwotCWV4ZWNsaXN0c19pbml0X3JlZ19zdGF0ZShj ZS0+bHJjX3JlZ19zdGF0ZSwKKwlpbnRlbF9scmNfaW5pdF9yZWdfc3RhdGUoY2UtPmxyY19yZWdf c3RhdGUsCiAJCQkJIGNlLCBjZS0+ZW5naW5lLCBjZS0+cmluZywgdHJ1ZSk7Ci0JX19leGVjbGlz dHNfdXBkYXRlX3JlZ19zdGF0ZShjZSwgY2UtPmVuZ2luZSk7CisJaW50ZWxfbHJjX3VwZGF0ZV9y ZWdfc3RhdGUoY2UsIGNlLT5lbmdpbmUpOwogCiAJY2UtPmxyY19kZXNjIHw9IENUWF9ERVNDX0ZP UkNFX1JFU1RPUkU7CiB9CkBAIC0zMDUyLDMzMCArMjM2MSw2IEBAIHN0YXRpYyBpbnQgZXhlY2xp c3RzX3JlcXVlc3RfYWxsb2Moc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCkKIAlyZXR1cm4g MDsKIH0KIAotLyoKLSAqIEluIHRoaXMgV0Egd2UgbmVlZCB0byBzZXQgR0VOOF9MM1NRQ1JFRzRb MjE6MjFdIGFuZCByZXNldCBpdCBhZnRlcgotICogUElQRV9DT05UUk9MIGluc3RydWN0aW9uLiBU aGlzIGlzIHJlcXVpcmVkIGZvciB0aGUgZmx1c2ggdG8gaGFwcGVuIGNvcnJlY3RseQotICogYnV0 IHRoZXJlIGlzIGEgc2xpZ2h0IGNvbXBsaWNhdGlvbiBhcyB0aGlzIGlzIGFwcGxpZWQgaW4gV0Eg YmF0Y2ggd2hlcmUgdGhlCi0gKiB2YWx1ZXMgYXJlIG9ubHkgaW5pdGlhbGl6ZWQgb25jZSBzbyB3 ZSBjYW5ub3QgdGFrZSByZWdpc3RlciB2YWx1ZSBhdCB0aGUKLSAqIGJlZ2lubmluZyBhbmQgcmV1 c2UgaXQgZnVydGhlcjsgaGVuY2Ugd2Ugc2F2ZSBpdHMgdmFsdWUgdG8gbWVtb3J5LCB1cGxvYWQg YQotICogY29uc3RhbnQgdmFsdWUgd2l0aCBiaXQyMSBzZXQgYW5kIHRoZW4gd2UgcmVzdG9yZSBp dCBiYWNrIHdpdGggdGhlIHNhdmVkIHZhbHVlLgotICogVG8gc2ltcGxpZnkgdGhlIFdBLCBhIGNv bnN0YW50IHZhbHVlIGlzIGZvcm1lZCBieSB1c2luZyB0aGUgZGVmYXVsdCB2YWx1ZQotICogb2Yg dGhpcyByZWdpc3Rlci4gVGhpcyBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtIGJlY2F1c2Ugd2UgYXJl IG9ubHkgbW9kaWZ5aW5nCi0gKiBpdCBmb3IgYSBzaG9ydCBwZXJpb2QgYW5kIHRoaXMgYmF0Y2gg aW4gbm9uLXByZW1wdGlibGUuIFdlIGNhbiBvZmNvdXJzZQotICogdXNlIGFkZGl0aW9uYWwgaW5z dHJ1Y3Rpb25zIHRoYXQgcmVhZCB0aGUgYWN0dWFsIHZhbHVlIG9mIHRoZSByZWdpc3RlcgotICog YXQgdGhhdCB0aW1lIGFuZCBzZXQgb3VyIGJpdCBvZiBpbnRlcmVzdCBidXQgaXQgbWFrZXMgdGhl IFdBIGNvbXBsaWNhdGVkLgotICoKLSAqIFRoaXMgV0EgaXMgYWxzbyByZXF1aXJlZCBmb3IgR2Vu OSBzbyBleHRyYWN0aW5nIGFzIGEgZnVuY3Rpb24gYXZvaWRzCi0gKiBjb2RlIGR1cGxpY2F0aW9u LgotICovCi1zdGF0aWMgdTMyICoKLWdlbjhfZW1pdF9mbHVzaF9jb2hlcmVudGwzX3dhKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyICpiYXRjaCkKLXsKLQkvKiBOQiBubyBvbmUg ZWxzZSBpcyBhbGxvd2VkIHRvIHNjcmliYmxlIG92ZXIgc2NyYXRjaCArIDI1NiEgKi8KLQkqYmF0 Y2grKyA9IE1JX1NUT1JFX1JFR0lTVEVSX01FTV9HRU44IHwgTUlfU1JNX0xSTV9HTE9CQUxfR1RU OwotCSpiYXRjaCsrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9MM1NRQ1JFRzQpOwotCSpi YXRjaCsrID0gaW50ZWxfZ3Rfc2NyYXRjaF9vZmZzZXQoZW5naW5lLT5ndCwKLQkJCQkJICAgSU5U RUxfR1RfU0NSQVRDSF9GSUVMRF9DT0hFUkVOVEwzX1dBKTsKLQkqYmF0Y2grKyA9IDA7Ci0KLQkq YmF0Y2grKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKDEpOwotCSpiYXRjaCsrID0gaTkxNV9tbWlv X3JlZ19vZmZzZXQoR0VOOF9MM1NRQ1JFRzQpOwotCSpiYXRjaCsrID0gMHg0MDQwMDAwMCB8IEdF TjhfTFFTQ19GTFVTSF9DT0hFUkVOVF9MSU5FUzsKLQotCWJhdGNoID0gZ2VuOF9lbWl0X3BpcGVf Y29udHJvbChiYXRjaCwKLQkJCQkgICAgICAgUElQRV9DT05UUk9MX0NTX1NUQUxMIHwKLQkJCQkg ICAgICAgUElQRV9DT05UUk9MX0RDX0ZMVVNIX0VOQUJMRSwKLQkJCQkgICAgICAgMCk7Ci0KLQkq YmF0Y2grKyA9IE1JX0xPQURfUkVHSVNURVJfTUVNX0dFTjggfCBNSV9TUk1fTFJNX0dMT0JBTF9H VFQ7Ci0JKmJhdGNoKysgPSBpOTE1X21taW9fcmVnX29mZnNldChHRU44X0wzU1FDUkVHNCk7Ci0J KmJhdGNoKysgPSBpbnRlbF9ndF9zY3JhdGNoX29mZnNldChlbmdpbmUtPmd0LAotCQkJCQkgICBJ TlRFTF9HVF9TQ1JBVENIX0ZJRUxEX0NPSEVSRU5UTDNfV0EpOwotCSpiYXRjaCsrID0gMDsKLQot CXJldHVybiBiYXRjaDsKLX0KLQotLyoKLSAqIFR5cGljYWxseSB3ZSBvbmx5IGhhdmUgb25lIGlu ZGlyZWN0X2N0eCBhbmQgcGVyX2N0eCBiYXRjaCBidWZmZXIgd2hpY2ggYXJlCi0gKiBpbml0aWFs aXplZCBhdCB0aGUgYmVnaW5uaW5nIGFuZCBzaGFyZWQgYWNyb3NzIGFsbCBjb250ZXh0cyBidXQg dGhpcyBmaWVsZAotICogaGVscHMgdXMgdG8gaGF2ZSBtdWx0aXBsZSBiYXRjaGVzIGF0IGRpZmZl cmVudCBvZmZzZXRzIGFuZCBzZWxlY3QgdGhlbSBiYXNlZAotICogb24gYSBjcml0ZXJpYS4gQXQg dGhlIG1vbWVudCB0aGlzIGJhdGNoIGFsd2F5cyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRo ZSBwYWdlCi0gKiBhbmQgYXQgdGhpcyBwb2ludCB3ZSBkb24ndCBoYXZlIG11bHRpcGxlIHdhX2N0 eCBiYXRjaCBidWZmZXJzLgotICoKLSAqIFRoZSBudW1iZXIgb2YgV0EgYXBwbGllZCBhcmUgbm90 IGtub3duIGF0IHRoZSBiZWdpbm5pbmc7IHdlIHVzZSB0aGlzIGZpZWxkCi0gKiB0byByZXR1cm4g dGhlIG5vIG9mIERXT1JEUyB3cml0dGVuLgotICoKLSAqIEl0IGlzIHRvIGJlIG5vdGVkIHRoYXQg dGhpcyBiYXRjaCBkb2VzIG5vdCBjb250YWluIE1JX0JBVENIX0JVRkZFUl9FTkQKLSAqIHNvIGl0 IGFkZHMgTk9PUHMgYXMgcGFkZGluZyB0byBtYWtlIGl0IGNhY2hlbGluZSBhbGlnbmVkLgotICog TUlfQkFUQ0hfQlVGRkVSX0VORCB3aWxsIGJlIGFkZGVkIHRvIHBlcmN0eCBiYXRjaCBhbmQgYm90 aCBvZiB0aGVtIHRvZ2V0aGVyCi0gKiBtYWtlcyBhIGNvbXBsZXRlIGJhdGNoIGJ1ZmZlci4KLSAq Lwotc3RhdGljIHUzMiAqZ2VuOF9pbml0X2luZGlyZWN0Y3R4X2JiKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwgdTMyICpiYXRjaCkKLXsKLQkvKiBXYURpc2FibGVDdHhSZXN0b3JlQXJi aXRyYXRpb246YmR3LGNodiAqLwotCSpiYXRjaCsrID0gTUlfQVJCX09OX09GRiB8IE1JX0FSQl9E SVNBQkxFOwotCi0JLyogV2FGbHVzaENvaGVyZW50TDNDYWNoZUxpbmVzQXRDb250ZXh0U3dpdGNo OmJkdyAqLwotCWlmIChJU19CUk9BRFdFTEwoZW5naW5lLT5pOTE1KSkKLQkJYmF0Y2ggPSBnZW44 X2VtaXRfZmx1c2hfY29oZXJlbnRsM193YShlbmdpbmUsIGJhdGNoKTsKLQotCS8qIFdhQ2xlYXJT bG1TcGFjZUF0Q29udGV4dFN3aXRjaDpiZHcsY2h2ICovCi0JLyogQWN0dWFsIHNjcmF0Y2ggbG9j YXRpb24gaXMgYXQgMTI4IGJ5dGVzIG9mZnNldCAqLwotCWJhdGNoID0gZ2VuOF9lbWl0X3BpcGVf Y29udHJvbChiYXRjaCwKLQkJCQkgICAgICAgUElQRV9DT05UUk9MX0ZMVVNIX0wzIHwKLQkJCQkg ICAgICAgUElQRV9DT05UUk9MX1NUT1JFX0RBVEFfSU5ERVggfAotCQkJCSAgICAgICBQSVBFX0NP TlRST0xfQ1NfU1RBTEwgfAotCQkJCSAgICAgICBQSVBFX0NPTlRST0xfUVdfV1JJVEUsCi0JCQkJ ICAgICAgIExSQ19QUEhXU1BfU0NSQVRDSF9BRERSKTsKLQotCSpiYXRjaCsrID0gTUlfQVJCX09O X09GRiB8IE1JX0FSQl9FTkFCTEU7Ci0KLQkvKiBQYWQgdG8gZW5kIG9mIGNhY2hlbGluZSAqLwot CXdoaWxlICgodW5zaWduZWQgbG9uZyliYXRjaCAlIENBQ0hFTElORV9CWVRFUykKLQkJKmJhdGNo KysgPSBNSV9OT09QOwotCi0JLyoKLQkgKiBNSV9CQVRDSF9CVUZGRVJfRU5EIGlzIG5vdCByZXF1 aXJlZCBpbiBJbmRpcmVjdCBjdHggQkIgYmVjYXVzZQotCSAqIGV4ZWN1dGlvbiBkZXBlbmRzIG9u IHRoZSBsZW5ndGggc3BlY2lmaWVkIGluIHRlcm1zIG9mIGNhY2hlIGxpbmVzCi0JICogaW4gdGhl IHJlZ2lzdGVyIENUWF9SQ1NfSU5ESVJFQ1RfQ1RYCi0JICovCi0KLQlyZXR1cm4gYmF0Y2g7Ci19 Ci0KLXN0cnVjdCBscmkgewotCWk5MTVfcmVnX3QgcmVnOwotCXUzMiB2YWx1ZTsKLX07Ci0KLXN0 YXRpYyB1MzIgKmVtaXRfbHJpKHUzMiAqYmF0Y2gsIGNvbnN0IHN0cnVjdCBscmkgKmxyaSwgdW5z aWduZWQgaW50IGNvdW50KQotewotCUdFTV9CVUdfT04oIWNvdW50IHx8IGNvdW50ID4gNjMpOwot Ci0JKmJhdGNoKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTShjb3VudCk7Ci0JZG8gewotCQkqYmF0 Y2grKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KGxyaS0+cmVnKTsKLQkJKmJhdGNoKysgPSBscmkt PnZhbHVlOwotCX0gd2hpbGUgKGxyaSsrLCAtLWNvdW50KTsKLQkqYmF0Y2grKyA9IE1JX05PT1A7 Ci0KLQlyZXR1cm4gYmF0Y2g7Ci19Ci0KLXN0YXRpYyB1MzIgKmdlbjlfaW5pdF9pbmRpcmVjdGN0 eF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiAqYmF0Y2gpCi17Ci0Jc3Rh dGljIGNvbnN0IHN0cnVjdCBscmkgbHJpW10gPSB7Ci0JCS8qIFdhRGlzYWJsZUdhdGhlckF0U2V0 U2hhZGVyQ29tbW9uU2xpY2U6c2tsLGJ4dCxrYmwsZ2xrICovCi0JCXsKLQkJCUNPTU1PTl9TTElD RV9DSElDS0VOMiwKLQkJCV9fTUFTS0VEX0ZJRUxEKEdFTjlfRElTQUJMRV9HQVRIRVJfQVRfU0VU X1NIQURFUl9DT01NT05fU0xJQ0UsCi0JCQkJICAgICAgIDApLAotCQl9LAotCi0JCS8qIEJTcGVj OiAxMTM5MSAqLwotCQl7Ci0JCQlGRl9TTElDRV9DSElDS0VOLAotCQkJX19NQVNLRURfRklFTEQo RkZfU0xJQ0VfQ0hJQ0tFTl9DTF9QUk9WT0tJTkdfVkVSVEVYX0ZJWCwKLQkJCQkgICAgICAgRkZf U0xJQ0VfQ0hJQ0tFTl9DTF9QUk9WT0tJTkdfVkVSVEVYX0ZJWCksCi0JCX0sCi0KLQkJLyogQlNw ZWM6IDExMjk5ICovCi0JCXsKLQkJCV8zRF9DSElDS0VOMywKLQkJCV9fTUFTS0VEX0ZJRUxEKF8z RF9DSElDS0VOX1NGX1BST1ZPS0lOR19WRVJURVhfRklYLAotCQkJCSAgICAgICBfM0RfQ0hJQ0tF Tl9TRl9QUk9WT0tJTkdfVkVSVEVYX0ZJWCksCi0JCX0KLQl9OwotCi0JKmJhdGNoKysgPSBNSV9B UkJfT05fT0ZGIHwgTUlfQVJCX0RJU0FCTEU7Ci0KLQkvKiBXYUZsdXNoQ29oZXJlbnRMM0NhY2hl TGluZXNBdENvbnRleHRTd2l0Y2g6c2tsLGJ4dCxnbGsgKi8KLQliYXRjaCA9IGdlbjhfZW1pdF9m bHVzaF9jb2hlcmVudGwzX3dhKGVuZ2luZSwgYmF0Y2gpOwotCi0JLyogV2FDbGVhclNsbVNwYWNl QXRDb250ZXh0U3dpdGNoOnNrbCxieHQsa2JsLGdsayxjZmwgKi8KLQliYXRjaCA9IGdlbjhfZW1p dF9waXBlX2NvbnRyb2woYmF0Y2gsCi0JCQkJICAgICAgIFBJUEVfQ09OVFJPTF9GTFVTSF9MMyB8 Ci0JCQkJICAgICAgIFBJUEVfQ09OVFJPTF9TVE9SRV9EQVRBX0lOREVYIHwKLQkJCQkgICAgICAg UElQRV9DT05UUk9MX0NTX1NUQUxMIHwKLQkJCQkgICAgICAgUElQRV9DT05UUk9MX1FXX1dSSVRF LAotCQkJCSAgICAgICBMUkNfUFBIV1NQX1NDUkFUQ0hfQUREUik7Ci0KLQliYXRjaCA9IGVtaXRf bHJpKGJhdGNoLCBscmksIEFSUkFZX1NJWkUobHJpKSk7Ci0KLQkvKiBXYU1lZGlhUG9vbFN0YXRl Q21kSW5XQUJCOmJ4dCxnbGsgKi8KLQlpZiAoSEFTX1BPT0xFRF9FVShlbmdpbmUtPmk5MTUpKSB7 Ci0JCS8qCi0JCSAqIEVVIHBvb2wgY29uZmlndXJhdGlvbiBpcyBzZXR1cCBhbG9uZyB3aXRoIGdv bGRlbiBjb250ZXh0Ci0JCSAqIGR1cmluZyBjb250ZXh0IGluaXRpYWxpemF0aW9uLiBUaGlzIHZh bHVlIGRlcGVuZHMgb24KLQkJICogZGV2aWNlIHR5cGUgKDJ4NiBvciAzeDYpIGFuZCBuZWVkcyB0 byBiZSB1cGRhdGVkIGJhc2VkCi0JCSAqIG9uIHdoaWNoIHN1YnNsaWNlIGlzIGRpc2FibGVkIGVz cGVjaWFsbHkgZm9yIDJ4NgotCQkgKiBkZXZpY2VzLCBob3dldmVyIGl0IGlzIHNhZmUgdG8gbG9h ZCBkZWZhdWx0Ci0JCSAqIGNvbmZpZ3VyYXRpb24gb2YgM3g2IGRldmljZSBpbnN0ZWFkIG9mIG1h c2tpbmcgb2ZmCi0JCSAqIGNvcnJlc3BvbmRpbmcgYml0cyBiZWNhdXNlIEhXIGlnbm9yZXMgYml0 cyBvZiBhIGRpc2FibGVkCi0JCSAqIHN1YnNsaWNlIGFuZCBkcm9wcyBkb3duIHRvIGFwcHJvcHJp YXRlIGNvbmZpZy4gUGxlYXNlCi0JCSAqIHNlZSByZW5kZXJfc3RhdGVfc2V0dXAoKSBpbiBpOTE1 X2dlbV9yZW5kZXJfc3RhdGUuYyBmb3IKLQkJICogcG9zc2libGUgY29uZmlndXJhdGlvbnMsIHRv IGF2b2lkIGR1cGxpY2F0aW9uIHRoZXkgYXJlCi0JCSAqIG5vdCBzaG93biBoZXJlIGFnYWluLgot CQkgKi8KLQkJKmJhdGNoKysgPSBHRU45X01FRElBX1BPT0xfU1RBVEU7Ci0JCSpiYXRjaCsrID0g R0VOOV9NRURJQV9QT09MX0VOQUJMRTsKLQkJKmJhdGNoKysgPSAweDAwNzc3MDAwOwotCQkqYmF0 Y2grKyA9IDA7Ci0JCSpiYXRjaCsrID0gMDsKLQkJKmJhdGNoKysgPSAwOwotCX0KLQotCSpiYXRj aCsrID0gTUlfQVJCX09OX09GRiB8IE1JX0FSQl9FTkFCTEU7Ci0KLQkvKiBQYWQgdG8gZW5kIG9m IGNhY2hlbGluZSAqLwotCXdoaWxlICgodW5zaWduZWQgbG9uZyliYXRjaCAlIENBQ0hFTElORV9C WVRFUykKLQkJKmJhdGNoKysgPSBNSV9OT09QOwotCi0JcmV0dXJuIGJhdGNoOwotfQotCi1zdGF0 aWMgdTMyICoKLWdlbjEwX2luaXRfaW5kaXJlY3RjdHhfYmIoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lLCB1MzIgKmJhdGNoKQotewotCWludCBpOwotCi0JLyoKLQkgKiBXYVBpcGVDb250 cm9sQmVmb3JlM0RTdGF0ZVNhbXBsZVBhdHRlcm46IGNubAotCSAqCi0JICogRW5zdXJlIHRoZSBl bmdpbmUgaXMgaWRsZSBwcmlvciB0byBwcm9ncmFtbWluZyBhCi0JICogM0RTVEFURV9TQU1QTEVf UEFUVEVSTiBkdXJpbmcgYSBjb250ZXh0IHJlc3RvcmUuCi0JICovCi0JYmF0Y2ggPSBnZW44X2Vt aXRfcGlwZV9jb250cm9sKGJhdGNoLAotCQkJCSAgICAgICBQSVBFX0NPTlRST0xfQ1NfU1RBTEws Ci0JCQkJICAgICAgIDApOwotCS8qCi0JICogV2FQaXBlQ29udHJvbEJlZm9yZTNEU3RhdGVTYW1w bGVQYXR0ZXJuIHNheXMgd2UgbmVlZCA0IGR3b3JkcyBmb3IKLQkgKiB0aGUgUElQRV9DT05UUk9M IGZvbGxvd2VkIGJ5IDEyIGR3b3JkcyBvZiAweDAsIHNvIDE2IGR3b3JkcyBpbgotCSAqIHRvdGFs LiBIb3dldmVyLCBhIFBJUEVfQ09OVFJPTCBpcyA2IGR3b3JkcyBsb25nLCBub3QgNCwgd2hpY2gg aXMKLQkgKiBjb25mdXNpbmcuIFNpbmNlIGdlbjhfZW1pdF9waXBlX2NvbnRyb2woKSBhbHJlYWR5 IGFkdmFuY2VzIHRoZQotCSAqIGJhdGNoIGJ5IDYgZHdvcmRzLCB3ZSBhZHZhbmNlIHRoZSBvdGhl ciAxMCBoZXJlLCBjb21wbGV0aW5nIGEKLQkgKiBjYWNoZWxpbmUuIEl0J3Mgbm90IGNsZWFyIGlm IHRoZSB3b3JrYXJvdW5kIHJlcXVpcmVzIHRoaXMgcGFkZGluZwotCSAqIGJlZm9yZSBvdGhlciBj b21tYW5kcywgb3IgaWYgaXQncyBqdXN0IHRoZSByZWd1bGFyIHBhZGRpbmcgd2Ugd291bGQKLQkg KiBhbHJlYWR5IGhhdmUgZm9yIHRoZSB3b3JrYXJvdW5kIGJiLCBzbyBsZWF2ZSBpdCBoZXJlIGZv ciBub3cuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCi0JCSpiYXRjaCsrID0gTUlf Tk9PUDsKLQotCS8qIFBhZCB0byBlbmQgb2YgY2FjaGVsaW5lICovCi0Jd2hpbGUgKCh1bnNpZ25l ZCBsb25nKWJhdGNoICUgQ0FDSEVMSU5FX0JZVEVTKQotCQkqYmF0Y2grKyA9IE1JX05PT1A7Ci0K LQlyZXR1cm4gYmF0Y2g7Ci19Ci0KLSNkZWZpbmUgQ1RYX1dBX0JCX09CSl9TSVpFIChQQUdFX1NJ WkUpCi0KLXN0YXRpYyBpbnQgbHJjX3NldHVwX3dhX2N0eChzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKLQlzdHJ1Y3Qg aTkxNV92bWEgKnZtYTsKLQlpbnQgZXJyOwotCi0Jb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0 ZV9zaG1lbShlbmdpbmUtPmk5MTUsIENUWF9XQV9CQl9PQkpfU0laRSk7Ci0JaWYgKElTX0VSUihv YmopKQotCQlyZXR1cm4gUFRSX0VSUihvYmopOwotCi0Jdm1hID0gaTkxNV92bWFfaW5zdGFuY2Uo b2JqLCAmZW5naW5lLT5ndC0+Z2d0dC0+dm0sIE5VTEwpOwotCWlmIChJU19FUlIodm1hKSkgewot CQllcnIgPSBQVFJfRVJSKHZtYSk7Ci0JCWdvdG8gZXJyOwotCX0KLQotCWVyciA9IGk5MTVfdm1h X3Bpbih2bWEsIDAsIDAsIFBJTl9HTE9CQUwgfCBQSU5fSElHSCk7Ci0JaWYgKGVycikKLQkJZ290 byBlcnI7Ci0KLQllbmdpbmUtPndhX2N0eC52bWEgPSB2bWE7Ci0JcmV0dXJuIDA7Ci0KLWVycjoK LQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZv aWQgbHJjX2Rlc3Ryb3lfd2FfY3R4KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsK LQlpOTE1X3ZtYV91bnBpbl9hbmRfcmVsZWFzZSgmZW5naW5lLT53YV9jdHgudm1hLCAwKTsKLX0K LQotdHlwZWRlZiB1MzIgKigqd2FfYmJfZnVuY190KShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUsIHUzMiAqYmF0Y2gpOwotCi1zdGF0aWMgaW50IGludGVsX2luaXRfd29ya2Fyb3VuZF9i YihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCi17Ci0Jc3RydWN0IGk5MTVfY3R4X3dv cmthcm91bmRzICp3YV9jdHggPSAmZW5naW5lLT53YV9jdHg7Ci0Jc3RydWN0IGk5MTVfd2FfY3R4 X2JiICp3YV9iYlsyXSA9IHsgJndhX2N0eC0+aW5kaXJlY3RfY3R4LAotCQkJCQkgICAgJndhX2N0 eC0+cGVyX2N0eCB9OwotCXdhX2JiX2Z1bmNfdCB3YV9iYl9mblsyXTsKLQlzdHJ1Y3QgcGFnZSAq cGFnZTsKLQl2b2lkICpiYXRjaCwgKmJhdGNoX3B0cjsKLQl1bnNpZ25lZCBpbnQgaTsKLQlpbnQg cmV0OwotCi0JaWYgKGVuZ2luZS0+Y2xhc3MgIT0gUkVOREVSX0NMQVNTKQotCQlyZXR1cm4gMDsK LQotCXN3aXRjaCAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkpIHsKLQljYXNlIDEyOgotCWNhc2Ug MTE6Ci0JCXJldHVybiAwOwotCWNhc2UgMTA6Ci0JCXdhX2JiX2ZuWzBdID0gZ2VuMTBfaW5pdF9p bmRpcmVjdGN0eF9iYjsKLQkJd2FfYmJfZm5bMV0gPSBOVUxMOwotCQlicmVhazsKLQljYXNlIDk6 Ci0JCXdhX2JiX2ZuWzBdID0gZ2VuOV9pbml0X2luZGlyZWN0Y3R4X2JiOwotCQl3YV9iYl9mblsx XSA9IE5VTEw7Ci0JCWJyZWFrOwotCWNhc2UgODoKLQkJd2FfYmJfZm5bMF0gPSBnZW44X2luaXRf aW5kaXJlY3RjdHhfYmI7Ci0JCXdhX2JiX2ZuWzFdID0gTlVMTDsKLQkJYnJlYWs7Ci0JZGVmYXVs dDoKLQkJTUlTU0lOR19DQVNFKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpKTsKLQkJcmV0dXJuIDA7 Ci0JfQotCi0JcmV0ID0gbHJjX3NldHVwX3dhX2N0eChlbmdpbmUpOwotCWlmIChyZXQpIHsKLQkJ RFJNX0RFQlVHX0RSSVZFUigiRmFpbGVkIHRvIHNldHVwIGNvbnRleHQgV0EgcGFnZTogJWRcbiIs IHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcGFnZSA9IGk5MTVfZ2VtX29iamVjdF9nZXRf ZGlydHlfcGFnZSh3YV9jdHgtPnZtYS0+b2JqLCAwKTsKLQliYXRjaCA9IGJhdGNoX3B0ciA9IGtt YXBfYXRvbWljKHBhZ2UpOwotCi0JLyoKLQkgKiBFbWl0IHRoZSB0d28gd29ya2Fyb3VuZCBiYXRj aCBidWZmZXJzLCByZWNvcmRpbmcgdGhlIG9mZnNldCBmcm9tIHRoZQotCSAqIHN0YXJ0IG9mIHRo ZSB3b3JrYXJvdW5kIGJhdGNoIGJ1ZmZlciBvYmplY3QgZm9yIGVhY2ggYW5kIHRoZWlyCi0JICog cmVzcGVjdGl2ZSBzaXplcy4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3YV9i Yl9mbik7IGkrKykgewotCQl3YV9iYltpXS0+b2Zmc2V0ID0gYmF0Y2hfcHRyIC0gYmF0Y2g7Ci0J CWlmIChHRU1fREVCVUdfV0FSTl9PTighSVNfQUxJR05FRCh3YV9iYltpXS0+b2Zmc2V0LAotCQkJ CQkJICBDQUNIRUxJTkVfQllURVMpKSkgewotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWJyZWFrOwot CQl9Ci0JCWlmICh3YV9iYl9mbltpXSkKLQkJCWJhdGNoX3B0ciA9IHdhX2JiX2ZuW2ldKGVuZ2lu ZSwgYmF0Y2hfcHRyKTsKLQkJd2FfYmJbaV0tPnNpemUgPSBiYXRjaF9wdHIgLSAoYmF0Y2ggKyB3 YV9iYltpXS0+b2Zmc2V0KTsKLQl9Ci0KLQlCVUdfT04oYmF0Y2hfcHRyIC0gYmF0Y2ggPiBDVFhf V0FfQkJfT0JKX1NJWkUpOwotCi0Ja3VubWFwX2F0b21pYyhiYXRjaCk7Ci0JaWYgKHJldCkKLQkJ bHJjX2Rlc3Ryb3lfd2FfY3R4KGVuZ2luZSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMg dm9pZCBlbmFibGVfZXJyb3JfaW50ZXJydXB0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSkKIHsKIAl1MzIgc3RhdHVzOwpAQCAtMzUyNCwyNSArMjUwOSw2IEBAIHN0YXRpYyB2b2lkIHJl c2V0X2NzYl9wb2ludGVycyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJCQkgICAg ICAgJmV4ZWNsaXN0cy0+Y3NiX3N0YXR1c1tyZXNldF92YWx1ZV0pOwogfQogCi1zdGF0aWMgdm9p ZCBfX3Jlc2V0X3N0b3BfcmluZyh1MzIgKnJlZ3MsIGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKLXsKLQlpbnQgeDsKLQotCXggPSBscmNfcmluZ19taV9tb2RlKGVuZ2luZSk7 Ci0JaWYgKHggIT0gLTEpIHsKLQkJcmVnc1t4ICsgMV0gJj0gflNUT1BfUklORzsKLQkJcmVnc1t4 ICsgMV0gfD0gU1RPUF9SSU5HIDw8IDE2OwotCX0KLX0KLQotc3RhdGljIHZvaWQgX19leGVjbGlz dHNfcmVzZXRfcmVnX3N0YXRlKGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKLQkJCQkJ Y29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQotewotCXUzMiAqcmVncyA9IGNl LT5scmNfcmVnX3N0YXRlOwotCi0JX19yZXNldF9zdG9wX3JpbmcocmVncywgZW5naW5lKTsKLX0K LQogc3RhdGljIHZvaWQgX19leGVjbGlzdHNfcmVzZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lLCBib29sIHN0YWxsZWQpCiB7CiAJc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMg KiBjb25zdCBleGVjbGlzdHMgPSAmZW5naW5lLT5leGVjbGlzdHM7CkBAIC0zNjMwLDggKzI1OTYs OCBAQCBzdGF0aWMgdm9pZCBfX2V4ZWNsaXN0c19yZXNldChzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsIGJvb2wgc3RhbGxlZCkKIAlFTkdJTkVfVFJBQ0UoZW5naW5lLCAicmVwbGF5IHto ZWFkOiUwNHgsIHRhaWw6JTA0eH1cbiIsCiAJCSAgICAgY2UtPnJpbmctPmhlYWQsIGNlLT5yaW5n LT50YWlsKTsKIAlpbnRlbF9yaW5nX3VwZGF0ZV9zcGFjZShjZS0+cmluZyk7Ci0JX19leGVjbGlz dHNfcmVzZXRfcmVnX3N0YXRlKGNlLCBlbmdpbmUpOwotCV9fZXhlY2xpc3RzX3VwZGF0ZV9yZWdf c3RhdGUoY2UsIGVuZ2luZSk7CisJaW50ZWxfbHJjX3Jlc2V0X3JlZ19zdGF0ZShjZSwgZW5naW5l KTsKKwlpbnRlbF9scmNfdXBkYXRlX3JlZ19zdGF0ZShjZSwgZW5naW5lKTsKIAljZS0+bHJjX2Rl c2MgfD0gQ1RYX0RFU0NfRk9SQ0VfUkVTVE9SRTsgLyogcGFyYW5vaWQ6IEdQVSB3YXMgcmVzZXQh ICovCiAKIHVud2luZDoKQEAgLTM3NjAsNjcgKzI3MjYsNiBAQCBzdGF0aWMgdm9pZCBleGVjbGlz dHNfcmVzZXRfZmluaXNoKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAkJICAgICBh dG9taWNfcmVhZCgmZXhlY2xpc3RzLT50YXNrbGV0LmNvdW50KSk7CiB9CiAKLXN0YXRpYyBpbnQg Z2VuOF9lbWl0X2JiX3N0YXJ0X25vYXJiKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAotCQkJCSAg ICB1NjQgb2Zmc2V0LCB1MzIgbGVuLAotCQkJCSAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxhZ3Mp Ci17Ci0JdTMyICpjczsKLQotCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgNCk7Ci0JaWYgKElT X0VSUihjcykpCi0JCXJldHVybiBQVFJfRVJSKGNzKTsKLQotCS8qCi0JICogV2FEaXNhYmxlQ3R4 UmVzdG9yZUFyYml0cmF0aW9uOmJkdyxjaHYKLQkgKgotCSAqIFdlIGRvbid0IG5lZWQgdG8gcGVy Zm9ybSBNSV9BUkJfRU5BQkxFIGFzIG9mdGVuIGFzIHdlIGRvIChpbgotCSAqIHBhcnRpY3VsYXIg YWxsIHRoZSBnZW4gdGhhdCBkbyBub3QgbmVlZCB0aGUgdy9hIGF0IGFsbCEpLCBpZiB3ZQotCSAq IHRvb2sgY2FyZSB0byBtYWtlIHN1cmUgdGhhdCBvbiBldmVyeSBzd2l0Y2ggaW50byB0aGlzIGNv bnRleHQKLQkgKiAoYm90aCBvcmRpbmFyeSBhbmQgZm9yIHByZWVtcHRpb24pIHRoYXQgYXJiaXRy YXJ0aW9uIHdhcyBlbmFibGVkCi0JICogd2Ugd291bGQgYmUgZmluZS4gIEhvd2V2ZXIsIGZvciBn ZW44IHRoZXJlIGlzIGFub3RoZXIgdy9hIHRoYXQKLQkgKiByZXF1aXJlcyB1cyB0byBub3QgcHJl ZW1wdCBpbnNpZGUgR1BHUFUgZXhlY3V0aW9uLCBzbyB3ZSBrZWVwCi0JICogYXJiaXRyYXRpb24g ZGlzYWJsZWQgZm9yIGdlbjggYmF0Y2hlcy4gQXJiaXRyYXRpb24gd2lsbCBiZQotCSAqIHJlLWVu YWJsZWQgYmVmb3JlIHdlIGNsb3NlIHRoZSByZXF1ZXN0Ci0JICogKGVuZ2luZS0+ZW1pdF9maW5p X2JyZWFkY3J1bWIpLgotCSAqLwotCSpjcysrID0gTUlfQVJCX09OX09GRiB8IE1JX0FSQl9ESVNB QkxFOwotCi0JLyogRklYTUUoQkRXKyk6IEFkZHJlc3Mgc3BhY2UgYW5kIHNlY3VyaXR5IHNlbGVj dG9ycy4gKi8KLQkqY3MrKyA9IE1JX0JBVENIX0JVRkZFUl9TVEFSVF9HRU44IHwKLQkJKGZsYWdz ICYgSTkxNV9ESVNQQVRDSF9TRUNVUkUgPyAwIDogQklUKDgpKTsKLQkqY3MrKyA9IGxvd2VyXzMy X2JpdHMob2Zmc2V0KTsKLQkqY3MrKyA9IHVwcGVyXzMyX2JpdHMob2Zmc2V0KTsKLQotCWludGVs X3JpbmdfYWR2YW5jZShycSwgY3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZ2Vu OF9lbWl0X2JiX3N0YXJ0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAotCQkJICAgICAgdTY0IG9m ZnNldCwgdTMyIGxlbiwKLQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbGFncykKLXsKLQl1 MzIgKmNzOwotCi0JY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA2KTsKLQlpZiAoSVNfRVJSKGNz KSkKLQkJcmV0dXJuIFBUUl9FUlIoY3MpOwotCi0JKmNzKysgPSBNSV9BUkJfT05fT0ZGIHwgTUlf QVJCX0VOQUJMRTsKLQotCSpjcysrID0gTUlfQkFUQ0hfQlVGRkVSX1NUQVJUX0dFTjggfAotCQko ZmxhZ3MgJiBJOTE1X0RJU1BBVENIX1NFQ1VSRSA/IDAgOiBCSVQoOCkpOwotCSpjcysrID0gbG93 ZXJfMzJfYml0cyhvZmZzZXQpOwotCSpjcysrID0gdXBwZXJfMzJfYml0cyhvZmZzZXQpOwotCi0J KmNzKysgPSBNSV9BUkJfT05fT0ZGIHwgTUlfQVJCX0RJU0FCTEU7Ci0JKmNzKysgPSBNSV9OT09Q OwotCi0JaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBjcyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3Rh dGljIHZvaWQgZ2VuOF9sb2dpY2FsX3JpbmdfZW5hYmxlX2lycShzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCiB7CiAJRU5HSU5FX1dSSVRFKGVuZ2luZSwgUklOR19JTVIsCkBAIC0zODMz LDI0OSArMjczOCw2IEBAIHN0YXRpYyB2b2lkIGdlbjhfbG9naWNhbF9yaW5nX2Rpc2FibGVfaXJx KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAlFTkdJTkVfV1JJVEUoZW5naW5lLCBS SU5HX0lNUiwgfmVuZ2luZS0+aXJxX2tlZXBfbWFzayk7CiB9CiAKLXN0YXRpYyBpbnQgZ2VuOF9l bWl0X2ZsdXNoKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QsIHUzMiBtb2RlKQotewotCXUz MiBjbWQsICpjczsKLQotCWNzID0gaW50ZWxfcmluZ19iZWdpbihyZXF1ZXN0LCA0KTsKLQlpZiAo SVNfRVJSKGNzKSkKLQkJcmV0dXJuIFBUUl9FUlIoY3MpOwotCi0JY21kID0gTUlfRkxVU0hfRFcg KyAxOwotCi0JLyogV2UgYWx3YXlzIHJlcXVpcmUgYSBjb21tYW5kIGJhcnJpZXIgc28gdGhhdCBz dWJzZXF1ZW50Ci0JICogY29tbWFuZHMsIHN1Y2ggYXMgYnJlYWRjcnVtYiBpbnRlcnJ1cHRzLCBh cmUgc3RyaWN0bHkgb3JkZXJlZAotCSAqIHdydCB0aGUgY29udGVudHMgb2YgdGhlIHdyaXRlIGNh Y2hlIGJlaW5nIGZsdXNoZWQgdG8gbWVtb3J5Ci0JICogKGFuZCB0aHVzIGJlaW5nIGNvaGVyZW50 IGZyb20gdGhlIENQVSkuCi0JICovCi0JY21kIHw9IE1JX0ZMVVNIX0RXX1NUT1JFX0lOREVYIHwg TUlfRkxVU0hfRFdfT1BfU1RPUkVEVzsKLQotCWlmIChtb2RlICYgRU1JVF9JTlZBTElEQVRFKSB7 Ci0JCWNtZCB8PSBNSV9JTlZBTElEQVRFX1RMQjsKLQkJaWYgKHJlcXVlc3QtPmVuZ2luZS0+Y2xh c3MgPT0gVklERU9fREVDT0RFX0NMQVNTKQotCQkJY21kIHw9IE1JX0lOVkFMSURBVEVfQlNEOwot CX0KLQotCSpjcysrID0gY21kOwotCSpjcysrID0gTFJDX1BQSFdTUF9TQ1JBVENIX0FERFI7Ci0J KmNzKysgPSAwOyAvKiB1cHBlciBhZGRyICovCi0JKmNzKysgPSAwOyAvKiB2YWx1ZSAqLwotCWlu dGVsX3JpbmdfYWR2YW5jZShyZXF1ZXN0LCBjcyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGlj IGludCBnZW44X2VtaXRfZmx1c2hfcmVuZGVyKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3Qs Ci0JCQkJICB1MzIgbW9kZSkKLXsKLQlib29sIHZmX2ZsdXNoX3dhID0gZmFsc2UsIGRjX2ZsdXNo X3dhID0gZmFsc2U7Ci0JdTMyICpjcywgZmxhZ3MgPSAwOwotCWludCBsZW47Ci0KLQlmbGFncyB8 PSBQSVBFX0NPTlRST0xfQ1NfU1RBTEw7Ci0KLQlpZiAobW9kZSAmIEVNSVRfRkxVU0gpIHsKLQkJ ZmxhZ3MgfD0gUElQRV9DT05UUk9MX1JFTkRFUl9UQVJHRVRfQ0FDSEVfRkxVU0g7Ci0JCWZsYWdz IHw9IFBJUEVfQ09OVFJPTF9ERVBUSF9DQUNIRV9GTFVTSDsKLQkJZmxhZ3MgfD0gUElQRV9DT05U Uk9MX0RDX0ZMVVNIX0VOQUJMRTsKLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0ZMVVNIX0VOQUJM RTsKLQl9Ci0KLQlpZiAobW9kZSAmIEVNSVRfSU5WQUxJREFURSkgewotCQlmbGFncyB8PSBQSVBF X0NPTlRST0xfVExCX0lOVkFMSURBVEU7Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9JTlNUUlVD VElPTl9DQUNIRV9JTlZBTElEQVRFOwotCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfVEVYVFVSRV9D QUNIRV9JTlZBTElEQVRFOwotCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfVkZfQ0FDSEVfSU5WQUxJ REFURTsKLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NPTlNUX0NBQ0hFX0lOVkFMSURBVEU7Ci0J CWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9TVEFURV9DQUNIRV9JTlZBTElEQVRFOwotCQlmbGFncyB8 PSBQSVBFX0NPTlRST0xfUVdfV1JJVEU7Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9TVE9SRV9E QVRBX0lOREVYOwotCi0JCS8qCi0JCSAqIE9uIEdFTjk6IGJlZm9yZSBWRl9DQUNIRV9JTlZBTElE QVRFIHdlIG5lZWQgdG8gZW1pdCBhIE5VTEwKLQkJICogcGlwZSBjb250cm9sLgotCQkgKi8KLQkJ aWYgKElTX0dFTihyZXF1ZXN0LT5pOTE1LCA5KSkKLQkJCXZmX2ZsdXNoX3dhID0gdHJ1ZTsKLQot CQkvKiBXYUZvckdBTUhhbmc6a2JsICovCi0JCWlmIChJU19LQkxfUkVWSUQocmVxdWVzdC0+aTkx NSwgMCwgS0JMX1JFVklEX0IwKSkKLQkJCWRjX2ZsdXNoX3dhID0gdHJ1ZTsKLQl9Ci0KLQlsZW4g PSA2OwotCi0JaWYgKHZmX2ZsdXNoX3dhKQotCQlsZW4gKz0gNjsKLQotCWlmIChkY19mbHVzaF93 YSkKLQkJbGVuICs9IDEyOwotCi0JY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJlcXVlc3QsIGxlbik7 Ci0JaWYgKElTX0VSUihjcykpCi0JCXJldHVybiBQVFJfRVJSKGNzKTsKLQotCWlmICh2Zl9mbHVz aF93YSkKLQkJY3MgPSBnZW44X2VtaXRfcGlwZV9jb250cm9sKGNzLCAwLCAwKTsKLQotCWlmIChk Y19mbHVzaF93YSkKLQkJY3MgPSBnZW44X2VtaXRfcGlwZV9jb250cm9sKGNzLCBQSVBFX0NPTlRS T0xfRENfRkxVU0hfRU5BQkxFLAotCQkJCQkgICAgMCk7Ci0KLQljcyA9IGdlbjhfZW1pdF9waXBl X2NvbnRyb2woY3MsIGZsYWdzLCBMUkNfUFBIV1NQX1NDUkFUQ0hfQUREUik7Ci0KLQlpZiAoZGNf Zmx1c2hfd2EpCi0JCWNzID0gZ2VuOF9lbWl0X3BpcGVfY29udHJvbChjcywgUElQRV9DT05UUk9M X0NTX1NUQUxMLCAwKTsKLQotCWludGVsX3JpbmdfYWR2YW5jZShyZXF1ZXN0LCBjcyk7Ci0KLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBnZW4xMV9lbWl0X2ZsdXNoX3JlbmRlcihzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpyZXF1ZXN0LAotCQkJCSAgIHUzMiBtb2RlKQotewotCWlmIChtb2RlICYg RU1JVF9GTFVTSCkgewotCQl1MzIgKmNzOwotCQl1MzIgZmxhZ3MgPSAwOwotCi0JCWZsYWdzIHw9 IFBJUEVfQ09OVFJPTF9DU19TVEFMTDsKLQotCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfVElMRV9D QUNIRV9GTFVTSDsKLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1JFTkRFUl9UQVJHRVRfQ0FDSEVf RkxVU0g7Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9ERVBUSF9DQUNIRV9GTFVTSDsKLQkJZmxh Z3MgfD0gUElQRV9DT05UUk9MX0RDX0ZMVVNIX0VOQUJMRTsKLQkJZmxhZ3MgfD0gUElQRV9DT05U Uk9MX0ZMVVNIX0VOQUJMRTsKLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1FXX1dSSVRFOwotCQlm bGFncyB8PSBQSVBFX0NPTlRST0xfU1RPUkVfREFUQV9JTkRFWDsKLQotCQljcyA9IGludGVsX3Jp bmdfYmVnaW4ocmVxdWVzdCwgNik7Ci0JCWlmIChJU19FUlIoY3MpKQotCQkJcmV0dXJuIFBUUl9F UlIoY3MpOwotCi0JCWNzID0gZ2VuOF9lbWl0X3BpcGVfY29udHJvbChjcywgZmxhZ3MsIExSQ19Q UEhXU1BfU0NSQVRDSF9BRERSKTsKLQkJaW50ZWxfcmluZ19hZHZhbmNlKHJlcXVlc3QsIGNzKTsK LQl9Ci0KLQlpZiAobW9kZSAmIEVNSVRfSU5WQUxJREFURSkgewotCQl1MzIgKmNzOwotCQl1MzIg ZmxhZ3MgPSAwOwotCi0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9DU19TVEFMTDsKLQotCQlmbGFn cyB8PSBQSVBFX0NPTlRST0xfQ09NTUFORF9DQUNIRV9JTlZBTElEQVRFOwotCQlmbGFncyB8PSBQ SVBFX0NPTlRST0xfVExCX0lOVkFMSURBVEU7Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9JTlNU UlVDVElPTl9DQUNIRV9JTlZBTElEQVRFOwotCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfVEVYVFVS RV9DQUNIRV9JTlZBTElEQVRFOwotCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfVkZfQ0FDSEVfSU5W QUxJREFURTsKLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NPTlNUX0NBQ0hFX0lOVkFMSURBVEU7 Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9TVEFURV9DQUNIRV9JTlZBTElEQVRFOwotCQlmbGFn cyB8PSBQSVBFX0NPTlRST0xfUVdfV1JJVEU7Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9TVE9S RV9EQVRBX0lOREVYOwotCi0JCWNzID0gaW50ZWxfcmluZ19iZWdpbihyZXF1ZXN0LCA2KTsKLQkJ aWYgKElTX0VSUihjcykpCi0JCQlyZXR1cm4gUFRSX0VSUihjcyk7Ci0KLQkJY3MgPSBnZW44X2Vt aXRfcGlwZV9jb250cm9sKGNzLCBmbGFncywgTFJDX1BQSFdTUF9TQ1JBVENIX0FERFIpOwotCQlp bnRlbF9yaW5nX2FkdmFuY2UocmVxdWVzdCwgY3MpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1z dGF0aWMgdTMyIHByZXBhcnNlcl9kaXNhYmxlKGJvb2wgc3RhdGUpCi17Ci0JcmV0dXJuIE1JX0FS Ql9DSEVDSyB8IDEgPDwgOCB8IHN0YXRlOwotfQotCi1zdGF0aWMgaW50IGdlbjEyX2VtaXRfZmx1 c2hfcmVuZGVyKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QsCi0JCQkJICAgdTMyIG1vZGUp Ci17Ci0JaWYgKG1vZGUgJiBFTUlUX0ZMVVNIKSB7Ci0JCXUzMiBmbGFncyA9IDA7Ci0JCXUzMiAq Y3M7Ci0KLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1RJTEVfQ0FDSEVfRkxVU0g7Ci0JCWZsYWdz IHw9IFBJUEVfQ09OVFJPTF9SRU5ERVJfVEFSR0VUX0NBQ0hFX0ZMVVNIOwotCQlmbGFncyB8PSBQ SVBFX0NPTlRST0xfREVQVEhfQ0FDSEVfRkxVU0g7Ci0JCS8qIFdhXzE0MDk2MDA5MDc6dGdsICov Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9ERVBUSF9TVEFMTDsKLQkJZmxhZ3MgfD0gUElQRV9D T05UUk9MX0RDX0ZMVVNIX0VOQUJMRTsKLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0ZMVVNIX0VO QUJMRTsKLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0hEQ19QSVBFTElORV9GTFVTSDsKLQotCQlm bGFncyB8PSBQSVBFX0NPTlRST0xfU1RPUkVfREFUQV9JTkRFWDsKLQkJZmxhZ3MgfD0gUElQRV9D T05UUk9MX1FXX1dSSVRFOwotCi0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9DU19TVEFMTDsKLQot CQljcyA9IGludGVsX3JpbmdfYmVnaW4ocmVxdWVzdCwgNik7Ci0JCWlmIChJU19FUlIoY3MpKQot CQkJcmV0dXJuIFBUUl9FUlIoY3MpOwotCi0JCWNzID0gZ2VuOF9lbWl0X3BpcGVfY29udHJvbChj cywgZmxhZ3MsIExSQ19QUEhXU1BfU0NSQVRDSF9BRERSKTsKLQkJaW50ZWxfcmluZ19hZHZhbmNl KHJlcXVlc3QsIGNzKTsKLQl9Ci0KLQlpZiAobW9kZSAmIEVNSVRfSU5WQUxJREFURSkgewotCQl1 MzIgZmxhZ3MgPSAwOwotCQl1MzIgKmNzOwotCi0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9DT01N QU5EX0NBQ0hFX0lOVkFMSURBVEU7Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9UTEJfSU5WQUxJ REFURTsKLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0lOU1RSVUNUSU9OX0NBQ0hFX0lOVkFMSURB VEU7Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9URVhUVVJFX0NBQ0hFX0lOVkFMSURBVEU7Ci0J CWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9WRl9DQUNIRV9JTlZBTElEQVRFOwotCQlmbGFncyB8PSBQ SVBFX0NPTlRST0xfQ09OU1RfQ0FDSEVfSU5WQUxJREFURTsKLQkJZmxhZ3MgfD0gUElQRV9DT05U Uk9MX1NUQVRFX0NBQ0hFX0lOVkFMSURBVEU7Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9MM19S T19DQUNIRV9JTlZBTElEQVRFOwotCi0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9TVE9SRV9EQVRB X0lOREVYOwotCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfUVdfV1JJVEU7Ci0KLQkJZmxhZ3MgfD0g UElQRV9DT05UUk9MX0NTX1NUQUxMOwotCi0JCWNzID0gaW50ZWxfcmluZ19iZWdpbihyZXF1ZXN0 LCA4KTsKLQkJaWYgKElTX0VSUihjcykpCi0JCQlyZXR1cm4gUFRSX0VSUihjcyk7Ci0KLQkJLyoK LQkJICogUHJldmVudCB0aGUgcHJlLXBhcnNlciBmcm9tIHNraXBwaW5nIHBhc3QgdGhlIFRMQgot CQkgKiBpbnZhbGlkYXRlIGFuZCBsb2FkaW5nIGEgc3RhbGUgcGFnZSBmb3IgdGhlIGJhdGNoCi0J CSAqIGJ1ZmZlciAvIHJlcXVlc3QgcGF5bG9hZC4KLQkJICovCi0JCSpjcysrID0gcHJlcGFyc2Vy X2Rpc2FibGUodHJ1ZSk7Ci0KLQkJY3MgPSBnZW44X2VtaXRfcGlwZV9jb250cm9sKGNzLCBmbGFn cywgTFJDX1BQSFdTUF9TQ1JBVENIX0FERFIpOwotCi0JCSpjcysrID0gcHJlcGFyc2VyX2Rpc2Fi bGUoZmFsc2UpOwotCQlpbnRlbF9yaW5nX2FkdmFuY2UocmVxdWVzdCwgY3MpOwotCi0JCS8qCi0J CSAqIFdhXzE2MDQ1NDQ4ODk6dGdsCi0JCSAqLwotCQlpZiAoSVNfVEdMX1JFVklEKHJlcXVlc3Qt Pmk5MTUsIFRHTF9SRVZJRF9BMCwgVEdMX1JFVklEX0EwKSkgewotCQkJZmxhZ3MgPSAwOwotCQkJ ZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NTX1NUQUxMOwotCQkJZmxhZ3MgfD0gUElQRV9DT05UUk9M X0hEQ19QSVBFTElORV9GTFVTSDsKLQotCQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1NUT1JFX0RB VEFfSU5ERVg7Ci0JCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfUVdfV1JJVEU7Ci0KLQkJCWNzID0g aW50ZWxfcmluZ19iZWdpbihyZXF1ZXN0LCA2KTsKLQkJCWlmIChJU19FUlIoY3MpKQotCQkJCXJl dHVybiBQVFJfRVJSKGNzKTsKLQotCQkJY3MgPSBnZW44X2VtaXRfcGlwZV9jb250cm9sKGNzLCBm bGFncywKLQkJCQkJCSAgICBMUkNfUFBIV1NQX1NDUkFUQ0hfQUREUik7Ci0JCQlpbnRlbF9yaW5n X2FkdmFuY2UocmVxdWVzdCwgY3MpOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAg KiBSZXNlcnZlIHNwYWNlIGZvciAyIE5PT1BzIGF0IHRoZSBlbmQgb2YgZWFjaCByZXF1ZXN0IHRv IGJlCiAgKiB1c2VkIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm90IGJlaW5nIGFsbG93ZWQgdG8gZG8g bGl0ZQpAQCAtNDI5MSwxMSArMjk1MywxMCBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfcmVsZWFz ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJZXhlY2xpc3RzX3NodXRkb3duKGVu Z2luZSk7CiAKIAlpbnRlbF9lbmdpbmVfY2xlYW51cF9jb21tb24oZW5naW5lKTsKLQlscmNfZGVz dHJveV93YV9jdHgoZW5naW5lKTsKKwlpbnRlbF9lbmdpbmVfZmluaV93b3JrYXJvdW5kX2JiKGVu Z2luZSk7CiB9CiAKLXN0YXRpYyB2b2lkCi1sb2dpY2FsX3JpbmdfZGVmYXVsdF92ZnVuY3Moc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQorc3RhdGljIHZvaWQgZXhlY2xpc3RzX2RlZmF1 bHRfdmZ1bmNzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKIAkvKiBEZWZhdWx0 IHZmdW5jcyB3aGljaCBjYW4gYmUgb3ZlcnJpZGVuIGJ5IGVhY2ggZW5naW5lLiAqLwogCkBAIC00 MzA0LDcgKzI5NjUsNyBAQCBsb2dpY2FsX3JpbmdfZGVmYXVsdF92ZnVuY3Moc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQogCWVuZ2luZS0+Y29wcyA9ICZleGVjbGlzdHNfY29udGV4dF9v cHM7CiAJZW5naW5lLT5yZXF1ZXN0X2FsbG9jID0gZXhlY2xpc3RzX3JlcXVlc3RfYWxsb2M7CiAK LQllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW44X2VtaXRfZmx1c2g7CisJZW5naW5lLT5lbWl0X2Zs dXNoID0gZ2VuOF9lbWl0X2ZsdXNoX3hjczsKIAllbmdpbmUtPmVtaXRfaW5pdF9icmVhZGNydW1i ID0gZ2VuOF9lbWl0X2luaXRfYnJlYWRjcnVtYjsKIAllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNy dW1iID0gZ2VuOF9lbWl0X2ZpbmlfYnJlYWRjcnVtYjsKIAlpZiAoSU5URUxfR0VOKGVuZ2luZS0+ aTkxNSkgPj0gMTIpCkBAIC00MzI1LDggKzI5ODYsNyBAQCBsb2dpY2FsX3JpbmdfZGVmYXVsdF92 ZnVuY3Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCX0KIH0KIAotc3RhdGljIGlu bGluZSB2b2lkCi1sb2dpY2FsX3JpbmdfZGVmYXVsdF9pcnFzKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBleGVjbGlzdHNfZGVmYXVsdF9pcnFzKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKIAl1bnNpZ25lZCBpbnQgc2hpZnQgPSAw OwogCkBAIC00MzUyLDE1ICszMDEyLDE5IEBAIHN0YXRpYyB2b2lkIHJjc19zdWJtaXNzaW9uX292 ZXJyaWRlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKIAlzd2l0Y2ggKElOVEVM X0dFTihlbmdpbmUtPmk5MTUpKSB7CiAJY2FzZSAxMjoKLQkJZW5naW5lLT5lbWl0X2ZsdXNoID0g Z2VuMTJfZW1pdF9mbHVzaF9yZW5kZXI7CisJCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjEyX2Vt aXRfZmx1c2hfcmNzOwogCQllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2VuMTJfZW1p dF9maW5pX2JyZWFkY3J1bWJfcmNzOwogCQlicmVhazsKIAljYXNlIDExOgotCQllbmdpbmUtPmVt aXRfZmx1c2ggPSBnZW4xMV9lbWl0X2ZsdXNoX3JlbmRlcjsKKwkJZW5naW5lLT5lbWl0X2ZsdXNo ID0gZ2VuMTFfZW1pdF9mbHVzaF9yY3M7CiAJCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIg PSBnZW4xMV9lbWl0X2ZpbmlfYnJlYWRjcnVtYl9yY3M7CiAJCWJyZWFrOworCWNhc2UgOToKKwkJ ZW5naW5lLT5lbWl0X2ZsdXNoID0gZ2VuOV9lbWl0X2ZsdXNoX3JjczsKKwkJZW5naW5lLT5lbWl0 X2ZpbmlfYnJlYWRjcnVtYiA9IGdlbjhfZW1pdF9maW5pX2JyZWFkY3J1bWJfcmNzOworCQlicmVh azsKIAlkZWZhdWx0OgotCQllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW44X2VtaXRfZmx1c2hfcmVu ZGVyOworCQllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW44X2VtaXRfZmx1c2hfcmNzOwogCQllbmdp bmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2VuOF9lbWl0X2ZpbmlfYnJlYWRjcnVtYl9yY3M7 CiAJCWJyZWFrOwogCX0KQEAgLTQzNzgsMTMgKzMwNDIsMTMgQEAgaW50IGludGVsX2V4ZWNsaXN0 c19zdWJtaXNzaW9uX3NldHVwKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAl0aW1l cl9zZXR1cCgmZW5naW5lLT5leGVjbGlzdHMudGltZXIsIGV4ZWNsaXN0c190aW1lc2xpY2UsIDAp OwogCXRpbWVyX3NldHVwKCZlbmdpbmUtPmV4ZWNsaXN0cy5wcmVlbXB0LCBleGVjbGlzdHNfcHJl ZW1wdCwgMCk7CiAKLQlsb2dpY2FsX3JpbmdfZGVmYXVsdF92ZnVuY3MoZW5naW5lKTsKLQlsb2dp Y2FsX3JpbmdfZGVmYXVsdF9pcnFzKGVuZ2luZSk7CisJZXhlY2xpc3RzX2RlZmF1bHRfdmZ1bmNz KGVuZ2luZSk7CisJZXhlY2xpc3RzX2RlZmF1bHRfaXJxcyhlbmdpbmUpOwogCiAJaWYgKGVuZ2lu ZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNTKQogCQlyY3Nfc3VibWlzc2lvbl9vdmVycmlkZShlbmdp bmUpOwogCi0JaWYgKGludGVsX2luaXRfd29ya2Fyb3VuZF9iYihlbmdpbmUpKQorCWlmIChpbnRl bF9lbmdpbmVfaW5pdF93b3JrYXJvdW5kX2JiKGVuZ2luZSkpCiAJCS8qCiAJCSAqIFdlIGNvbnRp bnVlIGV2ZW4gaWYgd2UgZmFpbCB0byBpbml0aWFsaXplIFdBIGJhdGNoCiAJCSAqIGJlY2F1c2Ug d2Ugb25seSBleHBlY3QgcmFyZSBnbGl0Y2hlcyBidXQgbm90aGluZwpAQCAtNDQyMSwxMzcgKzMw ODUsNiBAQCBpbnQgaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb25fc2V0dXAoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTMyIGludGVsX2xy X2luZGlyZWN0X2N0eF9vZmZzZXQoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQotewotCXUzMiBpbmRpcmVjdF9jdHhfb2Zmc2V0OwotCi0Jc3dpdGNoIChJTlRFTF9HRU4oZW5n aW5lLT5pOTE1KSkgewotCWRlZmF1bHQ6Ci0JCU1JU1NJTkdfQ0FTRShJTlRFTF9HRU4oZW5naW5l LT5pOTE1KSk7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgMTI6Ci0JCWluZGlyZWN0X2N0 eF9vZmZzZXQgPQotCQkJR0VOMTJfQ1RYX1JDU19JTkRJUkVDVF9DVFhfT0ZGU0VUX0RFRkFVTFQ7 Ci0JCWJyZWFrOwotCWNhc2UgMTE6Ci0JCWluZGlyZWN0X2N0eF9vZmZzZXQgPQotCQkJR0VOMTFf Q1RYX1JDU19JTkRJUkVDVF9DVFhfT0ZGU0VUX0RFRkFVTFQ7Ci0JCWJyZWFrOwotCWNhc2UgMTA6 Ci0JCWluZGlyZWN0X2N0eF9vZmZzZXQgPQotCQkJR0VOMTBfQ1RYX1JDU19JTkRJUkVDVF9DVFhf T0ZGU0VUX0RFRkFVTFQ7Ci0JCWJyZWFrOwotCWNhc2UgOToKLQkJaW5kaXJlY3RfY3R4X29mZnNl dCA9Ci0JCQlHRU45X0NUWF9SQ1NfSU5ESVJFQ1RfQ1RYX09GRlNFVF9ERUZBVUxUOwotCQlicmVh azsKLQljYXNlIDg6Ci0JCWluZGlyZWN0X2N0eF9vZmZzZXQgPQotCQkJR0VOOF9DVFhfUkNTX0lO RElSRUNUX0NUWF9PRkZTRVRfREVGQVVMVDsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGluZGly ZWN0X2N0eF9vZmZzZXQ7Ci19Ci0KLQotc3RhdGljIHZvaWQgaW5pdF9jb21tb25fcmVnX3N0YXRl KHUzMiAqIGNvbnN0IHJlZ3MsCi0JCQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUsCi0JCQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZywKLQkJCQkgIGJvb2wg aW5oaWJpdCkKLXsKLQl1MzIgY3RsOwotCi0JY3RsID0gX01BU0tFRF9CSVRfRU5BQkxFKENUWF9D VFJMX0lOSElCSVRfU1lOX0NUWF9TV0lUQ0gpOwotCWN0bCB8PSBfTUFTS0VEX0JJVF9ESVNBQkxF KENUWF9DVFJMX0VOR0lORV9DVFhfUkVTVE9SRV9JTkhJQklUKTsKLQlpZiAoaW5oaWJpdCkKLQkJ Y3RsIHw9IENUWF9DVFJMX0VOR0lORV9DVFhfUkVTVE9SRV9JTkhJQklUOwotCWlmIChJTlRFTF9H RU4oZW5naW5lLT5pOTE1KSA8IDExKQotCQljdGwgfD0gX01BU0tFRF9CSVRfRElTQUJMRShDVFhf Q1RSTF9FTkdJTkVfQ1RYX1NBVkVfSU5ISUJJVCB8Ci0JCQkJCSAgIENUWF9DVFJMX1JTX0NUWF9F TkFCTEUpOwotCXJlZ3NbQ1RYX0NPTlRFWFRfQ09OVFJPTF0gPSBjdGw7Ci0KLQlyZWdzW0NUWF9S SU5HX0NUTF0gPSBSSU5HX0NUTF9TSVpFKHJpbmctPnNpemUpIHwgUklOR19WQUxJRDsKLX0KLQot c3RhdGljIHZvaWQgaW5pdF93YV9iYl9yZWdfc3RhdGUodTMyICogY29uc3QgcmVncywKLQkJCQkg Y29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAotCQkJCSB1MzIgcG9zX2JiX3Bl cl9jdHgpCi17Ci0JY29uc3Qgc3RydWN0IGk5MTVfY3R4X3dvcmthcm91bmRzICogY29uc3Qgd2Ff Y3R4ID0gJmVuZ2luZS0+d2FfY3R4OwotCi0JaWYgKHdhX2N0eC0+cGVyX2N0eC5zaXplKSB7Ci0J CWNvbnN0IHUzMiBnZ3R0X29mZnNldCA9IGk5MTVfZ2d0dF9vZmZzZXQod2FfY3R4LT52bWEpOwot Ci0JCXJlZ3NbcG9zX2JiX3Blcl9jdHhdID0KLQkJCShnZ3R0X29mZnNldCArIHdhX2N0eC0+cGVy X2N0eC5vZmZzZXQpIHwgMHgwMTsKLQl9Ci0KLQlpZiAod2FfY3R4LT5pbmRpcmVjdF9jdHguc2l6 ZSkgewotCQljb25zdCB1MzIgZ2d0dF9vZmZzZXQgPSBpOTE1X2dndHRfb2Zmc2V0KHdhX2N0eC0+ dm1hKTsKLQotCQlyZWdzW3Bvc19iYl9wZXJfY3R4ICsgMl0gPQotCQkJKGdndHRfb2Zmc2V0ICsg d2FfY3R4LT5pbmRpcmVjdF9jdHgub2Zmc2V0KSB8Ci0JCQkod2FfY3R4LT5pbmRpcmVjdF9jdHgu c2l6ZSAvIENBQ0hFTElORV9CWVRFUyk7Ci0KLQkJcmVnc1twb3NfYmJfcGVyX2N0eCArIDRdID0K LQkJCWludGVsX2xyX2luZGlyZWN0X2N0eF9vZmZzZXQoZW5naW5lKSA8PCA2OwotCX0KLX0KLQot c3RhdGljIHZvaWQgaW5pdF9wcGd0dF9yZWdfc3RhdGUodTMyICpyZWdzLCBjb25zdCBzdHJ1Y3Qg aTkxNV9wcGd0dCAqcHBndHQpCi17Ci0JaWYgKGk5MTVfdm1faXNfNGx2bCgmcHBndHQtPnZtKSkg ewotCQkvKiA2NGIgUFBHVFQgKDQ4Yml0IGNhbm9uaWNhbCkKLQkJICogUERQMF9ERVNDUklQVE9S IGNvbnRhaW5zIHRoZSBiYXNlIGFkZHJlc3MgdG8gUE1MNCBhbmQKLQkJICogb3RoZXIgUERQIERl c2NyaXB0b3JzIGFyZSBpZ25vcmVkLgotCQkgKi8KLQkJQVNTSUdOX0NUWF9QTUw0KHBwZ3R0LCBy ZWdzKTsKLQl9IGVsc2UgewotCQlBU1NJR05fQ1RYX1BEUChwcGd0dCwgcmVncywgMyk7Ci0JCUFT U0lHTl9DVFhfUERQKHBwZ3R0LCByZWdzLCAyKTsKLQkJQVNTSUdOX0NUWF9QRFAocHBndHQsIHJl Z3MsIDEpOwotCQlBU1NJR05fQ1RYX1BEUChwcGd0dCwgcmVncywgMCk7Ci0JfQotfQotCi1zdGF0 aWMgc3RydWN0IGk5MTVfcHBndHQgKnZtX2FsaWFzKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2Ug KnZtKQotewotCWlmIChpOTE1X2lzX2dndHQodm0pKQotCQlyZXR1cm4gaTkxNV92bV90b19nZ3R0 KHZtKS0+YWxpYXM7Ci0JZWxzZQotCQlyZXR1cm4gaTkxNV92bV90b19wcGd0dCh2bSk7Ci19Ci0K LXN0YXRpYyB2b2lkIGV4ZWNsaXN0c19pbml0X3JlZ19zdGF0ZSh1MzIgKnJlZ3MsCi0JCQkJICAg ICBjb25zdCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCi0JCQkJICAgICBjb25zdCBzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUsCi0JCQkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcmlu ZyAqcmluZywKLQkJCQkgICAgIGJvb2wgaW5oaWJpdCkKLXsKLQkvKgotCSAqIEEgY29udGV4dCBp cyBhY3R1YWxseSBhIGJpZyBiYXRjaCBidWZmZXIgd2l0aCBzZXZlcmFsCi0JICogTUlfTE9BRF9S RUdJU1RFUl9JTU0gY29tbWFuZHMgZm9sbG93ZWQgYnkgKHJlZywgdmFsdWUpIHBhaXJzLiBUaGUK LQkgKiB2YWx1ZXMgd2UgYXJlIHNldHRpbmcgaGVyZSBhcmUgb25seSBmb3IgdGhlIGZpcnN0IGNv bnRleHQgcmVzdG9yZToKLQkgKiBvbiBhIHN1YnNlcXVlbnQgc2F2ZSwgdGhlIEdQVSB3aWxsIHJl Y3JlYXRlIHRoaXMgYmF0Y2hidWZmZXIgd2l0aCBuZXcKLQkgKiB2YWx1ZXMgKGluY2x1ZGluZyBh bGwgdGhlIG1pc3NpbmcgTUlfTE9BRF9SRUdJU1RFUl9JTU0gY29tbWFuZHMgdGhhdAotCSAqIHdl IGFyZSBub3QgaW5pdGlhbGl6aW5nIGhlcmUpLgotCSAqCi0JICogTXVzdCBrZWVwIGNvbnNpc3Rl bnQgd2l0aCB2aXJ0dWFsX3VwZGF0ZV9yZWdpc3Rlcl9vZmZzZXRzKCkuCi0JICovCi0Jc2V0X29m ZnNldHMocmVncywgcmVnX29mZnNldHMoZW5naW5lKSwgZW5naW5lLCBpbmhpYml0KTsKLQotCWlu aXRfY29tbW9uX3JlZ19zdGF0ZShyZWdzLCBlbmdpbmUsIHJpbmcsIGluaGliaXQpOwotCWluaXRf cHBndHRfcmVnX3N0YXRlKHJlZ3MsIHZtX2FsaWFzKGNlLT52bSkpOwotCi0JaW5pdF93YV9iYl9y ZWdfc3RhdGUocmVncywgZW5naW5lLAotCQkJICAgICBJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+ PSAxMiA/Ci0JCQkgICAgIEdFTjEyX0NUWF9CQl9QRVJfQ1RYX1BUUiA6Ci0JCQkgICAgIENUWF9C Ql9QRVJfQ1RYX1BUUik7Ci0KLQlfX3Jlc2V0X3N0b3BfcmluZyhyZWdzLCBlbmdpbmUpOwotfQot CiBzdGF0aWMgaW50CiBwb3B1bGF0ZV9scl9jb250ZXh0KHN0cnVjdCBpbnRlbF9jb250ZXh0ICpj ZSwKIAkJICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpjdHhfb2JqLApAQCAtNDU4OSw3 ICszMTIyLDcgQEAgcG9wdWxhdGVfbHJfY29udGV4dChzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2Us CiAKIAkvKiBUaGUgc2Vjb25kIHBhZ2Ugb2YgdGhlIGNvbnRleHQgb2JqZWN0IGNvbnRhaW5zIHNv bWUgZmllbGRzIHdoaWNoIG11c3QKIAkgKiBiZSBzZXQgdXAgcHJpb3IgdG8gdGhlIGZpcnN0IGV4 ZWN1dGlvbi4gKi8KLQlleGVjbGlzdHNfaW5pdF9yZWdfc3RhdGUodmFkZHIgKyBMUkNfU1RBVEVf UE4gKiBQQUdFX1NJWkUsCisJaW50ZWxfbHJjX2luaXRfcmVnX3N0YXRlKHZhZGRyICsgTFJDX1NU QVRFX1BOICogUEFHRV9TSVpFLAogCQkJCSBjZSwgZW5naW5lLCByaW5nLCBpbmhpYml0KTsKIAog CXJldCA9IDA7CkBAIC01MjU3LDMxICszNzkwLDYgQEAgdm9pZCBpbnRlbF9leGVjbGlzdHNfc2hv d19yZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCiAJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmZW5naW5lLT5hY3RpdmUubG9jaywgZmxhZ3MpOwogfQogCi12b2lkIGludGVs X2xyX2NvbnRleHRfcmVzZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAotCQkJICAg IHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKLQkJCSAgICB1MzIgaGVhZCwKLQkJCSAgICBib29s IHNjcnViKQotewotCUdFTV9CVUdfT04oIWludGVsX2NvbnRleHRfaXNfcGlubmVkKGNlKSk7Ci0K LQkvKgotCSAqIFdlIHdhbnQgYSBzaW1wbGUgY29udGV4dCArIHJpbmcgdG8gZXhlY3V0ZSB0aGUg YnJlYWRjcnVtYiB1cGRhdGUuCi0JICogV2UgY2Fubm90IHJlbHkgb24gdGhlIGNvbnRleHQgYmVp bmcgaW50YWN0IGFjcm9zcyB0aGUgR1BVIGhhbmcsCi0JICogc28gY2xlYXIgaXQgYW5kIHJlYnVp bGQganVzdCB3aGF0IHdlIG5lZWQgZm9yIHRoZSBicmVhZGNydW1iLgotCSAqIEFsbCBwZW5kaW5n IHJlcXVlc3RzIGZvciB0aGlzIGNvbnRleHQgd2lsbCBiZSB6YXBwZWQsIGFuZCBhbnkKLQkgKiBm dXR1cmUgcmVxdWVzdCB3aWxsIGJlIGFmdGVyIHVzZXJzcGFjZSBoYXMgaGFkIHRoZSBvcHBvcnR1 bml0eQotCSAqIHRvIHJlY3JlYXRlIGl0cyBvd24gc3RhdGUuCi0JICovCi0JaWYgKHNjcnViKQot CQlyZXN0b3JlX2RlZmF1bHRfc3RhdGUoY2UsIGVuZ2luZSk7Ci0KLQkvKiBSZXJ1biB0aGUgcmVx dWVzdDsgaXRzIHBheWxvYWQgaGFzIGJlZW4gbmV1dGVyZWQgKGlmIGd1aWx0eSkuICovCi0JY2Ut PnJpbmctPmhlYWQgPSBoZWFkOwotCWludGVsX3JpbmdfdXBkYXRlX3NwYWNlKGNlLT5yaW5nKTsK LQotCV9fZXhlY2xpc3RzX3VwZGF0ZV9yZWdfc3RhdGUoY2UsIGVuZ2luZSk7Ci19Ci0KIGJvb2wK IGludGVsX2VuZ2luZV9pbl9leGVjbGlzdHNfc3VibWlzc2lvbl9tb2RlKGNvbnN0IHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX2xyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mYTEyZDcxYTE5OWUKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYwpAQCAt MCwwICsxLDgzMCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAorLyoKKyAqIENv cHlyaWdodCDCqSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworLyoqCisgKiBET0M6IExv Z2ljYWwgUmluZ3MsIExvZ2ljYWwgUmluZyBDb250ZXh0cyBhbmQgRXhlY2xpc3RzCisgKgorICog TW90aXZhdGlvbjoKKyAqIEdFTjggYnJpbmdzIGFuIGV4cGFuc2lvbiBvZiB0aGUgSFcgY29udGV4 dHM6ICJMb2dpY2FsIFJpbmcgQ29udGV4dHMiLgorICogVGhlc2UgZXhwYW5kZWQgY29udGV4dHMg ZW5hYmxlIGEgbnVtYmVyIG9mIG5ldyBhYmlsaXRpZXMsIGVzcGVjaWFsbHkKKyAqICJFeGVjbGlz dHMiIChhbHNvIGltcGxlbWVudGVkIGluIHRoaXMgZmlsZSkuCisgKgorICogT25lIG9mIHRoZSBt YWluIGRpZmZlcmVuY2VzIHdpdGggdGhlIGxlZ2FjeSBIVyBjb250ZXh0cyBpcyB0aGF0IGxvZ2lj YWwKKyAqIHJpbmcgY29udGV4dHMgaW5jb3Jwb3JhdGUgbWFueSBtb3JlIHRoaW5ncyB0byB0aGUg Y29udGV4dCdzIHN0YXRlLCBsaWtlCisgKiBQRFBzIG9yIHJpbmdidWZmZXIgY29udHJvbCByZWdp c3RlcnM6CisgKgorICogVGhlIHJlYXNvbiB3aHkgUERQcyBhcmUgaW5jbHVkZWQgaW4gdGhlIGNv bnRleHQgaXMgc3RyYWlnaHRmb3J3YXJkOiBhcworICogUFBHVFRzIChwZXItcHJvY2VzcyBHVFRz KSBhcmUgYWN0dWFsbHkgcGVyLWNvbnRleHQsIGhhdmluZyB0aGUgUERQcworICogY29udGFpbmVk IHRoZXJlIG1lYW4geW91IGRvbid0IG5lZWQgdG8gZG8gYSBwcGd0dC0+c3dpdGNoX21tIHlvdXJz ZWxmLAorICogaW5zdGVhZCwgdGhlIEdQVSB3aWxsIGRvIGl0IGZvciB5b3Ugb24gdGhlIGNvbnRl eHQgc3dpdGNoLgorICoKKyAqIEJ1dCwgd2hhdCBhYm91dCB0aGUgcmluZ2J1ZmZlciBjb250cm9s IHJlZ2lzdGVycyAoaGVhZCwgdGFpbCwgZXRjLi4pPworICogc2hvdWxkbid0IHdlIGp1c3QgbmVl ZCBhIHNldCBvZiB0aG9zZSBwZXIgZW5naW5lIGNvbW1hbmQgc3RyZWFtZXI/IFRoaXMgaXMKKyAq IHdoZXJlIHRoZSBuYW1lICJMb2dpY2FsIFJpbmdzIiBzdGFydHMgdG8gbWFrZSBzZW5zZTogYnkg dmlydHVhbGl6aW5nIHRoZQorICogcmluZ3MsIHRoZSBlbmdpbmUgY3Mgc2hpZnRzIHRvIGEgbmV3 ICJyaW5nIGJ1ZmZlciIgd2l0aCBldmVyeSBjb250ZXh0CisgKiBzd2l0Y2guIFdoZW4geW91IHdh bnQgdG8gc3VibWl0IGEgd29ya2xvYWQgdG8gdGhlIEdQVSB5b3U6IEEpIGNob29zZSB5b3VyCisg KiBjb250ZXh0LCBCKSBmaW5kIGl0cyBhcHByb3ByaWF0ZSB2aXJ0dWFsaXplZCByaW5nLCBDKSB3 cml0ZSBjb21tYW5kcyB0byBpdAorICogYW5kIHRoZW4sIGZpbmFsbHksIEQpIHRlbGwgdGhlIEdQ VSB0byBzd2l0Y2ggdG8gdGhhdCBjb250ZXh0LgorICoKKyAqIEluc3RlYWQgb2YgdGhlIGxlZ2Fj eSBNSV9TRVRfQ09OVEVYVCwgdGhlIHdheSB5b3UgdGVsbCB0aGUgR1BVIHRvIHN3aXRjaAorICog dG8gYSBjb250ZXh0cyBpcyB2aWEgYSBjb250ZXh0IGV4ZWN1dGlvbiBsaXN0LCBlcmdvICJFeGVj bGlzdHMiLgorICoKKyAqIExSQyBpbXBsZW1lbnRhdGlvbjoKKyAqIFJlZ2FyZGluZyB0aGUgY3Jl YXRpb24gb2YgY29udGV4dHMsIHdlIGhhdmU6CisgKgorICogLSBPbmUgZ2xvYmFsIGRlZmF1bHQg Y29udGV4dC4KKyAqIC0gT25lIGxvY2FsIGRlZmF1bHQgY29udGV4dCBmb3IgZWFjaCBvcGVuZWQg ZmQuCisgKiAtIE9uZSBsb2NhbCBleHRyYSBjb250ZXh0IGZvciBlYWNoIGNvbnRleHQgY3JlYXRl IGlvY3RsIGNhbGwuCisgKgorICogTm93IHRoYXQgcmluZ2J1ZmZlcnMgYmVsb25nIHBlci1jb250 ZXh0IChhbmQgbm90IHBlci1lbmdpbmUsIGxpa2UgYmVmb3JlKQorICogYW5kIHRoYXQgY29udGV4 dHMgYXJlIHVuaXF1ZWx5IHRpZWQgdG8gYSBnaXZlbiBlbmdpbmUgKGFuZCBub3QgcmV1c2FibGUs CisgKiBsaWtlIGJlZm9yZSkgd2UgbmVlZDoKKyAqCisgKiAtIE9uZSByaW5nYnVmZmVyIHBlci1l bmdpbmUgaW5zaWRlIGVhY2ggY29udGV4dC4KKyAqIC0gT25lIGJhY2tpbmcgb2JqZWN0IHBlci1l bmdpbmUgaW5zaWRlIGVhY2ggY29udGV4dC4KKyAqCisgKiBUaGUgZ2xvYmFsIGRlZmF1bHQgY29u dGV4dCBzdGFydHMgaXRzIGxpZmUgd2l0aCB0aGVzZSBuZXcgb2JqZWN0cyBmdWxseQorICogYWxs b2NhdGVkIGFuZCBwb3B1bGF0ZWQuIFRoZSBsb2NhbCBkZWZhdWx0IGNvbnRleHQgZm9yIGVhY2gg b3BlbmVkIGZkIGlzCisgKiBtb3JlIGNvbXBsZXgsIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBhdCBj cmVhdGlvbiB0aW1lIHdoaWNoIGVuZ2luZSBpcyBnb2luZworICogdG8gdXNlIHRoZW0uIFRvIGhh bmRsZSB0aGlzLCB3ZSBoYXZlIGltcGxlbWVudGVkIGEgZGVmZXJyZWQgY3JlYXRpb24gb2YgTFIK KyAqIGNvbnRleHRzOgorICoKKyAqIFRoZSBsb2NhbCBjb250ZXh0IHN0YXJ0cyBpdHMgbGlmZSBh cyBhIGhvbGxvdyBvciBibGFuayBob2xkZXIsIHRoYXQgb25seQorICogZ2V0cyBwb3B1bGF0ZWQg Zm9yIGEgZ2l2ZW4gZW5naW5lIG9uY2Ugd2UgcmVjZWl2ZSBhbiBleGVjYnVmZmVyLiBJZiBsYXRl cgorICogb24gd2UgcmVjZWl2ZSBhbm90aGVyIGV4ZWNidWZmZXIgaW9jdGwgZm9yIHRoZSBzYW1l IGNvbnRleHQgYnV0IGEgZGlmZmVyZW50CisgKiBlbmdpbmUsIHdlIGFsbG9jYXRlL3BvcHVsYXRl IGEgbmV3IHJpbmdidWZmZXIgYW5kIGNvbnRleHQgYmFja2luZyBvYmplY3QgYW5kCisgKiBzbyBv bi4KKyAqCisgKiBGaW5hbGx5LCByZWdhcmRpbmcgbG9jYWwgY29udGV4dHMgY3JlYXRlZCB1c2lu ZyB0aGUgaW9jdGwgY2FsbDogYXMgdGhleSBhcmUKKyAqIG9ubHkgYWxsb3dlZCB3aXRoIHRoZSBy ZW5kZXIgcmluZywgd2UgY2FuIGFsbG9jYXRlICYgcG9wdWxhdGUgdGhlbSByaWdodAorICogYXdh eSAobm8gbmVlZCB0byBkZWZlciBhbnl0aGluZywgYXQgbGVhc3QgZm9yIG5vdykuCisgKgorICog RXhlY2xpc3RzIGltcGxlbWVudGF0aW9uOgorICogRXhlY2xpc3RzIGFyZSB0aGUgbmV3IG1ldGhv ZCBieSB3aGljaCwgb24gZ2VuOCsgaGFyZHdhcmUsIHdvcmtsb2FkcyBhcmUKKyAqIHN1Ym1pdHRl ZCBmb3IgZXhlY3V0aW9uIChhcyBvcHBvc2VkIHRvIHRoZSBsZWdhY3ksIHJpbmdidWZmZXItYmFz ZWQsIG1ldGhvZCkuCisgKiBUaGlzIG1ldGhvZCB3b3JrcyBhcyBmb2xsb3dzOgorICoKKyAqIFdo ZW4gYSByZXF1ZXN0IGlzIGNvbW1pdHRlZCwgaXRzIGNvbW1hbmRzICh0aGUgQkIgc3RhcnQgYW5k IGFueSBsZWFkaW5nIG9yCisgKiB0cmFpbGluZyBjb21tYW5kcywgbGlrZSB0aGUgc2Vxbm8gYnJl YWRjcnVtYnMpIGFyZSBwbGFjZWQgaW4gdGhlIHJpbmdidWZmZXIKKyAqIGZvciB0aGUgYXBwcm9w cmlhdGUgY29udGV4dC4gVGhlIHRhaWwgcG9pbnRlciBpbiB0aGUgaGFyZHdhcmUgY29udGV4dCBp cyBub3QKKyAqIHVwZGF0ZWQgYXQgdGhpcyB0aW1lLCBidXQgaW5zdGVhZCwga2VwdCBieSB0aGUg ZHJpdmVyIGluIHRoZSByaW5nYnVmZmVyCisgKiBzdHJ1Y3R1cmUuIEEgc3RydWN0dXJlIHJlcHJl c2VudGluZyB0aGlzIHJlcXVlc3QgaXMgYWRkZWQgdG8gYSByZXF1ZXN0IHF1ZXVlCisgKiBmb3Ig dGhlIGFwcHJvcHJpYXRlIGVuZ2luZTogdGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgYSBjb3B5IG9m IHRoZSBjb250ZXh0J3MKKyAqIHRhaWwgYWZ0ZXIgdGhlIHJlcXVlc3Qgd2FzIHdyaXR0ZW4gdG8g dGhlIHJpbmcgYnVmZmVyIGFuZCBhIHBvaW50ZXIgdG8gdGhlCisgKiBjb250ZXh0IGl0c2VsZi4K KyAqCisgKiBJZiB0aGUgZW5naW5lJ3MgcmVxdWVzdCBxdWV1ZSB3YXMgZW1wdHkgYmVmb3JlIHRo ZSByZXF1ZXN0IHdhcyBhZGRlZCwgdGhlCisgKiBxdWV1ZSBpcyBwcm9jZXNzZWQgaW1tZWRpYXRl bHkuIE90aGVyd2lzZSB0aGUgcXVldWUgd2lsbCBiZSBwcm9jZXNzZWQgZHVyaW5nCisgKiBhIGNv bnRleHQgc3dpdGNoIGludGVycnVwdC4gSW4gYW55IGNhc2UsIGVsZW1lbnRzIG9uIHRoZSBxdWV1 ZSB3aWxsIGdldCBzZW50CisgKiAoaW4gcGFpcnMpIHRvIHRoZSBHUFUncyBFeGVjTGlzdHMgU3Vi bWl0IFBvcnQgKEVMU1AsIGZvciBzaG9ydCkgd2l0aCBhCisgKiBnbG9iYWxseSB1bmlxdWUgMjAt Yml0cyBzdWJtaXNzaW9uIElELgorICoKKyAqIFdoZW4gZXhlY3V0aW9uIG9mIGEgcmVxdWVzdCBj b21wbGV0ZXMsIHRoZSBHUFUgdXBkYXRlcyB0aGUgY29udGV4dCBzdGF0dXMKKyAqIGJ1ZmZlciB3 aXRoIGEgY29udGV4dCBjb21wbGV0ZSBldmVudCBhbmQgZ2VuZXJhdGVzIGEgY29udGV4dCBzd2l0 Y2gKKyAqIGludGVycnVwdC4gRHVyaW5nIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcsIHRoZSBkcml2 ZXIgZXhhbWluZXMgdGhlIGV2ZW50cyBpbgorICogdGhlIGJ1ZmZlcjogZm9yIGVhY2ggY29udGV4 dCBjb21wbGV0ZSBldmVudCwgaWYgdGhlIGFubm91bmNlZCBJRCBtYXRjaGVzCisgKiB0aGF0IG9u IHRoZSBoZWFkIG9mIHRoZSByZXF1ZXN0IHF1ZXVlLCB0aGVuIHRoYXQgcmVxdWVzdCBpcyByZXRp cmVkIGFuZAorICogcmVtb3ZlZCBmcm9tIHRoZSBxdWV1ZS4KKyAqCisgKiBBZnRlciBwcm9jZXNz aW5nLCBpZiBhbnkgcmVxdWVzdHMgd2VyZSByZXRpcmVkIGFuZCB0aGUgcXVldWUgaXMgbm90IGVt cHR5CisgKiB0aGVuIGEgbmV3IGV4ZWN1dGlvbiBsaXN0IGNhbiBiZSBzdWJtaXR0ZWQuIFRoZSB0 d28gcmVxdWVzdHMgYXQgdGhlIGZyb250IG9mCisgKiB0aGUgcXVldWUgYXJlIG5leHQgdG8gYmUg c3VibWl0dGVkIGJ1dCBzaW5jZSBhIGNvbnRleHQgbWF5IG5vdCBvY2N1ciB0d2ljZQorICogaW4g YW4gZXhlY3V0aW9uIGxpc3QsIGlmIHN1YnNlcXVlbnQgcmVxdWVzdHMgaGF2ZSB0aGUgc2FtZSBJ RCBhcyB0aGUgZmlyc3QKKyAqIHRoZW4gdGhlIHR3byByZXF1ZXN0cyBtdXN0IGJlIGNvbWJpbmVk LiBUaGlzIGlzIGRvbmUgc2ltcGx5IGJ5IGRpc2NhcmRpbmcKKyAqIHJlcXVlc3RzIGF0IHRoZSBo ZWFkIG9mIHRoZSBxdWV1ZSB1bnRpbCBlaXRoZXIgb25seSBvbmUgcmVxdWVzdHMgaXMgbGVmdAor ICogKGluIHdoaWNoIGNhc2Ugd2UgdXNlIGEgTlVMTCBzZWNvbmQgY29udGV4dCkgb3IgdGhlIGZp cnN0IHR3byByZXF1ZXN0cyBoYXZlCisgKiB1bmlxdWUgSURzLgorICoKKyAqIEJ5IGFsd2F5cyBl eGVjdXRpbmcgdGhlIGZpcnN0IHR3byByZXF1ZXN0cyBpbiB0aGUgcXVldWUgdGhlIGRyaXZlciBl bnN1cmVzCisgKiB0aGF0IHRoZSBHUFUgaXMga2VwdCBhcyBidXN5IGFzIHBvc3NpYmxlLiBJbiB0 aGUgY2FzZSB3aGVyZSBhIHNpbmdsZSBjb250ZXh0CisgKiBjb21wbGV0ZXMgYnV0IGEgc2Vjb25k IGNvbnRleHQgaXMgc3RpbGwgZXhlY3V0aW5nLCB0aGUgcmVxdWVzdCBmb3IgdGhpcworICogc2Vj b25kIGNvbnRleHQgd2lsbCBiZSBhdCB0aGUgaGVhZCBvZiB0aGUgcXVldWUgd2hlbiB3ZSByZW1v dmUgdGhlIGZpcnN0CisgKiBvbmUuIFRoaXMgcmVxdWVzdCB3aWxsIHRoZW4gYmUgcmVzdWJtaXR0 ZWQgYWxvbmcgd2l0aCBhIG5ldyByZXF1ZXN0IGZvciBhCisgKiBkaWZmZXJlbnQgY29udGV4dCwg d2hpY2ggd2lsbCBjYXVzZSB0aGUgaGFyZHdhcmUgdG8gY29udGludWUgZXhlY3V0aW5nIHRoZQor ICogc2Vjb25kIHJlcXVlc3QgYW5kIHF1ZXVlIHRoZSBuZXcgcmVxdWVzdCAodGhlIEdQVSBkZXRl Y3RzIHRoZSBjb25kaXRpb24gb2YgYQorICogY29udGV4dCBnZXR0aW5nIHByZWVtcHRlZCB3aXRo IHRoZSBzYW1lIGNvbnRleHQgYW5kIG9wdGltaXplcyB0aGUgY29udGV4dAorICogc3dpdGNoIGZs b3cgYnkgbm90IGRvaW5nIHByZWVtcHRpb24sIGJ1dCBqdXN0IHNhbXBsaW5nIHRoZSBuZXcgdGFp bCBwb2ludGVyKS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2luY2x1ZGUgImk5 MTVfZHJ2LmgiCisjaW5jbHVkZSAiaTkxNV9wZXJmLmgiCisjaW5jbHVkZSAiaW50ZWxfY29udGV4 dC5oIgorI2luY2x1ZGUgImludGVsX2VuZ2luZS5oIgorI2luY2x1ZGUgImludGVsX2xyYy5oIgor I2luY2x1ZGUgImludGVsX2xyY19yZWcuaCIKKyNpbmNsdWRlICJpbnRlbF9yaW5nLmgiCisjaW5j bHVkZSAiaW50ZWxfc3NldS5oIgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkd29yZF9p bl9wYWdlKHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIG9mZnNldF9pbl9wYWdlKGFkZHIpIC8gc2l6 ZW9mKHUzMik7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9vZmZzZXRzKHUzMiAqcmVncywKKwkJCWNv bnN0IHU4ICpkYXRhLAorCQkJY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAor CQkJYm9vbCBjbGVhcikKKyNkZWZpbmUgTk9QKHgpIChCSVQoNykgfCAoeCkpCisjZGVmaW5lIExS SShjb3VudCwgZmxhZ3MpICgoZmxhZ3MpIDw8IDYgfCAoY291bnQpIHwgQlVJTERfQlVHX09OX1pF Uk8oY291bnQgPj0gQklUKDYpKSkKKyNkZWZpbmUgUE9TVEVEIEJJVCgwKQorI2RlZmluZSBSRUco eCkgKCgoeCkgPj4gMikgfCBCVUlMRF9CVUdfT05fWkVSTyh4ID49IDB4MjAwKSkKKyNkZWZpbmUg UkVHMTYoeCkgXAorCSgoKHgpID4+IDkpIHwgQklUKDcpIHwgQlVJTERfQlVHX09OX1pFUk8oeCA+ PSAweDEwMDAwKSksIFwKKwkoKCh4KSA+PiAyKSAmIDB4N2YpCisjZGVmaW5lIEVORCh4KSAwLCAo eCkKK3sKKwljb25zdCB1MzIgYmFzZSA9IGVuZ2luZS0+bW1pb19iYXNlOworCisJd2hpbGUgKCpk YXRhKSB7CisJCXU4IGNvdW50LCBmbGFnczsKKworCQlpZiAoKmRhdGEgJiBCSVQoNykpIHsgLyog c2tpcCAqLworCQkJY291bnQgPSAqZGF0YSsrICYgfkJJVCg3KTsKKwkJCWlmIChjbGVhcikKKwkJ CQltZW1zZXQzMihyZWdzLCBNSV9OT09QLCBjb3VudCk7CisJCQlyZWdzICs9IGNvdW50OworCQkJ Y29udGludWU7CisJCX0KKworCQljb3VudCA9ICpkYXRhICYgMHgzZjsKKwkJZmxhZ3MgPSAqZGF0 YSA+PiA2OworCQlkYXRhKys7CisKKwkJKnJlZ3MgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTShjb3Vu dCk7CisJCWlmIChmbGFncyAmIFBPU1RFRCkKKwkJCSpyZWdzIHw9IE1JX0xSSV9GT1JDRV9QT1NU RUQ7CisJCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMSkKKwkJCSpyZWdzIHw9IE1J X0xSSV9DU19NTUlPOworCQlyZWdzKys7CisKKwkJR0VNX0JVR19PTighY291bnQpOworCQlkbyB7 CisJCQl1MzIgb2Zmc2V0ID0gMDsKKwkJCXU4IHY7CisKKwkJCWRvIHsKKwkJCQl2ID0gKmRhdGEr KzsKKwkJCQlvZmZzZXQgPDw9IDc7CisJCQkJb2Zmc2V0IHw9IHYgJiB+QklUKDcpOworCQkJfSB3 aGlsZSAodiAmIEJJVCg3KSk7CisKKwkJCXJlZ3NbMF0gPSBiYXNlICsgKG9mZnNldCA8PCAyKTsK KwkJCWlmIChjbGVhcikKKwkJCQlyZWdzWzFdID0gMDsKKwkJCXJlZ3MgKz0gMjsKKwkJfSB3aGls ZSAoLS1jb3VudCk7CisJfQorCisJaWYgKGNsZWFyKSB7CisJCXU4IGNvdW50ID0gKisrZGF0YTsK KworCQkvKiBDbGVhciBwYXN0IHRoZSB0YWlsIGZvciBIVyBhY2Nlc3MgKi8KKwkJR0VNX0JVR19P Tihkd29yZF9pbl9wYWdlKHJlZ3MpID4gY291bnQpOworCQltZW1zZXQzMihyZWdzLCBNSV9OT09Q LCBjb3VudCAtIGR3b3JkX2luX3BhZ2UocmVncykpOworCisJCS8qIENsb3NlIHRoZSBiYXRjaDsg dXNlZCBtYWlubHkgYnkgbGl2ZV9scmNfbGF5b3V0KCkgKi8KKwkJKnJlZ3MgPSBNSV9CQVRDSF9C VUZGRVJfRU5EOworCQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTApCisJCQkqcmVn cyB8PSBCSVQoMCk7CisJfQorfQorCitzdGF0aWMgY29uc3QgdTggZ2VuOF94Y3Nfb2Zmc2V0c1td ID0geworCU5PUCgxKSwKKwlMUkkoMTEsIDApLAorCVJFRzE2KDB4MjQ0KSwKKwlSRUcoMHgwMzQp LAorCVJFRygweDAzMCksCisJUkVHKDB4MDM4KSwKKwlSRUcoMHgwM2MpLAorCVJFRygweDE2OCks CisJUkVHKDB4MTQwKSwKKwlSRUcoMHgxMTApLAorCVJFRygweDExYyksCisJUkVHKDB4MTE0KSwK KwlSRUcoMHgxMTgpLAorCisJTk9QKDkpLAorCUxSSSg5LCAwKSwKKwlSRUcxNigweDNhOCksCisJ UkVHMTYoMHgyOGMpLAorCVJFRzE2KDB4Mjg4KSwKKwlSRUcxNigweDI4NCksCisJUkVHMTYoMHgy ODApLAorCVJFRzE2KDB4MjdjKSwKKwlSRUcxNigweDI3OCksCisJUkVHMTYoMHgyNzQpLAorCVJF RzE2KDB4MjcwKSwKKworCU5PUCgxMyksCisJTFJJKDIsIDApLAorCVJFRzE2KDB4MjAwKSwKKwlS RUcoMHgwMjgpLAorCisJRU5EKDgwKQorfTsKKworc3RhdGljIGNvbnN0IHU4IGdlbjlfeGNzX29m ZnNldHNbXSA9IHsKKwlOT1AoMSksCisJTFJJKDE0LCBQT1NURUQpLAorCVJFRzE2KDB4MjQ0KSwK KwlSRUcoMHgwMzQpLAorCVJFRygweDAzMCksCisJUkVHKDB4MDM4KSwKKwlSRUcoMHgwM2MpLAor CVJFRygweDE2OCksCisJUkVHKDB4MTQwKSwKKwlSRUcoMHgxMTApLAorCVJFRygweDExYyksCisJ UkVHKDB4MTE0KSwKKwlSRUcoMHgxMTgpLAorCVJFRygweDFjMCksCisJUkVHKDB4MWM0KSwKKwlS RUcoMHgxYzgpLAorCisJTk9QKDMpLAorCUxSSSg5LCBQT1NURUQpLAorCVJFRzE2KDB4M2E4KSwK KwlSRUcxNigweDI4YyksCisJUkVHMTYoMHgyODgpLAorCVJFRzE2KDB4Mjg0KSwKKwlSRUcxNigw eDI4MCksCisJUkVHMTYoMHgyN2MpLAorCVJFRzE2KDB4Mjc4KSwKKwlSRUcxNigweDI3NCksCisJ UkVHMTYoMHgyNzApLAorCisJTk9QKDEzKSwKKwlMUkkoMSwgUE9TVEVEKSwKKwlSRUcxNigweDIw MCksCisKKwlOT1AoMTMpLAorCUxSSSg0NCwgUE9TVEVEKSwKKwlSRUcoMHgwMjgpLAorCVJFRygw eDA5YyksCisJUkVHKDB4MGMwKSwKKwlSRUcoMHgxNzgpLAorCVJFRygweDE3YyksCisJUkVHMTYo MHgzNTgpLAorCVJFRygweDE3MCksCisJUkVHKDB4MTUwKSwKKwlSRUcoMHgxNTQpLAorCVJFRygw eDE1OCksCisJUkVHMTYoMHg0MWMpLAorCVJFRzE2KDB4NjAwKSwKKwlSRUcxNigweDYwNCksCisJ UkVHMTYoMHg2MDgpLAorCVJFRzE2KDB4NjBjKSwKKwlSRUcxNigweDYxMCksCisJUkVHMTYoMHg2 MTQpLAorCVJFRzE2KDB4NjE4KSwKKwlSRUcxNigweDYxYyksCisJUkVHMTYoMHg2MjApLAorCVJF RzE2KDB4NjI0KSwKKwlSRUcxNigweDYyOCksCisJUkVHMTYoMHg2MmMpLAorCVJFRzE2KDB4NjMw KSwKKwlSRUcxNigweDYzNCksCisJUkVHMTYoMHg2MzgpLAorCVJFRzE2KDB4NjNjKSwKKwlSRUcx NigweDY0MCksCisJUkVHMTYoMHg2NDQpLAorCVJFRzE2KDB4NjQ4KSwKKwlSRUcxNigweDY0Yyks CisJUkVHMTYoMHg2NTApLAorCVJFRzE2KDB4NjU0KSwKKwlSRUcxNigweDY1OCksCisJUkVHMTYo MHg2NWMpLAorCVJFRzE2KDB4NjYwKSwKKwlSRUcxNigweDY2NCksCisJUkVHMTYoMHg2NjgpLAor CVJFRzE2KDB4NjZjKSwKKwlSRUcxNigweDY3MCksCisJUkVHMTYoMHg2NzQpLAorCVJFRzE2KDB4 Njc4KSwKKwlSRUcxNigweDY3YyksCisJUkVHKDB4MDY4KSwKKworCUVORCgxNzYpCit9OworCitz dGF0aWMgY29uc3QgdTggZ2VuMTJfeGNzX29mZnNldHNbXSA9IHsKKwlOT1AoMSksCisJTFJJKDEz LCBQT1NURUQpLAorCVJFRzE2KDB4MjQ0KSwKKwlSRUcoMHgwMzQpLAorCVJFRygweDAzMCksCisJ UkVHKDB4MDM4KSwKKwlSRUcoMHgwM2MpLAorCVJFRygweDE2OCksCisJUkVHKDB4MTQwKSwKKwlS RUcoMHgxMTApLAorCVJFRygweDFjMCksCisJUkVHKDB4MWM0KSwKKwlSRUcoMHgxYzgpLAorCVJF RygweDE4MCksCisJUkVHMTYoMHgyYjQpLAorCisJTk9QKDUpLAorCUxSSSg5LCBQT1NURUQpLAor CVJFRzE2KDB4M2E4KSwKKwlSRUcxNigweDI4YyksCisJUkVHMTYoMHgyODgpLAorCVJFRzE2KDB4 Mjg0KSwKKwlSRUcxNigweDI4MCksCisJUkVHMTYoMHgyN2MpLAorCVJFRzE2KDB4Mjc4KSwKKwlS RUcxNigweDI3NCksCisJUkVHMTYoMHgyNzApLAorCisJRU5EKDgwKQorfTsKKworc3RhdGljIGNv bnN0IHU4IGdlbjhfcmNzX29mZnNldHNbXSA9IHsKKwlOT1AoMSksCisJTFJJKDE0LCBQT1NURUQp LAorCVJFRzE2KDB4MjQ0KSwKKwlSRUcoMHgwMzQpLAorCVJFRygweDAzMCksCisJUkVHKDB4MDM4 KSwKKwlSRUcoMHgwM2MpLAorCVJFRygweDE2OCksCisJUkVHKDB4MTQwKSwKKwlSRUcoMHgxMTAp LAorCVJFRygweDExYyksCisJUkVHKDB4MTE0KSwKKwlSRUcoMHgxMTgpLAorCVJFRygweDFjMCks CisJUkVHKDB4MWM0KSwKKwlSRUcoMHgxYzgpLAorCisJTk9QKDMpLAorCUxSSSg5LCBQT1NURUQp LAorCVJFRzE2KDB4M2E4KSwKKwlSRUcxNigweDI4YyksCisJUkVHMTYoMHgyODgpLAorCVJFRzE2 KDB4Mjg0KSwKKwlSRUcxNigweDI4MCksCisJUkVHMTYoMHgyN2MpLAorCVJFRzE2KDB4Mjc4KSwK KwlSRUcxNigweDI3NCksCisJUkVHMTYoMHgyNzApLAorCisJTk9QKDEzKSwKKwlMUkkoMSwgMCks CisJUkVHKDB4MGM4KSwKKworCUVORCg4MCkKK307CisKK3N0YXRpYyBjb25zdCB1OCBnZW45X3Jj c19vZmZzZXRzW10gPSB7CisJTk9QKDEpLAorCUxSSSgxNCwgUE9TVEVEKSwKKwlSRUcxNigweDI0 NCksCisJUkVHKDB4MzQpLAorCVJFRygweDMwKSwKKwlSRUcoMHgzOCksCisJUkVHKDB4M2MpLAor CVJFRygweDE2OCksCisJUkVHKDB4MTQwKSwKKwlSRUcoMHgxMTApLAorCVJFRygweDExYyksCisJ UkVHKDB4MTE0KSwKKwlSRUcoMHgxMTgpLAorCVJFRygweDFjMCksCisJUkVHKDB4MWM0KSwKKwlS RUcoMHgxYzgpLAorCisJTk9QKDMpLAorCUxSSSg5LCBQT1NURUQpLAorCVJFRzE2KDB4M2E4KSwK KwlSRUcxNigweDI4YyksCisJUkVHMTYoMHgyODgpLAorCVJFRzE2KDB4Mjg0KSwKKwlSRUcxNigw eDI4MCksCisJUkVHMTYoMHgyN2MpLAorCVJFRzE2KDB4Mjc4KSwKKwlSRUcxNigweDI3NCksCisJ UkVHMTYoMHgyNzApLAorCisJTk9QKDEzKSwKKwlMUkkoMSwgMCksCisJUkVHKDB4YzgpLAorCisJ Tk9QKDEzKSwKKwlMUkkoNDQsIFBPU1RFRCksCisJUkVHKDB4MjgpLAorCVJFRygweDljKSwKKwlS RUcoMHhjMCksCisJUkVHKDB4MTc4KSwKKwlSRUcoMHgxN2MpLAorCVJFRzE2KDB4MzU4KSwKKwlS RUcoMHgxNzApLAorCVJFRygweDE1MCksCisJUkVHKDB4MTU0KSwKKwlSRUcoMHgxNTgpLAorCVJF RzE2KDB4NDFjKSwKKwlSRUcxNigweDYwMCksCisJUkVHMTYoMHg2MDQpLAorCVJFRzE2KDB4NjA4 KSwKKwlSRUcxNigweDYwYyksCisJUkVHMTYoMHg2MTApLAorCVJFRzE2KDB4NjE0KSwKKwlSRUcx NigweDYxOCksCisJUkVHMTYoMHg2MWMpLAorCVJFRzE2KDB4NjIwKSwKKwlSRUcxNigweDYyNCks CisJUkVHMTYoMHg2MjgpLAorCVJFRzE2KDB4NjJjKSwKKwlSRUcxNigweDYzMCksCisJUkVHMTYo MHg2MzQpLAorCVJFRzE2KDB4NjM4KSwKKwlSRUcxNigweDYzYyksCisJUkVHMTYoMHg2NDApLAor CVJFRzE2KDB4NjQ0KSwKKwlSRUcxNigweDY0OCksCisJUkVHMTYoMHg2NGMpLAorCVJFRzE2KDB4 NjUwKSwKKwlSRUcxNigweDY1NCksCisJUkVHMTYoMHg2NTgpLAorCVJFRzE2KDB4NjVjKSwKKwlS RUcxNigweDY2MCksCisJUkVHMTYoMHg2NjQpLAorCVJFRzE2KDB4NjY4KSwKKwlSRUcxNigweDY2 YyksCisJUkVHMTYoMHg2NzApLAorCVJFRzE2KDB4Njc0KSwKKwlSRUcxNigweDY3OCksCisJUkVH MTYoMHg2N2MpLAorCVJFRygweDY4KSwKKworCUVORCgxNzYpCit9OworCitzdGF0aWMgY29uc3Qg dTggZ2VuMTFfcmNzX29mZnNldHNbXSA9IHsKKwlOT1AoMSksCisJTFJJKDE1LCBQT1NURUQpLAor CVJFRzE2KDB4MjQ0KSwKKwlSRUcoMHgwMzQpLAorCVJFRygweDAzMCksCisJUkVHKDB4MDM4KSwK KwlSRUcoMHgwM2MpLAorCVJFRygweDE2OCksCisJUkVHKDB4MTQwKSwKKwlSRUcoMHgxMTApLAor CVJFRygweDExYyksCisJUkVHKDB4MTE0KSwKKwlSRUcoMHgxMTgpLAorCVJFRygweDFjMCksCisJ UkVHKDB4MWM0KSwKKwlSRUcoMHgxYzgpLAorCVJFRygweDE4MCksCisKKwlOT1AoMSksCisJTFJJ KDksIFBPU1RFRCksCisJUkVHMTYoMHgzYTgpLAorCVJFRzE2KDB4MjhjKSwKKwlSRUcxNigweDI4 OCksCisJUkVHMTYoMHgyODQpLAorCVJFRzE2KDB4MjgwKSwKKwlSRUcxNigweDI3YyksCisJUkVH MTYoMHgyNzgpLAorCVJFRzE2KDB4Mjc0KSwKKwlSRUcxNigweDI3MCksCisKKwlMUkkoMSwgUE9T VEVEKSwKKwlSRUcoMHgxYjApLAorCisJTk9QKDEwKSwKKwlMUkkoMSwgMCksCisJUkVHKDB4MGM4 KSwKKworCUVORCg4MCkKK307CisKK3N0YXRpYyBjb25zdCB1OCBnZW4xMl9yY3Nfb2Zmc2V0c1td ID0geworCU5PUCgxKSwKKwlMUkkoMTMsIFBPU1RFRCksCisJUkVHMTYoMHgyNDQpLAorCVJFRygw eDAzNCksCisJUkVHKDB4MDMwKSwKKwlSRUcoMHgwMzgpLAorCVJFRygweDAzYyksCisJUkVHKDB4 MTY4KSwKKwlSRUcoMHgxNDApLAorCVJFRygweDExMCksCisJUkVHKDB4MWMwKSwKKwlSRUcoMHgx YzQpLAorCVJFRygweDFjOCksCisJUkVHKDB4MTgwKSwKKwlSRUcxNigweDJiNCksCisKKwlOT1Ao NSksCisJTFJJKDksIFBPU1RFRCksCisJUkVHMTYoMHgzYTgpLAorCVJFRzE2KDB4MjhjKSwKKwlS RUcxNigweDI4OCksCisJUkVHMTYoMHgyODQpLAorCVJFRzE2KDB4MjgwKSwKKwlSRUcxNigweDI3 YyksCisJUkVHMTYoMHgyNzgpLAorCVJFRzE2KDB4Mjc0KSwKKwlSRUcxNigweDI3MCksCisKKwlM UkkoMywgUE9TVEVEKSwKKwlSRUcoMHgxYjApLAorCVJFRzE2KDB4NWE4KSwKKwlSRUcxNigweDVh YyksCisKKwlOT1AoNiksCisJTFJJKDEsIDApLAorCVJFRygweDBjOCksCisKKwlFTkQoODApCit9 OworCisjdW5kZWYgRU5ECisjdW5kZWYgUkVHMTYKKyN1bmRlZiBSRUcKKyN1bmRlZiBMUkkKKyN1 bmRlZiBOT1AKKworc3RhdGljIGNvbnN0IHU4ICpyZWdfb2Zmc2V0cyhjb25zdCBzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJLyoKKwkgKiBUaGUgZ2VuMTIrIGxpc3RzIG9ubHkg aGF2ZSB0aGUgcmVnaXN0ZXJzIHdlIHByb2dyYW0gaW4gdGhlIGJhc2ljCisJICogZGVmYXVsdCBz dGF0ZS4gV2UgcmVseSBvbiB0aGUgY29udGV4dCBpbWFnZSB1c2luZyByZWxhdGl2ZQorCSAqIGFk ZHJlc3NpbmcgdG8gYXV0b21hdGljIGZpeHVwIHRoZSByZWdpc3RlciBzdGF0ZSBiZXR3ZWVuIHRo ZQorCSAqIHBoeXNpY2FsIGVuZ2luZXMgZm9yIHZpcnR1YWwgZW5naW5lLgorCSAqLworCUdFTV9C VUdfT04oSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTIgJiYKKwkJICAgIWludGVsX2VuZ2lu ZV9oYXNfcmVsYXRpdmVfbW1pbyhlbmdpbmUpKTsKKworCWlmIChlbmdpbmUtPmNsYXNzID09IFJF TkRFUl9DTEFTUykgeworCQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTIpCisJCQly ZXR1cm4gZ2VuMTJfcmNzX29mZnNldHM7CisJCWVsc2UgaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5 MTUpID49IDExKQorCQkJcmV0dXJuIGdlbjExX3Jjc19vZmZzZXRzOworCQllbHNlIGlmIChJTlRF TF9HRU4oZW5naW5lLT5pOTE1KSA+PSA5KQorCQkJcmV0dXJuIGdlbjlfcmNzX29mZnNldHM7CisJ CWVsc2UKKwkJCXJldHVybiBnZW44X3Jjc19vZmZzZXRzOworCX0gZWxzZSB7CisJCWlmIChJTlRF TF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMikKKwkJCXJldHVybiBnZW4xMl94Y3Nfb2Zmc2V0czsK KwkJZWxzZSBpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gOSkKKwkJCXJldHVybiBnZW45 X3hjc19vZmZzZXRzOworCQllbHNlCisJCQlyZXR1cm4gZ2VuOF94Y3Nfb2Zmc2V0czsKKwl9Cit9 CisKK2ludCBpbnRlbF9scmNfcmluZ19taV9tb2RlKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKK3sKKwlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTIpCisJCXJl dHVybiAweDYwOworCWVsc2UgaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDkpCisJCXJl dHVybiAweDU0OworCWVsc2UgaWYgKGVuZ2luZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNTKQorCQly ZXR1cm4gMHg1ODsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgX19yZXNl dF9zdG9wX3JpbmcodTMyICpyZWdzLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpCit7CisJaW50IHg7CisKKwl4ID0gaW50ZWxfbHJjX3JpbmdfbWlfbW9kZShlbmdpbmUpOwor CWlmICh4ICE9IC0xKSB7CisJCXJlZ3NbeCArIDFdICY9IH5TVE9QX1JJTkc7CisJCXJlZ3NbeCAr IDFdIHw9IFNUT1BfUklORyA8PCAxNjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfY29tbW9u X3JlZ19zdGF0ZSh1MzIgKiBjb25zdCByZWdzLAorCQkJCSAgY29uc3Qgc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lLAorCQkJCSAgY29uc3Qgc3RydWN0IGludGVsX3JpbmcgKnJpbmcsCisJ CQkJICBib29sIGluaGliaXQpCit7CisJdTMyIGN0bDsKKworCWN0bCA9IF9NQVNLRURfQklUX0VO QUJMRShDVFhfQ1RSTF9JTkhJQklUX1NZTl9DVFhfU1dJVENIKTsKKwljdGwgfD0gX01BU0tFRF9C SVRfRElTQUJMRShDVFhfQ1RSTF9FTkdJTkVfQ1RYX1JFU1RPUkVfSU5ISUJJVCk7CisJaWYgKGlu aGliaXQpCisJCWN0bCB8PSBDVFhfQ1RSTF9FTkdJTkVfQ1RYX1JFU1RPUkVfSU5ISUJJVDsKKwlp ZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPCAxMSkKKwkJY3RsIHw9IF9NQVNLRURfQklUX0RJ U0FCTEUoQ1RYX0NUUkxfRU5HSU5FX0NUWF9TQVZFX0lOSElCSVQgfAorCQkJCQkgICBDVFhfQ1RS TF9SU19DVFhfRU5BQkxFKTsKKwlyZWdzW0NUWF9DT05URVhUX0NPTlRST0xdID0gY3RsOworCisJ cmVnc1tDVFhfUklOR19DVExdID0gUklOR19DVExfU0laRShyaW5nLT5zaXplKSB8IFJJTkdfVkFM SUQ7Cit9CisKK3N0YXRpYyB1MzIgbHJjX2luZGlyZWN0X2N0eF9vZmZzZXQoY29uc3Qgc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQoreworCXUzMiBpbmRpcmVjdF9jdHhfb2Zmc2V0Owor CisJc3dpdGNoIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSkgeworCWRlZmF1bHQ6CisJCU1JU1NJ TkdfQ0FTRShJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSk7CisJCS8qIGZhbGwgdGhyb3VnaCAqLwor CWNhc2UgMTI6CisJCWluZGlyZWN0X2N0eF9vZmZzZXQgPQorCQkJR0VOMTJfQ1RYX1JDU19JTkRJ UkVDVF9DVFhfT0ZGU0VUX0RFRkFVTFQ7CisJCWJyZWFrOworCWNhc2UgMTE6CisJCWluZGlyZWN0 X2N0eF9vZmZzZXQgPQorCQkJR0VOMTFfQ1RYX1JDU19JTkRJUkVDVF9DVFhfT0ZGU0VUX0RFRkFV TFQ7CisJCWJyZWFrOworCWNhc2UgMTA6CisJCWluZGlyZWN0X2N0eF9vZmZzZXQgPQorCQkJR0VO MTBfQ1RYX1JDU19JTkRJUkVDVF9DVFhfT0ZGU0VUX0RFRkFVTFQ7CisJCWJyZWFrOworCWNhc2Ug OToKKwkJaW5kaXJlY3RfY3R4X29mZnNldCA9CisJCQlHRU45X0NUWF9SQ1NfSU5ESVJFQ1RfQ1RY X09GRlNFVF9ERUZBVUxUOworCQlicmVhazsKKwljYXNlIDg6CisJCWluZGlyZWN0X2N0eF9vZmZz ZXQgPQorCQkJR0VOOF9DVFhfUkNTX0lORElSRUNUX0NUWF9PRkZTRVRfREVGQVVMVDsKKwkJYnJl YWs7CisJfQorCisJcmV0dXJuIGluZGlyZWN0X2N0eF9vZmZzZXQ7Cit9CisKK3N0YXRpYyB2b2lk IGluaXRfd2FfYmJfcmVnX3N0YXRlKHUzMiAqIGNvbnN0IHJlZ3MsCisJCQkJIGNvbnN0IHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKKwkJCQkgdTMyIHBvc19iYl9wZXJfY3R4KQorewor CWNvbnN0IHN0cnVjdCBpOTE1X2N0eF93b3JrYXJvdW5kcyAqIGNvbnN0IHdhX2N0eCA9ICZlbmdp bmUtPndhX2N0eDsKKworCWlmICh3YV9jdHgtPnBlcl9jdHguc2l6ZSkgeworCQljb25zdCB1MzIg Z2d0dF9vZmZzZXQgPSBpOTE1X2dndHRfb2Zmc2V0KHdhX2N0eC0+dm1hKTsKKworCQlyZWdzW3Bv c19iYl9wZXJfY3R4XSA9CisJCQkoZ2d0dF9vZmZzZXQgKyB3YV9jdHgtPnBlcl9jdHgub2Zmc2V0 KSB8IDB4MDE7CisJfQorCisJaWYgKHdhX2N0eC0+aW5kaXJlY3RfY3R4LnNpemUpIHsKKwkJY29u c3QgdTMyIGdndHRfb2Zmc2V0ID0gaTkxNV9nZ3R0X29mZnNldCh3YV9jdHgtPnZtYSk7CisKKwkJ cmVnc1twb3NfYmJfcGVyX2N0eCArIDJdID0KKwkJCShnZ3R0X29mZnNldCArIHdhX2N0eC0+aW5k aXJlY3RfY3R4Lm9mZnNldCkgfAorCQkJKHdhX2N0eC0+aW5kaXJlY3RfY3R4LnNpemUgLyBDQUNI RUxJTkVfQllURVMpOworCisJCXJlZ3NbcG9zX2JiX3Blcl9jdHggKyA0XSA9IGxyY19pbmRpcmVj dF9jdHhfb2Zmc2V0KGVuZ2luZSkgPDwgNjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfcHBn dHRfcmVnX3N0YXRlKHUzMiAqcmVncywgY29uc3Qgc3RydWN0IGk5MTVfcHBndHQgKnBwZ3R0KQor eworCWlmIChpOTE1X3ZtX2lzXzRsdmwoJnBwZ3R0LT52bSkpIHsKKwkJLyogNjRiIFBQR1RUICg0 OGJpdCBjYW5vbmljYWwpCisJCSAqIFBEUDBfREVTQ1JJUFRPUiBjb250YWlucyB0aGUgYmFzZSBh ZGRyZXNzIHRvIFBNTDQgYW5kCisJCSAqIG90aGVyIFBEUCBEZXNjcmlwdG9ycyBhcmUgaWdub3Jl ZC4KKwkJICovCisJCUFTU0lHTl9DVFhfUE1MNChwcGd0dCwgcmVncyk7CisJfSBlbHNlIHsKKwkJ QVNTSUdOX0NUWF9QRFAocHBndHQsIHJlZ3MsIDMpOworCQlBU1NJR05fQ1RYX1BEUChwcGd0dCwg cmVncywgMik7CisJCUFTU0lHTl9DVFhfUERQKHBwZ3R0LCByZWdzLCAxKTsKKwkJQVNTSUdOX0NU WF9QRFAocHBndHQsIHJlZ3MsIDApOworCX0KK30KKworc3RhdGljIHN0cnVjdCBpOTE1X3BwZ3R0 ICp2bV9hbGlhcyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKK3sKKwlpZiAoaTkxNV9p c19nZ3R0KHZtKSkKKwkJcmV0dXJuIGk5MTVfdm1fdG9fZ2d0dCh2bSktPmFsaWFzOworCWVsc2UK KwkJcmV0dXJuIGk5MTVfdm1fdG9fcHBndHQodm0pOworfQorCit2b2lkIGludGVsX2xyY19pbml0 X3JlZ19zdGF0ZSh1MzIgKnJlZ3MsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY29udGV4 dCAqY2UsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCisJ CQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZywKKwkJCSAgICAgIGJvb2wgaW5o aWJpdCkKK3sKKwkvKgorCSAqIEEgY29udGV4dCBpcyBhY3R1YWxseSBhIGJpZyBiYXRjaCBidWZm ZXIgd2l0aCBzZXZlcmFsCisJICogTUlfTE9BRF9SRUdJU1RFUl9JTU0gY29tbWFuZHMgZm9sbG93 ZWQgYnkgKHJlZywgdmFsdWUpIHBhaXJzLiBUaGUKKwkgKiB2YWx1ZXMgd2UgYXJlIHNldHRpbmcg aGVyZSBhcmUgb25seSBmb3IgdGhlIGZpcnN0IGNvbnRleHQgcmVzdG9yZToKKwkgKiBvbiBhIHN1 YnNlcXVlbnQgc2F2ZSwgdGhlIEdQVSB3aWxsIHJlY3JlYXRlIHRoaXMgYmF0Y2hidWZmZXIgd2l0 aCBuZXcKKwkgKiB2YWx1ZXMgKGluY2x1ZGluZyBhbGwgdGhlIG1pc3NpbmcgTUlfTE9BRF9SRUdJ U1RFUl9JTU0gY29tbWFuZHMgdGhhdAorCSAqIHdlIGFyZSBub3QgaW5pdGlhbGl6aW5nIGhlcmUp LgorCSAqLworCXNldF9vZmZzZXRzKHJlZ3MsIHJlZ19vZmZzZXRzKGVuZ2luZSksIGVuZ2luZSwg aW5oaWJpdCk7CisKKwlpbml0X2NvbW1vbl9yZWdfc3RhdGUocmVncywgZW5naW5lLCByaW5nLCBp bmhpYml0KTsKKwlpbml0X3BwZ3R0X3JlZ19zdGF0ZShyZWdzLCB2bV9hbGlhcyhjZS0+dm0pKTsK KworCWluaXRfd2FfYmJfcmVnX3N0YXRlKHJlZ3MsIGVuZ2luZSwKKwkJCSAgICAgSU5URUxfR0VO KGVuZ2luZS0+aTkxNSkgPj0gMTIgPworCQkJICAgICBHRU4xMl9DVFhfQkJfUEVSX0NUWF9QVFIg OgorCQkJICAgICBDVFhfQkJfUEVSX0NUWF9QVFIpOworCisJX19yZXNldF9zdG9wX3JpbmcocmVn cywgZW5naW5lKTsKK30KKwordm9pZCBpbnRlbF9scmNfdXBkYXRlX3JlZ19zdGF0ZShjb25zdCBz dHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCisJCQkJY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQoreworCWNvbnN0IHN0cnVjdCBpbnRlbF9yaW5nICpyaW5nID0gY2UtPnJpbmc7 CisJdTMyICpyZWdzID0gY2UtPmxyY19yZWdfc3RhdGU7CisKKwlHRU1fQlVHX09OKCFpbnRlbF9y aW5nX29mZnNldF92YWxpZChyaW5nLCByaW5nLT5oZWFkKSk7CisJR0VNX0JVR19PTighaW50ZWxf cmluZ19vZmZzZXRfdmFsaWQocmluZywgcmluZy0+dGFpbCkpOworCisJcmVnc1tDVFhfUklOR19T VEFSVF0gPSBpOTE1X2dndHRfb2Zmc2V0KHJpbmctPnZtYSk7CisJcmVnc1tDVFhfUklOR19IRUFE XSA9IHJpbmctPmhlYWQ7CisJcmVnc1tDVFhfUklOR19UQUlMXSA9IHJpbmctPnRhaWw7CisKKwkv KiBSUENTICovCisJaWYgKGVuZ2luZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNTKSB7CisJCXJlZ3Nb Q1RYX1JfUFdSX0NMS19TVEFURV0gPQorCQkJaW50ZWxfc3NldV9tYWtlX3JwY3MoZW5naW5lLT5p OTE1LCAmY2UtPnNzZXUpOworCisJCWk5MTVfb2FfaW5pdF9yZWdfc3RhdGUoY2UsIGVuZ2luZSk7 CisJfQorfQorCit2b2lkIGludGVsX2xyY19yZXNldF9yZWdfc3RhdGUoY29uc3Qgc3RydWN0IGlu dGVsX2NvbnRleHQgKmNlLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSkKK3sKKwl1MzIgKnJlZ3MgPSBjZS0+bHJjX3JlZ19zdGF0ZTsKKworCV9fcmVzZXRf c3RvcF9yaW5nKHJlZ3MsIGVuZ2luZSk7Cit9CisKK3ZvaWQgaW50ZWxfbHJjX3NldF9yZWdfb2Zm c2V0cyh1MzIgKnJlZ3MsIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlzZXRf b2Zmc2V0cyhyZWdzLCByZWdfb2Zmc2V0cyhlbmdpbmUpLCBlbmdpbmUsIGZhbHNlKTsKK30KKwor LyoKKyAqIFRoZSBjb250ZXh0IGRlc2NyaXB0b3IgZW5jb2RlcyB2YXJpb3VzIGF0dHJpYnV0ZXMg b2YgYSBjb250ZXh0LAorICogaW5jbHVkaW5nIGl0cyBHVFQgYWRkcmVzcyBhbmQgc29tZSBmbGFn cy4gQmVjYXVzZSBpdCdzIGZhaXJseQorICogZXhwZW5zaXZlIHRvIGNhbGN1bGF0ZSwgd2UnbGwg anVzdCBkbyBpdCBvbmNlIGFuZCBjYWNoZSB0aGUgcmVzdWx0LAorICogd2hpY2ggcmVtYWlucyB2 YWxpZCB1bnRpbCB0aGUgY29udGV4dCBpcyB1bnBpbm5lZC4KKyAqCisgKiBUaGlzIGlzIHdoYXQg YSBkZXNjcmlwdG9yIGxvb2tzIGxpa2UsIGZyb20gTFNCIHRvIE1TQjo6CisgKgorICogICAgICBi aXRzICAwLTExOiAgICBmbGFncywgR0VOOF9DVFhfKiAoY2FjaGVkIGluIGN0eC0+ZGVzY190ZW1w bGF0ZSkKKyAqICAgICAgYml0cyAxMi0zMTogICAgTFJDQSwgR1RUIGFkZHJlc3Mgb2YgKHRoZSBI V1NQIG9mKSB0aGlzIGNvbnRleHQKKyAqICAgICAgYml0cyAzMi01MjogICAgY3R4IElELCBhIGds b2JhbGx5IHVuaXF1ZSB0YWcgKGhpZ2hlc3QgYml0IHVzZWQgYnkgR3VDKQorICogICAgICBiaXRz IDUzLTU0OiAgICBtYnosIHJlc2VydmVkIGZvciB1c2UgYnkgaGFyZHdhcmUKKyAqICAgICAgYml0 cyA1NS02MzogICAgZ3JvdXAgSUQsIGN1cnJlbnRseSB1bnVzZWQgYW5kIHNldCB0byAwCisgKgor ICogU3RhcnRpbmcgZnJvbSBHZW4xMSwgdGhlIHVwcGVyIGR3b3JkIG9mIHRoZSBkZXNjcmlwdG9y IGhhcyBhIG5ldyBmb3JtYXQ6CisgKgorICogICAgICBiaXRzIDMyLTM2OiAgICByZXNlcnZlZAor ICogICAgICBiaXRzIDM3LTQ3OiAgICBTVyBjb250ZXh0IElECisgKiAgICAgIGJpdHMgNDg6NTM6 ICAgIGVuZ2luZSBpbnN0YW5jZQorICogICAgICBiaXQgNTQ6ICAgICAgICBtYnosIHJlc2VydmVk IGZvciB1c2UgYnkgaGFyZHdhcmUKKyAqICAgICAgYml0cyA1NS02MDogICAgU1cgY291bnRlcgor ICogICAgICBiaXRzIDYxLTYzOiAgICBlbmdpbmUgY2xhc3MKKyAqCisgKiBlbmdpbmUgaW5mbywg U1cgY29udGV4dCBJRCBhbmQgU1cgY291bnRlciBuZWVkIHRvIGZvcm0gYSB1bmlxdWUgbnVtYmVy CisgKiAoQ29udGV4dCBJRCkgcGVyIGxyYy4KKyAqLwordTY0IGludGVsX2xyY19kZXNjcmlwdG9y KHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKKwkJCSBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCit7CisJdTY0IGRlc2M7CisKKwlkZXNjID0gSU5URUxfTEVHQUNZXzMyQl9DT05URVhU OworCWlmIChpOTE1X3ZtX2lzXzRsdmwoY2UtPnZtKSkKKwkJZGVzYyA9IElOVEVMX0xFR0FDWV82 NEJfQ09OVEVYVDsKKwlkZXNjIDw8PSBHRU44X0NUWF9BRERSRVNTSU5HX01PREVfU0hJRlQ7CisK KwlkZXNjIHw9IEdFTjhfQ1RYX1ZBTElEIHwgR0VOOF9DVFhfUFJJVklMRUdFOworCWlmIChJU19H RU4oZW5naW5lLT5pOTE1LCA4KSkKKwkJZGVzYyB8PSBHRU44X0NUWF9MM0xMQ19DT0hFUkVOVDsK KworCWRlc2MgfD0gaTkxNV9nZ3R0X29mZnNldChjZS0+c3RhdGUpOyAvKiBiaXRzIDEyLTMxICov CisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIDMyYml0cyBhcmUgY29waWVkIGludG8gdGhlIE9BIHJl cG9ydHMgKGR3b3JkIDIpLgorCSAqIENvbnNpZGVyIHVwZGF0aW5nIG9hX2dldF9yZW5kZXJfY3R4 X2lkIGluIGk5MTVfcGVyZi5jIHdoZW4gY2hhbmdpbmcKKwkgKiBhbnl0aGluZyBiZWxvdy4KKwkg Ki8KKwlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTEpIHsKKwkJZGVzYyB8PSAodTY0 KWVuZ2luZS0+aW5zdGFuY2UgPDwgR0VOMTFfRU5HSU5FX0lOU1RBTkNFX1NISUZUOworCQkJCQkJ CQkvKiBiaXRzIDQ4LTUzICovCisKKwkJZGVzYyB8PSAodTY0KWVuZ2luZS0+Y2xhc3MgPDwgR0VO MTFfRU5HSU5FX0NMQVNTX1NISUZUOworCQkJCQkJCQkvKiBiaXRzIDYxLTYzICovCisJfQorCisJ cmV0dXJuIGRlc2M7Cit9CisKKyNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9TRUxGVEVT VCkKKyNpbmNsdWRlICJzZWxmdGVzdF9scmMuYyIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9scmMuaAppbmRleCBkZmJjMjE0ZTE0ZjUuLmU2MTcxOTZjODAyYSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfbHJjLmgKQEAgLTMzLDYgKzMzLDcgQEAgc3RydWN0IGk5MTVfZ2VtX2Nv bnRleHQ7CiBzdHJ1Y3QgaTkxNV9yZXF1ZXN0Owogc3RydWN0IGludGVsX2NvbnRleHQ7CiBzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzOworc3RydWN0IGludGVsX3Jpbmc7CiAKIC8qIEV4ZWNsaXN0cyBy ZWdzICovCiAjZGVmaW5lIFJJTkdfRUxTUChiYXNlKQkJCQlfTU1JTygoYmFzZSkgKyAweDIzMCkK QEAgLTUwLDEyICs1MSwxMyBAQCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzOwogCiAjZGVmaW5lCSAg RUxfQ1RSTF9MT0FECQkJCSgxIDw8IDApCiAKLS8qIFRoZSBkb2NzIHNwZWNpZnkgdGhhdCB0aGUg d3JpdGUgcG9pbnRlciB3cmFwcyBhcm91bmQgYWZ0ZXIgNWgsICJBZnRlciBzdGF0dXMKKy8qCisg KiBUaGUgZG9jcyBzcGVjaWZ5IHRoYXQgdGhlIHdyaXRlIHBvaW50ZXIgd3JhcHMgYXJvdW5kIGFm dGVyIDVoLCAiQWZ0ZXIgc3RhdHVzCiAgKiBpcyB3cml0dGVuIG91dCB0byB0aGUgbGFzdCBhdmFp bGFibGUgc3RhdHVzIFFXIGF0IG9mZnNldCA1aCwgdGhpcyBwb2ludGVyCiAgKiB3cmFwcyB0byAw LiIKICAqCiAgKiBUaGVyZWZvcmUsIG9uZSBtdXN0IGluZmVyIHRoYW4gZXZlbiB0aG91Z2ggdGhl cmUgYXJlIDMgYml0cyBhdmFpbGFibGUsIDYgYW5kCi0gKiA3IGFwcGVhciB0byBiZSAqIHJlc2Vy dmVkLgorICogNyBhcHBlYXIgdG8gYmUgcmVzZXJ2ZWQuCiAgKi8KICNkZWZpbmUgR0VOOF9DU0Jf RU5UUklFUyA2CiAjZGVmaW5lIEdFTjhfQ1NCX1BUUl9NQVNLIDB4NwpAQCAtOTUsMTIgKzk3LDI1 IEBAIGludCBpbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbl9zZXR1cChzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUpOwogI2RlZmluZSBMUkNfUFBIV1NQX1NDUkFUQ0gJCTB4MzQKICNkZWZp bmUgTFJDX1BQSFdTUF9TQ1JBVENIX0FERFIJCShMUkNfUFBIV1NQX1NDUkFUQ0ggKiBzaXplb2Yo dTMyKSkKIAotdm9pZCBpbnRlbF9leGVjbGlzdHNfc2V0X2RlZmF1bHRfc3VibWlzc2lvbihzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOworaW50IGludGVsX2xyY19yaW5nX21pX21vZGUo Y29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKKwordm9pZCBpbnRlbF9scmNf c2V0X3JlZ19vZmZzZXRzKHUzMiAqcmVncywgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KTsKKwordm9pZCBpbnRlbF9scmNfaW5pdF9yZWdfc3RhdGUodTMyICpyZWdfc3RhdGUsCisJCQkg ICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCisJCQkgICAgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxf cmluZyAqcmluZywKKwkJCSAgICAgIGJvb2wgaW5oaWJpdCk7CiAKLXZvaWQgaW50ZWxfbHJfY29u dGV4dF9yZXNldChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCi0JCQkgICAgc3RydWN0 IGludGVsX2NvbnRleHQgKmNlLAotCQkJICAgIHUzMiBoZWFkLAotCQkJICAgIGJvb2wgc2NydWIp Owordm9pZCBpbnRlbF9scmNfdXBkYXRlX3JlZ19zdGF0ZShjb25zdCBzdHJ1Y3QgaW50ZWxfY29u dGV4dCAqY2UsCisJCQkJY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKK3Zv aWQgaW50ZWxfbHJjX3Jlc2V0X3JlZ19zdGF0ZShjb25zdCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAq Y2UsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKKwor dTY0IGludGVsX2xyY19kZXNjcmlwdG9yKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKKwkJCSBz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOworCit2b2lkIGludGVsX2V4ZWNsaXN0c19z ZXRfZGVmYXVsdF9zdWJtaXNzaW9uKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7CiAK IHZvaWQgaW50ZWxfZXhlY2xpc3RzX3Nob3dfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lLAogCQkJCSAgIHN0cnVjdCBkcm1fcHJpbnRlciAqbSwKQEAgLTEyNyw0ICsxNDIs NyBAQCBpbnRlbF92aXJ0dWFsX2VuZ2luZV9nZXRfc2libGluZyhzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUsCiBib29sCiBpbnRlbF9lbmdpbmVfaW5fZXhlY2xpc3RzX3N1Ym1pc3Npb25f bW9kZShjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwogCitpbnQgaW50ZWxf ZW5naW5lX2luaXRfd29ya2Fyb3VuZF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Owordm9pZCBpbnRlbF9lbmdpbmVfZmluaV93b3JrYXJvdW5kX2JiKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSk7CisKICNlbmRpZiAvKiBfSU5URUxfTFJDX0hfICovCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9leGVjbGlzdHMuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2V4ZWNsaXN0cy5jCmluZGV4IDVlMDRlY2I2MWRjYy4u ZWFjMmI3ZjA5MDgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVz dF9leGVjbGlzdHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9leGVj bGlzdHMuYwpAQCAtNiw5ICs2LDEwIEBACiAKICNpbmNsdWRlIDxsaW51eC9wcmltZV9udW1iZXJz Lmg+CiAKLSNpbmNsdWRlICJnZW0vaTkxNV9nZW1fcG0uaCIKICNpbmNsdWRlICJndC9pbnRlbF9l bmdpbmVfaGVhcnRiZWF0LmgiCisjaW5jbHVkZSAiZ3QvaW50ZWxfZW5naW5lX3BtLmgiCiAjaW5j bHVkZSAiZ3QvaW50ZWxfcmVzZXQuaCIKKyNpbmNsdWRlICJndC9pbnRlbF9yaW5nLmgiCiAKICNp bmNsdWRlICJpOTE1X3NlbGZ0ZXN0LmgiCiAjaW5jbHVkZSAic2VsZnRlc3RzL2k5MTVfcmFuZG9t LmgiCkBAIC0yMDEsNyArMjAyLDcgQEAgc3RhdGljIGludCBsaXZlX3VubGl0ZV9yZXN0b3JlKHN0 cnVjdCBpbnRlbF9ndCAqZ3QsIGludCBwcmlvKQogCQl9CiAJCUdFTV9CVUdfT04oIWNlWzFdLT5y aW5nLT5zaXplKTsKIAkJaW50ZWxfcmluZ19yZXNldChjZVsxXS0+cmluZywgY2VbMV0tPnJpbmct PnNpemUgLyAyKTsKLQkJX19leGVjbGlzdHNfdXBkYXRlX3JlZ19zdGF0ZShjZVsxXSwgZW5naW5l KTsKKwkJaW50ZWxfbHJjX3VwZGF0ZV9yZWdfc3RhdGUoY2VbMV0sIGVuZ2luZSk7CiAKIAkJcnFb MF0gPSBpZ3Rfc3Bpbm5lcl9jcmVhdGVfcmVxdWVzdCgmc3BpbiwgY2VbMF0sIE1JX0FSQl9DSEVD Syk7CiAJCWlmIChJU19FUlIocnFbMF0pKSB7CkBAIC0zNzQxLDQ5NiArMzc0MiwzIEBAIGludCBp bnRlbF9leGVjbGlzdHNfbGl2ZV9zZWxmdGVzdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUpCiAKIAlyZXR1cm4gaW50ZWxfZ3RfbGl2ZV9zdWJ0ZXN0cyh0ZXN0cywgJmk5MTUtPmd0KTsK IH0KLQotc3RhdGljIHZvaWQgaGV4ZHVtcChjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCi17 Ci0JY29uc3Qgc2l6ZV90IHJvd3NpemUgPSA4ICogc2l6ZW9mKHUzMik7Ci0JY29uc3Qgdm9pZCAq cHJldiA9IE5VTEw7Ci0JYm9vbCBza2lwID0gZmFsc2U7Ci0Jc2l6ZV90IHBvczsKLQotCWZvciAo cG9zID0gMDsgcG9zIDwgbGVuOyBwb3MgKz0gcm93c2l6ZSkgewotCQljaGFyIGxpbmVbMTI4XTsK LQotCQlpZiAocHJldiAmJiAhbWVtY21wKHByZXYsIGJ1ZiArIHBvcywgcm93c2l6ZSkpIHsKLQkJ CWlmICghc2tpcCkgewotCQkJCXByX2luZm8oIipcbiIpOwotCQkJCXNraXAgPSB0cnVlOwotCQkJ fQotCQkJY29udGludWU7Ci0JCX0KLQotCQlXQVJOX09OX09OQ0UoaGV4X2R1bXBfdG9fYnVmZmVy KGJ1ZiArIHBvcywgbGVuIC0gcG9zLAotCQkJCQkJcm93c2l6ZSwgc2l6ZW9mKHUzMiksCi0JCQkJ CQlsaW5lLCBzaXplb2YobGluZSksCi0JCQkJCQlmYWxzZSkgPj0gc2l6ZW9mKGxpbmUpKTsKLQkJ cHJfaW5mbygiWyUwNHp4XSAlc1xuIiwgcG9zLCBsaW5lKTsKLQotCQlwcmV2ID0gYnVmICsgcG9z OwotCQlza2lwID0gZmFsc2U7Ci0JfQotfQotCi1zdGF0aWMgaW50IGxpdmVfbHJjX2xheW91dCh2 b2lkICphcmcpCi17Ci0Jc3RydWN0IGludGVsX2d0ICpndCA9IGFyZzsKLQlzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmU7Ci0JZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Ci0JdTMyICpscmM7 Ci0JaW50IGVycjsKLQotCS8qCi0JICogQ2hlY2sgdGhlIHJlZ2lzdGVycyBvZmZzZXRzIHdlIHVz ZSB0byBjcmVhdGUgdGhlIGluaXRpYWwgcmVnIHN0YXRlCi0JICogbWF0Y2ggdGhlIGxheW91dCBz YXZlZCBieSBIVy4KLQkgKi8KLQotCWxyYyA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVM KTsKLQlpZiAoIWxyYykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQllcnIgPSAwOwotCWZvcl9lYWNo X2VuZ2luZShlbmdpbmUsIGd0LCBpZCkgewotCQl1MzIgKmh3OwotCQlpbnQgZHc7Ci0KLQkJaWYg KCFlbmdpbmUtPmRlZmF1bHRfc3RhdGUpCi0JCQljb250aW51ZTsKLQotCQlodyA9IGk5MTVfZ2Vt X29iamVjdF9waW5fbWFwKGVuZ2luZS0+ZGVmYXVsdF9zdGF0ZSwKLQkJCQkJICAgICBJOTE1X01B UF9XQik7Ci0JCWlmIChJU19FUlIoaHcpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGh3KTsKLQkJCWJy ZWFrOwotCQl9Ci0JCWh3ICs9IExSQ19TVEFURV9QTiAqIFBBR0VfU0laRSAvIHNpemVvZigqaHcp OwotCi0JCWV4ZWNsaXN0c19pbml0X3JlZ19zdGF0ZShtZW1zZXQobHJjLCBQT0lTT05fSU5VU0Us IFBBR0VfU0laRSksCi0JCQkJCSBlbmdpbmUtPmtlcm5lbF9jb250ZXh0LAotCQkJCQkgZW5naW5l LAotCQkJCQkgZW5naW5lLT5rZXJuZWxfY29udGV4dC0+cmluZywKLQkJCQkJIHRydWUpOwotCi0J CWR3ID0gMDsKLQkJZG8gewotCQkJdTMyIGxyaSA9IGh3W2R3XTsKLQotCQkJaWYgKGxyaSA9PSAw KSB7Ci0JCQkJZHcrKzsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJaWYgKGxyY1tkd10gPT0g MCkgewotCQkJCXByX2RlYnVnKCIlczogc2tpcHBlZCBpbnN0cnVjdGlvbiAleCBhdCBkd29yZCAl ZFxuIiwKLQkJCQkJIGVuZ2luZS0+bmFtZSwgbHJpLCBkdyk7Ci0JCQkJZHcrKzsKLQkJCQljb250 aW51ZTsKLQkJCX0KLQotCQkJaWYgKChscmkgJiBHRU5NQVNLKDMxLCAyMykpICE9IE1JX0lOU1RS KDB4MjIsIDApKSB7Ci0JCQkJcHJfZXJyKCIlczogRXhwZWN0ZWQgTFJJIGNvbW1hbmQgYXQgZHdv cmQgJWQsIGZvdW5kICUwOHhcbiIsCi0JCQkJICAgICAgIGVuZ2luZS0+bmFtZSwgZHcsIGxyaSk7 Ci0JCQkJZXJyID0gLUVJTlZBTDsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJaWYgKGxyY1tkd10g IT0gbHJpKSB7Ci0JCQkJcHJfZXJyKCIlczogTFJJIGNvbW1hbmQgbWlzbWF0Y2ggYXQgZHdvcmQg JWQsIGV4cGVjdGVkICUwOHggZm91bmQgJTA4eFxuIiwKLQkJCQkgICAgICAgZW5naW5lLT5uYW1l LCBkdywgbHJpLCBscmNbZHddKTsKLQkJCQllcnIgPSAtRUlOVkFMOwotCQkJCWJyZWFrOwotCQkJ fQotCi0JCQlscmkgJj0gMHg3ZjsKLQkJCWxyaSsrOwotCQkJZHcrKzsKLQotCQkJd2hpbGUgKGxy aSkgewotCQkJCWlmIChod1tkd10gIT0gbHJjW2R3XSkgewotCQkJCQlwcl9lcnIoIiVzOiBEaWZm ZXJlbnQgcmVnaXN0ZXJzIGZvdW5kIGF0IGR3b3JkICVkLCBleHBlY3RlZCAleCwgZm91bmQgJXhc biIsCi0JCQkJCSAgICAgICBlbmdpbmUtPm5hbWUsIGR3LCBod1tkd10sIGxyY1tkd10pOwotCQkJ CQllcnIgPSAtRUlOVkFMOwotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCQkvKgotCQkJCSAqIFNr aXAgb3ZlciB0aGUgYWN0dWFsIHJlZ2lzdGVyIHZhbHVlIGFzIHdlCi0JCQkJICogZXhwZWN0IHRo YXQgdG8gZGlmZmVyLgotCQkJCSAqLwotCQkJCWR3ICs9IDI7Ci0JCQkJbHJpIC09IDI7Ci0JCQl9 Ci0JCX0gd2hpbGUgKChscmNbZHddICYgfkJJVCgwKSkgIT0gTUlfQkFUQ0hfQlVGRkVSX0VORCk7 Ci0KLQkJaWYgKGVycikgewotCQkJcHJfaW5mbygiJXM6IEhXIHJlZ2lzdGVyIGltYWdlOlxuIiwg ZW5naW5lLT5uYW1lKTsKLQkJCWhleGR1bXAoaHcsIFBBR0VfU0laRSk7Ci0KLQkJCXByX2luZm8o IiVzOiBTVyByZWdpc3RlciBpbWFnZTpcbiIsIGVuZ2luZS0+bmFtZSk7Ci0JCQloZXhkdW1wKGxy YywgUEFHRV9TSVpFKTsKLQkJfQotCi0JCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAoZW5naW5l LT5kZWZhdWx0X3N0YXRlKTsKLQkJaWYgKGVycikKLQkJCWJyZWFrOwotCX0KLQotCWtmcmVlKGxy Yyk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBmaW5kX29mZnNldChjb25zdCB1MzIg KmxyaSwgdTMyIG9mZnNldCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBQQUdFX1NJ WkUgLyBzaXplb2YodTMyKTsgaSsrKQotCQlpZiAobHJpW2ldID09IG9mZnNldCkKLQkJCXJldHVy biBpOwotCi0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW50IGxpdmVfbHJjX2ZpeGVkKHZvaWQg KmFyZykKLXsKLQlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gYXJnOwotCXN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZTsKLQllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKLQlpbnQgZXJyID0gMDsK LQotCS8qCi0JICogQ2hlY2sgdGhlIGFzc3VtZWQgcmVnaXN0ZXIgb2Zmc2V0cyBtYXRjaCB0aGUg YWN0dWFsIGxvY2F0aW9ucyBpbgotCSAqIHRoZSBjb250ZXh0IGltYWdlLgotCSAqLwotCi0JZm9y X2VhY2hfZW5naW5lKGVuZ2luZSwgZ3QsIGlkKSB7Ci0JCWNvbnN0IHN0cnVjdCB7Ci0JCQl1MzIg cmVnOwotCQkJdTMyIG9mZnNldDsKLQkJCWNvbnN0IGNoYXIgKm5hbWU7Ci0JCX0gdGJsW10gPSB7 Ci0JCQl7Ci0JCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19TVEFSVChlbmdpbmUtPm1taW9f YmFzZSkpLAotCQkJCUNUWF9SSU5HX1NUQVJUIC0gMSwKLQkJCQkiUklOR19TVEFSVCIKLQkJCX0s Ci0JCQl7Ci0JCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19DVEwoZW5naW5lLT5tbWlvX2Jh c2UpKSwKLQkJCQlDVFhfUklOR19DVEwgLSAxLAotCQkJCSJSSU5HX0NUTCIKLQkJCX0sCi0JCQl7 Ci0JCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19IRUFEKGVuZ2luZS0+bW1pb19iYXNlKSks Ci0JCQkJQ1RYX1JJTkdfSEVBRCAtIDEsCi0JCQkJIlJJTkdfSEVBRCIKLQkJCX0sCi0JCQl7Ci0J CQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19UQUlMKGVuZ2luZS0+bW1pb19iYXNlKSksCi0J CQkJQ1RYX1JJTkdfVEFJTCAtIDEsCi0JCQkJIlJJTkdfVEFJTCIKLQkJCX0sCi0JCQl7Ci0JCQkJ aTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19NSV9NT0RFKGVuZ2luZS0+bW1pb19iYXNlKSksCi0J CQkJbHJjX3JpbmdfbWlfbW9kZShlbmdpbmUpLAotCQkJCSJSSU5HX01JX01PREUiCi0JCQl9LAot CQkJewotCQkJCWk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfQkJTVEFURShlbmdpbmUtPm1taW9f YmFzZSkpLAotCQkJCUNUWF9CQl9TVEFURSAtIDEsCi0JCQkJIkJCX1NUQVRFIgotCQkJfSwKLQkJ CXsgfSwKLQkJfSwgKnQ7Ci0JCXUzMiAqaHc7Ci0KLQkJaWYgKCFlbmdpbmUtPmRlZmF1bHRfc3Rh dGUpCi0JCQljb250aW51ZTsKLQotCQlodyA9IGk5MTVfZ2VtX29iamVjdF9waW5fbWFwKGVuZ2lu ZS0+ZGVmYXVsdF9zdGF0ZSwKLQkJCQkJICAgICBJOTE1X01BUF9XQik7Ci0JCWlmIChJU19FUlIo aHcpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGh3KTsKLQkJCWJyZWFrOwotCQl9Ci0JCWh3ICs9IExS Q19TVEFURV9QTiAqIFBBR0VfU0laRSAvIHNpemVvZigqaHcpOwotCi0JCWZvciAodCA9IHRibDsg dC0+bmFtZTsgdCsrKSB7Ci0JCQlpbnQgZHcgPSBmaW5kX29mZnNldChodywgdC0+cmVnKTsKLQot CQkJaWYgKGR3ICE9IHQtPm9mZnNldCkgewotCQkJCXByX2VycigiJXM6IE9mZnNldCBmb3IgJXMg WzB4JXhdIG1pc21hdGNoLCBmb3VuZCAleCwgZXhwZWN0ZWQgJXhcbiIsCi0JCQkJICAgICAgIGVu Z2luZS0+bmFtZSwKLQkJCQkgICAgICAgdC0+bmFtZSwKLQkJCQkgICAgICAgdC0+cmVnLAotCQkJ CSAgICAgICBkdywKLQkJCQkgICAgICAgdC0+b2Zmc2V0KTsKLQkJCQllcnIgPSAtRUlOVkFMOwot CQkJfQotCQl9Ci0KLQkJaTkxNV9nZW1fb2JqZWN0X3VucGluX21hcChlbmdpbmUtPmRlZmF1bHRf c3RhdGUpOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgX19saXZlX2xyY19z dGF0ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCi0JCQkgICAgc3RydWN0IGk5MTVf dm1hICpzY3JhdGNoKQotewotCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZTsKLQlzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpycTsKLQllbnVtIHsKLQkJUklOR19TVEFSVF9JRFggPSAwLAotCQlSSU5HX1RB SUxfSURYLAotCQlNQVhfSURYCi0JfTsKLQl1MzIgZXhwZWN0ZWRbTUFYX0lEWF07Ci0JdTMyICpj czsKLQlpbnQgZXJyOwotCWludCBuOwotCi0JY2UgPSBpbnRlbF9jb250ZXh0X2NyZWF0ZShlbmdp bmUpOwotCWlmIChJU19FUlIoY2UpKQotCQlyZXR1cm4gUFRSX0VSUihjZSk7Ci0KLQllcnIgPSBp bnRlbF9jb250ZXh0X3BpbihjZSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcHV0OwotCi0JcnEg PSBpOTE1X3JlcXVlc3RfY3JlYXRlKGNlKTsKLQlpZiAoSVNfRVJSKHJxKSkgewotCQllcnIgPSBQ VFJfRVJSKHJxKTsKLQkJZ290byBlcnJfdW5waW47Ci0JfQotCi0JY3MgPSBpbnRlbF9yaW5nX2Jl Z2luKHJxLCA0ICogTUFYX0lEWCk7Ci0JaWYgKElTX0VSUihjcykpIHsKLQkJZXJyID0gUFRSX0VS Uihjcyk7Ci0JCWk5MTVfcmVxdWVzdF9hZGQocnEpOwotCQlnb3RvIGVycl91bnBpbjsKLQl9Ci0K LQkqY3MrKyA9IE1JX1NUT1JFX1JFR0lTVEVSX01FTV9HRU44IHwgTUlfVVNFX0dHVFQ7Ci0JKmNz KysgPSBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX1NUQVJUKGVuZ2luZS0+bW1pb19iYXNlKSk7 Ci0JKmNzKysgPSBpOTE1X2dndHRfb2Zmc2V0KHNjcmF0Y2gpICsgUklOR19TVEFSVF9JRFggKiBz aXplb2YodTMyKTsKLQkqY3MrKyA9IDA7Ci0KLQlleHBlY3RlZFtSSU5HX1NUQVJUX0lEWF0gPSBp OTE1X2dndHRfb2Zmc2V0KGNlLT5yaW5nLT52bWEpOwotCi0JKmNzKysgPSBNSV9TVE9SRV9SRUdJ U1RFUl9NRU1fR0VOOCB8IE1JX1VTRV9HR1RUOwotCSpjcysrID0gaTkxNV9tbWlvX3JlZ19vZmZz ZXQoUklOR19UQUlMKGVuZ2luZS0+bW1pb19iYXNlKSk7Ci0JKmNzKysgPSBpOTE1X2dndHRfb2Zm c2V0KHNjcmF0Y2gpICsgUklOR19UQUlMX0lEWCAqIHNpemVvZih1MzIpOwotCSpjcysrID0gMDsK LQotCWk5MTVfcmVxdWVzdF9nZXQocnEpOwotCWk5MTVfcmVxdWVzdF9hZGQocnEpOwotCi0JaW50 ZWxfZW5naW5lX2ZsdXNoX3N1Ym1pc3Npb24oZW5naW5lKTsKLQlleHBlY3RlZFtSSU5HX1RBSUxf SURYXSA9IGNlLT5yaW5nLT50YWlsOwotCi0JaWYgKGk5MTVfcmVxdWVzdF93YWl0KHJxLCAwLCBI WiAvIDUpIDwgMCkgewotCQllcnIgPSAtRVRJTUU7Ci0JCWdvdG8gZXJyX3JxOwotCX0KLQotCWNz ID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAoc2NyYXRjaC0+b2JqLCBJOTE1X01BUF9XQik7Ci0J aWYgKElTX0VSUihjcykpIHsKLQkJZXJyID0gUFRSX0VSUihjcyk7Ci0JCWdvdG8gZXJyX3JxOwot CX0KLQotCWZvciAobiA9IDA7IG4gPCBNQVhfSURYOyBuKyspIHsKLQkJaWYgKGNzW25dICE9IGV4 cGVjdGVkW25dKSB7Ci0JCQlwcl9lcnIoIiVzOiBTdG9yZWQgcmVnaXN0ZXJbJWRdIHZhbHVlWzB4 JXhdIGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWRbMHgleF1cbiIsCi0JCQkgICAgICAgZW5naW5lLT5u YW1lLCBuLCBjc1tuXSwgZXhwZWN0ZWRbbl0pOwotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWJyZWFr OwotCQl9Ci0JfQotCi0JaTkxNV9nZW1fb2JqZWN0X3VucGluX21hcChzY3JhdGNoLT5vYmopOwot Ci1lcnJfcnE6Ci0JaTkxNV9yZXF1ZXN0X3B1dChycSk7Ci1lcnJfdW5waW46Ci0JaW50ZWxfY29u dGV4dF91bnBpbihjZSk7Ci1lcnJfcHV0OgotCWludGVsX2NvbnRleHRfcHV0KGNlKTsKLQlyZXR1 cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGxpdmVfbHJjX3N0YXRlKHZvaWQgKmFyZykKLXsKLQlz dHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gYXJnOwotCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZTsKLQlzdHJ1Y3QgaTkxNV92bWEgKnNjcmF0Y2g7Ci0JZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7 Ci0JaW50IGVyciA9IDA7Ci0KLQkvKgotCSAqIENoZWNrIHRoZSBsaXZlIHJlZ2lzdGVyIHN0YXRl IG1hdGNoZXMgd2hhdCB3ZSBleHBlY3QgZm9yIHRoaXMKLQkgKiBpbnRlbF9jb250ZXh0LgotCSAq LwotCi0Jc2NyYXRjaCA9IGNyZWF0ZV9zY3JhdGNoKGd0KTsKLQlpZiAoSVNfRVJSKHNjcmF0Y2gp KQotCQlyZXR1cm4gUFRSX0VSUihzY3JhdGNoKTsKLQotCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUs IGd0LCBpZCkgewotCQllcnIgPSBfX2xpdmVfbHJjX3N0YXRlKGVuZ2luZSwgc2NyYXRjaCk7Ci0J CWlmIChlcnIpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoaWd0X2ZsdXNoX3Rlc3QoZ3QtPmk5MTUp KQotCQllcnIgPSAtRUlPOwotCi0JaTkxNV92bWFfdW5waW5fYW5kX3JlbGVhc2UoJnNjcmF0Y2gs IDApOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgZ3ByX21ha2VfZGlydHkoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQotewotCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOwot CXUzMiAqY3M7Ci0JaW50IG47Ci0KLQlycSA9IGludGVsX2VuZ2luZV9jcmVhdGVfa2VybmVsX3Jl cXVlc3QoZW5naW5lKTsKLQlpZiAoSVNfRVJSKHJxKSkKLQkJcmV0dXJuIFBUUl9FUlIocnEpOwot Ci0JY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCAyICogTlVNX0dQUl9EVyArIDIpOwotCWlmIChJ U19FUlIoY3MpKSB7Ci0JCWk5MTVfcmVxdWVzdF9hZGQocnEpOwotCQlyZXR1cm4gUFRSX0VSUihj cyk7Ci0JfQotCi0JKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTShOVU1fR1BSX0RXKTsKLQlm b3IgKG4gPSAwOyBuIDwgTlVNX0dQUl9EVzsgbisrKSB7Ci0JCSpjcysrID0gQ1NfR1BSKGVuZ2lu ZSwgbik7Ci0JCSpjcysrID0gU1RBQ0tfTUFHSUM7Ci0JfQotCSpjcysrID0gTUlfTk9PUDsKLQot CWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwotCWk5MTVfcmVxdWVzdF9hZGQocnEpOwotCi0J cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19saXZlX2dwcl9jbGVhcihzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUsCi0JCQkgICAgc3RydWN0IGk5MTVfdm1hICpzY3JhdGNoKQotewot CXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZTsKLQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKLQl1 MzIgKmNzOwotCWludCBlcnI7Ci0JaW50IG47Ci0KLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkx NSkgPCA5ICYmIGVuZ2luZS0+Y2xhc3MgIT0gUkVOREVSX0NMQVNTKQotCQlyZXR1cm4gMDsgLyog R1BSIG9ubHkgb24gcmNzMCBmb3IgZ2VuOCAqLwotCi0JZXJyID0gZ3ByX21ha2VfZGlydHkoZW5n aW5lKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JY2UgPSBpbnRlbF9jb250ZXh0X2Ny ZWF0ZShlbmdpbmUpOwotCWlmIChJU19FUlIoY2UpKQotCQlyZXR1cm4gUFRSX0VSUihjZSk7Ci0K LQlycSA9IGludGVsX2NvbnRleHRfY3JlYXRlX3JlcXVlc3QoY2UpOwotCWlmIChJU19FUlIocnEp KSB7Ci0JCWVyciA9IFBUUl9FUlIocnEpOwotCQlnb3RvIGVycl9wdXQ7Ci0JfQotCi0JY3MgPSBp bnRlbF9yaW5nX2JlZ2luKHJxLCA0ICogTlVNX0dQUl9EVyk7Ci0JaWYgKElTX0VSUihjcykpIHsK LQkJZXJyID0gUFRSX0VSUihjcyk7Ci0JCWk5MTVfcmVxdWVzdF9hZGQocnEpOwotCQlnb3RvIGVy cl9wdXQ7Ci0JfQotCi0JZm9yIChuID0gMDsgbiA8IE5VTV9HUFJfRFc7IG4rKykgewotCQkqY3Mr KyA9IE1JX1NUT1JFX1JFR0lTVEVSX01FTV9HRU44IHwgTUlfVVNFX0dHVFQ7Ci0JCSpjcysrID0g Q1NfR1BSKGVuZ2luZSwgbik7Ci0JCSpjcysrID0gaTkxNV9nZ3R0X29mZnNldChzY3JhdGNoKSAr IG4gKiBzaXplb2YodTMyKTsKLQkJKmNzKysgPSAwOwotCX0KLQotCWk5MTVfcmVxdWVzdF9nZXQo cnEpOwotCWk5MTVfcmVxdWVzdF9hZGQocnEpOwotCi0JaWYgKGk5MTVfcmVxdWVzdF93YWl0KHJx LCAwLCBIWiAvIDUpIDwgMCkgewotCQllcnIgPSAtRVRJTUU7Ci0JCWdvdG8gZXJyX3JxOwotCX0K LQotCWNzID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAoc2NyYXRjaC0+b2JqLCBJOTE1X01BUF9X Qik7Ci0JaWYgKElTX0VSUihjcykpIHsKLQkJZXJyID0gUFRSX0VSUihjcyk7Ci0JCWdvdG8gZXJy X3JxOwotCX0KLQotCWZvciAobiA9IDA7IG4gPCBOVU1fR1BSX0RXOyBuKyspIHsKLQkJaWYgKGNz W25dKSB7Ci0JCQlwcl9lcnIoIiVzOiBHUFJbJWRdLiVzIHdhcyBub3QgemVybywgZm91bmQgMHgl MDh4IVxuIiwKLQkJCSAgICAgICBlbmdpbmUtPm5hbWUsCi0JCQkgICAgICAgbiAvIDIsIG4gJiAx ID8gInVkdyIgOiAibGR3IiwKLQkJCSAgICAgICBjc1tuXSk7Ci0JCQllcnIgPSAtRUlOVkFMOwot CQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKHNjcmF0Y2gt Pm9iaik7Ci0KLWVycl9ycToKLQlpOTE1X3JlcXVlc3RfcHV0KHJxKTsKLWVycl9wdXQ6Ci0JaW50 ZWxfY29udGV4dF9wdXQoY2UpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgbGl2ZV9n cHJfY2xlYXIodm9pZCAqYXJnKQotewotCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBhcmc7Ci0Jc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwotCXN0cnVjdCBpOTE1X3ZtYSAqc2NyYXRjaDsK LQllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKLQlpbnQgZXJyID0gMDsKLQotCS8qCi0JICogQ2hl Y2sgdGhhdCBHUFIgcmVnaXN0ZXJzIGFyZSBjbGVhcmVkIGluIG5ldyBjb250ZXh0cyBhcyB3ZSBu ZWVkCi0JICogdG8gYXZvaWQgbGVha2luZyBhbnkgaW5mb3JtYXRpb24gZnJvbSBwcmV2aW91cyBj b250ZXh0cy4KLQkgKi8KLQotCXNjcmF0Y2ggPSBjcmVhdGVfc2NyYXRjaChndCk7Ci0JaWYgKElT X0VSUihzY3JhdGNoKSkKLQkJcmV0dXJuIFBUUl9FUlIoc2NyYXRjaCk7Ci0KLQlmb3JfZWFjaF9l bmdpbmUoZW5naW5lLCBndCwgaWQpIHsKLQkJZXJyID0gX19saXZlX2dwcl9jbGVhcihlbmdpbmUs IHNjcmF0Y2gpOwotCQlpZiAoZXJyKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKGlndF9mbHVzaF90 ZXN0KGd0LT5pOTE1KSkKLQkJZXJyID0gLUVJTzsKLQotCWk5MTVfdm1hX3VucGluX2FuZF9yZWxl YXNlKCZzY3JhdGNoLCAwKTsKLQlyZXR1cm4gZXJyOwotfQotCi1pbnQgaW50ZWxfbHJjX2xpdmVf c2VsZnRlc3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQotewotCXN0YXRpYyBjb25z dCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10gPSB7Ci0JCVNVQlRFU1QobGl2ZV9scmNfbGF5 b3V0KSwKLQkJU1VCVEVTVChsaXZlX2xyY19maXhlZCksCi0JCVNVQlRFU1QobGl2ZV9scmNfc3Rh dGUpLAotCQlTVUJURVNUKGxpdmVfZ3ByX2NsZWFyKSwKLQl9OwotCi0JaWYgKCFIQVNfTE9HSUNB TF9SSU5HX0NPTlRFWFRTKGk5MTUpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBpbnRlbF9ndF9s aXZlX3N1YnRlc3RzKHRlc3RzLCAmaTkxNS0+Z3QpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9z ZWxmdGVzdF9scmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmQz NjdmMjg2ZGIxNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3Nl bGZ0ZXN0X2xyYy5jCkBAIC0wLDAgKzEsNTQ0IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogTUlUCisvKgorICogQ29weXJpZ2h0IMKpIDIwMTggSW50ZWwgQ29ycG9yYXRpb24KKyAqLwor CisjaW5jbHVkZSA8bGludXgvcHJpbWVfbnVtYmVycy5oPgorCisjaW5jbHVkZSAiZ3QvaW50ZWxf ZW5naW5lX2hlYXJ0YmVhdC5oIgorI2luY2x1ZGUgImd0L2ludGVsX2VuZ2luZV9wbS5oIgorI2lu Y2x1ZGUgImd0L2ludGVsX3Jlc2V0LmgiCisjaW5jbHVkZSAiZ3QvaW50ZWxfcmluZy5oIgorCisj aW5jbHVkZSAiaTkxNV9zZWxmdGVzdC5oIgorI2luY2x1ZGUgInNlbGZ0ZXN0cy9pOTE1X3JhbmRv bS5oIgorI2luY2x1ZGUgInNlbGZ0ZXN0cy9pZ3RfZmx1c2hfdGVzdC5oIgorI2luY2x1ZGUgInNl bGZ0ZXN0cy9pZ3RfbGl2ZV90ZXN0LmgiCisjaW5jbHVkZSAic2VsZnRlc3RzL2lndF9zcGlubmVy LmgiCisjaW5jbHVkZSAic2VsZnRlc3RzL2xpYl9zd19mZW5jZS5oIgorCisjaW5jbHVkZSAiZ2Vt L3NlbGZ0ZXN0cy9pZ3RfZ2VtX3V0aWxzLmgiCisjaW5jbHVkZSAiZ2VtL3NlbGZ0ZXN0cy9tb2Nr X2NvbnRleHQuaCIKKworI2RlZmluZSBDU19HUFIoZW5naW5lLCBuKSAoKGVuZ2luZSktPm1taW9f YmFzZSArIDB4NjAwICsgKG4pICogNCkKKyNkZWZpbmUgTlVNX0dQUl9EVyAoMTYgKiAyKSAvKiBl YWNoIEdQUiBpcyAyIGR3b3JkcyAqLworCitzdGF0aWMgc3RydWN0IGk5MTVfdm1hICpjcmVhdGVf c2NyYXRjaChzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmo7CisJc3RydWN0IGk5MTVfdm1hICp2bWE7CisJaW50IGVycjsKKworCW9iaiA9IGk5 MTVfZ2VtX29iamVjdF9jcmVhdGVfaW50ZXJuYWwoZ3QtPmk5MTUsIFBBR0VfU0laRSk7CisJaWYg KElTX0VSUihvYmopKQorCQlyZXR1cm4gRVJSX0NBU1Qob2JqKTsKKworCWk5MTVfZ2VtX29iamVj dF9zZXRfY2FjaGVfY29oZXJlbmN5KG9iaiwgSTkxNV9DQUNISU5HX0NBQ0hFRCk7CisKKwl2bWEg PSBpOTE1X3ZtYV9pbnN0YW5jZShvYmosICZndC0+Z2d0dC0+dm0sIE5VTEwpOworCWlmIChJU19F UlIodm1hKSkgeworCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisJCXJldHVybiB2bWE7CisJ fQorCisJZXJyID0gaTkxNV92bWFfcGluKHZtYSwgMCwgMCwgUElOX0dMT0JBTCk7CisJaWYgKGVy cikgeworCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisJCXJldHVybiBFUlJfUFRSKGVycik7 CisJfQorCisJcmV0dXJuIHZtYTsKK30KKworc3RhdGljIHZvaWQgaGV4ZHVtcChjb25zdCB2b2lk ICpidWYsIHNpemVfdCBsZW4pCit7CisJY29uc3Qgc2l6ZV90IHJvd3NpemUgPSA4ICogc2l6ZW9m KHUzMik7CisJY29uc3Qgdm9pZCAqcHJldiA9IE5VTEw7CisJYm9vbCBza2lwID0gZmFsc2U7CisJ c2l6ZV90IHBvczsKKworCWZvciAocG9zID0gMDsgcG9zIDwgbGVuOyBwb3MgKz0gcm93c2l6ZSkg eworCQljaGFyIGxpbmVbMTI4XTsKKworCQlpZiAocHJldiAmJiAhbWVtY21wKHByZXYsIGJ1ZiAr IHBvcywgcm93c2l6ZSkpIHsKKwkJCWlmICghc2tpcCkgeworCQkJCXByX2luZm8oIipcbiIpOwor CQkJCXNraXAgPSB0cnVlOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQlXQVJOX09OX09O Q0UoaGV4X2R1bXBfdG9fYnVmZmVyKGJ1ZiArIHBvcywgbGVuIC0gcG9zLAorCQkJCQkJcm93c2l6 ZSwgc2l6ZW9mKHUzMiksCisJCQkJCQlsaW5lLCBzaXplb2YobGluZSksCisJCQkJCQlmYWxzZSkg Pj0gc2l6ZW9mKGxpbmUpKTsKKwkJcHJfaW5mbygiWyUwNHp4XSAlc1xuIiwgcG9zLCBsaW5lKTsK KworCQlwcmV2ID0gYnVmICsgcG9zOworCQlza2lwID0gZmFsc2U7CisJfQorfQorCitzdGF0aWMg aW50IGxpdmVfbHJjX2xheW91dCh2b2lkICphcmcpCit7CisJc3RydWN0IGludGVsX2d0ICpndCA9 IGFyZzsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisJZW51bSBpbnRlbF9lbmdp bmVfaWQgaWQ7CisJdTMyICpscmM7CisJaW50IGVycjsKKworCS8qCisJICogQ2hlY2sgdGhlIHJl Z2lzdGVycyBvZmZzZXRzIHdlIHVzZSB0byBjcmVhdGUgdGhlIGluaXRpYWwgcmVnIHN0YXRlCisJ ICogbWF0Y2ggdGhlIGxheW91dCBzYXZlZCBieSBIVy4KKwkgKi8KKworCWxyYyA9IGttYWxsb2Mo UEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxyYykKKwkJcmV0dXJuIC1FTk9NRU07CisK KwllcnIgPSAwOworCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGd0LCBpZCkgeworCQl1MzIgKmh3 OworCQlpbnQgZHc7CisKKwkJaWYgKCFlbmdpbmUtPmRlZmF1bHRfc3RhdGUpCisJCQljb250aW51 ZTsKKworCQlodyA9IGk5MTVfZ2VtX29iamVjdF9waW5fbWFwKGVuZ2luZS0+ZGVmYXVsdF9zdGF0 ZSwKKwkJCQkJICAgICBJOTE1X01BUF9XQik7CisJCWlmIChJU19FUlIoaHcpKSB7CisJCQllcnIg PSBQVFJfRVJSKGh3KTsKKwkJCWJyZWFrOworCQl9CisJCWh3ICs9IExSQ19TVEFURV9QTiAqIFBB R0VfU0laRSAvIHNpemVvZigqaHcpOworCisJCWludGVsX2xyY19pbml0X3JlZ19zdGF0ZShtZW1z ZXQobHJjLCBQT0lTT05fSU5VU0UsIFBBR0VfU0laRSksCisJCQkJCSBlbmdpbmUtPmtlcm5lbF9j b250ZXh0LAorCQkJCQkgZW5naW5lLAorCQkJCQkgZW5naW5lLT5rZXJuZWxfY29udGV4dC0+cmlu ZywKKwkJCQkJIHRydWUpOworCisJCWR3ID0gMDsKKwkJZG8geworCQkJdTMyIGxyaSA9IGh3W2R3 XTsKKworCQkJaWYgKGxyaSA9PSAwKSB7CisJCQkJZHcrKzsKKwkJCQljb250aW51ZTsKKwkJCX0K KworCQkJaWYgKGxyY1tkd10gPT0gMCkgeworCQkJCXByX2RlYnVnKCIlczogc2tpcHBlZCBpbnN0 cnVjdGlvbiAleCBhdCBkd29yZCAlZFxuIiwKKwkJCQkJIGVuZ2luZS0+bmFtZSwgbHJpLCBkdyk7 CisJCQkJZHcrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKChscmkgJiBHRU5NQVNL KDMxLCAyMykpICE9IE1JX0lOU1RSKDB4MjIsIDApKSB7CisJCQkJcHJfZXJyKCIlczogRXhwZWN0 ZWQgTFJJIGNvbW1hbmQgYXQgZHdvcmQgJWQsIGZvdW5kICUwOHhcbiIsCisJCQkJICAgICAgIGVu Z2luZS0+bmFtZSwgZHcsIGxyaSk7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlicmVhazsKKwkJ CX0KKworCQkJaWYgKGxyY1tkd10gIT0gbHJpKSB7CisJCQkJcHJfZXJyKCIlczogTFJJIGNvbW1h bmQgbWlzbWF0Y2ggYXQgZHdvcmQgJWQsIGV4cGVjdGVkICUwOHggZm91bmQgJTA4eFxuIiwKKwkJ CQkgICAgICAgZW5naW5lLT5uYW1lLCBkdywgbHJpLCBscmNbZHddKTsKKwkJCQllcnIgPSAtRUlO VkFMOworCQkJCWJyZWFrOworCQkJfQorCisJCQlscmkgJj0gMHg3ZjsKKwkJCWxyaSsrOworCQkJ ZHcrKzsKKworCQkJd2hpbGUgKGxyaSkgeworCQkJCWlmIChod1tkd10gIT0gbHJjW2R3XSkgewor CQkJCQlwcl9lcnIoIiVzOiBEaWZmZXJlbnQgcmVnaXN0ZXJzIGZvdW5kIGF0IGR3b3JkICVkLCBl eHBlY3RlZCAleCwgZm91bmQgJXhcbiIsCisJCQkJCSAgICAgICBlbmdpbmUtPm5hbWUsIGR3LCBo d1tkd10sIGxyY1tkd10pOworCQkJCQllcnIgPSAtRUlOVkFMOworCQkJCQlicmVhazsKKwkJCQl9 CisKKwkJCQkvKgorCQkJCSAqIFNraXAgb3ZlciB0aGUgYWN0dWFsIHJlZ2lzdGVyIHZhbHVlIGFz IHdlCisJCQkJICogZXhwZWN0IHRoYXQgdG8gZGlmZmVyLgorCQkJCSAqLworCQkJCWR3ICs9IDI7 CisJCQkJbHJpIC09IDI7CisJCQl9CisJCX0gd2hpbGUgKChscmNbZHddICYgfkJJVCgwKSkgIT0g TUlfQkFUQ0hfQlVGRkVSX0VORCk7CisKKwkJaWYgKGVycikgeworCQkJcHJfaW5mbygiJXM6IEhX IHJlZ2lzdGVyIGltYWdlOlxuIiwgZW5naW5lLT5uYW1lKTsKKwkJCWhleGR1bXAoaHcsIFBBR0Vf U0laRSk7CisKKwkJCXByX2luZm8oIiVzOiBTVyByZWdpc3RlciBpbWFnZTpcbiIsIGVuZ2luZS0+ bmFtZSk7CisJCQloZXhkdW1wKGxyYywgUEFHRV9TSVpFKTsKKwkJfQorCisJCWk5MTVfZ2VtX29i amVjdF91bnBpbl9tYXAoZW5naW5lLT5kZWZhdWx0X3N0YXRlKTsKKwkJaWYgKGVycikKKwkJCWJy ZWFrOworCX0KKworCWtmcmVlKGxyYyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBm aW5kX29mZnNldChjb25zdCB1MzIgKmxyaSwgdTMyIG9mZnNldCkKK3sKKwlpbnQgaTsKKworCWZv ciAoaSA9IDA7IGkgPCBQQUdFX1NJWkUgLyBzaXplb2YodTMyKTsgaSsrKQorCQlpZiAobHJpW2ld ID09IG9mZnNldCkKKwkJCXJldHVybiBpOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50 IGxpdmVfbHJjX2ZpeGVkKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gYXJn OworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKKwllbnVtIGludGVsX2VuZ2luZV9p ZCBpZDsKKwlpbnQgZXJyID0gMDsKKworCS8qCisJICogQ2hlY2sgdGhlIGFzc3VtZWQgcmVnaXN0 ZXIgb2Zmc2V0cyBtYXRjaCB0aGUgYWN0dWFsIGxvY2F0aW9ucyBpbgorCSAqIHRoZSBjb250ZXh0 IGltYWdlLgorCSAqLworCisJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZ3QsIGlkKSB7CisJCWNv bnN0IHN0cnVjdCB7CisJCQl1MzIgcmVnOworCQkJdTMyIG9mZnNldDsKKwkJCWNvbnN0IGNoYXIg Km5hbWU7CisJCX0gdGJsW10gPSB7CisJCQl7CisJCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklO R19TVEFSVChlbmdpbmUtPm1taW9fYmFzZSkpLAorCQkJCUNUWF9SSU5HX1NUQVJUIC0gMSwKKwkJ CQkiUklOR19TVEFSVCIKKwkJCX0sCisJCQl7CisJCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklO R19DVEwoZW5naW5lLT5tbWlvX2Jhc2UpKSwKKwkJCQlDVFhfUklOR19DVEwgLSAxLAorCQkJCSJS SU5HX0NUTCIKKwkJCX0sCisJCQl7CisJCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19IRUFE KGVuZ2luZS0+bW1pb19iYXNlKSksCisJCQkJQ1RYX1JJTkdfSEVBRCAtIDEsCisJCQkJIlJJTkdf SEVBRCIKKwkJCX0sCisJCQl7CisJCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19UQUlMKGVu Z2luZS0+bW1pb19iYXNlKSksCisJCQkJQ1RYX1JJTkdfVEFJTCAtIDEsCisJCQkJIlJJTkdfVEFJ TCIKKwkJCX0sCisJCQl7CisJCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19NSV9NT0RFKGVu Z2luZS0+bW1pb19iYXNlKSksCisJCQkJaW50ZWxfbHJjX3JpbmdfbWlfbW9kZShlbmdpbmUpLAor CQkJCSJSSU5HX01JX01PREUiCisJCQl9LAorCQkJeworCQkJCWk5MTVfbW1pb19yZWdfb2Zmc2V0 KFJJTkdfQkJTVEFURShlbmdpbmUtPm1taW9fYmFzZSkpLAorCQkJCUNUWF9CQl9TVEFURSAtIDEs CisJCQkJIkJCX1NUQVRFIgorCQkJfSwKKwkJCXsgfSwKKwkJfSwgKnQ7CisJCXUzMiAqaHc7CisK KwkJaWYgKCFlbmdpbmUtPmRlZmF1bHRfc3RhdGUpCisJCQljb250aW51ZTsKKworCQlodyA9IGk5 MTVfZ2VtX29iamVjdF9waW5fbWFwKGVuZ2luZS0+ZGVmYXVsdF9zdGF0ZSwKKwkJCQkJICAgICBJ OTE1X01BUF9XQik7CisJCWlmIChJU19FUlIoaHcpKSB7CisJCQllcnIgPSBQVFJfRVJSKGh3KTsK KwkJCWJyZWFrOworCQl9CisJCWh3ICs9IExSQ19TVEFURV9QTiAqIFBBR0VfU0laRSAvIHNpemVv ZigqaHcpOworCisJCWZvciAodCA9IHRibDsgdC0+bmFtZTsgdCsrKSB7CisJCQlpbnQgZHcgPSBm aW5kX29mZnNldChodywgdC0+cmVnKTsKKworCQkJaWYgKGR3ICE9IHQtPm9mZnNldCkgeworCQkJ CXByX2VycigiJXM6IE9mZnNldCBmb3IgJXMgWzB4JXhdIG1pc21hdGNoLCBmb3VuZCAleCwgZXhw ZWN0ZWQgJXhcbiIsCisJCQkJICAgICAgIGVuZ2luZS0+bmFtZSwKKwkJCQkgICAgICAgdC0+bmFt ZSwKKwkJCQkgICAgICAgdC0+cmVnLAorCQkJCSAgICAgICBkdywKKwkJCQkgICAgICAgdC0+b2Zm c2V0KTsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJfQorCQl9CisKKwkJaTkxNV9nZW1fb2JqZWN0 X3VucGluX21hcChlbmdpbmUtPmRlZmF1bHRfc3RhdGUpOworCX0KKworCXJldHVybiBlcnI7Cit9 CisKK3N0YXRpYyBpbnQgX19saXZlX2xyY19zdGF0ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUsCisJCQkgICAgc3RydWN0IGk5MTVfdm1hICpzY3JhdGNoKQoreworCXN0cnVjdCBpbnRl bF9jb250ZXh0ICpjZTsKKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKKwllbnVtIHsKKwkJUklO R19TVEFSVF9JRFggPSAwLAorCQlSSU5HX1RBSUxfSURYLAorCQlNQVhfSURYCisJfTsKKwl1MzIg ZXhwZWN0ZWRbTUFYX0lEWF07CisJdTMyICpjczsKKwlpbnQgZXJyOworCWludCBuOworCisJY2Ug PSBpbnRlbF9jb250ZXh0X2NyZWF0ZShlbmdpbmUpOworCWlmIChJU19FUlIoY2UpKQorCQlyZXR1 cm4gUFRSX0VSUihjZSk7CisKKwllcnIgPSBpbnRlbF9jb250ZXh0X3BpbihjZSk7CisJaWYgKGVy cikKKwkJZ290byBlcnJfcHV0OworCisJcnEgPSBpOTE1X3JlcXVlc3RfY3JlYXRlKGNlKTsKKwlp ZiAoSVNfRVJSKHJxKSkgeworCQllcnIgPSBQVFJfRVJSKHJxKTsKKwkJZ290byBlcnJfdW5waW47 CisJfQorCisJY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA0ICogTUFYX0lEWCk7CisJaWYgKElT X0VSUihjcykpIHsKKwkJZXJyID0gUFRSX0VSUihjcyk7CisJCWk5MTVfcmVxdWVzdF9hZGQocnEp OworCQlnb3RvIGVycl91bnBpbjsKKwl9CisKKwkqY3MrKyA9IE1JX1NUT1JFX1JFR0lTVEVSX01F TV9HRU44IHwgTUlfVVNFX0dHVFQ7CisJKmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNldChSSU5H X1NUQVJUKGVuZ2luZS0+bW1pb19iYXNlKSk7CisJKmNzKysgPSBpOTE1X2dndHRfb2Zmc2V0KHNj cmF0Y2gpICsgUklOR19TVEFSVF9JRFggKiBzaXplb2YodTMyKTsKKwkqY3MrKyA9IDA7CisKKwll eHBlY3RlZFtSSU5HX1NUQVJUX0lEWF0gPSBpOTE1X2dndHRfb2Zmc2V0KGNlLT5yaW5nLT52bWEp OworCisJKmNzKysgPSBNSV9TVE9SRV9SRUdJU1RFUl9NRU1fR0VOOCB8IE1JX1VTRV9HR1RUOwor CSpjcysrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19UQUlMKGVuZ2luZS0+bW1pb19iYXNl KSk7CisJKmNzKysgPSBpOTE1X2dndHRfb2Zmc2V0KHNjcmF0Y2gpICsgUklOR19UQUlMX0lEWCAq IHNpemVvZih1MzIpOworCSpjcysrID0gMDsKKworCWk5MTVfcmVxdWVzdF9nZXQocnEpOworCWk5 MTVfcmVxdWVzdF9hZGQocnEpOworCisJaW50ZWxfZW5naW5lX2ZsdXNoX3N1Ym1pc3Npb24oZW5n aW5lKTsKKwlleHBlY3RlZFtSSU5HX1RBSUxfSURYXSA9IGNlLT5yaW5nLT50YWlsOworCisJaWYg KGk5MTVfcmVxdWVzdF93YWl0KHJxLCAwLCBIWiAvIDUpIDwgMCkgeworCQllcnIgPSAtRVRJTUU7 CisJCWdvdG8gZXJyX3JxOworCX0KKworCWNzID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAoc2Ny YXRjaC0+b2JqLCBJOTE1X01BUF9XQik7CisJaWYgKElTX0VSUihjcykpIHsKKwkJZXJyID0gUFRS X0VSUihjcyk7CisJCWdvdG8gZXJyX3JxOworCX0KKworCWZvciAobiA9IDA7IG4gPCBNQVhfSURY OyBuKyspIHsKKwkJaWYgKGNzW25dICE9IGV4cGVjdGVkW25dKSB7CisJCQlwcl9lcnIoIiVzOiBT dG9yZWQgcmVnaXN0ZXJbJWRdIHZhbHVlWzB4JXhdIGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWRbMHgl eF1cbiIsCisJCQkgICAgICAgZW5naW5lLT5uYW1lLCBuLCBjc1tuXSwgZXhwZWN0ZWRbbl0pOwor CQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaTkxNV9nZW1fb2JqZWN0 X3VucGluX21hcChzY3JhdGNoLT5vYmopOworCitlcnJfcnE6CisJaTkxNV9yZXF1ZXN0X3B1dChy cSk7CitlcnJfdW5waW46CisJaW50ZWxfY29udGV4dF91bnBpbihjZSk7CitlcnJfcHV0OgorCWlu dGVsX2NvbnRleHRfcHV0KGNlKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGxpdmVf bHJjX3N0YXRlKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gYXJnOworCXN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKKwlzdHJ1Y3QgaTkxNV92bWEgKnNjcmF0Y2g7 CisJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7CisJaW50IGVyciA9IDA7CisKKwkvKgorCSAqIENo ZWNrIHRoZSBsaXZlIHJlZ2lzdGVyIHN0YXRlIG1hdGNoZXMgd2hhdCB3ZSBleHBlY3QgZm9yIHRo aXMKKwkgKiBpbnRlbF9jb250ZXh0LgorCSAqLworCisJc2NyYXRjaCA9IGNyZWF0ZV9zY3JhdGNo KGd0KTsKKwlpZiAoSVNfRVJSKHNjcmF0Y2gpKQorCQlyZXR1cm4gUFRSX0VSUihzY3JhdGNoKTsK KworCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGd0LCBpZCkgeworCQllcnIgPSBfX2xpdmVfbHJj X3N0YXRlKGVuZ2luZSwgc2NyYXRjaCk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKwl9CisKKwlp ZiAoaWd0X2ZsdXNoX3Rlc3QoZ3QtPmk5MTUpKQorCQllcnIgPSAtRUlPOworCisJaTkxNV92bWFf dW5waW5fYW5kX3JlbGVhc2UoJnNjcmF0Y2gsIDApOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRp YyBpbnQgZ3ByX21ha2VfZGlydHkoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQorewor CXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOworCXUzMiAqY3M7CisJaW50IG47CisKKwlycSA9IGlu dGVsX2VuZ2luZV9jcmVhdGVfa2VybmVsX3JlcXVlc3QoZW5naW5lKTsKKwlpZiAoSVNfRVJSKHJx KSkKKwkJcmV0dXJuIFBUUl9FUlIocnEpOworCisJY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCAy ICogTlVNX0dQUl9EVyArIDIpOworCWlmIChJU19FUlIoY3MpKSB7CisJCWk5MTVfcmVxdWVzdF9h ZGQocnEpOworCQlyZXR1cm4gUFRSX0VSUihjcyk7CisJfQorCisJKmNzKysgPSBNSV9MT0FEX1JF R0lTVEVSX0lNTShOVU1fR1BSX0RXKTsKKwlmb3IgKG4gPSAwOyBuIDwgTlVNX0dQUl9EVzsgbisr KSB7CisJCSpjcysrID0gQ1NfR1BSKGVuZ2luZSwgbik7CisJCSpjcysrID0gU1RBQ0tfTUFHSUM7 CisJfQorCSpjcysrID0gTUlfTk9PUDsKKworCWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwor CWk5MTVfcmVxdWVzdF9hZGQocnEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19s aXZlX2dwcl9jbGVhcihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCisJCQkgICAgc3Ry dWN0IGk5MTVfdm1hICpzY3JhdGNoKQoreworCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZTsKKwlz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKKwl1MzIgKmNzOworCWludCBlcnI7CisJaW50IG47CisK KwlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPCA5ICYmIGVuZ2luZS0+Y2xhc3MgIT0gUkVO REVSX0NMQVNTKQorCQlyZXR1cm4gMDsgLyogR1BSIG9ubHkgb24gcmNzMCBmb3IgZ2VuOCAqLwor CisJZXJyID0gZ3ByX21ha2VfZGlydHkoZW5naW5lKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJy OworCisJY2UgPSBpbnRlbF9jb250ZXh0X2NyZWF0ZShlbmdpbmUpOworCWlmIChJU19FUlIoY2Up KQorCQlyZXR1cm4gUFRSX0VSUihjZSk7CisKKwlycSA9IGludGVsX2NvbnRleHRfY3JlYXRlX3Jl cXVlc3QoY2UpOworCWlmIChJU19FUlIocnEpKSB7CisJCWVyciA9IFBUUl9FUlIocnEpOworCQln b3RvIGVycl9wdXQ7CisJfQorCisJY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA0ICogTlVNX0dQ Ul9EVyk7CisJaWYgKElTX0VSUihjcykpIHsKKwkJZXJyID0gUFRSX0VSUihjcyk7CisJCWk5MTVf cmVxdWVzdF9hZGQocnEpOworCQlnb3RvIGVycl9wdXQ7CisJfQorCisJZm9yIChuID0gMDsgbiA8 IE5VTV9HUFJfRFc7IG4rKykgeworCQkqY3MrKyA9IE1JX1NUT1JFX1JFR0lTVEVSX01FTV9HRU44 IHwgTUlfVVNFX0dHVFQ7CisJCSpjcysrID0gQ1NfR1BSKGVuZ2luZSwgbik7CisJCSpjcysrID0g aTkxNV9nZ3R0X29mZnNldChzY3JhdGNoKSArIG4gKiBzaXplb2YodTMyKTsKKwkJKmNzKysgPSAw OworCX0KKworCWk5MTVfcmVxdWVzdF9nZXQocnEpOworCWk5MTVfcmVxdWVzdF9hZGQocnEpOwor CisJaWYgKGk5MTVfcmVxdWVzdF93YWl0KHJxLCAwLCBIWiAvIDUpIDwgMCkgeworCQllcnIgPSAt RVRJTUU7CisJCWdvdG8gZXJyX3JxOworCX0KKworCWNzID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9t YXAoc2NyYXRjaC0+b2JqLCBJOTE1X01BUF9XQik7CisJaWYgKElTX0VSUihjcykpIHsKKwkJZXJy ID0gUFRSX0VSUihjcyk7CisJCWdvdG8gZXJyX3JxOworCX0KKworCWZvciAobiA9IDA7IG4gPCBO VU1fR1BSX0RXOyBuKyspIHsKKwkJaWYgKGNzW25dKSB7CisJCQlwcl9lcnIoIiVzOiBHUFJbJWRd LiVzIHdhcyBub3QgemVybywgZm91bmQgMHglMDh4IVxuIiwKKwkJCSAgICAgICBlbmdpbmUtPm5h bWUsCisJCQkgICAgICAgbiAvIDIsIG4gJiAxID8gInVkdyIgOiAibGR3IiwKKwkJCSAgICAgICBj c1tuXSk7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpOTE1X2dl bV9vYmplY3RfdW5waW5fbWFwKHNjcmF0Y2gtPm9iaik7CisKK2Vycl9ycToKKwlpOTE1X3JlcXVl c3RfcHV0KHJxKTsKK2Vycl9wdXQ6CisJaW50ZWxfY29udGV4dF9wdXQoY2UpOworCXJldHVybiBl cnI7Cit9CisKK3N0YXRpYyBpbnQgbGl2ZV9ncHJfY2xlYXIodm9pZCAqYXJnKQoreworCXN0cnVj dCBpbnRlbF9ndCAqZ3QgPSBhcmc7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwor CXN0cnVjdCBpOTE1X3ZtYSAqc2NyYXRjaDsKKwllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKKwlp bnQgZXJyID0gMDsKKworCS8qCisJICogQ2hlY2sgdGhhdCBHUFIgcmVnaXN0ZXJzIGFyZSBjbGVh cmVkIGluIG5ldyBjb250ZXh0cyBhcyB3ZSBuZWVkCisJICogdG8gYXZvaWQgbGVha2luZyBhbnkg aW5mb3JtYXRpb24gZnJvbSBwcmV2aW91cyBjb250ZXh0cy4KKwkgKi8KKworCXNjcmF0Y2ggPSBj cmVhdGVfc2NyYXRjaChndCk7CisJaWYgKElTX0VSUihzY3JhdGNoKSkKKwkJcmV0dXJuIFBUUl9F UlIoc2NyYXRjaCk7CisKKwlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBndCwgaWQpIHsKKwkJZXJy ID0gX19saXZlX2dwcl9jbGVhcihlbmdpbmUsIHNjcmF0Y2gpOworCQlpZiAoZXJyKQorCQkJYnJl YWs7CisJfQorCisJaWYgKGlndF9mbHVzaF90ZXN0KGd0LT5pOTE1KSkKKwkJZXJyID0gLUVJTzsK KworCWk5MTVfdm1hX3VucGluX2FuZF9yZWxlYXNlKCZzY3JhdGNoLCAwKTsKKwlyZXR1cm4gZXJy OworfQorCitpbnQgaW50ZWxfbHJjX2xpdmVfc2VsZnRlc3RzKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1KQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10g PSB7CisJCVNVQlRFU1QobGl2ZV9scmNfbGF5b3V0KSwKKwkJU1VCVEVTVChsaXZlX2xyY19maXhl ZCksCisJCVNVQlRFU1QobGl2ZV9scmNfc3RhdGUpLAorCQlTVUJURVNUKGxpdmVfZ3ByX2NsZWFy KSwKKwl9OworCisJaWYgKCFIQVNfTE9HSUNBTF9SSU5HX0NPTlRFWFRTKGk5MTUpKQorCQlyZXR1 cm4gMDsKKworCXJldHVybiBpbnRlbF9ndF9saXZlX3N1YnRlc3RzKHRlc3RzLCAmaTkxNS0+Z3Qp OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2Fk cy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2Fkcy5jCmluZGV4IDEw MTcyODAwNmFlOS4uODA5Y2QxMGRjNzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC91Yy9pbnRlbF9ndWNfYWRzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMv aW50ZWxfZ3VjX2Fkcy5jCkBAIC00LDYgKzQsNyBAQAogICovCiAKICNpbmNsdWRlICJndC9pbnRl bF9ndC5oIgorI2luY2x1ZGUgImd0L2ludGVsX2xyYy5oIgogI2luY2x1ZGUgImludGVsX2d1Y19h ZHMuaCIKICNpbmNsdWRlICJpbnRlbF91Yy5oIgogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYwppbmRl eCA5ZTQyMzI0ZmRlY2QuLmI3YjRmYmM1NzM0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5j bHVkZSAiZ3QvaW50ZWxfZW5naW5lX3BtLmgiCiAjaW5jbHVkZSAiZ3QvaW50ZWxfZ3QuaCIKICNp bmNsdWRlICJndC9pbnRlbF9ndF9wbS5oIgorI2luY2x1ZGUgImd0L2ludGVsX2xyYy5oIgogI2lu Y2x1ZGUgImd0L2ludGVsX2xyY19yZWcuaCIKICNpbmNsdWRlICJndC9pbnRlbF9yaW5nLmgiCiAK QEAgLTQwMSw2ICs0MDIsMzkgQEAgY2FuY2VsX3BvcnRfcmVxdWVzdHMoc3RydWN0IGludGVsX2Vu Z2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMpCiAJCW1lbXNldChleGVjbGlzdHMtPmlu ZmxpZ2h0LCAwLCBzaXplb2YoZXhlY2xpc3RzLT5pbmZsaWdodCkpOwogfQogCitzdGF0aWMgdm9p ZCBjb250ZXh0X3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKKwkJCSAgc3Ry dWN0IGludGVsX2NvbnRleHQgKmNlLAorCQkJICB1MzIgaGVhZCwKKwkJCSAgYm9vbCBzY3J1YikK K3sKKwlHRU1fQlVHX09OKCFpbnRlbF9jb250ZXh0X2lzX3Bpbm5lZChjZSkpOworCisJLyoKKwkg KiBXZSB3YW50IGEgc2ltcGxlIGNvbnRleHQgKyByaW5nIHRvIGV4ZWN1dGUgdGhlIGJyZWFkY3J1 bWIgdXBkYXRlLgorCSAqIFdlIGNhbm5vdCByZWx5IG9uIHRoZSBjb250ZXh0IGJlaW5nIGludGFj dCBhY3Jvc3MgdGhlIEdQVSBoYW5nLAorCSAqIHNvIGNsZWFyIGl0IGFuZCByZWJ1aWxkIGp1c3Qg d2hhdCB3ZSBuZWVkIGZvciB0aGUgYnJlYWRjcnVtYi4KKwkgKiBBbGwgcGVuZGluZyByZXF1ZXN0 cyBmb3IgdGhpcyBjb250ZXh0IHdpbGwgYmUgemFwcGVkLCBhbmQgYW55CisJICogZnV0dXJlIHJl cXVlc3Qgd2lsbCBiZSBhZnRlciB1c2Vyc3BhY2UgaGFzIGhhZCB0aGUgb3Bwb3J0dW5pdHkKKwkg KiB0byByZWNyZWF0ZSBpdHMgb3duIHN0YXRlLgorCSAqLworCWlmIChzY3J1YikgeworCQl1MzIg KnJlZ3MgPSBjZS0+bHJjX3JlZ19zdGF0ZTsKKworCQlpZiAoZW5naW5lLT5waW5uZWRfZGVmYXVs dF9zdGF0ZSkKKwkJCW1lbWNweShyZWdzLCAvKiBza2lwIHJlc3RvcmluZyB0aGUgdmFuaWxsYSBQ UEhXU1AgKi8KKwkJCSAgICAgICBlbmdpbmUtPnBpbm5lZF9kZWZhdWx0X3N0YXRlICsgTFJDX1NU QVRFX1BOICogUEFHRV9TSVpFLAorCQkJICAgICAgIGVuZ2luZS0+Y29udGV4dF9zaXplIC0gUEFH RV9TSVpFKTsKKworCQlpbnRlbF9scmNfaW5pdF9yZWdfc3RhdGUocmVncywgY2UsIGVuZ2luZSwg Y2UtPnJpbmcsIGZhbHNlKTsKKwl9CisKKwkvKiBSZXJ1biB0aGUgcmVxdWVzdDsgaXRzIHBheWxv YWQgaGFzIGJlZW4gbmV1dGVyZWQgKGlmIGd1aWx0eSkuICovCisJY2UtPnJpbmctPmhlYWQgPSBo ZWFkOworCWludGVsX3JpbmdfdXBkYXRlX3NwYWNlKGNlLT5yaW5nKTsKKworCWludGVsX2xyY191 cGRhdGVfcmVnX3N0YXRlKGNlLCBlbmdpbmUpOworfQorCiBzdGF0aWMgdm9pZCBndWNfcmVzZXRf cmV3aW5kKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgYm9vbCBzdGFsbGVkKQogewog CXN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3QgZXhlY2xpc3RzID0gJmVuZ2lu ZS0+ZXhlY2xpc3RzOwpAQCAtNDIwLDcgKzQ1NCw3IEBAIHN0YXRpYyB2b2lkIGd1Y19yZXNldF9y ZXdpbmQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBib29sIHN0YWxsZWQpCiAJCXN0 YWxsZWQgPSBmYWxzZTsKIAogCV9faTkxNV9yZXF1ZXN0X3Jlc2V0KHJxLCBzdGFsbGVkKTsKLQlp bnRlbF9scl9jb250ZXh0X3Jlc2V0KGVuZ2luZSwgcnEtPmNvbnRleHQsIHJxLT5oZWFkLCBzdGFs bGVkKTsKKwljb250ZXh0X3Jlc2V0KGVuZ2luZSwgcnEtPmNvbnRleHQsIHJxLT5oZWFkLCBzdGFs bGVkKTsKIAogb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmdpbmUtPmFj dGl2ZS5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQv bW1pb19jb250ZXh0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvbW1pb19jb250ZXh0LmMK aW5kZXggYWFmMTU5MTZkMjlhLi4zMzRkY2ZhMmQzMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d2dC9tbWlvX2NvbnRleHQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dnQvbW1pb19jb250ZXh0LmMKQEAgLTM1LDYgKzM1LDcgQEAKIAogI2luY2x1ZGUgImk5MTVfZHJ2 LmgiCiAjaW5jbHVkZSAiZ3QvaW50ZWxfY29udGV4dC5oIgorI2luY2x1ZGUgImd0L2ludGVsX2xy Yy5oIgogI2luY2x1ZGUgImd0L2ludGVsX3JpbmcuaCIKICNpbmNsdWRlICJndnQuaCIKICNpbmNs dWRlICJ0cmFjZS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3NjaGVk dWxlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3NjaGVkdWxlci5jCmluZGV4IDY4NWQx ZTA0YTVmZi4uMzc4YTM5YWVmYjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dnQvc2NoZWR1bGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3NjaGVkdWxlci5j CkBAIC0zNyw2ICszNyw3IEBACiAKICNpbmNsdWRlICJnZW0vaTkxNV9nZW1fcG0uaCIKICNpbmNs dWRlICJndC9pbnRlbF9jb250ZXh0LmgiCisjaW5jbHVkZSAiZ3QvaW50ZWxfbHJjLmgiCiAjaW5j bHVkZSAiZ3QvaW50ZWxfcmluZy5oIgogCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oCmluZGV4IGE4YTA4YzYzMjc4ZS4uNzY5M2QzN2E2ZDBlIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKQEAgLTc3LDcgKzc3LDYgQEAKICNpbmNsdWRlICJnZW0vaTkxNV9nZW1f c2hyaW5rZXIuaCIKICNpbmNsdWRlICJnZW0vaTkxNV9nZW1fc3RvbGVuLmgiCiAKLSNpbmNsdWRl ICJndC9pbnRlbF9scmMuaCIKICNpbmNsdWRlICJndC9pbnRlbF9lbmdpbmUuaCIKICNpbmNsdWRl ICJndC9pbnRlbF9ndF90eXBlcy5oIgogI2luY2x1ZGUgImd0L2ludGVsX3dvcmthcm91bmRzLmgi CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jCmluZGV4IDUzNWExMjUyMGRiYS4uZThjZjlmMmIyMmNj IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYwpAQCAtMTk5LDYgKzE5OSw3IEBACiAjaW5jbHVk ZSAiZ3QvaW50ZWxfZW5naW5lX3BtLmgiCiAjaW5jbHVkZSAiZ3QvaW50ZWxfZW5naW5lX3VzZXIu aCIKICNpbmNsdWRlICJndC9pbnRlbF9ndC5oIgorI2luY2x1ZGUgImd0L2ludGVsX2xyYy5oIgog I2luY2x1ZGUgImd0L2ludGVsX2xyY19yZWcuaCIKICNpbmNsdWRlICJndC9pbnRlbF9yaW5nLmgi CiAKLS0gCjIuMjUuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4Cg==