From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70083.outbound.protection.outlook.com [40.107.7.83]) by dpdk.org (Postfix) with ESMTP id F1FAE2C37 for ; Tue, 22 Jan 2019 15:49:42 +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=JRtghiAFPVyTuePvmddfTA+jDx9355EhSCLeJOFcPOo=; b=AJzuuL3nFQFnRWVvXaB/2JMYUoWL7m6aioNLXRC4fWuA2GytMGF5tJLpEvsKX4Iozf/WMPx1aaQwz44BFeggTjQwktjGBAER0ypPr+YTz0KnAQf/25vw/GOERjUCJ1WO60eeP2KxLXv5xuXKcY4Zc7ETtEjCGYWQVnKrJzyi/pA= Received: from HE1PR0801MB2076.eurprd08.prod.outlook.com (10.168.95.140) by HE1PR0801MB2714.eurprd08.prod.outlook.com (10.166.196.155) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1537.25; Tue, 22 Jan 2019 14:49:39 +0000 Received: from HE1PR0801MB2076.eurprd08.prod.outlook.com ([fe80::f5e3:70fc:e834:3c42]) by HE1PR0801MB2076.eurprd08.prod.outlook.com ([fe80::f5e3:70fc:e834:3c42%3]) with mapi id 15.20.1537.031; Tue, 22 Jan 2019 14:49:39 +0000 From: Ola Liljedahl To: "gage.eads@intel.com" , "dev@dpdk.org" CC: "olivier.matz@6wind.com" , "stephen@networkplumber.org" , nd , "bruce.richardson@intel.com" , "arybchenko@solarflare.com" , "konstantin.ananyev@intel.com" Thread-Topic: [dpdk-dev] [PATCH v3 2/5] ring: add a non-blocking implementation Thread-Index: AQHUr0H3NsJBTf2hT0+nXGXAmKraP6W7ZOeA Date: Tue, 22 Jan 2019 14:49:39 +0000 Message-ID: <1548168583.31150.32.camel@arm.com> References: <20190115235227.14013-1-gage.eads@intel.com> <20190118152326.22686-1-gage.eads@intel.com> <20190118152326.22686-3-gage.eads@intel.com> In-Reply-To: <20190118152326.22686-3-gage.eads@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Evolution 3.18.5.2-0ubuntu3.2 authentication-results: spf=none (sender IP is ) smtp.mailfrom=Ola.Liljedahl@arm.com; x-originating-ip: [217.140.106.54] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; HE1PR0801MB2714; 6:Pyh7F/O6DQVmWFXjChQi36Vdx6gJMO92rZAh21cb9scttpMYa7aE8E1v6N3bAyBA3cLbyiR2SUFY4ypDAuYJNISzKHn2KQfT6Z9j7mstV81Lg+yY928thEB5oLiEiVQFUobwDKi6lK9Ez6V+G+o7gQlPXTbMyuWRvmh4M8iH2nWLso4AzQlpi3IEzEPMEhEIJBp+pOmeo9QD8NRL9T5GZ68AOyFvGG2To8GOM6dzKyyDxzAe4xTUljt/iUl9i7YmKUzrBCvyTBiH/oHEJgFCktrQ12BBga3AOD6bHfWOwx/VhtFY70Ud+atLOBZ1NTgnJIkzHg/pWejvRv/sxHnfMD8W8ig1K9i2s+AYHSR1Ej0IHcRaaIWo3zcihJRMeQBR9yFqQpi9SoC2BleiXWWSiuG1wonj9VRtkTPn0Gs4ySsS5QWRltlrm6eNxgJqOMcokM8DkfAki8pEcCeq8ITLBA==; 5:wiRum48DMFxQoLHqk8vDA2GLGo8mEpGbdb82cMUJDh5dYxmLmQr1Rcrwiq2f9t0se33z1vIjuxBm/Kc3QuzOzx5KGG5DBT0GUkvwWrywAb2GJwY3PuHV2EdfXiiOrRLRbKGNK34IY/D2zuzarSilg5qiuHL7UNfMFb7rd63GAWu2ZVskgQ8dq/8FIkcYFbsausKCuTgCUZP0RMx8qwyJEg==; 7:ud/Trc+nslR1ECX2XP6lO8gVTK6HZvgjLfSbJEcvdnOZJd4T4lYc9hMulVYCaYDoISdfLM88bS1PWlHNb0cs5Tk/8sSMsZGAH+nbfhmYOgE8YZh4hhcqASbjNRuHE8Ge5cNmRmofSmkmVLTn6um6Yw== x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-correlation-id: 2304b80b-8199-4a30-362f-08d68078d641 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600109)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:HE1PR0801MB2714; x-ms-traffictypediagnostic: HE1PR0801MB2714: nodisclaimer: True x-microsoft-antispam-prvs: x-forefront-prvs: 0925081676 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(366004)(39860400002)(136003)(376002)(396003)(346002)(199004)(189003)(51234002)(30864003)(76176011)(71200400001)(102836004)(99286004)(446003)(6436002)(103116003)(2501003)(81156014)(81166006)(36756003)(6486002)(478600001)(97736004)(110136005)(54906003)(26005)(305945005)(6506007)(6116002)(2906002)(256004)(72206003)(14444005)(186003)(14454004)(229853002)(3846002)(71190400001)(316002)(11346002)(53946003)(53936002)(66066001)(25786009)(6246003)(6512007)(2616005)(7736002)(476003)(86362001)(8676002)(68736007)(486006)(105586002)(8936002)(106356001)(50226002)(4326008)(99106002)(559001)(579004)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0801MB2714; H:HE1PR0801MB2076.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-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: sRXWLvM0FaU0wJKH2AVdRLKPP4UXYXXer0ZuItpG0oRsGj9yMi0wxbPC9oDHrTqM19wrZqWWMia1SP40qTy1TuUINa4x9+vDIoHGher7F3SCLZBMdq6ilOXkLD0KD3bfmqbSgdDRPh2w1MCXXPlr7DQp+jCSb7XXudUlYyCaTz3vL44Pj2+9wYZmcPA1lMwCw8BILU0fS8YL2pSpag6JrcZ/apwvs0i34VXmZ/D82zmnZP/uCgHVQtnhZvMS6iP+6Ys2PxRy6Ctk7dVY/L9gdv7rT43nYrDxj4cJHA3V2XTA+8dAmK1ocQB7tG48JvZZIgBtzZmIPbAN5KsCLF3j4BdkohIcovsjQoj6iHMMTr1F3T0N1/rNTwfF6AT5U7KqKOVFUBYAAcJBdC7ToBTg5Gc8SJ7eQAVwI6UdG39uaKQ= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-ID: <932CC092BE1EB8448B5375F5D20D6F31@eurprd08.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2304b80b-8199-4a30-362f-08d68078d641 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Jan 2019 14:49:39.6951 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB2714 Subject: Re: [dpdk-dev] [PATCH v3 2/5] ring: add a non-blocking implementation 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: Tue, 22 Jan 2019 14:49:43 -0000 KHJlc2VuZGluZyB3aXRob3V0IHRoZSBjb25maWRlbnRpYWwgZm9vdGVyLCB0aGluayBJIGZpZ3Vy ZWQgaXQgb3V0LCBpZ25vcmUgdGhlDQpwcmV2aW91cyBlbWFpbCBmcm9tIG1lIGluIHRoaXMgdGhy ZWFkKQ0KDQotLSBPbGENCg0KT24gRnJpLCAyMDE5LTAxLTE4IGF0IDA5OjIzIC0wNjAwLCBHYWdl IEVhZHMgd3JvdGU6DQo+IFRoaXMgY29tbWl0IGFkZHMgc3VwcG9ydCBmb3Igbm9uLWJsb2NraW5n IGNpcmN1bGFyIHJpbmcgZW5xdWV1ZSBhbmQgZGVxdWV1ZQ0KPiBmdW5jdGlvbnMuIFRoZSByaW5n IHVzZXMgYSAxMjgtYml0IGNvbXBhcmUtYW5kLXN3YXAgaW5zdHJ1Y3Rpb24sIGFuZCB0aHVzDQo+ IGlzIGN1cnJlbnRseSBsaW1pdGVkIHRvIHg4Nl82NC4NCj4gDQo+IFRoZSBhbGdvcml0aG0gaXMg YmFzZWQgb24gdGhlIG9yaWdpbmFsIHJ0ZSByaW5nIChkZXJpdmVkIGZyb20gRnJlZUJTRCdzDQo+ IGJ1ZnJpbmcuaCkgYW5kIGluc3BpcmVkIGJ5IE1pY2hhZWwgYW5kIFNjb3R0J3Mgbm9uLWJsb2Nr aW5nIGNvbmN1cnJlbnQNCj4gcXVldWUuIEltcG9ydGFudGx5LCBpdCBhZGRzIGEgbW9kaWZpY2F0 aW9uIGNvdW50ZXIgdG8gZWFjaCByaW5nIGVudHJ5IHRvDQo+IGVuc3VyZSBvbmx5IG9uZSB0aHJl YWQgY2FuIHdyaXRlIHRvIGFuIHVudXNlZCBlbnRyeS4NCj4gDQo+IC0tLS0tDQo+IEFsZ29yaXRo bToNCj4gDQo+IE11bHRpLXByb2R1Y2VyIG5vbi1ibG9ja2luZyBlbnF1ZXVlOg0KPiAxLiBNb3Zl IHRoZSBwcm9kdWNlciBoZWFkIGluZGV4ICduJyBsb2NhdGlvbnMgZm9yd2FyZCwgZWZmZWN0aXZl bHkNCj4gwqDCoMKgcmVzZXJ2aW5nICduJyBsb2NhdGlvbnMuDQo+IDIuIEZvciBlYWNoIHBvaW50 ZXI6DQo+IMKgYS4gUmVhZCB0aGUgcHJvZHVjZXIgdGFpbCBpbmRleCwgdGhlbiByaW5nW3RhaWxd LiBJZiByaW5nW3RhaWxdJ3MNCj4gwqDCoMKgwqBtb2RpZmljYXRpb24gY291bnRlciBpc24ndCAn dGFpbCcsIHJldHJ5Lg0KPiDCoGIuIENvbnN0cnVjdCB0aGUgbmV3IGVudHJ5OiB7cG9pbnRlciwg dGFpbCArIHJpbmcgc2l6ZX0NCj4gwqBjLiBDb21wYXJlLWFuZC1zd2FwIHRoZSBvbGQgZW50cnkg d2l0aCB0aGUgbmV3LiBJZiB1bnN1Y2Nlc3NmdWwsIHRoZQ0KPiDCoMKgwqDCoG5leHQgbG9vcCBp dGVyYXRpb24gd2lsbCB0cnkgdG8gZW5xdWV1ZSB0aGlzIHBvaW50ZXIgYWdhaW4uDQo+IMKgZC4g Q29tcGFyZS1hbmQtc3dhcCB0aGUgdGFpbCBpbmRleCB3aXRoICd0YWlsICsgMScsIHdoZXRoZXIg b3Igbm90IHN0ZXAgMmMNCj4gwqDCoMKgwqBzdWNjZWVkZWQuIFRoaXMgZ3VhcmFudGVlcyB0aHJl YWRzIGNhbiBtYWtlIGZvcndhcmQgcHJvZ3Jlc3MuDQo+IA0KPiBNdWx0aS1jb25zdW1lciBub24t YmxvY2tpbmcgZGVxdWV1ZToNCj4gMS4gTW92ZSB0aGUgY29uc3VtZXIgaGVhZCBpbmRleCAnbicg bG9jYXRpb25zIGZvcndhcmQsIGVmZmVjdGl2ZWx5DQo+IMKgwqDCoHJlc2VydmluZyAnbicgcG9p bnRlcnMgdG8gYmUgZGVxdWV1ZWQuDQo+IDIuIENvcHkgJ24nIHBvaW50ZXJzIGludG8gdGhlIGNh bGxlcidzIG9iamVjdCB0YWJsZSAoaWdub3JpbmcgdGhlDQo+IMKgwqDCoG1vZGlmaWNhdGlvbiBj b3VudGVyKSwgc3RhcnRpbmcgZnJvbSByaW5nW3RhaWxdLCB0aGVuIGNvbXBhcmUtYW5kLXN3YXAN Cj4gwqDCoMKgdGhlIHRhaWwgaW5kZXggd2l0aCAndGFpbCArIG4nLsKgwqBJZiB1bnN1Y2Nlc3Nm dWwsIHJlcGVhdCBzdGVwIDIuDQo+IA0KPiAtLS0tLQ0KPiBEaXNjdXNzaW9uOg0KPiANCj4gVGhl cmUgYXJlIHR3byBjYXNlcyB3aGVyZSB0aGUgQUJBIHByb2JsZW0gaXMgbWl0aWdhdGVkOg0KPiAx LiBFbnF1ZXVlaW5nIGEgcG9pbnRlciB0byB0aGUgcmluZzogd2l0aG91dCBhIG1vZGlmaWNhdGlv biBjb3VudGVyDQo+IMKgwqDCoHRpZWQgdG8gdGhlIHRhaWwgaW5kZXgsIHRoZSBpbmRleCBjb3Vs ZCBiZWNvbWUgc3RhbGUgYnkgdGhlIHRpbWUgdGhlDQo+IMKgwqDCoGVucXVldWUgaGFwcGVucywg Y2F1c2luZyBpdCB0byBvdmVyd3JpdGUgdmFsaWQgZGF0YS4gVHlpbmcgdGhlDQo+IMKgwqDCoGNv dW50ZXIgdG8gdGhlIHRhaWwgaW5kZXggZ2l2ZXMgdXMgYW4gZXhwZWN0ZWQgdmFsdWUgKGFzIG9w cG9zZWQgdG8sDQo+IMKgwqDCoHNheSwgYSBtb25vdG9uaWNhbGx5IGluY3JlbWVudGluZyBjb3Vu dGVyKS4NCj4gDQo+IMKgwqDCoFNpbmNlIHRoZSBjb3VudGVyIHdpbGwgZXZlbnR1YWxseSB3cmFw LCB0aGVyZSBpcyBwb3RlbnRpYWwgZm9yIHRoZSBBQkENCj4gwqDCoMKgcHJvYmxlbS4gSG93ZXZl ciwgdXNpbmcgYSA2NC1iaXQgY291bnRlciBtYWtlcyB0aGlzIGxpa2VsaWhvb2QNCj4gwqDCoMKg ZWZmZWN0aXZlbHkgemVyby4NCj4gDQo+IDIuIFVwZGF0aW5nIGEgdGFpbCBpbmRleDogdGhlIEFC QSBwcm9ibGVtIGNhbiBvY2N1ciBpZiB0aGUgdGhyZWFkIGlzDQo+IMKgwqDCoHByZWVtcHRlZCBh bmQgdGhlIHRhaWwgaW5kZXggd3JhcHMgYXJvdW5kLiBIb3dldmVyLCB1c2luZyA2NC1iaXQgaW5k ZXhlcw0KPiDCoMKgwqBtYWtlcyB0aGlzIGxpa2VsaWhvb2QgZWZmZWN0aXZlbHkgemVyby4NCj4g DQo+IFdpdGggbm8gY29udGVudGlvbiwgYW4gZW5xdWV1ZSBvZiBuIHBvaW50ZXJzIHVzZXMgKDEg KyAybikgQ0FTIG9wZXJhdGlvbnMNCj4gYW5kIGEgZGVxdWV1ZSBvZiBuIHBvaW50ZXJzIHVzZXMg Mi4gVGhpcyBhbGdvcml0aG0gaGFzIHdvcnNlIGF2ZXJhZ2UtY2FzZQ0KPiBwZXJmb3JtYW5jZSB0 aGFuIHRoZSByZWd1bGFyIHJ0ZSByaW5nIChwYXJ0aWN1bGFybHkgYSBoaWdobHktY29udGVuZGVk IHJpbmcNCj4gd2l0aCBsYXJnZSBidWxrIGFjY2Vzc2VzKSwgaG93ZXZlcjoNCj4gLSBGb3IgYXBw bGljYXRpb25zIHdpdGggcHJlZW1wdGlibGUgcHRocmVhZHMsIHRoZSByZWd1bGFyIHJ0ZSByaW5n J3MNCj4gwqAgd29yc3QtY2FzZSBwZXJmb3JtYW5jZSAoaS5lLiBvbmUgdGhyZWFkIGJlaW5nIHBy ZWVtcHRlZCBpbiB0aGUNCj4gwqAgdXBkYXRlX3RhaWwoKSBjcml0aWNhbCBzZWN0aW9uKSBpcyBt dWNoIHdvcnNlIHRoYW4gdGhlIG5vbi1ibG9ja2luZw0KPiDCoCByaW5nJ3MuDQo+IC0gU29mdHdh cmUgY2FjaGluZyBjYW4gbWl0aWdhdGUgdGhlIGF2ZXJhZ2UgY2FzZSBwZXJmb3JtYW5jZSBmb3Ig cmluZy1iYXNlZA0KPiDCoCBhbGdvcml0aG1zLiBGb3IgZXhhbXBsZSwgYSBub24tYmxvY2tpbmcg cmluZyBiYXNlZCBtZW1wb29sIChhIGxpa2VseSB1c2UNCj4gwqAgY2FzZSBmb3IgdGhpcyByaW5n KSB3aXRoIHBlci10aHJlYWQgY2FjaGluZy4NCj4gDQo+IFRoZSBub24tYmxvY2tpbmcgcmluZyBp cyBlbmFibGVkIHZpYSBhIG5ldyBmbGFnLCBSSU5HX0ZfTkIuIEJlY2F1c2UgdGhlDQo+IHJpbmcn cyBtZW1zaXplIGlzIG5vdyBhIGZ1bmN0aW9uIG9mIGl0cyBmbGFncyAodGhlIG5vbi1ibG9ja2lu ZyByaW5nDQo+IHJlcXVpcmVzIDEyOGIgZm9yIGVhY2ggZW50cnkpLCB0aGlzIGNvbW1pdCBhZGRz IGEgbmV3IGFyZ3VtZW50ICgnZmxhZ3MnKSB0bw0KPiBydGVfcmluZ19nZXRfbWVtc2l6ZSgpLiBB biBBUEkgZGVwcmVjYXRpb24gbm90aWNlIHdpbGwgYmUgc2VudCBpbiBhDQo+IHNlcGFyYXRlIGNv bW1pdC4NCj4gDQo+IEZvciBlYXNlLW9mLXVzZSwgZXhpc3RpbmcgcmluZyBlbnF1ZXVlIGFuZCBk ZXF1ZXVlIGZ1bmN0aW9ucyB3b3JrIG9uIGJvdGgNCj4gcmVndWxhciBhbmQgbm9uLWJsb2NraW5n IHJpbmdzLiBUaGlzIGludHJvZHVjZXMgYW4gYWRkaXRpb25hbCBicmFuY2ggaW4NCj4gdGhlIGRh dGFwYXRoLCBidXQgdGhpcyBzaG91bGQgYmUgYSBoaWdobHkgcHJlZGljdGFibGUgYnJhbmNoLg0K PiByaW5nX3BlcmZfYXV0b3Rlc3Qgc2hvd3MgYSBuZWdsaWdpYmxlIHBlcmZvcm1hbmNlIGltcGFj dDsgaXQncyBoYXJkIHRvDQo+IGRpc3Rpbmd1aXNoIGEgcmVhbCBkaWZmZXJlbmNlIHZlcnN1cyBz eXN0ZW0gbm9pc2UuDQo+IA0KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHwgcmluZ19wZXJmX2F1dG90ZXN0IGN5Y2xl cyB3aXRoIGJyYW5jaCAtDQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgVGVzdMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgcmluZ19wZXJmX2F1dG90ZXN0IGN5Y2xl cyB3aXRob3V0DQo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiBTUC9TQyBzaW5nbGUgZW5xL2RlcXVldWXCoMKgwqDC oMKgwqDCoMKgwqDCoHwgMC4zMw0KPiBNUC9NQyBzaW5nbGUgZW5xL2RlcXVldWXCoMKgwqDCoMKg wqDCoMKgwqDCoHwgLTQuMDANCj4gU1AvU0MgYnVyc3QgZW5xL2RlcXVldWUgKHNpemUgOCnCoMKg fCAwLjAwDQo+IE1QL01DIGJ1cnN0IGVucS9kZXF1ZXVlIChzaXplIDgpwqDCoHwgMC4wMA0KPiBT UC9TQyBidXJzdCBlbnEvZGVxdWV1ZSAoc2l6ZSAzMikgfCAwLjAwDQo+IE1QL01DIGJ1cnN0IGVu cS9kZXF1ZXVlIChzaXplIDMyKSB8IDAuMDANCj4gU0MgZW1wdHkgZGVxdWV1ZcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHwgMS4wMA0KPiBNQyBlbXB0eSBkZXF1ZXVlwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfCAwLjAwDQo+IA0KPiBTaW5nbGUgbGNvcmU6 DQo+IFNQL1NDIGJ1bGsgZW5xL2RlcXVldWUgKHNpemUgOCnCoMKgwqB8IDAuNDkNCj4gTVAvTUMg YnVsayBlbnEvZGVxdWV1ZSAoc2l6ZSA4KcKgwqDCoHwgMC4wOA0KPiBTUC9TQyBidWxrIGVucS9k ZXF1ZXVlIChzaXplIDMyKcKgwqB8IDAuMDcNCj4gTVAvTUMgYnVsayBlbnEvZGVxdWV1ZSAoc2l6 ZSAzMinCoMKgfCAwLjA5DQo+IA0KPiBUd28gcGh5c2ljYWwgY29yZXM6DQo+IFNQL1NDIGJ1bGsg ZW5xL2RlcXVldWUgKHNpemUgOCnCoMKgwqB8IDAuMTkNCj4gTVAvTUMgYnVsayBlbnEvZGVxdWV1 ZSAoc2l6ZSA4KcKgwqDCoHwgLTAuMzcNCj4gU1AvU0MgYnVsayBlbnEvZGVxdWV1ZSAoc2l6ZSAz MinCoMKgfCAwLjA5DQo+IE1QL01DIGJ1bGsgZW5xL2RlcXVldWUgKHNpemUgMzIpwqDCoHwgLTAu MDUNCj4gDQo+IFR3byBOVU1BIG5vZGVzOg0KPiBTUC9TQyBidWxrIGVucS9kZXF1ZXVlIChzaXpl IDgpwqDCoMKgfCAtMS45Ng0KPiBNUC9NQyBidWxrIGVucS9kZXF1ZXVlIChzaXplIDgpwqDCoMKg fCAwLjg4DQo+IFNQL1NDIGJ1bGsgZW5xL2RlcXVldWUgKHNpemUgMzIpwqDCoHwgMC4xMA0KPiBN UC9NQyBidWxrIGVucS9kZXF1ZXVlIChzaXplIDMyKcKgwqB8IDAuNDYNCj4gDQo+IFRlc3Qgc2V0 dXA6IHg4Nl82NCBidWlsZCB3aXRoIGRlZmF1bHQgY29uZmlnLCBkdWFsLXNvY2tldCBYZW9uIEU1 LTI2OTkgdjQsDQo+IHJ1bm5pbmcgb24gaXNvbGNwdXMgY29yZXMgd2l0aCBhIHRpY2tsZXNzIHNj aGVkdWxlci4gRWFjaCB0ZXN0IHJ1biB0aHJlZQ0KPiB0aW1lcyBhbmQgdGhlIHJlc3VsdHMgYXZl cmFnZWQuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBHYWdlIEVhZHMgPGdhZ2UuZWFkc0BpbnRlbC5j b20+DQo+IC0tLQ0KPiDCoGxpYi9saWJydGVfcmluZy9ydGVfcmluZy5jwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHzCoMKgNzIgKysrKy0NCj4gwqBsaWIvbGlicnRlX3JpbmcvcnRlX3JpbmcuaMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB8IDU1MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst DQo+IC0NCj4gwqBsaWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfdmVyc2lvbi5tYXAgfMKgwqDCoDcg Kw0KPiDCoDMgZmlsZXMgY2hhbmdlZCwgNTg3IGluc2VydGlvbnMoKyksIDQyIGRlbGV0aW9ucygt KQ0KPiANCj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfcmluZy9ydGVfcmluZy5jIGIvbGliL2xp YnJ0ZV9yaW5nL3J0ZV9yaW5nLmMNCj4gaW5kZXggZDIxNWFjZWNjLi5mMzM3OGRjY2QgMTAwNjQ0 DQo+IC0tLSBhL2xpYi9saWJydGVfcmluZy9ydGVfcmluZy5jDQo+ICsrKyBiL2xpYi9saWJydGVf cmluZy9ydGVfcmluZy5jDQo+IEBAIC00NSw5ICs0NSw5IEBAIEVBTF9SRUdJU1RFUl9UQUlMUShy dGVfcmluZ190YWlscSkNCj4gwqANCj4gwqAvKiByZXR1cm4gdGhlIHNpemUgb2YgbWVtb3J5IG9j Y3VwaWVkIGJ5IGEgcmluZyAqLw0KPiDCoHNzaXplX3QNCj4gLXJ0ZV9yaW5nX2dldF9tZW1zaXpl KHVuc2lnbmVkIGNvdW50KQ0KPiArcnRlX3JpbmdfZ2V0X21lbXNpemVfdjE5MDUodW5zaWduZWQg aW50IGNvdW50LCB1bnNpZ25lZCBpbnQgZmxhZ3MpDQo+IMKgew0KPiAtCXNzaXplX3Qgc3o7DQo+ ICsJc3NpemVfdCBzeiwgZWx0X3N6Ow0KPiDCoA0KPiDCoAkvKiBjb3VudCBtdXN0IGJlIGEgcG93 ZXIgb2YgMiAqLw0KPiDCoAlpZiAoKCFQT1dFUk9GMihjb3VudCkpIHx8IChjb3VudCA+IFJURV9S SU5HX1NaX01BU0sgKSkgew0KPiBAQCAtNTcsMTAgKzU3LDIzIEBAIHJ0ZV9yaW5nX2dldF9tZW1z aXplKHVuc2lnbmVkIGNvdW50KQ0KPiDCoAkJcmV0dXJuIC1FSU5WQUw7DQo+IMKgCX0NCj4gwqAN Cj4gLQlzeiA9IHNpemVvZihzdHJ1Y3QgcnRlX3JpbmcpICsgY291bnQgKiBzaXplb2Yodm9pZCAq KTsNCj4gKwllbHRfc3ogPSAoZmxhZ3MgJiBSSU5HX0ZfTkIpID8gMiAqIHNpemVvZih2b2lkICop IDogc2l6ZW9mKHZvaWQgKik7DQo+ICsNCj4gKwlzeiA9IHNpemVvZihzdHJ1Y3QgcnRlX3Jpbmcp ICsgY291bnQgKiBlbHRfc3o7DQo+IMKgCXN6ID0gUlRFX0FMSUdOKHN6LCBSVEVfQ0FDSEVfTElO RV9TSVpFKTsNCj4gwqAJcmV0dXJuIHN6Ow0KPiDCoH0NCj4gK0JJTkRfREVGQVVMVF9TWU1CT0wo cnRlX3JpbmdfZ2V0X21lbXNpemUsIF92MTkwNSwgMTkuMDUpOw0KPiArTUFQX1NUQVRJQ19TWU1C T0woc3NpemVfdCBydGVfcmluZ19nZXRfbWVtc2l6ZSh1bnNpZ25lZCBpbnQgY291bnQsDQo+ICsJ CQkJCcKgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IGZsYWdzKSwNCj4gKwkJwqDCoHJ0ZV9yaW5n X2dldF9tZW1zaXplX3YxOTA1KTsNCj4gKw0KPiArc3NpemVfdA0KPiArcnRlX3JpbmdfZ2V0X21l bXNpemVfdjIwKHVuc2lnbmVkIGludCBjb3VudCkNCj4gK3sNCj4gKwlyZXR1cm4gcnRlX3Jpbmdf Z2V0X21lbXNpemVfdjE5MDUoY291bnQsIDApOw0KPiArfQ0KPiArVkVSU0lPTl9TWU1CT0wocnRl X3JpbmdfZ2V0X21lbXNpemUsIF92MjAsIDIuMCk7DQo+IMKgDQo+IMKgaW50DQo+IMKgcnRlX3Jp bmdfaW5pdChzdHJ1Y3QgcnRlX3JpbmcgKnIsIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGNv dW50LA0KPiBAQCAtODIsOCArOTUsNiBAQCBydGVfcmluZ19pbml0KHN0cnVjdCBydGVfcmluZyAq ciwgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQNCj4gY291bnQsDQo+IMKgCWlmIChyZXQgPCAw IHx8IHJldCA+PSAoaW50KXNpemVvZihyLT5uYW1lKSkNCj4gwqAJCXJldHVybiAtRU5BTUVUT09M T05HOw0KPiDCoAlyLT5mbGFncyA9IGZsYWdzOw0KPiAtCXItPnByb2Quc2luZ2xlID0gKGZsYWdz ICYgUklOR19GX1NQX0VOUSkgPyBfX0lTX1NQIDogX19JU19NUDsNCj4gLQlyLT5jb25zLnNpbmds ZSA9IChmbGFncyAmIFJJTkdfRl9TQ19ERVEpID8gX19JU19TQyA6IF9fSVNfTUM7DQo+IMKgDQo+ IMKgCWlmIChmbGFncyAmIFJJTkdfRl9FWEFDVF9TWikgew0KPiDCoAkJci0+c2l6ZSA9IHJ0ZV9h bGlnbjMycG93Mihjb3VudCArIDEpOw0KPiBAQCAtMTAwLDggKzExMSwzMCBAQCBydGVfcmluZ19p bml0KHN0cnVjdCBydGVfcmluZyAqciwgY29uc3QgY2hhciAqbmFtZSwNCj4gdW5zaWduZWQgY291 bnQsDQo+IMKgCQlyLT5tYXNrID0gY291bnQgLSAxOw0KPiDCoAkJci0+Y2FwYWNpdHkgPSByLT5t YXNrOw0KPiDCoAl9DQo+IC0Jci0+cHJvZC5oZWFkID0gci0+Y29ucy5oZWFkID0gMDsNCj4gLQly LT5wcm9kLnRhaWwgPSByLT5jb25zLnRhaWwgPSAwOw0KPiArDQo+ICsJaWYgKGZsYWdzICYgUklO R19GX05CKSB7DQo+ICsJCXVpbnQ2NF90IGk7DQo+ICsNCj4gKwkJci0+cHJvZF82NC5zaW5nbGUg PSAoZmxhZ3MgJiBSSU5HX0ZfU1BfRU5RKSA/IF9fSVNfU1AgOg0KPiBfX0lTX01QOw0KPiArCQly LT5jb25zXzY0LnNpbmdsZSA9IChmbGFncyAmIFJJTkdfRl9TQ19ERVEpID8gX19JU19TQyA6DQo+ IF9fSVNfTUM7DQo+ICsJCXItPnByb2RfNjQuaGVhZCA9IHItPmNvbnNfNjQuaGVhZCA9IDA7DQo+ ICsJCXItPnByb2RfNjQudGFpbCA9IHItPmNvbnNfNjQudGFpbCA9IDA7DQo+ICsNCj4gKwkJZm9y IChpID0gMDsgaSA8IHItPnNpemU7IGkrKykgew0KPiArCQkJc3RydWN0IG5iX3JpbmdfZW50cnkg KnJpbmdfcHRyLCAqYmFzZTsNCj4gKw0KPiArCQkJYmFzZSA9ICgoc3RydWN0IG5iX3JpbmdfZW50 cnkgKikmclsxXSk7DQo+ICsNCj4gKwkJCXJpbmdfcHRyID0gJmJhc2VbaSAmIHItPm1hc2tdOw0K PiArDQo+ICsJCQlyaW5nX3B0ci0+Y250ID0gaTsNCj4gKwkJfQ0KPiArCX0gZWxzZSB7DQo+ICsJ CXItPnByb2Quc2luZ2xlID0gKGZsYWdzICYgUklOR19GX1NQX0VOUSkgPyBfX0lTX1NQIDogX19J U19NUDsNCj4gKwkJci0+Y29ucy5zaW5nbGUgPSAoZmxhZ3MgJiBSSU5HX0ZfU0NfREVRKSA/IF9f SVNfU0MgOiBfX0lTX01DOw0KPiArCQlyLT5wcm9kLmhlYWQgPSByLT5jb25zLmhlYWQgPSAwOw0K PiArCQlyLT5wcm9kLnRhaWwgPSByLT5jb25zLnRhaWwgPSAwOw0KPiArCX0NCj4gwqANCj4gwqAJ cmV0dXJuIDA7DQo+IMKgfQ0KPiBAQCAtMTIzLDExICsxNTYsMTkgQEAgcnRlX3JpbmdfY3JlYXRl KGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGNvdW50LCBpbnQNCj4gc29ja2V0X2lkLA0KPiDC oA0KPiDCoAlyaW5nX2xpc3QgPSBSVEVfVEFJTFFfQ0FTVChydGVfcmluZ190YWlscS5oZWFkLCBy dGVfcmluZ19saXN0KTsNCj4gwqANCj4gKyNpZiAhZGVmaW5lZChSVEVfQVJDSF9YODZfNjQpDQo+ ICsJaWYgKGZsYWdzICYgUklOR19GX05CKSB7DQo+ICsJCXByaW50ZigiUklOR19GX05CIGlzIG9u bHkgc3VwcG9ydGVkIG9uIHg4Ni02NCBwbGF0Zm9ybXNcbiIpOw0KPiArCQlydGVfZXJybm8gPSBF SU5WQUw7DQo+ICsJCXJldHVybiBOVUxMOw0KPiArCX0NCj4gKyNlbmRpZg0KPiArDQo+IMKgCS8q IGZvciBhbiBleGFjdCBzaXplIHJpbmcsIHJvdW5kIHVwIGZyb20gY291bnQgdG8gYSBwb3dlciBv ZiB0d28gKi8NCj4gwqAJaWYgKGZsYWdzICYgUklOR19GX0VYQUNUX1NaKQ0KPiDCoAkJY291bnQg PSBydGVfYWxpZ24zMnBvdzIoY291bnQgKyAxKTsNCj4gwqANCj4gLQlyaW5nX3NpemUgPSBydGVf cmluZ19nZXRfbWVtc2l6ZShjb3VudCk7DQo+ICsJcmluZ19zaXplID0gcnRlX3JpbmdfZ2V0X21l bXNpemUoY291bnQsIGZsYWdzKTsNCj4gwqAJaWYgKHJpbmdfc2l6ZSA8IDApIHsNCj4gwqAJCXJ0 ZV9lcnJubyA9IHJpbmdfc2l6ZTsNCj4gwqAJCXJldHVybiBOVUxMOw0KPiBAQCAtMjI3LDEwICsy NjgsMTcgQEAgcnRlX3JpbmdfZHVtcChGSUxFICpmLCBjb25zdCBzdHJ1Y3QgcnRlX3JpbmcgKnIp DQo+IMKgCWZwcmludGYoZiwgIsKgwqBmbGFncz0leFxuIiwgci0+ZmxhZ3MpOw0KPiDCoAlmcHJp bnRmKGYsICLCoMKgc2l6ZT0lIlBSSXUzMiJcbiIsIHItPnNpemUpOw0KPiDCoAlmcHJpbnRmKGYs ICLCoMKgY2FwYWNpdHk9JSJQUkl1MzIiXG4iLCByLT5jYXBhY2l0eSk7DQo+IC0JZnByaW50Zihm LCAiwqDCoGN0PSUiUFJJdTMyIlxuIiwgci0+Y29ucy50YWlsKTsNCj4gLQlmcHJpbnRmKGYsICLC oMKgY2g9JSJQUkl1MzIiXG4iLCByLT5jb25zLmhlYWQpOw0KPiAtCWZwcmludGYoZiwgIsKgwqBw dD0lIlBSSXUzMiJcbiIsIHItPnByb2QudGFpbCk7DQo+IC0JZnByaW50ZihmLCAiwqDCoHBoPSUi UFJJdTMyIlxuIiwgci0+cHJvZC5oZWFkKTsNCj4gKwlpZiAoci0+ZmxhZ3MgJiBSSU5HX0ZfTkIp IHsNCj4gKwkJZnByaW50ZihmLCAiwqDCoGN0PSUiUFJJdTY0IlxuIiwgci0+Y29uc182NC50YWls KTsNCj4gKwkJZnByaW50ZihmLCAiwqDCoGNoPSUiUFJJdTY0IlxuIiwgci0+Y29uc182NC5oZWFk KTsNCj4gKwkJZnByaW50ZihmLCAiwqDCoHB0PSUiUFJJdTY0IlxuIiwgci0+cHJvZF82NC50YWls KTsNCj4gKwkJZnByaW50ZihmLCAiwqDCoHBoPSUiUFJJdTY0IlxuIiwgci0+cHJvZF82NC5oZWFk KTsNCj4gKwl9IGVsc2Ugew0KPiArCQlmcHJpbnRmKGYsICLCoMKgY3Q9JSJQUkl1MzIiXG4iLCBy LT5jb25zLnRhaWwpOw0KPiArCQlmcHJpbnRmKGYsICLCoMKgY2g9JSJQUkl1MzIiXG4iLCByLT5j b25zLmhlYWQpOw0KPiArCQlmcHJpbnRmKGYsICLCoMKgcHQ9JSJQUkl1MzIiXG4iLCByLT5wcm9k LnRhaWwpOw0KPiArCQlmcHJpbnRmKGYsICLCoMKgcGg9JSJQUkl1MzIiXG4iLCByLT5wcm9kLmhl YWQpOw0KPiArCX0NCj4gwqAJZnByaW50ZihmLCAiwqDCoHVzZWQ9JXVcbiIsIHJ0ZV9yaW5nX2Nv dW50KHIpKTsNCj4gwqAJZnByaW50ZihmLCAiwqDCoGF2YWlsPSV1XG4iLCBydGVfcmluZ19mcmVl X2NvdW50KHIpKTsNCj4gwqB9DQo+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3JpbmcvcnRlX3Jp bmcuaCBiL2xpYi9saWJydGVfcmluZy9ydGVfcmluZy5oDQo+IGluZGV4IGIyNzBhNDc0Ni4uMDhj OWRlNmE2IDEwMDY0NA0KPiAtLS0gYS9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmcuaA0KPiArKysg Yi9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmcuaA0KPiBAQCAtMTM0LDYgKzEzNCwxOCBAQCBzdHJ1 Y3QgcnRlX3Jpbmcgew0KPiDCoCAqLw0KPiDCoCNkZWZpbmUgUklOR19GX0VYQUNUX1NaIDB4MDAw NA0KPiDCoCNkZWZpbmUgUlRFX1JJTkdfU1pfTUFTS8KgwqAoMHg3ZmZmZmZmZlUpIC8qKjwgUmlu ZyBzaXplIG1hc2sgKi8NCj4gKy8qKg0KPiArICogVGhlIHJpbmcgdXNlcyBub24tYmxvY2tpbmcg ZW5xdWV1ZSBhbmQgZGVxdWV1ZSBmdW5jdGlvbnMuIFRoZXNlIGZ1bmN0aW9ucw0KPiArICogZG8g bm90IGhhdmUgdGhlICJub24tcHJlZW1wdGl2ZSIgY29uc3RyYWludCBvZiBhIHJlZ3VsYXIgcnRl IHJpbmcsIGFuZA0KPiB0aHVzDQo+ICsgKiBhcmUgc3VpdGVkIGZvciBhcHBsaWNhdGlvbnMgdXNp bmcgcHJlZW1wdGlibGUgcHRocmVhZHMuIEhvd2V2ZXIsIHRoZQ0KPiArICogbm9uLWJsb2NraW5n IGZ1bmN0aW9ucyBoYXZlIHdvcnNlIGF2ZXJhZ2UtY2FzZSBwZXJmb3JtYW5jZSB0aGFuIHRoZWly DQo+ICsgKiByZWd1bGFyIHJ0ZSByaW5nIGNvdW50ZXJwYXJ0cy4gV2hlbiB1c2VkIGFzIHRoZSBo YW5kbGVyIGZvciBhIG1lbXBvb2wsDQo+ICsgKiBwZXItdGhyZWFkIGNhY2hpbmcgY2FuIG1pdGln YXRlIHRoZSBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlIGJ5IHJlZHVjaW5nIHRoZQ0KPiArICogbnVt YmVyIChhbmQgY29udGVudGlvbikgb2YgcmluZyBhY2Nlc3Nlcy4NCj4gKyAqDQo+ICsgKiBUaGlz IGZsYWcgaXMgb25seSBzdXBwb3J0ZWQgb24geDg2XzY0IHBsYXRmb3Jtcy4NCj4gKyAqLw0KPiAr I2RlZmluZSBSSU5HX0ZfTkIgMHgwMDA4DQo+IMKgDQo+IMKgLyogQGludGVybmFsIGRlZmluZXMg Zm9yIHBhc3NpbmcgdG8gdGhlIGVucXVldWUgZGVxdWV1ZSB3b3JrZXIgZnVuY3Rpb25zICovDQo+ IMKgI2RlZmluZSBfX0lTX1NQIDENCj4gQEAgLTE1MSwxMSArMTYzLDE1IEBAIHN0cnVjdCBydGVf cmluZyB7DQo+IMKgICoNCj4gwqAgKiBAcGFyYW0gY291bnQNCj4gwqAgKsKgwqDCoFRoZSBudW1i ZXIgb2YgZWxlbWVudHMgaW4gdGhlIHJpbmcgKG11c3QgYmUgYSBwb3dlciBvZiAyKS4NCj4gKyAq IEBwYXJhbSBmbGFncw0KPiArICrCoMKgwqBUaGUgZmxhZ3MgdGhlIHJpbmcgd2lsbCBiZSBjcmVh dGVkIHdpdGguDQo+IMKgICogQHJldHVybg0KPiDCoCAqwqDCoMKgLSBUaGUgbWVtb3J5IHNpemUg bmVlZGVkIGZvciB0aGUgcmluZyBvbiBzdWNjZXNzLg0KPiDCoCAqwqDCoMKgLSAtRUlOVkFMIGlm IGNvdW50IGlzIG5vdCBhIHBvd2VyIG9mIDIuDQo+IMKgICovDQo+IC1zc2l6ZV90IHJ0ZV9yaW5n X2dldF9tZW1zaXplKHVuc2lnbmVkIGNvdW50KTsNCj4gK3NzaXplX3QgcnRlX3JpbmdfZ2V0X21l bXNpemUodW5zaWduZWQgaW50IGNvdW50LCB1bnNpZ25lZCBpbnQgZmxhZ3MpOw0KPiArc3NpemVf dCBydGVfcmluZ19nZXRfbWVtc2l6ZV92MjAodW5zaWduZWQgaW50IGNvdW50KTsNCj4gK3NzaXpl X3QgcnRlX3JpbmdfZ2V0X21lbXNpemVfdjE5MDUodW5zaWduZWQgaW50IGNvdW50LCB1bnNpZ25l ZCBpbnQgZmxhZ3MpOw0KPiDCoA0KPiDCoC8qKg0KPiDCoCAqIEluaXRpYWxpemUgYSByaW5nIHN0 cnVjdHVyZS4NCj4gQEAgLTE4OCw2ICsyMDQsMTAgQEAgc3NpemVfdCBydGVfcmluZ19nZXRfbWVt c2l6ZSh1bnNpZ25lZCBjb3VudCk7DQo+IMKgICrCoMKgwqDCoC0gUklOR19GX1NDX0RFUTogSWYg dGhpcyBmbGFnIGlzIHNldCwgdGhlIGRlZmF1bHQgYmVoYXZpb3Igd2hlbg0KPiDCoCAqwqDCoMKg wqDCoMKgdXNpbmcgYGBydGVfcmluZ19kZXF1ZXVlKClgYCBvciBgYHJ0ZV9yaW5nX2RlcXVldWVf YnVsaygpYGANCj4gwqAgKsKgwqDCoMKgwqDCoGlzICJzaW5nbGUtY29uc3VtZXIiLiBPdGhlcndp c2UsIGl0IGlzICJtdWx0aS1jb25zdW1lcnMiLg0KPiArICrCoMKgwqDCoC0gUklOR19GX0VYQUNU X1NaOiBJZiB0aGlzIGZsYWcgaXMgc2V0LCBjb3VudCBjYW4gYmUgYSBub24tcG93ZXItb2YtMg0K PiArICrCoMKgwqDCoMKgwqBudW1iZXIsIGJ1dCB1cCB0byBoYWxmIHRoZSByaW5nIHNwYWNlIG1h eSBiZSB3YXN0ZWQuDQo+ICsgKsKgwqDCoMKgLSBSSU5HX0ZfTkI6ICh4ODZfNjQgb25seSkgSWYg dGhpcyBmbGFnIGlzIHNldCwgdGhlIHJpbmcgdXNlcw0KPiArICrCoMKgwqDCoMKgwqBub24tYmxv Y2tpbmcgdmFyaWFudHMgb2YgdGhlIGRlcXVldWUgYW5kIGVucXVldWUgZnVuY3Rpb25zLg0KPiDC oCAqIEByZXR1cm4NCj4gwqAgKsKgwqDCoDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSB2YWx1 ZSBvbiBlcnJvci4NCj4gwqAgKi8NCj4gQEAgLTIyMywxMiArMjQzLDE3IEBAIGludCBydGVfcmlu Z19pbml0KHN0cnVjdCBydGVfcmluZyAqciwgY29uc3QgY2hhciAqbmFtZSwNCj4gdW5zaWduZWQg Y291bnQsDQo+IMKgICrCoMKgwqDCoC0gUklOR19GX1NDX0RFUTogSWYgdGhpcyBmbGFnIGlzIHNl dCwgdGhlIGRlZmF1bHQgYmVoYXZpb3Igd2hlbg0KPiDCoCAqwqDCoMKgwqDCoMKgdXNpbmcgYGBy dGVfcmluZ19kZXF1ZXVlKClgYCBvciBgYHJ0ZV9yaW5nX2RlcXVldWVfYnVsaygpYGANCj4gwqAg KsKgwqDCoMKgwqDCoGlzICJzaW5nbGUtY29uc3VtZXIiLiBPdGhlcndpc2UsIGl0IGlzICJtdWx0 aS1jb25zdW1lcnMiLg0KPiArICrCoMKgwqDCoC0gUklOR19GX0VYQUNUX1NaOiBJZiB0aGlzIGZs YWcgaXMgc2V0LCBjb3VudCBjYW4gYmUgYSBub24tcG93ZXItb2YtMg0KPiArICrCoMKgwqDCoMKg wqBudW1iZXIsIGJ1dCB1cCB0byBoYWxmIHRoZSByaW5nIHNwYWNlIG1heSBiZSB3YXN0ZWQuDQo+ ICsgKsKgwqDCoMKgLSBSSU5HX0ZfTkI6ICh4ODZfNjQgb25seSkgSWYgdGhpcyBmbGFnIGlzIHNl dCwgdGhlIHJpbmcgdXNlcw0KPiArICrCoMKgwqDCoMKgwqBub24tYmxvY2tpbmcgdmFyaWFudHMg b2YgdGhlIGRlcXVldWUgYW5kIGVucXVldWUgZnVuY3Rpb25zLg0KPiDCoCAqIEByZXR1cm4NCj4g wqAgKsKgwqDCoE9uIHN1Y2Nlc3MsIHRoZSBwb2ludGVyIHRvIHRoZSBuZXcgYWxsb2NhdGVkIHJp bmcuIE5VTEwgb24gZXJyb3Igd2l0aA0KPiDCoCAqwqDCoMKgwqBydGVfZXJybm8gc2V0IGFwcHJv cHJpYXRlbHkuIFBvc3NpYmxlIGVycm5vIHZhbHVlcyBpbmNsdWRlOg0KPiDCoCAqwqDCoMKgwqAt IEVfUlRFX05PX0NPTkZJRyAtIGZ1bmN0aW9uIGNvdWxkIG5vdCBnZXQgcG9pbnRlciB0byBydGVf Y29uZmlnDQo+IHN0cnVjdHVyZQ0KPiDCoCAqwqDCoMKgwqAtIEVfUlRFX1NFQ09OREFSWSAtIGZ1 bmN0aW9uIHdhcyBjYWxsZWQgZnJvbSBhIHNlY29uZGFyeSBwcm9jZXNzDQo+IGluc3RhbmNlDQo+ IC0gKsKgwqDCoMKgLSBFSU5WQUwgLSBjb3VudCBwcm92aWRlZCBpcyBub3QgYSBwb3dlciBvZiAy DQo+ICsgKsKgwqDCoMKgLSBFSU5WQUwgLSBjb3VudCBwcm92aWRlZCBpcyBub3QgYSBwb3dlciBv ZiAyLCBvciBSSU5HX0ZfTkIgaXMgdXNlZCBvbg0KPiBhbg0KPiArICrCoMKgwqDCoMKgwqB1bnN1 cHBvcnRlZCBwbGF0Zm9ybQ0KPiDCoCAqwqDCoMKgwqAtIEVOT1NQQyAtIHRoZSBtYXhpbXVtIG51 bWJlciBvZiBtZW16b25lcyBoYXMgYWxyZWFkeSBiZWVuIGFsbG9jYXRlZA0KPiDCoCAqwqDCoMKg wqAtIEVFWElTVCAtIGEgbWVtem9uZSB3aXRoIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMN Cj4gwqAgKsKgwqDCoMKgLSBFTk9NRU0gLSBubyBhcHByb3ByaWF0ZSBtZW1vcnkgYXJlYSBmb3Vu ZCBpbiB3aGljaCB0byBjcmVhdGUgbWVtem9uZQ0KPiBAQCAtMjg0LDYgKzMwOSw1MCBAQCB2b2lk IHJ0ZV9yaW5nX2R1bXAoRklMRSAqZiwgY29uc3Qgc3RydWN0IHJ0ZV9yaW5nICpyKTsNCj4gwqAJ fSBcDQo+IMKgfSB3aGlsZSAoMCkNCj4gwqANCj4gKy8qIFRoZSBhY3R1YWwgZW5xdWV1ZSBvZiBw b2ludGVycyBvbiB0aGUgcmluZy4NCj4gKyAqIFVzZWQgb25seSBieSB0aGUgc2luZ2xlLXByb2R1 Y2VyIG5vbi1ibG9ja2luZyBlbnF1ZXVlIGZ1bmN0aW9uLCBidXQNCj4gKyAqIG91dC1saW5lZCBo ZXJlIGZvciBjb2RlIHJlYWRhYmlsaXR5Lg0KPiArICovDQo+ICsjZGVmaW5lIEVOUVVFVUVfUFRS U19OQihyLCByaW5nX3N0YXJ0LCBwcm9kX2hlYWQsIG9ial90YWJsZSwgbikgZG8geyBcDQo+ICsJ dW5zaWduZWQgaW50IGk7IFwNCj4gKwljb25zdCB1aW50MzJfdCBzaXplID0gKHIpLT5zaXplOyBc DQo+ICsJc2l6ZV90IGlkeCA9IHByb2RfaGVhZCAmIChyKS0+bWFzazsgXA0KPiArCXNpemVfdCBu ZXdfY250ID0gcHJvZF9oZWFkICsgc2l6ZTsgXA0KPiArCXN0cnVjdCBuYl9yaW5nX2VudHJ5ICpy aW5nID0gKHN0cnVjdCBuYl9yaW5nX2VudHJ5ICopcmluZ19zdGFydDsgXA0KPiArCWlmIChsaWtl bHkoaWR4ICsgbiA8IHNpemUpKSB7IFwNCj4gKwkJZm9yIChpID0gMDsgaSA8IChuICYgKCh+KHVu c2lnbmVkKTB4MykpKTsgaSArPSA0LCBpZHggKz0gNCkgew0KPiBcDQo+ICsJCQlyaW5nW2lkeF0u cHRyID0gb2JqX3RhYmxlW2ldOyBcDQo+ICsJCQlyaW5nW2lkeF0uY250ID0gbmV3X2NudCArIGk7 wqDCoFwNCj4gKwkJCXJpbmdbaWR4ICsgMV0ucHRyID0gb2JqX3RhYmxlW2kgKyAxXTsgXA0KPiAr CQkJcmluZ1tpZHggKyAxXS5jbnQgPSBuZXdfY250ICsgaSArIDE7wqDCoFwNCj4gKwkJCXJpbmdb aWR4ICsgMl0ucHRyID0gb2JqX3RhYmxlW2kgKyAyXTsgXA0KPiArCQkJcmluZ1tpZHggKyAyXS5j bnQgPSBuZXdfY250ICsgaSArIDI7wqDCoFwNCj4gKwkJCXJpbmdbaWR4ICsgM10ucHRyID0gb2Jq X3RhYmxlW2kgKyAzXTsgXA0KPiArCQkJcmluZ1tpZHggKyAzXS5jbnQgPSBuZXdfY250ICsgaSAr IDM7wqDCoFwNCj4gKwkJfSBcDQo+ICsJCXN3aXRjaCAobiAmIDB4MykgeyBcDQo+ICsJCWNhc2Ug MzogXA0KPiArCQkJcmluZ1tpZHhdLmNudCA9IG5ld19jbnQgKyBpOyBcDQo+ICsJCQlyaW5nW2lk eCsrXS5wdHIgPSBvYmpfdGFibGVbaSsrXTsgLyogZmFsbHRocm91Z2ggKi8gXA0KPiArCQljYXNl IDI6IFwNCj4gKwkJCXJpbmdbaWR4XS5jbnQgPSBuZXdfY250ICsgaTsgXA0KPiArCQkJcmluZ1tp ZHgrK10ucHRyID0gb2JqX3RhYmxlW2krK107IC8qIGZhbGx0aHJvdWdoICovIFwNCj4gKwkJY2Fz ZSAxOiBcDQo+ICsJCQlyaW5nW2lkeF0uY250ID0gbmV3X2NudCArIGk7IFwNCj4gKwkJCXJpbmdb aWR4KytdLnB0ciA9IG9ial90YWJsZVtpKytdOyBcDQo+ICsJCX0gXA0KPiArCX0gZWxzZSB7IFwN Cj4gKwkJZm9yIChpID0gMDsgaWR4IDwgc2l6ZTsgaSsrLCBpZHgrKykgeyBcDQo+ICsJCQlyaW5n W2lkeF0uY250ID0gbmV3X2NudCArIGk7wqDCoFwNCj4gKwkJCXJpbmdbaWR4XS5wdHIgPSBvYmpf dGFibGVbaV07IFwNCj4gKwkJfSBcDQo+ICsJCWZvciAoaWR4ID0gMDsgaSA8IG47IGkrKywgaWR4 KyspIHvCoMKgwqDCoFwNCj4gKwkJCXJpbmdbaWR4XS5jbnQgPSBuZXdfY250ICsgaTvCoMKgXA0K PiArCQkJcmluZ1tpZHhdLnB0ciA9IG9ial90YWJsZVtpXTsgXA0KPiArCQl9IFwNCj4gKwl9IFwN Cj4gK30gd2hpbGUgKDApDQo+ICsNCj4gwqAvKiB0aGUgYWN0dWFsIGNvcHkgb2YgcG9pbnRlcnMg b24gdGhlIHJpbmcgdG8gb2JqX3RhYmxlLg0KPiDCoCAqIFBsYWNlZCBoZXJlIHNpbmNlIGlkZW50 aWNhbCBjb2RlIG5lZWRlZCBpbiBib3RoDQo+IMKgICogc2luZ2xlIGFuZCBtdWx0aSBjb25zdW1l ciBkZXF1ZXVlIGZ1bmN0aW9ucyAqLw0KPiBAQCAtMzE1LDYgKzM4NCwzOSBAQCB2b2lkIHJ0ZV9y aW5nX2R1bXAoRklMRSAqZiwgY29uc3Qgc3RydWN0IHJ0ZV9yaW5nICpyKTsNCj4gwqAJfSBcDQo+ IMKgfSB3aGlsZSAoMCkNCj4gwqANCj4gKy8qIFRoZSBhY3R1YWwgY29weSBvZiBwb2ludGVycyBv biB0aGUgcmluZyB0byBvYmpfdGFibGUuDQo+ICsgKiBQbGFjZWQgaGVyZSBzaW5jZSBpZGVudGlj YWwgY29kZSBuZWVkZWQgaW4gYm90aA0KPiArICogc2luZ2xlIGFuZCBtdWx0aSBjb25zdW1lciBu b24tYmxvY2tpbmcgZGVxdWV1ZSBmdW5jdGlvbnMuDQo+ICsgKi8NCj4gKyNkZWZpbmUgREVRVUVV RV9QVFJTX05CKHIsIHJpbmdfc3RhcnQsIGNvbnNfaGVhZCwgb2JqX3RhYmxlLCBuKSBkbyB7IFwN Cj4gKwl1bnNpZ25lZCBpbnQgaTsgXA0KPiArCXNpemVfdCBpZHggPSBjb25zX2hlYWQgJiAocikt Pm1hc2s7IFwNCj4gKwljb25zdCB1aW50MzJfdCBzaXplID0gKHIpLT5zaXplOyBcDQo+ICsJc3Ry dWN0IG5iX3JpbmdfZW50cnkgKnJpbmcgPSAoc3RydWN0IG5iX3JpbmdfZW50cnkgKilyaW5nX3N0 YXJ0OyBcDQo+ICsJaWYgKGxpa2VseShpZHggKyBuIDwgc2l6ZSkpIHsgXA0KPiArCQlmb3IgKGkg PSAwOyBpIDwgKG4gJiAofih1bnNpZ25lZCkweDMpKTsgaSArPSA0LCBpZHggKz0gNCkge1wNCj4g KwkJCW9ial90YWJsZVtpXSA9IHJpbmdbaWR4XS5wdHI7IFwNCj4gKwkJCW9ial90YWJsZVtpICsg MV0gPSByaW5nW2lkeCArIDFdLnB0cjsgXA0KPiArCQkJb2JqX3RhYmxlW2kgKyAyXSA9IHJpbmdb aWR4ICsgMl0ucHRyOyBcDQo+ICsJCQlvYmpfdGFibGVbaSArIDNdID0gcmluZ1tpZHggKyAzXS5w dHI7IFwNCj4gKwkJfSBcDQo+ICsJCXN3aXRjaCAobiAmIDB4MykgeyBcDQo+ICsJCWNhc2UgMzog XA0KPiArCQkJb2JqX3RhYmxlW2krK10gPSByaW5nW2lkeCsrXS5wdHI7IC8qIGZhbGx0aHJvdWdo ICovIFwNCj4gKwkJY2FzZSAyOiBcDQo+ICsJCQlvYmpfdGFibGVbaSsrXSA9IHJpbmdbaWR4Kytd LnB0cjsgLyogZmFsbHRocm91Z2ggKi8gXA0KPiArCQljYXNlIDE6IFwNCj4gKwkJCW9ial90YWJs ZVtpKytdID0gcmluZ1tpZHgrK10ucHRyOyBcDQo+ICsJCX0gXA0KPiArCX0gZWxzZSB7IFwNCj4g KwkJZm9yIChpID0gMDsgaWR4IDwgc2l6ZTsgaSsrLCBpZHgrKykgXA0KPiArCQkJb2JqX3RhYmxl W2ldID0gcmluZ1tpZHhdLnB0cjsgXA0KPiArCQlmb3IgKGlkeCA9IDA7IGkgPCBuOyBpKyssIGlk eCsrKSBcDQo+ICsJCQlvYmpfdGFibGVbaV0gPSByaW5nW2lkeF0ucHRyOyBcDQo+ICsJfSBcDQo+ ICt9IHdoaWxlICgwKQ0KPiArDQo+ICsNCj4gwqAvKiBCZXR3ZWVuIGxvYWQgYW5kIGxvYWQuIHRo ZXJlIG1pZ2h0IGJlIGNwdSByZW9yZGVyIGluIHdlYWsgbW9kZWwNCj4gwqAgKiAocG93ZXJwYy9h cm0pLg0KPiDCoCAqIFRoZXJlIGFyZSAyIGNob2ljZXMgZm9yIHRoZSB1c2Vycw0KPiBAQCAtMzMx LDYgKzQzMywzMTkgQEAgdm9pZCBydGVfcmluZ19kdW1wKEZJTEUgKmYsIGNvbnN0IHN0cnVjdCBy dGVfcmluZyAqcik7DQo+IMKgI2VuZGlmDQo+IMKgI2luY2x1ZGUgInJ0ZV9yaW5nX2dlbmVyaWNf NjQuaCINCj4gwqANCj4gKy8qIEBpbnRlcm5hbCAxMjgtYml0IHN0cnVjdHVyZSB1c2VkIGJ5IHRo ZSBub24tYmxvY2tpbmcgcmluZyAqLw0KPiArc3RydWN0IG5iX3JpbmdfZW50cnkgew0KPiArCXZv aWQgKnB0cjsgLyoqPCBEYXRhIHBvaW50ZXIgKi8NCj4gKwl1aW50NjRfdCBjbnQ7IC8qKjwgTW9k aWZpY2F0aW9uIGNvdW50ZXIgKi8NCldoeSBub3QgbWFrZSAnY250JyB1aW50cHRyX3Q/IFRoaXMg d2F5IDMyLWJpdCBhcmNoaXRlY3R1cmVzIHdpbGwgYWxzbw0KYmUgc3VwcG9ydGVkLiBJIHRoaW5r IHRoZXJlIGFyZSBzb21lIGNsYWltcyB0aGF0IERQREsgc3RpbGwgc3VwcG9ydHMgZS5nLiBBUk12 N2ENCmFuZCBwb3NzaWJseSBhbHNvIDMyLWJpdCB4ODY/DQoNCj4gK307DQo+ICsNCj4gKy8qIFRo ZSBub24tYmxvY2tpbmcgcmluZyBhbGdvcml0aG0gaXMgYmFzZWQgb24gdGhlIG9yaWdpbmFsIHJ0 ZSByaW5nIChkZXJpdmVkDQo+ICsgKiBmcm9tIEZyZWVCU0QncyBidWZyaW5nLmgpIGFuZCBpbnNw aXJlZCBieSBNaWNoYWVsIGFuZCBTY290dCdzIG5vbi1ibG9ja2luZw0KPiArICogY29uY3VycmVu dCBxdWV1ZS4NCj4gKyAqLw0KPiArDQo+ICsvKioNCj4gKyAqIEBpbnRlcm5hbA0KPiArICrCoMKg wqBFbnF1ZXVlIHNldmVyYWwgb2JqZWN0cyBvbiB0aGUgbm9uLWJsb2NraW5nIHJpbmcgKHNpbmds ZS1wcm9kdWNlciBvbmx5KQ0KPiArICoNCj4gKyAqIEBwYXJhbSByDQo+ICsgKsKgwqDCoEEgcG9p bnRlciB0byB0aGUgcmluZyBzdHJ1Y3R1cmUuDQo+ICsgKiBAcGFyYW0gb2JqX3RhYmxlDQo+ICsg KsKgwqDCoEEgcG9pbnRlciB0byBhIHRhYmxlIG9mIHZvaWQgKiBwb2ludGVycyAob2JqZWN0cyku DQo+ICsgKiBAcGFyYW0gbg0KPiArICrCoMKgwqBUaGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gYWRk IGluIHRoZSByaW5nIGZyb20gdGhlIG9ial90YWJsZS4NCj4gKyAqIEBwYXJhbSBiZWhhdmlvcg0K PiArICrCoMKgwqBSVEVfUklOR19RVUVVRV9GSVhFRDrCoMKgwqDCoEVucXVldWUgYSBmaXhlZCBu dW1iZXIgb2YgaXRlbXMgdG8gdGhlIHJpbmcNCj4gKyAqwqDCoMKgUlRFX1JJTkdfUVVFVUVfVkFS SUFCTEU6IEVucXVldWUgYXMgbWFueSBpdGVtcyBhcyBwb3NzaWJsZSB0byB0aGUgcmluZw0KPiAr ICogQHBhcmFtIGZyZWVfc3BhY2UNCj4gKyAqwqDCoMKgcmV0dXJucyB0aGUgYW1vdW50IG9mIHNw YWNlIGFmdGVyIHRoZSBlbnF1ZXVlIG9wZXJhdGlvbiBoYXMgZmluaXNoZWQNCj4gKyAqIEByZXR1 cm4NCj4gKyAqwqDCoMKgQWN0dWFsIG51bWJlciBvZiBvYmplY3RzIGVucXVldWVkLg0KPiArICrC oMKgwqBJZiBiZWhhdmlvciA9PSBSVEVfUklOR19RVUVVRV9GSVhFRCwgdGhpcyB3aWxsIGJlIDAg b3IgbiBvbmx5Lg0KPiArICovDQo+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25l ZCBpbnQNCj4gK19fcnRlX3JpbmdfZG9fbmJfZW5xdWV1ZV9zcChzdHJ1Y3QgcnRlX3JpbmcgKnIs IHZvaWQgKiBjb25zdCAqb2JqX3RhYmxlLA0KPiArCQkJwqDCoMKgwqB1bnNpZ25lZCBpbnQgbiwN Cj4gKwkJCcKgwqDCoMKgZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlvciBiZWhhdmlvciwNCj4g KwkJCcKgwqDCoMKgdW5zaWduZWQgaW50ICpmcmVlX3NwYWNlKQ0KPiArew0KPiArCXVpbnQzMl90 IGZyZWVfZW50cmllczsNCj4gKwlzaXplX3QgaGVhZCwgbmV4dDsNCj4gKw0KPiArCW4gPSBfX3J0 ZV9yaW5nX21vdmVfcHJvZF9oZWFkXzY0KHIsIDEsIG4sIGJlaGF2aW9yLA0KPiArCQkJCQnCoCZo ZWFkLCAmbmV4dCwgJmZyZWVfZW50cmllcyk7DQo+ICsJaWYgKG4gPT0gMCkNCj4gKwkJZ290byBl bmQ7DQo+ICsNCj4gKwlFTlFVRVVFX1BUUlNfTkIociwgJnJbMV0sIGhlYWQsIG9ial90YWJsZSwg bik7DQo+ICsNCj4gKwlyLT5wcm9kXzY0LnRhaWwgKz0gbjsNCkRvbid0IHdlIG5lZWQgcmVsZWFz ZSBvcmRlciB3aGVuIChvciBzbXBfd21iIGJldHdlZW4pIHdyaXRpbmcgb2YgdGhlIHJpbmcNCnBv aW50ZXJzIGFuZCB0aGUgdXBkYXRlIG9mIHRhaWw/IEJ5IHVwZGF0aW5nIHRoZSB0YWlsIHBvaW50 ZXIsIHdlIGFyZQ0Kc3luY2hyb25pc2luZyB3aXRoIGEgY29uc3VtZXIuDQoNCkkgcHJlZmVyIHVz aW5nIF9fYXRvbWljIG9wZXJhdGlvbnMgZXZlbiBmb3IgbG9hZCBhbmQgc3RvcmUuIFlvdSBjYW4g c2VlIHdoaWNoDQpwYXJ0cyBvZiB0aGUgY29kZSB0aGF0IHN5bmNocm9uaXNlIHdpdGggZWFjaCBv dGhlciwgZS5nLiBzdG9yZS1yZWxlYXNlIHRvIHNvbWUNCmxvY2F0aW9uIHN5bmNocm9uaXNlcyB3 aXRoIGxvYWQtYWNxdWlyZSBmcm9tIHRoZSBzYW1lIGxvY2F0aW9uLiBJZiB5b3UgZG9uJ3QNCmtu b3cgaG93IGRpZmZlcmVudCB0aHJlYWRzIHN5bmNocm9uaXNlIHdpdGggZWFjaCBvdGhlciwgeW91 IGFyZSB2ZXJ5IGxpa2VseSB0bw0KbWFrZSBtaXN0YWtlcy4NCg0KPiArDQo+ICtlbmQ6DQo+ICsJ aWYgKGZyZWVfc3BhY2UgIT0gTlVMTCkNCj4gKwkJKmZyZWVfc3BhY2UgPSBmcmVlX2VudHJpZXMg LSBuOw0KPiArCXJldHVybiBuOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIEBpbnRlcm5hbA0K PiArICrCoMKgwqBFbnF1ZXVlIHNldmVyYWwgb2JqZWN0cyBvbiB0aGUgbm9uLWJsb2NraW5nIHJp bmcgKG11bHRpLXByb2R1Y2VyIHNhZmUpDQo+ICsgKg0KPiArICogQHBhcmFtIHINCj4gKyAqwqDC oMKgQSBwb2ludGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gKyAqIEBwYXJhbSBvYmpfdGFi bGUNCj4gKyAqwqDCoMKgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygdm9pZCAqIHBvaW50ZXJzIChv YmplY3RzKS4NCj4gKyAqIEBwYXJhbSBuDQo+ICsgKsKgwqDCoFRoZSBudW1iZXIgb2Ygb2JqZWN0 cyB0byBhZGQgaW4gdGhlIHJpbmcgZnJvbSB0aGUgb2JqX3RhYmxlLg0KPiArICogQHBhcmFtIGJl aGF2aW9yDQo+ICsgKsKgwqDCoFJURV9SSU5HX1FVRVVFX0ZJWEVEOsKgwqDCoMKgRW5xdWV1ZSBh IGZpeGVkIG51bWJlciBvZiBpdGVtcyB0byB0aGUgcmluZw0KPiArICrCoMKgwqBSVEVfUklOR19R VUVVRV9WQVJJQUJMRTogRW5xdWV1ZSBhcyBtYW55IGl0ZW1zIGFzIHBvc3NpYmxlIHRvIHRoZSBy aW5nDQo+ICsgKiBAcGFyYW0gZnJlZV9zcGFjZQ0KPiArICrCoMKgwqByZXR1cm5zIHRoZSBhbW91 bnQgb2Ygc3BhY2UgYWZ0ZXIgdGhlIGVucXVldWUgb3BlcmF0aW9uIGhhcyBmaW5pc2hlZA0KPiAr ICogQHJldHVybg0KPiArICrCoMKgwqBBY3R1YWwgbnVtYmVyIG9mIG9iamVjdHMgZW5xdWV1ZWQu DQo+ICsgKsKgwqDCoElmIGJlaGF2aW9yID09IFJURV9SSU5HX1FVRVVFX0ZJWEVELCB0aGlzIHdp bGwgYmUgMCBvciBuIG9ubHkuDQo+ICsgKi8NCj4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5l IHVuc2lnbmVkIGludA0KPiArX19ydGVfcmluZ19kb19uYl9lbnF1ZXVlX21wKHN0cnVjdCBydGVf cmluZyAqciwgdm9pZCAqIGNvbnN0ICpvYmpfdGFibGUsDQo+ICsJCQnCoMKgwqDCoHVuc2lnbmVk IGludCBuLA0KPiArCQkJwqDCoMKgwqBlbnVtIHJ0ZV9yaW5nX3F1ZXVlX2JlaGF2aW9yIGJlaGF2 aW9yLA0KPiArCQkJwqDCoMKgwqB1bnNpZ25lZCBpbnQgKmZyZWVfc3BhY2UpDQo+ICt7DQo+ICsj aWYgIWRlZmluZWQoUlRFX0FSQ0hfWDg2XzY0KSB8fCAhZGVmaW5lZChBTExPV19FWFBFUklNRU5U QUxfQVBJKQ0KPiArCVJURV9TRVRfVVNFRChyKTsNCj4gKwlSVEVfU0VUX1VTRUQob2JqX3RhYmxl KTsNCj4gKwlSVEVfU0VUX1VTRUQobik7DQo+ICsJUlRFX1NFVF9VU0VEKGJlaGF2aW9yKTsNCj4g KwlSVEVfU0VUX1VTRUQoZnJlZV9zcGFjZSk7DQo+ICsjaWZuZGVmIEFMTE9XX0VYUEVSSU1FTlRB TF9BUEkNCj4gKwlwcmludGYoIlslcygpXSBSSU5HX0ZfTkIgcmVxdWlyZXMgYW4gZXhwZXJpbWVu dGFsIEFQSS4iDQo+ICsJwqDCoMKgwqDCoMKgwqAiIFJlY29tcGlsZSB3aXRoIEFMTE9XX0VYUEVS SU1FTlRBTF9BUEkgdG8gdXNlIGl0LlxuIg0KPiArCcKgwqDCoMKgwqDCoMKgLCBfX2Z1bmNfXyk7 DQo+ICsjZW5kaWYNCj4gKwlyZXR1cm4gMDsNCj4gKyNlbmRpZg0KPiArI2lmIGRlZmluZWQoUlRF X0FSQ0hfWDg2XzY0KSAmJiBkZWZpbmVkKEFMTE9XX0VYUEVSSU1FTlRBTF9BUEkpDQo+ICsJc2l6 ZV90IGhlYWQsIG5leHQsIHRhaWw7DQo+ICsJdWludDMyX3QgZnJlZV9lbnRyaWVzOw0KPiArCXVu c2lnbmVkIGludCBpOw0KPiArDQo+ICsJbiA9IF9fcnRlX3JpbmdfbW92ZV9wcm9kX2hlYWRfNjQo ciwgMCwgbiwgYmVoYXZpb3IsDQo+ICsJCQkJCcKgJmhlYWQsICZuZXh0LCAmZnJlZV9lbnRyaWVz KTsNCj4gKwlpZiAobiA9PSAwKQ0KPiArCQlnb3RvIGVuZDsNCj4gKw0KPiArCWZvciAoaSA9IDA7 IGkgPCBuOyAvKiBpIGluY3JlbWVudGVkIGlmIGVucXVldWUgc3VjY2VlZHMgKi8pIHsNCj4gKwkJ c3RydWN0IG5iX3JpbmdfZW50cnkgb2xkX3ZhbHVlLCBuZXdfdmFsdWU7DQo+ICsJCXN0cnVjdCBu Yl9yaW5nX2VudHJ5ICpyaW5nX3B0cjsNCj4gKw0KPiArCQkvKiBFbnF1ZXVlIHRvIHRoZSB0YWls IGVudHJ5LiBJZiBhbm90aGVyIHRocmVhZCB3aW5zIHRoZQ0KPiByYWNlLA0KPiArCQnCoCogcmV0 cnkgd2l0aCB0aGUgbmV3IHRhaWwuDQo+ICsJCcKgKi8NCj4gKwkJdGFpbCA9IHItPnByb2RfNjQu dGFpbDsNCj4gKw0KPiArCQlyaW5nX3B0ciA9ICYoKHN0cnVjdCBuYl9yaW5nX2VudHJ5ICopJnJb MV0pW3RhaWwgJiByLT5tYXNrXTsNClRoaXMgaXMgYW4gdWdseSBleHByZXNzaW9uIGFuZCBjYXN0 LiBBbHNvIEkgdGhpbmsgaXQgaXMgdW5uZWNlc3NhcnkuIFdoYXQncw0KcHJldmVudGluZyB0aGlz IGZyb20gYmVpbmcgd3JpdHRlbiB3aXRob3V0IGEgY2FzdD8gUGVyaGFwcyB0aGUgcmluZyBhcnJh eSBuZWVkcw0KdG8gYmUgYSB1bmlvbiBvZiAidm9pZCAqIiBhbmQgc3RydWN0IG5iX3JpbmdfZW50 cnk/DQoNCj4gKw0KPiArCQlvbGRfdmFsdWUgPSAqcmluZ19wdHI7DQo+ICsNCj4gKwkJLyogSWYg dGhlIHRhaWwgZW50cnkncyBtb2RpZmljYXRpb24gY291bnRlciBkb2Vzbid0IG1hdGNoIHRoZQ0K PiArCQnCoCogcHJvZHVjZXIgdGFpbCBpbmRleCwgaXQncyBhbHJlYWR5IGJlZW4gdXBkYXRlZC4N Cj4gKwkJwqAqLw0KPiArCQlpZiAob2xkX3ZhbHVlLmNudCAhPSB0YWlsKQ0KPiArCQkJY29udGlu dWU7DQpDb250aW51ZSByZXN0YXJ0cyB0aGUgbG9vcCBhdCB0aGUgY29uZGl0aW9uIHRlc3QgaW4g dGhlIGZvciBzdGF0ZW1lbnQsDQonaScgYW5kICduJyBhcmUgdW5jaGFuZ2VkLiBUaGVuIHdlIHJl LXJlYWQgJ3Byb2RfNjQudGFpbCcgYW5kDQoncmluZ1t0YWlsICYgbWFza10nLiBJZiBzb21lIG90 aGVyIHRocmVhZCBuZXZlciB1cGRhdGVzICdwcm9kXzY0LnRhaWwnLCB0aGUNCnRlc3QgaGVyZSAo cmluZ1t0YWlsXS5jbnQgIT0gdGFpbCkgd2lsbCBzdGlsbCBiZSB0cnVlIGFuZCB3ZSB3aWxsIHNw aW4NCmZvcmV2ZXIuDQoNCldhaXRpbmcgZm9yIG90aGVyIHRocmVhZHMgPD0+IGJsb2NraW5nIGJl aGF2aW91ciBzbyB0aGlzIGlzIG5vdCBhIG5vbi0NCmJsb2NraW5nIGRlc2lnbi4NCg0KPiArDQo+ ICsJCS8qIFByZXBhcmUgdGhlIG5ldyBlbnRyeS4gVGhlIGNudCBmaWVsZCBtaXRpZ2F0ZXMgdGhl IEFCQQ0KPiArCQnCoCogcHJvYmxlbSBvbiB0aGUgcmluZyB3cml0ZS4NCj4gKwkJwqAqLw0KPiAr CQluZXdfdmFsdWUucHRyID0gb2JqX3RhYmxlW2ldOw0KPiArCQluZXdfdmFsdWUuY250ID0gdGFp bCArIHItPnNpemU7DQo+ICsNCj4gKwkJaWYgKHJ0ZV9hdG9taWMxMjhfY21wc2V0KCh2b2xhdGls ZSBydGVfaW50MTI4X3QgKilyaW5nX3B0ciwNCj4gKwkJCQkJwqAocnRlX2ludDEyOF90ICopJm9s ZF92YWx1ZSwNCj4gKwkJCQkJwqAocnRlX2ludDEyOF90ICopJm5ld192YWx1ZSkpDQo+ICsJCQlp Kys7DQo+ICsNCj4gKwkJLyogRXZlcnkgdGhyZWFkIGF0dGVtcHRzIHRoZSBjbXBzZXQsIHNvIHRo ZXkgZG9uJ3QgaGF2ZSB0bw0KPiB3YWl0DQo+ICsJCcKgKiBmb3IgdGhlIHRocmVhZCB0aGF0IHN1 Y2Nlc3NmdWxseSBlbnF1ZXVlZCB0byB0aGUgcmluZy4NCj4gKwkJwqAqIFVzaW5nIGEgNjQtYml0 IHRhaWwgbWl0aWdhdGVzIHRoZSBBQkEgcHJvYmxlbSBoZXJlLg0KPiArCQnCoCoNCj4gKwkJwqAq IEJ1aWx0LWluIHVzZWQgdG8gaGFuZGxlIHZhcmlhYmxlLXNpemVkIHRhaWwgaW5kZXguDQo+ICsJ CcKgKi8NCkJ1dCBwcm9kXzY0LnRhaWwgaXMgNjQgYml0cyBzbyBub3QgcmVhbGx5IHZhcmlhYmxl IHNpemU/DQoNCj4gKwkJX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcCgmci0+cHJvZF82NC50 YWlsLCB0YWlsLCB0YWlsICsNCj4gMSk7DQpXaGF0IG1lbW9yeSBvcmRlciBpcyByZXF1aXJlZCBo ZXJlPyBXaHkgbm90IHVzZQ0KX19hdG9taWNfY29tcGFyZV9leGNoYW5nZSgpIHdpdGggZXhwbGlj aXQgbWVtb3J5IG9yZGVyIHBhcmFtZXRlcnM/DQoNCj4gKwl9DQo+ICsNCj4gK2VuZDoNCj4gKwlp ZiAoZnJlZV9zcGFjZSAhPSBOVUxMKQ0KPiArCQkqZnJlZV9zcGFjZSA9IGZyZWVfZW50cmllcyAt IG47DQo+ICsJcmV0dXJuIG47DQo+ICsjZW5kaWYNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBA aW50ZXJuYWwgRW5xdWV1ZSBzZXZlcmFsIG9iamVjdHMgb24gdGhlIG5vbi1ibG9ja2luZyByaW5n DQo+ICsgKg0KPiArICogQHBhcmFtIHINCj4gKyAqwqDCoMKgQSBwb2ludGVyIHRvIHRoZSByaW5n IHN0cnVjdHVyZS4NCj4gKyAqIEBwYXJhbSBvYmpfdGFibGUNCj4gKyAqwqDCoMKgQSBwb2ludGVy IHRvIGEgdGFibGUgb2Ygdm9pZCAqIHBvaW50ZXJzIChvYmplY3RzKS4NCj4gKyAqIEBwYXJhbSBu DQo+ICsgKsKgwqDCoFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBhZGQgaW4gdGhlIHJpbmcgZnJv bSB0aGUgb2JqX3RhYmxlLg0KPiArICogQHBhcmFtIGJlaGF2aW9yDQo+ICsgKsKgwqDCoFJURV9S SU5HX1FVRVVFX0ZJWEVEOsKgwqDCoMKgRW5xdWV1ZSBhIGZpeGVkIG51bWJlciBvZiBpdGVtcyB0 byB0aGUgcmluZw0KPiArICrCoMKgwqBSVEVfUklOR19RVUVVRV9WQVJJQUJMRTogRW5xdWV1ZSBh cyBtYW55IGl0ZW1zIGFzIHBvc3NpYmxlIHRvIHRoZSByaW5nDQo+ICsgKiBAcGFyYW0gaXNfc3AN Cj4gKyAqwqDCoMKgSW5kaWNhdGVzIHdoZXRoZXIgdG8gdXNlIHNpbmdsZSBwcm9kdWNlciBvciBt dWx0aS1wcm9kdWNlciBoZWFkIHVwZGF0ZQ0KPiArICogQHBhcmFtIGZyZWVfc3BhY2UNCj4gKyAq wqDCoMKgcmV0dXJucyB0aGUgYW1vdW50IG9mIHNwYWNlIGFmdGVyIHRoZSBlbnF1ZXVlIG9wZXJh dGlvbiBoYXMgZmluaXNoZWQNCj4gKyAqIEByZXR1cm4NCj4gKyAqwqDCoMKgQWN0dWFsIG51bWJl ciBvZiBvYmplY3RzIGVucXVldWVkLg0KPiArICrCoMKgwqBJZiBiZWhhdmlvciA9PSBSVEVfUklO R19RVUVVRV9GSVhFRCwgdGhpcyB3aWxsIGJlIDAgb3IgbiBvbmx5Lg0KPiArICovDQo+ICtzdGF0 aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gK19fcnRlX3JpbmdfZG9fbmJf ZW5xdWV1ZShzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQgKiBjb25zdCAqb2JqX3RhYmxlLA0KPiAr CQkJwqB1bnNpZ25lZCBpbnQgbiwgZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlvcg0KPiBiZWhh dmlvciwNCj4gKwkJCcKgdW5zaWduZWQgaW50IGlzX3NwLCB1bnNpZ25lZCBpbnQgKmZyZWVfc3Bh Y2UpDQo+ICt7DQo+ICsJaWYgKGlzX3NwKQ0KPiArCQlyZXR1cm4gX19ydGVfcmluZ19kb19uYl9l bnF1ZXVlX3NwKHIsIG9ial90YWJsZSwgbiwNCj4gKwkJCQkJCcKgwqDCoGJlaGF2aW9yLCBmcmVl X3NwYWNlKTsNCj4gKwllbHNlDQo+ICsJCXJldHVybiBfX3J0ZV9yaW5nX2RvX25iX2VucXVldWVf bXAociwgb2JqX3RhYmxlLCBuLA0KPiArCQkJCQkJwqDCoMKgYmVoYXZpb3IsIGZyZWVfc3BhY2Up Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIEBpbnRlcm5hbA0KPiArICrCoMKgwqBEZXF1ZXVl IHNldmVyYWwgb2JqZWN0cyBmcm9tIHRoZSBub24tYmxvY2tpbmcgcmluZyAoc2luZ2xlLWNvbnN1 bWVyDQo+IG9ubHkpDQo+ICsgKg0KPiArICogQHBhcmFtIHINCj4gKyAqwqDCoMKgQSBwb2ludGVy IHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gKyAqIEBwYXJhbSBvYmpfdGFibGUNCj4gKyAqwqDC oMKgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygdm9pZCAqIHBvaW50ZXJzIChvYmplY3RzKS4NCj4g KyAqIEBwYXJhbSBuDQo+ICsgKsKgwqDCoFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBwdWxsIGZy b20gdGhlIHJpbmcuDQo+ICsgKiBAcGFyYW0gYmVoYXZpb3INCj4gKyAqwqDCoMKgUlRFX1JJTkdf UVVFVUVfRklYRUQ6wqDCoMKgwqBEZXF1ZXVlIGEgZml4ZWQgbnVtYmVyIG9mIGl0ZW1zIGZyb20g dGhlIHJpbmcNCj4gKyAqwqDCoMKgUlRFX1JJTkdfUVVFVUVfVkFSSUFCTEU6IERlcXVldWUgYXMg bWFueSBpdGVtcyBhcyBwb3NzaWJsZSBmcm9tIHRoZSByaW5nDQo+ICsgKiBAcGFyYW0gYXZhaWxh YmxlDQo+ICsgKsKgwqDCoHJldHVybnMgdGhlIG51bWJlciBvZiByZW1haW5pbmcgcmluZyBlbnRy aWVzIGFmdGVyIHRoZSBkZXF1ZXVlIGhhcw0KPiBmaW5pc2hlZA0KPiArICogQHJldHVybg0KPiAr ICrCoMKgwqAtIEFjdHVhbCBudW1iZXIgb2Ygb2JqZWN0cyBkZXF1ZXVlZC4NCj4gKyAqwqDCoMKg wqDCoElmIGJlaGF2aW9yID09IFJURV9SSU5HX1FVRVVFX0ZJWEVELCB0aGlzIHdpbGwgYmUgMCBv ciBuIG9ubHkuDQo+ICsgKi8NCj4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVk IGludA0KPiArX19ydGVfcmluZ19kb19uYl9kZXF1ZXVlX3NjKHN0cnVjdCBydGVfcmluZyAqciwg dm9pZCAqKm9ial90YWJsZSwNCj4gKwkJCcKgwqDCoMKgdW5zaWduZWQgaW50IG4sDQo+ICsJCQnC oMKgwqDCoGVudW0gcnRlX3JpbmdfcXVldWVfYmVoYXZpb3IgYmVoYXZpb3IsDQo+ICsJCQnCoMKg wqDCoHVuc2lnbmVkIGludCAqYXZhaWxhYmxlKQ0KPiArew0KPiArCXNpemVfdCBoZWFkLCBuZXh0 Ow0KPiArCXVpbnQzMl90IGVudHJpZXM7DQo+ICsNCj4gKwluID0gX19ydGVfcmluZ19tb3ZlX2Nv bnNfaGVhZF82NChyLCAxLCBuLCBiZWhhdmlvciwNCj4gKwkJCQkJwqAmaGVhZCwgJm5leHQsICZl bnRyaWVzKTsNCj4gKwlpZiAobiA9PSAwKQ0KPiArCQlnb3RvIGVuZDsNCj4gKw0KPiArCURFUVVF VUVfUFRSU19OQihyLCAmclsxXSwgaGVhZCwgb2JqX3RhYmxlLCBuKTsNCj4gKw0KPiArCXItPmNv bnNfNjQudGFpbCArPSBuOw0KTWVtb3J5IG9yZGVyaW5nPyBDb25zdW1lciBzeW5jaHJvbmlzZXMg d2l0aCBwcm9kdWNlci4NCg0KPiArDQo+ICtlbmQ6DQo+ICsJaWYgKGF2YWlsYWJsZSAhPSBOVUxM KQ0KPiArCQkqYXZhaWxhYmxlID0gZW50cmllcyAtIG47DQo+ICsJcmV0dXJuIG47DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICogQGludGVybmFsDQo+ICsgKsKgwqDCoERlcXVldWUgc2V2ZXJhbCBv YmplY3RzIGZyb20gdGhlIG5vbi1ibG9ja2luZyByaW5nIChtdWx0aS1jb25zdW1lciBzYWZlKQ0K PiArICoNCj4gKyAqIEBwYXJhbSByDQo+ICsgKsKgwqDCoEEgcG9pbnRlciB0byB0aGUgcmluZyBz dHJ1Y3R1cmUuDQo+ICsgKiBAcGFyYW0gb2JqX3RhYmxlDQo+ICsgKsKgwqDCoEEgcG9pbnRlciB0 byBhIHRhYmxlIG9mIHZvaWQgKiBwb2ludGVycyAob2JqZWN0cykuDQo+ICsgKiBAcGFyYW0gbg0K PiArICrCoMKgwqBUaGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gcHVsbCBmcm9tIHRoZSByaW5nLg0K PiArICogQHBhcmFtIGJlaGF2aW9yDQo+ICsgKsKgwqDCoFJURV9SSU5HX1FVRVVFX0ZJWEVEOsKg wqDCoMKgRGVxdWV1ZSBhIGZpeGVkIG51bWJlciBvZiBpdGVtcyBmcm9tIHRoZSByaW5nDQo+ICsg KsKgwqDCoFJURV9SSU5HX1FVRVVFX1ZBUklBQkxFOiBEZXF1ZXVlIGFzIG1hbnkgaXRlbXMgYXMg cG9zc2libGUgZnJvbSB0aGUgcmluZw0KPiArICogQHBhcmFtIGF2YWlsYWJsZQ0KPiArICrCoMKg wqByZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIHJpbmcgZW50cmllcyBhZnRlciB0aGUg ZGVxdWV1ZSBoYXMNCj4gZmluaXNoZWQNCj4gKyAqIEByZXR1cm4NCj4gKyAqwqDCoMKgLSBBY3R1 YWwgbnVtYmVyIG9mIG9iamVjdHMgZGVxdWV1ZWQuDQo+ICsgKsKgwqDCoMKgwqBJZiBiZWhhdmlv ciA9PSBSVEVfUklOR19RVUVVRV9GSVhFRCwgdGhpcyB3aWxsIGJlIDAgb3IgbiBvbmx5Lg0KPiAr ICovDQo+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gK19fcnRl X3JpbmdfZG9fbmJfZGVxdWV1ZV9tYyhzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQgKipvYmpfdGFi bGUsDQo+ICsJCQnCoMKgwqDCoHVuc2lnbmVkIGludCBuLA0KPiArCQkJwqDCoMKgwqBlbnVtIHJ0 ZV9yaW5nX3F1ZXVlX2JlaGF2aW9yIGJlaGF2aW9yLA0KPiArCQkJwqDCoMKgwqB1bnNpZ25lZCBp bnQgKmF2YWlsYWJsZSkNCj4gK3sNCj4gKwlzaXplX3QgaGVhZCwgbmV4dDsNCj4gKwl1aW50MzJf dCBlbnRyaWVzOw0KPiArDQo+ICsJbiA9IF9fcnRlX3JpbmdfbW92ZV9jb25zX2hlYWRfNjQociwg MCwgbiwgYmVoYXZpb3IsDQo+ICsJCQkJCcKgJmhlYWQsICZuZXh0LCAmZW50cmllcyk7DQo+ICsJ aWYgKG4gPT0gMCkNCj4gKwkJZ290byBlbmQ7DQo+ICsNCj4gKwl3aGlsZSAoMSkgew0KPiArCQlz aXplX3QgdGFpbCA9IHItPmNvbnNfNjQudGFpbDsNCj4gKw0KPiArCQkvKiBEZXF1ZXVlIGZyb20g dGhlIGNvbnMgdGFpbCBvbndhcmRzLiBJZiBtdWx0aXBsZSB0aHJlYWRzDQo+IHJlYWQNCj4gKwkJ wqAqIHRoZSBzYW1lIHBvaW50ZXJzLCB0aGUgdGhyZWFkIHRoYXQgc3VjY2Vzc2Z1bGx5IHBlcmZv cm1zDQo+IHRoZQ0KPiArCQnCoCogQ0FTIHdpbGwga2VlcCB0aGVtIGFuZCB0aGUgb3RoZXIocykg d2lsbCByZXRyeS4NCj4gKwkJwqAqLw0KPiArCQlERVFVRVVFX1BUUlNfTkIociwgJnJbMV0sIHRh aWwsIG9ial90YWJsZSwgbik7DQo+ICsNCj4gKwkJbmV4dCA9IHRhaWwgKyBuOw0KPiArDQo+ICsJ CS8qIEJ1aWx0LWluIHVzZWQgdG8gaGFuZGxlIHZhcmlhYmxlLXNpemVkIHRhaWwgaW5kZXguICov DQo+ICsJCWlmIChfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwKCZyLT5jb25zXzY0LnRhaWws IHRhaWwsDQo+IG5leHQpKQ0KPiArCQkJLyogVGhlcmUgaXMgcG90ZW50aWFsIGZvciB0aGUgQUJB IHByb2JsZW0gaGVyZSwgYnV0DQo+ICsJCQnCoCogdGhhdCBpcyBtaXRpZ2F0ZWQgYnkgdGhlIGxh cmdlICg2NC1iaXQpIHRhaWwuDQo+ICsJCQnCoCovDQo+ICsJCQlicmVhazsNCj4gKwl9DQo+ICsN Cj4gK2VuZDoNCj4gKwlpZiAoYXZhaWxhYmxlICE9IE5VTEwpDQo+ICsJCSphdmFpbGFibGUgPSBl bnRyaWVzIC0gbjsNCj4gKwlyZXR1cm4gbjsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBAaW50 ZXJuYWwgRGVxdWV1ZSBzZXZlcmFsIG9iamVjdHMgZnJvbSB0aGUgbm9uLWJsb2NraW5nIHJpbmcN Cj4gKyAqDQo+ICsgKiBAcGFyYW0gcg0KPiArICrCoMKgwqBBIHBvaW50ZXIgdG8gdGhlIHJpbmcg c3RydWN0dXJlLg0KPiArICogQHBhcmFtIG9ial90YWJsZQ0KPiArICrCoMKgwqBBIHBvaW50ZXIg dG8gYSB0YWJsZSBvZiB2b2lkICogcG9pbnRlcnMgKG9iamVjdHMpLg0KPiArICogQHBhcmFtIG4N Cj4gKyAqwqDCoMKgVGhlIG51bWJlciBvZiBvYmplY3RzIHRvIHB1bGwgZnJvbSB0aGUgcmluZy4N Cj4gKyAqIEBwYXJhbSBiZWhhdmlvcg0KPiArICrCoMKgwqBSVEVfUklOR19RVUVVRV9GSVhFRDrC oMKgwqDCoERlcXVldWUgYSBmaXhlZCBudW1iZXIgb2YgaXRlbXMgZnJvbSB0aGUgcmluZw0KPiAr ICrCoMKgwqBSVEVfUklOR19RVUVVRV9WQVJJQUJMRTogRGVxdWV1ZSBhcyBtYW55IGl0ZW1zIGFz IHBvc3NpYmxlIGZyb20gdGhlIHJpbmcNCj4gKyAqIEBwYXJhbSBhdmFpbGFibGUNCj4gKyAqwqDC oMKgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyByaW5nIGVudHJpZXMgYWZ0ZXIgdGhl IGRlcXVldWUgaGFzDQo+IGZpbmlzaGVkDQo+ICsgKiBAcmV0dXJuDQo+ICsgKsKgwqDCoC0gQWN0 dWFsIG51bWJlciBvZiBvYmplY3RzIGRlcXVldWVkLg0KPiArICrCoMKgwqDCoMKgSWYgYmVoYXZp b3IgPT0gUlRFX1JJTkdfUVVFVUVfRklYRUQsIHRoaXMgd2lsbCBiZSAwIG9yIG4gb25seS4NCj4g KyAqLw0KPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ICtfX3J0 ZV9yaW5nX2RvX25iX2RlcXVldWUoc3RydWN0IHJ0ZV9yaW5nICpyLCB2b2lkICoqb2JqX3RhYmxl LA0KPiArCQnCoHVuc2lnbmVkIGludCBuLCBlbnVtIHJ0ZV9yaW5nX3F1ZXVlX2JlaGF2aW9yIGJl aGF2aW9yLA0KPiArCQnCoHVuc2lnbmVkIGludCBpc19zYywgdW5zaWduZWQgaW50ICphdmFpbGFi bGUpDQo+ICt7DQo+ICsJaWYgKGlzX3NjKQ0KPiArCQlyZXR1cm4gX19ydGVfcmluZ19kb19uYl9k ZXF1ZXVlX3NjKHIsIG9ial90YWJsZSwgbiwNCj4gKwkJCQkJCcKgwqDCoGJlaGF2aW9yLCBhdmFp bGFibGUpOw0KPiArCWVsc2UNCj4gKwkJcmV0dXJuIF9fcnRlX3JpbmdfZG9fbmJfZGVxdWV1ZV9t YyhyLCBvYmpfdGFibGUsIG4sDQo+ICsJCQkJCQnCoMKgwqBiZWhhdmlvciwgYXZhaWxhYmxlKTsN Cj4gK30NCj4gKw0KPiDCoC8qKg0KPiDCoCAqIEBpbnRlcm5hbCBFbnF1ZXVlIHNldmVyYWwgb2Jq ZWN0cyBvbiB0aGUgcmluZw0KPiDCoCAqDQo+IEBAIC00MzgsOCArODUzLDE0IEBAIHN0YXRpYyBf X3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiDCoHJ0ZV9yaW5nX21wX2VucXVldWVf YnVsayhzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQgKiBjb25zdCAqb2JqX3RhYmxlLA0KPiDCoAkJ CcKgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCAqZnJlZV9zcGFjZSkNCj4gwqB7DQo+IC0J cmV0dXJuIF9fcnRlX3JpbmdfZG9fZW5xdWV1ZShyLCBvYmpfdGFibGUsIG4sIFJURV9SSU5HX1FV RVVFX0ZJWEVELA0KPiAtCQkJX19JU19NUCwgZnJlZV9zcGFjZSk7DQo+ICsJaWYgKHItPmZsYWdz ICYgUklOR19GX05CKQ0KPiArCQlyZXR1cm4gX19ydGVfcmluZ19kb19uYl9lbnF1ZXVlKHIsIG9i al90YWJsZSwgbiwNCj4gKwkJCQkJCVJURV9SSU5HX1FVRVVFX0ZJWEVELA0KPiBfX0lTX01QLA0K PiArCQkJCQkJZnJlZV9zcGFjZSk7DQo+ICsJZWxzZQ0KPiArCQlyZXR1cm4gX19ydGVfcmluZ19k b19lbnF1ZXVlKHIsIG9ial90YWJsZSwgbiwNCj4gKwkJCQkJwqDCoMKgwqDCoFJURV9SSU5HX1FV RVVFX0ZJWEVELCBfX0lTX01QLA0KPiArCQkJCQnCoMKgwqDCoMKgZnJlZV9zcGFjZSk7DQo+IMKg fQ0KPiDCoA0KPiDCoC8qKg0KPiBAQCAtNDYxLDggKzg4MiwxNCBAQCBzdGF0aWMgX19ydGVfYWx3 YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gwqBydGVfcmluZ19zcF9lbnF1ZXVlX2J1bGsoc3Ry dWN0IHJ0ZV9yaW5nICpyLCB2b2lkICogY29uc3QgKm9ial90YWJsZSwNCj4gwqAJCQnCoHVuc2ln bmVkIGludCBuLCB1bnNpZ25lZCBpbnQgKmZyZWVfc3BhY2UpDQo+IMKgew0KPiAtCXJldHVybiBf X3J0ZV9yaW5nX2RvX2VucXVldWUociwgb2JqX3RhYmxlLCBuLCBSVEVfUklOR19RVUVVRV9GSVhF RCwNCj4gLQkJCV9fSVNfU1AsIGZyZWVfc3BhY2UpOw0KPiArCWlmIChyLT5mbGFncyAmIFJJTkdf Rl9OQikNCj4gKwkJcmV0dXJuIF9fcnRlX3JpbmdfZG9fbmJfZW5xdWV1ZShyLCBvYmpfdGFibGUs IG4sDQo+ICsJCQkJCQlSVEVfUklOR19RVUVVRV9GSVhFRCwNCj4gX19JU19TUCwNCj4gKwkJCQkJ CWZyZWVfc3BhY2UpOw0KPiArCWVsc2UNCj4gKwkJcmV0dXJuIF9fcnRlX3JpbmdfZG9fZW5xdWV1 ZShyLCBvYmpfdGFibGUsIG4sDQo+ICsJCQkJCcKgwqDCoMKgwqBSVEVfUklOR19RVUVVRV9GSVhF RCwgX19JU19TUCwNCj4gKwkJCQkJwqDCoMKgwqDCoGZyZWVfc3BhY2UpOw0KPiDCoH0NCj4gwqAN Cj4gwqAvKioNCj4gQEAgLTQ4OCw4ICs5MTUsMTQgQEAgc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxp bmUgdW5zaWduZWQgaW50DQo+IMKgcnRlX3JpbmdfZW5xdWV1ZV9idWxrKHN0cnVjdCBydGVfcmlu ZyAqciwgdm9pZCAqIGNvbnN0ICpvYmpfdGFibGUsDQo+IMKgCQnCoMKgwqDCoMKgwqB1bnNpZ25l ZCBpbnQgbiwgdW5zaWduZWQgaW50ICpmcmVlX3NwYWNlKQ0KPiDCoHsNCj4gLQlyZXR1cm4gX19y dGVfcmluZ19kb19lbnF1ZXVlKHIsIG9ial90YWJsZSwgbiwgUlRFX1JJTkdfUVVFVUVfRklYRUQs DQo+IC0JCQlyLT5wcm9kLnNpbmdsZSwgZnJlZV9zcGFjZSk7DQo+ICsJaWYgKHItPmZsYWdzICYg UklOR19GX05CKQ0KPiArCQlyZXR1cm4gX19ydGVfcmluZ19kb19uYl9lbnF1ZXVlKHIsIG9ial90 YWJsZSwgbiwNCj4gKwkJCQkJCVJURV9SSU5HX1FVRVVFX0ZJWEVELA0KPiArCQkJCQkJci0+cHJv ZF82NC5zaW5nbGUsDQo+IGZyZWVfc3BhY2UpOw0KPiArCWVsc2UNCj4gKwkJcmV0dXJuIF9fcnRl X3JpbmdfZG9fZW5xdWV1ZShyLCBvYmpfdGFibGUsIG4sDQo+ICsJCQkJCcKgwqDCoMKgwqBSVEVf UklOR19RVUVVRV9GSVhFRCwNCj4gKwkJCQkJwqDCoMKgwqDCoHItPnByb2Quc2luZ2xlLCBmcmVl X3NwYWNlKTsNCj4gwqB9DQo+IMKgDQo+IMKgLyoqDQo+IEBAIC01NzIsOCArMTAwNSwxNCBAQCBz dGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gwqBydGVfcmluZ19tY19k ZXF1ZXVlX2J1bGsoc3RydWN0IHJ0ZV9yaW5nICpyLCB2b2lkICoqb2JqX3RhYmxlLA0KPiDCoAkJ dW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCAqYXZhaWxhYmxlKQ0KPiDCoHsNCj4gLQlyZXR1 cm4gX19ydGVfcmluZ19kb19kZXF1ZXVlKHIsIG9ial90YWJsZSwgbiwgUlRFX1JJTkdfUVVFVUVf RklYRUQsDQo+IC0JCQlfX0lTX01DLCBhdmFpbGFibGUpOw0KPiArCWlmIChyLT5mbGFncyAmIFJJ TkdfRl9OQikNCj4gKwkJcmV0dXJuIF9fcnRlX3JpbmdfZG9fbmJfZGVxdWV1ZShyLCBvYmpfdGFi bGUsIG4sDQo+ICsJCQkJCQlSVEVfUklOR19RVUVVRV9GSVhFRCwNCj4gX19JU19NQywNCj4gKwkJ CQkJCWF2YWlsYWJsZSk7DQo+ICsJZWxzZQ0KPiArCQlyZXR1cm4gX19ydGVfcmluZ19kb19kZXF1 ZXVlKHIsIG9ial90YWJsZSwgbiwNCj4gKwkJCQkJwqDCoMKgwqDCoFJURV9SSU5HX1FVRVVFX0ZJ WEVELCBfX0lTX01DLA0KPiArCQkJCQnCoMKgwqDCoMKgYXZhaWxhYmxlKTsNCj4gwqB9DQo+IMKg DQo+IMKgLyoqDQo+IEBAIC01OTYsOCArMTAzNSwxNCBAQCBzdGF0aWMgX19ydGVfYWx3YXlzX2lu bGluZSB1bnNpZ25lZCBpbnQNCj4gwqBydGVfcmluZ19zY19kZXF1ZXVlX2J1bGsoc3RydWN0IHJ0 ZV9yaW5nICpyLCB2b2lkICoqb2JqX3RhYmxlLA0KPiDCoAkJdW5zaWduZWQgaW50IG4sIHVuc2ln bmVkIGludCAqYXZhaWxhYmxlKQ0KPiDCoHsNCj4gLQlyZXR1cm4gX19ydGVfcmluZ19kb19kZXF1 ZXVlKHIsIG9ial90YWJsZSwgbiwgUlRFX1JJTkdfUVVFVUVfRklYRUQsDQo+IC0JCQlfX0lTX1ND LCBhdmFpbGFibGUpOw0KPiArCWlmIChyLT5mbGFncyAmIFJJTkdfRl9OQikNCj4gKwkJcmV0dXJu IF9fcnRlX3JpbmdfZG9fbmJfZGVxdWV1ZShyLCBvYmpfdGFibGUsIG4sDQo+ICsJCQkJCQlSVEVf UklOR19RVUVVRV9GSVhFRCwNCj4gX19JU19TQywNCj4gKwkJCQkJCWF2YWlsYWJsZSk7DQo+ICsJ ZWxzZQ0KPiArCQlyZXR1cm4gX19ydGVfcmluZ19kb19kZXF1ZXVlKHIsIG9ial90YWJsZSwgbiwN Cj4gKwkJCQkJwqDCoMKgwqDCoFJURV9SSU5HX1FVRVVFX0ZJWEVELCBfX0lTX1NDLA0KPiArCQkJ CQnCoMKgwqDCoMKgYXZhaWxhYmxlKTsNCj4gwqB9DQo+IMKgDQo+IMKgLyoqDQo+IEBAIC02MjMs OCArMTA2OCwxNCBAQCBzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4g wqBydGVfcmluZ19kZXF1ZXVlX2J1bGsoc3RydWN0IHJ0ZV9yaW5nICpyLCB2b2lkICoqb2JqX3Rh YmxlLCB1bnNpZ25lZCBpbnQgbiwNCj4gwqAJCXVuc2lnbmVkIGludCAqYXZhaWxhYmxlKQ0KPiDC oHsNCj4gLQlyZXR1cm4gX19ydGVfcmluZ19kb19kZXF1ZXVlKHIsIG9ial90YWJsZSwgbiwgUlRF X1JJTkdfUVVFVUVfRklYRUQsDQo+IC0JCQkJci0+Y29ucy5zaW5nbGUsIGF2YWlsYWJsZSk7DQo+ ICsJaWYgKHItPmZsYWdzICYgUklOR19GX05CKQ0KPiArCQlyZXR1cm4gX19ydGVfcmluZ19kb19u Yl9kZXF1ZXVlKHIsIG9ial90YWJsZSwgbiwNCj4gKwkJCQkJCVJURV9SSU5HX1FVRVVFX0ZJWEVE LA0KPiArCQkJCQkJci0+Y29uc182NC5zaW5nbGUsDQo+IGF2YWlsYWJsZSk7DQo+ICsJZWxzZQ0K PiArCQlyZXR1cm4gX19ydGVfcmluZ19kb19kZXF1ZXVlKHIsIG9ial90YWJsZSwgbiwNCj4gKwkJ CQkJwqDCoMKgwqDCoFJURV9SSU5HX1FVRVVFX0ZJWEVELA0KPiArCQkJCQnCoMKgwqDCoMKgci0+ Y29ucy5zaW5nbGUsIGF2YWlsYWJsZSk7DQo+IMKgfQ0KPiDCoA0KPiDCoC8qKg0KPiBAQCAtNjk5 LDkgKzExNTAsMTMgQEAgcnRlX3JpbmdfZGVxdWV1ZShzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQg KipvYmpfcCkNCj4gwqBzdGF0aWMgaW5saW5lIHVuc2lnbmVkDQo+IMKgcnRlX3JpbmdfY291bnQo Y29uc3Qgc3RydWN0IHJ0ZV9yaW5nICpyKQ0KPiDCoHsNCj4gLQl1aW50MzJfdCBwcm9kX3RhaWwg PSByLT5wcm9kLnRhaWw7DQo+IC0JdWludDMyX3QgY29uc190YWlsID0gci0+Y29ucy50YWlsOw0K PiAtCXVpbnQzMl90IGNvdW50ID0gKHByb2RfdGFpbCAtIGNvbnNfdGFpbCkgJiByLT5tYXNrOw0K PiArCXVpbnQzMl90IGNvdW50Ow0KPiArDQo+ICsJaWYgKHItPmZsYWdzICYgUklOR19GX05CKQ0K PiArCQljb3VudCA9IChyLT5wcm9kXzY0LnRhaWwgLSByLT5jb25zXzY0LnRhaWwpICYgci0+bWFz azsNCj4gKwllbHNlDQo+ICsJCWNvdW50ID0gKHItPnByb2QudGFpbCAtIHItPmNvbnMudGFpbCkg JiByLT5tYXNrOw0KPiArDQo+IMKgCXJldHVybiAoY291bnQgPiByLT5jYXBhY2l0eSkgPyByLT5j YXBhY2l0eSA6IGNvdW50Ow0KPiDCoH0NCj4gwqANCj4gQEAgLTgyMSw4ICsxMjc2LDE0IEBAIHN0 YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVkDQo+IMKgcnRlX3JpbmdfbXBfZW5xdWV1 ZV9idXJzdChzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQgKiBjb25zdCAqb2JqX3RhYmxlLA0KPiDC oAkJCcKgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCAqZnJlZV9zcGFjZSkNCj4gwqB7DQo+ IC0JcmV0dXJuIF9fcnRlX3JpbmdfZG9fZW5xdWV1ZShyLCBvYmpfdGFibGUsIG4sDQo+IC0JCQlS VEVfUklOR19RVUVVRV9WQVJJQUJMRSwgX19JU19NUCwgZnJlZV9zcGFjZSk7DQo+ICsJaWYgKHIt PmZsYWdzICYgUklOR19GX05CKQ0KPiArCQlyZXR1cm4gX19ydGVfcmluZ19kb19uYl9lbnF1ZXVl KHIsIG9ial90YWJsZSwgbiwNCj4gKwkJCQkJCVJURV9SSU5HX1FVRVVFX1ZBUklBQkxFLA0KPiAr CQkJCQkJX19JU19NUCwgZnJlZV9zcGFjZSk7DQo+ICsJZWxzZQ0KPiArCQlyZXR1cm4gX19ydGVf cmluZ19kb19lbnF1ZXVlKHIsIG9ial90YWJsZSwgbiwNCj4gKwkJCQkJwqDCoMKgwqDCoFJURV9S SU5HX1FVRVVFX1ZBUklBQkxFLA0KPiArCQkJCQnCoMKgwqDCoMKgX19JU19NUCwgZnJlZV9zcGFj ZSk7DQo+IMKgfQ0KPiDCoA0KPiDCoC8qKg0KPiBAQCAtODQ0LDggKzEzMDUsMTQgQEAgc3RhdGlj IF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQNCj4gwqBydGVfcmluZ19zcF9lbnF1ZXVlX2J1 cnN0KHN0cnVjdCBydGVfcmluZyAqciwgdm9pZCAqIGNvbnN0ICpvYmpfdGFibGUsDQo+IMKgCQkJ wqB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50ICpmcmVlX3NwYWNlKQ0KPiDCoHsNCj4gLQly ZXR1cm4gX19ydGVfcmluZ19kb19lbnF1ZXVlKHIsIG9ial90YWJsZSwgbiwNCj4gLQkJCVJURV9S SU5HX1FVRVVFX1ZBUklBQkxFLCBfX0lTX1NQLCBmcmVlX3NwYWNlKTsNCj4gKwlpZiAoci0+Zmxh Z3MgJiBSSU5HX0ZfTkIpDQo+ICsJCXJldHVybiBfX3J0ZV9yaW5nX2RvX25iX2VucXVldWUociwg b2JqX3RhYmxlLCBuLA0KPiArCQkJCQkJUlRFX1JJTkdfUVVFVUVfVkFSSUFCTEUsDQo+ICsJCQkJ CQlfX0lTX1NQLCBmcmVlX3NwYWNlKTsNCj4gKwllbHNlDQo+ICsJCXJldHVybiBfX3J0ZV9yaW5n X2RvX2VucXVldWUociwgb2JqX3RhYmxlLCBuLA0KPiArCQkJCQnCoMKgwqDCoMKgUlRFX1JJTkdf UVVFVUVfVkFSSUFCTEUsDQo+ICsJCQkJCcKgwqDCoMKgwqBfX0lTX1NQLCBmcmVlX3NwYWNlKTsN Cj4gwqB9DQo+IMKgDQo+IMKgLyoqDQo+IEBAIC04NzEsOCArMTMzOCwxNCBAQCBzdGF0aWMgX19y dGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZA0KPiDCoHJ0ZV9yaW5nX2VucXVldWVfYnVyc3Qoc3Ry dWN0IHJ0ZV9yaW5nICpyLCB2b2lkICogY29uc3QgKm9ial90YWJsZSwNCj4gwqAJCcKgwqDCoMKg wqDCoHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgKmZyZWVfc3BhY2UpDQo+IMKgew0KPiAt CXJldHVybiBfX3J0ZV9yaW5nX2RvX2VucXVldWUociwgb2JqX3RhYmxlLCBuLA0KPiBSVEVfUklO R19RVUVVRV9WQVJJQUJMRSwNCj4gLQkJCXItPnByb2Quc2luZ2xlLCBmcmVlX3NwYWNlKTsNCj4g KwlpZiAoci0+ZmxhZ3MgJiBSSU5HX0ZfTkIpDQo+ICsJCXJldHVybiBfX3J0ZV9yaW5nX2RvX25i X2VucXVldWUociwgb2JqX3RhYmxlLCBuLA0KPiArCQkJCQkJUlRFX1JJTkdfUVVFVUVfVkFSSUFC TEUsDQo+ICsJCQkJCQlyLT5wcm9kXzY0LnNpbmdsZSwNCj4gZnJlZV9zcGFjZSk7DQo+ICsJZWxz ZQ0KPiArCQlyZXR1cm4gX19ydGVfcmluZ19kb19lbnF1ZXVlKHIsIG9ial90YWJsZSwgbiwNCj4g KwkJCQkJwqDCoMKgwqDCoFJURV9SSU5HX1FVRVVFX1ZBUklBQkxFLA0KPiArCQkJCQnCoMKgwqDC oMKgci0+cHJvZC5zaW5nbGUsIGZyZWVfc3BhY2UpOw0KPiDCoH0NCj4gwqANCj4gwqAvKioNCj4g QEAgLTg5OSw4ICsxMzcyLDE0IEBAIHN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVk DQo+IMKgcnRlX3JpbmdfbWNfZGVxdWV1ZV9idXJzdChzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQg KipvYmpfdGFibGUsDQo+IMKgCQl1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50ICphdmFpbGFi bGUpDQo+IMKgew0KPiAtCXJldHVybiBfX3J0ZV9yaW5nX2RvX2RlcXVldWUociwgb2JqX3RhYmxl LCBuLA0KPiAtCQkJUlRFX1JJTkdfUVVFVUVfVkFSSUFCTEUsIF9fSVNfTUMsIGF2YWlsYWJsZSk7 DQo+ICsJaWYgKHItPmZsYWdzICYgUklOR19GX05CKQ0KPiArCQlyZXR1cm4gX19ydGVfcmluZ19k b19uYl9kZXF1ZXVlKHIsIG9ial90YWJsZSwgbiwNCj4gKwkJCQkJCVJURV9SSU5HX1FVRVVFX1ZB UklBQkxFLA0KPiArCQkJCQkJX19JU19NQywgYXZhaWxhYmxlKTsNCj4gKwllbHNlDQo+ICsJCXJl dHVybiBfX3J0ZV9yaW5nX2RvX2RlcXVldWUociwgb2JqX3RhYmxlLCBuLA0KPiArCQkJCQnCoMKg wqDCoMKgUlRFX1JJTkdfUVVFVUVfVkFSSUFCTEUsDQo+ICsJCQkJCcKgwqDCoMKgwqBfX0lTX01D LCBhdmFpbGFibGUpOw0KPiDCoH0NCj4gwqANCj4gwqAvKioNCj4gQEAgLTkyNCw4ICsxNDAzLDE0 IEBAIHN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVkDQo+IMKgcnRlX3Jpbmdfc2Nf ZGVxdWV1ZV9idXJzdChzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQgKipvYmpfdGFibGUsDQo+IMKg CQl1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50ICphdmFpbGFibGUpDQo+IMKgew0KPiAtCXJl dHVybiBfX3J0ZV9yaW5nX2RvX2RlcXVldWUociwgb2JqX3RhYmxlLCBuLA0KPiAtCQkJUlRFX1JJ TkdfUVVFVUVfVkFSSUFCTEUsIF9fSVNfU0MsIGF2YWlsYWJsZSk7DQo+ICsJaWYgKHItPmZsYWdz ICYgUklOR19GX05CKQ0KPiArCQlyZXR1cm4gX19ydGVfcmluZ19kb19uYl9kZXF1ZXVlKHIsIG9i al90YWJsZSwgbiwNCj4gKwkJCQkJCVJURV9SSU5HX1FVRVVFX1ZBUklBQkxFLA0KPiArCQkJCQkJ X19JU19TQywgYXZhaWxhYmxlKTsNCj4gKwllbHNlDQo+ICsJCXJldHVybiBfX3J0ZV9yaW5nX2Rv X2RlcXVldWUociwgb2JqX3RhYmxlLCBuLA0KPiArCQkJCQnCoMKgwqDCoMKgUlRFX1JJTkdfUVVF VUVfVkFSSUFCTEUsDQo+ICsJCQkJCcKgwqDCoMKgwqBfX0lTX1NDLCBhdmFpbGFibGUpOw0KPiDC oH0NCj4gwqANCj4gwqAvKioNCj4gQEAgLTk1MSw5ICsxNDM2LDE0IEBAIHN0YXRpYyBfX3J0ZV9h bHdheXNfaW5saW5lIHVuc2lnbmVkDQo+IMKgcnRlX3JpbmdfZGVxdWV1ZV9idXJzdChzdHJ1Y3Qg cnRlX3JpbmcgKnIsIHZvaWQgKipvYmpfdGFibGUsDQo+IMKgCQl1bnNpZ25lZCBpbnQgbiwgdW5z aWduZWQgaW50ICphdmFpbGFibGUpDQo+IMKgew0KPiAtCXJldHVybiBfX3J0ZV9yaW5nX2RvX2Rl cXVldWUociwgb2JqX3RhYmxlLCBuLA0KPiAtCQkJCVJURV9SSU5HX1FVRVVFX1ZBUklBQkxFLA0K PiAtCQkJCXItPmNvbnMuc2luZ2xlLCBhdmFpbGFibGUpOw0KPiArCWlmIChyLT5mbGFncyAmIFJJ TkdfRl9OQikNCj4gKwkJcmV0dXJuIF9fcnRlX3JpbmdfZG9fbmJfZGVxdWV1ZShyLCBvYmpfdGFi bGUsIG4sDQo+ICsJCQkJCQlSVEVfUklOR19RVUVVRV9WQVJJQUJMRSwNCj4gKwkJCQkJCXItPmNv bnNfNjQuc2luZ2xlLA0KPiBhdmFpbGFibGUpOw0KPiArCWVsc2UNCj4gKwkJcmV0dXJuIF9fcnRl X3JpbmdfZG9fZGVxdWV1ZShyLCBvYmpfdGFibGUsIG4sDQo+ICsJCQkJCcKgwqDCoMKgwqBSVEVf UklOR19RVUVVRV9WQVJJQUJMRSwNCj4gKwkJCQkJwqDCoMKgwqDCoHItPmNvbnMuc2luZ2xlLCBh dmFpbGFibGUpOw0KPiDCoH0NCj4gwqANCj4gwqAjaWZkZWYgX19jcGx1c3BsdXMNCj4gZGlmZiAt LWdpdCBhL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ192ZXJzaW9uLm1hcA0KPiBiL2xpYi9saWJy dGVfcmluZy9ydGVfcmluZ192ZXJzaW9uLm1hcA0KPiBpbmRleCBkOTM1ZWZkMGQuLjg5Njk0Njdh ZiAxMDA2NDQNCj4gLS0tIGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3ZlcnNpb24ubWFwDQo+ ICsrKyBiL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ192ZXJzaW9uLm1hcA0KPiBAQCAtMTcsMyAr MTcsMTAgQEAgRFBES18yLjIgew0KPiDCoAlydGVfcmluZ19mcmVlOw0KPiDCoA0KPiDCoH0gRFBE S18yLjA7DQo+ICsNCj4gK0RQREtfMTkuMDUgew0KPiArCWdsb2JhbDoNCj4gKw0KPiArCXJ0ZV9y aW5nX2dldF9tZW1zaXplOw0KPiArDQo+ICt9IERQREtfMi4yOw0KLS0gDQpPbGEgTGlsamVkYWhs LCBOZXR3b3JraW5nIFN5c3RlbSBBcmNoaXRlY3QsIEFybQ0KUGhvbmUgKzQ2NzA2ODY2MzczLCBT a3lwZSBvbGEubGlsamVkYWhsDQoNCg==