From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id EBE6A89338 for ; Wed, 8 May 2019 16:29:09 +0000 (UTC) From: Ville Syrjala Date: Wed, 8 May 2019 19:29:06 +0300 Message-Id: <20190508162906.20808-1-ville.syrjala@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v3] 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 IGZiIGZvciB0aGUgbGVnYWN5IHNldGNydGMKClNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzD pCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Ci0tLQogdGVzdHMvTWFrZWZpbGUuc291 cmNlcyB8ICAgMSArCiB0ZXN0cy9rbXNfYmlnX2ZiLmMgICAgIHwgNjY2ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy9tZXNvbi5idWlsZCAgICAgIHwgICAx ICsKIDMgZmlsZXMgY2hhbmdlZCwgNjY4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCB0ZXN0cy9rbXNfYmlnX2ZiLmMKCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2Vz IGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwppbmRleCA3ZjkyMWY2YzU5ODguLjJkNWM5MjllMzJm YyAxMDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmls ZS5zb3VyY2VzCkBAIC0yNyw2ICsyNyw3IEBAIFRFU1RTX3Byb2dzID0gXAogCWttc19hdG9taWNf aW50ZXJydXB0aWJsZSBcCiAJa21zX2F0b21pY190cmFuc2l0aW9uIFwKIAlrbXNfYXZhaWxhYmxl X21vZGVzX2NyYyBcCisJa21zX2JpZ19mYiBcCiAJa21zX2J1c3kgXAogCWttc19jY3MgXAogCWtt c19jb2xvciBcCmRpZmYgLS1naXQgYS90ZXN0cy9rbXNfYmlnX2ZiLmMgYi90ZXN0cy9rbXNfYmln X2ZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41MjM1OTU0ZTJk OGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9rbXNfYmlnX2ZiLmMKQEAgLTAsMCArMSw2NjYg QEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgor ICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5p c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgor ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug KGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisg KgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg T0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5U IFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig T1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiaWd0 LmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8 c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworSUdUX1RFU1RfREVTQ1JJUFRJT04oIlRl c3QgYmlnIGZyYW1lYnVmZmVycyIpOworCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IGRybV9mZDsK Kwl1aW50MzJfdCBkZXZpZDsKKwlpZ3RfZGlzcGxheV90IGRpc3BsYXk7CisJZW51bSBwaXBlIHBp cGU7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisJaWd0X3BsYW5lX3QgKnBsYW5lOworCWlndF9w aXBlX2NyY190ICpwaXBlX2NyYzsKKwlzdHJ1Y3QgaWd0X2ZiIHNtYWxsX2ZiLCBiaWdfZmI7CisJ dWludDMyX3QgZm9ybWF0OworCXVpbnQ2NF90IG1vZGlmaWVyOworCWludCB3aWR0aCwgaGVpZ2h0 OworCWlndF9yb3RhdGlvbl90IHJvdGF0aW9uOworCWludCBtYXhfZmJfd2lkdGgsIG1heF9mYl9o ZWlnaHQ7CisJdWludDY0X3QgcmFtX3NpemUsIGFwZXJfc2l6ZSwgbWFwcGFibGVfc2l6ZTsKKwlp Z3RfcmVuZGVyX2NvcHlmdW5jX3QgcmVuZGVyX2NvcHk7CisJZHJtX2ludGVsX2J1Zm1nciAqYnVm bWdyOworCXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2g7Cit9IGRhdGFfdDsKKworc3Rh dGljIHZvaWQgaW5pdF9idWYoZGF0YV90ICpkYXRhLAorCQkgICAgIHN0cnVjdCBpZ3RfYnVmICpi dWYsCisJCSAgICAgY29uc3Qgc3RydWN0IGlndF9mYiAqZmIsCisJCSAgICAgY29uc3QgY2hhciAq bmFtZSkKK3sKKwlpZ3RfYXNzZXJ0X2VxKGZiLT5vZmZzZXRzWzBdLCAwKTsKKworCWJ1Zi0+Ym8g PSBnZW1faGFuZGxlX3RvX2xpYmRybV9ibyhkYXRhLT5idWZtZ3IsIGRhdGEtPmRybV9mZCwKKwkJ CQkJICBuYW1lLCBmYi0+Z2VtX2hhbmRsZSk7CisJYnVmLT50aWxpbmcgPSBpZ3RfZmJfbW9kX3Rv X3RpbGluZyhmYi0+bW9kaWZpZXIpOworCWJ1Zi0+c3RyaWRlID0gZmItPnN0cmlkZXNbMF07CisJ YnVmLT5icHAgPSBmYi0+cGxhbmVfYnBwWzBdOworCWJ1Zi0+c2l6ZSA9IGZiLT5zaXplOworfQor CitzdGF0aWMgdm9pZCBmaW5pX2J1ZihzdHJ1Y3QgaWd0X2J1ZiAqYnVmKQoreworCWRybV9pbnRl bF9ib191bnJlZmVyZW5jZShidWYtPmJvKTsKK30KKworc3RhdGljIHZvaWQgY29weV9wYXR0ZXJu KGRhdGFfdCAqZGF0YSwKKwkJCSBzdHJ1Y3QgaWd0X2ZiICpkc3RfZmIsIGludCBkeCwgaW50IGR5 LAorCQkJIHN0cnVjdCBpZ3RfZmIgKnNyY19mYiwgaW50IHN4LCBpbnQgc3ksCisJCQkgaW50IHcs IGludCBoKQoreworCXN0cnVjdCBpZ3RfYnVmIHNyYyA9IHt9LCBkc3QgPSB7fTsKKworCWluaXRf YnVmKGRhdGEsICZzcmMsIHNyY19mYiwgImJpZyBmYiBzcmMiKTsKKwlpbml0X2J1ZihkYXRhLCAm ZHN0LCBkc3RfZmIsICJiaWcgZmIgZHN0Iik7CisKKwlnZW1fc2V0X2RvbWFpbihkYXRhLT5kcm1f ZmQsIGRzdF9mYi0+Z2VtX2hhbmRsZSwKKwkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9HVFQsIEk5 MTVfR0VNX0RPTUFJTl9HVFQpOworCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgc3JjX2Zi LT5nZW1faGFuZGxlLAorCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgMCk7CisKKwlpZiAo ZGF0YS0+cmVuZGVyX2NvcHkpIHsKKwkJZGF0YS0+cmVuZGVyX2NvcHkoZGF0YS0+YmF0Y2gsIE5V TEwsICZzcmMsIHN4LCBzeSwgdywgaCwgJmRzdCwgZHgsIGR5KTsKKwl9IGVsc2UgeworCQl3ID0g bWluKHcsIHNyY19mYi0+d2lkdGggLSBzeCk7CisJCXcgPSBtaW4odywgZHN0X2ZiLT53aWR0aCAt IGR4KTsKKworCQloID0gbWluKGgsIHNyY19mYi0+aGVpZ2h0IC0gc3kpOworCQloID0gbWluKGgs IGRzdF9mYi0+aGVpZ2h0IC0gZHkpOworCisJCWludGVsX2JsdF9jb3B5KGRhdGEtPmJhdGNoLCBz cmMuYm8sIHN4LCBzeSwgc3JjLnN0cmlkZSwKKwkJCSAgICAgICBkc3QuYm8sIGR4LCBkeSwgZHN0 LnN0cmlkZSwgdywgaCwgZHN0LmJwcCk7CisJfQorCisJZmluaV9idWYoJmRzdCk7CisJZmluaV9i dWYoJnNyYyk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbmVyYXRlX3BhdHRlcm4oZGF0YV90ICpkYXRh LAorCQkJICAgICBzdHJ1Y3QgaWd0X2ZiICpmYiwKKwkJCSAgICAgaW50IHcsIGludCBoKQorewor CXN0cnVjdCBpZ3RfZmIgcGF0X2ZiOworCisJaWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKGRhdGEtPmRy bV9mZCwgdywgaCwKKwkJCSAgICAgIGRhdGEtPmZvcm1hdCwgZGF0YS0+bW9kaWZpZXIsCisJCQkg ICAgICAmcGF0X2ZiKTsKKworCWZvciAoaW50IHkgPSAwOyB5IDwgZmItPmhlaWdodDsgeSArPSBo KSB7CisJCWZvciAoaW50IHggPSAwOyB4IDwgZmItPndpZHRoOyB4ICs9IHcpIHsKKwkJCWNvcHlf cGF0dGVybihkYXRhLCBmYiwgeCwgeSwKKwkJCQkgICAgICZwYXRfZmIsIDAsIDAsCisJCQkJICAg ICBwYXRfZmIud2lkdGgsIHBhdF9mYi5oZWlnaHQpOworCQkJdysrOworCQkJaCsrOworCQl9CisJ fQorCisJaWd0X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQsICZwYXRfZmIpOworfQorCitzdGF0aWMg Ym9vbCBzaXplX29rKGRhdGFfdCAqZGF0YSwgdWludDY0X3Qgc2l6ZSkKK3sKKwkvKgorCSAqIFRo ZSBrZXJuZWwgbGltaXRzIHNjYW5vdXQgdG8gdGhlCisJICogbWFwcGFibGUgcG9ydGlvbiBvZiBn Z3R0IG9uIGdtY2ggcGxhdGZvcm1zLgorCSAqLworCWlmICgoaW50ZWxfZ2VuKGRhdGEtPmRldmlk KSA8IDUgfHwKKwkgICAgIElTX1ZBTExFWVZJRVcoZGF0YS0+ZGV2aWQpIHx8CisJICAgICBJU19D SEVSUllWSUVXKGRhdGEtPmRldmlkKSkgJiYKKwkgICAgc2l6ZSA+IGRhdGEtPm1hcHBhYmxlX3Np emUgLyAyKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIExpbWl0IHRoZSBiaWcgZmIgc2l6 ZSB0byBhdCBtb3N0IGhhbGYgdGhlIFJBTSBvciBoYWxmCisJICogdGhlIGFwZXJ0dXJlIHNpemUu IENvdWxkIGdvIGEgYml0IGhpZ2hlciBJIHN1cHBvc2Ugc2luY2UKKwkgKiB3ZSBzaG91bGRuJ3Qg bmVlZCBtb3JlIHRoYW4gb25lIGJpZyBmYiBhdCBhIHRpbWUuCisJICovCisJaWYgKHNpemUgPiBk YXRhLT5yYW1fc2l6ZSAvIDIgfHwgc2l6ZSA+IGRhdGEtPmFwZXJfc2l6ZSAvIDIpCisJCXJldHVy biBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisKK3N0YXRpYyB2b2lkIG1heF9mYl9zaXpl KGRhdGFfdCAqZGF0YSwgaW50ICp3aWR0aCwgaW50ICpoZWlnaHQsCisJCQl1aW50MzJfdCBmb3Jt YXQsIHVpbnQ2NF90IG1vZGlmaWVyKQoreworCXVuc2lnbmVkIGludCBzdHJpZGU7CisJdWludDY0 X3Qgc2l6ZTsKKwlpbnQgaSA9IDA7CisKKwkqd2lkdGggPSBkYXRhLT5tYXhfZmJfd2lkdGg7CisJ KmhlaWdodCA9IGRhdGEtPm1heF9mYl9oZWlnaHQ7CisKKwkvKiBtYXggZmVuY2Ugc3RyaWRlIGlz IG9ubHkgOGsgYnl0ZXMgb24gZ2VuMyAqLworCWlmIChpbnRlbF9nZW4oZGF0YS0+ZGV2aWQpIDwg NCAmJgorCSAgICBmb3JtYXQgPT0gRFJNX0ZPUk1BVF9YUkdCODg4OCkKKwkJKndpZHRoID0gbWlu KCp3aWR0aCwgODE5MiAvIDQpOworCisJaWd0X2NhbGNfZmJfc2l6ZShkYXRhLT5kcm1fZmQsICp3 aWR0aCwgKmhlaWdodCwKKwkJCSBmb3JtYXQsIG1vZGlmaWVyLCAmc2l6ZSwgJnN0cmlkZSk7CisK Kwl3aGlsZSAoIXNpemVfb2soZGF0YSwgc2l6ZSkpIHsKKwkJaWYgKGkrKyAmIDEpCisJCQkqd2lk dGggPj49IDE7CisJCWVsc2UKKwkJCSpoZWlnaHQgPj49IDE7CisKKwkJaWd0X2NhbGNfZmJfc2l6 ZShkYXRhLT5kcm1fZmQsICp3aWR0aCwgKmhlaWdodCwKKwkJCQkgZm9ybWF0LCBtb2RpZmllciwg JnNpemUsICZzdHJpZGUpOworCX0KKworCWlndF9pbmZvKCJNYXggdXNhYmxlIGZyYW1lYnVmZmVy IHNpemUgZm9yIGZvcm1hdCAiSUdUX0ZPUk1BVF9GTVQiIC8gbW9kaWZpZXIgMHglIlBSSXg2NCI6 ICVkeCVkXG4iLAorCQkgSUdUX0ZPUk1BVF9BUkdTKGZvcm1hdCksIG1vZGlmaWVyLAorCQkgKndp ZHRoLCAqaGVpZ2h0KTsKK30KKworc3RhdGljIGJvb2wgdGVzdF9wbGFuZShkYXRhX3QgKmRhdGEp Cit7CisJaWd0X3BsYW5lX3QgKnBsYW5lID0gZGF0YS0+cGxhbmU7CisJc3RydWN0IGlndF9mYiAq c21hbGxfZmIgPSAmZGF0YS0+c21hbGxfZmI7CisJc3RydWN0IGlndF9mYiAqYmlnX2ZiID0gJmRh dGEtPmJpZ19mYjsKKwlpbnQgdyA9IGJpZ19mYi0+d2lkdGggLSBzbWFsbF9mYi0+d2lkdGg7CisJ aW50IGggPSBiaWdfZmItPmhlaWdodCAtIHNtYWxsX2ZiLT5oZWlnaHQ7CisJc3RydWN0IHsKKwkJ aW50IHgsIHk7CisJfSBjb29yZHNbXSA9IHsKKwkJLyogYnVuY2ggb2YgY29vcmRpbmF0ZXMgcHVs bGVkIG91dCBvZiB0aGluIGFpciAqLworCQl7IDAsIDAsIH0sCisJCXsgdyAqIDQgLyA3LCBoIC8g NSwgfSwKKwkJeyB3ICogMyAvIDcsIGggLyAzLCB9LAorCQl7IHcgLyAyLCBoIC8gMiwgfSwKKwkJ eyB3IC8gMywgaCAqIDMgLyA0LCB9LAorCQl7IHcsIGgsIH0sCisJfTsKKworCWlmICghaWd0X3Bs YW5lX2hhc19mb3JtYXRfbW9kKHBsYW5lLCBkYXRhLT5mb3JtYXQsIGRhdGEtPm1vZGlmaWVyKSkK KwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGRhdGEtPnJvdGF0aW9uICE9IElHVF9ST1RBVElPTl8w ICYmCisJICAgICFpZ3RfcGxhbmVfaGFzX3Byb3AocGxhbmUsIElHVF9QTEFORV9ST1RBVElPTikp CisJCXJldHVybiBmYWxzZTsKKworCS8qIEZJWE1FIG5lZWQgYXRvbWljIG9uIGk5NjUvZzR4ICov CisJaWYgKGRhdGEtPnJvdGF0aW9uICE9IElHVF9ST1RBVElPTl8wICYmCisJICAgIGRhdGEtPnJv dGF0aW9uICE9IElHVF9ST1RBVElPTl8xODAgJiYKKwkgICAgIWRhdGEtPmRpc3BsYXkuaXNfYXRv bWljKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoaWd0X3BsYW5lX2hhc19wcm9wKHBsYW5lLCBJ R1RfUExBTkVfUk9UQVRJT04pKQorCQlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lLCBkYXRh LT5yb3RhdGlvbik7CisJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwgMCwgMCk7CisKKwlm b3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29vcmRzKTsgaSsrKSB7CisJCWlndF9jcmNf dCBzbWFsbF9jcmMsIGJpZ19jcmM7CisJCWludCB4ID0gY29vcmRzW2ldLng7CisJCWludCB5ID0g Y29vcmRzW2ldLnk7CisKKwkJLyogSGFyZHdhcmUgbGltaXRhdGlvbiAqLworCQlpZiAoZGF0YS0+ Zm9ybWF0ID09IERSTV9GT1JNQVRfUkdCNTY1ICYmCisJCSAgICAoZGF0YS0+cm90YXRpb24gPT0g SUdUX1JPVEFUSU9OXzkwIHx8CisJCSAgICAgZGF0YS0+cm90YXRpb24gPT0gSUdUX1JPVEFUSU9O XzI3MCkpIHsKKwkJCXggJj0gfjE7CisJCQl5ICY9IH4xOworCQl9CisKKwkJLyoKKwkJICogTWFr ZSBhIDE6MSBjb3B5IG9mIHRoZSBkZXNpcmVkIHBhcnQgb2YgdGhlIGJpZyBmYgorCQkgKiByYXRo ZXIgdGhhbiB0cnkgdG8gcmVuZGVyIHRoZSBzYW1lIHBhdHRlcm4gKHRyYW5zbGF0ZWQKKwkJICog YWNjb3JkaW5seSkgYWdhaW4gdmlhIGNhaXJvLiBTb21ldGhpbmcgaW4gY2Fpcm8ncworCQkgKiBy ZW5kZXJpbmcgcGlwZWxpbmUgaW50cm9kdWNlcyBzbGlnaHQgZGlmZmVyZW5jZXMgaW50bworCQkg KiB0aGUgcmVzdWx0IGlmIHdlIHRyeSB0aGF0LCBhbmQgc28gdGhlIGNyYyB3aWxsIG5vdCBtYXRj aC4KKwkJICovCisJCWNvcHlfcGF0dGVybihkYXRhLCBzbWFsbF9mYiwgMCwgMCwgYmlnX2ZiLCB4 LCB5LAorCQkJICAgICBzbWFsbF9mYi0+d2lkdGgsIHNtYWxsX2ZiLT5oZWlnaHQpOworCisJCWln dF9wbGFuZV9zZXRfZmIocGxhbmUsIHNtYWxsX2ZiKTsKKwkJaWd0X3BsYW5lX3NldF9zaXplKHBs YW5lLCBkYXRhLT53aWR0aCwgZGF0YS0+aGVpZ2h0KTsKKworCQkvKgorCQkgKiBUcnkgdG8gY2hl Y2sgdGhhdCB0aGUgcm90YXRpb24rZm9ybWF0K21vZGlmaWVyCisJCSAqIGNvbWJvIGlzIHN1cHBv cnRlZC4KKwkJICovCisJCWlmIChpID09IDAgJiYgZGF0YS0+ZGlzcGxheS5pc19hdG9taWMgJiYK KwkJICAgIGlndF9kaXNwbGF5X3RyeV9jb21taXRfYXRvbWljKCZkYXRhLT5kaXNwbGF5LAorCQkJ CQkJICBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZLAorCQkJCQkJICBOVUxMKSAhPSAwKSB7CisJ CQlpZiAoaWd0X3BsYW5lX2hhc19wcm9wKHBsYW5lLCBJR1RfUExBTkVfUk9UQVRJT04pKQorCQkJ CWlndF9wbGFuZV9zZXRfcm90YXRpb24ocGxhbmUsIElHVF9ST1RBVElPTl8wKTsKKwkJCWlndF9w bGFuZV9zZXRfZmIocGxhbmUsIE5VTEwpOworCQkJaWd0X3NraXAoInVuc3VwcG9ydGVkIHBsYW5l IGNvbmZpZ3VyYXRpb25cbiIpOworCQl9CisKKwkJaWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0YS0+ ZGlzcGxheSwgZGF0YS0+ZGlzcGxheS5pc19hdG9taWMgPworCQkJCSAgICBDT01NSVRfQVRPTUlD IDogQ09NTUlUX1VOSVZFUlNBTCk7CisKKworCQlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0 YS0+cGlwZV9jcmMsICZzbWFsbF9jcmMpOworCisJCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIGJp Z19mYik7CisJCWlndF9mYl9zZXRfcG9zaXRpb24oYmlnX2ZiLCBwbGFuZSwgeCwgeSk7CisJCWln dF9mYl9zZXRfc2l6ZShiaWdfZmIsIHBsYW5lLCBzbWFsbF9mYi0+d2lkdGgsIHNtYWxsX2ZiLT5o ZWlnaHQpOworCQlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIGRhdGEtPndpZHRoLCBkYXRhLT5o ZWlnaHQpOworCQlpZ3RfZGlzcGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LCBkYXRhLT5kaXNw bGF5LmlzX2F0b21pYyA/CisJCQkJICAgIENPTU1JVF9BVE9NSUMgOiBDT01NSVRfVU5JVkVSU0FM KTsKKworCQlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZiaWdfY3Jj KTsKKworCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKKworCQlpZ3RfYXNzZXJ0X2Ny Y19lcXVhbCgmYmlnX2NyYywgJnNtYWxsX2NyYyk7CisKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30K Kworc3RhdGljIGJvb2wgdGVzdF9waXBlKGRhdGFfdCAqZGF0YSkKK3sKKwlkcm1Nb2RlTW9kZUlu Zm8gKm1vZGU7CisJaWd0X3BsYW5lX3QgKnByaW1hcnk7CisJaW50IHdpZHRoLCBoZWlnaHQ7CisJ Ym9vbCByZXQgPSBmYWxzZTsKKworCW1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKGRhdGEtPm91 dHB1dCk7CisKKwlkYXRhLT53aWR0aCA9IG1vZGUtPmhkaXNwbGF5OworCWRhdGEtPmhlaWdodCA9 IG1vZGUtPnZkaXNwbGF5OworCisJd2lkdGggPSBtb2RlLT5oZGlzcGxheTsKKwloZWlnaHQgPSBt b2RlLT52ZGlzcGxheTsKKwlpZiAoZGF0YS0+cm90YXRpb24gPT0gSUdUX1JPVEFUSU9OXzkwIHx8 CisJICAgIGRhdGEtPnJvdGF0aW9uID09IElHVF9ST1RBVElPTl8yNzApCisJCWlndF9zd2FwKHdp ZHRoLCBoZWlnaHQpOworCisJaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5kcm1fZmQsIHdpZHRo LCBoZWlnaHQsCisJCQkgICAgZGF0YS0+Zm9ybWF0LCBkYXRhLT5tb2RpZmllciwKKwkJCSAgICAw LCAxLCAwLCAmZGF0YS0+c21hbGxfZmIpOworCisJaWd0X291dHB1dF9zZXRfcGlwZShkYXRhLT5v dXRwdXQsIGRhdGEtPnBpcGUpOworCisJcHJpbWFyeSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lX3R5 cGUoZGF0YS0+b3V0cHV0LCBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKKwlpZ3RfcGxhbmVfc2V0 X2ZiKHByaW1hcnksIE5VTEwpOworCisJaWYgKCFkYXRhLT5kaXNwbGF5LmlzX2F0b21pYykgewor CQlzdHJ1Y3QgaWd0X2ZiIGZiOworCisJCWlndF9jcmVhdGVfZmIoZGF0YS0+ZHJtX2ZkLCBtb2Rl LT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCisJCQkgICAgICBEUk1fRk9STUFUX1hSR0I4ODg4 LCBEUk1fRk9STUFUX01PRF9MSU5FQVIsCisJCQkgICAgICAmZmIpOworCisJCS8qIGxlZ2FjeSBz ZXRjcnRjIG5lZWRzIGFuIGZiICovCisJCWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgJmZiKTsK KwkJaWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgQ09NTUlUX0xFR0FDWSk7CisK KwkJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCBOVUxMKTsKKwkJaWd0X2Rpc3BsYXlfY29tbWl0 MigmZGF0YS0+ZGlzcGxheSwgQ09NTUlUX1VOSVZFUlNBTCk7CisKKwkJaWd0X3JlbW92ZV9mYihk YXRhLT5kcm1fZmQsICZmYik7CisJfQorCisJaWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0YS0+ZGlz cGxheSwgZGF0YS0+ZGlzcGxheS5pc19hdG9taWMgPworCQkJICAgIENPTU1JVF9BVE9NSUMgOiBD T01NSVRfVU5JVkVSU0FMKTsKKworCWRhdGEtPnBpcGVfY3JjID0gaWd0X3BpcGVfY3JjX25ldyhk YXRhLT5kcm1fZmQsIGRhdGEtPnBpcGUsCisJCQkJCSAgSU5URUxfUElQRV9DUkNfU09VUkNFX0FV VE8pOworCisJZm9yX2VhY2hfcGxhbmVfb25fcGlwZSgmZGF0YS0+ZGlzcGxheSwgZGF0YS0+cGlw ZSwgZGF0YS0+cGxhbmUpIHsKKwkJcmV0ID0gdGVzdF9wbGFuZShkYXRhKTsKKwkJaWYgKHJldCkK KwkJCWJyZWFrOworCX0KKworCWlndF9waXBlX2NyY19mcmVlKGRhdGEtPnBpcGVfY3JjKTsKKwor CWlndF9vdXRwdXRfc2V0X3BpcGUoZGF0YS0+b3V0cHV0LCBQSVBFX0FOWSk7CisJaWd0X2Rpc3Bs YXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgZGF0YS0+ZGlzcGxheS5pc19hdG9taWMgPworCQkJ ICAgIENPTU1JVF9BVE9NSUMgOiBDT01NSVRfVU5JVkVSU0FMKTsKKworCWlndF9yZW1vdmVfZmIo ZGF0YS0+ZHJtX2ZkLCAmZGF0YS0+c21hbGxfZmIpOworCisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIHZvaWQgdGVzdF9zY2Fub3V0KGRhdGFfdCAqZGF0YSkKK3sKKwlmb3JfZWFjaF9waXBlX3dp dGhfdmFsaWRfb3V0cHV0KCZkYXRhLT5kaXNwbGF5LCBkYXRhLT5waXBlLCBkYXRhLT5vdXRwdXQp IHsKKwkJaWYgKHRlc3RfcGlwZShkYXRhKSkKKwkJCXJldHVybjsKKwl9CisKKwlpZ3Rfc2tpcCgi bm8gdmFsaWQgY3J0Yy9jb25uZWN0b3IgY29tYmluYXRpb25zIGZvdW5kXG4iKTsKK30KKworc3Rh dGljIHZvaWQgcHJlcF9mYihkYXRhX3QgKmRhdGEpCit7CisJaW50IHdpZHRoLCBoZWlnaHQ7CisK KwlpZiAoZGF0YS0+YmlnX2ZiLmZiX2lkKQorCQlyZXR1cm47CisKKwltYXhfZmJfc2l6ZShkYXRh LCAmd2lkdGgsICZoZWlnaHQsCisJCSAgICBkYXRhLT5mb3JtYXQsIGRhdGEtPm1vZGlmaWVyKTsK KworCWlndF9jcmVhdGVfZmIoZGF0YS0+ZHJtX2ZkLCB3aWR0aCwgaGVpZ2h0LAorCQkgICAgICBk YXRhLT5mb3JtYXQsIGRhdGEtPm1vZGlmaWVyLAorCQkgICAgICAmZGF0YS0+YmlnX2ZiKTsKKwor CWdlbmVyYXRlX3BhdHRlcm4oZGF0YSwgJmRhdGEtPmJpZ19mYiwgNjQwLCA0ODApOworfQorCitz dGF0aWMgdm9pZCBjbGVhbnVwX2ZiKGRhdGFfdCAqZGF0YSkKK3sKKwlpZ3RfcmVtb3ZlX2ZiKGRh dGEtPmRybV9mZCwgJmRhdGEtPmJpZ19mYik7CisJZGF0YS0+YmlnX2ZiLmZiX2lkID0gMDsKK30K Kworc3RhdGljIHZvaWQKK3Rlc3Rfc2l6ZV9vdmVyZmxvdyhkYXRhX3QgKmRhdGEpCit7CisJdWlu dDMyX3QgZmJfaWQ7CisJdWludDMyX3QgYm87CisJdWludDMyX3Qgb2Zmc2V0c1s0XSA9IHt9Owor CXVpbnQzMl90IHN0cmlkZXNbNF0gPSB7IDI1NioxMDI0LCB9OworCWludCByZXQ7CisKKwlpZ3Rf cmVxdWlyZShpZ3RfZGlzcGxheV9oYXNfZm9ybWF0X21vZCgmZGF0YS0+ZGlzcGxheSwKKwkJCQkJ ICAgICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCisJCQkJCSAgICAgICBkYXRhLT5tb2RpZmllcikp OworCisJLyoKKwkgKiBUcnkgdG8gaGl0IGEgc3BlY2lmaWMgaW50ZWdlciBvdmVyZmxvdyBpbiBp OTE1IGZiIHNpemUKKwkgKiBjYWxjdWxhdGlvbnMuIDI1NmsgKiAxNmsgPT0gMTw8MzIgd2hpY2gg aXMgY2hlY2tlZAorCSAqIGFnYWluc3QgdGhlIGJvIHNpemUuIFRoZSBjaGVjayBzaG91bGQgZmFp bCBvbiBhY2NvdW50CisJICogb2YgdGhlIGJvIGJlaW5nIHNtYWxsZXIsIGJ1dCBkdWUgdG8gdGhl IG92ZXJmbG93IHRoZQorCSAqIGNvbXB1dGVkIGZiIHNpemUgaXMgMCBhbmQgdGh1cyB0aGUgY2hl Y2sgbmV2ZXIgdHJpcHMuCisJICovCisJaWd0X3JlcXVpcmUoZGF0YS0+bWF4X2ZiX3dpZHRoID49 IDE2MzgzICYmCisJCSAgICBkYXRhLT5tYXhfZmJfaGVpZ2h0ID49IDE2MzgzKTsKKworCWJvID0g Z2VtX2NyZWF0ZShkYXRhLT5kcm1fZmQsICgxVUxMIDw8IDMyKSAtIDQwOTYpOworCWlndF9yZXF1 aXJlKGJvKTsKKworCXJldCA9IF9fa21zX2FkZGZiKGRhdGEtPmRybV9mZCwgYm8sCisJCQkgIDE2 MzgzLCAxNjM4MywKKwkJCSAgRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwkJCSAgZGF0YS0+bW9kaWZp ZXIsCisJCQkgIHN0cmlkZXMsIG9mZnNldHMsIDEsCisJCQkgIERSTV9NT0RFX0ZCX01PRElGSUVS UywgJmZiX2lkKTsKKworCWlndF9hc3NlcnRfbmVxKHJldCwgMCk7CisKKwlnZW1fY2xvc2UoZGF0 YS0+ZHJtX2ZkLCBibyk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3NpemVfb2Zmc2V0X292ZXJm bG93KGRhdGFfdCAqZGF0YSkKK3sKKwl1aW50MzJfdCBmYl9pZDsKKwl1aW50MzJfdCBibzsKKwl1 aW50MzJfdCBvZmZzZXRzWzRdID0ge307CisJdWludDMyX3Qgc3RyaWRlc1s0XSA9IHsgODE5Miwg fTsKKwlpbnQgcmV0OworCisJaWd0X3JlcXVpcmUoaWd0X2Rpc3BsYXlfaGFzX2Zvcm1hdF9tb2Qo JmRhdGEtPmRpc3BsYXksCisJCQkJCSAgICAgICBEUk1fRk9STUFUX05WMTIsCisJCQkJCSAgICAg ICBkYXRhLT5tb2RpZmllcikpOworCisJLyoKKwkgKiBUcnkgdG8gYSBzcGVjaWZpYyBpbnRlZ2Vy IG92ZXJmbG93IGluIGk5MTUgZmIgc2l6ZQorCSAqIGNhbGN1bGF0aW9ucy4gVGhpcyB0aW1lIGl0 J3Mgb2Zmc2V0c1sxXSArIHRoZSB0aWxlCisJICogYWxpZ25lZCBjaHJvbWEgcGxhbmUgc2l6ZSB0 aGF0IG92ZXJmbG93cyBhbmQKKwkgKiBpbmNvcnJlY3RseSBwYXNzZXMgdGhlIGJvIHNpemUgY2hl Y2suCisJICovCisJaWd0X3JlcXVpcmUoaWd0X2Rpc3BsYXlfaGFzX2Zvcm1hdF9tb2QoJmRhdGEt PmRpc3BsYXksCisJCQkJCSAgICAgICBEUk1fRk9STUFUX05WMTIsCisJCQkJCSAgICAgICBkYXRh LT5tb2RpZmllcikpOworCisJYm8gPSBnZW1fY3JlYXRlKGRhdGEtPmRybV9mZCwgKDFVTEwgPDwg MzIpIC0gNDA5Nik7CisJaWd0X3JlcXVpcmUoYm8pOworCisJb2Zmc2V0c1swXSA9IDA7CisJb2Zm c2V0c1sxXSA9ICgxVUxMIDw8IDMyKSAtIDgxOTIgKiA0MDk2OworCisJcmV0ID0gX19rbXNfYWRk ZmIoZGF0YS0+ZHJtX2ZkLCBibywKKwkJCSAgODE5MiwgODE4OCwKKwkJCSAgRFJNX0ZPUk1BVF9O VjEyLAorCQkJICBkYXRhLT5tb2RpZmllciwKKwkJCSAgc3RyaWRlcywgb2Zmc2V0cywgMSwKKwkJ CSAgRFJNX01PREVfRkJfTU9ESUZJRVJTLCAmZmJfaWQpOworCWlndF9hc3NlcnRfbmVxKHJldCwg MCk7CisKKwlnZW1fY2xvc2UoZGF0YS0+ZHJtX2ZkLCBibyk7Cit9CisKK3N0YXRpYyBpbnQgcm1m YihpbnQgZmQsIHVpbnQzMl90IGlkKQoreworCWludCBlcnI7CisKKwllcnIgPSAwOworCWlmIChp Z3RfaW9jdGwoZmQsIERSTV9JT0NUTF9NT0RFX1JNRkIsICZpZCkpCisJCWVyciA9IC1lcnJubzsK KworCWVycm5vID0gMDsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZAordGVzdF9hZGRm YihkYXRhX3QgKmRhdGEpCit7CisJdWludDY0X3Qgc2l6ZTsKKwl1aW50MzJfdCBmYl9pZDsKKwl1 aW50MzJfdCBibzsKKwl1aW50MzJfdCBvZmZzZXRzWzRdID0ge307CisJdWludDMyX3Qgc3RyaWRl c1s0XSA9IHt9OworCXVpbnQzMl90IGZvcm1hdDsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBnZW4z IG1heCB0aWxlZCBzdHJpZGUgaXMgOGsgYnl0ZXMsIGJ1dAorCSAqIG1heCBmYiBzaXplIG9mIDRr IHBpeGVscywgaGVuY2Ugd2UgY2FuJ3QgdGVzdAorCSAqIHdpdGggMzJicHAgYW5kIG11c3QgdXNl IDE2YnBwIGluc3RlYWQuCisJICovCisJaWYgKGludGVsX2dlbihkYXRhLT5kZXZpZCkgPT0gMykK KwkJZm9ybWF0ID0gRFJNX0ZPUk1BVF9SR0I1NjU7CisJZWxzZQorCQlmb3JtYXQgPSBEUk1fRk9S TUFUX1hSR0I4ODg4OworCisJaWd0X3JlcXVpcmUoaWd0X2Rpc3BsYXlfaGFzX2Zvcm1hdF9tb2Qo JmRhdGEtPmRpc3BsYXksCisJCQkJCSAgICAgICBmb3JtYXQsIGRhdGEtPm1vZGlmaWVyKSk7CisK KwlpZ3RfY2FsY19mYl9zaXplKGRhdGEtPmRybV9mZCwKKwkJCSBkYXRhLT5tYXhfZmJfd2lkdGgs CisJCQkgZGF0YS0+bWF4X2ZiX2hlaWdodCwKKwkJCSBmb3JtYXQsIGRhdGEtPm1vZGlmaWVyLAor CQkJICZzaXplLCAmc3RyaWRlc1swXSk7CisKKwlibyA9IGdlbV9jcmVhdGUoZGF0YS0+ZHJtX2Zk LCBzaXplKTsKKwlpZ3RfcmVxdWlyZShibyk7CisKKwlpZiAoaW50ZWxfZ2VuKGRhdGEtPmRldmlk KSA8IDQpCisJCWdlbV9zZXRfdGlsaW5nKGRhdGEtPmRybV9mZCwgYm8sCisJCQkgICAgICAgaWd0 X2ZiX21vZF90b190aWxpbmcoZGF0YS0+bW9kaWZpZXIpLCBzdHJpZGVzWzBdKTsKKworCXJldCA9 IF9fa21zX2FkZGZiKGRhdGEtPmRybV9mZCwgYm8sCisJCQkgIGRhdGEtPm1heF9mYl93aWR0aCwK KwkJCSAgZGF0YS0+bWF4X2ZiX2hlaWdodCwKKwkJCSAgZm9ybWF0LCBkYXRhLT5tb2RpZmllciwK KwkJCSAgc3RyaWRlcywgb2Zmc2V0cywgMSwKKwkJCSAgRFJNX01PREVfRkJfTU9ESUZJRVJTLCAm ZmJfaWQpOworCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKworCXJtZmIoZGF0YS0+ZHJtX2ZkLCBm Yl9pZCk7CisJZ2VtX2Nsb3NlKGRhdGEtPmRybV9mZCwgYm8pOworfQorCitzdGF0aWMgZGF0YV90 IGRhdGE7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCXVpbnQ2NF90IG1vZGlmaWVyOworCWNv bnN0IGNoYXIgKm5hbWU7Cit9IG1vZGlmaWVyc1tdID0geworCXsgRFJNX0ZPUk1BVF9NT0RfTElO RUFSLCAibGluZWFyIiwgfSwKKwl7IEk5MTVfRk9STUFUX01PRF9YX1RJTEVELCAieC10aWxlZCIs IH0sCisJeyBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwgInktdGlsZWQiLCB9LAorCXsgSTkxNV9G T1JNQVRfTU9EX1lmX1RJTEVELCAieWYtdGlsZWQiLCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0 cnVjdCB7CisJdWludDMyX3QgZm9ybWF0OworCXVpbnQ4X3QgYnBwOworfSBmb3JtYXRzW10gPSB7 CisJLyogRklYTUUgaWd0X2ZiIGRvZXNuJ3Qgc3VwcG9ydCBDOCBjdXJyZW50bHkgKi8KKwl7IERS TV9GT1JNQVRfQzgsIDgsIH0sCisJeyBEUk1fRk9STUFUX1JHQjU2NSwgMTYsIH0sCisJeyBEUk1f Rk9STUFUX1hSR0I4ODg4LCAzMiwgfSwKKwl7IERSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RiwgNjQs IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlpZ3Rfcm90YXRpb25fdCByb3RhdGlv bjsKKwl1aW50MTZfdCBhbmdsZTsKK30gcm90YXRpb25zW10gPSB7CisJeyBJR1RfUk9UQVRJT05f MCwgMCwgfSwKKwl7IElHVF9ST1RBVElPTl85MCwgOTAsIH0sCisJeyBJR1RfUk9UQVRJT05fMTgw LCAxODAsIH0sCisJeyBJR1RfUk9UQVRJT05fMjcwLCAyNzAsIH0sCit9OworCitpZ3RfbWFpbgor eworCWlndF9maXh0dXJlIHsKKwkJZHJtTW9kZVJlc1B0ciByZXM7CisKKwkJaWd0X3NraXBfb25f c2ltdWxhdGlvbigpOworCisJCWRhdGEuZHJtX2ZkID0gZHJtX29wZW5fZHJpdmVyX21hc3RlcihE UklWRVJfSU5URUwpOworCisJCWlndF9yZXF1aXJlKGlzX2k5MTVfZGV2aWNlKGRhdGEuZHJtX2Zk KSk7CisKKwkJZGF0YS5kZXZpZCA9IGludGVsX2dldF9kcm1fZGV2aWQoZGF0YS5kcm1fZmQpOwor CisJCWttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsKKworCQlpZ3RfcmVxdWlyZV9waXBl X2NyYyhkYXRhLmRybV9mZCk7CisJCWlndF9kaXNwbGF5X3JlcXVpcmUoJmRhdGEuZGlzcGxheSwg ZGF0YS5kcm1fZmQpOworCisJCXJlcyA9IGRybU1vZGVHZXRSZXNvdXJjZXMoZGF0YS5kcm1fZmQp OworCQlpZ3RfYXNzZXJ0KHJlcyk7CisKKwkJZGF0YS5tYXhfZmJfd2lkdGggPSByZXMtPm1heF93 aWR0aDsKKwkJZGF0YS5tYXhfZmJfaGVpZ2h0ID0gcmVzLT5tYXhfaGVpZ2h0OworCisJCWRybU1v ZGVGcmVlUmVzb3VyY2VzKHJlcyk7CisKKwkJaWd0X2luZm8oIk1heCBkcml2ZXIgZnJhbWVidWZm ZXIgc2l6ZSAlZHglZFxuIiwKKwkJCSBkYXRhLm1heF9mYl93aWR0aCwgZGF0YS5tYXhfZmJfaGVp Z2h0KTsKKworCQlkYXRhLnJhbV9zaXplID0gaW50ZWxfZ2V0X3RvdGFsX3JhbV9tYigpIDw8IDIw OworCQlkYXRhLmFwZXJfc2l6ZSA9IGdlbV9hcGVydHVyZV9zaXplKGRhdGEuZHJtX2ZkKTsKKwkJ ZGF0YS5tYXBwYWJsZV9zaXplID0gZ2VtX21hcHBhYmxlX2FwZXJ0dXJlX3NpemUoKTsKKworCQlp Z3RfaW5mbygiUkFNOiAlIlBSSXU2NCIgTWlCLCBHUFUgYWRkcmVzcyBzcGFjZTogJSJQUklkNjQi IE1pQiwgR0dUVCBtYXBwYWJsZSBzaXplOiAlIlBSSWQ2NCIgTWlCXG4iLAorCQkJIGRhdGEucmFt X3NpemUgPj4gMjAsIGRhdGEuYXBlcl9zaXplID4+IDIwLAorCQkJIGRhdGEubWFwcGFibGVfc2l6 ZSA+PiAyMCk7CisKKwkJLyoKKwkJICogR2VuMyByZW5kZXIgZW5naW5lIGlzIGxpbWl0ZWQgdG8g Mmt4MmssIHdoZXJlYXMKKwkJICogdGhlIGRpc3BsYXkgZW5naW5lIGNhbiBkbyA0a3g0ay4gVXNl IHRoZSBibGl0dGVyCisJCSAqIG9uIGdlbjMgdG8gYXZvaWQgZXhjZWVkaW5nIHRoZSByZW5kZXIg ZW5naW5lIGxpbWl0cy4KKwkJICogT24gZ2VuMiB3ZSBjb3VsZCB1c2UgZWl0aGVyLCBidXQgbGV0 J3MgZ28gZm9yIHRoZQorCQkgKiBibGl0dGVyIHRoZXJlIGFzIHdlbGwuCisJCSAqLworCQlpZiAo aW50ZWxfZ2VuKGRhdGEuZGV2aWQpID49IDQpCisJCQlkYXRhLnJlbmRlcl9jb3B5ID0gaWd0X2dl dF9yZW5kZXJfY29weWZ1bmMoZGF0YS5kZXZpZCk7CisKKwkJZGF0YS5idWZtZ3IgPSBkcm1faW50 ZWxfYnVmbWdyX2dlbV9pbml0KGRhdGEuZHJtX2ZkLCA0MDk2KTsKKwkJZGF0YS5iYXRjaCA9IGlu dGVsX2JhdGNoYnVmZmVyX2FsbG9jKGRhdGEuYnVmbWdyLCBkYXRhLmRldmlkKTsKKwl9CisKKwkv KgorCSAqIFNraXAgbGluZWFyIGFzIGl0IGRvZXNuJ3QgaGl0IHRoZSBvdmVyZmxvdyB3ZSB3YW50 CisJICogb24gYWNjb3VudCBvZiB0aGUgdGlsZSBoZWlnaHQgYmVpbmcgZWZmZWN0aXZlbHkgb25l LAorCSAqIGFuZCB0aHVzIHRoZSBrZW5ybmVsIHJvdW5kaW5nIHVwIHRvIHRoZSBuZXh0IHRpbGUK KwkgKiBoZWlnaHQgd29uJ3QgZG8gYW55dGhpbmcuCisJICovCisJZm9yIChpbnQgaSA9IDE7IGkg PCBBUlJBWV9TSVpFKG1vZGlmaWVycyk7IGkrKykgeworCQlpZ3Rfc3VidGVzdF9mKCIlcy1hZGRm Yi1zaXplLW92ZXJmbG93IiwKKwkJCSAgICAgIG1vZGlmaWVyc1tpXS5uYW1lKSB7CisJCQlkYXRh Lm1vZGlmaWVyID0gbW9kaWZpZXJzW2ldLm1vZGlmaWVyOworCQkJdGVzdF9zaXplX292ZXJmbG93 KCZkYXRhKTsKKwkJfQorCX0KKworCWZvciAoaW50IGkgPSAxOyBpIDwgQVJSQVlfU0laRShtb2Rp ZmllcnMpOyBpKyspIHsKKwkJaWd0X3N1YnRlc3RfZigiJXMtYWRkZmItc2l6ZS1vZmZzZXQtb3Zl cmZsb3ciLAorCQkJICAgICAgbW9kaWZpZXJzW2ldLm5hbWUpIHsKKwkJCWRhdGEubW9kaWZpZXIg PSBtb2RpZmllcnNbaV0ubW9kaWZpZXI7CisJCQl0ZXN0X3NpemVfb2Zmc2V0X292ZXJmbG93KCZk YXRhKTsKKwkJfQorCX0KKworCWZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShtb2RpZmll cnMpOyBpKyspIHsKKwkJaWd0X3N1YnRlc3RfZigiJXMtYWRkZmIiLCBtb2RpZmllcnNbaV0ubmFt ZSkgeworCQkJZGF0YS5tb2RpZmllciA9IG1vZGlmaWVyc1tpXS5tb2RpZmllcjsKKworCQkJdGVz dF9hZGRmYigmZGF0YSk7CisJCX0KKwl9CisKKwlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJ WkUobW9kaWZpZXJzKTsgaSsrKSB7CisJCWRhdGEubW9kaWZpZXIgPSBtb2RpZmllcnNbaV0ubW9k aWZpZXI7CisKKwkJZm9yIChpbnQgaiA9IDA7IGogPCBBUlJBWV9TSVpFKGZvcm1hdHMpOyBqKysp IHsKKwkJCWRhdGEuZm9ybWF0ID0gZm9ybWF0c1tqXS5mb3JtYXQ7CisKKwkJCWZvciAoaW50IGsg PSAwOyBrIDwgQVJSQVlfU0laRShyb3RhdGlvbnMpOyBrKyspIHsKKwkJCQlkYXRhLnJvdGF0aW9u ID0gcm90YXRpb25zW2tdLnJvdGF0aW9uOworCisJCQkJaWd0X3N1YnRlc3RfZigiJXMtJWRicHAt cm90YXRlLSVkIiwgbW9kaWZpZXJzW2ldLm5hbWUsCisJCQkJCSAgICAgIGZvcm1hdHNbal0uYnBw LCByb3RhdGlvbnNba10uYW5nbGUpIHsKKwkJCQkJaWd0X3JlcXVpcmUoaWd0X2ZiX3N1cHBvcnRl ZF9mb3JtYXQoZGF0YS5mb3JtYXQpKTsKKwkJCQkJaWd0X3JlcXVpcmUoaWd0X2Rpc3BsYXlfaGFz X2Zvcm1hdF9tb2QoJmRhdGEuZGlzcGxheSwgZGF0YS5mb3JtYXQsIGRhdGEubW9kaWZpZXIpKTsK KwkJCQkJcHJlcF9mYigmZGF0YSk7CisJCQkJCXRlc3Rfc2Nhbm91dCgmZGF0YSk7CisJCQkJfQor CQkJfQorCisJCQlpZ3RfZml4dHVyZQorCQkJCWNsZWFudXBfZmIoJmRhdGEpOworCQl9CisJfQor CisJaWd0X2ZpeHR1cmUgeworCQlpZ3RfZGlzcGxheV9maW5pKCZkYXRhLmRpc3BsYXkpOworCisJ CWludGVsX2JhdGNoYnVmZmVyX2ZyZWUoZGF0YS5iYXRjaCk7CisJCWRybV9pbnRlbF9idWZtZ3Jf ZGVzdHJveShkYXRhLmJ1Zm1ncik7CisJfQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVp bGQgYi90ZXN0cy9tZXNvbi5idWlsZAppbmRleCA3MTE5NzliNGExYzIuLmFkODQ0NDg3NTMwMiAx MDA2NDQKLS0tIGEvdGVzdHMvbWVzb24uYnVpbGQKKysrIGIvdGVzdHMvbWVzb24uYnVpbGQKQEAg LTE0LDYgKzE0LDcgQEAgdGVzdF9wcm9ncyA9IFsKIAkna21zX2F0b21pY19pbnRlcnJ1cHRpYmxl JywKIAkna21zX2F0b21pY190cmFuc2l0aW9uJywKIAkna21zX2F2YWlsYWJsZV9tb2Rlc19jcmMn LAorCSdrbXNfYmlnX2ZiJywKIAkna21zX2J1c3knLAogCSdrbXNfY2NzJywKIAkna21zX2NvbG9y JywKLS0gCjIuMjEuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2