Received: by 2002:a25:b794:0:0:0:0:0 with SMTP id n20csp6695619ybh; Thu, 8 Aug 2019 04:15:51 -0700 (PDT) X-Google-Smtp-Source: APXvYqytMSJCP9o7ZHm9VqajlGNorlOEMKTApf2+jwCqBZGSYMPxq3mt8OuI7cnWobcYTHAUo4l9 X-Received: by 2002:a63:5225:: with SMTP id g37mr12145225pgb.236.1565262951655; Thu, 08 Aug 2019 04:15:51 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1565262951; cv=pass; d=google.com; s=arc-20160816; b=XdiWEBUi80gAXTV9mji0c5bouOslOiqjVENbst36rRMZw9TAXtVJdYacjjFNJ2+FR1 3WInCtWcXHUe0UqyBLWFpfKRV1ytq7RyxL6igyCCiduOspSTG81Nkc3D3bUnJwXrtX2s hghREDLV2gVdkPOZrRWjgFAIyP0SNamjpFckkfnDNyurqPxgO5Uaxo+VVgV2IcFcoyh7 Nj6QUyVPA+7Deqb53bcEXadm9kXwJ90VL0Vt+JOiSdYwqyhc9o+HpOU7facEP4HpqIr/ mQ5kKrqKfWrQ5a70C7FezVEHNDXcJ4m2EWu5rChd+nbg6S58kWwRTpPiuA2lJq1n6ivd /NEg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=0WDDVOG0fYdFVI1DK1Ta7ALSWsTLe4ZqR7O7oXy+qEI=; b=NmKIhdhOWZhKIV+Yfz1TsoQDIYfbNsMELy7W2+MQcZBNAUPMUdY8IZZJMW+6X8ECNe vyNzmLFoxHchx/ptTobHmxtGLMnr2d+Rn7ro/ci1p57eTmXjBKRNzuGU/YtS37yHV3Z3 z6fc9N9IFHZmjLS3DbqLCE+uL8LiZ5NDXN3hzdaFXUnQWsrhBN+pWeTR2QRkhDEPHsrD NInVn1mkMMl+EzyPqX4TNrujwMLVD+Evtx7c9dZm8O2LsgpT5LwO0NGvVXVOmU/+c4xS YP6paifGYykHdmN5nNjd9II++TtOydH7U46OL+OOqasnFM4GYB7n5kzeDXOcSEFrWIQg CAvQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@verimatrix.com header.s=selector2 header.b="w/yjzxn9"; arc=pass (i=1 spf=pass spfdomain=verimatrix.com dkim=pass dkdomain=verimatrix.com dmarc=pass fromdomain=verimatrix.com); spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=verimatrix.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y1si50800238pgg.490.2019.08.08.04.15.32; Thu, 08 Aug 2019 04:15:51 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@verimatrix.com header.s=selector2 header.b="w/yjzxn9"; arc=pass (i=1 spf=pass spfdomain=verimatrix.com dkim=pass dkdomain=verimatrix.com dmarc=pass fromdomain=verimatrix.com); spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=verimatrix.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730747AbfHHLP2 (ORCPT + 99 others); Thu, 8 Aug 2019 07:15:28 -0400 Received: from mail-eopbgr740051.outbound.protection.outlook.com ([40.107.74.51]:3884 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1730678AbfHHLP2 (ORCPT ); Thu, 8 Aug 2019 07:15:28 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=K2t4WLbvmhZsLSoGlMGCxJrhY7DaV0vrauuUQVIJKcoYlHx5XPC+YRhiFvU5A0WhByzumWQdiaXVk/lKQwaoRhx8RB6Gq6mkpZ0glqvRo58PFx/NYuvdEqF1gaXulEFMZ2tRniQbWbEZAo1frfRoddmBg7PNWatr7+zSs/mwA3flqoCAX624RhyGQlbTwQYha0up2eJgGWZ23EqfX2VOYtmz3NLgIcxbiyp+oeQbXiA5JH7MVlmW9+HjXTb+r1F/bWhvxhxcV/Sz7G84mfVAALByTM1MIeHrSZv971JBt9oK/xVq6Dv98OEp6mQJvlcDbRvJCOz6U5cj6AdskAFPBw== 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=0WDDVOG0fYdFVI1DK1Ta7ALSWsTLe4ZqR7O7oXy+qEI=; b=ldwaRGoFSTpgbqwoXD13xa+FZ/KKTis6U+0l9x87+fB5EoVhlzX2mmmkcEfd3xNFfnFKDYoPa76jMw0JTW5LVv5VrEb5Ww3j2iMIiBYrxZs+3NpeSOnsn7Tysktrb6d1kQdreGzbYujuWnosQxoqmNa7N1ukvPEbf+bFioWK7zafofeytTI3jEPHYNJ/CyceIR2bpyJUeNS5F+n4u7q88+r18Vxqy7xi00h+OUpYUznHTlm6+8vHPKNWXQXY75seW45J075wWsHbCNQkTxIuWfpSqyesnzeSdM9/kg9myUUp0YvUUZ4AmGe4Ic7wlh3OWN1TWKRve8mz0yNjwp561A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=verimatrix.com; dmarc=pass action=none header.from=verimatrix.com; dkim=pass header.d=verimatrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=verimatrix.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0WDDVOG0fYdFVI1DK1Ta7ALSWsTLe4ZqR7O7oXy+qEI=; b=w/yjzxn9ZcEjR7D0FU9ixBanebvVlzCNe22MY3xnhXFWVJZ9zlwcAtg8zwUFcRlWOszI2lar3cIMdXsNQ5MJ22cIhF6B5B0kYtqQ30VL4g+HDOZhhZv3sBsIhi6QyljvZkGUsKcHTfTYpUri5ahLdYNaQ140OhAex39cT/z2MO8= Received: from MN2PR20MB2973.namprd20.prod.outlook.com (52.132.172.146) by MN2PR20MB3024.namprd20.prod.outlook.com (52.132.173.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2157.14; Thu, 8 Aug 2019 11:15:05 +0000 Received: from MN2PR20MB2973.namprd20.prod.outlook.com ([fe80::d96f:39b2:19f4:c7c1]) by MN2PR20MB2973.namprd20.prod.outlook.com ([fe80::d96f:39b2:19f4:c7c1%7]) with mapi id 15.20.2157.015; Thu, 8 Aug 2019 11:15:05 +0000 From: Pascal Van Leeuwen To: Ard Biesheuvel CC: Pascal van Leeuwen , "open list:HARDWARE RANDOM NUMBER GENERATOR CORE" , Herbert Xu , "David S. Miller" Subject: RE: [PATCHv2] crypto: xts - Add support for Cipher Text Stealing Thread-Topic: [PATCHv2] crypto: xts - Add support for Cipher Text Stealing Thread-Index: AQHVTbnLJDEr41H8rkmsbKI5H7w8F6bw3s4AgAAEuLCAAAjCAIAAEHswgAASZgCAAAKSkA== Date: Thu, 8 Aug 2019 11:15:05 +0000 Message-ID: References: <1565245094-8584-1-git-send-email-pvanleeuwen@verimatrix.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=pvanleeuwen@verimatrix.com; x-originating-ip: [188.204.2.113] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: e8aaa913-f436-4314-88f3-08d71bf1aa36 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(2017052603328)(7193020);SRVR:MN2PR20MB3024; x-ms-traffictypediagnostic: MN2PR20MB3024: x-ms-exchange-purlcount: 2 x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-forefront-prvs: 012349AD1C x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(4636009)(376002)(346002)(396003)(136003)(366004)(39850400004)(13464003)(54534003)(199004)(189003)(53234004)(52314003)(53936002)(186003)(64756008)(229853002)(6436002)(30864003)(33656002)(25786009)(4326008)(55016002)(53946003)(6306002)(71200400001)(478600001)(6246003)(66066001)(486006)(966005)(76116006)(9686003)(7696005)(15974865002)(53546011)(52536014)(14444005)(99286004)(6506007)(5660300002)(66556008)(66476007)(86362001)(71190400001)(81156014)(14454004)(3846002)(81166006)(54906003)(6116002)(8936002)(102836004)(26005)(8676002)(74316002)(305945005)(11346002)(6916009)(76176011)(446003)(2906002)(66946007)(476003)(316002)(7736002)(66446008)(256004)(562404015)(559001)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:MN2PR20MB3024;H:MN2PR20MB2973.namprd20.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: verimatrix.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: lUpy9FD0JvJ2V6URslyJ70xZPPFmY+vDxZiI283lRYh9AJo6jw1YyGdiaGuYCgp25y97d/A+qYShbHSOCRCtTGkDVmnn5/UBfY/wujxyFQNWZpZvOTCHOc6yKReNHndw0so1MghuXteg88nDa+0nMmG6gObDPOzEGcXBa8FvSv4UqqJ8ULRszqsFcU5doWP/OdY7J3TpbA8OpFtmbbw2nErj/AXZ0m3mq7IjuiJ+9vW1u2tB3dcXl5TSn4zjTWL72J3J8JLC+JrtYTC9cAN8Zt+CRB1+0BEjPDxAVVFVxNudY6p8oKTSm+P0u9l9aHjuORlgOop/ahcLibH45Tj/A1YBDVzeS/A/yRPZgjbzR8gEe4WIsM78c30aBvmcYoB3+pqOBBKqmaQS7YmCRmgxQ+It3ImmsnYs6yHqHy3xSdc= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: verimatrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: e8aaa913-f436-4314-88f3-08d71bf1aa36 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Aug 2019 11:15:05.0405 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: dcb260f9-022d-4495-8602-eae51035a0d0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: aieSzNjYfb/1sn9KuozOVQuH/fl8gRUt6WgqMTHBoPMoQ4ePDsgg5huYDJoJ3f0k6SrVUWesTLtQjYJJjxolZttZbGw537c3elCFTnsX8vY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR20MB3024 Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBBcmQgQmllc2hldXZlbCA8YXJk LmJpZXNoZXV2ZWxAbGluYXJvLm9yZz4NCj4gU2VudDogVGh1cnNkYXksIEF1Z3VzdCA4LCAyMDE5 IDEyOjM4IFBNDQo+IFRvOiBQYXNjYWwgVmFuIExlZXV3ZW4gPHB2YW5sZWV1d2VuQHZlcmltYXRy aXguY29tPg0KPiBDYzogUGFzY2FsIHZhbiBMZWV1d2VuIDxwYXNjYWx2YW5sQGdtYWlsLmNvbT47 IG9wZW4gbGlzdDpIQVJEV0FSRSBSQU5ET00gTlVNQkVSIEdFTkVSQVRPUg0KPiBDT1JFIDxsaW51 eC1jcnlwdG9Admdlci5rZXJuZWwub3JnPjsgSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBh bmEub3JnLmF1PjsgRGF2aWQgUy4NCj4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0Pg0KPiBT dWJqZWN0OiBSZTogW1BBVENIdjJdIGNyeXB0bzogeHRzIC0gQWRkIHN1cHBvcnQgZm9yIENpcGhl ciBUZXh0IFN0ZWFsaW5nDQo+IA0KPiBPbiBUaHUsIDggQXVnIDIwMTkgYXQgMTM6MTYsIFBhc2Nh bCBWYW4gTGVldXdlbg0KPiA8cHZhbmxlZXV3ZW5AdmVyaW1hdHJpeC5jb20+IHdyb3RlOg0KPiA+ DQo+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gRnJvbTogQXJkIEJpZXNo ZXV2ZWwgPGFyZC5iaWVzaGV1dmVsQGxpbmFyby5vcmc+DQo+ID4gPiBTZW50OiBUaHVyc2RheSwg QXVndXN0IDgsIDIwMTkgMTA6MzMgQU0NCj4gPiA+IFRvOiBQYXNjYWwgVmFuIExlZXV3ZW4gPHB2 YW5sZWV1d2VuQHZlcmltYXRyaXguY29tPg0KPiA+ID4gQ2M6IFBhc2NhbCB2YW4gTGVldXdlbiA8 cGFzY2FsdmFubEBnbWFpbC5jb20+OyBvcGVuIGxpc3Q6SEFSRFdBUkUgUkFORE9NIE5VTUJFUg0K PiBHRU5FUkFUT1INCj4gPiA+IENPUkUgPGxpbnV4LWNyeXB0b0B2Z2VyLmtlcm5lbC5vcmc+OyBI ZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+OyBEYXZpZA0KPiBTLg0KPiA+ ID4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0Pg0KPiA+ID4gU3ViamVjdDogUmU6IFtQQVRD SHYyXSBjcnlwdG86IHh0cyAtIEFkZCBzdXBwb3J0IGZvciBDaXBoZXIgVGV4dCBTdGVhbGluZw0K PiA+ID4NCj4gPiA+IE9uIFRodSwgOCBBdWcgMjAxOSBhdCAxMToxOCwgUGFzY2FsIFZhbiBMZWV1 d2VuDQo+ID4gPiA8cHZhbmxlZXV3ZW5AdmVyaW1hdHJpeC5jb20+IHdyb3RlOg0KPiA+ID4gPg0K PiA+ID4gPiBBcmQsDQo+ID4gPiA+DQo+ID4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0t LS0NCj4gPiA+ID4gPiBGcm9tOiBBcmQgQmllc2hldXZlbCA8YXJkLmJpZXNoZXV2ZWxAbGluYXJv Lm9yZz4NCj4gPiA+ID4gPiBTZW50OiBUaHVyc2RheSwgQXVndXN0IDgsIDIwMTkgOTo0NSBBTQ0K PiA+ID4gPiA+IFRvOiBQYXNjYWwgdmFuIExlZXV3ZW4gPHBhc2NhbHZhbmxAZ21haWwuY29tPg0K PiA+ID4gPiA+IENjOiBvcGVuIGxpc3Q6SEFSRFdBUkUgUkFORE9NIE5VTUJFUiBHRU5FUkFUT1Ig Q09SRSA8bGludXgtDQo+IGNyeXB0b0B2Z2VyLmtlcm5lbC5vcmc+Ow0KPiA+ID4gPiA+IEhlcmJl cnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT47IERhdmlkIFMuIE1pbGxlciA8ZGF2 ZW1AZGF2ZW1sb2Z0Lm5ldD47DQo+ID4gPiBQYXNjYWwNCj4gPiA+ID4gPiBWYW4gTGVldXdlbiA8 cHZhbmxlZXV3ZW5AdmVyaW1hdHJpeC5jb20+DQo+ID4gPiA+ID4gU3ViamVjdDogUmU6IFtQQVRD SHYyXSBjcnlwdG86IHh0cyAtIEFkZCBzdXBwb3J0IGZvciBDaXBoZXIgVGV4dCBTdGVhbGluZw0K PiA+ID4gPiA+DQo+ID4gPiA+ID4gSGVsbG8gUGFzY2FsLA0KPiA+ID4gPiA+DQo+ID4gPiA+ID4g VGhhbmtzIGZvciBsb29raW5nIGludG8gdGhpcy4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IE9uIFRo dSwgOCBBdWcgMjAxOSBhdCAxMDoyMCwgUGFzY2FsIHZhbiBMZWV1d2VuIDxwYXNjYWx2YW5sQGdt YWlsLmNvbT4gd3JvdGU6DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gVGhpcyBhZGRzIHN1cHBv cnQgZm9yIENpcGhlciBUZXh0IFN0ZWFsaW5nIGZvciBkYXRhIGJsb2NrcyB0aGF0IGFyZSBub3Qg YW4NCj4gPiA+ID4gPiA+IGludGVnZXIgbXVsdGlwbGUgb2YgdGhlIGNpcGhlciBibG9jayBzaXpl IGluIHNpemUsIGJyaW5naW5nIGl0IGZ1bGx5IGluDQo+ID4gPiA+ID4gPiBsaW5lIHdpdGggdGhl IElFRUUgUDE2MTkvRDE2IHN0YW5kYXJkLg0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IFRoaXMg aGFzIGJlZW4gdGVzdGVkIHdpdGggdGhlIEFFUy1YVFMgdGVzdCB2ZWN0b3JzIGZyb20gdGhlIElF RUUgUDE2MTkvRDE2DQo+ID4gPiA+ID4gPiBzcGVjaWZpY2F0aW9uIGFzIHdlbGwgYXMgc29tZSBh ZGRpdGlvbmFsIHRlc3QgdmVjdG9ycyBzdXBwbGllZCB0byB0aGUNCj4gPiA+ID4gPiA+IGxpbnV4 X2NyeXB0byBtYWlsaW5nIGxpc3QgcHJldmlvdXNseS4gSXQgaGFzIGFsc28gYmVlbiBmdXp6ZWQg YWdhaW5zdA0KPiA+ID4gPiA+ID4gSW5zaWRlIFNlY3VyZSBBRVMtWFRTIGhhcmR3YXJlIHdoaWNo IGhhcyBiZWVuIGFjdGl2ZWx5IHVzZWQgaW4gdGhlIGZpZWxkDQo+ID4gPiA+ID4gPiBmb3IgbW9y ZSB0aGFuIGEgZGVjYWRlIGFscmVhZHkuDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gY2hhbmdl cyBzaW5jZSB2MToNCj4gPiA+ID4gPiA+IC0gRml4ZWQgYnVmZmVyIG92ZXJmbG93IGlzc3VlIGR1 ZSB0byBzdWJyZXEgbm90IGJlaW5nIHRoZSBsYXN0IGVudHJ5IGluDQo+ID4gPiA+ID4gPiAgIHJj dHgsIHRoaXMgdHVybnMgb3V0IHRvIGJlIGEgY3J5cHRvIEFQSSByZXF1aXJlbWVudC4gVGhhbmtz IHRvIE1pbGFuDQo+ID4gPiA+ID4gPiAgIEJyb3ogPGdtYXp5bGFuZEBnbWFpbC5jb20+IGZvciBm aW5kaW5nIHRoaXMgYW5kIHByb3ZpZGluZyB0aGUgc29sdXRpb24uDQo+ID4gPiA+ID4gPiAtIFJl bW92ZWQgc29tZSByZWR1bmRhbnQgZXJyb3IgcmV0dXJuaW5nIGNvZGUgZnJvbSB0aGUgX2Zpbmlz aF9jdHMoKQ0KPiA+ID4gPiA+ID4gICBmdW5jdGlvbnMgdGhhdCBjdXJyZW50bHkgY2Fubm90IGZh aWwsIHRoZXJlZm9yZSB3b3VsZCBhbHdheXMgcmV0dXJuIDAuDQo+ID4gPiA+ID4gPiAtIHJlbW92 ZWQgcmVtX2J5dGVzIGNvbXB1dGF0aW9uIGJlaGluZCBpbml0X2NyeXB0KCkgaW4gdGhlIGVuY3J5 cHQoKSBhbmQNCj4gPiA+ID4gPiA+ICAgZGVjcnlwdCgpIGZ1bmN0aW9ucywgbm8gbmVlZCB0byBj b21wdXRlIGZvciBsZW5ndGhzIDwgMTYNCj4gPiA+ID4gPiA+IC0gRml4ZWQgY29tbWVudCBzdHls ZSBmb3Igc2luZ2xlIGxpbmUgY29tbWVudHMNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4NCj4gPiA+ ID4gPiBQbGVhc2UgcHV0IHRoZSBjaGFuZ2Vsb2cgYmVsb3cgdGhlIC0tLQ0KPiA+ID4gPiA+DQo+ ID4gPiA+IE9rLCBJIGNhbiByZXN1Ym1pdCB3aXRoIHRoYXQgZml4ZWQNCj4gPiA+ID4NCj4gPiA+ ID4gPiA+IFNpZ25lZC1vZmYtYnk6IFBhc2NhbCB2YW4gTGVldXdlbiA8cHZhbmxlZXV3ZW5AdmVy aW1hdHJpeC5jb20+DQo+ID4gPiA+ID4gPiAtLS0NCj4gPiA+ID4gPiA+ICBjcnlwdG8veHRzLmMg fCAyMjkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KystLS0tLS0NCj4gPiA+ID4gPiA+ICAxIGZpbGUgY2hhbmdlZCwgMjA5IGluc2VydGlvbnMoKyks IDIwIGRlbGV0aW9ucygtKQ0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9j cnlwdG8veHRzLmMgYi9jcnlwdG8veHRzLmMNCj4gPiA+ID4gPiA+IGluZGV4IDMzY2Y3MjYuLjE3 YjU1MWQgMTAwNjQ0DQo+ID4gPiA+ID4gPiAtLS0gYS9jcnlwdG8veHRzLmMNCj4gPiA+ID4gPiA+ ICsrKyBiL2NyeXB0by94dHMuYw0KPiA+ID4gPiA+ID4gQEAgLTEsNyArMSw1IEBADQo+ID4gPiA+ ID4gPiAgLyogWFRTOiBhcyBkZWZpbmVkIGluIElFRUUxNjE5L0QxNg0KPiA+ID4gPiA+ID4gICAq ICAgICBodHRwOi8vZ3JvdXBlci5pZWVlLm9yZy9ncm91cHMvMTYxOS9lbWFpbC9wZGYwMDA4Ni5w ZGYNCj4gPiA+ID4gPiA+IC0gKiAgICAgKHNlY3RvciBzaXplcyB3aGljaCBhcmUgbm90IGEgbXVs dGlwbGUgb2YgMTYgYnl0ZXMgYXJlLA0KPiA+ID4gPiA+ID4gLSAqICAgICBob3dldmVyIGN1cnJl bnRseSB1bnN1cHBvcnRlZCkNCj4gPiA+ID4gPiA+ICAgKg0KPiA+ID4gPiA+ID4gICAqIENvcHly aWdodCAoYykgMjAwNyBSaWsgU25lbCA8cnNuZWxAY3ViZS5keW5kbnMub3JnPg0KPiA+ID4gPiA+ ID4gICAqDQo+ID4gPiA+ID4gPiBAQCAtMjgsNiArMjYsNyBAQA0KPiA+ID4gPiA+ID4NCj4gPiA+ ID4gPiA+ICBzdHJ1Y3QgcHJpdiB7DQo+ID4gPiA+ID4gPiAgICAgICAgIHN0cnVjdCBjcnlwdG9f c2tjaXBoZXIgKmNoaWxkOw0KPiA+ID4gPiA+ID4gKyAgICAgICBzdHJ1Y3QgY3J5cHRvX2NpcGhl ciAqYmFzZTsNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IFdoeSBkbyB5b3UgbmVlZCBhIHNlcGFyYXRl IGNpcGhlciBmb3IgdGhlIGNpcGhlcnRleHQgc3RlYWxpbmc/IEVDQiBjYW4NCj4gPiA+ID4gPiBi ZSBpbnZva2VkIHdpdGggYSBzaW5nbGUgYmxvY2sganVzdCBmaW5lLCBhbmQgaXQgd2lsbCBiZWhh dmUgZXhhY3RseQ0KPiA+ID4gPiA+IGxpa2UgdGhlIGJhcmUgY2lwaGVyLg0KPiA+ID4gPiA+DQo+ ID4gPiA+IEFzIHlvdSBhbHJlYWR5IHBvaW50ZWQgb3V0LCBpdCBtYXkgYmUgYSBkaWZmZXJlbnQg a2V5IGZyb20gdGhlIHR3ZWFrLA0KPiA+ID4gPiBhbmQgYXMgSSBteXNlbGYgYWxyZWFkeSBleHBs YWluZWQgSSByZWFsbHkgZG8gKm5vdCogd2FudCB0byB1c2UgdGhlDQo+ID4gPiA+IHNrY2lwaGVy IHdoaWNoIG1heSBiZSBIVyBhY2NlbGVyYXRlZCB3aXRoIHRlcnJpYmxlIGxhdGVuY3kuDQo+ID4g PiA+DQo+ID4gPg0KPiA+ID4gSSB0aGluayB1c2luZyB0aGUgc2tjaXBoZXIgZGlyZWN0bHkgc2hv dWxkIGJlIHRoZSBkZWZhdWx0LCByZWdhcmRsZXNzDQo+ID4gPiBvZiB0aGUgbGF0ZW5jeSwgZXNw ZWNpYWxseSBzaW5jZSB5b3UgYXJlIGRvaW5nIGEgJ2NvcnJlY3RuZXNzIGZpcnN0Jw0KPiA+ID4g aW1wbGVtZW50YXRpb24uDQo+ID4gPg0KPiA+IEkgZGlzYWdyZWUgd2l0aCB0aGUgbGF0dGVyIHBh cnQsIGFzIHRoZSBjaXBoZXIgYmFzZWQgaW1wbGVtZW50YXRpb24gaXMNCj4gPiBhIGxvdCBlYXNp ZXIvc3RyYWlnaHRmb3J3YXJkIHRoZW4gYW4gc2tjaXBoZXIgaW1wbGVtZW50YXRpb24gd291bGQg YmUuDQo+ID4gSSB3b3VsZCBjb25zaWRlciB1c2luZyB0aGUgc2tjaXBoZXIgYW4gb3B0aW1pemF0 aW9uIHRvIGJlIGRvbmUgbGF0ZXIuDQo+ID4NCj4gDQo+IFRoZSB0aGluZyBpcywgd2UgaGF2ZSBh bHJlYWR5IGVzdGFibGlzaGVkIHRoYXQgYWRkaW5nIENUUyBzdXBwb3J0DQo+IHNvbHZlcyBhIG5v bi1pc3N1ZSwgc2luY2Ugbm8gdXNlcnMgZXhpc3RzIHRoYXQgcmVxdWlyZSBpdC4gSG93ZXZlciwg YnkNCj4gYWxsb2NhdGluZyBhbiBhZGRpdGlvbmFsIGNpcGhlciBURk0gZWFjaCB0aW1lIHRoZSBY VFMgc2tjaXBoZXIgaXMNCj4gaW5zdGFudGlhdGVkLCB5b3UgYXJlIGluY3JlYXNpbmcgdGhlIG1l bW9yeSBmb290cHJpbnQsIHdoaWNoIG1heSBiZQ0KPiBub3RpY2VhYmxlIGZvciB1c2VycyBsaWtl IGZzY3J5cHQgd2hpY2ggaGF2ZSBsb3RzIG9mIGRpZmZlcmVudCBrZXlzLg0KPiANCk9rLCB0aGF0 IGFjdHVhbGx5IHNvdW5kcyBsaWtlIGEgaGFsZi1kZWNlbnQgcmVhc29uIHRvIHN0aWNrIHdpdGgN CnRoZSBza2NpcGhlciBieSBkZWZhdWx0IC4uLiBkaWRuJ3QgcmVhbGx5IGNvbnNpZGVyIHRoYXQu DQoNCj4gU28gdGhlIGZpcnN0IHN0ZXAgdG93YXJkcyBpbXBsZW1lbnRpbmcgQ1RTIHNob3VsZCBi ZSB0byByZXVzZSBhcyBtdWNoDQo+IG9mIHdoYXQgd2UgYWxyZWFkeSBoYXZlIGFzIHBvc3NpYmxl LCBhbmQgb25seSBkZWFsIHdpdGggcGVyZm9ybWFuY2UNCj4gaXNzdWVzIHdoZW4gdGhleSBtYXRl cmlhbGl6ZSBpbiByZWFsaXR5Lg0KPiANCldlbGwsIG92ZXIgaGVyZSB0aGF0IHBlcmZvcm1hbmNl IGlzc3VlIHZlcnkgbXVjaCBtYXRlcmlhbGl6ZXMgYXMgSSBhbQ0KYWN0dWFsbHkgdHJ5aW5nIHRv IHVzZSB0aGUgWFRTIHRlbXBsYXRlIHdpdGggbXkgQUVTIGhhcmR3YXJlIC4uLg0KKGFzIHRoZSBt YWpvcml0eSBvZiBvdXIgSFcgb3V0IHRoZXJlIGRvZXNuJ3QgaGF2ZSBidWlsdC1pbiBYVFMgc3Vw cG9ydCkNCg0KU28gbm93IEknbSBzdHVjayB3aXRoIHRoZSBkaWxlbW1hIHRoYXQgSSBkb24ndCBy ZWFsbHkgd2FudCB0byBwcm92aWRlDQphIHNvbHV0aW9uIHRoYXQgcGVyZm9ybXMgcG9vcmx5IG9u IG91ciBoYXJkd2FyZS4NCkZyb20gbXkgcGVyc3BlY3RpdmUsIHNvZnR3YXJlIHRoYXQgcGVyZm9y bXMgcG9vcmx5IGlzIGFjdHVhbGx5IGEgDQpnb29kIHRoaW5nIChnaXZlbiB0aGF0IEkgbWFrZSBh IGxpdmluZyBzZWxsaW5nIEhXIGFjY2VsZXJhdGlvbikgOi1QDQoNCj4gPiBBY3R1YWxseSwgaGF2 aW5nIGVxdWl2YWxlbnQgY3J5cHRvX3NrY2lwaGVyX2VuL2RlY3J5cHRfb25lKCkgZnVuY3Rpb25z DQo+ID4gYXZhaWxhYmxlIGZyb20gdGhlIGNyeXB0byBBUEkgd291bGQgaGVscCBhIGxvdCAoYXMg SSBhbHNvIG5lZWQgc2ltaWxhcg0KPiA+IGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBpbnNpZGUtc2Vj dXJlIGRyaXZlcikuIEFuZCBtYWtlIHNlbnNlIHRvIGhhdmUsDQo+ID4gZnJvbSB0aGUgcGVyc3Bl Y3RpdmUgb2YgY29kZSBkdXBsaWNhdGlvbiAvIHJlaW52ZW50aW5nIHRoZSB3aGVlbC4NCj4gPg0K PiANCj4gVHJ1ZS4gVGhpcyBpcyBhbm90aGVyIHRoaW5nIG9uIG15IGxpc3QsIGJ1dCBpdCBpcyBu b3QgdGhhdA0KPiBzdHJhaWdodC1mb3J3YXJkLCBnaXZlbiB0aGF0IGV4aXN0aW5nIHNrY2lwaGVy IGltcGxlbWVudGF0aW9ucyBjYW4NCj4gb25seSBiZSBleHBlY3RlZCB0byBkZWFsIHdpdGggdmly dHVhbCBhZGRyZXNzZXMgZnJvbSB0aGUgbGluZWFyIG1hcCwNCj4gd2hpbGUgYSBzaW1wbGUgZW5j cnlwdC9kZWNyeXB0IHJvdXRpbmUgd291bGQgdGFrZSBhcmJpdHJhcnkgdmlydHVhbA0KPiBhZGRy ZXNzZXMgYW5kIG5vdCBzY2F0dGVybGlzdHMuDQo+IA0KWWVzLCB0aGF0IHByZXR0eSBtdWNoIHN1 bXMgdXAgd2h5IGl0IHdhc24ndCBzdHJhaWdodGZvcndhcmQgZm9yIG1lDQp0byB1c2UgZm9yIENU UyBhcyB3ZWxsIC4uLiBhbmQgZXhhY3RseSB3aHkgeW91IHdhbnQgdG8gZG8gdGhpcyBvbmNlDQpw cm9wZXJseSBhbmQgbm90IHJlaW52ZW50IHRoZSB3aGVlbCBvdmVyIGFuZCBvdmVyIGFnYWluLg0K DQo+ID4gPiBJbiByZWFsaXR5LCBJIHRoaW5rIHZlcnkgZmV3IHVzZXJzIHRoYXQgY2FyZSBhYm91 dCBwZXJmb3JtYW5jZSB3b3VsZA0KPiA+ID4gb3B0IGZvciB0aGUgWFRTIHRlbXBsYXRlIHdyYXBw aW5nIGEgZWNiKHh4KSBpbXBsZW1lbnRhdGlvbi4gSW4gdGhhdA0KPiA+ID4gY2FzZSwgeW91IGFy ZSBtb3JlIGxpa2VseSB0byBzdGljayB3aXRoIHNvbWV0aGluZyB0aGF0IHlvdXIgaGFyZHdhcmUN Cj4gPiA+IHN1cHBvcnRzIG5hdGl2ZWx5Lg0KPiA+ID4NCj4gPiBBbGdvcml0aG0gd2lzZSwgeW91 IG1heSBub3QgaGF2ZSBhbnkgY2hvaWNlLiBJIGFjdHVhbGx5IGRvbid0IGtub3cgb2YNCj4gPiBh bnkgc3VpdGFibGUgYWx0ZXJuYXRpdmVzIHRvIFhUUyBmb3IgaW4tcGxhY2UgZW5jcnlwdGlvbiB0 aGF0IHByb3ZpZGUNCj4gPiBzaW1pbGFyIChvciBiZXR0ZXIpIHNlY3VyaXR5IHByb3BlcnRpZXMg Zm9yIHRoaXMgcGFydGljdWxhciBwdXJwb3NlLg0KPiA+DQo+IA0KPiBPZiBjb3Vyc2UgeW91IGhh dmUgYSBjaG9pY2UuIElmIHlvdXIgaGFyZHdhcmUgc3VwcG9ydHMgY2JjKGFlcykgYnV0DQo+IG5v dCB4dHMoYWVzKSwgeW91IHVzZSB0aGUgZm9ybWVyIGZvciBmdWxsIGRpc2sgZW5jeXB0aW9uIChl LmcsLiBvbg0KPiBBbmRyb2lkKS4NCj4gDQpFaCAuLi4gbm8uIGNiYyhhZXMpIGlzIG5vdCBhcyBz ZWN1cmUgYXMgeHRzKGFlcyksIHdoaWNoIGlzIHdoeSBYVFMgd2FzIA0KaW52ZW50ZWQgaW4gdGhl IGZpcnN0IHBsYWNlLiBTbyBJIHdvdWxkbid0IHJlY29tbWVuZCBkb2luZyB0aGF0Lg0KKFdpdGgg Q0JDIG1vZGUgeW91IGNhbiBtb3ZlIHNlY3RvcnMgYXJvdW5kIGFuZCBzdGlsbCBkZWNyeXB0IHRo ZW0gDQpwcm9wZXJseSBzYXZlIGZvciB0aGUgZmlyc3QgYmxvY2sgYWN0dWFsbHkgdGllZCB0byB0 aGUgTEJBIC4uLikNCg0KPiA+IFNvIHRoZW4gaXQgZGVwZW5kcyBvbiB3aGV0aGVyIHRlbXBsYXRl ICsgSFcgQUVTIGNhbiBvdXRwZXJmb3JtIHRoZSBmdWxsDQo+ID4gc29mdHdhcmUgYWx0ZXJuYXRp dmUuIFdoaWNoIGlzIE5PVCB1bmxpa2VseSB0byBiZSB0aGUgY2FzZSBvbiBhIHdlYWsNCj4gPiBD UFUgd2l0aG91dCBBRVMgYWNjZWxlcmF0aW9uLiBUaGUgdHdlYWsgZW5jcnlwdGlvbiArIHhvciBp cyB2ZXJ5DQo+ID4gbGlnaHR3ZWlnaHQsIHNvIGl0IHdvdWxkIHN0aWxsIG9mZmxvYWQgdGhlIGJ1 bGsgb2YgdGhlIHdvcmsgdG8gdGhlIEhXLg0KPiA+DQo+ID4gQnV0IHdpdGggcG90ZW50aWFsbHkg dGhvdXNhbmRzIG9mIENQVSBjbG9ja3Mgb2YgbGF0ZW5jeSBpbiB0aGUgbWl4LA0KPiA+IHlvdSBy ZWFsbHkgZG9uJ3Qgd2FudCB0byBydW4gdGhvc2UgYmxvY2tpbmcgc2luZ2xlIGJsb2NrIENUUw0K PiA+IGVuY3J5cHRpb25zIHRob3VnaCB0aGUgaGFyZHdhcmUsIGFzIHRoYXQgd291bGQgdG90YWxs eSB3aXBlIG91dCBhbnkNCj4gPiBiZW5lZml0IHRoYXQgbWlnaHQgaGF2ZSBwcm92aWRlZC4NCj4g Pg0KPiANCj4gVGhhdCBkZXBlbmRzIG9uIHdoZXRoZXIgc2luZ2xlIGJsb2NrIGxhdGVuY3kgaXMg YSBtZXRyaWMgeW91IGNhcmUNCj4gYWJvdXQuIElmIGl0IGlzIGJhdHRlcnkgbGlmZSwgdGhlIHBp Y3R1cmUgbWF5IGxvb2sgY29tcGxldGVseQ0KPiBkaWZmZXJlbnQuDQo+IA0KUGVyZm9ybWFuY2Ug aXMgYSBtZXRyaWMgSSB2ZXJ5IG11Y2ggY2FyZSBhYm91dCwgYXMgSFcgYWNjZWxlcmF0aW9uIGlz DQp3aGF0IEkgZG8gKGFsdGhvdWdoIEhXIG9mZmxvYWQgaXMgdXN1YWxseSBhbHNvIG11Y2ggYmV0 dGVyIGZvciBwb3dlcikuDQpBbmQgaXQncyBOT1QgYWJvdXQgc2luZ2xlIGJsb2NrIGxhdGVuY3ku IEl0J3MgYWJvdXQgdG90YWwgcGVyZm9ybWFuY2UuDQpUaGUgbGF0ZW5jeSBzaW1wbHkgdHJ1bXBz IHRoZSBwcm9jZXNzaW5nIHRpbWUgYnkgYSBsYXJnZSBtYXJnaW4uDQppLmUuIHByb2Nlc3Npbmcg Zm9yIGEgc2luZ2xlIHNlY3RvciBtYXkgdGFrZSBhIGZldyBodW5kcmVkIGN5Y2xlcyANCndoaWxl IHRoZSBsYXRlbmN5IGlzIGEgZmV3IHRob3VzYW5kIGN5Y2xlcywgaS5lLiBhbiBvcmRlciBhIG1h Z25pdHVkZQ0KaGlnaGVyLg0KDQo+IFNvIG9wdGltaXppbmcgZm9yIHRoZSBjYXNlIHdoZXJlIGEp IENUUyBpcyBvbiBhbnkga2luZCBvZiBjcml0aWNhbA0KPiBwYXRoIGFuZCBiKSB0aGUgc2tjaXBo ZXIgaXMgYmFja2VkIGJ5IGFuIGFzeW5jIGgvdyBpbXBsZW1lbnRhdGlvbiBpcw0KPiB2ZXJ5IHBy ZW1hdHVyZS4NCj4gDQpXZWxsIGEpIHdvdWxkIGRlcGVuZCBvbiBub24tbXVsdGlwbGUtb2YtMTYg d2hpY2ggTGludXggYXBwYXJlbnRseSANCmRvZXNuJ3Qgc3VwcG9ydCBzbyB0aGVyZWZvcmUgc3Vj aCBhIHVzZSBjYXNlIGRvZXMgbm90ICh5ZXQpIGV4aXN0Lg0KKG9yIGl0IG1heSBleGlzdCBzb21l d2hlcmUsIGJ1dCB1c2Ugc29tZSBsb2NhbCBYVFMgaW1wbGVtZW50YXRpb24gLi4uKQ0KDQpCdXQg aWYgaXQgZG9lcyBleGlzdCwgdGhlbiBiKSBpcyB2ZXJ5IG11Y2ggbXkgbWFpbiBpbnRlcmVzdCEN Cg0KPiA+IEkgZG8gYWdyZWUgdGhhdCBpZiB0aGUgdW5kZXJseWluZyBjaXBoZXIgaXMgYSBzb2Z0 d2FyZSBpbXBsZW1lbnRhdGlvbiwNCj4gPiB5b3UgcHJvYmFibHkgd291bGQgd2FudCBpdCB0byBn byB0aHJvdWdoIHRoZSBtYWluIHNrY2lwaGVyIHRvIGF2b2lkIGFub3RoZXINCj4gPiBzcGluIG9m IHRoZSBrZXkgc2NoZWR1bGVyLiBCdXQgb2J2aW91c2x5LCBteSBtYWluIGZvY3VzIGlzIEhXIHBl cmZvcm1hbmNlLg0KPiA+IElkZWFsbHksIHlvdSdkIHdhbnQgdG8gc2VsZWN0IHRoZSBhcHByb2Fj aCBiYXNlZCBvbiB0aGUgc2tjaXBoZXINCj4gPiBpbXBsZW1lbnRhdGlvbiAvIHByb3BlcnRpZXMg Li4uDQo+ID4NCj4gDQo+IFllcy4gQW5kIG15IGVkdWNhdGVkIGd1ZXNzIGlzIHRoYXQgQ1RTIG9u IHN5c3RlbXMgd2l0aCBhY2NlbGVyYXRlZA0KPiBlY2IoYWVzKSBidXQgbGFja2luZyB4dHMoYWVz KSBpcyBub3QgYSB1c2UgY2FzZSB3ZSBzaG91bGQgYnVyZGVuIGV2ZXJ5DQo+IGN1cnJlbnQgdXNl ciBvZiB0aGUgWFRTIHRlbXBsYXRlIHdpdGguDQo+IA0KT2ssIHRoYXQncyBhIGZhaXIgcG9pbnQg Y29uc2lkZXJpbmcgQ1RTIGlzIG5vdCBiZWluZyBuZWVkZWQgYXQgdGhlIG1vbWVudA0KDQo+ID4g PiA+IEkgd2FudCBzb21lIFNXIGltcGxlbWVudGF0aW9uIHRoYXQncyBmYXN0IG9uIGEgc2luZ2xl IGJsb2NrIGhlcmUuIEFuZCBJDQo+ID4gPiA+IGNhbid0IGNhbGwgYSBsaWJyYXJ5IGZ1bmN0aW9u IGRpcmVjdGx5IGFzIHRoZSB1bmRlcmx5aW5nIGNpcGhlciBjYW4gYmUNCj4gPiA+ID4gYW55dGhp bmcgKHdpdGggYSAxMjggYml0IGJsb2Nrc2l6ZSkuDQo+ID4gPiA+DQo+ID4gPg0KPiA+ID4gVHJ1 ZS4gV2hpY2ggaXMgYW5vdGhlciBoaXN0b3JpY2FsIG1pc3Rha2UgaW1vLCBzaW5jZSBYVFMgaXMg b25seQ0KPiA+ID4gc3BlY2lmaWVkIGZvciBBRVMsIGJ1dCBJIGRpZ3Jlc3MgLi4uIDotKQ0KPiA+ ID4NCj4gPiBZZXMsIEkgd2FzIGFsc28gc3VycHJpc2VkIGJ5IHRoZSB1c2Ugb2YgWFRTIHdpdGgg b3RoZXIgYmxvY2tjaXBoZXJzLg0KPiA+IEl0IHNvcnQgb2YgdmlvbGF0ZXMgdGhlIGRvbid0IHJv bGwgeW91ciBvd24gY3J5cHRvIHBhcmFkaWdtIC4uLg0KPiA+IChhbHRob3VnaCBzb21lIG1pZ2h0 IGFyZ3VlIHRoYXQgWFRTIGlzIHN1cHBvc2VkIHRvIGJlIHNlY3VyZSBpZiB0aGUNCj4gPiB1bmRl cmx5aW5nIGJsb2NrY2lwaGVyIGlzLCByZWdhcmRsZXNzIG9mIHdoYXQgdGhhdCBjaXBoZXIgYWN0 dWFsbHkgaXMpDQo+ID4NCj4gDQo+IFRoYXQgZG9lc24ndCByZWFsbHkgbWF0dGVyLiBXaGF0IG1h dHRlcnMgaXMgdGhhdCBub2JvZHkgdG9vayBhIGNhcmVmdWwNCj4gbG9vayB3aGV0aGVyIFhUUyBj b21iaW5lZCB3aXRoIG90aGVyIGNpcGhlcnMgaXMgYSBnb29kIGlkZWEgYmVmb3JlDQo+IHRocm93 aW5nIGl0IG91dCBpbnRvIHRoZSB3b3JsZC4NCj4gDQpDYW4ndCBjb21tZW50IG9uIHRoYXQsIHNp bmNlIEkgZG9uJ3Qga25vdyB0aGUgaGlzdG9yeS4NCg0KPiA+ID4gPiBBbHNvLCBwdXNoaW5nIGl0 IHRocm91Z2ggdGhlIG1haW4gc2tjaXBoZXIgd2FzIGEgYml0IG1vcmUgY29tcGxleGl0eQ0KPiA+ ID4gPiB0aGFuIEkgY291bGQgbWFuYWdlLCBub3QgYmVpbmcgYSBzb2Z0d2FyZSBlbmdpbmVlciBi eSBwcm9mZXNzaW9uLg0KPiA+ID4gPiBJIGxlYXZlIHRoZSBvcHRpbWl6YXRpb25zIHRvIHBlb3Bs ZSBiZXR0ZXIgZXF1aXBwZWQgdG8gZG8gdGhlbSA6LSkNCj4gPiA+ID4NCj4gPiA+DQo+ID4gPiBJ dCBzaG91bGRuJ3QgYmUgdGhhdCBjb21wbGljYXRlZC4gSXQgaXMgc2ltcGx5IGEgbWF0dGVyIG9m IHNldHRpbmcgdXANCj4gPiA+IHRoZSBzdWJyZXF1ZXN0Lg0KPiA+ID4NCj4gPiAic2ltcGx5Ig0K PiA+DQo+ID4gV2VsbCBJIGFjdHVhbGx5IHRyaWVkIGFuZCBjb3VsZG4ndCBnZXQgaXQgdG8gd29y ayA6LSkgKGFuZCBkaWQgbm90IGhhdmUNCj4gPiB0aGUgdGltZSB0byBrZWVwIHRyeWluZyB0aGlu Z3Mgc28gSSB0b29rIHRoZSBlYXN5IHdheSBvdXQpDQo+ID4NCj4gDQo+IEkgc2VlLiBJIGFscmVh ZHkgbG9va2VkIGludG8gQ1RTIGZvciB0aGUgYXJtL2FybTY0IGltcGxlbWVudGF0aW9ucywgc28N Cj4gSSBoYXZlIGFscmVhZHkgc3BlbnQgc29tZSB0aW1lIHRoaW5raW5nIGFib3V0IHRoaXMuIEkn bGwgdHJ5IHRvIGhhdmUgYQ0KPiBsb29rIHNob3J0bHkuDQo+IA0KPiA+IERpZCBJIG1lbnRpb24g YmVmb3JlIHRoYXQgSSdtIG5vdCBhIHNvZnR3YXJlIGVuZ2luZWVyLCBhbmQsIGJlZm9yZSBJDQo+ ID4gc3RhcnRlZCB3b3JraW5nIG9uIHRoZSBpbnNpZGUtc2VjdXJlIGRyaXZlciwgd2Fzbid0IGZh bWlsaWFyIHdpdGggQyBhdA0KPiA+IGFsbD8gOy0pIEFueSBoZWxwIHdvdWxkIGJlIGFwcHJlY2lh dGVkIHRob3VnaCEgKGFsc28gc2VlIG15IGNvbW1lbnQNCj4gPiBhYm9jZSBhYm91dCBtYWtpbmcg c2luZ2xlLWJsb2NrIHNrY2lwaGVyIGNhbGxzIGEgc3RhbmRhcmQgQVBJIGZ1bmN0aW9uKQ0KPiA+ DQo+IA0KPiBPbmx5IGEgZmV3IHRpbWVzIDotKQ0KPiANCkknbGwga2VlcCByZW1pbmRpbmcgeW91 IHRvIGtlZXAgZXhwZWN0YXRpb25zIGRvd24gdG8gcmVhbGlzdGljIGxldmVscyA7LSkNCg0KPiBC dXQgc2VyaW91c2x5LCBJIHZhbHVlIHRoZSBjb250cmlidXRpb24gYW5kIHRoZSBkaXNjdXNzaW9u LCBlc3BlY2lhbGx5DQo+IHdpdGggc29tZW9uZSB3aG9zZSBiYWNrZ3JvdW5kIGRldmlhdGVzIGZy b20gbW9zdCBjb250cmlidXRvcnMgb24gdGhpcw0KPiBsaXN0LiBIb3dldmVyLCBvbmNlIHlvdXIg QyBza2lsbHMgc3RhcnQgdG8gYmVjb21lIGFuIGltcGVkaW1lbnQsIGl0DQo+IG1pZ2h0IGJlIGJl dHRlciB0byBwcm9jZWVkIGluIGNvbGxhYm9yYXRpb24gcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIG1h a2UNCj4gc2Vuc2Ugb2Ygb3VyIHN1Z2dlc3Rpb25zLg0KPiANCkknbSBmaW5lIGVpdGhlciB3YXks IEknbSBqdXN0IHRyeWluZyB0byBoZWxwIG91dC4gRmVlbCBmcmVlIHRvIGNvbWUgdXAgDQp3aXRo IHlvdXIgb3duIHBhdGNoZXMgdGhhdCBpbXByb3ZlIG9uIG1pbmUgc29tZWhvdy4NCkknbSBhIHBy ZXR0eSBmYXN0IGxlYXJuZXIgdGhvdWdoICh1c3VhbGx5KSwgc28gbm90IHN1cmUgaG93IG11Y2gg b2YgYW4NCmltcGVkaW1lbnQgaXQgaXMgaW4gdGhlIGxvbmcoZXIpIHJ1bi4NCg0KPiANCj4gPiA+ DQo+ID4gPiA+ID4gPiAgICAgICAgIHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0d2VhazsNCj4gPiA+ ID4gPiA+ICB9Ow0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IEBAIC0zNyw3ICszNiw5IEBAIHN0 cnVjdCB4dHNfaW5zdGFuY2VfY3R4IHsNCj4gPiA+ID4gPiA+ICB9Ow0KPiA+ID4gPiA+ID4NCj4g PiA+ID4gPiA+ICBzdHJ1Y3QgcmN0eCB7DQo+ID4gPiA+ID4gPiAtICAgICAgIGxlMTI4IHQ7DQo+ ID4gPiA+ID4gPiArICAgICAgIGxlMTI4IHQsIHRjdXI7DQo+ID4gPiA+ID4gPiArICAgICAgIGlu dCByZW1fYnl0ZXMsIGlzX2VuY3J5cHQ7DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBJbnN0ZWFkIG9m IGFkZGluZyB0aGUgaXNfZW5jcnlwdCBmbGFnLCBjb3VsZCB3ZSBjaGFuZ2UgY3J5cHRfZG9uZSBp bnRvDQo+ID4gPiA+ID4gZW5jcnlwdF9kb25lL2RlY3J5cHRfZG9uZT8NCj4gPiA+ID4gPg0KPiA+ ID4gPiBUaGF0J3MgcG9zc2libGUsIGJ1dCB3aGF0IHdvdWxkIGJlIHRoZSBhZHZhbnRhZ2U/IE9r LCBpdCB3b3VsZCBzYXZlIG9uZQ0KPiA+ID4gPiBjb25kaXRpb25hbCBicmFuY2ggZm9yIHRoZSBj YXNlIHdoZXJlIHlvdSBkbyBuZWVkIENUUy4gQnV0IEkgZG91YnQgdGhhdA0KPiA+ID4gPiBpcyBz aWduaWZpY2FudCBvbiB0aGUgdG90YWwgQ1RTIG92ZXJoZWFkLiBUaGUgaW1wbGVtZW50YXRpb24g aXMgZmFyIGZyb20NCj4gPiA+ID4gb3B0aW1hbCBhbnl3YXksIGFzIHRoZSBnb2FsIHdhcyB0byBn ZXQgc29tZXRoaW5nIGZ1bmN0aW9uYWwgZmlyc3QgLi4uDQo+ID4gPiA+DQo+ID4gPg0KPiA+ID4g SXQgaXMgbm90IGFib3V0IHRoZSBjb25kaXRpb25hbCBicmFuY2gsIGJ1dCBhYm91dCBoYXZpbmcg Y2xlYW4gY29kZS4NCj4gPiA+IFNoYXJpbmcgY29kZSBiZXR3ZWVuIHRoZSBlbmNyeXB0IGFuZCBk ZWNyeXB0IHBhdGhzIG9ubHkgbWFrZXMgc2Vuc2UgaWYNCj4gPiA+IHRoZXJlIGlzIHN1ZmZpY2ll bnQgb3ZlcmxhcCwgYnV0IGdpdmVuIGhvdyBzaW1wbHkgY3J5cHRfZG9uZSBpcywgSSdkDQo+ID4g PiBwcmVmZXIgdG8ganVzdCBoYXZlIHR3byB2ZXJzaW9ucy4NCj4gPiA+DQo+ID4gSSBhY3R1YWxs eSB0aG91Z2h0IGFib3V0IHRoYXQsIGJ1dCBhdCB0aGUgdGltZSBkaWRuJ3Qgc2VlIGhvdyBJIGNv dWxkDQo+ID4gaGF2ZSBzZXBhcmF0ZSBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIGVuY3J5cHQgYW5k IGRlY3J5cHQgLi4uDQo+ID4NCj4gPiBCdXQga25vd2luZyB0aGUgY29kZSBhIGJpdCBiZXR0ZXIg bm93LCBJIHJlYWxpc2UgdGhpcyBpcyBzZXR1cCBpbg0KPiA+IGluaXRfY3J5cHQgZm9yIGV2ZXJ5 IGluZGl2aWR1YWwgY2lwaGVyIHJlcXVlc3QsIHNvIGl0IGtub3dzIGFib3V0IHRoZQ0KPiA+IGRp cmVjdGlvbiwgdGhlcmVmb3JlIGl0IGNhbiBiZSBoYW5kbGVkIHRoZXJlLg0KPiA+DQo+ID4gVEw7 RFI6IEkgd2lsbCBtYWtlIHRoYXQgY2hhbmdlLg0KPiA+DQo+IA0KPiBPSw0KPiANCj4gPg0KPiA+ ID4gPiA+ID4gKyAgICAgICAvKiBtdXN0IGJlIHRoZSBsYXN0LCBleHBhbmRlZCBiZXlvbmQgZW5k IG9mIHN0cnVjdCEgKi8NCj4gPiA+ID4gPiA+ICAgICAgICAgc3RydWN0IHNrY2lwaGVyX3JlcXVl c3Qgc3VicmVxOw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gVGhpcyBpcyBub3Qgc3VmZmljaWVudC4g WW91IGhhdmUgdG8gYWRkIGEgVEZNIGluaXQoKSBmdW5jdGlvbiB3aGljaA0KPiA+ID4gPiA+IHNl dHMgdGhlIHJlcXVlc3Qgc2l6ZS4gUGxlYXNlIGxvb2sgYXQgdGhlIGN0cyBjb2RlIGZvciBhbiBl eGFtcGxlLg0KPiA+ID4gPiA+DQo+ID4gPiA+IEkgYmVsaWV2ZSB0aGF0IGlzIGFscmVhZHkgZG9u ZSBjb3JyZWN0bHkgKHRoZW4gYWdhaW4gSSdtIG5vIGV4cGVydCkuDQo+ID4gPiA+IE5vdGUgdGhh dCBJIGRpZCAqbm90KiBhZGQgdGhlIHN1YnJlcSwgaXQgd2FzIGFscmVhZHkgdGhlcmUuIEkganVz dA0KPiA+ID4gPiBhZGRlZCBzb21lIG1vcmUgc3RydWN0IG1lbWJlcnMgdGhhdCBuZWVkZWQgdG8g YmUgYWJvdmUsIG5vdCBiZWxvdy4NCj4gPiA+ID4gSSBvcmlnaW5hbGx5IGRpZCBub3QgZXZlbiBr bm93IGl0IGNvdWxkIGdyb3cgYmV5b25kIGl0cyBzdHJ1Y3Qgc2l6ZS4NCj4gPiA+ID4NCj4gPiA+ DQo+ID4gPiBBaCwgbXkgYmFkLiBJIGRpZG4ndCBsb29rIGF0IHRoZSBjb2RlIGl0c2VsZiwgb25s eSBhdCB0aGUgcGF0Y2ggYW5kIEkNCj4gPiA+IGRpZCBub3Qgc3BvdCB0aGUgaW5pdCgpIGZ1bmN0 aW9uLg0KPiA+ID4NCj4gPiA+ID4gPiA+ICB9Ow0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IEBA IC00Nyw2ICs0OCw3IEBAIHN0YXRpYyBpbnQgc2V0a2V5KHN0cnVjdCBjcnlwdG9fc2tjaXBoZXIg KnBhcmVudCwgY29uc3QgdTgNCj4gKmtleSwNCj4gPiA+ID4gPiA+ICAgICAgICAgc3RydWN0IHBy aXYgKmN0eCA9IGNyeXB0b19za2NpcGhlcl9jdHgocGFyZW50KTsNCj4gPiA+ID4gPiA+ICAgICAg ICAgc3RydWN0IGNyeXB0b19za2NpcGhlciAqY2hpbGQ7DQo+ID4gPiA+ID4gPiAgICAgICAgIHN0 cnVjdCBjcnlwdG9fY2lwaGVyICp0d2VhazsNCj4gPiA+ID4gPiA+ICsgICAgICAgc3RydWN0IGNy eXB0b19jaXBoZXIgKmJhc2U7DQo+ID4gPiA+ID4gPiAgICAgICAgIGludCBlcnI7DQo+ID4gPiA+ ID4gPg0KPiA+ID4gPiA+ID4gICAgICAgICBlcnIgPSB4dHNfdmVyaWZ5X2tleShwYXJlbnQsIGtl eSwga2V5bGVuKTsNCj4gPiA+ID4gPiA+IEBAIC01NSw5ICs1NywxMSBAQCBzdGF0aWMgaW50IHNl dGtleShzdHJ1Y3QgY3J5cHRvX3NrY2lwaGVyICpwYXJlbnQsIGNvbnN0IHU4DQo+ICprZXksDQo+ ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gICAgICAgICBrZXlsZW4gLz0gMjsNCj4gPiA+ID4gPiA+ DQo+ID4gPiA+ID4gPiAtICAgICAgIC8qIHdlIG5lZWQgdHdvIGNpcGhlciBpbnN0YW5jZXM6IG9u ZSB0byBjb21wdXRlIHRoZSBpbml0aWFsICd0d2VhaycNCj4gPiA+ID4gPiA+IC0gICAgICAgICog YnkgZW5jcnlwdGluZyB0aGUgSVYgKHVzdWFsbHkgdGhlICdwbGFpbicgaXYpIGFuZCB0aGUgb3Ro ZXINCj4gPiA+ID4gPiA+IC0gICAgICAgICogb25lIHRvIGVuY3J5cHQgYW5kIGRlY3J5cHQgdGhl IGRhdGEgKi8NCj4gPiA+ID4gPiA+ICsgICAgICAgLyogd2UgbmVlZCB0aHJlZSBjaXBoZXIgaW5z dGFuY2VzOiBvbmUgdG8gY29tcHV0ZSB0aGUgaW5pdGlhbCAndHdlYWsnDQo+ID4gPiA+ID4gPiAr ICAgICAgICAqIGJ5IGVuY3J5cHRpbmcgdGhlIElWICh1c3VhbGx5IHRoZSAncGxhaW4nIGl2KSwg b25lIHRvIGVuY3J5cHQgYW5kDQo+ID4gPiA+ID4gPiArICAgICAgICAqIGRlY3J5cHQgdGhlIGRh dGEgYW5kIGZpbmFsbHkgb25lIHRvIGVuY3J5cHQgdGhlIGxhc3QgYmxvY2socykgZm9yDQo+ID4g PiA+ID4gPiArICAgICAgICAqIGNpcGhlciB0ZXh0IHN0ZWFsaW5nDQo+ID4gPiA+ID4gPiArICAg ICAgICAqLw0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICAgICAgICAgLyogdHdlYWsgY2lwaGVy LCB1c2VzIEtleTIgaS5lLiB0aGUgc2Vjb25kIGhhbGYgb2YgKmtleSAqLw0KPiA+ID4gPiA+ID4g ICAgICAgICB0d2VhayA9IGN0eC0+dHdlYWs7DQo+ID4gPiA+ID4gPiBAQCAtNzksNiArODMsMTMg QEAgc3RhdGljIGludCBzZXRrZXkoc3RydWN0IGNyeXB0b19za2NpcGhlciAqcGFyZW50LCBjb25z dCB1OA0KPiAqa2V5LA0KPiA+ID4gPiA+ID4gICAgICAgICBjcnlwdG9fc2tjaXBoZXJfc2V0X2Zs YWdzKHBhcmVudCwgY3J5cHRvX3NrY2lwaGVyX2dldF9mbGFncyhjaGlsZCkgJg0KPiA+ID4gPiA+ ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUFRPX1RGTV9S RVNfTUFTSyk7DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gKyAgICAgICAvKiBBbHNvIGRhdGEg Y2lwaGVyLCB1c2luZyBLZXkxLCBmb3IgYXBwbHlpbmcgQ1RTICovDQo+ID4gPiA+ID4gPiArICAg ICAgIGJhc2UgPSBjdHgtPmJhc2U7DQo+ID4gPiA+ID4gPiArICAgICAgIGNyeXB0b19jaXBoZXJf Y2xlYXJfZmxhZ3MoYmFzZSwgQ1JZUFRPX1RGTV9SRVFfTUFTSyk7DQo+ID4gPiA+ID4gPiArICAg ICAgIGNyeXB0b19jaXBoZXJfc2V0X2ZsYWdzKGJhc2UsIGNyeXB0b19za2NpcGhlcl9nZXRfZmxh Z3MocGFyZW50KSAmDQo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIENSWVBUT19URk1fUkVRX01BU0spOw0KPiA+ID4gPiA+ID4gKyAgICAgICBlcnIgPSBj cnlwdG9fY2lwaGVyX3NldGtleShiYXNlLCBrZXksIGtleWxlbik7DQo+ID4gPiA+ID4gPiArDQo+ ID4gPiA+ID4gPiAgICAgICAgIHJldHVybiBlcnI7DQo+ID4gPiA+ID4gPiAgfQ0KPiA+ID4gPiA+ ID4NCj4gPiA+ID4gPiA+IEBAIC04OCwxMyArOTksMTIgQEAgc3RhdGljIGludCBzZXRrZXkoc3Ry dWN0IGNyeXB0b19za2NpcGhlciAqcGFyZW50LCBjb25zdCB1OA0KPiAqa2V5LA0KPiA+ID4gPiA+ ID4gICAqIG11dGxpcGxlIGNhbGxzIHRvIHRoZSAnZWNiKC4uKScgaW5zdGFuY2UsIHdoaWNoIHVz dWFsbHkgd291bGQgYmUgc2xvd2VyIHRoYW4NCj4gPiA+ID4gPiA+ICAgKiBqdXN0IGRvaW5nIHRo ZSBnZjEyOG11bF94X2JsZSgpIGNhbGxzIGFnYWluLg0KPiA+ID4gPiA+ID4gICAqLw0KPiA+ID4g PiA+ID4gLXN0YXRpYyBpbnQgeG9yX3R3ZWFrKHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEs IGJvb2wgc2Vjb25kX3Bhc3MpDQo+ID4gPiA+ID4gPiArc3RhdGljIGludCB4b3JfdHdlYWsoc3Ry dWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSwgYm9vbCBzZWNvbmRfcGFzcywgbGUxMjggKnQpDQo+ ID4gPiA+ID4gPiAgew0KPiA+ID4gPiA+ID4gICAgICAgICBzdHJ1Y3QgcmN0eCAqcmN0eCA9IHNr Y2lwaGVyX3JlcXVlc3RfY3R4KHJlcSk7DQo+ID4gPiA+ID4gPiAgICAgICAgIHN0cnVjdCBjcnlw dG9fc2tjaXBoZXIgKnRmbSA9IGNyeXB0b19za2NpcGhlcl9yZXF0Zm0ocmVxKTsNCj4gPiA+ID4g PiA+ICAgICAgICAgY29uc3QgaW50IGJzID0gWFRTX0JMT0NLX1NJWkU7DQo+ID4gPiA+ID4gPiAg ICAgICAgIHN0cnVjdCBza2NpcGhlcl93YWxrIHc7DQo+ID4gPiA+ID4gPiAtICAgICAgIGxlMTI4 IHQgPSByY3R4LT50Ow0KPiA+ID4gPiA+ID4gICAgICAgICBpbnQgZXJyOw0KPiA+ID4gPiA+ID4N Cj4gPiA+ID4gPiA+ICAgICAgICAgaWYgKHNlY29uZF9wYXNzKSB7DQo+ID4gPiA+ID4gPiBAQCAt MTA0LDYgKzExNCw3IEBAIHN0YXRpYyBpbnQgeG9yX3R3ZWFrKHN0cnVjdCBza2NpcGhlcl9yZXF1 ZXN0ICpyZXEsIGJvb2wNCj4gPiA+IHNlY29uZF9wYXNzKQ0KPiA+ID4gPiA+ID4gICAgICAgICB9 DQo+ID4gPiA+ID4gPiAgICAgICAgIGVyciA9IHNrY2lwaGVyX3dhbGtfdmlydCgmdywgcmVxLCBm YWxzZSk7DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gKyAgICAgICAqdCA9IHJjdHgtPnQ7DQo+ ID4gPiA+ID4gPiAgICAgICAgIHdoaWxlICh3Lm5ieXRlcykgew0KPiA+ID4gPiA+ID4gICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBhdmFpbCA9IHcubmJ5dGVzOw0KPiA+ID4gPiA+ID4gICAg ICAgICAgICAgICAgIGxlMTI4ICp3c3JjOw0KPiA+ID4gPiA+ID4gQEAgLTExMyw4ICsxMjQsOCBA QCBzdGF0aWMgaW50IHhvcl90d2VhayhzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxLCBib29s DQo+ID4gPiBzZWNvbmRfcGFzcykNCj4gPiA+ID4gPiA+ICAgICAgICAgICAgICAgICB3ZHN0ID0g dy5kc3QudmlydC5hZGRyOw0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICAgICAgICAgICAgICAg ICBkbyB7DQo+ID4gPiA+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICBsZTEyOF94b3Iod2Rz dCsrLCAmdCwgd3NyYysrKTsNCj4gPiA+ID4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgIGdm MTI4bXVsX3hfYmxlKCZ0LCAmdCk7DQo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICBsZTEyOF94b3Iod2RzdCsrLCB0LCB3c3JjKyspOw0KPiA+ID4gPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgZ2YxMjhtdWxfeF9ibGUodCwgdCk7DQo+ID4gPiA+ID4gPiAgICAgICAgICAg ICAgICAgfSB3aGlsZSAoKGF2YWlsIC09IGJzKSA+PSBicyk7DQo+ID4gPiA+ID4gPg0KPiA+ID4g PiA+ID4gICAgICAgICAgICAgICAgIGVyciA9IHNrY2lwaGVyX3dhbGtfZG9uZSgmdywgYXZhaWwp Ow0KPiA+ID4gPiA+ID4gQEAgLTEyMywxNCArMTM0LDk3IEBAIHN0YXRpYyBpbnQgeG9yX3R3ZWFr KHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEsIGJvb2wNCj4gPiA+ID4gPiBzZWNvbmRfcGFz cykNCj4gPiA+ID4gPiA+ICAgICAgICAgcmV0dXJuIGVycjsNCj4gPiA+ID4gPiA+ICB9DQo+ID4g PiA+ID4gPg0KPiA+ID4gPiA+ID4gLXN0YXRpYyBpbnQgeG9yX3R3ZWFrX3ByZShzdHJ1Y3Qgc2tj aXBoZXJfcmVxdWVzdCAqcmVxKQ0KPiA+ID4gPiA+ID4gK3N0YXRpYyBpbnQgeG9yX3R3ZWFrX3By ZShzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxLCBsZTEyOCAqdCkNCj4gPiA+ID4gPiA+ICt7 DQo+ID4gPiA+ID4gPiArICAgICAgIHJldHVybiB4b3JfdHdlYWsocmVxLCBmYWxzZSwgdCk7DQo+ ID4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gK3N0YXRpYyBpbnQgeG9y X3R3ZWFrX3Bvc3Qoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSwgbGUxMjggKnQpDQo+ID4g PiA+ID4gPiAgew0KPiA+ID4gPiA+ID4gLSAgICAgICByZXR1cm4geG9yX3R3ZWFrKHJlcSwgZmFs c2UpOw0KPiA+ID4gPiA+ID4gKyAgICAgICByZXR1cm4geG9yX3R3ZWFrKHJlcSwgdHJ1ZSwgdCk7 DQo+ID4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gK3N0YXRpYyB2b2lk IGVuY3J5cHRfZmluaXNoX2N0cyhzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKQ0KPiA+ID4g PiA+ID4gK3sNCj4gPiA+ID4gPiA+ICsgICAgICAgc3RydWN0IHJjdHggKnJjdHggPSBza2NpcGhl cl9yZXF1ZXN0X2N0eChyZXEpOw0KPiA+ID4gPiA+ID4gKyAgICAgICAvKiBOb3QgYSBtdWx0aXBs ZSBvZiBjaXBoZXIgYmxvY2tzaXplLCBuZWVkIENUUyBhcHBsaWVkICovDQo+ID4gPiA+ID4gPiAr ICAgICAgIHN0cnVjdCBwcml2ICpjdHggPSBjcnlwdG9fc2tjaXBoZXJfY3R4KGNyeXB0b19za2Np cGhlcl9yZXF0Zm0ocmVxKSk7DQo+ID4gPiA+ID4gPiArICAgICAgIGxlMTI4IGxhc3RibG9jaywg bGFzdHB0ZXh0Ow0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKyAgICAgICAvKiBIYW5kbGUg bGFzdCBwYXJ0aWFsIGJsb2NrIC0gYXBwbHkgQ2lwaGVyIFRleHQgU3RlYWxpbmcgKi8NCj4gPiA+ ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsgICAgICAgLyogQ29weSBsYXN0IGNpcGhlcnRleHQgYmxv Y2sganVzdCBwcm9jZXNzZWQgdG8gYnVmZmVyICAqLw0KPiA+ID4gPiA+ID4gKyAgICAgICBzZ19w Y29weV90b19idWZmZXIocmVxLT5kc3QsIHNnX25lbnRzKHJlcS0+ZHN0KSwgJmxhc3RibG9jaywN Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFhUU19CTE9DS19TSVpFLA0K PiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLT5jcnlwdGxlbiAtIFhU U19CTE9DS19TSVpFKTsNCj4gPiA+ID4gPiA+ICsgICAgICAgLyogU2F2ZSBsYXN0IHBsYWludGV4 dCBieXRlcywgbmV4dCBzdGVwIG1heSBvdmVyd3JpdGUhISAqLw0KPiA+ID4gPiA+ID4gKyAgICAg ICBzZ19wY29weV90b19idWZmZXIocmVxLT5zcmMsIHNnX25lbnRzKHJlcS0+c3JjKSwgJmxhc3Rw dGV4dCwNCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIHJjdHgtPnJlbV9i eXRlcywgcmVxLT5jcnlwdGxlbik7DQo+ID4gPiA+ID4gPiArICAgICAgIC8qIENvcHkgZmlyc3Qg cmVtX2J5dGVzIG9mIGNpcGhlcnRleHQgYmVoaW5kIGxhc3QgZnVsbCBibG9jayAqLw0KPiA+ID4g PiA+ID4gKyAgICAgICBzZ19wY29weV9mcm9tX2J1ZmZlcihyZXEtPmRzdCwgc2dfbmVudHMocmVx LT5kc3QpLCAmbGFzdGJsb2NrLA0KPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICByY3R4LT5yZW1fYnl0ZXMsIHJlcS0+Y3J5cHRsZW4pOw0KPiA+ID4gPiA+ID4gKyAgICAg ICAvKg0KPiA+ID4gPiA+ID4gKyAgICAgICAgKiBDb3B5IGxhc3QgcmVtYWluaW5nIGJ5dGVzIG9m IHBsYWludGV4dCB0byBjb21iaW5lIGJ1ZmZlciwNCj4gPiA+ID4gPiA+ICsgICAgICAgICogcmVw bGFjaW5nIHBhcnQgb2YgdGhlIGNpcGhlcnRleHQNCj4gPiA+ID4gPiA+ICsgICAgICAgICovDQo+ ID4gPiA+ID4gPiArICAgICAgIG1lbWNweSgmbGFzdGJsb2NrLCAmbGFzdHB0ZXh0LCByY3R4LT5y ZW1fYnl0ZXMpOw0KPiA+ID4gPiA+ID4gKyAgICAgICAvKiBYVFMgZW5jcnlwdCB0aGUgY29tYmlu ZWQgYmxvY2sgKi8NCj4gPiA+ID4gPiA+ICsgICAgICAgbGUxMjhfeG9yKCZsYXN0YmxvY2ssICZy Y3R4LT50Y3VyLCAmbGFzdGJsb2NrKTsNCj4gPiA+ID4gPiA+ICsgICAgICAgY3J5cHRvX2NpcGhl cl9lbmNyeXB0X29uZShjdHgtPmJhc2UsICh1OCAqKSZsYXN0YmxvY2ssDQo+ID4gPiA+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHU4ICopJmxhc3RibG9jayk7DQo+ID4g PiA+ID4gPiArICAgICAgIGxlMTI4X3hvcigmbGFzdGJsb2NrLCAmcmN0eC0+dGN1ciwgJmxhc3Ri bG9jayk7DQo+ID4gPiA+ID4gPiArICAgICAgIC8qIFdyaXRlIGNvbWJpbmVkIGJsb2NrIHRvIGRz dCBhcyAybmQgbGFzdCBjaXBoZXJibG9jayAqLw0KPiA+ID4gPiA+ID4gKyAgICAgICBzZ19wY29w eV9mcm9tX2J1ZmZlcihyZXEtPmRzdCwgc2dfbmVudHMocmVxLT5kc3QpLCAmbGFzdGJsb2NrLA0K PiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYVFNfQkxPQ0tfU0laRSwN Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLT5jcnlwdGxlbiAt IFhUU19CTE9DS19TSVpFKTsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsgICAgICAgLyog Rml4IHVwIG9yaWdpbmFsIHJlcXVlc3QgbGVuZ3RoICovDQo+ID4gPiA+ID4gPiArICAgICAgIHJl cS0+Y3J5cHRsZW4gKz0gcmN0eC0+cmVtX2J5dGVzOw0KPiA+ID4gPiA+ID4gKyAgICAgICByZXR1 cm47DQo+ID4gPiA+ID4gPiAgfQ0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IC1zdGF0aWMgaW50 IHhvcl90d2Vha19wb3N0KHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEpDQo+ID4gPiA+ID4g PiArc3RhdGljIHZvaWQgZGVjcnlwdF9maW5pc2hfY3RzKHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0 ICpyZXEpDQo+ID4gPiA+ID4gPiAgew0KPiA+ID4gPiA+ID4gLSAgICAgICByZXR1cm4geG9yX3R3 ZWFrKHJlcSwgdHJ1ZSk7DQo+ID4gPiA+ID4gPiArICAgICAgIHN0cnVjdCByY3R4ICpyY3R4ID0g c2tjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsNCj4gPiA+ID4gPiA+ICsgICAgICAgLyogTm90IGEg bXVsdGlwbGUgb2YgY2lwaGVyIGJsb2Nrc2l6ZSwgbmVlZCBDVFMgYXBwbGllZCAqLw0KPiA+ID4g PiA+ID4gKyAgICAgICBzdHJ1Y3QgcHJpdiAqY3R4ID0gY3J5cHRvX3NrY2lwaGVyX2N0eChjcnlw dG9fc2tjaXBoZXJfcmVxdGZtKHJlcSkpOw0KPiA+ID4gPiA+ID4gKyAgICAgICBsZTEyOCB0bmV4 dCwgbGFzdGJsb2NrLCBsYXN0Y3RleHQ7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArICAg ICAgIC8qIEhhbmRsZSBsYXN0IDIgKHBhcnRpYWwpIGJsb2NrcyAtIGFwcGx5IENpcGhlciBUZXh0 IFN0ZWFsaW5nICovDQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArICAgICAgIC8qIENvcHkg bGFzdCBmdWxsIGNpcGhlcnRleHQgYmxvY2sgdG8gYnVmZmVyICAqLw0KPiA+ID4gPiA+ID4gKyAg ICAgICBzZ19wY29weV90b19idWZmZXIocmVxLT5zcmMsIHNnX25lbnRzKHJlcS0+c3JjKSwgJmxh c3RibG9jaywNCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFhUU19CTE9D S19TSVpFLCByZXEtPmNyeXB0bGVuKTsNCj4gPiA+ID4gPiA+ICsgICAgICAgLyogRGVjcnlwdCBs YXN0IGZ1bGwgYmxvY2sgdXNpbmcgKm5leHQqIHR3ZWFrICovDQo+ID4gPiA+ID4gPiArICAgICAg IGdmMTI4bXVsX3hfYmxlKCZ0bmV4dCwgJnJjdHgtPnRjdXIpOw0KPiA+ID4gPiA+ID4gKyAgICAg ICBsZTEyOF94b3IoJmxhc3RibG9jaywgJnRuZXh0LCAmbGFzdGJsb2NrKTsNCj4gPiA+ID4gPiA+ ICsgICAgICAgY3J5cHRvX2NpcGhlcl9kZWNyeXB0X29uZShjdHgtPmJhc2UsICh1OCAqKSZsYXN0 YmxvY2ssDQo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHU4 ICopJmxhc3RibG9jayk7DQo+ID4gPiA+ID4gPiArICAgICAgIGxlMTI4X3hvcigmbGFzdGJsb2Nr LCAmdG5leHQsICZsYXN0YmxvY2spOw0KPiA+ID4gPiA+ID4gKyAgICAgICAvKiBTYXZlIGxhc3Qg Y2lwaGVydGV4dCBieXRlcywgbmV4dCBzdGVwIG1heSBvdmVyd3JpdGUhISAqLw0KPiA+ID4gPiA+ ID4gKyAgICAgICBzZ19wY29weV90b19idWZmZXIocmVxLT5zcmMsIHNnX25lbnRzKHJlcS0+c3Jj KSwgJmxhc3RjdGV4dCwNCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIHJj dHgtPnJlbV9ieXRlcywgcmVxLT5jcnlwdGxlbiArIFhUU19CTE9DS19TSVpFKTsNCj4gPiA+ID4g PiA+ICsgICAgICAgLyogQ29weSBmaXJzdCByZW1fYnl0ZXMgb2YgdGhpcyBwdGV4dCBhcyBsYXN0 IHBhcnRpYWwgYmxvY2sgKi8NCj4gPiA+ID4gPiA+ICsgICAgICAgc2dfcGNvcHlfZnJvbV9idWZm ZXIocmVxLT5kc3QsIHNnX25lbnRzKHJlcS0+ZHN0KSwgJmxhc3RibG9jaywNCj4gPiA+ID4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmN0eC0+cmVtX2J5dGVzLA0KPiA+ID4gPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEtPmNyeXB0bGVuICsgWFRTX0JMT0NL X1NJWkUpOw0KPiA+ID4gPiA+ID4gKyAgICAgICAvKg0KPiA+ID4gPiA+ID4gKyAgICAgICAgKiBD b3B5IGxhc3QgcmVtYWluaW5nIGJ5dGVzIG9mICJwbGFpbnRleHQiIHRvIGNvbWJpbmUgYnVmZmVy LA0KPiA+ID4gPiA+ID4gKyAgICAgICAgKiByZXBsYWNpbmcgcGFydCBvZiB0aGUgY2lwaGVydGV4 dA0KPiA+ID4gPiA+ID4gKyAgICAgICAgKi8NCj4gPiA+ID4gPiA+ICsgICAgICAgbWVtY3B5KCZs YXN0YmxvY2ssICZsYXN0Y3RleHQsIHJjdHgtPnJlbV9ieXRlcyk7DQo+ID4gPiA+ID4gPiArICAg ICAgIC8qIFhUUyBkZWNyeXB0IHRoZSBjb21iaW5lZCBibG9jayAqLw0KPiA+ID4gPiA+ID4gKyAg ICAgICBsZTEyOF94b3IoJmxhc3RibG9jaywgJnJjdHgtPnRjdXIsICZsYXN0YmxvY2spOw0KPiA+ ID4gPiA+ID4gKyAgICAgICBjcnlwdG9fY2lwaGVyX2RlY3J5cHRfb25lKGN0eC0+YmFzZSwgKHU4 ICopJmxhc3RibG9jaywNCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAodTggKikmbGFzdGJsb2NrKTsNCj4gPiA+ID4gPiA+ICsgICAgICAgbGUxMjhfeG9yKCZs YXN0YmxvY2ssICZyY3R4LT50Y3VyLCAmbGFzdGJsb2NrKTsNCj4gPiA+ID4gPiA+ICsgICAgICAg LyogV3JpdGUgY29tYmluZWQgYmxvY2sgdG8gZHN0IGFzIDJuZCBsYXN0IHBsYWludGV4dCBibG9j ayAqLw0KPiA+ID4gPiA+ID4gKyAgICAgICBzZ19wY29weV9mcm9tX2J1ZmZlcihyZXEtPmRzdCwg c2dfbmVudHMocmVxLT5kc3QpLCAmbGFzdGJsb2NrLA0KPiA+ID4gPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBYVFNfQkxPQ0tfU0laRSwgcmVxLT5jcnlwdGxlbik7DQo+ID4gPiA+ ID4gPiArDQo+ID4gPiA+ID4gPiArICAgICAgIC8qIEZpeCB1cCBvcmlnaW5hbCByZXF1ZXN0IGxl bmd0aCAqLw0KPiA+ID4gPiA+ID4gKyAgICAgICByZXEtPmNyeXB0bGVuICs9IHJjdHgtPnJlbV9i eXRlcyArIFhUU19CTE9DS19TSVpFOw0KPiA+ID4gPiA+ID4gKyAgICAgICByZXR1cm47DQo+ID4g PiA+ID4gPiAgfQ0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICBzdGF0aWMgdm9pZCBjcnlwdF9k b25lKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYXJlcSwgaW50IGVycikNCj4gPiA+ID4g PiA+IEBAIC0xMzksOSArMjMzLDE2IEBAIHN0YXRpYyB2b2lkIGNyeXB0X2RvbmUoc3RydWN0IGNy eXB0b19hc3luY19yZXF1ZXN0ICphcmVxLA0KPiBpbnQNCj4gPiA+IGVycikNCj4gPiA+ID4gPiA+ DQo+ID4gPiA+ID4gPiAgICAgICAgIGlmICghZXJyKSB7DQo+ID4gPiA+ID4gPiAgICAgICAgICAg ICAgICAgc3RydWN0IHJjdHggKnJjdHggPSBza2NpcGhlcl9yZXF1ZXN0X2N0eChyZXEpOw0KPiA+ ID4gPiA+ID4gKyAgICAgICAgICAgICAgIGxlMTI4IHQ7DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ ID4gICAgICAgICAgICAgICAgIHJjdHgtPnN1YnJlcS5iYXNlLmZsYWdzICY9IH5DUllQVE9fVEZN X1JFUV9NQVlfU0xFRVA7DQo+ID4gPiA+ID4gPiAtICAgICAgICAgICAgICAgZXJyID0geG9yX3R3 ZWFrX3Bvc3QocmVxKTsNCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICBlcnIgPSB4b3JfdHdl YWtfcG9zdChyZXEsICZ0KTsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsgICAgICAgICAg ICAgICBpZiAodW5saWtlbHkoIWVyciAmJiByY3R4LT5yZW1fYnl0ZXMpKSB7DQo+ID4gPiA+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICByY3R4LT5pc19lbmNyeXB0ID8NCj4gPiA+ID4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgZW5jcnlwdF9maW5pc2hfY3RzKHJlcSkgOg0KPiA+ ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBkZWNyeXB0X2ZpbmlzaF9jdHMocmVx KTsNCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gPiA+ID4gPiAgICAgICAgIH0N Cj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAgICAgICAgIHNrY2lwaGVyX3JlcXVlc3RfY29tcGxl dGUocmVxLCBlcnIpOw0KPiA+ID4gPiA+ID4gQEAgLTE2NywxMCArMjY4LDQ1IEBAIHN0YXRpYyBp bnQgZW5jcnlwdChzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKQ0KPiA+ID4gPiA+ID4gICAg ICAgICBzdHJ1Y3QgcmN0eCAqcmN0eCA9IHNrY2lwaGVyX3JlcXVlc3RfY3R4KHJlcSk7DQo+ID4g PiA+ID4gPiAgICAgICAgIHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpzdWJyZXEgPSAmcmN0eC0+ c3VicmVxOw0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICsgICAgICAgLyogSUVFRSBQMTYxOSBk b2VzIG5vdCBhbGxvdyBsZXNzIGRhdGEgdGhhbiBibG9jayBjaXBoZXIgYmxvY2tzaXplICovDQo+ ID4gPiA+ID4gPiArICAgICAgIGlmICh1bmxpa2VseShyZXEtPmNyeXB0bGVuIDwgWFRTX0JMT0NL X1NJWkUpKQ0KPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gICAgICAgICBpbml0X2NyeXB0KHJlcSk7DQo+ID4gPiA+ ID4gPiAtICAgICAgIHJldHVybiB4b3JfdHdlYWtfcHJlKHJlcSkgPzoNCj4gPiA+ID4gPiA+ICsN Cj4gPiA+ID4gPiA+ICsgICAgICAgLyogdmFsaWQgYnl0ZXMgaW4gbGFzdCBjcnlwdG8gYmxvY2sg Ki8NCj4gPiA+ID4gPiA+ICsgICAgICAgcmN0eC0+cmVtX2J5dGVzID0gcmVxLT5jcnlwdGxlbiAm IChYVFNfQkxPQ0tfU0laRSAtIDEpOw0KPiA+ID4gPiA+ID4gKyAgICAgICBpZiAodW5saWtlbHko cmN0eC0+cmVtX2J5dGVzKSkgew0KPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIC8qIE5vdCBh IG11bHRpcGxlIG9mIGNpcGhlciBibG9ja3NpemUsIG5lZWQgQ1RTIGFwcGxpZWQgKi8NCj4gPiA+ ID4gPiA+ICsgICAgICAgICAgICAgICBpbnQgZXJyID0gMDsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ ID4gPiA+ICsgICAgICAgICAgICAgICAvKiBGaXJzdCBwcm9jZXNzIGFsbCAqZnVsbCogY2lwaGVy IGJsb2NrcyAqLw0KPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIHJlcS0+Y3J5cHRsZW4gLT0g cmN0eC0+cmVtX2J5dGVzOw0KPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIHN1YnJlcS0+Y3J5 cHRsZW4gLT0gcmN0eC0+cmVtX2J5dGVzOw0KPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIGVy ciA9IHhvcl90d2Vha19wcmUocmVxLCAmcmN0eC0+dGN1cik7DQo+ID4gPiA+ID4gPiArICAgICAg ICAgICAgICAgaWYgKGVycikNCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gZW5jcnlwdF9leGl0Ow0KPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIHJjdHgtPmlzX2Vu Y3J5cHQgPSAxOw0KPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIGVyciA9IGNyeXB0b19za2Np cGhlcl9lbmNyeXB0KHN1YnJlcSk7DQo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgaWYgKGVy cikNCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5jcnlwdF9leGl0 Ow0KPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIGVyciA9IHhvcl90d2Vha19wb3N0KHJlcSwg JnJjdHgtPnRjdXIpOw0KPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIGlmIChlcnIpDQo+ID4g PiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVuY3J5cHRfZXhpdDsNCj4gPiA+ ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICBlbmNyeXB0X2ZpbmlzaF9jdHMo cmVxKTsNCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiA+ID4gPiA+ ICsNCj4gPiA+ID4gPiA+ICtlbmNyeXB0X2V4aXQ6DQo+ID4gPiA+ID4gPiArICAgICAgICAgICAg ICAgLyogRml4IHVwIG9yaWdpbmFsIHJlcXVlc3QgbGVuZ3RoICovDQo+ID4gPiA+ID4gPiArICAg ICAgICAgICAgICAgcmVxLT5jcnlwdGxlbiArPSByY3R4LT5yZW1fYnl0ZXM7DQo+ID4gPiA+ID4g PiArICAgICAgICAgICAgICAgcmV0dXJuIGVycjsNCj4gPiA+ID4gPiA+ICsgICAgICAgfQ0KPiA+ ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKyAgICAgICAvKiBNdWx0aXBsZSBvZiBjaXBoZXIgYmxv Y2tzaXplLCBubyBDVFMgcmVxdWlyZWQgKi8NCj4gPiA+ID4gPiA+ICsgICAgICAgcmV0dXJuIHhv cl90d2Vha19wcmUocmVxLCAmcmN0eC0+dGN1cikgPzoNCj4gPiA+ID4gPiA+ICAgICAgICAgICAg ICAgICBjcnlwdG9fc2tjaXBoZXJfZW5jcnlwdChzdWJyZXEpID86DQo+ID4gPiA+ID4gPiAtICAg ICAgICAgICAgICAgeG9yX3R3ZWFrX3Bvc3QocmVxKTsNCj4gPiA+ID4gPiA+ICsgICAgICAgICAg ICAgICB4b3JfdHdlYWtfcG9zdChyZXEsICZyY3R4LT50Y3VyKTsNCj4gPiA+ID4gPiA+ICB9DQo+ ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gIHN0YXRpYyBpbnQgZGVjcnlwdChzdHJ1Y3Qgc2tjaXBo ZXJfcmVxdWVzdCAqcmVxKQ0KPiA+ID4gPiA+ID4gQEAgLTE3OCwxMCArMzE0LDUwIEBAIHN0YXRp YyBpbnQgZGVjcnlwdChzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKQ0KPiA+ID4gPiA+ID4g ICAgICAgICBzdHJ1Y3QgcmN0eCAqcmN0eCA9IHNrY2lwaGVyX3JlcXVlc3RfY3R4KHJlcSk7DQo+ ID4gPiA+ID4gPiAgICAgICAgIHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpzdWJyZXEgPSAmcmN0 eC0+c3VicmVxOw0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICsgICAgICAgLyogSUVFRSBQMTYx OSBkb2VzIG5vdCBhbGxvdyBsZXNzIGRhdGEgdGhhbiBibG9jayBjaXBoZXIgYmxvY2tzaXplICov DQo+ID4gPiA+ID4gPiArICAgICAgIGlmICh1bmxpa2VseShyZXEtPmNyeXB0bGVuIDwgWFRTX0JM T0NLX1NJWkUpKQ0KPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0K PiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gICAgICAgICBpbml0X2NyeXB0KHJlcSk7DQo+ID4g PiA+ID4gPiAtICAgICAgIHJldHVybiB4b3JfdHdlYWtfcHJlKHJlcSkgPzoNCj4gPiA+ID4gPiA+ ICsNCj4gPiA+ID4gPiA+ICsgICAgICAgLyogdmFsaWQgYnl0ZXMgaW4gbGFzdCBjcnlwdG8gYmxv Y2sgKi8NCj4gPiA+ID4gPiA+ICsgICAgICAgcmN0eC0+cmVtX2J5dGVzID0gcmVxLT5jcnlwdGxl biAmIChYVFNfQkxPQ0tfU0laRSAtIDEpOw0KPiA+ID4gPiA+ID4gKyAgICAgICBpZiAodW5saWtl bHkocmN0eC0+cmVtX2J5dGVzKSkgew0KPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIGludCBl cnIgPSAwOw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIC8qIEZp cnN0IHByb2Nlc3MgYWxsIGJ1dCB0aGUgbGFzdCghKSBmdWxsIGNpcGhlciBibG9ja3MgKi8NCj4g PiA+ID4gPiA+ICsgICAgICAgICAgICAgICByZXEtPmNyeXB0bGVuIC09IHJjdHgtPnJlbV9ieXRl cyArIFhUU19CTE9DS19TSVpFOw0KPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIHN1YnJlcS0+ Y3J5cHRsZW4gLT0gcmN0eC0+cmVtX2J5dGVzICsgWFRTX0JMT0NLX1NJWkU7DQo+ID4gPiA+ID4g PiArICAgICAgICAgICAgICAgLyogTWF5IG5vdCBoYXZlIGFueSBmdWxsIGJsb2NrcyB0byBwcm9j ZXNzIGhlcmUgKi8NCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICBpZiAocmVxLT5jcnlwdGxl bikgew0KPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZXJyID0geG9yX3R3ZWFr X3ByZShyZXEsICZyY3R4LT50Y3VyKTsNCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIGlmIChlcnIpDQo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdvdG8gZGVjcnlwdF9leGl0Ow0KPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg cmN0eC0+aXNfZW5jcnlwdCA9IDA7DQo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICBlcnIgPSBjcnlwdG9fc2tjaXBoZXJfZGVjcnlwdChzdWJyZXEpOw0KPiA+ID4gPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikNCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ290byBkZWNyeXB0X2V4aXQ7DQo+ID4gPiA+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICBlcnIgPSB4b3JfdHdlYWtfcG9zdChyZXEsICZyY3R4LT50Y3VyKTsN Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpDQo+ID4gPiA+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZGVjcnlwdF9leGl0Ow0KPiA+ ID4gPiA+ID4gKyAgICAgICAgICAgICAgIH0gZWxzZSB7DQo+ID4gPiA+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICAvKiBTdGFydCBmcm9tIGluaXRpYWwgdHdlYWsgKi8NCj4gPiA+ID4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgIHJjdHgtPnRjdXIgPSByY3R4LT50Ow0KPiA+ID4gPiA+ ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsgICAgICAg ICAgICAgICBkZWNyeXB0X2ZpbmlzaF9jdHMocmVxKTsNCj4gPiA+ID4gPiA+ICsgICAgICAgICAg ICAgICByZXR1cm4gMDsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICtkZWNyeXB0X2V4aXQ6 DQo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgLyogRml4IHVwIG9yaWdpbmFsIHJlcXVlc3Qg bGVuZ3RoICovDQo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgcmVxLT5jcnlwdGxlbiArPSBy Y3R4LT5yZW1fYnl0ZXMgKyBYVFNfQkxPQ0tfU0laRTsNCj4gPiA+ID4gPiA+ICsgICAgICAgICAg ICAgICByZXR1cm4gZXJyOw0KPiA+ID4gPiA+ID4gKyAgICAgICB9DQo+ID4gPiA+ID4gPiArDQo+ ID4gPiA+ID4gPiArICAgICAgIC8qIE11bHRpcGxlIG9mIGNpcGhlciBibG9ja3NpemUsIG5vIENU UyByZXF1aXJlZCAqLw0KPiA+ID4gPiA+ID4gKyAgICAgICByZXR1cm4geG9yX3R3ZWFrX3ByZShy ZXEsICZyY3R4LT50Y3VyKSA/Og0KPiA+ID4gPiA+ID4gICAgICAgICAgICAgICAgIGNyeXB0b19z a2NpcGhlcl9kZWNyeXB0KHN1YnJlcSkgPzoNCj4gPiA+ID4gPiA+IC0gICAgICAgICAgICAgICB4 b3JfdHdlYWtfcG9zdChyZXEpOw0KPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIHhvcl90d2Vh a19wb3N0KHJlcSwgJnJjdHgtPnRjdXIpOw0KPiA+ID4gPiA+ID4gIH0NCj4gPiA+ID4gPiA+DQo+ ID4gPiA+ID4gPiAgc3RhdGljIGludCBpbml0X3RmbShzdHJ1Y3QgY3J5cHRvX3NrY2lwaGVyICp0 Zm0pDQo+ID4gPiA+ID4gPiBAQCAtMTkxLDYgKzM2Nyw3IEBAIHN0YXRpYyBpbnQgaW5pdF90Zm0o c3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtKQ0KPiA+ID4gPiA+ID4gICAgICAgICBzdHJ1Y3Qg cHJpdiAqY3R4ID0gY3J5cHRvX3NrY2lwaGVyX2N0eCh0Zm0pOw0KPiA+ID4gPiA+ID4gICAgICAg ICBzdHJ1Y3QgY3J5cHRvX3NrY2lwaGVyICpjaGlsZDsNCj4gPiA+ID4gPiA+ICAgICAgICAgc3Ry dWN0IGNyeXB0b19jaXBoZXIgKnR3ZWFrOw0KPiA+ID4gPiA+ID4gKyAgICAgICBzdHJ1Y3QgY3J5 cHRvX2NpcGhlciAqYmFzZTsNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAgICAgICAgIGNoaWxk ID0gY3J5cHRvX3NwYXduX3NrY2lwaGVyKCZpY3R4LT5zcGF3bik7DQo+ID4gPiA+ID4gPiAgICAg ICAgIGlmIChJU19FUlIoY2hpbGQpKQ0KPiA+ID4gPiA+ID4gQEAgLTIwNiw2ICszODMsMTYgQEAg c3RhdGljIGludCBpbml0X3RmbShzdHJ1Y3QgY3J5cHRvX3NrY2lwaGVyICp0Zm0pDQo+ID4gPiA+ ID4gPg0KPiA+ID4gPiA+ID4gICAgICAgICBjdHgtPnR3ZWFrID0gdHdlYWs7DQo+ID4gPiA+ID4g Pg0KPiA+ID4gPiA+ID4gKyAgICAgICBiYXNlID0gY3J5cHRvX2FsbG9jX2NpcGhlcihpY3R4LT5u YW1lLCAwLCAwKTsNCj4gPiA+ID4gPiA+ICsgICAgICAgaWYgKElTX0VSUihiYXNlKSkgew0KPiA+ ID4gPiA+ID4gKyAgICAgICAgICAgICAgIGNyeXB0b19mcmVlX3NrY2lwaGVyKGN0eC0+Y2hpbGQp Ow0KPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIGNyeXB0b19mcmVlX2NpcGhlcihjdHgtPnR3 ZWFrKTsNCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihiYXNlKTsN Cj4gPiA+ID4gPiA+ICsgICAgICAgfQ0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKyAgICAg ICBjdHgtPmJhc2UgPSBiYXNlOw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKyAgICAgICAv KiBzdHJ1Y3QgcmN0eCBleHBhbmRlZCBieSBzdWIgY2lwaGVyIHJlcXVlc3Qgc2l6ZSEgKi8NCj4g PiA+ID4gPiA+ICAgICAgICAgY3J5cHRvX3NrY2lwaGVyX3NldF9yZXFzaXplKHRmbSwgY3J5cHRv X3NrY2lwaGVyX3JlcXNpemUoY2hpbGQpICsNCj4gPiA+ID4gPiA+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCByY3R4KSk7DQo+ID4gPiA+ID4g Pg0KPiA+ID4gPiA+ID4gQEAgLTIxOCw2ICs0MDUsNyBAQCBzdGF0aWMgdm9pZCBleGl0X3RmbShz dHJ1Y3QgY3J5cHRvX3NrY2lwaGVyICp0Zm0pDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gICAg ICAgICBjcnlwdG9fZnJlZV9za2NpcGhlcihjdHgtPmNoaWxkKTsNCj4gPiA+ID4gPiA+ICAgICAg ICAgY3J5cHRvX2ZyZWVfY2lwaGVyKGN0eC0+dHdlYWspOw0KPiA+ID4gPiA+ID4gKyAgICAgICBj cnlwdG9fZnJlZV9jaXBoZXIoY3R4LT5iYXNlKTsNCj4gPiA+ID4gPiA+ICB9DQo+ID4gPiA+ID4g Pg0KPiA+ID4gPiA+ID4gIHN0YXRpYyB2b2lkIGZyZWUoc3RydWN0IHNrY2lwaGVyX2luc3RhbmNl ICppbnN0KQ0KPiA+ID4gPiA+ID4gQEAgLTMxNCwxMSArNTAyLDEyIEBAIHN0YXRpYyBpbnQgY3Jl YXRlKHN0cnVjdCBjcnlwdG9fdGVtcGxhdGUgKnRtcGwsIHN0cnVjdA0KPiBydGF0dHINCj4gPiA+ ID4gPiAqKnRiKQ0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICAgICAgICAgaW5zdC0+YWxnLmJh c2UuY3JhX2ZsYWdzID0gYWxnLT5iYXNlLmNyYV9mbGFncyAmIENSWVBUT19BTEdfQVNZTkM7DQo+ ID4gPiA+ID4gPiAgICAgICAgIGluc3QtPmFsZy5iYXNlLmNyYV9wcmlvcml0eSA9IGFsZy0+YmFz ZS5jcmFfcHJpb3JpdHk7DQo+ID4gPiA+ID4gPiAtICAgICAgIGluc3QtPmFsZy5iYXNlLmNyYV9i bG9ja3NpemUgPSBYVFNfQkxPQ0tfU0laRTsNCj4gPiA+ID4gPiA+ICsgICAgICAgaW5zdC0+YWxn LmJhc2UuY3JhX2Jsb2Nrc2l6ZSA9IDE7DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBJIGRvbid0IHRo aW5rIHRoaXMgaXMgbmVjZXNzYXJ5IG9yIGNvcnJlY3QuDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ ICAgICAgICAgaW5zdC0+YWxnLmJhc2UuY3JhX2FsaWdubWFzayA9IGFsZy0+YmFzZS5jcmFfYWxp Z25tYXNrIHwNCj4gPiA+ID4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChfX2FsaWdub2ZfXyh1NjQpIC0gMSk7DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gICAg ICAgICBpbnN0LT5hbGcuaXZzaXplID0gWFRTX0JMT0NLX1NJWkU7DQo+ID4gPiA+ID4gPiArICAg ICAgIGluc3QtPmFsZy5jaHVua3NpemUgPSBYVFNfQkxPQ0tfU0laRTsNCj4gPiA+ID4gPg0KPiA+ ID4gPiA+IC4uLiBhbmQgeW91IGRvbid0IG5lZWQgdGhpcyBpZiB5b3UgZHJvcCB0aGUgYWJvdmUg Y2hhbmdlLg0KPiA+ID4gPiA+DQo+ID4gPg0KPiA+ID4gQW55IGNvbW1lbnRzIGhlcmU/DQo+ID4g Pg0KPiA+IEFjdHVhbGx5LCBJIHByZXZpb3VzbHkgbWlzc2VkIHRoaXMgcmVtYXJrLCBkaWRuJ3Qg c2Nyb2xsIHRoaXMgZmFyIGRvd24uDQo+ID4gQnV0IHdoeSBkb24ndCB5b3UgYmVsaWV2ZSB0aGUg YmxvY2tzaXplID0gMTYgaXMgY29ycmVjdD8gV2l0aCBDVFMgaW4gdGhlDQo+ID4gbWl4LCB0aGVy ZSBpcyBubyAxNiBieXRlICBibG9ja3NpemUgcmVzdHJpY3Rpb24gYW55bW9yZSwgdGhlIGlucHV0 IGNhbiBiZQ0KPiA+IGFueSBudW1iZXIgYnl0ZXMsIGp1c3QgbGlrZSBhIHN0cmVhbWNpcGhlci4g V2hpY2ggYWxzbyBzZWVtIHRvIHNwZWNpZnkNCj4gPiBibG9ja3NpemUgPSAxLCBpLmUuIHNlZSB0 aGUgY3RyKCkgdGVtcGxhdGUuDQo+ID4gU28gSSB0aGluayBpdCBpcyBib3RoIG5lY2Vzc2FyeSBh bmQgY29ycmVjdD8NCj4gPg0KPiANCj4gTm8gaXQgaXMgbm90DQo+IA0KPiBjcnlwdG8vY3RzLnMg aXMgcHJvYmFibHkgYSBiZXR0ZXIgcmVmZXJlbmNlIHRoYW4gY3RyLmMgdG8gaW5mZXIgdGhpbmdz DQo+IGFib3V0IGltcGxlbWVudGluZyBibG9jayBjaXBoZXJzIHRoYXQgY2FuIG9wZXJhdGUgb24g YXJiaXRyYXJ5IGxlbmd0aHMNCj4gPj0gdGhlIGJsb2NrIHNpemUuDQo+IA0KSG1tbSAuLi4geWVh aCwgc28gT0ssIHRoYXQgZG9lc24ndCBzZXQgdGhlIGJsb2Nrc2l6ZSB0byAxLg0KU3RpbGwgZG9l c24ndCByZWFsbHkgZXhwbGFpbiBhbnl0aGluZyB0aG91Z2guIFNvIHdoYXQgZG8gYmxvY2tzaXpl IGFuZA0KY2h1bmtzaXplIGRvIHRoZW4/IEhvdyB3b3VsZCB5b3UgcmVzdHJpY3QgaW5wdXQgdG8g Y2lwaGVyIGJsb2Nrc2lkZSANCm11bHRpcGxlcyBhcyByZXF1aXJlZCBmb3IgZS5nLiBFQ0IgYW5k IENCQz8NCg0KPiA+ID4NCj4gPiA+ID4gPiA+ICAgICAgICAgaW5zdC0+YWxnLm1pbl9rZXlzaXpl ID0gY3J5cHRvX3NrY2lwaGVyX2FsZ19taW5fa2V5c2l6ZShhbGcpICogMjsNCj4gPiA+ID4gPiA+ ICAgICAgICAgaW5zdC0+YWxnLm1heF9rZXlzaXplID0gY3J5cHRvX3NrY2lwaGVyX2FsZ19tYXhf a2V5c2l6ZShhbGcpICogMjsNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAtLQ0KPiA+ID4gPiA+ ID4gMS44LjMuMQ0KPiA+ID4gPg0KPiA+ID4gPiBSZWdhcmRzLA0KPiA+ID4gPiBQYXNjYWwgdmFu IExlZXV3ZW4NCj4gPiA+ID4gU2lsaWNvbiBJUCBBcmNoaXRlY3QsIE11bHRpLVByb3RvY29sIEVu Z2luZXMgQCBWZXJpbWF0cml4DQo+ID4gPiA+IHd3dy5pbnNpZGVzZWN1cmUuY29tDQo+ID4gPiA+ DQo+ID4NCj4gPiBSZWdhcmRzLA0KPiA+IFBhc2NhbCB2YW4gTGVldXdlbg0KPiA+IFNpbGljb24g SVAgQXJjaGl0ZWN0LCBNdWx0aS1Qcm90b2NvbCBFbmdpbmVzIEAgVmVyaW1hdHJpeA0KPiA+IHd3 dy5pbnNpZGVzZWN1cmUuY29tDQo+ID4NCg0KDQpSZWdhcmRzLA0KUGFzY2FsIHZhbiBMZWV1d2Vu DQpTaWxpY29uIElQIEFyY2hpdGVjdCwgTXVsdGktUHJvdG9jb2wgRW5naW5lcyBAIFZlcmltYXRy aXgNCnd3dy5pbnNpZGVzZWN1cmUuY29tDQo=