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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 04F61C25B75 for ; Mon, 3 Jun 2024 12:12:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:From:References:CC:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=pcU09CRMMfaraKdhgwxvjdSRVZhjPlKUKOtMK1LQUe0=; b=UlU+BXkmjHlAyz qyCfKv7QxKet9NYlLgUH3dfD9WQvFsVOvKwwUTLxbs4IhyzO2dCa4RDrf/dYAldpdtCUQTQdLHnQq QF+z+/MQBqrBQmD2th0++UUZJkehO6yIjUmVa1NdqlHQQ9roo7BZ/EcQunf7s1Bgy52Ns7MHyev3M Mzim1wSUhu8yIDtej+odhFJ6OGFdpoo7D87wGh/ULZKix4Xew3ehTCApN0TVL/mVipBj6HHhhFxQK 7aQaHR2c6i3Iv5NjoI23Ju73VRUWqECs9Ef6qD+3EpucrsYD/h7HfYC81KELAhIYaF0d5j6tjHQag MvB2dCGwcPhreyEkhc+w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sE6YF-0000000GdZC-2J9H; Mon, 03 Jun 2024 12:12:35 +0000 Received: from fllv0015.ext.ti.com ([198.47.19.141]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sE6YB-0000000GdYb-2Wi1 for linux-arm-kernel@lists.infradead.org; Mon, 03 Jun 2024 12:12:34 +0000 Received: from lelv0265.itg.ti.com ([10.180.67.224]) by fllv0015.ext.ti.com (8.15.2/8.15.2) with ESMTP id 453CCFD7012910; Mon, 3 Jun 2024 07:12:15 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1717416735; bh=vL4fUwhsGdC8iMcNqwtCrFhQs8iKL9HeoibEwTqFKL4=; h=Date:Subject:To:CC:References:From:In-Reply-To; b=Vchlq1svEN0/CROV24RrQS1qSKpv9B3xT3ygf43QspzieRlfOFqZExCrhdEVRY/mY QGlF6eR2OO22lGs9oTnWBn9TrKm6Ms3wo6ZWK4Pykp3mMVDM5mygmUZJqAvJn9hwMf wWzyVy96R+tWqQo9SeY0sLVvoETgNBqXFKVCplLw= Received: from DLEE101.ent.ti.com (dlee101.ent.ti.com [157.170.170.31]) by lelv0265.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 453CCFee011193 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 3 Jun 2024 07:12:15 -0500 Received: from DLEE101.ent.ti.com (157.170.170.31) by DLEE101.ent.ti.com (157.170.170.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Mon, 3 Jun 2024 07:12:14 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE101.ent.ti.com (157.170.170.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Mon, 3 Jun 2024 07:12:14 -0500 Received: from [10.24.69.25] (danish-tpc.dhcp.ti.com [10.24.69.25]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 453CC7or087029; Mon, 3 Jun 2024 07:12:08 -0500 Message-ID: <9bcc04a9-645a-4571-a679-ffe67300877a@ti.com> Date: Mon, 3 Jun 2024 17:42:06 +0530 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH net-next v9 2/2] net: ti: icssg_prueth: add TAPRIO offload support Content-Language: en-US To: Vladimir Oltean CC: Jan Kiszka , Dan Carpenter , Andrew Lunn , Simon Horman , Diogo Ivo , Wolfram Sang , Randy Dunlap , Niklas Schnelle , Vignesh Raghavendra , Richard Cochran , Roger Quadros , Paolo Abeni , Jakub Kicinski , Eric Dumazet , "David S. Miller" , , , , , Jacob Keller , Roger Quadros References: <20240531044512.981587-1-danishanwar@ti.com> <20240531044512.981587-1-danishanwar@ti.com> <20240531044512.981587-3-danishanwar@ti.com> <20240531044512.981587-3-danishanwar@ti.com> <20240531135157.aaxgslyur5br6zkb@skbuf> From: MD Danish Anwar In-Reply-To: <20240531135157.aaxgslyur5br6zkb@skbuf> X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240603_051231_766647_9390838A X-CRM114-Status: GOOD ( 48.28 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgVmxhZGltaXIsCgpPbiAzMS8wNS8yNCA3OjIxIHBtLCBWbGFkaW1pciBPbHRlYW4gd3JvdGU6 Cj4gT24gRnJpLCBNYXkgMzEsIDIwMjQgYXQgMTA6MTU6MTJBTSArMDUzMCwgTUQgRGFuaXNoIEFu d2FyIHdyb3RlOgo+PiBGcm9tOiBSb2dlciBRdWFkcm9zIDxyb2dlcnFAdGkuY29tPgo+Pgo+PiBU aGUgSUNTU0cgZHVhbC1lbWFjIC8gc3dpdGNoIGZpcm13YXJlIHN1cHBvcnRzIEVuaGFuY2VkIFNj aGVkdWxlZCBUcmFmZmljCj4+IChFU1Qg4oCTIGRlZmluZWQgaW4gUDgwMi4xUWJ2L0QyLjIgdGhh dCBsYXRlciBnb3QgaW5jbHVkZWQgaW4gSUVFRQo+PiA4MDIuMVEtMjAxOCkgY29uZmlndXJhdGlv bi4gRVNUIGFsbG93cyBleHByZXNzIHF1ZXVlIHRyYWZmaWMgdG8gYmUKPj4gc2NoZWR1bGVkIChw bGFjZWQpIG9uIHRoZSB3aXJlIGF0IHNwZWNpZmljIHJlcGVhdGFibGUgdGltZSBpbnRlcnZhbHMu IEluCj4+IExpbnV4IGtlcm5lbCwgRVNUIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSB0aHJvdWdoIHRj IGNvbW1hbmQgYW5kIHRoZSB0YXByaW8KPj4gc2NoZWR1bGVyIGluIHRoZSBuZXQgY29yZSBpbXBs ZW1lbnRzIGEgc29mdHdhcmUgb25seSBzY2hlZHVsZXIKPj4gKFNDSF9UQVBSSU8pLiBJZiB0aGUg TklDIGlzIGNhcGFibGUgb2YgRVNUIGNvbmZpZ3VyYXRpb24sdXNlciBpbmRpY2F0ZQo+PiAiZmxh ZyAyIiBpbiB0aGUgY29tbWFuZCB3aGljaCBpcyB0aGVuIHBhcnNlZCBieSB0YXByaW8gc2NoZWR1 bGVyIGluIG5ldAo+PiBjb3JlIGFuZCBpbmRpY2F0ZSB0aGF0IHRoZSBjb21tYW5kIGlzIHRvIGJl IG9mZmxvYWRlZCB0byBoL3cuIHRhcHJpbyB0aGVuCj4+IG9mZmxvYWRzIHRoZSBjb21tYW5kIHRv IHRoZSBkcml2ZXIgYnkgY2FsbGluZyBuZG9fc2V0dXBfdGMoKSBuZG8gb3BzLiBUaGlzCj4+IHBh dGNoIGltcGxlbWVudHMgbmRvX3NldHVwX3RjKCkgdG8gb2ZmbG9hZCBFU1QgY29uZmlndXJhdGlv biB0byBJQ1NTRy4KPiAKPiBUaGlzIGlzIGFsbCBhIGxvdCBvZiB2ZXJiaWFnZSBhYm91dCBnZW5l cmljIHRjLXRhcHJpbyBhbmQgbm90aGluZwo+IGNvbmNyZXRlIGFib3V0IHRoZSBJQ1NTRyBpbXBs ZW1lbnRhdGlvbi4uLiBJdCBpcyB1c2VsZXNzLCBzb3JyeS4KPiAKCkkgd2lsbCB0cnkgdG8gYWRk IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgSUNTU0cgYW5kIHJlbW92ZSBnZW5lcmljCnRjLXRhcHJp byBkZXRhaWxzLgoKPj4KPj4gU2lnbmVkLW9mZi1ieTogUm9nZXIgUXVhZHJvcyA8cm9nZXJxQHRp LmNvbT4KPj4gU2lnbmVkLW9mZi1ieTogVmlnbmVzaCBSYWdoYXZlbmRyYSA8dmlnbmVzaHJAdGku Y29tPgo+PiBSZXZpZXdlZC1ieTogU2ltb24gSG9ybWFuIDxob3Jtc0BrZXJuZWwub3JnPgo+PiBT aWduZWQtb2ZmLWJ5OiBNRCBEYW5pc2ggQW53YXIgPGRhbmlzaGFud2FyQHRpLmNvbT4KPj4gLS0t Cj4+ICBkcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnICAgICAgICAgICAgICB8ICAgMSAr Cj4+ICBkcml2ZXJzL25ldC9ldGhlcm5ldC90aS9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgMSAr Cj4+ICBkcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYyB8ICAgMyAr Cj4+ICBkcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaCB8ICAgMiAr Cj4+ICBkcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuYyAgICB8IDI4OCAr KysrKysrKysrKysrKysrKysrCj4+ICBkcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3Nz Z19xb3MuaCAgICB8IDExMyArKysrKysrKwo+PiAgNiBmaWxlcyBjaGFuZ2VkLCA0MDggaW5zZXJ0 aW9ucygrKQo+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2lj c3NnL2ljc3NnX3Fvcy5jCj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJu ZXQvdGkvaWNzc2cvaWNzc2dfcW9zLmgKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0 aGVybmV0L3RpL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnCj4+IGlu ZGV4IGYxNjBhM2I3MTQ5OS4uNmRlYWM5MDM1NjEwIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL25l dC9ldGhlcm5ldC90aS9LY29uZmlnCj4+ICsrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tj b25maWcKPj4gQEAgLTE5MCw2ICsxOTAsNyBAQCBjb25maWcgVElfSUNTU0dfUFJVRVRICj4+ICAJ ZGVwZW5kcyBvbiBQUlVfUkVNT1RFUFJPQwo+PiAgCWRlcGVuZHMgb24gQVJDSF9LMyAmJiBPRiAm JiBUSV9LM19VRE1BX0dMVUVfTEFZRVIKPj4gIAlkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09Q VElPTkFMCj4+ICsJZGVwZW5kcyBvbiBORVRfU0NIX1RBUFJJTwo+IAo+IEkgdGhpbmsgdGhlIHBh dHRlcm4gc2hvdWxkIGJlICJkZXBlbmRzIG9uIE5FVF9TQ0hfVEFQUklPIHx8IE5FVF9TQ0hfVEFQ UklPPW4iLgo+IFdoYXQgeW91IHdhbnQgaXMgdG8gYmUgYnVpbHQgYXMgYSBtb2R1bGUgd2hlbiB0 YXByaW8gaXMgYSBtb2R1bGUsCj4gYmVjYXVzZSB5b3UgdXNlIHN5bWJvbHMgZXhwb3J0ZWQgYnkg aXQgKHRhcHJpb19vZmZsb2FkX2dldCgpLCB0YXByaW9fb2ZmbG9hZF9mcmVlKCkpLgo+IAoKU3Vy ZS4KCj4+ICAJaGVscAo+PiAgCSAgU3VwcG9ydCBkdWFsIEdpZ2FiaXQgRXRoZXJuZXQgcG9ydHMg b3ZlciB0aGUgSUNTU0cgUFJVIFN1YnN5c3RlbS4KPj4gIAkgIFRoaXMgc3Vic3lzdGVtIGlzIGF2 YWlsYWJsZSBzdGFydGluZyB3aXRoIHRoZSBBTTY1IHBsYXRmb3JtLgo+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90 aS9NYWtlZmlsZQo+PiBpbmRleCA1OWNkMjBhMzgyNjcuLjBhODYzMTFiZDE3MCAxMDA2NDQKPj4g LS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGUKPj4gKysrIGIvZHJpdmVycy9u ZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGUKPj4gQEAgLTM1LDYgKzM1LDcgQEAgb2JqLSQoQ09ORklH X1RJX0lDU1NHX1BSVUVUSCkgKz0gaWNzc2ctcHJ1ZXRoLm8KPj4gIGljc3NnLXBydWV0aC15IDo9 IGljc3NnL2ljc3NnX3BydWV0aC5vIFwKPj4gIAkJICBpY3NzZy9pY3NzZ19jb21tb24ubyBcCj4+ ICAJCSAgaWNzc2cvaWNzc2dfY2xhc3NpZmllci5vIFwKPj4gKwkJICBpY3NzZy9pY3NzZ19xb3Mu byBcCj4+ICAJCSAgaWNzc2cvaWNzc2dfcXVldWVzLm8gXAo+PiAgCQkgIGljc3NnL2ljc3NnX2Nv bmZpZy5vIFwKPj4gIAkJICBpY3NzZy9pY3NzZ19taWlfY2ZnLm8gXAo+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmMgYi9kcml2ZXJzL25l dC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYwo+PiBpbmRleCBkMTU5YmRmN2RkOWQu Ljg5ODJlY2I4YTQzZCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNz c2cvaWNzc2dfcHJ1ZXRoLmMKPj4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cv aWNzc2dfcHJ1ZXRoLmMKPj4gQEAgLTcwNiw2ICs3MDYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 IG5ldF9kZXZpY2Vfb3BzIGVtYWNfbmV0ZGV2X29wcyA9IHsKPj4gIAkubmRvX2V0aF9pb2N0bCA9 IGVtYWNfbmRvX2lvY3RsLAo+PiAgCS5uZG9fZ2V0X3N0YXRzNjQgPSBlbWFjX25kb19nZXRfc3Rh dHM2NCwKPj4gIAkubmRvX2dldF9waHlzX3BvcnRfbmFtZSA9IGVtYWNfbmRvX2dldF9waHlzX3Bv cnRfbmFtZSwKPj4gKwkubmRvX3NldHVwX3RjID0gaWNzc2dfcW9zX25kb19zZXR1cF90YywKPj4g IH07Cj4+ICAKPj4gIHN0YXRpYyBpbnQgcHJ1ZXRoX25ldGRldl9pbml0KHN0cnVjdCBwcnVldGgg KnBydWV0aCwKPj4gQEAgLTg0MCw2ICs4NDEsOCBAQCBzdGF0aWMgaW50IHBydWV0aF9uZXRkZXZf aW5pdChzdHJ1Y3QgcHJ1ZXRoICpwcnVldGgsCj4+ICAJZW1hYy0+cnhfaHJ0aW1lci5mdW5jdGlv biA9ICZlbWFjX3J4X3RpbWVyX2NhbGxiYWNrOwo+PiAgCXBydWV0aC0+ZW1hY1ttYWNdID0gZW1h YzsKPj4gIAo+PiArCWljc3NnX3Fvc190YXNfaW5pdChuZGV2KTsKPj4gKwo+PiAgCXJldHVybiAw Owo+PiAgCj4+ICBmcmVlOgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkv aWNzc2cvaWNzc2dfcHJ1ZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3Nz Z19wcnVldGguaAo+PiBpbmRleCBmYWIyNDI4ZGU3OGIuLmM2ODUxNTQ2ZTZjNSAxMDA2NDQKPj4g LS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmgKPj4gKysr IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmgKPj4gQEAgLTM3 LDYgKzM3LDcgQEAKPj4gICNpbmNsdWRlICJpY3NzZ19jb25maWcuaCIKPj4gICNpbmNsdWRlICJp Y3NzX2llcC5oIgo+PiAgI2luY2x1ZGUgImljc3NnX3N3aXRjaF9tYXAuaCIKPj4gKyNpbmNsdWRl ICJpY3NzZ19xb3MuaCIKPj4gIAo+PiAgI2RlZmluZSBQUlVFVEhfTUFYX01UVSAgICAgICAgICAo MjAwMCAtIEVUSF9ITEVOIC0gRVRIX0ZDU19MRU4pCj4+ICAjZGVmaW5lIFBSVUVUSF9NSU5fUEtU X1NJWkUgICAgIChWTEFOX0VUSF9aTEVOKQo+PiBAQCAtMTk1LDYgKzE5Niw3IEBAIHN0cnVjdCBw cnVldGhfZW1hYyB7Cj4+ICAJLyogUlggSVJRIENvYWxlc2NpbmcgUmVsYXRlZCAqLwo+PiAgCXN0 cnVjdCBocnRpbWVyIHJ4X2hydGltZXI7Cj4+ICAJdW5zaWduZWQgbG9uZyByeF9wYWNlX3RpbWVv dXRfbnM7Cj4+ICsJc3RydWN0IHBydWV0aF9xb3MgcW9zOwo+PiAgfTsKPj4gIAo+PiAgLyoqCj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuYyBi L2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5jCj4+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uNWU5M2IxYjljYTQzCj4+IC0tLSAvZGV2 L251bGwKPj4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcW9zLmMK Pj4gQEAgLTAsMCArMSwyODggQEAKPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wCj4+ICsvKiBUZXhhcyBJbnN0cnVtZW50cyBJQ1NTRyBQUlVFVEggUW9TIHN1Ym1vZHVsZQo+ PiArICogQ29weXJpZ2h0IChDKSAyMDIzIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAt IGh0dHA6Ly93d3cudGkuY29tLwo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9wcmlu dGsuaD4KPj4gKyNpbmNsdWRlICJpY3NzZ19wcnVldGguaCIKPj4gKyNpbmNsdWRlICJpY3NzZ19z d2l0Y2hfbWFwLmgiCj4+ICsKPj4gK3N0YXRpYyB2b2lkIHRhc191cGRhdGVfZndfbGlzdF9wb2lu dGVycyhzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMpCj4+ICt7Cj4+ICsJc3RydWN0IHRhc19jb25m aWcgKnRhcyA9ICZlbWFjLT5xb3MudGFzLmNvbmZpZzsKPj4gKwo+PiArCWlmICgocmVhZGIodGFz LT5hY3RpdmVfbGlzdCkpID09IFRBU19MSVNUMCkgewo+IAo+IFdobyBhbmQgd2hlbiB1cGRhdGVz IHRhcy0+YWN0aXZlX2xpc3QgZnJvbSBUQVNfTElTVDAgdG8gVEFTX0xJU1QxPwo+CgotPmVtYWNf dGFwcmlvX3JlcGxhY2UoKQoJLT4gdGFzX3VwZGF0ZV9vcGVyX2xpc3QoKQoJCS0+IHRhc19zZXRf dHJpZ2dlcl9saXN0X2NoYW5nZSgpCgpUaGlzIEFQSSBzZW5kIGEgcjMwIGNvbW1hbmQgdG8gZmly bXdhcmUgdG8gdHJpZ2dlciB0aGUgbGlzdCBjaGFuZ2UKYGVtYWNfc2V0X3BvcnRfc3RhdGUoZW1h YywgSUNTU0dfRU1BQ19QT1JUX1RBU19UUklHR0VSKTtgCgpUaGlzIG9uY2UgZmlybXdhcmUgcmVj aXZlcyB0aGlzIGNvbW1hbmQsIGl0IHN3YXBzIHRoZSBhY3RpdmUgYW5kIHNoYWRvdwpsaXN0LgoK ZW1hY190YXByaW9fcmVwbGFjZSgpIGNhbGxzIHRhc191cGRhdGVfb3Blcl9saXN0KCkKCkluIHRh c191cGRhdGVfb3Blcl9saXN0KCkgaW4gdGhlIGJlZ2lubmluZyBhY3RpdmVfbGlzdCBpcyAwIGku ZS4KVEFTX0xJU1QwLCB0YXNfdXBkYXRlX2Z3X2xpc3RfcG9pbnRlcnMoKSBpcyBjYWxsZWQgd2hp Y2ggY29uZmlndXJlcyB0aGUKYWN0aXZlIGFuZCBzaGFkb3cgbGlzdCBwb2ludGVycy4gVEFTX0xJ U1QwIGJlY29tZXMgdGhlIGFjdGl2ZV9saXN0IGFuZApUQVNfTElTVDEgYmVjb21lcyB0aGUgc2hh ZG93IGxpc3QuCgpMZXQncyBzYXkgYmVmb3JlIHRoaXMgQVBJIHdhcyBjYWxsZWQsIGFjdGl2ZV9s aXN0IGlzIFRBU19MSVNUMCAoMCkgYW5kCnNoYWRvd19saXN0IGlzIFRBU19MSVNUMS4KCkFmdGVy IGdldHRpbmcgdGhlIHNoYWRvd19saXN0IHdlIGZpbGwgdGhyZWUgZGlmZmVyZW50IGFycmF5cywK MS4gZ2F0ZV9tYXNrX2xpc3RbXQoyLiB3aW5fZW5kX3RpbWVfbGlzdFtdCjMuIGdhdGVfY2xvc2Vf dGltZV9saXN0W11bXSAtIDJEIGFycmF5IHdpdGggc2l6ZSA9IG51bV9lbnRyaWVzICogbnVtX3F1 ZXVlcwoKRHJpdmVyIG9ubHkgdXBkYXRlcyB0aGUgc2hhZG93X2xpc3QuIE9uY2Ugc2hhZG93IGxp c3QgaXMgZmlsbGVkLCB3ZSBjYWxsCnRhc19zZXRfdHJpZ2dlcl9saXN0X2NoYW5nZSgpIGFuZCBh c2sgZmlybXdhcmUgdG8gY2hhbmdlIHRoZSBhY3RpdmUKbGlzdC4gTm93IHRoZSBzaGFkb3dfbGlz dCB0aGF0IHdlIGhhZCBmaWxsZWQgKFRBU19MSVNUMSkgd2lsbCBiZWNvbWUKYWN0aXZlIGxpc3Qg YW5kIHZpY2UgdmVyc2EuIFdlIHdpbGwgYWdhaW4gdXBkYXRlIG91ciBwb2ludGVycwoKVGhpcyBp cyBob3cgbGlzdCBpcyBjaGFuZ2VkIGJ5IGNhbGxpbmcgdGFzX3VwZGF0ZV9md19saXN0X3BvaW50 ZXJzLgoKPj4gKwkJdGFzLT5md19hY3RpdmVfbGlzdCA9IGVtYWMtPmRyYW0udmEgKyBUQVNfR0FU RV9NQVNLX0xJU1QwOwo+PiArCQl0YXMtPmZ3X3NoYWRvd19saXN0ID0gZW1hYy0+ZHJhbS52YSAr IFRBU19HQVRFX01BU0tfTElTVDE7Cj4+ICsJfSBlbHNlIHsKPj4gKwkJdGFzLT5md19hY3RpdmVf bGlzdCA9IGVtYWMtPmRyYW0udmEgKyBUQVNfR0FURV9NQVNLX0xJU1QxOwo+PiArCQl0YXMtPmZ3 X3NoYWRvd19saXN0ID0gZW1hYy0+ZHJhbS52YSArIFRBU19HQVRFX01BU0tfTElTVDA7Cj4+ICsJ fQo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCB0YXNfdXBkYXRlX21heHNkdV90YWJsZShzdHJ1 Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMpCj4+ICt7Cj4+ICsJc3RydWN0IHRhc19jb25maWcgKnRhcyA9 ICZlbWFjLT5xb3MudGFzLmNvbmZpZzsKPj4gKwl1MTYgX19pb21lbSAqbWF4X3NkdV90YmxfcHRy Owo+PiArCXU4IGdhdGVfaWR4Owo+PiArCj4+ICsJLyogdXBkYXRlIHRoZSBtYXhzZHUgdGFibGUg Ki8KPj4gKwltYXhfc2R1X3RibF9wdHIgPSBlbWFjLT5kcmFtLnZhICsgVEFTX1FVRVVFX01BWF9T RFVfTElTVDsKPj4gKwo+PiArCWZvciAoZ2F0ZV9pZHggPSAwOyBnYXRlX2lkeCA8IFRBU19NQVhf TlVNX1FVRVVFUzsgZ2F0ZV9pZHgrKykKPj4gKwkJd3JpdGV3KHRhcy0+bWF4X3NkdV90YWJsZS5t YXhfc2R1W2dhdGVfaWR4XSwgJm1heF9zZHVfdGJsX3B0cltnYXRlX2lkeF0pOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgdm9pZCB0YXNfcmVzZXQoc3RydWN0IHBydWV0aF9lbWFjICplbWFjKQo+PiAr ewo+PiArCXN0cnVjdCB0YXNfY29uZmlnICp0YXMgPSAmZW1hYy0+cW9zLnRhcy5jb25maWc7Cj4+ ICsJaW50IGk7Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgVEFTX01BWF9OVU1fUVVFVUVTOyBp KyspCj4+ICsJCXRhcy0+bWF4X3NkdV90YWJsZS5tYXhfc2R1W2ldID0gMjA0ODsKPiAKPiBNYWNy byArIHNob3J0IGNvbW1lbnQgZm9yIHRoZSBtYWdpYyBudW1iZXIsIHBsZWFzZS4KPiAKClN1cmUg SSB3aWxsIGFkZCBpdC4gRWFjaCBlbGVtZW50cyBpbiB0aGlzIGFycmF5IGlzIGEgMiBieXRlIHZh bHVlCnNob3dpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGZyYW1lIHRvIGJlIGFsbG93ZWQgdGhy b3VnaCBlYWNoIGdhdGUuCgo+PiArCj4+ICsJdGFzX3VwZGF0ZV9tYXhzZHVfdGFibGUoZW1hYyk7 Cj4+ICsKPj4gKwl3cml0ZWIoVEFTX0xJU1QwLCB0YXMtPmFjdGl2ZV9saXN0KTsKPj4gKwo+PiAr CW1lbXNldF9pbyh0YXMtPmZ3X2FjdGl2ZV9saXN0LCAwLCBzaXplb2YoKnRhcy0+ZndfYWN0aXZl X2xpc3QpKTsKPj4gKwltZW1zZXRfaW8odGFzLT5md19zaGFkb3dfbGlzdCwgMCwgc2l6ZW9mKCp0 YXMtPmZ3X3NoYWRvd19saXN0KSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdGFzX3NldF9z dGF0ZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGVudW0gdGFzX3N0YXRlIHN0YXRlKQo+PiAr ewo+PiArCXN0cnVjdCB0YXNfY29uZmlnICp0YXMgPSAmZW1hYy0+cW9zLnRhcy5jb25maWc7Cj4+ ICsJaW50IHJldDsKPj4gKwo+PiArCWlmICh0YXMtPnN0YXRlID09IHN0YXRlKQo+PiArCQlyZXR1 cm4gMDsKPj4gKwo+PiArCXN3aXRjaCAoc3RhdGUpIHsKPj4gKwljYXNlIFRBU19TVEFURV9SRVNF VDoKPj4gKwkJdGFzX3Jlc2V0KGVtYWMpOwo+PiArCQlyZXQgPSBlbWFjX3NldF9wb3J0X3N0YXRl KGVtYWMsIElDU1NHX0VNQUNfUE9SVF9UQVNfUkVTRVQpOwo+PiArCQl0YXMtPnN0YXRlID0gVEFT X1NUQVRFX1JFU0VUOwo+PiArCQlicmVhazsKPj4gKwljYXNlIFRBU19TVEFURV9FTkFCTEU6Cj4+ ICsJCXJldCA9IGVtYWNfc2V0X3BvcnRfc3RhdGUoZW1hYywgSUNTU0dfRU1BQ19QT1JUX1RBU19F TkFCTEUpOwo+PiArCQl0YXMtPnN0YXRlID0gVEFTX1NUQVRFX0VOQUJMRTsKPj4gKwkJYnJlYWs7 Cj4+ICsJY2FzZSBUQVNfU1RBVEVfRElTQUJMRToKPj4gKwkJcmV0ID0gZW1hY19zZXRfcG9ydF9z dGF0ZShlbWFjLCBJQ1NTR19FTUFDX1BPUlRfVEFTX0RJU0FCTEUpOwo+PiArCQl0YXMtPnN0YXRl ID0gVEFTX1NUQVRFX0RJU0FCTEU7Cj4gCj4gVGhpcyBjYW4gYmUgZXhwcmVzc2VkIGFzIGp1c3Qg InRhcy0+c3RhdGUgPSBzdGF0ZSIgb3V0c2lkZSB0aGUgc3dpdGNoIHN0YXRlbWVudC4KPiBCdXQg cHJvYmFibHkgc2hvdWxkbid0IGJlLCBpZiAicmV0ICE9IDAiLgoKWWVzIHdlIHNob3VsZG4ndCBk byB0aGF0IGFzIHdlIGFyZSBzZW5kaW5nIHRoZSByMzAgY29tbWFuZCB0byBmaXJtd2FyZQppbiBl YWNoIGNhc2UuCgo+IAo+PiArCQlicmVhazsKPj4gKwlkZWZhdWx0Ogo+PiArCQluZXRkZXZfZXJy KGVtYWMtPm5kZXYsICIlczogdW5zdXBwb3J0ZWQgc3RhdGVcbiIsIF9fZnVuY19fKTsKPiAKPiBU aGVyZSBhcmUgdHdvIGxldmVscyBvZiBsb2dnaW5nIGZvciB0aGlzIGVycm9yLCBhbmQgdGhpcyBw YXJ0aWN1bGFyIG9uZQo+IGlzbid0IHVzZWZ1bC4gV2UgY2FuIGluZmVyIGl0IHdlbnQgdGhyb3Vn aCB0aGUgImRlZmF1bHQiIGNhc2Ugd2hlbiB0aGUKPiBwcmludGsgYmVsb3cgcmV0dXJuZWQgLUVJ TlZBTCwgYmVjYXVzZSBpZiB0aGF0IC1FSU5WQUwgY2FtZSBmcm9tCj4gZW1hY19zZXRfcG9ydF9z dGF0ZSgpLCB0aGF0IHdvdWxkIGhhdmUgcHJpbnRlZCwgaW4gdHVybiwgImludmFsaWQgcG9ydCBj b21tYW5kIi4KPiAKCkJ1dCwgdGhlIGVudW0gdGFzX3N0YXRlIGFuZCBlbnVtIGljc3NnX3BvcnRf c3RhdGVfY21kIGFyZSBub3QgMS0xIG1hcHBlZC4KCmVtYWNfc2V0X3BvcnRfc3RhdGUoKSB3aWxs IG9ubHkgcmV0dXJuIC1FSU5WQUwgd2hlbiBgY21kID49CklDU1NHX0VNQUNfUE9SVF9NQVhfQ09N TUFORFNgIHdoaWNoIGlzIDE5LiBCdXQgYSB0YXNfc3RhdGUgdmFsdWUgb2YgMyBpcwphbHNvIGlu dmFsaWQgYXMgd2Ugb25seSBzdXBwb3J0IHZhbHVlIG9mIDAsMSBhbmQgMiBzbyBJIHRoaW5rIHRo aXMgcHJpbnQKc2hvdWRsIGJlIG9rYXkKCmVudW0gdGFzX3N0YXRlIHsKCVRBU19TVEFURV9ESVNB QkxFID0gMCwKCVRBU19TVEFURV9FTkFCTEUgPSAxLAoJVEFTX1NUQVRFX1JFU0VUID0gMiwKfTsK Cgo+IEkgZG9uJ3QgdGhpbmsgdGhhdCBhICJkZWZhdWx0IiBjYXNlIGlzIG5lZWRlZCBoZXJlLCBh cyBsb25nIGFzIGFsbCBlbnVtCj4gdmFsdWVzIGFyZSBoYW5kbGVkLCBhbmQgdGhlIGlucHV0IGlz IHNhbml0aXplZCBldmVyeXdoZXJlICh3aGljaCBpdCBpcykuCj4gCgpJIHRoaW5rIHRoZSBkZWZh dWx0IGNhc2Ugc2hvdWxkIHJlbWFpbi4gV2l0aG91dCBkZWZhdWx0IGNhc2UgdGhlCmZ1bmN0aW9u IHdpbGwgcmV0dXJuIDAgZXZlbiBmb3IgaW52YWxpZCBzYXRlcy4gQnkgZGVmYXVsdCByZXQgPSAw LCBpbgp0aGUgdGFzX3N0YXRlIHBhc3NlZCB0byBBUEkgaXMgbm90IHZhbGlkLCBub25lIG9mIHRo ZSBjYXNlIHdpbGwgYmUKY2FsbGVkLCByZXQgd2lsbCByZW1haW5nIHplcm8uIE5vIGVycm9yIHdp bGwgYmUgcHJpbnRlZCBhbmQgdGhlIGZ1bmN0aW9uCndpbGwgcmV0dXJuIDAuIEtlZXBpbmcgZGVm YXVsdCBjYXNlIG1ha2VzIHN1cmUgdGhhdCB0aGUgd3Jvbmcgc3RhdGUgd2FzCnJlcXVlc3RlZC4K Cj4+ICsJCXJldCA9IC1FSU5WQUw7Cj4+ICsJCWJyZWFrOwo+PiArCX0KPj4gKwo+PiArCWlmIChy ZXQpCj4+ICsJCW5ldGRldl9lcnIoZW1hYy0+bmRldiwgIlRBUyBzZXQgc3RhdGUgZmFpbGVkICVk XG4iLCByZXQpOwo+IAo+IEZXSVcsIGVtYWNfc2V0X3BvcnRfc3RhdGUoKSBoYXMgaXRzIG93biBs b2dnaW5nLiBJIGRvbid0IG5lY2Vzc2FyaWx5IHNlZQo+IHRoZSBuZWVkIGZvciB0aGlzIHByaW50 Lgo+IAoKVGhpcyBwcmludCB3ZSBjYW4gcmVtb3ZlLiBJIGRvbid0IHNlZSBhbnkgbmVlZCB0byBr ZWVwIHRoaXMgcHJpbnQgYXMKZW1hY19zZXRfcG9ydF9zdGF0ZSgpIHdpbGwgYW55d2F5cyBwcmlu dCBhIG5kZXRkZXZfZXJyKCkgaWYgdGhlIGNtZCBmYWlscy4KCj4+ICsJcmV0dXJuIHJldDsKPj4g K30KPj4gKwo+PiArc3RhdGljIGludCB0YXNfc2V0X3RyaWdnZXJfbGlzdF9jaGFuZ2Uoc3RydWN0 IHBydWV0aF9lbWFjICplbWFjKQo+PiArewo+PiArCXN0cnVjdCB0Y190YXByaW9fcW9wdF9vZmZs b2FkICphZG1pbl9saXN0ID0gZW1hYy0+cW9zLnRhcy50YXByaW9fYWRtaW47Cj4+ICsJc3RydWN0 IHRhc19jb25maWcgKnRhcyA9ICZlbWFjLT5xb3MudGFzLmNvbmZpZzsKPj4gKwlzdHJ1Y3QgcHRw X3N5c3RlbV90aW1lc3RhbXAgc3RzOwo+PiArCXUzMiBjaGFuZ2VfY3ljbGVfY291bnQ7Cj4+ICsJ dTMyIGN5Y2xlX3RpbWU7Cj4+ICsJdTY0IGJhc2VfdGltZTsKPj4gKwl1NjQgY3VyX3RpbWU7Cj4+ ICsKPj4gKwkvKiBJRVAgY2xvY2sgaGFzIGEgaGFyZHdhcmUgZXJyYXRhIGR1ZSB0byB3aGljaCBp dCB3cmFwcyBhcm91bmQgZXhhY3RseQo+PiArCSAqIG9uY2UgZXZlcnkgdGFwcmlvIGN5Y2xlLiBU byBjb21wZW5zYXRlIGZvciB0aGF0LCBhZGp1c3QgY3ljbGUgdGltZQo+PiArCSAqIGJ5IHRoZSB3 cmFwIGFyb3VuZCB0aW1lIHdoaWNoIGlzIHN0b3JlZCBpbiBlbWFjLT5pZXAtPmRlZl9pbmMKPj4g KwkgKi8KPj4gKwljeWNsZV90aW1lID0gYWRtaW5fbGlzdC0+Y3ljbGVfdGltZSAtIGVtYWMtPmll cC0+ZGVmX2luYzsKPj4gKwliYXNlX3RpbWUgPSBhZG1pbl9saXN0LT5iYXNlX3RpbWU7Cj4+ICsJ Y3VyX3RpbWUgPSBwcnVldGhfaWVwX2dldHRpbWUoZW1hYywgJnN0cyk7Cj4+ICsKPj4gKwlpZiAo YmFzZV90aW1lID4gY3VyX3RpbWUpCj4+ICsJCWNoYW5nZV9jeWNsZV9jb3VudCA9IERJVl9ST1VO RF9VUF9VTEwoYmFzZV90aW1lIC0gY3VyX3RpbWUsIGN5Y2xlX3RpbWUpOwo+PiArCWVsc2UKPj4g KwkJY2hhbmdlX2N5Y2xlX2NvdW50ID0gMTsKPj4gKwo+PiArCXdyaXRlbChjeWNsZV90aW1lLCBl bWFjLT5kcmFtLnZhICsgVEFTX0FETUlOX0NZQ0xFX1RJTUUpOwo+PiArCXdyaXRlbChjaGFuZ2Vf Y3ljbGVfY291bnQsIGVtYWMtPmRyYW0udmEgKyBUQVNfQ09ORklHX0NIQU5HRV9DWUNMRV9DT1VO VCk7Cj4+ICsJd3JpdGViKGFkbWluX2xpc3QtPm51bV9lbnRyaWVzLCBlbWFjLT5kcmFtLnZhICsg VEFTX0FETUlOX0xJU1RfTEVOR1RIKTsKPj4gKwo+PiArCS8qIGNvbmZpZ19jaGFuZ2UgY2xlYXJl ZCBieSBmL3cgdG8gYWNrIHJlY2VwdGlvbiBvZiBuZXcgc2hhZG93IGxpc3QgKi8KPj4gKwl3cml0 ZWIoMSwgJnRhcy0+Y29uZmlnX2xpc3QtPmNvbmZpZ19jaGFuZ2UpOwo+PiArCS8qIGNvbmZpZ19w ZW5kaW5nIGNsZWFyZWQgYnkgZi93IHdoZW4gbmV3IHNoYWRvdyBsaXN0IGlzIGNvcGllZCB0byBh Y3RpdmUgbGlzdCAqLwo+PiArCXdyaXRlYigxLCAmdGFzLT5jb25maWdfbGlzdC0+Y29uZmlnX3Bl bmRpbmcpOwo+PiArCj4+ICsJcmV0dXJuIGVtYWNfc2V0X3BvcnRfc3RhdGUoZW1hYywgSUNTU0df RU1BQ19QT1JUX1RBU19UUklHR0VSKTsKPiAKPiBUaGUgY2FsbCBwYXRoIGhlcmUgaXM6Cj4gCj4g ZW1hY190YXByaW9fcmVwbGFjZSgpCj4gLT4gdGFzX3VwZGF0ZV9vcGVyX2xpc3QoKQo+ICAgIC0+ IHRhc19zZXRfdHJpZ2dlcl9saXN0X2NoYW5nZSgpCj4gICAgICAgLT4gZW1hY19zZXRfcG9ydF9z dGF0ZShlbWFjLCBJQ1NTR19FTUFDX1BPUlRfVEFTX1RSSUdHRVIpOwo+IC0+IHRhc19zZXRfc3Rh dGUoZW1hYywgVEFTX1NUQVRFX0VOQUJMRSk7Cj4gICAgLT4gZW1hY19zZXRfcG9ydF9zdGF0ZShl bWFjLCBJQ1NTR19FTUFDX1BPUlRfVEFTX0VOQUJMRSk7Cj4gCj4gSSdtIHN1cnByaXNlZCBieSB0 aGUgY2FsbHMgdG8gZW1hY19zZXRfcG9ydF9zdGF0ZSgpIGluIHN1Y2ggYSBxdWljawo+IHN1Y2Nl c3Npb24/IElzIHRoZXJlIGFueSBmaXJtd2FyZSByZXF1aXJlbWVudCBmb3IgaG93IG11Y2ggc2hv dWxkIHRoZQo+IHBvcnQgc3RheSBpbiB0aGUgVEFTX1RSSUdHRVIgc3RhdGU/IE9yIGlzIGl0IG5v dCByZWFsbHkgYSBzdGF0ZSwgZGVzcGl0ZQo+IGl0IGJlaW5nIGFuIGFyZ3VtZW50IHRvIGEgZnVu Y3Rpb24gbmFtZWQgZW1hY19zZXRfcG9ydF9zdGF0ZSgpPwo+IAoKSUNTU0dfRU1BQ19QT1JUX1RB U19UUklHR0VSIGlzIG5vdCBhIHN0YXRlLiBlbWFjX3NldF9wb3J0X3N0YXRlKCkgc2VuZHMKYSBj b21tYW5kIHRvIGZpcm13YXJlLCB3ZSBjYWxsIGl0IHIzMCBjb21tYW5kLiBEcml2ZXIgdGhlbiB3 YWl0cyBmb3IgdGhlCnJlc3BvbnNlIGZvciBzb21lIHRpbWUuIElmIGEgc3VjY2Vzc2Z1bGwgcmVz cG9uc2UgaXMgcmVjaXZlZCB0aGUKZnVuY3Rpb24gcmV0dXJuIDAgb3RoZXJ3aXNlIGVycm9yLgoK SGVyZSBmaXJzdCBgZW1hY19zZXRfcG9ydF9zdGF0ZShlbWFjLCBJQ1NTR19FTUFDX1BPUlRfVEFT X1RSSUdHRVIpYCBpcwpjYWxsZWQgd2hpY2ggd2lsbCBhc2sgZmlybXdhcmUgdG8gc3dhcCB0aGUg YWN0aXZlX2xpc3QgYW5kIHNoYWRvd19saXN0CmFzIGV4cGxhaW5lZCBhYm92ZS4KCkFmdGVyIHRo YXQgSUNTU0dfRU1BQ19QT1JUX1RBU19FTkFCTEUgY21kIGlzIHNlbnQuIFVwb24gcmVjaWV2aW5p ZyB0aGlzCmNvbW1hbmQgZmlybXdhcmUgd2lsbCBFbmFibGUgVEFTIGZvciB0aGUgcGFydGljdWxh ciBwb3J0LiAocG9ydCBpcyBwYXJ0Cm9mIGVtYWMgc3RydWN0dXJlKS4KCkkgY2FuIHNlZSBob3cg dGhhdCBjYW4gYmUgY29uZnVzaW5nIGdpdmVuIHRoZSBBUEkgbmFtZSBpcwplbWFjX3NldF9wb3J0 X3N0YXRlKCkuIFNvbWUgb2YgdGhlIGNtZHMgaW5mYWN0IHRyaWdnZXJzIGEgc3RhdGUgY2hhbmdl CmVnLiBJQ1NTR19FTUFDX1BPUlRfRElTQUJMRSwgSUNTU0dfRU1BQ19QT1JUX0JMT0NLLApJQ1NT R19FTUFDX1BPUlRfRk9SV0FSRCBidXQgc29tZSBvZiB0aGUgY29tbWFuZHMganVzdCB0cmlnZ2Vy cyBzb21lCmFjdGlvbiBvbiB0aGUgZmlybXdhcmUgc2lkZS4gQmFzZWQgb24gdGhlIGNvbW1hbmQg ZmlybXdhcmUgZG9lcyBzb21lCmFjdGlvbnMuCgoKPj4gK30KPiAKPiBUaGVyZSdzIHNvbWV0aGlu ZyBleHRyZW1lbHkgZWxlbWVudGFyeSBhYm91dCB0aGlzIGZ1bmN0aW9uIHdoaWNoIEkgc3RpbGwK PiBkb24ndCB1bmRlcnN0YW5kLgo+IAo+IFdoZW4gZG9lcyB0aGUgc2NoZWR1bGUgYWN0dWFsbHkg X3N0YXJ0Xz8gQ2FuIHRoYXQgYmUgY29udHJvbGxlZCBieSB0aGUKPiBkcml2ZXIgd2l0aCB0aGUg aGlnaCAobmFub3NlY29uZCkgcHJlY2lzaW9uIG5lY2Vzc2FyeSBpbiBvcmRlciBmb3IgdGhlCj4g SUNTU0cgdG8gc3luY2hyb25pemUgd2l0aCB0aGUgc2NoZWR1bGUgb2Ygb3RoZXIgZXF1aXBtZW50 IGluIHRoZSBMQU4/Cj4gCj4gWW91IG5ldmVyIHBhc3MgdGhlIGJhc2UgdGltZSBwZXIgc2UgdG8g dGhlIGZpcm13YXJlLiBKdXN0IGEgbnVtYmVyIG9mCj4gY3ljbGVzIGZyb20gbm93LiBJIGd1ZXNz IHRoYXQgbnVtYmVyIG9mIGN5Y2xlcyBkZWNpZGVzIHdoZW4gdGhlIHNjaGVkdWxlCj4gc3RhcnRz LCBidXQgd2hhdCBhcmUgdGhvc2UgY3ljbGVzIHJlbGF0aXZlIHRvPwo+CgpPbmNlIHRoZSBzaGFk b3cgbGlzdCBpcyB1cGRhdGVkLCB0aGUgdHJpZ2dlciBpcyBzZXQgaW4gdGhlIGZpcm13YXJlIGFu ZApmb3IgdGhhdCBBUEkgdGFzX3NldF90cmlnZ2VyX2xpc3RfY2hhbmdlKCkgaXMgY2FsbGVkLgoK VGhlIGZvbGxvd2luZyB0aHJlZSBvZmZzZXRzIGFyZSBjb25maWd1cmVkIGluIHRoaXMgZnVuY3Rp b24sCjEuIFRBU19BRE1JTl9DWUNMRV9USU1FIOKGkiBhZG1pbiBjeWNsZSB0aW1lCjIuIFRBU19D T05GSUdfQ0hBTkdFX0NZQ0xFX0NPVU5UIOKGkiBudW1iZXIgb2YgY3ljbGVzIGFmdGVyIHdoaWNo IHRoZQphZG1pbiBsaXN0IGlzIHRha2VuIGFzIG9wZXJhdGluZyBsaXN0LgpUaGlzIHBhcmFtZXRl ciBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBiYXNlX3RpbWUsIGN1cl90aW1lIGFuZApjeWNs ZV90aW1lLiBJZiB0aGUgYmFzZV90aW1lIGlzIGluIHBhc3QgKGFscmVhZHkgcGFzc2VkKSB0aGUK VEFTX0NPTkZJR19DSEFOR0VfQ1lDTEVfQ09VTlQgaXMgc2V0IHRvIDEuIElmIHRoZSBiYXNlX3Rp bWUgaXMgaW4KZnV0dXJlLCBUQVNfQ09ORklHX0NIQU5HRV9DWUNMRV9DT1VOVCBpcyBjYWxjdWxh dGVkIHVzaW5nCkRJVl9ST1VORF9VUF9VTEwoYmFzZV90aW1lIC0gY3VyX3RpbWUsIGN5Y2xlX3Rp bWUpCjMuIFRBU19BRE1JTl9MSVNUX0xFTkdUSCDihpIgTnVtYmVyIG9mIHdpbmRvdyBlbnRyaWVz IGluIHRoZSBhZG1pbiBsaXN0LgoKQWZ0ZXIgY29uZmlndXJpbmcgdGhlIGFib3ZlIHRocmVlIHBh cmFtZXRlcnMsIHRoZSBkcml2ZXIgZ2l2ZXMgdGhlCnRyaWdnZXIgc2lnbmFsIHRvIHRoZSBmaXJt d2FyZSB1c2luZyB0aGUgUjMwIGNvbW1hbmQgaW50ZXJmYWNlIHdpdGgKSUNTU0dfRU1BQ19QT1JU X1RBU19UUklHR0VSIGNvbW1hbmQuCgpUaGUgc2NoZWR1bGUgc3RhcnRzIGJhc2VkIG9uIFRBU19D T05GSUdfQ0hBTkdFX0NZQ0xFX0NPVU5ULiBUaG9zZSBjeWNsZXMKYXJlIHJlbGF0aXZlIHRvIHRp bWUgcmVtYWluaW5nIGluIHRoZSBiYXNlX3RpbWUgZnJvbSBub3cgaS5lLiBiYXNlX3RpbWUKLSBj dXJfdGltZS4KCj4+ICsKPj4gK3N0YXRpYyBpbnQgdGFzX3VwZGF0ZV9vcGVyX2xpc3Qoc3RydWN0 IHBydWV0aF9lbWFjICplbWFjKQo+PiArewo+PiArCXN0cnVjdCB0Y190YXByaW9fcW9wdF9vZmZs b2FkICphZG1pbl9saXN0ID0gZW1hYy0+cW9zLnRhcy50YXByaW9fYWRtaW47Cj4+ICsJc3RydWN0 IHRhc19jb25maWcgKnRhcyA9ICZlbWFjLT5xb3MudGFzLmNvbmZpZzsKPj4gKwl1MzIgdGFzX2Fj Y19nYXRlX2Nsb3NlX3RpbWUgPSAwOwo+PiArCXU4IGlkeCwgZ2F0ZV9pZHgsIHZhbDsKPj4gKwlp bnQgcmV0Owo+PiArCj4+ICsJaWYgKGFkbWluX2xpc3QtPmN5Y2xlX3RpbWUgPiBUQVNfTUFYX0NZ Q0xFX1RJTUUpCj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCj4+ICsJdGFzX3VwZGF0ZV9md19s aXN0X3BvaW50ZXJzKGVtYWMpOwo+PiArCj4+ICsJZm9yIChpZHggPSAwOyBpZHggPCBhZG1pbl9s aXN0LT5udW1fZW50cmllczsgaWR4KyspIHsKPj4gKwkJd3JpdGViKGFkbWluX2xpc3QtPmVudHJp ZXNbaWR4XS5nYXRlX21hc2ssCj4+ICsJCSAgICAgICAmdGFzLT5md19zaGFkb3dfbGlzdC0+Z2F0 ZV9tYXNrX2xpc3RbaWR4XSk7Cj4+ICsJCXRhc19hY2NfZ2F0ZV9jbG9zZV90aW1lICs9IGFkbWlu X2xpc3QtPmVudHJpZXNbaWR4XS5pbnRlcnZhbDsKPj4gKwo+PiArCQkvKiBleHRlbmQgbGFzdCBl bnRyeSB0aWxsIGVuZCBvZiBjeWNsZSB0aW1lICovCj4+ICsJCWlmIChpZHggPT0gYWRtaW5fbGlz dC0+bnVtX2VudHJpZXMgLSAxKQo+PiArCQkJd3JpdGVsKGFkbWluX2xpc3QtPmN5Y2xlX3RpbWUs Cj4+ICsJCQkgICAgICAgJnRhcy0+Zndfc2hhZG93X2xpc3QtPndpbl9lbmRfdGltZV9saXN0W2lk eF0pOwo+PiArCQllbHNlCj4+ICsJCQl3cml0ZWwodGFzX2FjY19nYXRlX2Nsb3NlX3RpbWUsCj4+ ICsJCQkgICAgICAgJnRhcy0+Zndfc2hhZG93X2xpc3QtPndpbl9lbmRfdGltZV9saXN0W2lkeF0p Owo+PiArCX0KPj4gKwo+PiArCS8qIGNsZWFyIHJlbWFpbmluZyBlbnRyaWVzICovCj4+ICsJZm9y IChpZHggPSBhZG1pbl9saXN0LT5udW1fZW50cmllczsgaWR4IDwgVEFTX01BWF9DTURfTElTVFM7 IGlkeCsrKSB7Cj4+ICsJCXdyaXRlYigwLCAmdGFzLT5md19zaGFkb3dfbGlzdC0+Z2F0ZV9tYXNr X2xpc3RbaWR4XSk7Cj4+ICsJCXdyaXRlbCgwLCAmdGFzLT5md19zaGFkb3dfbGlzdC0+d2luX2Vu ZF90aW1lX2xpc3RbaWR4XSk7Cj4+ICsJfQo+PiArCj4+ICsJLyogdXBkYXRlIHRoZSBBcnJheSBv ZiBnYXRlIGNsb3NlIHRpbWUgZm9yIGVhY2ggcXVldWUgaW4gZWFjaCB3aW5kb3cgKi8KPj4gKwlm b3IgKGlkeCA9IDAgOyBpZHggPCBhZG1pbl9saXN0LT5udW1fZW50cmllczsgaWR4KyspIHsKPj4g KwkJLyogT24gTGludXgsIG9ubHkgUFJVRVRIX01BWF9UWF9RVUVVRVMgYXJlIHN1cHBvcnRlZCBw ZXIgcG9ydCAqLwo+PiArCQlmb3IgKGdhdGVfaWR4ID0gMDsgZ2F0ZV9pZHggPCBQUlVFVEhfTUFY X1RYX1FVRVVFUzsgZ2F0ZV9pZHgrKykgewo+PiArCQkJdTggZ2F0ZV9tYXNrX2xpc3RfaWR4ID0g cmVhZGIoJnRhcy0+Zndfc2hhZG93X2xpc3QtPmdhdGVfbWFza19saXN0W2lkeF0pOwo+PiArCQkJ dTMyIGdhdGVfY2xvc2VfdGltZSA9IDA7Cj4+ICsKPj4gKwkJCWlmIChnYXRlX21hc2tfbGlzdF9p ZHggJiBCSVQoZ2F0ZV9pZHgpKQo+PiArCQkJCWdhdGVfY2xvc2VfdGltZSA9IHJlYWRsKCZ0YXMt PmZ3X3NoYWRvd19saXN0LT53aW5fZW5kX3RpbWVfbGlzdFtpZHhdKTsKPj4gKwo+PiArCQkJd3Jp dGVsKGdhdGVfY2xvc2VfdGltZSwKPj4gKwkJCSAgICAgICAmdGFzLT5md19zaGFkb3dfbGlzdC0+ Z2F0ZV9jbG9zZV90aW1lX2xpc3RbaWR4XVtnYXRlX2lkeF0pOwo+PiArCQl9Cj4gCj4gQW4gaW1w bGVtZW50YXRpb24gd2hpY2ggb3BlcmF0ZXMgcGVyIFRYIHF1ZXVlcyByYXRoZXIgdGhhbiBwZXIg dHJhZmZpYwo+IGNsYXNzZXMgc2hvdWxkIHJlcG9ydCBjYXBzLT5nYXRlX21hc2tfcGVyX3R4cSA9 IHRydWUgaW4gVENfUVVFUllfQ0FQUy4KPiAKClN1cmUgSSB3aWxsIGFkZCB0aGlzIGltcGxlbWVu dGF0aW9uLgoKPj4gKwl9Cj4+ICsKPj4gKwkvKiB0ZWxsIGYvdyB0byBzd2FwIGFjdGl2ZSAmIHNo YWRvdyBsaXN0ICovCj4+ICsJcmV0ID0gdGFzX3NldF90cmlnZ2VyX2xpc3RfY2hhbmdlKGVtYWMp Owo+PiArCWlmIChyZXQpIHsKPj4gKwkJbmV0ZGV2X2VycihlbWFjLT5uZGV2LCAiZmFpbGVkIHRv IHN3YXAgZi93IGNvbmZpZyBsaXN0OiAlZFxuIiwgcmV0KTsKPj4gKwkJcmV0dXJuIHJldDsKPj4g Kwl9Cj4+ICsKPj4gKwkvKiBXYWl0IGZvciBjb21wbGV0aW9uICovCj4+ICsJcmV0ID0gcmVhZGJf cG9sbF90aW1lb3V0KCZ0YXMtPmNvbmZpZ19saXN0LT5jb25maWdfY2hhbmdlLCB2YWwsICF2YWws Cj4+ICsJCQkJIFVTRUNfUEVSX01TRUMsIDEwICogVVNFQ19QRVJfTVNFQyk7Cj4+ICsJaWYgKHJl dCkgewo+PiArCQluZXRkZXZfZXJyKGVtYWMtPm5kZXYsICJUQVMgbGlzdCBjaGFuZ2UgY29tcGxl dGlvbiB0aW1lIG91dFxuIik7Cj4+ICsJCXJldHVybiByZXQ7Cj4+ICsJfQo+PiArCj4+ICsJdGFz X3VwZGF0ZV9md19saXN0X3BvaW50ZXJzKGVtYWMpOwo+IAo+IENhbGxpbmcgdGhpcyB0d2ljZSBp biB0aGUgc2FtZSBmdW5jdGlvbj8gRXhwbGFuYXRpb24/Cj4gCgpBcyBleHBsYWluZWQgZWFybGll ciB0YXNfdXBkYXRlX2Z3X2xpc3RfcG9pbnRlcnMoKSBpcyBjYWxsZWQgaW4gdGhlCmJlZ2lubmlu ZyB0byBzZXQgdGhlIGFjdGl2ZSBhbmQgc2hhZG93X2xpc3QuIEFmdGVyIHRoYXQgd2UgZmlsbCB0 aGUKc2hhZG93IGxpc3QgYW5kIHRoZW4gc2VuZCBjb21tbWFuZCB0byBzd2FwIHRoZSBhY3RpdmUg YW5kIHNoYWRvdyBsaXN0LgpBcyB0aGUgbGlzdCBhcmUgc3dhcHBlZCB3ZSB3aWxsIGNhbGwgdGFz X3VwZGF0ZV9md19saXN0X3BvaW50ZXJzKCkgdG8KdXBkYXRlIHRoZSBsaXN0IHBvaW50ZXJzLgoK Pj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGVtYWNfdGFwcmlv X3JlcGxhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCj4+ICsJCQkgICAgICAgc3RydWN0IHRj X3RhcHJpb19xb3B0X29mZmxvYWQgKnRhcHJpbykKPj4gK3sKPj4gKwlzdHJ1Y3QgcHJ1ZXRoX2Vt YWMgKmVtYWMgPSBuZXRkZXZfcHJpdihuZGV2KTsKPj4gKwlpbnQgcmV0Owo+PiArCj4+ICsJaWYg KHRhcHJpby0+Y3ljbGVfdGltZV9leHRlbnNpb24pIHsKPj4gKwkJTkxfU0VUX0VSUl9NU0dfTU9E KHRhcHJpby0+ZXh0YWNrLCAiQ3ljbGUgdGltZSBleHRlbnNpb24gbm90IHN1cHBvcnRlZCIpOwo+ PiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4+ICsJfQo+PiArCj4+ICsJaWYgKHRhcHJpby0+Y3lj bGVfdGltZSA8IFRBU19NSU5fQ1lDTEVfVElNRSkgewo+PiArCQlOTF9TRVRfRVJSX01TR19GTVRf TU9EKHRhcHJpby0+ZXh0YWNrLCAiY3ljbGVfdGltZSAlbGx1IGlzIGxlc3MgdGhhbiBtaW4gc3Vw cG9ydGVkIGN5Y2xlX3RpbWUgJWQiLAo+PiArCQkJCSAgICAgICB0YXByaW8tPmN5Y2xlX3RpbWUs IFRBU19NSU5fQ1lDTEVfVElNRSk7Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+ PiArCWlmICh0YXByaW8tPm51bV9lbnRyaWVzID4gVEFTX01BWF9DTURfTElTVFMpIHsKPj4gKwkJ TkxfU0VUX0VSUl9NU0dfRk1UX01PRCh0YXByaW8tPmV4dGFjaywgIm51bV9lbnRyaWVzICVsdSBp cyBtb3JlIHRoYW4gbWF4IHN1cHBvcnRlZCBlbnRyaWVzICVkIiwKPj4gKwkJCQkgICAgICAgdGFw cmlvLT5udW1fZW50cmllcywgVEFTX01BWF9DTURfTElTVFMpOwo+PiArCQlyZXR1cm4gLUVJTlZB TDsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAoZW1hYy0+cW9zLnRhcy50YXByaW9fYWRtaW4pCj4+ICsJ CXRhcHJpb19vZmZsb2FkX2ZyZWUoZW1hYy0+cW9zLnRhcy50YXByaW9fYWRtaW4pOwo+PiArCj4+ ICsJZW1hYy0+cW9zLnRhcy50YXByaW9fYWRtaW4gPSB0YXByaW9fb2ZmbG9hZF9nZXQodGFwcmlv KTsKPj4gKwlyZXQgPSB0YXNfdXBkYXRlX29wZXJfbGlzdChlbWFjKTsKPiAKPiBJZiB0aGlzIGZh aWxzIGFuZCB0aGVyZSB3YXMgYSBwcmV2aW91cyBlbWFjLT5xb3MudGFzLnRhcHJpb19hZG1pbgo+ IHNjaGVkdWxlIHByZXNlbnQsIHlvdSBqdXN0IGJyb2tlIGl0LiBJbiBwYXJ0aWN1bGFyLCB0aGUK PiAiaWYgKGFkbWluX2xpc3QtPmN5Y2xlX3RpbWUgPiBUQVNfTUFYX0NZQ0xFX1RJTUUpIiBib3Vu ZHMgY2hlY2sgcmVhbGx5Cj4gZG9lc24ndCBiZWxvbmcgdGhlcmU7IGl0IHNob3VsZCBoYXZlIGJl ZW4gZG9uZSBtdWNoIGVhcmxpZXIsIHRvIGF2b2lkIGEKPiBjb21wbGV0ZSBvZmZsb2FkIGJyZWFr YWdlIGZvciBzdWNoIGEgc2lsbHkgdGhpbmcgKHJlcGxhY2luZyBhIHdvcmtpbmcKPiB0YXByaW8g c2NoZWR1bGUgd2l0aCBhIG5ldyBvbmUgdGhhdCBoYXMgdG9vIGxhcmdlIGN5Y2xlIGJyZWFrcyB0 aGUgb2xkCj4gc2NoZWR1bGUpLgo+IAoKV2lsbCBhZGRpbmcgdGhlIGNoZWNrICJpZiAoYWRtaW5f bGlzdC0+Y3ljbGVfdGltZSA+IFRBU19NQVhfQ1lDTEVfVElNRSkiCmluIGVtYWNfdGFwcmlvX3Jl cGxhY2UoKSBhbG9uZyB3aXRoIHRoZSBhbGwgdGhlIGNoZWNrcyBiZSBPSz8KCgo+PiArCWlmIChy ZXQpCj4+ICsJCWdvdG8gY2xlYXJfdGFwcmlvOwo+PiArCj4+ICsJcmV0ID0gdGFzX3NldF9zdGF0 ZShlbWFjLCBUQVNfU1RBVEVfRU5BQkxFKTsKPj4gKwlpZiAocmV0KQo+PiArCQlnb3RvIGNsZWFy X3RhcHJpbzsKPj4gKwo+PiArY2xlYXJfdGFwcmlvOgo+PiArCWVtYWMtPnFvcy50YXMudGFwcmlv X2FkbWluID0gTlVMTDsKPj4gKwl0YXByaW9fb2ZmbG9hZF9mcmVlKHRhcHJpbyk7Cj4+ICsKPj4g KwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGVtYWNfdGFwcmlvX2Rlc3Ry b3koc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCj4+ICsJCQkgICAgICAgc3RydWN0IHRjX3RhcHJp b19xb3B0X29mZmxvYWQgKnRhcHJpbykKPj4gK3sKPj4gKwlzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVt YWMgPSBuZXRkZXZfcHJpdihuZGV2KTsKPj4gKwlpbnQgcmV0Owo+PiArCj4+ICsJdGFwcmlvX29m ZmxvYWRfZnJlZSh0YXByaW8pOwo+PiArCj4+ICsJcmV0ID0gdGFzX3NldF9zdGF0ZShlbWFjLCBU QVNfU1RBVEVfUkVTRVQpOwo+PiArCWlmIChyZXQpCj4+ICsJCXJldHVybiByZXQ7Cj4+ICsKPj4g KwlyZXR1cm4gdGFzX3NldF9zdGF0ZShlbWFjLCBUQVNfU1RBVEVfRElTQUJMRSk7Cj4gCj4gQWdh aW4sIGFueSB0aW1pbmcgcmVxdWlyZW1lbnRzIGZvciB0aGUgc3RhdGUgdHJhbnNpdGlvbnM/IFdo eSBub3QKPiBkaXJlY3RseSBkbyBUQVNfU1RBVEVfRElTQUJMRT8gSXQncyBub3QgdmVyeSBjbGVh ciB3aGF0IHRoZXkgZG8KPiBkaWZmZXJlbnQsIGRlc3BpdGUgb2YgdGhlIGF0dGVtcHQgdG8gZG9j dW1lbnQgdGhlc2UgZmlybXdhcmUgc3RhdGVzLgo+IAoKRG9pbmcgYSBUQVNfU1RBVEVfUkVTRVQg cmVzZXRzIGFsbCB0aGUgY29uZmlndXJhdGlvbnMgZG9uZSBwcmV2aW91c2x5LgpEaXNhYmxlIG9u bHkgZGlzYWJsZXMgdGhlIHN0YXRlIGJ1dCB0aGUgY29uZmlndXJhdGlvbiByZW1haW5zLiBXaGVu IHdlCmRlc3Ryb3kgdGhlIHRhcHJpbyBJIHRoaW5rIHdlIHNob3VsZCBjbGVhciBvdXQgZXZlcnl0 aGluZyB0aHVzIHJlc2V0IGlzCm5lZWRlZC4KCkhvd2V2ZXIgSSB0aGluayB0aGUgc2VxdWVuY2Ug aXMgbm90IGNvcnJlY3QgaGVyZS4gSXQgc2hvdWxkIGJlClRBU19TVEFURV9ESVNBQkxFIGZpcnN0 IGFuZCB0aGVuIFRBU19TVEFURV9SRVNFVC4KCj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZW1h Y19zZXR1cF90YXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHZvaWQgKnR5cGVfZGF0YSkK Pj4gK3sKPj4gKwlzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqdGFwcmlvID0gdHlwZV9k YXRhOwo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlzd2l0Y2ggKHRhcHJpby0+Y21kKSB7Cj4+ICsJ Y2FzZSBUQVBSSU9fQ01EX1JFUExBQ0U6Cj4+ICsJCXJldCA9IGVtYWNfdGFwcmlvX3JlcGxhY2Uo bmRldiwgdGFwcmlvKTsKPj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSBUQVBSSU9fQ01EX0RFU1RST1k6 Cj4+ICsJCXJldCA9IGVtYWNfdGFwcmlvX2Rlc3Ryb3kobmRldiwgdGFwcmlvKTsKPj4gKwkJYnJl YWs7Cj4+ICsJZGVmYXVsdDoKPj4gKwkJcmV0ID0gLUVPUE5PVFNVUFA7Cj4+ICsJfQo+PiArCj4+ ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiAraW50IGljc3NnX3Fvc19uZG9fc2V0dXBfdGMo c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLAo+PiArCQkJ ICAgdm9pZCAqdHlwZV9kYXRhKQo+PiArewo+PiArCXN3aXRjaCAodHlwZSkgewo+PiArCWNhc2Ug VENfU0VUVVBfUURJU0NfVEFQUklPOgo+PiArCQlyZXR1cm4gZW1hY19zZXR1cF90YXByaW8obmRl diwgdHlwZV9kYXRhKTsKPj4gKwlkZWZhdWx0Ogo+PiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4+ ICsJfQo+PiArfQo+PiArCj4+ICt2b2lkIGljc3NnX3Fvc190YXNfaW5pdChzdHJ1Y3QgbmV0X2Rl dmljZSAqbmRldikKPj4gK3sKPj4gKwlzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMgPSBuZXRkZXZf cHJpdihuZGV2KTsKPj4gKwlzdHJ1Y3QgdGFzX2NvbmZpZyAqdGFzOwo+PiArCj4+ICsJdGFzID0g JmVtYWMtPnFvcy50YXMuY29uZmlnOwo+PiArCj4+ICsJdGFzLT5jb25maWdfbGlzdCA9IGVtYWMt PmRyYW0udmEgKyBUQVNfQ09ORklHX0NIQU5HRV9USU1FOwo+PiArCXRhcy0+YWN0aXZlX2xpc3Qg PSBlbWFjLT5kcmFtLnZhICsgVEFTX0FDVElWRV9MSVNUX0lOREVYOwo+PiArCj4+ICsJdGFzX3Vw ZGF0ZV9md19saXN0X3BvaW50ZXJzKGVtYWMpOwo+PiArCj4+ICsJdGFzX3NldF9zdGF0ZShlbWFj LCBUQVNfU1RBVEVfUkVTRVQpOwo+IAo+IFdoeSBsZWF2ZSBpdCBpbiBUQVNfU1RBVEVfUkVTRVQg YW5kIG5vdCBUQVNfU1RBVEVfRElTQUJMRT8gVGhlIGZpcm13YXJlCj4gc3RhdGUgYXQgcHJvYmUg dGltZSBpcyBub3QgaWRlbXBvdGVudCB3aXRoIGl0cyBzdGF0ZSBhZnRlciBhCj4gZW1hY190YXBy aW9fcmVwbGFjZSgpIC0+IGVtYWNfdGFwcmlvX2Rlc3Ryb3koKSBzZXF1ZW5jZSwgd2hpY2ggaXMg bm90Cj4gZ29vZC4KPiAKCkR1cmluZyBpbml0IHRoZSB3ZSB3YW50IHRoZSBUQVMgdG8gYmUgY29t cGxldGVseSBjbGVhbmVkLiBTbyBpZiB0aGVyZSBpcwphbnkgcmVzaWR1YWwgY29uZmlndXJhdGlv bnMgbGVmdCB3ZSB3YW50IHRoYXQgdG8gYmUgY2xlYXJlZCB0aHVzClRBU19TVEFURV9SRVNFVCBp cyBjYWxsZWQuCgpXaGVuIHRhc19zZXRfc3RhdGUoZW1hYywgVEFTX1NUQVRFX1JFU0VUKSBvciB0 YXNfc2V0X3N0YXRlKGVtYWMsClRBU19TVEFURV9ESVNBQkxFKSBpcyBjYWxsZWQgYSByMzAgY21k IGlzIHNlbnQgdG8gZmlybXdhcmUgdG8gcmVzZXQgLwpkaXNhYmxlIHRoZSB0YXMuCgpBcyBleHBs YWluZWQgYWJvdmUgdGhlIGVtYWNfdGFwcmlvX2Rlc3Ryb3koKSBzZXF1ZW5jZSBzaG91bGQgYmUK VEFTX1NUQVRFX0RJU0FCTEUgYW5kIHRoZW4gVEFTX1NUQVRFX1JFU0VULgoKSGVyZSBpbiBwcm9i ZSBhbHNvIHdlIGFyZSBzZXR0aW5nIHRoZSBzdGF0ZSB0byBUQVNfU1RBVEVfUkVTRVQuIE5vdyB0 aGUKZmlybXdhcmUgc3RhdGUgYXQgcHJvYmUgdGltZSB3aWxsIGJlIGlkZW1wb3RlbnQgd2l0aCBp dHMgc3RhdGUgYWZ0ZXIgYQplbWFjX3RhcHJpb19yZXBsYWNlKCkgLT4gZW1hY190YXByaW9fZGVz dHJveSgpIHNlcXVlbmNlLgoKPj4gK30KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVy bmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cv aWNzc2dfcW9zLmgKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwMDAw Li4yNWJhY2NkZDFjZTUKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL25ldC9ldGhl cm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuaAo+PiBAQCAtMCwwICsxLDExMyBAQAo+PiArLyogU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KPj4gKy8qIENvcHlyaWdodCAoQykgMjAy MyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KPj4g KyAqLwo+PiArCj4+ICsjaWZuZGVmIF9fTkVUX1RJX0lDU1NHX1FPU19ICj4+ICsjZGVmaW5lIF9f TkVUX1RJX0lDU1NHX1FPU19ICj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KPj4g KyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KPj4gKyNpbmNsdWRlIDxuZXQvcGt0X3NjaGVk Lmg+Cj4+ICsKPj4gKy8qIE1heGltdW0gbnVtYmVyIG9mIGdhdGUgY29tbWFuZCBlbnRyaWVzIGlu IGVhY2ggbGlzdC4gKi8KPj4gKyNkZWZpbmUgVEFTX01BWF9DTURfTElTVFMgICAoMTYpCj4+ICsK Pj4gKy8qIE1heGltdW0gbnVtYmVyIG9mIHRyYW5zbWl0IHF1ZXVlcyBzdXBwb3J0ZWQgYnkgaW1w bGVtZW50YXRpb24gKi8KPj4gKyNkZWZpbmUgVEFTX01BWF9OVU1fUVVFVUVTICAoOCkKPj4gKwo+ PiArLyogTWluaW11bSBjeWNsZSB0aW1lIHN1cHBvcnRlZCBieSBpbXBsZW1lbnRhdGlvbiAoaW4g bnMpICovCj4+ICsjZGVmaW5lIFRBU19NSU5fQ1lDTEVfVElNRSAgKDEwMDAwMDApCj4+ICsKPj4g Ky8qIE1pbmltdW0gY3ljbGUgdGltZSBzdXBwb3J0ZWQgYnkgaW1wbGVtZW50YXRpb24gKGluIG5z KSAqLwo+PiArI2RlZmluZSBUQVNfTUFYX0NZQ0xFX1RJTUUgICg0MDAwMDAwMDAwKQo+PiArCj4+ ICsvKiBNaW5pbXVtIFRBUyB3aW5kb3cgZHVyYXRpb24gc3VwcG9ydGVkIGJ5IGltcGxlbWVudGF0 aW9uIChpbiBucykgKi8KPj4gKyNkZWZpbmUgVEFTX01JTl9XSU5ET1dfRFVSQVRJT04gICgxMDAw MCkKPj4gKwo+PiArLyoqCj4+ICsgKiBlbnVtIHRhc19saXN0X251bSAtIFRBUyBsaXN0IG51bWJl cgo+PiArICogQFRBU19MSVNUMDogVEFTIGxpc3QgbnVtYmVyIGlzIDAKPj4gKyAqIEBUQVNfTElT VDE6IFRBUyBsaXN0IG51bWJlciBpcyAxCj4+ICsgKi8KPj4gK2VudW0gdGFzX2xpc3RfbnVtIHsK Pj4gKwlUQVNfTElTVDAgPSAwLAo+PiArCVRBU19MSVNUMSA9IDEKPj4gK307Cj4+ICsKPj4gKy8q Kgo+PiArICogZW51bSB0YXNfc3RhdGUgLSBTdGF0ZSBvZiBUQVMgaW4gZmlybXdhcmUKPj4gKyAq IEBUQVNfU1RBVEVfRElTQUJMRTogVEFTIHN0YXRlIG1hY2hpbmUgaXMgZGlzYWJsZWQuCj4+ICsg KiBAVEFTX1NUQVRFX0VOQUJMRTogVEFTIHN0YXRlIG1hY2hpbmUgaXMgZW5hYmxlZC4KPj4gKyAq IEBUQVNfU1RBVEVfUkVTRVQ6IFRBUyBzdGF0ZSBtYWNoaW5lIGlzIHJlc2V0Lgo+PiArICovCj4+ ICtlbnVtIHRhc19zdGF0ZSB7Cj4+ICsJVEFTX1NUQVRFX0RJU0FCTEUgPSAwLAo+PiArCVRBU19T VEFURV9FTkFCTEUgPSAxLAo+PiArCVRBU19TVEFURV9SRVNFVCA9IDIsCj4+ICt9Owo+PiArCj4+ ICsvKioKPj4gKyAqIHN0cnVjdCB0YXNfY29uZmlnX2xpc3QgLSBDb25maWcgc3RhdGUgbWFjaGlu ZSB2YXJpYWJsZXMKPj4gKyAqIEBjb25maWdfY2hhbmdlX3RpbWU6IE5ldyBsaXN0IGlzIGNvcGll ZCBhdCB0aGlzIHRpbWUKPj4gKyAqIEBjb25maWdfY2hhbmdlX2Vycm9yX2NvdW50ZXI6IEluY3Jl bWVudGVkIGlmIGFkbWluLT5CYXNlVGltZSA8IGN1cnJlbnQgdGltZQo+PiArICoJCQkJIGFuZCBU QVNfZW5hYmxlZCBpcyB0cnVlCj4+ICsgKiBAY29uZmlnX3BlbmRpbmc6IFRydWUgaWYgbGlzdCB1 cGRhdGUgaXMgcGVuZGluZwo+PiArICogQGNvbmZpZ19jaGFuZ2U6IFNldCB0byB0cnVlIHdoZW4g YXBwbGljYXRpb24gdHJpZ2dlciB1cGRhdGluZyBvZiBhZG1pbiBsaXN0Cj4+ICsgKgkJICAgdG8g YWN0aXZlIGxpc3QsIGNsZWFyZWQgd2hlbiBjb25maWdDaGFuZ2VUaW1lIGlzIHVwZGF0ZWQKPj4g KyAqLwo+PiArc3RydWN0IHRhc19jb25maWdfbGlzdCB7Cj4+ICsJdTY0IGNvbmZpZ19jaGFuZ2Vf dGltZTsKPj4gKwl1MzIgY29uZmlnX2NoYW5nZV9lcnJvcl9jb3VudGVyOwo+PiArCXU4IGNvbmZp Z19wZW5kaW5nOwo+PiArCXU4IGNvbmZpZ19jaGFuZ2U7Cj4+ICt9Owo+IAo+IFNob3VsZCBiZSBf X3BhY2tlZCBzaW5jZSBpdCBtYXBzIG92ZXIgYSBmaXJtd2FyZS1kZWZpbmVkIF9faW9tZW0gbWVt b3J5Cj4gcmVnaW9uLiBUaGUgY29tcGlsZXIgaXMgbm90IGZyZWUgdG8gcGFkIGFzIGl0IHdpc2hl cy4KPiAKClN1cmUuCgo+PiArCj4+ICsvKiBNYXggU0RVIHRhYmxlLiBTZWUgSUVFRSBTdGQgODAy LjFRLTIwMTggMTIuMjkuMS4xICovCj4+ICtzdHJ1Y3QgdGFzX21heF9zZHVfdGFibGUgewo+PiAr CXUxNiBtYXhfc2R1W1RBU19NQVhfTlVNX1FVRVVFU107Cj4+ICt9Owo+PiArCj4+ICsvKioKPj4g KyAqIHN0cnVjdCB0YXNfZmlybXdhcmVfbGlzdCAtIFRBUyBMaXN0IFN0cnVjdHVyZSBiYXNlZCBv biBmaXJtd2FyZSBtZW1vcnkgbWFwCj4+ICsgKiBAZ2F0ZV9tYXNrX2xpc3Q6IFdpbmRvdyBnYXRl IG1hc2sgbGlzdAo+PiArICogQHdpbl9lbmRfdGltZV9saXN0OiBXaW5kb3cgZW5kIHRpbWUgbGlz dAo+PiArICogQGdhdGVfY2xvc2VfdGltZV9saXN0OiBBcnJheSBvZiBnYXRlIGNsb3NlIHRpbWUg Zm9yIGVhY2ggcXVldWUgaW4gZWFjaCB3aW5kb3cKPj4gKyAqLwo+PiArc3RydWN0IHRhc19maXJt d2FyZV9saXN0IHsKPj4gKwl1OCBnYXRlX21hc2tfbGlzdFtUQVNfTUFYX0NNRF9MSVNUU107Cj4+ ICsJdTMyIHdpbl9lbmRfdGltZV9saXN0W1RBU19NQVhfQ01EX0xJU1RTXTsKPj4gKwl1MzIgZ2F0 ZV9jbG9zZV90aW1lX2xpc3RbVEFTX01BWF9DTURfTElTVFNdW1RBU19NQVhfTlVNX1FVRVVFU107 Cj4+ICt9Owo+IAo+IFNob3VsZCBiZSBfX3BhY2tlZC4KPiAKClN1cmUuCgo+PiArCj4+ICsvKioK Pj4gKyAqIHN0cnVjdCB0YXNfY29uZmlnIC0gTWFpbiBUaW1lIEF3YXJlIFNoYXBlciBIYW5kbGUK Pj4gKyAqIEBzdGF0ZTogVEFTIHN0YXRlCj4+ICsgKiBAbWF4X3NkdV90YWJsZTogTWF4IFNEVSB0 YWJsZQo+PiArICogQGNvbmZpZ19saXN0OiBDb25maWcgY2hhbmdlIHZhcmlhYmxlcwo+PiArICog QGFjdGl2ZV9saXN0OiBDdXJyZW50IG9wZXJhdGluZyBsaXN0IG9wZXJhdGluZyBsaXN0Cj4+ICsg KiBAZndfYWN0aXZlX2xpc3Q6IEFjdGl2ZSBMaXN0IHBvaW50ZXIsIHVzZWQgYnkgZmlybXdhcmUK Pj4gKyAqIEBmd19zaGFkb3dfbGlzdDogU2hhZG93IExpc3QgcG9pbnRlciwgdXNlZCBieSBkcml2 ZXIKPj4gKyAqLwo+PiArc3RydWN0IHRhc19jb25maWcgewo+PiArCWVudW0gdGFzX3N0YXRlIHN0 YXRlOwo+PiArCXN0cnVjdCB0YXNfbWF4X3NkdV90YWJsZSBtYXhfc2R1X3RhYmxlOwo+PiArCXN0 cnVjdCB0YXNfY29uZmlnX2xpc3QgX19pb21lbSAqY29uZmlnX2xpc3Q7Cj4+ICsJdTggX19pb21l bSAqYWN0aXZlX2xpc3Q7Cj4+ICsJc3RydWN0IHRhc19maXJtd2FyZV9saXN0IF9faW9tZW0gKmZ3 X2FjdGl2ZV9saXN0Owo+PiArCXN0cnVjdCB0YXNfZmlybXdhcmVfbGlzdCBfX2lvbWVtICpmd19z aGFkb3dfbGlzdDsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBwcnVldGhfcW9zX3RhcyB7Cj4+ICsJ c3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKnRhcHJpb19hZG1pbjsKPj4gKwlzdHJ1Y3Qg dGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqdGFwcmlvX29wZXI7Cj4gCj4gInRhcHJpb19vcGVyIiBp cyB1bnVzZWQuCj4gCgpJJ2xsIHJlbW92ZSB0aGlzLgoKPj4gKwlzdHJ1Y3QgdGFzX2NvbmZpZyBj b25maWc7Cj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgcHJ1ZXRoX3FvcyB7Cj4+ICsJc3RydWN0IHBy dWV0aF9xb3NfdGFzIHRhczsKPj4gK307Cj4+ICsKPj4gK3ZvaWQgaWNzc2dfcW9zX3Rhc19pbml0 KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKPj4gK2ludCBpY3NzZ19xb3NfbmRvX3NldHVwX3Rj KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwKPj4gKwkJ CSAgIHZvaWQgKnR5cGVfZGF0YSk7Cj4+ICsjZW5kaWYgLyogX19ORVRfVElfSUNTU0dfUU9TX0gg Ki8KPj4gLS0gCj4+IDIuMzQuMQo+PgoKVGhhbmtzIGZvciB5b3VyIGZlZWRiYWNrLiBJIHdpbGwg ZG8gdGhlIGNoYW5nZXMgbWVudGlvbmVkIGluIHRoaXMgbWFpbC4KQXBhcnQgZnJvbSB0aGVzZSBp ZiBhbnkgb3RoZXIgY2hhbmdlIGlzIG5lZWRlZCBwbGVhc2UgbGV0IG1lIGtub3cuCgpBbHNvIHBs ZWFzZSBsZXQgbWUga25vdyBpZiB5b3UgaGF2ZSBhbnkgbW9yZSBxdWVyaWVzLgoKLS0gClRoYW5r cyBhbmQgUmVnYXJkcywKRGFuaXNoCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2Vy bmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1h bi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==