From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexandru-Cosmin Gheorghe Subject: Re: [PATCH v2 2/2] drm/selftest: Add drm damage helper selftest Date: Fri, 19 Oct 2018 10:21:29 +0100 Message-ID: <20181019092129.GA1828@e114479-lin.cambridge.arm.com> References: <20181016204609.1555-1-drawat@vmware.com> <20181016204609.1555-2-drawat@vmware.com> <20181017064034.GG31561@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30074.outbound.protection.outlook.com [40.107.3.74]) by gabe.freedesktop.org (Postfix) with ESMTPS id E7FBE6E274 for ; Fri, 19 Oct 2018 09:21:34 +0000 (UTC) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Deepak Singh Rawat Cc: Daniel Vetter , nd@arm.com, linux-graphics-maintainer , "dri-devel@lists.freedesktop.org" List-Id: dri-devel@lists.freedesktop.org SGkgRGVlcGFrLAoKU29tZXRoaW5nIHRvIGNvbnNpZGVyLCB3aXRoIHRoaXMgYXBwcm9hY2ggd2Ug a2luZCBvZiBicmVhayB0aGUKZm9sbG93aW5nIGJlaGF2aW91cjoKIk9ubHkgdGVzdHMgZW5hYmxl ZCBhcyBtb2R1bGUgcGFyYW1ldGVycyBhcmUgcnVuLCBpZiBubyB0ZXN0IGlzCmV4cGxpY2l0bHkg ZW5hYmxlZCB0aGVuIGFsbCBvZiB0aGVtIGFyZSBydW4iCgpXaGF0IEkgdGhpbmsgd2Ugc2hvdWxk IGRvIGlzIGhhdmUganVzdCBvbmUgaGVhZGVyIHdoZXJlIHdlIHB1dCB0aGUgCnNlbGZ0ZXN0KGNo ZWNrX3BsYW5lX3N0YXRlLCBpZ3RfY2hlY2tfcGxhbmVfc3RhdGVhKQouLi4Kc2VsZnRlc3QoZGFt YWdlX2l0ZXJfbm9fZGFtYWdlLCBpZ3RfZGFtYWdlX2l0ZXJfbm9fZGFtYWdlKQouLi4KY2FsbCBp dCBkcm1fbW9kZXNldF9zZWxmdGVzdHMuaAoKQW5kIHNlcGFyYXRlIGp1c3QgdGhlIGltcGxlbWVu dGF0aW9ucyBpbiBkaWZmZXJlbnQgc291cmNlIGZpbGVzLgoKVGhlbiB3ZSBjb3VsZCBjYWxsIHJ1 bl9zZWxmdGVzdHMganVzdCBvbmNlIGZyb20gdGVzdF9kcm1fbW9kZXNldF9pbml0LgoKRG9lcyB0 aGlzIG1ha2VzIHNlbnNlIHRvIHlvdT8KClRoYW5rIHlvdSwKQWxleCBHaGVvcmdoZQoKT24gVGh1 LCBPY3QgMTgsIDIwMTggYXQgMDE6MzI6MDNQTSArMDAwMCwgRGVlcGFrIFNpbmdoIFJhd2F0IHdy b3RlOgo+ID4gT24gVHVlLCBPY3QgMTYsIDIwMTggYXQgMDE6NDY6MDlQTSAtMDcwMCwgRGVlcGFr IFJhd2F0IHdyb3RlOgo+ID4gPiBTZWxmdGVzdCBmb3IgZHJtIGRhbWFnZSBoZWxwZXIgaXRlcmF0 b3IgZnVuY3Rpb25zLgo+ID4gPgo+ID4gPiBDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRl ckBmZndsbC5jaD4KPiA+ID4gQ2M6IGFsZXhhbmRydS1jb3NtaW4uZ2hlb3JnaGVAYXJtLmNvbQo+ ID4gPiBTaWduZWQtb2ZmLWJ5OiBEZWVwYWsgUmF3YXQgPGRyYXdhdEB2bXdhcmUuY29tPgo+ID4g PiBSZXZpZXdlZC1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KPiA+ ID4gUmV2aWV3ZWQtYnk6IFRob21hcyBIZWxsc3Ryb20gPHRoZWxsc3Ryb21Adm13YXJlLmNvbT4K PiA+IAo+ID4gSSBndWVzcyB0aGlzIG5lZWRzIHlvdXIgZW50aXJlIGRhbWFnZSBzZXJpZXMgdG8g bWFrZSBzZW5zZSwgcmlnaHQ/Cj4gCj4gQWggeWVzIHNvcnJ5LiBBbHRob3VnaCB0aGlzIHBhdGNo IGlzIHNhbWUgYXMgd2hhdCBJIHNlbnQgZWFybGllcgo+IGV4Y2VwdCBsaW5raW5nIHdpdGggdGVz dC1kcm1fbW9kZXNldC5rbwo+IAo+ID4gCj4gPiBBbm90aGVyIHF1ZXN0aW9uOiBEb2VzIGFueW9u ZSBmcm9tIHZtd2dmeCB3YW50IGRybS1taXNjIGNvbW1pdCByaWdodHMgZm9yCj4gPiBwdXNoaW5n IHN0dWZmIGxpa2UgdGhpcz8KPiAKPiBIaSBEYW5pZWwsIFRoYW5rcyBmb3IgdGhlIHN1Z2dlc3Rp b24uIEkgYW0gbm90IHN1cmUgYWJvdXQgZWxpZ2liaWxpdHkgY3JpdGVyaWEgZm9yCj4gY29tbWl0 IHJpZ2h0cyBidXQgSSB0aGluayBJIHdpbGwgd2FpdCB1bnRpbCBkcm0tbWljcyBpcyBtb3ZlZCB0 byBnaXRsYWIgYW5kIEkgaGF2ZQo+IG1vcmUgZXhwZXJpZW5jZSB3b3JraW5nIHdpdGggb3Blbi1z b3VyY2UuIEJlc2lkZSBtZSBUaG9tYXMgd29ya3Mgb24KPiB2bXdnZngsIEkgYW0gbm90IHN1cmUg aWYgaGUgYWxyZWFkeSBoYXZlIGNvbW1pdCByaWdodHMuCj4gCj4gPiAtRGFuaWVsCj4gPiA+IC0t LQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0cy9NYWtlZmlsZSAgICAgICAgICAgIHwg ICAzICstCj4gPiA+ICAuLi4vc2VsZnRlc3RzL2RybV9kYW1hZ2VfaGVscGVyX3NlbGZ0ZXN0cy5o ICAgfCAgMjIgKwo+ID4gPiAgLi4uL2RybS9zZWxmdGVzdHMvdGVzdC1kcm1fZGFtYWdlX2hlbHBl ci5jICAgIHwgODI4ICsrKysrKysrKysrKysrKysrKwo+ID4gPiAgLi4uL2RybS9zZWxmdGVzdHMv dGVzdC1kcm1fbW9kZXNldF9jb21tb24uYyAgIHwgIDEwICstCj4gPiA+ICAuLi4vZHJtL3NlbGZ0 ZXN0cy90ZXN0LWRybV9tb2Rlc2V0X2NvbW1vbi5oICAgfCAgIDEgKwo+ID4gPiAgNSBmaWxlcyBj aGFuZ2VkLCA4NjIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKPiA+ID4gIGNyZWF0ZSBt b2RlIDEwMDY0NAo+ID4gZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0cy9kcm1fZGFtYWdlX2hlbHBl cl9zZWxmdGVzdHMuaAo+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9z ZWxmdGVzdHMvdGVzdC1kcm1fZGFtYWdlX2hlbHBlci5jCj4gPiA+Cj4gPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL01ha2VmaWxlCj4gPiBiL2RyaXZlcnMvZ3B1L2Ry bS9zZWxmdGVzdHMvTWFrZWZpbGUKPiA+ID4gaW5kZXggN2U2NTgxOTIxZGEwLi5jNmU2M2VkMTJm MDIgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMvTWFrZWZpbGUK PiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0cy9NYWtlZmlsZQo+ID4gPiBAQCAt MSwzICsxLDQgQEAKPiA+ID4gLXRlc3QtZHJtX21vZGVzZXQteSA6PSB0ZXN0LWRybV9tb2Rlc2V0 X2NvbW1vbi5vIHRlc3QtCj4gPiBkcm1fcGxhbmVfaGVscGVyLm8KPiA+ID4gK3Rlc3QtZHJtX21v ZGVzZXQteSA6PSB0ZXN0LWRybV9tb2Rlc2V0X2NvbW1vbi5vIHRlc3QtCj4gPiBkcm1fcGxhbmVf aGVscGVyLm8gXAo+ID4gPiArCQkgICAgICB0ZXN0LWRybV9kYW1hZ2VfaGVscGVyLm8KPiA+ID4K PiA+ID4gIG9iai0kKENPTkZJR19EUk1fREVCVUdfU0VMRlRFU1QpICs9IHRlc3QtZHJtX21tLm8g dGVzdC0KPiA+IGRybV9tb2Rlc2V0Lm8KPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9zZWxmdGVzdHMvZHJtX2RhbWFnZV9oZWxwZXJfc2VsZnRlc3RzLmgKPiA+IGIvZHJpdmVycy9n cHUvZHJtL3NlbGZ0ZXN0cy9kcm1fZGFtYWdlX2hlbHBlcl9zZWxmdGVzdHMuaAo+ID4gPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjNhMWNiZTA1YmVmMAo+ ID4gPiAtLS0gL2Rldi9udWxsCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMv ZHJtX2RhbWFnZV9oZWxwZXJfc2VsZnRlc3RzLmgKPiA+ID4gQEAgLTAsMCArMSwyMiBAQAo+ID4g PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KPiA+ID4gK3NlbGZ0ZXN0 KGRhbWFnZV9pdGVyX25vX2RhbWFnZSwgaWd0X2RhbWFnZV9pdGVyX25vX2RhbWFnZSkKPiA+ID4g K3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX25vX2RhbWFnZV9mcmFjdGlvbmFsX3NyYywKPiA+IGlndF9k YW1hZ2VfaXRlcl9ub19kYW1hZ2VfZnJhY3Rpb25hbF9zcmMpCj4gPiA+ICtzZWxmdGVzdChkYW1h Z2VfaXRlcl9ub19kYW1hZ2Vfc3JjX21vdmVkLAo+ID4gaWd0X2RhbWFnZV9pdGVyX25vX2RhbWFn ZV9zcmNfbW92ZWQpCj4gPiA+ICtzZWxmdGVzdChkYW1hZ2VfaXRlcl9ub19kYW1hZ2VfZnJhY3Rp b25hbF9zcmNfbW92ZWQsCj4gPiBpZ3RfZGFtYWdlX2l0ZXJfbm9fZGFtYWdlX2ZyYWN0aW9uYWxf c3JjX21vdmVkKQo+ID4gPiArc2VsZnRlc3QoZGFtYWdlX2l0ZXJfbm9fZGFtYWdlX25vdF92aXNp YmxlLAo+ID4gaWd0X2RhbWFnZV9pdGVyX25vX2RhbWFnZV9ub3RfdmlzaWJsZSkKPiA+ID4gK3Nl bGZ0ZXN0KGRhbWFnZV9pdGVyX25vX2RhbWFnZV9ub19jcnRjLAo+ID4gaWd0X2RhbWFnZV9pdGVy X25vX2RhbWFnZV9ub19jcnRjKQo+ID4gPiArc2VsZnRlc3QoZGFtYWdlX2l0ZXJfbm9fZGFtYWdl X25vX2ZiLAo+ID4gaWd0X2RhbWFnZV9pdGVyX25vX2RhbWFnZV9ub19mYikKPiA+ID4gK3NlbGZ0 ZXN0KGRhbWFnZV9pdGVyX3NpbXBsZV9kYW1hZ2UsIGlndF9kYW1hZ2VfaXRlcl9zaW1wbGVfZGFt YWdlKQo+ID4gPiArc2VsZnRlc3QoZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZSwgaWd0X2RhbWFn ZV9pdGVyX3NpbmdsZV9kYW1hZ2UpCj4gPiA+ICtzZWxmdGVzdChkYW1hZ2VfaXRlcl9zaW5nbGVf ZGFtYWdlX2ludGVyc2VjdF9zcmMsCj4gPiBpZ3RfZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9p bnRlcnNlY3Rfc3JjKQo+ID4gPiArc2VsZnRlc3QoZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9v dXRzaWRlX3NyYywKPiA+IGlndF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX291dHNpZGVfc3Jj KQo+ID4gPiArc2VsZnRlc3QoZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9mcmFjdGlvbmFsX3Ny YywKPiA+IGlndF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX2ZyYWN0aW9uYWxfc3JjKQo+ID4g PiArc2VsZnRlc3QoZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9pbnRlcnNlY3RfZnJhY3Rpb25h bF9zcmMsCj4gPiBpZ3RfZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9pbnRlcnNlY3RfZnJhY3Rp b25hbF9zcmMpCj4gPiA+ICtzZWxmdGVzdChkYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX291dHNp ZGVfZnJhY3Rpb25hbF9zcmMsCj4gPiBpZ3RfZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9vdXRz aWRlX2ZyYWN0aW9uYWxfc3JjKQo+ID4gPiArc2VsZnRlc3QoZGFtYWdlX2l0ZXJfc2luZ2xlX2Rh bWFnZV9zcmNfbW92ZWQsCj4gPiBpZ3RfZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9zcmNfbW92 ZWQpCj4gPiA+ICtzZWxmdGVzdChkYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX2ZyYWN0aW9uYWxf c3JjX21vdmVkLAo+ID4gaWd0X2RhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfZnJhY3Rpb25hbF9z cmNfbW92ZWQpCj4gPiA+ICtzZWxmdGVzdChkYW1hZ2VfaXRlcl9kYW1hZ2UsIGlndF9kYW1hZ2Vf aXRlcl9kYW1hZ2UpCj4gPiA+ICtzZWxmdGVzdChkYW1hZ2VfaXRlcl9kYW1hZ2Vfb25lX2ludGVy c2VjdCwKPiA+IGlndF9kYW1hZ2VfaXRlcl9kYW1hZ2Vfb25lX2ludGVyc2VjdCkKPiA+ID4gK3Nl bGZ0ZXN0KGRhbWFnZV9pdGVyX2RhbWFnZV9vbmVfb3V0c2lkZSwKPiA+IGlndF9kYW1hZ2VfaXRl cl9kYW1hZ2Vfb25lX291dHNpZGUpCj4gPiA+ICtzZWxmdGVzdChkYW1hZ2VfaXRlcl9kYW1hZ2Vf c3JjX21vdmVkLAo+ID4gaWd0X2RhbWFnZV9pdGVyX2RhbWFnZV9zcmNfbW92ZWQpCj4gPiA+ICtz ZWxmdGVzdChkYW1hZ2VfaXRlcl9kYW1hZ2Vfbm90X3Zpc2libGUsCj4gPiBpZ3RfZGFtYWdlX2l0 ZXJfZGFtYWdlX25vdF92aXNpYmxlKQo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3NlbGZ0ZXN0cy90ZXN0LWRybV9kYW1hZ2VfaGVscGVyLmMKPiA+IGIvZHJpdmVycy9ncHUvZHJt L3NlbGZ0ZXN0cy90ZXN0LWRybV9kYW1hZ2VfaGVscGVyLmMKPiA+ID4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi45Y2VjNzc3OGU1YjIKPiA+ID4gLS0tIC9k ZXYvbnVsbAo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL3Rlc3QtZHJtX2Rh bWFnZV9oZWxwZXIuYwo+ID4gPiBAQCAtMCwwICsxLDgyOCBAQAo+ID4gPiArLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiA+ID4gKy8qCj4gPiA+ICsgKiBUZXN0IGNhc2UgZm9y IGRybV9kYW1hZ2VfaGVscGVyIGZ1bmN0aW9ucwo+ID4gPiArICovCj4gPiA+ICsKPiA+ID4gKyNk ZWZpbmUgcHJfZm10KGZtdCkgImRybV9kYW1hZ2VfaGVscGVyOiAiIGZtdAo+ID4gPiArCj4gPiA+ ICsjaW5jbHVkZSA8ZHJtL2RybV9kYW1hZ2VfaGVscGVyLmg+Cj4gPiA+ICsKPiA+ID4gKyNpbmNs dWRlICJ0ZXN0LWRybV9tb2Rlc2V0X2NvbW1vbi5oIgo+ID4gPiArCj4gPiA+ICsjZGVmaW5lIFRF U1RTICJkcm1fZGFtYWdlX2hlbHBlcl9zZWxmdGVzdHMuaCIKPiA+ID4gKyNpbmNsdWRlICJkcm1f c2VsZnRlc3QuaCIKPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQgc2V0X3BsYW5lX3NyYyhzdHJ1 Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwKPiA+ID4g KwkJCSAgaW50IHkyKQo+ID4gPiArewo+ID4gPiArCXN0YXRlLT5zcmMueDEgPSB4MTsKPiA+ID4g KwlzdGF0ZS0+c3JjLnkxID0geTE7Cj4gPiA+ICsJc3RhdGUtPnNyYy54MiA9IHgyOwo+ID4gPiAr CXN0YXRlLT5zcmMueTIgPSB5MjsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQg c2V0X2RhbWFnZV9jbGlwKHN0cnVjdCBkcm1fbW9kZV9yZWN0ICpyLCBpbnQgeDEsIGludCB5MSwg aW50IHgyLAo+ID4gPiArCQkJICAgIGludCB5MikKPiA+ID4gK3sKPiA+ID4gKwlyLT54MSA9IHgx Owo+ID4gPiArCXItPnkxID0geTE7Cj4gPiA+ICsJci0+eDIgPSB4MjsKPiA+ID4gKwlyLT55MiA9 IHkyOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZCBzZXRfZGFtYWdlX2Jsb2Io c3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpkYW1hZ2VfYmxvYiwKPiA+ID4gKwkJCSAgICBzdHJ1 Y3QgZHJtX21vZGVfcmVjdCAqciwgdWludDMyX3Qgc2l6ZSkKPiA+ID4gK3sKPiA+ID4gKwlkYW1h Z2VfYmxvYi0+bGVuZ3RoID0gc2l6ZTsKPiA+ID4gKwlkYW1hZ2VfYmxvYi0+ZGF0YSA9IHI7Cj4g PiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB2b2lkIHNldF9wbGFuZV9kYW1hZ2Uoc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUsCj4gPiA+ICsJCQkgICAgIHN0cnVjdCBkcm1fcHJvcGVy dHlfYmxvYiAqZGFtYWdlX2Jsb2IpCj4gPiA+ICt7Cj4gPiA+ICsJc3RhdGUtPmZiX2RhbWFnZV9j bGlwcyA9IGRhbWFnZV9ibG9iOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgYm9vbCBj aGVja19kYW1hZ2VfY2xpcChzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSwgc3RydWN0Cj4g PiBkcm1fcmVjdCAqciwKPiA+ID4gKwkJCSAgICAgIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGlu dCB5MikKPiA+ID4gK3sKPiA+ID4gKwkvKgo+ID4gPiArCSAqIFJvdW5kIGRvd24geDEveTEgYW5k IHJvdW5kIHVwIHgyL3kyLiBUaGlzIGlzIGJlY2F1c2UgZGFtYWdlIGlzIG5vdAo+ID4gaW4KPiA+ ID4gKwkgKiAxNi4xNiBmaXhlZCBwb2ludCBzbyB0byBjYXRjaCBhbGwgcGl4ZWxzLgo+ID4gPiAr CSAqLwo+ID4gPiArCWludCBzcmNfeDEgPSBzdGF0ZS0+c3JjLngxID4+IDE2Owo+ID4gPiArCWlu dCBzcmNfeTEgPSBzdGF0ZS0+c3JjLnkxID4+IDE2Owo+ID4gPiArCWludCBzcmNfeDIgPSAoc3Rh dGUtPnNyYy54MiA+PiAxNikgKyAhIShzdGF0ZS0+c3JjLngyICYgMHhGRkZGKTsKPiA+ID4gKwlp bnQgc3JjX3kyID0gKHN0YXRlLT5zcmMueTIgPj4gMTYpICsgISEoc3RhdGUtPnNyYy55MiAmIDB4 RkZGRik7Cj4gPiA+ICsKPiA+ID4gKwlpZiAoeDEgPj0geDIgfHwgeTEgPj0geTIpIHsKPiA+ID4g KwkJcHJfZXJyKCJDYW5ub3QgaGF2ZSBkYW1hZ2UgY2xpcCB3aXRoIG5vIGRpbWVudGlvbi5cbiIp Owo+ID4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJaWYgKHgx IDwgc3JjX3gxIHx8IHkxIDwgc3JjX3kxIHx8IHgyID4gc3JjX3gyIHx8IHkyID4gc3JjX3kyKSB7 Cj4gPiA+ICsJCXByX2VycigiRGFtYWdlIGNhbm5vdCBiZSBvdXRzaWRlIHJvdW5kZWQgcGxhbmUg c3JjLlxuIik7Cj4gPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4g KwlpZiAoci0+eDEgIT0geDEgfHwgci0+eTEgIT0geTEgfHwgci0+eDIgIT0geDIgfHwgci0+eTIg IT0geTIpIHsKPiA+ID4gKwkJcHJfZXJyKCJEYW1hZ2UgPSAlZCAlZCAlZCAlZFxuIiwgci0+eDEs IHItPnkxLCByLT54Miwgci0+eTIpOwo+ID4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiA+ICsJfQo+ ID4gPiArCj4gPiA+ICsJcmV0dXJuIHRydWU7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRp YyBpbnQgaWd0X2RhbWFnZV9pdGVyX25vX2RhbWFnZSh2b2lkICppZ25vcmVkKQo+ID4gPiArewo+ ID4gPiArCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOwo+ID4gPiAr CXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOwo+ID4gPiArCXN0cnVjdCBkcm1fcmVj dCBjbGlwOwo+ID4gPiArCXVpbnQzMl90IG51bV9oaXRzID0gMDsKPiA+ID4gKwo+ID4gPiArCXN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7Cj4gPiA+ICsJCS53aWR0aCA9IDIwNDgsCj4gPiA+ ICsJCS5oZWlnaHQgPSAyMDQ4Cj4gPiA+ICsJfTsKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgc3RhdGUgPSB7Cj4gPiA+ICsJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKPiA+ ID4gKwkJLmZiID0gJmZiLAo+ID4gPiArCQkudmlzaWJsZSA9IHRydWUsCj4gPiA+ICsJfTsKPiA+ ID4gKwo+ID4gPiArCS8qIFBsYW5lIHNyYyBzYW1lIGFzIGZiIHNpemUuICovCj4gPiA+ICsJc2V0 X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAwLCAwLCBmYi53aWR0aCA8PCAxNiwgZmIuaGVpZ2h0IDw8 IDE2KTsKPiA+ID4gKwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMCwgMCwgZmIud2lkdGggPDwgMTYs IGZiLmhlaWdodCA8PCAxNik7Cj4gPiA+ICsJZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJf aW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRlKTsKPiA+ID4gKwlkcm1fYXRvbWljX2Zvcl9l YWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApCj4gPiA+ICsJCW51bV9oaXRzKys7Cj4gPiA+ ICsKPiA+ID4gKwlGQUlMKG51bV9oaXRzICE9IDEsICJTaG91bGQgcmV0dXJuIHBsYW5lIHNyYyBh cyBkYW1hZ2UuIik7Cj4gPiA+ICsJRkFJTF9PTighY2hlY2tfZGFtYWdlX2NsaXAoJnN0YXRlLCAm Y2xpcCwgMCwgMCwgMjA0OCwgMjA0OCkpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX25vX2RhbWFnZV9m cmFjdGlvbmFsX3NyYyh2b2lkICppZ25vcmVkKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1f YXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOwo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgb2xkX3N0YXRlOwo+ID4gPiArCXN0cnVjdCBkcm1fcmVjdCBjbGlwOwo+ID4gPiArCXVp bnQzMl90IG51bV9oaXRzID0gMDsKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgZmIgPSB7Cj4gPiA+ICsJCS53aWR0aCA9IDIwNDgsCj4gPiA+ICsJCS5oZWlnaHQgPSAyMDQ4 Cj4gPiA+ICsJfTsKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUg PSB7Cj4gPiA+ICsJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKPiA+ID4gKwkJLmZiID0gJmZiLAo+ ID4gPiArCQkudmlzaWJsZSA9IHRydWUsCj4gPiA+ICsJfTsKPiA+ID4gKwo+ID4gPiArCS8qIFBs YW5lIHNyYyBoYXMgZnJhY3Rpb25hbCBwYXJ0LiAqLwo+ID4gPiArCXNldF9wbGFuZV9zcmMoJm9s ZF9zdGF0ZSwgMHgzZmZmZSwgMHgzZmZmZSwKPiA+ID4gKwkJICAgICAgMHgzZmZmZSArICgxMDI0 IDw8IDE2KSwgMHgzZmZmZSArICg3NjggPDwgMTYpKTsKPiA+ID4gKwlzZXRfcGxhbmVfc3JjKCZz dGF0ZSwgMHgzZmZmZSwgMHgzZmZmZSwKPiA+ID4gKwkJICAgICAgMHgzZmZmZSArICgxMDI0IDw8 IDE2KSwgMHgzZmZmZSArICg3NjggPDwgMTYpKTsKPiA+ID4gKwlkcm1fYXRvbWljX2hlbHBlcl9k YW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3RhdGUpOwo+ID4gPiArCWRybV9h dG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKPiA+ID4gKwkJbnVtX2hp dHMrKzsKPiA+ID4gKwo+ID4gPiArCUZBSUwobnVtX2hpdHMgIT0gMSwgIlNob3VsZCByZXR1cm4g cm91bmRlZCBvZmYgcGxhbmUgc3JjIGFzIGRhbWFnZS4iKTsKPiA+ID4gKwlGQUlMX09OKCFjaGVj a19kYW1hZ2VfY2xpcCgmc3RhdGUsICZjbGlwLCAzLCAzLCAxMDI4LCA3NzIpKTsKPiA+ID4gKwo+ ID4gPiArCXJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgaW50IGlndF9k YW1hZ2VfaXRlcl9ub19kYW1hZ2Vfc3JjX21vdmVkKHZvaWQgKmlnbm9yZWQpCj4gPiA+ICt7Cj4g PiA+ICsJc3RydWN0IGRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyIGl0ZXI7Cj4gPiA+ICsJ c3RydWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3RhdGU7Cj4gPiA+ICsJc3RydWN0IGRybV9yZWN0 IGNsaXA7Cj4gPiA+ICsJdWludDMyX3QgbnVtX2hpdHMgPSAwOwo+ID4gPiArCj4gPiA+ICsJc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciBmYiA9IHsKPiA+ID4gKwkJLndpZHRoID0gMjA0OCwKPiA+ID4g KwkJLmhlaWdodCA9IDIwNDgKPiA+ID4gKwl9Owo+ID4gPiArCj4gPiA+ICsJc3RydWN0IGRybV9w bGFuZV9zdGF0ZSBzdGF0ZSA9IHsKPiA+ID4gKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAo+ID4g PiArCQkuZmIgPSAmZmIsCj4gPiA+ICsJCS52aXNpYmxlID0gdHJ1ZSwKPiA+ID4gKwl9Owo+ID4g PiArCj4gPiA+ICsJLyogUGxhbmUgc3JjIG1vdmVkIHNpbmNlIG9sZCBwbGFuZSBzdGF0ZS4gKi8K PiA+ID4gKwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8 PCAxNik7Cj4gPiA+ICsJc2V0X3BsYW5lX3NyYygmc3RhdGUsIDEwIDw8IDE2LCAxMCA8PCAxNiwK PiA+ID4gKwkJICAgICAgKDEwICsgMTAyNCkgPDwgMTYsICgxMCArIDc2OCkgPDwgMTYpOwo+ID4g PiArCWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUs ICZzdGF0ZSk7Cj4gPiA+ICsJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIs ICZjbGlwKQo+ID4gPiArCQludW1faGl0cysrOwo+ID4gPiArCj4gPiA+ICsJRkFJTChudW1faGl0 cyAhPSAxLCAiU2hvdWxkIHJldHVybiBwbGFuZSBzcmMgYXMgZGFtYWdlLiIpOwo+ID4gPiArCUZB SUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDEwLCAxMCwgMTAzNCwgNzc4 KSk7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3Rh dGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfbm9fZGFtYWdlX2ZyYWN0aW9uYWxfc3JjX21vdmVkKHZv aWQgKmlnbm9yZWQpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGRybV9hdG9taWNfaGVscGVyX2Rh bWFnZV9pdGVyIGl0ZXI7Cj4gPiA+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3RhdGU7 Cj4gPiA+ICsJc3RydWN0IGRybV9yZWN0IGNsaXA7Cj4gPiA+ICsJdWludDMyX3QgbnVtX2hpdHMg PSAwOwo+ID4gPiArCj4gPiA+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBmYiA9IHsKPiA+ID4g KwkJLndpZHRoID0gMjA0OCwKPiA+ID4gKwkJLmhlaWdodCA9IDIwNDgKPiA+ID4gKwl9Owo+ID4g PiArCj4gPiA+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKPiA+ID4gKwkJLmNy dGMgPSBaRVJPX1NJWkVfUFRSLAo+ID4gPiArCQkuZmIgPSAmZmIsCj4gPiA+ICsJCS52aXNpYmxl ID0gdHJ1ZSwKPiA+ID4gKwl9Owo+ID4gPiArCj4gPiA+ICsJLyogUGxhbmUgc3JjIGhhcyBmcmFj dGlvbmFsIHBhcnQgYW5kIGl0IG1vdmVkIHNpbmNlIG9sZCBwbGFuZSBzdGF0ZS4gKi8KPiA+ID4g KwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDB4M2ZmZmUsIDB4M2ZmZmUsCj4gPiA+ICsJCSAg ICAgIDB4M2ZmZmUgKyAoMTAyNCA8PCAxNiksIDB4M2ZmZmUgKyAoNzY4IDw8IDE2KSk7Cj4gPiA+ ICsJc2V0X3BsYW5lX3NyYygmc3RhdGUsIDB4NDAwMDIsIDB4NDAwMDIsCj4gPiA+ICsJCSAgICAg IDB4NDAwMDIgKyAoMTAyNCA8PCAxNiksIDB4NDAwMDIgKyAoNzY4IDw8IDE2KSk7Cj4gPiA+ICsJ ZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0 YXRlKTsKPiA+ID4gKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNs aXApCj4gPiA+ICsJCW51bV9oaXRzKys7Cj4gPiA+ICsKPiA+ID4gKwlGQUlMKG51bV9oaXRzICE9 IDEsICJTaG91bGQgcmV0dXJuIHBsYW5lIHNyYyBhcyBkYW1hZ2UuIik7Cj4gPiA+ICsJRkFJTF9P TighY2hlY2tfZGFtYWdlX2NsaXAoJnN0YXRlLCAmY2xpcCwgNCwgNCwgMTAyOSwgNzczKSk7Cj4g PiA+ICsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGlu dCBpZ3RfZGFtYWdlX2l0ZXJfbm9fZGFtYWdlX25vdF92aXNpYmxlKHZvaWQgKmlnbm9yZWQpCj4g PiA+ICt7Cj4gPiA+ICsJc3RydWN0IGRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyIGl0ZXI7 Cj4gPiA+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3RhdGU7Cj4gPiA+ICsJc3RydWN0 IGRybV9yZWN0IGNsaXA7Cj4gPiA+ICsJdWludDMyX3QgbnVtX2hpdHMgPSAwOwo+ID4gPiArCj4g PiA+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBmYiA9IHsKPiA+ID4gKwkJLndpZHRoID0gMjA0 OCwKPiA+ID4gKwkJLmhlaWdodCA9IDIwNDgKPiA+ID4gKwl9Owo+ID4gPiArCj4gPiA+ICsJc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKPiA+ID4gKwkJLmNydGMgPSBaRVJPX1NJWkVf UFRSLAo+ID4gPiArCQkuZmIgPSAmZmIsCj4gPiA+ICsJCS52aXNpYmxlID0gZmFsc2UsCj4gPiA+ ICsJfTsKPiA+ID4gKwo+ID4gPiArCXNldF9wbGFuZV9zcmMoJm9sZF9zdGF0ZSwgMCwgMCwgMTAy NCA8PCAxNiwgNzY4IDw8IDE2KTsKPiA+ID4gKwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMCwgMCwg MTAyNCA8PCAxNiwgNzY4IDw8IDE2KTsKPiA+ID4gKwlkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2Vf aXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3RhdGUpOwo+ID4gPiArCWRybV9hdG9taWNf Zm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKPiA+ID4gKwkJbnVtX2hpdHMrKzsK PiA+ID4gKwo+ID4gPiArCUZBSUwobnVtX2hpdHMgIT0gMCwgIlNob3VsZCBoYXZlIG5vIGRhbWFn ZS4iKTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtz dGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9ub19kYW1hZ2Vfbm9fY3J0Yyh2b2lkICppZ25vcmVk KQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBp dGVyOwo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOwo+ID4gPiArCXN0 cnVjdCBkcm1fcmVjdCBjbGlwOwo+ID4gPiArCXVpbnQzMl90IG51bV9oaXRzID0gMDsKPiA+ID4g Kwo+ID4gPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7Cj4gPiA+ICsJCS53aWR0aCA9 IDIwNDgsCj4gPiA+ICsJCS5oZWlnaHQgPSAyMDQ4Cj4gPiA+ICsJfTsKPiA+ID4gKwo+ID4gPiAr CXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7Cj4gPiA+ICsJCS5jcnRjID0gMCwKPiA+ ID4gKwkJLmZiID0gJmZiLAo+ID4gPiArCX07Cj4gPiA+ICsKPiA+ID4gKwlzZXRfcGxhbmVfc3Jj KCZvbGRfc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7Cj4gPiA+ICsJc2V0X3Bs YW5lX3NyYygmc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7Cj4gPiA+ICsJZHJt X2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRl KTsKPiA+ID4gKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXAp Cj4gPiA+ICsJCW51bV9oaXRzKys7Cj4gPiA+ICsKPiA+ID4gKwlGQUlMKG51bV9oaXRzICE9IDAs ICJTaG91bGQgaGF2ZSBubyBkYW1hZ2UuIik7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfbm9fZGFtYWdl X25vX2ZiKHZvaWQgKmlnbm9yZWQpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGRybV9hdG9taWNf aGVscGVyX2RhbWFnZV9pdGVyIGl0ZXI7Cj4gPiA+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBv bGRfc3RhdGU7Cj4gPiA+ICsJc3RydWN0IGRybV9yZWN0IGNsaXA7Cj4gPiA+ICsJdWludDMyX3Qg bnVtX2hpdHMgPSAwOwo+ID4gPiArCj4gPiA+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0 ZSA9IHsKPiA+ID4gKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAo+ID4gPiArCQkuZmIgPSAwLAo+ ID4gPiArCX07Cj4gPiA+ICsKPiA+ID4gKwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDAsIDAs IDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7Cj4gPiA+ICsJc2V0X3BsYW5lX3NyYygmc3RhdGUsIDAs IDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7Cj4gPiA+ICsJZHJtX2F0b21pY19oZWxwZXJfZGFt YWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRlKTsKPiA+ID4gKwlkcm1fYXRv bWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApCj4gPiA+ICsJCW51bV9oaXRz Kys7Cj4gPiA+ICsKPiA+ID4gKwlGQUlMKG51bV9oaXRzICE9IDAsICJTaG91bGQgaGF2ZSBubyBk YW1hZ2UuIik7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gKwo+ID4g PiArc3RhdGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfc2ltcGxlX2RhbWFnZSh2b2lkICppZ25vcmVk KQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBp dGVyOwo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOwo+ID4gPiArCXN0 cnVjdCBkcm1fcHJvcGVydHlfYmxvYiBkYW1hZ2VfYmxvYjsKPiA+ID4gKwlzdHJ1Y3QgZHJtX21v ZGVfcmVjdCBkYW1hZ2U7Cj4gPiA+ICsJc3RydWN0IGRybV9yZWN0IGNsaXA7Cj4gPiA+ICsJdWlu dDMyX3QgbnVtX2hpdHMgPSAwOwo+ID4gPiArCj4gPiA+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciBmYiA9IHsKPiA+ID4gKwkJLndpZHRoID0gMjA0OCwKPiA+ID4gKwkJLmhlaWdodCA9IDIwNDgK PiA+ID4gKwl9Owo+ID4gPiArCj4gPiA+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9 IHsKPiA+ID4gKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAo+ID4gPiArCQkuZmIgPSAmZmIsCj4g PiA+ICsJCS52aXNpYmxlID0gdHJ1ZSwKPiA+ID4gKwl9Owo+ID4gPiArCj4gPiA+ICsJc2V0X3Bs YW5lX3NyYygmb2xkX3N0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOwo+ID4gPiAr CXNldF9wbGFuZV9zcmMoJnN0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOwo+ID4g PiArCS8qIERhbWFnZSBzZXQgdG8gcGxhbmUgc3JjICovCj4gPiA+ICsJc2V0X2RhbWFnZV9jbGlw KCZkYW1hZ2UsIDAsIDAsIDEwMjQsIDc2OCk7Cj4gPiA+ICsJc2V0X2RhbWFnZV9ibG9iKCZkYW1h Z2VfYmxvYiwgJmRhbWFnZSwgc2l6ZW9mKGRhbWFnZSkpOwo+ID4gPiArCXNldF9wbGFuZV9kYW1h Z2UoJnN0YXRlLCAmZGFtYWdlX2Jsb2IpOwo+ID4gPiArCWRybV9hdG9taWNfaGVscGVyX2RhbWFn ZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7Cj4gPiA+ICsJZHJtX2F0b21p Y19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIsICZjbGlwKQo+ID4gPiArCQludW1faGl0cysr Owo+ID4gPiArCj4gPiA+ICsJRkFJTChudW1faGl0cyAhPSAxLCAiU2hvdWxkIHJldHVybiBkYW1h Z2Ugd2hlbiBzZXQuIik7Cj4gPiA+ICsJRkFJTF9PTighY2hlY2tfZGFtYWdlX2NsaXAoJnN0YXRl LCAmY2xpcCwgMCwgMCwgMTAyNCwgNzY4KSk7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfc2luZ2xlX2Rh bWFnZSh2b2lkICppZ25vcmVkKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fYXRvbWljX2hl bHBlcl9kYW1hZ2VfaXRlciBpdGVyOwo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xk X3N0YXRlOwo+ID4gPiArCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiBkYW1hZ2VfYmxvYjsKPiA+ ID4gKwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCBkYW1hZ2U7Cj4gPiA+ICsJc3RydWN0IGRybV9yZWN0 IGNsaXA7Cj4gPiA+ICsJdWludDMyX3QgbnVtX2hpdHMgPSAwOwo+ID4gPiArCj4gPiA+ICsJc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciBmYiA9IHsKPiA+ID4gKwkJLndpZHRoID0gMjA0OCwKPiA+ID4g KwkJLmhlaWdodCA9IDIwNDgKPiA+ID4gKwl9Owo+ID4gPiArCj4gPiA+ICsJc3RydWN0IGRybV9w bGFuZV9zdGF0ZSBzdGF0ZSA9IHsKPiA+ID4gKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAo+ID4g PiArCQkuZmIgPSAmZmIsCj4gPiA+ICsJCS52aXNpYmxlID0gdHJ1ZSwKPiA+ID4gKwl9Owo+ID4g PiArCj4gPiA+ICsJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3 NjggPDwgMTYpOwo+ID4gPiArCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAwLCAwLCAxMDI0IDw8IDE2 LCA3NjggPDwgMTYpOwo+ID4gPiArCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlLCAyNTYsIDE5Miwg NzY4LCA1NzYpOwo+ID4gPiArCXNldF9kYW1hZ2VfYmxvYigmZGFtYWdlX2Jsb2IsICZkYW1hZ2Us IHNpemVvZihkYW1hZ2UpKTsKPiA+ID4gKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFn ZV9ibG9iKTsKPiA+ID4gKwlkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVy LCAmb2xkX3N0YXRlLCAmc3RhdGUpOwo+ID4gPiArCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVf ZGFtYWdlKCZpdGVyLCAmY2xpcCkKPiA+ID4gKwkJbnVtX2hpdHMrKzsKPiA+ID4gKwo+ID4gPiAr CUZBSUwobnVtX2hpdHMgIT0gMSwgIlNob3VsZCByZXR1cm4gZGFtYWdlIHdoZW4gc2V0LiIpOwo+ ID4gPiArCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDI1NiwgMTky LCA3NjgsIDU3NikpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+ICsK PiA+ID4gK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfaW50ZXJzZWN0 X3NyYyh2b2lkICppZ25vcmVkKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fYXRvbWljX2hl bHBlcl9kYW1hZ2VfaXRlciBpdGVyOwo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xk X3N0YXRlOwo+ID4gPiArCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiBkYW1hZ2VfYmxvYjsKPiA+ ID4gKwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCBkYW1hZ2U7Cj4gPiA+ICsJc3RydWN0IGRybV9yZWN0 IGNsaXA7Cj4gPiA+ICsJdWludDMyX3QgbnVtX2hpdHMgPSAwOwo+ID4gPiArCj4gPiA+ICsJc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciBmYiA9IHsKPiA+ID4gKwkJLndpZHRoID0gMjA0OCwKPiA+ID4g KwkJLmhlaWdodCA9IDIwNDgKPiA+ID4gKwl9Owo+ID4gPiArCj4gPiA+ICsJc3RydWN0IGRybV9w bGFuZV9zdGF0ZSBzdGF0ZSA9IHsKPiA+ID4gKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAo+ID4g PiArCQkuZmIgPSAmZmIsCj4gPiA+ICsJCS52aXNpYmxlID0gdHJ1ZSwKPiA+ID4gKwl9Owo+ID4g PiArCj4gPiA+ICsJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3 NjggPDwgMTYpOwo+ID4gPiArCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAwLCAwLCAxMDI0IDw8IDE2 LCA3NjggPDwgMTYpOwo+ID4gPiArCS8qIERhbWFnZSBpbnRlcnNlY3Qgd2l0aCBwbGFuZSBzcmMu ICovCj4gPiA+ICsJc2V0X2RhbWFnZV9jbGlwKCZkYW1hZ2UsIDI1NiwgMTkyLCAxMzYwLCA3Njgp Owo+ID4gPiArCXNldF9kYW1hZ2VfYmxvYigmZGFtYWdlX2Jsb2IsICZkYW1hZ2UsIHNpemVvZihk YW1hZ2UpKTsKPiA+ID4gKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsK PiA+ID4gKwlkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0 YXRlLCAmc3RhdGUpOwo+ID4gPiArCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZp dGVyLCAmY2xpcCkKPiA+ID4gKwkJbnVtX2hpdHMrKzsKPiA+ID4gKwo+ID4gPiArCUZBSUwobnVt X2hpdHMgIT0gMSwgIlNob3VsZCByZXR1cm4gZGFtYWdlIGNsaXBwZWQgdG8gc3JjLiIpOwo+ID4g PiArCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDI1NiwgMTkyLCAx MDI0LCA3NjgpKTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4g PiA+ICtzdGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX291dHNpZGVfc3Jj KHZvaWQgKmlnbm9yZWQpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGRybV9hdG9taWNfaGVscGVy X2RhbWFnZV9pdGVyIGl0ZXI7Cj4gPiA+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3Rh dGU7Cj4gPiA+ICsJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iIGRhbWFnZV9ibG9iOwo+ID4gPiAr CXN0cnVjdCBkcm1fbW9kZV9yZWN0IGRhbWFnZTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX3JlY3QgY2xp cDsKPiA+ID4gKwl1aW50MzJfdCBudW1faGl0cyA9IDA7Cj4gPiA+ICsKPiA+ID4gKwlzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyIGZiID0gewo+ID4gPiArCQkud2lkdGggPSAyMDQ4LAo+ID4gPiArCQku aGVpZ2h0ID0gMjA0OAo+ID4gPiArCX07Cj4gPiA+ICsKPiA+ID4gKwlzdHJ1Y3QgZHJtX3BsYW5l X3N0YXRlIHN0YXRlID0gewo+ID4gPiArCQkuY3J0YyA9IFpFUk9fU0laRV9QVFIsCj4gPiA+ICsJ CS5mYiA9ICZmYiwKPiA+ID4gKwkJLnZpc2libGUgPSB0cnVlLAo+ID4gPiArCX07Cj4gPiA+ICsK PiA+ID4gKwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8 PCAxNik7Cj4gPiA+ICsJc2V0X3BsYW5lX3NyYygmc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2 OCA8PCAxNik7Cj4gPiA+ICsJLyogRGFtYWdlIGNsaXAgb3V0c2lkZSBwbGFuZSBzcmMgKi8KPiA+ ID4gKwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZSwgMTM2MCwgMTM2MCwgMTM4MCwgMTM4MCk7Cj4g PiA+ICsJc2V0X2RhbWFnZV9ibG9iKCZkYW1hZ2VfYmxvYiwgJmRhbWFnZSwgc2l6ZW9mKGRhbWFn ZSkpOwo+ID4gPiArCXNldF9wbGFuZV9kYW1hZ2UoJnN0YXRlLCAmZGFtYWdlX2Jsb2IpOwo+ID4g PiArCWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUs ICZzdGF0ZSk7Cj4gPiA+ICsJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIs ICZjbGlwKQo+ID4gPiArCQludW1faGl0cysrOwo+ID4gPiArCj4gPiA+ICsJRkFJTChudW1faGl0 cyAhPSAwLCAiU2hvdWxkIGhhdmUgbm8gZGFtYWdlLiIpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJu IDA7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX3Np bmdsZV9kYW1hZ2VfZnJhY3Rpb25hbF9zcmModm9pZCAqaWdub3JlZCkKPiA+ID4gK3sKPiA+ID4g KwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIgaXRlcjsKPiA+ID4gKwlzdHJ1 Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5 X2Jsb2IgZGFtYWdlX2Jsb2I7Cj4gPiA+ICsJc3RydWN0IGRybV9tb2RlX3JlY3QgZGFtYWdlOwo+ ID4gPiArCXN0cnVjdCBkcm1fcmVjdCBjbGlwOwo+ID4gPiArCXVpbnQzMl90IG51bV9oaXRzID0g MDsKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7Cj4gPiA+ICsJ CS53aWR0aCA9IDIwNDgsCj4gPiA+ICsJCS5oZWlnaHQgPSAyMDQ4Cj4gPiA+ICsJfTsKPiA+ID4g Kwo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7Cj4gPiA+ICsJCS5jcnRj ID0gWkVST19TSVpFX1BUUiwKPiA+ID4gKwkJLmZiID0gJmZiLAo+ID4gPiArCQkudmlzaWJsZSA9 IHRydWUsCj4gPiA+ICsJfTsKPiA+ID4gKwo+ID4gPiArCS8qIFBsYW5lIHNyYyBoYXMgZnJhY3Rp b25hbCBwYXJ0LiAqLwo+ID4gPiArCXNldF9wbGFuZV9zcmMoJm9sZF9zdGF0ZSwgMHg0MDAwMiwg MHg0MDAwMiwKPiA+ID4gKwkJICAgICAgMHg0MDAwMiArICgxMDI0IDw8IDE2KSwgMHg0MDAwMiAr ICg3NjggPDwgMTYpKTsKPiA+ID4gKwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMHg0MDAwMiwgMHg0 MDAwMiwKPiA+ID4gKwkJICAgICAgMHg0MDAwMiArICgxMDI0IDw8IDE2KSwgMHg0MDAwMiArICg3 NjggPDwgMTYpKTsKPiA+ID4gKwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZSwgMTAsIDEwLCAyNTYs IDMzMCk7Cj4gPiA+ICsJc2V0X2RhbWFnZV9ibG9iKCZkYW1hZ2VfYmxvYiwgJmRhbWFnZSwgc2l6 ZW9mKGRhbWFnZSkpOwo+ID4gPiArCXNldF9wbGFuZV9kYW1hZ2UoJnN0YXRlLCAmZGFtYWdlX2Js b2IpOwo+ID4gPiArCWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZv bGRfc3RhdGUsICZzdGF0ZSk7Cj4gPiA+ICsJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1h Z2UoJml0ZXIsICZjbGlwKQo+ID4gPiArCQludW1faGl0cysrOwo+ID4gPiArCj4gPiA+ICsJRkFJ TChudW1faGl0cyAhPSAxLCAiU2hvdWxkIHJldHVybiBkYW1hZ2Ugd2hlbiBzZXQuIik7Cj4gPiA+ ICsJRkFJTF9PTighY2hlY2tfZGFtYWdlX2NsaXAoJnN0YXRlLCAmY2xpcCwgMTAsIDEwLCAyNTYs IDMzMCkpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4g K3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfaW50ZXJzZWN0X2ZyYWN0 aW9uYWxfc3JjKHZvaWQKPiA+ICppZ25vcmVkKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1f YXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOwo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgb2xkX3N0YXRlOwo+ID4gPiArCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiBkYW1hZ2Vf YmxvYjsKPiA+ID4gKwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCBkYW1hZ2U7Cj4gPiA+ICsJc3RydWN0 IGRybV9yZWN0IGNsaXA7Cj4gPiA+ICsJdWludDMyX3QgbnVtX2hpdHMgPSAwOwo+ID4gPiArCj4g PiA+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBmYiA9IHsKPiA+ID4gKwkJLndpZHRoID0gMjA0 OCwKPiA+ID4gKwkJLmhlaWdodCA9IDIwNDgKPiA+ID4gKwl9Owo+ID4gPiArCj4gPiA+ICsJc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKPiA+ID4gKwkJLmNydGMgPSBaRVJPX1NJWkVf UFRSLAo+ID4gPiArCQkuZmIgPSAmZmIsCj4gPiA+ICsJCS52aXNpYmxlID0gdHJ1ZSwKPiA+ID4g Kwl9Owo+ID4gPiArCj4gPiA+ICsJLyogUGxhbmUgc3JjIGhhcyBmcmFjdGlvbmFsIHBhcnQuICov Cj4gPiA+ICsJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAweDQwMDAyLCAweDQwMDAyLAo+ID4g PiArCQkgICAgICAweDQwMDAyICsgKDEwMjQgPDwgMTYpLCAweDQwMDAyICsgKDc2OCA8PCAxNikp Owo+ID4gPiArCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAweDQwMDAyLCAweDQwMDAyLAo+ID4gPiAr CQkgICAgICAweDQwMDAyICsgKDEwMjQgPDwgMTYpLCAweDQwMDAyICsgKDc2OCA8PCAxNikpOwo+ ID4gPiArCS8qIERhbWFnZSBpbnRlcnNlY3Qgd2l0aCBwbGFuZSBzcmMuICovCj4gPiA+ICsJc2V0 X2RhbWFnZV9jbGlwKCZkYW1hZ2UsIDEwLCAxLCAxMzYwLCAzMzApOwo+ID4gPiArCXNldF9kYW1h Z2VfYmxvYigmZGFtYWdlX2Jsb2IsICZkYW1hZ2UsIHNpemVvZihkYW1hZ2UpKTsKPiA+ID4gKwlz ZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKPiA+ID4gKwlkcm1fYXRvbWlj X2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3RhdGUpOwo+ID4g PiArCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKPiA+ID4g KwkJbnVtX2hpdHMrKzsKPiA+ID4gKwo+ID4gPiArCUZBSUwobnVtX2hpdHMgIT0gMSwgIlNob3Vs ZCByZXR1cm4gZGFtYWdlIGNsaXBwZWQgdG8gcm91bmRlZCBvZmYgc3JjLiIpOwo+ID4gPiArCUZB SUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDEwLCA0LCAxMDI5LCAzMzAp KTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0 aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX291dHNpZGVfZnJhY3Rpb25hbF9z cmModm9pZAo+ID4gKmlnbm9yZWQpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGRybV9hdG9taWNf aGVscGVyX2RhbWFnZV9pdGVyIGl0ZXI7Cj4gPiA+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBv bGRfc3RhdGU7Cj4gPiA+ICsJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iIGRhbWFnZV9ibG9iOwo+ ID4gPiArCXN0cnVjdCBkcm1fbW9kZV9yZWN0IGRhbWFnZTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX3Jl Y3QgY2xpcDsKPiA+ID4gKwl1aW50MzJfdCBudW1faGl0cyA9IDA7Cj4gPiA+ICsKPiA+ID4gKwlz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGZiID0gewo+ID4gPiArCQkud2lkdGggPSAyMDQ4LAo+ID4g PiArCQkuaGVpZ2h0ID0gMjA0OAo+ID4gPiArCX07Cj4gPiA+ICsKPiA+ID4gKwlzdHJ1Y3QgZHJt X3BsYW5lX3N0YXRlIHN0YXRlID0gewo+ID4gPiArCQkuY3J0YyA9IFpFUk9fU0laRV9QVFIsCj4g PiA+ICsJCS5mYiA9ICZmYiwKPiA+ID4gKwkJLnZpc2libGUgPSB0cnVlLAo+ID4gPiArCX07Cj4g PiA+ICsKPiA+ID4gKwkvKiBQbGFuZSBzcmMgaGFzIGZyYWN0aW9uYWwgcGFydC4gKi8KPiA+ID4g KwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDB4NDAwMDIsIDB4NDAwMDIsCj4gPiA+ICsJCSAg ICAgIDB4NDAwMDIgKyAoMTAyNCA8PCAxNiksIDB4NDAwMDIgKyAoNzY4IDw8IDE2KSk7Cj4gPiA+ ICsJc2V0X3BsYW5lX3NyYygmc3RhdGUsIDB4NDAwMDIsIDB4NDAwMDIsCj4gPiA+ICsJCSAgICAg IDB4NDAwMDIgKyAoMTAyNCA8PCAxNiksIDB4NDAwMDIgKyAoNzY4IDw8IDE2KSk7Cj4gPiA+ICsJ LyogRGFtYWdlIGNsaXAgb3V0c2lkZSBwbGFuZSBzcmMgKi8KPiA+ID4gKwlzZXRfZGFtYWdlX2Ns aXAoJmRhbWFnZSwgMTM2MCwgMTM2MCwgMTM4MCwgMTM4MCk7Cj4gPiA+ICsJc2V0X2RhbWFnZV9i bG9iKCZkYW1hZ2VfYmxvYiwgJmRhbWFnZSwgc2l6ZW9mKGRhbWFnZSkpOwo+ID4gPiArCXNldF9w bGFuZV9kYW1hZ2UoJnN0YXRlLCAmZGFtYWdlX2Jsb2IpOwo+ID4gPiArCWRybV9hdG9taWNfaGVs cGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7Cj4gPiA+ICsJ ZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIsICZjbGlwKQo+ID4gPiArCQlu dW1faGl0cysrOwo+ID4gPiArCj4gPiA+ICsJRkFJTChudW1faGl0cyAhPSAwLCAiU2hvdWxkIGhh dmUgbm8gZGFtYWdlLiIpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+ ICsKPiA+ID4gK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2Vfc3JjX21v dmVkKHZvaWQgKmlnbm9yZWQpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGRybV9hdG9taWNfaGVs cGVyX2RhbWFnZV9pdGVyIGl0ZXI7Cj4gPiA+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRf c3RhdGU7Cj4gPiA+ICsJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iIGRhbWFnZV9ibG9iOwo+ID4g PiArCXN0cnVjdCBkcm1fbW9kZV9yZWN0IGRhbWFnZTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX3JlY3Qg Y2xpcDsKPiA+ID4gKwl1aW50MzJfdCBudW1faGl0cyA9IDA7Cj4gPiA+ICsKPiA+ID4gKwlzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyIGZiID0gewo+ID4gPiArCQkud2lkdGggPSAyMDQ4LAo+ID4gPiAr CQkuaGVpZ2h0ID0gMjA0OAo+ID4gPiArCX07Cj4gPiA+ICsKPiA+ID4gKwlzdHJ1Y3QgZHJtX3Bs YW5lX3N0YXRlIHN0YXRlID0gewo+ID4gPiArCQkuY3J0YyA9IFpFUk9fU0laRV9QVFIsCj4gPiA+ ICsJCS5mYiA9ICZmYiwKPiA+ID4gKwkJLnZpc2libGUgPSB0cnVlLAo+ID4gPiArCX07Cj4gPiA+ ICsKPiA+ID4gKwkvKiBQbGFuZSBzcmMgbW92ZWQgc2luY2Ugb2xkIHBsYW5lIHN0YXRlLiAqLwo+ ID4gPiArCXNldF9wbGFuZV9zcmMoJm9sZF9zdGF0ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8 IDE2KTsKPiA+ID4gKwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMTAgPDwgMTYsIDEwIDw8IDE2LAo+ ID4gPiArCQkgICAgICAoMTAgKyAxMDI0KSA8PCAxNiwgKDEwICsgNzY4KSA8PCAxNik7Cj4gPiA+ ICsJc2V0X2RhbWFnZV9jbGlwKCZkYW1hZ2UsIDIwLCAzMCwgMjU2LCAyNTYpOwo+ID4gPiArCXNl dF9kYW1hZ2VfYmxvYigmZGFtYWdlX2Jsb2IsICZkYW1hZ2UsIHNpemVvZihkYW1hZ2UpKTsKPiA+ ID4gKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKPiA+ID4gKwlkcm1f YXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3RhdGUp Owo+ID4gPiArCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkK PiA+ID4gKwkJbnVtX2hpdHMrKzsKPiA+ID4gKwo+ID4gPiArCUZBSUwobnVtX2hpdHMgIT0gMSwg IlNob3VsZCByZXR1cm4gcGxhbmUgc3JjIGFzIGRhbWFnZS4iKTsKPiA+ID4gKwlGQUlMX09OKCFj aGVja19kYW1hZ2VfY2xpcCgmc3RhdGUsICZjbGlwLCAxMCwgMTAsIDEwMzQsIDc3OCkpOwo+ID4g PiArCj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbnQg aWd0X2RhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfZnJhY3Rpb25hbF9zcmNfbW92ZWQodm9pZAo+ ID4gKmlnbm9yZWQpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGRybV9hdG9taWNfaGVscGVyX2Rh bWFnZV9pdGVyIGl0ZXI7Cj4gPiA+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3RhdGU7 Cj4gPiA+ICsJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iIGRhbWFnZV9ibG9iOwo+ID4gPiArCXN0 cnVjdCBkcm1fbW9kZV9yZWN0IGRhbWFnZTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcDsK PiA+ID4gKwl1aW50MzJfdCBudW1faGl0cyA9IDA7Cj4gPiA+ICsKPiA+ID4gKwlzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyIGZiID0gewo+ID4gPiArCQkud2lkdGggPSAyMDQ4LAo+ID4gPiArCQkuaGVp Z2h0ID0gMjA0OAo+ID4gPiArCX07Cj4gPiA+ICsKPiA+ID4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlIHN0YXRlID0gewo+ID4gPiArCQkuY3J0YyA9IFpFUk9fU0laRV9QVFIsCj4gPiA+ICsJCS5m YiA9ICZmYiwKPiA+ID4gKwkJLnZpc2libGUgPSB0cnVlLAo+ID4gPiArCX07Cj4gPiA+ICsKPiA+ ID4gKwkvKiBQbGFuZSBzcmMgd2l0aCBmcmFjdGlvbmFsIHBhcnQgbW92ZWQgc2luY2Ugb2xkIHBs YW5lIHN0YXRlLiAqLwo+ID4gPiArCXNldF9wbGFuZV9zcmMoJm9sZF9zdGF0ZSwgMHgzZmZmZSwg MHgzZmZmZSwKPiA+ID4gKwkJICAgICAgMHgzZmZmZSArICgxMDI0IDw8IDE2KSwgMHgzZmZmZSAr ICg3NjggPDwgMTYpKTsKPiA+ID4gKwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMHg0MDAwMiwgMHg0 MDAwMiwKPiA+ID4gKwkJICAgICAgMHg0MDAwMiArICgxMDI0IDw8IDE2KSwgMHg0MDAwMiArICg3 NjggPDwgMTYpKTsKPiA+ID4gKwkvKiBEYW1hZ2UgaW50ZXJzZWN0IHdpdGggcGxhbmUgc3JjLiAq Lwo+ID4gPiArCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlLCAyMCwgMzAsIDEzNjAsIDI1Nik7Cj4g PiA+ICsJc2V0X2RhbWFnZV9ibG9iKCZkYW1hZ2VfYmxvYiwgJmRhbWFnZSwgc2l6ZW9mKGRhbWFn ZSkpOwo+ID4gPiArCXNldF9wbGFuZV9kYW1hZ2UoJnN0YXRlLCAmZGFtYWdlX2Jsb2IpOwo+ID4g PiArCWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUs ICZzdGF0ZSk7Cj4gPiA+ICsJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIs ICZjbGlwKQo+ID4gPiArCQludW1faGl0cysrOwo+ID4gPiArCj4gPiA+ICsJRkFJTChudW1faGl0 cyAhPSAxLCAiU2hvdWxkIHJldHVybiByb3VuZGVkIG9mZiBwbGFuZSBzcmMgYXMgZGFtYWdlLiIp Owo+ID4gPiArCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDQsIDQs IDEwMjksIDc3MykpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+ICsK PiA+ID4gK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX2RhbWFnZSh2b2lkICppZ25vcmVkKQo+ ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVy Owo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOwo+ID4gPiArCXN0cnVj dCBkcm1fcHJvcGVydHlfYmxvYiBkYW1hZ2VfYmxvYjsKPiA+ID4gKwlzdHJ1Y3QgZHJtX21vZGVf cmVjdCBkYW1hZ2VbMl07Cj4gPiA+ICsJc3RydWN0IGRybV9yZWN0IGNsaXA7Cj4gPiA+ICsJdWlu dDMyX3QgbnVtX2hpdHMgPSAwOwo+ID4gPiArCj4gPiA+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciBmYiA9IHsKPiA+ID4gKwkJLndpZHRoID0gMjA0OCwKPiA+ID4gKwkJLmhlaWdodCA9IDIwNDgK PiA+ID4gKwl9Owo+ID4gPiArCj4gPiA+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9 IHsKPiA+ID4gKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAo+ID4gPiArCQkuZmIgPSAmZmIsCj4g PiA+ICsJCS52aXNpYmxlID0gdHJ1ZSwKPiA+ID4gKwl9Owo+ID4gPiArCj4gPiA+ICsJc2V0X3Bs YW5lX3NyYygmb2xkX3N0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOwo+ID4gPiAr CXNldF9wbGFuZV9zcmMoJnN0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOwo+ID4g PiArCS8qIDIgZGFtYWdlIGNsaXBzLiAqLwo+ID4gPiArCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdl WzBdLCAyMCwgMzAsIDIwMCwgMTgwKTsKPiA+ID4gKwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZVsx XSwgMjQwLCAyMDAsIDI4MCwgMjUwKTsKPiA+ID4gKwlzZXRfZGFtYWdlX2Jsb2IoJmRhbWFnZV9i bG9iLCAmZGFtYWdlWzBdLCBzaXplb2YoZGFtYWdlKSk7Cj4gPiA+ICsJc2V0X3BsYW5lX2RhbWFn ZSgmc3RhdGUsICZkYW1hZ2VfYmxvYik7Cj4gPiA+ICsJZHJtX2F0b21pY19oZWxwZXJfZGFtYWdl X2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRlKTsKPiA+ID4gKwlkcm1fYXRvbWlj X2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApIHsKPiA+ID4gKwkJaWYgKG51bV9o aXRzID09IDApCj4gPiA+ICsJCQlGQUlMX09OKCFjaGVja19kYW1hZ2VfY2xpcCgmc3RhdGUsICZj bGlwLCAyMCwgMzAsCj4gPiAyMDAsIDE4MCkpOwo+ID4gPiArCQlpZiAobnVtX2hpdHMgPT0gMSkK PiA+ID4gKwkJCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDI0MCwg MjAwLAo+ID4gMjgwLCAyNTApKTsKPiA+ID4gKwkJbnVtX2hpdHMrKzsKPiA+ID4gKwl9Cj4gPiA+ ICsKPiA+ID4gKwlGQUlMKG51bV9oaXRzICE9IDIsICJTaG91bGQgcmV0dXJuIGRhbWFnZSB3aGVu IHNldC4iKTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ ICtzdGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9kYW1hZ2Vfb25lX2ludGVyc2VjdCh2b2lkICpp Z25vcmVkKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2Vf aXRlciBpdGVyOwo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOwo+ID4g PiArCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiBkYW1hZ2VfYmxvYjsKPiA+ID4gKwlzdHJ1Y3Qg ZHJtX21vZGVfcmVjdCBkYW1hZ2VbMl07Cj4gPiA+ICsJc3RydWN0IGRybV9yZWN0IGNsaXA7Cj4g PiA+ICsJdWludDMyX3QgbnVtX2hpdHMgPSAwOwo+ID4gPiArCj4gPiA+ICsJc3RydWN0IGRybV9m cmFtZWJ1ZmZlciBmYiA9IHsKPiA+ID4gKwkJLndpZHRoID0gMjA0OCwKPiA+ID4gKwkJLmhlaWdo dCA9IDIwNDgKPiA+ID4gKwl9Owo+ID4gPiArCj4gPiA+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0 ZSBzdGF0ZSA9IHsKPiA+ID4gKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAo+ID4gPiArCQkuZmIg PSAmZmIsCj4gPiA+ICsJCS52aXNpYmxlID0gdHJ1ZSwKPiA+ID4gKwl9Owo+ID4gPiArCj4gPiA+ ICsJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAweDQwMDAyLCAweDQwMDAyLAo+ID4gPiArCQkg ICAgICAweDQwMDAyICsgKDEwMjQgPDwgMTYpLCAweDQwMDAyICsgKDc2OCA8PCAxNikpOwo+ID4g PiArCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAweDQwMDAyLCAweDQwMDAyLAo+ID4gPiArCQkgICAg ICAweDQwMDAyICsgKDEwMjQgPDwgMTYpLCAweDQwMDAyICsgKDc2OCA8PCAxNikpOwo+ID4gPiAr CS8qIDIgZGFtYWdlIGNsaXBzLCBvbmUgaW50ZXJzZWN0IHBsYW5lIHNyYy4gKi8KPiA+ID4gKwlz ZXRfZGFtYWdlX2NsaXAoJmRhbWFnZVswXSwgMjAsIDMwLCAyMDAsIDE4MCk7Cj4gPiA+ICsJc2V0 X2RhbWFnZV9jbGlwKCZkYW1hZ2VbMV0sIDIsIDIsIDEzNjAsIDEzNjApOwo+ID4gPiArCXNldF9k YW1hZ2VfYmxvYigmZGFtYWdlX2Jsb2IsICZkYW1hZ2VbMF0sIHNpemVvZihkYW1hZ2UpKTsKPiA+ ID4gKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKPiA+ID4gKwlkcm1f YXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3RhdGUp Owo+ID4gPiArCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkg ewo+ID4gPiArCQlpZiAobnVtX2hpdHMgPT0gMCkKPiA+ID4gKwkJCUZBSUxfT04oIWNoZWNrX2Rh bWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDIwLCAzMCwKPiA+IDIwMCwgMTgwKSk7Cj4gPiA+ICsJ CWlmIChudW1faGl0cyA9PSAxKQo+ID4gPiArCQkJRkFJTF9PTighY2hlY2tfZGFtYWdlX2NsaXAo JnN0YXRlLCAmY2xpcCwgNCwgNCwgMTAyOSwKPiA+IDc3MykpOwo+ID4gPiArCQludW1faGl0cysr Owo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCUZBSUwobnVtX2hpdHMgIT0gMiwgIlNob3VsZCBy ZXR1cm4gZGFtYWdlIHdoZW4gc2V0LiIpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX2RhbWFnZV9vbmVf b3V0c2lkZSh2b2lkICppZ25vcmVkKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fYXRvbWlj X2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOwo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUg b2xkX3N0YXRlOwo+ID4gPiArCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiBkYW1hZ2VfYmxvYjsK PiA+ID4gKwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCBkYW1hZ2VbMl07Cj4gPiA+ICsJc3RydWN0IGRy bV9yZWN0IGNsaXA7Cj4gPiA+ICsJdWludDMyX3QgbnVtX2hpdHMgPSAwOwo+ID4gPiArCj4gPiA+ ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBmYiA9IHsKPiA+ID4gKwkJLndpZHRoID0gMjA0OCwK PiA+ID4gKwkJLmhlaWdodCA9IDIwNDgKPiA+ID4gKwl9Owo+ID4gPiArCj4gPiA+ICsJc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKPiA+ID4gKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRS LAo+ID4gPiArCQkuZmIgPSAmZmIsCj4gPiA+ICsJCS52aXNpYmxlID0gdHJ1ZSwKPiA+ID4gKwl9 Owo+ID4gPiArCj4gPiA+ICsJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAwLCAwLCAxMDI0IDw8 IDE2LCA3NjggPDwgMTYpOwo+ID4gPiArCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAwLCAwLCAxMDI0 IDw8IDE2LCA3NjggPDwgMTYpOwo+ID4gPiArCS8qIDIgZGFtYWdlIGNsaXBzLCBvbmUgb3V0c2lk ZSBwbGFuZSBzcmMuICovCj4gPiA+ICsJc2V0X2RhbWFnZV9jbGlwKCZkYW1hZ2VbMF0sIDEzNjAs IDEzNjAsIDEzODAsIDEzODApOwo+ID4gPiArCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlWzFdLCAy NDAsIDIwMCwgMjgwLCAyNTApOwo+ID4gPiArCXNldF9kYW1hZ2VfYmxvYigmZGFtYWdlX2Jsb2Is ICZkYW1hZ2VbMF0sIHNpemVvZihkYW1hZ2UpKTsKPiA+ID4gKwlzZXRfcGxhbmVfZGFtYWdlKCZz dGF0ZSwgJmRhbWFnZV9ibG9iKTsKPiA+ID4gKwlkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRl cl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3RhdGUpOwo+ID4gPiArCWRybV9hdG9taWNfZm9y X2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKPiA+ID4gKwkJbnVtX2hpdHMrKzsKPiA+ ID4gKwo+ID4gPiArCUZBSUwobnVtX2hpdHMgIT0gMSwgIlNob3VsZCByZXR1cm4gZGFtYWdlIHdo ZW4gc2V0LiIpOwo+ID4gPiArCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNs aXAsIDI0MCwgMjAwLCAyODAsIDI1MCkpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX2RhbWFnZV9zcmNf bW92ZWQodm9pZCAqaWdub3JlZCkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX2F0b21pY19o ZWxwZXJfZGFtYWdlX2l0ZXIgaXRlcjsKPiA+ID4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9s ZF9zdGF0ZTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgZGFtYWdlX2Jsb2I7Cj4g PiA+ICsJc3RydWN0IGRybV9tb2RlX3JlY3QgZGFtYWdlWzJdOwo+ID4gPiArCXN0cnVjdCBkcm1f cmVjdCBjbGlwOwo+ID4gPiArCXVpbnQzMl90IG51bV9oaXRzID0gMDsKPiA+ID4gKwo+ID4gPiAr CXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7Cj4gPiA+ICsJCS53aWR0aCA9IDIwNDgsCj4g PiA+ICsJCS5oZWlnaHQgPSAyMDQ4Cj4gPiA+ICsJfTsKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7Cj4gPiA+ICsJCS5jcnRjID0gWkVST19TSVpFX1BUUiwK PiA+ID4gKwkJLmZiID0gJmZiLAo+ID4gPiArCQkudmlzaWJsZSA9IHRydWUsCj4gPiA+ICsJfTsK PiA+ID4gKwo+ID4gPiArCXNldF9wbGFuZV9zcmMoJm9sZF9zdGF0ZSwgMHg0MDAwMiwgMHg0MDAw MiwKPiA+ID4gKwkJICAgICAgMHg0MDAwMiArICgxMDI0IDw8IDE2KSwgMHg0MDAwMiArICg3Njgg PDwgMTYpKTsKPiA+ID4gKwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMHgzZmZmZSwgMHgzZmZmZSwK PiA+ID4gKwkJICAgICAgMHgzZmZmZSArICgxMDI0IDw8IDE2KSwgMHgzZmZmZSArICg3NjggPDwg MTYpKTsKPiA+ID4gKwkvKiAyIGRhbWFnZSBjbGlwcywgb25lIG91dHNpZGUgcGxhbmUgc3JjLiAq Lwo+ID4gPiArCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlWzBdLCAxMzYwLCAxMzYwLCAxMzgwLCAx MzgwKTsKPiA+ID4gKwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZVsxXSwgMjQwLCAyMDAsIDI4MCwg MjUwKTsKPiA+ID4gKwlzZXRfZGFtYWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFtYWdlWzBdLCBz aXplb2YoZGFtYWdlKSk7Cj4gPiA+ICsJc2V0X3BsYW5lX2RhbWFnZSgmc3RhdGUsICZkYW1hZ2Vf YmxvYik7Cj4gPiA+ICsJZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwg Jm9sZF9zdGF0ZSwgJnN0YXRlKTsKPiA+ID4gKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2Rh bWFnZSgmaXRlciwgJmNsaXApCj4gPiA+ICsJCW51bV9oaXRzKys7Cj4gPiA+ICsKPiA+ID4gKwlG QUlMKG51bV9oaXRzICE9IDEsICJTaG91bGQgcmV0dXJuIHJvdW5kIG9mZiBwbGFuZSBzcmMgYXMg ZGFtYWdlLiIpOwo+ID4gPiArCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNs aXAsIDMsIDMsIDEwMjgsIDc3MikpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICt9 Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX2RhbWFnZV9ub3Rfdmlz aWJsZSh2b2lkICppZ25vcmVkKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fYXRvbWljX2hl bHBlcl9kYW1hZ2VfaXRlciBpdGVyOwo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xk X3N0YXRlOwo+ID4gPiArCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiBkYW1hZ2VfYmxvYjsKPiA+ ID4gKwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCBkYW1hZ2VbMl07Cj4gPiA+ICsJc3RydWN0IGRybV9y ZWN0IGNsaXA7Cj4gPiA+ICsJdWludDMyX3QgbnVtX2hpdHMgPSAwOwo+ID4gPiArCj4gPiA+ICsJ c3RydWN0IGRybV9mcmFtZWJ1ZmZlciBmYiA9IHsKPiA+ID4gKwkJLndpZHRoID0gMjA0OCwKPiA+ ID4gKwkJLmhlaWdodCA9IDIwNDgKPiA+ID4gKwl9Owo+ID4gPiArCj4gPiA+ICsJc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKPiA+ID4gKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAo+ ID4gPiArCQkuZmIgPSAmZmIsCj4gPiA+ICsJCS52aXNpYmxlID0gZmFsc2UsCj4gPiA+ICsJfTsK PiA+ID4gKwo+ID4gPiArCXNldF9wbGFuZV9zcmMoJm9sZF9zdGF0ZSwgMHg0MDAwMiwgMHg0MDAw MiwKPiA+ID4gKwkJICAgICAgMHg0MDAwMiArICgxMDI0IDw8IDE2KSwgMHg0MDAwMiArICg3Njgg PDwgMTYpKTsKPiA+ID4gKwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMHgzZmZmZSwgMHgzZmZmZSwK PiA+ID4gKwkJICAgICAgMHgzZmZmZSArICgxMDI0IDw8IDE2KSwgMHgzZmZmZSArICg3NjggPDwg MTYpKTsKPiA+ID4gKwkvKiAyIGRhbWFnZSBjbGlwcywgb25lIG91dHNpZGUgcGxhbmUgc3JjLiAq Lwo+ID4gPiArCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlWzBdLCAxMzYwLCAxMzYwLCAxMzgwLCAx MzgwKTsKPiA+ID4gKwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZVsxXSwgMjQwLCAyMDAsIDI4MCwg MjUwKTsKPiA+ID4gKwlzZXRfZGFtYWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFtYWdlWzBdLCBz aXplb2YoZGFtYWdlKSk7Cj4gPiA+ICsJc2V0X3BsYW5lX2RhbWFnZSgmc3RhdGUsICZkYW1hZ2Vf YmxvYik7Cj4gPiA+ICsJZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwg Jm9sZF9zdGF0ZSwgJnN0YXRlKTsKPiA+ID4gKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2Rh bWFnZSgmaXRlciwgJmNsaXApCj4gPiA+ICsJCW51bV9oaXRzKys7Cj4gPiA+ICsKPiA+ID4gKwlG QUlMKG51bV9oaXRzICE9IDAsICJTaG91bGQgbm90IHJldHVybiBhbnkgZGFtYWdlLiIpOwo+ID4g PiArCj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gKyNpbmNsdWRlICJk cm1fc2VsZnRlc3QuYyIKPiA+ID4gKwo+ID4gPiArLyoqCj4gPiA+ICsgKiB0ZXN0X2RybV9kYW1h Z2VfaGVscGVyIC0gUnVuIGRybSBkYW1hZ2UgaGVscGVyIHNlbGZ0ZXN0cy4KPiA+ID4gKyAqLwo+ ID4gPiAraW50IHRlc3RfZHJtX2RhbWFnZV9oZWxwZXIodm9pZCkKPiA+ID4gK3sKPiA+ID4gKwlp bnQgZXJyOwo+ID4gPiArCj4gPiA+ICsJZXJyID0gcnVuX3NlbGZ0ZXN0cyhzZWxmdGVzdHMsIEFS UkFZX1NJWkUoc2VsZnRlc3RzKSwgTlVMTCk7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gZXJyID4g MCA/IDAgOiBlcnI7Cj4gPiA+ICt9Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v c2VsZnRlc3RzL3Rlc3QtZHJtX21vZGVzZXRfY29tbW9uLmMKPiA+IGIvZHJpdmVycy9ncHUvZHJt L3NlbGZ0ZXN0cy90ZXN0LWRybV9tb2Rlc2V0X2NvbW1vbi5jCj4gPiA+IGluZGV4IGZhZDUyMDkw NDNmMS4uNDNhOWFiNTIyYTY2IDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vc2Vs ZnRlc3RzL3Rlc3QtZHJtX21vZGVzZXRfY29tbW9uLmMKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL3NlbGZ0ZXN0cy90ZXN0LWRybV9tb2Rlc2V0X2NvbW1vbi5jCj4gPiA+IEBAIC05LDcgKzks MTUgQEAKPiA+ID4KPiA+ID4gIHN0YXRpYyBpbnQgX19pbml0IHRlc3RfZHJtX21vZGVzZXRfaW5p dCh2b2lkKQo+ID4gPiAgewo+ID4gPiAtCXJldHVybiB0ZXN0X2RybV9wbGFuZV9oZWxwZXIoKTsK PiA+ID4gKwlpbnQgcmV0ID0gMCwgZXJyOwo+ID4gPiArCj4gPiA+ICsJaWYgKChlcnIgPSB0ZXN0 X2RybV9wbGFuZV9oZWxwZXIoKSkpCj4gPiA+ICsJCXJldCA9IGVycjsKPiA+ID4gKwo+ID4gPiAr CWlmICgoZXJyID0gdGVzdF9kcm1fZGFtYWdlX2hlbHBlcigpKSkKPiA+ID4gKwkJcmV0ID0gZXJy Owo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIHJldDsKPiA+ID4gIH0KPiA+ID4KPiA+ID4gIHN0YXRp YyB2b2lkIF9fZXhpdCB0ZXN0X2RybV9tb2Rlc2V0X2V4aXQodm9pZCkKPiA+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMvdGVzdC1kcm1fbW9kZXNldF9jb21tb24uaAo+ ID4gYi9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL3Rlc3QtZHJtX21vZGVzZXRfY29tbW9uLmgK PiA+ID4gaW5kZXggYmRlYmEyNjQ2NjFmLi41ZmE4ZmIwN2UwZTkgMTAwNjQ0Cj4gPiA+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMvdGVzdC1kcm1fbW9kZXNldF9jb21tb24uaAo+ID4g PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL3Rlc3QtZHJtX21vZGVzZXRfY29tbW9u LmgKPiA+ID4gQEAgLTE0LDUgKzE0LDYgQEAKPiA+ID4gICNkZWZpbmUgRkFJTF9PTih4KSBGQUlM KCh4KSwgIiVzIiwgIkZBSUxfT04oIiBfX3N0cmluZ2lmeSh4KSAiKVxuIikKPiA+ID4KPiA+ID4g IGludCB0ZXN0X2RybV9wbGFuZV9oZWxwZXIodm9pZCk7Cj4gPiA+ICtpbnQgdGVzdF9kcm1fZGFt YWdlX2hlbHBlcih2b2lkKTsKPiA+ID4KPiA+ID4gICNlbmRpZgo+ID4gPiAtLQo+ID4gPiAyLjE3 LjEKPiA+ID4KPiA+IAo+ID4gLS0KPiA+IERhbmllbCBWZXR0ZXIKPiA+IFNvZnR3YXJlIEVuZ2lu ZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgo+ID4gaHR0cHM6Ly9uYTAxLnNhZmVsaW5rcy5wcm90ZWN0 aW9uLm91dGxvb2suY29tLz91cmw9aHR0cCUzQSUyRiUyRmJsb2cuZmZ3bGwuCj4gPiBjaCZhbXA7 ZGF0YT0wMiU3QzAxJTdDZHJhd2F0JTQwdm13YXJlLmNvbSU3QzI2ZmZjNGI0ZWQwYjRkYTE3ZGEK PiA+IDUwOGQ2MzNmYjczYTQlN0NiMzkxMzhjYTNjZWU0YjRhYTRkNmNkODNkOWRkNjJmMCU3QzEl N0MwJTdDNjM2NzUKPiA+IDM1NTI0MjA5NDI2MzImYW1wO3NkYXRhPXJxNjhjMmRPc3NTTnAyQjFn QzZ2ZXJEWW9JdG02bVNHUFM0b0l3SnpKYQo+ID4gYyUzRCZhbXA7cmVzZXJ2ZWQ9MAo+IF9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVsIG1h aWxpbmcgbGlzdAo+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAoKLS0gCkNoZWVy cywKQWxleCBHCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=