From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Mika Kuoppala Date: Wed, 13 Nov 2019 17:49:11 +0200 Message-Id: <20191113154913.8787-5-mika.kuoppala@linux.intel.com> In-Reply-To: <20191113154913.8787-1-mika.kuoppala@linux.intel.com> References: <20191113154913.8787-1-mika.kuoppala@linux.intel.com> MIME-Version: 1.0 Subject: [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: intel-gfx@lists.freedesktop.org Cc: igt-dev@lists.freedesktop.org List-ID: RnJvbTogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBpbnRlbC5jb20+CgpGb3IgdGVzdGlu ZyBibGl0dGVyIGVuZ2luZSBjb21tYW5kIHBhcnNlciBvbiBnZW45LgoKdjI6IGJhZCBqdW1wIG9m ZnNldAp2MzogcmViYXNlCnY0OiBpbXByb3ZlIGJiIHN0YXJ0IGFuZCBzdWJjYXNlIGl0CnY1OiBm aXggcHJlc3VtZWQgb2Zmc2V0cyAoSm9uKQoKU2lnbmVkLW9mZi1ieTogTWlrYSBLdW9wcGFsYSA8 bWlrYS5rdW9wcGFsYUBsaW51eC5pbnRlbC5jb20+Ci0tLQogdGVzdHMvTWFrZWZpbGUuc291cmNl cyAgICAgICAgICAgICAgICB8ICAgMyArCiB0ZXN0cy9pOTE1L2dlbV9ibHRfcGFyc2UuYyAgICAg ICAgICAgIHwgOTk3ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy9pbnRlbC1jaS9m YXN0LWZlZWRiYWNrLnRlc3RsaXN0IHwgICAxICsKIHRlc3RzL21lc29uLmJ1aWxkICAgICAgICAg ICAgICAgICAgICAgfCAgIDEgKwogNCBmaWxlcyBjaGFuZ2VkLCAxMDAyIGluc2VydGlvbnMoKykK IGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9pOTE1L2dlbV9ibHRfcGFyc2UuYwoKZGlmZiAtLWdp dCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCmluZGV4 IGFiZjFlMmZjLi43NWM3OWVkYiAxMDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcwor KysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCkBAIC0yNDQsNiArMjQ0LDkgQEAgZ2VtX2V4ZWNf cGFyYW1zX1NPVVJDRVMgPSBpOTE1L2dlbV9leGVjX3BhcmFtcy5jCiBURVNUU19wcm9ncyArPSBn ZW1fZXhlY19wYXJzZQogZ2VtX2V4ZWNfcGFyc2VfU09VUkNFUyA9IGk5MTUvZ2VtX2V4ZWNfcGFy c2UuYwogCitURVNUU19wcm9ncyArPSBnZW1fYmx0X3BhcnNlCitnZW1fYmx0X3BhcnNlX1NPVVJD RVMgPSBpOTE1L2dlbV9ibHRfcGFyc2UuYworCiBURVNUU19wcm9ncyArPSBnZW1fZXhlY19yZWxv YwogZ2VtX2V4ZWNfcmVsb2NfU09VUkNFUyA9IGk5MTUvZ2VtX2V4ZWNfcmVsb2MuYwogCmRpZmYg LS1naXQgYS90ZXN0cy9pOTE1L2dlbV9ibHRfcGFyc2UuYyBiL3Rlc3RzL2k5MTUvZ2VtX2JsdF9w YXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi42MDdhZmJhOQotLS0g L2Rldi9udWxsCisrKyBiL3Rlc3RzL2k5MTUvZ2VtX2JsdF9wYXJzZS5jCkBAIC0wLDAgKzEsOTk3 IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoK KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRl ICJpZ3QuaCIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNs dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlIDxkcm0uaD4KKwor I2lmbmRlZiBJOTE1X1BBUkFNX0NNRF9QQVJTRVJfVkVSU0lPTgorI2RlZmluZSBJOTE1X1BBUkFN X0NNRF9QQVJTRVJfVkVSU0lPTiAgICAgICAyOAorI2VuZGlmCisKKyNpZm5kZWYgSTkxNV9QQVJB TV9IQVNfU0VDVVJFX0JBVENIRVMKKyNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfU0VDVVJFX0JBVENI RVMgICAgICAgMjMKKyNlbmRpZgorCisvKiBUbyBoZWxwIGNyYWZ0IGNvbW1hbmRzIGtub3duIHRv IGJlIGludmFsaWQgYWNyb3NzIGFsbCBlbmdpbmVzICovCisjZGVmaW5lIElOU1RSX0NMSUVOVF9T SElGVAkyOQorI2RlZmluZSAgIElOU1RSX0lOVkFMSURfQ0xJRU5UICAweDcKKworI2RlZmluZSBN SV9MT0FEX1JFR0lTVEVSX1JFRyAoMHgyYSA8PCAyMykKKyNkZWZpbmUgTUlfU1RPUkVfUkVHSVNU RVJfTUVNICgweDI0IDw8IDIzKQorI2RlZmluZSBNSV9BUkJfT05fT0ZGICgweDggPDwgMjMpCisj ZGVmaW5lIE1JX1VTRVJfSU5URVJSVVBUICgweDAyIDw8IDIzKQorI2RlZmluZSBNSV9GTFVTSF9E VyAoMHgyNiA8PCAyMykKKyNkZWZpbmUgTUlfQVJCX0NIRUNLICgweDA1IDw8IDIzKQorI2RlZmlu ZSBNSV9SRVBPUlRfSEVBRCAoMHgwNyA8PCAyMykKKyNkZWZpbmUgTUlfU1VTUEVORF9GTFVTSCAo MHgwYiA8PCAyMykKKyNkZWZpbmUgTUlfTE9BRF9TQ0FOX0xJTkVTX0VYQ0wgKDB4MTMgPDwgMjMp CisjZGVmaW5lIE1JX1VQREFURV9HVFQgKDB4MjMgPDwgMjMpCisKKyNkZWZpbmUgQkNTX1NXQ1RS TCAgICAgMHgyMjIwMAorI2RlZmluZSBCQ1NfR1BSX0JBU0UgICAweDIyNjAwCisjZGVmaW5lIEJD U19HUFIobikgICAgICgweDIyNjAwICsgKG4pICogOCkKKyNkZWZpbmUgQkNTX0dQUl9VRFcobikg KDB4MjI2MDAgKyAobikgKiA4ICsgNCkKKworI2RlZmluZSBIQU5ETEVfU0laRSAgNDA5NgorCitz dGF0aWMgaW50IHBhcnNlcl92ZXJzaW9uOworCitzdGF0aWMgaW50IGNvbW1hbmRfcGFyc2VyX3Zl cnNpb24oaW50IGZkKQoreworCWludCB2ZXJzaW9uID0gLTE7CisJZHJtX2k5MTVfZ2V0cGFyYW1f dCBncDsKKworCWdwLnBhcmFtID0gSTkxNV9QQVJBTV9DTURfUEFSU0VSX1ZFUlNJT047CisJZ3Au dmFsdWUgPSAmdmVyc2lvbjsKKworCWlmIChkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VU UEFSQU0sICZncCkgPT0gMCkKKwkJcmV0dXJuIHZlcnNpb247CisKKwlyZXR1cm4gLTE7Cit9CisK K3N0YXRpYyBpbnQgIF9fZXhlY19iYXRjaF9wYXRjaGVkKGludCBmZCwgaW50IGVuZ2luZSwKKwkJ CQkgdWludDMyX3QgY21kX2JvLCBjb25zdCB1aW50MzJfdCAqY21kcywgaW50IHNpemUsCisJCQkJ IHVpbnQzMl90IHRhcmdldF9ibywgdWludDY0X3QgdGFyZ2V0X29mZnNldCwgdWludDY0X3QgdGFy Z2V0X2RlbHRhKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsK KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmpbMl07CisJc3RydWN0IGRybV9p OTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJlbG9jWzFdOworCisJZ2VtX3dyaXRlKGZkLCBjbWRf Ym8sIDAsIGNtZHMsIHNpemUpOworCisJbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKG9iaikpOworCW9i alswXS5oYW5kbGUgPSB0YXJnZXRfYm87CisJb2JqWzFdLmhhbmRsZSA9IGNtZF9ibzsKKworCW1l bXNldChyZWxvYywgMCwgc2l6ZW9mKHJlbG9jKSk7CisJcmVsb2NbMF0ub2Zmc2V0ID0gdGFyZ2V0 X29mZnNldDsKKwlyZWxvY1swXS50YXJnZXRfaGFuZGxlID0gdGFyZ2V0X2JvOworCXJlbG9jWzBd LmRlbHRhID0gdGFyZ2V0X2RlbHRhOworCXJlbG9jWzBdLnJlYWRfZG9tYWlucyA9IEk5MTVfR0VN X0RPTUFJTl9DT01NQU5EOworCXJlbG9jWzBdLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJ Tl9DT01NQU5EOworCXJlbG9jWzBdLnByZXN1bWVkX29mZnNldCA9IC0xOworCisJb2JqWzFdLnJl bG9jc19wdHIgPSB0b191c2VyX3BvaW50ZXIocmVsb2MpOworCW9ialsxXS5yZWxvY2F0aW9uX2Nv dW50ID0gMTsKKworCW1lbXNldCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYpKTsKKwlleGVj YnVmLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKG9iaik7CisJZXhlY2J1Zi5idWZmZXJf Y291bnQgPSAyOworCWV4ZWNidWYuYmF0Y2hfbGVuID0gc2l6ZTsKKwlleGVjYnVmLmZsYWdzID0g ZW5naW5lOworCisJcmV0dXJuIF9fZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKTsKK30KKworc3Rh dGljIHZvaWQgZXhlY19iYXRjaF9wYXRjaGVkKGludCBmZCwgaW50IGVuZ2luZSwKKwkJCSAgICAg ICB1aW50MzJfdCBjbWRfYm8sIGNvbnN0IHVpbnQzMl90ICpjbWRzLAorCQkJICAgICAgIGludCBz aXplLCBpbnQgcGF0Y2hfb2Zmc2V0LAorCQkJICAgICAgIGxvbmcgaW50IGV4cGVjdGVkX3ZhbHVl KQoreworCWNvbnN0IHVpbnQzMl90IHRhcmdldF9ibyA9IGdlbV9jcmVhdGUoZmQsIEhBTkRMRV9T SVpFKTsKKwl1aW50NjRfdCBhY3R1YWxfdmFsdWUgPSAwOworCWxvbmcgaW50IHJldDsKKworCXJl dCA9IF9fZXhlY19iYXRjaF9wYXRjaGVkKGZkLCBlbmdpbmUsIGNtZF9ibywgY21kcywgc2l6ZSwg dGFyZ2V0X2JvLCBwYXRjaF9vZmZzZXQsIDApOworCWlmIChyZXQpIHsKKwkJaWd0X2Fzc2VydF9s dChyZXQsIDApOworCQlnZW1fY2xvc2UoZmQsIHRhcmdldF9ibyk7CisJCWlndF9hc3NlcnRfZXEo cmV0LCBleHBlY3RlZF92YWx1ZSk7CisJCXJldHVybjsKKwl9CisKKwlnZW1fc3luYyhmZCwgY21k X2JvKTsKKworCWdlbV9yZWFkKGZkLCB0YXJnZXRfYm8sIDAsICZhY3R1YWxfdmFsdWUsIHNpemVv ZihhY3R1YWxfdmFsdWUpKTsKKworCWdlbV9jbG9zZShmZCwgdGFyZ2V0X2JvKTsKKworCWlndF9h c3NlcnRfZXEoYWN0dWFsX3ZhbHVlLCBleHBlY3RlZF92YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQg X19leGVjX2JhdGNoKGludCBmZCwgaW50IGVuZ2luZSwgdWludDMyX3QgY21kX2JvLAorCQkJY29u c3QgdWludDMyX3QgKmNtZHMsIGludCBzaXplKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhl Y2J1ZmZlcjIgZXhlY2J1ZjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmpb MV07CisJaW50IHJldDsKKworCWdlbV93cml0ZShmZCwgY21kX2JvLCAwLCBjbWRzLCBzaXplKTsK KworCW1lbXNldChvYmosIDAsIHNpemVvZihvYmopKTsKKwlvYmpbMF0uaGFuZGxlID0gY21kX2Jv OworCisJbWVtc2V0KCZleGVjYnVmLCAwLCBzaXplb2YoZXhlY2J1ZikpOworCWV4ZWNidWYuYnVm ZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIob2JqKTsKKwlleGVjYnVmLmJ1ZmZlcl9jb3VudCA9 IDE7CisJZXhlY2J1Zi5iYXRjaF9sZW4gPSBzaXplOworCWV4ZWNidWYuZmxhZ3MgPSBlbmdpbmU7 CisKKwlyZXQgPSAgX19nZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOworCisJaWYgKCFyZXQpCisJ CWdlbV9zeW5jKGZkLCBjbWRfYm8pOworCisJcmV0dXJuIHJldDsKK30KKworI2lmIDAKK3N0YXRp YyB2b2lkIHByaW50X2JhdGNoKGNvbnN0IHVpbnQzMl90ICpjbWRzLCBjb25zdCB1aW50MzJfdCBz eikKK3sKKwljb25zdCBpbnQgY29tbWFuZHMgPSBzeiAvIDQ7CisJaW50IGk7CisKKwlpZ3RfaW5m bygiQmF0Y2ggc2l6ZSAlZFxuIiwgc3opOworCWZvciAoaSA9IDA7IGkgPCBjb21tYW5kczsgaSsr KQorCQlpZ3RfaW5mbygiMHglMDh4OiAweCUwOHhcbiIsIGksIGNtZHNbaV0pOworfQorI2Vsc2UK KyNkZWZpbmUgcHJpbnRfYmF0Y2goY21kcywgc2l6ZSkKKyNlbmRpZgorCisjZGVmaW5lIGV4ZWNf YmF0Y2goZmQsIGVuZ2luZSwgYm8sIGNtZHMsIHN6LCBleHBlY3RlZCkJXAorCXByaW50X2JhdGNo KGNtZHMsIHN6KTsgXAorCWlndF9hc3NlcnRfZXEoX19leGVjX2JhdGNoKGZkLCBlbmdpbmUsIGJv LCBjbWRzLCBzeiksIGV4cGVjdGVkKQorCitzdGF0aWMgdm9pZCBleGVjX3NwbGl0X2JhdGNoKGlu dCBmZCwgaW50IGVuZ2luZSwgY29uc3QgdWludDMyX3QgKmNtZHMsCisJCQkgICAgIGludCBzaXpl LCBpbnQgZXhwZWN0ZWRfcmV0KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIg ZXhlY2J1ZjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmpbMV07CisJdWlu dDMyX3QgY21kX2JvOworCWNvbnN0IHVpbnQzMl90IG5vb3BbMTAyNF0gPSB7IDAgfTsKKwljb25z dCBpbnQgYWxsb2Nfc2l6ZSA9IDQwOTYgKiAyOworCWNvbnN0IGludCBhY3R1YWxfc3RhcnRfb2Zm c2V0ID0gNDA5Ni1zaXplb2YodWludDMyX3QpOworCisJLyogQWxsb2NhdGUgYW5kIGZpbGwgYSAy LXBhZ2UgYmF0Y2ggd2l0aCBub29wcyAqLworCWNtZF9ibyA9IGdlbV9jcmVhdGUoZmQsIGFsbG9j X3NpemUpOworCWdlbV93cml0ZShmZCwgY21kX2JvLCAwLCBub29wLCBzaXplb2Yobm9vcCkpOwor CWdlbV93cml0ZShmZCwgY21kX2JvLCA0MDk2LCBub29wLCBzaXplb2Yobm9vcCkpOworCisJLyog V3JpdGUgdGhlIHByb3ZpZGVkIGNvbW1hbmRzIHN1Y2ggdGhhdCB0aGUgZmlyc3QgZHdvcmQKKwkg KiBvZiB0aGUgY29tbWFuZCBidWZmZXIgaXMgdGhlIGxhc3QgZHdvcmQgb2YgdGhlIGZpcnN0CisJ ICogcGFnZSAoaS5lLiB0aGUgY29tbWFuZCBpcyBzcGxpdCBhY3Jvc3MgdGhlIHR3byBwYWdlcyku CisJICovCisJZ2VtX3dyaXRlKGZkLCBjbWRfYm8sIGFjdHVhbF9zdGFydF9vZmZzZXQsIGNtZHMs IHNpemUpOworCisJbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKG9iaikpOworCW9ialswXS5oYW5kbGUg PSBjbWRfYm87CisKKwltZW1zZXQoJmV4ZWNidWYsIDAsIHNpemVvZihleGVjYnVmKSk7CisJZXhl Y2J1Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihvYmopOworCWV4ZWNidWYuYnVmZmVy X2NvdW50ID0gMTsKKwkvKiBOQjogV2Ugd2FudCBiYXRjaF9zdGFydF9vZmZzZXQgYW5kIGJhdGNo X2xlbiB0byBwb2ludCB0byB0aGUgYmxvY2sKKwkgKiBvZiB0aGUgYWN0dWFsIGNvbW1hbmRzIChp LmUuIGF0IHRoZSBsYXN0IGR3b3JkIG9mIHRoZSBmaXJzdCBwYWdlKSwKKwkgKiBidXQgaGF2ZSB0 byBhZGp1c3QgYm90aCB0aGUgc3RhcnQgb2Zmc2V0IGFuZCBsZW5ndGggdG8gbWVldCB0aGUKKwkg KiBrZXJuZWwgZHJpdmVyJ3MgcmVxdWlyZW1lbnRzIG9uIHRoZSBhbGlnbm1lbnQgb2YgdGhvc2Ug ZmllbGRzLgorCSAqLworCWV4ZWNidWYuYmF0Y2hfc3RhcnRfb2Zmc2V0ID0gYWN0dWFsX3N0YXJ0 X29mZnNldCAmIH4weDc7CisJZXhlY2J1Zi5iYXRjaF9sZW4gPQorCQlBTElHTihzaXplICsgYWN0 dWFsX3N0YXJ0X29mZnNldCAtIGV4ZWNidWYuYmF0Y2hfc3RhcnRfb2Zmc2V0LAorCQkgICAgICAw eDgpOworCWV4ZWNidWYuZmxhZ3MgPSBlbmdpbmU7CisKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2V4 ZWNidWYoZmQsICZleGVjYnVmKSwgZXhwZWN0ZWRfcmV0KTsKKworCWdlbV9zeW5jKGZkLCBjbWRf Ym8pOworCWdlbV9jbG9zZShmZCwgY21kX2JvKTsKK30KKworc3RhdGljIHZvaWQgZXhlY19iYXRj aF9jaGFpbmVkKGludCBmZCwgaW50IGVuZ2luZSwKKwkJCSAgICAgICB1aW50MzJfdCBjbWRfYm8s IGNvbnN0IHVpbnQzMl90ICpjbWRzLAorCQkJICAgICAgIGludCBzaXplLCBpbnQgcGF0Y2hfb2Zm c2V0LAorCQkJICAgICAgIHVpbnQ2NF90IGV4cGVjdGVkX3ZhbHVlLAorCQkJICAgICAgIGludCBl eHBlY3RlZF9yZXR1cm4pCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVj YnVmOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9ialszXTsKKwlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgcmVsb2NbMV07CisJc3RydWN0IGRybV9pOTE1 X2dlbV9yZWxvY2F0aW9uX2VudHJ5IGZpcnN0X2xldmVsX3JlbG9jOworCisJY29uc3QgdWludDMy X3QgdGFyZ2V0X2JvID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7CisJY29uc3QgdWludDMyX3QgZmly c3RfbGV2ZWxfYm8gPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKKwl1aW50NjRfdCBhY3R1YWxfdmFs dWUgPSAwOworCWludCByZXQ7CisKKwljb25zdCB1aW50MzJfdCBmaXJzdF9sZXZlbF9jbWRzW10g PSB7CisJCU1JX0JBVENIX0JVRkZFUl9TVEFSVCB8IE1JX0JBVENIX05PTl9TRUNVUkVfSTk2NSB8 IDEsCisJCTAsCisJCTAsCisJCU1JX0JBVENIX0JVRkZFUl9FTkQsCisJfTsKKworCWdlbV93cml0 ZShmZCwgZmlyc3RfbGV2ZWxfYm8sIDAsCisJCSAgZmlyc3RfbGV2ZWxfY21kcywgc2l6ZW9mKGZp cnN0X2xldmVsX2NtZHMpKTsKKwlnZW1fd3JpdGUoZmQsIGNtZF9ibywgMCwgY21kcywgc2l6ZSk7 CisKKwltZW1zZXQob2JqLCAwLCBzaXplb2Yob2JqKSk7CisJb2JqWzBdLmhhbmRsZSA9IHRhcmdl dF9ibzsKKwlvYmpbMV0uaGFuZGxlID0gY21kX2JvOworCW9ialsyXS5oYW5kbGUgPSBmaXJzdF9s ZXZlbF9ibzsKKworCW1lbXNldChyZWxvYywgMCwgc2l6ZW9mKHJlbG9jKSk7CisJcmVsb2NbMF0u b2Zmc2V0ID0gcGF0Y2hfb2Zmc2V0OworCXJlbG9jWzBdLmRlbHRhID0gMDsKKwlyZWxvY1swXS50 YXJnZXRfaGFuZGxlID0gdGFyZ2V0X2JvOworCXJlbG9jWzBdLnJlYWRfZG9tYWlucyA9IEk5MTVf R0VNX0RPTUFJTl9DT01NQU5EOworCXJlbG9jWzBdLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RP TUFJTl9DT01NQU5EOworCXJlbG9jWzBdLnByZXN1bWVkX29mZnNldCA9IC0xOworCisJb2JqWzFd LnJlbG9jYXRpb25fY291bnQgPSAxOworCW9ialsxXS5yZWxvY3NfcHRyID0gdG9fdXNlcl9wb2lu dGVyKCZyZWxvYyk7CisKKwltZW1zZXQoJmZpcnN0X2xldmVsX3JlbG9jLCAwLCBzaXplb2YoZmly c3RfbGV2ZWxfcmVsb2MpKTsKKwlmaXJzdF9sZXZlbF9yZWxvYy5vZmZzZXQgPSA0OworCWZpcnN0 X2xldmVsX3JlbG9jLmRlbHRhID0gMDsKKwlmaXJzdF9sZXZlbF9yZWxvYy50YXJnZXRfaGFuZGxl ID0gY21kX2JvOworCWZpcnN0X2xldmVsX3JlbG9jLnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RP TUFJTl9DT01NQU5EOworCWZpcnN0X2xldmVsX3JlbG9jLndyaXRlX2RvbWFpbiA9IDA7CisJb2Jq WzJdLnJlbG9jYXRpb25fY291bnQgPSAxOworCW9ialsyXS5yZWxvY3NfcHRyID0gdG9fdXNlcl9w b2ludGVyKCZmaXJzdF9sZXZlbF9yZWxvYyk7CisKKwltZW1zZXQoJmV4ZWNidWYsIDAsIHNpemVv ZihleGVjYnVmKSk7CisJZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihvYmop OworCWV4ZWNidWYuYnVmZmVyX2NvdW50ID0gMzsKKwlleGVjYnVmLmJhdGNoX2xlbiA9IHNpemVv ZihmaXJzdF9sZXZlbF9jbWRzKTsKKwlleGVjYnVmLmZsYWdzID0gZW5naW5lOworCisJcmV0ID0g X19nZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOworCWlmIChleHBlY3RlZF9yZXR1cm4gJiYgcmV0 ID09IGV4cGVjdGVkX3JldHVybikKKwkJZ290byBvdXQ7CisKKwlnZW1fc3luYyhmZCwgY21kX2Jv KTsKKworCWdlbV9yZWFkKGZkLHRhcmdldF9ibywgMCwgJmFjdHVhbF92YWx1ZSwgc2l6ZW9mKGFj dHVhbF92YWx1ZSkpOworCitvdXQ6CisJaWYgKCFleHBlY3RlZF9yZXR1cm4pCisJCWlndF9hc3Nl cnRfZXEoZXhwZWN0ZWRfdmFsdWUsIGFjdHVhbF92YWx1ZSk7CisJZWxzZQorCQlpZ3RfYXNzZXJ0 X25lcShleHBlY3RlZF92YWx1ZSwgYWN0dWFsX3ZhbHVlKTsKKworCWdlbV9jbG9zZShmZCwgZmly c3RfbGV2ZWxfYm8pOworCWdlbV9jbG9zZShmZCwgdGFyZ2V0X2JvKTsKK30KKworc3RhdGljIHZv aWQgdGVzdF9zZWN1cmVfYmF0Y2hlcyhjb25zdCBpbnQgZmQpCit7CisJaW50IHYgPSAtMTsKKwlk cm1faTkxNV9nZXRwYXJhbV90IGdwOworCisJZ3AucGFyYW0gPSBJOTE1X1BBUkFNX0hBU19TRUNV UkVfQkFUQ0hFUzsKKwlncC52YWx1ZSA9ICZ2OworCisJaWd0X2Fzc2VydF9lcShkcm1Jb2N0bChm ZCwgRFJNX0lPQ1RMX0k5MTVfR0VUUEFSQU0sICZncCksIDApOworCWlndF9hc3NlcnRfZXEodiwg MCk7CisKKwlpZ3RfYXNzZXJ0KCFnZW1fZW5naW5lX2hhc19tdXRhYmxlX3N1Ym1pc3Npb24oZmQs IEk5MTVfRVhFQ19CTFQpKTsKK30KKworc3RydWN0IGNtZCB7CisJdWludDMyX3QgY21kOworCWlu dCBsZW47CisJY29uc3QgY2hhciAqbmFtZTsKK307CisKKyNkZWZpbmUgQ01EKEMsIEwpIHsgLmNt ZCA9IChDKSwgLmxlbiA9IChMKSwgLm5hbWUgPSAjQyB9CisjZGVmaW5lIENNRF9OKEMpIHsgLmNt ZCA9IChDKSwgLmxlbiA9IDEsIC5uYW1lID0gI0MgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNt ZCBhbGxvd2VkX2NtZHNbXSA9IHsKKwlDTURfTihNSV9OT09QKSwKKwlDTURfTihNSV9VU0VSX0lO VEVSUlVQVCksCisJQ01EX04oTUlfV0FJVF9GT1JfRVZFTlQpLAorCUNNRChNSV9GTFVTSF9EVywg NSksCisJQ01EX04oTUlfQVJCX0NIRUNLKSwKKwlDTURfTihNSV9SRVBPUlRfSEVBRCksCisJQ01E X04oTUlfRkxVU0gpLAorCUNNRF9OKE1JX0FSQl9PTl9PRkYpLAorCUNNRF9OKE1JX1NVU1BFTkRf RkxVU0gpLAorCUNNRChNSV9MT0FEX1NDQU5fTElORVNfSU5DTCwgMiksCisJQ01EKE1JX0xPQURf U0NBTl9MSU5FU19FWENMLCAyKSwKK307CisKK3N0YXRpYyB1aW50MzJfdCAqaW5qZWN0X2NtZCh1 aW50MzJfdCAqYmF0Y2gsIGNvbnN0IHVpbnQzMl90IGNtZCwgaW50IGxlbikKK3sKKwlpbnQgaSA9 IDA7CisKKwliYXRjaFtpKytdID0gY21kOworCisJd2hpbGUgKC0tbGVuKQorCQliYXRjaFtpKytd ID0gMDsKKworCXJldHVybiAmYmF0Y2hbaV07Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJh dGNoX251bV9jbWRzKGNvbnN0IHVpbnQzMl90ICogY29uc3QgYmF0Y2hfc3RhcnQsCisJCQkJICAg IGNvbnN0IHVpbnQzMl90ICogY29uc3QgYmF0Y2hfZW5kKQoreworCWlndF9hc3NlcnRfbHRlKCh1 bnNpZ25lZCBsb25nKWJhdGNoX3N0YXJ0LCAodW5zaWduZWQgbG9uZyliYXRjaF9lbmQpOworCisJ cmV0dXJuIGJhdGNoX2VuZCAtIGJhdGNoX3N0YXJ0OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9u ZyBiYXRjaF9ieXRlcyhjb25zdCB1aW50MzJfdCAqIGNvbnN0IGJhdGNoX3N0YXJ0LAorCQkJCSBj b25zdCB1aW50MzJfdCAqIGNvbnN0IGJhdGNoX2VuZCkKK3sKKwljb25zdCB1bnNpZ25lZCBsb25n IGJ5dGVzID0gYmF0Y2hfbnVtX2NtZHMoYmF0Y2hfc3RhcnQsIGJhdGNoX2VuZCkgKiA0OworCisJ aWd0X2Fzc2VydCghKGJ5dGVzICYgMHg3KSk7CisKKwlyZXR1cm4gYnl0ZXM7Cit9CisKK3N0YXRp YyB2b2lkIHRlc3RfYWxsb3dlZF9hbGwoY29uc3QgaW50IGZkLCBjb25zdCB1aW50MzJfdCBoYW5k bGUpCit7CisJdWludDMyX3QgYmF0Y2hbNDA5Nl07CisJdWludDMyX3QgKmIgPSAmYmF0Y2hbMF07 CisKKwlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWxsb3dlZF9jbWRzKTsgaSsrKQor CQliID0gaW5qZWN0X2NtZChiLCBhbGxvd2VkX2NtZHNbaV0uY21kLAorCQkJICAgICAgIGFsbG93 ZWRfY21kc1tpXS5sZW4pOworCisJaWYgKCEoYmF0Y2hfbnVtX2NtZHMoYmF0Y2gsIGIpICUgMikp CisJCWIgPSBpbmplY3RfY21kKGIsIE1JX05PT1AsIDEpOworCisJYiA9IGluamVjdF9jbWQoYiwg TUlfQkFUQ0hfQlVGRkVSX0VORCwgMSk7CisKKwlleGVjX2JhdGNoKGZkLCBJOTE1X0VYRUNfQkxU LCBoYW5kbGUsIGJhdGNoLCBiYXRjaF9ieXRlcyhiYXRjaCwgYiksIDApOworfQorCitzdGF0aWMg dm9pZCB0ZXN0X2FsbG93ZWRfc2luZ2xlKGNvbnN0IGludCBmZCwgY29uc3QgdWludDMyX3QgaGFu ZGxlKQoreworCXVpbnQzMl90IGJhdGNoWzQwOTZdOworCWludCByZXQ7CisKKwlmb3IgKGludCBp ID0gMDsgaSA8IEFSUkFZX1NJWkUoYWxsb3dlZF9jbWRzKTsgaSsrKSB7CisJCXVpbnQzMl90ICpi ID0gJmJhdGNoWzBdOworCisJCWIgPSBpbmplY3RfY21kKGIsIGFsbG93ZWRfY21kc1tpXS5jbWQs CisJCQkgICAgICAgYWxsb3dlZF9jbWRzW2ldLmxlbik7CisKKwkJaWYgKCEoYmF0Y2hfbnVtX2Nt ZHMoYmF0Y2gsIGIpICUgMikpCisJCQliID0gaW5qZWN0X2NtZChiLCBNSV9OT09QLCAxKTsKKwor CQliID0gaW5qZWN0X2NtZChiLCBNSV9CQVRDSF9CVUZGRVJfRU5ELCAxKTsKKworCQlyZXQgPSBf X2V4ZWNfYmF0Y2goZmQsIEk5MTVfRVhFQ19CTFQsIGhhbmRsZSwKKwkJCQkgICBiYXRjaCwgYmF0 Y2hfYnl0ZXMoYmF0Y2gsIGIpKTsKKworCQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CisJfTsKK30K Kworc3RhdGljIHZvaWQgdGVzdF9iYl9zZWN1cmUoY29uc3QgaW50IGZkLCBjb25zdCB1aW50MzJf dCBoYW5kbGUpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwor CXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9ialsxXTsKKwlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgcmVsb2NbMV07CisJaW50IHJldDsKKworCWNvbnN0IHVp bnQzMl90IGJhdGNoX3NlY3VyZVtdID0geworCQlNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfCAxLAor CQkxMiwKKwkJMCwKKwkJTUlfTk9PUCwKKwkJTUlfTk9PUCwKKwkJTUlfQkFUQ0hfQlVGRkVSX0VO RCwKKwl9OworCisJZ2VtX3dyaXRlKGZkLCBoYW5kbGUsIDAsIGJhdGNoX3NlY3VyZSwgc2l6ZW9m KGJhdGNoX3NlY3VyZSkpOworCisJbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKG9iaikpOworCW9ialsw XS5oYW5kbGUgPSBoYW5kbGU7CisKKwltZW1zZXQocmVsb2MsIDAsIHNpemVvZihyZWxvYykpOwor CXJlbG9jWzBdLm9mZnNldCA9IDEgKiBzaXplb2YodWludDMyX3QpOworCXJlbG9jWzBdLnRhcmdl dF9oYW5kbGUgPSBoYW5kbGU7CisJcmVsb2NbMF0uZGVsdGEgPSA0ICogc2l6ZW9mKHVpbnQzMl90 KTsKKwlyZWxvY1swXS5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fQ09NTUFORDsKKwly ZWxvY1swXS53cml0ZV9kb21haW4gPSAwOworCXJlbG9jWzBdLnByZXN1bWVkX29mZnNldCA9IC0x OworCisJb2JqWzBdLnJlbG9jc19wdHIgPSB0b191c2VyX3BvaW50ZXIocmVsb2MpOworCW9ialsw XS5yZWxvY2F0aW9uX2NvdW50ID0gMTsKKworCW1lbXNldCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4 ZWNidWYpKTsKKwlleGVjYnVmLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKG9iaik7CisJ ZXhlY2J1Zi5idWZmZXJfY291bnQgPSAxOworCWV4ZWNidWYuYmF0Y2hfbGVuID0gc2l6ZW9mKGJh dGNoX3NlY3VyZSk7CisJZXhlY2J1Zi5mbGFncyA9IEk5MTVfRVhFQ19CTFQ7CisKKwlyZXQgPSBf X2dlbV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7CisKKwlpZ3RfYXNzZXJ0X2VxKHJldCwgLUVBQ0NF Uyk7Cit9CisKKyNkZWZpbmUgQkJfU1RBUlRfUEFSQU0gMAorI2RlZmluZSBCQl9TVEFSVF9PVVQg ICAxCisjZGVmaW5lIEJCX1NUQVJUX0NNRCAgIDIKKworc3RhdGljIHZvaWQgdGVzdF9iYl9zdGFy dChjb25zdCBpbnQgZmQsIGNvbnN0IHVpbnQzMl90IGhhbmRsZSwgaW50IHRlc3QpCit7CisJc3Ry dWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOworCXN0cnVjdCBkcm1faTkxNV9n ZW1fZXhlY19vYmplY3QyIG9ialsyXTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25f ZW50cnkgcmVsb2NbM107CisJY29uc3QgdWludDMyX3QgdGFyZ2V0X2JvID0gZ2VtX2NyZWF0ZShm ZCwgNDA5Nik7CisJdWludDMyX3QgKmRzdDsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBqdW1w X29mZjsKKworCWNvbnN0IHVpbnQzMl90IGJhdGNoW10gPSB7CisJCU1JX05PT1AsCisJCU1JX05P T1AsCisJCU1JX05PT1AsCisJCU1JX05PT1AsCisJCU1JX1NUT1JFX0RXT1JEX0lNTSwKKwkJMCwK KwkJMCwKKwkJMSwKKwkJTUlfU1RPUkVfRFdPUkRfSU1NLAorCQk0LAorCQkwLAorCQkyLAorCQlN SV9DT05EX0JBVENIX0JVRkZFUl9FTkQgfCAxLAorCQkwLAorCQkwLAorCQkwLAorCQlNSV9CQVRD SF9CVUZGRVJfU1RBUlQgfCBNSV9CQVRDSF9OT05fU0VDVVJFX0k5NjUgfCAxLAorCQkwLAorCQkw LAorCQlNSV9CQVRDSF9CVUZGRVJfRU5ELAorCX07CisKKwlpZ3RfcmVxdWlyZShnZW1fY2FuX3N0 b3JlX2R3b3JkKGZkLCBJOTE1X0VYRUNfQkxUKSk7CisKKwlzd2l0Y2ggKHRlc3QpIHsKKwljYXNl IEJCX1NUQVJUX1BBUkFNOgorCQlqdW1wX29mZiA9IDUgKiBzaXplb2YodWludDMyX3QpOworCQli cmVhazsKKwljYXNlIEJCX1NUQVJUX0NNRDoKKwkJanVtcF9vZmYgPSA4ICogc2l6ZW9mKHVpbnQz Ml90KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJanVtcF9vZmYgPSAweGYwMGQwMDAwOworCX0K KworCWdlbV93cml0ZShmZCwgaGFuZGxlLCAwLCBiYXRjaCwgc2l6ZW9mKGJhdGNoKSk7CisKKwlt ZW1zZXQob2JqLCAwLCBzaXplb2Yob2JqKSk7CisJb2JqWzBdLmhhbmRsZSA9IHRhcmdldF9ibzsK KwlvYmpbMV0uaGFuZGxlID0gaGFuZGxlOworCisJbWVtc2V0KHJlbG9jLCAwLCBzaXplb2YocmVs b2MpKTsKKwlyZWxvY1swXS5vZmZzZXQgPSA1ICogc2l6ZW9mKHVpbnQzMl90KTsKKwlyZWxvY1sw XS50YXJnZXRfaGFuZGxlID0gb2JqWzBdLmhhbmRsZTsKKwlyZWxvY1swXS5kZWx0YSA9IDA7CisJ cmVsb2NbMF0ucmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7CisJcmVsb2Nb MF0ud3JpdGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7CisJcmVsb2NbMF0ucHJl c3VtZWRfb2Zmc2V0ID0gLTE7CisKKwlyZWxvY1sxXS5vZmZzZXQgPSA5ICogc2l6ZW9mKHVpbnQz Ml90KTsKKwlyZWxvY1sxXS50YXJnZXRfaGFuZGxlID0gb2JqWzBdLmhhbmRsZTsKKwlyZWxvY1sx XS5kZWx0YSA9IDEgKiBzaXplb2YodWludDMyX3QpOworCXJlbG9jWzFdLnJlYWRfZG9tYWlucyA9 IEk5MTVfR0VNX0RPTUFJTl9DT01NQU5EOworCXJlbG9jWzFdLndyaXRlX2RvbWFpbiA9IEk5MTVf R0VNX0RPTUFJTl9DT01NQU5EOworCXJlbG9jWzFdLnByZXN1bWVkX29mZnNldCA9IC0xOworCisJ cmVsb2NbMl0ub2Zmc2V0ID0gMTcgKiBzaXplb2YodWludDMyX3QpOworCXJlbG9jWzJdLnRhcmdl dF9oYW5kbGUgPSBvYmpbMV0uaGFuZGxlOworCXJlbG9jWzJdLmRlbHRhID0ganVtcF9vZmY7CisJ cmVsb2NbMl0ucmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7CisJcmVsb2Nb Ml0ud3JpdGVfZG9tYWluID0gMDsKKwlyZWxvY1syXS5wcmVzdW1lZF9vZmZzZXQgPSAtMTsKKwor CW9ialsxXS5yZWxvY3NfcHRyID0gdG9fdXNlcl9wb2ludGVyKHJlbG9jKTsKKwlvYmpbMV0ucmVs b2NhdGlvbl9jb3VudCA9IDM7CisKKwltZW1zZXQoJmV4ZWNidWYsIDAsIHNpemVvZihleGVjYnVm KSk7CisJZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihvYmopOworCWV4ZWNi dWYuYnVmZmVyX2NvdW50ID0gMjsKKwlleGVjYnVmLmJhdGNoX2xlbiA9IHNpemVvZihiYXRjaCk7 CisJZXhlY2J1Zi5mbGFncyA9IEk5MTVfRVhFQ19CTFQ7CisKKwlkc3QgPSBnZW1fbW1hcF9fY3B1 KGZkLCBvYmpbMF0uaGFuZGxlLCAwLCA0MDk2LAorCQkJICAgIFBST1RfUkVBRCB8IFBST1RfV1JJ VEUpOworCisJaWd0X2Fzc2VydF9lcShkc3RbMF0sIDApOworCWlndF9hc3NlcnRfZXEoZHN0WzFd LCAwKTsKKworCXJldCA9IF9fZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKTsKKworCXN3aXRjaCAo dGVzdCkgeworCWNhc2UgQkJfU1RBUlRfUEFSQU06CisJCWlndF9hc3NlcnRfZXEocmV0LCAtRUlO VkFMKTsKKwkJYnJlYWs7CisJY2FzZSBCQl9TVEFSVF9DTUQ6CisJCWlndF9hc3NlcnRfZXEocmV0 LCAwKTsKKworCQl3aGlsZSAoUkVBRF9PTkNFKGRzdFswXSkgPT0gMCkKKwkJICAgICAgIDsKKwor CQl3aGlsZSAoUkVBRF9PTkNFKGRzdFsxXSkgPT0gMCkKKwkJCTsKKworCQlpZ3RfYXNzZXJ0X2Vx KGRzdFswXSwgMSk7CisJCWlndF9hc3NlcnRfZXEoZHN0WzFdLCAyKTsKKworCQlpZ3RfaW5mbygi dmFsdWVzIG5vdyAleCAleFxuIiwgZHN0WzBdLCBkc3RbMV0pOworCisJCWRzdFswXSA9IDA7CisK KwkJaWd0X2luZm8oInZhbHVlcyBub3cgJXggJXhcbiIsIGRzdFswXSwgZHN0WzFdKTsKKworCQln ZW1fc3luYyhmZCwgaGFuZGxlKTsKKworCQlpZ3RfaW5mbygidmFsdWVzIG5vdyAleCAleFxuIiwg ZHN0WzBdLCBkc3RbMV0pOworCisJCWlndF9hc3NlcnRfZXEoZHN0WzBdLCAwKTsKKwkJaWd0X2Fz c2VydF9lcShkc3RbMV0sIDIpOworCisJCWJyZWFrOworCisJY2FzZSBCQl9TVEFSVF9PVVQ6CisJ CWlndF9hc3NlcnRfZXEocmV0LCAtRUlOVkFMKTsKKwkJYnJlYWs7CisJfQorCisJZ2VtX3N5bmMo ZmQsIGhhbmRsZSk7CisJZ2VtX211bm1hcChkc3QsIDQwOTYpOworCWdlbV9jbG9zZShmZCwgdGFy Z2V0X2JvKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9iYl9jaGFpbmVkKGNvbnN0IGludCBmZCwg Y29uc3QgdWludDMyX3QgaGFuZGxlKQoreworCWNvbnN0IHVpbnQzMl90IGJhdGNoW10gPSB7CisJ CSgweDIwIDw8IDIzKSB8IDIsIC8qIE1JX1NUT1JFX0RBVEFfSU1NICovCisJCTAsCisJCTAsCisJ CTB4YmFhZGYwMGQsCisJCU1JX05PT1AsCisJCU1JX0JBVENIX0JVRkZFUl9FTkQsCisJfTsKKwor CWV4ZWNfYmF0Y2hfY2hhaW5lZChmZCwgSTkxNV9FWEVDX1JFTkRFUiwKKwkJCSAgIGhhbmRsZSwK KwkJCSAgIGJhdGNoLCBzaXplb2YoYmF0Y2gpLAorCQkJICAgNCwKKwkJCSAgIDB4YmFhZGYwMGQs CisJCQkgICAwKTsKKworCWV4ZWNfYmF0Y2hfY2hhaW5lZChmZCwgSTkxNV9FWEVDX0JMVCwKKwkJ CSAgIGhhbmRsZSwKKwkJCSAgIGJhdGNoLCBzaXplb2YoYmF0Y2gpLAorCQkJICAgNCwKKwkJCSAg IDB4YmFhZGYwMGQsCisJCQkgICBFUEVSTSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfY21kX2Ny b3NzaW5nX3BhZ2UoY29uc3QgaW50IGZkLCBjb25zdCB1aW50MzJfdCBoYW5kbGUpCit7CisJY29u c3QgdWludDMyX3QgbHJpX29rW10gPSB7CisJCU1JX0xPQURfUkVHSVNURVJfSU1NLAorCQlCQ1Nf R1BSKDApLAorCQkweGJhYWRmMDBkLAorCQlNSV9CQVRDSF9CVUZGRVJfRU5ELAorCX07CisJY29u c3QgdWludDMyX3Qgc3RvcmVfcmVnW10gPSB7CisJCU1JX1NUT1JFX1JFR0lTVEVSX01FTSB8ICg0 IC0gMiksCisJCUJDU19HUFIoMCksCisJCTAsIC8qIHJlbG9jICovCisJCTAsIC8qIHJlbG9jICov CisJCU1JX05PT1AsCisJCU1JX0JBVENIX0JVRkZFUl9FTkQsCisJfTsKKworCWV4ZWNfc3BsaXRf YmF0Y2goZmQsIEk5MTVfRVhFQ19CTFQsCisJCQkgbHJpX29rLCBzaXplb2YobHJpX29rKSwKKwkJ CSAwKTsKKworCWV4ZWNfYmF0Y2hfcGF0Y2hlZChmZCwgSTkxNV9FWEVDX0JMVCwgaGFuZGxlLAor CQkJICAgc3RvcmVfcmVnLCBzaXplb2Yoc3RvcmVfcmVnKSwKKwkJCSAgIDIgKiBzaXplb2YodWlu dDMyX3QpLCAvKiByZWxvYyAqLworCQkJICAgMHhiYWFkZjAwZCk7Cit9CisKK3N0YXRpYyB2b2lk IHRlc3RfaW52YWxpZF9sZW5ndGgoY29uc3QgaW50IGZkLCBjb25zdCB1aW50MzJfdCBoYW5kbGUp Cit7CisJY29uc3QgdWludDMyX3Qgb2tfdmFsID0gMHhiYWFkZjAwZDsKKwljb25zdCB1aW50MzJf dCBiYWRfdmFsID0gMHhmMDBkYmFhZDsKKwljb25zdCB1aW50MzJfdCBub29wc1s4MTkyXSA9IHsg MCwgfTsKKworCWNvbnN0IHVpbnQzMl90IGxyaV9va1tdID0geworCQlNSV9MT0FEX1JFR0lTVEVS X0lNTSwKKwkJQkNTX0dQUigwKSwKKwkJb2tfdmFsLAorCQlNSV9CQVRDSF9CVUZGRVJfRU5ELAor CX07CisKKwljb25zdCB1aW50MzJfdCBscmlfYmFkW10gPSB7CisJCU1JX0xPQURfUkVHSVNURVJf SU1NLAorCQlCQ1NfR1BSKDApLAorCQliYWRfdmFsLAorCQlNSV9CQVRDSF9CVUZGRVJfRU5ELAor CX07CisKKwljb25zdCB1aW50MzJfdCBzdG9yZV9yZWdbXSA9IHsKKwkJTUlfU1RPUkVfUkVHSVNU RVJfTUVNIHwgKDQgLSAyKSwKKwkJQkNTX0dQUigwKSwKKwkJMCwgLyogcmVsb2MgKi8KKwkJMCwg LyogcmVsb2MgKi8KKwkJTUlfTk9PUCwKKwkJTUlfQkFUQ0hfQlVGRkVSX0VORCwKKwl9OworCisJ ZXhlY19iYXRjaChmZCwgSTkxNV9FWEVDX0JMVCwgaGFuZGxlLAorCQkgICBscmlfb2ssIHNpemVv Zihscmlfb2spLAorCQkgICAwKTsKKworCWV4ZWNfYmF0Y2hfcGF0Y2hlZChmZCwgSTkxNV9FWEVD X0JMVCwgaGFuZGxlLAorCQkJICAgc3RvcmVfcmVnLCBzaXplb2Yoc3RvcmVfcmVnKSwKKwkJCSAg IDIgKiBzaXplb2YodWludDMyX3QpLCAvKiByZWxvYyAqLworCQkJICAgb2tfdmFsKTsKKworCWV4 ZWNfYmF0Y2goZmQsIEk5MTVfRVhFQ19CTFQsIGhhbmRsZSwKKwkJICAgbHJpX2JhZCwgMCwKKwkJ ICAgMCk7CisKKwlleGVjX2JhdGNoX3BhdGNoZWQoZmQsIEk5MTVfRVhFQ19CTFQsIGhhbmRsZSwK KwkJCSAgIHN0b3JlX3JlZywgc2l6ZW9mKHN0b3JlX3JlZyksCisJCQkgICAyICogc2l6ZW9mKHVp bnQzMl90KSwgLyogcmVsb2MgKi8KKwkJCSAgIG9rX3ZhbCk7CisKKwlleGVjX2JhdGNoKGZkLCBJ OTE1X0VYRUNfQkxULCBoYW5kbGUsCisJCSAgIGxyaV9vaywgNDA5NiwKKwkJICAgMCk7CisKKwlp Z3RfYXNzZXJ0X2VxKF9fZ2VtX3dyaXRlKGZkLCBoYW5kbGUsIDAsIG5vb3BzLCA0MDk3KSwgLUVJ TlZBTCk7Cit9CisKK3N0cnVjdCByZWcgeworCXVpbnQzMl90IGFkZHI7CisJdWludDMyX3QgbWFz azsKKwlib29sIG1hc2tlZF93cml0ZTsKKwlib29sIHByaXZpbGVnZWQ7Cit9OworCisjZGVmaW5l IFJFR19NKEFERFIsIE1BU0ssIFdNLCBQKSB7IChBRERSKSwgKE1BU0spLCAoV00pLCAoUCkgfQor I2RlZmluZSBSRUcoQUREUikgUkVHX00oQUREUiwgMHhmZmZmZmZmZiwgZmFsc2UsIGZhbHNlKQor I2RlZmluZSBSRUdfUChBRERSKSBSRUdfTShBRERSLCAweGZmZmZmZmZmLCBmYWxzZSwgdHJ1ZSkK Kworc3RhdGljIGNvbnN0IHN0cnVjdCByZWcgcmVnc1tdID0geworCVJFR19NKEJDU19TV0NUUkws IDB4MywgdHJ1ZSwgZmFsc2UpLAorCVJFRyhCQ1NfR1BSKDApKSwKKwlSRUcoQkNTX0dQUl9VRFco MCkpLAorCVJFRyhCQ1NfR1BSKDEpKSwKKwlSRUcoQkNTX0dQUl9VRFcoMSkpLAorCVJFRyhCQ1Nf R1BSKDIpKSwKKwlSRUcoQkNTX0dQUl9VRFcoMikpLAorCVJFRyhCQ1NfR1BSKDMpKSwKKwlSRUco QkNTX0dQUl9VRFcoMykpLAorCVJFRyhCQ1NfR1BSKDQpKSwKKwlSRUcoQkNTX0dQUl9VRFcoNCkp LAorCVJFRyhCQ1NfR1BSKDUpKSwKKwlSRUcoQkNTX0dQUl9VRFcoNSkpLAorCVJFRyhCQ1NfR1BS KDYpKSwKKwlSRUcoQkNTX0dQUl9VRFcoNikpLAorCVJFRyhCQ1NfR1BSKDcpKSwKKwlSRUcoQkNT X0dQUl9VRFcoNykpLAorCVJFRyhCQ1NfR1BSKDgpKSwKKwlSRUcoQkNTX0dQUl9VRFcoOCkpLAor CVJFRyhCQ1NfR1BSKDkpKSwKKwlSRUcoQkNTX0dQUl9VRFcoOSkpLAorCVJFRyhCQ1NfR1BSKDEw KSksCisJUkVHKEJDU19HUFJfVURXKDEwKSksCisJUkVHKEJDU19HUFIoMTEpKSwKKwlSRUcoQkNT X0dQUl9VRFcoMTEpKSwKKwlSRUcoQkNTX0dQUigxMikpLAorCVJFRyhCQ1NfR1BSX1VEVygxMikp LAorCVJFRyhCQ1NfR1BSKDEzKSksCisJUkVHKEJDU19HUFJfVURXKDEzKSksCisJUkVHKEJDU19H UFIoMTQpKSwKKwlSRUcoQkNTX0dQUl9VRFcoMTQpKSwKKwlSRUcoQkNTX0dQUigxNSkpLAorCVJF RyhCQ1NfR1BSX1VEVygxNSkpLAorCisJUkVHX1AoMCksCisJUkVHX1AoMjAwMDAwKSwKKworCVJF R19QKEJDU19TV0NUUkwgLSAxKSwKKwlSRUdfUChCQ1NfU1dDVFJMIC0gMiksCisJUkVHX1AoQkNT X1NXQ1RSTCAtIDMpLAorCVJFR19QKEJDU19TV0NUUkwgLSA0KSwKKwlSRUdfUChCQ1NfU1dDVFJM ICsgNCksCisKKwlSRUdfUChCQ1NfR1BSKDApIC0gMSksCisJUkVHX1AoQkNTX0dQUigwKSAtIDIp LAorCVJFR19QKEJDU19HUFIoMCkgLSAzKSwKKwlSRUdfUChCQ1NfR1BSKDApIC0gNCksCisJUkVH X1AoQkNTX0dQUl9VRFcoMTUpICsgNCksCit9OworCitzdGF0aWMgdm9pZCB0ZXN0X3JlZ2lzdGVy KGNvbnN0IGludCBmZCwgY29uc3QgdWludDMyX3QgaGFuZGxlLAorCQkJICBjb25zdCBzdHJ1Y3Qg cmVnICpyKQoreworCWNvbnN0IHVpbnQzMl90IGxyaV96ZXJvW10gPSB7CisJCU1JX0xPQURfUkVH SVNURVJfSU1NLAorCQlyLT5hZGRyLAorCQlyLT5tYXNrZWRfd3JpdGUgPyAweGZmZmYwMDAwIDog MCwKKwkJTUlfQkFUQ0hfQlVGRkVSX0VORCwKKwl9OworCisJY29uc3QgdWludDMyX3QgbHJpX21h c2tbXSA9IHsKKwkJTUlfTE9BRF9SRUdJU1RFUl9JTU0sCisJCXItPmFkZHIsCisJCXItPm1hc2tl ZF93cml0ZSA/IChyLT5tYXNrIDw8IDE2KSB8IHItPm1hc2sgOiByLT5tYXNrLAorCQlNSV9CQVRD SF9CVUZGRVJfRU5ELAorCX07CisKKwljb25zdCB1aW50MzJfdCBzdG9yZV9yZWdbXSA9IHsKKwkJ TUlfU1RPUkVfUkVHSVNURVJfTUVNIHwgKDQgLSAyKSwKKwkJci0+YWRkciwKKwkJMCwgLyogcmVs b2MgKi8KKwkJMCwgLyogcmVsb2MgKi8KKwkJTUlfTk9PUCwKKwkJTUlfQkFUQ0hfQlVGRkVSX0VO RCwKKwl9OworCisJZXhlY19iYXRjaChmZCwgSTkxNV9FWEVDX0JMVCwgaGFuZGxlLAorCQkgICBs cmlfbWFzaywgc2l6ZW9mKGxyaV9tYXNrKSwKKwkJICAgci0+cHJpdmlsZWdlZCA/IC1FQUNDRVMg OiAwKTsKKworCWV4ZWNfYmF0Y2hfcGF0Y2hlZChmZCwgSTkxNV9FWEVDX0JMVCwgaGFuZGxlLAor CQkJICAgc3RvcmVfcmVnLCBzaXplb2Yoc3RvcmVfcmVnKSwKKwkJCSAgIDIgKiBzaXplb2YodWlu dDMyX3QpLCAvKiByZWxvYyAqLworCQkJICAgci0+cHJpdmlsZWdlZCA/IC1FQUNDRVMgOiByLT5t YXNrKTsKKworCWV4ZWNfYmF0Y2goZmQsIEk5MTVfRVhFQ19CTFQsIGhhbmRsZSwKKwkJICAgbHJp X3plcm8sIHNpemVvZihscmlfemVybyksCisJCSAgIHItPnByaXZpbGVnZWQgPyAtRUFDQ0VTIDog MCk7CisKKwlleGVjX2JhdGNoX3BhdGNoZWQoZmQsIEk5MTVfRVhFQ19CTFQsIGhhbmRsZSwKKwkJ CSAgIHN0b3JlX3JlZywgc2l6ZW9mKHN0b3JlX3JlZyksCisJCQkgICAyICogc2l6ZW9mKHVpbnQz Ml90KSwgLyogcmVsb2MgKi8KKwkJCSAgIHItPnByaXZpbGVnZWQgPyAtRUFDQ0VTIDogMCk7Cit9 CisKK3N0YXRpYyB2b2lkIHRlc3RfdmFsaWRfcmVnaXN0ZXJzKGNvbnN0IGludCBmZCwgY29uc3Qg dWludDMyX3QgaGFuZGxlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUocmVncyk7IGkrKykKKwkJdGVzdF9yZWdpc3RlcihmZCwgaGFuZGxlLCAmcmVnc1tpXSk7Cit9 CisKK3N0YXRpYyBsb25nIGludCByZWFkX3JlZyhjb25zdCBpbnQgZmQsIGNvbnN0IHVpbnQzMl90 IGhhbmRsZSwKKwkJCSBjb25zdCB1aW50MzJfdCBhZGRyKQoreworCWNvbnN0IHVpbnQzMl90IHN0 b3JlX3JlZ1tdID0geworCQlNSV9TVE9SRV9SRUdJU1RFUl9NRU0gfCAoNCAtIDIpLAorCQlhZGRy LAorCQkwLCAvKiByZWxvYyAqLworCQkwLCAvKiByZWxvYyAqLworCQlNSV9OT09QLAorCQlNSV9C QVRDSF9CVUZGRVJfRU5ELAorCX07CisJdWludDMyX3QgdGFyZ2V0X2JvOworCXVpbnQzMl90IHZh bHVlOworCWxvbmcgaW50IHJldDsKKworCXRhcmdldF9ibyA9IGdlbV9jcmVhdGUoZmQsIEhBTkRM RV9TSVpFKTsKKworCXJldCA9IF9fZXhlY19iYXRjaF9wYXRjaGVkKGZkLCBJOTE1X0VYRUNfQkxU LCBoYW5kbGUsCisJCQkJICAgc3RvcmVfcmVnLCBzaXplb2Yoc3RvcmVfcmVnKSwKKwkJCQkgICB0 YXJnZXRfYm8sIDIgKiBzaXplb2YodWludDMyX3QpLCAwKTsKKworCWlmIChyZXQpIHsKKwkJaWd0 X2Fzc2VydF9sdChyZXQsIDApOworCQlnZW1fY2xvc2UoZmQsIHRhcmdldF9ibyk7CisJCXJldHVy biByZXQ7CisJfQorCisJZ2VtX3N5bmMoZmQsIGhhbmRsZSk7CisKKwlnZW1fcmVhZChmZCwgdGFy Z2V0X2JvLCAwLCAmdmFsdWUsIHNpemVvZih2YWx1ZSkpOworCisJZ2VtX2Nsb3NlKGZkLCB0YXJn ZXRfYm8pOworCisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgaW50IHdyaXRlX3JlZyhjb25z dCBpbnQgZmQsIGNvbnN0IHVpbnQzMl90IGhhbmRsZSwKKwkJICAgICBjb25zdCB1aW50MzJfdCBh ZGRyLCBjb25zdCB1aW50MzJfdCB2YWwpCit7CisJY29uc3QgdWludDMyX3QgbHJpW10gPSB7CisJ CU1JX0xPQURfUkVHSVNURVJfSU1NLAorCQlhZGRyLAorCQl2YWwsCisJCU1JX0JBVENIX0JVRkZF Ul9FTkQsCisJfTsKKworCXJldHVybiBfX2V4ZWNfYmF0Y2goZmQsIEk5MTVfRVhFQ19CTFQsIGhh bmRsZSwKKwkJCSAgICBscmksIHNpemVvZihscmkpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF91 bmFsaWduZWRfYWNjZXNzKGNvbnN0IGludCBmZCwgY29uc3QgdWludDMyX3QgaGFuZGxlKQorewor CWNvbnN0IHVpbnQzMl90IGFkZHIgPSBCQ1NfR1BSKDQpOworCWNvbnN0IHVpbnQzMl90IHZhbCA9 IDB4YmFhZGZlYWQ7CisJY29uc3QgdWludDMyX3QgcHJlID0gMHgxMjM0NTY3ODsKKwljb25zdCB1 aW50MzJfdCBwb3N0ID0gMHg4NzY1NDMyMTsKKworCWlndF9hc3NlcnRfZXEod3JpdGVfcmVnKGZk LCBoYW5kbGUsIGFkZHIgLSA0LCBwcmUpLCAgMCk7CisJaWd0X2Fzc2VydF9lcSh3cml0ZV9yZWco ZmQsIGhhbmRsZSwgYWRkciwgdmFsKSwgICAgICAwKTsKKwlpZ3RfYXNzZXJ0X2VxKHdyaXRlX3Jl ZyhmZCwgaGFuZGxlLCBhZGRyICsgNCwgcG9zdCksIDApOworCisJaWd0X2Fzc2VydF9lcShyZWFk X3JlZyhmZCwgaGFuZGxlLCBhZGRyIC0gNCksIHByZSk7CisJaWd0X2Fzc2VydF9lcShyZWFkX3Jl ZyhmZCwgaGFuZGxlLCBhZGRyKSwgICAgIHZhbCk7CisJaWd0X2Fzc2VydF9lcShyZWFkX3JlZyhm ZCwgaGFuZGxlLCBhZGRyICsgNCksIHBvc3QpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBp KyspIHsKKwkJaWd0X2Fzc2VydF9lcSh3cml0ZV9yZWcoZmQsIGhhbmRsZSwgYWRkciArIGksIHZh bCksIDApOworCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfcmVnKGZkLCBoYW5kbGUsIGFkZHIpLCB2YWwp OworCisJCWlndF9hc3NlcnRfZXEocmVhZF9yZWcoZmQsIGhhbmRsZSwgYWRkciArIDEpLCB2YWwp OworCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfcmVnKGZkLCBoYW5kbGUsIGFkZHIgKyAyKSwgdmFsKTsK KwkJaWd0X2Fzc2VydF9lcShyZWFkX3JlZyhmZCwgaGFuZGxlLCBhZGRyICsgMyksIHZhbCk7CisJ CWlndF9hc3NlcnRfZXEocmVhZF9yZWcoZmQsIGhhbmRsZSwgYWRkciArIDQpLCBwb3N0KTsKKwkJ aWd0X2Fzc2VydF9lcShyZWFkX3JlZyhmZCwgaGFuZGxlLCBhZGRyIC0gMyksIHByZSk7CisJCWln dF9hc3NlcnRfZXEocmVhZF9yZWcoZmQsIGhhbmRsZSwgYWRkciAtIDIpLCBwcmUpOworCQlpZ3Rf YXNzZXJ0X2VxKHJlYWRfcmVnKGZkLCBoYW5kbGUsIGFkZHIgLSAxKSwgcHJlKTsKKwl9Cit9CisK K2lndF9tYWluCit7CisJdWludDMyX3QgaGFuZGxlOworCWludCBmZDsKKworCWlndF9maXh0dXJl IHsKKwkJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKKwkJaWd0X3JlcXVpcmVf Z2VtKGZkKTsKKwkJZ2VtX3JlcXVpcmVfYmxpdHRlcihmZCk7CisKKwkJcGFyc2VyX3ZlcnNpb24g PSBjb21tYW5kX3BhcnNlcl92ZXJzaW9uKGZkKTsKKwkJLyogaWd0X3JlcXVpcmUocGFyc2VyX3Zl cnNpb24gPT0gMTApOyAqLworCisJCWlndF9yZXF1aXJlKGdlbV91c2VzX3BwZ3R0KGZkKSk7CisJ CWlndF9yZXF1aXJlKGdlbV9oYXNfYmx0KGZkKSk7CisJCWlndF9yZXF1aXJlKGludGVsX2dlbihp bnRlbF9nZXRfZHJtX2RldmlkKGZkKSkgPT0gOSk7CisKKwkJaGFuZGxlID0gZ2VtX2NyZWF0ZShm ZCwgSEFORExFX1NJWkUpOworCisJCWlndF9mb3JrX2hhbmdfZGV0ZWN0b3IoZmQpOworCX0KKwor CWlndF9zdWJ0ZXN0KCJzZWN1cmUtYmF0Y2hlcyIpCisJCXRlc3Rfc2VjdXJlX2JhdGNoZXMoZmQp OworCisJaWd0X3N1YnRlc3QoImFsbG93ZWQtYWxsIikKKwkJdGVzdF9hbGxvd2VkX2FsbChmZCwg aGFuZGxlKTsKKworCWlndF9zdWJ0ZXN0KCJhbGxvd2VkLXNpbmdsZSIpCisJCXRlc3RfYWxsb3dl ZF9zaW5nbGUoZmQsIGhhbmRsZSk7CisKKwlpZ3Rfc3VidGVzdCgiYmItc3RhcnQtcGFyYW0iKQor CQl0ZXN0X2JiX3N0YXJ0KGZkLCBoYW5kbGUsIEJCX1NUQVJUX1BBUkFNKTsKKworCWlndF9zdWJ0 ZXN0KCJiYi1zdGFydC1vdXQiKQorCQl0ZXN0X2JiX3N0YXJ0KGZkLCBoYW5kbGUsIEJCX1NUQVJU X09VVCk7CisKKwlpZ3Rfc3VidGVzdCgiYmItc2VjdXJlIikKKwkJdGVzdF9iYl9zZWN1cmUoZmQs IGhhbmRsZSk7CisKKwlpZ3Rfc3VidGVzdCgiYmItY2hhaW5lZCIpCisJCXRlc3RfYmJfY2hhaW5l ZChmZCwgaGFuZGxlKTsKKworCWlndF9zdWJ0ZXN0KCJjbWQtY3Jvc3NpbmctcGFnZSIpCisJCXRl c3RfY21kX2Nyb3NzaW5nX3BhZ2UoZmQsIGhhbmRsZSk7CisKKwlpZ3Rfc3VidGVzdCgiYmF0Y2gt d2l0aG91dC1lbmQiKSB7CisJCWNvbnN0IHVpbnQzMl90IG5vb3BbMTAyNF0gPSB7IDAgfTsKKwor CQlleGVjX2JhdGNoKGZkLCBJOTE1X0VYRUNfQkxULCBoYW5kbGUsCisJCQkgICBub29wLCBzaXpl b2Yobm9vcCksCisJCQkgICAtRUlOVkFMKTsKKwl9CisKKwlpZ3Rfc3VidGVzdCgiYmF0Y2gtemVy by1sZW5ndGgiKSB7CisJCWNvbnN0IHVpbnQzMl90IG5vb3BbXSA9IHsgMCwgTUlfQkFUQ0hfQlVG RkVSX0VORCB9OworCisJCWV4ZWNfYmF0Y2goZmQsIEk5MTVfRVhFQ19CTFQsIGhhbmRsZSwKKwkJ CSAgIG5vb3AsIDAsCisJCQkgICAtRUlOVkFMKTsKKwl9CisKKwlpZ3Rfc3VidGVzdCgiYmF0Y2gt aW52YWxpZC1sZW5ndGgiKQorCQl0ZXN0X2ludmFsaWRfbGVuZ3RoKGZkLCBoYW5kbGUpOworCisJ aWd0X3N1YnRlc3QoImJhc2ljLXJlamVjdGVkIikgeworCQljb25zdCB1aW50MzJfdCBpbnZhbGlk X2NtZFtdID0geworCQkJSU5TVFJfSU5WQUxJRF9DTElFTlQgPDwgSU5TVFJfQ0xJRU5UX1NISUZU LAorCQkJTUlfQkFUQ0hfQlVGRkVSX0VORCwKKwkJfTsKKwkJY29uc3QgdWludDMyX3QgaW52YWxp ZF9zZXRfY29udGV4dFtdID0geworCQkJTUlfU0VUX0NPTlRFWFQgfCAzMiwgLyogaW52YWxpZCBs ZW5ndGggKi8KKwkJCU1JX0JBVENIX0JVRkZFUl9FTkQsCisJCX07CisKKwkJZXhlY19iYXRjaChm ZCwgSTkxNV9FWEVDX0JMVCwgaGFuZGxlLAorCQkJICAgaW52YWxpZF9jbWQsIHNpemVvZihpbnZh bGlkX2NtZCksCisJCQkgICAtRUlOVkFMKTsKKworCQlleGVjX2JhdGNoKGZkLCBJOTE1X0VYRUNf QkxULCBoYW5kbGUsCisJCQkgICBpbnZhbGlkX3NldF9jb250ZXh0LCBzaXplb2YoaW52YWxpZF9z ZXRfY29udGV4dCksCisJCQkgICAtRUlOVkFMKTsKKwl9CisKKwlpZ3Rfc3VidGVzdCgidmFsaWQt cmVnaXN0ZXJzIikKKwkJdGVzdF92YWxpZF9yZWdpc3RlcnMoZmQsIGhhbmRsZSk7CisKKwlpZ3Rf c3VidGVzdCgidW5hbGlnbmVkLWFjY2VzcyIpCisJCXRlc3RfdW5hbGlnbmVkX2FjY2VzcyhmZCwg aGFuZGxlKTsKKworCWlndF9zdWJ0ZXN0X2dyb3VwIHsKKwkJaWd0X2hhbmdfdCBoYW5nOworCisJ CWlndF9maXh0dXJlIGlndF9hbGxvd19oYW5nKGZkLCAwLCAwKTsKKworCQlpZ3Rfc3VidGVzdCgi YmItc3RhcnQtY21kIikKKwkJCXRlc3RfYmJfc3RhcnQoZmQsIGhhbmRsZSwgQkJfU1RBUlRfQ01E KTsKKworCQlpZ3RfZml4dHVyZSBpZ3RfZGlzYWxsb3dfaGFuZyhmZCwgaGFuZyk7CisJfQorCisJ aWd0X2ZpeHR1cmUgeworCQlpZ3Rfc3RvcF9oYW5nX2RldGVjdG9yKCk7CisJCWdlbV9jbG9zZShm ZCwgaGFuZGxlKTsKKworCQljbG9zZShmZCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvaW50 ZWwtY2kvZmFzdC1mZWVkYmFjay50ZXN0bGlzdCBiL3Rlc3RzL2ludGVsLWNpL2Zhc3QtZmVlZGJh Y2sudGVzdGxpc3QKaW5kZXggOWRkMjdiNDIuLmEzYzY2YjQyIDEwMDY0NAotLS0gYS90ZXN0cy9p bnRlbC1jaS9mYXN0LWZlZWRiYWNrLnRlc3RsaXN0CisrKyBiL3Rlc3RzL2ludGVsLWNpL2Zhc3Qt ZmVlZGJhY2sudGVzdGxpc3QKQEAgLTIwMywzICsyMDMsNCBAQCBpZ3RAaTkxNV9tb2R1bGVfbG9h ZEByZWxvYWQKIGlndEBpOTE1X21vZHVsZV9sb2FkQHJlbG9hZC1uby1kaXNwbGF5CiBpZ3RAaTkx NV9tb2R1bGVfbG9hZEByZWxvYWQtd2l0aC1mYXVsdC1pbmplY3Rpb24KIGlndEBpOTE1X3BtX3Jw bUBtb2R1bGUtcmVsb2FkCitpZ3RAZ2VtX2JsdF9wYXJzZUBiYi1zdGFydCAjZXhwZWN0ZWQgaGFu ZyBzbyBsYXN0CmRpZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1 aWxkCmluZGV4IDk4ZjJkYjU1Li40Mzg5OWI5NSAxMDA2NDQKLS0tIGEvdGVzdHMvbWVzb24uYnVp bGQKKysrIGIvdGVzdHMvbWVzb24uYnVpbGQKQEAgLTE0OCw2ICsxNDgsNyBAQCBpOTE1X3Byb2dz ID0gWwogCSdnZW1fZXhlY19wYXJhbGxlbCcsCiAJJ2dlbV9leGVjX3BhcmFtcycsCiAJJ2dlbV9l eGVjX3BhcnNlJywKKwknZ2VtX2JsdF9wYXJzZScsCiAJJ2dlbV9leGVjX3JlbG9jJywKIAknZ2Vt X2V4ZWNfcmV1c2UnLAogCSdnZW1fZXhlY19zY2hlZHVsZScsCi0tIAoyLjE3LjEKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBs aXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==