From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AF197C433FE for ; Wed, 13 Oct 2021 14:08:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8474A61027 for ; Wed, 13 Oct 2021 14:08:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235811AbhJMOKO (ORCPT ); Wed, 13 Oct 2021 10:10:14 -0400 Received: from smtp-out2.suse.de ([195.135.220.29]:39892 "EHLO smtp-out2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232587AbhJMOKH (ORCPT ); Wed, 13 Oct 2021 10:10:07 -0400 Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 790F92020F; Wed, 13 Oct 2021 14:08:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1634134083; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=y3xdFgsrsH9taoD3MtS5JNdbWfpiOUohxXcQ30xiVD4=; b=YJ1u8PH+cLgmwJXHjLUIW8KxbaOjMtZhoonA+H/H1yaGqJRvPqnbI3FeCzarO28h5Fv3yT Ycrg6uh3Hmn8LMASzrVbNpoZEDzbayJbMTyp/z1MzP7qzq2S9PWoCL786eO2cYuiy2V2KF juHCnaCv4wi1v0Raaz/HFQPfLF/OL2U= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1634134083; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=y3xdFgsrsH9taoD3MtS5JNdbWfpiOUohxXcQ30xiVD4=; b=RsorchzwTZDxaQjmXzexkonmPb6+uJIhCcnmJg9/ncyw3NyNJLKcscUCkxrkgecjpVwagi DR6PbHiwK2AhQ7BQ== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 48F3613CEC; Wed, 13 Oct 2021 14:08:03 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id LDZbEEPoZmGIRgAAMHmgww (envelope-from ); Wed, 13 Oct 2021 14:08:03 +0000 Message-ID: Date: Wed, 13 Oct 2021 16:08:02 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.1.2 Subject: Re: [PATCH] fbdev: Garbage collect fbdev scrolling acceleration, part 1 (from TODO list) Content-Language: en-US To: Claudio Suarez Cc: Daniel Vetter , linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org References: <246e4210-e73a-af6d-b16d-589d9dec3be1@suse.de> From: Thomas Zimmermann In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------aUJq9gM3FRVW9L6m92X1aQIr" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------aUJq9gM3FRVW9L6m92X1aQIr Content-Type: multipart/mixed; boundary="------------BGXlVj5GD0qejWy5jLPsgd9e"; protected-headers="v1" From: Thomas Zimmermann To: Claudio Suarez Cc: Daniel Vetter , linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Message-ID: Subject: Re: [PATCH] fbdev: Garbage collect fbdev scrolling acceleration, part 1 (from TODO list) References: <246e4210-e73a-af6d-b16d-589d9dec3be1@suse.de> In-Reply-To: --------------BGXlVj5GD0qejWy5jLPsgd9e Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 SGkNCg0KQW0gMDEuMTAuMjEgdW0gMTQ6NDggc2NocmllYiBDbGF1ZGlvIFN1YXJlejoNCj4g T24gRnJpLCBPY3QgMDEsIDIwMjEgYXQgMTA6MjE6NDRBTSArMDIwMCwgVGhvbWFzIFppbW1l cm1hbm4gd3JvdGU6DQo+PiBIaQ0KPj4NCj4+IEFtIDMwLjA5LjIxIHVtIDE3OjEwIHNjaHJp ZWIgQ2xhdWRpbzoNCj4+PiBTY3JvbGwgYWNjZWxlcmF0aW9uIGlzIGRpc2FibGVkIGluIGZi Y29uIGJ5IGhhcmQtd2lyaW5nDQo+Pj4gcC0+c2Nyb2xsbW9kZSA9IFNDUk9MTF9SRURSQVcu IFJlbW92ZSB0aGUgb2Jzb2xldGUgY29kZSBpbiBmYmNvbi5jDQo+Pj4gYW5kIGZiZGV2L2Nv cmUvDQo+Pj4NCj4+PiBTaWduZWQtb2ZmLWJ5OiBDbGF1ZGlvIFN1YXJleiA8Y3Nza0BuZXQt Yy5lcz4NCj4+PiAtLS0NCj4+Pg0KPj4+IC0gVGhpcyBpcyBhIHRhc2sgaW4gdGhlIFRPRE8g bGlzdCBEb2N1bWVudGF0aW9uL2dwdS90b2RvLnJzdA0KPj4+IC0gVGhlIGNvbnRhY3QgaW4g dGhlIHRhc2sgaXMgRGFuaWVsIFZldHRlci4gSGUgaXMveW91IGFyZSBpbiBjb3B5Lg0KPj4+ IC0gVG8gZWFzZSB0aGUgdGhpbmdzIGFuZCBzYXZpbmcgdGltZSwgSSBkaWQgYSBwYXRjaC4g SXQgaXMgaW5jbHVkZWQgaW4gdGhpcw0KPj4+ICAgICBtZXNzYWdlLiBJIGNhbiByZWRvIGl0 IGlmIHRoZXJlIGlzIHNvbWV0aGluZyB3cm9uZy4NCj4+PiAtIEkgdGVzdGVkIGl0IGluIHNv bWUgY29uZmlndXJhdGlvbnMuDQo+Pj4NCj4+PiBNeSBwbGFuIGZvciBuZXcgcGF0Y2hlcyBp biB0aGlzIHRhc2s6DQo+Pj4gLSBBIGJ1Y2ggb2YgcGF0Y2hlcyB0byByZW1vdmUgY29kZSBm cm9tIGRyaXZlcnM6IGZiX2NvcHlhcmVhIGFuZCByZWxhdGVkLg0KPj4+IC0gU2ltcGxpZnkg dGhlIGNvZGUgYXJvdW5kIGZiY29uX29wcyBhcyBtdWNoIGFzIHBvc3NpYmxlIHRvIHJlbW92 ZSB0aGUgaG9va3MNCj4+PiAgICAgYXMgdGhlIFRPRE8gc3VnZ2VzdHMuDQo+Pj4gLSBSZW1v dmUgZmJfY29weWFyZWEgaW4gaGVhZGVycyBhbmQgZXhwb3J0ZWQgc3ltYm9sczogY2ZiX2Nv cHlhcmVhLCBldGMuIFRoaXMNCj4+PiAgICAgbXVzdCBiZSBkb25lIHdoZW4gYWxsIHRoZSBk cml2ZXJzIGFyZSBjaGFuZ2VkLg0KPj4+DQo+Pj4gSSB0aGluayB0aGF0IHRoZSBjb3JyZWN0 IGxpc3QgdG8gYXNrIHF1ZXN0aW9ucyBhYm91dCB0aGlzDQo+Pj4gaXMgbGludXgtZmJkZXZA dmdlci5rZXJuZWwub3JnIC4gSXMgaXQgY29ycmVjdCA/DQo+Pj4gTXkgcXVlc3Rpb246IEkg Y2FuIGRldmVsb3AgdGhlIG5ldyBjaGFuZ2VzLiBJIGNhbiB0ZXN0IGluIHR3byBjb21wdXRl cnMvdHdvDQo+Pj4gZHJpdmVycy4gSXMgdGhlcmUgYSB3YXkgdG8gdGVzdCB0aGUgcmVzdCBv ZiB0aGUgcGF0Y2hlcyA/IEkgaGF2ZSBub3QgaGFyZHdhcmUNCj4+PiB0byB0ZXN0IHRoZW0u IElzIGFueW9uZSBoZWxwaW5nIHdpdGggdGhpcz8gT25seSByZWdyZXNzaW9uIHRlc3RzIGFy ZSBuZWVkZWQuDQo+Pj4gSSBjYW4gdGVzdCBvdGhlciBwYXRjaGVzIGluIHJldHVybi4NCj4+ Pg0KPj4+IFRoYW5rIHlvdS4NCj4+PiBDbGF1ZGlvIFN1YXJlei4NCj4+Pg0KPj4+IFBhdGNo IGZvbGxvd3M6DQo+Pj4NCj4+PiAgICBEb2N1bWVudGF0aW9uL2dwdS90b2RvLnJzdCAgICAg ICAgICAgICAgfCAgMTMgKy0NCj4+PiAgICBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvYml0 YmxpdC5jICAgICAgfCAgMTYgLQ0KPj4+ICAgIGRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9m YmNvbi5jICAgICAgICB8IDUwOSArKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K Pj4+ICAgIGRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5oICAgICAgICB8ICA1OSAt LS0tDQo+Pj4gICAgZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jICAgIHwg IDI4ICstDQo+Pj4gICAgZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmMgICAg IHwgIDI4ICstDQo+Pj4gICAgZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0 ZS5oIHwgICA5IC0NCj4+PiAgICBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQu YyAgICAgfCAgMzcgKy0tDQo+Pj4gICAgZHJpdmVycy92aWRlby9mYmRldi9jb3JlL3RpbGVi bGl0LmMgICAgIHwgIDE2IC0NCj4+PiAgICBkcml2ZXJzL3ZpZGVvL2ZiZGV2L3NrZWxldG9u ZmIuYyAgICAgICAgfCAgMTIgKy0NCj4+PiAgICBpbmNsdWRlL2xpbnV4L2ZiLmggICAgICAg ICAgICAgICAgICAgICAgfCAgIDIgKy0NCj4+PiAgICAxMSBmaWxlcyBjaGFuZ2VkLCA1MSBp bnNlcnRpb25zKCspLCA2NzggZGVsZXRpb25zKC0pDQo+Pg0KPj4gTmljZSBzdGF0cyA6KQ0K Pj4NCj4+IEkgbG9va2VkIHRocm91Z2ggaXQgYW5kIGl0IGxvb2tzIGdvb2QuIE1heWJlIGRv dWJsZS1jaGVjayB0aGF0IGV2ZXJ5dGhpbmcNCj4+IHN0aWxsIGJ1aWxkcy4NCj4+DQo+PiBB Y2tlZC1ieTogVGhvbWFzIFppbW1lcm1hbm4gPHR6aW1tZXJtYW5uQHN1c2UuZGU+DQo+Pg0K PiANCj4gWWVzLCBpdCBzdGlsbCBidWlsZHMgOikNCj4gSSBoYWQgYnVpbHQgd2l0aCBzb21l IGRpZmZlcmVudCAuY29uZmlnIG9wdGlvbnMsIGluY2x1ZGluZw0KPiBhbGx5ZXNjb25maWcs IGFsbG5vLCBzb21lIHJhbmRvbXMgYW5kIGRlYmlhbiBkZWZhdWx0IGNvbmZpZy4gSSB0ZXN0 ZWQNCj4gc29tZSAuY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byBmYmRldi4gSSBzcGVudCB0 aW1lIHJ1bm5pbmcgc29tZSBrZXJuZWxzDQo+IHdpdGggZGlmZmVyZW50IHBhcmFtZXRlcnMg YW5kIGV2ZXJ5dGhpbmcgd2FzIG9rLg0KPiBUb2RheSwgSSd2ZSBqdXN0IGFwcGxpZWQgdGhl IHBhdGNoIHRvIHNvdXJjZSBmcm9tIHR3byBnaXRzOiBMaW51cw0KPiByYyBhbmQgZHJtLiBC b3RoIGhhdmUgYnVpbHQgb2suDQo+IEkgdGhpbmsgdGhhdCBJIGRpZCBlbm91Z2ggdGVzdHMg dG8gZW5zdXJlIGl0IHdvcmtzIGZpbmUuIFRoaXMgY29kZSBpcyBnb2luZw0KPiB0byBydW4g aW4gbWFueSBjb21wdXRlcnMsIG1pbmUgaW5jbHVkZWQhDQo+IE9mIGNvdXJzZSwgaWYgeW91 IG9yIGFueW9uZSBpcyB3b3JyaWVkIGFib3V0IHNvbWV0aGluZyBzcGVjaWZpYywgcGxlYXNl LA0KPiB0ZWxsIG1lIGFuZCBJIGNhbiBjaGVjayBhbmQgcmUtY2hlY2sgaXQuIEkgZG9uJ3Qg d2FudCB0byBtaXNzIHNvbWV0aGluZw0KPiBpbXBvcnRhbnQuDQo+IA0KPiBUaGFuayB5b3Uh DQoNCkkgYWRkZWQgdGhlIHBhdGNoIHRvIGRybS1taXNjLW5leHQuDQoNCkJlc3QgcmVnYXJk cw0KVGhvbWFzDQoNCj4gDQo+IEJlc3QgcmVnYXJkcw0KPiBDbGF1ZGlvIFN1YXJleg0KPiAN Cj4+IEJlc3QgcmVnYXJkcw0KPj4gVGhvbWFzDQo+Pg0KPj4+DQo+Pj4gZGlmZiAtLWdpdCBh L0RvY3VtZW50YXRpb24vZ3B1L3RvZG8ucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvdG9kby5y c3QNCj4+PiBpbmRleCAxMmU2MTg2OTkzOWUuLmJiMWUwNGJiZjRmYiAxMDA2NDQNCj4+PiAt LS0gYS9Eb2N1bWVudGF0aW9uL2dwdS90b2RvLnJzdA0KPj4+ICsrKyBiL0RvY3VtZW50YXRp b24vZ3B1L3RvZG8ucnN0DQo+Pj4gQEAgLTMxNCwxNiArMzE0LDE5IEBAIExldmVsOiBBZHZh bmNlZA0KPj4+ICAgIEdhcmJhZ2UgY29sbGVjdCBmYmRldiBzY3JvbGxpbmcgYWNjZWxlcmF0 aW9uDQo+Pj4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCj4+PiAtU2Nyb2xsIGFjY2VsZXJhdGlvbiBpcyBkaXNhYmxlZCBpbiBmYmNvbiBieSBo YXJkLXdpcmluZyBwLT5zY3JvbGxtb2RlID0NCj4+PiAtU0NST0xMX1JFRFJBVy4gVGhlcmUn cyBhIHRvbiBvZiBjb2RlIHRoaXMgd2lsbCBhbGxvdyB1cyB0byByZW1vdmU6DQo+Pj4gK1Nj cm9sbCBhY2NlbGVyYXRpb24gaGFzIGJlZW4gZGlzYWJsZWQgaW4gZmJjb24uIE5vdyBpdCB3 b3JrcyBhcyB0aGUgb2xkDQo+Pj4gK1NDUk9MTF9SRURSQVcgbW9kZS4gQSB0b24gb2YgY29k ZSB3YXMgcmVtb3ZlZCBpbiBmYmNvbi5jIGFuZCB0aGUgaG9vayBibW92ZSB3YXMNCj4+PiAr cmVtb3ZlZCBmcm9tIGZiY29uX29wcy4NCj4+PiArUmVtYWluaW5nIHRhc2tzOg0KPj4+IC0t IGxvdHMgb2YgY29kZSBpbiBmYmNvbi5jDQo+Pj4gLQ0KPj4+IC0tIGEgYnVuY2ggb2YgdGhl IGhvb2tzIGluIGZiY29uX29wcywgbWF5YmUgdGhlIHJlbWFpbmluZyBob29rcyBjb3VsZCBi ZSBjYWxsZWQNCj4+PiArLSBhIGJ1bmNoIG9mIHRoZSBob29rcyBpbiBmYmNvbl9vcHMgY291 bGQgYmUgcmVtb3ZlZCBvciBzaW1wbGlmaWVkIGJ5IGNhbGxpbmcNCj4+PiAgICAgIGRpcmVj dGx5IGluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uIHRhYmxlICh3aXRoIGEgc3dpdGNoIG9uIHAt PnJvdGF0ZSkNCj4+PiAgICAtIGZiX2NvcHlhcmVhIGlzIHVudXNlZCBhZnRlciB0aGlzLCBh bmQgY2FuIGJlIGRlbGV0ZWQgZnJvbSBhbGwgZHJpdmVycw0KPj4+ICstIGFmdGVyIHRoYXQs IGZiX2NvcHlhcmVhIGNhbiBiZSBkZWxldGVkIGZyb20gZmJfb3BzIGluIGluY2x1ZGUvbGlu dXgvZmIuaCBhcw0KPj4+ICsgIHdlbGwgYXMgY2ZiX2NvcHlhcmVhDQo+Pj4gKw0KPj4+ICAg IE5vdGUgdGhhdCBub3QgYWxsIGFjY2VsZXJhdGlvbiBjb2RlIGNhbiBiZSBkZWxldGVkLCBz aW5jZSBjbGVhcmluZyBhbmQgY3Vyc29yDQo+Pj4gICAgc3VwcG9ydCBpcyBzdGlsbCBhY2Nl bGVyYXRlZCwgd2hpY2ggbWlnaHQgYmUgZ29vZCBjYW5kaWRhdGVzIGZvciBmdXJ0aGVyDQo+ Pj4gICAgZGVsZXRpb24gcHJvamVjdHMuDQo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlk ZW8vZmJkZXYvY29yZS9iaXRibGl0LmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvYml0 YmxpdC5jDQo+Pj4gaW5kZXggZjk4ZThmMjk4YmMxLi4wMWZhZTJjOTY5NjUgMTAwNjQ0DQo+ Pj4gLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2JpdGJsaXQuYw0KPj4+ICsrKyBi L2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9iaXRibGl0LmMNCj4+PiBAQCAtNDMsMjEgKzQz LDYgQEAgc3RhdGljIHZvaWQgdXBkYXRlX2F0dHIodTggKmRzdCwgdTggKnNyYywgaW50IGF0 dHJpYnV0ZSwNCj4+PiAgICAJfQ0KPj4+ICAgIH0NCj4+PiAtc3RhdGljIHZvaWQgYml0X2Jt b3ZlKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBzeSwN Cj4+PiAtCQkgICAgICBpbnQgc3gsIGludCBkeSwgaW50IGR4LCBpbnQgaGVpZ2h0LCBpbnQg d2lkdGgpDQo+Pj4gLXsNCj4+PiAtCXN0cnVjdCBmYl9jb3B5YXJlYSBhcmVhOw0KPj4+IC0N Cj4+PiAtCWFyZWEuc3ggPSBzeCAqIHZjLT52Y19mb250LndpZHRoOw0KPj4+IC0JYXJlYS5z eSA9IHN5ICogdmMtPnZjX2ZvbnQuaGVpZ2h0Ow0KPj4+IC0JYXJlYS5keCA9IGR4ICogdmMt PnZjX2ZvbnQud2lkdGg7DQo+Pj4gLQlhcmVhLmR5ID0gZHkgKiB2Yy0+dmNfZm9udC5oZWln aHQ7DQo+Pj4gLQlhcmVhLmhlaWdodCA9IGhlaWdodCAqIHZjLT52Y19mb250LmhlaWdodDsN Cj4+PiAtCWFyZWEud2lkdGggPSB3aWR0aCAqIHZjLT52Y19mb250LndpZHRoOw0KPj4+IC0N Cj4+PiAtCWluZm8tPmZib3BzLT5mYl9jb3B5YXJlYShpbmZvLCAmYXJlYSk7DQo+Pj4gLX0N Cj4+PiAtDQo+Pj4gICAgc3RhdGljIHZvaWQgYml0X2NsZWFyKHN0cnVjdCB2Y19kYXRhICp2 Yywgc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBzeSwNCj4+PiAgICAJCSAgICAgIGludCBz eCwgaW50IGhlaWdodCwgaW50IHdpZHRoKQ0KPj4+ICAgIHsNCj4+PiBAQCAtMzkzLDcgKzM3 OCw2IEBAIHN0YXRpYyBpbnQgYml0X3VwZGF0ZV9zdGFydChzdHJ1Y3QgZmJfaW5mbyAqaW5m bykNCj4+PiAgICB2b2lkIGZiY29uX3NldF9iaXRvcHMoc3RydWN0IGZiY29uX29wcyAqb3Bz KQ0KPj4+ICAgIHsNCj4+PiAtCW9wcy0+Ym1vdmUgPSBiaXRfYm1vdmU7DQo+Pj4gICAgCW9w cy0+Y2xlYXIgPSBiaXRfY2xlYXI7DQo+Pj4gICAgCW9wcy0+cHV0Y3MgPSBiaXRfcHV0Y3M7 DQo+Pj4gICAgCW9wcy0+Y2xlYXJfbWFyZ2lucyA9IGJpdF9jbGVhcl9tYXJnaW5zOw0KPj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYyBiL2RyaXZl cnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jDQo+Pj4gaW5kZXggMjJiYjM4OTJmNmJkLi45 OWVjZDlhNmQ4NDQgMTAwNjQ0DQo+Pj4gLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9jb3Jl L2ZiY29uLmMNCj4+PiArKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYw0K Pj4+IEBAIC0xNzMsOCArMTczLDYgQEAgc3RhdGljIHZvaWQgZmJjb25fcHV0Y3Moc3RydWN0 IHZjX2RhdGEgKnZjLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqcywNCj4+PiAgICAJCQlpbnQg Y291bnQsIGludCB5cG9zLCBpbnQgeHBvcyk7DQo+Pj4gICAgc3RhdGljIHZvaWQgZmJjb25f Y2xlYXJfbWFyZ2lucyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCBib3R0b21fb25seSk7DQo+ Pj4gICAgc3RhdGljIHZvaWQgZmJjb25fY3Vyc29yKHN0cnVjdCB2Y19kYXRhICp2YywgaW50 IG1vZGUpOw0KPj4+IC1zdGF0aWMgdm9pZCBmYmNvbl9ibW92ZShzdHJ1Y3QgdmNfZGF0YSAq dmMsIGludCBzeSwgaW50IHN4LCBpbnQgZHksIGludCBkeCwNCj4+PiAtCQkJaW50IGhlaWdo dCwgaW50IHdpZHRoKTsNCj4+PiAgICBzdGF0aWMgaW50IGZiY29uX3N3aXRjaChzdHJ1Y3Qg dmNfZGF0YSAqdmMpOw0KPj4+ICAgIHN0YXRpYyBpbnQgZmJjb25fYmxhbmsoc3RydWN0IHZj X2RhdGEgKnZjLCBpbnQgYmxhbmssIGludCBtb2RlX3N3aXRjaCk7DQo+Pj4gICAgc3RhdGlj IHZvaWQgZmJjb25fc2V0X3BhbGV0dGUoc3RydWN0IHZjX2RhdGEgKnZjLCBjb25zdCB1bnNp Z25lZCBjaGFyICp0YWJsZSk7DQo+Pj4gQEAgLTE4MiwxNiArMTgwLDggQEAgc3RhdGljIHZv aWQgZmJjb25fc2V0X3BhbGV0dGUoc3RydWN0IHZjX2RhdGEgKnZjLCBjb25zdCB1bnNpZ25l ZCBjaGFyICp0YWJsZSk7DQo+Pj4gICAgLyoNCj4+PiAgICAgKiAgSW50ZXJuYWwgcm91dGlu ZXMNCj4+PiAgICAgKi8NCj4+PiAtc3RhdGljIF9faW5saW5lX18gdm9pZCB5d3JhcF91cChz dHJ1Y3QgdmNfZGF0YSAqdmMsIGludCBjb3VudCk7DQo+Pj4gLXN0YXRpYyBfX2lubGluZV9f IHZvaWQgeXdyYXBfZG93bihzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCBjb3VudCk7DQo+Pj4g LXN0YXRpYyBfX2lubGluZV9fIHZvaWQgeXBhbl91cChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGlu dCBjb3VudCk7DQo+Pj4gLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgeXBhbl9kb3duKHN0cnVj dCB2Y19kYXRhICp2YywgaW50IGNvdW50KTsNCj4+PiAtc3RhdGljIHZvaWQgZmJjb25fYm1v dmVfcmVjKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiY29uX2Rpc3BsYXkgKnAsIGlu dCBzeSwgaW50IHN4LA0KPj4+IC0JCQkgICAgaW50IGR5LCBpbnQgZHgsIGludCBoZWlnaHQs IGludCB3aWR0aCwgdV9pbnQgeV9icmVhayk7DQo+Pj4gICAgc3RhdGljIHZvaWQgZmJjb25f c2V0X2Rpc3Aoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5m byAqdmFyLA0KPj4+ICAgIAkJCSAgIGludCB1bml0KTsNCj4+PiAtc3RhdGljIHZvaWQgZmJj b25fcmVkcmF3X21vdmUoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJjb25fZGlzcGxh eSAqcCwNCj4+PiAtCQkJICAgICAgaW50IGxpbmUsIGludCBjb3VudCwgaW50IGR5KTsNCj4+ PiAgICBzdGF0aWMgdm9pZCBmYmNvbl9tb2RlY2hhbmdlZChzdHJ1Y3QgZmJfaW5mbyAqaW5m byk7DQo+Pj4gICAgc3RhdGljIHZvaWQgZmJjb25fc2V0X2FsbF92Y3Moc3RydWN0IGZiX2lu Zm8gKmluZm8pOw0KPj4+ICAgIHN0YXRpYyB2b2lkIGZiY29uX3N0YXJ0KHZvaWQpOw0KPj4+ IEBAIC0xMTM1LDE0ICsxMTI1LDYgQEAgc3RhdGljIHZvaWQgZmJjb25faW5pdChzdHJ1Y3Qg dmNfZGF0YSAqdmMsIGludCBpbml0KQ0KPj4+ICAgIAlvcHMtPmdyYXBoaWNzID0gMDsNCj4+ PiAtCS8qDQo+Pj4gLQkgKiBObyBtb3JlIGh3IGFjY2VsZXJhdGlvbiBmb3IgZmJjb24uDQo+ Pj4gLQkgKg0KPj4+IC0JICogRklYTUU6IEdhcmJhZ2UgY29sbGVjdCBhbGwgdGhlIG5vdyBk ZWFkIGNvZGUgYWZ0ZXIgc3VmZmljaWVudCB0aW1lDQo+Pj4gLQkgKiBoYXMgcGFzc2VkLg0K Pj4+IC0JICovDQo+Pj4gLQlwLT5zY3JvbGxtb2RlID0gU0NST0xMX1JFRFJBVzsNCj4+PiAt DQo+Pj4gICAgCS8qDQo+Pj4gICAgCSAqICArK2d1ZW50aGVyOiBjb25zb2xlLmM6dmNfYWxs b2NhdGUoKSByZWxpZXMgb24gaW5pdGlhbGl6aW5nDQo+Pj4gICAgCSAqICB2Y197Y29scyxy b3dzfSwgYnV0IHdlIG11c3Qgbm90IHNldCB0aG9zZSBpZiB3ZSBhcmUgb25seQ0KPj4+IEBA IC0xMjI5LDE0ICsxMjExLDEzIEBAIHN0YXRpYyB2b2lkIGZiY29uX2RlaW5pdChzdHJ1Y3Qg dmNfZGF0YSAqdmMpDQo+Pj4gICAgICogIFRoaXMgc3lzdGVtIGlzIG5vdyBkaXZpZGVkIGlu dG8gdHdvIGxldmVscyBiZWNhdXNlIG9mIGNvbXBsaWNhdGlvbnMNCj4+PiAgICAgKiAgY2F1 c2VkIGJ5IGhhcmR3YXJlIHNjcm9sbGluZy4gVG9wIGxldmVsIGZ1bmN0aW9uczoNCj4+PiAg ICAgKg0KPj4+IC0gKglmYmNvbl9ibW92ZSgpLCBmYmNvbl9jbGVhcigpLCBmYmNvbl9wdXRj KCksIGZiY29uX2NsZWFyX21hcmdpbnMoKQ0KPj4+ICsgKglmYmNvbl9jbGVhcigpLCBmYmNv bl9wdXRjKCksIGZiY29uX2NsZWFyX21hcmdpbnMoKQ0KPj4+ICAgICAqDQo+Pj4gICAgICog IGhhbmRsZXMgeSB2YWx1ZXMgaW4gcmFuZ2UgWzAsIHNjcl9oZWlnaHQtMV0gdGhhdCBjb3Jy ZXNwb25kIHRvIHJlYWwNCj4+PiAgICAgKiAgc2NyZWVuIHBvc2l0aW9ucy4geV93cmFwIHNo aWZ0IG1lYW5zIHRoYXQgZmlyc3QgbGluZSBvZiBiaXRtYXAgbWF5IGJlDQo+Pj4gICAgICog IGFueXdoZXJlIG9uIHRoaXMgZGlzcGxheS4gVGhlc2UgZnVuY3Rpb25zIGNvbnZlcnQgbGlu ZW9mZnNldHMgdG8NCj4+PiAgICAgKiAgYml0bWFwIG9mZnNldHMgYW5kIGRlYWwgd2l0aCB0 aGUgd3JhcC1hcm91bmQgY2FzZSBieSBzcGxpdHRpbmcgYmxpdHMuDQo+Pj4gICAgICoNCj4+ PiAtICoJZmJjb25fYm1vdmVfcGh5c2ljYWxfOCgpICAgIC0tIFRoZXNlIGZ1bmN0aW9ucyBm YXN0IGltcGxlbWVudGF0aW9ucw0KPj4+ICAgICAqCWZiY29uX2NsZWFyX3BoeXNpY2FsXzgo KSAgICAtLSBvZiBvcmlnaW5hbCBmYmNvbl9YWFggZm5zLg0KPj4+ICAgICAqCWZiY29uX3B1 dGNfcGh5c2ljYWxfOCgpCSAgICAtLSAoZm9udCB3aWR0aCAhPSA4KSBtYXkgYmUgYWRkZWQg bGF0ZXINCj4+PiAgICAgKg0KPj4+IEBAIC0xNDA5LDIyNCArMTM5MCw2IEBAIHN0YXRpYyB2 b2lkIGZiY29uX3NldF9kaXNwKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfdmFy X3NjcmVlbmluZm8gKnZhciwNCj4+PiAgICAJfQ0KPj4+ICAgIH0NCj4+PiAtc3RhdGljIF9f aW5saW5lX18gdm9pZCB5d3JhcF91cChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCBjb3VudCkN Cj4+PiAtew0KPj4+IC0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSByZWdpc3RlcmVkX2ZiW2Nv bjJmYl9tYXBbdmMtPnZjX251bV1dOw0KPj4+IC0Jc3RydWN0IGZiY29uX29wcyAqb3BzID0g aW5mby0+ZmJjb25fcGFyOw0KPj4+IC0Jc3RydWN0IGZiY29uX2Rpc3BsYXkgKnAgPSAmZmJf ZGlzcGxheVt2Yy0+dmNfbnVtXTsNCj4+PiAtCQ0KPj4+IC0JcC0+eXNjcm9sbCArPSBjb3Vu dDsNCj4+PiAtCWlmIChwLT55c2Nyb2xsID49IHAtPnZyb3dzKQkvKiBEZWFsIHdpdGggd3Jh cCAqLw0KPj4+IC0JCXAtPnlzY3JvbGwgLT0gcC0+dnJvd3M7DQo+Pj4gLQlvcHMtPnZhci54 b2Zmc2V0ID0gMDsNCj4+PiAtCW9wcy0+dmFyLnlvZmZzZXQgPSBwLT55c2Nyb2xsICogdmMt PnZjX2ZvbnQuaGVpZ2h0Ow0KPj4+IC0Jb3BzLT52YXIudm1vZGUgfD0gRkJfVk1PREVfWVdS QVA7DQo+Pj4gLQlvcHMtPnVwZGF0ZV9zdGFydChpbmZvKTsNCj4+PiAtCXNjcm9sbGJhY2tf bWF4ICs9IGNvdW50Ow0KPj4+IC0JaWYgKHNjcm9sbGJhY2tfbWF4ID4gc2Nyb2xsYmFja19w aHlzX21heCkNCj4+PiAtCQlzY3JvbGxiYWNrX21heCA9IHNjcm9sbGJhY2tfcGh5c19tYXg7 DQo+Pj4gLQlzY3JvbGxiYWNrX2N1cnJlbnQgPSAwOw0KPj4+IC19DQo+Pj4gLQ0KPj4+IC1z dGF0aWMgX19pbmxpbmVfXyB2b2lkIHl3cmFwX2Rvd24oc3RydWN0IHZjX2RhdGEgKnZjLCBp bnQgY291bnQpDQo+Pj4gLXsNCj4+PiAtCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0 ZXJlZF9mYltjb24yZmJfbWFwW3ZjLT52Y19udW1dXTsNCj4+PiAtCXN0cnVjdCBmYmNvbl9v cHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsNCj4+PiAtCXN0cnVjdCBmYmNvbl9kaXNwbGF5 ICpwID0gJmZiX2Rpc3BsYXlbdmMtPnZjX251bV07DQo+Pj4gLQkNCj4+PiAtCXAtPnlzY3Jv bGwgLT0gY291bnQ7DQo+Pj4gLQlpZiAocC0+eXNjcm9sbCA8IDApCS8qIERlYWwgd2l0aCB3 cmFwICovDQo+Pj4gLQkJcC0+eXNjcm9sbCArPSBwLT52cm93czsNCj4+PiAtCW9wcy0+dmFy LnhvZmZzZXQgPSAwOw0KPj4+IC0Jb3BzLT52YXIueW9mZnNldCA9IHAtPnlzY3JvbGwgKiB2 Yy0+dmNfZm9udC5oZWlnaHQ7DQo+Pj4gLQlvcHMtPnZhci52bW9kZSB8PSBGQl9WTU9ERV9Z V1JBUDsNCj4+PiAtCW9wcy0+dXBkYXRlX3N0YXJ0KGluZm8pOw0KPj4+IC0Jc2Nyb2xsYmFj a19tYXggLT0gY291bnQ7DQo+Pj4gLQlpZiAoc2Nyb2xsYmFja19tYXggPCAwKQ0KPj4+IC0J CXNjcm9sbGJhY2tfbWF4ID0gMDsNCj4+PiAtCXNjcm9sbGJhY2tfY3VycmVudCA9IDA7DQo+ Pj4gLX0NCj4+PiAtDQo+Pj4gLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgeXBhbl91cChzdHJ1 Y3QgdmNfZGF0YSAqdmMsIGludCBjb3VudCkNCj4+PiAtew0KPj4+IC0Jc3RydWN0IGZiX2lu Zm8gKmluZm8gPSByZWdpc3RlcmVkX2ZiW2NvbjJmYl9tYXBbdmMtPnZjX251bV1dOw0KPj4+ IC0Jc3RydWN0IGZiY29uX2Rpc3BsYXkgKnAgPSAmZmJfZGlzcGxheVt2Yy0+dmNfbnVtXTsN Cj4+PiAtCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsNCj4+PiAt DQo+Pj4gLQlwLT55c2Nyb2xsICs9IGNvdW50Ow0KPj4+IC0JaWYgKHAtPnlzY3JvbGwgPiBw LT52cm93cyAtIHZjLT52Y19yb3dzKSB7DQo+Pj4gLQkJb3BzLT5ibW92ZSh2YywgaW5mbywg cC0+dnJvd3MgLSB2Yy0+dmNfcm93cywNCj4+PiAtCQkJICAgIDAsIDAsIDAsIHZjLT52Y19y b3dzLCB2Yy0+dmNfY29scyk7DQo+Pj4gLQkJcC0+eXNjcm9sbCAtPSBwLT52cm93cyAtIHZj LT52Y19yb3dzOw0KPj4+IC0JfQ0KPj4+IC0NCj4+PiAtCW9wcy0+dmFyLnhvZmZzZXQgPSAw Ow0KPj4+IC0Jb3BzLT52YXIueW9mZnNldCA9IHAtPnlzY3JvbGwgKiB2Yy0+dmNfZm9udC5o ZWlnaHQ7DQo+Pj4gLQlvcHMtPnZhci52bW9kZSAmPSB+RkJfVk1PREVfWVdSQVA7DQo+Pj4g LQlvcHMtPnVwZGF0ZV9zdGFydChpbmZvKTsNCj4+PiAtCWZiY29uX2NsZWFyX21hcmdpbnMo dmMsIDEpOw0KPj4+IC0Jc2Nyb2xsYmFja19tYXggKz0gY291bnQ7DQo+Pj4gLQlpZiAoc2Ny b2xsYmFja19tYXggPiBzY3JvbGxiYWNrX3BoeXNfbWF4KQ0KPj4+IC0JCXNjcm9sbGJhY2tf bWF4ID0gc2Nyb2xsYmFja19waHlzX21heDsNCj4+PiAtCXNjcm9sbGJhY2tfY3VycmVudCA9 IDA7DQo+Pj4gLX0NCj4+PiAtDQo+Pj4gLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgeXBhbl91 cF9yZWRyYXcoc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgdCwgaW50IGNvdW50KQ0KPj4+IC17 DQo+Pj4gLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbY29uMmZiX21h cFt2Yy0+dmNfbnVtXV07DQo+Pj4gLQlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSBpbmZvLT5m YmNvbl9wYXI7DQo+Pj4gLQlzdHJ1Y3QgZmJjb25fZGlzcGxheSAqcCA9ICZmYl9kaXNwbGF5 W3ZjLT52Y19udW1dOw0KPj4+IC0NCj4+PiAtCXAtPnlzY3JvbGwgKz0gY291bnQ7DQo+Pj4g LQ0KPj4+IC0JaWYgKHAtPnlzY3JvbGwgPiBwLT52cm93cyAtIHZjLT52Y19yb3dzKSB7DQo+ Pj4gLQkJcC0+eXNjcm9sbCAtPSBwLT52cm93cyAtIHZjLT52Y19yb3dzOw0KPj4+IC0JCWZi Y29uX3JlZHJhd19tb3ZlKHZjLCBwLCB0ICsgY291bnQsIHZjLT52Y19yb3dzIC0gY291bnQs IHQpOw0KPj4+IC0JfQ0KPj4+IC0NCj4+PiAtCW9wcy0+dmFyLnhvZmZzZXQgPSAwOw0KPj4+ IC0Jb3BzLT52YXIueW9mZnNldCA9IHAtPnlzY3JvbGwgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7 DQo+Pj4gLQlvcHMtPnZhci52bW9kZSAmPSB+RkJfVk1PREVfWVdSQVA7DQo+Pj4gLQlvcHMt PnVwZGF0ZV9zdGFydChpbmZvKTsNCj4+PiAtCWZiY29uX2NsZWFyX21hcmdpbnModmMsIDEp Ow0KPj4+IC0Jc2Nyb2xsYmFja19tYXggKz0gY291bnQ7DQo+Pj4gLQlpZiAoc2Nyb2xsYmFj a19tYXggPiBzY3JvbGxiYWNrX3BoeXNfbWF4KQ0KPj4+IC0JCXNjcm9sbGJhY2tfbWF4ID0g c2Nyb2xsYmFja19waHlzX21heDsNCj4+PiAtCXNjcm9sbGJhY2tfY3VycmVudCA9IDA7DQo+ Pj4gLX0NCj4+PiAtDQo+Pj4gLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgeXBhbl9kb3duKHN0 cnVjdCB2Y19kYXRhICp2YywgaW50IGNvdW50KQ0KPj4+IC17DQo+Pj4gLQlzdHJ1Y3QgZmJf aW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbY29uMmZiX21hcFt2Yy0+dmNfbnVtXV07DQo+ Pj4gLQlzdHJ1Y3QgZmJjb25fZGlzcGxheSAqcCA9ICZmYl9kaXNwbGF5W3ZjLT52Y19udW1d Ow0KPj4+IC0Jc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOw0KPj4+ IC0JDQo+Pj4gLQlwLT55c2Nyb2xsIC09IGNvdW50Ow0KPj4+IC0JaWYgKHAtPnlzY3JvbGwg PCAwKSB7DQo+Pj4gLQkJb3BzLT5ibW92ZSh2YywgaW5mbywgMCwgMCwgcC0+dnJvd3MgLSB2 Yy0+dmNfcm93cywNCj4+PiAtCQkJICAgIDAsIHZjLT52Y19yb3dzLCB2Yy0+dmNfY29scyk7 DQo+Pj4gLQkJcC0+eXNjcm9sbCArPSBwLT52cm93cyAtIHZjLT52Y19yb3dzOw0KPj4+IC0J fQ0KPj4+IC0NCj4+PiAtCW9wcy0+dmFyLnhvZmZzZXQgPSAwOw0KPj4+IC0Jb3BzLT52YXIu eW9mZnNldCA9IHAtPnlzY3JvbGwgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7DQo+Pj4gLQlvcHMt PnZhci52bW9kZSAmPSB+RkJfVk1PREVfWVdSQVA7DQo+Pj4gLQlvcHMtPnVwZGF0ZV9zdGFy dChpbmZvKTsNCj4+PiAtCWZiY29uX2NsZWFyX21hcmdpbnModmMsIDEpOw0KPj4+IC0Jc2Ny b2xsYmFja19tYXggLT0gY291bnQ7DQo+Pj4gLQlpZiAoc2Nyb2xsYmFja19tYXggPCAwKQ0K Pj4+IC0JCXNjcm9sbGJhY2tfbWF4ID0gMDsNCj4+PiAtCXNjcm9sbGJhY2tfY3VycmVudCA9 IDA7DQo+Pj4gLX0NCj4+PiAtDQo+Pj4gLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgeXBhbl9k b3duX3JlZHJhdyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB0LCBpbnQgY291bnQpDQo+Pj4g LXsNCj4+PiAtCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltjb24yZmJf bWFwW3ZjLT52Y19udW1dXTsNCj4+PiAtCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8t PmZiY29uX3BhcjsNCj4+PiAtCXN0cnVjdCBmYmNvbl9kaXNwbGF5ICpwID0gJmZiX2Rpc3Bs YXlbdmMtPnZjX251bV07DQo+Pj4gLQ0KPj4+IC0JcC0+eXNjcm9sbCAtPSBjb3VudDsNCj4+ PiAtDQo+Pj4gLQlpZiAocC0+eXNjcm9sbCA8IDApIHsNCj4+PiAtCQlwLT55c2Nyb2xsICs9 IHAtPnZyb3dzIC0gdmMtPnZjX3Jvd3M7DQo+Pj4gLQkJZmJjb25fcmVkcmF3X21vdmUodmMs IHAsIHQsIHZjLT52Y19yb3dzIC0gY291bnQsIHQgKyBjb3VudCk7DQo+Pj4gLQl9DQo+Pj4g LQ0KPj4+IC0Jb3BzLT52YXIueG9mZnNldCA9IDA7DQo+Pj4gLQlvcHMtPnZhci55b2Zmc2V0 ID0gcC0+eXNjcm9sbCAqIHZjLT52Y19mb250LmhlaWdodDsNCj4+PiAtCW9wcy0+dmFyLnZt b2RlICY9IH5GQl9WTU9ERV9ZV1JBUDsNCj4+PiAtCW9wcy0+dXBkYXRlX3N0YXJ0KGluZm8p Ow0KPj4+IC0JZmJjb25fY2xlYXJfbWFyZ2lucyh2YywgMSk7DQo+Pj4gLQlzY3JvbGxiYWNr X21heCAtPSBjb3VudDsNCj4+PiAtCWlmIChzY3JvbGxiYWNrX21heCA8IDApDQo+Pj4gLQkJ c2Nyb2xsYmFja19tYXggPSAwOw0KPj4+IC0Jc2Nyb2xsYmFja19jdXJyZW50ID0gMDsNCj4+ PiAtfQ0KPj4+IC0NCj4+PiAtc3RhdGljIHZvaWQgZmJjb25fcmVkcmF3X21vdmUoc3RydWN0 IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJjb25fZGlzcGxheSAqcCwNCj4+PiAtCQkJICAgICAg aW50IGxpbmUsIGludCBjb3VudCwgaW50IGR5KQ0KPj4+IC17DQo+Pj4gLQl1bnNpZ25lZCBz aG9ydCAqcyA9ICh1bnNpZ25lZCBzaG9ydCAqKQ0KPj4+IC0JCSh2Yy0+dmNfb3JpZ2luICsg dmMtPnZjX3NpemVfcm93ICogbGluZSk7DQo+Pj4gLQ0KPj4+IC0Jd2hpbGUgKGNvdW50LS0p IHsNCj4+PiAtCQl1bnNpZ25lZCBzaG9ydCAqc3RhcnQgPSBzOw0KPj4+IC0JCXVuc2lnbmVk IHNob3J0ICpsZSA9IGFkdmFuY2Vfcm93KHMsIDEpOw0KPj4+IC0JCXVuc2lnbmVkIHNob3J0 IGM7DQo+Pj4gLQkJaW50IHggPSAwOw0KPj4+IC0JCXVuc2lnbmVkIHNob3J0IGF0dHIgPSAx Ow0KPj4+IC0NCj4+PiAtCQlkbyB7DQo+Pj4gLQkJCWMgPSBzY3JfcmVhZHcocyk7DQo+Pj4g LQkJCWlmIChhdHRyICE9IChjICYgMHhmZjAwKSkgew0KPj4+IC0JCQkJYXR0ciA9IGMgJiAw eGZmMDA7DQo+Pj4gLQkJCQlpZiAocyA+IHN0YXJ0KSB7DQo+Pj4gLQkJCQkJZmJjb25fcHV0 Y3ModmMsIHN0YXJ0LCBzIC0gc3RhcnQsDQo+Pj4gLQkJCQkJCSAgICBkeSwgeCk7DQo+Pj4g LQkJCQkJeCArPSBzIC0gc3RhcnQ7DQo+Pj4gLQkJCQkJc3RhcnQgPSBzOw0KPj4+IC0JCQkJ fQ0KPj4+IC0JCQl9DQo+Pj4gLQkJCWNvbnNvbGVfY29uZGl0aW9uYWxfc2NoZWR1bGUoKTsN Cj4+PiAtCQkJcysrOw0KPj4+IC0JCX0gd2hpbGUgKHMgPCBsZSk7DQo+Pj4gLQkJaWYgKHMg PiBzdGFydCkNCj4+PiAtCQkJZmJjb25fcHV0Y3ModmMsIHN0YXJ0LCBzIC0gc3RhcnQsIGR5 LCB4KTsNCj4+PiAtCQljb25zb2xlX2NvbmRpdGlvbmFsX3NjaGVkdWxlKCk7DQo+Pj4gLQkJ ZHkrKzsNCj4+PiAtCX0NCj4+PiAtfQ0KPj4+IC0NCj4+PiAtc3RhdGljIHZvaWQgZmJjb25f cmVkcmF3X2JsaXQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywN Cj4+PiAtCQkJc3RydWN0IGZiY29uX2Rpc3BsYXkgKnAsIGludCBsaW5lLCBpbnQgY291bnQs IGludCB5Y291bnQpDQo+Pj4gLXsNCj4+PiAtCWludCBvZmZzZXQgPSB5Y291bnQgKiB2Yy0+ dmNfY29sczsNCj4+PiAtCXVuc2lnbmVkIHNob3J0ICpkID0gKHVuc2lnbmVkIHNob3J0ICop DQo+Pj4gLQkgICAgKHZjLT52Y19vcmlnaW4gKyB2Yy0+dmNfc2l6ZV9yb3cgKiBsaW5lKTsN Cj4+PiAtCXVuc2lnbmVkIHNob3J0ICpzID0gZCArIG9mZnNldDsNCj4+PiAtCXN0cnVjdCBm YmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsNCj4+PiAtDQo+Pj4gLQl3aGlsZSAo Y291bnQtLSkgew0KPj4+IC0JCXVuc2lnbmVkIHNob3J0ICpzdGFydCA9IHM7DQo+Pj4gLQkJ dW5zaWduZWQgc2hvcnQgKmxlID0gYWR2YW5jZV9yb3cocywgMSk7DQo+Pj4gLQkJdW5zaWdu ZWQgc2hvcnQgYzsNCj4+PiAtCQlpbnQgeCA9IDA7DQo+Pj4gLQ0KPj4+IC0JCWRvIHsNCj4+ PiAtCQkJYyA9IHNjcl9yZWFkdyhzKTsNCj4+PiAtDQo+Pj4gLQkJCWlmIChjID09IHNjcl9y ZWFkdyhkKSkgew0KPj4+IC0JCQkJaWYgKHMgPiBzdGFydCkgew0KPj4+IC0JCQkJCW9wcy0+ Ym1vdmUodmMsIGluZm8sIGxpbmUgKyB5Y291bnQsIHgsDQo+Pj4gLQkJCQkJCSAgIGxpbmUs IHgsIDEsIHMtc3RhcnQpOw0KPj4+IC0JCQkJCXggKz0gcyAtIHN0YXJ0ICsgMTsNCj4+PiAt CQkJCQlzdGFydCA9IHMgKyAxOw0KPj4+IC0JCQkJfSBlbHNlIHsNCj4+PiAtCQkJCQl4Kys7 DQo+Pj4gLQkJCQkJc3RhcnQrKzsNCj4+PiAtCQkJCX0NCj4+PiAtCQkJfQ0KPj4+IC0NCj4+ PiAtCQkJc2NyX3dyaXRldyhjLCBkKTsNCj4+PiAtCQkJY29uc29sZV9jb25kaXRpb25hbF9z Y2hlZHVsZSgpOw0KPj4+IC0JCQlzKys7DQo+Pj4gLQkJCWQrKzsNCj4+PiAtCQl9IHdoaWxl IChzIDwgbGUpOw0KPj4+IC0JCWlmIChzID4gc3RhcnQpDQo+Pj4gLQkJCW9wcy0+Ym1vdmUo dmMsIGluZm8sIGxpbmUgKyB5Y291bnQsIHgsIGxpbmUsIHgsIDEsDQo+Pj4gLQkJCQkgICBz LXN0YXJ0KTsNCj4+PiAtCQljb25zb2xlX2NvbmRpdGlvbmFsX3NjaGVkdWxlKCk7DQo+Pj4g LQkJaWYgKHljb3VudCA+IDApDQo+Pj4gLQkJCWxpbmUrKzsNCj4+PiAtCQllbHNlIHsNCj4+ PiAtCQkJbGluZS0tOw0KPj4+IC0JCQkvKiBOT1RFOiBXZSBzdWJ0cmFjdCB0d28gbGluZXMg ZnJvbSB0aGVzZSBwb2ludGVycyAqLw0KPj4+IC0JCQlzIC09IHZjLT52Y19zaXplX3JvdzsN Cj4+PiAtCQkJZCAtPSB2Yy0+dmNfc2l6ZV9yb3c7DQo+Pj4gLQkJfQ0KPj4+IC0JfQ0KPj4+ IC19DQo+Pj4gLQ0KPj4+ICAgIHN0YXRpYyB2b2lkIGZiY29uX3JlZHJhdyhzdHJ1Y3QgdmNf ZGF0YSAqdmMsIHN0cnVjdCBmYmNvbl9kaXNwbGF5ICpwLA0KPj4+ICAgIAkJCSBpbnQgbGlu ZSwgaW50IGNvdW50LCBpbnQgb2Zmc2V0KQ0KPj4+ICAgIHsNCj4+PiBAQCAtMTY4Nyw3ICsx NDUwLDYgQEAgc3RhdGljIGJvb2wgZmJjb25fc2Nyb2xsKHN0cnVjdCB2Y19kYXRhICp2Yywg dW5zaWduZWQgaW50IHQsIHVuc2lnbmVkIGludCBiLA0KPj4+ICAgIHsNCj4+PiAgICAJc3Ry dWN0IGZiX2luZm8gKmluZm8gPSByZWdpc3RlcmVkX2ZiW2NvbjJmYl9tYXBbdmMtPnZjX251 bV1dOw0KPj4+ICAgIAlzdHJ1Y3QgZmJjb25fZGlzcGxheSAqcCA9ICZmYl9kaXNwbGF5W3Zj LT52Y19udW1dOw0KPj4+IC0JaW50IHNjcm9sbF9wYXJ0aWFsID0gaW5mby0+ZmxhZ3MgJiBG QklORk9fUEFSVElBTF9QQU5fT0s7DQo+Pj4gICAgCWlmIChmYmNvbl9pc19pbmFjdGl2ZSh2 YywgaW5mbykpDQo+Pj4gICAgCQlyZXR1cm4gdHJ1ZTsNCj4+PiBAQCAtMTcwNCwyNDkgKzE0 NjYsMzIgQEAgc3RhdGljIGJvb2wgZmJjb25fc2Nyb2xsKHN0cnVjdCB2Y19kYXRhICp2Yywg dW5zaWduZWQgaW50IHQsIHVuc2lnbmVkIGludCBiLA0KPj4+ICAgIAljYXNlIFNNX1VQOg0K Pj4+ICAgIAkJaWYgKGNvdW50ID4gdmMtPnZjX3Jvd3MpCS8qIE1heGltdW0gcmVhbGlzdGlj IHNpemUgKi8NCj4+PiAgICAJCQljb3VudCA9IHZjLT52Y19yb3dzOw0KPj4+IC0JCWlmIChs b2dvX3Nob3duID49IDApDQo+Pj4gLQkJCWdvdG8gcmVkcmF3X3VwOw0KPj4+IC0JCXN3aXRj aCAocC0+c2Nyb2xsbW9kZSkgew0KPj4+IC0JCWNhc2UgU0NST0xMX01PVkU6DQo+Pj4gLQkJ CWZiY29uX3JlZHJhd19ibGl0KHZjLCBpbmZvLCBwLCB0LCBiIC0gdCAtIGNvdW50LA0KPj4+ IC0JCQkJICAgICBjb3VudCk7DQo+Pj4gLQkJCWZiY29uX2NsZWFyKHZjLCBiIC0gY291bnQs IDAsIGNvdW50LCB2Yy0+dmNfY29scyk7DQo+Pj4gLQkJCXNjcl9tZW1zZXR3KCh1bnNpZ25l ZCBzaG9ydCAqKSAodmMtPnZjX29yaWdpbiArDQo+Pj4gLQkJCQkJCQl2Yy0+dmNfc2l6ZV9y b3cgKg0KPj4+IC0JCQkJCQkJKGIgLSBjb3VudCkpLA0KPj4+IC0JCQkJICAgIHZjLT52Y192 aWRlb19lcmFzZV9jaGFyLA0KPj4+IC0JCQkJICAgIHZjLT52Y19zaXplX3JvdyAqIGNvdW50 KTsNCj4+PiAtCQkJcmV0dXJuIHRydWU7DQo+Pj4gLQ0KPj4+IC0JCWNhc2UgU0NST0xMX1dS QVBfTU9WRToNCj4+PiAtCQkJaWYgKGIgLSB0IC0gY291bnQgPiAzICogdmMtPnZjX3Jvd3Mg Pj4gMikgew0KPj4+IC0JCQkJaWYgKHQgPiAwKQ0KPj4+IC0JCQkJCWZiY29uX2Jtb3ZlKHZj LCAwLCAwLCBjb3VudCwgMCwgdCwNCj4+PiAtCQkJCQkJICAgIHZjLT52Y19jb2xzKTsNCj4+ PiAtCQkJCXl3cmFwX3VwKHZjLCBjb3VudCk7DQo+Pj4gLQkJCQlpZiAodmMtPnZjX3Jvd3Mg LSBiID4gMCkNCj4+PiAtCQkJCQlmYmNvbl9ibW92ZSh2YywgYiAtIGNvdW50LCAwLCBiLCAw LA0KPj4+IC0JCQkJCQkgICAgdmMtPnZjX3Jvd3MgLSBiLA0KPj4+IC0JCQkJCQkgICAgdmMt PnZjX2NvbHMpOw0KPj4+IC0JCQl9IGVsc2UgaWYgKGluZm8tPmZsYWdzICYgRkJJTkZPX1JF QURTX0ZBU1QpDQo+Pj4gLQkJCQlmYmNvbl9ibW92ZSh2YywgdCArIGNvdW50LCAwLCB0LCAw LA0KPj4+IC0JCQkJCSAgICBiIC0gdCAtIGNvdW50LCB2Yy0+dmNfY29scyk7DQo+Pj4gLQkJ CWVsc2UNCj4+PiAtCQkJCWdvdG8gcmVkcmF3X3VwOw0KPj4+IC0JCQlmYmNvbl9jbGVhcih2 YywgYiAtIGNvdW50LCAwLCBjb3VudCwgdmMtPnZjX2NvbHMpOw0KPj4+IC0JCQlicmVhazsN Cj4+PiAtDQo+Pj4gLQkJY2FzZSBTQ1JPTExfUEFOX1JFRFJBVzoNCj4+PiAtCQkJaWYgKChw LT55c2Nyb2xsICsgY291bnQgPD0NCj4+PiAtCQkJICAgICAyICogKHAtPnZyb3dzIC0gdmMt PnZjX3Jvd3MpKQ0KPj4+IC0JCQkgICAgJiYgKCghc2Nyb2xsX3BhcnRpYWwgJiYgKGIgLSB0 ID09IHZjLT52Y19yb3dzKSkNCj4+PiAtCQkJCXx8IChzY3JvbGxfcGFydGlhbA0KPj4+IC0J CQkJICAgICYmIChiIC0gdCAtIGNvdW50ID4NCj4+PiAtCQkJCQkzICogdmMtPnZjX3Jvd3Mg Pj4gMikpKSkgew0KPj4+IC0JCQkJaWYgKHQgPiAwKQ0KPj4+IC0JCQkJCWZiY29uX3JlZHJh d19tb3ZlKHZjLCBwLCAwLCB0LCBjb3VudCk7DQo+Pj4gLQkJCQl5cGFuX3VwX3JlZHJhdyh2 YywgdCwgY291bnQpOw0KPj4+IC0JCQkJaWYgKHZjLT52Y19yb3dzIC0gYiA+IDApDQo+Pj4g LQkJCQkJZmJjb25fcmVkcmF3X21vdmUodmMsIHAsIGIsDQo+Pj4gLQkJCQkJCQkgIHZjLT52 Y19yb3dzIC0gYiwgYik7DQo+Pj4gLQkJCX0gZWxzZQ0KPj4+IC0JCQkJZmJjb25fcmVkcmF3 X21vdmUodmMsIHAsIHQgKyBjb3VudCwgYiAtIHQgLSBjb3VudCwgdCk7DQo+Pj4gLQkJCWZi Y29uX2NsZWFyKHZjLCBiIC0gY291bnQsIDAsIGNvdW50LCB2Yy0+dmNfY29scyk7DQo+Pj4g LQkJCWJyZWFrOw0KPj4+IC0NCj4+PiAtCQljYXNlIFNDUk9MTF9QQU5fTU9WRToNCj4+PiAt CQkJaWYgKChwLT55c2Nyb2xsICsgY291bnQgPD0NCj4+PiAtCQkJICAgICAyICogKHAtPnZy b3dzIC0gdmMtPnZjX3Jvd3MpKQ0KPj4+IC0JCQkgICAgJiYgKCghc2Nyb2xsX3BhcnRpYWwg JiYgKGIgLSB0ID09IHZjLT52Y19yb3dzKSkNCj4+PiAtCQkJCXx8IChzY3JvbGxfcGFydGlh bA0KPj4+IC0JCQkJICAgICYmIChiIC0gdCAtIGNvdW50ID4NCj4+PiAtCQkJCQkzICogdmMt PnZjX3Jvd3MgPj4gMikpKSkgew0KPj4+IC0JCQkJaWYgKHQgPiAwKQ0KPj4+IC0JCQkJCWZi Y29uX2Jtb3ZlKHZjLCAwLCAwLCBjb3VudCwgMCwgdCwNCj4+PiAtCQkJCQkJICAgIHZjLT52 Y19jb2xzKTsNCj4+PiAtCQkJCXlwYW5fdXAodmMsIGNvdW50KTsNCj4+PiAtCQkJCWlmICh2 Yy0+dmNfcm93cyAtIGIgPiAwKQ0KPj4+IC0JCQkJCWZiY29uX2Jtb3ZlKHZjLCBiIC0gY291 bnQsIDAsIGIsIDAsDQo+Pj4gLQkJCQkJCSAgICB2Yy0+dmNfcm93cyAtIGIsDQo+Pj4gLQkJ CQkJCSAgICB2Yy0+dmNfY29scyk7DQo+Pj4gLQkJCX0gZWxzZSBpZiAoaW5mby0+ZmxhZ3Mg JiBGQklORk9fUkVBRFNfRkFTVCkNCj4+PiAtCQkJCWZiY29uX2Jtb3ZlKHZjLCB0ICsgY291 bnQsIDAsIHQsIDAsDQo+Pj4gLQkJCQkJICAgIGIgLSB0IC0gY291bnQsIHZjLT52Y19jb2xz KTsNCj4+PiAtCQkJZWxzZQ0KPj4+IC0JCQkJZ290byByZWRyYXdfdXA7DQo+Pj4gLQkJCWZi Y29uX2NsZWFyKHZjLCBiIC0gY291bnQsIDAsIGNvdW50LCB2Yy0+dmNfY29scyk7DQo+Pj4g LQkJCWJyZWFrOw0KPj4+IC0NCj4+PiAtCQljYXNlIFNDUk9MTF9SRURSQVc6DQo+Pj4gLQkJ ICAgICAgcmVkcmF3X3VwOg0KPj4+IC0JCQlmYmNvbl9yZWRyYXcodmMsIHAsIHQsIGIgLSB0 IC0gY291bnQsDQo+Pj4gLQkJCQkgICAgIGNvdW50ICogdmMtPnZjX2NvbHMpOw0KPj4+IC0J CQlmYmNvbl9jbGVhcih2YywgYiAtIGNvdW50LCAwLCBjb3VudCwgdmMtPnZjX2NvbHMpOw0K Pj4+IC0JCQlzY3JfbWVtc2V0dygodW5zaWduZWQgc2hvcnQgKikgKHZjLT52Y19vcmlnaW4g Kw0KPj4+IC0JCQkJCQkJdmMtPnZjX3NpemVfcm93ICoNCj4+PiAtCQkJCQkJCShiIC0gY291 bnQpKSwNCj4+PiAtCQkJCSAgICB2Yy0+dmNfdmlkZW9fZXJhc2VfY2hhciwNCj4+PiAtCQkJ CSAgICB2Yy0+dmNfc2l6ZV9yb3cgKiBjb3VudCk7DQo+Pj4gLQkJCXJldHVybiB0cnVlOw0K Pj4+IC0JCX0NCj4+PiAtCQlicmVhazsNCj4+PiArCQlmYmNvbl9yZWRyYXcodmMsIHAsIHQs IGIgLSB0IC0gY291bnQsDQo+Pj4gKwkJCSAgICAgY291bnQgKiB2Yy0+dmNfY29scyk7DQo+ Pj4gKwkJZmJjb25fY2xlYXIodmMsIGIgLSBjb3VudCwgMCwgY291bnQsIHZjLT52Y19jb2xz KTsNCj4+PiArCQlzY3JfbWVtc2V0dygodW5zaWduZWQgc2hvcnQgKikgKHZjLT52Y19vcmln aW4gKw0KPj4+ICsJCQkJCQl2Yy0+dmNfc2l6ZV9yb3cgKg0KPj4+ICsJCQkJCQkoYiAtIGNv dW50KSksDQo+Pj4gKwkJCSAgICB2Yy0+dmNfdmlkZW9fZXJhc2VfY2hhciwNCj4+PiArCQkJ ICAgIHZjLT52Y19zaXplX3JvdyAqIGNvdW50KTsNCj4+PiArCQlyZXR1cm4gdHJ1ZTsNCj4+ PiAgICAJY2FzZSBTTV9ET1dOOg0KPj4+ICAgIAkJaWYgKGNvdW50ID4gdmMtPnZjX3Jvd3Mp CS8qIE1heGltdW0gcmVhbGlzdGljIHNpemUgKi8NCj4+PiAgICAJCQljb3VudCA9IHZjLT52 Y19yb3dzOw0KPj4+IC0JCWlmIChsb2dvX3Nob3duID49IDApDQo+Pj4gLQkJCWdvdG8gcmVk cmF3X2Rvd247DQo+Pj4gLQkJc3dpdGNoIChwLT5zY3JvbGxtb2RlKSB7DQo+Pj4gLQkJY2Fz ZSBTQ1JPTExfTU9WRToNCj4+PiAtCQkJZmJjb25fcmVkcmF3X2JsaXQodmMsIGluZm8sIHAs IGIgLSAxLCBiIC0gdCAtIGNvdW50LA0KPj4+IC0JCQkJICAgICAtY291bnQpOw0KPj4+IC0J CQlmYmNvbl9jbGVhcih2YywgdCwgMCwgY291bnQsIHZjLT52Y19jb2xzKTsNCj4+PiAtCQkJ c2NyX21lbXNldHcoKHVuc2lnbmVkIHNob3J0ICopICh2Yy0+dmNfb3JpZ2luICsNCj4+PiAt CQkJCQkJCXZjLT52Y19zaXplX3JvdyAqDQo+Pj4gLQkJCQkJCQl0KSwNCj4+PiAtCQkJCSAg ICB2Yy0+dmNfdmlkZW9fZXJhc2VfY2hhciwNCj4+PiAtCQkJCSAgICB2Yy0+dmNfc2l6ZV9y b3cgKiBjb3VudCk7DQo+Pj4gLQkJCXJldHVybiB0cnVlOw0KPj4+IC0NCj4+PiAtCQljYXNl IFNDUk9MTF9XUkFQX01PVkU6DQo+Pj4gLQkJCWlmIChiIC0gdCAtIGNvdW50ID4gMyAqIHZj LT52Y19yb3dzID4+IDIpIHsNCj4+PiAtCQkJCWlmICh2Yy0+dmNfcm93cyAtIGIgPiAwKQ0K Pj4+IC0JCQkJCWZiY29uX2Jtb3ZlKHZjLCBiLCAwLCBiIC0gY291bnQsIDAsDQo+Pj4gLQkJ CQkJCSAgICB2Yy0+dmNfcm93cyAtIGIsDQo+Pj4gLQkJCQkJCSAgICB2Yy0+dmNfY29scyk7 DQo+Pj4gLQkJCQl5d3JhcF9kb3duKHZjLCBjb3VudCk7DQo+Pj4gLQkJCQlpZiAodCA+IDAp DQo+Pj4gLQkJCQkJZmJjb25fYm1vdmUodmMsIGNvdW50LCAwLCAwLCAwLCB0LA0KPj4+IC0J CQkJCQkgICAgdmMtPnZjX2NvbHMpOw0KPj4+IC0JCQl9IGVsc2UgaWYgKGluZm8tPmZsYWdz ICYgRkJJTkZPX1JFQURTX0ZBU1QpDQo+Pj4gLQkJCQlmYmNvbl9ibW92ZSh2YywgdCwgMCwg dCArIGNvdW50LCAwLA0KPj4+IC0JCQkJCSAgICBiIC0gdCAtIGNvdW50LCB2Yy0+dmNfY29s cyk7DQo+Pj4gLQkJCWVsc2UNCj4+PiAtCQkJCWdvdG8gcmVkcmF3X2Rvd247DQo+Pj4gLQkJ CWZiY29uX2NsZWFyKHZjLCB0LCAwLCBjb3VudCwgdmMtPnZjX2NvbHMpOw0KPj4+IC0JCQli cmVhazsNCj4+PiAtDQo+Pj4gLQkJY2FzZSBTQ1JPTExfUEFOX01PVkU6DQo+Pj4gLQkJCWlm ICgoY291bnQgLSBwLT55c2Nyb2xsIDw9IHAtPnZyb3dzIC0gdmMtPnZjX3Jvd3MpDQo+Pj4g LQkJCSAgICAmJiAoKCFzY3JvbGxfcGFydGlhbCAmJiAoYiAtIHQgPT0gdmMtPnZjX3Jvd3Mp KQ0KPj4+IC0JCQkJfHwgKHNjcm9sbF9wYXJ0aWFsDQo+Pj4gLQkJCQkgICAgJiYgKGIgLSB0 IC0gY291bnQgPg0KPj4+IC0JCQkJCTMgKiB2Yy0+dmNfcm93cyA+PiAyKSkpKSB7DQo+Pj4g LQkJCQlpZiAodmMtPnZjX3Jvd3MgLSBiID4gMCkNCj4+PiAtCQkJCQlmYmNvbl9ibW92ZSh2 YywgYiwgMCwgYiAtIGNvdW50LCAwLA0KPj4+IC0JCQkJCQkgICAgdmMtPnZjX3Jvd3MgLSBi LA0KPj4+IC0JCQkJCQkgICAgdmMtPnZjX2NvbHMpOw0KPj4+IC0JCQkJeXBhbl9kb3duKHZj LCBjb3VudCk7DQo+Pj4gLQkJCQlpZiAodCA+IDApDQo+Pj4gLQkJCQkJZmJjb25fYm1vdmUo dmMsIGNvdW50LCAwLCAwLCAwLCB0LA0KPj4+IC0JCQkJCQkgICAgdmMtPnZjX2NvbHMpOw0K Pj4+IC0JCQl9IGVsc2UgaWYgKGluZm8tPmZsYWdzICYgRkJJTkZPX1JFQURTX0ZBU1QpDQo+ Pj4gLQkJCQlmYmNvbl9ibW92ZSh2YywgdCwgMCwgdCArIGNvdW50LCAwLA0KPj4+IC0JCQkJ CSAgICBiIC0gdCAtIGNvdW50LCB2Yy0+dmNfY29scyk7DQo+Pj4gLQkJCWVsc2UNCj4+PiAt CQkJCWdvdG8gcmVkcmF3X2Rvd247DQo+Pj4gLQkJCWZiY29uX2NsZWFyKHZjLCB0LCAwLCBj b3VudCwgdmMtPnZjX2NvbHMpOw0KPj4+IC0JCQlicmVhazsNCj4+PiAtDQo+Pj4gLQkJY2Fz ZSBTQ1JPTExfUEFOX1JFRFJBVzoNCj4+PiAtCQkJaWYgKChjb3VudCAtIHAtPnlzY3JvbGwg PD0gcC0+dnJvd3MgLSB2Yy0+dmNfcm93cykNCj4+PiAtCQkJICAgICYmICgoIXNjcm9sbF9w YXJ0aWFsICYmIChiIC0gdCA9PSB2Yy0+dmNfcm93cykpDQo+Pj4gLQkJCQl8fCAoc2Nyb2xs X3BhcnRpYWwNCj4+PiAtCQkJCSAgICAmJiAoYiAtIHQgLSBjb3VudCA+DQo+Pj4gLQkJCQkJ MyAqIHZjLT52Y19yb3dzID4+IDIpKSkpIHsNCj4+PiAtCQkJCWlmICh2Yy0+dmNfcm93cyAt IGIgPiAwKQ0KPj4+IC0JCQkJCWZiY29uX3JlZHJhd19tb3ZlKHZjLCBwLCBiLCB2Yy0+dmNf cm93cyAtIGIsDQo+Pj4gLQkJCQkJCQkgIGIgLSBjb3VudCk7DQo+Pj4gLQkJCQl5cGFuX2Rv d25fcmVkcmF3KHZjLCB0LCBjb3VudCk7DQo+Pj4gLQkJCQlpZiAodCA+IDApDQo+Pj4gLQkJ CQkJZmJjb25fcmVkcmF3X21vdmUodmMsIHAsIGNvdW50LCB0LCAwKTsNCj4+PiAtCQkJfSBl bHNlDQo+Pj4gLQkJCQlmYmNvbl9yZWRyYXdfbW92ZSh2YywgcCwgdCwgYiAtIHQgLSBjb3Vu dCwgdCArIGNvdW50KTsNCj4+PiAtCQkJZmJjb25fY2xlYXIodmMsIHQsIDAsIGNvdW50LCB2 Yy0+dmNfY29scyk7DQo+Pj4gLQkJCWJyZWFrOw0KPj4+IC0NCj4+PiAtCQljYXNlIFNDUk9M TF9SRURSQVc6DQo+Pj4gLQkJICAgICAgcmVkcmF3X2Rvd246DQo+Pj4gLQkJCWZiY29uX3Jl ZHJhdyh2YywgcCwgYiAtIDEsIGIgLSB0IC0gY291bnQsDQo+Pj4gLQkJCQkgICAgIC1jb3Vu dCAqIHZjLT52Y19jb2xzKTsNCj4+PiAtCQkJZmJjb25fY2xlYXIodmMsIHQsIDAsIGNvdW50 LCB2Yy0+dmNfY29scyk7DQo+Pj4gLQkJCXNjcl9tZW1zZXR3KCh1bnNpZ25lZCBzaG9ydCAq KSAodmMtPnZjX29yaWdpbiArDQo+Pj4gLQkJCQkJCQl2Yy0+dmNfc2l6ZV9yb3cgKg0KPj4+ IC0JCQkJCQkJdCksDQo+Pj4gLQkJCQkgICAgdmMtPnZjX3ZpZGVvX2VyYXNlX2NoYXIsDQo+ Pj4gLQkJCQkgICAgdmMtPnZjX3NpemVfcm93ICogY291bnQpOw0KPj4+IC0JCQlyZXR1cm4g dHJ1ZTsNCj4+PiAtCQl9DQo+Pj4gKwkJZmJjb25fcmVkcmF3KHZjLCBwLCBiIC0gMSwgYiAt IHQgLSBjb3VudCwNCj4+PiArCQkJICAgICAtY291bnQgKiB2Yy0+dmNfY29scyk7DQo+Pj4g KwkJZmJjb25fY2xlYXIodmMsIHQsIDAsIGNvdW50LCB2Yy0+dmNfY29scyk7DQo+Pj4gKwkJ c2NyX21lbXNldHcoKHVuc2lnbmVkIHNob3J0ICopICh2Yy0+dmNfb3JpZ2luICsNCj4+PiAr CQkJCQkJdmMtPnZjX3NpemVfcm93ICoNCj4+PiArCQkJCQkJdCksDQo+Pj4gKwkJCSAgICB2 Yy0+dmNfdmlkZW9fZXJhc2VfY2hhciwNCj4+PiArCQkJICAgIHZjLT52Y19zaXplX3JvdyAq IGNvdW50KTsNCj4+PiArCQlyZXR1cm4gdHJ1ZTsNCj4+PiAgICAJfQ0KPj4+ICAgIAlyZXR1 cm4gZmFsc2U7DQo+Pj4gICAgfQ0KPj4+IC0NCj4+PiAtc3RhdGljIHZvaWQgZmJjb25fYm1v dmUoc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgc3ksIGludCBzeCwgaW50IGR5LCBpbnQgZHgs DQo+Pj4gLQkJCWludCBoZWlnaHQsIGludCB3aWR0aCkNCj4+PiAtew0KPj4+IC0Jc3RydWN0 IGZiX2luZm8gKmluZm8gPSByZWdpc3RlcmVkX2ZiW2NvbjJmYl9tYXBbdmMtPnZjX251bV1d Ow0KPj4+IC0Jc3RydWN0IGZiY29uX2Rpc3BsYXkgKnAgPSAmZmJfZGlzcGxheVt2Yy0+dmNf bnVtXTsNCj4+PiAtCQ0KPj4+IC0JaWYgKGZiY29uX2lzX2luYWN0aXZlKHZjLCBpbmZvKSkN Cj4+PiAtCQlyZXR1cm47DQo+Pj4gLQ0KPj4+IC0JaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KQ0K Pj4+IC0JCXJldHVybjsNCj4+PiAtDQo+Pj4gLQkvKiAgU3BsaXQgYmxpdHMgdGhhdCBjcm9z cyBwaHlzaWNhbCB5X3dyYXAgY2FzZS4NCj4+PiAtCSAqICBQYXRob2xvZ2ljYWwgY2FzZSBp bnZvbHZlcyA0IGJsaXRzLCBiZXR0ZXIgdG8gdXNlIHJlY3Vyc2l2ZQ0KPj4+IC0JICogIGNv ZGUgcmF0aGVyIHRoYW4gdW5yb2xsZWQgY2FzZQ0KPj4+IC0JICoNCj4+PiAtCSAqICBSZWN1 cnNpdmUgaW52b2NhdGlvbnMgZG9uJ3QgbmVlZCB0byBlcmFzZSB0aGUgY3Vyc29yIG92ZXIg YW5kDQo+Pj4gLQkgKiAgb3ZlciBhZ2Fpbiwgc28gd2UgdXNlIGZiY29uX2Jtb3ZlX3JlYygp DQo+Pj4gLQkgKi8NCj4+PiAtCWZiY29uX2Jtb3ZlX3JlYyh2YywgcCwgc3ksIHN4LCBkeSwg ZHgsIGhlaWdodCwgd2lkdGgsDQo+Pj4gLQkJCXAtPnZyb3dzIC0gcC0+eXNjcm9sbCk7DQo+ Pj4gLX0NCj4+PiAtDQo+Pj4gLXN0YXRpYyB2b2lkIGZiY29uX2Jtb3ZlX3JlYyhzdHJ1Y3Qg dmNfZGF0YSAqdmMsIHN0cnVjdCBmYmNvbl9kaXNwbGF5ICpwLCBpbnQgc3ksIGludCBzeCwN Cj4+PiAtCQkJICAgIGludCBkeSwgaW50IGR4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIHVf aW50IHlfYnJlYWspDQo+Pj4gLXsNCj4+PiAtCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVn aXN0ZXJlZF9mYltjb24yZmJfbWFwW3ZjLT52Y19udW1dXTsNCj4+PiAtCXN0cnVjdCBmYmNv bl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsNCj4+PiAtCXVfaW50IGI7DQo+Pj4gLQ0K Pj4+IC0JaWYgKHN5IDwgeV9icmVhayAmJiBzeSArIGhlaWdodCA+IHlfYnJlYWspIHsNCj4+ PiAtCQliID0geV9icmVhayAtIHN5Ow0KPj4+IC0JCWlmIChkeSA8IHN5KSB7CS8qIEF2b2lk IHRyYXNoaW5nIHNlbGYgKi8NCj4+PiAtCQkJZmJjb25fYm1vdmVfcmVjKHZjLCBwLCBzeSwg c3gsIGR5LCBkeCwgYiwgd2lkdGgsDQo+Pj4gLQkJCQkJeV9icmVhayk7DQo+Pj4gLQkJCWZi Y29uX2Jtb3ZlX3JlYyh2YywgcCwgc3kgKyBiLCBzeCwgZHkgKyBiLCBkeCwNCj4+PiAtCQkJ CQloZWlnaHQgLSBiLCB3aWR0aCwgeV9icmVhayk7DQo+Pj4gLQkJfSBlbHNlIHsNCj4+PiAt CQkJZmJjb25fYm1vdmVfcmVjKHZjLCBwLCBzeSArIGIsIHN4LCBkeSArIGIsIGR4LA0KPj4+ IC0JCQkJCWhlaWdodCAtIGIsIHdpZHRoLCB5X2JyZWFrKTsNCj4+PiAtCQkJZmJjb25fYm1v dmVfcmVjKHZjLCBwLCBzeSwgc3gsIGR5LCBkeCwgYiwgd2lkdGgsDQo+Pj4gLQkJCQkJeV9i cmVhayk7DQo+Pj4gLQkJfQ0KPj4+IC0JCXJldHVybjsNCj4+PiAtCX0NCj4+PiAtDQo+Pj4g LQlpZiAoZHkgPCB5X2JyZWFrICYmIGR5ICsgaGVpZ2h0ID4geV9icmVhaykgew0KPj4+IC0J CWIgPSB5X2JyZWFrIC0gZHk7DQo+Pj4gLQkJaWYgKGR5IDwgc3kpIHsJLyogQXZvaWQgdHJh c2hpbmcgc2VsZiAqLw0KPj4+IC0JCQlmYmNvbl9ibW92ZV9yZWModmMsIHAsIHN5LCBzeCwg ZHksIGR4LCBiLCB3aWR0aCwNCj4+PiAtCQkJCQl5X2JyZWFrKTsNCj4+PiAtCQkJZmJjb25f Ym1vdmVfcmVjKHZjLCBwLCBzeSArIGIsIHN4LCBkeSArIGIsIGR4LA0KPj4+IC0JCQkJCWhl aWdodCAtIGIsIHdpZHRoLCB5X2JyZWFrKTsNCj4+PiAtCQl9IGVsc2Ugew0KPj4+IC0JCQlm YmNvbl9ibW92ZV9yZWModmMsIHAsIHN5ICsgYiwgc3gsIGR5ICsgYiwgZHgsDQo+Pj4gLQkJ CQkJaGVpZ2h0IC0gYiwgd2lkdGgsIHlfYnJlYWspOw0KPj4+IC0JCQlmYmNvbl9ibW92ZV9y ZWModmMsIHAsIHN5LCBzeCwgZHksIGR4LCBiLCB3aWR0aCwNCj4+PiAtCQkJCQl5X2JyZWFr KTsNCj4+PiAtCQl9DQo+Pj4gLQkJcmV0dXJuOw0KPj4+IC0JfQ0KPj4+IC0Jb3BzLT5ibW92 ZSh2YywgaW5mbywgcmVhbF95KHAsIHN5KSwgc3gsIHJlYWxfeShwLCBkeSksIGR4LA0KPj4+ IC0JCSAgIGhlaWdodCwgd2lkdGgpOw0KPj4+IC19DQo+Pj4gLQ0KPj4+ICAgIHN0YXRpYyB2 b2lkIHVwZGF0ZXNjcm9sbG1vZGUoc3RydWN0IGZiY29uX2Rpc3BsYXkgKnAsDQo+Pj4gICAg CQkJCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbywNCj4+PiAgICAJCQkJCXN0cnVjdCB2Y19kYXRh ICp2YykNCj4+PiBAQCAtMjExOSwyMSArMTY2NCw3IEBAIHN0YXRpYyBpbnQgZmJjb25fc3dp dGNoKHN0cnVjdCB2Y19kYXRhICp2YykNCj4+PiAgICAJdXBkYXRlc2Nyb2xsbW9kZShwLCBp bmZvLCB2Yyk7DQo+Pj4gLQlzd2l0Y2ggKHAtPnNjcm9sbG1vZGUpIHsNCj4+PiAtCWNhc2Ug U0NST0xMX1dSQVBfTU9WRToNCj4+PiAtCQlzY3JvbGxiYWNrX3BoeXNfbWF4ID0gcC0+dnJv d3MgLSB2Yy0+dmNfcm93czsNCj4+PiAtCQlicmVhazsNCj4+PiAtCWNhc2UgU0NST0xMX1BB Tl9NT1ZFOg0KPj4+IC0JY2FzZSBTQ1JPTExfUEFOX1JFRFJBVzoNCj4+PiAtCQlzY3JvbGxi YWNrX3BoeXNfbWF4ID0gcC0+dnJvd3MgLSAyICogdmMtPnZjX3Jvd3M7DQo+Pj4gLQkJaWYg KHNjcm9sbGJhY2tfcGh5c19tYXggPCAwKQ0KPj4+IC0JCQlzY3JvbGxiYWNrX3BoeXNfbWF4 ID0gMDsNCj4+PiAtCQlicmVhazsNCj4+PiAtCWRlZmF1bHQ6DQo+Pj4gLQkJc2Nyb2xsYmFj a19waHlzX21heCA9IDA7DQo+Pj4gLQkJYnJlYWs7DQo+Pj4gLQl9DQo+Pj4gLQ0KPj4+ICsJ c2Nyb2xsYmFja19waHlzX21heCA9IDA7DQo+Pj4gICAgCXNjcm9sbGJhY2tfbWF4ID0gMDsN Cj4+PiAgICAJc2Nyb2xsYmFja19jdXJyZW50ID0gMDsNCj4+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmggYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2Nv cmUvZmJjb24uaA0KPj4+IGluZGV4IDkzMTViMzYwYzg5OC4uYTAwNjAzYjQ0NTFhIDEwMDY0 NA0KPj4+IC0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5oDQo+Pj4gKysr IGIvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmgNCj4+PiBAQCAtMjksNyArMjks NiBAQCBzdHJ1Y3QgZmJjb25fZGlzcGxheSB7DQo+Pj4gICAgICAgIC8qIEZpbGxlZCBpbiBi eSB0aGUgbG93LWxldmVsIGNvbnNvbGUgZHJpdmVyICovDQo+Pj4gICAgICAgIGNvbnN0IHVf Y2hhciAqZm9udGRhdGE7DQo+Pj4gICAgICAgIGludCB1c2VyZm9udDsgICAgICAgICAgICAg ICAgICAgLyogIT0gMCBpZiBmb250ZGF0YSBrbWFsbG9jKCllZCAqLw0KPj4+IC0gICAgdV9z aG9ydCBzY3JvbGxtb2RlOyAgICAgICAgICAgICAvKiBTY3JvbGwgTWV0aG9kICovDQo+Pj4g ICAgICAgIHVfc2hvcnQgaW52ZXJzZTsgICAgICAgICAgICAgICAgLyogIT0gMCB0ZXh0IGJs YWNrIG9uIHdoaXRlIGFzIGRlZmF1bHQgKi8NCj4+PiAgICAgICAgc2hvcnQgeXNjcm9sbDsg ICAgICAgICAgICAgICAgICAvKiBIYXJkd2FyZSBzY3JvbGxpbmcgKi8NCj4+PiAgICAgICAg aW50IHZyb3dzOyAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgdmlydHVhbCBy b3dzICovDQo+Pj4gQEAgLTUyLDggKzUxLDYgQEAgc3RydWN0IGZiY29uX2Rpc3BsYXkgew0K Pj4+ICAgIH07DQo+Pj4gICAgc3RydWN0IGZiY29uX29wcyB7DQo+Pj4gLQl2b2lkICgqYm1v dmUpKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBzeSwN Cj4+PiAtCQkgICAgICBpbnQgc3gsIGludCBkeSwgaW50IGR4LCBpbnQgaGVpZ2h0LCBpbnQg d2lkdGgpOw0KPj4+ICAgIAl2b2lkICgqY2xlYXIpKHN0cnVjdCB2Y19kYXRhICp2Yywgc3Ry dWN0IGZiX2luZm8gKmluZm8sIGludCBzeSwNCj4+PiAgICAJCSAgICAgIGludCBzeCwgaW50 IGhlaWdodCwgaW50IHdpZHRoKTsNCj4+PiAgICAJdm9pZCAoKnB1dGNzKShzdHJ1Y3QgdmNf ZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLA0KPj4+IEBAIC0xNTIsNjIgKzE0OSw2 IEBAIHN0YXRpYyBpbmxpbmUgaW50IGF0dHJfY29sX2VjKGludCBzaGlmdCwgc3RydWN0IHZj X2RhdGEgKnZjLA0KPj4+ICAgICNkZWZpbmUgYXR0cl9iZ2NvbF9lYyhiZ3NoaWZ0LCB2Yywg aW5mbykgYXR0cl9jb2xfZWMoYmdzaGlmdCwgdmMsIGluZm8sIDApDQo+Pj4gICAgI2RlZmlu ZSBhdHRyX2ZnY29sX2VjKGZnc2hpZnQsIHZjLCBpbmZvKSBhdHRyX2NvbF9lYyhmZ3NoaWZ0 LCB2YywgaW5mbywgMSkNCj4+PiAtICAgIC8qDQo+Pj4gLSAgICAgKiAgU2Nyb2xsIE1ldGhv ZA0KPj4+IC0gICAgICovDQo+Pj4gLQ0KPj4+IC0vKiBUaGVyZSBhcmUgc2V2ZXJhbCBtZXRo b2RzIGZiY29uIGNhbiB1c2UgdG8gbW92ZSB0ZXh0IGFyb3VuZCB0aGUgc2NyZWVuOg0KPj4+ IC0gKg0KPj4+IC0gKiAgICAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbiAgIFBhbiAgICBX cmFwDQo+Pj4gLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQo+Pj4gLSAqIFNDUk9MTF9NT1ZFICAgICAgICAgY29weWFyZWEgICAgTm8gICAgIE5v DQo+Pj4gLSAqIFNDUk9MTF9QQU5fTU9WRSAgICAgY29weWFyZWEgICAgWWVzICAgIE5vDQo+ Pj4gLSAqIFNDUk9MTF9XUkFQX01PVkUgICAgY29weWFyZWEgICAgTm8gICAgIFllcw0KPj4+ IC0gKiBTQ1JPTExfUkVEUkFXICAgICAgIGltYWdlYmxpdCAgIE5vICAgICBObw0KPj4+IC0g KiBTQ1JPTExfUEFOX1JFRFJBVyAgIGltYWdlYmxpdCAgIFllcyAgICBObw0KPj4+IC0gKiBT Q1JPTExfV1JBUF9SRURSQVcgIGltYWdlYmxpdCAgIE5vICAgICBZZXMNCj4+PiAtICoNCj4+ PiAtICogKFNDUk9MTF9XUkFQX1JFRFJBVyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0KQ0KPj4+ IC0gKg0KPj4+IC0gKiBJbiBnZW5lcmFsLCBmYmNvbiB3aWxsIGNob29zZSB0aGUgYmVzdCBz Y3JvbGxpbmcNCj4+PiAtICogbWV0aG9kIGJhc2VkIG9uIHRoZSBydWxlIGJlbG93Og0KPj4+ IC0gKg0KPj4+IC0gKiBQYW4vV3JhcCA+IGFjY2VsIGltYWdlYmxpdCA+IGFjY2VsIGNvcHlh cmVhID4NCj4+PiAtICogc29mdCBpbWFnZWJsaXQgPiAoc29mdCBjb3B5YXJlYSkNCj4+PiAt ICoNCj4+PiAtICogRXhjZXB0aW9uIHRvIHRoZSBydWxlOiBQYW4gKyBhY2NlbCBjb3B5YXJl YSBpcw0KPj4+IC0gKiBwcmVmZXJyZWQgb3ZlciBQYW4gKyBhY2NlbCBpbWFnZWJsaXQuDQo+ Pj4gLSAqDQo+Pj4gLSAqIFRoZSBhYm92ZSBpcyB0eXBpY2FsIGZvciBQQ0kvQUdQIGNhcmRz LiBVbmxlc3MNCj4+PiAtICogb3ZlcnJpZGRlbiwgZmJjb24gd2lsbCBuZXZlciB1c2Ugc29m dCBjb3B5YXJlYS4NCj4+PiAtICoNCj4+PiAtICogSWYgeW91IG5lZWQgdG8gb3ZlcnJpZGUg dGhlIGFib3ZlIHJ1bGUsIHNldCB0aGUNCj4+PiAtICogYXBwcm9wcmlhdGUgZmxhZ3MgaW4g ZmJfaW5mby0+ZmxhZ3MuICBGb3IgZXhhbXBsZSwNCj4+PiAtICogdG8gcHJlZmVyIGNvcHlh cmVhIG92ZXIgaW1hZ2VibGl0LCBzZXQNCj4+PiAtICogRkJJTkZPX1JFQURTX0ZBU1QuDQo+ Pj4gLSAqDQo+Pj4gLSAqIE90aGVyIG5vdGVzOg0KPj4+IC0gKiArIHVzZSB0aGUgaGFyZHdh cmUgZW5naW5lIHRvIG1vdmUgdGhlIHRleHQNCj4+PiAtICogICAgKGh3LWFjY2VsZXJhdGVk IGNvcHlhcmVhKCkgYW5kIGZpbGxyZWN0KCkpDQo+Pj4gLSAqICsgdXNlIGhhcmR3YXJlLXN1 cHBvcnRlZCBwYW5uaW5nIG9uIGEgbGFyZ2UgdmlydHVhbCBzY3JlZW4NCj4+PiAtICogKyBh bWlmYiBjYW4gbm90IG9ubHkgcGFuLCBidXQgYWxzbyB3cmFwIHRoZSBkaXNwbGF5IGJ5IE4g bGluZXMNCj4+PiAtICogICAgKGkuZS4gdmlzaWJsZSBsaW5lIGkgPSBwaHlzaWNhbCBsaW5l IChpK04pICUgeXJlcykuDQo+Pj4gLSAqICsgcmVhZCB3aGF0J3MgYWxyZWFkeSByZW5kZXJl ZCBvbiB0aGUgc2NyZWVuIGFuZA0KPj4+IC0gKiAgICAgd3JpdGUgaXQgaW4gYSBkaWZmZXJl bnQgcGxhY2UgKHRoaXMgaXMgY2ZiX2NvcHlhcmVhKCkpDQo+Pj4gLSAqICsgcmUtcmVuZGVy IHRoZSB0ZXh0IHRvIHRoZSBzY3JlZW4NCj4+PiAtICoNCj4+PiAtICogV2hldGhlciB0byB1 c2Ugd3JhcHBpbmcgb3IgcGFubmluZyBjYW4gb25seSBiZSBmaWd1cmVkIG91dCBhdA0KPj4+ IC0gKiBydW50aW1lICh3aGVuIHdlIGtub3cgd2hldGhlciBvdXIgZm9udCBoZWlnaHQgaXMg YSBtdWx0aXBsZQ0KPj4+IC0gKiBvZiB0aGUgcGFuL3dyYXAgc3RlcCkNCj4+PiAtICoNCj4+ PiAtICovDQo+Pj4gLQ0KPj4+IC0jZGVmaW5lIFNDUk9MTF9NT1ZFCSAgIDB4MDAxDQo+Pj4g LSNkZWZpbmUgU0NST0xMX1BBTl9NT1ZFCSAgIDB4MDAyDQo+Pj4gLSNkZWZpbmUgU0NST0xM X1dSQVBfTU9WRSAgIDB4MDAzDQo+Pj4gLSNkZWZpbmUgU0NST0xMX1JFRFJBVwkgICAweDAw NA0KPj4+IC0jZGVmaW5lIFNDUk9MTF9QQU5fUkVEUkFXICAweDAwNQ0KPj4+IC0NCj4+PiAg ICAjaWZkZWYgQ09ORklHX0ZCX1RJTEVCTElUVElORw0KPj4+ICAgIGV4dGVybiB2b2lkIGZi Y29uX3NldF90aWxlb3BzKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmlu Zm8pOw0KPj4+ICAgICNlbmRpZg0KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2Zi ZGV2L2NvcmUvZmJjb25fY2N3LmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25f Y2N3LmMNCj4+PiBpbmRleCA5Y2QyYzRiMDVjMzIuLmZmYTc4OTM2ZWFhYiAxMDA2NDQNCj4+ PiAtLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmMNCj4+PiArKysg Yi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmMNCj4+PiBAQCAtNTksMzEg KzU5LDEyIEBAIHN0YXRpYyB2b2lkIGNjd191cGRhdGVfYXR0cih1OCAqZHN0LCB1OCAqc3Jj LCBpbnQgYXR0cmlidXRlLA0KPj4+ICAgIAl9DQo+Pj4gICAgfQ0KPj4+IC0NCj4+PiAtc3Rh dGljIHZvaWQgY2N3X2Jtb3ZlKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8g KmluZm8sIGludCBzeSwNCj4+PiAtCQkgICAgIGludCBzeCwgaW50IGR5LCBpbnQgZHgsIGlu dCBoZWlnaHQsIGludCB3aWR0aCkNCj4+PiAtew0KPj4+IC0Jc3RydWN0IGZiY29uX29wcyAq b3BzID0gaW5mby0+ZmJjb25fcGFyOw0KPj4+IC0Jc3RydWN0IGZiX2NvcHlhcmVhIGFyZWE7 DQo+Pj4gLQl1MzIgdnlyZXMgPSBHRVRWWVJFUyhvcHMtPnAtPnNjcm9sbG1vZGUsIGluZm8p Ow0KPj4+IC0NCj4+PiAtCWFyZWEuc3ggPSBzeSAqIHZjLT52Y19mb250LmhlaWdodDsNCj4+ PiAtCWFyZWEuc3kgPSB2eXJlcyAtICgoc3ggKyB3aWR0aCkgKiB2Yy0+dmNfZm9udC53aWR0 aCk7DQo+Pj4gLQlhcmVhLmR4ID0gZHkgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7DQo+Pj4gLQlh cmVhLmR5ID0gdnlyZXMgLSAoKGR4ICsgd2lkdGgpICogdmMtPnZjX2ZvbnQud2lkdGgpOw0K Pj4+IC0JYXJlYS53aWR0aCA9IGhlaWdodCAqIHZjLT52Y19mb250LmhlaWdodDsNCj4+PiAt CWFyZWEuaGVpZ2h0ICA9IHdpZHRoICogdmMtPnZjX2ZvbnQud2lkdGg7DQo+Pj4gLQ0KPj4+ IC0JaW5mby0+ZmJvcHMtPmZiX2NvcHlhcmVhKGluZm8sICZhcmVhKTsNCj4+PiAtfQ0KPj4+ IC0NCj4+PiAgICBzdGF0aWMgdm9pZCBjY3dfY2xlYXIoc3RydWN0IHZjX2RhdGEgKnZjLCBz dHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHN5LA0KPj4+ICAgIAkJICAgICBpbnQgc3gsIGlu dCBoZWlnaHQsIGludCB3aWR0aCkNCj4+PiAgICB7DQo+Pj4gLQlzdHJ1Y3QgZmJjb25fb3Bz ICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7DQo+Pj4gICAgCXN0cnVjdCBmYl9maWxscmVjdCBy ZWdpb247DQo+Pj4gICAgCWludCBiZ3NoaWZ0ID0gKHZjLT52Y19oaV9mb250X21hc2spID8g MTMgOiAxMjsNCj4+PiAtCXUzMiB2eXJlcyA9IEdFVFZZUkVTKG9wcy0+cC0+c2Nyb2xsbW9k ZSwgaW5mbyk7DQo+Pj4gKwl1MzIgdnlyZXMgPSBpbmZvLT52YXIueXJlczsNCj4+PiAgICAJ cmVnaW9uLmNvbG9yID0gYXR0cl9iZ2NvbF9lYyhiZ3NoaWZ0LHZjLGluZm8pOw0KPj4+ICAg IAlyZWdpb24uZHggPSBzeSAqIHZjLT52Y19mb250LmhlaWdodDsNCj4+PiBAQCAtMTQwLDcg KzEyMSw3IEBAIHN0YXRpYyB2b2lkIGNjd19wdXRjcyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0 cnVjdCBmYl9pbmZvICppbmZvLA0KPj4+ICAgIAl1MzIgY250LCBwaXRjaCwgc2l6ZTsNCj4+ PiAgICAJdTMyIGF0dHJpYnV0ZSA9IGdldF9hdHRyaWJ1dGUoaW5mbywgc2NyX3JlYWR3KHMp KTsNCj4+PiAgICAJdTggKmRzdCwgKmJ1ZiA9IE5VTEw7DQo+Pj4gLQl1MzIgdnlyZXMgPSBH RVRWWVJFUyhvcHMtPnAtPnNjcm9sbG1vZGUsIGluZm8pOw0KPj4+ICsJdTMyIHZ5cmVzID0g aW5mby0+dmFyLnlyZXM7DQo+Pj4gICAgCWlmICghb3BzLT5mb250YnVmZmVyKQ0KPj4+ICAg IAkJcmV0dXJuOw0KPj4+IEBAIC0yMjksNyArMjEwLDcgQEAgc3RhdGljIHZvaWQgY2N3X2N1 cnNvcihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgbW9k ZSwNCj4+PiAgICAJaW50IGF0dHJpYnV0ZSwgdXNlX3N3ID0gdmMtPnZjX2N1cnNvcl90eXBl ICYgQ1VSX1NXOw0KPj4+ICAgIAlpbnQgZXJyID0gMSwgZHgsIGR5Ow0KPj4+ICAgIAljaGFy ICpzcmM7DQo+Pj4gLQl1MzIgdnlyZXMgPSBHRVRWWVJFUyhvcHMtPnAtPnNjcm9sbG1vZGUs IGluZm8pOw0KPj4+ICsJdTMyIHZ5cmVzID0gaW5mby0+dmFyLnlyZXM7DQo+Pj4gICAgCWlm ICghb3BzLT5mb250YnVmZmVyKQ0KPj4+ICAgIAkJcmV0dXJuOw0KPj4+IEBAIC0zODcsNyAr MzY4LDcgQEAgc3RhdGljIGludCBjY3dfdXBkYXRlX3N0YXJ0KHN0cnVjdCBmYl9pbmZvICpp bmZvKQ0KPj4+ICAgIHsNCj4+PiAgICAJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ ZmJjb25fcGFyOw0KPj4+ICAgIAl1MzIgeW9mZnNldDsNCj4+PiAtCXUzMiB2eXJlcyA9IEdF VFZZUkVTKG9wcy0+cC0+c2Nyb2xsbW9kZSwgaW5mbyk7DQo+Pj4gKwl1MzIgdnlyZXMgPSBp bmZvLT52YXIueXJlczsNCj4+PiAgICAJaW50IGVycjsNCj4+PiAgICAJeW9mZnNldCA9ICh2 eXJlcyAtIGluZm8tPnZhci55cmVzKSAtIG9wcy0+dmFyLnhvZmZzZXQ7DQo+Pj4gQEAgLTQw Miw3ICszODMsNiBAQCBzdGF0aWMgaW50IGNjd191cGRhdGVfc3RhcnQoc3RydWN0IGZiX2lu Zm8gKmluZm8pDQo+Pj4gICAgdm9pZCBmYmNvbl9yb3RhdGVfY2N3KHN0cnVjdCBmYmNvbl9v cHMgKm9wcykNCj4+PiAgICB7DQo+Pj4gLQlvcHMtPmJtb3ZlID0gY2N3X2Jtb3ZlOw0KPj4+ ICAgIAlvcHMtPmNsZWFyID0gY2N3X2NsZWFyOw0KPj4+ICAgIAlvcHMtPnB1dGNzID0gY2N3 X3B1dGNzOw0KPj4+ICAgIAlvcHMtPmNsZWFyX21hcmdpbnMgPSBjY3dfY2xlYXJfbWFyZ2lu czsNCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3 LmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYw0KPj4+IGluZGV4IDg4 ZDg5ZmFkM2YwNS4uOTJlNWI3ZmI1MWVlIDEwMDY0NA0KPj4+IC0tLSBhL2RyaXZlcnMvdmlk ZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jDQo+Pj4gKysrIGIvZHJpdmVycy92aWRlby9mYmRl di9jb3JlL2ZiY29uX2N3LmMNCj4+PiBAQCAtNDQsMzEgKzQ0LDEyIEBAIHN0YXRpYyB2b2lk IGN3X3VwZGF0ZV9hdHRyKHU4ICpkc3QsIHU4ICpzcmMsIGludCBhdHRyaWJ1dGUsDQo+Pj4g ICAgCX0NCj4+PiAgICB9DQo+Pj4gLQ0KPj4+IC1zdGF0aWMgdm9pZCBjd19ibW92ZShzdHJ1 Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgc3ksDQo+Pj4gLQkJ ICAgICBpbnQgc3gsIGludCBkeSwgaW50IGR4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpDQo+ Pj4gLXsNCj4+PiAtCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsN Cj4+PiAtCXN0cnVjdCBmYl9jb3B5YXJlYSBhcmVhOw0KPj4+IC0JdTMyIHZ4cmVzID0gR0VU VlhSRVMob3BzLT5wLT5zY3JvbGxtb2RlLCBpbmZvKTsNCj4+PiAtDQo+Pj4gLQlhcmVhLnN4 ID0gdnhyZXMgLSAoKHN5ICsgaGVpZ2h0KSAqIHZjLT52Y19mb250LmhlaWdodCk7DQo+Pj4g LQlhcmVhLnN5ID0gc3ggKiB2Yy0+dmNfZm9udC53aWR0aDsNCj4+PiAtCWFyZWEuZHggPSB2 eHJlcyAtICgoZHkgKyBoZWlnaHQpICogdmMtPnZjX2ZvbnQuaGVpZ2h0KTsNCj4+PiAtCWFy ZWEuZHkgPSBkeCAqIHZjLT52Y19mb250LndpZHRoOw0KPj4+IC0JYXJlYS53aWR0aCA9IGhl aWdodCAqIHZjLT52Y19mb250LmhlaWdodDsNCj4+PiAtCWFyZWEuaGVpZ2h0ICA9IHdpZHRo ICogdmMtPnZjX2ZvbnQud2lkdGg7DQo+Pj4gLQ0KPj4+IC0JaW5mby0+ZmJvcHMtPmZiX2Nv cHlhcmVhKGluZm8sICZhcmVhKTsNCj4+PiAtfQ0KPj4+IC0NCj4+PiAgICBzdGF0aWMgdm9p ZCBjd19jbGVhcihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLCBp bnQgc3ksDQo+Pj4gICAgCQkgICAgIGludCBzeCwgaW50IGhlaWdodCwgaW50IHdpZHRoKQ0K Pj4+ICAgIHsNCj4+PiAtCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3Bh cjsNCj4+PiAgICAJc3RydWN0IGZiX2ZpbGxyZWN0IHJlZ2lvbjsNCj4+PiAgICAJaW50IGJn c2hpZnQgPSAodmMtPnZjX2hpX2ZvbnRfbWFzaykgPyAxMyA6IDEyOw0KPj4+IC0JdTMyIHZ4 cmVzID0gR0VUVlhSRVMob3BzLT5wLT5zY3JvbGxtb2RlLCBpbmZvKTsNCj4+PiArCXUzMiB2 eHJlcyA9IGluZm8tPnZhci54cmVzOw0KPj4+ICAgIAlyZWdpb24uY29sb3IgPSBhdHRyX2Jn Y29sX2VjKGJnc2hpZnQsdmMsaW5mbyk7DQo+Pj4gICAgCXJlZ2lvbi5keCA9IHZ4cmVzIC0g KChzeSArIGhlaWdodCkgKiB2Yy0+dmNfZm9udC5oZWlnaHQpOw0KPj4+IEBAIC0xMjUsNyAr MTA2LDcgQEAgc3RhdGljIHZvaWQgY3dfcHV0Y3Moc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1 Y3QgZmJfaW5mbyAqaW5mbywNCj4+PiAgICAJdTMyIGNudCwgcGl0Y2gsIHNpemU7DQo+Pj4g ICAgCXUzMiBhdHRyaWJ1dGUgPSBnZXRfYXR0cmlidXRlKGluZm8sIHNjcl9yZWFkdyhzKSk7 DQo+Pj4gICAgCXU4ICpkc3QsICpidWYgPSBOVUxMOw0KPj4+IC0JdTMyIHZ4cmVzID0gR0VU VlhSRVMob3BzLT5wLT5zY3JvbGxtb2RlLCBpbmZvKTsNCj4+PiArCXUzMiB2eHJlcyA9IGlu Zm8tPnZhci54cmVzOw0KPj4+ICAgIAlpZiAoIW9wcy0+Zm9udGJ1ZmZlcikNCj4+PiAgICAJ CXJldHVybjsNCj4+PiBAQCAtMjEyLDcgKzE5Myw3IEBAIHN0YXRpYyB2b2lkIGN3X2N1cnNv cihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgbW9kZSwN Cj4+PiAgICAJaW50IGF0dHJpYnV0ZSwgdXNlX3N3ID0gdmMtPnZjX2N1cnNvcl90eXBlICYg Q1VSX1NXOw0KPj4+ICAgIAlpbnQgZXJyID0gMSwgZHgsIGR5Ow0KPj4+ICAgIAljaGFyICpz cmM7DQo+Pj4gLQl1MzIgdnhyZXMgPSBHRVRWWFJFUyhvcHMtPnAtPnNjcm9sbG1vZGUsIGlu Zm8pOw0KPj4+ICsJdTMyIHZ4cmVzID0gaW5mby0+dmFyLnhyZXM7DQo+Pj4gICAgCWlmICgh b3BzLT5mb250YnVmZmVyKQ0KPj4+ICAgIAkJcmV0dXJuOw0KPj4+IEBAIC0zNjksNyArMzUw LDcgQEAgc3RhdGljIHZvaWQgY3dfY3Vyc29yKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0 IGZiX2luZm8gKmluZm8sIGludCBtb2RlLA0KPj4+ICAgIHN0YXRpYyBpbnQgY3dfdXBkYXRl X3N0YXJ0KHN0cnVjdCBmYl9pbmZvICppbmZvKQ0KPj4+ICAgIHsNCj4+PiAgICAJc3RydWN0 IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOw0KPj4+IC0JdTMyIHZ4cmVzID0g R0VUVlhSRVMob3BzLT5wLT5zY3JvbGxtb2RlLCBpbmZvKTsNCj4+PiArCXUzMiB2eHJlcyA9 IGluZm8tPnZhci54cmVzOw0KPj4+ICAgIAl1MzIgeG9mZnNldDsNCj4+PiAgICAJaW50IGVy cjsNCj4+PiBAQCAtMzg1LDcgKzM2Niw2IEBAIHN0YXRpYyBpbnQgY3dfdXBkYXRlX3N0YXJ0 KHN0cnVjdCBmYl9pbmZvICppbmZvKQ0KPj4+ICAgIHZvaWQgZmJjb25fcm90YXRlX2N3KHN0 cnVjdCBmYmNvbl9vcHMgKm9wcykNCj4+PiAgICB7DQo+Pj4gLQlvcHMtPmJtb3ZlID0gY3df Ym1vdmU7DQo+Pj4gICAgCW9wcy0+Y2xlYXIgPSBjd19jbGVhcjsNCj4+PiAgICAJb3BzLT5w dXRjcyA9IGN3X3B1dGNzOw0KPj4+ICAgIAlvcHMtPmNsZWFyX21hcmdpbnMgPSBjd19jbGVh cl9tYXJnaW5zOw0KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUv ZmJjb25fcm90YXRlLmggYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRl LmgNCj4+PiBpbmRleCBlMjMzNDQ0Y2RhNjYuLmI1MjhiMmU1NDI4MyAxMDA2NDQNCj4+PiAt LS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmgNCj4+PiArKysg Yi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmgNCj4+PiBAQCAtMTEs MTUgKzExLDYgQEANCj4+PiAgICAjaWZuZGVmIF9GQkNPTl9ST1RBVEVfSA0KPj4+ICAgICNk ZWZpbmUgX0ZCQ09OX1JPVEFURV9IDQo+Pj4gLSNkZWZpbmUgR0VUVllSRVMocyxpKSAoeyAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4+PiAtICAgICAgICAocyA9PSBTQ1JPTExf UkVEUkFXIHx8IHMgPT0gU0NST0xMX01PVkUpID8gXA0KPj4+IC0gICAgICAgIChpKS0+dmFy LnlyZXMgOiAoaSktPnZhci55cmVzX3ZpcnR1YWw7IH0pDQo+Pj4gLQ0KPj4+IC0jZGVmaW5l IEdFVFZYUkVTKHMsaSkgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+Pj4gLSAg ICAgICAgKHMgPT0gU0NST0xMX1JFRFJBVyB8fCBzID09IFNDUk9MTF9NT1ZFIHx8ICEoaSkt PmZpeC54cGFuc3RlcCkgPyBcDQo+Pj4gLSAgICAgICAgKGkpLT52YXIueHJlcyA6IChpKS0+ dmFyLnhyZXNfdmlydHVhbDsgfSkNCj4+PiAtDQo+Pj4gLQ0KPj4+ICAgIHN0YXRpYyBpbmxp bmUgaW50IHBhdHRlcm5fdGVzdF9iaXQodTMyIHgsIHUzMiB5LCB1MzIgcGl0Y2gsIGNvbnN0 IGNoYXIgKnBhdCkNCj4+PiAgICB7DQo+Pj4gICAgCXUzMiB0bXAgPSAoeSAqIHBpdGNoKSAr IHgsIGluZGV4ID0gdG1wIC8gOCwgIGJpdCA9IHRtcCAlIDg7DQo+Pj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jIGIvZHJpdmVycy92aWRlby9m YmRldi9jb3JlL2ZiY29uX3VkLmMNCj4+PiBpbmRleCA4ZDVlNjZiMWJkZmIuLjA5NjE5YmQ4 ZTAyMSAxMDA2NDQNCj4+PiAtLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25f dWQuYw0KPj4+ICsrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jDQo+ Pj4gQEAgLTQ0LDMzICs0NCwxMyBAQCBzdGF0aWMgdm9pZCB1ZF91cGRhdGVfYXR0cih1OCAq ZHN0LCB1OCAqc3JjLCBpbnQgYXR0cmlidXRlLA0KPj4+ICAgIAl9DQo+Pj4gICAgfQ0KPj4+ IC0NCj4+PiAtc3RhdGljIHZvaWQgdWRfYm1vdmUoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1 Y3QgZmJfaW5mbyAqaW5mbywgaW50IHN5LA0KPj4+IC0JCSAgICAgaW50IHN4LCBpbnQgZHks IGludCBkeCwgaW50IGhlaWdodCwgaW50IHdpZHRoKQ0KPj4+IC17DQo+Pj4gLQlzdHJ1Y3Qg ZmJjb25fb3BzICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7DQo+Pj4gLQlzdHJ1Y3QgZmJfY29w eWFyZWEgYXJlYTsNCj4+PiAtCXUzMiB2eXJlcyA9IEdFVFZZUkVTKG9wcy0+cC0+c2Nyb2xs bW9kZSwgaW5mbyk7DQo+Pj4gLQl1MzIgdnhyZXMgPSBHRVRWWFJFUyhvcHMtPnAtPnNjcm9s bG1vZGUsIGluZm8pOw0KPj4+IC0NCj4+PiAtCWFyZWEuc3kgPSB2eXJlcyAtICgoc3kgKyBo ZWlnaHQpICogdmMtPnZjX2ZvbnQuaGVpZ2h0KTsNCj4+PiAtCWFyZWEuc3ggPSB2eHJlcyAt ICgoc3ggKyB3aWR0aCkgKiB2Yy0+dmNfZm9udC53aWR0aCk7DQo+Pj4gLQlhcmVhLmR5ID0g dnlyZXMgLSAoKGR5ICsgaGVpZ2h0KSAqIHZjLT52Y19mb250LmhlaWdodCk7DQo+Pj4gLQlh cmVhLmR4ID0gdnhyZXMgLSAoKGR4ICsgd2lkdGgpICogdmMtPnZjX2ZvbnQud2lkdGgpOw0K Pj4+IC0JYXJlYS5oZWlnaHQgPSBoZWlnaHQgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7DQo+Pj4g LQlhcmVhLndpZHRoICA9IHdpZHRoICogdmMtPnZjX2ZvbnQud2lkdGg7DQo+Pj4gLQ0KPj4+ IC0JaW5mby0+ZmJvcHMtPmZiX2NvcHlhcmVhKGluZm8sICZhcmVhKTsNCj4+PiAtfQ0KPj4+ IC0NCj4+PiAgICBzdGF0aWMgdm9pZCB1ZF9jbGVhcihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0 cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgc3ksDQo+Pj4gICAgCQkgICAgIGludCBzeCwgaW50 IGhlaWdodCwgaW50IHdpZHRoKQ0KPj4+ICAgIHsNCj4+PiAtCXN0cnVjdCBmYmNvbl9vcHMg Km9wcyA9IGluZm8tPmZiY29uX3BhcjsNCj4+PiAgICAJc3RydWN0IGZiX2ZpbGxyZWN0IHJl Z2lvbjsNCj4+PiAgICAJaW50IGJnc2hpZnQgPSAodmMtPnZjX2hpX2ZvbnRfbWFzaykgPyAx MyA6IDEyOw0KPj4+IC0JdTMyIHZ5cmVzID0gR0VUVllSRVMob3BzLT5wLT5zY3JvbGxtb2Rl LCBpbmZvKTsNCj4+PiAtCXUzMiB2eHJlcyA9IEdFVFZYUkVTKG9wcy0+cC0+c2Nyb2xsbW9k ZSwgaW5mbyk7DQo+Pj4gKwl1MzIgdnlyZXMgPSBpbmZvLT52YXIueXJlczsNCj4+PiArCXUz MiB2eHJlcyA9IGluZm8tPnZhci54cmVzOw0KPj4+ICAgIAlyZWdpb24uY29sb3IgPSBhdHRy X2JnY29sX2VjKGJnc2hpZnQsdmMsaW5mbyk7DQo+Pj4gICAgCXJlZ2lvbi5keSA9IHZ5cmVz IC0gKChzeSArIGhlaWdodCkgKiB2Yy0+dmNfZm9udC5oZWlnaHQpOw0KPj4+IEBAIC0xNjIs OCArMTQyLDggQEAgc3RhdGljIHZvaWQgdWRfcHV0Y3Moc3RydWN0IHZjX2RhdGEgKnZjLCBz dHJ1Y3QgZmJfaW5mbyAqaW5mbywNCj4+PiAgICAJdTMyIG1vZCA9IHZjLT52Y19mb250Lndp ZHRoICUgOCwgY250LCBwaXRjaCwgc2l6ZTsNCj4+PiAgICAJdTMyIGF0dHJpYnV0ZSA9IGdl dF9hdHRyaWJ1dGUoaW5mbywgc2NyX3JlYWR3KHMpKTsNCj4+PiAgICAJdTggKmRzdCwgKmJ1 ZiA9IE5VTEw7DQo+Pj4gLQl1MzIgdnlyZXMgPSBHRVRWWVJFUyhvcHMtPnAtPnNjcm9sbG1v ZGUsIGluZm8pOw0KPj4+IC0JdTMyIHZ4cmVzID0gR0VUVlhSRVMob3BzLT5wLT5zY3JvbGxt b2RlLCBpbmZvKTsNCj4+PiArCXUzMiB2eXJlcyA9IGluZm8tPnZhci55cmVzOw0KPj4+ICsJ dTMyIHZ4cmVzID0gaW5mby0+dmFyLnhyZXM7DQo+Pj4gICAgCWlmICghb3BzLT5mb250YnVm ZmVyKQ0KPj4+ICAgIAkJcmV0dXJuOw0KPj4+IEBAIC0yNTksOCArMjM5LDggQEAgc3RhdGlj IHZvaWQgdWRfY3Vyc29yKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmlu Zm8sIGludCBtb2RlLA0KPj4+ICAgIAlpbnQgYXR0cmlidXRlLCB1c2Vfc3cgPSB2Yy0+dmNf Y3Vyc29yX3R5cGUgJiBDVVJfU1c7DQo+Pj4gICAgCWludCBlcnIgPSAxLCBkeCwgZHk7DQo+ Pj4gICAgCWNoYXIgKnNyYzsNCj4+PiAtCXUzMiB2eXJlcyA9IEdFVFZZUkVTKG9wcy0+cC0+ c2Nyb2xsbW9kZSwgaW5mbyk7DQo+Pj4gLQl1MzIgdnhyZXMgPSBHRVRWWFJFUyhvcHMtPnAt PnNjcm9sbG1vZGUsIGluZm8pOw0KPj4+ICsJdTMyIHZ5cmVzID0gaW5mby0+dmFyLnlyZXM7 DQo+Pj4gKwl1MzIgdnhyZXMgPSBpbmZvLT52YXIueHJlczsNCj4+PiAgICAJaWYgKCFvcHMt PmZvbnRidWZmZXIpDQo+Pj4gICAgCQlyZXR1cm47DQo+Pj4gQEAgLTQxMCw4ICszOTAsOCBA QCBzdGF0aWMgaW50IHVkX3VwZGF0ZV9zdGFydChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykNCj4+ PiAgICB7DQo+Pj4gICAgCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3Bh cjsNCj4+PiAgICAJaW50IHhvZmZzZXQsIHlvZmZzZXQ7DQo+Pj4gLQl1MzIgdnlyZXMgPSBH RVRWWVJFUyhvcHMtPnAtPnNjcm9sbG1vZGUsIGluZm8pOw0KPj4+IC0JdTMyIHZ4cmVzID0g R0VUVlhSRVMob3BzLT5wLT5zY3JvbGxtb2RlLCBpbmZvKTsNCj4+PiArCXUzMiB2eXJlcyA9 IGluZm8tPnZhci55cmVzOw0KPj4+ICsJdTMyIHZ4cmVzID0gaW5mby0+dmFyLnhyZXM7DQo+ Pj4gICAgCWludCBlcnI7DQo+Pj4gICAgCXhvZmZzZXQgPSB2eHJlcyAtIGluZm8tPnZhci54 cmVzIC0gb3BzLT52YXIueG9mZnNldDsNCj4+PiBAQCAtNDI5LDcgKzQwOSw2IEBAIHN0YXRp YyBpbnQgdWRfdXBkYXRlX3N0YXJ0KHN0cnVjdCBmYl9pbmZvICppbmZvKQ0KPj4+ICAgIHZv aWQgZmJjb25fcm90YXRlX3VkKHN0cnVjdCBmYmNvbl9vcHMgKm9wcykNCj4+PiAgICB7DQo+ Pj4gLQlvcHMtPmJtb3ZlID0gdWRfYm1vdmU7DQo+Pj4gICAgCW9wcy0+Y2xlYXIgPSB1ZF9j bGVhcjsNCj4+PiAgICAJb3BzLT5wdXRjcyA9IHVkX3B1dGNzOw0KPj4+ICAgIAlvcHMtPmNs ZWFyX21hcmdpbnMgPSB1ZF9jbGVhcl9tYXJnaW5zOw0KPj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvdGlsZWJsaXQuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYv Y29yZS90aWxlYmxpdC5jDQo+Pj4gaW5kZXggMjc2OGVmZjI0N2JhLi43MmFmOTUwNTNiY2Ig MTAwNjQ0DQo+Pj4gLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL3RpbGVibGl0LmMN Cj4+PiArKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvdGlsZWJsaXQuYw0KPj4+IEBA IC0xNiwyMSArMTYsNiBAQA0KPj4+ICAgICNpbmNsdWRlIDxhc20vdHlwZXMuaD4NCj4+PiAg ICAjaW5jbHVkZSAiZmJjb24uaCINCj4+PiAtc3RhdGljIHZvaWQgdGlsZV9ibW92ZShzdHJ1 Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgc3ksDQo+Pj4gLQkJ ICAgICAgIGludCBzeCwgaW50IGR5LCBpbnQgZHgsIGludCBoZWlnaHQsIGludCB3aWR0aCkN Cj4+PiAtew0KPj4+IC0Jc3RydWN0IGZiX3RpbGVhcmVhIGFyZWE7DQo+Pj4gLQ0KPj4+IC0J YXJlYS5zeCA9IHN4Ow0KPj4+IC0JYXJlYS5zeSA9IHN5Ow0KPj4+IC0JYXJlYS5keCA9IGR4 Ow0KPj4+IC0JYXJlYS5keSA9IGR5Ow0KPj4+IC0JYXJlYS5oZWlnaHQgPSBoZWlnaHQ7DQo+ Pj4gLQlhcmVhLndpZHRoID0gd2lkdGg7DQo+Pj4gLQ0KPj4+IC0JaW5mby0+dGlsZW9wcy0+ ZmJfdGlsZWNvcHkoaW5mbywgJmFyZWEpOw0KPj4+IC19DQo+Pj4gLQ0KPj4+ICAgIHN0YXRp YyB2b2lkIHRpbGVfY2xlYXIoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAq aW5mbywgaW50IHN5LA0KPj4+ICAgIAkJICAgICAgIGludCBzeCwgaW50IGhlaWdodCwgaW50 IHdpZHRoKQ0KPj4+ICAgIHsNCj4+PiBAQCAtMTMzLDcgKzExOCw2IEBAIHZvaWQgZmJjb25f c2V0X3RpbGVvcHMoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykN Cj4+PiAgICAJc3RydWN0IGZiX3RpbGVtYXAgbWFwOw0KPj4+ICAgIAlzdHJ1Y3QgZmJjb25f b3BzICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7DQo+Pj4gLQlvcHMtPmJtb3ZlID0gdGlsZV9i bW92ZTsNCj4+PiAgICAJb3BzLT5jbGVhciA9IHRpbGVfY2xlYXI7DQo+Pj4gICAgCW9wcy0+ cHV0Y3MgPSB0aWxlX3B1dGNzOw0KPj4+ICAgIAlvcHMtPmNsZWFyX21hcmdpbnMgPSB0aWxl X2NsZWFyX21hcmdpbnM7DQo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYv c2tlbGV0b25mYi5jIGIvZHJpdmVycy92aWRlby9mYmRldi9za2VsZXRvbmZiLmMNCj4+PiBp bmRleCBiY2FjZmI2OTM0ZmEuLjBmZTkyMmY3MjZlOSAxMDA2NDQNCj4+PiAtLS0gYS9kcml2 ZXJzL3ZpZGVvL2ZiZGV2L3NrZWxldG9uZmIuYw0KPj4+ICsrKyBiL2RyaXZlcnMvdmlkZW8v ZmJkZXYvc2tlbGV0b25mYi5jDQo+Pj4gQEAgLTUwNSwxNSArNTA1LDE1IEBAIHZvaWQgeHh4 ZmJfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKnAsIGNvbnN0IHN0cnVjdCBmYl9maWxscmVj dCAqcmVnaW9uKQ0KPj4+ICAgIH0NCj4+PiAgICAvKioNCj4+PiAtICogICAgICB4eHhmYl9j b3B5YXJlYSAtIFJFUVVJUkVEIGZ1bmN0aW9uLiBDYW4gdXNlIGdlbmVyaWMgcm91dGluZXMg aWYNCj4+PiAtICogICAgICAgICAgICAgICAgICAgICAgIG5vbiBhY2NsZXJhdGVkIGhhcmR3 YXJlIGFuZCBwYWNrZWQgcGl4ZWwgYmFzZWQuDQo+Pj4gKyAqICAgICAgeHh4ZmJfY29weWFy ZWEgLSBPQlNPTEVURSBmdW5jdGlvbi4NCj4+PiAgICAgKiAgICAgICAgICAgICAgICAgICAg ICAgQ29waWVzIG9uZSBhcmVhIG9mIHRoZSBzY3JlZW4gdG8gYW5vdGhlciBhcmVhLg0KPj4+ ICsgKiAgICAgICAgICAgICAgICAgICAgICAgV2lsbCBiZSBkZWxldGVkIGluIGEgZnV0dXJl IHZlcnNpb24NCj4+PiAgICAgKg0KPj4+ICAgICAqICAgICAgQGluZm86IGZyYW1lIGJ1ZmZl ciBzdHJ1Y3R1cmUgdGhhdCByZXByZXNlbnRzIGEgc2luZ2xlIGZyYW1lIGJ1ZmZlcg0KPj4+ ICAgICAqICAgICAgQGFyZWE6IFN0cnVjdHVyZSBwcm92aWRpbmcgdGhlIGRhdGEgdG8gY29w eSB0aGUgZnJhbWVidWZmZXIgY29udGVudHMNCj4+PiAgICAgKgkgICAgICAgZnJvbSBvbmUg cmVnaW9uIHRvIGFub3RoZXIuDQo+Pj4gICAgICoNCj4+PiAtICogICAgICBUaGlzIGRyYXdp bmcgb3BlcmF0aW9uIGNvcGllcyBhIHJlY3Rhbmd1bGFyIGFyZWEgZnJvbSBvbmUgYXJlYSBv ZiB0aGUNCj4+PiArICogICAgICBUaGlzIGRyYXdpbmcgb3BlcmF0aW9uIGNvcGllZCBhIHJl Y3Rhbmd1bGFyIGFyZWEgZnJvbSBvbmUgYXJlYSBvZiB0aGUNCj4+PiAgICAgKglzY3JlZW4g dG8gYW5vdGhlciBhcmVhLg0KPj4+ICAgICAqLw0KPj4+ICAgIHZvaWQgeHh4ZmJfY29weWFy ZWEoc3RydWN0IGZiX2luZm8gKnAsIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSAqYXJlYSkN Cj4+PiBAQCAtNjQ1LDkgKzY0NSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJfb3BzIHh4 eGZiX29wcyA9IHsNCj4+PiAgICAJLmZiX3NldGNvbHJlZwk9IHh4eGZiX3NldGNvbHJlZywN Cj4+PiAgICAJLmZiX2JsYW5rCT0geHh4ZmJfYmxhbmssDQo+Pj4gICAgCS5mYl9wYW5fZGlz cGxheQk9IHh4eGZiX3Bhbl9kaXNwbGF5LA0KPj4+IC0JLmZiX2ZpbGxyZWN0CT0geHh4ZmJf ZmlsbHJlY3QsIAkvKiBOZWVkZWQgISEhICovDQo+Pj4gLQkuZmJfY29weWFyZWEJPSB4eHhm Yl9jb3B5YXJlYSwJLyogTmVlZGVkICEhISAqLw0KPj4+IC0JLmZiX2ltYWdlYmxpdAk9IHh4 eGZiX2ltYWdlYmxpdCwJLyogTmVlZGVkICEhISAqLw0KPj4+ICsJLmZiX2ZpbGxyZWN0CT0g eHh4ZmJfZmlsbHJlY3QsCS8qIE5lZWRlZCAhISEgICAqLw0KPj4+ICsJLmZiX2NvcHlhcmVh CT0geHh4ZmJfY29weWFyZWEsCS8qIE9ic29sZXRlICAgICAqLw0KPj4+ICsJLmZiX2ltYWdl YmxpdAk9IHh4eGZiX2ltYWdlYmxpdCwJLyogTmVlZGVkICEhISAgICovDQo+Pj4gICAgCS5m Yl9jdXJzb3IJPSB4eHhmYl9jdXJzb3IsCQkvKiBPcHRpb25hbCAhISEgKi8NCj4+PiAgICAJ LmZiX3N5bmMJPSB4eHhmYl9zeW5jLA0KPj4+ICAgIAkuZmJfaW9jdGwJPSB4eHhmYl9pb2N0 bCwNCj4+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mYi5oIGIvaW5jbHVkZS9saW51 eC9mYi5oDQo+Pj4gaW5kZXggNTk1MGY4ZjVkYzc0Li42ZjNkYjk5YWI5OTAgMTAwNjQ0DQo+ Pj4gLS0tIGEvaW5jbHVkZS9saW51eC9mYi5oDQo+Pj4gKysrIGIvaW5jbHVkZS9saW51eC9m Yi5oDQo+Pj4gQEAgLTI2Miw3ICsyNjIsNyBAQCBzdHJ1Y3QgZmJfb3BzIHsNCj4+PiAgICAJ LyogRHJhd3MgYSByZWN0YW5nbGUgKi8NCj4+PiAgICAJdm9pZCAoKmZiX2ZpbGxyZWN0KSAo c3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCk7 DQo+Pj4gLQkvKiBDb3B5IGRhdGEgZnJvbSBhcmVhIHRvIGFub3RoZXIgKi8NCj4+PiArCS8q IENvcHkgZGF0YSBmcm9tIGFyZWEgdG8gYW5vdGhlci4gT2Jzb2xldGUuICovDQo+Pj4gICAg CXZvaWQgKCpmYl9jb3B5YXJlYSkgKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1 Y3QgZmJfY29weWFyZWEgKnJlZ2lvbik7DQo+Pj4gICAgCS8qIERyYXdzIGEgaW1hZ2UgdG8g dGhlIGRpc3BsYXkgKi8NCj4+PiAgICAJdm9pZCAoKmZiX2ltYWdlYmxpdCkgKHN0cnVjdCBm Yl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKTsNCj4+Pg0KPj4+ DQo+Pj4NCj4+DQo+PiAtLSANCj4+IFRob21hcyBaaW1tZXJtYW5uDQo+PiBHcmFwaGljcyBE cml2ZXIgRGV2ZWxvcGVyDQo+PiBTVVNFIFNvZnR3YXJlIFNvbHV0aW9ucyBHZXJtYW55IEdt YkgNCj4+IE1heGZlbGRzdHIuIDUsIDkwNDA5IE7DvHJuYmVyZywgR2VybWFueQ0KPj4gKEhS QiAzNjgwOSwgQUcgTsO8cm5iZXJnKQ0KPj4gR2VzY2jDpGZ0c2bDvGhyZXI6IEZlbGl4IElt ZW5kw7ZyZmZlcg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KDQotLSANClRob21hcyBaaW1t ZXJtYW5uDQpHcmFwaGljcyBEcml2ZXIgRGV2ZWxvcGVyDQpTVVNFIFNvZnR3YXJlIFNvbHV0 aW9ucyBHZXJtYW55IEdtYkgNCk1heGZlbGRzdHIuIDUsIDkwNDA5IE7DvHJuYmVyZywgR2Vy bWFueQ0KKEhSQiAzNjgwOSwgQUcgTsO8cm5iZXJnKQ0KR2VzY2jDpGZ0c2bDvGhyZXI6IEZl bGl4IEltZW5kw7ZyZmZlcg0K --------------BGXlVj5GD0qejWy5jLPsgd9e-- --------------aUJq9gM3FRVW9L6m92X1aQIr Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature" -----BEGIN PGP SIGNATURE----- wsF5BAABCAAjFiEExndm/fpuMUdwYFFolh/E3EQov+AFAmFm6EIFAwAAAAAACgkQlh/E3EQov+C+ UA/+PibWnrP1nKsje5vwASjxbivSM9rOjEeLGpxh6vWtc0h/tvudD0W6W/xZ3b/qA4J1pYMIIQZH ZIWbwshX9y5x773yNE073cuTZKOp4Gy5W1KawZY10XubaFbtQo46F31DhgY6VxevfKcdWBdvQEtT N8nAroqmA31TGCfm6Ht/tg/Y9Lvztpa5y8SQDO32jN92FPi2+7zS5On9+yf/beQfx8ACAvTb/HPH VVrdSvEI07v4XoTvb2BjndebAAn9MmWLF98kD3p1mqqyi4VY6rRDyI7xEBO9yldVv8wdN3NX0+3O +41F6CYXpN5UnHA4o34q1A7aSidlY4+czjG5MMCbZq10vumxJKhi9nITmuIAUgihhlUpTjY8KBqm akGNq1wEzksHQcQW+d9AGfeX+NWfdfNF1LZdncoHY4MIFJfZ0tVpXHdsd3ga4gvT/6t6anzGmIs3 Z8o0nAJC8mIo5gRkwP9eTqFeJ2gpif1kCnD+tv0CuupZJYOnXWulbOGD2ClhnCSi+FiC6RBP/cif 9pFnbhYTAx8XLdV9LzpGyLeX5UBdI5RaXEsAiddeOOta+RQJPhdEcys+tSEO97Ji/Mi7GKuCLHKL 6s5K/QKSQYbDQ4mdTEFnt5Ez8TkmBtlXyfPfCAyhlgh77Xy3p7zUEf7n5Hl7YQMrkEyhgXUtNDDM 4F4= =aZ8V -----END PGP SIGNATURE----- --------------aUJq9gM3FRVW9L6m92X1aQIr--