From mboxrd@z Thu Jan 1 00:00:00 1970 From: Imre Deak Subject: Re: [PATCH v2 9/9] drm/i915: Add render decompression support Date: Tue, 7 Feb 2017 17:37:44 +0200 Message-ID: <20170207153744.GA30805@ideak-desk.fi.intel.com> References: <20170104184232.23048-10-ville.syrjala@linux.intel.com> <20170105151454.12862-1-ville.syrjala@linux.intel.com> Reply-To: imre.deak@intel.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20170105151454.12862-1-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: ville.syrjala@linux.intel.com Cc: Ben Widawsky , Paulo Zanoni , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Vandana Kannan List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBKYW4gMDUsIDIwMTcgYXQgMDU6MTQ6NTRQTSArMDIwMCwgdmlsbGUuc3lyamFsYUBs aW51eC5pbnRlbC5jb20gd3JvdGU6Cj4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJq YWxhQGxpbnV4LmludGVsLmNvbT4KPiAKPiBTS0wrIGRpc3BsYXkgZW5naW5lIGNhbiBzY2FuIG91 dCBjZXJ0YWluIGtpbmRzIG9mIGNvbXByZXNzZWQgc3VyZmFjZXMKPiBwcm9kdWNlZCBieSB0aGUg cmVuZGVyIGVuZ2luZS4gVGhpcyBpbnZvbHZlZCB0ZWxsaW5nIHRoZSBkaXNwbGF5IGVuZ2luZQo+ IHRoZSBsb2NhdGlvbiBvZiB0aGUgY29sb3IgY29udHJvbCBzdXJmYWUgKENDUykgd2hpY2ggZGVz Y3JpYmVzCj4gd2hpY2ggcGFydHMgb2YgdGhlIG1haW4gc3VyZmFjZSBhcmUgY29tcHJlc3NlZCBh bmQgd2hpY2ggYXJlIG5vdC4gVGhlCj4gbG9jYXRpb24gb2YgQ0NTIGlzIHByb3ZpZGVkIGJ5IHVz ZXJzcGFjZSBhcyBqdXN0IGFub3RoZXIgcGxhbmUgd2l0aCBpdHMKPiBvd24gb2Zmc2V0Lgo+IAo+ IEFkZCB0aGUgcmVxdWlyZWQgc3R1ZmYgdG8gdmFsaWRhdGUgdGhlIHVzZXIgcHJvdmlkZWQgQVVY IHBsYW5lIG1ldGFkYXRhCj4gYW5kIGNvbnZlcnQgdGhlIHVzZXIgcHJvdmlkZWQgbGluZWFyIG9m ZnNldCBpbnRvIHNvbWV0aGluZyB0aGUgaGFyZHdhcmUKPiBjYW4gY29uc3VtZS4KPiAKPiBEdWUg dG8gaGFyZHdhcmUgbGltaXRhdGlvbnMgd2UgcmVxdWlyZSB0aGF0IHRoZSBtYWluIHN1cmZhY2Ug YW5kCj4gdGhlIEFVWCBzdXJmYWNlIChDQ1MpIGJlIHBhcnQgb2YgdGhlIHNhbWUgYm8uIFRoZSBo YXJkd2FyZSBhbHNvCj4gbWFrZXMgbGlmZSBoYXJkIGJ5IG5vdCBhbGxvd2luZyB5b3UgdG8gcHJv dmlkZSBzZXBhcmF0ZSB4L3kgb2Zmc2V0cwo+IGZvciB0aGUgbWFpbiBhbmQgQVVYIHN1cmZhY2Vz IChleGNwZXQgd2l0aCBOVjEyKSwgc28gZmluZGluZyBzdWl0YWJsZQo+IG9mZnNldHMgZm9yIGJv dGggcmVxdWlyZXMgYSBiaXQgb2Ygd29yay4gQXNzdW1pbmcgd2Ugc3RpbGwgd2FudCBrZWVwCj4g cGxheWluZyB0cmlja3Mgd2l0aCB0aGUgb2Zmc2V0cy4gSSd2ZSBqdXN0IGdvbmUgd2l0aCBhIGR1 bWIgInNlYXJjaAo+IGJhY2t3YXJkIGZvciBzdWl0YWJsZSBvZmZzZXRzIiBhcHByb2FjaCwgd2hp Y2ggaXMgZmFyIGZyb20gb3B0aW1hbCwKPiBidXQgaXQgd29ya3MuCj4gCj4gQWxzbyBub3QgYWxs IHBsYW5lcyB3aWxsIGJlIGNhcGFibGUgb2Ygc2Nhbm5pbmcgb3V0IGNvbXByZXNzZWQgc3VyZmFj ZXMsCj4gYW5kIGVnLiA5MC8yNzAgZGVncmVlIHJvdGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaW4g Y29tYmluYXRpb24gd2l0aAo+IGRlY29tcHJlc3Npb24gZWl0aGVyLgo+IAo+IFRoaXMgcGF0Y2gg bWF5IGNvbnRhaW4gd29yayBmcm9tIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgcGVvcGxlOgo+ICog VmFuZGFuYSBLYW5uYW4gPHZhbmRhbmEua2FubmFuQGludGVsLmNvbT4KPiAqIERhbmllbCBWZXR0 ZXIgPGRhbmllbEBmZndsbC5jaD4KPiAqIEJlbiBXaWRhd3NreSA8YmVuQGJ3aWRhd3NrLm5ldD4K PiAKPiB2MjogRGVhbCB3aXRoIGRpc3BsYXkgd29ya2Fyb3VuZHMgMDM5MCwgMDUzMSwgMTEyNSAo UGF1bG8pCj4gCj4gQ2M6IFBhdWxvIFphbm9uaSA8cGF1bG8uci56YW5vbmlAaW50ZWwuY29tPgo+ IENjOiBWYW5kYW5hIEthbm5hbiA8dmFuZGFuYS5rYW5uYW5AaW50ZWwuY29tPgo+IENjOiBEYW5p ZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+Cj4gQ2M6IEJlbiBXaWRhd3NreSA8YmVuQGJ3aWRh d3NrLm5ldD4KPiBDYzogSmFzb24gRWtzdHJhbmQgPGphc29uQGpsZWtzdHJhbmQubmV0Pgo+IFNp Z25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5j b20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggICAgICB8ICAyMyAr KysrCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyB8IDIzNCArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKy0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9wbS5jICAgICAgfCAgMjkgKysrKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3By aXRlLmMgIHwgICA1ICsKPiAgNCBmaWxlcyBjaGFuZ2VkLCAyNzQgaW5zZXJ0aW9ucygrKSwgMTcg ZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf cmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gaW5kZXggMDA5NzBhYTc3 YWZhLi42ODQ5YmE5M2YxZDkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9yZWcuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiBAQCAtNjIw OSw2ICs2MjA5LDI4IEBAIGVudW0gewo+ICAJCQlfSUQoaWQsIF9QU19FQ0NfU1RBVF8xQSwgX1BT X0VDQ19TVEFUXzJBKSwgICBcCj4gIAkJCV9JRChpZCwgX1BTX0VDQ19TVEFUXzFCLCBfUFNfRUND X1NUQVRfMkIpKQo+ICAKPiArI2RlZmluZSBQTEFORV9BVVhfRElTVF8xX0EJCTB4NzAxYzAKPiAr I2RlZmluZSBQTEFORV9BVVhfRElTVF8yX0EJCTB4NzAyYzAKPiArI2RlZmluZSBQTEFORV9BVVhf RElTVF8xX0IJCTB4NzExYzAKPiArI2RlZmluZSBQTEFORV9BVVhfRElTVF8yX0IJCTB4NzEyYzAK PiArI2RlZmluZSBfUExBTkVfQVVYX0RJU1RfMShwaXBlKSBcCj4gKwkJCV9QSVBFKHBpcGUsIFBM QU5FX0FVWF9ESVNUXzFfQSwgUExBTkVfQVVYX0RJU1RfMV9CKQo+ICsjZGVmaW5lIF9QTEFORV9B VVhfRElTVF8yKHBpcGUpIFwKPiArCQkJX1BJUEUocGlwZSwgUExBTkVfQVVYX0RJU1RfMl9BLCBQ TEFORV9BVVhfRElTVF8yX0IpCj4gKyNkZWZpbmUgUExBTkVfQVVYX0RJU1QocGlwZSwgcGxhbmUp ICAgICBcCj4gKwlfTU1JT19QTEFORShwbGFuZSwgX1BMQU5FX0FVWF9ESVNUXzEocGlwZSksIF9Q TEFORV9BVVhfRElTVF8yKHBpcGUpKQo+ICsKPiArI2RlZmluZSBQTEFORV9BVVhfT0ZGU0VUXzFf QQkJMHg3MDFjNAo+ICsjZGVmaW5lIFBMQU5FX0FVWF9PRkZTRVRfMl9BCQkweDcwMmM0Cj4gKyNk ZWZpbmUgUExBTkVfQVVYX09GRlNFVF8xX0IJCTB4NzExYzQKPiArI2RlZmluZSBQTEFORV9BVVhf T0ZGU0VUXzJfQgkJMHg3MTJjNAo+ICsjZGVmaW5lIF9QTEFORV9BVVhfT0ZGU0VUXzEocGlwZSkg ICAgICAgXAo+ICsJCV9QSVBFKHBpcGUsIFBMQU5FX0FVWF9PRkZTRVRfMV9BLCBQTEFORV9BVVhf T0ZGU0VUXzFfQikKPiArI2RlZmluZSBfUExBTkVfQVVYX09GRlNFVF8yKHBpcGUpICAgICAgIFwK PiArCQlfUElQRShwaXBlLCBQTEFORV9BVVhfT0ZGU0VUXzJfQSwgUExBTkVfQVVYX09GRlNFVF8y X0IpCj4gKyNkZWZpbmUgUExBTkVfQVVYX09GRlNFVChwaXBlLCBwbGFuZSkgICBcCj4gKwlfTU1J T19QTEFORShwbGFuZSwgX1BMQU5FX0FVWF9PRkZTRVRfMShwaXBlKSwgX1BMQU5FX0FVWF9PRkZT RVRfMihwaXBlKSkKPiArCj4gIC8qIGxlZ2FjeSBwYWxldHRlICovCj4gICNkZWZpbmUgX0xHQ19Q QUxFVFRFX0EgICAgICAgICAgIDB4NGEwMDAKPiAgI2RlZmluZSBfTEdDX1BBTEVUVEVfQiAgICAg ICAgICAgMHg0YTgwMAo+IEBAIC02NDMzLDYgKzY0NTUsNyBAQCBlbnVtIHsKPiAgIyBkZWZpbmUg Q0hJQ0tFTjNfREdNR19ET05FX0ZJWF9ESVNBQkxFCQkoMSA8PCAyKQo+ICAKPiAgI2RlZmluZSBD SElDS0VOX1BBUjFfMQkJX01NSU8oMHg0MjA4MCkKPiArI2RlZmluZSAgU0tMX1JDX0hBU0hfT1VU U0lERQkoMSA8PCAxNSkKPiAgI2RlZmluZSAgRFBBX01BU0tfVkJMQU5LX1NSRAkoMSA8PCAxNSkK PiAgI2RlZmluZSAgRk9SQ0VfQVJCX0lETEVfUExBTkVTCSgxIDw8IDE0KQo+ICAjZGVmaW5lICBT S0xfRURQX1BTUl9GSVhfUkRXUkFQCSgxIDw8IDMpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rp c3BsYXkuYwo+IGluZGV4IDM4ZGU5ZGYwZWM2MC4uMjIzNmFiZWJkOGJjIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+IEBAIC0yMDY0LDExICsyMDY0LDE5IEBAIGludGVs X3RpbGVfd2lkdGhfYnl0ZXMoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBw bGFuZSkKPiAgCQkJcmV0dXJuIDEyODsKPiAgCQllbHNlCj4gIAkJCXJldHVybiA1MTI7Cj4gKwlj YXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKPiArCQlpZiAocGxhbmUgPT0gMSkKPiAr CQkJcmV0dXJuIDY0Owo+ICsJCS8qIGZhbGwgdGhyb3VnaCAqLwo+ICAJY2FzZSBJOTE1X0ZPUk1B VF9NT0RfWV9USUxFRDoKPiAgCQlpZiAoSVNfR0VOMihkZXZfcHJpdikgfHwgSEFTXzEyOF9CWVRF X1lfVElMSU5HKGRldl9wcml2KSkKPiAgCQkJcmV0dXJuIDEyODsKPiAgCQllbHNlCj4gIAkJCXJl dHVybiA1MTI7Cj4gKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6Cj4gKwkJaWYg KHBsYW5lID09IDEpCj4gKwkJCXJldHVybiA2NDsKPiArCQkvKiBmYWxsIHRocm91Z2ggKi8KPiAg CWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgo+ICAJCS8qCj4gIAkJICogQnNwZWMgc2Vl bXMgdG8gc3VnZ2VzdCB0aGF0IHRoZSBZZiB0aWxlIHdpZHRoIHdvdWxkCj4gQEAgLTIxNTYsNyAr MjE2NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfc3VyZl9hbGlnbm1lbnQoY29uc3Qg c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KGZiLT5kZXYpOwo+ICAKPiAgCS8qIEFVWF9ESVNUIG5lZWRzIG9u bHkgNEsgYWxpZ25tZW50ICovCj4gLQlpZiAoZmItPmZvcm1hdC0+Zm9ybWF0ID09IERSTV9GT1JN QVRfTlYxMiAmJiBwbGFuZSA9PSAxKQo+ICsJaWYgKHBsYW5lID09IDEpCj4gIAkJcmV0dXJuIDQw OTY7Cj4gIAo+ICAJc3dpdGNoIChmYi0+bW9kaWZpZXIpIHsKPiBAQCAtMjE2Niw2ICsyMTc0LDgg QEAgc3RhdGljIHVuc2lnbmVkIGludCBpbnRlbF9zdXJmX2FsaWdubWVudChjb25zdCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiwKPiAgCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQo+ ICAJCQlyZXR1cm4gMjU2ICogMTAyNDsKPiAgCQlyZXR1cm4gMDsKPiArCWNhc2UgSTkxNV9GT1JN QVRfTU9EX1lfVElMRURfQ0NTOgo+ICsJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NT Ogo+ICAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKPiAgCWNhc2UgSTkxNV9GT1JNQVRf TU9EX1lmX1RJTEVEOgo+ICAJCXJldHVybiAxICogMTAyNCAqIDEwMjQ7Cj4gQEAgLTI0NzIsNiAr MjQ4Miw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfZmJfbW9kaWZpZXJfdG9fdGlsaW5n KHVpbnQ2NF90IGZiX21vZGlmaWVyKQo+ICAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoK PiAgCQlyZXR1cm4gSTkxNV9USUxJTkdfWDsKPiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElM RUQ6Cj4gKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKPiAgCQlyZXR1cm4gSTkx NV9USUxJTkdfWTsKPiAgCWRlZmF1bHQ6Cj4gIAkJcmV0dXJuIEk5MTVfVElMSU5HX05PTkU7Cj4g QEAgLTI1MzYsNiArMjU0NywzNSBAQCBpbnRlbF9maWxsX2ZiX2luZm8oc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAo+ICAKPiAgCQlpbnRlbF9mYl9vZmZzZXRfdG9feHkoJngsICZ5 LCBmYiwgaSk7Cj4gIAo+ICsJCWlmICgoZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9Z X1RJTEVEX0NDUyB8fAo+ICsJCSAgICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9Z Zl9USUxFRF9DQ1MpICYmIGkgPT0gMSkgewo+ICsJCQlpbnQgbWFpbl94LCBtYWluX3k7Cj4gKwkJ CWludCBjY3NfeCwgY2NzX3k7Cj4gKwo+ICsJCQkvKgo+ICsJCQkgKiBFYWNoIGJ5dGUgb2YgQ0NT IGNvcnJlc3BvbmRzIHRvIGEgMTZ4OCBhcmVhIG9mIHRoZSBtYWluIHN1cmZhY2UsIGFuZAo+ICsJ CQkgKiBlYWNoIENDUyB0aWxlIGlzIDY0eDY0IGJ5dGVzLgo+ICsJCQkgKi8KPiArCQkJY2NzX3gg PSAoeCAqIDE2KSAlICg2NCAqIDE2KTsKPiArCQkJY2NzX3kgPSAoeSAqIDgpICUgKDY0ICogOCk7 Cj4gKwkJCW1haW5feCA9IGludGVsX2ZiLT5ub3JtYWxbMF0ueCAlICg2NCAqIDE2KTsKPiArCQkJ bWFpbl95ID0gaW50ZWxfZmItPm5vcm1hbFswXS55ICUgKDY0ICogOCk7Cj4gKwo+ICsJCQkvKgo+ ICsJCQkgKiBDQ1MgZG9lc24ndCBoYXZlIGl0cyBvd24geC95IG9mZnNldCByZWdpc3Rlciwgc28g dGhlIGludHJhIENDUyB0aWxlCj4gKwkJCSAqIHgveSBvZmZzZXRzIG11c3QgbWF0Y2ggYmV0d2Vl biBDQ1MgYW5kIHRoZSBtYWluIHN1cmZhY2UuCj4gKwkJCSAqLwo+ICsJCQlpZiAobWFpbl94ICE9 IGNjc194IHx8IG1haW5feSAhPSBjY3NfeSkgewo+ICsJCQkJRFJNX0RFQlVHX0tNUygiQmFkIEND UyB4L3kgKG1haW4gJWQsJWQgY2NzICVkLCVkKSBmdWxsIChtYWluICVkLCVkIGNjcyAlZCwlZClc biIsCj4gKwkJCQkJICAgICAgbWFpbl94LCBtYWluX3ksCj4gKwkJCQkJICAgICAgY2NzX3gsIGNj c195LAo+ICsJCQkJCSAgICAgIGludGVsX2ZiLT5ub3JtYWxbMF0ueCwKPiArCQkJCQkgICAgICBp bnRlbF9mYi0+bm9ybWFsWzBdLnksCj4gKwkJCQkJICAgICAgeCwgeSk7Cj4gKwkJCQlyZXR1cm4g LUVJTlZBTDsKPiArCQkJfQo+ICsJCX0KPiArCj4gIAkJLyoKPiAgCQkgKiBUaGUgZmVuY2UgKGlm IHVzZWQpIGlzIGFsaWduZWQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBvYmplY3QKPiAgCQkgKiBzbyBo YXZpbmcgdGhlIGZyYW1lYnVmZmVyIHdyYXAgYXJvdW5kIGFjcm9zcyB0aGUgZWRnZSBvZiB0aGUK PiBAQCAtMjg3Myw2ICsyOTEzLDkgQEAgc3RhdGljIGludCBza2xfbWF4X3BsYW5lX3dpZHRoKGNv bnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUsCj4gIAkJCWJyZWFrOwo+ ICAJCX0KPiAgCQlicmVhazsKPiArCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTOgo+ ICsJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOgo+ICsJCS8qIEZJWE1FIEFVWCBw bGFuZT8gKi8KPiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6Cj4gIAljYXNlIEk5MTVf Rk9STUFUX01PRF9ZZl9USUxFRDoKPiAgCQlzd2l0Y2ggKGNwcCkgewo+IEBAIC0yODk1LDYgKzI5 MzgsNDIgQEAgc3RhdGljIGludCBza2xfbWF4X3BsYW5lX3dpZHRoKGNvbnN0IHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUsCj4gIAlyZXR1cm4gMjA0ODsKPiAgfQo+ICAKPiAr c3RhdGljIGJvb2wgc2tsX2NoZWNrX21haW5fY2NzX2Nvb3JkaW5hdGVzKHN0cnVjdCBpbnRlbF9w bGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCj4gKwkJCQkJICAgaW50IG1haW5feCwgaW50IG1haW5f eSwgdTMyIG1haW5fb2Zmc2V0KQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOwo+ICsJaW50IGF1eF94ID0gcGxhbmVfc3RhdGUt PmF1eC54Owo+ICsJaW50IGF1eF95ID0gcGxhbmVfc3RhdGUtPmF1eC55Owo+ICsJdTMyIGF1eF9v ZmZzZXQgPSBwbGFuZV9zdGF0ZS0+YXV4Lm9mZnNldDsKPiArCXUzMiBhbGlnbm1lbnQgPSBpbnRl bF9zdXJmX2FsaWdubWVudChmYiwgMSk7Cj4gKwo+ICsJd2hpbGUgKGF1eF9vZmZzZXQgPj0gbWFp bl9vZmZzZXQgJiYgYXV4X3kgPD0gbWFpbl95KSB7Cj4gKwkJaW50IHgsIHk7Cj4gKwo+ICsJCWlm IChhdXhfeCA9PSBtYWluX3ggJiYgYXV4X3kgPT0gbWFpbl95KQo+ICsJCQlicmVhazsKPiArCj4g KwkJaWYgKGF1eF9vZmZzZXQgPT0gMCkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCXggPSBhdXhfeCAv IDE2Owo+ICsJCXkgPSBhdXhfeSAvIDg7Cj4gKwkJYXV4X29mZnNldCA9IGludGVsX2FkanVzdF90 aWxlX29mZnNldCgmeCwgJnksIHBsYW5lX3N0YXRlLCAxLAo+ICsJCQkJCQkgICAgICBhdXhfb2Zm c2V0LCBhdXhfb2Zmc2V0IC0gYWxpZ25tZW50KTsKPiArCQlhdXhfeCA9IHggKiAxNiArIGF1eF94 ICUgMTY7Cj4gKwkJYXV4X3kgPSB5ICogOCArIGF1eF95ICUgODsKPiArCX0KPiArCj4gKwlpZiAo YXV4X3ggIT0gbWFpbl94IHx8IGF1eF95ICE9IG1haW5feSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4g Kwo+ICsJcGxhbmVfc3RhdGUtPmF1eC5vZmZzZXQgPSBhdXhfb2Zmc2V0Owo+ICsJcGxhbmVfc3Rh dGUtPmF1eC54ID0gYXV4X3g7Cj4gKwlwbGFuZV9zdGF0ZS0+YXV4LnkgPSBhdXhfeTsKPiArCj4g KwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiAgc3RhdGljIGludCBza2xfY2hlY2tfbWFpbl9zdXJm YWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gIHsKPiAgCWNvbnN0 IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmJhc2UuZmI7Cj4gQEAg LTI5MzcsNyArMzAxNiw3IEBAIHN0YXRpYyBpbnQgc2tsX2NoZWNrX21haW5fc3VyZmFjZShzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ICAKPiAgCQl3aGlsZSAoKHggKyB3 KSAqIGNwcCA+IGZiLT5waXRjaGVzWzBdKSB7Cj4gIAkJCWlmIChvZmZzZXQgPT0gMCkgewo+IC0J CQkJRFJNX0RFQlVHX0tNUygiVW5hYmxlIHRvIGZpbmQgc3VpdGFibGUgZGlzcGxheSBzdXJmYWNl IG9mZnNldFxuIik7Cj4gKwkJCQlEUk1fREVCVUdfS01TKCJVbmFibGUgdG8gZmluZCBzdWl0YWJs ZSBkaXNwbGF5IHN1cmZhY2Ugb2Zmc2V0IGR1ZSB0byBYLXRpbGluZ1xuIik7Cj4gIAkJCQlyZXR1 cm4gLUVJTlZBTDsKPiAgCQkJfQo+ICAKPiBAQCAtMjk0Niw2ICszMDI1LDI2IEBAIHN0YXRpYyBp bnQgc2tsX2NoZWNrX21haW5fc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlKQo+ICAJCX0KPiAgCX0KPiAgCj4gKwkvKgo+ICsJICogQ0NTIEFVWCBzdXJmYWNlIGRv ZXNuJ3QgaGF2ZSBpdHMgb3duIHgveSBvZmZzZXRzLCB3ZSBtdXN0IG1ha2Ugc3VyZQo+ICsJICog dGhleSBtYXRjaCB3aXRoIHRoZSBtYWluIHN1cmZhY2UgeC95IG9mZnNldHMuCj4gKwkgKi8KPiAr CWlmIChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTIHx8Cj4gKwkg ICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1MpIHsKPiArCQl3 aGlsZSAoIXNrbF9jaGVja19tYWluX2Njc19jb29yZGluYXRlcyhwbGFuZV9zdGF0ZSwgeCwgeSwg b2Zmc2V0KSkgewo+ICsJCQlpZiAob2Zmc2V0ID09IDApCj4gKwkJCQlicmVhazsKPiArCj4gKwkJ CW9mZnNldCA9IGludGVsX2FkanVzdF90aWxlX29mZnNldCgmeCwgJnksIHBsYW5lX3N0YXRlLCAw LAo+ICsJCQkJCQkJICBvZmZzZXQsIG9mZnNldCAtIGFsaWdubWVudCk7Cj4gKwkJfQo+ICsKPiAr CQlpZiAoeCAhPSBwbGFuZV9zdGF0ZS0+YXV4LnggfHwgeSAhPSBwbGFuZV9zdGF0ZS0+YXV4Lnkp IHsKPiArCQkJRFJNX0RFQlVHX0tNUygiVW5hYmxlIHRvIGZpbmQgc3VpdGFibGUgZGlzcGxheSBz dXJmYWNlIG9mZnNldCBkdWUgdG8gQ0NTXG4iKTsKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJ fQo+ICsJfQo+ICsKPiAgCXBsYW5lX3N0YXRlLT5tYWluLm9mZnNldCA9IG9mZnNldDsKPiAgCXBs YW5lX3N0YXRlLT5tYWluLnggPSB4Owo+ICAJcGxhbmVfc3RhdGUtPm1haW4ueSA9IHk7Cj4gQEAg LTI5ODIsNiArMzA4MSw0NyBAQCBzdGF0aWMgaW50IHNrbF9jaGVja19udjEyX2F1eF9zdXJmYWNl KHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gIAlyZXR1cm4gMDsKPiAg fQo+ICAKPiArc3RhdGljIGludCBza2xfY2hlY2tfY2NzX2F1eF9zdXJmYWNlKHN0cnVjdCBpbnRl bF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9wbGFuZSAq cGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0ZS0+YmFzZS5wbGFuZSk7Cj4gKwlzdHJ1 Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMocGxhbmVfc3RhdGUtPmJhc2UuY3J0 Yyk7Cj4gKwlpbnQgc3JjX3ggPSBwbGFuZV9zdGF0ZS0+YmFzZS5zcmMueDEgPj4gMTY7Cj4gKwlp bnQgc3JjX3kgPSBwbGFuZV9zdGF0ZS0+YmFzZS5zcmMueTEgPj4gMTY7Cj4gKwlpbnQgeCA9IHNy Y194IC8gMTY7Cj4gKwlpbnQgeSA9IHNyY195IC8gODsKPiArCXUzMiBvZmZzZXQ7Cj4gKwo+ICsJ c3dpdGNoIChwbGFuZS0+aWQpIHsKPiArCWNhc2UgUExBTkVfUFJJTUFSWToKPiArCWNhc2UgUExB TkVfU1BSSVRFMDoKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJRFJNX0RFQlVHX0tNUygi UkMgc3VwcG9ydCBvbmx5IG9uIHBsYW5lIDEgYW5kIDJcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFM Owo+ICsJfQo+ICsKPiArCWlmIChjcnRjLT5waXBlID09IFBJUEVfQykgewo+ICsJCURSTV9ERUJV R19LTVMoIk5vIFJDIHN1cHBvcnQgb24gcGlwZSBDXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsK PiArCX0KPiArCj4gKwlpZiAocGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb24gJiYKPiArCSAgICBw bGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbiAmIH4oRFJNX1JPVEFURV8wIHwgRFJNX1JPVEFURV8x ODApKSB7Cj4gKwkJRFJNX0RFQlVHX0tNUygiUkMgc3VwcG9ydCBvbmx5IHdpdGggMC8xODAgZGVn cmVlIHJvdGF0aW9uICV4XG4iLAo+ICsJCQkgICAgICBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlv bik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaW50ZWxfYWRkX2ZiX29mZnNl dHMoJngsICZ5LCBwbGFuZV9zdGF0ZSwgMSk7Cj4gKwlvZmZzZXQgPSBpbnRlbF9jb21wdXRlX3Rp bGVfb2Zmc2V0KCZ4LCAmeSwgcGxhbmVfc3RhdGUsIDEpOwo+ICsKPiArCXBsYW5lX3N0YXRlLT5h dXgub2Zmc2V0ID0gb2Zmc2V0Owo+ICsJcGxhbmVfc3RhdGUtPmF1eC54ID0geCAqIDE2ICsgc3Jj X3ggJSAxNjsKPiArCXBsYW5lX3N0YXRlLT5hdXgueSA9IHkgKiA4ICsgc3JjX3kgJSA4Owo+ICsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICBpbnQgc2tsX2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiAgewo+ICAJY29uc3Qgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5mYjsKPiBAQCAtMzAwMiw2 ICszMTQyLDExIEBAIGludCBza2xfY2hlY2tfcGxhbmVfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxh bmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ICAJCXJldCA9IHNrbF9jaGVja19udjEyX2F1eF9zdXJm YWNlKHBsYW5lX3N0YXRlKTsKPiAgCQlpZiAocmV0KQo+ICAJCQlyZXR1cm4gcmV0Owo+ICsJfSBl bHNlIGlmIChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTIHx8Cj4g KwkJICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1MpIHsKPiAr CQlyZXQgPSBza2xfY2hlY2tfY2NzX2F1eF9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKPiArCQlpZiAo cmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ICAJfSBlbHNlIHsKPiAgCQlwbGFuZV9zdGF0ZS0+YXV4 Lm9mZnNldCA9IH4weGZmZjsKPiAgCQlwbGFuZV9zdGF0ZS0+YXV4LnggPSAwOwo+IEBAIC0zMzU3 LDggKzM1MDIsMTIgQEAgdTMyIHNrbF9wbGFuZV9jdGxfdGlsaW5nKHVpbnQ2NF90IGZiX21vZGlm aWVyKQo+ICAJCXJldHVybiBQTEFORV9DVExfVElMRURfWDsKPiAgCWNhc2UgSTkxNV9GT1JNQVRf TU9EX1lfVElMRUQ6Cj4gIAkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZOwo+ICsJY2FzZSBJOTE1 X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6Cj4gKwkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZIHwg UExBTkVfQ1RMX0RFQ09NUFJFU1NJT05fRU5BQkxFOwo+ICAJY2FzZSBJOTE1X0ZPUk1BVF9NT0Rf WWZfVElMRUQ6Cj4gIAkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZRjsKPiArCWNhc2UgSTkxNV9G T1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKPiArCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1lGIHwg UExBTkVfQ1RMX0RFQ09NUFJFU1NJT05fRU5BQkxFOwo+ICAJZGVmYXVsdDoKPiAgCQlNSVNTSU5H X0NBU0UoZmJfbW9kaWZpZXIpOwo+ICAJfQo+IEBAIC0zNDAxLDYgKzM1NTAsNyBAQCBzdGF0aWMg dm9pZCBza3lsYWtlX3VwZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LAo+ICAJdTMyIHBsYW5lX2N0bDsKPiAgCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0 YXRlLT5iYXNlLnJvdGF0aW9uOwo+ICAJdTMyIHN0cmlkZSA9IHNrbF9wbGFuZV9zdHJpZGUoZmIs IDAsIHJvdGF0aW9uKTsKPiArCXUzMiBhdXhfc3RyaWRlID0gc2tsX3BsYW5lX3N0cmlkZShmYiwg MSwgcm90YXRpb24pOwo+ICAJdTMyIHN1cmZfYWRkciA9IHBsYW5lX3N0YXRlLT5tYWluLm9mZnNl dDsKPiAgCWludCBzY2FsZXJfaWQgPSBwbGFuZV9zdGF0ZS0+c2NhbGVyX2lkOwo+ICAJaW50IHNy Y194ID0gcGxhbmVfc3RhdGUtPm1haW4ueDsKPiBAQCAtMzQzNiw2ICszNTg2LDEwIEBAIHN0YXRp YyB2b2lkIHNreWxha2VfdXBkYXRlX3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxh bmUsCj4gIAlJOTE1X1dSSVRFKFBMQU5FX09GRlNFVChwaXBlLCBwbGFuZV9pZCksIChzcmNfeSA8 PCAxNikgfCBzcmNfeCk7Cj4gIAlJOTE1X1dSSVRFKFBMQU5FX1NUUklERShwaXBlLCBwbGFuZV9p ZCksIHN0cmlkZSk7Cj4gIAlJOTE1X1dSSVRFKFBMQU5FX1NJWkUocGlwZSwgcGxhbmVfaWQpLCAo c3JjX2ggPDwgMTYpIHwgc3JjX3cpOwo+ICsJSTkxNV9XUklURShQTEFORV9BVVhfRElTVChwaXBl LCBwbGFuZV9pZCksCj4gKwkJICAgKHBsYW5lX3N0YXRlLT5hdXgub2Zmc2V0IC0gc3VyZl9hZGRy KSB8IGF1eF9zdHJpZGUpOwo+ICsJSTkxNV9XUklURShQTEFORV9BVVhfT0ZGU0VUKHBpcGUsIHBs YW5lX2lkKSwKPiArCQkgICAocGxhbmVfc3RhdGUtPmF1eC55IDw8IDE2KSB8IHBsYW5lX3N0YXRl LT5hdXgueCk7Cj4gIAo+ICAJaWYgKHNjYWxlcl9pZCA+PSAwKSB7Cj4gIAkJdWludDMyX3QgcHNf Y3RybCA9IDA7Cj4gQEAgLTk4MDcsMTAgKzk5NjEsMTYgQEAgc2t5bGFrZV9nZXRfaW5pdGlhbF9w bGFuZV9jb25maWcoc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gIAkJZmItPm1vZGlmaWVyID0g STkxNV9GT1JNQVRfTU9EX1hfVElMRUQ7Cj4gIAkJYnJlYWs7Cj4gIAljYXNlIFBMQU5FX0NUTF9U SUxFRF9ZOgo+IC0JCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOwo+ICsJ CWlmICh2YWwgJiBQTEFORV9DVExfREVDT01QUkVTU0lPTl9FTkFCTEUpCj4gKwkJCWZiLT5tb2Rp ZmllciA9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzsKPiArCQllbHNlCj4gKwkJCWZiLT5t b2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOwo+ICAJCWJyZWFrOwo+ICAJY2FzZSBQ TEFORV9DVExfVElMRURfWUY6Cj4gLQkJZmItPm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1lm X1RJTEVEOwo+ICsJCWlmICh2YWwgJiBQTEFORV9DVExfREVDT01QUkVTU0lPTl9FTkFCTEUpCj4g KwkJCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M7Cj4gKwkJZWxz ZQo+ICsJCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ7Cj4gIAkJYnJl YWs7Cj4gIAlkZWZhdWx0Ogo+ICAJCU1JU1NJTkdfQ0FTRSh0aWxpbmcpOwo+IEBAIC0xMjAxNCw3 ICsxMjE3NCw3IEBAIHN0YXRpYyB2b2lkIHNrbF9kb19tbWlvX2ZsaXAoc3RydWN0IGludGVsX2Ny dGMgKmludGVsX2NydGMsCj4gIAl1MzIgY3RsLCBzdHJpZGUgPSBza2xfcGxhbmVfc3RyaWRlKGZi LCAwLCByb3RhdGlvbik7Cj4gIAo+ICAJY3RsID0gSTkxNV9SRUFEKFBMQU5FX0NUTChwaXBlLCAw KSk7Cj4gLQljdGwgJj0gflBMQU5FX0NUTF9USUxFRF9NQVNLOwo+ICsJY3RsICY9IH4oUExBTkVf Q1RMX1RJTEVEX01BU0sgfCBQTEFORV9DVExfREVDT01QUkVTU0lPTl9FTkFCTEUpOwo+ICAJc3dp dGNoIChmYi0+bW9kaWZpZXIpIHsKPiAgCWNhc2UgRFJNX0ZPUk1BVF9NT0RfTk9ORToKPiAgCQli cmVhazsKPiBAQCAtMTIwMjQsOSArMTIxODQsMTUgQEAgc3RhdGljIHZvaWQgc2tsX2RvX21taW9f ZmxpcChzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywKPiAgCWNhc2UgSTkxNV9GT1JNQVRf TU9EX1lfVElMRUQ6Cj4gIAkJY3RsIHw9IFBMQU5FX0NUTF9USUxFRF9ZOwo+ICAJCWJyZWFrOwo+ ICsJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6Cj4gKwkJY3RsIHw9IFBMQU5FX0NU TF9USUxFRF9ZIHwgUExBTkVfQ1RMX0RFQ09NUFJFU1NJT05fRU5BQkxFOwo+ICsJCWJyZWFrOwo+ ICAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ6Cj4gIAkJY3RsIHw9IFBMQU5FX0NUTF9U SUxFRF9ZRjsKPiAgCQlicmVhazsKPiArCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0ND UzoKPiArCQljdGwgfD0gUExBTkVfQ1RMX1RJTEVEX1lGIHwgUExBTkVfQ1RMX0RFQ09NUFJFU1NJ T05fRU5BQkxFOwo+ICsJCWJyZWFrOwo+ICAJZGVmYXVsdDoKPiAgCQlNSVNTSU5HX0NBU0UoZmIt Pm1vZGlmaWVyKTsKPiAgCX0KPiBAQCAtMTU5MjUsOSArMTYwOTEsMTAgQEAgc3RhdGljIGludCBp bnRlbF9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAkJCQkgIHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiArCXN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiID0gJmludGVsX2ZiLT5iYXNlOwo+ICAJdW5zaWduZWQgaW50IHRpbGluZyA9IGk5MTVf Z2VtX29iamVjdF9nZXRfdGlsaW5nKG9iaik7Cj4gLQlpbnQgcmV0Owo+IC0JdTMyIHBpdGNoX2xp bWl0LCBzdHJpZGVfYWxpZ25tZW50Owo+ICsJaW50IHJldCwgaTsKPiArCXUzMiBwaXRjaF9saW1p dDsKPiAgCXN0cnVjdCBkcm1fZm9ybWF0X25hbWVfYnVmIGZvcm1hdF9uYW1lOwo+ICAKPiAgCVdB Uk5fT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKPiBAQCAtMTU5NTMs NiArMTYxMjAsMTkgQEAgc3RhdGljIGludCBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCj4gIAo+ICAJLyogUGFzc2VkIGluIG1vZGlmaWVyIHNhbml0eSBjaGVj a2luZy4gKi8KPiAgCXN3aXRjaCAobW9kZV9jbWQtPm1vZGlmaWVyWzBdKSB7Cj4gKwljYXNlIEk5 MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKPiArCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJ TEVEX0NDUzoKPiArCQlzd2l0Y2ggKG1vZGVfY21kLT5waXhlbF9mb3JtYXQpIHsKPiArCQljYXNl IERSTV9GT1JNQVRfWEJHUjg4ODg6Cj4gKwkJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4Ogo+ICsJ CWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKPiArCQljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6 Cj4gKwkJCWJyZWFrOwo+ICsJCWRlZmF1bHQ6Cj4gKwkJCURSTV9ERUJVR19LTVMoIlJDIHN1cHBv cnRlZCBvbmx5IHdpdGggUkdCODg4OCBmb3JtYXRzXG4iKTsKPiArCQkJcmV0dXJuIC1FSU5WQUw7 Cj4gKwkJfQo+ICsJCS8qIGZhbGwgdGhyb3VnaCAqLwo+ICAJY2FzZSBJOTE1X0ZPUk1BVF9NT0Rf WV9USUxFRDoKPiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgo+ICAJCWlmIChJTlRF TF9HRU4oZGV2X3ByaXYpIDwgOSkgewo+IEBAIC0xNjA1OSwyMiArMTYyMzksNDYgQEAgc3RhdGlj IGludCBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAlp ZiAobW9kZV9jbWQtPm9mZnNldHNbMF0gIT0gMCkKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCj4g LQlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoZGV2LCAmaW50ZWxfZmItPmJhc2UsIG1v ZGVfY21kKTsKPiArCWRybV9oZWxwZXJfbW9kZV9maWxsX2ZiX3N0cnVjdChkZXYsIGZiLCBtb2Rl X2NtZCk7Cj4gIAo+IC0Jc3RyaWRlX2FsaWdubWVudCA9IGludGVsX2ZiX3N0cmlkZV9hbGlnbm1l bnQoJmludGVsX2ZiLT5iYXNlLCAwKTsKPiAtCWlmIChtb2RlX2NtZC0+cGl0Y2hlc1swXSAmIChz dHJpZGVfYWxpZ25tZW50IC0gMSkpIHsKPiAtCQlEUk1fREVCVUdfS01TKCJwaXRjaCAoJWQpIG11 c3QgYmUgYXQgbGVhc3QgJXUgYnl0ZSBhbGlnbmVkXG4iLAo+IC0JCQkgICAgICBtb2RlX2NtZC0+ cGl0Y2hlc1swXSwgc3RyaWRlX2FsaWdubWVudCk7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwlm b3IgKGkgPSAwOyBpIDwgZmItPmZvcm1hdC0+bnVtX3BsYW5lczsgaSsrKSB7Cj4gKwkJdTMyIHN0 cmlkZV9hbGlnbm1lbnQ7Cj4gKwo+ICsJCWlmIChtb2RlX2NtZC0+aGFuZGxlc1tpXSAhPSBtb2Rl X2NtZC0+aGFuZGxlc1swXSkgewo+ICsJCQlEUk1fREVCVUdfS01TKCJiYWQgcGxhbmUgJWQgaGFu ZGxlXG4iLCBpKTsKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICsKPiArCQlzdHJpZGVf YWxpZ25tZW50ID0gaW50ZWxfZmJfc3RyaWRlX2FsaWdubWVudChmYiwgaSk7Cj4gKwo+ICsJCS8q Cj4gKwkJICogRGlzcGxheSBXQSAjMDUzMTogc2tsLGJ4dCxrYmwsZ2xrCj4gKwkJICoKPiArCQkg KiBSZW5kZXIgZGVjb21wcmVzc2lvbiBhbmQgcGxhbmUgd2lkdGggPiAzODQwCj4gKwkJICogY29t YmluZWQgd2l0aCBob3Jpem9udGFsIHBhbm5pbmcgcmVxdWlyZXMgdGhlCj4gKwkJICogcGxhbmUg c3RyaWRlIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4gV2UnbGwganVzdAo+ICsJCSAqIHJlcXVpcmUg dGhlIGVudGlyZSBmYiB0byBhY2NvbW1vZGF0ZSB0aGF0IHRvIGF2b2lkCj4gKwkJICogcG90ZW50 aWFsIHJ1bnRpbWUgZXJyb3JzIGF0IHBsYW5lIGNvbmZpZ3VyYXRpb24gdGltZS4KPiArCQkgKi8K PiArCQlpZiAoSVNfR0VOOShkZXZfcHJpdikgJiYgaSA9PSAwICYmIGZiLT53aWR0aCA+IDM4NDAg JiYKPiArCQkgICAgKGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1Mg fHwKPiArCQkgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NT KSkKPiArCQkJc3RyaWRlX2FsaWdubWVudCAqPSA0Owo+ICsKPiArCQlpZiAoZmItPnBpdGNoZXNb aV0gJiAoc3RyaWRlX2FsaWdubWVudCAtIDEpKSB7Cj4gKwkJCURSTV9ERUJVR19LTVMoInBsYW5l ICVkIHBpdGNoICglZCkgbXVzdCBiZSBhdCBsZWFzdCAldSBieXRlIGFsaWduZWRcbiIsCj4gKwkJ CQkgICAgICBpLCBmYi0+cGl0Y2hlc1tpXSwgc3RyaWRlX2FsaWdubWVudCk7Cj4gKwkJCXJldHVy biAtRUlOVkFMOwo+ICsJCX0KPiAgCX0KPiAgCj4gIAlpbnRlbF9mYi0+b2JqID0gb2JqOwo+ICAK PiAtCXJldCA9IGludGVsX2ZpbGxfZmJfaW5mbyhkZXZfcHJpdiwgJmludGVsX2ZiLT5iYXNlKTsK PiArCXJldCA9IGludGVsX2ZpbGxfZmJfaW5mbyhkZXZfcHJpdiwgZmIpOwo+ICAJaWYgKHJldCkK PiAgCQlyZXR1cm4gcmV0Owo+ICAKPiAtCXJldCA9IGRybV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwg JmludGVsX2ZiLT5iYXNlLCAmaW50ZWxfZmJfZnVuY3MpOwo+ICsJcmV0ID0gZHJtX2ZyYW1lYnVm ZmVyX2luaXQoZGV2LCBmYiwgJmludGVsX2ZiX2Z1bmNzKTsKPiAgCWlmIChyZXQpIHsKPiAgCQlE Uk1fRVJST1IoImZyYW1lYnVmZmVyIGluaXQgZmFpbGVkICVkXG4iLCByZXQpOwo+ICAJCXJldHVy biByZXQ7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gaW5kZXggMjQ5NjIzZDQ1YmUwLi4yNTc4 MmNkMTc0YzAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKPiBAQCAtNjIsNiArNjIsMjAg QEAgc3RhdGljIHZvaWQgZ2VuOV9pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCj4gIAlJOTE1X1dSSVRFKENISUNLRU5fUEFSMV8xLAo+ICAJCSAgIEk5 MTVfUkVBRChDSElDS0VOX1BBUjFfMSkgfCBTS0xfRURQX1BTUl9GSVhfUkRXUkFQKTsKPiAgCj4g KwkvKgo+ICsJICogRGlzcGxheSBXQSMwMzkwOiBza2wsYnh0LGtibCxnbGsKPiArCSAqCj4gKwkg KiBNdXN0IG1hdGNoIFNhbXBsZXIsIFBpeGVsIEJhY2sgRW5kLCBhbmQgTWVkaWEKPiArCSAqICgw eEUxOTQgYml0IDgsIDB4NzAxNCBiaXQgMTMsIDB4NEREQyBiaXRzIDI3IGFuZCAzMSkuCj4gKwkg Kgo+ICsJICogSW5jbHVkaW5nIGJpdHMgb3V0c2lkZSB0aGUgcGFnZSBpbiB0aGUgaGFzaCB3b3Vs ZAo+ICsJICogcmVxdWlyZSAyIChvciA0PykgTWlCIGFsaWdubWVudCBvZiByZXNvdXJjZXMuIEp1 c3QKPiArCSAqIGFzc3VtZSB0aGUgZGVmYXVsIGhhc2hpbmcgbW9kZSB3aGljaCBvbmx5IHVzZXMg Yml0cwo+ICsJICogd2l0aGluIHRoZSBwYWdlLgo+ICsJICovCj4gKwlJOTE1X1dSSVRFKENISUNL RU5fUEFSMV8xLAo+ICsJCSAgIEk5MTVfUkVBRChDSElDS0VOX1BBUjFfMSkgJiB+U0tMX1JDX0hB U0hfT1VUU0lERSk7Cj4gKwo+ICAJSTkxNV9XUklURShHRU44X0NPTkZJRzAsCj4gIAkJICAgSTkx NV9SRUFEKEdFTjhfQ09ORklHMCkgfCBHRU45X0RFRkFVTFRfRklYRVMpOwo+ICAKPiBAQCAtMzMx NCw3ICszMzI4LDkgQEAgc2tsX2RkYl9taW5fYWxsb2MoY29uc3Qgc3RydWN0IGRybV9wbGFuZV9z dGF0ZSAqcHN0YXRlLAo+ICAKPiAgCS8qIEZvciBOb24gWS10aWxlIHJldHVybiA4LWJsb2NrcyAq Lwo+ICAJaWYgKGZiLT5tb2RpZmllciAhPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCAmJgo+IC0J ICAgIGZiLT5tb2RpZmllciAhPSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQpCj4gKwkgICAgZmIt Pm1vZGlmaWVyICE9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRCAmJgo+ICsJICAgIGZiLT5tb2Rp ZmllciAhPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MgJiYKPiArCSAgICBmYi0+bW9kaWZp ZXIgIT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUykKPiAgCQlyZXR1cm4gODsKPiAgCj4g IAlzcmNfdyA9IGRybV9yZWN0X3dpZHRoKCZpbnRlbF9wc3RhdGUtPmJhc2Uuc3JjKSA+PiAxNjsK PiBAQCAtMzU5MCw3ICszNjA2LDkgQEAgc3RhdGljIGludCBza2xfY29tcHV0ZV9wbGFuZV93bShj b25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAl9Cj4gIAo+ICAJeV90 aWxlZCA9IGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCB8fAo+IC0JCSAg ZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDsKPiArCQkgIGZiLT5tb2Rp ZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQgfHwKPiArCQkgIGZiLT5tb2RpZmllciA9 PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MgfHwKPiArCQkgIGZiLT5tb2RpZmllciA9PSBJ OTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOwo+ICAJeF90aWxlZCA9IGZiLT5tb2RpZmllciA9 PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDsKPiAgCj4gIAkvKiBEaXNwbGF5IFdBICMxMTQxOiBr YmwuICovCj4gQEAgLTM2NzUsNiArMzY5MywxMyBAQCBzdGF0aWMgaW50IHNrbF9jb21wdXRlX3Bs YW5lX3dtKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgCXJlc19s aW5lcyA9IERJVl9ST1VORF9VUChzZWxlY3RlZF9yZXN1bHQudmFsLAo+ICAJCQkJIHBsYW5lX2Js b2Nrc19wZXJfbGluZS52YWwpOwo+ICAKPiArCS8qIERpc3BsYXkgV0EgIzExMjU6IHNrbCxieHQs a2JsLGdsayAqLwo+ICsJaWYgKGxldmVsID09IDAgJiYKPiArCSAgICAoZmItPm1vZGlmaWVyID09 IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUyB8fAo+ICsJICAgICBmYi0+bW9kaWZpZXIgPT0g STkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUykpCj4gKwkJcmVzX2Jsb2NrcyArPSBmaXhlZF8x Nl8xNl90b191MzJfcm91bmRfdXAoeV90aWxlX21pbmltdW0pOwoKVGhpcyBXQSBhbHNvIHJlcXVp cmVzIGFkanVzdGluZyByZXNfbGluZXMgYW5kIG1ha2luZyB0aGUgbGV2ZWwgMApyZXNfYmxvY2tz IGFuZCByZXNfbGluZXMgdGhlIG1pbmltdW0gZm9yIHRoZSBoaWdoZXIgbGV2ZWxzLgpUaGUgbGV2 ZWwgMCByZXNfbGluZXMgd29uJ3QgYmUgdXNlZCB0aG91Z2ggbGF0ZXIgYW5kIHRoZSBtaW5pbXVt IGNvdWxkCmJlIGd1YXJhbnRlZWQgYWxyZWFkeSBieSB0aGUgaGlnaGVyIG1lbW9yeSBsYXRlbmN5 IHZhbHVlcyBmb3IgaGlnaGVyCmxldmVscy4gSW4gYW55IGNhc2UgdGhpcyBjaGVjayBjYW4gYmUg YWRkZWQgbGF0ZXIgaWYgbmVlZGVkLiBUaGUgcmVzdApsb29rcyBnb29kOgpSZXZpZXdlZC1ieTog SW1yZSBEZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPgoKPiArCj4gKwkvKiBEaXNwbGF5IFdBICMx MTI2OiBza2wsYnh0LGtibCxnbGsgKi8KPiAgCWlmIChsZXZlbCA+PSAxICYmIGxldmVsIDw9IDcp IHsKPiAgCQlpZiAoeV90aWxlZCkgewo+ICAJCQlyZXNfYmxvY2tzICs9IGZpeGVkXzE2XzE2X3Rv X3UzMl9yb3VuZF91cCh5X3RpbGVfbWluaW11bSk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3By aXRlLmMKPiBpbmRleCA3MDMxYmM3MzNkOTcuLjA2M2E5OTQ4MTVkMCAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3Nwcml0ZS5jCj4gQEAgLTIxMCw2ICsyMTAsNyBAQCBza2xfdXBkYXRlX3Bs YW5lKHN0cnVjdCBkcm1fcGxhbmUgKmRybV9wbGFuZSwKPiAgCXUzMiBzdXJmX2FkZHIgPSBwbGFu ZV9zdGF0ZS0+bWFpbi5vZmZzZXQ7Cj4gIAl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9z dGF0ZS0+YmFzZS5yb3RhdGlvbjsKPiAgCXUzMiBzdHJpZGUgPSBza2xfcGxhbmVfc3RyaWRlKGZi LCAwLCByb3RhdGlvbik7Cj4gKwl1MzIgYXV4X3N0cmlkZSA9IHNrbF9wbGFuZV9zdHJpZGUoZmIs IDEsIHJvdGF0aW9uKTsKPiAgCWludCBjcnRjX3ggPSBwbGFuZV9zdGF0ZS0+YmFzZS5kc3QueDE7 Cj4gIAlpbnQgY3J0Y195ID0gcGxhbmVfc3RhdGUtPmJhc2UuZHN0LnkxOwo+ICAJdWludDMyX3Qg Y3J0Y193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT5iYXNlLmRzdCk7Cj4gQEAgLTI0 OCw2ICsyNDksMTAgQEAgc2tsX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcm1fcGxh bmUsCj4gIAlJOTE1X1dSSVRFKFBMQU5FX09GRlNFVChwaXBlLCBwbGFuZV9pZCksICh5IDw8IDE2 KSB8IHgpOwo+ICAJSTkxNV9XUklURShQTEFORV9TVFJJREUocGlwZSwgcGxhbmVfaWQpLCBzdHJp ZGUpOwo+ICAJSTkxNV9XUklURShQTEFORV9TSVpFKHBpcGUsIHBsYW5lX2lkKSwgKHNyY19oIDw8 IDE2KSB8IHNyY193KTsKPiArCUk5MTVfV1JJVEUoUExBTkVfQVVYX0RJU1QocGlwZSwgcGxhbmVf aWQpLAo+ICsJCSAgIChwbGFuZV9zdGF0ZS0+YXV4Lm9mZnNldCAtIHN1cmZfYWRkcikgfCBhdXhf c3RyaWRlKTsKPiArCUk5MTVfV1JJVEUoUExBTkVfQVVYX09GRlNFVChwaXBlLCBwbGFuZV9pZCks Cj4gKwkJICAgKHBsYW5lX3N0YXRlLT5hdXgueSA8PCAxNikgfCBwbGFuZV9zdGF0ZS0+YXV4Lngp Owo+ICAKPiAgCS8qIHByb2dyYW0gcGxhbmUgc2NhbGVyICovCj4gIAlpZiAocGxhbmVfc3RhdGUt PnNjYWxlcl9pZCA+PSAwKSB7Cj4gLS0gCj4gMi4xMC4yCj4gCj4gX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4g ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=