From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rajesh Yadav Subject: [DPU PATCH 03/11] Revert "drm/msm: Add DisplayPort support" Date: Wed, 30 May 2018 20:19:40 +0530 Message-ID: <1527691788-9350-4-git-send-email-ryadav@codeaurora.org> References: <1527691788-9350-1-git-send-email-ryadav@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1527691788-9350-1-git-send-email-ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, Rajesh Yadav , hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org RFBVIGRpc3BsYXkgcG9ydCBkcml2ZXIgaXMgbm90IGVuYWJsZWQgeWV0IHNvCnJldmVydGluZyB0 aGUgZHJpdmVyIHBhdGNoLgpJdCB3aWxsIGJlIGFkZGVkIGJhY2sgd2hlbiB0aGUgZHJpdmVyIGlz IHJld29ya2VkCmFuZCBlbmFibGVkIGZvciBzZG04NDUgU29DLgoKU2lnbmVkLW9mZi1ieTogUmFq ZXNoIFlhZGF2IDxyeWFkYXZAY29kZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL21z bS9NYWtlZmlsZSAgICAgICAgfCAgIDE0IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfYXVk aW8uYyAgIHwgIDgwNiAtLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAv ZHBfYXVkaW8uaCAgIHwgICA4MSAtLQogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdXguYyAg ICAgfCAgNTcwIC0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfYXV4Lmgg ICAgIHwgICA0NCAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2NhdGFsb2cuYyB8IDEzMjAg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBf Y2F0YWxvZy5oIHwgIDE2MyAtLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2N0cmwuYyAg ICB8IDE0NzQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9k cm0vbXNtL2RwL2RwX2N0cmwuaCAgICB8ICAgNTAgLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAv ZHBfZGVidWcuYyAgIHwgIDUwMyAtLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAv ZHBfZGVidWcuaCAgIHwgICA2MCAtLQogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5 LmMgfCAxMjU1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9t c20vZHAvZHBfZGlzcGxheS5oIHwgICA1MiAtLQogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9k cm0uYyAgICAgfCAgNTM4IC0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9k cm0uaCAgICAgfCAgIDk2IC0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9oZGNwMnAyLmMg fCAgOTI3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9s aW5rLmMgICAgfCAxNTQ4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2xpbmsuaCAgICB8ICAxODQgLS0tLS0KIGRyaXZlcnMvZ3B1 L2RybS9tc20vZHAvZHBfcGFuZWwuYyAgIHwgIDUyNiAtLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1 L2RybS9tc20vZHAvZHBfcGFuZWwuaCAgIHwgIDExNSAtLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20v ZHAvZHBfcGFyc2VyLmMgIHwgIDY0NSAtLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9t c20vZHAvZHBfcGFyc2VyLmggIHwgIDIwMCAtLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9k cF9wb3dlci5jICAgfCAgNTkzIC0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rw L2RwX3Bvd2VyLmggICB8ICAgNTYgLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcmVnLmgg ICAgIHwgIDIzMSAtLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfdXNicGQuYyAgIHwg IDQ5MSAtLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF91c2JwZC5oICAgfCAg MTAxIC0tLQogaW5jbHVkZS9kcm0vZHJtX2RwX2hlbHBlci5oICAgICAgICAgfCAgIDIzIC0KIDI4 IGZpbGVzIGNoYW5nZWQsIDEyNjY2IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfYXVkaW8uYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9tc20vZHAvZHBfYXVkaW8uaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9tc20vZHAvZHBfYXV4LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vbXNtL2RwL2RwX2F1eC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21z bS9kcC9kcF9jYXRhbG9nLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNt L2RwL2RwX2NhdGFsb2cuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20v ZHAvZHBfY3RybC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9k cF9jdHJsLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rl YnVnLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2RlYnVn LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXku YwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5o CiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kcm0uYwogZGVs ZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZHJtLmgKIGRlbGV0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2hkY3AycDIuYwogZGVsZXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfbGluay5jCiBkZWxldGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9saW5rLmgKIGRlbGV0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVsLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVsLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhcnNlci5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9wYXJzZXIuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9tc20vZHAvZHBfcG93ZXIuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9tc20vZHAvZHBfcG93ZXIuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9tc20vZHAvZHBfcmVnLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNt L2RwL2RwX3VzYnBkLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rw L2RwX3VzYnBkLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQppbmRleCA5M2EwZGU1Li43ZmMzOTc0IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vTWFrZWZpbGUKQEAgLTk5LDIwICs5OSw2IEBAIG1zbS15IDo9IFwKIAogbXNtLSQoQ09O RklHX0RFQlVHX0ZTKSArPSBhZHJlbm8vYTV4eF9kZWJ1Z2ZzLm8KIAotbXNtLSQoQ09ORklHX0RS TV9NU01fRFApKz0gZHAvZHBfdXNicGQubyBcCi0JZHAvZHBfcGFyc2VyLm8gXAotCWRwL2RwX3Bv d2VyLm8gXAotCWRwL2RwX2NhdGFsb2cubyBcCi0JZHAvZHBfYXV4Lm8gXAotCWRwL2RwX3BhbmVs Lm8gXAotCWRwL2RwX2xpbmsubyBcCi0JZHAvZHBfY3RybC5vIFwKLQlkcC9kcF9hdWRpby5vIFwK LQlkcC9kcF9kZWJ1Zy5vIFwKLQlkcC9kcF9kaXNwbGF5Lm8gXAotCWRwL2RwX2RybS5vIFwKLQlk cC9kcF9oZGNwMnAyLm8KLQogbXNtX3diLSQoQ09ORklHX0RSTV9NU01fV1JJVEVCQUNLKSArPSBk aXNwL2RwdTEvZHB1X3diLm8gXAogCQkJCSAgICAgIGRpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlz X3diLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdWRpby5jIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdWRpby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCBjZTAwYjhiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBf YXVkaW8uYworKysgL2Rldi9udWxsCkBAIC0xLDgwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0 IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNkZWZpbmUgcHJfZm10KGZtdCkJIltkcm0tZHBdICVz OiAiIGZtdCwgX19mdW5jX18KLQotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0jaW5j bHVkZSA8bGludXgvbXNtX2V4dF9kaXNwbGF5Lmg+Ci0KLSNpbmNsdWRlIDxkcm0vZHJtX2RwX2hl bHBlci5oPgotI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgotCi0jaW5jbHVkZSAiZHBfY2F0YWxv Zy5oIgotI2luY2x1ZGUgImRwX2F1ZGlvLmgiCi0jaW5jbHVkZSAiZHBfcGFuZWwuaCIKLQotI2Rl ZmluZSBIRUFERVJfQllURV8yX0JJVAkgMAotI2RlZmluZSBQQVJJVFlfQllURV8yX0JJVAkgOAot I2RlZmluZSBIRUFERVJfQllURV8xX0JJVAkxNgotI2RlZmluZSBQQVJJVFlfQllURV8xX0JJVAky NAotI2RlZmluZSBIRUFERVJfQllURV8zX0JJVAkxNgotI2RlZmluZSBQQVJJVFlfQllURV8zX0JJ VAkyNAotCi1zdHJ1Y3QgZHBfYXVkaW9fcHJpdmF0ZSB7Ci0Jc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqZXh0X3BkZXY7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQlzdHJ1Y3QgZHBf Y2F0YWxvZ19hdWRpbyAqY2F0YWxvZzsKLQlzdHJ1Y3QgbXNtX2V4dF9kaXNwX2luaXRfZGF0YSBl eHRfYXVkaW9fZGF0YTsKLQlzdHJ1Y3QgZHBfcGFuZWwgKnBhbmVsOwotCi0JYm9vbCBhY2tfZW5h YmxlZDsKLQlib29sIHNlc3Npb25fb247Ci0JYm9vbCBlbmdpbmVfb247Ci0KLQl1MzIgY2hhbm5l bHM7Ci0KLQlzdHJ1Y3QgY29tcGxldGlvbiBocGRfY29tcDsKLQotCXN0cnVjdCBkcF9hdWRpbyBk cF9hdWRpbzsKLX07Ci0KLXN0YXRpYyB1OCBkcF9hdWRpb19nZXRfZzBfdmFsdWUodTggZGF0YSkK LXsKLQl1OCBjWzRdOwotCXU4IGdbNF07Ci0JdTggcmV0X2RhdGEgPSAwOwotCXU4IGk7Ci0KLQlm b3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotCQljW2ldID0gKGRhdGEgPj4gaSkgJiAweDAxOwotCi0J Z1swXSA9IGNbM107Ci0JZ1sxXSA9IGNbMF0gXiBjWzNdOwotCWdbMl0gPSBjWzFdOwotCWdbM10g PSBjWzJdOwotCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkJcmV0X2RhdGEgPSAoKGdbaV0g JiAweDAxKSA8PCBpKSB8IHJldF9kYXRhOwotCi0JcmV0dXJuIHJldF9kYXRhOwotfQotCi1zdGF0 aWMgdTggZHBfYXVkaW9fZ2V0X2cxX3ZhbHVlKHU4IGRhdGEpCi17Ci0JdTggY1s0XTsKLQl1OCBn WzRdOwotCXU4IHJldF9kYXRhID0gMDsKLQl1OCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkr KykKLQkJY1tpXSA9IChkYXRhID4+IGkpICYgMHgwMTsKLQotCWdbMF0gPSBjWzBdIF4gY1szXTsK LQlnWzFdID0gY1swXSBeIGNbMV0gXiBjWzNdOwotCWdbMl0gPSBjWzFdIF4gY1syXTsKLQlnWzNd ID0gY1syXSBeIGNbM107Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotCQlyZXRfZGF0YSA9 ICgoZ1tpXSAmIDB4MDEpIDw8IGkpIHwgcmV0X2RhdGE7Ci0KLQlyZXR1cm4gcmV0X2RhdGE7Ci19 Ci0KLXN0YXRpYyB1OCBkcF9hdWRpb19jYWxjdWxhdGVfcGFyaXR5KHUzMiBkYXRhKQotewotCXU4 IHgwID0gMDsKLQl1OCB4MSA9IDA7Ci0JdTggY2kgPSAwOwotCXU4IGlEYXRhID0gMDsKLQl1OCBp ID0gMDsKLQl1OCBwYXJpdHlfYnl0ZTsKLQl1OCBudW1fYnl0ZSA9IChkYXRhICYgMHhGRjAwKSA+ IDAgPyA4IDogMjsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1fYnl0ZTsgaSsrKSB7Ci0JCWlEYXRh ID0gKGRhdGEgPj4gaSo0KSAmIDB4RjsKLQotCQljaSA9IGlEYXRhIF4geDE7Ci0JCXgxID0geDAg XiBkcF9hdWRpb19nZXRfZzFfdmFsdWUoY2kpOwotCQl4MCA9IGRwX2F1ZGlvX2dldF9nMF92YWx1 ZShjaSk7Ci0JfQotCi0JcGFyaXR5X2J5dGUgPSB4MSB8ICh4MCA8PCA0KTsKLQotCXJldHVybiBw YXJpdHlfYnl0ZTsKLX0KLQotc3RhdGljIHUzMiBkcF9hdWRpb19nZXRfaGVhZGVyKHN0cnVjdCBk cF9jYXRhbG9nX2F1ZGlvICpjYXRhbG9nLAotCQllbnVtIGRwX2NhdGFsb2dfYXVkaW9fc2RwX3R5 cGUgc2RwLAotCQllbnVtIGRwX2NhdGFsb2dfYXVkaW9faGVhZGVyX3R5cGUgaGVhZGVyKQotewot CWNhdGFsb2ctPnNkcF90eXBlID0gc2RwOwotCWNhdGFsb2ctPnNkcF9oZWFkZXIgPSBoZWFkZXI7 Ci0JY2F0YWxvZy0+Z2V0X2hlYWRlcihjYXRhbG9nKTsKLQotCXJldHVybiBjYXRhbG9nLT5kYXRh OwotfQotCi1zdGF0aWMgdm9pZCBkcF9hdWRpb19zZXRfaGVhZGVyKHN0cnVjdCBkcF9jYXRhbG9n X2F1ZGlvICpjYXRhbG9nLAotCQl1MzIgZGF0YSwKLQkJZW51bSBkcF9jYXRhbG9nX2F1ZGlvX3Nk cF90eXBlIHNkcCwKLQkJZW51bSBkcF9jYXRhbG9nX2F1ZGlvX2hlYWRlcl90eXBlIGhlYWRlcikK LXsKLQljYXRhbG9nLT5zZHBfdHlwZSA9IHNkcDsKLQljYXRhbG9nLT5zZHBfaGVhZGVyID0gaGVh ZGVyOwotCWNhdGFsb2ctPmRhdGEgPSBkYXRhOwotCWNhdGFsb2ctPnNldF9oZWFkZXIoY2F0YWxv Zyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2F1ZGlvX3N0cmVhbV9zZHAoc3RydWN0IGRwX2F1ZGlv X3ByaXZhdGUgKmF1ZGlvKQotewotCXN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvICpjYXRhbG9nID0g YXVkaW8tPmNhdGFsb2c7Ci0JdTMyIHZhbHVlLCBuZXdfdmFsdWU7Ci0JdTggcGFyaXR5X2J5dGU7 Ci0KLQkvKiBDb25maWcgaGVhZGVyIGFuZCBwYXJpdHkgYnl0ZSAxICovCi0JdmFsdWUgPSBkcF9h dWRpb19nZXRfaGVhZGVyKGNhdGFsb2csCi0JCQlEUF9BVURJT19TRFBfU1RSRUFNLCBEUF9BVURJ T19TRFBfSEVBREVSXzEpOwotCi0JbmV3X3ZhbHVlID0gMHgwMjsKLQlwYXJpdHlfYnl0ZSA9IGRw X2F1ZGlvX2NhbGN1bGF0ZV9wYXJpdHkobmV3X3ZhbHVlKTsKLQl2YWx1ZSB8PSAoKG5ld192YWx1 ZSA8PCBIRUFERVJfQllURV8xX0JJVCkKLQkJCXwgKHBhcml0eV9ieXRlIDw8IFBBUklUWV9CWVRF XzFfQklUKSk7Ci0JcHJfZGVidWcoIkhlYWRlciBCeXRlIDE6IHZhbHVlID0gMHgleCwgcGFyaXR5 X2J5dGUgPSAweCV4XG4iLAotCQkJdmFsdWUsIHBhcml0eV9ieXRlKTsKLQlkcF9hdWRpb19zZXRf aGVhZGVyKGNhdGFsb2csIHZhbHVlLAotCQlEUF9BVURJT19TRFBfU1RSRUFNLCBEUF9BVURJT19T RFBfSEVBREVSXzEpOwotCi0JLyogQ29uZmlnIGhlYWRlciBhbmQgcGFyaXR5IGJ5dGUgMiAqLwot CXZhbHVlID0gZHBfYXVkaW9fZ2V0X2hlYWRlcihjYXRhbG9nLAotCQkJRFBfQVVESU9fU0RQX1NU UkVBTSwgRFBfQVVESU9fU0RQX0hFQURFUl8yKTsKLQluZXdfdmFsdWUgPSB2YWx1ZTsKLQlwYXJp dHlfYnl0ZSA9IGRwX2F1ZGlvX2NhbGN1bGF0ZV9wYXJpdHkobmV3X3ZhbHVlKTsKLQl2YWx1ZSB8 PSAoKG5ld192YWx1ZSA8PCBIRUFERVJfQllURV8yX0JJVCkKLQkJCXwgKHBhcml0eV9ieXRlIDw8 IFBBUklUWV9CWVRFXzJfQklUKSk7Ci0JcHJfZGVidWcoIkhlYWRlciBCeXRlIDI6IHZhbHVlID0g MHgleCwgcGFyaXR5X2J5dGUgPSAweCV4XG4iLAotCQkJdmFsdWUsIHBhcml0eV9ieXRlKTsKLQot CWRwX2F1ZGlvX3NldF9oZWFkZXIoY2F0YWxvZywgdmFsdWUsCi0JCURQX0FVRElPX1NEUF9TVFJF QU0sIERQX0FVRElPX1NEUF9IRUFERVJfMik7Ci0KLQkvKiBDb25maWcgaGVhZGVyIGFuZCBwYXJp dHkgYnl0ZSAzICovCi0JdmFsdWUgPSBkcF9hdWRpb19nZXRfaGVhZGVyKGNhdGFsb2csCi0JCQlE UF9BVURJT19TRFBfU1RSRUFNLCBEUF9BVURJT19TRFBfSEVBREVSXzMpOwotCi0JbmV3X3ZhbHVl ID0gYXVkaW8tPmNoYW5uZWxzIC0gMTsKLQlwYXJpdHlfYnl0ZSA9IGRwX2F1ZGlvX2NhbGN1bGF0 ZV9wYXJpdHkobmV3X3ZhbHVlKTsKLQl2YWx1ZSB8PSAoKG5ld192YWx1ZSA8PCBIRUFERVJfQllU RV8zX0JJVCkKLQkJCXwgKHBhcml0eV9ieXRlIDw8IFBBUklUWV9CWVRFXzNfQklUKSk7Ci0JcHJf ZGVidWcoIkhlYWRlciBCeXRlIDM6IHZhbHVlID0gMHgleCwgcGFyaXR5X2J5dGUgPSAweCV4XG4i LAotCQl2YWx1ZSwgcGFyaXR5X2J5dGUpOwotCi0JZHBfYXVkaW9fc2V0X2hlYWRlcihjYXRhbG9n LCB2YWx1ZSwKLQkJRFBfQVVESU9fU0RQX1NUUkVBTSwgRFBfQVVESU9fU0RQX0hFQURFUl8zKTsK LX0KLQotc3RhdGljIHZvaWQgZHBfYXVkaW9fdGltZXN0YW1wX3NkcChzdHJ1Y3QgZHBfYXVkaW9f cHJpdmF0ZSAqYXVkaW8pCi17Ci0Jc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gKmNhdGFsb2cgPSBh dWRpby0+Y2F0YWxvZzsKLQl1MzIgdmFsdWUsIG5ld192YWx1ZTsKLQl1OCBwYXJpdHlfYnl0ZTsK LQotCS8qIENvbmZpZyBoZWFkZXIgYW5kIHBhcml0eSBieXRlIDEgKi8KLQl2YWx1ZSA9IGRwX2F1 ZGlvX2dldF9oZWFkZXIoY2F0YWxvZywKLQkJCURQX0FVRElPX1NEUF9USU1FU1RBTVAsIERQX0FV RElPX1NEUF9IRUFERVJfMSk7Ci0KLQluZXdfdmFsdWUgPSAweDE7Ci0JcGFyaXR5X2J5dGUgPSBk cF9hdWRpb19jYWxjdWxhdGVfcGFyaXR5KG5ld192YWx1ZSk7Ci0JdmFsdWUgfD0gKChuZXdfdmFs dWUgPDwgSEVBREVSX0JZVEVfMV9CSVQpCi0JCQl8IChwYXJpdHlfYnl0ZSA8PCBQQVJJVFlfQllU RV8xX0JJVCkpOwotCXByX2RlYnVnKCJIZWFkZXIgQnl0ZSAxOiB2YWx1ZSA9IDB4JXgsIHBhcml0 eV9ieXRlID0gMHgleFxuIiwKLQkJdmFsdWUsIHBhcml0eV9ieXRlKTsKLQlkcF9hdWRpb19zZXRf aGVhZGVyKGNhdGFsb2csIHZhbHVlLAotCQlEUF9BVURJT19TRFBfVElNRVNUQU1QLCBEUF9BVURJ T19TRFBfSEVBREVSXzEpOwotCi0JLyogQ29uZmlnIGhlYWRlciBhbmQgcGFyaXR5IGJ5dGUgMiAq LwotCXZhbHVlID0gZHBfYXVkaW9fZ2V0X2hlYWRlcihjYXRhbG9nLAotCQkJRFBfQVVESU9fU0RQ X1RJTUVTVEFNUCwgRFBfQVVESU9fU0RQX0hFQURFUl8yKTsKLQotCW5ld192YWx1ZSA9IDB4MTc7 Ci0JcGFyaXR5X2J5dGUgPSBkcF9hdWRpb19jYWxjdWxhdGVfcGFyaXR5KG5ld192YWx1ZSk7Ci0J dmFsdWUgfD0gKChuZXdfdmFsdWUgPDwgSEVBREVSX0JZVEVfMl9CSVQpCi0JCQl8IChwYXJpdHlf Ynl0ZSA8PCBQQVJJVFlfQllURV8yX0JJVCkpOwotCXByX2RlYnVnKCJIZWFkZXIgQnl0ZSAyOiB2 YWx1ZSA9IDB4JXgsIHBhcml0eV9ieXRlID0gMHgleFxuIiwKLQkJCXZhbHVlLCBwYXJpdHlfYnl0 ZSk7Ci0JZHBfYXVkaW9fc2V0X2hlYWRlcihjYXRhbG9nLCB2YWx1ZSwKLQkJRFBfQVVESU9fU0RQ X1RJTUVTVEFNUCwgRFBfQVVESU9fU0RQX0hFQURFUl8yKTsKLQotCS8qIENvbmZpZyBoZWFkZXIg YW5kIHBhcml0eSBieXRlIDMgKi8KLQl2YWx1ZSA9IGRwX2F1ZGlvX2dldF9oZWFkZXIoY2F0YWxv ZywKLQkJCURQX0FVRElPX1NEUF9USU1FU1RBTVAsIERQX0FVRElPX1NEUF9IRUFERVJfMyk7Ci0K LQluZXdfdmFsdWUgPSAoMHgwIHwgKDB4MTEgPDwgMikpOwotCXBhcml0eV9ieXRlID0gZHBfYXVk aW9fY2FsY3VsYXRlX3Bhcml0eShuZXdfdmFsdWUpOwotCXZhbHVlIHw9ICgobmV3X3ZhbHVlIDw8 IEhFQURFUl9CWVRFXzNfQklUKQotCQkJfCAocGFyaXR5X2J5dGUgPDwgUEFSSVRZX0JZVEVfM19C SVQpKTsKLQlwcl9kZWJ1ZygiSGVhZGVyIEJ5dGUgMzogdmFsdWUgPSAweCV4LCBwYXJpdHlfYnl0 ZSA9IDB4JXhcbiIsCi0JCQl2YWx1ZSwgcGFyaXR5X2J5dGUpOwotCWRwX2F1ZGlvX3NldF9oZWFk ZXIoY2F0YWxvZywgdmFsdWUsCi0JCURQX0FVRElPX1NEUF9USU1FU1RBTVAsIERQX0FVRElPX1NE UF9IRUFERVJfMyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2F1ZGlvX2luZm9mcmFtZV9zZHAoc3Ry dWN0IGRwX2F1ZGlvX3ByaXZhdGUgKmF1ZGlvKQotewotCXN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlv ICpjYXRhbG9nID0gYXVkaW8tPmNhdGFsb2c7Ci0JdTMyIHZhbHVlLCBuZXdfdmFsdWU7Ci0JdTgg cGFyaXR5X2J5dGU7Ci0KLQkvKiBDb25maWcgaGVhZGVyIGFuZCBwYXJpdHkgYnl0ZSAxICovCi0J dmFsdWUgPSBkcF9hdWRpb19nZXRfaGVhZGVyKGNhdGFsb2csCi0JCQlEUF9BVURJT19TRFBfSU5G T0ZSQU1FLCBEUF9BVURJT19TRFBfSEVBREVSXzEpOwotCi0JbmV3X3ZhbHVlID0gMHg4NDsKLQlw YXJpdHlfYnl0ZSA9IGRwX2F1ZGlvX2NhbGN1bGF0ZV9wYXJpdHkobmV3X3ZhbHVlKTsKLQl2YWx1 ZSB8PSAoKG5ld192YWx1ZSA8PCBIRUFERVJfQllURV8xX0JJVCkKLQkJCXwgKHBhcml0eV9ieXRl IDw8IFBBUklUWV9CWVRFXzFfQklUKSk7Ci0JcHJfZGVidWcoIkhlYWRlciBCeXRlIDE6IHZhbHVl ID0gMHgleCwgcGFyaXR5X2J5dGUgPSAweCV4XG4iLAotCQkJdmFsdWUsIHBhcml0eV9ieXRlKTsK LQlkcF9hdWRpb19zZXRfaGVhZGVyKGNhdGFsb2csIHZhbHVlLAotCQlEUF9BVURJT19TRFBfSU5G T0ZSQU1FLCBEUF9BVURJT19TRFBfSEVBREVSXzEpOwotCi0JLyogQ29uZmlnIGhlYWRlciBhbmQg cGFyaXR5IGJ5dGUgMiAqLwotCXZhbHVlID0gZHBfYXVkaW9fZ2V0X2hlYWRlcihjYXRhbG9nLAot CQkJRFBfQVVESU9fU0RQX0lORk9GUkFNRSwgRFBfQVVESU9fU0RQX0hFQURFUl8yKTsKLQotCW5l d192YWx1ZSA9IDB4MWI7Ci0JcGFyaXR5X2J5dGUgPSBkcF9hdWRpb19jYWxjdWxhdGVfcGFyaXR5 KG5ld192YWx1ZSk7Ci0JdmFsdWUgfD0gKChuZXdfdmFsdWUgPDwgSEVBREVSX0JZVEVfMl9CSVQp Ci0JCQl8IChwYXJpdHlfYnl0ZSA8PCBQQVJJVFlfQllURV8yX0JJVCkpOwotCXByX2RlYnVnKCJI ZWFkZXIgQnl0ZSAyOiB2YWx1ZSA9IDB4JXgsIHBhcml0eV9ieXRlID0gMHgleFxuIiwKLQkJCXZh bHVlLCBwYXJpdHlfYnl0ZSk7Ci0JZHBfYXVkaW9fc2V0X2hlYWRlcihjYXRhbG9nLCB2YWx1ZSwK LQkJRFBfQVVESU9fU0RQX0lORk9GUkFNRSwgRFBfQVVESU9fU0RQX0hFQURFUl8yKTsKLQotCS8q IENvbmZpZyBoZWFkZXIgYW5kIHBhcml0eSBieXRlIDMgKi8KLQl2YWx1ZSA9IGRwX2F1ZGlvX2dl dF9oZWFkZXIoY2F0YWxvZywKLQkJCURQX0FVRElPX1NEUF9JTkZPRlJBTUUsIERQX0FVRElPX1NE UF9IRUFERVJfMyk7Ci0KLQluZXdfdmFsdWUgPSAoMHgwIHwgKDB4MTEgPDwgMikpOwotCXBhcml0 eV9ieXRlID0gZHBfYXVkaW9fY2FsY3VsYXRlX3Bhcml0eShuZXdfdmFsdWUpOwotCXZhbHVlIHw9 ICgobmV3X3ZhbHVlIDw8IEhFQURFUl9CWVRFXzNfQklUKQotCQkJfCAocGFyaXR5X2J5dGUgPDwg UEFSSVRZX0JZVEVfM19CSVQpKTsKLQlwcl9kZWJ1ZygiSGVhZGVyIEJ5dGUgMzogdmFsdWUgPSAw eCV4LCBwYXJpdHlfYnl0ZSA9IDB4JXhcbiIsCi0JCQluZXdfdmFsdWUsIHBhcml0eV9ieXRlKTsK LQlkcF9hdWRpb19zZXRfaGVhZGVyKGNhdGFsb2csIHZhbHVlLAotCQlEUF9BVURJT19TRFBfSU5G T0ZSQU1FLCBEUF9BVURJT19TRFBfSEVBREVSXzMpOwotfQotCi1zdGF0aWMgdm9pZCBkcF9hdWRp b19jb3B5X21hbmFnZW1lbnRfc2RwKHN0cnVjdCBkcF9hdWRpb19wcml2YXRlICphdWRpbykKLXsK LQlzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAqY2F0YWxvZyA9IGF1ZGlvLT5jYXRhbG9nOwotCXUz MiB2YWx1ZSwgbmV3X3ZhbHVlOwotCXU4IHBhcml0eV9ieXRlOwotCi0JLyogQ29uZmlnIGhlYWRl ciBhbmQgcGFyaXR5IGJ5dGUgMSAqLwotCXZhbHVlID0gZHBfYXVkaW9fZ2V0X2hlYWRlcihjYXRh bG9nLAotCQkJRFBfQVVESU9fU0RQX0NPUFlNQU5BR0VNRU5ULCBEUF9BVURJT19TRFBfSEVBREVS XzEpOwotCi0JbmV3X3ZhbHVlID0gMHgwNTsKLQlwYXJpdHlfYnl0ZSA9IGRwX2F1ZGlvX2NhbGN1 bGF0ZV9wYXJpdHkobmV3X3ZhbHVlKTsKLQl2YWx1ZSB8PSAoKG5ld192YWx1ZSA8PCBIRUFERVJf QllURV8xX0JJVCkKLQkJCXwgKHBhcml0eV9ieXRlIDw8IFBBUklUWV9CWVRFXzFfQklUKSk7Ci0J cHJfZGVidWcoIkhlYWRlciBCeXRlIDE6IHZhbHVlID0gMHgleCwgcGFyaXR5X2J5dGUgPSAweCV4 XG4iLAotCQkJdmFsdWUsIHBhcml0eV9ieXRlKTsKLQlkcF9hdWRpb19zZXRfaGVhZGVyKGNhdGFs b2csIHZhbHVlLAotCQlEUF9BVURJT19TRFBfQ09QWU1BTkFHRU1FTlQsIERQX0FVRElPX1NEUF9I RUFERVJfMSk7Ci0KLQkvKiBDb25maWcgaGVhZGVyIGFuZCBwYXJpdHkgYnl0ZSAyICovCi0JdmFs dWUgPSBkcF9hdWRpb19nZXRfaGVhZGVyKGNhdGFsb2csCi0JCQlEUF9BVURJT19TRFBfQ09QWU1B TkFHRU1FTlQsIERQX0FVRElPX1NEUF9IRUFERVJfMik7Ci0KLQluZXdfdmFsdWUgPSAweDBGOwot CXBhcml0eV9ieXRlID0gZHBfYXVkaW9fY2FsY3VsYXRlX3Bhcml0eShuZXdfdmFsdWUpOwotCXZh bHVlIHw9ICgobmV3X3ZhbHVlIDw8IEhFQURFUl9CWVRFXzJfQklUKQotCQkJfCAocGFyaXR5X2J5 dGUgPDwgUEFSSVRZX0JZVEVfMl9CSVQpKTsKLQlwcl9kZWJ1ZygiSGVhZGVyIEJ5dGUgMjogdmFs dWUgPSAweCV4LCBwYXJpdHlfYnl0ZSA9IDB4JXhcbiIsCi0JCQl2YWx1ZSwgcGFyaXR5X2J5dGUp OwotCWRwX2F1ZGlvX3NldF9oZWFkZXIoY2F0YWxvZywgdmFsdWUsCi0JCURQX0FVRElPX1NEUF9D T1BZTUFOQUdFTUVOVCwgRFBfQVVESU9fU0RQX0hFQURFUl8yKTsKLQotCS8qIENvbmZpZyBoZWFk ZXIgYW5kIHBhcml0eSBieXRlIDMgKi8KLQl2YWx1ZSA9IGRwX2F1ZGlvX2dldF9oZWFkZXIoY2F0 YWxvZywKLQkJCURQX0FVRElPX1NEUF9DT1BZTUFOQUdFTUVOVCwgRFBfQVVESU9fU0RQX0hFQURF Ul8zKTsKLQotCW5ld192YWx1ZSA9IDB4MDsKLQlwYXJpdHlfYnl0ZSA9IGRwX2F1ZGlvX2NhbGN1 bGF0ZV9wYXJpdHkobmV3X3ZhbHVlKTsKLQl2YWx1ZSB8PSAoKG5ld192YWx1ZSA8PCBIRUFERVJf QllURV8zX0JJVCkKLQkJCXwgKHBhcml0eV9ieXRlIDw8IFBBUklUWV9CWVRFXzNfQklUKSk7Ci0J cHJfZGVidWcoIkhlYWRlciBCeXRlIDM6IHZhbHVlID0gMHgleCwgcGFyaXR5X2J5dGUgPSAweCV4 XG4iLAotCQkJdmFsdWUsIHBhcml0eV9ieXRlKTsKLQlkcF9hdWRpb19zZXRfaGVhZGVyKGNhdGFs b2csIHZhbHVlLAotCQlEUF9BVURJT19TRFBfQ09QWU1BTkFHRU1FTlQsIERQX0FVRElPX1NEUF9I RUFERVJfMyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2F1ZGlvX2lzcmNfc2RwKHN0cnVjdCBkcF9h dWRpb19wcml2YXRlICphdWRpbykKLXsKLQlzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAqY2F0YWxv ZyA9IGF1ZGlvLT5jYXRhbG9nOwotCXUzMiB2YWx1ZSwgbmV3X3ZhbHVlOwotCXU4IHBhcml0eV9i eXRlOwotCi0JLyogQ29uZmlnIGhlYWRlciBhbmQgcGFyaXR5IGJ5dGUgMSAqLwotCXZhbHVlID0g ZHBfYXVkaW9fZ2V0X2hlYWRlcihjYXRhbG9nLAotCQkJRFBfQVVESU9fU0RQX0lTUkMsIERQX0FV RElPX1NEUF9IRUFERVJfMSk7Ci0KLQluZXdfdmFsdWUgPSAweDA2OwotCXBhcml0eV9ieXRlID0g ZHBfYXVkaW9fY2FsY3VsYXRlX3Bhcml0eShuZXdfdmFsdWUpOwotCXZhbHVlIHw9ICgobmV3X3Zh bHVlIDw8IEhFQURFUl9CWVRFXzFfQklUKQotCQkJfCAocGFyaXR5X2J5dGUgPDwgUEFSSVRZX0JZ VEVfMV9CSVQpKTsKLQlwcl9kZWJ1ZygiSGVhZGVyIEJ5dGUgMTogdmFsdWUgPSAweCV4LCBwYXJp dHlfYnl0ZSA9IDB4JXhcbiIsCi0JCQl2YWx1ZSwgcGFyaXR5X2J5dGUpOwotCWRwX2F1ZGlvX3Nl dF9oZWFkZXIoY2F0YWxvZywgdmFsdWUsCi0JCURQX0FVRElPX1NEUF9JU1JDLCBEUF9BVURJT19T RFBfSEVBREVSXzEpOwotCi0JLyogQ29uZmlnIGhlYWRlciBhbmQgcGFyaXR5IGJ5dGUgMiAqLwot CXZhbHVlID0gZHBfYXVkaW9fZ2V0X2hlYWRlcihjYXRhbG9nLAotCQkJRFBfQVVESU9fU0RQX0lT UkMsIERQX0FVRElPX1NEUF9IRUFERVJfMik7Ci0KLQluZXdfdmFsdWUgPSAweDBGOwotCXBhcml0 eV9ieXRlID0gZHBfYXVkaW9fY2FsY3VsYXRlX3Bhcml0eShuZXdfdmFsdWUpOwotCXZhbHVlIHw9 ICgobmV3X3ZhbHVlIDw8IEhFQURFUl9CWVRFXzJfQklUKQotCQkJfCAocGFyaXR5X2J5dGUgPDwg UEFSSVRZX0JZVEVfMl9CSVQpKTsKLQlwcl9kZWJ1ZygiSGVhZGVyIEJ5dGUgMjogdmFsdWUgPSAw eCV4LCBwYXJpdHlfYnl0ZSA9IDB4JXhcbiIsCi0JCQl2YWx1ZSwgcGFyaXR5X2J5dGUpOwotCWRw X2F1ZGlvX3NldF9oZWFkZXIoY2F0YWxvZywgdmFsdWUsCi0JCURQX0FVRElPX1NEUF9JU1JDLCBE UF9BVURJT19TRFBfSEVBREVSXzIpOwotfQotCi1zdGF0aWMgdm9pZCBkcF9hdWRpb19zZXR1cF9z ZHAoc3RydWN0IGRwX2F1ZGlvX3ByaXZhdGUgKmF1ZGlvKQotewotCWF1ZGlvLT5jYXRhbG9nLT5j b25maWdfc2RwKGF1ZGlvLT5jYXRhbG9nKTsKLQotCWRwX2F1ZGlvX3N0cmVhbV9zZHAoYXVkaW8p OwotCWRwX2F1ZGlvX3RpbWVzdGFtcF9zZHAoYXVkaW8pOwotCWRwX2F1ZGlvX2luZm9mcmFtZV9z ZHAoYXVkaW8pOwotCWRwX2F1ZGlvX2NvcHlfbWFuYWdlbWVudF9zZHAoYXVkaW8pOwotCWRwX2F1 ZGlvX2lzcmNfc2RwKGF1ZGlvKTsKLX0KLQotc3RhdGljIHZvaWQgZHBfYXVkaW9fc2V0dXBfYWNy KHN0cnVjdCBkcF9hdWRpb19wcml2YXRlICphdWRpbykKLXsKLQl1MzIgc2VsZWN0ID0gMDsKLQlz dHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAqY2F0YWxvZyA9IGF1ZGlvLT5jYXRhbG9nOwotCi0Jc3dp dGNoIChhdWRpby0+ZHBfYXVkaW8uYndfY29kZSkgewotCWNhc2UgRFBfTElOS19CV18xXzYyOgot CQlzZWxlY3QgPSAwOwotCQlicmVhazsKLQljYXNlIERQX0xJTktfQldfMl83OgotCQlzZWxlY3Qg PSAxOwotCQlicmVhazsKLQljYXNlIERQX0xJTktfQldfNV80OgotCQlzZWxlY3QgPSAyOwotCQli cmVhazsKLQljYXNlIERQX0xJTktfQldfOF8xOgotCQlzZWxlY3QgPSAzOwotCQlicmVhazsKLQlk ZWZhdWx0OgotCQlwcl9kZWJ1ZygiVW5rbm93biBsaW5rIHJhdGVcbiIpOwotCQlzZWxlY3QgPSAw OwotCQlicmVhazsKLQl9Ci0KLQljYXRhbG9nLT5kYXRhID0gc2VsZWN0OwotCWNhdGFsb2ctPmNv bmZpZ19hY3IoY2F0YWxvZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2F1ZGlvX3NhZmVfdG9fZXhp dF9sZXZlbChzdHJ1Y3QgZHBfYXVkaW9fcHJpdmF0ZSAqYXVkaW8pCi17Ci0Jc3RydWN0IGRwX2Nh dGFsb2dfYXVkaW8gKmNhdGFsb2cgPSBhdWRpby0+Y2F0YWxvZzsKLQl1MzIgc2FmZV90b19leGl0 X2xldmVsID0gMDsKLQotCXN3aXRjaCAoYXVkaW8tPmRwX2F1ZGlvLmxhbmVfY291bnQpIHsKLQlj YXNlIDE6Ci0JCXNhZmVfdG9fZXhpdF9sZXZlbCA9IDE0OwotCQlicmVhazsKLQljYXNlIDI6Ci0J CXNhZmVfdG9fZXhpdF9sZXZlbCA9IDg7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJc2FmZV90b19l eGl0X2xldmVsID0gNTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJfZGVidWcoInNldHRpbmcg dGhlIGRlZmF1bHQgc2FmZV90b19leGl0X2xldmVsID0gJXVcbiIsCi0JCQkJc2FmZV90b19leGl0 X2xldmVsKTsKLQkJc2FmZV90b19leGl0X2xldmVsID0gMTQ7Ci0JCWJyZWFrOwotCX0KLQotCWNh dGFsb2ctPmRhdGEgPSBzYWZlX3RvX2V4aXRfbGV2ZWw7Ci0JY2F0YWxvZy0+c2FmZV90b19leGl0 X2xldmVsKGNhdGFsb2cpOwotfQotCi1zdGF0aWMgdm9pZCBkcF9hdWRpb19lbmFibGUoc3RydWN0 IGRwX2F1ZGlvX3ByaXZhdGUgKmF1ZGlvLCBib29sIGVuYWJsZSkKLXsKLQlzdHJ1Y3QgZHBfY2F0 YWxvZ19hdWRpbyAqY2F0YWxvZyA9IGF1ZGlvLT5jYXRhbG9nOwotCi0JY2F0YWxvZy0+ZGF0YSA9 IGVuYWJsZTsKLQljYXRhbG9nLT5lbmFibGUoY2F0YWxvZyk7Ci0KLQlhdWRpby0+ZW5naW5lX29u ID0gZW5hYmxlOwotfQotCi1zdGF0aWMgc3RydWN0IGRwX2F1ZGlvX3ByaXZhdGUgKmdldF9hdWRp b19nZXRfZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBtc21f ZXh0X2Rpc3BfZGF0YSAqZXh0X2RhdGE7Ci0Jc3RydWN0IGRwX2F1ZGlvICpkcF9hdWRpbzsKLQot CWlmICghcGRldikgewotCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwotCQlyZXR1cm4gRVJS X1BUUigtRU5PREVWKTsKLQl9Ci0KLQlleHRfZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBk ZXYpOwotCWlmICghZXh0X2RhdGEpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGV4dCBkaXNwIGRhdGFc biIpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9Ci0KLQlkcF9hdWRpbyA9IGV4dF9k YXRhLT5pbnRmX2RhdGE7Ci0JaWYgKCFleHRfZGF0YSkgewotCQlwcl9lcnIoImludmFsaWQgaW50 ZiBkYXRhXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JfQotCi0JcmV0dXJuIGNv bnRhaW5lcl9vZihkcF9hdWRpbywgc3RydWN0IGRwX2F1ZGlvX3ByaXZhdGUsIGRwX2F1ZGlvKTsK LX0KLQotc3RhdGljIGludCBkcF9hdWRpb19pbmZvX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYsCi0Jc3RydWN0IG1zbV9leHRfZGlzcF9hdWRpb19zZXR1cF9wYXJhbXMgKnBhcmFt cykKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkcF9hdWRpb19wcml2YXRlICphdWRpbzsKLQot CWF1ZGlvID0gZ2V0X2F1ZGlvX2dldF9kYXRhKHBkZXYpOwotCWlmIChJU19FUlIoYXVkaW8pKSB7 Ci0JCXJjID0gUFRSX0VSUihhdWRpbyk7Ci0JCWdvdG8gZW5kOwotCX0KLQotCWF1ZGlvLT5jaGFu bmVscyA9IHBhcmFtcy0+bnVtX29mX2NoYW5uZWxzOwotCi0JZHBfYXVkaW9fc2V0dXBfc2RwKGF1 ZGlvKTsKLQlkcF9hdWRpb19zZXR1cF9hY3IoYXVkaW8pOwotCWRwX2F1ZGlvX3NhZmVfdG9fZXhp dF9sZXZlbChhdWRpbyk7Ci0JZHBfYXVkaW9fZW5hYmxlKGF1ZGlvLCB0cnVlKTsKLWVuZDoKLQly ZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfYXVkaW9fZ2V0X2VkaWRfYmxrKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCXN0cnVjdCBtc21fZXh0X2Rpc3BfYXVkaW9fZWRpZF9i bGsgKmJsaykKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkcF9hdWRpb19wcml2YXRlICphdWRp bzsKLQotCWF1ZGlvID0gZ2V0X2F1ZGlvX2dldF9kYXRhKHBkZXYpOwotCWlmIChJU19FUlIoYXVk aW8pKSB7Ci0JCXJjID0gUFRSX0VSUihhdWRpbyk7Ci0JCWdvdG8gZW5kOwotCX0KLQotCWlmICgh YXVkaW8tPnBhbmVsIHx8ICFhdWRpby0+cGFuZWwtPmVkaWQpIHsKLQkJcHJfZXJyKCJpbnZhbGlk IHBhbmVsIGRhdGFcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZW5kOwotCX0KLQotLyoK LSAqIFRPRE86Ci0gKglhdWRpb19kYXRhX2JsayBzaG91bGQgYmUgY2hhbmdlZCB0byBiZSBhIGNl YV9zYWQgYXJyYXkKLSAqCWF1ZGlvX2RhdGFfYmxrX3NpemUgc2hvdWxkIGJlIGNoYW5nZWQgdG8g Y29udGFpbiBhIGNvdW50IG9mIHNhZHMKLSAqCi0gKglPbmNlIHRoaXMgaXMgZG9uZSwgdXNlIGRy bV9lZGlkX3RvX3NhZCgpIHRvIGV4dHJhY3QgdGhpcyBmcm9tCi0gKglhdWRpby0+cGFuZWwtPmVk aWQuIEknZCBjaGFuZ2UgdGhpcywgYnV0IEkgZG9uJ3QgaGF2ZSB0aGF0IGNvZGUgOi8KLSAqLwot I2lmIDAKLQlibGstPmF1ZGlvX2RhdGFfYmxrID0gZWRpZC0+YXVkaW9fZGF0YV9ibG9jazsKLQli bGstPmF1ZGlvX2RhdGFfYmxrX3NpemUgPSBlZGlkLT5hZGJfc2l6ZTsKLSNlbmRpZgotCi0JYmxr LT5zcGtfYWxsb2NfZGF0YV9ibGtfc2l6ZSA9IGRybV9lZGlkX3RvX3NwZWFrZXJfYWxsb2NhdGlv bigKLQkJCQkJCWF1ZGlvLT5wYW5lbC0+ZWRpZCwKLQkJCQkJCWJsay0+c3Brcl9hbGxvY19kYXRh X2Jsb2NrKTsKLQotZW5kOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkcF9hdWRpb19n ZXRfY2FibGVfc3RhdHVzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHUzMiB2b3RlKQot ewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRwX2F1ZGlvX3ByaXZhdGUgKmF1ZGlvOwotCi0JYXVk aW8gPSBnZXRfYXVkaW9fZ2V0X2RhdGEocGRldik7Ci0JaWYgKElTX0VSUihhdWRpbykpIHsKLQkJ cmMgPSBQVFJfRVJSKGF1ZGlvKTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JaWYgKCFhdWRpby0+cGFu ZWwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhbmVsIGRhdGFcbiIpOwotCQlyYyA9IC1FSU5WQUw7 Ci0JCWdvdG8gZW5kOwotCX0KLQotCXJldHVybiBhdWRpby0+c2Vzc2lvbl9vbjsKLWVuZDoKLQly ZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfYXVkaW9fZ2V0X2ludGZfaWQoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkcF9hdWRpb19w cml2YXRlICphdWRpbzsKLQotCWF1ZGlvID0gZ2V0X2F1ZGlvX2dldF9kYXRhKHBkZXYpOwotCWlm IChJU19FUlIoYXVkaW8pKSB7Ci0JCXJjID0gUFRSX0VSUihhdWRpbyk7Ci0JCWdvdG8gZW5kOwot CX0KLQotCXJldHVybiBFWFRfRElTUExBWV9UWVBFX0RQOwotZW5kOgotCXJldHVybiByYzsKLX0K LQotc3RhdGljIHZvaWQgZHBfYXVkaW9fdGVhcmRvd25fZG9uZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQotewotCXN0cnVjdCBkcF9hdWRpb19wcml2YXRlICphdWRpbzsKLQotCWF1ZGlv ID0gZ2V0X2F1ZGlvX2dldF9kYXRhKHBkZXYpOwotCWlmIChJU19FUlIoYXVkaW8pKQotCQlyZXR1 cm47Ci0KLQlpZiAoIWF1ZGlvLT5wYW5lbCkgewotCQlwcl9lcnIoImludmFsaWQgcGFuZWwgZGF0 YVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlkcF9hdWRpb19lbmFibGUoYXVkaW8sIGZhbHNlKTsK LQotCWNvbXBsZXRlX2FsbCgmYXVkaW8tPmhwZF9jb21wKTsKLQotCXByX2RlYnVnKCJhdWRpbyBl bmdpbmUgZGlzYWJsZWRcbiIpOwotfQotCi1zdGF0aWMgaW50IGRwX2F1ZGlvX2Fja19kb25lKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHUzMiBhY2spCi17Ci0JaW50IHJjID0gMCwgYWNr X2hwZDsKLQlzdHJ1Y3QgZHBfYXVkaW9fcHJpdmF0ZSAqYXVkaW87Ci0KLQlhdWRpbyA9IGdldF9h dWRpb19nZXRfZGF0YShwZGV2KTsKLQlpZiAoSVNfRVJSKGF1ZGlvKSkgewotCQlyYyA9IFBUUl9F UlIoYXVkaW8pOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlpZiAoYWNrICYgQVVESU9fQUNLX1NFVF9F TkFCTEUpIHsKLQkJYXVkaW8tPmFja19lbmFibGVkID0gYWNrICYgQVVESU9fQUNLX0VOQUJMRSA/ Ci0JCQl0cnVlIDogZmFsc2U7Ci0KLQkJcHJfZGVidWcoImF1ZGlvIGFjayBmZWF0dXJlICVzXG4i LAotCQkJYXVkaW8tPmFja19lbmFibGVkID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7Ci0JCWdv dG8gZW5kOwotCX0KLQotCWlmICghYXVkaW8tPmFja19lbmFibGVkKQotCQlnb3RvIGVuZDsKLQot CWFja19ocGQgPSBhY2sgJiBBVURJT19BQ0tfQ09OTkVDVDsKLQotCXByX2RlYnVnKCJhY2tub3ds ZWRnaW5nIGF1ZGlvICglZClcbiIsIGFja19ocGQpOwotCi0JaWYgKCFhdWRpby0+ZW5naW5lX29u KQotCQljb21wbGV0ZV9hbGwoJmF1ZGlvLT5ocGRfY29tcCk7Ci1lbmQ6Ci0JcmV0dXJuIHJjOwot fQotCi1zdGF0aWMgaW50IGRwX2F1ZGlvX2luaXRfZXh0X2Rpc3Aoc3RydWN0IGRwX2F1ZGlvX3By aXZhdGUgKmF1ZGlvKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpwZCA9 IE5VTEw7Ci0JY29uc3QgY2hhciAqcGhhbmRsZSA9ICJxY29tLGV4dC1kaXNwIjsKLQlzdHJ1Y3Qg bXNtX2V4dF9kaXNwX2luaXRfZGF0YSAqZXh0OwotCXN0cnVjdCBtc21fZXh0X2Rpc3BfYXVkaW9f Y29kZWNfb3BzICpvcHM7Ci0KLQlleHQgPSAmYXVkaW8tPmV4dF9hdWRpb19kYXRhOwotCW9wcyA9 ICZleHQtPmNvZGVjX29wczsKLQotCWV4dC0+dHlwZSA9IEVYVF9ESVNQTEFZX1RZUEVfRFA7Ci0J ZXh0LT5wZGV2ID0gYXVkaW8tPnBkZXY7Ci0JZXh0LT5pbnRmX2RhdGEgPSAmYXVkaW8tPmRwX2F1 ZGlvOwotCi0Jb3BzLT5hdWRpb19pbmZvX3NldHVwICAgPSBkcF9hdWRpb19pbmZvX3NldHVwOwot CW9wcy0+Z2V0X2F1ZGlvX2VkaWRfYmxrID0gZHBfYXVkaW9fZ2V0X2VkaWRfYmxrOwotCW9wcy0+ Y2FibGVfc3RhdHVzICAgICAgID0gZHBfYXVkaW9fZ2V0X2NhYmxlX3N0YXR1czsKLQlvcHMtPmdl dF9pbnRmX2lkICAgICAgICA9IGRwX2F1ZGlvX2dldF9pbnRmX2lkOwotCW9wcy0+dGVhcmRvd25f ZG9uZSAgICAgID0gZHBfYXVkaW9fdGVhcmRvd25fZG9uZTsKLQlvcHMtPmFja25vd2xlZGdlICAg ICAgICA9IGRwX2F1ZGlvX2Fja19kb25lOwotCi0JaWYgKCFhdWRpby0+cGRldi0+ZGV2Lm9mX25v ZGUpIHsKLQkJcHJfZXJyKCJjYW5ub3QgZmluZCBhdWRpbyBkZXYub2Zfbm9kZVxuIik7Ci0JCXJj ID0gLUVOT0RFVjsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcGQgPSBvZl9wYXJzZV9waGFuZGxlKGF1 ZGlvLT5wZGV2LT5kZXYub2Zfbm9kZSwgcGhhbmRsZSwgMCk7Ci0JaWYgKCFwZCkgewotCQlwcl9l cnIoImNhbm5vdCBwYXJzZSAlcyBoYW5kbGVcbiIsIHBoYW5kbGUpOwotCQlyYyA9IC1FTk9ERVY7 Ci0JCWdvdG8gZW5kOwotCX0KLQotCWF1ZGlvLT5leHRfcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5 X25vZGUocGQpOwotCWlmICghYXVkaW8tPmV4dF9wZGV2KSB7Ci0JCXByX2VycigiY2Fubm90IGZp bmQgJXMgcGRldlxuIiwgcGhhbmRsZSk7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290byBlbmQ7Ci0J fQotCi0JcmMgPSBtc21fZXh0X2Rpc3BfcmVnaXN0ZXJfaW50ZihhdWRpby0+ZXh0X3BkZXYsIGV4 dCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoImZhaWxlZCB0byByZWdpc3RlciBkaXNwXG4iKTsKLWVu ZDoKLQlpZiAocGQpCi0JCW9mX25vZGVfcHV0KHBkKTsKLQotCXJldHVybiByYzsKLX0KLQotc3Rh dGljIGludCBkcF9hdWRpb19vbihzdHJ1Y3QgZHBfYXVkaW8gKmRwX2F1ZGlvKQotewotCWludCBy YyA9IDA7Ci0Jc3RydWN0IGRwX2F1ZGlvX3ByaXZhdGUgKmF1ZGlvOwotCXN0cnVjdCBtc21fZXh0 X2Rpc3BfaW5pdF9kYXRhICpleHQ7Ci0KLQlpZiAoIWRwX2F1ZGlvKSB7Ci0JCXByX2VycigiaW52 YWxpZCBpbnB1dFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlbmQ7Ci0JfQotCi0JYXVk aW8gPSBjb250YWluZXJfb2YoZHBfYXVkaW8sIHN0cnVjdCBkcF9hdWRpb19wcml2YXRlLCBkcF9h dWRpbyk7Ci0KLQlleHQgPSAmYXVkaW8tPmV4dF9hdWRpb19kYXRhOwotCi0JYXVkaW8tPnNlc3Np b25fb24gPSB0cnVlOwotCi0JcmMgPSBleHQtPmludGZfb3BzLmF1ZGlvX2NvbmZpZyhhdWRpby0+ ZXh0X3BkZXYsCi0JCQlFWFRfRElTUExBWV9UWVBFX0RQLAotCQkJRVhUX0RJU1BMQVlfQ0FCTEVf Q09OTkVDVCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIGNvbmZpZyBhdWRpbywg ZXJyPSVkXG4iLCByYyk7Ci0JCWdvdG8gZW5kOwotCX0KLQotCXJjID0gZXh0LT5pbnRmX29wcy5h dWRpb19ub3RpZnkoYXVkaW8tPmV4dF9wZGV2LAotCQkJRVhUX0RJU1BMQVlfVFlQRV9EUCwKLQkJ CUVYVF9ESVNQTEFZX0NBQkxFX0NPTk5FQ1QpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxl ZCB0byBub3RpZnkgYXVkaW8sIGVycj0lZFxuIiwgcmMpOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQly ZWluaXRfY29tcGxldGlvbigmYXVkaW8tPmhwZF9jb21wKTsKLQlyYyA9IHdhaXRfZm9yX2NvbXBs ZXRpb25fdGltZW91dCgmYXVkaW8tPmhwZF9jb21wLCBIWiAqIDUpOwotCWlmICghcmMpIHsKLQkJ cHJfZXJyKCJ0aW1lb3V0XG4iKTsKLQkJcmMgPSAtRVRJTUVET1VUOwotCQlnb3RvIGVuZDsKLQl9 Ci0KLQlwcl9kZWJ1Zygic3VjY2Vzc1xuIik7Ci1lbmQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0 aWMgaW50IGRwX2F1ZGlvX29mZihzdHJ1Y3QgZHBfYXVkaW8gKmRwX2F1ZGlvKQotewotCWludCBy YyA9IDA7Ci0Jc3RydWN0IGRwX2F1ZGlvX3ByaXZhdGUgKmF1ZGlvOwotCXN0cnVjdCBtc21fZXh0 X2Rpc3BfaW5pdF9kYXRhICpleHQ7Ci0KLQlpZiAoIWRwX2F1ZGlvKSB7Ci0JCXByX2VycigiaW52 YWxpZCBpbnB1dFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWF1ZGlvID0gY29udGFp bmVyX29mKGRwX2F1ZGlvLCBzdHJ1Y3QgZHBfYXVkaW9fcHJpdmF0ZSwgZHBfYXVkaW8pOwotCWV4 dCA9ICZhdWRpby0+ZXh0X2F1ZGlvX2RhdGE7Ci0KLQlyYyA9IGV4dC0+aW50Zl9vcHMuYXVkaW9f bm90aWZ5KGF1ZGlvLT5leHRfcGRldiwKLQkJCUVYVF9ESVNQTEFZX1RZUEVfRFAsCi0JCQlFWFRf RElTUExBWV9DQUJMRV9ESVNDT05ORUNUKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQg dG8gbm90aWZ5IGF1ZGlvLCBlcnI9JWRcbiIsIHJjKTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcmVp bml0X2NvbXBsZXRpb24oJmF1ZGlvLT5ocGRfY29tcCk7Ci0JcmMgPSB3YWl0X2Zvcl9jb21wbGV0 aW9uX3RpbWVvdXQoJmF1ZGlvLT5ocGRfY29tcCwgSFogKiA1KTsKLQlpZiAoIXJjKSB7Ci0JCXBy X2VycigidGltZW91dFxuIik7Ci0JCXJjID0gLUVUSU1FRE9VVDsKLQkJZ290byBlbmQ7Ci0JfQot Ci0JcHJfZGVidWcoInN1Y2Nlc3NcbiIpOwotZW5kOgotCXJjID0gZXh0LT5pbnRmX29wcy5hdWRp b19jb25maWcoYXVkaW8tPmV4dF9wZGV2LAotCQkJRVhUX0RJU1BMQVlfVFlQRV9EUCwKLQkJCUVY VF9ESVNQTEFZX0NBQkxFX0RJU0NPTk5FQ1QpOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWlsZWQg dG8gY29uZmlnIGF1ZGlvLCBlcnI9JWRcbiIsIHJjKTsKLQotCWF1ZGlvLT5zZXNzaW9uX29uID0g ZmFsc2U7Ci0JYXVkaW8tPmVuZ2luZV9vbiAgPSBmYWxzZTsKLQotCXJldHVybiByYzsKLX0KLQot c3RydWN0IGRwX2F1ZGlvICpkcF9hdWRpb19nZXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl diwKLQkJCXN0cnVjdCBkcF9wYW5lbCAqcGFuZWwsCi0JCQlzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRp byAqY2F0YWxvZykKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkcF9hdWRpb19wcml2YXRlICph dWRpbzsKLQlzdHJ1Y3QgZHBfYXVkaW8gKmRwX2F1ZGlvOwotCi0JaWYgKCFwZGV2IHx8ICFwYW5l bCB8fCAhY2F0YWxvZykgewotCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwotCQlyYyA9IC1F SU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JYXVkaW8gPSBkZXZtX2t6YWxsb2MoJnBkZXYt PmRldiwgc2l6ZW9mKCphdWRpbyksIEdGUF9LRVJORUwpOwotCWlmICghYXVkaW8pIHsKLQkJcmMg PSAtRU5PTUVNOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWluaXRfY29tcGxldGlvbigmYXVkaW8t PmhwZF9jb21wKTsKLQotCWF1ZGlvLT5wZGV2ID0gcGRldjsKLQlhdWRpby0+cGFuZWwgPSBwYW5l bDsKLQlhdWRpby0+Y2F0YWxvZyA9IGNhdGFsb2c7Ci0KLQlkcF9hdWRpbyA9ICZhdWRpby0+ZHBf YXVkaW87Ci0KLQlkcF9hdWRpby0+b24gID0gZHBfYXVkaW9fb247Ci0JZHBfYXVkaW8tPm9mZiA9 IGRwX2F1ZGlvX29mZjsKLQotCXJjID0gZHBfYXVkaW9faW5pdF9leHRfZGlzcChhdWRpbyk7Ci0J aWYgKHJjKSB7Ci0JCWRldm1fa2ZyZWUoJnBkZXYtPmRldiwgYXVkaW8pOwotCQlnb3RvIGVycm9y OwotCX0KLQotCWNhdGFsb2ctPmluaXQoY2F0YWxvZyk7Ci0KLQlyZXR1cm4gZHBfYXVkaW87Ci1l cnJvcjoKLQlyZXR1cm4gRVJSX1BUUihyYyk7Ci19Ci0KLXZvaWQgZHBfYXVkaW9fcHV0KHN0cnVj dCBkcF9hdWRpbyAqZHBfYXVkaW8pCi17Ci0Jc3RydWN0IGRwX2F1ZGlvX3ByaXZhdGUgKmF1ZGlv OwotCi0JaWYgKCFkcF9hdWRpbykKLQkJcmV0dXJuOwotCi0JYXVkaW8gPSBjb250YWluZXJfb2Yo ZHBfYXVkaW8sIHN0cnVjdCBkcF9hdWRpb19wcml2YXRlLCBkcF9hdWRpbyk7Ci0KLQlkZXZtX2tm cmVlKCZhdWRpby0+cGRldi0+ZGV2LCBhdWRpbyk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2RwL2RwX2F1ZGlvLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2F1ZGlv LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllN2ZhMTYuLjAwMDAwMDAKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdWRpby5oCisrKyAvZGV2L251bGwKQEAgLTEsODEg KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg YW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0jaWZuZGVm IF9EUF9BVURJT19IXwotI2RlZmluZSBfRFBfQVVESU9fSF8KLQotI2luY2x1ZGUgPGxpbnV4L3Bs YXRmb3JtX2RldmljZS5oPgotCi0jaW5jbHVkZSAiZHBfcGFuZWwuaCIKLSNpbmNsdWRlICJkcF9j YXRhbG9nLmgiCi0KLS8qKgotICogc3RydWN0IGRwX2F1ZGlvCi0gKiBAbGFuZV9jb3VudDogbnVt YmVyIG9mIGxhbmVzIGNvbmZpZ3VyZWQgaW4gY3VycmVudCBzZXNzaW9uCi0gKiBAYndfY29kZTog bGluayByYXRlJ3MgYmFuZHdpZHRoIGNvZGUgZm9yIGN1cnJlbnQgc2Vzc2lvbgotICovCi1zdHJ1 Y3QgZHBfYXVkaW8gewotCXUzMiBsYW5lX2NvdW50OwotCXUzMiBid19jb2RlOwotCi0JLyoqCi0J ICogb24oKQotCSAqCi0JICogRW5hYmxlcyB0aGUgYXVkaW8gYnkgbm90aWZ5aW5nIHRoZSB1c2Vy IG1vZHVsZS4KLQkgKgotCSAqIEBkcF9hdWRpbzogYW4gaW5zdGFuY2Ugb2Ygc3RydWN0IGRwX2F1 ZGlvLgotCSAqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUs IDAgaW4gc3VjY2VzcyBjYXNlLgotCSAqLwotCWludCAoKm9uKShzdHJ1Y3QgZHBfYXVkaW8gKmRw X2F1ZGlvKTsKLQotCS8qKgotCSAqIG9mZigpCi0JICoKLQkgKiBEaXNhYmxlcyB0aGUgYXVkaW8g Ynkgbm90aWZ5aW5nIHRoZSB1c2VyIG1vZHVsZS4KLQkgKgotCSAqIEBkcF9hdWRpbzogYW4gaW5z dGFuY2Ugb2Ygc3RydWN0IGRwX2F1ZGlvLgotCSAqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgY29k ZSBpbiBjYXNlIG9mIGZhaWx1cmUsIDAgaW4gc3VjY2VzcyBjYXNlLgotCSAqLwotCWludCAoKm9m Zikoc3RydWN0IGRwX2F1ZGlvICpkcF9hdWRpbyk7Ci19OwotCi0vKioKLSAqIGRwX2F1ZGlvX2dl dCgpCi0gKgotICogQ3JlYXRlcyBhbmQgaW5zdGFuY2Ugb2YgZHAgYXVkaW8uCi0gKgotICogQHBk ZXY6IGNhbGxlcidzIHBsYXRmb3JtIGRldmljZSBpbnN0YW5jZS4KLSAqIEBwYW5lbDogYW4gaW5z dGFuY2Ugb2YgZHBfcGFuZWwgbW9kdWxlLgotICogQGNhdGFsb2c6IGFuIGluc3RhbmNlIG9mIGRw X2NhdGFsb2dfYXVkaW8gbW9kdWxlLgotICoKLSAqIFJldHVybnMgdGhlIGVycm9yIGNvZGUgaW4g Y2FzZSBvZiBmYWlsdXJlLCBvdGhlcndpemUKLSAqIGFuIGluc3RhbmNlIG9mIG5ld2x5IGNyZWF0 ZWQgZHBfbW9kdWxlLgotICovCi1zdHJ1Y3QgZHBfYXVkaW8gKmRwX2F1ZGlvX2dldChzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJc3RydWN0IGRwX3BhbmVsICpwYW5lbCwKLQkJCXN0 cnVjdCBkcF9jYXRhbG9nX2F1ZGlvICpjYXRhbG9nKTsKLQotLyoqCi0gKiBkcF9hdWRpb19wdXQo KQotICoKLSAqIENsZWFucyB0aGUgZHBfYXVkaW8gaW5zdGFuY2UuCi0gKgotICogQGRwX2F1ZGlv OiBhbiBpbnN0YW5jZSBvZiBkcF9hdWRpby4KLSAqLwotdm9pZCBkcF9hdWRpb19wdXQoc3RydWN0 IGRwX2F1ZGlvICpkcF9hdWRpbyk7Ci0jZW5kaWYgLyogX0RQX0FVRElPX0hfICovCi0KLQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdXguYyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHAvZHBfYXV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1YWM5OGIu LjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdXguYworKysgL2Rldi9u dWxsCkBAIC0xLDU3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTgsIFRo ZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot ICovCi0KLSNkZWZpbmUgcHJfZm10KGZtdCkJIltkcm0tZHBdICVzOiAiIGZtdCwgX19mdW5jX18K LQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KLSNpbmNsdWRlICJkcF9hdXguaCIKLQotI2Rl ZmluZSBEUF9BVVhfRU5VTV9TVFIoeCkJCSN4Ci0KLWVudW0gewotCURQX0FVWF9EQVRBX0lOREVY X1dSSVRFID0gQklUKDMxKSwKLX07Ci0KLXN0cnVjdCBkcF9hdXhfcHJpdmF0ZSB7Ci0Jc3RydWN0 IGRldmljZSAqZGV2OwotCXN0cnVjdCBkcF9hdXggZHBfYXV4OwotCXN0cnVjdCBkcF9jYXRhbG9n X2F1eCAqY2F0YWxvZzsKLQlzdHJ1Y3QgZHBfYXV4X2NmZyAqY2ZnOwotCi0Jc3RydWN0IG11dGV4 IG11dGV4OwotCXN0cnVjdCBjb21wbGV0aW9uIGNvbXA7Ci0KLQl1MzIgYXV4X2Vycm9yX251bTsK LQl1MzIgcmV0cnlfY250OwotCWJvb2wgY21kX2J1c3k7Ci0JYm9vbCBuYXRpdmU7Ci0JYm9vbCBy ZWFkOwotCWJvb2wgbm9fc2VuZF9hZGRyOwotCWJvb2wgbm9fc2VuZF9zdG9wOwotCXUzMiBvZmZz ZXQ7Ci0JdTMyIHNlZ21lbnQ7Ci0KLQlzdHJ1Y3QgZHJtX2RwX2F1eCBkcm1fYXV4OwotfTsKLQot c3RhdGljIGNoYXIgKmRwX2F1eF9nZXRfZXJyb3IodTMyIGF1eF9lcnJvcikKLXsKLQlzd2l0Y2gg KGF1eF9lcnJvcikgewotCWNhc2UgRFBfQVVYX0VSUl9OT05FOgotCQlyZXR1cm4gRFBfQVVYX0VO VU1fU1RSKERQX0FVWF9FUlJfTk9ORSk7Ci0JY2FzZSBEUF9BVVhfRVJSX0FERFI6Ci0JCXJldHVy biBEUF9BVVhfRU5VTV9TVFIoRFBfQVVYX0VSUl9BRERSKTsKLQljYXNlIERQX0FVWF9FUlJfVE9V VDoKLQkJcmV0dXJuIERQX0FVWF9FTlVNX1NUUihEUF9BVVhfRVJSX1RPVVQpOwotCWNhc2UgRFBf QVVYX0VSUl9OQUNLOgotCQlyZXR1cm4gRFBfQVVYX0VOVU1fU1RSKERQX0FVWF9FUlJfTkFDSyk7 Ci0JY2FzZSBEUF9BVVhfRVJSX0RFRkVSOgotCQlyZXR1cm4gRFBfQVVYX0VOVU1fU1RSKERQX0FV WF9FUlJfREVGRVIpOwotCWNhc2UgRFBfQVVYX0VSUl9OQUNLX0RFRkVSOgotCQlyZXR1cm4gRFBf QVVYX0VOVU1fU1RSKERQX0FVWF9FUlJfTkFDS19ERUZFUik7Ci0JZGVmYXVsdDoKLQkJcmV0dXJu ICJ1bmtub3duIjsKLQl9Ci19Ci0KLXN0YXRpYyB1MzIgZHBfYXV4X3dyaXRlKHN0cnVjdCBkcF9h dXhfcHJpdmF0ZSAqYXV4LAotCQlzdHJ1Y3QgZHJtX2RwX2F1eF9tc2cgKm1zZykKLXsKLQl1MzIg ZGF0YVs0XSwgcmVnLCBsZW47Ci0JdTggKm1zZ2RhdGEgPSBtc2ctPmJ1ZmZlcjsKLQlpbnQgY29u c3QgYXV4X2NtZF9maWZvX2xlbiA9IDEyODsKLQlpbnQgaSA9IDA7Ci0KLQlpZiAoYXV4LT5yZWFk KQotCQlsZW4gPSA0OwotCWVsc2UKLQkJbGVuID0gbXNnLT5zaXplICsgNDsKLQotCS8qCi0JICog Y21kIGZpZm8gb25seSBoYXMgZGVwdGggb2YgMTQ0IGJ5dGVzCi0JICogbGltaXQgYnVmIGxlbmd0 aCB0byAxMjggYnl0ZXMgaGVyZQotCSAqLwotCWlmIChsZW4gPiBhdXhfY21kX2ZpZm9fbGVuKSB7 Ci0JCXByX2VycigiYnVmIGxlbiBlcnJvclxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIFBh Y2sgY21kIGFuZCB3cml0ZSB0byBIVyAqLwotCWRhdGFbMF0gPSAobXNnLT5hZGRyZXNzID4+IDE2 KSAmIDB4ZjsgLyogYWRkclsxOToxNl0gKi8KLQlpZiAoYXV4LT5yZWFkKQotCQlkYXRhWzBdIHw9 ICBCSVQoNCk7IC8qIFIvVyAqLwotCi0JZGF0YVsxXSA9IChtc2ctPmFkZHJlc3MgPj4gOCkgJiAw eGZmOwkvKiBhZGRyWzE1OjhdICovCi0JZGF0YVsyXSA9IG1zZy0+YWRkcmVzcyAmIDB4ZmY7CQkv KiBhZGRyWzc6MF0gKi8KLQlkYXRhWzNdID0gKG1zZy0+c2l6ZSAtIDEpICYgMHhmZjsJLyogbGVu Wzc6MF0gKi8KLQotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQlyZWcgPSAoaSA8IDQp ID8gZGF0YVtpXSA6IG1zZ2RhdGFbaSAtIDRdOwotCQlyZWcgPSAoKHJlZykgPDwgOCkgJiAweDAw MDBmZjAwOyAvKiBpbmRleCA9IDAsIHdyaXRlICovCi0JCWlmIChpID09IDApCi0JCQlyZWcgfD0g RFBfQVVYX0RBVEFfSU5ERVhfV1JJVEU7Ci0JCWF1eC0+Y2F0YWxvZy0+ZGF0YSA9IHJlZzsKLQkJ YXV4LT5jYXRhbG9nLT53cml0ZV9kYXRhKGF1eC0+Y2F0YWxvZyk7Ci0JfQotCi0JYXV4LT5jYXRh bG9nLT5jbGVhcl90cmFucyhhdXgtPmNhdGFsb2csIGZhbHNlKTsKLQotCXJlZyA9IDA7IC8qIFRy YW5zYWN0aW9uIG51bWJlciA9PSAxICovCi0JaWYgKCFhdXgtPm5hdGl2ZSkgeyAvKiBpMmMgKi8K LQkJcmVnIHw9IEJJVCg4KTsKLQotCQlpZiAoYXV4LT5ub19zZW5kX2FkZHIpCi0JCQlyZWcgfD0g QklUKDEwKTsKLQotCQlpZiAoYXV4LT5ub19zZW5kX3N0b3ApCi0JCQlyZWcgfD0gQklUKDExKTsK LQl9Ci0KLQlyZWcgfD0gQklUKDkpOwotCWF1eC0+Y2F0YWxvZy0+ZGF0YSA9IHJlZzsKLQlhdXgt PmNhdGFsb2ctPndyaXRlX3RyYW5zKGF1eC0+Y2F0YWxvZyk7Ci0KLQlyZXR1cm4gbGVuOwotfQot Ci1zdGF0aWMgaW50IGRwX2F1eF9jbWRfZmlmb190eChzdHJ1Y3QgZHBfYXV4X3ByaXZhdGUgKmF1 eCwKLQkJc3RydWN0IGRybV9kcF9hdXhfbXNnICptc2cpCi17Ci0JdTMyIHJldCA9IDAsIGxlbiA9 IDAsIHRpbWVvdXQ7Ci0JaW50IGNvbnN0IGF1eF90aW1lb3V0X21zID0gSFovNDsKLQotCXJlaW5p dF9jb21wbGV0aW9uKCZhdXgtPmNvbXApOwotCi0JbGVuID0gZHBfYXV4X3dyaXRlKGF1eCwgbXNn KTsKLQlpZiAobGVuID09IDApIHsKLQkJcHJfZXJyKCJEUCBBVVggd3JpdGUgZmFpbGVkXG4iKTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25f dGltZW91dCgmYXV4LT5jb21wLCBhdXhfdGltZW91dF9tcyk7Ci0JaWYgKCF0aW1lb3V0KSB7Ci0J CXByX2VycigiYXV4ICVzIHRpbWVvdXRcbiIsIChhdXgtPnJlYWQgPyAicmVhZCIgOiAid3JpdGUi KSk7Ci0JCXJldHVybiAtRVRJTUVET1VUOwotCX0KLQotCWlmIChhdXgtPmF1eF9lcnJvcl9udW0g PT0gRFBfQVVYX0VSUl9OT05FKSB7Ci0JCXJldCA9IGxlbjsKLQl9IGVsc2UgewotCQlwcl9lcnJf cmF0ZWxpbWl0ZWQoImF1eCBlcnI6ICVzXG4iLAotCQkJZHBfYXV4X2dldF9lcnJvcihhdXgtPmF1 eF9lcnJvcl9udW0pKTsKLQotCQlyZXQgPSAtRUlOVkFMOwotCX0KLQotCXJldHVybiByZXQ7Ci19 Ci0KLXN0YXRpYyB2b2lkIGRwX2F1eF9jbWRfZmlmb19yeChzdHJ1Y3QgZHBfYXV4X3ByaXZhdGUg KmF1eCwKLQkJc3RydWN0IGRybV9kcF9hdXhfbXNnICptc2cpCi17Ci0JdTMyIGRhdGE7Ci0JdTgg KmRwOwotCXUzMiBpLCBhY3R1YWxfaTsKLQl1MzIgbGVuID0gbXNnLT5zaXplOwotCi0JYXV4LT5j YXRhbG9nLT5jbGVhcl90cmFucyhhdXgtPmNhdGFsb2csIHRydWUpOwotCi0JZGF0YSA9IDA7Ci0J ZGF0YSB8PSBEUF9BVVhfREFUQV9JTkRFWF9XUklURTsgLyogSU5ERVhfV1JJVEUgKi8KLQlkYXRh IHw9IEJJVCgwKTsgIC8qIHJlYWQgKi8KLQotCWF1eC0+Y2F0YWxvZy0+ZGF0YSA9IGRhdGE7Ci0J YXV4LT5jYXRhbG9nLT53cml0ZV9kYXRhKGF1eC0+Y2F0YWxvZyk7Ci0KLQlkcCA9IG1zZy0+YnVm ZmVyOwotCi0JLyogZGlzY2FyZCBmaXJzdCBieXRlICovCi0JZGF0YSA9IGF1eC0+Y2F0YWxvZy0+ cmVhZF9kYXRhKGF1eC0+Y2F0YWxvZyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsK LQkJZGF0YSA9IGF1eC0+Y2F0YWxvZy0+cmVhZF9kYXRhKGF1eC0+Y2F0YWxvZyk7Ci0JCSpkcCsr ID0gKHU4KSgoZGF0YSA+PiA4KSAmIDB4ZmYpOwotCi0JCWFjdHVhbF9pID0gKGRhdGEgPj4gMTYp ICYgMHhGRjsKLQkJaWYgKGkgIT0gYWN0dWFsX2kpCi0JCQlwcl93YXJuKCJJbmRleCBtaXNtYXRj aDogZXhwZWN0ZWQgJWQsIGZvdW5kICVkXG4iLAotCQkJCWksIGFjdHVhbF9pKTsKLQl9Ci19Ci0K LXN0YXRpYyB2b2lkIGRwX2F1eF9uYXRpdmVfaGFuZGxlcihzdHJ1Y3QgZHBfYXV4X3ByaXZhdGUg KmF1eCkKLXsKLQl1MzIgaXNyID0gYXV4LT5jYXRhbG9nLT5pc3I7Ci0KLQlpZiAoaXNyICYgRFBf SU5UUl9BVVhfSTJDX0RPTkUpCi0JCWF1eC0+YXV4X2Vycm9yX251bSA9IERQX0FVWF9FUlJfTk9O RTsKLQllbHNlIGlmIChpc3IgJiBEUF9JTlRSX1dST05HX0FERFIpCi0JCWF1eC0+YXV4X2Vycm9y X251bSA9IERQX0FVWF9FUlJfQUREUjsKLQllbHNlIGlmIChpc3IgJiBEUF9JTlRSX1RJTUVPVVQp Ci0JCWF1eC0+YXV4X2Vycm9yX251bSA9IERQX0FVWF9FUlJfVE9VVDsKLQlpZiAoaXNyICYgRFBf SU5UUl9OQUNLX0RFRkVSKQotCQlhdXgtPmF1eF9lcnJvcl9udW0gPSBEUF9BVVhfRVJSX05BQ0s7 Ci0KLQljb21wbGV0ZSgmYXV4LT5jb21wKTsKLX0KLQotc3RhdGljIHZvaWQgZHBfYXV4X2kyY19o YW5kbGVyKHN0cnVjdCBkcF9hdXhfcHJpdmF0ZSAqYXV4KQotewotCXUzMiBpc3IgPSBhdXgtPmNh dGFsb2ctPmlzcjsKLQotCWlmIChpc3IgJiBEUF9JTlRSX0FVWF9JMkNfRE9ORSkgewotCQlpZiAo aXNyICYgKERQX0lOVFJfSTJDX05BQ0sgfCBEUF9JTlRSX0kyQ19ERUZFUikpCi0JCQlhdXgtPmF1 eF9lcnJvcl9udW0gPSBEUF9BVVhfRVJSX05BQ0s7Ci0JCWVsc2UKLQkJCWF1eC0+YXV4X2Vycm9y X251bSA9IERQX0FVWF9FUlJfTk9ORTsKLQl9IGVsc2UgewotCQlpZiAoaXNyICYgRFBfSU5UUl9X Uk9OR19BRERSKQotCQkJYXV4LT5hdXhfZXJyb3JfbnVtID0gRFBfQVVYX0VSUl9BRERSOwotCQll bHNlIGlmIChpc3IgJiBEUF9JTlRSX1RJTUVPVVQpCi0JCQlhdXgtPmF1eF9lcnJvcl9udW0gPSBE UF9BVVhfRVJSX1RPVVQ7Ci0JCWlmIChpc3IgJiBEUF9JTlRSX05BQ0tfREVGRVIpCi0JCQlhdXgt PmF1eF9lcnJvcl9udW0gPSBEUF9BVVhfRVJSX05BQ0tfREVGRVI7Ci0JCWlmIChpc3IgJiBEUF9J TlRSX0kyQ19OQUNLKQotCQkJYXV4LT5hdXhfZXJyb3JfbnVtID0gRFBfQVVYX0VSUl9OQUNLOwot CQlpZiAoaXNyICYgRFBfSU5UUl9JMkNfREVGRVIpCi0JCQlhdXgtPmF1eF9lcnJvcl9udW0gPSBE UF9BVVhfRVJSX0RFRkVSOwotCX0KLQotCWNvbXBsZXRlKCZhdXgtPmNvbXApOwotfQotCi1zdGF0 aWMgdm9pZCBkcF9hdXhfaXNyKHN0cnVjdCBkcF9hdXggKmRwX2F1eCkKLXsKLQlzdHJ1Y3QgZHBf YXV4X3ByaXZhdGUgKmF1eDsKLQotCWlmICghZHBfYXV4KSB7Ci0JCXByX2VycigiaW52YWxpZCBp bnB1dFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlhdXggPSBjb250YWluZXJfb2YoZHBfYXV4LCBz dHJ1Y3QgZHBfYXV4X3ByaXZhdGUsIGRwX2F1eCk7Ci0KLQlhdXgtPmNhdGFsb2ctPmdldF9pcnEo YXV4LT5jYXRhbG9nLCBhdXgtPmNtZF9idXN5KTsKLQotCWlmICghYXV4LT5jbWRfYnVzeSkKLQkJ cmV0dXJuOwotCi0JaWYgKGF1eC0+bmF0aXZlKQotCQlkcF9hdXhfbmF0aXZlX2hhbmRsZXIoYXV4 KTsKLQllbHNlCi0JCWRwX2F1eF9pMmNfaGFuZGxlcihhdXgpOwotfQotCi1zdGF0aWMgdm9pZCBk cF9hdXhfcmVjb25maWcoc3RydWN0IGRwX2F1eCAqZHBfYXV4KQotewotCXN0cnVjdCBkcF9hdXhf cHJpdmF0ZSAqYXV4OwotCi0JaWYgKCFkcF9hdXgpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0 XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWF1eCA9IGNvbnRhaW5lcl9vZihkcF9hdXgsIHN0cnVj dCBkcF9hdXhfcHJpdmF0ZSwgZHBfYXV4KTsKLQotCWF1eC0+Y2F0YWxvZy0+dXBkYXRlX2F1eF9j ZmcoYXV4LT5jYXRhbG9nLAotCQkJYXV4LT5jZmcsIFBIWV9BVVhfQ0ZHMSk7Ci0JYXV4LT5jYXRh bG9nLT5yZXNldChhdXgtPmNhdGFsb2cpOwotfQotCi1zdGF0aWMgdm9pZCBkcF9hdXhfdXBkYXRl X29mZnNldF9hbmRfc2VnbWVudChzdHJ1Y3QgZHBfYXV4X3ByaXZhdGUgKmF1eCwKLQkJc3RydWN0 IGRybV9kcF9hdXhfbXNnICppbnB1dF9tc2cpCi17Ci0JdTMyIGNvbnN0IGVkaWRfYWRkcmVzcyA9 IDB4NTA7Ci0JdTMyIGNvbnN0IHNlZ21lbnRfYWRkcmVzcyA9IDB4MzA7Ci0JYm9vbCBpMmNfcmVh ZCA9IGlucHV0X21zZy0+cmVxdWVzdCAmCi0JCShEUF9BVVhfSTJDX1JFQUQgJiBEUF9BVVhfTkFU SVZFX1JFQUQpOwotCXU4ICpkYXRhID0gTlVMTDsKLQotCWlmIChhdXgtPm5hdGl2ZSB8fCBpMmNf cmVhZCB8fCAoKGlucHV0X21zZy0+YWRkcmVzcyAhPSBlZGlkX2FkZHJlc3MpICYmCi0JCShpbnB1 dF9tc2ctPmFkZHJlc3MgIT0gc2VnbWVudF9hZGRyZXNzKSkpCi0JCXJldHVybjsKLQotCi0JZGF0 YSA9IGlucHV0X21zZy0+YnVmZmVyOwotCWlmIChpbnB1dF9tc2ctPmFkZHJlc3MgPT0gc2VnbWVu dF9hZGRyZXNzKQotCQlhdXgtPnNlZ21lbnQgPSAqZGF0YTsKLQllbHNlCi0JCWF1eC0+b2Zmc2V0 ID0gKmRhdGE7Ci19Ci0KLS8qKgotICogZHBfYXV4X3RyYW5zZmVyX2hlbHBlcigpIC0gaGVscGVy IGZ1bmN0aW9uIGZvciBFRElEIHJlYWQgdHJhbnNhY3Rpb25zCi0gKgotICogQGF1eDogRFAgQVVY IHByaXZhdGUgc3RydWN0dXJlCi0gKiBAaW5wdXRfbXNnOiBpbnB1dCBtZXNzYWdlIGZyb20gRFJN IHVwc3RyZWFtIEFQSXMKLSAqCi0gKiByZXR1cm46IHZvaWQKLSAqCi0gKiBUaGlzIGhlbHBlciBm dW5jdGlvbiBpcyB1c2VkIHRvIGZpeCBFRElEIHJlYWRzIGZvciBub24tY29tcGxpYW50Ci0gKiBz aW5rcyB0aGF0IGRvIG5vdCBoYW5kbGUgdGhlIGkyYyBtaWRkbGUtb2YtdHJhbnNhY3Rpb24gZmxh ZyBjb3JyZWN0bHkuCi0gKi8KLXN0YXRpYyB2b2lkIGRwX2F1eF90cmFuc2Zlcl9oZWxwZXIoc3Ry dWN0IGRwX2F1eF9wcml2YXRlICphdXgsCi0JCXN0cnVjdCBkcm1fZHBfYXV4X21zZyAqaW5wdXRf bXNnKQotewotCXN0cnVjdCBkcm1fZHBfYXV4X21zZyBoZWxwZXJfbXNnOwotCXUzMiBjb25zdCBt ZXNzYWdlX3NpemUgPSAweDEwOwotCXUzMiBjb25zdCBzZWdtZW50X2FkZHJlc3MgPSAweDMwOwot CWJvb2wgaTJjX21vdCA9IGlucHV0X21zZy0+cmVxdWVzdCAmIERQX0FVWF9JMkNfTU9UOwotCWJv b2wgaTJjX3JlYWQgPSBpbnB1dF9tc2ctPnJlcXVlc3QgJgotCQkoRFBfQVVYX0kyQ19SRUFEICYg RFBfQVVYX05BVElWRV9SRUFEKTsKLQotCWlmICghaTJjX21vdCB8fCAhaTJjX3JlYWQgfHwgKGlu cHV0X21zZy0+c2l6ZSA9PSAwKSkKLQkJcmV0dXJuOwotCi0JYXV4LT5yZWFkID0gZmFsc2U7Ci0J YXV4LT5jbWRfYnVzeSA9IHRydWU7Ci0JYXV4LT5ub19zZW5kX2FkZHIgPSB0cnVlOwotCWF1eC0+ bm9fc2VuZF9zdG9wID0gdHJ1ZTsKLQotCS8qCi0JICogU2VuZCB0aGUgc2VnbWVudCBhZGRyZXNz IGZvciBldmVyeSBpMmMgcmVhZCBpbiB3aGljaCB0aGUKLQkgKiBtaWRkbGUtb2YtdHJhbmFjdGlv biBmbGFnIGlzIHNldC4gVGhpcyBpcyByZXF1aXJlZCB0byBzdXBwb3J0IEVESUQKLQkgKiByZWFk cyBvZiBtb3JlIHRoYW4gMiBibG9ja3MgYXMgdGhlIHNlZ21lbnQgYWRkcmVzcyBpcyByZXNldCB0 byAwCi0JICogc2luY2Ugd2UgYXJlIG92ZXJyaWRpbmcgdGhlIG1pZGRsZS1vZi10cmFuc2FjdGlv biBmbGFnIGZvciByZWFkCi0JICogdHJhbnNhY3Rpb25zLgotCSAqLwotCW1lbXNldCgmaGVscGVy X21zZywgMCwgc2l6ZW9mKGhlbHBlcl9tc2cpKTsKLQloZWxwZXJfbXNnLmFkZHJlc3MgPSBzZWdt ZW50X2FkZHJlc3M7Ci0JaGVscGVyX21zZy5idWZmZXIgPSAmYXV4LT5zZWdtZW50OwotCWhlbHBl cl9tc2cuc2l6ZSA9IDE7Ci0JZHBfYXV4X2NtZF9maWZvX3R4KGF1eCwgJmhlbHBlcl9tc2cpOwot Ci0JLyoKLQkgKiBTZW5kIHRoZSBvZmZzZXQgYWRkcmVzcyBmb3IgZXZlcnkgaTJjIHJlYWQgaW4g d2hpY2ggdGhlCi0JICogbWlkZGxlLW9mLXRyYW5zYWN0aW9uIGZsYWcgaXMgc2V0LiBUaGlzIHdp bGwgZW5zdXJlIHRoYXQgdGhlIHNpbmsKLQkgKiB3aWxsIHVwZGF0ZSBpdHMgcmVhZCBwb2ludGVy IGFuZCByZXR1cm4gdGhlIGNvcnJlY3QgcG9ydGlvbiBvZiB0aGUKLQkgKiBFRElEIGJ1ZmZlciBp biB0aGUgc3Vic2VxdWVudCBpMmMgcmVhZCB0cmFzbnRpb24gdHJpZ2dlcmVkIGluIHRoZQotCSAq IG5hdGl2ZSBBVVggdHJhbnNmZXIgZnVuY3Rpb24uCi0JICovCi0JbWVtc2V0KCZoZWxwZXJfbXNn LCAwLCBzaXplb2YoaGVscGVyX21zZykpOwotCWhlbHBlcl9tc2cuYWRkcmVzcyA9IGlucHV0X21z Zy0+YWRkcmVzczsKLQloZWxwZXJfbXNnLmJ1ZmZlciA9ICZhdXgtPm9mZnNldDsKLQloZWxwZXJf bXNnLnNpemUgPSAxOwotCWRwX2F1eF9jbWRfZmlmb190eChhdXgsICZoZWxwZXJfbXNnKTsKLQlh dXgtPm9mZnNldCArPSBtZXNzYWdlX3NpemU7Ci0KLQlpZiAoYXV4LT5vZmZzZXQgPT0gMHg4MCB8 fCBhdXgtPm9mZnNldCA9PSAweDEwMCkKLQkJYXV4LT5zZWdtZW50ID0gMHgwOyAvKiByZXNldCBz ZWdtZW50IGF0IGVuZCBvZiBibG9jayAqLwotfQotCi0vKgotICogVGhpcyBmdW5jdGlvbiBkb2Vz IHRoZSByZWFsIGpvYiB0byBwcm9jZXNzIGFuIEFVWCB0cmFuc2FjdGlvbi4KLSAqIEl0IHdpbGwg Y2FsbCBhdXhfcmVzZXQoKSBmdW5jdGlvbiB0byByZXNldCB0aGUgQVVYIGNoYW5uZWwsCi0gKiBp ZiB0aGUgd2FpdGluZyBpcyB0aW1lb3V0LgotICovCi1zdGF0aWMgc3NpemVfdCBkcF9hdXhfdHJh bnNmZXIoc3RydWN0IGRybV9kcF9hdXggKmRybV9hdXgsCi0JCXN0cnVjdCBkcm1fZHBfYXV4X21z ZyAqbXNnKQotewotCXNzaXplX3QgcmV0OwotCWludCBjb25zdCBhdXhfY21kX25hdGl2ZV9tYXgg PSAxNjsKLQlpbnQgY29uc3QgYXV4X2NtZF9pMmNfbWF4ID0gMTI4OwotCWludCBjb25zdCByZXRy eV9jb3VudCA9IDU7Ci0Jc3RydWN0IGRwX2F1eF9wcml2YXRlICphdXggPSBjb250YWluZXJfb2Yo ZHJtX2F1eCwKLQkJc3RydWN0IGRwX2F1eF9wcml2YXRlLCBkcm1fYXV4KTsKLQotCW11dGV4X2xv Y2soJmF1eC0+bXV0ZXgpOwotCi0JYXV4LT5uYXRpdmUgPSBtc2ctPnJlcXVlc3QgJiAoRFBfQVVY X05BVElWRV9XUklURSAmIERQX0FVWF9OQVRJVkVfUkVBRCk7Ci0KLQkvKiBJZ25vcmUgYWRkcmVz cyBvbmx5IG1lc3NhZ2UgKi8KLQlpZiAoKG1zZy0+c2l6ZSA9PSAwKSB8fCAobXNnLT5idWZmZXIg PT0gTlVMTCkpIHsKLQkJbXNnLT5yZXBseSA9IGF1eC0+bmF0aXZlID8KLQkJCURQX0FVWF9OQVRJ VkVfUkVQTFlfQUNLIDogRFBfQVVYX0kyQ19SRVBMWV9BQ0s7Ci0JCXJldCA9IG1zZy0+c2l6ZTsK LQkJZ290byB1bmxvY2tfZXhpdDsKLQl9Ci0KLQkvKiBtc2cgc2FuaXR5IGNoZWNrICovCi0JaWYg KChhdXgtPm5hdGl2ZSAmJiAobXNnLT5zaXplID4gYXV4X2NtZF9uYXRpdmVfbWF4KSkgfHwKLQkJ KG1zZy0+c2l6ZSA+IGF1eF9jbWRfaTJjX21heCkpIHsKLQkJcHJfZXJyKCIlczogaW52YWxpZCBt c2c6IHNpemUoJXp1KSwgcmVxdWVzdCgleClcbiIsCi0JCQlfX2Z1bmNfXywgbXNnLT5zaXplLCBt c2ctPnJlcXVlc3QpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIHVubG9ja19leGl0OwotCX0K LQotCWRwX2F1eF91cGRhdGVfb2Zmc2V0X2FuZF9zZWdtZW50KGF1eCwgbXNnKTsKLQlkcF9hdXhf dHJhbnNmZXJfaGVscGVyKGF1eCwgbXNnKTsKLQotCWF1eC0+cmVhZCA9IG1zZy0+cmVxdWVzdCAm IChEUF9BVVhfSTJDX1JFQUQgJiBEUF9BVVhfTkFUSVZFX1JFQUQpOwotCWF1eC0+Y21kX2J1c3kg PSB0cnVlOwotCi0JaWYgKGF1eC0+cmVhZCkgewotCQlhdXgtPm5vX3NlbmRfYWRkciA9IHRydWU7 Ci0JCWF1eC0+bm9fc2VuZF9zdG9wID0gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJYXV4LT5ub19zZW5k X2FkZHIgPSB0cnVlOwotCQlhdXgtPm5vX3NlbmRfc3RvcCA9IHRydWU7Ci0JfQotCi0JcmV0ID0g ZHBfYXV4X2NtZF9maWZvX3R4KGF1eCwgbXNnKTsKLQlpZiAoKHJldCA8IDApICYmIGF1eC0+bmF0 aXZlKSB7Ci0JCWF1eC0+cmV0cnlfY250Kys7Ci0JCWlmICghKGF1eC0+cmV0cnlfY250ICUgcmV0 cnlfY291bnQpKQotCQkJYXV4LT5jYXRhbG9nLT51cGRhdGVfYXV4X2NmZyhhdXgtPmNhdGFsb2cs Ci0JCQkJYXV4LT5jZmcsIFBIWV9BVVhfQ0ZHMSk7Ci0JCWF1eC0+Y2F0YWxvZy0+cmVzZXQoYXV4 LT5jYXRhbG9nKTsKLQkJZ290byB1bmxvY2tfZXhpdDsKLQl9IGVsc2UgaWYgKHJldCA8IDApIHsK LQkJZ290byB1bmxvY2tfZXhpdDsKLQl9Ci0KLQlpZiAoYXV4LT5hdXhfZXJyb3JfbnVtID09IERQ X0FVWF9FUlJfTk9ORSkgewotCQlpZiAoYXV4LT5yZWFkKQotCQkJZHBfYXV4X2NtZF9maWZvX3J4 KGF1eCwgbXNnKTsKLQotCQltc2ctPnJlcGx5ID0gYXV4LT5uYXRpdmUgPwotCQkJRFBfQVVYX05B VElWRV9SRVBMWV9BQ0sgOiBEUF9BVVhfSTJDX1JFUExZX0FDSzsKLQl9IGVsc2UgewotCQkvKiBS ZXBseSBkZWZlciB0byByZXRyeSAqLwotCQltc2ctPnJlcGx5ID0gYXV4LT5uYXRpdmUgPwotCQkJ RFBfQVVYX05BVElWRV9SRVBMWV9ERUZFUiA6IERQX0FVWF9JMkNfUkVQTFlfREVGRVI7Ci0JfQot Ci0JLyogUmV0dXJuIHJlcXVlc3RlZCBzaXplIGZvciBzdWNjZXNzIG9yIHJldHJ5ICovCi0JcmV0 ID0gbXNnLT5zaXplOwotCWF1eC0+cmV0cnlfY250ID0gMDsKLQotdW5sb2NrX2V4aXQ6Ci0JYXV4 LT5jbWRfYnVzeSA9IGZhbHNlOwotCW11dGV4X3VubG9jaygmYXV4LT5tdXRleCk7Ci0JcmV0dXJu IHJldDsKLX0KLQotc3RhdGljIHZvaWQgZHBfYXV4X3Jlc2V0X3BoeV9jb25maWdfaW5kaWNlcyhz dHJ1Y3QgZHBfYXV4X2NmZyAqYXV4X2NmZykKLXsKLQlpbnQgaSA9IDA7Ci0KLQlmb3IgKGkgPSAw OyBpIDwgUEhZX0FVWF9DRkdfTUFYOyBpKyspCi0JCWF1eF9jZmdbaV0uY3VycmVudF9pbmRleCA9 IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2F1eF9pbml0KHN0cnVjdCBkcF9hdXggKmRwX2F1eCwg c3RydWN0IGRwX2F1eF9jZmcgKmF1eF9jZmcpCi17Ci0Jc3RydWN0IGRwX2F1eF9wcml2YXRlICph dXg7Ci0KLQlpZiAoIWRwX2F1eCB8fCAhYXV4X2NmZykgewotCQlwcl9lcnIoImludmFsaWQgaW5w dXRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JYXV4ID0gY29udGFpbmVyX29mKGRwX2F1eCwgc3Ry dWN0IGRwX2F1eF9wcml2YXRlLCBkcF9hdXgpOwotCi0JYXV4LT5jYXRhbG9nLT5yZXNldChhdXgt PmNhdGFsb2cpOwotCWF1eC0+Y2F0YWxvZy0+ZW5hYmxlKGF1eC0+Y2F0YWxvZywgdHJ1ZSk7Ci0J YXV4LT5yZXRyeV9jbnQgPSAwOwotCWRwX2F1eF9yZXNldF9waHlfY29uZmlnX2luZGljZXMoYXV4 X2NmZyk7Ci0JYXV4LT5jYXRhbG9nLT5zZXR1cChhdXgtPmNhdGFsb2csIGF1eF9jZmcpOwotfQot Ci1zdGF0aWMgdm9pZCBkcF9hdXhfZGVpbml0KHN0cnVjdCBkcF9hdXggKmRwX2F1eCkKLXsKLQlz dHJ1Y3QgZHBfYXV4X3ByaXZhdGUgKmF1eDsKLQotCWlmICghZHBfYXV4KSB7Ci0JCXByX2Vycigi aW52YWxpZCBpbnB1dFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlhdXggPSBjb250YWluZXJfb2Yo ZHBfYXV4LCBzdHJ1Y3QgZHBfYXV4X3ByaXZhdGUsIGRwX2F1eCk7Ci0KLQlhdXgtPmNhdGFsb2ct PmVuYWJsZShhdXgtPmNhdGFsb2csIGZhbHNlKTsKLX0KLQotc3RhdGljIGludCBkcF9hdXhfcmVn aXN0ZXIoc3RydWN0IGRwX2F1eCAqZHBfYXV4KQotewotCXN0cnVjdCBkcF9hdXhfcHJpdmF0ZSAq YXV4OwotCWludCByZXQgPSAwOwotCi0JaWYgKCFkcF9hdXgpIHsKLQkJcHJfZXJyKCJpbnZhbGlk IGlucHV0XG4iKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBleGl0OwotCX0KLQotCWF1eCA9 IGNvbnRhaW5lcl9vZihkcF9hdXgsIHN0cnVjdCBkcF9hdXhfcHJpdmF0ZSwgZHBfYXV4KTsKLQot CWF1eC0+ZHJtX2F1eC5uYW1lID0gImRwdV9kcF9hdXgiOwotCWF1eC0+ZHJtX2F1eC5kZXYgPSBh dXgtPmRldjsKLQlhdXgtPmRybV9hdXgudHJhbnNmZXIgPSBkcF9hdXhfdHJhbnNmZXI7Ci0JcmV0 ID0gZHJtX2RwX2F1eF9yZWdpc3RlcigmYXV4LT5kcm1fYXV4KTsKLQlpZiAocmV0KSB7Ci0JCXBy X2VycigiJXM6IGZhaWxlZCB0byByZWdpc3RlciBkcm0gYXV4OiAlZFxuIiwgX19mdW5jX18sIHJl dCk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JZHBfYXV4LT5kcm1fYXV4ID0gJmF1eC0+ZHJtX2F1eDsK LWV4aXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgZHBfYXV4X2RlcmVnaXN0ZXIo c3RydWN0IGRwX2F1eCAqZHBfYXV4KQotewotCXN0cnVjdCBkcF9hdXhfcHJpdmF0ZSAqYXV4Owot Ci0JaWYgKCFkcF9hdXgpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKLQkJcmV0dXJu OwotCX0KLQotCWF1eCA9IGNvbnRhaW5lcl9vZihkcF9hdXgsIHN0cnVjdCBkcF9hdXhfcHJpdmF0 ZSwgZHBfYXV4KTsKLQlkcm1fZHBfYXV4X3VucmVnaXN0ZXIoJmF1eC0+ZHJtX2F1eCk7Ci19Ci0K LXN0cnVjdCBkcF9hdXggKmRwX2F1eF9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHBf Y2F0YWxvZ19hdXggKmNhdGFsb2csCi0JCXN0cnVjdCBkcF9hdXhfY2ZnICphdXhfY2ZnKQotewot CWludCByYyA9IDA7Ci0Jc3RydWN0IGRwX2F1eF9wcml2YXRlICphdXg7Ci0Jc3RydWN0IGRwX2F1 eCAqZHBfYXV4OwotCi0JaWYgKCFjYXRhbG9nIHx8ICFhdXhfY2ZnKSB7Ci0JCXByX2VycigiaW52 YWxpZCBpbnB1dFxuIik7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlh dXggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmF1eCksIEdGUF9LRVJORUwpOwotCWlmICgh YXV4KSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpbml0X2NvbXBs ZXRpb24oJmF1eC0+Y29tcCk7Ci0JYXV4LT5jbWRfYnVzeSA9IGZhbHNlOwotCW11dGV4X2luaXQo JmF1eC0+bXV0ZXgpOwotCi0JYXV4LT5kZXYgPSBkZXY7Ci0JYXV4LT5jYXRhbG9nID0gY2F0YWxv ZzsKLQlhdXgtPmNmZyA9IGF1eF9jZmc7Ci0JZHBfYXV4ID0gJmF1eC0+ZHBfYXV4OwotCWF1eC0+ cmV0cnlfY250ID0gMDsKLQotCWRwX2F1eC0+aXNyICAgICA9IGRwX2F1eF9pc3I7Ci0JZHBfYXV4 LT5pbml0ICAgID0gZHBfYXV4X2luaXQ7Ci0JZHBfYXV4LT5kZWluaXQgID0gZHBfYXV4X2RlaW5p dDsKLQlkcF9hdXgtPmRybV9hdXhfcmVnaXN0ZXIgPSBkcF9hdXhfcmVnaXN0ZXI7Ci0JZHBfYXV4 LT5kcm1fYXV4X2RlcmVnaXN0ZXIgPSBkcF9hdXhfZGVyZWdpc3RlcjsKLQlkcF9hdXgtPnJlY29u ZmlnID0gZHBfYXV4X3JlY29uZmlnOwotCi0JcmV0dXJuIGRwX2F1eDsKLWVycm9yOgotCXJldHVy biBFUlJfUFRSKHJjKTsKLX0KLQotdm9pZCBkcF9hdXhfcHV0KHN0cnVjdCBkcF9hdXggKmRwX2F1 eCkKLXsKLQlzdHJ1Y3QgZHBfYXV4X3ByaXZhdGUgKmF1eDsKLQotCWlmICghZHBfYXV4KQotCQly ZXR1cm47Ci0KLQlhdXggPSBjb250YWluZXJfb2YoZHBfYXV4LCBzdHJ1Y3QgZHBfYXV4X3ByaXZh dGUsIGRwX2F1eCk7Ci0KLQltdXRleF9kZXN0cm95KCZhdXgtPm11dGV4KTsKLQotCWRldm1fa2Zy ZWUoYXV4LT5kZXYsIGF1eCk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rw L2RwX2F1eC5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdXguaApkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggZjUyNzdjNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2RwL2RwX2F1eC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENv cHlyaWdodCAoYykgMjAxMi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNp b24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0g KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0jaWZuZGVmIF9EUF9BVVhfSF8KLSNkZWZp bmUgX0RQX0FVWF9IXwotCi0jaW5jbHVkZSAiZHBfY2F0YWxvZy5oIgotI2luY2x1ZGUgPGRybS9k cm1fZHBfaGVscGVyLmg+Ci0KLWVudW0gZHBfYXV4X2Vycm9yIHsKLQlEUF9BVVhfRVJSX05PTkUJ PSAwLAotCURQX0FVWF9FUlJfQUREUgk9IC0xLAotCURQX0FVWF9FUlJfVE9VVAk9IC0yLAotCURQ X0FVWF9FUlJfTkFDSwk9IC0zLAotCURQX0FVWF9FUlJfREVGRVIJPSAtNCwKLQlEUF9BVVhfRVJS X05BQ0tfREVGRVIJPSAtNSwKLX07Ci0KLXN0cnVjdCBkcF9hdXggewotCXN0cnVjdCBkcm1fZHBf YXV4ICpkcm1fYXV4OwotCWludCAoKmRybV9hdXhfcmVnaXN0ZXIpKHN0cnVjdCBkcF9hdXggKmF1 eCk7Ci0Jdm9pZCAoKmRybV9hdXhfZGVyZWdpc3Rlcikoc3RydWN0IGRwX2F1eCAqYXV4KTsKLQl2 b2lkICgqaXNyKShzdHJ1Y3QgZHBfYXV4ICphdXgpOwotCXZvaWQgKCppbml0KShzdHJ1Y3QgZHBf YXV4ICphdXgsIHN0cnVjdCBkcF9hdXhfY2ZnICphdXhfY2ZnKTsKLQl2b2lkICgqZGVpbml0KShz dHJ1Y3QgZHBfYXV4ICphdXgpOwotCXZvaWQgKCpyZWNvbmZpZykoc3RydWN0IGRwX2F1eCAqYXV4 KTsKLX07Ci0KLXN0cnVjdCBkcF9hdXggKmRwX2F1eF9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmNhdGFsb2csCi0JCXN0cnVjdCBkcF9hdXhfY2ZnICphdXhf Y2ZnKTsKLXZvaWQgZHBfYXV4X3B1dChzdHJ1Y3QgZHBfYXV4ICphdXgpOwotCi0jZW5kaWYgLypf X0RQX0FVWF9IXyovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2NhdGFs b2cuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5jCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCA4NDIxYTEyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZHAvZHBfY2F0YWxvZy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMyMCArMCwwIEBACi0vKgot ICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkg dmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgot ICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNkZWZpbmUgcHJfZm10KGZtdCkJ Iltkcm0tZHBdICVzOiAiIGZtdCwgX19mdW5jX18KLQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+ Ci0jaW5jbHVkZSA8ZHJtL2RybV9kcF9oZWxwZXIuaD4KLQotI2luY2x1ZGUgImRwX2NhdGFsb2cu aCIKLSNpbmNsdWRlICJkcF9yZWcuaCIKLQotI2RlZmluZSBEUF9HRVRfTVNCKHgpCSh4ID4+IDgp Ci0jZGVmaW5lIERQX0dFVF9MU0IoeCkJKHggJiAweGZmKQotCi0jZGVmaW5lIGRwX3JlYWQob2Zm c2V0KSByZWFkbF9yZWxheGVkKChvZmZzZXQpKQotI2RlZmluZSBkcF93cml0ZShvZmZzZXQsIGRh dGEpIHdyaXRlbF9yZWxheGVkKChkYXRhKSwgKG9mZnNldCkpCi0KLSNkZWZpbmUgZHBfY2F0YWxv Z19nZXRfcHJpdih4KSB7IFwKLQlzdHJ1Y3QgZHBfY2F0YWxvZyAqZHBfY2F0YWxvZzsgXAotCWRw X2NhdGFsb2cgPSBjb250YWluZXJfb2YoeCwgc3RydWN0IGRwX2NhdGFsb2csIHgpOyBcCi0JY2F0 YWxvZyA9IGNvbnRhaW5lcl9vZihkcF9jYXRhbG9nLCBzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRl LCBcCi0JCQkJZHBfY2F0YWxvZyk7IFwKLX0KLQotI2RlZmluZSBEUF9JTlRFUlJVUFRfU1RBVFVT MSBcCi0JKERQX0lOVFJfQVVYX0kyQ19ET05FfCBcCi0JRFBfSU5UUl9XUk9OR19BRERSIHwgRFBf SU5UUl9USU1FT1VUIHwgXAotCURQX0lOVFJfTkFDS19ERUZFUiB8IERQX0lOVFJfV1JPTkdfREFU QV9DTlQgfCBcCi0JRFBfSU5UUl9JMkNfTkFDSyB8IERQX0lOVFJfSTJDX0RFRkVSIHwgXAotCURQ X0lOVFJfUExMX1VOTE9DS0VEIHwgRFBfSU5UUl9BVVhfRVJST1IpCi0KLSNkZWZpbmUgRFBfSU5U Ul9NQVNLMQkJKERQX0lOVEVSUlVQVF9TVEFUVVMxIDw8IDIpCi0KLSNkZWZpbmUgRFBfSU5URVJS VVBUX1NUQVRVUzIgXAotCShEUF9JTlRSX1JFQURZX0ZPUl9WSURFTyB8IERQX0lOVFJfSURMRV9Q QVRURVJOX1NFTlQgfCBcCi0JRFBfSU5UUl9GUkFNRV9FTkQgfCBEUF9JTlRSX0NSQ19VUERBVEVE KQotCi0jZGVmaW5lIERQX0lOVFJfTUFTSzIJCShEUF9JTlRFUlJVUFRfU1RBVFVTMiA8PCAyKQot Ci1zdGF0aWMgdTggY29uc3Qgdm1fcHJlX2VtcGhhc2lzWzRdWzRdID0gewotCXsweDAwLCAweDBC LCAweDEyLCAweEZGfSwgICAgICAgLyogcGUwLCAwIGRiICovCi0JezB4MDAsIDB4MEEsIDB4MTIs IDB4RkZ9LCAgICAgICAvKiBwZTEsIDMuNSBkYiAqLwotCXsweDAwLCAweDBDLCAweEZGLCAweEZG fSwgICAgICAgLyogcGUyLCA2LjAgZGIgKi8KLQl7MHhGRiwgMHhGRiwgMHhGRiwgMHhGRn0gICAg ICAgIC8qIHBlMywgOS41IGRiICovCi19OwotCi0vKiB2b2x0YWdlIHN3aW5nLCAwLjJ2IGFuZCAx LjB2IGFyZSBub3Qgc3VwcG9ydCAqLwotc3RhdGljIHU4IGNvbnN0IHZtX3ZvbHRhZ2Vfc3dpbmdb NF1bNF0gPSB7Ci0JezB4MDcsIDB4MEYsIDB4MTQsIDB4RkZ9LCAvKiBzdzAsIDAuNHYgICovCi0J ezB4MTEsIDB4MUQsIDB4MUYsIDB4RkZ9LCAvKiBzdzEsIDAuNiB2ICovCi0JezB4MTgsIDB4MUYs IDB4RkYsIDB4RkZ9LCAvKiBzdzEsIDAuOCB2ICovCi0JezB4RkYsIDB4RkYsIDB4RkYsIDB4RkZ9 ICAvKiBzdzEsIDEuMiB2LCBvcHRpb25hbCAqLwotfTsKLQotLyogYXVkaW8gcmVsYXRlZCBjYXRh bG9nIGZ1bmN0aW9ucyAqLwotc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSB7Ci0Jc3RydWN0IGRl dmljZSAqZGV2OwotCXN0cnVjdCBkcF9pbyAqaW87Ci0KLQl1MzIgKCphdWRpb19tYXApW0RQX0FV RElPX1NEUF9IRUFERVJfTUFYXTsKLQlzdHJ1Y3QgZHBfY2F0YWxvZyBkcF9jYXRhbG9nOwotfTsK LQotLyogYXV4IHJlbGF0ZWQgY2F0YWxvZyBmdW5jdGlvbnMgKi8KLXN0YXRpYyB1MzIgZHBfY2F0 YWxvZ19hdXhfcmVhZF9kYXRhKHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4KQotewotCXN0cnVj dCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlOwotCi0J aWYgKCFhdXgpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKLQkJZ290byBlbmQ7Ci0J fQotCi0JZHBfY2F0YWxvZ19nZXRfcHJpdihhdXgpOwotCWJhc2UgPSBjYXRhbG9nLT5pby0+Y3Ry bF9pby5iYXNlOwotCi0JcmV0dXJuIGRwX3JlYWQoYmFzZSArIERQX0FVWF9EQVRBKTsKLWVuZDoK LQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkcF9jYXRhbG9nX2F1eF93cml0ZV9kYXRhKHN0 cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRwX2Nh dGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKLQl2b2lkIF9faW9tZW0gKmJhc2U7Ci0KLQlpZiAoIWF1 eCkgewotCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdv dG8gZW5kOwotCX0KLQotCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXV4KTsKLQliYXNlID0gY2F0YWxv Zy0+aW8tPmN0cmxfaW8uYmFzZTsKLQotCWRwX3dyaXRlKGJhc2UgKyBEUF9BVVhfREFUQSwgYXV4 LT5kYXRhKTsKLWVuZDoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfY2F0YWxvZ19h dXhfd3JpdGVfdHJhbnMoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgpCi17Ci0JaW50IHJjID0g MDsKLQlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwotCXZvaWQgX19pb21lbSAq YmFzZTsKLQotCWlmICghYXV4KSB7Ci0JCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Ci0JCXJj ID0gLUVJTlZBTDsKLQkJZ290byBlbmQ7Ci0JfQotCi0JZHBfY2F0YWxvZ19nZXRfcHJpdihhdXgp OwotCWJhc2UgPSBjYXRhbG9nLT5pby0+Y3RybF9pby5iYXNlOwotCi0JZHBfd3JpdGUoYmFzZSAr IERQX0FVWF9UUkFOU19DVFJMLCBhdXgtPmRhdGEpOwotZW5kOgotCXJldHVybiByYzsKLX0KLQot c3RhdGljIGludCBkcF9jYXRhbG9nX2F1eF9jbGVhcl90cmFucyhzdHJ1Y3QgZHBfY2F0YWxvZ19h dXggKmF1eCwgYm9vbCByZWFkKQotewotCWludCByYyA9IDA7Ci0JdTMyIGRhdGEgPSAwOwotCXN0 cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlOwot Ci0JaWYgKCFhdXgpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKLQkJcmMgPSAtRUlO VkFMOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlkcF9jYXRhbG9nX2dldF9wcml2KGF1eCk7Ci0JYmFz ZSA9IGNhdGFsb2ctPmlvLT5jdHJsX2lvLmJhc2U7Ci0KLQlpZiAocmVhZCkgewotCQlkYXRhID0g ZHBfcmVhZChiYXNlICsgRFBfQVVYX1RSQU5TX0NUUkwpOwotCQlkYXRhICY9IH5CSVQoOSk7Ci0J CWRwX3dyaXRlKGJhc2UgKyBEUF9BVVhfVFJBTlNfQ1RSTCwgZGF0YSk7Ci0JfSBlbHNlIHsKLQkJ ZHBfd3JpdGUoYmFzZSArIERQX0FVWF9UUkFOU19DVFJMLCAwKTsKLQl9Ci1lbmQ6Ci0JcmV0dXJu IHJjOwotfQotCi1zdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2F1eF9yZXNldChzdHJ1Y3QgZHBfY2F0 YWxvZ19hdXggKmF1eCkKLXsKLQl1MzIgYXV4X2N0cmw7Ci0Jc3RydWN0IGRwX2NhdGFsb2dfcHJp dmF0ZSAqY2F0YWxvZzsKLQl2b2lkIF9faW9tZW0gKmJhc2U7Ci0KLQlpZiAoIWF1eCkgewotCQlw cl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZHBfY2F0YWxvZ19n ZXRfcHJpdihhdXgpOwotCWJhc2UgPSBjYXRhbG9nLT5pby0+Y3RybF9pby5iYXNlOwotCi0JYXV4 X2N0cmwgPSBkcF9yZWFkKGJhc2UgKyBEUF9BVVhfQ1RSTCk7Ci0KLQlhdXhfY3RybCB8PSBCSVQo MSk7Ci0JZHBfd3JpdGUoYmFzZSArIERQX0FVWF9DVFJMLCBhdXhfY3RybCk7Ci0JdXNsZWVwX3Jh bmdlKDEwMDAsIDEwMTApOyAvKiBoL3cgcmVjb21tZW5kZWQgZGVsYXkgKi8KLQotCWF1eF9jdHJs ICY9IH5CSVQoMSk7Ci0JZHBfd3JpdGUoYmFzZSArIERQX0FVWF9DVFJMLCBhdXhfY3RybCk7Ci19 Ci0KLXN0YXRpYyB2b2lkIGRwX2NhdGFsb2dfYXV4X2VuYWJsZShzdHJ1Y3QgZHBfY2F0YWxvZ19h dXggKmF1eCwgYm9vbCBlbmFibGUpCi17Ci0JdTMyIGF1eF9jdHJsOwotCXN0cnVjdCBkcF9jYXRh bG9nX3ByaXZhdGUgKmNhdGFsb2c7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlOwotCi0JaWYgKCFhdXgp IHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWRwX2Nh dGFsb2dfZ2V0X3ByaXYoYXV4KTsKLQliYXNlID0gY2F0YWxvZy0+aW8tPmN0cmxfaW8uYmFzZTsK LQotCWF1eF9jdHJsID0gZHBfcmVhZChiYXNlICsgRFBfQVVYX0NUUkwpOwotCi0JaWYgKGVuYWJs ZSkgewotCQlkcF93cml0ZShiYXNlICsgRFBfVElNRU9VVF9DT1VOVCwgMHhmZmZmKTsKLQkJZHBf d3JpdGUoYmFzZSArIERQX0FVWF9MSU1JVFMsIDB4ZmZmZik7Ci0JCWF1eF9jdHJsIHw9IEJJVCgw KTsKLQl9IGVsc2UgewotCQlhdXhfY3RybCAmPSB+QklUKDApOwotCX0KLQotCWRwX3dyaXRlKGJh c2UgKyBEUF9BVVhfQ1RSTCwgYXV4X2N0cmwpOwotfQotCi1zdGF0aWMgdm9pZCBkcF9jYXRhbG9n X2F1eF91cGRhdGVfY2ZnKHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4LAotCQlzdHJ1Y3QgZHBf YXV4X2NmZyAqY2ZnLCBlbnVtIGRwX3BoeV9hdXhfY29uZmlnX3R5cGUgdHlwZSkKLXsKLQlzdHJ1 Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwotCXUzMiBuZXdfaW5kZXggPSAwLCBjdXJy ZW50X2luZGV4ID0gMDsKLQotCWlmICghYXV4IHx8ICFjZmcgfHwgKHR5cGUgPj0gUEhZX0FVWF9D RkdfTUFYKSkgewotCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwotCQlyZXR1cm47Ci0JfQot Ci0JZHBfY2F0YWxvZ19nZXRfcHJpdihhdXgpOwotCi0JY3VycmVudF9pbmRleCA9IGNmZ1t0eXBl XS5jdXJyZW50X2luZGV4OwotCW5ld19pbmRleCA9IChjdXJyZW50X2luZGV4ICsgMSkgJSBjZmdb dHlwZV0uY2ZnX2NudDsKLQlwcl9kZWJ1ZygiVXBkYXRpbmcgJXMgZnJvbSAweCUwOHggdG8gMHgl MDh4XG4iLAotCQlkcF9waHlfYXV4X2NvbmZpZ190eXBlX3RvX3N0cmluZyh0eXBlKSwKLQljZmdb dHlwZV0ubHV0W2N1cnJlbnRfaW5kZXhdLCBjZmdbdHlwZV0ubHV0W25ld19pbmRleF0pOwotCi0J ZHBfd3JpdGUoY2F0YWxvZy0+aW8tPnBoeV9pby5iYXNlICsgY2ZnW3R5cGVdLm9mZnNldCwKLQkJ CWNmZ1t0eXBlXS5sdXRbbmV3X2luZGV4XSk7Ci0JY2ZnW3R5cGVdLmN1cnJlbnRfaW5kZXggPSBu ZXdfaW5kZXg7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2NhdGFsb2dfYXV4X3NldHVwKHN0cnVjdCBk cF9jYXRhbG9nX2F1eCAqYXV4LAotCQlzdHJ1Y3QgZHBfYXV4X2NmZyAqY2ZnKQotewotCXN0cnVj dCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Ci0JaW50IGkgPSAwOwotCi0JaWYgKCFhdXgg fHwgIWNmZykgewotCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwotCQlyZXR1cm47Ci0JfQot Ci0JZHBfY2F0YWxvZ19nZXRfcHJpdihhdXgpOwotCi0JZHBfd3JpdGUoY2F0YWxvZy0+aW8tPnBo eV9pby5iYXNlICsgRFBfUEhZX1BEX0NUTCwgMHg2NSk7Ci0Jd21iKCk7IC8qIG1ha2Ugc3VyZSBQ RCBwcm9ncmFtbWluZyBoYXBwZW5lZCAqLwotCi0JLyogVHVybiBvbiBCSUFTIGN1cnJlbnQgZm9y IFBIWS9QTEwgKi8KLQlkcF93cml0ZShjYXRhbG9nLT5pby0+ZHBfcGxsX2lvLmJhc2UgKwotCQlR U0VSREVTX0NPTV9CSUFTX0VOX0NMS0JVRkxSX0VOLCAweDFiKTsKLQotCS8qIERQIEFVWCBDRkcg cmVnaXN0ZXIgcHJvZ3JhbW1pbmcgKi8KLQlmb3IgKGkgPSAwOyBpIDwgUEhZX0FVWF9DRkdfTUFY OyBpKyspIHsKLQkJcHJfZGVidWcoIiVzOiBvZmZzZXQ9MHglMDh4LCB2YWx1ZT0weCUwOHhcbiIs Ci0JCQlkcF9waHlfYXV4X2NvbmZpZ190eXBlX3RvX3N0cmluZyhpKSwKLQkJCWNmZ1tpXS5vZmZz ZXQsIGNmZ1tpXS5sdXRbY2ZnW2ldLmN1cnJlbnRfaW5kZXhdKTsKLQkJZHBfd3JpdGUoY2F0YWxv Zy0+aW8tPnBoeV9pby5iYXNlICsgY2ZnW2ldLm9mZnNldCwKLQkJCWNmZ1tpXS5sdXRbY2ZnW2ld LmN1cnJlbnRfaW5kZXhdKTsKLQl9Ci0KLQlkcF93cml0ZShjYXRhbG9nLT5pby0+cGh5X2lvLmJh c2UgKyBEUF9QSFlfQVVYX0lOVEVSUlVQVF9NQVNLLCAweDFGKTsKLX0KLQotc3RhdGljIHZvaWQg ZHBfY2F0YWxvZ19hdXhfZ2V0X2lycShzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwgYm9vbCBj bWRfYnVzeSkKLXsKLQl1MzIgYWNrOwotCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFs b2c7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlOwotCi0JaWYgKCFhdXgpIHsKLQkJcHJfZXJyKCJpbnZh bGlkIGlucHV0XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXV4 KTsKLQliYXNlID0gY2F0YWxvZy0+aW8tPmN0cmxfaW8uYmFzZTsKLQotCWF1eC0+aXNyID0gZHBf cmVhZChiYXNlICsgRFBfSU5UUl9TVEFUVVMpOwotCWF1eC0+aXNyICY9IH5EUF9JTlRSX01BU0sx OwotCWFjayA9IGF1eC0+aXNyICYgRFBfSU5URVJSVVBUX1NUQVRVUzE7Ci0JYWNrIDw8PSAxOwot CWFjayB8PSBEUF9JTlRSX01BU0sxOwotCWRwX3dyaXRlKGJhc2UgKyBEUF9JTlRSX1NUQVRVUywg YWNrKTsKLX0KLQotLyogY29udHJvbGxlciByZWxhdGVkIGNhdGFsb2cgZnVuY3Rpb25zICovCi1z dGF0aWMgdTMyIGRwX2NhdGFsb2dfY3RybF9yZWFkX2hkY3Bfc3RhdHVzKHN0cnVjdCBkcF9jYXRh bG9nX2N0cmwgKmN0cmwpCi17Ci0Jc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsK LQl2b2lkIF9faW9tZW0gKmJhc2U7Ci0KLQlpZiAoIWN0cmwpIHsKLQkJcHJfZXJyKCJpbnZhbGlk IGlucHV0XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZHBfY2F0YWxvZ19nZXRfcHJp dihjdHJsKTsKLQliYXNlID0gY2F0YWxvZy0+aW8tPmN0cmxfaW8uYmFzZTsKLQotCXJldHVybiBk cF9yZWFkKGJhc2UgKyBEUF9IRENQX1NUQVRVUyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2NhdGFs b2dfY3RybF9zZXR1cF9pbmZvZnJhbWVfc2RwKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwp Ci17Ci0Jc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKLQl2b2lkIF9faW9tZW0g KmJhc2U7Ci0JdTMyIGhlYWRlciwgZGF0YTsKLQotCWlmICghY3RybCkgewotCQlwcl9lcnIoImlu dmFsaWQgaW5wdXRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZHBfY2F0YWxvZ19nZXRfcHJpdihj dHJsKTsKLQliYXNlID0gY2F0YWxvZy0+aW8tPmN0cmxfaW8uYmFzZTsKLQotCWhlYWRlciA9IGRw X3JlYWQoYmFzZSArIE1NU1NfRFBfVlNDRVhUXzApOwotCWhlYWRlciB8PSBjdHJsLT5oZHJfZGF0 YS52c2NfaGRyX2J5dGUxOwotCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX1ZTQ0VYVF8wLCBoZWFk ZXIpOwotCi0JaGVhZGVyID0gZHBfcmVhZChiYXNlICsgTU1TU19EUF9WU0NFWFRfMSk7Ci0JaGVh ZGVyIHw9IGN0cmwtPmhkcl9kYXRhLnZzY19oZHJfYnl0ZTE7Ci0JZHBfd3JpdGUoYmFzZSArIE1N U1NfRFBfVlNDRVhUXzEsIGhlYWRlcik7Ci0KLQloZWFkZXIgPSBkcF9yZWFkKGJhc2UgKyBNTVNT X0RQX1ZTQ0VYVF8xKTsKLQloZWFkZXIgfD0gY3RybC0+aGRyX2RhdGEudnNjX2hkcl9ieXRlMTsK LQlkcF93cml0ZShiYXNlICsgTU1TU19EUF9WU0NFWFRfMSwgaGVhZGVyKTsKLQotCWhlYWRlciA9 ICBjdHJsLT5oZHJfZGF0YS52ZXJzaW9uOwotCWhlYWRlciB8PSAgY3RybC0+aGRyX2RhdGEubGVu Z3RoIDw8IDg7Ci0JaGVhZGVyIHw9IGN0cmwtPmhkcl9kYXRhLmVvdGYgPDwgMTY7Ci0JaGVhZGVy IHw9IChjdHJsLT5oZHJfZGF0YS5kZXNjcmlwdG9yX2lkIDw8IDI0KTsKLQlkcF93cml0ZShiYXNl ICsgTU1TU19EUF9WU0NFWFRfMiwgaGVhZGVyKTsKLQotCWRhdGEgPSAoRFBfR0VUX0xTQihjdHJs LT5oZHJfZGF0YS5kaXNwbGF5X3ByaW1hcmllc194WzBdKSB8Ci0JCShEUF9HRVRfTVNCKGN0cmwt Pmhkcl9kYXRhLmRpc3BsYXlfcHJpbWFyaWVzX3hbMF0pIDw8IDgpIHwKLQkJKERQX0dFVF9MU0Io Y3RybC0+aGRyX2RhdGEuZGlzcGxheV9wcmltYXJpZXNfeVswXSkgPDwgMTYpIHwKLQkJKERQX0dF VF9NU0IoY3RybC0+aGRyX2RhdGEuZGlzcGxheV9wcmltYXJpZXNfeVswXSkgPDwgMjQpKTsKLQlk cF93cml0ZShiYXNlICsgTU1TU19EUF9WU0NFWFRfMywgZGF0YSk7Ci0KLQlkYXRhID0gKERQX0dF VF9MU0IoY3RybC0+aGRyX2RhdGEuZGlzcGxheV9wcmltYXJpZXNfeFsxXSkgfAotCQkoRFBfR0VU X01TQihjdHJsLT5oZHJfZGF0YS5kaXNwbGF5X3ByaW1hcmllc194WzFdKSA8PCA4KSB8Ci0JCShE UF9HRVRfTFNCKGN0cmwtPmhkcl9kYXRhLmRpc3BsYXlfcHJpbWFyaWVzX3lbMV0pIDw8IDE2KSB8 Ci0JCShEUF9HRVRfTVNCKGN0cmwtPmhkcl9kYXRhLmRpc3BsYXlfcHJpbWFyaWVzX3lbMV0pIDw8 IDI0KSk7Ci0JZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfVlNDRVhUXzQsIGRhdGEpOwotCi0JZGF0 YSA9IChEUF9HRVRfTFNCKGN0cmwtPmhkcl9kYXRhLmRpc3BsYXlfcHJpbWFyaWVzX3hbMl0pIHwK LQkJKERQX0dFVF9NU0IoY3RybC0+aGRyX2RhdGEuZGlzcGxheV9wcmltYXJpZXNfeFsyXSkgPDwg OCkgfAotCQkoRFBfR0VUX0xTQihjdHJsLT5oZHJfZGF0YS5kaXNwbGF5X3ByaW1hcmllc195WzJd KSA8PCAxNikgfAotCQkoRFBfR0VUX01TQihjdHJsLT5oZHJfZGF0YS5kaXNwbGF5X3ByaW1hcmll c195WzJdKSA8PCAyNCkpOwotCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX1ZTQ0VYVF81LCBkYXRh KTsKLQotCWRhdGEgPSAoRFBfR0VUX0xTQihjdHJsLT5oZHJfZGF0YS53aGl0ZV9wb2ludF94KSB8 Ci0JCShEUF9HRVRfTVNCKGN0cmwtPmhkcl9kYXRhLndoaXRlX3BvaW50X3gpIDw8IDgpIHwKLQkJ KERQX0dFVF9MU0IoY3RybC0+aGRyX2RhdGEud2hpdGVfcG9pbnRfeSkgPDwgMTYpIHwKLQkJKERQ X0dFVF9NU0IoY3RybC0+aGRyX2RhdGEud2hpdGVfcG9pbnRfeSkgPDwgMjQpKTsKLQlkcF93cml0 ZShiYXNlICsgTU1TU19EUF9WU0NFWFRfNiwgZGF0YSk7Ci0KLQlkYXRhID0gKERQX0dFVF9MU0Io Y3RybC0+aGRyX2RhdGEubWF4X2x1bWluYW5jZSkgfAotCQkoRFBfR0VUX01TQihjdHJsLT5oZHJf ZGF0YS5tYXhfbHVtaW5hbmNlKSA8PCA4KSB8Ci0JCShEUF9HRVRfTFNCKGN0cmwtPmhkcl9kYXRh Lm1pbl9sdW1pbmFuY2UpIDw8IDE2KSB8Ci0JCShEUF9HRVRfTVNCKGN0cmwtPmhkcl9kYXRhLm1p bl9sdW1pbmFuY2UpIDw8IDI0KSk7Ci0JZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfVlNDRVhUXzcs IGRhdGEpOwotCi0JZGF0YSA9IChEUF9HRVRfTFNCKGN0cmwtPmhkcl9kYXRhLm1heF9jb250ZW50 X2xpZ2h0X2xldmVsKSB8Ci0JCShEUF9HRVRfTVNCKGN0cmwtPmhkcl9kYXRhLm1heF9jb250ZW50 X2xpZ2h0X2xldmVsKSA8PCA4KSB8Ci0JCShEUF9HRVRfTFNCKGN0cmwtPmhkcl9kYXRhLm1heF9h dmVyYWdlX2xpZ2h0X2xldmVsKSA8PCAxNikgfAotCQkoRFBfR0VUX01TQihjdHJsLT5oZHJfZGF0 YS5tYXhfYXZlcmFnZV9saWdodF9sZXZlbCkgPDwgMjQpKTsKLQlkcF93cml0ZShiYXNlICsgTU1T U19EUF9WU0NFWFRfOCwgZGF0YSk7Ci0KLQlkcF93cml0ZShiYXNlICsgTU1TU19EUF9WU0NFWFRf OSwgMHgwMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2NhdGFsb2dfY3RybF9zZXR1cF92c2Nfc2Rw KHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwpCi17Ci0Jc3RydWN0IGRwX2NhdGFsb2dfcHJp dmF0ZSAqY2F0YWxvZzsKLQl2b2lkIF9faW9tZW0gKmJhc2U7Ci0JdTMyIHZhbHVlOwotCi0JaWYg KCFjdHJsKSB7Ci0JCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Ci0JCXJldHVybjsKLQl9Ci0K LQlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwotCWJhc2UgPSBjYXRhbG9nLT5pby0+Y3RybF9p by5iYXNlOwotCi0JdmFsdWUgPSBkcF9yZWFkKGJhc2UgKyBNTVNTX0RQX0dFTkVSSUMwXzApOwot CXZhbHVlIHw9IGN0cmwtPmhkcl9kYXRhLnZzY19oZHJfYnl0ZTE7Ci0JZHBfd3JpdGUoYmFzZSAr IE1NU1NfRFBfR0VORVJJQzBfMCwgdmFsdWUpOwotCi0JdmFsdWUgPSBkcF9yZWFkKGJhc2UgKyBN TVNTX0RQX0dFTkVSSUMwXzEpOwotCXZhbHVlIHw9IGN0cmwtPmhkcl9kYXRhLnZzY19oZHJfYnl0 ZTI7Ci0JZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfR0VORVJJQzBfMSwgdmFsdWUpOwotCi0JdmFs dWUgPSBkcF9yZWFkKGJhc2UgKyBNTVNTX0RQX0dFTkVSSUMwXzEpOwotCXZhbHVlIHw9IGN0cmwt Pmhkcl9kYXRhLnZzY19oZHJfYnl0ZTM7Ci0JZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfR0VORVJJ QzBfMSwgdmFsdWUpOwotCi0JZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfR0VORVJJQzBfMiwgMHgw MCk7Ci0JZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfR0VORVJJQzBfMywgMHgwMCk7Ci0JZHBfd3Jp dGUoYmFzZSArIE1NU1NfRFBfR0VORVJJQzBfNCwgMHgwMCk7Ci0JZHBfd3JpdGUoYmFzZSArIE1N U1NfRFBfR0VORVJJQzBfNSwgMHgwMCk7Ci0KLQlkcF93cml0ZShiYXNlICsgTU1TU19EUF9HRU5F UklDMF82LCBjdHJsLT5oZHJfZGF0YS5wa3RfcGF5bG9hZCk7Ci0JZHBfd3JpdGUoYmFzZSArIE1N U1NfRFBfR0VORVJJQzBfNywgMHgwMCk7Ci0JZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfR0VORVJJ QzBfOCwgMHgwMCk7Ci0JZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfR0VORVJJQzBfOSwgMHgwMCk7 Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2NhdGFsb2dfY3RybF9jb25maWdfaGRyKHN0cnVjdCBkcF9j YXRhbG9nX2N0cmwgKmN0cmwpCi17Ci0Jc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxv ZzsKLQl2b2lkIF9faW9tZW0gKmJhc2U7Ci0JdTMyIGNmZywgY2ZnMjsKLQotCWlmICghY3RybCkg ewotCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZHBfY2F0 YWxvZ19nZXRfcHJpdihjdHJsKTsKLQliYXNlID0gY2F0YWxvZy0+aW8tPmN0cmxfaW8uYmFzZTsK LQotCWNmZyA9IGRwX3JlYWQoYmFzZSArIE1NU1NfRFBfU0RQX0NGRyk7Ci0JLyogVlNDRVhUX1NE UF9FTiAqLwotCWNmZyB8PSBCSVQoMTYpOwotCi0JLyogR0VOMF9TRFBfRU4gKi8KLQljZmcgfD0g QklUKDE3KTsKLQotCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX1NEUF9DRkcsIGNmZyk7Ci0KLQlj ZmcyID0gZHBfcmVhZChiYXNlICsgTU1TU19EUF9TRFBfQ0ZHMik7Ci0JLyogR2VuZXJpYzAgU0RQ IFBheWxvYWQgaXMgMTkgYnl0ZXMgd2hpY2ggaXMgPiAxNiwgc28gQml0MTYgaXMgMSAqLwotCWNm ZzIgfD0gQklUKDE2KTsKLQlkcF93cml0ZShiYXNlICsgTU1TU19EUF9TRFBfQ0ZHMiwgY2ZnMik7 Ci0KLQlkcF9jYXRhbG9nX2N0cmxfc2V0dXBfdnNjX3NkcChjdHJsKTsKLQlkcF9jYXRhbG9nX2N0 cmxfc2V0dXBfaW5mb2ZyYW1lX3NkcChjdHJsKTsKLQotCWNmZyA9IGRwX3JlYWQoYmFzZSArIERQ X01JU0MxX01JU0MwKTsKLQkvKiBJbmRpY2F0ZXMgcHJlc2VuY2Ugb2YgVlNDICovCi0JY2ZnIHw9 IEJJVCg2KSA8PCA4OwotCi0JZHBfd3JpdGUoYmFzZSArIERQX01JU0MxX01JU0MwLCBjZmcpOwot Ci0JY2ZnID0gZHBfcmVhZChiYXNlICsgRFBfQ09ORklHVVJBVElPTl9DVFJMKTsKLQkvKiBTZW5k IFZTQyAqLwotCWNmZyB8PSBCSVQoNyk7Ci0KLQlzd2l0Y2ggKGN0cmwtPmhkcl9kYXRhLmJwYykg ewotCWRlZmF1bHQ6Ci0JY2FzZSAxMDoKLQkJY2ZnIHw9IEJJVCg5KTsKLQkJYnJlYWs7Ci0JY2Fz ZSA4OgotCQljZmcgfD0gQklUKDgpOwotCQlicmVhazsKLQl9Ci0KLQlkcF93cml0ZShiYXNlICsg RFBfQ09ORklHVVJBVElPTl9DVFJMLCBjZmcpOwotCi0JY2ZnID0gZHBfcmVhZChiYXNlICsgRFBf Q09NUFJFU1NJT05fTU9ERV9DVFJMKTsKLQotCS8qIFRyaWdnZXIgU0RQIHZhbHVlcyBpbiByZWdp c3RlcnMgKi8KLQljZmcgfD0gQklUKDgpOwotCWRwX3dyaXRlKGJhc2UgKyBEUF9DT01QUkVTU0lP Tl9NT0RFX0NUUkwsIGNmZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2NhdGFsb2dfY3RybF91cGRh dGVfdHJhbnNmZXJfdW5pdChzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsKQotewotCXN0cnVj dCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlOwotCi0J aWYgKCFjdHJsKSB7Ci0JCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Ci0JCXJldHVybjsKLQl9 Ci0KLQlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwotCWJhc2UgPSBjYXRhbG9nLT5pby0+Y3Ry bF9pby5iYXNlOwotCi0JZHBfd3JpdGUoYmFzZSArIERQX1ZBTElEX0JPVU5EQVJZLCBjdHJsLT52 YWxpZF9ib3VuZGFyeSk7Ci0JZHBfd3JpdGUoYmFzZSArIERQX1RVLCBjdHJsLT5kcF90dSk7Ci0J ZHBfd3JpdGUoYmFzZSArIERQX1ZBTElEX0JPVU5EQVJZXzIsIGN0cmwtPnZhbGlkX2JvdW5kYXJ5 Mik7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2NhdGFsb2dfY3RybF9zdGF0ZV9jdHJsKHN0cnVjdCBk cF9jYXRhbG9nX2N0cmwgKmN0cmwsIHUzMiBzdGF0ZSkKLXsKLQlzdHJ1Y3QgZHBfY2F0YWxvZ19w cml2YXRlICpjYXRhbG9nOwotCXZvaWQgX19pb21lbSAqYmFzZTsKLQotCWlmICghY3RybCkgewot CQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZHBfY2F0YWxv Z19nZXRfcHJpdihjdHJsKTsKLQliYXNlID0gY2F0YWxvZy0+aW8tPmN0cmxfaW8uYmFzZTsKLQot CWRwX3dyaXRlKGJhc2UgKyBEUF9TVEFURV9DVFJMLCBzdGF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lk IGRwX2NhdGFsb2dfY3RybF9jb25maWdfY3RybChzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJs LCB1MzIgY2ZnKQotewotCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Ci0Jdm9p ZCBfX2lvbWVtICpiYXNlOwotCi0JaWYgKCFjdHJsKSB7Ci0JCXByX2VycigiaW52YWxpZCBpbnB1 dFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwotCWJh c2UgPSBjYXRhbG9nLT5pby0+Y3RybF9pby5iYXNlOwotCi0JcHJfZGVidWcoIkRQX0NPTkZJR1VS QVRJT05fQ1RSTD0weCV4XG4iLCBjZmcpOwotCi0JZHBfd3JpdGUoYmFzZSArIERQX0NPTkZJR1VS QVRJT05fQ1RSTCwgY2ZnKTsKLQlkcF93cml0ZShiYXNlICsgRFBfTUFJTkxJTktfTEVWRUxTLCAw eGEwOCk7Ci0JZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfQVNZTkNfRklGT19DT05GSUcsIDB4MSk7 Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2NhdGFsb2dfY3RybF9sYW5lX21hcHBpbmcoc3RydWN0IGRw X2NhdGFsb2dfY3RybCAqY3RybCkKLXsKLQlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRh bG9nOwotCXZvaWQgX19pb21lbSAqYmFzZTsKLQotCWlmICghY3RybCkgewotCQlwcl9lcnIoImlu dmFsaWQgaW5wdXRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZHBfY2F0YWxvZ19nZXRfcHJpdihj dHJsKTsKLQliYXNlID0gY2F0YWxvZy0+aW8tPmN0cmxfaW8uYmFzZTsKLQotCWRwX3dyaXRlKGJh c2UgKyBEUF9MT0dJQ0FMMlBIWVNDSUFMX0xBTkVfTUFQUElORywgMHhlNCk7Ci19Ci0KLXN0YXRp YyB2b2lkIGRwX2NhdGFsb2dfY3RybF9tYWlubGlua19jdHJsKHN0cnVjdCBkcF9jYXRhbG9nX2N0 cmwgKmN0cmwsCi0JCQkJCQlib29sIGVuYWJsZSkKLXsKLQl1MzIgbWFpbmxpbmtfY3RybDsKLQlz dHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwotCXZvaWQgX19pb21lbSAqYmFzZTsK LQotCWlmICghY3RybCkgewotCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwotCQlyZXR1cm47 Ci0JfQotCi0JZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsKLQliYXNlID0gY2F0YWxvZy0+aW8t PmN0cmxfaW8uYmFzZTsKLQotCWlmIChlbmFibGUpIHsKLQkJZHBfd3JpdGUoYmFzZSArIERQX01B SU5MSU5LX0NUUkwsIDB4MDIwMDAwMDApOwotCQl3bWIoKTsgLyogbWFrZSBzdXJlIG1haW5saW5r IGlzIHR1cm5lZCBvZmYgYmVmb3JlIHJlc2V0ICovCi0JCWRwX3dyaXRlKGJhc2UgKyBEUF9NQUlO TElOS19DVFJMLCAweDAyMDAwMDAyKTsKLQkJd21iKCk7IC8qIG1ha2Ugc3VyZSBtYWlubGluayBl bnRlcmVkIHJlc2V0ICovCi0JCWRwX3dyaXRlKGJhc2UgKyBEUF9NQUlOTElOS19DVFJMLCAweDAy MDAwMDAwKTsKLQkJd21iKCk7IC8qIG1ha2Ugc3VyZSBtYWlubGluayByZXNldCBkb25lICovCi0J CWRwX3dyaXRlKGJhc2UgKyBEUF9NQUlOTElOS19DVFJMLCAweDAyMDAwMDAxKTsKLQkJd21iKCk7 IC8qIG1ha2Ugc3VyZSBtYWlubGluayB0dXJuZWQgb24gKi8KLQl9IGVsc2UgewotCQltYWlubGlu a19jdHJsID0gZHBfcmVhZChiYXNlICsgRFBfTUFJTkxJTktfQ1RSTCk7Ci0JCW1haW5saW5rX2N0 cmwgJj0gfkJJVCgwKTsKLQkJZHBfd3JpdGUoYmFzZSArIERQX01BSU5MSU5LX0NUUkwsIG1haW5s aW5rX2N0cmwpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19jdHJsX2NvbmZpZ19t aXNjKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsCi0JCQkJCXUzMiBjYywgdTMyIHRiKQot ewotCXUzMiBtaXNjX3ZhbDsKLQlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwot CXZvaWQgX19pb21lbSAqYmFzZTsKLQotCWlmICghY3RybCkgewotCQlwcl9lcnIoImludmFsaWQg aW5wdXRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsK LQliYXNlID0gY2F0YWxvZy0+aW8tPmN0cmxfaW8uYmFzZTsKLQotCW1pc2NfdmFsID0gZHBfcmVh ZChiYXNlICsgRFBfTUlTQzFfTUlTQzApOwotCW1pc2NfdmFsIHw9IGNjOwotCW1pc2NfdmFsIHw9 ICh0YiA8PCA1KTsKLQltaXNjX3ZhbCB8PSBCSVQoMCk7IC8qIENvbmZpZ3VyZSBjbG9jayB0byBz eW5jaHJvbm91cyBtb2RlICovCi0KLQlwcl9kZWJ1ZygibWlzYyBzZXR0aW5ncyA9IDB4JXhcbiIs IG1pc2NfdmFsKTsKLQlkcF93cml0ZShiYXNlICsgRFBfTUlTQzFfTUlTQzAsIG1pc2NfdmFsKTsK LX0KLQotc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19jdHJsX2NvbmZpZ19tc2Eoc3RydWN0IGRwX2Nh dGFsb2dfY3RybCAqY3RybCwKLQkJCQkJdTMyIHJhdGUsIHUzMiBzdHJlYW1fcmF0ZV9raHosCi0J CQkJCWJvb2wgZml4ZWRfbnZpZCkKLXsKLQl1MzIgcGl4ZWxfbSwgcGl4ZWxfbjsKLQl1MzIgbXZp ZCwgbnZpZDsKLQl1NjQgbXZpZF9jYWxjOwotCXUzMiBjb25zdCBudmlkX2ZpeGVkID0gMHg4MDAw OwotCXUzMiBjb25zdCBsaW5rX3JhdGVfaGJyMiA9IDU0MDAwMDsKLQl1MzIgY29uc3QgbGlua19y YXRlX2hicjMgPSA4MTAwMDA7Ci0Jc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsK LQl2b2lkIF9faW9tZW0gKmJhc2VfY2MsICpiYXNlX2N0cmw7Ci0KLQlpZiAoIWN0cmwpIHsKLQkJ cHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWRwX2NhdGFsb2df Z2V0X3ByaXYoY3RybCk7Ci0JaWYgKGZpeGVkX252aWQpIHsKLQkJcHJfZGVidWcoInVzZSBmaXhl ZCBOVklEPTB4JXhcbiIsIG52aWRfZml4ZWQpOwotCQludmlkID0gbnZpZF9maXhlZDsKLQotCQlw cl9kZWJ1ZygibGluayByYXRlPSVka2Jwcywgc3RyZWFtX3JhdGVfa2h6PSV1S2h6IiwKLQkJCXJh dGUsIHN0cmVhbV9yYXRlX2toeik7Ci0KLQkJLyoKLQkJICogRm9yIGludGVybWVkaWF0ZSByZXN1 bHRzLCB1c2UgNjQgYml0IGFyaXRobWV0aWMgdG8gYXZvaWQKLQkJICogbG9zcyBvZiBwcmVjaXNp b24uCi0JCSAqLwotCQltdmlkX2NhbGMgPSAodTY0KSBzdHJlYW1fcmF0ZV9raHogKiBudmlkOwot CQltdmlkX2NhbGMgPSBkaXZfdTY0KG12aWRfY2FsYywgcmF0ZSk7Ci0KLQkJLyoKLQkJICogdHJ1 bmNhdGUgYmFjayB0byAzMiBiaXRzIGFzIHRoaXMgZmluYWwgZGl2aWRlZCB2YWx1ZSB3aWxsCi0J CSAqIGFsd2F5cyBiZSB3aXRoaW4gdGhlIHJhbmdlIG9mIGEgMzIgYml0IHVuc2lnbmVkIGludC4K LQkJICovCi0JCW12aWQgPSAodTMyKSBtdmlkX2NhbGM7Ci0JfSBlbHNlIHsKLQkJYmFzZV9jYyA9 IGNhdGFsb2ctPmlvLT5kcF9jY19pby5iYXNlOwotCi0JCXBpeGVsX20gPSBkcF9yZWFkKGJhc2Vf Y2MgKyBNTVNTX0RQX1BJWEVMX00pOwotCQlwaXhlbF9uID0gZHBfcmVhZChiYXNlX2NjICsgTU1T U19EUF9QSVhFTF9OKTsKLQkJcHJfZGVidWcoInBpeGVsX209MHgleCwgcGl4ZWxfbj0weCV4XG4i LCBwaXhlbF9tLCBwaXhlbF9uKTsKLQotCQltdmlkID0gKHBpeGVsX20gJiAweEZGRkYpICogNTsK LQkJbnZpZCA9ICgweEZGRkYgJiAofnBpeGVsX24pKSArIChwaXhlbF9tICYgMHhGRkZGKTsKLQot CQlwcl9kZWJ1ZygicmF0ZSA9ICVkXG4iLCByYXRlKTsKLQotCQlpZiAobGlua19yYXRlX2hicjIg PT0gcmF0ZSkKLQkJCW52aWQgKj0gMjsKLQotCQlpZiAobGlua19yYXRlX2hicjMgPT0gcmF0ZSkK LQkJCW52aWQgKj0gMzsKLQl9Ci0KLQliYXNlX2N0cmwgPSBjYXRhbG9nLT5pby0+Y3RybF9pby5i YXNlOwotCXByX2RlYnVnKCJtdmlkPTB4JXgsIG52aWQ9MHgleFxuIiwgbXZpZCwgbnZpZCk7Ci0J ZHBfd3JpdGUoYmFzZV9jdHJsICsgRFBfU09GVFdBUkVfTVZJRCwgbXZpZCk7Ci0JZHBfd3JpdGUo YmFzZV9jdHJsICsgRFBfU09GVFdBUkVfTlZJRCwgbnZpZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRw X2NhdGFsb2dfY3RybF9zZXRfcGF0dGVybihzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLAot CQkJCQl1MzIgcGF0dGVybikKLXsKLQlpbnQgYml0LCBjbnQgPSAxMDsKLQl1MzIgZGF0YTsKLQlz dHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwotCXZvaWQgX19pb21lbSAqYmFzZTsK LQotCWlmICghY3RybCkgewotCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwotCQlyZXR1cm47 Ci0JfQotCi0JZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsKLQliYXNlID0gY2F0YWxvZy0+aW8t PmN0cmxfaW8uYmFzZTsKLQotCWJpdCA9IDE7Ci0JYml0IDw8PSAocGF0dGVybiAtIDEpOwotCXBy X2RlYnVnKCJodzogYml0PSVkIHRyYWluPSVkXG4iLCBiaXQsIHBhdHRlcm4pOwotCWRwX3dyaXRl KGJhc2UgKyBEUF9TVEFURV9DVFJMLCBiaXQpOwotCi0JYml0ID0gODsKLQliaXQgPDw9IChwYXR0 ZXJuIC0gMSk7Ci0KLQl3aGlsZSAoY250LS0pIHsKLQkJZGF0YSA9IGRwX3JlYWQoYmFzZSArIERQ X01BSU5MSU5LX1JFQURZKTsKLQkJaWYgKGRhdGEgJiBiaXQpCi0JCQlicmVhazsKLQl9Ci0KLQlp ZiAoY250ID09IDApCi0JCXByX2Vycigic2V0IGxpbmtfdHJhaW49JWQgZmFpbGVkXG4iLCBwYXR0 ZXJuKTsKLX0KLQotc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19jdHJsX3VzYl9yZXNldChzdHJ1Y3Qg ZHBfY2F0YWxvZ19jdHJsICpjdHJsLCBib29sIGZsaXApCi17Ci0Jc3RydWN0IGRwX2NhdGFsb2df cHJpdmF0ZSAqY2F0YWxvZzsKLQl2b2lkIF9faW9tZW0gKmJhc2U7Ci0KLQlpZiAoIWN0cmwpIHsK LQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWRwX2NhdGFs b2dfZ2V0X3ByaXYoY3RybCk7Ci0KLQliYXNlID0gY2F0YWxvZy0+aW8tPnVzYjNfZHBfY29tLmJh c2U7Ci0KLQlkcF93cml0ZShiYXNlICsgVVNCM19EUF9DT01fUkVTRVRfT1ZSRF9DVFJMLCAweDBh KTsKLQlkcF93cml0ZShiYXNlICsgVVNCM19EUF9DT01fUEhZX01PREVfQ1RSTCwgMHgwMik7Ci0J ZHBfd3JpdGUoYmFzZSArIFVTQjNfRFBfQ09NX1NXX1JFU0VULCAweDAxKTsKLQkvKiBtYWtlIHN1 cmUgdXNiMyBjb20gcGh5IHNvZnR3YXJlIHJlc2V0IGlzIGRvbmUgKi8KLQl3bWIoKTsKLQotCWlm ICghZmxpcCkgLyogQ0MxICovCi0JCWRwX3dyaXRlKGJhc2UgKyBVU0IzX0RQX0NPTV9UWVBFQ19D VFJMLCAweDAyKTsKLQllbHNlIC8qIENDMiAqLwotCQlkcF93cml0ZShiYXNlICsgVVNCM19EUF9D T01fVFlQRUNfQ1RSTCwgMHgwMyk7Ci0KLQlkcF93cml0ZShiYXNlICsgVVNCM19EUF9DT01fU1dJ X0NUUkwsIDB4MDApOwotCWRwX3dyaXRlKGJhc2UgKyBVU0IzX0RQX0NPTV9TV19SRVNFVCwgMHgw MCk7Ci0JLyogbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSByZXNldCBpcyBkb25lICovCi0Jd21iKCk7 Ci0KLQlkcF93cml0ZShiYXNlICsgVVNCM19EUF9DT01fUE9XRVJfRE9XTl9DVFJMLCAweDAxKTsK LQlkcF93cml0ZShiYXNlICsgVVNCM19EUF9DT01fUkVTRVRfT1ZSRF9DVFJMLCAweDAwKTsKLQkv KiBtYWtlIHN1cmUgcGh5IGlzIGJyb3VnaHQgb3V0IG9mIHJlc2V0ICovCi0Jd21iKCk7Ci0KLX0K LQotc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19jdHJsX3Jlc2V0KHN0cnVjdCBkcF9jYXRhbG9nX2N0 cmwgKmN0cmwpCi17Ci0JdTMyIHN3X3Jlc2V0OwotCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUg KmNhdGFsb2c7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlOwotCi0JaWYgKCFjdHJsKSB7Ci0JCXByX2Vy cigiaW52YWxpZCBpbnB1dFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlkcF9jYXRhbG9nX2dldF9w cml2KGN0cmwpOwotCWJhc2UgPSBjYXRhbG9nLT5pby0+Y3RybF9pby5iYXNlOwotCi0Jc3dfcmVz ZXQgPSBkcF9yZWFkKGJhc2UgKyBEUF9TV19SRVNFVCk7Ci0KLQlzd19yZXNldCB8PSBCSVQoMCk7 Ci0JZHBfd3JpdGUoYmFzZSArIERQX1NXX1JFU0VULCBzd19yZXNldCk7Ci0JdXNsZWVwX3Jhbmdl KDEwMDAsIDEwMTApOyAvKiBoL3cgcmVjb21tZW5kZWQgZGVsYXkgKi8KLQotCXN3X3Jlc2V0ICY9 IH5CSVQoMCk7Ci0JZHBfd3JpdGUoYmFzZSArIERQX1NXX1JFU0VULCBzd19yZXNldCk7Ci19Ci0K LXN0YXRpYyBib29sIGRwX2NhdGFsb2dfY3RybF9tYWlubGlua19yZWFkeShzdHJ1Y3QgZHBfY2F0 YWxvZ19jdHJsICpjdHJsKQotewotCXUzMiBkYXRhOwotCWludCBjbnQgPSAxMDsKLQlzdHJ1Y3Qg ZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwotCXZvaWQgX19pb21lbSAqYmFzZTsKLQotCWlm ICghY3RybCkgewotCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwotCQlnb3RvIGVuZDsKLQl9 Ci0KLQlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwotCWJhc2UgPSBjYXRhbG9nLT5pby0+Y3Ry bF9pby5iYXNlOwotCi0Jd2hpbGUgKC0tY250KSB7Ci0JCS8qIERQX01BSU5MSU5LX1JFQURZICov Ci0JCWRhdGEgPSBkcF9yZWFkKGJhc2UgKyBEUF9NQUlOTElOS19SRUFEWSk7Ci0JCWlmIChkYXRh ICYgQklUKDApKQotCQkJcmV0dXJuIHRydWU7Ci0KLQkJdXNsZWVwX3JhbmdlKDEwMDAsIDEwMTAp OyAvKiAxbXMgd2FpdCBiZWZvcmUgbmV4dCByZWcgcmVhZCAqLwotCX0KLQlwcl9lcnIoIm1haW5s aW5rIG5vdCByZWFkeVxuIik7Ci1lbmQ6Ci0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9p ZCBkcF9jYXRhbG9nX2N0cmxfZW5hYmxlX2lycShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJs LAotCQkJCQkJYm9vbCBlbmFibGUpCi17Ci0Jc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0 YWxvZzsKLQl2b2lkIF9faW9tZW0gKmJhc2U7Ci0KLQlpZiAoIWN0cmwpIHsKLQkJcHJfZXJyKCJp bnZhbGlkIGlucHV0XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWRwX2NhdGFsb2dfZ2V0X3ByaXYo Y3RybCk7Ci0JYmFzZSA9IGNhdGFsb2ctPmlvLT5jdHJsX2lvLmJhc2U7Ci0KLQlpZiAoZW5hYmxl KSB7Ci0JCWRwX3dyaXRlKGJhc2UgKyBEUF9JTlRSX1NUQVRVUywgRFBfSU5UUl9NQVNLMSk7Ci0J CWRwX3dyaXRlKGJhc2UgKyBEUF9JTlRSX1NUQVRVUzIsIERQX0lOVFJfTUFTSzIpOwotCX0gZWxz ZSB7Ci0JCWRwX3dyaXRlKGJhc2UgKyBEUF9JTlRSX1NUQVRVUywgMHgwMCk7Ci0JCWRwX3dyaXRl KGJhc2UgKyBEUF9JTlRSX1NUQVRVUzIsIDB4MDApOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZHBf Y2F0YWxvZ19jdHJsX2hwZF9jb25maWcoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwgYm9v bCBlbikKLXsKLQlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwotCXZvaWQgX19p b21lbSAqYmFzZTsKLQotCWlmICghY3RybCkgewotCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIp OwotCQlyZXR1cm47Ci0JfQotCi0JZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsKLQliYXNlID0g Y2F0YWxvZy0+aW8tPmN0cmxfaW8uYmFzZTsKLQotCWlmIChlbikgewotCQl1MzIgcmVmdGltZXIg PSBkcF9yZWFkKGJhc2UgKyBEUF9EUF9IUERfUkVGVElNRVIpOwotCi0JCWRwX3dyaXRlKGJhc2Ug KyBEUF9EUF9IUERfSU5UX0FDSywgMHhGKTsKLQkJZHBfd3JpdGUoYmFzZSArIERQX0RQX0hQRF9J TlRfTUFTSywgMHhGKTsKLQotCQkvKiBFbmFibGluZyBSRUZUSU1FUiAqLwotCQlyZWZ0aW1lciB8 PSBCSVQoMTYpOwotCQlkcF93cml0ZShiYXNlICsgRFBfRFBfSFBEX1JFRlRJTUVSLCAweEYpOwot CQkvKiBFbmFibGUgSFBEICovCi0JCWRwX3dyaXRlKGJhc2UgKyBEUF9EUF9IUERfQ1RSTCwgMHgx KTsKLQl9IGVsc2UgewotCQkvKkRpc2FibGUgSFBEICovCi0JCWRwX3dyaXRlKGJhc2UgKyBEUF9E UF9IUERfQ1RSTCwgMHgwKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2NhdGFsb2dfY3RybF9n ZXRfaW50ZXJydXB0KHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwpCi17Ci0JdTMyIGFjayA9 IDA7Ci0Jc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKLQl2b2lkIF9faW9tZW0g KmJhc2U7Ci0KLQlpZiAoIWN0cmwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKLQkJ cmV0dXJuOwotCX0KLQotCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7Ci0JYmFzZSA9IGNhdGFs b2ctPmlvLT5jdHJsX2lvLmJhc2U7Ci0KLQljdHJsLT5pc3IgPSBkcF9yZWFkKGJhc2UgKyBEUF9J TlRSX1NUQVRVUzIpOwotCWN0cmwtPmlzciAmPSB+RFBfSU5UUl9NQVNLMjsKLQlhY2sgPSBjdHJs LT5pc3IgJiBEUF9JTlRFUlJVUFRfU1RBVFVTMjsKLQlhY2sgPDw9IDE7Ci0JYWNrIHw9IERQX0lO VFJfTUFTSzI7Ci0JZHBfd3JpdGUoYmFzZSArIERQX0lOVFJfU1RBVFVTMiwgYWNrKTsKLX0KLQot c3RhdGljIHZvaWQgZHBfY2F0YWxvZ19jdHJsX3BoeV9yZXNldChzdHJ1Y3QgZHBfY2F0YWxvZ19j dHJsICpjdHJsKQotewotCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Ci0Jdm9p ZCBfX2lvbWVtICpiYXNlOwotCi0JaWYgKCFjdHJsKSB7Ci0JCXByX2VycigiaW52YWxpZCBpbnB1 dFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwotCWJh c2UgPSBjYXRhbG9nLT5pby0+Y3RybF9pby5iYXNlOwotCi0JZHBfd3JpdGUoYmFzZSArIERQX1BI WV9DVFJMLCAweDUpOyAvKiBiaXQgMCAmIDIgKi8KLQl1c2xlZXBfcmFuZ2UoMTAwMCwgMTAxMCk7 IC8qIGgvdyByZWNvbW1lbmRlZCBkZWxheSAqLwotCWRwX3dyaXRlKGJhc2UgKyBEUF9QSFlfQ1RS TCwgMHgwKTsKLQl3bWIoKTsgLyogbWFrZSBzdXJlIFBIWSByZXNldCBkb25lICovCi19Ci0KLXN0 YXRpYyB2b2lkIGRwX2NhdGFsb2dfY3RybF9waHlfbGFuZV9jZmcoc3RydWN0IGRwX2NhdGFsb2df Y3RybCAqY3RybCwKLQkJYm9vbCBmbGlwcGVkLCB1OCBsbl9jbnQpCi17Ci0JdTMyIGluZm8gPSAw eDA7Ci0Jc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKLQl1OCBvcmllbnRhdGlv biA9IEJJVCghIWZsaXBwZWQpOwotCi0JaWYgKCFjdHJsKSB7Ci0JCXByX2VycigiaW52YWxpZCBp bnB1dFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwot Ci0JaW5mbyB8PSAobG5fY250ICYgMHgwRik7Ci0JaW5mbyB8PSAoKG9yaWVudGF0aW9uICYgMHgw RikgPDwgNCk7Ci0JcHJfZGVidWcoIlNoYXJlZCBJbmZvID0gMHgleFxuIiwgaW5mbyk7Ci0KLQlk cF93cml0ZShjYXRhbG9nLT5pby0+cGh5X2lvLmJhc2UgKyBEUF9QSFlfU1BBUkUwLCBpbmZvKTsK LX0KLQotc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19jdHJsX3VwZGF0ZV92eF9weChzdHJ1Y3QgZHBf Y2F0YWxvZ19jdHJsICpjdHJsLAotCQl1OCB2X2xldmVsLCB1OCBwX2xldmVsKQotewotCXN0cnVj dCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlMCwgKmJh c2UxOwotCXU4IHZhbHVlMCwgdmFsdWUxOwotCi0JaWYgKCFjdHJsKSB7Ci0JCXByX2VycigiaW52 YWxpZCBpbnB1dFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlkcF9jYXRhbG9nX2dldF9wcml2KGN0 cmwpOwotCWJhc2UwID0gY2F0YWxvZy0+aW8tPmxuX3R4MF9pby5iYXNlOwotCWJhc2UxID0gY2F0 YWxvZy0+aW8tPmxuX3R4MV9pby5iYXNlOwotCi0JcHJfZGVidWcoImh3OiB2PSVkIHA9JWRcbiIs IHZfbGV2ZWwsIHBfbGV2ZWwpOwotCi0JdmFsdWUwID0gdm1fdm9sdGFnZV9zd2luZ1t2X2xldmVs XVtwX2xldmVsXTsKLQl2YWx1ZTEgPSB2bV9wcmVfZW1waGFzaXNbdl9sZXZlbF1bcF9sZXZlbF07 Ci0KLQkvKiBwcm9ncmFtIGRlZmF1bHQgc2V0dGluZyBmaXJzdCAqLwotCWRwX3dyaXRlKGJhc2Uw ICsgVFhuX1RYX0RSVl9MVkwsIDB4MkEpOwotCWRwX3dyaXRlKGJhc2UxICsgVFhuX1RYX0RSVl9M VkwsIDB4MkEpOwotCWRwX3dyaXRlKGJhc2UwICsgVFhuX1RYX0VNUF9QT1NUMV9MVkwsIDB4MjAp OwotCWRwX3dyaXRlKGJhc2UxICsgVFhuX1RYX0VNUF9QT1NUMV9MVkwsIDB4MjApOwotCi0JLyog RW5hYmxlIE1VWCB0byB1c2UgQ3Vyc29yIHZhbHVlcyBmcm9tIHRoZXNlIHJlZ2lzdGVycyAqLwot CXZhbHVlMCB8PSBCSVQoNSk7Ci0JdmFsdWUxIHw9IEJJVCg1KTsKLQotCS8qIENvbmZpZ3VyZSBo b3N0IGFuZCBwYW5lbCBvbmx5IGlmIGJvdGggdmFsdWVzIGFyZSBhbGxvd2VkICovCi0JaWYgKHZh bHVlMCAhPSAweEZGICYmIHZhbHVlMSAhPSAweEZGKSB7Ci0JCWRwX3dyaXRlKGJhc2UwICsgVFhu X1RYX0RSVl9MVkwsIHZhbHVlMCk7Ci0JCWRwX3dyaXRlKGJhc2UxICsgVFhuX1RYX0RSVl9MVkws IHZhbHVlMCk7Ci0JCWRwX3dyaXRlKGJhc2UwICsgVFhuX1RYX0VNUF9QT1NUMV9MVkwsIHZhbHVl MSk7Ci0JCWRwX3dyaXRlKGJhc2UxICsgVFhuX1RYX0VNUF9QT1NUMV9MVkwsIHZhbHVlMSk7Ci0K LQkJcHJfZGVidWcoImh3OiB2eF92YWx1ZT0weCV4IHB4X3ZhbHVlPTB4JXhcbiIsCi0JCQl2YWx1 ZTAsIHZhbHVlMSk7Ci0JfSBlbHNlIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHZ4ICgweCV4PTB4JXgp LCBweCAoMHgleD0weCV4XG4iLAotCQkJdl9sZXZlbCwgdmFsdWUwLCBwX2xldmVsLCB2YWx1ZTEp OwotCX0KLX0KLQotc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19jdHJsX3NlbmRfcGh5X3BhdHRlcm4o c3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwKLQkJCXUzMiBwYXR0ZXJuKQotewotCXN0cnVj dCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Ci0JdTMyIHZhbHVlID0gMHgwOwotCXZvaWQg X19pb21lbSAqYmFzZSA9IE5VTEw7Ci0KLQlpZiAoIWN0cmwpIHsKLQkJcHJfZXJyKCJpbnZhbGlk IGlucHV0XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7 Ci0KLQliYXNlID0gY2F0YWxvZy0+aW8tPmN0cmxfaW8uYmFzZTsKLQotCWRwX3dyaXRlKGJhc2Ug KyBEUF9TVEFURV9DVFJMLCAweDApOwotCi0Jc3dpdGNoIChwYXR0ZXJuKSB7Ci0JY2FzZSBEUF9U RVNUX1BIWV9QQVRURVJOX0QxMF8yX05PX1NDUkFNQkxJTkc6Ci0JCWRwX3dyaXRlKGJhc2UgKyBE UF9TVEFURV9DVFJMLCAweDEpOwotCQlicmVhazsKLQljYXNlIERQX1RFU1RfUEhZX1BBVFRFUk5f U1lNQk9MX0VSUl9NRUFTVVJFTUVOVF9DTlQ6Ci0JCXZhbHVlICY9IH4oMSA8PCAxNik7Ci0JCWRw X3dyaXRlKGJhc2UgKyBEUF9IQlIyX0NPTVBMSUFOQ0VfU0NSQU1CTEVSX1JFU0VULCB2YWx1ZSk7 Ci0JCXZhbHVlIHw9IDB4RkM7Ci0JCWRwX3dyaXRlKGJhc2UgKyBEUF9IQlIyX0NPTVBMSUFOQ0Vf U0NSQU1CTEVSX1JFU0VULCB2YWx1ZSk7Ci0JCWRwX3dyaXRlKGJhc2UgKyBEUF9NQUlOTElOS19M RVZFTFMsIDB4Mik7Ci0JCWRwX3dyaXRlKGJhc2UgKyBEUF9TVEFURV9DVFJMLCAweDEwKTsKLQkJ YnJlYWs7Ci0JY2FzZSBEUF9URVNUX1BIWV9QQVRURVJOX1BSQlM3OgotCQlkcF93cml0ZShiYXNl ICsgRFBfU1RBVEVfQ1RSTCwgMHgyMCk7Ci0JCWJyZWFrOwotCWNhc2UgRFBfVEVTVF9QSFlfUEFU VEVSTl84MF9CSVRfQ1VTVE9NX1BBVFRFUk46Ci0JCWRwX3dyaXRlKGJhc2UgKyBEUF9TVEFURV9D VFJMLCAweDQwKTsKLQkJLyogMDAxMTExMTAwMDAwMTExMTEwMDAwMDExMTExMDAwMDAgKi8KLQkJ ZHBfd3JpdGUoYmFzZSArIERQX1RFU1RfODBCSVRfQ1VTVE9NX1BBVFRFUk5fUkVHMCwgMHgzRTBG ODNFMCk7Ci0JCS8qIDAwMDAxMTExMTAwMDAwMTExMTEwMDAwMDExMTExMDAwICovCi0JCWRwX3dy aXRlKGJhc2UgKyBEUF9URVNUXzgwQklUX0NVU1RPTV9QQVRURVJOX1JFRzEsIDB4MEY4M0UwRjgp OwotCQkvKiAxMTExMTAwMDAwMTExMTEwICovCi0JCWRwX3dyaXRlKGJhc2UgKyBEUF9URVNUXzgw QklUX0NVU1RPTV9QQVRURVJOX1JFRzIsIDB4MDAwMEY4M0UpOwotCQlicmVhazsKLQljYXNlIERQ X1RFU1RfUEhZX1BBVFRFUk5fSEJSMl9DVFNfRVlFX1BBVFRFUk46Ci0JCXZhbHVlID0gQklUKDE2 KTsKLQkJZHBfd3JpdGUoYmFzZSArIERQX0hCUjJfQ09NUExJQU5DRV9TQ1JBTUJMRVJfUkVTRVQs IHZhbHVlKTsKLQkJdmFsdWUgfD0gMHhGQzsKLQkJZHBfd3JpdGUoYmFzZSArIERQX0hCUjJfQ09N UExJQU5DRV9TQ1JBTUJMRVJfUkVTRVQsIHZhbHVlKTsKLQkJZHBfd3JpdGUoYmFzZSArIERQX01B SU5MSU5LX0xFVkVMUywgMHgyKTsKLQkJZHBfd3JpdGUoYmFzZSArIERQX1NUQVRFX0NUUkwsIDB4 MTApOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcl9kZWJ1ZygiTm8gdmFsaWQgdGVzdCBwYXR0 ZXJuIHJlcXVlc3RlZDogMHgleFxuIiwgcGF0dGVybik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBN YWtlIHN1cmUgdGhlIHRlc3QgcGF0dGVybiBpcyBwcm9ncmFtbWVkIGluIHRoZSBoYXJkd2FyZSAq LwotCXdtYigpOwotfQotCi1zdGF0aWMgdTMyIGRwX2NhdGFsb2dfY3RybF9yZWFkX3BoeV9wYXR0 ZXJuKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwpCi17Ci0Jc3RydWN0IGRwX2NhdGFsb2df cHJpdmF0ZSAqY2F0YWxvZzsKLQl2b2lkIF9faW9tZW0gKmJhc2UgPSBOVUxMOwotCi0JaWYgKCFj dHJsKSB7Ci0JCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQot CWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7Ci0KLQliYXNlID0gY2F0YWxvZy0+aW8tPmN0cmxf aW8uYmFzZTsKLQotCXJldHVybiBkcF9yZWFkKGJhc2UgKyBEUF9NQUlOTElOS19SRUFEWSk7Ci19 Ci0KLS8qIHBhbmVsIHJlbGF0ZWQgY2F0YWxvZyBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQgZHBf Y2F0YWxvZ19wYW5lbF90aW1pbmdfY2ZnKHN0cnVjdCBkcF9jYXRhbG9nX3BhbmVsICpwYW5lbCkK LXsKLQlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwotCXZvaWQgX19pb21lbSAq YmFzZTsKLQotCWlmICghcGFuZWwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKLQkJ Z290byBlbmQ7Ci0JfQotCi0JZHBfY2F0YWxvZ19nZXRfcHJpdihwYW5lbCk7Ci0JYmFzZSA9IGNh dGFsb2ctPmlvLT5jdHJsX2lvLmJhc2U7Ci0KLQlkcF93cml0ZShiYXNlICsgRFBfVE9UQUxfSE9S X1ZFUiwgcGFuZWwtPnRvdGFsKTsKLQlkcF93cml0ZShiYXNlICsgRFBfU1RBUlRfSE9SX1ZFUl9G Uk9NX1NZTkMsIHBhbmVsLT5zeW5jX3N0YXJ0KTsKLQlkcF93cml0ZShiYXNlICsgRFBfSFNZTkNf VlNZTkNfV0lEVEhfUE9MQVJJVFksIHBhbmVsLT53aWR0aF9ibGFua2luZyk7Ci0JZHBfd3JpdGUo YmFzZSArIERQX0FDVElWRV9IT1JfVkVSLCBwYW5lbC0+ZHBfYWN0aXZlKTsKLWVuZDoKLQlyZXR1 cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19hdWRpb19pbml0KHN0cnVjdCBkcF9j YXRhbG9nX2F1ZGlvICphdWRpbykKLXsKLQlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRh bG9nOwotCXN0YXRpYyB1MzIgc2RwX21hcFtdW0RQX0FVRElPX1NEUF9IRUFERVJfTUFYXSA9IHsK LQkJewotCQkJTU1TU19EUF9BVURJT19TVFJFQU1fMCwKLQkJCU1NU1NfRFBfQVVESU9fU1RSRUFN XzEsCi0JCQlNTVNTX0RQX0FVRElPX1NUUkVBTV8xLAotCQl9LAotCQl7Ci0JCQlNTVNTX0RQX0FV RElPX1RJTUVTVEFNUF8wLAotCQkJTU1TU19EUF9BVURJT19USU1FU1RBTVBfMSwKLQkJCU1NU1Nf RFBfQVVESU9fVElNRVNUQU1QXzEsCi0JCX0sCi0JCXsKLQkJCU1NU1NfRFBfQVVESU9fSU5GT0ZS QU1FXzAsCi0JCQlNTVNTX0RQX0FVRElPX0lORk9GUkFNRV8xLAotCQkJTU1TU19EUF9BVURJT19J TkZPRlJBTUVfMSwKLQkJfSwKLQkJewotCQkJTU1TU19EUF9BVURJT19DT1BZTUFOQUdFTUVOVF8w LAotCQkJTU1TU19EUF9BVURJT19DT1BZTUFOQUdFTUVOVF8xLAotCQkJTU1TU19EUF9BVURJT19D T1BZTUFOQUdFTUVOVF8xLAotCQl9LAotCQl7Ci0JCQlNTVNTX0RQX0FVRElPX0lTUkNfMCwKLQkJ CU1NU1NfRFBfQVVESU9fSVNSQ18xLAotCQkJTU1TU19EUF9BVURJT19JU1JDXzEsCi0JCX0sCi0J fTsKLQotCWlmICghYXVkaW8pCi0JCXJldHVybjsKLQotCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXVk aW8pOwotCi0JY2F0YWxvZy0+YXVkaW9fbWFwID0gc2RwX21hcDsKLX0KLQotc3RhdGljIHZvaWQg ZHBfY2F0YWxvZ19hdWRpb19jb25maWdfc2RwKHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvICphdWRp bykKLXsKLQlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwotCXZvaWQgX19pb21l bSAqYmFzZTsKLQl1MzIgc2RwX2NmZyA9IDA7Ci0JdTMyIHNkcF9jZmcyID0gMDsKLQotCWlmICgh YXVkaW8pCi0JCXJldHVybjsKLQotCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXVkaW8pOwotCWJhc2Ug PSBjYXRhbG9nLT5pby0+Y3RybF9pby5iYXNlOwotCi0JLyogQVVESU9fVElNRVNUQU1QX1NEUF9F TiAqLwotCXNkcF9jZmcgfD0gQklUKDEpOwotCS8qIEFVRElPX1NUUkVBTV9TRFBfRU4gKi8KLQlz ZHBfY2ZnIHw9IEJJVCgyKTsKLQkvKiBBVURJT19DT1BZX01BTkFHRU1FTlRfU0RQX0VOICovCi0J c2RwX2NmZyB8PSBCSVQoNSk7Ci0JLyogQVVESU9fSVNSQ19TRFBfRU4gICovCi0Jc2RwX2NmZyB8 PSBCSVQoNik7Ci0JLyogQVVESU9fSU5GT0ZSQU1FX1NEUF9FTiAgKi8KLQlzZHBfY2ZnIHw9IEJJ VCgyMCk7Ci0KLQlwcl9kZWJ1Zygic2RwX2NmZyA9IDB4JXhcbiIsIHNkcF9jZmcpOwotCWRwX3dy aXRlKGJhc2UgKyBNTVNTX0RQX1NEUF9DRkcsIHNkcF9jZmcpOwotCi0Jc2RwX2NmZzIgPSBkcF9y ZWFkKGJhc2UgKyBNTVNTX0RQX1NEUF9DRkcyKTsKLQkvKiBJRlJNX1JFR1NSQyAtPiBEbyBub3Qg dXNlIHJlZyB2YWx1ZXMgKi8KLQlzZHBfY2ZnMiAmPSB+QklUKDApOwotCS8qIEFVRElPX1NUUkVB TV9IQjNfUkVHU1JDLT4gRG8gbm90IHVzZSByZWcgdmFsdWVzICovCi0Jc2RwX2NmZzIgJj0gfkJJ VCgxKTsKLQotCXByX2RlYnVnKCJzZHBfY2ZnMiA9IDB4JXhcbiIsIHNkcF9jZmcyKTsKLQlkcF93 cml0ZShiYXNlICsgTU1TU19EUF9TRFBfQ0ZHMiwgc2RwX2NmZzIpOwotfQotCi1zdGF0aWMgdm9p ZCBkcF9jYXRhbG9nX2F1ZGlvX2dldF9oZWFkZXIoc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gKmF1 ZGlvKQotewotCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Ci0JdTMyICgqc2Rw X21hcClbRFBfQVVESU9fU0RQX0hFQURFUl9NQVhdOwotCXZvaWQgX19pb21lbSAqYmFzZTsKLQll bnVtIGRwX2NhdGFsb2dfYXVkaW9fc2RwX3R5cGUgc2RwOwotCWVudW0gZHBfY2F0YWxvZ19hdWRp b19oZWFkZXJfdHlwZSBoZWFkZXI7Ci0KLQlpZiAoIWF1ZGlvKQotCQlyZXR1cm47Ci0KLQlkcF9j YXRhbG9nX2dldF9wcml2KGF1ZGlvKTsKLQotCWJhc2UgICAgPSBjYXRhbG9nLT5pby0+Y3RybF9p by5iYXNlOwotCXNkcF9tYXAgPSBjYXRhbG9nLT5hdWRpb19tYXA7Ci0Jc2RwICAgICA9IGF1ZGlv LT5zZHBfdHlwZTsKLQloZWFkZXIgID0gYXVkaW8tPnNkcF9oZWFkZXI7Ci0KLQlhdWRpby0+ZGF0 YSA9IGRwX3JlYWQoYmFzZSArIHNkcF9tYXBbc2RwXVtoZWFkZXJdKTsKLX0KLQotc3RhdGljIHZv aWQgZHBfY2F0YWxvZ19hdWRpb19zZXRfaGVhZGVyKHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvICph dWRpbykKLXsKLQlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwotCXUzMiAoKnNk cF9tYXApW0RQX0FVRElPX1NEUF9IRUFERVJfTUFYXTsKLQl2b2lkIF9faW9tZW0gKmJhc2U7Ci0J ZW51bSBkcF9jYXRhbG9nX2F1ZGlvX3NkcF90eXBlIHNkcDsKLQllbnVtIGRwX2NhdGFsb2dfYXVk aW9faGVhZGVyX3R5cGUgaGVhZGVyOwotCXUzMiBkYXRhOwotCi0JaWYgKCFhdWRpbykKLQkJcmV0 dXJuOwotCi0JZHBfY2F0YWxvZ19nZXRfcHJpdihhdWRpbyk7Ci0KLQliYXNlICAgID0gY2F0YWxv Zy0+aW8tPmN0cmxfaW8uYmFzZTsKLQlzZHBfbWFwID0gY2F0YWxvZy0+YXVkaW9fbWFwOwotCXNk cCAgICAgPSBhdWRpby0+c2RwX3R5cGU7Ci0JaGVhZGVyICA9IGF1ZGlvLT5zZHBfaGVhZGVyOwot CWRhdGEgICAgPSBhdWRpby0+ZGF0YTsKLQotCWRwX3dyaXRlKGJhc2UgKyBzZHBfbWFwW3NkcF1b aGVhZGVyXSwgZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2NhdGFsb2dfYXVkaW9fY29uZmln X2FjcihzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAqYXVkaW8pCi17Ci0Jc3RydWN0IGRwX2NhdGFs b2dfcHJpdmF0ZSAqY2F0YWxvZzsKLQl2b2lkIF9faW9tZW0gKmJhc2U7Ci0JdTMyIGFjcl9jdHJs LCBzZWxlY3Q7Ci0KLQlkcF9jYXRhbG9nX2dldF9wcml2KGF1ZGlvKTsKLQotCXNlbGVjdCA9IGF1 ZGlvLT5kYXRhOwotCWJhc2UgICA9IGNhdGFsb2ctPmlvLT5jdHJsX2lvLmJhc2U7Ci0KLQlhY3Jf Y3RybCA9IHNlbGVjdCA8PCA0IHwgQklUKDMxKSB8IEJJVCg4KSB8IEJJVCgxNCk7Ci0KLQlwcl9k ZWJ1Zygic2VsZWN0ID0gMHgleCwgYWNyX2N0cmwgPSAweCV4XG4iLCBzZWxlY3QsIGFjcl9jdHJs KTsKLQotCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX0FVRElPX0FDUl9DVFJMLCBhY3JfY3RybCk7 Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2NhdGFsb2dfYXVkaW9fc2FmZV90b19leGl0X2xldmVsKHN0 cnVjdCBkcF9jYXRhbG9nX2F1ZGlvICphdWRpbykKLXsKLQlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2 YXRlICpjYXRhbG9nOwotCXZvaWQgX19pb21lbSAqYmFzZTsKLQl1MzIgbWFpbmxpbmtfbGV2ZWxz LCBzYWZlX3RvX2V4aXRfbGV2ZWw7Ci0KLQlkcF9jYXRhbG9nX2dldF9wcml2KGF1ZGlvKTsKLQot CWJhc2UgICA9IGNhdGFsb2ctPmlvLT5jdHJsX2lvLmJhc2U7Ci0Jc2FmZV90b19leGl0X2xldmVs ID0gYXVkaW8tPmRhdGE7Ci0KLQltYWlubGlua19sZXZlbHMgPSBkcF9yZWFkKGJhc2UgKyBEUF9N QUlOTElOS19MRVZFTFMpOwotCW1haW5saW5rX2xldmVscyAmPSAweEZFMDsKLQltYWlubGlua19s ZXZlbHMgfD0gc2FmZV90b19leGl0X2xldmVsOwotCi0JcHJfZGVidWcoIm1haW5saW5rX2xldmVs ID0gMHgleCwgc2FmZV90b19leGl0X2xldmVsID0gMHgleFxuIiwKLQkJCW1haW5saW5rX2xldmVs cywgc2FmZV90b19leGl0X2xldmVsKTsKLQotCWRwX3dyaXRlKGJhc2UgKyBEUF9NQUlOTElOS19M RVZFTFMsIG1haW5saW5rX2xldmVscyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2NhdGFsb2dfYXVk aW9fZW5hYmxlKHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvICphdWRpbykKLXsKLQlzdHJ1Y3QgZHBf Y2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwotCXZvaWQgX19pb21lbSAqYmFzZTsKLQlib29sIGVu YWJsZTsKLQl1MzIgYXVkaW9fY3RybDsKLQotCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXVkaW8pOwot Ci0JYmFzZSAgID0gY2F0YWxvZy0+aW8tPmN0cmxfaW8uYmFzZTsKLQllbmFibGUgPSAhIWF1ZGlv LT5kYXRhOwotCi0JYXVkaW9fY3RybCA9IGRwX3JlYWQoYmFzZSArIE1NU1NfRFBfQVVESU9fQ0ZH KTsKLQotCWlmIChlbmFibGUpCi0JCWF1ZGlvX2N0cmwgfD0gQklUKDApOwotCWVsc2UKLQkJYXVk aW9fY3RybCAmPSB+QklUKDApOwotCi0JcHJfZGVidWcoImRwX2F1ZGlvX2NmZyA9IDB4JXhcbiIs IGF1ZGlvX2N0cmwpOwotCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX0FVRElPX0NGRywgYXVkaW9f Y3RybCk7Ci0KLQkvKiBtYWtlIHN1cmUgYXVkaW8gZW5naW5lIGlzIGRpc2FibGVkICovCi0Jd21i KCk7Ci19Ci0KLXN0cnVjdCBkcF9jYXRhbG9nICpkcF9jYXRhbG9nX2dldChzdHJ1Y3QgZGV2aWNl ICpkZXYsIHN0cnVjdCBkcF9pbyAqaW8pCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHBfY2F0 YWxvZyAqZHBfY2F0YWxvZzsKLQlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwot CXN0cnVjdCBkcF9jYXRhbG9nX2F1eCBhdXggPSB7Ci0JCS5yZWFkX2RhdGEgICAgID0gZHBfY2F0 YWxvZ19hdXhfcmVhZF9kYXRhLAotCQkud3JpdGVfZGF0YSAgICA9IGRwX2NhdGFsb2dfYXV4X3dy aXRlX2RhdGEsCi0JCS53cml0ZV90cmFucyAgID0gZHBfY2F0YWxvZ19hdXhfd3JpdGVfdHJhbnMs Ci0JCS5jbGVhcl90cmFucyAgID0gZHBfY2F0YWxvZ19hdXhfY2xlYXJfdHJhbnMsCi0JCS5yZXNl dCAgICAgICAgID0gZHBfY2F0YWxvZ19hdXhfcmVzZXQsCi0JCS51cGRhdGVfYXV4X2NmZyA9IGRw X2NhdGFsb2dfYXV4X3VwZGF0ZV9jZmcsCi0JCS5lbmFibGUgICAgICAgID0gZHBfY2F0YWxvZ19h dXhfZW5hYmxlLAotCQkuc2V0dXAgICAgICAgICA9IGRwX2NhdGFsb2dfYXV4X3NldHVwLAotCQku Z2V0X2lycSAgICAgICA9IGRwX2NhdGFsb2dfYXV4X2dldF9pcnEsCi0JfTsKLQlzdHJ1Y3QgZHBf Y2F0YWxvZ19jdHJsIGN0cmwgPSB7Ci0JCS5zdGF0ZV9jdHJsICAgICA9IGRwX2NhdGFsb2dfY3Ry bF9zdGF0ZV9jdHJsLAotCQkuY29uZmlnX2N0cmwgICAgPSBkcF9jYXRhbG9nX2N0cmxfY29uZmln X2N0cmwsCi0JCS5sYW5lX21hcHBpbmcgICA9IGRwX2NhdGFsb2dfY3RybF9sYW5lX21hcHBpbmcs Ci0JCS5tYWlubGlua19jdHJsICA9IGRwX2NhdGFsb2dfY3RybF9tYWlubGlua19jdHJsLAotCQku Y29uZmlnX21pc2MgICAgPSBkcF9jYXRhbG9nX2N0cmxfY29uZmlnX21pc2MsCi0JCS5jb25maWdf bXNhICAgICA9IGRwX2NhdGFsb2dfY3RybF9jb25maWdfbXNhLAotCQkuc2V0X3BhdHRlcm4gICAg PSBkcF9jYXRhbG9nX2N0cmxfc2V0X3BhdHRlcm4sCi0JCS5yZXNldCAgICAgICAgICA9IGRwX2Nh dGFsb2dfY3RybF9yZXNldCwKLQkJLnVzYl9yZXNldCAgICAgID0gZHBfY2F0YWxvZ19jdHJsX3Vz Yl9yZXNldCwKLQkJLm1haW5saW5rX3JlYWR5ID0gZHBfY2F0YWxvZ19jdHJsX21haW5saW5rX3Jl YWR5LAotCQkuZW5hYmxlX2lycSAgICAgPSBkcF9jYXRhbG9nX2N0cmxfZW5hYmxlX2lycSwKLQkJ LmhwZF9jb25maWcgICAgID0gZHBfY2F0YWxvZ19jdHJsX2hwZF9jb25maWcsCi0JCS5waHlfcmVz ZXQgICAgICA9IGRwX2NhdGFsb2dfY3RybF9waHlfcmVzZXQsCi0JCS5waHlfbGFuZV9jZmcgICA9 IGRwX2NhdGFsb2dfY3RybF9waHlfbGFuZV9jZmcsCi0JCS51cGRhdGVfdnhfcHggICA9IGRwX2Nh dGFsb2dfY3RybF91cGRhdGVfdnhfcHgsCi0JCS5nZXRfaW50ZXJydXB0ICA9IGRwX2NhdGFsb2df Y3RybF9nZXRfaW50ZXJydXB0LAotCQkuY29uZmlnX2hkciAgICAgPSBkcF9jYXRhbG9nX2N0cmxf Y29uZmlnX2hkciwKLQkJLnVwZGF0ZV90cmFuc2Zlcl91bml0ID0gZHBfY2F0YWxvZ19jdHJsX3Vw ZGF0ZV90cmFuc2Zlcl91bml0LAotCQkucmVhZF9oZGNwX3N0YXR1cyAgICAgPSBkcF9jYXRhbG9n X2N0cmxfcmVhZF9oZGNwX3N0YXR1cywKLQkJLnNlbmRfcGh5X3BhdHRlcm4gICAgPSBkcF9jYXRh bG9nX2N0cmxfc2VuZF9waHlfcGF0dGVybiwKLQkJLnJlYWRfcGh5X3BhdHRlcm4gPSBkcF9jYXRh bG9nX2N0cmxfcmVhZF9waHlfcGF0dGVybiwKLQl9OwotCXN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlv IGF1ZGlvID0gewotCQkuaW5pdCAgICAgICA9IGRwX2NhdGFsb2dfYXVkaW9faW5pdCwKLQkJLmNv bmZpZ19hY3IgPSBkcF9jYXRhbG9nX2F1ZGlvX2NvbmZpZ19hY3IsCi0JCS5lbmFibGUgICAgID0g ZHBfY2F0YWxvZ19hdWRpb19lbmFibGUsCi0JCS5jb25maWdfc2RwID0gZHBfY2F0YWxvZ19hdWRp b19jb25maWdfc2RwLAotCQkuc2V0X2hlYWRlciA9IGRwX2NhdGFsb2dfYXVkaW9fc2V0X2hlYWRl ciwKLQkJLmdldF9oZWFkZXIgPSBkcF9jYXRhbG9nX2F1ZGlvX2dldF9oZWFkZXIsCi0JCS5zYWZl X3RvX2V4aXRfbGV2ZWwgPSBkcF9jYXRhbG9nX2F1ZGlvX3NhZmVfdG9fZXhpdF9sZXZlbCwKLQl9 OwotCXN0cnVjdCBkcF9jYXRhbG9nX3BhbmVsIHBhbmVsID0gewotCQkudGltaW5nX2NmZyA9IGRw X2NhdGFsb2dfcGFuZWxfdGltaW5nX2NmZywKLQl9OwotCi0JaWYgKCFpbykgewotCQlwcl9lcnIo ImludmFsaWQgaW5wdXRcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQot Ci0JY2F0YWxvZyAgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmNhdGFsb2cpLCBHRlBfS0VS TkVMKTsKLQlpZiAoIWNhdGFsb2cpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yOwot CX0KLQotCWNhdGFsb2ctPmRldiA9IGRldjsKLQljYXRhbG9nLT5pbyA9IGlvOwotCi0JZHBfY2F0 YWxvZyA9ICZjYXRhbG9nLT5kcF9jYXRhbG9nOwotCi0JZHBfY2F0YWxvZy0+YXV4ICAgPSBhdXg7 Ci0JZHBfY2F0YWxvZy0+Y3RybCAgPSBjdHJsOwotCWRwX2NhdGFsb2ctPmF1ZGlvID0gYXVkaW87 Ci0JZHBfY2F0YWxvZy0+cGFuZWwgPSBwYW5lbDsKLQotCXJldHVybiBkcF9jYXRhbG9nOwotZXJy b3I6Ci0JcmV0dXJuIEVSUl9QVFIocmMpOwotfQotCi12b2lkIGRwX2NhdGFsb2dfcHV0KHN0cnVj dCBkcF9jYXRhbG9nICpkcF9jYXRhbG9nKQotewotCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUg KmNhdGFsb2c7Ci0KLQlpZiAoIWRwX2NhdGFsb2cpCi0JCXJldHVybjsKLQotCWNhdGFsb2cgPSBj b250YWluZXJfb2YoZHBfY2F0YWxvZywgc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSwKLQkJCQlk cF9jYXRhbG9nKTsKLQotCWRldm1fa2ZyZWUoY2F0YWxvZy0+ZGV2LCBjYXRhbG9nKTsKLX0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5oIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kcC9kcF9jYXRhbG9nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDEyYjVhZDkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jYXRhbG9n LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykg MjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq Ci0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgotICoKLSAqLwotCi0jaWZuZGVmIF9EUF9DQVRBTE9HX0hfCi0jZGVmaW5lIF9EUF9D QVRBTE9HX0hfCi0KLSNpbmNsdWRlICJkcF9wYXJzZXIuaCIKLQotLyogaW50ZXJydXB0cyAqLwot I2RlZmluZSBEUF9JTlRSX0hQRAkJQklUKDApCi0jZGVmaW5lIERQX0lOVFJfQVVYX0kyQ19ET05F CUJJVCgzKQotI2RlZmluZSBEUF9JTlRSX1dST05HX0FERFIJQklUKDYpCi0jZGVmaW5lIERQX0lO VFJfVElNRU9VVAkJQklUKDkpCi0jZGVmaW5lIERQX0lOVFJfTkFDS19ERUZFUglCSVQoMTIpCi0j ZGVmaW5lIERQX0lOVFJfV1JPTkdfREFUQV9DTlQJQklUKDE1KQotI2RlZmluZSBEUF9JTlRSX0ky Q19OQUNLCUJJVCgxOCkKLSNkZWZpbmUgRFBfSU5UUl9JMkNfREVGRVIJQklUKDIxKQotI2RlZmlu ZSBEUF9JTlRSX1BMTF9VTkxPQ0tFRAlCSVQoMjQpCi0jZGVmaW5lIERQX0lOVFJfQVVYX0VSUk9S CUJJVCgyNykKLQotI2RlZmluZSBEUF9JTlRSX1JFQURZX0ZPUl9WSURFTwkJQklUKDApCi0jZGVm aW5lIERQX0lOVFJfSURMRV9QQVRURVJOX1NFTlQJQklUKDMpCi0jZGVmaW5lIERQX0lOVFJfRlJB TUVfRU5ECQlCSVQoNikKLSNkZWZpbmUgRFBfSU5UUl9DUkNfVVBEQVRFRAkJQklUKDkpCi0KLSNk ZWZpbmUgSERSX1BSSU1BUklFU19DT1VOVCAgIDMKLQotc3RydWN0IGRwX2NhdGFsb2dfaGRyX2Rh dGEgewotCXUzMiB2c2NfaGRyX2J5dGUwOwotCXUzMiB2c2NfaGRyX2J5dGUxOwotCXUzMiB2c2Nf aGRyX2J5dGUyOwotCXUzMiB2c2NfaGRyX2J5dGUzOwotCXUzMiBwa3RfcGF5bG9hZDsKLQotCXUz MiBicGM7Ci0KLQl1MzIgdmVyc2lvbjsKLQl1MzIgbGVuZ3RoOwotCXUzMiBlb3RmOwotCXUzMiBk ZXNjcmlwdG9yX2lkOwotCi0JdTMyIGRpc3BsYXlfcHJpbWFyaWVzX3hbSERSX1BSSU1BUklFU19D T1VOVF07Ci0JdTMyIGRpc3BsYXlfcHJpbWFyaWVzX3lbSERSX1BSSU1BUklFU19DT1VOVF07Ci0J dTMyIHdoaXRlX3BvaW50X3g7Ci0JdTMyIHdoaXRlX3BvaW50X3k7Ci0JdTMyIG1heF9sdW1pbmFu Y2U7Ci0JdTMyIG1pbl9sdW1pbmFuY2U7Ci0JdTMyIG1heF9jb250ZW50X2xpZ2h0X2xldmVsOwot CXUzMiBtYXhfYXZlcmFnZV9saWdodF9sZXZlbDsKLX07Ci0KLXN0cnVjdCBkcF9jYXRhbG9nX2F1 eCB7Ci0JdTMyIGRhdGE7Ci0JdTMyIGlzcjsKLQotCXUzMiAoKnJlYWRfZGF0YSkoc3RydWN0IGRw X2NhdGFsb2dfYXV4ICphdXgpOwotCWludCAoKndyaXRlX2RhdGEpKHN0cnVjdCBkcF9jYXRhbG9n X2F1eCAqYXV4KTsKLQlpbnQgKCp3cml0ZV90cmFucykoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICph dXgpOwotCWludCAoKmNsZWFyX3RyYW5zKShzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwgYm9v bCByZWFkKTsKLQl2b2lkICgqcmVzZXQpKHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4KTsKLQl2 b2lkICgqZW5hYmxlKShzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwgYm9vbCBlbmFibGUpOwot CXZvaWQgKCp1cGRhdGVfYXV4X2NmZykoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgsCi0JCXN0 cnVjdCBkcF9hdXhfY2ZnICpjZmcsIGVudW0gZHBfcGh5X2F1eF9jb25maWdfdHlwZSB0eXBlKTsK LQl2b2lkICgqc2V0dXApKHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4LAotCQkJc3RydWN0IGRw X2F1eF9jZmcgKmF1eF9jZmcpOwotCXZvaWQgKCpnZXRfaXJxKShzdHJ1Y3QgZHBfY2F0YWxvZ19h dXggKmF1eCwgYm9vbCBjbWRfYnVzeSk7Ci19OwotCi1zdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsIHsK LQl1MzIgZHBfdHU7Ci0JdTMyIHZhbGlkX2JvdW5kYXJ5OwotCXUzMiB2YWxpZF9ib3VuZGFyeTI7 Ci0JdTMyIGlzcjsKLQlzdHJ1Y3QgZHBfY2F0YWxvZ19oZHJfZGF0YSBoZHJfZGF0YTsKLQotCXZv aWQgKCpzdGF0ZV9jdHJsKShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCB1MzIgc3RhdGUp OwotCXZvaWQgKCpjb25maWdfY3RybCkoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwgdTMy IGNvbmZpZyk7Ci0Jdm9pZCAoKmxhbmVfbWFwcGluZykoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAq Y3RybCk7Ci0Jdm9pZCAoKm1haW5saW5rX2N0cmwpKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0 cmwsIGJvb2wgZW5hYmxlKTsKLQl2b2lkICgqY29uZmlnX21pc2MpKHN0cnVjdCBkcF9jYXRhbG9n X2N0cmwgKmN0cmwsIHUzMiBjYywgdTMyIHRiKTsKLQl2b2lkICgqY29uZmlnX21zYSkoc3RydWN0 IGRwX2NhdGFsb2dfY3RybCAqY3RybCwgdTMyIHJhdGUsCi0JCQkJdTMyIHN0cmVhbV9yYXRlX2to eiwgYm9vbCBmaXhlZF9udmlkKTsKLQl2b2lkICgqc2V0X3BhdHRlcm4pKHN0cnVjdCBkcF9jYXRh bG9nX2N0cmwgKmN0cmwsIHUzMiBwYXR0ZXJuKTsKLQl2b2lkICgqcmVzZXQpKHN0cnVjdCBkcF9j YXRhbG9nX2N0cmwgKmN0cmwpOwotCXZvaWQgKCp1c2JfcmVzZXQpKHN0cnVjdCBkcF9jYXRhbG9n X2N0cmwgKmN0cmwsIGJvb2wgZmxpcCk7Ci0JYm9vbCAoKm1haW5saW5rX3JlYWR5KShzdHJ1Y3Qg ZHBfY2F0YWxvZ19jdHJsICpjdHJsKTsKLQl2b2lkICgqZW5hYmxlX2lycSkoc3RydWN0IGRwX2Nh dGFsb2dfY3RybCAqY3RybCwgYm9vbCBlbmFibGUpOwotCXZvaWQgKCpocGRfY29uZmlnKShzdHJ1 Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCBib29sIGVuYWJsZSk7Ci0Jdm9pZCAoKnBoeV9yZXNl dCkoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCk7Ci0Jdm9pZCAoKnBoeV9sYW5lX2NmZyko c3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwgYm9vbCBmbGlwcGVkLAotCQkJCXU4IGxhbmVf Y250KTsKLQl2b2lkICgqdXBkYXRlX3Z4X3B4KShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJs LCB1OCB2X2xldmVsLAotCQkJCXU4IHBfbGV2ZWwpOwotCXZvaWQgKCpnZXRfaW50ZXJydXB0KShz dHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsKTsKLQl2b2lkICgqY29uZmlnX2hkcikoc3RydWN0 IGRwX2NhdGFsb2dfY3RybCAqY3RybCk7Ci0Jdm9pZCAoKnVwZGF0ZV90cmFuc2Zlcl91bml0KShz dHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsKTsKLQl1MzIgKCpyZWFkX2hkY3Bfc3RhdHVzKShz dHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsKTsKLQl2b2lkICgqc2VuZF9waHlfcGF0dGVybiko c3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwKLQkJCXUzMiBwYXR0ZXJuKTsKLQl1MzIgKCpy ZWFkX3BoeV9wYXR0ZXJuKShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsKTsKLX07Ci0KLWVu dW0gZHBfY2F0YWxvZ19hdWRpb19zZHBfdHlwZSB7Ci0JRFBfQVVESU9fU0RQX1NUUkVBTSwKLQlE UF9BVURJT19TRFBfVElNRVNUQU1QLAotCURQX0FVRElPX1NEUF9JTkZPRlJBTUUsCi0JRFBfQVVE SU9fU0RQX0NPUFlNQU5BR0VNRU5ULAotCURQX0FVRElPX1NEUF9JU1JDLAotCURQX0FVRElPX1NE UF9NQVgsCi19OwotCi1lbnVtIGRwX2NhdGFsb2dfYXVkaW9faGVhZGVyX3R5cGUgewotCURQX0FV RElPX1NEUF9IRUFERVJfMSwKLQlEUF9BVURJT19TRFBfSEVBREVSXzIsCi0JRFBfQVVESU9fU0RQ X0hFQURFUl8zLAotCURQX0FVRElPX1NEUF9IRUFERVJfTUFYLAotfTsKLQotc3RydWN0IGRwX2Nh dGFsb2dfYXVkaW8gewotCWVudW0gZHBfY2F0YWxvZ19hdWRpb19zZHBfdHlwZSBzZHBfdHlwZTsK LQllbnVtIGRwX2NhdGFsb2dfYXVkaW9faGVhZGVyX3R5cGUgc2RwX2hlYWRlcjsKLQl1MzIgZGF0 YTsKLQotCXZvaWQgKCppbml0KShzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAqYXVkaW8pOwotCXZv aWQgKCplbmFibGUpKHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvICphdWRpbyk7Ci0Jdm9pZCAoKmNv bmZpZ19hY3IpKHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvICphdWRpbyk7Ci0Jdm9pZCAoKmNvbmZp Z19zZHApKHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvICphdWRpbyk7Ci0Jdm9pZCAoKnNldF9oZWFk ZXIpKHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvICphdWRpbyk7Ci0Jdm9pZCAoKmdldF9oZWFkZXIp KHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvICphdWRpbyk7Ci0Jdm9pZCAoKnNhZmVfdG9fZXhpdF9s ZXZlbCkoc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gKmF1ZGlvKTsKLX07Ci0KLXN0cnVjdCBkcF9j YXRhbG9nX3BhbmVsIHsKLQl1MzIgdG90YWw7Ci0JdTMyIHN5bmNfc3RhcnQ7Ci0JdTMyIHdpZHRo X2JsYW5raW5nOwotCXUzMiBkcF9hY3RpdmU7Ci0KLQlpbnQgKCp0aW1pbmdfY2ZnKShzdHJ1Y3Qg ZHBfY2F0YWxvZ19wYW5lbCAqcGFuZWwpOwotfTsKLQotc3RydWN0IGRwX2NhdGFsb2cgewotCXN0 cnVjdCBkcF9jYXRhbG9nX2F1eCBhdXg7Ci0Jc3RydWN0IGRwX2NhdGFsb2dfY3RybCBjdHJsOwot CXN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvIGF1ZGlvOwotCXN0cnVjdCBkcF9jYXRhbG9nX3BhbmVs IHBhbmVsOwotfTsKLQotc3RydWN0IGRwX2NhdGFsb2cgKmRwX2NhdGFsb2dfZ2V0KHN0cnVjdCBk ZXZpY2UgKmRldiwgc3RydWN0IGRwX2lvICppbyk7Ci12b2lkIGRwX2NhdGFsb2dfcHV0KHN0cnVj dCBkcF9jYXRhbG9nICpjYXRhbG9nKTsKLQotI2VuZGlmIC8qIF9EUF9DQVRBTE9HX0hfICovCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2N0cmwuYyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHAvZHBfY3RybC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODAz OWZlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5jCisrKyAv ZGV2L251bGwKQEAgLTEsMTQ3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEyLTIw MTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu Ci0gKgotICovCi0KLSNkZWZpbmUgcHJfZm10KGZtdCkJIltkcm0tZHBdICVzOiAiIGZtdCwgX19m dW5jX18KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGxl dGlvbi5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KLSNpbmNsdWRlICJkcF9jdHJsLmgi Ci0KLSNkZWZpbmUgRFBfS0haX1RPX0haIDEwMDAKLQotI2RlZmluZSBEUF9DVFJMX0lOVFJfUkVB RFlfRk9SX1ZJREVPICAgICBCSVQoMCkKLSNkZWZpbmUgRFBfQ1RSTF9JTlRSX0lETEVfUEFUVEVS Tl9TRU5UICBCSVQoMykKLQotLyogZHAgc3RhdGUgY3RybCAqLwotI2RlZmluZSBTVF9UUkFJTl9Q QVRURVJOXzEJCUJJVCgwKQotI2RlZmluZSBTVF9UUkFJTl9QQVRURVJOXzIJCUJJVCgxKQotI2Rl ZmluZSBTVF9UUkFJTl9QQVRURVJOXzMJCUJJVCgyKQotI2RlZmluZSBTVF9UUkFJTl9QQVRURVJO XzQJCUJJVCgzKQotI2RlZmluZSBTVF9TWU1CT0xfRVJSX1JBVEVfTUVBU1VSRU1FTlQJQklUKDQp Ci0jZGVmaW5lIFNUX1BSQlM3CQkJQklUKDUpCi0jZGVmaW5lIFNUX0NVU1RPTV84MF9CSVRfUEFU VEVSTglCSVQoNikKLSNkZWZpbmUgU1RfU0VORF9WSURFTwkJCUJJVCg3KQotI2RlZmluZSBTVF9Q VVNIX0lETEUJCQlCSVQoOCkKLQotI2RlZmluZSBNUl9MSU5LX1RSQUlOSU5HMSAgMHg4Ci0jZGVm aW5lIE1SX0xJTktfU1lNQk9MX0VSTSAweDgwCi0jZGVmaW5lIE1SX0xJTktfUFJCUzcgMHgxMDAK LSNkZWZpbmUgTVJfTElOS19DVVNUT004MCAweDIwMAotCi1zdHJ1Y3QgZHBfdmNfdHVfbWFwcGlu Z190YWJsZSB7Ci0JdTMyIHZpYzsKLQl1OCBsYW5lczsKLQl1OCBscmF0ZTsgLyogRFBfTElOS19S QVRFIC0+IDE2Mig2KSwgMjcwKDEwKSwgNTQwKDIwKSwgODEwICgzMCkgKi8KLQl1OCBicHA7Ci0J dTggdmFsaWRfYm91bmRhcnlfbGluazsKLQl1MTYgZGVsYXlfc3RhcnRfbGluazsKLQlib29sIGJv dW5kYXJ5X21vZGVyYXRpb25fZW47Ci0JdTggdmFsaWRfbG93ZXJfYm91bmRhcnlfbGluazsKLQl1 OCB1cHBlcl9ib3VuZGFyeV9jb3VudDsKLQl1OCBsb3dlcl9ib3VuZGFyeV9jb3VudDsKLQl1OCB0 dV9zaXplX21pbnVzMTsKLX07Ci0KLXN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgewotCXN0cnVjdCBk cF9jdHJsIGRwX2N0cmw7Ci0KLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGRwX2F1eCAq YXV4OwotCXN0cnVjdCBkcF9wYW5lbCAqcGFuZWw7Ci0Jc3RydWN0IGRwX2xpbmsgKmxpbms7Ci0J c3RydWN0IGRwX3Bvd2VyICpwb3dlcjsKLQlzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXI7Ci0Jc3Ry dWN0IGRwX2NhdGFsb2dfY3RybCAqY2F0YWxvZzsKLQotCXN0cnVjdCBjb21wbGV0aW9uIGlkbGVf Y29tcDsKLQlzdHJ1Y3QgY29tcGxldGlvbiB2aWRlb19jb21wOwotCi0JYm9vbCBvcmllbnRhdGlv bjsKLQlhdG9taWNfdCBhYm9ydGVkOwotCi0JdTMyIHBpeGVsX3JhdGU7Ci0JdTMyIHZpYzsKLX07 Ci0KLWVudW0gbm90aWZpY2F0aW9uX3N0YXR1cyB7Ci0JTk9USUZZX1VOS05PV04sCi0JTk9USUZZ X0NPTk5FQ1QsCi0JTk9USUZZX0RJU0NPTk5FQ1QsCi0JTk9USUZZX0NPTk5FQ1RfSVJRX0hQRCwK LQlOT1RJRllfRElTQ09OTkVDVF9JUlFfSFBELAotfTsKLQotc3RhdGljIHZvaWQgZHBfY3RybF9p ZGxlX3BhdHRlcm5zX3NlbnQoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKLXsKLQlwcl9k ZWJ1ZygiaWRsZV9wYXR0ZXJuc19zZW50XG4iKTsKLQljb21wbGV0ZSgmY3RybC0+aWRsZV9jb21w KTsKLX0KLQotc3RhdGljIHZvaWQgZHBfY3RybF92aWRlb19yZWFkeShzdHJ1Y3QgZHBfY3RybF9w cml2YXRlICpjdHJsKQotewotCXByX2RlYnVnKCJkcF92aWRlb19yZWFkeVxuIik7Ci0JY29tcGxl dGUoJmN0cmwtPnZpZGVvX2NvbXApOwotfQotCi1zdGF0aWMgdm9pZCBkcF9jdHJsX2Fib3J0KHN0 cnVjdCBkcF9jdHJsICpkcF9jdHJsKQotewotCXN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmw7 Ci0KLQlpZiAoIWRwX2N0cmwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIGlucHV0IGRhdGFcbiIpOwot CQlyZXR1cm47Ci0JfQotCi0JY3RybCA9IGNvbnRhaW5lcl9vZihkcF9jdHJsLCBzdHJ1Y3QgZHBf Y3RybF9wcml2YXRlLCBkcF9jdHJsKTsKLQotCWF0b21pY19zZXQoJmN0cmwtPmFib3J0ZWQsIDEp OwotfQotCi1zdGF0aWMgdm9pZCBkcF9jdHJsX3N0YXRlX2N0cmwoc3RydWN0IGRwX2N0cmxfcHJp dmF0ZSAqY3RybCwgdTMyIHN0YXRlKQotewotCWN0cmwtPmNhdGFsb2ctPnN0YXRlX2N0cmwoY3Ry bC0+Y2F0YWxvZywgc3RhdGUpOwotfQotCi1zdGF0aWMgdm9pZCBkcF9jdHJsX3B1c2hfaWRsZShz dHJ1Y3QgZHBfY3RybCAqZHBfY3RybCkKLXsKLQlpbnQgY29uc3QgaWRsZV9wYXR0ZXJuX2NvbXBs ZXRpb25fdGltZW91dF9tcyA9IDMgKiBIWiAvIDEwMDsKLQlzdHJ1Y3QgZHBfY3RybF9wcml2YXRl ICpjdHJsOwotCi0JaWYgKCFkcF9jdHJsKSB7Ci0JCXByX2VycigiSW52YWxpZCBpbnB1dCBkYXRh XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWN0cmwgPSBjb250YWluZXJfb2YoZHBfY3RybCwgc3Ry dWN0IGRwX2N0cmxfcHJpdmF0ZSwgZHBfY3RybCk7Ci0KLQlyZWluaXRfY29tcGxldGlvbigmY3Ry bC0+aWRsZV9jb21wKTsKLQlkcF9jdHJsX3N0YXRlX2N0cmwoY3RybCwgU1RfUFVTSF9JRExFKTsK LQotCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZjdHJsLT5pZGxlX2NvbXAsCi0J CQlpZGxlX3BhdHRlcm5fY29tcGxldGlvbl90aW1lb3V0X21zKSkKLQkJcHJfd2FybigiUFVTSF9J RExFIHBhdHRlcm4gdGltZWRvdXRcbiIpOwotCi0JcHJfZGVidWcoIm1haW5saW5rIG9mZiBkb25l XG4iKTsKLX0KLQotc3RhdGljIHZvaWQgZHBfY3RybF9jb25maWdfY3RybChzdHJ1Y3QgZHBfY3Ry bF9wcml2YXRlICpjdHJsKQotewotCXUzMiBjb25maWcgPSAwLCB0YmQ7Ci0JdTggKmRwY2QgPSBj dHJsLT5wYW5lbC0+ZHBjZDsKLQotCWNvbmZpZyB8PSAoMiA8PCAxMyk7IC8qIERlZmF1bHQtPiBM U0NMSyBESVY6IDEvNCBMQ0xLICAqLwotCWNvbmZpZyB8PSAoMCA8PCAxMSk7IC8qIFJHQiAqLwot Ci0JLyogU2NyYW1ibGVyIHJlc2V0IGVuYWJsZSAqLwotCWlmIChkcGNkW0RQX0VEUF9DT05GSUdV UkFUSU9OX0NBUF0gJiBEUF9BTFRFUk5BVEVfU0NSQU1CTEVSX1JFU0VUX0NBUCkKLQkJY29uZmln IHw9ICgxIDw8IDEwKTsKLQotCXRiZCA9IGN0cmwtPmxpbmstPmdldF90ZXN0X2JpdHNfZGVwdGgo Y3RybC0+bGluaywKLQkJCWN0cmwtPnBhbmVsLT5waW5mby5icHApOwotCi0JaWYgKHRiZCA9PSBE UF9URVNUX0JJVF9ERVBUSF9VTktOT1dOKQotCQl0YmQgPSBEUF9URVNUX0JJVF9ERVBUSF84Owot Ci0JY29uZmlnIHw9IHRiZCA8PCA4OwotCi0JLyogTnVtIG9mIExhbmVzICovCi0JY29uZmlnIHw9 ICgoY3RybC0+bGluay0+bGlua19wYXJhbXMubGFuZV9jb3VudCAtIDEpIDw8IDQpOwotCi0JaWYg KGRybV9kcF9lbmhhbmNlZF9mcmFtZV9jYXAoZHBjZCkpCi0JCWNvbmZpZyB8PSAweDQwOwotCi0J Y29uZmlnIHw9IDB4MDQ7IC8qIHByb2dyZXNzaXZlIHZpZGVvICovCi0KLQljb25maWcgfD0gMHgw MzsJLyogc3ljbiBjbG9jayAmIHN0YXRpYyBNdmlkICovCi0KLQljdHJsLT5jYXRhbG9nLT5jb25m aWdfY3RybChjdHJsLT5jYXRhbG9nLCBjb25maWcpOwotfQotCi0vKioKLSAqIGRwX2N0cmxfY29u ZmlndXJlX3NvdXJjZV9wYXJhbXMoKSAtIGNvbmZpZ3VyZXMgRFAgdHJhbnNtaXR0ZXIgc291cmNl IHBhcmFtcwotICogQGN0cmw6IERpc3BsYXkgUG9ydCBEcml2ZXIgZGF0YQotICoKLSAqIENvbmZp Z3VyZXMgdGhlIERQIHRyYW5zbWl0dGVyIHNvdXJjZSBwYXJhbXMgaW5jbHVkaW5nIGRldGFpbHMg c3VjaCBhcyBsYW5lCi0gKiBjb25maWd1cmF0aW9uLCBvdXRwdXQgZm9ybWF0IGFuZCBzaW5rL3Bh bmVsIHRpbWluZyBpbmZvcm1hdGlvbi4KLSAqLwotc3RhdGljIHZvaWQgZHBfY3RybF9jb25maWd1 cmVfc291cmNlX3BhcmFtcyhzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQotewotCXUzMiBj YywgdGI7Ci0KLQljdHJsLT5jYXRhbG9nLT5sYW5lX21hcHBpbmcoY3RybC0+Y2F0YWxvZyk7Ci0J Y3RybC0+Y2F0YWxvZy0+bWFpbmxpbmtfY3RybChjdHJsLT5jYXRhbG9nLCB0cnVlKTsKLQotCWRw X2N0cmxfY29uZmlnX2N0cmwoY3RybCk7Ci0KLQl0YiA9IGN0cmwtPmxpbmstPmdldF90ZXN0X2Jp dHNfZGVwdGgoY3RybC0+bGluaywKLQkJY3RybC0+cGFuZWwtPnBpbmZvLmJwcCk7Ci0JY2MgPSBj dHJsLT5saW5rLT5nZXRfY29sb3JpbWV0cnlfY29uZmlnKGN0cmwtPmxpbmspOwotCWN0cmwtPmNh dGFsb2ctPmNvbmZpZ19taXNjKGN0cmwtPmNhdGFsb2csIGNjLCB0Yik7Ci0JY3RybC0+cGFuZWwt PnRpbWluZ19jZmcoY3RybC0+cGFuZWwpOwotfQotCi1zdGF0aWMgdm9pZCBkcF9jdHJsX2dldF9l eHRyYV9yZXFfYnl0ZXModTY0IHJlc3VsdF92YWxpZCwKLQkJCQkJaW50IHZhbGlkX2JkYXJ5X2xp bmssCi0JCQkJCXU2NCB2YWx1ZTEsIHU2NCB2YWx1ZTIsCi0JCQkJCWJvb2wgKm5lZ2F0aXZlLCB1 NjQgKnJlc3VsdCwKLQkJCQkJdTY0IGNvbXBhcmUpCi17Ci0JKm5lZ2F0aXZlID0gZmFsc2U7Ci0J aWYgKHJlc3VsdF92YWxpZCA+PSBjb21wYXJlKSB7Ci0JCWlmICh2YWxpZF9iZGFyeV9saW5rCi0J CQkJPj0gY29tcGFyZSkKLQkJCSpyZXN1bHQgPSB2YWx1ZTEgKyB2YWx1ZTI7Ci0JCWVsc2Ugewot CQkJaWYgKHZhbHVlMSA8IHZhbHVlMikKLQkJCQkqbmVnYXRpdmUgPSB0cnVlOwotCQkJKnJlc3Vs dCA9ICh2YWx1ZTEgPj0gdmFsdWUyKSA/Ci0JCQkJKHZhbHVlMSAtIHZhbHVlMikgOiAodmFsdWUy IC0gdmFsdWUxKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmICh2YWxpZF9iZGFyeV9saW5rCi0JCQkJ Pj0gY29tcGFyZSkgewotCQkJaWYgKHZhbHVlMSA+PSB2YWx1ZTIpCi0JCQkJKm5lZ2F0aXZlID0g dHJ1ZTsKLQkJCSpyZXN1bHQgPSAodmFsdWUxID49IHZhbHVlMikgPwotCQkJCSh2YWx1ZTEgLSB2 YWx1ZTIpIDogKHZhbHVlMiAtIHZhbHVlMSk7Ci0JCX0gZWxzZSB7Ci0JCQkqcmVzdWx0ID0gdmFs dWUxICsgdmFsdWUyOwotCQkJKm5lZ2F0aXZlID0gdHJ1ZTsKLQkJfQotCX0KLX0KLQotc3RhdGlj IHU2NCByb3VuZHVwX3U2NCh1NjQgeCwgdTY0IHkpCi17Ci0JeCArPSAoeSAtIDEpOwotCXJldHVy biAoZGl2NjRfdWwoeCwgeSkgKiB5KTsKLX0KLQotc3RhdGljIHU2NCByb3VuZGRvd25fdTY0KHU2 NCB4LCB1NjQgeSkKLXsKLQl1NjQgcmVtOwotCi0JZGl2NjRfdTY0X3JlbSh4LCB5LCAmcmVtKTsK LQlyZXR1cm4gKHggLSByZW0pOwotfQotCi1zdGF0aWMgdm9pZCBkcF9jdHJsX2NhbGNfdHVfcGFy YW1ldGVycyhzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsLAotCQlzdHJ1Y3QgZHBfdmNfdHVf bWFwcGluZ190YWJsZSAqdHVfdGFibGUpCi17Ci0JdTMyIG11bHRpcGxpZXIgPSAxMDAwMDAwOwot CXU2NCBwY2xrLCBsY2xrOwotCXU4IGJwcCwgbG5fY250OwotCWludCBydW5faWR4ID0gMDsKLQl1 MzIgbHdpZHRoLCBoX2JsYW5rOwotCXUzMiBmaWZvX2VtcHR5ID0gMDsKLQl1MzIgcmF0aW9fc2Nh bGUgPSAxMDAxOwotCXU2NCB0ZW1wLCByYXRpbywgb3JpZ2luYWxfcmF0aW87Ci0JdTY0IHRlbXAy LCByZW1pbmRlcjsKLQl1NjQgdGVtcDMsIHRlbXA0LCByZXN1bHQgPSAwOwotCi0JdTY0IGVyciA9 IG11bHRpcGxpZXI7Ci0JdTY0IG5fZXJyID0gMCwgbl9uX2VyciA9IDA7Ci0JYm9vbCBuX2Vycl9u ZWcsIG5uX2Vycl9uZWc7Ci0JdTggaGJsYW5rX21hcmdpbiA9IDE2OwotCi0JdTggdHVfc2l6ZSwg dHVfc2l6ZV9kZXNpcmVkID0gMCwgdHVfc2l6ZV9taW51czE7Ci0JaW50IHZhbGlkX2JvdW5kYXJ5 X2xpbms7Ci0JdTY0IHJlc3VsdGluZ192YWxpZDsKLQl1NjQgdG90YWxfdmFsaWQ7Ci0JdTY0IGVm ZmVjdGl2ZV92YWxpZDsKLQl1NjQgZWZmZWN0aXZlX3ZhbGlkX3JlY29yZGVkOwotCWludCBuX3R1 czsKLQlpbnQgbl90dXNfcGVyX2xhbmU7Ci0JaW50IHBhaXJlZF90dXM7Ci0JaW50IHJlbWFpbmRl cl90dXM7Ci0JaW50IHJlbWFpbmRlcl90dXNfdXBwZXIsIHJlbWFpbmRlcl90dXNfbG93ZXI7Ci0J aW50IGV4dHJhX2J5dGVzOwotCWludCBmaWxsZXJfc2l6ZTsKLQlpbnQgZGVsYXlfc3RhcnRfbGlu azsKLQlpbnQgYm91bmRhcnlfbW9kZXJhdGlvbl9lbiA9IDA7Ci0JaW50IHVwcGVyX2JkcnlfY250 ID0gMDsKLQlpbnQgbG93ZXJfYmRyeV9jbnQgPSAwOwotCWludCBpX3VwcGVyX2JkcnlfY250ID0g MDsKLQlpbnQgaV9sb3dlcl9iZHJ5X2NudCA9IDA7Ci0JaW50IHZhbGlkX2xvd2VyX2JvdW5kYXJ5 X2xpbmsgPSAwOwotCWludCBldmVuX2Rpc3RyaWJ1dGlvbl9iZiA9IDA7Ci0JaW50IGV2ZW5fZGlz dHJpYnV0aW9uX2xlZ2FjeSA9IDA7Ci0JaW50IGV2ZW5fZGlzdHJpYnV0aW9uID0gMDsKLQlpbnQg bWluX2hibGFuayA9IDA7Ci0JaW50IGV4dHJhX3BjbGtfY3ljbGVzOwotCXU4IGV4dHJhX3BjbGtf Y3ljbGVfZGVsYXkgPSA0OwotCWludCBleHRyYV9wY2xrX2N5Y2xlc19pbl9saW5rX2NsazsKLQl1 NjQgcmF0aW9fYnlfdHU7Ci0JdTY0IGF2ZXJhZ2VfdmFsaWQyOwotCXU2NCBleHRyYV9idWZmZXJf bWFyZ2luOwotCWludCBuZXdfdmFsaWRfYm91bmRhcnlfbGluazsKLQotCXU2NCByZXN1bHRpbmdf dmFsaWRfdG1wOwotCXU2NCByYXRpb19ieV90dV90bXA7Ci0JaW50IG5fdHVzX3RtcDsKLQlpbnQg ZXh0cmFfcGNsa19jeWNsZXNfdG1wOwotCWludCBleHRyYV9wY2xrX2N5Y2xlc19pbl9sY2xrX3Rt cDsKLQlpbnQgZXh0cmFfcmVxX2J5dGVzX25ld190bXA7Ci0JaW50IGZpbGxlcl9zaXplX3RtcDsK LQlpbnQgbG93ZXJfZmlsbGVyX3NpemVfdG1wOwotCWludCBkZWxheV9zdGFydF9saW5rX3RtcDsK LQlpbnQgbWluX2hibGFua190bXAgPSAwOwotCWJvb2wgZXh0cmFfcmVxX2J5dGVzX2lzX25lZyA9 IGZhbHNlOwotCXN0cnVjdCBkcF9wYW5lbF9pbmZvICpwaW5mbyA9ICZjdHJsLT5wYW5lbC0+cGlu Zm87Ci0KLQl1OCBkcF9icnV0ZV9mb3JjZSA9IDE7Ci0JdTY0IGJydXRlX2ZvcmNlX3RocmVzaG9s ZCA9IDEwOwotCXU2NCBkaWZmX2FiczsKLQotCWxuX2NudCA9ICBjdHJsLT5saW5rLT5saW5rX3Bh cmFtcy5sYW5lX2NvdW50OwotCi0JYnBwID0gcGluZm8tPmJwcDsKLQlsd2lkdGggPSBwaW5mby0+ aF9hY3RpdmU7Ci0JaF9ibGFuayA9IHBpbmZvLT5oX2JhY2tfcG9yY2ggKyBwaW5mby0+aF9mcm9u dF9wb3JjaCArCi0JCQkJcGluZm8tPmhfc3luY193aWR0aDsKLQlwY2xrID0gcGluZm8tPnBpeGVs X2Nsa19raHogKiAxMDAwOwotCi0JYm91bmRhcnlfbW9kZXJhdGlvbl9lbiA9IDA7Ci0JdXBwZXJf YmRyeV9jbnQgPSAwOwotCWxvd2VyX2JkcnlfY250ID0gMDsKLQlpX3VwcGVyX2JkcnlfY250ID0g MDsKLQlpX2xvd2VyX2JkcnlfY250ID0gMDsKLQl2YWxpZF9sb3dlcl9ib3VuZGFyeV9saW5rID0g MDsKLQlldmVuX2Rpc3RyaWJ1dGlvbl9iZiA9IDA7Ci0JZXZlbl9kaXN0cmlidXRpb25fbGVnYWN5 ID0gMDsKLQlldmVuX2Rpc3RyaWJ1dGlvbiA9IDA7Ci0JbWluX2hibGFuayA9IDA7Ci0KLQlsY2xr ID0gZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKAotCQljdHJsLT5saW5rLT5saW5rX3BhcmFt cy5id19jb2RlKSAqIERQX0tIWl9UT19IWjsKLQotCXByX2RlYnVnKCJwY2xrPSVsbGQsIGFjdGl2 ZV93aWR0aD0lZCwgaF9ibGFuaz0lZFxuIiwKLQkJCQkJCXBjbGssIGx3aWR0aCwgaF9ibGFuayk7 Ci0JcHJfZGVidWcoImxjbGsgPSAlbGxkLCBsbl9jbnQgPSAlZFxuIiwgbGNsaywgbG5fY250KTsK LQlyYXRpbyA9IGRpdjY0X3U2NF9yZW0ocGNsayAqIGJwcCAqIG11bHRpcGxpZXIsCi0JCQkJOCAq IGxuX2NudCAqIGxjbGssICZyZW1pbmRlcik7Ci0JcmF0aW8gPSBkaXY2NF91NjQoKHBjbGsgKiBi cHAgKiBtdWx0aXBsaWVyKSwgKDggKiBsbl9jbnQgKiBsY2xrKSk7Ci0Jb3JpZ2luYWxfcmF0aW8g PSByYXRpbzsKLQotCWV4dHJhX2J1ZmZlcl9tYXJnaW4gPSByb3VuZHVwX3U2NChkaXY2NF91NjQo ZXh0cmFfcGNsa19jeWNsZV9kZWxheQotCQkJCSogbGNsayAqIG11bHRpcGxpZXIsIHBjbGspLCBt dWx0aXBsaWVyKTsKLQlleHRyYV9idWZmZXJfbWFyZ2luID0gZGl2NjRfdTY0KGV4dHJhX2J1ZmZl cl9tYXJnaW4sIG11bHRpcGxpZXIpOwotCi0JLyogVG8gZGVhbCB3aXRoIGNhc2VzIHdoZXJlIGxp bmVzIGFyZSBub3QgZGlzdHJpYnV0YWJsZSAqLwotCWlmICgoKGx3aWR0aCAlIGxuX2NudCkgIT0g MCkgJiYgcmF0aW8gPCBtdWx0aXBsaWVyKSB7Ci0JCXJhdGlvID0gcmF0aW8gKiByYXRpb19zY2Fs ZTsKLQkJcmF0aW8gPSByYXRpbyA8ICgxMDAwICogbXVsdGlwbGllcikKLQkJCQk/IHJhdGlvIDog KDEwMDAgKiBtdWx0aXBsaWVyKTsKLQl9Ci0JcHJfZGVidWcoInJhdGlvID0gJWxsZFxuIiwgcmF0 aW8pOwotCi0JZm9yICh0dV9zaXplID0gMzI7IHR1X3NpemUgPD0gNjQ7IHR1X3NpemUrKykgewot CQl0ZW1wID0gcmF0aW8gKiB0dV9zaXplOwotCQl0ZW1wMiA9IChkaXZfdTY0KHRlbXAgLyBtdWx0 aXBsaWVyKSArIDEpICogbXVsdGlwbGllcjsKLQkJbl9lcnIgPSByb3VuZHVwX3U2NCh0ZW1wLCBt dWx0aXBsaWVyKSAtIHRlbXA7Ci0KLQkJaWYgKG5fZXJyIDwgZXJyKSB7Ci0JCQllcnIgPSBuX2Vy cjsKLQkJCXR1X3NpemVfZGVzaXJlZCA9IHR1X3NpemU7Ci0JCX0KLQl9Ci0JcHJfZGVidWcoIklu Zm86IHR1X3NpemVfZGVzaXJlZCA9ICVkXG4iLCB0dV9zaXplX2Rlc2lyZWQpOwotCi0JdHVfc2l6 ZV9taW51czEgPSB0dV9zaXplX2Rlc2lyZWQgLSAxOwotCi0JdmFsaWRfYm91bmRhcnlfbGluayA9 IHJvdW5kdXBfdTY0KHJhdGlvICogdHVfc2l6ZV9kZXNpcmVkLCBtdWx0aXBsaWVyKTsKLQl2YWxp ZF9ib3VuZGFyeV9saW5rIC89IG11bHRpcGxpZXI7Ci0Jbl90dXMgPSByb3VuZGRvd24oKGx3aWR0 aCAqIGJwcCAqIG11bHRpcGxpZXIpCi0JCQkvICg4ICogdmFsaWRfYm91bmRhcnlfbGluayksIG11 bHRpcGxpZXIpIC8gbXVsdGlwbGllcjsKLQlldmVuX2Rpc3RyaWJ1dGlvbl9sZWdhY3kgPSBuX3R1 cyAlIGxuX2NudCA9PSAwID8gMSA6IDA7Ci0JcHJfZGVidWcoIkluZm86IG5fc3ltYm9sX3Blcl90 dT0lZCwgbnVtYmVyX29mX3R1cz0lZFxuIiwKLQkJCQkJdmFsaWRfYm91bmRhcnlfbGluaywgbl90 dXMpOwotCi0JZXh0cmFfYnl0ZXMgPSByb3VuZHVwX3U2NCgobl90dXMgKyAxKQotCQkJKiAoKHZh bGlkX2JvdW5kYXJ5X2xpbmsgKiBtdWx0aXBsaWVyKQotCQkJLSAob3JpZ2luYWxfcmF0aW8gKiB0 dV9zaXplX2Rlc2lyZWQpKSwgbXVsdGlwbGllcik7Ci0JZXh0cmFfYnl0ZXMgLz0gbXVsdGlwbGll cjsKLQlleHRyYV9wY2xrX2N5Y2xlcyA9IHJvdW5kdXAoZXh0cmFfYnl0ZXMgKiA4ICogbXVsdGlw bGllciAvIGJwcCwKLQkJCW11bHRpcGxpZXIpOwotCWV4dHJhX3BjbGtfY3ljbGVzIC89IG11bHRp cGxpZXI7Ci0JZXh0cmFfcGNsa19jeWNsZXNfaW5fbGlua19jbGsgPSByb3VuZHVwX3U2NChkaXY2 NF91NjQoZXh0cmFfcGNsa19jeWNsZXMKLQkJCQkqIGxjbGsgKiBtdWx0aXBsaWVyLCBwY2xrKSwg bXVsdGlwbGllcik7Ci0JZXh0cmFfcGNsa19jeWNsZXNfaW5fbGlua19jbGsgLz0gbXVsdGlwbGll cjsKLQlmaWxsZXJfc2l6ZSA9IHJvdW5kdXBfdTY0KCh0dV9zaXplX2Rlc2lyZWQgLSB2YWxpZF9i b3VuZGFyeV9saW5rKQotCQkJCQkJKiBtdWx0aXBsaWVyLCBtdWx0aXBsaWVyKTsKLQlmaWxsZXJf c2l6ZSAvPSBtdWx0aXBsaWVyOwotCXJhdGlvX2J5X3R1ID0gZGl2NjRfdTY0KHJhdGlvICogdHVf c2l6ZV9kZXNpcmVkLCBtdWx0aXBsaWVyKTsKLQotCXByX2RlYnVnKCJleHRyYV9wY2xrX2N5Y2xl c19pbl9saW5rX2Nsaz0lZCwgZXh0cmFfYnl0ZXM9JWRcbiIsCi0JCQkJZXh0cmFfcGNsa19jeWNs ZXNfaW5fbGlua19jbGssIGV4dHJhX2J5dGVzKTsKLQlwcl9kZWJ1ZygiZXh0cmFfcGNsa19jeWNs ZXNfaW5fbGlua19jbGs9JWRcbiIsCi0JCQkJZXh0cmFfcGNsa19jeWNsZXNfaW5fbGlua19jbGsp OwotCXByX2RlYnVnKCJmaWxsZXJfc2l6ZT0lZCwgZXh0cmFfYnVmZmVyX21hcmdpbj0lbGxkXG4i LAotCQkJCWZpbGxlcl9zaXplLCBleHRyYV9idWZmZXJfbWFyZ2luKTsKLQotCWRlbGF5X3N0YXJ0 X2xpbmsgPSAoKGV4dHJhX2J5dGVzID4gZXh0cmFfcGNsa19jeWNsZXNfaW5fbGlua19jbGspCi0J CQk/IGV4dHJhX2J5dGVzCi0JCQk6IGV4dHJhX3BjbGtfY3ljbGVzX2luX2xpbmtfY2xrKQotCQkJ CSsgZmlsbGVyX3NpemUgKyBleHRyYV9idWZmZXJfbWFyZ2luOwotCXJlc3VsdGluZ192YWxpZCA9 IHZhbGlkX2JvdW5kYXJ5X2xpbms7Ci0JcHJfZGVidWcoIkluZm86IGRlbGF5X3N0YXJ0X2xpbms9 JWQsIGZpbGxlcl9zaXplPSVkXG4iLAotCQkJCWRlbGF5X3N0YXJ0X2xpbmssIGZpbGxlcl9zaXpl KTsKLQlwcl9kZWJ1ZygidmFsaWRfYm91bmRhcnlfbGluaz0lZCByYXRpb19ieV90dT0lbGxkXG4i LAotCQkJCXZhbGlkX2JvdW5kYXJ5X2xpbmssIHJhdGlvX2J5X3R1KTsKLQotCWRpZmZfYWJzID0g KHJlc3VsdGluZ192YWxpZCA+PSByYXRpb19ieV90dSkKLQkJCQk/IChyZXN1bHRpbmdfdmFsaWQg LSByYXRpb19ieV90dSkKLQkJCQk6IChyYXRpb19ieV90dSAtIHJlc3VsdGluZ192YWxpZCk7Ci0K LQlpZiAoZXJyICE9IDAgJiYgKChkaWZmX2FicyA+IGJydXRlX2ZvcmNlX3RocmVzaG9sZCkKLQkJ CXx8IChldmVuX2Rpc3RyaWJ1dGlvbl9sZWdhY3kgPT0gMCkKLQkJCXx8IChkcF9icnV0ZV9mb3Jj ZSA9PSAxKSkpIHsKLQkJZXJyID0gbXVsdGlwbGllcjsKLQkJZm9yICh0dV9zaXplID0gMzI7IHR1 X3NpemUgPD0gNjQ7IHR1X3NpemUrKykgewotCQkJZm9yIChpX3VwcGVyX2JkcnlfY250ID0gMTsg aV91cHBlcl9iZHJ5X2NudCA8PSAxNTsKLQkJCQkJCWlfdXBwZXJfYmRyeV9jbnQrKykgewotCQkJ CWZvciAoaV9sb3dlcl9iZHJ5X2NudCA9IDE7Ci0JCQkJCWlfbG93ZXJfYmRyeV9jbnQgPD0gMTU7 Ci0JCQkJCWlfbG93ZXJfYmRyeV9jbnQrKykgewotCQkJCQluZXdfdmFsaWRfYm91bmRhcnlfbGlu ayA9Ci0JCQkJCQlyb3VuZHVwX3U2NChyYXRpbwotCQkJCQkJKiB0dV9zaXplLCBtdWx0aXBsaWVy KTsKLQkJCQkJYXZlcmFnZV92YWxpZDIgPSAoaV91cHBlcl9iZHJ5X2NudAotCQkJCQkJKiBuZXdf dmFsaWRfYm91bmRhcnlfbGluawotCQkJCQkJKyBpX2xvd2VyX2JkcnlfY250Ci0JCQkJCQkqIChu ZXdfdmFsaWRfYm91bmRhcnlfbGluawotCQkJCQkJCS0gbXVsdGlwbGllcikpCi0JCQkJCQkvIChp X3VwcGVyX2JkcnlfY250Ci0JCQkJCQkJKyBpX2xvd2VyX2JkcnlfY250KTsKLQkJCQkJbl90dXMg PSByb3VuZGRvd25fdTY0KGRpdjY0X3U2NChsd2lkdGgKLQkJCQkJCSogbXVsdGlwbGllciAqIG11 bHRpcGxpZXIKLQkJCQkJCSogKGJwcCAvIDgpLCBhdmVyYWdlX3ZhbGlkMiksCi0JCQkJCQkJbXVs dGlwbGllcik7Ci0JCQkJCW5fdHVzIC89IG11bHRpcGxpZXI7Ci0JCQkJCW5fdHVzX3Blcl9sYW5l Ci0JCQkJCQk9IHJvdW5kZG93bihuX3R1cwotCQkJCQkJCSogbXVsdGlwbGllcgotCQkJCQkJCS8g bG5fY250LCBtdWx0aXBsaWVyKTsKLQkJCQkJbl90dXNfcGVyX2xhbmUgLz0gbXVsdGlwbGllcjsK LQkJCQkJcGFpcmVkX3R1cyA9Ci0JCQkJCQlyb3VuZGRvd24oKG5fdHVzX3Blcl9sYW5lKQotCQkJ CQkJCSogbXVsdGlwbGllcgotCQkJCQkJCS8gKGlfdXBwZXJfYmRyeV9jbnQKLQkJCQkJCQkrIGlf bG93ZXJfYmRyeV9jbnQpLAotCQkJCQkJCW11bHRpcGxpZXIpOwotCQkJCQlwYWlyZWRfdHVzIC89 IG11bHRpcGxpZXI7Ci0JCQkJCXJlbWFpbmRlcl90dXMgPSBuX3R1c19wZXJfbGFuZQotCQkJCQkJ CS0gcGFpcmVkX3R1cwotCQkJCQkJKiAoaV91cHBlcl9iZHJ5X2NudAotCQkJCQkJCSsgaV9sb3dl cl9iZHJ5X2NudCk7Ci0JCQkJCWlmICgocmVtYWluZGVyX3R1cwotCQkJCQkJLSBpX3VwcGVyX2Jk cnlfY250KSA+IDApIHsKLQkJCQkJCXJlbWFpbmRlcl90dXNfdXBwZXIKLQkJCQkJCQk9IGlfdXBw ZXJfYmRyeV9jbnQ7Ci0JCQkJCQlyZW1haW5kZXJfdHVzX2xvd2VyID0KLQkJCQkJCQlyZW1haW5k ZXJfdHVzCi0JCQkJCQkJLSBpX3VwcGVyX2JkcnlfY250OwotCQkJCQl9IGVsc2UgewotCQkJCQkJ cmVtYWluZGVyX3R1c191cHBlcgotCQkJCQkJCT0gcmVtYWluZGVyX3R1czsKLQkJCQkJCXJlbWFp bmRlcl90dXNfbG93ZXIgPSAwOwotCQkJCQl9Ci0JCQkJCXRvdGFsX3ZhbGlkID0gcGFpcmVkX3R1 cwotCQkJCQkJKiAoaV91cHBlcl9iZHJ5X2NudAotCQkJCQkJKiBuZXdfdmFsaWRfYm91bmRhcnlf bGluawotCQkJCQkJCSsgaV9sb3dlcl9iZHJ5X2NudAotCQkJCQkJKiAobmV3X3ZhbGlkX2JvdW5k YXJ5X2xpbmsKLQkJCQkJCQktIG11bHRpcGxpZXIpKQotCQkJCQkJKyAocmVtYWluZGVyX3R1c191 cHBlcgotCQkJCQkJKiBuZXdfdmFsaWRfYm91bmRhcnlfbGluaykKLQkJCQkJCSsgKHJlbWFpbmRl cl90dXNfbG93ZXIKLQkJCQkJCSogKG5ld192YWxpZF9ib3VuZGFyeV9saW5rCi0JCQkJCQkJLSBt dWx0aXBsaWVyKSk7Ci0JCQkJCW5fZXJyX25lZyA9IG5uX2Vycl9uZWcgPSBmYWxzZTsKLQkJCQkJ ZWZmZWN0aXZlX3ZhbGlkCi0JCQkJCQk9IGRpdl91NjQodG90YWxfdmFsaWQsCi0JCQkJCQkJbl90 dXNfcGVyX2xhbmUpOwotCQkJCQluX25fZXJyID0gKGVmZmVjdGl2ZV92YWxpZAotCQkJCQkJCT49 IChyYXRpbyAqIHR1X3NpemUpKQotCQkJCQkJPyAoZWZmZWN0aXZlX3ZhbGlkCi0JCQkJCQkJLSAo cmF0aW8gKiB0dV9zaXplKSkKLQkJCQkJCTogKChyYXRpbyAqIHR1X3NpemUpCi0JCQkJCQkJLSBl ZmZlY3RpdmVfdmFsaWQpOwotCQkJCQlpZiAoZWZmZWN0aXZlX3ZhbGlkIDwgKHJhdGlvICogdHVf c2l6ZSkpCi0JCQkJCQlubl9lcnJfbmVnID0gdHJ1ZTsKLQkJCQkJbl9lcnIgPSAoYXZlcmFnZV92 YWxpZDIKLQkJCQkJCT49IChyYXRpbyAqIHR1X3NpemUpKQotCQkJCQkJPyAoYXZlcmFnZV92YWxp ZDIKLQkJCQkJCQktIChyYXRpbyAqIHR1X3NpemUpKQotCQkJCQkJOiAoKHJhdGlvICogdHVfc2l6 ZSkKLQkJCQkJCQktIGF2ZXJhZ2VfdmFsaWQyKTsKLQkJCQkJaWYgKGF2ZXJhZ2VfdmFsaWQyIDwg KHJhdGlvICogdHVfc2l6ZSkpCi0JCQkJCQluX2Vycl9uZWcgPSB0cnVlOwotCQkJCQlldmVuX2Rp c3RyaWJ1dGlvbiA9Ci0JCQkJCQluX3R1cyAlIGxuX2NudCA9PSAwID8gMSA6IDA7Ci0JCQkJCWRp ZmZfYWJzID0KLQkJCQkJCXJlc3VsdGluZ192YWxpZCA+PSByYXRpb19ieV90dQotCQkJCQkJPyAo cmVzdWx0aW5nX3ZhbGlkCi0JCQkJCQkJLSByYXRpb19ieV90dSkKLQkJCQkJCTogKHJhdGlvX2J5 X3R1Ci0JCQkJCQkJLSByZXN1bHRpbmdfdmFsaWQpOwotCi0JCQkJCXJlc3VsdGluZ192YWxpZF90 bXAgPSBkaXY2NF91NjQoCi0JCQkJCQkoaV91cHBlcl9iZHJ5X2NudAotCQkJCQkJKiBuZXdfdmFs aWRfYm91bmRhcnlfbGluawotCQkJCQkJKyBpX2xvd2VyX2JkcnlfY250Ci0JCQkJCQkqIChuZXdf dmFsaWRfYm91bmRhcnlfbGluawotCQkJCQkJCS0gbXVsdGlwbGllcikpLAotCQkJCQkJKGlfdXBw ZXJfYmRyeV9jbnQKLQkJCQkJCQkrIGlfbG93ZXJfYmRyeV9jbnQpKTsKLQkJCQkJcmF0aW9fYnlf dHVfdG1wID0KLQkJCQkJCW9yaWdpbmFsX3JhdGlvICogdHVfc2l6ZTsKLQkJCQkJcmF0aW9fYnlf dHVfdG1wIC89IG11bHRpcGxpZXI7Ci0JCQkJCW5fdHVzX3RtcCA9IHJvdW5kZG93bl91NjQoCi0J CQkJCQlkaXY2NF91NjQobHdpZHRoCi0JCQkJCQkqIG11bHRpcGxpZXIgKiBtdWx0aXBsaWVyCi0J CQkJCQkqIGJwcCAvIDgsCi0JCQkJCQlyZXN1bHRpbmdfdmFsaWRfdG1wKSwKLQkJCQkJCW11bHRp cGxpZXIpOwotCQkJCQluX3R1c190bXAgLz0gbXVsdGlwbGllcjsKLQotCQkJCQl0ZW1wMyA9IChy ZXN1bHRpbmdfdmFsaWRfdG1wCi0JCQkJCQk+PSAob3JpZ2luYWxfcmF0aW8gKiB0dV9zaXplKSkK LQkJCQkJCT8gKHJlc3VsdGluZ192YWxpZF90bXAKLQkJCQkJCS0gb3JpZ2luYWxfcmF0aW8gKiB0 dV9zaXplKQotCQkJCQkJOiAob3JpZ2luYWxfcmF0aW8gKiB0dV9zaXplKQotCQkJCQkJLSByZXN1 bHRpbmdfdmFsaWRfdG1wOwotCQkJCQl0ZW1wMyA9IChuX3R1c190bXAgKyAxKSAqIHRlbXAzOwot CQkJCQl0ZW1wNCA9IChuZXdfdmFsaWRfYm91bmRhcnlfbGluawotCQkJCQkJPj0gKG9yaWdpbmFs X3JhdGlvICogdHVfc2l6ZSkpCi0JCQkJCQk/IChuZXdfdmFsaWRfYm91bmRhcnlfbGluawotCQkJ CQkJCS0gb3JpZ2luYWxfcmF0aW8KLQkJCQkJCQkqIHR1X3NpemUpCi0JCQkJCQk6IChvcmlnaW5h bF9yYXRpbyAqIHR1X3NpemUpCi0JCQkJCQktIG5ld192YWxpZF9ib3VuZGFyeV9saW5rOwotCQkJ CQl0ZW1wNCA9IChpX3VwcGVyX2JkcnlfY250Ci0JCQkJCQkJKiBsbl9jbnQgKiB0ZW1wNCk7Ci0K LQkJCQkJdGVtcDMgPSByb3VuZHVwX3U2NCh0ZW1wMywgbXVsdGlwbGllcik7Ci0JCQkJCXRlbXA0 ID0gcm91bmR1cF91NjQodGVtcDQsIG11bHRpcGxpZXIpOwotCQkJCQlkcF9jdHJsX2dldF9leHRy YV9yZXFfYnl0ZXMKLQkJCQkJCShyZXN1bHRpbmdfdmFsaWRfdG1wLAotCQkJCQkJbmV3X3ZhbGlk X2JvdW5kYXJ5X2xpbmssCi0JCQkJCQl0ZW1wMywgdGVtcDQsCi0JCQkJCQkmZXh0cmFfcmVxX2J5 dGVzX2lzX25lZywKLQkJCQkJCSZyZXN1bHQsCi0JCQkJCQkob3JpZ2luYWxfcmF0aW8gKiB0dV9z aXplKSk7Ci0JCQkJCWV4dHJhX3JlcV9ieXRlc19uZXdfdG1wCi0JCQkJCQk9IGRpdjY0X3VsKHJl c3VsdCwgbXVsdGlwbGllcik7Ci0JCQkJCWlmICgoZXh0cmFfcmVxX2J5dGVzX2lzX25lZykKLQkJ CQkJCSYmIChleHRyYV9yZXFfYnl0ZXNfbmV3X3RtcAotCQkJCQkJCT4gMSkpCi0JCQkJCQlleHRy YV9yZXFfYnl0ZXNfbmV3X3RtcAotCQkJCQkJPSBleHRyYV9yZXFfYnl0ZXNfbmV3X3RtcCAtIDE7 Ci0JCQkJCWlmIChleHRyYV9yZXFfYnl0ZXNfbmV3X3RtcCA9PSAwKQotCQkJCQkJZXh0cmFfcmVx X2J5dGVzX25ld190bXAgPSAxOwotCQkJCQlleHRyYV9wY2xrX2N5Y2xlc190bXAgPQotCQkJCQkJ KHU2NCkoZXh0cmFfcmVxX2J5dGVzX25ld190bXAKLQkJCQkJCSAgICAgICogOCAqIG11bHRpcGxp ZXIpIC8gYnBwOwotCQkJCQlleHRyYV9wY2xrX2N5Y2xlc190bXAgLz0gbXVsdGlwbGllcjsKLQot CQkJCQlpZiAoZXh0cmFfcGNsa19jeWNsZXNfdG1wIDw9IDApCi0JCQkJCQlleHRyYV9wY2xrX2N5 Y2xlc190bXAgPSAxOwotCQkJCQlleHRyYV9wY2xrX2N5Y2xlc19pbl9sY2xrX3RtcCA9Ci0JCQkJ CQlyb3VuZHVwX3U2NChkaXY2NF91NjQoCi0JCQkJCQkJZXh0cmFfcGNsa19jeWNsZXNfdG1wCi0J CQkJCQkJKiBsY2xrICogbXVsdGlwbGllciwKLQkJCQkJCQlwY2xrKSwgbXVsdGlwbGllcik7Ci0J CQkJCWV4dHJhX3BjbGtfY3ljbGVzX2luX2xjbGtfdG1wCi0JCQkJCQkvPSBtdWx0aXBsaWVyOwot CQkJCQlmaWxsZXJfc2l6ZV90bXAgPSByb3VuZHVwX3U2NCgKLQkJCQkJCSh0dV9zaXplICogbXVs dGlwbGllciAqCi0JCQkJCQluZXdfdmFsaWRfYm91bmRhcnlfbGluayksCi0JCQkJCQltdWx0aXBs aWVyKTsKLQkJCQkJZmlsbGVyX3NpemVfdG1wIC89IG11bHRpcGxpZXI7Ci0JCQkJCWxvd2VyX2Zp bGxlcl9zaXplX3RtcCA9Ci0JCQkJCQlmaWxsZXJfc2l6ZV90bXAgKyAxOwotCQkJCQlpZiAoZXh0 cmFfcmVxX2J5dGVzX2lzX25lZykKLQkJCQkJCXRlbXAzID0gKGV4dHJhX3JlcV9ieXRlc19uZXdf dG1wCi0JCQkJCQk+IGV4dHJhX3BjbGtfY3ljbGVzX2luX2xjbGtfdG1wCi0JCQkJCQk/IGV4dHJh X3BjbGtfY3ljbGVzX2luX2xjbGtfdG1wCi0JCQkJCQk6IGV4dHJhX3JlcV9ieXRlc19uZXdfdG1w KTsKLQkJCQkJZWxzZQotCQkJCQkJdGVtcDMgPSAoZXh0cmFfcmVxX2J5dGVzX25ld190bXAKLQkJ CQkJCT4gZXh0cmFfcGNsa19jeWNsZXNfaW5fbGNsa190bXAKLQkJCQkJCT8gZXh0cmFfcmVxX2J5 dGVzX25ld190bXAgOgotCQkJCQkJZXh0cmFfcGNsa19jeWNsZXNfaW5fbGNsa190bXApOwotCi0J CQkJCXRlbXA0ID0gbG93ZXJfZmlsbGVyX3NpemVfdG1wCi0JCQkJCQkrIGV4dHJhX2J1ZmZlcl9t YXJnaW47Ci0JCQkJCWlmIChleHRyYV9yZXFfYnl0ZXNfaXNfbmVnKQotCQkJCQkJZGVsYXlfc3Rh cnRfbGlua190bXAKLQkJCQkJCQk9ICh0ZW1wMyA+PSB0ZW1wNCkKLQkJCQkJCQk/ICh0ZW1wMyAt IHRlbXA0KQotCQkJCQkJCTogKHRlbXA0IC0gdGVtcDMpOwotCQkJCQllbHNlCi0JCQkJCQlkZWxh eV9zdGFydF9saW5rX3RtcAotCQkJCQkJCT0gdGVtcDMgKyB0ZW1wNDsKLQotCQkJCQltaW5faGJs YW5rX3RtcCA9IChpbnQpZGl2NjRfdTY0KAotCQkJCQkJcm91bmR1cF91NjQoCi0JCQkJCQlkaXY2 NF91NjQoZGVsYXlfc3RhcnRfbGlua190bXAKLQkJCQkJCSogcGNsayAqIG11bHRpcGxpZXIsIGxj bGspLAotCQkJCQkJbXVsdGlwbGllciksIG11bHRpcGxpZXIpCi0JCQkJCQkrIGhibGFua19tYXJn aW47Ci0KLQkJCQkJaWYgKCgoZXZlbl9kaXN0cmlidXRpb24gPT0gMSkKLQkJCQkJCXx8ICgoZXZl bl9kaXN0cmlidXRpb25fYmYgPT0gMCkKLQkJCQkJCSYmIChldmVuX2Rpc3RyaWJ1dGlvbl9sZWdh Y3kKLQkJCQkJCQkJPT0gMCkpKQotCQkJCQkJJiYgIW5fZXJyX25lZyAmJiAhbm5fZXJyX25lZwot CQkJCQkJJiYgbl9uX2VyciA8IGVycgotCQkJCQkJJiYgKG5fbl9lcnIgPCBkaWZmX2FicwotCQkJ CQkJfHwgKGRwX2JydXRlX2ZvcmNlID09IDEpKQotCQkJCQkJJiYgKG5ld192YWxpZF9ib3VuZGFy eV9saW5rCi0JCQkJCQkJCQktIDEpID4gMAotCQkJCQkJJiYgKGhfYmxhbmsgPj0KLQkJCQkJCQko dTMyKW1pbl9oYmxhbmtfdG1wKSkgewotCQkJCQkJdXBwZXJfYmRyeV9jbnQgPQotCQkJCQkJCWlf dXBwZXJfYmRyeV9jbnQ7Ci0JCQkJCQlsb3dlcl9iZHJ5X2NudCA9Ci0JCQkJCQkJaV9sb3dlcl9i ZHJ5X2NudDsKLQkJCQkJCWVyciA9IG5fbl9lcnI7Ci0JCQkJCQlib3VuZGFyeV9tb2RlcmF0aW9u X2VuID0gMTsKLQkJCQkJCXR1X3NpemVfZGVzaXJlZCA9IHR1X3NpemU7Ci0JCQkJCQl2YWxpZF9i b3VuZGFyeV9saW5rID0KLQkJCQkJCQluZXdfdmFsaWRfYm91bmRhcnlfbGluazsKLQkJCQkJCWVm ZmVjdGl2ZV92YWxpZF9yZWNvcmRlZAotCQkJCQkJCT0gZWZmZWN0aXZlX3ZhbGlkOwotCQkJCQkJ ZGVsYXlfc3RhcnRfbGluawotCQkJCQkJCT0gZGVsYXlfc3RhcnRfbGlua190bXA7Ci0JCQkJCQlm aWxsZXJfc2l6ZSA9IGZpbGxlcl9zaXplX3RtcDsKLQkJCQkJCW1pbl9oYmxhbmsgPSBtaW5faGJs YW5rX3RtcDsKLQkJCQkJCW5fdHVzID0gbl90dXNfdG1wOwotCQkJCQkJZXZlbl9kaXN0cmlidXRp b25fYmYgPSAxOwotCi0JCQkJCQlwcl9kZWJ1ZygidXBwZXJfYmRyeV9jbnQ9JWQsIGxvd2VyX2Jv dW5kYXJ5X2NudD0lZCwgZXJyPSVsbGQsIHR1X3NpemVfZGVzaXJlZD0lZCwgdmFsaWRfYm91bmRh cnlfbGluaz0lZCwgZWZmZWN0aXZlX3ZhbGlkPSVsbGRcbiIsCi0JCQkJCQkJdXBwZXJfYmRyeV9j bnQsCi0JCQkJCQkJbG93ZXJfYmRyeV9jbnQsIGVyciwKLQkJCQkJCQl0dV9zaXplX2Rlc2lyZWQs Ci0JCQkJCQkJdmFsaWRfYm91bmRhcnlfbGluaywKLQkJCQkJCQllZmZlY3RpdmVfdmFsaWQpOwot CQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJaWYgKGJvdW5kYXJ5X21vZGVyYXRpb25fZW4g PT0gMSkgewotCQkJcmVzdWx0aW5nX3ZhbGlkID0gKHU2NCkodXBwZXJfYmRyeV9jbnQKLQkJCQkJ KnZhbGlkX2JvdW5kYXJ5X2xpbmsgKyBsb3dlcl9iZHJ5X2NudAotCQkJCQkqICh2YWxpZF9ib3Vu ZGFyeV9saW5rIC0gMSkpCi0JCQkJCS8gKHVwcGVyX2JkcnlfY250ICsgbG93ZXJfYmRyeV9jbnQp OwotCQkJcmF0aW9fYnlfdHUgPSBvcmlnaW5hbF9yYXRpbyAqIHR1X3NpemVfZGVzaXJlZDsKLQkJ CXZhbGlkX2xvd2VyX2JvdW5kYXJ5X2xpbmsgPQotCQkJCSh2YWxpZF9ib3VuZGFyeV9saW5rIC8g bXVsdGlwbGllcikgLSAxOwotCi0JCQl0dV9zaXplX21pbnVzMSA9IHR1X3NpemVfZGVzaXJlZCAt IDE7Ci0JCQlldmVuX2Rpc3RyaWJ1dGlvbl9iZiA9IDE7Ci0JCQl2YWxpZF9ib3VuZGFyeV9saW5r IC89IG11bHRpcGxpZXI7Ci0JCQlwcl9kZWJ1ZygiSW5mbzogQm91bmRhcnlfbW9kZXJhdGlvbiBl bmFibGVkXG4iKTsKLQkJfQotCX0KLQotCW1pbl9oYmxhbmsgPSAoKGludCkgcm91bmR1cF91NjQo ZGl2NjRfdTY0KGRlbGF5X3N0YXJ0X2xpbmsgKiBwY2xrCi0JCQkqIG11bHRpcGxpZXIsIGxjbGsp LCBtdWx0aXBsaWVyKSkKLQkJCS8gbXVsdGlwbGllciArIGhibGFua19tYXJnaW47Ci0JaWYgKGhf YmxhbmsgPCAodTMyKW1pbl9oYmxhbmspIHsKLQkJcHJfZGVidWcoIiBXQVJOSU5HOiBydW5faWR4 PSVkIFByb2dyYW1tZWQgaF9ibGFuayAlZCBpcyBzbWFsbGVyIHRoYW4gdGhlIG1pbl9oYmxhbmsg JWQgc3VwcG9ydGVkLlxuIiwKLQkJCQkJcnVuX2lkeCwgaF9ibGFuaywgbWluX2hibGFuayk7Ci0J fQotCi0JaWYgKGZpZm9fZW1wdHkpCXsKLQkJdHVfc2l6ZV9taW51czEgPSAzMTsKLQkJdmFsaWRf Ym91bmRhcnlfbGluayA9IDMyOwotCQlkZWxheV9zdGFydF9saW5rID0gMDsKLQkJYm91bmRhcnlf bW9kZXJhdGlvbl9lbiA9IDA7Ci0JfQotCi0JcHJfZGVidWcoInR1X3NpemVfbWludXMxPSVkIHZh bGlkX2JvdW5kYXJ5X2xpbms9JWQgZGVsYXlfc3RhcnRfbGluaz0lZCBib3VuZGFyeV9tb2RlcmF0 aW9uX2VuPSVkXG4gdXBwZXJfYm91bmRhcnlfY250PSVkIGxvd2VyX2JvdW5kYXJ5X2NudD0lZCB2 YWxpZF9sb3dlcl9ib3VuZGFyeV9saW5rPSVkIG1pbl9oYmxhbms9JWRcbiIsCi0JCXR1X3NpemVf bWludXMxLCB2YWxpZF9ib3VuZGFyeV9saW5rLCBkZWxheV9zdGFydF9saW5rLAotCQlib3VuZGFy eV9tb2RlcmF0aW9uX2VuLCB1cHBlcl9iZHJ5X2NudCwgbG93ZXJfYmRyeV9jbnQsCi0JCXZhbGlk X2xvd2VyX2JvdW5kYXJ5X2xpbmssIG1pbl9oYmxhbmspOwotCi0JdHVfdGFibGUtPnZhbGlkX2Jv dW5kYXJ5X2xpbmsgPSB2YWxpZF9ib3VuZGFyeV9saW5rOwotCXR1X3RhYmxlLT5kZWxheV9zdGFy dF9saW5rID0gZGVsYXlfc3RhcnRfbGluazsKLQl0dV90YWJsZS0+Ym91bmRhcnlfbW9kZXJhdGlv bl9lbiA9IGJvdW5kYXJ5X21vZGVyYXRpb25fZW47Ci0JdHVfdGFibGUtPnZhbGlkX2xvd2VyX2Jv dW5kYXJ5X2xpbmsgPSB2YWxpZF9sb3dlcl9ib3VuZGFyeV9saW5rOwotCXR1X3RhYmxlLT51cHBl cl9ib3VuZGFyeV9jb3VudCA9IHVwcGVyX2JkcnlfY250OwotCXR1X3RhYmxlLT5sb3dlcl9ib3Vu ZGFyeV9jb3VudCA9IGxvd2VyX2JkcnlfY250OwotCXR1X3RhYmxlLT50dV9zaXplX21pbnVzMSA9 IHR1X3NpemVfbWludXMxOwotfQotCi1zdGF0aWMgdm9pZCBkcF9jdHJsX3NldHVwX3RyX3VuaXQo c3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKLXsKLQl1MzIgZHBfdHUgPSAweDA7Ci0JdTMy IHZhbGlkX2JvdW5kYXJ5ID0gMHgwOwotCXUzMiB2YWxpZF9ib3VuZGFyeTIgPSAweDA7Ci0Jc3Ry dWN0IGRwX3ZjX3R1X21hcHBpbmdfdGFibGUgdHVfY2FsY190YWJsZTsKLQotCWRwX2N0cmxfY2Fs Y190dV9wYXJhbWV0ZXJzKGN0cmwsICZ0dV9jYWxjX3RhYmxlKTsKLQotCWRwX3R1IHw9IHR1X2Nh bGNfdGFibGUudHVfc2l6ZV9taW51czE7Ci0JdmFsaWRfYm91bmRhcnkgfD0gdHVfY2FsY190YWJs ZS52YWxpZF9ib3VuZGFyeV9saW5rOwotCXZhbGlkX2JvdW5kYXJ5IHw9ICh0dV9jYWxjX3RhYmxl LmRlbGF5X3N0YXJ0X2xpbmsgPDwgMTYpOwotCi0JdmFsaWRfYm91bmRhcnkyIHw9ICh0dV9jYWxj X3RhYmxlLnZhbGlkX2xvd2VyX2JvdW5kYXJ5X2xpbmsgPDwgMSk7Ci0JdmFsaWRfYm91bmRhcnky IHw9ICh0dV9jYWxjX3RhYmxlLnVwcGVyX2JvdW5kYXJ5X2NvdW50IDw8IDE2KTsKLQl2YWxpZF9i b3VuZGFyeTIgfD0gKHR1X2NhbGNfdGFibGUubG93ZXJfYm91bmRhcnlfY291bnQgPDwgMjApOwot Ci0JaWYgKHR1X2NhbGNfdGFibGUuYm91bmRhcnlfbW9kZXJhdGlvbl9lbikKLQkJdmFsaWRfYm91 bmRhcnkyIHw9IEJJVCgwKTsKLQotCXByX2RlYnVnKCJkcF90dT0weCV4LCB2YWxpZF9ib3VuZGFy eT0weCV4LCB2YWxpZF9ib3VuZGFyeTI9MHgleFxuIiwKLQkJCWRwX3R1LCB2YWxpZF9ib3VuZGFy eSwgdmFsaWRfYm91bmRhcnkyKTsKLQotCWN0cmwtPmNhdGFsb2ctPmRwX3R1ID0gZHBfdHU7Ci0J Y3RybC0+Y2F0YWxvZy0+dmFsaWRfYm91bmRhcnkgPSB2YWxpZF9ib3VuZGFyeTsKLQljdHJsLT5j YXRhbG9nLT52YWxpZF9ib3VuZGFyeTIgPSB2YWxpZF9ib3VuZGFyeTI7Ci0KLQljdHJsLT5jYXRh bG9nLT51cGRhdGVfdHJhbnNmZXJfdW5pdChjdHJsLT5jYXRhbG9nKTsKLX0KLQotc3RhdGljIGlu dCBkcF9jdHJsX3dhaXQ0dmlkZW9fcmVhZHkoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkK LXsKLQlpbnQgcmV0ID0gMDsKLQotCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgm Y3RybC0+dmlkZW9fY29tcCwgSFogLyAyKTsKLQlpZiAocmV0IDw9IDApIHsKLQkJcHJfZXJyKCJM aW5rIFRyYWluIHRpbWVkb3V0XG4iKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4g cmV0OwotfQotCi1zdGF0aWMgaW50IGRwX2N0cmxfdXBkYXRlX3NpbmtfdnhfcHgoc3RydWN0IGRw X2N0cmxfcHJpdmF0ZSAqY3RybCwKLQkJdTMyIHZvbHRhZ2VfbGV2ZWwsIHUzMiBwcmVfZW1waGFz aXNfbGV2ZWwpCi17Ci0JaW50IGk7Ci0JdTggYnVmWzRdOwotCXUzMiBtYXhfbGV2ZWxfcmVhY2hl ZCA9IDA7Ci0KLQlpZiAodm9sdGFnZV9sZXZlbCA9PSBEUF9MSU5LX1ZPTFRBR0VfTUFYKSB7Ci0J CXByX2RlYnVnKCJtYXguIHZvbHRhZ2Ugc3dpbmcgbGV2ZWwgcmVhY2hlZCAlZFxuIiwKLQkJCQl2 b2x0YWdlX2xldmVsKTsKLQkJbWF4X2xldmVsX3JlYWNoZWQgfD0gQklUKDIpOwotCX0KLQotCWlm IChwcmVfZW1waGFzaXNfbGV2ZWwgPT0gRFBfTElOS19QUkVfRU1QSEFTSVNfTUFYKSB7Ci0JCXBy X2RlYnVnKCJtYXguIHByZS1lbXBoYXNpcyBsZXZlbCByZWFjaGVkICVkXG4iLAotCQkJCXByZV9l bXBoYXNpc19sZXZlbCk7Ci0JCW1heF9sZXZlbF9yZWFjaGVkICB8PSBCSVQoNSk7Ci0JfQotCi0J cHJlX2VtcGhhc2lzX2xldmVsIDw8PSAzOwotCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkJ YnVmW2ldID0gdm9sdGFnZV9sZXZlbCB8IHByZV9lbXBoYXNpc19sZXZlbCB8IG1heF9sZXZlbF9y ZWFjaGVkOwotCi0JcHJfZGVidWcoInNpbms6IHB8dj0weCV4XG4iLCB2b2x0YWdlX2xldmVsIHwg cHJlX2VtcGhhc2lzX2xldmVsKTsKLQlyZXR1cm4gZHJtX2RwX2RwY2Rfd3JpdGUoY3RybC0+YXV4 LT5kcm1fYXV4LCAweDEwMywgYnVmLCA0KTsKLX0KLQotc3RhdGljIHZvaWQgZHBfY3RybF91cGRh dGVfdnhfcHgoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKLXsKLQlzdHJ1Y3QgZHBfbGlu ayAqbGluayA9IGN0cmwtPmxpbms7Ci0KLQljdHJsLT5jYXRhbG9nLT51cGRhdGVfdnhfcHgoY3Ry bC0+Y2F0YWxvZywKLQkJbGluay0+cGh5X3BhcmFtcy52X2xldmVsLCBsaW5rLT5waHlfcGFyYW1z LnBfbGV2ZWwpOwotCi0JZHBfY3RybF91cGRhdGVfc2lua192eF9weChjdHJsLCBsaW5rLT5waHlf cGFyYW1zLnZfbGV2ZWwsCi0JCWxpbmstPnBoeV9wYXJhbXMucF9sZXZlbCk7Ci19Ci0KLXN0YXRp YyB2b2lkIGRwX2N0cmxfdHJhaW5fcGF0dGVybl9zZXQoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAq Y3RybCwKLQkJdTggcGF0dGVybikKLXsKLQl1OCBidWZbNF07Ci0KLQlwcl9kZWJ1Zygic2luazog cGF0dGVybj0leFxuIiwgcGF0dGVybik7Ci0KLQlidWZbMF0gPSBwYXR0ZXJuOwotCWRybV9kcF9k cGNkX3dyaXRlKGN0cmwtPmF1eC0+ZHJtX2F1eCwgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsIGJ1 ZiwgMSk7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfY3RybF9yZWFkX2xpbmtfc3RhdHVzKHN0cnVjdCBk cF9jdHJsX3ByaXZhdGUgKmN0cmwsCi0JCQkJCXU4ICpsaW5rX3N0YXR1cykKLXsKLQlpbnQgcmV0 ID0gMCwgbGVuOwotCXUzMiBjb25zdCBvZmZzZXQgPSBEUF9MQU5FX0FMSUdOX1NUQVRVU19VUERB VEVEIC0gRFBfTEFORTBfMV9TVEFUVVM7Ci0JdTMyIGxpbmtfc3RhdHVzX3JlYWRfbWF4X3JldHJp ZXMgPSAxMDA7Ci0KLQl3aGlsZSAoLS1saW5rX3N0YXR1c19yZWFkX21heF9yZXRyaWVzKSB7Ci0J CWxlbiA9IGRybV9kcF9kcGNkX3JlYWRfbGlua19zdGF0dXMoY3RybC0+YXV4LT5kcm1fYXV4LAot CQkJbGlua19zdGF0dXMpOwotCQlpZiAobGVuICE9IERQX0xJTktfU1RBVFVTX1NJWkUpIHsKLQkJ CXByX2VycigiRFAgbGluayBzdGF0dXMgcmVhZCBmYWlsZWQsIGVycjogJWRcbiIsIGxlbik7Ci0J CQlyZXQgPSBsZW47Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmICghKGxpbmtfc3RhdHVzW29mZnNl dF0gJiBEUF9MSU5LX1NUQVRVU19VUERBVEVEKSkKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiBy ZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfY3RybF9saW5rX3RyYWluXzEoc3RydWN0IGRwX2N0cmxf cHJpdmF0ZSAqY3RybCkKLXsKLQlpbnQgdHJpZXMsIG9sZF92X2xldmVsLCByZXQgPSAwOwotCXU4 IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdOwotCWludCBjb25zdCBtYXhpbXVtX3Jl dHJpZXMgPSA1OwotCi0JZHBfY3RybF9zdGF0ZV9jdHJsKGN0cmwsIDApOwotCS8qIE1ha2Ugc3Vy ZSB0byBjbGVhciB0aGUgY3VycmVudCBwYXR0ZXJuIGJlZm9yZSBzdGFydGluZyBhIG5ldyBvbmUg Ki8KLQl3bWIoKTsKLQotCWN0cmwtPmNhdGFsb2ctPnNldF9wYXR0ZXJuKGN0cmwtPmNhdGFsb2cs IDB4MDEpOwotCWRwX2N0cmxfdHJhaW5fcGF0dGVybl9zZXQoY3RybCwgRFBfVFJBSU5JTkdfUEFU VEVSTl8xIHwKLQkJRFBfTElOS19TQ1JBTUJMSU5HX0RJU0FCTEUpOyAvKiB0cmFpbl8xICovCi0J ZHBfY3RybF91cGRhdGVfdnhfcHgoY3RybCk7Ci0KLQl0cmllcyA9IDA7Ci0Jb2xkX3ZfbGV2ZWwg PSBjdHJsLT5saW5rLT5waHlfcGFyYW1zLnZfbGV2ZWw7Ci0Jd2hpbGUgKDEpIHsKLQkJZHJtX2Rw X2xpbmtfdHJhaW5fY2xvY2tfcmVjb3ZlcnlfZGVsYXkoY3RybC0+cGFuZWwtPmRwY2QpOwotCi0J CXJldCA9IGRwX2N0cmxfcmVhZF9saW5rX3N0YXR1cyhjdHJsLCBsaW5rX3N0YXR1cyk7Ci0JCWlm IChyZXQpCi0JCQlicmVhazsKLQotCQlpZiAoZHJtX2RwX2Nsb2NrX3JlY292ZXJ5X29rKGxpbmtf c3RhdHVzLAotCQkJY3RybC0+bGluay0+bGlua19wYXJhbXMubGFuZV9jb3VudCkpIHsKLQkJCWJy ZWFrOwotCQl9Ci0KLQkJaWYgKGN0cmwtPmxpbmstPnBoeV9wYXJhbXMudl9sZXZlbCA9PSBEUF9M SU5LX1ZPTFRBR0VfTUFYKSB7Ci0JCQlwcl9lcnJfcmF0ZWxpbWl0ZWQoIm1heCB2X2xldmVsIHJl YWNoZWRcbiIpOwotCQkJcmV0ID0gLUVBR0FJTjsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKG9s ZF92X2xldmVsID09IGN0cmwtPmxpbmstPnBoeV9wYXJhbXMudl9sZXZlbCkgewotCQkJdHJpZXMr KzsKLQkJCWlmICh0cmllcyA+PSBtYXhpbXVtX3JldHJpZXMpIHsKLQkJCQlwcl9lcnIoIm1heCB0 cmllcyByZWFjaGVkXG4iKTsKLQkJCQlyZXQgPSAtRVRJTUVET1VUOwotCQkJCWJyZWFrOwotCQkJ fQotCQl9IGVsc2UgewotCQkJdHJpZXMgPSAwOwotCQkJb2xkX3ZfbGV2ZWwgPSBjdHJsLT5saW5r LT5waHlfcGFyYW1zLnZfbGV2ZWw7Ci0JCX0KLQotCQlwcl9kZWJ1ZygiY2xvY2sgcmVjb3Zlcnkg bm90IGRvbmUsIGFkanVzdGluZyB2eCBweFxuIik7Ci0KLQkJY3RybC0+bGluay0+YWRqdXN0X2xl dmVscyhjdHJsLT5saW5rLCBsaW5rX3N0YXR1cyk7Ci0JCWRwX2N0cmxfdXBkYXRlX3Z4X3B4KGN0 cmwpOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfY3RybF9saW5rX3Jh dGVfZG93bl9zaGlmdChzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQotewotCWludCByZXQg PSAwOwotCi0JaWYgKCFjdHJsKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN3aXRjaCAoY3RybC0+ bGluay0+bGlua19wYXJhbXMuYndfY29kZSkgewotCWNhc2UgRFBfTElOS19CV184XzE6Ci0JCWN0 cmwtPmxpbmstPmxpbmtfcGFyYW1zLmJ3X2NvZGUgPSBEUF9MSU5LX0JXXzVfNDsKLQkJYnJlYWs7 Ci0JY2FzZSBEUF9MSU5LX0JXXzVfNDoKLQkJY3RybC0+bGluay0+bGlua19wYXJhbXMuYndfY29k ZSA9IERQX0xJTktfQldfMl83OwotCQlicmVhazsKLQljYXNlIERQX0xJTktfQldfMl83OgotCWNh c2UgRFBfTElOS19CV18xXzYyOgotCWRlZmF1bHQ6Ci0JCWN0cmwtPmxpbmstPmxpbmtfcGFyYW1z LmJ3X2NvZGUgPSBEUF9MSU5LX0JXXzFfNjI7Ci0JCWJyZWFrOwotCX07Ci0KLQlwcl9kZWJ1Zygi bmV3IGJ3IGNvZGU9MHgleFxuIiwgY3RybC0+bGluay0+bGlua19wYXJhbXMuYndfY29kZSk7Ci0K LQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBkcF9jdHJsX2NsZWFyX3RyYWluaW5nX3Bh dHRlcm4oc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKLXsKLQlkcF9jdHJsX3RyYWluX3Bh dHRlcm5fc2V0KGN0cmwsIDApOwotCWRybV9kcF9saW5rX3RyYWluX2NoYW5uZWxfZXFfZGVsYXko Y3RybC0+cGFuZWwtPmRwY2QpOwotfQotCi1zdGF0aWMgaW50IGRwX2N0cmxfbGlua190cmFpbmlu Z18yKHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwpCi17Ci0JaW50IHRyaWVzID0gMCwgcmV0 ID0gMDsKLQljaGFyIHBhdHRlcm47Ci0JaW50IGNvbnN0IG1heGltdW1fcmV0cmllcyA9IDU7Ci0J dTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07Ci0KLQlkcF9jdHJsX3N0YXRlX2N0 cmwoY3RybCwgMCk7Ci0JLyogTWFrZSBzdXJlIHRvIGNsZWFyIHRoZSBjdXJyZW50IHBhdHRlcm4g YmVmb3JlIHN0YXJ0aW5nIGEgbmV3IG9uZSAqLwotCXdtYigpOwotCi0JaWYgKGRybV9kcF90cHMz X3N1cHBvcnRlZChjdHJsLT5wYW5lbC0+ZHBjZCkpCi0JCXBhdHRlcm4gPSBEUF9UUkFJTklOR19Q QVRURVJOXzM7Ci0JZWxzZQotCQlwYXR0ZXJuID0gRFBfVFJBSU5JTkdfUEFUVEVSTl8yOwotCi0J ZHBfY3RybF91cGRhdGVfdnhfcHgoY3RybCk7Ci0JY3RybC0+Y2F0YWxvZy0+c2V0X3BhdHRlcm4o Y3RybC0+Y2F0YWxvZywgcGF0dGVybik7Ci0JZHBfY3RybF90cmFpbl9wYXR0ZXJuX3NldChjdHJs LCBwYXR0ZXJuIHwgRFBfUkVDT1ZFUkVEX0NMT0NLX09VVF9FTik7Ci0KLQlkbyAgewotCQlkcm1f ZHBfbGlua190cmFpbl9jaGFubmVsX2VxX2RlbGF5KGN0cmwtPnBhbmVsLT5kcGNkKTsKLQotCQly ZXQgPSBkcF9jdHJsX3JlYWRfbGlua19zdGF0dXMoY3RybCwgbGlua19zdGF0dXMpOwotCQlpZiAo cmV0KQotCQkJYnJlYWs7Ci0KLQkJaWYgKGRybV9kcF9jaGFubmVsX2VxX29rKGxpbmtfc3RhdHVz LAotCQkJY3RybC0+bGluay0+bGlua19wYXJhbXMubGFuZV9jb3VudCkpCi0JCQlicmVhazsKLQot CQlpZiAodHJpZXMgPiBtYXhpbXVtX3JldHJpZXMpIHsKLQkJCXJldCA9IC1FVElNRURPVVQ7Ci0J CQlicmVhazsKLQkJfQotCQl0cmllcysrOwotCi0JCWN0cmwtPmxpbmstPmFkanVzdF9sZXZlbHMo Y3RybC0+bGluaywgbGlua19zdGF0dXMpOwotCQlkcF9jdHJsX3VwZGF0ZV92eF9weChjdHJsKTsK LQl9IHdoaWxlICgxKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfY3RybF9s aW5rX3RyYWluKHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwpCi17Ci0JaW50IHJldCA9IDA7 Ci0JdTggZW5jb2RpbmcgPSAweDE7Ci0Jc3RydWN0IGRybV9kcF9saW5rIGxpbmtfaW5mbyA9IHsw fTsKLQotCWN0cmwtPmxpbmstPnBoeV9wYXJhbXMucF9sZXZlbCA9IDA7Ci0JY3RybC0+bGluay0+ cGh5X3BhcmFtcy52X2xldmVsID0gMDsKLQotCWRwX2N0cmxfY29uZmlnX2N0cmwoY3RybCk7Ci0K LQlsaW5rX2luZm8ubnVtX2xhbmVzID0gY3RybC0+bGluay0+bGlua19wYXJhbXMubGFuZV9jb3Vu dDsKLQlsaW5rX2luZm8ucmF0ZSA9IGRybV9kcF9id19jb2RlX3RvX2xpbmtfcmF0ZSgKLQkJY3Ry bC0+bGluay0+bGlua19wYXJhbXMuYndfY29kZSk7Ci0JbGlua19pbmZvLmNhcGFiaWxpdGllcyA9 IGN0cmwtPnBhbmVsLT5saW5rX2luZm8uY2FwYWJpbGl0aWVzOwotCi0JZHJtX2RwX2xpbmtfY29u ZmlndXJlKGN0cmwtPmF1eC0+ZHJtX2F1eCwgJmxpbmtfaW5mbyk7Ci0JZHJtX2RwX2RwY2Rfd3Jp dGUoY3RybC0+YXV4LT5kcm1fYXV4LCBEUF9NQUlOX0xJTktfQ0hBTk5FTF9DT0RJTkdfU0VULAot CQkJCSZlbmNvZGluZywgMSk7Ci0KLQlyZXQgPSBkcF9jdHJsX2xpbmtfdHJhaW5fMShjdHJsKTsK LQlpZiAocmV0KSB7Ci0JCXByX2VycigibGluayB0cmFpbmluZyAjMSBmYWlsZWRcbiIpOwotCQln b3RvIGVuZDsKLQl9Ci0KLQkvKiBwcmludCBzdWNjZXNzIGluZm8gYXMgdGhpcyBpcyBhIHJlc3Vs dCBvZiB1c2VyIGluaXRpYXRlZCBhY3Rpb24gKi8KLQlwcl9pbmZvKCJsaW5rIHRyYWluaW5nICMx IHN1Y2Nlc3NmdWxcbiIpOwotCi0JcmV0ID0gZHBfY3RybF9saW5rX3RyYWluaW5nXzIoY3RybCk7 Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoImxpbmsgdHJhaW5pbmcgIzIgZmFpbGVkXG4iKTsKLQkJ Z290byBlbmQ7Ci0JfQotCi0JLyogcHJpbnQgc3VjY2VzcyBpbmZvIGFzIHRoaXMgaXMgYSByZXN1 bHQgb2YgdXNlciBpbml0aWF0ZWQgYWN0aW9uICovCi0JcHJfZGVidWcoImxpbmsgdHJhaW5pbmcg IzIgc3VjY2Vzc2Z1bFxuIik7Ci0KLWVuZDoKLQlkcF9jdHJsX3N0YXRlX2N0cmwoY3RybCwgMCk7 Ci0JLyogTWFrZSBzdXJlIHRvIGNsZWFyIHRoZSBjdXJyZW50IHBhdHRlcm4gYmVmb3JlIHN0YXJ0 aW5nIGEgbmV3IG9uZSAqLwotCXdtYigpOwotCi0JZHBfY3RybF9jbGVhcl90cmFpbmluZ19wYXR0 ZXJuKGN0cmwpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfY3RybF9zZXR1cF9t YWluX2xpbmsoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCwgYm9vbCB0cmFpbikKLXsKLQli b29sIG1haW5saW5rX3JlYWR5ID0gZmFsc2U7Ci0JaW50IHJldCA9IDA7Ci0KLQljdHJsLT5jYXRh bG9nLT5tYWlubGlua19jdHJsKGN0cmwtPmNhdGFsb2csIHRydWUpOwotCi0JcmV0ID0gY3RybC0+ bGluay0+cHNtX2NvbmZpZyhjdHJsLT5saW5rLAotCQkmY3RybC0+cGFuZWwtPmxpbmtfaW5mbywg ZmFsc2UpOwotCWlmIChyZXQpCi0JCWdvdG8gZW5kOwotCi0JaWYgKGN0cmwtPmxpbmstPnNpbmtf cmVxdWVzdCAmIERQX1RFU1RfTElOS19QSFlfVEVTVF9QQVRURVJOKQotCQlnb3RvIGVuZDsKLQot CWlmICghdHJhaW4pCi0JCWdvdG8gc2VuZF92aWRlbzsKLQotCS8qCi0JICogQXMgcGFydCBvZiBw cmV2aW91cyBjYWxscywgRFAgY29udHJvbGxlciBzdGF0ZSBtaWdodCBoYXZlCi0JICogdHJhbnNp dGlvbmVkIHRvIFBVU0hfSURMRS4gSW4gb3JkZXIgdG8gc3RhcnQgdHJhbnNtaXR0aW5nIGEgbGlu awotCSAqIHRyYWluaW5nIHBhdHRlcm4sIHdlIGhhdmUgdG8gZmlyc3QgdG8gYSBEUCBzb2Z0d2Fy ZSByZXNldC4KLQkgKi8KLQljdHJsLT5jYXRhbG9nLT5yZXNldChjdHJsLT5jYXRhbG9nKTsKLQot CXJldCA9IGRwX2N0cmxfbGlua190cmFpbihjdHJsKTsKLQlpZiAocmV0KQotCQlnb3RvIGVuZDsK LQotc2VuZF92aWRlbzoKLQkvKgotCSAqIFNldCB1cCB0cmFuc2ZlciB1bml0IHZhbHVlcyBhbmQg c2V0IGNvbnRyb2xsZXIgc3RhdGUgdG8gc2VuZAotCSAqIHZpZGVvLgotCSAqLwotCWRwX2N0cmxf c2V0dXBfdHJfdW5pdChjdHJsKTsKLQljdHJsLT5jYXRhbG9nLT5zdGF0ZV9jdHJsKGN0cmwtPmNh dGFsb2csIFNUX1NFTkRfVklERU8pOwotCi0JZHBfY3RybF93YWl0NHZpZGVvX3JlYWR5KGN0cmwp OwotCW1haW5saW5rX3JlYWR5ID0gY3RybC0+Y2F0YWxvZy0+bWFpbmxpbmtfcmVhZHkoY3RybC0+ Y2F0YWxvZyk7Ci0JcHJfZGVidWcoIm1haW5saW5rICVzXG4iLCBtYWlubGlua19yZWFkeSA/ICJS RUFEWSIgOiAiTk9UIFJFQURZIik7Ci1lbmQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZv aWQgZHBfY3RybF9zZXRfY2xvY2tfcmF0ZShzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsLAot CQljaGFyICpuYW1lLCB1MzIgcmF0ZSkKLXsKLQl1MzIgbnVtID0gY3RybC0+cGFyc2VyLT5tcFtE UF9DVFJMX1BNXS5udW1fY2xrOwotCXN0cnVjdCBkc3NfY2xrICpjZmcgPSBjdHJsLT5wYXJzZXIt Pm1wW0RQX0NUUkxfUE1dLmNsa19jb25maWc7Ci0KLQl3aGlsZSAobnVtICYmIHN0cmNtcChjZmct PmNsa19uYW1lLCBuYW1lKSkgewotCQludW0tLTsKLQkJY2ZnKys7Ci0JfQotCi0JcHJfZGVidWco InNldHRpbmcgcmF0ZT0lZCBvbiBjbGs9JXNcbiIsIHJhdGUsIG5hbWUpOwotCi0JaWYgKG51bSkK LQkJY2ZnLT5yYXRlID0gcmF0ZTsKLQllbHNlCi0JCXByX2VycigiJXMgY2xvY2sgY291bGQgbm90 IGJlIHNldCB3aXRoIHJhdGUgJWRcbiIsIG5hbWUsIHJhdGUpOwotfQotCi1zdGF0aWMgaW50IGRw X2N0cmxfZW5hYmxlX21haW5saW5rX2Nsb2NrcyhzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJs KQotewotCWludCByZXQgPSAwOwotCi0JY3RybC0+cG93ZXItPnNldF9waXhlbF9jbGtfcGFyZW50 KGN0cmwtPnBvd2VyKTsKLQotCWRwX2N0cmxfc2V0X2Nsb2NrX3JhdGUoY3RybCwgImN0cmxfbGlu a19jbGsiLAotCQlkcm1fZHBfYndfY29kZV90b19saW5rX3JhdGUoY3RybC0+bGluay0+bGlua19w YXJhbXMuYndfY29kZSkpOwotCi0JZHBfY3RybF9zZXRfY2xvY2tfcmF0ZShjdHJsLCAiY3RybF9w aXhlbF9jbGsiLCBjdHJsLT5waXhlbF9yYXRlKTsKLQotCXJldCA9IGN0cmwtPnBvd2VyLT5jbGtf ZW5hYmxlKGN0cmwtPnBvd2VyLCBEUF9DVFJMX1BNLCB0cnVlKTsKLQlpZiAocmV0KSB7Ci0JCXBy X2VycigiVW5hYmxlZCB0byBzdGFydCBsaW5rIGNsb2Nrc1xuIik7Ci0JCXJldCA9IC1FSU5WQUw7 Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBkcF9jdHJsX2Rpc2FibGVfbWFp bmxpbmtfY2xvY2tzKHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwpCi17Ci0JcmV0dXJuIGN0 cmwtPnBvd2VyLT5jbGtfZW5hYmxlKGN0cmwtPnBvd2VyLCBEUF9DVFJMX1BNLCBmYWxzZSk7Ci19 Ci0KLXN0YXRpYyBpbnQgZHBfY3RybF9ob3N0X2luaXQoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmws IGJvb2wgZmxpcCkKLXsKLQlzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsOwotCXN0cnVjdCBk cF9jYXRhbG9nX2N0cmwgKmNhdGFsb2c7Ci0KLQlpZiAoIWRwX2N0cmwpIHsKLQkJcHJfZXJyKCJJ bnZhbGlkIGlucHV0IGRhdGFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQljdHJsID0g Y29udGFpbmVyX29mKGRwX2N0cmwsIHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUsIGRwX2N0cmwpOwot Ci0JY3RybC0+b3JpZW50YXRpb24gPSBmbGlwOwotCWNhdGFsb2cgPSBjdHJsLT5jYXRhbG9nOwot Ci0JY2F0YWxvZy0+dXNiX3Jlc2V0KGN0cmwtPmNhdGFsb2csIGZsaXApOwotCWNhdGFsb2ctPnBo eV9yZXNldChjdHJsLT5jYXRhbG9nKTsKLQljYXRhbG9nLT5lbmFibGVfaXJxKGN0cmwtPmNhdGFs b2csIHRydWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZHBfY3RybF9ob3N0X2RlaW5p dCgpIC0gVW5pbml0aWFsaXplIERQIGNvbnRyb2xsZXIKLSAqIEBjdHJsOiBEaXNwbGF5IFBvcnQg RHJpdmVyIGRhdGEKLSAqCi0gKiBQZXJmb3JtIHJlcXVpcmVkIHN0ZXBzIHRvIHVuaW5pdGlhbGl6 ZSBEUCBjb250cm9sbGVyCi0gKiBhbmQgaXRzIHJlc291cmNlcy4KLSAqLwotc3RhdGljIHZvaWQg ZHBfY3RybF9ob3N0X2RlaW5pdChzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCkKLXsKLQlzdHJ1Y3Qg ZHBfY3RybF9wcml2YXRlICpjdHJsOwotCi0JaWYgKCFkcF9jdHJsKSB7Ci0JCXByX2VycigiSW52 YWxpZCBpbnB1dCBkYXRhXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWN0cmwgPSBjb250YWluZXJf b2YoZHBfY3RybCwgc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSwgZHBfY3RybCk7Ci0KLQljdHJsLT5j YXRhbG9nLT5lbmFibGVfaXJxKGN0cmwtPmNhdGFsb2csIGZhbHNlKTsKLQotCXByX2RlYnVnKCJI b3N0IGRlaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5XG4iKTsKLX0KLQotc3RhdGljIGJvb2wgZHBf Y3RybF91c2VfZml4ZWRfbnZpZChzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQotewotCXU4 ICpkcGNkID0gY3RybC0+cGFuZWwtPmRwY2Q7Ci0KLQkvKgotCSAqIEZvciBiZXR0ZXIgaW50ZXJv cCBleHBlcmllbmNlLCB1c2VkIGEgZml4ZWQgTlZJRD0weDgwMDAKLQkgKiB3aGVuZXZlciBjb25u ZWN0ZWQgdG8gYSBWR0EgZG9uZ2xlIGRvd25zdHJlYW0uCi0JICovCi0JaWYgKGRwY2RbRFBfRE9X TlNUUkVBTVBPUlRfUFJFU0VOVF0gJiBEUF9EV05fU1RSTV9QT1JUX1BSRVNFTlQpIHsKLQkJdTgg dHlwZSA9IGRwY2RbRFBfRE9XTlNUUkVBTVBPUlRfUFJFU0VOVF0gJgotCQkJRFBfRFdOX1NUUk1f UE9SVF9UWVBFX01BU0s7Ci0JCWlmICh0eXBlID09IERQX0RXTl9TVFJNX1BPUlRfVFlQRV9BTkFM T0cpCi0JCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBp bnQgZHBfY3RybF9saW5rX21haW50ZW5hbmNlKHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwp Ci17Ci0JaW50IHJldCA9IDA7Ci0KLQljdHJsLT5kcF9jdHJsLnB1c2hfaWRsZSgmY3RybC0+ZHBf Y3RybCk7Ci0JY3RybC0+ZHBfY3RybC5yZXNldCgmY3RybC0+ZHBfY3RybCk7Ci0KLQljdHJsLT5w aXhlbF9yYXRlID0gY3RybC0+cGFuZWwtPnBpbmZvLnBpeGVsX2Nsa19raHo7Ci0KLQlkbyB7Ci0J CWlmIChyZXQgPT0gLUVBR0FJTikgewotCQkJLyogdHJ5IHdpdGggbG93ZXIgbGluayByYXRlICov Ci0JCQlkcF9jdHJsX2xpbmtfcmF0ZV9kb3duX3NoaWZ0KGN0cmwpOwotCi0JCQljdHJsLT5jYXRh bG9nLT5tYWlubGlua19jdHJsKGN0cmwtPmNhdGFsb2csIGZhbHNlKTsKLQkJfQotCi0JCWN0cmwt PmNhdGFsb2ctPnBoeV9sYW5lX2NmZyhjdHJsLT5jYXRhbG9nLAotCQkJY3RybC0+b3JpZW50YXRp b24sIGN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmxhbmVfY291bnQpOwotCi0JCS8qCi0JCSAqIERp c2FibGUgYW5kIHJlLWVuYWJsZSB0aGUgbWFpbmxpbmsgY2xvY2sgc2luY2UgdGhlCi0JCSAqIGxp bmsgY2xvY2sgbWlnaHQgaGF2ZSBiZWVuIGFkanVzdGVkIGFzIHBhcnQgb2YgdGhlCi0JCSAqIGxp bmsgbWFpbnRlbmFuY2UuCi0JCSAqLwotCQlkcF9jdHJsX2Rpc2FibGVfbWFpbmxpbmtfY2xvY2tz KGN0cmwpOwotCi0JCXJldCA9IGRwX2N0cmxfZW5hYmxlX21haW5saW5rX2Nsb2NrcyhjdHJsKTsK LQkJaWYgKHJldCkKLQkJCWNvbnRpbnVlOwotCi0JCWRwX2N0cmxfY29uZmlndXJlX3NvdXJjZV9w YXJhbXMoY3RybCk7Ci0KLQkJY3RybC0+Y2F0YWxvZy0+Y29uZmlnX21zYShjdHJsLT5jYXRhbG9n LAotCQkJZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKAotCQkJY3RybC0+bGluay0+bGlua19w YXJhbXMuYndfY29kZSksCi0JCQljdHJsLT5waXhlbF9yYXRlLCBkcF9jdHJsX3VzZV9maXhlZF9u dmlkKGN0cmwpKTsKLQotCQlyZWluaXRfY29tcGxldGlvbigmY3RybC0+aWRsZV9jb21wKTsKLQot CQlyZXQgPSBkcF9jdHJsX3NldHVwX21haW5fbGluayhjdHJsLCB0cnVlKTsKLQl9IHdoaWxlIChy ZXQgPT0gLUVBR0FJTik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBkcF9jdHJs X3Byb2Nlc3NfcGh5X3Rlc3RfcmVxdWVzdChzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQot ewotCWludCByZXQgPSAwOwotCi0JaWYgKCFjdHJsLT5saW5rLT5waHlfcGFyYW1zLnBoeV90ZXN0 X3BhdHRlcm5fc2VsKSB7Ci0JCXByX2RlYnVnKCJubyB0ZXN0IHBhdHRlcm4gc2VsZWN0ZWQgYnkg c2lua1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlwcl9kZWJ1Zygic3RhcnRcbiIpOwotCi0JY3Ry bC0+ZHBfY3RybC5wdXNoX2lkbGUoJmN0cmwtPmRwX2N0cmwpOwotCS8qCi0JICogVGhlIGdsb2Jh bCByZXNldCB3aWxsIG5lZWQgRFAgbGluayByYWxhdGVkIGNsb2NrcyB0byBiZQotCSAqIHJ1bm5p bmcuIEFkZCB0aGUgZ2xvYmFsIHJlc2V0IGp1c3QgYmVmb3JlIGRpc2FibGluZyB0aGUKLQkgKiBs aW5rIGNsb2NrcyBhbmQgY29yZSBjbG9ja3MuCi0JICovCi0JY3RybC0+ZHBfY3RybC5yZXNldCgm Y3RybC0+ZHBfY3RybCk7Ci0JY3RybC0+ZHBfY3RybC5vZmYoJmN0cmwtPmRwX2N0cmwpOwotCi0J cmV0ID0gY3RybC0+ZHBfY3RybC5vbigmY3RybC0+ZHBfY3RybCk7Ci0JaWYgKHJldCkKLQkJcHJf ZXJyKCJmYWlsZWQgdG8gZW5hYmxlIERQIGNvbnRyb2xsZXJcbiIpOwotCi0JcHJfZGVidWcoImVu ZFxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2N0cmxfc2VuZF9waHlfdGVzdF9wYXR0ZXJuKHN0 cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwpCi17Ci0JYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0J dTMyIHBhdHRlcm5fc2VudCA9IDB4MDsKLQl1MzIgcGF0dGVybl9yZXF1ZXN0ZWQgPSBjdHJsLT5s aW5rLT5waHlfcGFyYW1zLnBoeV90ZXN0X3BhdHRlcm5fc2VsOwotCi0JcHJfZGVidWcoInJlcXVl c3Q6ICVzXG4iLAotCQkJZHBfbGlua19nZXRfcGh5X3Rlc3RfcGF0dGVybihwYXR0ZXJuX3JlcXVl c3RlZCkpOwotCi0JY3RybC0+Y2F0YWxvZy0+dXBkYXRlX3Z4X3B4KGN0cmwtPmNhdGFsb2csCi0J CQljdHJsLT5saW5rLT5waHlfcGFyYW1zLnZfbGV2ZWwsCi0JCQljdHJsLT5saW5rLT5waHlfcGFy YW1zLnBfbGV2ZWwpOwotCWN0cmwtPmNhdGFsb2ctPnNlbmRfcGh5X3BhdHRlcm4oY3RybC0+Y2F0 YWxvZywgcGF0dGVybl9yZXF1ZXN0ZWQpOwotCWN0cmwtPmxpbmstPnNlbmRfdGVzdF9yZXNwb25z ZShjdHJsLT5saW5rKTsKLQotCXBhdHRlcm5fc2VudCA9IGN0cmwtPmNhdGFsb2ctPnJlYWRfcGh5 X3BhdHRlcm4oY3RybC0+Y2F0YWxvZyk7Ci0KLQlzd2l0Y2ggKHBhdHRlcm5fc2VudCkgewotCWNh c2UgTVJfTElOS19UUkFJTklORzE6Ci0JCWlmIChwYXR0ZXJuX3JlcXVlc3RlZCA9PQotCQkJCURQ X1RFU1RfUEhZX1BBVFRFUk5fRDEwXzJfTk9fU0NSQU1CTElORykKLQkJCXN1Y2Nlc3MgPSB0cnVl OwotCQlicmVhazsKLQljYXNlIE1SX0xJTktfU1lNQk9MX0VSTToKLQkJaWYgKChwYXR0ZXJuX3Jl cXVlc3RlZCA9PQotCQkJCURQX1RFU1RfUEhZX1BBVFRFUk5fU1lNQk9MX0VSUl9NRUFTVVJFTUVO VF9DTlQpCi0JCQl8fCAocGF0dGVybl9yZXF1ZXN0ZWQgPT0KLQkJCQlEUF9URVNUX1BIWV9QQVRU RVJOX0hCUjJfQ1RTX0VZRV9QQVRURVJOKSkKLQkJCXN1Y2Nlc3MgPSB0cnVlOwotCQlicmVhazsK LQljYXNlIE1SX0xJTktfUFJCUzc6Ci0JCWlmIChwYXR0ZXJuX3JlcXVlc3RlZCA9PSBEUF9URVNU X1BIWV9QQVRURVJOX1BSQlM3KQotCQkJc3VjY2VzcyA9IHRydWU7Ci0JCWJyZWFrOwotCWNhc2Ug TVJfTElOS19DVVNUT004MDoKLQkJaWYgKHBhdHRlcm5fcmVxdWVzdGVkID09Ci0JCQkJRFBfVEVT VF9QSFlfUEFUVEVSTl84MF9CSVRfQ1VTVE9NX1BBVFRFUk4pCi0JCQlzdWNjZXNzID0gdHJ1ZTsK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJc3VjY2VzcyA9IGZhbHNlOwotCQlyZXR1cm47Ci0JfQot Ci0JcHJfZGVidWcoIiVzOiAlc1xuIiwgc3VjY2VzcyA/ICJzdWNjZXNzIiA6ICJmYWlsZWQiLAot CQkJZHBfbGlua19nZXRfcGh5X3Rlc3RfcGF0dGVybihwYXR0ZXJuX3JlcXVlc3RlZCkpOwotfQot Ci1zdGF0aWMgdm9pZCBkcF9jdHJsX2hhbmRsZV9zaW5rX3JlcXVlc3Qoc3RydWN0IGRwX2N0cmwg KmRwX2N0cmwpCi17Ci0Jc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybDsKLQl1MzIgc2lua19y ZXF1ZXN0ID0gMHgwOwotCi0JaWYgKCFkcF9jdHJsKSB7Ci0JCXByX2VycigiaW52YWxpZCBpbnB1 dFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQljdHJsID0gY29udGFpbmVyX29mKGRwX2N0cmwsIHN0 cnVjdCBkcF9jdHJsX3ByaXZhdGUsIGRwX2N0cmwpOwotCXNpbmtfcmVxdWVzdCA9IGN0cmwtPmxp bmstPnNpbmtfcmVxdWVzdDsKLQotCWlmIChzaW5rX3JlcXVlc3QgJiBEUF9URVNUX0xJTktfUEhZ X1RFU1RfUEFUVEVSTikgewotCQlwcl9pbmZvKCJQSFlfVEVTVF9QQVRURVJOIHJlcXVlc3RcbiIp OwotCQlkcF9jdHJsX3Byb2Nlc3NfcGh5X3Rlc3RfcmVxdWVzdChjdHJsKTsKLQl9Ci0KLQlpZiAo c2lua19yZXF1ZXN0ICYgRFBfTElOS19TVEFUVVNfVVBEQVRFRCkKLQkJZHBfY3RybF9saW5rX21h aW50ZW5hbmNlKGN0cmwpOwotCi0JaWYgKHNpbmtfcmVxdWVzdCAmIERQX1RFU1RfTElOS19UUkFJ TklORykgewotCQljdHJsLT5saW5rLT5zZW5kX3Rlc3RfcmVzcG9uc2UoY3RybC0+bGluayk7Ci0J CWRwX2N0cmxfbGlua19tYWludGVuYW5jZShjdHJsKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGRw X2N0cmxfcmVzZXQoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpCi17Ci0Jc3RydWN0IGRwX2N0cmxf cHJpdmF0ZSAqY3RybDsKLQotCWlmICghZHBfY3RybCkgewotCQlwcl9lcnIoImludmFsaWQgcGFy YW1zXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWN0cmwgPSBjb250YWluZXJfb2YoZHBfY3RybCwg c3RydWN0IGRwX2N0cmxfcHJpdmF0ZSwgZHBfY3RybCk7Ci0JY3RybC0+Y2F0YWxvZy0+cmVzZXQo Y3RybC0+Y2F0YWxvZyk7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfY3RybF9vbihzdHJ1Y3QgZHBfY3Ry bCAqZHBfY3RybCkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0 cmw7Ci0JdTMyIHJhdGUgPSAwOwotCXUzMiBsaW5rX3RyYWluX21heF9yZXRyaWVzID0gMTAwOwot CXUzMiBjb25zdCBwaHlfY3RzX3BpeGVsX2Nsa19raHogPSAxNDg1MDA7Ci0KLQlpZiAoIWRwX2N0 cmwpIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQljdHJsID0gY29udGFp bmVyX29mKGRwX2N0cmwsIHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUsIGRwX2N0cmwpOwotCi0JYXRv bWljX3NldCgmY3RybC0+YWJvcnRlZCwgMCk7Ci0JcmF0ZSA9IGN0cmwtPnBhbmVsLT5saW5rX2lu Zm8ucmF0ZTsKLQotCWN0cmwtPnBvd2VyLT5jbGtfZW5hYmxlKGN0cmwtPnBvd2VyLCBEUF9DT1JF X1BNLCB0cnVlKTsKLQljdHJsLT5jYXRhbG9nLT5ocGRfY29uZmlnKGN0cmwtPmNhdGFsb2csIHRy dWUpOwotCi0JaWYgKGN0cmwtPmxpbmstPnNpbmtfcmVxdWVzdCAmIERQX1RFU1RfTElOS19QSFlf VEVTVF9QQVRURVJOKSB7Ci0JCXByX2RlYnVnKCJ1c2luZyBwaHkgdGVzdCBsaW5rIHBhcmFtZXRl cnNcbiIpOwotCQlpZiAoIWN0cmwtPnBhbmVsLT5waW5mby5waXhlbF9jbGtfa2h6KQotCQkJY3Ry bC0+cGl4ZWxfcmF0ZSA9IHBoeV9jdHNfcGl4ZWxfY2xrX2toejsKLQl9IGVsc2UgewotCQljdHJs LT5saW5rLT5saW5rX3BhcmFtcy5id19jb2RlID0KLQkJCWRybV9kcF9saW5rX3JhdGVfdG9fYndf Y29kZShyYXRlKTsKLQkJY3RybC0+bGluay0+bGlua19wYXJhbXMubGFuZV9jb3VudCA9Ci0JCQlj dHJsLT5wYW5lbC0+bGlua19pbmZvLm51bV9sYW5lczsKLQkJY3RybC0+cGl4ZWxfcmF0ZSA9IGN0 cmwtPnBhbmVsLT5waW5mby5waXhlbF9jbGtfa2h6OwotCX0KLQotCXByX2RlYnVnKCJid19jb2Rl PSVkLCBsYW5lX2NvdW50PSVkLCBwaXhlbF9yYXRlPSVkXG4iLAotCQljdHJsLT5saW5rLT5saW5r X3BhcmFtcy5id19jb2RlLAotCQljdHJsLT5saW5rLT5saW5rX3BhcmFtcy5sYW5lX2NvdW50LCBj dHJsLT5waXhlbF9yYXRlKTsKLQotCWN0cmwtPmNhdGFsb2ctPnBoeV9sYW5lX2NmZyhjdHJsLT5j YXRhbG9nLAotCQkJY3RybC0+b3JpZW50YXRpb24sIGN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmxh bmVfY291bnQpOwotCi0JcmMgPSBkcF9jdHJsX2VuYWJsZV9tYWlubGlua19jbG9ja3MoY3RybCk7 Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsKLQotCXJlaW5pdF9jb21wbGV0aW9uKCZjdHJsLT5pZGxl X2NvbXApOwotCi0JZHBfY3RybF9jb25maWd1cmVfc291cmNlX3BhcmFtcyhjdHJsKTsKLQotCXdo aWxlICgtLWxpbmtfdHJhaW5fbWF4X3JldHJpZXMgJiYgIWF0b21pY19yZWFkKCZjdHJsLT5hYm9y dGVkKSkgewotCQljdHJsLT5jYXRhbG9nLT5jb25maWdfbXNhKGN0cmwtPmNhdGFsb2csCi0JCQlk cm1fZHBfYndfY29kZV90b19saW5rX3JhdGUoCi0JCQljdHJsLT5saW5rLT5saW5rX3BhcmFtcy5i d19jb2RlKSwKLQkJCWN0cmwtPnBpeGVsX3JhdGUsIGRwX2N0cmxfdXNlX2ZpeGVkX252aWQoY3Ry bCkpOwotCi0JCXJjID0gZHBfY3RybF9zZXR1cF9tYWluX2xpbmsoY3RybCwgdHJ1ZSk7Ci0JCWlm ICghcmMpCi0JCQlicmVhazsKLQotCQkvKiB0cnkgd2l0aCBsb3dlciBsaW5rIHJhdGUgKi8KLQkJ ZHBfY3RybF9saW5rX3JhdGVfZG93bl9zaGlmdChjdHJsKTsKLQotCQljdHJsLT5jYXRhbG9nLT5t YWlubGlua19jdHJsKGN0cmwtPmNhdGFsb2csIGZhbHNlKTsKLQotCQlkcF9jdHJsX2Rpc2FibGVf bWFpbmxpbmtfY2xvY2tzKGN0cmwpOwotCQkvKiBodyByZWNvbW1lbmRlZCBkZWxheSBiZWZvcmUg cmUtZW5hYmxpbmcgY2xvY2tzICovCi0JCW1zbGVlcCgyMCk7Ci0KLQkJZHBfY3RybF9lbmFibGVf bWFpbmxpbmtfY2xvY2tzKGN0cmwpOwotCX0KLQotCWlmIChjdHJsLT5saW5rLT5zaW5rX3JlcXVl c3QgJiBEUF9URVNUX0xJTktfUEhZX1RFU1RfUEFUVEVSTikKLQkJZHBfY3RybF9zZW5kX3BoeV90 ZXN0X3BhdHRlcm4oY3RybCk7Ci0KLQlwcl9kZWJ1ZygiRW5kLVxuIik7Ci0KLWVuZDoKLQlyZXR1 cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2N0cmxfb2ZmKHN0cnVjdCBkcF9jdHJsICpkcF9j dHJsKQotewotCXN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmw7Ci0KLQlpZiAoIWRwX2N0cmwp Ci0JCXJldHVybjsKLQotCWN0cmwgPSBjb250YWluZXJfb2YoZHBfY3RybCwgc3RydWN0IGRwX2N0 cmxfcHJpdmF0ZSwgZHBfY3RybCk7Ci0KLQljdHJsLT5jYXRhbG9nLT5tYWlubGlua19jdHJsKGN0 cmwtPmNhdGFsb2csIGZhbHNlKTsKLQljdHJsLT5jYXRhbG9nLT5yZXNldChjdHJsLT5jYXRhbG9n KTsKLQotCS8qIE1ha2Ugc3VyZSBEUCBpcyBkaXNhYmxlZCBiZWZvcmUgY2xrIGRpc2FibGUgKi8K LQl3bWIoKTsKLQotCWRwX2N0cmxfZGlzYWJsZV9tYWlubGlua19jbG9ja3MoY3RybCk7Ci0KLQlw cl9kZWJ1ZygiRFAgb2ZmIGRvbmVcbiIpOwotfQotCi1zdGF0aWMgdm9pZCBkcF9jdHJsX2lzcihz dHJ1Y3QgZHBfY3RybCAqZHBfY3RybCkKLXsKLQlzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJs OwotCi0JaWYgKCFkcF9jdHJsKQotCQlyZXR1cm47Ci0KLQljdHJsID0gY29udGFpbmVyX29mKGRw X2N0cmwsIHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUsIGRwX2N0cmwpOwotCi0JY3RybC0+Y2F0YWxv Zy0+Z2V0X2ludGVycnVwdChjdHJsLT5jYXRhbG9nKTsKLQotCWlmIChjdHJsLT5jYXRhbG9nLT5p c3IgJiBEUF9DVFJMX0lOVFJfUkVBRFlfRk9SX1ZJREVPKQotCQlkcF9jdHJsX3ZpZGVvX3JlYWR5 KGN0cmwpOwotCi0JaWYgKGN0cmwtPmNhdGFsb2ctPmlzciAmIERQX0NUUkxfSU5UUl9JRExFX1BB VFRFUk5fU0VOVCkKLQkJZHBfY3RybF9pZGxlX3BhdHRlcm5zX3NlbnQoY3RybCk7Ci19Ci0KLXN0 cnVjdCBkcF9jdHJsICpkcF9jdHJsX2dldChzdHJ1Y3QgZHBfY3RybF9pbiAqaW4pCi17Ci0JaW50 IHJjID0gMDsKLQlzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsOwotCXN0cnVjdCBkcF9jdHJs ICpkcF9jdHJsOwotCi0JaWYgKCFpbi0+ZGV2IHx8ICFpbi0+cGFuZWwgfHwgIWluLT5hdXggfHwK LQkgICAgIWluLT5saW5rIHx8ICFpbi0+Y2F0YWxvZykgewotCQlwcl9lcnIoImludmFsaWQgaW5w dXRcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JY3RybCA9IGRl dm1fa3phbGxvYyhpbi0+ZGV2LCBzaXplb2YoKmN0cmwpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWN0 cmwpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWluaXRfY29tcGxl dGlvbigmY3RybC0+aWRsZV9jb21wKTsKLQlpbml0X2NvbXBsZXRpb24oJmN0cmwtPnZpZGVvX2Nv bXApOwotCi0JLyogaW4gcGFyYW1ldGVycyAqLwotCWN0cmwtPnBhcnNlciAgID0gaW4tPnBhcnNl cjsKLQljdHJsLT5wYW5lbCAgICA9IGluLT5wYW5lbDsKLQljdHJsLT5wb3dlciAgICA9IGluLT5w b3dlcjsKLQljdHJsLT5hdXggICAgICA9IGluLT5hdXg7Ci0JY3RybC0+bGluayAgICAgPSBpbi0+ bGluazsKLQljdHJsLT5jYXRhbG9nICA9IGluLT5jYXRhbG9nOwotCi0JZHBfY3RybCA9ICZjdHJs LT5kcF9jdHJsOwotCi0JLyogb3V0IHBhcmFtZXRlcnMgKi8KLQlkcF9jdHJsLT5pbml0ICAgICAg PSBkcF9jdHJsX2hvc3RfaW5pdDsKLQlkcF9jdHJsLT5kZWluaXQgICAgPSBkcF9jdHJsX2hvc3Rf ZGVpbml0OwotCWRwX2N0cmwtPm9uICAgICAgICA9IGRwX2N0cmxfb247Ci0JZHBfY3RybC0+b2Zm ICAgICAgID0gZHBfY3RybF9vZmY7Ci0JZHBfY3RybC0+cHVzaF9pZGxlID0gZHBfY3RybF9wdXNo X2lkbGU7Ci0JZHBfY3RybC0+YWJvcnQgICAgID0gZHBfY3RybF9hYm9ydDsKLQlkcF9jdHJsLT5p c3IgICAgICAgPSBkcF9jdHJsX2lzcjsKLQlkcF9jdHJsLT5yZXNldAkgICA9IGRwX2N0cmxfcmVz ZXQ7Ci0JZHBfY3RybC0+aGFuZGxlX3NpbmtfcmVxdWVzdCA9IGRwX2N0cmxfaGFuZGxlX3Npbmtf cmVxdWVzdDsKLQotCXJldHVybiBkcF9jdHJsOwotZXJyb3I6Ci0JcmV0dXJuIEVSUl9QVFIocmMp OwotfQotCi12b2lkIGRwX2N0cmxfcHV0KHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsKQotewotCXN0 cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmw7Ci0KLQlpZiAoIWRwX2N0cmwpCi0JCXJldHVybjsK LQotCWN0cmwgPSBjb250YWluZXJfb2YoZHBfY3RybCwgc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSwg ZHBfY3RybCk7Ci0KLQlkZXZtX2tmcmVlKGN0cmwtPmRldiwgY3RybCk7Ci19CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2N0cmwuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHAvZHBfY3RybC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWIyMjFhLi4wMDAw MDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5oCisrKyAvZGV2L251bGwK QEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE4LCBUaGUgTGlu dXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQot ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0g KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwot Ci0jaWZuZGVmIF9EUF9DVFJMX0hfCi0jZGVmaW5lIF9EUF9DVFJMX0hfCi0KLSNpbmNsdWRlICJk cF9hdXguaCIKLSNpbmNsdWRlICJkcF9wYW5lbC5oIgotI2luY2x1ZGUgImRwX2xpbmsuaCIKLSNp bmNsdWRlICJkcF9wYXJzZXIuaCIKLSNpbmNsdWRlICJkcF9wb3dlci5oIgotI2luY2x1ZGUgImRw X2NhdGFsb2cuaCIKLQotc3RydWN0IGRwX2N0cmwgewotCWludCAoKmluaXQpKHN0cnVjdCBkcF9j dHJsICpkcF9jdHJsLCBib29sIGZsaXApOwotCXZvaWQgKCpkZWluaXQpKHN0cnVjdCBkcF9jdHJs ICpkcF9jdHJsKTsKLQlpbnQgKCpvbikoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpOwotCXZvaWQg KCpvZmYpKHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsKTsKLQl2b2lkICgqcmVzZXQpKHN0cnVjdCBk cF9jdHJsICpkcF9jdHJsKTsKLQl2b2lkICgqcHVzaF9pZGxlKShzdHJ1Y3QgZHBfY3RybCAqZHBf Y3RybCk7Ci0Jdm9pZCAoKmFib3J0KShzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCk7Ci0Jdm9pZCAo Kmlzcikoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpOwotCXZvaWQgKCpoYW5kbGVfc2lua19yZXF1 ZXN0KShzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCk7Ci19OwotCi1zdHJ1Y3QgZHBfY3RybF9pbiB7 Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCXN0cnVjdCBkcF9wYW5lbCAqcGFuZWw7Ci0Jc3RydWN0 IGRwX2F1eCAqYXV4OwotCXN0cnVjdCBkcF9saW5rICpsaW5rOwotCXN0cnVjdCBkcF9wYXJzZXIg KnBhcnNlcjsKLQlzdHJ1Y3QgZHBfcG93ZXIgKnBvd2VyOwotCXN0cnVjdCBkcF9jYXRhbG9nX2N0 cmwgKmNhdGFsb2c7Ci19OwotCi1zdHJ1Y3QgZHBfY3RybCAqZHBfY3RybF9nZXQoc3RydWN0IGRw X2N0cmxfaW4gKmluKTsKLXZvaWQgZHBfY3RybF9wdXQoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwp OwotCi0jZW5kaWYgLyogX0RQX0NUUkxfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHAvZHBfZGVidWcuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGVidWcuYwpk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ4ZjgyZS4uMDAwMDAwMAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2RlYnVnLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MDMgKzAs MCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5k Ci0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0jZGVmaW5lIHBy X2ZtdChmbXQpCSJbZHJtLWRwXSAlczogIiBmbXQsIF9fZnVuY19fCi0KLSNpbmNsdWRlIDxsaW51 eC9kZWJ1Z2ZzLmg+Ci0KLSNpbmNsdWRlICJkcF9wYXJzZXIuaCIKLSNpbmNsdWRlICJkcF9wb3dl ci5oIgotI2luY2x1ZGUgImRwX2NhdGFsb2cuaCIKLSNpbmNsdWRlICJkcF9hdXguaCIKLSNpbmNs dWRlICJkcF9jdHJsLmgiCi0jaW5jbHVkZSAiZHBfZGVidWcuaCIKLSNpbmNsdWRlICJkcm1fY29u bmVjdG9yLmgiCi0jaW5jbHVkZSAiZHBfZGlzcGxheS5oIgotCi0jZGVmaW5lIERFQlVHX05BTUUg ImRybV9kcCIKLQotc3RydWN0IGRwX2RlYnVnX3ByaXZhdGUgewotCXN0cnVjdCBkZW50cnkgKnJv b3Q7Ci0KLQlzdHJ1Y3QgZHBfdXNicGQgKnVzYnBkOwotCXN0cnVjdCBkcF9saW5rICpsaW5rOwot CXN0cnVjdCBkcF9wYW5lbCAqcGFuZWw7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgKipjb25uZWN0 b3I7Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCi0Jc3RydWN0IGRwX2RlYnVnIGRwX2RlYnVnOwot fTsKLQotc3RhdGljIHNzaXplX3QgZHBfZGVidWdfd3JpdGVfaHBkKHN0cnVjdCBmaWxlICpmaWxl LAotCQljb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWZmLCBzaXplX3QgY291bnQsIGxvZmZfdCAq cHBvcykKLXsKLQlzdHJ1Y3QgZHBfZGVidWdfcHJpdmF0ZSAqZGVidWcgPSBmaWxlLT5wcml2YXRl X2RhdGE7Ci0JY2hhciBidWZbU1pfOF07Ci0Jc2l6ZV90IGxlbiA9IDA7Ci0JaW50IGhwZDsKLQot CWlmICghZGVidWcpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKCpwcG9zKQotCQlyZXR1cm4g MDsKLQotCS8qIExlYXZlIHJvb20gZm9yIHRlcm1pbmF0aW9uIGNoYXIgKi8KLQlsZW4gPSBtaW5f dChzaXplX3QsIGNvdW50LCBTWl84IC0gMSk7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNl cl9idWZmLCBsZW4pKQotCQlnb3RvIGVuZDsKLQotCWJ1ZltsZW5dID0gJ1wwJzsKLQotCWlmIChr c3RydG9pbnQoYnVmLCAxMCwgJmhwZCkgIT0gMCkKLQkJZ290byBlbmQ7Ci0KLQlkZWJ1Zy0+dXNi cGQtPmNvbm5lY3QoZGVidWctPnVzYnBkLCBocGQpOwotZW5kOgotCXJldHVybiAtbGVuOwotfQot Ci1zdGF0aWMgc3NpemVfdCBkcF9kZWJ1Z193cml0ZV9lZGlkX21vZGVzKHN0cnVjdCBmaWxlICpm aWxlLAotCQljb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWZmLCBzaXplX3QgY291bnQsIGxvZmZf dCAqcHBvcykKLXsKLQlzdHJ1Y3QgZHBfZGVidWdfcHJpdmF0ZSAqZGVidWcgPSBmaWxlLT5wcml2 YXRlX2RhdGE7Ci0JY2hhciBidWZbU1pfMzJdOwotCXNpemVfdCBsZW4gPSAwOwotCWludCBoZGlz cGxheSA9IDAsIHZkaXNwbGF5ID0gMCwgdnJlZnJlc2ggPSAwOwotCi0JaWYgKCFkZWJ1ZykKLQkJ cmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoKnBwb3MpCi0JCWdvdG8gZW5kOwotCi0JLyogTGVhdmUg cm9vbSBmb3IgdGVybWluYXRpb24gY2hhciAqLwotCWxlbiA9IG1pbl90KHNpemVfdCwgY291bnQs IFNaXzMyIC0gMSk7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWZmLCBsZW4pKQot CQlnb3RvIGNsZWFyOwotCi0JYnVmW2xlbl0gPSAnXDAnOwotCi0JaWYgKHNzY2FuZihidWYsICIl ZCAlZCAlZCIsICZoZGlzcGxheSwgJnZkaXNwbGF5LCAmdnJlZnJlc2gpICE9IDMpCi0JCWdvdG8g Y2xlYXI7Ci0KLQlpZiAoIWhkaXNwbGF5IHx8ICF2ZGlzcGxheSB8fCAhdnJlZnJlc2gpCi0JCWdv dG8gY2xlYXI7Ci0KLQlkZWJ1Zy0+ZHBfZGVidWcuZGVidWdfZW4gPSB0cnVlOwotCWRlYnVnLT5k cF9kZWJ1Zy5oZGlzcGxheSA9IGhkaXNwbGF5OwotCWRlYnVnLT5kcF9kZWJ1Zy52ZGlzcGxheSA9 IHZkaXNwbGF5OwotCWRlYnVnLT5kcF9kZWJ1Zy52cmVmcmVzaCA9IHZyZWZyZXNoOwotCWdvdG8g ZW5kOwotY2xlYXI6Ci0JcHJfZGVidWcoImNsZWFyaW5nIGRlYnVnIG1vZGVzXG4iKTsKLQlkZWJ1 Zy0+ZHBfZGVidWcuZGVidWdfZW4gPSBmYWxzZTsKLWVuZDoKLQlyZXR1cm4gbGVuOwotfQotCi1z dGF0aWMgc3NpemVfdCBkcF9kZWJ1Z19yZWFkX2Nvbm5lY3RlZChzdHJ1Y3QgZmlsZSAqZmlsZSwK LQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmZiwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17 Ci0Jc3RydWN0IGRwX2RlYnVnX3ByaXZhdGUgKmRlYnVnID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwot CWNoYXIgYnVmW1NaXzhdOwotCXUzMiBsZW4gPSAwOwotCi0JaWYgKCFkZWJ1ZykKLQkJcmV0dXJu IC1FTk9ERVY7Ci0KLQlpZiAoKnBwb3MpCi0JCXJldHVybiAwOwotCi0JbGVuICs9IHNucHJpbnRm KGJ1ZiwgU1pfOCwgIiVkXG4iLCBkZWJ1Zy0+dXNicGQtPmhwZF9oaWdoKTsKLQotCWlmIChjb3B5 X3RvX3VzZXIodXNlcl9idWZmLCBidWYsIGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JKnBw b3MgKz0gbGVuOwotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGRwX2RlYnVnX3Jl YWRfZWRpZF9tb2RlcyhzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJY2hhciBfX3VzZXIgKnVzZXJfYnVm Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGRwX2RlYnVnX3ByaXZh dGUgKmRlYnVnID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgKmJ1ZjsKLQl1MzIgbGVuID0g MDsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Ci0Jc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7Ci0KLQlpZiAoIWRlYnVnKSB7Ci0JCXByX2Vycigi aW52YWxpZCBkYXRhXG4iKTsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIGVycm9yOwotCX0KLQot CWNvbm5lY3RvciA9ICpkZWJ1Zy0+Y29ubmVjdG9yOwotCi0JaWYgKCFjb25uZWN0b3IpIHsKLQkJ cHJfZXJyKCJjb25uZWN0b3IgaXMgTlVMTFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBl cnJvcjsKLQl9Ci0KLQlpZiAoKnBwb3MpCi0JCWdvdG8gZXJyb3I7Ci0KLQlidWYgPSBremFsbG9j KFNaXzRLLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdv dG8gZXJyb3I7Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmY29ubmVjdG9yLT5t b2RlcywgaGVhZCkgewotCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBTWl80SyAtIGxlbiwK LQkJIiVzICVkICVkICVkICVkICVkICVkICVkICVkICVkIDB4JXhcbiIsCi0JCW1vZGUtPm5hbWUs IG1vZGUtPnZyZWZyZXNoLCBtb2RlLT5oZGlzcGxheSwKLQkJbW9kZS0+aHN5bmNfc3RhcnQsIG1v ZGUtPmhzeW5jX2VuZCwgbW9kZS0+aHRvdGFsLAotCQltb2RlLT52ZGlzcGxheSwgbW9kZS0+dnN5 bmNfc3RhcnQsIG1vZGUtPnZzeW5jX2VuZCwKLQkJbW9kZS0+dnRvdGFsLCBtb2RlLT5mbGFncyk7 Ci0JfQotCi0JaWYgKGNvcHlfdG9fdXNlcih1c2VyX2J1ZmYsIGJ1ZiwgbGVuKSkgewotCQlrZnJl ZShidWYpOwotCQlyYyA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JKnBwb3MgKz0g bGVuOwotCWtmcmVlKGJ1Zik7Ci0KLQlyZXR1cm4gbGVuOwotZXJyb3I6Ci0JcmV0dXJuIHJjOwot fQotCi1zdGF0aWMgaW50IGRwX2RlYnVnX2NoZWNrX2J1ZmZlcl9vdmVyZmxvdyhpbnQgcmMsIGlu dCAqbWF4X3NpemUsIGludCAqbGVuKQotewotCWlmIChyYyA+PSAqbWF4X3NpemUpIHsKLQkJcHJf ZXJyKCJidWZmZXIgb3ZlcmZsb3dcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JKmxlbiAr PSByYzsKLQkqbWF4X3NpemUgPSBTWl80SyAtICpsZW47Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIHNzaXplX3QgZHBfZGVidWdfcmVhZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9f dXNlciAqdXNlcl9idWZmLAotCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1 Y3QgZHBfZGVidWdfcHJpdmF0ZSAqZGVidWcgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciAq YnVmOwotCXUzMiBsZW4gPSAwLCByYyA9IDA7Ci0JdTY0IGxjbGsgPSAwOwotCXUzMiBtYXhfc2l6 ZSA9IFNaXzRLOwotCi0JaWYgKCFkZWJ1ZykKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoKnBw b3MpCi0JCXJldHVybiAwOwotCi0JYnVmID0ga3phbGxvYyhTWl80SywgR0ZQX0tFUk5FTCk7Ci0J aWYgKCFidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmMgPSBzbnByaW50ZihidWYgKyBsZW4s IG1heF9zaXplLCAiXHRuYW1lID0gJXNcbiIsIERFQlVHX05BTUUpOwotCWlmIChkcF9kZWJ1Z19j aGVja19idWZmZXJfb3ZlcmZsb3cocmMsICZtYXhfc2l6ZSwgJmxlbikpCi0JCWdvdG8gZXJyb3I7 Ci0KLQlyYyA9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4X3NpemUsCi0JCSJcdGRwX3BhbmVsXG5c dFx0bWF4X3BjbGtfa2h6ID0gJWRcbiIsCi0JCWRlYnVnLT5wYW5lbC0+bWF4X3BjbGtfa2h6KTsK LQlpZiAoZHBfZGVidWdfY2hlY2tfYnVmZmVyX292ZXJmbG93KHJjLCAmbWF4X3NpemUsICZsZW4p KQotCQlnb3RvIGVycm9yOwotCi0JcmMgPSBzbnByaW50ZihidWYgKyBsZW4sIG1heF9zaXplLAot CQkiXHRkcm1fZHBfbGlua1xuXHRcdHJhdGUgPSAldVxuIiwKLQkJZGVidWctPnBhbmVsLT5saW5r X2luZm8ucmF0ZSk7Ci0JaWYgKGRwX2RlYnVnX2NoZWNrX2J1ZmZlcl9vdmVyZmxvdyhyYywgJm1h eF9zaXplLCAmbGVuKSkKLQkJZ290byBlcnJvcjsKLQotCXJjID0gc25wcmludGYoYnVmICsgbGVu LCBtYXhfc2l6ZSwKLQkJIlx0XHRudW1fbGFuZXMgPSAldVxuIiwKLQkJZGVidWctPnBhbmVsLT5s aW5rX2luZm8ubnVtX2xhbmVzKTsKLQlpZiAoZHBfZGVidWdfY2hlY2tfYnVmZmVyX292ZXJmbG93 KHJjLCAmbWF4X3NpemUsICZsZW4pKQotCQlnb3RvIGVycm9yOwotCi0JcmMgPSBzbnByaW50Zihi dWYgKyBsZW4sIG1heF9zaXplLAotCQkiXHRcdGNhcGFiaWxpdGllcyA9ICVsdVxuIiwKLQkJZGVi dWctPnBhbmVsLT5saW5rX2luZm8uY2FwYWJpbGl0aWVzKTsKLQlpZiAoZHBfZGVidWdfY2hlY2tf YnVmZmVyX292ZXJmbG93KHJjLCAmbWF4X3NpemUsICZsZW4pKQotCQlnb3RvIGVycm9yOwotCi0J cmMgPSBzbnByaW50ZihidWYgKyBsZW4sIG1heF9zaXplLAotCQkiXHRkcF9wYW5lbF9pbmZvOlxu XHRcdGFjdGl2ZSA9ICVkeCVkXG4iLAotCQlkZWJ1Zy0+cGFuZWwtPnBpbmZvLmhfYWN0aXZlLAot CQlkZWJ1Zy0+cGFuZWwtPnBpbmZvLnZfYWN0aXZlKTsKLQlpZiAoZHBfZGVidWdfY2hlY2tfYnVm ZmVyX292ZXJmbG93KHJjLCAmbWF4X3NpemUsICZsZW4pKQotCQlnb3RvIGVycm9yOwotCi0JcmMg PSBzbnByaW50ZihidWYgKyBsZW4sIG1heF9zaXplLAotCQkiXHRcdGJhY2tfcG9yY2ggPSAlZHgl ZFxuIiwKLQkJZGVidWctPnBhbmVsLT5waW5mby5oX2JhY2tfcG9yY2gsCi0JCWRlYnVnLT5wYW5l bC0+cGluZm8udl9iYWNrX3BvcmNoKTsKLQlpZiAoZHBfZGVidWdfY2hlY2tfYnVmZmVyX292ZXJm bG93KHJjLCAmbWF4X3NpemUsICZsZW4pKQotCQlnb3RvIGVycm9yOwotCi0JcmMgPSBzbnByaW50 ZihidWYgKyBsZW4sIG1heF9zaXplLAotCQkiXHRcdGZyb250X3BvcmNoID0gJWR4JWRcbiIsCi0J CWRlYnVnLT5wYW5lbC0+cGluZm8uaF9mcm9udF9wb3JjaCwKLQkJZGVidWctPnBhbmVsLT5waW5m by52X2Zyb250X3BvcmNoKTsKLQlpZiAoZHBfZGVidWdfY2hlY2tfYnVmZmVyX292ZXJmbG93KHJj LCAmbWF4X3NpemUsICZsZW4pKQotCQlnb3RvIGVycm9yOwotCi0JcmMgPSBzbnByaW50ZihidWYg KyBsZW4sIG1heF9zaXplLAotCQkiXHRcdHN5bmNfd2lkdGggPSAlZHglZFxuIiwKLQkJZGVidWct PnBhbmVsLT5waW5mby5oX3N5bmNfd2lkdGgsCi0JCWRlYnVnLT5wYW5lbC0+cGluZm8udl9zeW5j X3dpZHRoKTsKLQlpZiAoZHBfZGVidWdfY2hlY2tfYnVmZmVyX292ZXJmbG93KHJjLCAmbWF4X3Np emUsICZsZW4pKQotCQlnb3RvIGVycm9yOwotCi0JcmMgPSBzbnByaW50ZihidWYgKyBsZW4sIG1h eF9zaXplLAotCQkiXHRcdGFjdGl2ZV9sb3cgPSAlZHglZFxuIiwKLQkJZGVidWctPnBhbmVsLT5w aW5mby5oX2FjdGl2ZV9sb3csCi0JCWRlYnVnLT5wYW5lbC0+cGluZm8udl9hY3RpdmVfbG93KTsK LQlpZiAoZHBfZGVidWdfY2hlY2tfYnVmZmVyX292ZXJmbG93KHJjLCAmbWF4X3NpemUsICZsZW4p KQotCQlnb3RvIGVycm9yOwotCi0JcmMgPSBzbnByaW50ZihidWYgKyBsZW4sIG1heF9zaXplLAot CQkiXHRcdGhfc2tldyA9ICVkXG4iLAotCQlkZWJ1Zy0+cGFuZWwtPnBpbmZvLmhfc2tldyk7Ci0J aWYgKGRwX2RlYnVnX2NoZWNrX2J1ZmZlcl9vdmVyZmxvdyhyYywgJm1heF9zaXplLCAmbGVuKSkK LQkJZ290byBlcnJvcjsKLQotCXJjID0gc25wcmludGYoYnVmICsgbGVuLCBtYXhfc2l6ZSwKLQkJ Ilx0XHRyZWZyZXNoIHJhdGUgPSAlZFxuIiwKLQkJZGVidWctPnBhbmVsLT5waW5mby5yZWZyZXNo X3JhdGUpOwotCWlmIChkcF9kZWJ1Z19jaGVja19idWZmZXJfb3ZlcmZsb3cocmMsICZtYXhfc2l6 ZSwgJmxlbikpCi0JCWdvdG8gZXJyb3I7Ci0KLQlyYyA9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4 X3NpemUsCi0JCSJcdFx0cGl4ZWwgY2xvY2sga2h6ID0gJWRcbiIsCi0JCWRlYnVnLT5wYW5lbC0+ cGluZm8ucGl4ZWxfY2xrX2toeik7Ci0JaWYgKGRwX2RlYnVnX2NoZWNrX2J1ZmZlcl9vdmVyZmxv dyhyYywgJm1heF9zaXplLCAmbGVuKSkKLQkJZ290byBlcnJvcjsKLQotCXJjID0gc25wcmludGYo YnVmICsgbGVuLCBtYXhfc2l6ZSwKLQkJIlx0XHRicHAgPSAlZFxuIiwKLQkJZGVidWctPnBhbmVs LT5waW5mby5icHApOwotCWlmIChkcF9kZWJ1Z19jaGVja19idWZmZXJfb3ZlcmZsb3cocmMsICZt YXhfc2l6ZSwgJmxlbikpCi0JCWdvdG8gZXJyb3I7Ci0KLQkvKiBMaW5rIEluZm9ybWF0aW9uICov Ci0JcmMgPSBzbnByaW50ZihidWYgKyBsZW4sIG1heF9zaXplLAotCQkiXHRkcF9saW5rOlxuXHRc dHRlc3RfcmVxdWVzdGVkID0gJWRcbiIsCi0JCWRlYnVnLT5saW5rLT5zaW5rX3JlcXVlc3QpOwot CWlmIChkcF9kZWJ1Z19jaGVja19idWZmZXJfb3ZlcmZsb3cocmMsICZtYXhfc2l6ZSwgJmxlbikp Ci0JCWdvdG8gZXJyb3I7Ci0KLQlyYyA9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4X3NpemUsCi0J CSJcdFx0bGFuZV9jb3VudCA9ICVkXG4iLCBkZWJ1Zy0+bGluay0+bGlua19wYXJhbXMubGFuZV9j b3VudCk7Ci0JaWYgKGRwX2RlYnVnX2NoZWNrX2J1ZmZlcl9vdmVyZmxvdyhyYywgJm1heF9zaXpl LCAmbGVuKSkKLQkJZ290byBlcnJvcjsKLQotCXJjID0gc25wcmludGYoYnVmICsgbGVuLCBtYXhf c2l6ZSwKLQkJIlx0XHRid19jb2RlID0gJWRcbiIsIGRlYnVnLT5saW5rLT5saW5rX3BhcmFtcy5i d19jb2RlKTsKLQlpZiAoZHBfZGVidWdfY2hlY2tfYnVmZmVyX292ZXJmbG93KHJjLCAmbWF4X3Np emUsICZsZW4pKQotCQlnb3RvIGVycm9yOwotCi0JbGNsayA9IGRybV9kcF9id19jb2RlX3RvX2xp bmtfcmF0ZSgKLQkJCWRlYnVnLT5saW5rLT5saW5rX3BhcmFtcy5id19jb2RlKSAqIDEwMDA7Ci0J cmMgPSBzbnByaW50ZihidWYgKyBsZW4sIG1heF9zaXplLAotCQkiXHRcdGxjbGsgPSAlbGxkXG4i LCBsY2xrKTsKLQlpZiAoZHBfZGVidWdfY2hlY2tfYnVmZmVyX292ZXJmbG93KHJjLCAmbWF4X3Np emUsICZsZW4pKQotCQlnb3RvIGVycm9yOwotCi0JcmMgPSBzbnByaW50ZihidWYgKyBsZW4sIG1h eF9zaXplLAotCQkiXHRcdHZfbGV2ZWwgPSAlZFxuIiwgZGVidWctPmxpbmstPnBoeV9wYXJhbXMu dl9sZXZlbCk7Ci0JaWYgKGRwX2RlYnVnX2NoZWNrX2J1ZmZlcl9vdmVyZmxvdyhyYywgJm1heF9z aXplLCAmbGVuKSkKLQkJZ290byBlcnJvcjsKLQotCXJjID0gc25wcmludGYoYnVmICsgbGVuLCBt YXhfc2l6ZSwKLQkJIlx0XHRwX2xldmVsID0gJWRcbiIsIGRlYnVnLT5saW5rLT5waHlfcGFyYW1z LnBfbGV2ZWwpOwotCWlmIChkcF9kZWJ1Z19jaGVja19idWZmZXJfb3ZlcmZsb3cocmMsICZtYXhf c2l6ZSwgJmxlbikpCi0JCWdvdG8gZXJyb3I7Ci0KLQlpZiAoY29weV90b191c2VyKHVzZXJfYnVm ZiwgYnVmLCBsZW4pKQotCQlnb3RvIGVycm9yOwotCi0JKnBwb3MgKz0gbGVuOwotCi0Ja2ZyZWUo YnVmKTsKLQlyZXR1cm4gbGVuOwotZXJyb3I6Ci0Ja2ZyZWUoYnVmKTsKLQlyZXR1cm4gLUVJTlZB TDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHBfZGVidWdfZm9w cyA9IHsKLQkub3BlbiA9IHNpbXBsZV9vcGVuLAotCS5yZWFkID0gZHBfZGVidWdfcmVhZF9pbmZv LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZWRpZF9tb2Rlc19m b3BzID0gewotCS5vcGVuID0gc2ltcGxlX29wZW4sCi0JLnJlYWQgPSBkcF9kZWJ1Z19yZWFkX2Vk aWRfbW9kZXMsCi0JLndyaXRlID0gZHBfZGVidWdfd3JpdGVfZWRpZF9tb2RlcywKLX07Ci0KLXN0 YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhwZF9mb3BzID0gewotCS5vcGVuID0g c2ltcGxlX29wZW4sCi0JLndyaXRlID0gZHBfZGVidWdfd3JpdGVfaHBkLAotfTsKLQotc3RhdGlj IGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29ubmVjdGVkX2ZvcHMgPSB7Ci0JLm9wZW4g PSBzaW1wbGVfb3BlbiwKLQkucmVhZCA9IGRwX2RlYnVnX3JlYWRfY29ubmVjdGVkLAotfTsKLQot c3RhdGljIGludCBkcF9kZWJ1Z19pbml0KHN0cnVjdCBkcF9kZWJ1ZyAqZHBfZGVidWcpCi17Ci0J aW50IHJjID0gMDsKLQlzdHJ1Y3QgZHBfZGVidWdfcHJpdmF0ZSAqZGVidWcgPSBjb250YWluZXJf b2YoZHBfZGVidWcsCi0JCXN0cnVjdCBkcF9kZWJ1Z19wcml2YXRlLCBkcF9kZWJ1Zyk7Ci0Jc3Ry dWN0IGRlbnRyeSAqZGlyLCAqZmlsZSwgKmVkaWRfbW9kZXM7Ci0Jc3RydWN0IGRlbnRyeSAqaHBk LCAqY29ubmVjdGVkOwotCXN0cnVjdCBkZW50cnkgKnJvb3QgPSBkZWJ1Zy0+cm9vdDsKLQotCWRp ciA9IGRlYnVnZnNfY3JlYXRlX2RpcihERUJVR19OQU1FLCBOVUxMKTsKLQlpZiAoSVNfRVJSX09S X05VTEwoZGlyKSkgewotCQlyYyA9IFBUUl9FUlIoZGlyKTsKLQkJcHJfZXJyKCJbJXNdIGRlYnVn ZnMgY3JlYXRlIGRpciBmYWlsZWQsIHJjID0gJWRcbiIsCi0JCSAgICAgICBERUJVR19OQU1FLCBy Yyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImRw X2RlYnVnIiwgMDQ0NCwgZGlyLAotCQkJCWRlYnVnLCAmZHBfZGVidWdfZm9wcyk7Ci0JaWYgKElT X0VSUl9PUl9OVUxMKGZpbGUpKSB7Ci0JCXJjID0gUFRSX0VSUihmaWxlKTsKLQkJcHJfZXJyKCJb JXNdIGRlYnVnZnMgY3JlYXRlIGZpbGUgZmFpbGVkLCByYz0lZFxuIiwKLQkJICAgICAgIERFQlVH X05BTUUsIHJjKTsKLQkJZ290byBlcnJvcl9yZW1vdmVfZGlyOwotCX0KLQotCWVkaWRfbW9kZXMg PSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJlZGlkX21vZGVzIiwgMDY0NCwgZGlyLAotCQkJCQlkZWJ1 ZywgJmVkaWRfbW9kZXNfZm9wcyk7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKGVkaWRfbW9kZXMpKSB7 Ci0JCXJjID0gUFRSX0VSUihlZGlkX21vZGVzKTsKLQkJcHJfZXJyKCJbJXNdIGRlYnVnZnMgY3Jl YXRlIGVkaWRfbW9kZXMgZmFpbGVkLCByYz0lZFxuIiwKLQkJICAgICAgIERFQlVHX05BTUUsIHJj KTsKLQkJZ290byBlcnJvcl9yZW1vdmVfZGlyOwotCX0KLQotCWhwZCA9IGRlYnVnZnNfY3JlYXRl X2ZpbGUoImhwZCIsIDA2NDQsIGRpciwKLQkJCQkJZGVidWcsICZocGRfZm9wcyk7Ci0JaWYgKElT X0VSUl9PUl9OVUxMKGhwZCkpIHsKLQkJcmMgPSBQVFJfRVJSKGhwZCk7Ci0JCXByX2VycigiWyVz XSBkZWJ1Z2ZzIGhwZCBmYWlsZWQsIHJjPSVkXG4iLAotCQkJREVCVUdfTkFNRSwgcmMpOwotCQln b3RvIGVycm9yX3JlbW92ZV9kaXI7Ci0JfQotCi0JY29ubmVjdGVkID0gZGVidWdmc19jcmVhdGVf ZmlsZSgiY29ubmVjdGVkIiwgMDQ0NCwgZGlyLAotCQkJCQlkZWJ1ZywgJmNvbm5lY3RlZF9mb3Bz KTsKLQlpZiAoSVNfRVJSX09SX05VTEwoY29ubmVjdGVkKSkgewotCQlyYyA9IFBUUl9FUlIoY29u bmVjdGVkKTsKLQkJcHJfZXJyKCJbJXNdIGRlYnVnZnMgY29ubmVjdGVkIGZhaWxlZCwgcmM9JWRc biIsCi0JCQlERUJVR19OQU1FLCByYyk7Ci0JCWdvdG8gZXJyb3JfcmVtb3ZlX2RpcjsKLQl9Ci0K LQlyb290ID0gZGlyOwotCXJldHVybiByYzsKLWVycm9yX3JlbW92ZV9kaXI6Ci0JZGVidWdmc19y ZW1vdmUoZGlyKTsKLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RydWN0IGRwX2RlYnVnICpk cF9kZWJ1Z19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHBfcGFuZWwgKnBhbmVsLAot CQkJc3RydWN0IGRwX3VzYnBkICp1c2JwZCwgc3RydWN0IGRwX2xpbmsgKmxpbmssCi0JCQlzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqKmNvbm5lY3RvcikKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBk cF9kZWJ1Z19wcml2YXRlICpkZWJ1ZzsKLQlzdHJ1Y3QgZHBfZGVidWcgKmRwX2RlYnVnOwotCi0J aWYgKCFkZXYgfHwgIXBhbmVsIHx8ICF1c2JwZCB8fCAhbGluaykgewotCQlwcl9lcnIoImludmFs aWQgaW5wdXRcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZGVi dWcgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRlYnVnKSwgR0ZQX0tFUk5FTCk7Ci0JaWYg KCFkZWJ1ZykgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZGVidWct PmRwX2RlYnVnLmRlYnVnX2VuID0gZmFsc2U7Ci0JZGVidWctPnVzYnBkID0gdXNicGQ7Ci0JZGVi dWctPmxpbmsgPSBsaW5rOwotCWRlYnVnLT5wYW5lbCA9IHBhbmVsOwotCWRlYnVnLT5kZXYgPSBk ZXY7Ci0JZGVidWctPmNvbm5lY3RvciA9IGNvbm5lY3RvcjsKLQotCWRwX2RlYnVnID0gJmRlYnVn LT5kcF9kZWJ1ZzsKLQlkcF9kZWJ1Zy0+dmRpc3BsYXkgPSAwOwotCWRwX2RlYnVnLT5oZGlzcGxh eSA9IDA7Ci0JZHBfZGVidWctPnZyZWZyZXNoID0gMDsKLQotCXJjID0gZHBfZGVidWdfaW5pdChk cF9kZWJ1Zyk7Ci0JaWYgKHJjKSB7Ci0JCWRldm1fa2ZyZWUoZGV2LCBkZWJ1Zyk7Ci0JCWdvdG8g ZXJyb3I7Ci0JfQotCi0JcmV0dXJuIGRwX2RlYnVnOwotZXJyb3I6Ci0JcmV0dXJuIEVSUl9QVFIo cmMpOwotfQotCi1zdGF0aWMgaW50IGRwX2RlYnVnX2RlaW5pdChzdHJ1Y3QgZHBfZGVidWcgKmRw X2RlYnVnKQotewotCXN0cnVjdCBkcF9kZWJ1Z19wcml2YXRlICpkZWJ1ZzsKLQotCWlmICghZHBf ZGVidWcpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZGVidWcgPSBjb250YWluZXJfb2YoZHBfZGVi dWcsIHN0cnVjdCBkcF9kZWJ1Z19wcml2YXRlLCBkcF9kZWJ1Zyk7Ci0KLQlkZWJ1Z2ZzX3JlbW92 ZShkZWJ1Zy0+cm9vdCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBkcF9kZWJ1Z19wdXQoc3Ry dWN0IGRwX2RlYnVnICpkcF9kZWJ1ZykKLXsKLQlzdHJ1Y3QgZHBfZGVidWdfcHJpdmF0ZSAqZGVi dWc7Ci0KLQlpZiAoIWRwX2RlYnVnKQotCQlyZXR1cm47Ci0KLQlkZWJ1ZyA9IGNvbnRhaW5lcl9v ZihkcF9kZWJ1Zywgc3RydWN0IGRwX2RlYnVnX3ByaXZhdGUsIGRwX2RlYnVnKTsKLQotCWRwX2Rl YnVnX2RlaW5pdChkcF9kZWJ1Zyk7Ci0KLQlkZXZtX2tmcmVlKGRlYnVnLT5kZXYsIGRlYnVnKTsK LX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGVidWcuaCBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZHAvZHBfZGVidWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDZiN2FjYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2RlYnVn LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAy MDE3LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK LSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCi0gKgotICovCi0KLSNpZm5kZWYgX0RQX0RFQlVHX0hfCi0jZGVmaW5lIF9EUF9ERUJV R19IXwotCi0jaW5jbHVkZSAiZHBfcGFuZWwuaCIKLSNpbmNsdWRlICJkcF9saW5rLmgiCi0jaW5j bHVkZSAiZHBfdXNicGQuaCIKLQotLyoqCi0gKiBzdHJ1Y3QgZHBfZGVidWcKLSAqIEBkZWJ1Z19l bjogc3BlY2lmaWVzIHdoZXRoZXIgZGVidWcgbW9kZSBlbmFibGVkCi0gKiBAdmRpc3BsYXk6IHVz ZWQgdG8gZmlsdGVyIG91dCB2ZGlzcGxheSB2YWx1ZQotICogQGhkaXNwbGF5OiB1c2VkIHRvIGZp bHRlciBvdXQgaGRpc3BsYXkgdmFsdWUKLSAqIEB2cmVmcmVzaDogdXNlZCB0byBmaWx0ZXIgb3V0 IHZyZWZyZXNoIHZhbHVlCi0gKi8KLXN0cnVjdCBkcF9kZWJ1ZyB7Ci0JYm9vbCBkZWJ1Z19lbjsK LQlpbnQgdmRpc3BsYXk7Ci0JaW50IGhkaXNwbGF5OwotCWludCB2cmVmcmVzaDsKLX07Ci0KLS8q KgotICogZHBfZGVidWdfZ2V0KCkgLSBjb25maWd1cmUgYW5kIGdldCB0aGUgRGlzcGxheVBsb3Qg ZGVidWcgbW9kdWxlIGRhdGEKLSAqCi0gKiBAZGV2OiBkZXZpY2UgaW5zdGFuY2Ugb2YgdGhlIGNh bGxlcgotICogQHBhbmVsOiBpbnN0YW5jZSBvZiBwYW5lbCBtb2R1bGUKLSAqIEB1c2JwZDogaW5z dGFuY2Ugb2YgdXNicGQgbW9kdWxlCi0gKiBAbGluazogaW5zdGFuY2Ugb2YgbGluayBtb2R1bGUK LSAqIEBjb25uZWN0b3I6IGRvdWJsZSBwb2ludGVyIHRvIGRpc3BsYXkgY29ubmVjdG9yCi0gKiBy ZXR1cm46IHBvaW50ZXIgdG8gYWxsb2NhdGVkIGRlYnVnIG1vZHVsZSBkYXRhCi0gKgotICogVGhp cyBmdW5jdGlvbiBzZXRzIHVwIHRoZSBkZWJ1ZyBtb2R1bGUgYW5kIHByb3ZpZGVzIGEgd2F5Ci0g KiBmb3IgZGVidWdmcyBpbnB1dCB0byBiZSBjb21tdW5pY2F0ZWQgd2l0aCBleGlzdGluZyBtb2R1 bGVzCi0gKi8KLXN0cnVjdCBkcF9kZWJ1ZyAqZHBfZGVidWdfZ2V0KHN0cnVjdCBkZXZpY2UgKmRl diwgc3RydWN0IGRwX3BhbmVsICpwYW5lbCwKLQkJCXN0cnVjdCBkcF91c2JwZCAqdXNicGQsIHN0 cnVjdCBkcF9saW5rICpsaW5rLAotCQkJc3RydWN0IGRybV9jb25uZWN0b3IgKipjb25uZWN0b3Ip OwotLyoqCi0gKiBkcF9kZWJ1Z19wdXQoKQotICoKLSAqIENsZWFucyB1cCBkcF9kZWJ1ZyBpbnN0 YW5jZQotICoKLSAqIEBkcF9kZWJ1ZzogaW5zdGFuY2Ugb2YgZHBfZGVidWcKLSAqLwotdm9pZCBk cF9kZWJ1Z19wdXQoc3RydWN0IGRwX2RlYnVnICpkcF9kZWJ1Zyk7Ci0jZW5kaWYgLyogX0RQX0RF QlVHX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXku YyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5jCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCA4NDZlZjMzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHAvZHBfZGlzcGxheS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI1NSArMCwwIEBACi0vKgotICog Q29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVy c2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoK LSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNkZWZpbmUgcHJfZm10KGZtdCkJIltk cm0tZHBdICVzOiAiIGZtdCwgX19mdW5jX18KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgot I2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5j bHVkZSA8bGludXgvZGVidWdmcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgotI2lu Y2x1ZGUgPGxpbnV4L29mX2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2hkY3BfcXNlZWNvbS5oPgot Ci0jaW5jbHVkZSAibXNtX2Rydi5oIgotI2luY2x1ZGUgImRwX3VzYnBkLmgiCi0jaW5jbHVkZSAi ZHBfcGFyc2VyLmgiCi0jaW5jbHVkZSAiZHBfcG93ZXIuaCIKLSNpbmNsdWRlICJkcF9jYXRhbG9n LmgiCi0jaW5jbHVkZSAiZHBfYXV4LmgiCi0jaW5jbHVkZSAiZHBfbGluay5oIgotI2luY2x1ZGUg ImRwX3BhbmVsLmgiCi0jaW5jbHVkZSAiZHBfY3RybC5oIgotI2luY2x1ZGUgImRwX2F1ZGlvLmgi Ci0jaW5jbHVkZSAiZHBfZGlzcGxheS5oIgotI2luY2x1ZGUgImRwdV9oZGNwLmgiCi0jaW5jbHVk ZSAiZHBfZGVidWcuaCIKLQotc3RhdGljIHN0cnVjdCBkcF9kaXNwbGF5ICpnX2RwX2Rpc3BsYXk7 Ci0jZGVmaW5lIEhQRF9TVFJJTkdfU0laRSAzMAotCi1zdHJ1Y3QgZHBfaGRjcCB7Ci0Jdm9pZCAq ZGF0YTsKLQlzdHJ1Y3QgZHB1X2hkY3Bfb3BzICpvcHM7Ci0KLQl2b2lkICpoZGNwMTsKLQl2b2lk ICpoZGNwMjsKLQotCWludCBlbmNfbHZsOwotCi0JYm9vbCBhdXRoX3N0YXRlOwotCWJvb2wgaGRj cDFfcHJlc2VudDsKLQlib29sIGhkY3AyX3ByZXNlbnQ7Ci0JYm9vbCBmZWF0dXJlX2VuYWJsZWQ7 Ci19OwotCi1zdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlIHsKLQljaGFyICpuYW1lOwotCWludCBp cnE7Ci0KLQkvKiBzdGF0ZSB2YXJpYWJsZXMgKi8KLQlib29sIGNvcmVfaW5pdGlhbGl6ZWQ7Ci0J Ym9vbCBwb3dlcl9vbjsKLQlib29sIGhwZF9pcnFfb247Ci0JYm9vbCBhdWRpb19zdXBwb3J0ZWQ7 Ci0KLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXN0cnVjdCBkZW50cnkgKnJvb3Q7 Ci0Jc3RydWN0IGNvbXBsZXRpb24gbm90aWZpY2F0aW9uX2NvbXA7Ci0KLQlzdHJ1Y3QgZHBfdXNi cGQgICAqdXNicGQ7Ci0Jc3RydWN0IGRwX3BhcnNlciAgKnBhcnNlcjsKLQlzdHJ1Y3QgZHBfcG93 ZXIgICAqcG93ZXI7Ci0Jc3RydWN0IGRwX2NhdGFsb2cgKmNhdGFsb2c7Ci0Jc3RydWN0IGRwX2F1 eCAgICAgKmF1eDsKLQlzdHJ1Y3QgZHBfbGluayAgICAqbGluazsKLQlzdHJ1Y3QgZHBfcGFuZWwg ICAqcGFuZWw7Ci0Jc3RydWN0IGRwX2N0cmwgICAgKmN0cmw7Ci0Jc3RydWN0IGRwX2F1ZGlvICAg KmF1ZGlvOwotCXN0cnVjdCBkcF9kZWJ1ZyAgICpkZWJ1ZzsKLQotCXN0cnVjdCBkcF9oZGNwIGhk Y3A7Ci0KLQlzdHJ1Y3QgZHBfdXNicGRfY2IgdXNicGRfY2I7Ci0Jc3RydWN0IGRwX2Rpc3BsYXlf bW9kZSBtb2RlOwotCXN0cnVjdCBkcF9kaXNwbGF5IGRwX2Rpc3BsYXk7Ci0KLQlzdHJ1Y3Qgd29y a3F1ZXVlX3N0cnVjdCAqaGRjcF93b3JrcXVldWU7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayBoZGNw X2NiX3dvcms7Ci0Jc3RydWN0IG11dGV4IGhkY3BfbXV0ZXg7Ci0JaW50IGhkY3Bfc3RhdHVzOwot fTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZHBfZHRfbWF0Y2hbXSA9IHsK LQl7LmNvbXBhdGlibGUgPSAicWNvbSxkcC1kaXNwbGF5In0sCi0Je30KLX07Ci0KLXN0YXRpYyBp bmxpbmUgYm9vbCBkcF9kaXNwbGF5X2lzX2hkY3BfZW5hYmxlZChzdHJ1Y3QgZHBfZGlzcGxheV9w cml2YXRlICpkcCkKLXsKLQlyZXR1cm4gZHAtPmhkY3AuZmVhdHVyZV9lbmFibGVkICYmCi0JCShk cC0+aGRjcC5oZGNwMV9wcmVzZW50IHx8IGRwLT5oZGNwLmhkY3AyX3ByZXNlbnQpICYmCi0JCWRw LT5oZGNwLm9wczsKLX0KLQotc3RhdGljIGlycXJldHVybl90IGRwX2Rpc3BsYXlfaXJxKGludCBp cnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcCA9IGRl dl9pZDsKLQotCWlmICghZHApIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGRhdGFcbiIpOwotCQlyZXR1 cm4gSVJRX05PTkU7Ci0JfQotCi0JLyogRFAgY29udHJvbGxlciBpc3IgKi8KLQlkcC0+Y3RybC0+ aXNyKGRwLT5jdHJsKTsKLQotCS8qIERQIGF1eCBpc3IgKi8KLQlkcC0+YXV4LT5pc3IoZHAtPmF1 eCk7Ci0KLQkvKiBIRENQIGlzciAqLwotCWlmIChkcF9kaXNwbGF5X2lzX2hkY3BfZW5hYmxlZChk cCkgJiYgZHAtPmhkY3Aub3BzLT5pc3IpIHsKLQkJaWYgKGRwLT5oZGNwLm9wcy0+aXNyKGRwLT5o ZGNwLmRhdGEpKQotCQkJcHJfZXJyKCJkcF9oZGNwX2lzciBmYWlsZWRcbiIpOwotCX0KLQotCXJl dHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIHZvaWQgZHBfZGlzcGxheV9oZGNwX2NiX3dv cmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZh dGUgKmRwOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3ID0gdG9fZGVsYXllZF93b3JrKHdvcmsp OwotCXN0cnVjdCBkcHVfaGRjcF9vcHMgKm9wczsKLQlpbnQgcmMgPSAwOwotCXUzMiBoZGNwX2F1 dGhfc3RhdGU7Ci0KLQlkcCA9IGNvbnRhaW5lcl9vZihkdywgc3RydWN0IGRwX2Rpc3BsYXlfcHJp dmF0ZSwgaGRjcF9jYl93b3JrKTsKLQotCXJjID0gZHAtPmNhdGFsb2ctPmN0cmwucmVhZF9oZGNw X3N0YXR1cygmZHAtPmNhdGFsb2ctPmN0cmwpOwotCWlmIChyYyA+PSAwKSB7Ci0JCWhkY3BfYXV0 aF9zdGF0ZSA9IChyYyA+PiAyMCkgJiAweDM7Ci0JCXByX2RlYnVnKCJoZGNwIGF1dGggc3RhdGUg JWRcbiIsIGhkY3BfYXV0aF9zdGF0ZSk7Ci0JfQotCi0Jb3BzID0gZHAtPmhkY3Aub3BzOwotCi0J c3dpdGNoIChkcC0+aGRjcF9zdGF0dXMpIHsKLQljYXNlIEhEQ1BfU1RBVEVfQVVUSEVOVElDQVRJ Tkc6Ci0JCXByX2RlYnVnKCJzdGFydCBhdXRoZW50aWNhdG9uXG4iKTsKLQotCQlpZiAoZHAtPmhk Y3Aub3BzICYmIGRwLT5oZGNwLm9wcy0+YXV0aGVudGljYXRlKQotCQkJcmMgPSBkcC0+aGRjcC5v cHMtPmF1dGhlbnRpY2F0ZShkcC0+aGRjcC5kYXRhKTsKLQotCQlicmVhazsKLQljYXNlIEhEQ1Bf U1RBVEVfQVVUSEVOVElDQVRFRDoKLQkJcHJfZGVidWcoImhkY3AgYXV0aGVudGljYXRlZFxuIik7 Ci0JCWRwLT5oZGNwLmF1dGhfc3RhdGUgPSB0cnVlOwotCQlicmVhazsKLQljYXNlIEhEQ1BfU1RB VEVfQVVUSF9GQUlMOgotCQlkcC0+aGRjcC5hdXRoX3N0YXRlID0gZmFsc2U7Ci0KLQkJaWYgKGRw LT5wb3dlcl9vbikgewotCQkJcHJfZGVidWcoIlJlYXV0aGVudGljYXRpbmdcbiIpOwotCQkJaWYg KG9wcyAmJiBvcHMtPnJlYXV0aGVudGljYXRlKSB7Ci0JCQkJcmMgPSBvcHMtPnJlYXV0aGVudGlj YXRlKGRwLT5oZGNwLmRhdGEpOwotCQkJCWlmIChyYykKLQkJCQkJcHJfZXJyKCJyZWF1dGggZmFp bGVkIHJjPSVkXG4iLCByYyk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlwcl9kZWJ1Zygibm90IHJl YXV0aGVudGljYXRpbmcsIGNhYmxlIGRpc2Nvbm5lY3RlZFxuIik7Ci0JCX0KLQotCQlicmVhazsK LQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2Rpc3BsYXlfbm90 aWZ5X2hkY3Bfc3RhdHVzX2NiKHZvaWQgKnB0ciwKLQkJZW51bSBkcHVfaGRjcF9zdGF0ZXMgc3Rh dHVzKQotewotCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwID0gcHRyOwotCi0JaWYgKCFk cCkgewotCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZHAt PmhkY3Bfc3RhdHVzID0gc3RhdHVzOwotCi0JaWYgKGRwLT5kcF9kaXNwbGF5LmlzX2Nvbm5lY3Rl ZCkKLQkJcXVldWVfZGVsYXllZF93b3JrKGRwLT5oZGNwX3dvcmtxdWV1ZSwgJmRwLT5oZGNwX2Ni X3dvcmssIEhaLzQpOwotfQotCi1zdGF0aWMgaW50IGRwX2Rpc3BsYXlfY3JlYXRlX2hkY3Bfd29y a3F1ZXVlKHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwKQotewotCWRwLT5oZGNwX3dvcmtx dWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoInNkbV9kcF9oZGNwIik7Ci0JaWYgKElTX0VSUl9PUl9O VUxMKGRwLT5oZGNwX3dvcmtxdWV1ZSkpIHsKLQkJcHJfZXJyKCJFcnJvciBjcmVhdGluZyBoZGNw X3dvcmtxdWV1ZVxuIik7Ci0JCXJldHVybiAtRVBFUk07Ci0JfQotCi0JSU5JVF9ERUxBWUVEX1dP UksoJmRwLT5oZGNwX2NiX3dvcmssIGRwX2Rpc3BsYXlfaGRjcF9jYl93b3JrKTsKLQotCXJldHVy biAwOwotfQotCi1zdGF0aWMgdm9pZCBkcF9kaXNwbGF5X2Rlc3Ryb3lfaGRjcF93b3JrcXVldWUo c3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHApCi17Ci0JaWYgKGRwLT5oZGNwX3dvcmtxdWV1 ZSkKLQkJZGVzdHJveV93b3JrcXVldWUoZHAtPmhkY3Bfd29ya3F1ZXVlKTsKLX0KLQotc3RhdGlj IHZvaWQgZHBfZGlzcGxheV91cGRhdGVfaGRjcF9pbmZvKHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZh dGUgKmRwKQotewotCXZvaWQgKmZkID0gTlVMTDsKLQlzdHJ1Y3QgZHB1X2hkY3Bfb3BzICpvcHMg PSBOVUxMOwotCi0JaWYgKCFkcCkgewotCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwotCQly ZXR1cm47Ci0JfQotCi0JaWYgKCFkcC0+aGRjcC5mZWF0dXJlX2VuYWJsZWQpIHsKLQkJcHJfZGVi dWcoImZlYXR1cmUgbm90IGVuYWJsZWRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZmQgPSBkcC0+ aGRjcC5oZGNwMjsKLQlpZiAoZmQpCi0JCW9wcyA9IGRwdV9kcF9oZGNwMnAyX3N0YXJ0KGZkKTsK LQotCWlmIChvcHMgJiYgb3BzLT5mZWF0dXJlX3N1cHBvcnRlZCkKLQkJZHAtPmhkY3AuaGRjcDJf cHJlc2VudCA9IG9wcy0+ZmVhdHVyZV9zdXBwb3J0ZWQoZmQpOwotCWVsc2UKLQkJZHAtPmhkY3Au aGRjcDJfcHJlc2VudCA9IGZhbHNlOwotCi0JcHJfZGVidWcoImhkY3AycDI6ICVzXG4iLAotCQkJ ZHAtPmhkY3AuaGRjcDJfcHJlc2VudCA/ICJzdXBwb3J0ZWQiIDogIm5vdCBzdXBwb3J0ZWQiKTsK LQotCWlmICghZHAtPmhkY3AuaGRjcDJfcHJlc2VudCkgewotCQlkcC0+aGRjcC5oZGNwMV9wcmVz ZW50ID0gaGRjcDFfY2hlY2tfaWZfc3VwcG9ydGVkX2xvYWRfYXBwKCk7Ci0KLQkJaWYgKGRwLT5o ZGNwLmhkY3AxX3ByZXNlbnQpIHsKLQkJCWZkID0gZHAtPmhkY3AuaGRjcDE7Ci0JCQlvcHMgPSBk cHVfaGRjcF8xeF9zdGFydChmZCk7Ci0JCX0KLQl9Ci0KLQlwcl9kZWJ1ZygiaGRjcDF4OiAlc1xu IiwKLQkJCWRwLT5oZGNwLmhkY3AxX3ByZXNlbnQgPyAic3VwcG9ydGVkIiA6ICJub3Qgc3VwcG9y dGVkIik7Ci0KLQlpZiAoZHAtPmhkY3AuaGRjcDJfcHJlc2VudCB8fCBkcC0+aGRjcC5oZGNwMV9w cmVzZW50KSB7Ci0JCWRwLT5oZGNwLmRhdGEgPSBmZDsKLQkJZHAtPmhkY3Aub3BzID0gb3BzOwot CX0gZWxzZSB7Ci0JCWRwLT5oZGNwLmRhdGEgPSBOVUxMOwotCQlkcC0+aGRjcC5vcHMgPSBOVUxM OwotCX0KLX0KLQotc3RhdGljIHZvaWQgZHBfZGlzcGxheV9kZWluaXRpYWxpemVfaGRjcChzdHJ1 Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcCkKLXsKLQlpZiAoIWRwKSB7Ci0JCXByX2VycigiaW52 YWxpZCBpbnB1dFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlkcHVfZHBfaGRjcDJwMl9kZWluaXQo ZHAtPmhkY3AuZGF0YSk7Ci0JZHBfZGlzcGxheV9kZXN0cm95X2hkY3Bfd29ya3F1ZXVlKGRwKTsK LQltdXRleF9kZXN0cm95KCZkcC0+aGRjcF9tdXRleCk7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfZGlz cGxheV9pbml0aWFsaXplX2hkY3Aoc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHApCi17Ci0J c3RydWN0IGRwdV9oZGNwX2luaXRfZGF0YSBoZGNwX2luaXRfZGF0YTsKLQlzdHJ1Y3QgcmVzb3Vy Y2UgKnJlczsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkcCkgewotCQlwcl9lcnIoImludmFsaWQg aW5wdXRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9pbml0KCZkcC0+aGRj cF9tdXRleCk7Ci0KLQlyYyA9IGRwX2Rpc3BsYXlfY3JlYXRlX2hkY3Bfd29ya3F1ZXVlKGRwKTsK LQlpZiAocmMpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gY3JlYXRlIEhEQ1Agd29ya3F1ZXVlXG4i KTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnlu YW1lKGRwLT5wZGV2LAotCQlJT1JFU09VUkNFX01FTSwgImRwX2N0cmwiKTsKLQlpZiAoIXJlcykg ewotCQlwcl9lcnIoIkVycm9yIGdldHRpbmcgZHAgY3RybCByZXNvdXJjZVxuIik7Ci0JCXJjID0g LUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQloZGNwX2luaXRfZGF0YS5waHlfYWRkciAg ICAgID0gcmVzLT5zdGFydDsKLQloZGNwX2luaXRfZGF0YS5jbGllbnRfaWQgICAgID0gSERDUF9D TElFTlRfRFA7Ci0JaGRjcF9pbml0X2RhdGEuZHJtX2F1eCAgICAgICA9IGRwLT5hdXgtPmRybV9h dXg7Ci0JaGRjcF9pbml0X2RhdGEuY2JfZGF0YSAgICAgICA9ICh2b2lkICopZHA7Ci0JaGRjcF9p bml0X2RhdGEud29ya3EgICAgICAgICA9IGRwLT5oZGNwX3dvcmtxdWV1ZTsKLQloZGNwX2luaXRf ZGF0YS5tdXRleCAgICAgICAgID0gJmRwLT5oZGNwX211dGV4OwotCWhkY3BfaW5pdF9kYXRhLnNl Y19hY2Nlc3MgICAgPSB0cnVlOwotCWhkY3BfaW5pdF9kYXRhLm5vdGlmeV9zdGF0dXMgPSBkcF9k aXNwbGF5X25vdGlmeV9oZGNwX3N0YXR1c19jYjsKLQloZGNwX2luaXRfZGF0YS5jb3JlX2lvICAg ICAgID0gJmRwLT5wYXJzZXItPmlvLmN0cmxfaW87Ci0JaGRjcF9pbml0X2RhdGEucWZwcm9tX2lv ICAgICA9ICZkcC0+cGFyc2VyLT5pby5xZnByb21faW87Ci0JaGRjcF9pbml0X2RhdGEuaGRjcF9p byAgICAgICA9ICZkcC0+cGFyc2VyLT5pby5oZGNwX2lvOwotCWhkY3BfaW5pdF9kYXRhLnJldmlz aW9uICAgICAgPSAmZHAtPnBhbmVsLT5saW5rX2luZm8ucmV2aXNpb247Ci0KLQlkcC0+aGRjcC5o ZGNwMSA9IGRwdV9oZGNwXzF4X2luaXQoJmhkY3BfaW5pdF9kYXRhKTsKLQlpZiAoSVNfRVJSX09S X05VTEwoZHAtPmhkY3AuaGRjcDEpKSB7Ci0JCXByX2VycigiRXJyb3IgaW5pdGlhbGl6aW5nIEhE Q1AgMS54XG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXByX2Rl YnVnKCJIRENQIDEuMyBpbml0aWFsaXplZFxuIik7Ci0KLQlkcC0+aGRjcC5oZGNwMiA9IGRwdV9k cF9oZGNwMnAyX2luaXQoJmhkY3BfaW5pdF9kYXRhKTsKLQlpZiAoIUlTX0VSUl9PUl9OVUxMKGRw LT5oZGNwLmhkY3AyKSkKLQkJcHJfZGVidWcoIkhEQ1AgMi4yIGluaXRpYWxpemVkXG4iKTsKLQot CWRwLT5oZGNwLmZlYXR1cmVfZW5hYmxlZCA9IHRydWU7Ci0KLQlyZXR1cm4gMDsKLWVycm9yOgot CWRwX2Rpc3BsYXlfZGVpbml0aWFsaXplX2hkY3AoZHApOwotCXJldHVybiByYzsKLX0KLQotc3Rh dGljIGludCBkcF9kaXNwbGF5X2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNl ICptYXN0ZXIsCi0JCXZvaWQgKmRhdGEpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHBfZGlz cGxheV9wcml2YXRlICpkcDsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtOwotCXN0cnVjdCBtc21f ZHJtX3ByaXZhdGUgKnByaXY7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3Bs YXRmb3JtX2RldmljZShkZXYpOwotCi0JaWYgKCFkZXYgfHwgIXBkZXYgfHwgIW1hc3Rlcikgewot CQlwcl9lcnIoImludmFsaWQgcGFyYW0ocyksIGRldiAlcEssIHBkZXYgJXBLLCBtYXN0ZXIgJXBL XG4iLAotCQkJCWRldiwgcGRldiwgbWFzdGVyKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVu ZDsKLQl9Ci0KLQlkcm0gPSBkZXZfZ2V0X2RydmRhdGEobWFzdGVyKTsKLQlkcCA9IHBsYXRmb3Jt X2dldF9kcnZkYXRhKHBkZXYpOwotCWlmICghZHJtIHx8ICFkcCkgewotCQlwcl9lcnIoImludmFs aWQgcGFyYW0ocyksIGRybSAlcEssIGRwICVwS1xuIiwKLQkJCQlkcm0sIGRwKTsKLQkJcmMgPSAt RUlOVkFMOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlkcC0+ZHBfZGlzcGxheS5kcm1fZGV2ID0gZHJt OwotCXByaXYgPSBkcm0tPmRldl9wcml2YXRlOwotCi0JcmMgPSBkcC0+cGFyc2VyLT5wYXJzZShk cC0+cGFyc2VyKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJkZXZpY2UgdHJlZSBwYXJzaW5nIGZh aWxlZFxuIik7Ci0JCWdvdG8gZW5kOwotCX0KLQotCXJjID0gZHAtPmF1eC0+ZHJtX2F1eF9yZWdp c3RlcihkcC0+YXV4KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJEUk0gRFAgQVVYIHJlZ2lzdGVy IGZhaWxlZFxuIik7Ci0JCWdvdG8gZW5kOwotCX0KLQotCXJjID0gZHAtPnBvd2VyLT5wb3dlcl9j bGllbnRfaW5pdChkcC0+cG93ZXIsICZwcml2LT5waGFuZGxlKTsKLQlpZiAocmMpIHsKLQkJcHJf ZXJyKCJQb3dlciBjbGllbnQgY3JlYXRlIGZhaWxlZFxuIik7Ci0JCWdvdG8gZW5kOwotCX0KLQot CXJjID0gZHBfZGlzcGxheV9pbml0aWFsaXplX2hkY3AoZHApOwotCWlmIChyYykgewotCQlwcl9l cnIoIkhEQ1AgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKLQkJZ290byBlbmQ7Ci0JfQotZW5k OgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgZHBfZGlzcGxheV91bmJpbmQoc3RydWN0 IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCi0JCXZvaWQgKmRhdGEpCi17Ci0J c3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCi0JaWYgKCFkZXYgfHwgIXBkZXYpIHsK LQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtKHMpXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWRwID0g cGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0JaWYgKCFkcCkgewotCQlwcl9lcnIoIkludmFs aWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCSh2b2lkKWRwLT5wb3dlci0+cG93ZXJf Y2xpZW50X2RlaW5pdChkcC0+cG93ZXIpOwotCSh2b2lkKWRwLT5hdXgtPmRybV9hdXhfZGVyZWdp c3RlcihkcC0+YXV4KTsKLQlkcF9kaXNwbGF5X2RlaW5pdGlhbGl6ZV9oZGNwKGRwKTsKLX0KLQot c3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3BzIGRwX2Rpc3BsYXlfY29tcF9vcHMgPSB7 Ci0JLmJpbmQgPSBkcF9kaXNwbGF5X2JpbmQsCi0JLnVuYmluZCA9IGRwX2Rpc3BsYXlfdW5iaW5k LAotfTsKLQotc3RhdGljIGJvb2wgZHBfZGlzcGxheV9pc19kc19icmlkZ2Uoc3RydWN0IGRwX3Bh bmVsICpwYW5lbCkKLXsKLQlyZXR1cm4gKHBhbmVsLT5kcGNkW0RQX0RPV05TVFJFQU1QT1JUX1BS RVNFTlRdICYKLQkJRFBfRFdOX1NUUk1fUE9SVF9QUkVTRU5UKTsKLX0KLQotc3RhdGljIGJvb2wg ZHBfZGlzcGxheV9pc19zaW5rX2NvdW50X3plcm8oc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAq ZHApCi17Ci0JcmV0dXJuIGRwX2Rpc3BsYXlfaXNfZHNfYnJpZGdlKGRwLT5wYW5lbCkgJiYKLQkJ KGRwLT5saW5rLT5zaW5rX2NvdW50LmNvdW50ID09IDApOwotfQotCi1zdGF0aWMgdm9pZCBkcF9k aXNwbGF5X3NlbmRfaHBkX2V2ZW50KHN0cnVjdCBkcF9kaXNwbGF5ICpkcF9kaXNwbGF5KQotewot CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBOVUxMOwotCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZh dGUgKmRwOwotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Ci0JY2hhciBuYW1lW0hQ RF9TVFJJTkdfU0laRV0sIHN0YXR1c1tIUERfU1RSSU5HX1NJWkVdLAotCQlicHBbSFBEX1NUUklO R19TSVpFXSwgcGF0dGVybltIUERfU1RSSU5HX1NJWkVdOwotCWNoYXIgKmVudnBbNV07Ci0KLQlp ZiAoIWRwX2Rpc3BsYXkpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKLQkJcmV0dXJu OwotCX0KLQotCWRwID0gY29udGFpbmVyX29mKGRwX2Rpc3BsYXksIHN0cnVjdCBkcF9kaXNwbGF5 X3ByaXZhdGUsIGRwX2Rpc3BsYXkpOwotCWlmICghZHApIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBh cmFtc1xuIik7Ci0JCXJldHVybjsKLQl9Ci0JY29ubmVjdG9yID0gZHAtPmRwX2Rpc3BsYXkuY29u bmVjdG9yOwotCWRldiA9IGRwX2Rpc3BsYXktPmNvbm5lY3Rvci0+ZGV2OwotCi0JY29ubmVjdG9y LT5zdGF0dXMgPSBjb25uZWN0b3ItPmZ1bmNzLT5kZXRlY3QoY29ubmVjdG9yLCBmYWxzZSk7Ci0J cHJfZGVidWcoIlslc10gc3RhdHVzIHVwZGF0ZWQgdG8gJXNcbiIsCi0JCQkgICAgICBjb25uZWN0 b3ItPm5hbWUsCi0JCQkgICAgICBkcm1fZ2V0X2Nvbm5lY3Rvcl9zdGF0dXNfbmFtZShjb25uZWN0 b3ItPnN0YXR1cykpOwotCXNucHJpbnRmKG5hbWUsIEhQRF9TVFJJTkdfU0laRSwgIm5hbWU9JXMi LCBjb25uZWN0b3ItPm5hbWUpOwotCXNucHJpbnRmKHN0YXR1cywgSFBEX1NUUklOR19TSVpFLCAi c3RhdHVzPSVzIiwKLQkJZHJtX2dldF9jb25uZWN0b3Jfc3RhdHVzX25hbWUoY29ubmVjdG9yLT5z dGF0dXMpKTsKLQlzbnByaW50ZihicHAsIEhQRF9TVFJJTkdfU0laRSwgImJwcD0lZCIsCi0JCWRw X2xpbmtfYml0X2RlcHRoX3RvX2JwcCgKLQkJZHAtPmxpbmstPnRlc3RfdmlkZW8udGVzdF9iaXRf ZGVwdGgpKTsKLQlzbnByaW50ZihwYXR0ZXJuLCBIUERfU1RSSU5HX1NJWkUsICJwYXR0ZXJuPSVk IiwKLQkJZHAtPmxpbmstPnRlc3RfdmlkZW8udGVzdF92aWRlb19wYXR0ZXJuKTsKLQotCXByX2Rl YnVnKCJnZW5lcmF0aW5nIGhvdHBsdWcgZXZlbnQgWyVzXTpbJXNdIFslc10gWyVzXVxuIiwKLQkJ bmFtZSwgc3RhdHVzLCBicHAsIHBhdHRlcm4pOwotCWVudnBbMF0gPSBuYW1lOwotCWVudnBbMV0g PSBzdGF0dXM7Ci0JZW52cFsyXSA9IGJwcDsKLQllbnZwWzNdID0gcGF0dGVybjsKLQllbnZwWzRd ID0gTlVMTDsKLQlrb2JqZWN0X3VldmVudF9lbnYoJmRldi0+cHJpbWFyeS0+a2Rldi0+a29iaiwg S09CSl9DSEFOR0UsCi0JCQllbnZwKTsKLX0KLQotc3RhdGljIGludCBkcF9kaXNwbGF5X3NlbmRf aHBkX25vdGlmaWNhdGlvbihzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcCwKLQkJYm9vbCBo cGQpCi17Ci0JaWYgKChocGQgJiYgZHAtPmRwX2Rpc3BsYXkuaXNfY29ubmVjdGVkKSB8fAotCQkJ KCFocGQgJiYgIWRwLT5kcF9kaXNwbGF5LmlzX2Nvbm5lY3RlZCkpIHsKLQkJcHJfaW5mbygiSFBE IGFscmVhZHkgJXNcbiIsIChocGQgPyAib24iIDogIm9mZiIpKTsKLQkJcmV0dXJuIDA7Ci0JfQot Ci0JLyogcmVzZXQgdmlkZW8gcGF0dGVybiBmbGFnIG9uIGRpc2Nvbm5lY3QgKi8KLQlpZiAoIWhw ZCkKLQkJZHAtPnBhbmVsLT52aWRlb190ZXN0ID0gZmFsc2U7Ci0KLQlkcC0+ZHBfZGlzcGxheS5p c19jb25uZWN0ZWQgPSBocGQ7Ci0JcmVpbml0X2NvbXBsZXRpb24oJmRwLT5ub3RpZmljYXRpb25f Y29tcCk7Ci0JZHBfZGlzcGxheV9zZW5kX2hwZF9ldmVudCgmZHAtPmRwX2Rpc3BsYXkpOwotCi0J aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmRwLT5ub3RpZmljYXRpb25fY29tcCwg SFogKiAyKSkgewotCQlwcl93YXJuKCIlcyB0aW1lb3V0XG4iLCBocGQgPyAiY29ubmVjdCIgOiAi ZGlzY29ubmVjdCIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQot c3RhdGljIGludCBkcF9kaXNwbGF5X3Byb2Nlc3NfaHBkX2hpZ2goc3RydWN0IGRwX2Rpc3BsYXlf cHJpdmF0ZSAqZHApCi17Ci0JaW50IHJjID0gMDsKLQl1MzIgbWF4X3BjbGtfZnJvbV9lZGlkID0g MDsKLQlzdHJ1Y3QgZWRpZCAqZWRpZDsKLQotCWRwLT5hdXgtPmluaXQoZHAtPmF1eCwgZHAtPnBh cnNlci0+YXV4X2NmZyk7Ci0KLQlpZiAoZHAtPmxpbmstPnBzbV9lbmFibGVkKQotCQlnb3RvIG5v dGlmeTsKLQotCXJjID0gZHAtPnBhbmVsLT5yZWFkX3NpbmtfY2FwcyhkcC0+cGFuZWwsIGRwLT5k cF9kaXNwbGF5LmNvbm5lY3Rvcik7Ci0JaWYgKHJjKQotCQlnb3RvIG5vdGlmeTsKLQotCWRwLT5s aW5rLT5wcm9jZXNzX3JlcXVlc3QoZHAtPmxpbmspOwotCi0JaWYgKGRwX2Rpc3BsYXlfaXNfc2lu a19jb3VudF96ZXJvKGRwKSkgewotCQlwcl9kZWJ1Zygibm8gZG93bnN0cmVhbSBkZXZpY2VzIGNv bm5lY3RlZFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlbmQ7Ci0JfQotCi0JZWRpZCA9 IGRwLT5wYW5lbC0+ZWRpZF9jdHJsLT5lZGlkOwotCi0JZHAtPmF1ZGlvX3N1cHBvcnRlZCA9IGRy bV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhlZGlkKTsKLQotCWRwLT5wYW5lbC0+aGFuZGxlX3Npbmtf cmVxdWVzdChkcC0+cGFuZWwpOwotCi0JbWF4X3BjbGtfZnJvbV9lZGlkID0gZHAtPnBhbmVsLT5n ZXRfbWF4X3BjbGsoZHAtPnBhbmVsKTsKLQotCWRwLT5kcF9kaXNwbGF5Lm1heF9wY2xrX2toeiA9 IG1pbihtYXhfcGNsa19mcm9tX2VkaWQsCi0JCWRwLT5wYXJzZXItPm1heF9wY2xrX2toeik7Ci0K LW5vdGlmeToKLQlkcF9kaXNwbGF5X3NlbmRfaHBkX25vdGlmaWNhdGlvbihkcCwgdHJ1ZSk7Ci0K LWVuZDoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2Rpc3BsYXlfaG9zdF9pbml0 KHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwKQotewotCWJvb2wgZmxpcCA9IGZhbHNlOwot Ci0JaWYgKGRwLT5jb3JlX2luaXRpYWxpemVkKSB7Ci0JCXByX2RlYnVnKCJEUCBjb3JlIGFscmVh ZHkgaW5pdGlhbGl6ZWRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGRwLT51c2JwZC0+b3Jp ZW50YXRpb24gPT0gT1JJRU5UQVRJT05fQ0MyKQotCQlmbGlwID0gdHJ1ZTsKLQotCWRwLT5wb3dl ci0+aW5pdChkcC0+cG93ZXIsIGZsaXApOwotCWRwLT5jdHJsLT5pbml0KGRwLT5jdHJsLCBmbGlw KTsKLQllbmFibGVfaXJxKGRwLT5pcnEpOwotCWRwLT5jb3JlX2luaXRpYWxpemVkID0gdHJ1ZTsK LX0KLQotc3RhdGljIHZvaWQgZHBfZGlzcGxheV9ob3N0X2RlaW5pdChzdHJ1Y3QgZHBfZGlzcGxh eV9wcml2YXRlICpkcCkKLXsKLQlpZiAoIWRwLT5jb3JlX2luaXRpYWxpemVkKSB7Ci0JCXByX2Rl YnVnKCJEUCBjb3JlIGFscmVhZHkgb2ZmXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWRwLT5jdHJs LT5kZWluaXQoZHAtPmN0cmwpOwotCWRwLT5wb3dlci0+ZGVpbml0KGRwLT5wb3dlcik7Ci0JZGlz YWJsZV9pcnEoZHAtPmlycSk7Ci0JZHAtPmNvcmVfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLX0KLQot c3RhdGljIHZvaWQgZHBfZGlzcGxheV9wcm9jZXNzX2hwZF9sb3coc3RydWN0IGRwX2Rpc3BsYXlf cHJpdmF0ZSAqZHApCi17Ci0JLyogY2FuY2VsIGFueSBwZW5kaW5nIHJlcXVlc3QgKi8KLQlkcC0+ Y3RybC0+YWJvcnQoZHAtPmN0cmwpOwotCi0JaWYgKGRwX2Rpc3BsYXlfaXNfaGRjcF9lbmFibGVk KGRwKSAmJiBkcC0+aGRjcC5vcHMtPm9mZikgewotCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMo JmRwLT5oZGNwX2NiX3dvcmspOwotCQlkcC0+aGRjcC5vcHMtPm9mZihkcC0+aGRjcC5kYXRhKTsK LQl9Ci0KLQlpZiAoZHAtPmF1ZGlvX3N1cHBvcnRlZCkKLQkJZHAtPmF1ZGlvLT5vZmYoZHAtPmF1 ZGlvKTsKLQotCWRwX2Rpc3BsYXlfc2VuZF9ocGRfbm90aWZpY2F0aW9uKGRwLCBmYWxzZSk7Ci0K LQlkcC0+YXV4LT5kZWluaXQoZHAtPmF1eCk7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfZGlzcGxheV91 c2JwZF9jb25maWd1cmVfY2Ioc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCByYyA9IDA7Ci0J c3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7Ci0KLQlpZiAoIWRldikgewotCQlwcl9lcnIo ImludmFsaWQgZGV2XG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlk cCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmICghZHApIHsKLQkJcHJfZXJyKCJubyBkcml2 ZXIgZGF0YSBmb3VuZFxuIik7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290byBlbmQ7Ci0JfQotCi0J ZHBfZGlzcGxheV9ob3N0X2luaXQoZHApOwotCi0JaWYgKGRwLT51c2JwZC0+aHBkX2hpZ2gpCi0J CWRwX2Rpc3BsYXlfcHJvY2Vzc19ocGRfaGlnaChkcCk7Ci1lbmQ6Ci0JcmV0dXJuIHJjOwotfQot Ci1zdGF0aWMgdm9pZCBkcF9kaXNwbGF5X2NsZWFuKHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUg KmRwKQotewotCWlmIChkcF9kaXNwbGF5X2lzX2hkY3BfZW5hYmxlZChkcCkpIHsKLQkJZHAtPmhk Y3Bfc3RhdHVzID0gSERDUF9TVEFURV9JTkFDVElWRTsKLQotCQljYW5jZWxfZGVsYXllZF93b3Jr X3N5bmMoJmRwLT5oZGNwX2NiX3dvcmspOwotCQlpZiAoZHAtPmhkY3Aub3BzLT5vZmYpCi0JCQlk cC0+aGRjcC5vcHMtPm9mZihkcC0+aGRjcC5kYXRhKTsKLQl9Ci0KLQlkcC0+Y3RybC0+cHVzaF9p ZGxlKGRwLT5jdHJsKTsKLQlkcC0+Y3RybC0+b2ZmKGRwLT5jdHJsKTsKLX0KLQotc3RhdGljIGlu dCBkcF9kaXNwbGF5X3VzYnBkX2Rpc2Nvbm5lY3RfY2Ioc3RydWN0IGRldmljZSAqZGV2KQotewot CWludCByYyA9IDA7Ci0Jc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7Ci0KLQlpZiAoIWRl dikgewotCQlwcl9lcnIoImludmFsaWQgZGV2XG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3Rv IGVuZDsKLQl9Ci0KLQlkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmICghZHApIHsKLQkJ cHJfZXJyKCJubyBkcml2ZXIgZGF0YSBmb3VuZFxuIik7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290 byBlbmQ7Ci0JfQotCi0JLyogY2FuY2VsIGFueSBwZW5kaW5nIHJlcXVlc3QgKi8KLQlkcC0+Y3Ry bC0+YWJvcnQoZHAtPmN0cmwpOwotCi0JaWYgKGRwLT5hdWRpb19zdXBwb3J0ZWQpCi0JCWRwLT5h dWRpby0+b2ZmKGRwLT5hdWRpbyk7Ci0KLQlyYyA9IGRwX2Rpc3BsYXlfc2VuZF9ocGRfbm90aWZp Y2F0aW9uKGRwLCBmYWxzZSk7Ci0KLQkvKiBpZiBjYWJsZSBpcyBkaXNjb25uZWN0ZWQsIHJlc2V0 IHBzbV9lbmFibGVkIGZsYWcgKi8KLQlpZiAoIWRwLT51c2JwZC0+YWx0X21vZGVfY2ZnX2RvbmUp Ci0JCWRwLT5saW5rLT5wc21fZW5hYmxlZCA9IGZhbHNlOwotCi0JaWYgKChyYyA8IDApICYmIGRw LT5wb3dlcl9vbikKLQkJZHBfZGlzcGxheV9jbGVhbihkcCk7Ci0KLQlkcF9kaXNwbGF5X2hvc3Rf ZGVpbml0KGRwKTsKLWVuZDoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2Rpc3Bs YXlfaGFuZGxlX3ZpZGVvX3JlcXVlc3Qoc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHApCi17 Ci0JaWYgKGRwLT5saW5rLT5zaW5rX3JlcXVlc3QgJiBEUF9URVNUX0xJTktfVklERU9fUEFUVEVS TikgewotCQkvKiBmb3JjZSBkaXNjb25uZWN0IGZvbGxvd2VkIGJ5IGNvbm5lY3QgKi8KLQkJZHAt PnVzYnBkLT5jb25uZWN0KGRwLT51c2JwZCwgZmFsc2UpOwotCQlkcC0+cGFuZWwtPnZpZGVvX3Rl c3QgPSB0cnVlOwotCQlkcC0+dXNicGQtPmNvbm5lY3QoZHAtPnVzYnBkLCB0cnVlKTsKLQkJZHAt PmxpbmstPnNlbmRfdGVzdF9yZXNwb25zZShkcC0+bGluayk7Ci0JfQotfQotCi1zdGF0aWMgaW50 IGRwX2Rpc3BsYXlfaGFuZGxlX2hwZF9pcnEoc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHAp Ci17Ci0JaWYgKGRwLT5saW5rLT5zaW5rX3JlcXVlc3QgJiBEU19QT1JUX1NUQVRVU19DSEFOR0VE KSB7Ci0JCWRwX2Rpc3BsYXlfc2VuZF9ocGRfbm90aWZpY2F0aW9uKGRwLCBmYWxzZSk7Ci0KLQkJ aWYgKGRwX2Rpc3BsYXlfaXNfc2lua19jb3VudF96ZXJvKGRwKSkgewotCQkJcHJfZGVidWcoInNp bmsgY291bnQgaXMgemVybywgbm90aGluZyB0byBkb1xuIik7Ci0JCQlyZXR1cm4gMDsKLQkJfQot Ci0JCXJldHVybiBkcF9kaXNwbGF5X3Byb2Nlc3NfaHBkX2hpZ2goZHApOwotCX0KLQotCWRwLT5j dHJsLT5oYW5kbGVfc2lua19yZXF1ZXN0KGRwLT5jdHJsKTsKLQotCWRwX2Rpc3BsYXlfaGFuZGxl X3ZpZGVvX3JlcXVlc3QoZHApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfZGlz cGxheV91c2JwZF9hdHRlbnRpb25fY2Ioc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCByYyA9 IDA7Ci0Jc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7Ci0KLQlpZiAoIWRldikgewotCQlw cl9lcnIoImludmFsaWQgZGV2XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZHAgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpZiAoIWRwKSB7Ci0JCXByX2Vycigibm8gZHJpdmVyIGRh dGEgZm91bmRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlpZiAoZHAtPnVzYnBkLT5o cGRfaXJxKSB7Ci0JCWRwLT5ocGRfaXJxX29uID0gdHJ1ZTsKLQotCQlpZiAoZHBfZGlzcGxheV9p c19oZGNwX2VuYWJsZWQoZHApICYmIGRwLT5oZGNwLm9wcy0+Y3BfaXJxKSB7Ci0JCQlpZiAoIWRw LT5oZGNwLm9wcy0+Y3BfaXJxKGRwLT5oZGNwLmRhdGEpKQotCQkJCWdvdG8gZW5kOwotCQl9Ci0K LQkJcmMgPSBkcC0+bGluay0+cHJvY2Vzc19yZXF1ZXN0KGRwLT5saW5rKTsKLQkJLyogY2hlY2sg Zm9yIGFueSB0ZXN0IHJlcXVlc3QgaXNzdWVkIGJ5IHNpbmsgKi8KLQkJaWYgKCFyYykKLQkJCWRw X2Rpc3BsYXlfaGFuZGxlX2hwZF9pcnEoZHApOwotCi0JCWRwLT5ocGRfaXJxX29uID0gZmFsc2U7 Ci0JCWdvdG8gZW5kOwotCX0KLQotCWlmICghZHAtPnVzYnBkLT5ocGRfaGlnaCkgewotCQlkcF9k aXNwbGF5X3Byb2Nlc3NfaHBkX2xvdyhkcCk7Ci0JCWdvdG8gZW5kOwotCX0KLQotCWlmIChkcC0+ dXNicGQtPmFsdF9tb2RlX2NmZ19kb25lKQotCQlkcF9kaXNwbGF5X3Byb2Nlc3NfaHBkX2hpZ2go ZHApOwotZW5kOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgZHBfZGlzcGxheV9kZWlu aXRfc3ViX21vZHVsZXMoc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHApCi17Ci0JZHBfYXVk aW9fcHV0KGRwLT5hdWRpbyk7Ci0JZHBfY3RybF9wdXQoZHAtPmN0cmwpOwotCWRwX2xpbmtfcHV0 KGRwLT5saW5rKTsKLQlkcF9wYW5lbF9wdXQoZHAtPnBhbmVsKTsKLQlkcF9hdXhfcHV0KGRwLT5h dXgpOwotCWRwX3Bvd2VyX3B1dChkcC0+cG93ZXIpOwotCWRwX2NhdGFsb2dfcHV0KGRwLT5jYXRh bG9nKTsKLQlkcF9wYXJzZXJfcHV0KGRwLT5wYXJzZXIpOwotCWRwX3VzYnBkX3B1dChkcC0+dXNi cGQpOwotCWRwX2RlYnVnX3B1dChkcC0+ZGVidWcpOwotfQotCi1zdGF0aWMgaW50IGRwX2luaXRf c3ViX21vZHVsZXMoc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHApCi17Ci0JaW50IHJjID0g MDsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZHAtPnBkZXYtPmRldjsKLQlzdHJ1Y3QgZHBfdXNi cGRfY2IgKmNiID0gJmRwLT51c2JwZF9jYjsKLQlzdHJ1Y3QgZHBfY3RybF9pbiBjdHJsX2luID0g ewotCQkuZGV2ID0gZGV2LAotCX07Ci0Jc3RydWN0IGRwX3BhbmVsX2luIHBhbmVsX2luID0gewot CQkuZGV2ID0gZGV2LAotCX07Ci0KLQljYi0+Y29uZmlndXJlICA9IGRwX2Rpc3BsYXlfdXNicGRf Y29uZmlndXJlX2NiOwotCWNiLT5kaXNjb25uZWN0ID0gZHBfZGlzcGxheV91c2JwZF9kaXNjb25u ZWN0X2NiOwotCWNiLT5hdHRlbnRpb24gID0gZHBfZGlzcGxheV91c2JwZF9hdHRlbnRpb25fY2I7 Ci0KLQlkcC0+dXNicGQgPSBkcF91c2JwZF9nZXQoZGV2LCBjYik7Ci0JaWYgKElTX0VSUihkcC0+ dXNicGQpKSB7Ci0JCXJjID0gUFRSX0VSUihkcC0+dXNicGQpOwotCQlwcl9lcnIoImZhaWxlZCB0 byBpbml0aWFsaXplIHVzYnBkLCByYyA9ICVkXG4iLCByYyk7Ci0JCWRwLT51c2JwZCA9IE5VTEw7 Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZHAtPnBhcnNlciA9IGRwX3BhcnNlcl9nZXQoZHAtPnBk ZXYpOwotCWlmIChJU19FUlIoZHAtPnBhcnNlcikpIHsKLQkJcmMgPSBQVFJfRVJSKGRwLT5wYXJz ZXIpOwotCQlwcl9lcnIoImZhaWxlZCB0byBpbml0aWFsaXplIHBhcnNlciwgcmMgPSAlZFxuIiwg cmMpOwotCQlkcC0+cGFyc2VyID0gTlVMTDsKLQkJZ290byBlcnJvcl9wYXJzZXI7Ci0JfQotCi0J ZHAtPmNhdGFsb2cgPSBkcF9jYXRhbG9nX2dldChkZXYsICZkcC0+cGFyc2VyLT5pbyk7Ci0JaWYg KElTX0VSUihkcC0+Y2F0YWxvZykpIHsKLQkJcmMgPSBQVFJfRVJSKGRwLT5jYXRhbG9nKTsKLQkJ cHJfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBjYXRhbG9nLCByYyA9ICVkXG4iLCByYyk7Ci0J CWRwLT5jYXRhbG9nID0gTlVMTDsKLQkJZ290byBlcnJvcl9jYXRhbG9nOwotCX0KLQotCWRwLT5w b3dlciA9IGRwX3Bvd2VyX2dldChkcC0+cGFyc2VyKTsKLQlpZiAoSVNfRVJSKGRwLT5wb3dlcikp IHsKLQkJcmMgPSBQVFJfRVJSKGRwLT5wb3dlcik7Ci0JCXByX2VycigiZmFpbGVkIHRvIGluaXRp YWxpemUgcG93ZXIsIHJjID0gJWRcbiIsIHJjKTsKLQkJZHAtPnBvd2VyID0gTlVMTDsKLQkJZ290 byBlcnJvcl9wb3dlcjsKLQl9Ci0KLQlkcC0+YXV4ID0gZHBfYXV4X2dldChkZXYsICZkcC0+Y2F0 YWxvZy0+YXV4LCBkcC0+cGFyc2VyLT5hdXhfY2ZnKTsKLQlpZiAoSVNfRVJSKGRwLT5hdXgpKSB7 Ci0JCXJjID0gUFRSX0VSUihkcC0+YXV4KTsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGl6 ZSBhdXgsIHJjID0gJWRcbiIsIHJjKTsKLQkJZHAtPmF1eCA9IE5VTEw7Ci0JCWdvdG8gZXJyb3Jf YXV4OwotCX0KLQotCWRwLT5saW5rID0gZHBfbGlua19nZXQoZGV2LCBkcC0+YXV4KTsKLQlpZiAo SVNfRVJSKGRwLT5saW5rKSkgewotCQlyYyA9IFBUUl9FUlIoZHAtPmxpbmspOwotCQlwcl9lcnIo ImZhaWxlZCB0byBpbml0aWFsaXplIGxpbmssIHJjID0gJWRcbiIsIHJjKTsKLQkJZHAtPmxpbmsg PSBOVUxMOwotCQlnb3RvIGVycm9yX2xpbms7Ci0JfQotCi0JcGFuZWxfaW4uYXV4ID0gZHAtPmF1 eDsKLQlwYW5lbF9pbi5jYXRhbG9nID0gJmRwLT5jYXRhbG9nLT5wYW5lbDsKLQlwYW5lbF9pbi5s aW5rID0gZHAtPmxpbms7Ci0KLQlkcC0+cGFuZWwgPSBkcF9wYW5lbF9nZXQoJnBhbmVsX2luKTsK LQlpZiAoSVNfRVJSKGRwLT5wYW5lbCkpIHsKLQkJcmMgPSBQVFJfRVJSKGRwLT5wYW5lbCk7Ci0J CXByX2VycigiZmFpbGVkIHRvIGluaXRpYWxpemUgcGFuZWwsIHJjID0gJWRcbiIsIHJjKTsKLQkJ ZHAtPnBhbmVsID0gTlVMTDsKLQkJZ290byBlcnJvcl9wYW5lbDsKLQl9Ci0KLQljdHJsX2luLmxp bmsgPSBkcC0+bGluazsKLQljdHJsX2luLnBhbmVsID0gZHAtPnBhbmVsOwotCWN0cmxfaW4uYXV4 ID0gZHAtPmF1eDsKLQljdHJsX2luLnBvd2VyID0gZHAtPnBvd2VyOwotCWN0cmxfaW4uY2F0YWxv ZyA9ICZkcC0+Y2F0YWxvZy0+Y3RybDsKLQljdHJsX2luLnBhcnNlciA9IGRwLT5wYXJzZXI7Ci0K LQlkcC0+Y3RybCA9IGRwX2N0cmxfZ2V0KCZjdHJsX2luKTsKLQlpZiAoSVNfRVJSKGRwLT5jdHJs KSkgewotCQlyYyA9IFBUUl9FUlIoZHAtPmN0cmwpOwotCQlwcl9lcnIoImZhaWxlZCB0byBpbml0 aWFsaXplIGN0cmwsIHJjID0gJWRcbiIsIHJjKTsKLQkJZHAtPmN0cmwgPSBOVUxMOwotCQlnb3Rv IGVycm9yX2N0cmw7Ci0JfQotCi0JZHAtPmF1ZGlvID0gZHBfYXVkaW9fZ2V0KGRwLT5wZGV2LCBk cC0+cGFuZWwsICZkcC0+Y2F0YWxvZy0+YXVkaW8pOwotCWlmIChJU19FUlIoZHAtPmF1ZGlvKSkg ewotCQlyYyA9IFBUUl9FUlIoZHAtPmF1ZGlvKTsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gaW5pdGlh bGl6ZSBhdWRpbywgcmMgPSAlZFxuIiwgcmMpOwotCQlkcC0+YXVkaW8gPSBOVUxMOwotCQlnb3Rv IGVycm9yX2F1ZGlvOwotCX0KLQotCWRwLT5kZWJ1ZyA9IGRwX2RlYnVnX2dldChkZXYsIGRwLT5w YW5lbCwgZHAtPnVzYnBkLAotCQkJCWRwLT5saW5rLCAmZHAtPmRwX2Rpc3BsYXkuY29ubmVjdG9y KTsKLQlpZiAoSVNfRVJSKGRwLT5kZWJ1ZykpIHsKLQkJcmMgPSBQVFJfRVJSKGRwLT5kZWJ1Zyk7 Ci0JCXByX2VycigiZmFpbGVkIHRvIGluaXRpYWxpemUgZGVidWcsIHJjID0gJWRcbiIsIHJjKTsK LQkJZHAtPmRlYnVnID0gTlVMTDsKLQkJZ290byBlcnJvcl9kZWJ1ZzsKLQl9Ci0KLQlyZXR1cm4g cmM7Ci1lcnJvcl9kZWJ1ZzoKLQlkcF9hdWRpb19wdXQoZHAtPmF1ZGlvKTsKLWVycm9yX2F1ZGlv OgotCWRwX2N0cmxfcHV0KGRwLT5jdHJsKTsKLWVycm9yX2N0cmw6Ci0JZHBfcGFuZWxfcHV0KGRw LT5wYW5lbCk7Ci1lcnJvcl9wYW5lbDoKLQlkcF9saW5rX3B1dChkcC0+bGluayk7Ci1lcnJvcl9s aW5rOgotCWRwX2F1eF9wdXQoZHAtPmF1eCk7Ci1lcnJvcl9hdXg6Ci0JZHBfcG93ZXJfcHV0KGRw LT5wb3dlcik7Ci1lcnJvcl9wb3dlcjoKLQlkcF9jYXRhbG9nX3B1dChkcC0+Y2F0YWxvZyk7Ci1l cnJvcl9jYXRhbG9nOgotCWRwX3BhcnNlcl9wdXQoZHAtPnBhcnNlcik7Ci1lcnJvcl9wYXJzZXI6 Ci0JZHBfdXNicGRfcHV0KGRwLT51c2JwZCk7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0 YXRpYyBpbnQgZHBfZGlzcGxheV9zZXRfbW9kZShzdHJ1Y3QgZHBfZGlzcGxheSAqZHBfZGlzcGxh eSwKLQkJc3RydWN0IGRwX2Rpc3BsYXlfbW9kZSAqbW9kZSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0 cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwOwotCi0JaWYgKCFkcF9kaXNwbGF5KSB7Ci0JCXBy X2VycigiaW52YWxpZCBpbnB1dFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsK LQl9Ci0JZHAgPSBjb250YWluZXJfb2YoZHBfZGlzcGxheSwgc3RydWN0IGRwX2Rpc3BsYXlfcHJp dmF0ZSwgZHBfZGlzcGxheSk7Ci0KLQlkcC0+cGFuZWwtPnBpbmZvID0gbW9kZS0+dGltaW5nOwot CWRwLT5wYW5lbC0+aW5pdF9pbmZvKGRwLT5wYW5lbCk7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19 Ci0KLXN0YXRpYyBpbnQgZHBfZGlzcGxheV9wcmVwYXJlKHN0cnVjdCBkcF9kaXNwbGF5ICpkcCkK LXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkcF9kaXNwbGF5X2VuYWJsZShzdHJ1Y3Qg ZHBfZGlzcGxheSAqZHBfZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkcF9kaXNw bGF5X3ByaXZhdGUgKmRwOwotCi0JaWYgKCFkcF9kaXNwbGF5KSB7Ci0JCXByX2VycigiaW52YWxp ZCBpbnB1dFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlkcCA9 IGNvbnRhaW5lcl9vZihkcF9kaXNwbGF5LCBzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlLCBkcF9k aXNwbGF5KTsKLQotCWlmIChkcC0+cG93ZXJfb24pIHsKLQkJcHJfZGVidWcoIkxpbmsgYWxyZWFk eSBzZXR1cCwgcmV0dXJuXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmMgPSBkcC0+Y3RybC0+ b24oZHAtPmN0cmwpOwotCWlmICghcmMpCi0JCWRwLT5wb3dlcl9vbiA9IHRydWU7Ci1lcnJvcjoK LQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfZGlzcGxheV9wb3N0X2VuYWJsZShzdHJ1 Y3QgZHBfZGlzcGxheSAqZHBfZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkcF9k aXNwbGF5X3ByaXZhdGUgKmRwOwotCi0JaWYgKCFkcF9kaXNwbGF5KSB7Ci0JCXByX2VycigiaW52 YWxpZCBpbnB1dFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlbmQ7Ci0JfQotCi0JZHAg PSBjb250YWluZXJfb2YoZHBfZGlzcGxheSwgc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSwgZHBf ZGlzcGxheSk7Ci0KLQlpZiAoZHAtPmF1ZGlvX3N1cHBvcnRlZCkgewotCQlkcC0+YXVkaW8tPmJ3 X2NvZGUgPSBkcC0+bGluay0+bGlua19wYXJhbXMuYndfY29kZTsKLQkJZHAtPmF1ZGlvLT5sYW5l X2NvdW50ID0gZHAtPmxpbmstPmxpbmtfcGFyYW1zLmxhbmVfY291bnQ7Ci0JCWRwLT5hdWRpby0+ b24oZHAtPmF1ZGlvKTsKLQl9Ci0KLQljb21wbGV0ZV9hbGwoJmRwLT5ub3RpZmljYXRpb25fY29t cCk7Ci0KLQlkcF9kaXNwbGF5X3VwZGF0ZV9oZGNwX2luZm8oZHApOwotCi0JaWYgKGRwX2Rpc3Bs YXlfaXNfaGRjcF9lbmFibGVkKGRwKSkgewotCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRw LT5oZGNwX2NiX3dvcmspOwotCi0JCWRwLT5oZGNwX3N0YXR1cyA9IEhEQ1BfU1RBVEVfQVVUSEVO VElDQVRJTkc7Ci0JCXF1ZXVlX2RlbGF5ZWRfd29yayhkcC0+aGRjcF93b3JrcXVldWUsCi0JCQkJ JmRwLT5oZGNwX2NiX3dvcmssIEhaIC8gMik7Ci0JfQotZW5kOgotCXJldHVybiByYzsKLX0KLQot c3RhdGljIGludCBkcF9kaXNwbGF5X3ByZV9kaXNhYmxlKHN0cnVjdCBkcF9kaXNwbGF5ICpkcF9k aXNwbGF5KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7 Ci0KLQlpZiAoIWRwX2Rpc3BsYXkpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKLQkJ cmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWRwID0gY29udGFpbmVyX29mKGRw X2Rpc3BsYXksIHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUsIGRwX2Rpc3BsYXkpOwotCi0JaWYg KGRwX2Rpc3BsYXlfaXNfaGRjcF9lbmFibGVkKGRwKSkgewotCQlkcC0+aGRjcF9zdGF0dXMgPSBI RENQX1NUQVRFX0lOQUNUSVZFOwotCi0JCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZHAtPmhk Y3BfY2Jfd29yayk7Ci0JCWlmIChkcC0+aGRjcC5vcHMtPm9mZikKLQkJCWRwLT5oZGNwLm9wcy0+ b2ZmKGRwLT5oZGNwLmRhdGEpOwotCX0KLQotCWlmIChkcC0+dXNicGQtPmFsdF9tb2RlX2NmZ19k b25lICYmIChkcC0+dXNicGQtPmhwZF9oaWdoIHx8Ci0JCWRwLT51c2JwZC0+Zm9yY2VkX2Rpc2Nv bm5lY3QpKQotCQlkcC0+bGluay0+cHNtX2NvbmZpZyhkcC0+bGluaywgJmRwLT5wYW5lbC0+bGlu a19pbmZvLCB0cnVlKTsKLQotCWRwLT5jdHJsLT5wdXNoX2lkbGUoZHAtPmN0cmwpOwotZXJyb3I6 Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRwX2Rpc3BsYXlfZGlzYWJsZShzdHJ1Y3Qg ZHBfZGlzcGxheSAqZHBfZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkcF9kaXNw bGF5X3ByaXZhdGUgKmRwOwotCi0JaWYgKCFkcF9kaXNwbGF5KSB7Ci0JCXByX2VycigiaW52YWxp ZCBpbnB1dFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlkcCA9 IGNvbnRhaW5lcl9vZihkcF9kaXNwbGF5LCBzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlLCBkcF9k aXNwbGF5KTsKLQotCWlmICghZHAtPnBvd2VyX29uIHx8ICFkcC0+Y29yZV9pbml0aWFsaXplZCkK LQkJZ290byBlcnJvcjsKLQotCWRwLT5jdHJsLT5vZmYoZHAtPmN0cmwpOwotCi0JZHAtPnBvd2Vy X29uID0gZmFsc2U7Ci0KLQljb21wbGV0ZV9hbGwoJmRwLT5ub3RpZmljYXRpb25fY29tcCk7Ci1l cnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfcmVxdWVzdF9pcnEoc3RydWN0 IGRwX2Rpc3BsYXkgKmRwX2Rpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHBfZGlz cGxheV9wcml2YXRlICpkcDsKLQotCWlmICghZHBfZGlzcGxheSkgewotCQlwcl9lcnIoImludmFs aWQgaW5wdXRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkcCA9IGNvbnRhaW5lcl9v ZihkcF9kaXNwbGF5LCBzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlLCBkcF9kaXNwbGF5KTsKLQot CWRwLT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChkcC0+cGRldi0+ZGV2Lm9mX25vZGUsIDAp OwotCWlmIChkcC0+aXJxIDwgMCkgewotCQlyYyA9IGRwLT5pcnE7Ci0JCXByX2VycigiZmFpbGVk IHRvIGdldCBpcnE6ICVkXG4iLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlyYyA9IGRldm1f cmVxdWVzdF9pcnEoJmRwLT5wZGV2LT5kZXYsIGRwLT5pcnEsIGRwX2Rpc3BsYXlfaXJxLAotCQlJ UlFGX1RSSUdHRVJfSElHSCwgImRwX2Rpc3BsYXlfaXNyIiwgZHApOwotCWlmIChyYyA8IDApIHsK LQkJcHJfZXJyKCJmYWlsZWQgdG8gcmVxdWVzdCBJUlEldTogJWRcbiIsCi0JCQkJZHAtPmlycSwg cmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCWRpc2FibGVfaXJxKGRwLT5pcnEpOwotCi0JcmV0dXJu IDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZHBfZGVidWcgKmRwX2dldF9kZWJ1ZyhzdHJ1Y3QgZHBf ZGlzcGxheSAqZHBfZGlzcGxheSkKLXsKLQlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcDsK LQotCWlmICghZHBfZGlzcGxheSkgewotCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwotCQly ZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9Ci0KLQlkcCA9IGNvbnRhaW5lcl9vZihkcF9kaXNw bGF5LCBzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlLCBkcF9kaXNwbGF5KTsKLQotCXJldHVybiBk cC0+ZGVidWc7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfZGlzcGxheV91bnByZXBhcmUoc3RydWN0IGRw X2Rpc3BsYXkgKmRwKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRwX2Rpc3BsYXlf dmFsaWRhdGVfbW9kZShzdHJ1Y3QgZHBfZGlzcGxheSAqZHAsCi0Jc3RydWN0IGRwX2Rpc3BsYXlf bW9kZSAqbW9kZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkcF9kaXNwbGF5X2dl dF9tb2RlcyhzdHJ1Y3QgZHBfZGlzcGxheSAqZHAsCi0Jc3RydWN0IGRwX2Rpc3BsYXlfbW9kZSAq ZHBfbW9kZSkKLXsKLQlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcF9kaXNwbGF5OwotCWlu dCByZXQgPSAwOwotCi0JaWYgKCFkcCkgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsK LQkJcmV0dXJuIDA7Ci0JfQotCi0JZHBfZGlzcGxheSA9IGNvbnRhaW5lcl9vZihkcCwgc3RydWN0 IGRwX2Rpc3BsYXlfcHJpdmF0ZSwgZHBfZGlzcGxheSk7Ci0KLQlyZXQgPSBkcF9kaXNwbGF5LT5w YW5lbC0+Z2V0X21vZGVzKGRwX2Rpc3BsYXktPnBhbmVsLAotCQlkcC0+Y29ubmVjdG9yLCBkcF9t b2RlKTsKLQlpZiAoZHBfbW9kZS0+dGltaW5nLnBpeGVsX2Nsa19raHopCi0JCWRwLT5tYXhfcGNs a19raHogPSBkcF9tb2RlLT50aW1pbmcucGl4ZWxfY2xrX2toejsKLQlyZXR1cm4gcmV0OwotfQot Ci1zdGF0aWMgYm9vbCBkcF9kaXNwbGF5X2NoZWNrX3ZpZGVvX3Rlc3Qoc3RydWN0IGRwX2Rpc3Bs YXkgKmRwKQotewotCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwX2Rpc3BsYXk7Ci0KLQlp ZiAoIWRwKSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gZmFsc2U7 Ci0JfQotCi0JZHBfZGlzcGxheSA9IGNvbnRhaW5lcl9vZihkcCwgc3RydWN0IGRwX2Rpc3BsYXlf cHJpdmF0ZSwgZHBfZGlzcGxheSk7Ci0KLQlpZiAoZHBfZGlzcGxheS0+cGFuZWwtPnZpZGVvX3Rl c3QpCi0JCXJldHVybiB0cnVlOwotCi0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW50IGRw X2Rpc3BsYXlfZ2V0X3Rlc3RfYnBwKHN0cnVjdCBkcF9kaXNwbGF5ICpkcCkKLXsKLQlzdHJ1Y3Qg ZHBfZGlzcGxheV9wcml2YXRlICpkcF9kaXNwbGF5OwotCi0JaWYgKCFkcCkgewotCQlwcl9lcnIo ImludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JZHBfZGlzcGxheSA9IGNv bnRhaW5lcl9vZihkcCwgc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSwgZHBfZGlzcGxheSk7Ci0K LQlyZXR1cm4gZHBfbGlua19iaXRfZGVwdGhfdG9fYnBwKAotCQlkcF9kaXNwbGF5LT5saW5rLT50 ZXN0X3ZpZGVvLnRlc3RfYml0X2RlcHRoKTsKLX0KLQotc3RhdGljIGludCBkcF9kaXNwbGF5X3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1 Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcDsKLQotCWlmICghcGRldiB8fCAhcGRldi0+ZGV2Lm9m X25vZGUpIHsKLQkJcHJfZXJyKCJwZGV2IG5vdCBmb3VuZFxuIik7Ci0JCXJldHVybiAtRU5PREVW OwotCX0KLQotCWRwID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqZHApLCBHRlBf S0VSTkVMKTsKLQlpZiAoIWRwKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWluaXRfY29tcGxldGlv bigmZHAtPm5vdGlmaWNhdGlvbl9jb21wKTsKLQotCWRwLT5wZGV2ID0gcGRldjsKLQlkcC0+bmFt ZSA9ICJkcm1fZHAiOwotCi0JcmMgPSBkcF9pbml0X3N1Yl9tb2R1bGVzKGRwKTsKLQlpZiAocmMp IHsKLQkJZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBkcCk7Ci0JCXJldHVybiAtRVBST0JFX0RFRkVS OwotCX0KLQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRwKTsKLQotCWdfZHBfZGlzcGxh eSA9ICZkcC0+ZHBfZGlzcGxheTsKLQotCWdfZHBfZGlzcGxheS0+ZW5hYmxlICAgICAgICA9IGRw X2Rpc3BsYXlfZW5hYmxlOwotCWdfZHBfZGlzcGxheS0+cG9zdF9lbmFibGUgICA9IGRwX2Rpc3Bs YXlfcG9zdF9lbmFibGU7Ci0JZ19kcF9kaXNwbGF5LT5wcmVfZGlzYWJsZSAgID0gZHBfZGlzcGxh eV9wcmVfZGlzYWJsZTsKLQlnX2RwX2Rpc3BsYXktPmRpc2FibGUgICAgICAgPSBkcF9kaXNwbGF5 X2Rpc2FibGU7Ci0JZ19kcF9kaXNwbGF5LT5zZXRfbW9kZSAgICAgID0gZHBfZGlzcGxheV9zZXRf bW9kZTsKLQlnX2RwX2Rpc3BsYXktPnZhbGlkYXRlX21vZGUgPSBkcF9kaXNwbGF5X3ZhbGlkYXRl X21vZGU7Ci0JZ19kcF9kaXNwbGF5LT5nZXRfbW9kZXMgICAgID0gZHBfZGlzcGxheV9nZXRfbW9k ZXM7Ci0JZ19kcF9kaXNwbGF5LT5wcmVwYXJlICAgICAgID0gZHBfZGlzcGxheV9wcmVwYXJlOwot CWdfZHBfZGlzcGxheS0+dW5wcmVwYXJlICAgICA9IGRwX2Rpc3BsYXlfdW5wcmVwYXJlOwotCWdf ZHBfZGlzcGxheS0+cmVxdWVzdF9pcnEgICA9IGRwX3JlcXVlc3RfaXJxOwotCWdfZHBfZGlzcGxh eS0+Z2V0X2RlYnVnICAgICA9IGRwX2dldF9kZWJ1ZzsKLQlnX2RwX2Rpc3BsYXktPnNlbmRfaHBk X2V2ZW50ICAgID0gZHBfZGlzcGxheV9zZW5kX2hwZF9ldmVudDsKLQlnX2RwX2Rpc3BsYXktPmlz X3ZpZGVvX3Rlc3QgPSBkcF9kaXNwbGF5X2NoZWNrX3ZpZGVvX3Rlc3Q7Ci0JZ19kcF9kaXNwbGF5 LT5nZXRfdGVzdF9icHAgPSBkcF9kaXNwbGF5X2dldF90ZXN0X2JwcDsKLQotCXJjID0gY29tcG9u ZW50X2FkZCgmcGRldi0+ZGV2LCAmZHBfZGlzcGxheV9jb21wX29wcyk7Ci0JaWYgKHJjKSB7Ci0J CXByX2VycigiY29tcG9uZW50IGFkZCBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Ci0JCWRwX2Rpc3Bs YXlfZGVpbml0X3N1Yl9tb2R1bGVzKGRwKTsKLQkJZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBkcCk7 Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHBfZGlzcGxheV9nZXRfZGlzcGxheXModm9p ZCAqKmRpc3BsYXlzLCBpbnQgY291bnQpCi17Ci0JaWYgKCFkaXNwbGF5cykgewotCQlwcl9lcnIo ImludmFsaWQgZGF0YVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChjb3VudCAh PSAxKSB7Ci0JCXByX2VycigiaW52YWxpZCBudW1iZXIgb2YgZGlzcGxheXNcbiIpOwotCQlyZXR1 cm4gLUVJTlZBTDsKLQl9Ci0KLQlkaXNwbGF5c1swXSA9IGdfZHBfZGlzcGxheTsKLQlyZXR1cm4g Y291bnQ7Ci19Ci0KLWludCBkcF9kaXNwbGF5X2dldF9udW1fb2ZfZGlzcGxheXModm9pZCkKLXsK LQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBkcF9kaXNwbGF5X3JlbW92ZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwOwot Ci0JaWYgKCFwZGV2KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRwID0gcGxhdGZvcm1fZ2V0X2Ry dmRhdGEocGRldik7Ci0KLQlkcF9kaXNwbGF5X2RlaW5pdF9zdWJfbW9kdWxlcyhkcCk7Ci0KLQlw bGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQlkZXZtX2tmcmVlKCZwZGV2LT5kZXYs IGRwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBk cF9kaXNwbGF5X2RyaXZlciA9IHsKLQkucHJvYmUgID0gZHBfZGlzcGxheV9wcm9iZSwKLQkucmVt b3ZlID0gZHBfZGlzcGxheV9yZW1vdmUsCi0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAibXNtLWRw LWRpc3BsYXkiLAotCQkub2ZfbWF0Y2hfdGFibGUgPSBkcF9kdF9tYXRjaCwKLQl9LAotfTsKLQot c3RhdGljIGludCBfX2luaXQgZHBfZGlzcGxheV9pbml0KHZvaWQpCi17Ci0JaW50IHJldDsKLQot CXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZHBfZGlzcGxheV9kcml2ZXIpOwotCWlm IChyZXQpIHsKLQkJcHJfZXJyKCJkcml2ZXIgcmVnaXN0ZXIgZmFpbGVkIik7Ci0JCXJldHVybiBy ZXQ7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLW1vZHVsZV9pbml0KGRwX2Rpc3BsYXlfaW5pdCk7 Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBkcF9kaXNwbGF5X2NsZWFudXAodm9pZCkKLXsKLQlwbGF0 Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZHBfZGlzcGxheV9kcml2ZXIpOwotfQotbW9kdWxlX2V4 aXQoZHBfZGlzcGxheV9jbGVhbnVwKTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9kcC9kcF9kaXNwbGF5LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuaApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkyYTBlYi4uMDAwMDAwMAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDUyICsw LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFu ZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2lmbmRlZiBf RFBfRElTUExBWV9IXwotI2RlZmluZSBfRFBfRElTUExBWV9IXwotCi0jaW5jbHVkZSA8ZHJtL2Ry bVAuaD4KLQotI2luY2x1ZGUgImRwX3BhbmVsLmgiCi0KLXN0cnVjdCBkcF9kaXNwbGF5IHsKLQlz dHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldjsKLQlzdHJ1Y3QgZHBfYnJpZGdlICpicmlkZ2U7Ci0J c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKLQlib29sIGlzX2Nvbm5lY3RlZDsKLQl1 MzIgbWF4X3BjbGtfa2h6OwotCi0JaW50ICgqZW5hYmxlKShzdHJ1Y3QgZHBfZGlzcGxheSAqZHBf ZGlzcGxheSk7Ci0JaW50ICgqcG9zdF9lbmFibGUpKHN0cnVjdCBkcF9kaXNwbGF5ICpkcF9kaXNw bGF5KTsKLQotCWludCAoKnByZV9kaXNhYmxlKShzdHJ1Y3QgZHBfZGlzcGxheSAqZHBfZGlzcGxh eSk7Ci0JaW50ICgqZGlzYWJsZSkoc3RydWN0IGRwX2Rpc3BsYXkgKmRwX2Rpc3BsYXkpOwotCi0J aW50ICgqc2V0X21vZGUpKHN0cnVjdCBkcF9kaXNwbGF5ICpkcF9kaXNwbGF5LAotCQkJc3RydWN0 IGRwX2Rpc3BsYXlfbW9kZSAqbW9kZSk7Ci0JaW50ICgqdmFsaWRhdGVfbW9kZSkoc3RydWN0IGRw X2Rpc3BsYXkgKmRwX2Rpc3BsYXksCi0JCQlzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlICptb2RlKTsK LQlpbnQgKCpnZXRfbW9kZXMpKHN0cnVjdCBkcF9kaXNwbGF5ICpkcF9kaXNwbGF5LAotCQlzdHJ1 Y3QgZHBfZGlzcGxheV9tb2RlICpkcF9tb2RlKTsKLQlpbnQgKCpwcmVwYXJlKShzdHJ1Y3QgZHBf ZGlzcGxheSAqZHBfZGlzcGxheSk7Ci0JaW50ICgqdW5wcmVwYXJlKShzdHJ1Y3QgZHBfZGlzcGxh eSAqZHBfZGlzcGxheSk7Ci0JaW50ICgqcmVxdWVzdF9pcnEpKHN0cnVjdCBkcF9kaXNwbGF5ICpk cF9kaXNwbGF5KTsKLQlzdHJ1Y3QgZHBfZGVidWcgKigqZ2V0X2RlYnVnKShzdHJ1Y3QgZHBfZGlz cGxheSAqZHBfZGlzcGxheSk7Ci0Jdm9pZCAoKnNlbmRfaHBkX2V2ZW50KShzdHJ1Y3QgZHBfZGlz cGxheSAqZHBfZGlzcGxheSk7Ci0JYm9vbCAoKmlzX3ZpZGVvX3Rlc3QpKHN0cnVjdCBkcF9kaXNw bGF5ICpkcF9kaXNwbGF5KTsKLQlpbnQgKCpnZXRfdGVzdF9icHApKHN0cnVjdCBkcF9kaXNwbGF5 ICpkcF9kaXNwbGF5KTsKLX07Ci0KLWludCBkcF9kaXNwbGF5X2dldF9udW1fb2ZfZGlzcGxheXMo dm9pZCk7Ci1pbnQgZHBfZGlzcGxheV9nZXRfZGlzcGxheXModm9pZCAqKmRpc3BsYXlzLCBpbnQg Y291bnQpOwotI2VuZGlmIC8qIF9EUF9ESVNQTEFZX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2RwL2RwX2RybS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kcm0u YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM1NDUyZi4uMDAwMDAwMAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2RybS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTM4ICsw LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFu ZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2RlZmluZSBw cl9mbXQoZm10KQkiW2RybS1kcF06ICVzOiAiIGZtdCwgX19mdW5jX18KLQotI2luY2x1ZGUgPGRy bS9kcm1fYXRvbWljX2hlbHBlci5oPgotI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Ci0jaW5j bHVkZSA8ZHJtL2RybV9jcnRjLmg+Ci0KLSNpbmNsdWRlICJtc21fZHJ2LmgiCi0jaW5jbHVkZSAi bXNtX2ttcy5oIgotI2luY2x1ZGUgImRwdV9jb25uZWN0b3IuaCIKLSNpbmNsdWRlICJkcF9kcm0u aCIKLSNpbmNsdWRlICJkcF9kZWJ1Zy5oIgotCi0jZGVmaW5lIHRvX2RwX2JyaWRnZSh4KSAgICAg Y29udGFpbmVyX29mKCh4KSwgc3RydWN0IGRwX2JyaWRnZSwgYmFzZSkKLQotc3RhdGljIHZvaWQg Y29udmVydF90b19kcF9tb2RlKGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fbW9k ZSwKLQkJCXN0cnVjdCBkcF9kaXNwbGF5X21vZGUgKmRwX21vZGUsIHN0cnVjdCBkcF9kaXNwbGF5 ICpkcCkKLXsKLQljb25zdCB1MzIgbnVtX2NvbXBvbmVudHMgPSAzOwotCi0JbWVtc2V0KGRwX21v ZGUsIDAsIHNpemVvZigqZHBfbW9kZSkpOwotCi0JZHBfbW9kZS0+dGltaW5nLmhfYWN0aXZlID0g ZHJtX21vZGUtPmhkaXNwbGF5OwotCWRwX21vZGUtPnRpbWluZy5oX2JhY2tfcG9yY2ggPSBkcm1f bW9kZS0+aHRvdGFsIC0gZHJtX21vZGUtPmhzeW5jX2VuZDsKLQlkcF9tb2RlLT50aW1pbmcuaF9z eW5jX3dpZHRoID0gZHJtX21vZGUtPmh0b3RhbCAtCi0JCQkoZHJtX21vZGUtPmhzeW5jX3N0YXJ0 ICsgZHBfbW9kZS0+dGltaW5nLmhfYmFja19wb3JjaCk7Ci0JZHBfbW9kZS0+dGltaW5nLmhfZnJv bnRfcG9yY2ggPSBkcm1fbW9kZS0+aHN5bmNfc3RhcnQgLQotCQkJCQkgZHJtX21vZGUtPmhkaXNw bGF5OwotCWRwX21vZGUtPnRpbWluZy5oX3NrZXcgPSBkcm1fbW9kZS0+aHNrZXc7Ci0KLQlkcF9t b2RlLT50aW1pbmcudl9hY3RpdmUgPSBkcm1fbW9kZS0+dmRpc3BsYXk7Ci0JZHBfbW9kZS0+dGlt aW5nLnZfYmFja19wb3JjaCA9IGRybV9tb2RlLT52dG90YWwgLSBkcm1fbW9kZS0+dnN5bmNfZW5k OwotCWRwX21vZGUtPnRpbWluZy52X3N5bmNfd2lkdGggPSBkcm1fbW9kZS0+dnRvdGFsIC0KLQkJ KGRybV9tb2RlLT52c3luY19zdGFydCArIGRwX21vZGUtPnRpbWluZy52X2JhY2tfcG9yY2gpOwot Ci0JZHBfbW9kZS0+dGltaW5nLnZfZnJvbnRfcG9yY2ggPSBkcm1fbW9kZS0+dnN5bmNfc3RhcnQg LQotCQkJCQkgZHJtX21vZGUtPnZkaXNwbGF5OwotCi0JaWYgKGRwLT5pc192aWRlb190ZXN0KGRw KSkKLQkJZHBfbW9kZS0+dGltaW5nLmJwcCA9IGRwLT5nZXRfdGVzdF9icHAoZHApOwotCWVsc2UK LQkJZHBfbW9kZS0+dGltaW5nLmJwcCA9IGRwLT5jb25uZWN0b3ItPmRpc3BsYXlfaW5mby5icGMg KgotCQludW1fY29tcG9uZW50czsKLQotCWlmICghZHBfbW9kZS0+dGltaW5nLmJwcCkKLQkJZHBf bW9kZS0+dGltaW5nLmJwcCA9IDI0OwotCi0JZHBfbW9kZS0+dGltaW5nLnJlZnJlc2hfcmF0ZSA9 IGRybV9tb2RlLT52cmVmcmVzaDsKLQotCWRwX21vZGUtPnRpbWluZy5waXhlbF9jbGtfa2h6ID0g ZHJtX21vZGUtPmNsb2NrOwotCi0JZHBfbW9kZS0+dGltaW5nLnZfYWN0aXZlX2xvdyA9Ci0JCSEh KGRybV9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKTsKLQotCWRwX21vZGUtPnRp bWluZy5oX2FjdGl2ZV9sb3cgPQotCQkhIShkcm1fbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFH X05IU1lOQyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbnZlcnRfdG9fZHJtX21vZGUoY29uc3Qgc3Ry dWN0IGRwX2Rpc3BsYXlfbW9kZSAqZHBfbW9kZSwKLQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqZHJtX21vZGUpCi17Ci0JdTMyIGZsYWdzID0gMDsKLQotCW1lbXNldChkcm1fbW9kZSwgMCwg c2l6ZW9mKCpkcm1fbW9kZSkpOwotCi0JZHJtX21vZGUtPmhkaXNwbGF5ID0gZHBfbW9kZS0+dGlt aW5nLmhfYWN0aXZlOwotCWRybV9tb2RlLT5oc3luY19zdGFydCA9IGRybV9tb2RlLT5oZGlzcGxh eSArCi0JCQkJZHBfbW9kZS0+dGltaW5nLmhfZnJvbnRfcG9yY2g7Ci0JZHJtX21vZGUtPmhzeW5j X2VuZCA9IGRybV9tb2RlLT5oc3luY19zdGFydCArCi0JCQkgICAgICBkcF9tb2RlLT50aW1pbmcu aF9zeW5jX3dpZHRoOwotCWRybV9tb2RlLT5odG90YWwgPSBkcm1fbW9kZS0+aHN5bmNfZW5kICsg ZHBfbW9kZS0+dGltaW5nLmhfYmFja19wb3JjaDsKLQlkcm1fbW9kZS0+aHNrZXcgPSBkcF9tb2Rl LT50aW1pbmcuaF9za2V3OwotCi0JZHJtX21vZGUtPnZkaXNwbGF5ID0gZHBfbW9kZS0+dGltaW5n LnZfYWN0aXZlOwotCWRybV9tb2RlLT52c3luY19zdGFydCA9IGRybV9tb2RlLT52ZGlzcGxheSAr Ci0JCQkJZHBfbW9kZS0+dGltaW5nLnZfZnJvbnRfcG9yY2g7Ci0JZHJtX21vZGUtPnZzeW5jX2Vu ZCA9IGRybV9tb2RlLT52c3luY19zdGFydCArCi0JCQkgICAgICBkcF9tb2RlLT50aW1pbmcudl9z eW5jX3dpZHRoOwotCWRybV9tb2RlLT52dG90YWwgPSBkcm1fbW9kZS0+dnN5bmNfZW5kICsgZHBf bW9kZS0+dGltaW5nLnZfYmFja19wb3JjaDsKLQotCWRybV9tb2RlLT52cmVmcmVzaCA9IGRwX21v ZGUtPnRpbWluZy5yZWZyZXNoX3JhdGU7Ci0JZHJtX21vZGUtPmNsb2NrID0gZHBfbW9kZS0+dGlt aW5nLnBpeGVsX2Nsa19raHo7Ci0KLQlpZiAoZHBfbW9kZS0+dGltaW5nLmhfYWN0aXZlX2xvdykK LQkJZmxhZ3MgfD0gRFJNX01PREVfRkxBR19OSFNZTkM7Ci0JZWxzZQotCQlmbGFncyB8PSBEUk1f TU9ERV9GTEFHX1BIU1lOQzsKLQotCWlmIChkcF9tb2RlLT50aW1pbmcudl9hY3RpdmVfbG93KQot CQlmbGFncyB8PSBEUk1fTU9ERV9GTEFHX05WU1lOQzsKLQllbHNlCi0JCWZsYWdzIHw9IERSTV9N T0RFX0ZMQUdfUFZTWU5DOwotCi0JZHJtX21vZGUtPmZsYWdzID0gZmxhZ3M7Ci0KLQlkcm1fbW9k ZS0+dHlwZSA9IDB4NDg7Ci0JZHJtX21vZGVfc2V0X25hbWUoZHJtX21vZGUpOwotfQotCi1zdGF0 aWMgaW50IGRwX2JyaWRnZV9hdHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmRwX2JyaWRnZSkKLXsK LQlzdHJ1Y3QgZHBfYnJpZGdlICpicmlkZ2UgPSB0b19kcF9icmlkZ2UoZHBfYnJpZGdlKTsKLQot CWlmICghZHBfYnJpZGdlKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1 cm4gLUVJTlZBTDsKLQl9Ci0KLQlwcl9kZWJ1ZygiWyVkXSBhdHRhY2hlZFxuIiwgYnJpZGdlLT5p ZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZHBfYnJpZGdlX3ByZV9lbmFibGUo c3RydWN0IGRybV9icmlkZ2UgKmRybV9icmlkZ2UpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3Qg ZHBfYnJpZGdlICpicmlkZ2U7Ci0Jc3RydWN0IGRwX2Rpc3BsYXkgKmRwOwotCi0JaWYgKCFkcm1f YnJpZGdlKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm47Ci0JfQot Ci0JYnJpZGdlID0gdG9fZHBfYnJpZGdlKGRybV9icmlkZ2UpOwotCWRwID0gYnJpZGdlLT5kaXNw bGF5OwotCi0JLyogQnkgdGhpcyBwb2ludCBtb2RlIHNob3VsZCBoYXZlIGJlZW4gdmFsaWRhdGVk IHRocm91Z2ggbW9kZV9maXh1cCAqLwotCXJjID0gZHAtPnNldF9tb2RlKGRwLCAmYnJpZGdlLT5k cF9tb2RlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJWRdIGZhaWxlZCB0byBwZXJmb3JtIGEg bW9kZSBzZXQsIHJjPSVkXG4iLAotCQkgICAgICAgYnJpZGdlLT5pZCwgcmMpOwotCQlyZXR1cm47 Ci0JfQotCi0JcmMgPSBkcC0+cHJlcGFyZShkcCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVk XSBEUCBkaXNwbGF5IHByZXBhcmUgZmFpbGVkLCByYz0lZFxuIiwKLQkJICAgICAgIGJyaWRnZS0+ aWQsIHJjKTsKLQkJcmV0dXJuOwotCX0KLQotCXJjID0gZHAtPmVuYWJsZShkcCk7Ci0JaWYgKHJj KSB7Ci0JCXByX2VycigiWyVkXSBEUCBkaXNwbGF5IGVuYWJsZSBmYWlsZWQsIHJjPSVkXG4iLAot CQkgICAgICAgYnJpZGdlLT5pZCwgcmMpOwotCQlkcC0+dW5wcmVwYXJlKGRwKTsKLQl9Ci19Ci0K LXN0YXRpYyB2b2lkIGRwX2JyaWRnZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmRybV9icmlk Z2UpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHBfYnJpZGdlICpicmlkZ2U7Ci0Jc3RydWN0 IGRwX2Rpc3BsYXkgKmRwOwotCi0JaWYgKCFkcm1fYnJpZGdlKSB7Ci0JCXByX2VycigiSW52YWxp ZCBwYXJhbXNcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JYnJpZGdlID0gdG9fZHBfYnJpZGdlKGRy bV9icmlkZ2UpOwotCWRwID0gYnJpZGdlLT5kaXNwbGF5OwotCi0JcmMgPSBkcC0+cG9zdF9lbmFi bGUoZHApOwotCWlmIChyYykKLQkJcHJfZXJyKCJbJWRdIERQIGRpc3BsYXkgcG9zdCBlbmFibGUg ZmFpbGVkLCByYz0lZFxuIiwKLQkJICAgICAgIGJyaWRnZS0+aWQsIHJjKTsKLX0KLQotc3RhdGlj IHZvaWQgZHBfYnJpZGdlX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmRybV9icmlkZ2UpCi17 Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHBfYnJpZGdlICpicmlkZ2U7Ci0Jc3RydWN0IGRwX2Rp c3BsYXkgKmRwOwotCi0JaWYgKCFkcm1fYnJpZGdlKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJh bXNcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JYnJpZGdlID0gdG9fZHBfYnJpZGdlKGRybV9icmlk Z2UpOwotCWRwID0gYnJpZGdlLT5kaXNwbGF5OwotCi0JcmMgPSBkcC0+cHJlX2Rpc2FibGUoZHAp OwotCWlmIChyYykgewotCQlwcl9lcnIoIlslZF0gRFAgZGlzcGxheSBwcmUgZGlzYWJsZSBmYWls ZWQsIHJjPSVkXG4iLAotCQkgICAgICAgYnJpZGdlLT5pZCwgcmMpOwotCX0KLX0KLQotc3RhdGlj IHZvaWQgZHBfYnJpZGdlX3Bvc3RfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqZHJtX2JyaWRn ZSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkcF9icmlkZ2UgKmJyaWRnZTsKLQlzdHJ1Y3Qg ZHBfZGlzcGxheSAqZHA7Ci0KLQlpZiAoIWRybV9icmlkZ2UpIHsKLQkJcHJfZXJyKCJJbnZhbGlk IHBhcmFtc1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlicmlkZ2UgPSB0b19kcF9icmlkZ2UoZHJt X2JyaWRnZSk7Ci0JZHAgPSBicmlkZ2UtPmRpc3BsYXk7Ci0KLQlyYyA9IGRwLT5kaXNhYmxlKGRw KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJWRdIERQIGRpc3BsYXkgZGlzYWJsZSBmYWlsZWQs IHJjPSVkXG4iLAotCQkgICAgICAgYnJpZGdlLT5pZCwgcmMpOwotCQlyZXR1cm47Ci0JfQotCi0J cmMgPSBkcC0+dW5wcmVwYXJlKGRwKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJWRdIERQIGRp c3BsYXkgdW5wcmVwYXJlIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBicmlkZ2UtPmlkLCBy Yyk7Ci0JCXJldHVybjsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2JyaWRnZV9tb2RlX3NldChz dHJ1Y3QgZHJtX2JyaWRnZSAqZHJtX2JyaWRnZSwKLQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSwKLQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKLXsK LQlzdHJ1Y3QgZHBfYnJpZGdlICpicmlkZ2U7Ci0Jc3RydWN0IGRwX2Rpc3BsYXkgKmRwOwotCi0J aWYgKCFkcm1fYnJpZGdlIHx8ICFtb2RlIHx8ICFhZGp1c3RlZF9tb2RlKSB7Ci0JCXByX2Vycigi SW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JYnJpZGdlID0gdG9fZHBfYnJp ZGdlKGRybV9icmlkZ2UpOwotCWRwID0gYnJpZGdlLT5kaXNwbGF5OwotCi0JbWVtc2V0KCZicmlk Z2UtPmRwX21vZGUsIDB4MCwgc2l6ZW9mKHN0cnVjdCBkcF9kaXNwbGF5X21vZGUpKTsKLQljb252 ZXJ0X3RvX2RwX21vZGUoYWRqdXN0ZWRfbW9kZSwgJmJyaWRnZS0+ZHBfbW9kZSwgZHApOwotfQot Ci1zdGF0aWMgYm9vbCBkcF9icmlkZ2VfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2JyaWRnZSAqZHJt X2JyaWRnZSwKLQkJCQkgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAotCQkJ CSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCi17Ci0JaW50IHJjID0g MDsKLQlib29sIHJldCA9IHRydWU7Ci0Jc3RydWN0IGRwX2Rpc3BsYXlfbW9kZSBkcF9tb2RlOwot CXN0cnVjdCBkcF9icmlkZ2UgKmJyaWRnZTsKLQlzdHJ1Y3QgZHBfZGlzcGxheSAqZHA7Ci0KLQlp ZiAoIWRybV9icmlkZ2UgfHwgIW1vZGUgfHwgIWFkanVzdGVkX21vZGUpIHsKLQkJcHJfZXJyKCJJ bnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldCA9IGZhbHNlOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQli cmlkZ2UgPSB0b19kcF9icmlkZ2UoZHJtX2JyaWRnZSk7Ci0JZHAgPSBicmlkZ2UtPmRpc3BsYXk7 Ci0KLQljb252ZXJ0X3RvX2RwX21vZGUobW9kZSwgJmRwX21vZGUsIGRwKTsKLQotCXJjID0gZHAt PnZhbGlkYXRlX21vZGUoZHAsICZkcF9tb2RlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJWRd IG1vZGUgaXMgbm90IHZhbGlkLCByYz0lZFxuIiwgYnJpZGdlLT5pZCwgcmMpOwotCQlyZXQgPSBm YWxzZTsKLQl9IGVsc2UgewotCQljb252ZXJ0X3RvX2RybV9tb2RlKCZkcF9tb2RlLCBhZGp1c3Rl ZF9tb2RlKTsKLQl9Ci1lbmQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fYnJpZGdlX2Z1bmNzIGRwX2JyaWRnZV9vcHMgPSB7Ci0JLmF0dGFjaCAgICAgICA9IGRw X2JyaWRnZV9hdHRhY2gsCi0JLm1vZGVfZml4dXAgICA9IGRwX2JyaWRnZV9tb2RlX2ZpeHVwLAot CS5wcmVfZW5hYmxlICAgPSBkcF9icmlkZ2VfcHJlX2VuYWJsZSwKLQkuZW5hYmxlICAgICAgID0g ZHBfYnJpZGdlX2VuYWJsZSwKLQkuZGlzYWJsZSAgICAgID0gZHBfYnJpZGdlX2Rpc2FibGUsCi0J LnBvc3RfZGlzYWJsZSA9IGRwX2JyaWRnZV9wb3N0X2Rpc2FibGUsCi0JLm1vZGVfc2V0ICAgICA9 IGRwX2JyaWRnZV9tb2RlX3NldCwKLX07Ci0KLWludCBkcF9jb25uZWN0b3JfcG9zdF9pbml0KHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCXZvaWQgKmluZm8sCi0JCXZvaWQgKmRp c3BsYXkpCi17Ci0Jc3RydWN0IGRwX2Rpc3BsYXkgKmRwX2Rpc3BsYXkgPSBkaXNwbGF5OwotCi0J aWYgKCFpbmZvIHx8ICFkcF9kaXNwbGF5KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRwX2Rpc3Bs YXktPmNvbm5lY3RvciA9IGNvbm5lY3RvcjsKLQlyZXR1cm4gMDsKLX0KLQotaW50IGRwX2Nvbm5l Y3Rvcl9nZXRfbW9kZV9pbmZvKGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fbW9k ZSwKLQlzdHJ1Y3QgbXNtX21vZGVfaW5mbyAqbW9kZV9pbmZvLCB1MzIgbWF4X21peGVyX3dpZHRo KQotewotCWNvbnN0IHUzMiBkdWFsX2xtID0gMjsKLQljb25zdCB1MzIgc2luZ2xlX2xtID0gMTsK LQljb25zdCB1MzIgc2luZ2xlX2ludGYgPSAxOwotCWNvbnN0IHUzMiBub19lbmMgPSAwOwotCXN0 cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSAqdG9wb2xvZ3k7Ci0KLQlpZiAoIWRybV9tb2RlIHx8 ICFtb2RlX2luZm8gfHwgIW1heF9taXhlcl93aWR0aCkgewotCQlwcl9lcnIoImludmFsaWQgcGFy YW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JdG9wb2xvZ3kgPSAmbW9kZV9pbmZv LT50b3BvbG9neTsKLQl0b3BvbG9neS0+bnVtX2xtID0gKG1heF9taXhlcl93aWR0aCA8PSBkcm1f bW9kZS0+aGRpc3BsYXkpID8KLQkJCQkJCQlkdWFsX2xtIDogc2luZ2xlX2xtOwotCXRvcG9sb2d5 LT5udW1fZW5jID0gbm9fZW5jOwotCXRvcG9sb2d5LT5udW1faW50ZiA9IHNpbmdsZV9pbnRmOwot Ci0JbW9kZV9pbmZvLT5mcmFtZV9yYXRlID0gZHJtX21vZGUtPnZyZWZyZXNoOwotCW1vZGVfaW5m by0+dnRvdGFsID0gZHJtX21vZGUtPnZ0b3RhbDsKLQltb2RlX2luZm8tPmNvbXBfaW5mby5jb21w X3R5cGUgPSBNU01fRElTUExBWV9DT01QUkVTU0lPTl9OT05FOwotCi0JcmV0dXJuIDA7Ci19Ci0K LWludCBkcF9jb25uZWN0b3JfZ2V0X2luZm8oc3RydWN0IG1zbV9kaXNwbGF5X2luZm8gKmluZm8s IHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRwX2Rpc3BsYXkgKmRpc3BsYXkgPSBkYXRhOwotCi0J aWYgKCFpbmZvIHx8ICFkaXNwbGF5KSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwot CQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpbmZvLT5pbnRmX3R5cGUgPSBEUk1fTU9ERV9DT05O RUNUT1JfRGlzcGxheVBvcnQ7Ci0KLQlpbmZvLT5udW1fb2ZfaF90aWxlcyA9IDE7Ci0JaW5mby0+ aF90aWxlX2luc3RhbmNlWzBdID0gMDsKLQlpbmZvLT5pc19jb25uZWN0ZWQgPSBkaXNwbGF5LT5p c19jb25uZWN0ZWQ7Ci0JaW5mby0+Y2FwYWJpbGl0aWVzID0gTVNNX0RJU1BMQVlfQ0FQX1ZJRF9N T0RFIHwgTVNNX0RJU1BMQVlfQ0FQX0VESUQgfAotCQlNU01fRElTUExBWV9DQVBfSE9UX1BMVUc7 Ci0KLQlyZXR1cm4gMDsKLX0KLQotZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBkcF9jb25uZWN0 b3JfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uLAotCQlib29sIGZvcmNlLAotCQl2 b2lkICpkaXNwbGF5KQotewotCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzID0gY29u bmVjdG9yX3N0YXR1c191bmtub3duOwotCXN0cnVjdCBtc21fZGlzcGxheV9pbmZvIGluZm87Ci0J aW50IHJjOwotCi0JaWYgKCFjb25uIHx8ICFkaXNwbGF5KQotCQlyZXR1cm4gc3RhdHVzOwotCi0J LyogZ2V0IGRpc3BsYXkgZHBfaW5mbyAqLwotCW1lbXNldCgmaW5mbywgMHgwLCBzaXplb2YoaW5m bykpOwotCXJjID0gZHBfY29ubmVjdG9yX2dldF9pbmZvKCZpbmZvLCBkaXNwbGF5KTsKLQlpZiAo cmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IGRpc3BsYXkgaW5mbywgcmM9JWRcbiIsIHJj KTsKLQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwotCX0KLQotCWlmIChp bmZvLmNhcGFiaWxpdGllcyAmIE1TTV9ESVNQTEFZX0NBUF9IT1RfUExVRykKLQkJc3RhdHVzID0g KGluZm8uaXNfY29ubmVjdGVkID8gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQgOgotCQkJCQkg ICAgICBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZCk7Ci0JZWxzZQotCQlzdGF0dXMgPSBj b25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKLQotCWNvbm4tPmRpc3BsYXlfaW5mby53aWR0aF9t bSA9IGluZm8ud2lkdGhfbW07Ci0JY29ubi0+ZGlzcGxheV9pbmZvLmhlaWdodF9tbSA9IGluZm8u aGVpZ2h0X21tOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotdm9pZCBkcF9jb25uZWN0b3Jfc2Vu ZF9ocGRfZXZlbnQodm9pZCAqZGlzcGxheSkKLXsKLQlzdHJ1Y3QgZHBfZGlzcGxheSAqZHA7Ci0K LQlpZiAoIWRpc3BsYXkpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKLQkJcmV0dXJu OwotCX0KLQotCWRwID0gZGlzcGxheTsKLQotCWlmIChkcC0+c2VuZF9ocGRfZXZlbnQpCi0JCWRw LT5zZW5kX2hwZF9ldmVudChkcCk7Ci19Ci0KLWludCBkcF9jb25uZWN0b3JfZ2V0X21vZGVzKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCXZvaWQgKmRpc3BsYXkpCi17Ci0JaW50 IHJjID0gMDsKLQlzdHJ1Y3QgZHBfZGlzcGxheSAqZHA7Ci0Jc3RydWN0IGRwX2Rpc3BsYXlfbW9k ZSAqZHBfbW9kZSA9IE5VTEw7Ci0Jc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm0sIGRybV9tb2Rl OwotCi0JaWYgKCFjb25uZWN0b3IgfHwgIWRpc3BsYXkpCi0JCXJldHVybiAwOwotCi0JZHAgPSBk aXNwbGF5OwotCi0JZHBfbW9kZSA9IGt6YWxsb2Moc2l6ZW9mKCpkcF9tb2RlKSwgIEdGUF9LRVJO RUwpOwotCWlmICghZHBfbW9kZSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBwbHVnZ2FibGUgY2FzZSBh c3N1bWVzIEVESUQgaXMgcmVhZCB3aGVuIEhQRCAqLwotCWlmIChkcC0+aXNfY29ubmVjdGVkKSB7 Ci0JCXJjID0gZHAtPmdldF9tb2RlcyhkcCwgZHBfbW9kZSk7Ci0JCWlmICghcmMpCi0JCQlwcl9l cnIoImZhaWxlZCB0byBnZXQgRFAgc2luayBtb2RlcywgcmM9JWRcbiIsIHJjKTsKLQotCQlpZiAo ZHBfbW9kZS0+dGltaW5nLnBpeGVsX2Nsa19raHopIHsgLyogdmFsaWQgRFAgbW9kZSAqLwotCQkJ bWVtc2V0KCZkcm1fbW9kZSwgMHgwLCBzaXplb2YoZHJtX21vZGUpKTsKLQkJCWNvbnZlcnRfdG9f ZHJtX21vZGUoZHBfbW9kZSwgJmRybV9tb2RlKTsKLQkJCW0gPSBkcm1fbW9kZV9kdXBsaWNhdGUo Y29ubmVjdG9yLT5kZXYsICZkcm1fbW9kZSk7Ci0JCQlpZiAoIW0pIHsKLQkJCQlwcl9lcnIoImZh aWxlZCB0byBhZGQgbW9kZSAldXgldVxuIiwKLQkJCQkgICAgICAgZHJtX21vZGUuaGRpc3BsYXks Ci0JCQkJICAgICAgIGRybV9tb2RlLnZkaXNwbGF5KTsKLQkJCQlrZnJlZShkcF9tb2RlKTsKLQkJ CQlyZXR1cm4gMDsKLQkJCX0KLQkJCW0tPndpZHRoX21tID0gY29ubmVjdG9yLT5kaXNwbGF5X2lu Zm8ud2lkdGhfbW07Ci0JCQltLT5oZWlnaHRfbW0gPSBjb25uZWN0b3ItPmRpc3BsYXlfaW5mby5o ZWlnaHRfbW07Ci0JCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbSk7Ci0JCX0KLQl9 IGVsc2UgewotCQlwcl9lcnIoIk5vIHNpbmsgY29ubmVjdGVkXG4iKTsKLQl9Ci0Ja2ZyZWUoZHBf bW9kZSk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkcF9kcm1fYnJpZGdlX2luaXQodm9pZCAq ZGF0YSwgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQotewotCWludCByYyA9IDA7Ci0Jc3Ry dWN0IGRwX2JyaWRnZSAqYnJpZGdlOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Ci0Jc3RydWN0 IGRwX2Rpc3BsYXkgKmRpc3BsYXkgPSBkYXRhOwotCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnBy aXYgPSBOVUxMOwotCi0JYnJpZGdlID0ga3phbGxvYyhzaXplb2YoKmJyaWRnZSksIEdGUF9LRVJO RUwpOwotCWlmICghYnJpZGdlKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlcnJvcjsKLQl9 Ci0KLQlkZXYgPSBkaXNwbGF5LT5kcm1fZGV2OwotCWJyaWRnZS0+ZGlzcGxheSA9IGRpc3BsYXk7 Ci0JYnJpZGdlLT5iYXNlLmZ1bmNzID0gJmRwX2JyaWRnZV9vcHM7Ci0JYnJpZGdlLT5iYXNlLmVu Y29kZXIgPSBlbmNvZGVyOwotCi0JcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQlyYyA9IGRy bV9icmlkZ2VfYXR0YWNoKGVuY29kZXIsICZicmlkZ2UtPmJhc2UsIE5VTEwpOwotCWlmIChyYykg ewotCQlwcl9lcnIoImZhaWxlZCB0byBhdHRhY2ggYnJpZGdlLCByYz0lZFxuIiwgcmMpOwotCQln b3RvIGVycm9yX2ZyZWVfYnJpZGdlOwotCX0KLQotCXJjID0gZGlzcGxheS0+cmVxdWVzdF9pcnEo ZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigicmVxdWVzdF9pcnEgZmFpbGVkLCByYz0l ZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yX2ZyZWVfYnJpZGdlOwotCX0KLQotCWVuY29kZXItPmJy aWRnZSA9ICZicmlkZ2UtPmJhc2U7Ci0JcHJpdi0+YnJpZGdlc1twcml2LT5udW1fYnJpZGdlcysr XSA9ICZicmlkZ2UtPmJhc2U7Ci0JZGlzcGxheS0+YnJpZGdlID0gYnJpZGdlOwotCi0JcmV0dXJu IDA7Ci1lcnJvcl9mcmVlX2JyaWRnZToKLQlrZnJlZShicmlkZ2UpOwotZXJyb3I6Ci0JcmV0dXJu IHJjOwotfQotCi12b2lkIGRwX2RybV9icmlkZ2VfZGVpbml0KHZvaWQgKmRhdGEpCi17Ci0Jc3Ry dWN0IGRwX2Rpc3BsYXkgKmRpc3BsYXkgPSBkYXRhOwotCXN0cnVjdCBkcF9icmlkZ2UgKmJyaWRn ZSA9IGRpc3BsYXktPmJyaWRnZTsKLQotCWlmIChicmlkZ2UgJiYgYnJpZGdlLT5iYXNlLmVuY29k ZXIpCi0JCWJyaWRnZS0+YmFzZS5lbmNvZGVyLT5icmlkZ2UgPSBOVUxMOwotCi0Ja2ZyZWUoYnJp ZGdlKTsKLX0KLQotZW51bSBkcm1fbW9kZV9zdGF0dXMgZHBfY29ubmVjdG9yX21vZGVfdmFsaWQo c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGUsCi0JCXZvaWQgKmRpc3BsYXkpCi17Ci0Jc3RydWN0IGRwX2Rpc3BsYXkgKmRwX2Rp c3A7Ci0Jc3RydWN0IGRwX2RlYnVnICpkZWJ1ZzsKLQotCWlmICghbW9kZSB8fCAhZGlzcGxheSkg ewotCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIE1PREVfRVJST1I7Ci0J fQotCi0JZHBfZGlzcCA9IGRpc3BsYXk7Ci0JZGVidWcgPSBkcF9kaXNwLT5nZXRfZGVidWcoZHBf ZGlzcCk7Ci0KLQlpZiAoZGVidWctPmRlYnVnX2VuKSB7Ci0JCWlmIChtb2RlLT5oZGlzcGxheSA9 PSBkZWJ1Zy0+aGRpc3BsYXkgJiYKLQkJCQltb2RlLT52ZGlzcGxheSA9PSBkZWJ1Zy0+dmRpc3Bs YXkgJiYKLQkJCQltb2RlLT52cmVmcmVzaCA9PSBkZWJ1Zy0+dnJlZnJlc2ggJiYKLQkJCQltb2Rl LT5jbG9jayA8PSBkcF9kaXNwLT5tYXhfcGNsa19raHopCi0JCQlyZXR1cm4gTU9ERV9PSzsKLQkJ ZWxzZQotCQkJcmV0dXJuIE1PREVfRVJST1I7Ci0JfSBlbHNlIHsKLQkJaWYgKG1vZGUtPnZyZWZy ZXNoID09IDApIHsKLQkJCWludCB2cmVmcmVzaCA9IChtb2RlLT5jbG9jayAqIDEwMDApIC8KLQkJ CQkobW9kZS0+dnRvdGFsICogbW9kZS0+aHRvdGFsKTsKLQkJCWlmICh2cmVmcmVzaCA+IDYwKQot CQkJCXJldHVybiBNT0RFX0JBRDsKLQkJfQotCi0JCWlmIChtb2RlLT5jbG9jayA+IGRwX2Rpc3At Pm1heF9wY2xrX2toeikKLQkJCXJldHVybiBNT0RFX0JBRDsKLQkJZWxzZQotCQkJcmV0dXJuIE1P REVfT0s7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kcm0u aCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZHJtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDA4ZDFmMmQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9k cF9kcm0uaAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg KGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2lmbmRlZiBfRFBfRFJNX0hfCi0jZGVmaW5lIF9EUF9E Uk1fSF8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8ZHJtL2RybVAuaD4K LSNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KLSNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVy Lmg+Ci0KLSNpbmNsdWRlICJtc21fZHJ2LmgiCi0jaW5jbHVkZSAiZHBfZGlzcGxheS5oIgotCi1z dHJ1Y3QgZHBfYnJpZGdlIHsKLQlzdHJ1Y3QgZHJtX2JyaWRnZSBiYXNlOwotCXUzMiBpZDsKLQot CXN0cnVjdCBkcF9kaXNwbGF5ICpkaXNwbGF5OwotCXN0cnVjdCBkcF9kaXNwbGF5X21vZGUgZHBf bW9kZTsKLX07Ci0KLS8qKgotICogZHBfY29ubmVjdG9yX3Bvc3RfaW5pdCAtIGNhbGxiYWNrIHRv IHBlcmZvcm0gYWRkaXRpb25hbCBpbml0aWFsaXphdGlvbiBzdGVwcwotICogQGNvbm5lY3Rvcjog UG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotICogQGluZm86IFBvaW50ZXIgdG8g ZHB1IGNvbm5lY3RvciBpbmZvIHN0cnVjdHVyZQotICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJp dmF0ZSBkaXNwbGF5IGhhbmRsZQotICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0gKi8KLWlu dCBkcF9jb25uZWN0b3JfcG9zdF9pbml0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Is Ci0JCXZvaWQgKmluZm8sCi0JCXZvaWQgKmRpc3BsYXkpOwotCi0vKioKLSAqIGRwX2Nvbm5lY3Rv cl9kZXRlY3QgLSBjYWxsYmFjayB0byBkZXRlcm1pbmUgaWYgY29ubmVjdG9yIGlzIGNvbm5lY3Rl ZAotICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotICog QGZvcmNlOiBGb3JjZSBkZXRlY3Qgc2V0dGluZyBmcm9tIGRybSBmcmFtZXdvcmsKLSAqIEBkaXNw bGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlzcGxheSBoYW5kbGUKLSAqIFJldHVybnM6IENvbm5l Y3RvciAnaXMgY29ubmVjdGVkJyBzdGF0dXMKLSAqLwotZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1 cyBkcF9jb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uLAotCQlib29s IGZvcmNlLAotCQl2b2lkICpkaXNwbGF5KTsKLQotLyoqCi0gKiBkcF9jb25uZWN0b3JfZ2V0X21v ZGVzIC0gY2FsbGJhY2sgdG8gYWRkIGRybSBtb2RlcyB2aWEgZHJtX21vZGVfcHJvYmVkX2FkZCgp Ci0gKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCi0gKiBA ZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRlIGRpc3BsYXkgaGFuZGxlCi0gKiBSZXR1cm5zOiBO dW1iZXIgb2YgbW9kZXMgYWRkZWQKLSAqLwotaW50IGRwX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJdm9pZCAqZGlzcGxheSk7Ci0KLS8qKgot ICogZHBfY29ubmVjdG9yX21vZGVfdmFsaWQgLSBjYWxsYmFjayB0byBkZXRlcm1pbmUgaWYgc3Bl Y2lmaWVkIG1vZGUgaXMgdmFsaWQKLSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5l Y3RvciBzdHJ1Y3R1cmUKLSAqIEBtb2RlOiBQb2ludGVyIHRvIGRybSBtb2RlIHN0cnVjdHVyZQot ICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IGhhbmRsZQotICogUmV0dXJu czogVmFsaWRpdHkgc3RhdHVzIGZvciBzcGVjaWZpZWQgbW9kZQotICovCi1lbnVtIGRybV9tb2Rl X3N0YXR1cyBkcF9jb25uZWN0b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yLAotCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKLQkJdm9pZCAqZGlzcGxh eSk7Ci0KLS8qKgotICogZHBfY29ubmVjdG9yX2dldF9tb2RlX2luZm8gLSByZXRyaWV2ZSBpbmZv cm1hdGlvbiBvZiB0aGUgbW9kZSBzZWxlY3RlZAotICogQGRybV9tb2RlOiBEaXNwbGF5IG1vZGUg c2V0IGZvciB0aGUgZGlzcGxheQotICogQG1vZGVfaW5mbzogT3V0IHBhcmFtZXRlci4gSW5mb3Jt YXRpb24gb2YgdGhlIG1vZGUKLSAqIEBtYXhfbWl4ZXJfd2lkdGg6IG1heCB3aWR0aCBzdXBwb3J0 ZWQgYnkgSFcgbGF5ZXIgbWl4ZXIKLSAqIFJldHVybnM6IHplcm8gb24gc3VjY2VzcwotICovCi1p bnQgZHBfY29ubmVjdG9yX2dldF9tb2RlX2luZm8oY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKmRybV9tb2RlLAotCQlzdHJ1Y3QgbXNtX21vZGVfaW5mbyAqbW9kZV9pbmZvLAotCQl1MzIg bWF4X21peGVyX3dpZHRoKTsKLQotaW50IGRwX2Nvbm5lY3Rvcl9nZXRfaW5mbyhzdHJ1Y3QgbXNt X2Rpc3BsYXlfaW5mbyAqaW5mbywgdm9pZCAqZGlzcGxheSk7Ci0KLXZvaWQgZHBfY29ubmVjdG9y X3NlbmRfaHBkX2V2ZW50KHZvaWQgKmRpc3BsYXkpOwotCi1pbnQgZHBfZHJtX2JyaWRnZV9pbml0 KHZvaWQgKmRpc3BsYXksCi0Jc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKLQotdm9pZCBk cF9kcm1fYnJpZGdlX2RlaW5pdCh2b2lkICpkaXNwbGF5KTsKLSNlbmRpZiAvKiBfRFBfRFJNX0hf ICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfaGRjcDJwMi5jIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9oZGNwMnAyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDIzNjY0NjkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9k cF9oZGNwMnAyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MjcgKzAsMCBAQAotLyogQ29weXJpZ2h0 IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KQkiW2RwLWhkY3AycDJdICVz OiAiIGZtdCwgX19mdW5jX18KLQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8 bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc3Rh dC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5o PgotI2luY2x1ZGUgPGxpbnV4L2hkY3BfcXNlZWNvbS5oPgotI2luY2x1ZGUgPGRybS9kcm1fZHBf aGVscGVyLmg+Ci0KLSNpbmNsdWRlICJkcHVfaGRjcC5oIgotCi0jZGVmaW5lIERQX0lOVFJfU1RB VFVTMgkJCQkoMHgwMDAwMDAyNCkKLSNkZWZpbmUgRFBfSU5UUl9TVEFUVVMzCQkJCSgweDAwMDAw MDI4KQotI2RlZmluZSBkcF9yZWFkKG9mZnNldCkgcmVhZGxfcmVsYXhlZCgob2Zmc2V0KSkKLSNk ZWZpbmUgZHBfd3JpdGUob2Zmc2V0LCBkYXRhKSB3cml0ZWxfcmVsYXhlZCgoZGF0YSksIChvZmZz ZXQpKQotI2RlZmluZSBEUF9IRENQX1JYQ0FQU19MRU5HVEggMwotCi1lbnVtIGRwX2hkY3AycDJf c2lua19zdGF0dXMgewotCVNJTktfRElTQ09OTkVDVEVELAotCVNJTktfQ09OTkVDVEVECi19Owot Ci1lbnVtIGRwX2F1dGhfc3RhdHVzIHsKLQlEUF9IRENQX0FVVEhfU1RBVFVTX0ZBSUxVUkUsCi0J RFBfSERDUF9BVVRIX1NUQVRVU19TVUNDRVNTCi19OwotCi1zdHJ1Y3QgZHBfaGRjcDJwMl9jdHJs IHsKLQlhdG9taWNfdCBhdXRoX3N0YXRlOwotCWVudW0gZHBfaGRjcDJwMl9zaW5rX3N0YXR1cyBz aW5rX3N0YXR1czsgLyogSXMgc2luayBjb25uZWN0ZWQgKi8KLQlzdHJ1Y3QgZHBfaGRjcDJwMl9p bnRlcnJ1cHRzICppbnRyOwotCXN0cnVjdCBkcHVfaGRjcF9pbml0X2RhdGEgaW5pdF9kYXRhOwot CXN0cnVjdCBtdXRleCBtdXRleDsgLyogbXV0ZXggdG8gcHJvdGVjdCBhY2Nlc3MgdG8gY3RybCAq LwotCXN0cnVjdCBtdXRleCBtc2dfbG9jazsgLyogbXV0ZXggdG8gcHJvdGVjdCBhY2Nlc3MgdG8g bXNnIGJ1ZmZlciAqLwotCXN0cnVjdCBtdXRleCB3YWtldXBfbXV0ZXg7IC8qIG11dGV4IHRvIHBy b3RlY3QgYWNjZXNzIHRvIHdha2V1cCBjYWxsKi8KLQlzdHJ1Y3QgZHB1X2hkY3Bfb3BzICpvcHM7 Ci0Jdm9pZCAqbGliX2N0eDsgLyogSGFuZGxlIHRvIEhEQ1AgMi4yIFRydXN0em9uZSBsaWJyYXJ5 ICovCi0Jc3RydWN0IGhkY3BfdHhtdHJfb3BzICpsaWI7IC8qIE9wcyBmb3IgZHJpdmVyIHRvIGNh bGwgaW50byBUWiAqLwotCWVudW0gaGRjcF93YWtldXBfY21kIHdha2V1cF9jbWQ7Ci0JZW51bSBk cF9hdXRoX3N0YXR1cyBhdXRoX3N0YXR1czsKLQotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFk OwotCXN0cnVjdCBrdGhyZWFkX3dvcmtlciB3b3JrZXI7Ci0Jc3RydWN0IGt0aHJlYWRfd29yayBz dGF0dXM7Ci0Jc3RydWN0IGt0aHJlYWRfd29yayBhdXRoOwotCXN0cnVjdCBrdGhyZWFkX3dvcmsg c2VuZF9tc2c7Ci0Jc3RydWN0IGt0aHJlYWRfd29yayByZWN2X21zZzsKLQlzdHJ1Y3Qga3RocmVh ZF93b3JrIGxpbms7Ci0JY2hhciAqbXNnX2J1ZjsKLQl1aW50MzJfdCBzZW5kX21zZ19sZW47IC8q IGxlbmd0aCBvZiBhbGwgcGFyYW1ldGVycyBpbiBtc2cgKi8KLQl1aW50MzJfdCB0aW1lb3V0Owot CXVpbnQzMl90IG51bV9tZXNzYWdlczsKLQlzdHJ1Y3QgaGRjcF9tc2dfcGFydCBtc2dfcGFydFtI RENQX01BWF9NRVNTQUdFX1BBUlRTXTsKLQl1OCBzaW5rX3J4X3N0YXR1czsKLQl1OCByeF9zdGF0 dXM7Ci0JY2hhciBhYm9ydF9tYXNrOwotCi0JYm9vbCBjcF9pcnFfZG9uZTsKLQlib29sIHBvbGxp bmc7Ci19OwotCi1zdHJ1Y3QgZHBfaGRjcDJwMl9pbnRfc2V0IHsKLQl1MzIgaW50ZXJydXB0Owot CWNoYXIgKm5hbWU7Ci0Jdm9pZCAoKmZ1bmMpKHN0cnVjdCBkcF9oZGNwMnAyX2N0cmwgKmN0cmwp OwotfTsKLQotc3RydWN0IGRwX2hkY3AycDJfaW50ZXJydXB0cyB7Ci0JdTMyIHJlZzsKLQlzdHJ1 Y3QgZHBfaGRjcDJwMl9pbnRfc2V0ICppbnRfc2V0OwotfTsKLQotc3RhdGljIGlubGluZSBib29s IGRwX2hkY3AycDJfaXNfdmFsaWRfc3RhdGUoc3RydWN0IGRwX2hkY3AycDJfY3RybCAqY3RybCkK LXsKLQlpZiAoY3RybC0+d2FrZXVwX2NtZCA9PSBIRENQX1dLVVBfQ01EX0FVVEhFTlRJQ0FURSkK LQkJcmV0dXJuIHRydWU7Ci0KLQlpZiAoYXRvbWljX3JlYWQoJmN0cmwtPmF1dGhfc3RhdGUpICE9 IEhEQ1BfU1RBVEVfSU5BQ1RJVkUpCi0JCXJldHVybiB0cnVlOwotCi0JcmV0dXJuIGZhbHNlOwot fQotCi1zdGF0aWMgaW50IGRwX2hkY3AycDJfY29weV9idWYoc3RydWN0IGRwX2hkY3AycDJfY3Ry bCAqY3RybCwKLQlzdHJ1Y3QgaGRjcF93YWtldXBfZGF0YSAqZGF0YSkKLXsKLQlpbnQgaSA9IDA7 Ci0KLQlpZiAoIWRhdGEgfHwgIWRhdGEtPm1lc3NhZ2VfZGF0YSkKLQkJcmV0dXJuIDA7Ci0KLQlt dXRleF9sb2NrKCZjdHJsLT5tc2dfbG9jayk7Ci0KLQljdHJsLT50aW1lb3V0ID0gZGF0YS0+dGlt ZW91dDsKLQljdHJsLT5udW1fbWVzc2FnZXMgPSBkYXRhLT5tZXNzYWdlX2RhdGEtPm51bV9tZXNz YWdlczsKLQljdHJsLT5zZW5kX21zZ19sZW4gPSAwOyAvKiBUb3RhbCBsZW4gb2YgYWxsIG1lc3Nh Z2VzICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgY3RybC0+bnVtX21lc3NhZ2VzIDsgaSsrKQotCQlj dHJsLT5zZW5kX21zZ19sZW4gKz0gZGF0YS0+bWVzc2FnZV9kYXRhLT5tZXNzYWdlc1tpXS5sZW5n dGg7Ci0KLQltZW1jcHkoY3RybC0+bXNnX3BhcnQsIGRhdGEtPm1lc3NhZ2VfZGF0YS0+bWVzc2Fn ZXMsCi0JCXNpemVvZihkYXRhLT5tZXNzYWdlX2RhdGEtPm1lc3NhZ2VzKSk7Ci0KLQljdHJsLT5y eF9zdGF0dXMgPSBkYXRhLT5tZXNzYWdlX2RhdGEtPnJ4X3N0YXR1czsKLQljdHJsLT5hYm9ydF9t YXNrID0gZGF0YS0+YWJvcnRfbWFzazsKLQotCWlmICghZGF0YS0+c2VuZF9tc2dfbGVuKSB7Ci0J CW11dGV4X3VubG9jaygmY3RybC0+bXNnX2xvY2spOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlremZy ZWUoY3RybC0+bXNnX2J1Zik7Ci0KLQljdHJsLT5tc2dfYnVmID0ga3phbGxvYyhjdHJsLT5zZW5k X21zZ19sZW4sIEdGUF9LRVJORUwpOwotCi0JaWYgKCFjdHJsLT5tc2dfYnVmKSB7Ci0JCW11dGV4 X3VubG9jaygmY3RybC0+bXNnX2xvY2spOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKiBp Z25vcmUgZmlyc3QgYnl0ZSBhcyBpdCBjb250YWlucyBtZXNzYWdlIGlkICovCi0JbWVtY3B5KGN0 cmwtPm1zZ19idWYsIGRhdGEtPnNlbmRfbXNnX2J1ZiArIDEsIGN0cmwtPnNlbmRfbXNnX2xlbik7 Ci0KLQltdXRleF91bmxvY2soJmN0cmwtPm1zZ19sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi1z dGF0aWMgaW50IGRwX2hkY3AycDJfd2FrZXVwKHN0cnVjdCBoZGNwX3dha2V1cF9kYXRhICpkYXRh KQotewotCXN0cnVjdCBkcF9oZGNwMnAyX2N0cmwgKmN0cmw7Ci0JdTMyIGNvbnN0IGRlZmF1bHRf dGltZW91dF91cyA9IDUwMDsKLQotCWlmICghZGF0YSkgewotCQlwcl9lcnIoImludmFsaWQgaW5w dXRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQljdHJsID0gZGF0YS0+Y29udGV4dDsK LQlpZiAoIWN0cmwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGN0cmxcbiIpOwotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZjdHJsLT53YWtldXBfbXV0ZXgpOwotCi0JY3RybC0+ d2FrZXVwX2NtZCA9IGRhdGEtPmNtZDsKLQotCWlmIChkYXRhLT50aW1lb3V0KQotCQljdHJsLT50 aW1lb3V0ID0gKGRhdGEtPnRpbWVvdXQpICogMjsKLQllbHNlCi0JCWN0cmwtPnRpbWVvdXQgPSBk ZWZhdWx0X3RpbWVvdXRfdXM7Ci0KLQlpZiAoIWRwX2hkY3AycDJfaXNfdmFsaWRfc3RhdGUoY3Ry bCkpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHN0YXRlXG4iKTsKLQkJZ290byBleGl0OwotCX0KLQot CWlmIChkcF9oZGNwMnAyX2NvcHlfYnVmKGN0cmwsIGRhdGEpKQotCQlnb3RvIGV4aXQ7Ci0KLQlp ZiAoY3RybC0+d2FrZXVwX2NtZCA9PSBIRENQX1dLVVBfQ01EX1NUQVRVU19TVUNDRVNTKQotCQlj dHJsLT5hdXRoX3N0YXR1cyA9IERQX0hEQ1BfQVVUSF9TVEFUVVNfU1VDQ0VTUzsKLQllbHNlIGlm IChjdHJsLT53YWtldXBfY21kID09IEhEQ1BfV0tVUF9DTURfU1RBVFVTX0ZBSUxFRCkKLQkJY3Ry bC0+YXV0aF9zdGF0dXMgPSBEUF9IRENQX0FVVEhfU1RBVFVTX0ZBSUxVUkU7Ci0KLQlzd2l0Y2gg KGN0cmwtPndha2V1cF9jbWQpIHsKLQljYXNlIEhEQ1BfV0tVUF9DTURfU0VORF9NRVNTQUdFOgot CQlrdGhyZWFkX3F1ZXVlX3dvcmsoJmN0cmwtPndvcmtlciwgJmN0cmwtPnNlbmRfbXNnKTsKLQkJ YnJlYWs7Ci0JY2FzZSBIRENQX1dLVVBfQ01EX1JFQ1ZfTUVTU0FHRToKLQkJa3RocmVhZF9xdWV1 ZV93b3JrKCZjdHJsLT53b3JrZXIsICZjdHJsLT5yZWN2X21zZyk7Ci0JCWJyZWFrOwotCWNhc2Ug SERDUF9XS1VQX0NNRF9TVEFUVVNfU1VDQ0VTUzoKLQljYXNlIEhEQ1BfV0tVUF9DTURfU1RBVFVT X0ZBSUxFRDoKLQkJa3RocmVhZF9xdWV1ZV93b3JrKCZjdHJsLT53b3JrZXIsICZjdHJsLT5zdGF0 dXMpOwotCQlicmVhazsKLQljYXNlIEhEQ1BfV0tVUF9DTURfTElOS19QT0xMOgotCQlpZiAoY3Ry bC0+Y3BfaXJxX2RvbmUpCi0JCQlrdGhyZWFkX3F1ZXVlX3dvcmsoJmN0cmwtPndvcmtlciwgJmN0 cmwtPnJlY3ZfbXNnKTsKLQkJZWxzZQotCQkJY3RybC0+cG9sbGluZyA9IHRydWU7Ci0JCWJyZWFr OwotCWNhc2UgSERDUF9XS1VQX0NNRF9BVVRIRU5USUNBVEU6Ci0JCWt0aHJlYWRfcXVldWVfd29y aygmY3RybC0+d29ya2VyLCAmY3RybC0+YXV0aCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXBy X2VycigiaW52YWxpZCB3YWtldXAgY29tbWFuZCAlZFxuIiwgY3RybC0+d2FrZXVwX2NtZCk7Ci0J fQotZXhpdDoKLQltdXRleF91bmxvY2soJmN0cmwtPndha2V1cF9tdXRleCk7Ci0KLQlyZXR1cm4g MDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRwX2hkY3AycDJfd2FrZXVwX2xpYihzdHJ1Y3Qg ZHBfaGRjcDJwMl9jdHJsICpjdHJsLAotCXN0cnVjdCBoZGNwX2xpYl93YWtldXBfZGF0YSAqZGF0 YSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKGN0cmwgJiYgY3RybC0+bGliICYmIGN0cmwtPmxp Yi0+d2FrZXVwICYmCi0JCWRhdGEgJiYgKGRhdGEtPmNtZCAhPSBIRENQX0xJQl9XS1VQX0NNRF9J TlZBTElEKSkgewotCQlyYyA9IGN0cmwtPmxpYi0+d2FrZXVwKGRhdGEpOwotCQlpZiAocmMpCi0J CQlwcl9lcnIoImVycm9yIHNlbmRpbmcgJXMgdG8gbGliXG4iLAotCQkJCWhkY3BfbGliX2NtZF90 b19zdHIoZGF0YS0+Y21kKSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkcF9oZGNwMnAyX3Jlc2V0 KHN0cnVjdCBkcF9oZGNwMnAyX2N0cmwgKmN0cmwpCi17Ci0JaWYgKCFjdHJsKSB7Ci0JCXByX2Vy cigiaW52YWxpZCBpbnB1dFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQljdHJsLT5zaW5rX3N0YXR1 cyA9IFNJTktfRElTQ09OTkVDVEVEOwotCWF0b21pY19zZXQoJmN0cmwtPmF1dGhfc3RhdGUsIEhE Q1BfU1RBVEVfSU5BQ1RJVkUpOwotfQotCi1zdGF0aWMgdm9pZCBkcF9oZGNwMnAyX3NldF9pbnRl cnJ1cHRzKHN0cnVjdCBkcF9oZGNwMnAyX2N0cmwgKmN0cmwsIGJvb2wgZW5hYmxlKQotewotCXZv aWQgX19pb21lbSAqYmFzZSA9IGN0cmwtPmluaXRfZGF0YS5jb3JlX2lvLT5iYXNlOwotCXN0cnVj dCBkcF9oZGNwMnAyX2ludGVycnVwdHMgKmludHIgPSBjdHJsLT5pbnRyOwotCi0Jd2hpbGUgKGlu dHIgJiYgaW50ci0+cmVnKSB7Ci0JCXN0cnVjdCBkcF9oZGNwMnAyX2ludF9zZXQgKmludF9zZXQg PSBpbnRyLT5pbnRfc2V0OwotCQl1MzIgaW50ZXJydXB0cyA9IDA7Ci0KLQkJd2hpbGUgKGludF9z ZXQgJiYgaW50X3NldC0+aW50ZXJydXB0KSB7Ci0JCQlpbnRlcnJ1cHRzIHw9IGludF9zZXQtPmlu dGVycnVwdDsKLQkJCWludF9zZXQrKzsKLQkJfQotCi0JCWlmIChlbmFibGUpCi0JCQlkcF93cml0 ZShiYXNlICsgaW50ci0+cmVnLAotCQkJCWRwX3JlYWQoYmFzZSArIGludHItPnJlZykgfCBpbnRl cnJ1cHRzKTsKLQkJZWxzZQotCQkJZHBfd3JpdGUoYmFzZSArIGludHItPnJlZywKLQkJCQlkcF9y ZWFkKGJhc2UgKyBpbnRyLT5yZWcpICYgfmludGVycnVwdHMpOwotCQlpbnRyKys7Ci0JfQotfQot Ci1zdGF0aWMgdm9pZCBkcF9oZGNwMnAyX29mZih2b2lkICppbnB1dCkKLXsKLQlzdHJ1Y3QgZHBf aGRjcDJwMl9jdHJsICpjdHJsID0gKHN0cnVjdCBkcF9oZGNwMnAyX2N0cmwgKilpbnB1dDsKLQlz dHJ1Y3QgaGRjcF93YWtldXBfZGF0YSBjZGF0YSA9IHtIRENQX1dLVVBfQ01EX0FVVEhFTlRJQ0FU RX07Ci0KLQlpZiAoIWN0cmwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKLQkJcmV0 dXJuOwotCX0KLQotCWlmIChhdG9taWNfcmVhZCgmY3RybC0+YXV0aF9zdGF0ZSkgPT0gSERDUF9T VEFURV9JTkFDVElWRSkgewotCQlwcl9lcnIoImhkY3AgaXMgb2ZmXG4iKTsKLQkJcmV0dXJuOwot CX0KLQotCWRwX2hkY3AycDJfc2V0X2ludGVycnVwdHMoY3RybCwgZmFsc2UpOwotCi0JZHBfaGRj cDJwMl9yZXNldChjdHJsKTsKLQotCWt0aHJlYWRfZmx1c2hfd29ya2VyKCZjdHJsLT53b3JrZXIp OwotCi0JY2RhdGEuY29udGV4dCA9IGlucHV0OwotCWRwX2hkY3AycDJfd2FrZXVwKCZjZGF0YSk7 Ci19Ci0KLXN0YXRpYyBpbnQgZHBfaGRjcDJwMl9hdXRoZW50aWNhdGUodm9pZCAqaW5wdXQpCi17 Ci0Jc3RydWN0IGRwX2hkY3AycDJfY3RybCAqY3RybCA9IGlucHV0OwotCXN0cnVjdCBoZGNwX3dh a2V1cF9kYXRhIGNkYXRhID0ge0hEQ1BfV0tVUF9DTURfQVVUSEVOVElDQVRFfTsKLQlpbnQgcmMg PSAwOwotCi0Ja3RocmVhZF9mbHVzaF93b3JrZXIoJmN0cmwtPndvcmtlcik7Ci0KLQlkcF9oZGNw MnAyX3NldF9pbnRlcnJ1cHRzKGN0cmwsIHRydWUpOwotCi0JY3RybC0+c2lua19zdGF0dXMgPSBT SU5LX0NPTk5FQ1RFRDsKLQlhdG9taWNfc2V0KCZjdHJsLT5hdXRoX3N0YXRlLCBIRENQX1NUQVRF X0FVVEhFTlRJQ0FUSU5HKTsKLQotCWNkYXRhLmNvbnRleHQgPSBpbnB1dDsKLQlkcF9oZGNwMnAy X3dha2V1cCgmY2RhdGEpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRwX2hkY3Ay cDJfcmVhdXRoZW50aWNhdGUodm9pZCAqaW5wdXQpCi17Ci0Jc3RydWN0IGRwX2hkY3AycDJfY3Ry bCAqY3RybCA9IChzdHJ1Y3QgZHBfaGRjcDJwMl9jdHJsICopaW5wdXQ7Ci0KLQlpZiAoIWN0cmwp IHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JZHBfaGRjcDJwMl9yZXNldCgoc3RydWN0IGRwX2hkY3AycDJfY3RybCAqKWlucHV0KTsKLQot CXJldHVybiAgZHBfaGRjcDJwMl9hdXRoZW50aWNhdGUoaW5wdXQpOwotfQotCi1zdGF0aWMgdm9p ZCBkcF9oZGNwMnAyX21pbl9sZXZlbF9jaGFuZ2Uodm9pZCAqY2xpZW50X2N0eCwKLQkJaW50IG1p bl9lbmNfbGV2ZWwpCi17Ci0Jc3RydWN0IGRwX2hkY3AycDJfY3RybCAqY3RybCA9IChzdHJ1Y3Qg ZHBfaGRjcDJwMl9jdHJsICopY2xpZW50X2N0eDsKLQlzdHJ1Y3QgaGRjcF9saWJfd2FrZXVwX2Rh dGEgY2RhdGEgPSB7Ci0JCUhEQ1BfTElCX1dLVVBfQ01EX1FVRVJZX1NUUkVBTV9UWVBFfTsKLQli b29sIGVuY19ub3RpZnkgPSB0cnVlOwotCWludCBlbmNfbHZsOwotCi0JaWYgKCFjdHJsKSB7Ci0J CXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlzd2l0Y2ggKG1p bl9lbmNfbGV2ZWwpIHsKLQljYXNlIDA6Ci0JCWVuY19sdmwgPSBIRENQX1NUQVRFX0FVVEhfRU5D X05PTkU7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJZW5jX2x2bCA9IEhEQ1BfU1RBVEVfQVVUSF9F TkNfMVg7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJZW5jX2x2bCA9IEhEQ1BfU1RBVEVfQVVUSF9F TkNfMlAyOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQllbmNfbm90aWZ5ID0gZmFsc2U7Ci0JfQot Ci0JcHJfZGVidWcoImVuYyBsZXZlbCBjaGFuZ2VkICVkXG4iLCBtaW5fZW5jX2xldmVsKTsKLQot CWNkYXRhLmNvbnRleHQgPSBjdHJsLT5saWJfY3R4OwotCWRwX2hkY3AycDJfd2FrZXVwX2xpYihj dHJsLCAmY2RhdGEpOwotCi0JaWYgKGVuY19ub3RpZnkgJiYgY3RybC0+aW5pdF9kYXRhLm5vdGlm eV9zdGF0dXMpCi0JCWN0cmwtPmluaXRfZGF0YS5ub3RpZnlfc3RhdHVzKGN0cmwtPmluaXRfZGF0 YS5jYl9kYXRhLCBlbmNfbHZsKTsKLX0KLQotc3RhdGljIHZvaWQgZHBfaGRjcDJwMl9hdXRoX2Zh aWxlZChzdHJ1Y3QgZHBfaGRjcDJwMl9jdHJsICpjdHJsKQotewotCWlmICghY3RybCkgewotCQlw cl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZHBfaGRjcDJwMl9z ZXRfaW50ZXJydXB0cyhjdHJsLCBmYWxzZSk7Ci0KLQlhdG9taWNfc2V0KCZjdHJsLT5hdXRoX3N0 YXRlLCBIRENQX1NUQVRFX0FVVEhfRkFJTCk7Ci0KLQkvKiBub3RpZnkgRFAgYWJvdXQgSERDUCBm YWlsdXJlICovCi0JY3RybC0+aW5pdF9kYXRhLm5vdGlmeV9zdGF0dXMoY3RybC0+aW5pdF9kYXRh LmNiX2RhdGEsCi0JCUhEQ1BfU1RBVEVfQVVUSF9GQUlMKTsKLX0KLQotc3RhdGljIGludCBkcF9o ZGNwMnAyX2F1eF9yZWFkX21lc3NhZ2Uoc3RydWN0IGRwX2hkY3AycDJfY3RybCAqY3RybCwKLQl1 OCAqYnVmLCBpbnQgc2l6ZSwgaW50IG9mZnNldCwgdTMyIHRpbWVvdXQpCi17Ci0JaW50IGNvbnN0 IG1heF9zaXplID0gMTY7Ci0JaW50IHJjID0gMCwgcmVhZF9zaXplID0gMCwgYnl0ZXNfcmVhZCA9 IDA7Ci0KLQlpZiAoYXRvbWljX3JlYWQoJmN0cmwtPmF1dGhfc3RhdGUpID09IEhEQ1BfU1RBVEVf SU5BQ1RJVkUpIHsKLQkJcHJfZXJyKCJoZGNwIGlzIG9mZlxuIik7Ci0JCXJldHVybiAtRUlOVkFM OwotCX0KLQotCWRvIHsKLQkJcmVhZF9zaXplID0gbWluKHNpemUsIG1heF9zaXplKTsKLQotCQli eXRlc19yZWFkID0gZHJtX2RwX2RwY2RfcmVhZChjdHJsLT5pbml0X2RhdGEuZHJtX2F1eCwKLQkJ CQlvZmZzZXQsIGJ1ZiwgcmVhZF9zaXplKTsKLQkJaWYgKGJ5dGVzX3JlYWQgIT0gcmVhZF9zaXpl KSB7Ci0JCQlwcl9lcnIoImZhaWw6IG9mZnNldCgweCV4KSwgc2l6ZSgweCV4KSwgcmMoMHgleClc biIsCi0JCQkJCW9mZnNldCwgcmVhZF9zaXplLCBieXRlc19yZWFkKTsKLQkJCWJyZWFrOwotCQl9 Ci0KLQkJYnVmICs9IHJlYWRfc2l6ZTsKLQkJb2Zmc2V0ICs9IHJlYWRfc2l6ZTsKLQkJc2l6ZSAt PSByZWFkX3NpemU7Ci0JfSB3aGlsZSAoc2l6ZSA+IDApOwotCi0JcmV0dXJuIHJjOwotfQotCi1z dGF0aWMgaW50IGRwX2hkY3AycDJfYXV4X3dyaXRlX21lc3NhZ2Uoc3RydWN0IGRwX2hkY3AycDJf Y3RybCAqY3RybCwKLQl1OCAqYnVmLCBpbnQgc2l6ZSwgdWludCBvZmZzZXQsIHVpbnQgdGltZW91 dCkKLXsKLQlpbnQgY29uc3QgbWF4X3NpemUgPSAxNjsKLQlpbnQgcmMgPSAwLCB3cml0ZV9zaXpl ID0gMCwgYnl0ZXNfd3JpdHRlbiA9IDA7Ci0KLQlkbyB7Ci0JCXdyaXRlX3NpemUgPSBtaW4oc2l6 ZSwgbWF4X3NpemUpOwotCi0JCWJ5dGVzX3dyaXR0ZW4gPSBkcm1fZHBfZHBjZF93cml0ZShjdHJs LT5pbml0X2RhdGEuZHJtX2F1eCwKLQkJCQlvZmZzZXQsIGJ1Ziwgd3JpdGVfc2l6ZSk7Ci0JCWlm IChieXRlc193cml0dGVuICE9IHdyaXRlX3NpemUpIHsKLQkJCXByX2VycigiZmFpbDogb2Zmc2V0 KDB4JXgpLCBzaXplKDB4JXgpLCByYygweCV4KVxuIiwKLQkJCQkJb2Zmc2V0LCB3cml0ZV9zaXpl LCBieXRlc193cml0dGVuKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJYnVmICs9IHdyaXRlX3NpemU7 Ci0JCW9mZnNldCArPSB3cml0ZV9zaXplOwotCQlzaXplIC09IHdyaXRlX3NpemU7Ci0JfSB3aGls ZSAoc2l6ZSA+IDApOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgYm9vbCBkcF9oZGNwMnAy X2ZlYXR1cmVfc3VwcG9ydGVkKHZvaWQgKmlucHV0KQotewotCXN0cnVjdCBkcF9oZGNwMnAyX2N0 cmwgKmN0cmwgPSBpbnB1dDsKLQlzdHJ1Y3QgaGRjcF90eG10cl9vcHMgKmxpYiA9IE5VTEw7Ci0J Ym9vbCBzdXBwb3J0ZWQgPSBmYWxzZTsKLQotCWlmICghY3RybCkgewotCQlwcl9lcnIoImludmFs aWQgaW5wdXRcbiIpOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlsaWIgPSBjdHJsLT5saWI7Ci0JaWYg KCFsaWIpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGxpYiBvcHMgZGF0YVxuIik7Ci0JCWdvdG8gZW5k OwotCX0KLQotCWlmIChsaWItPmZlYXR1cmVfc3VwcG9ydGVkKQotCQlzdXBwb3J0ZWQgPSBsaWIt PmZlYXR1cmVfc3VwcG9ydGVkKAotCQkJY3RybC0+bGliX2N0eCk7Ci1lbmQ6Ci0JcmV0dXJuIHN1 cHBvcnRlZDsKLX0KLQotc3RhdGljIHZvaWQgZHBfaGRjcDJwMl9zZW5kX21zZ193b3JrKHN0cnVj dCBrdGhyZWFkX3dvcmsgKndvcmspCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHBfaGRjcDJw Ml9jdHJsICpjdHJsID0gY29udGFpbmVyX29mKHdvcmssCi0JCXN0cnVjdCBkcF9oZGNwMnAyX2N0 cmwsIHNlbmRfbXNnKTsKLQlzdHJ1Y3QgaGRjcF9saWJfd2FrZXVwX2RhdGEgY2RhdGEgPSB7SERD UF9MSUJfV0tVUF9DTURfSU5WQUxJRH07Ci0KLQlpZiAoIWN0cmwpIHsKLQkJcHJfZXJyKCJpbnZh bGlkIGlucHV0XG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JY2Rh dGEuY29udGV4dCA9IGN0cmwtPmxpYl9jdHg7Ci0KLQlpZiAoYXRvbWljX3JlYWQoJmN0cmwtPmF1 dGhfc3RhdGUpID09IEhEQ1BfU1RBVEVfSU5BQ1RJVkUpIHsKLQkJcHJfZXJyKCJoZGNwIGlzIG9m ZlxuIik7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQltdXRleF9sb2NrKCZjdHJsLT5tc2dfbG9jayk7 Ci0KLQlyYyA9IGRwX2hkY3AycDJfYXV4X3dyaXRlX21lc3NhZ2UoY3RybCwgY3RybC0+bXNnX2J1 ZiwKLQkJCWN0cmwtPnNlbmRfbXNnX2xlbiwgY3RybC0+bXNnX3BhcnQtPm9mZnNldCwKLQkJCWN0 cmwtPnRpbWVvdXQpOwotCWlmIChyYykgewotCQlwcl9lcnIoIkVycm9yIHNlbmRpbmcgbXNnIHRv IHNpbmsgJWRcbiIsIHJjKTsKLQkJbXV0ZXhfdW5sb2NrKCZjdHJsLT5tc2dfbG9jayk7Ci0JCWdv dG8gZXhpdDsKLQl9Ci0KLQljZGF0YS5jbWQgPSBIRENQX0xJQl9XS1VQX0NNRF9NU0dfU0VORF9T VUNDRVNTOwotCWNkYXRhLnRpbWVvdXQgPSBjdHJsLT50aW1lb3V0OwotCW11dGV4X3VubG9jaygm Y3RybC0+bXNnX2xvY2spOwotCi1leGl0OgotCWlmIChyYyA9PSAtRVRJTUVET1VUKQotCQljZGF0 YS5jbWQgPSBIRENQX0xJQl9XS1VQX0NNRF9NU0dfUkVDVl9USU1FT1VUOwotCWVsc2UgaWYgKHJj KQotCQljZGF0YS5jbWQgPSBIRENQX0xJQl9XS1VQX0NNRF9NU0dfUkVDVl9GQUlMRUQ7Ci0KLQlk cF9oZGNwMnAyX3dha2V1cF9saWIoY3RybCwgJmNkYXRhKTsKLX0KLQotc3RhdGljIGludCBkcF9o ZGNwMnAyX2dldF9tc2dfZnJvbV9zaW5rKHN0cnVjdCBkcF9oZGNwMnAyX2N0cmwgKmN0cmwpCi17 Ci0JaW50IHJjID0gMDsKLQljaGFyICpyZWN2ZF9tc2dfYnVmID0gTlVMTDsKLQlzdHJ1Y3QgaGRj cF9saWJfd2FrZXVwX2RhdGEgY2RhdGEgPSB7IEhEQ1BfTElCX1dLVVBfQ01EX0lOVkFMSUQgfTsK LQotCWNkYXRhLmNvbnRleHQgPSBjdHJsLT5saWJfY3R4OwotCi0JcmVjdmRfbXNnX2J1ZiA9IGt6 YWxsb2MoY3RybC0+c2VuZF9tc2dfbGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJlY3ZkX21zZ19i dWYpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JcmMgPSBkcF9oZGNw MnAyX2F1eF9yZWFkX21lc3NhZ2UoY3RybCwgcmVjdmRfbXNnX2J1ZiwKLQkJY3RybC0+c2VuZF9t c2dfbGVuLCBjdHJsLT5tc2dfcGFydC0+b2Zmc2V0LAotCQljdHJsLT50aW1lb3V0KTsKLQlpZiAo cmMpIHsKLQkJcHJfZXJyKCJlcnJvciByZWFkaW5nIG1lc3NhZ2UgJWRcbiIsIHJjKTsKLQkJZ290 byBleGl0OwotCX0KLQotCWNkYXRhLnJlY3ZkX21zZ19idWYgPSByZWN2ZF9tc2dfYnVmOwotCWNk YXRhLnJlY3ZkX21zZ19sZW4gPSBjdHJsLT5zZW5kX21zZ19sZW47Ci0JY2RhdGEudGltZW91dCA9 IGN0cmwtPnRpbWVvdXQ7Ci1leGl0OgotCWlmIChyYyA9PSAtRVRJTUVET1VUKQotCQljZGF0YS5j bWQgPSBIRENQX0xJQl9XS1VQX0NNRF9NU0dfUkVDVl9USU1FT1VUOwotCWVsc2UgaWYgKHJjKQot CQljZGF0YS5jbWQgPSBIRENQX0xJQl9XS1VQX0NNRF9NU0dfUkVDVl9GQUlMRUQ7Ci0JZWxzZQot CQljZGF0YS5jbWQgPSBIRENQX0xJQl9XS1VQX0NNRF9NU0dfUkVDVl9TVUNDRVNTOwotCi0JZHBf aGRjcDJwMl93YWtldXBfbGliKGN0cmwsICZjZGF0YSk7Ci0Ja2ZyZWUocmVjdmRfbXNnX2J1Zik7 Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2hkY3AycDJfcmVjdl9tc2dfd29y ayhzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKQotewotCXN0cnVjdCBoZGNwX2xpYl93YWtldXBf ZGF0YSBjZGF0YSA9IHsgSERDUF9MSUJfV0tVUF9DTURfSU5WQUxJRCB9OwotCXN0cnVjdCBkcF9o ZGNwMnAyX2N0cmwgKmN0cmwgPSBjb250YWluZXJfb2Yod29yaywKLQkJc3RydWN0IGRwX2hkY3Ay cDJfY3RybCwgcmVjdl9tc2cpOwotCi0JY2RhdGEuY29udGV4dCA9IGN0cmwtPmxpYl9jdHg7Ci0K LQlpZiAoYXRvbWljX3JlYWQoJmN0cmwtPmF1dGhfc3RhdGUpID09IEhEQ1BfU1RBVEVfSU5BQ1RJ VkUpIHsKLQkJcHJfZXJyKCJoZGNwIGlzIG9mZlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAo Y3RybC0+cnhfc3RhdHVzKSB7Ci0JCWlmICghY3RybC0+Y3BfaXJxX2RvbmUpIHsKLQkJCXByX2Rl YnVnKCJ3YWl0aW5nIGZvciBDUF9JUlFcbiIpOwotCQkJY3RybC0+cG9sbGluZyA9IHRydWU7Ci0J CQlyZXR1cm47Ci0JCX0KLQotCQlpZiAoY3RybC0+cnhfc3RhdHVzICYgY3RybC0+c2lua19yeF9z dGF0dXMpIHsKLQkJCWN0cmwtPmNwX2lycV9kb25lID0gZmFsc2U7Ci0JCQljdHJsLT5zaW5rX3J4 X3N0YXR1cyA9IDA7Ci0JCQljdHJsLT5yeF9zdGF0dXMgPSAwOwotCQl9Ci0JfQotCi0JZHBfaGRj cDJwMl9nZXRfbXNnX2Zyb21fc2luayhjdHJsKTsKLX0KLQotc3RhdGljIHZvaWQgZHBfaGRjcDJw Ml9hdXRoX3N0YXR1c193b3JrKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspCi17Ci0Jc3RydWN0 IGRwX2hkY3AycDJfY3RybCAqY3RybCA9IGNvbnRhaW5lcl9vZih3b3JrLAotCQlzdHJ1Y3QgZHBf aGRjcDJwMl9jdHJsLCBzdGF0dXMpOwotCi0JaWYgKCFjdHJsKSB7Ci0JCXByX2VycigiaW52YWxp ZCBpbnB1dFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoYXRvbWljX3JlYWQoJmN0cmwtPmF1 dGhfc3RhdGUpID09IEhEQ1BfU1RBVEVfSU5BQ1RJVkUpIHsKLQkJcHJfZXJyKCJoZGNwIGlzIG9m ZlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoY3RybC0+YXV0aF9zdGF0dXMgPT0gRFBfSERD UF9BVVRIX1NUQVRVU19TVUNDRVNTKSB7Ci0JCWN0cmwtPmluaXRfZGF0YS5ub3RpZnlfc3RhdHVz KGN0cmwtPmluaXRfZGF0YS5jYl9kYXRhLAotCQkJSERDUF9TVEFURV9BVVRIRU5USUNBVEVEKTsK LQotCQlhdG9taWNfc2V0KCZjdHJsLT5hdXRoX3N0YXRlLCBIRENQX1NUQVRFX0FVVEhFTlRJQ0FU RUQpOwotCX0gZWxzZSB7Ci0JCWRwX2hkY3AycDJfYXV0aF9mYWlsZWQoY3RybCk7Ci0JfQotfQot Ci1zdGF0aWMgdm9pZCBkcF9oZGNwMnAyX2xpbmtfd29yayhzdHJ1Y3Qga3RocmVhZF93b3JrICp3 b3JrKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRwX2hkY3AycDJfY3RybCAqY3RybCA9IGNv bnRhaW5lcl9vZih3b3JrLAotCQlzdHJ1Y3QgZHBfaGRjcDJwMl9jdHJsLCBsaW5rKTsKLQlzdHJ1 Y3QgaGRjcF9saWJfd2FrZXVwX2RhdGEgY2RhdGEgPSB7SERDUF9MSUJfV0tVUF9DTURfSU5WQUxJ RH07Ci0KLQlpZiAoIWN0cmwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKLQkJcmV0 dXJuOwotCX0KLQotCWlmIChhdG9taWNfcmVhZCgmY3RybC0+YXV0aF9zdGF0ZSkgPT0gSERDUF9T VEFURV9BVVRIX0ZBSUwgfHwKLQkJYXRvbWljX3JlYWQoJmN0cmwtPmF1dGhfc3RhdGUpID09IEhE Q1BfU1RBVEVfSU5BQ1RJVkUpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGhkY3Agc3RhdGVcbiIpOwot CQlyZXR1cm47Ci0JfQotCi0JY2RhdGEuY29udGV4dCA9IGN0cmwtPmxpYl9jdHg7Ci0KLQlpZiAo Y3RybC0+c2lua19yeF9zdGF0dXMgJiBjdHJsLT5hYm9ydF9tYXNrKSB7Ci0JCWlmIChjdHJsLT5z aW5rX3J4X3N0YXR1cyAmIEJJVCgzKSkKLQkJCXByX2VycigicmVhdXRoX3JlcSBzZXQgYnkgc2lu a1xuIik7Ci0KLQkJaWYgKGN0cmwtPnNpbmtfcnhfc3RhdHVzICYgQklUKDQpKQotCQkJcHJfZXJy KCJsaW5rIGZhaWx1cmUgcmVwb3J0ZWQgYnkgc2lua1xuIik7Ci0KLQkJY3RybC0+c2lua19yeF9z dGF0dXMgPSAwOwotCQljdHJsLT5yeF9zdGF0dXMgPSAwOwotCi0JCXJjID0gLUVOT0xJTks7Ci0K LQkJY2RhdGEuY21kID0gSERDUF9MSUJfV0tVUF9DTURfTElOS19GQUlMRUQ7Ci0JCWF0b21pY19z ZXQoJmN0cmwtPmF1dGhfc3RhdGUsIEhEQ1BfU1RBVEVfQVVUSF9GQUlMKTsKLQkJZ290byBleGl0 OwotCX0KLQotCWlmIChjdHJsLT5wb2xsaW5nICYmIChjdHJsLT5zaW5rX3J4X3N0YXR1cyAmIGN0 cmwtPnJ4X3N0YXR1cykpIHsKLQkJY3RybC0+c2lua19yeF9zdGF0dXMgPSAwOwotCQljdHJsLT5y eF9zdGF0dXMgPSAwOwotCi0JCWRwX2hkY3AycDJfZ2V0X21zZ19mcm9tX3NpbmsoY3RybCk7Ci0K LQkJY3RybC0+cG9sbGluZyA9IGZhbHNlOwotCX0gZWxzZSB7Ci0JCWN0cmwtPmNwX2lycV9kb25l ID0gdHJ1ZTsKLQl9Ci1leGl0OgotCWlmIChyYykKLQkJZHBfaGRjcDJwMl93YWtldXBfbGliKGN0 cmwsICZjZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX2hkY3AycDJfYXV0aF93b3JrKHN0cnVj dCBrdGhyZWFkX3dvcmsgKndvcmspCi17Ci0Jc3RydWN0IGhkY3BfbGliX3dha2V1cF9kYXRhIGNk YXRhID0ge0hEQ1BfTElCX1dLVVBfQ01EX0lOVkFMSUR9OwotCXN0cnVjdCBkcF9oZGNwMnAyX2N0 cmwgKmN0cmwgPSBjb250YWluZXJfb2Yod29yaywKLQkJc3RydWN0IGRwX2hkY3AycDJfY3RybCwg YXV0aCk7Ci0KLQljZGF0YS5jb250ZXh0ID0gY3RybC0+bGliX2N0eDsKLQotCWlmIChhdG9taWNf cmVhZCgmY3RybC0+YXV0aF9zdGF0ZSkgPT0gSERDUF9TVEFURV9BVVRIRU5USUNBVElORykKLQkJ Y2RhdGEuY21kID0gSERDUF9MSUJfV0tVUF9DTURfU1RBUlQ7Ci0JZWxzZQotCQljZGF0YS5jbWQg PSBIRENQX0xJQl9XS1VQX0NNRF9TVE9QOwotCi0JZHBfaGRjcDJwMl93YWtldXBfbGliKGN0cmws ICZjZGF0YSk7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfaGRjcDJwMl9yZWFkX3J4X3N0YXR1cyhzdHJ1 Y3QgZHBfaGRjcDJwMl9jdHJsICpjdHJsLAotCQl1OCAqcnhfc3RhdHVzKQotewotCXUzMiBjb25z dCBjcF9pcnFfZHBjZF9vZmZzZXQgPSAweDIwMTsKLQl1MzIgY29uc3QgcnhzdGF0dXNfZHBjZF9v ZmZzZXQgPSAweDY5NDkzOwotCXNzaXplX3QgY29uc3QgYnl0ZXNfdG9fcmVhZCA9IDE7Ci0Jc3Np emVfdCBieXRlc19yZWFkID0gMDsKLQl1OCBidWYgPSAwOwotCWludCByYyA9IDA7Ci0JYm9vbCBj cF9pcnEgPSAwOwotCi0JKnJ4X3N0YXR1cyA9IDA7Ci0KLQlieXRlc19yZWFkID0gZHJtX2RwX2Rw Y2RfcmVhZChjdHJsLT5pbml0X2RhdGEuZHJtX2F1eCwKLQkJCWNwX2lycV9kcGNkX29mZnNldCwg JmJ1ZiwgYnl0ZXNfdG9fcmVhZCk7Ci0JaWYgKGJ5dGVzX3JlYWQgIT0gYnl0ZXNfdG9fcmVhZCkg ewotCQlwcl9lcnIoImNwIGlycSByZWFkIGZhaWxlZFxuIik7Ci0JCXJjID0gYnl0ZXNfcmVhZDsK LQkJZ290byBlcnJvcjsKLQl9Ci0KLQljcF9pcnEgPSBidWYgJiBCSVQoMik7Ci0JcHJfZGVidWco ImNwX2lycT0weCV4XG4iLCBjcF9pcnEpOwotCWJ1ZiA9IDA7Ci0KLQlpZiAoY3BfaXJxKSB7Ci0J CWJ5dGVzX3JlYWQgPSBkcm1fZHBfZHBjZF9yZWFkKGN0cmwtPmluaXRfZGF0YS5kcm1fYXV4LAot CQkJCXJ4c3RhdHVzX2RwY2Rfb2Zmc2V0LCAmYnVmLCBieXRlc190b19yZWFkKTsKLQkJaWYgKGJ5 dGVzX3JlYWQgIT0gYnl0ZXNfdG9fcmVhZCkgewotCQkJcHJfZXJyKCJyeHN0YXR1cyByZWFkIGZh aWxlZFxuIik7Ci0JCQlyYyA9IGJ5dGVzX3JlYWQ7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JCSpy eF9zdGF0dXMgPSBidWY7Ci0JCXByX2RlYnVnKCJyeF9zdGF0dXM9MHgleFxuIiwgKnJ4X3N0YXR1 cyk7Ci0JfQotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfaGRjcDJw Ml9jcF9pcnEodm9pZCAqaW5wdXQpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHBfaGRjcDJw Ml9jdHJsICpjdHJsID0gaW5wdXQ7Ci0KLQlpZiAoIWN0cmwpIHsKLQkJcHJfZXJyKCJpbnZhbGlk IGlucHV0XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGF0b21pY19yZWFkKCZj dHJsLT5hdXRoX3N0YXRlKSA9PSBIRENQX1NUQVRFX0FVVEhfRkFJTCB8fAotCQlhdG9taWNfcmVh ZCgmY3RybC0+YXV0aF9zdGF0ZSkgPT0gSERDUF9TVEFURV9JTkFDVElWRSkgewotCQlwcl9lcnIo ImludmFsaWQgaGRjcCBzdGF0ZVxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsK LQl9Ci0KLQljdHJsLT5zaW5rX3J4X3N0YXR1cyA9IDA7Ci0JcmMgPSBkcF9oZGNwMnAyX3JlYWRf cnhfc3RhdHVzKGN0cmwsICZjdHJsLT5zaW5rX3J4X3N0YXR1cyk7Ci0JaWYgKHJjKSB7Ci0JCXBy X2VycigiZmFpbGVkIHRvIHJlYWQgcnggc3RhdHVzXG4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0K LQlwcl9kZWJ1Zygic2lua19yeF9zdGF0dXM9MHgleFxuIiwgY3RybC0+c2lua19yeF9zdGF0dXMp OwotCi0JaWYgKCFjdHJsLT5zaW5rX3J4X3N0YXR1cykgewotCQlwcl9kZWJ1Zygibm90IGEgaGRj cCAyLjIgaXJxXG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWt0 aHJlYWRfcXVldWVfd29yaygmY3RybC0+d29ya2VyLCAmY3RybC0+bGluayk7Ci0KLQlyZXR1cm4g MDsKLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkcF9oZGNwMnAyX2lzcih2 b2lkICppbnB1dCkKLXsKLQlzdHJ1Y3QgZHBfaGRjcDJwMl9jdHJsICpjdHJsID0gKHN0cnVjdCBk cF9oZGNwMnAyX2N0cmwgKilpbnB1dDsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc3NfaW9fZGF0 YSAqaW87Ci0Jc3RydWN0IGRwX2hkY3AycDJfaW50ZXJydXB0cyAqaW50cjsKLQl1MzIgaGRjcF9p bnRfdmFsID0gMDsKLQotCWlmICghY3RybCB8fCAhY3RybC0+aW5pdF9kYXRhLmNvcmVfaW8pIHsK LQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVu ZDsKLQl9Ci0KLQlpbyA9IGN0cmwtPmluaXRfZGF0YS5jb3JlX2lvOwotCWludHIgPSBjdHJsLT5p bnRyOwotCi0Jd2hpbGUgKGludHIgJiYgaW50ci0+cmVnKSB7Ci0JCXN0cnVjdCBkcF9oZGNwMnAy X2ludF9zZXQgKmludF9zZXQgPSBpbnRyLT5pbnRfc2V0OwotCi0JCWhkY3BfaW50X3ZhbCA9IGRw X3JlYWQoaW8tPmJhc2UgKyBpbnRyLT5yZWcpOwotCi0JCXdoaWxlIChpbnRfc2V0ICYmIGludF9z ZXQtPmludGVycnVwdCkgewotCQkJaWYgKGhkY3BfaW50X3ZhbCAmIChpbnRfc2V0LT5pbnRlcnJ1 cHQgPj4gMikpIHsKLQkJCQlwcl9kZWJ1ZygiJXNcbiIsIGludF9zZXQtPm5hbWUpOwotCi0JCQkJ aWYgKGludF9zZXQtPmZ1bmMpCi0JCQkJCWludF9zZXQtPmZ1bmMoY3RybCk7Ci0KLQkJCQlkcF93 cml0ZShpby0+YmFzZSArIGludHItPnJlZywgaGRjcF9pbnRfdmFsIHwKLQkJCQkJKGludF9zZXQt PmludGVycnVwdCA+PiAxKSk7Ci0JCQl9Ci0JCQlpbnRfc2V0Kys7Ci0JCX0KLQkJaW50cisrOwot CX0KLWVuZDoKLQlyZXR1cm4gcmM7Ci19Ci0KLXZvaWQgZHB1X2RwX2hkY3AycDJfZGVpbml0KHZv aWQgKmlucHV0KQotewotCXN0cnVjdCBkcF9oZGNwMnAyX2N0cmwgKmN0cmwgPSAoc3RydWN0IGRw X2hkY3AycDJfY3RybCAqKWlucHV0OwotCXN0cnVjdCBoZGNwX2xpYl93YWtldXBfZGF0YSBjZGF0 YSA9IHtIRENQX0xJQl9XS1VQX0NNRF9JTlZBTElEfTsKLQotCWlmICghY3RybCkgewotCQlwcl9l cnIoImludmFsaWQgaW5wdXRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JY2RhdGEuY21kID0gSERD UF9MSUJfV0tVUF9DTURfU1RPUDsKLQljZGF0YS5jb250ZXh0ID0gY3RybC0+bGliX2N0eDsKLQlk cF9oZGNwMnAyX3dha2V1cF9saWIoY3RybCwgJmNkYXRhKTsKLQotCWt0aHJlYWRfc3RvcChjdHJs LT50aHJlYWQpOwotCi0JbXV0ZXhfZGVzdHJveSgmY3RybC0+bXV0ZXgpOwotCW11dGV4X2Rlc3Ry b3koJmN0cmwtPm1zZ19sb2NrKTsKLQltdXRleF9kZXN0cm95KCZjdHJsLT53YWtldXBfbXV0ZXgp OwotCWt6ZnJlZShjdHJsLT5tc2dfYnVmKTsKLQlrZnJlZShjdHJsKTsKLX0KLQotdm9pZCAqZHB1 X2RwX2hkY3AycDJfaW5pdChzdHJ1Y3QgZHB1X2hkY3BfaW5pdF9kYXRhICppbml0X2RhdGEpCi17 Ci0JaW50IHJjOwotCXN0cnVjdCBkcF9oZGNwMnAyX2N0cmwgKmN0cmw7Ci0Jc3RhdGljIHN0cnVj dCBoZGNwX3R4bXRyX29wcyB0eG10cl9vcHM7Ci0Jc3RydWN0IGhkY3BfcmVnaXN0ZXJfZGF0YSBy ZWdpc3Rlcl9kYXRhOwotCXN0YXRpYyBzdHJ1Y3QgZHB1X2hkY3Bfb3BzIG9wcyA9IHsKLQkJLmlz ciA9IGRwX2hkY3AycDJfaXNyLAotCQkucmVhdXRoZW50aWNhdGUgPSBkcF9oZGNwMnAyX3JlYXV0 aGVudGljYXRlLAotCQkuYXV0aGVudGljYXRlID0gZHBfaGRjcDJwMl9hdXRoZW50aWNhdGUsCi0J CS5mZWF0dXJlX3N1cHBvcnRlZCA9IGRwX2hkY3AycDJfZmVhdHVyZV9zdXBwb3J0ZWQsCi0JCS5v ZmYgPSBkcF9oZGNwMnAyX29mZiwKLQkJLmNwX2lycSA9IGRwX2hkY3AycDJfY3BfaXJxLAotCX07 Ci0KLQlzdGF0aWMgc3RydWN0IGhkY3BfY2xpZW50X29wcyBjbGllbnRfb3BzID0gewotCQkud2Fr ZXVwID0gZHBfaGRjcDJwMl93YWtldXAsCi0JCS5ub3RpZnlfbHZsX2NoYW5nZSA9IGRwX2hkY3Ay cDJfbWluX2xldmVsX2NoYW5nZSwKLQl9OwotCXN0YXRpYyBzdHJ1Y3QgZHBfaGRjcDJwMl9pbnRf c2V0IGludF9zZXQxW10gPSB7Ci0JCXtCSVQoMTcpLCAiYXV0aGVudGljYXRpb24gc3VjY2Vzc2Z1 bCIsIE5VTEx9LAotCQl7QklUKDIwKSwgImF1dGhlbnRpY2F0aW9uIGZhaWxlZCIsIE5VTEx9LAot CQl7QklUKDI0KSwgImVuY3J5cHRpb24gZW5hYmxlZCIsIE5VTEx9LAotCQl7QklUKDI3KSwgImVu Y3J5cHRpb24gZGlzYWJsZWQiLCBOVUxMfSwKLQkJezB9LAotCX07Ci0Jc3RhdGljIHN0cnVjdCBk cF9oZGNwMnAyX2ludF9zZXQgaW50X3NldDJbXSA9IHsKLQkJe0JJVCgyKSwgICJrZXkgZmlmbyB1 bmRlcmZsb3ciLCBOVUxMfSwKLQkJezB9LAotCX07Ci0Jc3RhdGljIHN0cnVjdCBkcF9oZGNwMnAy X2ludGVycnVwdHMgaW50cltdID0gewotCQl7RFBfSU5UUl9TVEFUVVMyLCBpbnRfc2V0MX0sCi0J CXtEUF9JTlRSX1NUQVRVUzMsIGludF9zZXQyfSwKLQkJezB9Ci0JfTsKLQotCWlmICghaW5pdF9k YXRhIHx8ICFpbml0X2RhdGEtPmNiX2RhdGEgfHwKLQkJCSFpbml0X2RhdGEtPm5vdGlmeV9zdGF0 dXMgfHwgIWluaXRfZGF0YS0+ZHJtX2F1eCkgewotCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIp OwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9Ci0KLQljdHJsID0ga3phbGxvYyhzaXpl b2YoKmN0cmwpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWN0cmwpCi0JCXJldHVybiBFUlJfUFRSKC1F Tk9NRU0pOwotCi0JY3RybC0+aW5pdF9kYXRhID0gKmluaXRfZGF0YTsKLQljdHJsLT5saWIgPSAm dHhtdHJfb3BzOwotCWN0cmwtPm1zZ19idWYgPSBOVUxMOwotCi0JY3RybC0+c2lua19zdGF0dXMg PSBTSU5LX0RJU0NPTk5FQ1RFRDsKLQljdHJsLT5pbnRyID0gaW50cjsKLQotCWF0b21pY19zZXQo JmN0cmwtPmF1dGhfc3RhdGUsIEhEQ1BfU1RBVEVfSU5BQ1RJVkUpOwotCi0JY3RybC0+b3BzID0g Jm9wczsKLQltdXRleF9pbml0KCZjdHJsLT5tdXRleCk7Ci0JbXV0ZXhfaW5pdCgmY3RybC0+bXNn X2xvY2spOwotCW11dGV4X2luaXQoJmN0cmwtPndha2V1cF9tdXRleCk7Ci0KLQlyZWdpc3Rlcl9k YXRhLmhkY3BfY3R4ID0gJmN0cmwtPmxpYl9jdHg7Ci0JcmVnaXN0ZXJfZGF0YS5jbGllbnRfb3Bz ID0gJmNsaWVudF9vcHM7Ci0JcmVnaXN0ZXJfZGF0YS50eG10cl9vcHMgPSAmdHhtdHJfb3BzOwot CXJlZ2lzdGVyX2RhdGEuZGV2aWNlX3R5cGUgPSBIRENQX1RYTVRSX0RQOwotCXJlZ2lzdGVyX2Rh dGEuY2xpZW50X2N0eCA9IGN0cmw7Ci0KLQlyYyA9IGhkY3BfbGlicmFyeV9yZWdpc3RlcigmcmVn aXN0ZXJfZGF0YSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiVW5hYmxlIHRvIHJlZ2lzdGVyIHdp dGggSERDUCAyLjIgbGlicmFyeVxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0Ja3RocmVhZF9p bml0X3dvcmtlcigmY3RybC0+d29ya2VyKTsKLQotCWt0aHJlYWRfaW5pdF93b3JrKCZjdHJsLT5h dXRoLCAgICAgZHBfaGRjcDJwMl9hdXRoX3dvcmspOwotCWt0aHJlYWRfaW5pdF93b3JrKCZjdHJs LT5zZW5kX21zZywgZHBfaGRjcDJwMl9zZW5kX21zZ193b3JrKTsKLQlrdGhyZWFkX2luaXRfd29y aygmY3RybC0+cmVjdl9tc2csIGRwX2hkY3AycDJfcmVjdl9tc2dfd29yayk7Ci0Ja3RocmVhZF9p bml0X3dvcmsoJmN0cmwtPnN0YXR1cywgICBkcF9oZGNwMnAyX2F1dGhfc3RhdHVzX3dvcmspOwot CWt0aHJlYWRfaW5pdF93b3JrKCZjdHJsLT5saW5rLCAgICAgZHBfaGRjcDJwMl9saW5rX3dvcmsp OwotCi0JY3RybC0+dGhyZWFkID0ga3RocmVhZF9ydW4oa3RocmVhZF93b3JrZXJfZm4sCi0JCSZj dHJsLT53b3JrZXIsICJkcF9oZGNwMnAyIik7Ci0KLQlpZiAoSVNfRVJSKGN0cmwtPnRocmVhZCkp IHsKLQkJcHJfZXJyKCJ1bmFibGUgdG8gc3RhcnQgRFAgaGRjcDJwMiB0aHJlYWRcbiIpOwotCQly YyA9IFBUUl9FUlIoY3RybC0+dGhyZWFkKTsKLQkJY3RybC0+dGhyZWFkID0gTlVMTDsKLQkJZ290 byBlcnJvcjsKLQl9Ci0KLQlyZXR1cm4gY3RybDsKLWVycm9yOgotCWtmcmVlKGN0cmwpOwotCXJl dHVybiBFUlJfUFRSKHJjKTsKLX0KLQotc3RhdGljIGJvb2wgZHBfaGRjcDJwMl9zdXBwb3J0ZWQo c3RydWN0IGRwX2hkY3AycDJfY3RybCAqY3RybCkKLXsKLQl1MzIgY29uc3QgcnhjYXBzX2RwY2Rf b2Zmc2V0ID0gMHg2OTIxZDsKLQlzc2l6ZV90IGJ5dGVzX3JlYWQgPSAwOwotCXU4IGJ1ZltEUF9I RENQX1JYQ0FQU19MRU5HVEhdOwotCi0JYnl0ZXNfcmVhZCA9IGRybV9kcF9kcGNkX3JlYWQoY3Ry bC0+aW5pdF9kYXRhLmRybV9hdXgsCi0JCQlyeGNhcHNfZHBjZF9vZmZzZXQsICZidWYsIERQX0hE Q1BfUlhDQVBTX0xFTkdUSCk7Ci0JaWYgKGJ5dGVzX3JlYWQgIT0gRFBfSERDUF9SWENBUFNfTEVO R1RIKSB7Ci0JCXByX2VycigiUnhDYXBzIHJlYWQgZmFpbGVkXG4iKTsKLQkJZ290byBlcnJvcjsK LQl9Ci0KLQlwcl9kZWJ1ZygiSERDUF9DQVBBQkxFPSVsdVxuIiwgKGJ1ZlsyXSAmIEJJVCgxKSkg Pj4gMSk7Ci0JcHJfZGVidWcoIlZFUlNJT049JWRcbiIsIGJ1ZlswXSk7Ci0KLQlpZiAoKGJ1Zlsy XSAmIEJJVCgxKSkgJiYgKGJ1ZlswXSA9PSAweDIpKQotCQlyZXR1cm4gdHJ1ZTsKLQotZXJyb3I6 Ci0JcmV0dXJuIGZhbHNlOwotfQotCi1zdHJ1Y3QgZHB1X2hkY3Bfb3BzICpkcHVfZHBfaGRjcDJw Ml9zdGFydCh2b2lkICppbnB1dCkKLXsKLQlzdHJ1Y3QgZHBfaGRjcDJwMl9jdHJsICpjdHJsID0g aW5wdXQ7Ci0KLQlwcl9kZWJ1ZygiQ2hlY2tpbmcgc2luayBjYXBhYmlsaXR5XG4iKTsKLQlpZiAo ZHBfaGRjcDJwMl9zdXBwb3J0ZWQoY3RybCkpCi0JCXJldHVybiBjdHJsLT5vcHM7Ci0JZWxzZQot CQlyZXR1cm4gTlVMTDsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9k cF9saW5rLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2xpbmsuYwpkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggOTQ4MDg2MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2RwL2RwX2xpbmsuYworKysgL2Rldi9udWxsCkBAIC0xLDE1NDggKzAsMCBAQAotLyoKLSAq IENvcHlyaWdodCAoYykgMjAxMi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZl cnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAq Ci0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0jZGVmaW5lIHByX2ZtdChmbXQpCSJb ZHJtLWRwXSAlczogIiBmbXQsIF9fZnVuY19fCi0KLSNpbmNsdWRlICJkcF9saW5rLmgiCi0jaW5j bHVkZSAiZHBfcGFuZWwuaCIKLQotZW51bSBkeW5hbWljX3JhbmdlIHsKLQlEUF9EWU5BTUlDX1JB TkdFX1JHQl9WRVNBID0gMHgwMCwKLQlEUF9EWU5BTUlDX1JBTkdFX1JHQl9DRUEgPSAweDAxLAot CURQX0RZTkFNSUNfUkFOR0VfVU5LTk9XTiA9IDB4RkZGRkZGRkYsCi19OwotCi1lbnVtIGF1ZGlv X3NhbXBsZV9yYXRlIHsKLQlBVURJT19TQU1QTEVfUkFURV8zMl9LSFoJPSAweDAwLAotCUFVRElP X1NBTVBMRV9SQVRFXzQ0XzFfS0haCT0gMHgwMSwKLQlBVURJT19TQU1QTEVfUkFURV80OF9LSFoJ PSAweDAyLAotCUFVRElPX1NBTVBMRV9SQVRFXzg4XzJfS0haCT0gMHgwMywKLQlBVURJT19TQU1Q TEVfUkFURV85Nl9LSFoJPSAweDA0LAotCUFVRElPX1NBTVBMRV9SQVRFXzE3Nl80X0tIWgk9IDB4 MDUsCi0JQVVESU9fU0FNUExFX1JBVEVfMTkyX0tIWgk9IDB4MDYsCi19OwotCi1lbnVtIGF1ZGlv X3BhdHRlcm5fdHlwZSB7Ci0JQVVESU9fVEVTVF9QQVRURVJOX09QRVJBVE9SX0RFRklORUQJPSAw eDAwLAotCUFVRElPX1RFU1RfUEFUVEVSTl9TQVdUT09USAkJPSAweDAxLAotfTsKLQotc3RydWN0 IGRwX2xpbmtfcmVxdWVzdCB7Ci0JdTMyIHRlc3RfcmVxdWVzdGVkOwotCXUzMiB0ZXN0X2xpbmtf cmF0ZTsKLQl1MzIgdGVzdF9sYW5lX2NvdW50OwotfTsKLQotc3RydWN0IGRwX2xpbmtfcHJpdmF0 ZSB7Ci0JdTMyIHByZXZfc2lua19jb3VudDsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jc3RydWN0 IGRwX2F1eCAqYXV4OwotCXN0cnVjdCBkcF9saW5rIGRwX2xpbms7Ci0KLQlzdHJ1Y3QgZHBfbGlu a19yZXF1ZXN0IHJlcXVlc3Q7Ci0JdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07 Ci19OwotCi1zdGF0aWMgY2hhciAqZHBfbGlua19nZXRfYXVkaW9fdGVzdF9wYXR0ZXJuKHUzMiBw YXR0ZXJuKQotewotCXN3aXRjaCAocGF0dGVybikgewotCWNhc2UgQVVESU9fVEVTVF9QQVRURVJO X09QRVJBVE9SX0RFRklORUQ6Ci0JCXJldHVybiBEUF9MSU5LX0VOVU1fU1RSKEFVRElPX1RFU1Rf UEFUVEVSTl9PUEVSQVRPUl9ERUZJTkVEKTsKLQljYXNlIEFVRElPX1RFU1RfUEFUVEVSTl9TQVdU T09USDoKLQkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoQVVESU9fVEVTVF9QQVRURVJOX1NBV1RP T1RIKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gInVua25vd24iOwotCX0KLX0KLQotc3RhdGljIGNo YXIgKmRwX2xpbmtfZ2V0X2F1ZGlvX3NhbXBsZV9yYXRlKHUzMiByYXRlKQotewotCXN3aXRjaCAo cmF0ZSkgewotCWNhc2UgQVVESU9fU0FNUExFX1JBVEVfMzJfS0haOgotCQlyZXR1cm4gRFBfTElO S19FTlVNX1NUUihBVURJT19TQU1QTEVfUkFURV8zMl9LSFopOwotCWNhc2UgQVVESU9fU0FNUExF X1JBVEVfNDRfMV9LSFo6Ci0JCXJldHVybiBEUF9MSU5LX0VOVU1fU1RSKEFVRElPX1NBTVBMRV9S QVRFXzQ0XzFfS0haKTsKLQljYXNlIEFVRElPX1NBTVBMRV9SQVRFXzQ4X0tIWjoKLQkJcmV0dXJu IERQX0xJTktfRU5VTV9TVFIoQVVESU9fU0FNUExFX1JBVEVfNDhfS0haKTsKLQljYXNlIEFVRElP X1NBTVBMRV9SQVRFXzg4XzJfS0haOgotCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihBVURJT19T QU1QTEVfUkFURV84OF8yX0tIWik7Ci0JY2FzZSBBVURJT19TQU1QTEVfUkFURV85Nl9LSFo6Ci0J CXJldHVybiBEUF9MSU5LX0VOVU1fU1RSKEFVRElPX1NBTVBMRV9SQVRFXzk2X0tIWik7Ci0JY2Fz ZSBBVURJT19TQU1QTEVfUkFURV8xNzZfNF9LSFo6Ci0JCXJldHVybiBEUF9MSU5LX0VOVU1fU1RS KEFVRElPX1NBTVBMRV9SQVRFXzE3Nl80X0tIWik7Ci0JY2FzZSBBVURJT19TQU1QTEVfUkFURV8x OTJfS0haOgotCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihBVURJT19TQU1QTEVfUkFURV8xOTJf S0haKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gInVua25vd24iOwotCX0KLX0KLQotc3RhdGljIGlu dCBkcF9saW5rX2dldF9wZXJpb2Qoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaywgaW50IGNv bnN0IGFkZHIpCi17Ci0JaW50IHJldCA9IDA7Ci0JdTggYnA7Ci0JdTggZGF0YTsKLQl1MzIgY29u c3QgcGFyYW1fbGVuID0gMHgxOwotCXUzMiBjb25zdCBtYXhfYXVkaW9fcGVyaW9kID0gMHhBOwot Ci0JLyogVEVTVF9BVURJT19QRVJJT0RfQ0hfWFggKi8KLQlpZiAoZHJtX2RwX2RwY2RfcmVhZChs aW5rLT5hdXgtPmRybV9hdXgsIGFkZHIsICZicCwKLQkJcGFyYW1fbGVuKSA8IHBhcmFtX2xlbikg ewotCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIHRlc3RfYXVkaW9fcGVyaW9kICgweCV4KVxuIiwg YWRkcik7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlkYXRhID0gYnA7 Ci0KLQkvKiBQZXJpb2QgLSBCaXRzIDM6MCAqLwotCWRhdGEgPSBkYXRhICYgMHhGOwotCWlmICgo aW50KWRhdGEgPiBtYXhfYXVkaW9fcGVyaW9kKSB7Ci0JCXByX2VycigiaW52YWxpZCB0ZXN0X2F1 ZGlvX3BlcmlvZF9jaF8xID0gMHgleFxuIiwgZGF0YSk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdv dG8gZXhpdDsKLQl9Ci0KLQlyZXQgPSBkYXRhOwotZXhpdDoKLQlyZXR1cm4gcmV0OwotfQotCi1z dGF0aWMgaW50IGRwX2xpbmtfcGFyc2VfYXVkaW9fY2hhbm5lbF9wZXJpb2Qoc3RydWN0IGRwX2xp bmtfcHJpdmF0ZSAqbGluaykKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgZHBfbGlua190ZXN0 X2F1ZGlvICpyZXEgPSAmbGluay0+ZHBfbGluay50ZXN0X2F1ZGlvOwotCi0JcmV0ID0gZHBfbGlu a19nZXRfcGVyaW9kKGxpbmssIERQX1RFU1RfQVVESU9fUEVSSU9EX0NIMSk7Ci0JaWYgKHJldCA9 PSAtRUlOVkFMKQotCQlnb3RvIGV4aXQ7Ci0KLQlyZXEtPnRlc3RfYXVkaW9fcGVyaW9kX2NoXzEg PSByZXQ7Ci0JcHJfZGVidWcoInRlc3RfYXVkaW9fcGVyaW9kX2NoXzEgPSAweCV4XG4iLCByZXQp OwotCi0JcmV0ID0gZHBfbGlua19nZXRfcGVyaW9kKGxpbmssIERQX1RFU1RfQVVESU9fUEVSSU9E X0NIMik7Ci0JaWYgKHJldCA9PSAtRUlOVkFMKQotCQlnb3RvIGV4aXQ7Ci0KLQlyZXEtPnRlc3Rf YXVkaW9fcGVyaW9kX2NoXzIgPSByZXQ7Ci0JcHJfZGVidWcoInRlc3RfYXVkaW9fcGVyaW9kX2No XzIgPSAweCV4XG4iLCByZXQpOwotCi0JLyogVEVTVF9BVURJT19QRVJJT0RfQ0hfMyAoQnl0ZSAw eDI3NSkgKi8KLQlyZXQgPSBkcF9saW5rX2dldF9wZXJpb2QobGluaywgRFBfVEVTVF9BVURJT19Q RVJJT0RfQ0gzKTsKLQlpZiAocmV0ID09IC1FSU5WQUwpCi0JCWdvdG8gZXhpdDsKLQotCXJlcS0+ dGVzdF9hdWRpb19wZXJpb2RfY2hfMyA9IHJldDsKLQlwcl9kZWJ1ZygidGVzdF9hdWRpb19wZXJp b2RfY2hfMyA9IDB4JXhcbiIsIHJldCk7Ci0KLQlyZXQgPSBkcF9saW5rX2dldF9wZXJpb2QobGlu aywgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0g0KTsKLQlpZiAocmV0ID09IC1FSU5WQUwpCi0JCWdv dG8gZXhpdDsKLQotCXJlcS0+dGVzdF9hdWRpb19wZXJpb2RfY2hfNCA9IHJldDsKLQlwcl9kZWJ1 ZygidGVzdF9hdWRpb19wZXJpb2RfY2hfNCA9IDB4JXhcbiIsIHJldCk7Ci0KLQlyZXQgPSBkcF9s aW5rX2dldF9wZXJpb2QobGluaywgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0g1KTsKLQlpZiAocmV0 ID09IC1FSU5WQUwpCi0JCWdvdG8gZXhpdDsKLQotCXJlcS0+dGVzdF9hdWRpb19wZXJpb2RfY2hf NSA9IHJldDsKLQlwcl9kZWJ1ZygidGVzdF9hdWRpb19wZXJpb2RfY2hfNSA9IDB4JXhcbiIsIHJl dCk7Ci0KLQlyZXQgPSBkcF9saW5rX2dldF9wZXJpb2QobGluaywgRFBfVEVTVF9BVURJT19QRVJJ T0RfQ0g2KTsKLQlpZiAocmV0ID09IC1FSU5WQUwpCi0JCWdvdG8gZXhpdDsKLQotCXJlcS0+dGVz dF9hdWRpb19wZXJpb2RfY2hfNiA9IHJldDsKLQlwcl9kZWJ1ZygidGVzdF9hdWRpb19wZXJpb2Rf Y2hfNiA9IDB4JXhcbiIsIHJldCk7Ci0KLQlyZXQgPSBkcF9saW5rX2dldF9wZXJpb2QobGluaywg RFBfVEVTVF9BVURJT19QRVJJT0RfQ0g3KTsKLQlpZiAocmV0ID09IC1FSU5WQUwpCi0JCWdvdG8g ZXhpdDsKLQotCXJlcS0+dGVzdF9hdWRpb19wZXJpb2RfY2hfNyA9IHJldDsKLQlwcl9kZWJ1Zygi dGVzdF9hdWRpb19wZXJpb2RfY2hfNyA9IDB4JXhcbiIsIHJldCk7Ci0KLQlyZXQgPSBkcF9saW5r X2dldF9wZXJpb2QobGluaywgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0g4KTsKLQlpZiAocmV0ID09 IC1FSU5WQUwpCi0JCWdvdG8gZXhpdDsKLQotCXJlcS0+dGVzdF9hdWRpb19wZXJpb2RfY2hfOCA9 IHJldDsKLQlwcl9kZWJ1ZygidGVzdF9hdWRpb19wZXJpb2RfY2hfOCA9IDB4JXhcbiIsIHJldCk7 Ci1leGl0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfbGlua19wYXJzZV9hdWRp b19wYXR0ZXJuX3R5cGUoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKLXsKLQlpbnQgcmV0 ID0gMDsKLQl1OCBicDsKLQl1OCBkYXRhOwotCWludCBybGVuOwotCWludCBjb25zdCBwYXJhbV9s ZW4gPSAweDE7Ci0JaW50IGNvbnN0IG1heF9hdWRpb19wYXR0ZXJuX3R5cGUgPSAweDE7Ci0KLQly bGVuID0gZHJtX2RwX2RwY2RfcmVhZChsaW5rLT5hdXgtPmRybV9hdXgsCi0JCURQX1RFU1RfQVVE SU9fUEFUVEVSTl9UWVBFLCAmYnAsIHBhcmFtX2xlbik7Ci0JaWYgKHJsZW4gPCBwYXJhbV9sZW4p IHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcmVhZCBsaW5rIGF1ZGlvIG1vZGUgZGF0YVxuIik7Ci0J CXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JZGF0YSA9IGJwOwotCi0JLyogQXVk aW8gUGF0dGVybiBUeXBlIC0gQml0cyA3OjAgKi8KLQlpZiAoKGludClkYXRhID4gbWF4X2F1ZGlv X3BhdHRlcm5fdHlwZSkgewotCQlwcl9lcnIoImludmFsaWQgYXVkaW8gcGF0dGVybiB0eXBlID0g MHgleFxuIiwgZGF0YSk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQls aW5rLT5kcF9saW5rLnRlc3RfYXVkaW8udGVzdF9hdWRpb19wYXR0ZXJuX3R5cGUgPSBkYXRhOwot CXByX2RlYnVnKCJhdWRpbyBwYXR0ZXJuIHR5cGUgPSAlc1xuIiwKLQkJCWRwX2xpbmtfZ2V0X2F1 ZGlvX3Rlc3RfcGF0dGVybihkYXRhKSk7Ci1leGl0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRp YyBpbnQgZHBfbGlua19wYXJzZV9hdWRpb19tb2RlKHN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxp bmspCi17Ci0JaW50IHJldCA9IDA7Ci0JdTggYnA7Ci0JdTggZGF0YTsKLQlpbnQgcmxlbjsKLQlp bnQgY29uc3QgcGFyYW1fbGVuID0gMHgxOwotCWludCBjb25zdCBtYXhfYXVkaW9fc2FtcGxpbmdf cmF0ZSA9IDB4NjsKLQlpbnQgY29uc3QgbWF4X2F1ZGlvX2NoYW5uZWxfY291bnQgPSAweDg7Ci0J aW50IHNhbXBsaW5nX3JhdGUgPSAweDA7Ci0JaW50IGNoYW5uZWxfY291bnQgPSAweDA7Ci0KLQly bGVuID0gZHJtX2RwX2RwY2RfcmVhZChsaW5rLT5hdXgtPmRybV9hdXgsIERQX1RFU1RfQVVESU9f TU9ERSwKLQkJCSZicCwgcGFyYW1fbGVuKTsKLQlpZiAocmxlbiA8IHBhcmFtX2xlbikgewotCQlw cl9lcnIoImZhaWxlZCB0byByZWFkIGxpbmsgYXVkaW8gbW9kZSBkYXRhXG4iKTsKLQkJcmV0ID0g LUVJTlZBTDsKLQkJZ290byBleGl0OwotCX0KLQlkYXRhID0gYnA7Ci0KLQkvKiBTYW1wbGluZyBS YXRlIC0gQml0cyAzOjAgKi8KLQlzYW1wbGluZ19yYXRlID0gZGF0YSAmIDB4RjsKLQlpZiAoc2Ft cGxpbmdfcmF0ZSA+IG1heF9hdWRpb19zYW1wbGluZ19yYXRlKSB7Ci0JCXByX2Vycigic2FtcGxp bmcgcmF0ZSAoMHgleCkgZ3JlYXRlciB0aGFuIG1heCAoMHgleClcbiIsCi0JCQkJc2FtcGxpbmdf cmF0ZSwgbWF4X2F1ZGlvX3NhbXBsaW5nX3JhdGUpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3Rv IGV4aXQ7Ci0JfQotCi0JLyogQ2hhbm5lbCBDb3VudCAtIEJpdHMgNzo0ICovCi0JY2hhbm5lbF9j b3VudCA9ICgoZGF0YSAmIDB4RjApID4+IDQpICsgMTsKLQlpZiAoY2hhbm5lbF9jb3VudCA+IG1h eF9hdWRpb19jaGFubmVsX2NvdW50KSB7Ci0JCXByX2VycigiY2hhbm5lbF9jb3VudCAoMHgleCkg Z3JlYXRlciB0aGFuIG1heCAoMHgleClcbiIsCi0JCQkJY2hhbm5lbF9jb3VudCwgbWF4X2F1ZGlv X2NoYW5uZWxfY291bnQpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0J bGluay0+ZHBfbGluay50ZXN0X2F1ZGlvLnRlc3RfYXVkaW9fc2FtcGxpbmdfcmF0ZSA9IHNhbXBs aW5nX3JhdGU7Ci0JbGluay0+ZHBfbGluay50ZXN0X2F1ZGlvLnRlc3RfYXVkaW9fY2hhbm5lbF9j b3VudCA9IGNoYW5uZWxfY291bnQ7Ci0JcHJfZGVidWcoInNhbXBsaW5nX3JhdGUgPSAlcywgY2hh bm5lbF9jb3VudCA9IDB4JXhcbiIsCi0JCWRwX2xpbmtfZ2V0X2F1ZGlvX3NhbXBsZV9yYXRlKHNh bXBsaW5nX3JhdGUpLCBjaGFubmVsX2NvdW50KTsKLWV4aXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQot LyoqCi0gKiBkcF9wYXJzZV9hdWRpb19wYXR0ZXJuX3BhcmFtcygpIC0gcGFyc2VzIGF1ZGlvIHBh dHRlcm4gcGFyYW1ldGVycyBmcm9tIERQQ0QKLSAqIEBsaW5rOiBEaXNwbGF5IFBvcnQgRHJpdmVy IGRhdGEKLSAqCi0gKiBSZXR1cm5zIDAgaWYgaXQgc3VjY2Vzc2Z1bGx5IHBhcnNlcyB0aGUgYXVk aW8gbGluayBwYXR0ZXJuIHBhcmFtZXRlcnMuCi0gKi8KLXN0YXRpYyBpbnQgZHBfbGlua19wYXJz ZV9hdWRpb19wYXR0ZXJuX3BhcmFtcyhzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQotewot CWludCByZXQgPSAwOwotCi0JcmV0ID0gZHBfbGlua19wYXJzZV9hdWRpb19tb2RlKGxpbmspOwot CWlmIChyZXQpCi0JCWdvdG8gZXhpdDsKLQotCXJldCA9IGRwX2xpbmtfcGFyc2VfYXVkaW9fcGF0 dGVybl90eXBlKGxpbmspOwotCWlmIChyZXQpCi0JCWdvdG8gZXhpdDsKLQotCXJldCA9IGRwX2xp bmtfcGFyc2VfYXVkaW9fY2hhbm5lbF9wZXJpb2QobGluayk7Ci0KLWV4aXQ6Ci0JcmV0dXJuIHJl dDsKLX0KLQotLyoqCi0gKiBkcF9saW5rX2lzX3ZpZGVvX3BhdHRlcm5fdmFsaWQoKSAtIHZhbGlk YXRlcyB0aGUgdmlkZW8gcGF0dGVybgotICogQHBhdHRlcm46IHZpZGVvIHBhdHRlcm4gcmVxdWVz dGVkIGJ5IHRoZSBzaW5rCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0ZWQgdmlk ZW8gcGF0dGVybiBpcyBzdXBwb3J0ZWQuCi0gKi8KLXN0YXRpYyBib29sIGRwX2xpbmtfaXNfdmlk ZW9fcGF0dGVybl92YWxpZCh1MzIgcGF0dGVybikKLXsKLQlzd2l0Y2ggKHBhdHRlcm4pIHsKLQlj YXNlIERQX05PX1RFU1RfUEFUVEVSTjoKLQljYXNlIERQX0NPTE9SX1JBTVA6Ci0JY2FzZSBEUF9C TEFDS19BTkRfV0hJVEVfVkVSVElDQUxfTElORVM6Ci0JY2FzZSBEUF9DT0xPUl9TUVVBUkU6Ci0J CXJldHVybiB0cnVlOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci19Ci0KLXN0YXRp YyBjaGFyICpkcF9saW5rX3ZpZGVvX3BhdHRlcm5fdG9fc3RyaW5nKHUzMiB0ZXN0X3ZpZGVvX3Bh dHRlcm4pCi17Ci0Jc3dpdGNoICh0ZXN0X3ZpZGVvX3BhdHRlcm4pIHsKLQljYXNlIERQX05PX1RF U1RfUEFUVEVSTjoKLQkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoRFBfTk9fVEVTVF9QQVRURVJO KTsKLQljYXNlIERQX0NPTE9SX1JBTVA6Ci0JCXJldHVybiBEUF9MSU5LX0VOVU1fU1RSKERQX0NP TE9SX1JBTVApOwotCWNhc2UgRFBfQkxBQ0tfQU5EX1dISVRFX1ZFUlRJQ0FMX0xJTkVTOgotCQly ZXR1cm4gRFBfTElOS19FTlVNX1NUUihEUF9CTEFDS19BTkRfV0hJVEVfVkVSVElDQUxfTElORVMp OwotCWNhc2UgRFBfQ09MT1JfU1FVQVJFOgotCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihEUF9D T0xPUl9TUVVBUkUpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAidW5rbm93biI7Ci0JfQotfQotCi0v KioKLSAqIGRwX2xpbmtfaXNfZHluYW1pY19yYW5nZV92YWxpZCgpIC0gdmFsaWRhdGVzIHRoZSBk eW5hbWljIHJhbmdlCi0gKiBAYml0X2RlcHRoOiB0aGUgZHluYW1pYyByYW5nZSB2YWx1ZSB0byBi ZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBkeW5hbWljIHJhbmdlIHZhbHVl IGlzIHN1cHBvcnRlZC4KLSAqLwotc3RhdGljIGJvb2wgZHBfbGlua19pc19keW5hbWljX3Jhbmdl X3ZhbGlkKHUzMiBkcikKLXsKLQlzd2l0Y2ggKGRyKSB7Ci0JY2FzZSBEUF9EWU5BTUlDX1JBTkdF X1JHQl9WRVNBOgotCWNhc2UgRFBfRFlOQU1JQ19SQU5HRV9SR0JfQ0VBOgotCQlyZXR1cm4gdHJ1 ZTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQotCi1zdGF0aWMgY2hhciAqZHBf bGlua19keW5hbWljX3JhbmdlX3RvX3N0cmluZyh1MzIgZHIpCi17Ci0Jc3dpdGNoIChkcikgewot CWNhc2UgRFBfRFlOQU1JQ19SQU5HRV9SR0JfVkVTQToKLQkJcmV0dXJuIERQX0xJTktfRU5VTV9T VFIoRFBfRFlOQU1JQ19SQU5HRV9SR0JfVkVTQSk7Ci0JY2FzZSBEUF9EWU5BTUlDX1JBTkdFX1JH Ql9DRUE6Ci0JCXJldHVybiBEUF9MSU5LX0VOVU1fU1RSKERQX0RZTkFNSUNfUkFOR0VfUkdCX0NF QSk7Ci0JY2FzZSBEUF9EWU5BTUlDX1JBTkdFX1VOS05PV046Ci0JZGVmYXVsdDoKLQkJcmV0dXJu ICJ1bmtub3duIjsKLQl9Ci19Ci0KLS8qKgotICogZHBfbGlua19pc19iaXRfZGVwdGhfdmFsaWQo KSAtIHZhbGlkYXRlcyB0aGUgYml0IGRlcHRoIHJlcXVlc3RlZAotICogQGJpdF9kZXB0aDogYml0 IGRlcHRoIHJlcXVlc3RlZCBieSB0aGUgc2luawotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUg cmVxdWVzdGVkIGJpdCBkZXB0aCBpcyBzdXBwb3J0ZWQuCi0gKi8KLXN0YXRpYyBib29sIGRwX2xp bmtfaXNfYml0X2RlcHRoX3ZhbGlkKHUzMiB0YmQpCi17Ci0JLyogRFBfVEVTVF9WSURFT19QQVRU RVJOX05PTkUgaXMgdHJlYXRlZCBhcyBpbnZhbGlkICovCi0Jc3dpdGNoICh0YmQpIHsKLQljYXNl IERQX1RFU1RfQklUX0RFUFRIXzY6Ci0JY2FzZSBEUF9URVNUX0JJVF9ERVBUSF84OgotCWNhc2Ug RFBfVEVTVF9CSVRfREVQVEhfMTA6Ci0JCXJldHVybiB0cnVlOwotCWRlZmF1bHQ6Ci0JCXJldHVy biBmYWxzZTsKLQl9Ci19Ci0KLXN0YXRpYyBjaGFyICpkcF9saW5rX2JpdF9kZXB0aF90b19zdHJp bmcodTMyIHRiZCkKLXsKLQlzd2l0Y2ggKHRiZCkgewotCWNhc2UgRFBfVEVTVF9CSVRfREVQVEhf NjoKLQkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoRFBfVEVTVF9CSVRfREVQVEhfNik7Ci0JY2Fz ZSBEUF9URVNUX0JJVF9ERVBUSF84OgotCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihEUF9URVNU X0JJVF9ERVBUSF84KTsKLQljYXNlIERQX1RFU1RfQklUX0RFUFRIXzEwOgotCQlyZXR1cm4gRFBf TElOS19FTlVNX1NUUihEUF9URVNUX0JJVF9ERVBUSF8xMCk7Ci0JY2FzZSBEUF9URVNUX0JJVF9E RVBUSF9VTktOT1dOOgotCWRlZmF1bHQ6Ci0JCXJldHVybiAidW5rbm93biI7Ci0JfQotfQotCi1z dGF0aWMgaW50IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFtczEoc3RydWN0IGRwX2xpbmtfcHJp dmF0ZSAqbGluaywKLQlpbnQgY29uc3QgYWRkciwgaW50IGNvbnN0IGxlbiwgdTMyICp2YWwpCi17 Ci0JdTggYnBbMl07Ci0JaW50IHJsZW47Ci0KLQlpZiAobGVuIDwgMikKLQkJcmV0dXJuIC1FSU5W QUw7Ci0KLQkvKiBSZWFkIHRoZSByZXF1ZXN0ZWQgdmlkZW8gbGluayBwYXR0ZXJuIChCeXRlIDB4 MjIxKS4gKi8KLQlybGVuID0gZHJtX2RwX2RwY2RfcmVhZChsaW5rLT5hdXgtPmRybV9hdXgsIGFk ZHIsIGJwLCBsZW4pOwotCWlmIChybGVuIDwgbGVuKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHJl YWQgMHgleFxuIiwgYWRkcik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCSp2YWwgPSBicFsx XSB8IChicFswXSA8PCA4KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRwX2xpbmtf cGFyc2VfdGltaW5nX3BhcmFtczIoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaywKLQlpbnQg Y29uc3QgYWRkciwgaW50IGNvbnN0IGxlbiwgdTMyICp2YWwxLCB1MzIgKnZhbDIpCi17Ci0JdTgg YnBbMl07Ci0JaW50IHJsZW47Ci0KLQlpZiAobGVuIDwgMikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0K LQkvKiBSZWFkIHRoZSByZXF1ZXN0ZWQgdmlkZW8gbGluayBwYXR0ZXJuIChCeXRlIDB4MjIxKS4g Ki8KLQlybGVuID0gZHJtX2RwX2RwY2RfcmVhZChsaW5rLT5hdXgtPmRybV9hdXgsIGFkZHIsIGJw LCBsZW4pOwotCWlmIChybGVuIDwgbGVuKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHJlYWQgMHgl eFxuIiwgYWRkcik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCSp2YWwxID0gKGJwWzBdICYg QklUKDcpKSA+PiA3OwotCSp2YWwyID0gYnBbMV0gfCAoKGJwWzBdICYgMHg3RikgPDwgOCk7Ci0K LQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkcF9saW5rX3BhcnNlX3RpbWluZ19wYXJhbXMz KHN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmssCi0JaW50IGNvbnN0IGFkZHIsIHUzMiAqdmFs KQotewotCXU4IGJwOwotCXUzMiBsZW4gPSAxOwotCWludCBybGVuOwotCi0JcmxlbiA9IGRybV9k cF9kcGNkX3JlYWQobGluay0+YXV4LT5kcm1fYXV4LCBhZGRyLCAmYnAsIGxlbik7Ci0JaWYgKHJs ZW4gPCAxKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHJlYWQgMHgleFxuIiwgYWRkcik7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQkqdmFsID0gYnA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0g KiBkcF9wYXJzZV92aWRlb19wYXR0ZXJuX3BhcmFtcygpIC0gcGFyc2VzIHZpZGVvIHBhdHRlcm4g cGFyYW1ldGVycyBmcm9tIERQQ0QKLSAqIEBsaW5rOiBEaXNwbGF5IFBvcnQgRHJpdmVyIGRhdGEK LSAqCi0gKiBSZXR1cm5zIDAgaWYgaXQgc3VjY2Vzc2Z1bGx5IHBhcnNlcyB0aGUgdmlkZW8gbGlu ayBwYXR0ZXJuIGFuZCB0aGUgbGluawotICogYml0IGRlcHRoIHJlcXVlc3RlZCBieSB0aGUgc2lu ayBhbmQsIGFuZCBpZiB0aGUgdmFsdWVzIHBhcnNlZCBhcmUgdmFsaWQuCi0gKi8KLXN0YXRpYyBp bnQgZHBfbGlua19wYXJzZV92aWRlb19wYXR0ZXJuX3BhcmFtcyhzdHJ1Y3QgZHBfbGlua19wcml2 YXRlICpsaW5rKQotewotCWludCByZXQgPSAwOwotCWludCBybGVuOwotCXU4IGJwOwotCXU4IGRh dGE7Ci0JdTMyIGR5bl9yYW5nZTsKLQlpbnQgY29uc3QgcGFyYW1fbGVuID0gMHgxOwotCi0Jcmxl biA9IGRybV9kcF9kcGNkX3JlYWQobGluay0+YXV4LT5kcm1fYXV4LCBEUF9URVNUX1BBVFRFUk4s Ci0JCQkmYnAsIHBhcmFtX2xlbik7Ci0JaWYgKHJsZW4gPCBwYXJhbV9sZW4pIHsKLQkJcHJfZXJy KCJmYWlsZWQgdG8gcmVhZCBsaW5rIHZpZGVvIHBhdHRlcm5cbiIpOwotCQlyZXQgPSAtRUlOVkFM OwotCQlnb3RvIGV4aXQ7Ci0JfQotCWRhdGEgPSBicDsKLQotCWlmICghZHBfbGlua19pc192aWRl b19wYXR0ZXJuX3ZhbGlkKGRhdGEpKSB7Ci0JCXByX2VycigiaW52YWxpZCBsaW5rIHZpZGVvIHBh dHRlcm4gPSAweCV4XG4iLCBkYXRhKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBleGl0Owot CX0KLQotCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X3ZpZGVvX3BhdHRlcm4gPSBkYXRh OwotCXByX2RlYnVnKCJsaW5rIHZpZGVvIHBhdHRlcm4gPSAweCV4ICglcylcbiIsCi0JCWxpbmst PmRwX2xpbmsudGVzdF92aWRlby50ZXN0X3ZpZGVvX3BhdHRlcm4sCi0JCWRwX2xpbmtfdmlkZW9f cGF0dGVybl90b19zdHJpbmcoCi0JCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92aWRl b19wYXR0ZXJuKSk7Ci0KLQkvKiBSZWFkIHRoZSByZXF1ZXN0ZWQgY29sb3IgYml0IGRlcHRoIGFu ZCBkeW5hbWljIHJhbmdlIChCeXRlIDB4MjMyKSAqLwotCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFk KGxpbmstPmF1eC0+ZHJtX2F1eCwgRFBfVEVTVF9NSVNDMCwKLQkJCSZicCwgcGFyYW1fbGVuKTsK LQlpZiAocmxlbiA8IHBhcmFtX2xlbikgewotCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIGxpbmsg Yml0IGRlcHRoXG4iKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBleGl0OwotCX0KLQlkYXRh ID0gYnA7Ci0KLQkvKiBEeW5hbWljIFJhbmdlICovCi0JZHluX3JhbmdlID0gKGRhdGEgJiBEUF9U RVNUX0RZTkFNSUNfUkFOR0VfQ0VBKSA+PiAzOwotCWlmICghZHBfbGlua19pc19keW5hbWljX3Jh bmdlX3ZhbGlkKGR5bl9yYW5nZSkpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGxpbmsgZHluYW1pYyBy YW5nZSA9IDB4JXgiLCBkeW5fcmFuZ2UpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGV4aXQ7 Ci0JfQotCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2R5bl9yYW5nZSA9IGR5bl9yYW5n ZTsKLQlwcl9kZWJ1ZygibGluayBkeW5hbWljIHJhbmdlID0gMHgleCAoJXMpXG4iLAotCQlsaW5r LT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9keW5fcmFuZ2UsCi0JCWRwX2xpbmtfZHluYW1pY19y YW5nZV90b19zdHJpbmcoCi0JCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9keW5fcmFu Z2UpKTsKLQotCS8qIENvbG9yIGJpdCBkZXB0aCAqLwotCWRhdGEgJj0gRFBfVEVTVF9CSVRfREVQ VEhfTUFTSzsKLQlpZiAoIWRwX2xpbmtfaXNfYml0X2RlcHRoX3ZhbGlkKGRhdGEpKSB7Ci0JCXBy X2VycigiaW52YWxpZCBsaW5rIGJpdCBkZXB0aCA9IDB4JXhcbiIsIGRhdGEpOwotCQlyZXQgPSAt RUlOVkFMOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRl c3RfYml0X2RlcHRoID0gZGF0YTsKLQlwcl9kZWJ1ZygibGluayBiaXQgZGVwdGggPSAweCV4ICgl cylcbiIsCi0JCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2JpdF9kZXB0aCwKLQkJZHBf bGlua19iaXRfZGVwdGhfdG9fc3RyaW5nKAotCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVz dF9iaXRfZGVwdGgpKTsKLQotCS8qIHJlc29sdXRpb24gdGltaW5nIHBhcmFtcyAqLwotCXJldCA9 IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFtczEobGluaywgRFBfVEVTVF9IX1RPVEFMX0hJLCAy LAotCQkJJmxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2hfdG90YWwpOwotCWlmIChyZXQp IHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2UgdGVzdF9oX3RvdGFsIChEUF9URVNUX0hfVE9U QUxfSEkpXG4iKTsKLQkJZ290byBleGl0OwotCX0KLQlwcl9kZWJ1ZygiVEVTVF9IX1RPVEFMID0g JWRcbiIsIGxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2hfdG90YWwpOwotCi0JcmV0ID0g ZHBfbGlua19wYXJzZV90aW1pbmdfcGFyYW1zMShsaW5rLCBEUF9URVNUX1ZfVE9UQUxfSEksIDIs Ci0JCQkmbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3Rfdl90b3RhbCk7Ci0JaWYgKHJldCkg ewotCQlwcl9lcnIoImZhaWxlZCB0byBwYXJzZSB0ZXN0X3ZfdG90YWwgKERQX1RFU1RfVl9UT1RB TF9ISSlcbiIpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCXByX2RlYnVnKCJURVNUX1ZfVE9UQUwgPSAl ZFxuIiwgbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3Rfdl90b3RhbCk7Ci0KLQlyZXQgPSBk cF9saW5rX3BhcnNlX3RpbWluZ19wYXJhbXMxKGxpbmssIERQX1RFU1RfSF9TVEFSVF9ISSwgMiwK LQkJCSZsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9oX3N0YXJ0KTsKLQlpZiAocmV0KSB7 Ci0JCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIHRlc3RfaF9zdGFydCAoRFBfVEVTVF9IX1NUQVJU X0hJKVxuIik7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JcHJfZGVidWcoIlRFU1RfSF9TVEFSVCA9ICVk XG4iLCBsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9oX3N0YXJ0KTsKLQotCXJldCA9IGRw X2xpbmtfcGFyc2VfdGltaW5nX3BhcmFtczEobGluaywgRFBfVEVTVF9WX1NUQVJUX0hJLCAyLAot CQkJJmxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X3Zfc3RhcnQpOwotCWlmIChyZXQpIHsK LQkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2UgdGVzdF92X3N0YXJ0IChEUF9URVNUX1ZfU1RBUlRf SEkpXG4iKTsKLQkJZ290byBleGl0OwotCX0KLQlwcl9kZWJ1ZygiVEVTVF9WX1NUQVJUID0gJWRc biIsIGxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X3Zfc3RhcnQpOwotCi0JcmV0ID0gZHBf bGlua19wYXJzZV90aW1pbmdfcGFyYW1zMihsaW5rLCBEUF9URVNUX0hTWU5DX0hJLCAyLAotCQkJ JmxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2hzeW5jX3BvbCwKLQkJCSZsaW5rLT5kcF9s aW5rLnRlc3RfdmlkZW8udGVzdF9oc3luY193aWR0aCk7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIo ImZhaWxlZCB0byBwYXJzZSAoRFBfVEVTVF9IU1lOQ19ISSlcbiIpOwotCQlnb3RvIGV4aXQ7Ci0J fQotCXByX2RlYnVnKCJURVNUX0hTWU5DX1BPTCA9ICVkXG4iLAotCQlsaW5rLT5kcF9saW5rLnRl c3RfdmlkZW8udGVzdF9oc3luY19wb2wpOwotCXByX2RlYnVnKCJURVNUX0hTWU5DX1dJRFRIID0g JWRcbiIsCi0JCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2hzeW5jX3dpZHRoKTsKLQot CXJldCA9IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFtczIobGluaywgRFBfVEVTVF9WU1lOQ19I SSwgMiwKLQkJCSZsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92c3luY19wb2wsCi0JCQkm bGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfdnN5bmNfd2lkdGgpOwotCWlmIChyZXQpIHsK LQkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2UgKERQX1RFU1RfVlNZTkNfSEkpXG4iKTsKLQkJZ290 byBleGl0OwotCX0KLQlwcl9kZWJ1ZygiVEVTVF9WU1lOQ19QT0wgPSAlZFxuIiwKLQkJbGluay0+ ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfdnN5bmNfcG9sKTsKLQlwcl9kZWJ1ZygiVEVTVF9WU1lO Q19XSURUSCA9ICVkXG4iLAotCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92c3luY193 aWR0aCk7Ci0KLQlyZXQgPSBkcF9saW5rX3BhcnNlX3RpbWluZ19wYXJhbXMxKGxpbmssIERQX1RF U1RfSF9XSURUSF9ISSwgMiwKLQkJCSZsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9oX3dp ZHRoKTsKLQlpZiAocmV0KSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIHRlc3RfaF93aWR0 aCAoRFBfVEVTVF9IX1dJRFRIX0hJKVxuIik7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JcHJfZGVidWco IlRFU1RfSF9XSURUSCA9ICVkXG4iLCBsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9oX3dp ZHRoKTsKLQotCXJldCA9IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFtczEobGluaywgRFBfVEVT VF9WX0hFSUdIVF9ISSwgMiwKLQkJCSZsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92X2hl aWdodCk7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoImZhaWxlZCB0byBwYXJzZSB0ZXN0X3ZfaGVp Z2h0IChEUF9URVNUX1ZfSEVJR0hUX0hJKVxuIik7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JcHJfZGVi dWcoIlRFU1RfVl9IRUlHSFQgPSAlZFxuIiwKLQkJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRl c3Rfdl9oZWlnaHQpOwotCi0JcmV0ID0gZHBfbGlua19wYXJzZV90aW1pbmdfcGFyYW1zMyhsaW5r LCBEUF9URVNUX01JU0MxLAotCQkmbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfcnJfZCk7 Ci0JbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfcnJfZCAmPSBEUF9URVNUX1JFRlJFU0hf REVOT01JTkFUT1I7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoImZhaWxlZCB0byBwYXJzZSB0ZXN0 X3JyX2QgKERQX1RFU1RfTUlTQzEpXG4iKTsKLQkJZ290byBleGl0OwotCX0KLQlwcl9kZWJ1Zygi VEVTVF9SRUZSRVNIX0RFTk9NSU5BVE9SID0gJWRcbiIsCi0JCWxpbmstPmRwX2xpbmsudGVzdF92 aWRlby50ZXN0X3JyX2QpOwotCi0JcmV0ID0gZHBfbGlua19wYXJzZV90aW1pbmdfcGFyYW1zMyhs aW5rLCBEUF9URVNUX1JFRlJFU0hfUkFURV9OVU1FUkFUT1IsCi0JCSZsaW5rLT5kcF9saW5rLnRl c3RfdmlkZW8udGVzdF9ycl9uKTsKLQlpZiAocmV0KSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHBh cnNlIHRlc3RfcnJfbiAoRFBfVEVTVF9SRUZSRVNIX1JBVEVfTlVNRVJBVE9SKVxuIik7Ci0JCWdv dG8gZXhpdDsKLQl9Ci0JcHJfZGVidWcoIlRFU1RfUkVGUkVTSF9OVU1FUkFUT1IgPSAlZFxuIiwK LQkJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfcnJfbik7Ci1leGl0OgotCXJldHVybiBy ZXQ7Ci19Ci0KLS8qKgotICogZHBfbGlua19wYXJzZV9saW5rX3RyYWluaW5nX3BhcmFtcygpIC0g cGFyc2VzIGxpbmsgdHJhaW5pbmcgcGFyYW1ldGVycyBmcm9tCi0gKiBEUENECi0gKiBAbGluazog RGlzcGxheSBQb3J0IERyaXZlciBkYXRhCi0gKgotICogUmV0dXJucyAwIGlmIGl0IHN1Y2Nlc3Nm dWxseSBwYXJzZXMgdGhlIGxpbmsgcmF0ZSAoQnl0ZSAweDIxOSkgYW5kIGxhbmUKLSAqIGNvdW50 IChCeXRlIDB4MjIwKSwgYW5kIGlmIHRoZXNlIHZhbHVlcyBwYXJzZSBhcmUgdmFsaWQuCi0gKi8K LXN0YXRpYyBpbnQgZHBfbGlua19wYXJzZV9saW5rX3RyYWluaW5nX3BhcmFtcyhzdHJ1Y3QgZHBf bGlua19wcml2YXRlICpsaW5rKQotewotCXU4IGJwOwotCXU4IGRhdGE7Ci0JaW50IHJldCA9IDA7 Ci0JaW50IHJsZW47Ci0JaW50IGNvbnN0IHBhcmFtX2xlbiA9IDB4MTsKLQotCXJsZW4gPSBkcm1f ZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ZHJtX2F1eCwgRFBfVEVTVF9MSU5LX1JBVEUsCi0JCQkm YnAsIHBhcmFtX2xlbik7Ci0JaWYgKHJsZW4gPCBwYXJhbV9sZW4pIHsKLQkJcHJfZXJyKCJmYWls ZWQgdG8gcmVhZCBsaW5rIHJhdGVcbiIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGV4aXQ7 Ci0JfQotCWRhdGEgPSBicDsKLQotCWlmICghaXNfbGlua19yYXRlX3ZhbGlkKGRhdGEpKSB7Ci0J CXByX2VycigiaW52YWxpZCBsaW5rIHJhdGUgPSAweCV4XG4iLCBkYXRhKTsKLQkJcmV0ID0gLUVJ TlZBTDsKLQkJZ290byBleGl0OwotCX0KLQotCWxpbmstPnJlcXVlc3QudGVzdF9saW5rX3JhdGUg PSBkYXRhOwotCXByX2RlYnVnKCJsaW5rIHJhdGUgPSAweCV4XG4iLCBsaW5rLT5yZXF1ZXN0LnRl c3RfbGlua19yYXRlKTsKLQotCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ZHJt X2F1eCwgRFBfVEVTVF9MQU5FX0NPVU5ULAotCQkJJmJwLCBwYXJhbV9sZW4pOwotCWlmIChybGVu IDwgcGFyYW1fbGVuKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHJlYWQgbGFuZSBjb3VudFxuIik7 Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JZGF0YSA9IGJwOwotCWRhdGEg Jj0gMHgxRjsKLQotCWlmICghaXNfbGFuZV9jb3VudF92YWxpZChkYXRhKSkgewotCQlwcl9lcnIo ImludmFsaWQgbGFuZSBjb3VudCA9IDB4JXhcbiIsIGRhdGEpOwotCQlyZXQgPSAtRUlOVkFMOwot CQlnb3RvIGV4aXQ7Ci0JfQotCi0JbGluay0+cmVxdWVzdC50ZXN0X2xhbmVfY291bnQgPSBkYXRh OwotCXByX2RlYnVnKCJsYW5lIGNvdW50ID0gMHgleFxuIiwgbGluay0+cmVxdWVzdC50ZXN0X2xh bmVfY291bnQpOwotZXhpdDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgYm9vbCBkcF9saW5r X2lzX3BoeV90ZXN0X3BhdHRlcm5fc3VwcG9ydGVkKHUzMiBwaHlfdGVzdF9wYXR0ZXJuX3NlbCkK LXsKLQlzd2l0Y2ggKHBoeV90ZXN0X3BhdHRlcm5fc2VsKSB7Ci0JY2FzZSBEUF9URVNUX1BIWV9Q QVRURVJOX05PTkU6Ci0JY2FzZSBEUF9URVNUX1BIWV9QQVRURVJOX0QxMF8yX05PX1NDUkFNQkxJ Tkc6Ci0JY2FzZSBEUF9URVNUX1BIWV9QQVRURVJOX1NZTUJPTF9FUlJfTUVBU1VSRU1FTlRfQ05U OgotCWNhc2UgRFBfVEVTVF9QSFlfUEFUVEVSTl9QUkJTNzoKLQljYXNlIERQX1RFU1RfUEhZX1BB VFRFUk5fODBfQklUX0NVU1RPTV9QQVRURVJOOgotCWNhc2UgRFBfVEVTVF9QSFlfUEFUVEVSTl9I QlIyX0NUU19FWUVfUEFUVEVSTjoKLQkJcmV0dXJuIHRydWU7Ci0JZGVmYXVsdDoKLQkJcmV0dXJu IGZhbHNlOwotCX0KLX0KLQotLyoqCi0gKiBkcF9wYXJzZV9waHlfdGVzdF9wYXJhbXMoKSAtIHBh cnNlcyB0aGUgcGh5IGxpbmsgcGFyYW1ldGVycwotICogQGxpbms6IERpc3BsYXkgUG9ydCBEcml2 ZXIgZGF0YQotICoKLSAqIFBhcnNlcyB0aGUgRFBDRCAoQnl0ZSAweDI0OCkgZm9yIHRoZSBEUCBQ SFkgbGluayBwYXR0ZXJuIHRoYXQgaXMgYmVpbmcKLSAqIHJlcXVlc3RlZC4KLSAqLwotc3RhdGlj IGludCBkcF9saW5rX3BhcnNlX3BoeV90ZXN0X3BhcmFtcyhzdHJ1Y3QgZHBfbGlua19wcml2YXRl ICpsaW5rKQotewotCXU4IGJwOwotCXU4IGRhdGE7Ci0JaW50IHJsZW47Ci0JaW50IGNvbnN0IHBh cmFtX2xlbiA9IDB4MTsKLQlpbnQgcmV0ID0gMDsKLQotCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFk KGxpbmstPmF1eC0+ZHJtX2F1eCwgRFBfVEVTVF9QSFlfUEFUVEVSTiwKLQkJCSZicCwgcGFyYW1f bGVuKTsKLQlpZiAocmxlbiA8IHBhcmFtX2xlbikgewotCQlwcl9lcnIoImZhaWxlZCB0byByZWFk IHBoeSBsaW5rIHBhdHRlcm5cbiIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGVuZDsKLQl9 Ci0KLQlkYXRhID0gYnA7Ci0KLQlsaW5rLT5kcF9saW5rLnBoeV9wYXJhbXMucGh5X3Rlc3RfcGF0 dGVybl9zZWwgPSBkYXRhOwotCi0JcHJfZGVidWcoInBoeV90ZXN0X3BhdHRlcm5fc2VsID0gJXNc biIsCi0JCQlkcF9saW5rX2dldF9waHlfdGVzdF9wYXR0ZXJuKGRhdGEpKTsKLQotCWlmICghZHBf bGlua19pc19waHlfdGVzdF9wYXR0ZXJuX3N1cHBvcnRlZChkYXRhKSkKLQkJcmV0ID0gLUVJTlZB TDsKLWVuZDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgY2hhciAqZHBfbGlua19nZXRfdGVz dF9uYW1lKHUzMiB0ZXN0X3JlcXVlc3RlZCkKLXsKLQlzd2l0Y2ggKHRlc3RfcmVxdWVzdGVkKSB7 Ci0JY2FzZSBEUF9URVNUX0xJTktfVFJBSU5JTkc6Ci0JCXJldHVybiBEUF9MSU5LX0VOVU1fU1RS KERQX1RFU1RfTElOS19UUkFJTklORyk7Ci0JY2FzZSBEUF9URVNUX0xJTktfVklERU9fUEFUVEVS TjoKLQkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoRFBfVEVTVF9MSU5LX1ZJREVPX1BBVFRFUk4p OwotCWNhc2UgRFBfVEVTVF9MSU5LX0VESURfUkVBRDoKLQkJcmV0dXJuIERQX0xJTktfRU5VTV9T VFIoRFBfVEVTVF9MSU5LX0VESURfUkVBRCk7Ci0JY2FzZSBEUF9URVNUX0xJTktfUEhZX1RFU1Rf UEFUVEVSTjoKLQkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoRFBfVEVTVF9MSU5LX1BIWV9URVNU X1BBVFRFUk4pOwotCWNhc2UgRFBfVEVTVF9MSU5LX0FVRElPX1BBVFRFUk46Ci0JCXJldHVybiBE UF9MSU5LX0VOVU1fU1RSKERQX1RFU1RfTElOS19BVURJT19QQVRURVJOKTsKLQlkZWZhdWx0Ogot CQlyZXR1cm4gInVua25vd24iOwotCX0KLX0KLQotLyoqCi0gKiBkcF9saW5rX2lzX3ZpZGVvX2F1 ZGlvX3Rlc3RfcmVxdWVzdGVkKCkgLSBjaGVja3MgZm9yIGF1ZGlvL3ZpZGVvIGxpbmsgcmVxdWVz dAotICogQGxpbms6IGxpbmsgcmVxdWVzdGVkIGJ5IHRoZSBzaW5rCi0gKgotICogUmV0dXJucyB0 cnVlIGlmIHRoZSByZXF1ZXN0ZWQgbGluayBpcyBhIHBlcm1pdHRlZCBhdWRpby92aWRlbyBsaW5r LgotICovCi1zdGF0aWMgYm9vbCBkcF9saW5rX2lzX3ZpZGVvX2F1ZGlvX3Rlc3RfcmVxdWVzdGVk KHUzMiBsaW5rKQotewotCXJldHVybiAobGluayA9PSBEUF9URVNUX0xJTktfVklERU9fUEFUVEVS TikgfHwKLQkJKGxpbmsgPT0gKERQX1RFU1RfTElOS19BVURJT19QQVRURVJOIHwKLQkJRFBfVEVT VF9MSU5LX1ZJREVPX1BBVFRFUk4pKSB8fAotCQkobGluayA9PSBEUF9URVNUX0xJTktfQVVESU9f UEFUVEVSTikgfHwKLQkJKGxpbmsgPT0gKERQX1RFU1RfTElOS19BVURJT19QQVRURVJOIHwKLQkJ RFBfVEVTVF9MSU5LX0FVRElPX0RJU0FCTEVEX1ZJREVPKSk7Ci19Ci0KLS8qKgotICogZHBfbGlu a19zdXBwb3J0ZWQoKSAtIGNoZWNrcyBpZiBsaW5rIHJlcXVlc3RlZCBieSBzaW5rIGlzIHN1cHBv cnRlZAotICogQHRlc3RfcmVxdWVzdGVkOiBsaW5rIHJlcXVlc3RlZCBieSB0aGUgc2luawotICoK LSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIGxpbmsgaXMgc3VwcG9ydGVkLgotICov Ci1zdGF0aWMgYm9vbCBkcF9saW5rX2lzX3Rlc3Rfc3VwcG9ydGVkKHUzMiB0ZXN0X3JlcXVlc3Rl ZCkKLXsKLQlyZXR1cm4gKHRlc3RfcmVxdWVzdGVkID09IERQX1RFU1RfTElOS19UUkFJTklORykg fHwKLQkJKHRlc3RfcmVxdWVzdGVkID09IERQX1RFU1RfTElOS19FRElEX1JFQUQpIHx8Ci0JCSh0 ZXN0X3JlcXVlc3RlZCA9PSBEUF9URVNUX0xJTktfUEhZX1RFU1RfUEFUVEVSTikgfHwKLQkJZHBf bGlua19pc192aWRlb19hdWRpb190ZXN0X3JlcXVlc3RlZCh0ZXN0X3JlcXVlc3RlZCk7Ci19Ci0K LXN0YXRpYyBib29sIGRwX2xpbmtfaXNfdGVzdF9lZGlkX3JlYWQoc3RydWN0IGRwX2xpbmtfcHJp dmF0ZSAqbGluaykKLXsKLQlyZXR1cm4gKGxpbmstPnJlcXVlc3QudGVzdF9yZXF1ZXN0ZWQgPT0g RFBfVEVTVF9MSU5LX0VESURfUkVBRCk7Ci19Ci0KLS8qKgotICogZHBfc2lua19wYXJzZV90ZXN0 X3JlcXVlc3QoKSAtIHBhcnNlcyBsaW5rIHJlcXVlc3QgcGFyYW1ldGVycyBmcm9tIHNpbmsKLSAq IEBsaW5rOiBEaXNwbGF5IFBvcnQgRHJpdmVyIGRhdGEKLSAqCi0gKiBQYXJzZXMgdGhlIERQQ0Qg dG8gY2hlY2sgaWYgYW4gYXV0b21hdGVkIGxpbmsgaXMgcmVxdWVzdGVkIChCeXRlIDB4MjAxKSwK LSAqIGFuZCB3aGF0IHR5cGUgb2YgbGluayBhdXRvbWF0aW9uIGlzIGJlaW5nIHJlcXVlc3RlZCAo Qnl0ZSAweDIxOCkuCi0gKi8KLXN0YXRpYyBpbnQgZHBfbGlua19wYXJzZV9yZXF1ZXN0KHN0cnVj dCBkcF9saW5rX3ByaXZhdGUgKmxpbmspCi17Ci0JaW50IHJldCA9IDA7Ci0JdTggYnA7Ci0JdTgg ZGF0YTsKLQlpbnQgcmxlbjsKLQl1MzIgY29uc3QgcGFyYW1fbGVuID0gMHgxOwotCi0JLyoqCi0J ICogUmVhZCB0aGUgZGV2aWNlIHNlcnZpY2UgSVJRIHZlY3RvciAoQnl0ZSAweDIwMSkgdG8gZGV0 ZXJtaW5lCi0JICogd2hldGhlciBhbiBhdXRvbWF0ZWQgbGluayBoYXMgYmVlbiByZXF1ZXN0ZWQg YnkgdGhlIHNpbmsuCi0JICovCi0JcmxlbiA9IGRybV9kcF9kcGNkX3JlYWQobGluay0+YXV4LT5k cm1fYXV4LAotCQlEUF9ERVZJQ0VfU0VSVklDRV9JUlFfVkVDVE9SLCAmYnAsIHBhcmFtX2xlbik7 Ci0JaWYgKHJsZW4gPCBwYXJhbV9sZW4pIHsKLQkJcHJfZXJyKCJhdXggcmVhZCBmYWlsZWRcbiIp OwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlkYXRhID0gYnA7Ci0KLQlw cl9kZWJ1ZygiZGV2aWNlIHNlcnZpY2UgaXJxIHZlY3RvciA9IDB4JXhcbiIsIGRhdGEpOwotCi0J aWYgKCEoZGF0YSAmIERQX0FVVE9NQVRFRF9URVNUX1JFUVVFU1QpKSB7Ci0JCXByX2RlYnVnKCJu byB0ZXN0IHJlcXVlc3RlZFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qKgotCSAqIFJlYWQg dGhlIGxpbmsgcmVxdWVzdCBieXRlIChCeXRlIDB4MjE4KSB0byBkZXRlcm1pbmUgd2hhdCB0eXBl Ci0JICogb2YgYXV0b21hdGVkIGxpbmsgaGFzIGJlZW4gcmVxdWVzdGVkIGJ5IHRoZSBzaW5rLgot CSAqLwotCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ZHJtX2F1eCwgRFBfVEVT VF9SRVFVRVNULAotCQkJJmJwLCBwYXJhbV9sZW4pOwotCWlmIChybGVuIDwgcGFyYW1fbGVuKSB7 Ci0JCXByX2VycigiYXV4IHJlYWQgZmFpbGVkXG4iKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290 byBlbmQ7Ci0JfQotCi0JZGF0YSA9IGJwOwotCi0JaWYgKCFkcF9saW5rX2lzX3Rlc3Rfc3VwcG9y dGVkKGRhdGEpKSB7Ci0JCXByX2RlYnVnKCJsaW5rIDB4JXggbm90IHN1cHBvcnRlZFxuIiwgZGF0 YSk7Ci0JCWdvdG8gZW5kOwotCX0KLQotCXByX2RlYnVnKCIlcyAoMHgleCkgcmVxdWVzdGVkXG4i LCBkcF9saW5rX2dldF90ZXN0X25hbWUoZGF0YSksIGRhdGEpOwotCWxpbmstPnJlcXVlc3QudGVz dF9yZXF1ZXN0ZWQgPSBkYXRhOwotCi0JaWYgKGxpbmstPnJlcXVlc3QudGVzdF9yZXF1ZXN0ZWQg PT0gRFBfVEVTVF9MSU5LX1BIWV9URVNUX1BBVFRFUk4pIHsKLQkJcmV0ID0gZHBfbGlua19wYXJz ZV9waHlfdGVzdF9wYXJhbXMobGluayk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGVuZDsKLQkJcmV0 ID0gZHBfbGlua19wYXJzZV9saW5rX3RyYWluaW5nX3BhcmFtcyhsaW5rKTsKLQl9Ci0KLQlpZiAo bGluay0+cmVxdWVzdC50ZXN0X3JlcXVlc3RlZCA9PSBEUF9URVNUX0xJTktfVFJBSU5JTkcpCi0J CXJldCA9IGRwX2xpbmtfcGFyc2VfbGlua190cmFpbmluZ19wYXJhbXMobGluayk7Ci0KLQlpZiAo ZHBfbGlua19pc192aWRlb19hdWRpb190ZXN0X3JlcXVlc3RlZCgKLQkJCWxpbmstPnJlcXVlc3Qu dGVzdF9yZXF1ZXN0ZWQpKSB7Ci0JCXJldCA9IGRwX2xpbmtfcGFyc2VfdmlkZW9fcGF0dGVybl9w YXJhbXMobGluayk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGVuZDsKLQotCQlyZXQgPSBkcF9saW5r X3BhcnNlX2F1ZGlvX3BhdHRlcm5fcGFyYW1zKGxpbmspOwotCX0KLWVuZDoKLQkvKioKLQkgKiBT ZW5kIGEgRFBfVEVTVF9BQ0sgaWYgYWxsIGxpbmsgcGFyYW1ldGVycyBhcmUgdmFsaWQsIG90aGVy d2lzZSBzZW5kCi0JICogYSBEUF9URVNUX05BSy4KLQkgKi8KLQlpZiAocmV0KSB7Ci0JCWxpbmst PmRwX2xpbmsudGVzdF9yZXNwb25zZSA9IERQX1RFU1RfTkFLOwotCX0gZWxzZSB7Ci0JCWlmICgh ZHBfbGlua19pc190ZXN0X2VkaWRfcmVhZChsaW5rKSkKLQkJCWxpbmstPmRwX2xpbmsudGVzdF9y ZXNwb25zZSA9IERQX1RFU1RfQUNLOwotCQllbHNlCi0JCQlsaW5rLT5kcF9saW5rLnRlc3RfcmVz cG9uc2UgPQotCQkJCURQX1RFU1RfRURJRF9DSEVDS1NVTV9XUklURTsKLQl9Ci0KLQlyZXR1cm4g cmV0OwotfQotCi0vKioKLSAqIGRwX2xpbmtfcGFyc2Vfc2lua19jb3VudCgpIC0gcGFyc2VzIHRo ZSBzaW5rIGNvdW50Ci0gKgotICogUGFyc2VzIHRoZSBEUENEIHRvIGNoZWNrIGlmIHRoZXJlIGlz IGFuIHVwZGF0ZSB0byB0aGUgc2luayBjb3VudAotICogKEJ5dGUgMHgyMDApLCBhbmQgd2hldGhl ciBhbGwgdGhlIHNpbmsgZGV2aWNlcyBjb25uZWN0ZWQgaGF2ZSBDb250ZW50Ci0gKiBQcm90ZWN0 aW9uIGVuYWJsZWQuCi0gKi8KLXN0YXRpYyBpbnQgZHBfbGlua19wYXJzZV9zaW5rX2NvdW50KHN0 cnVjdCBkcF9saW5rICpkcF9saW5rKQotewotCWludCBybGVuOwotCWludCBjb25zdCBwYXJhbV9s ZW4gPSAweDE7Ci0Jc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluayA9IGNvbnRhaW5lcl9vZihk cF9saW5rLAotCQkJc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSwgZHBfbGluayk7Ci0KLQlybGVuID0g ZHJtX2RwX2RwY2RfcmVhZChsaW5rLT5hdXgtPmRybV9hdXgsIERQX1NJTktfQ09VTlQsCi0JCQkm bGluay0+ZHBfbGluay5zaW5rX2NvdW50LmNvdW50LCBwYXJhbV9sZW4pOwotCWlmIChybGVuIDwg cGFyYW1fbGVuKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHJlYWQgc2luayBjb3VudFxuIik7Ci0J CXJldHVybiAtRUlOVkFMOwotCX0KLQotCWxpbmstPmRwX2xpbmsuc2lua19jb3VudC5jcF9yZWFk eSA9Ci0JCWxpbmstPmRwX2xpbmsuc2lua19jb3VudC5jb3VudCAmIERQX1NJTktfQ1BfUkVBRFk7 Ci0JLyogQklUIDcsIEJJVCA1OjAgKi8KLQlsaW5rLT5kcF9saW5rLnNpbmtfY291bnQuY291bnQg PQotCQlEUF9HRVRfU0lOS19DT1VOVChsaW5rLT5kcF9saW5rLnNpbmtfY291bnQuY291bnQpOwot Ci0JcHJfZGVidWcoInNpbmtfY291bnQgPSAweCV4LCBjcF9yZWFkeSA9IDB4JXhcbiIsCi0JCWxp bmstPmRwX2xpbmsuc2lua19jb3VudC5jb3VudCwKLQkJbGluay0+ZHBfbGluay5zaW5rX2NvdW50 LmNwX3JlYWR5KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZHBfbGlua19wYXJzZV9z aW5rX3N0YXR1c19maWVsZChzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQotewotCWludCBs ZW4gPSAwOwotCi0JbGluay0+cHJldl9zaW5rX2NvdW50ID0gbGluay0+ZHBfbGluay5zaW5rX2Nv dW50LmNvdW50OwotCWRwX2xpbmtfcGFyc2Vfc2lua19jb3VudCgmbGluay0+ZHBfbGluayk7Ci0K LQlsZW4gPSBkcm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKGxpbmstPmF1eC0+ZHJtX2F1eCwK LQkJbGluay0+bGlua19zdGF0dXMpOwotCWlmIChsZW4gPCBEUF9MSU5LX1NUQVRVU19TSVpFKQot CQlwcl9lcnIoIkRQIGxpbmsgc3RhdHVzIHJlYWQgZmFpbGVkXG4iKTsKLQlkcF9saW5rX3BhcnNl X3JlcXVlc3QobGluayk7Ci19Ci0KLXN0YXRpYyBib29sIGRwX2xpbmtfaXNfbGlua190cmFpbmlu Z19yZXF1ZXN0ZWQoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKLXsKLQlyZXR1cm4gKGxp bmstPnJlcXVlc3QudGVzdF9yZXF1ZXN0ZWQgPT0gRFBfVEVTVF9MSU5LX1RSQUlOSU5HKTsKLX0K LQotLyoqCi0gKiBkcF9saW5rX3Byb2Nlc3NfbGlua190cmFpbmluZ19yZXF1ZXN0KCkgLSBwcm9j ZXNzZXMgbmV3IHRyYWluaW5nIHJlcXVlc3RzCi0gKiBAbGluazogRGlzcGxheSBQb3J0IGxpbmsg ZGF0YQotICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBoYW5kbGUgbmV3IGxpbmsgdHJhaW5pbmcg cmVxdWVzdHMgdGhhdCBhcmUgaW5pdGlhdGVkIGJ5Ci0gKiB0aGUgc2luay4gSW4gcGFydGljdWxh ciwgaXQgd2lsbCB1cGRhdGUgdGhlIHJlcXVlc3RlZCBsYW5lIGNvdW50IGFuZCBsaW5rCi0gKiBs aW5rIHJhdGUsIGFuZCB0aGVuIHRyaWdnZXIgdGhlIGxpbmsgcmV0cmFpbmluZyBwcm9jZWR1cmUu Ci0gKgotICogVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAgaWYgYSBsaW5rIHRyYWluaW5nIHJl cXVlc3QgaGFzIGJlZW4gcHJvY2Vzc2VkLAotICogb3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIC1F SU5WQUwuCi0gKi8KLXN0YXRpYyBpbnQgZHBfbGlua19wcm9jZXNzX2xpbmtfdHJhaW5pbmdfcmVx dWVzdChzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQotewotCWlmICghZHBfbGlua19pc19s aW5rX3RyYWluaW5nX3JlcXVlc3RlZChsaW5rKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwcl9k ZWJ1ZygiJXMgbGluayByYXRlID0gMHgleCwgbGFuZSBjb3VudCA9IDB4JXhcbiIsCi0JCQlkcF9s aW5rX2dldF90ZXN0X25hbWUoRFBfVEVTVF9MSU5LX1RSQUlOSU5HKSwKLQkJCWxpbmstPnJlcXVl c3QudGVzdF9saW5rX3JhdGUsCi0JCQlsaW5rLT5yZXF1ZXN0LnRlc3RfbGFuZV9jb3VudCk7Ci0K LQlsaW5rLT5kcF9saW5rLmxpbmtfcGFyYW1zLmxhbmVfY291bnQgPSBsaW5rLT5yZXF1ZXN0LnRl c3RfbGFuZV9jb3VudDsKLQlsaW5rLT5kcF9saW5rLmxpbmtfcGFyYW1zLmJ3X2NvZGUgPSBsaW5r LT5yZXF1ZXN0LnRlc3RfbGlua19yYXRlOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lk IGRwX2xpbmtfc2VuZF90ZXN0X3Jlc3BvbnNlKHN0cnVjdCBkcF9saW5rICpkcF9saW5rKQotewot CXN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmsgPSBOVUxMOwotCXUzMiBjb25zdCByZXNwb25z ZV9sZW4gPSAweDE7Ci0KLQlpZiAoIWRwX2xpbmspIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0 XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWxpbmsgPSBjb250YWluZXJfb2YoZHBfbGluaywgc3Ry dWN0IGRwX2xpbmtfcHJpdmF0ZSwgZHBfbGluayk7Ci0KLQlkcm1fZHBfZHBjZF93cml0ZShsaW5r LT5hdXgtPmRybV9hdXgsIERQX1RFU1RfUkVTUE9OU0UsCi0JCQkmZHBfbGluay0+dGVzdF9yZXNw b25zZSwgcmVzcG9uc2VfbGVuKTsKLX0KLQotc3RhdGljIGludCBkcF9saW5rX3BzbV9jb25maWco c3RydWN0IGRwX2xpbmsgKmRwX2xpbmssCi0Jc3RydWN0IGRybV9kcF9saW5rICpsaW5rX2luZm8s IGJvb2wgZW5hYmxlKQotewotCXN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmsgPSBOVUxMOwot CWludCByZXQgPSAwOwotCi0JaWYgKCFkcF9saW5rKSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJh bXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlsaW5rID0gY29udGFpbmVyX29mKGRw X2xpbmssIHN0cnVjdCBkcF9saW5rX3ByaXZhdGUsIGRwX2xpbmspOwotCi0JaWYgKGVuYWJsZSkK LQkJcmV0ID0gZHJtX2RwX2xpbmtfcG93ZXJfZG93bihsaW5rLT5hdXgtPmRybV9hdXgsIGxpbmtf aW5mbyk7Ci0JZWxzZQotCQlyZXQgPSBkcm1fZHBfbGlua19wb3dlcl91cChsaW5rLT5hdXgtPmRy bV9hdXgsIGxpbmtfaW5mbyk7Ci0KLQlpZiAocmV0KQotCQlwcl9lcnIoIkZhaWxlZCB0byAlcyBs b3cgcG93ZXIgbW9kZVxuIiwKLQkJCShlbmFibGUgPyAiZW50ZXIiIDogImV4aXQiKSk7Ci0JZWxz ZQotCQlkcF9saW5rLT5wc21fZW5hYmxlZCA9IGVuYWJsZTsKLQotCXJldHVybiByZXQ7Ci19Ci0K LXN0YXRpYyB2b2lkIGRwX2xpbmtfc2VuZF9lZGlkX2NoZWNrc3VtKHN0cnVjdCBkcF9saW5rICpk cF9saW5rLCB1OCBjaGVja3N1bSkKLXsKLQlzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rID0g TlVMTDsKLQl1MzIgY29uc3QgcmVzcG9uc2VfbGVuID0gMHgxOwotCi0JaWYgKCFkcF9saW5rKSB7 Ci0JCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlsaW5rID0g Y29udGFpbmVyX29mKGRwX2xpbmssIHN0cnVjdCBkcF9saW5rX3ByaXZhdGUsIGRwX2xpbmspOwot Ci0JZHJtX2RwX2RwY2Rfd3JpdGUobGluay0+YXV4LT5kcm1fYXV4LCBEUF9URVNUX0VESURfQ0hF Q0tTVU0sCi0JCQkmY2hlY2tzdW0sIHJlc3BvbnNlX2xlbik7Ci19Ci0KLXN0YXRpYyBpbnQgZHBf bGlua19wYXJzZV92eF9weChzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQotewotCXU4IGJw OwotCXU4IGRhdGE7Ci0JaW50IGNvbnN0IHBhcmFtX2xlbiA9IDB4MTsKLQlpbnQgcmV0ID0gMDsK LQl1MzIgdjAsIHAwLCB2MSwgcDEsIHYyLCBwMiwgdjMsIHAzOwotCWludCBybGVuOwotCi0JcHJf ZGVidWcoIlxuIik7Ci0KLQlybGVuID0gZHJtX2RwX2RwY2RfcmVhZChsaW5rLT5hdXgtPmRybV9h dXgsIERQX0FESlVTVF9SRVFVRVNUX0xBTkUwXzEsCi0JCQkmYnAsIHBhcmFtX2xlbik7Ci0JaWYg KHJsZW4gPCBwYXJhbV9sZW4pIHsKLQkJcHJfZXJyKCJmYWlsZWQgcmVhZGluZyBsYW5lcyAwLzFc biIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlkYXRhID0gYnA7Ci0K LQlwcl9kZWJ1ZygibGFuZXMgMC8xIChCeXRlIDB4MjA2KTogMHgleFxuIiwgZGF0YSk7Ci0KLQl2 MCA9IGRhdGEgJiAweDM7Ci0JZGF0YSA9IGRhdGEgPj4gMjsKLQlwMCA9IGRhdGEgJiAweDM7Ci0J ZGF0YSA9IGRhdGEgPj4gMjsKLQotCXYxID0gZGF0YSAmIDB4MzsKLQlkYXRhID0gZGF0YSA+PiAy OwotCXAxID0gZGF0YSAmIDB4MzsKLQlkYXRhID0gZGF0YSA+PiAyOwotCi0JcmxlbiA9IGRybV9k cF9kcGNkX3JlYWQobGluay0+YXV4LT5kcm1fYXV4LCBEUF9BREpVU1RfUkVRVUVTVF9MQU5FMl8z LAotCQkJJmJwLCBwYXJhbV9sZW4pOwotCWlmIChybGVuIDwgcGFyYW1fbGVuKSB7Ci0JCXByX2Vy cigiZmFpbGVkIHJlYWRpbmcgbGFuZXMgMi8zXG4iKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290 byBlbmQ7Ci0JfQotCi0JZGF0YSA9IGJwOwotCi0JcHJfZGVidWcoImxhbmVzIDIvMyAoQnl0ZSAw eDIwNyk6IDB4JXhcbiIsIGRhdGEpOwotCi0JdjIgPSBkYXRhICYgMHgzOwotCWRhdGEgPSBkYXRh ID4+IDI7Ci0JcDIgPSBkYXRhICYgMHgzOwotCWRhdGEgPSBkYXRhID4+IDI7Ci0KLQl2MyA9IGRh dGEgJiAweDM7Ci0JZGF0YSA9IGRhdGEgPj4gMjsKLQlwMyA9IGRhdGEgJiAweDM7Ci0JZGF0YSA9 IGRhdGEgPj4gMjsKLQotCXByX2RlYnVnKCJ2eDogMD0lZCwgMT0lZCwgMj0lZCwgMz0lZFxuIiwg djAsIHYxLCB2MiwgdjMpOwotCXByX2RlYnVnKCJweDogMD0lZCwgMT0lZCwgMj0lZCwgMz0lZFxu IiwgcDAsIHAxLCBwMiwgcDMpOwotCi0JLyoqCi0JICogVXBkYXRlIHRoZSB2b2x0YWdlIGFuZCBw cmUtZW1waGFzaXMgbGV2ZWxzIGFzIHBlciBEUENEIHJlcXVlc3QKLQkgKiB2ZWN0b3IuCi0JICov Ci0JcHJfZGVidWcoIkN1cnJlbnQ6IHZfbGV2ZWwgPSAweCV4LCBwX2xldmVsID0gMHgleFxuIiwK LQkJCWxpbmstPmRwX2xpbmsucGh5X3BhcmFtcy52X2xldmVsLAotCQkJbGluay0+ZHBfbGluay5w aHlfcGFyYW1zLnBfbGV2ZWwpOwotCXByX2RlYnVnKCJSZXF1ZXN0ZWQ6IHZfbGV2ZWwgPSAweCV4 LCBwX2xldmVsID0gMHgleFxuIiwgdjAsIHAwKTsKLQlsaW5rLT5kcF9saW5rLnBoeV9wYXJhbXMu dl9sZXZlbCA9IHYwOwotCWxpbmstPmRwX2xpbmsucGh5X3BhcmFtcy5wX2xldmVsID0gcDA7Ci0K LQlwcl9kZWJ1ZygiU3VjY2Vzc1xuIik7Ci1lbmQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0g KiBkcF9saW5rX3Byb2Nlc3NfcGh5X3Rlc3RfcGF0dGVybl9yZXF1ZXN0KCkgLSBwcm9jZXNzIG5l dyBwaHkgbGluayByZXF1ZXN0cwotICogQGxpbms6IERpc3BsYXkgUG9ydCBEcml2ZXIgZGF0YQot ICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBoYW5kbGUgbmV3IHBoeSBsaW5rIHBhdHRlcm4gcmVx dWVzdHMgdGhhdCBhcmUgaW5pdGlhdGVkCi0gKiBieSB0aGUgc2luay4gVGhlIGZ1bmN0aW9uIHdp bGwgcmV0dXJuIDAgaWYgYSBwaHkgbGluayBwYXR0ZXJuIGhhcyBiZWVuCi0gKiBwcm9jZXNzZWQs IG90aGVyd2lzZSBpdCB3aWxsIHJldHVybiAtRUlOVkFMLgotICovCi1zdGF0aWMgaW50IGRwX2xp bmtfcHJvY2Vzc19waHlfdGVzdF9wYXR0ZXJuX3JlcXVlc3QoCi0JCXN0cnVjdCBkcF9saW5rX3By aXZhdGUgKmxpbmspCi17Ci0JdTMyIHRlc3RfbGlua19yYXRlID0gMCwgdGVzdF9sYW5lX2NvdW50 ID0gMDsKLQotCWlmICghKGxpbmstPnJlcXVlc3QudGVzdF9yZXF1ZXN0ZWQgJiBEUF9URVNUX0xJ TktfUEhZX1RFU1RfUEFUVEVSTikpIHsKLQkJcHJfZGVidWcoIm5vIHBoeSB0ZXN0XG4iKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JdGVzdF9saW5rX3JhdGUgPSBsaW5rLT5yZXF1ZXN0LnRl c3RfbGlua19yYXRlOwotCXRlc3RfbGFuZV9jb3VudCA9IGxpbmstPnJlcXVlc3QudGVzdF9sYW5l X2NvdW50OwotCi0JaWYgKCFpc19saW5rX3JhdGVfdmFsaWQodGVzdF9saW5rX3JhdGUpIHx8Ci0J CSFpc19sYW5lX2NvdW50X3ZhbGlkKHRlc3RfbGFuZV9jb3VudCkpIHsKLQkJcHJfZXJyKCJJbnZh bGlkIHBhcmFtczogbGluayByYXRlID0gMHgleCwgbGFuZSBjb3VudCA9IDB4JXhcbiIsCi0JCQkJ dGVzdF9saW5rX3JhdGUsIHRlc3RfbGFuZV9jb3VudCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0K LQotCXByX2RlYnVnKCJzdGFydFxuIik7Ci0KLQlwcl9pbmZvKCJDdXJyZW50OiBid19jb2RlID0g MHgleCwgbGFuZSBjb3VudCA9IDB4JXhcbiIsCi0JCQlsaW5rLT5kcF9saW5rLmxpbmtfcGFyYW1z LmJ3X2NvZGUsCi0JCQlsaW5rLT5kcF9saW5rLmxpbmtfcGFyYW1zLmxhbmVfY291bnQpOwotCi0J cHJfaW5mbygiUmVxdWVzdGVkOiBid19jb2RlID0gMHgleCwgbGFuZSBjb3VudCA9IDB4JXhcbiIs Ci0JCQl0ZXN0X2xpbmtfcmF0ZSwgdGVzdF9sYW5lX2NvdW50KTsKLQotCWxpbmstPmRwX2xpbmsu bGlua19wYXJhbXMubGFuZV9jb3VudCA9IGxpbmstPnJlcXVlc3QudGVzdF9sYW5lX2NvdW50Owot CWxpbmstPmRwX2xpbmsubGlua19wYXJhbXMuYndfY29kZSA9IGxpbmstPnJlcXVlc3QudGVzdF9s aW5rX3JhdGU7Ci0KLQlkcF9saW5rX3BhcnNlX3Z4X3B4KGxpbmspOwotCi0JcHJfZGVidWcoImVu ZFxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHU4IGdldF9saW5rX3N0YXR1cyhjb25z dCB1OCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSwgaW50IHIpCi17Ci0JcmV0dXJu IGxpbmtfc3RhdHVzW3IgLSBEUF9MQU5FMF8xX1NUQVRVU107Ci19Ci0KLS8qKgotICogZHBfbGlu a19wcm9jZXNzX2xpbmtfc3RhdHVzX3VwZGF0ZSgpIC0gcHJvY2Vzc2VzIGxpbmsgc3RhdHVzIHVw ZGF0ZXMKLSAqIEBsaW5rOiBEaXNwbGF5IFBvcnQgbGluayBtb2R1bGUgZGF0YQotICoKLSAqIFRo aXMgZnVuY3Rpb24gd2lsbCBjaGVjayBmb3IgY2hhbmdlcyBpbiB0aGUgbGluayBzdGF0dXMsIGUu Zy4gY2xvY2sKLSAqIHJlY292ZXJ5IGRvbmUgb24gYWxsIGxhbmVzLCBhbmQgdHJpZ2dlciBsaW5r IHRyYWluaW5nIGlmIHRoZXJlIGlzIGEKLSAqIGZhaWx1cmUvZXJyb3Igb24gdGhlIGxpbmsuCi0g KgotICogVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAgaWYgdGhlIGEgbGluayBzdGF0dXMgdXBk YXRlIGhhcyBiZWVuIHByb2Nlc3NlZCwKLSAqIG90aGVyd2lzZSBpdCB3aWxsIHJldHVybiAtRUlO VkFMLgotICovCi1zdGF0aWMgaW50IGRwX2xpbmtfcHJvY2Vzc19saW5rX3N0YXR1c191cGRhdGUo c3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKLXsKLQlpZiAoIShnZXRfbGlua19zdGF0dXMo bGluay0+bGlua19zdGF0dXMsIERQX0xBTkVfQUxJR05fU1RBVFVTX1VQREFURUQpICYKLQkJRFBf TElOS19TVEFUVVNfVVBEQVRFRCkgfHwgLyogbGluayBzdGF0dXMgdXBkYXRlZCAqLwotCQkoZHJt X2RwX2Nsb2NrX3JlY292ZXJ5X29rKGxpbmstPmxpbmtfc3RhdHVzLAotCQkJbGluay0+ZHBfbGlu ay5saW5rX3BhcmFtcy5sYW5lX2NvdW50KSAmJgotCSAgICAgZHJtX2RwX2NoYW5uZWxfZXFfb2so bGluay0+bGlua19zdGF0dXMsCi0JCQlsaW5rLT5kcF9saW5rLmxpbmtfcGFyYW1zLmxhbmVfY291 bnQpKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwcl9kZWJ1ZygiY2hhbm5lbF9lcV9kb25lID0g JWQsIGNsb2NrX3JlY292ZXJ5X2RvbmUgPSAlZFxuIiwKLQkJCWRybV9kcF9jbG9ja19yZWNvdmVy eV9vayhsaW5rLT5saW5rX3N0YXR1cywKLQkJCWxpbmstPmRwX2xpbmsubGlua19wYXJhbXMubGFu ZV9jb3VudCksCi0JCQlkcm1fZHBfY2xvY2tfcmVjb3Zlcnlfb2sobGluay0+bGlua19zdGF0dXMs Ci0JCQlsaW5rLT5kcF9saW5rLmxpbmtfcGFyYW1zLmxhbmVfY291bnQpKTsKLQotCXJldHVybiAw OwotfQotCi1zdGF0aWMgYm9vbCBkcF9saW5rX2lzX2RzX3BvcnRfc3RhdHVzX2NoYW5nZWQoc3Ry dWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKLXsKLQlpZiAoZ2V0X2xpbmtfc3RhdHVzKGxpbmst Pmxpbmtfc3RhdHVzLCBEUF9MQU5FX0FMSUdOX1NUQVRVU19VUERBVEVEKSAmCi0JCURQX0RPV05T VFJFQU1fUE9SVF9TVEFUVVNfQ0hBTkdFRCkgLyogcG9ydCBzdGF0dXMgY2hhbmdlZCAqLwotCQly ZXR1cm4gdHJ1ZTsKLQotCWlmIChsaW5rLT5wcmV2X3NpbmtfY291bnQgIT0gbGluay0+ZHBfbGlu ay5zaW5rX2NvdW50LmNvdW50KQotCQlyZXR1cm4gdHJ1ZTsKLQotCXJldHVybiBmYWxzZTsKLX0K LQotLyoqCi0gKiBkcF9saW5rX3Byb2Nlc3NfZG93bnN0cmVhbV9wb3J0X3N0YXR1c19jaGFuZ2Uo KSAtIHByb2Nlc3MgcG9ydCBzdGF0dXMgY2hhbmdlcwotICogQGxpbms6IERpc3BsYXkgUG9ydCBE cml2ZXIgZGF0YQotICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBoYW5kbGUgZG93bnN0cmVhbSBw b3J0IHVwZGF0ZXMgdGhhdCBhcmUgaW5pdGlhdGVkIGJ5Ci0gKiB0aGUgc2luay4gSWYgdGhlIGRv d25zdHJlYW0gcG9ydCBzdGF0dXMgaGFzIGNoYW5nZWQsIHRoZSBFRElEIGlzIHJlYWQgdmlhCi0g KiBBVVguCi0gKgotICogVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAgaWYgYSBkb3duc3RyZWFt IHBvcnQgdXBkYXRlIGhhcyBiZWVuCi0gKiBwcm9jZXNzZWQsIG90aGVyd2lzZSBpdCB3aWxsIHJl dHVybiAtRUlOVkFMLgotICovCi1zdGF0aWMgaW50IGRwX2xpbmtfcHJvY2Vzc19kc19wb3J0X3N0 YXR1c19jaGFuZ2Uoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKLXsKLQlpZiAoIWRwX2xp bmtfaXNfZHNfcG9ydF9zdGF0dXNfY2hhbmdlZChsaW5rKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0K LQkvKiByZXNldCBwcmV2X3NpbmtfY291bnQgKi8KLQlsaW5rLT5wcmV2X3NpbmtfY291bnQgPSBs aW5rLT5kcF9saW5rLnNpbmtfY291bnQuY291bnQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGlj IGJvb2wgZHBfbGlua19pc192aWRlb19wYXR0ZXJuX3JlcXVlc3RlZChzdHJ1Y3QgZHBfbGlua19w cml2YXRlICpsaW5rKQotewotCXJldHVybiAobGluay0+cmVxdWVzdC50ZXN0X3JlcXVlc3RlZCAm IERQX1RFU1RfTElOS19WSURFT19QQVRURVJOKQotCQkmJiAhKGxpbmstPnJlcXVlc3QudGVzdF9y ZXF1ZXN0ZWQgJgotCQlEUF9URVNUX0xJTktfQVVESU9fRElTQUJMRURfVklERU8pOwotfQotCi1z dGF0aWMgYm9vbCBkcF9saW5rX2lzX2F1ZGlvX3BhdHRlcm5fcmVxdWVzdGVkKHN0cnVjdCBkcF9s aW5rX3ByaXZhdGUgKmxpbmspCi17Ci0JcmV0dXJuIChsaW5rLT5yZXF1ZXN0LnRlc3RfcmVxdWVz dGVkICYgRFBfVEVTVF9MSU5LX0FVRElPX1BBVFRFUk4pOwotfQotCi0vKioKLSAqIGRwX2xpbmtf cHJvY2Vzc192aWRlb19wYXR0ZXJuX3JlcXVlc3QoKSAtIHByb2Nlc3MgbmV3IHZpZGVvIHBhdHRl cm4gcmVxdWVzdAotICogQGxpbms6IERpc3BsYXkgUG9ydCBsaW5rIG1vZHVsZSdzIGRhdGEKLSAq Ci0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgaGFuZGxlIGEgbmV3IHZpZGVvIHBhdHRlcm4gcmVxdWVz dCB0aGF0IGFyZSBpbml0aWF0ZWQgYnkKLSAqIHRoZSBzaW5rLiBUaGlzIGlzIGFjaGVpZXZlZCBi eSBmaXJzdCBzZW5kaW5nIGEgZGlzY29ubmVjdCBub3RpZmljYXRpb24gdG8KLSAqIHRoZSBzaW5r IGZvbGxvd2VkIGJ5IGEgc3Vic2VxdWVudCBjb25uZWN0IG5vdGlmaWNhdGlvbiB0byB0aGUgdXNl ciBtb2R1bGVzLAotICogd2hlcmUgaXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgdXNlciBtb2R1bGVz IHdvdWxkIGRyYXcgdGhlIHJlcXVpcmVkIGxpbmsKLSAqIHBhdHRlcm4uCi0gKi8KLXN0YXRpYyBp bnQgZHBfbGlua19wcm9jZXNzX3ZpZGVvX3BhdHRlcm5fcmVxdWVzdChzdHJ1Y3QgZHBfbGlua19w cml2YXRlICpsaW5rKQotewotCWlmICghZHBfbGlua19pc192aWRlb19wYXR0ZXJuX3JlcXVlc3Rl ZChsaW5rKSkKLQkJZ290byBlbmQ7Ci0KLQlwcl9kZWJ1ZygiJXM6IGJpdCBkZXB0aD0lZCglZCBi cHApIHBhdHRlcm49JXNcbiIsCi0JCWRwX2xpbmtfZ2V0X3Rlc3RfbmFtZShEUF9URVNUX0xJTktf VklERU9fUEFUVEVSTiksCi0JCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2JpdF9kZXB0 aCwKLQkJZHBfbGlua19iaXRfZGVwdGhfdG9fYnBwKAotCQlsaW5rLT5kcF9saW5rLnRlc3Rfdmlk ZW8udGVzdF9iaXRfZGVwdGgpLAotCQlkcF9saW5rX3ZpZGVvX3BhdHRlcm5fdG9fc3RyaW5nKAot CQkJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfdmlkZW9fcGF0dGVybikpOwotCi0JcmV0 dXJuIDA7Ci1lbmQ6Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLS8qKgotICogZHBfbGlua19wcm9j ZXNzX2F1ZGlvX3BhdHRlcm5fcmVxdWVzdCgpIC0gcHJvY2VzcyBuZXcgYXVkaW8gcGF0dGVybiBy ZXF1ZXN0Ci0gKiBAbGluazogRGlzcGxheSBQb3J0IGxpbmsgbW9kdWxlIGRhdGEKLSAqCi0gKiBU aGlzIGZ1bmN0aW9uIHdpbGwgaGFuZGxlIGEgbmV3IGF1ZGlvIHBhdHRlcm4gcmVxdWVzdCB0aGF0 IGlzIGluaXRpYXRlZCBieQotICogdGhlIHNpbmsuIFRoaXMgaXMgYWNoZWlldmVkIGJ5IHNlbmRp bmcgdGhlIG5lY2Vzc2FyeSBzZWNvbmRhcnkgZGF0YSBwYWNrZXRzCi0gKiB0byB0aGUgc2luay4g SXQgaXMgZXhwZWN0ZWQgdGhhdCBhbnkgc2ltdWxhdGVub3VzIHJlcXVlc3RzIGZvciB2aWRlbwot ICogcGF0dGVybnMgd2lsbCBiZSBoYW5kbGVkIGJlZm9yZSB0aGUgYXVkaW8gcGF0dGVybiBpcyBz ZW50IHRvIHRoZSBzaW5rLgotICovCi1zdGF0aWMgaW50IGRwX2xpbmtfcHJvY2Vzc19hdWRpb19w YXR0ZXJuX3JlcXVlc3Qoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKLXsKLQlpZiAoIWRw X2xpbmtfaXNfYXVkaW9fcGF0dGVybl9yZXF1ZXN0ZWQobGluaykpCi0JCXJldHVybiAtRUlOVkFM OwotCi0JcHJfZGVidWcoInNhbXBsaW5nX3JhdGU9JXMsIGNoYW5uZWxfY291bnQ9JWQsIHBhdHRl cm5fdHlwZT0lc1xuIiwKLQkJZHBfbGlua19nZXRfYXVkaW9fc2FtcGxlX3JhdGUoCi0JCQlsaW5r LT5kcF9saW5rLnRlc3RfYXVkaW8udGVzdF9hdWRpb19zYW1wbGluZ19yYXRlKSwKLQkJbGluay0+ ZHBfbGluay50ZXN0X2F1ZGlvLnRlc3RfYXVkaW9fY2hhbm5lbF9jb3VudCwKLQkJZHBfbGlua19n ZXRfYXVkaW9fdGVzdF9wYXR0ZXJuKAotCQkJbGluay0+ZHBfbGluay50ZXN0X2F1ZGlvLnRlc3Rf YXVkaW9fcGF0dGVybl90eXBlKSk7Ci0KLQlwcl9kZWJ1ZygiYXVkaW9fcGVyaW9kOiBjaDE9MHgl eCwgY2gyPTB4JXgsIGNoMz0weCV4LCBjaDQ9MHgleFxuIiwKLQkJbGluay0+ZHBfbGluay50ZXN0 X2F1ZGlvLnRlc3RfYXVkaW9fcGVyaW9kX2NoXzEsCi0JCWxpbmstPmRwX2xpbmsudGVzdF9hdWRp by50ZXN0X2F1ZGlvX3BlcmlvZF9jaF8yLAotCQlsaW5rLT5kcF9saW5rLnRlc3RfYXVkaW8udGVz dF9hdWRpb19wZXJpb2RfY2hfMywKLQkJbGluay0+ZHBfbGluay50ZXN0X2F1ZGlvLnRlc3RfYXVk aW9fcGVyaW9kX2NoXzQpOwotCi0JcHJfZGVidWcoImF1ZGlvX3BlcmlvZDogY2g1PTB4JXgsIGNo Nj0weCV4LCBjaDc9MHgleCwgY2g4PTB4JXhcbiIsCi0JCWxpbmstPmRwX2xpbmsudGVzdF9hdWRp by50ZXN0X2F1ZGlvX3BlcmlvZF9jaF81LAotCQlsaW5rLT5kcF9saW5rLnRlc3RfYXVkaW8udGVz dF9hdWRpb19wZXJpb2RfY2hfNiwKLQkJbGluay0+ZHBfbGluay50ZXN0X2F1ZGlvLnRlc3RfYXVk aW9fcGVyaW9kX2NoXzcsCi0JCWxpbmstPmRwX2xpbmsudGVzdF9hdWRpby50ZXN0X2F1ZGlvX3Bl cmlvZF9jaF84KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBkcF9saW5rX3Jlc2V0 X2RhdGEoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKLXsKLQlsaW5rLT5yZXF1ZXN0ID0g KGNvbnN0IHN0cnVjdCBkcF9saW5rX3JlcXVlc3QpeyAwIH07Ci0JbGluay0+ZHBfbGluay50ZXN0 X3ZpZGVvID0gKGNvbnN0IHN0cnVjdCBkcF9saW5rX3Rlc3RfdmlkZW8peyAwIH07Ci0JbGluay0+ ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfYml0X2RlcHRoID0gRFBfVEVTVF9CSVRfREVQVEhfVU5L Tk9XTjsKLQlsaW5rLT5kcF9saW5rLnRlc3RfYXVkaW8gPSAoY29uc3Qgc3RydWN0IGRwX2xpbmtf dGVzdF9hdWRpbyl7IDAgfTsKLQlsaW5rLT5kcF9saW5rLnBoeV9wYXJhbXMucGh5X3Rlc3RfcGF0 dGVybl9zZWwgPSAwOwotCWxpbmstPmRwX2xpbmsuc2lua19yZXF1ZXN0ID0gMDsKLQlsaW5rLT5k cF9saW5rLnRlc3RfcmVzcG9uc2UgPSAwOwotfQotCi0vKioKLSAqIGRwX2xpbmtfcHJvY2Vzc19y ZXF1ZXN0KCkgLSBoYW5kbGUgSFBEIElSUSB0cmFuc2l0aW9uIHRvIEhJR0gKLSAqIEBsaW5rOiBw b2ludGVyIHRvIGxpbmsgbW9kdWxlIGRhdGEKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgaGFu ZGxlIHRoZSBIUEQgSVJRIHN0YXRlIHRyYW5zaXRpb25zIGZyb20gTE9XIHRvIEhJR0gKLSAqIChp bmNsdWRpbmcgY2FzZXMgd2hlbiB0aGVyZSBhcmUgYmFjayB0byBiYWNrIEhQRCBJUlEgSElHSCkg aW5kaWNhdGluZwotICogdGhlIHN0YXJ0IG9mIGEgbmV3IGxpbmsgdHJhaW5pbmcgcmVxdWVzdCBv ciBzaW5rIHN0YXR1cyB1cGRhdGUuCi0gKi8KLXN0YXRpYyBpbnQgZHBfbGlua19wcm9jZXNzX3Jl cXVlc3Qoc3RydWN0IGRwX2xpbmsgKmRwX2xpbmspCi17Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0 IGRwX2xpbmtfcHJpdmF0ZSAqbGluazsKLQotCWlmICghZHBfbGluaykgewotCQlwcl9lcnIoImlu dmFsaWQgaW5wdXRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlsaW5rID0gY29udGFp bmVyX29mKGRwX2xpbmssIHN0cnVjdCBkcF9saW5rX3ByaXZhdGUsIGRwX2xpbmspOwotCi0JcHJf ZGVidWcoInN0YXJ0XG4iKTsKLQotCWRwX2xpbmtfcmVzZXRfZGF0YShsaW5rKTsKLQotCWRwX2xp bmtfcGFyc2Vfc2lua19zdGF0dXNfZmllbGQobGluayk7Ci0KLQlpZiAoZHBfbGlua19pc190ZXN0 X2VkaWRfcmVhZChsaW5rKSkgewotCQlkcF9saW5rLT5zaW5rX3JlcXVlc3QgfD0gRFBfVEVTVF9M SU5LX0VESURfUkVBRDsKLQkJZ290byBleGl0OwotCX0KLQotCXJldCA9IGRwX2xpbmtfcHJvY2Vz c19kc19wb3J0X3N0YXR1c19jaGFuZ2UobGluayk7Ci0JaWYgKCFyZXQpIHsKLQkJZHBfbGluay0+ c2lua19yZXF1ZXN0IHw9IERTX1BPUlRfU1RBVFVTX0NIQU5HRUQ7Ci0JCWdvdG8gZXhpdDsKLQl9 Ci0KLQlyZXQgPSBkcF9saW5rX3Byb2Nlc3NfbGlua190cmFpbmluZ19yZXF1ZXN0KGxpbmspOwot CWlmICghcmV0KSB7Ci0JCWRwX2xpbmstPnNpbmtfcmVxdWVzdCB8PSBEUF9URVNUX0xJTktfVFJB SU5JTkc7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlyZXQgPSBkcF9saW5rX3Byb2Nlc3NfcGh5X3Rl c3RfcGF0dGVybl9yZXF1ZXN0KGxpbmspOwotCWlmICghcmV0KSB7Ci0JCWRwX2xpbmstPnNpbmtf cmVxdWVzdCB8PSBEUF9URVNUX0xJTktfUEhZX1RFU1RfUEFUVEVSTjsKLQkJZ290byBleGl0Owot CX0KLQotCXJldCA9IGRwX2xpbmtfcHJvY2Vzc19saW5rX3N0YXR1c191cGRhdGUobGluayk7Ci0J aWYgKCFyZXQpIHsKLQkJZHBfbGluay0+c2lua19yZXF1ZXN0IHw9IERQX0xJTktfU1RBVFVTX1VQ REFURUQ7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlyZXQgPSBkcF9saW5rX3Byb2Nlc3NfdmlkZW9f cGF0dGVybl9yZXF1ZXN0KGxpbmspOwotCWlmICghcmV0KSB7Ci0JCWRwX2xpbmstPnNpbmtfcmVx dWVzdCB8PSBEUF9URVNUX0xJTktfVklERU9fUEFUVEVSTjsKLQkJZ290byBleGl0OwotCX0KLQot CXJldCA9IGRwX2xpbmtfcHJvY2Vzc19hdWRpb19wYXR0ZXJuX3JlcXVlc3QobGluayk7Ci0JaWYg KCFyZXQpIHsKLQkJZHBfbGluay0+c2lua19yZXF1ZXN0IHw9IERQX1RFU1RfTElOS19BVURJT19Q QVRURVJOOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JcHJfZGVidWcoImRvbmVcbiIpOwotZXhpdDoK LQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGRwX2xpbmtfZ2V0X2NvbG9yaW1ldHJ5X2Nv bmZpZyhzdHJ1Y3QgZHBfbGluayAqZHBfbGluaykKLXsKLQl1MzIgY2M7Ci0JZW51bSBkeW5hbWlj X3JhbmdlIGRyOwotCXN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbms7Ci0KLQlpZiAoIWRwX2xp bmspIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JbGluayA9IGNvbnRhaW5lcl9vZihkcF9saW5rLCBzdHJ1Y3QgZHBfbGlua19wcml2YXRl LCBkcF9saW5rKTsKLQotCS8qIHVubGVzcyBhIHZpZGVvIHBhdHRlcm4gQ1RTIHRlc3QgaXMgb25n b2luZywgdXNlIENFQV9WRVNBICovCi0JaWYgKGRwX2xpbmtfaXNfdmlkZW9fcGF0dGVybl9yZXF1 ZXN0ZWQobGluaykpCi0JCWRyID0gbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfZHluX3Jh bmdlOwotCWVsc2UKLQkJZHIgPSBEUF9EWU5BTUlDX1JBTkdFX1JHQl9WRVNBOwotCi0JLyogT25s eSBSR0JfVkVTQSBuZCBSR0JfQ0VBIHN1cHBvcnRlZCBmb3Igbm93ICovCi0Jc3dpdGNoIChkcikg ewotCWNhc2UgRFBfRFlOQU1JQ19SQU5HRV9SR0JfQ0VBOgotCQljYyA9IEJJVCgzKTsKLQkJYnJl YWs7Ci0JY2FzZSBEUF9EWU5BTUlDX1JBTkdFX1JHQl9WRVNBOgotCWRlZmF1bHQ6Ci0JCWNjID0g MDsKLQl9Ci0KLQlyZXR1cm4gY2M7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfbGlua19hZGp1c3RfbGV2 ZWxzKHN0cnVjdCBkcF9saW5rICpkcF9saW5rLCB1OCAqbGlua19zdGF0dXMpCi17Ci0JaW50IGk7 Ci0JaW50IG1heCA9IDA7Ci0JdTggZGF0YTsKLQlzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5r OwotCi0JaWYgKCFkcF9saW5rKSB7Ci0JCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQotCWxpbmsgPSBjb250YWluZXJfb2YoZHBfbGluaywgc3RydWN0 IGRwX2xpbmtfcHJpdmF0ZSwgZHBfbGluayk7Ci0KLQkvKiB1c2UgdGhlIG1heCBsZXZlbCBhY3Jv c3MgbGFuZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZHBfbGluay0+bGlua19wYXJhbXMubGFuZV9j b3VudDsgaSsrKSB7Ci0JCWRhdGEgPSBkcm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ZvbHRhZ2Uo bGlua19zdGF0dXMsIGkpOwotCQlwcl9kZWJ1ZygibGFuZT0lZCByZXFfdm9sdGFnZV9zd2luZz0l ZFxuIiwgaSwgZGF0YSk7Ci0JCWlmIChtYXggPCBkYXRhKQotCQkJbWF4ID0gZGF0YTsKLQl9Ci0K LQlkcF9saW5rLT5waHlfcGFyYW1zLnZfbGV2ZWwgPSBtYXggPj4gRFBfVFJBSU5fVk9MVEFHRV9T V0lOR19TSElGVDsKLQotCS8qIHVzZSB0aGUgbWF4IGxldmVsIGFjcm9zcyBsYW5lcyAqLwotCW1h eCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGRwX2xpbmstPmxpbmtfcGFyYW1zLmxhbmVfY291bnQ7 IGkrKykgewotCQlkYXRhID0gZHJtX2RwX2dldF9hZGp1c3RfcmVxdWVzdF9wcmVfZW1waGFzaXMo bGlua19zdGF0dXMsIGkpOwotCQlwcl9kZWJ1ZygibGFuZT0lZCByZXFfcHJlX2VtcGhhc2lzPSVk XG4iLCBpLCBkYXRhKTsKLQkJaWYgKG1heCA8IGRhdGEpCi0JCQltYXggPSBkYXRhOwotCX0KLQot CWRwX2xpbmstPnBoeV9wYXJhbXMucF9sZXZlbCA9IG1heCA+PiBEUF9UUkFJTl9QUkVfRU1QSEFT SVNfU0hJRlQ7Ci0KLQkvKioKLQkgKiBBZGp1c3QgdGhlIHZvbHRhZ2Ugc3dpbmcgYW5kIHByZS1l bXBoYXNpcyBsZXZlbCBjb21iaW5hdGlvbiB0byB3aXRoaW4KLQkgKiB0aGUgYWxsb3dhYmxlIHJh bmdlLgotCSAqLwotCWlmIChkcF9saW5rLT5waHlfcGFyYW1zLnZfbGV2ZWwgPiBEUF9MSU5LX1ZP TFRBR0VfTUFYKSB7Ci0JCXByX2RlYnVnKCJSZXF1ZXN0ZWQgdlN3aW5nTGV2ZWw9JWQsIGNoYW5n ZSB0byAlZFxuIiwKLQkJCWRwX2xpbmstPnBoeV9wYXJhbXMudl9sZXZlbCwgRFBfTElOS19WT0xU QUdFX01BWCk7Ci0JCWRwX2xpbmstPnBoeV9wYXJhbXMudl9sZXZlbCA9IERQX0xJTktfVk9MVEFH RV9NQVg7Ci0JfQotCi0JaWYgKGRwX2xpbmstPnBoeV9wYXJhbXMucF9sZXZlbCA+IERQX0xJTktf UFJFX0VNUEhBU0lTX01BWCkgewotCQlwcl9kZWJ1ZygiUmVxdWVzdGVkIHByZUVtcGhhc2lzTGV2 ZWw9JWQsIGNoYW5nZSB0byAlZFxuIiwKLQkJCWRwX2xpbmstPnBoeV9wYXJhbXMucF9sZXZlbCwg RFBfTElOS19QUkVfRU1QSEFTSVNfTUFYKTsKLQkJZHBfbGluay0+cGh5X3BhcmFtcy5wX2xldmVs ID0gRFBfTElOS19QUkVfRU1QSEFTSVNfTUFYOwotCX0KLQotCWlmICgoZHBfbGluay0+cGh5X3Bh cmFtcy5wX2xldmVsID4gRFBfTElOS19QUkVfRU1QSEFTSVNfTEVWRUxfMSkKLQkJJiYgKGRwX2xp bmstPnBoeV9wYXJhbXMudl9sZXZlbCA9PSBEUF9MSU5LX1ZPTFRBR0VfTEVWRUxfMikpIHsKLQkJ cHJfZGVidWcoIlJlcXVlc3RlZCBwcmVFbXBoYXNpc0xldmVsPSVkLCBjaGFuZ2UgdG8gJWRcbiIs Ci0JCQlkcF9saW5rLT5waHlfcGFyYW1zLnBfbGV2ZWwsCi0JCQlEUF9MSU5LX1BSRV9FTVBIQVNJ U19MRVZFTF8xKTsKLQkJZHBfbGluay0+cGh5X3BhcmFtcy5wX2xldmVsID0gRFBfTElOS19QUkVf RU1QSEFTSVNfTEVWRUxfMTsKLQl9Ci0KLQlwcl9kZWJ1ZygiYWRqdXN0ZWQ6IHZfbGV2ZWw9JWQs IHBfbGV2ZWw9JWRcbiIsCi0JCWRwX2xpbmstPnBoeV9wYXJhbXMudl9sZXZlbCwgZHBfbGluay0+ cGh5X3BhcmFtcy5wX2xldmVsKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRwX2xp bmtfc2VuZF9wc21fcmVxdWVzdChzdHJ1Y3QgZHBfbGluayAqZHBfbGluaywgYm9vbCByZXEpCi17 Ci0Jc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluazsKLQotCWlmICghZHBfbGluaykgewotCQlw cl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlsaW5r ID0gY29udGFpbmVyX29mKGRwX2xpbmssIHN0cnVjdCBkcF9saW5rX3ByaXZhdGUsIGRwX2xpbmsp OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1MzIgZHBfbGlua19nZXRfdGVzdF9iaXRzX2Rl cHRoKHN0cnVjdCBkcF9saW5rICpkcF9saW5rLCB1MzIgYnBwKQotewotCXUzMiB0YmQ7Ci0KLQkv KgotCSAqIEZldyBzaW1wbGlzdGljIHJ1bGVzIGFuZCBhc3N1bXB0aW9ucyBtYWRlIGhlcmU6Ci0J ICogICAgMS4gVGVzdCBiaXQgZGVwdGggaXMgYml0IGRlcHRoIHBlciBjb2xvciBjb21wb25lbnQK LQkgKiAgICAyLiBBc3N1bWUgMyBjb2xvciBjb21wb25lbnRzCi0JICovCi0Jc3dpdGNoIChicHAp IHsKLQljYXNlIDE4OgotCQl0YmQgPSBEUF9URVNUX0JJVF9ERVBUSF82OwotCQlicmVhazsKLQlj YXNlIDI0OgotCQl0YmQgPSBEUF9URVNUX0JJVF9ERVBUSF84OwotCQlicmVhazsKLQljYXNlIDMw OgotCQl0YmQgPSBEUF9URVNUX0JJVF9ERVBUSF8xMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJ dGJkID0gRFBfVEVTVF9CSVRfREVQVEhfVU5LTk9XTjsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKHRi ZCAhPSBEUF9URVNUX0JJVF9ERVBUSF9VTktOT1dOKQotCQl0YmQgPSAodGJkID4+IERQX1RFU1Rf QklUX0RFUFRIX1NISUZUKTsKLQotCXJldHVybiB0YmQ7Ci19Ci0KLXN0cnVjdCBkcF9saW5rICpk cF9saW5rX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkcF9hdXggKmF1eCkKLXsKLQlp bnQgcmMgPSAwOwotCXN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbms7Ci0Jc3RydWN0IGRwX2xp bmsgKmRwX2xpbms7Ci0KLQlpZiAoIWRldiB8fCAhYXV4KSB7Ci0JCXByX2VycigiaW52YWxpZCBp bnB1dFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlsaW5rID0g ZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsaW5rKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFsaW5r KSB7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlsaW5rLT5kZXYgICA9 IGRldjsKLQlsaW5rLT5hdXggICA9IGF1eDsKLQotCWRwX2xpbmsgPSAmbGluay0+ZHBfbGluazsK LQotCWRwX2xpbmstPnByb2Nlc3NfcmVxdWVzdCAgICAgICAgPSBkcF9saW5rX3Byb2Nlc3NfcmVx dWVzdDsKLQlkcF9saW5rLT5nZXRfdGVzdF9iaXRzX2RlcHRoICAgID0gZHBfbGlua19nZXRfdGVz dF9iaXRzX2RlcHRoOwotCWRwX2xpbmstPmdldF9jb2xvcmltZXRyeV9jb25maWcgPSBkcF9saW5r X2dldF9jb2xvcmltZXRyeV9jb25maWc7Ci0JZHBfbGluay0+YWRqdXN0X2xldmVscyAgICAgICAg ICA9IGRwX2xpbmtfYWRqdXN0X2xldmVsczsKLQlkcF9saW5rLT5zZW5kX3BzbV9yZXF1ZXN0ICAg ICAgID0gZHBfbGlua19zZW5kX3BzbV9yZXF1ZXN0OwotCWRwX2xpbmstPnNlbmRfdGVzdF9yZXNw b25zZSAgICAgPSBkcF9saW5rX3NlbmRfdGVzdF9yZXNwb25zZTsKLQlkcF9saW5rLT5wc21fY29u ZmlnICAgICAgICAgICAgID0gZHBfbGlua19wc21fY29uZmlnOwotCWRwX2xpbmstPnNlbmRfZWRp ZF9jaGVja3N1bSAgICAgPSBkcF9saW5rX3NlbmRfZWRpZF9jaGVja3N1bTsKLQotCXJldHVybiBk cF9saW5rOwotZXJyb3I6Ci0JcmV0dXJuIEVSUl9QVFIocmMpOwotfQotCi12b2lkIGRwX2xpbmtf cHV0KHN0cnVjdCBkcF9saW5rICpkcF9saW5rKQotewotCXN0cnVjdCBkcF9saW5rX3ByaXZhdGUg Kmxpbms7Ci0KLQlpZiAoIWRwX2xpbmspCi0JCXJldHVybjsKLQotCWxpbmsgPSBjb250YWluZXJf b2YoZHBfbGluaywgc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSwgZHBfbGluayk7Ci0KLQlkZXZtX2tm cmVlKGxpbmstPmRldiwgbGluayk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2RwL2RwX2xpbmsuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfbGluay5oCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDZlZjQzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHAvZHBfbGluay5oCisrKyAvZGV2L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLS8q Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25s eSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2lmbmRlZiBfRFBfTElOS19I XwotI2RlZmluZSBfRFBfTElOS19IXwotCi0jaW5jbHVkZSAiZHBfYXV4LmgiCi0KLSNkZWZpbmUg RFNfUE9SVF9TVEFUVVNfQ0hBTkdFRCAweDIwMAotI2RlZmluZSBEUF9URVNUX0JJVF9ERVBUSF9V TktOT1dOIDB4RkZGRkZGRkYKLSNkZWZpbmUgRFBfTElOS19FTlVNX1NUUih4KQkJI3gKLQotZW51 bSBkcF9saW5rX3ZvbHRhZ2VfbGV2ZWwgewotCURQX0xJTktfVk9MVEFHRV9MRVZFTF8wCT0gMCwK LQlEUF9MSU5LX1ZPTFRBR0VfTEVWRUxfMQk9IDEsCi0JRFBfTElOS19WT0xUQUdFX0xFVkVMXzIJ PSAyLAotCURQX0xJTktfVk9MVEFHRV9NQVgJPSBEUF9MSU5LX1ZPTFRBR0VfTEVWRUxfMiwKLX07 Ci0KLWVudW0gZHBfbGlua19wcmVlbWFwaGFzaXNfbGV2ZWwgewotCURQX0xJTktfUFJFX0VNUEhB U0lTX0xFVkVMXzAJPSAwLAotCURQX0xJTktfUFJFX0VNUEhBU0lTX0xFVkVMXzEJPSAxLAotCURQ X0xJTktfUFJFX0VNUEhBU0lTX0xFVkVMXzIJPSAyLAotCURQX0xJTktfUFJFX0VNUEhBU0lTX01B WAk9IERQX0xJTktfUFJFX0VNUEhBU0lTX0xFVkVMXzIsCi19OwotCi1zdHJ1Y3QgZHBfbGlua19z aW5rX2NvdW50IHsKLQl1MzIgY291bnQ7Ci0JYm9vbCBjcF9yZWFkeTsKLX07Ci0KLXN0cnVjdCBk cF9saW5rX3Rlc3RfdmlkZW8gewotCXUzMiB0ZXN0X3ZpZGVvX3BhdHRlcm47Ci0JdTMyIHRlc3Rf Yml0X2RlcHRoOwotCXUzMiB0ZXN0X2R5bl9yYW5nZTsKLQl1MzIgdGVzdF9oX3RvdGFsOwotCXUz MiB0ZXN0X3ZfdG90YWw7Ci0JdTMyIHRlc3RfaF9zdGFydDsKLQl1MzIgdGVzdF92X3N0YXJ0Owot CXUzMiB0ZXN0X2hzeW5jX3BvbDsKLQl1MzIgdGVzdF9oc3luY193aWR0aDsKLQl1MzIgdGVzdF92 c3luY19wb2w7Ci0JdTMyIHRlc3RfdnN5bmNfd2lkdGg7Ci0JdTMyIHRlc3RfaF93aWR0aDsKLQl1 MzIgdGVzdF92X2hlaWdodDsKLQl1MzIgdGVzdF9ycl9kOwotCXUzMiB0ZXN0X3JyX247Ci19Owot Ci1zdHJ1Y3QgZHBfbGlua190ZXN0X2F1ZGlvIHsKLQl1MzIgdGVzdF9hdWRpb19zYW1wbGluZ19y YXRlOwotCXUzMiB0ZXN0X2F1ZGlvX2NoYW5uZWxfY291bnQ7Ci0JdTMyIHRlc3RfYXVkaW9fcGF0 dGVybl90eXBlOwotCXUzMiB0ZXN0X2F1ZGlvX3BlcmlvZF9jaF8xOwotCXUzMiB0ZXN0X2F1ZGlv X3BlcmlvZF9jaF8yOwotCXUzMiB0ZXN0X2F1ZGlvX3BlcmlvZF9jaF8zOwotCXUzMiB0ZXN0X2F1 ZGlvX3BlcmlvZF9jaF80OwotCXUzMiB0ZXN0X2F1ZGlvX3BlcmlvZF9jaF81OwotCXUzMiB0ZXN0 X2F1ZGlvX3BlcmlvZF9jaF82OwotCXUzMiB0ZXN0X2F1ZGlvX3BlcmlvZF9jaF83OwotCXUzMiB0 ZXN0X2F1ZGlvX3BlcmlvZF9jaF84OwotfTsKLQotc3RydWN0IGRwX2xpbmtfcGh5X3BhcmFtcyB7 Ci0JdTMyIHBoeV90ZXN0X3BhdHRlcm5fc2VsOwotCXU4IHZfbGV2ZWw7Ci0JdTggcF9sZXZlbDsK LX07Ci0KLXN0cnVjdCBkcF9saW5rX3BhcmFtcyB7Ci0JdTMyIGxhbmVfY291bnQ7Ci0JdTMyIGJ3 X2NvZGU7Ci19OwotCi1zdHJ1Y3QgZHBfbGluayB7Ci0JdTMyIHNpbmtfcmVxdWVzdDsKLQl1MzIg dGVzdF9yZXNwb25zZTsKLQlib29sIHBzbV9lbmFibGVkOwotCi0Jc3RydWN0IGRwX2xpbmtfc2lu a19jb3VudCBzaW5rX2NvdW50OwotCXN0cnVjdCBkcF9saW5rX3Rlc3RfdmlkZW8gdGVzdF92aWRl bzsKLQlzdHJ1Y3QgZHBfbGlua190ZXN0X2F1ZGlvIHRlc3RfYXVkaW87Ci0Jc3RydWN0IGRwX2xp bmtfcGh5X3BhcmFtcyBwaHlfcGFyYW1zOwotCXN0cnVjdCBkcF9saW5rX3BhcmFtcyBsaW5rX3Bh cmFtczsKLQotCXUzMiAoKmdldF90ZXN0X2JpdHNfZGVwdGgpKHN0cnVjdCBkcF9saW5rICpkcF9s aW5rLCB1MzIgYnBwKTsKLQlpbnQgKCpwcm9jZXNzX3JlcXVlc3QpKHN0cnVjdCBkcF9saW5rICpk cF9saW5rKTsKLQlpbnQgKCpnZXRfY29sb3JpbWV0cnlfY29uZmlnKShzdHJ1Y3QgZHBfbGluayAq ZHBfbGluayk7Ci0JaW50ICgqYWRqdXN0X2xldmVscykoc3RydWN0IGRwX2xpbmsgKmRwX2xpbmss IHU4ICpsaW5rX3N0YXR1cyk7Ci0JaW50ICgqc2VuZF9wc21fcmVxdWVzdCkoc3RydWN0IGRwX2xp bmsgKmRwX2xpbmssIGJvb2wgcmVxKTsKLQl2b2lkICgqc2VuZF90ZXN0X3Jlc3BvbnNlKShzdHJ1 Y3QgZHBfbGluayAqZHBfbGluayk7Ci0JaW50ICgqcHNtX2NvbmZpZykoc3RydWN0IGRwX2xpbmsg KmRwX2xpbmssCi0JCXN0cnVjdCBkcm1fZHBfbGluayAqbGlua19pbmZvLCBib29sIGVuYWJsZSk7 Ci0Jdm9pZCAoKnNlbmRfZWRpZF9jaGVja3N1bSkoc3RydWN0IGRwX2xpbmsgKmRwX2xpbmssIHU4 IGNoZWNrc3VtKTsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgY2hhciAqZHBfbGlua19nZXRfcGh5X3Rl c3RfcGF0dGVybih1MzIgcGh5X3Rlc3RfcGF0dGVybl9zZWwpCi17Ci0Jc3dpdGNoIChwaHlfdGVz dF9wYXR0ZXJuX3NlbCkgewotCWNhc2UgRFBfVEVTVF9QSFlfUEFUVEVSTl9OT05FOgotCQlyZXR1 cm4gRFBfTElOS19FTlVNX1NUUihEUF9URVNUX1BIWV9QQVRURVJOX05PTkUpOwotCWNhc2UgRFBf VEVTVF9QSFlfUEFUVEVSTl9EMTBfMl9OT19TQ1JBTUJMSU5HOgotCQlyZXR1cm4gRFBfTElOS19F TlVNX1NUUigKLQkJCURQX1RFU1RfUEhZX1BBVFRFUk5fRDEwXzJfTk9fU0NSQU1CTElORyk7Ci0J Y2FzZSBEUF9URVNUX1BIWV9QQVRURVJOX1NZTUJPTF9FUlJfTUVBU1VSRU1FTlRfQ05UOgotCQly ZXR1cm4gRFBfTElOS19FTlVNX1NUUigKLQkJCURQX1RFU1RfUEhZX1BBVFRFUk5fU1lNQk9MX0VS Ul9NRUFTVVJFTUVOVF9DTlQpOwotCWNhc2UgRFBfVEVTVF9QSFlfUEFUVEVSTl9QUkJTNzoKLQkJ cmV0dXJuIERQX0xJTktfRU5VTV9TVFIoRFBfVEVTVF9QSFlfUEFUVEVSTl9QUkJTNyk7Ci0JY2Fz ZSBEUF9URVNUX1BIWV9QQVRURVJOXzgwX0JJVF9DVVNUT01fUEFUVEVSTjoKLQkJcmV0dXJuIERQ X0xJTktfRU5VTV9TVFIoCi0JCQlEUF9URVNUX1BIWV9QQVRURVJOXzgwX0JJVF9DVVNUT01fUEFU VEVSTik7Ci0JY2FzZSBEUF9URVNUX1BIWV9QQVRURVJOX0hCUjJfQ1RTX0VZRV9QQVRURVJOOgot CQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUigKLQkJCURQX1RFU1RfUEhZX1BBVFRFUk5fSEJSMl9D VFNfRVlFX1BBVFRFUk4pOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAidW5rbm93biI7Ci0JfQotfQot Ci0vKioKLSAqIG1kc3NfZHBfdGVzdF9iaXRfZGVwdGhfdG9fYnBwKCkgLSBjb252ZXJ0IHRlc3Qg Yml0IGRlcHRoIHRvIGJwcAotICogQHRiZDogdGVzdCBiaXQgZGVwdGgKLSAqCi0gKiBSZXR1cm5z IHRoZSBiaXRzIHBlciBwaXhlbCAoYnBwKSB0byBiZSB1c2VkIGNvcnJlc3BvbmRpbmcgdG8gdGhl Ci0gKiBnaXQgYml0IGRlcHRoIHZhbHVlLiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBiaXQg ZGVwdGggaGFzCi0gKiBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkLgotICovCi1zdGF0aWMgaW5saW5l IHUzMiBkcF9saW5rX2JpdF9kZXB0aF90b19icHAodTMyIHRiZCkKLXsKLQl1MzIgYnBwOwotCi0J LyoKLQkgKiBGZXcgc2ltcGxpc3RpYyBydWxlcyBhbmQgYXNzdW1wdGlvbnMgbWFkZSBoZXJlOgot CSAqICAgIDEuIEJpdCBkZXB0aCBpcyBwZXIgY29sb3IgY29tcG9uZW50Ci0JICogICAgMi4gSWYg Yml0IGRlcHRoIGlzIHVua25vd24gcmV0dXJuIDAKLQkgKiAgICAzLiBBc3N1bWUgMyBjb2xvciBj b21wb25lbnRzCi0JICovCi0Jc3dpdGNoICh0YmQpIHsKLQljYXNlIERQX1RFU1RfQklUX0RFUFRI XzY6Ci0JCWJwcCA9IDE4OwotCQlicmVhazsKLQljYXNlIERQX1RFU1RfQklUX0RFUFRIXzg6Ci0J CWJwcCA9IDI0OwotCQlicmVhazsKLQljYXNlIERQX1RFU1RfQklUX0RFUFRIXzEwOgotCQlicHAg PSAzMDsKLQkJYnJlYWs7Ci0JY2FzZSBEUF9URVNUX0JJVF9ERVBUSF9VTktOT1dOOgotCWRlZmF1 bHQ6Ci0JCWJwcCA9IDA7Ci0JfQotCi0JcmV0dXJuIGJwcDsKLX0KLQotLyoqCi0gKiBkcF9saW5r X2dldCgpIC0gZ2V0IHRoZSBmdW5jdGlvbmFsaXRpZXMgb2YgZHAgdGVzdCBtb2R1bGUKLSAqCi0g KgotICogcmV0dXJuOiBhIHBvaW50ZXIgdG8gZHBfbGluayBzdHJ1Y3QKLSAqLwotc3RydWN0IGRw X2xpbmsgKmRwX2xpbmtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRwX2F1eCAqYXV4 KTsKLQotLyoqCi0gKiBkcF9saW5rX3B1dCgpIC0gcmVsZWFzZXMgdGhlIGRwIHRlc3QgbW9kdWxl J3MgcmVzb3VyY2VzCi0gKgotICogQGRwX2xpbms6IGFuIGluc3RhbmNlIG9mIGRwX2xpbmsgbW9k dWxlCi0gKgotICovCi12b2lkIGRwX2xpbmtfcHV0KHN0cnVjdCBkcF9saW5rICpkcF9saW5rKTsK LQotI2VuZGlmIC8qIF9EUF9MSU5LX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2RwL2RwX3BhbmVsLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVsLmMKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzZjliZjQuLjAwMDAwMDAKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTI2ICswLDAg QEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24u IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAot ICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2RlZmluZSBwcl9m bXQoZm10KQkiW2RybS1kcF0gJXM6ICIgZm10LCBfX2Z1bmNfXwotCi0jaW5jbHVkZSAiZHBfcGFu ZWwuaCIKLQotI2luY2x1ZGUgPGRybS9kcm1fY29ubmVjdG9yLmg+Ci0jaW5jbHVkZSA8ZHJtL2Ry bV9lZGlkLmg+Ci0KLSNkZWZpbmUgRFBfUEFORUxfREVGQVVMVF9CUFAgMjQKLSNkZWZpbmUgRFBf TUFYX0RTX1BPUlRfQ09VTlQgMQotCi1lbnVtIHsKLQlEUF9MSU5LX1JBVEVfTVVMVElQTElFUiA9 IDI3MDAwMDAwLAotfTsKLQotc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUgewotCXN0cnVjdCBkZXZp Y2UgKmRldjsKLQlzdHJ1Y3QgZHBfcGFuZWwgZHBfcGFuZWw7Ci0Jc3RydWN0IGRwX2F1eCAqYXV4 OwotCXN0cnVjdCBkcF9saW5rICpsaW5rOwotCXN0cnVjdCBkcF9jYXRhbG9nX3BhbmVsICpjYXRh bG9nOwotCWJvb2wgYXV4X2NmZ191cGRhdGVfZG9uZTsKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1 Y3QgZHBfcGFuZWxfaW5mbyBmYWlsX3NhZmUgPSB7Ci0JLmhfYWN0aXZlID0gNjQwLAotCS52X2Fj dGl2ZSA9IDQ4MCwKLQkuaF9iYWNrX3BvcmNoID0gNDgsCi0JLmhfZnJvbnRfcG9yY2ggPSAxNiwK LQkuaF9zeW5jX3dpZHRoID0gOTYsCi0JLmhfYWN0aXZlX2xvdyA9IDAsCi0JLnZfYmFja19wb3Jj aCA9IDMzLAotCS52X2Zyb250X3BvcmNoID0gMTAsCi0JLnZfc3luY193aWR0aCA9IDIsCi0JLnZf YWN0aXZlX2xvdyA9IDAsCi0JLmhfc2tldyA9IDAsCi0JLnJlZnJlc2hfcmF0ZSA9IDYwLAotCS5w aXhlbF9jbGtfa2h6ID0gMjUyMDAsCi0JLmJwcCA9IDI0LAotfTsKLQotc3RhdGljIGludCBkcF9w YW5lbF9yZWFkX2RwY2Qoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCkKLXsKLQlpbnQgcmxlbiwg cmMgPSAwOwotCXN0cnVjdCBkcF9wYW5lbF9wcml2YXRlICpwYW5lbDsKLQlzdHJ1Y3QgZHJtX2Rw X2xpbmsgKmxpbmtfaW5mbzsKLQl1OCAqZHBjZCwgbWFqb3IgPSAwLCBtaW5vciA9IDA7Ci0JdTMy IGRmcF9jb3VudCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBjYXBzID0gRFBfTElOS19DQVBfRU5IQU5D RURfRlJBTUlORzsKLQotCWlmICghZHBfcGFuZWwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0 XG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlkcGNkID0gZHBfcGFu ZWwtPmRwY2Q7Ci0KLQlwYW5lbCA9IGNvbnRhaW5lcl9vZihkcF9wYW5lbCwgc3RydWN0IGRwX3Bh bmVsX3ByaXZhdGUsIGRwX3BhbmVsKTsKLQlsaW5rX2luZm8gPSAmZHBfcGFuZWwtPmxpbmtfaW5m bzsKLQotCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkKHBhbmVsLT5hdXgtPmRybV9hdXgsIERQX0RQ Q0RfUkVWLAotCQlkcGNkLCAoRFBfUkVDRUlWRVJfQ0FQX1NJWkUgKyAxKSk7Ci0JaWYgKHJsZW4g PCAoRFBfUkVDRUlWRVJfQ0FQX1NJWkUgKyAxKSkgewotCQlwcl9lcnIoImRwY2QgcmVhZCBmYWls ZWQsIHJsZW49JWRcbiIsIHJsZW4pOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZW5kOwotCX0K LQotCWxpbmtfaW5mby0+cmV2aXNpb24gPSBkcF9wYW5lbC0+ZHBjZFtEUF9EUENEX1JFVl07Ci0K LQltYWpvciA9IChsaW5rX2luZm8tPnJldmlzaW9uID4+IDQpICYgMHgwZjsKLQltaW5vciA9IGxp bmtfaW5mby0+cmV2aXNpb24gJiAweDBmOwotCXByX2RlYnVnKCJ2ZXJzaW9uOiAlZC4lZFxuIiwg bWFqb3IsIG1pbm9yKTsKLQotCWxpbmtfaW5mby0+cmF0ZSA9Ci0JCWRybV9kcF9id19jb2RlX3Rv X2xpbmtfcmF0ZShkcF9wYW5lbC0+ZHBjZFtEUF9NQVhfTElOS19SQVRFXSk7Ci0JcHJfZGVidWco ImxpbmtfcmF0ZT0lZFxuIiwgbGlua19pbmZvLT5yYXRlKTsKLQotCWxpbmtfaW5mby0+bnVtX2xh bmVzID0gZHBfcGFuZWwtPmRwY2RbRFBfTUFYX0xBTkVfQ09VTlRdICYKLQkJCQlEUF9NQVhfTEFO RV9DT1VOVF9NQVNLOwotCi0JcHJfZGVidWcoImxhbmVfY291bnQ9JWRcbiIsIGxpbmtfaW5mby0+ bnVtX2xhbmVzKTsKLQotCWlmIChkcm1fZHBfZW5oYW5jZWRfZnJhbWVfY2FwKGRwY2QpKQotCQls aW5rX2luZm8tPmNhcGFiaWxpdGllcyB8PSBjYXBzOwotCi0JZGZwX2NvdW50ID0gZHBjZFtEUF9E T1dOX1NUUkVBTV9QT1JUX0NPVU5UXSAmCi0JCQkJCQlEUF9ET1dOX1NUUkVBTV9QT1JUX0NPVU5U OwotCi0JaWYgKChkcGNkW0RQX0RPV05TVFJFQU1QT1JUX1BSRVNFTlRdICYgRFBfRFdOX1NUUk1f UE9SVF9QUkVTRU5UKQotCQkmJiAoZHBjZFtEUF9EUENEX1JFVl0gPiAweDEwKSkgewotCQlybGVu ID0gZHJtX2RwX2RwY2RfcmVhZChwYW5lbC0+YXV4LT5kcm1fYXV4LAotCQkJRFBfRE9XTlNUUkVB TV9QT1JUXzAsIGRwX3BhbmVsLT5kc19wb3J0cywKLQkJCURQX01BWF9ET1dOU1RSRUFNX1BPUlRT KTsKLQkJaWYgKHJsZW4gPCBEUF9NQVhfRE9XTlNUUkVBTV9QT1JUUykgewotCQkJcHJfZXJyKCJk cyBwb3J0IHN0YXR1cyBmYWlsZWQsIHJsZW49JWRcbiIsIHJsZW4pOwotCQkJcmMgPSAtRUlOVkFM OwotCQkJZ290byBlbmQ7Ci0JCX0KLQl9Ci0KLQlpZiAoZGZwX2NvdW50ID4gRFBfTUFYX0RTX1BP UlRfQ09VTlQpCi0JCXByX2RlYnVnKCJEUyBwb3J0IGNvdW50ICVkIGdyZWF0ZXIgdGhhdCBtYXgg KCVkKSBzdXBwb3J0ZWRcbiIsCi0JCQlkZnBfY291bnQsIERQX01BWF9EU19QT1JUX0NPVU5UKTsK LQotZW5kOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkcF9wYW5lbF9zZXRfZGVmYXVs dF9saW5rX3BhcmFtcyhzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKQotewotCXN0cnVjdCBkcm1f ZHBfbGluayAqbGlua19pbmZvOwotCWNvbnN0IGludCBkZWZhdWx0X2J3X2NvZGUgPSAxNjIwMDA7 Ci0JY29uc3QgaW50IGRlZmF1bHRfbnVtX2xhbmVzID0gMTsKLQotCWlmICghZHBfcGFuZWwpIHsK LQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWxp bmtfaW5mbyA9ICZkcF9wYW5lbC0+bGlua19pbmZvOwotCWxpbmtfaW5mby0+cmF0ZSA9IGRlZmF1 bHRfYndfY29kZTsKLQlsaW5rX2luZm8tPm51bV9sYW5lcyA9IGRlZmF1bHRfbnVtX2xhbmVzOwot CXByX2RlYnVnKCJsaW5rX3JhdGU9JWQgbnVtX2xhbmVzPSVkXG4iLAotCQlsaW5rX2luZm8tPnJh dGUsIGxpbmtfaW5mby0+bnVtX2xhbmVzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBk cF9wYW5lbF9yZWFkX2VkaWQoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCwKLQlzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCWludCByZXRyeV9jbnQgPSAwOwotCWNvbnN0IGlu dCBtYXhfcmV0cnkgPSAxMDsKLQlzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSAqcGFuZWw7Ci0KLQlp ZiAoIWRwX3BhbmVsKSB7Ci0JCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCXBhbmVsID0gY29udGFpbmVyX29mKGRwX3BhbmVsLCBzdHJ1Y3QgZHBf cGFuZWxfcHJpdmF0ZSwgZHBfcGFuZWwpOwotCi0JZG8gewotCQlrZnJlZShkcF9wYW5lbC0+ZWRp ZCk7Ci0JCWRwX3BhbmVsLT5lZGlkID0gZHJtX2dldF9lZGlkKGNvbm5lY3RvciwKLQkJCQkJICAg ICAgJnBhbmVsLT5hdXgtPmRybV9hdXgtPmRkYyk7Ci0JCWlmICghZHBfcGFuZWwtPmVkaWQpIHsK LQkJCXByX2VycigiRURJRCByZWFkIGZhaWxlZFxuIik7Ci0JCQlyZXRyeV9jbnQrKzsKLQkJCXBh bmVsLT5hdXgtPnJlY29uZmlnKHBhbmVsLT5hdXgpOwotCQkJcGFuZWwtPmF1eF9jZmdfdXBkYXRl X2RvbmUgPSB0cnVlOwotCQl9IGVsc2UgewotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9IHdoaWxlIChy ZXRyeV9jbnQgPCBtYXhfcmV0cnkpOwotCi0JcmV0dXJuIGRybV9hZGRfZWRpZF9tb2Rlcyhjb25u ZWN0b3IsIGRwX3BhbmVsLT5lZGlkKTsKLX0KLQotc3RhdGljIGludCBkcF9wYW5lbF9yZWFkX3Np bmtfY2FwcyhzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsLAotCXN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSAq cGFuZWw7Ci0KLQlpZiAoIWRwX3BhbmVsIHx8ICFjb25uZWN0b3IpIHsKLQkJcHJfZXJyKCJpbnZh bGlkIGlucHV0XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcGFuZWwgPSBjb250YWlu ZXJfb2YoZHBfcGFuZWwsIHN0cnVjdCBkcF9wYW5lbF9wcml2YXRlLCBkcF9wYW5lbCk7Ci0KLQly YyA9IGRwX3BhbmVsX3JlYWRfZHBjZChkcF9wYW5lbCk7Ci0JaWYgKHJjIHx8ICFpc19saW5rX3Jh dGVfdmFsaWQoZHJtX2RwX2xpbmtfcmF0ZV90b19id19jb2RlKAotCQlkcF9wYW5lbC0+bGlua19p bmZvLnJhdGUpKSB8fCAhaXNfbGFuZV9jb3VudF92YWxpZCgKLQkJZHBfcGFuZWwtPmxpbmtfaW5m by5udW1fbGFuZXMpKSB7Ci0JCXByX2VycigicGFuZWwgZHBjZCByZWFkIGZhaWxlZC9pbmNvcnJl Y3QsIHNldCBkZWZhdWx0IHBhcmFtc1xuIik7Ci0JCWRwX3BhbmVsX3NldF9kZWZhdWx0X2xpbmtf cGFyYW1zKGRwX3BhbmVsKTsKLQl9Ci0KLQlyYyA9IGRwX3BhbmVsX3JlYWRfZWRpZChkcF9wYW5l bCwgY29ubmVjdG9yKTsKLQlpZiAocmMgPCAwKSB7Ci0JCXByX2VycigicGFuZWwgZWRpZCByZWFk IGZhaWxlZCwgc2V0IGZhaWxzYWZlIG1vZGVcbiIpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JaWYg KHBhbmVsLT5hdXhfY2ZnX3VwZGF0ZV9kb25lKSB7Ci0JCXByX2RlYnVnKCJyZWFkIERQQ0Qgd2l0 aCB1cGRhdGVkIEFVWCBjb25maWdcbiIpOwotCQlkcF9wYW5lbF9yZWFkX2RwY2QoZHBfcGFuZWwp OwotCQlwYW5lbC0+YXV4X2NmZ191cGRhdGVfZG9uZSA9IGZhbHNlOwotCX0KLQotCXJldHVybiAw OwotfQotCi1zdGF0aWMgdTMyIGRwX3BhbmVsX2dldF9tYXhfcGNsayhzdHJ1Y3QgZHBfcGFuZWwg KmRwX3BhbmVsKQotewotCXN0cnVjdCBkcm1fZHBfbGluayAqbGlua19pbmZvOwotCWNvbnN0IHU4 IG51bV9jb21wb25lbnRzID0gMzsKLQl1MzIgYnBjID0gMCwgYnBwID0gMCwgbWF4X2RhdGFfcmF0 ZV9raHogPSAwLCBtYXhfcGNsa19yYXRlX2toeiA9IDA7Ci0KLQlpZiAoIWRwX3BhbmVsKSB7Ci0J CXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWxpbmtfaW5m byA9ICZkcF9wYW5lbC0+bGlua19pbmZvOwotCi0JYnBjID0gZHBfcGFuZWwtPmNvbm5lY3Rvci0+ ZGlzcGxheV9pbmZvLmJwYzsKLQlicHAgPSBicGMgKiBudW1fY29tcG9uZW50czsKLQlpZiAoIWJw cCkKLQkJYnBwID0gRFBfUEFORUxfREVGQVVMVF9CUFA7Ci0KLQltYXhfZGF0YV9yYXRlX2toeiA9 IChsaW5rX2luZm8tPm51bV9sYW5lcyAqIGxpbmtfaW5mby0+cmF0ZSAqIDgpOwotCW1heF9wY2xr X3JhdGVfa2h6ID0gbWF4X2RhdGFfcmF0ZV9raHogLyBicHA7Ci0KLQlwcl9kZWJ1ZygiYnBwPSVk LCBtYXhfbGFuZV9jbnQ9JWRcbiIsIGJwcCwgbGlua19pbmZvLT5udW1fbGFuZXMpOwotCXByX2Rl YnVnKCJtYXhfZGF0YV9yYXRlPSVkS0h6LCBtYXhfcGNsa19yYXRlPSVkS0h6XG4iLAotCQltYXhf ZGF0YV9yYXRlX2toeiwgbWF4X3BjbGtfcmF0ZV9raHopOwotCi0JcmV0dXJuIG1heF9wY2xrX3Jh dGVfa2h6OwotfQotCi1zdGF0aWMgdm9pZCBkcF9wYW5lbF9zZXRfdGVzdF9tb2RlKHN0cnVjdCBk cF9wYW5lbF9wcml2YXRlICpwYW5lbCwKLQkJc3RydWN0IGRwX2Rpc3BsYXlfbW9kZSAqbW9kZSkK LXsKLQlzdHJ1Y3QgZHBfcGFuZWxfaW5mbyAqcGluZm8gPSBOVUxMOwotCXN0cnVjdCBkcF9saW5r X3Rlc3RfdmlkZW8gKnRlc3RfaW5mbyA9IE5VTEw7Ci0KLQlpZiAoIXBhbmVsKSB7Ci0JCXByX2Vy cigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JcGluZm8gPSAmbW9kZS0+ dGltaW5nOwotCXRlc3RfaW5mbyA9ICZwYW5lbC0+bGluay0+dGVzdF92aWRlbzsKLQotCXBpbmZv LT5oX2FjdGl2ZSA9IHRlc3RfaW5mby0+dGVzdF9oX3dpZHRoOwotCXBpbmZvLT5oX3N5bmNfd2lk dGggPSB0ZXN0X2luZm8tPnRlc3RfaHN5bmNfd2lkdGg7Ci0JcGluZm8tPmhfYmFja19wb3JjaCA9 IHRlc3RfaW5mby0+dGVzdF9oX3N0YXJ0IC0KLQkJdGVzdF9pbmZvLT50ZXN0X2hzeW5jX3dpZHRo OwotCXBpbmZvLT5oX2Zyb250X3BvcmNoID0gdGVzdF9pbmZvLT50ZXN0X2hfdG90YWwgLQotCQko dGVzdF9pbmZvLT50ZXN0X2hfc3RhcnQgKyB0ZXN0X2luZm8tPnRlc3RfaF93aWR0aCk7Ci0KLQlw aW5mby0+dl9hY3RpdmUgPSB0ZXN0X2luZm8tPnRlc3Rfdl9oZWlnaHQ7Ci0JcGluZm8tPnZfc3lu Y193aWR0aCA9IHRlc3RfaW5mby0+dGVzdF92c3luY193aWR0aDsKLQlwaW5mby0+dl9iYWNrX3Bv cmNoID0gdGVzdF9pbmZvLT50ZXN0X3Zfc3RhcnQgLQotCQl0ZXN0X2luZm8tPnRlc3RfdnN5bmNf d2lkdGg7Ci0JcGluZm8tPnZfZnJvbnRfcG9yY2ggPSB0ZXN0X2luZm8tPnRlc3Rfdl90b3RhbCAt Ci0JCSh0ZXN0X2luZm8tPnRlc3Rfdl9zdGFydCArIHRlc3RfaW5mby0+dGVzdF92X2hlaWdodCk7 Ci0KLQlwaW5mby0+YnBwID0gZHBfbGlua19iaXRfZGVwdGhfdG9fYnBwKHRlc3RfaW5mby0+dGVz dF9iaXRfZGVwdGgpOwotCXBpbmZvLT5oX2FjdGl2ZV9sb3cgPSB0ZXN0X2luZm8tPnRlc3RfaHN5 bmNfcG9sOwotCXBpbmZvLT52X2FjdGl2ZV9sb3cgPSB0ZXN0X2luZm8tPnRlc3RfdnN5bmNfcG9s OwotCi0JcGluZm8tPnJlZnJlc2hfcmF0ZSA9IHRlc3RfaW5mby0+dGVzdF9ycl9uOwotCXBpbmZv LT5waXhlbF9jbGtfa2h6ID0gdGVzdF9pbmZvLT50ZXN0X2hfdG90YWwgKgotCQl0ZXN0X2luZm8t PnRlc3Rfdl90b3RhbCAqIHBpbmZvLT5yZWZyZXNoX3JhdGU7Ci0KLQlpZiAodGVzdF9pbmZvLT50 ZXN0X3JyX2QgPT0gMCkKLQkJcGluZm8tPnBpeGVsX2Nsa19raHogLz0gMTAwMDsKLQllbHNlCi0J CXBpbmZvLT5waXhlbF9jbGtfa2h6IC89IDEwMDE7Ci0KLQlpZiAodGVzdF9pbmZvLT50ZXN0X2hf d2lkdGggPT0gNjQwKQotCQlwaW5mby0+cGl4ZWxfY2xrX2toeiA9IDI1MTcwOwotfQotCi1zdGF0 aWMgaW50IGRwX3BhbmVsX2dldF9tb2RlcyhzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsLAotCXN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBkcF9kaXNwbGF5X21vZGUgKm1v ZGUpCi17Ci0Jc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUgKnBhbmVsOwotCi0JaWYgKCFkcF9wYW5l bCkgewotCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0KLQlwYW5lbCA9IGNvbnRhaW5lcl9vZihkcF9wYW5lbCwgc3RydWN0IGRwX3BhbmVsX3ByaXZh dGUsIGRwX3BhbmVsKTsKLQotCWlmIChkcF9wYW5lbC0+dmlkZW9fdGVzdCkgewotCQlkcF9wYW5l bF9zZXRfdGVzdF9tb2RlKHBhbmVsLCBtb2RlKTsKLQkJcmV0dXJuIDE7Ci0JfSBlbHNlIGlmIChk cF9wYW5lbC0+ZWRpZCkgewotCQlyZXR1cm4gZHBfcGFuZWxfcmVhZF9lZGlkKGRwX3BhbmVsLCBj b25uZWN0b3IpOwotCX0KLQotCS8qIGZhaWwtc2FmZSBtb2RlICovCi0JbWVtY3B5KCZtb2RlLT50 aW1pbmcsICZmYWlsX3NhZmUsCi0JCXNpemVvZihmYWlsX3NhZmUpKTsKLQlyZXR1cm4gMTsKLX0K LQotc3RhdGljIHU4IGRwX3BhbmVsX2dldF9lZGlkX2NoZWNrc3VtKHN0cnVjdCBlZGlkICplZGlk KQotewotCXN0cnVjdCBlZGlkICpsYXN0X2Jsb2NrID0gTlVMTDsKLQl1OCAqcmF3X2VkaWQgPSBO VUxMOwotCi0JaWYgKCFlZGlkKSB7Ci0JCXByX2VycigiaW52YWxpZCBlZGlkIGlucHV0XG4iKTsK LQkJcmV0dXJuIDA7Ci0JfQotCi0JcmF3X2VkaWQgPSAodTggKillZGlkOwotCXJhd19lZGlkICs9 IChlZGlkLT5leHRlbnNpb25zICogRURJRF9MRU5HVEgpOwotCWxhc3RfYmxvY2sgPSAoc3RydWN0 IGVkaWQgKilyYXdfZWRpZDsKLQotCWlmIChsYXN0X2Jsb2NrKQotCQlyZXR1cm4gbGFzdF9ibG9j ay0+Y2hlY2tzdW07Ci0KLQlwcl9lcnIoIkludmFsaWQgYmxvY2ssIG5vIGNoZWNrc3VtXG4iKTsK LQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZHBfcGFuZWxfaGFuZGxlX3NpbmtfcmVxdWVz dChzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKQotewotCXN0cnVjdCBkcF9wYW5lbF9wcml2YXRl ICpwYW5lbDsKLQotCWlmICghZHBfcGFuZWwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4i KTsKLQkJcmV0dXJuOwotCX0KLQotCXBhbmVsID0gY29udGFpbmVyX29mKGRwX3BhbmVsLCBzdHJ1 Y3QgZHBfcGFuZWxfcHJpdmF0ZSwgZHBfcGFuZWwpOwotCi0JaWYgKHBhbmVsLT5saW5rLT5zaW5r X3JlcXVlc3QgJiBEUF9URVNUX0xJTktfRURJRF9SRUFEKSB7Ci0JCXU4IGNoZWNrc3VtID0gZHBf cGFuZWxfZ2V0X2VkaWRfY2hlY2tzdW0oZHBfcGFuZWwtPmVkaWQpOwotCi0JCXBhbmVsLT5saW5r LT5zZW5kX2VkaWRfY2hlY2tzdW0ocGFuZWwtPmxpbmssIGNoZWNrc3VtKTsKLQkJcGFuZWwtPmxp bmstPnNlbmRfdGVzdF9yZXNwb25zZShwYW5lbC0+bGluayk7Ci0JfQotfQotCi1zdGF0aWMgaW50 IGRwX3BhbmVsX3RpbWluZ19jZmcoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCkKLXsKLQlpbnQg cmMgPSAwOwotCXUzMiBkYXRhLCB0b3RhbF92ZXIsIHRvdGFsX2hvcjsKLQlzdHJ1Y3QgZHBfY2F0 YWxvZ19wYW5lbCAqY2F0YWxvZzsKLQlzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSAqcGFuZWw7Ci0J c3RydWN0IGRwX3BhbmVsX2luZm8gKnBpbmZvOwotCi0JaWYgKCFkcF9wYW5lbCkgewotCQlwcl9l cnIoImludmFsaWQgaW5wdXRcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZW5kOwotCX0K LQotCXBhbmVsID0gY29udGFpbmVyX29mKGRwX3BhbmVsLCBzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0 ZSwgZHBfcGFuZWwpOwotCWNhdGFsb2cgPSBwYW5lbC0+Y2F0YWxvZzsKLQlwaW5mbyA9ICZwYW5l bC0+ZHBfcGFuZWwucGluZm87Ci0KLQlwcl9kZWJ1Zygid2lkdGg9JWQgaHBvcmNoPSAlZCAlZCAl ZFxuIiwKLQkJcGluZm8tPmhfYWN0aXZlLCBwaW5mby0+aF9iYWNrX3BvcmNoLAotCQlwaW5mby0+ aF9mcm9udF9wb3JjaCwgcGluZm8tPmhfc3luY193aWR0aCk7Ci0KLQlwcl9kZWJ1ZygiaGVpZ2h0 PSVkIHZwb3JjaD0gJWQgJWQgJWRcbiIsCi0JCXBpbmZvLT52X2FjdGl2ZSwgcGluZm8tPnZfYmFj a19wb3JjaCwKLQkJcGluZm8tPnZfZnJvbnRfcG9yY2gsIHBpbmZvLT52X3N5bmNfd2lkdGgpOwot Ci0JdG90YWxfaG9yID0gcGluZm8tPmhfYWN0aXZlICsgcGluZm8tPmhfYmFja19wb3JjaCArCi0J CXBpbmZvLT5oX2Zyb250X3BvcmNoICsgcGluZm8tPmhfc3luY193aWR0aDsKLQotCXRvdGFsX3Zl ciA9IHBpbmZvLT52X2FjdGl2ZSArIHBpbmZvLT52X2JhY2tfcG9yY2ggKwotCQkJcGluZm8tPnZf ZnJvbnRfcG9yY2ggKyBwaW5mby0+dl9zeW5jX3dpZHRoOwotCi0JZGF0YSA9IHRvdGFsX3ZlcjsK LQlkYXRhIDw8PSAxNjsKLQlkYXRhIHw9IHRvdGFsX2hvcjsKLQotCWNhdGFsb2ctPnRvdGFsID0g ZGF0YTsKLQotCWRhdGEgPSAocGluZm8tPnZfYmFja19wb3JjaCArIHBpbmZvLT52X3N5bmNfd2lk dGgpOwotCWRhdGEgPDw9IDE2OwotCWRhdGEgfD0gKHBpbmZvLT5oX2JhY2tfcG9yY2ggKyBwaW5m by0+aF9zeW5jX3dpZHRoKTsKLQotCWNhdGFsb2ctPnN5bmNfc3RhcnQgPSBkYXRhOwotCi0JZGF0 YSA9IHBpbmZvLT52X3N5bmNfd2lkdGg7Ci0JZGF0YSA8PD0gMTY7Ci0JZGF0YSB8PSAocGluZm8t PnZfYWN0aXZlX2xvdyA8PCAzMSk7Ci0JZGF0YSB8PSBwaW5mby0+aF9zeW5jX3dpZHRoOwotCWRh dGEgfD0gKHBpbmZvLT5oX2FjdGl2ZV9sb3cgPDwgMTUpOwotCi0JY2F0YWxvZy0+d2lkdGhfYmxh bmtpbmcgPSBkYXRhOwotCi0JZGF0YSA9IHBpbmZvLT52X2FjdGl2ZTsKLQlkYXRhIDw8PSAxNjsK LQlkYXRhIHw9IHBpbmZvLT5oX2FjdGl2ZTsKLQotCWNhdGFsb2ctPmRwX2FjdGl2ZSA9IGRhdGE7 Ci0KLQlwYW5lbC0+Y2F0YWxvZy0+dGltaW5nX2NmZyhjYXRhbG9nKTsKLWVuZDoKLQlyZXR1cm4g cmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfcGFuZWxfaW5pdF9wYW5lbF9pbmZvKHN0cnVjdCBkcF9w YW5lbCAqZHBfcGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHBfcGFuZWxfaW5mbyAq cGluZm87Ci0KLQlpZiAoIWRwX3BhbmVsKSB7Ci0JCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7 Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcGluZm8gPSAmZHBfcGFuZWwt PnBpbmZvOwotCi0JLyoKLQkgKiBwcmludCByZXNvbHV0aW9uIGluZm8gYXMgdGhpcyBpcyBhIHJl c3VsdAotCSAqIG9mIHVzZXIgaW5pdGlhdGVkIGFjdGlvbiBvZiBjYWJsZSBjb25uZWN0aW9uCi0J ICovCi0JcHJfaW5mbygiU0VUIE5FVyBSRVNPTFVUSU9OOlxuIik7Ci0JcHJfaW5mbygiJWR4JWRA JWRmcHNcbiIsIHBpbmZvLT5oX2FjdGl2ZSwKLQkJcGluZm8tPnZfYWN0aXZlLCBwaW5mby0+cmVm cmVzaF9yYXRlKTsKLQlwcl9pbmZvKCJoX3BvcmNoZXMoYmFja3xmcm9udHx3aWR0aCkgPSAoJWR8 JWR8JWQpXG4iLAotCQkJcGluZm8tPmhfYmFja19wb3JjaCwKLQkJCXBpbmZvLT5oX2Zyb250X3Bv cmNoLAotCQkJcGluZm8tPmhfc3luY193aWR0aCk7Ci0JcHJfaW5mbygidl9wb3JjaGVzKGJhY2t8 ZnJvbnR8d2lkdGgpID0gKCVkfCVkfCVkKVxuIiwKLQkJCXBpbmZvLT52X2JhY2tfcG9yY2gsCi0J CQlwaW5mby0+dl9mcm9udF9wb3JjaCwKLQkJCXBpbmZvLT52X3N5bmNfd2lkdGgpOwotCXByX2lu Zm8oInBpeGVsIGNsb2NrIChLSHopPSglZClcbiIsIHBpbmZvLT5waXhlbF9jbGtfa2h6KTsKLQlw cl9pbmZvKCJicHAgPSAlZFxuIiwgcGluZm8tPmJwcCk7Ci0JcHJfaW5mbygiYWN0aXZlIGxvdyAo aHx2KT0oJWR8JWQpXG4iLCBwaW5mby0+aF9hY3RpdmVfbG93LAotCQlwaW5mby0+dl9hY3RpdmVf bG93KTsKLQotCXBpbmZvLT5icHAgPSBtYXhfdCh1MzIsIDE4LCBtaW5fdCh1MzIsIHBpbmZvLT5i cHAsIDMwKSk7Ci0JcHJfaW5mbygidXBkYXRlZCBicHAgPSAlZFxuIiwgcGluZm8tPmJwcCk7Ci1l bmQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdTMyIGRwX3BhbmVsX2dldF9taW5fcmVxX2xp bmtfcmF0ZShzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKQotewotCWNvbnN0IHUzMiBlbmNvZGlu Z19mYWN0eDEwID0gODsKLQl1MzIgbWluX2xpbmtfcmF0ZV9raHogPSAwLCBsYW5lX2NudDsKLQlz dHJ1Y3QgZHBfcGFuZWxfaW5mbyAqcGluZm87Ci0KLQlpZiAoIWRwX3BhbmVsKSB7Ci0JCXByX2Vy cigiaW52YWxpZCBpbnB1dFxuIik7Ci0JCWdvdG8gZW5kOwotCX0KLQotCWxhbmVfY250ID0gZHBf cGFuZWwtPmxpbmtfaW5mby5udW1fbGFuZXM7Ci0JcGluZm8gPSAmZHBfcGFuZWwtPnBpbmZvOwot Ci0JLyogbnVtX2xhbmVzICogbGFuZV9jb3VudCAqIDggPj0gcGNsayAqIGJwcCAqIDEwICovCi0J bWluX2xpbmtfcmF0ZV9raHogPSBwaW5mby0+cGl4ZWxfY2xrX2toeiAvCi0JCQkJKGxhbmVfY250 ICogZW5jb2RpbmdfZmFjdHgxMCk7Ci0JbWluX2xpbmtfcmF0ZV9raHogKj0gcGluZm8tPmJwcDsK LQotCXByX2RlYnVnKCJtaW4gbGNsayByZXE9JWQga2h6IGZvciBwY2xrPSVkIGtoeiwgbGFuZXM9 JWQsIGJwcD0lZFxuIiwKLQkJbWluX2xpbmtfcmF0ZV9raHosIHBpbmZvLT5waXhlbF9jbGtfa2h6 LCBsYW5lX2NudCwKLQkJcGluZm8tPmJwcCk7Ci1lbmQ6Ci0JcmV0dXJuIG1pbl9saW5rX3JhdGVf a2h6OwotfQotCi1zdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsX2dldChzdHJ1Y3QgZHBfcGFuZWxf aW4gKmluKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUgKnBhbmVs OwotCXN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWw7Ci0KLQlpZiAoIWluLT5kZXYgfHwgIWluLT5j YXRhbG9nIHx8ICFpbi0+YXV4IHx8ICFpbi0+bGluaykgewotCQlwcl9lcnIoImludmFsaWQgaW5w dXRcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcGFuZWwgPSBk ZXZtX2t6YWxsb2MoaW4tPmRldiwgc2l6ZW9mKCpwYW5lbCksIEdGUF9LRVJORUwpOwotCWlmICgh cGFuZWwpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXBhbmVsLT5k ZXYgPSBpbi0+ZGV2OwotCXBhbmVsLT5hdXggPSBpbi0+YXV4OwotCXBhbmVsLT5jYXRhbG9nID0g aW4tPmNhdGFsb2c7Ci0JcGFuZWwtPmxpbmsgPSBpbi0+bGluazsKLQotCWRwX3BhbmVsID0gJnBh bmVsLT5kcF9wYW5lbDsKLQlwYW5lbC0+YXV4X2NmZ191cGRhdGVfZG9uZSA9IGZhbHNlOwotCi0J ZHBfcGFuZWwtPmluaXRfaW5mbyA9IGRwX3BhbmVsX2luaXRfcGFuZWxfaW5mbzsKLQlkcF9wYW5l bC0+dGltaW5nX2NmZyA9IGRwX3BhbmVsX3RpbWluZ19jZmc7Ci0JZHBfcGFuZWwtPnJlYWRfc2lu a19jYXBzID0gZHBfcGFuZWxfcmVhZF9zaW5rX2NhcHM7Ci0JZHBfcGFuZWwtPmdldF9taW5fcmVx X2xpbmtfcmF0ZSA9IGRwX3BhbmVsX2dldF9taW5fcmVxX2xpbmtfcmF0ZTsKLQlkcF9wYW5lbC0+ Z2V0X21heF9wY2xrID0gZHBfcGFuZWxfZ2V0X21heF9wY2xrOwotCWRwX3BhbmVsLT5nZXRfbW9k ZXMgPSBkcF9wYW5lbF9nZXRfbW9kZXM7Ci0JZHBfcGFuZWwtPmhhbmRsZV9zaW5rX3JlcXVlc3Qg PSBkcF9wYW5lbF9oYW5kbGVfc2lua19yZXF1ZXN0OwotCi0JcmV0dXJuIGRwX3BhbmVsOwotZXJy b3I6Ci0JcmV0dXJuIEVSUl9QVFIocmMpOwotfQotCi12b2lkIGRwX3BhbmVsX3B1dChzdHJ1Y3Qg ZHBfcGFuZWwgKmRwX3BhbmVsKQotewotCXN0cnVjdCBkcF9wYW5lbF9wcml2YXRlICpwYW5lbDsK LQotCWlmICghZHBfcGFuZWwpCi0JCXJldHVybjsKLQotCXBhbmVsID0gY29udGFpbmVyX29mKGRw X3BhbmVsLCBzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSwgZHBfcGFuZWwpOwotCi0Ja2ZyZWUoZHBf cGFuZWwtPmVkaWQpOwotCWRwX3BhbmVsLT5lZGlkID0gTlVMTDsKLQlkZXZtX2tmcmVlKHBhbmVs LT5kZXYsIHBhbmVsKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBf cGFuZWwuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuaApkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggZDZlYmRiOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2RwL2RwX3BhbmVsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoKLSAq IENvcHlyaWdodCAoYykgMjAxMi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZl cnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAq Ci0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0jaWZuZGVmIF9EUF9QQU5FTF9IXwot I2RlZmluZSBfRFBfUEFORUxfSF8KLQotI2luY2x1ZGUgImRwX2F1eC5oIgotI2luY2x1ZGUgImRw X2xpbmsuaCIKLSNpbmNsdWRlICJkcF91c2JwZC5oIgotCi1zdHJ1Y3QgZWRpZDsKLQotZW51bSBk cF9sYW5lX2NvdW50IHsKLQlEUF9MQU5FX0NPVU5UXzEJPSAxLAotCURQX0xBTkVfQ09VTlRfMgk9 IDIsCi0JRFBfTEFORV9DT1VOVF80CT0gNCwKLX07Ci0KLSNkZWZpbmUgRFBfTUFYX0RPV05TVFJF QU1fUE9SVFMgMHgxMAotCi1zdHJ1Y3QgZHBfcGFuZWxfaW5mbyB7Ci0JdTMyIGhfYWN0aXZlOwot CXUzMiB2X2FjdGl2ZTsKLQl1MzIgaF9iYWNrX3BvcmNoOwotCXUzMiBoX2Zyb250X3BvcmNoOwot CXUzMiBoX3N5bmNfd2lkdGg7Ci0JdTMyIGhfYWN0aXZlX2xvdzsKLQl1MzIgdl9iYWNrX3BvcmNo OwotCXUzMiB2X2Zyb250X3BvcmNoOwotCXUzMiB2X3N5bmNfd2lkdGg7Ci0JdTMyIHZfYWN0aXZl X2xvdzsKLQl1MzIgaF9za2V3OwotCXUzMiByZWZyZXNoX3JhdGU7Ci0JdTMyIHBpeGVsX2Nsa19r aHo7Ci0JdTMyIGJwcDsKLX07Ci0KLXN0cnVjdCBkcF9kaXNwbGF5X21vZGUgewotCXN0cnVjdCBk cF9wYW5lbF9pbmZvIHRpbWluZzsKLQl1MzIgY2FwYWJpbGl0aWVzOwotfTsKLQotc3RydWN0IGRw X3BhbmVsX2luIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGRwX2F1eCAqYXV4Owot CXN0cnVjdCBkcF9saW5rICpsaW5rOwotCXN0cnVjdCBkcF9jYXRhbG9nX3BhbmVsICpjYXRhbG9n OwotfTsKLQotc3RydWN0IGRwX3BhbmVsIHsKLQkvKiBkcGNkIHJhdyBkYXRhICovCi0JdTggZHBj ZFtEUF9SRUNFSVZFUl9DQVBfU0laRV07Ci0JdTggZHNfcG9ydHNbRFBfTUFYX0RPV05TVFJFQU1f UE9SVFNdOwotCi0Jc3RydWN0IGRybV9kcF9saW5rIGxpbmtfaW5mbzsKLQlzdHJ1Y3QgZWRpZCAq ZWRpZDsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwotCXN0cnVjdCBkcF9wYW5l bF9pbmZvIHBpbmZvOwotCWJvb2wgdmlkZW9fdGVzdDsKLQotCXUzMiB2aWM7Ci0JdTMyIG1heF9w Y2xrX2toejsKLQotCWludCAoKmluaXRfaW5mbykoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCk7 Ci0JaW50ICgqdGltaW5nX2NmZykoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCk7Ci0JaW50ICgq cmVhZF9zaW5rX2NhcHMpKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwsCi0JCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IpOwotCXUzMiAoKmdldF9taW5fcmVxX2xpbmtfcmF0ZSkoc3Ry dWN0IGRwX3BhbmVsICpkcF9wYW5lbCk7Ci0JdTMyICgqZ2V0X21heF9wY2xrKShzdHJ1Y3QgZHBf cGFuZWwgKmRwX3BhbmVsKTsKLQlpbnQgKCpnZXRfbW9kZXMpKHN0cnVjdCBkcF9wYW5lbCAqZHBf cGFuZWwsCi0JCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBkcF9kaXNw bGF5X21vZGUgKm1vZGUpOwotCXZvaWQgKCpoYW5kbGVfc2lua19yZXF1ZXN0KShzdHJ1Y3QgZHBf cGFuZWwgKmRwX3BhbmVsKTsKLX07Ci0KLS8qKgotICogaXNfbGlua19yYXRlX3ZhbGlkKCkgLSB2 YWxpZGF0ZXMgdGhlIGxpbmsgcmF0ZQotICogQGxhbmVfcmF0ZTogbGluayByYXRlIHJlcXVlc3Rl ZCBieSB0aGUgc2luawotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIGxpbmsg cmF0ZSBpcyBzdXBwb3J0ZWQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc19saW5rX3JhdGVf dmFsaWQodTMyIGJ3X2NvZGUpCi17Ci0JcmV0dXJuICgoYndfY29kZSA9PSBEUF9MSU5LX0JXXzFf NjIpIHx8Ci0JCShid19jb2RlID09IERQX0xJTktfQldfMl83KSB8fAotCQkoYndfY29kZSA9PSBE UF9MSU5LX0JXXzVfNCkgfHwKLQkJKGJ3X2NvZGUgPT0gRFBfTElOS19CV184XzEpKTsKLX0KLQot LyoqCi0gKiBkcF9saW5rX2lzX2xhbmVfY291bnRfdmFsaWQoKSAtIHZhbGlkYXRlcyB0aGUgbGFu ZSBjb3VudAotICogQGxhbmVfY291bnQ6IGxhbmUgY291bnQgcmVxdWVzdGVkIGJ5IHRoZSBzaW5r Ci0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0ZWQgbGFuZSBjb3VudCBpcyBzdXBw b3J0ZWQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc19sYW5lX2NvdW50X3ZhbGlkKHUzMiBs YW5lX2NvdW50KQotewotCXJldHVybiAobGFuZV9jb3VudCA9PSBEUF9MQU5FX0NPVU5UXzEpIHx8 Ci0JCShsYW5lX2NvdW50ID09IERQX0xBTkVfQ09VTlRfMikgfHwKLQkJKGxhbmVfY291bnQgPT0g RFBfTEFORV9DT1VOVF80KTsKLX0KLQotc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbF9nZXQoc3Ry dWN0IGRwX3BhbmVsX2luICppbik7Ci12b2lkIGRwX3BhbmVsX3B1dChzdHJ1Y3QgZHBfcGFuZWwg KmRwX3BhbmVsKTsKLSNlbmRpZiAvKiBfRFBfUEFORUxfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZHAvZHBfcGFyc2VyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2Rw X3BhcnNlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzhjMzExLi4wMDAwMDAw Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFyc2VyLmMKKysrIC9kZXYvbnVsbApA QCAtMSw2NDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE4LCBUaGUgTGlu dXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQot ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0g KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwot Ci0jZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJtLWRwXSAlczogIiBmbXQsIF9fZnVuY19fCi0KLSNp bmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+Ci0KLSNpbmNsdWRlICJkcF9wYXJzZXIuaCIKLQotc3Rh dGljIHZvaWQgZHBfcGFyc2VyX3VubWFwX2lvX3Jlc291cmNlcyhzdHJ1Y3QgZHBfcGFyc2VyICpw YXJzZXIpCi17Ci0Jc3RydWN0IGRwX2lvICppbyA9ICZwYXJzZXItPmlvOwotCi0JbXNtX2Rzc19p b3VubWFwKCZpby0+Y3RybF9pbyk7Ci0JbXNtX2Rzc19pb3VubWFwKCZpby0+cGh5X2lvKTsKLQlt c21fZHNzX2lvdW5tYXAoJmlvLT5sbl90eDBfaW8pOwotCW1zbV9kc3NfaW91bm1hcCgmaW8tPmxu X3R4MF9pbyk7Ci0JbXNtX2Rzc19pb3VubWFwKCZpby0+ZHBfcGxsX2lvKTsKLQltc21fZHNzX2lv dW5tYXAoJmlvLT5kcF9jY19pbyk7Ci0JbXNtX2Rzc19pb3VubWFwKCZpby0+dXNiM19kcF9jb20p OwotCW1zbV9kc3NfaW91bm1hcCgmaW8tPnFmcHJvbV9pbyk7Ci0JbXNtX2Rzc19pb3VubWFwKCZp by0+aGRjcF9pbyk7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfcGFyc2VyX2N0cmxfcmVzKHN0cnVjdCBk cF9wYXJzZXIgKnBhcnNlcikKLXsKLQlpbnQgcmMgPSAwOwotCXUzMiBpbmRleDsKLQlzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gcGFyc2VyLT5wZGV2OwotCXN0cnVjdCBkZXZpY2Vfbm9k ZSAqb2Zfbm9kZSA9IHBhcnNlci0+cGRldi0+ZGV2Lm9mX25vZGU7Ci0Jc3RydWN0IGRwX2lvICpp byA9ICZwYXJzZXItPmlvOwotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAi Y2VsbC1pbmRleCIsICZpbmRleCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiY2VsbC1pbmRleCBu b3Qgc3BlY2lmaWVkLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlyYyA9IG1z bV9kc3NfaW9yZW1hcF9ieW5hbWUocGRldiwgJmlvLT5jdHJsX2lvLCAiZHBfY3RybCIpOwotCWlm IChyYykgewotCQlwcl9lcnIoInVuYWJsZSB0byByZW1hcCBkcCBpbyByZXNvdXJjZXNcbiIpOwot CQlnb3RvIGVycjsKLQl9Ci0KLQlyYyA9IG1zbV9kc3NfaW9yZW1hcF9ieW5hbWUocGRldiwgJmlv LT5waHlfaW8sICJkcF9waHkiKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJ1bmFibGUgdG8gcmVt YXAgZHAgUEhZIHJlc291cmNlc1xuIik7Ci0JCWdvdG8gZXJyOwotCX0KLQotCXJjID0gbXNtX2Rz c19pb3JlbWFwX2J5bmFtZShwZGV2LCAmaW8tPmxuX3R4MF9pbywgImRwX2xuX3R4MCIpOwotCWlm IChyYykgewotCQlwcl9lcnIoInVuYWJsZSB0byByZW1hcCBkcCBUWDAgcmVzb3VyY2VzXG4iKTsK LQkJZ290byBlcnI7Ci0JfQotCi0JcmMgPSBtc21fZHNzX2lvcmVtYXBfYnluYW1lKHBkZXYsICZp by0+bG5fdHgxX2lvLCAiZHBfbG5fdHgxIik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigidW5hYmxl IHRvIHJlbWFwIGRwIFRYMSByZXNvdXJjZXNcbiIpOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlyYyA9 IG1zbV9kc3NfaW9yZW1hcF9ieW5hbWUocGRldiwgJmlvLT5kcF9wbGxfaW8sICJkcF9wbGwiKTsK LQlpZiAocmMpIHsKLQkJcHJfZXJyKCJ1bmFibGUgdG8gcmVtYXAgRFAgUExMIHJlc291cmNlc1xu Iik7Ci0JCWdvdG8gZXJyOwotCX0KLQotCXJjID0gbXNtX2Rzc19pb3JlbWFwX2J5bmFtZShwZGV2 LCAmaW8tPnVzYjNfZHBfY29tLCAidXNiM19kcF9jb20iKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJy KCJ1bmFibGUgdG8gcmVtYXAgVVNCMyBEUCBjb20gcmVzb3VyY2VzXG4iKTsKLQkJZ290byBlcnI7 Ci0JfQotCi0JaWYgKG1zbV9kc3NfaW9yZW1hcF9ieW5hbWUocGRldiwgJmlvLT5kcF9jY19pbywg ImRwX21tc3NfY2MiKSkgewotCQlwcl9lcnIoInVuYWJsZSB0byByZW1hcCBkcCBNTVNTX0NDIHJl c291cmNlc1xuIik7Ci0JCWdvdG8gZXJyOwotCX0KLQotCWlmIChtc21fZHNzX2lvcmVtYXBfYnlu YW1lKHBkZXYsICZpby0+cWZwcm9tX2lvLCAicWZwcm9tX3BoeXNpY2FsIikpCi0JCXByX3dhcm4o InVuYWJsZSB0byByZW1hcCBkcCBxZnByb20gcmVzb3VyY2VzXG4iKTsKLQotCWlmIChtc21fZHNz X2lvcmVtYXBfYnluYW1lKHBkZXYsICZpby0+aGRjcF9pbywgImhkY3BfcGh5c2ljYWwiKSkKLQkJ cHJfd2FybigidW5hYmxlIHRvIHJlbWFwIGRwIGhkY3AgcmVzb3VyY2VzXG4iKTsKLQotCXJldHVy biAwOwotZXJyOgotCWRwX3BhcnNlcl91bm1hcF9pb19yZXNvdXJjZXMocGFyc2VyKTsKLQlyZXR1 cm4gcmM7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpkcF9nZXRfcGh5X2F1eF9jb25maWdfcHJv cGVydHkodTMyIGNmZ190eXBlKQotewotCXN3aXRjaCAoY2ZnX3R5cGUpIHsKLQljYXNlIFBIWV9B VVhfQ0ZHMDoKLQkJcmV0dXJuICJxY29tLGF1eC1jZmcwLXNldHRpbmdzIjsKLQljYXNlIFBIWV9B VVhfQ0ZHMToKLQkJcmV0dXJuICJxY29tLGF1eC1jZmcxLXNldHRpbmdzIjsKLQljYXNlIFBIWV9B VVhfQ0ZHMjoKLQkJcmV0dXJuICJxY29tLGF1eC1jZmcyLXNldHRpbmdzIjsKLQljYXNlIFBIWV9B VVhfQ0ZHMzoKLQkJcmV0dXJuICJxY29tLGF1eC1jZmczLXNldHRpbmdzIjsKLQljYXNlIFBIWV9B VVhfQ0ZHNDoKLQkJcmV0dXJuICJxY29tLGF1eC1jZmc0LXNldHRpbmdzIjsKLQljYXNlIFBIWV9B VVhfQ0ZHNToKLQkJcmV0dXJuICJxY29tLGF1eC1jZmc1LXNldHRpbmdzIjsKLQljYXNlIFBIWV9B VVhfQ0ZHNjoKLQkJcmV0dXJuICJxY29tLGF1eC1jZmc2LXNldHRpbmdzIjsKLQljYXNlIFBIWV9B VVhfQ0ZHNzoKLQkJcmV0dXJuICJxY29tLGF1eC1jZmc3LXNldHRpbmdzIjsKLQljYXNlIFBIWV9B VVhfQ0ZHODoKLQkJcmV0dXJuICJxY29tLGF1eC1jZmc4LXNldHRpbmdzIjsKLQljYXNlIFBIWV9B VVhfQ0ZHOToKLQkJcmV0dXJuICJxY29tLGF1eC1jZmc5LXNldHRpbmdzIjsKLQlkZWZhdWx0Ogot CQlyZXR1cm4gInVua25vd24iOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZHBfcGFyc2VyX3BoeV9h dXhfY2ZnX3Jlc2V0KHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcikKLXsKLQlpbnQgaSA9IDA7Ci0K LQlmb3IgKGkgPSAwOyBpIDwgUEhZX0FVWF9DRkdfTUFYOyBpKyspCi0JCXBhcnNlci0+YXV4X2Nm Z1tpXSA9IChjb25zdCBzdHJ1Y3QgZHBfYXV4X2NmZyl7IDAgfTsKLX0KLQotc3RhdGljIGludCBk cF9wYXJzZXJfYXV4KHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcikKLXsKLQlzdHJ1Y3QgZGV2aWNl X25vZGUgKm9mX25vZGUgPSBwYXJzZXItPnBkZXYtPmRldi5vZl9ub2RlOwotCWludCBsZW4gPSAw LCBpID0gMCwgaiA9IDAsIGNvbmZpZ19jb3VudCA9IDA7Ci0JY29uc3QgY2hhciAqZGF0YTsKLQlp bnQgY29uc3QgbWluaW11bV9jb25maWdfY291bnQgPSAxOwotCi0JZm9yIChpID0gMDsgaSA8IFBI WV9BVVhfQ0ZHX01BWDsgaSsrKSB7Ci0JCWNvbnN0IGNoYXIgKnByb3BlcnR5ID0gZHBfZ2V0X3Bo eV9hdXhfY29uZmlnX3Byb3BlcnR5KGkpOwotCi0JCWRhdGEgPSBvZl9nZXRfcHJvcGVydHkob2Zf bm9kZSwgcHJvcGVydHksICZsZW4pOwotCQlpZiAoIWRhdGEpIHsKLQkJCXByX2VycigiVW5hYmxl IHRvIHJlYWQgJXNcbiIsIHByb3BlcnR5KTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQotCQljb25m aWdfY291bnQgPSBsZW4gLSAxOwotCQlpZiAoKGNvbmZpZ19jb3VudCA8IG1pbmltdW1fY29uZmln X2NvdW50KSB8fAotCQkJKGNvbmZpZ19jb3VudCA+IERQX0FVWF9DRkdfTUFYX1ZBTFVFX0NOVCkp IHsKLQkJCXByX2VycigiSW52YWxpZCBjb25maWcgY291bnQgKCVkKSBjb25maWdzIGZvciAlc1xu IiwKLQkJCQkJY29uZmlnX2NvdW50LCBwcm9wZXJ0eSk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0K LQkJcGFyc2VyLT5hdXhfY2ZnW2ldLm9mZnNldCA9IGRhdGFbMF07Ci0JCXBhcnNlci0+YXV4X2Nm Z1tpXS5jZmdfY250ID0gY29uZmlnX2NvdW50OwotCQlwcl9kZWJ1ZygiJXMgb2Zmc2V0PTB4JXgs IGNmZ19jbnQ9JWRcbiIsCi0JCQkJcHJvcGVydHksCi0JCQkJcGFyc2VyLT5hdXhfY2ZnW2ldLm9m ZnNldCwKLQkJCQlwYXJzZXItPmF1eF9jZmdbaV0uY2ZnX2NudCk7Ci0JCWZvciAoaiA9IDE7IGog PCBsZW47IGorKykgewotCQkJcGFyc2VyLT5hdXhfY2ZnW2ldLmx1dFtqIC0gMV0gPSBkYXRhW2pd OwotCQkJcHJfZGVidWcoIiVzIGx1dFslZF09MHgleFxuIiwKLQkJCQkJcHJvcGVydHksCi0JCQkJ CWksCi0JCQkJCXBhcnNlci0+YXV4X2NmZ1tpXS5sdXRbaiAtIDFdKTsKLQkJfQotCX0KLQkJcmV0 dXJuIDA7Ci0KLWVycm9yOgotCWRwX3BhcnNlcl9waHlfYXV4X2NmZ19yZXNldChwYXJzZXIpOwot CXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IGRwX3BhcnNlcl9taXNjKHN0cnVjdCBk cF9wYXJzZXIgKnBhcnNlcikKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAq b2Zfbm9kZSA9IHBhcnNlci0+cGRldi0+ZGV2Lm9mX25vZGU7Ci0KLQlyYyA9IG9mX3Byb3BlcnR5 X3JlYWRfdTMyKG9mX25vZGUsCi0JCSJxY29tLG1heC1wY2xrLWZyZXF1ZW5jeS1raHoiLCAmcGFy c2VyLT5tYXhfcGNsa19raHopOwotCWlmIChyYykKLQkJcGFyc2VyLT5tYXhfcGNsa19raHogPSBE UF9NQVhfUElYRUxfQ0xLX0tIWjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRwX3Bh cnNlcl9waW5jdHJsKHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcikKLXsKLQlpbnQgcmMgPSAwOwot CXN0cnVjdCBkcF9waW5jdHJsICpwaW5jdHJsID0gJnBhcnNlci0+cGluY3RybDsKLQotCXBpbmN0 cmwtPnBpbiA9IGRldm1fcGluY3RybF9nZXQoJnBhcnNlci0+cGRldi0+ZGV2KTsKLQotCWlmIChJ U19FUlJfT1JfTlVMTChwaW5jdHJsLT5waW4pKSB7Ci0JCXJjID0gUFRSX0VSUihwaW5jdHJsLT5w aW4pOwotCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgcGluY3RybCwgcmM9JWRcbiIsIHJjKTsKLQkJ Z290byBlcnJvcjsKLQl9Ci0KLQlwaW5jdHJsLT5zdGF0ZV9hY3RpdmUgPSBwaW5jdHJsX2xvb2t1 cF9zdGF0ZShwaW5jdHJsLT5waW4sCi0JCQkJCSJtZHNzX2RwX2FjdGl2ZSIpOwotCWlmIChJU19F UlJfT1JfTlVMTChwaW5jdHJsLT5zdGF0ZV9hY3RpdmUpKSB7Ci0JCXJjID0gUFRSX0VSUihwaW5j dHJsLT5zdGF0ZV9hY3RpdmUpOwotCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgcGluY3RybCBhY3Rp dmUgc3RhdGUsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcGluY3RybC0+ c3RhdGVfc3VzcGVuZCA9IHBpbmN0cmxfbG9va3VwX3N0YXRlKHBpbmN0cmwtPnBpbiwKLQkJCQkJ Im1kc3NfZHBfc2xlZXAiKTsKLQlpZiAoSVNfRVJSX09SX05VTEwocGluY3RybC0+c3RhdGVfc3Vz cGVuZCkpIHsKLQkJcmMgPSBQVFJfRVJSKHBpbmN0cmwtPnN0YXRlX3N1c3BlbmQpOwotCQlwcl9l cnIoImZhaWxlZCB0byBnZXQgcGluY3RybCBzdXNwZW5kIHN0YXRlLCByYz0lZFxuIiwgcmMpOwot CQlnb3RvIGVycm9yOwotCX0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBk cF9wYXJzZXJfZ3BpbyhzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXIpCi17Ci0JaW50IGkgPSAwOwot CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwYXJzZXItPnBkZXYtPmRldjsKLQlzdHJ1Y3QgZGV2aWNl X25vZGUgKm9mX25vZGUgPSBkZXYtPm9mX25vZGU7Ci0Jc3RydWN0IGRzc19tb2R1bGVfcG93ZXIg Km1wID0gJnBhcnNlci0+bXBbRFBfQ09SRV9QTV07Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKiBjb25z dCBkcF9ncGlvc1tdID0gewotCQkicWNvbSxhdXgtZW4tZ3BpbyIsCi0JCSJxY29tLGF1eC1zZWwt Z3BpbyIsCi0JCSJxY29tLHVzYnBsdWctY2MtZ3BpbyIsCi0JfTsKLQotCW1wLT5ncGlvX2NvbmZp ZyA9IGRldm1fa3phbGxvYyhkZXYsCi0JCXNpemVvZihzdHJ1Y3QgZHNzX2dwaW8pICogQVJSQVlf U0laRShkcF9ncGlvcyksIEdGUF9LRVJORUwpOwotCW1wLT5udW1fZ3BpbyA9IEFSUkFZX1NJWkUo ZHBfZ3Bpb3MpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHBfZ3Bpb3MpOyBpKysp IHsKLQkJbXAtPmdwaW9fY29uZmlnW2ldLmdwaW8gPSBvZl9nZXRfbmFtZWRfZ3BpbyhvZl9ub2Rl LAotCQkJZHBfZ3Bpb3NbaV0sIDApOwotCi0JCWlmICghZ3Bpb19pc192YWxpZChtcC0+Z3Bpb19j b25maWdbaV0uZ3BpbykpIHsKLQkJCXByX2VycigiJXMgZ3BpbyBub3Qgc3BlY2lmaWVkXG4iLCBk cF9ncGlvc1tpXSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCXN0cmxjcHkobXAtPmdw aW9fY29uZmlnW2ldLmdwaW9fbmFtZSwgZHBfZ3Bpb3NbaV0sCi0JCQlzaXplb2YobXAtPmdwaW9f Y29uZmlnW2ldLmdwaW9fbmFtZSkpOwotCi0JCW1wLT5ncGlvX2NvbmZpZ1tpXS52YWx1ZSA9IDA7 Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpkcF9wYXJzZXJfc3Vw cGx5X25vZGVfbmFtZShlbnVtIGRwX3BtX3R5cGUgbW9kdWxlKQotewotCXN3aXRjaCAobW9kdWxl KSB7Ci0JY2FzZSBEUF9DT1JFX1BNOglyZXR1cm4gInFjb20sY29yZS1zdXBwbHktZW50cmllcyI7 Ci0JY2FzZSBEUF9DVFJMX1BNOglyZXR1cm4gInFjb20sY3RybC1zdXBwbHktZW50cmllcyI7Ci0J Y2FzZSBEUF9QSFlfUE06CQlyZXR1cm4gInFjb20scGh5LXN1cHBseS1lbnRyaWVzIjsKLQlkZWZh dWx0OgkJcmV0dXJuICI/Pz8iOwotCX0KLX0KLQotc3RhdGljIGludCBkcF9wYXJzZXJfZ2V0X3Zy ZWcoc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyLAotCQllbnVtIGRwX3BtX3R5cGUgbW9kdWxlKQot ewotCWludCBpID0gMCwgcmMgPSAwOwotCXUzMiB0bXAgPSAwOwotCWNvbnN0IGNoYXIgKnBtX3N1 cHBseV9uYW1lID0gTlVMTDsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnN1cHBseV9ub2RlID0gTlVM TDsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUgPSBwYXJzZXItPnBkZXYtPmRldi5vZl9u b2RlOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc3VwcGx5X3Jvb3Rfbm9kZSA9IE5VTEw7Ci0Jc3Ry dWN0IGRzc19tb2R1bGVfcG93ZXIgKm1wID0gJnBhcnNlci0+bXBbbW9kdWxlXTsKLQotCW1wLT5u dW1fdnJlZyA9IDA7Ci0JcG1fc3VwcGx5X25hbWUgPSBkcF9wYXJzZXJfc3VwcGx5X25vZGVfbmFt ZShtb2R1bGUpOwotCXN1cHBseV9yb290X25vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShvZl9u b2RlLCBwbV9zdXBwbHlfbmFtZSk7Ci0JaWYgKCFzdXBwbHlfcm9vdF9ub2RlKSB7Ci0JCXByX2Vy cigibm8gc3VwcGx5IGVudHJ5IHByZXNlbnQ6ICVzXG4iLCBwbV9zdXBwbHlfbmFtZSk7Ci0JCWdv dG8gbm92cmVnOwotCX0KLQotCW1wLT5udW1fdnJlZyA9IG9mX2dldF9hdmFpbGFibGVfY2hpbGRf Y291bnQoc3VwcGx5X3Jvb3Rfbm9kZSk7Ci0KLQlpZiAobXAtPm51bV92cmVnID09IDApIHsKLQkJ cHJfZGVidWcoIm5vIHZyZWdcbiIpOwotCQlnb3RvIG5vdnJlZzsKLQl9IGVsc2UgewotCQlwcl9k ZWJ1ZygidnJlZyBmb3VuZC4gY291bnQ9JWRcbiIsIG1wLT5udW1fdnJlZyk7Ci0JfQotCi0JbXAt PnZyZWdfY29uZmlnID0gZGV2bV9remFsbG9jKCZwYXJzZXItPnBkZXYtPmRldiwKLQkJc2l6ZW9m KHN0cnVjdCBkc3NfdnJlZykgKiBtcC0+bnVtX3ZyZWcsIEdGUF9LRVJORUwpOwotCWlmICghbXAt PnZyZWdfY29uZmlnKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlm b3JfZWFjaF9jaGlsZF9vZl9ub2RlKHN1cHBseV9yb290X25vZGUsIHN1cHBseV9ub2RlKSB7Ci0J CWNvbnN0IGNoYXIgKnN0ID0gTlVMTDsKLQkJLyogdnJlZy1uYW1lICovCi0JCXJjID0gb2ZfcHJv cGVydHlfcmVhZF9zdHJpbmcoc3VwcGx5X25vZGUsCi0JCQkicWNvbSxzdXBwbHktbmFtZSIsICZz dCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJlcnJvciByZWFkaW5nIG5hbWUuIHJjPSVkXG4i LAotCQkJCSByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JCXNucHJpbnRmKG1wLT52cmVnX2Nv bmZpZ1tpXS52cmVnX25hbWUsCi0JCQlBUlJBWV9TSVpFKChtcC0+dnJlZ19jb25maWdbaV0udnJl Z19uYW1lKSksICIlcyIsIHN0KTsKLQkJLyogdnJlZy1taW4tdm9sdGFnZSAqLwotCQlyYyA9IG9m X3Byb3BlcnR5X3JlYWRfdTMyKHN1cHBseV9ub2RlLAotCQkJInFjb20sc3VwcGx5LW1pbi12b2x0 YWdlIiwgJnRtcCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJlcnJvciByZWFkaW5nIG1pbiB2 b2x0LiByYz0lZFxuIiwKLQkJCQlyYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JCW1wLT52cmVn X2NvbmZpZ1tpXS5taW5fdm9sdGFnZSA9IHRtcDsKLQotCQkvKiB2cmVnLW1heC12b2x0YWdlICov Ci0JCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoc3VwcGx5X25vZGUsCi0JCQkicWNvbSxzdXBw bHktbWF4LXZvbHRhZ2UiLCAmdG1wKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImVycm9yIHJl YWRpbmcgbWF4IHZvbHQuIHJjPSVkXG4iLAotCQkJCXJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0K LQkJbXAtPnZyZWdfY29uZmlnW2ldLm1heF92b2x0YWdlID0gdG1wOwotCi0JCS8qIGVuYWJsZS1s b2FkICovCi0JCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoc3VwcGx5X25vZGUsCi0JCQkicWNv bSxzdXBwbHktZW5hYmxlLWxvYWQiLCAmdG1wKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImVy cm9yIHJlYWRpbmcgZW5hYmxlIGxvYWQuIHJjPSVkXG4iLAotCQkJCXJjKTsKLQkJCWdvdG8gZXJy b3I7Ci0JCX0KLQkJbXAtPnZyZWdfY29uZmlnW2ldLmVuYWJsZV9sb2FkID0gdG1wOwotCi0JCS8q IGRpc2FibGUtbG9hZCAqLwotCQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHN1cHBseV9ub2Rl LAotCQkJInFjb20sc3VwcGx5LWRpc2FibGUtbG9hZCIsICZ0bXApOwotCQlpZiAocmMpIHsKLQkJ CXByX2VycigiZXJyb3IgcmVhZGluZyBkaXNhYmxlIGxvYWQuIHJjPSVkXG4iLAotCQkJCXJjKTsK LQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQkJbXAtPnZyZWdfY29uZmlnW2ldLmRpc2FibGVfbG9hZCA9 IHRtcDsKLQotCQlwcl9kZWJ1ZygiJXMgbWluPSVkLCBtYXg9JWQsIGVuYWJsZT0lZCwgZGlzYWJs ZT0lZFxuIiwKLQkJCW1wLT52cmVnX2NvbmZpZ1tpXS52cmVnX25hbWUsCi0JCQltcC0+dnJlZ19j b25maWdbaV0ubWluX3ZvbHRhZ2UsCi0JCQltcC0+dnJlZ19jb25maWdbaV0ubWF4X3ZvbHRhZ2Us Ci0JCQltcC0+dnJlZ19jb25maWdbaV0uZW5hYmxlX2xvYWQsCi0JCQltcC0+dnJlZ19jb25maWdb aV0uZGlzYWJsZV9sb2FkCi0JCQkpOwotCQkrK2k7Ci0JfQotCi0JcmV0dXJuIHJjOwotCi1lcnJv cjoKLQlpZiAobXAtPnZyZWdfY29uZmlnKSB7Ci0JCWRldm1fa2ZyZWUoJnBhcnNlci0+cGRldi0+ ZGV2LCBtcC0+dnJlZ19jb25maWcpOwotCQltcC0+dnJlZ19jb25maWcgPSBOVUxMOwotCX0KLW5v dnJlZzoKLQltcC0+bnVtX3ZyZWcgPSAwOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9p ZCBkcF9wYXJzZXJfcHV0X3ZyZWdfZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0Jc3RydWN0IGRz c19tb2R1bGVfcG93ZXIgKm1wKQotewotCWlmICghbXApIHsKLQkJREVWX0VSUigiaW52YWxpZCBp bnB1dFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAobXAtPnZyZWdfY29uZmlnKSB7Ci0JCWRl dm1fa2ZyZWUoZGV2LCBtcC0+dnJlZ19jb25maWcpOwotCQltcC0+dnJlZ19jb25maWcgPSBOVUxM OwotCX0KLQltcC0+bnVtX3ZyZWcgPSAwOwotfQotCi1zdGF0aWMgaW50IGRwX3BhcnNlcl9yZWd1 bGF0b3Ioc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyKQotewotCWludCBpLCByYyA9IDA7Ci0Jc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHBhcnNlci0+cGRldjsKLQotCS8qIFBhcnNlIHRo ZSByZWd1bGF0b3IgaW5mb3JtYXRpb24gKi8KLQlmb3IgKGkgPSBEUF9DT1JFX1BNOyBpIDwgRFBf TUFYX1BNOyBpKyspIHsKLQkJcmMgPSBkcF9wYXJzZXJfZ2V0X3ZyZWcocGFyc2VyLCBpKTsKLQkJ aWYgKHJjKSB7Ci0JCQlwcl9lcnIoImdldF9kdF92cmVnX2RhdGEgZmFpbGVkIGZvciAlcy4gcmM9 JWRcbiIsCi0JCQkJZHBfcGFyc2VyX3BtX25hbWUoaSksIHJjKTsKLQkJCWktLTsKLQkJCWZvciAo OyBpID49IERQX0NPUkVfUE07IGktLSkKLQkJCQlkcF9wYXJzZXJfcHV0X3ZyZWdfZGF0YSgmcGRl di0+ZGV2LAotCQkJCQkmcGFyc2VyLT5tcFtpXSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJl dHVybiByYzsKLX0KLQotc3RhdGljIGJvb2wgZHBfcGFyc2VyX2NoZWNrX3ByZWZpeChjb25zdCBj aGFyICpjbGtfcHJlZml4LCBjb25zdCBjaGFyICpjbGtfbmFtZSkKLXsKLQlyZXR1cm4gISFzdHJu c3RyKGNsa19uYW1lLCBjbGtfcHJlZml4LCBzdHJsZW4oY2xrX25hbWUpKTsKLX0KLQotc3RhdGlj IHZvaWQgZHBfcGFyc2VyX3B1dF9jbGtfZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0Jc3RydWN0 IGRzc19tb2R1bGVfcG93ZXIgKm1wKQotewotCWlmICghbXApIHsKLQkJREVWX0VSUigiJXM6IGlu dmFsaWQgaW5wdXRcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChtcC0+Y2xr X2NvbmZpZykgewotCQlkZXZtX2tmcmVlKGRldiwgbXAtPmNsa19jb25maWcpOwotCQltcC0+Y2xr X2NvbmZpZyA9IE5VTEw7Ci0JfQotCi0JbXAtPm51bV9jbGsgPSAwOwotfQotCi1zdGF0aWMgaW50 IGRwX3BhcnNlcl9pbml0X2Nsa19kYXRhKHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcikKLXsKLQlp bnQgbnVtX2NsayA9IDAsIGkgPSAwLCByYyA9IDA7Ci0JaW50IGNvcmVfY2xrX2NvdW50ID0gMCwg Y3RybF9jbGtfY291bnQgPSAwOwotCWNvbnN0IGNoYXIgKmNvcmVfY2xrID0gImNvcmUiOwotCWNv bnN0IGNoYXIgKmN0cmxfY2xrID0gImN0cmwiOwotCWNvbnN0IGNoYXIgKmNsa19uYW1lOwotCXN0 cnVjdCBkZXZpY2UgKmRldiA9ICZwYXJzZXItPnBkZXYtPmRldjsKLQlzdHJ1Y3QgZHNzX21vZHVs ZV9wb3dlciAqY29yZV9wb3dlciA9ICZwYXJzZXItPm1wW0RQX0NPUkVfUE1dOwotCXN0cnVjdCBk c3NfbW9kdWxlX3Bvd2VyICpjdHJsX3Bvd2VyID0gJnBhcnNlci0+bXBbRFBfQ1RSTF9QTV07Ci0K LQludW1fY2xrID0gb2ZfcHJvcGVydHlfY291bnRfc3RyaW5ncyhkZXYtPm9mX25vZGUsICJjbG9j ay1uYW1lcyIpOwotCWlmIChudW1fY2xrIDw9IDApIHsKLQkJcHJfZXJyKCJubyBjbG9ja3MgYXJl IGRlZmluZWRcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlmb3Ig KGkgPSAwOyBpIDwgbnVtX2NsazsgaSsrKSB7Ci0JCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2lu ZGV4KGRldi0+b2Zfbm9kZSwKLQkJCQkiY2xvY2stbmFtZXMiLCBpLCAmY2xrX25hbWUpOwotCi0J CWlmIChkcF9wYXJzZXJfY2hlY2tfcHJlZml4KGNvcmVfY2xrLCBjbGtfbmFtZSkpCi0JCQljb3Jl X2Nsa19jb3VudCsrOwotCi0JCWlmIChkcF9wYXJzZXJfY2hlY2tfcHJlZml4KGN0cmxfY2xrLCBj bGtfbmFtZSkpCi0JCQljdHJsX2Nsa19jb3VudCsrOwotCX0KLQotCS8qIEluaXRpYWxpemUgdGhl IENPUkUgcG93ZXIgbW9kdWxlICovCi0JaWYgKGNvcmVfY2xrX2NvdW50IDw9IDApIHsKLQkJcHJf ZXJyKCJubyBjb3JlIGNsb2NrcyBhcmUgZGVmaW5lZFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJ Z290byBleGl0OwotCX0KLQotCWNvcmVfcG93ZXItPm51bV9jbGsgPSBjb3JlX2Nsa19jb3VudDsK LQljb3JlX3Bvd2VyLT5jbGtfY29uZmlnID0gZGV2bV9remFsbG9jKGRldiwKLQkJCXNpemVvZihz dHJ1Y3QgZHNzX2NsaykgKiBjb3JlX3Bvd2VyLT5udW1fY2xrLAotCQkJR0ZQX0tFUk5FTCk7Ci0J aWYgKCFjb3JlX3Bvd2VyLT5jbGtfY29uZmlnKSB7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBl eGl0OwotCX0KLQotCS8qIEluaXRpYWxpemUgdGhlIENUUkwgcG93ZXIgbW9kdWxlICovCi0JaWYg KGN0cmxfY2xrX2NvdW50IDw9IDApIHsKLQkJcHJfZXJyKCJubyBjdHJsIGNsb2NrcyBhcmUgZGVm aW5lZFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBjdHJsX2Nsb2NrX2Vycm9yOwotCX0K LQotCWN0cmxfcG93ZXItPm51bV9jbGsgPSBjdHJsX2Nsa19jb3VudDsKLQljdHJsX3Bvd2VyLT5j bGtfY29uZmlnID0gZGV2bV9remFsbG9jKGRldiwKLQkJCXNpemVvZihzdHJ1Y3QgZHNzX2Nsaykg KiBjdHJsX3Bvd2VyLT5udW1fY2xrLAotCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjdHJsX3Bvd2Vy LT5jbGtfY29uZmlnKSB7Ci0JCWN0cmxfcG93ZXItPm51bV9jbGsgPSAwOwotCQlyYyA9IC1FSU5W QUw7Ci0JCWdvdG8gY3RybF9jbG9ja19lcnJvcjsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci0KLWN0cmxf Y2xvY2tfZXJyb3I6Ci0JZHBfcGFyc2VyX3B1dF9jbGtfZGF0YShkZXYsIGNvcmVfcG93ZXIpOwot ZXhpdDoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfcGFyc2VyX2Nsb2NrKHN0cnVj dCBkcF9wYXJzZXIgKnBhcnNlcikKLXsKLQlpbnQgcmMgPSAwLCBpID0gMDsKLQlpbnQgbnVtX2Ns ayA9IDA7Ci0JaW50IGNvcmVfY2xrX2luZGV4ID0gMCwgY3RybF9jbGtfaW5kZXggPSAwOwotCWlu dCBjb3JlX2Nsa19jb3VudCA9IDAsIGN0cmxfY2xrX2NvdW50ID0gMDsKLQljb25zdCBjaGFyICpj bGtfbmFtZTsKLQljb25zdCBjaGFyICpjb3JlX2NsayA9ICJjb3JlIjsKLQljb25zdCBjaGFyICpj dHJsX2NsayA9ICJjdHJsIjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGFyc2VyLT5wZGV2LT5k ZXY7Ci0Jc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKmNvcmVfcG93ZXIgPSAmcGFyc2VyLT5tcFtE UF9DT1JFX1BNXTsKLQlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqY3RybF9wb3dlciA9ICZwYXJz ZXItPm1wW0RQX0NUUkxfUE1dOwotCi0JY29yZV9wb3dlciA9ICZwYXJzZXItPm1wW0RQX0NPUkVf UE1dOwotCWN0cmxfcG93ZXIgPSAmcGFyc2VyLT5tcFtEUF9DVFJMX1BNXTsKLQotCXJjID0gIGRw X3BhcnNlcl9pbml0X2Nsa19kYXRhKHBhcnNlcik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFp bGVkIHRvIGluaXRpYWxpemUgcG93ZXIgZGF0YVxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290 byBleGl0OwotCX0KLQotCWNvcmVfY2xrX2NvdW50ID0gY29yZV9wb3dlci0+bnVtX2NsazsKLQlj dHJsX2Nsa19jb3VudCA9IGN0cmxfcG93ZXItPm51bV9jbGs7Ci0KLQludW1fY2xrID0gY29yZV9j bGtfY291bnQgKyBjdHJsX2Nsa19jb3VudDsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1fY2xrOyBp KyspIHsKLQkJb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaW5kZXgoZGV2LT5vZl9ub2RlLCAiY2xv Y2stbmFtZXMiLAotCQkJCWksICZjbGtfbmFtZSk7Ci0KLQkJaWYgKGRwX3BhcnNlcl9jaGVja19w cmVmaXgoY29yZV9jbGssIGNsa19uYW1lKSAmJgotCQkJCWNvcmVfY2xrX2luZGV4IDwgY29yZV9j bGtfY291bnQpIHsKLQkJCXN0cnVjdCBkc3NfY2xrICpjbGsgPQotCQkJCSZjb3JlX3Bvd2VyLT5j bGtfY29uZmlnW2NvcmVfY2xrX2luZGV4XTsKLQkJCXN0cmxjcHkoY2xrLT5jbGtfbmFtZSwgY2xr X25hbWUsIHNpemVvZihjbGstPmNsa19uYW1lKSk7Ci0JCQljbGstPnR5cGUgPSBEU1NfQ0xLX0FI QjsKLQkJCWNvcmVfY2xrX2luZGV4Kys7Ci0JCX0gZWxzZSBpZiAoZHBfcGFyc2VyX2NoZWNrX3By ZWZpeChjdHJsX2NsaywgY2xrX25hbWUpICYmCi0JCQkgICBjdHJsX2Nsa19pbmRleCA8IGN0cmxf Y2xrX2NvdW50KSB7Ci0JCQlzdHJ1Y3QgZHNzX2NsayAqY2xrID0KLQkJCQkmY3RybF9wb3dlci0+ Y2xrX2NvbmZpZ1tjdHJsX2Nsa19pbmRleF07Ci0JCQlzdHJsY3B5KGNsay0+Y2xrX25hbWUsIGNs a19uYW1lLCBzaXplb2YoY2xrLT5jbGtfbmFtZSkpOwotCQkJY3RybF9jbGtfaW5kZXgrKzsKLQot CQkJaWYgKCFzdHJjbXAoY2xrX25hbWUsICJjdHJsX2xpbmtfY2xrIikgfHwKLQkJCSAgICAhc3Ry Y21wKGNsa19uYW1lLCAiY3RybF9waXhlbF9jbGsiKSkKLQkJCQljbGstPnR5cGUgPSBEU1NfQ0xL X1BDTEs7Ci0JCQllbHNlCi0JCQkJY2xrLT50eXBlID0gRFNTX0NMS19BSEI7Ci0JCX0KLQl9Ci0K LQlwcl9kZWJ1ZygiY2xvY2sgcGFyc2luZyBzdWNjZXNzZnVsXG4iKTsKLQotZXhpdDoKLQlyZXR1 cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfcGFyc2VyX3BhcnNlKHN0cnVjdCBkcF9wYXJzZXIg KnBhcnNlcikKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFwYXJzZXIpIHsKLQkJcHJfZXJyKCJp bnZhbGlkIGlucHV0XG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycjsKLQl9Ci0KLQly YyA9IGRwX3BhcnNlcl9jdHJsX3JlcyhwYXJzZXIpOwotCWlmIChyYykKLQkJZ290byBlcnI7Ci0K LQlyYyA9IGRwX3BhcnNlcl9hdXgocGFyc2VyKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyOwotCi0J cmMgPSBkcF9wYXJzZXJfbWlzYyhwYXJzZXIpOwotCWlmIChyYykKLQkJZ290byBlcnI7Ci0KLQly YyA9IGRwX3BhcnNlcl9jbG9jayhwYXJzZXIpOwotCWlmIChyYykKLQkJZ290byBlcnI7Ci0KLQly YyA9IGRwX3BhcnNlcl9yZWd1bGF0b3IocGFyc2VyKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyOwot Ci0JcmMgPSBkcF9wYXJzZXJfZ3BpbyhwYXJzZXIpOwotCWlmIChyYykKLQkJZ290byBlcnI7Ci0K LQlyYyA9IGRwX3BhcnNlcl9waW5jdHJsKHBhcnNlcik7Ci1lcnI6Ci0JcmV0dXJuIHJjOwotfQot Ci1zdHJ1Y3QgZHBfcGFyc2VyICpkcF9wYXJzZXJfZ2V0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCi17Ci0Jc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyOwotCi0JcGFyc2VyID0gZGV2bV9r emFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcGFyc2VyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFw YXJzZXIpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JcGFyc2VyLT5wYXJzZSA9IGRw X3BhcnNlcl9wYXJzZTsKLQlwYXJzZXItPnBkZXYgPSBwZGV2OwotCi0JcmV0dXJuIHBhcnNlcjsK LX0KLQotdm9pZCBkcF9wYXJzZXJfcHV0KHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcikKLXsKLQlp bnQgaSA9IDA7Ci0Jc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKnBvd2VyID0gTlVMTDsKLQotCWlm ICghcGFyc2VyKSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJzZXIgbW9kdWxlXG4iKTsKLQkJcmV0 dXJuOwotCX0KLQotCXBvd2VyID0gcGFyc2VyLT5tcDsKLQotCWZvciAoaSA9IDA7IGkgPCBEUF9N QVhfUE07IGkrKykgewotCQlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqbXAgPSAmcG93ZXJbaV07 Ci0KLQkJZGV2bV9rZnJlZSgmcGFyc2VyLT5wZGV2LT5kZXYsIG1wLT5jbGtfY29uZmlnKTsKLQkJ ZGV2bV9rZnJlZSgmcGFyc2VyLT5wZGV2LT5kZXYsIG1wLT52cmVnX2NvbmZpZyk7Ci0JCWRldm1f a2ZyZWUoJnBhcnNlci0+cGRldi0+ZGV2LCBtcC0+Z3Bpb19jb25maWcpOwotCX0KLQotCWRldm1f a2ZyZWUoJnBhcnNlci0+cGRldi0+ZGV2LCBwYXJzZXIpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9wYXJzZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBf cGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5Y2ZkMDMuLjAwMDAwMDAK LS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYXJzZXIuaAorKysgL2Rldi9udWxsCkBA IC0xLDIwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTgsIFRoZSBMaW51 eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0g KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0K LSNpZm5kZWYgX0RQX1BBUlNFUl9IXwotI2RlZmluZSBfRFBfUEFSU0VSX0hfCi0KLSNpbmNsdWRl IDxsaW51eC9kcHVfaW9fdXRpbC5oPgotCi0jZGVmaW5lIERQX0xBQkVMICJNRFNTIERQIERJU1BM QVkiCi0jZGVmaW5lIEFVWF9DRkdfTEVOCTEwCi0jZGVmaW5lIERQX01BWF9QSVhFTF9DTEtfS0ha CTY3NTAwMAotCi1lbnVtIGRwX3BtX3R5cGUgewotCURQX0NPUkVfUE0sCi0JRFBfQ1RSTF9QTSwK LQlEUF9QSFlfUE0sCi0JRFBfTUFYX1BNCi19OwotCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIg KmRwX3BhcnNlcl9wbV9uYW1lKGVudW0gZHBfcG1fdHlwZSBtb2R1bGUpCi17Ci0Jc3dpdGNoICht b2R1bGUpIHsKLQljYXNlIERQX0NPUkVfUE06CXJldHVybiAiRFBfQ09SRV9QTSI7Ci0JY2FzZSBE UF9DVFJMX1BNOglyZXR1cm4gIkRQX0NUUkxfUE0iOwotCWNhc2UgRFBfUEhZX1BNOgkJcmV0dXJu ICJEUF9QSFlfUE0iOwotCWRlZmF1bHQ6CQlyZXR1cm4gIj8/PyI7Ci0JfQotfQotCi0vKioKLSAq IHN0cnVjdCBkcF9kaXNwbGF5X2RhdGEgIC0gZGlzcGxheSByZWxhdGVkIGRldmljZSB0cmVlIGRh dGEuCi0gKgotICogQGN0cmxfbm9kZTogcmVmZXJlY2UgdG8gY29udHJvbGxlciBkZXZpY2UKLSAq IEBwaHlfbm9kZTogIHJlZmVyZW5jZSB0byBwaHkgZGV2aWNlCi0gKiBAaXNfYWN0aXZlOiBpcyB0 aGUgY29udHJvbGxlciBjdXJyZW50bHkgYWN0aXZlCi0gKiBAbmFtZTogbmFtZSBvZiB0aGUgZGlz cGxheQotICogQGRpc3BsYXlfdHlwZTogdHlwZSBvZiB0aGUgZGlzcGxheQotICovCi1zdHJ1Y3Qg ZHBfZGlzcGxheV9kYXRhIHsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0cmxfbm9kZTsKLQlzdHJ1 Y3QgZGV2aWNlX25vZGUgKnBoeV9ub2RlOwotCWJvb2wgaXNfYWN0aXZlOwotCWNvbnN0IGNoYXIg Km5hbWU7Ci0JY29uc3QgY2hhciAqZGlzcGxheV90eXBlOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3Qg ZHBfY3RybF9yZXNvdXJjZSAtIGNvbnRyb2xsZXIncyBJTyByZWxhdGVkIGRhdGEKLSAqCi0gKiBA Y3RybF9pbzogY29udHJvbGxlcidzIG1hcHBlZCBtZW1vcnkgYWRkcmVzcwotICogQHBoeV9pbzog cGh5J3MgbWFwcGVkIG1lbW9yeSBhZGRyZXNzCi0gKiBAbG5fdHgwX2lvOiBVU0ItRFAgbGFuZSBU WDAncyBtYXBwZWQgbWVtb3J5IGFkZHJlc3MKLSAqIEBsbl90eDFfaW86IFVTQi1EUCBsYW5lIFRY MSdzIG1hcHBlZCBtZW1vcnkgYWRkcmVzcwotICogQGRwX2NjX2lvOiBEUCBjYydzIG1hcHBlZCBt ZW1vcnkgYWRkcmVzcwotICogQHFmcHJvbV9pbzogcWZwcm9tJ3MgbWFwcGVkIG1lbW9yeSBhZGRy ZXNzCi0gKiBAZHBfcGxsX2lvOiBEUCBQTEwgbWFwcGVkIG1lbW9yeSBhZGRyZXNzCi0gKiBAdXNi M19kcF9jb206IFVTQjMgRFAgUEhZIGNvbWJvIG1hcHBlZCBtZW1vcnkgYWRkcmVzcwotICogQGhk Y3BfaW86IGhkY3AncyBtYXBwZWQgbWVtb3J5IGFkZHJlc3MKLSAqLwotc3RydWN0IGRwX2lvIHsK LQlzdHJ1Y3QgZHNzX2lvX2RhdGEgY3RybF9pbzsKLQlzdHJ1Y3QgZHNzX2lvX2RhdGEgcGh5X2lv OwotCXN0cnVjdCBkc3NfaW9fZGF0YSBsbl90eDBfaW87Ci0Jc3RydWN0IGRzc19pb19kYXRhIGxu X3R4MV9pbzsKLQlzdHJ1Y3QgZHNzX2lvX2RhdGEgZHBfY2NfaW87Ci0Jc3RydWN0IGRzc19pb19k YXRhIHFmcHJvbV9pbzsKLQlzdHJ1Y3QgZHNzX2lvX2RhdGEgZHBfcGxsX2lvOwotCXN0cnVjdCBk c3NfaW9fZGF0YSB1c2IzX2RwX2NvbTsKLQlzdHJ1Y3QgZHNzX2lvX2RhdGEgaGRjcF9pbzsKLX07 Ci0KLS8qKgotICogc3RydWN0IGRwX3BpbmN0cmwgLSBEUCdzIHBpbiBjb250cm9sCi0gKgotICog QHBpbjogcGluLWNvbnRyb2xsZXIncyBpbnN0YW5jZQotICogQHN0YXRlX2FjdGl2ZTogYWN0aXZl IHN0YXRlIHBpbiBjb250cm9sCi0gKiBAc3RhdGVfaHBkX2FjdGl2ZTogaHBkIGFjdGl2ZSBzdGF0 ZSBwaW4gY29udHJvbAotICogQHN0YXRlX3N1c3BlbmQ6IHN1c3BlbmQgc3RhdGUgcGluIGNvbnRy b2wKLSAqLwotc3RydWN0IGRwX3BpbmN0cmwgewotCXN0cnVjdCBwaW5jdHJsICpwaW47Ci0Jc3Ry dWN0IHBpbmN0cmxfc3RhdGUgKnN0YXRlX2FjdGl2ZTsKLQlzdHJ1Y3QgcGluY3RybF9zdGF0ZSAq c3RhdGVfaHBkX2FjdGl2ZTsKLQlzdHJ1Y3QgcGluY3RybF9zdGF0ZSAqc3RhdGVfc3VzcGVuZDsK LX07Ci0KLSNkZWZpbmUgRFBfRU5VTV9TVFIoeCkJI3gKLSNkZWZpbmUgRFBfQVVYX0NGR19NQVhf VkFMVUVfQ05UIDMKLS8qKgotICogc3RydWN0IGRwX2F1eF9jZmcgLSBEUCdzIEFVWCBjb25maWd1 cmF0aW9uIHNldHRpbmdzCi0gKgotICogQGNmZ19jbnQ6IGNvdW50IG9mIHRoZSBjb25maWd1cmFi bGUgc2V0dGluZ3MgZm9yIHRoZSBBVVggcmVnaXN0ZXIKLSAqIEBjdXJyZW50X2luZGV4OiBjdXJy ZW50IGluZGV4IG9mIHRoZSBBVVggY29uZmlnIGx1dAotICogQG9mZnNldDogcmVnaXN0ZXIgb2Zm c2V0IG9mIHRoZSBBVVggY29uZmlnIHJlZ2lzdGVyCi0gKiBAbHV0OiBsb29rIHVwIHRhYmxlIGZv ciB0aGUgQVVYIGNvbmZpZyB2YWx1ZXMgZm9yIHRoaXMgcmVnaXN0ZXIKLSAqLwotc3RydWN0IGRw X2F1eF9jZmcgewotCXUzMiBjZmdfY250OwotCXUzMiBjdXJyZW50X2luZGV4OwotCXUzMiBvZmZz ZXQ7Ci0JdTMyIGx1dFtEUF9BVVhfQ0ZHX01BWF9WQUxVRV9DTlRdOwotfTsKLQotLyogUEhZIEFV WCBjb25maWcgcmVnaXN0ZXJzICovCi1lbnVtIGRwX3BoeV9hdXhfY29uZmlnX3R5cGUgewotCVBI WV9BVVhfQ0ZHMCwKLQlQSFlfQVVYX0NGRzEsCi0JUEhZX0FVWF9DRkcyLAotCVBIWV9BVVhfQ0ZH MywKLQlQSFlfQVVYX0NGRzQsCi0JUEhZX0FVWF9DRkc1LAotCVBIWV9BVVhfQ0ZHNiwKLQlQSFlf QVVYX0NGRzcsCi0JUEhZX0FVWF9DRkc4LAotCVBIWV9BVVhfQ0ZHOSwKLQlQSFlfQVVYX0NGR19N QVgsCi19OwotCi1zdGF0aWMgaW5saW5lIGNoYXIgKmRwX3BoeV9hdXhfY29uZmlnX3R5cGVfdG9f c3RyaW5nKHUzMiBjZmdfdHlwZSkKLXsKLQlzd2l0Y2ggKGNmZ190eXBlKSB7Ci0JY2FzZSBQSFlf QVVYX0NGRzA6Ci0JCXJldHVybiBEUF9FTlVNX1NUUihQSFlfQVVYX0NGRzApOwotCWNhc2UgUEhZ X0FVWF9DRkcxOgotCQlyZXR1cm4gRFBfRU5VTV9TVFIoUEhZX0FVWF9DRkcxKTsKLQljYXNlIFBI WV9BVVhfQ0ZHMjoKLQkJcmV0dXJuIERQX0VOVU1fU1RSKFBIWV9BVVhfQ0ZHMik7Ci0JY2FzZSBQ SFlfQVVYX0NGRzM6Ci0JCXJldHVybiBEUF9FTlVNX1NUUihQSFlfQVVYX0NGRzMpOwotCWNhc2Ug UEhZX0FVWF9DRkc0OgotCQlyZXR1cm4gRFBfRU5VTV9TVFIoUEhZX0FVWF9DRkc0KTsKLQljYXNl IFBIWV9BVVhfQ0ZHNToKLQkJcmV0dXJuIERQX0VOVU1fU1RSKFBIWV9BVVhfQ0ZHNSk7Ci0JY2Fz ZSBQSFlfQVVYX0NGRzY6Ci0JCXJldHVybiBEUF9FTlVNX1NUUihQSFlfQVVYX0NGRzYpOwotCWNh c2UgUEhZX0FVWF9DRkc3OgotCQlyZXR1cm4gRFBfRU5VTV9TVFIoUEhZX0FVWF9DRkc3KTsKLQlj YXNlIFBIWV9BVVhfQ0ZHODoKLQkJcmV0dXJuIERQX0VOVU1fU1RSKFBIWV9BVVhfQ0ZHOCk7Ci0J Y2FzZSBQSFlfQVVYX0NGRzk6Ci0JCXJldHVybiBEUF9FTlVNX1NUUihQSFlfQVVYX0NGRzkpOwot CWRlZmF1bHQ6Ci0JCXJldHVybiAidW5rbm93biI7Ci0JfQotfQotCi0vKioKLSAqIHN0cnVjdCBk cF9wYXJzZXIgLSBEUCBwYXJzZXIncyBkYXRhIGV4cG9zZWQgdG8gY2xpZW50cwotICoKLSAqIEBw ZGV2OiBwbGF0Zm9ybSBkYXRhIG9mIHRoZSBjbGllbnQKLSAqIEBtcDogZ3BpbywgcmVndWxhdG9y IGFuZCBjbG9jayByZWxhdGVkIGRhdGEKLSAqIEBwaW5jdHJsOiBwaW4tY29udHJvbCByZWxhdGVk IGRhdGEKLSAqIEBkaXNwX2RhdGE6IGNvbnRyb2xsZXIncyBkaXNwbGF5IHJlbGF0ZWQgZGF0YQot ICogQHBhcnNlOiBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYnkgY2xpZW50IHRvIHBhcnNlIGRldmlj ZSB0cmVlLgotICovCi1zdHJ1Y3QgZHBfcGFyc2VyIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2OwotCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyIG1wW0RQX01BWF9QTV07Ci0Jc3RydWN0 IGRwX3BpbmN0cmwgcGluY3RybDsKLQlzdHJ1Y3QgZHBfaW8gaW87Ci0Jc3RydWN0IGRwX2Rpc3Bs YXlfZGF0YSBkaXNwX2RhdGE7Ci0KLQl1OCBsX21hcFs0XTsKLQlzdHJ1Y3QgZHBfYXV4X2NmZyBh dXhfY2ZnW0FVWF9DRkdfTEVOXTsKLQl1MzIgbWF4X3BjbGtfa2h6OwotCi0JaW50ICgqcGFyc2Up KHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcik7Ci19OwotCi0vKioKLSAqIGRwX3BhcnNlcl9nZXQo KSAtIGdldCB0aGUgRFAncyBkZXZpY2UgdHJlZSBwYXJzZXIgbW9kdWxlCi0gKgotICogQHBkZXY6 IHBsYXRmb3JtIGRhdGEgb2YgdGhlIGNsaWVudAotICogcmV0dXJuOiBwb2ludGVyIHRvIGRwX3Bh cnNlciBzdHJ1Y3R1cmUuCi0gKgotICogVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBjbGllbnQgY2Fw YWJpbGl0eSB0byBwYXJzZSB0aGUKLSAqIGRldmljZSB0cmVlIGFuZCBwb3B1bGF0ZSB0aGUgZGF0 YSBzdHJ1Y3R1cmVzLiBUaGUgZGF0YQotICogcmVsYXRlZCB0byBjbG9jaywgcmVndWxhdG9ycywg cGluLWNvbnRyb2wgYW5kIG90aGVyCi0gKiBjYW4gYmUgcGFyc2VkIHVzaW5nIHRoaXMgbW9kdWxl LgotICovCi1zdHJ1Y3QgZHBfcGFyc2VyICpkcF9wYXJzZXJfZ2V0KHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpOwotCi0vKioKLSAqIGRwX3BhcnNlcl9wdXQoKSAtIGNsZWFucyB0aGUgZHBf cGFyc2VyIG1vZHVsZQotICoKLSAqIEBwYXJzZXI6IHBvaW50ZXIgdG8gdGhlIHBhcnNlcidzIGRh dGEuCi0gKi8KLXZvaWQgZHBfcGFyc2VyX3B1dChzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXIpOwot I2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bvd2VyLmMgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bvd2VyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDJhODViMzguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9w b3dlci5jCisrKyAvZGV2L251bGwKQEAgLTEsNTkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg KGMpIDIwMTItMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KQkiW2RybS1kcF0gJXM6 ICIgZm10LCBfX2Z1bmNfXwotCi0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSAiZHBf cG93ZXIuaCIKLQotI2RlZmluZSBEUF9DTElFTlRfTkFNRV9TSVpFCTIwCi0KLXN0cnVjdCBkcF9w b3dlcl9wcml2YXRlIHsKLQlzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXI7Ci0Jc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldjsKLQlzdHJ1Y3QgY2xrICpwaXhlbF9jbGtfcmNnOwotCXN0cnVjdCBj bGsgKnBpeGVsX3BhcmVudDsKLQotCXN0cnVjdCBkcF9wb3dlciBkcF9wb3dlcjsKLQotCWJvb2wg Y29yZV9jbGtzX29uOwotCWJvb2wgbGlua19jbGtzX29uOwotfTsKLQotc3RhdGljIGludCBkcF9w b3dlcl9yZWd1bGF0b3JfaW5pdChzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXIpCi17Ci0J aW50IHJjID0gMCwgaSA9IDAsIGogPSAwOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7 Ci0Jc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyOwotCi0JcGFyc2VyID0gcG93ZXItPnBhcnNlcjsK LQlwZGV2ID0gcG93ZXItPnBkZXY7Ci0KLQlmb3IgKGkgPSBEUF9DT1JFX1BNOyAhcmMgJiYgKGkg PCBEUF9NQVhfUE0pOyBpKyspIHsKLQkJcmMgPSBtc21fZHNzX2NvbmZpZ192cmVnKCZwZGV2LT5k ZXYsCi0JCQlwYXJzZXItPm1wW2ldLnZyZWdfY29uZmlnLAotCQkJcGFyc2VyLT5tcFtpXS5udW1f dnJlZywgMSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gaW5pdCB2cmVncyBm b3IgJXNcbiIsCi0JCQkJZHBfcGFyc2VyX3BtX25hbWUoaSkpOwotCQkJZm9yIChqID0gaSAtIDE7 IGogPj0gRFBfQ09SRV9QTTsgai0tKSB7Ci0JCQkJbXNtX2Rzc19jb25maWdfdnJlZygmcGRldi0+ ZGV2LAotCQkJCXBhcnNlci0+bXBbal0udnJlZ19jb25maWcsCi0JCQkJcGFyc2VyLT5tcFtqXS5u dW1fdnJlZywgMCk7Ci0JCQl9Ci0KLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci1lcnJvcjoKLQly ZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX3Bvd2VyX3JlZ3VsYXRvcl9kZWluaXQoc3Ry dWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyKQotewotCWludCByYyA9IDAsIGkgPSAwOwotCXN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0Jc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyOwot Ci0JcGFyc2VyID0gcG93ZXItPnBhcnNlcjsKLQlwZGV2ID0gcG93ZXItPnBkZXY7Ci0KLQlmb3Ig KGkgPSBEUF9DT1JFX1BNOyAoaSA8IERQX01BWF9QTSk7IGkrKykgewotCQlyYyA9IG1zbV9kc3Nf Y29uZmlnX3ZyZWcoJnBkZXYtPmRldiwKLQkJCXBhcnNlci0+bXBbaV0udnJlZ19jb25maWcsCi0J CQlwYXJzZXItPm1wW2ldLm51bV92cmVnLCAwKTsKLQkJaWYgKHJjKQotCQkJcHJfZXJyKCJmYWls ZWQgdG8gZGVpbml0IHZyZWdzIGZvciAlc1xuIiwKLQkJCQlkcF9wYXJzZXJfcG1fbmFtZShpKSk7 Ci0JfQotfQotCi1zdGF0aWMgaW50IGRwX3Bvd2VyX3JlZ3VsYXRvcl9jdHJsKHN0cnVjdCBkcF9w b3dlcl9wcml2YXRlICpwb3dlciwgYm9vbCBlbmFibGUpCi17Ci0JaW50IHJjID0gMCwgaSA9IDAs IGogPSAwOwotCXN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcjsKLQotCXBhcnNlciA9IHBvd2VyLT5w YXJzZXI7Ci0KLQlmb3IgKGkgPSBEUF9DT1JFX1BNOyBpIDwgRFBfTUFYX1BNOyBpKyspIHsKLQkJ cmMgPSBtc21fZHNzX2VuYWJsZV92cmVnKAotCQkJcGFyc2VyLT5tcFtpXS52cmVnX2NvbmZpZywK LQkJCXBhcnNlci0+bXBbaV0ubnVtX3ZyZWcsIGVuYWJsZSk7Ci0JCWlmIChyYykgewotCQkJcHJf ZXJyKCJmYWlsZWQgdG8gJyVzJyB2cmVncyBmb3IgJXNcbiIsCi0JCQkJCWVuYWJsZSA/ICJlbmFi bGUiIDogImRpc2FibGUiLAotCQkJCQlkcF9wYXJzZXJfcG1fbmFtZShpKSk7Ci0JCQlpZiAoZW5h YmxlKSB7Ci0JCQkJZm9yIChqID0gaS0xOyBqID49IERQX0NPUkVfUE07IGotLSkgewotCQkJCQlt c21fZHNzX2VuYWJsZV92cmVnKAotCQkJCQlwYXJzZXItPm1wW2pdLnZyZWdfY29uZmlnLAotCQkJ CQlwYXJzZXItPm1wW2pdLm51bV92cmVnLCAwKTsKLQkJCQl9Ci0JCQl9Ci0JCQlnb3RvIGVycm9y OwotCQl9Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRwX3Bvd2Vy X3BpbmN0cmxfc2V0KHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlciwgYm9vbCBhY3RpdmUp Ci17Ci0JaW50IHJjID0gLUVGQVVMVDsKLQlzdHJ1Y3QgcGluY3RybF9zdGF0ZSAqcGluX3N0YXRl OwotCXN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcjsKLQotCXBhcnNlciA9IHBvd2VyLT5wYXJzZXI7 Ci0KLQlpZiAoSVNfRVJSX09SX05VTEwocGFyc2VyLT5waW5jdHJsLnBpbikpCi0JCXJldHVybiBQ VFJfRVJSKHBhcnNlci0+cGluY3RybC5waW4pOwotCi0JcGluX3N0YXRlID0gYWN0aXZlID8gcGFy c2VyLT5waW5jdHJsLnN0YXRlX2FjdGl2ZQotCQkJCTogcGFyc2VyLT5waW5jdHJsLnN0YXRlX3N1 c3BlbmQ7Ci0JaWYgKCFJU19FUlJfT1JfTlVMTChwaW5fc3RhdGUpKSB7Ci0JCXJjID0gcGluY3Ry bF9zZWxlY3Rfc3RhdGUocGFyc2VyLT5waW5jdHJsLnBpbiwKLQkJCQlwaW5fc3RhdGUpOwotCQlp ZiAocmMpCi0JCQlwcl9lcnIoImNhbiBub3Qgc2V0ICVzIHBpbnNcbiIsCi0JCQkgICAgICAgYWN0 aXZlID8gImRwX2FjdGl2ZSIKLQkJCSAgICAgICA6ICJkcF9zbGVlcCIpOwotCX0gZWxzZSB7Ci0J CXByX2VycigiaW52YWxpZCAnJXMnIHBpbnN0YXRlXG4iLAotCQkgICAgICAgYWN0aXZlID8gImRw X2FjdGl2ZSIKLQkJICAgICAgIDogImRwX3NsZWVwIik7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQot Ci1zdGF0aWMgaW50IGRwX3Bvd2VyX2Nsa19pbml0KHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpw b3dlciwgYm9vbCBlbmFibGUpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNzX21vZHVsZV9w b3dlciAqY29yZSwgKmN0cmw7Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCi0JY29yZSA9ICZwb3dl ci0+cGFyc2VyLT5tcFtEUF9DT1JFX1BNXTsKLQljdHJsID0gJnBvd2VyLT5wYXJzZXItPm1wW0RQ X0NUUkxfUE1dOwotCi0JZGV2ID0gJnBvd2VyLT5wZGV2LT5kZXY7Ci0KLQlpZiAoIWNvcmUgfHwg IWN0cmwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBvd2VyX2RhdGFcbiIpOwotCQlyYyA9IC1FSU5W QUw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpZiAoZW5hYmxlKSB7Ci0JCXJjID0gbXNtX2Rzc19n ZXRfY2xrKGRldiwgY29yZS0+Y2xrX2NvbmZpZywgY29yZS0+bnVtX2Nsayk7Ci0JCWlmIChyYykg ewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0ICVzIGNsay4gZXJyPSVkXG4iLAotCQkJCWRwX3Bh cnNlcl9wbV9uYW1lKERQX0NPUkVfUE0pLCByYyk7Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQotCQly YyA9IG1zbV9kc3NfZ2V0X2NsayhkZXYsIGN0cmwtPmNsa19jb25maWcsIGN0cmwtPm51bV9jbGsp OwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIGdldCAlcyBjbGsuIGVycj0lZFxu IiwKLQkJCQlkcF9wYXJzZXJfcG1fbmFtZShEUF9DVFJMX1BNKSwgcmMpOwotCQkJZ290byBjdHJs X2dldF9lcnJvcjsKLQkJfQotCi0JCXBvd2VyLT5waXhlbF9jbGtfcmNnID0gZGV2bV9jbGtfZ2V0 KGRldiwgInBpeGVsX2Nsa19yY2ciKTsKLQkJaWYgKElTX0VSUihwb3dlci0+cGl4ZWxfY2xrX3Jj ZykpIHsKLQkJCXByX2RlYnVnKCJVbmFibGUgdG8gZ2V0IERQIHBpeGVsIGNsayBSQ0dcbiIpOwot CQkJcG93ZXItPnBpeGVsX2Nsa19yY2cgPSBOVUxMOwotCQl9Ci0KLQkJcG93ZXItPnBpeGVsX3Bh cmVudCA9IGRldm1fY2xrX2dldChkZXYsICJwaXhlbF9wYXJlbnQiKTsKLQkJaWYgKElTX0VSUihw b3dlci0+cGl4ZWxfcGFyZW50KSkgewotCQkJcHJfZGVidWcoIlVuYWJsZSB0byBnZXQgRFAgcGl4 ZWwgUkNHIHBhcmVudFxuIik7Ci0JCQlwb3dlci0+cGl4ZWxfcGFyZW50ID0gTlVMTDsKLQkJfQot CX0gZWxzZSB7Ci0JCWlmIChwb3dlci0+cGl4ZWxfcGFyZW50KQotCQkJZGV2bV9jbGtfcHV0KGRl diwgcG93ZXItPnBpeGVsX3BhcmVudCk7Ci0KLQkJaWYgKHBvd2VyLT5waXhlbF9jbGtfcmNnKQot CQkJZGV2bV9jbGtfcHV0KGRldiwgcG93ZXItPnBpeGVsX2Nsa19yY2cpOwotCi0JCW1zbV9kc3Nf cHV0X2NsayhjdHJsLT5jbGtfY29uZmlnLCBjdHJsLT5udW1fY2xrKTsKLQkJbXNtX2Rzc19wdXRf Y2xrKGNvcmUtPmNsa19jb25maWcsIGNvcmUtPm51bV9jbGspOwotCX0KLQotCXJldHVybiByYzsK LQotY3RybF9nZXRfZXJyb3I6Ci0JbXNtX2Rzc19wdXRfY2xrKGNvcmUtPmNsa19jb25maWcsIGNv cmUtPm51bV9jbGspOwotZXhpdDoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfcG93 ZXJfY2xrX3NldF9yYXRlKHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlciwKLQkJZW51bSBk cF9wbV90eXBlIG1vZHVsZSwgYm9vbCBlbmFibGUpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3Qg ZHNzX21vZHVsZV9wb3dlciAqbXA7Ci0KLQlpZiAoIXBvd2VyKSB7Ci0JCXByX2VycigiaW52YWxp ZCBwb3dlciBkYXRhXG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0J bXAgPSAmcG93ZXItPnBhcnNlci0+bXBbbW9kdWxlXTsKLQotCWlmIChlbmFibGUpIHsKLQkJcmMg PSBtc21fZHNzX2Nsa19zZXRfcmF0ZShtcC0+Y2xrX2NvbmZpZywgbXAtPm51bV9jbGspOwotCQlp ZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHNldCBjbGtzIHJhdGUuXG4iKTsKLQkJCWdv dG8gZXhpdDsKLQkJfQotCi0JCXJjID0gbXNtX2Rzc19lbmFibGVfY2xrKG1wLT5jbGtfY29uZmln LCBtcC0+bnVtX2NsaywgMSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gZW5h YmxlIGNsa3NcbiIpOwotCQkJZ290byBleGl0OwotCQl9Ci0JfSBlbHNlIHsKLQkJcmMgPSBtc21f ZHNzX2VuYWJsZV9jbGsobXAtPmNsa19jb25maWcsIG1wLT5udW1fY2xrLCAwKTsKLQkJaWYgKHJj KSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBkaXNhYmxlIGNsa3NcbiIpOwotCQkJCWdvdG8gZXhp dDsKLQkJfQotCX0KLWV4aXQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRwX3Bvd2Vy X2Nsa19lbmFibGUoc3RydWN0IGRwX3Bvd2VyICpkcF9wb3dlciwKLQkJZW51bSBkcF9wbV90eXBl IHBtX3R5cGUsIGJvb2wgZW5hYmxlKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzc19tb2R1 bGVfcG93ZXIgKm1wOwotCXN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlcjsKLQotCWlmICgh ZHBfcG93ZXIpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBvd2VyIGRhdGFcbiIpOwotCQlyYyA9IC1F SU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcG93ZXIgPSBjb250YWluZXJfb2YoZHBfcG93 ZXIsIHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlLCBkcF9wb3dlcik7Ci0KLQltcCA9ICZwb3dlci0+ cGFyc2VyLT5tcFtwbV90eXBlXTsKLQotCWlmICgocG1fdHlwZSAhPSBEUF9DT1JFX1BNKSAmJiAo cG1fdHlwZSAhPSBEUF9DVFJMX1BNKSkgewotCQlwcl9lcnIoInVuc3VwcG9ydGVkIHBvd2VyIG1v ZHVsZTogJXNcbiIsCi0JCQkJZHBfcGFyc2VyX3BtX25hbWUocG1fdHlwZSkpOwotCQlyZXR1cm4g LUVJTlZBTDsKLQl9Ci0KLQlpZiAoZW5hYmxlKSB7Ci0JCWlmICgocG1fdHlwZSA9PSBEUF9DT1JF X1BNKQotCQkJJiYgKHBvd2VyLT5jb3JlX2Nsa3Nfb24pKSB7Ci0JCQlwcl9kZWJ1ZygiY29yZSBj bGtzIGFscmVhZHkgZW5hYmxlZFxuIik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCWlmICgocG1f dHlwZSA9PSBEUF9DVFJMX1BNKQotCQkJJiYgKHBvd2VyLT5saW5rX2Nsa3Nfb24pKSB7Ci0JCQlw cl9kZWJ1ZygibGlua3MgY2xrcyBhbHJlYWR5IGVuYWJsZWRcbiIpOwotCQkJcmV0dXJuIDA7Ci0J CX0KLQotCQlpZiAoKHBtX3R5cGUgPT0gRFBfQ1RSTF9QTSkgJiYgKCFwb3dlci0+Y29yZV9jbGtz X29uKSkgewotCQkJcHJfZGVidWcoIk5lZWQgdG8gZW5hYmxlIGNvcmUgY2xrcyBiZWZvcmUgbGlu ayBjbGtzXG4iKTsKLQotCQkJcmMgPSBkcF9wb3dlcl9jbGtfc2V0X3JhdGUocG93ZXIsIHBtX3R5 cGUsIGVuYWJsZSk7Ci0JCQlpZiAocmMpIHsKLQkJCQlwcl9lcnIoImZhaWxlZCB0byBlbmFibGUg Y2xrczogJXMuIGVycj0lZFxuIiwKLQkJCQkJZHBfcGFyc2VyX3BtX25hbWUoRFBfQ09SRV9QTSks IHJjKTsKLQkJCQlnb3RvIGVycm9yOwotCQkJfSBlbHNlIHsKLQkJCQlwb3dlci0+Y29yZV9jbGtz X29uID0gdHJ1ZTsKLQkJCX0KLQkJfQotCX0KLQotCXJjID0gZHBfcG93ZXJfY2xrX3NldF9yYXRl KHBvd2VyLCBwbV90eXBlLCBlbmFibGUpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0 byAnJXMnIGNsa3MgZm9yOiAlcy4gZXJyPSVkXG4iLAotCQkJZW5hYmxlID8gImVuYWJsZSIgOiAi ZGlzYWJsZSIsCi0JCQlkcF9wYXJzZXJfcG1fbmFtZShwbV90eXBlKSwgcmMpOwotCQkJZ290byBl cnJvcjsKLQl9Ci0KLQlpZiAocG1fdHlwZSA9PSBEUF9DT1JFX1BNKQotCQlwb3dlci0+Y29yZV9j bGtzX29uID0gZW5hYmxlOwotCWVsc2UKLQkJcG93ZXItPmxpbmtfY2xrc19vbiA9IGVuYWJsZTsK LQotCXByX2RlYnVnKCIlcyBjbG9ja3MgZm9yICVzXG4iLAotCQkJZW5hYmxlID8gImVuYWJsZSIg OiAiZGlzYWJsZSIsCi0JCQlkcF9wYXJzZXJfcG1fbmFtZShwbV90eXBlKSk7Ci0JcHJfZGVidWco ImxpbmtfY2xrczolcyBjb3JlX2Nsa3M6JXNcbiIsCi0JCXBvd2VyLT5saW5rX2Nsa3Nfb24gPyAi b24iIDogIm9mZiIsCi0JCXBvd2VyLT5jb3JlX2Nsa3Nfb24gPyAib24iIDogIm9mZiIpOwotZXJy b3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRwX3Bvd2VyX3JlcXVlc3RfZ3Bpb3Mo c3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyKQotewotCWludCByYyA9IDAsIGk7Ci0Jc3Ry dWN0IGRldmljZSAqZGV2OwotCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICptcDsKLQlzdGF0aWMg Y29uc3QgY2hhciAqIGNvbnN0IGdwaW9fbmFtZXNbXSA9IHsKLQkJImF1eF9lbmFibGUiLCAiYXV4 X3NlbCIsICJ1c2JwbHVnX2NjIiwKLQl9OwotCi0JaWYgKCFwb3dlcikgewotCQlwcl9lcnIoImlu dmFsaWQgcG93ZXIgZGF0YVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRldiA9ICZw b3dlci0+cGRldi0+ZGV2OwotCW1wID0gJnBvd2VyLT5wYXJzZXItPm1wW0RQX0NPUkVfUE1dOwot Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZ3Bpb19uYW1lcyk7IGkrKykgewotCQl1bnNp Z25lZCBpbnQgZ3BpbyA9IG1wLT5ncGlvX2NvbmZpZ1tpXS5ncGlvOwotCi0JCWlmIChncGlvX2lz X3ZhbGlkKGdwaW8pKSB7Ci0JCQlyYyA9IGRldm1fZ3Bpb19yZXF1ZXN0KGRldiwgZ3BpbywgZ3Bp b19uYW1lc1tpXSk7Ci0JCQlpZiAocmMpIHsKLQkJCQlwcl9lcnIoInJlcXVlc3QgJXMgZ3BpbyBm YWlsZWQsIHJjPSVkXG4iLAotCQkJCQkgICAgICAgZ3Bpb19uYW1lc1tpXSwgcmMpOwotCQkJCWdv dG8gZXJyb3I7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci1lcnJvcjoKLQlmb3IgKGkgPSAw OyBpIDwgQVJSQVlfU0laRShncGlvX25hbWVzKTsgaSsrKSB7Ci0JCXVuc2lnbmVkIGludCBncGlv ID0gbXAtPmdwaW9fY29uZmlnW2ldLmdwaW87Ci0KLQkJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpbykp Ci0JCQlncGlvX2ZyZWUoZ3Bpbyk7Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGJvb2wg ZHBfcG93ZXJfZmluZF9ncGlvKGNvbnN0IGNoYXIgKmdwaW8xLCBjb25zdCBjaGFyICpncGlvMikK LXsKLQlyZXR1cm4gISFzdHJuc3RyKGdwaW8xLCBncGlvMiwgc3RybGVuKGdwaW8xKSk7Ci19Ci0K LXN0YXRpYyB2b2lkIGRwX3Bvd2VyX3NldF9ncGlvKHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpw b3dlciwgYm9vbCBmbGlwKQotewotCWludCBpOwotCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICpt cCA9ICZwb3dlci0+cGFyc2VyLT5tcFtEUF9DT1JFX1BNXTsKLQlzdHJ1Y3QgZHNzX2dwaW8gKmNv bmZpZyA9IG1wLT5ncGlvX2NvbmZpZzsKLQotCWZvciAoaSA9IDA7IGkgPCBtcC0+bnVtX2dwaW87 IGkrKykgewotCQlpZiAoZHBfcG93ZXJfZmluZF9ncGlvKGNvbmZpZy0+Z3Bpb19uYW1lLCAiYXV4 LXNlbCIpKQotCQkJY29uZmlnLT52YWx1ZSA9IGZsaXA7Ci0KLQkJaWYgKGdwaW9faXNfdmFsaWQo Y29uZmlnLT5ncGlvKSkgewotCQkJcHJfZGVidWcoImdwaW8gJXMsIHZhbHVlICVkXG4iLCBjb25m aWctPmdwaW9fbmFtZSwKLQkJCQljb25maWctPnZhbHVlKTsKLQotCQkJaWYgKGRwX3Bvd2VyX2Zp bmRfZ3Bpbyhjb25maWctPmdwaW9fbmFtZSwgImF1eC1lbiIpIHx8Ci0JCQkgICAgZHBfcG93ZXJf ZmluZF9ncGlvKGNvbmZpZy0+Z3Bpb19uYW1lLCAiYXV4LXNlbCIpKQotCQkJCWdwaW9fZGlyZWN0 aW9uX291dHB1dChjb25maWctPmdwaW8sCi0JCQkJCWNvbmZpZy0+dmFsdWUpOwotCQkJZWxzZQot CQkJCWdwaW9fc2V0X3ZhbHVlKGNvbmZpZy0+Z3BpbywgY29uZmlnLT52YWx1ZSk7Ci0KLQkJfQot CQljb25maWcrKzsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgZHBfcG93ZXJfY29uZmlnX2dwaW9zKHN0 cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlciwgYm9vbCBmbGlwLAotCQkJCQlib29sIGVuYWJs ZSkKLXsKLQlpbnQgcmMgPSAwLCBpOwotCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICptcDsKLQlz dHJ1Y3QgZHNzX2dwaW8gKmNvbmZpZzsKLQotCW1wID0gJnBvd2VyLT5wYXJzZXItPm1wW0RQX0NP UkVfUE1dOwotCWNvbmZpZyA9IG1wLT5ncGlvX2NvbmZpZzsKLQotCWlmIChlbmFibGUpIHsKLQkJ cmMgPSBkcF9wb3dlcl9yZXF1ZXN0X2dwaW9zKHBvd2VyKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9l cnIoImdwaW8gcmVxdWVzdCBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0KLQkJZHBf cG93ZXJfc2V0X2dwaW8ocG93ZXIsIGZsaXApOwotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkg PCBtcC0+bnVtX2dwaW87IGkrKykgewotCQkJZ3Bpb19zZXRfdmFsdWUoY29uZmlnW2ldLmdwaW8s IDApOwotCQkJZ3Bpb19mcmVlKGNvbmZpZ1tpXS5ncGlvKTsKLQkJfQotCX0KLQotCXJldHVybiAw OwotfQotCi1zdGF0aWMgaW50IGRwX3Bvd2VyX2NsaWVudF9pbml0KHN0cnVjdCBkcF9wb3dlciAq ZHBfcG93ZXIpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93 ZXI7Ci0JY2hhciBkcF9jbGllbnRfbmFtZVtEUF9DTElFTlRfTkFNRV9TSVpFXTsKLQotCWlmICgh ZHBfcG93ZXIpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBvd2VyIGRhdGFcbiIpOwotCQlyZXR1cm4g LUVJTlZBTDsKLQl9Ci0KLQlwb3dlciA9IGNvbnRhaW5lcl9vZihkcF9wb3dlciwgc3RydWN0IGRw X3Bvd2VyX3ByaXZhdGUsIGRwX3Bvd2VyKTsKLQotCXJjID0gZHBfcG93ZXJfcmVndWxhdG9yX2lu aXQocG93ZXIpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBpbml0IHJlZ3VsYXRv cnNcbiIpOwotCQlnb3RvIGVycm9yX3Bvd2VyOwotCX0KLQotCXJjID0gZHBfcG93ZXJfY2xrX2lu aXQocG93ZXIsIHRydWUpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBpbml0IGNs b2Nrc1xuIik7Ci0JCWdvdG8gZXJyb3JfY2xrOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJvcl9j bGs6Ci0JZHBfcG93ZXJfcmVndWxhdG9yX2RlaW5pdChwb3dlcik7Ci1lcnJvcl9wb3dlcjoKLQly ZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX3Bvd2VyX2NsaWVudF9kZWluaXQoc3RydWN0 IGRwX3Bvd2VyICpkcF9wb3dlcikKLXsKLQlzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXI7 Ci0KLQlpZiAoIWRwX3Bvd2VyKSB7Ci0JCXByX2VycigiaW52YWxpZCBwb3dlciBkYXRhXG4iKTsK LQkJcmV0dXJuOwotCX0KLQotCXBvd2VyID0gY29udGFpbmVyX29mKGRwX3Bvd2VyLCBzdHJ1Y3Qg ZHBfcG93ZXJfcHJpdmF0ZSwgZHBfcG93ZXIpOwotCi0JZHBfcG93ZXJfY2xrX2luaXQocG93ZXIs IGZhbHNlKTsKLQlkcF9wb3dlcl9yZWd1bGF0b3JfZGVpbml0KHBvd2VyKTsKLX0KLQotc3RhdGlj IGludCBkcF9wb3dlcl9zZXRfcGl4ZWxfY2xrX3BhcmVudChzdHJ1Y3QgZHBfcG93ZXIgKmRwX3Bv d2VyKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyOwot Ci0JaWYgKCFkcF9wb3dlcikgewotCQlwcl9lcnIoImludmFsaWQgcG93ZXIgZGF0YVxuIik7Ci0J CXJjID0gLUVJTlZBTDsKLQkJZ290byBleGl0OwotCX0KLQotCXBvd2VyID0gY29udGFpbmVyX29m KGRwX3Bvd2VyLCBzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSwgZHBfcG93ZXIpOwotCi0JaWYgKHBv d2VyLT5waXhlbF9jbGtfcmNnICYmIHBvd2VyLT5waXhlbF9wYXJlbnQpCi0JCWNsa19zZXRfcGFy ZW50KHBvd2VyLT5waXhlbF9jbGtfcmNnLCBwb3dlci0+cGl4ZWxfcGFyZW50KTsKLWV4aXQ6Ci0J cmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRwX3Bvd2VyX2luaXQoc3RydWN0IGRwX3Bvd2Vy ICpkcF9wb3dlciwgYm9vbCBmbGlwKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRwX3Bvd2Vy X3ByaXZhdGUgKnBvd2VyOwotCi0JaWYgKCFkcF9wb3dlcikgewotCQlwcl9lcnIoImludmFsaWQg cG93ZXIgZGF0YVxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBleGl0OwotCX0KLQotCXBv d2VyID0gY29udGFpbmVyX29mKGRwX3Bvd2VyLCBzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSwgZHBf cG93ZXIpOwotCi0JcmMgPSBkcF9wb3dlcl9yZWd1bGF0b3JfY3RybChwb3dlciwgdHJ1ZSk7Ci0J aWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSByZWd1bGF0b3JzXG4iKTsKLQkJ Z290byBleGl0OwotCX0KLQotCXJjID0gZHBfcG93ZXJfcGluY3RybF9zZXQocG93ZXIsIHRydWUp OwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBzZXQgcGluY3RybCBzdGF0ZVxuIik7 Ci0JCWdvdG8gZXJyX3BpbmN0cmw7Ci0JfQotCi0JcmMgPSBkcF9wb3dlcl9jb25maWdfZ3Bpb3Mo cG93ZXIsIGZsaXAsIHRydWUpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBlbmFi bGUgZ3Bpb3NcbiIpOwotCQlnb3RvIGVycl9ncGlvOwotCX0KLQotCXJjID0gZHBfcG93ZXJfY2xr X2VuYWJsZShkcF9wb3dlciwgRFBfQ09SRV9QTSwgdHJ1ZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vy cigiZmFpbGVkIHRvIGVuYWJsZSBEUCBjb3JlIGNsb2Nrc1xuIik7Ci0JCWdvdG8gZXJyX2NsazsK LQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX2NsazoKLQlkcF9wb3dlcl9jb25maWdfZ3Bpb3MocG93 ZXIsIGZsaXAsIGZhbHNlKTsKLWVycl9ncGlvOgotCWRwX3Bvd2VyX3BpbmN0cmxfc2V0KHBvd2Vy LCBmYWxzZSk7Ci1lcnJfcGluY3RybDoKLQlkcF9wb3dlcl9yZWd1bGF0b3JfY3RybChwb3dlciwg ZmFsc2UpOwotZXhpdDoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHBfcG93ZXJfZGVp bml0KHN0cnVjdCBkcF9wb3dlciAqZHBfcG93ZXIpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3Qg ZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXI7Ci0KLQlpZiAoIWRwX3Bvd2VyKSB7Ci0JCXByX2Vycigi aW52YWxpZCBwb3dlciBkYXRhXG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGV4aXQ7Ci0J fQotCi0JcG93ZXIgPSBjb250YWluZXJfb2YoZHBfcG93ZXIsIHN0cnVjdCBkcF9wb3dlcl9wcml2 YXRlLCBkcF9wb3dlcik7Ci0KLQlkcF9wb3dlcl9jbGtfZW5hYmxlKGRwX3Bvd2VyLCBEUF9DT1JF X1BNLCBmYWxzZSk7Ci0JZHBfcG93ZXJfY29uZmlnX2dwaW9zKHBvd2VyLCBmYWxzZSwgZmFsc2Up OwotCWRwX3Bvd2VyX3BpbmN0cmxfc2V0KHBvd2VyLCBmYWxzZSk7Ci0JZHBfcG93ZXJfcmVndWxh dG9yX2N0cmwocG93ZXIsIGZhbHNlKTsKLWV4aXQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdHJ1Y3Qg ZHBfcG93ZXIgKmRwX3Bvd2VyX2dldChzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXIpCi17Ci0JaW50 IHJjID0gMDsKLQlzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXI7Ci0Jc3RydWN0IGRwX3Bv d2VyICpkcF9wb3dlcjsKLQotCWlmICghcGFyc2VyKSB7Ci0JCXByX2VycigiaW52YWxpZCBpbnB1 dFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlwb3dlciA9IGRl dm1fa3phbGxvYygmcGFyc2VyLT5wZGV2LT5kZXYsIHNpemVvZigqcG93ZXIpLCBHRlBfS0VSTkVM KTsKLQlpZiAoIXBvd2VyKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlcnJvcjsKLQl9Ci0K LQlwb3dlci0+cGFyc2VyID0gcGFyc2VyOwotCXBvd2VyLT5wZGV2ID0gcGFyc2VyLT5wZGV2Owot Ci0JZHBfcG93ZXIgPSAmcG93ZXItPmRwX3Bvd2VyOwotCi0JZHBfcG93ZXItPmluaXQgPSBkcF9w b3dlcl9pbml0OwotCWRwX3Bvd2VyLT5kZWluaXQgPSBkcF9wb3dlcl9kZWluaXQ7Ci0JZHBfcG93 ZXItPmNsa19lbmFibGUgPSBkcF9wb3dlcl9jbGtfZW5hYmxlOwotCWRwX3Bvd2VyLT5zZXRfcGl4 ZWxfY2xrX3BhcmVudCA9IGRwX3Bvd2VyX3NldF9waXhlbF9jbGtfcGFyZW50OwotCWRwX3Bvd2Vy LT5wb3dlcl9jbGllbnRfaW5pdCA9IGRwX3Bvd2VyX2NsaWVudF9pbml0OwotCWRwX3Bvd2VyLT5w b3dlcl9jbGllbnRfZGVpbml0ID0gZHBfcG93ZXJfY2xpZW50X2RlaW5pdDsKLQotCXJldHVybiBk cF9wb3dlcjsKLWVycm9yOgotCXJldHVybiBFUlJfUFRSKHJjKTsKLX0KLQotdm9pZCBkcF9wb3dl cl9wdXQoc3RydWN0IGRwX3Bvd2VyICpkcF9wb3dlcikKLXsKLQlzdHJ1Y3QgZHBfcG93ZXJfcHJp dmF0ZSAqcG93ZXIgPSBOVUxMOwotCi0JaWYgKCFkcF9wb3dlcikKLQkJcmV0dXJuOwotCi0JcG93 ZXIgPSBjb250YWluZXJfb2YoZHBfcG93ZXIsIHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlLCBkcF9w b3dlcik7Ci0KLQlkZXZtX2tmcmVlKCZwb3dlci0+cGRldi0+ZGV2LCBwb3dlcik7Ci19CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bvd2VyLmggYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2RwL2RwX3Bvd2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5ZGFi NzIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wb3dlci5oCisrKyAv ZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE4 LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot ICoKLSAqLwotCi0jaWZuZGVmIF9EUF9QT1dFUl9IXwotI2RlZmluZSBfRFBfUE9XRVJfSF8KLQot I2luY2x1ZGUgImRwX3BhcnNlci5oIgotCi0vKioKLSAqIHNydWN0IGRwX3Bvd2VyIC0gRGlzcGxh eVBvcnQncyBwb3dlciByZWxhdGVkIGRhdGEKLSAqCi0gKiBAaW5pdDogaW5pdGlhbGl6ZXMgdGhl IHJlZ3VsYXRvcnMvY29yZSBjbG9ja3MvR1BJT3MvcGluY3RybAotICogQGRlaW5pdDogdHVybnMg b2ZmIHRoZSByZWd1bGF0b3JzL2NvcmUgY2xvY2tzL0dQSU9zL3BpbmN0cmwKLSAqIEBjbGtfZW5h YmxlOiBlbmFibGUvZGlzYWJsZSB0aGUgRFAgY2xvY2tzCi0gKiBAc2V0X3BpeGVsX2Nsa19wYXJl bnQ6IHNldCB0aGUgcGFyZW50IG9mIERQIHBpeGVsIGNsb2NrCi0gKi8KLXN0cnVjdCBkcF9wb3dl ciB7Ci0JaW50ICgqaW5pdCkoc3RydWN0IGRwX3Bvd2VyICpwb3dlciwgYm9vbCBmbGlwKTsKLQlp bnQgKCpkZWluaXQpKHN0cnVjdCBkcF9wb3dlciAqcG93ZXIpOwotCWludCAoKmNsa19lbmFibGUp KHN0cnVjdCBkcF9wb3dlciAqcG93ZXIsIGVudW0gZHBfcG1fdHlwZSBwbV90eXBlLAotCQkJCWJv b2wgZW5hYmxlKTsKLQlpbnQgKCpzZXRfcGl4ZWxfY2xrX3BhcmVudCkoc3RydWN0IGRwX3Bvd2Vy ICpwb3dlcik7Ci0JaW50ICgqcG93ZXJfY2xpZW50X2luaXQpKHN0cnVjdCBkcF9wb3dlciAqcG93 ZXIpOwotCXZvaWQgKCpwb3dlcl9jbGllbnRfZGVpbml0KShzdHJ1Y3QgZHBfcG93ZXIgKnBvd2Vy KTsKLX07Ci0KLS8qKgotICogZHBfcG93ZXJfZ2V0KCkgLSBjb25maWd1cmUgYW5kIGdldCB0aGUg RGlzcGxheVBvcnQgcG93ZXIgbW9kdWxlIGRhdGEKLSAqCi0gKiBAcGFyc2VyOiBpbnN0YW5jZSBv ZiBwYXJzZXIgbW9kdWxlCi0gKiByZXR1cm46IHBvaW50ZXIgdG8gYWxsb2NhdGVkIHBvd2VyIG1v ZHVsZSBkYXRhCi0gKgotICogVGhpcyBBUEkgd2lsbCBjb25maWd1cmUgdGhlIERpc3BsYXlQb3J0 J3MgcG93ZXIgbW9kdWxlIGFuZCBwcm92aWRlcwotICogbWV0aG9kcyB0byBiZSBjYWxsZWQgYnkg dGhlIGNsaWVudCB0byBjb25maWd1cmUgdGhlIHBvd2VyIHJlbGF0ZWQKLSAqIG1vZHVlbGVzLgot ICovCi1zdHJ1Y3QgZHBfcG93ZXIgKmRwX3Bvd2VyX2dldChzdHJ1Y3QgZHBfcGFyc2VyICpwYXJz ZXIpOwotCi0vKioKLSAqIGRwX3Bvd2VyX3B1dCgpIC0gcmVsZWFzZSB0aGUgcG93ZXIgcmVsYXRl ZCByZXNvdXJjZXMKLSAqCi0gKiBAcG93ZXI6IHBvaW50ZXIgdG8gdGhlIHBvd2VyIG1vZHVsZSdz IGRhdGEKLSAqLwotdm9pZCBkcF9wb3dlcl9wdXQoc3RydWN0IGRwX3Bvd2VyICpwb3dlcik7Ci0j ZW5kaWYgLyogX0RQX1BPV0VSX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2RwL2RwX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9yZWcuaApkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggZGJhOTA5OC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2RwL2RwX3JlZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMxICswLDAgQEAKLS8qCi0g KiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2 ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0g KgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2lmbmRlZiBfRFBfUkVHX0hfCi0j ZGVmaW5lIF9EUF9SRUdfSF8KLQotLyogRFBfVFggUmVnaXN0ZXJzICovCi0jZGVmaW5lIERQX0hX X1ZFUlNJT04JCQkJKDB4MDAwMDAwMDApCi0jZGVmaW5lIERQX1NXX1JFU0VUCQkJCSgweDAwMDAw MDEwKQotI2RlZmluZSBEUF9QSFlfQ1RSTAkJCQkoMHgwMDAwMDAxNCkKLSNkZWZpbmUgRFBfQ0xL X0NUUkwJCQkJKDB4MDAwMDAwMTgpCi0jZGVmaW5lIERQX0NMS19BQ1RJVkUJCQkJKDB4MDAwMDAw MUMpCi0jZGVmaW5lIERQX0lOVFJfU1RBVFVTCQkJCSgweDAwMDAwMDIwKQotI2RlZmluZSBEUF9J TlRSX1NUQVRVUzIJCQkJKDB4MDAwMDAwMjQpCi0jZGVmaW5lIERQX0lOVFJfU1RBVFVTMwkJCQko MHgwMDAwMDAyOCkKLQotI2RlZmluZSBEUF9EUF9IUERfQ1RSTAkJCQkoMHgwMDAwMDIwMCkKLSNk ZWZpbmUgRFBfRFBfSFBEX0lOVF9TVEFUVVMJCQkoMHgwMDAwMDIwNCkKLSNkZWZpbmUgRFBfRFBf SFBEX0lOVF9BQ0sJCQkoMHgwMDAwMDIwOCkKLSNkZWZpbmUgRFBfRFBfSFBEX0lOVF9NQVNLCQkJ KDB4MDAwMDAyMEMpCi0jZGVmaW5lIERQX0RQX0hQRF9SRUZUSU1FUgkJCSgweDAwMDAwMjE4KQot I2RlZmluZSBEUF9EUF9IUERfRVZFTlRfVElNRV8wCQkJKDB4MDAwMDAyMUMpCi0jZGVmaW5lIERQ X0RQX0hQRF9FVkVOVF9USU1FXzEJCQkoMHgwMDAwMDIyMCkKLSNkZWZpbmUgRFBfQVVYX0NUUkwJ CQkJKDB4MDAwMDAyMzApCi0jZGVmaW5lIERQX0FVWF9EQVRBCQkJCSgweDAwMDAwMjM0KQotI2Rl ZmluZSBEUF9BVVhfVFJBTlNfQ1RSTAkJCSgweDAwMDAwMjM4KQotI2RlZmluZSBEUF9USU1FT1VU X0NPVU5UCQkJKDB4MDAwMDAyM0MpCi0jZGVmaW5lIERQX0FVWF9MSU1JVFMJCQkJKDB4MDAwMDAy NDApCi0jZGVmaW5lIERQX0FVWF9TVEFUVVMJCQkJKDB4MDAwMDAyNDQpCi0KLSNkZWZpbmUgRFBf RFBDRF9DUF9JUlEJCQkJKDB4MjAxKQotI2RlZmluZSBEUF9EUENEX1JYU1RBVFVTCQkJKDB4Njk0 OTMpCi0KLSNkZWZpbmUgRFBfSU5URVJSVVBUX1RSQU5TX05VTQkJCSgweDAwMDAwMkEwKQotCi0j ZGVmaW5lIERQX01BSU5MSU5LX0NUUkwJCQkoMHgwMDAwMDQwMCkKLSNkZWZpbmUgRFBfU1RBVEVf Q1RSTAkJCQkoMHgwMDAwMDQwNCkKLSNkZWZpbmUgRFBfQ09ORklHVVJBVElPTl9DVFJMCQkJKDB4 MDAwMDA0MDgpCi0jZGVmaW5lIERQX1NPRlRXQVJFX01WSUQJCQkoMHgwMDAwMDQxMCkKLSNkZWZp bmUgRFBfU09GVFdBUkVfTlZJRAkJCSgweDAwMDAwNDE4KQotI2RlZmluZSBEUF9UT1RBTF9IT1Jf VkVSCQkJKDB4MDAwMDA0MUMpCi0jZGVmaW5lIERQX1NUQVJUX0hPUl9WRVJfRlJPTV9TWU5DCQko MHgwMDAwMDQyMCkKLSNkZWZpbmUgRFBfSFNZTkNfVlNZTkNfV0lEVEhfUE9MQVJJVFkJCSgweDAw MDAwNDI0KQotI2RlZmluZSBEUF9BQ1RJVkVfSE9SX1ZFUgkJCSgweDAwMDAwNDI4KQotI2RlZmlu ZSBEUF9NSVNDMV9NSVNDMAkJCQkoMHgwMDAwMDQyQykKLSNkZWZpbmUgRFBfVkFMSURfQk9VTkRB UlkJCQkoMHgwMDAwMDQzMCkKLSNkZWZpbmUgRFBfVkFMSURfQk9VTkRBUllfMgkJCSgweDAwMDAw NDM0KQotI2RlZmluZSBEUF9MT0dJQ0FMMlBIWVNDSUFMX0xBTkVfTUFQUElORwkoMHgwMDAwMDQz OCkKLQotI2RlZmluZSBEUF9NQUlOTElOS19SRUFEWQkJCSgweDAwMDAwNDQwKQotI2RlZmluZSBE UF9NQUlOTElOS19MRVZFTFMJCQkoMHgwMDAwMDQ0NCkKLSNkZWZpbmUgRFBfVFUJCQkJCSgweDAw MDAwNDRDKQotCi0jZGVmaW5lIERQX0hCUjJfQ09NUExJQU5DRV9TQ1JBTUJMRVJfUkVTRVQJKDB4 MDAwMDA0NTQpCi0jZGVmaW5lIERQX1RFU1RfODBCSVRfQ1VTVE9NX1BBVFRFUk5fUkVHMAkoMHgw MDAwMDRDMCkKLSNkZWZpbmUgRFBfVEVTVF84MEJJVF9DVVNUT01fUEFUVEVSTl9SRUcxCSgweDAw MDAwNEM0KQotI2RlZmluZSBEUF9URVNUXzgwQklUX0NVU1RPTV9QQVRURVJOX1JFRzIJKDB4MDAw MDA0QzgpCi0KLSNkZWZpbmUgTU1TU19EUF9NSVNDMV9NSVNDMAkJCSgweDAwMDAwNDJDKQotI2Rl ZmluZSBNTVNTX0RQX0FVRElPX1RJTUlOR19HRU4JCSgweDAwMDAwNDgwKQotI2RlZmluZSBNTVNT X0RQX0FVRElPX1RJTUlOR19SQlJfMzIJCSgweDAwMDAwNDg0KQotI2RlZmluZSBNTVNTX0RQX0FV RElPX1RJTUlOR19IQlJfMzIJCSgweDAwMDAwNDg4KQotI2RlZmluZSBNTVNTX0RQX0FVRElPX1RJ TUlOR19SQlJfNDQJCSgweDAwMDAwNDhDKQotI2RlZmluZSBNTVNTX0RQX0FVRElPX1RJTUlOR19I QlJfNDQJCSgweDAwMDAwNDkwKQotI2RlZmluZSBNTVNTX0RQX0FVRElPX1RJTUlOR19SQlJfNDgJ CSgweDAwMDAwNDk0KQotI2RlZmluZSBNTVNTX0RQX0FVRElPX1RJTUlOR19IQlJfNDgJCSgweDAw MDAwNDk4KQotCi0jZGVmaW5lIE1NU1NfRFBfUFNSX0NSQ19SRwkJCSgweDAwMDAwNTU0KQotI2Rl ZmluZSBNTVNTX0RQX1BTUl9DUkNfQgkJCSgweDAwMDAwNTU4KQotCi0jZGVmaW5lIERQX0NPTVBS RVNTSU9OX01PREVfQ1RSTAkJKDB4MDAwMDA1ODApCi0KLSNkZWZpbmUgTU1TU19EUF9BVURJT19D RkcJCQkoMHgwMDAwMDYwMCkKLSNkZWZpbmUgTU1TU19EUF9BVURJT19TVEFUVVMJCQkoMHgwMDAw MDYwNCkKLSNkZWZpbmUgTU1TU19EUF9BVURJT19QS1RfQ1RSTAkJCSgweDAwMDAwNjA4KQotI2Rl ZmluZSBNTVNTX0RQX0FVRElPX1BLVF9DVFJMMgkJCSgweDAwMDAwNjBDKQotI2RlZmluZSBNTVNT X0RQX0FVRElPX0FDUl9DVFJMCQkJKDB4MDAwMDA2MTApCi0jZGVmaW5lIE1NU1NfRFBfQVVESU9f Q1RSTF9SRVNFVAkJKDB4MDAwMDA2MTQpCi0KLSNkZWZpbmUgTU1TU19EUF9TRFBfQ0ZHCQkJCSgw eDAwMDAwNjI4KQotI2RlZmluZSBNTVNTX0RQX1NEUF9DRkcyCQkJKDB4MDAwMDA2MkMpCi0jZGVm aW5lIE1NU1NfRFBfQVVESU9fVElNRVNUQU1QXzAJCSgweDAwMDAwNjMwKQotI2RlZmluZSBNTVNT X0RQX0FVRElPX1RJTUVTVEFNUF8xCQkoMHgwMDAwMDYzNCkKLQotI2RlZmluZSBNTVNTX0RQX0FV RElPX1NUUkVBTV8wCQkJKDB4MDAwMDA2NDApCi0jZGVmaW5lIE1NU1NfRFBfQVVESU9fU1RSRUFN XzEJCQkoMHgwMDAwMDY0NCkKLQotI2RlZmluZSBNTVNTX0RQX0VYVEVOU0lPTl8wCQkJKDB4MDAw MDA2NTApCi0jZGVmaW5lIE1NU1NfRFBfRVhURU5TSU9OXzEJCQkoMHgwMDAwMDY1NCkKLSNkZWZp bmUgTU1TU19EUF9FWFRFTlNJT05fMgkJCSgweDAwMDAwNjU4KQotI2RlZmluZSBNTVNTX0RQX0VY VEVOU0lPTl8zCQkJKDB4MDAwMDA2NUMpCi0jZGVmaW5lIE1NU1NfRFBfRVhURU5TSU9OXzQJCQko MHgwMDAwMDY2MCkKLSNkZWZpbmUgTU1TU19EUF9FWFRFTlNJT05fNQkJCSgweDAwMDAwNjY0KQot I2RlZmluZSBNTVNTX0RQX0VYVEVOU0lPTl82CQkJKDB4MDAwMDA2NjgpCi0jZGVmaW5lIE1NU1Nf RFBfRVhURU5TSU9OXzcJCQkoMHgwMDAwMDY2QykKLSNkZWZpbmUgTU1TU19EUF9FWFRFTlNJT05f OAkJCSgweDAwMDAwNjcwKQotI2RlZmluZSBNTVNTX0RQX0VYVEVOU0lPTl85CQkJKDB4MDAwMDA2 NzQpCi0jZGVmaW5lIE1NU1NfRFBfQVVESU9fQ09QWU1BTkFHRU1FTlRfMAkJKDB4MDAwMDA2Nzgp Ci0jZGVmaW5lIE1NU1NfRFBfQVVESU9fQ09QWU1BTkFHRU1FTlRfMQkJKDB4MDAwMDA2N0MpCi0j ZGVmaW5lIE1NU1NfRFBfQVVESU9fQ09QWU1BTkFHRU1FTlRfMgkJKDB4MDAwMDA2ODApCi0jZGVm aW5lIE1NU1NfRFBfQVVESU9fQ09QWU1BTkFHRU1FTlRfMwkJKDB4MDAwMDA2ODQpCi0jZGVmaW5l IE1NU1NfRFBfQVVESU9fQ09QWU1BTkFHRU1FTlRfNAkJKDB4MDAwMDA2ODgpCi0jZGVmaW5lIE1N U1NfRFBfQVVESU9fQ09QWU1BTkFHRU1FTlRfNQkJKDB4MDAwMDA2OEMpCi0jZGVmaW5lIE1NU1Nf RFBfQVVESU9fSVNSQ18wCQkJKDB4MDAwMDA2OTApCi0jZGVmaW5lIE1NU1NfRFBfQVVESU9fSVNS Q18xCQkJKDB4MDAwMDA2OTQpCi0jZGVmaW5lIE1NU1NfRFBfQVVESU9fSVNSQ18yCQkJKDB4MDAw MDA2OTgpCi0jZGVmaW5lIE1NU1NfRFBfQVVESU9fSVNSQ18zCQkJKDB4MDAwMDA2OUMpCi0jZGVm aW5lIE1NU1NfRFBfQVVESU9fSVNSQ180CQkJKDB4MDAwMDA2QTApCi0jZGVmaW5lIE1NU1NfRFBf QVVESU9fSVNSQ181CQkJKDB4MDAwMDA2QTQpCi0jZGVmaW5lIE1NU1NfRFBfQVVESU9fSU5GT0ZS QU1FXzAJCSgweDAwMDAwNkE4KQotI2RlZmluZSBNTVNTX0RQX0FVRElPX0lORk9GUkFNRV8xCQko MHgwMDAwMDZBQykKLSNkZWZpbmUgTU1TU19EUF9BVURJT19JTkZPRlJBTUVfMgkJKDB4MDAwMDA2 QjApCi0KLSNkZWZpbmUgTU1TU19EUF9HRU5FUklDMF8wCQkJKDB4MDAwMDA3MDApCi0jZGVmaW5l IE1NU1NfRFBfR0VORVJJQzBfMQkJCSgweDAwMDAwNzA0KQotI2RlZmluZSBNTVNTX0RQX0dFTkVS SUMwXzIJCQkoMHgwMDAwMDcwOCkKLSNkZWZpbmUgTU1TU19EUF9HRU5FUklDMF8zCQkJKDB4MDAw MDA3MEMpCi0jZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBfNAkJCSgweDAwMDAwNzEwKQotI2RlZmlu ZSBNTVNTX0RQX0dFTkVSSUMwXzUJCQkoMHgwMDAwMDcxNCkKLSNkZWZpbmUgTU1TU19EUF9HRU5F UklDMF82CQkJKDB4MDAwMDA3MTgpCi0jZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBfNwkJCSgweDAw MDAwNzFDKQotI2RlZmluZSBNTVNTX0RQX0dFTkVSSUMwXzgJCQkoMHgwMDAwMDcyMCkKLSNkZWZp bmUgTU1TU19EUF9HRU5FUklDMF85CQkJKDB4MDAwMDA3MjQpCi0jZGVmaW5lIE1NU1NfRFBfR0VO RVJJQzFfMAkJCSgweDAwMDAwNzI4KQotI2RlZmluZSBNTVNTX0RQX0dFTkVSSUMxXzEJCQkoMHgw MDAwMDcyQykKLSNkZWZpbmUgTU1TU19EUF9HRU5FUklDMV8yCQkJKDB4MDAwMDA3MzApCi0jZGVm aW5lIE1NU1NfRFBfR0VORVJJQzFfMwkJCSgweDAwMDAwNzM0KQotI2RlZmluZSBNTVNTX0RQX0dF TkVSSUMxXzQJCQkoMHgwMDAwMDczOCkKLSNkZWZpbmUgTU1TU19EUF9HRU5FUklDMV81CQkJKDB4 MDAwMDA3M0MpCi0jZGVmaW5lIE1NU1NfRFBfR0VORVJJQzFfNgkJCSgweDAwMDAwNzQwKQotI2Rl ZmluZSBNTVNTX0RQX0dFTkVSSUMxXzcJCQkoMHgwMDAwMDc0NCkKLSNkZWZpbmUgTU1TU19EUF9H RU5FUklDMV84CQkJKDB4MDAwMDA3NDgpCi0jZGVmaW5lIE1NU1NfRFBfR0VORVJJQzFfOQkJCSgw eDAwMDAwNzRDKQotCi0jZGVmaW5lIE1NU1NfRFBfVlNDRVhUXzAJCQkoMHgwMDAwMDZEMCkKLSNk ZWZpbmUgTU1TU19EUF9WU0NFWFRfMQkJCSgweDAwMDAwNkQ0KQotI2RlZmluZSBNTVNTX0RQX1ZT Q0VYVF8yCQkJKDB4MDAwMDA2RDgpCi0jZGVmaW5lIE1NU1NfRFBfVlNDRVhUXzMJCQkoMHgwMDAw MDZEQykKLSNkZWZpbmUgTU1TU19EUF9WU0NFWFRfNAkJCSgweDAwMDAwNkUwKQotI2RlZmluZSBN TVNTX0RQX1ZTQ0VYVF81CQkJKDB4MDAwMDA2RTQpCi0jZGVmaW5lIE1NU1NfRFBfVlNDRVhUXzYJ CQkoMHgwMDAwMDZFOCkKLSNkZWZpbmUgTU1TU19EUF9WU0NFWFRfNwkJCSgweDAwMDAwNkVDKQot I2RlZmluZSBNTVNTX0RQX1ZTQ0VYVF84CQkJKDB4MDAwMDA2RjApCi0jZGVmaW5lIE1NU1NfRFBf VlNDRVhUXzkJCQkoMHgwMDAwMDZGNCkKLQotI2RlZmluZSBNTVNTX0RQX1RJTUlOR19FTkdJTkVf RU4JCSgweDAwMDAwQTEwKQotI2RlZmluZSBNTVNTX0RQX0FTWU5DX0ZJRk9fQ09ORklHCQkoMHgw MDAwMEE4OCkKLQotLypEUCBQSFkgUmVnaXN0ZXIgb2Zmc2V0cyAqLwotI2RlZmluZSBEUF9QSFlf UkVWSVNJT05fSUQwICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCi0jZGVmaW5lIERQ X1BIWV9SRVZJU0lPTl9JRDEgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwNCkKLSNkZWZp bmUgRFBfUEhZX1JFVklTSU9OX0lEMiAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDA4KQot I2RlZmluZSBEUF9QSFlfUkVWSVNJT05fSUQzICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAw MEMpCi0KLSNkZWZpbmUgRFBfUEhZX0NGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgw eDAwMDAwMDEwKQotI2RlZmluZSBEUF9QSFlfUERfQ1RMICAgICAgICAgICAgICAgICAgICAgICAg ICAgKDB4MDAwMDAwMTgpCi0jZGVmaW5lIERQX1BIWV9NT0RFICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoMHgwMDAwMDAxQykKLQotI2RlZmluZSBEUF9QSFlfQVVYX0NGRzAgICAgICAgICAg ICAgICAgICAgICAgICAgKDB4MDAwMDAwMjApCi0jZGVmaW5lIERQX1BIWV9BVVhfQ0ZHMSAgICAg ICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAyNCkKLSNkZWZpbmUgRFBfUEhZX0FVWF9DRkcy ICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDI4KQotI2RlZmluZSBEUF9QSFlfQVVY X0NGRzMgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMkMpCi0jZGVmaW5lIERQX1BI WV9BVVhfQ0ZHNCAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAzMCkKLSNkZWZpbmUg RFBfUEhZX0FVWF9DRkc1ICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDM0KQotI2Rl ZmluZSBEUF9QSFlfQVVYX0NGRzYgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMzgp Ci0jZGVmaW5lIERQX1BIWV9BVVhfQ0ZHNyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAw MDAzQykKLSNkZWZpbmUgRFBfUEhZX0FVWF9DRkc4ICAgICAgICAgICAgICAgICAgICAgICAgICgw eDAwMDAwMDQwKQotI2RlZmluZSBEUF9QSFlfQVVYX0NGRzkgICAgICAgICAgICAgICAgICAgICAg ICAgKDB4MDAwMDAwNDQpCi0jZGVmaW5lIERQX1BIWV9BVVhfSU5URVJSVVBUX01BU0sgICAgICAg ICAgICAgICAoMHgwMDAwMDA0OCkKLSNkZWZpbmUgRFBfUEhZX0FVWF9JTlRFUlJVUFRfQ0xFQVIg ICAgICAgICAgICAgICgweDAwMDAwMDRDKQotCi0jZGVmaW5lIERQX1BIWV9TUEFSRTAJCQkJKDB4 MDBBQykKLQotI2RlZmluZSBUWG5fVFhfRU1QX1BPU1QxX0xWTAkJCSgweDAwMEMpCi0jZGVmaW5l IFRYbl9UWF9EUlZfTFZMCQkJCSgweDAwMUMpCi0KLSNkZWZpbmUgUVNFUkRFU19DT01fQklBU19F Tl9DTEtCVUZMUl9FTgkJKDB4MDA0KQotCi0vKiBEUCBNTVNTX0NDIHJlZ2lzdGVycyAqLwotI2Rl ZmluZSBNTVNTX0RQX0xJTktfQ01EX1JDR1IJCQkoMHgwMTM4KQotI2RlZmluZSBNTVNTX0RQX0xJ TktfQ0ZHX1JDR1IJCQkoMHgwMTNDKQotI2RlZmluZSBNTVNTX0RQX1BJWEVMX00JCQkJKDB4MDE3 NCkKLSNkZWZpbmUgTU1TU19EUF9QSVhFTF9OCQkJCSgweDAxNzgpCi0KLS8qIERQIEhEQ1AgMS4z IHJlZ2lzdGVycyAqLwotI2RlZmluZSBEUF9IRENQX0NUUkwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgweDBBMCkKLSNkZWZpbmUgRFBfSERDUF9TVEFUVVMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoMHgwQTQpCi0jZGVmaW5lIERQX0hEQ1BfU1dfVVBQRVJfQUtT ViAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4Mjk4KQotI2RlZmluZSBEUF9IRENQX1NXX0xP V0VSX0FLU1YgICAgICAgICAgICAgICAgICAgICAgICAgICgweDI5QykKLSNkZWZpbmUgRFBfSERD UF9FTlRST1BZX0NUUkwwICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3NTApCi0jZGVmaW5l IERQX0hEQ1BfRU5UUk9QWV9DVFJMMSAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NzVDKQot I2RlZmluZSBEUF9IRENQX1NIQV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgw eDBDOCkKLSNkZWZpbmUgRFBfSERDUF9SQ1ZQT1JUX0RBVEEyXzAgICAgICAgICAgICAgICAgICAg ICAgICAoMHgwQjApCi0jZGVmaW5lIERQX0hEQ1BfUkNWUE9SVF9EQVRBMyAgICAgICAgICAgICAg ICAgICAgICAgICAgKDB4MkE0KQotI2RlZmluZSBEUF9IRENQX1JDVlBPUlRfREFUQTQgICAgICAg ICAgICAgICAgICAgICAgICAgICgweDJBOCkKLSNkZWZpbmUgRFBfSERDUF9SQ1ZQT1JUX0RBVEE1 ICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwQzApCi0jZGVmaW5lIERQX0hEQ1BfUkNWUE9S VF9EQVRBNiAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEM0KQotCi0jZGVmaW5lIEhEQ1Bf U0VDX0RQX1RaX0hWX0hMT1NfSERDUF9TSEFfQ1RSTCAgICAgICAgICAgKDB4MDI0KQotI2RlZmlu ZSBIRENQX1NFQ19EUF9UWl9IVl9ITE9TX0hEQ1BfU0hBX0RBVEEgICAgICAgICAgICgweDAyOCkK LSNkZWZpbmUgSERDUF9TRUNfRFBfVFpfSFZfSExPU19IRENQX1JDVlBPUlRfREFUQTAgICAgICAo MHgwMDQpCi0jZGVmaW5lIEhEQ1BfU0VDX0RQX1RaX0hWX0hMT1NfSERDUF9SQ1ZQT1JUX0RBVEEx ICAgICAgKDB4MDA4KQotI2RlZmluZSBIRENQX1NFQ19EUF9UWl9IVl9ITE9TX0hEQ1BfUkNWUE9S VF9EQVRBNyAgICAgICgweDAwQykKLSNkZWZpbmUgSERDUF9TRUNfRFBfVFpfSFZfSExPU19IRENQ X1JDVlBPUlRfREFUQTggICAgICAoMHgwMTApCi0jZGVmaW5lIEhEQ1BfU0VDX0RQX1RaX0hWX0hM T1NfSERDUF9SQ1ZQT1JUX0RBVEE5ICAgICAgKDB4MDE0KQotI2RlZmluZSBIRENQX1NFQ19EUF9U Wl9IVl9ITE9TX0hEQ1BfUkNWUE9SVF9EQVRBMTAgICAgICgweDAxOCkKLSNkZWZpbmUgSERDUF9T RUNfRFBfVFpfSFZfSExPU19IRENQX1JDVlBPUlRfREFUQTExICAgICAoMHgwMUMpCi0jZGVmaW5l IEhEQ1BfU0VDX0RQX1RaX0hWX0hMT1NfSERDUF9SQ1ZQT1JUX0RBVEExMiAgICAgKDB4MDIwKQot Ci0vKiBVU0IzIERQIENPTSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVVNCM19EUF9DT01fUkVTRVRf T1ZSRF9DVFJMICgweDFDKQotI2RlZmluZSBVU0IzX0RQX0NPTV9QSFlfTU9ERV9DVFJMICAgKDB4 MDApCi0jZGVmaW5lIFVTQjNfRFBfQ09NX1NXX1JFU0VUICAgICAgICAoMHgwNCkKLSNkZWZpbmUg VVNCM19EUF9DT01fVFlQRUNfQ1RSTCAgICAgICgweDEwKQotI2RlZmluZSBVU0IzX0RQX0NPTV9T V0lfQ1RSTCAgICAgICAgKDB4MGMpCi0jZGVmaW5lIFVTQjNfRFBfQ09NX1BPV0VSX0RPV05fQ1RS TCAoMHgwOCkKLQotCi0KLSNlbmRpZiAvKiBfRFBfUkVHX0hfICovCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3VzYnBkLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2Rw X3VzYnBkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMGUzODAuLjAwMDAwMDAK LS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF91c2JwZC5jCisrKyAvZGV2L251bGwKQEAg LTEsNDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxOCwgVGhlIExpbnV4 IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICog R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQot I2RlZmluZSBwcl9mbXQoZm10KQkiW2RybS1kcF0gJXM6ICIgZm10LCBfX2Z1bmNfXwotCi0jaW5j bHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotCi0jaW5jbHVk ZSAiZHBfdXNicGQuaCIKLQotLyogRFAgc3BlY2lmaWMgVkRNIGNvbW1hbmRzICovCi0jZGVmaW5l IERQX1VTQlBEX1ZETV9TVEFUVVMJMHgxMAotI2RlZmluZSBEUF9VU0JQRF9WRE1fQ09ORklHVVJF CTB4MTEKLQotLyogVVNCUEQtVHlwZUMgc3BlY2lmaWMgTWFjcm9zICovCi0jZGVmaW5lIFZETV9W RVJTSU9OCQkweDAKLSNkZWZpbmUgVVNCX0NfRFBfU0lECQkweEZGMDEKLQotZW51bSBkcF91c2Jw ZF9waW5fYXNzaWdubWVudCB7Ci0JRFBfVVNCUERfUElOX0EsCi0JRFBfVVNCUERfUElOX0IsCi0J RFBfVVNCUERfUElOX0MsCi0JRFBfVVNCUERfUElOX0QsCi0JRFBfVVNCUERfUElOX0UsCi0JRFBf VVNCUERfUElOX0YsCi0JRFBfVVNCUERfUElOX01BWCwKLX07Ci0KLWVudW0gZHBfdXNicGRfZXZl bnRzIHsKLQlEUF9VU0JQRF9FVlRfRElTQ09WRVIsCi0JRFBfVVNCUERfRVZUX0VOVEVSLAotCURQ X1VTQlBEX0VWVF9TVEFUVVMsCi0JRFBfVVNCUERfRVZUX0NPTkZJR1VSRSwKLQlEUF9VU0JQRF9F VlRfQ0NfUElOX1BPTEFSSVRZLAotCURQX1VTQlBEX0VWVF9FWElULAotCURQX1VTQlBEX0VWVF9B VFRFTlRJT04sCi19OwotCi1lbnVtIGRwX3VzYnBkX2FsdF9tb2RlIHsKLQlEUF9VU0JQRF9BTFRf TU9ERV9OT05FCSAgICA9IDAsCi0JRFBfVVNCUERfQUxUX01PREVfSU5JVAkgICAgPSBCSVQoMCks Ci0JRFBfVVNCUERfQUxUX01PREVfRElTQ09WRVIgID0gQklUKDEpLAotCURQX1VTQlBEX0FMVF9N T0RFX0VOVEVSCSAgICA9IEJJVCgyKSwKLQlEUF9VU0JQRF9BTFRfTU9ERV9TVEFUVVMgICAgPSBC SVQoMyksCi0JRFBfVVNCUERfQUxUX01PREVfQ09ORklHVVJFID0gQklUKDQpLAotfTsKLQotc3Ry dWN0IGRwX3VzYnBkX2NhcGFiaWxpdGllcyB7Ci0JZW51bSBkcF91c2JwZF9wb3J0IHBvcnQ7Ci0J Ym9vbCByZWNlcHRhY2xlX3N0YXRlOwotCXU4IHVsaW5rX3Bpbl9jb25maWc7Ci0JdTggZGxpbmtf cGluX2NvbmZpZzsKLX07Ci0KLXN0cnVjdCBkcF91c2JwZF9wcml2YXRlIHsKLQl1MzIgdmRvOwot CXN0cnVjdCBkZXZpY2UgKmRldjsKLQlzdHJ1Y3QgdXNicGQgKnBkOwotCXN0cnVjdCB1c2JwZF9z dmlkX2hhbmRsZXIgc3ZpZF9oYW5kbGVyOwotCXN0cnVjdCBkcF91c2JwZF9jYiAqZHBfY2I7Ci0J c3RydWN0IGRwX3VzYnBkX2NhcGFiaWxpdGllcyBjYXA7Ci0Jc3RydWN0IGRwX3VzYnBkIGRwX3Vz YnBkOwotCWVudW0gZHBfdXNicGRfYWx0X21vZGUgYWx0X21vZGU7Ci0JdTMyIGRwX3VzYnBkX2Nv bmZpZzsKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpkcF91c2JwZF9waW5fbmFtZSh1OCBwaW4p Ci17Ci0Jc3dpdGNoIChwaW4pIHsKLQljYXNlIERQX1VTQlBEX1BJTl9BOiByZXR1cm4gIkRQX1VT QlBEX1BJTl9BU1NJR05NRU5UX0EiOwotCWNhc2UgRFBfVVNCUERfUElOX0I6IHJldHVybiAiRFBf VVNCUERfUElOX0FTU0lHTk1FTlRfQiI7Ci0JY2FzZSBEUF9VU0JQRF9QSU5fQzogcmV0dXJuICJE UF9VU0JQRF9QSU5fQVNTSUdOTUVOVF9DIjsKLQljYXNlIERQX1VTQlBEX1BJTl9EOiByZXR1cm4g IkRQX1VTQlBEX1BJTl9BU1NJR05NRU5UX0QiOwotCWNhc2UgRFBfVVNCUERfUElOX0U6IHJldHVy biAiRFBfVVNCUERfUElOX0FTU0lHTk1FTlRfRSI7Ci0JY2FzZSBEUF9VU0JQRF9QSU5fRjogcmV0 dXJuICJEUF9VU0JQRF9QSU5fQVNTSUdOTUVOVF9GIjsKLQlkZWZhdWx0OiByZXR1cm4gIlVOS05P V04iOwotCX0KLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKmRwX3VzYnBkX3BvcnRfbmFtZShlbnVt IGRwX3VzYnBkX3BvcnQgcG9ydCkKLXsKLQlzd2l0Y2ggKHBvcnQpIHsKLQljYXNlIERQX1VTQlBE X1BPUlRfTk9ORTogcmV0dXJuICJEUF9VU0JQRF9QT1JUX05PTkUiOwotCWNhc2UgRFBfVVNCUERf UE9SVF9VRlBfRDogcmV0dXJuICJEUF9VU0JQRF9QT1JUX1VGUF9EIjsKLQljYXNlIERQX1VTQlBE X1BPUlRfREZQX0Q6IHJldHVybiAiRFBfVVNCUERfUE9SVF9ERlBfRCI7Ci0JY2FzZSBEUF9VU0JQ RF9QT1JUX0RfVUZQX0Q6IHJldHVybiAiRFBfVVNCUERfUE9SVF9EX1VGUF9EIjsKLQlkZWZhdWx0 OiByZXR1cm4gIkRQX1VTQlBEX1BPUlRfTk9ORSI7Ci0JfQotfQotCi1zdGF0aWMgY29uc3QgY2hh ciAqZHBfdXNicGRfY21kX25hbWUodTggY21kKQotewotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBV U0JQRF9TVkRNX0RJU0NPVkVSX01PREVTOiByZXR1cm4gIlVTQlBEX1NWRE1fRElTQ09WRVJfTU9E RVMiOwotCWNhc2UgVVNCUERfU1ZETV9FTlRFUl9NT0RFOiByZXR1cm4gIlVTQlBEX1NWRE1fRU5U RVJfTU9ERSI7Ci0JY2FzZSBVU0JQRF9TVkRNX0FUVEVOVElPTjogcmV0dXJuICJVU0JQRF9TVkRN X0FUVEVOVElPTiI7Ci0JY2FzZSBEUF9VU0JQRF9WRE1fU1RBVFVTOiByZXR1cm4gIkRQX1VTQlBE X1ZETV9TVEFUVVMiOwotCWNhc2UgRFBfVVNCUERfVkRNX0NPTkZJR1VSRTogcmV0dXJuICJEUF9V U0JQRF9WRE1fQ09ORklHVVJFIjsKLQlkZWZhdWx0OiByZXR1cm4gIkRQX1VTQlBEX1ZETV9FUlJP UiI7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkcF91c2JwZF9pbml0X3BvcnQoZW51bSBkcF91c2Jw ZF9wb3J0ICpwb3J0LCB1MzIgaW5fcG9ydCkKLXsKLQlzd2l0Y2ggKGluX3BvcnQpIHsKLQljYXNl IDA6Ci0JCSpwb3J0ID0gRFBfVVNCUERfUE9SVF9OT05FOwotCQlicmVhazsKLQljYXNlIDE6Ci0J CSpwb3J0ID0gRFBfVVNCUERfUE9SVF9VRlBfRDsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQkqcG9y dCA9IERQX1VTQlBEX1BPUlRfREZQX0Q7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJKnBvcnQgPSBE UF9VU0JQRF9QT1JUX0RfVUZQX0Q7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCSpwb3J0ID0gRFBf VVNCUERfUE9SVF9OT05FOwotCX0KLQlwcl9kZWJ1ZygicG9ydDolc1xuIiwgZHBfdXNicGRfcG9y dF9uYW1lKCpwb3J0KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX3VzYnBkX2dldF9jYXBhYmlsaXRp ZXMoc3RydWN0IGRwX3VzYnBkX3ByaXZhdGUgKnBkKQotewotCXN0cnVjdCBkcF91c2JwZF9jYXBh YmlsaXRpZXMgKmNhcCA9ICZwZC0+Y2FwOwotCXUzMiBidWYgPSBwZC0+dmRvOwotCWludCBwb3J0 ID0gYnVmICYgMHgzOwotCi0JY2FwLT5yZWNlcHRhY2xlX3N0YXRlID0gKGJ1ZiAmIEJJVCg2KSkg PyB0cnVlIDogZmFsc2U7Ci0JY2FwLT5kbGlua19waW5fY29uZmlnID0gKGJ1ZiA+PiA4KSAmIDB4 ZmY7Ci0JY2FwLT51bGlua19waW5fY29uZmlnID0gKGJ1ZiA+PiAxNikgJiAweGZmOwotCi0JZHBf dXNicGRfaW5pdF9wb3J0KCZjYXAtPnBvcnQsIHBvcnQpOwotfQotCi1zdGF0aWMgdm9pZCBkcF91 c2JwZF9nZXRfc3RhdHVzKHN0cnVjdCBkcF91c2JwZF9wcml2YXRlICpwZCkKLXsKLQlzdHJ1Y3Qg ZHBfdXNicGQgKnN0YXR1cyA9ICZwZC0+ZHBfdXNicGQ7Ci0JdTMyIGJ1ZiA9IHBkLT52ZG87Ci0J aW50IHBvcnQgPSBidWYgJiAweDM7Ci0KLQlzdGF0dXMtPmxvd19wb3dfc3QgICAgID0gKGJ1ZiAm IEJJVCgyKSkgPyB0cnVlIDogZmFsc2U7Ci0Jc3RhdHVzLT5hZGFwdG9yX2RwX2VuICA9IChidWYg JiBCSVQoMykpID8gdHJ1ZSA6IGZhbHNlOwotCXN0YXR1cy0+bXVsdGlfZnVuYyAgICAgPSAoYnVm ICYgQklUKDQpKSA/IHRydWUgOiBmYWxzZTsKLQlzdGF0dXMtPnVzYl9jb25maWdfcmVxID0gKGJ1 ZiAmIEJJVCg1KSkgPyB0cnVlIDogZmFsc2U7Ci0Jc3RhdHVzLT5leGl0X2RwX21vZGUgICA9IChi dWYgJiBCSVQoNikpID8gdHJ1ZSA6IGZhbHNlOwotCXN0YXR1cy0+aHBkX2hpZ2ggICAgICAgPSAo YnVmICYgQklUKDcpKSA/IHRydWUgOiBmYWxzZTsKLQlzdGF0dXMtPmhwZF9pcnEgICAgICAgID0g KGJ1ZiAmIEJJVCg4KSkgPyB0cnVlIDogZmFsc2U7Ci0KLQlwcl9kZWJ1ZygibG93X3Bvd19zdCA9 ICVkLCBhZGFwdG9yX2RwX2VuID0gJWQsIG11bHRpX2Z1bmMgPSAlZFxuIiwKLQkJCXN0YXR1cy0+ bG93X3Bvd19zdCwgc3RhdHVzLT5hZGFwdG9yX2RwX2VuLAotCQkJc3RhdHVzLT5tdWx0aV9mdW5j KTsKLQlwcl9kZWJ1ZygidXNiX2NvbmZpZ19yZXEgPSAlZCwgZXhpdF9kcF9tb2RlID0gJWQsIGhw ZF9oaWdoID0lZFxuIiwKLQkJCXN0YXR1cy0+dXNiX2NvbmZpZ19yZXEsCi0JCQlzdGF0dXMtPmV4 aXRfZHBfbW9kZSwgc3RhdHVzLT5ocGRfaGlnaCk7Ci0JcHJfZGVidWcoImhwZF9pcnEgPSAlZFxu Iiwgc3RhdHVzLT5ocGRfaXJxKTsKLQotCWRwX3VzYnBkX2luaXRfcG9ydCgmc3RhdHVzLT5wb3J0 LCBwb3J0KTsKLX0KLQotc3RhdGljIHUzMiBkcF91c2JwZF9nZW5fY29uZmlnX3BrdChzdHJ1Y3Qg ZHBfdXNicGRfcHJpdmF0ZSAqcGQpCi17Ci0JdTggcGluX2NmZywgcGluOwotCXUzMiBjb25maWcg PSAwOwotCWNvbnN0IHUzMiB1ZnBfZF9jb25maWcgPSAweDIsIGRwX3ZlciA9IDB4MTsKLQotCWlm IChwZC0+Y2FwLnJlY2VwdGFjbGVfc3RhdGUpCi0JCXBpbl9jZmcgPSBwZC0+Y2FwLnVsaW5rX3Bp bl9jb25maWc7Ci0JZWxzZQotCQlwaW5fY2ZnID0gcGQtPmNhcC5kbGlua19waW5fY29uZmlnOwot Ci0JZm9yIChwaW4gPSBEUF9VU0JQRF9QSU5fQTsgcGluIDwgRFBfVVNCUERfUElOX01BWDsgcGlu KyspIHsKLQkJaWYgKHBpbl9jZmcgJiBCSVQocGluKSkgewotCQkJaWYgKHBkLT5kcF91c2JwZC5t dWx0aV9mdW5jKSB7Ci0JCQkJaWYgKHBpbiA9PSBEUF9VU0JQRF9QSU5fRCkKLQkJCQkJYnJlYWs7 Ci0JCQl9IGVsc2UgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKHBpbiA9PSBE UF9VU0JQRF9QSU5fTUFYKQotCQlwaW4gPSBEUF9VU0JQRF9QSU5fQzsKLQotCXByX2RlYnVnKCJw aW4gYXNzaWdubWVudDogJXNcbiIsIGRwX3VzYnBkX3Bpbl9uYW1lKHBpbikpOwotCi0JY29uZmln IHw9IEJJVChwaW4pIDw8IDg7Ci0KLQljb25maWcgfD0gKGRwX3ZlciA8PCAyKTsKLQljb25maWcg fD0gdWZwX2RfY29uZmlnOwotCi0JcHJfZGVidWcoImNvbmZpZyA9IDB4JXhcbiIsIGNvbmZpZyk7 Ci0JcmV0dXJuIGNvbmZpZzsKLX0KLQotc3RhdGljIHZvaWQgZHBfdXNicGRfc2VuZF9ldmVudChz dHJ1Y3QgZHBfdXNicGRfcHJpdmF0ZSAqcGQsCi0JCWVudW0gZHBfdXNicGRfZXZlbnRzIGV2ZW50 KQotewotCXUzMiBjb25maWc7Ci0KLQlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBEUF9VU0JQRF9F VlRfRElTQ09WRVI6Ci0JCXVzYnBkX3NlbmRfc3ZkbShwZC0+cGQsIFVTQl9DX0RQX1NJRCwKLQkJ CVVTQlBEX1NWRE1fRElTQ09WRVJfTU9ERVMsCi0JCQlTVkRNX0NNRF9UWVBFX0lOSVRJQVRPUiwg MHgwLCAweDAsIDB4MCk7Ci0JCWJyZWFrOwotCWNhc2UgRFBfVVNCUERfRVZUX0VOVEVSOgotCQl1 c2JwZF9zZW5kX3N2ZG0ocGQtPnBkLCBVU0JfQ19EUF9TSUQsCi0JCQlVU0JQRF9TVkRNX0VOVEVS X01PREUsCi0JCQlTVkRNX0NNRF9UWVBFX0lOSVRJQVRPUiwgMHgxLCAweDAsIDB4MCk7Ci0JCWJy ZWFrOwotCWNhc2UgRFBfVVNCUERfRVZUX0VYSVQ6Ci0JCXVzYnBkX3NlbmRfc3ZkbShwZC0+cGQs IFVTQl9DX0RQX1NJRCwKLQkJCVVTQlBEX1NWRE1fRVhJVF9NT0RFLAotCQkJU1ZETV9DTURfVFlQ RV9JTklUSUFUT1IsIDB4MSwgMHgwLCAweDApOwotCQlicmVhazsKLQljYXNlIERQX1VTQlBEX0VW VF9TVEFUVVM6Ci0JCWNvbmZpZyA9IDB4MTsgLyogREZQX0QgY29ubmVjdGVkICovCi0JCXVzYnBk X3NlbmRfc3ZkbShwZC0+cGQsIFVTQl9DX0RQX1NJRCwgRFBfVVNCUERfVkRNX1NUQVRVUywKLQkJ CVNWRE1fQ01EX1RZUEVfSU5JVElBVE9SLCAweDEsICZjb25maWcsIDB4MSk7Ci0JCWJyZWFrOwot CWNhc2UgRFBfVVNCUERfRVZUX0NPTkZJR1VSRToKLQkJY29uZmlnID0gZHBfdXNicGRfZ2VuX2Nv bmZpZ19wa3QocGQpOwotCQl1c2JwZF9zZW5kX3N2ZG0ocGQtPnBkLCBVU0JfQ19EUF9TSUQsIERQ X1VTQlBEX1ZETV9DT05GSUdVUkUsCi0JCQlTVkRNX0NNRF9UWVBFX0lOSVRJQVRPUiwgMHgxLCAm Y29uZmlnLCAweDEpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcl9lcnIoInVua25vd24gZXZl bnQ6JWRcbiIsIGV2ZW50KTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGRwX3VzYnBkX2Nvbm5lY3Rf Y2Ioc3RydWN0IHVzYnBkX3N2aWRfaGFuZGxlciAqaGRscikKLXsKLQlzdHJ1Y3QgZHBfdXNicGRf cHJpdmF0ZSAqcGQ7Ci0KLQlwZCA9IGNvbnRhaW5lcl9vZihoZGxyLCBzdHJ1Y3QgZHBfdXNicGRf cHJpdmF0ZSwgc3ZpZF9oYW5kbGVyKTsKLQlpZiAoIXBkKSB7Ci0JCXByX2VycigiZ2V0X3VzYnBk IHBoYW5kbGUgZmFpbGVkXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXByX2RlYnVnKCJcbiIpOwot CWRwX3VzYnBkX3NlbmRfZXZlbnQocGQsIERQX1VTQlBEX0VWVF9ESVNDT1ZFUik7Ci19Ci0KLXN0 YXRpYyB2b2lkIGRwX3VzYnBkX2Rpc2Nvbm5lY3RfY2Ioc3RydWN0IHVzYnBkX3N2aWRfaGFuZGxl ciAqaGRscikKLXsKLQlzdHJ1Y3QgZHBfdXNicGRfcHJpdmF0ZSAqcGQ7Ci0KLQlwZCA9IGNvbnRh aW5lcl9vZihoZGxyLCBzdHJ1Y3QgZHBfdXNicGRfcHJpdmF0ZSwgc3ZpZF9oYW5kbGVyKTsKLQlp ZiAoIXBkKSB7Ci0JCXByX2VycigiZ2V0X3VzYnBkIHBoYW5kbGUgZmFpbGVkXG4iKTsKLQkJcmV0 dXJuOwotCX0KLQotCXBkLT5hbHRfbW9kZSA9IERQX1VTQlBEX0FMVF9NT0RFX05PTkU7Ci0JcGQt PmRwX3VzYnBkLmFsdF9tb2RlX2NmZ19kb25lID0gZmFsc2U7Ci0JcHJfZGVidWcoIlxuIik7Ci0K LQlpZiAocGQtPmRwX2NiICYmIHBkLT5kcF9jYi0+ZGlzY29ubmVjdCkKLQkJcGQtPmRwX2NiLT5k aXNjb25uZWN0KHBkLT5kZXYpOwotfQotCi1zdGF0aWMgaW50IGRwX3VzYnBkX3ZhbGlkYXRlX2Nh bGxiYWNrKHU4IGNtZCwKLQllbnVtIHVzYnBkX3N2ZG1fY21kX3R5cGUgY21kX3R5cGUsIGludCBu dW1fdmRvcykKLXsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChjbWRfdHlwZSA9PSBTVkRNX0NNRF9U WVBFX1JFU1BfTkFLKSB7Ci0JCXByX2VycigiZXJyb3I6IE5BQ0tcbiIpOwotCQlyZXQgPSAtRUlO VkFMOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlpZiAoY21kX3R5cGUgPT0gU1ZETV9DTURfVFlQRV9S RVNQX0JVU1kpIHsKLQkJcHJfZXJyKCJlcnJvcjogQlVTWVxuIik7Ci0JCXJldCA9IC1FQlVTWTsK LQkJZ290byBlbmQ7Ci0JfQotCi0JaWYgKGNtZCA9PSBVU0JQRF9TVkRNX0FUVEVOVElPTikgewot CQlpZiAoY21kX3R5cGUgIT0gU1ZETV9DTURfVFlQRV9JTklUSUFUT1IpIHsKLQkJCXByX2Vycigi ZXJyb3I6IGludmFsaWQgY21kIHR5cGUgZm9yIGF0dGVudGlvblxuIik7Ci0JCQlyZXQgPSAtRUlO VkFMOwotCQkJZ290byBlbmQ7Ci0JCX0KLQotCQlpZiAoIW51bV92ZG9zKSB7Ci0JCQlwcl9lcnIo ImVycm9yOiBubyB2ZG8gcHJvdmlkZWRcbiIpOwotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWdvdG8g ZW5kOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGNtZF90eXBlICE9IFNWRE1fQ01EX1RZUEVfUkVT UF9BQ0spIHsKLQkJCXByX2VycigiZXJyb3I6IGludmFsaWQgY21kIHR5cGVcbiIpOwotCQkJcmV0 ID0gLUVJTlZBTDsKLQkJfQotCX0KLWVuZDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9p ZCBkcF91c2JwZF9yZXNwb25zZV9jYihzdHJ1Y3QgdXNicGRfc3ZpZF9oYW5kbGVyICpoZGxyLCB1 OCBjbWQsCi0JCQkJZW51bSB1c2JwZF9zdmRtX2NtZF90eXBlIGNtZF90eXBlLAotCQkJCWNvbnN0 IHUzMiAqdmRvcywgaW50IG51bV92ZG9zKQotewotCXN0cnVjdCBkcF91c2JwZF9wcml2YXRlICpw ZDsKLQotCXBkID0gY29udGFpbmVyX29mKGhkbHIsIHN0cnVjdCBkcF91c2JwZF9wcml2YXRlLCBz dmlkX2hhbmRsZXIpOwotCi0JcHJfZGVidWcoImNhbGxiYWNrIC0+IGNtZDogJXMsICp2ZG9zID0g MHgleCwgbnVtX3Zkb3MgPSAlZFxuIiwKLQkJCQlkcF91c2JwZF9jbWRfbmFtZShjbWQpLCAqdmRv cywgbnVtX3Zkb3MpOwotCi0JaWYgKGRwX3VzYnBkX3ZhbGlkYXRlX2NhbGxiYWNrKGNtZCwgY21k X3R5cGUsIG51bV92ZG9zKSkgewotCQlwcl9kZWJ1ZygiaW52YWxpZCBjYWxsYmFjayByZWNlaXZl ZFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVVNCUERfU1ZE TV9ESVNDT1ZFUl9NT0RFUzoKLQkJcGQtPnZkbyA9ICp2ZG9zOwotCQlkcF91c2JwZF9nZXRfY2Fw YWJpbGl0aWVzKHBkKTsKLQotCQlwZC0+YWx0X21vZGUgfD0gRFBfVVNCUERfQUxUX01PREVfRElT Q09WRVI7Ci0KLQkJaWYgKHBkLT5jYXAucG9ydCAmIEJJVCgwKSkKLQkJCWRwX3VzYnBkX3NlbmRf ZXZlbnQocGQsIERQX1VTQlBEX0VWVF9FTlRFUik7Ci0JCWJyZWFrOwotCWNhc2UgVVNCUERfU1ZE TV9FTlRFUl9NT0RFOgotCQlwZC0+YWx0X21vZGUgfD0gRFBfVVNCUERfQUxUX01PREVfRU5URVI7 Ci0KLQkJZHBfdXNicGRfc2VuZF9ldmVudChwZCwgRFBfVVNCUERfRVZUX1NUQVRVUyk7Ci0JCWJy ZWFrOwotCWNhc2UgVVNCUERfU1ZETV9BVFRFTlRJT046Ci0JCWlmIChwZC0+ZHBfdXNicGQuZm9y Y2VkX2Rpc2Nvbm5lY3QpCi0JCQlicmVhazsKLQotCQlwZC0+dmRvID0gKnZkb3M7Ci0JCWRwX3Vz YnBkX2dldF9zdGF0dXMocGQpOwotCi0JCWlmIChwZC0+ZHBfY2IgJiYgcGQtPmRwX2NiLT5hdHRl bnRpb24pCi0JCQlwZC0+ZHBfY2ItPmF0dGVudGlvbihwZC0+ZGV2KTsKLQotCQlpZiAoIXBkLT5k cF91c2JwZC5hbHRfbW9kZV9jZmdfZG9uZSkKLQkJCWRwX3VzYnBkX3NlbmRfZXZlbnQocGQsIERQ X1VTQlBEX0VWVF9DT05GSUdVUkUpOwotCQlicmVhazsKLQljYXNlIERQX1VTQlBEX1ZETV9TVEFU VVM6Ci0JCXBkLT52ZG8gPSAqdmRvczsKLQkJZHBfdXNicGRfZ2V0X3N0YXR1cyhwZCk7Ci0KLQkJ aWYgKCEocGQtPmFsdF9tb2RlICYgRFBfVVNCUERfQUxUX01PREVfQ09ORklHVVJFKSkgewotCQkJ cGQtPmFsdF9tb2RlIHw9IERQX1VTQlBEX0FMVF9NT0RFX1NUQVRVUzsKLQotCQkJaWYgKHBkLT5k cF91c2JwZC5wb3J0ICYgQklUKDEpKQotCQkJCWRwX3VzYnBkX3NlbmRfZXZlbnQocGQsIERQX1VT QlBEX0VWVF9DT05GSUdVUkUpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgRFBfVVNCUERfVkRNX0NP TkZJR1VSRToKLQkJcGQtPmFsdF9tb2RlIHw9IERQX1VTQlBEX0FMVF9NT0RFX0NPTkZJR1VSRTsK LQkJcGQtPmRwX3VzYnBkLmFsdF9tb2RlX2NmZ19kb25lID0gdHJ1ZTsKLQkJZHBfdXNicGRfZ2V0 X3N0YXR1cyhwZCk7Ci0KLQkJcGQtPmRwX3VzYnBkLm9yaWVudGF0aW9uID0gdXNicGRfZ2V0X3Bs dWdfb3JpZW50YXRpb24ocGQtPnBkKTsKLQotCQkvKgotCQkgKiBCeSBkZWZhdWx0LCBVU0IgcmVz ZXJ2ZXMgdHdvIGxhbmVzIGZvciBTdXBlciBTcGVlZC4KLQkJICogV2hpY2ggbWVhbnMgRFAgaGFz IHJlbWFpbmluZyB0d28gbGFuZXMgdG8gb3BlcmF0ZSBvbi4KLQkJICogSWYgbXVsdGktZnVuY3Rp b24gaXMgbm90IHN1cHBvcnRlZCwgcmVxdWVzdCBVU0IgdG8KLQkJICogcmVsZWFzZSB0aGUgU3Vw ZXIgU3BlZWQgbGFuZXMgc28gdGhhdCBEUCBjYW4gdXNlCi0JCSAqIGFsbCBmb3VyIGxhbmVzIGlu IGNhc2UgRFBDRCBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IKLQkJICogZm91ciBsYW5lcy4KLQkJICov Ci0JCWlmICghcGQtPmRwX3VzYnBkLm11bHRpX2Z1bmMpCi0JCQlwZC0+c3ZpZF9oYW5kbGVyLnJl cXVlc3RfdXNiX3NzX2xhbmUocGQtPnBkLAotCQkJCSZwZC0+c3ZpZF9oYW5kbGVyKTsKLQotCQlp ZiAocGQtPmRwX2NiICYmIHBkLT5kcF9jYi0+Y29uZmlndXJlKQotCQkJcGQtPmRwX2NiLT5jb25m aWd1cmUocGQtPmRldik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByX2VycigidW5rbm93biBj bWQ6ICVkXG4iLCBjbWQpOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgZHBfdXNicGRf Y29ubmVjdChzdHJ1Y3QgZHBfdXNicGQgKmRwX3VzYnBkLCBib29sIGhwZCkKLXsKLQlpbnQgcmMg PSAwOwotCXN0cnVjdCBkcF91c2JwZF9wcml2YXRlICpwZDsKLQotCWlmICghZHBfdXNicGQpIHsK LQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVy cm9yOwotCX0KLQotCXBkID0gY29udGFpbmVyX29mKGRwX3VzYnBkLCBzdHJ1Y3QgZHBfdXNicGRf cHJpdmF0ZSwgZHBfdXNicGQpOwotCi0JZHBfdXNicGQtPmhwZF9oaWdoID0gaHBkOwotCWRwX3Vz YnBkLT5mb3JjZWRfZGlzY29ubmVjdCA9ICFocGQ7Ci0KLQlpZiAoaHBkKQotCQlwZC0+ZHBfY2It PmNvbmZpZ3VyZShwZC0+ZGV2KTsKLQllbHNlCi0JCXBkLT5kcF9jYi0+ZGlzY29ubmVjdChwZC0+ ZGV2KTsKLQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdHJ1Y3QgZHBfdXNicGQgKmRwX3Vz YnBkX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkcF91c2JwZF9jYiAqY2IpCi17Ci0J aW50IHJjID0gMDsKLQljb25zdCBjaGFyICpwZF9waGFuZGxlID0gInFjb20sZHAtdXNicGQtZGV0 ZWN0aW9uIjsKLQlzdHJ1Y3QgdXNicGQgKnBkID0gTlVMTDsKLQlzdHJ1Y3QgZHBfdXNicGRfcHJp dmF0ZSAqdXNicGQ7Ci0Jc3RydWN0IGRwX3VzYnBkICpkcF91c2JwZDsKLQlzdHJ1Y3QgdXNicGRf c3ZpZF9oYW5kbGVyIHN2aWRfaGFuZGxlciA9IHsKLQkJLnN2aWQJCT0gVVNCX0NfRFBfU0lELAot CQkudmRtX3JlY2VpdmVkCT0gTlVMTCwKLQkJLmNvbm5lY3QJPSAmZHBfdXNicGRfY29ubmVjdF9j YiwKLQkJLnN2ZG1fcmVjZWl2ZWQJPSAmZHBfdXNicGRfcmVzcG9uc2VfY2IsCi0JCS5kaXNjb25u ZWN0CT0gJmRwX3VzYnBkX2Rpc2Nvbm5lY3RfY2IsCi0JfTsKLQotCWlmICghY2IpIHsKLQkJcHJf ZXJyKCJpbnZhbGlkIGNiIGRhdGFcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7 Ci0JfQotCi0JcGQgPSBkZXZtX3VzYnBkX2dldF9ieV9waGFuZGxlKGRldiwgcGRfcGhhbmRsZSk7 Ci0JaWYgKElTX0VSUihwZCkpIHsKLQkJcHJfZXJyKCJ1c2JwZCBwaGFuZGxlIGZhaWxlZCAoJWxk KVxuIiwgUFRSX0VSUihwZCkpOwotCQlyYyA9IFBUUl9FUlIocGQpOwotCQlnb3RvIGVycm9yOwot CX0KLQotCXVzYnBkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCp1c2JwZCksIEdGUF9LRVJO RUwpOwotCWlmICghdXNicGQpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yOwotCX0K LQotCXVzYnBkLT5kZXYgPSBkZXY7Ci0JdXNicGQtPnBkID0gcGQ7Ci0JdXNicGQtPnN2aWRfaGFu ZGxlciA9IHN2aWRfaGFuZGxlcjsKLQl1c2JwZC0+ZHBfY2IgPSBjYjsKLQotCXJjID0gdXNicGRf cmVnaXN0ZXJfc3ZpZChwZCwgJnVzYnBkLT5zdmlkX2hhbmRsZXIpOwotCWlmIChyYykgewotCQlw cl9lcnIoInBkIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwotCQlyYyA9IC1FTk9ERVY7Ci0JCWRl dm1fa2ZyZWUoZGV2LCB1c2JwZCk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZHBfdXNicGQgPSAm dXNicGQtPmRwX3VzYnBkOwotCWRwX3VzYnBkLT5jb25uZWN0ID0gZHBfdXNicGRfY29ubmVjdDsK LQotCXJldHVybiBkcF91c2JwZDsKLWVycm9yOgotCXJldHVybiBFUlJfUFRSKHJjKTsKLX0KLQot dm9pZCBkcF91c2JwZF9wdXQoc3RydWN0IGRwX3VzYnBkICpkcF91c2JwZCkKLXsKLQlzdHJ1Y3Qg ZHBfdXNicGRfcHJpdmF0ZSAqdXNicGQ7Ci0KLQlpZiAoIWRwX3VzYnBkKQotCQlyZXR1cm47Ci0K LQl1c2JwZCA9IGNvbnRhaW5lcl9vZihkcF91c2JwZCwgc3RydWN0IGRwX3VzYnBkX3ByaXZhdGUs IGRwX3VzYnBkKTsKLQotCXVzYnBkX3VucmVnaXN0ZXJfc3ZpZCh1c2JwZC0+cGQsICZ1c2JwZC0+ c3ZpZF9oYW5kbGVyKTsKLQotCWRldm1fa2ZyZWUodXNicGQtPmRldiwgdXNicGQpOwotfQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF91c2JwZC5oIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kcC9kcF91c2JwZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDk1 M2IzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfdXNicGQuaAorKysg L2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEyLTIw MTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu Ci0gKgotICovCi0KLSNpZm5kZWYgX0RQX1VTQlBEX0hfCi0jZGVmaW5lIF9EUF9VU0JQRF9IXwot Ci0jaW5jbHVkZSA8bGludXgvdXNiL3VzYnBkLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5o PgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotCi0vKioKLSAqIGVudW0gZHBfdXNicGRfcG9y dCAtIHVzYi9kcCBwb3J0IHR5cGUKLSAqIEBEUF9VU0JQRF9QT1JUX05PTkU6IHBvcnQgbm90IGNv bmZpZ3VyZWQKLSAqIEBEUF9VU0JQRF9QT1JUX1VGUF9EOiBVcHN0cmVhbSBGYWNpbmcgUG9ydCAt IERpc3BsYXlQb3J0Ci0gKiBARFBfVVNCUERfUE9SVF9ERlBfRDogRG93bnN0cmVhbSBGYWNpbmcg UG9ydCAtIERpc3BsYXlQb3J0Ci0gKiBARFBfVVNCUERfUE9SVF9EX1VGUF9EOiBCb3RoIFVGUCAm IERGUCAtIERpc3BsYXlQb3J0Ci0gKi8KLQotZW51bSBkcF91c2JwZF9wb3J0IHsKLQlEUF9VU0JQ RF9QT1JUX05PTkUsCi0JRFBfVVNCUERfUE9SVF9VRlBfRCwKLQlEUF9VU0JQRF9QT1JUX0RGUF9E LAotCURQX1VTQlBEX1BPUlRfRF9VRlBfRCwKLX07Ci0KLS8qKgotICogc3RydWN0IGRwX3VzYnBk IC0gRGlzcGxheVBvcnQgc3RhdHVzCi0gKgotICogQHBvcnQ6IHBvcnQgY29uZmlndXJlZAotICog b3JpZW50YXRpb246IHBsdWcgb3JpZW50YXRpb24gY29uZmlndXJhdGlvbgotICogQGxvd19wb3df c3Q6IGxvdyBwb3dlciBzdGF0ZQotICogQGFkYXB0b3JfZHBfZW46IGFkYXB0b3IgZnVuY3Rpb25h bGl0eSBlbmFibGVkCi0gKiBAbXVsdGlfZnVuYzogbXVsdGktZnVuY3Rpb24gcHJlZmVycmVkCi0g KiBAdXNiX2NvbmZpZ19yZXE6IHJlcXVlc3QgdG8gc3dpdGNoIHRvIHVzYgotICogQGV4aXRfZHBf bW9kZTogcmVxdWVzdCBleGl0IGZyb20gZGlzcGxheXBvcnQgbW9kZQotICogQGhwZF9oaWdoOiBI b3QgUGx1ZyBEZXRlY3Qgc2lnbmFsIGlzIGhpZ2guCi0gKiBAaHBkX2lycTogQ2hhbmdlIGluIHRo ZSBzdGF0dXMgc2luY2UgbGFzdCBtZXNzYWdlCi0gKiBAYWx0X21vZGVfY2ZnX2RvbmU6IGJvb2wg dG8gc3BlY2lmeSBhbHQgbW9kZSBzdGF0dXMKLSAqIEBkZWJ1Z19lbjogYm9vbCB0byBzcGVjaWZ5 IGRlYnVnIG1vZGUKLSAqIEBjb25uZWN0OiBzaW11bGF0ZSBkaXNjb25uZWN0IG9yIGNvbm5lY3Qg Zm9yIGRlYnVnIG1vZGUKLSAqLwotc3RydWN0IGRwX3VzYnBkIHsKLQllbnVtIGRwX3VzYnBkX3Bv cnQgcG9ydDsKLQllbnVtIHBsdWdfb3JpZW50YXRpb24gb3JpZW50YXRpb247Ci0JYm9vbCBsb3df cG93X3N0OwotCWJvb2wgYWRhcHRvcl9kcF9lbjsKLQlib29sIG11bHRpX2Z1bmM7Ci0JYm9vbCB1 c2JfY29uZmlnX3JlcTsKLQlib29sIGV4aXRfZHBfbW9kZTsKLQlib29sIGhwZF9oaWdoOwotCWJv b2wgaHBkX2lycTsKLQlib29sIGFsdF9tb2RlX2NmZ19kb25lOwotCWJvb2wgZGVidWdfZW47Ci0J Ym9vbCBmb3JjZWRfZGlzY29ubmVjdDsKLQotCWludCAoKmNvbm5lY3QpKHN0cnVjdCBkcF91c2Jw ZCAqZHBfdXNicGQsIGJvb2wgaHBkKTsKLX07Ci0KLS8qKgotICogc3RydWN0IGRwX3VzYnBkX2Ni IC0gY2FsbGJhY2sgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQKLSAqCi0gKiBAY29u ZmlndXJlOiBjYWxsZWQgYnkgdXNicGQgbW9kdWxlIHdoZW4gUEQgY29tbXVuaWNhdGlvbiBoYXMK LSAqIGJlZW4gY29tcGxldGVkIGFuZCB0aGUgdXNiIHBlcmlwaGVyYWwgaGFzIGJlZW4gY29uZmln dXJlZCBvbgotICogZHAgbW9kZS4KLSAqIEBkaXNjb25uZWN0OiBub3RpZnkgdGhlIGNhYmxlIGRp c2Nvbm5lY3QgaXNzdWVkIGJ5IHVzYi4KLSAqIEBhdHRlbnRpb246IG5vdGlmeSBhbnkgYXR0ZW50 aW9uIG1lc3NhZ2UgaXNzdWVkIGJ5IHVzYi4KLSAqLwotc3RydWN0IGRwX3VzYnBkX2NiIHsKLQlp bnQgKCpjb25maWd1cmUpKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0JaW50ICgqZGlzY29ubmVjdCko c3RydWN0IGRldmljZSAqZGV2KTsKLQlpbnQgKCphdHRlbnRpb24pKHN0cnVjdCBkZXZpY2UgKmRl dik7Ci19OwotCi0vKioKLSAqIGRwX3VzYnBkX2dldCgpIC0gc2V0dXAgdXNicGQgbW9kdWxlCi0g KgotICogQGRldjogZGV2aWNlIGluc3RhbmNlIG9mIHRoZSBjYWxsZXIKLSAqIEBjYjogc3RydWN0 IGNvbnRhaW5pbmcgY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlcnMuCi0gKgotICogVGhpcyBmdW5j dGlvbiBhbGxvd3MgdGhlIGNsaWVudCB0byBpbml0aWFsaXplIHRoZSB1c2JwZAotICogbW9kdWxl LiBUaGUgbW9kdWxlIHdpbGwgY29tbXVuaWNhdGUgd2l0aCB1c2IgZHJpdmVyIGFuZAotICogaGFu ZGxlcyB0aGUgcG93ZXIgZGVsaXZlcnkgKFBEKSBjb21tdW5pY2F0aW9uIHdpdGggdGhlCi0gKiBz aW5rL3VzYiBkZXZpY2UuIFRoaXMgbW9kdWxlIHdpbGwgbm90aWZ5IHRoZSBjbGllbnQgdXNpbmcK LSAqIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgYWJvdXQgdGhlIGNvbm5lY3Rpb24gYW5kIHN0YXR1 cy4KLSAqLwotc3RydWN0IGRwX3VzYnBkICpkcF91c2JwZF9nZXQoc3RydWN0IGRldmljZSAqZGV2 LCBzdHJ1Y3QgZHBfdXNicGRfY2IgKmNiKTsKLQotdm9pZCBkcF91c2JwZF9wdXQoc3RydWN0IGRw X3VzYnBkICpwZCk7Ci0jZW5kaWYgLyogX0RQX1VTQlBEX0hfICovCmRpZmYgLS1naXQgYS9pbmNs dWRlL2RybS9kcm1fZHBfaGVscGVyLmggYi9pbmNsdWRlL2RybS9kcm1fZHBfaGVscGVyLmgKaW5k ZXggYjMwMTIwZS4uODRhMTI1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2RwX2hlbHBl ci5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9kcF9oZWxwZXIuaApAQCAtMzM1LDcgKzMzNSw2IEBA CiAjIGRlZmluZSBEUF9MSU5LX0JXXzFfNjIJCSAgICAweDA2CiAjIGRlZmluZSBEUF9MSU5LX0JX XzJfNwkJCSAgICAweDBhCiAjIGRlZmluZSBEUF9MSU5LX0JXXzVfNAkJCSAgICAweDE0ICAgIC8q IDEuMiAqLwotIyBkZWZpbmUgRFBfTElOS19CV184XzEJCQkgICAgMHgxZQogCiAjZGVmaW5lIERQ X0xBTkVfQ09VTlRfU0VUCSAgICAgICAgICAgIDB4MTAxCiAjIGRlZmluZSBEUF9MQU5FX0NPVU5U X01BU0sJCSAgICAweDBmCkBAIC01MjAsOCArNTE5LDYgQEAKICMgZGVmaW5lIERQX1RFU1RfTElO S19FRElEX1JFQUQJCSAgICAoMSA8PCAyKQogIyBkZWZpbmUgRFBfVEVTVF9MSU5LX1BIWV9URVNU X1BBVFRFUk4JICAgICgxIDw8IDMpIC8qIERQQ0QgPj0gMS4xICovCiAjIGRlZmluZSBEUF9URVNU X0xJTktfRkFVWF9QQVRURVJOCSAgICAoMSA8PCA0KSAvKiBEUENEID49IDEuMiAqLwotIyBkZWZp bmUgRFBfVEVTVF9MSU5LX0FVRElPX1BBVFRFUk4gICAgICgxIDw8IDUpCi0jIGRlZmluZSBEUF9U RVNUX0xJTktfQVVESU9fRElTQUJMRURfVklERU8gKDEgPDwgNikKIAogI2RlZmluZSBEUF9URVNU X0xJTktfUkFURQkJICAgIDB4MjE5CiAjIGRlZmluZSBEUF9MSU5LX1JBVEVfMTYyCQkgICAgKDB4 NikKQEAgLTYxMCwxMyArNjA3LDYgQEAKICNkZWZpbmUJRFBfVEVTVF84MEJJVF9DVVNUT01fUEFU VEVSTl83MV82NCAgMHgyNTgKICNkZWZpbmUJRFBfVEVTVF84MEJJVF9DVVNUT01fUEFUVEVSTl83 OV83MiAgMHgyNTkKIAotI2RlZmluZSBEUF9URVNUX1BIWV9QQVRURVJOX05PTkUJCQkweDAKLSNk ZWZpbmUgRFBfVEVTVF9QSFlfUEFUVEVSTl9EMTBfMl9OT19TQ1JBTUJMSU5HCTB4MQotI2RlZmlu ZSBEUF9URVNUX1BIWV9QQVRURVJOX1NZTUJPTF9FUlJfTUVBU1VSRU1FTlRfQ05UIDB4MgotI2Rl ZmluZSBEUF9URVNUX1BIWV9QQVRURVJOX1BSQlM3CQkJMHgzCi0jZGVmaW5lIERQX1RFU1RfUEhZ X1BBVFRFUk5fODBfQklUX0NVU1RPTV9QQVRURVJOCTB4NAotI2RlZmluZSBEUF9URVNUX1BIWV9Q QVRURVJOX0hCUjJfQ1RTX0VZRV9QQVRURVJOCTB4NQotCiAjZGVmaW5lIERQX1RFU1RfUkVTUE9O U0UJCSAgICAweDI2MAogIyBkZWZpbmUgRFBfVEVTVF9BQ0sJCQkgICAgKDEgPDwgMCkKICMgZGVm aW5lIERQX1RFU1RfTkFLCQkJICAgICgxIDw8IDEpCkBAIC02MjcsMTkgKzYxNyw2IEBACiAjZGVm aW5lIERQX1RFU1RfU0lOSwkJCSAgICAweDI3MAogIyBkZWZpbmUgRFBfVEVTVF9TSU5LX1NUQVJU CQkgICAgKDEgPDwgMCkKIAotI2RlZmluZSBEUF9URVNUX0FVRElPX01PREUJCSAgICAweDI3MQot Ci0jZGVmaW5lIERQX1RFU1RfQVVESU9fUEFUVEVSTl9UWVBFCSAgICAweDI3MgotCi0jZGVmaW5l IERQX1RFU1RfQVVESU9fUEVSSU9EX0NIMQkgICAgMHgyNzMKLSNkZWZpbmUgRFBfVEVTVF9BVURJ T19QRVJJT0RfQ0gyCSAgICAweDI3NAotI2RlZmluZSBEUF9URVNUX0FVRElPX1BFUklPRF9DSDMJ ICAgIDB4Mjc1Ci0jZGVmaW5lIERQX1RFU1RfQVVESU9fUEVSSU9EX0NINAkgICAgMHgyNzYKLSNk ZWZpbmUgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0g1CSAgICAweDI3NwotI2RlZmluZSBEUF9URVNU X0FVRElPX1BFUklPRF9DSDYJICAgIDB4Mjc4Ci0jZGVmaW5lIERQX1RFU1RfQVVESU9fUEVSSU9E X0NINwkgICAgMHgyNzkKLSNkZWZpbmUgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0g4CSAgICAweDI3 QQotCiAjZGVmaW5lIERQX1BBWUxPQURfVEFCTEVfVVBEQVRFX1NUQVRVUyAgICAgIDB4MmMwICAg LyogMS4yIE1TVCAqLwogIyBkZWZpbmUgRFBfUEFZTE9BRF9UQUJMRV9VUERBVEVEICAgICAgICAg ICAoMSA8PCAwKQogIyBkZWZpbmUgRFBfUEFZTE9BRF9BQ1RfSEFORExFRCAgICAgICAgICAgICAo MSA8PCAxKQotLSAKVGhlIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVt YmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBGb3J1bSwKYSBMaW51eCBGb3VuZGF0aW9uIENvbGxhYm9y YXRpdmUgUHJvamVjdAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRy ZW5vCg==