From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roman Volkov Subject: [PATCH v2 3/4]: ALSA: oxygen: Move the Xonar DG mixer code away from this file and actual driver changes Date: Thu, 21 Nov 2013 19:28:48 +0400 Message-ID: <20131121192848.1c0d6932@v1ron-desktop> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from smtp1.mail.ru (smtp1.mail.ru [94.100.176.129]) by alsa0.perex.cz (Postfix) with ESMTP id 07F24260786 for ; Thu, 21 Nov 2013 16:28:57 +0100 (CET) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: clemens@ladisch.de Cc: alsa-devel@alsa-project.org List-Id: alsa-devel@alsa-project.org TW92ZSB0aGUgbWl4ZXIgY29udHJvbHMgYW5kIG90aGVyIHN5c3RlbSBzdHJ1Y3R1cmVzIHRvIGEg c2VwYXJhdGUgZmlsZS4gQWxzbyB0aGVyZSBhcmUgYWN0dWFsIGRyaXZlciBjaGFuZ2VzOiBNdWx0 aWNoYW5uZWwgcm91dGluZywgQ1M0MjQ1IGluaXRpYWxpemF0aW9uLCBDUzQyNDUgU1BJIHJlYWRp bmcgYW5kIHdyaXRpbmcsIERBQy9BREMgc2V0dGluZ3MsIHN1c3BlbmQvcmVzdW1lIGxvZ2ljLgoK U2lnbmVkLW9mZi1ieTogUm9tYW4gSS4gVm9sa292IDx2MXJvbkBtYWlsLnJ1PgotLS0KSSBjYW4g Y29uZmlybSwgdGhlIGRyaXZlciBhbHNvIHdvcmtzIHdpdGggT1hZR0VOX0ZVTkNUSU9OX0VOQUJM RV9TUElfNF81IHJlbW92ZWQuCmRpZmYgLXVwck4gbGludXgtMy4xMi9zb3VuZC9wY2kvb3h5Z2Vu L294eWdlbl9taXhlci5jIGxpbnV4LTMuMTItbXkvc291bmQvcGNpL294eWdlbi9veHlnZW5fbWl4 ZXIuYwotLS0gbGludXgtMy4xMi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9taXhlci5jCTIwMTMt MTEtMDQgMDM6NDE6NTEuMDAwMDAwMDAwICswNDAwCisrKyBsaW51eC0zLjEyLW15L3NvdW5kL3Bj aS9veHlnZW4vb3h5Z2VuX21peGVyLmMJMjAxMy0xMS0yMCAxOToxMzowOS4wMDAwMDAwMDAgKzA0 MDAKQEAgLTE5MCw2ICsxOTAsNyBAQCB2b2lkIG94eWdlbl91cGRhdGVfZGFjX3JvdXRpbmcoc3Ry dWN0IG94CiAJaWYgKGNoaXAtPm1vZGVsLnVwZGF0ZV9jZW50ZXJfbGZlX21peCkKIAkJY2hpcC0+ bW9kZWwudXBkYXRlX2NlbnRlcl9sZmVfbWl4KGNoaXAsIGNoaXAtPmRhY19yb3V0aW5nID4gMik7 CiB9CitFWFBPUlRfU1lNQk9MKG94eWdlbl91cGRhdGVfZGFjX3JvdXRpbmcpOwogCiBzdGF0aWMg aW50IHVwbWl4X3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsIHN0cnVjdCBzbmRfY3RsX2Vs ZW1fdmFsdWUgKnZhbHVlKQogewpkaWZmIC11cHJOIGxpbnV4LTMuMTIvc291bmQvcGNpL294eWdl bi9jczQyNDUuaCBsaW51eC0zLjEyLW15L3NvdW5kL3BjaS9veHlnZW4vY3M0MjQ1LmgKLS0tIGxp bnV4LTMuMTIvc291bmQvcGNpL294eWdlbi9jczQyNDUuaAkyMDEzLTExLTA0IDAzOjQxOjUxLjAw MDAwMDAwMCArMDQwMAorKysgbGludXgtMy4xMi1teS9zb3VuZC9wY2kvb3h5Z2VuL2NzNDI0NS5o CTIwMTMtMTEtMjAgMTI6MDg6MDcuMDAwMDAwMDAwICswNDAwCkBAIC0xMDMsNSArMTAzLDYgQEAK ICNkZWZpbmUgQ1M0MjQ1X0FEQ19VTkRSRkwJMHgwMQogCiAKLSNkZWZpbmUgQ1M0MjQ1X1NQSV9B RERSRVNTCSgweDllIDw8IDE2KQotI2RlZmluZSBDUzQyNDVfU1BJX1dSSVRFCSgwIDw8IDE2KQor I2RlZmluZSBDUzQyNDVfU1BJX0FERFJFU1MJMHg5ZQorI2RlZmluZSBDUzQyNDVfU1BJX1dSSVRF CTAKKyNkZWZpbmUgQ1M0MjQ1X1NQSV9SRUFECQkxCmRpZmYgLXVwck4gbGludXgtMy4xMi9zb3Vu ZC9wY2kvb3h5Z2VuL3hvbmFyX2RnLmggbGludXgtMy4xMi1teS9zb3VuZC9wY2kvb3h5Z2VuL3hv bmFyX2RnLmgKLS0tIGxpbnV4LTMuMTIvc291bmQvcGNpL294eWdlbi94b25hcl9kZy5oCTIwMTMt MTEtMDQgMDM6NDE6NTEuMDAwMDAwMDAwICswNDAwCisrKyBsaW51eC0zLjEyLW15L3NvdW5kL3Bj aS9veHlnZW4veG9uYXJfZGcuaAkyMDEzLTExLTIxIDEzOjQxOjQ0LjAwMDAwMDAwMCArMDQwMApA QCAtMyw2ICszLDUxIEBACiAKICNpbmNsdWRlICJveHlnZW4uaCIKIAorI2RlZmluZSBHUElPX01B R0lDCQkweDAwMDgKKyNkZWZpbmUgR1BJT19IUF9ERVRFQ1QJCTB4MDAxMAorI2RlZmluZSBHUElP X0lOUFVUX1JPVVRFCTB4MDA2MAorI2RlZmluZSBHUElPX0hQX1JFQVIJCTB4MDA4MAorI2RlZmlu ZSBHUElPX09VVFBVVF9FTkFCTEUJMHgwMTAwCisKKyNkZWZpbmUgQ0FQVFVSRV9TUkNfTUlDCQkw CisjZGVmaW5lIENBUFRVUkVfU1JDX0ZQX01JQwkxCisjZGVmaW5lIENBUFRVUkVfU1JDX0xJTkUJ MgorI2RlZmluZSBDQVBUVVJFX1NSQ19BVVgJCTMKKworI2RlZmluZSBQTEFZQkFDS19EU1RfSFAJ CTAKKyNkZWZpbmUgUExBWUJBQ0tfRFNUX0hQX0ZQCTEKKyNkZWZpbmUgUExBWUJBQ0tfRFNUX01V TFRJQ0gJMgorCiBleHRlcm4gc3RydWN0IG94eWdlbl9tb2RlbCBtb2RlbF94b25hcl9kZzsKIAor LyogWG9uYXIgREcgU3BlY2lmaWMgRGF0YSAqLworc3RydWN0IGRnIHsKKwl1bnNpZ25lZCBjaGFy IGNzNDI0NV9zaGFkb3dbMTZdOworCS8qIE91dHB1dCBzZWxlY3Q6IGhlYWRwaG9uZS9zcGVha2Vy cyAqLworCXVuc2lnbmVkIGNoYXIgcGNtX291dHB1dDsKKwkvKiBJbnB1dCBzZWxlY3Q6IE1pYywg RlAgTWljLCBMaW5lLCBBdXggKi8KKwl1bnNpZ25lZCBjaGFyIHBnYV9zb3VyY2U7CisJLyogSW5k ZXBlbmRlbnQgY2FwdHVyZSB2b2x1bWUgKi8KKwljaGFyIGNhcF92b2xbNF1bMl07CisJYm9vbCBj YXBfbXV0ZVs0XTsKK307CisKKy8qIFhvbmFyIERHIGNvbnRyb2wgcm91dGluZXMgKi8KK2ludCBj czQyNDVfd3JpdGVfc3BpKHN0cnVjdCBveHlnZW4gKmNoaXAsIHU4IHJlZyk7CitpbnQgY3M0MjQ1 X3JlYWRfc3BpKHN0cnVjdCBveHlnZW4gKmNoaXAsIHU4IHJlZyk7CitpbnQgY3M0MjQ1X3JlYWRf c2hhZG93KHN0cnVjdCBveHlnZW4gKmNoaXApOworaW50IGNzNDI0NV93cml0ZV9zaGFkb3coc3Ry dWN0IG94eWdlbiAqY2hpcCk7Cit2b2lkIGRnX2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCk7Cit2 b2lkIHNldF9jczQyNDVfZGFjX3BhcmFtcyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgc3Ry dWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpOwordm9pZCBzZXRfY3M0MjQ1X2FkY19wYXJh bXMoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAq cGFyYW1zKTsKK3Vuc2lnbmVkIGludCBhZGp1c3RfZGdfZGFjX3JvdXRpbmcoc3RydWN0IG94eWdl biAqY2hpcCwKKwkJCQkJICB1bnNpZ25lZCBpbnQgcGxheV9yb3V0aW5nKTsKK3ZvaWQgZHVtcF9j czQyNDVfcmVnaXN0ZXJzKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkJc3RydWN0IHNuZF9pbmZv X2J1ZmZlciAqYnVmZmVyKTsKK3ZvaWQgZGdfc3VzcGVuZChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKTsK K3ZvaWQgZGdfcmVzdW1lKHN0cnVjdCBveHlnZW4gKmNoaXApOwordm9pZCBkZ19jbGVhbnVwKHN0 cnVjdCBveHlnZW4gKmNoaXApOworCiAjZW5kaWYKZGlmZiAtdXByTiBsaW51eC0zLjEyL3NvdW5k L3BjaS9veHlnZW4veG9uYXJfZGcuYyBsaW51eC0zLjEyLW15L3NvdW5kL3BjaS9veHlnZW4veG9u YXJfZGcuYwotLS0gbGludXgtMy4xMi9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX2RnLmMJMjAxMy0x MS0wNCAwMzo0MTo1MS4wMDAwMDAwMDAgKzA0MDAKKysrIGxpbnV4LTMuMTItbXkvc291bmQvcGNp L294eWdlbi94b25hcl9kZy5jCTIwMTMtMTEtMjEgMTY6MzU6MDIuMDAwMDAwMDAwICswNDAwCkBA IC0xLDggKzEsOCBAQAogLyoKLSAqIGNhcmQgZHJpdmVyIGZvciB0aGUgWG9uYXIgREcvREdYCisg KiBDYXJkIGRyaXZlciBmb3IgdGhlIFhvbmFyIERHL0RHWAogICoKICAqIENvcHlyaWdodCAoYykg Q2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+Ci0gKgorICogQ29weXJpZ2h0IChj KSBSb21hbiBWb2xrb3YgPHYxcm9uQG1haWwucnU+CiAgKgogICogIFRoaXMgZHJpdmVyIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJz aW9uIDIuCkBAIC0yMCwyOSArMjAsMzcgQEAKICAqIFhvbmFyIERHL0RHWAogICogLS0tLS0tLS0t LS0tCiAgKgorICogQ1M0MjQ1L0NTNDM2MSBib3RoIHdpbGwgbXV0ZSBhbGwgb3V0cHV0cyBpZiBh bnkgY2xvY2sgcmF0aW8gb2YKKyAqIGFueSBJwrJTIGNoYW5uZWwgaXMgaW52YWxpZC4KKyAqCiAg KiBDTUk4Nzg4OgogICoKICAqICAgU1BJIDAgLT4gQ1M0MjQ1CiAgKgorICogICBQbGF5YmFjazoK ICAqICAgScKyUyAxIC0+IENTNDI0NQogICogICBJwrJTIDIgLT4gQ1M0MzYxIChjZW50ZXIvTEZF KQogICogICBJwrJTIDMgLT4gQ1M0MzYxIChzdXJyb3VuZCkKICAqICAgScKyUyA0IC0+IENTNDM2 MSAoZnJvbnQpCisgKiAgIENhcHR1cmU6CisgKiAgIEnCslMgQURDIDEgPC0gQ1M0MjQ1CiAgKgog ICogICBHUElPIDMgPC0gPwogICogICBHUElPIDQgPC0gaGVhZHBob25lIGRldGVjdAotICogICBH UElPIDUgLT4gcm91dGUgaW5wdXQgamFjayB0byBsaW5lLWluICgwKSBvciBtaWMtaW4gKDEpCi0g KiAgIEdQSU8gNiAtPiByb3V0ZSBpbnB1dCBqYWNrIHRvIGxpbmUtaW4gKDApIG9yIG1pYy1pbiAo MSkKLSAqICAgR1BJTyA3IC0+IGVuYWJsZSByZWFyIGhlYWRwaG9uZSBhbXAKLSAqICAgR1BJTyA4 IC0+IGVuYWJsZSBvdXRwdXQgdG8gc3BlYWtlcnMKKyAqICAgR1BJTyA1IC0+IEFEQyBhbmFsb2cg Y2lyY3VpdCBwb3dlciBzdXBwbHkgY29udHJvbCBmb3IgbGVmdCBjaGFubmVsICg/KQorICogICBH UElPIDYgLT4gQURDIGFuYWxvZyBjaXJjdWl0IHBvd2VyIHN1cHBseSBjb250cm9sIGZvciByaWdo dCBjaGFubmVsICg/KQorICogICBHUElPIDcgLT4gc3dpdGNoZXMgZ3JlZW4gcmVhciBvdXRwdXQg amFjayBiZXR3ZWVuIENTNDI0NSAvIENTNDM2MSBmaXJzdAorICogY2hhbm5lbCAobWVjaGFuaWNh bCByZWxheSkKKyAqICAgR1BJTyA4IC0+IERBQyBhbmFsb2cgY2lyY3VpdCBwb3dlciBzdXBwbHkg Y29udHJvbCAoPykKICAqCiAgKiBDUzQyNDU6CiAgKgotICogICBpbnB1dCAxIDwtIGF1eAotICog ICBpbnB1dCAyIDwtIGZyb250IG1pYwotICogICBpbnB1dCA0IDwtIGxpbmUvbWljCisgKiAgIGlu cHV0IDAgPC0gTWljcm9waG9uZQorICogICBpbnB1dCAxIDwtIEF1eAorICogICBpbnB1dCAyIDwt IEZyb250IFBhbmVsIE1pYworICogICBpbnB1dCA0IDwtIExpbmUgSW4KICAqICAgREFDIG91dCAt PiBoZWFkcGhvbmVzCi0gKiAgIGF1eCBvdXQgLT4gZnJvbnQgcGFuZWwgaGVhZHBob25lcworICog ICBBVVggb3V0IC0+IGZyb250IHBhbmVsIGhlYWRwaG9uZXMKICAqLwogCiAjaW5jbHVkZSA8bGlu dXgvcGNpLmg+CkBAIC01Niw1NTMgKzY0LDIxNCBAQAogI2luY2x1ZGUgInhvbmFyX2RnLmgiCiAj aW5jbHVkZSAiY3M0MjQ1LmgiCiAKLSNkZWZpbmUgR1BJT19NQUdJQwkJMHgwMDA4Ci0jZGVmaW5l IEdQSU9fSFBfREVURUNUCQkweDAwMTAKLSNkZWZpbmUgR1BJT19JTlBVVF9ST1VURQkweDAwNjAK LSNkZWZpbmUgR1BJT19IUF9SRUFSCQkweDAwODAKLSNkZWZpbmUgR1BJT19PVVRQVVRfRU5BQkxF CTB4MDEwMAotCi1zdHJ1Y3QgZGcgewotCXVuc2lnbmVkIGludCBvdXRwdXRfc2VsOwotCXM4IGlu cHV0X3ZvbFs0XVsyXTsKLQl1bnNpZ25lZCBpbnQgaW5wdXRfc2VsOwotCXU4IGhwX3ZvbF9hdHQ7 Ci0JdTggY3M0MjQ1X3JlZ3NbMHgxMV07Ci19OwotCi1zdGF0aWMgdm9pZCBjczQyNDVfd3JpdGUo c3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgaW50IHJlZywgdTggdmFsdWUpCi17Ci0Jc3Ry dWN0IGRnICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKLQotCW94eWdlbl93cml0ZV9zcGkoY2hp cCwgT1hZR0VOX1NQSV9UUklHR0VSIHwKLQkJCSBPWFlHRU5fU1BJX0RBVEFfTEVOR1RIXzMgfAot CQkJIE9YWUdFTl9TUElfQ0xPQ0tfMTI4MCB8Ci0JCQkgKDAgPDwgT1hZR0VOX1NQSV9DT0RFQ19T SElGVCkgfAotCQkJIE9YWUdFTl9TUElfQ0VOX0xBVENIX0NMT0NLX0hJLAotCQkJIENTNDI0NV9T UElfQUREUkVTUyB8Ci0JCQkgQ1M0MjQ1X1NQSV9XUklURSB8Ci0JCQkgKHJlZyA8PCA4KSB8IHZh bHVlKTsKLQlkYXRhLT5jczQyNDVfcmVnc1tyZWddID0gdmFsdWU7Ci19Ci0KLXN0YXRpYyB2b2lk IGNzNDI0NV93cml0ZV9jYWNoZWQoc3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgaW50IHJl ZywgdTggdmFsdWUpCi17Ci0Jc3RydWN0IGRnICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKLQot CWlmICh2YWx1ZSAhPSBkYXRhLT5jczQyNDVfcmVnc1tyZWddKQotCQljczQyNDVfd3JpdGUoY2hp cCwgcmVnLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNzNDI0NV9yZWdpc3RlcnNfaW5pdChz dHJ1Y3Qgb3h5Z2VuICpjaGlwKQotewotCXN0cnVjdCBkZyAqZGF0YSA9IGNoaXAtPm1vZGVsX2Rh dGE7Ci0KLQljczQyNDVfd3JpdGUoY2hpcCwgQ1M0MjQ1X1BPV0VSX0NUUkwsIENTNDI0NV9QRE4p OwotCWNzNDI0NV93cml0ZShjaGlwLCBDUzQyNDVfREFDX0NUUkxfMSwKLQkJICAgICBkYXRhLT5j czQyNDVfcmVnc1tDUzQyNDVfREFDX0NUUkxfMV0pOwotCWNzNDI0NV93cml0ZShjaGlwLCBDUzQy NDVfQURDX0NUUkwsCi0JCSAgICAgZGF0YS0+Y3M0MjQ1X3JlZ3NbQ1M0MjQ1X0FEQ19DVFJMXSk7 Ci0JY3M0MjQ1X3dyaXRlKGNoaXAsIENTNDI0NV9TSUdOQUxfU0VMLAotCQkgICAgIGRhdGEtPmNz NDI0NV9yZWdzW0NTNDI0NV9TSUdOQUxfU0VMXSk7Ci0JY3M0MjQ1X3dyaXRlKGNoaXAsIENTNDI0 NV9QR0FfQl9DVFJMLAotCQkgICAgIGRhdGEtPmNzNDI0NV9yZWdzW0NTNDI0NV9QR0FfQl9DVFJM XSk7Ci0JY3M0MjQ1X3dyaXRlKGNoaXAsIENTNDI0NV9QR0FfQV9DVFJMLAotCQkgICAgIGRhdGEt PmNzNDI0NV9yZWdzW0NTNDI0NV9QR0FfQV9DVFJMXSk7Ci0JY3M0MjQ1X3dyaXRlKGNoaXAsIENT NDI0NV9BTkFMT0dfSU4sCi0JCSAgICAgZGF0YS0+Y3M0MjQ1X3JlZ3NbQ1M0MjQ1X0FOQUxPR19J Tl0pOwotCWNzNDI0NV93cml0ZShjaGlwLCBDUzQyNDVfREFDX0FfQ1RSTCwKLQkJICAgICBkYXRh LT5jczQyNDVfcmVnc1tDUzQyNDVfREFDX0FfQ1RSTF0pOwotCWNzNDI0NV93cml0ZShjaGlwLCBD UzQyNDVfREFDX0JfQ1RSTCwKLQkJICAgICBkYXRhLT5jczQyNDVfcmVnc1tDUzQyNDVfREFDX0Jf Q1RSTF0pOwotCWNzNDI0NV93cml0ZShjaGlwLCBDUzQyNDVfREFDX0NUUkxfMiwKLQkJICAgICBD UzQyNDVfREFDX1NPRlQgfCBDUzQyNDVfREFDX1pFUk8gfCBDUzQyNDVfSU5WRVJUX0RBQyk7Ci0J Y3M0MjQ1X3dyaXRlKGNoaXAsIENTNDI0NV9JTlRfTUFTSywgMCk7Ci0JY3M0MjQ1X3dyaXRlKGNo aXAsIENTNDI0NV9QT1dFUl9DVFJMLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgY3M0MjQ1X2luaXQo c3RydWN0IG94eWdlbiAqY2hpcCkKK2ludCBjczQyNDVfd3JpdGVfc3BpKHN0cnVjdCBveHlnZW4g KmNoaXAsIHU4IHJlZykKIHsKIAlzdHJ1Y3QgZGcgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOwog Ci0JZGF0YS0+Y3M0MjQ1X3JlZ3NbQ1M0MjQ1X0RBQ19DVFJMXzFdID0KLQkJQ1M0MjQ1X0RBQ19G TV9TSU5HTEUgfCBDUzQyNDVfREFDX0RJRl9MSlVTVDsKLQlkYXRhLT5jczQyNDVfcmVnc1tDUzQy NDVfQURDX0NUUkxdID0KLQkJQ1M0MjQ1X0FEQ19GTV9TSU5HTEUgfCBDUzQyNDVfQURDX0RJRl9M SlVTVDsKLQlkYXRhLT5jczQyNDVfcmVnc1tDUzQyNDVfU0lHTkFMX1NFTF0gPQotCQlDUzQyNDVf QV9PVVRfU0VMX0hJWiB8IENTNDI0NV9BU1lOQ0g7Ci0JZGF0YS0+Y3M0MjQ1X3JlZ3NbQ1M0MjQ1 X1BHQV9CX0NUUkxdID0gMDsKLQlkYXRhLT5jczQyNDVfcmVnc1tDUzQyNDVfUEdBX0FfQ1RSTF0g PSAwOwotCWRhdGEtPmNzNDI0NV9yZWdzW0NTNDI0NV9BTkFMT0dfSU5dID0KLQkJQ1M0MjQ1X1BH QV9TT0ZUIHwgQ1M0MjQ1X1BHQV9aRVJPIHwgQ1M0MjQ1X1NFTF9JTlBVVF80OwotCWRhdGEtPmNz NDI0NV9yZWdzW0NTNDI0NV9EQUNfQV9DVFJMXSA9IDA7Ci0JZGF0YS0+Y3M0MjQ1X3JlZ3NbQ1M0 MjQ1X0RBQ19CX0NUUkxdID0gMDsKLQljczQyNDVfcmVnaXN0ZXJzX2luaXQoY2hpcCk7Ci0Jc25k X2NvbXBvbmVudF9hZGQoY2hpcC0+Y2FyZCwgIkNTNDI0NSIpOwotfQotCi1zdGF0aWMgdm9pZCBk Z19vdXRwdXRfZW5hYmxlKHN0cnVjdCBveHlnZW4gKmNoaXApCi17Ci0JbXNsZWVwKDI1MDApOwot CW94eWdlbl9zZXRfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsIEdQSU9fT1VUUFVUX0VO QUJMRSk7CisJcmV0dXJuIG94eWdlbl93cml0ZV9zcGkoY2hpcCwgT1hZR0VOX1NQSV9UUklHR0VS IHwKKwkJT1hZR0VOX1NQSV9EQVRBX0xFTkdUSF8zIHwgT1hZR0VOX1NQSV9DTE9DS18xMjgwIHwK KwkJKDAgPDwgT1hZR0VOX1NQSV9DT0RFQ19TSElGVCkgfCBPWFlHRU5fU1BJX0NFTl9MQVRDSF9D TE9DS19ISSwKKwkJKCgodTMyKUNTNDI0NV9TUElfQUREUkVTUykgPDwgMTYpIHwgKCgodTMyKXJl ZykgPDwgOCkgfAorCQkoKHUzMilkYXRhLT5jczQyNDVfc2hhZG93W3JlZ10pKTsKIH0KIAotc3Rh dGljIHZvaWQgZGdfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoraW50IGNzNDI0NV9yZWFkX3Nw aShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCB1OCByZWcpCiB7CiAJc3RydWN0IGRnICpkYXRhID0gY2hp cC0+bW9kZWxfZGF0YTsKKwlpbnQgcmV0OwogCi0JZGF0YS0+b3V0cHV0X3NlbCA9IDA7Ci0JZGF0 YS0+aW5wdXRfc2VsID0gMzsKLQlkYXRhLT5ocF92b2xfYXR0ID0gMiAqIDE2OworCXJldCA9IG94 eWdlbl93cml0ZV9zcGkoY2hpcCwgT1hZR0VOX1NQSV9UUklHR0VSIHwKKwkJT1hZR0VOX1NQSV9E QVRBX0xFTkdUSF8yIHwKKwkJT1hZR0VOX1NQSV9DRU5fTEFUQ0hfQ0xPQ0tfSEkgfAorCQlPWFlH RU5fU1BJX0NMT0NLXzEyODAgfCAoMCA8PCBPWFlHRU5fU1BJX0NPREVDX1NISUZUKSwKKwkJKENT NDI0NV9TUElfQUREUkVTUyA8PCA4KSB8IHJlZyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiBy ZXQ7CiAKLQljczQyNDVfaW5pdChjaGlwKTsKLQotCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwg T1hZR0VOX0dQSU9fQ09OVFJPTCwKLQkJCSAgICBHUElPX01BR0lDIHwgR1BJT19IUF9ERVRFQ1Qp OwotCW94eWdlbl9zZXRfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0NPTlRST0wsCi0JCQkgIEdQ SU9fSU5QVVRfUk9VVEUgfCBHUElPX0hQX1JFQVIgfCBHUElPX09VVFBVVF9FTkFCTEUpOwotCW94 eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSwKLQkJCSAgICBHUElPX0lO UFVUX1JPVVRFIHwgR1BJT19IUF9SRUFSKTsKLQlkZ19vdXRwdXRfZW5hYmxlKGNoaXApOwotfQot Ci1zdGF0aWMgdm9pZCBkZ19jbGVhbnVwKHN0cnVjdCBveHlnZW4gKmNoaXApCi17Ci0Jb3h5Z2Vu X2NsZWFyX2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBLCBHUElPX09VVFBVVF9FTkFCTEUp OwotfQotCi1zdGF0aWMgdm9pZCBkZ19zdXNwZW5kKHN0cnVjdCBveHlnZW4gKmNoaXApCi17Ci0J ZGdfY2xlYW51cChjaGlwKTsKLX0KLQotc3RhdGljIHZvaWQgZGdfcmVzdW1lKHN0cnVjdCBveHln ZW4gKmNoaXApCi17Ci0JY3M0MjQ1X3JlZ2lzdGVyc19pbml0KGNoaXApOwotCWRnX291dHB1dF9l bmFibGUoY2hpcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9jczQyNDVfZGFjX3BhcmFtcyhzdHJ1 Y3Qgb3h5Z2VuICpjaGlwLAotCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMp Ci17Ci0Jc3RydWN0IGRnICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKLQl1OCB2YWx1ZTsKLQot CXZhbHVlID0gZGF0YS0+Y3M0MjQ1X3JlZ3NbQ1M0MjQ1X0RBQ19DVFJMXzFdICYgfkNTNDI0NV9E QUNfRk1fTUFTSzsKLQlpZiAocGFyYW1zX3JhdGUocGFyYW1zKSA8PSA1MDAwMCkKLQkJdmFsdWUg fD0gQ1M0MjQ1X0RBQ19GTV9TSU5HTEU7Ci0JZWxzZSBpZiAocGFyYW1zX3JhdGUocGFyYW1zKSA8 PSAxMDAwMDApCi0JCXZhbHVlIHw9IENTNDI0NV9EQUNfRk1fRE9VQkxFOwotCWVsc2UKLQkJdmFs dWUgfD0gQ1M0MjQ1X0RBQ19GTV9RVUFEOwotCWNzNDI0NV93cml0ZV9jYWNoZWQoY2hpcCwgQ1M0 MjQ1X0RBQ19DVFJMXzEsIHZhbHVlKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0X2NzNDI0NV9hZGNf cGFyYW1zKHN0cnVjdCBveHlnZW4gKmNoaXAsCi0JCQkJICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJh bXMgKnBhcmFtcykKLXsKLQlzdHJ1Y3QgZGcgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOwotCXU4 IHZhbHVlOwotCi0JdmFsdWUgPSBkYXRhLT5jczQyNDVfcmVnc1tDUzQyNDVfQURDX0NUUkxdICYg fkNTNDI0NV9BRENfRk1fTUFTSzsKLQlpZiAocGFyYW1zX3JhdGUocGFyYW1zKSA8PSA1MDAwMCkK LQkJdmFsdWUgfD0gQ1M0MjQ1X0FEQ19GTV9TSU5HTEU7Ci0JZWxzZSBpZiAocGFyYW1zX3JhdGUo cGFyYW1zKSA8PSAxMDAwMDApCi0JCXZhbHVlIHw9IENTNDI0NV9BRENfRk1fRE9VQkxFOwotCWVs c2UKLQkJdmFsdWUgfD0gQ1M0MjQ1X0FEQ19GTV9RVUFEOwotCWNzNDI0NV93cml0ZV9jYWNoZWQo Y2hpcCwgQ1M0MjQ1X0FEQ19DVFJMLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWdu ZWQgaW50IHNoaWZ0X2JpdHModW5zaWduZWQgaW50IHZhbHVlLAotCQkJCSAgICAgIHVuc2lnbmVk IGludCBzaGlmdF9mcm9tLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBzaGlmdF90bywKLQkJCQkg ICAgICB1bnNpZ25lZCBpbnQgbWFzaykKLXsKLQlpZiAoc2hpZnRfZnJvbSA8IHNoaWZ0X3RvKQot CQlyZXR1cm4gKHZhbHVlIDw8IChzaGlmdF90byAtIHNoaWZ0X2Zyb20pKSAmIG1hc2s7Ci0JZWxz ZQotCQlyZXR1cm4gKHZhbHVlID4+IChzaGlmdF9mcm9tIC0gc2hpZnRfdG8pKSAmIG1hc2s7Ci19 Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYWRqdXN0X2RnX2RhY19yb3V0aW5nKHN0cnVjdCBveHln ZW4gKmNoaXAsCi0JCQkJCSAgdW5zaWduZWQgaW50IHBsYXlfcm91dGluZykKLXsKLQlyZXR1cm4g KHBsYXlfcm91dGluZyAmIE9YWUdFTl9QTEFZX0RBQzBfU09VUkNFX01BU0spIHwKLQkgICAgICAg c2hpZnRfYml0cyhwbGF5X3JvdXRpbmcsCi0JCQkgIE9YWUdFTl9QTEFZX0RBQzJfU09VUkNFX1NI SUZULAotCQkJICBPWFlHRU5fUExBWV9EQUMxX1NPVVJDRV9TSElGVCwKLQkJCSAgT1hZR0VOX1BM QVlfREFDMV9TT1VSQ0VfTUFTSykgfAotCSAgICAgICBzaGlmdF9iaXRzKHBsYXlfcm91dGluZywK LQkJCSAgT1hZR0VOX1BMQVlfREFDMV9TT1VSQ0VfU0hJRlQsCi0JCQkgIE9YWUdFTl9QTEFZX0RB QzJfU09VUkNFX1NISUZULAotCQkJICBPWFlHRU5fUExBWV9EQUMyX1NPVVJDRV9NQVNLKSB8Ci0J ICAgICAgIHNoaWZ0X2JpdHMocGxheV9yb3V0aW5nLAotCQkJICBPWFlHRU5fUExBWV9EQUMwX1NP VVJDRV9TSElGVCwKLQkJCSAgT1hZR0VOX1BMQVlfREFDM19TT1VSQ0VfU0hJRlQsCi0JCQkgIE9Y WUdFTl9QTEFZX0RBQzNfU09VUkNFX01BU0spOwotfQotCi1zdGF0aWMgaW50IG91dHB1dF9zd2l0 Y2hfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCi0JCQkgICAgICBzdHJ1Y3Qgc25kX2N0 bF9lbGVtX2luZm8gKmluZm8pCi17Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzWzNd ID0gewotCQkiU3BlYWtlcnMiLCAiSGVhZHBob25lcyIsICJGUCBIZWFkcGhvbmVzIgotCX07Ci0K LQlyZXR1cm4gc25kX2N0bF9lbnVtX2luZm8oaW5mbywgMSwgMywgbmFtZXMpOwotfQorCXJldCA9 IG94eWdlbl93cml0ZV9zcGkoY2hpcCwgT1hZR0VOX1NQSV9UUklHR0VSIHwKKwkJT1hZR0VOX1NQ SV9EQVRBX0xFTkdUSF8yIHwKKwkJT1hZR0VOX1NQSV9DRU5fTEFUQ0hfQ0xPQ0tfSEkgfAorCQlP WFlHRU5fU1BJX0NMT0NLXzEyODAgfCAoMCA8PCBPWFlHRU5fU1BJX0NPREVDX1NISUZUKSwKKwkJ KENTNDI0NV9TUElfQUREUkVTUyB8IENTNDI0NV9TUElfUkVBRCkgPDwgOCk7CisJaWYgKHJldCA8 IDApCisJCXJldHVybiByZXQ7CiAKLXN0YXRpYyBpbnQgb3V0cHV0X3N3aXRjaF9nZXQoc3RydWN0 IHNuZF9rY29udHJvbCAqY3RsLAotCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2 YWx1ZSkKLXsKLQlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7Ci0Jc3Ry dWN0IGRnICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKwlkYXRhLT5jczQyNDVfc2hhZG93W3Jl Z10gPSBveHlnZW5fcmVhZDgoY2hpcCwgT1hZR0VOX1NQSV9EQVRBMSk7CiAKLQltdXRleF9sb2Nr KCZjaGlwLT5tdXRleCk7Ci0JdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGRhdGEt Pm91dHB1dF9zZWw7Ci0JbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CiAJcmV0dXJuIDA7CiB9 CiAKLXN0YXRpYyBpbnQgb3V0cHV0X3N3aXRjaF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3Rs LAotCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK2ludCBjczQyNDVf cmVhZF9zaGFkb3coc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKLQlzdHJ1Y3Qgb3h5Z2VuICpjaGlw ID0gY3RsLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGRnICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0 YTsKLQl1OCByZWc7Ci0JaW50IGNoYW5nZWQ7Ci0KLQlpZiAodmFsdWUtPnZhbHVlLmVudW1lcmF0 ZWQuaXRlbVswXSA+IDIpCi0JCXJldHVybiAtRUlOVkFMOworCXVuc2lnbmVkIGNoYXIgYWRkcmVz czsKKwlpbnQgcmV0OwogCi0JbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOwotCWNoYW5nZWQgPSB2 YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdICE9IGRhdGEtPm91dHB1dF9zZWw7Ci0JaWYg KGNoYW5nZWQpIHsKLQkJZGF0YS0+b3V0cHV0X3NlbCA9IHZhbHVlLT52YWx1ZS5lbnVtZXJhdGVk Lml0ZW1bMF07Ci0KLQkJcmVnID0gZGF0YS0+Y3M0MjQ1X3JlZ3NbQ1M0MjQ1X1NJR05BTF9TRUxd ICYKLQkJCQkJCX5DUzQyNDVfQV9PVVRfU0VMX01BU0s7Ci0JCXJlZyB8PSBkYXRhLT5vdXRwdXRf c2VsID09IDIgPwotCQkJCUNTNDI0NV9BX09VVF9TRUxfREFDIDogQ1M0MjQ1X0FfT1VUX1NFTF9I SVo7Ci0JCWNzNDI0NV93cml0ZV9jYWNoZWQoY2hpcCwgQ1M0MjQ1X1NJR05BTF9TRUwsIHJlZyk7 Ci0KLQkJY3M0MjQ1X3dyaXRlX2NhY2hlZChjaGlwLCBDUzQyNDVfREFDX0FfQ1RSTCwKLQkJCQkg ICAgZGF0YS0+b3V0cHV0X3NlbCA/IGRhdGEtPmhwX3ZvbF9hdHQgOiAwKTsKLQkJY3M0MjQ1X3dy aXRlX2NhY2hlZChjaGlwLCBDUzQyNDVfREFDX0JfQ1RSTCwKLQkJCQkgICAgZGF0YS0+b3V0cHV0 X3NlbCA/IGRhdGEtPmhwX3ZvbF9hdHQgOiAwKTsKLQotCQlveHlnZW5fd3JpdGUxNl9tYXNrZWQo Y2hpcCwgT1hZR0VOX0dQSU9fREFUQSwKLQkJCQkgICAgICBkYXRhLT5vdXRwdXRfc2VsID09IDEg PyBHUElPX0hQX1JFQVIgOiAwLAotCQkJCSAgICAgIEdQSU9fSFBfUkVBUik7CisJZm9yIChhZGRy ZXNzID0gMDsgYWRkcmVzcyA8PSAweDEwOyBhZGRyZXNzKyspIHsKKwkJcmV0ID0gY3M0MjQ1X3Jl YWRfc3BpKGNoaXAsIGFkZHJlc3MpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CiAJ fQotCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOwotCXJldHVybiBjaGFuZ2VkOwotfQotCi1z dGF0aWMgaW50IGhwX3ZvbHVtZV9vZmZzZXRfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGws Ci0JCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKLXsKLQlzdGF0aWMgY29uc3Qg Y2hhciAqY29uc3QgbmFtZXNbM10gPSB7Ci0JCSI8IDY0IG9obXMiLCAiNjQtMTUwIG9obXMiLCAi MTUwLTMwMCBvaG1zIgotCX07Ci0KLQlyZXR1cm4gc25kX2N0bF9lbnVtX2luZm8oaW5mbywgMSwg MywgbmFtZXMpOwotfQotCi1zdGF0aWMgaW50IGhwX3ZvbHVtZV9vZmZzZXRfZ2V0KHN0cnVjdCBz bmRfa2NvbnRyb2wgKmN0bCwKLQkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkK LXsKLQlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGRn ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKLQotCW11dGV4X2xvY2soJmNoaXAtPm11dGV4KTsK LQlpZiAoZGF0YS0+aHBfdm9sX2F0dCA+IDIgKiA3KQotCQl2YWx1ZS0+dmFsdWUuZW51bWVyYXRl ZC5pdGVtWzBdID0gMDsKLQllbHNlIGlmIChkYXRhLT5ocF92b2xfYXR0ID4gMCkKLQkJdmFsdWUt PnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDE7Ci0JZWxzZQotCQl2YWx1ZS0+dmFsdWUuZW51 bWVyYXRlZC5pdGVtWzBdID0gMjsKLQltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKIAlyZXR1 cm4gMDsKIH0KIAotc3RhdGljIGludCBocF92b2x1bWVfb2Zmc2V0X3B1dChzdHJ1Y3Qgc25kX2tj b250cm9sICpjdGwsCi0JCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCitpbnQg Y3M0MjQ1X3dyaXRlX3NoYWRvdyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewotCXN0YXRpYyBjb25z dCBzOCBhdHRzWzNdID0geyAyICogMTYsIDIgKiA3LCAwIH07Ci0Jc3RydWN0IG94eWdlbiAqY2hp cCA9IGN0bC0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkZyAqZGF0YSA9IGNoaXAtPm1vZGVsX2Rh dGE7Ci0JczggYXR0OwotCWludCBjaGFuZ2VkOworCXVuc2lnbmVkIGNoYXIgYWRkcmVzczsKKwlp bnQgcmV0OwogCi0JaWYgKHZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPiAyKQotCQly ZXR1cm4gLUVJTlZBTDsKLQlhdHQgPSBhdHRzW3ZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1b MF1dOwotCW11dGV4X2xvY2soJmNoaXAtPm11dGV4KTsKLQljaGFuZ2VkID0gYXR0ICE9IGRhdGEt PmhwX3ZvbF9hdHQ7Ci0JaWYgKGNoYW5nZWQpIHsKLQkJZGF0YS0+aHBfdm9sX2F0dCA9IGF0dDsK LQkJaWYgKGRhdGEtPm91dHB1dF9zZWwpIHsKLQkJCWNzNDI0NV93cml0ZV9jYWNoZWQoY2hpcCwg Q1M0MjQ1X0RBQ19BX0NUUkwsIGF0dCk7Ci0JCQljczQyNDVfd3JpdGVfY2FjaGVkKGNoaXAsIENT NDI0NV9EQUNfQl9DVFJMLCBhdHQpOwotCQl9CisJZm9yIChhZGRyZXNzID0gMDsgYWRkcmVzcyA8 PSAweDEwOyBhZGRyZXNzKyspIHsKKwkJcmV0ID0gY3M0MjQ1X3dyaXRlX3NwaShjaGlwLCBhZGRy ZXNzKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OwogCX0KLQltdXRleF91bmxvY2so JmNoaXAtPm11dGV4KTsKLQlyZXR1cm4gY2hhbmdlZDsKLX0KLQotc3RhdGljIGludCBpbnB1dF92 b2xfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCi0JCQkgIHN0cnVjdCBzbmRfY3RsX2Vs ZW1faW5mbyAqaW5mbykKLXsKLQlpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRF R0VSOwotCWluZm8tPmNvdW50ID0gMjsKLQlpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDIgKiAt MTI7Ci0JaW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAyICogMTI7Ci0JcmV0dXJuIDA7Ci19Ci0K LXN0YXRpYyBpbnQgaW5wdXRfdm9sX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCi0JCQkg c3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCi17Ci0Jc3RydWN0IG94eWdlbiAqY2hp cCA9IGN0bC0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkZyAqZGF0YSA9IGNoaXAtPm1vZGVsX2Rh dGE7Ci0JdW5zaWduZWQgaW50IGlkeCA9IGN0bC0+cHJpdmF0ZV92YWx1ZTsKLQotCW11dGV4X2xv Y2soJmNoaXAtPm11dGV4KTsKLQl2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGRhdGEt PmlucHV0X3ZvbFtpZHhdWzBdOwotCXZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gZGF0 YS0+aW5wdXRfdm9sW2lkeF1bMV07Ci0JbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CiAJcmV0 dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaW5wdXRfdm9sX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9s ICpjdGwsCi0JCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCitzdGF0aWMgdm9p ZCBjczQyNDVfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewotCXN0cnVjdCBveHlnZW4gKmNo aXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZGcgKmRhdGEgPSBjaGlwLT5tb2RlbF9k YXRhOwotCXVuc2lnbmVkIGludCBpZHggPSBjdGwtPnByaXZhdGVfdmFsdWU7Ci0JaW50IGNoYW5n ZWQgPSAwOwogCi0JaWYgKHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdIDwgMiAqIC0xMiB8 fAotCSAgICB2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA+IDIgKiAxMiB8fAotCSAgICB2 YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA8IDIgKiAtMTIgfHwKLQkgICAgdmFsdWUtPnZh bHVlLmludGVnZXIudmFsdWVbMV0gPiAyICogMTIpCi0JCXJldHVybiAtRUlOVkFMOwotCW11dGV4 X2xvY2soJmNoaXAtPm11dGV4KTsKLQljaGFuZ2VkID0gZGF0YS0+aW5wdXRfdm9sW2lkeF1bMF0g IT0gdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gfHwKLQkJICBkYXRhLT5pbnB1dF92b2xb aWR4XVsxXSAhPSB2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXTsKLQlpZiAoY2hhbmdlZCkg ewotCQlkYXRhLT5pbnB1dF92b2xbaWR4XVswXSA9IHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVl WzBdOwotCQlkYXRhLT5pbnB1dF92b2xbaWR4XVsxXSA9IHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZh bHVlWzFdOwotCQlpZiAoaWR4ID09IGRhdGEtPmlucHV0X3NlbCkgewotCQkJY3M0MjQ1X3dyaXRl X2NhY2hlZChjaGlwLCBDUzQyNDVfUEdBX0FfQ1RSTCwKLQkJCQkJICAgIGRhdGEtPmlucHV0X3Zv bFtpZHhdWzBdKTsKLQkJCWNzNDI0NV93cml0ZV9jYWNoZWQoY2hpcCwgQ1M0MjQ1X1BHQV9CX0NU UkwsCi0JCQkJCSAgICBkYXRhLT5pbnB1dF92b2xbaWR4XVsxXSk7Ci0JCX0KLQl9Ci0JbXV0ZXhf dW5sb2NrKCZjaGlwLT5tdXRleCk7Ci0JcmV0dXJuIGNoYW5nZWQ7Ci19CisJLyogc2F2ZSB0aGUg aW5pdGlhbCBzdGF0ZSAqLworCWNzNDI0NV9yZWFkX3NoYWRvdyhjaGlwKTsKIAotc3RhdGljIERF Q0xBUkVfVExWX0RCX1NDQUxFKGNzNDI0NV9wZ2FfZGJfc2NhbGUsIC0xMjAwLCA1MCwgMCk7CisJ LyoKKwkgKiBQb3dlciB1cCB0aGUgQ09ERUMgaW50ZXJuYWxzLCBlbmFibGUgc29mdCByYW1wICYg emVybyBjcm9zcywgd29yaworCSAqIGluIGFzeW5jLiBtb2RlLAorCSAqIEVuYWJsZSBBVVggb3V0 cHV0IGZyb20gREFDLiBEQUMgb3V0cHV0IGluIHRoZSBXaW5kb3dzIGRyaXZlciBpcworCSAqIGlu dmVydGVkLgorCSAqLworCWRhdGEtPmNzNDI0NV9zaGFkb3dbQ1M0MjQ1X1BPV0VSX0NUUkxdID0g MDsKKwlkYXRhLT5jczQyNDVfc2hhZG93W0NTNDI0NV9TSUdOQUxfU0VMXSA9IENTNDI0NV9BX09V VF9TRUxfREFDIHwKKwkJQ1M0MjQ1X0FTWU5DSDsKKwlkYXRhLT5jczQyNDVfc2hhZG93W0NTNDI0 NV9EQUNfQ1RSTF8xXSA9IDA7CisJZGF0YS0+Y3M0MjQ1X3NoYWRvd1tDUzQyNDVfREFDX0NUUkxf Ml0gPSBDUzQyNDVfREFDX1NPRlQgfAorCQlDUzQyNDVfREFDX1pFUk8gfCBDUzQyNDVfSU5WRVJU X0RBQzsKKwlkYXRhLT5jczQyNDVfc2hhZG93W0NTNDI0NV9BRENfQ1RSTF0gPSAwOworCWRhdGEt PmNzNDI0NV9zaGFkb3dbQ1M0MjQ1X0FOQUxPR19JTl0gPSBDUzQyNDVfUEdBX1NPRlQgfAorCQlD UzQyNDVfUEdBX1pFUk87CiAKLXN0YXRpYyBpbnQgaW5wdXRfc2VsX2luZm8oc3RydWN0IHNuZF9r Y29udHJvbCAqY3RsLAotCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKmluZm8pCi17Ci0J c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzWzRdID0gewotCQkiTWljIiwgIkF1eCIsICJG cm9udCBNaWMiLCAiTGluZSIKLQl9OworCWNzNDI0NV93cml0ZV9zaGFkb3coY2hpcCk7CiAKLQly ZXR1cm4gc25kX2N0bF9lbnVtX2luZm8oaW5mbywgMSwgNCwgbmFtZXMpOworCXNuZF9jb21wb25l bnRfYWRkKGNoaXAtPmNhcmQsICJDUzQyNDUiKTsKIH0KIAotc3RhdGljIGludCBpbnB1dF9zZWxf Z2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKLQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3Zh bHVlICp2YWx1ZSkKK3ZvaWQgZGdfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewotCXN0cnVj dCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZGcgKmRhdGEgPSBj aGlwLT5tb2RlbF9kYXRhOworCS8qCisJICogVGhlIHBpbiBYR1BJTzEgYXMgWEdQSU8xLCBncGlv cyA4LDcsNiw1LDEsMCBhcyBvdXRwdXRzLgorCSAqLwogCi0JbXV0ZXhfbG9jaygmY2hpcC0+bXV0 ZXgpOwotCXZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBkYXRhLT5pbnB1dF9zZWw7 Ci0JbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7Ci0JcmV0dXJuIDA7CisJY3M0MjQ1X2luaXQo Y2hpcCk7CisJb3h5Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwgR1BJT19P VVRQVVRfRU5BQkxFIHwKKwkJR1BJT19IUF9SRUFSIHwgR1BJT19JTlBVVF9ST1VURSk7CisJb3h5 Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSwgR1BJT19IUF9SRUFSIHwgR1BJT19J TlBVVF9ST1VURSk7CisJLyogQW50aS1wb3AgZGVsYXkgKi8KKwltc2xlZXAoMjUwMCk7CisJb3h5 Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSwgR1BJT19PVVRQVVRfRU5BQkxFIHwK KwkJR1BJT19IUF9SRUFSIHwgR1BJT19JTlBVVF9ST1VURSk7CiB9CiAKLXN0YXRpYyBpbnQgaW5w dXRfc2VsX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCi0JCQkgc3RydWN0IHNuZF9jdGxf ZWxlbV92YWx1ZSAqdmFsdWUpCit2b2lkIHNldF9jczQyNDVfZGFjX3BhcmFtcyhzdHJ1Y3Qgb3h5 Z2VuICpjaGlwLAorCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCiB7Ci0J c3RhdGljIGNvbnN0IHU4IHNlbF92YWx1ZXNbNF0gPSB7Ci0JCUNTNDI0NV9TRUxfTUlDLAotCQlD UzQyNDVfU0VMX0lOUFVUXzEsCi0JCUNTNDI0NV9TRUxfSU5QVVRfMiwKLQkJQ1M0MjQ1X1NFTF9J TlBVVF80Ci0JfTsKLQlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CiAJ c3RydWN0IGRnICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKLQlpbnQgY2hhbmdlZDsKLQotCWlm ICh2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID4gMykKLQkJcmV0dXJuIC1FSU5WQUw7 CisJdW5zaWduZWQgY2hhciBkYWNfY3RybDsKKwl1bnNpZ25lZCBjaGFyIG1jbGtfZnJlcTsKIAot CW11dGV4X2xvY2soJmNoaXAtPm11dGV4KTsKLQljaGFuZ2VkID0gdmFsdWUtPnZhbHVlLmVudW1l cmF0ZWQuaXRlbVswXSAhPSBkYXRhLT5pbnB1dF9zZWw7Ci0JaWYgKGNoYW5nZWQpIHsKLQkJZGF0 YS0+aW5wdXRfc2VsID0gdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKLQotCQljczQy NDVfd3JpdGUoY2hpcCwgQ1M0MjQ1X0FOQUxPR19JTiwKLQkJCSAgICAgKGRhdGEtPmNzNDI0NV9y ZWdzW0NTNDI0NV9BTkFMT0dfSU5dICYKLQkJCQkJCQl+Q1M0MjQ1X1NFTF9NQVNLKSB8Ci0JCQkg ICAgIHNlbF92YWx1ZXNbZGF0YS0+aW5wdXRfc2VsXSk7Ci0KLQkJY3M0MjQ1X3dyaXRlX2NhY2hl ZChjaGlwLCBDUzQyNDVfUEdBX0FfQ1RSTCwKLQkJCQkgICAgZGF0YS0+aW5wdXRfdm9sW2RhdGEt PmlucHV0X3NlbF1bMF0pOwotCQljczQyNDVfd3JpdGVfY2FjaGVkKGNoaXAsIENTNDI0NV9QR0Ff Ql9DVFJMLAotCQkJCSAgICBkYXRhLT5pbnB1dF92b2xbZGF0YS0+aW5wdXRfc2VsXVsxXSk7Ci0K LQkJb3h5Z2VuX3dyaXRlMTZfbWFza2VkKGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsCi0JCQkJICAg ICAgZGF0YS0+aW5wdXRfc2VsID8gMCA6IEdQSU9fSU5QVVRfUk9VVEUsCi0JCQkJICAgICAgR1BJ T19JTlBVVF9ST1VURSk7CisJZGFjX2N0cmwgPSBkYXRhLT5jczQyNDVfc2hhZG93W0NTNDI0NV9E QUNfQ1RSTF8xXSAmIH5DUzQyNDVfREFDX0ZNX01BU0s7CisJbWNsa19mcmVxID0gZGF0YS0+Y3M0 MjQ1X3NoYWRvd1tDUzQyNDVfTUNMS19GUkVRXSAmIH5DUzQyNDVfTUNMSzFfTUFTSzsKKwlpZiAo cGFyYW1zX3JhdGUocGFyYW1zKSA8PSA1MDAwMCkgeworCQlkYWNfY3RybCB8PSBDUzQyNDVfREFD X0ZNX1NJTkdMRTsKKwkJbWNsa19mcmVxIHw9IENTNDI0NV9NQ0xLXzEgPDwgQ1M0MjQ1X01DTEsx X1NISUZUOworCX0gZWxzZSBpZiAocGFyYW1zX3JhdGUocGFyYW1zKSA8PSAxMDAwMDApIHsKKwkJ ZGFjX2N0cmwgfD0gQ1M0MjQ1X0RBQ19GTV9ET1VCTEU7CisJCW1jbGtfZnJlcSB8PSBDUzQyNDVf TUNMS18xIDw8IENTNDI0NV9NQ0xLMV9TSElGVDsKKwl9IGVsc2UgeworCQlkYWNfY3RybCB8PSBD UzQyNDVfREFDX0ZNX1FVQUQ7CisJCW1jbGtfZnJlcSB8PSBDUzQyNDVfTUNMS18yIDw8IENTNDI0 NV9NQ0xLMV9TSElGVDsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7Ci0JcmV0dXJu IGNoYW5nZWQ7CisJZGF0YS0+Y3M0MjQ1X3NoYWRvd1tDUzQyNDVfREFDX0NUUkxfMV0gPSBkYWNf Y3RybDsKKwlkYXRhLT5jczQyNDVfc2hhZG93W0NTNDI0NV9NQ0xLX0ZSRVFdID0gbWNsa19mcmVx OworCWNzNDI0NV93cml0ZV9zcGkoY2hpcCwgQ1M0MjQ1X0RBQ19DVFJMXzEpOworCWNzNDI0NV93 cml0ZV9zcGkoY2hpcCwgQ1M0MjQ1X01DTEtfRlJFUSk7CiB9CiAKLXN0YXRpYyBpbnQgaHBmX2lu Zm8oc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKmlu Zm8pCit2b2lkIHNldF9jczQyNDVfYWRjX3BhcmFtcyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJ CSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCiB7Ci0Jc3RhdGljIGNvbnN0IGNo YXIgKmNvbnN0IG5hbWVzWzJdID0geyAiQWN0aXZlIiwgIkZyb3plbiIgfTsKKwlzdHJ1Y3QgZGcg KmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXVuc2lnbmVkIGNoYXIgYWRjX2N0cmw7CisJdW5z aWduZWQgY2hhciBtY2xrX2ZyZXE7CiAKLQlyZXR1cm4gc25kX2N0bF9lbnVtX2luZm8oaW5mbywg MSwgMiwgbmFtZXMpOworCWFkY19jdHJsID0gZGF0YS0+Y3M0MjQ1X3NoYWRvd1tDUzQyNDVfQURD X0NUUkxdICYgfkNTNDI0NV9BRENfRk1fTUFTSzsKKwltY2xrX2ZyZXEgPSBkYXRhLT5jczQyNDVf c2hhZG93W0NTNDI0NV9NQ0xLX0ZSRVFdICYgfkNTNDI0NV9NQ0xLMl9NQVNLOworCWlmIChwYXJh bXNfcmF0ZShwYXJhbXMpIDw9IDUwMDAwKSB7CisJCWFkY19jdHJsIHw9IENTNDI0NV9BRENfRk1f U0lOR0xFOworCQltY2xrX2ZyZXEgfD0gQ1M0MjQ1X01DTEtfMSA8PCBDUzQyNDVfTUNMSzJfU0hJ RlQ7CisJfSBlbHNlIGlmIChwYXJhbXNfcmF0ZShwYXJhbXMpIDw9IDEwMDAwMCkgeworCQlhZGNf Y3RybCB8PSBDUzQyNDVfQURDX0ZNX0RPVUJMRTsKKwkJbWNsa19mcmVxIHw9IENTNDI0NV9NQ0xL XzEgPDwgQ1M0MjQ1X01DTEsyX1NISUZUOworCX0gZWxzZSB7CisJCWFkY19jdHJsIHw9IENTNDI0 NV9BRENfRk1fUVVBRDsKKwkJbWNsa19mcmVxIHw9IENTNDI0NV9NQ0xLXzIgPDwgQ1M0MjQ1X01D TEsyX1NISUZUOworCX0KKwlkYXRhLT5jczQyNDVfc2hhZG93W0NTNDI0NV9BRENfQ1RSTF0gPSBh ZGNfY3RybDsKKwlkYXRhLT5jczQyNDVfc2hhZG93W0NTNDI0NV9NQ0xLX0ZSRVFdID0gbWNsa19m cmVxOworCWNzNDI0NV93cml0ZV9zcGkoY2hpcCwgQ1M0MjQ1X0FEQ19DVFJMKTsKKwljczQyNDVf d3JpdGVfc3BpKGNoaXAsIENTNDI0NV9NQ0xLX0ZSRVEpOwogfQogCi1zdGF0aWMgaW50IGhwZl9n ZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2 YWx1ZSkKK3Vuc2lnbmVkIGludCBhZGp1c3RfZGdfZGFjX3JvdXRpbmcoc3RydWN0IG94eWdlbiAq Y2hpcCwKKwkJCQkJICB1bnNpZ25lZCBpbnQgcGxheV9yb3V0aW5nKQogewotCXN0cnVjdCBveHln ZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZGcgKmRhdGEgPSBjaGlwLT5t b2RlbF9kYXRhOworCXVuc2lnbmVkIGludCByb3V0aW5nID0gMDsKIAotCXZhbHVlLT52YWx1ZS5l bnVtZXJhdGVkLml0ZW1bMF0gPQotCQkhIShkYXRhLT5jczQyNDVfcmVnc1tDUzQyNDVfQURDX0NU UkxdICYgQ1M0MjQ1X0hQRl9GUkVFWkUpOwotCXJldHVybiAwOworCXN3aXRjaCAoZGF0YS0+cGNt X291dHB1dCkgeworCWNhc2UgUExBWUJBQ0tfRFNUX0hQOgorCWNhc2UgUExBWUJBQ0tfRFNUX0hQ X0ZQOgorCQlveHlnZW5fd3JpdGU4X21hc2tlZChjaGlwLCBPWFlHRU5fUExBWV9ST1VUSU5HLAor CQkJT1hZR0VOX1BMQVlfTVVURTIzIHwgT1hZR0VOX1BMQVlfTVVURTQ1IHwKKwkJCU9YWUdFTl9Q TEFZX01VVEU2NywgT1hZR0VOX1BMQVlfTVVURV9NQVNLKTsKKwkJYnJlYWs7CisJY2FzZSBQTEFZ QkFDS19EU1RfTVVMVElDSDoKKwkJcm91dGluZyA9ICgwIDw8IE9YWUdFTl9QTEFZX0RBQzBfU09V UkNFX1NISUZUKSB8CisJCSgyIDw8IE9YWUdFTl9QTEFZX0RBQzFfU09VUkNFX1NISUZUKSB8CisJ CSgxIDw8IE9YWUdFTl9QTEFZX0RBQzJfU09VUkNFX1NISUZUKSB8CisJCSgwIDw8IE9YWUdFTl9Q TEFZX0RBQzNfU09VUkNFX1NISUZUKTsKKwkJb3h5Z2VuX3dyaXRlOF9tYXNrZWQoY2hpcCwgT1hZ R0VOX1BMQVlfUk9VVElORywKKwkJCU9YWUdFTl9QTEFZX01VVEUwMSwgT1hZR0VOX1BMQVlfTVVU RV9NQVNLKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByb3V0aW5nOwogfQogCi1zdGF0aWMgaW50 IGhwZl9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3Zh bHVlICp2YWx1ZSkKK3ZvaWQgZHVtcF9jczQyNDVfcmVnaXN0ZXJzKHN0cnVjdCBveHlnZW4gKmNo aXAsCisJCQkJc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQogewotCXN0cnVjdCBveHln ZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZGcgKmRhdGEgPSBjaGlwLT5t b2RlbF9kYXRhOwotCXU4IHJlZzsKLQlpbnQgY2hhbmdlZDsKKwl1bnNpZ25lZCBpbnQgcmVnOwog Ci0JbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOwotCXJlZyA9IGRhdGEtPmNzNDI0NV9yZWdzW0NT NDI0NV9BRENfQ1RSTF0gJiB+Q1M0MjQ1X0hQRl9GUkVFWkU7Ci0JaWYgKHZhbHVlLT52YWx1ZS5l bnVtZXJhdGVkLml0ZW1bMF0pCi0JCXJlZyB8PSBDUzQyNDVfSFBGX0ZSRUVaRTsKLQljaGFuZ2Vk ID0gcmVnICE9IGRhdGEtPmNzNDI0NV9yZWdzW0NTNDI0NV9BRENfQ1RSTF07Ci0JaWYgKGNoYW5n ZWQpCi0JCWNzNDI0NV93cml0ZShjaGlwLCBDUzQyNDVfQURDX0NUUkwsIHJlZyk7Ci0JbXV0ZXhf dW5sb2NrKCZjaGlwLT5tdXRleCk7Ci0JcmV0dXJuIGNoYW5nZWQ7Ci19Ci0KLSNkZWZpbmUgSU5Q VVRfVk9MVU1FKHhuYW1lLCBpbmRleCkgeyBcCi0JLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZB Q0VfTUlYRVIsIFwKLQkubmFtZSA9IHhuYW1lLCBcCi0JLmluZm8gPSBpbnB1dF92b2xfaW5mbywg XAotCS5nZXQgPSBpbnB1dF92b2xfZ2V0LCBcCi0JLnB1dCA9IGlucHV0X3ZvbF9wdXQsIFwKLQku dGx2ID0geyAucCA9IGNzNDI0NV9wZ2FfZGJfc2NhbGUgfSwgXAotCS5wcml2YXRlX3ZhbHVlID0g aW5kZXgsIFwKLX0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkZ19jb250 cm9sc1tdID0gewotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0J CS5uYW1lID0gIkFuYWxvZyBPdXRwdXQgUGxheWJhY2sgRW51bSIsCi0JCS5pbmZvID0gb3V0cHV0 X3N3aXRjaF9pbmZvLAotCQkuZ2V0ID0gb3V0cHV0X3N3aXRjaF9nZXQsCi0JCS5wdXQgPSBvdXRw dXRfc3dpdGNoX3B1dCwKLQl9LAotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0Vf TUlYRVIsCi0JCS5uYW1lID0gIkhlYWRwaG9uZXMgSW1wZWRhbmNlIFBsYXliYWNrIEVudW0iLAot CQkuaW5mbyA9IGhwX3ZvbHVtZV9vZmZzZXRfaW5mbywKLQkJLmdldCA9IGhwX3ZvbHVtZV9vZmZz ZXRfZ2V0LAotCQkucHV0ID0gaHBfdm9sdW1lX29mZnNldF9wdXQsCi0JfSwKLQlJTlBVVF9WT0xV TUUoIk1pYyBDYXB0dXJlIFZvbHVtZSIsIDApLAotCUlOUFVUX1ZPTFVNRSgiQXV4IENhcHR1cmUg Vm9sdW1lIiwgMSksCi0JSU5QVVRfVk9MVU1FKCJGcm9udCBNaWMgQ2FwdHVyZSBWb2x1bWUiLCAy KSwKLQlJTlBVVF9WT0xVTUUoIkxpbmUgQ2FwdHVyZSBWb2x1bWUiLCAzKSwKLQl7Ci0JCS5pZmFj ZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJDYXB0dXJlIFNvdXJj ZSIsCi0JCS5pbmZvID0gaW5wdXRfc2VsX2luZm8sCi0JCS5nZXQgPSBpbnB1dF9zZWxfZ2V0LAot CQkucHV0ID0gaW5wdXRfc2VsX3B1dCwKLQl9LAotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VM RU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIkFEQyBIaWdoLXBhc3MgRmlsdGVyIENhcHR1cmUg RW51bSIsCi0JCS5pbmZvID0gaHBmX2luZm8sCi0JCS5nZXQgPSBocGZfZ2V0LAotCQkucHV0ID0g aHBmX3B1dCwKLQl9LAotfTsKKwlzbmRfaXByaW50ZihidWZmZXIsICJcbkNTNDI0NToiKTsKKwlj czQyNDVfcmVhZF9zcGkoY2hpcCwgQ1M0MjQ1X0lOVF9TVEFUVVMpOworCWZvciAocmVnID0gMDsg cmVnIDwgQVJSQVlfU0laRShkYXRhLT5jczQyNDVfc2hhZG93KTsgKytyZWcpCisJCXNuZF9pcHJp bnRmKGJ1ZmZlciwgIiAlMDJ4IiwgZGF0YS0+Y3M0MjQ1X3NoYWRvd1tyZWddKTsKKwlzbmRfaXBy aW50ZihidWZmZXIsICJcbiIpOworfQogCi1zdGF0aWMgaW50IGRnX2NvbnRyb2xfZmlsdGVyKHN0 cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICp0ZW1wbGF0ZSkKK3ZvaWQgZGdfc3VzcGVuZChzdHJ1Y3Qg b3h5Z2VuICpjaGlwKQogewotCWlmICghc3RybmNtcCh0ZW1wbGF0ZS0+bmFtZSwgIk1hc3RlciBQ bGF5YmFjayAiLCAxNikpCi0JCXJldHVybiAxOwotCXJldHVybiAwOworCW94eWdlbl9jbGVhcl9i aXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSwgR1BJT19PVVRQVVRfRU5BQkxFKTsKIH0KIAot c3RhdGljIGludCBkZ19taXhlcl9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit2b2lkIGRnX3Jl c3VtZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewotCXVuc2lnbmVkIGludCBpOwotCWludCBlcnI7 Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZ19jb250cm9scyk7ICsraSkgewotCQll cnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLAotCQkJCSAgc25kX2N0bF9uZXcxKCZkZ19jb250 cm9sc1tpXSwgY2hpcCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCXJl dHVybiAwOworCWNzNDI0NV93cml0ZV9zaGFkb3coY2hpcCk7CisJbXNsZWVwKDI1MDApOworCW94 eWdlbl9zZXRfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsIEdQSU9fT1VUUFVUX0VOQUJM RSk7CiB9CiAKLXN0YXRpYyB2b2lkIGR1bXBfY3M0MjQ1X3JlZ2lzdGVycyhzdHJ1Y3Qgb3h5Z2Vu ICpjaGlwLAotCQkJCSAgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQordm9pZCBkZ19j bGVhbnVwKHN0cnVjdCBveHlnZW4gKmNoaXApCiB7Ci0Jc3RydWN0IGRnICpkYXRhID0gY2hpcC0+ bW9kZWxfZGF0YTsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxu Q1M0MjQ1OiIpOwotCWZvciAoaSA9IDE7IGkgPD0gMHgxMDsgKytpKQotCQlzbmRfaXByaW50Zihi dWZmZXIsICIgJTAyeCIsIGRhdGEtPmNzNDI0NV9yZWdzW2ldKTsKLQlzbmRfaXByaW50ZihidWZm ZXIsICJcbiIpOworCWRnX3N1c3BlbmQoY2hpcCk7CiB9Ci0KLXN0cnVjdCBveHlnZW5fbW9kZWwg bW9kZWxfeG9uYXJfZGcgPSB7Ci0JLmxvbmduYW1lID0gIkMtTWVkaWEgT3h5Z2VuIEhEIEF1ZGlv IiwKLQkuY2hpcCA9ICJDTUk4Nzg2IiwKLQkuaW5pdCA9IGRnX2luaXQsCi0JLmNvbnRyb2xfZmls dGVyID0gZGdfY29udHJvbF9maWx0ZXIsCi0JLm1peGVyX2luaXQgPSBkZ19taXhlcl9pbml0LAot CS5jbGVhbnVwID0gZGdfY2xlYW51cCwKLQkuc3VzcGVuZCA9IGRnX3N1c3BlbmQsCi0JLnJlc3Vt ZSA9IGRnX3Jlc3VtZSwKLQkuc2V0X2RhY19wYXJhbXMgPSBzZXRfY3M0MjQ1X2RhY19wYXJhbXMs Ci0JLnNldF9hZGNfcGFyYW1zID0gc2V0X2NzNDI0NV9hZGNfcGFyYW1zLAotCS5hZGp1c3RfZGFj X3JvdXRpbmcgPSBhZGp1c3RfZGdfZGFjX3JvdXRpbmcsCi0JLmR1bXBfcmVnaXN0ZXJzID0gZHVt cF9jczQyNDVfcmVnaXN0ZXJzLAotCS5tb2RlbF9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGRn KSwKLQkuZGV2aWNlX2NvbmZpZyA9IFBMQVlCQUNLXzBfVE9fSTJTIHwKLQkJCSBQTEFZQkFDS18x X1RPX1NQRElGIHwKLQkJCSBDQVBUVVJFXzBfRlJPTV9JMlNfMiB8Ci0JCQkgQ0FQVFVSRV8xX0ZS T01fU1BESUYsCi0JLmRhY19jaGFubmVsc19wY20gPSA2LAotCS5kYWNfY2hhbm5lbHNfbWl4ZXIg PSAwLAotCS5mdW5jdGlvbl9mbGFncyA9IE9YWUdFTl9GVU5DVElPTl9TUEksCi0JLmRhY19tY2xr cyA9IE9YWUdFTl9NQ0xLUygyNTYsIDEyOCwgMTI4KSwKLQkuYWRjX21jbGtzID0gT1hZR0VOX01D TEtTKDI1NiwgMTI4LCAxMjgpLAotCS5kYWNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFU X0xKVVNULAotCS5hZGNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULAotfTsK Ci0tIApLaW5kIHJlZ2FyZHMsClJvbWFuIFZvbGtvdiwKdjFyb25AbWFpbC5ydQpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBbHNhLWRldmVsIG1haWxpbmcg bGlzdApBbHNhLWRldmVsQGFsc2EtcHJvamVjdC5vcmcKaHR0cDovL21haWxtYW4uYWxzYS1wcm9q ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Fsc2EtZGV2ZWwK