From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH v2 1/5] drm/i915: extract fixed point math to i915_fixed.h Date: Tue, 20 Nov 2018 13:11:01 +0200 Message-ID: <87ftvwf1h6.fsf@intel.com> References: <20181116120729.7580-1-jani.nikula@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id DDEC56E0D4 for ; Tue, 20 Nov 2018 11:10:30 +0000 (UTC) In-Reply-To: <20181116120729.7580-1-jani.nikula@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCAxNiBOb3YgMjAxOCwgSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGludGVsLmNvbT4g d3JvdGU6Cj4gUmVkdWNlIGJsb2F0IGluIG9uZSBvZiB0aGUgYmlnZ2VyIGhlYWRlciBmaWxlcy4g Rml4IHNvbWUgaW5kZW50YXRpb24KPiB3aGlsZSBhdCBpdC4gTm8gZnVuY3Rpb25hbCBjaGFuZ2Vz Lgo+Cj4gdjI6IEFkZCBpbmNsdWRlIGd1YXJkcyAoSm9vbmFzKQo+Cj4gUmV2aWV3ZWQtYnk6IEpv b25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4LmludGVsLmNvbT4KPiBTaWduZWQt b2ZmLWJ5OiBKYW5pIE5pa3VsYSA8amFuaS5uaWt1bGFAaW50ZWwuY29tPgoKUHVzaGVkIHRoZSBz ZXJpZXMsIHRoYW5rcyBmb3IgdGhlIHJldmlldy4KCkJSLApKYW5pLgoKPiAtLS0KPiAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgIHwgMTM5ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZml4ZWQuaCB8IDE0NyAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAyIGZpbGVzIGNoYW5nZWQs IDE0OCBpbnNlcnRpb25zKCspLCAxMzggZGVsZXRpb25zKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2ZpeGVkLmgKPgo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaAo+IGluZGV4IGQ2OWI3MWQzNjhkMy4uOWMyNTk3YTI3ODRjIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oCj4gQEAgLTU0LDYgKzU0LDcgQEAKPiAgI2luY2x1ZGUgPGRybS9kcm1fY2Fj aGUuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fdXRpbC5oPgo+ICAKPiArI2luY2x1ZGUgImk5MTVf Zml4ZWQuaCIKPiAgI2luY2x1ZGUgImk5MTVfcGFyYW1zLmgiCj4gICNpbmNsdWRlICJpOTE1X3Jl Zy5oIgo+ICAjaW5jbHVkZSAiaTkxNV91dGlscy5oIgo+IEBAIC0xMjcsMTQ0ICsxMjgsNiBAQCBi b29sIGk5MTVfZXJyb3JfaW5qZWN0ZWQodm9pZCk7Cj4gIAlfX2k5MTVfcHJpbnRrKGk5MTUsIGk5 MTVfZXJyb3JfaW5qZWN0ZWQoKSA/IEtFUk5fREVCVUcgOiBLRVJOX0VSUiwgXAo+ICAJCSAgICAg IGZtdCwgIyNfX1ZBX0FSR1NfXykKPiAgCj4gLXR5cGVkZWYgc3RydWN0IHsKPiAtCXVpbnQzMl90 IHZhbDsKPiAtfSB1aW50X2ZpeGVkXzE2XzE2X3Q7Cj4gLQo+IC0jZGVmaW5lIEZQXzE2XzE2X01B WCAoeyBcCj4gLQl1aW50X2ZpeGVkXzE2XzE2X3QgZnA7IFwKPiAtCWZwLnZhbCA9IFVJTlRfTUFY OyBcCj4gLQlmcDsgXAo+IC19KQo+IC0KPiAtc3RhdGljIGlubGluZSBib29sIGlzX2ZpeGVkMTZf emVybyh1aW50X2ZpeGVkXzE2XzE2X3QgdmFsKQo+IC17Cj4gLQlpZiAodmFsLnZhbCA9PSAwKQo+ IC0JCXJldHVybiB0cnVlOwo+IC0JcmV0dXJuIGZhbHNlOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5s aW5lIHVpbnRfZml4ZWRfMTZfMTZfdCB1MzJfdG9fZml4ZWQxNih1aW50MzJfdCB2YWwpCj4gLXsK PiAtCXVpbnRfZml4ZWRfMTZfMTZfdCBmcDsKPiAtCj4gLQlXQVJOX09OKHZhbCA+IFUxNl9NQVgp Owo+IC0KPiAtCWZwLnZhbCA9IHZhbCA8PCAxNjsKPiAtCXJldHVybiBmcDsKPiAtfQo+IC0KPiAt c3RhdGljIGlubGluZSB1aW50MzJfdCBmaXhlZDE2X3RvX3UzMl9yb3VuZF91cCh1aW50X2ZpeGVk XzE2XzE2X3QgZnApCj4gLXsKPiAtCXJldHVybiBESVZfUk9VTkRfVVAoZnAudmFsLCAxIDw8IDE2 KTsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSB1aW50MzJfdCBmaXhlZDE2X3RvX3UzMih1aW50 X2ZpeGVkXzE2XzE2X3QgZnApCj4gLXsKPiAtCXJldHVybiBmcC52YWwgPj4gMTY7Cj4gLX0KPiAt Cj4gLXN0YXRpYyBpbmxpbmUgdWludF9maXhlZF8xNl8xNl90IG1pbl9maXhlZDE2KHVpbnRfZml4 ZWRfMTZfMTZfdCBtaW4xLAo+IC0JCQkJCQkgdWludF9maXhlZF8xNl8xNl90IG1pbjIpCj4gLXsK PiAtCXVpbnRfZml4ZWRfMTZfMTZfdCBtaW47Cj4gLQo+IC0JbWluLnZhbCA9IG1pbihtaW4xLnZh bCwgbWluMi52YWwpOwo+IC0JcmV0dXJuIG1pbjsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSB1 aW50X2ZpeGVkXzE2XzE2X3QgbWF4X2ZpeGVkMTYodWludF9maXhlZF8xNl8xNl90IG1heDEsCj4g LQkJCQkJCSB1aW50X2ZpeGVkXzE2XzE2X3QgbWF4MikKPiAtewo+IC0JdWludF9maXhlZF8xNl8x Nl90IG1heDsKPiAtCj4gLQltYXgudmFsID0gbWF4KG1heDEudmFsLCBtYXgyLnZhbCk7Cj4gLQly ZXR1cm4gbWF4Owo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHVpbnRfZml4ZWRfMTZfMTZfdCBj bGFtcF91NjRfdG9fZml4ZWQxNih1aW50NjRfdCB2YWwpCj4gLXsKPiAtCXVpbnRfZml4ZWRfMTZf MTZfdCBmcDsKPiAtCVdBUk5fT04odmFsID4gVTMyX01BWCk7Cj4gLQlmcC52YWwgPSAodWludDMy X3QpIHZhbDsKPiAtCXJldHVybiBmcDsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSB1aW50MzJf dCBkaXZfcm91bmRfdXBfZml4ZWQxNih1aW50X2ZpeGVkXzE2XzE2X3QgdmFsLAo+IC0JCQkJCSAg ICB1aW50X2ZpeGVkXzE2XzE2X3QgZCkKPiAtewo+IC0JcmV0dXJuIERJVl9ST1VORF9VUCh2YWwu dmFsLCBkLnZhbCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgdWludDMyX3QgbXVsX3JvdW5k X3VwX3UzMl9maXhlZDE2KHVpbnQzMl90IHZhbCwKPiAtCQkJCQkJdWludF9maXhlZF8xNl8xNl90 IG11bCkKPiAtewo+IC0JdWludDY0X3QgaW50ZXJtZWRpYXRlX3ZhbDsKPiAtCj4gLQlpbnRlcm1l ZGlhdGVfdmFsID0gKHVpbnQ2NF90KSB2YWwgKiBtdWwudmFsOwo+IC0JaW50ZXJtZWRpYXRlX3Zh bCA9IERJVl9ST1VORF9VUF9VTEwoaW50ZXJtZWRpYXRlX3ZhbCwgMSA8PCAxNik7Cj4gLQlXQVJO X09OKGludGVybWVkaWF0ZV92YWwgPiBVMzJfTUFYKTsKPiAtCXJldHVybiAodWludDMyX3QpIGlu dGVybWVkaWF0ZV92YWw7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgdWludF9maXhlZF8xNl8x Nl90IG11bF9maXhlZDE2KHVpbnRfZml4ZWRfMTZfMTZfdCB2YWwsCj4gLQkJCQkJICAgICB1aW50 X2ZpeGVkXzE2XzE2X3QgbXVsKQo+IC17Cj4gLQl1aW50NjRfdCBpbnRlcm1lZGlhdGVfdmFsOwo+ IC0KPiAtCWludGVybWVkaWF0ZV92YWwgPSAodWludDY0X3QpIHZhbC52YWwgKiBtdWwudmFsOwo+ IC0JaW50ZXJtZWRpYXRlX3ZhbCA9IGludGVybWVkaWF0ZV92YWwgPj4gMTY7Cj4gLQlyZXR1cm4g Y2xhbXBfdTY0X3RvX2ZpeGVkMTYoaW50ZXJtZWRpYXRlX3ZhbCk7Cj4gLX0KPiAtCj4gLXN0YXRp YyBpbmxpbmUgdWludF9maXhlZF8xNl8xNl90IGRpdl9maXhlZDE2KHVpbnQzMl90IHZhbCwgdWlu dDMyX3QgZCkKPiAtewo+IC0JdWludDY0X3QgaW50ZXJtX3ZhbDsKPiAtCj4gLQlpbnRlcm1fdmFs ID0gKHVpbnQ2NF90KXZhbCA8PCAxNjsKPiAtCWludGVybV92YWwgPSBESVZfUk9VTkRfVVBfVUxM KGludGVybV92YWwsIGQpOwo+IC0JcmV0dXJuIGNsYW1wX3U2NF90b19maXhlZDE2KGludGVybV92 YWwpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHVpbnQzMl90IGRpdl9yb3VuZF91cF91MzJf Zml4ZWQxNih1aW50MzJfdCB2YWwsCj4gLQkJCQkJCXVpbnRfZml4ZWRfMTZfMTZfdCBkKQo+IC17 Cj4gLQl1aW50NjRfdCBpbnRlcm1fdmFsOwo+IC0KPiAtCWludGVybV92YWwgPSAodWludDY0X3Qp dmFsIDw8IDE2Owo+IC0JaW50ZXJtX3ZhbCA9IERJVl9ST1VORF9VUF9VTEwoaW50ZXJtX3ZhbCwg ZC52YWwpOwo+IC0JV0FSTl9PTihpbnRlcm1fdmFsID4gVTMyX01BWCk7Cj4gLQlyZXR1cm4gKHVp bnQzMl90KSBpbnRlcm1fdmFsOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHVpbnRfZml4ZWRf MTZfMTZfdCBtdWxfdTMyX2ZpeGVkMTYodWludDMyX3QgdmFsLAo+IC0JCQkJCQkgICAgIHVpbnRf Zml4ZWRfMTZfMTZfdCBtdWwpCj4gLXsKPiAtCXVpbnQ2NF90IGludGVybWVkaWF0ZV92YWw7Cj4g LQo+IC0JaW50ZXJtZWRpYXRlX3ZhbCA9ICh1aW50NjRfdCkgdmFsICogbXVsLnZhbDsKPiAtCXJl dHVybiBjbGFtcF91NjRfdG9fZml4ZWQxNihpbnRlcm1lZGlhdGVfdmFsKTsKPiAtfQo+IC0KPiAt c3RhdGljIGlubGluZSB1aW50X2ZpeGVkXzE2XzE2X3QgYWRkX2ZpeGVkMTYodWludF9maXhlZF8x Nl8xNl90IGFkZDEsCj4gLQkJCQkJICAgICB1aW50X2ZpeGVkXzE2XzE2X3QgYWRkMikKPiAtewo+ IC0JdWludDY0X3QgaW50ZXJtX3N1bTsKPiAtCj4gLQlpbnRlcm1fc3VtID0gKHVpbnQ2NF90KSBh ZGQxLnZhbCArIGFkZDIudmFsOwo+IC0JcmV0dXJuIGNsYW1wX3U2NF90b19maXhlZDE2KGludGVy bV9zdW0pOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHVpbnRfZml4ZWRfMTZfMTZfdCBhZGRf Zml4ZWQxNl91MzIodWludF9maXhlZF8xNl8xNl90IGFkZDEsCj4gLQkJCQkJCSB1aW50MzJfdCBh ZGQyKQo+IC17Cj4gLQl1aW50NjRfdCBpbnRlcm1fc3VtOwo+IC0JdWludF9maXhlZF8xNl8xNl90 IGludGVybV9hZGQyID0gdTMyX3RvX2ZpeGVkMTYoYWRkMik7Cj4gLQo+IC0JaW50ZXJtX3N1bSA9 ICh1aW50NjRfdCkgYWRkMS52YWwgKyBpbnRlcm1fYWRkMi52YWw7Cj4gLQlyZXR1cm4gY2xhbXBf dTY0X3RvX2ZpeGVkMTYoaW50ZXJtX3N1bSk7Cj4gLX0KPiAtCj4gIGVudW0gaHBkX3BpbiB7Cj4g IAlIUERfTk9ORSA9IDAsCj4gIAlIUERfVFYgPSBIUERfTk9ORSwgICAgIC8qIFRWIGlzIGtub3du IHRvIGJlIHVucmVsaWFibGUgKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9maXhlZC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9maXhlZC5oCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmM5NzRlNTFjNmQ4Ygo+IC0tLSAv ZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2ZpeGVkLmgKPiBAQCAt MCwwICsxLDE0NyBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUICovCj4gKy8q Cj4gKyAqIENvcHlyaWdodCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9uCj4gKyAqLwo+ICsKPiAr I2lmbmRlZiBfSTkxNV9GSVhFRF9IXwo+ICsjZGVmaW5lIF9JOTE1X0ZJWEVEX0hfCj4gKwo+ICt0 eXBlZGVmIHN0cnVjdCB7Cj4gKwl1aW50MzJfdCB2YWw7Cj4gK30gdWludF9maXhlZF8xNl8xNl90 Owo+ICsKPiArI2RlZmluZSBGUF8xNl8xNl9NQVggKHsgXAo+ICsJdWludF9maXhlZF8xNl8xNl90 IGZwOyBcCj4gKwlmcC52YWwgPSBVSU5UX01BWDsgXAo+ICsJZnA7IFwKPiArfSkKPiArCj4gK3N0 YXRpYyBpbmxpbmUgYm9vbCBpc19maXhlZDE2X3plcm8odWludF9maXhlZF8xNl8xNl90IHZhbCkK PiArewo+ICsJaWYgKHZhbC52YWwgPT0gMCkKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCXJldHVybiBm YWxzZTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB1aW50X2ZpeGVkXzE2XzE2X3QgdTMyX3Rv X2ZpeGVkMTYodWludDMyX3QgdmFsKQo+ICt7Cj4gKwl1aW50X2ZpeGVkXzE2XzE2X3QgZnA7Cj4g Kwo+ICsJV0FSTl9PTih2YWwgPiBVMTZfTUFYKTsKPiArCj4gKwlmcC52YWwgPSB2YWwgPDwgMTY7 Cj4gKwlyZXR1cm4gZnA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgZml4ZWQx Nl90b191MzJfcm91bmRfdXAodWludF9maXhlZF8xNl8xNl90IGZwKQo+ICt7Cj4gKwlyZXR1cm4g RElWX1JPVU5EX1VQKGZwLnZhbCwgMSA8PCAxNik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUg dWludDMyX3QgZml4ZWQxNl90b191MzIodWludF9maXhlZF8xNl8xNl90IGZwKQo+ICt7Cj4gKwly ZXR1cm4gZnAudmFsID4+IDE2Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHVpbnRfZml4ZWRf MTZfMTZfdCBtaW5fZml4ZWQxNih1aW50X2ZpeGVkXzE2XzE2X3QgbWluMSwKPiArCQkJCQkgICAg IHVpbnRfZml4ZWRfMTZfMTZfdCBtaW4yKQo+ICt7Cj4gKwl1aW50X2ZpeGVkXzE2XzE2X3QgbWlu Owo+ICsKPiArCW1pbi52YWwgPSBtaW4obWluMS52YWwsIG1pbjIudmFsKTsKPiArCXJldHVybiBt aW47Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdWludF9maXhlZF8xNl8xNl90IG1heF9maXhl ZDE2KHVpbnRfZml4ZWRfMTZfMTZfdCBtYXgxLAo+ICsJCQkJCSAgICAgdWludF9maXhlZF8xNl8x Nl90IG1heDIpCj4gK3sKPiArCXVpbnRfZml4ZWRfMTZfMTZfdCBtYXg7Cj4gKwo+ICsJbWF4LnZh bCA9IG1heChtYXgxLnZhbCwgbWF4Mi52YWwpOwo+ICsJcmV0dXJuIG1heDsKPiArfQo+ICsKPiAr c3RhdGljIGlubGluZSB1aW50X2ZpeGVkXzE2XzE2X3QgY2xhbXBfdTY0X3RvX2ZpeGVkMTYodWlu dDY0X3QgdmFsKQo+ICt7Cj4gKwl1aW50X2ZpeGVkXzE2XzE2X3QgZnA7Cj4gKwlXQVJOX09OKHZh bCA+IFUzMl9NQVgpOwo+ICsJZnAudmFsID0gKHVpbnQzMl90KSB2YWw7Cj4gKwlyZXR1cm4gZnA7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgZGl2X3JvdW5kX3VwX2ZpeGVkMTYo dWludF9maXhlZF8xNl8xNl90IHZhbCwKPiArCQkJCQkgICAgdWludF9maXhlZF8xNl8xNl90IGQp Cj4gK3sKPiArCXJldHVybiBESVZfUk9VTkRfVVAodmFsLnZhbCwgZC52YWwpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW5saW5lIHVpbnQzMl90IG11bF9yb3VuZF91cF91MzJfZml4ZWQxNih1aW50MzJf dCB2YWwsCj4gKwkJCQkJCXVpbnRfZml4ZWRfMTZfMTZfdCBtdWwpCj4gK3sKPiArCXVpbnQ2NF90 IGludGVybWVkaWF0ZV92YWw7Cj4gKwo+ICsJaW50ZXJtZWRpYXRlX3ZhbCA9ICh1aW50NjRfdCkg dmFsICogbXVsLnZhbDsKPiArCWludGVybWVkaWF0ZV92YWwgPSBESVZfUk9VTkRfVVBfVUxMKGlu dGVybWVkaWF0ZV92YWwsIDEgPDwgMTYpOwo+ICsJV0FSTl9PTihpbnRlcm1lZGlhdGVfdmFsID4g VTMyX01BWCk7Cj4gKwlyZXR1cm4gKHVpbnQzMl90KSBpbnRlcm1lZGlhdGVfdmFsOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW5saW5lIHVpbnRfZml4ZWRfMTZfMTZfdCBtdWxfZml4ZWQxNih1aW50X2Zp eGVkXzE2XzE2X3QgdmFsLAo+ICsJCQkJCSAgICAgdWludF9maXhlZF8xNl8xNl90IG11bCkKPiAr ewo+ICsJdWludDY0X3QgaW50ZXJtZWRpYXRlX3ZhbDsKPiArCj4gKwlpbnRlcm1lZGlhdGVfdmFs ID0gKHVpbnQ2NF90KSB2YWwudmFsICogbXVsLnZhbDsKPiArCWludGVybWVkaWF0ZV92YWwgPSBp bnRlcm1lZGlhdGVfdmFsID4+IDE2Owo+ICsJcmV0dXJuIGNsYW1wX3U2NF90b19maXhlZDE2KGlu dGVybWVkaWF0ZV92YWwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHVpbnRfZml4ZWRfMTZf MTZfdCBkaXZfZml4ZWQxNih1aW50MzJfdCB2YWwsIHVpbnQzMl90IGQpCj4gK3sKPiArCXVpbnQ2 NF90IGludGVybV92YWw7Cj4gKwo+ICsJaW50ZXJtX3ZhbCA9ICh1aW50NjRfdCl2YWwgPDwgMTY7 Cj4gKwlpbnRlcm1fdmFsID0gRElWX1JPVU5EX1VQX1VMTChpbnRlcm1fdmFsLCBkKTsKPiArCXJl dHVybiBjbGFtcF91NjRfdG9fZml4ZWQxNihpbnRlcm1fdmFsKTsKPiArfQo+ICsKPiArc3RhdGlj IGlubGluZSB1aW50MzJfdCBkaXZfcm91bmRfdXBfdTMyX2ZpeGVkMTYodWludDMyX3QgdmFsLAo+ ICsJCQkJCQl1aW50X2ZpeGVkXzE2XzE2X3QgZCkKPiArewo+ICsJdWludDY0X3QgaW50ZXJtX3Zh bDsKPiArCj4gKwlpbnRlcm1fdmFsID0gKHVpbnQ2NF90KXZhbCA8PCAxNjsKPiArCWludGVybV92 YWwgPSBESVZfUk9VTkRfVVBfVUxMKGludGVybV92YWwsIGQudmFsKTsKPiArCVdBUk5fT04oaW50 ZXJtX3ZhbCA+IFUzMl9NQVgpOwo+ICsJcmV0dXJuICh1aW50MzJfdCkgaW50ZXJtX3ZhbDsKPiAr fQo+ICsKPiArc3RhdGljIGlubGluZSB1aW50X2ZpeGVkXzE2XzE2X3QgbXVsX3UzMl9maXhlZDE2 KHVpbnQzMl90IHZhbCwKPiArCQkJCQkJIHVpbnRfZml4ZWRfMTZfMTZfdCBtdWwpCj4gK3sKPiAr CXVpbnQ2NF90IGludGVybWVkaWF0ZV92YWw7Cj4gKwo+ICsJaW50ZXJtZWRpYXRlX3ZhbCA9ICh1 aW50NjRfdCkgdmFsICogbXVsLnZhbDsKPiArCXJldHVybiBjbGFtcF91NjRfdG9fZml4ZWQxNihp bnRlcm1lZGlhdGVfdmFsKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB1aW50X2ZpeGVkXzE2 XzE2X3QgYWRkX2ZpeGVkMTYodWludF9maXhlZF8xNl8xNl90IGFkZDEsCj4gKwkJCQkJICAgICB1 aW50X2ZpeGVkXzE2XzE2X3QgYWRkMikKPiArewo+ICsJdWludDY0X3QgaW50ZXJtX3N1bTsKPiAr Cj4gKwlpbnRlcm1fc3VtID0gKHVpbnQ2NF90KSBhZGQxLnZhbCArIGFkZDIudmFsOwo+ICsJcmV0 dXJuIGNsYW1wX3U2NF90b19maXhlZDE2KGludGVybV9zdW0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW5saW5lIHVpbnRfZml4ZWRfMTZfMTZfdCBhZGRfZml4ZWQxNl91MzIodWludF9maXhlZF8xNl8x Nl90IGFkZDEsCj4gKwkJCQkJCSB1aW50MzJfdCBhZGQyKQo+ICt7Cj4gKwl1aW50NjRfdCBpbnRl cm1fc3VtOwo+ICsJdWludF9maXhlZF8xNl8xNl90IGludGVybV9hZGQyID0gdTMyX3RvX2ZpeGVk MTYoYWRkMik7Cj4gKwo+ICsJaW50ZXJtX3N1bSA9ICh1aW50NjRfdCkgYWRkMS52YWwgKyBpbnRl cm1fYWRkMi52YWw7Cj4gKwlyZXR1cm4gY2xhbXBfdTY0X3RvX2ZpeGVkMTYoaW50ZXJtX3N1bSk7 Cj4gK30KPiArCj4gKyNlbmRpZiAvKiBfSTkxNV9GSVhFRF9IXyAqLwoKLS0gCkphbmkgTmlrdWxh LCBJbnRlbCBPcGVuIFNvdXJjZSBHcmFwaGljcyBDZW50ZXIKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==