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=-8.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,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 F13EFC4646B for ; Wed, 26 Jun 2019 07:18:56 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 A347A2085A for ; Wed, 26 Jun 2019 07:18:56 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="tmqM2P08"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=aj.id.au header.i=@aj.id.au header.b="oiD6cueS"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="IdlHA7Ln" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A347A2085A Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=aj.id.au Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.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=l+Ii6r8MlF1Y8fEI4sv4QABy08n1OqR4jQdI+jRyHaY=; b=tmqM2P08kqodJh BMyvBuYO6o3SB46YXx46DtALn75ARMxAAJnfqnienQH49O9QziEALo3bY9adNqrxdjgLQYH30SY4C FURezxAC0rnjYzMvkPvus9OiVU1cGl6wFc9n52glnQ7UplAPTg+MJNKpIlkMo6EQLGj+Zfa55S0Rx 4KMoJQz2v+e8GZdYcX5GOxwkbn54HnYkAfQiQo8dExD5s/FLnyR5MwYKdmKl3Omvqtgqkeuy3LmRH tCsTyM5Bwjp3N3o4Vh4tsEgOoBOvJ7m5o8TBbge7HD4+YUyTqjJ1YAjGZHSktFuVaT+5uCNXyyZEs FY16HsrvooctL/xzNJvg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hg2Cb-0008Jm-IG; Wed, 26 Jun 2019 07:18:45 +0000 Received: from new4-smtp.messagingengine.com ([66.111.4.230]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hg2A8-0006as-EO for linux-arm-kernel@lists.infradead.org; Wed, 26 Jun 2019 07:16:21 +0000 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.nyi.internal (Postfix) with ESMTP id A84601DB0; Wed, 26 Jun 2019 03:16:11 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Wed, 26 Jun 2019 03:16:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aj.id.au; h=from :to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type:content-transfer-encoding; s=fm3; bh= 3njZDwYYs7bLJ2uLmxQtgdDrfKxdUCSsFndXalV7J9k=; b=oiD6cueSElf3jLa6 dIWfb+N4OCfUnqqUm2ufl7Eec+1nqzVe24Ip+tz9z/gNhk8EoBetmk8CU/xd1pBQ uMqrh28ssaIsb8rhKImoo6An1hTBr7KX5H8BNyJLBLPgIRU20KM6b8/RjJf7zJ4D AjyEhFD8zHuzobARHGU/Oiq2s1H/UeNjIo0L8O8WICAp75McCnd6GIztAza9MoYp IR1WdqFgXFYqkJU5fp7ayQMVuELWBAY+FMRgTAUKSGa5izUngCzkky8k8QAbhu4T 0/eX/vdMD391VkDTC5wOebKurC5q0igurauqmfHSPrOAqe64Rfw+zIfVTOTnUeV1 X608cQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm3; bh=3njZDwYYs7bLJ2uLmxQtgdDrfKxdUCSsFndXalV7J 9k=; b=IdlHA7LnbfDfur6WQEwYBzMbVyZQIT6vHerO5ZVUYQxyBYv4CettvRdT7 WqBAbnEyozBI1DXrwPjxkwMx69bYoXRMu7EQ+1E5IiduXtgt07PYXHItNvW7I/2P 1PkagGC4zAGVg34IZJpzZx6j9PbpB5ia9fcsTx7dyUZ7M29BpCIeWeQWjUEOQDBK nsBLASssLDJ0cGuebaZL8oLxKh74ZZsebglvkv8v4PvGC422Of4NJtCodNcrWP1c M6AdGFkzmHSb7hROkYBLHSOaxBkY7akgVwIDSa0H7pB2TLyMKqF4/0uKFLgskcf4 W5E4kdlpL054+CXaveKz3w5t4zDGA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduvddrudehgdduudejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhvffufffkofgjfhggtgfgsehtke ertdertdejnecuhfhrohhmpeetnhgurhgvficulfgvfhhfvghrhicuoegrnhgurhgvfies rghjrdhiugdrrghuqeenucfkphepvddtvddrkedurddukedrfedtnecurfgrrhgrmhepmh grihhlfhhrohhmpegrnhgurhgvfiesrghjrdhiugdrrghunecuvehluhhsthgvrhfuihii vgeptd X-ME-Proxy: Received: from mistburn.au.ibm.com (bh02i525f01.au.ibm.com [202.81.18.30]) by mail.messagingengine.com (Postfix) with ESMTPA id 05AAB380085; Wed, 26 Jun 2019 03:16:06 -0400 (EDT) From: Andrew Jeffery To: linux-gpio@vger.kernel.org Subject: [PATCH 7/8] pinctrl: aspeed: Split out pinmux from general pinctrl Date: Wed, 26 Jun 2019 16:44:29 +0930 Message-Id: <20190626071430.28556-8-andrew@aj.id.au> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190626071430.28556-1-andrew@aj.id.au> References: <20190626071430.28556-1-andrew@aj.id.au> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190626_001612_848186_100315C7 X-CRM114-Status: GOOD ( 19.31 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: mark.rutland@arm.com, devicetree@vger.kernel.org, ryan_chen@aspeedtech.com, linux-aspeed@lists.ozlabs.org, Andrew Jeffery , linus.walleij@linaro.org, linux-kernel@vger.kernel.org, robh+dt@kernel.org, joel@jms.id.au, openbmc@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org QVNQRUVEIGhhdmUgY29tcGxldGVseSByZWFycmFuZ2VkIHRoZSBTeXN0ZW0gQ29udHJvbCBVbml0 IHJlZ2lzdGVyCmxheW91dCB3aXRoIHRoZSBBU1QyNjAwLiBUaGUgZXhpc3RpbmcgY29kZSB0b29r IGFkdmFudGFnZSBvZiB0aGUgZmFjdAp0aGF0IHRoZSBBU1QyNDAwIGFuZCBBU1QyNTAwIGhhZCBs YXlvdXRzIHRoYXQgd2VyZSBzaW1pbGFyIGVub3VnaCB0bwpoYXZlIGxpdHRsZSBpbXBhY3Qgb24g dGhlIHBpbm11eCBpbmZyYXN0cnVjdHVyZSAodGhvdWdoIHRoZXJlIGlzIGEgd2FydAp3aXRoIHJl YWQtbW9kaWZ5LXdyaXRlIHZzIHdyaXRlLTEtY2xlYXIgc2VtYW50aWNzIG9mIHRoZSBoYXJkd2Fy ZQpzdHJhcHBpbmcgcmVnaXN0ZXJzIGJldHdlZW4gdGhlIHR3bykuCgpHaXZlbiB0aGF0IGFueSBz aW1pbGFyaXR5IGhhcyBiZWVuIHRocm93biBvdXQgd2l0aCB0aGUgQVNUMjYwMCwgc2VwYXJhdGUK b3V0IHRoZSBmdW5jdGlvbiBhcHBseWluZyBhbiBleHByZXNzaW9uIHN0YXRlIHRvIGJlIGRyaXZl ci1zcGVjaWZpYy4KV2l0aCBpdCwgZXh0cmFjdCBvdXQgdGhlIHBpbm11eCBtYWNybyBqdW5nbGUg dG8gaXRzIG93biBoZWFkZXIgYW5kCmltcGxlbWVudGF0aW9uIHNvIHRoZSBwaWVjZXMgY2FuIGJl IGNvbXBvc2VkIHdpdGhvdXQgZGVwZW5kZW5jeSBjeWNsZXMuCgpTaWduZWQtb2ZmLWJ5OiBBbmRy ZXcgSmVmZmVyeSA8YW5kcmV3QGFqLmlkLmF1PgotLS0KIGRyaXZlcnMvcGluY3RybC9hc3BlZWQv TWFrZWZpbGUgICAgICAgICAgICB8ICAgMiArLQogZHJpdmVycy9waW5jdHJsL2FzcGVlZC9waW5j dHJsLWFzcGVlZC1nNC5jIHwgIDk0ICsrKy0KIGRyaXZlcnMvcGluY3RybC9hc3BlZWQvcGluY3Ry bC1hc3BlZWQtZzUuYyB8IDEyMyArKysrLQogZHJpdmVycy9waW5jdHJsL2FzcGVlZC9waW5jdHJs LWFzcGVlZC5jICAgIHwgMjUwICsrLS0tLS0tLS0KIGRyaXZlcnMvcGluY3RybC9hc3BlZWQvcGlu Y3RybC1hc3BlZWQuaCAgICB8IDU0OCArLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvcGlu Y3RybC9hc3BlZWQvcGlubXV4LWFzcGVlZC5jICAgICB8ICA5NiArKysrCiBkcml2ZXJzL3BpbmN0 cmwvYXNwZWVkL3Bpbm11eC1hc3BlZWQuaCAgICAgfCA1MzkgKysrKysrKysrKysrKysrKysrKysK IDcgZmlsZXMgY2hhbmdlZCwgODkyIGluc2VydGlvbnMoKyksIDc2MCBkZWxldGlvbnMoLSkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3BpbmN0cmwvYXNwZWVkL3Bpbm11eC1hc3BlZWQuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvcGluY3RybC9hc3BlZWQvcGlubXV4LWFzcGVlZC5o CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL2FzcGVlZC9NYWtlZmlsZSBiL2RyaXZlcnMv cGluY3RybC9hc3BlZWQvTWFrZWZpbGUKaW5kZXggMDY4NzI5YmY0Zjg2Li5lYTg5NjI2NDVlNDkg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9hc3BlZWQvTWFrZWZpbGUKKysrIGIvZHJpdmVy cy9waW5jdHJsL2FzcGVlZC9NYWtlZmlsZQpAQCAtMiw2ICsyLDYgQEAKICMgQXNwZWVkIHBpbmN0 cmwgc3VwcG9ydAogCiBjY2ZsYWdzLXkgKz0gJChjYWxsIGNjLW9wdGlvbiwtV292ZXJyaWRlLWlu aXQpCi1vYmotJChDT05GSUdfUElOQ1RSTF9BU1BFRUQpCSs9IHBpbmN0cmwtYXNwZWVkLm8KK29i ai0kKENPTkZJR19QSU5DVFJMX0FTUEVFRCkJKz0gcGluY3RybC1hc3BlZWQubyBwaW5tdXgtYXNw ZWVkLm8KIG9iai0kKENPTkZJR19QSU5DVFJMX0FTUEVFRF9HNCkJKz0gcGluY3RybC1hc3BlZWQt ZzQubwogb2JqLSQoQ09ORklHX1BJTkNUUkxfQVNQRUVEX0c1KQkrPSBwaW5jdHJsLWFzcGVlZC1n NS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvYXNwZWVkL3BpbmN0cmwtYXNwZWVkLWc0 LmMgYi9kcml2ZXJzL3BpbmN0cmwvYXNwZWVkL3BpbmN0cmwtYXNwZWVkLWc0LmMKaW5kZXggNzNl MmM5YzBlNTQ5Li4zODQzOTZjYmIyMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9hc3Bl ZWQvcGluY3RybC1hc3BlZWQtZzQuYworKysgYi9kcml2ZXJzL3BpbmN0cmwvYXNwZWVkL3BpbmN0 cmwtYXNwZWVkLWc0LmMKQEAgLTE4LDggKzE4LDM0IEBACiAKICNpbmNsdWRlICIuLi9jb3JlLmgi CiAjaW5jbHVkZSAiLi4vcGluY3RybC11dGlscy5oIgorI2luY2x1ZGUgInBpbm11eC1hc3BlZWQu aCIKICNpbmNsdWRlICJwaW5jdHJsLWFzcGVlZC5oIgogCisvKgorICogVGhlICJNdWx0aS1mdW5j dGlvbiBQaW5zIE1hcHBpbmcgYW5kIENvbnRyb2wiIHRhYmxlIGluIHRoZSBTb0MgZGF0YXNoZWV0 CisgKiByZWZlcmVuY2VzIHJlZ2lzdGVycyBieSB0aGUgZGV2aWNlL29mZnNldCBtbmVtb25pYy4g VGhlIHJlZ2lzdGVyIG1hY3JvcworICogYmVsb3cgYXJlIG5hbWVkIHRoZSBzYW1lIHdheSB0byBl YXNlIHRyYW5zY3JpcHRpb24gYW5kIHZlcmlmaWNhdGlvbiAoYXMKKyAqIG9wcG9zZWQgdG8gbmFt aW5nIHRoZW0gZS5nLiBQSU5NVVhfQ1RSTF9bMC05XSkuIEZ1cnRoZXIsIHNpZ25hbCBleHByZXNz aW9ucworICogcmVmZXJlbmNlIHJlZ2lzdGVycyBiZXlvbmQgdGhvc2UgZGVkaWNhdGVkIHRvIHBp bm11eCwgc3VjaCBhcyB0aGUgc3lzdGVtCisgKiByZXNldCBjb250cm9sIGFuZCBNQUMgY2xvY2sg Y29uZmlndXJhdGlvbiByZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUgU0NVMkMgICAgICAgICAgIDB4 MkMgLyogTWlzYy4gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBTQ1UzQyAgICAgICAgICAg MHgzQyAvKiBTeXN0ZW0gUmVzZXQgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUg U0NVNDggICAgICAgICAgIDB4NDggLyogTUFDIEludGVyZmFjZSBDbG9jayBEZWxheSBTZXR0aW5n ICovCisjZGVmaW5lIEhXX1NUUkFQMSAgICAgICAweDcwIC8qIEFTVDI0MDAgc3RyYXBwaW5nIGlz IDMzIGJpdHMsIGlzIHNwbGl0ICovCisjZGVmaW5lIEhXX1JFVklTSU9OX0lEICAweDdDIC8qIFNp bGljb24gcmV2aXNpb24gSUQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0NVODAgICAgICAgICAgIDB4 ODAgLyogTXVsdGktZnVuY3Rpb24gUGluIENvbnRyb2wgIzEgKi8KKyNkZWZpbmUgU0NVODQgICAg ICAgICAgIDB4ODQgLyogTXVsdGktZnVuY3Rpb24gUGluIENvbnRyb2wgIzIgKi8KKyNkZWZpbmUg U0NVODggICAgICAgICAgIDB4ODggLyogTXVsdGktZnVuY3Rpb24gUGluIENvbnRyb2wgIzMgKi8K KyNkZWZpbmUgU0NVOEMgICAgICAgICAgIDB4OEMgLyogTXVsdGktZnVuY3Rpb24gUGluIENvbnRy b2wgIzQgKi8KKyNkZWZpbmUgU0NVOTAgICAgICAgICAgIDB4OTAgLyogTXVsdGktZnVuY3Rpb24g UGluIENvbnRyb2wgIzUgKi8KKyNkZWZpbmUgU0NVOTQgICAgICAgICAgIDB4OTQgLyogTXVsdGkt ZnVuY3Rpb24gUGluIENvbnRyb2wgIzYgKi8KKyNkZWZpbmUgU0NVQTAgICAgICAgICAgIDB4QTAg LyogTXVsdGktZnVuY3Rpb24gUGluIENvbnRyb2wgIzcgKi8KKyNkZWZpbmUgU0NVQTQgICAgICAg ICAgIDB4QTQgLyogTXVsdGktZnVuY3Rpb24gUGluIENvbnRyb2wgIzggKi8KKyNkZWZpbmUgU0NV QTggICAgICAgICAgIDB4QTggLyogTXVsdGktZnVuY3Rpb24gUGluIENvbnRyb2wgIzkgKi8KKyNk ZWZpbmUgU0NVQUMgICAgICAgICAgIDB4QUMgLyogTXVsdGktZnVuY3Rpb24gUGluIENvbnRyb2wg IzEwICovCisjZGVmaW5lIEhXX1NUUkFQMiAgICAgICAweEQwIC8qIFN0cmFwcGluZyAqLworCiAv KgogICogVXNlcyB1bmRlZmluZWQgbWFjcm9zIGZvciBzeW1ib2wgbmFtaW5nIGFuZCByZWZlcmVu Y2VzLCBlZyBHUElPQTAsIE1BQzFMSU5LLAogICogVElNRVIzIGV0Yy4KQEAgLTIzODYsMTMgKzI0 MTIsNzMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhc3BlZWRfcGluX2NvbmZpZyBhc3BlZWRfZzRf Y29uZmlnc1tdID0gewogCXsgUElOX0NPTkZJR19JTlBVVF9ERUJPVU5DRSwgeyBDMTQsIEIxNCB9 LCBTQ1VBOCwgMjcgfSwKIH07CiAKK3N0YXRpYyBpbnQgYXNwZWVkX2c0X3NpZ19leHByX3NldChj b25zdCBzdHJ1Y3QgYXNwZWVkX3Bpbm11eF9kYXRhICpjdHgsCisJCQkJICBjb25zdCBzdHJ1Y3Qg YXNwZWVkX3NpZ19leHByICpleHByLAorCQkJCSAgYm9vbCBlbmFibGUpCit7CisJaW50IHJldDsK KwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBleHByLT5uZGVzY3M7IGkrKykgeworCQljb25z dCBzdHJ1Y3QgYXNwZWVkX3NpZ19kZXNjICpkZXNjID0gJmV4cHItPmRlc2NzW2ldOworCQl1MzIg cGF0dGVybiA9IGVuYWJsZSA/IGRlc2MtPmVuYWJsZSA6IGRlc2MtPmRpc2FibGU7CisJCXUzMiB2 YWwgPSAocGF0dGVybiA8PCBfX2ZmcyhkZXNjLT5tYXNrKSk7CisKKwkJaWYgKCFjdHgtPm1hcHNb ZGVzYy0+aXBdKQorCQkJcmV0dXJuIC1FTk9ERVY7CisKKwkJLyoKKwkJICogU3RyYXAgcmVnaXN0 ZXJzIGFyZSBjb25maWd1cmVkIGluIGhhcmR3YXJlIG9yIGJ5IGVhcmx5LWJvb3QKKwkJICogZmly bXdhcmUuIFRyZWF0IHRoZW0gYXMgcmVhZC1vbmx5IGRlc3BpdGUgdGhhdCB3ZSBjYW4gd3JpdGUK KwkJICogdGhlbS4gVGhpcyBtYXkgbWVhbiB0aGF0IGNlcnRhaW4gZnVuY3Rpb25zIGNhbm5vdCBi ZQorCQkgKiBkZWNvbmZpZ3VyZWQgYW5kIGlzIHRoZSByZWFzb24gd2UgcmUtZXZhbHVhdGUgYWZ0 ZXIgd3JpdGluZworCQkgKiBhbGwgZGVzY3JpcHRvciBiaXRzLgorCQkgKgorCQkgKiBQb3J0IEQg YW5kIHBvcnQgRSBHUElPIGxvb3BiYWNrIG1vZGVzIGFyZSB0aGUgb25seSBleGNlcHRpb24KKwkJ ICogYXMgdGhvc2UgYXJlIGNvbW1vbmx5IHVzZWQgd2l0aCBmcm9udC1wYW5lbCBidXR0b25zIHRv IGFsbG93CisJCSAqIG5vcm1hbCBvcGVyYXRpb24gb2YgdGhlIGhvc3Qgd2hlbiB0aGUgQk1DIGlz IHBvd2VyZWQgb2ZmIG9yCisJCSAqIGZhaWxzIHRvIGJvb3QuIE9uY2UgdGhlIEJNQyBoYXMgYm9v dGVkLCB0aGUgbG9vcGJhY2sgbW9kZQorCQkgKiBtdXN0IGJlIGRpc2FibGVkIGZvciB0aGUgQk1D IHRvIGNvbnRyb2wgaG9zdCBwb3dlci1vbiBhbmQKKwkJICogcmVzZXQuCisJCSAqLworCQlpZiAo ZGVzYy0+aXAgPT0gQVNQRUVEX0lQX1NDVSAmJiBkZXNjLT5yZWcgPT0gSFdfU1RSQVAxICYmCisJ CSAgICAhKGRlc2MtPm1hc2sgJiAoQklUKDIxKSB8IEJJVCgyMikpKSkKKwkJCWNvbnRpbnVlOwor CisJCWlmIChkZXNjLT5pcCA9PSBBU1BFRURfSVBfU0NVICYmIGRlc2MtPnJlZyA9PSBIV19TVFJB UDIpCisJCQljb250aW51ZTsKKworCQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMoY3R4LT5tYXBz W2Rlc2MtPmlwXSwgZGVzYy0+cmVnLAorCQkJCQkgZGVzYy0+bWFzaywgdmFsKTsKKworCQlpZiAo cmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBhc3BlZWRfc2lnX2V4cHJfZXZhbChj dHgsIGV4cHIsIGVuYWJsZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAo IXJldCkKKwkJcmV0dXJuIC1FUEVSTTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IGFzcGVlZF9waW5tdXhfb3BzIGFzcGVlZF9nNF9vcHMgPSB7CisJLnNldCA9IGFzcGVl ZF9nNF9zaWdfZXhwcl9zZXQsCit9OworCiBzdGF0aWMgc3RydWN0IGFzcGVlZF9waW5jdHJsX2Rh dGEgYXNwZWVkX2c0X3BpbmN0cmxfZGF0YSA9IHsKIAkucGlucyA9IGFzcGVlZF9nNF9waW5zLAog CS5ucGlucyA9IEFSUkFZX1NJWkUoYXNwZWVkX2c0X3BpbnMpLAotCS5ncm91cHMgPSBhc3BlZWRf ZzRfZ3JvdXBzLAotCS5uZ3JvdXBzID0gQVJSQVlfU0laRShhc3BlZWRfZzRfZ3JvdXBzKSwKLQku ZnVuY3Rpb25zID0gYXNwZWVkX2c0X2Z1bmN0aW9ucywKLQkubmZ1bmN0aW9ucyA9IEFSUkFZX1NJ WkUoYXNwZWVkX2c0X2Z1bmN0aW9ucyksCisJLnBpbm11eCA9IHsKKwkJLm9wcyA9ICZhc3BlZWRf ZzRfb3BzLAorCQkuZ3JvdXBzID0gYXNwZWVkX2c0X2dyb3VwcywKKwkJLm5ncm91cHMgPSBBUlJB WV9TSVpFKGFzcGVlZF9nNF9ncm91cHMpLAorCQkuZnVuY3Rpb25zID0gYXNwZWVkX2c0X2Z1bmN0 aW9ucywKKwkJLm5mdW5jdGlvbnMgPSBBUlJBWV9TSVpFKGFzcGVlZF9nNF9mdW5jdGlvbnMpLAor CX0sCiAJLmNvbmZpZ3MgPSBhc3BlZWRfZzRfY29uZmlncywKIAkubmNvbmZpZ3MgPSBBUlJBWV9T SVpFKGFzcGVlZF9nNF9jb25maWdzKSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwv YXNwZWVkL3BpbmN0cmwtYXNwZWVkLWc1LmMgYi9kcml2ZXJzL3BpbmN0cmwvYXNwZWVkL3BpbmN0 cmwtYXNwZWVkLWc1LmMKaW5kZXggYWE3ZTE0OGIzOGJiLi5lMjBlMmEyNTkxNDEgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvcGluY3RybC9hc3BlZWQvcGluY3RybC1hc3BlZWQtZzUuYworKysgYi9kcml2 ZXJzL3BpbmN0cmwvYXNwZWVkL3BpbmN0cmwtYXNwZWVkLWc1LmMKQEAgLTIxLDYgKzIxLDMyIEBA CiAjaW5jbHVkZSAiLi4vcGluY3RybC11dGlscy5oIgogI2luY2x1ZGUgInBpbmN0cmwtYXNwZWVk LmgiCiAKKy8qCisgKiBUaGUgIk11bHRpLWZ1bmN0aW9uIFBpbnMgTWFwcGluZyBhbmQgQ29udHJv bCIgdGFibGUgaW4gdGhlIFNvQyBkYXRhc2hlZXQKKyAqIHJlZmVyZW5jZXMgcmVnaXN0ZXJzIGJ5 IHRoZSBkZXZpY2Uvb2Zmc2V0IG1uZW1vbmljLiBUaGUgcmVnaXN0ZXIgbWFjcm9zCisgKiBiZWxv dyBhcmUgbmFtZWQgdGhlIHNhbWUgd2F5IHRvIGVhc2UgdHJhbnNjcmlwdGlvbiBhbmQgdmVyaWZp Y2F0aW9uIChhcworICogb3Bwb3NlZCB0byBuYW1pbmcgdGhlbSBlLmcuIFBJTk1VWF9DVFJMX1sw LTldKS4gRnVydGhlciwgc2lnbmFsIGV4cHJlc3Npb25zCisgKiByZWZlcmVuY2UgcmVnaXN0ZXJz IGJleW9uZCB0aG9zZSBkZWRpY2F0ZWQgdG8gcGlubXV4LCBzdWNoIGFzIHRoZSBzeXN0ZW0KKyAq IHJlc2V0IGNvbnRyb2wgYW5kIE1BQyBjbG9jayBjb25maWd1cmF0aW9uIHJlZ2lzdGVycy4gVGhl IEFTVDI1MDAgZ29lcyBhIHN0ZXAKKyAqIGZ1cnRoZXIgYW5kIHJlZmVyZW5jZXMgcmVnaXN0ZXJz IGluIHRoZSBncmFwaGljcyBJUCBibG9jay4KKyAqLworI2RlZmluZSBTQ1UyQyAgICAgICAgICAg MHgyQyAvKiBNaXNjLiBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNDVTNDICAgICAgICAg ICAweDNDIC8qIFN5c3RlbSBSZXNldCBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmlu ZSBTQ1U0OCAgICAgICAgICAgMHg0OCAvKiBNQUMgSW50ZXJmYWNlIENsb2NrIERlbGF5IFNldHRp bmcgKi8KKyNkZWZpbmUgSFdfU1RSQVAxICAgICAgIDB4NzAgLyogQVNUMjQwMCBzdHJhcHBpbmcg aXMgMzMgYml0cywgaXMgc3BsaXQgKi8KKyNkZWZpbmUgSFdfUkVWSVNJT05fSUQgIDB4N0MgLyog U2lsaWNvbiByZXZpc2lvbiBJRCByZWdpc3RlciAqLworI2RlZmluZSBTQ1U4MCAgICAgICAgICAg MHg4MCAvKiBNdWx0aS1mdW5jdGlvbiBQaW4gQ29udHJvbCAjMSAqLworI2RlZmluZSBTQ1U4NCAg ICAgICAgICAgMHg4NCAvKiBNdWx0aS1mdW5jdGlvbiBQaW4gQ29udHJvbCAjMiAqLworI2RlZmlu ZSBTQ1U4OCAgICAgICAgICAgMHg4OCAvKiBNdWx0aS1mdW5jdGlvbiBQaW4gQ29udHJvbCAjMyAq LworI2RlZmluZSBTQ1U4QyAgICAgICAgICAgMHg4QyAvKiBNdWx0aS1mdW5jdGlvbiBQaW4gQ29u dHJvbCAjNCAqLworI2RlZmluZSBTQ1U5MCAgICAgICAgICAgMHg5MCAvKiBNdWx0aS1mdW5jdGlv biBQaW4gQ29udHJvbCAjNSAqLworI2RlZmluZSBTQ1U5NCAgICAgICAgICAgMHg5NCAvKiBNdWx0 aS1mdW5jdGlvbiBQaW4gQ29udHJvbCAjNiAqLworI2RlZmluZSBTQ1VBMCAgICAgICAgICAgMHhB MCAvKiBNdWx0aS1mdW5jdGlvbiBQaW4gQ29udHJvbCAjNyAqLworI2RlZmluZSBTQ1VBNCAgICAg ICAgICAgMHhBNCAvKiBNdWx0aS1mdW5jdGlvbiBQaW4gQ29udHJvbCAjOCAqLworI2RlZmluZSBT Q1VBOCAgICAgICAgICAgMHhBOCAvKiBNdWx0aS1mdW5jdGlvbiBQaW4gQ29udHJvbCAjOSAqLwor I2RlZmluZSBTQ1VBQyAgICAgICAgICAgMHhBQyAvKiBNdWx0aS1mdW5jdGlvbiBQaW4gQ29udHJv bCAjMTAgKi8KKyNkZWZpbmUgSFdfU1RSQVAyICAgICAgIDB4RDAgLyogU3RyYXBwaW5nICovCisK ICNkZWZpbmUgQVNQRUVEX0c1X05SX1BJTlMgMjM2CiAKICNkZWZpbmUgQ09ORDEJCXsgQVNQRUVE X0lQX1NDVSwgU0NVOTAsIEJJVCg2KSwgMCwgMCB9CkBAIC0yNDc3LDEzICsyNTAzLDk4IEBAIHN0 YXRpYyBzdHJ1Y3QgYXNwZWVkX3Bpbl9jb25maWcgYXNwZWVkX2c1X2NvbmZpZ3NbXSA9IHsKIAl7 IFBJTl9DT05GSUdfSU5QVVRfREVCT1VOQ0UsIHsgQTIwLCBCMTkgfSwgU0NVQTgsIDI3IH0sCiB9 OwogCisvKioKKyAqIENvbmZpZ3VyZSBhIHBpbidzIHNpZ25hbCBieSBhcHBseWluZyBhbiBleHBy ZXNzaW9uJ3MgZGVzY3JpcHRvciBzdGF0ZSBmb3IKKyAqIGFsbCBkZXNjcmlwdG9ycyBpbiB0aGUg ZXhwcmVzc2lvbi4KKyAqCisgKiBAY3R4OiBUaGUgcGlubXV4IGNvbnRleHQKKyAqIEBleHByOiBU aGUgZXhwcmVzc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGZ1bmN0aW9uIHdob3NlIHNpZ25hbCBp cyB0byBiZQorICogICAgICAgIGNvbmZpZ3VyZWQKKyAqIEBlbmFibGU6IHRydWUgdG8gZW5hYmxl IGFuIGZ1bmN0aW9uJ3Mgc2lnbmFsIHRocm91Z2ggYSBwaW4ncyBzaWduYWwKKyAqICAgICAgICAg IGV4cHJlc3Npb24sIGZhbHNlIHRvIGRpc2FibGUgdGhlIGZ1bmN0aW9uJ3Mgc2lnbmFsCisgKgor ICogUmV0dXJuOiAwIGlmIHRoZSBleHByZXNzaW9uIGlzIGNvbmZpZ3VyZWQgYXMgcmVxdWVzdGVk IGFuZCBhIG5lZ2F0aXZlIGVycm9yCisgKiBjb2RlIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50 IGFzcGVlZF9nNV9zaWdfZXhwcl9zZXQoY29uc3Qgc3RydWN0IGFzcGVlZF9waW5tdXhfZGF0YSAq Y3R4LAorCQkJCSAgY29uc3Qgc3RydWN0IGFzcGVlZF9zaWdfZXhwciAqZXhwciwKKwkJCQkgIGJv b2wgZW5hYmxlKQoreworCWludCByZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZXhw ci0+bmRlc2NzOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGFzcGVlZF9zaWdfZGVzYyAqZGVzYyA9 ICZleHByLT5kZXNjc1tpXTsKKwkJdTMyIHBhdHRlcm4gPSBlbmFibGUgPyBkZXNjLT5lbmFibGUg OiBkZXNjLT5kaXNhYmxlOworCQl1MzIgdmFsID0gKHBhdHRlcm4gPDwgX19mZnMoZGVzYy0+bWFz aykpOworCisJCWlmICghY3R4LT5tYXBzW2Rlc2MtPmlwXSkKKwkJCXJldHVybiAtRU5PREVWOwor CisJCS8qCisJCSAqIFN0cmFwIHJlZ2lzdGVycyBhcmUgY29uZmlndXJlZCBpbiBoYXJkd2FyZSBv ciBieSBlYXJseS1ib290CisJCSAqIGZpcm13YXJlLiBUcmVhdCB0aGVtIGFzIHJlYWQtb25seSBk ZXNwaXRlIHRoYXQgd2UgY2FuIHdyaXRlCisJCSAqIHRoZW0uIFRoaXMgbWF5IG1lYW4gdGhhdCBj ZXJ0YWluIGZ1bmN0aW9ucyBjYW5ub3QgYmUKKwkJICogZGVjb25maWd1cmVkIGFuZCBpcyB0aGUg cmVhc29uIHdlIHJlLWV2YWx1YXRlIGFmdGVyIHdyaXRpbmcKKwkJICogYWxsIGRlc2NyaXB0b3Ig Yml0cy4KKwkJICoKKwkJICogUG9ydCBEIGFuZCBwb3J0IEUgR1BJTyBsb29wYmFjayBtb2RlcyBh cmUgdGhlIG9ubHkgZXhjZXB0aW9uCisJCSAqIGFzIHRob3NlIGFyZSBjb21tb25seSB1c2VkIHdp dGggZnJvbnQtcGFuZWwgYnV0dG9ucyB0byBhbGxvdworCQkgKiBub3JtYWwgb3BlcmF0aW9uIG9m IHRoZSBob3N0IHdoZW4gdGhlIEJNQyBpcyBwb3dlcmVkIG9mZiBvcgorCQkgKiBmYWlscyB0byBi b290LiBPbmNlIHRoZSBCTUMgaGFzIGJvb3RlZCwgdGhlIGxvb3BiYWNrIG1vZGUKKwkJICogbXVz dCBiZSBkaXNhYmxlZCBmb3IgdGhlIEJNQyB0byBjb250cm9sIGhvc3QgcG93ZXItb24gYW5kCisJ CSAqIHJlc2V0LgorCQkgKi8KKwkJaWYgKGRlc2MtPmlwID09IEFTUEVFRF9JUF9TQ1UgJiYgZGVz Yy0+cmVnID09IEhXX1NUUkFQMSAmJgorCQkgICAgIShkZXNjLT5tYXNrICYgKEJJVCgyMSkgfCBC SVQoMjIpKSkpCisJCQljb250aW51ZTsKKworCQlpZiAoZGVzYy0+aXAgPT0gQVNQRUVEX0lQX1ND VSAmJiBkZXNjLT5yZWcgPT0gSFdfU1RSQVAyKQorCQkJY29udGludWU7CisKKwkJLyogT24gQVNU MjUwMCwgU2V0IGJpdHMgaW4gU0NVNzAgYXJlIGNsZWFyZWQgZnJvbSBTQ1U3QyAqLworCQlpZiAo ZGVzYy0+aXAgPT0gQVNQRUVEX0lQX1NDVSAmJiBkZXNjLT5yZWcgPT0gSFdfU1RSQVAxKSB7CisJ CQl1MzIgdmFsdWUgPSB+dmFsICYgZGVzYy0+bWFzazsKKworCQkJaWYgKHZhbHVlKSB7CisJCQkJ cmV0ID0gcmVnbWFwX3dyaXRlKGN0eC0+bWFwc1tkZXNjLT5pcF0sCisJCQkJCQkgICBIV19SRVZJ U0lPTl9JRCwgdmFsdWUpOworCQkJCWlmIChyZXQgPCAwKQorCQkJCQlyZXR1cm4gcmV0OworCQkJ fQorCQl9CisKKwkJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKGN0eC0+bWFwc1tkZXNjLT5pcF0s IGRlc2MtPnJlZywKKwkJCQkJIGRlc2MtPm1hc2ssIHZhbCk7CisKKwkJaWYgKHJldCkKKwkJCXJl dHVybiByZXQ7CisJfQorCisJcmV0ID0gYXNwZWVkX3NpZ19leHByX2V2YWwoY3R4LCBleHByLCBl bmFibGUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKCFyZXQpCisJCXJl dHVybiAtRVBFUk07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhc3Bl ZWRfcGlubXV4X29wcyBhc3BlZWRfZzVfb3BzID0geworCS5zZXQgPSBhc3BlZWRfZzVfc2lnX2V4 cHJfc2V0LAorfTsKKwogc3RhdGljIHN0cnVjdCBhc3BlZWRfcGluY3RybF9kYXRhIGFzcGVlZF9n NV9waW5jdHJsX2RhdGEgPSB7CiAJLnBpbnMgPSBhc3BlZWRfZzVfcGlucywKIAkubnBpbnMgPSBB UlJBWV9TSVpFKGFzcGVlZF9nNV9waW5zKSwKLQkuZ3JvdXBzID0gYXNwZWVkX2c1X2dyb3VwcywK LQkubmdyb3VwcyA9IEFSUkFZX1NJWkUoYXNwZWVkX2c1X2dyb3VwcyksCi0JLmZ1bmN0aW9ucyA9 IGFzcGVlZF9nNV9mdW5jdGlvbnMsCi0JLm5mdW5jdGlvbnMgPSBBUlJBWV9TSVpFKGFzcGVlZF9n NV9mdW5jdGlvbnMpLAorCS5waW5tdXggPSB7CisJCS5vcHMgPSAmYXNwZWVkX2c1X29wcywKKwkJ Lmdyb3VwcyA9IGFzcGVlZF9nNV9ncm91cHMsCisJCS5uZ3JvdXBzID0gQVJSQVlfU0laRShhc3Bl ZWRfZzVfZ3JvdXBzKSwKKwkJLmZ1bmN0aW9ucyA9IGFzcGVlZF9nNV9mdW5jdGlvbnMsCisJCS5u ZnVuY3Rpb25zID0gQVJSQVlfU0laRShhc3BlZWRfZzVfZnVuY3Rpb25zKSwKKwl9LAogCS5jb25m aWdzID0gYXNwZWVkX2c1X2NvbmZpZ3MsCiAJLm5jb25maWdzID0gQVJSQVlfU0laRShhc3BlZWRf ZzVfY29uZmlncyksCiB9OwpAQCAtMjUzOSw3ICsyNjUwLDcgQEAgc3RhdGljIGludCBhc3BlZWRf ZzVfcGluY3RybF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCQlkZXZfd2Fy bigmcGRldi0+ZGV2LCAiTm8gR0ZYIHBoYW5kbGUgZm91bmQsIHNvbWUgbXV4IGNvbmZpZ3VyYXRp b25zIG1heSBmYWlsXG4iKTsKIAkJbWFwID0gTlVMTDsKIAl9Ci0JYXNwZWVkX2c1X3BpbmN0cmxf ZGF0YS5tYXBzW0FTUEVFRF9JUF9HRlhdID0gbWFwOworCWFzcGVlZF9nNV9waW5jdHJsX2RhdGEu cGlubXV4Lm1hcHNbQVNQRUVEX0lQX0dGWF0gPSBtYXA7CiAKIAlub2RlID0gb2ZfcGFyc2VfcGhh bmRsZShwZGV2LT5kZXYub2Zfbm9kZSwgImFzcGVlZCxleHRlcm5hbC1ub2RlcyIsIDEpOwogCWlm IChub2RlKSB7CkBAIC0yNTUzLDcgKzI2NjQsNyBAQCBzdGF0aWMgaW50IGFzcGVlZF9nNV9waW5j dHJsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCW1hcCA9IE5VTEw7CiAJ fQogCW9mX25vZGVfcHV0KG5vZGUpOwotCWFzcGVlZF9nNV9waW5jdHJsX2RhdGEubWFwc1tBU1BF RURfSVBfTFBDXSA9IG1hcDsKKwlhc3BlZWRfZzVfcGluY3RybF9kYXRhLnBpbm11eC5tYXBzW0FT UEVFRF9JUF9MUENdID0gbWFwOwogCiAJcmV0dXJuIGFzcGVlZF9waW5jdHJsX3Byb2JlKHBkZXYs ICZhc3BlZWRfZzVfcGluY3RybF9kZXNjLAogCQkJJmFzcGVlZF9nNV9waW5jdHJsX2RhdGEpOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL2FzcGVlZC9waW5jdHJsLWFzcGVlZC5jIGIvZHJp dmVycy9waW5jdHJsL2FzcGVlZC9waW5jdHJsLWFzcGVlZC5jCmluZGV4IGI1MTBiYjQ3NTg1MS4u MThmNDYxNzdiNGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvYXNwZWVkL3BpbmN0cmwt YXNwZWVkLmMKKysrIGIvZHJpdmVycy9waW5jdHJsL2FzcGVlZC9waW5jdHJsLWFzcGVlZC5jCkBA IC0xLDcgKzEsNSBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0 ZXIKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgSUJNIENvcnAuCi0gKi8KKy8qIENvcHlyaWdo dCAoQykgMjAxNiBJQk0gQ29ycC4gKi8KIAogI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4K ICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KQEAgLTEwLDE3ICs4LDExIEBACiAj aW5jbHVkZSAiLi4vY29yZS5oIgogI2luY2x1ZGUgInBpbmN0cmwtYXNwZWVkLmgiCiAKLXN0YXRp YyBjb25zdCBjaGFyICpjb25zdCBhc3BlZWRfcGlubXV4X2lwc1tdID0gewotCVtBU1BFRURfSVBf U0NVXSA9ICJTQ1UiLAotCVtBU1BFRURfSVBfR0ZYXSA9ICJHRlgiLAotCVtBU1BFRURfSVBfTFBD XSA9ICJMUEMiLAotfTsKLQogaW50IGFzcGVlZF9waW5jdHJsX2dldF9ncm91cHNfY291bnQoc3Ry dWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2KQogewogCXN0cnVjdCBhc3BlZWRfcGluY3RybF9kYXRh ICpwZGF0YSA9IHBpbmN0cmxfZGV2X2dldF9kcnZkYXRhKHBjdGxkZXYpOwogCi0JcmV0dXJuIHBk YXRhLT5uZ3JvdXBzOworCXJldHVybiBwZGF0YS0+cGlubXV4Lm5ncm91cHM7CiB9CiAKIGNvbnN0 IGNoYXIgKmFzcGVlZF9waW5jdHJsX2dldF9ncm91cF9uYW1lKHN0cnVjdCBwaW5jdHJsX2RldiAq cGN0bGRldiwKQEAgLTI4LDcgKzIwLDcgQEAgY29uc3QgY2hhciAqYXNwZWVkX3BpbmN0cmxfZ2V0 X2dyb3VwX25hbWUoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LAogewogCXN0cnVjdCBhc3Bl ZWRfcGluY3RybF9kYXRhICpwZGF0YSA9IHBpbmN0cmxfZGV2X2dldF9kcnZkYXRhKHBjdGxkZXYp OwogCi0JcmV0dXJuIHBkYXRhLT5ncm91cHNbZ3JvdXBdLm5hbWU7CisJcmV0dXJuIHBkYXRhLT5w aW5tdXguZ3JvdXBzW2dyb3VwXS5uYW1lOwogfQogCiBpbnQgYXNwZWVkX3BpbmN0cmxfZ2V0X2dy b3VwX3BpbnMoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LApAQCAtMzcsOCArMjksOCBAQCBp bnQgYXNwZWVkX3BpbmN0cmxfZ2V0X2dyb3VwX3BpbnMoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3Rs ZGV2LAogewogCXN0cnVjdCBhc3BlZWRfcGluY3RybF9kYXRhICpwZGF0YSA9IHBpbmN0cmxfZGV2 X2dldF9kcnZkYXRhKHBjdGxkZXYpOwogCi0JKnBpbnMgPSAmcGRhdGEtPmdyb3Vwc1tncm91cF0u cGluc1swXTsKLQkqbnBpbnMgPSBwZGF0YS0+Z3JvdXBzW2dyb3VwXS5ucGluczsKKwkqcGlucyA9 ICZwZGF0YS0+cGlubXV4Lmdyb3Vwc1tncm91cF0ucGluc1swXTsKKwkqbnBpbnMgPSBwZGF0YS0+ cGlubXV4Lmdyb3Vwc1tncm91cF0ubnBpbnM7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUzLDcgKzQ1 LDcgQEAgaW50IGFzcGVlZF9waW5tdXhfZ2V0X2ZuX2NvdW50KHN0cnVjdCBwaW5jdHJsX2RldiAq cGN0bGRldikKIHsKIAlzdHJ1Y3QgYXNwZWVkX3BpbmN0cmxfZGF0YSAqcGRhdGEgPSBwaW5jdHJs X2Rldl9nZXRfZHJ2ZGF0YShwY3RsZGV2KTsKIAotCXJldHVybiBwZGF0YS0+bmZ1bmN0aW9uczsK KwlyZXR1cm4gcGRhdGEtPnBpbm11eC5uZnVuY3Rpb25zOwogfQogCiBjb25zdCBjaGFyICphc3Bl ZWRfcGlubXV4X2dldF9mbl9uYW1lKHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwKQEAgLTYx LDcgKzUzLDcgQEAgY29uc3QgY2hhciAqYXNwZWVkX3Bpbm11eF9nZXRfZm5fbmFtZShzdHJ1Y3Qg cGluY3RybF9kZXYgKnBjdGxkZXYsCiB7CiAJc3RydWN0IGFzcGVlZF9waW5jdHJsX2RhdGEgKnBk YXRhID0gcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGN0bGRldik7CiAKLQlyZXR1cm4gcGRhdGEt PmZ1bmN0aW9uc1tmdW5jdGlvbl0ubmFtZTsKKwlyZXR1cm4gcGRhdGEtPnBpbm11eC5mdW5jdGlv bnNbZnVuY3Rpb25dLm5hbWU7CiB9CiAKIGludCBhc3BlZWRfcGlubXV4X2dldF9mbl9ncm91cHMo c3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LApAQCAtNzEsMjA4ICs2MywzOCBAQCBpbnQgYXNw ZWVkX3Bpbm11eF9nZXRfZm5fZ3JvdXBzKHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwKIHsK IAlzdHJ1Y3QgYXNwZWVkX3BpbmN0cmxfZGF0YSAqcGRhdGEgPSBwaW5jdHJsX2Rldl9nZXRfZHJ2 ZGF0YShwY3RsZGV2KTsKIAotCSpncm91cHMgPSBwZGF0YS0+ZnVuY3Rpb25zW2Z1bmN0aW9uXS5n cm91cHM7Ci0JKm51bV9ncm91cHMgPSBwZGF0YS0+ZnVuY3Rpb25zW2Z1bmN0aW9uXS5uZ3JvdXBz OworCSpncm91cHMgPSBwZGF0YS0+cGlubXV4LmZ1bmN0aW9uc1tmdW5jdGlvbl0uZ3JvdXBzOwor CSpudW1fZ3JvdXBzID0gcGRhdGEtPnBpbm11eC5mdW5jdGlvbnNbZnVuY3Rpb25dLm5ncm91cHM7 CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFzcGVlZF9zaWdfZGVzY19w cmludF92YWwoCi0JCWNvbnN0IHN0cnVjdCBhc3BlZWRfc2lnX2Rlc2MgKmRlc2MsIGJvb2wgZW5h YmxlLCB1MzIgcnYpCi17Ci0JcHJfZGVidWcoIldhbnQgJXMlWFsweCUwOFhdPTB4JVgsIGdvdCAw eCVYIGZyb20gMHglMDhYXG4iLAotCQkJYXNwZWVkX3Bpbm11eF9pcHNbZGVzYy0+aXBdLCBkZXNj LT5yZWcsCi0JCQlkZXNjLT5tYXNrLCBlbmFibGUgPyBkZXNjLT5lbmFibGUgOiBkZXNjLT5kaXNh YmxlLAotCQkJKHJ2ICYgZGVzYy0+bWFzaykgPj4gX19mZnMoZGVzYy0+bWFzayksIHJ2KTsKLX0K LQotLyoqCi0gKiBRdWVyeSB0aGUgZW5hYmxlZCBvciBkaXNhYmxlZCBzdGF0ZSBvZiBhIHNpZ25h bCBkZXNjcmlwdG9yCi0gKgotICogQGRlc2M6IFRoZSBzaWduYWwgZGVzY3JpcHRvciBvZiBpbnRl cmVzdAotICogQGVuYWJsZWQ6IFRydWUgdG8gcXVlcnkgdGhlIGVuYWJsZWQgc3RhdGUsIGZhbHNl IHRvIHF1ZXJ5IGRpc2FibGVkIHN0YXRlCi0gKiBAbWFwOiBUaGUgSVAgYmxvY2sncyByZWdtYXAg aW5zdGFuY2UKLSAqCi0gKiBSZXR1cm46IDEgaWYgdGhlIGRlc2NyaXB0b3IncyBiaXRmaWVsZCBp cyBjb25maWd1cmVkIHRvIHRoZSBzdGF0ZQotICogc2VsZWN0ZWQgYnkgQGVuYWJsZWQsIDAgaWYg bm90LCBhbmQgbGVzcyB0aGFuIHplcm8gaWYgYW4gdW5yZWNvdmVyYWJsZQotICogZmFpbHVyZSBv Y2N1cnJlZAotICoKLSAqIEV2YWx1YXRpb24gb2YgZGVzY3JpcHRvciBzdGF0ZSBpcyBub24tdHJp dmlhbCBpbiB0aGF0IGl0IGlzIG5vdCBhIGJpbmFyeQotICogb3V0Y29tZTogVGhlIGJpdGZpZWxk cyBjYW4gYmUgZ3JlYXRlciB0aGFuIG9uZSBiaXQgaW4gc2l6ZSBhbmQgdGh1cyBjYW4gdGFrZQot ICogYSB2YWx1ZSB0aGF0IGlzIG5laXRoZXIgdGhlIGVuYWJsZWQgbm9yIGRpc2FibGVkIHN0YXRl IHJlY29yZGVkIGluIHRoZQotICogZGVzY3JpcHRvciAodHlwaWNhbGx5IHRoaXMgbWVhbnMgYSBk aWZmZXJlbnQgZnVuY3Rpb24gdG8gdGhlIG9uZSBvZiBpbnRlcmVzdAotICogaXMgZW5hYmxlZCku IFRodXMgd2UgbXVzdCBleHBsaWNpdGx5IHRlc3QgZm9yIGVpdGhlciBjb25kaXRpb24gYXMgcmVx dWlyZWQuCi0gKi8KLXN0YXRpYyBpbnQgYXNwZWVkX3NpZ19kZXNjX2V2YWwoY29uc3Qgc3RydWN0 IGFzcGVlZF9zaWdfZGVzYyAqZGVzYywKLQkJCQkgYm9vbCBlbmFibGVkLCBzdHJ1Y3QgcmVnbWFw ICptYXApCi17Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBpbnQgcmF3OwotCXUzMiB3YW50OwotCi0J aWYgKCFtYXApCi0JCXJldHVybiAtRU5PREVWOwotCi0JcmV0ID0gcmVnbWFwX3JlYWQobWFwLCBk ZXNjLT5yZWcsICZyYXcpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlhc3BlZWRfc2ln X2Rlc2NfcHJpbnRfdmFsKGRlc2MsIGVuYWJsZWQsIHJhdyk7Ci0Jd2FudCA9IGVuYWJsZWQgPyBk ZXNjLT5lbmFibGUgOiBkZXNjLT5kaXNhYmxlOwotCi0JcmV0dXJuICgocmF3ICYgZGVzYy0+bWFz aykgPj4gX19mZnMoZGVzYy0+bWFzaykpID09IHdhbnQ7Ci19Ci0KLS8qKgotICogUXVlcnkgdGhl IGVuYWJsZWQgb3IgZGlzYWJsZWQgc3RhdGUgZm9yIGEgbXV4IGZ1bmN0aW9uJ3Mgc2lnbmFsIG9u IGEgcGluCi0gKgotICogQGV4cHI6IEFuIGV4cHJlc3Npb24gY29udHJvbGxpbmcgdGhlIHNpZ25h bCBmb3IgYSBtdXggZnVuY3Rpb24gb24gYSBwaW4KLSAqIEBlbmFibGVkOiBUcnVlIHRvIHF1ZXJ5 IHRoZSBlbmFibGVkIHN0YXRlLCBmYWxzZSB0byBxdWVyeSBkaXNhYmxlZCBzdGF0ZQotICogQG1h cHM6IFRoZSBsaXN0IG9mIHJlZ21hcCBpbnN0YW5jZXMKLSAqCi0gKiBSZXR1cm46IDEgaWYgdGhl IGV4cHJlc3Npb24gY29tcG9zZWQgYnkgQGVuYWJsZWQgZXZhbHVhdGVzIHRydWUsIDAgaWYgbm90 LAotICogYW5kIGxlc3MgdGhhbiB6ZXJvIGlmIGFuIHVucmVjb3ZlcmFibGUgZmFpbHVyZSBvY2N1 cnJlZC4KLSAqCi0gKiBBIG11eCBmdW5jdGlvbiBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGlmIHRo ZSBmdW5jdGlvbidzIHNpZ25hbCBleHByZXNzaW9uCi0gKiBmb3IgZWFjaCBwaW4gaW4gdGhlIGZ1 bmN0aW9uJ3MgcGluIGdyb3VwIGV2YWx1YXRlcyB0cnVlIGZvciB0aGUgZGVzaXJlZAotICogc3Rh dGUuIEFuIHNpZ25hbCBleHByZXNzaW9uIGV2YWx1YXRlcyB0cnVlIGlmIGFsbCBvZiBpdHMgYXNz b2NpYXRlZCBzaWduYWwKLSAqIGRlc2NyaXB0b3JzIGV2YWx1YXRlIHRydWUgZm9yIHRoZSBkZXNp cmVkIHN0YXRlLgotICoKLSAqIElmIGFuIGV4cHJlc3Npb24ncyBzdGF0ZSBpcyBkZXNjcmliZWQg YnkgbW9yZSB0aGFuIG9uZSBiaXQsIGVpdGhlciB0aHJvdWdoCi0gKiBtdWx0aS1iaXQgYml0Zmll bGRzIGluIGEgc2luZ2xlIHNpZ25hbCBkZXNjcmlwdG9yIG9yIHRocm91Z2ggbXVsdGlwbGUgc2ln bmFsCi0gKiBkZXNjcmlwdG9ycyBvZiBhIHNpbmdsZSBiaXQgdGhlbiBpdCBpcyBwb3NzaWJsZSBm b3IgdGhlIGV4cHJlc3Npb24gdG8gYmUgaW4KLSAqIG5laXRoZXIgdGhlIGVuYWJsZWQgbm9yIGRp c2FibGVkIHN0YXRlLiBUaHVzIHdlIG11c3QgZXhwbGljaXRseSB0ZXN0IGZvcgotICogZWl0aGVy IGNvbmRpdGlvbiBhcyByZXF1aXJlZC4KLSAqLwotc3RhdGljIGludCBhc3BlZWRfc2lnX2V4cHJf ZXZhbChjb25zdCBzdHJ1Y3QgYXNwZWVkX3NpZ19leHByICpleHByLAotCQkJCSBib29sIGVuYWJs ZWQsIHN0cnVjdCByZWdtYXAgKiBjb25zdCAqbWFwcykKLXsKLQlpbnQgaTsKLQlpbnQgcmV0Owot Ci0JZm9yIChpID0gMDsgaSA8IGV4cHItPm5kZXNjczsgaSsrKSB7Ci0JCWNvbnN0IHN0cnVjdCBh c3BlZWRfc2lnX2Rlc2MgKmRlc2MgPSAmZXhwci0+ZGVzY3NbaV07Ci0KLQkJcmV0ID0gYXNwZWVk X3NpZ19kZXNjX2V2YWwoZGVzYywgZW5hYmxlZCwgbWFwc1tkZXNjLT5pcF0pOwotCQlpZiAocmV0 IDw9IDApCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAxOwotfQotCi0vKioKLSAqIENv bmZpZ3VyZSBhIHBpbidzIHNpZ25hbCBieSBhcHBseWluZyBhbiBleHByZXNzaW9uJ3MgZGVzY3Jp cHRvciBzdGF0ZSBmb3IKLSAqIGFsbCBkZXNjcmlwdG9ycyBpbiB0aGUgZXhwcmVzc2lvbi4KLSAq Ci0gKiBAZXhwcjogVGhlIGV4cHJlc3Npb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBmdW5jdGlvbiB3 aG9zZSBzaWduYWwgaXMgdG8gYmUKLSAqICAgICAgICBjb25maWd1cmVkCi0gKiBAZW5hYmxlOiB0 cnVlIHRvIGVuYWJsZSBhbiBmdW5jdGlvbidzIHNpZ25hbCB0aHJvdWdoIGEgcGluJ3Mgc2lnbmFs Ci0gKiAgICAgICAgICBleHByZXNzaW9uLCBmYWxzZSB0byBkaXNhYmxlIHRoZSBmdW5jdGlvbidz IHNpZ25hbAotICogQG1hcHM6IFRoZSBsaXN0IG9mIHJlZ21hcCBpbnN0YW5jZXMgZm9yIHBpbm11 eCByZWdpc3RlciBhY2Nlc3MuCi0gKgotICogUmV0dXJuOiAwIGlmIHRoZSBleHByZXNzaW9uIGlz IGNvbmZpZ3VyZWQgYXMgcmVxdWVzdGVkIGFuZCBhIG5lZ2F0aXZlIGVycm9yCi0gKiBjb2RlIG90 aGVyd2lzZQotICovCi1zdGF0aWMgaW50IGFzcGVlZF9zaWdfZXhwcl9zZXQoY29uc3Qgc3RydWN0 IGFzcGVlZF9zaWdfZXhwciAqZXhwciwKLQkJCQlib29sIGVuYWJsZSwgc3RydWN0IHJlZ21hcCAq IGNvbnN0ICptYXBzKQotewotCWludCByZXQ7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwg ZXhwci0+bmRlc2NzOyBpKyspIHsKLQkJY29uc3Qgc3RydWN0IGFzcGVlZF9zaWdfZGVzYyAqZGVz YyA9ICZleHByLT5kZXNjc1tpXTsKLQkJdTMyIHBhdHRlcm4gPSBlbmFibGUgPyBkZXNjLT5lbmFi bGUgOiBkZXNjLT5kaXNhYmxlOwotCQl1MzIgdmFsID0gKHBhdHRlcm4gPDwgX19mZnMoZGVzYy0+ bWFzaykpOwotCi0JCWlmICghbWFwc1tkZXNjLT5pcF0pCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQot CQkvKgotCQkgKiBTdHJhcCByZWdpc3RlcnMgYXJlIGNvbmZpZ3VyZWQgaW4gaGFyZHdhcmUgb3Ig YnkgZWFybHktYm9vdAotCQkgKiBmaXJtd2FyZS4gVHJlYXQgdGhlbSBhcyByZWFkLW9ubHkgZGVz cGl0ZSB0aGF0IHdlIGNhbiB3cml0ZQotCQkgKiB0aGVtLiBUaGlzIG1heSBtZWFuIHRoYXQgY2Vy dGFpbiBmdW5jdGlvbnMgY2Fubm90IGJlCi0JCSAqIGRlY29uZmlndXJlZCBhbmQgaXMgdGhlIHJl YXNvbiB3ZSByZS1ldmFsdWF0ZSBhZnRlciB3cml0aW5nCi0JCSAqIGFsbCBkZXNjcmlwdG9yIGJp dHMuCi0JCSAqCi0JCSAqIFBvcnQgRCBhbmQgcG9ydCBFIEdQSU8gbG9vcGJhY2sgbW9kZXMgYXJl IHRoZSBvbmx5IGV4Y2VwdGlvbgotCQkgKiBhcyB0aG9zZSBhcmUgY29tbW9ubHkgdXNlZCB3aXRo IGZyb250LXBhbmVsIGJ1dHRvbnMgdG8gYWxsb3cKLQkJICogbm9ybWFsIG9wZXJhdGlvbiBvZiB0 aGUgaG9zdCB3aGVuIHRoZSBCTUMgaXMgcG93ZXJlZCBvZmYgb3IKLQkJICogZmFpbHMgdG8gYm9v dC4gT25jZSB0aGUgQk1DIGhhcyBib290ZWQsIHRoZSBsb29wYmFjayBtb2RlCi0JCSAqIG11c3Qg YmUgZGlzYWJsZWQgZm9yIHRoZSBCTUMgdG8gY29udHJvbCBob3N0IHBvd2VyLW9uIGFuZAotCQkg KiByZXNldC4KLQkJICovCi0JCWlmIChkZXNjLT5pcCA9PSBBU1BFRURfSVBfU0NVICYmIGRlc2Mt PnJlZyA9PSBIV19TVFJBUDEgJiYKLQkJICAgICEoZGVzYy0+bWFzayAmIChCSVQoMjEpIHwgQklU KDIyKSkpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGRlc2MtPmlwID09IEFTUEVFRF9JUF9TQ1Ug JiYgZGVzYy0+cmVnID09IEhXX1NUUkFQMikKLQkJCWNvbnRpbnVlOwotCi0JCS8qIE9uIEFTVDI1 MDAsIFNldCBiaXRzIGluIFNDVTcwIGFyZSBjbGVhcmVkIGZyb20gU0NVN0MgKi8KLQkJaWYgKGRl c2MtPmlwID09IEFTUEVFRF9JUF9TQ1UgJiYgZGVzYy0+cmVnID09IEhXX1NUUkFQMSkgewotCQkJ dW5zaWduZWQgaW50IHJldl9pZDsKLQotCQkJcmV0ID0gcmVnbWFwX3JlYWQobWFwc1tBU1BFRURf SVBfU0NVXSwKLQkJCQlIV19SRVZJU0lPTl9JRCwgJnJldl9pZCk7Ci0JCQlpZiAocmV0IDwgMCkK LQkJCQlyZXR1cm4gcmV0OwotCi0JCQlpZiAoMHgwNCA9PSAocmV2X2lkID4+IDI0KSkgewotCQkJ CXUzMiB2YWx1ZSA9IH52YWwgJiBkZXNjLT5tYXNrOwotCi0JCQkJaWYgKHZhbHVlKSB7Ci0JCQkJ CXJldCA9IHJlZ21hcF93cml0ZShtYXBzW2Rlc2MtPmlwXSwKLQkJCQkJCUhXX1JFVklTSU9OX0lE LCB2YWx1ZSk7Ci0JCQkJCWlmIChyZXQgPCAwKQotCQkJCQkJcmV0dXJuIHJldDsKLQkJCQl9Ci0J CQl9Ci0JCX0KLQotCQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMobWFwc1tkZXNjLT5pcF0sIGRl c2MtPnJlZywKLQkJCQkJIGRlc2MtPm1hc2ssIHZhbCk7Ci0KLQkJaWYgKHJldCkKLQkJCXJldHVy biByZXQ7Ci0JfQotCi0JcmV0ID0gYXNwZWVkX3NpZ19leHByX2V2YWwoZXhwciwgZW5hYmxlLCBt YXBzKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCWlmICghcmV0KQotCQlyZXR1 cm4gLUVQRVJNOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXNwZWVkX3NpZ19leHBy X2VuYWJsZShjb25zdCBzdHJ1Y3QgYXNwZWVkX3NpZ19leHByICpleHByLAotCQkJCSAgIHN0cnVj dCByZWdtYXAgKiBjb25zdCAqbWFwcykKK3N0YXRpYyBpbnQgYXNwZWVkX3NpZ19leHByX2VuYWJs ZShjb25zdCBzdHJ1Y3QgYXNwZWVkX3Bpbm11eF9kYXRhICpjdHgsCisJCQkJICBjb25zdCBzdHJ1 Y3QgYXNwZWVkX3NpZ19leHByICpleHByKQogewogCWludCByZXQ7CiAKLQlyZXQgPSBhc3BlZWRf c2lnX2V4cHJfZXZhbChleHByLCB0cnVlLCBtYXBzKTsKKwlyZXQgPSBhc3BlZWRfc2lnX2V4cHJf ZXZhbChjdHgsIGV4cHIsIHRydWUpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJ aWYgKCFyZXQpCi0JCXJldHVybiBhc3BlZWRfc2lnX2V4cHJfc2V0KGV4cHIsIHRydWUsIG1hcHMp OworCQlyZXR1cm4gYXNwZWVkX3NpZ19leHByX3NldChjdHgsIGV4cHIsIHRydWUpOwogCiAJcmV0 dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXNwZWVkX3NpZ19leHByX2Rpc2FibGUoY29uc3Qgc3Ry dWN0IGFzcGVlZF9zaWdfZXhwciAqZXhwciwKLQkJCQkgICAgc3RydWN0IHJlZ21hcCAqIGNvbnN0 ICptYXBzKQorc3RhdGljIGludCBhc3BlZWRfc2lnX2V4cHJfZGlzYWJsZShjb25zdCBzdHJ1Y3Qg YXNwZWVkX3Bpbm11eF9kYXRhICpjdHgsCisJCQkJICAgY29uc3Qgc3RydWN0IGFzcGVlZF9zaWdf ZXhwciAqZXhwcikKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gYXNwZWVkX3NpZ19leHByX2V2YWwo ZXhwciwgdHJ1ZSwgbWFwcyk7CisJcmV0ID0gYXNwZWVkX3NpZ19leHByX2V2YWwoY3R4LCBleHBy LCB0cnVlKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAogCWlmIChyZXQpCi0JCXJl dHVybiBhc3BlZWRfc2lnX2V4cHJfc2V0KGV4cHIsIGZhbHNlLCBtYXBzKTsKKwkJcmV0dXJuIGFz cGVlZF9zaWdfZXhwcl9zZXQoY3R4LCBleHByLCBmYWxzZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAg LTI4MCwxMyArMTAyLDEzIEBAIHN0YXRpYyBpbnQgYXNwZWVkX3NpZ19leHByX2Rpc2FibGUoY29u c3Qgc3RydWN0IGFzcGVlZF9zaWdfZXhwciAqZXhwciwKIC8qKgogICogRGlzYWJsZSBhIHNpZ25h bCBvbiBhIHBpbiBieSBkaXNhYmxpbmcgYWxsIHByb3ZpZGVkIHNpZ25hbCBleHByZXNzaW9ucy4K ICAqCisgKiBAY3R4OiBUaGUgcGlubXV4IGNvbnRleHQKICAqIEBleHByczogVGhlIGxpc3Qgb2Yg c2lnbmFsIGV4cHJlc3Npb25zIChmcm9tIGEgcHJpb3JpdHkgbGV2ZWwgb24gYSBwaW4pCi0gKiBA bWFwczogVGhlIGxpc3Qgb2YgcmVnbWFwIGluc3RhbmNlcyBmb3IgcGlubXV4IHJlZ2lzdGVyIGFj Y2Vzcy4KICAqCiAgKiBSZXR1cm46IDAgaWYgYWxsIGV4cHJlc3Npb25zIGFyZSBkaXNhYmxlZCwg b3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJyb3IgY29kZQogICovCi1zdGF0aWMgaW50IGFzcGVlZF9k aXNhYmxlX3NpZyhjb25zdCBzdHJ1Y3QgYXNwZWVkX3NpZ19leHByICoqZXhwcnMsCi0JCQkgICAg ICAgc3RydWN0IHJlZ21hcCAqIGNvbnN0ICptYXBzKQorc3RhdGljIGludCBhc3BlZWRfZGlzYWJs ZV9zaWcoY29uc3Qgc3RydWN0IGFzcGVlZF9waW5tdXhfZGF0YSAqY3R4LAorCQkJICAgICAgY29u c3Qgc3RydWN0IGFzcGVlZF9zaWdfZXhwciAqKmV4cHJzKQogewogCWludCByZXQgPSAwOwogCkBA IC0yOTQsNyArMTE2LDcgQEAgc3RhdGljIGludCBhc3BlZWRfZGlzYWJsZV9zaWcoY29uc3Qgc3Ry dWN0IGFzcGVlZF9zaWdfZXhwciAqKmV4cHJzLAogCQlyZXR1cm4gdHJ1ZTsKIAogCXdoaWxlICgq ZXhwcnMgJiYgIXJldCkgewotCQlyZXQgPSBhc3BlZWRfc2lnX2V4cHJfZGlzYWJsZSgqZXhwcnMs IG1hcHMpOworCQlyZXQgPSBhc3BlZWRfc2lnX2V4cHJfZGlzYWJsZShjdHgsICpleHBycyk7CiAJ CWV4cHJzKys7CiAJfQogCkBAIC0zOTUsOSArMjE3LDkgQEAgaW50IGFzcGVlZF9waW5tdXhfc2V0 X211eChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwK IAlpbnQgcmV0OwogCWNvbnN0IHN0cnVjdCBhc3BlZWRfcGluY3RybF9kYXRhICpwZGF0YSA9CiAJ CXBpbmN0cmxfZGV2X2dldF9kcnZkYXRhKHBjdGxkZXYpOwotCWNvbnN0IHN0cnVjdCBhc3BlZWRf cGluX2dyb3VwICpwZ3JvdXAgPSAmcGRhdGEtPmdyb3Vwc1tncm91cF07CisJY29uc3Qgc3RydWN0 IGFzcGVlZF9waW5fZ3JvdXAgKnBncm91cCA9ICZwZGF0YS0+cGlubXV4Lmdyb3Vwc1tncm91cF07 CiAJY29uc3Qgc3RydWN0IGFzcGVlZF9waW5fZnVuY3Rpb24gKnBmdW5jID0KLQkJJnBkYXRhLT5m dW5jdGlvbnNbZnVuY3Rpb25dOworCQkmcGRhdGEtPnBpbm11eC5mdW5jdGlvbnNbZnVuY3Rpb25d OwogCiAJZm9yIChpID0gMDsgaSA8IHBncm91cC0+bnBpbnM7IGkrKykgewogCQlpbnQgcGluID0g cGdyb3VwLT5waW5zW2ldOwpAQCAtNDIzLDcgKzI0NSw3IEBAIGludCBhc3BlZWRfcGlubXV4X3Nl dF9tdXgoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24s CiAJCQlpZiAoZXhwcikKIAkJCQlicmVhazsKIAotCQkJcmV0ID0gYXNwZWVkX2Rpc2FibGVfc2ln KGZ1bmNzLCBwZGF0YS0+bWFwcyk7CisJCQlyZXQgPSBhc3BlZWRfZGlzYWJsZV9zaWcoJnBkYXRh LT5waW5tdXgsIGZ1bmNzKTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKIApAQCAtNDQz LDcgKzI2NSw3IEBAIGludCBhc3BlZWRfcGlubXV4X3NldF9tdXgoc3RydWN0IHBpbmN0cmxfZGV2 ICpwY3RsZGV2LCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sCiAJCQlyZXR1cm4gLUVOWElPOwogCQl9 CiAKLQkJcmV0ID0gYXNwZWVkX3NpZ19leHByX2VuYWJsZShleHByLCBwZGF0YS0+bWFwcyk7CisJ CXJldCA9IGFzcGVlZF9zaWdfZXhwcl9lbmFibGUoJnBkYXRhLT5waW5tdXgsIGV4cHIpOwogCQlp ZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAl9CkBAIC01MDAsNyArMzIyLDcgQEAgaW50IGFzcGVl ZF9ncGlvX3JlcXVlc3RfZW5hYmxlKHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwKIAkJaWYg KGFzcGVlZF9ncGlvX2luX2V4cHJzKGZ1bmNzKSkKIAkJCWJyZWFrOwogCi0JCXJldCA9IGFzcGVl ZF9kaXNhYmxlX3NpZyhmdW5jcywgcGRhdGEtPm1hcHMpOworCQlyZXQgPSBhc3BlZWRfZGlzYWJs ZV9zaWcoJnBkYXRhLT5waW5tdXgsIGZ1bmNzKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7 CiAKQEAgLTUzMSw3ICszNTMsNyBAQCBpbnQgYXNwZWVkX2dwaW9fcmVxdWVzdF9lbmFibGUoc3Ry dWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LAogCSAqIElmIEdQSU8gaXMgbm90IHRoZSBsb3dlc3Qg cHJpb3JpdHkgc2lnbmFsIHR5cGUsIGFzc3VtZSB0aGVyZSBpcyBvbmx5CiAJICogb25lIGV4cHJl c3Npb24gZGVmaW5lZCB0byBlbmFibGUgdGhlIEdQSU8gZnVuY3Rpb24KIAkgKi8KLQlyZXR1cm4g YXNwZWVkX3NpZ19leHByX2VuYWJsZShleHByLCBwZGF0YS0+bWFwcyk7CisJcmV0dXJuIGFzcGVl ZF9zaWdfZXhwcl9lbmFibGUoJnBkYXRhLT5waW5tdXgsIGV4cHIpOwogfQogCiBpbnQgYXNwZWVk X3BpbmN0cmxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKQEAgLTU0NywxMiAr MzY5LDE0IEBAIGludCBhc3BlZWRfcGluY3RybF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2LAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlwZGF0YS0+bWFwc1tBU1BFRURfSVBf U0NVXSA9IHN5c2Nvbl9ub2RlX3RvX3JlZ21hcChwYXJlbnQtPm9mX25vZGUpOwotCWlmIChJU19F UlIocGRhdGEtPm1hcHNbQVNQRUVEX0lQX1NDVV0pKSB7CisJcGRhdGEtPnNjdSA9IHN5c2Nvbl9u b2RlX3RvX3JlZ21hcChwYXJlbnQtPm9mX25vZGUpOworCWlmIChJU19FUlIocGRhdGEtPnNjdSkp IHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gcmVnbWFwIGZvciBzeXNjb24gcGluY29udHJv bGxlciBwYXJlbnRcbiIpOwotCQlyZXR1cm4gUFRSX0VSUihwZGF0YS0+bWFwc1tBU1BFRURfSVBf U0NVXSk7CisJCXJldHVybiBQVFJfRVJSKHBkYXRhLT5zY3UpOwogCX0KIAorCXBkYXRhLT5waW5t dXgubWFwc1tBU1BFRURfSVBfU0NVXSA9IHBkYXRhLT5zY3U7CisKIAlwY3RsID0gcGluY3RybF9y ZWdpc3RlcihwZGVzYywgJnBkZXYtPmRldiwgcGRhdGEpOwogCiAJaWYgKElTX0VSUihwY3RsKSkg ewpAQCAtNTg3LDcgKzQxMSw5IEBAIHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGFzcGVlZF9w aW5fY29uZmlnICpmaW5kX3BpbmNvbmZfY29uZmlnKAogCXJldHVybiBOVUxMOwogfQogCi0vKioK Ky8qCisgKiBBc3BlZWQgcGluIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRpb24uCisgKgogICogQHBh cmFtOiBwaW5jb25mIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyCiAgKiBAYXJnOiBUaGUgc3VwcG9y dGVkIGFyZ3VtZW50IGZvciBAcGFyYW0sIG9yIC0xIGlmIGFueSB2YWx1ZSBpcyBzdXBwb3J0ZWQK ICAqIEB2YWw6IFRoZSByZWdpc3RlciB2YWx1ZSB0byB3cml0ZSB0byBjb25maWd1cmUgQGFyZyBm b3IgQHBhcmFtCkBAIC02NjEsNyArNDg3LDcgQEAgaW50IGFzcGVlZF9waW5fY29uZmlnX2dldChz dHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsIHVuc2lnbmVkIGludCBvZmZzZXQsCiAJaWYgKCFw Y29uZikKIAkJcmV0dXJuIC1FTk9UU1VQUDsKIAotCXJjID0gcmVnbWFwX3JlYWQocGRhdGEtPm1h cHNbQVNQRUVEX0lQX1NDVV0sIHBjb25mLT5yZWcsICZ2YWwpOworCXJjID0gcmVnbWFwX3JlYWQo cGRhdGEtPnNjdSwgcGNvbmYtPnJlZywgJnZhbCk7CiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJj OwogCkBAIC03MTYsOCArNTQyLDggQEAgaW50IGFzcGVlZF9waW5fY29uZmlnX3NldChzdHJ1Y3Qg cGluY3RybF9kZXYgKnBjdGxkZXYsIHVuc2lnbmVkIGludCBvZmZzZXQsCiAKIAkJdmFsID0gcG1h cC0+dmFsIDw8IHBjb25mLT5iaXQ7CiAKLQkJcmMgPSByZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEt Pm1hcHNbQVNQRUVEX0lQX1NDVV0sIHBjb25mLT5yZWcsCi0JCQkJQklUKHBjb25mLT5iaXQpLCB2 YWwpOworCQlyYyA9IHJlZ21hcF91cGRhdGVfYml0cyhwZGF0YS0+c2N1LCBwY29uZi0+cmVnLAor CQkJCQlCSVQocGNvbmYtPmJpdCksIHZhbCk7CiAKIAkJaWYgKHJjIDwgMCkKIAkJCXJldHVybiBy YzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9hc3BlZWQvcGluY3RybC1hc3BlZWQuaCBi L2RyaXZlcnMvcGluY3RybC9hc3BlZWQvcGluY3RybC1hc3BlZWQuaAppbmRleCBjNTkxOGM0YTA4 N2MuLjExY2MwZWI2NjY2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL2FzcGVlZC9waW5j dHJsLWFzcGVlZC5oCisrKyBiL2RyaXZlcnMvcGluY3RybC9hc3BlZWQvcGluY3RybC1hc3BlZWQu aApAQCAtMSw1MTQgKzEsMTUgQEAKIC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w LW9yLWxhdGVyICovCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IElCTSBDb3JwLgotICovCisv KiBDb3B5cmlnaHQgKEMpIDIwMTYsMjAxOSBJQk0gQ29ycC4gKi8KIAogI2lmbmRlZiBQSU5DVFJM X0FTUEVFRAogI2RlZmluZSBQSU5DVFJMX0FTUEVFRAogCisjaW5jbHVkZSAicGlubXV4LWFzcGVl ZC5oIgorCiAjaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5jdHJsLmg+CiAjaW5jbHVkZSA8bGlu dXgvcGluY3RybC9waW5tdXguaD4KICNpbmNsdWRlIDxsaW51eC9waW5jdHJsL3BpbmNvbmYuaD4K ICNpbmNsdWRlIDxsaW51eC9waW5jdHJsL3BpbmNvbmYtZ2VuZXJpYy5oPgotI2luY2x1ZGUgPGxp bnV4L3JlZ21hcC5oPgotCi0vKgotICogVGhlIEFTUEVFRCBTb0NzIHByb3ZpZGUgdHlwaWNhbGx5 IG1vcmUgdGhhbiAyMDAgcGlucyBmb3IgR1BJTyBhbmQgb3RoZXIKLSAqIGZ1bmN0aW9ucy4gVGhl IFNvQyBmdW5jdGlvbiBlbmFibGVkIG9uIGEgcGluIGlzIGRldGVybWluZWQgb24gYSBwcmlvcml0 eQotICogYmFzaXMgd2hlcmUgYSBnaXZlbiBwaW4gY2FuIHByb3ZpZGUgYSBudW1iZXIgb2YgZGlm ZmVyZW50IHNpZ25hbCB0eXBlcy4KLSAqCi0gKiBUaGUgc2lnbmFsIGFjdGl2ZSBvbiBhIHBpbiBp cyBkZXNjcmliZWQgYnkgYm90aCBhIHByaW9yaXR5IGxldmVsIGFuZAotICogY29tcG91bmQgbG9n aWNhbCBleHByZXNzaW9ucyBpbnZvbHZpbmcgbXVsdGlwbGUgb3BlcmF0b3JzLCByZWdpc3RlcnMg YW5kCi0gKiBiaXRzLiBTb21lIGRpZmZpY3VsdHkgYXJpc2VzIGFzIHRoZSBwaW4ncyBmdW5jdGlv biBiaXQgbWFza3MgZm9yIGVhY2gKLSAqIHByaW9yaXR5IGxldmVsIGFyZSBmcmVxdWVudGx5IG5v dCB0aGUgc2FtZSAoaS5lLiBjYW5ub3QganVzdCBmbGlwIGEgYml0IHRvCi0gKiBjaGFuZ2UgZnJv bSBhIGhpZ2ggdG8gbG93IHByaW9yaXR5IHNpZ25hbCksIG9yIGV2ZW4gaW4gdGhlIHNhbWUgcmVn aXN0ZXIuCi0gKiBGdXJ0aGVyLCBub3QgYWxsIHNpZ25hbHMgY2FuIGJlIHVubXV4ZWQsIGFzIHNv bWUgZXhwcmVzc2lvbnMgZGVwZW5kIG9uCi0gKiB2YWx1ZXMgaW4gdGhlIGhhcmR3YXJlIHN0cmFw cGluZyByZWdpc3RlciAod2hpY2ggaXMgdHJlYXRlZCBhcyByZWFkLW9ubHkpLgotICoKLSAqIFNv QyBNdWx0aS1mdW5jdGlvbiBQaW4gRXhwcmVzc2lvbiBFeGFtcGxlcwotICogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogSGVyZSBhcmUgc29tZSBzYW1w bGUgbXV4IGNvbmZpZ3VyYXRpb25zIGZyb20gdGhlIEFTVDI0MDAgYW5kIEFTVDI1MDAKLSAqIGRh dGFzaGVldHMgdG8gaWxsdXN0cmF0ZSB0aGUgY29ybmVyIGNhc2VzLCByb3VnaGx5IGluIG9yZGVy IG9mIGxlYXN0IHRvIG1vc3QKLSAqIGNvcm5lci4gVGhlIHNpZ25hbCBwcmlvcml0aWVzIGFyZSBp biBkZWNlbmRpbmcgb3JkZXIgZnJvbSBQMCAoaGlnaGVzdCkuCi0gKgotICogRDYgaXMgYSBwaW4g d2l0aCBhIHNpbmdsZSBmdW5jdGlvbiAoYmVzaWRlIEdQSU8pOyBhIGhpZ2ggcHJpb3JpdHkgc2ln bmFsCi0gKiB0aGF0IHBhcnRpY2lwYXRlcyBpbiBvbmUgZnVuY3Rpb246Ci0gKgotICogQmFsbCB8 IERlZmF1bHQgfCBQMCBTaWduYWwgfCBQMCBFeHByZXNzaW9uICAgICAgICAgICAgICAgfCBQMSBT aWduYWwgfCBQMSBFeHByZXNzaW9uIHwgT3RoZXIKLSAqIC0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotICogIEQ2ICAgIEdQSU9BMCAgICBNQUMxTElOSyAgICBTQ1U4MFsw XT0xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT0Ew Ci0gKiAtLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSAqCi0gKiBDNSBp cyBhIG11bHRpLXNpZ25hbCBwaW4gKGhpZ2ggYW5kIGxvdyBwcmlvcml0eSBzaWduYWxzKS4gSGVy ZSB3ZSB0b3VjaAotICogZGlmZmVyZW50IHJlZ2lzdGVycyBmb3IgdGhlIGRpZmZlcmVudCBmdW5j dGlvbnMgdGhhdCBlbmFibGUgZWFjaCBzaWduYWw6Ci0gKgotICogLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gKiAgQzUgICAgR1BJT0E0ICAgIFNDTDkgICAgICAgIFND VTkwWzIyXT0xICAgICAgICAgICAgICAgICAgIFRJTUVSNSAgICAgIFNDVTgwWzRdPTEgICAgICBH UElPQTQKLSAqIC0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotICoKLSAq IEUxOSBpcyBhIHNpbmdsZS1zaWduYWwgcGluIHdpdGggdHdvIGZ1bmN0aW9ucyB0aGF0IGluZmx1 ZW5jZSB0aGUgYWN0aXZlCi0gKiBzaWduYWwuIEluIHRoaXMgY2FzZSBib3RoIGJpdHMgaGF2ZSB0 aGUgc2FtZSBtZWFuaW5nIC0gZW5hYmxlIGEgZGVkaWNhdGVkCi0gKiBMUEMgcmVzZXQgcGluLiBI b3dldmVyIGl0J3Mgbm90IGFsd2F5cyB0aGUgY2FzZSB0aGF0IHRoZSBiaXRzIGluIHRoZQotICog T1ItcmVsYXRpb25zaGlwIGhhdmUgdGhlIHNhbWUgbWVhbmluZy4KLSAqCi0gKiAtLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSAqICBFMTkgICBHUElPQjQgICAgTFBDUlNU IyAgICAgU0NVODBbMTJdPTEgfCBTdHJhcFsxNF09MSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdQSU9CNAotICogLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gKgotICogRm9yIGV4YW1wbGUsIHBpbiBCMTkgaGFzIGEgbG93LXByaW9yaXR5IHNpZ25hbCB0 aGF0J3MgZW5hYmxlZCBieSB0d28KLSAqIGRpc3RpbmN0IFNvQyBmdW5jdGlvbnM6IEEgc3BlY2lm aWMgU0lPUEJJIGJpdCBpbiByZWdpc3RlciBTQ1VBNCwgYW5kIGFuIEFDUEkKLSAqIGJpdCBpbiB0 aGUgU1RSQVAgcmVnaXN0ZXIuIFRoZSBBQ1BJIGJpdCBjb25maWd1cmVzIHNpZ25hbHMgb24gcGlu cyBpbgotICogYWRkaXRpb24gdG8gQjE5LiBCb3RoIG9mIHRoZSBsb3cgcHJpb3JpdHkgZnVuY3Rp b25zIGFzIHdlbGwgYXMgdGhlIGhpZ2gKLSAqIHByaW9yaXR5IGZ1bmN0aW9uIG11c3QgYmUgZGlz YWJsZWQgZm9yIEdQSU9GMSB0byBiZSB1c2VkLgotICoKLSAqIEJhbGwgfCBEZWZhdWx0IHwgUDAg U2lnbmFsIHwgUDAgRXhwcmVzc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUDEgU2ln bmFsIHwgUDEgRXhwcmVzc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPdGhlcgotICog LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotICogIEIxOSAgIEdQSU9GMSAgICBORENENCAgICAgICBTQ1U4 MFsyNV09MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSU9QQkkjICAgICBTQ1VBNFsx Ml09MSB8IFN0cmFwWzE5XT0wICAgICAgICAgICAgICAgIEdQSU9GMQotICogLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotICoKLSAqIEZvciBwaW4gRTE4LCB0aGUgU29DIEFORHMgdGhlIGV4cGVjdGVkIHN0 YXRlIG9mIHRocmVlIGJpdHMgdG8gZGV0ZXJtaW5lIHRoZQotICogcGluJ3MgYWN0aXZlIHNpZ25h bDoKLSAqCi0gKiAqIFNDVTNDWzNdOiBFbmFibGUgZXh0ZXJuYWwgU09DIHJlc2V0IGZ1bmN0aW9u Ci0gKiAqIFNDVTgwWzE1XTogRW5hYmxlIFNQSUNTMSMgb3IgRVhUUlNUIyBmdW5jdGlvbiBwaW4K LSAqICogU0NVOTBbMzFdOiBTZWxlY3QgU1BJIGludGVyZmFjZSBDUyMgb3V0cHV0Ci0gKgotICog LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotICogIEUxOCAgIEdQSU9CNyAgICBFWFRSU1QjICAgICBTQ1Uz Q1szXT0xICYgU0NVODBbMTVdPTEgJiBTQ1U5MFszMV09MCAgICBTUElDUzEjICAgICBTQ1UzQ1sz XT0xICYgU0NVODBbMTVdPTEgJiBTQ1U5MFszMV09MSAgIEdQSU9CNwotICogLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotICoKLSAqIChCaXRzIFNDVTNDWzNdIGFuZCBTQ1U4MFsxNV0gYXBwZWFyIHRvIG9u bHkgYmUgdXNlZCBpbiB0aGUgZXhwcmVzc2lvbnMgZm9yCi0gKiBzZWxlY3RpbmcgdGhlIHNpZ25h bHMgb24gcGluIEUxOCkKLSAqCi0gKiBQaW4gVDUgaXMgYSBtdWx0aS1zaWduYWwgcGluIHdpdGgg YSBtb3JlIGNvbXBsZXggY29uZmlndXJhdGlvbjoKLSAqCi0gKiBCYWxsIHwgRGVmYXVsdCB8IFAw IFNpZ25hbCB8IFAwIEV4cHJlc3Npb24gICAgICAgICAgICAgICAgfCBQMSBTaWduYWwgfCBQMSBF eHByZXNzaW9uIHwgT3RoZXIKLSAqIC0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSAqICBUNSAgICBHUElPTDEgICAgVlBJREUgICAgICAgU0NVOTBbNTo0XSE9MCAmIFND VTg0WzE3XT0xICAgIE5EQ0QxICAgICAgIFNDVTg0WzE3XT0xICAgICBHUElPTDEKLSAqIC0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSAqCi0gKiBUaGUgaGlnaCBwcmlv cml0eSBzaWduYWwgY29uZmlndXJhdGlvbiBpcyBiZXN0IHRob3VnaHQgb2YgaW4gdGVybXMgb2Yg aXRzCi0gKiBleHBsb2RlZCBmb3JtLCB3aXRoIHJlZmVyZW5jZSB0byB0aGUgU0NVOTBbNTo0XSBi aXRzOgotICoKLSAqICogU0NVOTBbNTo0XT0wMDogZGlzYWJsZQotICogKiBTQ1U5MFs1OjRdPTAx OiAxOCBiaXRzIChSNi9HNi9CNikgdmlkZW8gbW9kZS4KLSAqICogU0NVOTBbNTo0XT0xMDogMjQg Yml0cyAoUjgvRzgvQjgpIHZpZGVvIG1vZGUuCi0gKiAqIFNDVTkwWzU6NF09MTE6IDMwIGJpdHMg KFIxMC9HMTAvQjEwKSB2aWRlbyBtb2RlLgotICoKLSAqIFJlLXdyaXRpbmc6Ci0gKgotICogLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotICogIFQ1ICAgIEdQSU9MMSAg ICBWUElERSAgICAgIChTQ1U5MFs1OjRdPTEgJiBTQ1U4NFsxN109MSkgICAgTkRDRDEgICAgICAg U0NVODRbMTddPTEgICAgIEdQSU9MMQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg KFNDVTkwWzU6NF09MiAmIFNDVTg0WzE3XT0xKQotICogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgKFNDVTkwWzU6NF09MyAmIFNDVTg0WzE3XT0xKQotICogLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotICoKLSAqIEZvciByZWZlcmVuY2UgdGhlIFNDVTg0WzE3 XSBiaXQgY29uZmlndXJlIHRoZSAiVUFSVDEgTkRDRDEgb3IgVmlkZW8gVlBJREUKLSAqIGZ1bmN0 aW9uIHBpbiIsIHdoZXJlIHRoZSBzaWduYWwgaXRzZWxmIGlzIGRldGVybWluZWQgYnkgd2hldGhl ciBTQ1U5NFs1OjRdCi0gKiBpcyBkaXNhYmxlZCBvciBpbiBvbmUgb2YgdGhlIDE4LCAyNCBvciAz MGJpdCB2aWRlbyBtb2Rlcy4KLSAqCi0gKiBPdGhlciB2aWRlby1pbnB1dC1yZWxhdGVkIHBpbnMg cmVxdWlyZSBhbiBleHBsaWNpdCBzdGF0ZSBpbiBTQ1U5MFs1OjRdLCBlLmcuCi0gKiBXMSBhbmQg VTU6Ci0gKgotICogLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotICog IFcxICAgIEdQSU9MNiAgICBWUElCMCAgICAgICBTQ1U5MFs1OjRdPTMgJiBTQ1U4NFsyMl09MSAg ICAgVFhEMSAgICAgICAgU0NVODRbMjJdPTEgICAgIEdQSU9MNgotICogIFU1ICAgIEdQSU9MNyAg ICBWUElCMSAgICAgICBTQ1U5MFs1OjRdPTMgJiBTQ1U4NFsyM109MSAgICAgUlhEMSAgICAgICAg U0NVODRbMjNdPTEgICAgIEdQSU9MNwotICogLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotICoKLSAqIFRoZSBleGFtcGxlcyBvZiBUNSBhbmQgVzEgYXJlIHBhcnRpY3Vs YXJseSBmZXJ0aWxlLCBhcyB0aGV5IGFsc28gZGVtb25zdHJhdGUKLSAqIHRoYXQgZGVzcGl0ZSBv cGVyYXRpbmcgYXMgcGFydCBvZiB0aGUgdmlkZW8gaW5wdXQgYnVzIGVhY2ggc2lnbmFsIG5lZWRz IHRvCi0gKiBiZSBlbmFibGVkIGluZGl2aWR1YWxseSB2aWEgaXQncyBvd24gU0NVODQgKGluIHRo ZSBjYXNlcyBvZiBUNSBhbmQgVzEpCi0gKiByZWdpc3RlciBiaXQuIFRoaXMgaXMgYSBsaXR0bGUg Y3JhenkgaWYgdGhlIGJ1cyBkb2Vzbid0IGhhdmUgb3B0aW9uYWwKLSAqIHNpZ25hbHMsIGJ1dCBp cyB1c2VkIHRvIGRlY2VudCBlZmZlY3Qgd2l0aCBzb21lIG9mIHRoZSBVQVJUcyB3aGVyZSBub3Qg YWxsCi0gKiBzaWduYWxzIGFyZSByZXF1aXJlZC4gSG93ZXZlciwgdGhpcyBpc24ndCBkb25lIGNv bnNpc3RlbnRseSAtIFVBUlQxIGlzCi0gKiBlbmFibGVkIG9uIGEgcGVyLXBpbiBiYXNpcywgYW5k IGJ5IGNvbnRyYXN0LCBhbGwgc2lnbmFscyBmb3IgVUFSVDYgYXJlCi0gKiBlbmFibGVkIGJ5IGEg c2luZ2xlIGJpdC4KLSAqCi0gKiBGdXJ0aGVyLCB0aGUgaGlnaCBhbmQgbG93IHByaW9yaXR5IHNp Z25hbHMgbGlzdGVkIGluIHRoZSB0YWJsZSBhYm92ZSBzaGFyZQotICogYSBjb25maWd1cmF0aW9u IGJpdC4gVGhlIFZQSSBzaWduYWxzIHNob3VsZCBvcGVyYXRlIGluIGNvbmNlcnQgaW4gYSBzaW5n bGUKLSAqIGZ1bmN0aW9uLCBidXQgdGhlIFVBUlQgc2lnbmFscyBzaG91bGQgcmV0YWluIHRoZSBh YmlsaXR5IHRvIGJlIGNvbmZpZ3VyZWQKLSAqIGluZGVwZW5kZW50bHkuIFRoaXMgcHVzaGVzIHRo ZSBpbXBsZW1lbnRhdGlvbiBkb3duIHRoZSBwYXRoIG9mIHRhZ2dpbmcgYQotICogc2lnbmFsJ3Mg ZXhwcmVzc2lvbnMgd2l0aCB0aGUgZnVuY3Rpb24gdGhleSBwYXJ0aWNpcGF0ZSBpbiwgcmF0aGVy IHRoYW4KLSAqIGRlZmluaW5nIG1hc2tzIGFmZmVjdGluZyBtdWx0aXBsZSBzaWduYWxzIHBlciBm dW5jdGlvbi4gVGhlIGxhdHRlciBhcHByb2FjaAotICogZmFpbHMgaW4gdGhpcyBpbnN0YW5jZSB3 aGVyZSBhcHBseWluZyB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIFVBUlQgcGluIG9mCi0gKiBp bnRlcmVzdCB3aWxsIHN0b21wIG9uIHRoZSBzdGF0ZSBvZiBvdGhlciBVQVJUIHNpZ25hbHMgd2hl biBkaXNhYmxpbmcgdGhlCi0gKiBWUEkgZnVuY3Rpb25zIG9uIHRoZSBjdXJyZW50IHBpbi4KLSAq Ci0gKiBCYWxsIHwgIERlZmF1bHQgICB8IFAwIFNpZ25hbCB8IFAwIEV4cHJlc3Npb24gICAgICAg ICAgICAgfCBQMSBTaWduYWwgfCBQMSBFeHByZXNzaW9uIHwgT3RoZXIKLSAqIC0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQotICogIEExMiAgIFJHTUlJMVRYQ0sgICBH UElPVDAgICAgICBTQ1VBMFswXT0xICAgICAgICAgICAgICAgICAgUk1JSTFUWEVOICAgU3RyYXBb Nl09MCAgICAgIFJHTUlJMVRYQ0sKLSAqICBCMTIgICBSR01JSTFUWENUTCAgR1BJT1QxICAgICAg U0NVQTBbMV09MSAgICAgICAgICAgICAgICAgIOKAkyAgICAgICAgICAgU3RyYXBbNl09MCAgICAg IFJHTUlJMVRYQ1RMCi0gKiAtLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0KLSAqCi0gKiBBMTIgZGVtb25zdHJhdGVzIHRoYXQgdGhlICJPdGhlciIgc2lnbmFsIGlzbid0 IGFsd2F5cyBHUElPIC0gaW4gdGhpcyBjYXNlCi0gKiBHUElPVDAgaXMgYSBoaWdoLXByaW9yaXR5 IHNpZ25hbCBhbmQgUkdNSUkxVFhDSyBpcyBPdGhlci4gVGh1cywgR1BJTwotICogc2hvdWxkIGJl IHRyZWF0ZWQgbGlrZSBhbnkgb3RoZXIgc2lnbmFsIHR5cGUgd2l0aCBmdWxsIGZ1bmN0aW9uIGV4 cHJlc3Npb24KLSAqIHJlcXVpcmVtZW50cywgYW5kIG5vdCBhc3N1bWVkIHRvIGJlIHRoZSBkZWZh dWx0IGNhc2UuIFNlcGFyYXRlbHksIEdQSU9UMCBhbmQKLSAqIEdQSU9UMSdzIHNpZ25hbCBkZXNj cmlwdG9yIGJpdHMgYXJlIGRpc3RpbmN0LCB0aGVyZWZvcmUgd2UgbXVzdCBpdGVyYXRlIGFsbAot ICogcGlucyBpbiB0aGUgZnVuY3Rpb24ncyBncm91cCB0byBkaXNhYmxlIHRoZSBoaWdoZXItcHJp b3JpdHkgc2lnbmFscyBzdWNoCi0gKiB0aGF0IHRoZSBzaWduYWwgZm9yIHRoZSBmdW5jdGlvbiBv ZiBpbnRlcmVzdCBpcyBjb3JyZWN0bHkgZW5hYmxlZC4KLSAqCi0gKiBGaW5hbGx5LCB0aHJlZSBw cmlvcml0eSBsZXZlbHMgYXJlbid0IGFsd2F5cyBlbm91Z2g7IHRoZSBBU1QyNTAwIGJyaW5ncyB3 aXRoCi0gKiBpdCAxOCBwaW5zIG9mIGZpdmUgcHJpb3JpdHkgbGV2ZWxzLCBob3dldmVyIHRoZSAx OCBwaW5zIG9ubHkgdXNlIHRocmVlIG9mCi0gKiB0aGUgZml2ZSBwcmlvcml0eSBsZXZlbHMuCi0g KgotICogVWx0aW1hdGVseSB0aGUgcmVxdWlyZW1lbnQgdG8gY29udHJvbCBwaW5zIGluIHRoZSBl eGFtcGxlcyBhYm92ZSBkcml2ZSB0aGUKLSAqIGRlc2lnbjoKLSAqCi0gKiAqIFBpbnMgcHJvdmlk ZSBzaWduYWxzIGFjY29yZGluZyB0byBmdW5jdGlvbnMgYWN0aXZhdGVkIGluIHRoZSBtdXgKLSAq ICAgY29uZmlndXJhdGlvbgotICoKLSAqICogUGlucyBwcm92aWRlIHVwIHRvIGZpdmUgc2lnbmFs IHR5cGVzIGluIGEgcHJpb3JpdHkgb3JkZXIKLSAqCi0gKiAqIEZvciBwcmlvcml0aWVzIGxldmVs cyBkZWZpbmVkIG9uIGEgcGluLCBlYWNoIHByaW9yaXR5IHByb3ZpZGVzIG9uZSBzaWduYWwKLSAq Ci0gKiAqIEVuYWJsaW5nIGxvd2VyIHByaW9yaXR5IHNpZ25hbHMgcmVxdWlyZXMgaGlnaGVyIHBy aW9yaXR5IHNpZ25hbHMgYmUKLSAqICAgZGlzYWJsZWQKLSAqCi0gKiAqIEEgZnVuY3Rpb24gcmVw cmVzZW50cyBhIHNldCBvZiBzaWduYWxzOyBmdW5jdGlvbnMgYXJlIGRpc3RpbmN0IGlmIHRoZWly Ci0gKiAgIHNldHMgb2Ygc2lnbmFscyBhcmUgbm90IGVxdWFsCi0gKgotICogKiBTaWduYWxzIHBh cnRpY2lwYXRlIGluIG9uZSBvciBtb3JlIGZ1bmN0aW9ucwotICoKLSAqICogQSBmdW5jdGlvbiBp cyBkZXNjcmliZWQgYnkgYW4gZXhwcmVzc2lvbiBvZiBvbmUgb3IgbW9yZSBzaWduYWwKLSAqICAg ZGVzY3JpcHRvcnMsIHdoaWNoIGNvbXBhcmUgYml0IHZhbHVlcyBpbiBhIHJlZ2lzdGVyCi0gKgot ICogKiBBIHNpZ25hbCBleHByZXNzaW9uIGlzIHRoZSBzbWFsbGVzdCBzZXQgb2Ygc2lnbmFsIGRl c2NyaXB0b3JzIHdob3NlCi0gKiAgIGNvbXBhcmlzb25zIG11c3QgZXZhbHVhdGUgJ3RydWUnIGZv ciBhIHNpZ25hbCB0byBiZSBlbmFibGVkIG9uIGEgcGluLgotICoKLSAqICogQSBmdW5jdGlvbidz IHNpZ25hbCBpcyBhY3RpdmUgb24gYSBwaW4gaWYgZXZhbHVhdGluZyBhbGwgc2lnbmFsCi0gKiAg IGRlc2NyaXB0b3JzIGluIHRoZSBwaW4ncyBzaWduYWwgZXhwcmVzc2lvbiBmb3IgdGhlIGZ1bmN0 aW9uIHlpZWxkcyBhICd0cnVlJwotICogICByZXN1bHQKLSAqCi0gKiAqIEEgc2lnbmFsIGF0IGEg Z2l2ZW4gcHJpb3JpdHkgb24gYSBnaXZlbiBwaW4gaXMgYWN0aXZlIGlmIGFueSBvZiB0aGUKLSAq ICAgZnVuY3Rpb25zIGluIHdoaWNoIHRoZSBzaWduYWwgcGFydGljaXBhdGVzIGFyZSBhY3RpdmUs IGFuZCBubyBoaWdoZXIKLSAqICAgcHJpb3JpdHkgc2lnbmFsIG9uIHRoZSBwaW4gaXMgYWN0aXZl Ci0gKgotICogKiBHUElPIGlzIGNvbmZpZ3VyZWQgcGVyLXBpbgotICoKLSAqIEFuZCBzbzoKLSAq Ci0gKiAqIFRvIGRpc2FibGUgYSBzaWduYWwsIGFueSBmdW5jdGlvbihzKSBhY3RpdmF0aW5nIHRo ZSBzaWduYWwgbXVzdCBiZQotICogICBkaXNhYmxlZAotICoKLSAqICogRWFjaCBwaW4gbXVzdCBr bm93IHRoZSBzaWduYWwgZXhwcmVzc2lvbnMgb2YgZnVuY3Rpb25zIGluIHdoaWNoIGl0Ci0gKiAg IHBhcnRpY2lwYXRlcywgZm9yIHRoZSBwdXJwb3NlIG9mIGVuYWJsaW5nIHRoZSBPdGhlciBmdW5j dGlvbi4gVGhpcyBpcyBkb25lCi0gKiAgIGJ5IGRlYWN0aXZhdGluZyBhbGwgZnVuY3Rpb25zIHRo YXQgYWN0aXZhdGUgaGlnaGVyIHByaW9yaXR5IHNpZ25hbHMgb24gdGhlCi0gKiAgIHBpbi4KLSAq Ci0gKiBBcyBhIGNvbmNyZXRlIGV4YW1wbGU6Ci0gKgotICogKiBUNSBwcm92aWRlcyB0aHJlZSBz aWduYWxzIHR5cGVzOiBWUElERSwgTkRDRDEgYW5kIEdQSU8KLSAqCi0gKiAqIFRoZSBWUElERSBz aWduYWwgcGFydGljaXBhdGVzIGluIDMgZnVuY3Rpb25zOiBWUEkxOCwgVlBJMjQgYW5kIFZQSTMw Ci0gKgotICogKiBUaGUgTkRDRDEgc2lnbmFsIHBhcnRpY2lwYXRlcyBpbiBqdXN0IGl0cyBvd24g TkRDRDEgZnVuY3Rpb24KLSAqCi0gKiAqIFZQSURFIGlzIGhpZ2ggcHJpb3JpdHksIE5EQ0QxIGlz IGxvdyBwcmlvcml0eSwgYW5kIEdQSU9MMSBpcyB0aGUgbGVhc3QKLSAqICAgcHJpb3JpdGlzZWQK LSAqCi0gKiAqIFRoZSBwcmVyZXF1aXNpdCBmb3IgYWN0aXZhdGluZyB0aGUgTkRDRDEgc2lnbmFs IGlzIHRoYXQgdGhlIFZQSTE4LCBWUEkyNAotICogICBhbmQgVlBJMzAgZnVuY3Rpb25zIGFsbCBi ZSBkaXNhYmxlZAotICoKLSAqICogU2ltaWxhcmx5LCBhbGwgb2YgVlBJMTgsIFZQSTI0LCBWUEkz MCBhbmQgTkRDRDEgZnVuY3Rpb25zIG11c3QgYmUgZGlzYWJsZWQKLSAqICAgdG8gcHJvdmlkZSBH UElPTDYKLSAqCi0gKiBDb25zaWRlcmF0aW9ucwotICogLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBJ ZiBwaW5jdHJsIGFsbG93cyB1cyB0byBhbGxvY2F0ZSBhIHBpbiB3ZSBjYW4gY29uZmlndXJlIGEg ZnVuY3Rpb24gd2l0aG91dAotICogY29uY2VybiBmb3IgdGhlIGZ1bmN0aW9uIG9mIGFscmVhZHkg YWxsb2NhdGVkIHBpbnMsIGlmIHBpbiBncm91cHMgYXJlCi0gKiBjcmVhdGVkIHdpdGggcmVzcGVj dCB0byB0aGUgU29DIGZ1bmN0aW9ucyBpbiB3aGljaCB0aGV5IHBhcnRpY2lwYXRlLiBUaGlzIGlz Ci0gKiBpbnR1aXRpdmUsIGJ1dCBpdCBkaWQgbm90IGZlZWwgb2J2aW91cyBmcm9tIHRoZSBiaXQv cGluIHJlbGF0aW9uc2hpcHMuCi0gKgotICogQ29udmVyc2VseSwgZmFpbGluZyB0byBhbGxvY2F0 ZSBhbGwgcGlucyBpbiBhIGdyb3VwIGluZGljYXRlcyBzb21lIGJpdHMgKGFzCi0gKiB3ZWxsIGFz IHBpbnMpIHJlcXVpcmVkIGZvciB0aGUgZ3JvdXAncyBjb25maWd1cmF0aW9uIHdpbGwgYWxyZWFk eSBiZSBpbiB1c2UsCi0gKiBsaWtlbHkgaW4gYSB3YXkgdGhhdCdzIGluY29uc2lzdGVudCB3aXRo IHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIGZhaWxlZAotICogZ3JvdXAuCi0gKi8KLQotI2RlZmlu ZSBBU1BFRURfSVBfU0NVCQkwCi0jZGVmaW5lIEFTUEVFRF9JUF9HRlgJCTEKLSNkZWZpbmUgQVNQ RUVEX0lQX0xQQwkJMgotI2RlZmluZSBBU1BFRURfTlJfUElOTVVYX0lQUwkzCi0KLS8qCi0gKiBU aGUgIk11bHRpLWZ1bmN0aW9uIFBpbnMgTWFwcGluZyBhbmQgQ29udHJvbCIgdGFibGUgaW4gdGhl IFNvQyBkYXRhc2hlZXQKLSAqIHJlZmVyZW5jZXMgcmVnaXN0ZXJzIGJ5IHRoZSBkZXZpY2Uvb2Zm c2V0IG1uZW1vbmljLiBUaGUgcmVnaXN0ZXIgbWFjcm9zCi0gKiBiZWxvdyBhcmUgbmFtZWQgdGhl IHNhbWUgd2F5IHRvIGVhc2UgdHJhbnNjcmlwdGlvbiBhbmQgdmVyaWZpY2F0aW9uIChhcwotICog b3Bwb3NlZCB0byBuYW1pbmcgdGhlbSBlLmcuIFBJTk1VWF9DVFJMX1swLTldKS4gRnVydGhlciwg c2lnbmFsIGV4cHJlc3Npb25zCi0gKiByZWZlcmVuY2UgcmVnaXN0ZXJzIGJleW9uZCB0aG9zZSBk ZWRpY2F0ZWQgdG8gcGlubXV4LCBzdWNoIGFzIHRoZSBzeXN0ZW0KLSAqIHJlc2V0IGNvbnRyb2wg YW5kIE1BQyBjbG9jayBjb25maWd1cmF0aW9uIHJlZ2lzdGVycy4gVGhlIEFTVDI1MDAgZ29lcyBh IHN0ZXAKLSAqIGZ1cnRoZXIgYW5kIHJlZmVyZW5jZXMgcmVnaXN0ZXJzIGluIHRoZSBncmFwaGlj cyBJUCBibG9jay4KLSAqLwotI2RlZmluZSBTQ1UyQyAgICAgICAgICAgMHgyQyAvKiBNaXNjLiBD b250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIFNDVTNDICAgICAgICAgICAweDNDIC8qIFN5c3Rl bSBSZXNldCBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBTQ1U0OCAgICAgICAg ICAgMHg0OCAvKiBNQUMgSW50ZXJmYWNlIENsb2NrIERlbGF5IFNldHRpbmcgKi8KLSNkZWZpbmUg SFdfU1RSQVAxICAgICAgIDB4NzAgLyogQVNUMjQwMCBzdHJhcHBpbmcgaXMgMzMgYml0cywgaXMg c3BsaXQgKi8KLSNkZWZpbmUgSFdfUkVWSVNJT05fSUQgIDB4N0MgLyogU2lsaWNvbiByZXZpc2lv biBJRCByZWdpc3RlciAqLwotI2RlZmluZSBTQ1U4MCAgICAgICAgICAgMHg4MCAvKiBNdWx0aS1m dW5jdGlvbiBQaW4gQ29udHJvbCAjMSAqLwotI2RlZmluZSBTQ1U4NCAgICAgICAgICAgMHg4NCAv KiBNdWx0aS1mdW5jdGlvbiBQaW4gQ29udHJvbCAjMiAqLwotI2RlZmluZSBTQ1U4OCAgICAgICAg ICAgMHg4OCAvKiBNdWx0aS1mdW5jdGlvbiBQaW4gQ29udHJvbCAjMyAqLwotI2RlZmluZSBTQ1U4 QyAgICAgICAgICAgMHg4QyAvKiBNdWx0aS1mdW5jdGlvbiBQaW4gQ29udHJvbCAjNCAqLwotI2Rl ZmluZSBTQ1U5MCAgICAgICAgICAgMHg5MCAvKiBNdWx0aS1mdW5jdGlvbiBQaW4gQ29udHJvbCAj NSAqLwotI2RlZmluZSBTQ1U5NCAgICAgICAgICAgMHg5NCAvKiBNdWx0aS1mdW5jdGlvbiBQaW4g Q29udHJvbCAjNiAqLwotI2RlZmluZSBTQ1VBMCAgICAgICAgICAgMHhBMCAvKiBNdWx0aS1mdW5j dGlvbiBQaW4gQ29udHJvbCAjNyAqLwotI2RlZmluZSBTQ1VBNCAgICAgICAgICAgMHhBNCAvKiBN dWx0aS1mdW5jdGlvbiBQaW4gQ29udHJvbCAjOCAqLwotI2RlZmluZSBTQ1VBOCAgICAgICAgICAg MHhBOCAvKiBNdWx0aS1mdW5jdGlvbiBQaW4gQ29udHJvbCAjOSAqLwotI2RlZmluZSBTQ1VBQyAg ICAgICAgICAgMHhBQyAvKiBNdWx0aS1mdW5jdGlvbiBQaW4gQ29udHJvbCAjMTAgKi8KLSNkZWZp bmUgSFdfU1RSQVAyICAgICAgIDB4RDAgLyogU3RyYXBwaW5nICovCi0KLSAvKioKLSAgKiBBIHNp Z25hbCBkZXNjcmlwdG9yLCB3aGljaCBkZXNjcmliZXMgdGhlIHJlZ2lzdGVyLCBiaXRzIGFuZCB0 aGUKLSAgKiBlbmFibGUvZGlzYWJsZSB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgY29tcGFyZWQgb3Ig d3JpdHRlbi4KLSAgKgotICAqIEBpcDogVGhlIElQIGJsb2NrIGlkZW50aWZpZXIsIHVzZWQgYXMg YW4gaW5kZXggaW50byB0aGUgcmVnbWFwIGFycmF5IGluCi0gICogICAgICBzdHJ1Y3QgYXNwZWVk X3BpbmN0cmxfZGF0YQotICAqIEByZWc6IFRoZSByZWdpc3RlciBvZmZzZXQgd2l0aCByZXNwZWN0 IHRvIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIElQIGJsb2NrCi0gICogQG1hc2s6IFRoZSBtYXNr IHRvIGFwcGx5IHRvIHRoZSByZWdpc3Rlci4gVGhlIGxvd2VzdCBzZXQgYml0IG9mIHRoZSBtYXNr IGlzCi0gICogICAgICAgIHVzZWQgdG8gZGVyaXZlIHRoZSBzaGlmdCB2YWx1ZS4KLSAgKiBAZW5h YmxlOiBUaGUgdmFsdWUgdGhhdCBlbmFibGVzIHRoZSBmdW5jdGlvbi4gVmFsdWUgc2hvdWxkIGJl IGluIHRoZSBMU0JzLAotICAqICAgICAgICAgIG5vdCBhdCB0aGUgcG9zaXRpb24gb2YgdGhlIG1h c2suCi0gICogQGRpc2FibGU6IFRoZSB2YWx1ZSB0aGF0IGRpc2FibGVzIHRoZSBmdW5jdGlvbi4g VmFsdWUgc2hvdWxkIGJlIGluIHRoZQotICAqICAgICAgICAgICBMU0JzLCBub3QgYXQgdGhlIHBv c2l0aW9uIG9mIHRoZSBtYXNrLgotICAqLwotc3RydWN0IGFzcGVlZF9zaWdfZGVzYyB7Ci0JdW5z aWduZWQgaW50IGlwOwotCXVuc2lnbmVkIGludCByZWc7Ci0JdTMyIG1hc2s7Ci0JdTMyIGVuYWJs ZTsKLQl1MzIgZGlzYWJsZTsKLX07Ci0KLS8qKgotICogRGVzY3JpYmVzIGEgc2lnbmFsIGV4cHJl c3Npb24uIFRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBieSBBTkRpbmcgdGhlCi0gKiBldmFs dWF0aW9uIG9mIHRoZSBkZXNjcmlwdG9ycy4KLSAqCi0gKiBAc2lnbmFsOiBUaGUgc2lnbmFsIG5h bWUgZm9yIHRoZSBwcmlvcml0eSBsZXZlbCBvbiB0aGUgcGluLiBJZiB0aGUgc2lnbmFsCi0gKiAg ICAgICAgICB0eXBlIGlzIEdQSU8sIHRoZW4gdGhlIHNpZ25hbCBuYW1lIG11c3QgYmVnaW4gd2l0 aCB0aGUgc3RyaW5nCi0gKiAgICAgICAgICAiR1BJTyIsIGUuZy4gR1BJT0EwLCBHUElPVDQgZXRj LgotICogQGZ1bmN0aW9uOiBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdGhlIHNpZ25hbCBwYXJ0 aWNpcGF0ZXMgaW4gZm9yIHRoZQotICogICAgICAgICAgICBhc3NvY2lhdGVkIGV4cHJlc3Npb24K LSAqIEBuZGVzY3M6IFRoZSBudW1iZXIgb2Ygc2lnbmFsIGRlc2NyaXB0b3JzIGluIHRoZSBleHBy ZXNzaW9uCi0gKiBAZGVzY3M6IFBvaW50ZXIgdG8gYW4gYXJyYXkgb2Ygc2lnbmFsIGRlc2NyaXB0 b3JzIHRoYXQgY29tcHJpc2UgdGhlCi0gKiAgICAgICAgIGZ1bmN0aW9uIGV4cHJlc3Npb24KLSAq Lwotc3RydWN0IGFzcGVlZF9zaWdfZXhwciB7Ci0JY29uc3QgY2hhciAqc2lnbmFsOwotCWNvbnN0 IGNoYXIgKmZ1bmN0aW9uOwotCWludCBuZGVzY3M7Ci0JY29uc3Qgc3RydWN0IGFzcGVlZF9zaWdf ZGVzYyAqZGVzY3M7Ci19OwotCi0vKioKLSAqIEEgc3RydWN0IGNhcHR1cmluZyB0aGUgbGlzdCBv ZiBleHByZXNzaW9ucyBlbmFibGluZyBzaWduYWxzIGF0IGVhY2ggcHJpb3JpdHkKLSAqIGZvciBh IGdpdmVuIHBpbi4gVGhlIHNpZ25hbCBjb25maWd1cmF0aW9uIGZvciBhIHByaW9yaXR5IGxldmVs IGlzIGV2YWx1YXRlZAotICogYnkgT1JpbmcgdGhlIGV2YWx1YXRpb24gb2YgdGhlIHNpZ25hbCBl eHByZXNzaW9ucyBpbiB0aGUgcmVzcGVjdGl2ZQotICogcHJpb3JpdHkncyBsaXN0LgotICoKLSAq IEBuYW1lOiBBIG5hbWUgZm9yIHRoZSBwaW4KLSAqIEBwcmlvczogQSBwb2ludGVyIHRvIGFuIGFy cmF5IG9mIGV4cHJlc3Npb24gbGlzdCBwb2ludGVycwotICoKLSAqLwotc3RydWN0IGFzcGVlZF9w aW5fZGVzYyB7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQljb25zdCBzdHJ1Y3QgYXNwZWVkX3NpZ19l eHByICoqKnByaW9zOwotfTsKLQotLyogTWFjcm8gaGVsbCAqLwotCi0jZGVmaW5lIFNJR19ERVND X0lQX0JJVChpcCwgcmVnLCBpZHgsIHZhbCkgXAotCXsgaXAsIHJlZywgQklUX01BU0soaWR4KSwg dmFsLCAoKCh2YWwpICsgMSkgJiAxKSB9Ci0KLS8qKgotICogU2hvcnQtaGFuZCBtYWNybyBmb3Ig ZGVzY3JpYmluZyBhbiBTQ1UgZGVzY3JpcHRvciBlbmFibGVkIGJ5IHRoZSBzdGF0ZSBvZgotICog b25lIGJpdC4gVGhlIGRpc2FibGUgdmFsdWUgaXMgZGVyaXZlZC4KLSAqCi0gKiBAcmVnOiBUaGUg c2lnbmFsJ3MgYXNzb2NpYXRlZCByZWdpc3Rlciwgb2Zmc2V0IGZyb20gYmFzZQotICogQGlkeDog VGhlIHNpZ25hbCdzIGJpdCBpbmRleCBpbiB0aGUgcmVnaXN0ZXIKLSAqIEB2YWw6IFRoZSB2YWx1 ZSAoMCBvciAxKSB0aGF0IGVuYWJsZXMgdGhlIGZ1bmN0aW9uCi0gKi8KLSNkZWZpbmUgU0lHX0RF U0NfQklUKHJlZywgaWR4LCB2YWwpIFwKLQlTSUdfREVTQ19JUF9CSVQoQVNQRUVEX0lQX1NDVSwg cmVnLCBpZHgsIHZhbCkKLQotI2RlZmluZSBTSUdfREVTQ19JUF9TRVQoaXAsIHJlZywgaWR4KSBT SUdfREVTQ19JUF9CSVQoaXAsIHJlZywgaWR4LCAxKQotCi0vKioKLSAqIEEgZnVydGhlciBzaG9y dC1oYW5kIG1hY3JvIGV4cGFuZGluZyB0byBhbiBTQ1UgZGVzY3JpcHRvciBlbmFibGVkIGJ5IGEg c2V0Ci0gKiBiaXQuCi0gKgotICogQHJlZzogVGhlIHJlZ2lzdGVyLCBvZmZzZXQgZnJvbSBiYXNl Ci0gKiBAaWR4OiBUaGUgYml0IGluZGV4IGluIHRoZSByZWdpc3RlcgotICovCi0jZGVmaW5lIFNJ R19ERVNDX1NFVChyZWcsIGlkeCkgU0lHX0RFU0NfSVBfQklUKEFTUEVFRF9JUF9TQ1UsIHJlZywg aWR4LCAxKQotCi0jZGVmaW5lIFNJR19ERVNDX0xJU1RfU1lNKHNpZywgZnVuYykgc2lnX2Rlc2Nz XyAjIyBzaWcgIyMgXyAjIyBmdW5jCi0jZGVmaW5lIFNJR19ERVNDX0xJU1RfREVDTChzaWcsIGZ1 bmMsIC4uLikgXAotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXNwZWVkX3NpZ19kZXNjIFNJR19ERVND X0xJU1RfU1lNKHNpZywgZnVuYylbXSA9IFwKLQkJeyBfX1ZBX0FSR1NfXyB9Ci0KLSNkZWZpbmUg U0lHX0VYUFJfU1lNKHNpZywgZnVuYykgc2lnX2V4cHJfICMjIHNpZyAjIyBfICMjIGZ1bmMKLSNk ZWZpbmUgU0lHX0VYUFJfREVDTF8oc2lnLCBmdW5jKSBcCi0Jc3RhdGljIGNvbnN0IHN0cnVjdCBh c3BlZWRfc2lnX2V4cHIgU0lHX0VYUFJfU1lNKHNpZywgZnVuYykgPSBcCi0JeyBcCi0JCS5zaWdu YWwgPSAjc2lnLCBcCi0JCS5mdW5jdGlvbiA9ICNmdW5jLCBcCi0JCS5uZGVzY3MgPSBBUlJBWV9T SVpFKFNJR19ERVNDX0xJU1RfU1lNKHNpZywgZnVuYykpLCBcCi0JCS5kZXNjcyA9ICYoU0lHX0RF U0NfTElTVF9TWU0oc2lnLCBmdW5jKSlbMF0sIFwKLQl9Ci0KLS8qKgotICogRGVjbGFyZSBhIHNp Z25hbCBleHByZXNzaW9uLgotICoKLSAqIEBzaWc6IEEgbWFjcm8gc3ltYm9sIG5hbWUgZm9yIHRo ZSBzaWduYWwgKGlzIHN1YmplY3RlZCB0byBzdHJpbmdpZmljYXRpb24KLSAqICAgICAgICBhbmQg dG9rZW4gcGFzdGluZykKLSAqIEBmdW5jOiBUaGUgZnVuY3Rpb24gaW4gd2hpY2ggdGhlIHNpZ25h bCBpcyBwYXJ0aWNpcGF0aW5nCi0gKiBALi4uOiBTaWduYWwgZGVzY3JpcHRvcnMgdGhhdCBkZWZp bmUgdGhlIHNpZ25hbCBleHByZXNzaW9uCi0gKgotICogRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dp bmcgZGVjbGFyZXMgdGhlIFJPTUQ4IHNpZ25hbCBmb3IgdGhlIFJPTTE2IGZ1bmN0aW9uOgotICoK LSAqICAgICBTSUdfRVhQUl9ERUNMKFJPTUQ4LCBST00xNiwgU0lHX0RFU0NfU0VUKFNDVTkwLCA2 KSk7Ci0gKgotICogQW5kIHdpdGggbXVsdGlwbGUgc2lnbmFsIGRlc2NyaXB0b3JzOgotICoKLSAq ICAgICBTSUdfRVhQUl9ERUNMKFJPTUQ4LCBST00xNlMsIFNJR19ERVNDX1NFVChIV19TVFJBUDEs IDQpLAotICogICAgICAgICAgICAgIHsgSFdfU1RSQVAxLCBHRU5NQVNLKDEsIDApLCAwLCAwIH0p OwotICovCi0jZGVmaW5lIFNJR19FWFBSX0RFQ0woc2lnLCBmdW5jLCAuLi4pIFwKLQlTSUdfREVT Q19MSVNUX0RFQ0woc2lnLCBmdW5jLCBfX1ZBX0FSR1NfXyk7IFwKLQlTSUdfRVhQUl9ERUNMXyhz aWcsIGZ1bmMpCi0KLS8qKgotICogRGVjbGFyZSBhIHBvaW50ZXIgdG8gYSBzaWduYWwgZXhwcmVz c2lvbgotICoKLSAqIEBzaWc6IFRoZSBtYWNybyBzeW1ib2wgbmFtZSBmb3IgdGhlIHNpZ25hbCAo c3ViamVjdGVkIHRvIHRva2VuIHBhc3RpbmcpCi0gKiBAZnVuYzogVGhlIG1hY3JvIHN5bWJvbCBu YW1lIGZvciB0aGUgZnVuY3Rpb24gKHN1YmplY3RlZCB0byB0b2tlbiBwYXN0aW5nKQotICovCi0j ZGVmaW5lIFNJR19FWFBSX1BUUihzaWcsIGZ1bmMpICgmU0lHX0VYUFJfU1lNKHNpZywgZnVuYykp Ci0KLSNkZWZpbmUgU0lHX0VYUFJfTElTVF9TWU0oc2lnKSBzaWdfZXhwcnNfICMjIHNpZwotCi0v KioKLSAqIERlY2xhcmUgYSBzaWduYWwgZXhwcmVzc2lvbiBsaXN0IGZvciByZWZlcmVuY2UgaW4g YSBzdHJ1Y3QgYXNwZWVkX3Bpbl9wcmlvLgotICoKLSAqIEBzaWc6IEEgbWFjcm8gc3ltYm9sIG5h bWUgZm9yIHRoZSBzaWduYWwgKGlzIHN1YmplY3RlZCB0byB0b2tlbiBwYXN0aW5nKQotICogQC4u LjogU2lnbmFsIGV4cHJlc3Npb24gc3RydWN0dXJlIHBvaW50ZXJzICh1c2UgU0lHX0VYUFJfUFRS KCkpCi0gKgotICogRm9yIGV4YW1wbGUsIHRoZSAxNi1iaXQgUk9NIGJ1cyBjYW4gYmUgZW5hYmxl ZCBieSBvbmUgb2YgdHdvIHBvc3NpYmxlIHNpZ25hbAotICogZXhwcmVzc2lvbnM6Ci0gKgotICog ICAgIFNJR19FWFBSX0RFQ0woUk9NRDgsIFJPTTE2LCBTSUdfREVTQ19TRVQoU0NVOTAsIDYpKTsK LSAqICAgICBTSUdfRVhQUl9ERUNMKFJPTUQ4LCBST00xNlMsIFNJR19ERVNDX1NFVChIV19TVFJB UDEsIDQpLAotICogICAgICAgICAgICAgIHsgSFdfU1RSQVAxLCBHRU5NQVNLKDEsIDApLCAwLCAw IH0pOwotICogICAgIFNJR19FWFBSX0xJU1RfREVDTChST01EOCwgU0lHX0VYUFJfUFRSKFJPTUQ4 LCBST00xNiksCi0gKiAgICAgICAgICAgICAgU0lHX0VYUFJfUFRSKFJPTUQ4LCBST00xNlMpKTsK LSAqLwotI2RlZmluZSBTSUdfRVhQUl9MSVNUX0RFQ0woc2lnLCAuLi4pIFwKLQlzdGF0aWMgY29u c3Qgc3RydWN0IGFzcGVlZF9zaWdfZXhwciAqU0lHX0VYUFJfTElTVF9TWU0oc2lnKVtdID0gXAot CQl7IF9fVkFfQVJHU19fLCBOVUxMIH0KLQotLyoqCi0gKiBBIHNob3J0LWhhbmQgbWFjcm8gZm9y IGRlY2xhcmluZyBhIGZ1bmN0aW9uIGV4cHJlc3Npb24gYW5kIGFuIGV4cHJlc3Npb24KLSAqIGxp c3Qgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbi4KLSAqCi0gKiBAZnVuYzogQSBtYWNybyBzeW1ib2wg bmFtZSBmb3IgdGhlIGZ1bmN0aW9uIChpcyBzdWJqZWN0ZWQgdG8gdG9rZW4gcGFzdGluZykKLSAq IEAuLi46IEZ1bmN0aW9uIGRlc2NyaXB0b3JzIHRoYXQgZGVmaW5lIHRoZSBmdW5jdGlvbiBleHBy ZXNzaW9uCi0gKgotICogRm9yIGV4YW1wbGUsIHNpZ25hbCBOQ1RTNiBwYXJ0aWNpcGF0ZXMgaW4g aXRzIG93biBmdW5jdGlvbiB3aXRoIG9uZSBncm91cDoKLSAqCi0gKiAgICAgU0lHX0VYUFJfTElT VF9ERUNMX1NJTkdMRShOQ1RTNiwgTkNUUzYsIFNJR19ERVNDX1NFVChTQ1U5MCwgNykpOwotICov Ci0jZGVmaW5lIFNJR19FWFBSX0xJU1RfREVDTF9TSU5HTEUoc2lnLCBmdW5jLCAuLi4pIFwKLQlT SUdfREVTQ19MSVNUX0RFQ0woc2lnLCBmdW5jLCBfX1ZBX0FSR1NfXyk7IFwKLQlTSUdfRVhQUl9E RUNMXyhzaWcsIGZ1bmMpOyBcCi0JU0lHX0VYUFJfTElTVF9ERUNMKHNpZywgU0lHX0VYUFJfUFRS KHNpZywgZnVuYykpCi0KLSNkZWZpbmUgU0lHX0VYUFJfTElTVF9ERUNMX0RVQUwoc2lnLCBmMCwg ZjEpIFwKLQlTSUdfRVhQUl9MSVNUX0RFQ0woc2lnLCBTSUdfRVhQUl9QVFIoc2lnLCBmMCksIFNJ R19FWFBSX1BUUihzaWcsIGYxKSkKLQotI2RlZmluZSBTSUdfRVhQUl9MSVNUX1BUUihzaWcpICgm U0lHX0VYUFJfTElTVF9TWU0oc2lnKVswXSkKLQotI2RlZmluZSBQSU5fRVhQUlNfU1lNKHBpbikg cGluX2V4cHJzXyAjIyBwaW4KLSNkZWZpbmUgUElOX0VYUFJTX1BUUihwaW4pICgmUElOX0VYUFJT X1NZTShwaW4pWzBdKQotI2RlZmluZSBQSU5fU1lNKHBpbikgcGluXyAjIyBwaW4KLQotI2RlZmlu ZSBNU19QSU5fREVDTF8ocGluLCAuLi4pIFwKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGFzcGVlZF9z aWdfZXhwciAqKlBJTl9FWFBSU19TWU0ocGluKVtdID0gXAotCQl7IF9fVkFfQVJHU19fLCBOVUxM IH07IFwKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGFzcGVlZF9waW5fZGVzYyBQSU5fU1lNKHBpbikg PSBcCi0JCXsgI3BpbiwgUElOX0VYUFJTX1BUUihwaW4pIH0KLQotLyoqCi0gKiBEZWNsYXJlIGEg bXVsdGktc2lnbmFsIHBpbgotICoKLSAqIEBwaW46IFRoZSBwaW4gbnVtYmVyCi0gKiBAb3RoZXI6 IE1hY3JvIG5hbWUgZm9yICJvdGhlciIgZnVuY3Rpb25hbGl0eSAoc3ViamVjdGVkIHRvIHN0cmlu Z2lmaWNhdGlvbikKLSAqIEBoaWdoOiBNYWNybyBuYW1lIGZvciB0aGUgaGlnaGVzdCBwcmlvcml0 eSBzaWduYWwgZnVuY3Rpb25zCi0gKiBAbG93OiBNYWNybyBuYW1lIGZvciB0aGUgbG93IHNpZ25h bCBmdW5jdGlvbnMKLSAqCi0gKiBGb3IgZXhhbXBsZToKLSAqCi0gKiAgICAgI2RlZmluZSBBOCA1 NgotICogICAgIFNJR19FWFBSX0RFQ0woUk9NRDgsIFJPTTE2LCBTSUdfREVTQ19TRVQoU0NVOTAs IDYpKTsKLSAqICAgICBTSUdfRVhQUl9ERUNMKFJPTUQ4LCBST00xNlMsIFNJR19ERVNDX1NFVChI V19TVFJBUDEsIDQpLAotICogICAgICAgICAgICAgIHsgSFdfU1RSQVAxLCBHRU5NQVNLKDEsIDAp LCAwLCAwIH0pOwotICogICAgIFNJR19FWFBSX0xJU1RfREVDTChST01EOCwgU0lHX0VYUFJfUFRS KFJPTUQ4LCBST00xNiksCi0gKiAgICAgICAgICAgICAgU0lHX0VYUFJfUFRSKFJPTUQ4LCBST00x NlMpKTsKLSAqICAgICBTSUdfRVhQUl9MSVNUX0RFQ0xfU0lOR0xFKE5DVFM2LCBOQ1RTNiwgU0lH X0RFU0NfU0VUKFNDVTkwLCA3KSk7Ci0gKiAgICAgTVNfUElOX0RFQ0woQTgsIEdQSU9IMCwgUk9N RDgsIE5DVFM2KTsKLSAqLwotI2RlZmluZSBNU19QSU5fREVDTChwaW4sIG90aGVyLCBoaWdoLCBs b3cpIFwKLQlTSUdfRVhQUl9MSVNUX0RFQ0xfU0lOR0xFKG90aGVyLCBvdGhlcik7IFwKLQlNU19Q SU5fREVDTF8ocGluLCBcCi0JCQlTSUdfRVhQUl9MSVNUX1BUUihoaWdoKSwgXAotCQkJU0lHX0VY UFJfTElTVF9QVFIobG93KSwgXAotCQkJU0lHX0VYUFJfTElTVF9QVFIob3RoZXIpKQotCi0jZGVm aW5lIFBJTl9HUk9VUF9TWU0oZnVuYykgcGluc18gIyMgZnVuYwotI2RlZmluZSBGVU5DX0dST1VQ X1NZTShmdW5jKSBncm91cHNfICMjIGZ1bmMKLSNkZWZpbmUgRlVOQ19HUk9VUF9ERUNMKGZ1bmMs IC4uLikgXAotCXN0YXRpYyBjb25zdCBpbnQgUElOX0dST1VQX1NZTShmdW5jKVtdID0geyBfX1ZB X0FSR1NfXyB9OyBcCi0Jc3RhdGljIGNvbnN0IGNoYXIgKkZVTkNfR1JPVVBfU1lNKGZ1bmMpW10g PSB7ICNmdW5jIH0KLQotLyoqCi0gKiBEZWNsYXJlIGEgc2luZ2xlIHNpZ25hbCBwaW4KLSAqCi0g KiBAcGluOiBUaGUgcGluIG51bWJlcgotICogQG90aGVyOiBNYWNybyBuYW1lIGZvciAib3RoZXIi IGZ1bmN0aW9uYWxpdHkgKHN1YmplY3RlZCB0byBzdHJpbmdpZmljYXRpb24pCi0gKiBAc2lnOiBN YWNybyBuYW1lIGZvciB0aGUgc2lnbmFsIChzdWJqZWN0ZWQgdG8gc3RyaW5naWZpY2F0aW9uKQot ICoKLSAqIEZvciBleGFtcGxlOgotICoKLSAqICAgICAjZGVmaW5lIEUzIDgwCi0gKiAgICAgU0lH X0VYUFJfTElTVF9ERUNMX1NJTkdMRShTQ0w1LCBJMkM1LCBJMkM1X0RFU0MpOwotICogICAgIFNT X1BJTl9ERUNMKEUzLCBHUElPSzAsIFNDTDUpOwotICovCi0jZGVmaW5lIFNTX1BJTl9ERUNMKHBp biwgb3RoZXIsIHNpZykgXAotCVNJR19FWFBSX0xJU1RfREVDTF9TSU5HTEUob3RoZXIsIG90aGVy KTsgXAotCU1TX1BJTl9ERUNMXyhwaW4sIFNJR19FWFBSX0xJU1RfUFRSKHNpZyksIFNJR19FWFBS X0xJU1RfUFRSKG90aGVyKSkKLQotLyoqCi0gKiBTaW5nbGUgc2lnbmFsLCBzaW5nbGUgZnVuY3Rp b24gcGluIGRlY2xhcmF0aW9uCi0gKgotICogQHBpbjogVGhlIHBpbiBudW1iZXIKLSAqIEBvdGhl cjogTWFjcm8gbmFtZSBmb3IgIm90aGVyIiBmdW5jdGlvbmFsaXR5IChzdWJqZWN0ZWQgdG8gc3Ry aW5naWZpY2F0aW9uKQotICogQHNpZzogTWFjcm8gbmFtZSBmb3IgdGhlIHNpZ25hbCAoc3ViamVj dGVkIHRvIHN0cmluZ2lmaWNhdGlvbikKLSAqIEAuLi46IFNpZ25hbCBkZXNjcmlwdG9ycyB0aGF0 IGRlZmluZSB0aGUgZnVuY3Rpb24gZXhwcmVzc2lvbgotICoKLSAqIEZvciBleGFtcGxlOgotICoK LSAqICAgIFNTU0ZfUElOX0RFQ0woQTQsIEdQSU9BMiwgVElNRVIzLCBTSUdfREVTQ19TRVQoU0NV ODAsIDIpKTsKLSAqLwotI2RlZmluZSBTU1NGX1BJTl9ERUNMKHBpbiwgb3RoZXIsIHNpZywgLi4u KSBcCi0JU0lHX0VYUFJfTElTVF9ERUNMX1NJTkdMRShzaWcsIHNpZywgX19WQV9BUkdTX18pOyBc Ci0JU0lHX0VYUFJfTElTVF9ERUNMX1NJTkdMRShvdGhlciwgb3RoZXIpOyBcCi0JTVNfUElOX0RF Q0xfKHBpbiwgU0lHX0VYUFJfTElTVF9QVFIoc2lnKSwgU0lHX0VYUFJfTElTVF9QVFIob3RoZXIp KTsgXAotCUZVTkNfR1JPVVBfREVDTChzaWcsIHBpbikKLQotI2RlZmluZSBHUElPX1BJTl9ERUNM KHBpbiwgZ3BpbykgXAotCVNJR19FWFBSX0xJU1RfREVDTF9TSU5HTEUoZ3BpbywgZ3Bpbyk7IFwK LQlNU19QSU5fREVDTF8ocGluLCBTSUdfRVhQUl9MSVNUX1BUUihncGlvKSkKIAogLyoqCiAgKiBA cGFyYW0gVGhlIHBpbmNvbmYgcGFyYW1ldGVyIHR5cGUKQEAgLTUyNCwyMiArMjUsNiBAQCBzdHJ1 Y3QgYXNwZWVkX3Bpbl9jb25maWcgewogCXU4IHZhbHVlOwogfTsKIAotc3RydWN0IGFzcGVlZF9w aW5jdHJsX2RhdGEgewotCXN0cnVjdCByZWdtYXAgKm1hcHNbQVNQRUVEX05SX1BJTk1VWF9JUFNd OwotCi0JY29uc3Qgc3RydWN0IHBpbmN0cmxfcGluX2Rlc2MgKnBpbnM7Ci0JY29uc3QgdW5zaWdu ZWQgaW50IG5waW5zOwotCi0JY29uc3Qgc3RydWN0IGFzcGVlZF9waW5fZ3JvdXAgKmdyb3VwczsK LQljb25zdCB1bnNpZ25lZCBpbnQgbmdyb3VwczsKLQotCWNvbnN0IHN0cnVjdCBhc3BlZWRfcGlu X2Z1bmN0aW9uICpmdW5jdGlvbnM7Ci0JY29uc3QgdW5zaWduZWQgaW50IG5mdW5jdGlvbnM7Ci0K LQljb25zdCBzdHJ1Y3QgYXNwZWVkX3Bpbl9jb25maWcgKmNvbmZpZ3M7Ci0JY29uc3QgdW5zaWdu ZWQgaW50IG5jb25maWdzOwotfTsKLQogI2RlZmluZSBBU1BFRURfUElOQ1RSTF9QSU4obmFtZV8p IFwKIAlbbmFtZV9dID0geyBcCiAJCS5udW1iZXIgPSBuYW1lXywgXApAQCAtNTQ3LDMwICszMiwx OSBAQCBzdHJ1Y3QgYXNwZWVkX3BpbmN0cmxfZGF0YSB7CiAJCS5kcnZfZGF0YSA9ICh2b2lkICop ICYoUElOX1NZTShuYW1lXykpIFwKIAl9CiAKLXN0cnVjdCBhc3BlZWRfcGluX2dyb3VwIHsKLQlj b25zdCBjaGFyICpuYW1lOwotCWNvbnN0IHVuc2lnbmVkIGludCAqcGluczsKK3N0cnVjdCBhc3Bl ZWRfcGluY3RybF9kYXRhIHsKKwlzdHJ1Y3QgcmVnbWFwICpzY3U7CisKKwljb25zdCBzdHJ1Y3Qg cGluY3RybF9waW5fZGVzYyAqcGluczsKIAljb25zdCB1bnNpZ25lZCBpbnQgbnBpbnM7Ci19Owog Ci0jZGVmaW5lIEFTUEVFRF9QSU5DVFJMX0dST1VQKG5hbWVfKSB7IFwKLQkubmFtZSA9ICNuYW1l XywgXAotCS5waW5zID0gJihQSU5fR1JPVVBfU1lNKG5hbWVfKSlbMF0sIFwKLQkubnBpbnMgPSBB UlJBWV9TSVpFKFBJTl9HUk9VUF9TWU0obmFtZV8pKSwgXAotfQorCWNvbnN0IHN0cnVjdCBhc3Bl ZWRfcGluX2NvbmZpZyAqY29uZmlnczsKKwljb25zdCB1bnNpZ25lZCBpbnQgbmNvbmZpZ3M7CiAK LXN0cnVjdCBhc3BlZWRfcGluX2Z1bmN0aW9uIHsKLQljb25zdCBjaGFyICpuYW1lOwotCWNvbnN0 IGNoYXIgKmNvbnN0ICpncm91cHM7Ci0JdW5zaWduZWQgaW50IG5ncm91cHM7CisJc3RydWN0IGFz cGVlZF9waW5tdXhfZGF0YSBwaW5tdXg7CiB9OwogCi0jZGVmaW5lIEFTUEVFRF9QSU5DVFJMX0ZV TkMobmFtZV8sIC4uLikgeyBcCi0JLm5hbWUgPSAjbmFtZV8sIFwKLQkuZ3JvdXBzID0gJkZVTkNf R1JPVVBfU1lNKG5hbWVfKVswXSwgXAotCS5uZ3JvdXBzID0gQVJSQVlfU0laRShGVU5DX0dST1VQ X1NZTShuYW1lXykpLCBcCi19Ci0KKy8qIEFzcGVlZCBwaW5jdHJsIGhlbHBlcnMgKi8KIGludCBh c3BlZWRfcGluY3RybF9nZXRfZ3JvdXBzX2NvdW50KHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRl dik7CiBjb25zdCBjaGFyICphc3BlZWRfcGluY3RybF9nZXRfZ3JvdXBfbmFtZShzdHJ1Y3QgcGlu Y3RybF9kZXYgKnBjdGxkZXYsCiAJCXVuc2lnbmVkIGludCBncm91cCk7CmRpZmYgLS1naXQgYS9k cml2ZXJzL3BpbmN0cmwvYXNwZWVkL3Bpbm11eC1hc3BlZWQuYyBiL2RyaXZlcnMvcGluY3RybC9h c3BlZWQvcGlubXV4LWFzcGVlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uNWIwZmUxNzhjY2YyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9waW5jdHJsL2Fz cGVlZC9waW5tdXgtYXNwZWVkLmMKQEAgLTAsMCArMSw5NiBAQAorLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKKy8qIENvcHlyaWdodCAoQykgMjAxOSBJQk0gQ29y cC4gKi8KKworLyogUGllY2VzIHRvIGVuYWJsZSBkcml2ZXJzIHRvIGltcGxlbWVudCB0aGUgLnNl dCBjYWxsYmFjayAqLworCisjaW5jbHVkZSAicGlubXV4LWFzcGVlZC5oIgorCitjb25zdCBjaGFy ICpjb25zdCBhc3BlZWRfcGlubXV4X2lwc1tdID0geworCVtBU1BFRURfSVBfU0NVXSA9ICJTQ1Ui LAorCVtBU1BFRURfSVBfR0ZYXSA9ICJHRlgiLAorCVtBU1BFRURfSVBfTFBDXSA9ICJMUEMiLAor fTsKKworc3RhdGljIGlubGluZSB2b2lkIGFzcGVlZF9zaWdfZGVzY19wcmludF92YWwoCisJCWNv bnN0IHN0cnVjdCBhc3BlZWRfc2lnX2Rlc2MgKmRlc2MsIGJvb2wgZW5hYmxlLCB1MzIgcnYpCit7 CisJcHJfZGVidWcoIldhbnQgJXMlWFsweCUwOFhdPTB4JVgsIGdvdCAweCVYIGZyb20gMHglMDhY XG4iLAorCQkJYXNwZWVkX3Bpbm11eF9pcHNbZGVzYy0+aXBdLCBkZXNjLT5yZWcsCisJCQlkZXNj LT5tYXNrLCBlbmFibGUgPyBkZXNjLT5lbmFibGUgOiBkZXNjLT5kaXNhYmxlLAorCQkJKHJ2ICYg ZGVzYy0+bWFzaykgPj4gX19mZnMoZGVzYy0+bWFzayksIHJ2KTsKK30KKworLyoqCisgKiBRdWVy eSB0aGUgZW5hYmxlZCBvciBkaXNhYmxlZCBzdGF0ZSBvZiBhIHNpZ25hbCBkZXNjcmlwdG9yCisg KgorICogQGRlc2M6IFRoZSBzaWduYWwgZGVzY3JpcHRvciBvZiBpbnRlcmVzdAorICogQGVuYWJs ZWQ6IFRydWUgdG8gcXVlcnkgdGhlIGVuYWJsZWQgc3RhdGUsIGZhbHNlIHRvIHF1ZXJ5IGRpc2Fi bGVkIHN0YXRlCisgKiBAbWFwOiBUaGUgSVAgYmxvY2sncyByZWdtYXAgaW5zdGFuY2UKKyAqCisg KiBSZXR1cm46IDEgaWYgdGhlIGRlc2NyaXB0b3IncyBiaXRmaWVsZCBpcyBjb25maWd1cmVkIHRv IHRoZSBzdGF0ZQorICogc2VsZWN0ZWQgYnkgQGVuYWJsZWQsIDAgaWYgbm90LCBhbmQgbGVzcyB0 aGFuIHplcm8gaWYgYW4gdW5yZWNvdmVyYWJsZQorICogZmFpbHVyZSBvY2N1cnJlZAorICoKKyAq IEV2YWx1YXRpb24gb2YgZGVzY3JpcHRvciBzdGF0ZSBpcyBub24tdHJpdmlhbCBpbiB0aGF0IGl0 IGlzIG5vdCBhIGJpbmFyeQorICogb3V0Y29tZTogVGhlIGJpdGZpZWxkcyBjYW4gYmUgZ3JlYXRl ciB0aGFuIG9uZSBiaXQgaW4gc2l6ZSBhbmQgdGh1cyBjYW4gdGFrZQorICogYSB2YWx1ZSB0aGF0 IGlzIG5laXRoZXIgdGhlIGVuYWJsZWQgbm9yIGRpc2FibGVkIHN0YXRlIHJlY29yZGVkIGluIHRo ZQorICogZGVzY3JpcHRvciAodHlwaWNhbGx5IHRoaXMgbWVhbnMgYSBkaWZmZXJlbnQgZnVuY3Rp b24gdG8gdGhlIG9uZSBvZiBpbnRlcmVzdAorICogaXMgZW5hYmxlZCkuIFRodXMgd2UgbXVzdCBl eHBsaWNpdGx5IHRlc3QgZm9yIGVpdGhlciBjb25kaXRpb24gYXMgcmVxdWlyZWQuCisgKi8KK2lu dCBhc3BlZWRfc2lnX2Rlc2NfZXZhbChjb25zdCBzdHJ1Y3QgYXNwZWVkX3NpZ19kZXNjICpkZXNj LAorCQkJIGJvb2wgZW5hYmxlZCwgc3RydWN0IHJlZ21hcCAqbWFwKQoreworCWludCByZXQ7CisJ dW5zaWduZWQgaW50IHJhdzsKKwl1MzIgd2FudDsKKworCWlmICghbWFwKQorCQlyZXR1cm4gLUVO T0RFVjsKKworCXJldCA9IHJlZ21hcF9yZWFkKG1hcCwgZGVzYy0+cmVnLCAmcmF3KTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJYXNwZWVkX3NpZ19kZXNjX3ByaW50X3ZhbChkZXNjLCBl bmFibGVkLCByYXcpOworCXdhbnQgPSBlbmFibGVkID8gZGVzYy0+ZW5hYmxlIDogZGVzYy0+ZGlz YWJsZTsKKworCXJldHVybiAoKHJhdyAmIGRlc2MtPm1hc2spID4+IF9fZmZzKGRlc2MtPm1hc2sp KSA9PSB3YW50OworfQorCisvKioKKyAqIFF1ZXJ5IHRoZSBlbmFibGVkIG9yIGRpc2FibGVkIHN0 YXRlIGZvciBhIG11eCBmdW5jdGlvbidzIHNpZ25hbCBvbiBhIHBpbgorICoKKyAqIEBjdHg6IFRo ZSBkcml2ZXIgY29udGV4dCBmb3IgdGhlIHBpbmN0cmwgSVAKKyAqIEBleHByOiBBbiBleHByZXNz aW9uIGNvbnRyb2xsaW5nIHRoZSBzaWduYWwgZm9yIGEgbXV4IGZ1bmN0aW9uIG9uIGEgcGluCisg KiBAZW5hYmxlZDogVHJ1ZSB0byBxdWVyeSB0aGUgZW5hYmxlZCBzdGF0ZSwgZmFsc2UgdG8gcXVl cnkgZGlzYWJsZWQgc3RhdGUKKyAqCisgKiBSZXR1cm46IDEgaWYgdGhlIGV4cHJlc3Npb24gY29t cG9zZWQgYnkgQGVuYWJsZWQgZXZhbHVhdGVzIHRydWUsIDAgaWYgbm90LAorICogYW5kIGxlc3Mg dGhhbiB6ZXJvIGlmIGFuIHVucmVjb3ZlcmFibGUgZmFpbHVyZSBvY2N1cnJlZC4KKyAqCisgKiBB IG11eCBmdW5jdGlvbiBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGlmIHRoZSBmdW5jdGlvbidzIHNp Z25hbCBleHByZXNzaW9uCisgKiBmb3IgZWFjaCBwaW4gaW4gdGhlIGZ1bmN0aW9uJ3MgcGluIGdy b3VwIGV2YWx1YXRlcyB0cnVlIGZvciB0aGUgZGVzaXJlZAorICogc3RhdGUuIEFuIHNpZ25hbCBl eHByZXNzaW9uIGV2YWx1YXRlcyB0cnVlIGlmIGFsbCBvZiBpdHMgYXNzb2NpYXRlZCBzaWduYWwK KyAqIGRlc2NyaXB0b3JzIGV2YWx1YXRlIHRydWUgZm9yIHRoZSBkZXNpcmVkIHN0YXRlLgorICoK KyAqIElmIGFuIGV4cHJlc3Npb24ncyBzdGF0ZSBpcyBkZXNjcmliZWQgYnkgbW9yZSB0aGFuIG9u ZSBiaXQsIGVpdGhlciB0aHJvdWdoCisgKiBtdWx0aS1iaXQgYml0ZmllbGRzIGluIGEgc2luZ2xl IHNpZ25hbCBkZXNjcmlwdG9yIG9yIHRocm91Z2ggbXVsdGlwbGUgc2lnbmFsCisgKiBkZXNjcmlw dG9ycyBvZiBhIHNpbmdsZSBiaXQgdGhlbiBpdCBpcyBwb3NzaWJsZSBmb3IgdGhlIGV4cHJlc3Np b24gdG8gYmUgaW4KKyAqIG5laXRoZXIgdGhlIGVuYWJsZWQgbm9yIGRpc2FibGVkIHN0YXRlLiBU aHVzIHdlIG11c3QgZXhwbGljaXRseSB0ZXN0IGZvcgorICogZWl0aGVyIGNvbmRpdGlvbiBhcyBy ZXF1aXJlZC4KKyAqLworaW50IGFzcGVlZF9zaWdfZXhwcl9ldmFsKGNvbnN0IHN0cnVjdCBhc3Bl ZWRfcGlubXV4X2RhdGEgKmN0eCwKKwkJCSBjb25zdCBzdHJ1Y3QgYXNwZWVkX3NpZ19leHByICpl eHByLCBib29sIGVuYWJsZWQpCit7CisJaW50IGk7CisJaW50IHJldDsKKworCWZvciAoaSA9IDA7 IGkgPCBleHByLT5uZGVzY3M7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgYXNwZWVkX3NpZ19kZXNj ICpkZXNjID0gJmV4cHItPmRlc2NzW2ldOworCisJCXJldCA9IGFzcGVlZF9zaWdfZGVzY19ldmFs KGRlc2MsIGVuYWJsZWQsIGN0eC0+bWFwc1tkZXNjLT5pcF0pOworCQlpZiAocmV0IDw9IDApCisJ CQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9w aW5jdHJsL2FzcGVlZC9waW5tdXgtYXNwZWVkLmggYi9kcml2ZXJzL3BpbmN0cmwvYXNwZWVkL3Bp bm11eC1hc3BlZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmEw MzZjZThmMTU3MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGluY3RybC9hc3BlZWQvcGlu bXV4LWFzcGVlZC5oCkBAIC0wLDAgKzEsNTM5IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMC1vci1sYXRlciAqLworLyogQ29weXJpZ2h0IChDKSAyMDE5IElCTSBDb3JwLiAg Ki8KKworI2lmbmRlZiBBU1BFRURfUElOTVVYX0gKKyNkZWZpbmUgQVNQRUVEX1BJTk1VWF9ICisK KyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKy8qCisg KiBUaGUgQVNQRUVEIFNvQ3MgcHJvdmlkZSB0eXBpY2FsbHkgbW9yZSB0aGFuIDIwMCBwaW5zIGZv ciBHUElPIGFuZCBvdGhlcgorICogZnVuY3Rpb25zLiBUaGUgU29DIGZ1bmN0aW9uIGVuYWJsZWQg b24gYSBwaW4gaXMgZGV0ZXJtaW5lZCBvbiBhIHByaW9yaXR5CisgKiBiYXNpcyB3aGVyZSBhIGdp dmVuIHBpbiBjYW4gcHJvdmlkZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgc2lnbmFsIHR5cGVzLgor ICoKKyAqIFRoZSBzaWduYWwgYWN0aXZlIG9uIGEgcGluIGlzIGRlc2NyaWJlZCBieSBib3RoIGEg cHJpb3JpdHkgbGV2ZWwgYW5kCisgKiBjb21wb3VuZCBsb2dpY2FsIGV4cHJlc3Npb25zIGludm9s dmluZyBtdWx0aXBsZSBvcGVyYXRvcnMsIHJlZ2lzdGVycyBhbmQKKyAqIGJpdHMuIFNvbWUgZGlm ZmljdWx0eSBhcmlzZXMgYXMgdGhlIHBpbidzIGZ1bmN0aW9uIGJpdCBtYXNrcyBmb3IgZWFjaAor ICogcHJpb3JpdHkgbGV2ZWwgYXJlIGZyZXF1ZW50bHkgbm90IHRoZSBzYW1lIChpLmUuIGNhbm5v dCBqdXN0IGZsaXAgYSBiaXQgdG8KKyAqIGNoYW5nZSBmcm9tIGEgaGlnaCB0byBsb3cgcHJpb3Jp dHkgc2lnbmFsKSwgb3IgZXZlbiBpbiB0aGUgc2FtZSByZWdpc3Rlci4KKyAqIEZ1cnRoZXIsIG5v dCBhbGwgc2lnbmFscyBjYW4gYmUgdW5tdXhlZCwgYXMgc29tZSBleHByZXNzaW9ucyBkZXBlbmQg b24KKyAqIHZhbHVlcyBpbiB0aGUgaGFyZHdhcmUgc3RyYXBwaW5nIHJlZ2lzdGVyICh3aGljaCBp cyB0cmVhdGVkIGFzIHJlYWQtb25seSkuCisgKgorICogU29DIE11bHRpLWZ1bmN0aW9uIFBpbiBF eHByZXNzaW9uIEV4YW1wbGVzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqCisgKiBIZXJlIGFyZSBzb21lIHNhbXBsZSBtdXggY29uZmlndXJhdGlvbnMg ZnJvbSB0aGUgQVNUMjQwMCBhbmQgQVNUMjUwMAorICogZGF0YXNoZWV0cyB0byBpbGx1c3RyYXRl IHRoZSBjb3JuZXIgY2FzZXMsIHJvdWdobHkgaW4gb3JkZXIgb2YgbGVhc3QgdG8gbW9zdAorICog Y29ybmVyLiBUaGUgc2lnbmFsIHByaW9yaXRpZXMgYXJlIGluIGRlY2VuZGluZyBvcmRlciBmcm9t IFAwIChoaWdoZXN0KS4KKyAqCisgKiBENiBpcyBhIHBpbiB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9u IChiZXNpZGUgR1BJTyk7IGEgaGlnaCBwcmlvcml0eSBzaWduYWwKKyAqIHRoYXQgcGFydGljaXBh dGVzIGluIG9uZSBmdW5jdGlvbjoKKyAqCisgKiBCYWxsIHwgRGVmYXVsdCB8IFAwIFNpZ25hbCB8 IFAwIEV4cHJlc3Npb24gICAgICAgICAgICAgICB8IFAxIFNpZ25hbCB8IFAxIEV4cHJlc3Npb24g fCBPdGhlcgorICogLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgKiAg RDYgICAgR1BJT0EwICAgIE1BQzFMSU5LICAgIFNDVTgwWzBdPTEgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPQTAKKyAqIC0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorICoKKyAqIEM1IGlzIGEgbXVsdGktc2lnbmFsIHBpbiAo aGlnaCBhbmQgbG93IHByaW9yaXR5IHNpZ25hbHMpLiBIZXJlIHdlIHRvdWNoCisgKiBkaWZmZXJl bnQgcmVnaXN0ZXJzIGZvciB0aGUgZGlmZmVyZW50IGZ1bmN0aW9ucyB0aGF0IGVuYWJsZSBlYWNo IHNpZ25hbDoKKyAqCisgKiAtLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K KyAqICBDNSAgICBHUElPQTQgICAgU0NMOSAgICAgICAgU0NVOTBbMjJdPTEgICAgICAgICAgICAg ICAgICAgVElNRVI1ICAgICAgU0NVODBbNF09MSAgICAgIEdQSU9BNAorICogLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgKgorICogRTE5IGlzIGEgc2luZ2xlLXNpZ25h bCBwaW4gd2l0aCB0d28gZnVuY3Rpb25zIHRoYXQgaW5mbHVlbmNlIHRoZSBhY3RpdmUKKyAqIHNp Z25hbC4gSW4gdGhpcyBjYXNlIGJvdGggYml0cyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgLSBlbmFi bGUgYSBkZWRpY2F0ZWQKKyAqIExQQyByZXNldCBwaW4uIEhvd2V2ZXIgaXQncyBub3QgYWx3YXlz IHRoZSBjYXNlIHRoYXQgdGhlIGJpdHMgaW4gdGhlCisgKiBPUi1yZWxhdGlvbnNoaXAgaGF2ZSB0 aGUgc2FtZSBtZWFuaW5nLgorICoKKyAqIC0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQorICogIEUxOSAgIEdQSU9CNCAgICBMUENSU1QjICAgICBTQ1U4MFsxMl09MSB8IFN0 cmFwWzE0XT0xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT0I0CisgKiAtLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyAqCisgKiBGb3IgZXhhbXBsZSwg cGluIEIxOSBoYXMgYSBsb3ctcHJpb3JpdHkgc2lnbmFsIHRoYXQncyBlbmFibGVkIGJ5IHR3bwor ICogZGlzdGluY3QgU29DIGZ1bmN0aW9uczogQSBzcGVjaWZpYyBTSU9QQkkgYml0IGluIHJlZ2lz dGVyIFNDVUE0LCBhbmQgYW4gQUNQSQorICogYml0IGluIHRoZSBTVFJBUCByZWdpc3Rlci4gVGhl IEFDUEkgYml0IGNvbmZpZ3VyZXMgc2lnbmFscyBvbiBwaW5zIGluCisgKiBhZGRpdGlvbiB0byBC MTkuIEJvdGggb2YgdGhlIGxvdyBwcmlvcml0eSBmdW5jdGlvbnMgYXMgd2VsbCBhcyB0aGUgaGln aAorICogcHJpb3JpdHkgZnVuY3Rpb24gbXVzdCBiZSBkaXNhYmxlZCBmb3IgR1BJT0YxIHRvIGJl IHVzZWQuCisgKgorICogQmFsbCB8IERlZmF1bHQgfCBQMCBTaWduYWwgfCBQMCBFeHByZXNzaW9u ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQMSBTaWduYWwgfCBQMSBFeHByZXNzaW9uICAg ICAgICAgICAgICAgICAgICAgICAgICB8IE90aGVyCisgKiAtLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisg KiAgQjE5ICAgR1BJT0YxICAgIE5EQ0Q0ICAgICAgIFNDVTgwWzI1XT0xICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFNJT1BCSSMgICAgIFNDVUE0WzEyXT0xIHwgU3RyYXBbMTldPTAgICAg ICAgICAgICAgICAgR1BJT0YxCisgKiAtLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgKgorICogRm9yIHBp biBFMTgsIHRoZSBTb0MgQU5EcyB0aGUgZXhwZWN0ZWQgc3RhdGUgb2YgdGhyZWUgYml0cyB0byBk ZXRlcm1pbmUgdGhlCisgKiBwaW4ncyBhY3RpdmUgc2lnbmFsOgorICoKKyAqICogU0NVM0NbM106 IEVuYWJsZSBleHRlcm5hbCBTT0MgcmVzZXQgZnVuY3Rpb24KKyAqICogU0NVODBbMTVdOiBFbmFi bGUgU1BJQ1MxIyBvciBFWFRSU1QjIGZ1bmN0aW9uIHBpbgorICogKiBTQ1U5MFszMV06IFNlbGVj dCBTUEkgaW50ZXJmYWNlIENTIyBvdXRwdXQKKyAqCisgKiAtLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisg KiAgRTE4ICAgR1BJT0I3ICAgIEVYVFJTVCMgICAgIFNDVTNDWzNdPTEgJiBTQ1U4MFsxNV09MSAm IFNDVTkwWzMxXT0wICAgIFNQSUNTMSMgICAgIFNDVTNDWzNdPTEgJiBTQ1U4MFsxNV09MSAmIFND VTkwWzMxXT0xICAgR1BJT0I3CisgKiAtLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgKgorICogKEJpdHMg U0NVM0NbM10gYW5kIFNDVTgwWzE1XSBhcHBlYXIgdG8gb25seSBiZSB1c2VkIGluIHRoZSBleHBy ZXNzaW9ucyBmb3IKKyAqIHNlbGVjdGluZyB0aGUgc2lnbmFscyBvbiBwaW4gRTE4KQorICoKKyAq IFBpbiBUNSBpcyBhIG11bHRpLXNpZ25hbCBwaW4gd2l0aCBhIG1vcmUgY29tcGxleCBjb25maWd1 cmF0aW9uOgorICoKKyAqIEJhbGwgfCBEZWZhdWx0IHwgUDAgU2lnbmFsIHwgUDAgRXhwcmVzc2lv biAgICAgICAgICAgICAgICB8IFAxIFNpZ25hbCB8IFAxIEV4cHJlc3Npb24gfCBPdGhlcgorICog LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorICogIFQ1ICAgIEdQSU9M MSAgICBWUElERSAgICAgICBTQ1U5MFs1OjRdIT0wICYgU0NVODRbMTddPTEgICAgTkRDRDEgICAg ICAgU0NVODRbMTddPTEgICAgIEdQSU9MMQorICogLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQorICoKKyAqIFRoZSBoaWdoIHByaW9yaXR5IHNpZ25hbCBjb25maWd1cmF0 aW9uIGlzIGJlc3QgdGhvdWdodCBvZiBpbiB0ZXJtcyBvZiBpdHMKKyAqIGV4cGxvZGVkIGZvcm0s IHdpdGggcmVmZXJlbmNlIHRvIHRoZSBTQ1U5MFs1OjRdIGJpdHM6CisgKgorICogKiBTQ1U5MFs1 OjRdPTAwOiBkaXNhYmxlCisgKiAqIFNDVTkwWzU6NF09MDE6IDE4IGJpdHMgKFI2L0c2L0I2KSB2 aWRlbyBtb2RlLgorICogKiBTQ1U5MFs1OjRdPTEwOiAyNCBiaXRzIChSOC9HOC9COCkgdmlkZW8g bW9kZS4KKyAqICogU0NVOTBbNTo0XT0xMTogMzAgYml0cyAoUjEwL0cxMC9CMTApIHZpZGVvIG1v ZGUuCisgKgorICogUmUtd3JpdGluZzoKKyAqCisgKiAtLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tCisgKiAgVDUgICAgR1BJT0wxICAgIFZQSURFICAgICAgKFNDVTkwWzU6 NF09MSAmIFNDVTg0WzE3XT0xKSAgICBORENEMSAgICAgICBTQ1U4NFsxN109MSAgICAgR1BJT0wx CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoU0NVOTBbNTo0XT0yICYgU0NVODRb MTddPTEpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoU0NVOTBbNTo0XT0zICYg U0NVODRbMTddPTEpCisgKiAtLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t CisgKgorICogRm9yIHJlZmVyZW5jZSB0aGUgU0NVODRbMTddIGJpdCBjb25maWd1cmUgdGhlICJV QVJUMSBORENEMSBvciBWaWRlbyBWUElERQorICogZnVuY3Rpb24gcGluIiwgd2hlcmUgdGhlIHNp Z25hbCBpdHNlbGYgaXMgZGV0ZXJtaW5lZCBieSB3aGV0aGVyIFNDVTk0WzU6NF0KKyAqIGlzIGRp c2FibGVkIG9yIGluIG9uZSBvZiB0aGUgMTgsIDI0IG9yIDMwYml0IHZpZGVvIG1vZGVzLgorICoK KyAqIE90aGVyIHZpZGVvLWlucHV0LXJlbGF0ZWQgcGlucyByZXF1aXJlIGFuIGV4cGxpY2l0IHN0 YXRlIGluIFNDVTkwWzU6NF0sIGUuZy4KKyAqIFcxIGFuZCBVNToKKyAqCisgKiAtLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgKiAgVzEgICAgR1BJT0w2ICAgIFZQSUIw ICAgICAgIFNDVTkwWzU6NF09MyAmIFNDVTg0WzIyXT0xICAgICBUWEQxICAgICAgICBTQ1U4NFsy Ml09MSAgICAgR1BJT0w2CisgKiAgVTUgICAgR1BJT0w3ICAgIFZQSUIxICAgICAgIFNDVTkwWzU6 NF09MyAmIFNDVTg0WzIzXT0xICAgICBSWEQxICAgICAgICBTQ1U4NFsyM109MSAgICAgR1BJT0w3 CisgKiAtLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgKgorICogVGhl IGV4YW1wbGVzIG9mIFQ1IGFuZCBXMSBhcmUgcGFydGljdWxhcmx5IGZlcnRpbGUsIGFzIHRoZXkg YWxzbyBkZW1vbnN0cmF0ZQorICogdGhhdCBkZXNwaXRlIG9wZXJhdGluZyBhcyBwYXJ0IG9mIHRo ZSB2aWRlbyBpbnB1dCBidXMgZWFjaCBzaWduYWwgbmVlZHMgdG8KKyAqIGJlIGVuYWJsZWQgaW5k aXZpZHVhbGx5IHZpYSBpdCdzIG93biBTQ1U4NCAoaW4gdGhlIGNhc2VzIG9mIFQ1IGFuZCBXMSkK KyAqIHJlZ2lzdGVyIGJpdC4gVGhpcyBpcyBhIGxpdHRsZSBjcmF6eSBpZiB0aGUgYnVzIGRvZXNu J3QgaGF2ZSBvcHRpb25hbAorICogc2lnbmFscywgYnV0IGlzIHVzZWQgdG8gZGVjZW50IGVmZmVj dCB3aXRoIHNvbWUgb2YgdGhlIFVBUlRzIHdoZXJlIG5vdCBhbGwKKyAqIHNpZ25hbHMgYXJlIHJl cXVpcmVkLiBIb3dldmVyLCB0aGlzIGlzbid0IGRvbmUgY29uc2lzdGVudGx5IC0gVUFSVDEgaXMK KyAqIGVuYWJsZWQgb24gYSBwZXItcGluIGJhc2lzLCBhbmQgYnkgY29udHJhc3QsIGFsbCBzaWdu YWxzIGZvciBVQVJUNiBhcmUKKyAqIGVuYWJsZWQgYnkgYSBzaW5nbGUgYml0LgorICoKKyAqIEZ1 cnRoZXIsIHRoZSBoaWdoIGFuZCBsb3cgcHJpb3JpdHkgc2lnbmFscyBsaXN0ZWQgaW4gdGhlIHRh YmxlIGFib3ZlIHNoYXJlCisgKiBhIGNvbmZpZ3VyYXRpb24gYml0LiBUaGUgVlBJIHNpZ25hbHMg c2hvdWxkIG9wZXJhdGUgaW4gY29uY2VydCBpbiBhIHNpbmdsZQorICogZnVuY3Rpb24sIGJ1dCB0 aGUgVUFSVCBzaWduYWxzIHNob3VsZCByZXRhaW4gdGhlIGFiaWxpdHkgdG8gYmUgY29uZmlndXJl ZAorICogaW5kZXBlbmRlbnRseS4gVGhpcyBwdXNoZXMgdGhlIGltcGxlbWVudGF0aW9uIGRvd24g dGhlIHBhdGggb2YgdGFnZ2luZyBhCisgKiBzaWduYWwncyBleHByZXNzaW9ucyB3aXRoIHRoZSBm dW5jdGlvbiB0aGV5IHBhcnRpY2lwYXRlIGluLCByYXRoZXIgdGhhbgorICogZGVmaW5pbmcgbWFz a3MgYWZmZWN0aW5nIG11bHRpcGxlIHNpZ25hbHMgcGVyIGZ1bmN0aW9uLiBUaGUgbGF0dGVyIGFw cHJvYWNoCisgKiBmYWlscyBpbiB0aGlzIGluc3RhbmNlIHdoZXJlIGFwcGx5aW5nIHRoZSBjb25m aWd1cmF0aW9uIGZvciB0aGUgVUFSVCBwaW4gb2YKKyAqIGludGVyZXN0IHdpbGwgc3RvbXAgb24g dGhlIHN0YXRlIG9mIG90aGVyIFVBUlQgc2lnbmFscyB3aGVuIGRpc2FibGluZyB0aGUKKyAqIFZQ SSBmdW5jdGlvbnMgb24gdGhlIGN1cnJlbnQgcGluLgorICoKKyAqIEJhbGwgfCAgRGVmYXVsdCAg IHwgUDAgU2lnbmFsIHwgUDAgRXhwcmVzc2lvbiAgICAgICAgICAgICB8IFAxIFNpZ25hbCB8IFAx IEV4cHJlc3Npb24gfCBPdGhlcgorICogLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tCisgKiAgQTEyICAgUkdNSUkxVFhDSyAgIEdQSU9UMCAgICAgIFNDVUEwWzBdPTEg ICAgICAgICAgICAgICAgICBSTUlJMVRYRU4gICBTdHJhcFs2XT0wICAgICAgUkdNSUkxVFhDSwor ICogIEIxMiAgIFJHTUlJMVRYQ1RMICBHUElPVDEgICAgICBTQ1VBMFsxXT0xICAgICAgICAgICAg ICAgICAg4oCTICAgICAgICAgICBTdHJhcFs2XT0wICAgICAgUkdNSUkxVFhDVEwKKyAqIC0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorICoKKyAqIEExMiBkZW1vbnN0 cmF0ZXMgdGhhdCB0aGUgIk90aGVyIiBzaWduYWwgaXNuJ3QgYWx3YXlzIEdQSU8gLSBpbiB0aGlz IGNhc2UKKyAqIEdQSU9UMCBpcyBhIGhpZ2gtcHJpb3JpdHkgc2lnbmFsIGFuZCBSR01JSTFUWENL IGlzIE90aGVyLiBUaHVzLCBHUElPCisgKiBzaG91bGQgYmUgdHJlYXRlZCBsaWtlIGFueSBvdGhl ciBzaWduYWwgdHlwZSB3aXRoIGZ1bGwgZnVuY3Rpb24gZXhwcmVzc2lvbgorICogcmVxdWlyZW1l bnRzLCBhbmQgbm90IGFzc3VtZWQgdG8gYmUgdGhlIGRlZmF1bHQgY2FzZS4gU2VwYXJhdGVseSwg R1BJT1QwIGFuZAorICogR1BJT1QxJ3Mgc2lnbmFsIGRlc2NyaXB0b3IgYml0cyBhcmUgZGlzdGlu Y3QsIHRoZXJlZm9yZSB3ZSBtdXN0IGl0ZXJhdGUgYWxsCisgKiBwaW5zIGluIHRoZSBmdW5jdGlv bidzIGdyb3VwIHRvIGRpc2FibGUgdGhlIGhpZ2hlci1wcmlvcml0eSBzaWduYWxzIHN1Y2gKKyAq IHRoYXQgdGhlIHNpZ25hbCBmb3IgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0IGlzIGNvcnJlY3Rs eSBlbmFibGVkLgorICoKKyAqIEZpbmFsbHksIHRocmVlIHByaW9yaXR5IGxldmVscyBhcmVuJ3Qg YWx3YXlzIGVub3VnaDsgdGhlIEFTVDI1MDAgYnJpbmdzIHdpdGgKKyAqIGl0IDE4IHBpbnMgb2Yg Zml2ZSBwcmlvcml0eSBsZXZlbHMsIGhvd2V2ZXIgdGhlIDE4IHBpbnMgb25seSB1c2UgdGhyZWUg b2YKKyAqIHRoZSBmaXZlIHByaW9yaXR5IGxldmVscy4KKyAqCisgKiBVbHRpbWF0ZWx5IHRoZSBy ZXF1aXJlbWVudCB0byBjb250cm9sIHBpbnMgaW4gdGhlIGV4YW1wbGVzIGFib3ZlIGRyaXZlIHRo ZQorICogZGVzaWduOgorICoKKyAqICogUGlucyBwcm92aWRlIHNpZ25hbHMgYWNjb3JkaW5nIHRv IGZ1bmN0aW9ucyBhY3RpdmF0ZWQgaW4gdGhlIG11eAorICogICBjb25maWd1cmF0aW9uCisgKgor ICogKiBQaW5zIHByb3ZpZGUgdXAgdG8gZml2ZSBzaWduYWwgdHlwZXMgaW4gYSBwcmlvcml0eSBv cmRlcgorICoKKyAqICogRm9yIHByaW9yaXRpZXMgbGV2ZWxzIGRlZmluZWQgb24gYSBwaW4sIGVh Y2ggcHJpb3JpdHkgcHJvdmlkZXMgb25lIHNpZ25hbAorICoKKyAqICogRW5hYmxpbmcgbG93ZXIg cHJpb3JpdHkgc2lnbmFscyByZXF1aXJlcyBoaWdoZXIgcHJpb3JpdHkgc2lnbmFscyBiZQorICog ICBkaXNhYmxlZAorICoKKyAqICogQSBmdW5jdGlvbiByZXByZXNlbnRzIGEgc2V0IG9mIHNpZ25h bHM7IGZ1bmN0aW9ucyBhcmUgZGlzdGluY3QgaWYgdGhlaXIKKyAqICAgc2V0cyBvZiBzaWduYWxz IGFyZSBub3QgZXF1YWwKKyAqCisgKiAqIFNpZ25hbHMgcGFydGljaXBhdGUgaW4gb25lIG9yIG1v cmUgZnVuY3Rpb25zCisgKgorICogKiBBIGZ1bmN0aW9uIGlzIGRlc2NyaWJlZCBieSBhbiBleHBy ZXNzaW9uIG9mIG9uZSBvciBtb3JlIHNpZ25hbAorICogICBkZXNjcmlwdG9ycywgd2hpY2ggY29t cGFyZSBiaXQgdmFsdWVzIGluIGEgcmVnaXN0ZXIKKyAqCisgKiAqIEEgc2lnbmFsIGV4cHJlc3Np b24gaXMgdGhlIHNtYWxsZXN0IHNldCBvZiBzaWduYWwgZGVzY3JpcHRvcnMgd2hvc2UKKyAqICAg Y29tcGFyaXNvbnMgbXVzdCBldmFsdWF0ZSAndHJ1ZScgZm9yIGEgc2lnbmFsIHRvIGJlIGVuYWJs ZWQgb24gYSBwaW4uCisgKgorICogKiBBIGZ1bmN0aW9uJ3Mgc2lnbmFsIGlzIGFjdGl2ZSBvbiBh IHBpbiBpZiBldmFsdWF0aW5nIGFsbCBzaWduYWwKKyAqICAgZGVzY3JpcHRvcnMgaW4gdGhlIHBp bidzIHNpZ25hbCBleHByZXNzaW9uIGZvciB0aGUgZnVuY3Rpb24geWllbGRzIGEgJ3RydWUnCisg KiAgIHJlc3VsdAorICoKKyAqICogQSBzaWduYWwgYXQgYSBnaXZlbiBwcmlvcml0eSBvbiBhIGdp dmVuIHBpbiBpcyBhY3RpdmUgaWYgYW55IG9mIHRoZQorICogICBmdW5jdGlvbnMgaW4gd2hpY2gg dGhlIHNpZ25hbCBwYXJ0aWNpcGF0ZXMgYXJlIGFjdGl2ZSwgYW5kIG5vIGhpZ2hlcgorICogICBw cmlvcml0eSBzaWduYWwgb24gdGhlIHBpbiBpcyBhY3RpdmUKKyAqCisgKiAqIEdQSU8gaXMgY29u ZmlndXJlZCBwZXItcGluCisgKgorICogQW5kIHNvOgorICoKKyAqICogVG8gZGlzYWJsZSBhIHNp Z25hbCwgYW55IGZ1bmN0aW9uKHMpIGFjdGl2YXRpbmcgdGhlIHNpZ25hbCBtdXN0IGJlCisgKiAg IGRpc2FibGVkCisgKgorICogKiBFYWNoIHBpbiBtdXN0IGtub3cgdGhlIHNpZ25hbCBleHByZXNz aW9ucyBvZiBmdW5jdGlvbnMgaW4gd2hpY2ggaXQKKyAqICAgcGFydGljaXBhdGVzLCBmb3IgdGhl IHB1cnBvc2Ugb2YgZW5hYmxpbmcgdGhlIE90aGVyIGZ1bmN0aW9uLiBUaGlzIGlzIGRvbmUKKyAq ICAgYnkgZGVhY3RpdmF0aW5nIGFsbCBmdW5jdGlvbnMgdGhhdCBhY3RpdmF0ZSBoaWdoZXIgcHJp b3JpdHkgc2lnbmFscyBvbiB0aGUKKyAqICAgcGluLgorICoKKyAqIEFzIGEgY29uY3JldGUgZXhh bXBsZToKKyAqCisgKiAqIFQ1IHByb3ZpZGVzIHRocmVlIHNpZ25hbHMgdHlwZXM6IFZQSURFLCBO RENEMSBhbmQgR1BJTworICoKKyAqICogVGhlIFZQSURFIHNpZ25hbCBwYXJ0aWNpcGF0ZXMgaW4g MyBmdW5jdGlvbnM6IFZQSTE4LCBWUEkyNCBhbmQgVlBJMzAKKyAqCisgKiAqIFRoZSBORENEMSBz aWduYWwgcGFydGljaXBhdGVzIGluIGp1c3QgaXRzIG93biBORENEMSBmdW5jdGlvbgorICoKKyAq ICogVlBJREUgaXMgaGlnaCBwcmlvcml0eSwgTkRDRDEgaXMgbG93IHByaW9yaXR5LCBhbmQgR1BJ T0wxIGlzIHRoZSBsZWFzdAorICogICBwcmlvcml0aXNlZAorICoKKyAqICogVGhlIHByZXJlcXVp c2l0IGZvciBhY3RpdmF0aW5nIHRoZSBORENEMSBzaWduYWwgaXMgdGhhdCB0aGUgVlBJMTgsIFZQ STI0CisgKiAgIGFuZCBWUEkzMCBmdW5jdGlvbnMgYWxsIGJlIGRpc2FibGVkCisgKgorICogKiBT aW1pbGFybHksIGFsbCBvZiBWUEkxOCwgVlBJMjQsIFZQSTMwIGFuZCBORENEMSBmdW5jdGlvbnMg bXVzdCBiZSBkaXNhYmxlZAorICogICB0byBwcm92aWRlIEdQSU9MNgorICoKKyAqIENvbnNpZGVy YXRpb25zCisgKiAtLS0tLS0tLS0tLS0tLQorICoKKyAqIElmIHBpbmN0cmwgYWxsb3dzIHVzIHRv IGFsbG9jYXRlIGEgcGluIHdlIGNhbiBjb25maWd1cmUgYSBmdW5jdGlvbiB3aXRob3V0CisgKiBj b25jZXJuIGZvciB0aGUgZnVuY3Rpb24gb2YgYWxyZWFkeSBhbGxvY2F0ZWQgcGlucywgaWYgcGlu IGdyb3VwcyBhcmUKKyAqIGNyZWF0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBTb0MgZnVuY3Rpb25z IGluIHdoaWNoIHRoZXkgcGFydGljaXBhdGUuIFRoaXMgaXMKKyAqIGludHVpdGl2ZSwgYnV0IGl0 IGRpZCBub3QgZmVlbCBvYnZpb3VzIGZyb20gdGhlIGJpdC9waW4gcmVsYXRpb25zaGlwcy4KKyAq CisgKiBDb252ZXJzZWx5LCBmYWlsaW5nIHRvIGFsbG9jYXRlIGFsbCBwaW5zIGluIGEgZ3JvdXAg aW5kaWNhdGVzIHNvbWUgYml0cyAoYXMKKyAqIHdlbGwgYXMgcGlucykgcmVxdWlyZWQgZm9yIHRo ZSBncm91cCdzIGNvbmZpZ3VyYXRpb24gd2lsbCBhbHJlYWR5IGJlIGluIHVzZSwKKyAqIGxpa2Vs eSBpbiBhIHdheSB0aGF0J3MgaW5jb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0 aGUgZmFpbGVkCisgKiBncm91cC4KKyAqLworCisjZGVmaW5lIEFTUEVFRF9JUF9TQ1UJCTAKKyNk ZWZpbmUgQVNQRUVEX0lQX0dGWAkJMQorI2RlZmluZSBBU1BFRURfSVBfTFBDCQkyCisjZGVmaW5l IEFTUEVFRF9OUl9QSU5NVVhfSVBTCTMKKworIC8qKgorICAqIEEgc2lnbmFsIGRlc2NyaXB0b3Is IHdoaWNoIGRlc2NyaWJlcyB0aGUgcmVnaXN0ZXIsIGJpdHMgYW5kIHRoZQorICAqIGVuYWJsZS9k aXNhYmxlIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBjb21wYXJlZCBvciB3cml0dGVuLgorICAqCisg ICogQGlwOiBUaGUgSVAgYmxvY2sgaWRlbnRpZmllciwgdXNlZCBhcyBhbiBpbmRleCBpbnRvIHRo ZSByZWdtYXAgYXJyYXkgaW4KKyAgKiAgICAgIHN0cnVjdCBhc3BlZWRfcGluY3RybF9kYXRhCisg ICogQHJlZzogVGhlIHJlZ2lzdGVyIG9mZnNldCB3aXRoIHJlc3BlY3QgdG8gdGhlIGJhc2UgYWRk cmVzcyBvZiB0aGUgSVAgYmxvY2sKKyAgKiBAbWFzazogVGhlIG1hc2sgdG8gYXBwbHkgdG8gdGhl IHJlZ2lzdGVyLiBUaGUgbG93ZXN0IHNldCBiaXQgb2YgdGhlIG1hc2sgaXMKKyAgKiAgICAgICAg dXNlZCB0byBkZXJpdmUgdGhlIHNoaWZ0IHZhbHVlLgorICAqIEBlbmFibGU6IFRoZSB2YWx1ZSB0 aGF0IGVuYWJsZXMgdGhlIGZ1bmN0aW9uLiBWYWx1ZSBzaG91bGQgYmUgaW4gdGhlIExTQnMsCisg ICogICAgICAgICAgbm90IGF0IHRoZSBwb3NpdGlvbiBvZiB0aGUgbWFzay4KKyAgKiBAZGlzYWJs ZTogVGhlIHZhbHVlIHRoYXQgZGlzYWJsZXMgdGhlIGZ1bmN0aW9uLiBWYWx1ZSBzaG91bGQgYmUg aW4gdGhlCisgICogICAgICAgICAgIExTQnMsIG5vdCBhdCB0aGUgcG9zaXRpb24gb2YgdGhlIG1h c2suCisgICovCitzdHJ1Y3QgYXNwZWVkX3NpZ19kZXNjIHsKKwl1bnNpZ25lZCBpbnQgaXA7CisJ dW5zaWduZWQgaW50IHJlZzsKKwl1MzIgbWFzazsKKwl1MzIgZW5hYmxlOworCXUzMiBkaXNhYmxl OworfTsKKworLyoqCisgKiBEZXNjcmliZXMgYSBzaWduYWwgZXhwcmVzc2lvbi4gVGhlIGV4cHJl c3Npb24gaXMgZXZhbHVhdGVkIGJ5IEFORGluZyB0aGUKKyAqIGV2YWx1YXRpb24gb2YgdGhlIGRl c2NyaXB0b3JzLgorICoKKyAqIEBzaWduYWw6IFRoZSBzaWduYWwgbmFtZSBmb3IgdGhlIHByaW9y aXR5IGxldmVsIG9uIHRoZSBwaW4uIElmIHRoZSBzaWduYWwKKyAqICAgICAgICAgIHR5cGUgaXMg R1BJTywgdGhlbiB0aGUgc2lnbmFsIG5hbWUgbXVzdCBiZWdpbiB3aXRoIHRoZSBzdHJpbmcKKyAq ICAgICAgICAgICJHUElPIiwgZS5nLiBHUElPQTAsIEdQSU9UNCBldGMuCisgKiBAZnVuY3Rpb246 IFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0aGUgc2lnbmFsIHBhcnRpY2lwYXRlcyBpbiBmb3Ig dGhlCisgKiAgICAgICAgICAgIGFzc29jaWF0ZWQgZXhwcmVzc2lvbgorICogQG5kZXNjczogVGhl IG51bWJlciBvZiBzaWduYWwgZGVzY3JpcHRvcnMgaW4gdGhlIGV4cHJlc3Npb24KKyAqIEBkZXNj czogUG9pbnRlciB0byBhbiBhcnJheSBvZiBzaWduYWwgZGVzY3JpcHRvcnMgdGhhdCBjb21wcmlz ZSB0aGUKKyAqICAgICAgICAgZnVuY3Rpb24gZXhwcmVzc2lvbgorICovCitzdHJ1Y3QgYXNwZWVk X3NpZ19leHByIHsKKwljb25zdCBjaGFyICpzaWduYWw7CisJY29uc3QgY2hhciAqZnVuY3Rpb247 CisJaW50IG5kZXNjczsKKwljb25zdCBzdHJ1Y3QgYXNwZWVkX3NpZ19kZXNjICpkZXNjczsKK307 CisKKy8qKgorICogQSBzdHJ1Y3QgY2FwdHVyaW5nIHRoZSBsaXN0IG9mIGV4cHJlc3Npb25zIGVu YWJsaW5nIHNpZ25hbHMgYXQgZWFjaCBwcmlvcml0eQorICogZm9yIGEgZ2l2ZW4gcGluLiBUaGUg c2lnbmFsIGNvbmZpZ3VyYXRpb24gZm9yIGEgcHJpb3JpdHkgbGV2ZWwgaXMgZXZhbHVhdGVkCisg KiBieSBPUmluZyB0aGUgZXZhbHVhdGlvbiBvZiB0aGUgc2lnbmFsIGV4cHJlc3Npb25zIGluIHRo ZSByZXNwZWN0aXZlCisgKiBwcmlvcml0eSdzIGxpc3QuCisgKgorICogQG5hbWU6IEEgbmFtZSBm b3IgdGhlIHBpbgorICogQHByaW9zOiBBIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgZXhwcmVzc2lv biBsaXN0IHBvaW50ZXJzCisgKgorICovCitzdHJ1Y3QgYXNwZWVkX3Bpbl9kZXNjIHsKKwljb25z dCBjaGFyICpuYW1lOworCWNvbnN0IHN0cnVjdCBhc3BlZWRfc2lnX2V4cHIgKioqcHJpb3M7Cit9 OworCisvKiBNYWNybyBoZWxsICovCisKKyNkZWZpbmUgU0lHX0RFU0NfSVBfQklUKGlwLCByZWcs IGlkeCwgdmFsKSBcCisJeyBpcCwgcmVnLCBCSVRfTUFTSyhpZHgpLCB2YWwsICgoKHZhbCkgKyAx KSAmIDEpIH0KKworLyoqCisgKiBTaG9ydC1oYW5kIG1hY3JvIGZvciBkZXNjcmliaW5nIGFuIFND VSBkZXNjcmlwdG9yIGVuYWJsZWQgYnkgdGhlIHN0YXRlIG9mCisgKiBvbmUgYml0LiBUaGUgZGlz YWJsZSB2YWx1ZSBpcyBkZXJpdmVkLgorICoKKyAqIEByZWc6IFRoZSBzaWduYWwncyBhc3NvY2lh dGVkIHJlZ2lzdGVyLCBvZmZzZXQgZnJvbSBiYXNlCisgKiBAaWR4OiBUaGUgc2lnbmFsJ3MgYml0 IGluZGV4IGluIHRoZSByZWdpc3RlcgorICogQHZhbDogVGhlIHZhbHVlICgwIG9yIDEpIHRoYXQg ZW5hYmxlcyB0aGUgZnVuY3Rpb24KKyAqLworI2RlZmluZSBTSUdfREVTQ19CSVQocmVnLCBpZHgs IHZhbCkgXAorCVNJR19ERVNDX0lQX0JJVChBU1BFRURfSVBfU0NVLCByZWcsIGlkeCwgdmFsKQor CisjZGVmaW5lIFNJR19ERVNDX0lQX1NFVChpcCwgcmVnLCBpZHgpIFNJR19ERVNDX0lQX0JJVChp cCwgcmVnLCBpZHgsIDEpCisKKy8qKgorICogQSBmdXJ0aGVyIHNob3J0LWhhbmQgbWFjcm8gZXhw YW5kaW5nIHRvIGFuIFNDVSBkZXNjcmlwdG9yIGVuYWJsZWQgYnkgYSBzZXQKKyAqIGJpdC4KKyAq CisgKiBAcmVnOiBUaGUgcmVnaXN0ZXIsIG9mZnNldCBmcm9tIGJhc2UKKyAqIEBpZHg6IFRoZSBi aXQgaW5kZXggaW4gdGhlIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgU0lHX0RFU0NfU0VUKHJlZywg aWR4KSBTSUdfREVTQ19JUF9CSVQoQVNQRUVEX0lQX1NDVSwgcmVnLCBpZHgsIDEpCisKKyNkZWZp bmUgU0lHX0RFU0NfTElTVF9TWU0oc2lnLCBmdW5jKSBzaWdfZGVzY3NfICMjIHNpZyAjIyBfICMj IGZ1bmMKKyNkZWZpbmUgU0lHX0RFU0NfTElTVF9ERUNMKHNpZywgZnVuYywgLi4uKSBcCisJc3Rh dGljIGNvbnN0IHN0cnVjdCBhc3BlZWRfc2lnX2Rlc2MgU0lHX0RFU0NfTElTVF9TWU0oc2lnLCBm dW5jKVtdID0gXAorCQl7IF9fVkFfQVJHU19fIH0KKworI2RlZmluZSBTSUdfRVhQUl9TWU0oc2ln LCBmdW5jKSBzaWdfZXhwcl8gIyMgc2lnICMjIF8gIyMgZnVuYworI2RlZmluZSBTSUdfRVhQUl9E RUNMXyhzaWcsIGZ1bmMpIFwKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGFzcGVlZF9zaWdfZXhwciBT SUdfRVhQUl9TWU0oc2lnLCBmdW5jKSA9IFwKKwl7IFwKKwkJLnNpZ25hbCA9ICNzaWcsIFwKKwkJ LmZ1bmN0aW9uID0gI2Z1bmMsIFwKKwkJLm5kZXNjcyA9IEFSUkFZX1NJWkUoU0lHX0RFU0NfTElT VF9TWU0oc2lnLCBmdW5jKSksIFwKKwkJLmRlc2NzID0gJihTSUdfREVTQ19MSVNUX1NZTShzaWcs IGZ1bmMpKVswXSwgXAorCX0KKworLyoqCisgKiBEZWNsYXJlIGEgc2lnbmFsIGV4cHJlc3Npb24u CisgKgorICogQHNpZzogQSBtYWNybyBzeW1ib2wgbmFtZSBmb3IgdGhlIHNpZ25hbCAoaXMgc3Vi amVjdGVkIHRvIHN0cmluZ2lmaWNhdGlvbgorICogICAgICAgIGFuZCB0b2tlbiBwYXN0aW5nKQor ICogQGZ1bmM6IFRoZSBmdW5jdGlvbiBpbiB3aGljaCB0aGUgc2lnbmFsIGlzIHBhcnRpY2lwYXRp bmcKKyAqIEAuLi46IFNpZ25hbCBkZXNjcmlwdG9ycyB0aGF0IGRlZmluZSB0aGUgc2lnbmFsIGV4 cHJlc3Npb24KKyAqCisgKiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBkZWNsYXJlcyB0aGUg Uk9NRDggc2lnbmFsIGZvciB0aGUgUk9NMTYgZnVuY3Rpb246CisgKgorICogICAgIFNJR19FWFBS X0RFQ0woUk9NRDgsIFJPTTE2LCBTSUdfREVTQ19TRVQoU0NVOTAsIDYpKTsKKyAqCisgKiBBbmQg d2l0aCBtdWx0aXBsZSBzaWduYWwgZGVzY3JpcHRvcnM6CisgKgorICogICAgIFNJR19FWFBSX0RF Q0woUk9NRDgsIFJPTTE2UywgU0lHX0RFU0NfU0VUKEhXX1NUUkFQMSwgNCksCisgKiAgICAgICAg ICAgICAgeyBIV19TVFJBUDEsIEdFTk1BU0soMSwgMCksIDAsIDAgfSk7CisgKi8KKyNkZWZpbmUg U0lHX0VYUFJfREVDTChzaWcsIGZ1bmMsIC4uLikgXAorCVNJR19ERVNDX0xJU1RfREVDTChzaWcs IGZ1bmMsIF9fVkFfQVJHU19fKTsgXAorCVNJR19FWFBSX0RFQ0xfKHNpZywgZnVuYykKKworLyoq CisgKiBEZWNsYXJlIGEgcG9pbnRlciB0byBhIHNpZ25hbCBleHByZXNzaW9uCisgKgorICogQHNp ZzogVGhlIG1hY3JvIHN5bWJvbCBuYW1lIGZvciB0aGUgc2lnbmFsIChzdWJqZWN0ZWQgdG8gdG9r ZW4gcGFzdGluZykKKyAqIEBmdW5jOiBUaGUgbWFjcm8gc3ltYm9sIG5hbWUgZm9yIHRoZSBmdW5j dGlvbiAoc3ViamVjdGVkIHRvIHRva2VuIHBhc3RpbmcpCisgKi8KKyNkZWZpbmUgU0lHX0VYUFJf UFRSKHNpZywgZnVuYykgKCZTSUdfRVhQUl9TWU0oc2lnLCBmdW5jKSkKKworI2RlZmluZSBTSUdf RVhQUl9MSVNUX1NZTShzaWcpIHNpZ19leHByc18gIyMgc2lnCisKKy8qKgorICogRGVjbGFyZSBh IHNpZ25hbCBleHByZXNzaW9uIGxpc3QgZm9yIHJlZmVyZW5jZSBpbiBhIHN0cnVjdCBhc3BlZWRf cGluX3ByaW8uCisgKgorICogQHNpZzogQSBtYWNybyBzeW1ib2wgbmFtZSBmb3IgdGhlIHNpZ25h bCAoaXMgc3ViamVjdGVkIHRvIHRva2VuIHBhc3RpbmcpCisgKiBALi4uOiBTaWduYWwgZXhwcmVz c2lvbiBzdHJ1Y3R1cmUgcG9pbnRlcnMgKHVzZSBTSUdfRVhQUl9QVFIoKSkKKyAqCisgKiBGb3Ig ZXhhbXBsZSwgdGhlIDE2LWJpdCBST00gYnVzIGNhbiBiZSBlbmFibGVkIGJ5IG9uZSBvZiB0d28g cG9zc2libGUgc2lnbmFsCisgKiBleHByZXNzaW9uczoKKyAqCisgKiAgICAgU0lHX0VYUFJfREVD TChST01EOCwgUk9NMTYsIFNJR19ERVNDX1NFVChTQ1U5MCwgNikpOworICogICAgIFNJR19FWFBS X0RFQ0woUk9NRDgsIFJPTTE2UywgU0lHX0RFU0NfU0VUKEhXX1NUUkFQMSwgNCksCisgKiAgICAg ICAgICAgICAgeyBIV19TVFJBUDEsIEdFTk1BU0soMSwgMCksIDAsIDAgfSk7CisgKiAgICAgU0lH X0VYUFJfTElTVF9ERUNMKFJPTUQ4LCBTSUdfRVhQUl9QVFIoUk9NRDgsIFJPTTE2KSwKKyAqICAg ICAgICAgICAgICBTSUdfRVhQUl9QVFIoUk9NRDgsIFJPTTE2UykpOworICovCisjZGVmaW5lIFNJ R19FWFBSX0xJU1RfREVDTChzaWcsIC4uLikgXAorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXNwZWVk X3NpZ19leHByICpTSUdfRVhQUl9MSVNUX1NZTShzaWcpW10gPSBcCisJCXsgX19WQV9BUkdTX18s IE5VTEwgfQorCisvKioKKyAqIEEgc2hvcnQtaGFuZCBtYWNybyBmb3IgZGVjbGFyaW5nIGEgZnVu Y3Rpb24gZXhwcmVzc2lvbiBhbmQgYW4gZXhwcmVzc2lvbgorICogbGlzdCB3aXRoIGEgc2luZ2xl IGZ1bmN0aW9uLgorICoKKyAqIEBmdW5jOiBBIG1hY3JvIHN5bWJvbCBuYW1lIGZvciB0aGUgZnVu Y3Rpb24gKGlzIHN1YmplY3RlZCB0byB0b2tlbiBwYXN0aW5nKQorICogQC4uLjogRnVuY3Rpb24g ZGVzY3JpcHRvcnMgdGhhdCBkZWZpbmUgdGhlIGZ1bmN0aW9uIGV4cHJlc3Npb24KKyAqCisgKiBG b3IgZXhhbXBsZSwgc2lnbmFsIE5DVFM2IHBhcnRpY2lwYXRlcyBpbiBpdHMgb3duIGZ1bmN0aW9u IHdpdGggb25lIGdyb3VwOgorICoKKyAqICAgICBTSUdfRVhQUl9MSVNUX0RFQ0xfU0lOR0xFKE5D VFM2LCBOQ1RTNiwgU0lHX0RFU0NfU0VUKFNDVTkwLCA3KSk7CisgKi8KKyNkZWZpbmUgU0lHX0VY UFJfTElTVF9ERUNMX1NJTkdMRShzaWcsIGZ1bmMsIC4uLikgXAorCVNJR19ERVNDX0xJU1RfREVD TChzaWcsIGZ1bmMsIF9fVkFfQVJHU19fKTsgXAorCVNJR19FWFBSX0RFQ0xfKHNpZywgZnVuYyk7 IFwKKwlTSUdfRVhQUl9MSVNUX0RFQ0woc2lnLCBTSUdfRVhQUl9QVFIoc2lnLCBmdW5jKSkKKwor I2RlZmluZSBTSUdfRVhQUl9MSVNUX0RFQ0xfRFVBTChzaWcsIGYwLCBmMSkgXAorCVNJR19FWFBS X0xJU1RfREVDTChzaWcsIFNJR19FWFBSX1BUUihzaWcsIGYwKSwgU0lHX0VYUFJfUFRSKHNpZywg ZjEpKQorCisjZGVmaW5lIFNJR19FWFBSX0xJU1RfUFRSKHNpZykgKCZTSUdfRVhQUl9MSVNUX1NZ TShzaWcpWzBdKQorCisjZGVmaW5lIFBJTl9FWFBSU19TWU0ocGluKSBwaW5fZXhwcnNfICMjIHBp bgorI2RlZmluZSBQSU5fRVhQUlNfUFRSKHBpbikgKCZQSU5fRVhQUlNfU1lNKHBpbilbMF0pCisj ZGVmaW5lIFBJTl9TWU0ocGluKSBwaW5fICMjIHBpbgorCisjZGVmaW5lIE1TX1BJTl9ERUNMXyhw aW4sIC4uLikgXAorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXNwZWVkX3NpZ19leHByICoqUElOX0VY UFJTX1NZTShwaW4pW10gPSBcCisJCXsgX19WQV9BUkdTX18sIE5VTEwgfTsgXAorCXN0YXRpYyBj b25zdCBzdHJ1Y3QgYXNwZWVkX3Bpbl9kZXNjIFBJTl9TWU0ocGluKSA9IFwKKwkJeyAjcGluLCBQ SU5fRVhQUlNfUFRSKHBpbikgfQorCisvKioKKyAqIERlY2xhcmUgYSBtdWx0aS1zaWduYWwgcGlu CisgKgorICogQHBpbjogVGhlIHBpbiBudW1iZXIKKyAqIEBvdGhlcjogTWFjcm8gbmFtZSBmb3Ig Im90aGVyIiBmdW5jdGlvbmFsaXR5IChzdWJqZWN0ZWQgdG8gc3RyaW5naWZpY2F0aW9uKQorICog QGhpZ2g6IE1hY3JvIG5hbWUgZm9yIHRoZSBoaWdoZXN0IHByaW9yaXR5IHNpZ25hbCBmdW5jdGlv bnMKKyAqIEBsb3c6IE1hY3JvIG5hbWUgZm9yIHRoZSBsb3cgc2lnbmFsIGZ1bmN0aW9ucworICoK KyAqIEZvciBleGFtcGxlOgorICoKKyAqICAgICAjZGVmaW5lIEE4IDU2CisgKiAgICAgU0lHX0VY UFJfREVDTChST01EOCwgUk9NMTYsIFNJR19ERVNDX1NFVChTQ1U5MCwgNikpOworICogICAgIFNJ R19FWFBSX0RFQ0woUk9NRDgsIFJPTTE2UywgU0lHX0RFU0NfU0VUKEhXX1NUUkFQMSwgNCksCisg KiAgICAgICAgICAgICAgeyBIV19TVFJBUDEsIEdFTk1BU0soMSwgMCksIDAsIDAgfSk7CisgKiAg ICAgU0lHX0VYUFJfTElTVF9ERUNMKFJPTUQ4LCBTSUdfRVhQUl9QVFIoUk9NRDgsIFJPTTE2KSwK KyAqICAgICAgICAgICAgICBTSUdfRVhQUl9QVFIoUk9NRDgsIFJPTTE2UykpOworICogICAgIFNJ R19FWFBSX0xJU1RfREVDTF9TSU5HTEUoTkNUUzYsIE5DVFM2LCBTSUdfREVTQ19TRVQoU0NVOTAs IDcpKTsKKyAqICAgICBNU19QSU5fREVDTChBOCwgR1BJT0gwLCBST01EOCwgTkNUUzYpOworICov CisjZGVmaW5lIE1TX1BJTl9ERUNMKHBpbiwgb3RoZXIsIGhpZ2gsIGxvdykgXAorCVNJR19FWFBS X0xJU1RfREVDTF9TSU5HTEUob3RoZXIsIG90aGVyKTsgXAorCU1TX1BJTl9ERUNMXyhwaW4sIFwK KwkJCVNJR19FWFBSX0xJU1RfUFRSKGhpZ2gpLCBcCisJCQlTSUdfRVhQUl9MSVNUX1BUUihsb3cp LCBcCisJCQlTSUdfRVhQUl9MSVNUX1BUUihvdGhlcikpCisKKyNkZWZpbmUgUElOX0dST1VQX1NZ TShmdW5jKSBwaW5zXyAjIyBmdW5jCisjZGVmaW5lIEZVTkNfR1JPVVBfU1lNKGZ1bmMpIGdyb3Vw c18gIyMgZnVuYworI2RlZmluZSBGVU5DX0dST1VQX0RFQ0woZnVuYywgLi4uKSBcCisJc3RhdGlj IGNvbnN0IGludCBQSU5fR1JPVVBfU1lNKGZ1bmMpW10gPSB7IF9fVkFfQVJHU19fIH07IFwKKwlz dGF0aWMgY29uc3QgY2hhciAqRlVOQ19HUk9VUF9TWU0oZnVuYylbXSA9IHsgI2Z1bmMgfQorCisv KioKKyAqIERlY2xhcmUgYSBzaW5nbGUgc2lnbmFsIHBpbgorICoKKyAqIEBwaW46IFRoZSBwaW4g bnVtYmVyCisgKiBAb3RoZXI6IE1hY3JvIG5hbWUgZm9yICJvdGhlciIgZnVuY3Rpb25hbGl0eSAo c3ViamVjdGVkIHRvIHN0cmluZ2lmaWNhdGlvbikKKyAqIEBzaWc6IE1hY3JvIG5hbWUgZm9yIHRo ZSBzaWduYWwgKHN1YmplY3RlZCB0byBzdHJpbmdpZmljYXRpb24pCisgKgorICogRm9yIGV4YW1w bGU6CisgKgorICogICAgICNkZWZpbmUgRTMgODAKKyAqICAgICBTSUdfRVhQUl9MSVNUX0RFQ0xf U0lOR0xFKFNDTDUsIEkyQzUsIEkyQzVfREVTQyk7CisgKiAgICAgU1NfUElOX0RFQ0woRTMsIEdQ SU9LMCwgU0NMNSk7CisgKi8KKyNkZWZpbmUgU1NfUElOX0RFQ0wocGluLCBvdGhlciwgc2lnKSBc CisJU0lHX0VYUFJfTElTVF9ERUNMX1NJTkdMRShvdGhlciwgb3RoZXIpOyBcCisJTVNfUElOX0RF Q0xfKHBpbiwgU0lHX0VYUFJfTElTVF9QVFIoc2lnKSwgU0lHX0VYUFJfTElTVF9QVFIob3RoZXIp KQorCisvKioKKyAqIFNpbmdsZSBzaWduYWwsIHNpbmdsZSBmdW5jdGlvbiBwaW4gZGVjbGFyYXRp b24KKyAqCisgKiBAcGluOiBUaGUgcGluIG51bWJlcgorICogQG90aGVyOiBNYWNybyBuYW1lIGZv ciAib3RoZXIiIGZ1bmN0aW9uYWxpdHkgKHN1YmplY3RlZCB0byBzdHJpbmdpZmljYXRpb24pCisg KiBAc2lnOiBNYWNybyBuYW1lIGZvciB0aGUgc2lnbmFsIChzdWJqZWN0ZWQgdG8gc3RyaW5naWZp Y2F0aW9uKQorICogQC4uLjogU2lnbmFsIGRlc2NyaXB0b3JzIHRoYXQgZGVmaW5lIHRoZSBmdW5j dGlvbiBleHByZXNzaW9uCisgKgorICogRm9yIGV4YW1wbGU6CisgKgorICogICAgU1NTRl9QSU5f REVDTChBNCwgR1BJT0EyLCBUSU1FUjMsIFNJR19ERVNDX1NFVChTQ1U4MCwgMikpOworICovCisj ZGVmaW5lIFNTU0ZfUElOX0RFQ0wocGluLCBvdGhlciwgc2lnLCAuLi4pIFwKKwlTSUdfRVhQUl9M SVNUX0RFQ0xfU0lOR0xFKHNpZywgc2lnLCBfX1ZBX0FSR1NfXyk7IFwKKwlTSUdfRVhQUl9MSVNU X0RFQ0xfU0lOR0xFKG90aGVyLCBvdGhlcik7IFwKKwlNU19QSU5fREVDTF8ocGluLCBTSUdfRVhQ Ul9MSVNUX1BUUihzaWcpLCBTSUdfRVhQUl9MSVNUX1BUUihvdGhlcikpOyBcCisJRlVOQ19HUk9V UF9ERUNMKHNpZywgcGluKQorCisjZGVmaW5lIEdQSU9fUElOX0RFQ0wocGluLCBncGlvKSBcCisJ U0lHX0VYUFJfTElTVF9ERUNMX1NJTkdMRShncGlvLCBncGlvKTsgXAorCU1TX1BJTl9ERUNMXyhw aW4sIFNJR19FWFBSX0xJU1RfUFRSKGdwaW8pKQorCitzdHJ1Y3QgYXNwZWVkX3Bpbl9ncm91cCB7 CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCB1bnNpZ25lZCBpbnQgKnBpbnM7CisJY29uc3Qg dW5zaWduZWQgaW50IG5waW5zOworfTsKKworI2RlZmluZSBBU1BFRURfUElOQ1RSTF9HUk9VUChu YW1lXykgeyBcCisJLm5hbWUgPSAjbmFtZV8sIFwKKwkucGlucyA9ICYoUElOX0dST1VQX1NZTShu YW1lXykpWzBdLCBcCisJLm5waW5zID0gQVJSQVlfU0laRShQSU5fR1JPVVBfU1lNKG5hbWVfKSks IFwKK30KKworc3RydWN0IGFzcGVlZF9waW5fZnVuY3Rpb24geworCWNvbnN0IGNoYXIgKm5hbWU7 CisJY29uc3QgY2hhciAqY29uc3QgKmdyb3VwczsKKwl1bnNpZ25lZCBpbnQgbmdyb3VwczsKK307 CisKKyNkZWZpbmUgQVNQRUVEX1BJTkNUUkxfRlVOQyhuYW1lXywgLi4uKSB7IFwKKwkubmFtZSA9 ICNuYW1lXywgXAorCS5ncm91cHMgPSAmRlVOQ19HUk9VUF9TWU0obmFtZV8pWzBdLCBcCisJLm5n cm91cHMgPSBBUlJBWV9TSVpFKEZVTkNfR1JPVVBfU1lNKG5hbWVfKSksIFwKK30KKworc3RydWN0 IGFzcGVlZF9waW5tdXhfZGF0YTsKKworc3RydWN0IGFzcGVlZF9waW5tdXhfb3BzIHsKKwlpbnQg KCpzZXQpKGNvbnN0IHN0cnVjdCBhc3BlZWRfcGlubXV4X2RhdGEgKmN0eCwKKwkJICAgY29uc3Qg c3RydWN0IGFzcGVlZF9zaWdfZXhwciAqZXhwciwgYm9vbCBlbmFibGVkKTsKK307CisKK3N0cnVj dCBhc3BlZWRfcGlubXV4X2RhdGEgeworCXN0cnVjdCByZWdtYXAgKm1hcHNbQVNQRUVEX05SX1BJ Tk1VWF9JUFNdOworCisJY29uc3Qgc3RydWN0IGFzcGVlZF9waW5tdXhfb3BzICpvcHM7CisKKwlj b25zdCBzdHJ1Y3QgYXNwZWVkX3Bpbl9ncm91cCAqZ3JvdXBzOworCWNvbnN0IHVuc2lnbmVkIGlu dCBuZ3JvdXBzOworCisJY29uc3Qgc3RydWN0IGFzcGVlZF9waW5fZnVuY3Rpb24gKmZ1bmN0aW9u czsKKwljb25zdCB1bnNpZ25lZCBpbnQgbmZ1bmN0aW9uczsKK307CisKK2ludCBhc3BlZWRfc2ln X2Rlc2NfZXZhbChjb25zdCBzdHJ1Y3QgYXNwZWVkX3NpZ19kZXNjICpkZXNjLCBib29sIGVuYWJs ZWQsCisJCQkgc3RydWN0IHJlZ21hcCAqbWFwKTsKKworaW50IGFzcGVlZF9zaWdfZXhwcl9ldmFs KGNvbnN0IHN0cnVjdCBhc3BlZWRfcGlubXV4X2RhdGEgKmN0eCwKKwkJCSBjb25zdCBzdHJ1Y3Qg YXNwZWVkX3NpZ19leHByICpleHByLAorCQkJIGJvb2wgZW5hYmxlZCk7CisKK3N0YXRpYyBpbmxp bmUgaW50IGFzcGVlZF9zaWdfZXhwcl9zZXQoY29uc3Qgc3RydWN0IGFzcGVlZF9waW5tdXhfZGF0 YSAqY3R4LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBhc3BlZWRfc2lnX2V4cHIgKmV4cHIsCisJ CQkJICAgICAgYm9vbCBlbmFibGVkKQoreworCXJldHVybiBjdHgtPm9wcy0+c2V0KGN0eCwgZXhw ciwgZW5hYmxlZCk7Cit9CisKKyNlbmRpZiAvKiBBU1BFRURfUElOTVVYX0ggKi8KLS0gCjIuMjAu MQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4 LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFk Lm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFy bS1rZXJuZWwK