From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KwfrM-0006V9-DQ for qemu-devel@nongnu.org; Sun, 02 Nov 2008 11:31:28 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KwfrL-0006Ux-NH for qemu-devel@nongnu.org; Sun, 02 Nov 2008 11:31:28 -0500 Received: from [199.232.76.173] (port=49584 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KwfrL-0006Uu-Jz for qemu-devel@nongnu.org; Sun, 02 Nov 2008 11:31:27 -0500 Received: from rv-out-0708.google.com ([209.85.198.251]:9461) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KwfrK-0005VP-Sk for qemu-devel@nongnu.org; Sun, 02 Nov 2008 11:31:27 -0500 Received: by rv-out-0708.google.com with SMTP id f25so1919735rvb.22 for ; Sun, 02 Nov 2008 08:31:25 -0800 (PST) Message-ID: Date: Sun, 2 Nov 2008 17:31:25 +0100 From: "andrzej zaborowski" Subject: Re: [Qemu-devel] [PATCH] tc6393xb: non-accelerated FB support In-Reply-To: <1225631790-15735-7-git-send-email-dbaryshkov@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 Content-Disposition: inline References: <1225631790-15735-1-git-send-email-dbaryshkov@gmail.com> <1225631790-15735-2-git-send-email-dbaryshkov@gmail.com> <1225631790-15735-3-git-send-email-dbaryshkov@gmail.com> <1225631790-15735-4-git-send-email-dbaryshkov@gmail.com> <1225631790-15735-5-git-send-email-dbaryshkov@gmail.com> <1225631790-15735-6-git-send-email-dbaryshkov@gmail.com> <1225631790-15735-7-git-send-email-dbaryshkov@gmail.com> Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Dmitry Baryshkov MjAwOC8xMS8yIERtaXRyeSBCYXJ5c2hrb3YgPGRiYXJ5c2hrb3ZAZ21haWwuY29tPjoKPiBTaWdu ZWQtb2ZmLWJ5OiBEbWl0cnkgQmFyeXNoa292IDxkYmFyeXNoa292QGdtYWlsLmNvbT4KPiAtLS0K PiAgaHcvZGV2aWNlcy5oICAgICAgICAgICB8ICAgIDIgKy0KPiAgaHcvdGM2MzkzeGIuYyAgICAg ICAgICB8ICAxMzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KystCj4gIGh3L3RjNjM5M3hiX3RlbXBsYXRlLmggfCAgIDUyICsrKysrKysrKysrKysrKysrKysK PiAgaHcvdG9zYS5jICAgICAgICAgICAgICB8ICAgIDQgKy0KPiAgNCBmaWxlcyBjaGFuZ2VkLCAx ODcgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGh3 L3RjNjM5M3hiX3RlbXBsYXRlLmgKPgo+IGRpZmYgLS1naXQgYS9ody9kZXZpY2VzLmggYi9ody9k ZXZpY2VzLmgKPiBpbmRleCA0NWZlYWQ5Li5lOGZlZDY4IDEwMDY0NAo+IC0tLSBhL2h3L2Rldmlj ZXMuaAo+ICsrKyBiL2h3L2RldmljZXMuaAo+IEBAIC02Niw3ICs2Niw3IEBAIHZvaWQgdHVzYjYw MTBfcG93ZXIoc3RydWN0IHR1c2JfcyAqcywgaW50IG9uKTsKPgo+ICAvKiB0YzYzOTN4Yi5jICov Cj4gIHN0cnVjdCB0YzYzOTN4Yl9zOwo+IC1zdHJ1Y3QgdGM2MzkzeGJfcyAqdGM2MzkzeGJfaW5p dCh1aW50MzJfdCBiYXNlLCBxZW11X2lycSBpcnEpOwo+ICtzdHJ1Y3QgdGM2MzkzeGJfcyAqdGM2 MzkzeGJfaW5pdCh1aW50MzJfdCBiYXNlLCBxZW11X2lycSBpcnEsIERpc3BsYXlTdGF0ZSAqZHMp Owo+ICB2b2lkIHRjNjM5M3hiX2dwaW9fb3V0X3NldChzdHJ1Y3QgdGM2MzkzeGJfcyAqcywgaW50 IGxpbmUsCj4gICAgICAgICAgICAgICAgICAgICBxZW11X2lycSBoYW5kbGVyKTsKPiAgcWVtdV9p cnEgKnRjNjM5M3hiX2dwaW9faW5fZ2V0KHN0cnVjdCB0YzYzOTN4Yl9zICpzKTsKPiBkaWZmIC0t Z2l0IGEvaHcvdGM2MzkzeGIuYyBiL2h3L3RjNjM5M3hiLmMKPiBpbmRleCA5MTlhOTIyLi5lMzg5 N2ZmIDEwMDY0NAo+IC0tLSBhL2h3L3RjNjM5M3hiLmMKPiArKysgYi9ody90YzYzOTN4Yi5jCj4g QEAgLTExLDYgKzExLDggQEAKPiAgI2luY2x1ZGUgInB4YS5oIgo+ICAjaW5jbHVkZSAiZGV2aWNl cy5oIgo+ICAjaW5jbHVkZSAiZmxhc2guaCIKPiArI2luY2x1ZGUgImNvbnNvbGUuaCIKPiArI2lu Y2x1ZGUgInBpeGVsX29wcy5oIgo+Cj4gICNkZWZpbmUgICAgICAgIElSUV9UQzYzOTNfTkFORCAg ICAgICAgIDAKPiAgI2RlZmluZSAgICAgICAgSVJRX1RDNjM5M19NTUMgICAgICAgICAgMQo+IEBA IC0xMTksNiArMTIxLDExIEBAIHN0cnVjdCB0YzYzOTN4Yl9zIHsKPiAgICAgdWludDMyX3QgbmFu ZF9waHlzOwo+ICAgICBzdHJ1Y3QgbmFuZF9mbGFzaF9zICpmbGFzaDsKPiAgICAgc3RydWN0IGVj Y19zdGF0ZV9zIGVjYzsKPiArCj4gKyAgICBEaXNwbGF5U3RhdGUgKmRzOwo+ICsgICAgUUVNVUNv bnNvbGUgKmNvbnNvbGU7Cj4gKyAgICB1aW50OF90ICp2cmFtOwo+ICsgICAgdWludDMyX3Qgc2Ny X3dpZHRoLCBzY3JfaGVpZ2h0OyAvKiBpbiBwaXhlbHMgKi8KPiAgfTsKPgo+ICBxZW11X2lycSAq dGM2MzkzeGJfZ3Bpb19pbl9nZXQoc3RydWN0IHRjNjM5M3hiX3MgKnMpCj4gQEAgLTM5NSw2ICs0 MDIsMTExIEBAIHN0YXRpYyB2b2lkIHRjNjM5M3hiX25hbmRfd3JpdGViKHN0cnVjdCB0YzYzOTN4 Yl9zICpzLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwKPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAodWludDMyX3QpIGFkZHIsIHZhbHVlICYgMHhmZik7Cj4gIH0KPgo+ ICsjZGVmaW5lIEJJVFMgOAo+ICsjZGVmaW5lIFBJWEVMX1dJRFRIIDgKPiArI2luY2x1ZGUgInRj NjM5M3hiX3RlbXBsYXRlLmgiCj4gKyNkZWZpbmUgQklUUyAxNQo+ICsjZGVmaW5lIFBJWEVMX1dJ RFRIIDE2Cj4gKyNpbmNsdWRlICJ0YzYzOTN4Yl90ZW1wbGF0ZS5oIgo+ICsjZGVmaW5lIEJJVFMg MTYKPiArI2RlZmluZSBQSVhFTF9XSURUSCAxNgo+ICsjaW5jbHVkZSAidGM2MzkzeGJfdGVtcGxh dGUuaCIKPiArI2RlZmluZSBCSVRTIDI0Cj4gKyNkZWZpbmUgUElYRUxfV0lEVEggMzIKPiArI2lu Y2x1ZGUgInRjNjM5M3hiX3RlbXBsYXRlLmgiCj4gKyNkZWZpbmUgQklUUyAzMgo+ICsjZGVmaW5l IFBJWEVMX1dJRFRIIDMyCj4gKyNpbmNsdWRlICJ0YzYzOTN4Yl90ZW1wbGF0ZS5oIgo+ICsKPiAr c3RhdGljIHZvaWQgdGM2MzkzeGJfZHJhd19ncmFwaGljKHN0cnVjdCB0YzYzOTN4Yl9zICpzKQo+ ICt7Cj4gKyAgICBzd2l0Y2ggKHMtPmRzLT5kZXB0aCkgewo+ICsgICAgICAgIGNhc2UgODoKPiAr ICAgICAgICAgICAgdGM2MzkzeGJfZHJhd19ncmFwaGljOChzKTsKPiArICAgICAgICAgICAgYnJl YWs7Cj4gKyAgICAgICAgY2FzZSAxNToKPiArICAgICAgICAgICAgdGM2MzkzeGJfZHJhd19ncmFw aGljMTUocyk7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGNhc2UgMTY6Cj4gKyAg ICAgICAgICAgIHRjNjM5M3hiX2RyYXdfZ3JhcGhpYzE2KHMpOwo+ICsgICAgICAgICAgICBicmVh azsKPiArICAgICAgICBjYXNlIDI0Ogo+ICsgICAgICAgICAgICB0YzYzOTN4Yl9kcmF3X2dyYXBo aWMyNChzKTsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgY2FzZSAzMjoKPiArICAg ICAgICAgICAgdGM2MzkzeGJfZHJhd19ncmFwaGljMzIocyk7Cj4gKyAgICAgICAgICAgIGJyZWFr Owo+ICsgICAgICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgICAgIHByaW50ZigidGM2MzkzeGI6IHVu a25vd24gZGVwdGggJWRcbiIsIHMtPmRzLT5kZXB0aCk7Cj4gKyAgICAgICAgICAgIHJldHVybjsK PiArICAgIH0KPiArCj4gKyAgICBkcHlfdXBkYXRlKHMtPmRzLCAwLCAwLCBzLT5zY3Jfd2lkdGgs IHMtPnNjcl9oZWlnaHQpOwo+ICt9Cj4gKwo+ICsjaWYgMAo+ICtzdGF0aWMgdm9pZCB0YzYzOTN4 Yl9kcmF3X2JsYW5rKHN0cnVjdCB0YzYzOTN4Yl9zICpzLCBpbnQgZnVsbF91cGRhdGUpCj4gK3sK PiArICAgIGludCBpLCB3Owo+ICsgICAgdWludDhfdCAqZDsKPiArCj4gKyAgICBpZiAoIWZ1bGxf dXBkYXRlKQo+ICsgICAgICAgIHJldHVybjsKPiArCj4gKyAgICB3ID0gcy0+c2NyX3dpZHRoICog KChzLT5kcy0+ZGVwdGggKyA3KSA+PiAzKTsKPiArICAgIGQgPSBzLT5kcy0+ZGF0YTsKPiArICAg IGZvcihpID0gMDsgaSA8IHMtPnNjcl9oZWlnaHQ7IGkrKykgewo+ICsgICAgICAgIG1lbXNldChk LCAwLCB3KTsKPiArICAgICAgICBkICs9IHMtPmRzLT5saW5lc2l6ZTsKPiArICAgIH0KPiArCj4g KyAgICBkcHlfdXBkYXRlKHMtPmRzLCAwLCAwLCBzLT5zY3Jfd2lkdGgsIHMtPnNjcl9oZWlnaHQp Owo+ICt9Cj4gKyNlbmRpZgoKVGhpcyBhc3N1bWVzIGluIDI0Yml0IG1vZGUgYSBwaXhlbCBvY2N1 cGllcyBvbmx5IDMgYnl0ZXMgKHdoaWNoIGlpcmMKaXMgY29ycmVjdCkgYW5kIGFib3ZlIFBJWEVM X1dJRFRIIGZvciAyNCBiaXRzIGlzIHNldCB0byAzMi4KCj4gKwo+ICtzdGF0aWMgdm9pZCB0YzYz OTN4Yl91cGRhdGVfZGlzcGxheSh2b2lkICpvcGFxdWUpCj4gK3sKPiArICAgIHN0cnVjdCB0YzYz OTN4Yl9zICpzID0gb3BhcXVlOwo+ICsjaWYgMAo+ICsgICAgaW50IGZ1bGxfdXBkYXRlLCBncmFw aGljX21vZGU7Cj4gKyNlbmRpZgo+ICsKPiArICAgIGlmIChzLT5zY3Jfd2lkdGggPT0gMCB8fCBz LT5zY3JfaGVpZ2h0ID09IDApCj4gKyAgICAgICAgcmV0dXJuOwo+ICsKPiArI2lmIDAKPiArICAg IGlmIChzLT5jdGxhICYgQ1RMQV9GT1JDRV9CTEFOSykKPiArICAgICAgICBncmFwaGljX21vZGUg PSBHTU9ERV9CTEFOSzsKPiArICAgIGVsc2UKPiArICAgICAgICBncmFwaGljX21vZGUgPSBHTU9E RV9HUkFQSDsKPiArICAgIGZ1bGxfdXBkYXRlID0gMDsKPiArICAgIGlmIChncmFwaGljX21vZGUg IT0gcy0+Z3JhcGhpY19tb2RlKSB7Cj4gKyAgICAgICAgcy0+Z3JhcGhpY19tb2RlID0gZ3JhcGhp Y19tb2RlOwo+ICsgICAgICAgIGZ1bGxfdXBkYXRlID0gMTsKPiArICAgIH0KPiArI2VuZGlmCj4g KyAgICBpZiAocy0+c2NyX3dpZHRoICE9IHMtPmRzLT53aWR0aCB8fCBzLT5zY3JfaGVpZ2h0ICE9 IHMtPmRzLT5oZWlnaHQpIHsKPiArICAgICAgICBxZW11X2NvbnNvbGVfcmVzaXplKHMtPmNvbnNv bGUsIHMtPnNjcl93aWR0aCwgcy0+c2NyX2hlaWdodCk7Cj4gKyNpZiAwCj4gKyAgICAgICAgZnVs bF91cGRhdGUgPSAxOwo+ICsjZW5kaWYKPiArICAgIH0KPiArI2lmIDAKPiArICAgIHN3aXRjaChn cmFwaGljX21vZGUpIHsKPiArICAgICAgICBjYXNlIEdNT0RFX0dSQVBIOgo+ICsgICAgICAgICAg ICB0YzYzOTN4Yl9kcmF3X2dyYXBoaWMocywgZnVsbF91cGRhdGUpOwo+ICsgICAgICAgICAgICBi cmVhazsKPiArICAgICAgICBjYXNlIEdNT0RFX0JMQU5LOgo+ICsgICAgICAgIGRlZmF1bHQ6Cj4g KyAgICAgICAgICAgIHRjNjM5M3hiX2RyYXdfYmxhbmsocywgZnVsbF91cGRhdGUpOwo+ICsgICAg ICAgICAgICBicmVhazsKPiArICAgIH0KPiArI2Vsc2UKPiArICAgICAgICAgICAgdGM2MzkzeGJf ZHJhd19ncmFwaGljKHMpOwo+ICsjZW5kaWYKPiArfQoKV2h5J3MgYmxhbmsgbW9kZSBkaXNhYmxl ZD8KCj4gKwo+ICsKPiAgc3RhdGljIHVpbnQzMl90IHRjNjM5M3hiX3JlYWRiKHZvaWQgKm9wYXF1 ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIpIHsKPiAgICAgc3RydWN0IHRjNjM5M3hiX3MgKnMg PSBvcGFxdWU7Cj4gICAgIGFkZHIgLT0gcy0+dGFyZ2V0X2Jhc2U7Cj4gQEAgLTQwNCw2ICs1MTYs OCBAQCBzdGF0aWMgdWludDMyX3QgdGM2MzkzeGJfcmVhZGIodm9pZCAqb3BhcXVlLCB0YXJnZXRf cGh5c19hZGRyX3QgYWRkcikgewo+ICAgICAgICAgICAgIHJldHVybiB0YzYzOTN4Yl9zY3JfcmVh ZGIocywgYWRkciAmIDB4ZmYpOwo+ICAgICAgICAgY2FzZSAxOgo+ICAgICAgICAgICAgIHJldHVy biB0YzYzOTN4Yl9uYW5kX2NmZ19yZWFkYihzLCBhZGRyICYgMHhmZik7Cj4gKyAgICAgICAgY2Fz ZSAweDEwMDAgLi4uIDB4MWZmZjoKPiArICAgICAgICAgICAgcmV0dXJuIHMtPnZyYW1bYWRkciAt IDB4MTAwMDAwXTsKPiAgICAgfTsKPgo+ICAgICBpZiAoKGFkZHIgJn4weGZmKSA9PSBzLT5uYW5k X3BoeXMgJiYgcy0+bmFuZF9lbmFibGUpIHsKPiBAQCAtNDI4LDYgKzU0Miw5IEBAIHN0YXRpYyB2 b2lkIHRjNjM5M3hiX3dyaXRlYih2b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBhZGRy LCB1aW50MzJfdCB2YWx1Cj4gICAgICAgICBjYXNlIDE6Cj4gICAgICAgICAgICAgdGM2MzkzeGJf bmFuZF9jZmdfd3JpdGViKHMsIGFkZHIgJiAweGZmLCB2YWx1ZSk7Cj4gICAgICAgICAgICAgcmV0 dXJuOwo+ICsgICAgICAgIGNhc2UgMHgxMDAwIC4uLiAweDFmZmY6Cj4gKyAgICAgICAgICAgIHMt PnZyYW1bYWRkciAtIDB4MTAwMDAwXSA9IHZhbHVlJjB4ZmY7Cj4gKyAgICAgICAgICAgIHJldHVy bjsKPiAgICAgfTsKCklJUkMgdGhlIHBhZ2Ugc2l6ZSBpcyAweDQwMCBvbiBxZW11LXN5c3RlbS1h cm0gc28geW91IGNvdWxkIHJlZ2lzdGVyCnRoaXMgcmVnaW9uIGFzIFJBTSwgdGhpcyBzb3VsZCBn aXZlIGEgc3BlZWQtdXAuICBUaGUgaW5kZW50YXRpb24gaXMKc3RyYW5nZS4KCj4KPiAgICAgaWYg KChhZGRyICZ+MHhmZikgPT0gcy0+bmFuZF9waHlzICYmIHMtPm5hbmRfZW5hYmxlKQo+IEBAIC00 NjUsNyArNTgyLDcgQEAgc3RhdGljIHZvaWQgdGM2MzkzeGJfd3JpdGVsKHZvaWQgKm9wYXF1ZSwg dGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsIHVpbnQzMl90IHZhbHUKPiAgICAgdGM2MzkzeGJfd3Jp dGViKG9wYXF1ZSwgYWRkciArIDMsIHZhbHVlID4+IDI0KTsKPiAgfQo+Cj4gLXN0cnVjdCB0YzYz OTN4Yl9zICp0YzYzOTN4Yl9pbml0KHVpbnQzMl90IGJhc2UsIHFlbXVfaXJxIGlycSkKPiArc3Ry dWN0IHRjNjM5M3hiX3MgKnRjNjM5M3hiX2luaXQodWludDMyX3QgYmFzZSwgcWVtdV9pcnEgaXJx LCBEaXNwbGF5U3RhdGUgKmRzKQo+ICB7Cj4gICAgIGludCBpb21lbXR5cGU7Cj4gICAgIHN0cnVj dCB0YzYzOTN4Yl9zICpzOwo+IEBAIC00OTMsNiArNjEwLDE5IEBAIHN0cnVjdCB0YzYzOTN4Yl9z ICp0YzYzOTN4Yl9pbml0KHVpbnQzMl90IGJhc2UsIHFlbXVfaXJxIGlycSkKPiAgICAgICAgICAg ICAgICAgICAgIHRjNjM5M3hiX3dyaXRlZm4sIHMpOwo+ICAgICBjcHVfcmVnaXN0ZXJfcGh5c2lj YWxfbWVtb3J5KHMtPnRhcmdldF9iYXNlLCAweDIwMDAwMCwgaW9tZW10eXBlKTsKPgo+ICsgICAg aWYgKGRzKSB7Cj4gKyAgICAgICAgcy0+ZHMgPSBkczsKPiArICAgICAgICBzLT52cmFtID0gcWVt dV9tYWxsb2N6KDB4MTAwMDAwKTsKPiArICAgICAgICBzLT5zY3Jfd2lkdGggPSA0ODA7Cj4gKyAg ICAgICAgcy0+c2NyX2hlaWdodCA9IDY0MDsKPiArICAgICAgICBzLT5jb25zb2xlID0gZ3JhcGhp Y19jb25zb2xlX2luaXQoZHMsCj4gKyAgICAgICAgICAgICAgICB0YzYzOTN4Yl91cGRhdGVfZGlz cGxheSwKPiArICAgICAgICAgICAgICAgIE5VTEwsIC8qIGludmFsaWRhdGUgKi8KPiArICAgICAg ICAgICAgICAgIE5VTEwsIC8qIHNjcmVlbl9kdW1wICovCj4gKyAgICAgICAgICAgICAgICBOVUxM LCAvKiB0ZXh0X3VwZGF0ZSAqLwo+ICsgICAgICAgICAgICAgICAgcyk7Cj4gKyAgICB9Cj4gKwo+ ICAgICByZXR1cm4gczsKPiAgfQo+ICAvKiB2aW06c2V0IHNoaWZ0d2lkdGg9NCB0cz00IGV0OiAq Lwo+IGRpZmYgLS1naXQgYS9ody90YzYzOTN4Yl90ZW1wbGF0ZS5oIGIvaHcvdGM2MzkzeGJfdGVt cGxhdGUuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMWUwZGNhYwo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9ody90YzYzOTN4Yl90ZW1wbGF0ZS5oCj4gQEAgLTAsMCAr MSw1MiBAQAo+ICsvKgo+ICsgKiBUb3NoaWJhIFRDNjM5M1hCIEkvTyBDb250cm9sbGVyLgo+ICsg KiBGb3VuZCBpbiBTaGFycCBaYXVydXMgU0wtNjAwMCAodG9zYSkgb3Igc29tZQo+ICsgKiBUb3No aWJhIGUtU2VyaWVzIFBEQXMuCj4gKyAqCj4gKyAqIEZCIHN1cHBvcnQgY29kZS4gQmFzZWQgb24g RzM2NCBmYiBlbXVsYXRvcgo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSGVydsOpIFBv dXNzaW5lYXUKPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwo+ICsgKiBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgo+ICsgKiB0 aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoK PiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKPiArICog YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJv c3RvbiwKPiArICogTUEgMDIxMTEtMTMwNyBVU0EKPiArICovCj4gKwo+ICtzdGF0aWMgdm9pZCBn bHVlKHRjNjM5M3hiX2RyYXdfZ3JhcGhpYywgQklUUykoc3RydWN0IHRjNjM5M3hiX3MgKnMpCj4g K3sKPiArICAgIGludCBpLCBqOwo+ICsgICAgaW50IHdfZGlzcGxheTsKPiArICAgIHVpbnQxNl90 ICpkYXRhX2J1ZmZlcjsKPiArICAgIHVpbnQ4X3QgKmRhdGFfZGlzcGxheSwgKmRkOwo+ICsKPiAr ICAgIGRhdGFfYnVmZmVyID0gKHVpbnQxNl90KilzLT52cmFtOwo+ICsgICAgd19kaXNwbGF5ID0g cy0+c2NyX3dpZHRoICogUElYRUxfV0lEVEggLyA4Owo+ICsgICAgZGF0YV9kaXNwbGF5ID0gcy0+ ZHMtPmRhdGE7Cj4gKyAgICBmb3IoaSA9IDA7IGkgPCBzLT5zY3JfaGVpZ2h0OyBpKyspIHsKPiAr ICAgICAgICBkZCA9IGRhdGFfZGlzcGxheTsKPiArICAgICAgICBmb3IgKGogPSAwOyBqIDwgcy0+ c2NyX3dpZHRoOyBqKyssIGRkICs9IFBJWEVMX1dJRFRIIC8gOCwgZGF0YV9idWZmZXIrKykgewo+ ICsgICAgICAgICAgICB1aW50MTZfdCBjb2xvciA9ICpkYXRhX2J1ZmZlcjsKPiArICAgICAgICAg ICAgKigoZ2x1ZShnbHVlKHVpbnQsIFBJWEVMX1dJRFRIKSwgX3QpICopZGQpID0gZ2x1ZShyZ2Jf dG9fcGl4ZWwsIEJJVFMpKAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNvbG9yICYg MHhmODAwKSAqIDB4MTA4KSA+PiAxMSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgKChj b2xvciAmIDB4N2UwKSAqIDB4NDEpID4+IDksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICgoY29sb3IgJiAweDFmKSAqIDB4MjEpID4+IDIKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKClRoaXMgYXNzdW1lcyBwb3dlciBvZiB0d28gUElYRUxfV0lEVEggKHdoaWNoIGlzIHBv d2VyLW9mLXR3byBidXQKcG9zc2libHkgd3JvbmdseSkuCkZvciB0aGUgUkdCNTY1IGhvc3QgY2Fz ZSB5b3UgY2FuIHBvc3NpYmx5IHVzZSBtZW1jcHkuCgpDaGVlcnMK