From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Tue, 16 Oct 2018 14:21:17 +0200 From: Daniel Vetter Message-ID: <20181016122117.GR31561@phenom.ffwll.local> References: <20181011001657.1715-1-drawat@vmware.com> <20181011001657.1715-4-drawat@vmware.com> <20181011162311.GK31561@phenom.ffwll.local> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Subject: Re: [Intel-gfx] [PATCH v3 04/18] drm/selftest: Add drm damage helper selftest List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Deepak Singh Rawat Cc: Thomas Hellstrom , Sinclair Yeh , Daniel Vetter , "intel-gfx@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" , "igt-dev@lists.freedesktop.org" , Pekka Paalanen , linux-graphics-maintainer List-ID: T24gTW9uLCBPY3QgMTUsIDIwMTggYXQgMDQ6MTE6NDFQTSArMDAwMCwgRGVlcGFrIFNpbmdoIFJh d2F0IHdyb3RlOgo+ID4gT24gV2VkLCBPY3QgMTAsIDIwMTggYXQgMDU6MTY6NDNQTSAtMDcwMCwg RGVlcGFrIFJhd2F0IHdyb3RlOgo+ID4gPiBTZWxmdGVzdCBmb3IgZHJtIGRhbWFnZSBoZWxwZXIg aXRlcmF0b3IgZnVuY3Rpb25zLgo+ID4gPgo+ID4gPiBDYzogdmlsbGUuc3lyamFsYUBsaW51eC5p bnRlbC5jb20KPiA+ID4gQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+ Cj4gPiA+IENjOiBQZWtrYSBQYWFsYW5lbiA8cHBhYWxhbmVuQGdtYWlsLmNvbT4KPiA+ID4gQ2M6 IERhbmllbCBTdG9uZSA8ZGFuaWVsQGZvb2lzaGJhci5vcmc+Cj4gPiA+IENjOiBpbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gPiA+IENjOiBpZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwo+ID4gPiBDYzogcGV0cmkubGF0dmFsYUBpbnRlbC5jb20KPiA+ID4gQ2M6IGNocmlzQGNo cmlzLXdpbHNvbi5jby51awo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBEZWVwYWsgUmF3YXQgPGRyYXdh dEB2bXdhcmUuY29tPgo+ID4gPiAtLS0KPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMv TWFrZWZpbGUgICAgICAgICAgICB8ICAgMyArLQo+ID4gPiAgLi4uL3NlbGZ0ZXN0cy9kcm1fZGFt YWdlX2hlbHBlcl9zZWxmdGVzdHMuaCAgIHwgIDIyICsKPiA+ID4gIC4uLi9kcm0vc2VsZnRlc3Rz L3Rlc3QtZHJtX2RhbWFnZV9oZWxwZXIuYyAgICB8IDg0NAo+ID4gKysrKysrKysrKysrKysrKysr Cj4gPiA+ICAzIGZpbGVzIGNoYW5nZWQsIDg2OCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p Cj4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQKPiA+IGRyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMv ZHJtX2RhbWFnZV9oZWxwZXJfc2VsZnRlc3RzLmgKPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL3Rlc3QtCj4gPiBkcm1fZGFtYWdlX2hlbHBlci5jCj4g PiA+Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL01ha2VmaWxl Cj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMvTWFrZWZpbGUKPiA+ID4gaW5kZXggOWZj MzQ5ZmExOGU5Li44OGFjMjE2ZjU5NjIgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9zZWxmdGVzdHMvTWFrZWZpbGUKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0 cy9NYWtlZmlsZQo+ID4gPiBAQCAtMSArMSwyIEBACj4gPiA+IC1vYmotJChDT05GSUdfRFJNX0RF QlVHX1NFTEZURVNUKSArPSB0ZXN0LWRybV9tbS5vIHRlc3QtZHJtLQo+ID4gaGVscGVyLm8KPiA+ ID4gK29iai0kKENPTkZJR19EUk1fREVCVUdfU0VMRlRFU1QpICs9IHRlc3QtZHJtX21tLm8gdGVz dC1kcm0tCj4gPiBoZWxwZXIubyBcCj4gPiA+ICsJCQkJICAgIHRlc3QtZHJtX2RhbWFnZV9oZWxw ZXIubwo+ID4gCj4gPiBXaXRoIHRoZSB0ZXN0Y2FzZSBpbnRhZ3JhdGVkIGludG8gdGhlIHRlc3Qt ZHJtLWhlbHBlci5rbyBtb2R1bGUsIGZvcgo+ID4gcGF0Y2hlcyAxLTQgaW4gdGhpcyBzZXJpZXM6 Cj4gPiAKPiA+IFJldmlld2VkLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xs LmNoPgo+ID4gCj4gPiBPYnZpb3VzbHkgbmVlZHMgc29tZSBhZGp1c3Rpbmcgb24gdGhlIGlndCBz aWRlIHRvbywgc2luY2Ugd2Ugc2VlbSB0byBiZQo+ID4gbWlzc2luZyB0aGUgaWd0IHNjYWZmb2xk aW5nIGZvciB0ZXN0cy1kcm0taGVscGVyLmtvLgo+ID4gLURhbmllbAo+IAo+IEhpIERhbmllbCwK PiAKPiBUaGFua3MgZm9yIHRoZSByZXZpZXcuIEkgYW0gYSBsaXR0bGUgY29uZnVzZWQgaGVyZS4g U2hvdWxkIHdlIGhhdmUgc2luZ2xlCj4ga2VybmVsIG1vZHVsZSBmb3IgZHJtIHBsYW5lIGhlbHBl ciBzZWxmdGVzdCBhbmQgZGFtYWdlIGhlbHBlciBzZWxmdGVzdD8KPiBBbHNvIHNoYWxsIEkgcmVu YW1lIHRoZSBrZXJuZWwgc2VsZnR0ZXN0IHRvIGttc18qPwo+IAo+IEZvciB1c2VyLXNwYWNlIGln dCB0ZXN0IGl0IHNob3VsZCBiZSBpdCBtYWtlcyBzZW5zZSB0byByZW5hbWUgdG8ga21zX3NlbGZ0 ZXRzPwoKU2luY2UgSSB3ZW50IGJhY2smZm9ydGggb24gdGhpcyB3YXkgdG9vIG1hbnkgdGltZXM6 Ci0gaWd0IHNob3VsZCBiZSBjYWxsZWQga21zX3NlbGZ0ZXN0LiBQbGVhc2Ugd29yayB0b2dldGhl ciB3aXRoIGlndAogIG1haW50YWluZXJzIChBcmVrIGFuZCBQZXRyaSksIHNpbmNlIHdlIGFsc28g bmVlZCB0byB1cGRhdGUgdGhlIENJCiAgYnVpbGRpbmcgaW5mcmFzdHJ1Y3R1cmUgdG8gbWFrZSBz dXJlIGl0IHVwZGF0ZXMgdGhlIGxpc3Qgb2Ygc3VidGVzdHMKICBpbXBsZW1lbnRlZCBieSB0aGUg a2VybmVsLgoKLSBLZXJuZWwgbW9kdWxlIEknZCBjYWxsIHRlc3QtZHJtX21vZGVzZXQua28uIFRo YXQga2VybmVsIG1vZHVsZSBjYW4gdGhlbgogIGluY2x1ZGUgdGhlIGV4aXN0aW5nIHRlc3QtZHJt LWhlbHBlci5jIChjb3VsZCBwcm9iYWJseSByZW5hbWUgdG8KICB0ZXN0LWRybV9wbGFuZV9oZWxw ZXIuYyBmb3IgY2xhcml0eSkgYW5kIHlvdXIgbmV3IGRhbWFnZSBoZWxwZXIgKG5hbWVkCiAgdGVz dC1kcm1fZGFtYWdlX2hlbHBlci5jIGZvciBjb25zaXN0ZW5jeSkuCgpEb2VzIHRoYXQgbWFrZSBz ZW5zZSB0byBldmVyeW9uZT8KClRoYW5rcywgRGFuaWVsCgo+IAo+ID4gCj4gPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL2RybV9kYW1hZ2VfaGVscGVyX3NlbGZ0ZXN0 cy5oCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMvZHJtX2RhbWFnZV9oZWxwZXJfc2Vs ZnRlc3RzLmgKPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gaW5kZXggMDAwMDAwMDAw MDAwLi4zYTFjYmUwNWJlZjAKPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vc2VsZnRlc3RzL2RybV9kYW1hZ2VfaGVscGVyX3NlbGZ0ZXN0cy5oCj4gPiA+IEBA IC0wLDAgKzEsMjIgQEAKPiA+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w ICovCj4gPiA+ICtzZWxmdGVzdChkYW1hZ2VfaXRlcl9ub19kYW1hZ2UsIGlndF9kYW1hZ2VfaXRl cl9ub19kYW1hZ2UpCj4gPiA+ICtzZWxmdGVzdChkYW1hZ2VfaXRlcl9ub19kYW1hZ2VfZnJhY3Rp b25hbF9zcmMsCj4gPiBpZ3RfZGFtYWdlX2l0ZXJfbm9fZGFtYWdlX2ZyYWN0aW9uYWxfc3JjKQo+ ID4gPiArc2VsZnRlc3QoZGFtYWdlX2l0ZXJfbm9fZGFtYWdlX3NyY19tb3ZlZCwKPiA+IGlndF9k YW1hZ2VfaXRlcl9ub19kYW1hZ2Vfc3JjX21vdmVkKQo+ID4gPiArc2VsZnRlc3QoZGFtYWdlX2l0 ZXJfbm9fZGFtYWdlX2ZyYWN0aW9uYWxfc3JjX21vdmVkLAo+ID4gaWd0X2RhbWFnZV9pdGVyX25v X2RhbWFnZV9mcmFjdGlvbmFsX3NyY19tb3ZlZCkKPiA+ID4gK3NlbGZ0ZXN0KGRhbWFnZV9pdGVy X25vX2RhbWFnZV9ub3RfdmlzaWJsZSwKPiA+IGlndF9kYW1hZ2VfaXRlcl9ub19kYW1hZ2Vfbm90 X3Zpc2libGUpCj4gPiA+ICtzZWxmdGVzdChkYW1hZ2VfaXRlcl9ub19kYW1hZ2Vfbm9fY3J0YywK PiA+IGlndF9kYW1hZ2VfaXRlcl9ub19kYW1hZ2Vfbm9fY3J0YykKPiA+ID4gK3NlbGZ0ZXN0KGRh bWFnZV9pdGVyX25vX2RhbWFnZV9ub19mYiwKPiA+IGlndF9kYW1hZ2VfaXRlcl9ub19kYW1hZ2Vf bm9fZmIpCj4gPiA+ICtzZWxmdGVzdChkYW1hZ2VfaXRlcl9zaW1wbGVfZGFtYWdlLAo+ID4gaWd0 X2RhbWFnZV9pdGVyX3NpbXBsZV9kYW1hZ2UpCj4gPiA+ICtzZWxmdGVzdChkYW1hZ2VfaXRlcl9z aW5nbGVfZGFtYWdlLCBpZ3RfZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZSkKPiA+ID4gK3NlbGZ0 ZXN0KGRhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfaW50ZXJzZWN0X3NyYywKPiA+IGlndF9kYW1h Z2VfaXRlcl9zaW5nbGVfZGFtYWdlX2ludGVyc2VjdF9zcmMpCj4gPiA+ICtzZWxmdGVzdChkYW1h Z2VfaXRlcl9zaW5nbGVfZGFtYWdlX291dHNpZGVfc3JjLAo+ID4gaWd0X2RhbWFnZV9pdGVyX3Np bmdsZV9kYW1hZ2Vfb3V0c2lkZV9zcmMpCj4gPiA+ICtzZWxmdGVzdChkYW1hZ2VfaXRlcl9zaW5n bGVfZGFtYWdlX2ZyYWN0aW9uYWxfc3JjLAo+ID4gaWd0X2RhbWFnZV9pdGVyX3NpbmdsZV9kYW1h Z2VfZnJhY3Rpb25hbF9zcmMpCj4gPiA+ICtzZWxmdGVzdChkYW1hZ2VfaXRlcl9zaW5nbGVfZGFt YWdlX2ludGVyc2VjdF9mcmFjdGlvbmFsX3NyYywKPiA+IGlndF9kYW1hZ2VfaXRlcl9zaW5nbGVf ZGFtYWdlX2ludGVyc2VjdF9mcmFjdGlvbmFsX3NyYykKPiA+ID4gK3NlbGZ0ZXN0KGRhbWFnZV9p dGVyX3NpbmdsZV9kYW1hZ2Vfb3V0c2lkZV9mcmFjdGlvbmFsX3NyYywKPiA+IGlndF9kYW1hZ2Vf aXRlcl9zaW5nbGVfZGFtYWdlX291dHNpZGVfZnJhY3Rpb25hbF9zcmMpCj4gPiA+ICtzZWxmdGVz dChkYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX3NyY19tb3ZlZCwKPiA+IGlndF9kYW1hZ2VfaXRl cl9zaW5nbGVfZGFtYWdlX3NyY19tb3ZlZCkKPiA+ID4gK3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX3Np bmdsZV9kYW1hZ2VfZnJhY3Rpb25hbF9zcmNfbW92ZWQsCj4gPiBpZ3RfZGFtYWdlX2l0ZXJfc2lu Z2xlX2RhbWFnZV9mcmFjdGlvbmFsX3NyY19tb3ZlZCkKPiA+ID4gK3NlbGZ0ZXN0KGRhbWFnZV9p dGVyX2RhbWFnZSwgaWd0X2RhbWFnZV9pdGVyX2RhbWFnZSkKPiA+ID4gK3NlbGZ0ZXN0KGRhbWFn ZV9pdGVyX2RhbWFnZV9vbmVfaW50ZXJzZWN0LAo+ID4gaWd0X2RhbWFnZV9pdGVyX2RhbWFnZV9v bmVfaW50ZXJzZWN0KQo+ID4gPiArc2VsZnRlc3QoZGFtYWdlX2l0ZXJfZGFtYWdlX29uZV9vdXRz aWRlLAo+ID4gaWd0X2RhbWFnZV9pdGVyX2RhbWFnZV9vbmVfb3V0c2lkZSkKPiA+ID4gK3NlbGZ0 ZXN0KGRhbWFnZV9pdGVyX2RhbWFnZV9zcmNfbW92ZWQsCj4gPiBpZ3RfZGFtYWdlX2l0ZXJfZGFt YWdlX3NyY19tb3ZlZCkKPiA+ID4gK3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX2RhbWFnZV9ub3Rfdmlz aWJsZSwKPiA+IGlndF9kYW1hZ2VfaXRlcl9kYW1hZ2Vfbm90X3Zpc2libGUpCj4gPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL3Rlc3QtZHJtX2RhbWFnZV9oZWxwZXIu Ywo+ID4gYi9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL3Rlc3QtZHJtX2RhbWFnZV9oZWxwZXIu Ywo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjE3 NzU0NzM0YzQ3YQo+ID4gPiAtLS0gL2Rldi9udWxsCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9zZWxmdGVzdHMvdGVzdC1kcm1fZGFtYWdlX2hlbHBlci5jCj4gPiA+IEBAIC0wLDAgKzEsODQ0 IEBACj4gPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwo+ID4gPiAr LyoKPiA+ID4gKyAqIFRlc3QgY2FzZSBmb3IgZHJtX2RhbWFnZV9oZWxwZXIgZnVuY3Rpb25zCj4g PiA+ICsgKi8KPiA+ID4gKwo+ID4gPiArI2RlZmluZSBwcl9mbXQoZm10KSAiZHJtX2RhbWFnZV9o ZWxwZXI6ICIgZm10Cj4gPiA+ICsKPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiA+ ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2RhbWFnZV9oZWxwZXIuaD4KPiA+ID4gKwo+ID4gPiArI2Rl ZmluZSBURVNUUyAiZHJtX2RhbWFnZV9oZWxwZXJfc2VsZnRlc3RzLmgiCj4gPiA+ICsjaW5jbHVk ZSAiZHJtX3NlbGZ0ZXN0LmgiCj4gPiA+ICsKPiA+ID4gKyNkZWZpbmUgRkFJTCh0ZXN0LCBtc2cs IC4uLikgXAo+ID4gPiArCWRvIHsgXAo+ID4gPiArCQlpZiAodGVzdCkgeyBcCj4gPiA+ICsJCQlw cl9lcnIoIiVzLyV1OiAiIG1zZywgX19GVU5DVElPTl9fLCBfX0xJTkVfXywKPiA+ICMjX19WQV9B UkdTX18pOyBcCj4gPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsgXAo+ID4gPiArCQl9IFwKPiA+ID4g Kwl9IHdoaWxlICgwKQo+ID4gPiArCj4gPiA+ICsjZGVmaW5lIEZBSUxfT04oeCkgRkFJTCgoeCks ICIlcyIsICJGQUlMX09OKCIgX19zdHJpbmdpZnkoeCkgIilcbiIpCj4gPiA+ICsKPiA+ID4gK3N0 YXRpYyB2b2lkIHNldF9wbGFuZV9zcmMoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUsIGlu dCB4MSwgaW50IHkxLCBpbnQKPiA+IHgyLAo+ID4gPiArCQkJICBpbnQgeTIpCj4gPiA+ICt7Cj4g PiA+ICsJc3RhdGUtPnNyYy54MSA9IHgxOwo+ID4gPiArCXN0YXRlLT5zcmMueTEgPSB5MTsKPiA+ ID4gKwlzdGF0ZS0+c3JjLngyID0geDI7Cj4gPiA+ICsJc3RhdGUtPnNyYy55MiA9IHkyOwo+ID4g PiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZCBzZXRfZGFtYWdlX2NsaXAoc3RydWN0IGRy bV9tb2RlX3JlY3QgKnIsIGludCB4MSwgaW50IHkxLCBpbnQKPiA+IHgyLAo+ID4gPiArCQkJICAg IGludCB5MikKPiA+ID4gK3sKPiA+ID4gKwlyLT54MSA9IHgxOwo+ID4gPiArCXItPnkxID0geTE7 Cj4gPiA+ICsJci0+eDIgPSB4MjsKPiA+ID4gKwlyLT55MiA9IHkyOwo+ID4gPiArfQo+ID4gPiAr Cj4gPiA+ICtzdGF0aWMgdm9pZCBzZXRfZGFtYWdlX2Jsb2Ioc3RydWN0IGRybV9wcm9wZXJ0eV9i bG9iICpkYW1hZ2VfYmxvYiwKPiA+ID4gKwkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfcmVjdCAqciwg dWludDMyX3Qgc2l6ZSkKPiA+ID4gK3sKPiA+ID4gKwlkYW1hZ2VfYmxvYi0+bGVuZ3RoID0gc2l6 ZTsKPiA+ID4gKwlkYW1hZ2VfYmxvYi0+ZGF0YSA9IHI7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4g K3N0YXRpYyB2b2lkIHNldF9wbGFuZV9kYW1hZ2Uoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3Rh dGUsCj4gPiA+ICsJCQkgICAgIHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqZGFtYWdlX2Jsb2Ip Cj4gPiA+ICt7Cj4gPiA+ICsJc3RhdGUtPmZiX2RhbWFnZV9jbGlwcyA9IGRhbWFnZV9ibG9iOwo+ ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgYm9vbCBjaGVja19kYW1hZ2VfY2xpcChzdHJ1 Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSwgc3RydWN0Cj4gPiBkcm1fcmVjdCAqciwKPiA+ID4g KwkJCSAgICAgIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKPiA+ID4gK3sKPiA+ID4g KwkvKgo+ID4gPiArCSAqIFJvdW5kIGRvd24geDEveTEgYW5kIHJvdW5kIHVwIHgyL3kyLiBUaGlz IGlzIGJlY2F1c2UgZGFtYWdlIGlzCj4gPiBub3QgaW4KPiA+ID4gKwkgKiAxNi4xNiBmaXhlZCBw b2ludCBzbyB0byBjYXRjaCBhbGwgcGl4ZWxzLgo+ID4gPiArCSAqLwo+ID4gPiArCWludCBzcmNf eDEgPSBzdGF0ZS0+c3JjLngxID4+IDE2Owo+ID4gPiArCWludCBzcmNfeTEgPSBzdGF0ZS0+c3Jj LnkxID4+IDE2Owo+ID4gPiArCWludCBzcmNfeDIgPSAoc3RhdGUtPnNyYy54MiA+PiAxNikgKyAh IShzdGF0ZS0+c3JjLngyICYgMHhGRkZGKTsKPiA+ID4gKwlpbnQgc3JjX3kyID0gKHN0YXRlLT5z cmMueTIgPj4gMTYpICsgISEoc3RhdGUtPnNyYy55MiAmIDB4RkZGRik7Cj4gPiA+ICsKPiA+ID4g KwlpZiAoeDEgPj0geDIgfHwgeTEgPj0geTIpIHsKPiA+ID4gKwkJcHJfZXJyKCJDYW5ub3QgaGF2 ZSBkYW1hZ2UgY2xpcCB3aXRoIG5vIGRpbWVudGlvbi5cbiIpOwo+ID4gPiArCQlyZXR1cm4gZmFs c2U7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJaWYgKHgxIDwgc3JjX3gxIHx8IHkxIDwgc3Jj X3kxIHx8IHgyID4gc3JjX3gyIHx8IHkyID4gc3JjX3kyKSB7Cj4gPiA+ICsJCXByX2VycigiRGFt YWdlIGNhbm5vdCBiZSBvdXRzaWRlIHJvdW5kZWQgcGxhbmUgc3JjLlxuIik7Cj4gPiA+ICsJCXJl dHVybiBmYWxzZTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlpZiAoci0+eDEgIT0geDEgfHwg ci0+eTEgIT0geTEgfHwgci0+eDIgIT0geDIgfHwgci0+eTIgIT0geTIpIHsKPiA+ID4gKwkJcHJf ZXJyKCJEYW1hZ2UgPSAlZCAlZCAlZCAlZFxuIiwgci0+eDEsIHItPnkxLCByLT54Miwgci0KPiA+ ID55Mik7Cj4gPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwly ZXR1cm4gdHJ1ZTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCBpZ3RfZGFtYWdl X2l0ZXJfbm9fZGFtYWdlKHZvaWQgKmlnbm9yZWQpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGRy bV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyIGl0ZXI7Cj4gPiA+ICsJc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSBvbGRfc3RhdGU7Cj4gPiA+ICsJc3RydWN0IGRybV9yZWN0IGNsaXA7Cj4gPiA+ICsJ dWludDMyX3QgbnVtX2hpdHMgPSAwOwo+ID4gPiArCj4gPiA+ICsJc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciBmYiA9IHsKPiA+ID4gKwkJLndpZHRoID0gMjA0OCwKPiA+ID4gKwkJLmhlaWdodCA9IDIw NDgKPiA+ID4gKwl9Owo+ID4gPiArCj4gPiA+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0 ZSA9IHsKPiA+ID4gKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAo+ID4gPiArCQkuZmIgPSAmZmIs Cj4gPiA+ICsJCS52aXNpYmxlID0gdHJ1ZSwKPiA+ID4gKwl9Owo+ID4gPiArCj4gPiA+ICsJLyog UGxhbmUgc3JjIHNhbWUgYXMgZmIgc2l6ZS4gKi8KPiA+ID4gKwlzZXRfcGxhbmVfc3JjKCZvbGRf c3RhdGUsIDAsIDAsIGZiLndpZHRoIDw8IDE2LCBmYi5oZWlnaHQgPDwgMTYpOwo+ID4gPiArCXNl dF9wbGFuZV9zcmMoJnN0YXRlLCAwLCAwLCBmYi53aWR0aCA8PCAxNiwgZmIuaGVpZ2h0IDw8IDE2 KTsKPiA+ID4gKwlkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xk X3N0YXRlLCAmc3RhdGUpOwo+ID4gPiArCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdl KCZpdGVyLCAmY2xpcCkKPiA+ID4gKwkJbnVtX2hpdHMrKzsKPiA+ID4gKwo+ID4gPiArCUZBSUwo bnVtX2hpdHMgIT0gMSwgIlNob3VsZCByZXR1cm4gcGxhbmUgc3JjIGFzIGRhbWFnZS4iKTsKPiA+ ID4gKwlGQUlMX09OKCFjaGVja19kYW1hZ2VfY2xpcCgmc3RhdGUsICZjbGlwLCAwLCAwLCAyMDQ4 LCAyMDQ4KSk7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gKwo+ID4g PiArc3RhdGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfbm9fZGFtYWdlX2ZyYWN0aW9uYWxfc3JjKHZv 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 dGlvbmFsIHBhcnQuICovCj4gPiA+ICsJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAweDNmZmZl LCAweDNmZmZlLAo+ID4gPiArCQkgICAgICAweDNmZmZlICsgKDEwMjQgPDwgMTYpLCAweDNmZmZl ICsgKDc2OCA8PCAxNikpOwo+ID4gPiArCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAweDNmZmZlLCAw eDNmZmZlLAo+ID4gPiArCQkgICAgICAweDNmZmZlICsgKDEwMjQgPDwgMTYpLCAweDNmZmZlICsg KDc2OCA8PCAxNikpOwo+ID4gPiArCWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQo Jml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7Cj4gPiA+ICsJZHJtX2F0b21pY19mb3JfZWFjaF9w bGFuZV9kYW1hZ2UoJml0ZXIsICZjbGlwKQo+ID4gPiArCQludW1faGl0cysrOwo+ID4gPiArCj4g PiA+ICsJRkFJTChudW1faGl0cyAhPSAxLCAiU2hvdWxkIHJldHVybiByb3VuZGVkIG9mZiBwbGFu ZSBzcmMgYXMKPiA+IGRhbWFnZS4iKTsKPiA+ID4gKwlGQUlMX09OKCFjaGVja19kYW1hZ2VfY2xp cCgmc3RhdGUsICZjbGlwLCAzLCAzLCAxMDI4LCA3NzIpKTsKPiA+ID4gKwo+ID4gPiArCXJldHVy biAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9u b19kYW1hZ2Vfc3JjX21vdmVkKHZvaWQgKmlnbm9yZWQpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0 IGRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyIGl0ZXI7Cj4gPiA+ICsJc3RydWN0IGRybV9w bGFuZV9zdGF0ZSBvbGRfc3RhdGU7Cj4gPiA+ICsJc3RydWN0IGRybV9yZWN0IGNsaXA7Cj4gPiA+ ICsJdWludDMyX3QgbnVtX2hpdHMgPSAwOwo+ID4gPiArCj4gPiA+ICsJc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciBmYiA9IHsKPiA+ID4gKwkJLndpZHRoID0gMjA0OCwKPiA+ID4gKwkJLmhlaWdodCA9 IDIwNDgKPiA+ID4gKwl9Owo+ID4gPiArCj4gPiA+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBz dGF0ZSA9IHsKPiA+ID4gKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAo+ID4gPiArCQkuZmIgPSAm ZmIsCj4gPiA+ICsJCS52aXNpYmxlID0gdHJ1ZSwKPiA+ID4gKwl9Owo+ID4gPiArCj4gPiA+ICsJ LyogUGxhbmUgc3JjIG1vdmVkIHNpbmNlIG9sZCBwbGFuZSBzdGF0ZS4gKi8KPiA+ID4gKwlzZXRf cGxhbmVfc3JjKCZvbGRfc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7Cj4gPiA+ ICsJc2V0X3BsYW5lX3NyYygmc3RhdGUsIDEwIDw8IDE2LCAxMCA8PCAxNiwKPiA+ID4gKwkJICAg ICAgKDEwICsgMTAyNCkgPDwgMTYsICgxMCArIDc2OCkgPDwgMTYpOwo+ID4gPiArCWRybV9hdG9t aWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7Cj4g PiA+ICsJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIsICZjbGlwKQo+ID4g PiArCQludW1faGl0cysrOwo+ID4gPiArCj4gPiA+ICsJRkFJTChudW1faGl0cyAhPSAxLCAiU2hv dWxkIHJldHVybiBwbGFuZSBzcmMgYXMgZGFtYWdlLiIpOwo+ID4gPiArCUZBSUxfT04oIWNoZWNr X2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDEwLCAxMCwgMTAzNCwgNzc4KSk7Cj4gPiA+ICsK PiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCBpZ3Rf ZGFtYWdlX2l0ZXJfbm9fZGFtYWdlX2ZyYWN0aW9uYWxfc3JjX21vdmVkKHZvaWQKPiA+ICppZ25v cmVkKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRl ciBpdGVyOwo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOwo+ID4gPiAr CXN0cnVjdCBkcm1fcmVjdCBjbGlwOwo+ID4gPiArCXVpbnQzMl90IG51bV9oaXRzID0gMDsKPiA+ ID4gKwo+ID4gPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7Cj4gPiA+ICsJCS53aWR0 aCA9IDIwNDgsCj4gPiA+ICsJCS5oZWlnaHQgPSAyMDQ4Cj4gPiA+ICsJfTsKPiA+ID4gKwo+ID4g PiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7Cj4gPiA+ICsJCS5jcnRjID0gWkVS T19TSVpFX1BUUiwKPiA+ID4gKwkJLmZiID0gJmZiLAo+ID4gPiArCQkudmlzaWJsZSA9IHRydWUs Cj4gPiA+ICsJfTsKPiA+ID4gKwo+ID4gPiArCS8qIFBsYW5lIHNyYyBoYXMgZnJhY3Rpb25hbCBw YXJ0IGFuZCBpdCBtb3ZlZCBzaW5jZSBvbGQgcGxhbmUgc3RhdGUuICovCj4gPiA+ICsJc2V0X3Bs YW5lX3NyYygmb2xkX3N0YXRlLCAweDNmZmZlLCAweDNmZmZlLAo+ID4gPiArCQkgICAgICAweDNm ZmZlICsgKDEwMjQgPDwgMTYpLCAweDNmZmZlICsgKDc2OCA8PCAxNikpOwo+ID4gPiArCXNldF9w bGFuZV9zcmMoJnN0YXRlLCAweDQwMDAyLCAweDQwMDAyLAo+ID4gPiArCQkgICAgICAweDQwMDAy ICsgKDEwMjQgPDwgMTYpLCAweDQwMDAyICsgKDc2OCA8PCAxNikpOwo+ID4gPiArCWRybV9hdG9t aWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7Cj4g PiA+ICsJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIsICZjbGlwKQo+ID4g PiArCQludW1faGl0cysrOwo+ID4gPiArCj4gPiA+ICsJRkFJTChudW1faGl0cyAhPSAxLCAiU2hv dWxkIHJldHVybiBwbGFuZSBzcmMgYXMgZGFtYWdlLiIpOwo+ID4gPiArCUZBSUxfT04oIWNoZWNr X2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDQsIDQsIDEwMjksIDc3MykpOwo+ID4gPiArCj4g PiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbnQgaWd0X2Rh bWFnZV9pdGVyX25vX2RhbWFnZV9ub3RfdmlzaWJsZSh2b2lkICppZ25vcmVkKQo+ID4gPiArewo+ ID4gPiArCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOwo+ID4gPiAr CXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOwo+ID4gPiArCXN0cnVjdCBkcm1fcmVj dCBjbGlwOwo+ID4gPiArCXVpbnQzMl90IG51bV9oaXRzID0gMDsKPiA+ID4gKwo+ID4gPiArCXN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7Cj4gPiA+ICsJCS53aWR0aCA9IDIwNDgsCj4gPiA+ ICsJCS5oZWlnaHQgPSAyMDQ4Cj4gPiA+ICsJfTsKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgc3RhdGUgPSB7Cj4gPiA+ICsJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKPiA+ ID4gKwkJLmZiID0gJmZiLAo+ID4gPiArCQkudmlzaWJsZSA9IGZhbHNlLAo+ID4gPiArCX07Cj4g PiA+ICsKPiA+ID4gKwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYs IDc2OCA8PCAxNik7Cj4gPiA+ICsJc2V0X3BsYW5lX3NyYygmc3RhdGUsIDAsIDAsIDEwMjQgPDwg MTYsIDc2OCA8PCAxNik7Cj4gPiA+ICsJZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5p dCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRlKTsKPiA+ID4gKwlkcm1fYXRvbWljX2Zvcl9lYWNo X3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApCj4gPiA+ICsJCW51bV9oaXRzKys7Cj4gPiA+ICsK PiA+ID4gKwlGQUlMKG51bV9oaXRzICE9IDAsICJTaG91bGQgaGF2ZSBubyBkYW1hZ2UuIik7Cj4g PiA+ICsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGlu dCBpZ3RfZGFtYWdlX2l0ZXJfbm9fZGFtYWdlX25vX2NydGModm9pZCAqaWdub3JlZCkKPiA+ID4g K3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIgaXRlcjsKPiA+ ID4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsKPiA+ID4gKwlzdHJ1Y3QgZHJt X3JlY3QgY2xpcDsKPiA+ID4gKwl1aW50MzJfdCBudW1faGl0cyA9IDA7Cj4gPiA+ICsKPiA+ID4g KwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGZiID0gewo+ID4gPiArCQkud2lkdGggPSAyMDQ4LAo+ ID4gPiArCQkuaGVpZ2h0ID0gMjA0OAo+ID4gPiArCX07Cj4gPiA+ICsKPiA+ID4gKwlzdHJ1Y3Qg ZHJtX3BsYW5lX3N0YXRlIHN0YXRlID0gewo+ID4gPiArCQkuY3J0YyA9IDAsCj4gPiA+ICsJCS5m YiA9ICZmYiwKPiA+ID4gKwl9Owo+ID4gPiArCj4gPiA+ICsJc2V0X3BsYW5lX3NyYygmb2xkX3N0 YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOwo+ID4gPiArCXNldF9wbGFuZV9zcmMo JnN0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOwo+ID4gPiArCWRybV9hdG9taWNf aGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7Cj4gPiA+ ICsJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIsICZjbGlwKQo+ID4gPiAr CQludW1faGl0cysrOwo+ID4gPiArCj4gPiA+ICsJRkFJTChudW1faGl0cyAhPSAwLCAiU2hvdWxk IGhhdmUgbm8gZGFtYWdlLiIpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICt9Cj4g PiA+ICsKPiA+ID4gK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX25vX2RhbWFnZV9ub19mYih2 b2lkICppZ25vcmVkKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9k YW1hZ2VfaXRlciBpdGVyOwo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRl Owo+ID4gPiArCXN0cnVjdCBkcm1fcmVjdCBjbGlwOwo+ID4gPiArCXVpbnQzMl90IG51bV9oaXRz ID0gMDsKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7Cj4g PiA+ICsJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKPiA+ID4gKwkJLmZiID0gMCwKPiA+ID4gKwl9 Owo+ID4gPiArCj4gPiA+ICsJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAwLCAwLCAxMDI0IDw8 IDE2LCA3NjggPDwgMTYpOwo+ID4gPiArCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAwLCAwLCAxMDI0 IDw8IDE2LCA3NjggPDwgMTYpOwo+ID4gPiArCWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVy X2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7Cj4gPiA+ICsJZHJtX2F0b21pY19mb3Jf ZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIsICZjbGlwKQo+ID4gPiArCQludW1faGl0cysrOwo+ID4g PiArCj4gPiA+ICsJRkFJTChudW1faGl0cyAhPSAwLCAiU2hvdWxkIGhhdmUgbm8gZGFtYWdlLiIp Owo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRp YyBpbnQgaWd0X2RhbWFnZV9pdGVyX3NpbXBsZV9kYW1hZ2Uodm9pZCAqaWdub3JlZCkKPiA+ID4g K3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIgaXRlcjsKPiA+ ID4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsKPiA+ID4gKwlzdHJ1Y3QgZHJt X3Byb3BlcnR5X2Jsb2IgZGFtYWdlX2Jsb2I7Cj4gPiA+ICsJc3RydWN0IGRybV9tb2RlX3JlY3Qg ZGFtYWdlOwo+ID4gPiArCXN0cnVjdCBkcm1fcmVjdCBjbGlwOwo+ID4gPiArCXVpbnQzMl90IG51 bV9oaXRzID0gMDsKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7 Cj4gPiA+ICsJCS53aWR0aCA9IDIwNDgsCj4gPiA+ICsJCS5oZWlnaHQgPSAyMDQ4Cj4gPiA+ICsJ fTsKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7Cj4gPiA+ ICsJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKPiA+ID4gKwkJLmZiID0gJmZiLAo+ID4gPiArCQku dmlzaWJsZSA9IHRydWUsCj4gPiA+ICsJfTsKPiA+ID4gKwo+ID4gPiArCXNldF9wbGFuZV9zcmMo Jm9sZF9zdGF0ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8IDE2KTsKPiA+ID4gKwlzZXRfcGxh bmVfc3JjKCZzdGF0ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8IDE2KTsKPiA+ID4gKwkvKiBE YW1hZ2Ugc2V0IHRvIHBsYW5lIHNyYyAqLwo+ID4gPiArCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdl LCAwLCAwLCAxMDI0LCA3NjgpOwo+ID4gPiArCXNldF9kYW1hZ2VfYmxvYigmZGFtYWdlX2Jsb2Is ICZkYW1hZ2UsIHNpemVvZihkYW1hZ2UpKTsKPiA+ID4gKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0 ZSwgJmRhbWFnZV9ibG9iKTsKPiA+ID4gKwlkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9p bml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3RhdGUpOwo+ID4gPiArCWRybV9hdG9taWNfZm9yX2Vh Y2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKPiA+ID4gKwkJbnVtX2hpdHMrKzsKPiA+ID4g Kwo+ID4gPiArCUZBSUwobnVtX2hpdHMgIT0gMSwgIlNob3VsZCByZXR1cm4gZGFtYWdlIHdoZW4g c2V0LiIpOwo+ID4gPiArCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAs IDAsIDAsIDEwMjQsIDc2OCkpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICt9Cj4g PiA+ICsKPiA+ID4gK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2Uodm9p ZCAqaWdub3JlZCkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFt YWdlX2l0ZXIgaXRlcjsKPiA+ID4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsK PiA+ID4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgZGFtYWdlX2Jsb2I7Cj4gPiA+ICsJc3Ry dWN0IGRybV9tb2RlX3JlY3QgZGFtYWdlOwo+ID4gPiArCXN0cnVjdCBkcm1fcmVjdCBjbGlwOwo+ ID4gPiArCXVpbnQzMl90IG51bV9oaXRzID0gMDsKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgZmIgPSB7Cj4gPiA+ICsJCS53aWR0aCA9IDIwNDgsCj4gPiA+ICsJCS5oZWln aHQgPSAyMDQ4Cj4gPiA+ICsJfTsKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgc3RhdGUgPSB7Cj4gPiA+ICsJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKPiA+ID4gKwkJLmZi ID0gJmZiLAo+ID4gPiArCQkudmlzaWJsZSA9IHRydWUsCj4gPiA+ICsJfTsKPiA+ID4gKwo+ID4g PiArCXNldF9wbGFuZV9zcmMoJm9sZF9zdGF0ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8IDE2 KTsKPiA+ID4gKwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8 IDE2KTsKPiA+ID4gKwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZSwgMjU2LCAxOTIsIDc2OCwgNTc2 KTsKPiA+ID4gKwlzZXRfZGFtYWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFtYWdlLCBzaXplb2Yo ZGFtYWdlKSk7Cj4gPiA+ICsJc2V0X3BsYW5lX2RhbWFnZSgmc3RhdGUsICZkYW1hZ2VfYmxvYik7 Cj4gPiA+ICsJZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9z dGF0ZSwgJnN0YXRlKTsKPiA+ID4gKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgm aXRlciwgJmNsaXApCj4gPiA+ICsJCW51bV9oaXRzKys7Cj4gPiA+ICsKPiA+ID4gKwlGQUlMKG51 bV9oaXRzICE9IDEsICJTaG91bGQgcmV0dXJuIGRhbWFnZSB3aGVuIHNldC4iKTsKPiA+ID4gKwlG QUlMX09OKCFjaGVja19kYW1hZ2VfY2xpcCgmc3RhdGUsICZjbGlwLCAyNTYsIDE5MiwgNzY4LCA1 NzYpKTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtz dGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX2ludGVyc2VjdF9zcmModm9p ZCAqaWdub3JlZCkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFt YWdlX2l0ZXIgaXRlcjsKPiA+ID4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsK PiA+ID4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgZGFtYWdlX2Jsb2I7Cj4gPiA+ICsJc3Ry dWN0IGRybV9tb2RlX3JlY3QgZGFtYWdlOwo+ID4gPiArCXN0cnVjdCBkcm1fcmVjdCBjbGlwOwo+ ID4gPiArCXVpbnQzMl90IG51bV9oaXRzID0gMDsKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgZmIgPSB7Cj4gPiA+ICsJCS53aWR0aCA9IDIwNDgsCj4gPiA+ICsJCS5oZWln aHQgPSAyMDQ4Cj4gPiA+ICsJfTsKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgc3RhdGUgPSB7Cj4gPiA+ICsJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKPiA+ID4gKwkJLmZi ID0gJmZiLAo+ID4gPiArCQkudmlzaWJsZSA9IHRydWUsCj4gPiA+ICsJfTsKPiA+ID4gKwo+ID4g PiArCXNldF9wbGFuZV9zcmMoJm9sZF9zdGF0ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8IDE2 KTsKPiA+ID4gKwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8 IDE2KTsKPiA+ID4gKwkvKiBEYW1hZ2UgaW50ZXJzZWN0IHdpdGggcGxhbmUgc3JjLiAqLwo+ID4g PiArCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlLCAyNTYsIDE5MiwgMTM2MCwgNzY4KTsKPiA+ID4g KwlzZXRfZGFtYWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFtYWdlLCBzaXplb2YoZGFtYWdlKSk7 Cj4gPiA+ICsJc2V0X3BsYW5lX2RhbWFnZSgmc3RhdGUsICZkYW1hZ2VfYmxvYik7Cj4gPiA+ICsJ ZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0 YXRlKTsKPiA+ID4gKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNs aXApCj4gPiA+ICsJCW51bV9oaXRzKys7Cj4gPiA+ICsKPiA+ID4gKwlGQUlMKG51bV9oaXRzICE9 IDEsICJTaG91bGQgcmV0dXJuIGRhbWFnZSBjbGlwcGVkIHRvIHNyYy4iKTsKPiA+ID4gKwlGQUlM X09OKCFjaGVja19kYW1hZ2VfY2xpcCgmc3RhdGUsICZjbGlwLCAyNTYsIDE5MiwgMTAyNCwgNzY4 KSk7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3Rh dGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9vdXRzaWRlX3NyYyh2b2lkICpp Z25vcmVkKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2Vf aXRlciBpdGVyOwo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOwo+ID4g PiArCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiBkYW1hZ2VfYmxvYjsKPiA+ID4gKwlzdHJ1Y3Qg ZHJtX21vZGVfcmVjdCBkYW1hZ2U7Cj4gPiA+ICsJc3RydWN0IGRybV9yZWN0IGNsaXA7Cj4gPiA+ ICsJdWludDMyX3QgbnVtX2hpdHMgPSAwOwo+ID4gPiArCj4gPiA+ICsJc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciBmYiA9IHsKPiA+ID4gKwkJLndpZHRoID0gMjA0OCwKPiA+ID4gKwkJLmhlaWdodCA9 IDIwNDgKPiA+ID4gKwl9Owo+ID4gPiArCj4gPiA+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBz dGF0ZSA9IHsKPiA+ID4gKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAo+ID4gPiArCQkuZmIgPSAm ZmIsCj4gPiA+ICsJCS52aXNpYmxlID0gdHJ1ZSwKPiA+ID4gKwl9Owo+ID4gPiArCj4gPiA+ICsJ c2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOwo+ ID4gPiArCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYp Owo+ID4gPiArCS8qIERhbWFnZSBjbGlwIG91dHNpZGUgcGxhbmUgc3JjICovCj4gPiA+ICsJc2V0 X2RhbWFnZV9jbGlwKCZkYW1hZ2UsIDEzNjAsIDEzNjAsIDEzODAsIDEzODApOwo+ID4gPiArCXNl dF9kYW1hZ2VfYmxvYigmZGFtYWdlX2Jsb2IsICZkYW1hZ2UsIHNpemVvZihkYW1hZ2UpKTsKPiA+ ID4gKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKPiA+ID4gKwlkcm1f YXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3RhdGUp Owo+ID4gPiArCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkK PiA+ID4gKwkJbnVtX2hpdHMrKzsKPiA+ID4gKwo+ID4gPiArCUZBSUwobnVtX2hpdHMgIT0gMCwg IlNob3VsZCBoYXZlIG5vIGRhbWFnZS4iKTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiAwOwo+ID4g PiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFt YWdlX2ZyYWN0aW9uYWxfc3JjKHZvaWQgKmlnbm9yZWQpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0 IGRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyIGl0ZXI7Cj4gPiA+ICsJc3RydWN0IGRybV9w bGFuZV9zdGF0ZSBvbGRfc3RhdGU7Cj4gPiA+ICsJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iIGRh bWFnZV9ibG9iOwo+ID4gPiArCXN0cnVjdCBkcm1fbW9kZV9yZWN0IGRhbWFnZTsKPiA+ID4gKwlz dHJ1Y3QgZHJtX3JlY3QgY2xpcDsKPiA+ID4gKwl1aW50MzJfdCBudW1faGl0cyA9IDA7Cj4gPiA+ ICsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGZiID0gewo+ID4gPiArCQkud2lkdGgg PSAyMDQ4LAo+ID4gPiArCQkuaGVpZ2h0ID0gMjA0OAo+ID4gPiArCX07Cj4gPiA+ICsKPiA+ID4g KwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIHN0YXRlID0gewo+ID4gPiArCQkuY3J0YyA9IFpFUk9f U0laRV9QVFIsCj4gPiA+ICsJCS5mYiA9ICZmYiwKPiA+ID4gKwkJLnZpc2libGUgPSB0cnVlLAo+ ID4gPiArCX07Cj4gPiA+ICsKPiA+ID4gKwkvKiBQbGFuZSBzcmMgaGFzIGZyYWN0aW9uYWwgcGFy dC4gKi8KPiA+ID4gKwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDB4NDAwMDIsIDB4NDAwMDIs Cj4gPiA+ICsJCSAgICAgIDB4NDAwMDIgKyAoMTAyNCA8PCAxNiksIDB4NDAwMDIgKyAoNzY4IDw8 IDE2KSk7Cj4gPiA+ICsJc2V0X3BsYW5lX3NyYygmc3RhdGUsIDB4NDAwMDIsIDB4NDAwMDIsCj4g PiA+ICsJCSAgICAgIDB4NDAwMDIgKyAoMTAyNCA8PCAxNiksIDB4NDAwMDIgKyAoNzY4IDw8IDE2 KSk7Cj4gPiA+ICsJc2V0X2RhbWFnZV9jbGlwKCZkYW1hZ2UsIDEwLCAxMCwgMjU2LCAzMzApOwo+ ID4gPiArCXNldF9kYW1hZ2VfYmxvYigmZGFtYWdlX2Jsb2IsICZkYW1hZ2UsIHNpemVvZihkYW1h Z2UpKTsKPiA+ID4gKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKPiA+ ID4gKwlkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRl LCAmc3RhdGUpOwo+ID4gPiArCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVy LCAmY2xpcCkKPiA+ID4gKwkJbnVtX2hpdHMrKzsKPiA+ID4gKwo+ID4gPiArCUZBSUwobnVtX2hp dHMgIT0gMSwgIlNob3VsZCByZXR1cm4gZGFtYWdlIHdoZW4gc2V0LiIpOwo+ID4gPiArCUZBSUxf T04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDEwLCAxMCwgMjU2LCAzMzApKTsK PiA+ID4gKwo+ID4gPiArCXJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMg aW50IGlndF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX2ludGVyc2VjdF9mcmFjdGlvbmFsX3Ny Yyh2b2lkCj4gPiAqaWdub3JlZCkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX2F0b21pY19o ZWxwZXJfZGFtYWdlX2l0ZXIgaXRlcjsKPiA+ID4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9s ZF9zdGF0ZTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgZGFtYWdlX2Jsb2I7Cj4g PiA+ICsJc3RydWN0IGRybV9tb2RlX3JlY3QgZGFtYWdlOwo+ID4gPiArCXN0cnVjdCBkcm1fcmVj dCBjbGlwOwo+ID4gPiArCXVpbnQzMl90IG51bV9oaXRzID0gMDsKPiA+ID4gKwo+ID4gPiArCXN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7Cj4gPiA+ICsJCS53aWR0aCA9IDIwNDgsCj4gPiA+ ICsJCS5oZWlnaHQgPSAyMDQ4Cj4gPiA+ICsJfTsKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgc3RhdGUgPSB7Cj4gPiA+ICsJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKPiA+ ID4gKwkJLmZiID0gJmZiLAo+ID4gPiArCQkudmlzaWJsZSA9IHRydWUsCj4gPiA+ICsJfTsKPiA+ ID4gKwo+ID4gPiArCS8qIFBsYW5lIHNyYyBoYXMgZnJhY3Rpb25hbCBwYXJ0LiAqLwo+ID4gPiAr CXNldF9wbGFuZV9zcmMoJm9sZF9zdGF0ZSwgMHg0MDAwMiwgMHg0MDAwMiwKPiA+ID4gKwkJICAg ICAgMHg0MDAwMiArICgxMDI0IDw8IDE2KSwgMHg0MDAwMiArICg3NjggPDwgMTYpKTsKPiA+ID4g KwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMHg0MDAwMiwgMHg0MDAwMiwKPiA+ID4gKwkJICAgICAg MHg0MDAwMiArICgxMDI0IDw8IDE2KSwgMHg0MDAwMiArICg3NjggPDwgMTYpKTsKPiA+ID4gKwkv KiBEYW1hZ2UgaW50ZXJzZWN0IHdpdGggcGxhbmUgc3JjLiAqLwo+ID4gPiArCXNldF9kYW1hZ2Vf Y2xpcCgmZGFtYWdlLCAxMCwgMSwgMTM2MCwgMzMwKTsKPiA+ID4gKwlzZXRfZGFtYWdlX2Jsb2Io JmRhbWFnZV9ibG9iLCAmZGFtYWdlLCBzaXplb2YoZGFtYWdlKSk7Cj4gPiA+ICsJc2V0X3BsYW5l X2RhbWFnZSgmc3RhdGUsICZkYW1hZ2VfYmxvYik7Cj4gPiA+ICsJZHJtX2F0b21pY19oZWxwZXJf ZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRlKTsKPiA+ID4gKwlkcm1f YXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApCj4gPiA+ICsJCW51bV9o aXRzKys7Cj4gPiA+ICsKPiA+ID4gKwlGQUlMKG51bV9oaXRzICE9IDEsICJTaG91bGQgcmV0dXJu IGRhbWFnZSBjbGlwcGVkIHRvIHJvdW5kZWQgb2ZmCj4gPiBzcmMuIik7Cj4gPiA+ICsJRkFJTF9P TighY2hlY2tfZGFtYWdlX2NsaXAoJnN0YXRlLCAmY2xpcCwgMTAsIDQsIDEwMjksIDMzMCkpOwo+ ID4gPiArCj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBp bnQgaWd0X2RhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2Vfb3V0c2lkZV9mcmFjdGlvbmFsX3NyYyh2 b2lkCj4gPiAqaWdub3JlZCkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxw ZXJfZGFtYWdlX2l0ZXIgaXRlcjsKPiA+ID4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9z dGF0ZTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgZGFtYWdlX2Jsb2I7Cj4gPiA+ ICsJc3RydWN0IGRybV9tb2RlX3JlY3QgZGFtYWdlOwo+ID4gPiArCXN0cnVjdCBkcm1fcmVjdCBj bGlwOwo+ID4gPiArCXVpbnQzMl90IG51bV9oaXRzID0gMDsKPiA+ID4gKwo+ID4gPiArCXN0cnVj dCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7Cj4gPiA+ICsJCS53aWR0aCA9IDIwNDgsCj4gPiA+ICsJ CS5oZWlnaHQgPSAyMDQ4Cj4gPiA+ICsJfTsKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCBkcm1fcGxh bmVfc3RhdGUgc3RhdGUgPSB7Cj4gPiA+ICsJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKPiA+ID4g KwkJLmZiID0gJmZiLAo+ID4gPiArCQkudmlzaWJsZSA9IHRydWUsCj4gPiA+ICsJfTsKPiA+ID4g Kwo+ID4gPiArCS8qIFBsYW5lIHNyYyBoYXMgZnJhY3Rpb25hbCBwYXJ0LiAqLwo+ID4gPiArCXNl dF9wbGFuZV9zcmMoJm9sZF9zdGF0ZSwgMHg0MDAwMiwgMHg0MDAwMiwKPiA+ID4gKwkJICAgICAg MHg0MDAwMiArICgxMDI0IDw8IDE2KSwgMHg0MDAwMiArICg3NjggPDwgMTYpKTsKPiA+ID4gKwlz ZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMHg0MDAwMiwgMHg0MDAwMiwKPiA+ID4gKwkJICAgICAgMHg0 MDAwMiArICgxMDI0IDw8IDE2KSwgMHg0MDAwMiArICg3NjggPDwgMTYpKTsKPiA+ID4gKwkvKiBE YW1hZ2UgY2xpcCBvdXRzaWRlIHBsYW5lIHNyYyAqLwo+ID4gPiArCXNldF9kYW1hZ2VfY2xpcCgm ZGFtYWdlLCAxMzYwLCAxMzYwLCAxMzgwLCAxMzgwKTsKPiA+ID4gKwlzZXRfZGFtYWdlX2Jsb2Io JmRhbWFnZV9ibG9iLCAmZGFtYWdlLCBzaXplb2YoZGFtYWdlKSk7Cj4gPiA+ICsJc2V0X3BsYW5l X2RhbWFnZSgmc3RhdGUsICZkYW1hZ2VfYmxvYik7Cj4gPiA+ICsJZHJtX2F0b21pY19oZWxwZXJf ZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRlKTsKPiA+ID4gKwlkcm1f YXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApCj4gPiA+ICsJCW51bV9o aXRzKys7Cj4gPiA+ICsKPiA+ID4gKwlGQUlMKG51bV9oaXRzICE9IDAsICJTaG91bGQgaGF2ZSBu byBkYW1hZ2UuIik7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gKwo+ ID4gPiArc3RhdGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9zcmNfbW92ZWQo dm9pZCAqaWdub3JlZCkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJf ZGFtYWdlX2l0ZXIgaXRlcjsKPiA+ID4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0 ZTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgZGFtYWdlX2Jsb2I7Cj4gPiA+ICsJ c3RydWN0IGRybV9tb2RlX3JlY3QgZGFtYWdlOwo+ID4gPiArCXN0cnVjdCBkcm1fcmVjdCBjbGlw Owo+ID4gPiArCXVpbnQzMl90IG51bV9oaXRzID0gMDsKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCBk cm1fZnJhbWVidWZmZXIgZmIgPSB7Cj4gPiA+ICsJCS53aWR0aCA9IDIwNDgsCj4gPiA+ICsJCS5o ZWlnaHQgPSAyMDQ4Cj4gPiA+ICsJfTsKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgc3RhdGUgPSB7Cj4gPiA+ICsJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKPiA+ID4gKwkJ LmZiID0gJmZiLAo+ID4gPiArCQkudmlzaWJsZSA9IHRydWUsCj4gPiA+ICsJfTsKPiA+ID4gKwo+ ID4gPiArCS8qIFBsYW5lIHNyYyBtb3ZlZCBzaW5jZSBvbGQgcGxhbmUgc3RhdGUuICovCj4gPiA+ ICsJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYp Owo+ID4gPiArCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAxMCA8PCAxNiwgMTAgPDwgMTYsCj4gPiA+ ICsJCSAgICAgICgxMCArIDEwMjQpIDw8IDE2LCAoMTAgKyA3NjgpIDw8IDE2KTsKPiA+ID4gKwlz ZXRfZGFtYWdlX2NsaXAoJmRhbWFnZSwgMjAsIDMwLCAyNTYsIDI1Nik7Cj4gPiA+ICsJc2V0X2Rh bWFnZV9ibG9iKCZkYW1hZ2VfYmxvYiwgJmRhbWFnZSwgc2l6ZW9mKGRhbWFnZSkpOwo+ID4gPiAr CXNldF9wbGFuZV9kYW1hZ2UoJnN0YXRlLCAmZGFtYWdlX2Jsb2IpOwo+ID4gPiArCWRybV9hdG9t aWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7Cj4g PiA+ICsJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIsICZjbGlwKQo+ID4g PiArCQludW1faGl0cysrOwo+ID4gPiArCj4gPiA+ICsJRkFJTChudW1faGl0cyAhPSAxLCAiU2hv dWxkIHJldHVybiBwbGFuZSBzcmMgYXMgZGFtYWdlLiIpOwo+ID4gPiArCUZBSUxfT04oIWNoZWNr X2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDEwLCAxMCwgMTAzNCwgNzc4KSk7Cj4gPiA+ICsK PiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCBpZ3Rf ZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9mcmFjdGlvbmFsX3NyY19tb3ZlZCh2b2lkCj4gPiAq aWdub3JlZCkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdl X2l0ZXIgaXRlcjsKPiA+ID4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsKPiA+ ID4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgZGFtYWdlX2Jsb2I7Cj4gPiA+ICsJc3RydWN0 IGRybV9tb2RlX3JlY3QgZGFtYWdlOwo+ID4gPiArCXN0cnVjdCBkcm1fcmVjdCBjbGlwOwo+ID4g PiArCXVpbnQzMl90IG51bV9oaXRzID0gMDsKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCBkcm1fZnJh bWVidWZmZXIgZmIgPSB7Cj4gPiA+ICsJCS53aWR0aCA9IDIwNDgsCj4gPiA+ICsJCS5oZWlnaHQg PSAyMDQ4Cj4gPiA+ICsJfTsKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUg c3RhdGUgPSB7Cj4gPiA+ICsJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKPiA+ID4gKwkJLmZiID0g JmZiLAo+ID4gPiArCQkudmlzaWJsZSA9IHRydWUsCj4gPiA+ICsJfTsKPiA+ID4gKwo+ID4gPiAr CS8qIFBsYW5lIHNyYyB3aXRoIGZyYWN0aW9uYWwgcGFydCBtb3ZlZCBzaW5jZSBvbGQgcGxhbmUg c3RhdGUuICovCj4gPiA+ICsJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAweDNmZmZlLCAweDNm ZmZlLAo+ID4gPiArCQkgICAgICAweDNmZmZlICsgKDEwMjQgPDwgMTYpLCAweDNmZmZlICsgKDc2 OCA8PCAxNikpOwo+ID4gPiArCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAweDQwMDAyLCAweDQwMDAy LAo+ID4gPiArCQkgICAgICAweDQwMDAyICsgKDEwMjQgPDwgMTYpLCAweDQwMDAyICsgKDc2OCA8 PCAxNikpOwo+ID4gPiArCS8qIERhbWFnZSBpbnRlcnNlY3Qgd2l0aCBwbGFuZSBzcmMuICovCj4g PiA+ICsJc2V0X2RhbWFnZV9jbGlwKCZkYW1hZ2UsIDIwLCAzMCwgMTM2MCwgMjU2KTsKPiA+ID4g KwlzZXRfZGFtYWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFtYWdlLCBzaXplb2YoZGFtYWdlKSk7 Cj4gPiA+ICsJc2V0X3BsYW5lX2RhbWFnZSgmc3RhdGUsICZkYW1hZ2VfYmxvYik7Cj4gPiA+ICsJ ZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0 YXRlKTsKPiA+ID4gKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNs aXApCj4gPiA+ICsJCW51bV9oaXRzKys7Cj4gPiA+ICsKPiA+ID4gKwlGQUlMKG51bV9oaXRzICE9 IDEsICJTaG91bGQgcmV0dXJuIHJvdW5kZWQgb2ZmIHBsYW5lIHNyYyBhcwo+ID4gZGFtYWdlLiIp 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+ID4gKwkJCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDI0MCwK PiA+IDIwMCwgMjgwLCAyNTApKTsKPiA+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 JnN0YXRlLCAmY2xpcCwgNCwgNCwKPiA+IDEwMjksIDc3MykpOwo+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+ID4gPiArc3RhdGljIGludCBfX2luaXQgdGVzdF9kcm1f ZGFtYWdlX2hlbHBlcl9pbml0KHZvaWQpCj4gPiA+ICt7Cj4gPiA+ICsJaW50IGVycjsKPiA+ID4g Kwo+ID4gPiArCWVyciA9IHJ1bl9zZWxmdGVzdHMoc2VsZnRlc3RzLCBBUlJBWV9TSVpFKHNlbGZ0 ZXN0cyksIE5VTEwpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIGVyciA+IDAgPyAwIDogZXJyOwo+ ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZCBfX2V4aXQgdGVzdF9kcm1fZGFtYWdl X2hlbHBlcl9leGl0KHZvaWQpCj4gPiA+ICt7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK21vZHVs ZV9pbml0KHRlc3RfZHJtX2RhbWFnZV9oZWxwZXJfaW5pdCk7Cj4gPiA+ICttb2R1bGVfZXhpdCh0 ZXN0X2RybV9kYW1hZ2VfaGVscGVyX2V4aXQpOwo+ID4gPiArCj4gPiA+ICtNT0RVTEVfQVVUSE9S KCJWTXdhcmUgSW5jLiIpOwo+ID4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+ID4gPiAtLQo+ ID4gPiAyLjE3LjEKPiA+ID4KPiA+IAo+ID4gLS0KPiA+IERhbmllbCBWZXR0ZXIKPiA+IFNvZnR3 YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgo+ID4gaHR0cHM6Ly9uYTAxLnNhZmVsaW5r cy5wcm90ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0cCUzQSUyRiUyRmJsb2cuZmYKPiA+IHds bC5jaCZhbXA7ZGF0YT0wMiU3QzAxJTdDZHJhd2F0JTQwdm13YXJlLmNvbSU3QzY0ZTdkZWIzZGMy NjRjCj4gPiA2ZjExYTAwOGQ2MmY5NWQ5NmUlN0NiMzkxMzhjYTNjZWU0YjRhYTRkNmNkODNkOWRk NjJmMCU3QzElN0MwJTcKPiA+IEM2MzY3NDg3MTc5Nzk3MTQxOTcmYW1wO3NkYXRhPXZDejcxTCUy Qm9NcEZTR0ZaaWZnJTJGMGJSMUN4elJlTGEKPiA+IDdEeTNzczNVS2VMclUlM0QmYW1wO3Jlc2Vy dmVkPTAKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3Jh dGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngK