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=-10.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, UNWANTED_LANGUAGE_BODY,URIBL_BLOCKED,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 B7448C433E1 for ; Fri, 14 Aug 2020 03:49:31 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 562C120716 for ; Fri, 14 Aug 2020 03:49:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="u4SkIEg+"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=pobox.com header.i=@pobox.com header.b="Mt96oqLE"; dkim=fail reason="key not found in DNS" (0-bit key) header.d=fluxnic.net header.i=@fluxnic.net header.b="KhAICDt3" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 562C120716 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=fluxnic.net Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-i3c-bounces+linux-i3c=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=HtCiY36v8WJGKrqqFpr+h5Mufzsg+LpA+62VRGXGasA=; b=u4SkIEg+WFcFYpwyJVqQMMrQT ABj5OjOUTv9rCndFD3DxwQpk+yizgMmIf3Onr6ro+w3wU9KKK7VekqsNi/NQuLmsBhD8a/SR998Yn 1xU6TXGO1CdWXf133S6zkVitSlHQRRq4Z5epy0D4ncTtW+JzXj2itFJDT+Dmyslj57c5K9jIo2tXR VnFoYxZxFpNaRvFa/EhXcyj+aK4i7SamIUsp7kZsOuOQXwnYmetGLfQgc+2BUSMhwHJxIMB70Jxfi 0EWQPk8hmxgxfGD5qrPSv+YYkQgwGtJhkO+uPHk305SIKBL8qi2lTUyO+2g2+zODqOQiOMbBu18BF +tAFeACVw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1k6Qig-0000dY-Op for linux-i3c@archiver.kernel.org; Fri, 14 Aug 2020 03:49:30 +0000 Received: from pb-smtp21.pobox.com ([173.228.157.53]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1k6Qic-0000cb-Dv for linux-i3c@lists.infradead.org; Fri, 14 Aug 2020 03:49:28 +0000 Received: from pb-smtp21.pobox.com (unknown [127.0.0.1]) by pb-smtp21.pobox.com (Postfix) with ESMTP id 3BD47E0CA3; Thu, 13 Aug 2020 23:49:22 -0400 (EDT) (envelope-from nico@fluxnic.net) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=pobox.com; h=from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-type:content-transfer-encoding; s=sasl; bh=R7Fo/GdkRmUF YctBOy7xq6aqcNA=; b=Mt96oqLEdyejdz/4xlhtZ2BwJwws3bYMBTujVVa/sD0V 7C+4vz7obiPwQw8POJaG4fNT7GWSfVOGWddUYzcdY4FlPkfDwvWne6GVML3zr8Gc WP+p0lNW2+HkZShFi8FsusCm+oIkbERgEJQSUGu2z+cMmpGN8SecHxSL0ufiY4A= Received: from pb-smtp21.sea.icgroup.com (unknown [127.0.0.1]) by pb-smtp21.pobox.com (Postfix) with ESMTP id 1CDA7E0CA2; Thu, 13 Aug 2020 23:49:22 -0400 (EDT) (envelope-from nico@fluxnic.net) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed; d=fluxnic.net; h=from:to:cc:subject:date:message-id:in-reply-to:references:mime-version:content-type:content-transfer-encoding; s=2016-12.pbsmtp; bh=Sz9Pifa9ldlZUQTCrtpHOfEnw/ekZ8KUDEfmkXB2zTI=; b=KhAICDt3+Uv0oZvZhVlerpMLqE/axUxfuYERJtgTb4gsAYM7mNVqa2TFGYTnfCY7c2k9pffyhwdWYA3PNGDDpfXQnrax4qtoUGYMhdAKJGUq+cSGQtDxUIKhJifkDpv3y5HxIb57Isjja3smb7OPXDpTuSDsdpWvg8ttaIIbdA4= Received: from yoda.home (unknown [24.203.50.76]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by pb-smtp21.pobox.com (Postfix) with ESMTPSA id 88384E0CA1; Thu, 13 Aug 2020 23:49:18 -0400 (EDT) (envelope-from nico@fluxnic.net) Received: from xanadu.home (xanadu.home [192.168.2.2]) by yoda.home (Postfix) with ESMTP id 94A672DA0E8D; Thu, 13 Aug 2020 23:49:16 -0400 (EDT) From: Nicolas Pitre To: Boris Brezillon , linux-i3c@lists.infradead.org, devicetree@vger.kernel.org Subject: [PATCH 2/2] i3c/master: add the mipi-i3c-hci driver Date: Thu, 13 Aug 2020 23:48:54 -0400 Message-Id: <20200814034854.460830-3-nico@fluxnic.net> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200814034854.460830-1-nico@fluxnic.net> References: <20200814034854.460830-1-nico@fluxnic.net> MIME-Version: 1.0 X-Pobox-Relay-ID: 2162C66E-DDE1-11EA-87B8-843F439F7C89-78420484!pb-smtp21.pobox.com X-BeenThere: linux-i3c@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laura Nixon , Robert Gough , Rob Herring , Matthew Schnoor , Nicolas Pitre Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-i3c" Errors-To: linux-i3c-bounces+linux-i3c=archiver.kernel.org@lists.infradead.org RnJvbTogTmljb2xhcyBQaXRyZSA8bnBpdHJlQGJheWxpYnJlLmNvbT4KClRoaXMgYWRkcyBiYXNp YyBzdXBwb3J0IGZvciBoYXJkd2FyZSBpbXBsZW1lbnRpbmcgdGhlIE1JUEkgSTNDIEhDSQpzcGVj aWZpY2F0aW9uLiBUaGlzIGRyaXZlciBpcyBjdXJyZW50bHkgbGltaXRlZCBieSB0aGUgY2FwYWJp bGl0aWVzCm9mIHRoZSBJM0Mgc3Vic3lzdGVtLCBtZWFuaW5nIHRoaW5ncyBsaWtlIHNjaGVkdWxl ZCBjb21tYW5kcywKYXV0by1jb21tYW5kcyBhbmQgTkNNIGFyZSBub3QgeWV0IHN1cHBvcnRlZC4K ClRoaXMgc3VwcG9ydHMgdmVyc2lvbiAxLjAgb2YgdGhlIE1JUEkgSTNDIEhDSSBzcGVjLCBhcyB3 ZWxsIGFzIHRoZQppbW1pbmVudCByZWxlYXNlIG9mIHZlcnNpb24gMS4xLiBTdXBwb3J0IGZvciBk cmFmdCB2ZXJzaW9uIDIuMCBvZiB0aGUKc3BlYyBpcyBhbHNvIHBhcnRpYWxseSBpbmNsdWRlZCBi dXQgaXMgZ3VhcmFudGVlZCB0byBjaGFuZ2UgYXMgdGhlIHNwZWMKaXMgc3RpbGwgYSB3b3JrIGlu IHByb2dyZXNzLgoKVGhpcyBpcyBhbHNvIGxpZ2h0bHkgdGVzdGVkIGFzIGFjdHVhbCBoYXJkd2Fy ZSBpcyBzdGlsbCB2ZXJ5IHNjYXJzZSwKZXZlbiBmb3IgSENJIHYxLjAuIEZ1cnRoZXIgY29udHJp YnV0aW9ucyB0byB0aGlzIGRyaXZlciBhcmUgZXhwZWN0ZWQKb25jZSB2ZW5kb3IgaW1wbGVtZW50 YXRpb25zIGFuZCBuZXcgSTNDIGRldmljZXMgYmVjb21lIGF2YWlsYWJsZS4KClNpZ25lZC1vZmYt Ynk6IE5pY29sYXMgUGl0cmUgPG5waXRyZUBiYXlsaWJyZS5jb20+Ci0tLQogZHJpdmVycy9pM2Mv bWFzdGVyL0tjb25maWcgICAgICAgICAgICAgICAgIHwgIDEzICsKIGRyaXZlcnMvaTNjL21hc3Rl ci9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2kzYy9tYXN0ZXIvbWlw aS1pM2MtaGNpL01ha2VmaWxlICAgfCAgIDkgKwogZHJpdmVycy9pM2MvbWFzdGVyL21pcGktaTNj LWhjaS9jbWQuaCAgICAgIHwgMTA2ICsrKwogZHJpdmVycy9pM2MvbWFzdGVyL21pcGktaTNjLWhj aS9jbWRfdjEuYyAgIHwgMzYyICsrKysrKysrCiBkcml2ZXJzL2kzYy9tYXN0ZXIvbWlwaS1pM2Mt aGNpL2NtZF92Mi5jICAgfCAyODAgKysrKysrCiBkcml2ZXJzL2kzYy9tYXN0ZXIvbWlwaS1pM2Mt aGNpL2NvcmUuYyAgICAgfCA4MDEgKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvaTNjL21hc3Rl ci9taXBpLWkzYy1oY2kvZGF0LmggICAgICB8ICAyOCArCiBkcml2ZXJzL2kzYy9tYXN0ZXIvbWlw aS1pM2MtaGNpL2RhdF92MS5jICAgfCAxNzAgKysrKwogZHJpdmVycy9pM2MvbWFzdGVyL21pcGkt aTNjLWhjaS9kY3QuaCAgICAgIHwgIDE2ICsKIGRyaXZlcnMvaTNjL21hc3Rlci9taXBpLWkzYy1o Y2kvZGN0X3YxLmMgICB8ICAzNiArCiBkcml2ZXJzL2kzYy9tYXN0ZXIvbWlwaS1pM2MtaGNpL2Rl YnVnLmMgICAgfCAgNzkgKysKIGRyaXZlcnMvaTNjL21hc3Rlci9taXBpLWkzYy1oY2kvZGVidWcu aCAgICB8ICAxNyArCiBkcml2ZXJzL2kzYy9tYXN0ZXIvbWlwaS1pM2MtaGNpL2RtYS5jICAgICAg fCA3NjcgKysrKysrKysrKysrKysrKwogZHJpdmVycy9pM2MvbWFzdGVyL21pcGktaTNjLWhjaS9l eHRfY2Fwcy5jIHwgMjQ5ICsrKysrKwogZHJpdmVycy9pM2MvbWFzdGVyL21pcGktaTNjLWhjaS9l eHRfY2Fwcy5oIHwgIDE5ICsKIGRyaXZlcnMvaTNjL21hc3Rlci9taXBpLWkzYy1oY2kvaGNpLmgg ICAgICB8IDE1MCArKysrCiBkcml2ZXJzL2kzYy9tYXN0ZXIvbWlwaS1pM2MtaGNpL2liaS5oICAg ICAgfCAgNDIgKwogZHJpdmVycy9pM2MvbWFzdGVyL21pcGktaTNjLWhjaS9waW8uYyAgICAgIHwg OTYxICsrKysrKysrKysrKysrKysrKysrKwogMTkgZmlsZXMgY2hhbmdlZCwgNDEwNiBpbnNlcnRp b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9pM2MvbWFzdGVyL21pcGktaTNjLWhj aS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvaTNjL21hc3Rlci9taXBpLWkz Yy1oY2kvY21kLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2kzYy9tYXN0ZXIvbWlwaS1p M2MtaGNpL2NtZF92MS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9pM2MvbWFzdGVyL21p cGktaTNjLWhjaS9jbWRfdjIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvaTNjL21hc3Rl ci9taXBpLWkzYy1oY2kvY29yZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9pM2MvbWFz dGVyL21pcGktaTNjLWhjaS9kYXQuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvaTNjL21h c3Rlci9taXBpLWkzYy1oY2kvZGF0X3YxLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2kz Yy9tYXN0ZXIvbWlwaS1pM2MtaGNpL2RjdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9p M2MvbWFzdGVyL21pcGktaTNjLWhjaS9kY3RfdjEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvaTNjL21hc3Rlci9taXBpLWkzYy1oY2kvZGVidWcuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvaTNjL21hc3Rlci9taXBpLWkzYy1oY2kvZGVidWcuaAogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvaTNjL21hc3Rlci9taXBpLWkzYy1oY2kvZG1hLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2kzYy9tYXN0ZXIvbWlwaS1pM2MtaGNpL2V4dF9jYXBzLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2kzYy9tYXN0ZXIvbWlwaS1pM2MtaGNpL2V4dF9jYXBzLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2kzYy9tYXN0ZXIvbWlwaS1pM2MtaGNpL2hjaS5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9pM2MvbWFzdGVyL21pcGktaTNjLWhjaS9pYmkuaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvaTNjL21hc3Rlci9taXBpLWkzYy1oY2kvcGlvLmMKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2kzYy9tYXN0ZXIvS2NvbmZpZyBiL2RyaXZlcnMvaTNjL21hc3Rl ci9LY29uZmlnCmluZGV4IDRlODBhMWZjYmYuLmViNTgzMDkyM2YgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvaTNjL21hc3Rlci9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTNjL21hc3Rlci9LY29uZmlnCkBA IC0yMSwzICsyMSwxNiBAQCBjb25maWcgRFdfSTNDX01BU1RFUgogCiAJICBUaGlzIGRyaXZlciBj YW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxs IGJlIGNhbGxlZCBkdy1pM2MtbWFzdGVyLgorCitjb25maWcgTUlQSV9JM0NfSENJCisJdHJpc3Rh dGUgIk1JUEkgSTNDIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgZHJpdmVyIgorCWRlcGVuZHMg b24gSTNDCisJaGVscAorCSAgU3VwcG9ydCBmb3IgaGFyZHdhcmUgZm9sbG93aW5nIHRoZSBNSVBJ IEFsaWFuY2UncyBJM0MgSG9zdCBDb250cm9sbGVyCisJICBJbnRlcmZhY2Ugc3BlY2lmaWNhdGlv bi4KKworCSAgRm9yIGRldGFpbHMgcGxlYXNlIHNlZToKKwkgIGh0dHBzOi8vd3d3Lm1pcGkub3Jn L3NwZWNpZmljYXRpb25zL2kzYy1oY2kKKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVp bHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgbWlw aS1pM2MtaGNpLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pM2MvbWFzdGVyL01ha2VmaWxlIGIvZHJp dmVycy9pM2MvbWFzdGVyL01ha2VmaWxlCmluZGV4IDdlZWE5ZTA4NjEuLmI4OTJmZDRjYWYgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvaTNjL21hc3Rlci9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2kzYy9t YXN0ZXIvTWFrZWZpbGUKQEAgLTEsMyArMSw0IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wLW9ubHkKIG9iai0kKENPTkZJR19DRE5TX0kzQ19NQVNURVIpCQkrPSBpM2MtbWFz dGVyLWNkbnMubwogb2JqLSQoQ09ORklHX0RXX0kzQ19NQVNURVIpCQkrPSBkdy1pM2MtbWFzdGVy Lm8KK29iai0kKENPTkZJR19NSVBJX0kzQ19IQ0kpCQkrPSBtaXBpLWkzYy1oY2kvCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2kzYy9tYXN0ZXIvbWlwaS1pM2MtaGNpL01ha2VmaWxlIGIvZHJpdmVycy9p M2MvbWFzdGVyL21pcGktaTNjLWhjaS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi44MzQ5OTYwYzViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pM2Mv bWFzdGVyL21pcGktaTNjLWhjaS9NYWtlZmlsZQpAQCAtMCwwICsxLDkgQEAKKyMgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorCisjY2NmbGFncy15IDo9IC1EREVCVUcKKwor b2JqLSQoQ09ORklHX01JUElfSTNDX0hDSSkJCSs9IG1pcGktaTNjLWhjaS5vCittaXBpLWkzYy1o Y2kteQkJCQk6PSBjb3JlLm8gZXh0X2NhcHMubyBwaW8ubyBkbWEubyBcCisJCQkJCSAgIGNtZF92 MS5vIGNtZF92Mi5vIFwKKwkJCQkJICAgZGF0X3YxLm8gZGN0X3YxLm8gXAorCQkJCQkgICBkZWJ1 Zy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kzYy9tYXN0ZXIvbWlwaS1pM2MtaGNpL2NtZC5oIGIv ZHJpdmVycy9pM2MvbWFzdGVyL21pcGktaTNjLWhjaS9jbWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi44MzlmNTY1ZmIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9pM2MvbWFzdGVyL21pcGktaTNjLWhjaS9jbWQuaApAQCAtMCwwICsxLDEwNiBAQAorLyogU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLworLyoKKyAqIENvcHlyaWdodCAo YykgMjAyMCwgTUlQSSBBbGxpYW5jZSwgSW5jLgorICoKKyAqIEF1dGhvcjogTmljb2xhcyBQaXRy ZSA8bnBpdHJlQGJheWxpYnJlLmNvbT4KKyAqCisgKiBDb21tb24gY29tbWFuZC9yZXNwb25zZSBy ZWxhdGVkIHN0dWZmCisgKi8KKworI2lmbmRlZiBDTURfSAorI2RlZmluZSBDTURfSAorCisvKgor ICogVGhvc2UgYml0cyBhcmUgY29tbW9uIHRvIGFsbCBkZXNjcmlwdG9yIGZvcm1hdHMgYW5kCisg KiBtYXkgYmUgbWFuaXB1bGF0ZWQgYnkgdGhlIGNvcmUgY29kZS4KKyAqLworI2RlZmluZSBDTURf MF9UT0MJCQlXMF9CSVRfKDMxKQorI2RlZmluZSBDTURfMF9ST0MJCQlXMF9CSVRfKDMwKQorI2Rl ZmluZSBDTURfMF9BVFRSCQkJVzBfTUFTSygyLCAwKQorCisvKiBEYXRhIFRyYW5zZmVyIFNwZWVk IGFuZCBNb2RlICovCitlbnVtIGhjaV9jbWRfbW9kZSB7CisJTU9ERV9JM0NfU0RSMAkJPSAweDAs CisJTU9ERV9JM0NfU0RSMQkJPSAweDEsCisJTU9ERV9JM0NfU0RSMgkJPSAweDIsCisJTU9ERV9J M0NfU0RSMwkJPSAweDMsCisJTU9ERV9JM0NfU0RSNAkJPSAweDQsCisJTU9ERV9JM0NfSERSX1RT eAk9IDB4NSwKKwlNT0RFX0kzQ19IRFJfRERSCT0gMHg2LAorCU1PREVfSTNDX0hEUl9CVAkJPSAw eDcsCisJTU9ERV9JM0NfRm1fRm1QCQk9IDB4OCwKKwlNT0RFX0kyQ19GbQkJPSAweDAsCisJTU9E RV9JMkNfRm1QCQk9IDB4MSwKKwlNT0RFX0kyQ19VRDEJCT0gMHgyLAorCU1PREVfSTJDX1VEMgkJ PSAweDMsCisJTU9ERV9JMkNfVUQzCQk9IDB4NCwKK307CisKK3N0YXRpYyBpbmxpbmUgZW51bSBo Y2lfY21kX21vZGUgaGNpX2dldF9pM2NfbW9kZShzdHJ1Y3QgaTNjX2hjaSAqaGNpKQoreworCXN0 cnVjdCBpM2NfYnVzICpidXMgPSBpM2NfbWFzdGVyX2dldF9idXMoJmhjaS0+bWFzdGVyKTsKKwor CWlmIChidXMtPnNjbF9yYXRlLmkzYyA+PSAxMjUwMDAwMCkKKwkJcmV0dXJuIE1PREVfSTNDX1NE UjA7CisJaWYgKGJ1cy0+c2NsX3JhdGUuaTNjID4gODAwMDAwMCkKKwkJcmV0dXJuIE1PREVfSTND X1NEUjE7CisJaWYgKGJ1cy0+c2NsX3JhdGUuaTNjID4gNjAwMDAwMCkKKwkJcmV0dXJuIE1PREVf STNDX1NEUjI7CisJaWYgKGJ1cy0+c2NsX3JhdGUuaTNjID4gNDAwMDAwMCkKKwkJcmV0dXJuIE1P REVfSTNDX1NEUjM7CisJaWYgKGJ1cy0+c2NsX3JhdGUuaTNjID4gMjAwMDAwMCkKKwkJcmV0dXJu IE1PREVfSTNDX1NEUjQ7CisJcmV0dXJuIE1PREVfSTNDX0ZtX0ZtUDsKK30KKworc3RhdGljIGlu bGluZSBlbnVtIGhjaV9jbWRfbW9kZSBoY2lfZ2V0X2kyY19tb2RlKHN0cnVjdCBpM2NfaGNpICpo Y2kpCit7CisJc3RydWN0IGkzY19idXMgKmJ1cyA9IGkzY19tYXN0ZXJfZ2V0X2J1cygmaGNpLT5t YXN0ZXIpOworCisJaWYgKGJ1cy0+c2NsX3JhdGUuaTJjID49IDEwMDAwMDApCisJCXJldHVybiBN T0RFX0kyQ19GbVA7CisJcmV0dXJuIE1PREVfSTJDX0ZtOworfQorCisvKgorICogUmVzcG9uc2Ug RGVzY3JpcHRvciBTdHJ1Y3R1cmUKKyAqLworI2RlZmluZSBSRVNQX1NUQVRVUyhyZXNwKQkJRklF TERfR0VUKEdFTk1BU0soMzEsIDI4KSwgcmVzcCkKKyNkZWZpbmUgUkVTUF9USUQocmVzcCkJCQlG SUVMRF9HRVQoR0VOTUFTSygyNywgMjQpLCByZXNwKQorI2RlZmluZSBSRVNQX0RBVEFfTEVOR1RI KHJlc3ApCQlGSUVMRF9HRVQoR0VOTUFTSygyMSwgIDApLCByZXNwKQorCisjZGVmaW5lIFJFU1Bf RVJSX0ZJRUxECQkJR0VOTUFTSygzMSwgMjgpCisKK2VudW0gaGNpX3Jlc3BfZXJyIHsKKwlSRVNQ X1NVQ0NFU1MJCT0gMHgwLAorCVJFU1BfRVJSX0NSQwkJPSAweDEsCisJUkVTUF9FUlJfUEFSSVRZ CQk9IDB4MiwKKwlSRVNQX0VSUl9GUkFNRQkJPSAweDMsCisJUkVTUF9FUlJfQUREUl9IRUFERVIJ PSAweDQsCisJUkVTUF9FUlJfTkFDSwkJPSAweDUsCisJUkVTUF9FUlJfT1ZMCQk9IDB4NiwKKwlS RVNQX0VSUl9BQk9SVEVECT0gMHg4LAorCVJFU1BfRVJSX0kyQ19XUl9EQVRBX05BQ0sgPSAweDks CisJUkVTUF9FUlJfTk9UX1NVUFBPUlRFRAk9IDB4YSwKK307CisKKy8qIFRJRCBnZW5lcmF0aW9u ICovCisjZGVmaW5lIGhjaV9nZXRfdGlkKGJpdHMpIFwKKwkoYXRvbWljX2luY19yZXR1cm5fcmVs YXhlZCgmaGNpLT5uZXh0X2NtZF90aWQpICUgKDEgPDwgKGJpdHMpKSkKKworLyogVGhpcyBhYnN0 cmFjdHMgb3BlcmF0aW9ucyB3aXRoIG91ciBjb21tYW5kIGRlc2NyaXB0b3IgZm9ybWF0cyAqLwor c3RydWN0IGhjaV9jbWRfb3BzIHsKKwlpbnQgKCpwcmVwX2NjYykoc3RydWN0IGkzY19oY2kgKmhj aSwgc3RydWN0IGhjaV94ZmVyICp4ZmVyLAorCQkJdTggY2NjX2FkZHIsIHU4IGNjY19jbWQsIGJv b2wgcmF3KTsKKwl2b2lkICgqcHJlcF9pM2NfeGZlcikoc3RydWN0IGkzY19oY2kgKmhjaSwgc3Ry dWN0IGkzY19kZXZfZGVzYyAqZGV2LAorCQkJICAgICAgc3RydWN0IGhjaV94ZmVyICp4ZmVyKTsK Kwl2b2lkICgqcHJlcF9pMmNfeGZlcikoc3RydWN0IGkzY19oY2kgKmhjaSwgc3RydWN0IGkyY19k ZXZfZGVzYyAqZGV2LAorCQkJICAgICAgc3RydWN0IGhjaV94ZmVyICp4ZmVyKTsKKwlpbnQgKCpw ZXJmb3JtX2RhYSkoc3RydWN0IGkzY19oY2kgKmhjaSk7Cit9OworCisvKiBPdXIgdmFyaW91cyBp bnN0YW5jZXMgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgaGNpX2NtZF9vcHMgaTNjX2hjaV9jbWRf djE7CitleHRlcm4gY29uc3Qgc3RydWN0IGhjaV9jbWRfb3BzIGkzY19oY2lfY21kX3YyOworCisj ZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTNjL21hc3Rlci9taXBpLWkzYy1oY2kvY21kX3Yx LmMgYi9kcml2ZXJzL2kzYy9tYXN0ZXIvbWlwaS1pM2MtaGNpL2NtZF92MS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmQ4ZGJlYzE0MzEKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2kzYy9tYXN0ZXIvbWlwaS1pM2MtaGNpL2NtZF92MS5jCkBAIC0wLDAgKzEsMzYy IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisvKgorICogQ29w eXJpZ2h0IChjKSAyMDIwLCBNSVBJIEFsbGlhbmNlLCBJbmMuCisgKgorICogQXV0aG9yOiBOaWNv bGFzIFBpdHJlIDxucGl0cmVAYmF5bGlicmUuY29tPgorICoKKyAqIEkzQyBIQ0kgdjEuMC92MS4x IENvbW1hbmQgRGVzY3JpcHRvciBIYW5kbGluZworICovCisKKyNpbmNsdWRlIDxsaW51eC9iaXRm aWVsZC5oPgorI2luY2x1ZGUgPGxpbnV4L2kzYy9tYXN0ZXIuaD4KKworI2luY2x1ZGUgImhjaS5o IgorI2luY2x1ZGUgImNtZC5oIgorI2luY2x1ZGUgImRhdC5oIgorI2luY2x1ZGUgImRjdC5oIgor CisKKy8qCisgKiBBZGRyZXNzIEFzc2lnbm1lbnQgQ29tbWFuZAorICovCisKKyNkZWZpbmUgQ01E XzBfQVRUUl9BCQkJRklFTERfUFJFUChDTURfMF9BVFRSLCAweDIpCisKKyNkZWZpbmUgQ01EX0Ew X1RPQwkJCSAgICAgICAgICAgVzBfQklUXygzMSkKKyNkZWZpbmUgQ01EX0EwX1JPQwkJCSAgICAg ICAgICAgVzBfQklUXygzMCkKKyNkZWZpbmUgQ01EX0EwX0RFVl9DT1VOVCh2KQkJRklFTERfUFJF UChXMF9NQVNLKDI5LCAyNiksIHYpCisjZGVmaW5lIENNRF9BMF9ERVZfSU5ERVgodikJCUZJRUxE X1BSRVAoVzBfTUFTSygyMCwgMTYpLCB2KQorI2RlZmluZSBDTURfQTBfQ01EKHYpCQkJRklFTERf UFJFUChXMF9NQVNLKDE0LCA3KSwgdikKKyNkZWZpbmUgQ01EX0EwX1RJRCh2KQkJCUZJRUxEX1BS RVAoVzBfTUFTSyg2LCAzKSwgdikKKworLyoKKyAqIEltbWVkaWF0ZSBEYXRhIFRyYW5zZmVyIENv bW1hbmQKKyAqLworCisjZGVmaW5lIENNRF8wX0FUVFJfSQkJCUZJRUxEX1BSRVAoQ01EXzBfQVRU UiwgMHgxKQorCisjZGVmaW5lIENNRF9JMV9EQVRBX0JZVEVfNCh2KQkJRklFTERfUFJFUChXMV9N QVNLKDYzLCA1NiksIHYpCisjZGVmaW5lIENNRF9JMV9EQVRBX0JZVEVfMyh2KQkJRklFTERfUFJF UChXMV9NQVNLKDU1LCA0OCksIHYpCisjZGVmaW5lIENNRF9JMV9EQVRBX0JZVEVfMih2KQkJRklF TERfUFJFUChXMV9NQVNLKDQ3LCA0MCksIHYpCisjZGVmaW5lIENNRF9JMV9EQVRBX0JZVEVfMSh2 KQkJRklFTERfUFJFUChXMV9NQVNLKDM5LCAzMiksIHYpCisjZGVmaW5lIENNRF9JMV9ERUZfQllU RSh2KQkJRklFTERfUFJFUChXMV9NQVNLKDM5LCAzMiksIHYpCisjZGVmaW5lIENNRF9JMF9UT0MJ CQkgICAgICAgICAgIFcwX0JJVF8oMzEpCisjZGVmaW5lIENNRF9JMF9ST0MJCQkgICAgICAgICAg IFcwX0JJVF8oMzApCisjZGVmaW5lIENNRF9JMF9STlcJCQkgICAgICAgICAgIFcwX0JJVF8oMjkp CisjZGVmaW5lIENNRF9JMF9NT0RFKHYpCQkJRklFTERfUFJFUChXMF9NQVNLKDI4LCAyNiksIHYp CisjZGVmaW5lIENNRF9JMF9EVFQodikJCQlGSUVMRF9QUkVQKFcwX01BU0soMjUsIDIzKSwgdikK KyNkZWZpbmUgQ01EX0kwX0RFVl9JTkRFWCh2KQkJRklFTERfUFJFUChXMF9NQVNLKDIwLCAxNiks IHYpCisjZGVmaW5lIENNRF9JMF9DUAkJCSAgICAgICAgICAgVzBfQklUXygxNSkKKyNkZWZpbmUg Q01EX0kwX0NNRCh2KQkJCUZJRUxEX1BSRVAoVzBfTUFTSygxNCwgNyksIHYpCisjZGVmaW5lIENN RF9JMF9USUQodikJCQlGSUVMRF9QUkVQKFcwX01BU0soNiwgMyksIHYpCisKKy8qCisgKiBSZWd1 bGFyIERhdGEgVHJhbnNmZXIgQ29tbWFuZAorICovCisKKyNkZWZpbmUgQ01EXzBfQVRUUl9SCQkJ RklFTERfUFJFUChDTURfMF9BVFRSLCAweDApCisKKyNkZWZpbmUgQ01EX1IxX0RBVEFfTEVOR1RI KHYpCQlGSUVMRF9QUkVQKFcxX01BU0soNjMsIDQ4KSwgdikKKyNkZWZpbmUgQ01EX1IxX0RFRl9C WVRFKHYpCQlGSUVMRF9QUkVQKFcxX01BU0soMzksIDMyKSwgdikKKyNkZWZpbmUgQ01EX1IwX1RP QwkJCSAgICAgICAgICAgVzBfQklUXygzMSkKKyNkZWZpbmUgQ01EX1IwX1JPQwkJCSAgICAgICAg ICAgVzBfQklUXygzMCkKKyNkZWZpbmUgQ01EX1IwX1JOVwkJCSAgICAgICAgICAgVzBfQklUXygy OSkKKyNkZWZpbmUgQ01EX1IwX01PREUodikJCQlGSUVMRF9QUkVQKFcwX01BU0soMjgsIDI2KSwg dikKKyNkZWZpbmUgQ01EX1IwX0RCUAkJCSAgICAgICAgICAgVzBfQklUXygyNSkKKyNkZWZpbmUg Q01EX1IwX0RFVl9JTkRFWCh2KQkJRklFTERfUFJFUChXMF9NQVNLKDIwLCAxNiksIHYpCisjZGVm aW5lIENNRF9SMF9DUAkJCSAgICAgICAgICAgVzBfQklUXygxNSkKKyNkZWZpbmUgQ01EX1IwX0NN RCh2KQkJCUZJRUxEX1BSRVAoVzBfTUFTSygxNCwgNyksIHYpCisjZGVmaW5lIENNRF9SMF9USUQo dikJCQlGSUVMRF9QUkVQKFcwX01BU0soNiwgMyksIHYpCisKKy8qCisgKiBDb21ibyBUcmFuc2Zl ciAoV3JpdGUgKyBXcml0ZS9SZWFkKSBDb21tYW5kCisgKi8KKworI2RlZmluZSBDTURfMF9BVFRS X0MJCQlGSUVMRF9QUkVQKENNRF8wX0FUVFIsIDB4MykKKworI2RlZmluZSBDTURfQzFfREFUQV9M RU5HVEgodikJCUZJRUxEX1BSRVAoVzFfTUFTSyg2MywgNDgpLCB2KQorI2RlZmluZSBDTURfQzFf T0ZGU0VUKHYpCQlGSUVMRF9QUkVQKFcxX01BU0soNDcsIDMyKSwgdikKKyNkZWZpbmUgQ01EX0Mw X1RPQwkJCSAgICAgICAgICAgVzBfQklUXygzMSkKKyNkZWZpbmUgQ01EX0MwX1JPQwkJCSAgICAg ICAgICAgVzBfQklUXygzMCkKKyNkZWZpbmUgQ01EX0MwX1JOVwkJCSAgICAgICAgICAgVzBfQklU XygyOSkKKyNkZWZpbmUgQ01EX0MwX01PREUodikJCQlGSUVMRF9QUkVQKFcwX01BU0soMjgsIDI2 KSwgdikKKyNkZWZpbmUgQ01EX0MwXzE2X0JJVF9TVUJPRkZTRVQJCVcwX2JpdCgyNSkKKyNkZWZp bmUgQ01EX0MwX0ZJUlNUX1BIQVNFX01PREUJCSAgICAgICAgICAgVzBfQklUXygyNCkKKyNkZWZp bmUgQ01EX0MwX0RBVEFfTEVOR1RIX1BPU0lUSU9OKHYpCUZJRUxEX1BSRVAoVzBfTUFTSygyMywg MjIpLCB2KQorI2RlZmluZSBDTURfQzBfREVWX0lOREVYKHYpCQlGSUVMRF9QUkVQKFcwX01BU0so MjAsIDE2KSwgdikKKyNkZWZpbmUgQ01EX0MwX0NQCQkJICAgICAgICAgICBXMF9CSVRfKDE1KQor I2RlZmluZSBDTURfQzBfQ01EKHYpCQkJRklFTERfUFJFUChXMF9NQVNLKDE0LCA3KSwgdikKKyNk ZWZpbmUgQ01EX0MwX1RJRCh2KQkJCUZJRUxEX1BSRVAoVzBfTUFTSyg2LCAzKSwgdikKKworLyoK KyAqIEludGVybmFsIENvbnRyb2wgQ29tbWFuZAorICovCisKKyNkZWZpbmUgQ01EXzBfQVRUUl9N CQkJRklFTERfUFJFUChDTURfMF9BVFRSLCAweDcpCisKKyNkZWZpbmUgQ01EX00xX1ZFTkRPUl9T UEVDSUZJQwkJICAgICAgICAgICBXMV9NQVNLKDYzLCAzMikKKyNkZWZpbmUgQ01EX00wX01JUElf UkVTRVJWRUQJCSAgICAgICAgICAgVzBfTUFTSygzMSwgMTIpCisjZGVmaW5lIENNRF9NMF9NSVBJ X0NNRAkJCSAgICAgICAgICAgVzBfTUFTSygxMSwgOCkKKyNkZWZpbmUgQ01EX00wX1ZFTkRPUl9J TkZPX1BSRVNFTlQJICAgICAgICAgICBXMF9CSVRfKDcpCisjZGVmaW5lIENNRF9NMF9USUQodikJ CQlGSUVMRF9QUkVQKFcwX01BU0soNiwgMyksIHYpCisKKworc3RhdGljIGludCBoY2lfY21kX3Yx X3ByZXBfY2NjKHN0cnVjdCBpM2NfaGNpICpoY2ksCisJCQkgICAgICAgc3RydWN0IGhjaV94ZmVy ICp4ZmVyLAorCQkJICAgICAgIHU4IGNjY19hZGRyLCB1OCBjY2NfY21kLCBib29sIHJhdykKK3sK Kwl1X2ludCBkYXRfaWR4ID0gMDsKKwlpbnQgbW9kZSA9IGhjaV9nZXRfaTNjX21vZGUoaGNpKTsK Kwl1OCAqZGF0YSA9IHhmZXItPmRhdGE7CisJdV9pbnQgZGF0YV9sZW4gPSB4ZmVyLT5kYXRhX2xl bjsKKwlib29sIHJudyA9IHhmZXItPnJudzsKKwlpbnQgcmV0OworCisJQlVHX09OKHJhdyk7CisK KwlpZiAoY2NjX2FkZHIgIT0gSTNDX0JST0FEQ0FTVF9BRERSKSB7CisJCXJldCA9IGkzY19oY2lf ZGF0X2dldF9pbmRleChoY2ksIGNjY19hZGRyKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4g LUVOT0RFVjsKKwkJZGF0X2lkeCA9IHJldDsKKwl9CisKKwl4ZmVyLT5jbWRfdGlkID0gaGNpX2dl dF90aWQoNCk7CisKKwlpZiAoIXJudyAmJiBkYXRhX2xlbiA8PSA0KSB7CisJCS8qIHdlIHVzZSBh biBJbW1lZGlhdGUgRGF0YSBUcmFuc2ZlciBDb21tYW5kICovCisJCXhmZXItPmNtZF9kZXNjWzBd ID0KKwkJCUNNRF8wX0FUVFJfSSB8CisJCQlDTURfSTBfVElEKHhmZXItPmNtZF90aWQpIHwKKwkJ CUNNRF9JMF9DTUQoY2NjX2NtZCkgfCBDTURfSTBfQ1AgfAorCQkJQ01EX0kwX0RFVl9JTkRFWChk YXRfaWR4KSB8CisJCQlDTURfSTBfRFRUKGRhdGFfbGVuKSB8CisJCQlDTURfSTBfTU9ERShtb2Rl KTsKKwkJeGZlci0+Y21kX2Rlc2NbMV0gPSAwOworCQlzd2l0Y2ggKGRhdGFfbGVuKSB7CisJCWNh c2UgNDoKKwkJCXhmZXItPmNtZF9kZXNjWzFdIHw9IENNRF9JMV9EQVRBX0JZVEVfNChkYXRhWzNd KTsKKwkJCWZhbGx0aHJvdWdoOworCQljYXNlIDM6CisJCQl4ZmVyLT5jbWRfZGVzY1sxXSB8PSBD TURfSTFfREFUQV9CWVRFXzMoZGF0YVsyXSk7CisJCQlmYWxsdGhyb3VnaDsKKwkJY2FzZSAyOgor CQkJeGZlci0+Y21kX2Rlc2NbMV0gfD0gQ01EX0kxX0RBVEFfQllURV8yKGRhdGFbMV0pOworCQkJ ZmFsbHRocm91Z2g7CisJCWNhc2UgMToKKwkJCXhmZXItPmNtZF9kZXNjWzFdIHw9IENNRF9JMV9E QVRBX0JZVEVfMShkYXRhWzBdKTsKKwkJCWZhbGx0aHJvdWdoOworCQljYXNlIDA6CisJCQlicmVh azsKKwkJfQorCQkvKiB3ZSBjb25zdW1lZCBhbGwgdGhlIGRhdGEgaW4gdGhlIGNtZCBkZXNjcmlw dG9yICovCisJCXhmZXItPmRhdGEgPSBOVUxMOworCX0gZWxzZSB7CisJCS8qIHdlIHVzZSBhIFJl Z3VsYXIgRGF0YSBUcmFuc2ZlciBDb21tYW5kICovCisJCXhmZXItPmNtZF9kZXNjWzBdID0KKwkJ CUNNRF8wX0FUVFJfUiB8CisJCQlDTURfUjBfVElEKHhmZXItPmNtZF90aWQpIHwKKwkJCUNNRF9S MF9DTUQoY2NjX2NtZCkgfCBDTURfUjBfQ1AgfAorCQkJQ01EX1IwX0RFVl9JTkRFWChkYXRfaWR4 KSB8CisJCQlDTURfUjBfTU9ERShtb2RlKSB8CisJCQkocm53ID8gQ01EX1IwX1JOVyA6IDApOwor CQl4ZmVyLT5jbWRfZGVzY1sxXSA9CisJCQlDTURfUjFfREFUQV9MRU5HVEgoZGF0YV9sZW4pOwor CX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBoY2lfY21kX3YxX3ByZXBfaTNjX3hm ZXIoc3RydWN0IGkzY19oY2kgKmhjaSwKKwkJCQkgICAgIHN0cnVjdCBpM2NfZGV2X2Rlc2MgKmRl diwKKwkJCQkgICAgIHN0cnVjdCBoY2lfeGZlciAqeGZlcikKK3sKKwlzdHJ1Y3QgaTNjX2hjaV9k ZXZfZGF0YSAqZGV2X2RhdGEgPSBpM2NfZGV2X2dldF9tYXN0ZXJfZGF0YShkZXYpOworCXVfaW50 IGRhdF9pZHggPSBkZXZfZGF0YS0+ZGF0X2lkeDsKKwlpbnQgbW9kZSA9IGhjaV9nZXRfaTNjX21v ZGUoaGNpKTsKKwl1OCAqZGF0YSA9IHhmZXItPmRhdGE7CisJdV9pbnQgZGF0YV9sZW4gPSB4ZmVy LT5kYXRhX2xlbjsKKwlib29sIHJudyA9IHhmZXItPnJudzsKKworCXhmZXItPmNtZF90aWQgPSBo Y2lfZ2V0X3RpZCg0KTsKKworCWlmICghcm53ICYmIGRhdGFfbGVuIDw9IDQpIHsKKwkJLyogd2Ug dXNlIGFuIEltbWVkaWF0ZSBEYXRhIFRyYW5zZmVyIENvbW1hbmQgKi8KKwkJeGZlci0+Y21kX2Rl c2NbMF0gPQorCQkJQ01EXzBfQVRUUl9JIHwKKwkJCUNNRF9JMF9USUQoeGZlci0+Y21kX3RpZCkg fAorCQkJQ01EX0kwX0RFVl9JTkRFWChkYXRfaWR4KSB8CisJCQlDTURfSTBfRFRUKGRhdGFfbGVu KSB8CisJCQlDTURfSTBfTU9ERShtb2RlKTsKKwkJeGZlci0+Y21kX2Rlc2NbMV0gPSAwOworCQlz d2l0Y2ggKGRhdGFfbGVuKSB7CisJCWNhc2UgNDoKKwkJCXhmZXItPmNtZF9kZXNjWzFdIHw9IENN RF9JMV9EQVRBX0JZVEVfNChkYXRhWzNdKTsKKwkJCWZhbGx0aHJvdWdoOworCQljYXNlIDM6CisJ CQl4ZmVyLT5jbWRfZGVzY1sxXSB8PSBDTURfSTFfREFUQV9CWVRFXzMoZGF0YVsyXSk7CisJCQlm YWxsdGhyb3VnaDsKKwkJY2FzZSAyOgorCQkJeGZlci0+Y21kX2Rlc2NbMV0gfD0gQ01EX0kxX0RB VEFfQllURV8yKGRhdGFbMV0pOworCQkJZmFsbHRocm91Z2g7CisJCWNhc2UgMToKKwkJCXhmZXIt PmNtZF9kZXNjWzFdIHw9IENNRF9JMV9EQVRBX0JZVEVfMShkYXRhWzBdKTsKKwkJCWZhbGx0aHJv dWdoOworCQljYXNlIDA6CisJCQlicmVhazsKKwkJfQorCQkvKiB3ZSBjb25zdW1lZCBhbGwgdGhl IGRhdGEgaW4gdGhlIGNtZCBkZXNjcmlwdG9yICovCisJCXhmZXItPmRhdGEgPSBOVUxMOworCX0g ZWxzZSB7CisJCS8qIHdlIHVzZSBhIFJlZ3VsYXIgRGF0YSBUcmFuc2ZlciBDb21tYW5kICovCisJ CXhmZXItPmNtZF9kZXNjWzBdID0KKwkJCUNNRF8wX0FUVFJfUiB8CisJCQlDTURfUjBfVElEKHhm ZXItPmNtZF90aWQpIHwKKwkJCUNNRF9SMF9ERVZfSU5ERVgoZGF0X2lkeCkgfAorCQkJQ01EX1Iw X01PREUobW9kZSkgfAorCQkJKHJudyA/IENNRF9SMF9STlcgOiAwKTsKKwkJeGZlci0+Y21kX2Rl c2NbMV0gPQorCQkJQ01EX1IxX0RBVEFfTEVOR1RIKGRhdGFfbGVuKTsKKwl9Cit9CisKK3N0YXRp YyB2b2lkIGhjaV9jbWRfdjFfcHJlcF9pMmNfeGZlcihzdHJ1Y3QgaTNjX2hjaSAqaGNpLAorCQkJ CSAgICAgc3RydWN0IGkyY19kZXZfZGVzYyAqZGV2LAorCQkJCSAgICAgc3RydWN0IGhjaV94ZmVy ICp4ZmVyKQoreworCXN0cnVjdCBpM2NfaGNpX2Rldl9kYXRhICpkZXZfZGF0YSA9IGkyY19kZXZf Z2V0X21hc3Rlcl9kYXRhKGRldik7CisJdV9pbnQgZGF0X2lkeCA9IGRldl9kYXRhLT5kYXRfaWR4 OworCWludCBtb2RlID0gaGNpX2dldF9pMmNfbW9kZShoY2kpOworCXU4ICpkYXRhID0geGZlci0+ ZGF0YTsKKwl1X2ludCBkYXRhX2xlbiA9IHhmZXItPmRhdGFfbGVuOworCWJvb2wgcm53ID0geGZl ci0+cm53OworCisJeGZlci0+Y21kX3RpZCA9IGhjaV9nZXRfdGlkKDQpOworCisJaWYgKCFybncg JiYgZGF0YV9sZW4gPD0gNCkgeworCQkvKiB3ZSB1c2UgYW4gSW1tZWRpYXRlIERhdGEgVHJhbnNm ZXIgQ29tbWFuZCAqLworCQl4ZmVyLT5jbWRfZGVzY1swXSA9CisJCQlDTURfMF9BVFRSX0kgfAor CQkJQ01EX0kwX1RJRCh4ZmVyLT5jbWRfdGlkKSB8CisJCQlDTURfSTBfREVWX0lOREVYKGRhdF9p ZHgpIHwKKwkJCUNNRF9JMF9EVFQoZGF0YV9sZW4pIHwKKwkJCUNNRF9JMF9NT0RFKG1vZGUpOwor CQl4ZmVyLT5jbWRfZGVzY1sxXSA9IDA7CisJCXN3aXRjaCAoZGF0YV9sZW4pIHsKKwkJY2FzZSA0 OgorCQkJeGZlci0+Y21kX2Rlc2NbMV0gfD0gQ01EX0kxX0RBVEFfQllURV80KGRhdGFbM10pOwor CQkJZmFsbHRocm91Z2g7CisJCWNhc2UgMzoKKwkJCXhmZXItPmNtZF9kZXNjWzFdIHw9IENNRF9J MV9EQVRBX0JZVEVfMyhkYXRhWzJdKTsKKwkJCWZhbGx0aHJvdWdoOworCQljYXNlIDI6CisJCQl4 ZmVyLT5jbWRfZGVzY1sxXSB8PSBDTURfSTFfREFUQV9CWVRFXzIoZGF0YVsxXSk7CisJCQlmYWxs dGhyb3VnaDsKKwkJY2FzZSAxOgorCQkJeGZlci0+Y21kX2Rlc2NbMV0gfD0gQ01EX0kxX0RBVEFf QllURV8xKGRhdGFbMF0pOworCQkJZmFsbHRocm91Z2g7CisJCWNhc2UgMDoKKwkJCWJyZWFrOwor CQl9CisJCS8qIHdlIGNvbnN1bWVkIGFsbCB0aGUgZGF0YSBpbiB0aGUgY21kIGRlc2NyaXB0b3Ig Ki8KKwkJeGZlci0+ZGF0YSA9IE5VTEw7CisJfSBlbHNlIHsKKwkJLyogd2UgdXNlIGEgUmVndWxh ciBEYXRhIFRyYW5zZmVyIENvbW1hbmQgKi8KKwkJeGZlci0+Y21kX2Rlc2NbMF0gPQorCQkJQ01E XzBfQVRUUl9SIHwKKwkJCUNNRF9SMF9USUQoeGZlci0+Y21kX3RpZCkgfAorCQkJQ01EX1IwX0RF Vl9JTkRFWChkYXRfaWR4KSB8CisJCQlDTURfUjBfTU9ERShtb2RlKSB8CisJCQkocm53ID8gQ01E X1IwX1JOVyA6IDApOworCQl4ZmVyLT5jbWRfZGVzY1sxXSA9CisJCQlDTURfUjFfREFUQV9MRU5H VEgoZGF0YV9sZW4pOworCX0KK30KKworc3RhdGljIGludCBoY2lfY21kX3YxX2RhYShzdHJ1Y3Qg aTNjX2hjaSAqaGNpKQoreworCXN0cnVjdCBoY2lfeGZlciAqeGZlcjsKKwlpbnQgcmV0LCBkYXRf aWR4ID0gLTE7CisJdTggbmV4dF9hZGRyOworCXU2NCBwaWQ7CisJdV9pbnQgZGNyLCBiY3I7CisJ REVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soZG9uZSk7CisKKwl4ZmVyID0gaGNpX2FsbG9jX3hm ZXIoMik7CisJaWYgKCF4ZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qCisJICogU2ltcGxl IGZvciBub3c6IHdlIGFsbG9jYXRlIGEgdGVtcG9yYXJ5IERBVCBlbnRyeSwgZG8gYSBzaW5nbGUK KwkgKiBEQUEsIHJlZ2lzdGVyIHRoZSBkZXZpY2Ugd2hpY2ggd2lsbCBhbGxvY2F0ZSBpdHMgb3du IERBVCBlbnRyeQorCSAqIHZpYSB0aGUgY29yZSBjYWxsYmFjaywgdGhlbiBmcmVlIHRoZSB0ZW1w b3JhcnkgREFUIGVudHJ5LgorCSAqIExvb3AgdW50aWwgdGhlcmUgaXMgbm8gbW9yZSBkZXZpY2Vz IHRvIGFzc2lnbiBhbiBhZGRyZXNzIHRvLgorCSAqIFllcywgdGhlcmUgaXMgcm9vbSBmb3IgaW1w cm92ZW1lbnRzLgorCSAqLworCWZvciAoOzspIHsKKwkJcmV0ID0gaTNjX2hjaV9kYXRfYWxsb2Nf ZW50cnkoaGNpKTsKKwkJaWYgKHJldCA8IDApCisJCQlicmVhazsKKwkJZGF0X2lkeCA9IHJldDsK KwkJcmV0ID0gaTNjX21hc3Rlcl9nZXRfZnJlZV9hZGRyKCZoY2ktPm1hc3RlciwgbmV4dF9hZGRy KTsKKwkJaWYgKHJldCA8IDApCisJCQlicmVhazsKKwkJbmV4dF9hZGRyID0gcmV0OworCisJCURC RygibmV4dF9hZGRyID0gMHglMDJ4LCBEQUEgdXNpbmcgREFUICVkIiwgbmV4dF9hZGRyLCBkYXRf aWR4KTsKKwkJaTNjX2hjaV9kYXRfc2V0X2R5bmFtaWNfYWRkcihoY2ksIGRhdF9pZHgsIG5leHRf YWRkcik7CisJCWkzY19oY2lfZGN0X2luZGV4X3Jlc2V0KGhjaSk7CisKKwkJeGZlci0+Y21kX3Rp ZCA9IGhjaV9nZXRfdGlkKDQpOworCQl4ZmVyLT5jbWRfZGVzY1swXSA9CisJCQlDTURfMF9BVFRS X0EgfAorCQkJQ01EX0EwX1RJRCh4ZmVyLT5jbWRfdGlkKSB8CisJCQlDTURfQTBfQ01EKEkzQ19D Q0NfRU5UREFBKSB8CisJCQlDTURfQTBfREVWX0lOREVYKGRhdF9pZHgpIHwKKwkJCUNNRF9BMF9E RVZfQ09VTlQoMSkgfAorCQkJQ01EX0EwX1JPQyB8IENNRF9BMF9UT0M7CisJCXhmZXItPmNtZF9k ZXNjWzFdID0gMDsKKwkJaGNpLT5pby0+cXVldWVfeGZlcihoY2ksIHhmZXIsIDEpOworCQlpZiAo IXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmZG9uZSwgSFopICYmCisJCSAgICBoY2ktPmlv LT5kZXF1ZXVlX3hmZXIoaGNpLCB4ZmVyLCAxKSkgeworCQkJcmV0ID0gLUVUSU1FOworCQkJYnJl YWs7CisJCX0KKwkJaWYgKFJFU1BfU1RBVFVTKHhmZXJbMF0ucmVzcG9uc2UpID09IFJFU1BfRVJS X05BQ0sgJiYKKwkJICAgIFJFU1BfU1RBVFVTKHhmZXJbMF0ucmVzcG9uc2UpID09IDEpIHsKKwkJ CXJldCA9IDA7ICAvKiBubyBtb3JlIGRldmljZXMgdG8gYmUgYXNzaWduZWQgKi8KKwkJCWJyZWFr OworCQl9CisJCWlmIChSRVNQX1NUQVRVUyh4ZmVyWzBdLnJlc3BvbnNlKSAhPSBSRVNQX1NVQ0NF U1MpIHsKKwkJCXJldCA9IC1FSU87CisJCQlicmVhazsKKwkJfQorCisJCWkzY19oY2lfZGN0X2dl dF92YWwoaGNpLCAwLCAmcGlkLCAmZGNyLCAmYmNyKTsKKwkJREJHKCJhc3NpZ25lZCBhZGRyZXNz ICUjeCB0byBkZXZpY2UgUElEPTB4JWxseCBEQ1I9JSN4IEJDUj0lI3giLAorCQkgICAgbmV4dF9h ZGRyLCBwaWQsIGRjciwgYmNyKTsKKworCQlpM2NfaGNpX2RhdF9mcmVlX2VudHJ5KGhjaSwgZGF0 X2lkeCk7CisJCWRhdF9pZHggPSAtMTsKKworCQkvKgorCQkgKiBUT0RPOiBFeHRlbmQgdGhlIHN1 YnN5c3RlbSBsYXllciB0byBhbGxvdyBmb3IgcmVnaXN0ZXJpbmcKKwkJICogbmV3IGRldmljZSBh bmQgcHJvdmlkZSBCQ1IvRENSL1BJRCBhdCB0aGUgc2FtZSB0aW1lLgorCQkgKi8KKwkJcmV0ID0g aTNjX21hc3Rlcl9hZGRfaTNjX2Rldl9sb2NrZWQoJmhjaS0+bWFzdGVyLCBuZXh0X2FkZHIpOwor CQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJaWYgKGRhdF9pZHggPj0gMCkKKwkJaTNjX2hj aV9kYXRfZnJlZV9lbnRyeShoY2ksIGRhdF9pZHgpOworCWhjaV9mcmVlX3hmZXIoeGZlciwgMSk7 CisJcmV0dXJuIHJldDsKK30KKworY29uc3Qgc3RydWN0IGhjaV9jbWRfb3BzIGkzY19oY2lfY21k X3YxID0geworCS5wcmVwX2NjYwkJPSBoY2lfY21kX3YxX3ByZXBfY2NjLAorCS5wcmVwX2kzY194 ZmVyCQk9IGhjaV9jbWRfdjFfcHJlcF9pM2NfeGZlciwKKwkucHJlcF9pMmNfeGZlcgkJPSBoY2lf Y21kX3YxX3ByZXBfaTJjX3hmZXIsCisJLnBlcmZvcm1fZGFhCQk9IGhjaV9jbWRfdjFfZGFhLAor fTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTNjL21hc3Rlci9taXBpLWkzYy1oY2kvY21kX3YyLmMg Yi9kcml2ZXJzL2kzYy9tYXN0ZXIvbWlwaS1pM2MtaGNpL2NtZF92Mi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjJmZGUwMWZjYjUKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2kzYy9tYXN0ZXIvbWlwaS1pM2MtaGNpL2NtZF92Mi5jCkBAIC0wLDAgKzEsMjgwIEBA CisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisvKgorICogQ29weXJp Z2h0IChjKSAyMDIwLCBNSVBJIEFsbGlhbmNlLCBJbmMuCisgKgorICogQXV0aG9yOiBOaWNvbGFz IFBpdHJlIDxucGl0cmVAYmF5bGlicmUuY29tPgorICoKKyAqIEkzQyBIQ0kgdjIuMCBDb21tYW5k IERlc2NyaXB0b3IgSGFuZGxpbmcKKyAqCisgKiBOb3RlOiBUaGUgSTNDIEhDSSB2Mi4wIHNwZWMg aXMgc3RpbGwgaW4gZmx1eC4gVGhlIGNvZGUgaGVyZSB3aWxsIGNoYW5nZS4KKyAqLworCisjaW5j bHVkZSA8bGludXgvYml0ZmllbGQuaD4KKyNpbmNsdWRlIDxsaW51eC9pM2MvbWFzdGVyLmg+CisK KyNpbmNsdWRlICJoY2kuaCIKKyNpbmNsdWRlICJjbWQuaCIKKworCisvKgorICogVW5pdmVyc2Fs IERhdGEgVHJhbnNmZXIgQ29tbWFuZAorICovCisKKyNkZWZpbmUgQ01EXzBfQVRUUl9VCQkJRklF TERfUFJFUChDTURfMF9BVFRSLCAweDQpCisKKyNkZWZpbmUgQ01EX1UzX0hEUl9UU1BfTUxfQ1RS TCh2KQlGSUVMRF9QUkVQKFczX01BU0soMTE1LCAxMTIpLCB2KQorI2RlZmluZSBDTURfVTNfQ1RS TF9CWVRFKHYpCQlGSUVMRF9QUkVQKFczX01BU0soMTExLCAxMDQpLCB2KQorI2RlZmluZSBDTURf VTNfTU9EX0JZVEVfNCh2KQkJRklFTERfUFJFUChXM19NQVNLKDEwMywgOTYpLCB2KQorI2RlZmlu ZSBDTURfVTJfTU9EX0JZVEVfMyh2KQkJRklFTERfUFJFUChXMl9NQVNLKDk1LCA4OCksIHYpCisj ZGVmaW5lIENNRF9VMl9NT0RfQllURV8yKHYpCQlGSUVMRF9QUkVQKFcyX01BU0soODcsIDgwKSwg dikKKyNkZWZpbmUgQ01EX1UyX01PRF9CWVRFXzEodikJCUZJRUxEX1BSRVAoVzJfTUFTSyg3OSwg NzIpLCB2KQorI2RlZmluZSBDTURfVTJfTU9EX0JZVEVfMCh2KQkJRklFTERfUFJFUChXMl9NQVNL KDcxLCA2NCksIHYpCisjZGVmaW5lIENNRF9VMV9NTEFORSh2KQkJCUZJRUxEX1BSRVAoVzFfTUFT Syg2MywgNTYpLCB2KQorI2RlZmluZSBDTURfVTFfREFUQV9MRU5HVEgodikJCUZJRUxEX1BSRVAo VzFfTUFTSyg1MywgMzIpLCB2KQorI2RlZmluZSBDTURfVTBfVE9DCQkJICAgICAgICAgICBXMF9C SVRfKDMxKQorI2RlZmluZSBDTURfVTBfUk9DCQkJICAgICAgICAgICBXMF9CSVRfKDMwKQorI2Rl ZmluZSBDTURfVTBfWEZFUl9NT0QJCQkgICAgICAgICAgIFcwX0JJVF8oMjkpCisjZGVmaW5lIENN RF9VMF9NT0RfQllURV9DT1VOVCh2KQlGSUVMRF9QUkVQKFcwX01BU0soMjgsIDI2KSwgdikKKyNk ZWZpbmUgQ01EX1UwX1hGRVJfVFlQRSh2KQkJRklFTERfUFJFUChXMF9NQVNLKDI1LCAyNCksIHYp CisjZGVmaW5lIENNRF9VMF9NT0RFKHYpCQkJRklFTERfUFJFUChXMF9NQVNLKDIzLCAyMCksIHYp CisjZGVmaW5lIENNRF9VMF9ERVZfQUREUkVTUyh2KQkJRklFTERfUFJFUChXMF9NQVNLKDE1LCA5 KSwgdikKKyNkZWZpbmUgQ01EX1UwX1JuVwkJCSAgICAgICAgICAgVzBfQklUXyg4KQorI2RlZmlu ZSBDTURfVTBfSTJDCQkJICAgICAgICAgICBXMF9CSVRfKDcpCisjZGVmaW5lIENNRF9VMF9USUQo dikJCQlGSUVMRF9QUkVQKFcwX01BU0soNiwgMyksIHYpCisKKy8qCisgKiBBZGRyZXNzIEFzc2ln bm1lbnQgQ29tbWFuZAorICovCisKKyNkZWZpbmUgQ01EXzBfQVRUUl9BCQkJRklFTERfUFJFUChD TURfMF9BVFRSLCAweDIpCisKKyNkZWZpbmUgQ01EX0ExX0RBVEFfTEVOR1RIKHYpCQlGSUVMRF9Q UkVQKFcxX01BU0soNTMsIDMyKSwgdikKKyNkZWZpbmUgQ01EX0EwX1RPQwkJCSAgICAgICAgICAg VzBfQklUXygzMSkKKyNkZWZpbmUgQ01EX0EwX1JPQwkJCSAgICAgICAgICAgVzBfQklUXygzMCkK KyNkZWZpbmUgQ01EX0EwX0RFVl9BRERSRVNTKHYpCQlGSUVMRF9QUkVQKFcwX01BU0soMTUsIDkp LCB2KQorI2RlZmluZSBDTURfQTBfVElEKHYpCQkJRklFTERfUFJFUChXMF9NQVNLKDYsIDMpLCB2 KQorCisKK2VudW0gaGNpX2NtZF94ZmVyX3R5cGUgeworCVhGRVJfVFlQRV9QUklWQVRFCQk9IDB4 MCwKKwlYRkVSX1RZUEVfQ0NDX05PX0RFRkJZVEUJPSAweDEsCisJWEZFUl9UWVBFX0NDQ19XX0RF RkJZVEUJCT0gMHgyLAorfTsKKworCitzdGF0aWMgdm9pZCBoY2lfY21kX3YyX3ByZXBfcHJpdmF0 ZV94ZmVyKHN0cnVjdCBpM2NfaGNpICpoY2ksCisJCQkJCSBzdHJ1Y3QgaGNpX3hmZXIgKnhmZXIs CisJCQkJCSB1OCBhZGRyLCB1X2ludCBtb2RlKQoreworCXU4ICpkYXRhID0geGZlci0+ZGF0YTsK Kwl1X2ludCBkYXRhX2xlbiA9IHhmZXItPmRhdGFfbGVuOworCWJvb2wgcm53ID0geGZlci0+cm53 OworCisJeGZlci0+Y21kX3RpZCA9IGhjaV9nZXRfdGlkKDQpOworCisJaWYgKCFybncgJiYgZGF0 YV9sZW4gPD0gNSkgeworCQl4ZmVyLT5jbWRfZGVzY1swXSA9CisJCQlDTURfMF9BVFRSX1UgfAor CQkJQ01EX1UwX1RJRCh4ZmVyLT5jbWRfdGlkKSB8CisJCQlDTURfVTBfREVWX0FERFJFU1MoYWRk cikgfAorCQkJQ01EX1UwX01PREUobW9kZSkgfAorCQkJQ01EX1UwX1hGRVJfVFlQRShYRkVSX1RZ UEVfUFJJVkFURSkgfAorCQkJQ01EX1UwX01PRF9CWVRFX0NPVU5UKGRhdGFfbGVuKTsKKwkJeGZl ci0+Y21kX2Rlc2NbMV0gPQorCQkJQ01EX1UxX0RBVEFfTEVOR1RIKDApOworCQl4ZmVyLT5jbWRf ZGVzY1syXSA9IDA7CisJCXhmZXItPmNtZF9kZXNjWzNdID0gMDsKKwkJc3dpdGNoIChkYXRhX2xl bikgeworCQljYXNlIDU6CisJCQl4ZmVyLT5jbWRfZGVzY1szXSB8PSBDTURfVTNfTU9EX0JZVEVf NChkYXRhWzRdKTsKKwkJCWZhbGx0aHJvdWdoOworCQljYXNlIDQ6CisJCQl4ZmVyLT5jbWRfZGVz Y1syXSB8PSBDTURfVTJfTU9EX0JZVEVfMyhkYXRhWzNdKTsKKwkJCWZhbGx0aHJvdWdoOworCQlj YXNlIDM6CisJCQl4ZmVyLT5jbWRfZGVzY1syXSB8PSBDTURfVTJfTU9EX0JZVEVfMihkYXRhWzJd KTsKKwkJCWZhbGx0aHJvdWdoOworCQljYXNlIDI6CisJCQl4ZmVyLT5jbWRfZGVzY1syXSB8PSBD TURfVTJfTU9EX0JZVEVfMShkYXRhWzFdKTsKKwkJCWZhbGx0aHJvdWdoOworCQljYXNlIDE6CisJ CQl4ZmVyLT5jbWRfZGVzY1syXSB8PSBDTURfVTJfTU9EX0JZVEVfMChkYXRhWzBdKTsKKwkJCWZh bGx0aHJvdWdoOworCQljYXNlIDA6CisJCQlicmVhazsKKwkJfQorCQkvKiB3ZSBjb25zdW1lZCBh bGwgdGhlIGRhdGEgaW4gdGhlIGNtZCBkZXNjcmlwdG9yICovCisJCXhmZXItPmRhdGEgPSBOVUxM OworCX0gZWxzZSB7CisJCXhmZXItPmNtZF9kZXNjWzBdID0KKwkJCUNNRF8wX0FUVFJfVSB8CisJ CQlDTURfVTBfVElEKHhmZXItPmNtZF90aWQpIHwKKwkJCShybncgPyBDTURfVTBfUm5XIDogMCkg fAorCQkJQ01EX1UwX0RFVl9BRERSRVNTKGFkZHIpIHwKKwkJCUNNRF9VMF9NT0RFKG1vZGUpIHwK KwkJCUNNRF9VMF9YRkVSX1RZUEUoWEZFUl9UWVBFX1BSSVZBVEUpOworCQl4ZmVyLT5jbWRfZGVz Y1sxXSA9CisJCQlDTURfVTFfREFUQV9MRU5HVEgoZGF0YV9sZW4pOworCQl4ZmVyLT5jbWRfZGVz Y1syXSA9IDA7CisJCXhmZXItPmNtZF9kZXNjWzNdID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQg aGNpX2NtZF92Ml9wcmVwX2NjYyhzdHJ1Y3QgaTNjX2hjaSAqaGNpLCBzdHJ1Y3QgaGNpX3hmZXIg KnhmZXIsCisJCQkgICAgICAgdTggY2NjX2FkZHIsIHU4IGNjY19jbWQsIGJvb2wgcmF3KQorewor CXVfaW50IG1vZGUgPSBoY2lfZ2V0X2kzY19tb2RlKGhjaSk7CisJdV9pbnQgdHlwZSA9ICFyYXcg PyBYRkVSX1RZUEVfQ0NDX05PX0RFRkJZVEUgOiBYRkVSX1RZUEVfUFJJVkFURTsKKwl1OCAqZGF0 YSA9IHhmZXItPmRhdGE7CisJdV9pbnQgZGF0YV9sZW4gPSB4ZmVyLT5kYXRhX2xlbjsKKwlib29s IHJudyA9IHhmZXItPnJudzsKKworCWlmIChyYXcgJiYgY2NjX2FkZHIgIT0gSTNDX0JST0FEQ0FT VF9BRERSKSB7CisJCWhjaV9jbWRfdjJfcHJlcF9wcml2YXRlX3hmZXIoaGNpLCB4ZmVyLCBjY2Nf YWRkciwgbW9kZSk7CisJCXJldHVybiAwOworCX0KKworCXhmZXItPmNtZF90aWQgPSBoY2lfZ2V0 X3RpZCg0KTsKKworCWlmICghcm53ICYmIGRhdGFfbGVuIDw9IDQpIHsKKwkJeGZlci0+Y21kX2Rl c2NbMF0gPQorCQkJQ01EXzBfQVRUUl9VIHwKKwkJCUNNRF9VMF9USUQoeGZlci0+Y21kX3RpZCkg fAorCQkJQ01EX1UwX0RFVl9BRERSRVNTKGNjY19hZGRyKSB8CisJCQlDTURfVTBfTU9ERShtb2Rl KSB8CisJCQlDTURfVTBfWEZFUl9UWVBFKHR5cGUpIHwKKwkJCUNNRF9VMF9NT0RfQllURV9DT1VO VChkYXRhX2xlbiArICghcmF3ID8gMCA6IDEpKTsKKwkJeGZlci0+Y21kX2Rlc2NbMV0gPQorCQkJ Q01EX1UxX0RBVEFfTEVOR1RIKDApOworCQl4ZmVyLT5jbWRfZGVzY1syXSA9CisJCQlDTURfVTJf TU9EX0JZVEVfMChjY2NfY21kKTsKKwkJeGZlci0+Y21kX2Rlc2NbM10gPSAwOworCQlzd2l0Y2gg KGRhdGFfbGVuKSB7CisJCWNhc2UgNDoKKwkJCXhmZXItPmNtZF9kZXNjWzNdIHw9IENNRF9VM19N T0RfQllURV80KGRhdGFbM10pOworCQkJZmFsbHRocm91Z2g7CisJCWNhc2UgMzoKKwkJCXhmZXIt PmNtZF9kZXNjWzJdIHw9IENNRF9VMl9NT0RfQllURV8zKGRhdGFbMl0pOworCQkJZmFsbHRocm91 Z2g7CisJCWNhc2UgMjoKKwkJCXhmZXItPmNtZF9kZXNjWzJdIHw9IENNRF9VMl9NT0RfQllURV8y KGRhdGFbMV0pOworCQkJZmFsbHRocm91Z2g7CisJCWNhc2UgMToKKwkJCXhmZXItPmNtZF9kZXNj WzJdIHw9IENNRF9VMl9NT0RfQllURV8xKGRhdGFbMF0pOworCQkJZmFsbHRocm91Z2g7CisJCWNh c2UgMDoKKwkJCWJyZWFrOworCQl9CisJCS8qIHdlIGNvbnN1bWVkIGFsbCB0aGUgZGF0YSBpbiB0 aGUgY21kIGRlc2NyaXB0b3IgKi8KKwkJeGZlci0+ZGF0YSA9IE5VTEw7CisJfSBlbHNlIHsKKwkJ eGZlci0+Y21kX2Rlc2NbMF0gPQorCQkJQ01EXzBfQVRUUl9VIHwKKwkJCUNNRF9VMF9USUQoeGZl ci0+Y21kX3RpZCkgfAorCQkJKHJudyA/IENNRF9VMF9SblcgOiAwKSB8CisJCQlDTURfVTBfREVW X0FERFJFU1MoY2NjX2FkZHIpIHwKKwkJCUNNRF9VMF9NT0RFKG1vZGUpIHwKKwkJCUNNRF9VMF9Y RkVSX1RZUEUodHlwZSkgfAorCQkJQ01EX1UwX01PRF9CWVRFX0NPVU5UKCFyYXcgPyAwIDogMSk7 CisJCXhmZXItPmNtZF9kZXNjWzFdID0KKwkJCUNNRF9VMV9EQVRBX0xFTkdUSChkYXRhX2xlbik7 CisJCXhmZXItPmNtZF9kZXNjWzJdID0KKwkJCUNNRF9VMl9NT0RfQllURV8wKGNjY19jbWQpOwor CQl4ZmVyLT5jbWRfZGVzY1szXSA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2 b2lkIGhjaV9jbWRfdjJfcHJlcF9pM2NfeGZlcihzdHJ1Y3QgaTNjX2hjaSAqaGNpLAorCQkJCSAg ICAgc3RydWN0IGkzY19kZXZfZGVzYyAqZGV2LAorCQkJCSAgICAgc3RydWN0IGhjaV94ZmVyICp4 ZmVyKQoreworCWludCBtb2RlID0gaGNpX2dldF9pM2NfbW9kZShoY2kpOworCXU4IGFkZHIgPSBk ZXYtPmluZm8uZHluX2FkZHI7CisKKwloY2lfY21kX3YyX3ByZXBfcHJpdmF0ZV94ZmVyKGhjaSwg eGZlciwgYWRkciwgbW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIGhjaV9jbWRfdjJfcHJlcF9pMmNf eGZlcihzdHJ1Y3QgaTNjX2hjaSAqaGNpLAorCQkJCSAgICAgc3RydWN0IGkyY19kZXZfZGVzYyAq ZGV2LAorCQkJCSAgICAgc3RydWN0IGhjaV94ZmVyICp4ZmVyKQoreworCWludCBtb2RlID0gaGNp X2dldF9pMmNfbW9kZShoY2kpOworCXU4IGFkZHIgPSBkZXYtPmFkZHI7CisKKwloY2lfY21kX3Yy X3ByZXBfcHJpdmF0ZV94ZmVyKGhjaSwgeGZlciwgYWRkciwgbW9kZSk7CisJeGZlci0+Y21kX2Rl c2NbMF0gfD0gQ01EX1UwX0kyQzsKK30KKworc3RhdGljIGludCBoY2lfY21kX3YyX2RhYShzdHJ1 Y3QgaTNjX2hjaSAqaGNpKQoreworCXN0cnVjdCBoY2lfeGZlciAqeGZlcjsKKwlpbnQgcmV0Owor CXU4IG5leHRfYWRkcjsKKwl1MzIgZGV2aWNlX2lkWzJdOworCURFQ0xBUkVfQ09NUExFVElPTl9P TlNUQUNLKGRvbmUpOworCisJeGZlciA9IGhjaV9hbGxvY194ZmVyKDIpOworCWlmICgheGZlcikK KwkJcmV0dXJuIC1FTk9NRU07CisKKwl4ZmVyWzBdLmRhdGEgPSAmZGV2aWNlX2lkOworCXhmZXJb MF0uZGF0YV9sZW4gPSA4OworCXhmZXJbMF0ucm53ID0gdHJ1ZTsKKwl4ZmVyWzBdLmNtZF9kZXNj WzFdID0gQ01EX0ExX0RBVEFfTEVOR1RIKDgpOworCXhmZXJbMV0uY29tcGxldGlvbiA9ICZkb25l OworCisJZm9yICg7OykgeworCQlyZXQgPSBpM2NfbWFzdGVyX2dldF9mcmVlX2FkZHIoJmhjaS0+ bWFzdGVyLCBuZXh0X2FkZHIpOworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCQluZXh0X2Fk ZHIgPSByZXQ7CisJCURCRygibmV4dF9hZGRyID0gMHglMDJ4IiwgbmV4dF9hZGRyKTsKKwkJeGZl clswXS5jbWRfdGlkID0gaGNpX2dldF90aWQoNCk7CisJCXhmZXJbMF0uY21kX2Rlc2NbMF0gPQor CQkJQ01EXzBfQVRUUl9BIHwKKwkJCUNNRF9BMF9USUQoeGZlclswXS5jbWRfdGlkKSB8CisJCQlD TURfQTBfUk9DOworCQl4ZmVyWzFdLmNtZF90aWQgPSBoY2lfZ2V0X3RpZCg0KTsKKwkJeGZlclsx XS5jbWRfZGVzY1swXSA9CisJCQlDTURfMF9BVFRSX0EgfAorCQkJQ01EX0EwX1RJRCh4ZmVyWzFd LmNtZF90aWQpIHwKKwkJCUNNRF9BMF9ERVZfQUREUkVTUyhuZXh0X2FkZHIpIHwKKwkJCUNNRF9B MF9ST0MgfAorCQkJQ01EX0EwX1RPQzsKKwkJaGNpLT5pby0+cXVldWVfeGZlcihoY2ksIHhmZXIs IDIpOworCQlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmZG9uZSwgSFopICYmCisJ CSAgICBoY2ktPmlvLT5kZXF1ZXVlX3hmZXIoaGNpLCB4ZmVyLCAyKSkgeworCQkJcmV0ID0gLUVU SU1FOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKFJFU1BfU1RBVFVTKHhmZXJbMF0ucmVzcG9uc2Up ICE9IFJFU1BfU1VDQ0VTUykgeworCQkJcmV0ID0gMDsgIC8qIG5vIG1vcmUgZGV2aWNlcyB0byBi ZSBhc3NpZ25lZCAqLworCQkJYnJlYWs7CisJCX0KKwkJaWYgKFJFU1BfU1RBVFVTKHhmZXJbMV0u cmVzcG9uc2UpICE9IFJFU1BfU1VDQ0VTUykgeworCQkJcmV0ID0gLUVJTzsKKwkJCWJyZWFrOwor CQl9CisJCURCRygiYXNzaWduZWQgYWRkcmVzcyAlI3ggdG8gZGV2aWNlICUwOHggJTA4eCIsCisJ CSAgICBuZXh0X2FkZHIsIGRldmljZV9pZFswXSwgZGV2aWNlX2lkWzFdKTsKKwkJLyoKKwkJICog VE9ETzogRXh0ZW5kIHRoZSBzdWJzeXN0ZW0gbGF5ZXIgdG8gYWxsb3cgZm9yIHJlZ2lzdGVyaW5n CisJCSAqIG5ldyBkZXZpY2UgYW5kIHByb3ZpZGUgQkNSL0RDUi9QSUQgYXQgdGhlIHNhbWUgdGlt ZS4KKwkJICovCisJCXJldCA9IGkzY19tYXN0ZXJfYWRkX2kzY19kZXZfbG9ja2VkKCZoY2ktPm1h c3RlciwgbmV4dF9hZGRyKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0KKworCWhjaV9mcmVl X3hmZXIoeGZlciwgMik7CisJcmV0dXJuIHJldDsKK30KKworY29uc3Qgc3RydWN0IGhjaV9jbWRf b3BzIGkzY19oY2lfY21kX3YyID0geworCS5wcmVwX2NjYwkJPSBoY2lfY21kX3YyX3ByZXBfY2Nj LAorCS5wcmVwX2kzY194ZmVyCQk9IGhjaV9jbWRfdjJfcHJlcF9pM2NfeGZlciwKKwkucHJlcF9p MmNfeGZlcgkJPSBoY2lfY21kX3YyX3ByZXBfaTJjX3hmZXIsCisJLnBlcmZvcm1fZGFhCQk9IGhj aV9jbWRfdjJfZGFhLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTNjL21hc3Rlci9taXBpLWkz Yy1oY2kvY29yZS5jIGIvZHJpdmVycy9pM2MvbWFzdGVyL21pcGktaTNjLWhjaS9jb3JlLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZDljN2VlMTYzYgotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvaTNjL21hc3Rlci9taXBpLWkzYy1oY2kvY29yZS5jCkBAIC0wLDAg KzEsODAxIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisvKgor ICogQ29weXJpZ2h0IChjKSAyMDIwLCBNSVBJIEFsbGlhbmNlLCBJbmMuCisgKgorICogQXV0aG9y OiBOaWNvbGFzIFBpdHJlIDxucGl0cmVAYmF5bGlicmUuY29tPgorICoKKyAqIENvcmUgZHJpdmVy IGNvZGUgd2l0aCBtYWluIGludGVyZmFjZSB0byB0aGUgSTNDIHN1YnN5c3RlbS4KKyAqLworCisj aW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNp bmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2kzYy9tYXN0ZXIuaD4KKyNp bmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1 ZGUgPGxpbnV4L2lvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUg PGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSAiaGNpLmgiCisjaW5jbHVkZSAi ZXh0X2NhcHMuaCIKKyNpbmNsdWRlICJjbWQuaCIKKyNpbmNsdWRlICJkYXQuaCIKKworCisvKgor ICogSG9zdCBDb250cm9sbGVyIENhcGFiaWxpdGllcyBhbmQgT3BlcmF0aW9uIFJlZ2lzdGVycwor ICovCisKKyNkZWZpbmUgcmVnX3JlYWQocikJCXJlYWRsKGhjaS0+YmFzZV9yZWdzICsgKHIpKQor I2RlZmluZSByZWdfd3JpdGUociwgdikJCXdyaXRlbCh2LCBoY2ktPmJhc2VfcmVncyArIChyKSkK KyNkZWZpbmUgcmVnX3NldChyLCB2KQkJcmVnX3dyaXRlKHIsIHJlZ19yZWFkKHIpIHwgKHYpKQor I2RlZmluZSByZWdfY2xlYXIociwgdikJCXJlZ193cml0ZShyLCByZWdfcmVhZChyKSAmIH4odikp CisKKyNkZWZpbmUgSENJX1ZFUlNJT04JCQkweDAwCS8qIEhDSSBWZXJzaW9uIChpbiBCQ0QpICov CisKKyNkZWZpbmUgSENfQ09OVFJPTAkJCTB4MDQKKyNkZWZpbmUgSENfQ09OVFJPTF9CVVNfRU5B QkxFCQlCSVQoMzEpCisjZGVmaW5lIEhDX0NPTlRST0xfUkVTVU1FCQlCSVQoMzApCisjZGVmaW5l IEhDX0NPTlRST0xfQUJPUlQJCUJJVCgyOSkKKyNkZWZpbmUgSENfQ09OVFJPTF9IQUxUX09OX0NN RF9USU1FT1VUCUJJVCgxMikKKyNkZWZpbmUgSENfQ09OVFJPTF9IT1RfSk9JTl9DVFJMCUJJVCg4 KQkvKiBIb3QtSm9pbiBBQ0svTkFDSyBDb250cm9sICovCisjZGVmaW5lIEhDX0NPTlRST0xfSTJD X1NMQVZFX1BSRVNFTlQJQklUKDcpCisjZGVmaW5lIEhDX0NPTlRST0xfUElPX01PREUJCUJJVCg2 KQkvKiBETUEvUElPIE1vZGUgU2VsZWN0b3IgKi8KKyNkZWZpbmUgSENfQ09OVFJPTF9EQVRBX0JJ R19FTkRJQU4JQklUKDQpCisjZGVmaW5lIEhDX0NPTlRST0xfSUJBX0lOQ0xVREUJCUJJVCgwKQkv KiBJbmNsdWRlIEkzQyBCcm9hZGNhc3QgQWRkcmVzcyAqLworCisjZGVmaW5lIE1BU1RFUl9ERVZJ Q0VfQUREUgkJMHgwOAkvKiBNYXN0ZXIgRGV2aWNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgTUFTVEVS X0RZTkFNSUNfQUREUl9WQUxJRAlCSVQoMzEpCS8qIER5bmFtaWMgQWRkcmVzcyBpcyBWYWxpZCAq LworI2RlZmluZSBNQVNURVJfRFlOQU1JQ19BRERSKHYpCQlGSUVMRF9QUkVQKEdFTk1BU0soMjIs IDE2KSwgdikKKworI2RlZmluZSBIQ19DQVBBQklMSVRJRVMJCQkweDBjCS8qIEhvc3QgQ29udHJv bGxlciBDYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgSENfQ0FQX1NHX0RDX0VOCQkJQklUKDMwKQor I2RlZmluZSBIQ19DQVBfU0dfSUJJX0VOCQlCSVQoMjkpCisjZGVmaW5lIEhDX0NBUF9TR19DUl9F TgkJCUJJVCgyOCkKKyNkZWZpbmUgSENfQ0FQX01BWF9EQVRBX0xFTkdUSAkJR0VOTUFTSygyNCwg MjIpCisjZGVmaW5lIEhDX0NBUF9DTURfU0laRQkJCUdFTk1BU0soMjEsIDIwKQorI2RlZmluZSBI Q19DQVBfRElSRUNUX0NPTU1BTkRTX0VOCUJJVCgxOCkKKyNkZWZpbmUgSENfQ0FQX01VTFRJX0xB TkVfRU4JCUJJVCgxNSkKKyNkZWZpbmUgSENfQ0FQX0NNRF9DQ0NfREVGQllURQkJQklUKDEwKQor I2RlZmluZSBIQ19DQVBfSERSX0JUX0VOCQlCSVQoOCkKKyNkZWZpbmUgSENfQ0FQX0hEUl9UU19F TgkJQklUKDcpCisjZGVmaW5lIEhDX0NBUF9IRFJfRERSX0VOCQlCSVQoNikKKyNkZWZpbmUgSENf Q0FQX05PTl9DVVJSRU5UX01BU1RFUl9DQVAJQklUKDUpCS8qIG1hc3RlciBoYW5kb2ZmIGNhcGFi bGUgKi8KKyNkZWZpbmUgSENfQ0FQX0RBVEFfQllURV9DRkdfRU4JCUJJVCg0KQkvKiBlbmRpYW4g c2VsZWN0aW9uIHBvc3NpYmxlICovCisjZGVmaW5lIEhDX0NBUF9BVVRPX0NPTU1BTkQJCUJJVCgz KQorI2RlZmluZSBIQ19DQVBfQ09NQk9fQ09NTUFORAkJQklUKDIpCisKKyNkZWZpbmUgUkVTRVRf Q09OVFJPTAkJCTB4MTAKKyNkZWZpbmUgQlVTX1JFU0VUCQkJQklUKDMxKQorI2RlZmluZSBCVVNf UkVTRVRfVFlQRQkJCUdFTk1BU0soMzAsIDI5KQorI2RlZmluZSBJQklfUVVFVUVfUlNUCQkJQklU KDUpCisjZGVmaW5lIFJYX0ZJRk9fUlNUCQkJQklUKDQpCisjZGVmaW5lIFRYX0ZJRk9fUlNUCQkJ QklUKDMpCisjZGVmaW5lIFJFU1BfUVVFVUVfUlNUCQkJQklUKDIpCisjZGVmaW5lIENNRF9RVUVV RV9SU1QJCQlCSVQoMSkKKyNkZWZpbmUgU09GVF9SU1QJCQlCSVQoMCkJLyogQ29yZSBSZXNldCAq LworCisjZGVmaW5lIFBSRVNFTlRfU1RBVEUJCQkweDE0CS8qIEhD4oCZcyBjdXJyZW50IHN0YXRl ICovCisjZGVmaW5lIFNUQVRFX0NVUlJFTlRfTUFTVEVSCQlCSVQoMikKKworI2RlZmluZSBJTlRS X1NUQVRVUwkJCTB4MjAKKyNkZWZpbmUgSU5UUl9TVEFUVVNfRU5BQkxFCQkweDI0CisjZGVmaW5l IElOVFJfU0lHTkFMX0VOQUJMRQkJMHgyOAorI2RlZmluZSBJTlRSX0ZPUkNFCQkJMHgyYworI2Rl ZmluZSBJTlRSX0hDX0NNRF9TRVFfVUZMT1dfU1RBVAlCSVQoMTIpCS8qIENtZCBTZXF1ZW5jZSBV bmRlcmZsb3cgKi8KKyNkZWZpbmUgSU5UUl9IQ19SRVNFVF9DQU5DRUwJCUJJVCgxMSkJLyogSEMg Q2FuY2VsbGVkIFJlc2V0ICovCisjZGVmaW5lIElOVFJfSENfSU5URVJOQUxfRVJSCQlCSVQoMTAp CS8qIEhDIEludGVybmFsIEVycm9yICovCisjZGVmaW5lIElOVFJfSENfUElPCQkJQklUKDgpCS8q IGNhc2NhZGVkIFBJTyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UUl9IQ19SSU5HUwkJCUdFTk1B U0soNywgMCkKKworI2RlZmluZSBEQVRfU0VDVElPTl9PRkZTRVQJCTB4MzAJLyogRGV2aWNlIEFk ZHJlc3MgVGFibGUgKi8KKyNkZWZpbmUgREFUX0VOVFJZX1NJWkUJCQlHRU5NQVNLKDMxLCAyOCkK KyNkZWZpbmUgREFUX1RBQkxFX1NJWkUJCQlHRU5NQVNLKDE4LCAxMikKKyNkZWZpbmUgREFUX1RB QkxFX09GRlNFVAkJR0VOTUFTSygxMSwgMCkKKworI2RlZmluZSBEQ1RfU0VDVElPTl9PRkZTRVQJ CTB4MzQJLyogRGV2aWNlIENoYXJhY3RlcmlzdGljcyBUYWJsZSAqLworI2RlZmluZSBEQ1RfRU5U UllfU0laRQkJCUdFTk1BU0soMzEsIDI4KQorI2RlZmluZSBEQ1RfVEFCTEVfSU5ERVgJCQlHRU5N QVNLKDIzLCAxOSkKKyNkZWZpbmUgRENUX1RBQkxFX1NJWkUJCQlHRU5NQVNLKDE4LCAxMikKKyNk ZWZpbmUgRENUX1RBQkxFX09GRlNFVAkJR0VOTUFTSygxMSwgMCkKKworI2RlZmluZSBSSU5HX0hF QURFUlNfU0VDVElPTl9PRkZTRVQJMHgzOAorI2RlZmluZSBSSU5HX0hFQURFUlNfT0ZGU0VUCQlH RU5NQVNLKDE1LCAwKQorCisjZGVmaW5lIFBJT19TRUNUSU9OX09GRlNFVAkJMHgzYworI2RlZmlu ZSBQSU9fT0ZGU0VUCQkJR0VOTUFTSygxNSwgMCkJLyogUElPIE9mZnNldCAqLworCisjZGVmaW5l IEVYVF9DQVBTX1NFQ1RJT05fT0ZGU0VUCQkweDQwCisjZGVmaW5lIEVYVF9DQVBTX09GRlNFVAkJ CUdFTk1BU0soMTUsIDApCisKKyNkZWZpbmUgSUJJX05PVElGWV9DVFJMCQkJMHg1OAkvKiBJQkkg Tm90aWZ5IENvbnRyb2wgKi8KKyNkZWZpbmUgSUJJX05PVElGWV9TSVJfUkVKRUNURUQJCUJJVCgz KQkvKiBSZWplY3RlZCBTbGF2ZSBJbnRlcnJ1cHQgUmVxdWVzdCAqLworI2RlZmluZSBJQklfTk9U SUZZX01SX1JFSkVDVEVECQlCSVQoMSkJLyogUmVqZWN0ZWQgTWFzdGVyIFJlcXVlc3QgQ29udHJv bCAqLworI2RlZmluZSBJQklfTk9USUZZX0hKX1JFSkVDVEVECQlCSVQoMCkJLyogUmVqZWN0ZWQg SG90LUpvaW4gQ29udHJvbCAqLworCisjZGVmaW5lIERFVl9DVFhfQkFTRV9MTwkJCTB4NjAKKyNk ZWZpbmUgREVWX0NUWF9CQVNFX0hJCQkJMHg2NAorCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGkz Y19oY2kgKnRvX2kzY19oY2koc3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAqbSkKK3sKKwly ZXR1cm4gY29udGFpbmVyX29mKG0sIHN0cnVjdCBpM2NfaGNpLCBtYXN0ZXIpOworfQorCitzdGF0 aWMgaW50IGkzY19oY2lfYnVzX2luaXQoc3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAqbSkK K3sKKwlzdHJ1Y3QgaTNjX2hjaSAqaGNpID0gdG9faTNjX2hjaShtKTsKKwlzdHJ1Y3QgaTNjX2Rl dmljZV9pbmZvIGluZm87CisJaW50IHJldDsKKworCURCRygiIik7CisKKwlpZiAoaGNpLT5jbWQg PT0gJmkzY19oY2lfY21kX3YxKSB7CisJCXJldCA9IGkzY19oY2lfZGF0X2luaXQoaGNpKTsKKwkJ aWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gaTNjX21hc3Rlcl9nZXRfZnJl ZV9hZGRyKG0sIDApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJlZ193cml0ZShN QVNURVJfREVWSUNFX0FERFIsCisJCSAgTUFTVEVSX0RZTkFNSUNfQUREUihyZXQpIHwgTUFTVEVS X0RZTkFNSUNfQUREUl9WQUxJRCk7CisJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOwor CWluZm8uZHluX2FkZHIgPSByZXQ7CisJcmV0ID0gaTNjX21hc3Rlcl9zZXRfaW5mbyhtLCAmaW5m byk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGhjaS0+aW8tPmluaXQoaGNp KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmVnX3NldChIQ19DT05UUk9MLCBIQ19D T05UUk9MX0JVU19FTkFCTEUpOworCURCRygiSENfQ09OVFJPTCA9ICUjeCIsIHJlZ19yZWFkKEhD X0NPTlRST0wpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpM2NfaGNpX2J1c19j bGVhbnVwKHN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0pCit7CisJc3RydWN0IGkzY19o Y2kgKmhjaSA9IHRvX2kzY19oY2kobSk7CisKKwlEQkcoIiIpOworCisJcmVnX2NsZWFyKEhDX0NP TlRST0wsIEhDX0NPTlRST0xfQlVTX0VOQUJMRSk7CisJaGNpLT5pby0+Y2xlYW51cChoY2kpOwor CWlmIChoY2ktPmNtZCA9PSAmaTNjX2hjaV9jbWRfdjEpCisJCWkzY19oY2lfZGF0X2NsZWFudXAo aGNpKTsKK30KKwordm9pZCBpM2NfaGNpX3Jlc3VtZShzdHJ1Y3QgaTNjX2hjaSAqaGNpKQorewor CS8qIHRoZSBIQ19DT05UUk9MX1JFU1VNRSBiaXQgaXMgUi9XMUMgc28ganVzdCByZWFkIGFuZCB3 cml0ZSBiYWNrICovCisJcmVnX3dyaXRlKEhDX0NPTlRST0wsIHJlZ19yZWFkKEhDX0NPTlRST0wp KTsKK30KKworLyogbG9jYXRlZCBoZXJlIHJhdGhlciB0aGFuIHBpby5jIGJlY2F1c2UgbmVlZGVk IGJpdHMgYXJlIGluIGNvcmUgcmVnIHNwYWNlICovCit2b2lkIGkzY19oY2lfcGlvX3Jlc2V0KHN0 cnVjdCBpM2NfaGNpICpoY2kpCit7CisJcmVnX3dyaXRlKFJFU0VUX0NPTlRST0wsIFJYX0ZJRk9f UlNUfFRYX0ZJRk9fUlNUfFJFU1BfUVVFVUVfUlNUKTsKK30KKworLyogbG9jYXRlZCBoZXJlIHJh dGhlciB0aGFuIGRjdC5jIGJlY2F1c2UgbmVlZGVkIGJpdHMgYXJlIGluIGNvcmUgcmVnIHNwYWNl ICovCit2b2lkIGkzY19oY2lfZGN0X2luZGV4X3Jlc2V0KHN0cnVjdCBpM2NfaGNpICpoY2kpCit7 CisJcmVnX3dyaXRlKERDVF9TRUNUSU9OX09GRlNFVCwgRklFTERfUFJFUChEQ1RfVEFCTEVfSU5E RVgsIDApKTsKK30KKworc3RhdGljIGludCBpM2NfaGNpX3NlbmRfY2NjX2NtZChzdHJ1Y3QgaTNj X21hc3Rlcl9jb250cm9sbGVyICptLAorCQkJCXN0cnVjdCBpM2NfY2NjX2NtZCAqY2NjKQorewor CXN0cnVjdCBpM2NfaGNpICpoY2kgPSB0b19pM2NfaGNpKG0pOworCXN0cnVjdCBoY2lfeGZlciAq eGZlcjsKKwlib29sIHJhdyA9ICEhKGhjaS0+cXVpcmtzICYgSENJX1FVSVJLX1JBV19DQ0MpOwor CWJvb2wgcHJlZml4ZWQgPSByYXcgJiYgISEoY2NjLT5pZCAmIEkzQ19DQ0NfRElSRUNUKTsKKwl1 X2ludCBueGZlcnMgPSBjY2MtPm5kZXN0cyArIHByZWZpeGVkOworCURFQ0xBUkVfQ09NUExFVElP Tl9PTlNUQUNLKGRvbmUpOworCWludCBpLCBsYXN0LCByZXQgPSAwOworCisJREJHKCJjbWQ9JSN4 IHJudz0lZCBuZGVzdHM9JWQgZGF0YVswXS5sZW49JWQiLAorCSAgICBjY2MtPmlkLCBjY2MtPnJu dywgY2NjLT5uZGVzdHMsIGNjYy0+ZGVzdHNbMF0ucGF5bG9hZC5sZW4pOworCisJeGZlciA9IGhj aV9hbGxvY194ZmVyKG54ZmVycyk7CisJaWYgKCF4ZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CWlmIChwcmVmaXhlZCkgeworCQl4ZmVyLT5kYXRhID0gTlVMTDsKKwkJeGZlci0+ZGF0YV9sZW4g PSAwOworCQl4ZmVyLT5ybncgPSBmYWxzZTsKKwkJaGNpLT5jbWQtPnByZXBfY2NjKGhjaSwgeGZl ciwgSTNDX0JST0FEQ0FTVF9BRERSLAorCQkJCSAgIGNjYy0+aWQsIHRydWUpOworCQl4ZmVyKys7 CisJfQorCisJZm9yIChpID0gMDsgaSA8IG54ZmVycyAtIHByZWZpeGVkOyBpKyspIHsKKwkJeGZl cltpXS5kYXRhID0gY2NjLT5kZXN0c1tpXS5wYXlsb2FkLmRhdGE7CisJCXhmZXJbaV0uZGF0YV9s ZW4gPSBjY2MtPmRlc3RzW2ldLnBheWxvYWQubGVuOworCQl4ZmVyW2ldLnJudyA9IGNjYy0+cm53 OworCQlyZXQgPSBoY2ktPmNtZC0+cHJlcF9jY2MoaGNpLCAmeGZlcltpXSwgY2NjLT5kZXN0c1tp XS5hZGRyLAorCQkJCQkgY2NjLT5pZCwgcmF3KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0Owor CQl4ZmVyW2ldLmNtZF9kZXNjWzBdIHw9IENNRF8wX1JPQzsKKwl9CisJbGFzdCA9IGkgLSAxOwor CXhmZXJbbGFzdF0uY21kX2Rlc2NbMF0gfD0gQ01EXzBfVE9DOworCXhmZXJbbGFzdF0uY29tcGxl dGlvbiA9ICZkb25lOworCisJaWYgKHByZWZpeGVkKQorCQl4ZmVyLS07CisKKwlyZXQgPSBoY2kt PmlvLT5xdWV1ZV94ZmVyKGhjaSwgeGZlciwgbnhmZXJzKTsKKwlpZiAocmV0KQorCQlnb3RvIG91 dDsKKwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmZG9uZSwgSFopICYmCisJICAg IGhjaS0+aW8tPmRlcXVldWVfeGZlcihoY2ksIHhmZXIsIG54ZmVycykpIHsKKwkJcmV0ID0gLUVU SU1FOworCQlnb3RvIG91dDsKKwl9CisJZm9yIChpID0gcHJlZml4ZWQ7IGkgPCBueGZlcnM7IGkr KykgeworCQlpZiAoY2NjLT5ybncpCisJCQljY2MtPmRlc3RzW2kgLSBwcmVmaXhlZF0ucGF5bG9h ZC5sZW4gPQorCQkJCVJFU1BfREFUQV9MRU5HVEgoeGZlcltpXS5yZXNwb25zZSk7CisJCWlmIChS RVNQX1NUQVRVUyh4ZmVyW2ldLnJlc3BvbnNlKSAhPSBSRVNQX1NVQ0NFU1MpIHsKKwkJCXJldCA9 IC1FSU87CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworI2lmIDAKKwlpZiAoY2NjLT5ybncpIHsK KwkJSEVYRFVNUCgiZ290OiAiLCBjY2MtPmRlc3RzWzBdLnBheWxvYWQuZGF0YSwKKwkJCQkgY2Nj LT5kZXN0c1swXS5wYXlsb2FkLmxlbik7CisJfQorI2VuZGlmCisKK291dDoKKwloY2lfZnJlZV94 ZmVyKHhmZXIsIG54ZmVycyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpM2NfaGNp X2RhYShzdHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyICptKQoreworCXN0cnVjdCBpM2NfaGNp ICpoY2kgPSB0b19pM2NfaGNpKG0pOworCisJREJHKCIiKTsKKworCXJldHVybiBoY2ktPmNtZC0+ cGVyZm9ybV9kYWEoaGNpKTsKK30KKworc3RhdGljIGludCBpM2NfaGNpX3ByaXZfeGZlcnMoc3Ry dWN0IGkzY19kZXZfZGVzYyAqZGV2LAorCQkJICAgICAgc3RydWN0IGkzY19wcml2X3hmZXIgKmkz Y194ZmVycywKKwkJCSAgICAgIGludCBueGZlcnMpCit7CisJc3RydWN0IGkzY19tYXN0ZXJfY29u dHJvbGxlciAqbSA9IGkzY19kZXZfZ2V0X21hc3RlcihkZXYpOworCXN0cnVjdCBpM2NfaGNpICpo Y2kgPSB0b19pM2NfaGNpKG0pOworCXN0cnVjdCBoY2lfeGZlciAqeGZlcjsKKwlERUNMQVJFX0NP TVBMRVRJT05fT05TVEFDSyhkb25lKTsKKwl1X2ludCBzaXplX2xpbWl0OworCWludCBpLCBsYXN0 LCByZXQgPSAwOworCisJREJHKCJueGZlcnMgPSAlZCIsIG54ZmVycyk7CisKKwl4ZmVyID0gaGNp X2FsbG9jX3hmZXIobnhmZXJzKTsKKwlpZiAoIXhmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJ c2l6ZV9saW1pdCA9IDEgPDwgKDE2ICsgRklFTERfR0VUKEhDX0NBUF9NQVhfREFUQV9MRU5HVEgs IGhjaS0+Y2FwcykpOworCisJZm9yIChpID0gMDsgaSA8IG54ZmVyczsgaSsrKSB7CisJCXhmZXJb aV0uZGF0YV9sZW4gPSBpM2NfeGZlcnNbaV0ubGVuOworCQlyZXQgPSAtRUZCSUc7CisJCWlmICh4 ZmVyW2ldLmRhdGFfbGVuID49IHNpemVfbGltaXQpCisJCQlnb3RvIG91dDsKKwkJeGZlcltpXS5y bncgPSBpM2NfeGZlcnNbaV0ucm53OworCQlpZiAoaTNjX3hmZXJzW2ldLnJudykgeworCQkJeGZl cltpXS5kYXRhID0gaTNjX3hmZXJzW2ldLmRhdGEuaW47CisJCX0gZWxzZSB7CisJCQkvKiBzaWxl bmNlIHRoZSBjb25zdCBxdWFsaWZpZXIgd2FybmluZyB3aXRoIGEgY2FzdCAqLworCQkJeGZlcltp XS5kYXRhID0gKHZvaWQgKikgaTNjX3hmZXJzW2ldLmRhdGEub3V0OworCQl9CisJCWhjaS0+Y21k LT5wcmVwX2kzY194ZmVyKGhjaSwgZGV2LCAmeGZlcltpXSk7CisJCXhmZXJbaV0uY21kX2Rlc2Nb MF0gfD0gQ01EXzBfUk9DOworCX0KKwlsYXN0ID0gaSAtIDE7CisJeGZlcltsYXN0XS5jbWRfZGVz Y1swXSB8PSBDTURfMF9UT0M7CisJeGZlcltsYXN0XS5jb21wbGV0aW9uID0gJmRvbmU7CisKKwly ZXQgPSBoY2ktPmlvLT5xdWV1ZV94ZmVyKGhjaSwgeGZlciwgbnhmZXJzKTsKKwlpZiAocmV0KQor CQlnb3RvIG91dDsKKwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmZG9uZSwgSFop ICYmCisJICAgIGhjaS0+aW8tPmRlcXVldWVfeGZlcihoY2ksIHhmZXIsIG54ZmVycykpIHsKKwkJ cmV0ID0gLUVUSU1FOworCQlnb3RvIG91dDsKKwl9CisJZm9yIChpID0gMDsgaSA8IG54ZmVyczsg aSsrKSB7CisJCWlmIChpM2NfeGZlcnNbaV0ucm53KQorCQkJaTNjX3hmZXJzW2ldLmxlbiA9IFJF U1BfREFUQV9MRU5HVEgoeGZlcltpXS5yZXNwb25zZSk7CisJCWlmIChSRVNQX1NUQVRVUyh4ZmVy W2ldLnJlc3BvbnNlKSAhPSBSRVNQX1NVQ0NFU1MpIHsKKwkJCXJldCA9IC1FSU87CisJCQlnb3Rv IG91dDsKKwkJfQorCX0KKworb3V0OgorCWhjaV9mcmVlX3hmZXIoeGZlciwgbnhmZXJzKTsKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGkzY19oY2lfaTJjX3hmZXJzKHN0cnVjdCBpMmNf ZGV2X2Rlc2MgKmRldiwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGkyY19tc2cgKmkyY194ZmVycywg aW50IG54ZmVycykKK3sKKwlzdHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyICptID0gaTJjX2Rl dl9nZXRfbWFzdGVyKGRldik7CisJc3RydWN0IGkzY19oY2kgKmhjaSA9IHRvX2kzY19oY2kobSk7 CisJc3RydWN0IGhjaV94ZmVyICp4ZmVyOworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGRv bmUpOworCWludCBpLCBsYXN0LCByZXQgPSAwOworCisJREJHKCJueGZlcnMgPSAlZCIsIG54ZmVy cyk7CisKKwl4ZmVyID0gaGNpX2FsbG9jX3hmZXIobnhmZXJzKTsKKwlpZiAoIXhmZXIpCisJCXJl dHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IG54ZmVyczsgaSsrKSB7CisJCXhmZXJb aV0uZGF0YSA9IGkyY194ZmVyc1tpXS5idWY7CisJCXhmZXJbaV0uZGF0YV9sZW4gPSBpMmNfeGZl cnNbaV0ubGVuOworCQl4ZmVyW2ldLnJudyA9IChpMmNfeGZlcnNbaV0uZmxhZ3MgJiBJMkNfTV9S RCk7CisJCWhjaS0+Y21kLT5wcmVwX2kyY194ZmVyKGhjaSwgZGV2LCAmeGZlcltpXSk7CisJCXhm ZXJbaV0uY21kX2Rlc2NbMF0gfD0gQ01EXzBfUk9DOworCX0KKwlsYXN0ID0gaSAtIDE7CisJeGZl cltsYXN0XS5jbWRfZGVzY1swXSB8PSBDTURfMF9UT0M7CisJeGZlcltsYXN0XS5jb21wbGV0aW9u ID0gJmRvbmU7CisKKwlyZXQgPSBoY2ktPmlvLT5xdWV1ZV94ZmVyKGhjaSwgeGZlciwgbnhmZXJz KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGlt ZW91dCgmZG9uZSwgSFopICYmCisJICAgIGhjaS0+aW8tPmRlcXVldWVfeGZlcihoY2ksIHhmZXIs IG54ZmVycykpIHsKKwkJcmV0ID0gLUVUSU1FOworCQlnb3RvIG91dDsKKwl9CisJZm9yIChpID0g MDsgaSA8IG54ZmVyczsgaSsrKSB7CisJCWlmIChSRVNQX1NUQVRVUyh4ZmVyW2ldLnJlc3BvbnNl KSAhPSBSRVNQX1NVQ0NFU1MpIHsKKwkJCXJldCA9IC1FSU87CisJCQlnb3RvIG91dDsKKwkJfQor CX0KKworb3V0OgorCWhjaV9mcmVlX3hmZXIoeGZlciwgbnhmZXJzKTsKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgaW50IGkzY19oY2lfYXR0YWNoX2kzY19kZXYoc3RydWN0IGkzY19kZXZfZGVz YyAqZGV2KQoreworCXN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0gPSBpM2NfZGV2X2dl dF9tYXN0ZXIoZGV2KTsKKwlzdHJ1Y3QgaTNjX2hjaSAqaGNpID0gdG9faTNjX2hjaShtKTsKKwlz dHJ1Y3QgaTNjX2hjaV9kZXZfZGF0YSAqZGV2X2RhdGE7CisJaW50IHJldDsKKworCURCRygiIik7 CisKKwlkZXZfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkZXZfZGF0YSksIEdGUF9LRVJORUwpOwor CWlmICghZGV2X2RhdGEpCisJCXJldHVybiAtRU5PTUVNOworCWlmIChoY2ktPmNtZCA9PSAmaTNj X2hjaV9jbWRfdjEpIHsKKwkJcmV0ID0gaTNjX2hjaV9kYXRfYWxsb2NfZW50cnkoaGNpKTsKKwkJ aWYgKHJldCA8IDApIHsKKwkJCWtmcmVlKGRldl9kYXRhKTsKKwkJCXJldHVybiByZXQ7CisJCX0K KwkJaTNjX2hjaV9kYXRfc2V0X2R5bmFtaWNfYWRkcihoY2ksIHJldCwgZGV2LT5pbmZvLmR5bl9h ZGRyKTsKKwkJZGV2X2RhdGEtPmRhdF9pZHggPSByZXQ7CisJfQorCWkzY19kZXZfc2V0X21hc3Rl cl9kYXRhKGRldiwgZGV2X2RhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGkzY19o Y2lfcmVhdHRhY2hfaTNjX2RldihzdHJ1Y3QgaTNjX2Rldl9kZXNjICpkZXYsIHU4IG9sZF9keW5f YWRkcikKK3sKKwlzdHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyICptID0gaTNjX2Rldl9nZXRf bWFzdGVyKGRldik7CisJc3RydWN0IGkzY19oY2kgKmhjaSA9IHRvX2kzY19oY2kobSk7CisJc3Ry dWN0IGkzY19oY2lfZGV2X2RhdGEgKmRldl9kYXRhID0gaTNjX2Rldl9nZXRfbWFzdGVyX2RhdGEo ZGV2KTsKKworCURCRygiIik7CisKKwlpZiAoaGNpLT5jbWQgPT0gJmkzY19oY2lfY21kX3YxKQor CQlpM2NfaGNpX2RhdF9zZXRfZHluYW1pY19hZGRyKGhjaSwgZGV2X2RhdGEtPmRhdF9pZHgsCisJ CQkJCSAgICAgZGV2LT5pbmZvLmR5bl9hZGRyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZv aWQgaTNjX2hjaV9kZXRhY2hfaTNjX2RldihzdHJ1Y3QgaTNjX2Rldl9kZXNjICpkZXYpCit7CisJ c3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAqbSA9IGkzY19kZXZfZ2V0X21hc3RlcihkZXYp OworCXN0cnVjdCBpM2NfaGNpICpoY2kgPSB0b19pM2NfaGNpKG0pOworCXN0cnVjdCBpM2NfaGNp X2Rldl9kYXRhICpkZXZfZGF0YSA9IGkzY19kZXZfZ2V0X21hc3Rlcl9kYXRhKGRldik7CisKKwlE QkcoIiIpOworCisJaTNjX2Rldl9zZXRfbWFzdGVyX2RhdGEoZGV2LCBOVUxMKTsKKwlpZiAoaGNp LT5jbWQgPT0gJmkzY19oY2lfY21kX3YxKQorCQlpM2NfaGNpX2RhdF9mcmVlX2VudHJ5KGhjaSwg ZGV2X2RhdGEtPmRhdF9pZHgpOworCWtmcmVlKGRldl9kYXRhKTsKK30KKworc3RhdGljIGludCBp M2NfaGNpX2F0dGFjaF9pMmNfZGV2KHN0cnVjdCBpMmNfZGV2X2Rlc2MgKmRldikKK3sKKwlzdHJ1 Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyICptID0gaTJjX2Rldl9nZXRfbWFzdGVyKGRldik7CisJ c3RydWN0IGkzY19oY2kgKmhjaSA9IHRvX2kzY19oY2kobSk7CisJc3RydWN0IGkzY19oY2lfZGV2 X2RhdGEgKmRldl9kYXRhOworCWludCByZXQ7CisKKwlEQkcoIiIpOworCisJaWYgKGhjaS0+Y21k ICE9ICZpM2NfaGNpX2NtZF92MSkKKwkJcmV0dXJuIDA7CisJZGV2X2RhdGEgPSBremFsbG9jKHNp emVvZigqZGV2X2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldl9kYXRhKQorCQlyZXR1cm4g LUVOT01FTTsKKwlyZXQgPSBpM2NfaGNpX2RhdF9hbGxvY19lbnRyeShoY2kpOworCWlmIChyZXQg PCAwKSB7CisJCWtmcmVlKGRldl9kYXRhKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaTNjX2hjaV9k YXRfc2V0X3N0YXRpY19hZGRyKGhjaSwgcmV0LCBkZXYtPmFkZHIpOworCWkzY19oY2lfZGF0X3Nl dF9mbGFncyhoY2ksIHJldCwgREFUXzBfSTJDX0RFVklDRSwgMCk7CisJZGV2X2RhdGEtPmRhdF9p ZHggPSByZXQ7CisJaTJjX2Rldl9zZXRfbWFzdGVyX2RhdGEoZGV2LCBkZXZfZGF0YSk7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGkzY19oY2lfZGV0YWNoX2kyY19kZXYoc3RydWN0IGky Y19kZXZfZGVzYyAqZGV2KQoreworCXN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0gPSBp MmNfZGV2X2dldF9tYXN0ZXIoZGV2KTsKKwlzdHJ1Y3QgaTNjX2hjaSAqaGNpID0gdG9faTNjX2hj aShtKTsKKwlzdHJ1Y3QgaTNjX2hjaV9kZXZfZGF0YSAqZGV2X2RhdGEgPSBpMmNfZGV2X2dldF9t YXN0ZXJfZGF0YShkZXYpOworCisJREJHKCIiKTsKKworCWlmIChkZXZfZGF0YSkgeworCQlpMmNf ZGV2X3NldF9tYXN0ZXJfZGF0YShkZXYsIE5VTEwpOworCQlpZiAoaGNpLT5jbWQgPT0gJmkzY19o Y2lfY21kX3YxKQorCQkJaTNjX2hjaV9kYXRfZnJlZV9lbnRyeShoY2ksIGRldl9kYXRhLT5kYXRf aWR4KTsKKwkJa2ZyZWUoZGV2X2RhdGEpOworCX0KK30KKworc3RhdGljIGludCBpM2NfaGNpX3Jl cXVlc3RfaWJpKHN0cnVjdCBpM2NfZGV2X2Rlc2MgKmRldiwKKwkJCSAgICAgICBjb25zdCBzdHJ1 Y3QgaTNjX2liaV9zZXR1cCAqcmVxKQoreworCXN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIg Km0gPSBpM2NfZGV2X2dldF9tYXN0ZXIoZGV2KTsKKwlzdHJ1Y3QgaTNjX2hjaSAqaGNpID0gdG9f aTNjX2hjaShtKTsKKwlzdHJ1Y3QgaTNjX2hjaV9kZXZfZGF0YSAqZGV2X2RhdGEgPSBpM2NfZGV2 X2dldF9tYXN0ZXJfZGF0YShkZXYpOworCXVfaW50IGRhdF9pZHggPSBkZXZfZGF0YS0+ZGF0X2lk eDsKKworCWlmIChyZXEtPm1heF9wYXlsb2FkX2xlbiAhPSAwKQorCQlpM2NfaGNpX2RhdF9zZXRf ZmxhZ3MoaGNpLCBkYXRfaWR4LCBEQVRfMF9JQklfUEFZTE9BRCwgMCk7CisJZWxzZQorCQlpM2Nf aGNpX2RhdF9jbGVhcl9mbGFncyhoY2ksIGRhdF9pZHgsIERBVF8wX0lCSV9QQVlMT0FELCAwKTsK KwlyZXR1cm4gaGNpLT5pby0+cmVxdWVzdF9pYmkoaGNpLCBkZXYsIHJlcSk7Cit9CisKK3N0YXRp YyB2b2lkIGkzY19oY2lfZnJlZV9pYmkoc3RydWN0IGkzY19kZXZfZGVzYyAqZGV2KQoreworCXN0 cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0gPSBpM2NfZGV2X2dldF9tYXN0ZXIoZGV2KTsK KwlzdHJ1Y3QgaTNjX2hjaSAqaGNpID0gdG9faTNjX2hjaShtKTsKKworCWhjaS0+aW8tPmZyZWVf aWJpKGhjaSwgZGV2KTsKK30KKworc3RhdGljIGludCBpM2NfaGNpX2VuYWJsZV9pYmkoc3RydWN0 IGkzY19kZXZfZGVzYyAqZGV2KQoreworCXN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0g PSBpM2NfZGV2X2dldF9tYXN0ZXIoZGV2KTsKKwlzdHJ1Y3QgaTNjX2hjaSAqaGNpID0gdG9faTNj X2hjaShtKTsKKwlzdHJ1Y3QgaTNjX2hjaV9kZXZfZGF0YSAqZGV2X2RhdGEgPSBpM2NfZGV2X2dl dF9tYXN0ZXJfZGF0YShkZXYpOworCisJaTNjX2hjaV9kYXRfY2xlYXJfZmxhZ3MoaGNpLCBkZXZf ZGF0YS0+ZGF0X2lkeCwgREFUXzBfU0lSX1JFSkVDVCwgMCk7CisJcmV0dXJuIGkzY19tYXN0ZXJf ZW5lY19sb2NrZWQobSwgZGV2LT5pbmZvLmR5bl9hZGRyLCBJM0NfQ0NDX0VWRU5UX1NJUik7Cit9 CisKK3N0YXRpYyBpbnQgaTNjX2hjaV9kaXNhYmxlX2liaShzdHJ1Y3QgaTNjX2Rldl9kZXNjICpk ZXYpCit7CisJc3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAqbSA9IGkzY19kZXZfZ2V0X21h c3RlcihkZXYpOworCXN0cnVjdCBpM2NfaGNpICpoY2kgPSB0b19pM2NfaGNpKG0pOworCXN0cnVj dCBpM2NfaGNpX2Rldl9kYXRhICpkZXZfZGF0YSA9IGkzY19kZXZfZ2V0X21hc3Rlcl9kYXRhKGRl dik7CisKKwlpM2NfaGNpX2RhdF9zZXRfZmxhZ3MoaGNpLCBkZXZfZGF0YS0+ZGF0X2lkeCwgREFU XzBfU0lSX1JFSkVDVCwgMCk7CisJcmV0dXJuIGkzY19tYXN0ZXJfZGlzZWNfbG9ja2VkKG0sIGRl di0+aW5mby5keW5fYWRkciwgSTNDX0NDQ19FVkVOVF9TSVIpOworfQorCitzdGF0aWMgdm9pZCBp M2NfaGNpX3JlY3ljbGVfaWJpX3Nsb3Qoc3RydWN0IGkzY19kZXZfZGVzYyAqZGV2LAorCQkJCSAg ICAgc3RydWN0IGkzY19pYmlfc2xvdCAqc2xvdCkKK3sKKwlzdHJ1Y3QgaTNjX21hc3Rlcl9jb250 cm9sbGVyICptID0gaTNjX2Rldl9nZXRfbWFzdGVyKGRldik7CisJc3RydWN0IGkzY19oY2kgKmhj aSA9IHRvX2kzY19oY2kobSk7CisKKwloY2ktPmlvLT5yZWN5Y2xlX2liaV9zbG90KGhjaSwgZGV2 LCBzbG90KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXJf b3BzIGkzY19oY2lfb3BzID0geworCS5idXNfaW5pdAkJPSBpM2NfaGNpX2J1c19pbml0LAorCS5i dXNfY2xlYW51cAkJPSBpM2NfaGNpX2J1c19jbGVhbnVwLAorCS5kb19kYWEJCQk9IGkzY19oY2lf ZGFhLAorCS5zZW5kX2NjY19jbWQJCT0gaTNjX2hjaV9zZW5kX2NjY19jbWQsCisJLnByaXZfeGZl cnMJCT0gaTNjX2hjaV9wcml2X3hmZXJzLAorCS5pMmNfeGZlcnMJCT0gaTNjX2hjaV9pMmNfeGZl cnMsCisJLmF0dGFjaF9pM2NfZGV2CQk9IGkzY19oY2lfYXR0YWNoX2kzY19kZXYsCisJLnJlYXR0 YWNoX2kzY19kZXYJPSBpM2NfaGNpX3JlYXR0YWNoX2kzY19kZXYsCisJLmRldGFjaF9pM2NfZGV2 CQk9IGkzY19oY2lfZGV0YWNoX2kzY19kZXYsCisJLmF0dGFjaF9pMmNfZGV2CQk9IGkzY19oY2lf YXR0YWNoX2kyY19kZXYsCisJLmRldGFjaF9pMmNfZGV2CQk9IGkzY19oY2lfZGV0YWNoX2kyY19k ZXYsCisJLnJlcXVlc3RfaWJpCQk9IGkzY19oY2lfcmVxdWVzdF9pYmksCisJLmZyZWVfaWJpCQk9 IGkzY19oY2lfZnJlZV9pYmksCisJLmVuYWJsZV9pYmkJCT0gaTNjX2hjaV9lbmFibGVfaWJpLAor CS5kaXNhYmxlX2liaQkJPSBpM2NfaGNpX2Rpc2FibGVfaWJpLAorCS5yZWN5Y2xlX2liaV9zbG90 CT0gaTNjX2hjaV9yZWN5Y2xlX2liaV9zbG90LAorfTsKKworc3RhdGljIGlycXJldHVybl90IGkz Y19oY2lfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBpM2Nf aGNpICpoY2kgPSBkZXZfaWQ7CisJaXJxcmV0dXJuX3QgcmVzdWx0ID0gSVJRX05PTkU7CisJdTMy IHZhbDsKKworCXZhbCA9IHJlZ19yZWFkKElOVFJfU1RBVFVTKTsKKwlEQkcoIklOVFJfU1RBVFVT ID0gJSN4IiwgdmFsKTsKKworCWlmICh2YWwpIHsKKwkJcmVnX3dyaXRlKElOVFJfU1RBVFVTLCB2 YWwpOworCX0gZWxzZSB7CisJCS8qIHYxLjAgZG9lcyBub3QgaGF2ZSBQSU8gY2FzY2FkZWQgbm90 aWZpY2F0aW9uIGJpdHMgKi8KKwkJdmFsIHw9IElOVFJfSENfUElPOworCX0KKworCWlmICh2YWwg JiBJTlRSX0hDX1JFU0VUX0NBTkNFTCkgeworCQlEQkcoImNhbmNlbGxlZCByZXNldCIpOworCQl2 YWwgJj0gfklOVFJfSENfUkVTRVRfQ0FOQ0VMOworCX0KKwlpZiAodmFsICYgSU5UUl9IQ19JTlRF Uk5BTF9FUlIpIHsKKwkJRVJSKCJIb3N0IENvbnRyb2xsZXIgSW50ZXJuYWwgRXJyb3IiKTsKKwkJ dmFsICY9IH5JTlRSX0hDX0lOVEVSTkFMX0VSUjsKKwl9CisJaWYgKHZhbCAmIElOVFJfSENfUElP KSB7CisJCWhjaS0+aW8tPmlycV9oYW5kbGVyKGhjaSwgMCk7CisJCXZhbCAmPSB+SU5UUl9IQ19Q SU87CisJfQorCWlmICh2YWwgJiBJTlRSX0hDX1JJTkdTKSB7CisJCWhjaS0+aW8tPmlycV9oYW5k bGVyKGhjaSwgdmFsICYgSU5UUl9IQ19SSU5HUyk7CisJCXZhbCAmPSB+SU5UUl9IQ19SSU5HUzsK Kwl9CisJaWYgKHZhbCkKKwkJRVJSKCJ1bmV4cGVjdGVkIElOVFJfU1RBVFVTICUjeCIsIHZhbCk7 CisJZWxzZQorCQlyZXN1bHQgPSBJUlFfSEFORExFRDsKKworCXJldHVybiByZXN1bHQ7Cit9CisK K3N0YXRpYyBpbnQgaTNjX2hjaV9pbml0KHN0cnVjdCBpM2NfaGNpICpoY2kpCit7CisJdTMyIHJl Z3ZhbCwgb2Zmc2V0OworCWludCByZXQ7CisKKwkvKiBWYWxpZGF0ZSBIQ0kgaGFyZHdhcmUgdmVy c2lvbiAqLworCXJlZ3ZhbCA9IHJlZ19yZWFkKEhDSV9WRVJTSU9OKTsKKwloY2ktPnZlcnNpb25f bWFqb3IgPSAocmVndmFsID4+IDgpICYgMHhmOworCWhjaS0+dmVyc2lvbl9taW5vciA9IChyZWd2 YWwgPj4gNCkgJiAweGY7CisJaGNpLT5yZXZpc2lvbiA9IHJlZ3ZhbCAmIDB4ZjsKKwlOT1RFKCJI Q0kgdiV1LiV1IHIlMDJ1IiwKKwkgICAgIGhjaS0+dmVyc2lvbl9tYWpvciwgaGNpLT52ZXJzaW9u X21pbm9yLCBoY2ktPnJldmlzaW9uKTsKKwkvKiBrbm93biB2ZXJzaW9ucyAqLworCXN3aXRjaCAo cmVndmFsICYgfjB4ZikgeworCWNhc2UgMHgxMDA6CS8qIHZlcnNpb24gMS4wICovCisJY2FzZSAw eDExMDoJLyogdmVyc2lvbiAxLjEgKi8KKwljYXNlIDB4MjAwOgkvKiB2ZXJzaW9uIDIuMCAqLwor CQlicmVhazsKKwlkZWZhdWx0OgorCQlFUlIoInVuc3VwcG9ydGVkIEhDSSB2ZXJzaW9uIik7CisJ CXJldHVybiAtRVBST1RPTk9TVVBQT1JUOworCX0KKworCWhjaS0+Y2FwcyA9IHJlZ19yZWFkKEhD X0NBUEFCSUxJVElFUyk7CisJREJHKCJjYXBzID0gJSN4IiwgaGNpLT5jYXBzKTsKKworCXJlZ3Zh bCA9IHJlZ19yZWFkKERBVF9TRUNUSU9OX09GRlNFVCk7CisJb2Zmc2V0ID0gRklFTERfR0VUKERB VF9UQUJMRV9PRkZTRVQsIHJlZ3ZhbCk7CisJaGNpLT5EQVRfcmVncyA9IG9mZnNldCA/IGhjaS0+ YmFzZV9yZWdzICsgb2Zmc2V0IDogMDsKKwloY2ktPkRBVF9lbnRyaWVzID0gRklFTERfR0VUKERB VF9UQUJMRV9TSVpFLCByZWd2YWwpOworCWhjaS0+REFUX2VudHJ5X3NpemUgPSBGSUVMRF9HRVQo REFUX0VOVFJZX1NJWkUsIHJlZ3ZhbCk7CisJSU5GTygiREFUOiAldSAldS1ieXRlcyBlbnRyaWVz IGF0IG9mZnNldCAlI3giLAorCSAgICAgaGNpLT5EQVRfZW50cmllcywgaGNpLT5EQVRfZW50cnlf c2l6ZSAqIDQsIG9mZnNldCk7CisKKwlyZWd2YWwgPSByZWdfcmVhZChEQ1RfU0VDVElPTl9PRkZT RVQpOworCW9mZnNldCA9IEZJRUxEX0dFVChEQ1RfVEFCTEVfT0ZGU0VULCByZWd2YWwpOworCWhj aS0+RENUX3JlZ3MgPSBvZmZzZXQgPyBoY2ktPmJhc2VfcmVncyArIG9mZnNldCA6IDA7CisJaGNp LT5EQ1RfZW50cmllcyA9IEZJRUxEX0dFVChEQ1RfVEFCTEVfU0laRSwgcmVndmFsKTsKKwloY2kt PkRDVF9lbnRyeV9zaXplID0gRklFTERfR0VUKERDVF9FTlRSWV9TSVpFLCByZWd2YWwpOworCUlO Rk8oIkRDVDogJXUgJXUtYnl0ZXMgZW50cmllcyBhdCBvZmZzZXQgJSN4IiwKKwkgICAgIGhjaS0+ RENUX2VudHJpZXMsIGhjaS0+RENUX2VudHJ5X3NpemUgKiA0LCBvZmZzZXQpOworCisJcmVndmFs ID0gcmVnX3JlYWQoUklOR19IRUFERVJTX1NFQ1RJT05fT0ZGU0VUKTsKKwlvZmZzZXQgPSBGSUVM RF9HRVQoUklOR19IRUFERVJTX09GRlNFVCwgcmVndmFsKTsKKwloY2ktPlJIU19yZWdzID0gb2Zm c2V0ID8gaGNpLT5iYXNlX3JlZ3MgKyBvZmZzZXQgOiAwOworCUlORk8oIlJpbmcgSGVhZGVycyBh dCBvZmZzZXQgJSN4Iiwgb2Zmc2V0KTsKKworCXJlZ3ZhbCA9IHJlZ19yZWFkKFBJT19TRUNUSU9O X09GRlNFVCk7CisJb2Zmc2V0ID0gRklFTERfR0VUKFBJT19PRkZTRVQsIHJlZ3ZhbCk7CisJaGNp LT5QSU9fcmVncyA9IG9mZnNldCA/IGhjaS0+YmFzZV9yZWdzICsgb2Zmc2V0IDogMDsKKwlJTkZP KCJQSU8gc2VjdGlvbiBhdCBvZmZzZXQgJSN4Iiwgb2Zmc2V0KTsKKworCXJlZ3ZhbCA9IHJlZ19y ZWFkKEVYVF9DQVBTX1NFQ1RJT05fT0ZGU0VUKTsKKwlvZmZzZXQgPSBGSUVMRF9HRVQoRVhUX0NB UFNfT0ZGU0VULCByZWd2YWwpOworCWhjaS0+RVhUQ0FQU19yZWdzID0gb2Zmc2V0ID8gaGNpLT5i YXNlX3JlZ3MgKyBvZmZzZXQgOiAwOworCUlORk8oIkV4dGVuZGVkIENhcHMgYXQgb2Zmc2V0ICUj eCIsIG9mZnNldCk7CisKKwlyZXQgPSBpM2NfaGNpX3BhcnNlX2V4dF9jYXBzKGhjaSk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogTm93IGxldCdzIHJlc2V0IHRoZSBoYXJk d2FyZS4KKwkgKiBTT0ZUX1JTVCBtdXN0IGJlIGNsZWFyIGJlZm9yZSB3ZSB3cml0ZSB0byBpdC4K KwkgKiBUaGVuIHdlIG11c3Qgd2FpdCB1bnRpbCBpdCBjbGVhcnMgYWdhaW4uCisJICovCisJcmV0 ID0gcmVhZHhfcG9sbF90aW1lb3V0KHJlZ19yZWFkLCBSRVNFVF9DT05UUk9MLCByZWd2YWwsCisJ CQkJICEocmVndmFsICYgU09GVF9SU1QpLCAxLCAxMDAwMCk7CisJaWYgKHJldCkKKwkJcmV0dXJu IC1FTlhJTzsKKwlyZWdfd3JpdGUoUkVTRVRfQ09OVFJPTCwgU09GVF9SU1QpOworCXJldCA9IHJl YWR4X3BvbGxfdGltZW91dChyZWdfcmVhZCwgUkVTRVRfQ09OVFJPTCwgcmVndmFsLAorCQkJCSAh KHJlZ3ZhbCAmIFNPRlRfUlNUKSwgMSwgMTAwMDApOworCWlmIChyZXQpCisJCXJldHVybiAtRU5Y SU87CisKKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGFuZCBhbGxvdyBhbGwgc2lnbmFsIHVw ZGF0ZXMgKi8KKwlyZWdfd3JpdGUoSU5UUl9TSUdOQUxfRU5BQkxFLCAweDApOworCXJlZ193cml0 ZShJTlRSX1NUQVRVU19FTkFCTEUsIDB4ZmZmZmZmZmYpOworCisJLyogTWFrZSBzdXJlIG91ciBk YXRhIG9yZGVyaW5nIGZpdHMgdGhlIGhvc3QncyAqLworCXJlZ3ZhbCA9IHJlZ19yZWFkKEhDX0NP TlRST0wpOworCWlmIChJU19FTkFCTEVEKENPTkZJR19CSUdfRU5ESUFOKSkgeworCQlpZiAoIShy ZWd2YWwgJiBIQ19DT05UUk9MX0RBVEFfQklHX0VORElBTikpIHsKKwkJCXJlZ3ZhbCB8PSBIQ19D T05UUk9MX0RBVEFfQklHX0VORElBTjsKKwkJCXJlZ193cml0ZShIQ19DT05UUk9MLCByZWd2YWwp OworCQkJcmVndmFsID0gcmVnX3JlYWQoSENfQ09OVFJPTCk7CisJCQlpZiAoIShyZWd2YWwgJiBI Q19DT05UUk9MX0RBVEFfQklHX0VORElBTikpIHsKKwkJCQlFUlIoImNhbm5vdCBzZXQgQkUgbW9k ZSIpOworCQkJCXJldHVybiAtRU5PVFNVUFA7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlpZiAo cmVndmFsICYgSENfQ09OVFJPTF9EQVRBX0JJR19FTkRJQU4pIHsKKwkJCXJlZ3ZhbCAmPSB+SENf Q09OVFJPTF9EQVRBX0JJR19FTkRJQU47CisJCQlyZWdfd3JpdGUoSENfQ09OVFJPTCwgcmVndmFs KTsKKwkJCXJlZ3ZhbCA9IHJlZ19yZWFkKEhDX0NPTlRST0wpOworCQkJaWYgKHJlZ3ZhbCAmIEhD X0NPTlRST0xfREFUQV9CSUdfRU5ESUFOKSB7CisJCQkJRVJSKCJjYW5ub3QgY2xlYXIgQkUgbW9k ZSIpOworCQkJCXJldHVybiAtRU5PVFNVUFA7CisJCQl9CisJCX0KKwl9CisKKwkvKiBTZWxlY3Qg b3VyIGNvbW1hbmQgZGVzY3JpcHRvciBtb2RlbCAqLworCXN3aXRjaCAoRklFTERfR0VUKEhDX0NB UF9DTURfU0laRSwgaGNpLT5jYXBzKSkgeworCWNhc2UgMDoKKwkJaGNpLT5jbWQgPSAmaTNjX2hj aV9jbWRfdjE7CisJCWJyZWFrOworCWNhc2UgMToKKwkJaGNpLT5jbWQgPSAmaTNjX2hjaV9jbWRf djI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUVSUigid3JvbmcgQ01EX1NJWkUgY2FwYWJpbGl0 eSB2YWx1ZSIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUcnkgYWN0aXZhdGluZyBE TUEgb3BlcmF0aW9ucyBmaXJzdCAqLworCWlmIChoY2ktPlJIU19yZWdzKSB7CisJCXJlZ19jbGVh cihIQ19DT05UUk9MLCBIQ19DT05UUk9MX1BJT19NT0RFKTsKKwkJaWYgKHJlZ19yZWFkKEhDX0NP TlRST0wpICYgSENfQ09OVFJPTF9QSU9fTU9ERSkgeworCQkJRVJSKCJQSU8gbW9kZSBpcyBzdHVj ayIpOworCQkJcmV0ID0gLUVJTzsKKwkJfSBlbHNlIHsKKwkJCWhjaS0+aW8gPSAmaTNjX2hjaV9k bWE7CisJCQlJTkZPKCJVc2luZyBETUEiKTsKKwkJfQorCX0KKworCS8qIElmIG5vIERNQSwgdHJ5 IFBJTyAqLworCWlmICghaGNpLT5pbyAmJiBoY2ktPlBJT19yZWdzKSB7CisJCXJlZ19zZXQoSENf Q09OVFJPTCwgSENfQ09OVFJPTF9QSU9fTU9ERSk7CisJCWlmICghKHJlZ19yZWFkKEhDX0NPTlRS T0wpICYgSENfQ09OVFJPTF9QSU9fTU9ERSkpIHsKKwkJCUVSUigiRE1BIG1vZGUgaXMgc3R1Y2si KTsKKwkJCXJldCA9IC1FSU87CisJCX0gZWxzZSB7CisJCQloY2ktPmlvID0gJmkzY19oY2lfcGlv OworCQkJSU5GTygiVXNpbmcgUElPIik7CisJCX0KKwl9CisKKwlpZiAoIWhjaS0+aW8pIHsKKwkJ RVJSKCJuZWl0aGVyIERNQSBub3IgUElPIGNhbiBiZSB1c2VkIik7CisJCWlmICghcmV0KQorCQkJ cmV0ID0gLUVJTlZBTDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBpM2NfaGNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJ c3RydWN0IGkzY19oY2kgKmhjaTsKKwlpbnQgaXJxLCByZXQ7CisKKwloY2kgPSBkZXZtX2t6YWxs b2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpoY2kpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhjaSkKKwkJ cmV0dXJuIC1FTk9NRU07CisJaGNpLT5iYXNlX3JlZ3MgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBf cmVzb3VyY2UocGRldiwgMCk7CisJaWYgKElTX0VSUihoY2ktPmJhc2VfcmVncykpCisJCXJldHVy biBQVFJfRVJSKGhjaS0+YmFzZV9yZWdzKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYs IGhjaSk7CisJLyogdGVtcG9yYXJ5IGZvciBkZXZfcHJpbnRrJ3MsIHRvIGJlIHJlcGxhY2VkIGlu IGkzY19tYXN0ZXJfcmVnaXN0ZXIgKi8KKwloY2ktPm1hc3Rlci5kZXYuaW5pdF9uYW1lID0gZGV2 X25hbWUoJnBkZXYtPmRldik7CisKKwlyZXQgPSBpM2NfaGNpX2luaXQoaGNpKTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gcmV0OworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwly ZXQgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGlycSwgaTNjX2hjaV9pcnFfaGFuZGxl ciwKKwkJCSAgICAgICAwLCBOVUxMLCBoY2kpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwlyZXQgPSBpM2NfbWFzdGVyX3JlZ2lzdGVyKCZoY2ktPm1hc3RlciwgJnBkZXYtPmRldiwKKwkJ CQkgICZpM2NfaGNpX29wcywgZmFsc2UpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpM2NfaGNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBpM2NfaGNpICpoY2kgPSBwbGF0Zm9ybV9nZXRfZHJ2 ZGF0YShwZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gaTNjX21hc3Rlcl91bnJlZ2lzdGVyKCZo Y2ktPm1hc3Rlcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBpM2NfaGNpX29mX21hdGNoW10gPSB7 CisJeyAuY29tcGF0aWJsZSA9ICJtaXBpLWkzYy1oY2kiLCB9LAorCXt9LAorfTsKK01PRFVMRV9E RVZJQ0VfVEFCTEUob2YsIGkzY19oY2lfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRm b3JtX2RyaXZlciBpM2NfaGNpX2RyaXZlciA9IHsKKwkucHJvYmUgPSBpM2NfaGNpX3Byb2JlLAor CS5yZW1vdmUgPSBpM2NfaGNpX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtaXBp LWkzYy1oY2kiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIoaTNjX2hjaV9vZl9t YXRjaCksCisJfSwKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGkzY19oY2lfZHJpdmVyKTsK KworTU9EVUxFX0FVVEhPUigiTmljb2xhcyBQaXRyZSA8bnBpdHJlQGJheWxpYnJlLmNvbT4iKTsK K01PRFVMRV9ERVNDUklQVElPTigiTUlQSSBJM0MgSENJIGRyaXZlciIpOworTU9EVUxFX0xJQ0VO U0UoIkR1YWwgQlNEL0dQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pM2MvbWFzdGVyL21pcGkt aTNjLWhjaS9kYXQuaCBiL2RyaXZlcnMvaTNjL21hc3Rlci9taXBpLWkzYy1oY2kvZGF0LmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uODExNTlmNTY0OQotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvaTNjL21hc3Rlci9taXBpLWkzYy1oY2kvZGF0LmgKQEAgLTAsMCAr MSwyOCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLworLyoK KyAqIENvcHlyaWdodCAoYykgMjAyMCwgTUlQSSBBbGxpYW5jZSwgSW5jLgorICoKKyAqIEF1dGhv cjogTmljb2xhcyBQaXRyZSA8bnBpdHJlQGJheWxpYnJlLmNvbT4KKyAqCisgKiBDb21tb24gREFU IHJlbGF0ZWQgc3R1ZmYKKyAqLworCisjaWZuZGVmIERBVF9ICisjZGVmaW5lIERBVF9ICisKKy8q IEdsb2JhbCBEQVQgZmxhZ3MgKi8KKyNkZWZpbmUgREFUXzBfSTJDX0RFVklDRQkJVzBfQklUXygz MSkKKyNkZWZpbmUgREFUXzBfU0lSX1JFSkVDVAkJVzBfQklUXygxMykKKyNkZWZpbmUgREFUXzBf SUJJX1BBWUxPQUQJCVcwX0JJVF8oMTIpCisKK2ludCBpM2NfaGNpX2RhdF9pbml0KHN0cnVjdCBp M2NfaGNpICpoY2kpOwordm9pZCBpM2NfaGNpX2RhdF9jbGVhbnVwKHN0cnVjdCBpM2NfaGNpICpo Y2kpOworaW50IGkzY19oY2lfZGF0X2FsbG9jX2VudHJ5KHN0cnVjdCBpM2NfaGNpICpoY2kpOwor dm9pZCBpM2NfaGNpX2RhdF9zZXRfZHluYW1pY19hZGRyKHN0cnVjdCBpM2NfaGNpICpoY2ksIHVf aW50IGRhdF9pZHgsIHU4IGFkZHIpOwordm9pZCBpM2NfaGNpX2RhdF9zZXRfc3RhdGljX2FkZHIo c3RydWN0IGkzY19oY2kgKmhjaSwgdV9pbnQgZGF0X2lkeCwgdTggYWRkcik7Cit2b2lkIGkzY19o Y2lfZGF0X3NldF9mbGFncyhzdHJ1Y3QgaTNjX2hjaSAqaGNpLCB1X2ludCBkYXRfaWR4LCB1MzIg dzAsIHUzMiB3MSk7Cit2b2lkIGkzY19oY2lfZGF0X2NsZWFyX2ZsYWdzKHN0cnVjdCBpM2NfaGNp ICpoY2ksIHVfaW50IGRhdF9pZHgsIHUzMiB3MCwgdTMyIHcxKTsKK2ludCBpM2NfaGNpX2RhdF9n ZXRfaW5kZXgoc3RydWN0IGkzY19oY2kgKmhjaSwgdTggYWRkcmVzcyk7Cit2b2lkIGkzY19oY2lf ZGF0X2ZyZWVfZW50cnkoc3RydWN0IGkzY19oY2kgKmhjaSwgdV9pbnQgZGF0X2lkeCk7CisKKyNl bmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pM2MvbWFzdGVyL21pcGktaTNjLWhjaS9kYXRfdjEu YyBiL2RyaXZlcnMvaTNjL21hc3Rlci9taXBpLWkzYy1oY2kvZGF0X3YxLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYmMyYTA1NjY4OQotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvaTNjL21hc3Rlci9taXBpLWkzYy1oY2kvZGF0X3YxLmMKQEAgLTAsMCArMSwxNzAg QEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKy8qCisgKiBDb3B5 cmlnaHQgKGMpIDIwMjAsIE1JUEkgQWxsaWFuY2UsIEluYy4KKyAqCisgKiBBdXRob3I6IE5pY29s YXMgUGl0cmUgPG5waXRyZUBiYXlsaWJyZS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Jp dGZpZWxkLmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjaW5jbHVkZSA8bGludXgvZGV2 aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pM2MvbWFz dGVyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgImhjaS5oIgorI2luY2x1 ZGUgImRhdC5oIgorCisKKy8qCisgKiBEZXZpY2UgQWRkcmVzcyBUYWJsZSBTdHJ1Y3R1cmUKKyAq LworCisjZGVmaW5lIERBVF8xX0FVVE9DTURfSERSX0NPREUJCVcxX01BU0soNTgsIDUxKQorI2Rl ZmluZSBEQVRfMV9BVVRPQ01EX01PREUJCVcxX01BU0soNTAsIDQ4KQorI2RlZmluZSBEQVRfMV9B VVRPQ01EX1ZBTFVFCQlXMV9NQVNLKDQ3LCA0MCkKKyNkZWZpbmUgREFUXzFfQVVUT0NNRF9NQVNL CQlXMV9NQVNLKDM5LCAzMikKKy8qCURBVF8wX0kyQ19ERVZJQ0UJCVcwX0JJVF8oMzEpICovCisj ZGVmaW5lIERBVF8wX0RFVl9OQUNLX1JFVFJZX0NOVAlXMF9NQVNLKDMwLCAyOSkKKyNkZWZpbmUg REFUXzBfUklOR19JRAkJCVcwX01BU0soMjgsIDI2KQorI2RlZmluZSBEQVRfMF9EWU5BRERSX1BB UklUWQkJVzBfQklUXygyMykKKyNkZWZpbmUgREFUXzBfRFlOQU1JQ19BRERSRVNTCQlXMF9NQVNL KDIyLCAxNikKKyNkZWZpbmUgREFUXzBfVFMJCQlXMF9CSVRfKDE1KQorI2RlZmluZSBEQVRfMF9N Ul9SRUpFQ1QJCQlXMF9CSVRfKDE0KQorLyoJREFUXzBfU0lSX1JFSkVDVAkJVzBfQklUXygxMykg Ki8KKy8qCURBVF8wX0lCSV9QQVlMT0FECQlXMF9CSVRfKDEyKSAqLworI2RlZmluZSBEQVRfMF9T VEFUSUNfQUREUkVTUwkJVzBfTUFTSyg2LCAwKQorCisjZGVmaW5lIGRhdF93MF9yZWFkKGkpCQly ZWFkbChoY2ktPkRBVF9yZWdzICsgKGkpICogOCkKKyNkZWZpbmUgZGF0X3cxX3JlYWQoaSkJCXJl YWRsKGhjaS0+REFUX3JlZ3MgKyAoaSkgKiA4ICsgNCkKKyNkZWZpbmUgZGF0X3cwX3dyaXRlKGks IHYpCXdyaXRlbCh2LCBoY2ktPkRBVF9yZWdzICsgKGkpICogOCkKKyNkZWZpbmUgZGF0X3cxX3dy aXRlKGksIHYpCXdyaXRlbCh2LCBoY2ktPkRBVF9yZWdzICsgKGkpICogOCArIDQpCisKK3N0YXRp YyBpbmxpbmUgYm9vbCBkeW5hZGRyX3Bhcml0eSh1X2ludCBhZGRyKQoreworCWFkZHIgfD0gMSA8 PCA3OworCWFkZHIgKz0gYWRkciA+PiA0OworCWFkZHIgKz0gYWRkciA+PiAyOworCWFkZHIgKz0g YWRkciA+PiAxOworCXJldHVybiAoYWRkciAmIDEpOworfQorCitpbnQgaTNjX2hjaV9kYXRfaW5p dChzdHJ1Y3QgaTNjX2hjaSAqaGNpKQoreworCXVfaW50IGRhdF9pZHg7CisKKwlpZiAoIWhjaS0+ REFUX3JlZ3MpIHsKKwkJRVJSKCJvbmx5IERBVCBpbiByZWdpc3RlciBzcGFjZSBpcyBzdXBwb3J0 ZWQgYXQgdGhlIG1vbWVudCIpOworCQlyZXR1cm4gLUVOT1RTVVBQOworCX0KKwlpZiAoaGNpLT5E QVRfZW50cnlfc2l6ZSAhPSA4KSB7CisJCUVSUigib25seSA4LWJ5dGVzIERBVCBlbnRyaWVzIGFy ZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudCIpOworCQlyZXR1cm4gLUVOT1RTVVBQOworCX0KKwor CS8qIHVzZSBhIGJpdG1hcCBmb3IgZmFzdGVyIGZyZWUgc2xvdCBzZWFyY2ggKi8KKwloY2ktPkRB VF9kYXRhID0gYml0bWFwX3phbGxvYyhoY2ktPkRBVF9lbnRyaWVzLCBHRlBfS0VSTkVMKTsKKwlp ZiAoIWhjaS0+REFUX2RhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogY2xlYXIgdGhlbSAq LworCWZvciAoZGF0X2lkeCA9IDA7IGRhdF9pZHggPCBoY2ktPkRBVF9lbnRyaWVzOyBkYXRfaWR4 KyspIHsKKwkJZGF0X3cwX3dyaXRlKGRhdF9pZHgsIDApOworCQlkYXRfdzFfd3JpdGUoZGF0X2lk eCwgMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaTNjX2hjaV9kYXRfY2xlYW51cChz dHJ1Y3QgaTNjX2hjaSAqaGNpKQoreworCWJpdG1hcF9mcmVlKGhjaS0+REFUX2RhdGEpOworCWhj aS0+REFUX2RhdGEgPSBOVUxMOworfQorCitpbnQgaTNjX2hjaV9kYXRfYWxsb2NfZW50cnkoc3Ry dWN0IGkzY19oY2kgKmhjaSkKK3sKKwl1X2ludCBkYXRfaWR4OworCisJZGF0X2lkeCA9IGZpbmRf Zmlyc3RfemVyb19iaXQoaGNpLT5EQVRfZGF0YSwgaGNpLT5EQVRfZW50cmllcyk7CisJaWYgKGRh dF9pZHggPj0gaGNpLT5EQVRfZW50cmllcykKKwkJcmV0dXJuIC1FTk9FTlQ7CisJX19zZXRfYml0 KGRhdF9pZHgsIGhjaS0+REFUX2RhdGEpOworCisJLyogZGVmYXVsdCBmbGFncyAqLworCWRhdF93 MF93cml0ZShkYXRfaWR4LCBEQVRfMF9TSVJfUkVKRUNUIHwgREFUXzBfTVJfUkVKRUNUKTsKKwor CXJldHVybiBkYXRfaWR4OworfQorCit2b2lkIGkzY19oY2lfZGF0X3NldF9keW5hbWljX2FkZHIo c3RydWN0IGkzY19oY2kgKmhjaSwKKwkJCQkgIHVfaW50IGRhdF9pZHgsIHU4IGFkZHJlc3MpCit7 CisJdTMyIGRhdF93MDsKKworCWRhdF93MCA9IGRhdF93MF9yZWFkKGRhdF9pZHgpOworCWRhdF93 MCAmPSB+KERBVF8wX0RZTkFNSUNfQUREUkVTUyB8IERBVF8wX0RZTkFERFJfUEFSSVRZKTsKKwlk YXRfdzAgfD0gRklFTERfUFJFUChEQVRfMF9EWU5BTUlDX0FERFJFU1MsIGFkZHJlc3MpIHwKKwkJ ICAoZHluYWRkcl9wYXJpdHkoYWRkcmVzcykgPyBEQVRfMF9EWU5BRERSX1BBUklUWSA6IDApOwor CWRhdF93MF93cml0ZShkYXRfaWR4LCBkYXRfdzApOworfQorCit2b2lkIGkzY19oY2lfZGF0X3Nl dF9zdGF0aWNfYWRkcihzdHJ1Y3QgaTNjX2hjaSAqaGNpLAorCQkJCSB1X2ludCBkYXRfaWR4LCB1 OCBhZGRyZXNzKQoreworCXUzMiBkYXRfdzA7CisKKwlkYXRfdzAgPSBkYXRfdzBfcmVhZChkYXRf aWR4KTsKKwlkYXRfdzAgJj0gfkRBVF8wX1NUQVRJQ19BRERSRVNTOworCWRhdF93MCB8PSBGSUVM RF9QUkVQKERBVF8wX1NUQVRJQ19BRERSRVNTLCBhZGRyZXNzKTsKKwlkYXRfdzBfd3JpdGUoZGF0 X2lkeCwgZGF0X3cwKTsKK30KKwordm9pZCBpM2NfaGNpX2RhdF9zZXRfZmxhZ3Moc3RydWN0IGkz Y19oY2kgKmhjaSwgdV9pbnQgZGF0X2lkeCwKKwkJCSAgIHUzMiB3MF9mbGFncywgdTMyIHcxX2Zs YWdzKQoreworCXUzMiBkYXRfdzAsIGRhdF93MTsKKworCWRhdF93MCA9IGRhdF93MF9yZWFkKGRh dF9pZHgpOworCWRhdF93MSA9IGRhdF93MV9yZWFkKGRhdF9pZHgpOworCWRhdF93MCB8PSB3MF9m bGFnczsKKwlkYXRfdzEgfD0gdzFfZmxhZ3M7CisJZGF0X3cwX3dyaXRlKGRhdF9pZHgsIGRhdF93 MCk7CisJZGF0X3cxX3dyaXRlKGRhdF9pZHgsIGRhdF93MSk7Cit9CisKK3ZvaWQgaTNjX2hjaV9k YXRfY2xlYXJfZmxhZ3Moc3RydWN0IGkzY19oY2kgKmhjaSwgdV9pbnQgZGF0X2lkeCwKKwkJCSAg ICAgdTMyIHcwX2ZsYWdzLCB1MzIgdzFfZmxhZ3MpCit7CisJdTMyIGRhdF93MCwgZGF0X3cxOwor CisJZGF0X3cwID0gZGF0X3cwX3JlYWQoZGF0X2lkeCk7CisJZGF0X3cxID0gZGF0X3cxX3JlYWQo ZGF0X2lkeCk7CisJZGF0X3cwICY9IH53MF9mbGFnczsKKwlkYXRfdzEgJj0gfncxX2ZsYWdzOwor CWRhdF93MF93cml0ZShkYXRfaWR4LCBkYXRfdzApOworCWRhdF93MV93cml0ZShkYXRfaWR4LCBk YXRfdzEpOworfQorCitpbnQgaTNjX2hjaV9kYXRfZ2V0X2luZGV4KHN0cnVjdCBpM2NfaGNpICpo Y2ksIHU4IGRldl9hZGRyKQoreworCXVfaW50IGRhdF9pZHg7CisJdTMyIGRhdF93MDsKKworCWZv ciAoZGF0X2lkeCA9IGZpbmRfZmlyc3RfYml0KGhjaS0+REFUX2RhdGEsIGhjaS0+REFUX2VudHJp ZXMpOworCSAgICAgZGF0X2lkeCA8IGhjaS0+REFUX2VudHJpZXM7CisJICAgICBkYXRfaWR4ID0g ZmluZF9uZXh0X2JpdChoY2ktPkRBVF9kYXRhLCBoY2ktPkRBVF9lbnRyaWVzLCBkYXRfaWR4KSkg eworCQlkYXRfdzAgPSBkYXRfdzBfcmVhZChkYXRfaWR4KTsKKwkJaWYgKEZJRUxEX0dFVChEQVRf MF9EWU5BTUlDX0FERFJFU1MsIGRhdF93MCkgPT0gZGV2X2FkZHIpCisJCQlyZXR1cm4gZGF0X2lk eDsKKwl9CisJLyogd2hhdCB0byBkbyBoZXJlPyAqLworCUJVRygpOworfQorCit2b2lkIGkzY19o Y2lfZGF0X2ZyZWVfZW50cnkoc3RydWN0IGkzY19oY2kgKmhjaSwgdV9pbnQgZGF0X2lkeCkKK3sK KwlkYXRfdzBfd3JpdGUoZGF0X2lkeCwgMCk7CisJZGF0X3cxX3dyaXRlKGRhdF9pZHgsIDApOwor CV9fY2xlYXJfYml0KGRhdF9pZHgsIGhjaS0+REFUX2RhdGEpOworfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9pM2MvbWFzdGVyL21pcGktaTNjLWhjaS9kY3QuaCBiL2RyaXZlcnMvaTNjL21hc3Rlci9t aXBpLWkzYy1oY2kvZGN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u MWM2NzE0MTk1ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaTNjL21hc3Rlci9taXBpLWkz Yy1oY2kvZGN0LmgKQEAgLTAsMCArMSwxNiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEJTRC0zLUNsYXVzZSAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMjAyMCwgTUlQSSBBbGxpYW5j ZSwgSW5jLgorICoKKyAqIEF1dGhvcjogTmljb2xhcyBQaXRyZSA8bnBpdHJlQGJheWxpYnJlLmNv bT4KKyAqCisgKiBDb21tb24gRENUIHJlbGF0ZWQgc3R1ZmYKKyAqLworCisjaWZuZGVmIERDVF9I CisjZGVmaW5lIERDVF9ICisKK3ZvaWQgaTNjX2hjaV9kY3RfZ2V0X3ZhbChzdHJ1Y3QgaTNjX2hj aSAqaGNpLCB1X2ludCBkY3RfaWR4LAorCQkJIHU2NCAqcGlkLCB1X2ludCAqZGNyLCB1X2ludCAq YmNyKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kzYy9tYXN0ZXIvbWlwaS1pM2Mt aGNpL2RjdF92MS5jIGIvZHJpdmVycy9pM2MvbWFzdGVyL21pcGktaTNjLWhjaS9kY3RfdjEuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iYmUxMzQ2Y2VkCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9pM2MvbWFzdGVyL21pcGktaTNjLWhjaS9kY3RfdjEuYwpAQCAt MCwwICsxLDM2IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisv KgorICogQ29weXJpZ2h0IChjKSAyMDIwLCBNSVBJIEFsbGlhbmNlLCBJbmMuCisgKgorICogQXV0 aG9yOiBOaWNvbGFzIFBpdHJlIDxucGl0cmVAYmF5bGlicmUuY29tPgorICovCisKKyNpbmNsdWRl IDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRmaWVsZC5oPgorI2luY2x1ZGUg PGxpbnV4L2kzYy9tYXN0ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSAi aGNpLmgiCisjaW5jbHVkZSAiZGN0LmgiCisKKy8qCisgKiBEZXZpY2UgQ2hhcmFjdGVyaXN0aWMg VGFibGUKKyAqLworCit2b2lkIGkzY19oY2lfZGN0X2dldF92YWwoc3RydWN0IGkzY19oY2kgKmhj aSwgdV9pbnQgZGN0X2lkeCwKKwkJCSB1NjQgKnBpZCwgdV9pbnQgKmRjciwgdV9pbnQgKmJjcikK K3sKKwl2b2lkIF9faW9tZW0gKnJlZyA9IGhjaS0+RENUX3JlZ3MgKyBkY3RfaWR4ICogNCAqIDQ7 CisJdTMyIGRjdF9lbnRyeV9kYXRhWzRdOworCXVfaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwg NDsgaSsrKSB7CisJCWRjdF9lbnRyeV9kYXRhW2ldID0gcmVhZGwocmVnKTsKKwkJcmVnICs9IDQ7 CisJfQorCisJKnBpZCA9ICgodTY0KWRjdF9lbnRyeV9kYXRhWzBdKSA8PCAoNDcgLSAzMiArIDEp IHwKKwkgICAgICAgRklFTERfR0VUKFcxX01BU0soNDcsIDMyKSwgZGN0X2VudHJ5X2RhdGFbMV0p OworCSpkY3IgPSBGSUVMRF9HRVQoVzJfTUFTSyg3MSwgNjQpLCBkY3RfZW50cnlfZGF0YVsyXSk7 CisJKmJjciA9IEZJRUxEX0dFVChXMl9NQVNLKDc5LCA3MiksIGRjdF9lbnRyeV9kYXRhWzJdKTsK K30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTNjL21hc3Rlci9taXBpLWkzYy1oY2kvZGVidWcuYyBi L2RyaXZlcnMvaTNjL21hc3Rlci9taXBpLWkzYy1oY2kvZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi4zODg1NDk5MTE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9pM2MvbWFzdGVyL21pcGktaTNjLWhjaS9kZWJ1Zy5jCkBAIC0wLDAgKzEsNzkgQEAKKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKy8qCisgKiBDb3B5cmlnaHQg KGMpIDIwMjAsIE1JUEkgQWxsaWFuY2UsIEluYy4KKyAqCisgKiBBdXRob3I6IE5pY29sYXMgUGl0 cmUgPG5waXRyZUBiYXlsaWJyZS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5o PgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTNjL21hc3Rlci5oPgor I2luY2x1ZGUgPGxpbnV4L3ByaW50ay5oPgorCisjaW5jbHVkZSAiaGNpLmgiCisjaW5jbHVkZSAi ZGVidWcuaCIKKworLyoKKyAqIFBhdWwgS2ltZWxtYW4ncyBkZWJ1ZyB0cmFjZSBsb2cgZmFjaWxp dHkuCisgKiBUaGlzIGlzIGNvbXBsZXRlbHkgdmVuZG9yIGFuZCBoYXJkd2FyZSBzcGVjaWZpYy4K KyAqLwordm9pZCBfX1BLX2RlYnVnX3RyYWNlKHN0cnVjdCBpM2NfaGNpICpoY2ksIGNvbnN0IGNo YXIgKmZ1bmMpCit7CisJdm9pZCBfX2lvbWVtICp0cmNwID0gKHZvaWQgX19pb21lbSAqKWhjaS0+ dmVuZG9yX2RhdGEgKyA3KjQ7CisJdWludDMyX3QgaWR4LCBjeWNsZXMsIG1hdGNoOworCXVpbnQz Ml90IHRyYWNlX2Z1bGwgPSAxOworCisJaWYgKCFoY2ktPnZlbmRvcl9kYXRhKQorCQlyZXR1cm47 CisKKwlpZHggPSByZWFkbCh0cmNwICsgMCo0KTsKKwljeWNsZXMgPSBpZHg+PjE2OworCWlkeCAm PSAweEZGRkY7CisJaWYgKGlkeCA+IDB4RkZGKSB7CisJCXByX2luZm8oIlRyYWNlIGNvdW50PSVk LCBzdG9yZWQ9JWQ7IGN5Y2xlcz0lZFxuIiwgaWR4LCAweEZGRiwgY3ljbGVzKTsKKwkJbWF0Y2gg PSAoaWR4LTEpICYgMHhGRkY7CisJfSBlbHNlIHsKKwkJcHJfaW5mbygiVHJhY2UgY291bnQ9JWQ7 IGN5Y2xlcz0lZFxuIiwgaWR4LCBjeWNsZXMpOworCQltYXRjaCA9IGlkeDsKKwkJaWR4ID0gMDsK Kwl9CisKKwl3cml0ZWwoaWR4IHwgKHRyYWNlX2Z1bGwgPDwgMzEpLCB0cmNwICsgMSo0KTsgLy8g MXN0IHRvIHJlYWQKKwlmb3IgKDsgaWR4ICE9IG1hdGNoOyBpZHggPSAoaWR4KzEpJjB4RkZGKSB7 IC8vIHJpbmcgdGhyb3VnaCBpdAorCQl1aW50MzJfdCB2ID0gcmVhZGwodHJjcCArIDEqNCk7IC8v IGdldCB0cmFjZSB3b3JkCisJCXVpbnQzMl90IHVwID0gdHJhY2VfZnVsbCA/IHJlYWRsKHRyY3Ag KyAxKjQpIDogMDsKKwkJY2hhciAqZTIgPSAodiYoMTw8OSkpPyIvTkFDSyI6IiI7CisJCWNoYXIg KmUzID0gKHYmKDE8PDEwKSk/Ii9XUkFCVCI6IiI7CisJCWNoYXIgKmU0ID0gKHYmKDE8PDExKSk/ Ii9URVJNIjoiIjsKKwkJY2hhciAqZTUgPSAodiAmICgxPDw3KSkgPyAiL0lOVlJFUSIgOiAiIjsK KwkJY2hhciAqZTYgPSAodiAmICgxPDw4KSkgPyAiL1RJTUVPVVQiIDogIiI7CisJCWlmICh0cmFj ZV9mdWxsKSB7CisJCQl1aW50MzJfdCBjbWQgPSB1cCA+PiAxNjsKKwkJCXByX2luZm8oIiUtNWQ6 ICIsIHVwICYgMHhGRkZGKTsKKwkJCWlmIChjbWQpCisJCQkJcHJfaW5mbygiY21kPSVzIHRpZD0l MDJYLCBUT0M9JWQsIFJPQz0lZCwgJXMgJXMgYWRkcj0lWFxuLS0tIiwKKwkJCQkJKGNtZCAmICgx PDwyKSkgPyAiQ21kIiA6ICJEQUEiLAorCQkJCQkoY21kID4+IDMpICYgMHhGLCBjbWQgPj4gMzEs IChjbWQgPj4gMzApICYgMSwKKwkJCQkJKChjbWQgPj4gNykgJiAxKSA/ICJJMkMiIDogIkkzQyIs CisJCQkJCShjbWQgJiAoMTw8OCkpPyJSZWFkICI6IldyaXRlIiwKKwkJCQkJKGNtZCA+PiA5KSAm IDB4N0YpOworCQkJZWxzZQorCQkJCXByX2NvbnQoIlxuLS0tLSIpOworCQl9IGVsc2UKKwkJCXBy X2luZm8oIiUwOFg6ICIsIHYpOworCQlwcl9jb250KCIjJTNYOiBzdD0lMDNYLHN0YXR1cz0lMDJY JXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzXG4iLCBpZHgsCisJCQl2ICYgMHg3RiwgKHYgPj4gMTIp ICYgMHhGRkYsICgodiA+PiAyNCkgJiAxKSA/ICIsIGNscnMiIDogIiIsCisJCQkoKHYgPj4gMjUp ICYgMSkgPyAiLCBFUlJPUiIgOiAiIiwgZTIsIGUzLCBlNCwgZTUsIGU2LAorCQkJKCh2ID4+IDI2 KSAmIDEpID8gIixjbHJlIiA6ICIiLCAoKHYgPj4gMjcpICYgMSkgPyAiLCBOQUNLIiA6ICIiLAor CQkJKCh2ID4+IDI4KSAmIDEpID8gIiwgSU5fREFBIiA6ICIiLAorCQkJKCh2ID4+IDI5KSAmIDEp ID8gIiwgSVJRIiA6ICIiLCAoKHYgPj4gMzApICYgMSkgPyAiLCBjUlNQIiA6ICIiKTsKKwl9CisJ Ly8gY2xlYXIgdHJhY2UgaW5kZXggc28gY2FuIHRlbGwgd2hlbiB3ZSBoYXZlIG5ldyBvbmVzCisJ d3JpdGVsKDAsIHRyY3AgKyAwKjQpOworfQorCit2b2lkIF9fUEtfZGVidWdfdHJhY2VfcmVzZXQo c3RydWN0IGkzY19oY2kgKmhjaSkKK3sKKwl2b2lkIF9faW9tZW0gKnRyY3AgICAgICA9ICh2b2lk IF9faW9tZW0gKiloY2ktPnZlbmRvcl9kYXRhICsgNyo0OworCXdyaXRlbCgwLCB0cmNwICsgMCo0 KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTNjL21hc3Rlci9taXBpLWkzYy1oY2kvZGVidWcu aCBiL2RyaXZlcnMvaTNjL21hc3Rlci9taXBpLWkzYy1oY2kvZGVidWcuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5kYWE5Mjc3YTU2Ci0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9pM2MvbWFzdGVyL21pcGktaTNjLWhjaS9kZWJ1Zy5oCkBAIC0wLDAgKzEsMTcgQEAK Ky8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KKy8qCisgKiBDb3B5 cmlnaHQgKGMpIDIwMjAsIE1JUEkgQWxsaWFuY2UsIEluYy4KKyAqCisgKiBBdXRob3I6IE5pY29s YXMgUGl0cmUgPG5waXRyZUBiYXlsaWJyZS5jb20+CisgKi8KKworI2lmbmRlZiBERUJVR19ICisj ZGVmaW5lIERFQlVHX0gKKwordm9pZCBfX1BLX2RlYnVnX3RyYWNlKHN0cnVjdCBpM2NfaGNpICpo Y2ksIGNvbnN0IGNoYXIgKmZ1bmMpOworI2RlZmluZSBQS19kZWJ1Z190cmFjZSgpIF9fUEtfZGVi dWdfdHJhY2UoaGNpLCBfX2Z1bmNfXykKKwordm9pZCBfX1BLX2RlYnVnX3RyYWNlX3Jlc2V0KHN0 cnVjdCBpM2NfaGNpICpoY2kpOworI2RlZmluZSBQS19kZWJ1Z190cmFjZV9yZXNldCgpIF9fUEtf ZGVidWdfdHJhY2VfcmVzZXQoaGNpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTNj L21hc3Rlci9taXBpLWkzYy1oY2kvZG1hLmMgYi9kcml2ZXJzL2kzYy9tYXN0ZXIvbWlwaS1pM2Mt aGNpL2RtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmJjY2NkZTNj MTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2kzYy9tYXN0ZXIvbWlwaS1pM2MtaGNpL2Rt YS5jCkBAIC0wLDAgKzEsNzY3IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMt Q2xhdXNlCisvKgorICogQ29weXJpZ2h0IChjKSAyMDIwLCBNSVBJIEFsbGlhbmNlLCBJbmMuCisg KgorICogQXV0aG9yOiBOaWNvbGFzIFBpdHJlIDxucGl0cmVAYmF5bGlicmUuY29tPgorICoKKyAq IE5vdGU6IFRoZSBJM0MgSENJIHYyLjAgc3BlYyBpcyBzdGlsbCBpbiBmbHV4LiBUaGUgSUJJIHN1 cHBvcnQgaXMgYmFzZWQgb24KKyAqIHYxLnggb2YgdGhlIHNwZWMgYW5kIHYyLjAgd2lsbCBsaWtl bHkgYmUgc3BsaXQgb3V0LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9iaXRmaWVsZC5oPgorI2lu Y2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Cisj aW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pM2MvbWFzdGVyLmg+Cisj aW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgImhjaS5oIgorI2luY2x1ZGUgImNtZC5o IgorI2luY2x1ZGUgImliaS5oIgorCisKKy8qCisgKiBTb2Z0d2FyZSBQYXJhbWV0ZXIgVmFsdWVz IChzb21ld2hhdCBhcmIgaXRyYXJ5IGZvciBub3cpLgorICogU29tZSBvZiB0aGVtIGNvdWxkIGJl IGRldGVybWluZWQgYXQgcnVuIHRpbWUgZXZlbnR1YWxseS4KKyAqLworCisjZGVmaW5lIFhGRVJf UklOR1MJCQkxCS8qIG1heDogOCAqLworI2RlZmluZSBYRkVSX1JJTkdfRU5UUklFUwkJMTYJLyog bWF4OiAyNTUgKi8KKworI2RlZmluZSBJQklfUklOR1MJCQkxCS8qIG1heDogOCAqLworI2RlZmlu ZSBJQklfU1RBVFVTX1JJTkdfRU5UUklFUwkJMzIJLyogbWF4OiAyNTUgKi8KKyNkZWZpbmUgSUJJ X0NIVU5LX0NBQ0hFTElORVMJCTEJLyogbWF4OiAyNTYgYnl0ZXMgZXF1aXZhbGVudCAqLworI2Rl ZmluZSBJQklfQ0hVTktfUE9PTF9TSVpFCQkxMjgJLyogbWF4OiAxMDIzICovCisKKy8qCisgKiBS aW5nIEhlYWRlciBQcmVhbWJsZQorICovCisKKyNkZWZpbmUgcmhzX3JlZ19yZWFkKHIpCQlyZWFk bChoY2ktPlJIU19yZWdzICsgKFJIU18jI3IpKQorI2RlZmluZSByaHNfcmVnX3dyaXRlKHIsIHYp CXdyaXRlbCh2LCBoY2ktPlJIU19yZWdzICsgKFJIU18jI3IpKQorCisjZGVmaW5lIFJIU19DT05U Uk9MCQkJMHgwMAorI2RlZmluZSBQUkVBTUJMRV9TSVpFCQkJR0VOTUFTSygzMSwgMjQpCS8qIFBy ZWFtYmxlIFNlY3Rpb24gU2l6ZSAqLworI2RlZmluZSBIRUFERVJfU0laRQkJCUdFTk1BU0soMjMs IDE2KQkvKiBSaW5nIEhlYWRlciBTaXplICovCisjZGVmaW5lIE1BWF9IRUFERVJfQ09VTlRfQ0FQ CQlHRU5NQVNLKDcsIDQpIC8qIEhDIE1heCBIZWFkZXIgQ291bnQgKi8KKyNkZWZpbmUgTUFYX0hF QURFUl9DT1VOVAkJR0VOTUFTSygzLCAwKSAvKiBEcml2ZXIgTWF4IEhlYWRlciBDb3VudCAqLwor CisjZGVmaW5lIFJIU19SSG5fT0ZGU0VUKG4pCQkoMHgwNCArIChuKSo0KQorCisvKgorICogUmlu ZyBIZWFkZXIgKFBlci1SaW5nIEJ1bmRsZSkKKyAqLworCisjZGVmaW5lIHJoX3JlZ19yZWFkKHIp CQlyZWFkbChyaC0+cmVncyArIChSSF8jI3IpKQorI2RlZmluZSByaF9yZWdfd3JpdGUociwgdikJ d3JpdGVsKHYsIHJoLT5yZWdzICsgKFJIXyMjcikpCisKKyNkZWZpbmUgUkhfQ1JfU0VUVVAJCQkw eDAwCS8qIENvbW1hbmQvUmVzcG9uc2UgUmluZyAqLworI2RlZmluZSBDUl9YRkVSX1NUUlVDVF9T SVpFCQlHRU5NQVNLKDMxLCAyNCkKKyNkZWZpbmUgQ1JfUkVTUF9TVFJVQ1RfU0laRQkJR0VOTUFT SygyMywgMTYpCisjZGVmaW5lIENSX1JJTkdfU0laRQkJCUdFTk1BU0soOCwgMCkKKworI2RlZmlu ZSBSSF9JQklfU0VUVVAJCQkweDA0CisjZGVmaW5lIElCSV9TVEFUVVNfU1RSVUNUX1NJWkUJCUdF Tk1BU0soMzEsIDI0KQorI2RlZmluZSBJQklfU1RBVFVTX1JJTkdfU0laRQkJR0VOTUFTSygyMywg MTYpCisjZGVmaW5lIElCSV9EQVRBX0NIVU5LX1NJWkUJCUdFTk1BU0soMTIsIDEwKQorI2RlZmlu ZSBJQklfREFUQV9DSFVOS19DT1VOVAkJR0VOTUFTSyg5LCAwKQorCisjZGVmaW5lIFJIX0NIVU5L X0NPTlRST0wJCQkweDA4CisKKyNkZWZpbmUgUkhfSU5UUl9TVEFUVVMJCQkweDEwCisjZGVmaW5l IFJIX0lOVFJfU1RBVFVTX0VOQUJMRQkJMHgxNAorI2RlZmluZSBSSF9JTlRSX1NJR05BTF9FTkFC TEUJCTB4MTgKKyNkZWZpbmUgUkhfSU5UUl9GT1JDRQkJCTB4MWMKKyNkZWZpbmUgSU5UUl9JQklf UkVBRFkJCQlCSVQoMTIpCisjZGVmaW5lIElOVFJfVFJBTlNGRVJfQ09NUExFVElPTglCSVQoMTEp CisjZGVmaW5lIElOVFJfUklOR19PUAkJCUJJVCgxMCkKKyNkZWZpbmUgSU5UUl9UUkFOU0ZFUl9F UlIJCUJJVCg5KQorI2RlZmluZSBJTlRSX1dBUk5fSU5TX1NUT1BfTU9ERQkJQklUKDcpCisjZGVm aW5lIElOVFJfSUJJX1JJTkdfRlVMTAkJQklUKDYpCisjZGVmaW5lIElOVFJfVFJBTlNGRVJfQUJP UlQJCUJJVCg1KQorCisjZGVmaW5lIFJIX1JJTkdfU1RBVFVTCQkJMHgyMAorI2RlZmluZSBSSU5H X1NUQVRVU19MT0NLRUQJCUJJVCgzKQorI2RlZmluZSBSSU5HX1NUQVRVU19BQk9SVEVECQlCSVQo MikKKyNkZWZpbmUgUklOR19TVEFUVVNfUlVOTklORwkJQklUKDEpCisjZGVmaW5lIFJJTkdfU1RB VFVTX0VOQUJMRUQJCUJJVCgwKQorCisjZGVmaW5lIFJIX1JJTkdfQ09OVFJPTAkJCTB4MjQKKyNk ZWZpbmUgUklOR19DVFJMX0FCT1JUCQkJQklUKDIpCisjZGVmaW5lIFJJTkdfQ1RSTF9SVU5fU1RP UAkJQklUKDEpCisjZGVmaW5lIFJJTkdfQ1RSTF9FTkFCTEUJCUJJVCgwKQorCisjZGVmaW5lIFJI X1JJTkdfT1BFUkFUSU9OMQkJMHgyOAorI2RlZmluZSBSSU5HX09QMV9JQklfREVRX1BUUgkJR0VO TUFTSygyMywgMTYpCisjZGVmaW5lIFJJTkdfT1AxX0NSX1NXX0RFUV9QVFIJCUdFTk1BU0soMTUs IDgpCisjZGVmaW5lIFJJTkdfT1AxX0NSX0VOUV9QVFIJCUdFTk1BU0soNywgMCkKKworI2RlZmlu ZSBSSF9SSU5HX09QRVJBVElPTjIJCTB4MmMKKyNkZWZpbmUgUklOR19PUDJfSUJJX0VOUV9QVFIJ CUdFTk1BU0soMjMsIDE2KQorI2RlZmluZSBSSU5HX09QMl9DUl9ERVFfUFRSCQlHRU5NQVNLKDcs IDApCisKKyNkZWZpbmUgUkhfQ01EX1JJTkdfQkFTRV9MTwkJMHgzMAorI2RlZmluZSBSSF9DTURf UklOR19CQVNFX0hJCQkweDM0CisjZGVmaW5lIFJIX1JFU1BfUklOR19CQVNFX0xPCQkweDM4Cisj ZGVmaW5lIFJIX1JFU1BfUklOR19CQVNFX0hJCQkweDNjCisjZGVmaW5lIFJIX0lCSV9TVEFUVVNf UklOR19CQVNFX0xPCTB4NDAKKyNkZWZpbmUgUkhfSUJJX1NUQVRVU19SSU5HX0JBU0VfSEkJMHg0 NAorI2RlZmluZSBSSF9JQklfREFUQV9SSU5HX0JBU0VfTE8JMHg0OAorI2RlZmluZSBSSF9JQklf REFUQV9SSU5HX0JBU0VfSEkJMHg0YworCisjZGVmaW5lIFJIX0NNRF9SSU5HX1NHCQkJMHg1MAkv KiBSaW5nIFNjYXR0ZXIgR2F0aGVyIFN1cHBvcnQgKi8KKyNkZWZpbmUgUkhfUkVTUF9SSU5HX1NH CQkJMHg1NAorI2RlZmluZSBSSF9JQklfU1RBVFVTX1JJTkdfU0cJCTB4NTgKKyNkZWZpbmUgUkhf SUJJX0RBVEFfUklOR19TRwkJMHg1YworI2RlZmluZSBSSU5HX1NHX0JMUAkJCUJJVCgzMSkJLyog QnVmZmVyIFZzLiBMaXN0IFBvaW50ZXIgKi8KKyNkZWZpbmUgUklOR19TR19MSVNUX1NJWkUJCUdF Tk1BU0soMTUsIDApCisKKy8qCisgKiBEYXRhIEJ1ZmZlciBEZXNjcmlwdG9yIChpbiBtZW1vcnkp CisgKi8KKworI2RlZmluZSBEQVRBX0JVRl9CTFAJCQlCSVQoMzEpCS8qIEJ1ZmZlciBWcy4gTGlz dCBQb2ludGVyICovCisjZGVmaW5lIERBVEFfQlVGX0lPQwkJCUJJVCgzMCkJLyogSW50ZXJydXB0 IG9uIENvbXBsZXRpb24gKi8KKyNkZWZpbmUgREFUQV9CVUZfQkxPQ0tfU0laRQkJR0VOTUFTSygx NSwgMCkKKworCitzdHJ1Y3QgaGNpX3JoX2RhdGEgeworCXZvaWQgX19pb21lbSAqcmVnczsKKwl2 b2lkICp4ZmVyLCAqcmVzcCwgKmliaV9zdGF0dXMsICppYmlfZGF0YTsKKwlkbWFfYWRkcl90IHhm ZXJfcGh5cywgcmVzcF9waHlzLCBpYmlfc3RhdHVzX3BoeXMsIGliaV9kYXRhX3BoeXM7CisJdV9p bnQgeGZlcl9lbnRyaWVzLCBpYmlfc3RhdHVzX2VudHJpZXMsIGliaV9jaHVua3NfdG90YWw7CisJ dV9pbnQgeGZlcl9zdHJ1Y3Rfc3osIHJlc3Bfc3RydWN0X3N6LCBpYmlfc3RhdHVzX3N6LCBpYmlf Y2h1bmtfc3o7CisJdV9pbnQgZG9uZV9wdHIsIGliaV9jaHVua19wdHI7CisJc3RydWN0IGhjaV94 ZmVyICoqc3JjX3hmZXJzOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgY29tcGxldGlvbiBv cF9kb25lOworfTsKKworc3RydWN0IGhjaV9yaW5nc19kYXRhIHsKKwl1X2ludCB0b3RhbDsKKwlz dHJ1Y3QgaGNpX3JoX2RhdGEgaGVhZGVyc1tdOworfTsKKworc3RydWN0IGhjaV9kbWFfZGV2X2li aV9kYXRhIHsKKwlzdHJ1Y3QgaTNjX2dlbmVyaWNfaWJpX3Bvb2wgKnBvb2w7CisJdV9pbnQgbWF4 X2xlbjsKK307CisKKworc3RhdGljIHZvaWQgaGNpX2RtYV9jbGVhbnVwKHN0cnVjdCBpM2NfaGNp ICpoY2kpCit7CisJc3RydWN0IGhjaV9yaW5nc19kYXRhICpyaW5ncyA9IGhjaS0+aW9fZGF0YTsK KwlzdHJ1Y3QgaGNpX3JoX2RhdGEgKnJoOworCXVfaW50IGk7CisKKwlpZiAoIXJpbmdzKQorCQly ZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgcmluZ3MtPnRvdGFsOyBpKyspIHsKKwkJcmggPSAm cmluZ3MtPmhlYWRlcnNbaV07CisKKwkJcmhfcmVnX3dyaXRlKFJJTkdfQ09OVFJPTCwgMCk7CisJ CXJoX3JlZ193cml0ZShDUl9TRVRVUCwgMCk7CisJCXJoX3JlZ193cml0ZShJQklfU0VUVVAsIDAp OworCQlyaF9yZWdfd3JpdGUoSU5UUl9TSUdOQUxfRU5BQkxFLCAwKTsKKworCQlpZiAocmgtPnhm ZXIpCisJCQlkbWFfZnJlZV9jb2hlcmVudCgmaGNpLT5tYXN0ZXIuZGV2LAorCQkJCQkgIHJoLT54 ZmVyX3N0cnVjdF9zeiAqIHJoLT54ZmVyX2VudHJpZXMsCisJCQkJCSAgcmgtPnhmZXIsIHJoLT54 ZmVyX3BoeXMpOworCQlpZiAocmgtPnJlc3ApCisJCQlkbWFfZnJlZV9jb2hlcmVudCgmaGNpLT5t YXN0ZXIuZGV2LAorCQkJCQkgIHJoLT5yZXNwX3N0cnVjdF9zeiAqIHJoLT54ZmVyX2VudHJpZXMs CisJCQkJCSAgcmgtPnJlc3AsIHJoLT5yZXNwX3BoeXMpOworCQlrZnJlZShyaC0+c3JjX3hmZXJz KTsKKwkJaWYgKHJoLT5pYmlfc3RhdHVzKQorCQkJZG1hX2ZyZWVfY29oZXJlbnQoJmhjaS0+bWFz dGVyLmRldiwKKwkJCQkJICByaC0+aWJpX3N0YXR1c19zeiAqIHJoLT5pYmlfc3RhdHVzX2VudHJp ZXMsCisJCQkJCSAgcmgtPmliaV9zdGF0dXMsIHJoLT5pYmlfc3RhdHVzX3BoeXMpOworCQlpZiAo cmgtPmliaV9kYXRhX3BoeXMpCisJCQlkbWFfdW5tYXBfc2luZ2xlKCZoY2ktPm1hc3Rlci5kZXYs IHJoLT5pYmlfZGF0YV9waHlzLAorCQkJCQkgcmgtPmliaV9jaHVua19zeiAqIHJoLT5pYmlfY2h1 bmtzX3RvdGFsLAorCQkJCQkgRE1BX0ZST01fREVWSUNFKTsKKwkJa2ZyZWUocmgtPmliaV9kYXRh KTsKKwl9CisKKwlyaHNfcmVnX3dyaXRlKENPTlRST0wsIDApOworCisJa2ZyZWUocmluZ3MpOwor CWhjaS0+aW9fZGF0YSA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgaGNpX2RtYV9pbml0KHN0cnVj dCBpM2NfaGNpICpoY2kpCit7CisJc3RydWN0IGhjaV9yaW5nc19kYXRhICpyaW5nczsKKwlzdHJ1 Y3QgaGNpX3JoX2RhdGEgKnJoOworCXUzMiByZWd2YWw7CisJdV9pbnQgaSwgbnJfcmluZ3MsIHhm ZXJzX3N6LCByZXNwc19zejsKKwl1X2ludCBpYmlfc3RhdHVzX3Jpbmdfc3osIGliaV9kYXRhX3Jp bmdfc3o7CisJaW50IHJldDsKKworCXJlZ3ZhbCA9IHJoc19yZWdfcmVhZChDT05UUk9MKTsKKwlu cl9yaW5ncyA9IEZJRUxEX0dFVChNQVhfSEVBREVSX0NPVU5UX0NBUCwgcmVndmFsKTsKKwlJTkZP KCIlZCBETUEgcmluZ3MgYXZhaWxhYmxlIiwgbnJfcmluZ3MpOworCWlmICh1bmxpa2VseShucl9y aW5ncyA+IDgpKSB7CisJCUVSUigibnVtYmVyIG9mIHJpbmdzIHNob3VsZCBiZSA8PSA4Iik7CisJ CW5yX3JpbmdzID0gODsKKwl9CisJaWYgKG5yX3JpbmdzID4gWEZFUl9SSU5HUykKKwkJbnJfcmlu Z3MgPSBYRkVSX1JJTkdTOworCXJpbmdzID0ga3phbGxvYyhzaXplb2YoKnJpbmdzKSArIG5yX3Jp bmdzICogc2l6ZW9mKCpyaCksIEdGUF9LRVJORUwpOworCWlmICghcmluZ3MpCisJCXJldHVybiAt RU5PTUVNOworCWhjaS0+aW9fZGF0YSA9IHJpbmdzOworCXJpbmdzLT50b3RhbCA9IG5yX3Jpbmdz OworCisJZm9yIChpID0gMDsgaSA8IHJpbmdzLT50b3RhbDsgaSsrKSB7CisJCXUzMiBvZmZzZXQg PSByaHNfcmVnX3JlYWQoUkhuX09GRlNFVChpKSk7CisKKwkJSU5GTygiUmluZyAlZCBhdCBvZmZz ZXQgJSN4IiwgaSwgb2Zmc2V0KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJaWYgKCFvZmZzZXQpCisJ CQlnb3RvIGVycl9vdXQ7CisJCXJoID0gJnJpbmdzLT5oZWFkZXJzW2ldOworCQlyaC0+cmVncyA9 IGhjaS0+YmFzZV9yZWdzICsgb2Zmc2V0OworCQlzcGluX2xvY2tfaW5pdCgmcmgtPmxvY2spOwor CQlpbml0X2NvbXBsZXRpb24oJnJoLT5vcF9kb25lKTsKKworCQlyaC0+eGZlcl9lbnRyaWVzID0g WEZFUl9SSU5HX0VOVFJJRVM7CisKKwkJcmVndmFsID0gcmhfcmVnX3JlYWQoQ1JfU0VUVVApOwor CQlyaC0+eGZlcl9zdHJ1Y3Rfc3ogPSBGSUVMRF9HRVQoQ1JfWEZFUl9TVFJVQ1RfU0laRSwgcmVn dmFsKTsKKwkJcmgtPnJlc3Bfc3RydWN0X3N6ID0gRklFTERfR0VUKENSX1JFU1BfU1RSVUNUX1NJ WkUsIHJlZ3ZhbCk7CisJCURCRygieGZlcl9zdHJ1Y3Rfc3ogPSAlZCwgcmVzcF9zdHJ1Y3Rfc3og PSAlZCIsCisJCSAgICByaC0+eGZlcl9zdHJ1Y3Rfc3osIHJoLT5yZXNwX3N0cnVjdF9zeik7CisJ CXhmZXJzX3N6ID0gcmgtPnhmZXJfc3RydWN0X3N6ICogcmgtPnhmZXJfZW50cmllczsKKwkJcmVz cHNfc3ogPSByaC0+cmVzcF9zdHJ1Y3Rfc3ogKiByaC0+eGZlcl9lbnRyaWVzOworCisJCXJoLT54 ZmVyID0gZG1hX2FsbG9jX2NvaGVyZW50KCZoY2ktPm1hc3Rlci5kZXYsIHhmZXJzX3N6LAorCQkJ CQkgICAgICAmcmgtPnhmZXJfcGh5cywgR0ZQX0tFUk5FTCk7CisJCXJoLT5yZXNwID0gZG1hX2Fs bG9jX2NvaGVyZW50KCZoY2ktPm1hc3Rlci5kZXYsIHJlc3BzX3N6LAorCQkJCQkgICAgICAmcmgt PnJlc3BfcGh5cywgR0ZQX0tFUk5FTCk7CisJCXJoLT5zcmNfeGZlcnMgPQorCQkJa21hbGxvY19h cnJheShyaC0+eGZlcl9lbnRyaWVzLCBzaXplb2YoKnJoLT5zcmNfeGZlcnMpLAorCQkJCSAgICAg IEdGUF9LRVJORUwpOworCQlyZXQgPSAtRU5PTUVNOworCQlpZiAoIXJoLT54ZmVyIHx8ICFyaC0+ cmVzcCB8fCAhcmgtPnNyY194ZmVycykKKwkJCWdvdG8gZXJyX291dDsKKworCQlyaF9yZWdfd3Jp dGUoQ01EX1JJTkdfQkFTRV9MTywgcmgtPnhmZXJfcGh5cyk7CisJCXJoX3JlZ193cml0ZShDTURf UklOR19CQVNFX0hJLCByaC0+eGZlcl9waHlzID4+IDMyKTsKKwkJcmhfcmVnX3dyaXRlKFJFU1Bf UklOR19CQVNFX0xPLCByaC0+cmVzcF9waHlzKTsKKwkJcmhfcmVnX3dyaXRlKFJFU1BfUklOR19C QVNFX0hJLCByaC0+cmVzcF9waHlzID4+IDMyKTsKKworCQlyZWd2YWwgPSBGSUVMRF9QUkVQKENS X1JJTkdfU0laRSwgcmgtPnhmZXJfZW50cmllcyk7CisJCXJoX3JlZ193cml0ZShDUl9TRVRVUCwg cmVndmFsKTsKKworCQlyaF9yZWdfd3JpdGUoSU5UUl9TVEFUVVNfRU5BQkxFLCAweGZmZmZmZmZm KTsKKwkJcmhfcmVnX3dyaXRlKElOVFJfU0lHTkFMX0VOQUJMRSwgSU5UUl9JQklfUkVBRFkgfAor CQkJCQkJIElOVFJfVFJBTlNGRVJfQ09NUExFVElPTiB8CisJCQkJCQkgSU5UUl9SSU5HX09QIHwK KwkJCQkJCSBJTlRSX1RSQU5TRkVSX0VSUiB8CisJCQkJCQkgSU5UUl9XQVJOX0lOU19TVE9QX01P REUgfAorCQkJCQkJIElOVFJfSUJJX1JJTkdfRlVMTCB8CisJCQkJCQkgSU5UUl9UUkFOU0ZFUl9B Qk9SVCk7CisKKwkJLyogSUJJcyAqLworCisJCWlmIChpID49IElCSV9SSU5HUykKKwkJCWdvdG8g cmluZ19yZWFkeTsKKworCQlyZWd2YWwgPSByaF9yZWdfcmVhZChJQklfU0VUVVApOworCQlyaC0+ aWJpX3N0YXR1c19zeiA9IEZJRUxEX0dFVChJQklfU1RBVFVTX1NUUlVDVF9TSVpFLCByZWd2YWwp OworCQlyaC0+aWJpX3N0YXR1c19lbnRyaWVzID0gSUJJX1NUQVRVU19SSU5HX0VOVFJJRVM7CisJ CXJoLT5pYmlfY2h1bmtzX3RvdGFsID0gSUJJX0NIVU5LX1BPT0xfU0laRTsKKworCQlyaC0+aWJp X2NodW5rX3N6ID0gZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoKTsKKwkJcmgtPmliaV9jaHVua19z eiAqPSBJQklfQ0hVTktfQ0FDSEVMSU5FUzsKKwkJQlVHX09OKHJoLT5pYmlfY2h1bmtfc3ogPiAy NTYpOworCisJCWliaV9zdGF0dXNfcmluZ19zeiA9IHJoLT5pYmlfc3RhdHVzX3N6ICogcmgtPmli aV9zdGF0dXNfZW50cmllczsKKwkJaWJpX2RhdGFfcmluZ19zeiA9IHJoLT5pYmlfY2h1bmtfc3og KiByaC0+aWJpX2NodW5rc190b3RhbDsKKworCQlyaC0+aWJpX3N0YXR1cyA9CisJCQlkbWFfYWxs b2NfY29oZXJlbnQoJmhjaS0+bWFzdGVyLmRldiwgaWJpX3N0YXR1c19yaW5nX3N6LAorCQkJCQkg ICAmcmgtPmliaV9zdGF0dXNfcGh5cywgR0ZQX0tFUk5FTCk7CisJCXJoLT5pYmlfZGF0YSA9IGtt YWxsb2MoaWJpX2RhdGFfcmluZ19zeiwgR0ZQX0tFUk5FTCk7CisJCXJldCA9IC1FTk9NRU07CisJ CWlmICghcmgtPmliaV9zdGF0dXMgfHwgIXJoLT5pYmlfZGF0YSkKKwkJCWdvdG8gZXJyX291dDsK KwkJcmgtPmliaV9kYXRhX3BoeXMgPQorCQkJZG1hX21hcF9zaW5nbGUoJmhjaS0+bWFzdGVyLmRl diwgcmgtPmliaV9kYXRhLAorCQkJCSAgICAgICBpYmlfZGF0YV9yaW5nX3N6LCBETUFfRlJPTV9E RVZJQ0UpOworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJmhjaS0+bWFzdGVyLmRldiwgcmgtPmli aV9kYXRhX3BoeXMpKSB7CisJCQlyaC0+aWJpX2RhdGFfcGh5cyA9IDA7CisJCQlyZXQgPSAtRU5P TUVNOworCQkJZ290byBlcnJfb3V0OworCQl9CisKKwkJcmVndmFsID0gRklFTERfUFJFUChJQklf U1RBVFVTX1JJTkdfU0laRSwKKwkJCQkgICAgcmgtPmliaV9zdGF0dXNfZW50cmllcykgfAorCQkJ IEZJRUxEX1BSRVAoSUJJX0RBVEFfQ0hVTktfU0laRSwKKwkJCQkgICAgaWxvZzIocmgtPmliaV9j aHVua19zeikgLSAyKSB8CisJCQkgRklFTERfUFJFUChJQklfREFUQV9DSFVOS19DT1VOVCwKKwkJ CQkgICAgcmgtPmliaV9jaHVua3NfdG90YWwpOworCQlyaF9yZWdfd3JpdGUoSUJJX1NFVFVQLCBy ZWd2YWwpOworCisJCXJlZ3ZhbCA9IHJoX3JlZ19yZWFkKElOVFJfU0lHTkFMX0VOQUJMRSk7CisJ CXJlZ3ZhbCB8PSBJTlRSX0lCSV9SRUFEWTsKKwkJcmhfcmVnX3dyaXRlKElOVFJfU0lHTkFMX0VO QUJMRSwgcmVndmFsKTsKKworcmluZ19yZWFkeToKKwkJcmhfcmVnX3dyaXRlKFJJTkdfQ09OVFJP TCwgUklOR19DVFJMX0VOQUJMRSk7CisJfQorCisJcmVndmFsID0gRklFTERfUFJFUChNQVhfSEVB REVSX0NPVU5ULCByaW5ncy0+dG90YWwpOworCXJoc19yZWdfd3JpdGUoQ09OVFJPTCwgcmVndmFs KTsKKwlyZXR1cm4gMDsKKworZXJyX291dDoKKwloY2lfZG1hX2NsZWFudXAoaGNpKTsKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBoY2lfZG1hX3VubWFwX3hmZXIoc3RydWN0IGkzY19o Y2kgKmhjaSwKKwkJCSAgICAgICBzdHJ1Y3QgaGNpX3hmZXIgKnhmZXJfbGlzdCwgdV9pbnQgbikK K3sKKwlzdHJ1Y3QgaGNpX3hmZXIgKnhmZXI7CisJdV9pbnQgaTsKKworCWZvciAoaSA9IDA7IGkg PCBuOyBpKyspIHsKKwkJeGZlciA9IHhmZXJfbGlzdCArIGk7CisJCWRtYV91bm1hcF9zaW5nbGUo JmhjaS0+bWFzdGVyLmRldiwKKwkJCQkgeGZlci0+ZGF0YV9waHlzLCB4ZmVyLT5kYXRhX2xlbiwK KwkJCQkgeGZlci0+cm53ID8gRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRSk7CisJfQor fQorCitzdGF0aWMgaW50IGhjaV9kbWFfcXVldWVfeGZlcihzdHJ1Y3QgaTNjX2hjaSAqaGNpLAor CQkJICAgICAgc3RydWN0IGhjaV94ZmVyICp4ZmVyX2xpc3QsIGludCBuKQoreworCXN0cnVjdCBo Y2lfcmluZ3NfZGF0YSAqcmluZ3MgPSBoY2ktPmlvX2RhdGE7CisJc3RydWN0IGhjaV9yaF9kYXRh ICpyaDsKKwl1X2ludCBpLCByaW5nLCBlbnF1ZXVlX3B0cjsKKwl1MzIgb3AxX3ZhbCwgb3AyX3Zh bDsKKworCS8qIEZvciBub3cgd2Ugb25seSB1c2UgcmluZyAwICovCisJcmluZyA9IDA7CisJcmgg PSAmcmluZ3MtPmhlYWRlcnNbcmluZ107CisKKwlvcDFfdmFsID0gcmhfcmVnX3JlYWQoUklOR19P UEVSQVRJT04xKTsKKwllbnF1ZXVlX3B0ciA9IEZJRUxEX0dFVChSSU5HX09QMV9DUl9FTlFfUFRS LCBvcDFfdmFsKTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCXN0cnVjdCBoY2lfeGZl ciAqeGZlciA9IHhmZXJfbGlzdCArIGk7CisJCXUzMiAqcmluZ19kYXRhID0gcmgtPnhmZXIgKyBy aC0+eGZlcl9zdHJ1Y3Rfc3ogKiBlbnF1ZXVlX3B0cjsKKworCQkvKiBzdG9yZSBjbWQgZGVzY3Jp cHRvciAqLworCQkqcmluZ19kYXRhKysgPSB4ZmVyLT5jbWRfZGVzY1swXTsKKwkJKnJpbmdfZGF0 YSsrID0geGZlci0+Y21kX2Rlc2NbMV07CisJCWlmIChoY2ktPmNtZCA9PSAmaTNjX2hjaV9jbWRf djIpIHsKKwkJCSpyaW5nX2RhdGErKyA9IHhmZXItPmNtZF9kZXNjWzJdOworCQkJKnJpbmdfZGF0 YSsrID0geGZlci0+Y21kX2Rlc2NbM107CisJCX0KKworCQkvKiBmaXJzdCB3b3JkIG9mIERhdGEg QnVmZmVyIERlc2NyaXB0b3IgU3RydWN0dXJlICovCisJCWlmICgheGZlci0+ZGF0YSkKKwkJCXhm ZXItPmRhdGFfbGVuID0gMDsKKwkJKnJpbmdfZGF0YSsrID0KKwkJCUZJRUxEX1BSRVAoREFUQV9C VUZfQkxPQ0tfU0laRSwgeGZlci0+ZGF0YV9sZW4pIHwKKwkJCSgoaSA9PSBuIC0gMSkgPyBEQVRB X0JVRl9JT0MgOiAwKTsKKworCQkvKiAybmQgYW5kIDNyZCB3b3JkcyBvZiBEYXRhIEJ1ZmZlciBE ZXNjcmlwdG9yIFN0cnVjdHVyZSAqLworCQlpZiAoeGZlci0+ZGF0YSkgeworCQkJeGZlci0+ZGF0 YV9waHlzID0KKwkJCQlkbWFfbWFwX3NpbmdsZSgmaGNpLT5tYXN0ZXIuZGV2LAorCQkJCQkgICAg ICAgeGZlci0+ZGF0YSwKKwkJCQkJICAgICAgIHhmZXItPmRhdGFfbGVuLAorCQkJCQkgICAgICAg eGZlci0+cm53ID8KKwkJCQkJCSAgRE1BX0ZST01fREVWSUNFIDoKKwkJCQkJCSAgRE1BX1RPX0RF VklDRSk7CisJCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJmhjaS0+bWFzdGVyLmRldiwKKwkJCQkJ ICAgICAgeGZlci0+ZGF0YV9waHlzKSkgeworCQkJCWhjaV9kbWFfdW5tYXBfeGZlcihoY2ksIHhm ZXJfbGlzdCwgaSk7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCQkqcmluZ19kYXRhKysg PSB4ZmVyLT5kYXRhX3BoeXM7CisJCQkqcmluZ19kYXRhKysgPSB4ZmVyLT5kYXRhX3BoeXMgPj4g MzI7CisJCX0gZWxzZSB7CisJCQkqcmluZ19kYXRhKysgPSAwOworCQkJKnJpbmdfZGF0YSsrID0g MDsKKwkJfQorCisJCS8qIHJlbWVtYmVyIGNvcnJlc3BvbmRpbmcgeGZlciBzdHJ1Y3QgKi8KKwkJ cmgtPnNyY194ZmVyc1tlbnF1ZXVlX3B0cl0gPSB4ZmVyOworCQkvKiByZW1lbWJlciBjb3JyZXNw b25kaW5nIHJpbmcvZW50cnkgZm9yIHRoaXMgeGZlciBzdHJ1Y3R1cmUgKi8KKwkJeGZlci0+cmlu ZyA9IHJpbmc7CisJCXhmZXItPnJpbmdfZW50cnkgPSBlbnF1ZXVlX3B0cjsKKworCQllbnF1ZXVl X3B0ciA9IChlbnF1ZXVlX3B0ciArIDEpICUgcmgtPnhmZXJfZW50cmllczsKKworCQkvKgorCQkg KiBXZSBtYXkgdXBkYXRlIHRoZSBoYXJkd2FyZSB2aWV3IG9mIHRoZSBlbnF1ZXVlIHBvaW50ZXIK KwkJICogb25seSBpZiB3ZSBkaWRuJ3QgcmVhY2ggaXRzIGRlcXVldWUgcG9pbnRlci4KKwkJICov CisJCW9wMl92YWwgPSByaF9yZWdfcmVhZChSSU5HX09QRVJBVElPTjIpOworCQlpZiAoZW5xdWV1 ZV9wdHIgPT0gRklFTERfR0VUKFJJTkdfT1AyX0NSX0RFUV9QVFIsIG9wMl92YWwpKSB7CisJCQkv KiB0aGUgcmluZyBpcyBmdWxsICovCisJCQloY2lfZG1hX3VubWFwX3hmZXIoaGNpLCB4ZmVyX2xp c3QsIGkgKyAxKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisKKwkvKiB0YWtlIGNhcmUg dG8gdXBkYXRlIHRoZSBoYXJkd2FyZSBlbnF1ZXVlIHBvaW50ZXIgYXRvbWljYWxseSAqLworCXNw aW5fbG9ja19pcnEoJnJoLT5sb2NrKTsKKwlvcDFfdmFsID0gcmhfcmVnX3JlYWQoUklOR19PUEVS QVRJT04xKTsKKwlvcDFfdmFsICY9IH5SSU5HX09QMV9DUl9FTlFfUFRSOworCW9wMV92YWwgfD0g RklFTERfUFJFUChSSU5HX09QMV9DUl9FTlFfUFRSLCBlbnF1ZXVlX3B0cik7CisJcmhfcmVnX3dy aXRlKFJJTkdfT1BFUkFUSU9OMSwgb3AxX3ZhbCk7CisJc3Bpbl91bmxvY2tfaXJxKCZyaC0+bG9j ayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgaGNpX2RtYV9kZXF1ZXVlX3hmZXIo c3RydWN0IGkzY19oY2kgKmhjaSwKKwkJCQkgc3RydWN0IGhjaV94ZmVyICp4ZmVyX2xpc3QsIGlu dCBuKQoreworCXN0cnVjdCBoY2lfcmluZ3NfZGF0YSAqcmluZ3MgPSBoY2ktPmlvX2RhdGE7CisJ c3RydWN0IGhjaV9yaF9kYXRhICpyaCA9ICZyaW5ncy0+aGVhZGVyc1t4ZmVyX2xpc3RbMF0ucmlu Z107CisJdV9pbnQgaTsKKwlib29sIGRpZF91bnF1ZXVlID0gZmFsc2U7CisKKwkvKiBzdG9wIHRo ZSByaW5nICovCisJcmhfcmVnX3dyaXRlKFJJTkdfQ09OVFJPTCwgUklOR19DVFJMX0FCT1JUKTsK KwlpZiAod2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZyaC0+b3BfZG9uZSwgSFopID09IDAp IHsKKwkJLyoKKwkJICogV2UncmUgZGVlcCBpbiBpdCBpZiBldmVyIHRoaXMgY29uZGl0aW9uIGlz IGV2ZXIgbWV0LgorCQkgKiBIYXJkd2FyZSBtaWdodCBzdGlsbCBiZSB3cml0aW5nIHRvIG1lbW9y eSwgZXRjLgorCQkgKi8KKwkJRVJSKCJ1bmFibGUgdG8gYWJvcnQgdGhlIHJpbmciKTsKKwkJQlVH KCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlzdHJ1Y3QgaGNpX3hmZXIg KnhmZXIgPSB4ZmVyX2xpc3QgKyBpOworCQlpbnQgaWR4ID0geGZlci0+cmluZ19lbnRyeTsKKwor CQkvKgorCQkgKiBBdCB0aGUgdGltZSB0aGUgYWJvcnQgaGFwcGVuZWQsIHRoZSB4ZmVyIG1pZ2h0 IGhhdmUKKwkJICogY29tcGxldGVkIGFscmVhZHkuIElmIG5vdCB0aGVuIHJlcGxhY2UgY29ycmVz cG9uZGluZworCQkgKiBkZXNjcmlwdG9yIGVudHJpZXMgd2l0aCBhIG5vLW9wLgorCQkgKi8KKwkJ aWYgKGlkeCA+PSAwKSB7CisJCQl1MzIgKnJpbmdfZGF0YSA9IHJoLT54ZmVyICsgcmgtPnhmZXJf c3RydWN0X3N6ICogaWR4OworCisJCQkvKiBzdG9yZSBuby1vcCBjbWQgZGVzY3JpcHRvciAqLwor CQkJKnJpbmdfZGF0YSsrID0gRklFTERfUFJFUChDTURfMF9BVFRSLCAweDcpOworCQkJKnJpbmdf ZGF0YSsrID0gMDsKKwkJCWlmIChoY2ktPmNtZCA9PSAmaTNjX2hjaV9jbWRfdjIpIHsKKwkJCQkq cmluZ19kYXRhKysgPSAwOworCQkJCSpyaW5nX2RhdGErKyA9IDA7CisJCQl9CisKKwkJCS8qIGRp c2Fzc29jaWF0ZSB0aGlzIHhmZXIgc3RydWN0ICovCisJCQlyaC0+c3JjX3hmZXJzW2lkeF0gPSBO VUxMOworCisJCQkvKiBhbmQgdW5tYXAgaXQgKi8KKwkJCWhjaV9kbWFfdW5tYXBfeGZlcihoY2ks IHhmZXIsIDEpOworCisJCQlkaWRfdW5xdWV1ZSA9IHRydWU7CisJCX0KKwl9CisKKwkvKiByZXN0 YXJ0IHRoZSByaW5nICovCisJcmhfcmVnX3dyaXRlKFJJTkdfQ09OVFJPTCwgUklOR19DVFJMX0VO QUJMRSk7CisKKwlyZXR1cm4gZGlkX3VucXVldWU7Cit9CisKK3N0YXRpYyB2b2lkIGhjaV9kbWFf eGZlcl9kb25lKHN0cnVjdCBpM2NfaGNpICpoY2ksIHN0cnVjdCBoY2lfcmhfZGF0YSAqcmgpCit7 CisJdTMyIG9wMV92YWwsIG9wMl92YWwsIHJlc3AsICpyaW5nX3Jlc3A7CisJdV9pbnQgdGlkLCBk b25lX3B0ciA9IHJoLT5kb25lX3B0cjsKKwlzdHJ1Y3QgaGNpX3hmZXIgKnhmZXI7CisKKwlmb3Ig KDs7KSB7CisJCW9wMl92YWwgPSByaF9yZWdfcmVhZChSSU5HX09QRVJBVElPTjIpOworCQlpZiAo ZG9uZV9wdHIgPT0gRklFTERfR0VUKFJJTkdfT1AyX0NSX0RFUV9QVFIsIG9wMl92YWwpKQorCQkJ YnJlYWs7CisKKwkJcmluZ19yZXNwID0gcmgtPnJlc3AgKyByaC0+cmVzcF9zdHJ1Y3Rfc3ogKiBk b25lX3B0cjsKKwkJcmVzcCA9ICpyaW5nX3Jlc3A7CisJCXRpZCA9IFJFU1BfVElEKHJlc3ApOwor CQlEQkcoInJlc3AgPSAweCUwOHgiLCByZXNwKTsKKworCQl4ZmVyID0gcmgtPnNyY194ZmVyc1tk b25lX3B0cl07CisJCWlmICgheGZlcikgeworCQkJREJHKCJvcnBoYW5lZCByaW5nIGVudHJ5Iik7 CisJCX0gZWxzZSB7CisJCQloY2lfZG1hX3VubWFwX3hmZXIoaGNpLCB4ZmVyLCAxKTsKKwkJCXhm ZXItPnJpbmdfZW50cnkgPSAtMTsKKwkJCXhmZXItPnJlc3BvbnNlID0gcmVzcDsKKwkJCWlmICh0 aWQgIT0geGZlci0+Y21kX3RpZCkgeworCQkJCUVSUigicmVzcG9uc2UgdGlkPSVkIHdoZW4gZXhw ZWN0aW5nICVkIiwKKwkJCQkgICAgdGlkLCB4ZmVyLT5jbWRfdGlkKTsKKwkJCQkvKiBUT0RPOiBk byBzb21ldGhpbmcgYWJvdXQgaXQ/ICovCisJCQl9CisJCQlpZiAoeGZlci0+Y29tcGxldGlvbikK KwkJCQljb21wbGV0ZSh4ZmVyLT5jb21wbGV0aW9uKTsKKwkJfQorCisJCWRvbmVfcHRyID0gKGRv bmVfcHRyICsgMSkgJSByaC0+eGZlcl9lbnRyaWVzOworCQlyaC0+ZG9uZV9wdHIgPSBkb25lX3B0 cjsKKwl9CisKKwkvKiB0YWtlIGNhcmUgdG8gdXBkYXRlIHRoZSBzb2Z0d2FyZSBkZXF1ZXVlIHBv aW50ZXIgYXRvbWljYWxseSAqLworCXNwaW5fbG9jaygmcmgtPmxvY2spOworCW9wMV92YWwgPSBy aF9yZWdfcmVhZChSSU5HX09QRVJBVElPTjEpOworCW9wMV92YWwgJj0gflJJTkdfT1AxX0NSX1NX X0RFUV9QVFI7CisJb3AxX3ZhbCB8PSBGSUVMRF9QUkVQKFJJTkdfT1AxX0NSX1NXX0RFUV9QVFIs IGRvbmVfcHRyKTsKKwlyaF9yZWdfd3JpdGUoUklOR19PUEVSQVRJT04xLCBvcDFfdmFsKTsKKwlz cGluX3VubG9jaygmcmgtPmxvY2spOworfQorCitzdGF0aWMgaW50IGhjaV9kbWFfcmVxdWVzdF9p Ymkoc3RydWN0IGkzY19oY2kgKmhjaSwgc3RydWN0IGkzY19kZXZfZGVzYyAqZGV2LAorCQkJICAg ICAgIGNvbnN0IHN0cnVjdCBpM2NfaWJpX3NldHVwICpyZXEpCit7CisJc3RydWN0IGkzY19oY2lf ZGV2X2RhdGEgKmRldl9kYXRhID0gaTNjX2Rldl9nZXRfbWFzdGVyX2RhdGEoZGV2KTsKKwlzdHJ1 Y3QgaTNjX2dlbmVyaWNfaWJpX3Bvb2wgKnBvb2w7CisJc3RydWN0IGhjaV9kbWFfZGV2X2liaV9k YXRhICpkZXZfaWJpOworCisJZGV2X2liaSA9IGttYWxsb2Moc2l6ZW9mKCpkZXZfaWJpKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFkZXZfaWJpKQorCQlyZXR1cm4gLUVOT01FTTsKKwlwb29sID0gaTNj X2dlbmVyaWNfaWJpX2FsbG9jX3Bvb2woZGV2LCByZXEpOworCWlmIChJU19FUlIocG9vbCkpIHsK KwkJa2ZyZWUoZGV2X2liaSk7CisJCXJldHVybiBQVFJfRVJSKHBvb2wpOworCX0KKwlkZXZfaWJp LT5wb29sID0gcG9vbDsKKwlkZXZfaWJpLT5tYXhfbGVuID0gcmVxLT5tYXhfcGF5bG9hZF9sZW47 CisJZGV2X2RhdGEtPmliaV9kYXRhID0gZGV2X2liaTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQgaGNpX2RtYV9mcmVlX2liaShzdHJ1Y3QgaTNjX2hjaSAqaGNpLCBzdHJ1Y3QgaTNjX2Rl dl9kZXNjICpkZXYpCit7CisJc3RydWN0IGkzY19oY2lfZGV2X2RhdGEgKmRldl9kYXRhID0gaTNj X2Rldl9nZXRfbWFzdGVyX2RhdGEoZGV2KTsKKwlzdHJ1Y3QgaGNpX2RtYV9kZXZfaWJpX2RhdGEg KmRldl9pYmkgPSBkZXZfZGF0YS0+aWJpX2RhdGE7CisKKwlkZXZfZGF0YS0+aWJpX2RhdGEgPSBO VUxMOworCWkzY19nZW5lcmljX2liaV9mcmVlX3Bvb2woZGV2X2liaS0+cG9vbCk7CisJa2ZyZWUo ZGV2X2liaSk7Cit9CisKK3N0YXRpYyB2b2lkIGhjaV9kbWFfcmVjeWNsZV9pYmlfc2xvdChzdHJ1 Y3QgaTNjX2hjaSAqaGNpLAorCQkJCSAgICAgc3RydWN0IGkzY19kZXZfZGVzYyAqZGV2LAorCQkJ CSAgICAgc3RydWN0IGkzY19pYmlfc2xvdCAqc2xvdCkKK3sKKwlzdHJ1Y3QgaTNjX2hjaV9kZXZf ZGF0YSAqZGV2X2RhdGEgPSBpM2NfZGV2X2dldF9tYXN0ZXJfZGF0YShkZXYpOworCXN0cnVjdCBo Y2lfZG1hX2Rldl9pYmlfZGF0YSAqZGV2X2liaSA9IGRldl9kYXRhLT5pYmlfZGF0YTsKKworCWkz Y19nZW5lcmljX2liaV9yZWN5Y2xlX3Nsb3QoZGV2X2liaS0+cG9vbCwgc2xvdCk7Cit9CisKK3N0 YXRpYyB2b2lkIGhjaV9kbWFfcHJvY2Vzc19pYmkoc3RydWN0IGkzY19oY2kgKmhjaSwgc3RydWN0 IGhjaV9yaF9kYXRhICpyaCkKK3sKKwlzdHJ1Y3QgaTNjX2Rldl9kZXNjICpkZXY7CisJc3RydWN0 IGkzY19oY2lfZGV2X2RhdGEgKmRldl9kYXRhOworCXN0cnVjdCBoY2lfZG1hX2Rldl9pYmlfZGF0 YSAqZGV2X2liaTsKKwlzdHJ1Y3QgaTNjX2liaV9zbG90ICpzbG90OworCXUzMiBvcDFfdmFsLCBv cDJfdmFsLCBpYmlfc3RhdHVzX2Vycm9yOworCXVfaW50IHB0ciwgZW5xX3B0ciwgZGVxX3B0cjsK Kwl1X2ludCBpYmlfc2l6ZSwgaWJpX2NodW5rcywgaWJpX2RhdGFfb2Zmc2V0LCBmaXJzdF9wYXJ0 OworCWludCBpYmlfYWRkciwgbGFzdF9wdHI7CisJdm9pZCAqcmluZ19pYmlfZGF0YTsKKwlkbWFf YWRkcl90IHJpbmdfaWJpX2RhdGFfcGh5czsKKworCW9wMV92YWwgPSByaF9yZWdfcmVhZChSSU5H X09QRVJBVElPTjEpOworCWRlcV9wdHIgPSBGSUVMRF9HRVQoUklOR19PUDFfSUJJX0RFUV9QVFIs IG9wMV92YWwpOworCisJb3AyX3ZhbCA9IHJoX3JlZ19yZWFkKFJJTkdfT1BFUkFUSU9OMik7CisJ ZW5xX3B0ciA9IEZJRUxEX0dFVChSSU5HX09QMl9JQklfRU5RX1BUUiwgb3AyX3ZhbCk7CisKKwlp Ymlfc3RhdHVzX2Vycm9yID0gMDsKKwlpYmlfYWRkciA9IC0xOworCWliaV9jaHVua3MgPSAwOwor CWliaV9zaXplID0gMDsKKwlsYXN0X3B0ciA9IC0xOworCisJLyogbGV0J3MgZmluZCBhbGwgd2Ug Y2FuIGFib3V0IHRoaXMgSUJJICovCisJZm9yIChwdHIgPSBkZXFfcHRyOyBwdHIgIT0gZW5xX3B0 cjsKKwkgICAgIHB0ciA9IChwdHIgKyAxKSAlIHJoLT5pYmlfc3RhdHVzX2VudHJpZXMpIHsKKwkJ dTMyIGliaV9zdGF0dXMsICpyaW5nX2liaV9zdGF0dXM7CisJCXVfaW50IGNodW5rczsKKworCQly aW5nX2liaV9zdGF0dXMgPSByaC0+aWJpX3N0YXR1cyArIHJoLT5pYmlfc3RhdHVzX3N6ICogcHRy OworCQlpYmlfc3RhdHVzID0gKnJpbmdfaWJpX3N0YXR1czsKKwkJREJHKCJzdGF0dXMgPSAlI3gi LCBpYmlfc3RhdHVzKTsKKworCQlpZiAoaWJpX3N0YXR1c19lcnJvcikgeworCQkJLyogd2Ugbm8g bG9uZ2VyIGNhcmUgKi8KKwkJfSBlbHNlIGlmIChpYmlfc3RhdHVzICYgSUJJX0VSUk9SKSB7CisJ CQlpYmlfc3RhdHVzX2Vycm9yID0gaWJpX3N0YXR1czsKKwkJfSBlbHNlIGlmIChpYmlfYWRkciA9 PSAgLTEpIHsKKwkJCWliaV9hZGRyID0gRklFTERfR0VUKElCSV9TTEFWRV9BRERSLCBpYmlfc3Rh dHVzKTsKKwkJfSBlbHNlIGlmIChpYmlfYWRkciAhPSBGSUVMRF9HRVQoSUJJX1NMQVZFX0FERFIs IGliaV9zdGF0dXMpKSB7CisJCQkvKiB0aGUgYWRkcmVzcyBjaGFuZ2VkIHVuZXhwZWN0ZWRseSAq LworCQkJaWJpX3N0YXR1c19lcnJvciA9IGliaV9zdGF0dXM7CisJCX0KKworCQljaHVua3MgPSBG SUVMRF9HRVQoSUJJX0NIVU5LUywgaWJpX3N0YXR1cyk7CisJCWliaV9jaHVua3MgKz0gY2h1bmtz OworCQlpZiAoIShpYmlfc3RhdHVzICYgSUJJX0xBU1RfU1RBVFVTKSkgeworCQkJaWJpX3NpemUg Kz0gY2h1bmtzICogcmgtPmliaV9jaHVua19zejsKKwkJfSBlbHNlIHsKKwkJCWliaV9zaXplICs9 IEZJRUxEX0dFVChJQklfREFUQV9MRU5HVEgsIGliaV9zdGF0dXMpOworCQkJbGFzdF9wdHIgPSBw dHI7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIHZhbGlkYXRlIHdoYXQgd2UndmUgZ290ICov CisKKwlpZiAobGFzdF9wdHIgPT0gLTEpIHsKKwkJLyogdGhpcyBJQkkgc2VxdWVuY2UgaXMgbm90 IHlldCBjb21wbGV0ZSAqLworCQlEQkcoIm5vIExBU1RfU1RBVFVTIGF2YWlsYWJsZSAoZT0lZCBk PSVkKSIsIGVucV9wdHIsIGRlcV9wdHIpOworCQlyZXR1cm47CisJfQorCWRlcV9wdHIgPSBsYXN0 X3B0ciArIDE7CisJZGVxX3B0ciAlPSByaC0+aWJpX3N0YXR1c19lbnRyaWVzOworCisJaWYgKGli aV9zdGF0dXNfZXJyb3IpIHsKKwkJRVJSKCJJQkkgZXJyb3IgZnJvbSAlI3giLCBpYmlfYWRkcik7 CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBkZXRlcm1pbmUgd2hvIHRoaXMgaXMgZm9yICovCisJ ZGV2ID0gaTNjX2hjaV9hZGRyX3RvX2RldihoY2ksIGliaV9hZGRyKTsKKwlpZiAoIWRldikgewor CQlFUlIoIklCSSBmb3IgdW5rbm93biBkZXZpY2UgJSN4IiwgaWJpX2FkZHIpOworCQlnb3RvIGRv bmU7CisJfQorCisJZGV2X2RhdGEgPSBpM2NfZGV2X2dldF9tYXN0ZXJfZGF0YShkZXYpOworCWRl dl9pYmkgPSBkZXZfZGF0YS0+aWJpX2RhdGE7CisJaWYgKGliaV9zaXplID4gZGV2X2liaS0+bWF4 X2xlbikgeworCQlFUlIoIklCSSBwYXlsb2FkIHRvbyBiaWcgKCVkID4gJWQpIiwKKwkJICAgIGli aV9zaXplLCBkZXZfaWJpLT5tYXhfbGVuKTsKKwkJZ290byBkb25lOworCX0KKworCS8qCisJICog VGhpcyByaW5nIG1vZGVsIGlzIG5vdCBzdWl0YWJsZSBmb3IgemVyby1jb3B5IHByb2Nlc3Npbmcg b2YgSUJJcy4KKwkgKiBXZSBoYXZlIHRoZSBkYXRhIGNodW5rIHJpbmcgd3JhcC1hcm91bmQgdG8g ZGVhbCB3aXRoLCBtZWFuaW5nCisJICogdGhhdCB0aGUgcGF5bG9hZCBtaWdodCBzcGFuIG11bHRp cGxlIGNodW5rcyBiZWdpbm5pbmcgYXQgdGhlCisJICogZW5kIG9mIHRoZSByaW5nIGFuZCB3cmFw IHRvIHRoZSBzdGFydCBvZiB0aGUgcmluZy4gRnVydGhlcm1vcmUKKwkgKiB0aGVyZSBpcyBubyBn dWFyYW50ZWUgdGhhdCB0aG9zZSBjaHVua3Mgd2lsbCBiZSByZWxlYXNlZCBpbiBvcmRlcgorCSAq IGFuZCBpbiBhIHRpbWVseSBtYW5uZXIgYnkgdGhlIHVwcGVyIGRyaXZlci4gU28gbGV0J3MganVz dCBjb3B5CisJICogdGhlbSB0byBhIGRpc2NyZXRlIGJ1ZmZlci4gSW4gcHJhY3RpY2UgdGhleSdy ZSBzdXBwb3NlZCB0byBiZQorCSAqIHNtYWxsIGFueXdheS4KKwkgKi8KKwlzbG90ID0gaTNjX2dl bmVyaWNfaWJpX2dldF9mcmVlX3Nsb3QoZGV2X2liaS0+cG9vbCk7CisJaWYgKCFzbG90KSB7CisJ CUVSUigibm8gZnJlZSBzbG90IGZvciBJQkkiKTsKKwkJZ290byBkb25lOworCX0KKworCS8qIGNv cHkgZmlyc3QgcGFydCBvZiB0aGUgcGF5bG9hZCAqLworCWliaV9kYXRhX29mZnNldCA9IHJoLT5p YmlfY2h1bmtfc3ogKiByaC0+aWJpX2NodW5rX3B0cjsKKwlyaW5nX2liaV9kYXRhID0gcmgtPmli aV9kYXRhICsgaWJpX2RhdGFfb2Zmc2V0OworCXJpbmdfaWJpX2RhdGFfcGh5cyA9IHJoLT5pYmlf ZGF0YV9waHlzICsgaWJpX2RhdGFfb2Zmc2V0OworCWZpcnN0X3BhcnQgPSAocmgtPmliaV9jaHVu a3NfdG90YWwgLSByaC0+aWJpX2NodW5rX3B0cikKKwkJCSogcmgtPmliaV9jaHVua19zejsKKwlp ZiAoZmlyc3RfcGFydCA+IGliaV9zaXplKQorCQlmaXJzdF9wYXJ0ID0gaWJpX3NpemU7CisJZG1h X3N5bmNfc2luZ2xlX2Zvcl9jcHUoJmhjaS0+bWFzdGVyLmRldiwgcmluZ19pYmlfZGF0YV9waHlz LAorCQkJCWZpcnN0X3BhcnQsIERNQV9GUk9NX0RFVklDRSk7CisJbWVtY3B5KHNsb3QtPmRhdGEs IHJpbmdfaWJpX2RhdGEsIGZpcnN0X3BhcnQpOworCisJLyogY29weSBzZWNvbmQgcGFydCBpZiBh bnkgKi8KKwlpZiAoaWJpX3NpemUgPiBmaXJzdF9wYXJ0KSB7CisJCS8qIHdlIHdyYXAgYmFjayB0 byB0aGUgc3RhcnQgYW5kIGNvcHkgcmVtYWluaW5nIGRhdGEgKi8KKwkJcmluZ19pYmlfZGF0YSA9 IHJoLT5pYmlfZGF0YTsKKwkJcmluZ19pYmlfZGF0YV9waHlzID0gcmgtPmliaV9kYXRhX3BoeXM7 CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KCZoY2ktPm1hc3Rlci5kZXYsIHJpbmdfaWJpX2Rh dGFfcGh5cywKKwkJCQkJaWJpX3NpemUgLSBmaXJzdF9wYXJ0LCBETUFfRlJPTV9ERVZJQ0UpOwor CQltZW1jcHkoc2xvdC0+ZGF0YSArIGZpcnN0X3BhcnQsIHJpbmdfaWJpX2RhdGEsCisJCSAgICAg ICBpYmlfc2l6ZSAtIGZpcnN0X3BhcnQpOworCX0KKworCS8qIHN1Ym1pdCBpdCAqLworCXNsb3Qt PmRldiA9IGRldjsKKwlzbG90LT5sZW4gPSBpYmlfc2l6ZTsKKwlpM2NfbWFzdGVyX3F1ZXVlX2li aShkZXYsIHNsb3QpOworCitkb25lOgorCS8qIHRha2UgY2FyZSB0byB1cGRhdGUgdGhlIGliaSBk ZXF1ZXVlIHBvaW50ZXIgYXRvbWljYWxseSAqLworCXNwaW5fbG9jaygmcmgtPmxvY2spOworCW9w MV92YWwgPSByaF9yZWdfcmVhZChSSU5HX09QRVJBVElPTjEpOworCW9wMV92YWwgJj0gflJJTkdf T1AxX0lCSV9ERVFfUFRSOworCW9wMV92YWwgfD0gRklFTERfUFJFUChSSU5HX09QMV9JQklfREVR X1BUUiwgZGVxX3B0cik7CisJcmhfcmVnX3dyaXRlKFJJTkdfT1BFUkFUSU9OMSwgb3AxX3ZhbCk7 CisJc3Bpbl91bmxvY2soJnJoLT5sb2NrKTsKKworCS8qIHVwZGF0ZSB0aGUgY2h1bmsgcG9pbnRl ciAqLworCXJoLT5pYmlfY2h1bmtfcHRyICs9IGliaV9jaHVua3M7CisJcmgtPmliaV9jaHVua19w dHIgJT0gcmgtPmliaV9jaHVua3NfdG90YWw7CisKKwkvKiBhbmQgdGVsbCB0aGUgaGFyZHdhcmUg YWJvdXQgZnJlZWQgY2h1bmtzICovCisJcmhfcmVnX3dyaXRlKENIVU5LX0NPTlRST0wsIHJoX3Jl Z19yZWFkKENIVU5LX0NPTlRST0wpICsgaWJpX2NodW5rcyk7Cit9CisKK3N0YXRpYyBib29sIGhj aV9kbWFfaXJxX2hhbmRsZXIoc3RydWN0IGkzY19oY2kgKmhjaSwgdV9pbnQgbWFzaykKK3sKKwlz dHJ1Y3QgaGNpX3JpbmdzX2RhdGEgKnJpbmdzID0gaGNpLT5pb19kYXRhOworCWludCBpOworCWJv b2wgaGFuZGxlZCA9IGZhbHNlOworCisJZm9yIChpID0gMDsgbWFzayAmJiBpIDwgODsgaSsrKSB7 CisJCXN0cnVjdCBoY2lfcmhfZGF0YSAqcmg7CisJCXUzMiBzdGF0dXM7CisKKwkJaWYgKCEobWFz ayAmICgxIDw8IGkpKSkKKwkJCWNvbnRpbnVlOworCQltYXNrICY9IH4oMSA8PCBpKTsKKworCQly aCA9ICZyaW5ncy0+aGVhZGVyc1tpXTsKKwkJc3RhdHVzID0gcmhfcmVnX3JlYWQoSU5UUl9TVEFU VVMpOworCQlEQkcoInJoJWQgc3RhdHVzOiAlI3giLCBpLCBzdGF0dXMpOworCQlpZiAoIXN0YXR1 cykKKwkJCWNvbnRpbnVlOworCQlyaF9yZWdfd3JpdGUoSU5UUl9TVEFUVVMsIHN0YXR1cyk7CisK KwkJaWYgKHN0YXR1cyAmIElOVFJfSUJJX1JFQURZKQorCQkJaGNpX2RtYV9wcm9jZXNzX2liaSho Y2ksIHJoKTsKKwkJaWYgKHN0YXR1cyAmIChJTlRSX1RSQU5TRkVSX0NPTVBMRVRJT058SU5UUl9U UkFOU0ZFUl9FUlIpKQorCQkJaGNpX2RtYV94ZmVyX2RvbmUoaGNpLCByaCk7CisJCWlmIChzdGF0 dXMgJiBJTlRSX1JJTkdfT1ApCisJCQljb21wbGV0ZSgmcmgtPm9wX2RvbmUpOworCisJCWlmIChz dGF0dXMgJiBJTlRSX1RSQU5TRkVSX0FCT1JUKQorCQkJZGV2X25vdGljZV9yYXRlbGltaXRlZCgm aGNpLT5tYXN0ZXIuZGV2LAorCQkJCSJyaW5nICVkOiBUcmFuc2ZlciBBYm9ydGVkXG4iLCBpKTsK KwkJaWYgKHN0YXR1cyAmIElOVFJfV0FSTl9JTlNfU1RPUF9NT0RFKQorCQkJZGV2X3dhcm5fcmF0 ZWxpbWl0ZWQoJmhjaS0+bWFzdGVyLmRldiwKKwkJCQkicmluZyAlZDogSW5zZXJ0ZWQgU3RvcCBv biBNb2RlIENoYW5nZVxuIiwgaSk7CisJCWlmIChzdGF0dXMgJiBJTlRSX0lCSV9SSU5HX0ZVTEwp CisJCQlkZXZfZXJyX3JhdGVsaW1pdGVkKCZoY2ktPm1hc3Rlci5kZXYsCisJCQkJInJpbmcgJWQ6 IElCSSBSaW5nIEZ1bGwgQ29uZGl0aW9uXG4iLCBpKTsKKworCQloYW5kbGVkID0gdHJ1ZTsKKwl9 CisKKwlyZXR1cm4gaGFuZGxlZDsKK30KKworY29uc3Qgc3RydWN0IGhjaV9pb19vcHMgaTNjX2hj aV9kbWEgPSB7CisJLmluaXQJCQk9IGhjaV9kbWFfaW5pdCwKKwkuY2xlYW51cAkJPSBoY2lfZG1h X2NsZWFudXAsCisJLnF1ZXVlX3hmZXIJCT0gaGNpX2RtYV9xdWV1ZV94ZmVyLAorCS5kZXF1ZXVl X3hmZXIJCT0gaGNpX2RtYV9kZXF1ZXVlX3hmZXIsCisJLmlycV9oYW5kbGVyCQk9IGhjaV9kbWFf aXJxX2hhbmRsZXIsCisJLnJlcXVlc3RfaWJpCQk9IGhjaV9kbWFfcmVxdWVzdF9pYmksCisJLmZy ZWVfaWJpCQk9IGhjaV9kbWFfZnJlZV9pYmksCisJLnJlY3ljbGVfaWJpX3Nsb3QJPSBoY2lfZG1h X3JlY3ljbGVfaWJpX3Nsb3QsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pM2MvbWFzdGVyL21p cGktaTNjLWhjaS9leHRfY2Fwcy5jIGIvZHJpdmVycy9pM2MvbWFzdGVyL21pcGktaTNjLWhjaS9l eHRfY2Fwcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjAxYTE4YzRm NjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2kzYy9tYXN0ZXIvbWlwaS1pM2MtaGNpL2V4 dF9jYXBzLmMKQEAgLTAsMCArMSwyNDkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC U0QtMy1DbGF1c2UKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAsIE1JUEkgQWxsaWFuY2UsIElu Yy4KKyAqCisgKiBBdXRob3I6IE5pY29sYXMgUGl0cmUgPG5waXRyZUBiYXlsaWJyZS5jb20+Cisg Ki8KKworI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNl Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pM2MvbWFzdGVy Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKwor I2luY2x1ZGUgImhjaS5oIgorI2luY2x1ZGUgImV4dF9jYXBzLmgiCisKKworLyogRXh0ZW5kZWQg Q2FwYWJpbGl0eSBIZWFkZXIgKi8KKyNkZWZpbmUgQ0FQX0hFQURFUl9MRU5HVEgJCUdFTk1BU0so MjMsIDgpCisjZGVmaW5lIENBUF9IRUFERVJfSUQJCQlHRU5NQVNLKDcsIDApCisKK3N0YXRpYyBp bnQgaGNpX2V4dGNhcF9oYXJkd2FyZV9pZChzdHJ1Y3QgaTNjX2hjaSAqaGNpLCB2b2lkIF9faW9t ZW0gKmJhc2UpCit7CisJaGNpLT52ZW5kb3JfbWlwaV9pZAk9IHJlYWRsKGJhc2UgKyAweDA0KTsK KwloY2ktPnZlbmRvcl92ZXJzaW9uX2lkCT0gcmVhZGwoYmFzZSArIDB4MDgpOworCWhjaS0+dmVu ZG9yX3Byb2R1Y3RfaWQJPSByZWFkbChiYXNlICsgMHgwYyk7CisKKwlJTkZPKCJ2ZW5kb3IgTUlQ SSBJRDogJSN4IiwgaGNpLT52ZW5kb3JfbWlwaV9pZCk7CisJSU5GTygidmVuZG9yIHZlcnNpb24g SUQ6ICUjeCIsIGhjaS0+dmVuZG9yX3ZlcnNpb25faWQpOworCUlORk8oInZlbmRvciBwcm9kdWN0 IElEOiAlI3giLCBoY2ktPnZlbmRvcl9wcm9kdWN0X2lkKTsKKworCS8qIG91Z2h0IHRvIGdvIGlu IGEgdGFibGUgaWYgdGhpcyBncm93cyB0b28gbXVjaCAqLworCXN3aXRjaCAoaGNpLT52ZW5kb3Jf bWlwaV9pZCkgeworCWNhc2UgTUlQSV9WRU5ET1JfTlhQOgorCQloY2ktPnF1aXJrcyB8PSBIQ0lf UVVJUktfUkFXX0NDQzsKKwkJREJHKCJyYXcgQ0NDIHF1aXJrcyBzZXQiKTsKKwkJYnJlYWs7CisJ fQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGNpX2V4dGNhcF9tYXN0ZXJfY29uZmln KHN0cnVjdCBpM2NfaGNpICpoY2ksIHZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwl1MzIgbWFzdGVy X2NvbmZpZyA9IHJlYWRsKGJhc2UgKyAweDA0KTsKKwl1X2ludCBvcGVyYXRpb25fbW9kZSA9IEZJ RUxEX0dFVChHRU5NQVNLKDUsIDQpLCBtYXN0ZXJfY29uZmlnKTsKKwlzdGF0aWMgY29uc3QgY2hh ciAqIGNvbnN0IGZ1bmN0aW9uYWxpdHlbXSA9IHsKKwkJIih1bmtub3duKSIsICJtYXN0ZXIgb25s eSIsICJzbGF2ZSBvbmx5IiwKKwkJIm1hc3RlciBvciBzZWNvbmRhcnkiIH07CisJSU5GTygib3Bl cmF0aW9uIG1vZGU6ICVzIiwgZnVuY3Rpb25hbGl0eVtvcGVyYXRpb25fbW9kZV0pOworCWlmIChv cGVyYXRpb25fbW9kZSAmIDB4MSkKKwkJcmV0dXJuIDA7CisJRVJSKCJvbmx5IG1hc3RlciBtb2Rl IGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQiKTsKKwlyZXR1cm4gLUVOT1RTVVBQOworfQorCitzdGF0 aWMgaW50IGhjaV9leHRjYXBfbXVsdGlfYnVzKHN0cnVjdCBpM2NfaGNpICpoY2ksIHZvaWQgX19p b21lbSAqYmFzZSkKK3sKKwl1MzIgYnVzX2luc3RhbmNlID0gcmVhZGwoYmFzZSArIDB4MDQpOwor CXVfaW50IGNvdW50ID0gRklFTERfR0VUKEdFTk1BU0soMywgMCksIGJ1c19pbnN0YW5jZSk7CisK KwlJTkZPKCIlZCBidXMgaW5zdGFuY2VzIiwgY291bnQpOworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGhjaV9leHRjYXBfYXV0b19jb21tYW5kKHN0cnVjdCBpM2NfaGNpICpoY2ksIHZvaWQg X19pb21lbSAqYmFzZSkKK3sKKwl1MzIgYXV0b2NtZF9leHRfY2FwcyA9IHJlYWRsKGJhc2UgKyAw eDA0KTsKKwl1X2ludCBtYXhfY291bnQgPSBGSUVMRF9HRVQoR0VOTUFTSygzLCAwKSwgYXV0b2Nt ZF9leHRfY2Fwcyk7CisJdTMyIGF1dG9jbWRfZXh0X2NvbmZpZyA9IHJlYWRsKGJhc2UgKyAweDA4 KTsKKwl1X2ludCBjb3VudCA9IEZJRUxEX0dFVChHRU5NQVNLKDMsIDApLCBhdXRvY21kX2V4dF9j b25maWcpOworCisJSU5GTygiJWQvJWQgYWN0aXZlIGF1dG8tY29tbWFuZCBlbnRyaWVzIiwgY291 bnQsIG1heF9jb3VudCk7CisJLyogcmVtZW1iZXIgYXV0by1jb21tYW5kIHJlZ2lzdGVyIGxvY2F0 aW9uIGZvciBsYXRlciB1c2UgKi8KKwloY2ktPkFVVE9DTURfcmVncyA9IGJhc2U7CisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgaGNpX2V4dGNhcF9kZWJ1ZyhzdHJ1Y3QgaTNjX2hjaSAqaGNp LCB2b2lkIF9faW9tZW0gKmJhc2UpCit7CisJSU5GTygiZGVidWcgcmVnaXN0ZXJzIHByZXNlbnQi KTsKKwloY2ktPkRFQlVHX3JlZ3MgPSBiYXNlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IGhjaV9leHRjYXBfc2NoZWR1bGVkX2NtZChzdHJ1Y3QgaTNjX2hjaSAqaGNpLCB2b2lkIF9faW9t ZW0gKmJhc2UpCit7CisJSU5GTygic2NoZWR1bGVkIGNvbW1hbmRzIGF2YWlsYWJsZSIpOworCS8v aGNpLT5zY2hlZGNtZF9yZWdzID0gYmFzZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBo Y2lfZXh0Y2FwX25vbl9jdXJyX21hc3RlcihzdHJ1Y3QgaTNjX2hjaSAqaGNpLCB2b2lkIF9faW9t ZW0gKmJhc2UpCit7CisJSU5GTygiTm9uLUN1cnJlbnQgTWFzdGVyIHN1cHBvcnQgYXZhaWxhYmxl Iik7CisJLy9oY2ktPk5DTV9yZWdzID0gYmFzZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBoY2lfZXh0Y2FwX2NjY19yZXNwX2NvbmYoc3RydWN0IGkzY19oY2kgKmhjaSwgdm9pZCBfX2lv bWVtICpiYXNlKQoreworCUlORk8oIkNDQyBSZXNwb25zZSBDb25maWd1cmF0aW9uIGF2YWlsYWJs ZSIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhjaV9leHRjYXBfZ2xvYmFsX0RBVChz dHJ1Y3QgaTNjX2hjaSAqaGNpLCB2b2lkIF9faW9tZW0gKmJhc2UpCit7CisJSU5GTygiR2xvYmFs IERBVCBhdmFpbGFibGUiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoY2lfZXh0Y2Fw X211bHRpbGFuZShzdHJ1Y3QgaTNjX2hjaSAqaGNpLCB2b2lkIF9faW9tZW0gKmJhc2UpCit7CisJ SU5GTygiTWFzdGVyIE11bHRpLUxhbmUgc3VwcG9ydCBhdmFpbGFibGUiKTsKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBoY2lfZXh0Y2FwX25jbV9tdWx0aWxhbmUoc3RydWN0IGkzY19oY2kg KmhjaSwgdm9pZCBfX2lvbWVtICpiYXNlKQoreworCUlORk8oIk5DTSBNdWx0aS1MYW5lIHN1cHBv cnQgYXZhaWxhYmxlIik7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBoY2lfZXh0X2NhcHMgewor CXU4ICBpZDsKKwl1MTYgbWluX2xlbmd0aDsKKwlpbnQgKCpwYXJzZXIpKHN0cnVjdCBpM2NfaGNp ICpoY2ksIHZvaWQgX19pb21lbSAqYmFzZSk7Cit9OworCisjZGVmaW5lIEVYVF9DQVAoX2lkLCBf aGlnaGVzdF9tYW5kYXRvcnlfcmVnX29mZnNldCwgX3BhcnNlcikgXAorCXsgLmlkID0gKF9pZCks IC5wYXJzZXIgPSAoX3BhcnNlciksIFwKKwkgIC5taW5fbGVuZ3RoID0gKF9oaWdoZXN0X21hbmRh dG9yeV9yZWdfb2Zmc2V0KS80ICsgMSB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNpX2V4dF9j YXBzIGV4dF9jYXBhYmlsaXRpZXNbXSA9IHsKKwlFWFRfQ0FQKDB4MDEsIDB4MGMsIGhjaV9leHRj YXBfaGFyZHdhcmVfaWQpLAorCUVYVF9DQVAoMHgwMiwgMHgwNCwgaGNpX2V4dGNhcF9tYXN0ZXJf Y29uZmlnKSwKKwlFWFRfQ0FQKDB4MDMsIDB4MDQsIGhjaV9leHRjYXBfbXVsdGlfYnVzKSwKKwlF WFRfQ0FQKDB4MDQsIDB4MDgsIGhjaV9leHRjYXBfYXV0b19jb21tYW5kKSwKKwlFWFRfQ0FQKDB4 MGMsIDB4MTAsIGhjaV9leHRjYXBfZGVidWcpLAorCUVYVF9DQVAoMHgwZCwgMHgwYywgaGNpX2V4 dGNhcF9zY2hlZHVsZWRfY21kKSwKKwlFWFRfQ0FQKDB4MGUsIDB4ODAsIGhjaV9leHRjYXBfbm9u X2N1cnJfbWFzdGVyKSwgLyogVE9ETyBjb25maXJtIHNpemUgKi8KKwlFWFRfQ0FQKDB4MGYsIDB4 MDQsIGhjaV9leHRjYXBfY2NjX3Jlc3BfY29uZiksCisJRVhUX0NBUCgweDEwLCAweDA4LCBoY2lf ZXh0Y2FwX2dsb2JhbF9EQVQpLAorCUVYVF9DQVAoMHg5ZCwgMHgwNCwJaGNpX2V4dGNhcF9tdWx0 aWxhbmUpLAorCUVYVF9DQVAoMHg5ZSwgMHgwNCwgaGNpX2V4dGNhcF9uY21fbXVsdGlsYW5lKSwK K307CisKKyNkZWZpbmUgQ0FQX0VOVFJJRVMgQVJSQVlfU0laRShleHRfY2FwYWJpbGl0aWVzKQor CitzdGF0aWMgaW50IGhjaV9leHRjYXBfdmVuZG9yX05YUChzdHJ1Y3QgaTNjX2hjaSAqaGNpLCB2 b2lkIF9faW9tZW0gKmJhc2UpCit7CisJaGNpLT52ZW5kb3JfZGF0YSA9IGJhc2U7CisJSU5GTygi QnVpbGQgRGF0ZSBJbmZvID0gJSN4IiwgcmVhZGwoYmFzZSArIDEqNCkpOworCS8qIHJlc2V0IHRo ZSBGUEdBICovCisJd3JpdGVsKDB4ZGVhZGJlZWYsIGJhc2UgKyAxKjQpOworCXJldHVybiAwOwor fQorCitzdHJ1Y3QgaGNpX2V4dF9jYXBfdmVuZG9yX3NwZWNpZmljIHsKKwl1MzIgdmVuZG9yOwor CXU4ICBjYXA7CisJdTE2IG1pbl9sZW5ndGg7CisJaW50ICgqcGFyc2VyKShzdHJ1Y3QgaTNjX2hj aSAqaGNpLCB2b2lkIF9faW9tZW0gKmJhc2UpOworfTsKKworI2RlZmluZSBFWFRfQ0FQX1ZFTkRP UihfdmVuZG9yLCBfY2FwLCBfaGlnaGVzdF9tYW5kYXRvcnlfcmVnX29mZnNldCkgXAorCXsgLnZl bmRvciA9IChNSVBJX1ZFTkRPUl8jI192ZW5kb3IpLCAuY2FwID0gKF9jYXApLCBcCisJICAucGFy c2VyID0gKGhjaV9leHRjYXBfdmVuZG9yXyMjX3ZlbmRvciksIFwKKwkgIC5taW5fbGVuZ3RoID0g KF9oaWdoZXN0X21hbmRhdG9yeV9yZWdfb2Zmc2V0KS80ICsgMSB9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgaGNpX2V4dF9jYXBfdmVuZG9yX3NwZWNpZmljIHZlbmRvcl9leHRfY2Fwc1tdID0gewor CUVYVF9DQVBfVkVORE9SKE5YUCwgMHhjMCwgMHgyMCksCit9OworCisjZGVmaW5lIFZFTkRPUl9D QVBfRU5UUklFUyBBUlJBWV9TSVpFKHZlbmRvcl9leHRfY2FwcykKKworc3RhdGljIGludCBoY2lf ZXh0Y2FwX3ZlbmRvcl9zcGVjaWZpYyhzdHJ1Y3QgaTNjX2hjaSAqaGNpLCB2b2lkIF9faW9tZW0g KmJhc2UsCisJCQkJICAgICAgdTMyIGNhcF9pZCwgdTMyIGNhcF9sZW5ndGgpCit7CisJY29uc3Qg c3RydWN0IGhjaV9leHRfY2FwX3ZlbmRvcl9zcGVjaWZpYyAqdmVuZG9yX2NhcF9lbnRyeTsKKwlp bnQgaTsKKworCXZlbmRvcl9jYXBfZW50cnkgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBWRU5E T1JfQ0FQX0VOVFJJRVM7IGkrKykgeworCQlpZiAodmVuZG9yX2V4dF9jYXBzW2ldLnZlbmRvciA9 PSBoY2ktPnZlbmRvcl9taXBpX2lkICYmCisJCSAgICB2ZW5kb3JfZXh0X2NhcHNbaV0uY2FwID09 IGNhcF9pZCkgeworCQkJdmVuZG9yX2NhcF9lbnRyeSA9ICZ2ZW5kb3JfZXh0X2NhcHNbaV07CisJ CQlicmVhazsKKwkJfQorCX0KKworCWlmICghdmVuZG9yX2NhcF9lbnRyeSkgeworCQlOT1RFKCJ1 bmtub3duIGV4dF9jYXAgMHglMDJ4IGZvciB2ZW5kb3IgMHglMDJ4IiwKKwkJICAgICBjYXBfaWQs IGhjaS0+dmVuZG9yX21pcGlfaWQpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGNhcF9sZW5ndGgg PCB2ZW5kb3JfY2FwX2VudHJ5LT5taW5fbGVuZ3RoKSB7CisJCUVSUigiZXh0X2NhcCAweCUwMngg aGFzIHNpemUgJWQgKGV4cGVjdGluZyA+PSAlZCkiLAorCQkgICAgY2FwX2lkLCBjYXBfbGVuZ3Ro LCB2ZW5kb3JfY2FwX2VudHJ5LT5taW5fbGVuZ3RoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CXJldHVybiB2ZW5kb3JfY2FwX2VudHJ5LT5wYXJzZXIoaGNpLCBiYXNlKTsKK30KKworaW50IGkz Y19oY2lfcGFyc2VfZXh0X2NhcHMoc3RydWN0IGkzY19oY2kgKmhjaSkKK3sKKwl2b2lkIF9faW9t ZW0gKmN1cnJfY2FwID0gaGNpLT5FWFRDQVBTX3JlZ3M7CisJdm9pZCBfX2lvbWVtICplbmQgPSBj dXJyX2NhcCArIDB4MTAwMDsgLyogc29tZSBhcmJpdHJhcnkgbGltaXQgKi8KKwl1MzIgY2FwX2hl YWRlciwgY2FwX2lkLCBjYXBfbGVuZ3RoOworCWNvbnN0IHN0cnVjdCBoY2lfZXh0X2NhcHMgKmNh cF9lbnRyeTsKKwlpbnQgaSwgZXJyID0gMDsKKworCWlmICghY3Vycl9jYXApCisJCXJldHVybiAw OworCisJZm9yICg7ICFlcnIgJiYgY3Vycl9jYXAgPCBlbmQ7IGN1cnJfY2FwICs9IGNhcF9sZW5n dGggKiA0KSB7CisJCWNhcF9oZWFkZXIgPSByZWFkbChjdXJyX2NhcCk7CisJCWNhcF9pZCA9IEZJ RUxEX0dFVChDQVBfSEVBREVSX0lELCBjYXBfaGVhZGVyKTsKKwkJY2FwX2xlbmd0aCA9IEZJRUxE X0dFVChDQVBfSEVBREVSX0xFTkdUSCwgY2FwX2hlYWRlcik7CisJCURCRygiaWQ9MHglMDJ4IGxl bmd0aD0lZCIsIGNhcF9pZCwgY2FwX2xlbmd0aCk7CisJCWlmICghY2FwX2xlbmd0aCkKKwkJCWJy ZWFrOworCisJCWlmIChjYXBfaWQgPj0gMHhjMCAmJiBjYXBfaWQgPD0gMHhjZikgeworCQkJZXJy ID0gaGNpX2V4dGNhcF92ZW5kb3Jfc3BlY2lmaWMoaGNpLCBjdXJyX2NhcCwKKwkJCQkJCQkgY2Fw X2lkLCBjYXBfbGVuZ3RoKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY2FwX2VudHJ5ID0gTlVM TDsKKwkJZm9yIChpID0gMDsgaSA8IENBUF9FTlRSSUVTOyBpKyspIHsKKwkJCWlmIChleHRfY2Fw YWJpbGl0aWVzW2ldLmlkID09IGNhcF9pZCkgeworCQkJCWNhcF9lbnRyeSA9ICZleHRfY2FwYWJp bGl0aWVzW2ldOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICghY2FwX2VudHJ5KSB7CisJ CQlOT1RFKCJ1bmtub3duIGV4dF9jYXAgMHglMDJ4IiwgY2FwX2lkKTsKKwkJfSBlbHNlIGlmIChj YXBfbGVuZ3RoIDwgY2FwX2VudHJ5LT5taW5fbGVuZ3RoKSB7CisJCQlFUlIoImV4dF9jYXAgMHgl MDJ4IGhhcyBzaXplICVkIChleHBlY3RpbmcgPj0gJWQpIiwKKwkJCSAgICBjYXBfaWQsIGNhcF9s ZW5ndGgsIGNhcF9lbnRyeS0+bWluX2xlbmd0aCk7CisJCQllcnIgPSAtRUlOVkFMOworCQl9IGVs c2UgeworCQkJZXJyID0gY2FwX2VudHJ5LT5wYXJzZXIoaGNpLCBjdXJyX2NhcCk7CisJCX0KKwl9 CisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTNjL21hc3Rlci9taXBpLWkz Yy1oY2kvZXh0X2NhcHMuaCBiL2RyaXZlcnMvaTNjL21hc3Rlci9taXBpLWkzYy1oY2kvZXh0X2Nh cHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi45ZGYxNzgyMmZkCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pM2MvbWFzdGVyL21pcGktaTNjLWhjaS9leHRfY2Fw cy5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1D bGF1c2UgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAsIE1JUEkgQWxsaWFuY2UsIEluYy4K KyAqCisgKiBBdXRob3I6IE5pY29sYXMgUGl0cmUgPG5waXRyZUBiYXlsaWJyZS5jb20+CisgKgor ICogRXh0ZW5kZWQgQ2FwYWJpbGl0eSBEZWZpbml0aW9ucworICovCisKKyNpZm5kZWYgRVhUQ0FQ U19ICisjZGVmaW5lIEVYVENBUFNfSAorCisvKiBNSVBJIHZlbmRvciBJRHMgKi8KKyNkZWZpbmUg TUlQSV9WRU5ET1JfTlhQCQkJMHgxMWIKKworCitpbnQgaTNjX2hjaV9wYXJzZV9leHRfY2Fwcyhz dHJ1Y3QgaTNjX2hjaSAqaGNpKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kzYy9t YXN0ZXIvbWlwaS1pM2MtaGNpL2hjaS5oIGIvZHJpdmVycy9pM2MvbWFzdGVyL21pcGktaTNjLWhj aS9oY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5jODZhMDBhNDIz Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pM2MvbWFzdGVyL21pcGktaTNjLWhjaS9oY2ku aApAQCAtMCwwICsxLDE1MCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNs YXVzZSAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMjAyMCwgTUlQSSBBbGxpYW5jZSwgSW5jLgor ICoKKyAqIEF1dGhvcjogTmljb2xhcyBQaXRyZSA8bnBpdHJlQGJheWxpYnJlLmNvbT4KKyAqCisg KiBDb21tb24gSENJIHN0dWZmCisgKi8KKworI2lmbmRlZiBIQ0lfSAorI2RlZmluZSBIQ0lfSAor CisvKiBIYW5keSBsb2dnaW5nIG1hY3JvcyAqLworI2RlZmluZSBEQkcoeCwgLi4uKSBwcl9kZXZl bCgiJXM6ICIgeCAiXG4iLCBfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgSU5GTyh4 LCAuLi4pIGRldl9pbmZvKCZoY2ktPm1hc3Rlci5kZXYsIHggIlxuIiwgIyNfX1ZBX0FSR1NfXykK KyNkZWZpbmUgTk9URSh4LCAuLi4pIGRldl9ub3RpY2UoJmhjaS0+bWFzdGVyLmRldiwgeCAiXG4i LCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBFUlIoeCwgLi4uKSBkZXZfZXJyKCZoY2ktPm1hc3Rl ci5kZXYsIHggIlxuIiwgIyNfX1ZBX0FSR1NfXykKKworI2RlZmluZSBIRVhEVU1QKHByZWZpeCwg YnVmLCBsZW4pIFwKK3ByaW50X2hleF9kdW1wKEtFUk5fSU5GTywgcHJlZml4LCBEVU1QX1BSRUZJ WF9OT05FLCAxNiwgMSwgYnVmLCBsZW4sIGZhbHNlKQorCisKKy8qIDMyLWJpdCB3b3JkIGF3YXJl IGJpdCBhbmQgbWFzayBtYWNyb3MgKi8KKyNkZWZpbmUgVzBfTUFTSyhoLCBsKSAgR0VOTUFTSygo aCkgLSAwLCAgKGwpIC0gMCkKKyNkZWZpbmUgVzFfTUFTSyhoLCBsKSAgR0VOTUFTSygoaCkgLSAz MiwgKGwpIC0gMzIpCisjZGVmaW5lIFcyX01BU0soaCwgbCkgIEdFTk1BU0soKGgpIC0gNjQsIChs KSAtIDY0KQorI2RlZmluZSBXM19NQVNLKGgsIGwpICBHRU5NQVNLKChoKSAtIDk2LCAobCkgLSA5 NikKKworLyogU2FtZSBmb3Igc2luZ2xlIGJpdCBtYWNyb3MgKHRyYWlsaW5nIF8gdG8gYWxpZ24g d2l0aCBXKl9NQVNLIHdpZHRoKSAqLworI2RlZmluZSBXMF9CSVRfKHgpICBCSVQoKHgpIC0gMCkK KyNkZWZpbmUgVzFfQklUXyh4KSAgQklUKCh4KSAtIDMyKQorI2RlZmluZSBXMl9CSVRfKHgpICBC SVQoKHgpIC0gNjQpCisjZGVmaW5lIFczX0JJVF8oeCkgIEJJVCgoeCkgLSA5NikKKworCitzdHJ1 Y3QgaGNpX2NtZF9vcHM7CisKKy8qIE91ciBtYWluIHN0cnVjdHVyZSAqLworc3RydWN0IGkzY19o Y2kgeworCXN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgbWFzdGVyOworCXZvaWQgX19pb21l bSAqYmFzZV9yZWdzOworCXZvaWQgX19pb21lbSAqREFUX3JlZ3M7CisJdm9pZCBfX2lvbWVtICpE Q1RfcmVnczsKKwl2b2lkIF9faW9tZW0gKlJIU19yZWdzOworCXZvaWQgX19pb21lbSAqUElPX3Jl Z3M7CisJdm9pZCBfX2lvbWVtICpFWFRDQVBTX3JlZ3M7CisJdm9pZCBfX2lvbWVtICpBVVRPQ01E X3JlZ3M7CisJdm9pZCBfX2lvbWVtICpERUJVR19yZWdzOworCWNvbnN0IHN0cnVjdCBoY2lfaW9f b3BzICppbzsKKwl2b2lkICppb19kYXRhOworCWNvbnN0IHN0cnVjdCBoY2lfY21kX29wcyAqY21k OworCWF0b21pY190IG5leHRfY21kX3RpZDsKKwl1MzIgY2FwczsKKwl1X2ludCBxdWlya3M7CisJ dV9pbnQgREFUX2VudHJpZXM7CisJdV9pbnQgREFUX2VudHJ5X3NpemU7CisJdm9pZCAqREFUX2Rh dGE7CisJdV9pbnQgRENUX2VudHJpZXM7CisJdV9pbnQgRENUX2VudHJ5X3NpemU7CisJdTggdmVy c2lvbl9tYWpvcjsKKwl1OCB2ZXJzaW9uX21pbm9yOworCXU4IHJldmlzaW9uOworCXUzMiB2ZW5k b3JfbWlwaV9pZDsKKwl1MzIgdmVuZG9yX3ZlcnNpb25faWQ7CisJdTMyIHZlbmRvcl9wcm9kdWN0 X2lkOworCXZvaWQgKnZlbmRvcl9kYXRhOworfTsKKworCisvKgorICogU3RydWN0dXJlIHRvIHJl cHJlc2VudCBhIG1hc3RlciBpbml0aWF0ZWQgdHJhbnNmZXIuCisgKiBUaGUgcm53LCBkYXRhIGFu ZCBkYXRhX2xlbiBmaWVsZHMgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgY2FsbGluZyBhbnkK KyAqIGhjaS0+Y21kLT4qKCkgbWV0aG9kLiBUaGUgY21kIG1ldGhvZCB3aWxsIGluaXRpYWxpemUg Y21kX2Rlc2NbXSBhbmQKKyAqIHBvc3NpYmx5IG1vZGlmeSAoY2xlYXIpIHRoZSBkYXRhIGZpZWxk LiBUaGVuIHhmZXItPmNtZF9kZXNjWzBdIGNhbgorICogYmUgYXVnbWVudGVkIHdpdGggQ01EXzBf Uk9DIGFuZC9vciBDTURfMF9UT0MuCisgKiBUaGUgY29tcGxldGlvbiBmaWVsZCBuZWVkcyB0byBi ZSBpbml0aWFsaXplZCBiZWZvcmUgcXVldWVpbmcgd2l0aAorICogaGNpLT5pby0+cXVldWVfeGZl cigpLCBhbmQgcmVxdWlyZXMgQ01EXzBfUk9DIHRvIGJlIHNldC4KKyAqLworc3RydWN0IGhjaV94 ZmVyIHsKKwl1MzIgY21kX2Rlc2NbNF07CisJdTMyIHJlc3BvbnNlOworCWJvb2wgcm53OworCXZv aWQgKmRhdGE7CisJdV9pbnQgZGF0YV9sZW47CisJdV9pbnQgY21kX3RpZDsKKwlzdHJ1Y3QgY29t cGxldGlvbiAqY29tcGxldGlvbjsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQkvKiBQSU8gc3Bl Y2lmaWMgKi8KKwkJCXN0cnVjdCBoY2lfeGZlciAqbmV4dF94ZmVyOworCQkJc3RydWN0IGhjaV94 ZmVyICpuZXh0X2RhdGE7CisJCQlzdHJ1Y3QgaGNpX3hmZXIgKm5leHRfcmVzcDsKKwkJCXVfaW50 IGRhdGFfbGVmdDsKKwkJCXUzMiBkYXRhX3dvcmRfYmVmb3JlX3BhcnRpYWw7CisJCX07CisJCXN0 cnVjdCB7CisJCQkvKiBETUEgc3BlY2lmaWMgKi8KKwkJCWRtYV9hZGRyX3QgZGF0YV9waHlzOwor CQkJdV9pbnQgcmluZzsKKwkJCWludCByaW5nX2VudHJ5OworCQl9OworCX07Cit9OworCitzdGF0 aWMgaW5saW5lIHN0cnVjdCBoY2lfeGZlciAqaGNpX2FsbG9jX3hmZXIodV9pbnQgbikKK3sKKwly ZXR1cm4ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhjaV94ZmVyKSAqIG4sIEdGUF9LRVJORUwpOwor fQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGNpX2ZyZWVfeGZlcihzdHJ1Y3QgaGNpX3hmZXIgKnhm ZXIsIHVfaW50IG4pCit7CisJa2ZyZWUoeGZlcik7Cit9CisKKworLyogVGhpcyBhYnN0cmFjdHMg UElPIHZzIERNQSBvcGVyYXRpb25zICovCitzdHJ1Y3QgaGNpX2lvX29wcyB7CisJYm9vbCAoKmly cV9oYW5kbGVyKShzdHJ1Y3QgaTNjX2hjaSAqaGNpLCB1X2ludCBtYXNrKTsKKwlpbnQgKCpxdWV1 ZV94ZmVyKShzdHJ1Y3QgaTNjX2hjaSAqaGNpLCBzdHJ1Y3QgaGNpX3hmZXIgKnhmZXIsIGludCBu KTsKKwlib29sICgqZGVxdWV1ZV94ZmVyKShzdHJ1Y3QgaTNjX2hjaSAqaGNpLCBzdHJ1Y3QgaGNp X3hmZXIgKnhmZXIsIGludCBuKTsKKwlpbnQgKCpyZXF1ZXN0X2liaSkoc3RydWN0IGkzY19oY2kg KmhjaSwgc3RydWN0IGkzY19kZXZfZGVzYyAqZGV2LAorCQkJICAgY29uc3Qgc3RydWN0IGkzY19p Ymlfc2V0dXAgKnJlcSk7CisJdm9pZCAoKmZyZWVfaWJpKShzdHJ1Y3QgaTNjX2hjaSAqaGNpLCBz dHJ1Y3QgaTNjX2Rldl9kZXNjICpkZXYpOworCXZvaWQgKCpyZWN5Y2xlX2liaV9zbG90KShzdHJ1 Y3QgaTNjX2hjaSAqaGNpLCBzdHJ1Y3QgaTNjX2Rldl9kZXNjICpkZXYsCisJCQkJc3RydWN0IGkz Y19pYmlfc2xvdCAqc2xvdCk7CisJaW50ICgqaW5pdCkoc3RydWN0IGkzY19oY2kgKmhjaSk7CisJ dm9pZCAoKmNsZWFudXApKHN0cnVjdCBpM2NfaGNpICpoY2kpOworfTsKKworZXh0ZXJuIGNvbnN0 IHN0cnVjdCBoY2lfaW9fb3BzIGkzY19oY2lfcGlvOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBoY2lf aW9fb3BzIGkzY19oY2lfZG1hOworCisKKy8qIE91ciBwZXIgZGV2aWNlIG1hc3RlciBwcml2YXRl IGRhdGEgKi8KK3N0cnVjdCBpM2NfaGNpX2Rldl9kYXRhIHsKKwlpbnQgZGF0X2lkeDsKKwl2b2lk ICppYmlfZGF0YTsKK307CisKKworLyogbGlzdCBvZiBxdWlya3MgKi8KKyNkZWZpbmUgSENJX1FV SVJLX1JBV19DQ0MJQklUKDEpCS8qIENDQyBmcmFtaW5nIG11c3QgYmUgZXhwbGljaXQgKi8KKwor CisvKiBnbG9iYWwgZnVuY3Rpb25zICovCit2b2lkIGkzY19oY2lfcmVzdW1lKHN0cnVjdCBpM2Nf aGNpICpoY2kpOwordm9pZCBpM2NfaGNpX3Bpb19yZXNldChzdHJ1Y3QgaTNjX2hjaSAqaGNpKTsK K3ZvaWQgaTNjX2hjaV9kY3RfaW5kZXhfcmVzZXQoc3RydWN0IGkzY19oY2kgKmhjaSk7CisKKyNl bmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pM2MvbWFzdGVyL21pcGktaTNjLWhjaS9pYmkuaCBi L2RyaXZlcnMvaTNjL21hc3Rlci9taXBpLWkzYy1oY2kvaWJpLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uYTU1YzFmNzY4NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvaTNjL21hc3Rlci9taXBpLWkzYy1oY2kvaWJpLmgKQEAgLTAsMCArMSw0MiBAQAorLyogU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLworLyoKKyAqIENvcHlyaWdodCAo YykgMjAyMCwgTUlQSSBBbGxpYW5jZSwgSW5jLgorICoKKyAqIEF1dGhvcjogTmljb2xhcyBQaXRy ZSA8bnBpdHJlQGJheWxpYnJlLmNvbT4KKyAqCisgKiBDb21tb24gSUJJIHJlbGF0ZWQgc3R1ZmYK KyAqLworCisjaWZuZGVmIElCSV9ICisjZGVmaW5lIElCSV9ICisKKy8qCisgKiBJQkkgU3RhdHVz IERlc2NyaXB0b3IgYml0cworICovCisjZGVmaW5lIElCSV9TVFMJCQkJQklUKDMxKQorI2RlZmlu ZSBJQklfRVJST1IJCQlCSVQoMzApCisjZGVmaW5lIElCSV9TVEFUVVNfVFlQRQkJCUJJVCgyOSkK KyNkZWZpbmUgSUJJX0hXX0NPTlRFWFQJCQlHRU5NQVNLKDI4LCAyNikKKyNkZWZpbmUgSUJJX1RT CQkJCUJJVCgyNSkKKyNkZWZpbmUgSUJJX0xBU1RfU1RBVFVTCQkJQklUKDI0KQorI2RlZmluZSBJ QklfQ0hVTktTCQkJR0VOTUFTSygyMywgMTYpCisjZGVmaW5lIElCSV9JRAkJCQlHRU5NQVNLKDE1 LCA4KQorI2RlZmluZSBJQklfU0xBVkVfQUREUgkJCUdFTk1BU0soMTUsIDkpCisjZGVmaW5lIElC SV9TTEFWRV9STlcJCQlCSVQoOCkKKyNkZWZpbmUgSUJJX0RBVEFfTEVOR1RICQkJR0VOTUFTSyg3 LCAwKQorCisvKiAgaGFuZHkgaGVscGVycyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgaTNjX2Rl dl9kZXNjICoKK2kzY19oY2lfYWRkcl90b19kZXYoc3RydWN0IGkzY19oY2kgKmhjaSwgdV9pbnQg YWRkcikKK3sKKwlzdHJ1Y3QgaTNjX2J1cyAqYnVzID0gaTNjX21hc3Rlcl9nZXRfYnVzKCZoY2kt Pm1hc3Rlcik7CisJc3RydWN0IGkzY19kZXZfZGVzYyAqZGV2OworCisJaTNjX2J1c19mb3JfZWFj aF9pM2NkZXYoYnVzLCBkZXYpIHsKKwkJaWYgKGRldi0+aW5mby5keW5fYWRkciA9PSBhZGRyKQor CQkJcmV0dXJuIGRldjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9pM2MvbWFzdGVyL21pcGktaTNjLWhjaS9waW8uYyBiL2RyaXZlcnMvaTNjL21h c3Rlci9taXBpLWkzYy1oY2kvcGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uMjBlNDRlYWVkNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaTNjL21hc3Rlci9t aXBpLWkzYy1oY2kvcGlvLmMKQEAgLTAsMCArMSw5NjEgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBCU0QtMy1DbGF1c2UKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAsIE1JUEkgQWxs aWFuY2UsIEluYy4KKyAqCisgKiBBdXRob3I6IE5pY29sYXMgUGl0cmUgPG5waXRyZUBiYXlsaWJy ZS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+CisjaW5jbHVkZSA8bGlu dXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9p M2MvbWFzdGVyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgImhjaS5oIgor I2luY2x1ZGUgImNtZC5oIgorI2luY2x1ZGUgImliaS5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisK KworLyoKKyAqIFBJTyBBY2Nlc3MgQXJlYQorICovCisKKyNkZWZpbmUgcGlvX3JlZ19yZWFkKHIp CQlyZWFkbChoY2ktPlBJT19yZWdzICsgKFBJT18jI3IpKQorI2RlZmluZSBwaW9fcmVnX3dyaXRl KHIsIHYpCXdyaXRlbCh2LCBoY2ktPlBJT19yZWdzICsgKFBJT18jI3IpKQorCisjZGVmaW5lIFBJ T19DT01NQU5EX1FVRVVFX1BPUlQJCTB4MDAKKyNkZWZpbmUgUElPX1JFU1BPTlNFX1FVRVVFX1BP UlQJCTB4MDQKKyNkZWZpbmUgUElPX1hGRVJfREFUQV9QT1JUCQkweDA4CisjZGVmaW5lIFBJT19J QklfUE9SVAkJCTB4MGMKKworI2RlZmluZSBQSU9fUVVFVUVfVEhMRF9DVFJMCQkweDEwCisjZGVm aW5lIFFVRVVFX0lCSV9TVEFUVVNfVEhMRAkJR0VOTUFTSygzMSwgMjQpCisjZGVmaW5lIFFVRVVF X0lCSV9EQVRBX1RITEQJCUdFTk1BU0soMjMsIDE2KQorI2RlZmluZSBRVUVVRV9SRVNQX0JVRl9U SExECQlHRU5NQVNLKDE1LCA4KQorI2RlZmluZSBRVUVVRV9DTURfRU1QVFlfQlVGX1RITEQJR0VO TUFTSyg3LCAwKQorCisjZGVmaW5lIFBJT19EQVRBX0JVRkZFUl9USExEX0NUUkwJMHgxNAorI2Rl ZmluZSBEQVRBX1JYX1NUQVJUX1RITEQJCUdFTk1BU0soMjYsIDI0KQorI2RlZmluZSBEQVRBX1RY X1NUQVJUX1RITEQJCUdFTk1BU0soMTgsIDE2KQorI2RlZmluZSBEQVRBX1JYX0JVRl9USExECQlH RU5NQVNLKDEwLCA4KQorI2RlZmluZSBEQVRBX1RYX0JVRl9USExECQlHRU5NQVNLKDIsIDApCisK KyNkZWZpbmUgUElPX1FVRVVFX1NJWkUJCQkweDE4CisjZGVmaW5lIFRYX0RBVEFfQlVGRkVSX1NJ WkUJCUdFTk1BU0soMzEsIDI0KQorI2RlZmluZSBSWF9EQVRBX0JVRkZFUl9TSVpFCQlHRU5NQVNL KDIzLCAxNikKKyNkZWZpbmUgSUJJX1NUQVRVU19TSVpFCQkJR0VOTUFTSygxNSwgOCkKKyNkZWZp bmUgQ1JfUVVFVUVfU0laRQkJCUdFTk1BU0soNywgMCkKKworI2RlZmluZSBQSU9fSU5UUl9TVEFU VVMJCQkweDIwCisjZGVmaW5lIFBJT19JTlRSX1NUQVRVU19FTkFCTEUJCTB4MjQKKyNkZWZpbmUg UElPX0lOVFJfU0lHTkFMX0VOQUJMRQkJMHgyOAorI2RlZmluZSBQSU9fSU5UUl9GT1JDRQkJCTB4 MmMKKyNkZWZpbmUgU1RBVF9UUkFOU0ZFUl9FUlIJCUJJVCg5KQorI2RlZmluZSBTVEFUX1RSQU5T RkVSX0FCT1JUCQlCSVQoNSkKKyNkZWZpbmUgU1RBVF9SRVNQX1JFQURZCQkJQklUKDQpCisjZGVm aW5lIFNUQVRfQ01EX1FVRVVFX1JFQURZCQlCSVQoMykKKyNkZWZpbmUgU1RBVF9JQklfU1RBVFVT X1RITEQJCUJJVCgyKQorI2RlZmluZSBTVEFUX1JYX1RITEQJCQlCSVQoMSkKKyNkZWZpbmUgU1RB VF9UWF9USExECQkJQklUKDApCisKKworc3RydWN0IGhjaV9waW9fZGV2X2liaV9kYXRhIHsKKwlz dHJ1Y3QgaTNjX2dlbmVyaWNfaWJpX3Bvb2wgKnBvb2w7CisJdV9pbnQgbWF4X2xlbjsKK307CisK K3N0cnVjdCBoY2lfcGlvX2liaV9kYXRhIHsKKwlzdHJ1Y3QgaTNjX2liaV9zbG90ICpzbG90Owor CXZvaWQgKmRhdGFfcHRyOworCXVfaW50IGFkZHI7CisJdV9pbnQgc2VnX2xlbiwgc2VnX2NudDsK Kwl1X2ludCBtYXhfbGVuOworCWJvb2wgbGFzdF9zZWc7Cit9OworCitzdHJ1Y3QgaGNpX3Bpb19k YXRhIHsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGhjaV94ZmVyICpjdXJyX3hmZXIsICp4 ZmVyX3F1ZXVlOworCXN0cnVjdCBoY2lfeGZlciAqY3Vycl9yeCwgKnJ4X3F1ZXVlOworCXN0cnVj dCBoY2lfeGZlciAqY3Vycl90eCwgKnR4X3F1ZXVlOworCXN0cnVjdCBoY2lfeGZlciAqY3Vycl9y ZXNwLCAqcmVzcF9xdWV1ZTsKKwlzdHJ1Y3QgaGNpX3Bpb19pYmlfZGF0YSBpYmk7CisJdV9pbnQg cnhfdGhyZXNoX3NpemUsIHR4X3RocmVzaF9zaXplOworCXVfaW50IG1heF9pYmlfdGhyZXNoOwor CXUzMiByZWdfcXVldWVfdGhyZXNoOworCXUzMiBlbmFibGVkX2lycXM7Cit9OworCitzdGF0aWMg aW50IGhjaV9waW9faW5pdChzdHJ1Y3QgaTNjX2hjaSAqaGNpKQoreworCXN0cnVjdCBoY2lfcGlv X2RhdGEgKnBpbzsKKwl1MzIgdmFsLCBzaXplX3ZhbCwgcnhfdGhyZXNoLCB0eF90aHJlc2gsIGli aV92YWw7CisKKwlwaW8gPSBremFsbG9jKHNpemVvZigqcGlvKSwgR0ZQX0tFUk5FTCk7CisJaWYg KCFwaW8pCisJCXJldHVybiAtRU5PTUVNOworCisJaGNpLT5pb19kYXRhID0gcGlvOworCXNwaW5f bG9ja19pbml0KCZwaW8tPmxvY2spOworCisJc2l6ZV92YWwgPSBwaW9fcmVnX3JlYWQoUVVFVUVf U0laRSk7CisJSU5GTygiQ01EL1JFU1AgRklGTyA9ICVsZCBlbnRyaWVzIiwgRklFTERfR0VUKENS X1FVRVVFX1NJWkUsIHNpemVfdmFsKSk7CisJSU5GTygiSUJJIEZJRk8gPSAlbGQgYnl0ZXMiLCA0 ICogRklFTERfR0VUKElCSV9TVEFUVVNfU0laRSwgc2l6ZV92YWwpKTsKKwlJTkZPKCJSWCBkYXRh IEZJRk8gPSAlZCBieXRlcyIsCisJICAgICA0ICogKDIgPDwgRklFTERfR0VUKFJYX0RBVEFfQlVG RkVSX1NJWkUsIHNpemVfdmFsKSkpOworCUlORk8oIlRYIGRhdGEgRklGTyA9ICVkIGJ5dGVzIiwK KwkgICAgIDQgKiAoMiA8PCBGSUVMRF9HRVQoVFhfREFUQV9CVUZGRVJfU0laRSwgc2l6ZV92YWwp KSk7CisKKwkvKgorCSAqIExldCdzIGluaXRpYWxpemUgZGF0YSB0aHJlc2hvbGRzIHRvIGhhbGYg b2YgdGhlIGFjdHVhbCBGSUZPIHNpemUuCisJICogVGhlIHN0YXJ0IHRocmVzaG9sZHMgYXJlbid0 IHVzZWQgKHNldCB0byAwKSBhcyB0aGUgRklGTyBpcyBhbHdheXMKKwkgKiBzZXJ2aWNlZCBiZWZv cmUgdGhlIGNvcnJlc3BvbmRpbmcgY29tbWFuZCBpcyBxdWV1ZWQuCisJICovCisJcnhfdGhyZXNo ID0gRklFTERfR0VUKFJYX0RBVEFfQlVGRkVSX1NJWkUsIHNpemVfdmFsKTsKKwl0eF90aHJlc2gg PSBGSUVMRF9HRVQoVFhfREFUQV9CVUZGRVJfU0laRSwgc2l6ZV92YWwpOworCWlmIChoY2ktPnZl cnNpb25fbWFqb3IgPT0gMSkgeworCQkvKiB0aG9zZSBhcmUgZXhwcmVzc2VkIGFzIDJeW24rMSks IHNvIGp1c3Qgc3ViIDEgaWYgbm90IDAgKi8KKwkJaWYgKHJ4X3RocmVzaCkKKwkJCXJ4X3RocmVz aCAtPSAxOworCQlpZiAodHhfdGhyZXNoKQorCQkJdHhfdGhyZXNoIC09IDE7CisJCXBpby0+cnhf dGhyZXNoX3NpemUgPSAyIDw8IHJ4X3RocmVzaDsKKwkJcGlvLT50eF90aHJlc2hfc2l6ZSA9IDIg PDwgdHhfdGhyZXNoOworCX0gZWxzZSB7CisJCS8qIHNpemUgaXMgMl4obisxKSBhbmQgdGhyZXNo b2xkIGlzIDJebiBpLmUuIGFscmVhZHkgaGFsdmVkICovCisJCXBpby0+cnhfdGhyZXNoX3NpemUg PSAxIDw8IHJ4X3RocmVzaDsKKwkJcGlvLT50eF90aHJlc2hfc2l6ZSA9IDEgPDwgdHhfdGhyZXNo OworCX0KKwl2YWwgPSBGSUVMRF9QUkVQKERBVEFfUlhfQlVGX1RITEQsICAgcnhfdGhyZXNoKSB8 CisJICAgICAgRklFTERfUFJFUChEQVRBX1RYX0JVRl9USExELCAgIHR4X3RocmVzaCk7CisJcGlv X3JlZ193cml0ZShEQVRBX0JVRkZFUl9USExEX0NUUkwsIHZhbCk7CisKKwkvKgorCSAqIExldCdz IHJhaXNlIGFuIGludGVycnVwdCBhcyBzb29uIGFzIHRoZXJlIGlzIG9uZSBmcmVlIGNtZCBzbG90 CisJICogb3Igb25lIGF2YWlsYWJsZSByZXNwb25zZSBvciBJQkkuIEZvciBJQkkgZGF0YSBsZXQn cyB1c2UgaGFsZiB0aGUKKwkgKiBJQkkgcXVldWUgc2l6ZSB3aXRoaW4gYWxsb3dlZCBib3VuZHMu CisJICovCisJaWJpX3ZhbCA9IEZJRUxEX0dFVChJQklfU1RBVFVTX1NJWkUsIHNpemVfdmFsKTsK KwlwaW8tPm1heF9pYmlfdGhyZXNoID0gY2xhbXBfdmFsKGliaV92YWwvMiwgMSwgNjMpOworCXZh bCA9IEZJRUxEX1BSRVAoUVVFVUVfSUJJX1NUQVRVU19USExELCAxKSB8CisJICAgICAgRklFTERf UFJFUChRVUVVRV9JQklfREFUQV9USExELCBwaW8tPm1heF9pYmlfdGhyZXNoKSB8CisJICAgICAg RklFTERfUFJFUChRVUVVRV9SRVNQX0JVRl9USExELCAxKSB8CisJICAgICAgRklFTERfUFJFUChR VUVVRV9DTURfRU1QVFlfQlVGX1RITEQsIDEpOworCXBpb19yZWdfd3JpdGUoUVVFVUVfVEhMRF9D VFJMLCB2YWwpOworCXBpby0+cmVnX3F1ZXVlX3RocmVzaCA9IHZhbDsKKworCS8qIERpc2FibGUg YWxsIElSUXMgYnV0IGFsbG93IGFsbCBzdGF0dXMgYml0cyAqLworCXBpb19yZWdfd3JpdGUoSU5U Ul9TSUdOQUxfRU5BQkxFLCAweDApOworCXBpb19yZWdfd3JpdGUoSU5UUl9TVEFUVVNfRU5BQkxF LCAweGZmZmZmZmZmKTsKKworCS8qIEFsd2F5cyBhY2NlcHQgZXJyb3IgaW50ZXJydXB0cyAod2ls bCBiZSBhY3RpdmUgb24gZmlyc3QgeGZlcikgKi8KKwlwaW8tPmVuYWJsZWRfaXJxcyA9IFNUQVRf VFJBTlNGRVJfRVJSOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhjaV9waW9fY2xl YW51cChzdHJ1Y3QgaTNjX2hjaSAqaGNpKQoreworCXN0cnVjdCBoY2lfcGlvX2RhdGEgKnBpbyA9 IGhjaS0+aW9fZGF0YTsKKworCXBpb19yZWdfd3JpdGUoSU5UUl9TSUdOQUxfRU5BQkxFLCAweDAp OworCisJaWYgKHBpbykgeworCQlEQkcoInN0YXR1cyA9ICUjeC8lI3giLAorCQkgICAgcGlvX3Jl Z19yZWFkKElOVFJfU1RBVFVTKSwgcGlvX3JlZ19yZWFkKElOVFJfU0lHTkFMX0VOQUJMRSkpOwor CQlCVUdfT04ocGlvLT5jdXJyX3hmZXIpOworCQlCVUdfT04ocGlvLT5jdXJyX3J4KTsKKwkJQlVH X09OKHBpby0+Y3Vycl90eCk7CisJCUJVR19PTihwaW8tPmN1cnJfcmVzcCk7CisJCWtmcmVlKHBp byk7CisJCWhjaS0+aW9fZGF0YSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCBoY2lfcGlv X3dyaXRlX2NtZChzdHJ1Y3QgaTNjX2hjaSAqaGNpLCBzdHJ1Y3QgaGNpX3hmZXIgKnhmZXIpCit7 CisJREJHKCJjbWRfZGVzY1slZF0gPSAweCUwOHgiLCAwLCB4ZmVyLT5jbWRfZGVzY1swXSk7CisJ REJHKCJjbWRfZGVzY1slZF0gPSAweCUwOHgiLCAxLCB4ZmVyLT5jbWRfZGVzY1sxXSk7CisJcGlv X3JlZ193cml0ZShDT01NQU5EX1FVRVVFX1BPUlQsIHhmZXItPmNtZF9kZXNjWzBdKTsKKwlwaW9f cmVnX3dyaXRlKENPTU1BTkRfUVVFVUVfUE9SVCwgeGZlci0+Y21kX2Rlc2NbMV0pOworCWlmICho Y2ktPmNtZCA9PSAmaTNjX2hjaV9jbWRfdjIpIHsKKwkJREJHKCJjbWRfZGVzY1slZF0gPSAweCUw OHgiLCAyLCB4ZmVyLT5jbWRfZGVzY1syXSk7CisJCURCRygiY21kX2Rlc2NbJWRdID0gMHglMDh4 IiwgMywgeGZlci0+Y21kX2Rlc2NbM10pOworCQlwaW9fcmVnX3dyaXRlKENPTU1BTkRfUVVFVUVf UE9SVCwgeGZlci0+Y21kX2Rlc2NbMl0pOworCQlwaW9fcmVnX3dyaXRlKENPTU1BTkRfUVVFVUVf UE9SVCwgeGZlci0+Y21kX2Rlc2NbM10pOworCX0KK30KKworc3RhdGljIGJvb2wgaGNpX3Bpb19k b19yeChzdHJ1Y3QgaTNjX2hjaSAqaGNpLCBzdHJ1Y3QgaGNpX3Bpb19kYXRhICpwaW8pCit7CisJ c3RydWN0IGhjaV94ZmVyICp4ZmVyID0gcGlvLT5jdXJyX3J4OworCXVfaW50IG5yX3dvcmRzOwor CXUzMiAqcDsKKworCXAgPSB4ZmVyLT5kYXRhOworCXAgKz0gKHhmZXItPmRhdGFfbGVuIC0geGZl ci0+ZGF0YV9sZWZ0KSAvIDQ7CisKKwl3aGlsZSAoeGZlci0+ZGF0YV9sZWZ0ID49IDQpIHsKKwkJ LyogYmFpbCBvdXQgaWYgRklGTyBoYXNuJ3QgcmVhY2hlZCB0aGUgdGhyZXNob2xkIHZhbHVlIHll dCAqLworCQlpZiAoIShwaW9fcmVnX3JlYWQoSU5UUl9TVEFUVVMpICYgU1RBVF9SWF9USExEKSkK KwkJCXJldHVybiBmYWxzZTsKKwkJbnJfd29yZHMgPSBtaW4oeGZlci0+ZGF0YV9sZWZ0IC8gNCwg cGlvLT5yeF90aHJlc2hfc2l6ZSk7CisJCS8qIGV4dHJhY3QgZGF0YSBmcm9tIEZJRk8gKi8KKwkJ eGZlci0+ZGF0YV9sZWZ0IC09IG5yX3dvcmRzICogNDsKKwkJREJHKCJub3cgJWQgbGVmdCAlZCIs IG5yX3dvcmRzICogNCwgeGZlci0+ZGF0YV9sZWZ0KTsKKwkJd2hpbGUgKG5yX3dvcmRzLS0pCisJ CQkqcCsrID0gcGlvX3JlZ19yZWFkKFhGRVJfREFUQV9QT1JUKTsKKwl9CisKKwkvKiB0cmFpbGlu ZyBkYXRhIGlzIHJldHJpZXZlZCB1cG9uIHJlc3BvbmNlIHJlY2VwdGlvbiAqLworCXJldHVybiAh eGZlci0+ZGF0YV9sZWZ0OworfQorCitzdGF0aWMgdm9pZCBoY2lfcGlvX2RvX3RyYWlsaW5nX3J4 KHN0cnVjdCBpM2NfaGNpICpoY2ksCisJCQkJICAgc3RydWN0IGhjaV9waW9fZGF0YSAqcGlvLCB1 X2ludCBjb3VudCkKK3sKKwlzdHJ1Y3QgaGNpX3hmZXIgKnhmZXIgPSBwaW8tPmN1cnJfcng7CisJ dTMyICpwOworCisJREJHKCIlZCByZW1haW5pbmciLCBjb3VudCk7CisKKwlwID0geGZlci0+ZGF0 YTsKKwlwICs9ICh4ZmVyLT5kYXRhX2xlbiAtIHhmZXItPmRhdGFfbGVmdCkgLyA0OworCisJaWYg KGNvdW50ID49IDQpIHsKKwkJdV9pbnQgbnJfd29yZHMgPSBjb3VudCAvIDQ7CisJCS8qIGV4dHJh Y3QgZGF0YSBmcm9tIEZJRk8gKi8KKwkJeGZlci0+ZGF0YV9sZWZ0IC09IG5yX3dvcmRzICogNDsK KwkJREJHKCJub3cgJWQgbGVmdCAlZCIsIG5yX3dvcmRzICogNCwgeGZlci0+ZGF0YV9sZWZ0KTsK KwkJd2hpbGUgKG5yX3dvcmRzLS0pCisJCQkqcCsrID0gcGlvX3JlZ19yZWFkKFhGRVJfREFUQV9Q T1JUKTsKKwl9CisKKwljb3VudCAmPSAzOworCWlmIChjb3VudCkgeworCQkvKgorCQkgKiBUaGVy ZSBhcmUgdHJhaWxpbmcgYnl0ZXMgaW4gdGhlIGxhc3Qgd29yZC4KKwkJICogRmV0Y2ggaXQgYW5k IGV4dHJhY3QgYnl0ZXMgaW4gYW4gZW5kaWFuIGluZGVwZW5kZW50IHdheS4KKwkJICogVW5saWtl IHRoZSBUWCBjYXNlLCB3ZSBtdXN0IG5vdCB3cml0ZSBtZW1vcnkgcGFzdCB0aGUKKwkJICogZW5k IG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuCisJCSAqLworCQl1OCAqcF9ieXRlID0gKHU4ICop cDsKKwkJdTMyIGRhdGEgPSBwaW9fcmVnX3JlYWQoWEZFUl9EQVRBX1BPUlQpOworCisJCXhmZXIt PmRhdGFfd29yZF9iZWZvcmVfcGFydGlhbCA9IGRhdGE7CisJCXhmZXItPmRhdGFfbGVmdCAtPSBj b3VudDsKKwkJZGF0YSA9IGNwdV90b19sZTMyKGRhdGEpOworCQl3aGlsZSAoY291bnQtLSkgewor CQkJKnBfYnl0ZSsrID0gZGF0YTsKKwkJCWRhdGEgPj49IDg7CisJCX0KKwl9Cit9CisKK3N0YXRp YyBib29sIGhjaV9waW9fZG9fdHgoc3RydWN0IGkzY19oY2kgKmhjaSwgc3RydWN0IGhjaV9waW9f ZGF0YSAqcGlvKQoreworCXN0cnVjdCBoY2lfeGZlciAqeGZlciA9IHBpby0+Y3Vycl90eDsKKwl1 X2ludCBucl93b3JkczsKKwl1MzIgKnA7CisKKwlwID0geGZlci0+ZGF0YTsKKwlwICs9ICh4ZmVy LT5kYXRhX2xlbiAtIHhmZXItPmRhdGFfbGVmdCkgLyA0OworCisJd2hpbGUgKHhmZXItPmRhdGFf bGVmdCA+PSA0KSB7CisJCS8qIGJhaWwgb3V0IGlmIEZJRk8gZnJlZSBzcGFjZSBpcyBiZWxvdyBz ZXQgdGhyZXNob2xkICovCisJCWlmICghKHBpb19yZWdfcmVhZChJTlRSX1NUQVRVUykgJiBTVEFU X1RYX1RITEQpKQorCQkJcmV0dXJuIGZhbHNlOworCQkvKiB3ZSBjYW4gZmlsbCB1cCB0byB0aGF0 IFRYIHRocmVzaG9sZCAqLworCQlucl93b3JkcyA9IG1pbih4ZmVyLT5kYXRhX2xlZnQgLyA0LCBw aW8tPnR4X3RocmVzaF9zaXplKTsKKwkJLyogcHVzaCBkYXRhIGludG8gdGhlIEZJRk8gKi8KKwkJ eGZlci0+ZGF0YV9sZWZ0IC09IG5yX3dvcmRzICogNDsKKwkJREJHKCJub3cgJWQgbGVmdCAlZCIs IG5yX3dvcmRzICogNCwgeGZlci0+ZGF0YV9sZWZ0KTsKKwkJd2hpbGUgKG5yX3dvcmRzLS0pCisJ CQlwaW9fcmVnX3dyaXRlKFhGRVJfREFUQV9QT1JULCAqcCsrKTsKKwl9CisKKwlpZiAoeGZlci0+ ZGF0YV9sZWZ0KSB7CisJCS8qCisJCSAqIFRoZXJlIGFyZSB0cmFpbGluZyBieXRlcyB0byBzZW5k LiBXZSBjYW4gc2ltcGx5IGxvYWQKKwkJICogdGhlbSBmcm9tIG1lbW9yeSBhcyBhIHdvcmQgd2hp Y2ggd2lsbCBrZWVwIHRob3NlIGJ5dGVzCisJCSAqIGluIHRoZWlyIHByb3BlciBwbGFjZSBldmVu IG9uIGEgQkUgc3lzdGVtLiBUaGlzIHdpbGwKKwkJICogYWxzbyBnZXQgc29tZSBieXRlcyBwYXN0 IHRoZSBhY3R1YWwgYnVmZmVyIGJ1dCBubyBvbmUKKwkJICogc2hvdWxkIGNhcmUgYXMgdGhleSB3 b24ndCBiZSBzZW50IG91dC4KKwkJICovCisJCWlmICghKHBpb19yZWdfcmVhZChJTlRSX1NUQVRV UykgJiBTVEFUX1RYX1RITEQpKQorCQkJcmV0dXJuIGZhbHNlOworCQlEQkcoInRyYWlsaW5nICVk IiwgeGZlci0+ZGF0YV9sZWZ0KTsKKwkJcGlvX3JlZ193cml0ZShYRkVSX0RBVEFfUE9SVCwgKnAp OworCQl4ZmVyLT5kYXRhX2xlZnQgPSAwOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0 aWMgYm9vbCBoY2lfcGlvX3Byb2Nlc3Nfcngoc3RydWN0IGkzY19oY2kgKmhjaSwgc3RydWN0IGhj aV9waW9fZGF0YSAqcGlvKQoreworCXdoaWxlIChwaW8tPmN1cnJfcnggJiYgaGNpX3Bpb19kb19y eChoY2ksIHBpbykpCisJCXBpby0+Y3Vycl9yeCA9IHBpby0+Y3Vycl9yeC0+bmV4dF9kYXRhOwor CXJldHVybiAhcGlvLT5jdXJyX3J4OworfQorCitzdGF0aWMgYm9vbCBoY2lfcGlvX3Byb2Nlc3Nf dHgoc3RydWN0IGkzY19oY2kgKmhjaSwgc3RydWN0IGhjaV9waW9fZGF0YSAqcGlvKQoreworCXdo aWxlIChwaW8tPmN1cnJfdHggJiYgaGNpX3Bpb19kb190eChoY2ksIHBpbykpCisJCXBpby0+Y3Vy cl90eCA9IHBpby0+Y3Vycl90eC0+bmV4dF9kYXRhOworCXJldHVybiAhcGlvLT5jdXJyX3R4Owor fQorCitzdGF0aWMgdm9pZCBoY2lfcGlvX3F1ZXVlX2RhdGEoc3RydWN0IGkzY19oY2kgKmhjaSwg c3RydWN0IGhjaV9waW9fZGF0YSAqcGlvKQoreworCXN0cnVjdCBoY2lfeGZlciAqeGZlciA9IHBp by0+Y3Vycl94ZmVyOworCXN0cnVjdCBoY2lfeGZlciAqcHJldl9xdWV1ZV90YWlsOworCisJaWYg KCF4ZmVyLT5kYXRhKSB7CisJCXhmZXItPmRhdGFfbGVuID0geGZlci0+ZGF0YV9sZWZ0ID0gMDsK KwkJcmV0dXJuOworCX0KKworCWlmICh4ZmVyLT5ybncpIHsKKwkJcHJldl9xdWV1ZV90YWlsID0g cGlvLT5yeF9xdWV1ZTsKKwkJcGlvLT5yeF9xdWV1ZSA9IHhmZXI7CisJCWlmIChwaW8tPmN1cnJf cngpIHsKKwkJCXByZXZfcXVldWVfdGFpbC0+bmV4dF9kYXRhID0geGZlcjsKKwkJfSBlbHNlIHsK KwkJCXBpby0+Y3Vycl9yeCA9IHhmZXI7CisJCQlpZiAoIWhjaV9waW9fcHJvY2Vzc19yeChoY2ks IHBpbykpCisJCQkJcGlvLT5lbmFibGVkX2lycXMgfD0gU1RBVF9SWF9USExEOworCQl9CisJfSBl bHNlIHsKKwkJcHJldl9xdWV1ZV90YWlsID0gcGlvLT50eF9xdWV1ZTsKKwkJcGlvLT50eF9xdWV1 ZSA9IHhmZXI7CisJCWlmIChwaW8tPmN1cnJfdHgpIHsKKwkJCXByZXZfcXVldWVfdGFpbC0+bmV4 dF9kYXRhID0geGZlcjsKKwkJfSBlbHNlIHsKKwkJCXBpby0+Y3Vycl90eCA9IHhmZXI7CisJCQlp ZiAoIWhjaV9waW9fcHJvY2Vzc190eChoY2ksIHBpbykpCisJCQkJcGlvLT5lbmFibGVkX2lycXMg fD0gU1RBVF9UWF9USExEOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBoY2lfcGlvX3B1c2hf dG9fbmV4dF9yeChzdHJ1Y3QgaTNjX2hjaSAqaGNpLCBzdHJ1Y3QgaGNpX3hmZXIgKnhmZXIsCisJ CQkJICAgIHVfaW50IHdvcmRzX3RvX2tlZXApCit7CisJdTMyICpmcm9tID0geGZlci0+ZGF0YTsK Kwl1MzIgZnJvbV9sYXN0OworCXVfaW50IHJlY2VpdmVkLCBjb3VudDsKKworCXJlY2VpdmVkID0g KHhmZXItPmRhdGFfbGVuIC0geGZlci0+ZGF0YV9sZWZ0KSAvIDQ7CisJaWYgKCh4ZmVyLT5kYXRh X2xlbiAtIHhmZXItPmRhdGFfbGVmdCkgJiAzKSB7CisJCWZyb21fbGFzdCA9IHhmZXItPmRhdGFf d29yZF9iZWZvcmVfcGFydGlhbDsKKwkJcmVjZWl2ZWQgKz0gMTsKKwl9IGVsc2UgeworCQlmcm9t X2xhc3QgPSBmcm9tW3JlY2VpdmVkXTsKKwl9CisJZnJvbSArPSB3b3Jkc190b19rZWVwOworCWNv dW50ID0gcmVjZWl2ZWQgLSB3b3Jkc190b19rZWVwOworCisJd2hpbGUgKGNvdW50KSB7CisJCXVf aW50IHJvb20sIGxlZnQsIGNodW5rLCBieXRlc190b19tb3ZlOworCQl1MzIgbGFzdF93b3JkOwor CisJCXhmZXIgPSB4ZmVyLT5uZXh0X2RhdGE7CisJCWlmICgheGZlcikgeworCQkJRVJSKCJwdXNo aW5nIFJYIGRhdGEgdG8gdW5leGlzdGVudCB4ZmVyIik7CisJCQlyZXR1cm47CisJCX0KKworCQly b29tID0gRElWX1JPVU5EX1VQKHhmZXItPmRhdGFfbGVuLCA0KTsKKwkJbGVmdCA9IERJVl9ST1VO RF9VUCh4ZmVyLT5kYXRhX2xlZnQsIDQpOworCQljaHVuayA9IG1pbihjb3VudCwgcm9vbSk7CisJ CWlmIChjaHVuayA+IGxlZnQpIHsKKwkJCWhjaV9waW9fcHVzaF90b19uZXh0X3J4KGhjaSwgeGZl ciwgY2h1bmsgLSBsZWZ0KTsKKwkJCWxlZnQgPSBjaHVuazsKKwkJCXhmZXItPmRhdGFfbGVmdCA9 IGxlZnQgKiA0OworCQl9CisKKwkJYnl0ZXNfdG9fbW92ZSA9IHhmZXItPmRhdGFfbGVuIC0geGZl ci0+ZGF0YV9sZWZ0OworCQlpZiAoYnl0ZXNfdG9fbW92ZSAmIDMpIHsKKwkJCS8qIHByZXNlcnZl IHdvcmQgIHRvIGJlY29tZSBwYXJ0aWFsICovCisJCQl1MzIgKnAgPSB4ZmVyLT5kYXRhOworCisJ CQl4ZmVyLT5kYXRhX3dvcmRfYmVmb3JlX3BhcnRpYWwgPSBwW2J5dGVzX3RvX21vdmUgLyA0XTsK KwkJfQorCQltZW1tb3ZlKHhmZXItPmRhdGEgKyBjaHVuaywgeGZlci0+ZGF0YSwgYnl0ZXNfdG9f bW92ZSk7CisKKwkJLyogdHJlYXQgbGFzdCB3b3JkIHNwZWNpYWxseSBiZWNhdXNlIG9mIHBhcnRp YWwgd29yZCBpc3N1ZXMgKi8KKwkJY2h1bmsgLT0gMTsKKworCQltZW1jcHkoeGZlci0+ZGF0YSwg ZnJvbSwgY2h1bmsgKiA0KTsKKwkJeGZlci0+ZGF0YV9sZWZ0IC09IGNodW5rICogNDsKKwkJZnJv bSArPSBjaHVuazsKKwkJY291bnQgLT0gY2h1bms7CisKKwkJbGFzdF93b3JkID0gKGNvdW50ID09 IDEpID8gZnJvbV9sYXN0IDogKmZyb20rKzsKKwkJaWYgKHhmZXItPmRhdGFfbGVmdCA8IDQpIHsK KwkJCS8qCisJCQkgKiBMaWtlIGluIGhjaV9waW9fZG9fdHJhaWxpbmdfcngoKSwgcHJlc2VydmUg b3JpZ2luYWwKKwkJCSAqIHdvcmQgdG8gYmUgc3RvcmVkIHBhcnRpYWxseSB0aGVuIHN0b3JlIGJ5 dGVzIGl0CisJCQkgKiBpbiBhbiBlbmRpYW4gaW5kZXBlbmRlbnQgd2F5LgorCQkJICovCisJCQl1 OCAqcF9ieXRlID0geGZlci0+ZGF0YTsKKworCQkJcF9ieXRlICs9IGNodW5rICogNDsKKwkJCXhm ZXItPmRhdGFfd29yZF9iZWZvcmVfcGFydGlhbCA9IGxhc3Rfd29yZDsKKwkJCWxhc3Rfd29yZCA9 IGNwdV90b19sZTMyKGxhc3Rfd29yZCk7CisJCQl3aGlsZSAoeGZlci0+ZGF0YV9sZWZ0LS0pIHsK KwkJCQkqcF9ieXRlKysgPSBsYXN0X3dvcmQ7CisJCQkJbGFzdF93b3JkID4+PSA4OworCQkJfQor CQl9IGVsc2UgeworCQkJdTMyICpwID0geGZlci0+ZGF0YTsKKworCQkJcFtjaHVua10gPSBsYXN0 X3dvcmQ7CisJCQl4ZmVyLT5kYXRhX2xlZnQgLT0gNDsKKwkJfQorCQljb3VudC0tOworCX0KK30K Kworc3RhdGljIGJvb2wgaGNpX3Bpb19wcm9jZXNzX3Jlc3Aoc3RydWN0IGkzY19oY2kgKmhjaSwg c3RydWN0IGhjaV9waW9fZGF0YSAqcGlvKQoreworCXdoaWxlIChwaW8tPmN1cnJfcmVzcCAmJgor CSAgICAgICAocGlvX3JlZ19yZWFkKElOVFJfU1RBVFVTKSAmIFNUQVRfUkVTUF9SRUFEWSkpIHsK KwkJc3RydWN0IGhjaV94ZmVyICp4ZmVyID0gcGlvLT5jdXJyX3Jlc3A7CisJCXUzMiByZXNwID0g cGlvX3JlZ19yZWFkKFJFU1BPTlNFX1FVRVVFX1BPUlQpOworCQl1X2ludCB0aWQgPSBSRVNQX1RJ RChyZXNwKTsKKworCQlEQkcoInJlc3AgPSAweCUwOHgiLCByZXNwKTsKKwkJaWYgKHRpZCAhPSB4 ZmVyLT5jbWRfdGlkKSB7CisJCQlFUlIoInJlc3BvbnNlIHRpZD0lZCB3aGVuIGV4cGVjdGluZyAl ZCIsCisJCQkgICAgdGlkLCB4ZmVyLT5jbWRfdGlkKTsKKwkJCS8qIFRPRE86IGRvIHNvbWV0aGlu ZyBhYm91dCBpdD8gKi8KKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQl4ZmVyLT5yZXNwb25zZSA9 IHJlc3A7CisKKwkJaWYgKHBpby0+Y3Vycl9yeCA9PSB4ZmVyKSB7CisJCQkvKgorCQkJICogUmVz cG9uc2UgYXZhaWxhYmlsaXR5IGltcGxpZXMgUlggY29tcGxldGlvbi4KKwkJCSAqIFJldHJpZXZl IHRyYWlsaW5nIFJYIGRhdGEgaWYgYW55LgorCQkJICogTm90ZSB0aGF0IHNob3J0IHJlYWRzIGFy ZSBwb3NzaWJsZS4KKwkJCSAqLworCQkJdV9pbnQgcmVjZWl2ZWQgPSB4ZmVyLT5kYXRhX2xlbiAt IHhmZXItPmRhdGFfbGVmdDsKKwkJCXVfaW50IGV4cGVjdGVkID0gUkVTUF9EQVRBX0xFTkdUSCh4 ZmVyLT5yZXNwb25zZSk7CisKKwkJCWlmIChleHBlY3RlZCA+IHJlY2VpdmVkKSB7CisJCQkJaGNp X3Bpb19kb190cmFpbGluZ19yeChoY2ksIHBpbywKKwkJCQkJCSAgICAgICBleHBlY3RlZCAtIHJl Y2VpdmVkKTsKKwkJCX0gZWxzZSBpZiAocmVjZWl2ZWQgPiBleHBlY3RlZCkgeworCQkJCS8qIHdl IGNvbnN1bWVkIGRhdGEgbWVhbnQgZm9yIG5leHQgeGZlciAqLworCQkJCXVfaW50IHRvX2tlZXAg PSBESVZfUk9VTkRfVVAoZXhwZWN0ZWQsIDQpOworCisJCQkJaGNpX3Bpb19wdXNoX3RvX25leHRf cngoaGNpLCB4ZmVyLCB0b19rZWVwKTsKKwkJCX0KKwkJCS8qIHRoZW4gcHJvY2VzcyB0aGUgUlgg bGlzdCBwb2ludGVyICovCisJCQlpZiAoaGNpX3Bpb19wcm9jZXNzX3J4KGhjaSwgcGlvKSkKKwkJ CQlwaW8tPmVuYWJsZWRfaXJxcyAmPSB+U1RBVF9SWF9USExEOworCQl9CisKKwkJLyoKKwkJICog V2UncmUgYWJvdXQgdG8gZ2l2ZSBiYWNrIG93bmVyc2hpcCBvZiB0aGUgeGZlciBzdHJ1Y3R1cmUK KwkJICogdG8gdGhlIHdhaXRpbmcgaW5zdGFuY2UuIE1ha2Ugc3VyZSBubyByZWZlcmVuY2UgdG8g aXQKKwkJICogc3RpbGwgZXhpc3RzLgorCQkgKi8KKwkJaWYgKHBpby0+Y3Vycl9yeCA9PSB4ZmVy KSB7CisJCQlEQkcoInNob3J0IFJYID8iKTsKKwkJCXBpby0+Y3Vycl9yeCA9IHBpby0+Y3Vycl9y eC0+bmV4dF9kYXRhOworCQl9IGVsc2UgaWYgKHBpby0+Y3Vycl90eCA9PSB4ZmVyKSB7CisJCQlE QkcoInNob3J0IFRYID8iKTsKKwkJCXBpby0+Y3Vycl90eCA9IHBpby0+Y3Vycl90eC0+bmV4dF9k YXRhOworCQl9IGVsc2UgaWYgKHhmZXItPmRhdGFfbGVmdCkgeworCQkJREJHKCJQSU8geGZlciBj b3VudCA9ICVkIGFmdGVyIHJlc3BvbnNlIiwKKwkJCSAgICB4ZmVyLT5kYXRhX2xlZnQpOworCQl9 CisKKwkJcGlvLT5jdXJyX3Jlc3AgPSB4ZmVyLT5uZXh0X3Jlc3A7CisJCWlmICh4ZmVyLT5jb21w bGV0aW9uKQorCQkJY29tcGxldGUoeGZlci0+Y29tcGxldGlvbik7CisJfQorCXJldHVybiAhcGlv LT5jdXJyX3Jlc3A7Cit9CisKK3N0YXRpYyB2b2lkIGhjaV9waW9fcXVldWVfcmVzcChzdHJ1Y3Qg aTNjX2hjaSAqaGNpLCBzdHJ1Y3QgaGNpX3Bpb19kYXRhICpwaW8pCit7CisJc3RydWN0IGhjaV94 ZmVyICp4ZmVyID0gcGlvLT5jdXJyX3hmZXI7CisJc3RydWN0IGhjaV94ZmVyICpwcmV2X3F1ZXVl X3RhaWw7CisKKwlpZiAoISh4ZmVyLT5jbWRfZGVzY1swXSAmIENNRF8wX1JPQykpCisJCXJldHVy bjsKKworCXByZXZfcXVldWVfdGFpbCA9IHBpby0+cmVzcF9xdWV1ZTsKKwlwaW8tPnJlc3BfcXVl dWUgPSB4ZmVyOworCWlmIChwaW8tPmN1cnJfcmVzcCkgeworCQlwcmV2X3F1ZXVlX3RhaWwtPm5l eHRfcmVzcCA9IHhmZXI7CisJfSBlbHNlIHsKKwkJcGlvLT5jdXJyX3Jlc3AgPSB4ZmVyOworCQlp ZiAoIWhjaV9waW9fcHJvY2Vzc19yZXNwKGhjaSwgcGlvKSkKKwkJCXBpby0+ZW5hYmxlZF9pcnFz IHw9IFNUQVRfUkVTUF9SRUFEWTsKKwl9Cit9CisKK3N0YXRpYyBib29sIGhjaV9waW9fcHJvY2Vz c19jbWQoc3RydWN0IGkzY19oY2kgKmhjaSwgc3RydWN0IGhjaV9waW9fZGF0YSAqcGlvKQorewor CXdoaWxlIChwaW8tPmN1cnJfeGZlciAmJgorCSAgICAgICAocGlvX3JlZ19yZWFkKElOVFJfU1RB VFVTKSAmIFNUQVRfQ01EX1FVRVVFX1JFQURZKSkgeworCQkvKgorCQkgKiBBbHdheXMgcHJvY2Vz cyB0aGUgZGF0YSBGSUZPIGJlZm9yZSBzZW5kaW5nIHRoZSBjb21tYW5kCisJCSAqIHNvIG5lZWRl ZCBUWCBkYXRhIG9yIFJYIHNwYWNlIGlzIGF2YWlsYWJsZSB1cGZyb250LgorCQkgKi8KKwkJaGNp X3Bpb19xdWV1ZV9kYXRhKGhjaSwgcGlvKTsKKwkJLyoKKwkJICogVGhlbiBxdWV1ZSBvdXIgcmVz cG9uc2UgcmVxdWVzdC4gVGhpcyB3aWxsIGFsc28gcHJvY2VzcworCQkgKiB0aGUgcmVzcG9uc2Ug RklGTyBpbiBjYXNlIGl0IGdvdCBzdWRkZW5seSBmaWxsZWQgdXAKKwkJICogd2l0aCByZXN1bHRz IGZyb20gcHJldmlvdXMgY29tbWFuZHMuCisJCSAqLworCQloY2lfcGlvX3F1ZXVlX3Jlc3AoaGNp LCBwaW8pOworCQkvKgorCQkgKiBGaW5hbGx5IHNlbmQgdGhlIGNvbW1hbmQuCisJCSAqLworCQlo Y2lfcGlvX3dyaXRlX2NtZChoY2ksIHBpby0+Y3Vycl94ZmVyKTsKKwkJLyoKKwkJICogQW5kIG1v dmUgb24uCisJCSAqLworCQlwaW8tPmN1cnJfeGZlciA9IHBpby0+Y3Vycl94ZmVyLT5uZXh0X3hm ZXI7CisJfQorCXJldHVybiAhcGlvLT5jdXJyX3hmZXI7Cit9CisKK3N0YXRpYyBpbnQgaGNpX3Bp b19xdWV1ZV94ZmVyKHN0cnVjdCBpM2NfaGNpICpoY2ksIHN0cnVjdCBoY2lfeGZlciAqeGZlciwg aW50IG4pCit7CisJc3RydWN0IGhjaV9waW9fZGF0YSAqcGlvID0gaGNpLT5pb19kYXRhOworCXN0 cnVjdCBoY2lfeGZlciAqcHJldl9xdWV1ZV90YWlsOworCWludCBpOworCisJREJHKCJuID0gJWQi LCBuKTsKKworCS8qIGxpbmsgeGZlciBpbnN0YW5jZXMgdG9nZXRoZXIgYW5kIGluaXRpYWxpemUg ZGF0YSBjb3VudCAqLworCWZvciAoaSA9IDA7IGkgPCBuIC0gMTsgaSsrKSB7CisJCXhmZXJbaV0u bmV4dF94ZmVyID0gKGkgKyAxIDwgbikgPyAmeGZlcltpICsgMV0gOiBOVUxMOworCQl4ZmVyW2ld Lm5leHRfZGF0YSA9IE5VTEw7CisJCXhmZXJbaV0ubmV4dF9yZXNwID0gTlVMTDsKKwkJeGZlcltp XS5kYXRhX2xlZnQgPSB4ZmVyW2ldLmRhdGFfbGVuOworCX0KKworCXNwaW5fbG9ja19pcnEoJnBp by0+bG9jayk7CisJUEtfZGVidWdfdHJhY2VfcmVzZXQoKTsKKwlwcmV2X3F1ZXVlX3RhaWwgPSBw aW8tPnhmZXJfcXVldWU7CisJcGlvLT54ZmVyX3F1ZXVlID0gJnhmZXJbbiAtIDFdOworCWlmIChw aW8tPmN1cnJfeGZlcikgeworCQlwcmV2X3F1ZXVlX3RhaWwtPm5leHRfeGZlciA9IHhmZXI7CisJ fSBlbHNlIHsKKwkJcGlvLT5jdXJyX3hmZXIgPSB4ZmVyOworCQlpZiAoIWhjaV9waW9fcHJvY2Vz c19jbWQoaGNpLCBwaW8pKQorCQkJcGlvLT5lbmFibGVkX2lycXMgfD0gU1RBVF9DTURfUVVFVUVf UkVBRFk7CisJCXBpb19yZWdfd3JpdGUoSU5UUl9TSUdOQUxfRU5BQkxFLCBwaW8tPmVuYWJsZWRf aXJxcyk7CisJCURCRygic3RhdHVzID0gJSN4LyUjeCIsCisJCSAgICBwaW9fcmVnX3JlYWQoSU5U Ul9TVEFUVVMpLCBwaW9fcmVnX3JlYWQoSU5UUl9TSUdOQUxfRU5BQkxFKSk7CisJfQorCXNwaW5f dW5sb2NrX2lycSgmcGlvLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgaGNp X3Bpb19kZXF1ZXVlX3hmZXJfY29tbW9uKHN0cnVjdCBpM2NfaGNpICpoY2ksCisJCQkJCXN0cnVj dCBoY2lfcGlvX2RhdGEgKnBpbywKKwkJCQkJc3RydWN0IGhjaV94ZmVyICp4ZmVyLCBpbnQgbikK K3sKKwlzdHJ1Y3QgaGNpX3hmZXIgKnAsICoqcF9wcmV2X25leHQ7CisJaW50IGk7CisKKwkvKgor CSAqIFRvIHNhZmVseSBkZXF1ZXVlIGEgdHJhbnNmZXIgcmVxdWVzdCwgaXQgbXVzdCBiZSBlaXRo ZXIgZW50aXJlbHkKKwkgKiBwcm9jZXNzZWQsIG9yIG5vdCB5ZXQgcHJvY2Vzc2VkIGF0IGFsbC4g SWYgb3VyIHJlcXVlc3QgdGFpbCBpcworCSAqIHJlYWNoYWJsZSBmcm9tIGVpdGhlciB0aGUgZGF0 YSBvciByZXNwIGxpc3QgdGhhdCBtZWFucyB0aGUgY29tbWFuZAorCSAqIHdhcyBzdWJtaXR0ZWQg YW5kIG5vdCB5ZXQgY29tcGxldGVkLgorCSAqLworCWZvciAocCA9IHBpby0+Y3Vycl9yZXNwOyBw OyBwID0gcC0+bmV4dF9yZXNwKQorCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQkJaWYgKHAg PT0gJnhmZXJbaV0pCisJCQkJZ290byBwaW9fc2NyZXdlZDsKKwlmb3IgKHAgPSBwaW8tPmN1cnJf cng7IHA7IHAgPSBwLT5uZXh0X2RhdGEpCisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCQlp ZiAocCA9PSAmeGZlcltpXSkKKwkJCQlnb3RvIHBpb19zY3Jld2VkOworCWZvciAocCA9IHBpby0+ Y3Vycl90eDsgcDsgcCA9IHAtPm5leHRfZGF0YSkKKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykK KwkJCWlmIChwID09ICZ4ZmVyW2ldKQorCQkJCWdvdG8gcGlvX3NjcmV3ZWQ7CisKKwkvKgorCSAq IFRoZSBjb21tYW5kIHdhcyBjb21wbGV0ZWQsIG9yIHdhc24ndCB5ZXQgc3VibWl0dGVkLgorCSAq IFVubGluayBpdCBmcm9tIHRoZSBxdWUgaWYgdGhlIGxhdGVyLgorCSAqLworCXBfcHJldl9uZXh0 ID0gJnBpby0+Y3Vycl94ZmVyOworCWZvciAocCA9IHBpby0+Y3Vycl94ZmVyOyBwOyBwID0gcC0+ bmV4dF94ZmVyKSB7CisJCWlmIChwID09ICZ4ZmVyWzBdKSB7CisJCQkqcF9wcmV2X25leHQgPSB4 ZmVyW24gLSAxXS5uZXh0X3hmZXI7CisJCQlicmVhazsKKwkJfQorCQlwX3ByZXZfbmV4dCA9ICZw LT5uZXh0X3hmZXI7CisJfQorCisJLyogcmV0dXJuIHRydWUgaWYgd2UgYWN0dWFsbHkgdW5xdWV1 ZWQgc29tZXRoaW5nICovCisJcmV0dXJuICEhcDsKKworcGlvX3NjcmV3ZWQ6CisJLyoKKwkgKiBM aWZlIGlzIHRvdWdoLiBXZSBtdXN0IGludmFsaWRhdGUgdGhlIGhhcmR3YXJlIHN0YXRlIGFuZAor CSAqIGRpc2NhcmQgZXZlcnl0aGluZyB0aGF0IGlzIHN0aWxsIHF1ZXVlZC4KKwkgKi8KKwlmb3Ig KHAgPSBwaW8tPmN1cnJfcmVzcDsgcDsgcCA9IHAtPm5leHRfcmVzcCkgeworCQlwLT5yZXNwb25z ZSA9IEZJRUxEX1BSRVAoUkVTUF9FUlJfRklFTEQsIFJFU1BfRVJSX0FCT1JURUQpOworCQlpZiAo cC0+Y29tcGxldGlvbikKKwkJCWNvbXBsZXRlKHAtPmNvbXBsZXRpb24pOworCX0KKwlmb3IgKHAg PSBwaW8tPmN1cnJfeGZlcjsgcDsgcCA9IHAtPm5leHRfeGZlcikgeworCQlwLT5yZXNwb25zZSA9 IEZJRUxEX1BSRVAoUkVTUF9FUlJfRklFTEQsIFJFU1BfRVJSX0FCT1JURUQpOworCQlpZiAocC0+ Y29tcGxldGlvbikKKwkJCWNvbXBsZXRlKHAtPmNvbXBsZXRpb24pOworCX0KKwlwaW8tPmN1cnJf eGZlciA9IHBpby0+Y3Vycl9yeCA9IHBpby0+Y3Vycl90eCA9IHBpby0+Y3Vycl9yZXNwID0gTlVM TDsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBoY2lfcGlvX2RlcXVldWVfeGZl cihzdHJ1Y3QgaTNjX2hjaSAqaGNpLCBzdHJ1Y3QgaGNpX3hmZXIgKnhmZXIsIGludCBuKQorewor CXN0cnVjdCBoY2lfcGlvX2RhdGEgKnBpbyA9IGhjaS0+aW9fZGF0YTsKKwlpbnQgcmV0OworCisJ c3Bpbl9sb2NrX2lycSgmcGlvLT5sb2NrKTsKKwlEQkcoIm49JWQgc3RhdHVzPSUjeC8lI3giLCBu LAorCSAgICBwaW9fcmVnX3JlYWQoSU5UUl9TVEFUVVMpLCBwaW9fcmVnX3JlYWQoSU5UUl9TSUdO QUxfRU5BQkxFKSk7CisJREJHKCJtYWluX3N0YXR1cyA9ICUjeC8lI3giLAorCSAgICByZWFkbCho Y2ktPmJhc2VfcmVncyArIDB4MjApLCByZWFkbChoY2ktPmJhc2VfcmVncyArIDB4MjgpKTsKKwlQ S19kZWJ1Z190cmFjZSgpOworCisJcmV0ID0gaGNpX3Bpb19kZXF1ZXVlX3hmZXJfY29tbW9uKGhj aSwgcGlvLCB4ZmVyLCBuKTsKKwlzcGluX3VubG9ja19pcnEoJnBpby0+bG9jayk7CisJcmV0dXJu IHJldDsKK30KKworc3RhdGljIHZvaWQgaGNpX3Bpb19zZXRfaWJpX3RocmVzaChzdHJ1Y3QgaTNj X2hjaSAqaGNpLAorCQkJCSAgIHN0cnVjdCBoY2lfcGlvX2RhdGEgKnBpbywgdV9pbnQgdGhyZXNo X3ZhbCkKK3sKKwl1MzIgcmVndmFsID0gcGlvLT5yZWdfcXVldWVfdGhyZXNoOworCisJcmVndmFs ICY9IH5RVUVVRV9JQklfU1RBVFVTX1RITEQ7CisJcmVndmFsIHw9IEZJRUxEX1BSRVAoUVVFVUVf SUJJX1NUQVRVU19USExELCB0aHJlc2hfdmFsKTsKKwkvKiB3cml0ZSB0aGUgdGhyZXNob2xkIHJl ZyBvbmx5IGlmIGl0IGNoYW5nZXMgKi8KKwlpZiAocmVndmFsICE9IHBpby0+cmVnX3F1ZXVlX3Ro cmVzaCkgeworCQlwaW9fcmVnX3dyaXRlKFFVRVVFX1RITERfQ1RSTCwgcmVndmFsKTsKKwkJcGlv LT5yZWdfcXVldWVfdGhyZXNoID0gcmVndmFsOworCQlEQkcoIiVkIiwgdGhyZXNoX3ZhbCk7CisJ fQorfQorCitzdGF0aWMgYm9vbCBoY2lfcGlvX2dldF9pYmlfc2VnbWVudChzdHJ1Y3QgaTNjX2hj aSAqaGNpLAorCQkJCSAgICBzdHJ1Y3QgaGNpX3Bpb19kYXRhICpwaW8pCit7CisJc3RydWN0IGhj aV9waW9faWJpX2RhdGEgKmliaSA9ICZwaW8tPmliaTsKKwl1X2ludCBucl93b3JkcywgdGhyZXNo X3ZhbDsKKwl1MzIgKnA7CisKKwlwID0gaWJpLT5kYXRhX3B0cjsKKwlwICs9IChpYmktPnNlZ19s ZW4gLSBpYmktPnNlZ19jbnQpIC8gNDsKKworCXdoaWxlICgobnJfd29yZHMgPSBpYmktPnNlZ19j bnQvNCkpIHsKKwkJLyogZGV0ZXJtaW5lIG91ciBJQkkgcXVldWUgdGhyZXNob2xkIHZhbHVlICov CisJCXRocmVzaF92YWwgPSBtaW5fdCh1X2ludCwgbnJfd29yZHMsIHBpby0+bWF4X2liaV90aHJl c2gpOworCQloY2lfcGlvX3NldF9pYmlfdGhyZXNoKGhjaSwgcGlvLCB0aHJlc2hfdmFsKTsKKwkJ LyogYmFpbCBvdXQgaWYgd2UgZG9uJ3QgaGF2ZSB0aGF0IGFtb3VudCBvZiBkYXRhIHJlYWR5ICov CisJCWlmICghKHBpb19yZWdfcmVhZChJTlRSX1NUQVRVUykgJiBTVEFUX0lCSV9TVEFUVVNfVEhM RCkpCisJCQlyZXR1cm4gZmFsc2U7CisJCS8qIGV4dHJhY3QgdGhlIGRhdGEgZnJvbSB0aGUgSUJJ IHBvcnQgKi8KKwkJbnJfd29yZHMgPSB0aHJlc2hfdmFsOworCQlpYmktPnNlZ19jbnQgLT0gbnJf d29yZHMgKiA0OworCQlEQkcoIm5vdyAlZCBsZWZ0ICVkIiwgbnJfd29yZHMgKiA0LCBpYmktPnNl Z19jbnQpOworCQl3aGlsZSAobnJfd29yZHMtLSkKKwkJCSpwKysgPSBwaW9fcmVnX3JlYWQoSUJJ X1BPUlQpOworCX0KKworCWlmIChpYmktPnNlZ19jbnQpIHsKKwkJLyoKKwkJICogVGhlcmUgYXJl IHRyYWlsaW5nIGJ5dGVzIGluIHRoZSBsYXN0IHdvcmQuCisJCSAqIEZldGNoIGl0IGFuZCBleHRy YWN0IGJ5dGVzIGluIGFuIGVuZGlhbiBpbmRlcGVuZGVudCB3YXkuCisJCSAqIFVubGlrZSB0aGUg VFggY2FzZSwgd2UgbXVzdCBub3Qgd3JpdGUgcGFzdCB0aGUgZW5kIG9mCisJCSAqIHRoZSBkZXN0 aW5hdGlvbiBidWZmZXIuCisJCSAqLworCQl1MzIgZGF0YTsKKwkJdTggKnBfYnl0ZSA9ICh1OCAq KXA7CisKKwkJaGNpX3Bpb19zZXRfaWJpX3RocmVzaChoY2ksIHBpbywgMSk7CisJCWlmICghKHBp b19yZWdfcmVhZChJTlRSX1NUQVRVUykgJiBTVEFUX0lCSV9TVEFUVVNfVEhMRCkpCisJCQlyZXR1 cm4gZmFsc2U7CisJCURCRygidHJhaWxpbmcgJWQiLCBpYmktPnNlZ19jbnQpOworCQlkYXRhID0g cGlvX3JlZ19yZWFkKElCSV9QT1JUKTsKKwkJZGF0YSA9IGNwdV90b19sZTMyKGRhdGEpOworCQl3 aGlsZSAoaWJpLT5zZWdfY250LS0pIHsKKwkJCSpwX2J5dGUrKyA9IGRhdGE7CisJCQlkYXRhID4+ PSA4OworCQl9CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGhjaV9waW9f cHJlcF9uZXdfaWJpKHN0cnVjdCBpM2NfaGNpICpoY2ksIHN0cnVjdCBoY2lfcGlvX2RhdGEgKnBp bykKK3sKKwlzdHJ1Y3QgaGNpX3Bpb19pYmlfZGF0YSAqaWJpID0gJnBpby0+aWJpOworCXN0cnVj dCBpM2NfZGV2X2Rlc2MgKmRldjsKKwlzdHJ1Y3QgaTNjX2hjaV9kZXZfZGF0YSAqZGV2X2RhdGE7 CisJc3RydWN0IGhjaV9waW9fZGV2X2liaV9kYXRhICpkZXZfaWJpOworCXUzMiBpYmlfc3RhdHVz OworCisJLyoKKwkgKiBXZSBoYXZlIGEgbmV3IElCSS4gVHJ5IHRvIHNldCB1cCBpdHMgcGF5bG9h ZCByZXRyaWV2YWwuCisJICogV2hlbiByZXR1cm5pbmcgdHJ1ZSwgdGhlIElCSSBkYXRhIGhhcyB0 byBiZSBjb25zdW1lZCB3aGV0aGVyCisJICogb3Igbm90IHdlIGFyZSBzZXQgdXAgdG8gY2FwdHVy ZSBpdC4gSWYgd2UgcmV0dXJuIHRydWUgd2l0aAorCSAqIGliaS0+c2xvdCA9PSBOVUxMIHRoYXQg bWVhbnMgdGhlIGRhdGEgcGF5bG9hZCBoYXMgdG8gYmUKKwkgKiBkcmFpbmVkIG91dCBvZiB0aGUg SUJJIHBvcnQgYW5kIGRyb3BwZWQuCisJICovCisKKwlpYmlfc3RhdHVzID0gcGlvX3JlZ19yZWFk KElCSV9QT1JUKTsKKwlEQkcoInN0YXR1cyA9ICUjeCIsIGliaV9zdGF0dXMpOworCWliaS0+YWRk ciA9IEZJRUxEX0dFVChJQklfU0xBVkVfQUREUiwgaWJpX3N0YXR1cyk7CisJaWYgKGliaV9zdGF0 dXMgJiBJQklfRVJST1IpIHsKKwkJRVJSKCJJQkkgZXJyb3IgZnJvbSAlI3giLCBpYmktPmFkZHIp OworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWJpLT5sYXN0X3NlZyA9IGliaV9zdGF0dXMgJiBJ QklfTEFTVF9TVEFUVVM7CisJaWJpLT5zZWdfbGVuID0gRklFTERfR0VUKElCSV9EQVRBX0xFTkdU SCwgaWJpX3N0YXR1cyk7CisJaWJpLT5zZWdfY250ID0gaWJpLT5zZWdfbGVuOworCisJZGV2ID0g aTNjX2hjaV9hZGRyX3RvX2RldihoY2ksIGliaS0+YWRkcik7CisJaWYgKCFkZXYpIHsKKwkJRVJS KCJJQkkgZm9yIHVua25vd24gZGV2aWNlICUjeCIsIGliaS0+YWRkcik7CisJCXJldHVybiB0cnVl OworCX0KKworCWRldl9kYXRhID0gaTNjX2Rldl9nZXRfbWFzdGVyX2RhdGEoZGV2KTsKKwlkZXZf aWJpID0gZGV2X2RhdGEtPmliaV9kYXRhOworCWliaS0+bWF4X2xlbiA9IGRldl9pYmktPm1heF9s ZW47CisKKwlpZiAoaWJpLT5zZWdfbGVuID4gaWJpLT5tYXhfbGVuKSB7CisJCUVSUigiSUJJIHBh eWxvYWQgdG9vIGJpZyAoJWQgPiAlZCkiLAorCQkgICAgaWJpLT5zZWdfbGVuLCBpYmktPm1heF9s ZW4pOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlpYmktPnNsb3QgPSBpM2NfZ2VuZXJpY19pYmlf Z2V0X2ZyZWVfc2xvdChkZXZfaWJpLT5wb29sKTsKKwlpZiAoIWliaS0+c2xvdCkgeworCQlFUlIo Im5vIGZyZWUgc2xvdCBmb3IgSUJJIik7CisJfSBlbHNlIHsKKwkJaWJpLT5zbG90LT5sZW4gPSAw OworCQlpYmktPmRhdGFfcHRyID0gaWJpLT5zbG90LT5kYXRhOworCX0KKwlyZXR1cm4gdHJ1ZTsK K30KKworc3RhdGljIHZvaWQgaGNpX3Bpb19mcmVlX2liaV9zbG90KHN0cnVjdCBpM2NfaGNpICpo Y2ksIHN0cnVjdCBoY2lfcGlvX2RhdGEgKnBpbykKK3sKKwlzdHJ1Y3QgaGNpX3Bpb19pYmlfZGF0 YSAqaWJpID0gJnBpby0+aWJpOworCXN0cnVjdCBoY2lfcGlvX2Rldl9pYmlfZGF0YSAqZGV2X2li aTsKKworCWlmIChpYmktPnNsb3QpIHsKKwkJZGV2X2liaSA9IGliaS0+c2xvdC0+ZGV2LT5jb21t b24ubWFzdGVyX3ByaXY7CisJCWkzY19nZW5lcmljX2liaV9yZWN5Y2xlX3Nsb3QoZGV2X2liaS0+ cG9vbCwgaWJpLT5zbG90KTsKKwkJaWJpLT5zbG90ID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBi b29sIGhjaV9waW9fcHJvY2Vzc19pYmkoc3RydWN0IGkzY19oY2kgKmhjaSwgc3RydWN0IGhjaV9w aW9fZGF0YSAqcGlvKQoreworCXN0cnVjdCBoY2lfcGlvX2liaV9kYXRhICppYmkgPSAmcGlvLT5p Ymk7CisKKwlpZiAoIWliaS0+c2xvdCAmJiAhaWJpLT5zZWdfY250ICYmIGliaS0+bGFzdF9zZWcp CisJCWlmICghaGNpX3Bpb19wcmVwX25ld19pYmkoaGNpLCBwaW8pKQorCQkJcmV0dXJuIGZhbHNl OworCisJZm9yICg7OykgeworCQl1MzIgaWJpX3N0YXR1czsKKwkJdV9pbnQgaWJpX2FkZHI7CisK KwkJaWYgKGliaS0+c2xvdCkgeworCQkJaWYgKCFoY2lfcGlvX2dldF9pYmlfc2VnbWVudChoY2ks IHBpbykpCisJCQkJcmV0dXJuIGZhbHNlOworCQkJaWJpLT5zbG90LT5sZW4gKz0gaWJpLT5zZWdf bGVuOworCQkJaWJpLT5kYXRhX3B0ciArPSBpYmktPnNlZ19sZW47CisJCQlpZiAoaWJpLT5sYXN0 X3NlZykgeworCQkJCS8qIHdhcyB0aGUgbGFzdCBzZWdtZW50OiBzdWJtaXQgaXQgYW5kIGxlYXZl ICovCisJCQkJaTNjX21hc3Rlcl9xdWV1ZV9pYmkoaWJpLT5zbG90LT5kZXYsIGliaS0+c2xvdCk7 CisJCQkJaWJpLT5zbG90ID0gTlVMTDsKKwkJCQloY2lfcGlvX3NldF9pYmlfdGhyZXNoKGhjaSwg cGlvLCAxKTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfSBlbHNlIGlmIChpYmktPnNlZ19j bnQpIHsKKwkJCS8qCisJCQkgKiBObyBzbG90IGJ1dCBhIG5vbi16ZXJvIGNvdW50LiBUaGlzIGlz IHRoZSByZXN1bHQKKwkJCSAqIG9mIHNvbWUgZXJyb3IgYW5kIHRoZSBwYXlsb2FkIG11c3QgYmUg ZHJhaW5lZC4KKwkJCSAqIFRoaXMgbm9ybWFsbHkgZG9lcyBub3QgaGFwcGVuIHRoZXJlZm9yZSBu byBuZWVkCisJCQkgKiB0byBiZSBleHRyYSBvcHRpbWl6ZWQgaGVyZS4KKwkJCSAqLworCQkJaGNp X3Bpb19zZXRfaWJpX3RocmVzaChoY2ksIHBpbywgMSk7CisJCQlkbyB7CisJCQkJaWYgKCEocGlv X3JlZ19yZWFkKElOVFJfU1RBVFVTKSAmIFNUQVRfSUJJX1NUQVRVU19USExEKSkKKwkJCQkJcmV0 dXJuIGZhbHNlOworCQkJCXBpb19yZWdfcmVhZChJQklfUE9SVCk7CisJCQl9IHdoaWxlICgtLWli aS0+c2VnX2NudCk7CisJCQlpZiAoaWJpLT5sYXN0X3NlZykKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJ fQorCisJCS8qIHRyeSB0byBtb3ZlIHRvIHRoZSBuZXh0IHNlZ21lbnQgcmlnaHQgYXdheSAqLwor CQloY2lfcGlvX3NldF9pYmlfdGhyZXNoKGhjaSwgcGlvLCAxKTsKKwkJaWYgKCEocGlvX3JlZ19y ZWFkKElOVFJfU1RBVFVTKSAmIFNUQVRfSUJJX1NUQVRVU19USExEKSkKKwkJCXJldHVybiBmYWxz ZTsKKwkJaWJpX3N0YXR1cyA9IHBpb19yZWdfcmVhZChJQklfUE9SVCk7CisJCWliaV9hZGRyID0g RklFTERfR0VUKElCSV9TTEFWRV9BRERSLCBpYmlfc3RhdHVzKTsKKwkJaWYgKGliaS0+YWRkciAh PSBpYmlfYWRkcikgeworCQkJLyogc2xhdmUgYWRkcmVzcyBjaGFuZ2VkIGJlZm9yZSBsYXN0IHNl Z21lbnQgKi8KKwkJCUVSUigidW5leHAgSUJJIGFkZHJlc3MgY2hhbmdlZCBmcm9tICVkIHRvICVk IiwKKwkJCSAgICBpYmktPmFkZHIsIGliaV9hZGRyKTsKKwkJCWhjaV9waW9fZnJlZV9pYmlfc2xv dChoY2ksIHBpbyk7CisJCX0KKwkJaWJpLT5sYXN0X3NlZyA9IGliaV9zdGF0dXMgJiBJQklfTEFT VF9TVEFUVVM7CisJCWliaS0+c2VnX2xlbiA9IEZJRUxEX0dFVChJQklfREFUQV9MRU5HVEgsIGli aV9zdGF0dXMpOworCQlpYmktPnNlZ19jbnQgPSBpYmktPnNlZ19sZW47CisJCWlmIChpYmktPnNs b3QgJiYgaWJpLT5zbG90LT5sZW4gKyBpYmktPnNlZ19sZW4gPiBpYmktPm1heF9sZW4pIHsKKwkJ CUVSUigiSUJJIHBheWxvYWQgdG9vIGJpZyAoJWQgPiAlZCkiLAorCQkJICAgIGliaS0+c2xvdC0+ bGVuICsgaWJpLT5zZWdfbGVuLCBpYmktPm1heF9sZW4pOworCQkJaGNpX3Bpb19mcmVlX2liaV9z bG90KGhjaSwgcGlvKTsKKwkJfQorCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlu dCBoY2lfcGlvX3JlcXVlc3RfaWJpKHN0cnVjdCBpM2NfaGNpICpoY2ksIHN0cnVjdCBpM2NfZGV2 X2Rlc2MgKmRldiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaTNjX2liaV9zZXR1cCAqcmVxKQor eworCXN0cnVjdCBpM2NfaGNpX2Rldl9kYXRhICpkZXZfZGF0YSA9IGkzY19kZXZfZ2V0X21hc3Rl cl9kYXRhKGRldik7CisJc3RydWN0IGkzY19nZW5lcmljX2liaV9wb29sICpwb29sOworCXN0cnVj dCBoY2lfcGlvX2Rldl9pYmlfZGF0YSAqZGV2X2liaTsKKworCWRldl9pYmkgPSBrbWFsbG9jKHNp emVvZigqZGV2X2liaSksIEdGUF9LRVJORUwpOworCWlmICghZGV2X2liaSkKKwkJcmV0dXJuIC1F Tk9NRU07CisJcG9vbCA9IGkzY19nZW5lcmljX2liaV9hbGxvY19wb29sKGRldiwgcmVxKTsKKwlp ZiAoSVNfRVJSKHBvb2wpKSB7CisJCWtmcmVlKGRldl9pYmkpOworCQlyZXR1cm4gUFRSX0VSUihw b29sKTsKKwl9CisJZGV2X2liaS0+cG9vbCA9IHBvb2w7CisJZGV2X2liaS0+bWF4X2xlbiA9IHJl cS0+bWF4X3BheWxvYWRfbGVuOworCWRldl9kYXRhLT5pYmlfZGF0YSA9IGRldl9pYmk7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhjaV9waW9fZnJlZV9pYmkoc3RydWN0IGkzY19oY2kg KmhjaSwgc3RydWN0IGkzY19kZXZfZGVzYyAqZGV2KQoreworCXN0cnVjdCBpM2NfaGNpX2Rldl9k YXRhICpkZXZfZGF0YSA9IGkzY19kZXZfZ2V0X21hc3Rlcl9kYXRhKGRldik7CisJc3RydWN0IGhj aV9waW9fZGV2X2liaV9kYXRhICpkZXZfaWJpID0gZGV2X2RhdGEtPmliaV9kYXRhOworCisJZGV2 X2RhdGEtPmliaV9kYXRhID0gTlVMTDsKKwlpM2NfZ2VuZXJpY19pYmlfZnJlZV9wb29sKGRldl9p YmktPnBvb2wpOworCWtmcmVlKGRldl9pYmkpOworfQorCitzdGF0aWMgdm9pZCBoY2lfcGlvX3Jl Y3ljbGVfaWJpX3Nsb3Qoc3RydWN0IGkzY19oY2kgKmhjaSwKKwkJCQkgICAgc3RydWN0IGkzY19k ZXZfZGVzYyAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgaTNjX2liaV9zbG90ICpzbG90KQoreworCXN0 cnVjdCBpM2NfaGNpX2Rldl9kYXRhICpkZXZfZGF0YSA9IGkzY19kZXZfZ2V0X21hc3Rlcl9kYXRh KGRldik7CisJc3RydWN0IGhjaV9waW9fZGV2X2liaV9kYXRhICpkZXZfaWJpID0gZGV2X2RhdGEt PmliaV9kYXRhOworCisJaTNjX2dlbmVyaWNfaWJpX3JlY3ljbGVfc2xvdChkZXZfaWJpLT5wb29s LCBzbG90KTsKK30KKworc3RhdGljIHZvaWQgaGNpX3Bpb19lcnIoc3RydWN0IGkzY19oY2kgKmhj aSwgc3RydWN0IGhjaV9waW9fZGF0YSAqcGlvLAorCQkJdTMyIHN0YXR1cykKK3sKKwkvKiBUT0RP OiB0aGlzIG91Z2h0IHRvIGJlIG1vcmUgc29waGlzdGljYXRlZCBldmVudHVhbGx5ICovCisKKwlp ZiAocGlvX3JlZ19yZWFkKElOVFJfU1RBVFVTKSAmIFNUQVRfUkVTUF9SRUFEWSkgeworCQkvKiB0 aGlzIG1heSBoYXBwZW4gd2hlbiBhbiBlcnJvciBpcyBzaWduYWxlZCB3aXRoIFJPQyB1bnNldCAq LworCQl1MzIgcmVzcCA9IHBpb19yZWdfcmVhZChSRVNQT05TRV9RVUVVRV9QT1JUKTsKKworCQlF UlIoIm9ycGhhbiByZXNwb25zZSAoJSN4KSBvbiBlcnJvciIsIHJlc3ApOworCX0KKworCS8qIGp1 c3QgYnVzdCBvdXQgZXZlcnl0aGluZyB3aXRoIHBlbmRpbmcgcmVzcG9uc2VzIGZvciBub3cgKi8K KwloY2lfcGlvX2RlcXVldWVfeGZlcl9jb21tb24oaGNpLCBwaW8sIHBpby0+Y3Vycl9yZXNwLCAx KTsKKwkvKiAuLi4gYW5kIGhhbGYtd2F5IFRYIHRyYW5zZmVycyBpZiBhbnkgKi8KKwlpZiAocGlv LT5jdXJyX3R4ICYmCisJICAgIHBpby0+Y3Vycl90eC0+ZGF0YV9sZWZ0ICE9IHBpby0+Y3Vycl90 eC0+ZGF0YV9sZW4pCisJCWhjaV9waW9fZGVxdWV1ZV94ZmVyX2NvbW1vbihoY2ksIHBpbywgcGlv LT5jdXJyX3R4LCAxKTsKKwkvKiB0aGVuIHJlc2V0IHRoZSBoYXJkd2FyZSAqLworCWkzY19oY2lf cGlvX3Jlc2V0KGhjaSk7CisJaTNjX2hjaV9yZXN1bWUoaGNpKTsKKworCURCRygic3RhdHVzPSUj eC8lI3giLAorCSAgICBwaW9fcmVnX3JlYWQoSU5UUl9TVEFUVVMpLCBwaW9fcmVnX3JlYWQoSU5U Ul9TSUdOQUxfRU5BQkxFKSk7Cit9CisKK3N0YXRpYyBib29sIGhjaV9waW9faXJxX2hhbmRsZXIo c3RydWN0IGkzY19oY2kgKmhjaSwgdV9pbnQgdW51c2VkKQoreworCXN0cnVjdCBoY2lfcGlvX2Rh dGEgKnBpbyA9IGhjaS0+aW9fZGF0YTsKKwl1MzIgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZwaW8t PmxvY2spOworCXN0YXR1cyA9IHBpb19yZWdfcmVhZChJTlRSX1NUQVRVUyk7CisJREJHKCIoaW4p IHN0YXR1czogJSN4LyUjeCIsIHN0YXR1cywgcGlvLT5lbmFibGVkX2lycXMpOworCXN0YXR1cyAm PSBwaW8tPmVuYWJsZWRfaXJxczsKKwlpZiAoIXN0YXR1cykgeworCQlzcGluX3VubG9jaygmcGlv LT5sb2NrKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmICh1bmxpa2VseShzdGF0dXMgJiAo U1RBVF9UUkFOU0ZFUl9FUlJ8U1RBVF9UUkFOU0ZFUl9BQk9SVCkpKQorCQlQS19kZWJ1Z190cmFj ZSgpOworCisJaWYgKHN0YXR1cyAmIFNUQVRfSUJJX1NUQVRVU19USExEKQorCQloY2lfcGlvX3By b2Nlc3NfaWJpKGhjaSwgcGlvKTsKKworCWlmIChzdGF0dXMgJiBTVEFUX1JYX1RITEQpCisJCWlm IChoY2lfcGlvX3Byb2Nlc3NfcngoaGNpLCBwaW8pKQorCQkJcGlvLT5lbmFibGVkX2lycXMgJj0g flNUQVRfUlhfVEhMRDsKKwlpZiAoc3RhdHVzICYgU1RBVF9UWF9USExEKQorCQlpZiAoaGNpX3Bp b19wcm9jZXNzX3R4KGhjaSwgcGlvKSkKKwkJCXBpby0+ZW5hYmxlZF9pcnFzICY9IH5TVEFUX1RY X1RITEQ7CisJaWYgKHN0YXR1cyAmIFNUQVRfUkVTUF9SRUFEWSkKKwkJaWYgKGhjaV9waW9fcHJv Y2Vzc19yZXNwKGhjaSwgcGlvKSkKKwkJCXBpby0+ZW5hYmxlZF9pcnFzICY9IH5TVEFUX1JFU1Bf UkVBRFk7CisKKwlpZiAodW5saWtlbHkoc3RhdHVzICYgKFNUQVRfVFJBTlNGRVJfRVJSfFNUQVRf VFJBTlNGRVJfQUJPUlQpKSkKKwkJaGNpX3Bpb19lcnIoaGNpLCBwaW8sIHN0YXR1cyk7CisKKwlp ZiAoc3RhdHVzICYgU1RBVF9DTURfUVVFVUVfUkVBRFkpCisJCWlmIChoY2lfcGlvX3Byb2Nlc3Nf Y21kKGhjaSwgcGlvKSkKKwkJCXBpby0+ZW5hYmxlZF9pcnFzICY9IH5TVEFUX0NNRF9RVUVVRV9S RUFEWTsKKworCXBpb19yZWdfd3JpdGUoSU5UUl9TSUdOQUxfRU5BQkxFLCBwaW8tPmVuYWJsZWRf aXJxcyk7CisJREJHKCIob3V0KSBzdGF0dXM6ICUjeC8lI3giLAorCSAgICBwaW9fcmVnX3JlYWQo SU5UUl9TVEFUVVMpLCBwaW9fcmVnX3JlYWQoSU5UUl9TSUdOQUxfRU5BQkxFKSk7CisJc3Bpbl91 bmxvY2soJnBpby0+bG9jayk7CisJcmV0dXJuIHRydWU7Cit9CisKK2NvbnN0IHN0cnVjdCBoY2lf aW9fb3BzIGkzY19oY2lfcGlvID0geworCS5pbml0CQkJPSBoY2lfcGlvX2luaXQsCisJLmNsZWFu dXAJCT0gaGNpX3Bpb19jbGVhbnVwLAorCS5xdWV1ZV94ZmVyCQk9IGhjaV9waW9fcXVldWVfeGZl ciwKKwkuZGVxdWV1ZV94ZmVyCQk9IGhjaV9waW9fZGVxdWV1ZV94ZmVyLAorCS5pcnFfaGFuZGxl cgkJPSBoY2lfcGlvX2lycV9oYW5kbGVyLAorCS5yZXF1ZXN0X2liaQkJPSBoY2lfcGlvX3JlcXVl c3RfaWJpLAorCS5mcmVlX2liaQkJPSBoY2lfcGlvX2ZyZWVfaWJpLAorCS5yZWN5Y2xlX2liaV9z bG90CT0gaGNpX3Bpb19yZWN5Y2xlX2liaV9zbG90LAorfTsKLS0gCjIuMjYuMgoKCi0tIApsaW51 eC1pM2MgbWFpbGluZyBsaXN0CmxpbnV4LWkzY0BsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9s aXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtaTNjCg==