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 7F1B1A034F for ; Wed, 13 May 2020 03:28:41 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 386C51C012; Wed, 13 May 2020 03:28:41 +0200 (CEST) Received: from huawei.com (szxga01-in.huawei.com [45.249.212.187]) by dpdk.org (Postfix) with ESMTP id D42001BFA7; Wed, 13 May 2020 03:28:36 +0200 (CEST) Received: from DGGEML404-HUB.china.huawei.com (unknown [172.30.72.53]) by Forcepoint Email with ESMTP id 84294780E5640AC25D5B; Wed, 13 May 2020 09:28:34 +0800 (CST) Received: from DGGEML529-MBX.china.huawei.com ([169.254.6.116]) by DGGEML404-HUB.china.huawei.com ([fe80::b177:a243:7a69:5ab8%31]) with mapi id 14.03.0487.000; Wed, 13 May 2020 09:28:29 +0800 From: "Lilijun (Jerry)" To: "Wang, Yipeng1" , Honnappa Nagarahalli , "'dev@dpdk.org'" CC: wangyunjian , xudingke , "'stable@dpdk.org'" , nd , nd Thread-Topic: [dpdk-dev] [PATCH] lib/librte_hash: add rte_hash_del_key_fixed without compact Thread-Index: AdYcO135HJmvjYM1Q2CGkNRR8o1T1wBYjpkQAAj59vABXEemcAADnGyAAUyt8AAAEvv9YA== Date: Wed, 13 May 2020 01:28:27 +0000 Message-ID: <40280F65B1B0B44E8089ED31C01616EBA49C65F4@dggeml529-mbx.china.huawei.com> References: <40280F65B1B0B44E8089ED31C01616EBA49921F2@dggeml529-mbx.china.huawei.com> <40280F65B1B0B44E8089ED31C01616EBA4997CD9@dggeml529-mbx.china.huawei.com> <40280F65B1B0B44E8089ED31C01616EBA49A19CE@dggeml529-mbx.china.huawei.com> In-Reply-To: Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.173.251.98] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-CFilter-Loop: Reflected Subject: [dpdk-stable] =?utf-8?b?562U5aSNOiBbZHBkay1kZXZdIFtQQVRDSF0gbGli?= =?utf-8?q?/librte=5Fhash=3A_add_rte=5Fhash=5Fdel=5Fkey=5Ffixed_without_co?= =?utf-8?q?mpact?= X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" DQoNCj4gLS0tLS3pgq7ku7bljp/ku7YtLS0tLQ0KPiDlj5Hku7bkuro6IFdhbmcsIFlpcGVuZzEg W21haWx0bzp5aXBlbmcxLndhbmdAaW50ZWwuY29tXQ0KPiDlj5HpgIHml7bpl7Q6IDIwMjDlubQ1 5pyIMTPml6UgNzo0MQ0KPiDmlLbku7bkuro6IExpbGlqdW4gKEplcnJ5KSA8amVycnkubGlsaWp1 bkBodWF3ZWkuY29tPjsgSG9ubmFwcGEgTmFnYXJhaGFsbGkNCj4gPEhvbm5hcHBhLk5hZ2FyYWhh bGxpQGFybS5jb20+OyAnZGV2QGRwZGsub3JnJyA8ZGV2QGRwZGsub3JnPg0KPiDmioTpgIE6IHdh bmd5dW5qaWFuIDx3YW5neXVuamlhbkBodWF3ZWkuY29tPjsgeHVkaW5na2UNCj4gPHh1ZGluZ2tl QGh1YXdlaS5jb20+OyAnc3RhYmxlQGRwZGsub3JnJyA8c3RhYmxlQGRwZGsub3JnPjsgbmQNCj4g PG5kQGFybS5jb20+OyBuZCA8bmRAYXJtLmNvbT4NCj4g5Li76aKYOiBSRTogW2RwZGstZGV2XSBb UEFUQ0hdIGxpYi9saWJydGVfaGFzaDogYWRkIHJ0ZV9oYXNoX2RlbF9rZXlfZml4ZWQNCj4gd2l0 aG91dCBjb21wYWN0DQo+IA0KPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJv bTogTGlsaWp1biAoSmVycnkpIDxqZXJyeS5saWxpanVuQGh1YXdlaS5jb20+DQo+ID4gU2VudDog VHVlc2RheSwgTWF5IDUsIDIwMjAgNjoxMCBQTQ0KPiA+IFRvOiBIb25uYXBwYSBOYWdhcmFoYWxs aSA8SG9ubmFwcGEuTmFnYXJhaGFsbGlAYXJtLmNvbT47DQo+ID4gJ2RldkBkcGRrLm9yZycgPGRl dkBkcGRrLm9yZz4NCj4gPiBDYzogd2FuZ3l1bmppYW4gPHdhbmd5dW5qaWFuQGh1YXdlaS5jb20+ OyB4dWRpbmdrZQ0KPiA+IDx4dWRpbmdrZUBodWF3ZWkuY29tPjsgJ3N0YWJsZUBkcGRrLm9yZycg PHN0YWJsZUBkcGRrLm9yZz47IG5kDQo+ID4gPG5kQGFybS5jb20+OyBXYW5nLCBZaXBlbmcxIDx5 aXBlbmcxLndhbmdAaW50ZWwuY29tPjsgbmQNCj4gPG5kQGFybS5jb20+DQo+ID4gU3ViamVjdDog 562U5aSNOiBbZHBkay1kZXZdIFtQQVRDSF0gbGliL2xpYnJ0ZV9oYXNoOiBhZGQNCj4gPiBydGVf aGFzaF9kZWxfa2V5X2ZpeGVkIHdpdGhvdXQgY29tcGFjdA0KPiA+DQo+ID4gPiAtLS0tLemCruS7 tuWOn+S7ti0tLS0tDQo+ID4gPiDlj5Hku7bkuro6IEhvbm5hcHBhIE5hZ2FyYWhhbGxpIFttYWls dG86SG9ubmFwcGEuTmFnYXJhaGFsbGlAYXJtLmNvbV0NCj4gPiA+IOWPkemAgeaXtumXtDogMjAy MOW5tDXmnIg25pelIDc6MTgNCj4gPiA+IOaUtuS7tuS6ujogTGlsaWp1biAoSmVycnkpIDxqZXJy eS5saWxpanVuQGh1YXdlaS5jb20+OyAnZGV2QGRwZGsub3JnJw0KPiA+ID4gPGRldkBkcGRrLm9y Zz4NCj4gPiA+IOaKhOmAgTogd2FuZ3l1bmppYW4gPHdhbmd5dW5qaWFuQGh1YXdlaS5jb20+OyB4 dWRpbmdrZQ0KPiA+ID4gPHh1ZGluZ2tlQGh1YXdlaS5jb20+OyAnc3RhYmxlQGRwZGsub3JnJyA8 c3RhYmxlQGRwZGsub3JnPjsgbmQNCj4gPiA+IDxuZEBhcm0uY29tPjsgSG9ubmFwcGEgTmFnYXJh aGFsbGkNCj4gPEhvbm5hcHBhLk5hZ2FyYWhhbGxpQGFybS5jb20+Ow0KPiA+ID4geWlwZW5nMS53 YW5nQGludGVsLmNvbTsgbmQgPG5kQGFybS5jb20+DQo+ID4gPiDkuLvpopg6IFJFOiBbZHBkay1k ZXZdIFtQQVRDSF0gbGliL2xpYnJ0ZV9oYXNoOiBhZGQNCj4gPiA+IHJ0ZV9oYXNoX2RlbF9rZXlf Zml4ZWQgd2l0aG91dCBjb21wYWN0DQo+ID4gPg0KPiA+ID4gPHNuaXA+DQo+ID4gPg0KPiA+ID4g QWRkaW5nIFlpcGVuZywgbWFpbnRhaW5lciBmb3IgaGFzaCBsaWJyYXJ5DQo+ID4gPg0KPiA+ID4g Pg0KPiA+ID4gPiBUaGFua3MgZm9yIHlvdXIgcmVwbHkuDQo+ID4gPiA+DQo+ID4gPiA+IFVzaW5n IHJ0ZV9oYXNoIGl0ZXJhdGUgYW5kIGRlbGV0ZSBrZXlzIGlzIHRvIGZyZWUgdGhlIHJlbGF0ZWQN Cj4gPiA+ID4gZGF0YSdzDQo+ID4gbWVtb3J5Lg0KPiA+ID4gPiBUaGVyZSBhcmUgdHdvIHJlYXNv bnMgd2h5IHJ0ZV9oYXNoX3Jlc2V0KCkgaXMgbm90IHByb3Blcmx5Og0KPiA+ID4gPiAxKSAgdGhl IHJlc2V0IGZ1bmN0aW9uIGp1c3QgY2xlYXIgYWxsIGtleXMsIHRoZSBrZXkncyByZWxhdGVkIGRh dGEgYXJlDQo+IGxlYWtlZC4NCj4gPiA+IFRoYXQgaXMgYSBnb29kIHBvaW50LiBJIHRoaW5rIHRo aXMgc2hvdWxkIGJlIGRvY3VtZW50ZWQgaW4gdGhlIEFQSS4NCj4gDQo+IFtZaXBlbmddDQo+IEJ5 IGxlYWtpbmcsIGRvIHlvdSBtZWFuIHRoYXQgeW91IGtlZXAgZGF0YSBpbiBzZXBhcmF0ZSBwbGFj ZXMgYW5kIHRoZQ0KPiBwb2ludGVycyB0byB0aGVtIGFyZSBtaXNzZWQgZnJvbSB0YWJsZSBhZnRl ciByZXNldD8gQ2FuIHlvdSBrZWVwIGRhdGEgaW4gYW4NCj4gYXJyYXkgYW5kIGl0ZXJhdGUgdGhh dCBhcnJheSBpbnN0ZWFkPw0KW0xpbGlqdW4gKEplcnJ5KV0gDQpZZXMsIHRoZSBkYXRhIHBvaW50 ZXJzIGluIHJ0ZSBoYXNoIHRhYmxlIGFyZSBtaXNzZWQgYWZ0ZXIgcmVzZXQuDQpUaGUgc29sdXRp b24gdXNpbmcgYW4gZXh0ZXJuYWwgYXJyYXkgdG8ga2VlcCBhbGwgZGF0YSBjYW4gYXZvaWQgdGhp cyBwcm9ibGVtLCBidXQgaXQgbWF5IGludHJvZHVjZSBzb21lIGV4dHJhIG1lbW9yaWVzIGNvc3Qu DQpJdCdzIGJldHRlciBydGVfaGFzaCBjYW4gc3VwcG9ydCBpdGVyYXRlIHdoZW4gaW5zZXJ0aW5n IG9yIGRlbGV0aW5nLg0KPiA+ID4NCj4gPiA+ID4gMikgIEluIHNvbWUgY2FzZXMsIEkgZG9uJ3Qg bmVlZCBkZWxldGUgYWxsIGtleXMuIEp1c3Qgc29tZQ0KPiA+ID4gPiBzZWxlY3RlZCBrZXlzIGFu ZCBkYXRhIGFyZSBkZWxldGVkIGFuZCByZWxlYXNlZC4NCj4gW1lpcGVuZ10NCj4gQ291bGQgeW91 IGtlZXAgYSBjYW5kaWRhdGUgbGlzdCBvZiBrZXlzIHlvdSB3YW50IHRvIGRlbGV0ZSBpbiBhbm90 aGVyIGRhdGENCj4gc3RydWN0dXJlIHNvIHlvdSBkb27igJl0IG5lZWQgdG8gaXRlcmF0ZSB0aGUg d2hvbGUgaGFzaCB0YWJsZT8NCj4gDQpbTGlsaWp1biAoSmVycnkpXSANCkkgbmVlZCBpdGVyYXRl IHRoZSBoYXNoIHRhYmxlIGF0IGZpcnN0IGFuZCBkZWNpZGUgd2hpY2gga2V5IGFyZSBjYW5kaWRh dGUsICB0aGVuIGRlbGV0ZSB0aGUga2V5L2RhdGEgaW5zdGFudGx5Lg0KT2YgY291cnNlLCBoZXJl IEkgY2FuIGtlZXAgdGhvc2UgY2FuZGlkYXRlIGtleXMgYW5kIGRhdGFzIGluIGEgdGVtcG9yYXJ5 IGxpc3QgYW5kIGRlbGV0ZSB0aGVtIGFmdGVyIHRoZSBpdGVyYXRlIGlzIGZpbmlzaGVkLg0KVGhp cyBtYXkgYmUgYSBzZWNvbmQgY2hvaWNlIGZvciBtZSBhbHRob3VnaCBpdCBiZWNhbWUgbW9yZSBj b21wbGljYXRlZC4NCj4gPiA+IEkgdW5kZXJzdGFuZCB0aGUgcHJvYmxlbSB5b3UgaGF2ZSBwb2lu dGVkIG91dCBhbmQgdW5kZXJzdGFuZCBob3cgdG8NCj4gPiA+IHJlcHJvZHVjZSBpdC4gQnV0LCB0 aGUgdXNlIGNhc2UgaXMgbm90IGNsZWFyIHRvIG1lLiBDYW4geW91IHBsZWFzZQ0KPiA+ID4gZXhw bGFpbiB0aGUgdXNlIGNhc2U/DQo+ID4gW0xpbGlqdW4gKEplcnJ5KV0NCj4gPg0KPiA+IEFzIHlv dSBrbm93LCB0aGUgZHBkayBydGVfaGFzaCB1c2UgYSBmaXhlZCBzaXplIHRhYmxlIHRvIHN0b3Jl IGFsbA0KPiBrZXlzL2RhdGFzLg0KPiA+IFRoZSBtZW1vcnkgdXNlZCBieSBoYXNoIHRhYmxlIGlz IHJlbGF0ZWQgd2l0aCB0aGlzIGZpeGVkIHNpemUuDQo+ID4gSW4gbXkgY2FzZSwgbm9ybWFsbHkg dGhlIGNvdW50IG9mIGtleXMgaXMgYWJvdXQgMTAwLDAwMCBidXQgc29tZXRpbWVzDQo+ID4gdGhl IGNvdW50IG1heSBidXJzdCB1cCB0byAzMCwwMDAsMDAwLg0KPiA+IEluIG9yZGVyIHRvIHNhdmUg bWVtb3J5IHVzYWdlLCBJIGNyZWF0ZSBhIHNtYWxsIGhhc2ggdGFibGUgd2l0aA0KPiA+IDEwMCww MDAgc2l6ZSBhbmQgcmVwbGFjZSB0byBhIGJpZ2dlciBvbmUgd2l0aCAzMCwwMDAsMDAwIHNpemUg d2hlbg0KPiA+IHRoZXJlIGFyZSBtb3JlIGtleXMgdG8gYmUgc3RvcmVkLiBBbHNvIHdoZW4gdGhl IGtleSdzIGNvdW50IHJlZHVjZWQgdG8NCj4gPiBsZXNzIHRoYW4gMTAwLDAwMCwgSSByZXBsYWNl IHRoZSBoYXNoIHRhYmxlIHdpdGggYSBzbWFsbCBvbmUgdG8gc2F2ZSB0aGUNCj4gbWVtb3J5Lg0K PiBbWWlwZW5nXQ0KPiBDb3VsZCB5b3UgdGVsbCBtZSBtb3JlIG9uIHRoZSB1c2UgY2FzZT8gU2lu Y2UgaW5zZXJ0aW9uIHdvdWxkIGFsc28gaW52YWxpZGF0ZQ0KPiB0aGUgSXRlcmF0b3IsIGRvIHlv dSBpbnNlcnQga2V5cyBvbmx5IHRvIG5ldyB0YWJsZSBkdXJpbmcgcmVzaXppbmc/DQo+IA0KW0xp bGlqdW4gKEplcnJ5KV0gDQpZZXMsIEluc2VydCBvbmx5IHRvIG5ldyB0YWJsZS4gQmVjYXVzZSB0 aGUgcmVzaXplIHByb2Nlc3MgbmVlZCB0YWtlIGEgd3JpdGUgbG9jayBhbmQgdGhlIG9sZCB0YWJs ZSdzIGtleSBpbnNlcnRpb24gYXJlIHByZXZlbnRlZCBieSB0aGUgbG9jayBub3cuIA0KRG8geW91 IG1lYW4gdGhlIGtleSBpbnNlcnRpb24gbWF5IGNoYW5nZSBvdGhlciBrZXkncyBwb3NpdGlvbiBi eSBjdWNrb28gaGFzaCBhbGdvcml0aG0gYW5kIGludmFsaWRhdGUgdGhlIGl0ZXJhdG9yPw0KVGhh dCBtYXliZSBhIG5ldyBxdWVzdGlvbiBJIGhhdmVuJ3QgbWV0IHlldC4NCj4gPg0KPiA+ID4NCj4g PiA+ID4NCj4gPiA+ID4gSmVycnkuDQo+ID4gPiA+DQo+ID4gPiA+IC0tLS0t6YKu5Lu25Y6f5Lu2 LS0tLS0NCj4gPiA+ID4g5Y+R5Lu25Lq6OiBIb25uYXBwYSBOYWdhcmFoYWxsaSBbbWFpbHRvOkhv bm5hcHBhLk5hZ2FyYWhhbGxpQGFybS5jb21dDQo+ID4gPiA+IOWPkemAgeaXtumXtDogMjAyMOW5 tDTmnIgyOeaXpSA0OjQ2DQo+ID4gPiA+IOaUtuS7tuS6ujogTGlsaWp1biAoSmVycnkpIDxqZXJy eS5saWxpanVuQGh1YXdlaS5jb20+OyAnZGV2QGRwZGsub3JnJw0KPiA+ID4gPiA8ZGV2QGRwZGsu b3JnPg0KPiA+ID4gPiDmioTpgIE6IHdhbmd5dW5qaWFuIDx3YW5neXVuamlhbkBodWF3ZWkuY29t PjsgeHVkaW5na2UNCj4gPiA+ID4gPHh1ZGluZ2tlQGh1YXdlaS5jb20+OyAnc3RhYmxlQGRwZGsu b3JnJyA8c3RhYmxlQGRwZGsub3JnPjsgbmQNCj4gPiA+ID4gPG5kQGFybS5jb20+OyBIb25uYXBw YSBOYWdhcmFoYWxsaQ0KPiA+IDxIb25uYXBwYS5OYWdhcmFoYWxsaUBhcm0uY29tPjsNCj4gPiA+ IG5kDQo+ID4gPiA+IDxuZEBhcm0uY29tPg0KPiA+ID4gPiDkuLvpopg6IFJFOiBbZHBkay1kZXZd IFtQQVRDSF0gbGliL2xpYnJ0ZV9oYXNoOiBhZGQNCj4gPiA+ID4gcnRlX2hhc2hfZGVsX2tleV9m aXhlZCB3aXRob3V0IGNvbXBhY3QNCj4gPiA+ID4NCj4gPiA+ID4gPHNuaXA+DQo+ID4gPiA+DQo+ ID4gPiA+IEhpIEplcnJ5LA0KPiA+ID4gPiAJRmV3IHF1ZXN0aW9ucyBpbmxpbmUuDQo+ID4gPiA+ DQo+ID4gPiA+ID4gU3ViamVjdDogW2RwZGstZGV2XSBbUEFUQ0hdIGxpYi9saWJydGVfaGFzaDog YWRkDQo+ID4gPiA+ID4gcnRlX2hhc2hfZGVsX2tleV9maXhlZCB3aXRob3V0IGNvbXBhY3QNCj4g PiA+ID4gPg0KPiA+ID4gPiA+IFRoZSBrZXlzIGlkeCBhcmUgc3RvcmVkIGluIHJ0ZV9oYXNoIG1h aW4gYnVja2V0IGtleSBzbG90cyBhbmQNCj4gPiA+ID4gPiBleHRlbmQgYnVja2V0IGtleSBzdG90 cy4NCj4gPiA+ID4gPiBXZSBpdGVyYXRlIGV2ZXJ5IG5vIGVtcHR5IEtleXMgaW4gaC0+YnVja2V0 cyBhbmQgaC0+YnVja2V0c19leHQNCj4gPiA+ID4gPiBmcm9tIHN0YXJ0IHRvIGxhc3QuDQo+ID4g PiA+ID4gV2hlbiBkZWxldGluZyBrZXlzIHRoZSBmdW5jdGlvbiBfX3J0ZV9oYXNoX2NvbXBhY3Rf bGwoKSBtYXkgbW92ZQ0KPiA+ID4gPiA+IGxhc3RfYmt0J3Mga2V5IHRvIHByZXZpb3VzIGJ1Y2tl dCBpbiBvcmRlciB0byBjb21wYWN0IGV4dGVuZCBidWNrZXQNCj4gbGlzdC4NCj4gPiA+ID4gPiBJ ZiB0aGUgcHJldmlvdXMgYnVja2V0IGhhcyBiZWVuIGl0ZXJhdGVkLCB0aGUgbW92ZWQga2V5IG1h eSBiZQ0KPiA+ID4gPiA+IG1pc3NlZCBmb3IgdXNlcnMuDQo+ID4gPiA+ID4gVGhlbiB0aG9zZSBt aXNzZWQga2V5cyBhcmUgbGVha2VkIGFuZCBydGVfaGFzaCB0YWJsZSBjYW4ndCBiZQ0KPiBjbGVh bnVwLg0KPiA+ID4gPiA+IFNvIHdlIGFkZCBhIG5ldyBBUEkgcnRlX2hhc2hfZGVsX2tleV9maXhl ZCgpIHVzZWQgaW4gaXRlcmF0ZQ0KPiA+ID4gPiA+IGxvb3AgdG8gYXZvaWQgdGhpcyBidWdzLg0K PiA+ID4gPiA+DQo+ID4gPiA+ID4gLS0tDQo+ID4gPiA+ID4gIGxpYi9saWJydGVfaGFzaC9ydGVf Y3Vja29vX2hhc2guYyAgICB8IDE5ICsrKysrKysrKysrKysrLS0tLS0NCj4gPiA+ID4gPiAgbGli L2xpYnJ0ZV9oYXNoL3J0ZV9oYXNoLmggICAgICAgICAgIHwgIDUgKysrKysNCj4gPiA+ID4gPiAg bGliL2xpYnJ0ZV9oYXNoL3J0ZV9oYXNoX3ZlcnNpb24ubWFwIHwgIDEgKw0KPiA+ID4gPiA+ICAz IGZpbGVzIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pDQo+ID4gPiA+ ID4NCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9oYXNoL3J0ZV9jdWNrb29faGFz aC5jDQo+ID4gPiA+ID4gYi9saWIvbGlicnRlX2hhc2gvcnRlX2N1Y2tvb19oYXNoLmMNCj4gPiA+ ID4gPiBpbmRleCBiNTI2MzBiLi4yZGEzYzFkIDEwMDY0NA0KPiA+ID4gPiA+IC0tLSBhL2xpYi9s aWJydGVfaGFzaC9ydGVfY3Vja29vX2hhc2guYw0KPiA+ID4gPiA+ICsrKyBiL2xpYi9saWJydGVf aGFzaC9ydGVfY3Vja29vX2hhc2guYw0KPiA+ID4gPiA+IEBAIC0xNTIzLDcgKzE1MjMsNyBAQCBz ZWFyY2hfYW5kX3JlbW92ZShjb25zdCBzdHJ1Y3QgcnRlX2hhc2gNCj4gPiA+ID4gPiAqaCwgY29u c3Qgdm9pZCAqa2V5LA0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gIHN0YXRpYyBpbmxpbmUgaW50MzJf dA0KPiA+ID4gPiA+ICBfX3J0ZV9oYXNoX2RlbF9rZXlfd2l0aF9oYXNoKGNvbnN0IHN0cnVjdCBy dGVfaGFzaCAqaCwgY29uc3QNCj4gPiA+ID4gPiB2b2lkDQo+ID4gPiAqa2V5LA0KPiA+ID4gPiA+ IC0JCQkJCQloYXNoX3NpZ190IHNpZykNCj4gPiA+ID4gPiArCQkJCQkJaGFzaF9zaWdfdCBzaWcs DQo+IHVpbnQ4X3QNCj4gPiA+ID4gPiBjb21wYWN0KQ0KPiA+ID4gPiA+ICB7DQo+ID4gPiA+ID4g IAl1aW50MzJfdCBwcmltX2J1Y2tldF9pZHgsIHNlY19idWNrZXRfaWR4Ow0KPiA+ID4gPiA+ICAJ c3RydWN0IHJ0ZV9oYXNoX2J1Y2tldCAqcHJpbV9ia3QsICpzZWNfYmt0LCAqcHJldl9ia3QsDQo+ ID4gPiA+ID4gKmxhc3RfYmt0Ow0KPiA+ID4gPiBAQA0KPiA+ID4gPiA+IC0xNTQxLDcgKzE1NDEs OCBAQCBfX3J0ZV9oYXNoX2RlbF9rZXlfd2l0aF9oYXNoKGNvbnN0IHN0cnVjdA0KPiA+ID4gPiA+ IHJ0ZV9oYXNoICpoLCBjb25zdCB2b2lkICprZXksDQo+ID4gPiA+ID4gIAkvKiBsb29rIGZvciBr ZXkgaW4gcHJpbWFyeSBidWNrZXQgKi8NCj4gPiA+ID4gPiAgCXJldCA9IHNlYXJjaF9hbmRfcmVt b3ZlKGgsIGtleSwgcHJpbV9ia3QsIHNob3J0X3NpZywgJnBvcyk7DQo+ID4gPiA+ID4gIAlpZiAo cmV0ICE9IC0xKSB7DQo+ID4gPiA+ID4gLQkJX19ydGVfaGFzaF9jb21wYWN0X2xsKGgsIHByaW1f Ymt0LCBwb3MpOw0KPiA+ID4gPiA+ICsJCWlmIChjb21wYWN0KQ0KPiA+ID4gPiA+ICsJCQlfX3J0 ZV9oYXNoX2NvbXBhY3RfbGwoaCwgcHJpbV9ia3QsIHBvcyk7DQo+ID4gPiA+ID4gIAkJbGFzdF9i a3QgPSBwcmltX2JrdC0+bmV4dDsNCj4gPiA+ID4gPiAgCQlwcmV2X2JrdCA9IHByaW1fYmt0Ow0K PiA+ID4gPiA+ICAJCWdvdG8gcmV0dXJuX2JrdDsNCj4gPiA+ID4gPiBAQCAtMTU1Myw3ICsxNTU0 LDggQEAgX19ydGVfaGFzaF9kZWxfa2V5X3dpdGhfaGFzaChjb25zdA0KPiBzdHJ1Y3QNCj4gPiA+ ID4gPiBydGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAqa2V5LA0KPiA+ID4gPiA+ICAJRk9SX0VBQ0hf QlVDS0VUKGN1cl9ia3QsIHNlY19ia3QpIHsNCj4gPiA+ID4gPiAgCQlyZXQgPSBzZWFyY2hfYW5k X3JlbW92ZShoLCBrZXksIGN1cl9ia3QsIHNob3J0X3NpZywNCj4gJnBvcyk7DQo+ID4gPiA+ID4g IAkJaWYgKHJldCAhPSAtMSkgew0KPiA+ID4gPiA+IC0JCQlfX3J0ZV9oYXNoX2NvbXBhY3RfbGwo aCwgY3VyX2JrdCwgcG9zKTsNCj4gPiA+ID4gPiArCQkJaWYgKGNvbXBhY3QpDQo+ID4gPiA+ID4g KwkJCQlfX3J0ZV9oYXNoX2NvbXBhY3RfbGwoaCwgY3VyX2JrdCwNCj4gcG9zKTsNCj4gPiA+ID4g PiAgCQkJbGFzdF9ia3QgPSBzZWNfYmt0LT5uZXh0Ow0KPiA+ID4gPiA+ICAJCQlwcmV2X2JrdCA9 IHNlY19ia3Q7DQo+ID4gPiA+ID4gIAkJCWdvdG8gcmV0dXJuX2JrdDsNCj4gPiA+ID4gPiBAQCAt MTYwNywxNCArMTYwOSwyMSBAQCBydGVfaGFzaF9kZWxfa2V5X3dpdGhfaGFzaChjb25zdA0KPiBz dHJ1Y3QNCj4gPiA+ID4gPiBydGVfaGFzaCAqaCwNCj4gPiA+ID4gPiAgCQkJY29uc3Qgdm9pZCAq a2V5LCBoYXNoX3NpZ190IHNpZykgIHsNCj4gPiA+ID4gPiAgCVJFVFVSTl9JRl9UUlVFKCgoaCA9 PSBOVUxMKSB8fCAoa2V5ID09IE5VTEwpKSwgLUVJTlZBTCk7DQo+ID4gPiA+ID4gLQlyZXR1cm4g X19ydGVfaGFzaF9kZWxfa2V5X3dpdGhfaGFzaChoLCBrZXksIHNpZyk7DQo+ID4gPiA+ID4gKwly ZXR1cm4gX19ydGVfaGFzaF9kZWxfa2V5X3dpdGhfaGFzaChoLCBrZXksIHNpZywgMSk7DQo+ID4g PiA+ID4gIH0NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICBpbnQzMl90DQo+ID4gPiA+ID4gIHJ0ZV9o YXNoX2RlbF9rZXkoY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLCBjb25zdCB2b2lkICprZXkpICB7 DQo+ID4gPiA+ID4gIAlSRVRVUk5fSUZfVFJVRSgoKGggPT0gTlVMTCkgfHwgKGtleSA9PSBOVUxM KSksIC1FSU5WQUwpOw0KPiA+ID4gPiA+IC0JcmV0dXJuIF9fcnRlX2hhc2hfZGVsX2tleV93aXRo X2hhc2goaCwga2V5LA0KPiBydGVfaGFzaF9oYXNoKGgsDQo+ID4gPiBrZXkpKTsNCj4gPiA+ID4g PiArCXJldHVybiBfX3J0ZV9oYXNoX2RlbF9rZXlfd2l0aF9oYXNoKGgsIGtleSwNCj4gcnRlX2hh c2hfaGFzaChoLA0KPiA+ID4ga2V5KSwNCj4gPiA+ID4gPiAxKTsNCj4gPiA+ID4gPiArfQ0KPiA+ ID4gPiA+ICsNCj4gPiA+ID4gPiAraW50MzJfdA0KPiA+ID4gPiA+ICtydGVfaGFzaF9kZWxfa2V5 X2ZpeGVkKGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAqa2V5KQ0KPiB7DQo+ ID4gPiA+ID4gKwlSRVRVUk5fSUZfVFJVRSgoKGggPT0gTlVMTCkgfHwgKGtleSA9PSBOVUxMKSks IC1FSU5WQUwpOw0KPiA+ID4gPiA+ICsJcmV0dXJuIF9fcnRlX2hhc2hfZGVsX2tleV93aXRoX2hh c2goaCwga2V5LA0KPiBydGVfaGFzaF9oYXNoKGgsDQo+ID4gPiBrZXkpLA0KPiA+ID4gPiA+IDAp Ow0KPiA+ID4gPiA+ICB9DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAgaW50DQo+ID4gPiA+ID4gZGlm ZiAtLWdpdCBhL2xpYi9saWJydGVfaGFzaC9ydGVfaGFzaC5oDQo+ID4gPiA+ID4gYi9saWIvbGli cnRlX2hhc2gvcnRlX2hhc2guaCBpbmRleCBlY2ViMzY1Li45YjcxZDhhIDEwMDY0NA0KPiA+ID4g PiA+IC0tLSBhL2xpYi9saWJydGVfaGFzaC9ydGVfaGFzaC5oDQo+ID4gPiA+ID4gKysrIGIvbGli L2xpYnJ0ZV9oYXNoL3J0ZV9oYXNoLmgNCj4gPiA+ID4gPiBAQCAtMjk3LDYgKzI5NywxMSBAQCBy dGVfaGFzaF9hZGRfa2V5X3dpdGhfaGFzaChjb25zdCBzdHJ1Y3QNCj4gPiA+ID4gcnRlX2hhc2gN Cj4gPiA+ID4gPiAqaCwgY29uc3Qgdm9pZCAqa2V5LCBoYXNoX3NpZ190ICBpbnQzMl90ICBydGVf aGFzaF9kZWxfa2V5KGNvbnN0DQo+ID4gPiA+ID4gc3RydWN0IHJ0ZV9oYXNoICpoLCBjb25zdCB2 b2lkICprZXkpOw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsvKiBmb3Igd2l0 aG91dCBjb21wYWN0ICovDQo+ID4gPiA+ID4gK2ludDMyX3QNCj4gPiA+ID4gPiArcnRlX2hhc2hf ZGVsX2tleV9maXhlZChjb25zdCBzdHJ1Y3QgcnRlX2hhc2ggKmgsIGNvbnN0IHZvaWQNCj4gPiA+ ID4gPiArKmtleSk7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICAvKioNCj4gPiA+ID4gPiAgICog UmVtb3ZlIGEga2V5IGZyb20gYW4gZXhpc3RpbmcgaGFzaCB0YWJsZS4NCj4gPiA+ID4gPiAgICog VGhpcyBvcGVyYXRpb24gaXMgbm90IG11bHRpLXRocmVhZCBzYWZlIGRpZmYgLS1naXQNCj4gPiA+ ID4gPiBhL2xpYi9saWJydGVfaGFzaC9ydGVfaGFzaF92ZXJzaW9uLm1hcA0KPiA+ID4gPiA+IGIv bGliL2xpYnJ0ZV9oYXNoL3J0ZV9oYXNoX3ZlcnNpb24ubWFwDQo+ID4gPiA+ID4gaW5kZXggMzBj YzA4Ni4uMTk0MWQxNyAxMDA2NDQNCj4gPiA+ID4gPiAtLS0gYS9saWIvbGlicnRlX2hhc2gvcnRl X2hhc2hfdmVyc2lvbi5tYXANCj4gPiA+ID4gPiArKysgYi9saWIvbGlicnRlX2hhc2gvcnRlX2hh c2hfdmVyc2lvbi5tYXANCj4gPiA+ID4gPiBAQCAtMTEsNiArMTEsNyBAQCBEUERLXzIwLjAgew0K PiA+ID4gPiA+ICAJcnRlX2hhc2hfY291bnQ7DQo+ID4gPiA+ID4gIAlydGVfaGFzaF9jcmVhdGU7 DQo+ID4gPiA+ID4gIAlydGVfaGFzaF9kZWxfa2V5Ow0KPiA+ID4gPiA+ICsJcnRlX2hhc2hfZGVs X2tleV9maXhlZDsNCj4gPiA+ID4gPiAgCXJ0ZV9oYXNoX2RlbF9rZXlfd2l0aF9oYXNoOw0KPiA+ ID4gPiA+ICAJcnRlX2hhc2hfZmluZF9leGlzdGluZzsNCj4gPiA+ID4gPiAgCXJ0ZV9oYXNoX2Zy ZWU7DQo+ID4gPiA+ID4gLS0NCj4gPiA+ID4gPiAyLjE5LjENCj4gPiA+ID4gPg0KPiA+ID4gPiA+ IC0tLS0t6YKu5Lu25Y6f5Lu2LS0tLS0NCj4gPiA+ID4gPiDlj5Hku7bkuro6IExpbGlqdW4gKEpl cnJ5KQ0KPiA+ID4gPiA+IOWPkemAgeaXtumXtDogMjAyMOW5tDTmnIgxOOaXpSAxODowMA0KPiA+ ID4gPiA+IOaUtuS7tuS6ujogJ2RldkBkcGRrLm9yZycgPGRldkBkcGRrLm9yZz47ICdzdGFibGVA ZHBkay5vcmcnDQo+ID4gPiA+ID4gPHN0YWJsZUBkcGRrLm9yZz4NCj4gPiA+ID4gPiDkuLvpopg6 IHJ0ZV9oYXNoIGJ1ZzogY2FuJ3QgaXRlcmF0ZSBhbGwgZW50cmllcyB3aGVuIGRlbGV0aW5nIGtl eXMNCj4gPiA+ID4gPiBpbiBydGVfaGFzaCBpdGVyYXRlIGxvb3AuDQo+ID4gPiA+ID4NCj4gPiA+ ID4gPiBIaSBhbGwsDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAgICAgSW4gbXkgdGVzdCwgZW50cmll cyBjYW4ndCBiZSBjbGVhbnVwIGluIHJ0ZV9oYXNoIHRhYmxlIHdoZW4NCj4gPiA+ID4gPiBkZWxl dGluZyBrZXlzIGluIHJ0ZV9oYXNoIGl0ZXJhdGUgbG9vcC4gVGhlIHRlc3Qgc3RlcHM6DQo+ID4g PiA+ID4gICAgIDEuICBjcmVhdGUgYSBoYXNoIHRhYmxlIHRhYmxlMSB3aXRoIGxpbWl0IDMwMDAw LCBleHQgYnVja2V0DQo+ID4gPiA+ID4gZW5hYmxlZCwgIGFuZCBpbnNlcnQgMzAwMDAgZW50cmll cyBpbnRvIHRoaXMgaGFzaCB0YWJsZS4NCj4gPiA+ID4gPiAgICAgMi4gIGNyZWF0ZSBhIGxhcmdl ciBoYXNoIHRhYmxlIHRhYmxlMiB3aXRoIGxpbWl0IDYwMDAwLCAsDQo+ID4gPiA+ID4gZXh0IGJ1 Y2tldA0KPiA+ID4gPiBlbmFibGVkLg0KPiA+ID4gPiA+ICAgICAzLiAgaXRlcmF0ZSBhbGwgZW50 cmllcyBvZiB0YWJsZTEgYW5kIGluc2VydCB0aGVtIHRvIHRoZSB0YWJsZTIuDQo+ID4gPiA+ID4g SW5zZXJ0IG5ldw0KPiA+ID4gPiA+IDEwMDAwIGVudHJpZXMgdG8gdGhpcyB0YWJsZTIuDQo+ID4g PiA+ID4gICAgIDQuICBUaGVuIGZsdXNoIGFsbCBlbnRyaWVzIGZyb20gdGFibGUyIGJ5IGRlbGV0 aW5nIGtleXMgaW4NCj4gPiA+ID4gPiBydGVfaGFzaCBpdGVyYXRlIGxvb3AuIEJ1dCB0aGVyZSBh cmUgc3RpbGwgc29tZSBrZXlzIGxlYWtlZCBpbiB0YWJsZTIuDQo+ID4gPiA+IElzIHRoZXJlIGFu eSByZWFzb24gZm9yIGZsdXNoaW5nIHRhYmxlMiBpbiB0aGlzIG1hbm5lcj8NCj4gPiA+ID4gSXMg aXQgcG9zc2libGUgdG8gdXNlICdydGVfaGFzaF9yZXNldCcgaW5zdGVhZD8NCj4gPiA+ID4NCj4g PiA+ID4gPg0KPiA+ID4gPiA+ICAgICBGcm9tIG15IGFuYWx5c2lzLCB0aGUga2V5cyBpZHggYXJl IHN0b3JlZCBpbiBydGVfaGFzaCBtYWluDQo+ID4gPiA+ID4gYnVja2V0IGtleSBzbG90cyBhbmQg ZXh0ZW5kIGJ1Y2tldCBrZXkgc3RvdHMuDQo+ID4gPiA+ID4gICAgIFdlIGl0ZXJhdGUgZXZlcnkg bm8gZW1wdHkgS2V5cyBpbiBoLT5idWNrZXRzIGFuZA0KPiA+ID4gPiA+IGgtPmJ1Y2tldHNfZXh0 IGZyb20gc3RhcnQgdG8gbGFzdC4NCj4gPiA+ID4gPiAgICAgV2hlbiBkZWxldGluZyBrZXlzIHRo ZSBmdW5jdGlvbiBfX3J0ZV9oYXNoX2NvbXBhY3RfbGwoKSBtYXkNCj4gPiA+ID4gPiBtb3ZlIGxh c3RfYmt0J3Mga2V5IHRvIHByZXZpb3VzIGJ1Y2tldCBpbiBvcmRlciB0byBjb21wYWN0DQo+ID4g PiA+ID4gZXh0ZW5kDQo+ID4gYnVja2V0IGxpc3QuDQo+ID4gPiA+ID4gICAgIElmIHRoZSBwcmV2 aW91cyBidWNrZXQgaGFzIGJlZW4gaXRlcmF0ZWQsIHRoZSBtb3ZlZCBrZXkgbWF5DQo+ID4gPiA+ ID4gYmUgbWlzc2VkIGZvciB1c2Vycy4NCj4gPiA+ID4gPiAgICAgVGhlbiB0aG9zZSBtaXNzZWQg a2V5cyBhcmUgbGVha2VkIGFuZCBydGVfaGFzaCB0YWJsZSBjYW4ndA0KPiA+ID4gPiA+IGJlDQo+ ID4gY2xlYW51cC4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICAgICBOb3cgSSByZXRyeSB0aGUgaXRl cmF0ZSBhbmQgZGVsZXRlIGtleXMsIHRoYXQgY2FuIGF2b2lkIHRoaXMgYnVnLg0KPiA+ID4gPiA+ DQo+ID4gPiA+ID4gICAgIElzIHRoZXJlIGFueSBpZGVhcyBvciBzb2x1dGlvbnMgb24gdGhpcyBi dWc/ICAgVGhhbmtzLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gSmVycnkuDQo+IFtXYW5nLCBZaXBl bmddDQo+IFRoYW5rcyBIb25uYXBwYSBmb3IgYWRkaW5nIG1lIHRvIHRoZSByZWNpcGllbnQgbGlz dCwgSSBhbSBzb3JyeSB0aGF0IEkgbWlzc2VkDQo+IHRoaXMgcGF0Y2ggcHJldmlvdXNseS4NCj4g SW4gZnV0dXJlIHlvdSBjb3VsZCBhZGQgbWUgdG8gdGhlIHJlY2lwaWVudCBsaXN0IGZvciBoYXNo IHJlbGF0ZWQNCj4gcGF0Y2hlcy9xdWVzdGlvbnMhIFRoYW5rcyENCj4gDQo+IEFsdGhvdWdoIGl0 IGlzIG5vdCBhIGJ1ZyB0byBtZSwgSSB0aGluayB0aGlzIGlzIGEgdmFsaWQgaXNzdWUgYW5kIHRo YW5rcyBmb3INCj4gYnJpbmdpbmcgaXQgdXAuDQo+IEkgc2VlIHRoZSBpdGVyYXRlIGZ1bmN0aW9u IGFzIGxpa2UgdGhlIGl0ZXJhdG9yIGZyb20gQysrIHN0bC4gQW55DQo+IGluc2VydGlvbi9kZWxl dGUgc2hvdWxkIGludmFsaWRhdGUgdGhlIGN1cnJlbnQgaXRlcmF0b3IgKGluc2VydGlvbiB0b28s IHNpbmNlDQo+IGluc2VydGlvbiBjb3VsZCBtb3ZlIHRoaW5ncyBhcm91bmQgaW4gY3Vja29vIHBh dGgpLg0KPiBGcm9tIHRoaXMgcG9pbnQgb2YgdmlldywgYnkgZGVzaWduIHRoZXJlIGlzIG5vIGd1 YXJhbnRlZSB0aGF0IHRoZSAibmV4dCINCj4gcG9pbnRlciBpcyBzdGlsbCB2YWxpZCBhZnRlciBh bnkgaW5zZXJ0aW9uL2RlbGV0aW9uIGR1cmluZyB0aGUgaXRlcmF0aW9uLiBXZSBhdA0KPiBsZWFz dCBzaG91bGQgY2xhcmlmeSB0aGlzIGluIHRoZSBkb2N1bWVudGF0aW9uLg0KPiANCj4gVGhhdCBz YWlkLCBpbiBjKysgc3RsIHRoZXJlIGlzIGluZGVlZCBhIHdheSB0byBpdGVyYXRlIGFuZCBkZWxl dGUgc2luY2UgaXQNCj4gcHJvdmlkZXMgYW4gZXJhc2UgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBu ZXh0IHZhbGlkIGl0ZXJhdG9yLg0KPiBJIHRoaW5rIHdlIGRvbuKAmXQgaGF2ZSBzdWNoIGNhcGFi aWxpdHkgaW4gcnRlX2hhc2ggbm93IGFzIHlvdSBwb2ludGVkIG91dCwgYW5kDQo+IHRoaXMgaXMg YSBnYXAgeW91IHdhbnQgdG8gZmlsbC4NCj4gDQo+IEhvd2V2ZXIsIHRoZSBwcm9wb3NlZCBBUEkg IiBydGVfaGFzaF9kZWxfa2V5X2ZpeGVkIiBleHBvc2VzIHRoZQ0KPiBpbnRlcm5hbHMgb2YgdGhl IGltcGxlbWVudGF0aW9uLg0KPiBUaGUgaW50ZXJuYWwgb2YgaGFzaCBsaWIgaXMgc3VwcG9zZWQg dG8gYmUgYSBibGFjayBib3ggdG8gdGhlIHVzZXIuIEFsdGhvdWdoDQo+IHRoZSBpc3N1ZSBpcyBj YXVzZWQgYnkgImNvbXBhY3Rpb24iLCB0aGUgQVBJIHNob3VsZCBub3QgZXhwb3NlIHRoYXQuIEkg YW0NCj4gdGhpbmtpbmcgYSBmdW5jdGlvbiBsaWtlIHRoZSAiZXJhc2UiIGZyb20gc3RsIHdoaWNo IHJldHVybnMgdGhlIG5leHQgdmFsaWQNCj4gaXRlcmF0b3Igc2hvdWxkIGJlIGEgYmV0dGVyIHdh eS4gV2hhdCBkbyB5b3UgdGhpbms/DQo+IA0KW0xpbGlqdW4gKEplcnJ5KV0gDQpZZXMsIEkgYW0g YWdyZWUgd2l0aCB5b3VyIHZpZXdzLiBTb21lICJlcmFzZSIgZnVuY3Rpb24gbWF5IGJlIGJldHRl ciBmb3IgdGhpcyBjYXNlcy4NCg0KPiBSZXNpemluZyBpcyBhbiBpbXBvcnRhbnQgZmVhdHVyZSB0 aGF0IHdlIGFsd2F5cyB0aGluayB0byBhZGQgaW50byBydGVfaGFzaC4NCj4gRmVlbCBmcmVlIHRv IHByb3Bvc2UgcmVzaXppbmcgRmVhdHVyZXMgdG9vIGludG8gcnRlX2hhc2ggYXMgeW91IGFyZSBh bHJlYWR5DQo+IGRvaW5nIHNpbWlsYXIgdGhpbmcgcmlnaHQgbm93Lg0KPiANCltMaWxpanVuIChK ZXJyeSldIA0KWWVzLCB0aGUgbWVtb3J5IGNvc3QgYnkgcnRlIGhhc2ggbWF5IGJlIHdhc3RlIHdo ZW4gdGhlIGtleXMgdXNhZ2UgaXMgbm90IGhpZ2ggaW4gY29tbW9uLg0KUmVzaXplIGZlYXR1cmVz IGNhbiBmaWd1cmUgb3V0IHRoYXQgcHJvYmxlbSBpbiBydGVfaGFzaC4gVGhhbmtzIGZvciB5b3Vy IGFkdmljZS4NCg0KPiBCVFcsIHlvdSBjYW4gYWRkIGEgW1JGQ10gcHJlZml4IHRvIHRoZSBzdWJq ZWN0IGxpbmUgZm9yIGZ1dHVyZSBSRkMgcGF0Y2hlcy4NCj4gDQo+IE90aGVyIHF1ZXN0aW9ucy9j b21tZW50cyBhcmUgaW5saW5lZC4NCj4gDQo=