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=-3.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no 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 41E63C5DF60 for ; Fri, 8 Nov 2019 08:12:55 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2099C21D7B for ; Fri, 8 Nov 2019 08:12:55 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2099C21D7B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mellanox.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 3770C6F86E; Fri, 8 Nov 2019 08:12:34 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on060a.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe1e::60a]) by gabe.freedesktop.org (Postfix) with ESMTPS id 48D8B6F78E; Thu, 7 Nov 2019 20:06:13 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XbYR/uRivvAfvGKhO6vEH5IoVw52viT8SbTkxoUdnPU5seHSfhOvS2pOsgI7vWXVHIxG8+eaJw8xtq9dJW7R/kVLdusfK9tD6Z4kgQZnuTTEXDZQFXIjB0tFb5TuCVN8xGcmwE5gYYj67+hYV+TPwvT/qKIdL4J7iu0hGyxFT6XcFhlwOm2+vLj9VDpSJp9bT5bd+oYvfN4QmlI06xTqyqtMJ9Q4E9aTTmukC1nScZtQKYa53HybhzO92PBWCFLsD2kOHuBvrd4W5Ho5133vt1WwvIVANMNiiy1eFWh9EL156Ic4Vc2efxwulllFMoQSEe9fgXadBQ7uIV3Ta6Oh6A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KZLGtICPXHQeYMx3zwEUZ2kEBvqnlPF/xDCnKoeEU1Y=; b=FMGEdkApgkM+8CTxEC4sr0tb6phrZTIvf9VXG0mLTfnbMU6u7iAGzjR65ihQBvgTRsbnTmpr0l1EJ+766Buy7vse76t6FVgFElI8cNqi1KgKjIre76WBrjPWG8dbxsGPP9l5p9BtLEsAADhX6k7yWXA74vLtX7xxlapDkN7E+ki9U+QhAW2VDbIxzM1pdjn7NHa+iotezNzepsZ7bOjxNxgcxQPpeLQzL9IrCYEt33bWBvMGaSs6xJ6S5Rke8aUtmWlcl5Vm/lx46i5WIngLBE1iPeWTyrJN27c563sqvoXlqfRf79p7RVQ7wYMT+jW75ytqGn5ULIaP6aBzCD3yYQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none Received: from VI1PR05MB4141.eurprd05.prod.outlook.com (52.133.14.15) by VI1PR05MB6653.eurprd05.prod.outlook.com (10.141.128.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2430.20; Thu, 7 Nov 2019 20:06:09 +0000 Received: from VI1PR05MB4141.eurprd05.prod.outlook.com ([fe80::b179:e8bf:22d4:bf8d]) by VI1PR05MB4141.eurprd05.prod.outlook.com ([fe80::b179:e8bf:22d4:bf8d%5]) with mapi id 15.20.2408.028; Thu, 7 Nov 2019 20:06:09 +0000 From: Jason Gunthorpe To: John Hubbard Subject: Re: [PATCH v2 02/15] mm/mmu_notifier: add an interval tree notifier Thread-Topic: [PATCH v2 02/15] mm/mmu_notifier: add an interval tree notifier Thread-Index: AQHVjcvJYOye0EiwZkisYK74G5bmhqd+54eAgAFKcgA= Date: Thu, 7 Nov 2019 20:06:08 +0000 Message-ID: <20191107200604.GB21728@mellanox.com> References: <20191028201032.6352-1-jgg@ziepe.ca> <20191028201032.6352-3-jgg@ziepe.ca> <35c2b322-004e-0e18-87e4-1920dc71bfd5@nvidia.com> In-Reply-To: <35c2b322-004e-0e18-87e4-1920dc71bfd5@nvidia.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: BL0PR1501CA0002.namprd15.prod.outlook.com (2603:10b6:207:17::15) To VI1PR05MB4141.eurprd05.prod.outlook.com (2603:10a6:803:44::15) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [142.162.113.180] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 689fa69c-2ee1-4f94-10df-08d763bdedcc x-ms-traffictypediagnostic: VI1PR05MB6653: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-forefront-prvs: 0214EB3F68 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(346002)(39850400004)(136003)(396003)(366004)(376002)(199004)(189003)(476003)(1076003)(6916009)(71190400001)(486006)(71200400001)(305945005)(4326008)(7736002)(25786009)(30864003)(7416002)(446003)(6246003)(5660300002)(36756003)(186003)(81166006)(8676002)(256004)(14444005)(26005)(81156014)(386003)(102836004)(11346002)(33656002)(86362001)(2906002)(66946007)(76176011)(66446008)(478600001)(2616005)(99286004)(229853002)(66476007)(316002)(6116002)(6486002)(8936002)(6506007)(14454004)(6436002)(3846002)(52116002)(64756008)(66556008)(66066001)(6512007)(54906003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR05MB6653; H:VI1PR05MB4141.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: OhxIMxuIpy97a6eE8TxWtNSzY1GNivpNQHbZMy5HgAaLZV7EjFuJJFhhRC0eSEkk23Ucrn5O6/y8uDahQtqSzMgby5NIybxB6oNl3Tiy9YpQ/HGz6LjYfXGxr+iGWymZI46KuUjyOEW/Artb2IvH838mCDoq8r/svTaI9YTzMoGfguXhtoXCRR2ZOl4cPQW4zzQnaswTnKGwLrR9BdOni57n5G2KiYnbGGwYqSbn0Rs5er02tMs9PEHo7T/ry3vJoUO2MT6fwulWLcEBzzME2jiqevWPh/jL7N29Zz0Lfa7yO93RO3mb4XY7TTNSLSLcodhCWMlcIHdfW6qsnUZNPApRfktRwlTqrwII+xDEB2VTJvyQQRQ+APx9dokWh8wQ2QUibNnfvufJ6YYEtzs6Pk2B1CDbux6O3Qrw39NEUdcxxSykQOPIvJ+iZGKXilMy x-ms-exchange-transport-forked: True Content-ID: <6113418291CBA3499D9869CD0CC8D233@eurprd05.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 689fa69c-2ee1-4f94-10df-08d763bdedcc X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Nov 2019 20:06:09.1763 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: +TuBIUtrktnBKZ6NZvy1veC+LPb7Nd6ABDYqCTCaNtlIuaUguMa6aZ8NnTlNlDmfIufFo0WoiB5EsbzpMF64bw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR05MB6653 X-Mailman-Approved-At: Fri, 08 Nov 2019 08:12:31 +0000 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KZLGtICPXHQeYMx3zwEUZ2kEBvqnlPF/xDCnKoeEU1Y=; b=jYDOc+HBZxt1WV25q8ShhQioI8qPveMDugD/wyFzOh+eQjHsx+PF5jCAKTLEC3m5Bi5ymyLIM96x9SqxS79eYhdiTQ76YSSclVoxJ/0Hfp3ckpgkI0G6Io5ZevRDAoiCEW8T8T7qjY9uIpY2bycj8Z8Hu+zqMI1gIvSB5AFl2y0= X-Mailman-Original-Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=jgg@mellanox.com; X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "nouveau@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" , Michal Hocko , "linux-mm@kvack.org" , Andrea Arcangeli , Stefano Stabellini , Oleksandr Andrushchenko , "linux-rdma@vger.kernel.org" , "amd-gfx@lists.freedesktop.org" , Christoph Hellwig , Ben Skeggs , "xen-devel@lists.xenproject.org" , Ralph Campbell , Jerome Glisse , Boris Ostrovsky , Petr Cvek , Juergen Gross , Mike Marciniszyn , Dennis Dalessandro , =?iso-8859-1?Q?Christian_K=F6nig?= , Alex Deucher , "Felix.Kuehling@amd.com" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191107200608.3epHkqfFjdAqbPwZ2crP7g4piUpCzRVj6ui6eGyUz48@z> T24gV2VkLCBOb3YgMDYsIDIwMTkgYXQgMDQ6MjM6MjFQTSAtMDgwMCwgSm9obiBIdWJiYXJkIHdy b3RlOgogCj4gTmljZSBkZXNpZ24sIEkgbG92ZSB0aGUgc2VxIGZvdW5kYXRpb24hIFNvIGZhciwg SSdtIG5vdCBhYmxlIHRvIHNwb3QgYW55dGhpbmcKPiBhY3R1YWxseSB3cm9uZyB3aXRoIHRoZSBp bXBsZW1lbnRhdGlvbiwgc29ycnkgYWJvdXQgdGhhdC4gCgpBbGFzIDooIEkgZmVlbCB0aGVyZSBt dXN0IGJlIGEgYnVnIGluIGhlcmUgc3RpbGwsIGJ1dCBvbndhcmRzIQoKT25lIG9mIHRoZSBtYWlu IHNhZCBwb2ludHMgd2FzIGl0IGRpZG4ndCBtYWtlIHNlbnNlIHRvIHVzZSB0aGUKZXhpc3Rpbmcg c2VxbG9jay9zZXFjb3VudCBwcmltaXRpdmVzIGFzIHRoZXkgaGF2ZSBib3RoIHRoZSB3cm9uZyB3 cml0ZQpjb25jdXJyYW5jeSBtb2RlbCBhbmQgZXh0cmEgYmFycmllcnMgdGhhdCBhcmUgbm90IG5l ZWRlZCB3aGVuIGl0IGlzCmFsd2F5cyBtYW5pcHVsYXRlZCB1bmRlciBhIHNwaW5sb2NrCiAKPiAx LiBUaGVyZSBpcyBhIHJhdGhlciBzZXZlcmUgbmFtaW5nIG92ZXJsYXAgKG5vdCB0ZWNobmljYWxs eSBhIG5hbWluZyBjb25mbGljdCwKPiBidXQgc3RpbGwpIHdpdGggZXhpc3RpbmcgbW1uIHdvcmss IHdoaWNoIGFscmVhZHkgaGFzLCBmb3IgZXhhbXBsZToKPiAKPiAgICAgc3RydWN0IG1tdV9ub3Rp Zmllcl9yYW5nZQo+IAo+IC4uLmFuZCB5b3UncmUgYWRkaW5nOgo+IAo+ICAgICBzdHJ1Y3QgbW11 X3JhbmdlX25vdGlmaWVyCj4gCj4gLi4uc28gSSdsbCB0cnkgdG8gaGVscCBzb3J0IHRoYXQgb3V0 LgoKWWVzLCBJJ3ZlIGJlZW4gc2FkIGFib3V0IHRoaXMgdG9vLgoKPiBTbyB0aGlzIHNob3VsZCBy ZWFkOgo+IAo+IGVudW0gbW11X3JhbmdlX25vdGlmaWVyX2V2ZW50IHsKPiAJTU1VX05PVElGWV9S RUxFQVNFLAo+IH07Cj4gCj4gLi4uYXNzdW1pbmcgdGhhdCB3ZSBzdGF5IHdpdGggIm1tdV9yYW5n ZV9ub3RpZmllciIgYXMgYSBjb3JlIG5hbWUgZm9yIHRoaXMgCj4gd2hvbGUgdGhpbmcuCj4gCj4g QWxzbywgaXQgaXMgYmVzdCBtb3ZlZCBkb3duIHRvIGJlIG5leHQgdG8gdGhlIG5ldyBNTlIgc3Ry dWN0cywgc28gdGhhdCBhbGwgdGhlCj4gTU5SIHN0dWZmIGlzIGluIG9uZSBncm91cC4KCkkgYWdy ZWUgd2l0aCBKZXJvbWUsIHRoaXMgZW51bSBpcyBwYXJ0IG9mIHRoZSAnc3RydWN0Cm1tdV9ub3Rp Zmllcl9yYW5nZScgKGllIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgaW52YWxpZGF0aW9uKSBhbmQg aXQKZG9lc24ndCByZWFsbHkgbWF0dGVyIHRoYXQgb25seSB0aGVzZSBuZXcgbm90aWZpZXJzIGNh biBiZSBjYWxsZWQgd2l0aAp0aGlzIHR5cGUsIGl0IGlzIHN0aWxsIHBhcnQgb2YgdGhlIG1tdV9u b3RpZmllcl9yYW5nZS4KClRoZSBjb21tZW50IGFscmVhZHkgc2F5cyBpdCBvbmx5IGFwcGxpZXMg dG8gdGhlIG1tdV9yYW5nZV9ub3RpZmllcgpzY2hlbWUuLgoKPiA+ICAjZGVmaW5lIE1NVV9OT1RJ RklFUl9SQU5HRV9CTE9DS0FCTEUgKDEgPDwgMCkKPiA+IEBAIC0yMjIsNiArMjI4LDI2IEBAIHN0 cnVjdCBtbXVfbm90aWZpZXIgewo+ID4gIAl1bnNpZ25lZCBpbnQgdXNlcnM7Cj4gPiAgfTsKPiA+ ICAKPiAKPiBUaGF0IHNob3VsZCBhbHNvIGJlIG1vdmVkIGRvd24sIG5leHQgdG8gdGhlIG5ldyBz dHJ1Y3RzLgoKV2hpY2ggdGhpcz8KCj4gPiArLyoqCj4gPiArICogc3RydWN0IG1tdV9yYW5nZV9u b3RpZmllcl9vcHMKPiA+ICsgKiBAaW52YWxpZGF0ZTogVXBvbiByZXR1cm4gdGhlIGNhbGxlciBt dXN0IHN0b3AgdXNpbmcgYW55IFNQVEVzIHdpdGhpbiB0aGlzCj4gPiArICogICAgICAgICAgICAg IHJhbmdlLCB0aGlzIGZ1bmN0aW9uIGNhbiBzbGVlcC4gUmV0dXJuIGZhbHNlIGlmIGJsb2NraW5n IHdhcwo+ID4gKyAqICAgICAgICAgICAgICByZXF1aXJlZCBidXQgcmFuZ2UgaXMgbm9uLWJsb2Nr aW5nCj4gPiArICovCj4gCj4gSG93IGFib3V0IHRoaXMgKEknbSBub3Qgc3VyZSBJIGZ1bGx5IHVu ZGVyc3RhbmQgdGhlIHJldHVybiB2YWx1ZSwgdGhvdWdoKToKPiAKPiAvKioKPiAgKiBzdHJ1Y3Qg bW11X3JhbmdlX25vdGlmaWVyX29wcwo+ICAqIEBpbnZhbGlkYXRlOiBVcG9uIHJldHVybiB0aGUg Y2FsbGVyIG11c3Qgc3RvcCB1c2luZyBhbnkgU1BURXMgd2l0aGluIHRoaXMKPiAgKiAJCXJhbmdl Lgo+ICAqCj4gICogCQlUaGlzIGZ1bmN0aW9uIGlzIHBlcm1pdHRlZCB0byBzbGVlcC4KPiAgKgo+ ICAqICAgICAgCUBSZXR1cm46IGZhbHNlIGlmIGJsb2NraW5nIHdhcyByZXF1aXJlZCwgYnV0IEBy YW5nZSBpcwo+ICAqCQkJbm9uLWJsb2NraW5nLgo+ICAqCj4gICovCgpJcyB0aGlzIGtkb2MgZm9y bWF0IGZvciBmdW5jdGlvbiBwb2ludGVycz8KIAo+IAo+ID4gK3N0cnVjdCBtbXVfcmFuZ2Vfbm90 aWZpZXJfb3BzIHsKPiA+ICsJYm9vbCAoKmludmFsaWRhdGUpKHN0cnVjdCBtbXVfcmFuZ2Vfbm90 aWZpZXIgKm1ybiwKPiA+ICsJCQkgICBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpy YW5nZSwKPiA+ICsJCQkgICB1bnNpZ25lZCBsb25nIGN1cl9zZXEpOwo+ID4gK307Cj4gPiArCj4g PiArc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllciB7Cj4gPiArCXN0cnVjdCBpbnRlcnZhbF90cmVl X25vZGUgaW50ZXJ2YWxfdHJlZTsKPiA+ICsJY29uc3Qgc3RydWN0IG1tdV9yYW5nZV9ub3RpZmll cl9vcHMgKm9wczsKPiA+ICsJc3RydWN0IGhsaXN0X25vZGUgZGVmZXJyZWRfaXRlbTsKPiA+ICsJ dW5zaWduZWQgbG9uZyBpbnZhbGlkYXRlX3NlcTsKPiA+ICsJc3RydWN0IG1tX3N0cnVjdCAqbW07 Cj4gPiArfTsKPiA+ICsKPiAKPiBBZ2Fpbiwgbm93IHdlIGhhdmUgdGhlIG5ldyBzdHJ1Y3QgbW11 X3JhbmdlX25vdGlmaWVyLCBhbmQgdGhlIG9sZCAKPiBzdHJ1Y3QgbW11X25vdGlmaWVyX3Jhbmdl LCBhbmQgaXQncyBub3QgZ29vZC4KPiAKPiBJZGVhczoKPiAKPiBhKSBMaXZlIHdpdGggaXQuCj4g Cj4gYikgKERpc2NhcmRlZCwgdG9vIG1hbnkgY2FsbGVycyk6IHJlbmFtZSBvbGQgb25lLiBOb3Bl Lgo+IAo+IGMpIFJlbmFtZSBuZXcgb25lLiBJZGVhczoKPiAKPiAgICAgc3RydWN0IG1tdV9pbnRl cnZhbF9ub3RpZmllcgo+ICAgICBzdHJ1Y3QgbW11X3JhbmdlX2ludGVyc2VjdGlvbgo+ICAgICAu Li5vdGhlciBpZGVhcz8KClRoaXMgb2RkIGR1YWxpdHkgaGFzIGFscmVhZHkgY2F1c2Ugc29tZSBj b25mdXNpb24sIGJ1dCBuYW1lcyBoZXJlIGFyZQpoYXJkLiAgbW11X2ludGVydmFsX25vdGlmaWVy IGlzIHRoZSBiZXN0IGFsdGVybmF0aXZlIEkndmUgaGVhcmQuCgpDaGFuZ2luZyB0aGlzIG5hbWUg aXMgYSBsb3Qgb2Ygd29yayAtIGFyZSB3ZSBoYXBweQonbW11X2ludGVydmFsX25vdGlmaWVyJyBp cyB0aGUgcmlnaHQgY2hvaWNlPwoKPiA+ICsvKioKPiA+ICsgKiBtbXVfcmFuZ2Vfc2V0X3NlcSAt IFNhdmUgdGhlIGludmFsaWRhdGlvbiBzZXF1ZW5jZQo+IAo+IEhvdyBhYm91dDoKPiAKPiAgKiBt bXVfcmFuZ2Vfc2V0X3NlcSAtIFNldCB0aGUgLmludmFsaWRhdGVfc2VxIHRvIGEgbmV3IHZhbHVl LgoKSXQgaXMgbm90IGEgJ25ldyB2YWx1ZScsIGl0IGlzIGEgdmFsdWUgdGhhdCBpcyBwcm92aWRl ZCB0byB0aGUKaW52YWxpZGF0ZSBjYWxsYmFjawoKPiAKPiA+ICsgKiBAbXJuIC0gVGhlIG1ybiBw YXNzZWQgdG8gaW52YWxpZGF0ZQo+ID4gKyAqIEBjdXJfc2VxIC0gVGhlIGN1cl9zZXEgcGFzc2Vk IHRvIGludmFsaWRhdGUKPiA+ICsgKgo+ID4gKyAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgdW5jb25k aXRpb25hbGx5IGZyb20gdGhlIGludmFsaWRhdGUgY2FsbGJhY2sgb2YgYQo+ID4gKyAqIHN0cnVj dCBtbXVfcmFuZ2Vfbm90aWZpZXJfb3BzIHVuZGVyIHRoZSBzYW1lIGxvY2sgdGhhdCBpcyB1c2Vk IHRvIGNhbGwKPiA+ICsgKiBtbXVfcmFuZ2VfcmVhZF9yZXRyeSgpLiBJdCB1cGRhdGVzIHRoZSBz ZXF1ZW5jZSBudW1iZXIgZm9yIGxhdGVyIHVzZSBieQo+ID4gKyAqIG1tdV9yYW5nZV9yZWFkX3Jl dHJ5KCkuCj4gPiArICoKPiA+ICsgKiBJZiB0aGUgdXNlciBkb2VzIG5vdCBjYWxsIG1tdV9yYW5n ZV9yZWFkX2JlZ2luKCkgb3IgbW11X3JhbmdlX3JlYWRfcmV0cnkoKQo+IAo+IG5pdDogImNhbGxl ciIgaXMgYmV0dGVyIHRoYW4gInVzZXIiLCB3aGVuIHJlZmVycmluZyB0by4uLndlbGwsIGNhbGxl cnMuICJ1c2VyIiAKPiBtb3N0IG9mdGVuIHJlZmVycyB0byB1c2VyIHNwYWNlLCB3aGVyZWFzIGEg Y2FsbCBzdGFjayBhbmQgZnVuY3Rpb24gY2FsbGluZyBpcyAKPiBjbGVhcmx5IHdoYXQgeW91J3Jl IHJlZmVycmluZyB0byBoZXJlIChhbmQgaW4gb3RoZXIgcGxhY2VzLCBlc3BlY2lhbGx5ICJ1c2Vy IGxvY2siKS4KCkRvbmUKCj4gPiArLyoqCj4gPiArICogbW11X3JhbmdlX2NoZWNrX3JldHJ5IC0g VGVzdCBpZiBhIGNvbGxpc2lvbiBoYXMgb2NjdXJyZWQKPiA+ICsgKiBtcm46IFRoZSByYW5nZSB1 bmRlciBsb2NrCj4gPiArICogc2VxOiBUaGUgcmV0dXJuIG9mIHRoZSBtYXRjaGluZyBtbXVfcmFu Z2VfcmVhZF9iZWdpbigpCj4gPiArICoKPiA+ICsgKiBUaGlzIGNhbiBiZSB1c2VkIGluIHRoZSBj cml0aWNhbCBzZWN0aW9uIGJldHdlZW4gbW11X3JhbmdlX3JlYWRfYmVnaW4oKSBhbmQKPiA+ICsg KiBtbXVfcmFuZ2VfcmVhZF9yZXRyeSgpLiAgQSByZXR1cm4gb2YgdHJ1ZSBpbmRpY2F0ZXMgYW4g aW52YWxpZGF0aW9uIGhhcwo+ID4gKyAqIGNvbGxpZGVkIHdpdGggdGhpcyBsb2NrIGFuZCBhIGZ1 dHVyZSBtbXVfcmFuZ2VfcmVhZF9yZXRyeSgpIHdpbGwgcmV0dXJuCj4gPiArICogdHJ1ZS4KPiA+ ICsgKgo+ID4gKyAqIEZhbHNlIGlzIG5vdCByZWxpYWJsZSBhbmQgb25seSBzdWdnZXN0cyBhIGNv bGxpc2lvbiBoYXMgbm90IGhhcHBlbmVkLiBJdAo+IAo+IGxldCdzIHNheSAic3VnZ2VzdHMgdGhh dCBhIGNvbGxpc2lvbiAqbWF5KiBub3QgaGF2ZSBvY2N1cnJlZC4iICAKClN1cmUKCj4gPiArLyoK PiA+ICsgKiBUaGlzIGlzIGEgY29sbGlzaW9uLXJldHJ5IHJlYWQtc2lkZS93cml0ZS1zaWRlICds b2NrJywgYSBsb3QgbGlrZSBhCj4gPiArICogc2VxY291bnQsIGhvd2V2ZXIgdGhpcyBhbGxvd3Mg bXVsdGlwbGUgd3JpdGUtc2lkZXMgdG8gaG9sZCBpdCBhdAo+ID4gKyAqIG9uY2UuIENvbmNlcHR1 YWxseSB0aGUgd3JpdGUgc2lkZSBpcyBwcm90ZWN0aW5nIHRoZSB2YWx1ZXMgb2YgdGhlIFBURXMg aW4KPiA+ICsgKiB0aGlzIG1tLCBzdWNoIHRoYXQgUFRFUyBjYW5ub3QgYmUgcmVhZCBpbnRvIFNQ VEVzIHdoaWxlIGFueSB3cml0ZXIgZXhpc3RzLgo+IAo+IEp1c3QgdG8gYmUga2luZCwgY2FuIHdl IHNheSAiU1BURXMgKHNoYWRvdyBQVEVzKSIsIGp1c3QgdGhpcyBvbmNlPyA6KQoKSGFoYSwgc3Vy ZSwgd2h5IG5vdAoKPiA+ICsgKiBUaGUgd3JpdGUgc2lkZSBoYXMgdHdvIHN0YXRlcywgZnVsbHkg ZXhjbHVkZWQ6Cj4gPiArICogIC0gbW0tPmFjdGl2ZV9pbnZhbGlkYXRlX3JhbmdlcyAhPSAwCj4g PiArICogIC0gbW5uLT5pbnZhbGlkYXRlX3NlcSAmIDEgPT0gVHJ1ZQo+ID4gKyAqICAtIHNvbWUg cmFuZ2Ugb24gdGhlIG1tX3N0cnVjdCBpcyBiZWluZyBpbnZhbGlkYXRlZAo+ID4gKyAqICAtIHRo ZSBpdHJlZSBpcyBub3QgYWxsb3dlZCB0byBjaGFuZ2UKPiA+ICsgKgo+ID4gKyAqIEFuZCBwYXJ0 aWFsbHkgZXhjbHVkZWQ6Cj4gPiArICogIC0gbW0tPmFjdGl2ZV9pbnZhbGlkYXRlX3JhbmdlcyAh PSAwCj4gCj4gSSBhc3N1bWUgdGhpcyBpbXBsaWVzIG1ubi0+aW52YWxpZGF0ZV9zZXEgJiAxID09 IEZhbHNlIGluIHRoaXMgY2FzZT8gSWYgc28sCj4gbGV0J3Mgc2F5IHNvLiBJJ20gcHJvYmFibHkg Z2V0dGluZyB0aGF0IHdyb25nLCB0b28uCgpZZXMgdGhhdCBpcyByaWdodCwgZG9uZQoKPiAKPiA+ ICsgKiAgLSBzb21lIHJhbmdlIG9uIHRoZSBtbV9zdHJ1Y3QgaXMgYmVpbmcgaW52YWxpZGF0ZWQK PiA+ICsgKiAgLSB0aGUgaXRyZWUgaXMgYWxsb3dlZCB0byBjaGFuZ2UKPiA+ICsgKgo+ID4gKyAq IFRoZSBsYXRlciBzdGF0ZSBhdm9pZHMgc29tZSBleHBlbnNpdmUgd29yayBvbiBpbnZfZW5kIGlu IHRoZSBjb21tb24gY2FzZSBvZgo+ID4gKyAqIG5vIG1ybiBtb25pdG9yaW5nIHRoZSBWQS4KPiA+ ICsgKi8KPiA+ICtzdGF0aWMgYm9vbCBtbl9pdHJlZV9pc19pbnZhbGlkYXRpbmcoc3RydWN0IG1t dV9ub3RpZmllcl9tbSAqbW1uX21tKQo+ID4gK3sKPiA+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgm bW1uX21tLT5sb2NrKTsKPiA+ICsJcmV0dXJuIG1tbl9tbS0+aW52YWxpZGF0ZV9zZXEgJiAxOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllciAqCj4gPiAr bW5faXRyZWVfaW52X3N0YXJ0X3JhbmdlKHN0cnVjdCBtbXVfbm90aWZpZXJfbW0gKm1tbl9tbSwK PiA+ICsJCQkgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UsCj4gPiArCQkJ IHVuc2lnbmVkIGxvbmcgKnNlcSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBpbnRlcnZhbF90cmVlX25v ZGUgKm5vZGU7Cj4gPiArCXN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKnJlcyA9IE5VTEw7Cj4g PiArCj4gPiArCXNwaW5fbG9jaygmbW1uX21tLT5sb2NrKTsKPiA+ICsJbW1uX21tLT5hY3RpdmVf aW52YWxpZGF0ZV9yYW5nZXMrKzsKPiA+ICsJbm9kZSA9IGludGVydmFsX3RyZWVfaXRlcl9maXJz dCgmbW1uX21tLT5pdHJlZSwgcmFuZ2UtPnN0YXJ0LAo+ID4gKwkJCQkJcmFuZ2UtPmVuZCAtIDEp Owo+ID4gKwlpZiAobm9kZSkgewo+ID4gKwkJbW1uX21tLT5pbnZhbGlkYXRlX3NlcSB8PSAxOwo+ IAo+IAo+IE9LLCB0aGlzIGVpdGhlciBuZWVkcyBtb3JlIGRvY3VtZW50YXRpb24gYW5kIGFzc2Vy dGlvbnMsIG9yIGEgZGlmZmVyZW50Cj4gYXBwcm9hY2guIEJlY2F1c2UgSSBzZWUgYWRkaXRpb24s IHN1YnRyYWN0aW9uLCBBTkQsIE9SIGFuZCBib29sZWFucwo+IGFsbCBiZWluZyBhcHBsaWVkIHRv IHRoaXMgZmllbGQsIGFuZCBpdCdzIGRhcm4gbmVhciBob3BlbGVzcyB0byBmaWd1cmUKPiBvdXQg d2hldGhlciBvciBub3QgaXQgcmVhbGx5IGlzIGV2ZW4gb3Igb2RkIGF0IHRoZSByaWdodCB0aW1l cy4KClRoaXMgaXMgYSBzdGFuZGFyZCBkZXNpZ24gZm9yIGEgc2VxbG9jayBzY2hlbWUgYW5kIGZv bGxvd3MgdGhlCmV4aXN0aW5nIGRlc2lnbiBvZiB0aGUgbGludXggc2VxIGxvY2suCgpUaGUgbG93 ZXIgYml0IGluZGljYXRlcyB0aGUgbG9jaydkIHN0YXRlIGFuZCB0aGUgdXBwZXIgYml0cyBpbmRp Y2F0ZQp0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgbG9jawoKVGhlIG9wZXJhdGlvbnMgb24gdGhlIGxv Y2sgaXRzZWxmIGFyZSB0aGVuOgogICBzZXEgfD0gMSAgIyBUYWtlIHRoZSBsb2NrCiAgIHNlcSsr ICAgICAjIFJlbGVhc2UgYW4gYWNxdWlyZWQgbG9jawogICBzZXEgJiAxICAgIyBUcnVlIGlmIGxv Y2tlZAoKV2hpY2ggaXMgaG93IHRoaXMgaXMgd3JpdHRlbgoKPiBEaWZmZXJlbnQgYXBwcm9hY2g6 IHdoeSBub3QganVzdCBhZGQgYSBtbW5fbW0tPmlzX2ludmFsaWRhdGluZyAKPiBtZW1iZXIgdmFy aWFibGU/IEl0J3Mgbm90IGxpa2UgeW91J3JlIHNob3J0IG9mIHNwYWNlIGluIHRoYXQgc3RydWN0 LgoKU3BsaXR0aW5nIGl0IG1ha2VzIGFsb3Qgb2Ygc3R1ZmYgbW9yZSBjb21wbGV4IGFuZCB1bm5h dHVyYWwuCgpUaGUgb3BzIGFib3ZlIGNvdWxkIGJlIHB1dCBpbiBpbmxpbmUgd3JhcHBlcnMsIGJ1 dCB0aGV5IG9ubHkgb2NjdXIKb25seSBpbiBmdW5jdGlvbnMgYWxyZWFkeSBjYWxsZWQgbW5faXRy ZWVfaW52X3N0YXJ0X3JhbmdlKCkgYW5kCm1uX2l0cmVlX2ludl9lbmQoKSBhbmQgbW5faXRyZWVf aXNfaW52YWxpZGF0aW5nKCkuCgpUaGVyZSBpcyB0aGUgb25lICd0YWtlIHRoZSBsb2NrJyBvdXRs aWVyIGluCl9fbW11X3JhbmdlX25vdGlmaWVyX2luc2VydCgpIHRob3VnaAoKPiA+ICtzdGF0aWMg dm9pZCBtbl9pdHJlZV9pbnZfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXJfbW0gKm1tbl9tbSkKPiA+ ICt7Cj4gPiArCXN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm1ybjsKPiA+ICsJc3RydWN0IGhs aXN0X25vZGUgKm5leHQ7Cj4gPiArCWJvb2wgbmVlZF93YWtlID0gZmFsc2U7Cj4gPiArCj4gPiAr CXNwaW5fbG9jaygmbW1uX21tLT5sb2NrKTsKPiA+ICsJaWYgKC0tbW1uX21tLT5hY3RpdmVfaW52 YWxpZGF0ZV9yYW5nZXMgfHwKPiA+ICsJICAgICFtbl9pdHJlZV9pc19pbnZhbGlkYXRpbmcobW1u X21tKSkgewo+ID4gKwkJc3Bpbl91bmxvY2soJm1tbl9tbS0+bG9jayk7Cj4gPiArCQlyZXR1cm47 Cj4gPiArCX0KPiA+ICsKPiA+ICsJbW1uX21tLT5pbnZhbGlkYXRlX3NlcSsrOwo+IAo+IElzIHRo aXMgdGhlIHJpZ2h0IHBsYWNlIGZvciBhbiBhc3NlcnRpb24gdGhhdCB0aGlzIGlzIG5vdyBhbiBl dmVuIHZhbHVlPwoKWWVzLCBidXQgSSdtIHJlbHVjdGFudCB0byBhZGQgc3VjaCBhIHJ1bnRpbWUg Y2hlY2sgb24gdGhpcyBmYXN0aXNoIHBhdGguLgpIb3cgYWJvdXQgYSBjb21tZW50PwoKPiA+ICsJ bmVlZF93YWtlID0gdHJ1ZTsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogVGhlIGludl9lbmQgaW5j b3Jwb3JhdGVzIGEgZGVmZXJyZWQgbWVjaGFuaXNtIGxpa2UKPiA+ICsJICogcnRubF9sb2NrKCku IEFkZHMgYW5kIHJlbW92ZXMgYXJlIHF1ZXVlZCB1bnRpbCB0aGUgZmluYWwgaW52X2VuZAo+IAo+ IExldCBtZSBwb2ludCBvdXQgdGhhdCBydG5sX2xvY2soKSBpdHNlbGYgaXMgYSBvbmUtbGluZXIg dGhhdCBjYWxscyBtdXRleF9sb2NrKCkuCj4gQnV0IEkgc3VwcG9zZSBpZiBvbmUgc3R1ZGllcyB0 aGF0IGZpbGUgY2xvc2VseSB0aGVyZSBpcyBtb3JlLiA6KQoKTGV0cyBjaGFuZ2UgdGhhdCB0byBy dG5sX3VubG9jaygpIHRoZW4KCj4gPiArCXNwaW5fbG9jaygmbW1uX21tLT5sb2NrKTsKPiA+ICsJ LyogUGFpcnMgd2l0aCB0aGUgV1JJVEVfT05DRSBpbiBtbXVfcmFuZ2Vfc2V0X3NlcSgpICovCj4g PiArCXNlcSA9IFJFQURfT05DRShtcm4tPmludmFsaWRhdGVfc2VxKTsKPiA+ICsJaXNfaW52YWxp ZGF0aW5nID0gc2VxID09IG1tbl9tbS0+aW52YWxpZGF0ZV9zZXE7Cj4gPiArCXNwaW5fdW5sb2Nr KCZtbW5fbW0tPmxvY2spOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBtcm4tPmludmFsaWRhdGVf c2VxIGlzIGFsd2F5cyBzZXQgdG8gYW4gb2RkIHZhbHVlLiBUaGlzIGVuc3VyZXMKPiAKPiBUaGlz IGNsYWltIGp1c3QgbG9va3Mgd3JvbmcgdGhlIGZpcnN0IE4gdGltZXMgb25lIHJlYWRzIHRoZSBj b2RlLCBnaXZlbiB0aGF0Cj4gdGhlcmUgaXMgbW11X3JhbmdlX3NldF9zZXEoKSB0byBzZXQgaXQg dG8gYW4gYXJiaXRyYXJ5IHZhbHVlISAgTWF5YmUKPiB5b3UgbWVhbgoKbW11X3JhbmdlX3NldF9z ZXEoKSBpcyBOT1QgdG8gYmUgdXNlZCB0byBzZXQgdG8gYW4gYXJiaXRhcnkgdmFsdWUsIGl0Cm11 c3Qgb25seSBiZSB1c2VkIHRvIHNldCB0byB0aGUgdmFsdWUgcHJvdmlkZWQgaW4gdGhlIGludmFs aWRhdGUoKQpjYWxsYmFjayBhbmQgdGhhdCB2YWx1ZSBpcyBhbHdheXMgb2RkLiBMZXRzIG1ha2Ug dGhpcyBzdXBlciBjbGVhcjoKCgkvKgoJICogbXJuLT5pbnZhbGlkYXRlX3NlcSBtdXN0IGFsd2F5 cyBiZSBzZXQgdG8gYW4gb2RkIHZhbHVlIHZpYQoJICogbW11X3JhbmdlX3NldF9zZXEoKSB1c2lu ZyB0aGUgcHJvdmlkZWQgY3VyX3NlcSBmcm9tCgkgKiBtbl9pdHJlZV9pbnZfc3RhcnRfcmFuZ2Uo KS4gVGhpcyBlbnN1cmVzIHRoYXQgaWYgc2VxIGRvZXMgd3JhcCB3ZQoJICogd2lsbCBhbHdheXMg Y2xlYXIgdGhlIGJlbG93IHNsZWVwIGluIHNvbWUgcmVhc29uYWJsZSB0aW1lIGFzCgkgKiBtbW5f bW0tPmludmFsaWRhdGVfc2VxIGlzIGV2ZW4gaW4gdGhlIGlkbGUgc3RhdGUuCgkgKi8KClRoZSBp bnZhcmllbnQgaXMgdGhhdCB0aGUgJ3N0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXInIGFsd2F5cyBo YXMgYW4Kb2RkICdzZXEnCgo+ID4gKwkgKiB0aGF0IGlmIHNlcSBkb2VzIHdyYXAgd2Ugd2lsbCBh bHdheXMgY2xlYXIgdGhlIGJlbG93IHNsZWVwIGluIHNvbWUKPiA+ICsJICogcmVhc29uYWJsZSB0 aW1lIGFzIG1tbl9tbS0+aW52YWxpZGF0ZV9zZXEgaXMgZXZlbiBpbiB0aGUgaWRsZQo+ID4gKwkg KiBzdGF0ZS4KPiA+ICsJICovCj4gCj4gTGV0J3MgbW92ZSB0aGF0IGNvbW1lbnQgaGlnaGVyIHVw LiBUaGUgY29kZSB0aGF0IGZvbGxvd3MgaXQgaGFzIG5vdGhpbmcgdG8KPiBkbyB3aXRoIGl0LCBz byBpdCdzIGNvbmZ1c2luZyBoZXJlLgoKVGhlIGNvbW1lbnQgaXMgZXhwbGFpbmluZyB3aHkgdGhl IHdhaXRfZXZlbnQgaXMgc2FmZSwgZXZlbiBpZiB3ZSB3cmFwCnRoZSBzZXF1ZW5jZSBudW1iZXIs IHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgYW5kIHZlcnkgc3VidGxlIGNvcm5lcgpjYXNlLiBUaGlz IGlzIHJlYWxseSB3aHkgd2UgaGF2ZSB0aGUgZXZlbi9vZGQgdGhpbmcgYXQgYWxsLgoKPiA+ICsJ c3Bpbl9sb2NrKCZtbW5fbW0tPmxvY2spOwo+ID4gKwlpZiAobW1uX21tLT5hY3RpdmVfaW52YWxp ZGF0ZV9yYW5nZXMpIHsKPiA+ICsJCWlmIChtbl9pdHJlZV9pc19pbnZhbGlkYXRpbmcobW1uX21t KSkKPiA+ICsJCQlobGlzdF9hZGRfaGVhZCgmbXJuLT5kZWZlcnJlZF9pdGVtLAo+ID4gKwkJCQkg ICAgICAgJm1tbl9tbS0+ZGVmZXJyZWRfbGlzdCk7Cj4gPiArCQllbHNlIHsKPiA+ICsJCQltbW5f bW0tPmludmFsaWRhdGVfc2VxIHw9IDE7Cj4gPiArCQkJaW50ZXJ2YWxfdHJlZV9pbnNlcnQoJm1y bi0+aW50ZXJ2YWxfdHJlZSwKPiA+ICsJCQkJCSAgICAgJm1tbl9tbS0+aXRyZWUpOwo+ID4gKwkJ fQo+ID4gKwkJbXJuLT5pbnZhbGlkYXRlX3NlcSA9IG1tbl9tbS0+aW52YWxpZGF0ZV9zZXE7Cj4g PiArCX0gZWxzZSB7Cj4gPiArCQlXQVJOX09OKG1uX2l0cmVlX2lzX2ludmFsaWRhdGluZyhtbW5f bW0pKTsKPiA+ICsJCW1ybi0+aW52YWxpZGF0ZV9zZXEgPSBtbW5fbW0tPmludmFsaWRhdGVfc2Vx IC0gMTsKPiAKPiBPaGhoLCBjaGVja21hdGUuIEkgbG9zZS4gV2h5IGlzICpzdWJ0cmFjdGluZyog dGhlIHJpZ2h0IHRoaW5nIHRvIGRvCj4gZm9yIHNlcSBudW1iZXJzIGhlcmU/ICBJJ20gYWN1dGVs eSB1bmhhcHB5IHRyeWluZyB0byBmaWd1cmUgdGhpcyBvdXQuCj4gSSBzdXNwZWN0IGl0J3MgYW5v dGhlciB1bmZvcnR1bmF0ZSBzaWRlIGVmZmVjdCBvZiB0cnlpbmcgdG8gdXNlIHRoZQo+IGxvd2Vy IGJpdCBvZiB0aGUgc2VxIG51bWJlciAoZXZlbi9vZGQpIGZvciBzb21ldGhpbmcgZWxzZS4KCk5v LCB0aGlzIGlzIGFjdHVhbGx5IGRvbmUgZm9yIHRoZSBzZXEgbnVtYmVyIGl0c2VsZi4gV2UgbmVl ZCB0bwpnZW5lcmF0ZSBhIHNlcSBudW1iZXIgdGhhdCBpcyAhPSB0aGUgY3VycmVudCBpbnZhbGlk YXRlX3NlcSBhcyB0aGlzCm5ldyBtcm4gaXMgbm90IGludmFsaWRhdGluZy4KClRoZSBiZXN0IHNl cSB0byB1c2UgaXMgb25lIHRoYXQgdGhlIGludmFsaWRhdGVfc2VxIHdpbGwgbm90IHJlYWNoIGZv cgphIGxvbmcgdGltZSwgaWUgJ2ludmFsaWRhdGVfc2VxICsgTUFYJyB3aGljaCBpcyBleHByZXNz ZWQgYXMgLTEKClRoZSBldmVuL29kZCB0aGluZyBqdXN0IHRha2VzIGNhcmUgb2YgaXRzZWxmIG5h dHVyYWxseSBoZXJlIGFzCmludmFsaWRhdGVfc2VxIGlzIGd1YXJlbnRlZWQgZXZlbiBhbmQgLTEg Y3JlYXRlcyBib3RoIGFuIG9kZCBtcm4gdmFsdWUKYW5kIGEgZ29vZCBzZXEgbnVtYmVyLgoKVGhl IGFsZ29yaXRobSB3b3VsZCBhY3R1YWxseSB3b3JrIGNvcnJlY3RseSBpZiB0aGlzIHdhcwonbXJu LT5pbnZhbGlkYXRlX3NlcSA9IDEnLCBidXQgb2NjYXNpb25hbGx5IHRoaW5ncyB3b3VsZCBibG9j ayB3aGVuCnRoZXkgZG9uJ3QgbmVlZCB0byBibG9jay4KCkxldHMgYWRkIGEgY29tbWVudDoKCgkJ LyoKCQkgKiBUaGUgc3RhcnRpbmcgc2VxIGZvciBhIG1ybiBub3QgdW5kZXIgaW52YWxpZGF0aW9u IHNob3VsZCBiZQoJCSAqIG9kZCwgbm90IGVxdWFsIHRvIHRoZSBjdXJyZW50IGludmFsaWRhdGVf c2VxIGFuZAoJCSAqIGludmFsaWRhdGVfc2VxIHNob3VsZCBub3QgJ3dyYXAnIHRvIHRoZSBuZXcg c2VxIGFueSB0aW1lCgkJICogc29vbi4KCQkgKi8KCj4gPiAraW50IG1tdV9yYW5nZV9ub3RpZmll cl9pbnNlcnQoc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllciAqbXJuLAo+ID4gKwkJCSAgICAgIHVu c2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLAo+ID4gKwkJCSAgICAgIHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tKQo+ID4gK3sKPiA+ICsJc3RydWN0IG1tdV9ub3RpZmllcl9tbSAq bW1uX21tOwo+ID4gKwlpbnQgcmV0Owo+IAo+IEhtbW0sIEkgdGhpbmsgYSBsYXRlciBwYXRjaCBp bXByb3Blcmx5IGNoYW5nZXMgdGhlIGFib3ZlIHRvICJpbnQgcmV0ID0gMDsiLgo+IEknbGwgY2hl Y2sgb24gdGhhdC4gSXQncyBjb3JyZWN0IGhlcmUsIHRob3VnaC4KCkxvb2tzIE9LIGluIG15IHRy ZWU/Cgo+ID4gKwltaWdodF9sb2NrKCZtbS0+bW1hcF9zZW0pOwo+ID4gKwo+ID4gKwltbW5fbW0g PSBzbXBfbG9hZF9hY3F1aXJlKCZtbS0+bW11X25vdGlmaWVyX21tKTsKPiAKPiBXaGF0IGRvZXMg dGhlIGFib3ZlIHBhaXIgd2l0aD8gU2hvdWxkIGhhdmUgYSBjb21tZW50IHRoYXQgc3BlY2lmaWVz IHRoYXQuCgpzbXBfbG9hZF9hY3F1aXJlKCkgYWx3YXlzIHBhaXJzIHdpdGggc21wX3N0b3JlX3Jl bGVhc2UoKSB0byB0aGUgc2FtZQptZW1vcnksIHRoZXJlIGlzIG9ubHkgb25lIHN0b3JlLCBpcyBh IGNvbW1lbnQgcmVhbGx5IG5lZWRlZD8KCkJlbG93IGFyZSB0aGUgY29tbWVudCB1cGRhdGVzIEkg bWFkZSwgdGhhbmtzIQoKSmFzb24KCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tdV9ub3Rp Zmllci5oIGIvaW5jbHVkZS9saW51eC9tbXVfbm90aWZpZXIuaAppbmRleCA1MWI5MmJhMDEzZGRj ZS4uMDY1Yzk1MDAyZTk2MDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW11X25vdGlmaWVy LmgKKysrIGIvaW5jbHVkZS9saW51eC9tbXVfbm90aWZpZXIuaApAQCAtMzAyLDE1ICszMDIsMTUg QEAgdm9pZCBtbXVfcmFuZ2Vfbm90aWZpZXJfcmVtb3ZlKHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZp ZXIgKm1ybik7CiAvKioKICAqIG1tdV9yYW5nZV9zZXRfc2VxIC0gU2F2ZSB0aGUgaW52YWxpZGF0 aW9uIHNlcXVlbmNlCiAgKiBAbXJuIC0gVGhlIG1ybiBwYXNzZWQgdG8gaW52YWxpZGF0ZQotICog QGN1cl9zZXEgLSBUaGUgY3VyX3NlcSBwYXNzZWQgdG8gaW52YWxpZGF0ZQorICogQGN1cl9zZXEg LSBUaGUgY3VyX3NlcSBwYXNzZWQgdG8gdGhlIGludmFsaWRhdGUoKSBjYWxsYmFjawogICoKICAq IFRoaXMgbXVzdCBiZSBjYWxsZWQgdW5jb25kaXRpb25hbGx5IGZyb20gdGhlIGludmFsaWRhdGUg Y2FsbGJhY2sgb2YgYQogICogc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllcl9vcHMgdW5kZXIgdGhl IHNhbWUgbG9jayB0aGF0IGlzIHVzZWQgdG8gY2FsbAogICogbW11X3JhbmdlX3JlYWRfcmV0cnko KS4gSXQgdXBkYXRlcyB0aGUgc2VxdWVuY2UgbnVtYmVyIGZvciBsYXRlciB1c2UgYnkKLSAqIG1t dV9yYW5nZV9yZWFkX3JldHJ5KCkuCisgKiBtbXVfcmFuZ2VfcmVhZF9yZXRyeSgpLiBUaGUgcHJv dmlkZWQgY3VyX3NlcSB3aWxsIGFsd2F5cyBiZSBvZGQuCiAgKgotICogSWYgdGhlIHVzZXIgZG9l cyBub3QgY2FsbCBtbXVfcmFuZ2VfcmVhZF9iZWdpbigpIG9yIG1tdV9yYW5nZV9yZWFkX3JldHJ5 KCkKLSAqIHRoZW4gdGhpcyBjYWxsIGlzIG5vdCByZXF1aXJlZC4KKyAqIElmIHRoZSBjYWxsZXIg ZG9lcyBub3QgY2FsbCBtbXVfcmFuZ2VfcmVhZF9iZWdpbigpIG9yCisgKiBtbXVfcmFuZ2VfcmVh ZF9yZXRyeSgpIHRoZW4gdGhpcyBjYWxsIGlzIG5vdCByZXF1aXJlZC4KICAqLwogc3RhdGljIGlu bGluZSB2b2lkIG1tdV9yYW5nZV9zZXRfc2VxKHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm1y biwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgY3VyX3NlcSkKQEAgLTM0OCw4ICszNDgsOSBAQCBz dGF0aWMgaW5saW5lIGJvb2wgbW11X3JhbmdlX3JlYWRfcmV0cnkoc3RydWN0IG1tdV9yYW5nZV9u b3RpZmllciAqbXJuLAogICogY29sbGlkZWQgd2l0aCB0aGlzIGxvY2sgYW5kIGEgZnV0dXJlIG1t dV9yYW5nZV9yZWFkX3JldHJ5KCkgd2lsbCByZXR1cm4KICAqIHRydWUuCiAgKgotICogRmFsc2Ug aXMgbm90IHJlbGlhYmxlIGFuZCBvbmx5IHN1Z2dlc3RzIGEgY29sbGlzaW9uIGhhcyBub3QgaGFw cGVuZWQuIEl0Ci0gKiBjYW4gYmUgY2FsbGVkIG1hbnkgdGltZXMgYW5kIGRvZXMgbm90IGhhdmUg dG8gaG9sZCB0aGUgdXNlciBwcm92aWRlZCBsb2NrLgorICogRmFsc2UgaXMgbm90IHJlbGlhYmxl IGFuZCBvbmx5IHN1Z2dlc3RzIGEgY29sbGlzaW9uIG1heSBub3QgaGF2ZQorICogb2NjdXJlZC4g SXQgY2FuIGJlIGNhbGxlZCBtYW55IHRpbWVzIGFuZCBkb2VzIG5vdCBoYXZlIHRvIGhvbGQgdGhl IHVzZXIKKyAqIHByb3ZpZGVkIGxvY2suCiAgKgogICogVGhpcyBjYWxsIGNhbiBiZSB1c2VkIGFz IHBhcnQgb2YgbG9vcHMgYW5kIG90aGVyIGV4cGVuc2l2ZSBvcGVyYXRpb25zIHRvCiAgKiBleHBl ZGl0ZSBhIHJldHJ5LgpkaWZmIC0tZ2l0IGEvbW0vbW11X25vdGlmaWVyLmMgYi9tbS9tbXVfbm90 aWZpZXIuYwppbmRleCAyYjc0ODU5MTllY2ZlYi4uYWZlMWUyZDk0MTgzZjggMTAwNjQ0Ci0tLSBh L21tL21tdV9ub3RpZmllci5jCisrKyBiL21tL21tdV9ub3RpZmllci5jCkBAIC01MSw3ICs1MSw4 IEBAIHN0cnVjdCBtbXVfbm90aWZpZXJfbW0gewogICogVGhpcyBpcyBhIGNvbGxpc2lvbi1yZXRy eSByZWFkLXNpZGUvd3JpdGUtc2lkZSAnbG9jaycsIGEgbG90IGxpa2UgYQogICogc2VxY291bnQs IGhvd2V2ZXIgdGhpcyBhbGxvd3MgbXVsdGlwbGUgd3JpdGUtc2lkZXMgdG8gaG9sZCBpdCBhdAog ICogb25jZS4gQ29uY2VwdHVhbGx5IHRoZSB3cml0ZSBzaWRlIGlzIHByb3RlY3RpbmcgdGhlIHZh bHVlcyBvZiB0aGUgUFRFcyBpbgotICogdGhpcyBtbSwgc3VjaCB0aGF0IFBURVMgY2Fubm90IGJl IHJlYWQgaW50byBTUFRFcyB3aGlsZSBhbnkgd3JpdGVyIGV4aXN0cy4KKyAqIHRoaXMgbW0sIHN1 Y2ggdGhhdCBQVEVTIGNhbm5vdCBiZSByZWFkIGludG8gU1BURXMgKHNoYWRvdyBQVEVzKSB3aGls ZSBhbnkKKyAqIHdyaXRlciBleGlzdHMuCiAgKgogICogTm90ZSB0aGF0IHRoZSBjb3JlIG1tIGNy ZWF0ZXMgbmVzdGVkIGludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKS9lbmQoKSByZWdpb25zCiAgKiB3 aXRoaW4gdGhlIHNhbWUgdGhyZWFkLCBhbmQgcnVucyBpbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KCkv ZW5kKCkgaW4gcGFyYWxsZWwKQEAgLTY0LDEyICs2NSwxMyBAQCBzdHJ1Y3QgbW11X25vdGlmaWVy X21tIHsKICAqCiAgKiBUaGUgd3JpdGUgc2lkZSBoYXMgdHdvIHN0YXRlcywgZnVsbHkgZXhjbHVk ZWQ6CiAgKiAgLSBtbS0+YWN0aXZlX2ludmFsaWRhdGVfcmFuZ2VzICE9IDAKLSAqICAtIG1ubi0+ aW52YWxpZGF0ZV9zZXEgJiAxID09IFRydWUKKyAqICAtIG1ubi0+aW52YWxpZGF0ZV9zZXEgJiAx ID09IFRydWUgKG9kZCkKICAqICAtIHNvbWUgcmFuZ2Ugb24gdGhlIG1tX3N0cnVjdCBpcyBiZWlu ZyBpbnZhbGlkYXRlZAogICogIC0gdGhlIGl0cmVlIGlzIG5vdCBhbGxvd2VkIHRvIGNoYW5nZQog ICoKICAqIEFuZCBwYXJ0aWFsbHkgZXhjbHVkZWQ6CiAgKiAgLSBtbS0+YWN0aXZlX2ludmFsaWRh dGVfcmFuZ2VzICE9IDAKKyAqICAtIG1ubi0+aW52YWxpZGF0ZV9zZXEgJiAxID09IEZhbHNlIChl dmVuKQogICogIC0gc29tZSByYW5nZSBvbiB0aGUgbW1fc3RydWN0IGlzIGJlaW5nIGludmFsaWRh dGVkCiAgKiAgLSB0aGUgaXRyZWUgaXMgYWxsb3dlZCB0byBjaGFuZ2UKICAqCkBAIC0xMzEsMTIg KzEzMywxMyBAQCBzdGF0aWMgdm9pZCBtbl9pdHJlZV9pbnZfZW5kKHN0cnVjdCBtbXVfbm90aWZp ZXJfbW0gKm1tbl9tbSkKIAkJcmV0dXJuOwogCX0KIAorCS8qIE1ha2UgaW52YWxpZGF0ZV9zZXEg ZXZlbiAqLwogCW1tbl9tbS0+aW52YWxpZGF0ZV9zZXErKzsKIAluZWVkX3dha2UgPSB0cnVlOwog CiAJLyoKIAkgKiBUaGUgaW52X2VuZCBpbmNvcnBvcmF0ZXMgYSBkZWZlcnJlZCBtZWNoYW5pc20g bGlrZQotCSAqIHJ0bmxfbG9jaygpLiBBZGRzIGFuZCByZW1vdmVzIGFyZSBxdWV1ZWQgdW50aWwg dGhlIGZpbmFsIGludl9lbmQKKwkgKiBydG5sX3VubG9jaygpLiBBZGRzIGFuZCByZW1vdmVzIGFy ZSBxdWV1ZWQgdW50aWwgdGhlIGZpbmFsIGludl9lbmQKIAkgKiBoYXBwZW5zIHRoZW4gdGhleSBh cmUgcHJvZ3Jlc3NlZC4gVGhpcyBhcnJhbmdlbWVudCBmb3IgdHJlZSB1cGRhdGVzCiAJICogaXMg dXNlZCB0byBhdm9pZCB1c2luZyBhIGJsb2NraW5nIGxvY2sgZHVyaW5nCiAJICogaW52YWxpZGF0 ZV9yYW5nZV9zdGFydC4KQEAgLTIzMCwxMCArMjMzLDExIEBAIHVuc2lnbmVkIGxvbmcgbW11X3Jh bmdlX3JlYWRfYmVnaW4oc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllciAqbXJuKQogCXNwaW5fdW5s b2NrKCZtbW5fbW0tPmxvY2spOwogCiAJLyoKLQkgKiBtcm4tPmludmFsaWRhdGVfc2VxIGlzIGFs d2F5cyBzZXQgdG8gYW4gb2RkIHZhbHVlLiBUaGlzIGVuc3VyZXMKLQkgKiB0aGF0IGlmIHNlcSBk b2VzIHdyYXAgd2Ugd2lsbCBhbHdheXMgY2xlYXIgdGhlIGJlbG93IHNsZWVwIGluIHNvbWUKLQkg KiByZWFzb25hYmxlIHRpbWUgYXMgbW1uX21tLT5pbnZhbGlkYXRlX3NlcSBpcyBldmVuIGluIHRo ZSBpZGxlCi0JICogc3RhdGUuCisJICogbXJuLT5pbnZhbGlkYXRlX3NlcSBtdXN0IGFsd2F5cyBi ZSBzZXQgdG8gYW4gb2RkIHZhbHVlIHZpYQorCSAqIG1tdV9yYW5nZV9zZXRfc2VxKCkgdXNpbmcg dGhlIHByb3ZpZGVkIGN1cl9zZXEgZnJvbQorCSAqIG1uX2l0cmVlX2ludl9zdGFydF9yYW5nZSgp LiBUaGlzIGVuc3VyZXMgdGhhdCBpZiBzZXEgZG9lcyB3cmFwIHdlCisJICogd2lsbCBhbHdheXMg Y2xlYXIgdGhlIGJlbG93IHNsZWVwIGluIHNvbWUgcmVhc29uYWJsZSB0aW1lIGFzCisJICogbW1u X21tLT5pbnZhbGlkYXRlX3NlcSBpcyBldmVuIGluIHRoZSBpZGxlIHN0YXRlLgogCSAqLwogCWxv Y2tfbWFwX2FjcXVpcmUoJl9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbWFw KTsKIAlsb2NrX21hcF9yZWxlYXNlKCZfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0 YXJ0X21hcCk7CkBAIC04OTIsNiArODk2LDEyIEBAIHN0YXRpYyBpbnQgX19tbXVfcmFuZ2Vfbm90 aWZpZXJfaW5zZXJ0KHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm1ybiwKIAkJbXJuLT5pbnZh bGlkYXRlX3NlcSA9IG1tbl9tbS0+aW52YWxpZGF0ZV9zZXE7CiAJfSBlbHNlIHsKIAkJV0FSTl9P Tihtbl9pdHJlZV9pc19pbnZhbGlkYXRpbmcobW1uX21tKSk7CisJCS8qCisJCSAqIFRoZSBzdGFy dGluZyBzZXEgZm9yIGEgbXJuIG5vdCB1bmRlciBpbnZhbGlkYXRpb24gc2hvdWxkIGJlCisJCSAq IG9kZCwgbm90IGVxdWFsIHRvIHRoZSBjdXJyZW50IGludmFsaWRhdGVfc2VxIGFuZAorCQkgKiBp bnZhbGlkYXRlX3NlcSBzaG91bGQgbm90ICd3cmFwJyB0byB0aGUgbmV3IHNlcSBhbnkgdGltZQor CQkgKiBzb29uLgorCQkgKi8KIAkJbXJuLT5pbnZhbGlkYXRlX3NlcSA9IG1tbl9tbS0+aW52YWxp ZGF0ZV9zZXEgLSAxOwogCQlpbnRlcnZhbF90cmVlX2luc2VydCgmbXJuLT5pbnRlcnZhbF90cmVl LCAmbW1uX21tLT5pdHJlZSk7CiAJfQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWw=