From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH igt] lib/igt_draw: add support for RGB565 and XRGB2101010 Date: Fri, 14 Aug 2015 11:22:32 +0200 Message-ID: <20150814092232.GV17734@phenom.ffwll.local> References: <1439415235-22781-1-git-send-email-paulo.r.zanoni@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f177.google.com (mail-wi0-f177.google.com [209.85.212.177]) by gabe.freedesktop.org (Postfix) with ESMTPS id 33C256EEE7 for ; Fri, 14 Aug 2015 02:22:36 -0700 (PDT) Received: by wibhh20 with SMTP id hh20so14065104wib.0 for ; Fri, 14 Aug 2015 02:22:34 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1439415235-22781-1-git-send-email-paulo.r.zanoni@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Paulo Zanoni Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBBdWcgMTIsIDIwMTUgYXQgMDY6MzM6NTVQTSAtMDMwMCwgUGF1bG8gWmFub25pIHdy b3RlOgo+IFdlIG5lZWQgdG8gdGVzdCB0aG9zZSBwaXhlbCBmb3JtYXRzIG9uIHRoZSBGQkMgY29k ZSwgc28gbGV0J3MgbWFrZQo+IHN1cmUgdGhlIGRyYXdpbmcgbGlicmFyeSB3b3JrcyBvbiB0aGVt IGZpcnN0Lgo+IAo+IFNpZ25lZC1vZmYtYnk6IFBhdWxvIFphbm9uaSA8cGF1bG8uci56YW5vbmlA aW50ZWwuY29tPgoKZ3RrZG9jIHVwZGF0ZSBzZWVtcyB0byBiZSBtaXNzaW5nIGZvciB0aGUgaWd0 X2RyYXdfcmVjdCBjaGFuZ2UuIEV2ZW4gbW9yZQpzbyB0aGF0IHRoZXJlJ3MgYSBsaW5lIGluIHRo ZSBvdmVydmlldyBzZWN0aW9uIHN0YXRpbmcgdGhhdCB0aGlzIGxpYnJhcnkKYXNzdW1lcyBldmVy eXRoaW5nIGlzIFhSR0I4ODg4IDstKQotRGFuaWVsCgo+IC0tLQo+ICBsaWIvaWd0X2RyYXcuYyAg ICAgICAgICAgICAgICAgICB8IDE2MiArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0t LS0tLS0KPiAgbGliL2lndF9kcmF3LmggICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KPiAgdGVz dHMva21zX2RyYXdfY3JjLmMgICAgICAgICAgICAgfCAxMTMgKysrKysrKysrKysrKysrKysrKysr LS0tLS0tCj4gIHRlc3RzL2ttc19mcm9udGJ1ZmZlcl90cmFja2luZy5jIHwgICAyICstCj4gIDQg ZmlsZXMgY2hhbmdlZCwgMjA2IGluc2VydGlvbnMoKyksIDczIGRlbGV0aW9ucygtKQo+IAo+IGRp ZmYgLS1naXQgYS9saWIvaWd0X2RyYXcuYyBiL2xpYi9pZ3RfZHJhdy5jCj4gaW5kZXggMjIxMGY3 Ny4uYWZiOTM3ZiAxMDA2NDQKPiAtLS0gYS9saWIvaWd0X2RyYXcuYwo+ICsrKyBiL2xpYi9pZ3Rf ZHJhdy5jCj4gQEAgLTU3LDYgKzU3LDcgQEAgc3RydWN0IGJ1Zl9kYXRhIHsKPiAgCXVpbnQzMl90 IGhhbmRsZTsKPiAgCXVpbnQzMl90IHNpemU7Cj4gIAl1aW50MzJfdCBzdHJpZGU7Cj4gKwlpbnQg YnBwOwo+ICB9Owo+ICAKPiAgc3RydWN0IHJlY3Qgewo+IEBAIC0xMzMsMjcgKzEzNCwyNyBAQCBz dGF0aWMgaW50IHN3aXp6bGVfYWRkcihpbnQgYWRkciwgaW50IHN3aXp6bGUpCj4gIAo+ICAvKiBJ dCdzIGFsbCBpbiAicGl4ZWwgY29vcmRpbmF0ZXMiLCBzbyBtYWtlIHN1cmUgeW91IG11bHRpcGx5 L2RpdmlkZSBieSB0aGUgYnBwCj4gICAqIGlmIHlvdSBuZWVkIHRvLiAqLwo+IC1zdGF0aWMgaW50 IGxpbmVhcl94X3lfdG9fdGlsZWRfcG9zKGludCB4LCBpbnQgeSwgdWludDMyX3Qgc3RyaWRlLCBp bnQgc3dpenpsZSkKPiArc3RhdGljIGludCBsaW5lYXJfeF95X3RvX3RpbGVkX3BvcyhpbnQgeCwg aW50IHksIHVpbnQzMl90IHN0cmlkZSwgaW50IHN3aXp6bGUsCj4gKwkJCQkgICBpbnQgYnBwKQo+ ICB7Cj4gIAlpbnQgeF90aWxlX3NpemUsIHlfdGlsZV9zaXplOwo+ICAJaW50IHhfdGlsZV9uLCB5 X3RpbGVfbiwgeF90aWxlX29mZiwgeV90aWxlX29mZjsKPiAgCWludCBsaW5lX3NpemUsIHRpbGVf c2l6ZTsKPiAgCWludCB0aWxlX24sIHRpbGVfb2ZmOwo+ICAJaW50IHRpbGVkX3BvcywgdGlsZXNf cGVyX2xpbmU7Cj4gLQlpbnQgYnBwOwo+ICsJaW50IHBpeGVsX3NpemUgPSBicHAgLyA4Owo+ICAK PiAgCWxpbmVfc2l6ZSA9IHN0cmlkZTsKPiAgCXhfdGlsZV9zaXplID0gNTEyOwo+ICAJeV90aWxl X3NpemUgPSA4Owo+ICAJdGlsZV9zaXplID0geF90aWxlX3NpemUgKiB5X3RpbGVfc2l6ZTsKPiAg CXRpbGVzX3Blcl9saW5lID0gbGluZV9zaXplIC8geF90aWxlX3NpemU7Cj4gLQlicHAgPSBzaXpl b2YodWludDMyX3QpOwo+ICAKPiAgCXlfdGlsZV9uID0geSAvIHlfdGlsZV9zaXplOwo+ICAJeV90 aWxlX29mZiA9IHkgJSB5X3RpbGVfc2l6ZTsKPiAgCj4gLQl4X3RpbGVfbiA9ICh4ICogYnBwKSAv IHhfdGlsZV9zaXplOwo+IC0JeF90aWxlX29mZiA9ICh4ICogYnBwKSAlIHhfdGlsZV9zaXplOwo+ ICsJeF90aWxlX24gPSAoeCAqIHBpeGVsX3NpemUpIC8geF90aWxlX3NpemU7Cj4gKwl4X3RpbGVf b2ZmID0gKHggKiBwaXhlbF9zaXplKSAlIHhfdGlsZV9zaXplOwo+ICAKPiAgCXRpbGVfbiA9IHlf dGlsZV9uICogdGlsZXNfcGVyX2xpbmUgKyB4X3RpbGVfbjsKPiAgCXRpbGVfb2ZmID0geV90aWxl X29mZiAqIHhfdGlsZV9zaXplICsgeF90aWxlX29mZjsKPiBAQCAtMTYxLDE5ICsxNjIsMTkgQEAg c3RhdGljIGludCBsaW5lYXJfeF95X3RvX3RpbGVkX3BvcyhpbnQgeCwgaW50IHksIHVpbnQzMl90 IHN0cmlkZSwgaW50IHN3aXp6bGUpCj4gIAo+ICAJdGlsZWRfcG9zID0gc3dpenpsZV9hZGRyKHRp bGVkX3Bvcywgc3dpenpsZSk7Cj4gIAo+IC0JcmV0dXJuIHRpbGVkX3BvcyAvIGJwcDsKPiArCXJl dHVybiB0aWxlZF9wb3MgLyBwaXhlbF9zaXplOwo+ICB9Cj4gIAo+ICAvKiBJdCdzIGFsbCBpbiAi cGl4ZWwgY29vcmRpbmF0ZXMiLCBzbyBtYWtlIHN1cmUgeW91IG11bHRpcGx5L2RpdmlkZSBieSB0 aGUgYnBwCj4gICAqIGlmIHlvdSBuZWVkIHRvLiAqLwo+ICBzdGF0aWMgdm9pZCB0aWxlZF9wb3Nf dG9feF95X2xpbmVhcihpbnQgdGlsZWRfcG9zLCB1aW50MzJfdCBzdHJpZGUsCj4gLQkJCQkgICAg aW50IHN3aXp6bGUsIGludCAqeCwgaW50ICp5KQo+ICsJCQkJICAgIGludCBzd2l6emxlLCBpbnQg YnBwLCBpbnQgKngsIGludCAqeSkKPiAgewo+ICAJaW50IHRpbGVfbiwgdGlsZV9vZmYsIHRpbGVz X3Blcl9saW5lLCBsaW5lX3NpemU7Cj4gIAlpbnQgeF90aWxlX29mZiwgeV90aWxlX29mZjsKPiAg CWludCB4X3RpbGVfbiwgeV90aWxlX247Cj4gIAlpbnQgeF90aWxlX3NpemUsIHlfdGlsZV9zaXpl LCB0aWxlX3NpemU7Cj4gLQlpbnQgYnBwOwo+ICsJaW50IHBpeGVsX3NpemUgPSBicHAgLyA4Owo+ ICAKPiAgCXRpbGVkX3BvcyA9IHN3aXp6bGVfYWRkcih0aWxlZF9wb3MsIHN3aXp6bGUpOwo+ICAK PiBAQCAtMTgyLDcgKzE4Myw2IEBAIHN0YXRpYyB2b2lkIHRpbGVkX3Bvc190b194X3lfbGluZWFy KGludCB0aWxlZF9wb3MsIHVpbnQzMl90IHN0cmlkZSwKPiAgCXlfdGlsZV9zaXplID0gODsKPiAg CXRpbGVfc2l6ZSA9IHhfdGlsZV9zaXplICogeV90aWxlX3NpemU7Cj4gIAl0aWxlc19wZXJfbGlu ZSA9IGxpbmVfc2l6ZSAvIHhfdGlsZV9zaXplOwo+IC0JYnBwID0gc2l6ZW9mKHVpbnQzMl90KTsK PiAgCj4gIAl0aWxlX24gPSB0aWxlZF9wb3MgLyB0aWxlX3NpemU7Cj4gIAl0aWxlX29mZiA9IHRp bGVkX3BvcyAlIHRpbGVfc2l6ZTsKPiBAQCAtMTkzLDMyICsxOTMsNDUgQEAgc3RhdGljIHZvaWQg dGlsZWRfcG9zX3RvX3hfeV9saW5lYXIoaW50IHRpbGVkX3BvcywgdWludDMyX3Qgc3RyaWRlLAo+ ICAJeF90aWxlX24gPSB0aWxlX24gJSB0aWxlc19wZXJfbGluZTsKPiAgCXlfdGlsZV9uID0gdGls ZV9uIC8gdGlsZXNfcGVyX2xpbmU7Cj4gIAo+IC0JKnggPSAoeF90aWxlX24gKiB4X3RpbGVfc2l6 ZSArIHhfdGlsZV9vZmYpIC8gYnBwOwo+ICsJKnggPSAoeF90aWxlX24gKiB4X3RpbGVfc2l6ZSAr IHhfdGlsZV9vZmYpIC8gcGl4ZWxfc2l6ZTsKPiAgCSp5ID0geV90aWxlX24gKiB5X3RpbGVfc2l6 ZSArIHlfdGlsZV9vZmY7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGRyYXdfcmVjdF9wdHJfbGlu ZWFyKHVpbnQzMl90ICpwdHIsIHVpbnQzMl90IHN0cmlkZSwKPiAtCQkJCSAgc3RydWN0IHJlY3Qg KnJlY3QsIHVpbnQzMl90IGNvbG9yKQo+ICtzdGF0aWMgdm9pZCBzZXRfcGl4ZWwodm9pZCAqX3B0 ciwgaW50IGluZGV4LCB1aW50MzJfdCBjb2xvciwgaW50IGJwcCkKPiArewo+ICsJaWYgKGJwcCA9 PSAxNikgewo+ICsJCXVpbnQxNl90ICpwdHIgPSBfcHRyOwo+ICsJCXB0cltpbmRleF0gPSBjb2xv cjsKPiArCX0gZWxzZSBpZiAoYnBwID09IDMyKSB7Cj4gKwkJdWludDMyX3QgKnB0ciA9IF9wdHI7 Cj4gKwkJcHRyW2luZGV4XSA9IGNvbG9yOwo+ICsJfSBlbHNlIHsKPiArCQlpZ3RfYXNzZXJ0X2Yo ZmFsc2UsICJicHA6ICVkXG4iLCBicHApOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBk cmF3X3JlY3RfcHRyX2xpbmVhcih2b2lkICpwdHIsIHVpbnQzMl90IHN0cmlkZSwKPiArCQkJCSBz dHJ1Y3QgcmVjdCAqcmVjdCwgdWludDMyX3QgY29sb3IsIGludCBicHApCj4gIHsKPiAgCWludCB4 LCB5LCBsaW5lX2JlZ2luOwo+ICAKPiAgCWZvciAoeSA9IHJlY3QtPnk7IHkgPCByZWN0LT55ICsg cmVjdC0+aDsgeSsrKSB7Cj4gLQkJbGluZV9iZWdpbiA9IHkgKiBzdHJpZGUgLyBzaXplb2YodWlu dDMyX3QpOwo+ICsJCWxpbmVfYmVnaW4gPSB5ICogc3RyaWRlIC8gKGJwcCAvIDgpOwo+ICAJCWZv ciAoeCA9IHJlY3QtPng7IHggPCByZWN0LT54ICsgcmVjdC0+dzsgeCsrKQo+IC0JCQlwdHJbbGlu ZV9iZWdpbiArIHhdID0gY29sb3I7Cj4gKwkJCXNldF9waXhlbChwdHIsIGxpbmVfYmVnaW4gKyB4 LCBjb2xvciwgYnBwKTsKPiAgCX0KPiAtCj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGRyYXdfcmVj dF9wdHJfdGlsZWQodWludDMyX3QgKnB0ciwgdWludDMyX3Qgc3RyaWRlLCBpbnQgc3dpenpsZSwK PiAtCQkJCSBzdHJ1Y3QgcmVjdCAqcmVjdCwgdWludDMyX3QgY29sb3IpCj4gK3N0YXRpYyB2b2lk IGRyYXdfcmVjdF9wdHJfdGlsZWQodm9pZCAqcHRyLCB1aW50MzJfdCBzdHJpZGUsIGludCBzd2l6 emxlLAo+ICsJCQkJc3RydWN0IHJlY3QgKnJlY3QsIHVpbnQzMl90IGNvbG9yLCBpbnQgYnBwKQo+ ICB7Cj4gIAlpbnQgeCwgeSwgcG9zOwo+ICAKPiAgCWZvciAoeSA9IHJlY3QtPnk7IHkgPCByZWN0 LT55ICsgcmVjdC0+aDsgeSsrKSB7Cj4gIAkJZm9yICh4ID0gcmVjdC0+eDsgeCA8IHJlY3QtPngg KyByZWN0LT53OyB4KyspIHsKPiAtCQkJcG9zID0gbGluZWFyX3hfeV90b190aWxlZF9wb3MoeCwg eSwgc3RyaWRlLCBzd2l6emxlKTsKPiAtCQkJcHRyW3Bvc10gPSBjb2xvcjsKPiArCQkJcG9zID0g bGluZWFyX3hfeV90b190aWxlZF9wb3MoeCwgeSwgc3RyaWRlLCBzd2l6emxlLAo+ICsJCQkJCQkg ICAgICBicHApOwo+ICsJCQlzZXRfcGl4ZWwocHRyLCBwb3MsIGNvbG9yLCBicHApOwo+ICAJCX0K PiAgCX0KPiAgfQo+IEBAIC0yNDIsMTAgKzI1NSwxMSBAQCBzdGF0aWMgdm9pZCBkcmF3X3JlY3Rf bW1hcF9jcHUoaW50IGZkLCBzdHJ1Y3QgYnVmX2RhdGEgKmJ1Ziwgc3RydWN0IHJlY3QgKnJlY3Qs Cj4gIAo+ICAJc3dpdGNoICh0aWxpbmcpIHsKPiAgCWNhc2UgSTkxNV9USUxJTkdfTk9ORToKPiAt CQlkcmF3X3JlY3RfcHRyX2xpbmVhcihwdHIsIGJ1Zi0+c3RyaWRlLCByZWN0LCBjb2xvcik7Cj4g KwkJZHJhd19yZWN0X3B0cl9saW5lYXIocHRyLCBidWYtPnN0cmlkZSwgcmVjdCwgY29sb3IsIGJ1 Zi0+YnBwKTsKPiAgCQlicmVhazsKPiAgCWNhc2UgSTkxNV9USUxJTkdfWDoKPiAtCQlkcmF3X3Jl Y3RfcHRyX3RpbGVkKHB0ciwgYnVmLT5zdHJpZGUsIHN3aXp6bGUsIHJlY3QsIGNvbG9yKTsKPiAr CQlkcmF3X3JlY3RfcHRyX3RpbGVkKHB0ciwgYnVmLT5zdHJpZGUsIHN3aXp6bGUsIHJlY3QsIGNv bG9yLAo+ICsJCQkJICAgIGJ1Zi0+YnBwKTsKPiAgCQlicmVhazsKPiAgCWRlZmF1bHQ6Cj4gIAkJ aWd0X2Fzc2VydChmYWxzZSk7Cj4gQEAgLTI2OCw3ICsyODIsNyBAQCBzdGF0aWMgdm9pZCBkcmF3 X3JlY3RfbW1hcF9ndHQoaW50IGZkLCBzdHJ1Y3QgYnVmX2RhdGEgKmJ1Ziwgc3RydWN0IHJlY3Qg KnJlY3QsCj4gIAlwdHIgPSBnZW1fbW1hcF9fZ3R0KGZkLCBidWYtPmhhbmRsZSwgYnVmLT5zaXpl LCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKPiAgCWlndF9hc3NlcnQocHRyKTsKPiAgCj4gLQlk cmF3X3JlY3RfcHRyX2xpbmVhcihwdHIsIGJ1Zi0+c3RyaWRlLCByZWN0LCBjb2xvcik7Cj4gKwlk cmF3X3JlY3RfcHRyX2xpbmVhcihwdHIsIGJ1Zi0+c3RyaWRlLCByZWN0LCBjb2xvciwgYnVmLT5i cHApOwo+ICAKPiAgCWlndF9hc3NlcnQobXVubWFwKHB0ciwgYnVmLT5zaXplKSA9PSAwKTsKPiAg fQo+IEBAIC0yOTMsMTAgKzMwNywxMSBAQCBzdGF0aWMgdm9pZCBkcmF3X3JlY3RfbW1hcF93Yyhp bnQgZmQsIHN0cnVjdCBidWZfZGF0YSAqYnVmLCBzdHJ1Y3QgcmVjdCAqcmVjdCwKPiAgCj4gIAlz d2l0Y2ggKHRpbGluZykgewo+ICAJY2FzZSBJOTE1X1RJTElOR19OT05FOgo+IC0JCWRyYXdfcmVj dF9wdHJfbGluZWFyKHB0ciwgYnVmLT5zdHJpZGUsIHJlY3QsIGNvbG9yKTsKPiArCQlkcmF3X3Jl Y3RfcHRyX2xpbmVhcihwdHIsIGJ1Zi0+c3RyaWRlLCByZWN0LCBjb2xvciwgYnVmLT5icHApOwo+ ICAJCWJyZWFrOwo+ICAJY2FzZSBJOTE1X1RJTElOR19YOgo+IC0JCWRyYXdfcmVjdF9wdHJfdGls ZWQocHRyLCBidWYtPnN0cmlkZSwgc3dpenpsZSwgcmVjdCwgY29sb3IpOwo+ICsJCWRyYXdfcmVj dF9wdHJfdGlsZWQocHRyLCBidWYtPnN0cmlkZSwgc3dpenpsZSwgcmVjdCwgY29sb3IsCj4gKwkJ CQkgICAgYnVmLT5icHApOwo+ICAJCWJyZWFrOwo+ICAJZGVmYXVsdDoKPiAgCQlpZ3RfYXNzZXJ0 KGZhbHNlKTsKPiBAQCAtMzA5LDE3ICszMjQsMTYgQEAgc3RhdGljIHZvaWQgZHJhd19yZWN0X21t YXBfd2MoaW50IGZkLCBzdHJ1Y3QgYnVmX2RhdGEgKmJ1Ziwgc3RydWN0IHJlY3QgKnJlY3QsCj4g IHN0YXRpYyB2b2lkIGRyYXdfcmVjdF9wd3JpdGVfdW50aWxlZChpbnQgZmQsIHN0cnVjdCBidWZf ZGF0YSAqYnVmLAo+ICAJCQkJICAgICBzdHJ1Y3QgcmVjdCAqcmVjdCwgdWludDMyX3QgY29sb3Ip Cj4gIHsKPiAtCXVpbnQzMl90IHRtcFtyZWN0LT53XTsKPiAtCWludCBpLCB5LCBvZmZzZXQsIGJw cDsKPiAtCj4gLQlicHAgPSBzaXplb2YodWludDMyX3QpOwo+ICsJaW50IGksIHksIG9mZnNldDsK PiArCWludCBwaXhlbF9zaXplID0gYnVmLT5icHAgLyA4Owo+ICsJdWludDhfdCB0bXBbcmVjdC0+ dyAqIHBpeGVsX3NpemVdOwo+ICAKPiAgCWZvciAoaSA9IDA7IGkgPCByZWN0LT53OyBpKyspCj4g LQkJdG1wW2ldID0gY29sb3I7Cj4gKwkJc2V0X3BpeGVsKHRtcCwgaSwgY29sb3IsIGJ1Zi0+YnBw KTsKPiAgCj4gIAlmb3IgKHkgPSByZWN0LT55OyB5IDwgcmVjdC0+eSArIHJlY3QtPmg7IHkrKykg ewo+IC0JCW9mZnNldCA9ICh5ICogYnVmLT5zdHJpZGUpICsgKHJlY3QtPnggKiBicHApOwo+IC0J CWdlbV93cml0ZShmZCwgYnVmLT5oYW5kbGUsIG9mZnNldCwgdG1wLCByZWN0LT53ICogYnBwKTsK PiArCQlvZmZzZXQgPSAoeSAqIGJ1Zi0+c3RyaWRlKSArIChyZWN0LT54ICogcGl4ZWxfc2l6ZSk7 Cj4gKwkJZ2VtX3dyaXRlKGZkLCBidWYtPmhhbmRsZSwgb2Zmc2V0LCB0bXAsIHJlY3QtPncgKiBw aXhlbF9zaXplKTsKPiAgCX0KPiAgfQo+ICAKPiBAQCAtMzI4LDI1ICszNDIsMjcgQEAgc3RhdGlj IHZvaWQgZHJhd19yZWN0X3B3cml0ZV90aWxlZChpbnQgZmQsIHN0cnVjdCBidWZfZGF0YSAqYnVm LAo+ICAJCQkJICAgdWludDMyX3Qgc3dpenpsZSkKPiAgewo+ICAJaW50IGk7Cj4gLQlpbnQgdGls ZWRfcG9zLCBicHAsIHgsIHk7Cj4gLQl1aW50MzJfdCB0bXBbMTAyNF07Cj4gLQlpbnQgdG1wX3Vz ZWQgPSAwLCB0bXBfc2l6ZSA9IEFSUkFZX1NJWkUodG1wKTsKPiArCWludCB0aWxlZF9wb3MsIHgs IHksIHBpeGVsX3NpemU7Cj4gKwl1aW50OF90IHRtcFs0MDk2XTsKPiArCWludCB0bXBfdXNlZCA9 IDAsIHRtcF9zaXplOwo+ICAJYm9vbCBmbHVzaF90bXAgPSBmYWxzZTsKPiAgCWludCB0bXBfc3Rh cnRfcG9zID0gMDsKPiAgCj4gIAkvKiBXZSBkaWRuJ3QgaW1wbGVtZW50IHN1cG9ydCBmb3IgdGhl IG9sZGVyIHRpbGluZyBtZXRob2RzIHlldC4gKi8KPiAgCWlndF9yZXF1aXJlKGludGVsX2dlbihp bnRlbF9nZXRfZHJtX2RldmlkKGZkKSkgPj0gNSk7Cj4gIAo+IC0JYnBwID0gc2l6ZW9mKHVpbnQz Ml90KTsKPiArCXBpeGVsX3NpemUgPSBidWYtPmJwcCAvIDg7Cj4gKwl0bXBfc2l6ZSA9IHNpemVv Zih0bXApIC8gcGl4ZWxfc2l6ZTsKPiAgCj4gIAkvKiBJbnN0ZWFkIG9mIGRvaW5nIG9uZSBwd3Jp dGUgcGVyIHBpeGVsLCB3ZSB0cnkgdG8gZ3JvdXAgdGhlIG1heGltdW0KPiAgCSAqIGFtb3VudCBv ZiBjb25zZWN1dGl2ZSBwaXhlbHMgd2UgY2FuIGluIGEgc2luZ2xlIHB3cml0ZTogdGhhdCdzIHdo eSB3ZQo+ICAJICogdXNlIHRoZSAidG1wIiB2YXJpYWJsZXMuICovCj4gIAlmb3IgKGkgPSAwOyBp IDwgdG1wX3NpemU7IGkrKykKPiAtCQl0bXBbaV0gPSBjb2xvcjsKPiArCQlzZXRfcGl4ZWwodG1w LCBpLCBjb2xvciwgYnVmLT5icHApOwo+ICAKPiAtCWZvciAodGlsZWRfcG9zID0gMDsgdGlsZWRf cG9zIDwgYnVmLT5zaXplOyB0aWxlZF9wb3MgKz0gYnBwKSB7Cj4gLQkJdGlsZWRfcG9zX3RvX3hf eV9saW5lYXIodGlsZWRfcG9zLCBidWYtPnN0cmlkZSwgc3dpenpsZSwgJngsICZ5KTsKPiArCWZv ciAodGlsZWRfcG9zID0gMDsgdGlsZWRfcG9zIDwgYnVmLT5zaXplOyB0aWxlZF9wb3MgKz0gcGl4 ZWxfc2l6ZSkgewo+ICsJCXRpbGVkX3Bvc190b194X3lfbGluZWFyKHRpbGVkX3BvcywgYnVmLT5z dHJpZGUsIHN3aXp6bGUsCj4gKwkJCQkJYnVmLT5icHAsICZ4LCAmeSk7Cj4gIAo+ICAJCWlmICh4 ID49IHJlY3QtPnggJiYgeCA8IHJlY3QtPnggKyByZWN0LT53ICYmCj4gIAkJICAgIHkgPj0gcmVj dC0+eSAmJiB5IDwgcmVjdC0+eSArIHJlY3QtPmgpIHsKPiBAQCAtMzU5LDcgKzM3NSw3IEBAIHN0 YXRpYyB2b2lkIGRyYXdfcmVjdF9wd3JpdGVfdGlsZWQoaW50IGZkLCBzdHJ1Y3QgYnVmX2RhdGEg KmJ1ZiwKPiAgCj4gIAkJaWYgKHRtcF91c2VkID09IHRtcF9zaXplIHx8IChmbHVzaF90bXAgJiYg dG1wX3VzZWQgPiAwKSkgewo+ICAJCQlnZW1fd3JpdGUoZmQsIGJ1Zi0+aGFuZGxlLCB0bXBfc3Rh cnRfcG9zLCB0bXAsCj4gLQkJCQkgIHRtcF91c2VkICogYnBwKTsKPiArCQkJCSAgdG1wX3VzZWQg KiBwaXhlbF9zaXplKTsKPiAgCQkJZmx1c2hfdG1wID0gZmFsc2U7Cj4gIAkJCXRtcF91c2VkID0g MDsKPiAgCQl9Cj4gQEAgLTM5Miw3ICs0MDgsNyBAQCBzdGF0aWMgdm9pZCBkcmF3X3JlY3RfYmx0 KGludCBmZCwgc3RydWN0IGNtZF9kYXRhICpjbWRfZGF0YSwKPiAgewo+ICAJZHJtX2ludGVsX2Jv ICpkc3Q7Cj4gIAlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoOwo+IC0JaW50IGJsdF9j bWRfbGVuLCBibHRfY21kX3RpbGluZzsKPiArCWludCBibHRfY21kX2xlbiwgYmx0X2NtZF90aWxp bmcsIGJsdF9jbWRfZGVwdGg7Cj4gIAl1aW50MzJfdCBkZXZpZCA9IGludGVsX2dldF9kcm1fZGV2 aWQoZmQpOwo+ICAJaW50IGdlbiA9IGludGVsX2dlbihkZXZpZCk7Cj4gIAl1aW50MzJfdCB0aWxp bmcsIHN3aXp6bGU7Cj4gQEAgLTQwNiw2ICs0MjIsMjAgQEAgc3RhdGljIHZvaWQgZHJhd19yZWN0 X2JsdChpbnQgZmQsIHN0cnVjdCBjbWRfZGF0YSAqY21kX2RhdGEsCj4gIAliYXRjaCA9IGludGVs X2JhdGNoYnVmZmVyX2FsbG9jKGNtZF9kYXRhLT5idWZtZ3IsIGRldmlkKTsKPiAgCWlndF9hc3Nl cnQoYmF0Y2gpOwo+ICAKPiArCXN3aXRjaCAoYnVmLT5icHApIHsKPiArCWNhc2UgODoKPiArCQli bHRfY21kX2RlcHRoID0gMDsKPiArCQlicmVhazsKPiArCWNhc2UgMTY6IC8qIHdlJ3JlIGFzc3Vt aW5nIDU2NSAqLwo+ICsJCWJsdF9jbWRfZGVwdGggPSAxIDw8IDI0Owo+ICsJCWJyZWFrOwo+ICsJ Y2FzZSAzMjoKPiArCQlibHRfY21kX2RlcHRoID0gMyA8PCAyNDsKPiArCQlicmVhazsKPiArCWRl ZmF1bHQ6Cj4gKwkJaWd0X2Fzc2VydChmYWxzZSk7Cj4gKwl9Cj4gKwo+ICAJYmx0X2NtZF9sZW4g PSAoZ2VuID49IDgpID8gIDB4NSA6IDB4NDsKPiAgCWJsdF9jbWRfdGlsaW5nID0gKHRpbGluZykg PyBYWV9DT0xPUl9CTFRfVElMRUQgOiAwOwo+ICAJcGl0Y2ggPSAodGlsaW5nKSA/IGJ1Zi0+c3Ry aWRlIC8gNCA6IGJ1Zi0+c3RyaWRlOwo+IEBAIC00MTMsNyArNDQzLDcgQEAgc3RhdGljIHZvaWQg ZHJhd19yZWN0X2JsdChpbnQgZmQsIHN0cnVjdCBjbWRfZGF0YSAqY21kX2RhdGEsCj4gIAlCRUdJ Tl9CQVRDSCg2LCAxKTsKPiAgCU9VVF9CQVRDSChYWV9DT0xPUl9CTFRfQ01EX05PTEVOIHwgWFlf Q09MT1JfQkxUX1dSSVRFX0FMUEhBIHwKPiAgCQkgIFhZX0NPTE9SX0JMVF9XUklURV9SR0IgfCBi bHRfY21kX3RpbGluZyB8IGJsdF9jbWRfbGVuKTsKPiAtCU9VVF9CQVRDSCgoMyA8PCAyNCkgfCAo MHhGMCA8PCAxNikgfCBwaXRjaCk7Cj4gKwlPVVRfQkFUQ0goYmx0X2NtZF9kZXB0aCB8ICgweEYw IDw8IDE2KSB8IHBpdGNoKTsKPiAgCU9VVF9CQVRDSCgocmVjdC0+eSA8PCAxNikgfCByZWN0LT54 KTsKPiAgCU9VVF9CQVRDSCgoKHJlY3QtPnkgKyByZWN0LT5oKSA8PCAxNikgfCAocmVjdC0+eCAr IHJlY3QtPncpKTsKPiAgCU9VVF9SRUxPQ19GRU5DRUQoZHN0LCAwLCBJOTE1X0dFTV9ET01BSU5f UkVOREVSLCAwKTsKPiBAQCAtNDM1LDE1ICs0NjUsMjYgQEAgc3RhdGljIHZvaWQgZHJhd19yZWN0 X3JlbmRlcihpbnQgZmQsIHN0cnVjdCBjbWRfZGF0YSAqY21kX2RhdGEsCj4gIAlzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoOwo+ICAJdWludDMyX3QgdGlsaW5nLCBzd2l6emxlOwo+ICAJ c3RydWN0IGJ1Zl9kYXRhIHRtcDsKPiArCWludCBwaXhlbF9zaXplID0gYnVmLT5icHAgLyA4Owo+ ICsJdW5zaWduZWQgYWRqdXN0ZWRfdywgYWRqdXN0ZWRfZHN0X3g7Cj4gIAo+ICAJaWd0X3NraXBf b24oIXJlbmRlcmNvcHkpOwo+ICAKPiArCS8qIFJlbmRlcmNvcHkgd29ya3MgYXQgMzJicHAsIHNv IGlmIHlvdSB0cnkgdG8gZG8gY29waWVzIG9uIGJ1ZmZlcnMgd2l0aAo+ICsJICogc21hbGxlciBi cHBzIHlvdSB3b24ndCBzdWNjZWVlZCBpZiB5b3UgbmVlZCB0byBjb3B5ICJoYWxmIiBvZiBhIDMy YnBwCj4gKwkgKiBwaXhlbCBvciBzb21ldGhpbmcgc2ltaWxhci4gKi8KPiArCWlndF9za2lwX29u KHJlY3QtPnggJSAoMzIgLyBidWYtPmJwcCkgIT0gMCB8fAo+ICsJCSAgICByZWN0LT55ICUgKDMy IC8gYnVmLT5icHApICE9IDAgfHwKPiArCQkgICAgcmVjdC0+dyAlICgzMiAvIGJ1Zi0+YnBwKSAh PSAwIHx8Cj4gKwkJICAgIHJlY3QtPmggJSAoMzIgLyBidWYtPmJwcCkgIT0gMCk7Cj4gKwo+ICAJ Z2VtX2dldF90aWxpbmcoZmQsIGJ1Zi0+aGFuZGxlLCAmdGlsaW5nLCAmc3dpenpsZSk7Cj4gIAo+ ICAJLyogV2UgY3JlYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBhbmQgY29weSBmcm9tIGl0IHVzaW5n IHJlbmRlcmNvcHkuICovCj4gLQl0bXAuc2l6ZSA9IHJlY3QtPncgKiByZWN0LT5oICogc2l6ZW9m KHVpbnQzMl90KTsKPiArCXRtcC5zaXplID0gcmVjdC0+dyAqIHJlY3QtPmggKiBwaXhlbF9zaXpl Owo+ICAJdG1wLmhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIHRtcC5zaXplKTsKPiAtCXRtcC5zdHJp ZGUgPSByZWN0LT53ICogc2l6ZW9mKHVpbnQzMl90KTsKPiArCXRtcC5zdHJpZGUgPSByZWN0LT53 ICogcGl4ZWxfc2l6ZTsKPiArCXRtcC5icHAgPSBidWYtPmJwcDsKPiAgCWRyYXdfcmVjdF9tbWFw X2NwdShmZCwgJnRtcCwgJihzdHJ1Y3QgcmVjdCl7MCwgMCwgcmVjdC0+dywgcmVjdC0+aH0sCj4g IAkJCSAgIGNvbG9yKTsKPiAgCj4gQEAgLTQ2NCw4ICs1MDUsMTggQEAgc3RhdGljIHZvaWQgZHJh d19yZWN0X3JlbmRlcihpbnQgZmQsIHN0cnVjdCBjbWRfZGF0YSAqY21kX2RhdGEsCj4gIAliYXRj aCA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9jKGNtZF9kYXRhLT5idWZtZ3IsIGRldmlkKTsKPiAg CWlndF9hc3NlcnQoYmF0Y2gpOwo+ICAKPiAtCXJlbmRlcmNvcHkoYmF0Y2gsIGNtZF9kYXRhLT5j b250ZXh0LCAmc3JjX2J1ZiwgMCwgMCwgcmVjdC0+dywgcmVjdC0+aCwKPiAtCQkgICAmZHN0X2J1 ZiwgcmVjdC0+eCwgcmVjdC0+eSk7Cj4gKwlzd2l0Y2ggKGJ1Zi0+YnBwKSB7Cj4gKwljYXNlIDE2 Ogo+ICsJY2FzZSAzMjoKPiArCQlhZGp1c3RlZF93ID0gcmVjdC0+dyAvICgzMiAvIGJ1Zi0+YnBw KTsKPiArCQlhZGp1c3RlZF9kc3RfeCA9IHJlY3QtPnggLyAoMzIgLyBidWYtPmJwcCk7Cj4gKwkJ YnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCWlndF9hc3NlcnQoZmFsc2UpOwo+ICsJfQo+ICsKPiAr CXJlbmRlcmNvcHkoYmF0Y2gsIGNtZF9kYXRhLT5jb250ZXh0LCAmc3JjX2J1ZiwgMCwgMCwgYWRq dXN0ZWRfdywKPiArCQkgICByZWN0LT5oLCAmZHN0X2J1ZiwgYWRqdXN0ZWRfZHN0X3gsIHJlY3Qt PnkpOwo+ICAKPiAgCWludGVsX2JhdGNoYnVmZmVyX2ZyZWUoYmF0Y2gpOwo+ICAJZ2VtX2Nsb3Nl KGZkLCB0bXAuaGFuZGxlKTsKPiBAQCAtNDg2LDYgKzUzNyw3IEBAIHN0YXRpYyB2b2lkIGRyYXdf cmVjdF9yZW5kZXIoaW50IGZkLCBzdHJ1Y3QgY21kX2RhdGEgKmNtZF9kYXRhLAo+ICAgKiBAcmVj dF93OiB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlCj4gICAqIEByZWN0X2g6IGhlaWdodCBvZiB0aGUg cmVjdGFuZ2xlCj4gICAqIEBjb2xvcjogY29sb3Igb2YgdGhlIHJlY3RhbmdsZQo+ICsgKiBAYnBw OiBiaXRzIHBlciBwaXhlbAo+ICAgKgo+ICAgKiBUaGlzIGZ1bmN0aW9uIGRyYXdzIGEgY29sb3Jl ZCByZWN0YW5nbGUgb24gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgYWxsb3dpbmcKPiAgICogeW91 IHRvIHNwZWNpZnkgdGhlIG1ldGhvZCB1c2VkIHRvIGRyYXcgdGhlIHJlY3RhbmdsZS4gV2UgYXNz dW1lIDMyIGJpdCBwaXhlbHMKPiBAQCAtNDk0LDcgKzU0Niw3IEBAIHN0YXRpYyB2b2lkIGRyYXdf cmVjdF9yZW5kZXIoaW50IGZkLCBzdHJ1Y3QgY21kX2RhdGEgKmNtZF9kYXRhLAo+ICB2b2lkIGln dF9kcmF3X3JlY3QoaW50IGZkLCBkcm1faW50ZWxfYnVmbWdyICpidWZtZ3IsIGRybV9pbnRlbF9j b250ZXh0ICpjb250ZXh0LAo+ICAJCSAgIHVpbnQzMl90IGJ1Zl9oYW5kbGUsIHVpbnQzMl90IGJ1 Zl9zaXplLCB1aW50MzJfdCBidWZfc3RyaWRlLAo+ICAJCSAgIGVudW0gaWd0X2RyYXdfbWV0aG9k IG1ldGhvZCwgaW50IHJlY3RfeCwgaW50IHJlY3RfeSwKPiAtCQkgICBpbnQgcmVjdF93LCBpbnQg cmVjdF9oLCB1aW50MzJfdCBjb2xvcikKPiArCQkgICBpbnQgcmVjdF93LCBpbnQgcmVjdF9oLCB1 aW50MzJfdCBjb2xvciwgaW50IGJwcCkKPiAgewo+ICAJc3RydWN0IGNtZF9kYXRhIGNtZF9kYXRh ID0gewo+ICAJCS5idWZtZ3IgPSBidWZtZ3IsCj4gQEAgLTUwNCw2ICs1NTYsNyBAQCB2b2lkIGln dF9kcmF3X3JlY3QoaW50IGZkLCBkcm1faW50ZWxfYnVmbWdyICpidWZtZ3IsIGRybV9pbnRlbF9j b250ZXh0ICpjb250ZXh0LAo+ICAJCS5oYW5kbGUgPSBidWZfaGFuZGxlLAo+ICAJCS5zaXplID0g YnVmX3NpemUsCj4gIAkJLnN0cmlkZSA9IGJ1Zl9zdHJpZGUsCj4gKwkJLmJwcCA9IGJwcCwKPiAg CX07Cj4gIAlzdHJ1Y3QgcmVjdCByZWN0ID0gewo+ICAJCS54ID0gcmVjdF94LAo+IEBAIC01Mzcs NiArNTkwLDIwIEBAIHZvaWQgaWd0X2RyYXdfcmVjdChpbnQgZmQsIGRybV9pbnRlbF9idWZtZ3Ig KmJ1Zm1nciwgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsCj4gIAl9Cj4gIH0KPiAgCj4gK3N0 YXRpYyBpbnQgZ2V0X2Zvcm1hdF9icHAodWludDMyX3QgZHJtX2Zvcm1hdCkKPiArewo+ICsJc3dp dGNoIChkcm1fZm9ybWF0KSB7Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1Ogo+ICsJCXJldHVy biAxNjsKPiArCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKPiArCWNhc2UgRFJNX0ZPUk1BVF9B UkdCODg4ODoKPiArCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKPiArCQlyZXR1cm4gMzI7 Cj4gKwlkZWZhdWx0Ogo+ICsJCWlndF9hc3NlcnQoZmFsc2UpOwo+ICsJfQo+ICt9Cj4gKwo+ICAv KioKPiAgICogaWd0X2RyYXdfcmVjdF9mYjoKPiAgICogQGZkOiB0aGUgRFJNIGZpbGUgZGVzY3Jp cHRvcgo+IEBAIC01NjAsNyArNjI3LDggQEAgdm9pZCBpZ3RfZHJhd19yZWN0X2ZiKGludCBmZCwg ZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLAo+ICAJCSAgICAgIGludCByZWN0X3csIGludCByZWN0 X2gsIHVpbnQzMl90IGNvbG9yKQo+ICB7Cj4gIAlpZ3RfZHJhd19yZWN0KGZkLCBidWZtZ3IsIGNv bnRleHQsIGZiLT5nZW1faGFuZGxlLCBmYi0+c2l6ZSwgZmItPnN0cmlkZSwKPiAtCQkgICAgICBt ZXRob2QsIHJlY3RfeCwgcmVjdF95LCByZWN0X3csIHJlY3RfaCwgY29sb3IpOwo+ICsJCSAgICAg IG1ldGhvZCwgcmVjdF94LCByZWN0X3ksIHJlY3RfdywgcmVjdF9oLCBjb2xvciwKPiArCQkgICAg ICBnZXRfZm9ybWF0X2JwcChmYi0+ZHJtX2Zvcm1hdCkpOwo+ICB9Cj4gIAo+ICAvKioKPiBkaWZm IC0tZ2l0IGEvbGliL2lndF9kcmF3LmggYi9saWIvaWd0X2RyYXcuaAo+IGluZGV4IDlkODQxM2Eu LmIwMzAxMzEgMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF9kcmF3LmgKPiArKysgYi9saWIvaWd0X2Ry YXcuaAo+IEBAIC01Myw3ICs1Myw3IEBAIGNvbnN0IGNoYXIgKmlndF9kcmF3X2dldF9tZXRob2Rf bmFtZShlbnVtIGlndF9kcmF3X21ldGhvZCBtZXRob2QpOwo+ICB2b2lkIGlndF9kcmF3X3JlY3Qo aW50IGZkLCBkcm1faW50ZWxfYnVmbWdyICpidWZtZ3IsIGRybV9pbnRlbF9jb250ZXh0ICpjb250 ZXh0LAo+ICAJCSAgIHVpbnQzMl90IGJ1Zl9oYW5kbGUsIHVpbnQzMl90IGJ1Zl9zaXplLCB1aW50 MzJfdCBidWZfc3RyaWRlLAo+ICAJCSAgIGVudW0gaWd0X2RyYXdfbWV0aG9kIG1ldGhvZCwgaW50 IHJlY3RfeCwgaW50IHJlY3RfeSwKPiAtCQkgICBpbnQgcmVjdF93LCBpbnQgcmVjdF9oLCB1aW50 MzJfdCBjb2xvcik7Cj4gKwkJICAgaW50IHJlY3RfdywgaW50IHJlY3RfaCwgdWludDMyX3QgY29s b3IsIGludCBicHApOwo+ICAKPiAgdm9pZCBpZ3RfZHJhd19yZWN0X2ZiKGludCBmZCwgZHJtX2lu dGVsX2J1Zm1nciAqYnVmbWdyLAo+ICAJCSAgICAgIGRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0 LCBzdHJ1Y3QgaWd0X2ZiICpmYiwKPiBkaWZmIC0tZ2l0IGEvdGVzdHMva21zX2RyYXdfY3JjLmMg Yi90ZXN0cy9rbXNfZHJhd19jcmMuYwo+IGluZGV4IDlmY2Y5OTcuLjljNzMwNzcgMTAwNjQ0Cj4g LS0tIGEvdGVzdHMva21zX2RyYXdfY3JjLmMKPiArKysgYi90ZXN0cy9rbXNfZHJhd19jcmMuYwo+ IEBAIC00NSw4ICs0NSwxOCBAQCBkcm1Nb2RlQ29ubmVjdG9yUHRyIGRybV9jb25uZWN0b3JzW01B WF9DT05ORUNUT1JTXTsKPiAgZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyOwo+ICBpZ3RfcGlwZV9j cmNfdCAqcGlwZV9jcmM7Cj4gIAo+IC1ib29sIGhhc19tZXRob2RfYmFzZV9jcmMgPSBmYWxzZTsK PiAtaWd0X2NyY190IG1ldGhvZF9iYXNlX2NyYzsKPiArI2RlZmluZSBOX0ZPUk1BVFMgMwo+ICtz dGF0aWMgY29uc3QgdWludDMyX3QgZm9ybWF0c1tOX0ZPUk1BVFNdID0gewo+ICsJRFJNX0ZPUk1B VF9YUkdCODg4OCwKPiArCURSTV9GT1JNQVRfUkdCNTY1LAo+ICsJRFJNX0ZPUk1BVF9YUkdCMjEw MTAxMCwKPiArfTsKPiArCj4gK3N0cnVjdCBiYXNlX2NyYyB7Cj4gKwlib29sIHNldDsKPiArCWln dF9jcmNfdCBjcmM7Cj4gK307Cj4gK3N0cnVjdCBiYXNlX2NyYyBiYXNlX2NyY3NbTl9GT1JNQVRT XTsKPiAgCj4gIHN0cnVjdCBtb2Rlc2V0X3BhcmFtcyBtczsKPiAgCj4gQEAgLTc3LDI2ICs4Nyw1 OSBAQCBzdGF0aWMgdm9pZCBmaW5kX21vZGVzZXRfcGFyYW1zKHZvaWQpCj4gIAo+ICB9Cj4gIAo+ IC1zdGF0aWMgdm9pZCBnZXRfbWV0aG9kX2NyYyhlbnVtIGlndF9kcmF3X21ldGhvZCBtZXRob2Qs IHVpbnQ2NF90IHRpbGluZywKPiAtCQkJICAgaWd0X2NyY190ICpjcmMpCj4gK3N0YXRpYyB1aW50 MzJfdCBnZXRfY29sb3IodWludDMyX3QgZHJtX2Zvcm1hdCwgYm9vbCByLCBib29sIGcsIGJvb2wg YikKPiArewo+ICsJdWludDMyX3QgY29sb3IgPSAwOwo+ICsKPiArCXN3aXRjaCAoZHJtX2Zvcm1h dCkgewo+ICsJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKPiArCQljb2xvciB8PSByID8gMHgxRiA8 PCAxMSA6IDA7Cj4gKwkJY29sb3IgfD0gZyA/IDB4M0YgPDwgNSA6IDA7Cj4gKwkJY29sb3IgfD0g YiA/IDB4MUYgOiAwOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4Ogo+ ICsJCWNvbG9yIHw9IHIgPyAweEZGIDw8IDE2IDogMDsKPiArCQljb2xvciB8PSBnID8gMHhGRiA8 PCA4IDogMDsKPiArCQljb2xvciB8PSBiID8gMHhGRiA6IDA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNl IERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6Cj4gKwkJY29sb3IgfD0gciA/IDB4M0ZGIDw8IDIwIDog MDsKPiArCQljb2xvciB8PSBnID8gMHgzRkYgPDwgMTAgOiAwOwo+ICsJCWNvbG9yIHw9IGIgPyAw eDNGRiA6IDA7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCWlndF9hc3NlcnQoZmFsc2Up Owo+ICsJfQo+ICsKPiArCXJldHVybiBjb2xvcjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZ2V0 X21ldGhvZF9jcmMoZW51bSBpZ3RfZHJhd19tZXRob2QgbWV0aG9kLCB1aW50MzJfdCBkcm1fZm9y bWF0LAo+ICsJCQkgICB1aW50NjRfdCB0aWxpbmcsIGlndF9jcmNfdCAqY3JjKQo+ICB7Cj4gIAlz dHJ1Y3QgaWd0X2ZiIGZiOwo+ICAJaW50IHJjOwo+ICAKPiAgCWlndF9jcmVhdGVfZmIoZHJtX2Zk LCBtcy5tb2RlLT5oZGlzcGxheSwgbXMubW9kZS0+dmRpc3BsYXksCj4gLQkJICAgICAgRFJNX0ZP Uk1BVF9YUkdCODg4OCwgdGlsaW5nLCAmZmIpOwo+ICsJCSAgICAgIGRybV9mb3JtYXQsIHRpbGlu ZywgJmZiKTsKPiAgCWlndF9kcmF3X3JlY3RfZmIoZHJtX2ZkLCBidWZtZ3IsIE5VTEwsICZmYiwg bWV0aG9kLAo+IC0JCQkgMCwgMCwgZmIud2lkdGgsIGZiLmhlaWdodCwgMHhGRik7Cj4gKwkJCSAw LCAwLCBmYi53aWR0aCwgZmIuaGVpZ2h0LAo+ICsJCQkgZ2V0X2NvbG9yKGRybV9mb3JtYXQsIDAs IDAsIDEpKTsKPiAgCj4gIAlpZ3RfZHJhd19yZWN0X2ZiKGRybV9mZCwgYnVmbWdyLCBOVUxMLCAm ZmIsIG1ldGhvZCwKPiAgCQkJIGZiLndpZHRoIC8gNCwgZmIuaGVpZ2h0IC8gNCwKPiAtCQkJIGZi LndpZHRoIC8gMiwgZmIuaGVpZ2h0IC8gMiwgMHhGRjAwKTsKPiArCQkJIGZiLndpZHRoIC8gMiwg ZmIuaGVpZ2h0IC8gMiwKPiArCQkJIGdldF9jb2xvcihkcm1fZm9ybWF0LCAwLCAxLCAwKSk7Cj4g IAlpZ3RfZHJhd19yZWN0X2ZiKGRybV9mZCwgYnVmbWdyLCBOVUxMLCAmZmIsIG1ldGhvZCwKPiAg CQkJIGZiLndpZHRoIC8gOCwgZmIuaGVpZ2h0IC8gOCwKPiAtCQkJIGZiLndpZHRoIC8gNCwgZmIu aGVpZ2h0IC8gNCwgMHhGRjAwMDApOwo+ICsJCQkgZmIud2lkdGggLyA0LCBmYi5oZWlnaHQgLyA0 LAo+ICsJCQkgZ2V0X2NvbG9yKGRybV9mb3JtYXQsIDEsIDAsIDApKTsKPiAgCWlndF9kcmF3X3Jl Y3RfZmIoZHJtX2ZkLCBidWZtZ3IsIE5VTEwsICZmYiwgbWV0aG9kLAo+ICAJCQkgZmIud2lkdGgg LyAyLCBmYi5oZWlnaHQgLyAyLAo+IC0JCQkgZmIud2lkdGggLyAzLCBmYi5oZWlnaHQgLyAzLCAw eEZGMDBGRik7Cj4gKwkJCSBmYi53aWR0aCAvIDMsIGZiLmhlaWdodCAvIDMsCj4gKwkJCSBnZXRf Y29sb3IoZHJtX2Zvcm1hdCwgMSwgMCwgMSkpOwo+ICsJaWd0X2RyYXdfcmVjdF9mYihkcm1fZmQs IGJ1Zm1nciwgTlVMTCwgJmZiLCBtZXRob2QsIDEsIDEsIDE1LCAxNSwKPiArCQkJIGdldF9jb2xv cihkcm1fZm9ybWF0LCAwLCAxLCAxKSk7Cj4gIAo+ICAJcmMgPSBkcm1Nb2RlU2V0Q3J0Yyhkcm1f ZmQsIG1zLmNydGNfaWQsIGZiLmZiX2lkLCAwLCAwLAo+ICAJCQkgICAgJm1zLmNvbm5lY3Rvcl9p ZCwgMSwgbXMubW9kZSk7Cj4gQEAgLTEwOCw3ICsxNTEsOCBAQCBzdGF0aWMgdm9pZCBnZXRfbWV0 aG9kX2NyYyhlbnVtIGlndF9kcmF3X21ldGhvZCBtZXRob2QsIHVpbnQ2NF90IHRpbGluZywKPiAg CWlndF9yZW1vdmVfZmIoZHJtX2ZkLCAmZmIpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBkcmF3 X21ldGhvZF9zdWJ0ZXN0KGVudW0gaWd0X2RyYXdfbWV0aG9kIG1ldGhvZCwgdWludDY0X3QgdGls aW5nKQo+ICtzdGF0aWMgdm9pZCBkcmF3X21ldGhvZF9zdWJ0ZXN0KGVudW0gaWd0X2RyYXdfbWV0 aG9kIG1ldGhvZCwKPiArCQkJCXVpbnQzMl90IGZvcm1hdF9pbmRleCwgdWludDY0X3QgdGlsaW5n KQo+ICB7Cj4gIAlpZ3RfY3JjX3QgY3JjOwo+ICAKPiBAQCAtMTE5LDE0ICsxNjMsMTUgQEAgc3Rh dGljIHZvaWQgZHJhd19tZXRob2Rfc3VidGVzdChlbnVtIGlndF9kcmF3X21ldGhvZCBtZXRob2Qs IHVpbnQ2NF90IHRpbGluZykKPiAgCS8qIFVzZSBJR1RfRFJBV19NTUFQX0dUVCBvbiBhbiB1bnRp bGVkIGJ1ZmZlciBhcyB0aGUgcGFyYW1ldGVyIGZvcgo+ICAJICogY29tcGFyaXNvbi4gQ2FjaGUg dGhlIHZhbHVlIHNvIHdlIGRvbid0IHJlY29tcHV0ZSBpdCBmb3IgZXZlcnkgc2luZ2xlCj4gIAkg KiBzdWJ0ZXN0LiAqLwo+IC0JaWYgKCFoYXNfbWV0aG9kX2Jhc2VfY3JjKSB7Cj4gLQkJZ2V0X21l dGhvZF9jcmMoSUdUX0RSQVdfTU1BUF9HVFQsIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4g LQkJCSAgICAgICAmbWV0aG9kX2Jhc2VfY3JjKTsKPiAtCQloYXNfbWV0aG9kX2Jhc2VfY3JjID0g dHJ1ZTsKPiArCWlmICghYmFzZV9jcmNzW2Zvcm1hdF9pbmRleF0uc2V0KSB7Cj4gKwkJZ2V0X21l dGhvZF9jcmMoSUdUX0RSQVdfTU1BUF9HVFQsIGZvcm1hdHNbZm9ybWF0X2luZGV4XSwKPiArCQkJ ICAgICAgIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4gKwkJCSAgICAgICAmYmFzZV9jcmNz W2Zvcm1hdF9pbmRleF0uY3JjKTsKPiArCQliYXNlX2NyY3NbZm9ybWF0X2luZGV4XS5zZXQgPSB0 cnVlOwo+ICAJfQo+ICAKPiAtCWdldF9tZXRob2RfY3JjKG1ldGhvZCwgdGlsaW5nLCAmY3JjKTsK PiAtCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZjcmMsICZtZXRob2RfYmFzZV9jcmMpOwo+ICsJZ2V0 X21ldGhvZF9jcmMobWV0aG9kLCBmb3JtYXRzW2Zvcm1hdF9pbmRleF0sIHRpbGluZywgJmNyYyk7 Cj4gKwlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgmY3JjLCAmYmFzZV9jcmNzW2Zvcm1hdF9pbmRleF0u Y3JjKTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgZ2V0X2ZpbGxfY3JjKHVpbnQ2NF90IHRpbGlu ZywgaWd0X2NyY190ICpjcmMpCj4gQEAgLTIxOSwyMSArMjY0LDQxIEBAIHN0YXRpYyB2b2lkIHRl YXJkb3duX2Vudmlyb25tZW50KHZvaWQpCj4gIAljbG9zZShkcm1fZmQpOwo+ICB9Cj4gIAo+ICtz dGF0aWMgY29uc3QgY2hhciAqZm9ybWF0X3N0cihpbnQgZm9ybWF0X2luZGV4KQo+ICt7Cj4gKwlz d2l0Y2ggKGZvcm1hdHNbZm9ybWF0X2luZGV4XSkgewo+ICsJY2FzZSBEUk1fRk9STUFUX1JHQjU2 NToKPiArCQlyZXR1cm4gInJnYjU2NSI7Cj4gKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Cj4g KwkJcmV0dXJuICJ4cmdiODg4OCI7Cj4gKwljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6Cj4g KwkJcmV0dXJuICJ4cmdiMjEwMTAxMCI7Cj4gKwlkZWZhdWx0Ogo+ICsJCWlndF9hc3NlcnQoZmFs c2UpOwo+ICsJfQo+ICt9Cj4gKwo+ICBpZ3RfbWFpbgo+ICB7Cj4gIAllbnVtIGlndF9kcmF3X21l dGhvZCBtZXRob2Q7Cj4gKwlpbnQgZm9ybWF0X2luZGV4Owo+ICAKPiAgCWlndF9maXh0dXJlCj4g IAkJc2V0dXBfZW52aXJvbm1lbnQoKTsKPiAgCj4gLQlmb3IgKG1ldGhvZCA9IDA7IG1ldGhvZCA8 IElHVF9EUkFXX01FVEhPRF9DT1VOVDsgbWV0aG9kKyspIHsKPiAtCQlpZ3Rfc3VidGVzdF9mKCJk cmF3LW1ldGhvZC0lcy11bnRpbGVkIiwKPiAtCQkJICAgICAgaWd0X2RyYXdfZ2V0X21ldGhvZF9u YW1lKG1ldGhvZCkpCj4gLQkJCWRyYXdfbWV0aG9kX3N1YnRlc3QobWV0aG9kLCBMT0NBTF9EUk1f Rk9STUFUX01PRF9OT05FKTsKPiAtCQlpZ3Rfc3VidGVzdF9mKCJkcmF3LW1ldGhvZC0lcy10aWxl ZCIsCj4gLQkJCSAgICAgIGlndF9kcmF3X2dldF9tZXRob2RfbmFtZShtZXRob2QpKQo+IC0JCQlk cmF3X21ldGhvZF9zdWJ0ZXN0KG1ldGhvZCwKPiAtCQkJCQkgICAgTE9DQUxfSTkxNV9GT1JNQVRf TU9EX1hfVElMRUQpOwo+ICsJZm9yIChmb3JtYXRfaW5kZXggPSAwOyBmb3JtYXRfaW5kZXggPCBO X0ZPUk1BVFM7IGZvcm1hdF9pbmRleCsrKSB7Cj4gKwkJZm9yIChtZXRob2QgPSAwOyBtZXRob2Qg PCBJR1RfRFJBV19NRVRIT0RfQ09VTlQ7IG1ldGhvZCsrKSB7Cj4gKwkJCWlndF9zdWJ0ZXN0X2Yo ImRyYXctbWV0aG9kLSVzLSVzLXVudGlsZWQiLAo+ICsJCQkJICAgICAgZm9ybWF0X3N0cihmb3Jt YXRfaW5kZXgpLAo+ICsJCQkJICAgICAgaWd0X2RyYXdfZ2V0X21ldGhvZF9uYW1lKG1ldGhvZCkp Cj4gKwkJCQlkcmF3X21ldGhvZF9zdWJ0ZXN0KG1ldGhvZCwgZm9ybWF0X2luZGV4LAo+ICsJCQkJ CQkgICAgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSk7Cj4gKwkJCWlndF9zdWJ0ZXN0X2YoImRy YXctbWV0aG9kLSVzLSVzLXRpbGVkIiwKPiArCQkJCSAgICAgIGZvcm1hdF9zdHIoZm9ybWF0X2lu ZGV4KSwKPiArCQkJCSAgICAgIGlndF9kcmF3X2dldF9tZXRob2RfbmFtZShtZXRob2QpKQo+ICsJ CQkJZHJhd19tZXRob2Rfc3VidGVzdChtZXRob2QsIGZvcm1hdF9pbmRleCwKPiArCQkJCQkJTE9D QUxfSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQpOwo+ICsJCX0KPiAgCX0KPiAgCj4gIAlpZ3Rfc3Vi dGVzdCgiZmlsbC1mYiIpCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc19mcm9udGJ1ZmZlcl90cmFj a2luZy5jIGIvdGVzdHMva21zX2Zyb250YnVmZmVyX3RyYWNraW5nLmMKPiBpbmRleCBkMWQ1MDQ1 Li5jYTM4ZWQ4IDEwMDY0NAo+IC0tLSBhL3Rlc3RzL2ttc19mcm9udGJ1ZmZlcl90cmFja2luZy5j Cj4gKysrIGIvdGVzdHMva21zX2Zyb250YnVmZmVyX3RyYWNraW5nLmMKPiBAQCAtOTA4LDcgKzkw OCw3IEBAIHN0YXRpYyB2b2lkICpidXN5X3RocmVhZF9mdW5jKHZvaWQgKmRhdGEpCj4gIAkJaWd0 X2RyYXdfcmVjdChkcm0uZmQsIGRybS5idWZtZ3IsIE5VTEwsIGJ1c3lfdGhyZWFkLmhhbmRsZSwK PiAgCQkJICAgICAgYnVzeV90aHJlYWQuc2l6ZSwgYnVzeV90aHJlYWQuc3RyaWRlLAo+ICAJCQkg ICAgICBJR1RfRFJBV19CTFQsIDAsIDAsIGJ1c3lfdGhyZWFkLndpZHRoLAo+IC0JCQkgICAgICBi dXN5X3RocmVhZC5oZWlnaHQsIDB4RkYpOwo+ICsJCQkgICAgICBidXN5X3RocmVhZC5oZWlnaHQs IDB4RkYsIDMyKTsKPiAgCj4gIAlwdGhyZWFkX2V4aXQoMCk7Cj4gIH0KPiAtLSAKPiAyLjQuNgo+ IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBo dHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cgot LSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0 cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRl bC1nZngK