From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x344.google.com (mail-wm1-x344.google.com [IPv6:2a00:1450:4864:20::344]) by gabe.freedesktop.org (Postfix) with ESMTPS id CED976E453 for ; Thu, 14 Nov 2019 08:41:19 +0000 (UTC) Received: by mail-wm1-x344.google.com with SMTP id z19so4897279wmk.3 for ; Thu, 14 Nov 2019 00:41:19 -0800 (PST) Date: Thu, 14 Nov 2019 09:41:15 +0100 From: Daniel Vetter Message-ID: <20191114084115.GY23790@phenom.ffwll.local> References: <20191113154913.8787-1-mika.kuoppala@linux.intel.com> <20191113154913.8787-5-mika.kuoppala@linux.intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20191113154913.8787-5-mika.kuoppala@linux.intel.com> Subject: Re: [igt-dev] [PATCH i-g-t 5/7] Add tests/gem_blt_parse List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Mika Kuoppala Cc: igt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org List-ID: T24gV2VkLCBOb3YgMTMsIDIwMTkgYXQgMDU6NDk6MTFQTSArMDIwMCwgTWlrYSBLdW9wcGFsYSB3 cm90ZToKPiBGcm9tOiBNaWthIEt1b3BwYWxhIDxtaWthLmt1b3BwYWxhQGludGVsLmNvbT4KPiAK PiBGb3IgdGVzdGluZyBibGl0dGVyIGVuZ2luZSBjb21tYW5kIHBhcnNlciBvbiBnZW45Lgo+IAo+ IHYyOiBiYWQganVtcCBvZmZzZXQKPiB2MzogcmViYXNlCj4gdjQ6IGltcHJvdmUgYmIgc3RhcnQg YW5kIHN1YmNhc2UgaXQKPiB2NTogZml4IHByZXN1bWVkIG9mZnNldHMgKEpvbikKPiAKPiBTaWdu ZWQtb2ZmLWJ5OiBNaWthIEt1b3BwYWxhIDxtaWthLmt1b3BwYWxhQGxpbnV4LmludGVsLmNvbT4K ClNpbmNlIGl0IHdhcyBvbmx5IGZpeGVkIGxhc3QgbWludXRlIChJJ3ZlIGhlYXJkKSBJIHRoaW5r IHdlIG5lZWQgYQp0ZXN0Y2FzZSB3aXRoIG1vcmUgdGhhbiAzMiBpbnN0cnVjdGlvbnMgZm9yIGJh Y2tqdW1wcyBpbiB0aGUgYmF0Y2guCkJlY2F1c2Ugd2UgZG9uJ3QgY2xlYXIgdGhlIGJpdHMgY29y cmVjdGx5IG9uIDY0IHBsYXRmb3Jtcywgb3Igd2VsbCBkaWRuJ3QKaW4gdGhlIG9yaWdpbmFsIHNl dCBvZiBwYXRjaGVzOgoKQXV0aG9yOiBCZW4gSHV0Y2hpbmdzIDxiZW5AZGVjYWRlbnQub3JnLnVr PgpEYXRlOiAgIE1vbiBOb3YgMTEgMDg6MTM6MjQgMjAxOSAtMDgwMAoKICAgIGRybS9pOTE1L2Nt ZHBhcnNlcjogRml4IGp1bXAgd2hpdGVsaXN0IGNsZWFyaW5nCgpNaWdodCBuZWVkIHRvIHBsYXkg YXJvdW5kIGEgYml0IHNpbmNlIG15IGJyYWluIGlzbid0IG9uIHlldCBhbmQgSSdtCmJhYmJsaW5n IGdhcmJhZ2UgcG90ZW50aWFsbHkgOi0pCgpCdXQgaW1vIHdlIHNob3VsZCBoYXZlIGEgdGVzdGNh c2UgZm9yIHRoaXMgb3ZlcnNpZ2h0LgotRGFuaWVsCgoKPiAtLS0KPiAgdGVzdHMvTWFrZWZpbGUu c291cmNlcyAgICAgICAgICAgICAgICB8ICAgMyArCj4gIHRlc3RzL2k5MTUvZ2VtX2JsdF9wYXJz ZS5jICAgICAgICAgICAgfCA5OTcgKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgdGVzdHMv aW50ZWwtY2kvZmFzdC1mZWVkYmFjay50ZXN0bGlzdCB8ICAgMSArCj4gIHRlc3RzL21lc29uLmJ1 aWxkICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwo+ICA0IGZpbGVzIGNoYW5nZWQsIDEwMDIg aW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvaTkxNS9nZW1fYmx0X3Bh cnNlLmMKPiAKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01h a2VmaWxlLnNvdXJjZXMKPiBpbmRleCBhYmYxZTJmYy4uNzVjNzllZGIgMTAwNjQ0Cj4gLS0tIGEv dGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ICsrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiBA QCAtMjQ0LDYgKzI0NCw5IEBAIGdlbV9leGVjX3BhcmFtc19TT1VSQ0VTID0gaTkxNS9nZW1fZXhl Y19wYXJhbXMuYwo+ICBURVNUU19wcm9ncyArPSBnZW1fZXhlY19wYXJzZQo+ICBnZW1fZXhlY19w YXJzZV9TT1VSQ0VTID0gaTkxNS9nZW1fZXhlY19wYXJzZS5jCj4gIAo+ICtURVNUU19wcm9ncyAr PSBnZW1fYmx0X3BhcnNlCj4gK2dlbV9ibHRfcGFyc2VfU09VUkNFUyA9IGk5MTUvZ2VtX2JsdF9w YXJzZS5jCj4gKwo+ICBURVNUU19wcm9ncyArPSBnZW1fZXhlY19yZWxvYwo+ICBnZW1fZXhlY19y ZWxvY19TT1VSQ0VTID0gaTkxNS9nZW1fZXhlY19yZWxvYy5jCj4gIAo+IGRpZmYgLS1naXQgYS90 ZXN0cy9pOTE1L2dlbV9ibHRfcGFyc2UuYyBiL3Rlc3RzL2k5MTUvZ2VtX2JsdF9wYXJzZS5jCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMC4uNjA3YWZiYTkKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvdGVzdHMvaTkxNS9nZW1fYmx0X3BhcnNlLmMKPiBAQCAtMCwwICsxLDk5 NyBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsg Kgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBk ZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91 dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiAr ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3Jh cGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRI T1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VT IE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MK PiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICJpZ3Qu aCIKPiArI2luY2x1ZGUgPHN0ZGxpYi5oPgo+ICsjaW5jbHVkZSA8c3RkaW50Lmg+Cj4gKyNpbmNs dWRlIDxzdGRpby5oPgo+ICsjaW5jbHVkZSA8ZXJybm8uaD4KPiArCj4gKyNpbmNsdWRlIDxkcm0u aD4KPiArCj4gKyNpZm5kZWYgSTkxNV9QQVJBTV9DTURfUEFSU0VSX1ZFUlNJT04KPiArI2RlZmlu ZSBJOTE1X1BBUkFNX0NNRF9QQVJTRVJfVkVSU0lPTiAgICAgICAyOAo+ICsjZW5kaWYKPiArCj4g KyNpZm5kZWYgSTkxNV9QQVJBTV9IQVNfU0VDVVJFX0JBVENIRVMKPiArI2RlZmluZSBJOTE1X1BB UkFNX0hBU19TRUNVUkVfQkFUQ0hFUyAgICAgICAyMwo+ICsjZW5kaWYKPiArCj4gKy8qIFRvIGhl bHAgY3JhZnQgY29tbWFuZHMga25vd24gdG8gYmUgaW52YWxpZCBhY3Jvc3MgYWxsIGVuZ2luZXMg Ki8KPiArI2RlZmluZSBJTlNUUl9DTElFTlRfU0hJRlQJMjkKPiArI2RlZmluZSAgIElOU1RSX0lO VkFMSURfQ0xJRU5UICAweDcKPiArCj4gKyNkZWZpbmUgTUlfTE9BRF9SRUdJU1RFUl9SRUcgKDB4 MmEgPDwgMjMpCj4gKyNkZWZpbmUgTUlfU1RPUkVfUkVHSVNURVJfTUVNICgweDI0IDw8IDIzKQo+ ICsjZGVmaW5lIE1JX0FSQl9PTl9PRkYgKDB4OCA8PCAyMykKPiArI2RlZmluZSBNSV9VU0VSX0lO VEVSUlVQVCAoMHgwMiA8PCAyMykKPiArI2RlZmluZSBNSV9GTFVTSF9EVyAoMHgyNiA8PCAyMykK PiArI2RlZmluZSBNSV9BUkJfQ0hFQ0sgKDB4MDUgPDwgMjMpCj4gKyNkZWZpbmUgTUlfUkVQT1JU X0hFQUQgKDB4MDcgPDwgMjMpCj4gKyNkZWZpbmUgTUlfU1VTUEVORF9GTFVTSCAoMHgwYiA8PCAy MykKPiArI2RlZmluZSBNSV9MT0FEX1NDQU5fTElORVNfRVhDTCAoMHgxMyA8PCAyMykKPiArI2Rl ZmluZSBNSV9VUERBVEVfR1RUICgweDIzIDw8IDIzKQo+ICsKPiArI2RlZmluZSBCQ1NfU1dDVFJM ICAgICAweDIyMjAwCj4gKyNkZWZpbmUgQkNTX0dQUl9CQVNFICAgMHgyMjYwMAo+ICsjZGVmaW5l IEJDU19HUFIobikgICAgICgweDIyNjAwICsgKG4pICogOCkKPiArI2RlZmluZSBCQ1NfR1BSX1VE VyhuKSAoMHgyMjYwMCArIChuKSAqIDggKyA0KQo+ICsKPiArI2RlZmluZSBIQU5ETEVfU0laRSAg NDA5Ngo+ICsKPiArc3RhdGljIGludCBwYXJzZXJfdmVyc2lvbjsKPiArCj4gK3N0YXRpYyBpbnQg Y29tbWFuZF9wYXJzZXJfdmVyc2lvbihpbnQgZmQpCj4gK3sKPiArCWludCB2ZXJzaW9uID0gLTE7 Cj4gKwlkcm1faTkxNV9nZXRwYXJhbV90IGdwOwo+ICsKPiArCWdwLnBhcmFtID0gSTkxNV9QQVJB TV9DTURfUEFSU0VSX1ZFUlNJT047Cj4gKwlncC52YWx1ZSA9ICZ2ZXJzaW9uOwo+ICsKPiArCWlm IChkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VUUEFSQU0sICZncCkgPT0gMCkKPiArCQly ZXR1cm4gdmVyc2lvbjsKPiArCj4gKwlyZXR1cm4gLTE7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg IF9fZXhlY19iYXRjaF9wYXRjaGVkKGludCBmZCwgaW50IGVuZ2luZSwKPiArCQkJCSB1aW50MzJf dCBjbWRfYm8sIGNvbnN0IHVpbnQzMl90ICpjbWRzLCBpbnQgc2l6ZSwKPiArCQkJCSB1aW50MzJf dCB0YXJnZXRfYm8sIHVpbnQ2NF90IHRhcmdldF9vZmZzZXQsIHVpbnQ2NF90IHRhcmdldF9kZWx0 YSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ICsJ c3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqWzJdOwo+ICsJc3RydWN0IGRybV9p OTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJlbG9jWzFdOwo+ICsKPiArCWdlbV93cml0ZShmZCwg Y21kX2JvLCAwLCBjbWRzLCBzaXplKTsKPiArCj4gKwltZW1zZXQob2JqLCAwLCBzaXplb2Yob2Jq KSk7Cj4gKwlvYmpbMF0uaGFuZGxlID0gdGFyZ2V0X2JvOwo+ICsJb2JqWzFdLmhhbmRsZSA9IGNt ZF9ibzsKPiArCj4gKwltZW1zZXQocmVsb2MsIDAsIHNpemVvZihyZWxvYykpOwo+ICsJcmVsb2Nb MF0ub2Zmc2V0ID0gdGFyZ2V0X29mZnNldDsKPiArCXJlbG9jWzBdLnRhcmdldF9oYW5kbGUgPSB0 YXJnZXRfYm87Cj4gKwlyZWxvY1swXS5kZWx0YSA9IHRhcmdldF9kZWx0YTsKPiArCXJlbG9jWzBd LnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DT01NQU5EOwo+ICsJcmVsb2NbMF0ud3Jp dGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7Cj4gKwlyZWxvY1swXS5wcmVzdW1l ZF9vZmZzZXQgPSAtMTsKPiArCj4gKwlvYmpbMV0ucmVsb2NzX3B0ciA9IHRvX3VzZXJfcG9pbnRl cihyZWxvYyk7Cj4gKwlvYmpbMV0ucmVsb2NhdGlvbl9jb3VudCA9IDE7Cj4gKwo+ICsJbWVtc2V0 KCZleGVjYnVmLCAwLCBzaXplb2YoZXhlY2J1ZikpOwo+ICsJZXhlY2J1Zi5idWZmZXJzX3B0ciA9 IHRvX3VzZXJfcG9pbnRlcihvYmopOwo+ICsJZXhlY2J1Zi5idWZmZXJfY291bnQgPSAyOwo+ICsJ ZXhlY2J1Zi5iYXRjaF9sZW4gPSBzaXplOwo+ICsJZXhlY2J1Zi5mbGFncyA9IGVuZ2luZTsKPiAr Cj4gKwlyZXR1cm4gX19nZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBleGVjX2JhdGNoX3BhdGNoZWQoaW50IGZkLCBpbnQgZW5naW5lLAo+ICsJCQkgICAg ICAgdWludDMyX3QgY21kX2JvLCBjb25zdCB1aW50MzJfdCAqY21kcywKPiArCQkJICAgICAgIGlu dCBzaXplLCBpbnQgcGF0Y2hfb2Zmc2V0LAo+ICsJCQkgICAgICAgbG9uZyBpbnQgZXhwZWN0ZWRf dmFsdWUpCj4gK3sKPiArCWNvbnN0IHVpbnQzMl90IHRhcmdldF9ibyA9IGdlbV9jcmVhdGUoZmQs IEhBTkRMRV9TSVpFKTsKPiArCXVpbnQ2NF90IGFjdHVhbF92YWx1ZSA9IDA7Cj4gKwlsb25nIGlu dCByZXQ7Cj4gKwo+ICsJcmV0ID0gX19leGVjX2JhdGNoX3BhdGNoZWQoZmQsIGVuZ2luZSwgY21k X2JvLCBjbWRzLCBzaXplLCB0YXJnZXRfYm8sIHBhdGNoX29mZnNldCwgMCk7Cj4gKwlpZiAocmV0 KSB7Cj4gKwkJaWd0X2Fzc2VydF9sdChyZXQsIDApOwo+ICsJCWdlbV9jbG9zZShmZCwgdGFyZ2V0 X2JvKTsKPiArCQlpZ3RfYXNzZXJ0X2VxKHJldCwgZXhwZWN0ZWRfdmFsdWUpOwo+ICsJCXJldHVy bjsKPiArCX0KPiArCj4gKwlnZW1fc3luYyhmZCwgY21kX2JvKTsKPiArCj4gKwlnZW1fcmVhZChm ZCwgdGFyZ2V0X2JvLCAwLCAmYWN0dWFsX3ZhbHVlLCBzaXplb2YoYWN0dWFsX3ZhbHVlKSk7Cj4g Kwo+ICsJZ2VtX2Nsb3NlKGZkLCB0YXJnZXRfYm8pOwo+ICsKPiArCWlndF9hc3NlcnRfZXEoYWN0 dWFsX3ZhbHVlLCBleHBlY3RlZF92YWx1ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX19leGVj X2JhdGNoKGludCBmZCwgaW50IGVuZ2luZSwgdWludDMyX3QgY21kX2JvLAo+ICsJCQljb25zdCB1 aW50MzJfdCAqY21kcywgaW50IHNpemUpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhl Y2J1ZmZlcjIgZXhlY2J1ZjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9i alsxXTsKPiArCWludCByZXQ7Cj4gKwo+ICsJZ2VtX3dyaXRlKGZkLCBjbWRfYm8sIDAsIGNtZHMs IHNpemUpOwo+ICsKPiArCW1lbXNldChvYmosIDAsIHNpemVvZihvYmopKTsKPiArCW9ialswXS5o YW5kbGUgPSBjbWRfYm87Cj4gKwo+ICsJbWVtc2V0KCZleGVjYnVmLCAwLCBzaXplb2YoZXhlY2J1 ZikpOwo+ICsJZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihvYmopOwo+ICsJ ZXhlY2J1Zi5idWZmZXJfY291bnQgPSAxOwo+ICsJZXhlY2J1Zi5iYXRjaF9sZW4gPSBzaXplOwo+ ICsJZXhlY2J1Zi5mbGFncyA9IGVuZ2luZTsKPiArCj4gKwlyZXQgPSAgX19nZW1fZXhlY2J1Zihm ZCwgJmV4ZWNidWYpOwo+ICsKPiArCWlmICghcmV0KQo+ICsJCWdlbV9zeW5jKGZkLCBjbWRfYm8p Owo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gKyNpZiAwCj4gK3N0YXRpYyB2b2lkIHBy aW50X2JhdGNoKGNvbnN0IHVpbnQzMl90ICpjbWRzLCBjb25zdCB1aW50MzJfdCBzeikKPiArewo+ ICsJY29uc3QgaW50IGNvbW1hbmRzID0gc3ogLyA0Owo+ICsJaW50IGk7Cj4gKwo+ICsJaWd0X2lu Zm8oIkJhdGNoIHNpemUgJWRcbiIsIHN6KTsKPiArCWZvciAoaSA9IDA7IGkgPCBjb21tYW5kczsg aSsrKQo+ICsJCWlndF9pbmZvKCIweCUwOHg6IDB4JTA4eFxuIiwgaSwgY21kc1tpXSk7Cj4gK30K PiArI2Vsc2UKPiArI2RlZmluZSBwcmludF9iYXRjaChjbWRzLCBzaXplKQo+ICsjZW5kaWYKPiAr Cj4gKyNkZWZpbmUgZXhlY19iYXRjaChmZCwgZW5naW5lLCBibywgY21kcywgc3osIGV4cGVjdGVk KQlcCj4gKwlwcmludF9iYXRjaChjbWRzLCBzeik7IFwKPiArCWlndF9hc3NlcnRfZXEoX19leGVj X2JhdGNoKGZkLCBlbmdpbmUsIGJvLCBjbWRzLCBzeiksIGV4cGVjdGVkKQo+ICsKPiArc3RhdGlj IHZvaWQgZXhlY19zcGxpdF9iYXRjaChpbnQgZmQsIGludCBlbmdpbmUsIGNvbnN0IHVpbnQzMl90 ICpjbWRzLAo+ICsJCQkgICAgIGludCBzaXplLCBpbnQgZXhwZWN0ZWRfcmV0KQo+ICt7Cj4gKwlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmpbMV07Cj4gKwl1aW50MzJfdCBjbWRfYm87Cj4gKwljb25z dCB1aW50MzJfdCBub29wWzEwMjRdID0geyAwIH07Cj4gKwljb25zdCBpbnQgYWxsb2Nfc2l6ZSA9 IDQwOTYgKiAyOwo+ICsJY29uc3QgaW50IGFjdHVhbF9zdGFydF9vZmZzZXQgPSA0MDk2LXNpemVv Zih1aW50MzJfdCk7Cj4gKwo+ICsJLyogQWxsb2NhdGUgYW5kIGZpbGwgYSAyLXBhZ2UgYmF0Y2gg d2l0aCBub29wcyAqLwo+ICsJY21kX2JvID0gZ2VtX2NyZWF0ZShmZCwgYWxsb2Nfc2l6ZSk7Cj4g KwlnZW1fd3JpdGUoZmQsIGNtZF9ibywgMCwgbm9vcCwgc2l6ZW9mKG5vb3ApKTsKPiArCWdlbV93 cml0ZShmZCwgY21kX2JvLCA0MDk2LCBub29wLCBzaXplb2Yobm9vcCkpOwo+ICsKPiArCS8qIFdy aXRlIHRoZSBwcm92aWRlZCBjb21tYW5kcyBzdWNoIHRoYXQgdGhlIGZpcnN0IGR3b3JkCj4gKwkg KiBvZiB0aGUgY29tbWFuZCBidWZmZXIgaXMgdGhlIGxhc3QgZHdvcmQgb2YgdGhlIGZpcnN0Cj4g KwkgKiBwYWdlIChpLmUuIHRoZSBjb21tYW5kIGlzIHNwbGl0IGFjcm9zcyB0aGUgdHdvIHBhZ2Vz KS4KPiArCSAqLwo+ICsJZ2VtX3dyaXRlKGZkLCBjbWRfYm8sIGFjdHVhbF9zdGFydF9vZmZzZXQs IGNtZHMsIHNpemUpOwo+ICsKPiArCW1lbXNldChvYmosIDAsIHNpemVvZihvYmopKTsKPiArCW9i alswXS5oYW5kbGUgPSBjbWRfYm87Cj4gKwo+ICsJbWVtc2V0KCZleGVjYnVmLCAwLCBzaXplb2Yo ZXhlY2J1ZikpOwo+ICsJZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihvYmop Owo+ICsJZXhlY2J1Zi5idWZmZXJfY291bnQgPSAxOwo+ICsJLyogTkI6IFdlIHdhbnQgYmF0Y2hf c3RhcnRfb2Zmc2V0IGFuZCBiYXRjaF9sZW4gdG8gcG9pbnQgdG8gdGhlIGJsb2NrCj4gKwkgKiBv ZiB0aGUgYWN0dWFsIGNvbW1hbmRzIChpLmUuIGF0IHRoZSBsYXN0IGR3b3JkIG9mIHRoZSBmaXJz dCBwYWdlKSwKPiArCSAqIGJ1dCBoYXZlIHRvIGFkanVzdCBib3RoIHRoZSBzdGFydCBvZmZzZXQg YW5kIGxlbmd0aCB0byBtZWV0IHRoZQo+ICsJICoga2VybmVsIGRyaXZlcidzIHJlcXVpcmVtZW50 cyBvbiB0aGUgYWxpZ25tZW50IG9mIHRob3NlIGZpZWxkcy4KPiArCSAqLwo+ICsJZXhlY2J1Zi5i YXRjaF9zdGFydF9vZmZzZXQgPSBhY3R1YWxfc3RhcnRfb2Zmc2V0ICYgfjB4NzsKPiArCWV4ZWNi dWYuYmF0Y2hfbGVuID0KPiArCQlBTElHTihzaXplICsgYWN0dWFsX3N0YXJ0X29mZnNldCAtIGV4 ZWNidWYuYmF0Y2hfc3RhcnRfb2Zmc2V0LAo+ICsJCSAgICAgIDB4OCk7Cj4gKwlleGVjYnVmLmZs YWdzID0gZW5naW5lOwo+ICsKPiArCWlndF9hc3NlcnRfZXEoX19nZW1fZXhlY2J1ZihmZCwgJmV4 ZWNidWYpLCBleHBlY3RlZF9yZXQpOwo+ICsKPiArCWdlbV9zeW5jKGZkLCBjbWRfYm8pOwo+ICsJ Z2VtX2Nsb3NlKGZkLCBjbWRfYm8pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBleGVjX2JhdGNo X2NoYWluZWQoaW50IGZkLCBpbnQgZW5naW5lLAo+ICsJCQkgICAgICAgdWludDMyX3QgY21kX2Jv LCBjb25zdCB1aW50MzJfdCAqY21kcywKPiArCQkJICAgICAgIGludCBzaXplLCBpbnQgcGF0Y2hf b2Zmc2V0LAo+ICsJCQkgICAgICAgdWludDY0X3QgZXhwZWN0ZWRfdmFsdWUsCj4gKwkJCSAgICAg ICBpbnQgZXhwZWN0ZWRfcmV0dXJuKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNi dWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmpb M107Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgcmVsb2NbMV07Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgZmlyc3RfbGV2ZWxfcmVsb2M7 Cj4gKwo+ICsJY29uc3QgdWludDMyX3QgdGFyZ2V0X2JvID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7 Cj4gKwljb25zdCB1aW50MzJfdCBmaXJzdF9sZXZlbF9ibyA9IGdlbV9jcmVhdGUoZmQsIDQwOTYp Owo+ICsJdWludDY0X3QgYWN0dWFsX3ZhbHVlID0gMDsKPiArCWludCByZXQ7Cj4gKwo+ICsJY29u c3QgdWludDMyX3QgZmlyc3RfbGV2ZWxfY21kc1tdID0gewo+ICsJCU1JX0JBVENIX0JVRkZFUl9T VEFSVCB8IE1JX0JBVENIX05PTl9TRUNVUkVfSTk2NSB8IDEsCj4gKwkJMCwKPiArCQkwLAo+ICsJ CU1JX0JBVENIX0JVRkZFUl9FTkQsCj4gKwl9Owo+ICsKPiArCWdlbV93cml0ZShmZCwgZmlyc3Rf bGV2ZWxfYm8sIDAsCj4gKwkJICBmaXJzdF9sZXZlbF9jbWRzLCBzaXplb2YoZmlyc3RfbGV2ZWxf Y21kcykpOwo+ICsJZ2VtX3dyaXRlKGZkLCBjbWRfYm8sIDAsIGNtZHMsIHNpemUpOwo+ICsKPiAr CW1lbXNldChvYmosIDAsIHNpemVvZihvYmopKTsKPiArCW9ialswXS5oYW5kbGUgPSB0YXJnZXRf Ym87Cj4gKwlvYmpbMV0uaGFuZGxlID0gY21kX2JvOwo+ICsJb2JqWzJdLmhhbmRsZSA9IGZpcnN0 X2xldmVsX2JvOwo+ICsKPiArCW1lbXNldChyZWxvYywgMCwgc2l6ZW9mKHJlbG9jKSk7Cj4gKwly ZWxvY1swXS5vZmZzZXQgPSBwYXRjaF9vZmZzZXQ7Cj4gKwlyZWxvY1swXS5kZWx0YSA9IDA7Cj4g KwlyZWxvY1swXS50YXJnZXRfaGFuZGxlID0gdGFyZ2V0X2JvOwo+ICsJcmVsb2NbMF0ucmVhZF9k b21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7Cj4gKwlyZWxvY1swXS53cml0ZV9kb21h aW4gPSBJOTE1X0dFTV9ET01BSU5fQ09NTUFORDsKPiArCXJlbG9jWzBdLnByZXN1bWVkX29mZnNl dCA9IC0xOwo+ICsKPiArCW9ialsxXS5yZWxvY2F0aW9uX2NvdW50ID0gMTsKPiArCW9ialsxXS5y ZWxvY3NfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZyZWxvYyk7Cj4gKwo+ICsJbWVtc2V0KCZmaXJz dF9sZXZlbF9yZWxvYywgMCwgc2l6ZW9mKGZpcnN0X2xldmVsX3JlbG9jKSk7Cj4gKwlmaXJzdF9s ZXZlbF9yZWxvYy5vZmZzZXQgPSA0Owo+ICsJZmlyc3RfbGV2ZWxfcmVsb2MuZGVsdGEgPSAwOwo+ ICsJZmlyc3RfbGV2ZWxfcmVsb2MudGFyZ2V0X2hhbmRsZSA9IGNtZF9ibzsKPiArCWZpcnN0X2xl dmVsX3JlbG9jLnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DT01NQU5EOwo+ICsJZmly c3RfbGV2ZWxfcmVsb2Mud3JpdGVfZG9tYWluID0gMDsKPiArCW9ialsyXS5yZWxvY2F0aW9uX2Nv dW50ID0gMTsKPiArCW9ialsyXS5yZWxvY3NfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZmaXJzdF9s ZXZlbF9yZWxvYyk7Cj4gKwo+ICsJbWVtc2V0KCZleGVjYnVmLCAwLCBzaXplb2YoZXhlY2J1Zikp Owo+ICsJZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihvYmopOwo+ICsJZXhl Y2J1Zi5idWZmZXJfY291bnQgPSAzOwo+ICsJZXhlY2J1Zi5iYXRjaF9sZW4gPSBzaXplb2YoZmly c3RfbGV2ZWxfY21kcyk7Cj4gKwlleGVjYnVmLmZsYWdzID0gZW5naW5lOwo+ICsKPiArCXJldCA9 IF9fZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKTsKPiArCWlmIChleHBlY3RlZF9yZXR1cm4gJiYg cmV0ID09IGV4cGVjdGVkX3JldHVybikKPiArCQlnb3RvIG91dDsKPiArCj4gKwlnZW1fc3luYyhm ZCwgY21kX2JvKTsKPiArCj4gKwlnZW1fcmVhZChmZCx0YXJnZXRfYm8sIDAsICZhY3R1YWxfdmFs dWUsIHNpemVvZihhY3R1YWxfdmFsdWUpKTsKPiArCj4gK291dDoKPiArCWlmICghZXhwZWN0ZWRf cmV0dXJuKQo+ICsJCWlndF9hc3NlcnRfZXEoZXhwZWN0ZWRfdmFsdWUsIGFjdHVhbF92YWx1ZSk7 Cj4gKwllbHNlCj4gKwkJaWd0X2Fzc2VydF9uZXEoZXhwZWN0ZWRfdmFsdWUsIGFjdHVhbF92YWx1 ZSk7Cj4gKwo+ICsJZ2VtX2Nsb3NlKGZkLCBmaXJzdF9sZXZlbF9ibyk7Cj4gKwlnZW1fY2xvc2Uo ZmQsIHRhcmdldF9ibyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHRlc3Rfc2VjdXJlX2JhdGNo ZXMoY29uc3QgaW50IGZkKQo+ICt7Cj4gKwlpbnQgdiA9IC0xOwo+ICsJZHJtX2k5MTVfZ2V0cGFy YW1fdCBncDsKPiArCj4gKwlncC5wYXJhbSA9IEk5MTVfUEFSQU1fSEFTX1NFQ1VSRV9CQVRDSEVT Owo+ICsJZ3AudmFsdWUgPSAmdjsKPiArCj4gKwlpZ3RfYXNzZXJ0X2VxKGRybUlvY3RsKGZkLCBE Uk1fSU9DVExfSTkxNV9HRVRQQVJBTSwgJmdwKSwgMCk7Cj4gKwlpZ3RfYXNzZXJ0X2VxKHYsIDAp Owo+ICsKPiArCWlndF9hc3NlcnQoIWdlbV9lbmdpbmVfaGFzX211dGFibGVfc3VibWlzc2lvbihm ZCwgSTkxNV9FWEVDX0JMVCkpOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgY21kIHsKPiArCXVpbnQzMl90 IGNtZDsKPiArCWludCBsZW47Cj4gKwljb25zdCBjaGFyICpuYW1lOwo+ICt9Owo+ICsKPiArI2Rl ZmluZSBDTUQoQywgTCkgeyAuY21kID0gKEMpLCAubGVuID0gKEwpLCAubmFtZSA9ICNDIH0KPiAr I2RlZmluZSBDTURfTihDKSB7IC5jbWQgPSAoQyksIC5sZW4gPSAxLCAubmFtZSA9ICNDIH0KPiAr Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY21kIGFsbG93ZWRfY21kc1tdID0gewo+ICsJQ01EX04o TUlfTk9PUCksCj4gKwlDTURfTihNSV9VU0VSX0lOVEVSUlVQVCksCj4gKwlDTURfTihNSV9XQUlU X0ZPUl9FVkVOVCksCj4gKwlDTUQoTUlfRkxVU0hfRFcsIDUpLAo+ICsJQ01EX04oTUlfQVJCX0NI RUNLKSwKPiArCUNNRF9OKE1JX1JFUE9SVF9IRUFEKSwKPiArCUNNRF9OKE1JX0ZMVVNIKSwKPiAr CUNNRF9OKE1JX0FSQl9PTl9PRkYpLAo+ICsJQ01EX04oTUlfU1VTUEVORF9GTFVTSCksCj4gKwlD TUQoTUlfTE9BRF9TQ0FOX0xJTkVTX0lOQ0wsIDIpLAo+ICsJQ01EKE1JX0xPQURfU0NBTl9MSU5F U19FWENMLCAyKSwKPiArfTsKPiArCj4gK3N0YXRpYyB1aW50MzJfdCAqaW5qZWN0X2NtZCh1aW50 MzJfdCAqYmF0Y2gsIGNvbnN0IHVpbnQzMl90IGNtZCwgaW50IGxlbikKPiArewo+ICsJaW50IGkg PSAwOwo+ICsKPiArCWJhdGNoW2krK10gPSBjbWQ7Cj4gKwo+ICsJd2hpbGUgKC0tbGVuKQo+ICsJ CWJhdGNoW2krK10gPSAwOwo+ICsKPiArCXJldHVybiAmYmF0Y2hbaV07Cj4gK30KPiArCj4gK3N0 YXRpYyB1bnNpZ25lZCBsb25nIGJhdGNoX251bV9jbWRzKGNvbnN0IHVpbnQzMl90ICogY29uc3Qg YmF0Y2hfc3RhcnQsCj4gKwkJCQkgICAgY29uc3QgdWludDMyX3QgKiBjb25zdCBiYXRjaF9lbmQp Cj4gK3sKPiArCWlndF9hc3NlcnRfbHRlKCh1bnNpZ25lZCBsb25nKWJhdGNoX3N0YXJ0LCAodW5z aWduZWQgbG9uZyliYXRjaF9lbmQpOwo+ICsKPiArCXJldHVybiBiYXRjaF9lbmQgLSBiYXRjaF9z dGFydDsKPiArfQo+ICsKPiArc3RhdGljIHVuc2lnbmVkIGxvbmcgYmF0Y2hfYnl0ZXMoY29uc3Qg dWludDMyX3QgKiBjb25zdCBiYXRjaF9zdGFydCwKPiArCQkJCSBjb25zdCB1aW50MzJfdCAqIGNv bnN0IGJhdGNoX2VuZCkKPiArewo+ICsJY29uc3QgdW5zaWduZWQgbG9uZyBieXRlcyA9IGJhdGNo X251bV9jbWRzKGJhdGNoX3N0YXJ0LCBiYXRjaF9lbmQpICogNDsKPiArCj4gKwlpZ3RfYXNzZXJ0 KCEoYnl0ZXMgJiAweDcpKTsKPiArCj4gKwlyZXR1cm4gYnl0ZXM7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIHRlc3RfYWxsb3dlZF9hbGwoY29uc3QgaW50IGZkLCBjb25zdCB1aW50MzJfdCBoYW5k bGUpCj4gK3sKPiArCXVpbnQzMl90IGJhdGNoWzQwOTZdOwo+ICsJdWludDMyX3QgKmIgPSAmYmF0 Y2hbMF07Cj4gKwo+ICsJZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFsbG93ZWRfY21k cyk7IGkrKykKPiArCQliID0gaW5qZWN0X2NtZChiLCBhbGxvd2VkX2NtZHNbaV0uY21kLAo+ICsJ CQkgICAgICAgYWxsb3dlZF9jbWRzW2ldLmxlbik7Cj4gKwo+ICsJaWYgKCEoYmF0Y2hfbnVtX2Nt ZHMoYmF0Y2gsIGIpICUgMikpCj4gKwkJYiA9IGluamVjdF9jbWQoYiwgTUlfTk9PUCwgMSk7Cj4g Kwo+ICsJYiA9IGluamVjdF9jbWQoYiwgTUlfQkFUQ0hfQlVGRkVSX0VORCwgMSk7Cj4gKwo+ICsJ ZXhlY19iYXRjaChmZCwgSTkxNV9FWEVDX0JMVCwgaGFuZGxlLCBiYXRjaCwgYmF0Y2hfYnl0ZXMo YmF0Y2gsIGIpLCAwKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdGVzdF9hbGxvd2VkX3Npbmds ZShjb25zdCBpbnQgZmQsIGNvbnN0IHVpbnQzMl90IGhhbmRsZSkKPiArewo+ICsJdWludDMyX3Qg YmF0Y2hbNDA5Nl07Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWZvciAoaW50IGkgPSAwOyBpIDwgQVJS QVlfU0laRShhbGxvd2VkX2NtZHMpOyBpKyspIHsKPiArCQl1aW50MzJfdCAqYiA9ICZiYXRjaFsw XTsKPiArCj4gKwkJYiA9IGluamVjdF9jbWQoYiwgYWxsb3dlZF9jbWRzW2ldLmNtZCwKPiArCQkJ ICAgICAgIGFsbG93ZWRfY21kc1tpXS5sZW4pOwo+ICsKPiArCQlpZiAoIShiYXRjaF9udW1fY21k cyhiYXRjaCwgYikgJSAyKSkKPiArCQkJYiA9IGluamVjdF9jbWQoYiwgTUlfTk9PUCwgMSk7Cj4g Kwo+ICsJCWIgPSBpbmplY3RfY21kKGIsIE1JX0JBVENIX0JVRkZFUl9FTkQsIDEpOwo+ICsKPiAr CQlyZXQgPSBfX2V4ZWNfYmF0Y2goZmQsIEk5MTVfRVhFQ19CTFQsIGhhbmRsZSwKPiArCQkJCSAg IGJhdGNoLCBiYXRjaF9ieXRlcyhiYXRjaCwgYikpOwo+ICsKPiArCQlpZ3RfYXNzZXJ0X2VxKHJl dCwgMCk7Cj4gKwl9Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0ZXN0X2JiX3NlY3VyZShjb25z dCBpbnQgZmQsIGNvbnN0IHVpbnQzMl90IGhhbmRsZSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1 X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29i amVjdDIgb2JqWzFdOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJl bG9jWzFdOwo+ICsJaW50IHJldDsKPiArCj4gKwljb25zdCB1aW50MzJfdCBiYXRjaF9zZWN1cmVb XSA9IHsKPiArCQlNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfCAxLAo+ICsJCTEyLAo+ICsJCTAsCj4g KwkJTUlfTk9PUCwKPiArCQlNSV9OT09QLAo+ICsJCU1JX0JBVENIX0JVRkZFUl9FTkQsCj4gKwl9 Owo+ICsKPiArCWdlbV93cml0ZShmZCwgaGFuZGxlLCAwLCBiYXRjaF9zZWN1cmUsIHNpemVvZihi YXRjaF9zZWN1cmUpKTsKPiArCj4gKwltZW1zZXQob2JqLCAwLCBzaXplb2Yob2JqKSk7Cj4gKwlv YmpbMF0uaGFuZGxlID0gaGFuZGxlOwo+ICsKPiArCW1lbXNldChyZWxvYywgMCwgc2l6ZW9mKHJl bG9jKSk7Cj4gKwlyZWxvY1swXS5vZmZzZXQgPSAxICogc2l6ZW9mKHVpbnQzMl90KTsKPiArCXJl bG9jWzBdLnRhcmdldF9oYW5kbGUgPSBoYW5kbGU7Cj4gKwlyZWxvY1swXS5kZWx0YSA9IDQgKiBz aXplb2YodWludDMyX3QpOwo+ICsJcmVsb2NbMF0ucmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9N QUlOX0NPTU1BTkQ7Cj4gKwlyZWxvY1swXS53cml0ZV9kb21haW4gPSAwOwo+ICsJcmVsb2NbMF0u cHJlc3VtZWRfb2Zmc2V0ID0gLTE7Cj4gKwo+ICsJb2JqWzBdLnJlbG9jc19wdHIgPSB0b191c2Vy X3BvaW50ZXIocmVsb2MpOwo+ICsJb2JqWzBdLnJlbG9jYXRpb25fY291bnQgPSAxOwo+ICsKPiAr CW1lbXNldCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYpKTsKPiArCWV4ZWNidWYuYnVmZmVy c19wdHIgPSB0b191c2VyX3BvaW50ZXIob2JqKTsKPiArCWV4ZWNidWYuYnVmZmVyX2NvdW50ID0g MTsKPiArCWV4ZWNidWYuYmF0Y2hfbGVuID0gc2l6ZW9mKGJhdGNoX3NlY3VyZSk7Cj4gKwlleGVj YnVmLmZsYWdzID0gSTkxNV9FWEVDX0JMVDsKPiArCj4gKwlyZXQgPSBfX2dlbV9leGVjYnVmKGZk LCAmZXhlY2J1Zik7Cj4gKwo+ICsJaWd0X2Fzc2VydF9lcShyZXQsIC1FQUNDRVMpOwo+ICt9Cj4g Kwo+ICsjZGVmaW5lIEJCX1NUQVJUX1BBUkFNIDAKPiArI2RlZmluZSBCQl9TVEFSVF9PVVQgICAx Cj4gKyNkZWZpbmUgQkJfU1RBUlRfQ01EICAgMgo+ICsKPiArc3RhdGljIHZvaWQgdGVzdF9iYl9z dGFydChjb25zdCBpbnQgZmQsIGNvbnN0IHVpbnQzMl90IGhhbmRsZSwgaW50IHRlc3QpCj4gK3sK PiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiArCXN0cnVjdCBk cm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9ialsyXTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1f cmVsb2NhdGlvbl9lbnRyeSByZWxvY1szXTsKPiArCWNvbnN0IHVpbnQzMl90IHRhcmdldF9ibyA9 IGdlbV9jcmVhdGUoZmQsIDQwOTYpOwo+ICsJdWludDMyX3QgKmRzdDsKPiArCWludCByZXQ7Cj4g Kwl1bnNpZ25lZCBpbnQganVtcF9vZmY7Cj4gKwo+ICsJY29uc3QgdWludDMyX3QgYmF0Y2hbXSA9 IHsKPiArCQlNSV9OT09QLAo+ICsJCU1JX05PT1AsCj4gKwkJTUlfTk9PUCwKPiArCQlNSV9OT09Q LAo+ICsJCU1JX1NUT1JFX0RXT1JEX0lNTSwKPiArCQkwLAo+ICsJCTAsCj4gKwkJMSwKPiArCQlN SV9TVE9SRV9EV09SRF9JTU0sCj4gKwkJNCwKPiArCQkwLAo+ICsJCTIsCj4gKwkJTUlfQ09ORF9C QVRDSF9CVUZGRVJfRU5EIHwgMSwKPiArCQkwLAo+ICsJCTAsCj4gKwkJMCwKPiArCQlNSV9CQVRD SF9CVUZGRVJfU1RBUlQgfCBNSV9CQVRDSF9OT05fU0VDVVJFX0k5NjUgfCAxLAo+ICsJCTAsCj4g KwkJMCwKPiArCQlNSV9CQVRDSF9CVUZGRVJfRU5ELAo+ICsJfTsKPiArCj4gKwlpZ3RfcmVxdWly ZShnZW1fY2FuX3N0b3JlX2R3b3JkKGZkLCBJOTE1X0VYRUNfQkxUKSk7Cj4gKwo+ICsJc3dpdGNo ICh0ZXN0KSB7Cj4gKwljYXNlIEJCX1NUQVJUX1BBUkFNOgo+ICsJCWp1bXBfb2ZmID0gNSAqIHNp emVvZih1aW50MzJfdCk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEJCX1NUQVJUX0NNRDoKPiArCQlq dW1wX29mZiA9IDggKiBzaXplb2YodWludDMyX3QpOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoK PiArCQlqdW1wX29mZiA9IDB4ZjAwZDAwMDA7Cj4gKwl9Cj4gKwo+ICsJZ2VtX3dyaXRlKGZkLCBo YW5kbGUsIDAsIGJhdGNoLCBzaXplb2YoYmF0Y2gpKTsKPiArCj4gKwltZW1zZXQob2JqLCAwLCBz aXplb2Yob2JqKSk7Cj4gKwlvYmpbMF0uaGFuZGxlID0gdGFyZ2V0X2JvOwo+ICsJb2JqWzFdLmhh bmRsZSA9IGhhbmRsZTsKPiArCj4gKwltZW1zZXQocmVsb2MsIDAsIHNpemVvZihyZWxvYykpOwo+ ICsJcmVsb2NbMF0ub2Zmc2V0ID0gNSAqIHNpemVvZih1aW50MzJfdCk7Cj4gKwlyZWxvY1swXS50 YXJnZXRfaGFuZGxlID0gb2JqWzBdLmhhbmRsZTsKPiArCXJlbG9jWzBdLmRlbHRhID0gMDsKPiAr CXJlbG9jWzBdLnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DT01NQU5EOwo+ICsJcmVs b2NbMF0ud3JpdGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7Cj4gKwlyZWxvY1sw XS5wcmVzdW1lZF9vZmZzZXQgPSAtMTsKPiArCj4gKwlyZWxvY1sxXS5vZmZzZXQgPSA5ICogc2l6 ZW9mKHVpbnQzMl90KTsKPiArCXJlbG9jWzFdLnRhcmdldF9oYW5kbGUgPSBvYmpbMF0uaGFuZGxl Owo+ICsJcmVsb2NbMV0uZGVsdGEgPSAxICogc2l6ZW9mKHVpbnQzMl90KTsKPiArCXJlbG9jWzFd LnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DT01NQU5EOwo+ICsJcmVsb2NbMV0ud3Jp dGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7Cj4gKwlyZWxvY1sxXS5wcmVzdW1l ZF9vZmZzZXQgPSAtMTsKPiArCj4gKwlyZWxvY1syXS5vZmZzZXQgPSAxNyAqIHNpemVvZih1aW50 MzJfdCk7Cj4gKwlyZWxvY1syXS50YXJnZXRfaGFuZGxlID0gb2JqWzFdLmhhbmRsZTsKPiArCXJl bG9jWzJdLmRlbHRhID0ganVtcF9vZmY7Cj4gKwlyZWxvY1syXS5yZWFkX2RvbWFpbnMgPSBJOTE1 X0dFTV9ET01BSU5fQ09NTUFORDsKPiArCXJlbG9jWzJdLndyaXRlX2RvbWFpbiA9IDA7Cj4gKwly ZWxvY1syXS5wcmVzdW1lZF9vZmZzZXQgPSAtMTsKPiArCj4gKwlvYmpbMV0ucmVsb2NzX3B0ciA9 IHRvX3VzZXJfcG9pbnRlcihyZWxvYyk7Cj4gKwlvYmpbMV0ucmVsb2NhdGlvbl9jb3VudCA9IDM7 Cj4gKwo+ICsJbWVtc2V0KCZleGVjYnVmLCAwLCBzaXplb2YoZXhlY2J1ZikpOwo+ICsJZXhlY2J1 Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihvYmopOwo+ICsJZXhlY2J1Zi5idWZmZXJf Y291bnQgPSAyOwo+ICsJZXhlY2J1Zi5iYXRjaF9sZW4gPSBzaXplb2YoYmF0Y2gpOwo+ICsJZXhl Y2J1Zi5mbGFncyA9IEk5MTVfRVhFQ19CTFQ7Cj4gKwo+ICsJZHN0ID0gZ2VtX21tYXBfX2NwdShm ZCwgb2JqWzBdLmhhbmRsZSwgMCwgNDA5NiwKPiArCQkJICAgIFBST1RfUkVBRCB8IFBST1RfV1JJ VEUpOwo+ICsKPiArCWlndF9hc3NlcnRfZXEoZHN0WzBdLCAwKTsKPiArCWlndF9hc3NlcnRfZXEo ZHN0WzFdLCAwKTsKPiArCj4gKwlyZXQgPSBfX2dlbV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7Cj4g Kwo+ICsJc3dpdGNoICh0ZXN0KSB7Cj4gKwljYXNlIEJCX1NUQVJUX1BBUkFNOgo+ICsJCWlndF9h c3NlcnRfZXEocmV0LCAtRUlOVkFMKTsKPiArCQlicmVhazsKPiArCWNhc2UgQkJfU1RBUlRfQ01E Ogo+ICsJCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiArCj4gKwkJd2hpbGUgKFJFQURfT05DRShk c3RbMF0pID09IDApCj4gKwkJICAgICAgIDsKPiArCj4gKwkJd2hpbGUgKFJFQURfT05DRShkc3Rb MV0pID09IDApCj4gKwkJCTsKPiArCj4gKwkJaWd0X2Fzc2VydF9lcShkc3RbMF0sIDEpOwo+ICsJ CWlndF9hc3NlcnRfZXEoZHN0WzFdLCAyKTsKPiArCj4gKwkJaWd0X2luZm8oInZhbHVlcyBub3cg JXggJXhcbiIsIGRzdFswXSwgZHN0WzFdKTsKPiArCj4gKwkJZHN0WzBdID0gMDsKPiArCj4gKwkJ aWd0X2luZm8oInZhbHVlcyBub3cgJXggJXhcbiIsIGRzdFswXSwgZHN0WzFdKTsKPiArCj4gKwkJ Z2VtX3N5bmMoZmQsIGhhbmRsZSk7Cj4gKwo+ICsJCWlndF9pbmZvKCJ2YWx1ZXMgbm93ICV4ICV4 XG4iLCBkc3RbMF0sIGRzdFsxXSk7Cj4gKwo+ICsJCWlndF9hc3NlcnRfZXEoZHN0WzBdLCAwKTsK PiArCQlpZ3RfYXNzZXJ0X2VxKGRzdFsxXSwgMik7Cj4gKwo+ICsJCWJyZWFrOwo+ICsKPiArCWNh c2UgQkJfU1RBUlRfT1VUOgo+ICsJCWlndF9hc3NlcnRfZXEocmV0LCAtRUlOVkFMKTsKPiArCQli cmVhazsKPiArCX0KPiArCj4gKwlnZW1fc3luYyhmZCwgaGFuZGxlKTsKPiArCWdlbV9tdW5tYXAo ZHN0LCA0MDk2KTsKPiArCWdlbV9jbG9zZShmZCwgdGFyZ2V0X2JvKTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgdGVzdF9iYl9jaGFpbmVkKGNvbnN0IGludCBmZCwgY29uc3QgdWludDMyX3QgaGFu ZGxlKQo+ICt7Cj4gKwljb25zdCB1aW50MzJfdCBiYXRjaFtdID0gewo+ICsJCSgweDIwIDw8IDIz KSB8IDIsIC8qIE1JX1NUT1JFX0RBVEFfSU1NICovCj4gKwkJMCwKPiArCQkwLAo+ICsJCTB4YmFh ZGYwMGQsCj4gKwkJTUlfTk9PUCwKPiArCQlNSV9CQVRDSF9CVUZGRVJfRU5ELAo+ICsJfTsKPiAr Cj4gKwlleGVjX2JhdGNoX2NoYWluZWQoZmQsIEk5MTVfRVhFQ19SRU5ERVIsCj4gKwkJCSAgIGhh bmRsZSwKPiArCQkJICAgYmF0Y2gsIHNpemVvZihiYXRjaCksCj4gKwkJCSAgIDQsCj4gKwkJCSAg IDB4YmFhZGYwMGQsCj4gKwkJCSAgIDApOwo+ICsKPiArCWV4ZWNfYmF0Y2hfY2hhaW5lZChmZCwg STkxNV9FWEVDX0JMVCwKPiArCQkJICAgaGFuZGxlLAo+ICsJCQkgICBiYXRjaCwgc2l6ZW9mKGJh dGNoKSwKPiArCQkJICAgNCwKPiArCQkJICAgMHhiYWFkZjAwZCwKPiArCQkJICAgRVBFUk0pOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0ZXN0X2NtZF9jcm9zc2luZ19wYWdlKGNvbnN0IGludCBm ZCwgY29uc3QgdWludDMyX3QgaGFuZGxlKQo+ICt7Cj4gKwljb25zdCB1aW50MzJfdCBscmlfb2tb XSA9IHsKPiArCQlNSV9MT0FEX1JFR0lTVEVSX0lNTSwKPiArCQlCQ1NfR1BSKDApLAo+ICsJCTB4 YmFhZGYwMGQsCj4gKwkJTUlfQkFUQ0hfQlVGRkVSX0VORCwKPiArCX07Cj4gKwljb25zdCB1aW50 MzJfdCBzdG9yZV9yZWdbXSA9IHsKPiArCQlNSV9TVE9SRV9SRUdJU1RFUl9NRU0gfCAoNCAtIDIp LAo+ICsJCUJDU19HUFIoMCksCj4gKwkJMCwgLyogcmVsb2MgKi8KPiArCQkwLCAvKiByZWxvYyAq Lwo+ICsJCU1JX05PT1AsCj4gKwkJTUlfQkFUQ0hfQlVGRkVSX0VORCwKPiArCX07Cj4gKwo+ICsJ ZXhlY19zcGxpdF9iYXRjaChmZCwgSTkxNV9FWEVDX0JMVCwKPiArCQkJIGxyaV9vaywgc2l6ZW9m KGxyaV9vayksCj4gKwkJCSAwKTsKPiArCj4gKwlleGVjX2JhdGNoX3BhdGNoZWQoZmQsIEk5MTVf RVhFQ19CTFQsIGhhbmRsZSwKPiArCQkJICAgc3RvcmVfcmVnLCBzaXplb2Yoc3RvcmVfcmVnKSwK PiArCQkJICAgMiAqIHNpemVvZih1aW50MzJfdCksIC8qIHJlbG9jICovCj4gKwkJCSAgIDB4YmFh ZGYwMGQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfbGVuZ3RoKGNvbnN0 IGludCBmZCwgY29uc3QgdWludDMyX3QgaGFuZGxlKQo+ICt7Cj4gKwljb25zdCB1aW50MzJfdCBv a192YWwgPSAweGJhYWRmMDBkOwo+ICsJY29uc3QgdWludDMyX3QgYmFkX3ZhbCA9IDB4ZjAwZGJh YWQ7Cj4gKwljb25zdCB1aW50MzJfdCBub29wc1s4MTkyXSA9IHsgMCwgfTsKPiArCj4gKwljb25z dCB1aW50MzJfdCBscmlfb2tbXSA9IHsKPiArCQlNSV9MT0FEX1JFR0lTVEVSX0lNTSwKPiArCQlC Q1NfR1BSKDApLAo+ICsJCW9rX3ZhbCwKPiArCQlNSV9CQVRDSF9CVUZGRVJfRU5ELAo+ICsJfTsK PiArCj4gKwljb25zdCB1aW50MzJfdCBscmlfYmFkW10gPSB7Cj4gKwkJTUlfTE9BRF9SRUdJU1RF Ul9JTU0sCj4gKwkJQkNTX0dQUigwKSwKPiArCQliYWRfdmFsLAo+ICsJCU1JX0JBVENIX0JVRkZF Ul9FTkQsCj4gKwl9Owo+ICsKPiArCWNvbnN0IHVpbnQzMl90IHN0b3JlX3JlZ1tdID0gewo+ICsJ CU1JX1NUT1JFX1JFR0lTVEVSX01FTSB8ICg0IC0gMiksCj4gKwkJQkNTX0dQUigwKSwKPiArCQkw LCAvKiByZWxvYyAqLwo+ICsJCTAsIC8qIHJlbG9jICovCj4gKwkJTUlfTk9PUCwKPiArCQlNSV9C QVRDSF9CVUZGRVJfRU5ELAo+ICsJfTsKPiArCj4gKwlleGVjX2JhdGNoKGZkLCBJOTE1X0VYRUNf QkxULCBoYW5kbGUsCj4gKwkJICAgbHJpX29rLCBzaXplb2YobHJpX29rKSwKPiArCQkgICAwKTsK PiArCj4gKwlleGVjX2JhdGNoX3BhdGNoZWQoZmQsIEk5MTVfRVhFQ19CTFQsIGhhbmRsZSwKPiAr CQkJICAgc3RvcmVfcmVnLCBzaXplb2Yoc3RvcmVfcmVnKSwKPiArCQkJICAgMiAqIHNpemVvZih1 aW50MzJfdCksIC8qIHJlbG9jICovCj4gKwkJCSAgIG9rX3ZhbCk7Cj4gKwo+ICsJZXhlY19iYXRj aChmZCwgSTkxNV9FWEVDX0JMVCwgaGFuZGxlLAo+ICsJCSAgIGxyaV9iYWQsIDAsCj4gKwkJICAg MCk7Cj4gKwo+ICsJZXhlY19iYXRjaF9wYXRjaGVkKGZkLCBJOTE1X0VYRUNfQkxULCBoYW5kbGUs Cj4gKwkJCSAgIHN0b3JlX3JlZywgc2l6ZW9mKHN0b3JlX3JlZyksCj4gKwkJCSAgIDIgKiBzaXpl b2YodWludDMyX3QpLCAvKiByZWxvYyAqLwo+ICsJCQkgICBva192YWwpOwo+ICsKPiArCWV4ZWNf YmF0Y2goZmQsIEk5MTVfRVhFQ19CTFQsIGhhbmRsZSwKPiArCQkgICBscmlfb2ssIDQwOTYsCj4g KwkJICAgMCk7Cj4gKwo+ICsJaWd0X2Fzc2VydF9lcShfX2dlbV93cml0ZShmZCwgaGFuZGxlLCAw LCBub29wcywgNDA5NyksIC1FSU5WQUwpOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgcmVnIHsKPiArCXVp bnQzMl90IGFkZHI7Cj4gKwl1aW50MzJfdCBtYXNrOwo+ICsJYm9vbCBtYXNrZWRfd3JpdGU7Cj4g Kwlib29sIHByaXZpbGVnZWQ7Cj4gK307Cj4gKwo+ICsjZGVmaW5lIFJFR19NKEFERFIsIE1BU0ss IFdNLCBQKSB7IChBRERSKSwgKE1BU0spLCAoV00pLCAoUCkgfQo+ICsjZGVmaW5lIFJFRyhBRERS KSBSRUdfTShBRERSLCAweGZmZmZmZmZmLCBmYWxzZSwgZmFsc2UpCj4gKyNkZWZpbmUgUkVHX1Ao QUREUikgUkVHX00oQUREUiwgMHhmZmZmZmZmZiwgZmFsc2UsIHRydWUpCj4gKwo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IHJlZyByZWdzW10gPSB7Cj4gKwlSRUdfTShCQ1NfU1dDVFJMLCAweDMsIHRy dWUsIGZhbHNlKSwKPiArCVJFRyhCQ1NfR1BSKDApKSwKPiArCVJFRyhCQ1NfR1BSX1VEVygwKSks Cj4gKwlSRUcoQkNTX0dQUigxKSksCj4gKwlSRUcoQkNTX0dQUl9VRFcoMSkpLAo+ICsJUkVHKEJD U19HUFIoMikpLAo+ICsJUkVHKEJDU19HUFJfVURXKDIpKSwKPiArCVJFRyhCQ1NfR1BSKDMpKSwK PiArCVJFRyhCQ1NfR1BSX1VEVygzKSksCj4gKwlSRUcoQkNTX0dQUig0KSksCj4gKwlSRUcoQkNT X0dQUl9VRFcoNCkpLAo+ICsJUkVHKEJDU19HUFIoNSkpLAo+ICsJUkVHKEJDU19HUFJfVURXKDUp KSwKPiArCVJFRyhCQ1NfR1BSKDYpKSwKPiArCVJFRyhCQ1NfR1BSX1VEVyg2KSksCj4gKwlSRUco QkNTX0dQUig3KSksCj4gKwlSRUcoQkNTX0dQUl9VRFcoNykpLAo+ICsJUkVHKEJDU19HUFIoOCkp LAo+ICsJUkVHKEJDU19HUFJfVURXKDgpKSwKPiArCVJFRyhCQ1NfR1BSKDkpKSwKPiArCVJFRyhC Q1NfR1BSX1VEVyg5KSksCj4gKwlSRUcoQkNTX0dQUigxMCkpLAo+ICsJUkVHKEJDU19HUFJfVURX KDEwKSksCj4gKwlSRUcoQkNTX0dQUigxMSkpLAo+ICsJUkVHKEJDU19HUFJfVURXKDExKSksCj4g KwlSRUcoQkNTX0dQUigxMikpLAo+ICsJUkVHKEJDU19HUFJfVURXKDEyKSksCj4gKwlSRUcoQkNT X0dQUigxMykpLAo+ICsJUkVHKEJDU19HUFJfVURXKDEzKSksCj4gKwlSRUcoQkNTX0dQUigxNCkp LAo+ICsJUkVHKEJDU19HUFJfVURXKDE0KSksCj4gKwlSRUcoQkNTX0dQUigxNSkpLAo+ICsJUkVH KEJDU19HUFJfVURXKDE1KSksCj4gKwo+ICsJUkVHX1AoMCksCj4gKwlSRUdfUCgyMDAwMDApLAo+ ICsKPiArCVJFR19QKEJDU19TV0NUUkwgLSAxKSwKPiArCVJFR19QKEJDU19TV0NUUkwgLSAyKSwK PiArCVJFR19QKEJDU19TV0NUUkwgLSAzKSwKPiArCVJFR19QKEJDU19TV0NUUkwgLSA0KSwKPiAr CVJFR19QKEJDU19TV0NUUkwgKyA0KSwKPiArCj4gKwlSRUdfUChCQ1NfR1BSKDApIC0gMSksCj4g KwlSRUdfUChCQ1NfR1BSKDApIC0gMiksCj4gKwlSRUdfUChCQ1NfR1BSKDApIC0gMyksCj4gKwlS RUdfUChCQ1NfR1BSKDApIC0gNCksCj4gKwlSRUdfUChCQ1NfR1BSX1VEVygxNSkgKyA0KSwKPiAr fTsKPiArCj4gK3N0YXRpYyB2b2lkIHRlc3RfcmVnaXN0ZXIoY29uc3QgaW50IGZkLCBjb25zdCB1 aW50MzJfdCBoYW5kbGUsCj4gKwkJCSAgY29uc3Qgc3RydWN0IHJlZyAqcikKPiArewo+ICsJY29u c3QgdWludDMyX3QgbHJpX3plcm9bXSA9IHsKPiArCQlNSV9MT0FEX1JFR0lTVEVSX0lNTSwKPiAr CQlyLT5hZGRyLAo+ICsJCXItPm1hc2tlZF93cml0ZSA/IDB4ZmZmZjAwMDAgOiAwLAo+ICsJCU1J X0JBVENIX0JVRkZFUl9FTkQsCj4gKwl9Owo+ICsKPiArCWNvbnN0IHVpbnQzMl90IGxyaV9tYXNr W10gPSB7Cj4gKwkJTUlfTE9BRF9SRUdJU1RFUl9JTU0sCj4gKwkJci0+YWRkciwKPiArCQlyLT5t YXNrZWRfd3JpdGUgPyAoci0+bWFzayA8PCAxNikgfCByLT5tYXNrIDogci0+bWFzaywKPiArCQlN SV9CQVRDSF9CVUZGRVJfRU5ELAo+ICsJfTsKPiArCj4gKwljb25zdCB1aW50MzJfdCBzdG9yZV9y ZWdbXSA9IHsKPiArCQlNSV9TVE9SRV9SRUdJU1RFUl9NRU0gfCAoNCAtIDIpLAo+ICsJCXItPmFk ZHIsCj4gKwkJMCwgLyogcmVsb2MgKi8KPiArCQkwLCAvKiByZWxvYyAqLwo+ICsJCU1JX05PT1As Cj4gKwkJTUlfQkFUQ0hfQlVGRkVSX0VORCwKPiArCX07Cj4gKwo+ICsJZXhlY19iYXRjaChmZCwg STkxNV9FWEVDX0JMVCwgaGFuZGxlLAo+ICsJCSAgIGxyaV9tYXNrLCBzaXplb2YobHJpX21hc2sp LAo+ICsJCSAgIHItPnByaXZpbGVnZWQgPyAtRUFDQ0VTIDogMCk7Cj4gKwo+ICsJZXhlY19iYXRj aF9wYXRjaGVkKGZkLCBJOTE1X0VYRUNfQkxULCBoYW5kbGUsCj4gKwkJCSAgIHN0b3JlX3JlZywg c2l6ZW9mKHN0b3JlX3JlZyksCj4gKwkJCSAgIDIgKiBzaXplb2YodWludDMyX3QpLCAvKiByZWxv YyAqLwo+ICsJCQkgICByLT5wcml2aWxlZ2VkID8gLUVBQ0NFUyA6IHItPm1hc2spOwo+ICsKPiAr CWV4ZWNfYmF0Y2goZmQsIEk5MTVfRVhFQ19CTFQsIGhhbmRsZSwKPiArCQkgICBscmlfemVybywg c2l6ZW9mKGxyaV96ZXJvKSwKPiArCQkgICByLT5wcml2aWxlZ2VkID8gLUVBQ0NFUyA6IDApOwo+ ICsKPiArCWV4ZWNfYmF0Y2hfcGF0Y2hlZChmZCwgSTkxNV9FWEVDX0JMVCwgaGFuZGxlLAo+ICsJ CQkgICBzdG9yZV9yZWcsIHNpemVvZihzdG9yZV9yZWcpLAo+ICsJCQkgICAyICogc2l6ZW9mKHVp bnQzMl90KSwgLyogcmVsb2MgKi8KPiArCQkJICAgci0+cHJpdmlsZWdlZCA/IC1FQUNDRVMgOiAw KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdGVzdF92YWxpZF9yZWdpc3RlcnMoY29uc3QgaW50 IGZkLCBjb25zdCB1aW50MzJfdCBoYW5kbGUpCj4gK3sKPiArCWludCBpOwo+ICsKPiArCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZ3MpOyBpKyspCj4gKwkJdGVzdF9yZWdpc3RlcihmZCwg aGFuZGxlLCAmcmVnc1tpXSk7Cj4gK30KPiArCj4gK3N0YXRpYyBsb25nIGludCByZWFkX3JlZyhj b25zdCBpbnQgZmQsIGNvbnN0IHVpbnQzMl90IGhhbmRsZSwKPiArCQkJIGNvbnN0IHVpbnQzMl90 IGFkZHIpCj4gK3sKPiArCWNvbnN0IHVpbnQzMl90IHN0b3JlX3JlZ1tdID0gewo+ICsJCU1JX1NU T1JFX1JFR0lTVEVSX01FTSB8ICg0IC0gMiksCj4gKwkJYWRkciwKPiArCQkwLCAvKiByZWxvYyAq Lwo+ICsJCTAsIC8qIHJlbG9jICovCj4gKwkJTUlfTk9PUCwKPiArCQlNSV9CQVRDSF9CVUZGRVJf RU5ELAo+ICsJfTsKPiArCXVpbnQzMl90IHRhcmdldF9ibzsKPiArCXVpbnQzMl90IHZhbHVlOwo+ ICsJbG9uZyBpbnQgcmV0Owo+ICsKPiArCXRhcmdldF9ibyA9IGdlbV9jcmVhdGUoZmQsIEhBTkRM RV9TSVpFKTsKPiArCj4gKwlyZXQgPSBfX2V4ZWNfYmF0Y2hfcGF0Y2hlZChmZCwgSTkxNV9FWEVD X0JMVCwgaGFuZGxlLAo+ICsJCQkJICAgc3RvcmVfcmVnLCBzaXplb2Yoc3RvcmVfcmVnKSwKPiAr CQkJCSAgIHRhcmdldF9ibywgMiAqIHNpemVvZih1aW50MzJfdCksIDApOwo+ICsKPiArCWlmIChy ZXQpIHsKPiArCQlpZ3RfYXNzZXJ0X2x0KHJldCwgMCk7Cj4gKwkJZ2VtX2Nsb3NlKGZkLCB0YXJn ZXRfYm8pOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJZ2VtX3N5bmMoZmQsIGhhbmRs ZSk7Cj4gKwo+ICsJZ2VtX3JlYWQoZmQsIHRhcmdldF9ibywgMCwgJnZhbHVlLCBzaXplb2YodmFs dWUpKTsKPiArCj4gKwlnZW1fY2xvc2UoZmQsIHRhcmdldF9ibyk7Cj4gKwo+ICsJcmV0dXJuIHZh bHVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHdyaXRlX3JlZyhjb25zdCBpbnQgZmQsIGNvbnN0 IHVpbnQzMl90IGhhbmRsZSwKPiArCQkgICAgIGNvbnN0IHVpbnQzMl90IGFkZHIsIGNvbnN0IHVp bnQzMl90IHZhbCkKPiArewo+ICsJY29uc3QgdWludDMyX3QgbHJpW10gPSB7Cj4gKwkJTUlfTE9B RF9SRUdJU1RFUl9JTU0sCj4gKwkJYWRkciwKPiArCQl2YWwsCj4gKwkJTUlfQkFUQ0hfQlVGRkVS X0VORCwKPiArCX07Cj4gKwo+ICsJcmV0dXJuIF9fZXhlY19iYXRjaChmZCwgSTkxNV9FWEVDX0JM VCwgaGFuZGxlLAo+ICsJCQkgICAgbHJpLCBzaXplb2YobHJpKSk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIHRlc3RfdW5hbGlnbmVkX2FjY2Vzcyhjb25zdCBpbnQgZmQsIGNvbnN0IHVpbnQzMl90 IGhhbmRsZSkKPiArewo+ICsJY29uc3QgdWludDMyX3QgYWRkciA9IEJDU19HUFIoNCk7Cj4gKwlj b25zdCB1aW50MzJfdCB2YWwgPSAweGJhYWRmZWFkOwo+ICsJY29uc3QgdWludDMyX3QgcHJlID0g MHgxMjM0NTY3ODsKPiArCWNvbnN0IHVpbnQzMl90IHBvc3QgPSAweDg3NjU0MzIxOwo+ICsKPiAr CWlndF9hc3NlcnRfZXEod3JpdGVfcmVnKGZkLCBoYW5kbGUsIGFkZHIgLSA0LCBwcmUpLCAgMCk7 Cj4gKwlpZ3RfYXNzZXJ0X2VxKHdyaXRlX3JlZyhmZCwgaGFuZGxlLCBhZGRyLCB2YWwpLCAgICAg IDApOwo+ICsJaWd0X2Fzc2VydF9lcSh3cml0ZV9yZWcoZmQsIGhhbmRsZSwgYWRkciArIDQsIHBv c3QpLCAwKTsKPiArCj4gKwlpZ3RfYXNzZXJ0X2VxKHJlYWRfcmVnKGZkLCBoYW5kbGUsIGFkZHIg LSA0KSwgcHJlKTsKPiArCWlndF9hc3NlcnRfZXEocmVhZF9yZWcoZmQsIGhhbmRsZSwgYWRkciks ICAgICB2YWwpOwo+ICsJaWd0X2Fzc2VydF9lcShyZWFkX3JlZyhmZCwgaGFuZGxlLCBhZGRyICsg NCksIHBvc3QpOwo+ICsKPiArCWZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Cj4gKwkJaWd0 X2Fzc2VydF9lcSh3cml0ZV9yZWcoZmQsIGhhbmRsZSwgYWRkciArIGksIHZhbCksIDApOwo+ICsJ CWlndF9hc3NlcnRfZXEocmVhZF9yZWcoZmQsIGhhbmRsZSwgYWRkciksIHZhbCk7Cj4gKwo+ICsJ CWlndF9hc3NlcnRfZXEocmVhZF9yZWcoZmQsIGhhbmRsZSwgYWRkciArIDEpLCB2YWwpOwo+ICsJ CWlndF9hc3NlcnRfZXEocmVhZF9yZWcoZmQsIGhhbmRsZSwgYWRkciArIDIpLCB2YWwpOwo+ICsJ CWlndF9hc3NlcnRfZXEocmVhZF9yZWcoZmQsIGhhbmRsZSwgYWRkciArIDMpLCB2YWwpOwo+ICsJ CWlndF9hc3NlcnRfZXEocmVhZF9yZWcoZmQsIGhhbmRsZSwgYWRkciArIDQpLCBwb3N0KTsKPiAr CQlpZ3RfYXNzZXJ0X2VxKHJlYWRfcmVnKGZkLCBoYW5kbGUsIGFkZHIgLSAzKSwgcHJlKTsKPiAr CQlpZ3RfYXNzZXJ0X2VxKHJlYWRfcmVnKGZkLCBoYW5kbGUsIGFkZHIgLSAyKSwgcHJlKTsKPiAr CQlpZ3RfYXNzZXJ0X2VxKHJlYWRfcmVnKGZkLCBoYW5kbGUsIGFkZHIgLSAxKSwgcHJlKTsKPiAr CX0KPiArfQo+ICsKPiAraWd0X21haW4KPiArewo+ICsJdWludDMyX3QgaGFuZGxlOwo+ICsJaW50 IGZkOwo+ICsKPiArCWlndF9maXh0dXJlIHsKPiArCQlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklW RVJfSU5URUwpOwo+ICsJCWlndF9yZXF1aXJlX2dlbShmZCk7Cj4gKwkJZ2VtX3JlcXVpcmVfYmxp dHRlcihmZCk7Cj4gKwo+ICsJCXBhcnNlcl92ZXJzaW9uID0gY29tbWFuZF9wYXJzZXJfdmVyc2lv bihmZCk7Cj4gKwkJLyogaWd0X3JlcXVpcmUocGFyc2VyX3ZlcnNpb24gPT0gMTApOyAqLwo+ICsK PiArCQlpZ3RfcmVxdWlyZShnZW1fdXNlc19wcGd0dChmZCkpOwo+ICsJCWlndF9yZXF1aXJlKGdl bV9oYXNfYmx0KGZkKSk7Cj4gKwkJaWd0X3JlcXVpcmUoaW50ZWxfZ2VuKGludGVsX2dldF9kcm1f ZGV2aWQoZmQpKSA9PSA5KTsKPiArCj4gKwkJaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgSEFORExF X1NJWkUpOwo+ICsKPiArCQlpZ3RfZm9ya19oYW5nX2RldGVjdG9yKGZkKTsKPiArCX0KPiArCj4g KwlpZ3Rfc3VidGVzdCgic2VjdXJlLWJhdGNoZXMiKQo+ICsJCXRlc3Rfc2VjdXJlX2JhdGNoZXMo ZmQpOwo+ICsKPiArCWlndF9zdWJ0ZXN0KCJhbGxvd2VkLWFsbCIpCj4gKwkJdGVzdF9hbGxvd2Vk X2FsbChmZCwgaGFuZGxlKTsKPiArCj4gKwlpZ3Rfc3VidGVzdCgiYWxsb3dlZC1zaW5nbGUiKQo+ ICsJCXRlc3RfYWxsb3dlZF9zaW5nbGUoZmQsIGhhbmRsZSk7Cj4gKwo+ICsJaWd0X3N1YnRlc3Qo ImJiLXN0YXJ0LXBhcmFtIikKPiArCQl0ZXN0X2JiX3N0YXJ0KGZkLCBoYW5kbGUsIEJCX1NUQVJU X1BBUkFNKTsKPiArCj4gKwlpZ3Rfc3VidGVzdCgiYmItc3RhcnQtb3V0IikKPiArCQl0ZXN0X2Ji X3N0YXJ0KGZkLCBoYW5kbGUsIEJCX1NUQVJUX09VVCk7Cj4gKwo+ICsJaWd0X3N1YnRlc3QoImJi LXNlY3VyZSIpCj4gKwkJdGVzdF9iYl9zZWN1cmUoZmQsIGhhbmRsZSk7Cj4gKwo+ICsJaWd0X3N1 YnRlc3QoImJiLWNoYWluZWQiKQo+ICsJCXRlc3RfYmJfY2hhaW5lZChmZCwgaGFuZGxlKTsKPiAr Cj4gKwlpZ3Rfc3VidGVzdCgiY21kLWNyb3NzaW5nLXBhZ2UiKQo+ICsJCXRlc3RfY21kX2Nyb3Nz aW5nX3BhZ2UoZmQsIGhhbmRsZSk7Cj4gKwo+ICsJaWd0X3N1YnRlc3QoImJhdGNoLXdpdGhvdXQt ZW5kIikgewo+ICsJCWNvbnN0IHVpbnQzMl90IG5vb3BbMTAyNF0gPSB7IDAgfTsKPiArCj4gKwkJ ZXhlY19iYXRjaChmZCwgSTkxNV9FWEVDX0JMVCwgaGFuZGxlLAo+ICsJCQkgICBub29wLCBzaXpl b2Yobm9vcCksCj4gKwkJCSAgIC1FSU5WQUwpOwo+ICsJfQo+ICsKPiArCWlndF9zdWJ0ZXN0KCJi YXRjaC16ZXJvLWxlbmd0aCIpIHsKPiArCQljb25zdCB1aW50MzJfdCBub29wW10gPSB7IDAsIE1J X0JBVENIX0JVRkZFUl9FTkQgfTsKPiArCj4gKwkJZXhlY19iYXRjaChmZCwgSTkxNV9FWEVDX0JM VCwgaGFuZGxlLAo+ICsJCQkgICBub29wLCAwLAo+ICsJCQkgICAtRUlOVkFMKTsKPiArCX0KPiAr Cj4gKwlpZ3Rfc3VidGVzdCgiYmF0Y2gtaW52YWxpZC1sZW5ndGgiKQo+ICsJCXRlc3RfaW52YWxp ZF9sZW5ndGgoZmQsIGhhbmRsZSk7Cj4gKwo+ICsJaWd0X3N1YnRlc3QoImJhc2ljLXJlamVjdGVk Iikgewo+ICsJCWNvbnN0IHVpbnQzMl90IGludmFsaWRfY21kW10gPSB7Cj4gKwkJCUlOU1RSX0lO VkFMSURfQ0xJRU5UIDw8IElOU1RSX0NMSUVOVF9TSElGVCwKPiArCQkJTUlfQkFUQ0hfQlVGRkVS X0VORCwKPiArCQl9Owo+ICsJCWNvbnN0IHVpbnQzMl90IGludmFsaWRfc2V0X2NvbnRleHRbXSA9 IHsKPiArCQkJTUlfU0VUX0NPTlRFWFQgfCAzMiwgLyogaW52YWxpZCBsZW5ndGggKi8KPiArCQkJ TUlfQkFUQ0hfQlVGRkVSX0VORCwKPiArCQl9Owo+ICsKPiArCQlleGVjX2JhdGNoKGZkLCBJOTE1 X0VYRUNfQkxULCBoYW5kbGUsCj4gKwkJCSAgIGludmFsaWRfY21kLCBzaXplb2YoaW52YWxpZF9j bWQpLAo+ICsJCQkgICAtRUlOVkFMKTsKPiArCj4gKwkJZXhlY19iYXRjaChmZCwgSTkxNV9FWEVD X0JMVCwgaGFuZGxlLAo+ICsJCQkgICBpbnZhbGlkX3NldF9jb250ZXh0LCBzaXplb2YoaW52YWxp ZF9zZXRfY29udGV4dCksCj4gKwkJCSAgIC1FSU5WQUwpOwo+ICsJfQo+ICsKPiArCWlndF9zdWJ0 ZXN0KCJ2YWxpZC1yZWdpc3RlcnMiKQo+ICsJCXRlc3RfdmFsaWRfcmVnaXN0ZXJzKGZkLCBoYW5k bGUpOwo+ICsKPiArCWlndF9zdWJ0ZXN0KCJ1bmFsaWduZWQtYWNjZXNzIikKPiArCQl0ZXN0X3Vu YWxpZ25lZF9hY2Nlc3MoZmQsIGhhbmRsZSk7Cj4gKwo+ICsJaWd0X3N1YnRlc3RfZ3JvdXAgewo+ ICsJCWlndF9oYW5nX3QgaGFuZzsKPiArCj4gKwkJaWd0X2ZpeHR1cmUgaWd0X2FsbG93X2hhbmco ZmQsIDAsIDApOwo+ICsKPiArCQlpZ3Rfc3VidGVzdCgiYmItc3RhcnQtY21kIikKPiArCQkJdGVz dF9iYl9zdGFydChmZCwgaGFuZGxlLCBCQl9TVEFSVF9DTUQpOwo+ICsKPiArCQlpZ3RfZml4dHVy ZSBpZ3RfZGlzYWxsb3dfaGFuZyhmZCwgaGFuZyk7Cj4gKwl9Cj4gKwo+ICsJaWd0X2ZpeHR1cmUg ewo+ICsJCWlndF9zdG9wX2hhbmdfZGV0ZWN0b3IoKTsKPiArCQlnZW1fY2xvc2UoZmQsIGhhbmRs ZSk7Cj4gKwo+ICsJCWNsb3NlKGZkKTsKPiArCX0KPiArfQo+IGRpZmYgLS1naXQgYS90ZXN0cy9p bnRlbC1jaS9mYXN0LWZlZWRiYWNrLnRlc3RsaXN0IGIvdGVzdHMvaW50ZWwtY2kvZmFzdC1mZWVk YmFjay50ZXN0bGlzdAo+IGluZGV4IDlkZDI3YjQyLi5hM2M2NmI0MiAxMDA2NDQKPiAtLS0gYS90 ZXN0cy9pbnRlbC1jaS9mYXN0LWZlZWRiYWNrLnRlc3RsaXN0Cj4gKysrIGIvdGVzdHMvaW50ZWwt Y2kvZmFzdC1mZWVkYmFjay50ZXN0bGlzdAo+IEBAIC0yMDMsMyArMjAzLDQgQEAgaWd0QGk5MTVf bW9kdWxlX2xvYWRAcmVsb2FkCj4gIGlndEBpOTE1X21vZHVsZV9sb2FkQHJlbG9hZC1uby1kaXNw bGF5Cj4gIGlndEBpOTE1X21vZHVsZV9sb2FkQHJlbG9hZC13aXRoLWZhdWx0LWluamVjdGlvbgo+ ICBpZ3RAaTkxNV9wbV9ycG1AbW9kdWxlLXJlbG9hZAo+ICtpZ3RAZ2VtX2JsdF9wYXJzZUBiYi1z dGFydCAjZXhwZWN0ZWQgaGFuZyBzbyBsYXN0Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1 aWxkIGIvdGVzdHMvbWVzb24uYnVpbGQKPiBpbmRleCA5OGYyZGI1NS4uNDM4OTliOTUgMTAwNjQ0 Cj4gLS0tIGEvdGVzdHMvbWVzb24uYnVpbGQKPiArKysgYi90ZXN0cy9tZXNvbi5idWlsZAo+IEBA IC0xNDgsNiArMTQ4LDcgQEAgaTkxNV9wcm9ncyA9IFsKPiAgCSdnZW1fZXhlY19wYXJhbGxlbCcs Cj4gIAknZ2VtX2V4ZWNfcGFyYW1zJywKPiAgCSdnZW1fZXhlY19wYXJzZScsCj4gKwknZ2VtX2Js dF9wYXJzZScsCj4gIAknZ2VtX2V4ZWNfcmVsb2MnLAo+ICAJJ2dlbV9leGVjX3JldXNlJywKPiAg CSdnZW1fZXhlY19zY2hlZHVsZScsCj4gLS0gCj4gMi4xNy4xCj4gCj4gX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBpZ3QtZGV2IG1haWxpbmcgbGlzdAo+ IGlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2CgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2Fy ZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5n IGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2