From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [RFC] drm: Parse HDMI 2.0 YCbCr 4:2:0 VDB and VCB Date: Wed, 4 Jan 2017 18:36:07 +0200 Message-ID: <20170104163607.GK31595@intel.com> References: <20170104132225.GE31595@intel.com> <8528542b-27fb-096f-8e22-af1fb7d5f0a1@synopsys.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 773D66E28C for ; Wed, 4 Jan 2017 16:36:12 +0000 (UTC) Content-Disposition: inline In-Reply-To: <8528542b-27fb-096f-8e22-af1fb7d5f0a1@synopsys.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Jose Abreu Cc: Daniel Vetter , Carlos Palminha , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBKYW4gMDQsIDIwMTcgYXQgMDQ6MTU6MDFQTSArMDAwMCwgSm9zZSBBYnJldSB3cm90 ZToKPiBIaSBWaWxsZSwKPiAKPiAKPiBPbiAwNC0wMS0yMDE3IDEzOjIyLCBWaWxsZSBTeXJqw6Rs w6Qgd3JvdGU6Cj4gPiBPbiBGcmksIERlYyAzMCwgMjAxNiBhdCAwNDo1MzoxNlBNICswMDAwLCBK b3NlIEFicmV1IHdyb3RlOgo+ID4+IEhETUkgMi4wIGludHJvZHVjZXMgYSBuZXcgc2FtcGxpbmcg bW9kZSBjYWxsZWQgWUNiQ3IgNDoyOjAuCj4gPj4gQWNjb3JkaW5nIHRvIHRoZSBzcGVjIHRoZSBF RElEIG1heSBjb250YWluIHR3byBibG9ja3MgdGhhdAo+ID4+IHNpZ25hbCB0aGlzIHNhbXBsaW5n IG1vZGU6Cj4gPj4gCS0gWUNiQ3IgNDoyOjAgVmlkZW8gRGF0YSBCbG9jawo+ID4+IAktIFlDYkNy IDQ6MjowIFZpZGVvIENhcGFiaWxpdHkgTWFwIERhdGEgQmxvY2sKPiA+Pgo+ID4+IFRoZSB2aWRl byBkYXRhIGJsb2NrIGNvbnRhaW5zIHRoZSBsaXN0IG9mIHZpYydzIHdlcmUKPiA+PiBvbmx5IFlD YkNyIDQ6MjowIHNhbXBsaW5nIG1vZGUgc2hhbGwgYmUgdXNlZCB3aGlsZSB0aGUKPiA+PiB2aWRl byBjYXBhYmlsaXR5IG1hcCBkYXRhIGJsb2NrIGNvbnRhaW5zIGEgbWFzayB3ZXJlCj4gPj4gWUNi Q3IgNDoyOjAgc2FtcGxpbmcgbW9kZSBtYXkgYmUgdXNlZC4KPiA+Pgo+ID4+IFRoaXMgUkZDIHBh dGNoIGFkZHMgc3VwcG9ydCBmb3IgcGFyc2luZyB0aGVzZSB0d28gbmV3IGJsb2Nrcwo+ID4+IGFu ZCBpbnRyb2R1Y2VzIG5ldyBmbGFncyB0byBzaWduYWwgdGhlIGRyaXZlcnMgaWYgdGhlCj4gPj4g bW9kZSBpcyA0OjI6MCdvbmx5IG9yIDQ6MjowJ2FibGUuCj4gPj4KPiA+PiBUaGUgcmVhc29uIHRo aXMgaXMgc3RpbGwgYSBSRkMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubwo+ID4+IHJlZmVyZW5jZSBp biBrZXJuZWwgZm9yIHRoaXMgbmV3IHNhbXBsaW5nIG1vZGUgKHNwZWNpYWxseSBpbgo+ID4+IEFW SSBpbmZvZnJhbWUgcGFydCksIHNvLCBJIHdhcyBob3BpbmcgdG8gaGVhciBzb21lIGZlZWRiYWNr Cj4gPj4gZmlyc3QuCj4gPj4KPiA+PiBUZXN0ZWQgaW4gYSBIRE1JIDIuMCBjb21wbGlhbmNlIHNj ZW5hcmlvLgo+ID4+Cj4gPj4gU2lnbmVkLW9mZi1ieTogSm9zZSBBYnJldSA8am9hYnJldUBzeW5v cHN5cy5jb20+Cj4gPj4gQ2M6IENhcmxvcyBQYWxtaW5oYSA8cGFsbWluaGFAc3lub3BzeXMuY29t Pgo+ID4+IENjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGludGVsLmNvbT4KPiA+PiBD YzogSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGxpbnV4LmludGVsLmNvbT4KPiA+PiBDYzogU2Vh biBQYXVsIDxzZWFucGF1bEBjaHJvbWl1bS5vcmc+Cj4gPj4gQ2M6IERhdmlkIEFpcmxpZSA8YWly bGllZEBsaW51eC5pZT4KPiA+PiBDYzogZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ ID4+IENjOiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCj4gPj4gLS0tCj4gPj4gIGRyaXZl cnMvZ3B1L2RybS9kcm1fZWRpZC5jICB8IDEzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrLQo+ID4+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVzLmMgfCAgMTAg KysrLQo+ID4+ICBpbmNsdWRlL3VhcGkvZHJtL2RybV9tb2RlLmggfCAgIDYgKysKPiA+PiAgMyBm aWxlcyBjaGFuZ2VkLCAxNTEgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKPiA+Pgo+ID4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fZWRpZC5jCj4gPj4gaW5kZXggNjdkNmE3My4uNmNlMWEzOCAxMDA2NDQKPiA+PiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwo+ID4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9k cm1fZWRpZC5jCj4gPj4gQEAgLTI1NDksNiArMjU0OSw4IEBAIHN0YXRpYyBpbnQgZHJtX2N2dF9t b2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4+ICAjZGVmaW5lIFZFTkRP Ul9CTE9DSyAgICAweDAzCj4gPj4gICNkZWZpbmUgU1BFQUtFUl9CTE9DSwkweDA0Cj4gPj4gICNk ZWZpbmUgVklERU9fQ0FQQUJJTElUWV9CTE9DSwkweDA3Cj4gPj4gKyNkZWZpbmUgVklERU9fREFU QV9CTE9DS180MjAJMHgwRQo+ID4+ICsjZGVmaW5lIFZJREVPX0NBUF9CTE9DS180MjAJMHgwRgo+ ID4+ICAjZGVmaW5lIEVESURfQkFTSUNfQVVESU8JKDEgPDwgNikKPiA+PiAgI2RlZmluZSBFRElE X0NFQV9ZQ1JDQjQ0NAkoMSA8PCA1KQo+ID4+ICAjZGVmaW5lIEVESURfQ0VBX1lDUkNCNDIyCSgx IDw8IDQpCj4gPj4gQEAgLTMwNTAsNiArMzA1Miw5OCBAQCBzdGF0aWMgaW50IGFkZF8zZF9zdHJ1 Y3RfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgdTE2IHN0cnVjdHVyZSwK PiA+PiAgCXJldHVybiBtb2RlczsKPiA+PiAgfQo+ID4+ICAKPiA+PiArc3RhdGljIGludCBhZGRf NDIwX21vZGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgdTggdmljKQo+ID4+ICt7 Cj4gPj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7Cj4gPj4gKwlz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbmV3bW9kZTsKPiA+PiArCj4gPj4gKwlpZiAoIWRybV92 YWxpZF9jZWFfdmljKHZpYykpCj4gPj4gKwkJcmV0dXJuIDA7Cj4gPj4gKwo+ID4+ICsJbmV3bW9k ZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsICZlZGlkX2NlYV9tb2Rlc1t2aWNdKTsKPiA+PiAr CWlmICghbmV3bW9kZSkKPiA+PiArCQlyZXR1cm4gMDsKPiA+PiArCj4gPj4gKwluZXdtb2RlLT5m bGFncyB8PSBEUk1fTU9ERV9GTEFHXzQyMF9PTkxZOwo+ID4gV2h5IGRvZXMgdXNlcnNwYWNlIG5l ZWQgdG8ga25vdyB0aGlzPyBNeSB0aGlua2luZyBoYXMgYmVlbiB0aGF0IHRoZQo+ID4gZHJpdmVy IHdvdWxkIGRvIHRoZSByaWdodCB0aGluZyBhdXRvbWFnaWNhbGx5Lgo+ID4KPiA+IFdlIGRvIHBy b2JhYmx5IHdhbnQgc29tZSBraW5kIG9mIG91dHB1dCBjb2xvcnNwYWNlIHByb3BlcnR5IHRvIGFs bG93IHRoZQo+ID4gdXNlciB0byBzZWxlY3QgYmV0d2VlbiBSR0IgdnMuIFlDYkNyIGV0Yy4gQnV0 IEkgdGhpbmsgZXZlbiB3aXRoIHRoYXQgd2UKPiA+IHNob3VsZCBzdGlsbCBhbGxvdyB0aGUgZHJp dmVyIHRvIGF1dG9tYWdpY2FsbHkgc2VsZWN0IFlDYkNyIDQ6MjowIG91dHB1dAo+ID4gc2luY2Ug dGhhdCdzIHRoZSBvbmx5IHdheSB0aGUgbW9kZSB3aWxsIHdvcmsuCj4gCj4gSSBhZ3JlZS4gV2hl biBvbmx5IDQ6MjowIGlzIHN1cHBvcnRlZCB0aGVyZSBpcyBubyBuZWVkIHRvIGV4cG9zZQo+IHRo ZSBmbGFnIHRvIHVzZXJzcGFjZS4gSG93IHNoYWxsIHRoZW4gSSBzaWduYWwgZHJpdmVycyBmb3Ig dGhpcwo+IDQ6MjowJ29ubHkgc2FtcGxpbmcgbW9kZT8KPiAKPiBTbywgZm9yIHRoZSByZW1haW5p bmcgbW9kZXMsIHlvdSBwcm9wb3NlIGEgbmV3IGZpZWxkIGluIHRoZSBtb2RlCj4gc3RydWN0dXJl IGNhbGxlZCAnY29sb3JzcGFjZScgd2hpY2ggY29udGFpbnMgdGhlIGxpc3Qgb2YKPiBzdXBwb3J0 ZWQgc2FtcGxpbmcgbW9kZXMgZm9yIHRoZSBnaXZlbiBtb2RlPyBJIHRoaW5rIGl0IHdvdWxkIGJl Cj4gYSBuaWNlIGFkZGl0aW9uLiBUaGlzIHdheSBpZiBhIG1vZGUgc3VwcG9ydHMgb25seSBSR0Ig d2Ugb25seQo+IHBhc3NlZCBSR0IgZmxhZzsgaWYgNDoyOjAgd2FzIGFsc28gc3VwcG9ydGVkIHdl IHBhc3NlZCB0aGUgNDoyOjAKPiBmbGFnLCAuLi4gQW5kIHRoZW4gdXNlciBjb3VsZCBzZWxlY3Qu IFdlIGFsc28gaGF2ZSB0byBpbmZvcm0gdXNlcgo+IHdoaWNoIG9uZSBpcyBiZWluZyBhY3R1YWxs eSB1c2VkLgoKSUlSQyB0aGVyZSBhcmVuJ3QgYW55ICJSR0Igb25seSIgbW9kZXMgb3IgYW55dGhp bmcgbGlrZSB0aGF0LiBTbwpZQ2JDciA0OjI6MCBpcyB0aGUgc3BlY2lhbCBjYXNlIGhlcmUuIFdl IGNvdWxkIGp1c3QgYWRkIHNvbWV0aGluZyB0byB0aGUKbW9kZSBzdHJ1Y3QgZm9yIGl0LCBvciBk byB3ZSBhbHJlYWR5IGhhdmUgc29tZSBvdGhlciBmbGFncyB0aGluZyB0aGF0J3MKbm90IGV4cG9z ZWQgdG8gdXNlcnNwYWNlPyBBbmQgSSBndWVzcyBkcml2ZXJzIHNob3VsZCBiZSBhYmxlIHRvIG9w dCBpbnRvCnN1cHBvcnRpbmcgdGhlc2UgNDoyOjAgbW9kZXMgaW4gc2ltaWxhciB3YXkgdGhleSBv cHQgaW50bwppbnRlcmxhY2VkL3N0ZXJlby93aGF0ZXZlci4KCj4gCj4gQmVzdCByZWdhcmRzLAo+ IEpvc2UgTWlndWVsIEFicmV1Cj4gCj4gPgo+ID4+ICsJZHJtX21vZGVfcHJvYmVkX2FkZChjb25u ZWN0b3IsIG5ld21vZGUpOwo+ID4+ICsKPiA+PiArCXJldHVybiAxOwo+ID4+ICt9Cj4gPj4gKwo+ ID4+ICtzdGF0aWMgaW50IGFkZF80MjBfdmRiX21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IsIGNvbnN0IHU4ICpzdmRzLAo+ID4+ICsJCXU4IHN2ZHNfbGVuKQo+ID4+ICt7Cj4g Pj4gKwlpbnQgbW9kZXMgPSAwLCBpOwo+ID4+ICsKPiA+PiArCWZvciAoaSA9IDA7IGkgPCBzdmRz X2xlbjsgaSsrKQo+ID4+ICsJCW1vZGVzICs9IGFkZF80MjBfbW9kZShjb25uZWN0b3IsIHN2ZHNb aV0pOwo+ID4+ICsKPiA+PiArCXJldHVybiBtb2RlczsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3Rh dGljIGludCBhZGRfNDIwX3ZjYl9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y LCBjb25zdCB1OCAqc3ZkcywKPiA+PiArCQl1OCBzdmRzX2xlbiwgY29uc3QgdTggKnZpZGVvX2Ri LCB1OCB2aWRlb19sZW4pCj4gPj4gK3sKPiA+PiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpu ZXdtb2RlID0gTlVMTDsKPiA+PiArCWludCBtb2RlcyA9IDAsIGksIGo7Cj4gPj4gKwo+ID4+ICsJ Zm9yIChpID0gMDsgaSA8IHN2ZHNfbGVuOyBpKyspIHsKPiA+PiArCQl1OCBtYXNrID0gc3Zkc1tp XTsKPiA+PiArCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7Cj4gPj4gKwkJCWlmIChtYXNrICYg KDEgPDwgaikpIHsKPiA+PiArCQkJCW5ld21vZGUgPSBkcm1fZGlzcGxheV9tb2RlX2Zyb21fdmlj X2luZGV4KAo+ID4+ICsJCQkJCQljb25uZWN0b3IsIHZpZGVvX2RiLCB2aWRlb19sZW4sCj4gPj4g KwkJCQkJCWkgKiA4ICsgaik7Cj4gPj4gKwkJCQlpZiAobmV3bW9kZSkgewo+ID4+ICsJCQkJCW5l d21vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfNDIwOwo+ID4+ICsJCQkJCWRybV9tb2RlX3By b2JlZF9hZGQoY29ubmVjdG9yLCBuZXdtb2RlKTsKPiA+PiArCQkJCQltb2RlcysrOwo+ID4+ICsJ CQkJfQo+ID4+ICsJCQl9Cj4gPj4gKwkJfQo+ID4+ICsJfQo+ID4+ICsKPiA+PiArCXJldHVybiBt b2RlczsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIGludCBhZGRfNDIwX3ZjYl9tb2Rlc19h bGwoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+PiArCQljb25zdCB1OCAqdmlk ZW9fZGIsIHU4IHZpZGVvX2xlbikKPiA+PiArewo+ID4+ICsJc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm5ld21vZGUgPSBOVUxMOwo+ID4+ICsJaW50IG1vZGVzID0gMCwgaTsKPiA+PiArCj4gPj4g Kwlmb3IgKGkgPSAwOyBpIDwgdmlkZW9fbGVuOyBpKyspIHsKPiA+PiArCQluZXdtb2RlID0gZHJt X2Rpc3BsYXlfbW9kZV9mcm9tX3ZpY19pbmRleChjb25uZWN0b3IsIHZpZGVvX2RiLAo+ID4+ICsJ CQkJdmlkZW9fbGVuLCBpKTsKPiA+PiArCQlpZiAobmV3bW9kZSkgewo+ID4+ICsJCQluZXdtb2Rl LT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHXzQyMDsKPiA+PiArCQkJZHJtX21vZGVfcHJvYmVkX2Fk ZChjb25uZWN0b3IsIG5ld21vZGUpOwo+ID4+ICsJCQltb2RlcysrOwo+ID4+ICsJCX0KPiA+PiAr CX0KPiA+PiArCj4gPj4gKwlyZXR1cm4gbW9kZXM7Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRp YyBpbnQgZG9faGRtaV80MjBfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwg Y29uc3QgdTggKnZkYiwKPiA+PiArCQl1OCB2ZGJfbGVuLCBjb25zdCB1OCAqdmNiLCB1OCB2Y2Jf bGVuLCBjb25zdCB1OCAqdmlkZW9fZGIsCj4gPj4gKwkJdTggdmlkZW9fbGVuKQo+ID4+ICt7Cj4g Pj4gKwlpbnQgbW9kZXMgPSAwOwo+ID4+ICsKPiA+PiArCWlmICh2ZGIgJiYgKHZkYl9sZW4gPiAx KSkgLyogQWRkIDQ6MjowIG1vZGVzIHByZXNlbnQgaW4gRURJRCAqLwo+ID4+ICsJCW1vZGVzICs9 IGFkZF80MjBfdmRiX21vZGVzKGNvbm5lY3RvciwgJnZkYlsyXSwgdmRiX2xlbiAtIDEpOwo+ID4+ ICsKPiA+PiArCWlmICh2Y2IgJiYgKHZjYl9sZW4gPiAxKSkgLyogUGFyc2UgYml0IG1hc2sgb2Yg c3VwcG9ydGVkIG1vZGVzICovCj4gPj4gKwkJbW9kZXMgKz0gYWRkXzQyMF92Y2JfbW9kZXMoY29u bmVjdG9yLCAmdmNiWzJdLCB2Y2JfbGVuIC0gMSwKPiA+PiArCQkJCXZpZGVvX2RiLCB2aWRlb19s ZW4pOwo+ID4+ICsJZWxzZSBpZiAodmNiKSAvKiBBbGwgbW9kZXMgc3VwcG9ydCA0OjI6MCBtb2Rl ICovCj4gPj4gKwkJbW9kZXMgKz0gYWRkXzQyMF92Y2JfbW9kZXNfYWxsKGNvbm5lY3Rvciwgdmlk ZW9fZGIsIHZpZGVvX2xlbik7Cj4gPj4gKwo+ID4+ICsJRFJNX0RFQlVHKCJhZGRlZCAlZCA0OjI6 MCBtb2Rlc1xuIiwgbW9kZXMpOwo+ID4+ICsJcmV0dXJuIG1vZGVzOwo+ID4+ICt9Cj4gPj4gKwo+ ID4+ICAvKgo+ID4+ICAgKiBkb19oZG1pX3ZzZGJfbW9kZXMgLSBQYXJzZSB0aGUgSERNSSBWZW5k b3IgU3BlY2lmaWMgZGF0YSBibG9jawo+ID4+ICAgKiBAY29ubmVjdG9yOiBjb25uZWN0b3IgY29y cmVzcG9uZGluZyB0byB0aGUgSERNSSBzaW5rCj4gPj4gQEAgLTMyMDYsNiArMzMwMCwxMiBAQCBz dGF0aWMgaW50IGFkZF8zZF9zdHJ1Y3RfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwgdTE2IHN0cnVjdHVyZSwKPiA+PiAgfQo+ID4+ICAKPiA+PiAgc3RhdGljIGludAo+ID4+ ICtjZWFfZGJfZXh0ZW5kZWRfdGFnKGNvbnN0IHU4ICpkYikKPiA+PiArewo+ID4+ICsJcmV0dXJu IGRiWzFdOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgaW50Cj4gPj4gIGNlYV9yZXZpc2lv bihjb25zdCB1OCAqY2VhKQo+ID4+ICB7Cj4gPj4gIAlyZXR1cm4gY2VhWzFdOwo+ID4+IEBAIC0z MjM5LDYgKzMzMzksMjggQEAgc3RhdGljIGJvb2wgY2VhX2RiX2lzX2hkbWlfdnNkYihjb25zdCB1 OCAqZGIpCj4gPj4gIAlyZXR1cm4gaGRtaV9pZCA9PSBIRE1JX0lFRUVfT1VJOwo+ID4+ICB9Cj4g Pj4gIAo+ID4+ICtzdGF0aWMgYm9vbCBjZWFfZGJfaXNfaGRtaV92ZGI0MjAoY29uc3QgdTggKmRi KQo+ID4+ICt7Cj4gPj4gKwlpZiAoY2VhX2RiX3RhZyhkYikgIT0gVklERU9fQ0FQQUJJTElUWV9C TE9DSykKPiA+PiArCQlyZXR1cm4gZmFsc2U7Cj4gPj4gKwo+ID4+ICsJaWYgKGNlYV9kYl9leHRl bmRlZF90YWcoZGIpICE9IFZJREVPX0RBVEFfQkxPQ0tfNDIwKQo+ID4+ICsJCXJldHVybiBmYWxz ZTsKPiA+PiArCj4gPj4gKwlyZXR1cm4gdHJ1ZTsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGlj IGJvb2wgY2VhX2RiX2lzX2hkbWlfdmNiNDIwKGNvbnN0IHU4ICpkYikKPiA+PiArewo+ID4+ICsJ aWYgKGNlYV9kYl90YWcoZGIpICE9IFZJREVPX0NBUEFCSUxJVFlfQkxPQ0spCj4gPj4gKwkJcmV0 dXJuIGZhbHNlOwo+ID4+ICsKPiA+PiArCWlmIChjZWFfZGJfZXh0ZW5kZWRfdGFnKGRiKSAhPSBW SURFT19DQVBfQkxPQ0tfNDIwKQo+ID4+ICsJCXJldHVybiBmYWxzZTsKPiA+PiArCj4gPj4gKwly ZXR1cm4gdHJ1ZTsKPiA+PiArfQo+ID4+ICsKPiA+PiAgI2RlZmluZSBmb3JfZWFjaF9jZWFfZGIo Y2VhLCBpLCBzdGFydCwgZW5kKSBcCj4gPj4gIAlmb3IgKChpKSA9IChzdGFydCk7IChpKSA8IChl bmQpICYmIChpKSArIGNlYV9kYl9wYXlsb2FkX2xlbigmKGNlYSlbKGkpXSkgPCAoZW5kKTsgKGkp ICs9IGNlYV9kYl9wYXlsb2FkX2xlbigmKGNlYSlbKGkpXSkgKyAxKQo+ID4+ICAKPiA+PiBAQCAt MzI0Niw4ICszMzY4LDkgQEAgc3RhdGljIGJvb2wgY2VhX2RiX2lzX2hkbWlfdnNkYihjb25zdCB1 OCAqZGIpCj4gPj4gIGFkZF9jZWFfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciwgc3RydWN0IGVkaWQgKmVkaWQpCj4gPj4gIHsKPiA+PiAgCWNvbnN0IHU4ICpjZWEgPSBkcm1f ZmluZF9jZWFfZXh0ZW5zaW9uKGVkaWQpOwo+ID4+IC0JY29uc3QgdTggKmRiLCAqaGRtaSA9IE5V TEwsICp2aWRlbyA9IE5VTEw7Cj4gPj4gLQl1OCBkYmwsIGhkbWlfbGVuLCB2aWRlb19sZW4gPSAw Owo+ID4+ICsJY29uc3QgdTggKmRiLCAqaGRtaSA9IE5VTEwsICp2aWRlbyA9IE5VTEwsICp2ZGI0 MjAgPSBOVUxMLAo+ID4+ICsJICAgICAgKnZjYjQyMCA9IE5VTEw7Cj4gPj4gKwl1OCBkYmwsIGhk bWlfbGVuLCB2aWRlb19sZW4gPSAwLCB2ZGI0MjBfbGVuID0gMCwgdmNiNDIwX2xlbiA9IDA7Cj4g Pj4gIAlpbnQgbW9kZXMgPSAwOwo+ID4+ICAKPiA+PiAgCWlmIChjZWEgJiYgY2VhX3JldmlzaW9u KGNlYSkgPj0gMykgewo+ID4+IEBAIC0zMjY5LDYgKzMzOTIsMTQgQEAgc3RhdGljIGJvb2wgY2Vh X2RiX2lzX2hkbWlfdnNkYihjb25zdCB1OCAqZGIpCj4gPj4gIAkJCQloZG1pID0gZGI7Cj4gPj4g IAkJCQloZG1pX2xlbiA9IGRibDsKPiA+PiAgCQkJfQo+ID4+ICsJCQllbHNlIGlmIChjZWFfZGJf aXNfaGRtaV92ZGI0MjAoZGIpKSB7Cj4gPj4gKwkJCQl2ZGI0MjAgPSBkYjsKPiA+PiArCQkJCXZk YjQyMF9sZW4gPSBkYmw7Cj4gPj4gKwkJCX0KPiA+PiArCQkJZWxzZSBpZiAoY2VhX2RiX2lzX2hk bWlfdmNiNDIwKGRiKSkgewo+ID4+ICsJCQkJdmNiNDIwID0gZGI7Cj4gPj4gKwkJCQl2Y2I0MjBf bGVuID0gZGJsOwo+ID4+ICsJCQl9Cj4gPj4gIAkJfQo+ID4+ICAJfQo+ID4+ICAKPiA+PiBAQCAt MzI4MCw2ICszNDExLDEwIEBAIHN0YXRpYyBib29sIGNlYV9kYl9pc19oZG1pX3ZzZGIoY29uc3Qg dTggKmRiKQo+ID4+ICAJCW1vZGVzICs9IGRvX2hkbWlfdnNkYl9tb2Rlcyhjb25uZWN0b3IsIGhk bWksIGhkbWlfbGVuLCB2aWRlbywKPiA+PiAgCQkJCQkgICAgdmlkZW9fbGVuKTsKPiA+PiAgCj4g Pj4gKwlpZiAodmRiNDIwIHx8IHZjYjQyMCkKPiA+PiArCQltb2RlcyArPSBkb19oZG1pXzQyMF9t b2Rlcyhjb25uZWN0b3IsIHZkYjQyMCwgdmRiNDIwX2xlbiwKPiA+PiArCQkJCXZjYjQyMCwgdmNi NDIwX2xlbiwgdmlkZW8sIHZpZGVvX2xlbik7Cj4gPj4gKwo+ID4+ICAJcmV0dXJuIG1vZGVzOwo+ ID4+ICB9Cj4gPj4gIAo+ID4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVz LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVzLmMKPiA+PiBpbmRleCBhYzZhMzUyLi41M2M2 NWY2IDEwMDY0NAo+ID4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZXMuYwo+ID4+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZXMuYwo+ID4+IEBAIC05NjcsNiArOTY3LDEwIEBA IGJvb2wgZHJtX21vZGVfZXF1YWxfbm9fY2xvY2tzKGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlMSwgY29uc3Qgc3RydWN0Cj4gPj4gIAkgICAgKG1vZGUyLT5mbGFncyAmIERSTV9N T0RFX0ZMQUdfM0RfTUFTSykpCj4gPj4gIAkJcmV0dXJuIGZhbHNlOwo+ID4+ICAKPiA+PiArCWlm ICgobW9kZTEtPmZsYWdzICYgRFJNX01PREVfRkxBR180MjBfTUFTSykgIT0KPiA+PiArCSAgICAo bW9kZTItPmZsYWdzICYgRFJNX01PREVfRkxBR180MjBfTUFTSykpCj4gPj4gKwkJcmV0dXJuIGZh bHNlOwo+ID4+ICsKPiA+PiAgCXJldHVybiBkcm1fbW9kZV9lcXVhbF9ub19jbG9ja3Nfbm9fc3Rl cmVvKG1vZGUxLCBtb2RlMik7Cj4gPj4gIH0KPiA+PiAgRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9l cXVhbF9ub19jbG9ja3MpOwo+ID4+IEBAIC05ODUsNiArOTg5LDkgQEAgYm9vbCBkcm1fbW9kZV9l cXVhbF9ub19jbG9ja3MoY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUxLCBjb25z dCBzdHJ1Y3QKPiA+PiAgYm9vbCBkcm1fbW9kZV9lcXVhbF9ub19jbG9ja3Nfbm9fc3RlcmVvKGNv bnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlMSwKPiA+PiAgCQkJCQljb25zdCBzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTIpCj4gPj4gIHsKPiA+PiArCXVuc2lnbmVkIGludCBm bGFnc19tYXNrID0KPiA+PiArCQl+KERSTV9NT0RFX0ZMQUdfM0RfTUFTSyB8IERSTV9NT0RFX0ZM QUdfNDIwX01BU0spOwo+ID4+ICsKPiA+PiAgCWlmIChtb2RlMS0+aGRpc3BsYXkgPT0gbW9kZTIt PmhkaXNwbGF5ICYmCj4gPj4gIAkgICAgbW9kZTEtPmhzeW5jX3N0YXJ0ID09IG1vZGUyLT5oc3lu Y19zdGFydCAmJgo+ID4+ICAJICAgIG1vZGUxLT5oc3luY19lbmQgPT0gbW9kZTItPmhzeW5jX2Vu ZCAmJgo+ID4+IEBAIC05OTUsOCArMTAwMiw3IEBAIGJvb2wgZHJtX21vZGVfZXF1YWxfbm9fY2xv Y2tzX25vX3N0ZXJlbyhjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTEsCj4gPj4g IAkgICAgbW9kZTEtPnZzeW5jX2VuZCA9PSBtb2RlMi0+dnN5bmNfZW5kICYmCj4gPj4gIAkgICAg bW9kZTEtPnZ0b3RhbCA9PSBtb2RlMi0+dnRvdGFsICYmCj4gPj4gIAkgICAgbW9kZTEtPnZzY2Fu ID09IG1vZGUyLT52c2NhbiAmJgo+ID4+IC0JICAgIChtb2RlMS0+ZmxhZ3MgJiB+RFJNX01PREVf RkxBR18zRF9NQVNLKSA9PQo+ID4+IC0JICAgICAobW9kZTItPmZsYWdzICYgfkRSTV9NT0RFX0ZM QUdfM0RfTUFTSykpCj4gPj4gKwkgICAgKG1vZGUxLT5mbGFncyAmIGZsYWdzX21hc2spID09ICht b2RlMi0+ZmxhZ3MgJiBmbGFnc19tYXNrKSkKPiA+PiAgCQlyZXR1cm4gdHJ1ZTsKPiA+PiAgCj4g Pj4gIAlyZXR1cm4gZmFsc2U7Cj4gPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vZHJt X21vZGUuaCBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX21vZGUuaAo+ID4+IGluZGV4IGNlN2VmZTIu LmRjOGUyODUgMTAwNjQ0Cj4gPj4gLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm1fbW9kZS5oCj4g Pj4gKysrIGIvaW5jbHVkZS91YXBpL2RybS9kcm1fbW9kZS5oCj4gPj4gQEAgLTg0LDYgKzg0LDEy IEBACj4gPj4gICNkZWZpbmUgIERSTV9NT0RFX0ZMQUdfM0RfTF9ERVBUSF9HRlhfR0ZYX0RFUFRI CSg2PDwxNCkKPiA+PiAgI2RlZmluZSAgRFJNX01PREVfRkxBR18zRF9UT1BfQU5EX0JPVFRPTQko Nzw8MTQpCj4gPj4gICNkZWZpbmUgIERSTV9NT0RFX0ZMQUdfM0RfU0lERV9CWV9TSURFX0hBTEYJ KDg8PDE0KQo+ID4+ICsvKgo+ID4+ICsgKiBIRE1JIDIuMAo+ID4+ICsgKi8KPiA+PiArI2RlZmlu ZSBEUk1fTU9ERV9GTEFHXzQyMF9NQVNLCQkJKDB4MDM8PDE5KQo+ID4+ICsjZGVmaW5lICBEUk1f TU9ERV9GTEFHXzQyMAkJCSgxPDwxOSkKPiA+PiArI2RlZmluZSAgRFJNX01PREVfRkxBR180MjBf T05MWQkJCSgxPDwyMCkKPiA+PiAgCj4gPj4gIC8qIFBpY3R1cmUgYXNwZWN0IHJhdGlvIG9wdGlv bnMgKi8KPiA+PiAgI2RlZmluZSBEUk1fTU9ERV9QSUNUVVJFX0FTUEVDVF9OT05FCQkwCj4gPj4g LS0gCj4gPj4gMS45LjEKPiA+Pgo+ID4+Cj4gPj4gX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KPiA+PiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4gPj4gZHJp LWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4+IGh0dHBzOi8vdXJsZGVmZW5zZS5wcm9v ZnBvaW50LmNvbS92Mi91cmw/dT1odHRwcy0zQV9fbGlzdHMuZnJlZWRlc2t0b3Aub3JnX21haWxt YW5fbGlzdGluZm9fZHJpLTJEZGV2ZWwmZD1EZ0lEQXcmYz1EUEw2X1hfNkprWEZ4N0FYV3FCMHRn JnI9V0hEc2M2a2NXQWw0aTk2Vm01aEpfMTlJSml1eHhfcF9Sem8yZy11SERLdyZtPXdyRUlUTUxf SWdySURTZWE3UTVGaV95Yno5X1RWZFFaNGFJcGdqc1J1dm8mcz16Yk1lTVh4UklXTGFTYnl5bGpo bE1PUzc0ek0xMDZ4SHhsZDIxeHU0a3hVJmU9IAoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbCBP VEMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRl dmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==