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 7D3DBA04F7; Tue, 7 Jan 2020 15:09:48 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id EBE4E1D96A; Tue, 7 Jan 2020 15:09:47 +0100 (CET) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by dpdk.org (Postfix) with ESMTP id 6C2C41D95E for ; Tue, 7 Jan 2020 15:09:45 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga106.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 07 Jan 2020 06:09:44 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,406,1571727600"; d="scan'208";a="395371029" Received: from orsmsx103.amr.corp.intel.com ([10.22.225.130]) by orsmga005.jf.intel.com with ESMTP; 07 Jan 2020 06:09:44 -0800 Received: from ORSEDG001.ED.cps.intel.com (10.7.248.4) by ORSMSX103.amr.corp.intel.com (10.22.225.130) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 7 Jan 2020 06:09:43 -0800 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.176) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 7 Jan 2020 06:09:44 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=S6cKZmPYnWkVq2ceL1CrQxHllVoXIwVJPquHZcv3KG0IswIvyZIQwdPoNAudk8T1+CNJ8ocx9vc7qyAWBavAUAK8xDfFBSgRb7U/eSB9BU2Bk96ak1pC2Euonab+P/uXdqmBe5TZnjgSiuk7v/Z1VtMl+HxLKbmOgME7kJBazhF4DvB3aKN2CltcQvM2MYdmUAuUSYgYEbSIvumoCToUcAhGXFbXRNVwjJG3vZR6aYDKJT8YsyTz1TKGAyTvL5vghLHoU3/yRNVsZg7G7/RZg2N5GKiXyLEVaoR0uug5unj9EO0yFQ3wM+UMEE1gfwLhLisXuB6p8bJAH0b21XsWhA== 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=uPw/xjpVkRDbwpAtUZp6cBJskFRav3G5PHeKYnJE2Yo=; b=Xq3JYAen2PN2DetaQAzFVNhVlceUPPnha7+mqlmyGqzvpsBOuTvFwBVan4syQWwP6vberdEgTXASft7QgN/kkjnnAt/XoRHZ9xDKuU9MpfHuWRRm+Xh2+6O9cW4YPd9zRECeP3niykXr9jAaOgyAy30BJb+Ihl6qetMK/NMEQbH8xr92pVae/E4CiPIjgaio/7MS1c4eA2kjStUWgRjN4m81HXpupR3uZMt/ooJlmf3FKWiIgeaWJ2sl7o09xelkIYcSMGA7NR89gmEmeXVEzgW8iBwEuUNrY+jHTEjF58Vqz0fKu22FufZcCqNj9WZ8XzEUV0E2sV/wZwbOVRAeyg== 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=uPw/xjpVkRDbwpAtUZp6cBJskFRav3G5PHeKYnJE2Yo=; b=EIbMZjoI/8CFcAjKtWk8UwFIw8QtEfpBu/MjOGeBBGl6zsono5MewJWdGIafZqadbjVH79y56VdaYEc1mt337AOMBLKpGJeWkwPIVvsnt49vV5O/cuSMjid8GLqb6xkQ3MlM4eJFhnhmABaAJOW9bNddaLeQ2/dSfbLQixHWvpE= Received: from SN6PR11MB2558.namprd11.prod.outlook.com (52.135.94.19) by SN6PR11MB3328.namprd11.prod.outlook.com (52.135.110.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2602.11; Tue, 7 Jan 2020 14:09:42 +0000 Received: from SN6PR11MB2558.namprd11.prod.outlook.com ([fe80::4d86:362a:13c3:8386]) by SN6PR11MB2558.namprd11.prod.outlook.com ([fe80::4d86:362a:13c3:8386%7]) with mapi id 15.20.2623.008; Tue, 7 Jan 2020 14:09:42 +0000 From: "Ananyev, Konstantin" To: "Di, ChenxuX" , "dev@dpdk.org" CC: "Yang, Qiming" Thread-Topic: [dpdk-dev] [PATCH v6 3/4] net/ixgbe: cleanup Tx buffers Thread-Index: AQHVvvUp6LlAIfvCjkGBZ/4yGRUggKfSnF5QgAYOaoCABAZmYIAAsTkAgAA70ZCAAXM5gIAAL1tQ Date: Tue, 7 Jan 2020 14:09:42 +0000 Message-ID: References: <20191203055134.72874-1-chenxux.di@intel.com> <20191230093840.17701-1-chenxux.di@intel.com> <20191230093840.17701-4-chenxux.di@intel.com> <3B926E44943CB04AA3A39AC16328CE39B9262D@SHSMSX101.ccr.corp.intel.com> <3B926E44943CB04AA3A39AC16328CE39B93D08@SHSMSX101.ccr.corp.intel.com> <3B926E44943CB04AA3A39AC16328CE39B9440F@SHSMSX101.ccr.corp.intel.com> In-Reply-To: <3B926E44943CB04AA3A39AC16328CE39B9440F@SHSMSX101.ccr.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZWY4ZDY4MGYtZDFiZS00MjI5LTgwMzctMWJhODJiNzQ3OGNhIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiXC95aDFHckxKbW50NmVZN2ZPMGsrNklWVThPVmFcL2lYMXIrQWFRVGhvNHA1R2dwMVlpT2dCYlZIczFydncwYnMxIn0= dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.2.0.6 x-ctpclassification: CTP_NT authentication-results: spf=none (sender IP is ) smtp.mailfrom=konstantin.ananyev@intel.com; x-originating-ip: [192.198.151.179] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 43c54b19-8dad-4c8a-1a53-08d7937b3dbb x-ms-traffictypediagnostic: SN6PR11MB3328: 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:7691; x-forefront-prvs: 027578BB13 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(366004)(189003)(199004)(7696005)(52536014)(33656002)(8936002)(81156014)(81166006)(8676002)(26005)(86362001)(5660300002)(110136005)(30864003)(107886003)(6506007)(498600001)(4326008)(2906002)(66446008)(55016002)(64756008)(66556008)(66476007)(71200400001)(66946007)(76116006)(9686003)(186003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR11MB3328; H:SN6PR11MB2558.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: cwfUSBzEY0Vfdg2rLc1lGzkG8R8uyKglkT5QZSf+N0DMGAhjF4CrI136iPcwt7dHnrEckuBvUqABdqMLBJjz6+owA06utUKt6Cn0jYxFWsklwDxlWI3ISQk7UOBJo4rBX7KjnU0nT41qq7Afu1mvgJroyes1s53eWcD2asx033OlY6cW032boAWq3P9qDPIjhbYoL4Ne1lCvxGXEU0J9tGw6ctcD4sDNnk5agmpcPEYp3HuNeeaGMA2XnyjKjnB3yR/gn4wwdJV/1oH4GEcMsjKOVjVWnwOQ873Y6j6E273uWtxY/ZtdQwNcXZZYR4xT1Jec8zaxaPRYop2POTY344RBjD6NBovokxRo42EaaiJu8BZ46zYWC7A0nzf/LtU9okv0sjN4NekN58GNLaZZp0fDHZG7/pb1uiBYJYFFreGvTvcgV+PyJ634+lHHpOcG Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 43c54b19-8dad-4c8a-1a53-08d7937b3dbb X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Jan 2020 14:09:42.0967 (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: KmGmMTuwreJ+2aE474rkQOSsoKk5i9Y644cSDfN4IXaGGAelN69DNog8ajdNm5ILmgIcNQnj+kXW66CvFwkvnUVMFiCfR76aUcdjxg37ev4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR11MB3328 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH v6 3/4] net/ixgbe: cleanup Tx buffers 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" DQpIaSBDaGVueHUsDQoNCj4gPiA+ID4gPiA+ID4gKyAqIHR4X3RhaWwgaXMgdGhlIGxhc3Qgc2Vu dCBwYWNrZXQgb24gdGhlIHN3X3JpbmcuIEdvdG8gdGhlDQo+ID4gPiA+ID4gPiA+ICsgZW5kDQo+ ID4gPiA+ID4gPiA+ICsgKiBvZiB0aGF0IHBhY2tldCAodGhlIGxhc3Qgc2VnbWVudCBpbiB0aGUg cGFja2V0IGNoYWluKSBhbmQNCj4gPiA+ID4gPiA+ID4gKyAqIHRoZW4gdGhlIG5leHQgc2VnbWVu dCB3aWxsIGJlIHRoZSBzdGFydCBvZiB0aGUgb2xkZXN0DQo+ID4gPiA+ID4gPiA+ICsgc2VnbWVu dA0KPiA+ID4gPiA+ID4gPiArICogaW4gdGhlIHN3X3JpbmcuDQo+ID4gPiA+ID4gPg0KPiA+ID4g PiA+ID4gTm90IHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzZW50ZW5jZSBhYm92ZS4NCj4gPiA+ID4g PiA+IHR4X3RhaWwgaXMgdGhlIHZhbHVlIG9mIFREVCBIVyByZWdpc3RlciAobW9zdCByZWNlbnRs eSBhcm1lZCBieSBTVyBURCkuDQo+ID4gPiA+ID4gPiBsYXN0X2lkICBpcyB0aGUgaW5kZXggb2Yg bGFzdCBkZXNjcmlwdG9yIGZvciBtdWx0aS1zZWcgcGFja2V0Lg0KPiA+ID4gPiA+ID4gbmV4dF9p ZCBpcyBqdXN0IHRoZSBpbmRleCBvZiBuZXh0IGRlc2NyaXB0b3IgaW4gSFcgVEQgcmluZy4NCj4g PiA+ID4gPiA+IEhvdyBkbyB5b3UgY29uY2x1ZGUgdGhhdCBpdCB3aWxsIGJlIHRoZSAnIG9sZGVz dCBzZWdtZW50IGluIHRoZSBzd19yaW5nJz8NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4NCj4gPiA+ ID4gPiBUaGUgdHhfdGFpbCBpcyB0aGUgbGFzdCBzZW50IHBhY2tldCBvbiB0aGUgc3dfcmluZy4g V2hpbGUgdGhlDQo+ID4gPiA+ID4geG1pdF9jbGVhbnVwIG9yIFR4X2ZyZWVfYnVmcyB3aWxsIGJl IGNhbGwgd2hlbiB0aGUgbmJfdHhfZnJlZSA8DQo+ID4gPiA+IHR4X2ZyZWVfdGhyZXNoIC4NCj4g PiA+ID4gPiBTbyB0aGUgc3dfcmluZ1t0eF90YWlsXS5uZXh0X2lkIG11c3QgYmUgdGhlIGJlZ2lu IG9mIG1idWZzIHdoaWNoDQo+ID4gPiA+ID4gYXJlIG5vdCB1c2VkIG9yICBBbHJlYWR5IGZyZWVk IC4gdGhlbiBiZWdpbiB0aGUgbG9vcCB1bnRpbCB0aGUNCj4gPiA+ID4gPiBtYnVmIGlzIHVzZWQg YW5kDQo+ID4gPiA+IGJlZ2luIHRvIGZyZWUgdGhlbS4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+DQo+ ID4gPiA+ID4NCj4gPiA+ID4gPiA+IEFub3RoZXIgcXVlc3Rpb24gd2h5IGRvIHlvdSBuZWVkIHRv IHdyaXRlIHlvdXIgb3duIGZ1bmN0aW9ucz8NCj4gPiA+ID4gPiA+IFdoeSBjYW4ndCB5b3UgcmV1 c2UgZXhpc3RpbmcgaXhnYmVfeG1pdF9jbGVhbnVwKCkgZm9yDQo+ID4gPiA+ID4gPiBmdWxsKG9m ZmxvYWQpIHBhdGggYW5kDQo+ID4gPiA+ID4gPiBpeGdiZV90eF9mcmVlX2J1ZnMoKSBmb3Igc2lt cGxlIHBhdGg/DQo+ID4gPiA+ID4gPiBZZXMsICBpeGdiZV94bWl0X2NsZWFudXAoKSBkb2Vzbid0 IGZyZWUgbWJ1ZnMsIGJ1dCBhdCBsZWFzdCBpdA0KPiA+ID4gPiA+ID4gY291bGQgYmUgdXNlZCB0 byBkZXRlcm1pbmUgZmluaXNoZWQgVFggZGVzY3JpcHRvcnMuDQo+ID4gPiA+ID4gPiBCYXNlZCBv biB0aGF0IHlvdSBjYW4geW91IGNhbiBmcmVlIGFwcHJvcHJpYXRlIHN3X3JpbmdbXSBlbnRyaWVz Lg0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IFRoZSByZWFzb24gd2h5IEkgZG9u J3QgcmV1c2UgZXhpc3RpbmcgZnVuY3Rpb24gaXMgdGhhdCB0aGV5IGFsbA0KPiA+ID4gPiA+IGZy ZWUgc2V2ZXJhbCBtYnVmcyBXaGlsZSB0aGUgZnJlZV9jbnQgb2YgdGhlIEFQSQ0KPiA+ID4gPiA+ IHJ0ZV9ldGhfdHhfZG9uZV9jbGVhbnVwKCkgaXMgdGhlDQo+ID4gPiA+IG51bWJlciBvZiBwYWNr ZXRzLg0KPiA+ID4gPiA+IEl0IGFsc28gbmVlZCB0byBiZSBkb25lIHRoYXQgY2hlY2sgd2hpY2gg bWJ1ZmZzIGFyZSBmcm9tIHRoZSBzYW1lIHBhY2tldC4NCj4gPiA+ID4NCj4gPiA+ID4gQXQgZmly c3QsIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIGJhZCBpZiB0eF9kb25lX2NsZWFudXAoKSB3aWxsIGZy ZWUNCj4gPiA+ID4gb25seSBzb21lIHNlZ21lbnRzIGZyb20gdGhlIHBhY2tldC4gQXMgbG9uZyBh cyBpdCBpcyBzYWZlIC0gdGhlcmUgaXMgbm8NCj4gPiBwcm9ibGVtIHdpdGggdGhhdC4NCj4gPiA+ ID4gSSB0aGluayBydGVfZXRoX3R4X2RvbmVfY2xlYW51cCgpIG9wZXJhdGVzIG9uIG1idWYsIG5v dCBwYWNrZXQgcXVhbnRpdGllcy4NCj4gPiA+ID4gQnV0IGluIG91ciBjYXNlIEkgdGhpbmsgaXQg ZG9lc24ndCBtYXR0ZXIsIGFzIGl4Z2JlX3htaXRfY2xlYW51cCgpDQo+ID4gPiA+IG1hcmsgVFhE cyBhcyBmcmVlIG9ubHkgd2hlbiBIVyBpcyBkb25lIHdpdGggYWxsIFRYRHMgZm9yIHRoYXQgcGFj a2V0Lg0KPiA+ID4gPiBBcyBsb25nIGFzIHRoZXJlIGlzIGEgd2F5IHRvIHJldXNlIGV4aXN0aW5n IGNvZGUgYW5kIGF2b2lkDQo+ID4gPiA+IGR1cGxpY2F0aW9uICh3aXRob3V0IGludHJvZHVjaW5n IGFueSBkZWdyYWRhdGlvbikgLSB3ZSBzaG91bGQgdXNlIGl0Lg0KPiA+ID4gPiBBbmQgSSB0aGlu ayB0aGVyZSBpcyBhIHZlcnkgZ29vZCBvcHBvcnR1bml0eSBoZXJlIHRvIHJldXNlIGV4aXN0aW5n DQo+ID4gPiA+IGl4Z2JlX3htaXRfY2xlYW51cCgpIGZvciB0eF9kb25lX2NsZWFudXAoKSBpbXBs ZW1lbnRhdGlvbi4NCj4gPiA+ID4gTW9yZW92ZXIgYmVjYXVzZSB5b3VyIGNvZGUgZG9lc27igJl0 IGZvbGxvdw0KPiA+ID4gPiBpeGdiZV94bWl0X3BrdHMoKS9peGdiZV94bWl0X2NsZWFudXAoKQ0K PiA+ID4gPiBsb2dpYyBhbmQgaW5mcmFzdHJ1Y3R1cmUsIGl0IGludHJvZHVjZXMgdW5uZWNlc3Nh cnkgc2NhbnMgb3ZlciBUWEQNCj4gPiA+ID4gcmluZywgYW5kIGluIHNvbWUgY2FzZXMgZG9lc24n dCB3b3JrIGFzIGV4cGVjdGVkOg0KPiA+ID4gPg0KPiA+ID4gPiArd2hpbGUgKDEpIHsNCj4gPiA+ ID4gK3R4X2xhc3QgPSBzd19yaW5nW3R4X2lkXS5sYXN0X2lkOw0KPiA+ID4gPiArDQo+ID4gPiA+ ICtpZiAoc3dfcmluZ1t0eF9sYXN0XS5tYnVmKSB7DQo+ID4gPiA+ICtpZiAodHhyW3R4X2xhc3Rd LndiLnN0YXR1cyAmDQo+ID4gPiA+ICtJWEdCRV9UWERfU1RBVF9ERCkgew0KPiA+ID4gPiAuLi4N Cj4gPiA+ID4gK30gZWxzZSB7DQo+ID4gPiA+ICsvKg0KPiA+ID4gPiArICogbWJ1ZiBzdGlsbCBp biB1c2UsIG5vdGhpbmcgbGVmdCB0bw0KPiA+ID4gPiArICogZnJlZS4NCj4gPiA+ID4gKyAqLw0K PiA+ID4gPiArYnJlYWs7DQo+ID4gPiA+DQo+ID4gPiA+IEl0IGlzIG5vdCBjb3JyZWN0IHRvIGV4 cGVjdCB0aGF0IElYR0JFX1RYRF9TVEFUX0REIHdpbGwgYmUgc2V0IG9uDQo+ID4gPiA+IGxhc3Qg VFhEIGZvcg0KPiA+ID4gPiAqZXZlcnkqIHBhY2tldC4NCj4gPiA+ID4gV2Ugc2V0IElYR0JFX1RY RF9DTURfUlMgYml0IG9ubHkgb24gdGhyZXNob2xkIHBhY2tldCBsYXN0IGRlc2NyaXB0b3IuDQo+ ID4gPiA+IFBsdXMgaXhnYmVfeG1pdF9jbGVhbnVwKCkgY2FuIGNsZWFudXAgVFhEIHdiLnN0YXR1 cy4NCj4gPiA+ID4NCj4gPiA+ID4gU28gSSBzdHJvbmdseSByZWNvbW1lbmQgdG8gcmV1c2UgaXhn YmVfeG1pdF9jbGVhbnVwKCkgaGVyZS4NCj4gPiA+ID4gSXQgd291bGQgYmUgbXVjaCBsZXNzIGVy cm9yIHByb25lIGFuZCB3aWxsIGhlbHAgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvbi4NCj4gPiA+ ID4NCj4gPiA+ID4gS29uc3RhbnRpbg0KPiA+ID4gPg0KPiA+ID4NCj4gPiA+IEF0IGZpcnN0Lg0K PiA+ID4gVGhlIGZ1bmN0aW9uIGl4Z2JlX3htaXRfY2xlYW51cChzdHJ1Y3QgaXhnYmVfdHhfcXVl dWUgKnR4cSkgd2lsbCBjbGVhbnVwDQo+ID4gVFhEIHdiLnN0YXR1cy4NCj4gPiA+IHRoZSBudW1i ZXIgb2Ygc3RhdHVzIGNsZWFudXBlZCBpcyBhbHdheXMgdHhxLT50eF9yc190aHJlc2guDQo+ID4N Cj4gPiBZZXMsIGFuZCB3aGF0J3Mgd3Jvbmcgd2l0aCBpdD8NCj4gPg0KPiA+ID4NCj4gPiA+IFRo ZSAgQVBJIHJ0ZV9ldGhfdHhfZG9uZV9jbGVhbnVwKCkgaW4gcnRlX2V0aF9kZXYuaCBzaG93IHRo YXQgQHBhcmFtDQo+ID4gPiBmcmVlX2NudA0KPiA+ID4gICogICBNYXhpbXVtIG51bWJlciBvZiBw YWNrZXRzIHRvIGZyZWUuIFVzZSAwIHRvIGluZGljYXRlIGFsbCBwb3NzaWJsZSBwYWNrZXRzDQo+ ID4gPiAgKiAgIHNob3VsZCBiZSBmcmVlZC4gTm90ZSB0aGF0IGEgcGFja2V0IG1heSBiZSB1c2lu ZyBtdWx0aXBsZSBtYnVmcy4NCj4gPg0KPiA+IEkgZG9uJ3QgdGhpbmsgaXQgaXMgYSBnb29kIGFw cHJvYWNoLCBiZXR0ZXIgd291bGQgYmUgdG8gcmVwb3J0IG51bWJlciBvZiBmcmVlZA0KPiA+IG1i dWZzLCBidXQgb2ssIGFzIGl0IGlzIGEgcHVibGljIEFQSSwgd2UgcHJvYmFibHkgbmVlZCB0byBr ZWVwIGl0IGFzIGl0IGlzLg0KPiA+DQo+ID4gPiBhIG51bWJlciBtdXN0IGJlIHNldCB3aGlsZSBp eGdiZV94bWl0X2NsZWFudXAgYW5kIGl4Z2JlX3R4X2ZyZWVfYnVmcyBvbmx5DQo+ID4gaGF2ZSBv bmUgcGFyYW1ldGVyIHR4cS4NCj4gPg0KPiA+IFllcywgaXhnYmVfeG1pdF9jbGVhbnVwKCkgY2xl YW5zIHVwIGF0IGxlYXN0IHR4cS0+dHhfcnNfdGhyZXNoIFRYRHMuDQo+ID4gU28gaWYgdXNlciBy ZXF1ZXN0ZWQgbW9yZSBwYWNrZXRzIHRvIGJlIGZyZWVkIHdlIGNhbiBjYWxsIGl4Z2JlX3htaXRf Y2xlYW51cCgpDQo+ID4gaW4gYSBsb29wLg0KPiA+DQo+IA0KPiBUaGF0IGlzIGEgZ3JlYXQgaWRl YSBhbmQgSSBkaXNjdXNzIHdpdGggbXkgd29ya21hdGUgYWJvdXQgaXQgdG9kYXkuIHRoZXJlIGlz IGFsc28gc29tZQ0KPiBRdWVzdGlvbiB0aGF0IHdlIGRvbuKAmXQgY29uZmlybS4NCj4gQWN0dWFs bHkgaXQgY2FuIGNhbGwgaXhnYmVfeG1pdF9jbGVhbnVwKCkgaW4gYSBsb29wIGlmIHVzZXIgcmVx dWVzdGVkIG1vcmUgcGFja2V0cywNCj4gSG93IHRvIGRlYWwgd2l0aCB0aGUgTU9ELiBGb3IgZXhh bXBsZToNCj4gCVRoZSBkZWZhdWx0IHR4X3JzX3RocmVzaCBpcyAzMi5pZiB0aGUgY291bnQgb2Yg bWJ1ZnMgd2UgbmVlZCBmcmVlIGlzIDUwLg0KPiAJV2UgY2FuIGNhbGwgaXhnYmVfeG1pdF9jbGVh bnVwKCkgb25lIHRpbWUgdG8gZnJlZSAzMiBtYnVmcy4NCj4gCVRoZW4gaG93IGFib3V0IG90aGVy IDE4IG1idWZzLg0KPiAJMS5JZiB3ZSBkbyBub3RoaW5nLCBpdCBsb29rcyBub3QgZ29vZC4NCj4g CTIuaWYgd2UgY2FsbCBpeGdiZV94bWl0X2NsZWFudXAoKSBzdWNjZXNzZnVsbHksIHdlIGZyZWUg MTQgbWJ1ZnMgbW9yZS4NCj4gCTMuaWYgd2UgY2FsbCBpeGdiZV94bWl0X2NsZWFudXAoKSBmYWls LCB0aGUgc3RhdHVzIG9mIE5vLjMyIG1idWZzIGlzIG5vdCBERA0KPiAJICBXaGlsZSBObyAuMTgg aXMgREQuIFNvIHdlIGRvIG5vdCBmcmVlIDE4IG1idWZzIHdoYXQgd2UgY2FuIGFuZCBzaG91bGQg ZnJlZS4NCj4gDQo+IFdlIGhhdmUgdHJ5IHNvbWUgcGxhbnMgYWJvdXQgaXQsIGxpa2VzIGFkZCBw YXJhbWV0ZXIgZm9yIGl4Z2JlX3htaXRfY2xlYW51cCgpLCBjaGFuZ2UNCj4gIFR4X3JzX3RocmVz aCBvciBjb3B5IHRoZSBjb2RlIG9yIGl4Z2JlX3htaXRfY2xlYW51cCgpIGFzIGEgbmV3IGZ1bmN0 aW9uIHdpdGggbW9yZQ0KPiBQYXJhbWV0ZXIuIEJ1dCBhbGwgb2YgdGhlbSBzZWVtIG5vdCBwZXJm ZWN0Lg0KPiANCj4gU28gIGNhbiB5b3UgZ2l2ZSBzb21lIGNvbW1lbnQgYWJvdXQgaXQ/IEl0IHNl ZW1zIG5vdCBlYXN5IGFzIHdlIHRoaW5rIGJ5IHJldXNlIGZ1bmN0aW9uLg0KDQpNeSB0aG91Z2h0 IGFib3V0IGl0Og0KZm9yIHNpdHVhdGlvbnMgd2hlbiBjbnQgJSByc190aHJlc2ggIT0gMA0Kd2Un bGwgc3RpbGwgY2FsbCBpeGdiZV94bWl0X2NsZWFudXAoKSBjbnQgLyByc190aHJlc2ggKyAxIHRp bWVzLg0KQnV0IHRoZW4sIHdlIGNhbiBmcmVlIGp1c3QgY250ICUgcnNfdGhyZXNoIG1idWZzLCB3 aGlsZSBrZWVwaW5nDQpyZXN0IG9mIHRoZW0gaW50YWN0LiANCiAgDQpMZXQgc2F5IGF0IHNvbWUg bW9tZW50IHdlIGhhdmUgdHhxLT5uYl90eF9mcmVlPT0wLA0KYW5kIHVzZXIgY2FsbGVkIHR4X2Rv bmVfY2xlYW51cCh0eHEsIC4uLiwgY250PT01MCkNClNvIHdlIGNhbGwgaXhnYmVfeG1pdF9jbGVh bnVwKHR4cSkgZmlyc3QgdGltZS4NClN1cHBvc2UgaXQgZnJlZXMgMzIgVFhEcywgdGhlbiB3ZSB3 YWxrIHRocm91Z2ggY29ycmVzcG9uZGluZw0Kc3dfcmluZ1tdIGVudHJpZXMgYW5kIGxldCBzYXkg ZnJlZSAzMiBwYWNrZXRzIChvbmUgbWJ1ZiBwZXIgcGFja2V0KS4NClRoZW4gd2UgY2FsbCBpeGdi ZV94bWl0X2NsZWFudXAodHhxKSAgc2Vjb25kIHRpbWUuICANClN1cHBvc2UgaXQgd2lsbCBmcmVl IGFub3RoZXIgMzIgVFhEcywgd2UgYWdhaW4gd2FsayB0aG91ciBzd19yaW5nW10sDQpidXQgZnJl ZSBvbmx5IGZpcnN0IDE4IG1idWZzIGFuZCByZXR1cm4uDQpTdXBwb3NlIHdlIGNhbGwgdHhfZG9u ZV9jbGVhbnVwKHR4cSwgY250PTUwKSBpbW1lZGlhdGVseSBhZ2Fpbi4NCk5vdyB0eHEtPm5iX3R4 X2ZyZWU9PTY0LCBzbyB3ZSBjYW4gc3RhcnQgdG8gc2NhbiBzd19lbnRyaWVzW10NCmZyb20gdHhf dGFpbCBzdHJhaWdodHdheS4gV2UnbGwgc2tpcCBmaXJzdCA1MCBlbnRyaWVzIGFzIHRoZXkgYXJl IA0KYWxyZWFkeSBlbXB0eSwgdGhlbiBmcmVlIHJlbWFpbmluZyAxNCBtYnVmcywgdGhlbiB3aWxs DQpjYWxsIGl4Z2JlX3htaXRfY2xlYW51cCh0eHEpIGFnYWluLCBhbmQgaWYgaXQgd291bGQgYmUg c3VjY2Vzc2Z1bCwNCndpbGwgc2NhbiBhbmQgZnJlZSBhbm90aGVyIDMyIHN3X3JpbmdbXSBlbnRy aWVzLg0KVGhlbiBhZ2FpbiB3aWxsIGNhbGwgaXhnYmVfeG1pdF9jbGVhbnVwKHR4cSksIGJ1dCB3 aWxsIGZyZWUNCm9ubHkgZmlyc3QgOCBhdmFpbGFibGUgc3dfcmluZ1tdLm1idWYuICAgDQpQcm9i YWJseSBhIGJpdCBlYXNpZXIgd2l0aCB0aGUgY29kZToNCg0KdHhfZG9uZV9jbGVhbnVwKC4uLiwg dWludDMyX3QgY250KQ0Kew0KICAgICAgIHN3ciA9IHR4cS0+c3dfcmluZzsNCiAgICAgICB0eHIg ICAgID0gdHhxLT50eF9yaW5nOw0KICAgICAgIGlkICAgPSB0eHEtPnR4X3RhaWw7DQogIA0KICAg ICAgaWYgKHR4cS0+bmJfdHhfZnJlZSA9PSAwKQ0KICAgICAgICAgaXhnYmVfeG1pdF9jbGVhbnVw KHR4cSk7DQoNCiAgICAgIGZyZWUgPSAgdHhxLT5uYl90eF9mcmVlOyAgICAgICANCiAgICAgIGZv ciAobiA9IDA7IG4gPCBjbnQgJiYgZnJlZSAhPSAwOyApIHsNCg0KICAgICAgICAgIGZvciAoaiA9 IDA7IGogIT0gZnJlZSAmJiBuIDwgY250OyBqKyspIHsNCiAgICAgICAgICAgICBzd2UgPSAmc3dy W2lkICsgal07DQogICAgICAgICAgICAgaWYgKHN3ZS0+bWJ1ZiAhPSBOVUxMKSB7DQogICAgICAg ICAgICAgICAgICAgcnRlX3BrdG1idWZfZnJlZV9zZWcoc3dlLT5tYnVmKTsNCiAgICAgICAgICAg ICAgICAgICBzd2UtPm1idWYgPSBOVUxMOw0KICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAg ICAgLyogbGFzdCBzZWdtZW50IGluIHRoZSBwYWNrZXQsIGluY3JlbWVudCBwYWNrZXQgY291bnQg Ki8NCiAgICAgICAgICAgICAgICAgIG4gKz0gKHN3ZS0+bGFzdF9pZCA9PSBpZCArIGopOw0KICAg ICAgICAgICAgIH0NCiAgICAgICAgICB9IA0KDQogICAgICAgICAgaWYgKG4gPCBjbnQpIHsgDQog ICAgICAgICAgICAgICBpeGdiZV94bWl0X2NsZWFudXAodHhxKTsNCiAgICAgICAgICAgICAgIGZy ZWUgPSAgIHR4cS0+bmJfdHhfZnJlZSAtIGZyZWU7DQogICAgICAgICAgfQ0KICAgICB9DQogICAg IHJldHVybiBuOw0KfQ0KDQpGb3IgdGhlIHNpdHVhdGlvbiB3aGVuIHRoZXJlIGFyZSBsZXNzIHRo ZW4gcnhfdGhyZXNoIGZyZWUgVFhEcw0KKCh0eHEtPnR4X3JpbmdbZGVzY190b19jbGVhbl90b10u d2Iuc3RhdHVzICYgSVhHQkVfVFhEX1NUQVRfREQpID09IDApDQp3ZSBkbyBub3RoaW5nIC0gaW4g dGhhdCBjYXNlIHdlIGNvbnNpZGVyIHRoZXJlIGFyZSBubyBtb3JlIG1idWZzIHRvIGZyZWUuDQoN Cj4gDQo+IA0KPiA+ID4gQW5kIHdoYXQgc2hvdWxkIGRvIGlzIG5vdCBvbmx5IGZyZWUgYnVmZmVy cyBhbmQgc3RhdHVzIGJ1dCBhbHNvIGNoZWNrDQo+ID4gPiB3aGljaCBidWZzIGFyZSBmcm9tICBP bmUgcGFja2V0IGFuZCBjb3VudCB0aGUgcGFja2V0IGZyZWVkLg0KPiA+DQo+ID4gaXhnYmVfeG1p dF9jbGVhbnVwKCkgaXRzZWxmIGRvZXNuJ3QgZnJlZSBtYnVmcyBpdHNlbGYuDQo+ID4gSXQgb25s eSBjbGVhbnMgdXAgVFhEcy4NCj4gPiBTbyBpbiB0eF9kb25lX2NsZWFudXAoKSBhZnRlciBjYWxs aW5nIGl4Z2JlX3htaXRfY2xlYW51cCgpIHlvdSdsbCBzdGlsbCBuZWVkIHRvIGdvDQo+ID4gdGhy b3VnaCBzd19yaW5nW10gZW50cmllcyB0aGF0IGNvcnJlc3BvbmQgdG8gZnJlZSBUWERzIGFuZCBj YWxsIG1idWZfc2VnX2ZyZWUoKS4NCj4gPiBZb3UgY2FuIGNvdW50IG51bWJlciBvZiBmdWxsIHBh Y2tldHMgaGVyZS4NCj4gPg0KPiA+ID4gU28gSSB0aGluayBpdCBjYW4ndCBiZSBpbXBsZW1lbnRl ZCB0aGF0IHJldXNlIGZ1bmN0aW9uIHhtaXRfY2xlYW51cCB3aXRob3V0DQo+ID4gY2hhbmdlIGl0 Lg0KPiA+ID4gQW5kIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiB3aXRoIHRoZSBjb2RlIG9mIHhtaXRf Y2xlYW51cCB3aWxsIGNhdXNlIG1hbnkNCj4gPiBkdXBsaWNhdGlvbi4NCj4gPg0KPiA+IEkgZG9u J3QgdGhpbmsgaXQgd291bGQuDQo+ID4gSSB0aGluayBhbGwgd2UgbmVlZCBoZXJlIGlzIHNvbWV0 aGluZyBsaWtlIHRoYXQgKG5vdGUgaXQgaXMgc2NoZW1hdGljIG9uZSwgZG9lc24ndA0KPiA+IHRh a2UgaW50byBhY2NvdW5mIHRoYXQgVFhEIHJpbmcgaXMgY2lyY3VsYXIpOg0KPiA+DQo+ID4gdHhf ZG9uZV9jbGVhbnVwKC4uLiwgdWludDMyX3QgY250KQ0KPiA+IHsNCj4gPiAgICAgICAvKiB3ZSBo YXZlIHR4cS0+bmJfdHhfZnJlZSBUWERzIHN0YXJ0aW5nIGZyb20gdHhxLT50eF90YWlsLg0KPiA+ ICAgICAgICAgICAgU2NhbiB0aGVtIGZpcnN0IGFuZCBmcmVlIGFzIG1hbnkgbWJ1ZnMgYXMgd2Ug Y2FuLg0KPiA+ICAgICAgICAgICAgSWYgd2UgbmVlZCBtb3JlIG1idWZzIHRvIGZyZWUgY2FsbCAg aXhnYmVfeG1pdF9jbGVhbnVwKCkNCj4gPiAgICAgICAgICAgIHRvIGZyZWUgbW9yZSBUWERzLiAq Lw0KPiA+DQo+ID4gICAgICAgIHN3ciA9IHR4cS0+c3dfcmluZzsNCj4gPiAgICAgICAgdHhyICAg ICA9IHR4cS0+dHhfcmluZzsNCj4gPiAgICAgICAgaWQgICA9IHR4cS0+dHhfdGFpbDsNCj4gPiAg ICAgICAgZnJlZSA9ICB0eHEtPm5iX3R4X2ZyZWU7DQo+ID4NCj4gPiAgICAgICAgZm9yIChuID0g MDsgbiA8IGNudCAmJiBmcmVlICE9IDA7ICkgew0KPiA+DQo+ID4gICAgICAgICAgIGZvciAoaiA9 IDA7IGogIT0gZnJlZSAmJiBuIDwgY250OyBqKyspIHsNCj4gPiAgICAgICAgICAgICAgc3dlID0g JnN3cltpZCArIGpdOw0KPiA+ICAgICAgICAgICAgICBpZiAoc3dlLT5tYnVmICE9IE5VTEwpIHsN Cj4gPiAgICAgICAgICAgICAgICAgICAgcnRlX3BrdG1idWZfZnJlZV9zZWcoc3dlLT5tYnVmKTsN Cj4gPiAgICAgICAgICAgICAgICAgICAgc3dlLT5tYnVmID0gTlVMTDsNCj4gPiAgICAgICAgICAg ICAgfQ0KPiA+ICAgICAgICAgICAgICBuICs9IChzd2UtPmxhc3RfaWQgPT0gaWQgKyBqKQ0KPiA+ ICAgICAgICAgICB9DQo+ID4NCj4gPiAgICAgICAgICAgaWYgKG4gPCBjbnQpIHsNCj4gPiAgICAg ICAgICAgICAgICBpeGdiZV94bWl0X2NsZWFudXAodHhxKTsNCj4gPiAgICAgICAgICAgICAgICBm cmVlID0gICB0eHEtPm5iX3R4X2ZyZWUgLSBmcmVlOw0KPiA+ICAgICAgICAgICB9DQo+ID4gICAg ICB9DQo+ID4gICAgICByZXR1cm4gbjsNCj4gPiB9DQo+ID4NCj4gPiA+DQo+ID4gPiBBYm92ZSBh bGwgLCBpdCBzZWVtIG5vdCBhIHBlcmZlY3QgaWRlYSB0byByZXVzZSBpeGdiZV94bWl0X2NsZWFu dXAoKS4NCj4gPg0KPiA+IFRvdGFsbHkgZGlzYWdyZWUsIHNlZSBhYm92ZS4NCj4gPg0KPiA+ID4N Cj4gPiA+IFNlY29uZC4NCj4gPiA+IFRoZSBmdW5jdGlvbiBpbiBwYXRjaCBpcyBjb3B5IGZyb20g Y29kZSBpbiBpZ2Jfcnh0eC5jLiBpdCBhbHJlYWR5DQo+ID4gPiB1cGRhdGVkIGluIDIwMTcsIFRo ZSBjb21taXQgaWQgaXMNCj4gPiA4ZDkwN2QyYjc5ZjdhNTRjODA5ZjFjNDQ5NzBmZjQ1NWZhMjg2 NWUxLg0KPiA+DQo+ID4gSSByZWFsaXplZCB0aGF0Lg0KPiA+IEJ1dCBJIHRoaW5rIGl0IGFzIGEg cHJvYmxlbSwgbm90IGEgcG9zaXRpdmUgdGhpbmcuDQo+ID4gV2hpbGUgdGhleSBkbyBoYXZlIHNv bWUgc2ltaWxhcml0aWVzLCBpZ2IgYWJkIGl4Z2JlIGFyZSBQTURzIGZvciBkaWZmZXJlbnQNCj4g PiBkZXZpY2VzLCBhbmQgdGhlaXIgVFggY29kZSBkaWZmZXJzIHF1aXRlIGEgbG90LiBMZXQgc2F5 IGlnYiBkb2Vzbid0IHVzZQ0KPiA+IHR4X3JzX3RocmVzaG9sZCwgYnV0IGluc3RlYWQgc2V0IFJT IGJpdCBmb3IgZWFjaCBsYXN0IFRYRC4NCj4gPiBTbywganVzdCBibGluZGx5IGNvcHlpbmcgdHhf ZG9uZV9jbGVhbnVwKCkgZnJvbSBpZ2IgdG8gaXhnYmUgZG9lc24ndCBsb29rIGxpa2UgYQ0KPiA+ IGdvb2QgaWRlYSB0byBtZS4NCj4gPg0KPiA+ID4gSSB0cnVzdCB0aGUgbG9naWMgb2YgY29kZSBp cyByaWdodC4NCj4gPiA+IEFjdHVhbGx5IGl0IGRvbid0IGNvbXBsZXRlIGZvciBpeGdiZSwgaTQw ZSBhbmQgaWNlLCB3aGlsZSBpdCBkb24ndA0KPiA+ID4gY2hhbmdlIHRoZSB2YWx1ZSBvZiBsYXN0 X2Rlc2NfY2xlYW5lZCBhbmQgdHhfbmV4dF9kZC4gQW5kIGl0J3MNCj4gPiA+IGJlZ2lubmluZyBw cmVmZXIgbGFzdF9kZXNjX2NsZWFuZWQgb3IgIHR4X25leHRfZGQoZm9yIG9mZmxvYWQgb3Igc2lt cGxlKSB0bw0KPiA+IHR4X3RhaWwuDQo+ID4gPg0KPiA+ID4gU28sIEkgc3VnZ2VzdCB0byB1c2Ug dGhlIG9sZCBmdW5jdGlvbiBhbmQgZml4IHRoZSBpc3N1ZS4NCj4gPiA+DQo+ID4gPiA+ID4NCj4g PiA+ID4gPg0KPiA+ID4gPiA+ID4gPlRoaXMgaXMgdGhlIGZpcnN0IHBhY2tldCB0aGF0IHdpbGwg YmUNCj4gPiA+ID4gPiA+ID4gKyAqIGF0dGVtcHRlZCB0byBiZSBmcmVlZC4NCj4gPiA+ID4gPiA+ ID4gKyAqLw0KPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ICsvKiBHZXQgbGFzdCBzZWdt ZW50IGluIG1vc3QgcmVjZW50bHkgYWRkZWQgcGFja2V0LiAqLyB0eF9sYXN0DQo+ID4gPiA+ID4g PiA+ICs9IHN3X3JpbmdbdHhxLT50eF90YWlsXS5sYXN0X2lkOw0KPiA+ID4gPiA+ID4gPiArDQo+ ID4gPiA+ID4gPiA+ICsvKiBHZXQgdGhlIG5leHQgc2VnbWVudCwgd2hpY2ggaXMgdGhlIG9sZGVz dCBzZWdtZW50IGluIHJpbmcuDQo+ID4gPiA+ID4gPiA+ICsqLyB0eF9maXJzdCA9IHN3X3Jpbmdb dHhfbGFzdF0ubmV4dF9pZDsNCj4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiArLyogU2V0 IHRoZSBjdXJyZW50IGluZGV4IHRvIHRoZSBmaXJzdC4gKi8gdHhfaWQgPSB0eF9maXJzdDsNCj4g PiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiArLyoNCj4gPiA+ID4gPiA+ID4gKyAqIExvb3Ag dGhyb3VnaCBlYWNoIHBhY2tldC4gRm9yIGVhY2ggcGFja2V0LCB2ZXJpZnkgdGhhdCBhbg0KPiA+ ID4gPiA+ID4gPiArICogbWJ1ZiBleGlzdHMgYW5kIHRoYXQgdGhlIGxhc3Qgc2VnbWVudCBpcyBm cmVlLiBJZiBzbywgZnJlZQ0KPiA+ID4gPiA+ID4gPiArICogaXQgYW5kIG1vdmUgb24uDQo+ID4g PiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiA+ID4gK3doaWxlICgxKSB7DQo+ID4gPiA+ID4gPiA+ ICt0eF9sYXN0ID0gc3dfcmluZ1t0eF9pZF0ubGFzdF9pZDsNCj4gPiA+ID4gPiA+ID4gKw0KPiA+ ID4gPiA+ID4gPiAraWYgKHN3X3JpbmdbdHhfbGFzdF0ubWJ1Zikgew0KPiA+ID4gPiA+ID4gPiAr aWYgKCEodHhyW3R4X2xhc3RdLndiLnN0YXR1cyAmDQo+ID4gPiA+ID4gPiA+ICtJWEdCRV9UWERf U1RBVF9ERCkpDQo+ID4gPiA+ID4gPiA+ICticmVhazsNCj4gPiA+ID4gPiA+ID4gKw0KPiA+ID4g PiA+ID4gPiArLyogR2V0IHRoZSBzdGFydCBvZiB0aGUgbmV4dCBwYWNrZXQuICovIHR4X25leHQg PQ0KPiA+ID4gPiA+ID4gPiArc3dfcmluZ1t0eF9sYXN0XS5uZXh0X2lkOw0KPiA+ID4gPiA+ID4g PiArDQo+ID4gPiA+ID4gPiA+ICsvKg0KPiA+ID4gPiA+ID4gPiArICogTG9vcCB0aHJvdWdoIGFs bCBzZWdtZW50cyBpbiBhDQo+ID4gPiA+ID4gPiA+ICsgKiBwYWNrZXQuDQo+ID4gPiA+ID4gPiA+ ICsgKi8NCj4gPiA+ID4gPiA+ID4gK2RvIHsNCj4gPiA+ID4gPiA+ID4gK3J0ZV9wa3RtYnVmX2Zy ZWVfc2VnKHN3X3JpbmdbdHhfaWRdLm1idWYpOw0KPiA+ID4gPiA+ID4gPiArc3dfcmluZ1t0eF9p ZF0ubWJ1ZiA9IE5VTEw7DQo+ID4gPiA+ID4gPiA+ICtzd19yaW5nW3R4X2lkXS5sYXN0X2lkID0g dHhfaWQ7DQo+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gKy8qIE1vdmUgdG8gbmV4dCBz ZWdtZW50LiAqLw0KPiA+ID4gPiA+ID4gPiArdHhfaWQgPSBzd19yaW5nW3R4X2lkXS5uZXh0X2lk Ow0KPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ICt9IHdoaWxlICh0eF9pZCAhPSB0eF9u ZXh0KTsNCj4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiArLyoNCj4gPiA+ID4gPiA+ID4g KyAqIEluY3JlbWVudCB0aGUgbnVtYmVyIG9mIHBhY2tldHMNCj4gPiA+ID4gPiA+ID4gKyAqIGZy ZWVkLg0KPiA+ID4gPiA+ID4gPiArICovDQo+ID4gPiA+ID4gPiA+ICtjb3VudCsrOw0KPiA+ID4g PiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ICtpZiAodW5saWtlbHkoY291bnQgPT0gKGludClmcmVl X2NudCkpIGJyZWFrOyB9IGVsc2Ugew0KPiA+ID4gPiA+ID4gPiArLyoNCj4gPiA+ID4gPiA+ID4g KyAqIFRoZXJlIGFyZSBtdWx0aXBsZSByZWFzb25zIHRvIGJlIGhlcmU6DQo+ID4gPiA+ID4gPiA+ ICsgKiAxKSBBbGwgdGhlIHBhY2tldHMgb24gdGhlIHJpbmcgaGF2ZSBiZWVuDQo+ID4gPiA+ID4g PiA+ICsgKiAgICBmcmVlZCAtIHR4X2lkIGlzIGVxdWFsIHRvIHR4X2ZpcnN0DQo+ID4gPiA+ID4g PiA+ICsgKiAgICBhbmQgc29tZSBwYWNrZXRzIGhhdmUgYmVlbiBmcmVlZC4NCj4gPiA+ID4gPiA+ ID4gKyAqICAgIC0gRG9uZSwgZXhpdA0KPiA+ID4gPiA+ID4gPiArICogMikgSW50ZXJmYWNlcyBo YXMgbm90IHNlbnQgYSByaW5ncyB3b3J0aCBvZg0KPiA+ID4gPiA+ID4gPiArICogICAgcGFja2V0 cyB5ZXQsIHNvIHRoZSBzZWdtZW50IGFmdGVyIHRhaWwgaXMNCj4gPiA+ID4gPiA+ID4gKyAqICAg IHN0aWxsIGVtcHR5LiBPciBhIHByZXZpb3VzIGNhbGwgdG8gdGhpcw0KPiA+ID4gPiA+ID4gPiAr ICogICAgZnVuY3Rpb24gZnJlZWQgc29tZSBvZiB0aGUgc2VnbWVudHMgYnV0DQo+ID4gPiA+ID4g PiA+ICsgKiAgICBub3QgYWxsIHNvIHRoZXJlIGlzIGEgaG9sZSBpbiB0aGUgbGlzdC4NCj4gPiA+ ID4gPiA+ID4gKyAqICAgIEhvcGVmdWxseSB0aGlzIGlzIGEgcmFyZSBjYXNlLg0KPiA+ID4gPiA+ ID4gPiArICogICAgLSBXYWxrIHRoZSBsaXN0IGFuZCBmaW5kIHRoZSBuZXh0IG1idWYuIElmDQo+ ID4gPiA+ID4gPiA+ICsgKiAgICAgIHRoZXJlIGlzbid0IG9uZSwgdGhlbiBkb25lLg0KPiA+ID4g PiA+ID4gPiArICovDQo+ID4gPiA+ID4gPiA+ICtpZiAobGlrZWx5KHR4X2lkID09IHR4X2ZpcnN0 ICYmIGNvdW50ICE9IDApKSBicmVhazsNCj4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiAr LyoNCj4gPiA+ID4gPiA+ID4gKyAqIFdhbGsgdGhlIGxpc3QgYW5kIGZpbmQgdGhlIG5leHQgbWJ1 ZiwgaWYgYW55Lg0KPiA+ID4gPiA+ID4gPiArICovDQo+ID4gPiA+ID4gPiA+ICtkbyB7DQo+ID4g PiA+ID4gPiA+ICsvKiBNb3ZlIHRvIG5leHQgc2VnbWVudC4gKi8NCj4gPiA+ID4gPiA+ID4gK3R4 X2lkID0gc3dfcmluZ1t0eF9pZF0ubmV4dF9pZDsNCj4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ ID4gPiAraWYgKHN3X3JpbmdbdHhfaWRdLm1idWYpDQo+ID4gPiA+ID4gPiA+ICticmVhazsNCj4g PiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiArfSB3aGlsZSAodHhfaWQgIT0gdHhfZmlyc3Qp Ow0KPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ICsvKg0KPiA+ID4gPiA+ID4gPiArICog RGV0ZXJtaW5lIHdoeSBwcmV2aW91cyBsb29wIGJhaWxlZC4gSWYgdGhlcmUNCj4gPiA+ID4gPiA+ ID4gKyAqIGlzIG5vdCBhbiBtYnVmLCBkb25lLg0KPiA+ID4gPiA+ID4gPiArICovDQo+ID4gPiA+ ID4gPiA+ICtpZiAoc3dfcmluZ1t0eF9pZF0ubWJ1ZiA9PSBOVUxMKSBicmVhazsgfSB9DQo+ID4g PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gK3JldHVybiBjb3VudDsNCj4gPiA+ID4gPiA+ID4g K30NCj4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiAgc3RhdGljIHZvaWQgX19hdHRyaWJ1 dGVfXygoY29sZCkpDQo+ID4gPiA+ID4gPiA+IGl4Z2JlX3R4X2ZyZWVfc3dyaW5nKHN0cnVjdCBp eGdiZV90eF9xdWV1ZSAqdHhxKSAgeyBkaWZmIC0tZ2l0DQo+ID4gPiA+ID4gPiA+IGEvZHJpdmVy cy9uZXQvaXhnYmUvaXhnYmVfcnh0eC5oDQo+ID4gPiA+ID4gPiA+IGIvZHJpdmVycy9uZXQvaXhn YmUvaXhnYmVfcnh0eC5oIGluZGV4IDUwNWQzNDRiOS4uMmMzNzcwYWY2DQo+ID4gPiA+ID4gPiA+ IDEwMDY0NA0KPiA+ID4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9yeHR4 LmgNCj4gPiA+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcnh0eC5oDQo+ ID4gPiA+ID4gPiA+IEBAIC0yODUsNiArMjg1LDggQEAgaW50DQo+ID4gPiA+ID4gPiA+IGl4Z2Jl X3J4X3ZlY19kZXZfY29uZl9jb25kaXRpb25fY2hlY2soc3RydWN0DQo+ID4gPiA+ID4gPiA+IHJ0 ZV9ldGhfZGV2ICpkZXYpOyAgaW50IGl4Z2JlX3J4cV92ZWNfc2V0dXAoc3RydWN0DQo+ID4gPiA+ ID4gPiA+IGl4Z2JlX3J4X3F1ZXVlICpyeHEpOyAgdm9pZA0KPiA+ID4gPiA+ID4gPiBpeGdiZV9y eF9xdWV1ZV9yZWxlYXNlX21idWZzX3ZlYyhzdHJ1Y3QNCj4gPiA+ID4gPiA+ID4gaXhnYmVfcnhf cXVldWUgKnJ4cSk7DQo+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ICtpbnQgaXhnYmVfdHhf ZG9uZV9jbGVhbnVwKHZvaWQgKnR4cSwgdWludDMyX3QgZnJlZV9jbnQpOw0KPiA+ID4gPiA+ID4g PiArDQo+ID4gPiA+ID4gPiA+ICBleHRlcm4gY29uc3QgdWludDMyX3QgcHR5cGVfdGFibGVbSVhH QkVfUEFDS0VUX1RZUEVfTUFYXTsNCj4gPiA+ID4gPiA+ID4gIGV4dGVybiBjb25zdCB1aW50MzJf dA0KPiA+ID4gPiA+ID4gPiBwdHlwZV90YWJsZV90bltJWEdCRV9QQUNLRVRfVFlQRV9UTl9NQVhd Ow0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiAtLQ0KPiA+ID4gPiA+ID4gPiAyLjE3LjEN Cj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4NCj4gPiA+ID4NCj4gPiA+DQo+ID4NCj4gDQoNCg==