From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9EA45A0562; Tue, 31 Mar 2020 19:05:35 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 4121A2BCE; Tue, 31 Mar 2020 19:05:35 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 3C79F1BFC5 for ; Tue, 31 Mar 2020 19:05:33 +0200 (CEST) IronPort-SDR: BXZp5wAfG8fjTCb9JCXbtNy/FoweKsricAgHVgMivVmdtz9WNBXTm3CFJPvbod6dZsCpRszEY3 5wEHoAveTs1A== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Mar 2020 10:05:32 -0700 IronPort-SDR: sNWmWHrYtOlXmrcgoNdAqOnNuw8gWShSPjNQgxXEM700j52IzNK5oYOq9kI3RI2CdWYFnwOFDe +lCgtanI0eEQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.72,328,1580803200"; d="scan'208";a="242436448" Received: from orsmsx106.amr.corp.intel.com ([10.22.225.133]) by orsmga008.jf.intel.com with ESMTP; 31 Mar 2020 10:05:32 -0700 Received: from orsmsx601.amr.corp.intel.com (10.22.229.14) by ORSMSX106.amr.corp.intel.com (10.22.225.133) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 31 Mar 2020 10:05:31 -0700 Received: from orsmsx603.amr.corp.intel.com (10.22.229.16) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 31 Mar 2020 10:05:31 -0700 Received: from ORSEDG002.ED.cps.intel.com (10.7.248.5) by orsmsx603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1713.5 via Frontend Transport; Tue, 31 Mar 2020 10:05:31 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.106) by edgegateway.intel.com (134.134.137.101) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 31 Mar 2020 10:05:28 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FTjjgj5qQU8JFe+esAzdLtF2wmdmcd9EJteoxQLgz3xHo4INNNYyw8xO13r9BsKxEgyi3mlnGcNAFwfQXcFhkPjyC1N/SWscP0VdsZPuGDupqRVoz+/tmL45sfs+gp8rKUrqbOlibM79z6jGRm+JY7zVJhTobQs0Ah+JYyh660xZf7MeGi7cYZLiBOjx1l0TtURNOCgcOKDC97Xc01VRwQv4T3z5kic6NsQKB4svlwIx86KT+D4A3SyO/4g8eiSiO3UGTqmBiVGXzNX6rRJtjhPhEp28eABa5YjHwI9rfVfEf9KwAUi8tMzSyUdpz7NVNSIJjsniz8LwR8logul0ow== 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=qg6pm9D7AJj97YnUXG/Kt3tH2MtoxtHdQh4HTkT5KxY=; b=TIToX+7wWGd/GRkrvZRKSgk2P5whKEcF8krZ2r7WzqED2fgA+Bj9L15Dhfz0m2OQph7TU7YE2U6539XQSx+7KB9WWaX9DxF8HwT4ktIYr3g7icjhwUIYwysBX/CgRhql4rVi0b1Ja6igwN6nsP0qdHrmrLxdKr+gphbKRH7fB3eT9J8TBNJjwPx9RlOGW17gAwOFeWsZHC4PtI6NBLL9IiFIwxev8dAb/OVBOPEkfWb7oF/SqrKQ6+A70Gr62Ud43QZgwyKZ69kgXNXNusBbKEh2Pw1J9B8MsPRO/Hjop4NpyhAA57ZAa5oGEwbsxcV0r2PgT584sSmFiU9Ors2t+g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qg6pm9D7AJj97YnUXG/Kt3tH2MtoxtHdQh4HTkT5KxY=; b=d1xTbT+d/THCl8wZQTdYVfZzuSmFf/PfQm6LR993+Pjit90XqqLkwrA1egZCG1vEK4H/5MXtueuy9FS/ZeC8wE7h7zB+WzIxa/ZCZBFm3Tqf8yDIsKCFpwLtx74OdewG9DhSzS5GcGjq0BoCYziv4v9YRO1ANeHRQ55XyDWrSqc= Received: from SN6PR11MB2558.namprd11.prod.outlook.com (2603:10b6:805:5d::19) by SN6PR11MB3197.namprd11.prod.outlook.com (2603:10b6:805:c5::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2856.18; Tue, 31 Mar 2020 17:05:24 +0000 Received: from SN6PR11MB2558.namprd11.prod.outlook.com ([fe80::5df7:d515:ec1d:8db1]) by SN6PR11MB2558.namprd11.prod.outlook.com ([fe80::5df7:d515:ec1d:8db1%7]) with mapi id 15.20.2856.019; Tue, 31 Mar 2020 17:05:24 +0000 From: "Ananyev, Konstantin" To: "david.marchand@redhat.com" , "thomas@monjalon.net" , "nhorman@tuxdriver.com" CC: "honnappa.nagarahalli@arm.com" , "dev@dpdk.org" , "Richardson, Bruce" , "Yigit, Ferruh" Thread-Topic: /validate-abi.sh complains [PATCH v1 3/8] ring: introduce RTS ring mode Thread-Index: AdYHfVeYhu3Fh6DoSrq5BBhThcKOdQ== Date: Tue, 31 Mar 2020 17:05:24 +0000 Message-ID: Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.2.0.6 authentication-results: spf=none (sender IP is ) smtp.mailfrom=konstantin.ananyev@intel.com; x-originating-ip: [192.198.151.188] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 058d102c-423e-4567-55d6-08d7d595b425 x-ms-traffictypediagnostic: SN6PR11MB3197: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-forefront-prvs: 0359162B6D x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN6PR11MB2558.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(10019020)(136003)(39860400002)(396003)(346002)(376002)(366004)(86362001)(71200400001)(53546011)(66446008)(54906003)(9686003)(66476007)(110136005)(7696005)(66946007)(15650500001)(4326008)(6506007)(33656002)(64756008)(76116006)(66556008)(26005)(81156014)(55016002)(2906002)(8936002)(5660300002)(30864003)(52536014)(107886003)(8676002)(186003)(316002)(81166006)(478600001)(559001)(579004); DIR:OUT; SFP:1102; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: R0LzozlQJcfR41Ofue9OTSypWLIHpUaFVIC8s0CrFaHcVS/91oJck/c9woKXNei7Na5pITTt4T801vKP+QtSgx0LG8684qalwAifuTeW5Iqm0gAsTGxoh8DqexMTRGx79BcKN2d+HqzGgEQqNWQwZ+g1SPTztO6x0PC6Li/ao0xa2jWsgxiopDCCiqUGkKiOIVAAjE61Sn0KPUTaluDN/nbcm6Yx//1G6cb16tbxHsBZ/phMLbWxGRwXYHJlAOe2VTUdfvTuzgjgFEMvpTtnZ5MoQXIZHqDMw8rRh4Zy7v/NnsZxFMFlrXMdzRhkwuu2HnCV5WJFkPYXiwOxpyT88dnaFRuWizD4l8N1rZtrOGspY3qeGpJX2O38jFcOxu3cdD4pYvZj9eXobEexZcMLUPxS+t5QY+CdMOVBcT9bUGXGBQOHV9GER/djEkjb1HAW x-ms-exchange-antispam-messagedata: HnggIOK2Wxw1sKjpV+atzyvVWskkSc7Z7bbuoR/nIGRPGwoXhAm8VoEIoEH1DEXAuFZ0La0bYAf+0ERA40Z6Ngjwdw/AezOttXV6hmnJV9xG5kR6QGdghoeLWu1Ic+64b4T+GWlKzl83bgrxx8sJog== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 058d102c-423e-4567-55d6-08d7d595b425 X-MS-Exchange-CrossTenant-originalarrivaltime: 31 Mar 2020 17:05:24.3084 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Xg3wT54+DO9vEziCyrWzsu61jIe67Zj2PIU38CiUYmNyv8M/NYGuj34aM4IXmwi3nmfekGriEAHkFTpxpmTAKWnjpiPDsuypnslgYAk6rwY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR11MB3197 X-OriginatorOrg: intel.com Subject: [dpdk-dev] /validate-abi.sh complains [PATCH v1 3/8] ring: introduce RTS ring mode 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGkgZXZlcnlvbmUsDQoNCkhhdmUgYSBxdWVzdGlvbiByZWdhcmRpbmcgdmFsaWRhdGUtYWJpLnNo Lg0KSXQgY29tcGxhaW5zIG9uIHRoZSBmb2xsb3dpbmcgY2hhbmdlcyB3aXRoIHRoYXQgcGF0Y2g6 DQoNCkBAIC0xMTEsMTEgKzEyOSwyMSBAQCBzdHJ1Y3QgcnRlX3Jpbmcgew0KICAgICAgICBjaGFy IHBhZDAgX19ydGVfY2FjaGVfYWxpZ25lZDsgLyoqPCBlbXB0eSBjYWNoZSBsaW5lICovDQoNCiAg ICAgICAgLyoqIFJpbmcgcHJvZHVjZXIgc3RhdHVzLiAqLw0KLSAgICAgICBzdHJ1Y3QgcnRlX3Jp bmdfaGVhZHRhaWwgcHJvZCBfX3J0ZV9jYWNoZV9hbGlnbmVkOw0KKyAgICAgICBSVEVfU1REX0Mx MQ0KKyAgICAgICB1bmlvbiB7DQorICAgICAgICAgICAgICAgc3RydWN0IHJ0ZV9yaW5nX2hlYWR0 YWlsIHByb2Q7DQorICAgICAgICAgICAgICAgc3RydWN0IHJ0ZV9yaW5nX3J0c19oZWFkdGFpbCBy dHNfcHJvZDsNCisgICAgICAgfSAgX19ydGVfY2FjaGVfYWxpZ25lZDsNCisNCiAgICAgICAgY2hh ciBwYWQxIF9fcnRlX2NhY2hlX2FsaWduZWQ7IC8qKjwgZW1wdHkgY2FjaGUgbGluZSAqLw0KDQog ICAgICAgIC8qKiBSaW5nIGNvbnN1bWVyIHN0YXR1cy4gKi8NCi0gICAgICAgc3RydWN0IHJ0ZV9y aW5nX2hlYWR0YWlsIGNvbnMgX19ydGVfY2FjaGVfYWxpZ25lZDsNCisgICAgICAgUlRFX1NURF9D MTENCisgICAgICAgdW5pb24gew0KKyAgICAgICAgICAgICAgIHN0cnVjdCBydGVfcmluZ19oZWFk dGFpbCBjb25zOw0KKyAgICAgICAgICAgICAgIHN0cnVjdCBydGVfcmluZ19ydHNfaGVhZHRhaWwg cnRzX2NvbnM7DQorICAgICAgIH0gIF9fcnRlX2NhY2hlX2FsaWduZWQ7DQorDQoNCkNvbXBsYWlu dHM6DQpydGVfcmluZy5oDQpb4oiSXSBzdHJ1Y3QgcnRlX3JpbmcgIDIgIA0KDQoxDQpDaGFuZ2U6 IEZpZWxkIGNvbnMgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoaXMgdHlwZS4NCkVmZmVjdDogICAg QXBwbGljYXRpb25zIHdpbGwgYWNjZXNzIGluY29ycmVjdCBtZW1vcnkgd2hlbiBhdHRlbXB0aW5n IHRvIGFjY2VzcyB0aGlzIGZpZWxkLg0KMg0KQ2hhbmdlOiBGaWVsZCBwcm9kIGhhcyBiZWVuIHJl bW92ZWQgZnJvbSB0aGlzIHR5cGUuDQpFZmZlY3Q6ICAgIEFwcGxpY2F0aW9ucyB3aWxsIGFjY2Vz cyBpbmNvcnJlY3QgbWVtb3J5IHdoZW4gYXR0ZW1wdGluZyB0byBhY2Nlc3MgdGhpcyBmaWVsZC4N Cg0KRnJvbSBteSBwZXJzcGVjdGl2ZSBpdCBsb29rcyBmYWxzZS1wb3NpdGl2ZToNCipwcm9kKiBh bmQgKmNvbnMqIGZpZWxkcyBhcmUgc3RpbGwgdGhlcmUsDQp0aGVpciBmb3JtYXQsIHNpemUgYW5k IG9mZnNldCB3aXRoaW4gcnRlX3JpbmcgcmVtYWluIHRoZSBzYW1lLiANCklzIHRoYXQgc29tZSBs aW1pdGF0aW9uIHdpdGggdGhlIHRvb2wsIG9yIGFtIEkgbWlzc2luZyBzb21ldGhpbmcgaGVyZT8N ClRoYW5rcw0KS29uc3RhbnRpbiANCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBG cm9tOiBBbmFueWV2LCBLb25zdGFudGluIDxrb25zdGFudGluLmFuYW55ZXZAaW50ZWwuY29tPg0K PiBTZW50OiBUdWVzZGF5LCBNYXJjaCAzMSwgMjAyMCA1OjQzIFBNDQo+IFRvOiBkZXZAZHBkay5v cmcNCj4gQ2M6IGhvbm5hcHBhLm5hZ2FyYWhhbGxpQGFybS5jb207IEFuYW55ZXYsIEtvbnN0YW50 aW4gPGtvbnN0YW50aW4uYW5hbnlldkBpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFtQQVRDSCB2MSAz LzhdIHJpbmc6IGludHJvZHVjZSBSVFMgcmluZyBtb2RlDQo+IA0KPiBJbnRyb2R1Y2UgcmVsYXhl ZCB0YWlsIHN5bmMgKFJUUykgbW9kZSBmb3IgTVQgcmluZyBzeW5jaHJvbml6YXRpb24uDQo+IEFp bSB0byByZWR1Y2Ugc3RhbGwgdGltZXMgaW4gY2FzZSB3aGVuIHJpbmcgaXMgdXNlZCBvbg0KPiBv dmVyY29tbWl0ZWQgY3B1cyAobXVsdGlwbGUgYWN0aXZlIHRocmVhZHMgb24gdGhlIHNhbWUgY3B1 KS4NCj4gVGhlIG1haW4gZGlmZmVyZW5jZSBmcm9tIG9yaWdpbmFsIE1QL01DIGFsZ29yaXRobSBp cyB0aGF0DQo+IHRhaWwgdmFsdWUgaXMgaW5jcmVhc2VkIG5vdCBieSBldmVyeSB0aHJlYWQgdGhh dCBmaW5pc2hlZCBlbnF1ZXVlL2RlcXVldWUsDQo+IGJ1dCBvbmx5IGJ5IHRoZSBsYXN0IG9uZS4N Cj4gVGhhdCBhbGxvd3MgdGhyZWFkcyB0byBhdm9pZCBzcGlubmluZyBvbiByaW5nIHRhaWwgdmFs dWUsDQo+IGxlYXZpbmcgYWN0dWFsIHRhaWwgdmFsdWUgY2hhbmdlIHRvIHRoZSBsYXN0IHRocmVh ZCBpbiB0aGUgdXBkYXRlIHF1ZXVlLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogS29uc3RhbnRpbiBB bmFueWV2IDxrb25zdGFudGluLmFuYW55ZXZAaW50ZWwuY29tPg0KPiAtLS0NCj4gIGxpYi9saWJy dGVfcmluZy9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICA1ICstDQo+ICBsaWIvbGlicnRlX3Jp bmcvbWVzb24uYnVpbGQgICAgICAgICAgICB8ICAgNSArLQ0KPiAgbGliL2xpYnJ0ZV9yaW5nL3J0 ZV9yaW5nLmMgICAgICAgICAgICAgfCAxMDAgKysrKysrKy0NCj4gIGxpYi9saWJydGVfcmluZy9y dGVfcmluZy5oICAgICAgICAgICAgIHwgMTA5ICsrKysrKysrLQ0KPiAgbGliL2xpYnJ0ZV9yaW5n L3J0ZV9yaW5nX2VsZW0uaCAgICAgICAgfCAgODYgKysrKysrLQ0KPiAgbGliL2xpYnJ0ZV9yaW5n L3J0ZV9yaW5nX3J0cy5oICAgICAgICAgfCAzMTYgKysrKysrKysrKysrKysrKysrKysrKysrKw0K PiAgbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3J0c19lbGVtLmggICAgfCAyMDUgKysrKysrKysr KysrKysrKw0KPiAgbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3J0c19nZW5lcmljLmggfCAyMTAg KysrKysrKysrKysrKysrKw0KPiAgOCBmaWxlcyBjaGFuZ2VkLCAxMDA3IGluc2VydGlvbnMoKyks IDI5IGRlbGV0aW9ucygtKQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9saWJydGVfcmluZy9y dGVfcmluZ19ydHMuaA0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9saWJydGVfcmluZy9ydGVf cmluZ19ydHNfZWxlbS5oDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2xpYnJ0ZV9yaW5nL3J0 ZV9yaW5nX3J0c19nZW5lcmljLmgNCj4gDQo+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3Jpbmcv TWFrZWZpbGUgYi9saWIvbGlicnRlX3JpbmcvTWFrZWZpbGUNCj4gaW5kZXggOTE3YzU2MGFkLi44 ZjVjMjg0Y2MgMTAwNjQ0DQo+IC0tLSBhL2xpYi9saWJydGVfcmluZy9NYWtlZmlsZQ0KPiArKysg Yi9saWIvbGlicnRlX3JpbmcvTWFrZWZpbGUNCj4gQEAgLTE4LDYgKzE4LDkgQEAgU1JDUy0kKENP TkZJR19SVEVfTElCUlRFX1JJTkcpIDo9IHJ0ZV9yaW5nLmMNCj4gIFNZTUxJTkstJChDT05GSUdf UlRFX0xJQlJURV9SSU5HKS1pbmNsdWRlIDo9IHJ0ZV9yaW5nLmggXA0KPiAgCQkJCQlydGVfcmlu Z19lbGVtLmggXA0KPiAgCQkJCQlydGVfcmluZ19nZW5lcmljLmggXA0KPiAtCQkJCQlydGVfcmlu Z19jMTFfbWVtLmgNCj4gKwkJCQkJcnRlX3JpbmdfYzExX21lbS5oIFwNCj4gKwkJCQkJcnRlX3Jp bmdfcnRzLmggXA0KPiArCQkJCQlydGVfcmluZ19ydHNfZWxlbS5oIFwNCj4gKwkJCQkJcnRlX3Jp bmdfcnRzX2dlbmVyaWMuaA0KPiANCj4gIGluY2x1ZGUgJChSVEVfU0RLKS9tay9ydGUubGliLm1r DQo+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3JpbmcvbWVzb24uYnVpbGQgYi9saWIvbGlicnRl X3JpbmcvbWVzb24uYnVpbGQNCj4gaW5kZXggZjJmM2NjYzg4Li42MTI5MzZhZmIgMTAwNjQ0DQo+ IC0tLSBhL2xpYi9saWJydGVfcmluZy9tZXNvbi5idWlsZA0KPiArKysgYi9saWIvbGlicnRlX3Jp bmcvbWVzb24uYnVpbGQNCj4gQEAgLTUsNyArNSwxMCBAQCBzb3VyY2VzID0gZmlsZXMoJ3J0ZV9y aW5nLmMnKQ0KPiAgaGVhZGVycyA9IGZpbGVzKCdydGVfcmluZy5oJywNCj4gIAkJJ3J0ZV9yaW5n X2VsZW0uaCcsDQo+ICAJCSdydGVfcmluZ19jMTFfbWVtLmgnLA0KPiAtCQkncnRlX3JpbmdfZ2Vu ZXJpYy5oJykNCj4gKwkJJ3J0ZV9yaW5nX2dlbmVyaWMuaCcsDQo+ICsJCSdydGVfcmluZ19ydHMu aCcsDQo+ICsJCSdydGVfcmluZ19ydHNfZWxlbS5oJywNCj4gKwkJJ3J0ZV9yaW5nX3J0c19nZW5l cmljLmgnKQ0KPiANCj4gICMgcnRlX3JpbmdfY3JlYXRlX2VsZW0gYW5kIHJ0ZV9yaW5nX2dldF9t ZW1zaXplX2VsZW0gYXJlIGV4cGVyaW1lbnRhbA0KPiAgYWxsb3dfZXhwZXJpbWVudGFsX2FwaXMg PSB0cnVlDQo+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmcuYyBiL2xpYi9s aWJydGVfcmluZy9ydGVfcmluZy5jDQo+IGluZGV4IGZhNTczMzkwNy4uMjIyZWVjMGZiIDEwMDY0 NA0KPiAtLS0gYS9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmcuYw0KPiArKysgYi9saWIvbGlicnRl X3JpbmcvcnRlX3JpbmcuYw0KPiBAQCAtNDUsNiArNDUsOSBAQCBFQUxfUkVHSVNURVJfVEFJTFEo cnRlX3JpbmdfdGFpbHEpDQo+ICAvKiB0cnVlIGlmIHggaXMgYSBwb3dlciBvZiAyICovDQo+ICAj ZGVmaW5lIFBPV0VST0YyKHgpICgoKCh4KS0xKSAmICh4KSkgPT0gMCkNCj4gDQo+ICsvKiBieSBk ZWZhdWx0IHNldCBoZWFkL3RhaWwgZGlzdGFuY2UgYXMgMS84IG9mIHJpbmcgY2FwYWNpdHkgKi8N Cj4gKyNkZWZpbmUgSFREX01BWF9ERUYJOA0KPiArDQo+ICAvKiByZXR1cm4gdGhlIHNpemUgb2Yg bWVtb3J5IG9jY3VwaWVkIGJ5IGEgcmluZyAqLw0KPiAgc3NpemVfdA0KPiAgcnRlX3JpbmdfZ2V0 X21lbXNpemVfZWxlbSh1bnNpZ25lZCBpbnQgZXNpemUsIHVuc2lnbmVkIGludCBjb3VudCkNCj4g QEAgLTc5LDExICs4Miw4NCBAQCBydGVfcmluZ19nZXRfbWVtc2l6ZSh1bnNpZ25lZCBpbnQgY291 bnQpDQo+ICAJcmV0dXJuIHJ0ZV9yaW5nX2dldF9tZW1zaXplX2VsZW0oc2l6ZW9mKHZvaWQgKiks IGNvdW50KTsNCj4gIH0NCj4gDQo+ICsvKg0KPiArICogaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9u IHRvIHJlc2V0IHByb2QvY29ucyBoZWFkLXRhaWwgdmFsdWVzLg0KPiArICovDQo+ICtzdGF0aWMg dm9pZA0KPiArcmVzZXRfaGVhZHRhaWwodm9pZCAqcCkNCj4gK3sNCj4gKwlzdHJ1Y3QgcnRlX3Jp bmdfaGVhZHRhaWwgKmh0Ow0KPiArCXN0cnVjdCBydGVfcmluZ19ydHNfaGVhZHRhaWwgKmh0X3J0 czsNCj4gKw0KPiArCWh0ID0gcDsNCj4gKwlodF9ydHMgPSBwOw0KPiArDQo+ICsJc3dpdGNoICho dC0+c3luY190eXBlKSB7DQo+ICsJY2FzZSBSVEVfUklOR19TWU5DX01UOg0KPiArCWNhc2UgUlRF X1JJTkdfU1lOQ19TVDoNCj4gKwkJaHQtPmhlYWQgPSAwOw0KPiArCQlodC0+dGFpbCA9IDA7DQo+ ICsJCWJyZWFrOw0KPiArCWNhc2UgUlRFX1JJTkdfU1lOQ19NVF9SVFM6DQo+ICsJCWh0X3J0cy0+ aGVhZC5yYXcgPSAwOw0KPiArCQlodF9ydHMtPnRhaWwucmF3ID0gMDsNCj4gKwkJYnJlYWs7DQo+ ICsJZGVmYXVsdDoNCj4gKwkJLyogdW5rbm93biBzeW5jIG1vZGUgKi8NCj4gKwkJUlRFX0FTU0VS VCgwKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gIHZvaWQNCj4gIHJ0ZV9yaW5nX3Jlc2V0KHN0cnVj dCBydGVfcmluZyAqcikNCj4gIHsNCj4gLQlyLT5wcm9kLmhlYWQgPSByLT5jb25zLmhlYWQgPSAw Ow0KPiAtCXItPnByb2QudGFpbCA9IHItPmNvbnMudGFpbCA9IDA7DQo+ICsJcmVzZXRfaGVhZHRh aWwoJnItPnByb2QpOw0KPiArCXJlc2V0X2hlYWR0YWlsKCZyLT5jb25zKTsNCj4gK30NCj4gKw0K PiArLyoNCj4gKyAqIGhlbHBlciBmdW5jdGlvbiwgY2FsY3VsYXRlcyBzeW5jX3R5cGUgdmFsdWVz IGZvciBwcm9kIGFuZCBjb25zDQo+ICsgKiBiYXNlZCBvbiBpbnB1dCBmbGFncy4gUmV0dXJucyB6 ZXJvIGF0IHN1Y2Nlc3Mgb3IgbmVnYXRpdmUNCj4gKyAqIGVycm5vIHZhbHVlIG90aGVyd2lzZS4N Cj4gKyAqLw0KPiArc3RhdGljIGludA0KPiArZ2V0X3N5bmNfdHlwZSh1aW50MzJfdCBmbGFncywg ZW51bSBydGVfcmluZ19zeW5jX3R5cGUgKnByb2Rfc3QsDQo+ICsJZW51bSBydGVfcmluZ19zeW5j X3R5cGUgKmNvbnNfc3QpDQo+ICt7DQo+ICsJc3RhdGljIGNvbnN0IHVpbnQzMl90IHByb2Rfc3Rf ZmxhZ3MgPQ0KPiArCQkoUklOR19GX1NQX0VOUSB8IFJJTkdfRl9NUF9SVFNfRU5RKTsNCj4gKwlz dGF0aWMgY29uc3QgdWludDMyX3QgY29uc19zdF9mbGFncyA9DQo+ICsJCShSSU5HX0ZfU0NfREVR IHwgUklOR19GX01DX1JUU19ERVEpOw0KPiArDQo+ICsJc3dpdGNoIChmbGFncyAmIHByb2Rfc3Rf ZmxhZ3MpIHsNCj4gKwljYXNlIDA6DQo+ICsJCSpwcm9kX3N0ID0gUlRFX1JJTkdfU1lOQ19NVDsN Cj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBSSU5HX0ZfU1BfRU5ROg0KPiArCQkqcHJvZF9zdCA9IFJU RV9SSU5HX1NZTkNfU1Q7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgUklOR19GX01QX1JUU19FTlE6 DQo+ICsJCSpwcm9kX3N0ID0gUlRFX1JJTkdfU1lOQ19NVF9SVFM7DQo+ICsJCWJyZWFrOw0KPiAr CWRlZmF1bHQ6DQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArCX0NCj4gKw0KPiArCXN3aXRjaCAo ZmxhZ3MgJiBjb25zX3N0X2ZsYWdzKSB7DQo+ICsJY2FzZSAwOg0KPiArCQkqY29uc19zdCA9IFJU RV9SSU5HX1NZTkNfTVQ7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgUklOR19GX1NDX0RFUToNCj4g KwkJKmNvbnNfc3QgPSBSVEVfUklOR19TWU5DX1NUOw0KPiArCQlicmVhazsNCj4gKwljYXNlIFJJ TkdfRl9NQ19SVFNfREVROg0KPiArCQkqY29uc19zdCA9IFJURV9SSU5HX1NZTkNfTVRfUlRTOw0K PiArCQlicmVhazsNCj4gKwlkZWZhdWx0Og0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ ICsNCj4gKwlyZXR1cm4gMDsNCj4gIH0NCj4gDQo+ICBpbnQNCj4gQEAgLTEwMCwxNiArMTc2LDIw IEBAIHJ0ZV9yaW5nX2luaXQoc3RydWN0IHJ0ZV9yaW5nICpyLCBjb25zdCBjaGFyICpuYW1lLCB1 bnNpZ25lZCBjb3VudCwNCj4gIAlSVEVfQlVJTERfQlVHX09OKChvZmZzZXRvZihzdHJ1Y3QgcnRl X3JpbmcsIHByb2QpICYNCj4gIAkJCSAgUlRFX0NBQ0hFX0xJTkVfTUFTSykgIT0gMCk7DQo+IA0K PiArCVJURV9CVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHJ0ZV9yaW5nX2hlYWR0YWlsLCBz eW5jX3R5cGUpICE9DQo+ICsJCW9mZnNldG9mKHN0cnVjdCBydGVfcmluZ19ydHNfaGVhZHRhaWws IHN5bmNfdHlwZSkpOw0KPiArCVJURV9CVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHJ0ZV9y aW5nX2hlYWR0YWlsLCB0YWlsKSAhPQ0KPiArCQlvZmZzZXRvZihzdHJ1Y3QgcnRlX3JpbmdfcnRz X2hlYWR0YWlsLCB0YWlsLnZhbC5wb3MpKTsNCj4gKw0KPiAgCS8qIGluaXQgdGhlIHJpbmcgc3Ry dWN0dXJlICovDQo+ICAJbWVtc2V0KHIsIDAsIHNpemVvZigqcikpOw0KPiAgCXJldCA9IHN0cmxj cHkoci0+bmFtZSwgbmFtZSwgc2l6ZW9mKHItPm5hbWUpKTsNCj4gIAlpZiAocmV0IDwgMCB8fCBy ZXQgPj0gKGludClzaXplb2Yoci0+bmFtZSkpDQo+ICAJCXJldHVybiAtRU5BTUVUT09MT05HOw0K PiAgCXItPmZsYWdzID0gZmxhZ3M7DQo+IC0Jci0+cHJvZC5zeW5jX3R5cGUgPSAoZmxhZ3MgJiBS SU5HX0ZfU1BfRU5RKSA/DQo+IC0JCVJURV9SSU5HX1NZTkNfU1QgOiBSVEVfUklOR19TWU5DX01U Ow0KPiAtCXItPmNvbnMuc3luY190eXBlID0gKGZsYWdzICYgUklOR19GX1NDX0RFUSkgPw0KPiAt CQlSVEVfUklOR19TWU5DX1NUIDogUlRFX1JJTkdfU1lOQ19NVDsNCj4gKwlyZXQgPSBnZXRfc3lu Y190eXBlKGZsYWdzLCAmci0+cHJvZC5zeW5jX3R5cGUsICZyLT5jb25zLnN5bmNfdHlwZSk7DQo+ ICsJaWYgKHJldCAhPSAwKQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiANCj4gIAlpZiAoZmxhZ3MgJiBS SU5HX0ZfRVhBQ1RfU1opIHsNCj4gIAkJci0+c2l6ZSA9IHJ0ZV9hbGlnbjMycG93Mihjb3VudCAr IDEpOw0KPiBAQCAtMTI2LDggKzIwNiwxMiBAQCBydGVfcmluZ19pbml0KHN0cnVjdCBydGVfcmlu ZyAqciwgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgY291bnQsDQo+ICAJCXItPm1hc2sgPSBj b3VudCAtIDE7DQo+ICAJCXItPmNhcGFjaXR5ID0gci0+bWFzazsNCj4gIAl9DQo+IC0Jci0+cHJv ZC5oZWFkID0gci0+Y29ucy5oZWFkID0gMDsNCj4gLQlyLT5wcm9kLnRhaWwgPSByLT5jb25zLnRh aWwgPSAwOw0KPiArDQo+ICsJLyogc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBoZWFkLXRhaWwgZGlz dGFuY2UgKi8NCj4gKwlpZiAoZmxhZ3MgJiBSSU5HX0ZfTVBfUlRTX0VOUSkNCj4gKwkJcnRlX3Jp bmdfc2V0X3Byb2RfaHRkX21heChyLCByLT5jYXBhY2l0eSAvIEhURF9NQVhfREVGKTsNCj4gKwlp ZiAoZmxhZ3MgJiBSSU5HX0ZfTUNfUlRTX0RFUSkNCj4gKwkJcnRlX3Jpbmdfc2V0X2NvbnNfaHRk X21heChyLCByLT5jYXBhY2l0eSAvIEhURF9NQVhfREVGKTsNCj4gDQo+ICAJcmV0dXJuIDA7DQo+ ICB9DQo+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmcuaCBiL2xpYi9saWJy dGVfcmluZy9ydGVfcmluZy5oDQo+IGluZGV4IGQ0Nzc1YTA2My4uMmI0MmEwMjExIDEwMDY0NA0K PiAtLS0gYS9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmcuaA0KPiArKysgYi9saWIvbGlicnRlX3Jp bmcvcnRlX3JpbmcuaA0KPiBAQCAtNjUsMTAgKzY1LDEzIEBAIGVudW0gcnRlX3JpbmdfcXVldWVf YmVoYXZpb3Igew0KPiAgZW51bSBydGVfcmluZ19zeW5jX3R5cGUgew0KPiAgCVJURV9SSU5HX1NZ TkNfTVQsICAgICAvKio8IG11bHRpLXRocmVhZCBzYWZlIChkZWZhdWx0IG1vZGUpICovDQo+ICAJ UlRFX1JJTkdfU1lOQ19TVCwgICAgIC8qKjwgc2luZ2xlIHRocmVhZCBvbmx5ICovDQo+ICsjaWZk ZWYgQUxMT1dfRVhQRVJJTUVOVEFMX0FQSQ0KPiArCVJURV9SSU5HX1NZTkNfTVRfUlRTLCAvKio8 IG11bHRpLXRocmVhZCByZWxheGVkIHRhaWwgc3luYyAqLw0KPiArI2VuZGlmDQo+ICB9Ow0KPiAN Cj4gIC8qKg0KPiAtICogc3RydWN0dXJlIHRvIGhvbGQgYSBwYWlyIG9mIGhlYWQvdGFpbCB2YWx1 ZXMgYW5kIG90aGVyIG1ldGFkYXRhLg0KPiArICogc3RydWN0dXJlcyB0byBob2xkIGEgcGFpciBv ZiBoZWFkL3RhaWwgdmFsdWVzIGFuZCBvdGhlciBtZXRhZGF0YS4NCj4gICAqIERlcGVuZGluZyBv biBzeW5jX3R5cGUgZm9ybWF0IG9mIHRoYXQgc3RydWN0dXJlIG1pZ2h0IGJlIGRpZmZlcmVudCwN Cj4gICAqIGJ1dCBvZmZzZXQgZm9yICpzeW5jX3R5cGUqIGFuZCAqdGFpbCogdmFsdWVzIHNob3Vs ZCByZW1haW4gdGhlIHNhbWUuDQo+ICAgKi8NCj4gQEAgLTg0LDYgKzg3LDIxIEBAIHN0cnVjdCBy dGVfcmluZ19oZWFkdGFpbCB7DQo+ICAJfTsNCj4gIH07DQo+IA0KPiArdW5pb24gcnRlX3Jpbmdf aHRfcG9zY250IHsNCj4gKwl1aW50NjRfdCByYXc7DQo+ICsJc3RydWN0IHsNCj4gKwkJdWludDMy X3QgY250OyAvKio8IGhlYWQvdGFpbCByZWZlcmVuY2UgY291bnRlciAqLw0KPiArCQl1aW50MzJf dCBwb3M7IC8qKjwgaGVhZC90YWlsIHBvc2l0aW9uICovDQo+ICsJfSB2YWw7DQo+ICt9Ow0KPiAr DQo+ICtzdHJ1Y3QgcnRlX3JpbmdfcnRzX2hlYWR0YWlsIHsNCj4gKwl2b2xhdGlsZSB1bmlvbiBy dGVfcmluZ19odF9wb3NjbnQgdGFpbDsNCj4gKwllbnVtIHJ0ZV9yaW5nX3N5bmNfdHlwZSBzeW5j X3R5cGU7ICAvKio8IHN5bmMgdHlwZSBvZiBwcm9kL2NvbnMgKi8NCj4gKwl1aW50MzJfdCBodGRf bWF4OyAgIC8qKjwgbWF4IGFsbG93ZWQgZGlzdGFuY2UgYmV0d2VlbiBoZWFkL3RhaWwgKi8NCj4g Kwl2b2xhdGlsZSB1bmlvbiBydGVfcmluZ19odF9wb3NjbnQgaGVhZDsNCj4gK307DQo+ICsNCj4g IC8qKg0KPiAgICogQW4gUlRFIHJpbmcgc3RydWN0dXJlLg0KPiAgICoNCj4gQEAgLTExMSwxMSAr MTI5LDIxIEBAIHN0cnVjdCBydGVfcmluZyB7DQo+ICAJY2hhciBwYWQwIF9fcnRlX2NhY2hlX2Fs aWduZWQ7IC8qKjwgZW1wdHkgY2FjaGUgbGluZSAqLw0KPiANCj4gIAkvKiogUmluZyBwcm9kdWNl ciBzdGF0dXMuICovDQo+IC0Jc3RydWN0IHJ0ZV9yaW5nX2hlYWR0YWlsIHByb2QgX19ydGVfY2Fj aGVfYWxpZ25lZDsNCj4gKwlSVEVfU1REX0MxMQ0KPiArCXVuaW9uIHsNCj4gKwkJc3RydWN0IHJ0 ZV9yaW5nX2hlYWR0YWlsIHByb2Q7DQo+ICsJCXN0cnVjdCBydGVfcmluZ19ydHNfaGVhZHRhaWwg cnRzX3Byb2Q7DQo+ICsJfSAgX19ydGVfY2FjaGVfYWxpZ25lZDsNCj4gKw0KPiAgCWNoYXIgcGFk MSBfX3J0ZV9jYWNoZV9hbGlnbmVkOyAvKio8IGVtcHR5IGNhY2hlIGxpbmUgKi8NCj4gDQo+ICAJ LyoqIFJpbmcgY29uc3VtZXIgc3RhdHVzLiAqLw0KPiAtCXN0cnVjdCBydGVfcmluZ19oZWFkdGFp bCBjb25zIF9fcnRlX2NhY2hlX2FsaWduZWQ7DQo+ICsJUlRFX1NURF9DMTENCj4gKwl1bmlvbiB7 DQo+ICsJCXN0cnVjdCBydGVfcmluZ19oZWFkdGFpbCBjb25zOw0KPiArCQlzdHJ1Y3QgcnRlX3Jp bmdfcnRzX2hlYWR0YWlsIHJ0c19jb25zOw0KPiArCX0gIF9fcnRlX2NhY2hlX2FsaWduZWQ7DQo+ ICsNCj4gIAljaGFyIHBhZDIgX19ydGVfY2FjaGVfYWxpZ25lZDsgLyoqPCBlbXB0eSBjYWNoZSBs aW5lICovDQo+ICB9Ow0KPiANCj4gQEAgLTEzMiw2ICsxNjAsOSBAQCBzdHJ1Y3QgcnRlX3Jpbmcg ew0KPiAgI2RlZmluZSBSSU5HX0ZfRVhBQ1RfU1ogMHgwMDA0DQo+ICAjZGVmaW5lIFJURV9SSU5H X1NaX01BU0sgICgweDdmZmZmZmZmVSkgLyoqPCBSaW5nIHNpemUgbWFzayAqLw0KPiANCj4gKyNk ZWZpbmUgUklOR19GX01QX1JUU19FTlEgMHgwMDA4IC8qKjwgVGhlIGRlZmF1bHQgZW5xdWV1ZSBp cyAiTVAgUlRTIi4gKi8NCj4gKyNkZWZpbmUgUklOR19GX01DX1JUU19ERVEgMHgwMDEwIC8qKjwg VGhlIGRlZmF1bHQgZGVxdWV1ZSBpcyAiTUMgUlRTIi4gKi8NCj4gKw0KPiAgI2RlZmluZSBfX0lT X1NQIFJURV9SSU5HX1NZTkNfU1QNCj4gICNkZWZpbmUgX19JU19NUCBSVEVfUklOR19TWU5DX01U DQo+ICAjZGVmaW5lIF9fSVNfU0MgUlRFX1JJTkdfU1lOQ19TVA0KPiBAQCAtNDYxLDYgKzQ5Miwx MCBAQCBydGVfcmluZ19zcF9lbnF1ZXVlX2J1bGsoc3RydWN0IHJ0ZV9yaW5nICpyLCB2b2lkICog Y29uc3QgKm9ial90YWJsZSwNCj4gIAkJCVJURV9SSU5HX1NZTkNfU1QsIGZyZWVfc3BhY2UpOw0K PiAgfQ0KPiANCj4gKyNpZmRlZiBBTExPV19FWFBFUklNRU5UQUxfQVBJDQo+ICsjaW5jbHVkZSA8 cnRlX3JpbmdfcnRzLmg+DQo+ICsjZW5kaWYNCj4gKw0KPiAgLyoqDQo+ICAgKiBFbnF1ZXVlIHNl dmVyYWwgb2JqZWN0cyBvbiBhIHJpbmcuDQo+ICAgKg0KPiBAQCAtNDg0LDggKzUxOSwyMSBAQCBz dGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gIHJ0ZV9yaW5nX2VucXVl dWVfYnVsayhzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQgKiBjb25zdCAqb2JqX3RhYmxlLA0KPiAg CQkgICAgICB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50ICpmcmVlX3NwYWNlKQ0KPiAgew0K PiAtCXJldHVybiBfX3J0ZV9yaW5nX2RvX2VucXVldWUociwgb2JqX3RhYmxlLCBuLCBSVEVfUklO R19RVUVVRV9GSVhFRCwNCj4gLQkJCXItPnByb2Quc3luY190eXBlLCBmcmVlX3NwYWNlKTsNCj4g Kwlzd2l0Y2ggKHItPnByb2Quc3luY190eXBlKSB7DQo+ICsJY2FzZSBSVEVfUklOR19TWU5DX01U Og0KPiArCQlyZXR1cm4gcnRlX3JpbmdfbXBfZW5xdWV1ZV9idWxrKHIsIG9ial90YWJsZSwgbiwg ZnJlZV9zcGFjZSk7DQo+ICsJY2FzZSBSVEVfUklOR19TWU5DX1NUOg0KPiArCQlyZXR1cm4gcnRl X3Jpbmdfc3BfZW5xdWV1ZV9idWxrKHIsIG9ial90YWJsZSwgbiwgZnJlZV9zcGFjZSk7DQo+ICsj aWZkZWYgQUxMT1dfRVhQRVJJTUVOVEFMX0FQSQ0KPiArCWNhc2UgUlRFX1JJTkdfU1lOQ19NVF9S VFM6DQo+ICsJCXJldHVybiBydGVfcmluZ19tcF9ydHNfZW5xdWV1ZV9idWxrKHIsIG9ial90YWJs ZSwgbiwNCj4gKwkJCWZyZWVfc3BhY2UpOw0KPiArI2VuZGlmDQo+ICsJfQ0KPiArDQo+ICsJLyog dmFsaWQgcmluZyBzaG91bGQgbmV2ZXIgcmVhY2ggdGhpcyBwb2ludCAqLw0KPiArCVJURV9BU1NF UlQoMCk7DQo+ICsJcmV0dXJuIDA7DQo+ICB9DQo+IA0KPiAgLyoqDQo+IEBAIC02MTksOCArNjY3 LDIwIEBAIHN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiAgcnRlX3Jp bmdfZGVxdWV1ZV9idWxrKHN0cnVjdCBydGVfcmluZyAqciwgdm9pZCAqKm9ial90YWJsZSwgdW5z aWduZWQgaW50IG4sDQo+ICAJCXVuc2lnbmVkIGludCAqYXZhaWxhYmxlKQ0KPiAgew0KPiAtCXJl dHVybiBfX3J0ZV9yaW5nX2RvX2RlcXVldWUociwgb2JqX3RhYmxlLCBuLCBSVEVfUklOR19RVUVV RV9GSVhFRCwNCj4gLQkJCQlyLT5jb25zLnN5bmNfdHlwZSwgYXZhaWxhYmxlKTsNCj4gKwlzd2l0 Y2ggKHItPmNvbnMuc3luY190eXBlKSB7DQo+ICsJY2FzZSBSVEVfUklOR19TWU5DX01UOg0KPiAr CQlyZXR1cm4gcnRlX3JpbmdfbWNfZGVxdWV1ZV9idWxrKHIsIG9ial90YWJsZSwgbiwgYXZhaWxh YmxlKTsNCj4gKwljYXNlIFJURV9SSU5HX1NZTkNfU1Q6DQo+ICsJCXJldHVybiBydGVfcmluZ19z Y19kZXF1ZXVlX2J1bGsociwgb2JqX3RhYmxlLCBuLCBhdmFpbGFibGUpOw0KPiArI2lmZGVmIEFM TE9XX0VYUEVSSU1FTlRBTF9BUEkNCj4gKwljYXNlIFJURV9SSU5HX1NZTkNfTVRfUlRTOg0KPiAr CQlyZXR1cm4gcnRlX3JpbmdfbWNfcnRzX2RlcXVldWVfYnVsayhyLCBvYmpfdGFibGUsIG4sIGF2 YWlsYWJsZSk7DQo+ICsjZW5kaWYNCj4gKwl9DQo+ICsNCj4gKwkvKiB2YWxpZCByaW5nIHNob3Vs ZCBuZXZlciByZWFjaCB0aGlzIHBvaW50ICovDQo+ICsJUlRFX0FTU0VSVCgwKTsNCj4gKwlyZXR1 cm4gMDsNCj4gIH0NCj4gDQo+ICAvKioNCj4gQEAgLTk0MCw4ICsxMDAwLDIxIEBAIHN0YXRpYyBf X3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVkDQo+ICBydGVfcmluZ19lbnF1ZXVlX2J1cnN0KHN0 cnVjdCBydGVfcmluZyAqciwgdm9pZCAqIGNvbnN0ICpvYmpfdGFibGUsDQo+ICAJCSAgICAgIHVu c2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgKmZyZWVfc3BhY2UpDQo+ICB7DQo+IC0JcmV0dXJu IF9fcnRlX3JpbmdfZG9fZW5xdWV1ZShyLCBvYmpfdGFibGUsIG4sIFJURV9SSU5HX1FVRVVFX1ZB UklBQkxFLA0KPiAtCQkJci0+cHJvZC5zeW5jX3R5cGUsIGZyZWVfc3BhY2UpOw0KPiArCXN3aXRj aCAoci0+cHJvZC5zeW5jX3R5cGUpIHsNCj4gKwljYXNlIFJURV9SSU5HX1NZTkNfTVQ6DQo+ICsJ CXJldHVybiBydGVfcmluZ19tcF9lbnF1ZXVlX2J1cnN0KHIsIG9ial90YWJsZSwgbiwgZnJlZV9z cGFjZSk7DQo+ICsJY2FzZSBSVEVfUklOR19TWU5DX1NUOg0KPiArCQlyZXR1cm4gcnRlX3Jpbmdf c3BfZW5xdWV1ZV9idXJzdChyLCBvYmpfdGFibGUsIG4sIGZyZWVfc3BhY2UpOw0KPiArI2lmZGVm IEFMTE9XX0VYUEVSSU1FTlRBTF9BUEkNCj4gKwljYXNlIFJURV9SSU5HX1NZTkNfTVRfUlRTOg0K PiArCQlyZXR1cm4gcnRlX3JpbmdfbXBfcnRzX2VucXVldWVfYnVyc3Qociwgb2JqX3RhYmxlLCBu LA0KPiArCQkJZnJlZV9zcGFjZSk7DQo+ICsjZW5kaWYNCj4gKwl9DQo+ICsNCj4gKwkvKiB2YWxp ZCByaW5nIHNob3VsZCBuZXZlciByZWFjaCB0aGlzIHBvaW50ICovDQo+ICsJUlRFX0FTU0VSVCgw KTsNCj4gKwlyZXR1cm4gMDsNCj4gIH0NCj4gDQo+ICAvKioNCj4gQEAgLTEwMjAsOSArMTA5Mywy MSBAQCBzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZA0KPiAgcnRlX3JpbmdfZGVx dWV1ZV9idXJzdChzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQgKipvYmpfdGFibGUsDQo+ICAJCXVu c2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgKmF2YWlsYWJsZSkNCj4gIHsNCj4gLQlyZXR1cm4g X19ydGVfcmluZ19kb19kZXF1ZXVlKHIsIG9ial90YWJsZSwgbiwNCj4gLQkJCQlSVEVfUklOR19R VUVVRV9WQVJJQUJMRSwNCj4gLQkJCQlyLT5jb25zLnN5bmNfdHlwZSwgYXZhaWxhYmxlKTsNCj4g Kwlzd2l0Y2ggKHItPmNvbnMuc3luY190eXBlKSB7DQo+ICsJY2FzZSBSVEVfUklOR19TWU5DX01U Og0KPiArCQlyZXR1cm4gcnRlX3JpbmdfbWNfZGVxdWV1ZV9idXJzdChyLCBvYmpfdGFibGUsIG4s IGF2YWlsYWJsZSk7DQo+ICsJY2FzZSBSVEVfUklOR19TWU5DX1NUOg0KPiArCQlyZXR1cm4gcnRl X3Jpbmdfc2NfZGVxdWV1ZV9idXJzdChyLCBvYmpfdGFibGUsIG4sIGF2YWlsYWJsZSk7DQo+ICsj aWZkZWYgQUxMT1dfRVhQRVJJTUVOVEFMX0FQSQ0KPiArCWNhc2UgUlRFX1JJTkdfU1lOQ19NVF9S VFM6DQo+ICsJCXJldHVybiBydGVfcmluZ19tY19ydHNfZGVxdWV1ZV9idXJzdChyLCBvYmpfdGFi bGUsIG4sDQo+ICsJCQlhdmFpbGFibGUpOw0KPiArI2VuZGlmDQo+ICsJfQ0KPiArDQo+ICsJLyog dmFsaWQgcmluZyBzaG91bGQgbmV2ZXIgcmVhY2ggdGhpcyBwb2ludCAqLw0KPiArCVJURV9BU1NF UlQoMCk7DQo+ICsJcmV0dXJuIDA7DQo+ICB9DQo+IA0KPiAgI2lmZGVmIF9fY3BsdXNwbHVzDQo+ IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfZWxlbS5oIGIvbGliL2xpYnJ0 ZV9yaW5nL3J0ZV9yaW5nX2VsZW0uaA0KPiBpbmRleCAyOGY5ODM2ZTYuLjVkZTA4NTBkYyAxMDA2 NDQNCj4gLS0tIGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2VsZW0uaA0KPiArKysgYi9saWIv bGlicnRlX3JpbmcvcnRlX3JpbmdfZWxlbS5oDQo+IEBAIC01NDIsNiArNTQyLDggQEAgcnRlX3Jp bmdfc3BfZW5xdWV1ZV9idWxrX2VsZW0oc3RydWN0IHJ0ZV9yaW5nICpyLCBjb25zdCB2b2lkICpv YmpfdGFibGUsDQo+ICAJCQlSVEVfUklOR19RVUVVRV9GSVhFRCwgX19JU19TUCwgZnJlZV9zcGFj ZSk7DQo+ICB9DQo+IA0KPiArI2luY2x1ZGUgPHJ0ZV9yaW5nX3J0c19lbGVtLmg+DQo+ICsNCj4g IC8qKg0KPiAgICogRW5xdWV1ZSBzZXZlcmFsIG9iamVjdHMgb24gYSByaW5nLg0KPiAgICoNCj4g QEAgLTU3MSw2ICs1NzMsMjYgQEAgcnRlX3JpbmdfZW5xdWV1ZV9idWxrX2VsZW0oc3RydWN0IHJ0 ZV9yaW5nICpyLCBjb25zdCB2b2lkICpvYmpfdGFibGUsDQo+ICB7DQo+ICAJcmV0dXJuIF9fcnRl X3JpbmdfZG9fZW5xdWV1ZV9lbGVtKHIsIG9ial90YWJsZSwgZXNpemUsIG4sDQo+ICAJCQlSVEVf UklOR19RVUVVRV9GSVhFRCwgci0+cHJvZC5zeW5jX3R5cGUsIGZyZWVfc3BhY2UpOw0KPiArDQo+ ICsJc3dpdGNoIChyLT5wcm9kLnN5bmNfdHlwZSkgew0KPiArCWNhc2UgUlRFX1JJTkdfU1lOQ19N VDoNCj4gKwkJcmV0dXJuIHJ0ZV9yaW5nX21wX2VucXVldWVfYnVsa19lbGVtKHIsIG9ial90YWJs ZSwgZXNpemUsIG4sDQo+ICsJCQlmcmVlX3NwYWNlKTsNCj4gKwljYXNlIFJURV9SSU5HX1NZTkNf U1Q6DQo+ICsJCXJldHVybiBydGVfcmluZ19zcF9lbnF1ZXVlX2J1bGtfZWxlbShyLCBvYmpfdGFi bGUsIGVzaXplLCBuLA0KPiArCQkJZnJlZV9zcGFjZSk7DQo+ICsjaWZkZWYgQUxMT1dfRVhQRVJJ TUVOVEFMX0FQSQ0KPiArCWNhc2UgUlRFX1JJTkdfU1lOQ19NVF9SVFM6DQo+ICsJCXJldHVybiBy dGVfcmluZ19tcF9ydHNfZW5xdWV1ZV9idWxrX2VsZW0ociwgb2JqX3RhYmxlLCBlc2l6ZSwgbiwN Cj4gKwkJCWZyZWVfc3BhY2UpOw0KPiArI2VuZGlmDQo+ICsJfQ0KPiArDQo+ICsJLyogdmFsaWQg cmluZyBzaG91bGQgbmV2ZXIgcmVhY2ggdGhpcyBwb2ludCAqLw0KPiArCVJURV9BU1NFUlQoMCk7 DQo+ICsJaWYgKGZyZWVfc3BhY2UgIT0gTlVMTCkNCj4gKwkJKmZyZWVfc3BhY2UgPSAwOw0KPiAr CXJldHVybiAwOw0KPiAgfQ0KPiANCj4gIC8qKg0KPiBAQCAtNzMzLDggKzc1NSwyNSBAQCBzdGF0 aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gIHJ0ZV9yaW5nX2RlcXVldWVf YnVsa19lbGVtKHN0cnVjdCBydGVfcmluZyAqciwgdm9pZCAqb2JqX3RhYmxlLA0KPiAgCQl1bnNp Z25lZCBpbnQgZXNpemUsIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgKmF2YWlsYWJsZSkN Cj4gIHsNCj4gLQlyZXR1cm4gX19ydGVfcmluZ19kb19kZXF1ZXVlX2VsZW0ociwgb2JqX3RhYmxl LCBlc2l6ZSwgbiwNCj4gLQkJCVJURV9SSU5HX1FVRVVFX0ZJWEVELCByLT5jb25zLnN5bmNfdHlw ZSwgYXZhaWxhYmxlKTsNCj4gKwlzd2l0Y2ggKHItPmNvbnMuc3luY190eXBlKSB7DQo+ICsJY2Fz ZSBSVEVfUklOR19TWU5DX01UOg0KPiArCQlyZXR1cm4gcnRlX3JpbmdfbWNfZGVxdWV1ZV9idWxr X2VsZW0ociwgb2JqX3RhYmxlLCBlc2l6ZSwgbiwNCj4gKwkJCWF2YWlsYWJsZSk7DQo+ICsJY2Fz ZSBSVEVfUklOR19TWU5DX1NUOg0KPiArCQlyZXR1cm4gcnRlX3Jpbmdfc2NfZGVxdWV1ZV9idWxr X2VsZW0ociwgb2JqX3RhYmxlLCBlc2l6ZSwgbiwNCj4gKwkJCWF2YWlsYWJsZSk7DQo+ICsjaWZk ZWYgQUxMT1dfRVhQRVJJTUVOVEFMX0FQSQ0KPiArCWNhc2UgUlRFX1JJTkdfU1lOQ19NVF9SVFM6 DQo+ICsJCXJldHVybiBydGVfcmluZ19tY19ydHNfZGVxdWV1ZV9idWxrX2VsZW0ociwgb2JqX3Rh YmxlLCBlc2l6ZSwNCj4gKwkJCW4sIGF2YWlsYWJsZSk7DQo+ICsjZW5kaWYNCj4gKwl9DQo+ICsN Cj4gKwkvKiB2YWxpZCByaW5nIHNob3VsZCBuZXZlciByZWFjaCB0aGlzIHBvaW50ICovDQo+ICsJ UlRFX0FTU0VSVCgwKTsNCj4gKwlpZiAoYXZhaWxhYmxlICE9IE5VTEwpDQo+ICsJCSphdmFpbGFi bGUgPSAwOw0KPiArCXJldHVybiAwOw0KPiAgfQ0KPiANCj4gIC8qKg0KPiBAQCAtOTAxLDggKzk0 MCwyNSBAQCBzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZA0KPiAgcnRlX3Jpbmdf ZW5xdWV1ZV9idXJzdF9lbGVtKHN0cnVjdCBydGVfcmluZyAqciwgY29uc3Qgdm9pZCAqb2JqX3Rh YmxlLA0KPiAgCQl1bnNpZ25lZCBpbnQgZXNpemUsIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBp bnQgKmZyZWVfc3BhY2UpDQo+ICB7DQo+IC0JcmV0dXJuIF9fcnRlX3JpbmdfZG9fZW5xdWV1ZV9l bGVtKHIsIG9ial90YWJsZSwgZXNpemUsIG4sDQo+IC0JCQlSVEVfUklOR19RVUVVRV9WQVJJQUJM RSwgci0+cHJvZC5zeW5jX3R5cGUsIGZyZWVfc3BhY2UpOw0KPiArCXN3aXRjaCAoci0+cHJvZC5z eW5jX3R5cGUpIHsNCj4gKwljYXNlIFJURV9SSU5HX1NZTkNfTVQ6DQo+ICsJCXJldHVybiBydGVf cmluZ19tcF9lbnF1ZXVlX2J1cnN0X2VsZW0ociwgb2JqX3RhYmxlLCBlc2l6ZSwgbiwNCj4gKwkJ CWZyZWVfc3BhY2UpOw0KPiArCWNhc2UgUlRFX1JJTkdfU1lOQ19TVDoNCj4gKwkJcmV0dXJuIHJ0 ZV9yaW5nX3NwX2VucXVldWVfYnVyc3RfZWxlbShyLCBvYmpfdGFibGUsIGVzaXplLCBuLA0KPiAr CQkJZnJlZV9zcGFjZSk7DQo+ICsjaWZkZWYgQUxMT1dfRVhQRVJJTUVOVEFMX0FQSQ0KPiArCWNh c2UgUlRFX1JJTkdfU1lOQ19NVF9SVFM6DQo+ICsJCXJldHVybiBydGVfcmluZ19tcF9ydHNfZW5x dWV1ZV9idXJzdF9lbGVtKHIsIG9ial90YWJsZSwgZXNpemUsDQo+ICsJCQluLCBmcmVlX3NwYWNl KTsNCj4gKyNlbmRpZg0KPiArCX0NCj4gKw0KPiArCS8qIHZhbGlkIHJpbmcgc2hvdWxkIG5ldmVy IHJlYWNoIHRoaXMgcG9pbnQgKi8NCj4gKwlSVEVfQVNTRVJUKDApOw0KPiArCWlmIChmcmVlX3Nw YWNlICE9IE5VTEwpDQo+ICsJCSpmcmVlX3NwYWNlID0gMDsNCj4gKwlyZXR1cm4gMDsNCj4gIH0N Cj4gDQo+ICAvKioNCj4gQEAgLTk5Myw5ICsxMDQ5LDI1IEBAIHN0YXRpYyBfX3J0ZV9hbHdheXNf aW5saW5lIHVuc2lnbmVkIGludA0KPiAgcnRlX3JpbmdfZGVxdWV1ZV9idXJzdF9lbGVtKHN0cnVj dCBydGVfcmluZyAqciwgdm9pZCAqb2JqX3RhYmxlLA0KPiAgCQl1bnNpZ25lZCBpbnQgZXNpemUs IHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgKmF2YWlsYWJsZSkNCj4gIHsNCj4gLQlyZXR1 cm4gX19ydGVfcmluZ19kb19kZXF1ZXVlX2VsZW0ociwgb2JqX3RhYmxlLCBlc2l6ZSwgbiwNCj4g LQkJCQlSVEVfUklOR19RVUVVRV9WQVJJQUJMRSwNCj4gLQkJCQlyLT5jb25zLnN5bmNfdHlwZSwg YXZhaWxhYmxlKTsNCj4gKwlzd2l0Y2ggKHItPmNvbnMuc3luY190eXBlKSB7DQo+ICsJY2FzZSBS VEVfUklOR19TWU5DX01UOg0KPiArCQlyZXR1cm4gcnRlX3JpbmdfbWNfZGVxdWV1ZV9idXJzdF9l bGVtKHIsIG9ial90YWJsZSwgZXNpemUsIG4sDQo+ICsJCQlhdmFpbGFibGUpOw0KPiArCWNhc2Ug UlRFX1JJTkdfU1lOQ19TVDoNCj4gKwkJcmV0dXJuIHJ0ZV9yaW5nX3NjX2RlcXVldWVfYnVyc3Rf ZWxlbShyLCBvYmpfdGFibGUsIGVzaXplLCBuLA0KPiArCQkJYXZhaWxhYmxlKTsNCj4gKyNpZmRl ZiBBTExPV19FWFBFUklNRU5UQUxfQVBJDQo+ICsJY2FzZSBSVEVfUklOR19TWU5DX01UX1JUUzoN Cj4gKwkJcmV0dXJuIHJ0ZV9yaW5nX21jX3J0c19kZXF1ZXVlX2J1cnN0X2VsZW0ociwgb2JqX3Rh YmxlLCBlc2l6ZSwNCj4gKwkJCW4sIGF2YWlsYWJsZSk7DQo+ICsjZW5kaWYNCj4gKwl9DQo+ICsN Cj4gKwkvKiB2YWxpZCByaW5nIHNob3VsZCBuZXZlciByZWFjaCB0aGlzIHBvaW50ICovDQo+ICsJ UlRFX0FTU0VSVCgwKTsNCj4gKwlpZiAoYXZhaWxhYmxlICE9IE5VTEwpDQo+ICsJCSphdmFpbGFi bGUgPSAwOw0KPiArCXJldHVybiAwOw0KPiAgfQ0KPiANCj4gICNpZmRlZiBfX2NwbHVzcGx1cw0K PiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3J0cy5oIGIvbGliL2xpYnJ0 ZV9yaW5nL3J0ZV9yaW5nX3J0cy5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAw MDAwMDAwMC4uMTg0MDRmZTQ4DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvbGliL2xpYnJ0ZV9y aW5nL3J0ZV9yaW5nX3J0cy5oDQo+IEBAIC0wLDAgKzEsMzE2IEBADQo+ICsvKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ICsgKg0KPiArICogQ29weXJpZ2h0IChjKSAy MDEwLTIwMTcgSW50ZWwgQ29ycG9yYXRpb24NCj4gKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5 IEtpcCBNYWN5IGttYWN5QGZyZWVic2Qub3JnDQo+ICsgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0K PiArICogRGVyaXZlZCBmcm9tIEZyZWVCU0QncyBidWZyaW5nLmgNCj4gKyAqIFVzZWQgYXMgQlNE LTMgTGljZW5zZWQgd2l0aCBwZXJtaXNzaW9uIGZyb20gS2lwIE1hY3kuDQo+ICsgKi8NCj4gKw0K PiArI2lmbmRlZiBfUlRFX1JJTkdfUlRTX0hfDQo+ICsjZGVmaW5lIF9SVEVfUklOR19SVFNfSF8N Cj4gKw0KPiArLyoqDQo+ICsgKiBAZmlsZSBydGVfcmluZ19ydHMuaA0KPiArICogQGIgRVhQRVJJ TUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+ICsgKiBJ dCBpcyBub3QgcmVjb21tZW5kZWQgdG8gaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHkuDQo+ICsg KiBQbGVhc2UgaW5jbHVkZSA8cnRlX3JpbmcuaD4gaW5zdGVhZC4NCj4gKyAqDQo+ICsgKiBDb250 YWlucyBmdW5jdGlvbnMgZm9yIFJlbGF4ZWQgVGFpbCBTeW5jIChSVFMpIHJpbmcgbW9kZS4NCj4g KyAqIFRoZSBtYWluIGlkZWEgcmVtYWlucyB0aGUgc2FtZSBhcyBmb3Igb3VyIG9yaWdpbmFsIE1Q L01DIHN5bmNocm9uaXphdGlvbg0KPiArICogbWVjaGFuaXNtLg0KPiArICogVGhlIG1haW4gZGlm ZmVyZW5jZSBpcyB0aGF0IHRhaWwgdmFsdWUgaXMgaW5jcmVhc2VkIG5vdA0KPiArICogYnkgZXZl cnkgdGhyZWFkIHRoYXQgZmluaXNoZWQgZW5xdWV1ZS9kZXF1ZXVlLA0KPiArICogYnV0IG9ubHkg YnkgdGhlIGxhc3Qgb25lIGRvaW5nIGVucXVldWUvZGVxdWV1ZS4NCj4gKyAqIFRoYXQgYWxsb3dz IHRocmVhZHMgdG8gc2tpcCBzcGlubmluZyBvbiB0YWlsIHZhbHVlLA0KPiArICogbGVhdmluZyBh Y3R1YWwgdGFpbCB2YWx1ZSBjaGFuZ2UgdG8gbGFzdCB0aHJlYWQgaW4gdGhlIHVwZGF0ZSBxdWV1 ZS4NCj4gKyAqIFJUUyByZXF1aXJlcyAyIDY0LWJpdCBDQVMgZm9yIGVhY2ggZW5xdWV1ZSgvZGVx dWV1ZSkgb3BlcmF0aW9uOg0KPiArICogb25lIGZvciBoZWFkIHVwZGF0ZSwgc2Vjb25kIGZvciB0 YWlsIHVwZGF0ZS4NCj4gKyAqIEFzIGEgZ2FpbiBpdCBhbGxvd3MgdGhyZWFkIHRvIGF2b2lkIHNw aW5uaW5nL3dhaXRpbmcgb24gdGFpbCB2YWx1ZS4NCj4gKyAqIEluIGNvbXBhcmlzaW9uIG9yaWdp bmFsIE1QL01DIGFsZ29yaXRobSByZXF1aXJlcyBvbmUgMzItYml0IENBUw0KPiArICogZm9yIGhl YWQgdXBkYXRlIGFuZCB3YWl0aW5nL3NwaW5uaW5nIG9uIHRhaWwgdmFsdWUuDQo+ICsgKg0KPiAr ICogQnJpZWYgb3V0bGluZToNCj4gKyAqICAtIGludHJvZHVjZSByZWZjbnQgZm9yIGJvdGggaGVh ZCBhbmQgdGFpbC4NCj4gKyAqICAtIGluY3JlbWVudCBoZWFkLnJlZmNudCBmb3IgZWFjaCBoZWFk LnZhbHVlIHVwZGF0ZQ0KPiArICogIC0gd3JpdGUgaGVhZDp2YWx1ZSBhbmQgaGVhZDpyZWZjbnQg YXRvbWljYWxseSAoNjQtYml0IENBUykNCj4gKyAqICAtIG1vdmUgdGFpbC52YWx1ZSBhaGVhZCBv bmx5IHdoZW4gdGFpbC5yZWZjbnQgKyAxID09IGhlYWQucmVmY250DQo+ICsgKiAgLSBpbmNyZW1l bnQgdGFpbC5yZWZjbnQgd2hlbiBlYWNoIGVucXVldWUvZGVxdWV1ZSBvcCBmaW5pc2hlcw0KPiAr ICogICAgKG5vIG1hdHRlciBpcyB0YWlsOnZhbHVlIGdvaW5nIHRvIGNoYW5nZSBvciBub3QpDQo+ ICsgKiAgLSB3cml0ZSB0YWlsLnZhbHVlIGFuZCB0YWlsLnJlY250IGF0b21pY2FsbHkgKDY0LWJp dCBDQVMpDQo+ICsgKg0KPiArICogVG8gYXZvaWQgcHJvZHVjZXIvY29uc3VtZXIgc3RhcnZhdGlv bjoNCj4gKyAqICAtIGxpbWl0IG1heCBhbGxvd2VkIGRpc3RhbmNlIGJldHdlZW4gaGVhZCBhbmQg dGFpbCB2YWx1ZSAoSFREX01BWCkuDQo+ICsgKiAgICBJLkUuIHRocmVhZCBpcyBhbGxvd2VkIHRv IHByb2NlZWQgd2l0aCBjaGFuZ2luZyBoZWFkLnZhbHVlLA0KPiArICogICAgb25seSB3aGVuOiAg aGVhZC52YWx1ZSAtIHRhaWwudmFsdWUgPD0gSFREX01BWA0KPiArICogSFREX01BWCBpcyBhbiBv cHRpb25hbCBwYXJhbWV0ZXIuDQo+ICsgKiBXaXRoIEhURF9NQVggPT0gMCB3ZSdsbCBoYXZlIGZ1 bGx5IHNlcmlhbGl6ZWQgcmluZyAtDQo+ICsgKiBpLmUuIG9ubHkgb25lIHRocmVhZCBhdCBhIHRp bWUgd2lsbCBiZSBhYmxlIHRvIGVucXVldWUvZGVxdWV1ZQ0KPiArICogdG8vZnJvbSB0aGUgcmlu Zy4NCj4gKyAqIFdpdGggSFREX01BWCA+PSByaW5nLmNhcGFjaXR5IC0gbm8gbGltaXRhdGlvbi4N Cj4gKyAqIEJ5IGRlZmF1bHQgSFREX01BWCA9PSByaW5nLmNhcGFjaXR5IC8gOC4NCj4gKyAqLw0K PiArDQo+ICsjaWZkZWYgX19jcGx1c3BsdXMNCj4gK2V4dGVybiAiQyIgew0KPiArI2VuZGlmDQo+ ICsNCj4gKyNpbmNsdWRlIDxydGVfcmluZ19ydHNfZ2VuZXJpYy5oPg0KPiArDQo+ICsvKioNCj4g KyAqIEBpbnRlcm5hbCBFbnF1ZXVlIHNldmVyYWwgb2JqZWN0cyBvbiB0aGUgUlRTIHJpbmcuDQo+ ICsgKg0KPiArICogQHBhcmFtIHINCj4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSByaW5nIHN0cnVj dHVyZS4NCj4gKyAqIEBwYXJhbSBvYmpfdGFibGUNCj4gKyAqICAgQSBwb2ludGVyIHRvIGEgdGFi bGUgb2Ygdm9pZCAqIHBvaW50ZXJzIChvYmplY3RzKS4NCj4gKyAqIEBwYXJhbSBuDQo+ICsgKiAg IFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBhZGQgaW4gdGhlIHJpbmcgZnJvbSB0aGUgb2JqX3Rh YmxlLg0KPiArICogQHBhcmFtIGJlaGF2aW9yDQo+ICsgKiAgIFJURV9SSU5HX1FVRVVFX0ZJWEVE OiAgICBFbnF1ZXVlIGEgZml4ZWQgbnVtYmVyIG9mIGl0ZW1zIGZyb20gYSByaW5nDQo+ICsgKiAg IFJURV9SSU5HX1FVRVVFX1ZBUklBQkxFOiBFbnF1ZXVlIGFzIG1hbnkgaXRlbXMgYXMgcG9zc2li bGUgZnJvbSByaW5nDQo+ICsgKiBAcGFyYW0gZnJlZV9zcGFjZQ0KPiArICogICByZXR1cm5zIHRo ZSBhbW91bnQgb2Ygc3BhY2UgYWZ0ZXIgdGhlIGVucXVldWUgb3BlcmF0aW9uIGhhcyBmaW5pc2hl ZA0KPiArICogQHJldHVybg0KPiArICogICBBY3R1YWwgbnVtYmVyIG9mIG9iamVjdHMgZW5xdWV1 ZWQuDQo+ICsgKiAgIElmIGJlaGF2aW9yID09IFJURV9SSU5HX1FVRVVFX0ZJWEVELCB0aGlzIHdp bGwgYmUgMCBvciBuIG9ubHkuDQo+ICsgKi8NCj4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5l IHVuc2lnbmVkIGludA0KPiArX19ydGVfcmluZ19kb19ydHNfZW5xdWV1ZShzdHJ1Y3QgcnRlX3Jp bmcgKnIsIHZvaWQgKiBjb25zdCAqb2JqX3RhYmxlLA0KPiArCQl1aW50MzJfdCBuLCBlbnVtIHJ0 ZV9yaW5nX3F1ZXVlX2JlaGF2aW9yIGJlaGF2aW9yLA0KPiArCQl1aW50MzJfdCAqZnJlZV9zcGFj ZSkNCj4gK3sNCj4gKwl1aW50MzJfdCBmcmVlLCBoZWFkOw0KPiArDQo+ICsJbiA9ICBfX3J0ZV9y aW5nX3J0c19tb3ZlX3Byb2RfaGVhZChyLCBuLCBiZWhhdmlvciwgJmhlYWQsICZmcmVlKTsNCj4g Kw0KPiArCWlmIChuICE9IDApIHsNCj4gKwkJRU5RVUVVRV9QVFJTKHIsICZyWzFdLCBoZWFkLCBv YmpfdGFibGUsIG4sIHZvaWQgKik7DQo+ICsJCV9fcnRlX3JpbmdfcnRzX3VwZGF0ZV90YWlsKCZy LT5ydHNfcHJvZCk7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGZyZWVfc3BhY2UgIT0gTlVMTCkNCj4g KwkJKmZyZWVfc3BhY2UgPSBmcmVlIC0gbjsNCj4gKwlyZXR1cm4gbjsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgKiBAaW50ZXJuYWwgRGVxdWV1ZSBzZXZlcmFsIG9iamVjdHMgZnJvbSB0aGUgUlRT IHJpbmcuDQo+ICsgKg0KPiArICogQHBhcmFtIHINCj4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSBy aW5nIHN0cnVjdHVyZS4NCj4gKyAqIEBwYXJhbSBvYmpfdGFibGUNCj4gKyAqICAgQSBwb2ludGVy IHRvIGEgdGFibGUgb2Ygdm9pZCAqIHBvaW50ZXJzIChvYmplY3RzKS4NCj4gKyAqIEBwYXJhbSBu DQo+ICsgKiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBwdWxsIGZyb20gdGhlIHJpbmcuDQo+ ICsgKiBAcGFyYW0gYmVoYXZpb3INCj4gKyAqICAgUlRFX1JJTkdfUVVFVUVfRklYRUQ6ICAgIERl cXVldWUgYSBmaXhlZCBudW1iZXIgb2YgaXRlbXMgZnJvbSBhIHJpbmcNCj4gKyAqICAgUlRFX1JJ TkdfUVVFVUVfVkFSSUFCTEU6IERlcXVldWUgYXMgbWFueSBpdGVtcyBhcyBwb3NzaWJsZSBmcm9t IHJpbmcNCj4gKyAqIEBwYXJhbSBhdmFpbGFibGUNCj4gKyAqICAgcmV0dXJucyB0aGUgbnVtYmVy IG9mIHJlbWFpbmluZyByaW5nIGVudHJpZXMgYWZ0ZXIgdGhlIGRlcXVldWUgaGFzIGZpbmlzaGVk DQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIC0gQWN0dWFsIG51bWJlciBvZiBvYmplY3RzIGRlcXVl dWVkLg0KPiArICogICAgIElmIGJlaGF2aW9yID09IFJURV9SSU5HX1FVRVVFX0ZJWEVELCB0aGlz IHdpbGwgYmUgMCBvciBuIG9ubHkuDQo+ICsgKi8NCj4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5s aW5lIHVuc2lnbmVkIGludA0KPiArX19ydGVfcmluZ19kb19ydHNfZGVxdWV1ZShzdHJ1Y3QgcnRl X3JpbmcgKnIsIHZvaWQgKipvYmpfdGFibGUsDQo+ICsJCXVpbnQzMl90IG4sIGVudW0gcnRlX3Jp bmdfcXVldWVfYmVoYXZpb3IgYmVoYXZpb3IsDQo+ICsJCXVpbnQzMl90ICphdmFpbGFibGUpDQo+ ICt7DQo+ICsJdWludDMyX3QgZW50cmllcywgaGVhZDsNCj4gKw0KPiArCW4gPSBfX3J0ZV9yaW5n X3J0c19tb3ZlX2NvbnNfaGVhZChyLCBuLCBiZWhhdmlvciwgJmhlYWQsICZlbnRyaWVzKTsNCj4g Kw0KPiArCWlmIChuICE9IDApIHsNCj4gKwkJREVRVUVVRV9QVFJTKHIsICZyWzFdLCBoZWFkLCBv YmpfdGFibGUsIG4sIHZvaWQgKik7DQo+ICsJCV9fcnRlX3JpbmdfcnRzX3VwZGF0ZV90YWlsKCZy LT5ydHNfY29ucyk7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGF2YWlsYWJsZSAhPSBOVUxMKQ0KPiAr CQkqYXZhaWxhYmxlID0gZW50cmllcyAtIG47DQo+ICsJcmV0dXJuIG47DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICogRW5xdWV1ZSBzZXZlcmFsIG9iamVjdHMgb24gdGhlIFJUUyByaW5nIChtdWx0 aS1wcm9kdWNlcnMgc2FmZSkuDQo+ICsgKg0KPiArICogQHBhcmFtIHINCj4gKyAqICAgQSBwb2lu dGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gKyAqIEBwYXJhbSBvYmpfdGFibGUNCj4gKyAq ICAgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygdm9pZCAqIHBvaW50ZXJzIChvYmplY3RzKS4NCj4g KyAqIEBwYXJhbSBuDQo+ICsgKiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBhZGQgaW4gdGhl IHJpbmcgZnJvbSB0aGUgb2JqX3RhYmxlLg0KPiArICogQHBhcmFtIGZyZWVfc3BhY2UNCj4gKyAq ICAgaWYgbm9uLU5VTEwsIHJldHVybnMgdGhlIGFtb3VudCBvZiBzcGFjZSBpbiB0aGUgcmluZyBh ZnRlciB0aGUNCj4gKyAqICAgZW5xdWV1ZSBvcGVyYXRpb24gaGFzIGZpbmlzaGVkLg0KPiArICog QHJldHVybg0KPiArICogICBUaGUgbnVtYmVyIG9mIG9iamVjdHMgZW5xdWV1ZWQsIGVpdGhlciAw IG9yIG4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ICtzdGF0aWMgX19ydGVfYWx3 YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gK3J0ZV9yaW5nX21wX3J0c19lbnF1ZXVlX2J1bGso c3RydWN0IHJ0ZV9yaW5nICpyLCB2b2lkICogY29uc3QgKm9ial90YWJsZSwNCj4gKwkJCSB1bnNp Z25lZCBpbnQgbiwgdW5zaWduZWQgaW50ICpmcmVlX3NwYWNlKQ0KPiArew0KPiArCXJldHVybiBf X3J0ZV9yaW5nX2RvX3J0c19lbnF1ZXVlKHIsIG9ial90YWJsZSwgbiwgUlRFX1JJTkdfUVVFVUVf RklYRUQsDQo+ICsJCQlmcmVlX3NwYWNlKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBEZXF1 ZXVlIHNldmVyYWwgb2JqZWN0cyBmcm9tIGFuIFJUUyByaW5nIChtdWx0aS1jb25zdW1lcnMgc2Fm ZSkuDQo+ICsgKg0KPiArICogQHBhcmFtIHINCj4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSByaW5n IHN0cnVjdHVyZS4NCj4gKyAqIEBwYXJhbSBvYmpfdGFibGUNCj4gKyAqICAgQSBwb2ludGVyIHRv IGEgdGFibGUgb2Ygdm9pZCAqIHBvaW50ZXJzIChvYmplY3RzKSB0aGF0IHdpbGwgYmUgZmlsbGVk Lg0KPiArICogQHBhcmFtIG4NCj4gKyAqICAgVGhlIG51bWJlciBvZiBvYmplY3RzIHRvIGRlcXVl dWUgZnJvbSB0aGUgcmluZyB0byB0aGUgb2JqX3RhYmxlLg0KPiArICogQHBhcmFtIGF2YWlsYWJs ZQ0KPiArICogICBJZiBub24tTlVMTCwgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBy aW5nIGVudHJpZXMgYWZ0ZXIgdGhlDQo+ICsgKiAgIGRlcXVldWUgaGFzIGZpbmlzaGVkLg0KPiAr ICogQHJldHVybg0KPiArICogICBUaGUgbnVtYmVyIG9mIG9iamVjdHMgZGVxdWV1ZWQsIGVpdGhl ciAwIG9yIG4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ICtzdGF0aWMgX19ydGVf YWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gK3J0ZV9yaW5nX21jX3J0c19kZXF1ZXVlX2J1 bGsoc3RydWN0IHJ0ZV9yaW5nICpyLCB2b2lkICoqb2JqX3RhYmxlLA0KPiArCQl1bnNpZ25lZCBp bnQgbiwgdW5zaWduZWQgaW50ICphdmFpbGFibGUpDQo+ICt7DQo+ICsJcmV0dXJuIF9fcnRlX3Jp bmdfZG9fcnRzX2RlcXVldWUociwgb2JqX3RhYmxlLCBuLCBSVEVfUklOR19RVUVVRV9GSVhFRCwN Cj4gKwkJCWF2YWlsYWJsZSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogUmV0dXJuIHByb2R1 Y2VyIG1heCBIZWFkLVRhaWwtRGlzdGFuY2UgKEhURCkuDQo+ICsgKg0KPiArICogQHBhcmFtIHIN Cj4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gKyAqIEByZXR1cm4N Cj4gKyAqICAgUHJvZHVjZXIgSFREIHZhbHVlLCBpZiBwcm9kdWNlciBpcyBzZXQgaW4gYXBwcm9w cmlhdGUgc3luYyBtb2RlLA0KPiArICogICBvciBVSU5UMzJfTUFYIG90aGVyd2lzZS4NCj4gKyAq Lw0KPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ICtzdGF0aWMgaW5saW5lIHVpbnQzMl90DQo+ICty dGVfcmluZ19nZXRfcHJvZF9odGRfbWF4KGNvbnN0IHN0cnVjdCBydGVfcmluZyAqcikNCj4gK3sN Cj4gKwlpZiAoci0+cHJvZC5zeW5jX3R5cGUgPT0gUlRFX1JJTkdfU1lOQ19NVF9SVFMpDQo+ICsJ CXJldHVybiByLT5ydHNfcHJvZC5odGRfbWF4Ow0KPiArCXJldHVybiBVSU5UMzJfTUFYOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAqIFNldCBwcm9kdWNlciBtYXggSGVhZC1UYWlsLURpc3RhbmNl IChIVEQpLg0KPiArICogTm90ZSB0aGF0IHByb2R1Y2VyIGhhcyB0byB1c2UgYXBwcm9wcmlhdGUg c3luYyBtb2RlIChSVFMpLg0KPiArICoNCj4gKyAqIEBwYXJhbSByDQo+ICsgKiAgIEEgcG9pbnRl ciB0byB0aGUgcmluZyBzdHJ1Y3R1cmUuDQo+ICsgKiBAcGFyYW0gdg0KPiArICogICBuZXcgSFRE IHZhbHVlIHRvIHNldHVwLg0KPiArICogQHJldHVybg0KPiArICogICBaZXJvIG9uIHN1Y2Nlc3Ms IG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLg0KPiArICovDQo+ICtfX3J0ZV9leHBl cmltZW50YWwNCj4gK3N0YXRpYyBpbmxpbmUgaW50DQo+ICtydGVfcmluZ19zZXRfcHJvZF9odGRf bWF4KHN0cnVjdCBydGVfcmluZyAqciwgdWludDMyX3QgdikNCj4gK3sNCj4gKwlpZiAoci0+cHJv ZC5zeW5jX3R5cGUgIT0gUlRFX1JJTkdfU1lOQ19NVF9SVFMpDQo+ICsJCXJldHVybiAtRU5PVFNV UDsNCj4gKw0KPiArCXItPnJ0c19wcm9kLmh0ZF9tYXggPSB2Ow0KPiArCXJldHVybiAwOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAqIFJldHVybiBjb25zdW1lciBtYXggSGVhZC1UYWlsLURpc3Rh bmNlIChIVEQpLg0KPiArICoNCj4gKyAqIEBwYXJhbSByDQo+ICsgKiAgIEEgcG9pbnRlciB0byB0 aGUgcmluZyBzdHJ1Y3R1cmUuDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIENvbnN1bWVyIEhURCB2 YWx1ZSwgaWYgY29uc3VtZXIgaXMgc2V0IGluIGFwcHJvcHJpYXRlIHN5bmMgbW9kZSwNCj4gKyAq ICAgb3IgVUlOVDMyX01BWCBvdGhlcndpc2UuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRh bA0KPiArc3RhdGljIGlubGluZSB1aW50MzJfdA0KPiArcnRlX3JpbmdfZ2V0X2NvbnNfaHRkX21h eChjb25zdCBzdHJ1Y3QgcnRlX3JpbmcgKnIpDQo+ICt7DQo+ICsJaWYgKHItPmNvbnMuc3luY190 eXBlID09IFJURV9SSU5HX1NZTkNfTVRfUlRTKQ0KPiArCQlyZXR1cm4gci0+cnRzX2NvbnMuaHRk X21heDsNCj4gKwlyZXR1cm4gVUlOVDMyX01BWDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBT ZXQgY29uc3VtZXIgbWF4IEhlYWQtVGFpbC1EaXN0YW5jZSAoSFREKS4NCj4gKyAqIE5vdGUgdGhh dCBjb25zdW1lciBoYXMgdG8gdXNlIGFwcHJvcHJpYXRlIHN5bmMgbW9kZSAoUlRTKS4NCj4gKyAq DQo+ICsgKiBAcGFyYW0gcg0KPiArICogICBBIHBvaW50ZXIgdG8gdGhlIHJpbmcgc3RydWN0dXJl Lg0KPiArICogQHBhcmFtIHYNCj4gKyAqICAgbmV3IEhURCB2YWx1ZSB0byBzZXR1cC4NCj4gKyAq IEByZXR1cm4NCj4gKyAqICAgWmVybyBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2Rl IG90aGVyd2lzZS4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ICtzdGF0aWMgaW5s aW5lIGludA0KPiArcnRlX3Jpbmdfc2V0X2NvbnNfaHRkX21heChzdHJ1Y3QgcnRlX3JpbmcgKnIs IHVpbnQzMl90IHYpDQo+ICt7DQo+ICsJaWYgKHItPmNvbnMuc3luY190eXBlICE9IFJURV9SSU5H X1NZTkNfTVRfUlRTKQ0KPiArCQlyZXR1cm4gLUVOT1RTVVA7DQo+ICsNCj4gKwlyLT5ydHNfY29u cy5odGRfbWF4ID0gdjsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBF bnF1ZXVlIHNldmVyYWwgb2JqZWN0cyBvbiB0aGUgUlRTIHJpbmcgKG11bHRpLXByb2R1Y2VycyBz YWZlKS4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gcg0KPiArICogICBBIHBvaW50ZXIgdG8gdGhlIHJp bmcgc3RydWN0dXJlLg0KPiArICogQHBhcmFtIG9ial90YWJsZQ0KPiArICogICBBIHBvaW50ZXIg dG8gYSB0YWJsZSBvZiB2b2lkICogcG9pbnRlcnMgKG9iamVjdHMpLg0KPiArICogQHBhcmFtIG4N Cj4gKyAqICAgVGhlIG51bWJlciBvZiBvYmplY3RzIHRvIGFkZCBpbiB0aGUgcmluZyBmcm9tIHRo ZSBvYmpfdGFibGUuDQo+ICsgKiBAcGFyYW0gZnJlZV9zcGFjZQ0KPiArICogICBpZiBub24tTlVM TCwgcmV0dXJucyB0aGUgYW1vdW50IG9mIHNwYWNlIGluIHRoZSByaW5nIGFmdGVyIHRoZQ0KPiAr ICogICBlbnF1ZXVlIG9wZXJhdGlvbiBoYXMgZmluaXNoZWQuDQo+ICsgKiBAcmV0dXJuDQo+ICsg KiAgIC0gbjogQWN0dWFsIG51bWJlciBvZiBvYmplY3RzIGVucXVldWVkLg0KPiArICovDQo+ICtf X3J0ZV9leHBlcmltZW50YWwNCj4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVk DQo+ICtydGVfcmluZ19tcF9ydHNfZW5xdWV1ZV9idXJzdChzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZv aWQgKiBjb25zdCAqb2JqX3RhYmxlLA0KPiArCQkJIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBp bnQgKmZyZWVfc3BhY2UpDQo+ICt7DQo+ICsJcmV0dXJuIF9fcnRlX3JpbmdfZG9fcnRzX2VucXVl dWUociwgb2JqX3RhYmxlLCBuLA0KPiArCQkJUlRFX1JJTkdfUVVFVUVfVkFSSUFCTEUsIGZyZWVf c3BhY2UpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIERlcXVldWUgc2V2ZXJhbCBvYmplY3Rz IGZyb20gYW4gUlRTICByaW5nIChtdWx0aS1jb25zdW1lcnMgc2FmZSkuDQo+ICsgKiBXaGVuIHRo ZSByZXF1ZXN0ZWQgb2JqZWN0cyBhcmUgbW9yZSB0aGFuIHRoZSBhdmFpbGFibGUgb2JqZWN0cywN Cj4gKyAqIG9ubHkgZGVxdWV1ZSB0aGUgYWN0dWFsIG51bWJlciBvZiBvYmplY3RzLg0KPiArICoN Cj4gKyAqIEBwYXJhbSByDQo+ICsgKiAgIEEgcG9pbnRlciB0byB0aGUgcmluZyBzdHJ1Y3R1cmUu DQo+ICsgKiBAcGFyYW0gb2JqX3RhYmxlDQo+ICsgKiAgIEEgcG9pbnRlciB0byBhIHRhYmxlIG9m IHZvaWQgKiBwb2ludGVycyAob2JqZWN0cykgdGhhdCB3aWxsIGJlIGZpbGxlZC4NCj4gKyAqIEBw YXJhbSBuDQo+ICsgKiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBkZXF1ZXVlIGZyb20gdGhl IHJpbmcgdG8gdGhlIG9ial90YWJsZS4NCj4gKyAqIEBwYXJhbSBhdmFpbGFibGUNCj4gKyAqICAg SWYgbm9uLU5VTEwsIHJldHVybnMgdGhlIG51bWJlciBvZiByZW1haW5pbmcgcmluZyBlbnRyaWVz IGFmdGVyIHRoZQ0KPiArICogICBkZXF1ZXVlIGhhcyBmaW5pc2hlZC4NCj4gKyAqIEByZXR1cm4N Cj4gKyAqICAgLSBuOiBBY3R1YWwgbnVtYmVyIG9mIG9iamVjdHMgZGVxdWV1ZWQsIDAgaWYgcmlu ZyBpcyBlbXB0eQ0KPiArICovDQo+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gK3N0YXRpYyBfX3J0 ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVkDQo+ICtydGVfcmluZ19tY19ydHNfZGVxdWV1ZV9idXJz dChzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQgKipvYmpfdGFibGUsDQo+ICsJCXVuc2lnbmVkIGlu dCBuLCB1bnNpZ25lZCBpbnQgKmF2YWlsYWJsZSkNCj4gK3sNCj4gKwlyZXR1cm4gX19ydGVfcmlu Z19kb19ydHNfZGVxdWV1ZShyLCBvYmpfdGFibGUsIG4sDQo+ICsJCQlSVEVfUklOR19RVUVVRV9W QVJJQUJMRSwgYXZhaWxhYmxlKTsNCj4gK30NCj4gKw0KPiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ ICt9DQo+ICsjZW5kaWYNCj4gKw0KPiArI2VuZGlmIC8qIF9SVEVfUklOR19SVFNfSF8gKi8NCj4g ZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19ydHNfZWxlbS5oIGIvbGliL2xp YnJ0ZV9yaW5nL3J0ZV9yaW5nX3J0c19lbGVtLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4g aW5kZXggMDAwMDAwMDAwLi43MWEzMzFiMjMNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9saWIv bGlicnRlX3JpbmcvcnRlX3JpbmdfcnRzX2VsZW0uaA0KPiBAQCAtMCwwICsxLDIwNSBAQA0KPiAr LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiArICoNCj4gKyAqIENv cHlyaWdodCAoYykgMjAxMC0yMDE3IEludGVsIENvcnBvcmF0aW9uDQo+ICsgKiBDb3B5cmlnaHQg KGMpIDIwMDctMjAwOSBLaXAgTWFjeSBrbWFjeUBmcmVlYnNkLm9yZw0KPiArICogQWxsIHJpZ2h0 cyByZXNlcnZlZC4NCj4gKyAqIERlcml2ZWQgZnJvbSBGcmVlQlNEJ3MgYnVmcmluZy5oDQo+ICsg KiBVc2VkIGFzIEJTRC0zIExpY2Vuc2VkIHdpdGggcGVybWlzc2lvbiBmcm9tIEtpcCBNYWN5Lg0K PiArICovDQo+ICsNCj4gKyNpZm5kZWYgX1JURV9SSU5HX1JUU19FTEVNX0hfDQo+ICsjZGVmaW5l IF9SVEVfUklOR19SVFNfRUxFTV9IXw0KPiArDQo+ICsvKioNCj4gKyAqIEBmaWxlIHJ0ZV9yaW5n X3J0c19lbGVtLmgNCj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3 aXRob3V0IHByaW9yIG5vdGljZQ0KPiArICoNCj4gKyAqIEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0 byBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseS4NCj4gKyAqIFBsZWFzZSBpbmNsdWRlIDxydGVf cmluZ19lbGVtLmg+IGluc3RlYWQuDQo+ICsgKiBDb250YWlucyAqcmluZ19lbGVtKiBmdW5jdGlv bnMgZm9yIFJlbGF4ZWQgVGFpbCBTeW5jIChSVFMpIHJpbmcgbW9kZS4NCj4gKyAqIGZvciBtb3Jl IGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvIDxydGVfcmluZ19ydHMuaD4uDQo+ICsgKi8NCj4gKw0K PiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ICtleHRlcm4gIkMiIHsNCj4gKyNlbmRpZg0KPiArDQo+ ICsjaW5jbHVkZSA8cnRlX3JpbmdfcnRzX2dlbmVyaWMuaD4NCj4gKw0KPiArLyoqDQo+ICsgKiBA aW50ZXJuYWwgRW5xdWV1ZSBzZXZlcmFsIG9iamVjdHMgb24gdGhlIFJUUyByaW5nLg0KPiArICoN Cj4gKyAqIEBwYXJhbSByDQo+ICsgKiAgIEEgcG9pbnRlciB0byB0aGUgcmluZyBzdHJ1Y3R1cmUu DQo+ICsgKiBAcGFyYW0gb2JqX3RhYmxlDQo+ICsgKiAgIEEgcG9pbnRlciB0byBhIHRhYmxlIG9m IHZvaWQgKiBwb2ludGVycyAob2JqZWN0cykuDQo+ICsgKiBAcGFyYW0gbg0KPiArICogICBUaGUg bnVtYmVyIG9mIG9iamVjdHMgdG8gYWRkIGluIHRoZSByaW5nIGZyb20gdGhlIG9ial90YWJsZS4N Cj4gKyAqIEBwYXJhbSBiZWhhdmlvcg0KPiArICogICBSVEVfUklOR19RVUVVRV9GSVhFRDogICAg RW5xdWV1ZSBhIGZpeGVkIG51bWJlciBvZiBpdGVtcyBmcm9tIGEgcmluZw0KPiArICogICBSVEVf UklOR19RVUVVRV9WQVJJQUJMRTogRW5xdWV1ZSBhcyBtYW55IGl0ZW1zIGFzIHBvc3NpYmxlIGZy b20gcmluZw0KPiArICogQHBhcmFtIGZyZWVfc3BhY2UNCj4gKyAqICAgcmV0dXJucyB0aGUgYW1v dW50IG9mIHNwYWNlIGFmdGVyIHRoZSBlbnF1ZXVlIG9wZXJhdGlvbiBoYXMgZmluaXNoZWQNCj4g KyAqIEByZXR1cm4NCj4gKyAqICAgQWN0dWFsIG51bWJlciBvZiBvYmplY3RzIGVucXVldWVkLg0K PiArICogICBJZiBiZWhhdmlvciA9PSBSVEVfUklOR19RVUVVRV9GSVhFRCwgdGhpcyB3aWxsIGJl IDAgb3IgbiBvbmx5Lg0KPiArICovDQo+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNp Z25lZCBpbnQNCj4gK19fcnRlX3JpbmdfZG9fcnRzX2VucXVldWVfZWxlbShzdHJ1Y3QgcnRlX3Jp bmcgKnIsIHZvaWQgKiBjb25zdCAqb2JqX3RhYmxlLA0KPiArCXVpbnQzMl90IGVzaXplLCB1aW50 MzJfdCBuLCBlbnVtIHJ0ZV9yaW5nX3F1ZXVlX2JlaGF2aW9yIGJlaGF2aW9yLA0KPiArCXVpbnQz Ml90ICpmcmVlX3NwYWNlKQ0KPiArew0KPiArCXVpbnQzMl90IGZyZWUsIGhlYWQ7DQo+ICsNCj4g KwluID0gIF9fcnRlX3JpbmdfcnRzX21vdmVfcHJvZF9oZWFkKHIsIG4sIGJlaGF2aW9yLCAmaGVh ZCwgJmZyZWUpOw0KPiArDQo+ICsJaWYgKG4gIT0gMCkgew0KPiArCQlfX3J0ZV9yaW5nX2VucXVl dWVfZWxlbXMociwgaGVhZCwgb2JqX3RhYmxlLCBlc2l6ZSwgbik7DQo+ICsJCV9fcnRlX3Jpbmdf cnRzX3VwZGF0ZV90YWlsKCZyLT5ydHNfcHJvZCk7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGZyZWVf c3BhY2UgIT0gTlVMTCkNCj4gKwkJKmZyZWVfc3BhY2UgPSBmcmVlIC0gbjsNCj4gKwlyZXR1cm4g bjsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBAaW50ZXJuYWwgRGVxdWV1ZSBzZXZlcmFsIG9i amVjdHMgZnJvbSB0aGUgUlRTIHJpbmcuDQo+ICsgKg0KPiArICogQHBhcmFtIHINCj4gKyAqICAg QSBwb2ludGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gKyAqIEBwYXJhbSBvYmpfdGFibGUN Cj4gKyAqICAgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygdm9pZCAqIHBvaW50ZXJzIChvYmplY3Rz KS4NCj4gKyAqIEBwYXJhbSBuDQo+ICsgKiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBwdWxs IGZyb20gdGhlIHJpbmcuDQo+ICsgKiBAcGFyYW0gYmVoYXZpb3INCj4gKyAqICAgUlRFX1JJTkdf UVVFVUVfRklYRUQ6ICAgIERlcXVldWUgYSBmaXhlZCBudW1iZXIgb2YgaXRlbXMgZnJvbSBhIHJp bmcNCj4gKyAqICAgUlRFX1JJTkdfUVVFVUVfVkFSSUFCTEU6IERlcXVldWUgYXMgbWFueSBpdGVt cyBhcyBwb3NzaWJsZSBmcm9tIHJpbmcNCj4gKyAqIEBwYXJhbSBhdmFpbGFibGUNCj4gKyAqICAg cmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyByaW5nIGVudHJpZXMgYWZ0ZXIgdGhlIGRl cXVldWUgaGFzIGZpbmlzaGVkDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIC0gQWN0dWFsIG51bWJl ciBvZiBvYmplY3RzIGRlcXVldWVkLg0KPiArICogICAgIElmIGJlaGF2aW9yID09IFJURV9SSU5H X1FVRVVFX0ZJWEVELCB0aGlzIHdpbGwgYmUgMCBvciBuIG9ubHkuDQo+ICsgKi8NCj4gK3N0YXRp YyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiArX19ydGVfcmluZ19kb19ydHNf ZGVxdWV1ZV9lbGVtKHN0cnVjdCBydGVfcmluZyAqciwgdm9pZCAqKm9ial90YWJsZSwNCj4gKwl1 aW50MzJfdCBlc2l6ZSwgdWludDMyX3QgbiwgZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlvciBi ZWhhdmlvciwNCj4gKwl1aW50MzJfdCAqYXZhaWxhYmxlKQ0KPiArew0KPiArCXVpbnQzMl90IGVu dHJpZXMsIGhlYWQ7DQo+ICsNCj4gKwluID0gX19ydGVfcmluZ19ydHNfbW92ZV9jb25zX2hlYWQo ciwgbiwgYmVoYXZpb3IsICZoZWFkLCAmZW50cmllcyk7DQo+ICsNCj4gKwlpZiAobiAhPSAwKSB7 DQo+ICsJCV9fcnRlX3JpbmdfZGVxdWV1ZV9lbGVtcyhyLCBoZWFkLCBvYmpfdGFibGUsIGVzaXpl LCBuKTsNCj4gKwkJX19ydGVfcmluZ19ydHNfdXBkYXRlX3RhaWwoJnItPnJ0c19jb25zKTsNCj4g Kwl9DQo+ICsNCj4gKwlpZiAoYXZhaWxhYmxlICE9IE5VTEwpDQo+ICsJCSphdmFpbGFibGUgPSBl bnRyaWVzIC0gbjsNCj4gKwlyZXR1cm4gbjsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBFbnF1 ZXVlIHNldmVyYWwgb2JqZWN0cyBvbiB0aGUgUlRTIHJpbmcgKG11bHRpLXByb2R1Y2VycyBzYWZl KS4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gcg0KPiArICogICBBIHBvaW50ZXIgdG8gdGhlIHJpbmcg c3RydWN0dXJlLg0KPiArICogQHBhcmFtIG9ial90YWJsZQ0KPiArICogICBBIHBvaW50ZXIgdG8g YSB0YWJsZSBvZiB2b2lkICogcG9pbnRlcnMgKG9iamVjdHMpLg0KPiArICogQHBhcmFtIG4NCj4g KyAqICAgVGhlIG51bWJlciBvZiBvYmplY3RzIHRvIGFkZCBpbiB0aGUgcmluZyBmcm9tIHRoZSBv YmpfdGFibGUuDQo+ICsgKiBAcGFyYW0gZnJlZV9zcGFjZQ0KPiArICogICBpZiBub24tTlVMTCwg cmV0dXJucyB0aGUgYW1vdW50IG9mIHNwYWNlIGluIHRoZSByaW5nIGFmdGVyIHRoZQ0KPiArICog ICBlbnF1ZXVlIG9wZXJhdGlvbiBoYXMgZmluaXNoZWQuDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAg IFRoZSBudW1iZXIgb2Ygb2JqZWN0cyBlbnF1ZXVlZCwgZWl0aGVyIDAgb3Igbg0KPiArICovDQo+ ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2ln bmVkIGludA0KPiArcnRlX3JpbmdfbXBfcnRzX2VucXVldWVfYnVsa19lbGVtKHN0cnVjdCBydGVf cmluZyAqciwgdm9pZCAqIGNvbnN0ICpvYmpfdGFibGUsDQo+ICsJdW5zaWduZWQgaW50IGVzaXpl LCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50ICpmcmVlX3NwYWNlKQ0KPiArew0KPiArCXJl dHVybiBfX3J0ZV9yaW5nX2RvX3J0c19lbnF1ZXVlX2VsZW0ociwgb2JqX3RhYmxlLCBlc2l6ZSwg biwNCj4gKwkJCVJURV9SSU5HX1FVRVVFX0ZJWEVELCBmcmVlX3NwYWNlKTsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgKiBEZXF1ZXVlIHNldmVyYWwgb2JqZWN0cyBmcm9tIGFuIFJUUyByaW5nICht dWx0aS1jb25zdW1lcnMgc2FmZSkuDQo+ICsgKg0KPiArICogQHBhcmFtIHINCj4gKyAqICAgQSBw b2ludGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gKyAqIEBwYXJhbSBvYmpfdGFibGUNCj4g KyAqICAgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygdm9pZCAqIHBvaW50ZXJzIChvYmplY3RzKSB0 aGF0IHdpbGwgYmUgZmlsbGVkLg0KPiArICogQHBhcmFtIG4NCj4gKyAqICAgVGhlIG51bWJlciBv ZiBvYmplY3RzIHRvIGRlcXVldWUgZnJvbSB0aGUgcmluZyB0byB0aGUgb2JqX3RhYmxlLg0KPiAr ICogQHBhcmFtIGF2YWlsYWJsZQ0KPiArICogICBJZiBub24tTlVMTCwgcmV0dXJucyB0aGUgbnVt YmVyIG9mIHJlbWFpbmluZyByaW5nIGVudHJpZXMgYWZ0ZXIgdGhlDQo+ICsgKiAgIGRlcXVldWUg aGFzIGZpbmlzaGVkLg0KPiArICogQHJldHVybg0KPiArICogICBUaGUgbnVtYmVyIG9mIG9iamVj dHMgZGVxdWV1ZWQsIGVpdGhlciAwIG9yIG4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFs DQo+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gK3J0ZV9yaW5n X21jX3J0c19kZXF1ZXVlX2J1bGtfZWxlbShzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQgKipvYmpf dGFibGUsDQo+ICsJdW5zaWduZWQgaW50IGVzaXplLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQg aW50ICphdmFpbGFibGUpDQo+ICt7DQo+ICsJcmV0dXJuIF9fcnRlX3JpbmdfZG9fcnRzX2RlcXVl dWVfZWxlbShyLCBvYmpfdGFibGUsIGVzaXplLCBuLA0KPiArCQlSVEVfUklOR19RVUVVRV9GSVhF RCwgYXZhaWxhYmxlKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBFbnF1ZXVlIHNldmVyYWwg b2JqZWN0cyBvbiB0aGUgUlRTIHJpbmcgKG11bHRpLXByb2R1Y2VycyBzYWZlKS4NCj4gKyAqDQo+ ICsgKiBAcGFyYW0gcg0KPiArICogICBBIHBvaW50ZXIgdG8gdGhlIHJpbmcgc3RydWN0dXJlLg0K PiArICogQHBhcmFtIG9ial90YWJsZQ0KPiArICogICBBIHBvaW50ZXIgdG8gYSB0YWJsZSBvZiB2 b2lkICogcG9pbnRlcnMgKG9iamVjdHMpLg0KPiArICogQHBhcmFtIG4NCj4gKyAqICAgVGhlIG51 bWJlciBvZiBvYmplY3RzIHRvIGFkZCBpbiB0aGUgcmluZyBmcm9tIHRoZSBvYmpfdGFibGUuDQo+ ICsgKiBAcGFyYW0gZnJlZV9zcGFjZQ0KPiArICogICBpZiBub24tTlVMTCwgcmV0dXJucyB0aGUg YW1vdW50IG9mIHNwYWNlIGluIHRoZSByaW5nIGFmdGVyIHRoZQ0KPiArICogICBlbnF1ZXVlIG9w ZXJhdGlvbiBoYXMgZmluaXNoZWQuDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIC0gbjogQWN0dWFs IG51bWJlciBvZiBvYmplY3RzIGVucXVldWVkLg0KPiArICovDQo+ICtfX3J0ZV9leHBlcmltZW50 YWwNCj4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVkDQo+ICtydGVfcmluZ19t cF9ydHNfZW5xdWV1ZV9idXJzdF9lbGVtKHN0cnVjdCBydGVfcmluZyAqciwgdm9pZCAqIGNvbnN0 ICpvYmpfdGFibGUsDQo+ICsJdW5zaWduZWQgaW50IGVzaXplLCB1bnNpZ25lZCBpbnQgbiwgdW5z aWduZWQgaW50ICpmcmVlX3NwYWNlKQ0KPiArew0KPiArCXJldHVybiBfX3J0ZV9yaW5nX2RvX3J0 c19lbnF1ZXVlX2VsZW0ociwgb2JqX3RhYmxlLCBlc2l6ZSwgbiwNCj4gKwkJCVJURV9SSU5HX1FV RVVFX1ZBUklBQkxFLCBmcmVlX3NwYWNlKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBEZXF1 ZXVlIHNldmVyYWwgb2JqZWN0cyBmcm9tIGFuIFJUUyAgcmluZyAobXVsdGktY29uc3VtZXJzIHNh ZmUpLg0KPiArICogV2hlbiB0aGUgcmVxdWVzdGVkIG9iamVjdHMgYXJlIG1vcmUgdGhhbiB0aGUg YXZhaWxhYmxlIG9iamVjdHMsDQo+ICsgKiBvbmx5IGRlcXVldWUgdGhlIGFjdHVhbCBudW1iZXIg b2Ygb2JqZWN0cy4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gcg0KPiArICogICBBIHBvaW50ZXIgdG8g dGhlIHJpbmcgc3RydWN0dXJlLg0KPiArICogQHBhcmFtIG9ial90YWJsZQ0KPiArICogICBBIHBv aW50ZXIgdG8gYSB0YWJsZSBvZiB2b2lkICogcG9pbnRlcnMgKG9iamVjdHMpIHRoYXQgd2lsbCBi ZSBmaWxsZWQuDQo+ICsgKiBAcGFyYW0gbg0KPiArICogICBUaGUgbnVtYmVyIG9mIG9iamVjdHMg dG8gZGVxdWV1ZSBmcm9tIHRoZSByaW5nIHRvIHRoZSBvYmpfdGFibGUuDQo+ICsgKiBAcGFyYW0g YXZhaWxhYmxlDQo+ICsgKiAgIElmIG5vbi1OVUxMLCByZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVt YWluaW5nIHJpbmcgZW50cmllcyBhZnRlciB0aGUNCj4gKyAqICAgZGVxdWV1ZSBoYXMgZmluaXNo ZWQuDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIC0gbjogQWN0dWFsIG51bWJlciBvZiBvYmplY3Rz IGRlcXVldWVkLCAwIGlmIHJpbmcgaXMgZW1wdHkNCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVu dGFsDQo+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZA0KPiArcnRlX3Jpbmdf bWNfcnRzX2RlcXVldWVfYnVyc3RfZWxlbShzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQgKipvYmpf dGFibGUsDQo+ICsJdW5zaWduZWQgaW50IGVzaXplLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQg aW50ICphdmFpbGFibGUpDQo+ICt7DQo+ICsJcmV0dXJuIF9fcnRlX3JpbmdfZG9fcnRzX2RlcXVl dWVfZWxlbShyLCBvYmpfdGFibGUsIGVzaXplLCBuLA0KPiArCQkJUlRFX1JJTkdfUVVFVUVfVkFS SUFCTEUsIGF2YWlsYWJsZSk7DQo+ICt9DQo+ICsNCj4gKyNpZmRlZiBfX2NwbHVzcGx1cw0KPiAr fQ0KPiArI2VuZGlmDQo+ICsNCj4gKyNlbmRpZiAvKiBfUlRFX1JJTkdfUlRTX0VMRU1fSF8gKi8N Cj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19ydHNfZ2VuZXJpYy5oIGIv bGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3J0c19nZW5lcmljLmgNCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwLi4zMWEzNzkyNGMNCj4gLS0tIC9kZXYvbnVsbA0KPiAr KysgYi9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfcnRzX2dlbmVyaWMuaA0KPiBAQCAtMCwwICsx LDIxMCBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiAr ICoNCj4gKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDE3IEludGVsIENvcnBvcmF0aW9uDQo+ICsg KiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBLaXAgTWFjeSBrbWFjeUBmcmVlYnNkLm9yZw0KPiAr ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gKyAqIERlcml2ZWQgZnJvbSBGcmVlQlNEJ3MgYnVm cmluZy5oDQo+ICsgKiBVc2VkIGFzIEJTRC0zIExpY2Vuc2VkIHdpdGggcGVybWlzc2lvbiBmcm9t IEtpcCBNYWN5Lg0KPiArICovDQo+ICsNCj4gKyNpZm5kZWYgX1JURV9SSU5HX1JUU19HRU5FUklD X0hfDQo+ICsjZGVmaW5lIF9SVEVfUklOR19SVFNfR0VORVJJQ19IXw0KPiArDQo+ICsvKioNCj4g KyAqIEBmaWxlIHJ0ZV9yaW5nX3J0c19nZW5lcmljLmgNCj4gKyAqIEl0IGlzIG5vdCByZWNvbW1l bmRlZCB0byBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseSwNCj4gKyAqIGluY2x1ZGUgPHJ0ZV9y aW5nLmg+IGluc3RlYWQuDQo+ICsgKiBDb250YWlucyBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25z IGZvciBSZWxheGVkIFRhaWwgU3luYyAoUlRTKSByaW5nIG1vZGUuDQo+ICsgKiBGb3IgbW9yZSBp bmZvcm1hdGlvbiBwbGVhc2UgcmVmZXIgdG8gPHJ0ZV9yaW5nX3J0cy5oPi4NCj4gKyAqLw0KPiAr DQo+ICsvKioNCj4gKyAqIEBpbnRlcm5hbCBUaGlzIGZ1bmN0aW9uIHVwZGF0ZXMgdGFpbCB2YWx1 ZXMuDQo+ICsgKi8NCj4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gK19fcnRl X3JpbmdfcnRzX3VwZGF0ZV90YWlsKHN0cnVjdCBydGVfcmluZ19ydHNfaGVhZHRhaWwgKmh0KQ0K PiArew0KPiArCXVuaW9uIHJ0ZV9yaW5nX2h0X3Bvc2NudCBoLCBvdCwgbnQ7DQo+ICsNCj4gKwkv Kg0KPiArCSAqIElmIHRoZXJlIGFyZSBvdGhlciBlbnF1ZXVlcy9kZXF1ZXVlcyBpbiBwcm9ncmVz cyB0aGF0DQo+ICsJICogbWlnaHQgcHJlY2VkZWQgdXMsIHRoZW4gZG9uJ3QgdXBkYXRlIHRhaWwg d2l0aCBuZXcgdmFsdWUuDQo+ICsJICovDQo+ICsNCj4gKwlkbyB7DQo+ICsJCW90LnJhdyA9IGh0 LT50YWlsLnJhdzsNCj4gKwkJcnRlX3NtcF9ybWIoKTsNCj4gKw0KPiArCQkvKiBvbiAzMi1iaXQg c3lzdGVtcyB3ZSBoYXZlIHRvIGRvIGF0b21pYyByZWFkIGhlcmUgKi8NCj4gKwkJaC5yYXcgPSBy dGVfYXRvbWljNjRfcmVhZCgocnRlX2F0b21pYzY0X3QgKikNCj4gKwkJCSh1aW50cHRyX3QpJmh0 LT5oZWFkLnJhdyk7DQo+ICsNCj4gKwkJbnQucmF3ID0gb3QucmF3Ow0KPiArCQlpZiAoKytudC52 YWwuY250ID09IGgudmFsLmNudCkNCj4gKwkJCW50LnZhbC5wb3MgPSBoLnZhbC5wb3M7DQo+ICsN Cj4gKwl9IHdoaWxlIChydGVfYXRvbWljNjRfY21wc2V0KCZodC0+dGFpbC5yYXcsIG90LnJhdywg bnQucmF3KSA9PSAwKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBAaW50ZXJuYWwgVGhpcyBm dW5jdGlvbiB3YWl0cyB0aWxsIGhlYWQvdGFpbCBkaXN0YW5jZSB3b3VsZG4ndA0KPiArICogZXhj ZWVkIHByZS1kZWZpbmVkIG1heCB2YWx1ZS4NCj4gKyAqLw0KPiArc3RhdGljIF9fcnRlX2Fsd2F5 c19pbmxpbmUgdm9pZA0KPiArX19ydGVfcmluZ19ydHNfaGVhZF93YWl0KGNvbnN0IHN0cnVjdCBy dGVfcmluZ19ydHNfaGVhZHRhaWwgKmh0LA0KPiArCXVuaW9uIHJ0ZV9yaW5nX2h0X3Bvc2NudCAq aCkNCj4gK3sNCj4gKwl1aW50MzJfdCBtYXg7DQo+ICsNCj4gKwltYXggPSBodC0+aHRkX21heDsN Cj4gKwloLT5yYXcgPSBodC0+aGVhZC5yYXc7DQo+ICsJcnRlX3NtcF9ybWIoKTsNCj4gKw0KPiAr CXdoaWxlIChoLT52YWwucG9zIC0gaHQtPnRhaWwudmFsLnBvcyA+IG1heCkgew0KPiArCQlydGVf cGF1c2UoKTsNCj4gKwkJaC0+cmF3ID0gaHQtPmhlYWQucmF3Ow0KPiArCQlydGVfc21wX3JtYigp Ow0KPiArCX0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBAaW50ZXJuYWwgVGhpcyBmdW5jdGlv biB1cGRhdGVzIHRoZSBwcm9kdWNlciBoZWFkIGZvciBlbnF1ZXVlLg0KPiArICoNCj4gKyAqIEBw YXJhbSByDQo+ICsgKiAgIEEgcG9pbnRlciB0byB0aGUgcmluZyBzdHJ1Y3R1cmUNCj4gKyAqIEBw YXJhbSBpc19zcA0KPiArICogICBJbmRpY2F0ZXMgd2hldGhlciBtdWx0aS1wcm9kdWNlciBwYXRo IGlzIG5lZWRlZCBvciBub3QNCj4gKyAqIEBwYXJhbSBuDQo+ICsgKiAgIFRoZSBudW1iZXIgb2Yg ZWxlbWVudHMgd2Ugd2lsbCB3YW50IHRvIGVucXVldWUsIGkuZS4gaG93IGZhciBzaG91bGQgdGhl DQo+ICsgKiAgIGhlYWQgYmUgbW92ZWQNCj4gKyAqIEBwYXJhbSBiZWhhdmlvcg0KPiArICogICBS VEVfUklOR19RVUVVRV9GSVhFRDogICAgRW5xdWV1ZSBhIGZpeGVkIG51bWJlciBvZiBpdGVtcyBm cm9tIGEgcmluZw0KPiArICogICBSVEVfUklOR19RVUVVRV9WQVJJQUJMRTogRW5xdWV1ZSBhcyBt YW55IGl0ZW1zIGFzIHBvc3NpYmxlIGZyb20gcmluZw0KPiArICogQHBhcmFtIG9sZF9oZWFkDQo+ ICsgKiAgIFJldHVybnMgaGVhZCB2YWx1ZSBhcyBpdCB3YXMgYmVmb3JlIHRoZSBtb3ZlLCBpLmUu IHdoZXJlIGVucXVldWUgc3RhcnRzDQo+ICsgKiBAcGFyYW0gbmV3X2hlYWQNCj4gKyAqICAgUmV0 dXJucyB0aGUgY3VycmVudC9uZXcgaGVhZCB2YWx1ZSBpLmUuIHdoZXJlIGVucXVldWUgZmluaXNo ZXMNCj4gKyAqIEBwYXJhbSBmcmVlX2VudHJpZXMNCj4gKyAqICAgUmV0dXJucyB0aGUgYW1vdW50 IG9mIGZyZWUgc3BhY2UgaW4gdGhlIHJpbmcgQkVGT1JFIGhlYWQgd2FzIG1vdmVkDQo+ICsgKiBA cmV0dXJuDQo+ICsgKiAgIEFjdHVhbCBudW1iZXIgb2Ygb2JqZWN0cyBlbnF1ZXVlZC4NCj4gKyAq ICAgSWYgYmVoYXZpb3IgPT0gUlRFX1JJTkdfUVVFVUVfRklYRUQsIHRoaXMgd2lsbCBiZSAwIG9y IG4gb25seS4NCj4gKyAqLw0KPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdWludDMyX3QN Cj4gK19fcnRlX3JpbmdfcnRzX21vdmVfcHJvZF9oZWFkKHN0cnVjdCBydGVfcmluZyAqciwgdWlu dDMyX3QgbnVtLA0KPiArCWVudW0gcnRlX3JpbmdfcXVldWVfYmVoYXZpb3IgYmVoYXZpb3IsIHVp bnQzMl90ICpvbGRfaGVhZCwNCj4gKwl1aW50MzJfdCAqZnJlZV9lbnRyaWVzKQ0KPiArew0KPiAr CXVpbnQzMl90IG47DQo+ICsJdW5pb24gcnRlX3JpbmdfaHRfcG9zY250IG5oLCBvaDsNCj4gKw0K PiArCWNvbnN0IHVpbnQzMl90IGNhcGFjaXR5ID0gci0+Y2FwYWNpdHk7DQo+ICsNCj4gKwlkbyB7 DQo+ICsJCS8qIFJlc2V0IG4gdG8gdGhlIGluaXRpYWwgYnVyc3QgY291bnQgKi8NCj4gKwkJbiA9 IG51bTsNCj4gKw0KPiArCQkvKiByZWFkIHByb2QgaGVhZCAobWF5IHNwaW4gb24gcHJvZCB0YWls KSAqLw0KPiArCQlfX3J0ZV9yaW5nX3J0c19oZWFkX3dhaXQoJnItPnJ0c19wcm9kLCAmb2gpOw0K PiArDQo+ICsJCS8qIGFkZCBybWIgYmFycmllciB0byBhdm9pZCBsb2FkL2xvYWQgcmVvcmRlciBp biB3ZWFrDQo+ICsJCSAqIG1lbW9yeSBtb2RlbC4gSXQgaXMgbm9vcCBvbiB4ODYNCj4gKwkJICov DQo+ICsJCXJ0ZV9zbXBfcm1iKCk7DQo+ICsNCj4gKwkJLyoNCj4gKwkJICogIFRoZSBzdWJ0cmFj dGlvbiBpcyBkb25lIGJldHdlZW4gdHdvIHVuc2lnbmVkIDMyYml0cyB2YWx1ZQ0KPiArCQkgKiAo dGhlIHJlc3VsdCBpcyBhbHdheXMgbW9kdWxvIDMyIGJpdHMgZXZlbiBpZiB3ZSBoYXZlDQo+ICsJ CSAqICpvbGRfaGVhZCA+IGNvbnNfdGFpbCkuIFNvICdmcmVlX2VudHJpZXMnIGlzIGFsd2F5cyBi ZXR3ZWVuIDANCj4gKwkJICogYW5kIGNhcGFjaXR5ICh3aGljaCBpcyA8IHNpemUpLg0KPiArCQkg Ki8NCj4gKwkJKmZyZWVfZW50cmllcyA9IGNhcGFjaXR5ICsgci0+Y29ucy50YWlsIC0gb2gudmFs LnBvczsNCj4gKw0KPiArCQkvKiBjaGVjayB0aGF0IHdlIGhhdmUgZW5vdWdoIHJvb20gaW4gcmlu ZyAqLw0KPiArCQlpZiAodW5saWtlbHkobiA+ICpmcmVlX2VudHJpZXMpKQ0KPiArCQkJbiA9IChi ZWhhdmlvciA9PSBSVEVfUklOR19RVUVVRV9GSVhFRCkgPw0KPiArCQkJCQkwIDogKmZyZWVfZW50 cmllczsNCj4gKw0KPiArCQlpZiAobiA9PSAwKQ0KPiArCQkJcmV0dXJuIDA7DQo+ICsNCj4gKwkJ bmgudmFsLnBvcyA9IG9oLnZhbC5wb3MgKyBuOw0KPiArCQluaC52YWwuY250ID0gb2gudmFsLmNu dCArIDE7DQo+ICsNCj4gKwl9IHdoaWxlIChydGVfYXRvbWljNjRfY21wc2V0KCZyLT5ydHNfcHJv ZC5oZWFkLnJhdywNCj4gKwkJCW9oLnJhdywgbmgucmF3KSA9PSAwKTsNCj4gKw0KPiArCSpvbGRf aGVhZCA9IG9oLnZhbC5wb3M7DQo+ICsJcmV0dXJuIG47DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICogQGludGVybmFsIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgY29uc3VtZXIgaGVhZCBmb3Ig ZGVxdWV1ZQ0KPiArICoNCj4gKyAqIEBwYXJhbSByDQo+ICsgKiAgIEEgcG9pbnRlciB0byB0aGUg cmluZyBzdHJ1Y3R1cmUNCj4gKyAqIEBwYXJhbSBpc19zYw0KPiArICogICBJbmRpY2F0ZXMgd2hl dGhlciBtdWx0aS1jb25zdW1lciBwYXRoIGlzIG5lZWRlZCBvciBub3QNCj4gKyAqIEBwYXJhbSBu DQo+ICsgKiAgIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgd2Ugd2lsbCB3YW50IHRvIGVucXVldWUs IGkuZS4gaG93IGZhciBzaG91bGQgdGhlDQo+ICsgKiAgIGhlYWQgYmUgbW92ZWQNCj4gKyAqIEBw YXJhbSBiZWhhdmlvcg0KPiArICogICBSVEVfUklOR19RVUVVRV9GSVhFRDogICAgRGVxdWV1ZSBh IGZpeGVkIG51bWJlciBvZiBpdGVtcyBmcm9tIGEgcmluZw0KPiArICogICBSVEVfUklOR19RVUVV RV9WQVJJQUJMRTogRGVxdWV1ZSBhcyBtYW55IGl0ZW1zIGFzIHBvc3NpYmxlIGZyb20gcmluZw0K PiArICogQHBhcmFtIG9sZF9oZWFkDQo+ICsgKiAgIFJldHVybnMgaGVhZCB2YWx1ZSBhcyBpdCB3 YXMgYmVmb3JlIHRoZSBtb3ZlLCBpLmUuIHdoZXJlIGRlcXVldWUgc3RhcnRzDQo+ICsgKiBAcGFy YW0gbmV3X2hlYWQNCj4gKyAqICAgUmV0dXJucyB0aGUgY3VycmVudC9uZXcgaGVhZCB2YWx1ZSBp LmUuIHdoZXJlIGRlcXVldWUgZmluaXNoZXMNCj4gKyAqIEBwYXJhbSBlbnRyaWVzDQo+ICsgKiAg IFJldHVybnMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSByaW5nIEJFRk9SRSBoZWFkIHdh cyBtb3ZlZA0KPiArICogQHJldHVybg0KPiArICogICAtIEFjdHVhbCBudW1iZXIgb2Ygb2JqZWN0 cyBkZXF1ZXVlZC4NCj4gKyAqICAgICBJZiBiZWhhdmlvciA9PSBSVEVfUklOR19RVUVVRV9GSVhF RCwgdGhpcyB3aWxsIGJlIDAgb3IgbiBvbmx5Lg0KPiArICovDQo+ICtzdGF0aWMgX19ydGVfYWx3 YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gK19fcnRlX3JpbmdfcnRzX21vdmVfY29uc19oZWFk KHN0cnVjdCBydGVfcmluZyAqciwgdWludDMyX3QgbnVtLA0KPiArCWVudW0gcnRlX3JpbmdfcXVl dWVfYmVoYXZpb3IgYmVoYXZpb3IsIHVpbnQzMl90ICpvbGRfaGVhZCwNCj4gKwl1aW50MzJfdCAq ZW50cmllcykNCj4gK3sNCj4gKwl1aW50MzJfdCBuOw0KPiArCXVuaW9uIHJ0ZV9yaW5nX2h0X3Bv c2NudCBuaCwgb2g7DQo+ICsNCj4gKwkvKiBtb3ZlIGNvbnMuaGVhZCBhdG9taWNhbGx5ICovDQo+ ICsJZG8gew0KPiArCQkvKiBSZXN0b3JlIG4gYXMgaXQgbWF5IGNoYW5nZSBldmVyeSBsb29wICov DQo+ICsJCW4gPSBudW07DQo+ICsNCj4gKwkJLyogcmVhZCBjb25zIGhlYWQgKG1heSBzcGluIG9u IGNvbnMgdGFpbCkgKi8NCj4gKwkJX19ydGVfcmluZ19ydHNfaGVhZF93YWl0KCZyLT5ydHNfY29u cywgJm9oKTsNCj4gKw0KPiArDQo+ICsJCS8qIGFkZCBybWIgYmFycmllciB0byBhdm9pZCBsb2Fk L2xvYWQgcmVvcmRlciBpbiB3ZWFrDQo+ICsJCSAqIG1lbW9yeSBtb2RlbC4gSXQgaXMgbm9vcCBv biB4ODYNCj4gKwkJICovDQo+ICsJCXJ0ZV9zbXBfcm1iKCk7DQo+ICsNCj4gKwkJLyogVGhlIHN1 YnRyYWN0aW9uIGlzIGRvbmUgYmV0d2VlbiB0d28gdW5zaWduZWQgMzJiaXRzIHZhbHVlDQo+ICsJ CSAqICh0aGUgcmVzdWx0IGlzIGFsd2F5cyBtb2R1bG8gMzIgYml0cyBldmVuIGlmIHdlIGhhdmUN Cj4gKwkJICogY29uc19oZWFkID4gcHJvZF90YWlsKS4gU28gJ2VudHJpZXMnIGlzIGFsd2F5cyBi ZXR3ZWVuIDANCj4gKwkJICogYW5kIHNpemUocmluZyktMS4NCj4gKwkJICovDQo+ICsJCSplbnRy aWVzID0gci0+cHJvZC50YWlsIC0gb2gudmFsLnBvczsNCj4gKw0KPiArCQkvKiBTZXQgdGhlIGFj dHVhbCBlbnRyaWVzIGZvciBkZXF1ZXVlICovDQo+ICsJCWlmIChuID4gKmVudHJpZXMpDQo+ICsJ CQluID0gKGJlaGF2aW9yID09IFJURV9SSU5HX1FVRVVFX0ZJWEVEKSA/IDAgOiAqZW50cmllczsN Cj4gKw0KPiArCQlpZiAodW5saWtlbHkobiA9PSAwKSkNCj4gKwkJCXJldHVybiAwOw0KPiArDQo+ ICsJCW5oLnZhbC5wb3MgPSBvaC52YWwucG9zICsgbjsNCj4gKwkJbmgudmFsLmNudCA9IG9oLnZh bC5jbnQgKyAxOw0KPiArDQo+ICsJfSB3aGlsZSAocnRlX2F0b21pYzY0X2NtcHNldCgmci0+cnRz X2NvbnMuaGVhZC5yYXcsDQo+ICsJCQlvaC5yYXcsIG5oLnJhdykgPT0gMCk7DQo+ICsNCj4gKwkq b2xkX2hlYWQgPSBvaC52YWwucG9zOw0KPiArCXJldHVybiBuOw0KPiArfQ0KPiArDQo+ICsjZW5k aWYgLyogX1JURV9SSU5HX1JUU19HRU5FUklDX0hfICovDQo+IC0tDQo+IDIuMTcuMQ0KDQo=