From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 943B489E9E for ; Fri, 10 May 2019 16:23:11 +0000 (UTC) From: Ville Syrjala Date: Fri, 10 May 2019 19:23:07 +0300 Message-Id: <20190510162307.15881-1-ville.syrjala@linux.intel.com> In-Reply-To: <20190508162906.20808-1-ville.syrjala@linux.intel.com> References: <20190508162906.20808-1-ville.syrjala@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v4] tests/kms_big_fb: Make sure huge fbs work correctly 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: igt-dev@lists.freedesktop.org List-ID: RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KCkFk ZCB2YXJpb3VzIHRlc3RzIHRvIGV4Y2VyY2lzZSBodWdlIGZyYW1lYnVmZmVycy4gRmlyc3Qgc29t ZSBiYXNpYwpzYW5pdHkgY2hlY2tzIHRoYXQgdGhlIGtlcm5lbCBhY2NlcHRzL3JlamVjdHMgZ29v ZC9iYWQgYWRkZmIyIGlvY3RscywKYW5kIGZpbmFsbHkgYWN0dWFsIHNjYW5vdXQgdGVzdHMgdG8g bWFrZSBzdXJlIHdlIHNjYW4gb3V0IHRoZSBjb3JyZWN0CnRoaW5nIHdoZW4gcGFubmluZyBhcm91 bmQgaW5zaWRlIGxhcmdlIGZyYW1lYnVmZmVycy4KClRoZSBpbXBsZW1lbnRhdGlvbiBpcyBpOTE1 IHNwZWNpZmljIGZvciBub3cgc2luY2UgSSBjaG9zZSB0byB1c2UKcmVuZGVyY29weS9ibGl0dGVy IHdoZW4gZ2VuZXJhdGluZyB0aGUgZnJhbWVidWZmZXIgY29udGVudHMuIFVzaW5nCnRoZSBub3Jt YWwgY2Fpcm8gc3R1ZmYgd2FzIGp1c3QgdG9vIHNsb3cgd2hlbiBkZWFsaW5nIHdpdGggMUdpQisK ZnJhbWVidWZmZXJzLiBJdCBzaG91bGRuJ3QgYmUgdG9vIGhhcmQgdG8gcGx1ZyBpbiBzb21lIG90 aGVyIG1lY2hhbmlzbXMKaWYgc29tZW9uZSBlbHNlIHdhbnRzIHRvIHJldXNlIHRoaXMgdGVzdC4K CnYyOiBBZGQgaWd0X3JlcXVpcmUoZm9ybWF0K21vZCkgZm9yIHRoZSBhZGRmYi9vdmVyZmxvdyB0 ZXN0cwogICAgVW5zZXQgcGxhbmUgZmIgYWZ0ZXIgVEVTVF9PTkxZIGZhaWwKICAgIExpbWl0IG1h eCBmYiB0byBhdCBtb3N0IDEvMiBSQU0gb3IgR1BVIGFkZHJlc3Mgc3BhY2UKICAgIFR3ZWFrIGNv b3JkcyB0byBhdm9pZCBmYWlscyB3aXRoIDY0YnBwIGxpbmVhciB3aXRoIDRrIHNjcmVlbgogICAg TWFrZSBjb29yZHMgZXZlbiBmb3IgOTAvMjcwIHJvdGF0ZWQgMTZicHAKICAgIFN0b3JlIGJwcCBh cyB1aW50OF90IGluc3RlYWQgb2Ygd2FzdGluZyBhbiBlbnRpcmUgY2hhcioKdjM6IEFkZCBibGl0 dGVyIHBhdGggZm9yIGdlbjMgKHJlbmRlciBlbmdpbmUgaXMgbm90IGNhcGFibGUgb2YKICAgIGhh bmRsaW5nIGJpZyBmYnMpLgogICAgU2V0IGZlbmNlIHRpbGluZyBvbiBnZW4yLzMgaW4gcmF3IGFk ZGZiIHRlc3RzLgogICAgRGVhbCB3aXRoIHdlYWsgbWF4IGZlbmNlIHN0cmlkZSBvbiBnZW4zLgog ICAgRG9uJ3QgdHJ5IHRvIHVzZSByb3RhdGlvbiB3aGVuIHRoZSBwcm9wIGlzbid0IHByZXNlbnQu CiAgICBTa2lwIDkwLzI3MCB0ZXN0IGZvciBnZW40IChubyBhdG9taWMgb24gdGhvc2UgeWV0IHNv IHdlCiAgICBjYW4ndCBuZWF0bHkgY2hlY2sgd2hhdCdzIHN1cHBvcnRlZCkuCiAgICBLZXJuZWwg cmVzdHJpY3RzIHNjYW5vdXQgdG8gbWFwcGFibGUgcG9ydGlvbiBvZiBnZ3R0IG9uCiAgICBnbWNo IHBsYXRmb3Jtcywgc28gY2hlY2sgaXRzIHNpemUgYXMgd2VsbAogICAgVXNlIHRoZSBjb3JyZWN0 IGZiIGZvciB0aGUgbGVnYWN5IHNldGNydGMKdjQ6IERvbid0IGlndF9za2lwKCkgaW5zaWRlIHRl c3RfcGxhbmUoKSAoRGFuaWVsKQogICAgRG9jdW1lbnQgdGhhdCB3ZSBleHBlY3QgdGhlIGtlcm5l bCB0byBtYWtlCiAgICBzdXJlIG1heCBmYiBzaXplIGlzIHN0aWxsIHJlbmRlcmFibGUgKERhbmll bCkKClNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5p bnRlbC5jb20+ClJldmlld2VkLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xs LmNoPgotLS0KIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgfCAgIDEgKwogdGVzdHMva21zX2JpZ19m Yi5jICAgICB8IDY3MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog dGVzdHMvbWVzb24uYnVpbGQgICAgICB8ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDY3MiBpbnNl cnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX2JpZ19mYi5jCgpkaWZmIC0t Z2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKaW5k ZXggN2Y5MjFmNmM1OTg4Li4yZDVjOTI5ZTMyZmMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL01ha2VmaWxl LnNvdXJjZXMKKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwpAQCAtMjcsNiArMjcsNyBAQCBU RVNUU19wcm9ncyA9IFwKIAlrbXNfYXRvbWljX2ludGVycnVwdGlibGUgXAogCWttc19hdG9taWNf dHJhbnNpdGlvbiBcCiAJa21zX2F2YWlsYWJsZV9tb2Rlc19jcmMgXAorCWttc19iaWdfZmIgXAog CWttc19idXN5IFwKIAlrbXNfY2NzIFwKIAlrbXNfY29sb3IgXApkaWZmIC0tZ2l0IGEvdGVzdHMv a21zX2JpZ19mYi5jIGIvdGVzdHMva21zX2JpZ19mYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uMmY4OTgwNzRhZDU0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMv a21zX2JpZ19mYi5jCkBAIC0wLDAgKzEsNjcwIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTkg SW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBt b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29y IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFn cmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIK KyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09G VFdBUkUuCisgKi8KKworI2luY2x1ZGUgImlndC5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5j bHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+ CisKK0lHVF9URVNUX0RFU0NSSVBUSU9OKCJUZXN0IGJpZyBmcmFtZWJ1ZmZlcnMiKTsKKwordHlw ZWRlZiBzdHJ1Y3QgeworCWludCBkcm1fZmQ7CisJdWludDMyX3QgZGV2aWQ7CisJaWd0X2Rpc3Bs YXlfdCBkaXNwbGF5OworCWVudW0gcGlwZSBwaXBlOworCWlndF9vdXRwdXRfdCAqb3V0cHV0Owor CWlndF9wbGFuZV90ICpwbGFuZTsKKwlpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmM7CisJc3RydWN0 IGlndF9mYiBzbWFsbF9mYiwgYmlnX2ZiOworCXVpbnQzMl90IGZvcm1hdDsKKwl1aW50NjRfdCBt b2RpZmllcjsKKwlpbnQgd2lkdGgsIGhlaWdodDsKKwlpZ3Rfcm90YXRpb25fdCByb3RhdGlvbjsK KwlpbnQgbWF4X2ZiX3dpZHRoLCBtYXhfZmJfaGVpZ2h0OworCXVpbnQ2NF90IHJhbV9zaXplLCBh cGVyX3NpemUsIG1hcHBhYmxlX3NpemU7CisJaWd0X3JlbmRlcl9jb3B5ZnVuY190IHJlbmRlcl9j b3B5OworCWRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1ncjsKKwlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoOworfSBkYXRhX3Q7CisKK3N0YXRpYyB2b2lkIGluaXRfYnVmKGRhdGFfdCAqZGF0 YSwKKwkJICAgICBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAorCQkgICAgIGNvbnN0IHN0cnVjdCBpZ3Rf ZmIgKmZiLAorCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWd0X2Fzc2VydF9lcShmYi0+ b2Zmc2V0c1swXSwgMCk7CisKKwlidWYtPmJvID0gZ2VtX2hhbmRsZV90b19saWJkcm1fYm8oZGF0 YS0+YnVmbWdyLCBkYXRhLT5kcm1fZmQsCisJCQkJCSAgbmFtZSwgZmItPmdlbV9oYW5kbGUpOwor CWJ1Zi0+dGlsaW5nID0gaWd0X2ZiX21vZF90b190aWxpbmcoZmItPm1vZGlmaWVyKTsKKwlidWYt PnN0cmlkZSA9IGZiLT5zdHJpZGVzWzBdOworCWJ1Zi0+YnBwID0gZmItPnBsYW5lX2JwcFswXTsK KwlidWYtPnNpemUgPSBmYi0+c2l6ZTsKK30KKworc3RhdGljIHZvaWQgZmluaV9idWYoc3RydWN0 IGlndF9idWYgKmJ1ZikKK3sKKwlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2UoYnVmLT5ibyk7Cit9 CisKK3N0YXRpYyB2b2lkIGNvcHlfcGF0dGVybihkYXRhX3QgKmRhdGEsCisJCQkgc3RydWN0IGln dF9mYiAqZHN0X2ZiLCBpbnQgZHgsIGludCBkeSwKKwkJCSBzdHJ1Y3QgaWd0X2ZiICpzcmNfZmIs IGludCBzeCwgaW50IHN5LAorCQkJIGludCB3LCBpbnQgaCkKK3sKKwlzdHJ1Y3QgaWd0X2J1ZiBz cmMgPSB7fSwgZHN0ID0ge307CisKKwlpbml0X2J1ZihkYXRhLCAmc3JjLCBzcmNfZmIsICJiaWcg ZmIgc3JjIik7CisJaW5pdF9idWYoZGF0YSwgJmRzdCwgZHN0X2ZiLCAiYmlnIGZiIGRzdCIpOwor CisJZ2VtX3NldF9kb21haW4oZGF0YS0+ZHJtX2ZkLCBkc3RfZmItPmdlbV9oYW5kbGUsCisJCSAg ICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKKwlnZW1fc2V0 X2RvbWFpbihkYXRhLT5kcm1fZmQsIHNyY19mYi0+Z2VtX2hhbmRsZSwKKwkJICAgICAgIEk5MTVf R0VNX0RPTUFJTl9HVFQsIDApOworCisJLyoKKwkgKiBXZSBleHBlY3QgdGhlIGtlcm5lbCB0byBs aW1pdCB0aGUgbWF4IGZiCisJICogc2l6ZS9zdHJpZGUgdG8gc29tZXRoaW5nIHRoYXQgY2FuIHN0 aWxsCisJICogcmVuZGVyZWQgd2l0aCB0aGUgYmxpdHRlci9yZW5kZXIgZW5naW5lLgorCSAqLwor CWlmIChkYXRhLT5yZW5kZXJfY29weSkgeworCQlkYXRhLT5yZW5kZXJfY29weShkYXRhLT5iYXRj aCwgTlVMTCwgJnNyYywgc3gsIHN5LCB3LCBoLCAmZHN0LCBkeCwgZHkpOworCX0gZWxzZSB7CisJ CXcgPSBtaW4odywgc3JjX2ZiLT53aWR0aCAtIHN4KTsKKwkJdyA9IG1pbih3LCBkc3RfZmItPndp ZHRoIC0gZHgpOworCisJCWggPSBtaW4oaCwgc3JjX2ZiLT5oZWlnaHQgLSBzeSk7CisJCWggPSBt aW4oaCwgZHN0X2ZiLT5oZWlnaHQgLSBkeSk7CisKKwkJaW50ZWxfYmx0X2NvcHkoZGF0YS0+YmF0 Y2gsIHNyYy5ibywgc3gsIHN5LCBzcmMuc3RyaWRlLAorCQkJICAgICAgIGRzdC5ibywgZHgsIGR5 LCBkc3Quc3RyaWRlLCB3LCBoLCBkc3QuYnBwKTsKKwl9CisKKwlmaW5pX2J1ZigmZHN0KTsKKwlm aW5pX2J1Zigmc3JjKTsKK30KKworc3RhdGljIHZvaWQgZ2VuZXJhdGVfcGF0dGVybihkYXRhX3Qg KmRhdGEsCisJCQkgICAgIHN0cnVjdCBpZ3RfZmIgKmZiLAorCQkJICAgICBpbnQgdywgaW50IGgp Cit7CisJc3RydWN0IGlndF9mYiBwYXRfZmI7CisKKwlpZ3RfY3JlYXRlX3BhdHRlcm5fZmIoZGF0 YS0+ZHJtX2ZkLCB3LCBoLAorCQkJICAgICAgZGF0YS0+Zm9ybWF0LCBkYXRhLT5tb2RpZmllciwK KwkJCSAgICAgICZwYXRfZmIpOworCisJZm9yIChpbnQgeSA9IDA7IHkgPCBmYi0+aGVpZ2h0OyB5 ICs9IGgpIHsKKwkJZm9yIChpbnQgeCA9IDA7IHggPCBmYi0+d2lkdGg7IHggKz0gdykgeworCQkJ Y29weV9wYXR0ZXJuKGRhdGEsIGZiLCB4LCB5LAorCQkJCSAgICAgJnBhdF9mYiwgMCwgMCwKKwkJ CQkgICAgIHBhdF9mYi53aWR0aCwgcGF0X2ZiLmhlaWdodCk7CisJCQl3Kys7CisJCQloKys7CisJ CX0KKwl9CisKKwlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJnBhdF9mYik7Cit9CisKK3N0 YXRpYyBib29sIHNpemVfb2soZGF0YV90ICpkYXRhLCB1aW50NjRfdCBzaXplKQoreworCS8qCisJ ICogVGhlIGtlcm5lbCBsaW1pdHMgc2Nhbm91dCB0byB0aGUKKwkgKiBtYXBwYWJsZSBwb3J0aW9u IG9mIGdndHQgb24gZ21jaCBwbGF0Zm9ybXMuCisJICovCisJaWYgKChpbnRlbF9nZW4oZGF0YS0+ ZGV2aWQpIDwgNSB8fAorCSAgICAgSVNfVkFMTEVZVklFVyhkYXRhLT5kZXZpZCkgfHwKKwkgICAg IElTX0NIRVJSWVZJRVcoZGF0YS0+ZGV2aWQpKSAmJgorCSAgICBzaXplID4gZGF0YS0+bWFwcGFi bGVfc2l6ZSAvIDIpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogTGltaXQgdGhlIGJpZyBm YiBzaXplIHRvIGF0IG1vc3QgaGFsZiB0aGUgUkFNIG9yIGhhbGYKKwkgKiB0aGUgYXBlcnR1cmUg c2l6ZS4gQ291bGQgZ28gYSBiaXQgaGlnaGVyIEkgc3VwcG9zZSBzaW5jZQorCSAqIHdlIHNob3Vs ZG4ndCBuZWVkIG1vcmUgdGhhbiBvbmUgYmlnIGZiIGF0IGEgdGltZS4KKwkgKi8KKwlpZiAoc2l6 ZSA+IGRhdGEtPnJhbV9zaXplIC8gMiB8fCBzaXplID4gZGF0YS0+YXBlcl9zaXplIC8gMikKKwkJ cmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKworc3RhdGljIHZvaWQgbWF4X2Zi X3NpemUoZGF0YV90ICpkYXRhLCBpbnQgKndpZHRoLCBpbnQgKmhlaWdodCwKKwkJCXVpbnQzMl90 IGZvcm1hdCwgdWludDY0X3QgbW9kaWZpZXIpCit7CisJdW5zaWduZWQgaW50IHN0cmlkZTsKKwl1 aW50NjRfdCBzaXplOworCWludCBpID0gMDsKKworCSp3aWR0aCA9IGRhdGEtPm1heF9mYl93aWR0 aDsKKwkqaGVpZ2h0ID0gZGF0YS0+bWF4X2ZiX2hlaWdodDsKKworCS8qIG1heCBmZW5jZSBzdHJp ZGUgaXMgb25seSA4ayBieXRlcyBvbiBnZW4zICovCisJaWYgKGludGVsX2dlbihkYXRhLT5kZXZp ZCkgPCA0ICYmCisJICAgIGZvcm1hdCA9PSBEUk1fRk9STUFUX1hSR0I4ODg4KQorCQkqd2lkdGgg PSBtaW4oKndpZHRoLCA4MTkyIC8gNCk7CisKKwlpZ3RfY2FsY19mYl9zaXplKGRhdGEtPmRybV9m ZCwgKndpZHRoLCAqaGVpZ2h0LAorCQkJIGZvcm1hdCwgbW9kaWZpZXIsICZzaXplLCAmc3RyaWRl KTsKKworCXdoaWxlICghc2l6ZV9vayhkYXRhLCBzaXplKSkgeworCQlpZiAoaSsrICYgMSkKKwkJ CSp3aWR0aCA+Pj0gMTsKKwkJZWxzZQorCQkJKmhlaWdodCA+Pj0gMTsKKworCQlpZ3RfY2FsY19m Yl9zaXplKGRhdGEtPmRybV9mZCwgKndpZHRoLCAqaGVpZ2h0LAorCQkJCSBmb3JtYXQsIG1vZGlm aWVyLCAmc2l6ZSwgJnN0cmlkZSk7CisJfQorCisJaWd0X2luZm8oIk1heCB1c2FibGUgZnJhbWVi dWZmZXIgc2l6ZSBmb3IgZm9ybWF0ICJJR1RfRk9STUFUX0ZNVCIgLyBtb2RpZmllciAweCUiUFJJ eDY0IjogJWR4JWRcbiIsCisJCSBJR1RfRk9STUFUX0FSR1MoZm9ybWF0KSwgbW9kaWZpZXIsCisJ CSAqd2lkdGgsICpoZWlnaHQpOworfQorCitzdGF0aWMgYm9vbCB0ZXN0X3BsYW5lKGRhdGFfdCAq ZGF0YSkKK3sKKwlpZ3RfcGxhbmVfdCAqcGxhbmUgPSBkYXRhLT5wbGFuZTsKKwlzdHJ1Y3QgaWd0 X2ZiICpzbWFsbF9mYiA9ICZkYXRhLT5zbWFsbF9mYjsKKwlzdHJ1Y3QgaWd0X2ZiICpiaWdfZmIg PSAmZGF0YS0+YmlnX2ZiOworCWludCB3ID0gYmlnX2ZiLT53aWR0aCAtIHNtYWxsX2ZiLT53aWR0 aDsKKwlpbnQgaCA9IGJpZ19mYi0+aGVpZ2h0IC0gc21hbGxfZmItPmhlaWdodDsKKwlzdHJ1Y3Qg eworCQlpbnQgeCwgeTsKKwl9IGNvb3Jkc1tdID0geworCQkvKiBidW5jaCBvZiBjb29yZGluYXRl cyBwdWxsZWQgb3V0IG9mIHRoaW4gYWlyICovCisJCXsgMCwgMCwgfSwKKwkJeyB3ICogNCAvIDcs IGggLyA1LCB9LAorCQl7IHcgKiAzIC8gNywgaCAvIDMsIH0sCisJCXsgdyAvIDIsIGggLyAyLCB9 LAorCQl7IHcgLyAzLCBoICogMyAvIDQsIH0sCisJCXsgdywgaCwgfSwKKwl9OworCisJaWYgKCFp Z3RfcGxhbmVfaGFzX2Zvcm1hdF9tb2QocGxhbmUsIGRhdGEtPmZvcm1hdCwgZGF0YS0+bW9kaWZp ZXIpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoZGF0YS0+cm90YXRpb24gIT0gSUdUX1JPVEFU SU9OXzAgJiYKKwkgICAgIWlndF9wbGFuZV9oYXNfcHJvcChwbGFuZSwgSUdUX1BMQU5FX1JPVEFU SU9OKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogRklYTUUgbmVlZCBhdG9taWMgb24gaTk2NS9n NHggKi8KKwlpZiAoZGF0YS0+cm90YXRpb24gIT0gSUdUX1JPVEFUSU9OXzAgJiYKKwkgICAgZGF0 YS0+cm90YXRpb24gIT0gSUdUX1JPVEFUSU9OXzE4MCAmJgorCSAgICAhZGF0YS0+ZGlzcGxheS5p c19hdG9taWMpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChpZ3RfcGxhbmVfaGFzX3Byb3AocGxh bmUsIElHVF9QTEFORV9ST1RBVElPTikpCisJCWlndF9wbGFuZV9zZXRfcm90YXRpb24ocGxhbmUs IGRhdGEtPnJvdGF0aW9uKTsKKwlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCAwLCAwKTsK KworCWZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb29yZHMpOyBpKyspIHsKKwkJaWd0 X2NyY190IHNtYWxsX2NyYywgYmlnX2NyYzsKKwkJaW50IHggPSBjb29yZHNbaV0ueDsKKwkJaW50 IHkgPSBjb29yZHNbaV0ueTsKKworCQkvKiBIYXJkd2FyZSBsaW1pdGF0aW9uICovCisJCWlmIChk YXRhLT5mb3JtYXQgPT0gRFJNX0ZPUk1BVF9SR0I1NjUgJiYKKwkJICAgIChkYXRhLT5yb3RhdGlv biA9PSBJR1RfUk9UQVRJT05fOTAgfHwKKwkJICAgICBkYXRhLT5yb3RhdGlvbiA9PSBJR1RfUk9U QVRJT05fMjcwKSkgeworCQkJeCAmPSB+MTsKKwkJCXkgJj0gfjE7CisJCX0KKworCQkvKgorCQkg KiBNYWtlIGEgMToxIGNvcHkgb2YgdGhlIGRlc2lyZWQgcGFydCBvZiB0aGUgYmlnIGZiCisJCSAq IHJhdGhlciB0aGFuIHRyeSB0byByZW5kZXIgdGhlIHNhbWUgcGF0dGVybiAodHJhbnNsYXRlZAor CQkgKiBhY2NvcmRpbmx5KSBhZ2FpbiB2aWEgY2Fpcm8uIFNvbWV0aGluZyBpbiBjYWlybydzCisJ CSAqIHJlbmRlcmluZyBwaXBlbGluZSBpbnRyb2R1Y2VzIHNsaWdodCBkaWZmZXJlbmNlcyBpbnRv CisJCSAqIHRoZSByZXN1bHQgaWYgd2UgdHJ5IHRoYXQsIGFuZCBzbyB0aGUgY3JjIHdpbGwgbm90 IG1hdGNoLgorCQkgKi8KKwkJY29weV9wYXR0ZXJuKGRhdGEsIHNtYWxsX2ZiLCAwLCAwLCBiaWdf ZmIsIHgsIHksCisJCQkgICAgIHNtYWxsX2ZiLT53aWR0aCwgc21hbGxfZmItPmhlaWdodCk7CisK KwkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgc21hbGxfZmIpOworCQlpZ3RfcGxhbmVfc2V0X3Np emUocGxhbmUsIGRhdGEtPndpZHRoLCBkYXRhLT5oZWlnaHQpOworCisJCS8qCisJCSAqIFRyeSB0 byBjaGVjayB0aGF0IHRoZSByb3RhdGlvbitmb3JtYXQrbW9kaWZpZXIKKwkJICogY29tYm8gaXMg c3VwcG9ydGVkLgorCQkgKi8KKwkJaWYgKGkgPT0gMCAmJiBkYXRhLT5kaXNwbGF5LmlzX2F0b21p YyAmJgorCQkgICAgaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdF9hdG9taWMoJmRhdGEtPmRpc3BsYXks CisJCQkJCQkgIERSTV9NT0RFX0FUT01JQ19URVNUX09OTFksCisJCQkJCQkgIE5VTEwpICE9IDAp IHsKKwkJCWlmIChpZ3RfcGxhbmVfaGFzX3Byb3AocGxhbmUsIElHVF9QTEFORV9ST1RBVElPTikp CisJCQkJaWd0X3BsYW5lX3NldF9yb3RhdGlvbihwbGFuZSwgSUdUX1JPVEFUSU9OXzApOworCQkJ aWd0X3BsYW5lX3NldF9mYihwbGFuZSwgTlVMTCk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwor CQlpZ3RfZGlzcGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LCBkYXRhLT5kaXNwbGF5LmlzX2F0 b21pYyA/CisJCQkJICAgIENPTU1JVF9BVE9NSUMgOiBDT01NSVRfVU5JVkVSU0FMKTsKKworCisJ CWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJnNtYWxsX2NyYyk7CisK KwkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgYmlnX2ZiKTsKKwkJaWd0X2ZiX3NldF9wb3NpdGlv bihiaWdfZmIsIHBsYW5lLCB4LCB5KTsKKwkJaWd0X2ZiX3NldF9zaXplKGJpZ19mYiwgcGxhbmUs IHNtYWxsX2ZiLT53aWR0aCwgc21hbGxfZmItPmhlaWdodCk7CisJCWlndF9wbGFuZV9zZXRfc2l6 ZShwbGFuZSwgZGF0YS0+d2lkdGgsIGRhdGEtPmhlaWdodCk7CisJCWlndF9kaXNwbGF5X2NvbW1p dDIoJmRhdGEtPmRpc3BsYXksIGRhdGEtPmRpc3BsYXkuaXNfYXRvbWljID8KKwkJCQkgICAgQ09N TUlUX0FUT01JQyA6IENPTU1JVF9VTklWRVJTQUwpOworCisJCWlndF9waXBlX2NyY19jb2xsZWN0 X2NyYyhkYXRhLT5waXBlX2NyYywgJmJpZ19jcmMpOworCisJCWlndF9wbGFuZV9zZXRfZmIocGxh bmUsIE5VTEwpOworCisJCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZiaWdfY3JjLCAmc21hbGxfY3Jj KTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgdGVzdF9waXBlKGRhdGFf dCAqZGF0YSkKK3sKKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7CisJaWd0X3BsYW5lX3QgKnByaW1h cnk7CisJaW50IHdpZHRoLCBoZWlnaHQ7CisJYm9vbCByZXQgPSBmYWxzZTsKKworCW1vZGUgPSBp Z3Rfb3V0cHV0X2dldF9tb2RlKGRhdGEtPm91dHB1dCk7CisKKwlkYXRhLT53aWR0aCA9IG1vZGUt PmhkaXNwbGF5OworCWRhdGEtPmhlaWdodCA9IG1vZGUtPnZkaXNwbGF5OworCisJd2lkdGggPSBt b2RlLT5oZGlzcGxheTsKKwloZWlnaHQgPSBtb2RlLT52ZGlzcGxheTsKKwlpZiAoZGF0YS0+cm90 YXRpb24gPT0gSUdUX1JPVEFUSU9OXzkwIHx8CisJICAgIGRhdGEtPnJvdGF0aW9uID09IElHVF9S T1RBVElPTl8yNzApCisJCWlndF9zd2FwKHdpZHRoLCBoZWlnaHQpOworCisJaWd0X2NyZWF0ZV9j b2xvcl9mYihkYXRhLT5kcm1fZmQsIHdpZHRoLCBoZWlnaHQsCisJCQkgICAgZGF0YS0+Zm9ybWF0 LCBkYXRhLT5tb2RpZmllciwKKwkJCSAgICAwLCAxLCAwLCAmZGF0YS0+c21hbGxfZmIpOworCisJ aWd0X291dHB1dF9zZXRfcGlwZShkYXRhLT5vdXRwdXQsIGRhdGEtPnBpcGUpOworCisJcHJpbWFy eSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lX3R5cGUoZGF0YS0+b3V0cHV0LCBEUk1fUExBTkVfVFlQ RV9QUklNQVJZKTsKKwlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksIE5VTEwpOworCisJaWYgKCFk YXRhLT5kaXNwbGF5LmlzX2F0b21pYykgeworCQlzdHJ1Y3QgaWd0X2ZiIGZiOworCisJCWlndF9j cmVhdGVfZmIoZGF0YS0+ZHJtX2ZkLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCisJ CQkgICAgICBEUk1fRk9STUFUX1hSR0I4ODg4LCBEUk1fRk9STUFUX01PRF9MSU5FQVIsCisJCQkg ICAgICAmZmIpOworCisJCS8qIGxlZ2FjeSBzZXRjcnRjIG5lZWRzIGFuIGZiICovCisJCWlndF9w bGFuZV9zZXRfZmIocHJpbWFyeSwgJmZiKTsKKwkJaWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0YS0+ ZGlzcGxheSwgQ09NTUlUX0xFR0FDWSk7CisKKwkJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCBO VUxMKTsKKwkJaWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgQ09NTUlUX1VOSVZF UlNBTCk7CisKKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQsICZmYik7CisJfQorCisJaWd0 X2Rpc3BsYXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgZGF0YS0+ZGlzcGxheS5pc19hdG9taWMg PworCQkJICAgIENPTU1JVF9BVE9NSUMgOiBDT01NSVRfVU5JVkVSU0FMKTsKKworCWRhdGEtPnBp cGVfY3JjID0gaWd0X3BpcGVfY3JjX25ldyhkYXRhLT5kcm1fZmQsIGRhdGEtPnBpcGUsCisJCQkJ CSAgSU5URUxfUElQRV9DUkNfU09VUkNFX0FVVE8pOworCisJZm9yX2VhY2hfcGxhbmVfb25fcGlw ZSgmZGF0YS0+ZGlzcGxheSwgZGF0YS0+cGlwZSwgZGF0YS0+cGxhbmUpIHsKKwkJcmV0ID0gdGVz dF9wbGFuZShkYXRhKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0KKworCWlndF9waXBlX2Ny Y19mcmVlKGRhdGEtPnBpcGVfY3JjKTsKKworCWlndF9vdXRwdXRfc2V0X3BpcGUoZGF0YS0+b3V0 cHV0LCBQSVBFX0FOWSk7CisJaWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgZGF0 YS0+ZGlzcGxheS5pc19hdG9taWMgPworCQkJICAgIENPTU1JVF9BVE9NSUMgOiBDT01NSVRfVU5J VkVSU0FMKTsKKworCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZGF0YS0+c21hbGxfZmIp OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdGVzdF9zY2Fub3V0KGRhdGFfdCAq ZGF0YSkKK3sKKwlmb3JfZWFjaF9waXBlX3dpdGhfdmFsaWRfb3V0cHV0KCZkYXRhLT5kaXNwbGF5 LCBkYXRhLT5waXBlLCBkYXRhLT5vdXRwdXQpIHsKKwkJaWYgKHRlc3RfcGlwZShkYXRhKSkKKwkJ CXJldHVybjsKKwl9CisKKwlpZ3Rfc2tpcCgidW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvblxuIik7 Cit9CisKK3N0YXRpYyB2b2lkIHByZXBfZmIoZGF0YV90ICpkYXRhKQoreworCWludCB3aWR0aCwg aGVpZ2h0OworCisJaWYgKGRhdGEtPmJpZ19mYi5mYl9pZCkKKwkJcmV0dXJuOworCisJbWF4X2Zi X3NpemUoZGF0YSwgJndpZHRoLCAmaGVpZ2h0LAorCQkgICAgZGF0YS0+Zm9ybWF0LCBkYXRhLT5t b2RpZmllcik7CisKKwlpZ3RfY3JlYXRlX2ZiKGRhdGEtPmRybV9mZCwgd2lkdGgsIGhlaWdodCwK KwkJICAgICAgZGF0YS0+Zm9ybWF0LCBkYXRhLT5tb2RpZmllciwKKwkJICAgICAgJmRhdGEtPmJp Z19mYik7CisKKwlnZW5lcmF0ZV9wYXR0ZXJuKGRhdGEsICZkYXRhLT5iaWdfZmIsIDY0MCwgNDgw KTsKK30KKworc3RhdGljIHZvaWQgY2xlYW51cF9mYihkYXRhX3QgKmRhdGEpCit7CisJaWd0X3Jl bW92ZV9mYihkYXRhLT5kcm1fZmQsICZkYXRhLT5iaWdfZmIpOworCWRhdGEtPmJpZ19mYi5mYl9p ZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3NpemVfb3ZlcmZsb3coZGF0YV90ICpkYXRh KQoreworCXVpbnQzMl90IGZiX2lkOworCXVpbnQzMl90IGJvOworCXVpbnQzMl90IG9mZnNldHNb NF0gPSB7fTsKKwl1aW50MzJfdCBzdHJpZGVzWzRdID0geyAyNTYqMTAyNCwgfTsKKwlpbnQgcmV0 OworCisJaWd0X3JlcXVpcmUoaWd0X2Rpc3BsYXlfaGFzX2Zvcm1hdF9tb2QoJmRhdGEtPmRpc3Bs YXksCisJCQkJCSAgICAgICBEUk1fRk9STUFUX1hSR0I4ODg4LAorCQkJCQkgICAgICAgZGF0YS0+ bW9kaWZpZXIpKTsKKworCS8qCisJICogVHJ5IHRvIGhpdCBhIHNwZWNpZmljIGludGVnZXIgb3Zl cmZsb3cgaW4gaTkxNSBmYiBzaXplCisJICogY2FsY3VsYXRpb25zLiAyNTZrICogMTZrID09IDE8 PDMyIHdoaWNoIGlzIGNoZWNrZWQKKwkgKiBhZ2FpbnN0IHRoZSBibyBzaXplLiBUaGUgY2hlY2sg c2hvdWxkIGZhaWwgb24gYWNjb3VudAorCSAqIG9mIHRoZSBibyBiZWluZyBzbWFsbGVyLCBidXQg ZHVlIHRvIHRoZSBvdmVyZmxvdyB0aGUKKwkgKiBjb21wdXRlZCBmYiBzaXplIGlzIDAgYW5kIHRo dXMgdGhlIGNoZWNrIG5ldmVyIHRyaXBzLgorCSAqLworCWlndF9yZXF1aXJlKGRhdGEtPm1heF9m Yl93aWR0aCA+PSAxNjM4MyAmJgorCQkgICAgZGF0YS0+bWF4X2ZiX2hlaWdodCA+PSAxNjM4Myk7 CisKKwlibyA9IGdlbV9jcmVhdGUoZGF0YS0+ZHJtX2ZkLCAoMVVMTCA8PCAzMikgLSA0MDk2KTsK KwlpZ3RfcmVxdWlyZShibyk7CisKKwlyZXQgPSBfX2ttc19hZGRmYihkYXRhLT5kcm1fZmQsIGJv LAorCQkJICAxNjM4MywgMTYzODMsCisJCQkgIERSTV9GT1JNQVRfWFJHQjg4ODgsCisJCQkgIGRh dGEtPm1vZGlmaWVyLAorCQkJICBzdHJpZGVzLCBvZmZzZXRzLCAxLAorCQkJICBEUk1fTU9ERV9G Ql9NT0RJRklFUlMsICZmYl9pZCk7CisKKwlpZ3RfYXNzZXJ0X25lcShyZXQsIDApOworCisJZ2Vt X2Nsb3NlKGRhdGEtPmRybV9mZCwgYm8pOworfQorCitzdGF0aWMgdm9pZAordGVzdF9zaXplX29m ZnNldF9vdmVyZmxvdyhkYXRhX3QgKmRhdGEpCit7CisJdWludDMyX3QgZmJfaWQ7CisJdWludDMy X3QgYm87CisJdWludDMyX3Qgb2Zmc2V0c1s0XSA9IHt9OworCXVpbnQzMl90IHN0cmlkZXNbNF0g PSB7IDgxOTIsIH07CisJaW50IHJldDsKKworCWlndF9yZXF1aXJlKGlndF9kaXNwbGF5X2hhc19m b3JtYXRfbW9kKCZkYXRhLT5kaXNwbGF5LAorCQkJCQkgICAgICAgRFJNX0ZPUk1BVF9OVjEyLAor CQkJCQkgICAgICAgZGF0YS0+bW9kaWZpZXIpKTsKKworCS8qCisJICogVHJ5IHRvIGhpdCBhIHNw ZWNpZmljIGludGVnZXIgb3ZlcmZsb3cgaW4gaTkxNSBmYiBzaXplCisJICogY2FsY3VsYXRpb25z LiBUaGlzIHRpbWUgaXQncyBvZmZzZXRzWzFdICsgdGhlIHRpbGUKKwkgKiBhbGlnbmVkIGNocm9t YSBwbGFuZSBzaXplIHRoYXQgb3ZlcmZsb3dzIGFuZAorCSAqIGluY29ycmVjdGx5IHBhc3NlcyB0 aGUgYm8gc2l6ZSBjaGVjay4KKwkgKi8KKwlpZ3RfcmVxdWlyZShpZ3RfZGlzcGxheV9oYXNfZm9y bWF0X21vZCgmZGF0YS0+ZGlzcGxheSwKKwkJCQkJICAgICAgIERSTV9GT1JNQVRfTlYxMiwKKwkJ CQkJICAgICAgIGRhdGEtPm1vZGlmaWVyKSk7CisKKwlibyA9IGdlbV9jcmVhdGUoZGF0YS0+ZHJt X2ZkLCAoMVVMTCA8PCAzMikgLSA0MDk2KTsKKwlpZ3RfcmVxdWlyZShibyk7CisKKwlvZmZzZXRz WzBdID0gMDsKKwlvZmZzZXRzWzFdID0gKDFVTEwgPDwgMzIpIC0gODE5MiAqIDQwOTY7CisKKwly ZXQgPSBfX2ttc19hZGRmYihkYXRhLT5kcm1fZmQsIGJvLAorCQkJICA4MTkyLCA4MTg4LAorCQkJ ICBEUk1fRk9STUFUX05WMTIsCisJCQkgIGRhdGEtPm1vZGlmaWVyLAorCQkJICBzdHJpZGVzLCBv ZmZzZXRzLCAxLAorCQkJICBEUk1fTU9ERV9GQl9NT0RJRklFUlMsICZmYl9pZCk7CisJaWd0X2Fz c2VydF9uZXEocmV0LCAwKTsKKworCWdlbV9jbG9zZShkYXRhLT5kcm1fZmQsIGJvKTsKK30KKwor c3RhdGljIGludCBybWZiKGludCBmZCwgdWludDMyX3QgaWQpCit7CisJaW50IGVycjsKKworCWVy ciA9IDA7CisJaWYgKGlndF9pb2N0bChmZCwgRFJNX0lPQ1RMX01PREVfUk1GQiwgJmlkKSkKKwkJ ZXJyID0gLWVycm5vOworCisJZXJybm8gPSAwOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2 b2lkCit0ZXN0X2FkZGZiKGRhdGFfdCAqZGF0YSkKK3sKKwl1aW50NjRfdCBzaXplOworCXVpbnQz Ml90IGZiX2lkOworCXVpbnQzMl90IGJvOworCXVpbnQzMl90IG9mZnNldHNbNF0gPSB7fTsKKwl1 aW50MzJfdCBzdHJpZGVzWzRdID0ge307CisJdWludDMyX3QgZm9ybWF0OworCWludCByZXQ7CisK KwkvKgorCSAqIGdlbjMgbWF4IHRpbGVkIHN0cmlkZSBpcyA4ayBieXRlcywgYnV0CisJICogbWF4 IGZiIHNpemUgb2YgNGsgcGl4ZWxzLCBoZW5jZSB3ZSBjYW4ndCB0ZXN0CisJICogd2l0aCAzMmJw cCBhbmQgbXVzdCB1c2UgMTZicHAgaW5zdGVhZC4KKwkgKi8KKwlpZiAoaW50ZWxfZ2VuKGRhdGEt PmRldmlkKSA9PSAzKQorCQlmb3JtYXQgPSBEUk1fRk9STUFUX1JHQjU2NTsKKwllbHNlCisJCWZv cm1hdCA9IERSTV9GT1JNQVRfWFJHQjg4ODg7CisKKwlpZ3RfcmVxdWlyZShpZ3RfZGlzcGxheV9o YXNfZm9ybWF0X21vZCgmZGF0YS0+ZGlzcGxheSwKKwkJCQkJICAgICAgIGZvcm1hdCwgZGF0YS0+ bW9kaWZpZXIpKTsKKworCWlndF9jYWxjX2ZiX3NpemUoZGF0YS0+ZHJtX2ZkLAorCQkJIGRhdGEt Pm1heF9mYl93aWR0aCwKKwkJCSBkYXRhLT5tYXhfZmJfaGVpZ2h0LAorCQkJIGZvcm1hdCwgZGF0 YS0+bW9kaWZpZXIsCisJCQkgJnNpemUsICZzdHJpZGVzWzBdKTsKKworCWJvID0gZ2VtX2NyZWF0 ZShkYXRhLT5kcm1fZmQsIHNpemUpOworCWlndF9yZXF1aXJlKGJvKTsKKworCWlmIChpbnRlbF9n ZW4oZGF0YS0+ZGV2aWQpIDwgNCkKKwkJZ2VtX3NldF90aWxpbmcoZGF0YS0+ZHJtX2ZkLCBibywK KwkJCSAgICAgICBpZ3RfZmJfbW9kX3RvX3RpbGluZyhkYXRhLT5tb2RpZmllciksIHN0cmlkZXNb MF0pOworCisJcmV0ID0gX19rbXNfYWRkZmIoZGF0YS0+ZHJtX2ZkLCBibywKKwkJCSAgZGF0YS0+ bWF4X2ZiX3dpZHRoLAorCQkJICBkYXRhLT5tYXhfZmJfaGVpZ2h0LAorCQkJICBmb3JtYXQsIGRh dGEtPm1vZGlmaWVyLAorCQkJICBzdHJpZGVzLCBvZmZzZXRzLCAxLAorCQkJICBEUk1fTU9ERV9G Ql9NT0RJRklFUlMsICZmYl9pZCk7CisJaWd0X2Fzc2VydF9lcShyZXQsIDApOworCisJcm1mYihk YXRhLT5kcm1fZmQsIGZiX2lkKTsKKwlnZW1fY2xvc2UoZGF0YS0+ZHJtX2ZkLCBibyk7Cit9CisK K3N0YXRpYyBkYXRhX3QgZGF0YTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJdWludDY0X3Qg bW9kaWZpZXI7CisJY29uc3QgY2hhciAqbmFtZTsKK30gbW9kaWZpZXJzW10gPSB7CisJeyBEUk1f Rk9STUFUX01PRF9MSU5FQVIsICJsaW5lYXIiLCB9LAorCXsgSTkxNV9GT1JNQVRfTU9EX1hfVElM RUQsICJ4LXRpbGVkIiwgfSwKKwl7IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVELCAieS10aWxlZCIs IH0sCisJeyBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQsICJ5Zi10aWxlZCIsIH0sCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IHsKKwl1aW50MzJfdCBmb3JtYXQ7CisJdWludDhfdCBicHA7Cit9 IGZvcm1hdHNbXSA9IHsKKwkvKiBGSVhNRSBpZ3RfZmIgZG9lc24ndCBzdXBwb3J0IEM4IGN1cnJl bnRseSAqLworCXsgRFJNX0ZPUk1BVF9DOCwgOCwgfSwKKwl7IERSTV9GT1JNQVRfUkdCNTY1LCAx NiwgfSwKKwl7IERSTV9GT1JNQVRfWFJHQjg4ODgsIDMyLCB9LAorCXsgRFJNX0ZPUk1BVF9YQkdS MTYxNjE2MTZGLCA2NCwgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWlndF9yb3Rh dGlvbl90IHJvdGF0aW9uOworCXVpbnQxNl90IGFuZ2xlOworfSByb3RhdGlvbnNbXSA9IHsKKwl7 IElHVF9ST1RBVElPTl8wLCAwLCB9LAorCXsgSUdUX1JPVEFUSU9OXzkwLCA5MCwgfSwKKwl7IElH VF9ST1RBVElPTl8xODAsIDE4MCwgfSwKKwl7IElHVF9ST1RBVElPTl8yNzAsIDI3MCwgfSwKK307 CisKK2lndF9tYWluCit7CisJaWd0X2ZpeHR1cmUgeworCQlkcm1Nb2RlUmVzUHRyIHJlczsKKwor CQlpZ3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7CisKKwkJZGF0YS5kcm1fZmQgPSBkcm1fb3Blbl9k cml2ZXJfbWFzdGVyKERSSVZFUl9JTlRFTCk7CisKKwkJaWd0X3JlcXVpcmUoaXNfaTkxNV9kZXZp Y2UoZGF0YS5kcm1fZmQpKTsKKworCQlkYXRhLmRldmlkID0gaW50ZWxfZ2V0X2RybV9kZXZpZChk YXRhLmRybV9mZCk7CisKKwkJa21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOworCisJCWln dF9yZXF1aXJlX3BpcGVfY3JjKGRhdGEuZHJtX2ZkKTsKKwkJaWd0X2Rpc3BsYXlfcmVxdWlyZSgm ZGF0YS5kaXNwbGF5LCBkYXRhLmRybV9mZCk7CisKKwkJcmVzID0gZHJtTW9kZUdldFJlc291cmNl cyhkYXRhLmRybV9mZCk7CisJCWlndF9hc3NlcnQocmVzKTsKKworCQlkYXRhLm1heF9mYl93aWR0 aCA9IHJlcy0+bWF4X3dpZHRoOworCQlkYXRhLm1heF9mYl9oZWlnaHQgPSByZXMtPm1heF9oZWln aHQ7CisKKwkJZHJtTW9kZUZyZWVSZXNvdXJjZXMocmVzKTsKKworCQlpZ3RfaW5mbygiTWF4IGRy aXZlciBmcmFtZWJ1ZmZlciBzaXplICVkeCVkXG4iLAorCQkJIGRhdGEubWF4X2ZiX3dpZHRoLCBk YXRhLm1heF9mYl9oZWlnaHQpOworCisJCWRhdGEucmFtX3NpemUgPSBpbnRlbF9nZXRfdG90YWxf cmFtX21iKCkgPDwgMjA7CisJCWRhdGEuYXBlcl9zaXplID0gZ2VtX2FwZXJ0dXJlX3NpemUoZGF0 YS5kcm1fZmQpOworCQlkYXRhLm1hcHBhYmxlX3NpemUgPSBnZW1fbWFwcGFibGVfYXBlcnR1cmVf c2l6ZSgpOworCisJCWlndF9pbmZvKCJSQU06ICUiUFJJdTY0IiBNaUIsIEdQVSBhZGRyZXNzIHNw YWNlOiAlIlBSSWQ2NCIgTWlCLCBHR1RUIG1hcHBhYmxlIHNpemU6ICUiUFJJZDY0IiBNaUJcbiIs CisJCQkgZGF0YS5yYW1fc2l6ZSA+PiAyMCwgZGF0YS5hcGVyX3NpemUgPj4gMjAsCisJCQkgZGF0 YS5tYXBwYWJsZV9zaXplID4+IDIwKTsKKworCQkvKgorCQkgKiBHZW4zIHJlbmRlciBlbmdpbmUg aXMgbGltaXRlZCB0byAya3gyaywgd2hlcmVhcworCQkgKiB0aGUgZGlzcGxheSBlbmdpbmUgY2Fu IGRvIDRreDRrLiBVc2UgdGhlIGJsaXR0ZXIKKwkJICogb24gZ2VuMyB0byBhdm9pZCBleGNlZWRp bmcgdGhlIHJlbmRlciBlbmdpbmUgbGltaXRzLgorCQkgKiBPbiBnZW4yIHdlIGNvdWxkIHVzZSBl aXRoZXIsIGJ1dCBsZXQncyBnbyBmb3IgdGhlCisJCSAqIGJsaXR0ZXIgdGhlcmUgYXMgd2VsbC4K KwkJICovCisJCWlmIChpbnRlbF9nZW4oZGF0YS5kZXZpZCkgPj0gNCkKKwkJCWRhdGEucmVuZGVy X2NvcHkgPSBpZ3RfZ2V0X3JlbmRlcl9jb3B5ZnVuYyhkYXRhLmRldmlkKTsKKworCQlkYXRhLmJ1 Zm1nciA9IGRybV9pbnRlbF9idWZtZ3JfZ2VtX2luaXQoZGF0YS5kcm1fZmQsIDQwOTYpOworCQlk YXRhLmJhdGNoID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxsb2MoZGF0YS5idWZtZ3IsIGRhdGEuZGV2 aWQpOworCX0KKworCS8qCisJICogU2tpcCBsaW5lYXIgYXMgaXQgZG9lc24ndCBoaXQgdGhlIG92 ZXJmbG93IHdlIHdhbnQKKwkgKiBvbiBhY2NvdW50IG9mIHRoZSB0aWxlIGhlaWdodCBiZWluZyBl ZmZlY3RpdmVseSBvbmUsCisJICogYW5kIHRodXMgdGhlIGtlbnJuZWwgcm91bmRpbmcgdXAgdG8g dGhlIG5leHQgdGlsZQorCSAqIGhlaWdodCB3b24ndCBkbyBhbnl0aGluZy4KKwkgKi8KKwlmb3Ig KGludCBpID0gMTsgaSA8IEFSUkFZX1NJWkUobW9kaWZpZXJzKTsgaSsrKSB7CisJCWlndF9zdWJ0 ZXN0X2YoIiVzLWFkZGZiLXNpemUtb3ZlcmZsb3ciLAorCQkJICAgICAgbW9kaWZpZXJzW2ldLm5h bWUpIHsKKwkJCWRhdGEubW9kaWZpZXIgPSBtb2RpZmllcnNbaV0ubW9kaWZpZXI7CisJCQl0ZXN0 X3NpemVfb3ZlcmZsb3coJmRhdGEpOworCQl9CisJfQorCisJZm9yIChpbnQgaSA9IDE7IGkgPCBB UlJBWV9TSVpFKG1vZGlmaWVycyk7IGkrKykgeworCQlpZ3Rfc3VidGVzdF9mKCIlcy1hZGRmYi1z aXplLW9mZnNldC1vdmVyZmxvdyIsCisJCQkgICAgICBtb2RpZmllcnNbaV0ubmFtZSkgeworCQkJ ZGF0YS5tb2RpZmllciA9IG1vZGlmaWVyc1tpXS5tb2RpZmllcjsKKwkJCXRlc3Rfc2l6ZV9vZmZz ZXRfb3ZlcmZsb3coJmRhdGEpOworCQl9CisJfQorCisJZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJB WV9TSVpFKG1vZGlmaWVycyk7IGkrKykgeworCQlpZ3Rfc3VidGVzdF9mKCIlcy1hZGRmYiIsIG1v ZGlmaWVyc1tpXS5uYW1lKSB7CisJCQlkYXRhLm1vZGlmaWVyID0gbW9kaWZpZXJzW2ldLm1vZGlm aWVyOworCisJCQl0ZXN0X2FkZGZiKCZkYXRhKTsKKwkJfQorCX0KKworCWZvciAoaW50IGkgPSAw OyBpIDwgQVJSQVlfU0laRShtb2RpZmllcnMpOyBpKyspIHsKKwkJZGF0YS5tb2RpZmllciA9IG1v ZGlmaWVyc1tpXS5tb2RpZmllcjsKKworCQlmb3IgKGludCBqID0gMDsgaiA8IEFSUkFZX1NJWkUo Zm9ybWF0cyk7IGorKykgeworCQkJZGF0YS5mb3JtYXQgPSBmb3JtYXRzW2pdLmZvcm1hdDsKKwor CQkJZm9yIChpbnQgayA9IDA7IGsgPCBBUlJBWV9TSVpFKHJvdGF0aW9ucyk7IGsrKykgeworCQkJ CWRhdGEucm90YXRpb24gPSByb3RhdGlvbnNba10ucm90YXRpb247CisKKwkJCQlpZ3Rfc3VidGVz dF9mKCIlcy0lZGJwcC1yb3RhdGUtJWQiLCBtb2RpZmllcnNbaV0ubmFtZSwKKwkJCQkJICAgICAg Zm9ybWF0c1tqXS5icHAsIHJvdGF0aW9uc1trXS5hbmdsZSkgeworCQkJCQlpZ3RfcmVxdWlyZShp Z3RfZmJfc3VwcG9ydGVkX2Zvcm1hdChkYXRhLmZvcm1hdCkpOworCQkJCQlpZ3RfcmVxdWlyZShp Z3RfZGlzcGxheV9oYXNfZm9ybWF0X21vZCgmZGF0YS5kaXNwbGF5LCBkYXRhLmZvcm1hdCwgZGF0 YS5tb2RpZmllcikpOworCQkJCQlwcmVwX2ZiKCZkYXRhKTsKKwkJCQkJdGVzdF9zY2Fub3V0KCZk YXRhKTsKKwkJCQl9CisJCQl9CisKKwkJCWlndF9maXh0dXJlCisJCQkJY2xlYW51cF9mYigmZGF0 YSk7CisJCX0KKwl9CisKKwlpZ3RfZml4dHVyZSB7CisJCWlndF9kaXNwbGF5X2ZpbmkoJmRhdGEu ZGlzcGxheSk7CisKKwkJaW50ZWxfYmF0Y2hidWZmZXJfZnJlZShkYXRhLmJhdGNoKTsKKwkJZHJt X2ludGVsX2J1Zm1ncl9kZXN0cm95KGRhdGEuYnVmbWdyKTsKKwl9Cit9CmRpZmYgLS1naXQgYS90 ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkCmluZGV4IDcxMTk3OWI0YTFjMi4u YWQ4NDQ0ODc1MzAyIDEwMDY0NAotLS0gYS90ZXN0cy9tZXNvbi5idWlsZAorKysgYi90ZXN0cy9t ZXNvbi5idWlsZApAQCAtMTQsNiArMTQsNyBAQCB0ZXN0X3Byb2dzID0gWwogCSdrbXNfYXRvbWlj X2ludGVycnVwdGlibGUnLAogCSdrbXNfYXRvbWljX3RyYW5zaXRpb24nLAogCSdrbXNfYXZhaWxh YmxlX21vZGVzX2NyYycsCisJJ2ttc19iaWdfZmInLAogCSdrbXNfYnVzeScsCiAJJ2ttc19jY3Mn LAogCSdrbXNfY29sb3InLAotLSAKMi4yMS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2lndC1kZXY=