From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id E1B6B6E44A for ; Tue, 3 Dec 2019 09:25:31 +0000 (UTC) Date: Tue, 3 Dec 2019 10:25:29 +0100 From: Katarzyna Dec Message-ID: <20191203092529.GG5980@kdec5-desk.ger.corp.intel.com> References: <20191201190942.6077-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20191201190942.6077-1-zbigniew.kempczynski@intel.com> Subject: Re: [igt-dev] [PATCH i-g-t v2 1/2] lib/intel_bufops: Introduce buffer operations List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Zbigniew =?utf-8?Q?Kempczy=C5=84ski?= , igt-dev@lists.freedesktop.org List-ID: T24gU3VuLCBEZWMgMDEsIDIwMTkgYXQgMDg6MDk6NDFQTSArMDEwMCwgWmJpZ25pZXcgS2VtcGN6 ecWEc2tpIHdyb3RlOgo+IERpZmZlcmVudCBHRU5zIHN1cHBvcnRzIGRpZmZlcmVudCB0aWxlIHN1 cmZhY2VzLiBPbGRlciBHRU5zCj4gaGF2ZSBIVyBmZW5jZXMgdG8gYWxsb3cgWCAvIFkgc3VyZmFj ZSB0aWxpbmcgLyBkZXRpbGluZy4KPiBOZXdlciBHRU5zIGhhdmUgdG8gdGlsZSAvIGRldGlsZSBz dWNoIHN1cmZhY2UgaW4gc29mdHdhcmUuCj4gCj4gVG8gbWFrZSB0ZXN0IGRldmVsb3BlciBsaWZl IGVhc2llciB0aGlzIGNvZGUgYWRkcyBidWZmZXIKPiBvcGVyYXRpb25zIChzaG9ydCBidWZvcHMp IHRvIHVzZSBhcHByb3ByaWF0ZSBmdW5jdGlvbnMgYWxsb3dpbmcKPiBjb3B5aW5nIGxpbmVhciBi dWZmZXIgdG8gQk8gYW5kIGZyb20gQk8gdG8gbGluZWFyIGJ1ZmZlcgo+IHJlZ2FyZGxlc3MgR1BV IGdlbmVyYXRpb24gYW5kIHRpbGluZyB3aXRoaW4gQk8uIEZvciBHRU5zIGhhdmluZwo+IGZlbmNl cyBzdXBwb3J0IHByZWZlcmVuY2UgaXMgdG8gdXNlIHRoZW0gaWYgdGhleSBhcmUgYXZhaWxhYmxl Cj4gKFggLyBZIHRpbGluZyBpcyBwcm9iZWQgb24gYnVmb3BzIGluaXRhbGl6YXRpb24pLgo+IAo+ IFNpZ25lZC1vZmYtYnk6IFpiaWduaWV3IEtlbXBjennFhHNraSA8emJpZ25pZXcua2VtcGN6eW5z a2lAaW50ZWwuY29tPgo+IENjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51 az4KPiBDYzogSW1yZSBEZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPgo+IENjOiBLYXRhcnp5bmEg RGVjIDxrYXRhcnp5bmEuZGVjQGludGVsLmNvbT4KPiAtLS0KPiAgbGliL01ha2VmaWxlLnNvdXJj ZXMgfCAgIDIgKwo+ICBsaWIvaW50ZWxfYnVmb3BzLmMgICB8IDY4OSArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGxpYi9pbnRlbF9idWZvcHMuaCAgIHwgIDI0 ICsrCj4gIGxpYi9tZXNvbi5idWlsZCAgICAgIHwgICAxICsKPiAgNCBmaWxlcyBjaGFuZ2VkLCA3 MTYgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2ludGVsX2J1Zm9wcy5j Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaW50ZWxfYnVmb3BzLmgKPiAKPiBkaWZmIC0tZ2l0 IGEvbGliL01ha2VmaWxlLnNvdXJjZXMgYi9saWIvTWFrZWZpbGUuc291cmNlcwo+IGluZGV4IDlk MWE0ZTA2Li5iODA4ZjI5NCAxMDA2NDQKPiAtLS0gYS9saWIvTWFrZWZpbGUuc291cmNlcwo+ICsr KyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCj4gQEAgLTY1LDYgKzY1LDggQEAgbGliX3NvdXJjZV9s aXN0ID0JIAlcCj4gIAlpbnRlbF9hdWIuaAkJXAo+ICAJaW50ZWxfYmF0Y2hidWZmZXIuYwlcCj4g IAlpbnRlbF9iYXRjaGJ1ZmZlci5oCVwKPiArCWludGVsX2J1Zm9wcy5jCQlcCj4gKwlpbnRlbF9i dWZvcHMuaAkJXAo+ICAJaW50ZWxfY2hpcHNldC5jCQlcCj4gIAlpbnRlbF9jaGlwc2V0LmgJCVwK PiAgCWludGVsX2RldmljZV9pbmZvLmMJXAo+IGRpZmYgLS1naXQgYS9saWIvaW50ZWxfYnVmb3Bz LmMgYi9saWIvaW50ZWxfYnVmb3BzLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAw MDAwMDAwLi5mZGI4YmRjNwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWIvaW50ZWxfYnVmb3Bz LmMKPiBAQCAtMCwwICsxLDY4OSBAQAo+ICsjaW5jbHVkZSA8c3lzL2lvY3RsLmg+Cj4gKyNpbmNs dWRlICJpZ3QuaCIKPiArI2luY2x1ZGUgImlndF94ODYuaCIKPiArI2luY2x1ZGUgImludGVsX2J1 Zm9wcy5oIgo+ICsKPiArI2RlZmluZSBUSUxFX05PTkUgICAoMSA8PCBJOTE1X1RJTElOR19OT05F KQo+ICsjZGVmaW5lIFRJTEVfWCAgICAgICgxIDw8IEk5MTVfVElMSU5HX1gpCj4gKyNkZWZpbmUg VElMRV9ZICAgICAgKDEgPDwgSTkxNV9USUxJTkdfWSkKPiArI2RlZmluZSBUSUxFX1lmICAgICAo MSA8PCBJOTE1X1RJTElOR19ZZikKPiArI2RlZmluZSBUSUxFX1lzICAgICAoMSA8PCBJOTE1X1RJ TElOR19ZcykKPiArCj4gK3R5cGVkZWYgdm9pZCAoKmJvX2NvcHkpKGludCwgc3RydWN0IGlndF9i dWYgKiwgdWludDMyX3QgKik7Cj4gKwo+ICtzdHJ1Y3QgYnVmX29wcyB7Cj4gKwlpbnQgZmQ7Cj4g Kwlkcm1faW50ZWxfYnVmbWdyICpidWZtZ3I7Cj4gKwlpbnQgZ2VuX3N0YXJ0Owo+ICsJaW50IGdl bl9lbmQ7Cj4gKwlpbnQgaW50ZWxfZ2VuOwo+ICsJdWludDMyX3Qgc3VwcG9ydGVkX3RpbGVzOwo+ ICsJdWludDMyX3QgaHdfdGlsZXM7Cj4gKwlib19jb3B5IGxpbmVhcl90bzsKPiArCWJvX2NvcHkg bGluZWFyX3RvX3g7Cj4gKwlib19jb3B5IGxpbmVhcl90b195Owo+ICsJYm9fY29weSBsaW5lYXJf dG9feWY7Cj4gKwlib19jb3B5IGxpbmVhcl90b195czsKPiArCWJvX2NvcHkgdG9fbGluZWFyOwo+ ICsJYm9fY29weSB4X3RvX2xpbmVhcjsKPiArCWJvX2NvcHkgeV90b19saW5lYXI7Cj4gKwlib19j b3B5IHlmX3RvX2xpbmVhcjsKPiArCWJvX2NvcHkgeXNfdG9fbGluZWFyOwo+ICt9Owo+ICsKPiAr c3RhdGljIHZvaWQgKnhfcHRyKHZvaWQgKnB0ciwKPiArCQkgICB1bnNpZ25lZCBpbnQgeCwgdW5z aWduZWQgaW50IHksCj4gKwkJICAgdW5zaWduZWQgaW50IHN0cmlkZSwgdW5zaWduZWQgaW50IGNw cCkKPiArewo+ICsJY29uc3QgaW50IHRpbGVfd2lkdGggPSA1MTI7Cj4gKwljb25zdCBpbnQgdGls ZV9oZWlnaHQgPSA4OwpJdCBjYW4gYmUgcmVhbGx5IHNpbGx5IHF1ZXN0aW9uIC0gYXJlIHRoZXNl IF4gdmFsdWVzIGFsd2F5cyB0aGUgc2FtZT8KPiArCWNvbnN0IGludCB0aWxlX3NpemUgPSB0aWxl X3dpZHRoICogdGlsZV9oZWlnaHQ7Cj4gKwlpbnQgdGlsZV94LCB0aWxlX3k7Cj4gKwlpbnQgb2Zm c2V0X3gsIG9mZnNldF95LCBwb3M7Cj4gKwo+ICsJeCAqPSBjcHA7Cj4gKwl0aWxlX3ggPSB4IC8g dGlsZV93aWR0aDsKPiArCXRpbGVfeSA9IHkgLyB0aWxlX2hlaWdodDsKPiArCW9mZnNldF94ID0g KHRpbGVfeCAqIHRpbGVfc2l6ZSk7Cj4gKwlvZmZzZXRfeSA9ICh0aWxlX3kgKiBzdHJpZGUgKiB0 aWxlX2hlaWdodCk7Cj4gKwo+ICsJcG9zID0gb2Zmc2V0X3kgKyBvZmZzZXRfeCArCj4gKwkJCSh5 ICUgdGlsZV9oZWlnaHQgKiB0aWxlX3dpZHRoKSArICh4ICUgdGlsZV93aWR0aCk7Cj4gKwo+ICsJ cmV0dXJuIHB0ciArIHBvczsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgKnlfcHRyKHZvaWQgKnB0 ciwKPiArCQkgICB1bnNpZ25lZCBpbnQgeCwgdW5zaWduZWQgaW50IHksCj4gKwkJICAgdW5zaWdu ZWQgaW50IHN0cmlkZSwgdW5zaWduZWQgaW50IGNwcCkKPiArewo+ICsJY29uc3QgaW50IHRpbGVf d2lkdGggPSAxMjg7Cj4gKwljb25zdCBpbnQgdGlsZV9oZWlnaHQgPSAzMjsKPiArCWNvbnN0IGlu dCBvd29yZHMgPSAxNjsKU2ltaWxhciBxdWVzdGlvbi4gSSBndWVzcyB0aGlzIGlzIHNvbWV0aGlu ZyBzcGVjaWZpYyBlaXRoZXIgdG8gSW50ZWwgR2VuIG9yIHRvCnRlc3RjYXNlcy4KPiArCWNvbnN0 IGludCB0aWxlX3NpemUgPSB0aWxlX3dpZHRoICogdGlsZV9oZWlnaHQ7Cj4gKwlpbnQgdGlsZV94 LCB0aWxlX3k7Cj4gKwlpbnQgb2Zmc2V0X3gsIG9mZnNldF95LCBwb3M7Cj4gKwlpbnQgc2hpZnRf eCwgc2hpZnRfeTsKPiArCj4gKwl4ICo9IGNwcDsKPiArCXRpbGVfeCA9IHggLyB0aWxlX3dpZHRo Owo+ICsJdGlsZV95ID0geSAvIHRpbGVfaGVpZ2h0Owo+ICsJb2Zmc2V0X3ggPSB0aWxlX3ggKiB0 aWxlX3NpemU7Cj4gKwlvZmZzZXRfeSA9IHRpbGVfeSAqIHN0cmlkZSAqIHRpbGVfaGVpZ2h0Owo+ ICsJc2hpZnRfeCA9IHggJSBvd29yZHMgKyAoeCAlIHRpbGVfd2lkdGgpIC8gb3dvcmRzICogdGls ZV93aWR0aCAqIGNwcDsKPiArCXNoaWZ0X3kgPSB5ICUgdGlsZV9oZWlnaHQgKiBvd29yZHM7Cj4g Kwo+ICsJcG9zID0gb2Zmc2V0X3kgKyBvZmZzZXRfeCArIHNoaWZ0X3ggKyBzaGlmdF95Owo+ICsK PiArCXJldHVybiBwdHIgKyBwb3M7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkICp5Zl9wdHIodm9p ZCAqcHRyLAo+ICsJCSAgICB1bnNpZ25lZCBpbnQgeCwgdW5zaWduZWQgaW50IHksCj4gKwkJICAg IHVuc2lnbmVkIGludCBzdHJpZGUsIHVuc2lnbmVkIGludCBjcHApCj4gK3sKPiArCWNvbnN0IGlu dCB0aWxlX3NpemUgPSA0ICogMTAyNDsKPiArCWNvbnN0IGludCB0aWxlX3dpZHRoID0gMTI4Owo+ ICsJaW50IHJvd19zaXplID0gKHN0cmlkZSAvIHRpbGVfd2lkdGgpICogdGlsZV9zaXplOwo+ICsK PiArCXggKj0gY3BwOyAvKiBjb252ZXJ0IHRvIEJ5dGUgb2Zmc2V0ICovCj4gKwo+ICsKPiArCS8q Cj4gKwkgKiBXaXRoaW4gYSA0ayBZZiB0aWxlLCB0aGUgYnl0ZSBzd2l6emxpbmcgcGF0dGVybiBp cwo+ICsJICogbXNiLi4uLi4ubHNiCj4gKwkgKiB4eXh5eHl5eXh4eHgKPiArCSAqIFRoZSB0aWxl cyB0aGVtc2VsdmVzIGFyZSBsYWlkIG91dCBpbiByb3cgbWFqb3Igb3JkZXIuCj4gKwkgKi8KPiAr CXJldHVybiBwdHIgKwo+ICsJCQkoKHggJiAweGYpICogMSkgKyAvKiA0eDEgcGl4ZWxzKDMyYnBw KSA9IDE2QiAqLwo+ICsJCQkoKHkgJiAweDMpICogMTYpICsgLyogNHg0IHBpeGVscyA9IDY0QiAq Lwo+ICsJCQkoKCh5ICYgMHg0KSA+PiAyKSAqIDY0KSArIC8qIDF4MiA2NEIgYmxvY2tzICovCj4g KwkJCSgoKHggJiAweDEwKSA+PiA0KSAqIDEyOCkgKyAvKiAyeDIgNjRCIGJsb2NrcyA9IDI1NkIg YmxvY2sgKi8KPiArCQkJKCgoeSAmIDB4OCkgPj4gMykgKiAyNTYpICsgLyogMngxIDI1NkIgYmxv Y2tzICovCj4gKwkJCSgoKHggJiAweDIwKSA+PiA1KSAqIDUxMikgKyAvKiAyeDIgMjU2QiBibG9j a3MgKi8KPiArCQkJKCgoeSAmIDB4MTApID4+IDQpICogMTAyNCkgKyAvKiA0eDIgMjU2IGJsb2Nr cyAqLwo+ICsJCQkoKCh4ICYgMHg0MCkgPj4gNikgKiAyMDQ4KSArIC8qIDR4NCAyNTZCIGJsb2Nr cyA9IDRrIHRpbGUgKi8KPiArCQkJKCgoeCAmIH4weDdmKSA+PiA3KSAqIHRpbGVfc2l6ZSkgKyAv KiByb3cgb2YgdGlsZXMgKi8KPiArCQkJKCgoeSAmIH4weDFmKSA+PiA1KSAqIHJvd19zaXplKTsK PiArfQo+ICsKPiArdHlwZWRlZiB2b2lkICooKmZuX3B0cikodm9pZCAqLCB1bnNpZ25lZCBpbnQs IHVuc2lnbmVkIGludCwKPiArCQkJdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwo+ICtzdGF0 aWMgZm5fcHRyIF9fZ2V0X3RpbGVfZm5fcHRyKGludCB0aWxpbmcpCj4gK3sKPiArCWZuX3B0ciBm biA9IE5VTEw7Cj4gKwo+ICsJc3dpdGNoICh0aWxpbmcpIHsKPiArCWNhc2UgSTkxNV9USUxJTkdf WDoKPiArCQlmbiA9IHhfcHRyOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJOTE1X1RJTElOR19ZOgo+ ICsJCWZuID0geV9wdHI7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEk5MTVfVElMSU5HX1lmOgo+ICsJ CWZuID0geWZfcHRyOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJOTE1X1RJTElOR19ZczoKPiArCQkv KiBUbyBiZSBpbXBsZW1lbnRlZCAqLwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsKPiArCWlndF9hc3Nl cnRfZihmbiwgIkNhbid0IGZpbmQgdGlsZSBmdW5jdGlvbiBmb3IgdGlsaW5nOiAlZFxuIiwgdGls aW5nKTsKPiArCj4gKwlyZXR1cm4gZm47Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9fY29weV9s aW5lYXJfdG8oaW50IGZkLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAo+ICsJCQkgICAgIGNvbnN0IHVp bnQzMl90ICpsaW5lYXIsIGludCB0aWxpbmcpCj4gK3sKPiArCWludCBoZWlnaHQgPSBpZ3RfYnVm X2hlaWdodChidWYpOwo+ICsJaW50IHdpZHRoID0gaWd0X2J1Zl93aWR0aChidWYpOwo+ICsJZm5f cHRyIGZuID0gX19nZXRfdGlsZV9mbl9wdHIodGlsaW5nKTsKPiArCXZvaWQgKm1hcDsKPiArCj4g KwlnZW1fc2V0X2RvbWFpbihmZCwgYnVmLT5iby0+aGFuZGxlLAo+ICsJCSAgICAgICBJOTE1X0dF TV9ET01BSU5fQ1BVLCBJOTE1X0dFTV9ET01BSU5fQ1BVKTsKPiArCW1hcCA9IGdlbV9tbWFwX19j cHUoZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwgMCwKPiArCQkJICAgIGJ1Zi0+Ym8tPnNpemUsIFBST1Rf UkVBRCB8IFBST1RfV1JJVEUpOwo+ICsKPiArCWZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5 KyspIHsKPiArCQlmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKPiArCQkJdWludDMy X3QgKnB0ciA9IGZuKG1hcCwgeCwgeSwKPiArCQkJCQkgICBidWYtPnN0cmlkZSwgYnVmLT5icHAg LyA4KTsKPiArCj4gKwkJCSpwdHIgPSBsaW5lYXJbeSAqIHdpZHRoICsgeF07Cj4gKwkJfQo+ICsJ fQo+ICsKPiArCW11bm1hcChtYXAsIGJ1Zi0+Ym8tPnNpemUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBjb3B5X2xpbmVhcl90b194KGludCBmZCwgc3RydWN0IGlndF9idWYgKmJ1ZiwKPiArCQkJ ICAgICB1aW50MzJfdCAqbGluZWFyKQo+ICt7Cj4gKwlfX2NvcHlfbGluZWFyX3RvKGZkLCBidWYs IGxpbmVhciwgSTkxNV9USUxJTkdfWCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNvcHlfbGlu ZWFyX3RvX3koaW50IGZkLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAo+ICsJCQkgICAgIHVpbnQzMl90 ICpsaW5lYXIpCj4gK3sKPiArCV9fY29weV9saW5lYXJfdG8oZmQsIGJ1ZiwgbGluZWFyLCBJOTE1 X1RJTElOR19ZKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY29weV9saW5lYXJfdG9feWYoaW50 IGZkLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAo+ICsJCQkgICAgICB1aW50MzJfdCAqbGluZWFyKQo+ ICt7Cj4gKwlfX2NvcHlfbGluZWFyX3RvKGZkLCBidWYsIGxpbmVhciwgSTkxNV9USUxJTkdfWWYp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX2NvcHlfdG9fbGluZWFyKGludCBmZCwgc3RydWN0 IGlndF9idWYgKmJ1ZiwKPiArCQkJICAgICB1aW50MzJfdCAqbGluZWFyLCBpbnQgdGlsaW5nKQo+ ICt7Cj4gKwlpbnQgaGVpZ2h0ID0gaWd0X2J1Zl9oZWlnaHQoYnVmKTsKPiArCWludCB3aWR0aCA9 IGlndF9idWZfd2lkdGgoYnVmKTsKPiArCWZuX3B0ciBmbiA9IF9fZ2V0X3RpbGVfZm5fcHRyKHRp bGluZyk7Cj4gKwl2b2lkICptYXA7Cj4gKwo+ICsJZ2VtX3NldF9kb21haW4oZmQsIGJ1Zi0+Ym8t PmhhbmRsZSwKPiArCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgMCk7Cj4gKwltYXAgPSBn ZW1fbW1hcF9fY3B1KGZkLCBidWYtPmJvLT5oYW5kbGUsIDAsCj4gKwkJCSAgICBidWYtPmJvLT5z aXplLCBQUk9UX1JFQUQpOwo+ICsKPiArCWZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp IHsKPiArCQlmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKPiArCQkJdWludDMyX3Qg KnB0ciA9IGZuKG1hcCwgeCwgeSwKPiArCQkJCQkgICBidWYtPnN0cmlkZSwgYnVmLT5icHAgLyA4 KTsKPiArCj4gKwkJCWxpbmVhclt5ICogd2lkdGggKyB4XSA9ICpwdHI7Cj4gKwkJfQo+ICsJfQo+ ICsKPiArCW11bm1hcChtYXAsIGJ1Zi0+Ym8tPnNpemUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBjb3B5X3lmX3RvX2xpbmVhcihpbnQgZmQsIHN0cnVjdCBpZ3RfYnVmICpidWYsCj4gKwkJCSAg ICAgIHVpbnQzMl90ICpsaW5lYXIpCj4gK3sKPiArCV9fY29weV90b19saW5lYXIoZmQsIGJ1Ziwg bGluZWFyLCBJOTE1X1RJTElOR19ZZik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNvcHlfeF90 b19saW5lYXIoaW50IGZkLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAo+ICsJCQkgICAgIHVpbnQzMl90 ICpsaW5lYXIpCj4gK3sKPiArCV9fY29weV90b19saW5lYXIoZmQsIGJ1ZiwgbGluZWFyLCBJOTE1 X1RJTElOR19YKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY29weV95X3RvX2xpbmVhcihpbnQg ZmQsIHN0cnVjdCBpZ3RfYnVmICpidWYsCj4gKwkJCSAgICAgdWludDMyX3QgKmxpbmVhcikKPiAr ewo+ICsJX19jb3B5X3RvX2xpbmVhcihmZCwgYnVmLCBsaW5lYXIsIEk5MTVfVElMSU5HX1kpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjb3B5X2xpbmVhcl90b19ndHQoaW50IGZkLCBzdHJ1Y3Qg aWd0X2J1ZiAqYnVmLAo+ICsJCQkgICAgICAgdWludDMyX3QgKmxpbmVhcikKPiArewo+ICsJdm9p ZCAqbWFwOwo+ICsKPiArCWdlbV9zZXRfZG9tYWluKGZkLCBidWYtPmJvLT5oYW5kbGUsCj4gKwkJ ICAgICAgIEk5MTVfR0VNX0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RPTUFJTl9HVFQpOwo+ICsKPiAr CW1hcCA9IGdlbV9tbWFwX19ndHQoZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwKPiArCQkJICAgIGJ1Zi0+ Ym8tPnNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOwo+ICsKPiArCW1lbWNweShtYXAsIGxp bmVhciwgYnVmLT5iby0+c2l6ZSk7Cj4gKwo+ICsJbXVubWFwKG1hcCwgYnVmLT5iby0+c2l6ZSk7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNvcHlfZ3R0X3RvX2xpbmVhcihpbnQgZmQsIHN0cnVj dCBpZ3RfYnVmICpidWYsCj4gKwkJCSAgICAgICB1aW50MzJfdCAqbGluZWFyKQo+ICt7Cj4gKwl2 b2lkICptYXA7Cj4gKwo+ICsJZ2VtX3NldF9kb21haW4oZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwKPiAr CQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgMCk7Cj4gKwo+ICsJbWFwID0gZ2VtX21tYXBf X2d0dChmZCwgYnVmLT5iby0+aGFuZGxlLAo+ICsJCQkgICAgYnVmLT5iby0+c2l6ZSwgUFJPVF9S RUFEKTsKPiArCj4gKwlpZ3RfbWVtY3B5X2Zyb21fd2MobGluZWFyLCBtYXAsIGJ1Zi0+Ym8tPnNp emUpOwo+ICsKPiArCW11bm1hcChtYXAsIGJ1Zi0+Ym8tPnNpemUpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBjb3B5X2xpbmVhcl90b193YyhpbnQgZmQsIHN0cnVjdCBpZ3RfYnVmICpidWYsCj4g KwkJCSAgICAgIHVpbnQzMl90ICpsaW5lYXIpCj4gK3sKPiArCXZvaWQgKm1hcDsKPiArCj4gKwln ZW1fc2V0X2RvbWFpbihmZCwgYnVmLT5iby0+aGFuZGxlLAo+ICsJCSAgICAgICBJOTE1X0dFTV9E T01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKPiArCj4gKwltYXAgPSBnZW1fbW1hcF9f d2MoZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwgMCwKPiArCQkJICAgYnVmLT5iby0+c2l6ZSwgUFJPVF9S RUFEIHwgUFJPVF9XUklURSk7Cj4gKwo+ICsJbWVtY3B5KG1hcCwgbGluZWFyLCBidWYtPmJvLT5z aXplKTsKPiArCj4gKwltdW5tYXAobWFwLCBidWYtPmJvLT5zaXplKTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgY29weV93Y190b19saW5lYXIoaW50IGZkLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAo+ ICsJCQkgICAgICB1aW50MzJfdCAqbGluZWFyKQo+ICt7Cj4gKwl2b2lkICptYXA7Cj4gKwo+ICsJ Z2VtX3NldF9kb21haW4oZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwKPiArCQkgICAgICAgSTkxNV9HRU1f RE9NQUlOX0dUVCwgMCk7Cj4gKwo+ICsJbWFwID0gZ2VtX21tYXBfX3djKGZkLCBidWYtPmJvLT5o YW5kbGUsIDAsCj4gKwkJCSAgIGJ1Zi0+Ym8tPnNpemUsIFBST1RfUkVBRCk7Cj4gKwo+ICsJaWd0 X21lbWNweV9mcm9tX3djKGxpbmVhciwgbWFwLCBidWYtPmJvLT5zaXplKTsKPiArCj4gKwltdW5t YXAobWFwLCBidWYtPmJvLT5zaXplKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY29weV9saW5l YXJfdG9fY3B1KGludCBmZCwgc3RydWN0IGlndF9idWYgKmJ1ZiwKPiArCQkJICAgICAgIHVpbnQz Ml90ICpsaW5lYXIpCj4gK3sKPiArCXZvaWQgKm1hcDsKPiArCj4gKwlnZW1fc2V0X2RvbWFpbihm ZCwgYnVmLT5iby0+aGFuZGxlLAo+ICsJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fQ1BVLCBJOTE1 X0dFTV9ET01BSU5fQ1BVKTsKPiArCj4gKwltYXAgPSBnZW1fbW1hcF9fY3B1KGZkLCBidWYtPmJv LT5oYW5kbGUsIDAsCj4gKwkJCSAgICBidWYtPmJvLT5zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dS SVRFKTsKPiArCj4gKwltZW1jcHkobWFwLCBsaW5lYXIsIGJ1Zi0+Ym8tPnNpemUpOwo+ICsKPiAr CW11bm1hcChtYXAsIGJ1Zi0+Ym8tPnNpemUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjb3B5 X2NwdV90b19saW5lYXIoaW50IGZkLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAo+ICsJCQkgICAgICAg dWludDMyX3QgKmxpbmVhcikKPiArewo+ICsJdm9pZCAqbWFwOwo+ICsKPiArCWdlbV9zZXRfZG9t YWluKGZkLCBidWYtPmJvLT5oYW5kbGUsCj4gKwkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9DUFUs IDApOwo+ICsKPiArCW1hcCA9IGdlbV9tbWFwX19jcHUoZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwgMCwK PiArCQkJICAgIGJ1Zi0+Ym8tPnNpemUsIFBST1RfUkVBRCk7Cj4gKwo+ICsJbWVtY3B5KGxpbmVh ciwgbWFwLCBidWYtPmJvLT5zaXplKTsKPiArCj4gKwltdW5tYXAobWFwLCBidWYtPmJvLT5zaXpl KTsKPiArfQo+ICsKPiArdm9pZCBjb3B5X2J1Zl90b19saW5lYXIoc3RydWN0IGJ1Zl9vcHMgKmJv cHMsIHN0cnVjdCBpZ3RfYnVmICpidWYsCj4gKwkJCXVpbnQzMl90ICpsaW5lYXIpCj4gK3sKPiAr CWlndF9hc3NlcnQoYm9wcyk7Cj4gKwo+ICsJc3dpdGNoIChidWYtPnRpbGluZykgewo+ICsJY2Fz ZSBJOTE1X1RJTElOR19OT05FOgo+ICsJCWlndF9hc3NlcnQoYm9wcy0+dG9fbGluZWFyKTsKPiAr CQlib3BzLT50b19saW5lYXIoYm9wcy0+ZmQsIGJ1ZiwgbGluZWFyKTsKPiArCQlicmVhazsKPiAr CWNhc2UgSTkxNV9USUxJTkdfWDoKPiArCQlpZ3RfYXNzZXJ0KGJvcHMtPnhfdG9fbGluZWFyKTsK PiArCQlib3BzLT54X3RvX2xpbmVhcihib3BzLT5mZCwgYnVmLCBsaW5lYXIpOwo+ICsJCWJyZWFr Owo+ICsJY2FzZSBJOTE1X1RJTElOR19ZOgo+ICsJCWlndF9hc3NlcnQoYm9wcy0+eV90b19saW5l YXIpOwo+ICsJCWJvcHMtPnlfdG9fbGluZWFyKGJvcHMtPmZkLCBidWYsIGxpbmVhcik7Cj4gKwkJ YnJlYWs7Cj4gKwljYXNlIEk5MTVfVElMSU5HX1lmOgo+ICsJCWlndF9hc3NlcnQoYm9wcy0+eWZf dG9fbGluZWFyKTsKPiArCQlib3BzLT55Zl90b19saW5lYXIoYm9wcy0+ZmQsIGJ1ZiwgbGluZWFy KTsKPiArCQlicmVhazsKPiArCWNhc2UgSTkxNV9USUxJTkdfWXM6Cj4gKwkJaWd0X2Fzc2VydChi b3BzLT55c190b19saW5lYXIpOwo+ICsJCWJvcHMtPnlzX3RvX2xpbmVhcihib3BzLT5mZCwgYnVm LCBsaW5lYXIpOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICt9Cj4gKwo+ICt2b2lkIGNvcHlfbGluZWFy X3RvX2J1ZihzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0IGlndF9idWYgKmJ1ZiwKPiArCQkJ dWludDMyX3QgKmxpbmVhcikKPiArewo+ICsJaWd0X2Fzc2VydChib3BzKTsKPiArCj4gKwlzd2l0 Y2ggKGJ1Zi0+dGlsaW5nKSB7Cj4gKwljYXNlIEk5MTVfVElMSU5HX05PTkU6Cj4gKwkJaWd0X2Fz c2VydChib3BzLT5saW5lYXJfdG8pOwo+ICsJCWJvcHMtPmxpbmVhcl90byhib3BzLT5mZCwgYnVm LCBsaW5lYXIpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJOTE1X1RJTElOR19YOgo+ICsJCWlndF9h c3NlcnQoYm9wcy0+bGluZWFyX3RvX3gpOwo+ICsJCWJvcHMtPmxpbmVhcl90b194KGJvcHMtPmZk LCBidWYsIGxpbmVhcik7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEk5MTVfVElMSU5HX1k6Cj4gKwkJ aWd0X2Fzc2VydChib3BzLT5saW5lYXJfdG9feSk7Cj4gKwkJYm9wcy0+bGluZWFyX3RvX3koYm9w cy0+ZmQsIGJ1ZiwgbGluZWFyKTsKPiArCQlicmVhazsKPiArCWNhc2UgSTkxNV9USUxJTkdfWWY6 Cj4gKwkJaWd0X2Fzc2VydChib3BzLT5saW5lYXJfdG9feWYpOwo+ICsJCWJvcHMtPmxpbmVhcl90 b195Zihib3BzLT5mZCwgYnVmLCBsaW5lYXIpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJOTE1X1RJ TElOR19ZczoKPiArCQlpZ3RfYXNzZXJ0KGJvcHMtPmxpbmVhcl90b195cyk7Cj4gKwkJYm9wcy0+ bGluZWFyX3RvX3lzKGJvcHMtPmZkLCBidWYsIGxpbmVhcik7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4g K30KPiArCj4gK3N0cnVjdCBidWZfb3BzIGJ1Zl9vcHNfYXJyW10gPSB7Cj4gKwkvKiBHZW5lcmF0 aW9ucyAwIC0gOCAqLwo+ICt7Cj4gKwkuZ2VuX3N0YXJ0ICAgICAgICAgPSAwLAo+ICsJLmdlbl9l bmQgICAgICAgICAgID0gOCwKPiArCS5zdXBwb3J0ZWRfdGlsZXMgICA9IFRJTEVfTk9ORSB8IFRJ TEVfWCB8IFRJTEVfWSwKPiArCS5od190aWxlcyAgICAgICAgICA9IFRJTEVfWCB8IFRJTEVfWSwK PiArCS5saW5lYXJfdG8gICAgICAgICA9IGNvcHlfbGluZWFyX3RvX2NwdSwKPiArCS5saW5lYXJf dG9feCAgICAgICA9IGNvcHlfbGluZWFyX3RvX2d0dCwKPiArCS5saW5lYXJfdG9feSAgICAgICA9 IGNvcHlfbGluZWFyX3RvX2d0dCwKPiArCS50b19saW5lYXIgICAgICAgICA9IGNvcHlfY3B1X3Rv X2xpbmVhciwKPiArCS54X3RvX2xpbmVhciAgICAgICA9IGNvcHlfZ3R0X3RvX2xpbmVhciwKPiAr CS55X3RvX2xpbmVhciAgICAgICA9IGNvcHlfZ3R0X3RvX2xpbmVhciwKPiArfSwKPiArLyogR2Vu ZXJhdGlvbnMgOSAtIDExICovCj4gK3sKPiArCS5nZW5fc3RhcnQgICAgICAgICA9IDksCj4gKwku Z2VuX2VuZCAgICAgICAgICAgPSAxMSwKPiArCS5zdXBwb3J0ZWRfdGlsZXMgICA9IFRJTEVfTk9O RSB8IFRJTEVfWCB8IFRJTEVfWSB8IFRJTEVfWWYsCj4gKwkuaHdfdGlsZXMgICAgICAgICAgPSBU SUxFX1ggfCBUSUxFX1ksCj4gKwkubGluZWFyX3RvICAgICAgICAgPSBjb3B5X2xpbmVhcl90b19j cHUsCj4gKwkubGluZWFyX3RvX3ggICAgICAgPSBjb3B5X2xpbmVhcl90b19ndHQsCj4gKwkubGlu ZWFyX3RvX3kgICAgICAgPSBjb3B5X2xpbmVhcl90b19ndHQsCj4gKwkubGluZWFyX3RvX3lmICAg ICAgPSBjb3B5X2xpbmVhcl90b195ZiwKPiArCS50b19saW5lYXIgICAgICAgICA9IGNvcHlfY3B1 X3RvX2xpbmVhciwKPiArCS54X3RvX2xpbmVhciAgICAgICA9IGNvcHlfZ3R0X3RvX2xpbmVhciwK PiArCS55X3RvX2xpbmVhciAgICAgICA9IGNvcHlfZ3R0X3RvX2xpbmVhciwKPiArCS55Zl90b19s aW5lYXIgICAgICA9IGNvcHlfeWZfdG9fbGluZWFyLAo+ICt9LAo+ICsvKiBHZW5lcmF0aW9uIDEy ICovCj4gK3sKPiArCS5nZW5fc3RhcnQgICAgICAgICA9IDEyLAo+ICsJLmdlbl9lbmQgICAgICAg ICAgID0gMTIsCj4gKwkuc3VwcG9ydGVkX3RpbGVzICAgPSBUSUxFX05PTkUgfCBUSUxFX1ggfCBU SUxFX1kgfCBUSUxFX1lmIHwgVElMRV9ZcywKPiArCS5saW5lYXJfdG8gICAgICAgICA9IGNvcHlf bGluZWFyX3RvX3djLAo+ICsJLmxpbmVhcl90b194ICAgICAgID0gY29weV9saW5lYXJfdG9feCwK PiArCS5saW5lYXJfdG9feSAgICAgICA9IGNvcHlfbGluZWFyX3RvX3ksCj4gKwkubGluZWFyX3Rv X3lmICAgICAgPSBjb3B5X2xpbmVhcl90b195ZiwKPiArCS5saW5lYXJfdG9feXMgICAgICA9IE5V TEwsICAgICAgICAgICAgICAgLyogdG8gYmUgaW1wbGVtZW50ZWQgKi8KPiArCS50b19saW5lYXIg ICAgICAgICA9IGNvcHlfd2NfdG9fbGluZWFyLAo+ICsJLnhfdG9fbGluZWFyICAgICAgID0gY29w eV94X3RvX2xpbmVhciwKPiArCS55X3RvX2xpbmVhciAgICAgICA9IGNvcHlfeV90b19saW5lYXIs Cj4gKwkueWZfdG9fbGluZWFyICAgICAgPSBjb3B5X3lmX3RvX2xpbmVhciwKPiArCS55c190b19s aW5lYXIgICAgICA9IE5VTEwsICAgICAgICAgICAgICAgLyogdG8gYmUgaW1wbGVtZW50ZWQgKi8K PiArfSwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgX19nZW1fZ2V0X3RpbGluZyhpbnQgZmQsIHN0 cnVjdCBkcm1faTkxNV9nZW1fZ2V0X3RpbGluZyAqYXJnKQo+ICt7Cj4gKwlpbnQgZXJyOwo+ICsK PiArCWVyciA9IDA7Cj4gKwlpZiAoaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRU1fR0VU X1RJTElORywgYXJnKSkKPiArCQllcnIgPSAtZXJybm87Cj4gKwllcnJubyA9IDA7Cj4gKwo+ICsJ cmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgX19nZXRfdGlsaW5nKGludCBmZCwg dWludDMyX3QgaGFuZGxlLCB1aW50MzJfdCAqdGlsaW5nLAo+ICsJCQkgdWludDMyX3QgKnN3aXp6 bGUpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZ2V0X3RpbGluZyBnZXRfdGlsaW5nOwo+ ICsKPiArCW1lbXNldCgmZ2V0X3RpbGluZywgMCwgc2l6ZW9mKGdldF90aWxpbmcpKTsKPiArCWdl dF90aWxpbmcuaGFuZGxlID0gaGFuZGxlOwo+ICsKPiArCWlmIChfX2dlbV9nZXRfdGlsaW5nKGZk LCAmZ2V0X3RpbGluZykgIT0gMCkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJKnRpbGluZyA9 IGdldF90aWxpbmcudGlsaW5nX21vZGU7Cj4gKwkqc3dpenpsZSA9IGdldF90aWxpbmcuc3dpenps ZV9tb2RlOwo+ICsKPiArCXJldHVybiBnZXRfdGlsaW5nLnBoeXNfc3dpenpsZV9tb2RlID09IGdl dF90aWxpbmcuc3dpenpsZV9tb2RlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBwcm9iZV9od190 aWxpbmcoaW50IGZkLCB1aW50MzJfdCB0aWxpbmcpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9n ZW1fc2V0X3RpbGluZyBzdDsKPiArCXVpbnQ2NF90IHNpemUgPSAxMDI0ICogMTAyNDsKPiArCXVp bnQzMl90IGhhbmRsZSwgYnVmX3RpbGluZywgYnVmX3N3aXp6bGU7Cj4gKwl1aW50MzJfdCBzdHJp ZGU7Cj4gKwlpbnQgcmV0Owo+ICsJYm9vbCBpc19zZXQ7Cj4gKwo+ICsJaWYgKHRpbGluZyA9PSBJ OTE1X1RJTElOR19YKQo+ICsJCXN0cmlkZSA9IDUxMjsKPiArCWVsc2UgaWYgKHRpbGluZyA9PSBJ OTE1X1RJTElOR19ZKQo+ICsJCXN0cmlkZSA9IDEyODsKPiArCWVsc2UKPiArCQlyZXR1cm4gZmFs c2U7Cj4gKwo+ICsJaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgc2l6ZSk7Cj4gKwo+ICsJLyogU2lu Z2xlIHNob3QsIGlmIG5vIGZlbmNlcyBhcmUgYXZhaWxhYmxlIHdlIGZhaWwgaW1tZWRpYXRlbHkg Ki8KPiArCXN0LmhhbmRsZSA9IGhhbmRsZTsKPiArCXN0LnRpbGluZ19tb2RlID0gdGlsaW5nOwo+ ICsJc3Quc3RyaWRlID0gdGlsaW5nID8gc3RyaWRlIDogMDsKPiArCXJldCA9IGlvY3RsKGZkLCBE Uk1fSU9DVExfSTkxNV9HRU1fU0VUX1RJTElORywgJnN0KTsKPiArCWlmIChyZXQpCj4gKwkJZ290 byBlbmQ7Cj4gKwo+ICsJaXNfc2V0ID0gX19nZXRfdGlsaW5nKGZkLCBoYW5kbGUsICZidWZfdGls aW5nLCAmYnVmX3N3aXp6bGUpOwo+ICsKPiArZW5kOgo+ICsJZ2VtX2Nsb3NlKGZkLCBoYW5kbGUp Owo+ICsKPiArCXJldHVybiBpc19zZXQ7Cj4gK30KPiArCj4gK3N0cnVjdCBidWZfb3BzICpidWZf b3BzX2dldChpbnQgZmQsIGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1ncikKPiArewo+ICsJc3RydWN0 IGJ1Zl9vcHMgKmJvcHMgPSBjYWxsb2MoMSwgc2l6ZW9mKCpib3BzKSk7Cj4gKwl1aW50MzJfdCBk ZXZpZDsKPiArCWludCBnZW5lcmF0aW9uOwo+ICsKPiArCWlndF9hc3NlcnQoYnVmbWdyKTsKPiAr CWlndF9hc3NlcnQoYm9wcyk7Cj4gKwo+ICsJZGV2aWQgPSBpbnRlbF9nZXRfZHJtX2RldmlkKGZk KTsKPiArCWdlbmVyYXRpb24gPSBpbnRlbF9nZW4oZGV2aWQpOwo+ICsKPiArCS8qIFByZWRlZmlu ZWQgc2V0dGluZ3MgKi8KPiArCWZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShidWZfb3Bz X2Fycik7IGkrKykgewo+ICsJCWlmIChnZW5lcmF0aW9uID49IGJ1Zl9vcHNfYXJyW2ldLmdlbl9z dGFydCAmJgo+ICsJCQkJZ2VuZXJhdGlvbiA8PSBidWZfb3BzX2FycltpXS5nZW5fZW5kKSB7Cj4g KwkJCW1lbWNweShib3BzLCAmYnVmX29wc19hcnJbaV0sIHNpemVvZigqYm9wcykpOwo+ICsJCQli b3BzLT5mZCA9IGZkOwo+ICsJCQlib3BzLT5idWZtZ3IgPSBidWZtZ3I7Cj4gKwkJCWJvcHMtPmlu dGVsX2dlbiA9IGdlbmVyYXRpb247Cj4gKwkJCWlndF9kZWJ1ZygiZ2VuZXJhdGlvbjogJWQsIHN1 cHBvcnRlZCB0aWxlczogMHglMDJ4XG4iLAo+ICsJCQkJICBnZW5lcmF0aW9uLCBib3BzLT5zdXBw b3J0ZWRfdGlsZXMpOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJLyogTGV0J3Mg cHJvYmUgWCBhbmQgWSBodyB0aWxpbmcgc3VwcG9ydCAqLwo+ICsJaWYgKGJvcHMtPmh3X3RpbGVz ICYgVElMRV9YKSB7Cj4gKwkJYm9vbCBzdXBwb3J0ZWQgPSBwcm9iZV9od190aWxpbmcoZmQsIEk5 MTVfVElMSU5HX1gpOwo+ICsKPiArCQlpZ3RfZGVidWcoIlggZmVuY2Ugc3VwcG9ydDogJXNcbiIs IHN1cHBvcnRlZCA/ICJ5ZXMiIDogIm5vIik7Cj4gKwkJaWYgKCFzdXBwb3J0ZWQpIHsKPiArCQkJ Ym9wcy0+aHdfdGlsZXMgJj0gflRJTEVfWDsKPiArCQkJYm9wcy0+bGluZWFyX3RvX3ggPSBjb3B5 X2xpbmVhcl90b194Owo+ICsJCQlib3BzLT54X3RvX2xpbmVhciA9IGNvcHlfeF90b19saW5lYXI7 Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWlmIChib3BzLT5od190aWxlcyAmIFRJTEVfWSkgewo+ICsJ CWJvb2wgc3VwcG9ydGVkID0gcHJvYmVfaHdfdGlsaW5nKGZkLCBJOTE1X1RJTElOR19ZKTsKPiAr Cj4gKwkJaWd0X2RlYnVnKCJZIGZlbmNlIHN1cHBvcnQ6ICVzXG4iLCBzdXBwb3J0ZWQgPyAieWVz IiA6ICJubyIpOwo+ICsJCWlmICghc3VwcG9ydGVkKSB7Cj4gKwkJCWJvcHMtPmh3X3RpbGVzICY9 IH5USUxFX1k7Cj4gKwkJCWJvcHMtPmxpbmVhcl90b195ID0gY29weV9saW5lYXJfdG9feTsKPiAr CQkJYm9wcy0+eV90b19saW5lYXIgPSBjb3B5X3lfdG9fbGluZWFyOwo+ICsJCX0KPiArCX0KPiAr Cj4gKwlpZ3RfYXNzZXJ0KGJvcHMtPmludGVsX2dlbik7Cj4gKwo+ICsJcmV0dXJuIGJvcHM7Cj4g K30KPiArCj4gK3ZvaWQgYnVmX29wc19zd2l0Y2hfdG9fc29md2FyZV90aWxpbmcoc3RydWN0IGJ1 Zl9vcHMgKmJvcHMpCnNvIGZhciBzbyBnb29kIDopIGZpcnN0IHR5cG8gXiBzL3NvZndhcmUvc29m dHdhcmUvCkNoZWNrIGRlY2xhcmF0aW9uIHRvbyA6KQo+ICt7Cj4gKwlpZ3RfZGVidWcoIlN3aXRj aCB0byBzb2Z0d2FyZSB0aWxpbmcvZGV0aWxpbmcgb2YgWC9ZIHN1cmZhY2VzXG4iKTsKPiArCj4g KwlpZ3RfYXNzZXJ0KGJvcHMpOwo+ICsKPiArCWJvcHMtPmh3X3RpbGVzID0gMDsKPiArCWJvcHMt PmxpbmVhcl90b194ID0gY29weV9saW5lYXJfdG9feDsKPiArCWJvcHMtPmxpbmVhcl90b195ID0g Y29weV9saW5lYXJfdG9feTsKPiArCWJvcHMtPnhfdG9fbGluZWFyID0gY29weV94X3RvX2xpbmVh cjsKPiArCWJvcHMtPnlfdG9fbGluZWFyID0gY29weV95X3RvX2xpbmVhcjsKPiArfQo+ICsKPiAr Ym9vbCBidWZfb3BzX2hhc19od19mZW5jZShzdHJ1Y3QgYnVmX29wcyAqYm9wcywgdWludDMyX3Qg dGlsaW5nKQo+ICt7Cj4gKwl1aW50MzJfdCB0aWxlX21hc2sgPSAoMSA8PCB0aWxpbmcpOwo+ICsK PiArCWlndF9hc3NlcnQoYm9wcyk7Cj4gKwo+ICsJaWYgKHRpbGVfbWFzayAmIGJvcHMtPmh3X3Rp bGVzKQo+ICsJCXJldHVybiB0cnVlOwo+ICsKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiAr Ym9vbCBidWZfb3BzX2hhc190aWxpbmdfc3VwcG9ydChzdHJ1Y3QgYnVmX29wcyAqYm9wcywgdWlu dDMyX3QgdGlsaW5nKQo+ICt7Cj4gKwl1aW50MzJfdCB0aWxlX21hc2sgPSAoMSA8PCB0aWxpbmcp Owo+ICsKPiArCWlndF9hc3NlcnQoYm9wcyk7Cj4gKwo+ICsJaWYgKHRpbGVfbWFzayAmIGJvcHMt PnN1cHBvcnRlZF90aWxlcykKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCj4gKwlyZXR1cm4gZmFsc2U7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYnVmX2F1eF93aWR0aChpbnQgZ2VuLCBjb25zdCBzdHJ1 Y3QgaWd0X2J1ZiAqYnVmKQo+ICt7Cj4gKwkvKgo+ICsJICogR0VOMTIrOiBUaGUgQVVYIENDUyB1 bml0IHNpemUgaXMgNjQgYnl0ZXMgbWFwcGluZyA0IG1haW4gc3VyZmFjZQo+ICsJICogdGlsZXMu IFRodXMgdGhlIHdpZHRoIG9mIHRoZSBDQ1MgdW5pdCBpcyA0KjMyPTEyOCBwaXhlbHMgb24gdGhl Cj4gKwkgKiBtYWluIHN1cmZhY2UuCj4gKwkgKi8KPiArCWlmIChnZW4gPj0gMTIpCj4gKwkJcmV0 dXJuIERJVl9ST1VORF9VUChpZ3RfYnVmX3dpZHRoKGJ1ZiksIDEyOCkgKiA2NDsKPiArCj4gKwly ZXR1cm4gRElWX1JPVU5EX1VQKGlndF9idWZfd2lkdGgoYnVmKSwgMTAyNCkgKiAxMjg7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgYnVmX2F1eF9oZWlnaHQoaW50IGdlbiwgY29uc3Qgc3RydWN0IGln dF9idWYgKmJ1ZikKPiArewo+ICsJLyoKPiArCSAqIEdFTjEyKzogVGhlIEFVWCBDQ1MgdW5pdCBz aXplIGlzIDY0IGJ5dGVzIG1hcHBpbmcgNCBtYWluIHN1cmZhY2UKPiArCSAqIHRpbGVzLiBUaHVz IHRoZSBoZWlnaHQgb2YgdGhlIENDUyB1bml0IGlzIDMyIHBpeGVsIHJvd3Mgb24gdGhlIG1haW4K PiArCSAqIHN1cmZhY2UuCj4gKwkgKi8KPiArCWlmIChnZW4gPj0gMTIpCj4gKwkJcmV0dXJuIERJ Vl9ST1VORF9VUChpZ3RfYnVmX2hlaWdodChidWYpLCAzMik7Cj4gKwo+ICsJcmV0dXJuIERJVl9S T1VORF9VUChpZ3RfYnVmX2hlaWdodChidWYpLCA1MTIpICogMzI7Cj4gK30KPiArCj4gK3ZvaWQg aWd0X2J1Zl9pbml0KHN0cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAo+ ICsJCSAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgYnBwLAo+ICsJCSAgdWludDMyX3QgcmVx X3RpbGluZywgYm9vbCBjY3MpCj4gK3sKPiArCXVpbnQzMl90IHRpbGluZyA9IHJlcV90aWxpbmc7 Cj4gKwlib29sIHN1cHBvcnRzX2h3X2ZlbmNlczsKPiArCj4gKwlpZ3RfYXNzZXJ0KGJvcHMpOwo+ ICsKPiArCXN1cHBvcnRzX2h3X2ZlbmNlcyA9IGJ1Zl9vcHNfaGFzX2h3X2ZlbmNlKGJvcHMsIHJl cV90aWxpbmcpOwo+ICsKPiArCW1lbXNldChidWYsIDAsIHNpemVvZigqYnVmKSk7Cj4gKwo+ICsJ aWYgKGNjcykgewo+ICsJCWludCBhdXhfd2lkdGgsIGF1eF9oZWlnaHQ7Cj4gKwkJaW50IHNpemU7 Cj4gKwo+ICsJCWlndF9yZXF1aXJlKGJvcHMtPmludGVsX2dlbiA+PSA5KTsKPiArCQlpZ3RfYXNz ZXJ0KHJlcV90aWxpbmcgPT0gSTkxNV9USUxJTkdfWSB8fAo+ICsJCQkgICByZXFfdGlsaW5nID09 IEk5MTVfVElMSU5HX1lmKTsKPiArCj4gKwkJLyoKPiArCQkgKiBPbiBHRU4xMisgd2UgYWxpZ24g dGhlIG1haW4gc3VyZmFjZSB0byA0ICogNCBtYWluIHN1cmZhY2UKPiArCQkgKiB0aWxlcywgd2hp Y2ggaXMgNjRrQi4gVGhlc2UgMTYgdGlsZXMgYXJlIG1hcHBlZCBieSA0IEFVWAo+ICsJCSAqIEND UyB1bml0cywgdGhhdCBpcyA0ICogNjQgYnl0ZXMuIFRoZXNlIDQgQ0NTIHVuaXRzIGFyZSBpbgo+ ICsJCSAqIHR1cm4gbWFwcGVkIGJ5IG9uZSBMMSBBVVggcGFnZSB0YWJsZSBlbnRyeS4KPiArCQkg Ki8KPiArCQlpZiAoYm9wcy0+aW50ZWxfZ2VuID49IDEyKQo+ICsJCQlidWYtPnN0cmlkZSA9IEFM SUdOKHdpZHRoICogKGJwcCAvIDgpLCAxMjggKiA0KTsKPiArCQllbHNlCj4gKwkJCWJ1Zi0+c3Ry aWRlID0gQUxJR04od2lkdGggKiAoYnBwIC8gOCksIDEyOCk7Cj4gKwo+ICsJCWlmIChib3BzLT5p bnRlbF9nZW4gPj0gMTIpCj4gKwkJCWhlaWdodCA9IEFMSUdOKGhlaWdodCwgNCAqIDMyKTsKPiAr Cj4gKwkJYnVmLT5zaXplID0gYnVmLT5zdHJpZGUgKiBoZWlnaHQ7Cj4gKwkJYnVmLT50aWxpbmcg PSB0aWxpbmc7Cj4gKwkJYnVmLT5icHAgPSBicHA7Cj4gKwo+ICsJCWF1eF93aWR0aCA9IGJ1Zl9h dXhfd2lkdGgoYm9wcy0+aW50ZWxfZ2VuLCBidWYpOwo+ICsJCWF1eF9oZWlnaHQgPSBidWZfYXV4 X2hlaWdodChib3BzLT5pbnRlbF9nZW4sIGJ1Zik7Cj4gKwo+ICsJCWJ1Zi0+YXV4Lm9mZnNldCA9 IGJ1Zi0+c3RyaWRlICogQUxJR04oaGVpZ2h0LCAzMik7Cj4gKwkJYnVmLT5hdXguc3RyaWRlID0g YXV4X3dpZHRoOwo+ICsKPiArCQlzaXplID0gYnVmLT5hdXgub2Zmc2V0ICsgYXV4X3dpZHRoICog YXV4X2hlaWdodDsKPiArCj4gKwkJYnVmLT5ibyA9IGRybV9pbnRlbF9ib19hbGxvYyhib3BzLT5i dWZtZ3IsICIiLCBzaXplLCA0MDk2KTsKPiArCj4gKwkJaWYgKHRpbGluZyA9PSBJOTE1X1RJTElO R19ZICYmIHN1cHBvcnRzX2h3X2ZlbmNlcykgewo+ICsJCQlkcm1faW50ZWxfYm9fc2V0X3RpbGlu ZyhidWYtPmJvLCAmdGlsaW5nLCBidWYtPnN0cmlkZSk7Cj4gKwkJCWlndF9hc3NlcnRfZXEodGls aW5nLCByZXFfdGlsaW5nKTsKPiArCQl9Cj4gKwl9IGVsc2Ugewo+ICsJCS8qIFJlcXVlc3RlZCBi byBtdXN0IGJlIGh3IHRpbGVkICovCj4gKwkJaWYgKHN1cHBvcnRzX2h3X2ZlbmNlcykgewo+ICsJ CQl1bnNpZ25lZCBsb25nIHBpdGNoOwo+ICsKPiArCQkJYnVmLT5ibyA9IGRybV9pbnRlbF9ib19h bGxvY190aWxlZChib3BzLT5idWZtZ3IsICIiLAo+ICsJCQkJCQkJICAgd2lkdGgsIGhlaWdodCwK PiArCQkJCQkJCSAgIGJwcCAvIDgsCj4gKwkJCQkJCQkgICAmdGlsaW5nLCAmcGl0Y2gsIDApOwo+ ICsJCQlpZ3RfYXNzZXJ0X2VxKHRpbGluZywgcmVxX3RpbGluZyk7Cj4gKwkJCWlndF9hc3NlcnQo YnVmLT5ibyk7Cj4gKwo+ICsJCQlidWYtPnN0cmlkZSA9IHBpdGNoOwo+ICsJCQlidWYtPnRpbGlu ZyA9IHRpbGluZzsKPiArCQkJYnVmLT5zaXplID0gcGl0Y2ggKiBoZWlnaHQ7Cj4gKwkJCWJ1Zi0+ YnBwID0gYnBwOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCS8qIFVzZSBibyBhbGxvYyBhbmQgc29mdHdh cmUgdGlsaW5nL2RldGlsaW5nICovCj4gKwkJCWludCBzaXplOwo+ICsKPiArCQkJYnVmLT5zdHJp ZGUgPSBBTElHTih3aWR0aCAqIChicHAgLyA4KSwgMTI4KTsKPiArCQkJYnVmLT5zaXplID0gYnVm LT5zdHJpZGUgKiBoZWlnaHQ7Cj4gKwkJCWJ1Zi0+dGlsaW5nID0gdGlsaW5nOwo+ICsJCQlidWYt PmJwcCA9IGJwcDsKPiArCj4gKwkJCXNpemUgPSBidWYtPnN0cmlkZSAqIEFMSUdOKGhlaWdodCwg MzIpOwo+ICsKPiArCQkJYnVmLT5ibyA9IGRybV9pbnRlbF9ib19hbGxvYyhib3BzLT5idWZtZ3Is ICIiLCBzaXplLAo+ICsJCQkJCQkgICAgIDQwOTYpOwo+ICsJCQlpZ3RfYXNzZXJ0KGJ1Zi0+Ym8p Owo+ICsJCX0KPiArCX0KPiArfQo+IGRpZmYgLS1naXQgYS9saWIvaW50ZWxfYnVmb3BzLmggYi9s aWIvaW50ZWxfYnVmb3BzLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAw Li5lNTNjNmViYwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWIvaW50ZWxfYnVmb3BzLmgKPiBA QCAtMCwwICsxLDI0IEBACj4gKyNpZm5kZWYgX19JTlRFTF9CVUZPUFNfSF9fCj4gKyNkZWZpbmUg X19JTlRFTF9CVUZPUFNfSF9fCj4gKwo+ICsjaW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZmZXIuaCIK PiArCj4gK3N0cnVjdCBidWZfb3BzOwo+ICsKPiArc3RydWN0IGJ1Zl9vcHMgKmJ1Zl9vcHNfZ2V0 KGludCBmZCwgZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyKTsKPiArdm9pZCBidWZfb3BzX3N3aXRj aF90b19zb2Z3YXJlX3RpbGluZyhzdHJ1Y3QgYnVmX29wcyAqYm9wcyk7Cj4gKwo+ICt2b2lkIGNv cHlfYnVmX3RvX2xpbmVhcihzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0IGlndF9idWYgKmJ1 ZiwKPiArCQkJdWludDMyX3QgKmxpbmVhcik7Cj4gKwo+ICt2b2lkIGNvcHlfbGluZWFyX3RvX2J1 ZihzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0IGlndF9idWYgKmJ1ZiwKPiArCQkJdWludDMy X3QgKmxpbmVhcik7Cj4gKwo+ICtib29sIGJ1Zl9vcHNfaGFzX2h3X2ZlbmNlKHN0cnVjdCBidWZf b3BzICpib3BzLCB1aW50MzJfdCB0aWxpbmcpOwo+ICtib29sIGJ1Zl9vcHNfaGFzX3RpbGluZ19z dXBwb3J0KHN0cnVjdCBidWZfb3BzICpib3BzLCB1aW50MzJfdCB0aWxpbmcpOwo+ICsKPiArdm9p ZCBpZ3RfYnVmX2luaXQoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpZ3RfYnVmICpidWYs Cj4gKwkJICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBicHAsCj4gKwkJICB1aW50MzJfdCBy ZXFfdGlsaW5nLCBib29sIGNjcyk7Cj4gKwo+ICsjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvbGliL21l c29uLmJ1aWxkIGIvbGliL21lc29uLmJ1aWxkCj4gaW5kZXggM2Y5MDg5MTIuLmE4OGMzZTg5IDEw MDY0NAo+IC0tLSBhL2xpYi9tZXNvbi5idWlsZAo+ICsrKyBiL2xpYi9tZXNvbi5idWlsZAo+IEBA IC0yNiw2ICsyNiw3IEBAIGxpYl9zb3VyY2VzID0gWwo+ICAJJ2lndF94ODYuYycsCj4gIAknaW5z dGRvbmUuYycsCj4gIAknaW50ZWxfYmF0Y2hidWZmZXIuYycsCj4gKwknaW50ZWxfYnVmb3BzLmMn LAo+ICAJJ2ludGVsX2NoaXBzZXQuYycsCj4gIAknaW50ZWxfZGV2aWNlX2luZm8uYycsCj4gIAkn aW50ZWxfb3MuYycsCj4gLS0gCj4gMi4yMy4wCj4KSHVnZSBhbmQgcXVpdGUgaW1wb3J0YW50IGZ1 bmN0aW9ucyBpbnRyb2R1Y2VkIQpLYXNpYQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2lndC1kZXY=