From mboxrd@z Thu Jan 1 00:00:00 1970 From: jeff.mcgee@intel.com Subject: [PATCH i-g-t 1/2] lib: Add media spin Date: Tue, 10 Mar 2015 14:17:37 -0700 Message-ID: <1426022258-22481-2-git-send-email-jeff.mcgee@intel.com> References: <1426022258-22481-1-git-send-email-jeff.mcgee@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 7397B6E3CD for ; Tue, 10 Mar 2015 13:56:16 -0700 (PDT) In-Reply-To: <1426022258-22481-1-git-send-email-jeff.mcgee@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogSmVmZiBNY0dlZSA8amVmZi5tY2dlZUBpbnRlbC5jb20+CgpUaGUgbWVkaWEgc3BpbiB1 dGlsaXR5IGlzIGRlcml2ZWQgZnJvbSBtZWRpYSBmaWxsLiBUaGUgcHVycG9zZQppcyB0byBjcmVh dGUgYSBzaW1wbGUgbWVhbnMgdG8ga2VlcCB0aGUgcmVuZGVyIGVuZ2luZSAobWVkaWEKcGlwZWxp bmUpIGJ1c3kgZm9yIGEgY29udHJvbGxlZCBhbW91bnQgb2YgdGltZS4gSXQgZG9lcyBzbyBieQpl bWl0dGluZyBhIGJhdGNoIHdpdGggYSBzaW5nbGUgZXhlY3V0aW9uIHRocmVhZCB0aGF0IHNwaW5z IGluCmEgdGlnaHQgbG9vcCB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiB0aW1lcy4gRWFjaCBzcGlu IGluY3JlbWVudHMKYSBjb3VudGVyIHdob3NlIGZpbmFsIDMyLWJpdCB2YWx1ZSBpcyB3cml0dGVu IHRvIHRoZSBkZXN0aW5hdGlvbgpidWZmZXIgb24gY29tcGxldGlvbiBmb3IgY2hlY2tpbmcuIFRo ZSBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cwpHZW44LCBHZW44bHAsIGFuZCBHZW45LgoKU2lnbmVk LW9mZi1ieTogSmVmZiBNY0dlZSA8amVmZi5tY2dlZUBpbnRlbC5jb20+Ci0tLQogbGliL01ha2Vm aWxlLnNvdXJjZXMgICAgfCAgIDIgKwogbGliL2ludGVsX2JhdGNoYnVmZmVyLmMgfCAgMjQgKysr CiBsaWIvaW50ZWxfYmF0Y2hidWZmZXIuaCB8ICAyMiArKwogbGliL21lZGlhX3NwaW4uYyAgICAg ICAgfCA1NDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr CiBsaWIvbWVkaWFfc3Bpbi5oICAgICAgICB8ICAzOSArKysrCiA1IGZpbGVzIGNoYW5nZWQsIDYy NyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL21lZGlhX3NwaW4uYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGxpYi9tZWRpYV9zcGluLmgKCmRpZmYgLS1naXQgYS9saWIvTWFrZWZp bGUuc291cmNlcyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IDc2ZjM1M2EuLjNkOTM2Mjkg MTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL2xpYi9NYWtlZmlsZS5zb3Vy Y2VzCkBAIC0yOSw2ICsyOSw4IEBAIGxpYmludGVsX3Rvb2xzX2xhX1NPVVJDRVMgPSAJXAogCW1l ZGlhX2ZpbGxfZ2VuOC5jICAgICAgIFwKIAltZWRpYV9maWxsX2dlbjhscC5jICAgICBcCiAJbWVk aWFfZmlsbF9nZW45LmMgICAgICAgXAorCW1lZGlhX3NwaW4uaAkJXAorCW1lZGlhX3NwaW4uYwlc CiAJZ2VuN19tZWRpYS5oICAgICAgICAgICAgXAogCWdlbjhfbWVkaWEuaCAgICAgICAgICAgIFwK IAlyZW5kZXJjb3B5X2k5MTUuYwlcCmRpZmYgLS1naXQgYS9saWIvaW50ZWxfYmF0Y2hidWZmZXIu YyBiL2xpYi9pbnRlbF9iYXRjaGJ1ZmZlci5jCmluZGV4IGM3MGY2ZDguLjE0OTcwZTQgMTAwNjQ0 Ci0tLSBhL2xpYi9pbnRlbF9iYXRjaGJ1ZmZlci5jCisrKyBiL2xpYi9pbnRlbF9iYXRjaGJ1ZmZl ci5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiaW50ZWxfcmVnLmgiCiAjaW5jbHVkZSAi cmVuZGVyY29weS5oIgogI2luY2x1ZGUgIm1lZGlhX2ZpbGwuaCIKKyNpbmNsdWRlICJtZWRpYV9z cGluLmgiCiAjaW5jbHVkZSA8aTkxNV9kcm0uaD4KIAogLyoqCkBAIC01MzAsMyArNTMxLDI2IEBA IGlndF9maWxsZnVuY190IGlndF9nZXRfZ3BncHVfZmlsbGZ1bmMoaW50IGRldmlkKQogCiAJcmV0 dXJuIGZpbGw7CiB9CisKKy8qKgorICogaWd0X2dldF9tZWRpYV9zcGluZnVuYzoKKyAqIEBkZXZp ZDogcGNpIGRldmljZSBpZAorICoKKyAqIFJldHVybnM6CisgKgorICogVGhlIHBsYXRmb3JtLXNw ZWNpZmljIG1lZGlhIHNwaW4gZnVuY3Rpb24gcG9pbnRlciBmb3IgdGhlIGRldmljZSBzcGVjaWZp ZWQKKyAqIHdpdGggQGRldmlkLiBXaWxsIHJldHVybiBOVUxMIHdoZW4gbm8gbWVkaWEgc3BpbiBm dW5jdGlvbiBpcyBpbXBsZW1lbnRlZC4KKyAqLworaWd0X21lZGlhX3NwaW5mdW5jX3QgaWd0X2dl dF9tZWRpYV9zcGluZnVuYyhpbnQgZGV2aWQpCit7CisJaWd0X21lZGlhX3NwaW5mdW5jX3Qgc3Bp biA9IE5VTEw7CisKKwlpZiAoSVNfR0VOOShkZXZpZCkpCisJCXNwaW4gPSBnZW45X21lZGlhX3Nw aW5mdW5jOworCWVsc2UgaWYgKElTX0JST0FEV0VMTChkZXZpZCkpCisJCXNwaW4gPSBnZW44X21l ZGlhX3NwaW5mdW5jOworCWVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2aWQpKQorCQlzcGluID0g Z2VuOGxwX21lZGlhX3NwaW5mdW5jOworCisJcmV0dXJuIHNwaW47Cit9CmRpZmYgLS1naXQgYS9s aWIvaW50ZWxfYmF0Y2hidWZmZXIuaCBiL2xpYi9pbnRlbF9iYXRjaGJ1ZmZlci5oCmluZGV4IDEy ZjdiZTEuLjEzYjM1NmEgMTAwNjQ0Ci0tLSBhL2xpYi9pbnRlbF9iYXRjaGJ1ZmZlci5oCisrKyBi L2xpYi9pbnRlbF9iYXRjaGJ1ZmZlci5oCkBAIC0yNjUsNCArMjY1LDI2IEBAIHR5cGVkZWYgdm9p ZCAoKmlndF9maWxsZnVuY190KShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAogaWd0 X2ZpbGxmdW5jX3QgaWd0X2dldF9tZWRpYV9maWxsZnVuYyhpbnQgZGV2aWQpOwogaWd0X2ZpbGxm dW5jX3QgaWd0X2dldF9ncGdwdV9maWxsZnVuYyhpbnQgZGV2aWQpOwogCisvKioKKyAqIGlndF9t ZWRpYV9zcGluZnVuY190OgorICogQGJhdGNoOiBiYXRjaGJ1ZmZlciBvYmplY3QKKyAqIEBkc3Q6 IGRlc3RpbmF0aW9uIGktZy10IGJ1ZmZlciBvYmplY3QKKyAqIEBzcGluczogbnVtYmVyIG9mIGxv b3BzIHRvIGV4ZWN1dGUKKyAqCisgKiBUaGlzIGlzIHRoZSB0eXBlIG9mIHRoZSBwZXItcGxhdGZv cm0gbWVkaWEgc3BpbiBmdW5jdGlvbnMuIFRoZQorICogcGxhdGZvcm0tc3BlY2lmaWMgaW1wbGVt ZW50YXRpb24gY2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcKKyAqIGlndF9nZXRfbWVkaWFfc3Bp bmZ1bmMoKS4KKyAqCisgKiBUaGUgbWVkaWEgc3BpbiBmdW5jdGlvbiBlbWl0cyBhIGJhdGNoYnVm ZmVyIGZvciB0aGUgcmVuZGVyIGVuZ2luZSB3aXRoCisgKiB0aGUgbWVkaWEgcGlwZWxpbmUgc2Vs ZWN0ZWQuIFRoZSB3b3JrbG9hZCBjb25zaXN0cyBvZiBhIHNpbmdsZSB0aHJlYWQKKyAqIHdoaWNo IHNwaW5zIGluIGEgdGlnaHQgbG9vcCB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiB0aW1lcy4gRWFj aCBzcGluCisgKiBpbmNyZW1lbnRzIGEgY291bnRlciB3aG9zZSBmaW5hbCAzMi1iaXQgdmFsdWUg aXMgd3JpdHRlbiB0byB0aGUKKyAqIGRlc3RpbmF0aW9uIGJ1ZmZlciBvbiBjb21wbGV0aW9uLiBU aGlzIHV0aWxpdHkgcHJvdmlkZXMgYSBzaW1wbGUgd2F5CisgKiB0byBrZWVwIHRoZSByZW5kZXIg ZW5naW5lIGJ1c3kgZm9yIGEgc2V0IHRpbWUgZm9yIHZhcmlvdXMgdGVzdHMuCisgKi8KK3R5cGVk ZWYgdm9pZCAoKmlndF9tZWRpYV9zcGluZnVuY190KShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLAorCQkJCSAgICAgc3RydWN0IGlndF9idWYgKmRzdCwgdWludDMyX3Qgc3BpbnMpOwor CitpZ3RfbWVkaWFfc3BpbmZ1bmNfdCBpZ3RfZ2V0X21lZGlhX3NwaW5mdW5jKGludCBkZXZpZCk7 CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL21lZGlhX3NwaW4uYyBiL2xpYi9tZWRpYV9zcGlu LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0YzU1YQotLS0gL2Rldi9u dWxsCisrKyBiL2xpYi9tZWRpYV9zcGluLmMKQEAgLTAsMCArMSw1NDAgQEAKKy8qCisgKiBDb3B5 cmlnaHQgwqkgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisg KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0 byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUg bmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1 YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MK KyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogCUplZmYgTWNHZWUgPGpl ZmYubWNnZWVAaW50ZWwuY29tPgorICovCisKKyNpbmNsdWRlIDxpbnRlbF9idWZtZ3IuaD4KKyNp bmNsdWRlIDxpOTE1X2RybS5oPgorI2luY2x1ZGUgImludGVsX3JlZy5oIgorI2luY2x1ZGUgImRy bXRlc3QuaCIKKyNpbmNsdWRlICJpbnRlbF9iYXRjaGJ1ZmZlci5oIgorI2luY2x1ZGUgImdlbjhf bWVkaWEuaCIKKyNpbmNsdWRlICJtZWRpYV9zcGluLmgiCisKK3N0YXRpYyBjb25zdCB1aW50MzJf dCBzcGluX2tlcm5lbFtdWzRdID0geworCXsgMHgwMDYwMDAwMSwgMHgyMDgwMDIwOCwgMHgwMDhk MDAwMCwgMHgwMDAwMDAwMCB9LCAvKiBtb3YgKDgpcjQuMDwxPjp1ZCByMC4wPDg7ODsxPjp1ZCAq LworCXsgMHgwMDIwMDAwMSwgMHgyMDgwMDIwOCwgMHgwMDQ1MDA0MCwgMHgwMDAwMDAwMCB9LCAv KiBtb3YgKDIpcjQuMDwxPi51ZCByMi4wPDI7MjsxPjp1ZCAqLworCXsgMHgwMDAwMDAwMSwgMHgy MDg4MDYwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMyB9LCAvKiBtb3YgKDEpcjQuODwxPjp1ZCAw eDMgKi8KKwl7IDB4MDAwMDAwMDEsIDB4MjBhMDA2MDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAg fSwgLyogbW92ICgxKXI1LjA8MT46dWQgMCAqLworCXsgMHgwMDAwMDA0MCwgMHgyMGEwMDIwOCwg MHgwNjAwMDBhMCwgMHgwMDAwMDAwMSB9LCAvKiBhZGQgKDEpcjUuMDwxPjp1ZCByNS4wPDA7MTsw Pjp1ZCAxICovCisJeyAweDAxMDAwMDEwLCAweDIwMDAwMjAwLCAweDAyMDAwMDIwLCAweDAwMDAw MGEwIH0sIC8qIGNtcC5lLmYwLjAgKDEpbnVsbDwxPiByMTwwOzE7MD4gcjU8MDsxOzA+ICovCisJ eyAweDAwMTEwMDI3LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmUwIH0sIC8qIH5m MC4wIHdoaWxlICgxKSAtMzIgKi8KKwl7IDB4MGM4MDAwMzEsIDB4MjAwMDBhMDAsIDB4MGUwMDAw ODAsIDB4MDQwYTgwMDAgfSwgLyogc2VuZC5kY2RwMSAoMTYpbnVsbDwxPiByNC4wPDA7MTswPiAw eDA0MGE4MDAwICovCisJeyAweDAwNjAwMDAxLCAweDJlMDAwMjA4LCAweDAwOGQwMDAwLCAweDAw MDAwMDAwIH0sIC8qIG1vdiAoOClyMTEyPDE+OnVkIHIwLjA8ODs4OzE+OnVkICovCisJeyAweDA3 ODAwMDMxLCAweDIwMDAwYTQwLCAweDBlMDAwZTAwLCAweDgyMDAwMDEwIH0sIC8qIHNlbmQudHMg KDE2KW51bGw8MT4gcjExMjwwOzE7MD46ZCAweDgyMDAwMDEwICovCit9OworCitzdGF0aWMgdWlu dDMyX3QKK2JhdGNoX3VzZWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK3sKKwly ZXR1cm4gYmF0Y2gtPnB0ciAtIGJhdGNoLT5idWZmZXI7Cit9CisKK3N0YXRpYyB1aW50MzJfdAor YmF0Y2hfYWxpZ24oc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgYWxp Z24pCit7CisJdWludDMyX3Qgb2Zmc2V0ID0gYmF0Y2hfdXNlZChiYXRjaCk7CisJb2Zmc2V0ID0g QUxJR04ob2Zmc2V0LCBhbGlnbik7CisJYmF0Y2gtPnB0ciA9IGJhdGNoLT5idWZmZXIgKyBvZmZz ZXQ7CisJcmV0dXJuIG9mZnNldDsKK30KKworc3RhdGljIHZvaWQgKgorYmF0Y2hfYWxsb2Moc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxp Z24pCit7CisJdWludDMyX3Qgb2Zmc2V0ID0gYmF0Y2hfYWxpZ24oYmF0Y2gsIGFsaWduKTsKKwli YXRjaC0+cHRyICs9IHNpemU7CisJcmV0dXJuIG1lbXNldChiYXRjaC0+YnVmZmVyICsgb2Zmc2V0 LCAwLCBzaXplKTsKK30KKworc3RhdGljIHVpbnQzMl90CitiYXRjaF9vZmZzZXQoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdm9pZCAqcHRyKQoreworCXJldHVybiAodWludDhfdCAq KXB0ciAtIGJhdGNoLT5idWZmZXI7Cit9CisKK3N0YXRpYyB1aW50MzJfdAorYmF0Y2hfY29weShz dHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBjb25zdCB2b2lkICpwdHIsIHVpbnQzMl90 IHNpemUsCisJICAgdWludDMyX3QgYWxpZ24pCit7CisJcmV0dXJuIGJhdGNoX29mZnNldChiYXRj aCwgbWVtY3B5KGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplLCBhbGlnbiksIHB0ciwgc2l6ZSkpOwor fQorCitzdGF0aWMgdm9pZAorZ2VuOF9yZW5kZXJfZmx1c2goc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCwgdWludDMyX3QgYmF0Y2hfZW5kKQoreworCWludCByZXQ7CisKKwlyZXQgPSBk cm1faW50ZWxfYm9fc3ViZGF0YShiYXRjaC0+Ym8sIDAsIDQwOTYsIGJhdGNoLT5idWZmZXIpOwor CWlmIChyZXQgPT0gMCkKKwkJcmV0ID0gZHJtX2ludGVsX2dlbV9ib19jb250ZXh0X2V4ZWMoYmF0 Y2gtPmJvLCBOVUxMLAorCQkJCQkJICAgIGJhdGNoX2VuZCwgMCk7CisJaWd0X2Fzc2VydChyZXQg PT0gMCk7Cit9CisKK3N0YXRpYyB1aW50MzJfdAorZ2VuOF9zcGluX2N1cmJlX2J1ZmZlcl9kYXRh KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCisJCQkgICAgdWludDMyX3QgaXRlcnMp Cit7CisJdWludDMyX3QgKmN1cmJlX2J1ZmZlcjsKKwl1aW50MzJfdCBvZmZzZXQ7CisKKwljdXJi ZV9idWZmZXIgPSBiYXRjaF9hbGxvYyhiYXRjaCwgNjQsIDY0KTsKKwlvZmZzZXQgPSBiYXRjaF9v ZmZzZXQoYmF0Y2gsIGN1cmJlX2J1ZmZlcik7CisJKmN1cmJlX2J1ZmZlciA9IGl0ZXJzOworCisJ cmV0dXJuIG9mZnNldDsKK30KKworc3RhdGljIHVpbnQzMl90CitnZW44X3NwaW5fc3VyZmFjZV9z dGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorCQkJc3RydWN0IGlndF9idWYg KmJ1ZiwKKwkJCXVpbnQzMl90IGZvcm1hdCwKKwkJCWludCBpc19kc3QpCit7CisJc3RydWN0IGdl bjhfc3VyZmFjZV9zdGF0ZSAqc3M7CisJdWludDMyX3Qgd3JpdGVfZG9tYWluLCByZWFkX2RvbWFp biwgb2Zmc2V0OworCWludCByZXQ7CisKKwlpZiAoaXNfZHN0KSB7CisJCXdyaXRlX2RvbWFpbiA9 IHJlYWRfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1JFTkRFUjsKKwl9IGVsc2UgeworCQl3cml0 ZV9kb21haW4gPSAwOworCQlyZWFkX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSOwor CX0KKworCXNzID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVvZigqc3MpLCA2NCk7CisJb2Zmc2V0 ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBzcyk7CisKKwlzcy0+c3MwLnN1cmZhY2VfdHlwZSA9IEdF TjhfU1VSRkFDRV8yRDsKKwlzcy0+c3MwLnN1cmZhY2VfZm9ybWF0ID0gZm9ybWF0OworCXNzLT5z czAucmVuZGVyX2NhY2hlX3JlYWRfd3JpdGUgPSAxOworCXNzLT5zczAudmVydGljYWxfYWxpZ25t ZW50ID0gMTsgLyogYWxpZ24gNCAqLworCXNzLT5zczAuaG9yaXpvbnRhbF9hbGlnbm1lbnQgPSAx OyAvKiBhbGlnbiA0ICovCisKKwlpZiAoYnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWCkKKwkJ c3MtPnNzMC50aWxlZF9tb2RlID0gMjsKKwllbHNlIGlmIChidWYtPnRpbGluZyA9PSBJOTE1X1RJ TElOR19ZKQorCQlzcy0+c3MwLnRpbGVkX21vZGUgPSAzOworCisJc3MtPnNzOC5iYXNlX2FkZHIg PSBidWYtPmJvLT5vZmZzZXQ7CisKKwlyZXQgPSBkcm1faW50ZWxfYm9fZW1pdF9yZWxvYyhiYXRj aC0+Ym8sCisJCQkJYmF0Y2hfb2Zmc2V0KGJhdGNoLCBzcykgKyA4ICogNCwKKwkJCQlidWYtPmJv LCAwLAorCQkJCXJlYWRfZG9tYWluLCB3cml0ZV9kb21haW4pOworCWlndF9hc3NlcnQocmV0ID09 IDApOworCisJc3MtPnNzMi5oZWlnaHQgPSBpZ3RfYnVmX2hlaWdodChidWYpIC0gMTsKKwlzcy0+ c3MyLndpZHRoICA9IGlndF9idWZfd2lkdGgoYnVmKSAtIDE7CisJc3MtPnNzMy5waXRjaCAgPSBi dWYtPnN0cmlkZSAtIDE7CisKKwlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X3IgPSA0Owor CXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfZyA9IDU7CisJc3MtPnNzNy5zaGFkZXJfY2hh bmVsX3NlbGVjdF9iID0gNjsKKwlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2EgPSA3Owor CisJcmV0dXJuIG9mZnNldDsKK30KKworc3RhdGljIHVpbnQzMl90CitnZW44X3NwaW5fYmluZGlu Z190YWJsZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorCQkJc3RydWN0IGlndF9i dWYgKmRzdCkKK3sKKwl1aW50MzJfdCAqYmluZGluZ190YWJsZSwgb2Zmc2V0OworCisJYmluZGlu Z190YWJsZSA9IGJhdGNoX2FsbG9jKGJhdGNoLCAzMiwgNjQpOworCW9mZnNldCA9IGJhdGNoX29m ZnNldChiYXRjaCwgYmluZGluZ190YWJsZSk7CisKKwliaW5kaW5nX3RhYmxlWzBdID0gZ2VuOF9z cGluX3N1cmZhY2Vfc3RhdGUoYmF0Y2gsIGRzdCwKKwkJCQkJR0VOOF9TVVJGQUNFRk9STUFUX1I4 X1VOT1JNLCAxKTsKKworCXJldHVybiBvZmZzZXQ7Cit9CisKK3N0YXRpYyB1aW50MzJfdAorZ2Vu OF9zcGluX21lZGlhX2tlcm5lbChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorCQkg ICAgICAgY29uc3QgdWludDMyX3Qga2VybmVsW11bNF0sCisJCSAgICAgICBzaXplX3Qgc2l6ZSkK K3sKKwl1aW50MzJfdCBvZmZzZXQ7CisKKwlvZmZzZXQgPSBiYXRjaF9jb3B5KGJhdGNoLCBrZXJu ZWwsIHNpemUsIDY0KTsKKworCXJldHVybiBvZmZzZXQ7Cit9CisKK3N0YXRpYyB1aW50MzJfdAor Z2VuOF9zcGluX2ludGVyZmFjZV9kZXNjcmlwdG9yKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsCisJCQkgICAgICAgc3RydWN0IGlndF9idWYgKmRzdCkKK3sKKwlzdHJ1Y3QgZ2VuOF9p bnRlcmZhY2VfZGVzY3JpcHRvcl9kYXRhICppZGQ7CisJdWludDMyX3Qgb2Zmc2V0OworCXVpbnQz Ml90IGJpbmRpbmdfdGFibGVfb2Zmc2V0LCBrZXJuZWxfb2Zmc2V0OworCisJYmluZGluZ190YWJs ZV9vZmZzZXQgPSBnZW44X3NwaW5fYmluZGluZ190YWJsZShiYXRjaCwgZHN0KTsKKwlrZXJuZWxf b2Zmc2V0ID0gZ2VuOF9zcGluX21lZGlhX2tlcm5lbChiYXRjaCwgc3Bpbl9rZXJuZWwsCisJCQkJ CSAgICAgICBzaXplb2Yoc3Bpbl9rZXJuZWwpKTsKKworCWlkZCA9IGJhdGNoX2FsbG9jKGJhdGNo LCBzaXplb2YoKmlkZCksIDY0KTsKKwlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGlkZCk7 CisKKwlpZGQtPmRlc2MwLmtlcm5lbF9zdGFydF9wb2ludGVyID0gKGtlcm5lbF9vZmZzZXQgPj4g Nik7CisKKwlpZGQtPmRlc2MyLnNpbmdsZV9wcm9ncmFtX2Zsb3cgPSAxOworCWlkZC0+ZGVzYzIu ZmxvYXRpbmdfcG9pbnRfbW9kZSA9IEdFTjhfRkxPQVRJTkdfUE9JTlRfSUVFRV83NTQ7CisKKwlp ZGQtPmRlc2MzLnNhbXBsZXJfY291bnQgPSAwOyAgICAgIC8qIDAgc2FtcGxlcnMgdXNlZCAqLwor CWlkZC0+ZGVzYzMuc2FtcGxlcl9zdGF0ZV9wb2ludGVyID0gMDsKKworCWlkZC0+ZGVzYzQuYmlu ZGluZ190YWJsZV9lbnRyeV9jb3VudCA9IDA7CisJaWRkLT5kZXNjNC5iaW5kaW5nX3RhYmxlX3Bv aW50ZXIgPSAoYmluZGluZ190YWJsZV9vZmZzZXQgPj4gNSk7CisKKwlpZGQtPmRlc2M1LmNvbnN0 YW50X3VyYl9lbnRyeV9yZWFkX29mZnNldCA9IDA7CisJaWRkLT5kZXNjNS5jb25zdGFudF91cmJf ZW50cnlfcmVhZF9sZW5ndGggPSAxOyAvKiBncmYgMSAqLworCisJcmV0dXJuIG9mZnNldDsKK30K Kworc3RhdGljIHZvaWQKK2dlbjhfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Moc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCkKK3sKKwlPVVRfQkFUQ0goR0VOOF9TVEFURV9CQVNFX0FERFJF U1MgfCAoMTYgLSAyKSk7CisKKwkvKiBnZW5lcmFsICovCisJT1VUX0JBVENIKDAgfCBCQVNFX0FE RFJFU1NfTU9ESUZZKTsKKwlPVVRfQkFUQ0goMCk7CisKKwkvKiBzdGF0ZWxlc3MgZGF0YSBwb3J0 ICovCisJT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKworCS8qIHN1cmZhY2Ug Ki8KKwlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fU0FNUExFUiwgMCwgQkFT RV9BRERSRVNTX01PRElGWSk7CisKKwkvKiBkeW5hbWljICovCisJT1VUX1JFTE9DKGJhdGNoLT5i bywgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiB8IEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwK KwkJMCwgQkFTRV9BRERSRVNTX01PRElGWSk7CisKKwkvKiBpbmRpcmVjdCAqLworCU9VVF9CQVRD SCgwKTsKKwlPVVRfQkFUQ0goMCk7CisKKwkvKiBpbnN0cnVjdGlvbiAqLworCU9VVF9SRUxPQyhi YXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwgQkFTRV9BRERSRVNTX01P RElGWSk7CisKKwkvKiBnZW5lcmFsIHN0YXRlIGJ1ZmZlciBzaXplICovCisJT1VUX0JBVENIKDB4 ZmZmZmYwMDAgfCAxKTsKKwkvKiBkeW5hbWljIHN0YXRlIGJ1ZmZlciBzaXplICovCisJT1VUX0JB VENIKDEgPDwgMTIgfCAxKTsKKwkvKiBpbmRpcmVjdCBvYmplY3QgYnVmZmVyIHNpemUgKi8KKwlP VVRfQkFUQ0goMHhmZmZmZjAwMCB8IDEpOworCS8qIGludHJ1Y3Rpb24gYnVmZmVyIHNpemUsIG11 c3Qgc2V0IG1vZGlmeSBlbmFibGUgYml0LCBvdGhlcndpc2UgaXQgbWF5IHJlc3VsdCBpbiBHUFUg aGFuZyAqLworCU9VVF9CQVRDSCgxIDw8IDEyIHwgMSk7Cit9CisKK3N0YXRpYyB2b2lkCitnZW45 X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gp Cit7CisJT1VUX0JBVENIKEdFTjhfU1RBVEVfQkFTRV9BRERSRVNTIHwgKDE5IC0gMikpOworCisJ LyogZ2VuZXJhbCAqLworCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7CisJT1VU X0JBVENIKDApOworCisJLyogc3RhdGVsZXNzIGRhdGEgcG9ydCAqLworCU9VVF9CQVRDSCgwIHwg QkFTRV9BRERSRVNTX01PRElGWSk7CisKKwkvKiBzdXJmYWNlICovCisJT1VUX1JFTE9DKGJhdGNo LT5ibywgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIsIDAsIEJBU0VfQUREUkVTU19NT0RJRlkpOwor CisJLyogZHluYW1pYyAqLworCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9S RU5ERVIgfCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sCisJCTAsIEJBU0VfQUREUkVTU19N T0RJRlkpOworCisJLyogaW5kaXJlY3QgKi8KKwlPVVRfQkFUQ0goMCk7CisJT1VUX0JBVENIKDAp OworCisJLyogaW5zdHJ1Y3Rpb24gKi8KKwlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9E T01BSU5fSU5TVFJVQ1RJT04sIDAsIEJBU0VfQUREUkVTU19NT0RJRlkpOworCisJLyogZ2VuZXJh bCBzdGF0ZSBidWZmZXIgc2l6ZSAqLworCU9VVF9CQVRDSCgweGZmZmZmMDAwIHwgMSk7CisJLyog ZHluYW1pYyBzdGF0ZSBidWZmZXIgc2l6ZSAqLworCU9VVF9CQVRDSCgxIDw8IDEyIHwgMSk7CisJ LyogaW5kaXJlY3Qgb2JqZWN0IGJ1ZmZlciBzaXplICovCisJT1VUX0JBVENIKDB4ZmZmZmYwMDAg fCAxKTsKKwkvKiBpbnRydWN0aW9uIGJ1ZmZlciBzaXplLCBtdXN0IHNldCBtb2RpZnkgZW5hYmxl IGJpdCwgb3RoZXJ3aXNlIGl0IG1heSByZXN1bHQgaW4gR1BVIGhhbmcgKi8KKwlPVVRfQkFUQ0go MSA8PCAxMiB8IDEpOworCisJLyogQmluZGxlc3Mgc3VyZmFjZSBzdGF0ZSBiYXNlIGFkZHJlc3Mg Ki8KKwlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOworCU9VVF9CQVRDSCgwKTsK KwlPVVRfQkFUQ0goMHhmZmZmZjAwMCk7Cit9CisKK3N0YXRpYyB2b2lkCitnZW44X2VtaXRfdmZl X3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCit7CisJT1VUX0JBVENIKEdF TjhfTUVESUFfVkZFX1NUQVRFIHwgKDkgLSAyKSk7CisKKwkvKiBzY3JhdGNoIGJ1ZmZlciAqLwor CU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goMCk7CisKKwkvKiBudW1iZXIgb2YgdGhyZWFkcyAm IHVyYiBlbnRyaWVzICovCisJT1VUX0JBVENIKDIgPDwgOCk7CisKKwlPVVRfQkFUQ0goMCk7CisK KwkvKiB1cmIgZW50cnkgc2l6ZSAmIGN1cmJlIHNpemUgKi8KKwlPVVRfQkFUQ0goMiA8PCAxNiB8 CisJCTIpOworCisJLyogc2NvcmVib2FyZCAqLworCU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0go MCk7CisJT1VUX0JBVENIKDApOworfQorCitzdGF0aWMgdm9pZAorZ2VuOF9lbWl0X2N1cmJlX2xv YWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgY3VyYmVfYnVmZmVy KQoreworCU9VVF9CQVRDSChHRU44X01FRElBX0NVUkJFX0xPQUQgfCAoNCAtIDIpKTsKKwlPVVRf QkFUQ0goMCk7CisJLyogY3VyYmUgdG90YWwgZGF0YSBsZW5ndGggKi8KKwlPVVRfQkFUQ0goNjQp OworCS8qIGN1cmJlIGRhdGEgc3RhcnQgYWRkcmVzcywgaXMgcmVsYXRpdmUgdG8gdGhlIGR5bmFt aWNzIGJhc2UgYWRkcmVzcyAqLworCU9VVF9CQVRDSChjdXJiZV9idWZmZXIpOworfQorCitzdGF0 aWMgdm9pZAorZ2VuOF9lbWl0X2ludGVyZmFjZV9kZXNjcmlwdG9yX2xvYWQoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJCQkgICAgdWludDMyX3QgaW50ZXJmYWNlX2Rlc2NyaXB0 b3IpCit7CisJT1VUX0JBVENIKEdFTjhfTUVESUFfSU5URVJGQUNFX0RFU0NSSVBUT1JfTE9BRCB8 ICg0IC0gMikpOworCU9VVF9CQVRDSCgwKTsKKwkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBkYXRh IGxlbmd0aCAqLworCU9VVF9CQVRDSChzaXplb2Yoc3RydWN0IGdlbjhfaW50ZXJmYWNlX2Rlc2Ny aXB0b3JfZGF0YSkpOworCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIGFkZHJlc3MsIGlzIHJlbGF0 aXZlIHRvIHRoZSBkeW5hbWljcyBiYXNlIGFkZHJlc3MgKi8KKwlPVVRfQkFUQ0goaW50ZXJmYWNl X2Rlc2NyaXB0b3IpOworfQorCitzdGF0aWMgdm9pZAorZ2VuOF9lbWl0X21lZGlhX3N0YXRlX2Zs dXNoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCit7CisJT1VUX0JBVENIKEdFTjhf TUVESUFfU1RBVEVfRkxVU0ggfCAoMiAtIDIpKTsKKwlPVVRfQkFUQ0goMCk7Cit9CisKK3N0YXRp YyB2b2lkCitnZW44X2VtaXRfbWVkaWFfb2JqZWN0cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoKQoreworCU9VVF9CQVRDSChHRU44X01FRElBX09CSkVDVCB8ICg4IC0gMikpOworCisJ LyogaW50ZXJmYWNlIGRlc2NyaXB0b3Igb2Zmc2V0ICovCisJT1VUX0JBVENIKDApOworCisJLyog d2l0aG91dCBpbmRpcmVjdCBkYXRhICovCisJT1VUX0JBVENIKDApOworCU9VVF9CQVRDSCgwKTsK KworCS8qIHNjb3JlYm9hcmQgKi8KKwlPVVRfQkFUQ0goMCk7CisJT1VUX0JBVENIKDApOworCisJ LyogaW5saW5lIGRhdGEgKHhvZmZzZXQsIHlvZmZzZXQpICovCisJT1VUX0JBVENIKDApOworCU9V VF9CQVRDSCgwKTsKKwlnZW44X2VtaXRfbWVkaWFfc3RhdGVfZmx1c2goYmF0Y2gpOworfQorCitz dGF0aWMgdm9pZAorZ2VuOGxwX2VtaXRfbWVkaWFfb2JqZWN0cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoKQoreworCU9VVF9CQVRDSChHRU44X01FRElBX09CSkVDVCB8ICg4IC0gMikp OworCisJLyogaW50ZXJmYWNlIGRlc2NyaXB0b3Igb2Zmc2V0ICovCisJT1VUX0JBVENIKDApOwor CisJLyogd2l0aG91dCBpbmRpcmVjdCBkYXRhICovCisJT1VUX0JBVENIKDApOworCU9VVF9CQVRD SCgwKTsKKworCS8qIHNjb3JlYm9hcmQgKi8KKwlPVVRfQkFUQ0goMCk7CisJT1VUX0JBVENIKDAp OworCisJLyogaW5saW5lIGRhdGEgKHhvZmZzZXQsIHlvZmZzZXQpICovCisJT1VUX0JBVENIKDAp OworCU9VVF9CQVRDSCgwKTsKK30KKworLyoKKyAqIFRoaXMgc2V0cyB1cCB0aGUgbWVkaWEgcGlw ZWxpbmUsCisgKgorICogKy0tLS0tLS0tLS0tLS0tLSsgPC0tLS0gNDA5NgorICogfCAgICAgICBe ICAgICAgIHwKKyAqIHwgICAgICAgfCAgICAgICB8CisgKiB8ICAgIHZhcmlvdXMgICAgfAorICog fCAgICAgIHN0YXRlICAgIHwKKyAqIHwgICAgICAgfCAgICAgICB8CisgKiB8X19fX19fX3xfX19f X19ffCA8LS0tLSAyMDQ4ICsgPworICogfCAgICAgICBeICAgICAgIHwKKyAqIHwgICAgICAgfCAg ICAgICB8CisgKiB8ICAgYmF0Y2ggICAgICAgfAorICogfCAgICBjb21tYW5kcyAgIHwKKyAqIHwg ICAgICAgfCAgICAgICB8CisgKiB8ICAgICAgIHwgICAgICAgfAorICogKy0tLS0tLS0tLS0tLS0t LSsgPC0tLS0gMCArID8KKyAqCisgKi8KKworI2RlZmluZSBCQVRDSF9TVEFURV9TUExJVCAyMDQ4 CisKK3ZvaWQKK2dlbjhfbWVkaWFfc3BpbmZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCwKKwkJICAgIHN0cnVjdCBpZ3RfYnVmICpkc3QsIHVpbnQzMl90IHNwaW5zKQoreworCXVp bnQzMl90IGN1cmJlX2J1ZmZlciwgaW50ZXJmYWNlX2Rlc2NyaXB0b3I7CisJdWludDMyX3QgYmF0 Y2hfZW5kOworCisJaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfd2l0aF9jb250ZXh0KGJhdGNoLCBO VUxMKTsKKworCS8qIHNldHVwIHN0YXRlcyAqLworCWJhdGNoLT5wdHIgPSAmYmF0Y2gtPmJ1ZmZl cltCQVRDSF9TVEFURV9TUExJVF07CisKKwljdXJiZV9idWZmZXIgPSBnZW44X3NwaW5fY3VyYmVf YnVmZmVyX2RhdGEoYmF0Y2gsIHNwaW5zKTsKKwlpbnRlcmZhY2VfZGVzY3JpcHRvciA9IGdlbjhf c3Bpbl9pbnRlcmZhY2VfZGVzY3JpcHRvcihiYXRjaCwgZHN0KTsKKwlpZ3RfYXNzZXJ0KGJhdGNo LT5wdHIgPCAmYmF0Y2gtPmJ1ZmZlcls0MDk1XSk7CisKKwkvKiBtZWRpYSBwaXBlbGluZSAqLwor CWJhdGNoLT5wdHIgPSBiYXRjaC0+YnVmZmVyOworCU9VVF9CQVRDSChHRU44X1BJUEVMSU5FX1NF TEVDVCB8IFBJUEVMSU5FX1NFTEVDVF9NRURJQSk7CisJZ2VuOF9lbWl0X3N0YXRlX2Jhc2VfYWRk cmVzcyhiYXRjaCk7CisKKwlnZW44X2VtaXRfdmZlX3N0YXRlKGJhdGNoKTsKKworCWdlbjhfZW1p dF9jdXJiZV9sb2FkKGJhdGNoLCBjdXJiZV9idWZmZXIpOworCisJZ2VuOF9lbWl0X2ludGVyZmFj ZV9kZXNjcmlwdG9yX2xvYWQoYmF0Y2gsIGludGVyZmFjZV9kZXNjcmlwdG9yKTsKKworCWdlbjhf ZW1pdF9tZWRpYV9vYmplY3RzKGJhdGNoKTsKKworCU9VVF9CQVRDSChNSV9CQVRDSF9CVUZGRVJf RU5EKTsKKworCWJhdGNoX2VuZCA9IGJhdGNoX2FsaWduKGJhdGNoLCA4KTsKKwlpZ3RfYXNzZXJ0 KGJhdGNoX2VuZCA8IEJBVENIX1NUQVRFX1NQTElUKTsKKworCWdlbjhfcmVuZGVyX2ZsdXNoKGJh dGNoLCBiYXRjaF9lbmQpOworCWludGVsX2JhdGNoYnVmZmVyX3Jlc2V0KGJhdGNoKTsKK30KKwor dm9pZAorZ2VuOGxwX21lZGlhX3NwaW5mdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gsCisJCSAgICAgIHN0cnVjdCBpZ3RfYnVmICpkc3QsIHVpbnQzMl90IHNwaW5zKQoreworCXVp bnQzMl90IGN1cmJlX2J1ZmZlciwgaW50ZXJmYWNlX2Rlc2NyaXB0b3I7CisJdWludDMyX3QgYmF0 Y2hfZW5kOworCisJaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfd2l0aF9jb250ZXh0KGJhdGNoLCBO VUxMKTsKKworCS8qIHNldHVwIHN0YXRlcyAqLworCWJhdGNoLT5wdHIgPSAmYmF0Y2gtPmJ1ZmZl cltCQVRDSF9TVEFURV9TUExJVF07CisKKwljdXJiZV9idWZmZXIgPSBnZW44X3NwaW5fY3VyYmVf YnVmZmVyX2RhdGEoYmF0Y2gsIHNwaW5zKTsKKwlpbnRlcmZhY2VfZGVzY3JpcHRvciA9IGdlbjhf c3Bpbl9pbnRlcmZhY2VfZGVzY3JpcHRvcihiYXRjaCwgZHN0KTsKKwlpZ3RfYXNzZXJ0KGJhdGNo LT5wdHIgPCAmYmF0Y2gtPmJ1ZmZlcls0MDk1XSk7CisKKwkvKiBtZWRpYSBwaXBlbGluZSAqLwor CWJhdGNoLT5wdHIgPSBiYXRjaC0+YnVmZmVyOworCU9VVF9CQVRDSChHRU44X1BJUEVMSU5FX1NF TEVDVCB8IFBJUEVMSU5FX1NFTEVDVF9NRURJQSk7CisJZ2VuOF9lbWl0X3N0YXRlX2Jhc2VfYWRk cmVzcyhiYXRjaCk7CisKKwlnZW44X2VtaXRfdmZlX3N0YXRlKGJhdGNoKTsKKworCWdlbjhfZW1p dF9jdXJiZV9sb2FkKGJhdGNoLCBjdXJiZV9idWZmZXIpOworCisJZ2VuOF9lbWl0X2ludGVyZmFj ZV9kZXNjcmlwdG9yX2xvYWQoYmF0Y2gsIGludGVyZmFjZV9kZXNjcmlwdG9yKTsKKworCWdlbjhs cF9lbWl0X21lZGlhX29iamVjdHMoYmF0Y2gpOworCisJT1VUX0JBVENIKE1JX0JBVENIX0JVRkZF Ul9FTkQpOworCisJYmF0Y2hfZW5kID0gYmF0Y2hfYWxpZ24oYmF0Y2gsIDgpOworCWlndF9hc3Nl cnQoYmF0Y2hfZW5kIDwgQkFUQ0hfU1RBVEVfU1BMSVQpOworCisJZ2VuOF9yZW5kZXJfZmx1c2go YmF0Y2gsIGJhdGNoX2VuZCk7CisJaW50ZWxfYmF0Y2hidWZmZXJfcmVzZXQoYmF0Y2gpOworfQor Cit2b2lkCitnZW45X21lZGlhX3NwaW5mdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gsCisJCSAgICBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LCB1aW50MzJfdCBzcGlucykKK3sKKwl1aW50 MzJfdCBjdXJiZV9idWZmZXIsIGludGVyZmFjZV9kZXNjcmlwdG9yOworCXVpbnQzMl90IGJhdGNo X2VuZDsKKworCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX3dpdGhfY29udGV4dChiYXRjaCwgTlVM TCk7CisKKwkvKiBzZXR1cCBzdGF0ZXMgKi8KKwliYXRjaC0+cHRyID0gJmJhdGNoLT5idWZmZXJb QkFUQ0hfU1RBVEVfU1BMSVRdOworCisJY3VyYmVfYnVmZmVyID0gZ2VuOF9zcGluX2N1cmJlX2J1 ZmZlcl9kYXRhKGJhdGNoLCBzcGlucyk7CisJaW50ZXJmYWNlX2Rlc2NyaXB0b3IgPSBnZW44X3Nw aW5faW50ZXJmYWNlX2Rlc2NyaXB0b3IoYmF0Y2gsIGRzdCk7CisJaWd0X2Fzc2VydChiYXRjaC0+ cHRyIDwgJmJhdGNoLT5idWZmZXJbNDA5NV0pOworCisJLyogbWVkaWEgcGlwZWxpbmUgKi8KKwli YXRjaC0+cHRyID0gYmF0Y2gtPmJ1ZmZlcjsKKwlPVVRfQkFUQ0goR0VOOF9QSVBFTElORV9TRUxF Q1QgfCBQSVBFTElORV9TRUxFQ1RfTUVESUEgfAorCQkJR0VOOV9GT1JDRV9NRURJQV9BV0FLRV9F TkFCTEUgfAorCQkJR0VOOV9TQU1QTEVSX0RPUF9HQVRFX0RJU0FCTEUgfAorCQkJR0VOOV9QSVBF TElORV9TRUxFQ1RJT05fTUFTSyB8CisJCQlHRU45X1NBTVBMRVJfRE9QX0dBVEVfTUFTSyB8CisJ CQlHRU45X0ZPUkNFX01FRElBX0FXQUtFX01BU0spOworCWdlbjlfZW1pdF9zdGF0ZV9iYXNlX2Fk ZHJlc3MoYmF0Y2gpOworCisJZ2VuOF9lbWl0X3ZmZV9zdGF0ZShiYXRjaCk7CisKKwlnZW44X2Vt aXRfY3VyYmVfbG9hZChiYXRjaCwgY3VyYmVfYnVmZmVyKTsKKworCWdlbjhfZW1pdF9pbnRlcmZh Y2VfZGVzY3JpcHRvcl9sb2FkKGJhdGNoLCBpbnRlcmZhY2VfZGVzY3JpcHRvcik7CisKKwlnZW44 X2VtaXRfbWVkaWFfb2JqZWN0cyhiYXRjaCk7CisKKwlPVVRfQkFUQ0goR0VOOF9QSVBFTElORV9T RUxFQ1QgfCBQSVBFTElORV9TRUxFQ1RfTUVESUEgfAorCQkJR0VOOV9GT1JDRV9NRURJQV9BV0FL RV9ESVNBQkxFIHwKKwkJCUdFTjlfU0FNUExFUl9ET1BfR0FURV9FTkFCTEUgfAorCQkJR0VOOV9Q SVBFTElORV9TRUxFQ1RJT05fTUFTSyB8CisJCQlHRU45X1NBTVBMRVJfRE9QX0dBVEVfTUFTSyB8 CisJCQlHRU45X0ZPUkNFX01FRElBX0FXQUtFX01BU0spOworCisJT1VUX0JBVENIKE1JX0JBVENI X0JVRkZFUl9FTkQpOworCisJYmF0Y2hfZW5kID0gYmF0Y2hfYWxpZ24oYmF0Y2gsIDgpOworCWln dF9hc3NlcnQoYmF0Y2hfZW5kIDwgQkFUQ0hfU1RBVEVfU1BMSVQpOworCisJZ2VuOF9yZW5kZXJf Zmx1c2goYmF0Y2gsIGJhdGNoX2VuZCk7CisJaW50ZWxfYmF0Y2hidWZmZXJfcmVzZXQoYmF0Y2gp OworfQpkaWZmIC0tZ2l0IGEvbGliL21lZGlhX3NwaW4uaCBiL2xpYi9tZWRpYV9zcGluLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJjNDgyOQotLS0gL2Rldi9udWxsCisr KyBiL2xpYi9tZWRpYV9zcGluLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCDC qSAyMDE1IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh bnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkg b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg IlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0 aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAq IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29u cyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0 IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cisg KiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBP UgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JT IE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S IE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4g VEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAJSmVmZiBNY0dlZSA8amVmZi5tY2dl ZUBpbnRlbC5jb20+CisgKi8KKworI2lmbmRlZiBNRURJQV9TUElOX0gKKyNkZWZpbmUgTUVESUFf U1BJTl9ICisKK3ZvaWQgZ2VuOF9tZWRpYV9zcGluZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoLAorCQkJIHN0cnVjdCBpZ3RfYnVmICpkc3QsIHVpbnQzMl90IHNwaW5zKTsKKwor dm9pZCBnZW44bHBfbWVkaWFfc3BpbmZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCwKKwkJCSAgIHN0cnVjdCBpZ3RfYnVmICpkc3QsIHVpbnQzMl90IHNwaW5zKTsKKwordm9pZCBn ZW45X21lZGlhX3NwaW5mdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCisJCQkg c3RydWN0IGlndF9idWYgKmRzdCwgdWludDMyX3Qgc3BpbnMpOworCisjZW5kaWYgLyogTUVESUFf U1BJTl9IICovCi0tIAoyLjMuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p bnRlbC1nZngK