From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Andrushchenko Subject: Re: [PATCH v2 2/3] drm/xen-front: Use Xen common shared buffer implementation Date: Thu, 13 Dec 2018 12:16:52 +0200 Message-ID: <27491aa5-3548-4c39-13a2-132c738fae14__16317.2668814243$1544696151$gmane$org@gmail.com> References: <20181130074205.20496-1-andr2000@gmail.com> <20181130074205.20496-2-andr2000@gmail.com> <3c69d924-11e1-7037-bfa5-276d22b245fe@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gXO39-0007ri-AG for xen-devel@lists.xenproject.org; Thu, 13 Dec 2018 10:16:59 +0000 Received: by mail-lj1-x241.google.com with SMTP id s5-v6so1245940ljd.12 for ; Thu, 13 Dec 2018 02:16:56 -0800 (PST) In-Reply-To: <3c69d924-11e1-7037-bfa5-276d22b245fe@gmail.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Daniel Vetter Cc: jgross@suse.com, alsa-devel@alsa-project.org, Oleksandr Andrushchenko , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, xen-devel@lists.xenproject.org, boris.ostrovsky@oracle.com List-Id: xen-devel@lists.xenproject.org YnVtcAoKT24gMTIvNS8xOCAxMDoyMCBBTSwgT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gd3JvdGU6 Cj4gSGVsbG8sIERhbmllbCEKPgo+IENvdWxkIHlvdSBwbGVhc2UgYWNrL25hY2sgdGhlIHBhdGNo LCBzbyBlaXRoZXIgd2UgY2FuIG1lcmdlIHRoZQo+Cj4gc2VyaWVzIG9yIEkgY2FuIGFkZHJlc3Mg eW91ciBjb21tZW50cyBpZiBhbnkKPgo+IFRoYW5rIHlvdSwKPgo+IE9sZWtzYW5kcgo+Cj4gT24g MTEvMzAvMTggOTo0MiBBTSwgT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gd3JvdGU6Cj4+IEZyb206 IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIDxvbGVrc2FuZHJfYW5kcnVzaGNoZW5rb0BlcGFtLmNv bT4KPj4KPj4gVXNlIHBhZ2UgZGlyZWN0b3J5IGJhc2VkIHNoYXJlZCBidWZmZXIgaW1wbGVtZW50 YXRpb24KPj4gbm93IGF2YWlsYWJsZSBhcyBjb21tb24gY29kZSBmb3IgWGVuIGZyb250ZW5kIGRy aXZlcnMuCj4+Cj4+IFJlbW92ZSBmbHVzaGluZyBvZiBzaGFyZWQgYnVmZmVyIG9uIHBhZ2UgZmxp cCBhcyB0aGlzCj4+IHdvcmthcm91bmQgbmVlZHMgYSBwcm9wZXIgZml4Lgo+Pgo+PiBTaWduZWQt b2ZmLWJ5OiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyAKPj4gPG9sZWtzYW5kcl9hbmRydXNoY2hl bmtvQGVwYW0uY29tPgo+PiAtLS0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL3hlbi9LY29uZmlnwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPj4gwqAgZHJpdmVycy9ncHUvZHJt L3hlbi9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgLQo+PiDCoCBk cml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnQuY8KgwqDCoMKgwqDCoCB8wqAgNjUgKyst LQo+PiDCoCBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmPCoMKgIHzCoMKg IDEgLQo+PiDCoCBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfc2hidWYuYyB8IDQx NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2Ry bV9mcm9udF9zaGJ1Zi5oIHzCoCA2NCAtLS0tCj4+IMKgIDYgZmlsZXMgY2hhbmdlZCwgMjYgaW5z ZXJ0aW9ucygrKSwgNTIwIGRlbGV0aW9ucygtKQo+PiDCoCBkZWxldGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X3NoYnVmLmMKPj4gwqAgZGVsZXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9zaGJ1Zi5oCj4+Cj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGVuL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0v eGVuL0tjb25maWcKPj4gaW5kZXggNGNjYTE2MDc4MmFiLi5mOTY5ZDQ4Njg1NWQgMTAwNjQ0Cj4+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZW4vS2NvbmZpZwo+PiArKysgYi9kcml2ZXJzL2dwdS9k cm0veGVuL0tjb25maWcKPj4gQEAgLTEyLDYgKzEyLDcgQEAgY29uZmlnIERSTV9YRU5fRlJPTlRF TkQKPj4gwqDCoMKgwqDCoCBzZWxlY3QgRFJNX0tNU19IRUxQRVIKPj4gwqDCoMKgwqDCoCBzZWxl Y3QgVklERU9NT0RFX0hFTFBFUlMKPj4gwqDCoMKgwqDCoCBzZWxlY3QgWEVOX1hFTkJVU19GUk9O VEVORAo+PiArwqDCoMKgIHNlbGVjdCBYRU5fRlJPTlRfUEdESVJfU0hCVUYKPj4gwqDCoMKgwqDC oCBoZWxwCj4+IMKgwqDCoMKgwqDCoMKgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0 byBlbmFibGUgYSBwYXJhLXZpcnR1YWxpemVkCj4+IMKgwqDCoMKgwqDCoMKgIGZyb250ZW5kIERS TS9LTVMgZHJpdmVyIGZvciBYZW4gZ3Vlc3QgT1Nlcy4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS94ZW4vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0veGVuL01ha2VmaWxlCj4+IGlu ZGV4IDcxMmFmZmY1ZmZjMy4uODI1OTA1ZjY3ZmFhIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0veGVuL01ha2VmaWxlCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4vTWFrZWZpbGUK Pj4gQEAgLTQsNyArNCw2IEBAIGRybV94ZW5fZnJvbnQtb2JqcyA6PSB4ZW5fZHJtX2Zyb250Lm8g XAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeGVuX2RybV9mcm9udF9rbXMubyBc Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB4ZW5fZHJtX2Zyb250X2Nvbm4ubyBc Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB4ZW5fZHJtX2Zyb250X2V2dGNobmwu byBcCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB4ZW5fZHJtX2Zyb250X3NoYnVmLm8g XAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeGVuX2RybV9mcm9udF9jZmcubyBc Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB4ZW5fZHJtX2Zyb250X2dlbS5vCj4+ IMKgIGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnQuYyAKPj4g Yi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnQuYwo+PiBpbmRleCA2YjZkNWFiODJl YzMuLjRkM2QzNmZjM2E1ZCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5f ZHJtX2Zyb250LmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250LmMK Pj4gQEAgLTE5LDYgKzE5LDcgQEAKPj4gwqAgI2luY2x1ZGUgPHhlbi94ZW4uaD4KPj4gwqAgI2lu Y2x1ZGUgPHhlbi94ZW5idXMuaD4KPj4gwqAgKyNpbmNsdWRlIDx4ZW4veGVuLWZyb250LXBnZGly LXNoYnVmLmg+Cj4+IMKgICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL2lvL2Rpc3BsaWYuaD4KPj4g wqAgwqAgI2luY2x1ZGUgInhlbl9kcm1fZnJvbnQuaCIKPj4gQEAgLTI2LDI4ICsyNywyMCBAQAo+ PiDCoCAjaW5jbHVkZSAieGVuX2RybV9mcm9udF9ldnRjaG5sLmgiCj4+IMKgICNpbmNsdWRlICJ4 ZW5fZHJtX2Zyb250X2dlbS5oIgo+PiDCoCAjaW5jbHVkZSAieGVuX2RybV9mcm9udF9rbXMuaCIK Pj4gLSNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X3NoYnVmLmgiCj4+IMKgIMKgIHN0cnVjdCB4ZW5f ZHJtX2Zyb250X2RidWYgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKPj4g wqDCoMKgwqDCoCB1NjQgZGJ1Zl9jb29raWU7Cj4+IMKgwqDCoMKgwqAgdTY0IGZiX2Nvb2tpZTsK Pj4gLcKgwqDCoCBzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqc2hidWY7Cj4+ICsKPj4gK8Kg wqDCoCBzdHJ1Y3QgeGVuX2Zyb250X3BnZGlyX3NoYnVmIHNoYnVmOwo+PiDCoCB9Owo+PiDCoCAt c3RhdGljIGludCBkYnVmX2FkZF90b19saXN0KHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZy b250X2luZm8sCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHhlbl9k cm1fZnJvbnRfc2hidWYgKnNoYnVmLCB1NjQgZGJ1Zl9jb29raWUpCj4+ICtzdGF0aWMgdm9pZCBk YnVmX2FkZF90b19saXN0KHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8sCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgeGVuX2RybV9mcm9udF9k YnVmICpkYnVmLCB1NjQgZGJ1Zl9jb29raWUpCj4+IMKgIHsKPj4gLcKgwqDCoCBzdHJ1Y3QgeGVu X2RybV9mcm9udF9kYnVmICpkYnVmOwo+PiAtCj4+IC3CoMKgwqAgZGJ1ZiA9IGt6YWxsb2Moc2l6 ZW9mKCpkYnVmKSwgR0ZQX0tFUk5FTCk7Cj4+IC3CoMKgwqAgaWYgKCFkYnVmKQo+PiAtwqDCoMKg wqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+IC0KPj4gwqDCoMKgwqDCoCBkYnVmLT5kYnVmX2Nv b2tpZSA9IGRidWZfY29va2llOwo+PiAtwqDCoMKgIGRidWYtPnNoYnVmID0gc2hidWY7Cj4+IMKg wqDCoMKgwqAgbGlzdF9hZGQoJmRidWYtPmxpc3QsICZmcm9udF9pbmZvLT5kYnVmX2xpc3QpOwo+ PiAtwqDCoMKgIHJldHVybiAwOwo+PiDCoCB9Cj4+IMKgIMKgIHN0YXRpYyBzdHJ1Y3QgeGVuX2Ry bV9mcm9udF9kYnVmICpkYnVmX2dldChzdHJ1Y3QgbGlzdF9oZWFkIAo+PiAqZGJ1Zl9saXN0LAo+ PiBAQCAtNjIsMTUgKzU1LDYgQEAgc3RhdGljIHN0cnVjdCB4ZW5fZHJtX2Zyb250X2RidWYgKmRi dWZfZ2V0KHN0cnVjdCAKPj4gbGlzdF9oZWFkICpkYnVmX2xpc3QsCj4+IMKgwqDCoMKgwqAgcmV0 dXJuIE5VTEw7Cj4+IMKgIH0KPj4gwqAgLXN0YXRpYyB2b2lkIGRidWZfZmx1c2hfZmIoc3RydWN0 IGxpc3RfaGVhZCAqZGJ1Zl9saXN0LCB1NjQgZmJfY29va2llKQo+PiAtewo+PiAtwqDCoMKgIHN0 cnVjdCB4ZW5fZHJtX2Zyb250X2RidWYgKmJ1ZiwgKnE7Cj4+IC0KPj4gLcKgwqDCoCBsaXN0X2Zv cl9lYWNoX2VudHJ5X3NhZmUoYnVmLCBxLCBkYnVmX2xpc3QsIGxpc3QpCj4+IC3CoMKgwqDCoMKg wqDCoCBpZiAoYnVmLT5mYl9jb29raWUgPT0gZmJfY29va2llKQo+PiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB4ZW5fZHJtX2Zyb250X3NoYnVmX2ZsdXNoKGJ1Zi0+c2hidWYpOwo+PiAtfQo+PiAt Cj4+IMKgIHN0YXRpYyB2b2lkIGRidWZfZnJlZShzdHJ1Y3QgbGlzdF9oZWFkICpkYnVmX2xpc3Qs IHU2NCBkYnVmX2Nvb2tpZSkKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCB4ZW5fZHJtX2Zy b250X2RidWYgKmJ1ZiwgKnE7Cj4+IEBAIC03OCw4ICs2Miw4IEBAIHN0YXRpYyB2b2lkIGRidWZf ZnJlZShzdHJ1Y3QgbGlzdF9oZWFkICpkYnVmX2xpc3QsIAo+PiB1NjQgZGJ1Zl9jb29raWUpCj4+ IMKgwqDCoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJ1ZiwgcSwgZGJ1Zl9saXN0LCBs aXN0KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGJ1Zi0+ZGJ1Zl9jb29raWUgPT0gZGJ1Zl9j b29raWUpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGlzdF9kZWwoJmJ1Zi0+bGlz dCk7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHhlbl9kcm1fZnJvbnRfc2hidWZfdW5tYXAo YnVmLT5zaGJ1Zik7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHhlbl9kcm1fZnJvbnRfc2hi dWZfZnJlZShidWYtPnNoYnVmKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeGVuX2Zyb250 X3BnZGlyX3NoYnVmX3VubWFwKCZidWYtPnNoYnVmKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgeGVuX2Zyb250X3BnZGlyX3NoYnVmX2ZyZWUoJmJ1Zi0+c2hidWYpOwo+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBrZnJlZShidWYpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBicmVhazsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gQEAgLTkxLDggKzc1LDggQEAgc3Rh dGljIHZvaWQgZGJ1Zl9mcmVlX2FsbChzdHJ1Y3QgbGlzdF9oZWFkICpkYnVmX2xpc3QpCj4+IMKg IMKgwqDCoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJ1ZiwgcSwgZGJ1Zl9saXN0LCBs aXN0KSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBsaXN0X2RlbCgmYnVmLT5saXN0KTsKPj4gLcKg wqDCoMKgwqDCoMKgIHhlbl9kcm1fZnJvbnRfc2hidWZfdW5tYXAoYnVmLT5zaGJ1Zik7Cj4+IC3C oMKgwqDCoMKgwqDCoCB4ZW5fZHJtX2Zyb250X3NoYnVmX2ZyZWUoYnVmLT5zaGJ1Zik7Cj4+ICvC oMKgwqDCoMKgwqDCoCB4ZW5fZnJvbnRfcGdkaXJfc2hidWZfdW5tYXAoJmJ1Zi0+c2hidWYpOwo+ PiArwqDCoMKgwqDCoMKgwqAgeGVuX2Zyb250X3BnZGlyX3NoYnVmX2ZyZWUoJmJ1Zi0+c2hidWYp Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqAga2ZyZWUoYnVmKTsKPj4gwqDCoMKgwqDCoCB9Cj4+IMKg IH0KPj4gQEAgLTE3MSw5ICsxNTUsOSBAQCBpbnQgeGVuX2RybV9mcm9udF9kYnVmX2NyZWF0ZShz dHJ1Y3QgCj4+IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbywKPj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGJwcCwgdTY0IHNpemUsIHN0cnVjdCBwYWdl ICoqcGFnZXMpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgeGVuX2RybV9mcm9udF9ldnRj aG5sICpldnRjaG5sOwo+PiAtwqDCoMKgIHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpzaGJ1 ZjsKPj4gK8KgwqDCoCBzdHJ1Y3QgeGVuX2RybV9mcm9udF9kYnVmICpkYnVmOwo+PiDCoMKgwqDC oMKgIHN0cnVjdCB4ZW5kaXNwbF9yZXEgKnJlcTsKPj4gLcKgwqDCoCBzdHJ1Y3QgeGVuX2RybV9m cm9udF9zaGJ1Zl9jZmcgYnVmX2NmZzsKPj4gK8KgwqDCoCBzdHJ1Y3QgeGVuX2Zyb250X3BnZGly X3NoYnVmX2NmZyBidWZfY2ZnOwo+PiDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4+ IMKgwqDCoMKgwqAgaW50IHJldDsKPj4gwqAgQEAgLTE4MSwyOCArMTY1LDI5IEBAIGludCB4ZW5f ZHJtX2Zyb250X2RidWZfY3JlYXRlKHN0cnVjdCAKPj4geGVuX2RybV9mcm9udF9pbmZvICpmcm9u dF9pbmZvLAo+PiDCoMKgwqDCoMKgIGlmICh1bmxpa2VseSghZXZ0Y2hubCkpCj4+IMKgwqDCoMKg wqDCoMKgwqDCoCByZXR1cm4gLUVJTzsKPj4gwqAgK8KgwqDCoCBkYnVmID0ga3phbGxvYyhzaXpl b2YoKmRidWYpLCBHRlBfS0VSTkVMKTsKPj4gK8KgwqDCoCBpZiAoIWRidWYpCj4+ICvCoMKgwqDC oMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArwqDCoMKgIGRidWZfYWRkX3RvX2xpc3Qo ZnJvbnRfaW5mbywgZGJ1ZiwgZGJ1Zl9jb29raWUpOwo+PiArCj4+IMKgwqDCoMKgwqAgbWVtc2V0 KCZidWZfY2ZnLCAwLCBzaXplb2YoYnVmX2NmZykpOwo+PiDCoMKgwqDCoMKgIGJ1Zl9jZmcueGJf ZGV2ID0gZnJvbnRfaW5mby0+eGJfZGV2Owo+PiArwqDCoMKgIGJ1Zl9jZmcubnVtX3BhZ2VzID0g RElWX1JPVU5EX1VQKHNpemUsIFBBR0VfU0laRSk7Cj4+IMKgwqDCoMKgwqAgYnVmX2NmZy5wYWdl cyA9IHBhZ2VzOwo+PiAtwqDCoMKgIGJ1Zl9jZmcuc2l6ZSA9IHNpemU7Cj4+ICvCoMKgwqAgYnVm X2NmZy5wZ2RpciA9ICZkYnVmLT5zaGJ1ZjsKPj4gwqDCoMKgwqDCoCBidWZfY2ZnLmJlX2FsbG9j ID0gZnJvbnRfaW5mby0+Y2ZnLmJlX2FsbG9jOwo+PiDCoCAtwqDCoMKgIHNoYnVmID0geGVuX2Ry bV9mcm9udF9zaGJ1Zl9hbGxvYygmYnVmX2NmZyk7Cj4+IC3CoMKgwqAgaWYgKElTX0VSUihzaGJ1 ZikpCj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUihzaGJ1Zik7Cj4+IC0KPj4gLcKg wqDCoCByZXQgPSBkYnVmX2FkZF90b19saXN0KGZyb250X2luZm8sIHNoYnVmLCBkYnVmX2Nvb2tp ZSk7Cj4+IC3CoMKgwqAgaWYgKHJldCA8IDApIHsKPj4gLcKgwqDCoMKgwqDCoMKgIHhlbl9kcm1f ZnJvbnRfc2hidWZfZnJlZShzaGJ1Zik7Cj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+ PiAtwqDCoMKgIH0KPj4gK8KgwqDCoCByZXQgPSB4ZW5fZnJvbnRfcGdkaXJfc2hidWZfYWxsb2Mo JmJ1Zl9jZmcpOwo+PiArwqDCoMKgIGlmIChyZXQgPCAwKQo+PiArwqDCoMKgwqDCoMKgwqAgZ290 byBmYWlsX3NoYnVmX2FsbG9jOwo+PiDCoCDCoMKgwqDCoMKgIG11dGV4X2xvY2soJmV2dGNobmwt PnUucmVxLnJlcV9pb19sb2NrKTsKPj4gwqAgwqDCoMKgwqDCoCBzcGluX2xvY2tfaXJxc2F2ZSgm ZnJvbnRfaW5mby0+aW9fbG9jaywgZmxhZ3MpOwo+PiDCoMKgwqDCoMKgIHJlcSA9IGJlX3ByZXBh cmVfcmVxKGV2dGNobmwsIFhFTkRJU1BMX09QX0RCVUZfQ1JFQVRFKTsKPj4gwqDCoMKgwqDCoCBy ZXEtPm9wLmRidWZfY3JlYXRlLmdyZWZfZGlyZWN0b3J5ID0KPj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgeGVuX2RybV9mcm9udF9zaGJ1Zl9nZXRfZGlyX3N0YXJ0KHNoYnVmKTsKPj4gKyB4ZW5f ZnJvbnRfcGdkaXJfc2hidWZfZ2V0X2Rpcl9zdGFydCgmZGJ1Zi0+c2hidWYpOwo+PiDCoMKgwqDC oMKgIHJlcS0+b3AuZGJ1Zl9jcmVhdGUuYnVmZmVyX3N6ID0gc2l6ZTsKPj4gwqDCoMKgwqDCoCBy ZXEtPm9wLmRidWZfY3JlYXRlLmRidWZfY29va2llID0gZGJ1Zl9jb29raWU7Cj4+IMKgwqDCoMKg wqAgcmVxLT5vcC5kYnVmX2NyZWF0ZS53aWR0aCA9IHdpZHRoOwo+PiBAQCAtMjIxLDcgKzIwNiw3 IEBAIGludCB4ZW5fZHJtX2Zyb250X2RidWZfY3JlYXRlKHN0cnVjdCAKPj4geGVuX2RybV9mcm9u dF9pbmZvICpmcm9udF9pbmZvLAo+PiDCoMKgwqDCoMKgIGlmIChyZXQgPCAwKQo+PiDCoMKgwqDC oMKgwqDCoMKgwqAgZ290byBmYWlsOwo+PiDCoCAtwqDCoMKgIHJldCA9IHhlbl9kcm1fZnJvbnRf c2hidWZfbWFwKHNoYnVmKTsKPj4gK8KgwqDCoCByZXQgPSB4ZW5fZnJvbnRfcGdkaXJfc2hidWZf bWFwKCZkYnVmLT5zaGJ1Zik7Cj4+IMKgwqDCoMKgwqAgaWYgKHJldCA8IDApCj4+IMKgwqDCoMKg wqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4+IMKgIEBAIC0yMzAsNiArMjE1LDcgQEAgaW50IHhlbl9k cm1fZnJvbnRfZGJ1Zl9jcmVhdGUoc3RydWN0IAo+PiB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250 X2luZm8sCj4+IMKgIMKgIGZhaWw6Cj4+IMKgwqDCoMKgwqAgbXV0ZXhfdW5sb2NrKCZldnRjaG5s LT51LnJlcS5yZXFfaW9fbG9jayk7Cj4+ICtmYWlsX3NoYnVmX2FsbG9jOgo+PiDCoMKgwqDCoMKg IGRidWZfZnJlZSgmZnJvbnRfaW5mby0+ZGJ1Zl9saXN0LCBkYnVmX2Nvb2tpZSk7Cj4+IMKgwqDC oMKgwqAgcmV0dXJuIHJldDsKPj4gwqAgfQo+PiBAQCAtMzU4LDcgKzM0NCw2IEBAIGludCB4ZW5f ZHJtX2Zyb250X3BhZ2VfZmxpcChzdHJ1Y3QgCj4+IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRf aW5mbywKPj4gwqDCoMKgwqDCoCBpZiAodW5saWtlbHkoY29ubl9pZHggPj0gZnJvbnRfaW5mby0+ bnVtX2V2dF9wYWlycykpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4g wqAgLcKgwqDCoCBkYnVmX2ZsdXNoX2ZiKCZmcm9udF9pbmZvLT5kYnVmX2xpc3QsIGZiX2Nvb2tp ZSk7Cj4+IMKgwqDCoMKgwqAgZXZ0Y2hubCA9ICZmcm9udF9pbmZvLT5ldnRfcGFpcnNbY29ubl9p ZHhdLnJlcTsKPj4gwqAgwqDCoMKgwqDCoCBtdXRleF9sb2NrKCZldnRjaG5sLT51LnJlcS5yZXFf aW9fbG9jayk7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJv bnRfZ2VtLmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jCj4+ IGluZGV4IGM4NWJmZTc1NzFjYi4uNTNiZTRjN2RjMGE0IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jCj4+IEBAIC0yMiw3ICsyMiw2IEBACj4+IMKgICNpbmNs dWRlIDx4ZW4vYmFsbG9vbi5oPgo+PiDCoCDCoCAjaW5jbHVkZSAieGVuX2RybV9mcm9udC5oIgo+ PiAtI2luY2x1ZGUgInhlbl9kcm1fZnJvbnRfc2hidWYuaCIKPj4gwqAgwqAgc3RydWN0IHhlbl9n ZW1fb2JqZWN0IHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgYmFzZTsKPj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9zaGJ1Zi5jIAo+ PiBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9zaGJ1Zi5jCj4+IGRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCBkMzMzYjY3Y2MxYTAuLjAwMDAwMDAwMDAwMAo+PiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfc2hidWYuYwo+PiArKysgL2Rl di9udWxsCj4+IEBAIC0xLDQxNCArMCwwIEBACj4+IC0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCBPUiBNSVQKPj4gLQo+PiAtLyoKPj4gLSAqwqAgWGVuIHBhcmEtdmlydHVhbCBE Uk0gZGV2aWNlCj4+IC0gKgo+PiAtICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggRVBBTSBTeXN0 ZW1zIEluYy4KPj4gLSAqCj4+IC0gKiBBdXRob3I6IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIDxv bGVrc2FuZHJfYW5kcnVzaGNoZW5rb0BlcGFtLmNvbT4KPj4gLSAqLwo+PiAtCj4+IC0jaW5jbHVk ZSA8ZHJtL2RybVAuaD4KPj4gLQo+PiAtI2lmIGRlZmluZWQoQ09ORklHX1g4NikKPj4gLSNpbmNs dWRlIDxkcm0vZHJtX2NhY2hlLmg+Cj4+IC0jZW5kaWYKPj4gLSNpbmNsdWRlIDxsaW51eC9lcnJu by5oPgo+PiAtI2luY2x1ZGUgPGxpbnV4L21tLmg+Cj4+IC0KPj4gLSNpbmNsdWRlIDxhc20veGVu L2h5cGVydmlzb3IuaD4KPj4gLSNpbmNsdWRlIDx4ZW4vYmFsbG9vbi5oPgo+PiAtI2luY2x1ZGUg PHhlbi94ZW4uaD4KPj4gLSNpbmNsdWRlIDx4ZW4veGVuYnVzLmg+Cj4+IC0jaW5jbHVkZSA8eGVu L2ludGVyZmFjZS9pby9yaW5nLmg+Cj4+IC0jaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9pby9kaXNw bGlmLmg+Cj4+IC0KPj4gLSNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250LmgiCj4+IC0jaW5jbHVkZSAi eGVuX2RybV9mcm9udF9zaGJ1Zi5oIgo+PiAtCj4+IC1zdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1 Zl9vcHMgewo+PiAtwqDCoMKgIC8qCj4+IC3CoMKgwqDCoCAqIENhbGN1bGF0ZSBudW1iZXIgb2Yg Z3JlZnMgcmVxdWlyZWQgdG8gaGFuZGxlIHRoaXMgYnVmZmVyLAo+PiAtwqDCoMKgwqAgKiBlLmcu IGlmIGdyZWZzIGFyZSByZXF1aXJlZCBmb3IgcGFnZSBkaXJlY3Rvcnkgb25seSBvciB0aGUgYnVm ZmVyCj4+IC3CoMKgwqDCoCAqIHBhZ2VzIGFzIHdlbGwuCj4+IC3CoMKgwqDCoCAqLwo+PiAtwqDC oMKgIHZvaWQgKCpjYWxjX251bV9ncmVmcykoc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1 Zik7Cj4+IC3CoMKgwqAgLyogRmlsbCBwYWdlIGRpcmVjdG9yeSBhY2NvcmRpbmcgdG8gcGFyYS12 aXJ0dWFsIGRpc3BsYXkgCj4+IHByb3RvY29sLiAqLwo+PiAtwqDCoMKgIHZvaWQgKCpmaWxsX3Bh Z2VfZGlyKShzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKTsKPj4gLcKgwqDCoCAvKiBD bGFpbSBncmFudCByZWZlcmVuY2VzIGZvciB0aGUgcGFnZXMgb2YgdGhlIGJ1ZmZlci4gKi8KPj4g LcKgwqDCoCBpbnQgKCpncmFudF9yZWZzX2Zvcl9idWZmZXIpKHN0cnVjdCB4ZW5fZHJtX2Zyb250 X3NoYnVmICpidWYsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGdyYW50X3JlZl90ICpwcml2X2dyZWZfaGVhZCwgaW50IGdyZWZfaWR4KTsKPj4gLcKgwqDCoCAv KiBNYXAgZ3JhbnQgcmVmZXJlbmNlcyBvZiB0aGUgYnVmZmVyLiAqLwo+PiAtwqDCoMKgIGludCAo Km1hcCkoc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1Zik7Cj4+IC3CoMKgwqAgLyogVW5t YXAgZ3JhbnQgcmVmZXJlbmNlcyBvZiB0aGUgYnVmZmVyLiAqLwo+PiAtwqDCoMKgIGludCAoKnVu bWFwKShzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKTsKPj4gLX07Cj4+IC0KPj4gLWdy YW50X3JlZl90IHhlbl9kcm1fZnJvbnRfc2hidWZfZ2V0X2Rpcl9zdGFydChzdHJ1Y3QgCj4+IHhl bl9kcm1fZnJvbnRfc2hidWYgKmJ1ZikKPj4gLXsKPj4gLcKgwqDCoCBpZiAoIWJ1Zi0+Z3JlZnMp Cj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gR1JBTlRfSU5WQUxJRF9SRUY7Cj4+IC0KPj4gLcKg wqDCoCByZXR1cm4gYnVmLT5ncmVmc1swXTsKPj4gLX0KPj4gLQo+PiAtaW50IHhlbl9kcm1fZnJv bnRfc2hidWZfbWFwKHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWYpCj4+IC17Cj4+IC3C oMKgwqAgaWYgKGJ1Zi0+b3BzLT5tYXApCj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gYnVmLT5v cHMtPm1hcChidWYpOwo+PiAtCj4+IC3CoMKgwqAgLyogbm8gbmVlZCB0byBtYXAgb3duIGdyYW50 IHJlZmVyZW5jZXMgKi8KPj4gLcKgwqDCoCByZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtaW50IHhl bl9kcm1fZnJvbnRfc2hidWZfdW5tYXAoc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1ZikK Pj4gLXsKPj4gLcKgwqDCoCBpZiAoYnVmLT5vcHMtPnVubWFwKQo+PiAtwqDCoMKgwqDCoMKgwqAg cmV0dXJuIGJ1Zi0+b3BzLT51bm1hcChidWYpOwo+PiAtCj4+IC3CoMKgwqAgLyogbm8gbmVlZCB0 byB1bm1hcCBvd24gZ3JhbnQgcmVmZXJlbmNlcyAqLwo+PiAtwqDCoMKgIHJldHVybiAwOwo+PiAt fQo+PiAtCj4+IC12b2lkIHhlbl9kcm1fZnJvbnRfc2hidWZfZmx1c2goc3RydWN0IHhlbl9kcm1f ZnJvbnRfc2hidWYgKmJ1ZikKPj4gLXsKPj4gLSNpZiBkZWZpbmVkKENPTkZJR19YODYpCj4+IC3C oMKgwqAgZHJtX2NsZmx1c2hfcGFnZXMoYnVmLT5wYWdlcywgYnVmLT5udW1fcGFnZXMpOwo+PiAt I2VuZGlmCj4+IC19Cj4+IC0KPj4gLXZvaWQgeGVuX2RybV9mcm9udF9zaGJ1Zl9mcmVlKHN0cnVj dCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWYpCj4+IC17Cj4+IC3CoMKgwqAgaWYgKGJ1Zi0+Z3Jl ZnMpIHsKPj4gLcKgwqDCoMKgwqDCoMKgIGludCBpOwo+PiAtCj4+IC3CoMKgwqDCoMKgwqDCoCBm b3IgKGkgPSAwOyBpIDwgYnVmLT5udW1fZ3JlZnM7IGkrKykKPj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgKGJ1Zi0+Z3JlZnNbaV0gIT0gR1JBTlRfSU5WQUxJRF9SRUYpCj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ250dGFiX2VuZF9mb3JlaWduX2FjY2VzcyhidWYtPmdy ZWZzW2ldLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAwLCAwVUwpOwo+PiAtwqDCoMKgIH0KPj4gLcKgwqDCoCBrZnJlZShidWYt PmdyZWZzKTsKPj4gLcKgwqDCoCBrZnJlZShidWYtPmRpcmVjdG9yeSk7Cj4+IC3CoMKgwqAga2Zy ZWUoYnVmKTsKPj4gLX0KPj4gLQo+PiAtLyoKPj4gLSAqIG51bWJlciBvZiBncmVmcyBhIHBhZ2Ug Y2FuIGhvbGQgd2l0aCByZXNwZWN0IHRvIHRoZQo+PiAtICogc3RydWN0IHhlbmRpc3BsX3BhZ2Vf ZGlyZWN0b3J5IGhlYWRlcgo+PiAtICovCj4+IC0jZGVmaW5lIFhFTl9EUk1fTlVNX0dSRUZTX1BF Ul9QQUdFICgoUEFHRV9TSVpFIC0gXAo+PiAtwqDCoMKgwqDCoMKgwqAgb2Zmc2V0b2Yoc3RydWN0 IHhlbmRpc3BsX3BhZ2VfZGlyZWN0b3J5LCBncmVmKSkgLyBcCj4+IC3CoMKgwqDCoMKgwqDCoCBz aXplb2YoZ3JhbnRfcmVmX3QpKQo+PiAtCj4+IC1zdGF0aWMgaW50IGdldF9udW1fcGFnZXNfZGly KHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWYpCj4+IC17Cj4+IC3CoMKgwqAgLyogbnVt YmVyIG9mIHBhZ2VzIHRoZSBwYWdlIGRpcmVjdG9yeSBjb25zdW1lcyBpdHNlbGYgKi8KPj4gLcKg wqDCoCByZXR1cm4gRElWX1JPVU5EX1VQKGJ1Zi0+bnVtX3BhZ2VzLCBYRU5fRFJNX05VTV9HUkVG U19QRVJfUEFHRSk7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyB2b2lkIGJhY2tlbmRfY2FsY19udW1f Z3JlZnMoc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1ZikKPj4gLXsKPj4gLcKgwqDCoCAv KiBvbmx5IGZvciBwYWdlcyB0aGUgcGFnZSBkaXJlY3RvcnkgY29uc3VtZXMgaXRzZWxmICovCj4+ IC3CoMKgwqAgYnVmLT5udW1fZ3JlZnMgPSBnZXRfbnVtX3BhZ2VzX2RpcihidWYpOwo+PiAtfQo+ PiAtCj4+IC1zdGF0aWMgdm9pZCBndWVzdF9jYWxjX251bV9ncmVmcyhzdHJ1Y3QgeGVuX2RybV9m cm9udF9zaGJ1ZiAqYnVmKQo+PiAtewo+PiAtwqDCoMKgIC8qCj4+IC3CoMKgwqDCoCAqIG51bWJl ciBvZiBwYWdlcyB0aGUgcGFnZSBkaXJlY3RvcnkgY29uc3VtZXMgaXRzZWxmCj4+IC3CoMKgwqDC oCAqIHBsdXMgZ3JlZnMgZm9yIHRoZSBidWZmZXIgcGFnZXMKPj4gLcKgwqDCoMKgICovCj4+IC3C oMKgwqAgYnVmLT5udW1fZ3JlZnMgPSBnZXRfbnVtX3BhZ2VzX2RpcihidWYpICsgYnVmLT5udW1f cGFnZXM7Cj4+IC19Cj4+IC0KPj4gLSNkZWZpbmUgeGVuX3BhZ2VfdG9fdmFkZHIocGFnZSkgXAo+ PiAtwqDCoMKgwqDCoMKgwqAgKCh1aW50cHRyX3QpcGZuX3RvX2thZGRyKHBhZ2VfdG9feGVuX3Bm bihwYWdlKSkpCj4+IC0KPj4gLXN0YXRpYyBpbnQgYmFja2VuZF91bm1hcChzdHJ1Y3QgeGVuX2Ry bV9mcm9udF9zaGJ1ZiAqYnVmKQo+PiAtewo+PiAtwqDCoMKgIHN0cnVjdCBnbnR0YWJfdW5tYXBf Z3JhbnRfcmVmICp1bm1hcF9vcHM7Cj4+IC3CoMKgwqAgaW50IGksIHJldDsKPj4gLQo+PiAtwqDC oMKgIGlmICghYnVmLT5wYWdlcyB8fCAhYnVmLT5iYWNrZW5kX21hcF9oYW5kbGVzIHx8ICFidWYt PmdyZWZzKQo+PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+IC0KPj4gLcKgwqDCoCB1bm1h cF9vcHMgPSBrY2FsbG9jKGJ1Zi0+bnVtX3BhZ2VzLCBzaXplb2YoKnVubWFwX29wcyksCj4+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0ZQX0tFUk5FTCk7Cj4+IC3CoMKgwqAgaWYg KCF1bm1hcF9vcHMpIHsKPj4gLcKgwqDCoMKgwqDCoMKgIERSTV9FUlJPUigiRmFpbGVkIHRvIGdl dCBtZW1vcnkgd2hpbGUgdW5tYXBwaW5nXG4iKTsKPj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiAt RU5PTUVNOwo+PiAtwqDCoMKgIH0KPj4gLQo+PiAtwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBidWYt Pm51bV9wYWdlczsgaSsrKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBwaHlzX2FkZHJfdCBhZGRyOwo+ PiAtCj4+IC3CoMKgwqDCoMKgwqDCoCBhZGRyID0geGVuX3BhZ2VfdG9fdmFkZHIoYnVmLT5wYWdl c1tpXSk7Cj4+IC3CoMKgwqDCoMKgwqDCoCBnbnR0YWJfc2V0X3VubWFwX29wKCZ1bm1hcF9vcHNb aV0sIGFkZHIsIEdOVE1BUF9ob3N0X21hcCwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGJ1Zi0+YmFja2VuZF9tYXBfaGFuZGxlc1tpXSk7Cj4+IC3CoMKgwqAgfQo+ PiAtCj4+IC3CoMKgwqAgcmV0ID0gZ250dGFiX3VubWFwX3JlZnModW5tYXBfb3BzLCBOVUxMLCBi dWYtPnBhZ2VzLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1Zi0+bnVtX3Bh Z2VzKTsKPj4gLQo+PiAtwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBidWYtPm51bV9wYWdlczsgaSsr KSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAodW5saWtlbHkodW5tYXBfb3BzW2ldLnN0YXR1cyAh PSBHTlRTVF9va2F5KSkKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRFJNX0VSUk9SKCJGYWls ZWQgdG8gdW5tYXAgcGFnZSAlZDogJWRcbiIsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGksIHVubWFwX29wc1tpXS5zdGF0dXMpOwo+PiAtwqDCoMKgIH0KPj4gLQo+PiAt wqDCoMKgIGlmIChyZXQpCj4+IC3CoMKgwqDCoMKgwqDCoCBEUk1fRVJST1IoIkZhaWxlZCB0byB1 bm1hcCBncmFudCByZWZlcmVuY2VzLCByZXQgJWQiLCByZXQpOwo+PiAtCj4+IC3CoMKgwqAga2Zy ZWUodW5tYXBfb3BzKTsKPj4gLcKgwqDCoCBrZnJlZShidWYtPmJhY2tlbmRfbWFwX2hhbmRsZXMp Owo+PiAtwqDCoMKgIGJ1Zi0+YmFja2VuZF9tYXBfaGFuZGxlcyA9IE5VTEw7Cj4+IC3CoMKgwqAg cmV0dXJuIHJldDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBiYWNrZW5kX21hcChzdHJ1Y3Qg eGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKQo+PiAtewo+PiAtwqDCoMKgIHN0cnVjdCBnbnR0YWJf bWFwX2dyYW50X3JlZiAqbWFwX29wcyA9IE5VTEw7Cj4+IC3CoMKgwqAgdW5zaWduZWQgY2hhciAq cHRyOwo+PiAtwqDCoMKgIGludCByZXQsIGN1cl9ncmVmLCBjdXJfZGlyX3BhZ2UsIGN1cl9wYWdl LCBncmVmc19sZWZ0Owo+PiAtCj4+IC3CoMKgwqAgbWFwX29wcyA9IGtjYWxsb2MoYnVmLT5udW1f cGFnZXMsIHNpemVvZigqbWFwX29wcyksIEdGUF9LRVJORUwpOwo+PiAtwqDCoMKgIGlmICghbWFw X29wcykKPj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+PiAtCj4+IC3CoMKgwqAg YnVmLT5iYWNrZW5kX21hcF9oYW5kbGVzID0ga2NhbGxvYyhidWYtPm51bV9wYWdlcywKPj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVvZigqYnVmLT5i YWNrZW5kX21hcF9oYW5kbGVzKSwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIEdGUF9LRVJORUwpOwo+PiAtwqDCoMKgIGlmICghYnVmLT5iYWNrZW5kX21h cF9oYW5kbGVzKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBrZnJlZShtYXBfb3BzKTsKPj4gLcKgwqDC oMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+PiAtwqDCoMKgIH0KPj4gLQo+PiAtwqDCoMKgIC8q Cj4+IC3CoMKgwqDCoCAqIHJlYWQgcGFnZSBkaXJlY3RvcnkgdG8gZ2V0IGdyZWZzIGZyb20gdGhl IGJhY2tlbmQ6IGZvciBleHRlcm5hbAo+PiAtwqDCoMKgwqAgKiBidWZmZXIgd2Ugb25seSBhbGxv Y2F0ZSBidWYtPmdyZWZzIGZvciB0aGUgcGFnZSBkaXJlY3RvcnksCj4+IC3CoMKgwqDCoCAqIHNv IGJ1Zi0+bnVtX2dyZWZzIGhhcyBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIHBhZ2UgZGlyZWN0b3J5 IAo+PiBpdHNlbGYKPj4gLcKgwqDCoMKgICovCj4+IC3CoMKgwqAgcHRyID0gYnVmLT5kaXJlY3Rv cnk7Cj4+IC3CoMKgwqAgZ3JlZnNfbGVmdCA9IGJ1Zi0+bnVtX3BhZ2VzOwo+PiAtwqDCoMKgIGN1 cl9wYWdlID0gMDsKPj4gLcKgwqDCoCBmb3IgKGN1cl9kaXJfcGFnZSA9IDA7IGN1cl9kaXJfcGFn ZSA8IGJ1Zi0+bnVtX2dyZWZzOyAKPj4gY3VyX2Rpcl9wYWdlKyspIHsKPj4gLcKgwqDCoMKgwqDC oMKgIHN0cnVjdCB4ZW5kaXNwbF9wYWdlX2RpcmVjdG9yeSAqcGFnZV9kaXIgPQo+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChzdHJ1Y3QgeGVuZGlzcGxfcGFnZV9kaXJlY3Rvcnkg KilwdHI7Cj4+IC3CoMKgwqDCoMKgwqDCoCBpbnQgdG9fY29weSA9IFhFTl9EUk1fTlVNX0dSRUZT X1BFUl9QQUdFOwo+PiAtCj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAodG9fY29weSA+IGdyZWZzX2xl ZnQpCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRvX2NvcHkgPSBncmVmc19sZWZ0Owo+PiAt Cj4+IC3CoMKgwqDCoMKgwqDCoCBmb3IgKGN1cl9ncmVmID0gMDsgY3VyX2dyZWYgPCB0b19jb3B5 OyBjdXJfZ3JlZisrKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBoeXNfYWRkcl90IGFk ZHI7Cj4+IC0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWRkciA9IHhlbl9wYWdlX3RvX3Zh ZGRyKGJ1Zi0+cGFnZXNbY3VyX3BhZ2VdKTsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ250 dGFiX3NldF9tYXBfb3AoJm1hcF9vcHNbY3VyX3BhZ2VdLCBhZGRyLAo+PiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdOVE1BUF9ob3N0X21hcCwKPj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwYWdlX2Rpci0+Z3JlZltjdXJf Z3JlZl0sCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVm LT54Yl9kZXYtPm90aGVyZW5kX2lkKTsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3VyX3Bh Z2UrKzsKPj4gLcKgwqDCoMKgwqDCoMKgIH0KPj4gLQo+PiAtwqDCoMKgwqDCoMKgwqAgZ3JlZnNf bGVmdCAtPSB0b19jb3B5Owo+PiAtwqDCoMKgwqDCoMKgwqAgcHRyICs9IFBBR0VfU0laRTsKPj4g LcKgwqDCoCB9Cj4+IC3CoMKgwqAgcmV0ID0gZ250dGFiX21hcF9yZWZzKG1hcF9vcHMsIE5VTEws IGJ1Zi0+cGFnZXMsIGJ1Zi0+bnVtX3BhZ2VzKTsKPj4gLQo+PiAtwqDCoMKgIC8qIHNhdmUgaGFu ZGxlcyBldmVuIGlmIGVycm9yLCBzbyB3ZSBjYW4gdW5tYXAgKi8KPj4gLcKgwqDCoCBmb3IgKGN1 cl9wYWdlID0gMDsgY3VyX3BhZ2UgPCBidWYtPm51bV9wYWdlczsgY3VyX3BhZ2UrKykgewo+PiAt wqDCoMKgwqDCoMKgwqAgYnVmLT5iYWNrZW5kX21hcF9oYW5kbGVzW2N1cl9wYWdlXSA9IG1hcF9v cHNbY3VyX3BhZ2VdLmhhbmRsZTsKPj4gLcKgwqDCoMKgwqDCoMKgIGlmICh1bmxpa2VseShtYXBf b3BzW2N1cl9wYWdlXS5zdGF0dXMgIT0gR05UU1Rfb2theSkpCj4+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgIERSTV9FUlJPUigiRmFpbGVkIHRvIG1hcCBwYWdlICVkOiAlZFxuIiwKPj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3VyX3BhZ2UsIG1hcF9vcHNbY3VyX3BhZ2Vd LnN0YXR1cyk7Cj4+IC3CoMKgwqAgfQo+PiAtCj4+IC3CoMKgwqAgaWYgKHJldCkgewo+PiAtwqDC oMKgwqDCoMKgwqAgRFJNX0VSUk9SKCJGYWlsZWQgdG8gbWFwIGdyYW50IHJlZmVyZW5jZXMsIHJl dCAlZCIsIHJldCk7Cj4+IC3CoMKgwqDCoMKgwqDCoCBiYWNrZW5kX3VubWFwKGJ1Zik7Cj4+IC3C oMKgwqAgfQo+PiAtCj4+IC3CoMKgwqAga2ZyZWUobWFwX29wcyk7Cj4+IC3CoMKgwqAgcmV0dXJu IHJldDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIHZvaWQgYmFja2VuZF9maWxsX3BhZ2VfZGlyKHN0 cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWYpCj4+IC17Cj4+IC3CoMKgwqAgc3RydWN0IHhl bmRpc3BsX3BhZ2VfZGlyZWN0b3J5ICpwYWdlX2RpcjsKPj4gLcKgwqDCoCB1bnNpZ25lZCBjaGFy ICpwdHI7Cj4+IC3CoMKgwqAgaW50IGksIG51bV9wYWdlc19kaXI7Cj4+IC0KPj4gLcKgwqDCoCBw dHIgPSBidWYtPmRpcmVjdG9yeTsKPj4gLcKgwqDCoCBudW1fcGFnZXNfZGlyID0gZ2V0X251bV9w YWdlc19kaXIoYnVmKTsKPj4gLQo+PiAtwqDCoMKgIC8qIGZpbGwgb25seSBncmVmcyBmb3IgdGhl IHBhZ2UgZGlyZWN0b3J5IGl0c2VsZiAqLwo+PiAtwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBudW1f cGFnZXNfZGlyIC0gMTsgaSsrKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBwYWdlX2RpciA9IChzdHJ1 Y3QgeGVuZGlzcGxfcGFnZV9kaXJlY3RvcnkgKilwdHI7Cj4+IC0KPj4gLcKgwqDCoMKgwqDCoMKg IHBhZ2VfZGlyLT5ncmVmX2Rpcl9uZXh0X3BhZ2UgPSBidWYtPmdyZWZzW2kgKyAxXTsKPj4gLcKg wqDCoMKgwqDCoMKgIHB0ciArPSBQQUdFX1NJWkU7Cj4+IC3CoMKgwqAgfQo+PiAtwqDCoMKgIC8q IGxhc3QgcGFnZSBtdXN0IHNheSB0aGVyZSBpcyBubyBtb3JlIHBhZ2VzICovCj4+IC3CoMKgwqAg cGFnZV9kaXIgPSAoc3RydWN0IHhlbmRpc3BsX3BhZ2VfZGlyZWN0b3J5ICopcHRyOwo+PiAtwqDC oMKgIHBhZ2VfZGlyLT5ncmVmX2Rpcl9uZXh0X3BhZ2UgPSBHUkFOVF9JTlZBTElEX1JFRjsKPj4g LX0KPj4gLQo+PiAtc3RhdGljIHZvaWQgZ3Vlc3RfZmlsbF9wYWdlX2RpcihzdHJ1Y3QgeGVuX2Ry bV9mcm9udF9zaGJ1ZiAqYnVmKQo+PiAtewo+PiAtwqDCoMKgIHVuc2lnbmVkIGNoYXIgKnB0cjsK Pj4gLcKgwqDCoCBpbnQgY3VyX2dyZWYsIGdyZWZzX2xlZnQsIHRvX2NvcHksIGksIG51bV9wYWdl c19kaXI7Cj4+IC0KPj4gLcKgwqDCoCBwdHIgPSBidWYtPmRpcmVjdG9yeTsKPj4gLcKgwqDCoCBu dW1fcGFnZXNfZGlyID0gZ2V0X251bV9wYWdlc19kaXIoYnVmKTsKPj4gLQo+PiAtwqDCoMKgIC8q Cj4+IC3CoMKgwqDCoCAqIHdoaWxlIGNvcHlpbmcsIHNraXAgZ3JlZnMgYXQgc3RhcnQsIHRoZXkg YXJlIGZvciBwYWdlcwo+PiAtwqDCoMKgwqAgKiBncmFudGVkIGZvciB0aGUgcGFnZSBkaXJlY3Rv cnkgaXRzZWxmCj4+IC3CoMKgwqDCoCAqLwo+PiAtwqDCoMKgIGN1cl9ncmVmID0gbnVtX3BhZ2Vz X2RpcjsKPj4gLcKgwqDCoCBncmVmc19sZWZ0ID0gYnVmLT5udW1fcGFnZXM7Cj4+IC3CoMKgwqAg Zm9yIChpID0gMDsgaSA8IG51bV9wYWdlc19kaXI7IGkrKykgewo+PiAtwqDCoMKgwqDCoMKgwqAg c3RydWN0IHhlbmRpc3BsX3BhZ2VfZGlyZWN0b3J5ICpwYWdlX2RpciA9Cj4+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKHN0cnVjdCB4ZW5kaXNwbF9wYWdlX2RpcmVjdG9yeSAqKXB0 cjsKPj4gLQo+PiAtwqDCoMKgwqDCoMKgwqAgaWYgKGdyZWZzX2xlZnQgPD0gWEVOX0RSTV9OVU1f R1JFRlNfUEVSX1BBR0UpIHsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdG9fY29weSA9IGdy ZWZzX2xlZnQ7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhZ2VfZGlyLT5ncmVmX2Rpcl9u ZXh0X3BhZ2UgPSBHUkFOVF9JTlZBTElEX1JFRjsKPj4gLcKgwqDCoMKgwqDCoMKgIH0gZWxzZSB7 Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRvX2NvcHkgPSBYRU5fRFJNX05VTV9HUkVGU19Q RVJfUEFHRTsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGFnZV9kaXItPmdyZWZfZGlyX25l eHRfcGFnZSA9IGJ1Zi0+Z3JlZnNbaSArIDFdOwo+PiAtwqDCoMKgwqDCoMKgwqAgfQo+PiAtwqDC oMKgwqDCoMKgwqAgbWVtY3B5KCZwYWdlX2Rpci0+Z3JlZiwgJmJ1Zi0+Z3JlZnNbY3VyX2dyZWZd LAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0b19jb3B5ICogc2l6ZW9mKGdyYW50 X3JlZl90KSk7Cj4+IC3CoMKgwqDCoMKgwqDCoCBwdHIgKz0gUEFHRV9TSVpFOwo+PiAtwqDCoMKg wqDCoMKgwqAgZ3JlZnNfbGVmdCAtPSB0b19jb3B5Owo+PiAtwqDCoMKgwqDCoMKgwqAgY3VyX2dy ZWYgKz0gdG9fY29weTsKPj4gLcKgwqDCoCB9Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgZ3Vl c3RfZ3JhbnRfcmVmc19mb3JfYnVmZmVyKHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWYs Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBncmFudF9y ZWZfdCAqcHJpdl9ncmVmX2hlYWQsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBpbnQgZ3JlZl9pZHgpCj4+IC17Cj4+IC3CoMKgwqAgaW50IGksIGN1cl9y ZWYsIG90aGVyZW5kX2lkOwo+PiAtCj4+IC3CoMKgwqAgb3RoZXJlbmRfaWQgPSBidWYtPnhiX2Rl di0+b3RoZXJlbmRfaWQ7Cj4+IC3CoMKgwqAgZm9yIChpID0gMDsgaSA8IGJ1Zi0+bnVtX3BhZ2Vz OyBpKyspIHsKPj4gLcKgwqDCoMKgwqDCoMKgIGN1cl9yZWYgPSBnbnR0YWJfY2xhaW1fZ3JhbnRf cmVmZXJlbmNlKHByaXZfZ3JlZl9oZWFkKTsKPj4gLcKgwqDCoMKgwqDCoMKgIGlmIChjdXJfcmVm IDwgMCkKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGN1cl9yZWY7Cj4+IC0KPj4g LcKgwqDCoMKgwqDCoMKgIGdudHRhYl9ncmFudF9mb3JlaWduX2FjY2Vzc19yZWYoY3VyX3JlZiwg b3RoZXJlbmRfaWQsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHhlbl9wYWdlX3RvX2dmbihidWYtPnBhZ2VzW2ldKSwKPj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMCk7Cj4+IC3CoMKgwqDCoMKgwqDCoCBi dWYtPmdyZWZzW2dyZWZfaWR4KytdID0gY3VyX3JlZjsKPj4gLcKgwqDCoCB9Cj4+IC3CoMKgwqAg cmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgZ3JhbnRfcmVmZXJlbmNlcyhzdHJ1 Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKQo+PiAtewo+PiAtwqDCoMKgIGdyYW50X3JlZl90 IHByaXZfZ3JlZl9oZWFkOwo+PiAtwqDCoMKgIGludCByZXQsIGksIGosIGN1cl9yZWY7Cj4+IC3C oMKgwqAgaW50IG90aGVyZW5kX2lkLCBudW1fcGFnZXNfZGlyOwo+PiAtCj4+IC3CoMKgwqAgcmV0 ID0gZ250dGFiX2FsbG9jX2dyYW50X3JlZmVyZW5jZXMoYnVmLT5udW1fZ3JlZnMsIAo+PiAmcHJp dl9ncmVmX2hlYWQpOwo+PiAtwqDCoMKgIGlmIChyZXQgPCAwKSB7Cj4+IC3CoMKgwqDCoMKgwqDC oCBEUk1fRVJST1IoIkNhbm5vdCBhbGxvY2F0ZSBncmFudCByZWZlcmVuY2VzXG4iKTsKPj4gLcKg wqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+IC3CoMKgwqAgfQo+PiAtCj4+IC3CoMKgwqAgb3Ro ZXJlbmRfaWQgPSBidWYtPnhiX2Rldi0+b3RoZXJlbmRfaWQ7Cj4+IC3CoMKgwqAgaiA9IDA7Cj4+ IC3CoMKgwqAgbnVtX3BhZ2VzX2RpciA9IGdldF9udW1fcGFnZXNfZGlyKGJ1Zik7Cj4+IC3CoMKg wqAgZm9yIChpID0gMDsgaSA8IG51bV9wYWdlc19kaXI7IGkrKykgewo+PiAtwqDCoMKgwqDCoMKg wqAgdW5zaWduZWQgbG9uZyBmcmFtZTsKPj4gLQo+PiAtwqDCoMKgwqDCoMKgwqAgY3VyX3JlZiA9 IGdudHRhYl9jbGFpbV9ncmFudF9yZWZlcmVuY2UoJnByaXZfZ3JlZl9oZWFkKTsKPj4gLcKgwqDC oMKgwqDCoMKgIGlmIChjdXJfcmVmIDwgMCkKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIGN1cl9yZWY7Cj4+IC0KPj4gLcKgwqDCoMKgwqDCoMKgIGZyYW1lID0geGVuX3BhZ2VfdG9f Z2ZuKHZpcnRfdG9fcGFnZShidWYtPmRpcmVjdG9yeSArCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBQQUdFX1NJWkUgKiBpKSk7Cj4+IC3CoMKgwqDCoMKgwqDCoCBn bnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3NfcmVmKGN1cl9yZWYsIG90aGVyZW5kX2lkLCBmcmFt ZSwgCj4+IDApOwo+PiAtwqDCoMKgwqDCoMKgwqAgYnVmLT5ncmVmc1tqKytdID0gY3VyX3JlZjsK Pj4gLcKgwqDCoCB9Cj4+IC0KPj4gLcKgwqDCoCBpZiAoYnVmLT5vcHMtPmdyYW50X3JlZnNfZm9y X2J1ZmZlcikgewo+PiAtwqDCoMKgwqDCoMKgwqAgcmV0ID0gYnVmLT5vcHMtPmdyYW50X3JlZnNf Zm9yX2J1ZmZlcihidWYsICZwcml2X2dyZWZfaGVhZCwgaik7Cj4+IC3CoMKgwqDCoMKgwqDCoCBp ZiAocmV0KQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiAtwqDCoMKg IH0KPj4gLQo+PiAtwqDCoMKgIGdudHRhYl9mcmVlX2dyYW50X3JlZmVyZW5jZXMocHJpdl9ncmVm X2hlYWQpOwo+PiAtwqDCoMKgIHJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGFs bG9jX3N0b3JhZ2Uoc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1ZikKPj4gLXsKPj4gLcKg wqDCoCBidWYtPmdyZWZzID0ga2NhbGxvYyhidWYtPm51bV9ncmVmcywgc2l6ZW9mKCpidWYtPmdy ZWZzKSwgCj4+IEdGUF9LRVJORUwpOwo+PiAtwqDCoMKgIGlmICghYnVmLT5ncmVmcykKPj4gLcKg wqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+PiAtCj4+IC3CoMKgwqAgYnVmLT5kaXJlY3Rv cnkgPSBrY2FsbG9jKGdldF9udW1fcGFnZXNfZGlyKGJ1ZiksIFBBR0VfU0laRSwgCj4+IEdGUF9L RVJORUwpOwo+PiAtwqDCoMKgIGlmICghYnVmLT5kaXJlY3RvcnkpCj4+IC3CoMKgwqDCoMKgwqDC oCByZXR1cm4gLUVOT01FTTsKPj4gLQo+PiAtwqDCoMKgIHJldHVybiAwOwo+PiAtfQo+PiAtCj4+ IC0vKgo+PiAtICogRm9yIGJlIGFsbG9jYXRlZCBidWZmZXJzIHdlIGRvbid0IG5lZWQgZ3JhbnRf cmVmc19mb3JfYnVmZmVyIGFzIAo+PiB0aG9zZQo+PiAtICogZ3JhbnQgcmVmZXJlbmNlcyBhcmUg YWxsb2NhdGVkIGF0IGJhY2tlbmQgc2lkZQo+PiAtICovCj4+IC1zdGF0aWMgY29uc3Qgc3RydWN0 IHhlbl9kcm1fZnJvbnRfc2hidWZfb3BzIGJhY2tlbmRfb3BzID0gewo+PiAtwqDCoMKgIC5jYWxj X251bV9ncmVmcyA9IGJhY2tlbmRfY2FsY19udW1fZ3JlZnMsCj4+IC3CoMKgwqAgLmZpbGxfcGFn ZV9kaXIgPSBiYWNrZW5kX2ZpbGxfcGFnZV9kaXIsCj4+IC3CoMKgwqAgLm1hcCA9IGJhY2tlbmRf bWFwLAo+PiAtwqDCoMKgIC51bm1hcCA9IGJhY2tlbmRfdW5tYXAKPj4gLX07Cj4+IC0KPj4gLS8q IEZvciBsb2NhbGx5IGdyYW50ZWQgcmVmZXJlbmNlcyB3ZSBkbyBub3QgbmVlZCB0byBtYXAvdW5t YXAgdGhlIAo+PiByZWZlcmVuY2VzICovCj4+IC1zdGF0aWMgY29uc3Qgc3RydWN0IHhlbl9kcm1f ZnJvbnRfc2hidWZfb3BzIGxvY2FsX29wcyA9IHsKPj4gLcKgwqDCoCAuY2FsY19udW1fZ3JlZnMg PSBndWVzdF9jYWxjX251bV9ncmVmcywKPj4gLcKgwqDCoCAuZmlsbF9wYWdlX2RpciA9IGd1ZXN0 X2ZpbGxfcGFnZV9kaXIsCj4+IC3CoMKgwqAgLmdyYW50X3JlZnNfZm9yX2J1ZmZlciA9IGd1ZXN0 X2dyYW50X3JlZnNfZm9yX2J1ZmZlciwKPj4gLX07Cj4+IC0KPj4gLXN0cnVjdCB4ZW5fZHJtX2Zy b250X3NoYnVmICoKPj4gLXhlbl9kcm1fZnJvbnRfc2hidWZfYWxsb2Moc3RydWN0IHhlbl9kcm1f ZnJvbnRfc2hidWZfY2ZnICpjZmcpCj4+IC17Cj4+IC3CoMKgwqAgc3RydWN0IHhlbl9kcm1fZnJv bnRfc2hidWYgKmJ1ZjsKPj4gLcKgwqDCoCBpbnQgcmV0Owo+PiAtCj4+IC3CoMKgwqAgYnVmID0g a3phbGxvYyhzaXplb2YoKmJ1ZiksIEdGUF9LRVJORUwpOwo+PiAtwqDCoMKgIGlmICghYnVmKQo+ PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4+IC0KPj4gLcKgwqDC oCBpZiAoY2ZnLT5iZV9hbGxvYykKPj4gLcKgwqDCoMKgwqDCoMKgIGJ1Zi0+b3BzID0gJmJhY2tl bmRfb3BzOwo+PiAtwqDCoMKgIGVsc2UKPj4gLcKgwqDCoMKgwqDCoMKgIGJ1Zi0+b3BzID0gJmxv Y2FsX29wczsKPj4gLQo+PiAtwqDCoMKgIGJ1Zi0+eGJfZGV2ID0gY2ZnLT54Yl9kZXY7Cj4+IC3C oMKgwqAgYnVmLT5udW1fcGFnZXMgPSBESVZfUk9VTkRfVVAoY2ZnLT5zaXplLCBQQUdFX1NJWkUp Owo+PiAtwqDCoMKgIGJ1Zi0+cGFnZXMgPSBjZmctPnBhZ2VzOwo+PiAtCj4+IC3CoMKgwqAgYnVm LT5vcHMtPmNhbGNfbnVtX2dyZWZzKGJ1Zik7Cj4+IC0KPj4gLcKgwqDCoCByZXQgPSBhbGxvY19z dG9yYWdlKGJ1Zik7Cj4+IC3CoMKgwqAgaWYgKHJldCkKPj4gLcKgwqDCoMKgwqDCoMKgIGdvdG8g ZmFpbDsKPj4gLQo+PiAtwqDCoMKgIHJldCA9IGdyYW50X3JlZmVyZW5jZXMoYnVmKTsKPj4gLcKg wqDCoCBpZiAocmV0KQo+PiAtwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+PiAtCj4+IC3CoMKg wqAgYnVmLT5vcHMtPmZpbGxfcGFnZV9kaXIoYnVmKTsKPj4gLQo+PiAtwqDCoMKgIHJldHVybiBi dWY7Cj4+IC0KPj4gLWZhaWw6Cj4+IC3CoMKgwqAgeGVuX2RybV9mcm9udF9zaGJ1Zl9mcmVlKGJ1 Zik7Cj4+IC3CoMKgwqAgcmV0dXJuIEVSUl9QVFIocmV0KTsKPj4gLX0KPj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9zaGJ1Zi5oIAo+PiBiL2RyaXZlcnMv Z3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9zaGJ1Zi5oCj4+IGRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAo+PiBpbmRleCA3NTQ1YzY5MjUzOWUuLjAwMDAwMDAwMDAwMAo+PiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfc2hidWYuaAo+PiArKysgL2Rldi9udWxsCj4+IEBA IC0xLDY0ICswLDAgQEAKPj4gLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9S IE1JVCAqLwo+PiAtCj4+IC0vKgo+PiAtICrCoCBYZW4gcGFyYS12aXJ0dWFsIERSTSBkZXZpY2UK Pj4gLSAqCj4+IC0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBFUEFNIFN5c3RlbXMgSW5jLgo+ PiAtICoKPj4gLSAqIEF1dGhvcjogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9h bmRydXNoY2hlbmtvQGVwYW0uY29tPgo+PiAtICovCj4+IC0KPj4gLSNpZm5kZWYgX19YRU5fRFJN X0ZST05UX1NIQlVGX0hfCj4+IC0jZGVmaW5lIF9fWEVOX0RSTV9GUk9OVF9TSEJVRl9IXwo+PiAt Cj4+IC0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4+IC0jaW5jbHVkZSA8bGludXgvc2NhdHRl cmxpc3QuaD4KPj4gLQo+PiAtI2luY2x1ZGUgPHhlbi9ncmFudF90YWJsZS5oPgo+PiAtCj4+IC1z dHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiB7Cj4+IC3CoMKgwqAgLyoKPj4gLcKgwqDCoMKgICog bnVtYmVyIG9mIHJlZmVyZW5jZXMgZ3JhbnRlZCBmb3IgdGhlIGJhY2tlbmQgdXNlOgo+PiAtwqDC oMKgwqAgKsKgIC0gZm9yIGFsbG9jYXRlZC9pbXBvcnRlZCBkbWEtYnVmJ3MgdGhpcyBob2xkcyBu dW1iZXIgb2YgZ3JhbnQKPj4gLcKgwqDCoMKgICrCoMKgwqAgcmVmZXJlbmNlcyBmb3IgdGhlIHBh Z2UgZGlyZWN0b3J5IGFuZCBwYWdlcyBvZiB0aGUgYnVmZmVyCj4+IC3CoMKgwqDCoCAqwqAgLSBm b3IgdGhlIGJ1ZmZlciBwcm92aWRlZCBieSB0aGUgYmFja2VuZCB0aGlzIGhvbGRzIG51bWJlciBv Zgo+PiAtwqDCoMKgwqAgKsKgwqDCoCBncmFudCByZWZlcmVuY2VzIGZvciB0aGUgcGFnZSBkaXJl Y3RvcnkgYXMgZ3JhbnQgCj4+IHJlZmVyZW5jZXMgZm9yCj4+IC3CoMKgwqDCoCAqwqDCoMKgIHRo ZSBidWZmZXIgd2lsbCBiZSBwcm92aWRlZCBieSB0aGUgYmFja2VuZAo+PiAtwqDCoMKgwqAgKi8K Pj4gLcKgwqDCoCBpbnQgbnVtX2dyZWZzOwo+PiAtwqDCoMKgIGdyYW50X3JlZl90ICpncmVmczsK Pj4gLcKgwqDCoCB1bnNpZ25lZCBjaGFyICpkaXJlY3Rvcnk7Cj4+IC0KPj4gLcKgwqDCoCBpbnQg bnVtX3BhZ2VzOwo+PiAtwqDCoMKgIHN0cnVjdCBwYWdlICoqcGFnZXM7Cj4+IC0KPj4gLcKgwqDC oCBzdHJ1Y3QgeGVuYnVzX2RldmljZSAqeGJfZGV2Owo+PiAtCj4+IC3CoMKgwqAgLyogdGhlc2Ug YXJlIHRoZSBvcHMgdXNlZCBpbnRlcm5hbGx5IGRlcGVuZGluZyBvbiBiZV9hbGxvYyBtb2RlICov Cj4+IC3CoMKgwqAgY29uc3Qgc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWZfb3BzICpvcHM7Cj4+ IC0KPj4gLcKgwqDCoCAvKiBYZW4gbWFwIGhhbmRsZXMgZm9yIHRoZSBidWZmZXIgYWxsb2NhdGVk IGJ5IHRoZSBiYWNrZW5kICovCj4+IC3CoMKgwqAgZ3JhbnRfaGFuZGxlX3QgKmJhY2tlbmRfbWFw X2hhbmRsZXM7Cj4+IC19Owo+PiAtCj4+IC1zdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1Zl9jZmcg ewo+PiAtwqDCoMKgIHN0cnVjdCB4ZW5idXNfZGV2aWNlICp4Yl9kZXY7Cj4+IC3CoMKgwqAgc2l6 ZV90IHNpemU7Cj4+IC3CoMKgwqAgc3RydWN0IHBhZ2UgKipwYWdlczsKPj4gLcKgwqDCoCBib29s IGJlX2FsbG9jOwo+PiAtfTsKPj4gLQo+PiAtc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKgo+ PiAteGVuX2RybV9mcm9udF9zaGJ1Zl9hbGxvYyhzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1Zl9j ZmcgKmNmZyk7Cj4+IC0KPj4gLWdyYW50X3JlZl90IHhlbl9kcm1fZnJvbnRfc2hidWZfZ2V0X2Rp cl9zdGFydChzdHJ1Y3QgCj4+IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1Zik7Cj4+IC0KPj4gLWlu dCB4ZW5fZHJtX2Zyb250X3NoYnVmX21hcChzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVm KTsKPj4gLQo+PiAtaW50IHhlbl9kcm1fZnJvbnRfc2hidWZfdW5tYXAoc3RydWN0IHhlbl9kcm1f ZnJvbnRfc2hidWYgKmJ1Zik7Cj4+IC0KPj4gLXZvaWQgeGVuX2RybV9mcm9udF9zaGJ1Zl9mbHVz aChzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKTsKPj4gLQo+PiAtdm9pZCB4ZW5fZHJt X2Zyb250X3NoYnVmX2ZyZWUoc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1Zik7Cj4+IC0K Pj4gLSNlbmRpZiAvKiBfX1hFTl9EUk1fRlJPTlRfU0hCVUZfSF8gKi8KCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QK WGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5v cmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=