From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70053.outbound.protection.outlook.com [40.107.7.53]) by dpdk.org (Postfix) with ESMTP id 1AD1D1BCE9 for ; Fri, 21 Dec 2018 09:41:46 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WMFG9PjR2ZHxFl4JCMFKavHOginLxF/EzoeAlkgaj10=; b=Sn7ugzkeClT6z3f6wbN+9thNq1LGUp0rkhvShbKcQlYtQNf6JLJjm7Bfsgp7CjHzqDa12RPbiQqTjFyGdp8RrpfUEmU6CIIE4hSJ6YPkfE3Mj6ySqkkWu9iio94iWQC0JUNOKOknpdv6I0bmPeYwn81TO2AYnZHWfJP+hHzSrfo= Received: from VI1PR08MB3167.eurprd08.prod.outlook.com (52.133.15.142) by VI1PR08MB2672.eurprd08.prod.outlook.com (10.175.245.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1425.22; Fri, 21 Dec 2018 08:41:43 +0000 Received: from VI1PR08MB3167.eurprd08.prod.outlook.com ([fe80::b5a5:e179:34f1:7d21]) by VI1PR08MB3167.eurprd08.prod.outlook.com ([fe80::b5a5:e179:34f1:7d21%5]) with mapi id 15.20.1446.020; Fri, 21 Dec 2018 08:41:42 +0000 From: "Gavin Hu (Arm Technology China)" To: Maxime Coquelin , "dev@dpdk.org" , "jfreimann@redhat.com" , "tiwei.bie@intel.com" , "zhihong.wang@intel.com" CC: nd , nd Thread-Topic: [dpdk-dev] [PATCH v3 3/3] net/virtio: improve batching in mergeable path Thread-Index: AQHUmQhCna+AJhepDk+EMWAhC4jNfaWI36HA Date: Fri, 21 Dec 2018 08:41:42 +0000 Message-ID: References: <20181220172718.9615-1-maxime.coquelin@redhat.com> <20181220172718.9615-4-maxime.coquelin@redhat.com> <37084fdf-c798-12fb-a071-b375f12eb253@redhat.com> In-Reply-To: <37084fdf-c798-12fb-a071-b375f12eb253@redhat.com> 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=Gavin.Hu@arm.com; x-originating-ip: [113.29.88.7] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; VI1PR08MB2672; 6:cmEYAJC6C7TqHJHBQ4dIQX9oGpaKjYWBSf+zRsy8EcjqQwf0m64ZH7knYJ17udUeTeUjG7deBY/wRB9tClob8gtljWnfqS/XKGQ4m2CC8yh6mIDx03vvlS3STOdeK/YsEVLIcLYUeUpJMb6WQP7Hmzp/Cowx2/+YjyeVQyyF6cUla/+ZxyW9HLBbdpaZPoHIn9gF6+cBsQ8cSxv1vWy691zGtcJyObTNxRe0K1wKWDfVKY0E5xdtNdKDB+pVE7XKj8wGtozu7QPNn1m/G2wk2QSfURTlCIneKYY4roPF5JKPJH3LVzsq//V2fYuMQCSPSoQW5X43ui6hDktm5Ex0Z6h5+QQJyab753+Z+2oi1RlIJXz80HwTn80SQiq9pBjyCRlm9fdw5tqf/fKDQYSlPpynjelrorgfTMxHCEUMagcrk6IKe8r5ICy+CCykpV1q6ym9Iicgcv1iYjYaTD7o1A==; 5:fvNxi/WlT9OO4B1guwJtMFBm1bPc4qbtHjofjPnGk1D7baQB/Xv8CuZrKnycMHgisJyxe+kCJq/M3WeYVGTJmnFww+F7GQZo115lsdVwixmX0hnrSZZY44YP10Q1G8hPen6ZmiLVsydsfyDG0qNoaJeZvMIsUp2Z0GhYHtSNvB0=; 7:0fN6eHxtiONCTMxTllZMR7uA6pBmaj82WJN6sobLcHv4uF0HssemJcRVqHf/dVhr8uisprMstbeMEi4gSKPHYisxTlLwy0viXjmnNO+LmX1gwkIG6gl0g3nUToOHPnxrDODkaueWe7biTVDiUufmYQ== x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-correlation-id: 0a2bd31f-ad50-44b6-620d-08d667202221 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:VI1PR08MB2672; x-ms-traffictypediagnostic: VI1PR08MB2672: nodisclaimer: True x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(3230021)(999002)(5005026)(6040522)(2401047)(8121501046)(93006095)(93001095)(3231475)(944501520)(52105112)(10201501046)(3002001)(6055026)(149066)(150057)(6041310)(20161123560045)(20161123558120)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(201708071742011)(7699051)(76991095); SRVR:VI1PR08MB2672; BCL:0; PCL:0; RULEID:; SRVR:VI1PR08MB2672; x-forefront-prvs: 0893636978 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(346002)(366004)(376002)(39860400002)(396003)(51234002)(199004)(189003)(13464003)(74316002)(14454004)(55016002)(446003)(9686003)(33656002)(6246003)(97736004)(106356001)(11346002)(53936002)(105586002)(478600001)(72206003)(66066001)(305945005)(54906003)(2906002)(316002)(2201001)(476003)(86362001)(575784001)(8936002)(110136005)(486006)(2501003)(7736002)(14444005)(25786009)(53546011)(55236004)(6506007)(102836004)(26005)(186003)(256004)(68736007)(6436002)(99286004)(4744004)(7696005)(71200400001)(71190400001)(76176011)(4326008)(93886005)(6116002)(81156014)(5660300001)(8676002)(3846002)(229853002)(81166006); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR08MB2672; H:VI1PR08MB3167.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: QzFrWS8NbGtJEEhwfMzIM5w0YDYFuB+J5fTB1vBu476u7AIYvJ7rbZ3JMtCHdme6sGxmQW81+KLyzd+vqde0PMn3rsr74Ifs9re/yW4r8S7FZIo8eO4xCF9G7AEknl1bK0yb22pMSco+cCiakwJrogyMMvMuOhLHUPlGIy512bzJ/2o1+8HNcxOVa/lrX/nwyPELGhoM6Al/mut4zG0Spcd93KrYdS0Hn8QHxe04b343ikbAo1ZvLLyDYYdAIG5vA9iyO7CQWH4LeSW/K70PyAqBJ4PhlQyWkiogDgVeOQvJyWPDQloTKtkAy6KgEiPn spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0a2bd31f-ad50-44b6-620d-08d667202221 X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Dec 2018 08:41:42.7460 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB2672 Subject: Re: [dpdk-dev] [PATCH v3 3/3] net/virtio: improve batching in mergeable path X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 21 Dec 2018 08:41:46 -0000 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTWF4aW1lIENvcXVlbGlu IDxtYXhpbWUuY29xdWVsaW5AcmVkaGF0LmNvbT4NCj4gU2VudDogRnJpZGF5LCBEZWNlbWJlciAy MSwgMjAxOCA0OjM2IFBNDQo+IFRvOiBHYXZpbiBIdSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIDxH YXZpbi5IdUBhcm0uY29tPjsNCj4gZGV2QGRwZGsub3JnOyBqZnJlaW1hbm5AcmVkaGF0LmNvbTsg dGl3ZWkuYmllQGludGVsLmNvbTsNCj4gemhpaG9uZy53YW5nQGludGVsLmNvbQ0KPiBDYzogbmQg PG5kQGFybS5jb20+DQo+IFN1YmplY3Q6IFJlOiBbZHBkay1kZXZdIFtQQVRDSCB2MyAzLzNdIG5l dC92aXJ0aW86IGltcHJvdmUgYmF0Y2hpbmcgaW4NCj4gbWVyZ2VhYmxlIHBhdGgNCj4gDQo+IA0K PiANCj4gT24gMTIvMjEvMTggNzoyNyBBTSwgR2F2aW4gSHUgKEFybSBUZWNobm9sb2d5IENoaW5h KSB3cm90ZToNCj4gPg0KPiA+DQo+ID4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+ IEZyb206IGRldiA8ZGV2LWJvdW5jZXNAZHBkay5vcmc+IE9uIEJlaGFsZiBPZiBNYXhpbWUgQ29x dWVsaW4NCj4gPj4gU2VudDogRnJpZGF5LCBEZWNlbWJlciAyMSwgMjAxOCAxOjI3IEFNDQo+ID4+ IFRvOiBkZXZAZHBkay5vcmc7IGpmcmVpbWFubkByZWRoYXQuY29tOyB0aXdlaS5iaWVAaW50ZWwu Y29tOw0KPiA+PiB6aGlob25nLndhbmdAaW50ZWwuY29tDQo+ID4+IENjOiBNYXhpbWUgQ29xdWVs aW4gPG1heGltZS5jb3F1ZWxpbkByZWRoYXQuY29tPg0KPiA+PiBTdWJqZWN0OiBbZHBkay1kZXZd IFtQQVRDSCB2MyAzLzNdIG5ldC92aXJ0aW86IGltcHJvdmUgYmF0Y2hpbmcgaW4NCj4gPj4gbWVy Z2VhYmxlIHBhdGgNCj4gPj4NCj4gPj4gVGhpcyBwYXRjaCBpbXByb3ZlcyBib3RoIGRlc2NyaXB0 b3JzIGRlcXVldWUgYW5kIHJlZmlsbCwNCj4gPj4gYnkgdXNpbmcgdGhlIHNhbWUgYmF0Y2hpbmcg c3RyYXRlZ3kgYXMgZG9uZSBpbiBpbi1vcmRlciBwYXRoLg0KPiA+Pg0KPiA+PiBTaWduZWQtb2Zm LWJ5OiBNYXhpbWUgQ29xdWVsaW4gPG1heGltZS5jb3F1ZWxpbkByZWRoYXQuY29tPg0KPiA+PiBU ZXN0ZWQtYnk6IEplbnMgRnJlaW1hbm4gPGpmcmVpbWFubkByZWRoYXQuY29tPg0KPiA+PiBSZXZp ZXdlZC1ieTogSmVucyBGcmVpbWFubiA8amZyZWltYW5uQHJlZGhhdC5jb20+DQo+ID4+IC0tLQ0K PiA+PiAgIGRyaXZlcnMvbmV0L3ZpcnRpby92aXJ0aW9fcnh0eC5jIHwgMjM5ICsrKysrKysrKysr KysrKysrLS0tLS0tLS0tLS0tLS0NCj4gPj4gICAxIGZpbGUgY2hhbmdlZCwgMTI5IGluc2VydGlv bnMoKyksIDExMCBkZWxldGlvbnMoLSkNCj4gPj4NCj4gPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bmV0L3ZpcnRpby92aXJ0aW9fcnh0eC5jDQo+IGIvZHJpdmVycy9uZXQvdmlydGlvL3ZpcnRpb19y eHR4LmMNCj4gPj4gaW5kZXggNTgzNzZjZWQzLi4xY2ZhMmYwZDYgMTAwNjQ0DQo+ID4+IC0tLSBh L2RyaXZlcnMvbmV0L3ZpcnRpby92aXJ0aW9fcnh0eC5jDQo+ID4+ICsrKyBiL2RyaXZlcnMvbmV0 L3ZpcnRpby92aXJ0aW9fcnh0eC5jDQo+ID4+IEBAIC0zNTMsNDEgKzM1Myw0NCBAQCB2aXJ0cXVl dWVfZW5xdWV1ZV9yZWZpbGxfaW5vcmRlcihzdHJ1Y3QNCj4gPj4gdmlydHF1ZXVlICp2cSwNCj4g Pj4gICB9DQo+ID4+DQo+ID4+ICAgc3RhdGljIGlubGluZSBpbnQNCj4gPj4gLXZpcnRxdWV1ZV9l bnF1ZXVlX3JlY3ZfcmVmaWxsKHN0cnVjdCB2aXJ0cXVldWUgKnZxLCBzdHJ1Y3QgcnRlX21idWYN Cj4gPj4gKmNvb2tpZSkNCj4gPj4gK3ZpcnRxdWV1ZV9lbnF1ZXVlX3JlY3ZfcmVmaWxsKHN0cnVj dCB2aXJ0cXVldWUgKnZxLCBzdHJ1Y3QgcnRlX21idWYNCj4gPj4gKipjb29raWUsDQo+ID4+ICsJ CQkJdWludDE2X3QgbnVtKQ0KPiA+PiAgIHsNCj4gPj4gICAJc3RydWN0IHZxX2Rlc2NfZXh0cmEg KmR4cDsNCj4gPj4gICAJc3RydWN0IHZpcnRpb19odyAqaHcgPSB2cS0+aHc7DQo+ID4+IC0Jc3Ry dWN0IHZyaW5nX2Rlc2MgKnN0YXJ0X2RwOw0KPiA+PiAtCXVpbnQxNl90IG5lZWRlZCA9IDE7DQo+ ID4+IC0JdWludDE2X3QgaGVhZF9pZHgsIGlkeDsNCj4gPj4gKwlzdHJ1Y3QgdnJpbmdfZGVzYyAq c3RhcnRfZHAgPSB2cS0+dnFfcmluZy5kZXNjOw0KPiA+PiArCXVpbnQxNl90IGlkeCwgaTsNCj4g Pj4NCj4gPj4gICAJaWYgKHVubGlrZWx5KHZxLT52cV9mcmVlX2NudCA9PSAwKSkNCj4gPj4gICAJ CXJldHVybiAtRU5PU1BDOw0KPiA+PiAtCWlmICh1bmxpa2VseSh2cS0+dnFfZnJlZV9jbnQgPCBu ZWVkZWQpKQ0KPiA+PiArCWlmICh1bmxpa2VseSh2cS0+dnFfZnJlZV9jbnQgPCBudW0pKQ0KPiA+ PiAgIAkJcmV0dXJuIC1FTVNHU0laRTsNCj4gPj4NCj4gPj4gLQloZWFkX2lkeCA9IHZxLT52cV9k ZXNjX2hlYWRfaWR4Ow0KPiA+PiAtCWlmICh1bmxpa2VseShoZWFkX2lkeCA+PSB2cS0+dnFfbmVu dHJpZXMpKQ0KPiA+PiArCWlmICh1bmxpa2VseSh2cS0+dnFfZGVzY19oZWFkX2lkeCA+PSB2cS0+ dnFfbmVudHJpZXMpKQ0KPiA+PiAgIAkJcmV0dXJuIC1FRkFVTFQ7DQo+ID4+DQo+ID4+IC0JaWR4 ID0gaGVhZF9pZHg7DQo+ID4+IC0JZHhwID0gJnZxLT52cV9kZXNjeFtpZHhdOw0KPiA+PiAtCWR4 cC0+Y29va2llID0gKHZvaWQgKiljb29raWU7DQo+ID4+IC0JZHhwLT5uZGVzY3MgPSBuZWVkZWQ7 DQo+ID4+ICsJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7DQo+ID4+ICsJCWlkeCA9IHZxLT52 cV9kZXNjX2hlYWRfaWR4Ow0KPiA+PiArCQlkeHAgPSAmdnEtPnZxX2Rlc2N4W2lkeF07DQo+ID4+ ICsJCWR4cC0+Y29va2llID0gKHZvaWQgKiljb29raWVbaV07DQo+ID4+ICsJCWR4cC0+bmRlc2Nz ID0gMTsNCj4gPj4NCj4gPj4gLQlzdGFydF9kcCA9IHZxLT52cV9yaW5nLmRlc2M7DQo+ID4+IC0J c3RhcnRfZHBbaWR4XS5hZGRyID0NCj4gPj4gLQkJVklSVElPX01CVUZfQUREUihjb29raWUsIHZx KSArDQo+ID4+IC0JCVJURV9QS1RNQlVGX0hFQURST09NIC0gaHctPnZ0bmV0X2hkcl9zaXplOw0K PiA+PiAtCXN0YXJ0X2RwW2lkeF0ubGVuID0NCj4gPj4gLQkJY29va2llLT5idWZfbGVuIC0gUlRF X1BLVE1CVUZfSEVBRFJPT00gKyBody0NCj4gPj4+IHZ0bmV0X2hkcl9zaXplOw0KPiA+PiAtCXN0 YXJ0X2RwW2lkeF0uZmxhZ3MgPSAgVlJJTkdfREVTQ19GX1dSSVRFOw0KPiA+PiAtCWlkeCA9IHN0 YXJ0X2RwW2lkeF0ubmV4dDsNCj4gPj4gLQl2cS0+dnFfZGVzY19oZWFkX2lkeCA9IGlkeDsNCj4g Pj4gLQlpZiAodnEtPnZxX2Rlc2NfaGVhZF9pZHggPT0gVlFfUklOR19ERVNDX0NIQUlOX0VORCkN Cj4gPj4gLQkJdnEtPnZxX2Rlc2NfdGFpbF9pZHggPSBpZHg7DQo+ID4+IC0JdnEtPnZxX2ZyZWVf Y250ID0gKHVpbnQxNl90KSh2cS0+dnFfZnJlZV9jbnQgLSBuZWVkZWQpOw0KPiA+PiAtCXZxX3Vw ZGF0ZV9hdmFpbF9yaW5nKHZxLCBoZWFkX2lkeCk7DQo+ID4+ICsJCXN0YXJ0X2RwW2lkeF0uYWRk ciA9DQo+ID4+ICsJCQlWSVJUSU9fTUJVRl9BRERSKGNvb2tpZVtpXSwgdnEpICsNCj4gPj4gKwkJ CVJURV9QS1RNQlVGX0hFQURST09NIC0gaHctPnZ0bmV0X2hkcl9zaXplOw0KPiA+PiArCQlzdGFy dF9kcFtpZHhdLmxlbiA9DQo+ID4+ICsJCQljb29raWVbaV0tPmJ1Zl9sZW4gLSBSVEVfUEtUTUJV Rl9IRUFEUk9PTSArDQo+ID4+ICsJCQlody0+dnRuZXRfaGRyX3NpemU7DQo+ID4+ICsJCXN0YXJ0 X2RwW2lkeF0uZmxhZ3MgPSBWUklOR19ERVNDX0ZfV1JJVEU7DQo+ID4+ICsJCXZxLT52cV9kZXNj X2hlYWRfaWR4ID0gc3RhcnRfZHBbaWR4XS5uZXh0Ow0KPiA+PiArCQl2cV91cGRhdGVfYXZhaWxf cmluZyh2cSwgaWR4KTsNCj4gPj4gKwkJaWYgKHZxLT52cV9kZXNjX2hlYWRfaWR4ID09IFZRX1JJ TkdfREVTQ19DSEFJTl9FTkQpDQo+ID4+IHsNCj4gPj4gKwkJCXZxLT52cV9kZXNjX3RhaWxfaWR4 ID0gdnEtPnZxX2Rlc2NfaGVhZF9pZHg7DQo+ID4+ICsJCQlicmVhazsNCj4gPj4gKwkJfQ0KPiA+ PiArCX0NCj4gPj4gKw0KPiA+PiArCXZxLT52cV9mcmVlX2NudCA9ICh1aW50MTZfdCkodnEtPnZx X2ZyZWVfY250IC0gbnVtKTsNCj4gPj4NCj4gPj4gICAJcmV0dXJuIDA7DQo+ID4+ICAgfQ0KPiA+ PiBAQCAtODkyLDcgKzg5NSw4IEBAIHZpcnRpb19kZXZfcnhfcXVldWVfc2V0dXBfZmluaXNoKHN0 cnVjdA0KPiA+PiBydGVfZXRoX2RldiAqZGV2LCB1aW50MTZfdCBxdWV1ZV9pZHgpDQo+ID4+ICAg CQkJCWVycm9yID0NCj4gPj4gdmlydHF1ZXVlX2VucXVldWVfcmVjdl9yZWZpbGxfcGFja2VkKHZx LA0KPiA+PiAgIAkJCQkJCSZtLCAxKTsNCj4gPj4gICAJCQllbHNlDQo+ID4+IC0JCQkJZXJyb3Ig PSB2aXJ0cXVldWVfZW5xdWV1ZV9yZWN2X3JlZmlsbCh2cSwNCj4gPj4gbSk7DQo+ID4+ICsJCQkJ ZXJyb3IgPSB2aXJ0cXVldWVfZW5xdWV1ZV9yZWN2X3JlZmlsbCh2cSwNCj4gPj4gKwkJCQkJCSZt LCAxKTsNCj4gPj4gICAJCQlpZiAoZXJyb3IpIHsNCj4gPj4gICAJCQkJcnRlX3BrdG1idWZfZnJl ZShtKTsNCj4gPj4gICAJCQkJYnJlYWs7DQo+ID4+IEBAIC05OTEsNyArOTk1LDcgQEAgdmlydGlv X2Rpc2NhcmRfcnhidWYoc3RydWN0IHZpcnRxdWV1ZSAqdnEsIHN0cnVjdA0KPiA+PiBydGVfbWJ1 ZiAqbSkNCj4gPj4gICAJaWYgKHZ0cGNpX3BhY2tlZF9xdWV1ZSh2cS0+aHcpKQ0KPiA+PiAgIAkJ ZXJyb3IgPSB2aXJ0cXVldWVfZW5xdWV1ZV9yZWN2X3JlZmlsbF9wYWNrZWQodnEsICZtLCAxKTsN Cj4gPj4gICAJZWxzZQ0KPiA+PiAtCQllcnJvciA9IHZpcnRxdWV1ZV9lbnF1ZXVlX3JlY3ZfcmVm aWxsKHZxLCBtKTsNCj4gPj4gKwkJZXJyb3IgPSB2aXJ0cXVldWVfZW5xdWV1ZV9yZWN2X3JlZmls bCh2cSwgJm0sIDEpOw0KPiA+Pg0KPiA+PiAgIAlpZiAodW5saWtlbHkoZXJyb3IpKSB7DQo+ID4+ ICAgCQlSVEVfTE9HKEVSUiwgUE1ELCAiY2Fubm90IHJlcXVldWUgZGlzY2FyZGVkIG1idWYiKTsN Cj4gPj4gQEAgLTEyMTEsNyArMTIxNSw3IEBAIHZpcnRpb19yZWN2X3BrdHModm9pZCAqcnhfcXVl dWUsIHN0cnVjdA0KPiBydGVfbWJ1Zg0KPiA+PiAqKnJ4X3BrdHMsIHVpbnQxNl90IG5iX3BrdHMp DQo+ID4+ICAgCQkJZGV2LT5kYXRhLT5yeF9tYnVmX2FsbG9jX2ZhaWxlZCsrOw0KPiA+PiAgIAkJ CWJyZWFrOw0KPiA+PiAgIAkJfQ0KPiA+PiAtCQllcnJvciA9IHZpcnRxdWV1ZV9lbnF1ZXVlX3Jl Y3ZfcmVmaWxsKHZxLCBuZXdfbWJ1Zik7DQo+ID4+ICsJCWVycm9yID0gdmlydHF1ZXVlX2VucXVl dWVfcmVjdl9yZWZpbGwodnEsICZuZXdfbWJ1ZiwgMSk7DQo+ID4+ICAgCQlpZiAodW5saWtlbHko ZXJyb3IpKSB7DQo+ID4+ICAgCQkJcnRlX3BrdG1idWZfZnJlZShuZXdfbWJ1Zik7DQo+ID4+ICAg CQkJYnJlYWs7DQo+ID4+IEBAIC0xNTI4LDE5ICsxNTMyLDE4IEBAIHZpcnRpb19yZWN2X21lcmdl YWJsZV9wa3RzKHZvaWQNCj4gKnJ4X3F1ZXVlLA0KPiA+PiAgIAlzdHJ1Y3QgdmlydG5ldF9yeCAq cnh2cSA9IHJ4X3F1ZXVlOw0KPiA+PiAgIAlzdHJ1Y3QgdmlydHF1ZXVlICp2cSA9IHJ4dnEtPnZx Ow0KPiA+PiAgIAlzdHJ1Y3QgdmlydGlvX2h3ICpodyA9IHZxLT5odzsNCj4gPj4gLQlzdHJ1Y3Qg cnRlX21idWYgKnJ4bSwgKm5ld19tYnVmOw0KPiA+PiAtCXVpbnQxNl90IG5iX3VzZWQsIG51bSwg bmJfcng7DQo+ID4+ICsJc3RydWN0IHJ0ZV9tYnVmICpyeG07DQo+ID4+ICsJc3RydWN0IHJ0ZV9t YnVmICpwcmV2Ow0KPiA+PiArCXVpbnQxNl90IG5iX3VzZWQsIG51bSwgbmJfcnggPSAwOw0KPiA+ PiAgIAl1aW50MzJfdCBsZW5bVklSVElPX01CVUZfQlVSU1RfU1pdOw0KPiA+PiAgIAlzdHJ1Y3Qg cnRlX21idWYgKnJjdl9wa3RzW1ZJUlRJT19NQlVGX0JVUlNUX1NaXTsNCj4gPj4gLQlzdHJ1Y3Qg cnRlX21idWYgKnByZXY7DQo+ID4+ICAgCWludCBlcnJvcjsNCj4gPj4gLQl1aW50MzJfdCBpLCBu Yl9lbnF1ZXVlZDsNCj4gPj4gLQl1aW50MzJfdCBzZWdfbnVtOw0KPiA+PiAtCXVpbnQxNl90IGV4 dHJhX2lkeDsNCj4gPj4gLQl1aW50MzJfdCBzZWdfcmVzOw0KPiA+PiAtCXVpbnQzMl90IGhkcl9z aXplOw0KPiA+PiArCXVpbnQzMl90IG5iX2VucXVldWVkID0gMDsNCj4gPj4gKwl1aW50MzJfdCBz ZWdfbnVtID0gMDsNCj4gPj4gKwl1aW50MzJfdCBzZWdfcmVzID0gMDsNCj4gPj4gKwl1aW50MzJf dCBoZHJfc2l6ZSA9IGh3LT52dG5ldF9oZHJfc2l6ZTsNCj4gPj4gKwlpbnQzMl90IGk7DQo+ID4+ DQo+ID4+IC0JbmJfcnggPSAwOw0KPiA+PiAgIAlpZiAodW5saWtlbHkoaHctPnN0YXJ0ZWQgPT0g MCkpDQo+ID4+ICAgCQlyZXR1cm4gbmJfcng7DQo+ID4+DQo+ID4+IEBAIC0xNTUwLDMxICsxNTUz LDI1IEBAIHZpcnRpb19yZWN2X21lcmdlYWJsZV9wa3RzKHZvaWQNCj4gKnJ4X3F1ZXVlLA0KPiA+ Pg0KPiA+PiAgIAlQTURfUlhfTE9HKERFQlVHLCAidXNlZDolZCIsIG5iX3VzZWQpOw0KPiA+Pg0K PiA+PiAtCWkgPSAwOw0KPiA+PiAtCW5iX2VucXVldWVkID0gMDsNCj4gPj4gLQlzZWdfbnVtID0g MDsNCj4gPj4gLQlleHRyYV9pZHggPSAwOw0KPiA+PiAtCXNlZ19yZXMgPSAwOw0KPiA+PiAtCWhk cl9zaXplID0gaHctPnZ0bmV0X2hkcl9zaXplOw0KPiA+PiAtDQo+ID4+IC0Jd2hpbGUgKGkgPCBu Yl91c2VkKSB7DQo+ID4+IC0JCXN0cnVjdCB2aXJ0aW9fbmV0X2hkcl9tcmdfcnhidWYgKmhlYWRl cjsNCj4gPj4gKwludW0gPSBsaWtlbHkobmJfdXNlZCA8PSBuYl9wa3RzKSA/IG5iX3VzZWQgOiBu Yl9wa3RzOw0KPiA+PiArCWlmICh1bmxpa2VseShudW0gPiBWSVJUSU9fTUJVRl9CVVJTVF9TWikp DQo+ID4+ICsJCW51bSA9IFZJUlRJT19NQlVGX0JVUlNUX1NaOw0KPiA+PiArCWlmIChsaWtlbHko bnVtID4gREVTQ19QRVJfQ0FDSEVMSU5FKSkNCj4gPj4gKwkJbnVtID0gbnVtIC0gKCh2cS0+dnFf dXNlZF9jb25zX2lkeCArIG51bSkgJQ0KPiA+PiArCQkJCURFU0NfUEVSX0NBQ0hFTElORSk7DQo+ ID4+DQo+ID4+IC0JCWlmIChuYl9yeCA9PSBuYl9wa3RzKQ0KPiA+PiAtCQkJYnJlYWs7DQo+ID4+ DQo+ID4+IC0JCW51bSA9IHZpcnRxdWV1ZV9kZXF1ZXVlX2J1cnN0X3J4KHZxLCByY3ZfcGt0cywg bGVuLCAxKTsNCj4gPj4gLQkJaWYgKG51bSAhPSAxKQ0KPiA+PiAtCQkJY29udGludWU7DQo+ID4+ ICsJbnVtID0gdmlydHF1ZXVlX2RlcXVldWVfYnVyc3RfcngodnEsIHJjdl9wa3RzLCBsZW4sIG51 bSk7DQo+ID4+DQo+ID4+IC0JCWkrKzsNCj4gPj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKysp IHsNCj4gPj4gKwkJc3RydWN0IHZpcnRpb19uZXRfaGRyX21yZ19yeGJ1ZiAqaGVhZGVyOw0KPiA+ Pg0KPiA+PiAgIAkJUE1EX1JYX0xPRyhERUJVRywgImRlcXVldWU6JWQiLCBudW0pOw0KPiA+PiAt CQlQTURfUlhfTE9HKERFQlVHLCAicGFja2V0IGxlbjolZCIsIGxlblswXSk7DQo+ID4+ICsJCVBN RF9SWF9MT0coREVCVUcsICJwYWNrZXQgbGVuOiVkIiwgbGVuW2ldKTsNCj4gPj4NCj4gPj4gLQkJ cnhtID0gcmN2X3BrdHNbMF07DQo+ID4+ICsJCXJ4bSA9IHJjdl9wa3RzW2ldOw0KPiA+Pg0KPiA+ PiAtCQlpZiAodW5saWtlbHkobGVuWzBdIDwgaGRyX3NpemUgKyBFVEhFUl9IRFJfTEVOKSkgew0K PiA+PiArCQlpZiAodW5saWtlbHkobGVuW2ldIDwgaGRyX3NpemUgKyBFVEhFUl9IRFJfTEVOKSkg ew0KPiA+PiAgIAkJCVBNRF9SWF9MT0coRVJSLCAiUGFja2V0IGRyb3AiKTsNCj4gPj4gICAJCQlu Yl9lbnF1ZXVlZCsrOw0KPiA+PiAgIAkJCXZpcnRpb19kaXNjYXJkX3J4YnVmKHZxLCByeG0pOw0K PiA+PiBAQCAtMTU4MiwxMCArMTU3OSwxMCBAQCB2aXJ0aW9fcmVjdl9tZXJnZWFibGVfcGt0cyh2 b2lkDQo+ICpyeF9xdWV1ZSwNCj4gPj4gICAJCQljb250aW51ZTsNCj4gPj4gICAJCX0NCj4gPj4N Cj4gPj4gLQkJaGVhZGVyID0gKHN0cnVjdCB2aXJ0aW9fbmV0X2hkcl9tcmdfcnhidWYgKikoKGNo YXIgKilyeG0tDQo+ID4+PiBidWZfYWRkciArDQo+ID4+IC0JCQlSVEVfUEtUTUJVRl9IRUFEUk9P TSAtIGhkcl9zaXplKTsNCj4gPj4gKwkJaGVhZGVyID0gKHN0cnVjdCB2aXJ0aW9fbmV0X2hkcl9t cmdfcnhidWYgKikNCj4gPj4gKwkJCSAoKGNoYXIgKilyeG0tPmJ1Zl9hZGRyICsNCj4gPj4gUlRF X1BLVE1CVUZfSEVBRFJPT00NCj4gPj4gKwkJCSAtIGhkcl9zaXplKTsNCj4gPj4gICAJCXNlZ19u dW0gPSBoZWFkZXItPm51bV9idWZmZXJzOw0KPiA+PiAtDQo+ID4+ICAgCQlpZiAoc2VnX251bSA9 PSAwKQ0KPiA+PiAgIAkJCXNlZ19udW0gPSAxOw0KPiA+Pg0KPiA+PiBAQCAtMTU5MywxMCArMTU5 MCwxMSBAQCB2aXJ0aW9fcmVjdl9tZXJnZWFibGVfcGt0cyh2b2lkDQo+ICpyeF9xdWV1ZSwNCj4g Pj4gICAJCXJ4bS0+bmJfc2VncyA9IHNlZ19udW07DQo+ID4+ICAgCQlyeG0tPm9sX2ZsYWdzID0g MDsNCj4gPj4gICAJCXJ4bS0+dmxhbl90Y2kgPSAwOw0KPiA+PiAtCQlyeG0tPnBrdF9sZW4gPSAo dWludDMyX3QpKGxlblswXSAtIGhkcl9zaXplKTsNCj4gPj4gLQkJcnhtLT5kYXRhX2xlbiA9ICh1 aW50MTZfdCkobGVuWzBdIC0gaGRyX3NpemUpOw0KPiA+PiArCQlyeG0tPnBrdF9sZW4gPSAodWlu dDMyX3QpKGxlbltpXSAtIGhkcl9zaXplKTsNCj4gPj4gKwkJcnhtLT5kYXRhX2xlbiA9ICh1aW50 MTZfdCkobGVuW2ldIC0gaGRyX3NpemUpOw0KPiA+Pg0KPiA+PiAgIAkJcnhtLT5wb3J0ID0gcnh2 cS0+cG9ydF9pZDsNCj4gPj4gKw0KPiA+PiAgIAkJcnhfcGt0c1tuYl9yeF0gPSByeG07DQo+ID4+ ICAgCQlwcmV2ID0gcnhtOw0KPiA+Pg0KPiA+PiBAQCAtMTYwNyw3NSArMTYwNSw5NiBAQCB2aXJ0 aW9fcmVjdl9tZXJnZWFibGVfcGt0cyh2b2lkDQo+ICpyeF9xdWV1ZSwNCj4gPj4gICAJCQljb250 aW51ZTsNCj4gPj4gICAJCX0NCj4gPj4NCj4gPj4gKwkJaWYgKGh3LT52bGFuX3N0cmlwKQ0KPiA+ PiArCQkJcnRlX3ZsYW5fc3RyaXAocnhfcGt0c1tuYl9yeF0pOw0KPiA+PiArDQo+ID4+ICAgCQlz ZWdfcmVzID0gc2VnX251bSAtIDE7DQo+ID4+DQo+ID4+IC0JCXdoaWxlIChzZWdfcmVzICE9IDAp IHsNCj4gPj4gLQkJCS8qDQo+ID4+IC0JCQkgKiBHZXQgZXh0cmEgc2VnbWVudHMgZm9yIGN1cnJl bnQgdW5jb21wbGV0ZWQNCj4gPj4gcGFja2V0Lg0KPiA+PiAtCQkJICovDQo+ID4+IC0JCQl1aW50 MTZfdCAgcmN2X2NudCA9DQo+ID4+IC0JCQkJUlRFX01JTihzZWdfcmVzLCBSVEVfRElNKHJjdl9w a3RzKSk7DQo+ID4+IC0JCQlpZiAobGlrZWx5KFZJUlRRVUVVRV9OVVNFRCh2cSkgPj0gcmN2X2Nu dCkpIHsNCj4gPj4gLQkJCQl1aW50MzJfdCByeF9udW0gPQ0KPiA+PiAtCQkJCQl2aXJ0cXVldWVf ZGVxdWV1ZV9idXJzdF9yeCh2cSwNCj4gPj4gLQkJCQkJcmN2X3BrdHMsIGxlbiwgcmN2X2NudCk7 DQo+ID4+IC0JCQkJaSArPSByeF9udW07DQo+ID4+IC0JCQkJcmN2X2NudCA9IHJ4X251bTsNCj4g Pj4gLQkJCX0gZWxzZSB7DQo+ID4+IC0JCQkJUE1EX1JYX0xPRyhFUlIsDQo+ID4+IC0JCQkJCSAg ICJObyBlbm91Z2ggc2VnbWVudHMgZm9yDQo+ID4+IHBhY2tldC4iKTsNCj4gPj4gLQkJCQluYl9l bnF1ZXVlZCsrOw0KPiA+PiAtCQkJCXZpcnRpb19kaXNjYXJkX3J4YnVmKHZxLCByeG0pOw0KPiA+ PiAtCQkJCXJ4dnEtPnN0YXRzLmVycm9ycysrOw0KPiA+PiAtCQkJCWJyZWFrOw0KPiA+PiAtCQkJ fQ0KPiA+PiArCQkvKiBNZXJnZSByZW1haW5pbmcgc2VnbWVudHMgKi8NCj4gPj4gKwkJd2hpbGUg KHNlZ19yZXMgIT0gMCAmJiBpIDwgKG51bSAtIDEpKSB7DQo+ID4+ICsJCQlpKys7DQo+ID4+ICsN Cj4gPj4gKwkJCXJ4bSA9IHJjdl9wa3RzW2ldOw0KPiA+PiArCQkJcnhtLT5kYXRhX29mZiA9IFJU RV9QS1RNQlVGX0hFQURST09NIC0NCj4gPj4gaGRyX3NpemU7DQo+ID4+ICsJCQlyeG0tPnBrdF9s ZW4gPSAodWludDMyX3QpKGxlbltpXSk7DQo+ID4+ICsJCQlyeG0tPmRhdGFfbGVuID0gKHVpbnQx Nl90KShsZW5baV0pOw0KPiA+PiArDQo+ID4+ICsJCQlyeF9wa3RzW25iX3J4XS0+cGt0X2xlbiAr PSAodWludDMyX3QpKGxlbltpXSk7DQo+ID4+ICsJCQlyeF9wa3RzW25iX3J4XS0+ZGF0YV9sZW4g Kz0gKHVpbnQxNl90KShsZW5baV0pOw0KPiA+PiArDQo+ID4+ICsJCQlpZiAocHJldikNCj4gPj4g KwkJCQlwcmV2LT5uZXh0ID0gcnhtOw0KPiA+PiArDQo+ID4+ICsJCQlwcmV2ID0gcnhtOw0KPiA+ PiArCQkJc2VnX3JlcyAtPSAxOw0KPiA+PiArCQl9DQo+ID4+ICsNCj4gPj4gKwkJaWYgKCFzZWdf cmVzKSB7DQo+ID4+ICsJCQl2aXJ0aW9fcnhfc3RhdHNfdXBkYXRlZChyeHZxLCByeF9wa3RzW25i X3J4XSk7DQo+ID4+ICsJCQluYl9yeCsrOw0KPiA+PiArCQl9DQo+ID4+ICsJfQ0KPiA+PiArDQo+ ID4+ICsJLyogTGFzdCBwYWNrZXQgc3RpbGwgbmVlZCBtZXJnZSBzZWdtZW50cyAqLw0KPiA+PiAr CXdoaWxlIChzZWdfcmVzICE9IDApIHsNCj4gPj4gKwkJdWludDE2X3QgcmN2X2NudCA9IFJURV9N SU4oKHVpbnQxNl90KXNlZ19yZXMsDQo+ID4+ICsJCQkJCVZJUlRJT19NQlVGX0JVUlNUX1NaKTsN Cj4gPj4NCj4gPj4gLQkJCWV4dHJhX2lkeCA9IDA7DQo+ID4+ICsJCXByZXYgPSByY3ZfcGt0c1tu Yl9yeF07DQo+ID4+ICsJCWlmIChsaWtlbHkoVklSVFFVRVVFX05VU0VEKHZxKSA+PSByY3ZfY250 KSkgew0KPiA+PiArCQkJbnVtID0gdmlydHF1ZXVlX2RlcXVldWVfYnVyc3RfcngodnEsIHJjdl9w a3RzLA0KPiA+PiBsZW4sDQo+ID4+ICsJCQkJCQkJICAgcmN2X2NudCk7DQo+ID4+ICsJCQl1aW50 MTZfdCBleHRyYV9pZHggPSAwOw0KPiA+Pg0KPiA+PiArCQkJcmN2X2NudCA9IG51bTsNCj4gPj4g ICAJCQl3aGlsZSAoZXh0cmFfaWR4IDwgcmN2X2NudCkgew0KPiA+PiAgIAkJCQlyeG0gPSByY3Zf cGt0c1tleHRyYV9pZHhdOw0KPiA+PiAtDQo+ID4+IC0JCQkJcnhtLT5kYXRhX29mZiA9DQo+ID4+ IFJURV9QS1RNQlVGX0hFQURST09NIC0gaGRyX3NpemU7DQo+ID4+ICsJCQkJcnhtLT5kYXRhX29m ZiA9DQo+ID4+ICsJCQkJCVJURV9QS1RNQlVGX0hFQURST09NIC0NCj4gPj4gaGRyX3NpemU7DQo+ ID4+ICAgCQkJCXJ4bS0+cGt0X2xlbiA9ICh1aW50MzJfdCkobGVuW2V4dHJhX2lkeF0pOw0KPiA+ PiAgIAkJCQlyeG0tPmRhdGFfbGVuID0gKHVpbnQxNl90KShsZW5bZXh0cmFfaWR4XSk7DQo+ID4+ IC0NCj4gPj4gLQkJCQlpZiAocHJldikNCj4gPj4gLQkJCQkJcHJldi0+bmV4dCA9IHJ4bTsNCj4g Pj4gLQ0KPiA+PiArCQkJCXByZXYtPm5leHQgPSByeG07DQo+ID4+ICAgCQkJCXByZXYgPSByeG07 DQo+ID4+IC0JCQkJcnhfcGt0c1tuYl9yeF0tPnBrdF9sZW4gKz0gcnhtLT5wa3RfbGVuOw0KPiA+ PiAtCQkJCWV4dHJhX2lkeCsrOw0KPiA+PiArCQkJCXJ4X3BrdHNbbmJfcnhdLT5wa3RfbGVuICs9 IGxlbltleHRyYV9pZHhdOw0KPiA+PiArCQkJCXJ4X3BrdHNbbmJfcnhdLT5kYXRhX2xlbiArPSBs ZW5bZXh0cmFfaWR4XTsNCj4gPj4gKwkJCQlleHRyYV9pZHggKz0gMTsNCj4gPj4gICAJCQl9Ow0K PiA+PiAgIAkJCXNlZ19yZXMgLT0gcmN2X2NudDsNCj4gPj4gLQkJfQ0KPiA+PiAtDQo+ID4+IC0J CWlmIChody0+dmxhbl9zdHJpcCkNCj4gPj4gLQkJCXJ0ZV92bGFuX3N0cmlwKHJ4X3BrdHNbbmJf cnhdKTsNCj4gPj4gLQ0KPiA+PiAtCQlWSVJUSU9fRFVNUF9QQUNLRVQocnhfcGt0c1tuYl9yeF0s DQo+ID4+IC0JCQlyeF9wa3RzW25iX3J4XS0+ZGF0YV9sZW4pOw0KPiA+Pg0KPiA+PiAtCQl2aXJ0 aW9fdXBkYXRlX3BhY2tldF9zdGF0cygmcnh2cS0+c3RhdHMsIHJ4X3BrdHNbbmJfcnhdKTsNCj4g Pj4gLQkJbmJfcngrKzsNCj4gPj4gKwkJCWlmICghc2VnX3Jlcykgew0KPiA+PiArCQkJCXZpcnRp b19yeF9zdGF0c191cGRhdGVkKHJ4dnEsDQo+ID4+IHJ4X3BrdHNbbmJfcnhdKTsNCj4gPj4gKwkJ CQluYl9yeCsrOw0KPiA+PiArCQkJfQ0KPiA+PiArCQl9IGVsc2Ugew0KPiA+PiArCQkJUE1EX1JY X0xPRyhFUlIsDQo+ID4+ICsJCQkJCSJObyBlbm91Z2ggc2VnbWVudHMgZm9yIHBhY2tldC4iKTsN Cj4gPj4gKwkJCXZpcnRpb19kaXNjYXJkX3J4YnVmKHZxLCBwcmV2KTsNCj4gPj4gKwkJCXJ4dnEt PnN0YXRzLmVycm9ycysrOw0KPiA+PiArCQkJYnJlYWs7DQo+ID4+ICsJCX0NCj4gPj4gICAJfQ0K PiA+Pg0KPiA+PiAgIAlyeHZxLT5zdGF0cy5wYWNrZXRzICs9IG5iX3J4Ow0KPiA+Pg0KPiA+PiAg IAkvKiBBbGxvY2F0ZSBuZXcgbWJ1ZiBmb3IgdGhlIHVzZWQgZGVzY3JpcHRvciAqLw0KPiA+PiAt CXdoaWxlIChsaWtlbHkoIXZpcnRxdWV1ZV9mdWxsKHZxKSkpIHsNCj4gPj4gLQkJbmV3X21idWYg PSBydGVfbWJ1Zl9yYXdfYWxsb2Mocnh2cS0+bXBvb2wpOw0KPiA+PiAtCQlpZiAodW5saWtlbHko bmV3X21idWYgPT0gTlVMTCkpIHsNCj4gPj4gLQkJCXN0cnVjdCBydGVfZXRoX2RldiAqZGV2DQo+ ID4+IC0JCQkJPSAmcnRlX2V0aF9kZXZpY2VzW3J4dnEtPnBvcnRfaWRdOw0KPiA+PiAtCQkJZGV2 LT5kYXRhLT5yeF9tYnVmX2FsbG9jX2ZhaWxlZCsrOw0KPiA+PiAtCQkJYnJlYWs7DQo+ID4+IC0J CX0NCj4gPj4gLQkJZXJyb3IgPSB2aXJ0cXVldWVfZW5xdWV1ZV9yZWN2X3JlZmlsbCh2cSwgbmV3 X21idWYpOw0KPiA+PiAtCQlpZiAodW5saWtlbHkoZXJyb3IpKSB7DQo+ID4+IC0JCQlydGVfcGt0 bWJ1Zl9mcmVlKG5ld19tYnVmKTsNCj4gPj4gLQkJCWJyZWFrOw0KPiA+PiArCWlmIChsaWtlbHko IXZpcnRxdWV1ZV9mdWxsKHZxKSkpIHsNCj4gPj4gKwkJLyogZnJlZV9jbnQgbWF5IGluY2x1ZGUg bXJnIGRlc2NzICovDQo+ID4+ICsJCXVpbnQxNl90IGZyZWVfY250ID0gdnEtPnZxX2ZyZWVfY250 Ow0KPiA+PiArCQlzdHJ1Y3QgcnRlX21idWYgKm5ld19wa3RzW2ZyZWVfY250XTsNCj4gPj4gKw0K PiA+PiArCQlpZiAoIXJ0ZV9wa3RtYnVmX2FsbG9jX2J1bGsocnh2cS0+bXBvb2wsIG5ld19wa3Rz LA0KPiA+PiBmcmVlX2NudCkpIHsNCj4gPj4gKwkJCWVycm9yID0gdmlydHF1ZXVlX2VucXVldWVf cmVjdl9yZWZpbGwodnEsIG5ld19wa3RzLA0KPiA+PiArCQkJCQlmcmVlX2NudCk7DQo+ID4+ICsJ CQlpZiAodW5saWtlbHkoZXJyb3IpKSB7DQo+ID4+ICsJCQkJZm9yIChpID0gMDsgaSA8IGZyZWVf Y250OyBpKyspDQo+ID4+ICsJCQkJCXJ0ZV9wa3RtYnVmX2ZyZWUobmV3X3BrdHNbaV0pOw0KPiA+ IE1pc3NpbmcgZXJyb3IgaGFuZGxpbmcgaGVyZT8gIHRoZSBleGVjdXRpb24ga2VlcHMgZ29pbmcg b24gd2l0aG91dCB0aGUNCj4gbWJ1ZnM/DQo+IA0KPiBUaGF0J3MgZmluZSBiZWNhdXNlIGlmIHdl IGdldCBhbiBlcnJvciBoZXJlLCBubyBkZXNjcmlwdG9ycyB3ZXJlDQo+IGluc2VydGVkIGluIHRo ZSBhdmFpbCBxdWV1ZS4NCj4gDQo+IG5iX2VucXVldWUgaXMganVzdCB1c2VkIHRvIGtub3cgd2hl dGhlciB3ZSBzaG91bGQgbm90aWZ5IGhvc3QgZGVzY3MgYXJlDQo+IGF2YWlsYWJsZS4gSSBjYW4g c2V0IGZyZWVfY250IHRvIDAgaW4gdGhlIGVycm9yIHBhdGggdGhvdWdoLCBzbyB0aGF0DQo+IGhv c3QgaXNuJ3Qgbm90aWZpZWQgZm9yIG5vdGhpbmcgYnV0IHRoYXQncyBub3QgYSBiaWcgZGVhbCwg cmVhbGx5Lg0KPiANCj4gVGhhbmtzIQ0KPiBNYXhpbWUNCj4gDQo+ID4gL0dhdmluDQo+ID4NCj4g Pj4gKwkJCX0NCj4gPj4gKwkJCW5iX2VucXVldWVkICs9IGZyZWVfY250Ow0KPiA+PiArCQl9IGVs c2Ugew0KPiA+PiArCQkJc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYgPQ0KPiA+PiArCQkJCSZydGVf ZXRoX2RldmljZXNbcnh2cS0+cG9ydF9pZF07DQo+ID4+ICsJCQlkZXYtPmRhdGEtPnJ4X21idWZf YWxsb2NfZmFpbGVkICs9IGZyZWVfY250Ow0KPiA+PiAgIAkJfQ0KPiA+PiAtCQluYl9lbnF1ZXVl ZCsrOw0KPiA+PiAgIAl9DQo+ID4+DQo+ID4+ICAgCWlmIChsaWtlbHkobmJfZW5xdWV1ZWQpKSB7 DQo+ID4+IC0tDQo+ID4+IDIuMTcuMg0KPiA+DQpUaGFua3MgZm9yIGV4cGxhbmF0aW9uLCB0aGVu DQpSZXZpZXdlZC1ieTogR2F2aW4gSHUgPGdhdmluLmh1QGFybS5jb20+DQo=