From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by dpdk.space (Postfix) with ESMTP id D79EDA0096 for ; Fri, 12 Apr 2019 22:21:46 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A34C01B3E0; Fri, 12 Apr 2019 22:21:15 +0200 (CEST) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40044.outbound.protection.outlook.com [40.107.4.44]) by dpdk.org (Postfix) with ESMTP id BC9331B3D7 for ; Fri, 12 Apr 2019 22:21:10 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PSObT+URMHZAybBNp/rLxVu+r/5/qMEHCJKIBl/6/90=; b=ObpBIxOkQx8/8VImlfzWoVjA8H+i0thkICxJa85dvxNRI/k4H5AcZyhQHZ9xjhhpKZTirI39SrFVYb1yZcrtGvMXSsYg+ul/iCXnFIcwTLn+6Cc8LI52k8yXyojnePC+ova3DwPuHqAJKB2GXlk6Tc05ESFLA+I0enxjOWEnyDc= Received: from VE1PR08MB5149.eurprd08.prod.outlook.com (20.179.30.152) by VE1PR08MB4701.eurprd08.prod.outlook.com (10.255.114.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1771.18; Fri, 12 Apr 2019 20:21:08 +0000 Received: from VE1PR08MB5149.eurprd08.prod.outlook.com ([fe80::e0ae:ecad:ec5:8177]) by VE1PR08MB5149.eurprd08.prod.outlook.com ([fe80::e0ae:ecad:ec5:8177%2]) with mapi id 15.20.1792.016; Fri, 12 Apr 2019 20:21:08 +0000 From: Honnappa Nagarahalli To: "paulmck@linux.ibm.com" CC: "konstantin.ananyev@intel.com" , "stephen@networkplumber.org" , "marko.kovacevic@intel.com" , "dev@dpdk.org" , "Gavin Hu (Arm Technology China)" , Dharmik Thakkar , Malvika Gupta , nd , nd Thread-Topic: [PATCH v4 1/3] rcu: add RCU library supporting QSBR mechanism Thread-Index: AQHU78lDsy4W0sThdUi8p6MItiPVFqY2RtWAgADPY4CAANKj8A== Date: Fri, 12 Apr 2019 20:21:08 +0000 Message-ID: References: <20181122033055.3431-1-honnappa.nagarahalli@arm.com> <20190410112006.21644-1-honnappa.nagarahalli@arm.com> <20190410112006.21644-2-honnappa.nagarahalli@arm.com> <20190410181432.GO14111@linux.ibm.com> <20190411152613.GZ14111@linux.ibm.com> In-Reply-To: <20190411152613.GZ14111@linux.ibm.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Honnappa.Nagarahalli@arm.com; x-originating-ip: [217.140.111.135] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 1da5ed42-b893-4a3e-0bfa-08d6bf84661c x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600139)(711020)(4605104)(4618075)(2017052603328)(7193020); SRVR:VE1PR08MB4701; x-ms-traffictypediagnostic: VE1PR08MB4701: nodisclaimer: True x-microsoft-antispam-prvs: x-forefront-prvs: 0005B05917 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(396003)(346002)(366004)(376002)(39860400002)(136003)(189003)(199004)(229853002)(11346002)(106356001)(446003)(26005)(7696005)(3846002)(97736004)(186003)(305945005)(81156014)(68736007)(486006)(81166006)(86362001)(476003)(2351001)(76176011)(6506007)(71200400001)(71190400001)(105586002)(1730700003)(93886005)(72206003)(256004)(8676002)(478600001)(102836004)(14454004)(6436002)(5640700003)(5660300002)(33656002)(14444005)(7736002)(74316002)(316002)(6916009)(6246003)(4326008)(55016002)(2906002)(66066001)(2501003)(30864003)(8936002)(54906003)(6116002)(99286004)(53936002)(53946003)(9686003)(52536014)(25786009)(579004); DIR:OUT; SFP:1101; SCL:1; SRVR:VE1PR08MB4701; H:VE1PR08MB5149.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: Zn3L6oPKogdeMaaRzYOIjrLAwsqbbLUsvL1sTpD00MrB/evMYMIjRIqjq5sroc9EIIj0Uzn+gIZipOTtDq5yQae4oSZG26HdlGnIsi+n9O2QQEuzZJ901g1/+SwOB3UgJPXo8EJ4BTp2K7d1OL5KIAde4JZs0OH3E/Zpth/HpPEhytKhGZzmI/oMsPau4ppafGA3HGQGGaDK1IXxcr6RW2848keUGwA5fS49n3GZ9dR9+kCTYj9VHjoYoTIMC6AETmvWf3QwdQ9xuCLzU64J4ocJ0DjtI1L4y+YpcOJ3eE5gySBwty0uRRp0zRzqTW00fndrei0NdkfhZQyUZ2jq3QNA7/80PrlcdrsuruPjLsRGBHdUiSbZao+pAD0qgoGj3/6nGFS/JXeRqFuNH6NeCMQQLVb8hcvBHXI+ORXGjDE= Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1da5ed42-b893-4a3e-0bfa-08d6bf84661c X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Apr 2019 20:21:08.7875 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB4701 Subject: Re: [dpdk-dev] [PATCH v4 1/3] rcu: add RCU library supporting QSBR mechanism 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" Message-ID: <20190412202108.1l1cURvOaRe8KVGoiVnP-vAOe5HPF4rKdXZHj2JGnBw@z> PHNuaXA+DQoNCj4gPiA+DQo+ID4gPiBPbiBXZWQsIEFwciAxMCwgMjAxOSBhdCAwNjoyMDowNEFN IC0wNTAwLCBIb25uYXBwYSBOYWdhcmFoYWxsaQ0KPiB3cm90ZToNCj4gPiA+ID4gQWRkIFJDVSBs aWJyYXJ5IHN1cHBvcnRpbmcgcXVpZXNjZW50IHN0YXRlIGJhc2VkIG1lbW9yeQ0KPiA+ID4gPiBy ZWNsYW1hdGlvbg0KPiA+ID4gbWV0aG9kLg0KPiA+ID4gPiBUaGlzIGxpYnJhcnkgaGVscHMgaWRl bnRpZnkgdGhlIHF1aWVzY2VudCBzdGF0ZSBvZiB0aGUgcmVhZGVyDQo+ID4gPiA+IHRocmVhZHMg c28gdGhhdCB0aGUgd3JpdGVycyBjYW4gZnJlZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aA0K PiA+ID4gPiB0aGUgbG9jayBsZXNzIGRhdGEgc3RydWN0dXJlcy4NCj4gPiA+DQo+ID4gPiBJIGRv bid0IHNlZSBhbnkgc2lnbiBvZiByZWFkLXNpZGUgbWFya2VycyAocmN1X3JlYWRfbG9jaygpIGFu ZA0KPiA+ID4gcmN1X3JlYWRfdW5sb2NrKCkgaW4gdGhlIExpbnV4IGtlcm5lbCwgdXNlcnNwYWNl IFJDVSwgZXRjLikuDQo+ID4gPg0KPiA+ID4gWWVzLCBzdHJpY3RseSBzcGVha2luZywgdGhlc2Ug YXJlIG5vdCBuZWVkZWQgZm9yIFFTQlIgdG8gb3BlcmF0ZSwNCj4gPiA+IGJ1dCB0aGV5DQo+ID4g VGhlc2UgQVBJcyB3b3VsZCBiZSBlbXB0eSBmb3IgUVNCUi4NCj4gPg0KPiA+ID4gbWFrZSBpdCB3 YXkgZWFzaWVyIHRvIG1haW50YWluIGFuZCBkZWJ1ZyBjb2RlIHVzaW5nIFJDVS4gIEZvcg0KPiA+ ID4gZXhhbXBsZSwgZ2l2ZW4gdGhlIHJlYWQtc2lkZSBtYXJrZXJzLCB5b3UgY2FuIGNoZWNrIGZv ciBlcnJvcnMgbGlrZQ0KPiA+ID4gaGF2aW5nIGEgY2FsbCB0bw0KPiA+ID4gcnRlX3JjdV9xc2Jy X3F1aWVzY2VudCgpIGluIHRoZSBtaWRkbGUgb2YgYSByZWFkZXIgcXVpdGUgZWFzaWx5Lg0KPiA+ ID4gV2l0aG91dCB0aG9zZSByZWFkLXNpZGUgbWFya2VycywgbGlmZSBjYW4gYmUgcXVpdGUgaGFy ZCBhbmQgeW91IHdpbGwNCj4gPiA+IHJlYWxseSBoYXRlIHlvdXJzZWxmIGZvciBmYWlsaW5nIHRv IGhhdmUgcHJvdmlkZWQgdGhlbS4NCj4gPg0KPiA+IFdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJz dG9vZCB0aGlzLCBkbyB5b3UgbWVhbiB0aGUgYXBwbGljYXRpb24NCj4gd291bGQgbWFyayBiZWZv cmUgYW5kIGFmdGVyIGFjY2Vzc2luZyB0aGUgc2hhcmVkIGRhdGEgc3RydWN0dXJlIG9uIHRoZQ0K PiByZWFkZXIgc2lkZT8NCj4gPg0KPiA+IHJ0ZV9yY3VfcXNicl9sb2NrKCkNCj4gPiA8YmVnaW4g YWNjZXNzIHNoYXJlZCBkYXRhIHN0cnVjdHVyZT4NCj4gPiAuLi4NCj4gPiAuLi4NCj4gPiA8ZW5k IGFjY2VzcyBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmU+DQo+ID4gcnRlX3JjdV9xc2JyX3VubG9jaygp DQo+IA0KPiBZZXMsIHRoYXQgaXMgdGhlIGlkZWEuDQo+IA0KPiA+IElmIHNvbWVvbmUgaXMgZGVi dWdnaW5nIHRoaXMgY29kZSwgdGhleSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGlzDQo+ IGFuIHVubG9jayBmb3IgZXZlcnkgbG9jayBhbmQgdGhlcmUgaXMgbm8gY2FsbCB0byBydGVfcmN1 X3FzYnJfcXVpZXNjZW50IGluDQo+IGJldHdlZW4uDQo+ID4gSXQgc291bmRzIGdvb2QgdG8gbWUu IE9idmlvdXNseSwgdGhleSB3aWxsIG5vdCBhZGQgYW55IGFkZGl0aW9uYWwgY3ljbGVzDQo+IGFz IHdlbGwuDQo+ID4gUGxlYXNlIGxldCBtZSBrbm93IGlmIG15IHVuZGVyc3RhbmRpbmcgaXMgY29y cmVjdC4NCj4gDQo+IFllcy4gIEFuZCBpbiBzb21lIHNvcnQgb2YgZGVidWcgbW9kZSwgeW91IGNv dWxkIGNhcHR1cmUgdGhlIGNvdW50ZXIgYXQNCj4gcnRlX3JjdV9xc2JyX2xvY2soKSB0aW1lIGFu ZCBjaGVjayBpdCBhdCBydGVfcmN1X3FzYnJfdW5sb2NrKCkgdGltZS4gIElmIHRoZQ0KPiBjb3Vu dGVyIGhhcyBhZHZhbmNlZCB0b28gZmFyIChtb3JlIHRoYW4gb25lLCBpZiBJIGFtIG5vdCB0b28g Y29uZnVzZWQpDQo+IHRoZXJlIGlzIGEgYnVnLiAgQWxzbyBpbiBkZWJ1ZyBtb2RlLCB5b3UgY291 bGQgaGF2ZSBydGVfcmN1X3FzYnJfbG9jaygpDQo+IGluY3JlbWVudCBhIHBlci10aHJlYWQgY291 bnRlciBhbmQgcnRlX3JjdV9xc2JyX3VubG9jaygpIGRlY3JlbWVudCBpdC4NCj4gSWYgdGhlIGNv dW50ZXIgaXMgbm9uLXplcm8gYXQgYSBxdWllc2NlbnQgc3RhdGUsIHRoZXJlIGlzIGEgYnVnLg0K PiBBbmQgc28gb24uDQo+IA0KQWRkZWQgdGhpcyBpbiBWNQ0KDQo8c25pcD4NCg0KPiA+ID4gPiAr DQo+ID4gPiA+ICsvKiBHZXQgdGhlIG1lbW9yeSBzaXplIG9mIFFTQlIgdmFyaWFibGUgKi8gc2l6 ZV90DQo+ID4gPiA+ICtfX3J0ZV9leHBlcmltZW50YWwgcnRlX3JjdV9xc2JyX2dldF9tZW1zaXpl KHVpbnQzMl90DQo+IG1heF90aHJlYWRzKSB7DQo+ID4gPiA+ICsJc2l6ZV90IHN6Ow0KPiA+ID4g PiArDQo+ID4gPiA+ICsJaWYgKG1heF90aHJlYWRzID09IDApIHsNCj4gPiA+ID4gKwkJcnRlX2xv ZyhSVEVfTE9HX0VSUiwgcmN1X2xvZ190eXBlLA0KPiA+ID4gPiArCQkJIiVzKCk6IEludmFsaWQg bWF4X3RocmVhZHMgJXVcbiIsDQo+ID4gPiA+ICsJCQlfX2Z1bmNfXywgbWF4X3RocmVhZHMpOw0K PiA+ID4gPiArCQlydGVfZXJybm8gPSBFSU5WQUw7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJcmV0 dXJuIDE7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJc3ogPSBzaXplb2Yoc3Ry dWN0IHJ0ZV9yY3VfcXNicik7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkvKiBBZGQgdGhlIHNpemUg b2YgcXVpZXNjZW50IHN0YXRlIGNvdW50ZXIgYXJyYXkgKi8NCj4gPiA+ID4gKwlzeiArPSBzaXpl b2Yoc3RydWN0IHJ0ZV9yY3VfcXNicl9jbnQpICogbWF4X3RocmVhZHM7DQo+ID4gPiA+ICsNCj4g PiA+ID4gKwkvKiBBZGQgdGhlIHNpemUgb2YgdGhlIHJlZ2lzdGVyZWQgdGhyZWFkIElEIGJpdG1h cCBhcnJheSAqLw0KPiA+ID4gPiArCXN6ICs9IFJURV9RU0JSX1RIUklEX0FSUkFZX1NJWkUobWF4 X3RocmVhZHMpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJcmV0dXJuIFJURV9BTElHTihzeiwgUlRF X0NBQ0hFX0xJTkVfU0laRSk7DQo+ID4gPg0KPiA+ID4gR2l2ZW4gdGhhdCB5b3UgYWxpZ24gaGVy ZSwgc2hvdWxkIHlvdSBhbHNvIGFsaWduIGluIHRoZSBlYXJsaWVyDQo+ID4gPiBzdGVwcyBpbiB0 aGUgY29tcHV0YXRpb24gb2Ygc3o/DQo+ID4NCj4gPiBBZ3JlZS4gSSB3aWxsIHJlbW92ZSB0aGUg YWxpZ24gaGVyZSBhbmQga2VlcCB0aGUgZWFybGllciBvbmUgYXMgdGhlIGludGVudA0KPiBpcyB0 byBhbGlnbiB0aGUgdGhyZWFkIElEIGFycmF5Lg0KPiANCj4gU291bmRzIGdvb2QhDQpBZGRlZCB0 aGlzIGluIFY1DQoNCj4gDQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qIEluaXRp YWxpemUgYSBxdWllc2NlbnQgc3RhdGUgdmFyaWFibGUgKi8gaW50DQo+ID4gPiA+ICtfX3J0ZV9l eHBlcmltZW50YWwgcnRlX3JjdV9xc2JyX2luaXQoc3RydWN0IHJ0ZV9yY3VfcXNiciAqdiwNCj4g dWludDMyX3QgbWF4X3RocmVhZHMpIHsNCj4gPiA+ID4gKwlzaXplX3Qgc3o7DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKwlpZiAodiA9PSBOVUxMKSB7DQo+ID4gPiA+ICsJCXJ0ZV9sb2coUlRFX0xPR19F UlIsIHJjdV9sb2dfdHlwZSwNCj4gPiA+ID4gKwkJCSIlcygpOiBJbnZhbGlkIGlucHV0IHBhcmFt ZXRlclxuIiwgX19mdW5jX18pOw0KPiA+ID4gPiArCQlydGVfZXJybm8gPSBFSU5WQUw7DQo+ID4g PiA+ICsNCj4gPiA+ID4gKwkJcmV0dXJuIDE7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4g PiA+ICsJc3ogPSBydGVfcmN1X3FzYnJfZ2V0X21lbXNpemUobWF4X3RocmVhZHMpOw0KPiA+ID4g PiArCWlmIChzeiA9PSAxKQ0KPiA+ID4gPiArCQlyZXR1cm4gMTsNCj4gPiA+ID4gKw0KPiA+ID4g PiArCS8qIFNldCBhbGwgdGhlIHRocmVhZHMgdG8gb2ZmbGluZSAqLw0KPiA+ID4gPiArCW1lbXNl dCh2LCAwLCBzeik7DQo+ID4gPg0KPiA+ID4gV2UgY2FsY3VsYXRlIHN6IGhlcmUsIGJ1dCBpdCBs b29rcyBsaWtlIHRoZSBjYWxsZXIgbXVzdCBhbHNvDQo+ID4gPiBjYWxjdWxhdGUgaXQgaW4gb3Jk ZXIgdG8gY29ycmVjdGx5IGFsbG9jYXRlIHRoZSBtZW1vcnkgcmVmZXJlbmNlZCBieQ0KPiA+ID4g dGhlICJ2IiBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uLCB3aXRoIGJhZCB0aGluZ3MgaGFwcGVu aW5nIGlmIHRoZQ0KPiA+ID4gdHdvIGNhbGN1bGF0aW9ucyBnZXQgZGlmZmVyZW50IHJlc3VsdHMu ICBTaG91bGQgInYiIGluc3RlYWQgYmUNCj4gPiA+IGFsbG9jYXRlZCB3aXRoaW4gdGhpcyBmdW5j dGlvbiB0byBhdm9pZCB0aGlzIHNvcnQgb2YgcHJvYmxlbT8NCj4gPg0KPiA+IEVhcmxpZXIgdmVy c2lvbiBhbGxvY2F0ZWQgdGhlIG1lbW9yeSB3aXRoLWluIHRoaXMgbGlicmFyeS4gSG93ZXZlciwg aXQgd2FzDQo+IGRlY2lkZWQgdG8gZ28gd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBh cyBpdCBwcm92aWRlcyBmbGV4aWJpbGl0eSBmb3INCj4gdGhlIGFwcGxpY2F0aW9uIHRvIG1hbmFn ZSB0aGUgbWVtb3J5IGFzIGl0IHNlZXMgZml0LiBGb3IgZXg6IGl0IGNvdWxkDQo+IGFsbG9jYXRl IHRoaXMgYXMgcGFydCBvZiBhbm90aGVyIHN0cnVjdHVyZSBpbiBhIHNpbmdsZSBhbGxvY2F0aW9u LiBUaGlzIGFsc28NCj4gZmFsbHMgaW5saW5lIHdpdGggc2ltaWxhciBhcHByb2FjaCB0YWtlbiBp biBvdGhlciBsaWJyYXJpZXMuDQo+IA0KPiBTbyB0aGUgYWxsb2NhdG9yIEFQSXMgdmFyeSB0b28g bXVjaCB0byBhbGxvdyBhIHBvaW50ZXIgdG8gdGhlIGRlc2lyZWQNCj4gYWxsb2NhdG9yIGZ1bmN0 aW9uIHRvIGJlIHBhc3NlZCBpbj8gIE9yIGRvIHlvdSBhbHNvIHdhbnQgdG8gYWxsb3cgc3RhdGlj DQo+IGFsbG9jYXRpb24/ICBJZiB0aGUgbGF0dGVyLCB3b3VsZCBhIERFRklORV9SVEVfUkNVX1FT QlIoKSBiZSBvZiB1c2U/DQo+IA0KVGhpcyBpcyBkb25lIHRvIGFsbG93IGZvciBhbGxvY2F0aW9u IG9mIG1lbW9yeSBmb3IgUVMgdmFyaWFibGUgYXMgcGFydCBvZiBhIGFub3RoZXIgYmlnZ2VyIGRh dGEgc3RydWN0dXJlLiBUaGlzIHdpbGwgaGVscCBpbiBub3QgZnJhZ21lbnRpbmcgdGhlIG1lbW9y eS4gRm9yIGV4Og0KDQpzdHJ1Y3QgeHl6IHsNCiAgICBydGVfcmluZyAqcmluZzsNCiAgICBydGVf cmN1X3FzYnIgKnY7DQogICAgYWJjICp0Ow0KfTsNCnN0cnVjdCB4eXogYzsNCg0KTWVtb3J5IGZv ciB0aGUgYWJvdmUgc3RydWN0dXJlIGNhbiBiZSBhbGxvY2F0ZWQgaW4gb25lIGNodW5rIGJ5IGNh bGN1bGF0aW5nIHRoZSBzaXplIHJlcXVpcmVkLg0KDQpJbiBzb21lIHVzZSBjYXNlcyBzdGF0aWMg YWxsb2NhdGlvbiBtaWdodCBiZSBlbm91Z2ggYXMgJ21heF90aHJlYWRzJyBtaWdodCBiZSBhIGNv bXBpbGUgdGltZSBjb25zdGFudC4gSSBhbSBub3Qgc3VyZSBvbiBob3cgdG8gc3VwcG9ydCBib3Ro IGR5bmFtaWMgYW5kIHN0YXRpYyAnbWF4X3RocmVhZHMnLg0KDQo+ID4gPiA+ICsJdi0+bWF4X3Ro cmVhZHMgPSBtYXhfdGhyZWFkczsNCj4gPiA+ID4gKwl2LT5udW1fZWxlbXMgPSBSVEVfQUxJR05f TVVMX0NFSUwobWF4X3RocmVhZHMsDQo+ID4gPiA+ICsJCQlSVEVfUVNCUl9USFJJRF9BUlJBWV9F TE1fU0laRSkgLw0KPiA+ID4gPiArCQkJUlRFX1FTQlJfVEhSSURfQVJSQVlfRUxNX1NJWkU7DQo+ ID4gPiA+ICsJdi0+dG9rZW4gPSBSVEVfUVNCUl9DTlRfSU5JVDsNCj4gPiA+ID4gKw0KPiA+ID4g PiArCXJldHVybiAwOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKiBSZWdpc3Rl ciBhIHJlYWRlciB0aHJlYWQgdG8gcmVwb3J0IGl0cyBxdWllc2NlbnQgc3RhdGUNCj4gPiA+ID4g KyAqIG9uIGEgUVMgdmFyaWFibGUuDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK2ludCBfX3J0ZV9l eHBlcmltZW50YWwNCj4gPiA+ID4gK3J0ZV9yY3VfcXNicl90aHJlYWRfcmVnaXN0ZXIoc3RydWN0 IHJ0ZV9yY3VfcXNiciAqdiwgdW5zaWduZWQgaW50DQo+ID4gPiA+ICt0aHJlYWRfaWQpIHsNCj4g PiA+ID4gKwl1bnNpZ25lZCBpbnQgaSwgaWQsIHN1Y2Nlc3M7DQo+ID4gPiA+ICsJdWludDY0X3Qg b2xkX2JtYXAsIG5ld19ibWFwOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJaWYgKHYgPT0gTlVMTCB8 fCB0aHJlYWRfaWQgPj0gdi0+bWF4X3RocmVhZHMpIHsNCj4gPiA+ID4gKwkJcnRlX2xvZyhSVEVf TE9HX0VSUiwgcmN1X2xvZ190eXBlLA0KPiA+ID4gPiArCQkJIiVzKCk6IEludmFsaWQgaW5wdXQg cGFyYW1ldGVyXG4iLCBfX2Z1bmNfXyk7DQo+ID4gPiA+ICsJCXJ0ZV9lcnJubyA9IEVJTlZBTDsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArCQlyZXR1cm4gMTsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKwlpZCA9IHRocmVhZF9pZCAmIFJURV9RU0JSX1RIUklEX01BU0s7DQo+ID4gPiA+ ICsJaSA9IHRocmVhZF9pZCA+PiBSVEVfUVNCUl9USFJJRF9JTkRFWF9TSElGVDsNCj4gPiA+ID4g Kw0KPiA+ID4gPiArCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBjb3VudGVyIGZvciByZWdpc3RlcmVk IHRocmVhZHMgZG9lcyBub3QNCj4gPiA+ID4gKwkgKiBnbyBvdXQgb2Ygc3luYy4gSGVuY2UsIGFk ZGl0aW9uYWwgY2hlY2tzIGFyZSByZXF1aXJlZC4NCj4gPiA+ID4gKwkgKi8NCj4gPiA+ID4gKwkv KiBDaGVjayBpZiB0aGUgdGhyZWFkIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCAqLw0KPiA+ID4gPiAr CW9sZF9ibWFwID0gX19hdG9taWNfbG9hZF9uKFJURV9RU0JSX1RIUklEX0FSUkFZX0VMTSh2LCBp KSwNCj4gPiA+ID4gKwkJCQkJX19BVE9NSUNfUkVMQVhFRCk7DQo+ID4gPiA+ICsJaWYgKG9sZF9i bWFwICYgMVVMIDw8IGlkKQ0KPiA+ID4gPiArCQlyZXR1cm4gMDsNCj4gPiA+ID4gKw0KPiA+ID4g PiArCWRvIHsNCj4gPiA+ID4gKwkJbmV3X2JtYXAgPSBvbGRfYm1hcCB8ICgxVUwgPDwgaWQpOw0K PiA+ID4gPiArCQlzdWNjZXNzID0gX19hdG9taWNfY29tcGFyZV9leGNoYW5nZSgNCj4gPiA+ID4g KwkJCQkJUlRFX1FTQlJfVEhSSURfQVJSQVlfRUxNKHYsIGkpLA0KPiA+ID4gPiArCQkJCQkmb2xk X2JtYXAsICZuZXdfYm1hcCwgMCwNCj4gPiA+ID4gKwkJCQkJX19BVE9NSUNfUkVMRUFTRSwNCj4g PiA+IF9fQVRPTUlDX1JFTEFYRUQpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCWlmIChzdWNjZXNz KQ0KPiA+ID4gPiArCQkJX19hdG9taWNfZmV0Y2hfYWRkKCZ2LT5udW1fdGhyZWFkcywNCj4gPiA+ ID4gKwkJCQkJCTEsIF9fQVRPTUlDX1JFTEFYRUQpOw0KPiA+ID4gPiArCQllbHNlIGlmIChvbGRf Ym1hcCAmICgxVUwgPDwgaWQpKQ0KPiA+ID4gPiArCQkJLyogU29tZW9uZSBlbHNlIHJlZ2lzdGVy ZWQgdGhpcyB0aHJlYWQuDQo+ID4gPiA+ICsJCQkgKiBDb3VudGVyIHNob3VsZCBub3QgYmUgaW5j cmVtZW50ZWQuDQo+ID4gPiA+ICsJCQkgKi8NCj4gPiA+ID4gKwkJCXJldHVybiAwOw0KPiA+ID4g PiArCX0gd2hpbGUgKHN1Y2Nlc3MgPT0gMCk7DQo+ID4gPg0KPiA+ID4gVGhpcyB3b3VsZCBiZSBz aW1wbGVyIGlmIHRocmVhZHMgd2VyZSByZXF1aXJlZCB0byByZWdpc3RlciB0aGVtc2VsdmVzLg0K PiA+ID4gTWF5YmUgeW91IGhhdmUgdXNlIGNhc2VzIHJlcXVpcmluZyByZWdpc3RyYXRpb24gb2Yg b3RoZXIgdGhyZWFkcywNCj4gPiA+IGJ1dCB0aGlzIGNhcGFiaWxpdHkgaXMgYWRkaW5nIHNpZ25p ZmljYW50IGNvbXBsZXhpdHksIHNvIGl0IG1pZ2h0IGJlDQo+ID4gPiB3b3J0aCBzb21lIHRob3Vn aHQuDQo+ID4gPg0KPiA+IEl0IHdhcyBzaW1wbGUgZWFybGllciAoX19hdG9taWNfZmV0Y2hfb3Ip LiBUaGUgY29tcGxleGl0eSBpcyBhZGRlZCBhcw0KPiAnbnVtX3RocmVhZHMnIHNob3VsZCBub3Qg Z28gb3V0IG9mIHN5bmMuDQo+IA0KPiBIbW1tLi4uDQo+IA0KPiBTbyB0aHJlYWRzIGFyZSBhbGxv d2VkIHRvIHJlZ2lzdGVyIG90aGVyIHRocmVhZHM/ICBPciBpcyB0aGVyZSBzb21lIG90aGVyDQo+ IHJlYXNvbiB0aGF0IGNvbmN1cnJlbnQgcmVnaXN0cmF0aW9uIGlzIHJlcXVpcmVkPw0KPiANClll cywgY29udHJvbCBwbGFuZSB0aHJlYWRzIGNhbiByZWdpc3RlciB0aGUgZmFzdCBwYXRoIHRocmVh ZHMuIFRob3VnaCwgSSBhbSBub3Qgc3VyZSBob3cgdXNlZnVsIGl0IGlzLiBJIGRpZCBub3Qgd2Fu dCB0byBhZGQgdGhlIHJlc3RyaWN0aW9uLiBJIGV4cGVjdCB0aGF0IHJlYWRlciB0aHJlYWRzIHdp bGwgcmVnaXN0ZXIgdGhlbXNlbHZlcy4gVGhlIHJlYWRlciB0aHJlYWRzIHJlcXVpcmUgY29uY3Vy cmVudCByZWdpc3RyYXRpb24gYXMgdGhleSBhbGwgd2lsbCBiZSBydW5uaW5nIGluIHBhcmFsbGVs Lg0KSWYgdGhlIHJlcXVpcmVtZW50IG9mIGtlZXBpbmcgdHJhY2sgb2YgdGhlIG51bWJlciBvZiB0 aHJlYWRzIHJlZ2lzdGVyZWQgY3VycmVudGx5IGdvZXMgYXdheSwgdGhlbiB0aGlzIGZ1bmN0aW9u IHdpbGwgYmUgc2ltcGxlLg0KDQo8c25pcD4NCg0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2xp YnJ0ZV9yY3UvcnRlX3JjdV9xc2JyLmgNCj4gPiA+ID4gYi9saWIvbGlicnRlX3JjdS9ydGVfcmN1 X3FzYnIuaCBuZXcgZmlsZSBtb2RlIDEwMDY0NCBpbmRleA0KPiA+ID4gPiAwMDAwMDAwMDAuLmZm Njk2YWVhYg0KPiA+ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiA+ICsrKyBiL2xpYi9saWJydGVf cmN1L3J0ZV9yY3VfcXNici5oDQo+ID4gPiA+IEBAIC0wLDAgKzEsNTU0IEBADQo+ID4gPiA+ICsv KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ID4gPiA+ICsgKiBDb3B5 cmlnaHQgKGMpIDIwMTggQXJtIExpbWl0ZWQgICovDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNpZm5k ZWYgX1JURV9SQ1VfUVNCUl9IXw0KPiA+ID4gPiArI2RlZmluZSBfUlRFX1JDVV9RU0JSX0hfDQo+ ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICogQGZpbGUNCj4gPiA+ID4gKyAqIFJU RSBRdWllc2NlbnQgU3RhdGUgQmFzZWQgUmVjbGFtYXRpb24gKFFTQlIpDQo+ID4gPiA+ICsgKg0K PiA+ID4gPiArICogUXVpZXNjZW50IFN0YXRlIChRUykgaXMgYW55IHBvaW50IGluIHRoZSB0aHJl YWQgZXhlY3V0aW9uDQo+ID4gPiA+ICsgKiB3aGVyZSB0aGUgdGhyZWFkIGRvZXMgbm90IGhvbGQg YSByZWZlcmVuY2UgdG8gYSBkYXRhIHN0cnVjdHVyZQ0KPiA+ID4gPiArICogaW4gc2hhcmVkIG1l bW9yeS4gV2hpbGUgdXNpbmcgbG9jay1sZXNzIGRhdGEgc3RydWN0dXJlcywgdGhlDQo+ID4gPiA+ ICt3cml0ZXINCj4gPiA+ID4gKyAqIGNhbiBzYWZlbHkgZnJlZSBtZW1vcnkgb25jZSBhbGwgdGhl IHJlYWRlciB0aHJlYWRzIGhhdmUNCj4gPiA+ID4gK2VudGVyZWQNCj4gPiA+ID4gKyAqIHF1aWVz Y2VudCBzdGF0ZS4NCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBUaGlzIGxpYnJhcnkgcHJvdmlk ZXMgdGhlIGFiaWxpdHkgZm9yIHRoZSByZWFkZXJzIHRvIHJlcG9ydA0KPiA+ID4gPiArcXVpZXNj ZW50DQo+ID4gPiA+ICsgKiBzdGF0ZSBhbmQgZm9yIHRoZSB3cml0ZXJzIHRvIGlkZW50aWZ5IHdo ZW4gYWxsIHRoZSByZWFkZXJzDQo+ID4gPiA+ICtoYXZlDQo+ID4gPiA+ICsgKiBlbnRlcmVkIHF1 aWVzY2VudCBzdGF0ZS4NCj4gPiA+ID4gKyAqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICsjaWZkZWYg X19jcGx1c3BsdXMNCj4gPiA+ID4gK2V4dGVybiAiQyIgew0KPiA+ID4gPiArI2VuZGlmDQo+ID4g PiA+ICsNCj4gPiA+ID4gKyNpbmNsdWRlIDxzdGRpby5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPHN0 ZGludC5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPGVycm5vLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8 cnRlX2NvbW1vbi5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPHJ0ZV9tZW1vcnkuaD4NCj4gPiA+ID4g KyNpbmNsdWRlIDxydGVfbGNvcmUuaD4NCj4gPiA+ID4gKyNpbmNsdWRlIDxydGVfZGVidWcuaD4N Cj4gPiA+ID4gKyNpbmNsdWRlIDxydGVfYXRvbWljLmg+DQo+ID4gPiA+ICsNCj4gPiA+ID4gK2V4 dGVybiBpbnQgcmN1X2xvZ190eXBlOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsjaWYgUlRFX0xPR19E UF9MRVZFTCA+PSBSVEVfTE9HX0RFQlVHICNkZWZpbmUNCj4gUkNVX0RQX0xPRyhsZXZlbCwNCj4g PiA+IGZtdCwNCj4gPiA+ID4gK2FyZ3MuLi4pIFwNCj4gPiA+ID4gKwlydGVfbG9nKFJURV9MT0df ICMjIGxldmVsLCByY3VfbG9nX3R5cGUsIFwNCj4gPiA+ID4gKwkJIiVzKCk6ICIgZm10ICJcbiIs IF9fZnVuY19fLCAjIyBhcmdzKSAjZWxzZSAjZGVmaW5lDQo+ID4gPiA+ICtSQ1VfRFBfTE9HKGxl dmVsLCBmbXQsIGFyZ3MuLi4pICNlbmRpZg0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKiBSZWdpc3Rl cmVkIHRocmVhZCBJRHMgYXJlIHN0b3JlZCBhcyBhIGJpdG1hcCBvZiA2NGIgZWxlbWVudA0KPiBh cnJheS4NCj4gPiA+ID4gKyAqIEdpdmVuIHRocmVhZCBpZCBuZWVkcyB0byBiZSBjb252ZXJ0ZWQg dG8gaW5kZXggaW50byB0aGUgYXJyYXkNCj4gPiA+ID4gK2FuZA0KPiA+ID4gPiArICogdGhlIGlk IHdpdGhpbiB0aGUgYXJyYXkgZWxlbWVudC4NCj4gPiA+ID4gKyAqLw0KPiA+ID4gPiArI2RlZmlu ZSBSVEVfUVNCUl9USFJJRF9BUlJBWV9FTE1fU0laRSAoc2l6ZW9mKHVpbnQ2NF90KSAqIDgpDQo+ ID4gPiAjZGVmaW5lDQo+ID4gPiA+ICtSVEVfUVNCUl9USFJJRF9BUlJBWV9TSVpFKG1heF90aHJl YWRzKSBcDQo+ID4gPiA+ICsJUlRFX0FMSUdOKFJURV9BTElHTl9NVUxfQ0VJTChtYXhfdGhyZWFk cywgXA0KPiA+ID4gPiArCQlSVEVfUVNCUl9USFJJRF9BUlJBWV9FTE1fU0laRSkgPj4gMywNCj4g PiA+IFJURV9DQUNIRV9MSU5FX1NJWkUpICNkZWZpbmUNCj4gPiA+ID4gK1JURV9RU0JSX1RIUklE X0FSUkFZX0VMTSh2LCBpKSAoKHVpbnQ2NF90ICopIFwNCj4gPiA+ID4gKwkoKHN0cnVjdCBydGVf cmN1X3FzYnJfY250ICopKHYgKyAxKSArIHYtPm1heF90aHJlYWRzKSArIGkpDQo+ID4gPiA+ICsj ZGVmaW5lIFJURV9RU0JSX1RIUklEX0lOREVYX1NISUZUIDYgI2RlZmluZQ0KPiBSVEVfUVNCUl9U SFJJRF9NQVNLDQo+ID4gPiA+ICsweDNmDQo+ID4gPiAjZGVmaW5lDQo+ID4gPiA+ICtSVEVfUVNC Ul9USFJJRF9JTlZBTElEIDB4ZmZmZmZmZmYNCj4gPiA+ID4gKw0KPiA+ID4gPiArLyogV29ya2Vy IHRocmVhZCBjb3VudGVyICovDQo+ID4gPiA+ICtzdHJ1Y3QgcnRlX3JjdV9xc2JyX2NudCB7DQo+ ID4gPiA+ICsJdWludDY0X3QgY250Ow0KPiA+ID4gPiArCS8qKjwgUXVpZXNjZW50IHN0YXRlIGNv dW50ZXIuIFZhbHVlIDAgaW5kaWNhdGVzIHRoZSB0aHJlYWQgaXMNCj4gPiA+ID4gK29mZmxpbmUg Ki8gfSBfX3J0ZV9jYWNoZV9hbGlnbmVkOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsjZGVmaW5lIFJU RV9RU0JSX0NOVF9USFJfT0ZGTElORSAwICNkZWZpbmUNCj4gUlRFX1FTQlJfQ05UX0lOSVQgMQ0K PiA+ID4gPiArDQo+ID4gPiA+ICsvKiBSVEUgUXVpZXNjZW50IFN0YXRlIHZhcmlhYmxlIHN0cnVj dHVyZS4NCj4gPiA+ID4gKyAqIFRoaXMgc3RydWN0dXJlIGhhcyB0d28gZWxlbWVudHMgdGhhdCB2 YXJ5IGluIHNpemUgYmFzZWQgb24gdGhlDQo+ID4gPiA+ICsgKiAnbWF4X3RocmVhZHMnIHBhcmFt ZXRlci4NCj4gPiA+ID4gKyAqIDEpIFF1aWVzY2VudCBzdGF0ZSBjb3VudGVyIGFycmF5DQo+ID4g PiA+ICsgKiAyKSBSZWdpc3RlciB0aHJlYWQgSUQgYXJyYXkNCj4gPiA+ID4gKyAqLw0KPiA+ID4g PiArc3RydWN0IHJ0ZV9yY3VfcXNiciB7DQo+ID4gPiA+ICsJdWludDY0X3QgdG9rZW4gX19ydGVf Y2FjaGVfYWxpZ25lZDsNCj4gPiA+ID4gKwkvKio8IENvdW50ZXIgdG8gYWxsb3cgZm9yIG11bHRp cGxlIGNvbmN1cnJlbnQgcXVpZXNjZW50IHN0YXRlDQo+ID4gPiA+ICtxdWVyaWVzICovDQo+ID4g PiA+ICsNCj4gPiA+ID4gKwl1aW50MzJfdCBudW1fZWxlbXMgX19ydGVfY2FjaGVfYWxpZ25lZDsN Cj4gPiA+ID4gKwkvKio8IE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgdGhyZWFkIElEIGFycmF5 ICovDQo+ID4gPiA+ICsJdWludDMyX3QgbnVtX3RocmVhZHM7DQo+ID4gPiA+ICsJLyoqPCBOdW1i ZXIgb2YgdGhyZWFkcyBjdXJyZW50bHkgdXNpbmcgdGhpcyBRUyB2YXJpYWJsZSAqLw0KPiA+ID4g PiArCXVpbnQzMl90IG1heF90aHJlYWRzOw0KPiA+ID4gPiArCS8qKjwgTWF4aW11bSBudW1iZXIg b2YgdGhyZWFkcyB1c2luZyB0aGlzIFFTIHZhcmlhYmxlICovDQo+ID4gPiA+ICsNCj4gPiA+ID4g KwlzdHJ1Y3QgcnRlX3JjdV9xc2JyX2NudCBxc2JyX2NudFswXSBfX3J0ZV9jYWNoZV9hbGlnbmVk Ow0KPiA+ID4gPiArCS8qKjwgUXVpZXNjZW50IHN0YXRlIGNvdW50ZXIgYXJyYXkgb2YgJ21heF90 aHJlYWRzJyBlbGVtZW50cyAqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyoqPCBSZWdpc3RlcmVk IHRocmVhZCBJRHMgYXJlIHN0b3JlZCBpbiBhIGJpdG1hcCBhcnJheSwNCj4gPiA+ID4gKwkgKiAg IGFmdGVyIHRoZSBxdWllc2NlbnQgc3RhdGUgY291bnRlciBhcnJheS4NCj4gPiA+ID4gKwkgKi8N Cj4gPiA+ID4gK30gX19ydGVfY2FjaGVfYWxpZ25lZDsNCj4gPiA+ID4gKw0KDQo8c25pcD4NCg0K PiA+ID4gPiArDQo+ID4gPiA+ICsvKiBDaGVjayB0aGUgcXVpZXNjZW50IHN0YXRlIGNvdW50ZXIg Zm9yIHJlZ2lzdGVyZWQgdGhyZWFkcyBvbmx5LA0KPiA+ID4gPiArYXNzdW1pbmcNCj4gPiA+ID4g KyAqIHRoYXQgbm90IGFsbCB0aHJlYWRzIGhhdmUgcmVnaXN0ZXJlZC4NCj4gPiA+ID4gKyAqLw0K PiA+ID4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgaW50DQo+ID4gPiA+ICtfX3JjdV9x c2JyX2NoZWNrX3NlbGVjdGl2ZShzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2LCB1aW50NjRfdCB0LA0K PiA+ID4gPiArYm9vbA0KPiA+ID4gPiArd2FpdCkgew0KPiA+ID4gPiArCXVpbnQzMl90IGksIGos IGlkOw0KPiA+ID4gPiArCXVpbnQ2NF90IGJtYXA7DQo+ID4gPiA+ICsJdWludDY0X3QgYzsNCj4g PiA+ID4gKwl1aW50NjRfdCAqcmVnX3RocmVhZF9pZDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCWZv ciAoaSA9IDAsIHJlZ190aHJlYWRfaWQgPSBSVEVfUVNCUl9USFJJRF9BUlJBWV9FTE0odiwgMCk7 DQo+ID4gPiA+ICsJCWkgPCB2LT5udW1fZWxlbXM7DQo+ID4gPiA+ICsJCWkrKywgcmVnX3RocmVh ZF9pZCsrKSB7DQo+ID4gPiA+ICsJCS8qIExvYWQgdGhlIGN1cnJlbnQgcmVnaXN0ZXJlZCB0aHJl YWQgYml0IG1hcCBiZWZvcmUNCj4gPiA+ID4gKwkJICogbG9hZGluZyB0aGUgcmVhZGVyIHRocmVh ZCBxdWllc2NlbnQgc3RhdGUgY291bnRlcnMuDQo+ID4gPiA+ICsJCSAqLw0KPiA+ID4gPiArCQli bWFwID0gX19hdG9taWNfbG9hZF9uKHJlZ190aHJlYWRfaWQsDQo+ID4gPiBfX0FUT01JQ19BQ1FV SVJFKTsNCj4gPiA+ID4gKwkJaWQgPSBpIDw8IFJURV9RU0JSX1RIUklEX0lOREVYX1NISUZUOw0K PiA+ID4gPiArDQo+ID4gPiA+ICsJCXdoaWxlIChibWFwKSB7DQo+ID4gPiA+ICsJCQlqID0gX19i dWlsdGluX2N0emwoYm1hcCk7DQo+ID4gPiA+ICsJCQlSQ1VfRFBfTE9HKERFQlVHLA0KPiA+ID4g PiArCQkJCSIlczogY2hlY2s6IHRva2VuID0gJWx1LCB3YWl0ID0gJWQsIEJpdCBNYXANCj4gPiA+ ID0gMHglbHgsIFRocmVhZCBJRCA9ICVkIiwNCj4gPiA+ID4gKwkJCQlfX2Z1bmNfXywgdCwgd2Fp dCwgYm1hcCwgaWQgKyBqKTsNCj4gPiA+ID4gKwkJCWMgPSBfX2F0b21pY19sb2FkX24oDQo+ID4g PiA+ICsJCQkJCSZ2LT5xc2JyX2NudFtpZCArIGpdLmNudCwNCj4gPiA+ID4gKwkJCQkJX19BVE9N SUNfQUNRVUlSRSk7DQo+ID4gPiA+ICsJCQlSQ1VfRFBfTE9HKERFQlVHLA0KPiA+ID4gPiArCQkJ CSIlczogc3RhdHVzOiB0b2tlbiA9ICVsdSwgd2FpdCA9ICVkLCBUaHJlYWQNCj4gPiA+IFFTIGNu dCA9ICVsdSwgVGhyZWFkIElEID0gJWQiLA0KPiA+ID4gPiArCQkJCV9fZnVuY19fLCB0LCB3YWl0 LCBjLCBpZCtqKTsNCj4gPiA+ID4gKwkJCS8qIENvdW50ZXIgaXMgbm90IGNoZWNrZWQgZm9yIHdy YXAtYXJvdW5kDQo+ID4gPiBjb25kaXRpb24NCj4gPiA+ID4gKwkJCSAqIGFzIGl0IGlzIGEgNjRi IGNvdW50ZXIuDQo+ID4gPiA+ICsJCQkgKi8NCj4gPiA+ID4gKwkJCWlmICh1bmxpa2VseShjICE9 IFJURV9RU0JSX0NOVF9USFJfT0ZGTElORSAmJiBjDQo+ID4gPiA8IHQpKSB7DQo+ID4gPg0KPiA+ ID4gVGhpcyBhc3N1bWVzIHRoYXQgYSA2NC1iaXQgY291bnRlciB3b24ndCBvdmVyZmxvdywgd2hp Y2ggaXMgY2xvc2UNCj4gPiA+IGVub3VnaCB0byB0cnVlIGdpdmVuIGN1cnJlbnQgQ1BVIGNsb2Nr IGZyZXF1ZW5jaWVzLiAgOy0pDQo+ID4gPg0KPiA+ID4gPiArCQkJCS8qIFRoaXMgdGhyZWFkIGlz IG5vdCBpbiBxdWllc2NlbnQgc3RhdGUgKi8NCj4gPiA+ID4gKwkJCQlpZiAoIXdhaXQpDQo+ID4g PiA+ICsJCQkJCXJldHVybiAwOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCQkJcnRlX3BhdXNlKCk7 DQo+ID4gPiA+ICsJCQkJLyogVGhpcyB0aHJlYWQgbWlnaHQgaGF2ZSB1bnJlZ2lzdGVyZWQuDQo+ ID4gPiA+ICsJCQkJICogUmUtcmVhZCB0aGUgYml0bWFwLg0KPiA+ID4gPiArCQkJCSAqLw0KPiA+ ID4gPiArCQkJCWJtYXAgPSBfX2F0b21pY19sb2FkX24ocmVnX3RocmVhZF9pZCwNCj4gPiA+ID4g KwkJCQkJCV9fQVRPTUlDX0FDUVVJUkUpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCQkJY29udGlu dWU7DQo+ID4gPiA+ICsJCQl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJCWJtYXAgJj0gfigxVUwg PDwgaik7DQo+ID4gPiA+ICsJCX0NCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwly ZXR1cm4gMTsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyogQ2hlY2sgdGhlIHF1 aWVzY2VudCBzdGF0ZSBjb3VudGVyIGZvciBhbGwgdGhyZWFkcywgYXNzdW1pbmcNCj4gPiA+ID4g K3RoYXQNCj4gPiA+ID4gKyAqIGFsbCB0aGUgdGhyZWFkcyBoYXZlIHJlZ2lzdGVyZWQuDQo+ID4g PiA+ICsgKi8NCj4gPiA+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIGludA0KPiA+ID4g PiArX19yY3VfcXNicl9jaGVja19hbGwoc3RydWN0IHJ0ZV9yY3VfcXNiciAqdiwgdWludDY0X3Qg dCwgYm9vbA0KPiA+ID4gPiArd2FpdCkNCj4gPiA+DQo+ID4gPiBEb2VzIGNoZWNraW5nIHRoZSBi aXRtYXAgcmVhbGx5IHRha2UgbG9uZyBlbm91Z2ggdG8gbWFrZSB0aGlzDQo+ID4gPiB3b3J0aHdo aWxlIGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24/ICBJIHdvdWxkIHRoaW5rIHRoYXQgdGhlDQo+ID4g PiBiaXRtYXAtY2hlY2tpbmcgdGltZSB3b3VsZCBiZSBsb3N0IGluIHRoZSBub2lzZSBvZiBjYWNo ZSBtaXNzZXMgZnJvbQ0KPiB0aGUgLT5jbnQgbG9hZHMuDQo+ID4NCj4gPiBJdCBhdm9pZHMgYWNj ZXNzaW5nIG9uZSBjYWNoZSBsaW5lLiBJIHRoaW5rIHRoaXMgaXMgd2hlcmUgdGhlIHNhdmluZ3Mg YXJlDQo+IChtYXkgYmUgaW4gdGhlb3J5KS4gVGhpcyBpcyB0aGUgbW9zdCBwcm9iYWJsZSB1c2Ug Y2FzZS4NCj4gPiBPbiB0aGUgb3RoZXIgaGFuZCwgX19yY3VfcXNicl9jaGVja19zZWxlY3RpdmUo KSB3aWxsIHJlc3VsdCBpbiBzYXZpbmdzDQo+IChkZXBlbmRpbmcgb24gaG93IG1hbnkgdGhyZWFk cyBhcmUgY3VycmVudGx5IHJlZ2lzdGVyZWQpIGJ5IGF2b2lkaW5nDQo+IGFjY2Vzc2luZyB1bndh bnRlZCBjb3VudGVycy4NCj4gDQo+IERvIHlvdSByZWFsbHkgZXhwZWN0IHRvIGJlIGNhbGxpbmcg dGhpcyBmdW5jdGlvbiBvbiBhbnkga2luZCBvZiBmYXN0cGF0aD8NCg0KWWVzLiBGb3Igc29tZSBv ZiB0aGUgbGlicmFyaWVzIChydGVfaGFzaCksIHRoZSB3cml0ZXIgaXMgb24gdGhlIGZhc3QgcGF0 aC4NCg0KPiANCj4gPiA+IFN1cmUsIGlmIHlvdSBpbnZva2UgX19yY3VfcXNicl9jaGVja19zZWxl Y3RpdmUoKSBpbiBhIHRpZ2h0IGxvb3AgaW4NCj4gPiA+IHRoZSBhYnNlbmNlIG9mIHJlYWRlcnMs IHlvdSBtaWdodCBzZWUgX19yY3VfcXNicl9jaGVja19hbGwoKSBiZWluZyBhDQo+ID4gPiBiaXQg ZmFzdGVyLiAgQnV0IGlzIHRoYXQgcmVhbGx5IHdoYXQgRFBESyBkb2VzPw0KPiA+IEkgc2VlIGlt cHJvdmVtZW50cyBpbiB0aGUgc3ludGhldGljIHRlc3QgY2FzZSAoc2ltaWxhciB0byB0aGUgb25l IHlvdQ0KPiBoYXZlIGRlc2NyaWJlZCwgYXJvdW5kIDI3JSkuIEhvd2V2ZXIsIGluIHRoZSBtb3Jl IHByYWN0aWNhbCB0ZXN0IGNhc2VzIEkNCj4gZG8gbm90IHNlZSBhbnkgZGlmZmVyZW5jZS4NCj4g DQo+IElmIHRoZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBvbmx5IG9jY3VycyBpbiBhIHN5bnRo ZXRpYyB0ZXN0IGNhc2UsIGRvZXMNCj4gaXQgcmVhbGx5IG1ha2Ugc2Vuc2UgdG8gb3B0aW1pemUg Zm9yIGl0Pw0KSSBoYWQgdG8gZml4IGZldyBpc3N1ZXMgaW4gdGhlIHBlcmZvcm1hbmNlIHRlc3Qg Y2FzZXMgYW5kIGFkZGVkIG1vcmUgdG8gZG8gdGhlIGNvbXBhcmlzb24uIFRoZXNlIGNoYW5nZXMg YXJlIGluIHY1Lg0KVGhlcmUgYXJlIDQgcGVyZm9ybWFuY2UgdGVzdHMgaW52b2x2aW5nIHRoaXMg QVBJLg0KMSkgMSBXcml0ZXIsICdOJyByZWFkZXJzDQogICAgIFdyaXRlcjogcXNicl9zdGFydCwg cXNicl9jaGVjayh3YWl0ID0gdHJ1ZSkNCiAgICAgUmVhZGVyczogcXNicl9xdWllc2NlbnQNCjIp ICdOJyB3cml0ZXJzDQogICAgIFdyaXRlcnM6IHFzYnJfc3RhcnQsIHFzYnJfY2hlY2sod2FpdCA9 PSBmYWxzZSkNCjMpIDEgV3JpdGVyLCAnTicgcmVhZGVycyAodGhpcyB0ZXN0IHVzZXMgdGhlIGxv Y2stZnJlZSBydGVfaGFzaCBkYXRhIHN0cnVjdHVyZSkNCiAgICAgV3JpdGVyOiBoYXNoX2RlbCwg cXNicl9zdGFydCwgcXNicl9jaGVjayh3YWl0ID0gdHJ1ZSksIHZhbGlkYXRlIHRoYXQgdGhlIHJl YWRlciB3YXMgYWJsZSB0byBjb21wbGV0ZSBpdHMgd29yayBzdWNjZXNzZnVsbHkNCiAgICAgUmVh ZGVyczogdGhyZWFkX29ubGluZSwgaGFzaF9sb29rdXAsIGFjY2VzcyB0aGUgcG9pbnRlciAtIGRv IHNvbWUgd29yayBvbiBpdCwgcXNicl9xdWllc2NlbnQsIHRocmVhZF9vZmZsaW5lDQo0KSBTYW1l IGFzIHRlc3QgMykgYnV0IHFzYnJfY2hlY2sgKHdhaXQgPT0gZmFsc2UpDQoNClRoZXJlIGFyZSAy IHNldHMgb2YgdGhlc2UgdGVzdHMuDQphKSBRUyB2YXJpYWJsZSBpcyBjcmVhdGVkIHdpdGggbnVt YmVyIG9mIHRocmVhZHMgc2FtZSBhcyBudW1iZXIgb2YgcmVhZGVycyAtIHRoaXMgd2lsbCBleGVy Y2lzZSBfX3JjdV9xc2JyX2NoZWNrX2FsbA0KYikgUVMgdmFyaWFibGUgaXMgY3JlYXRlZCB3aXRo IDEyOCB0aHJlYWRzLCBudW1iZXIgb2YgcmVnaXN0ZXJlZCB0aHJlYWRzIGlzIHNhbWUgYXMgaW4g YSkgLSB0aGlzIHdpbGwgZXhlcmNpc2UgX19yY3VfcXNicl9jaGVja19zZWxlY3RpdmUNCg0KRm9s bG93aW5nIGFyZSB0aGUgcmVzdWx0cyBvbiB4ODYgKEU1LTI2NjAgdjQgQCAyLjAwR0h6KSBjb21w YXJpbmcgZnJvbSBhKSB0byBiKSAob24geDg2IGluIG15IHNldHVwLCB0aGUgcmVzdWx0cyBhcmUg bm90IHZlcnkgc3RhYmxlIGJldHdlZW4gcnVucykNCjEpIDI1JQ0KMikgLTMlDQozKSAtMC40JQ0K NCkgMS4zOCUNCg0KRm9sbG93aW5nIGFyZSB0aGUgcmVzdWx0cyBvbiBhbiBBcm0gc3lzdGVtIGNv bXBhcmluZyBmcm9tIGEpIHRvIGIpIChyZXN1bHRzIGFyZSBub3QgcHJldHR5IHN0YWJsZSBiZXR3 ZWVuIHJ1bnMpDQoxKSAtMy40NSUNCjIpIDAlDQozKSAtMC4wMyUNCjQpIC0wLjA0JQ0KDQpLb25z dGFudGluLCBpcyBpdCBwb3NzaWJsZSB0byBydW4gdGhlIHRlc3RzIG9uIHlvdXIgc2V0dXAgYW5k IGxvb2sgYXQgdGhlIHJlc3VsdHM/DQoNCj4gDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJdWludDMy X3QgaTsNCj4gPiA+ID4gKwlzdHJ1Y3QgcnRlX3JjdV9xc2JyX2NudCAqY250Ow0KPiA+ID4gPiAr CXVpbnQ2NF90IGM7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlmb3IgKGkgPSAwLCBjbnQgPSB2LT5x c2JyX2NudDsgaSA8IHYtPm1heF90aHJlYWRzOyBpKyssIGNudCsrKSB7DQo+ID4gPiA+ICsJCVJD VV9EUF9MT0coREVCVUcsDQo+ID4gPiA+ICsJCQkiJXM6IGNoZWNrOiB0b2tlbiA9ICVsdSwgd2Fp dCA9ICVkLCBUaHJlYWQgSUQgPSAlZCIsDQo+ID4gPiA+ICsJCQlfX2Z1bmNfXywgdCwgd2FpdCwg aSk7DQo+ID4gPiA+ICsJCXdoaWxlICgxKSB7DQo+ID4gPiA+ICsJCQljID0gX19hdG9taWNfbG9h ZF9uKCZjbnQtPmNudCwNCj4gPiA+IF9fQVRPTUlDX0FDUVVJUkUpOw0KPiA+ID4gPiArCQkJUkNV X0RQX0xPRyhERUJVRywNCj4gPiA+ID4gKwkJCQkiJXM6IHN0YXR1czogdG9rZW4gPSAlbHUsIHdh aXQgPSAlZCwgVGhyZWFkDQo+ID4gPiBRUyBjbnQgPSAlbHUsIFRocmVhZCBJRCA9ICVkIiwNCj4g PiA+ID4gKwkJCQlfX2Z1bmNfXywgdCwgd2FpdCwgYywgaSk7DQo+ID4gPiA+ICsJCQkvKiBDb3Vu dGVyIGlzIG5vdCBjaGVja2VkIGZvciB3cmFwLWFyb3VuZA0KPiA+ID4gY29uZGl0aW9uDQo+ID4g PiA+ICsJCQkgKiBhcyBpdCBpcyBhIDY0YiBjb3VudGVyLg0KPiA+ID4gPiArCQkJICovDQo+ID4g PiA+ICsJCQlpZiAobGlrZWx5KGMgPT0gUlRFX1FTQlJfQ05UX1RIUl9PRkZMSU5FIHx8IGMgPj0N Cj4gPiA+IHQpKQ0KPiA+ID4gPiArCQkJCWJyZWFrOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCQkv KiBUaGlzIHRocmVhZCBpcyBub3QgaW4gcXVpZXNjZW50IHN0YXRlICovDQo+ID4gPiA+ICsJCQlp ZiAoIXdhaXQpDQo+ID4gPiA+ICsJCQkJcmV0dXJuIDA7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJ CXJ0ZV9wYXVzZSgpOw0KPiA+ID4gPiArCQl9DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4g PiA+ICsJcmV0dXJuIDE7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ ID4gPiArICogQHdhcm5pbmcNCj4gPiA+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkg bWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAq IENoZWNrcyBpZiBhbGwgdGhlIHJlYWRlciB0aHJlYWRzIGhhdmUgZW50ZXJlZCB0aGUgcXVpZXNj ZW50DQo+ID4gPiA+ICtzdGF0ZQ0KPiA+ID4gPiArICogcmVmZXJlbmNlZCBieSB0b2tlbi4NCj4g PiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBUaGlzIGlzIGltcGxlbWVudGVkIGFzIGEgbG9jay1mcmVl IGZ1bmN0aW9uLiBJdCBpcw0KPiA+ID4gPiArbXVsdGktdGhyZWFkDQo+ID4gPiA+ICsgKiBzYWZl IGFuZCBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIHdvcmtlciB0aHJlYWRzIGFzIHdlbGwuDQo+ID4g PiA+ICsgKg0KPiA+ID4gPiArICogSWYgdGhpcyBBUEkgaXMgY2FsbGVkIHdpdGggJ3dhaXQnIHNl dCB0byB0cnVlLCB0aGUgZm9sbG93aW5nDQo+ID4gPiA+ICsgKiBmYWN0b3JzIG11c3QgYmUgY29u c2lkZXJlZDoNCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiAxKSBJZiB0aGUgY2FsbGluZyB0aHJl YWQgaXMgYWxzbyByZXBvcnRpbmcgdGhlIHN0YXR1cyBvbiB0aGUNCj4gPiA+ID4gKyAqIHNhbWUg UVMgdmFyaWFibGUsIGl0IG11c3QgdXBkYXRlIHRoZSBxdWllc2NlbnQgc3RhdGUgc3RhdHVzLA0K PiA+ID4gPiArYmVmb3JlDQo+ID4gPiA+ICsgKiBjYWxsaW5nIHRoaXMgQVBJLg0KPiA+ID4gPiAr ICoNCj4gPiA+ID4gKyAqIDIpIEluIGFkZGl0aW9uLCB3aGlsZSBjYWxsaW5nIGZyb20gbXVsdGlw bGUgdGhyZWFkcywgb25seQ0KPiA+ID4gPiArICogb25lIG9mIHRob3NlIHRocmVhZHMgY2FuIGJl IHJlcG9ydGluZyB0aGUgcXVpZXNjZW50IHN0YXRlDQo+ID4gPiA+ICtzdGF0dXMNCj4gPiA+ID4g KyAqIG9uIGEgZ2l2ZW4gUVMgdmFyaWFibGUuDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogQHBh cmFtIHYNCj4gPiA+ID4gKyAqICAgUVMgdmFyaWFibGUNCj4gPiA+ID4gKyAqIEBwYXJhbSB0DQo+ ID4gPiA+ICsgKiAgIFRva2VuIHJldHVybmVkIGJ5IHJ0ZV9yY3VfcXNicl9zdGFydCBBUEkNCj4g PiA+ID4gKyAqIEBwYXJhbSB3YWl0DQo+ID4gPiA+ICsgKiAgIElmIHRydWUsIGJsb2NrIHRpbGwg YWxsIHRoZSByZWFkZXIgdGhyZWFkcyBoYXZlIGNvbXBsZXRlZCBlbnRlcmluZw0KPiA+ID4gPiAr ICogICB0aGUgcXVpZXNjZW50IHN0YXRlIHJlZmVyZW5jZWQgYnkgdG9rZW4gJ3QnLg0KPiA+ID4g PiArICogQHJldHVybg0KPiA+ID4gPiArICogICAtIDAgaWYgYWxsIHJlYWRlciB0aHJlYWRzIGhh dmUgTk9UIHBhc3NlZCB0aHJvdWdoIHNwZWNpZmllZA0KPiBudW1iZXINCj4gPiA+ID4gKyAqICAg ICBvZiBxdWllc2NlbnQgc3RhdGVzLg0KPiA+ID4gPiArICogICAtIDEgaWYgYWxsIHJlYWRlciB0 aHJlYWRzIGhhdmUgcGFzc2VkIHRocm91Z2ggc3BlY2lmaWVkIG51bWJlcg0KPiA+ID4gPiArICog ICAgIG9mIHF1aWVzY2VudCBzdGF0ZXMuDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK3N0YXRpYyBf X3J0ZV9hbHdheXNfaW5saW5lIGludCBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiA+ID4gK3J0ZV9y Y3VfcXNicl9jaGVjayhzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2LCB1aW50NjRfdCB0LCBib29sIHdh aXQpIHsNCj4gPiA+ID4gKwlSVEVfQVNTRVJUKHYgIT0gTlVMTCk7DQo+ID4gPiA+ICsNCj4gPiA+ ID4gKwlpZiAobGlrZWx5KHYtPm51bV90aHJlYWRzID09IHYtPm1heF90aHJlYWRzKSkNCj4gPiA+ ID4gKwkJcmV0dXJuIF9fcmN1X3FzYnJfY2hlY2tfYWxsKHYsIHQsIHdhaXQpOw0KPiA+ID4gPiAr CWVsc2UNCj4gPiA+ID4gKwkJcmV0dXJuIF9fcmN1X3FzYnJfY2hlY2tfc2VsZWN0aXZlKHYsIHQs IHdhaXQpOyB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICogQHdhcm5pbmcN Cj4gPiA+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0 IHByaW9yIG5vdGljZQ0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIFdhaXQgdGlsbCB0aGUgcmVh ZGVyIHRocmVhZHMgaGF2ZSBlbnRlcmVkIHF1aWVzY2VudCBzdGF0ZS4NCj4gPiA+ID4gKyAqDQo+ ID4gPiA+ICsgKiBUaGlzIGlzIGltcGxlbWVudGVkIGFzIGEgbG9jay1mcmVlIGZ1bmN0aW9uLiBJ dCBpcyBtdWx0aS10aHJlYWQgc2FmZS4NCj4gPiA+ID4gKyAqIFRoaXMgQVBJIGNhbiBiZSB0aG91 Z2h0IG9mIGFzIGEgd3JhcHBlciBhcm91bmQNCj4gPiA+ID4gK3J0ZV9yY3VfcXNicl9zdGFydCBh bmQNCj4gPiA+ID4gKyAqIHJ0ZV9yY3VfcXNicl9jaGVjayBBUElzLg0KPiA+ID4gPiArICoNCj4g PiA+ID4gKyAqIElmIHRoaXMgQVBJIGlzIGNhbGxlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMsIG9u bHkgb25lIG9mDQo+ID4gPiA+ICsgKiB0aG9zZSB0aHJlYWRzIGNhbiBiZSByZXBvcnRpbmcgdGhl IHF1aWVzY2VudCBzdGF0ZSBzdGF0dXMgb24gYQ0KPiA+ID4gPiArICogZ2l2ZW4gUVMgdmFyaWFi bGUuDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogQHBhcmFtIHYNCj4gPiA+ID4gKyAqICAgUVMg dmFyaWFibGUNCj4gPiA+ID4gKyAqIEBwYXJhbSB0aHJlYWRfaWQNCj4gPiA+ID4gKyAqICAgVGhy ZWFkIElEIG9mIHRoZSBjYWxsZXIgaWYgaXQgaXMgcmVnaXN0ZXJlZCB0byByZXBvcnQgcXVpZXNj ZW50IHN0YXRlDQo+ID4gPiA+ICsgKiAgIG9uIHRoaXMgUVMgdmFyaWFibGUgKGkuZS4gdGhlIGNh bGxpbmcgdGhyZWFkIGlzIGFsc28gcGFydCBvZiB0aGUNCj4gPiA+ID4gKyAqICAgcmVhZHNpZGUg Y3JpdGljYWwgc2VjdGlvbikuIElmIG5vdCwgcGFzcyBSVEVfUVNCUl9USFJJRF9JTlZBTElELg0K PiA+ID4gPiArICovDQo+ID4gPiA+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkIF9f cnRlX2V4cGVyaW1lbnRhbA0KPiA+ID4gPiArcnRlX3JjdV9xc2JyX3N5bmNocm9uaXplKHN0cnVj dCBydGVfcmN1X3FzYnIgKnYsIHVuc2lnbmVkIGludA0KPiA+ID4gPiArdGhyZWFkX2lkKSB7DQo+ ID4gPiA+ICsJdWludDY0X3QgdDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCVJURV9BU1NFUlQodiAh PSBOVUxMKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCXQgPSBydGVfcmN1X3FzYnJfc3RhcnQodik7 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkvKiBJZiB0aGUgY3VycmVudCB0aHJlYWQgaGFzIHJlYWRz aWRlIGNyaXRpY2FsIHNlY3Rpb24sDQo+ID4gPiA+ICsJICogdXBkYXRlIGl0cyBxdWllc2NlbnQg c3RhdGUgc3RhdHVzLg0KPiA+ID4gPiArCSAqLw0KPiA+ID4gPiArCWlmICh0aHJlYWRfaWQgIT0g UlRFX1FTQlJfVEhSSURfSU5WQUxJRCkNCj4gPiA+ID4gKwkJcnRlX3JjdV9xc2JyX3F1aWVzY2Vu dCh2LCB0aHJlYWRfaWQpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyogV2FpdCBmb3Igb3RoZXIg cmVhZGVycyB0byBlbnRlciBxdWllc2NlbnQgc3RhdGUgKi8NCj4gPiA+ID4gKwlydGVfcmN1X3Fz YnJfY2hlY2sodiwgdCwgdHJ1ZSk7DQo+ID4gPg0KPiA+ID4gQW5kIHlvdSBhcmUgcHJlc3VtYWJs eSByZWx5aW5nIG9uIDY0LWJpdCBjb3VudGVycyB0byBhdm9pZCB0aGUgbmVlZA0KPiA+ID4gdG8g ZXhlY3V0ZSB0aGUgYWJvdmUgY29kZSB0d2ljZSBpbiBzdWNjZXNzaW9uLiAgV2hpY2ggYWdhaW4g d29ya3MNCj4gPiA+IGdpdmVuIGN1cnJlbnQgQ1BVIGNsb2NrIHJhdGVzIGNvbWJpbmVkIHdpdGgg c3lzdGVtIGFuZCBodW1hbg0KPiBsaWZlc3BhbnMuDQo+ID4gPiBPdGhlcndpc2UsIHRoZXJlIGFy ZSBpbnRlcmVzdGluZyByYWNlIGNvbmRpdGlvbnMgdGhhdCBjYW4gaGFwcGVuLCBzbw0KPiA+ID4g ZG9uJ3QgdHJ5IHRoaXMgd2l0aCBhIDMyLWJpdCBjb3VudGVyISEhDQo+ID4NCj4gPiBZZXMuIEkg YW0gcmVseWluZyBvbiA2NC1iaXQgY291bnRlcnMgdG8gYXZvaWQgaGF2aW5nIHRvIHNwZW5kIGN5 Y2xlcyAoYW5kDQo+IHRpbWUpLg0KPiA+DQo+ID4gPiAoQnV0IHRoaW5rIG9mIHRoZSBncmVhdF5O IGdyYW5kY2hpbGRyZW4hISEpDQo+ID4NCj4gPiAoSXQgaXMgYW4gaW50ZXJlc3RpbmcgdGhvdWdo dC4gSSB3b25kZXIgd2hhdCB3b3VsZCBoYXBwZW4gdG8gYWxsIHRoZQ0KPiA+IGNvZGUgd2UgYXJl IHdyaXRpbmcgdG9kYXkg8J+YiikNCj4gDQo+IEkgc3VzcGVjdCB0aGF0IG1vc3Qgc3lzdGVtcyB3 aWxsIGJlIHJlYm9vdGVkIG1vcmUgdGhhbiBvbmNlIHBlciBkZWNhZGUsDQo+IHNvIHVubGVzcyBD UFUgY29yZSBjbG9jayByYXRlcyBtYW5hZ2UgdG8gZ28gdXAgYW5vdGhlciBvcmRlciBvZg0KPiBt YWduaXR1ZGUsIHdlIHNob3VsZCBiZSBqdXN0IGZpbmUuDQo+IA0KPiBGYW1vdXMgbGFzdCB3b3Jk cyEgIDstKQ0KPiANCj4gPiA+IE1vcmUgc2VyaW91c2x5LCBhIGNvbW1lbnQgd2FybmluZyBwZW9w bGUgbm90IHRvIG1ha2UgdGhlIGNvdW50ZXINCj4gYmUNCj4gPiA+IDMyIGJpdHMgaXMgaW4gb3Jk ZXIuDQo+ID4gQWdyZWUsIEkgd2lsbCBhZGQgaXQgaW4gdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9u Lg0KPiANCj4gU291bmRzIGdvb2QhDQpEb25lIGluIFY1DQoNCjxzbmlwPg0KDQo=