From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 673C9C4363C for ; Sat, 3 Oct 2020 02:17:36 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1ED1F20719 for ; Sat, 3 Oct 2020 02:17:35 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1ED1F20719 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 331E06EA09; Sat, 3 Oct 2020 02:17:35 +0000 (UTC) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 959966EA09 for ; Sat, 3 Oct 2020 02:17:34 +0000 (UTC) IronPort-SDR: d0p4WWnDhYVmedNvzojws4F1zcaS09KZiOKykLBksdlWVsVDg7RL0L8vEMkatO7rRnIX8dJ20J kr+jTMRArIKA== X-IronPort-AV: E=McAfee;i="6000,8403,9762"; a="247871950" X-IronPort-AV: E=Sophos;i="5.77,330,1596524400"; d="scan'208";a="247871950" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Oct 2020 19:17:32 -0700 IronPort-SDR: JbIUavfT0P6ABWheyg0Ukhzlt/VgWPNiRJMrO/XePZX80jQbspu7vUZ6j3U5wXn1YCJ3/lP3Tu v+A+4fcPpSAQ== X-IronPort-AV: E=Sophos;i="5.77,330,1596524400"; d="scan'208";a="340197147" Received: from cshinn-mobl1.amr.corp.intel.com (HELO achrisan-DESK2.amr.corp.intel.com) ([10.255.91.49]) by fmsmga004-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-SHA; 02 Oct 2020 19:17:32 -0700 From: Anitha Chrisanthus To: dri-devel@lists.freedesktop.org, anitha.chrisanthus@intel.com, bob.j.paauwe@intel.com, edmund.j.dea@intel.com Subject: [PATCH v8 3/4] drm/kmb: Mipi DSI part of the display driver Date: Fri, 2 Oct 2020 19:17:01 -0700 Message-Id: <1601691422-12851-4-git-send-email-anitha.chrisanthus@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1601691422-12851-1-git-send-email-anitha.chrisanthus@intel.com> References: <1601691422-12851-1-git-send-email-anitha.chrisanthus@intel.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: daniel.vetter@intel.com, sam@ravnborg.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" SW5pdGlhbGl6ZXMgTWlwaSBEU0kgYW5kIHNldHMgdXAgY29ubmVjdHMgdG8gQURWIGJyaWRnZQoK djI6IHJlbW92ZWQgbGljZW5zZSB0ZXh0CiAgICB1cGNsYXNzZWQgZGV2X3ByaXZhdGUsIHJlbW92 ZWQgSEFWRV9JUlEuIChTYW0pCgp2MzogU3F1YXNoZWQgYWxsIDU5IGNvbW1pdHMgdG8gb25lCgp2 NDogcmV2aWV3IGNoYW5nZXMgZnJvbSBTYW0gUmF2bmJvcmcKCXJlbmFtZWQgZGV2X3AgdG8ga21i Cgp2NTogY29ycmVjdGVkIHNwZWxsaW5ncwp2NjogY29ycmVjdGVkIGNoZWNrcGF0Y2ggd2Fybmlu Z3MKdjc6IHJldmlldyBjaGFuZ2VzIFNhbSBSYXZuYm9yZyBhbmQgVGhvbWFzIFppbW1lcm1hbgoJ cmVtb3ZlZCB1bm5lY2Vzc2FyeSBsb2dzIGFuZCBkZWZpbmVzIGFuZCBpZmRlZiBjb2RlcyAoU2Ft KQoJc3BsaXQgZHBoeV9pbml0X3NlcXVlbmNlIHNtYWxsZXIgKFNhbSkKCXJlbW92ZWQgcmVkdW5k YW50IGNoZWNrcyBpbiBrbWJfZHNpIChTYW0pCgljaGFuZ2VkIGttYl9kc2lfaW5pdCB0byBkcm1f YnJpZGdlX2Nvbm5lY3Rvcl9pbml0IGFuZAoJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlciB0 byBicmlkZ2UncyBjb25uZWN0b3IgKFNhbSkKdjg6IGNhbGwgZHJtX2JyaWRnZV9hdHRhY2ggd2l0 aCBEUk1fQlJJREdFX0FUVEFDSF9OT19DT05ORUNUT1IKCkNjOiBTYW0gUmF2bmJvcmcgPHNhbUBy YXZuYm9yZy5vcmc+ClNpZ25lZC1vZmYtYnk6IEFuaXRoYSBDaHJpc2FudGh1cyA8YW5pdGhhLmNo cmlzYW50aHVzQGludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IEJvYiBQYWF1d2UgPGJvYi5qLnBhYXV3 ZUBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHNpLmMgfCAxNTI0ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0v a21iL2ttYl9kc2kuaCB8ICAzNTAgKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxODc0IGlu c2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0va21iL2ttYl9k c2kuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9rbWIva21iX2RzaS5oCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHNpLmMgYi9kcml2ZXJzL2dwdS9k cm0va21iL2ttYl9kc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDlm MWNjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHNpLmMKQEAg LTAsMCArMSwxNTI0IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5 CisvKgorICogQ29weXJpZ2h0IMKpIDIwMTktMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisK KyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIu aD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4K KworI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1f YnJpZGdlLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9icmlkZ2VfY29ubmVjdG9yLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgorI2luY2x1ZGUgPGRybS9kcm1fcHJpbnQuaD4K KyNpbmNsdWRlIDxkcm0vZHJtX3Byb2JlX2hlbHBlci5oPgorCisjaW5jbHVkZSAia21iX2Rydi5o IgorI2luY2x1ZGUgImttYl9kc2kuaCIKKyNpbmNsdWRlICJrbWJfcmVncy5oIgorCitzdGF0aWMg c3RydWN0IG1pcGlfZHNpX2hvc3QgKmRzaV9ob3N0Oworc3RhdGljIHN0cnVjdCBtaXBpX2RzaV9k ZXZpY2UgKmRzaV9kZXZpY2U7CisKKy8qIERlZmF1bHQgc2V0dGluZyBpcyAxMDgwcCwgNCBsYW5l cyAqLworI2RlZmluZSBJTUdfSEVJR0hUX0xJTkVTICAxMDgwCisjZGVmaW5lIElNR19XSURUSF9Q WCAgICAgIDE5MjAKKyNkZWZpbmUgTUlQSV9UWF9BQ1RJVkVfTEFORVMgNAorCitzdHJ1Y3QgbWlw aV90eF9mcmFtZV9zZWN0aW9uX2NmZyBtaXBpX3R4X2ZyYW1lMF9zZWN0X2NmZyA9IHsKKwkud2lk dGhfcGl4ZWxzID0gSU1HX1dJRFRIX1BYLAorCS5oZWlnaHRfbGluZXMgPSBJTUdfSEVJR0hUX0xJ TkVTLAorCS5kYXRhX3R5cGUgPSBEU0lfTFBfRFRfUFBTX1JHQjg4OF8yNEIsCisJLmRhdGFfbW9k ZSA9IE1JUElfREFUQV9NT0RFMSwKKwkuZG1hX3BhY2tlZCA9IDAKK307CisKK3N0cnVjdCBtaXBp X3R4X2ZyYW1lX2NmZyBtaXBpdHhfZnJhbWUwX2NmZyA9IHsKKwkuc2VjdGlvbnNbMF0gPSAmbWlw aV90eF9mcmFtZTBfc2VjdF9jZmcsCisJLnNlY3Rpb25zWzFdID0gTlVMTCwKKwkuc2VjdGlvbnNb Ml0gPSBOVUxMLAorCS5zZWN0aW9uc1szXSA9IE5VTEwsCisJLnZzeW5jX3dpZHRoID0gNSwKKwku dl9iYWNrcG9yY2ggPSAzNiwKKwkudl9mcm9udHBvcmNoID0gNCwKKwkuaHN5bmNfd2lkdGggPSA0 NCwKKwkuaF9iYWNrcG9yY2ggPSAxNDgsCisJLmhfZnJvbnRwb3JjaCA9IDg4Cit9OworCitzdHJ1 Y3QgbWlwaV90eF9kc2lfY2ZnIG1pcGl0eF9kc2lfY2ZnID0geworCS5oZnBfYmxhbmtfZW4gPSAw LAorCS5lb3RwX2VuID0gMCwKKwkubHBtX2xhc3RfdmZwX2xpbmUgPSAwLAorCS5scG1fZmlyc3Rf dnNhX2xpbmUgPSAwLAorCS5zeW5jX3B1bHNlX2V2ZW50biA9IERTSV9WSURFT19NT0RFX05PX0JV UlNUX0VWRU5ULAorCS5oZnBfYmxhbmtpbmcgPSBTRU5EX0JMQU5LX1BBQ0tFVCwKKwkuaGJwX2Js YW5raW5nID0gU0VORF9CTEFOS19QQUNLRVQsCisJLmhzYV9ibGFua2luZyA9IFNFTkRfQkxBTktf UEFDS0VULAorCS52X2JsYW5raW5nID0gU0VORF9CTEFOS19QQUNLRVQsCit9OworCitzdHJ1Y3Qg bWlwaV9jdHJsX2NmZyBtaXBpX3R4X2luaXRfY2ZnID0geworCS5hY3RpdmVfbGFuZXMgPSBNSVBJ X1RYX0FDVElWRV9MQU5FUywKKwkubGFuZV9yYXRlX21icHMgPSBNSVBJX1RYX0xBTkVfREFUQV9S QVRFX01CUFMsCisJLnJlZl9jbGtfa2h6ID0gTUlQSV9UWF9SRUZfQ0xLX0tIWiwKKwkuY2ZnX2Ns a19raHogPSBNSVBJX1RYX0NGR19DTEtfS0haLAorCS50eF9jdHJsX2NmZyA9IHsKKwkJCS5mcmFt ZXNbMF0gPSAmbWlwaXR4X2ZyYW1lMF9jZmcsCisJCQkuZnJhbWVzWzFdID0gTlVMTCwKKwkJCS5m cmFtZXNbMl0gPSBOVUxMLAorCQkJLmZyYW1lc1szXSA9IE5VTEwsCisJCQkudHhfZHNpX2NmZyA9 ICZtaXBpdHhfZHNpX2NmZywKKwkJCS5saW5lX3N5bmNfcGt0X2VuID0gMCwKKwkJCS5saW5lX2Nv dW50ZXJfYWN0aXZlID0gMCwKKwkJCS5mcmFtZV9jb3VudGVyX2FjdGl2ZSA9IDAsCisJCQkudHhf YWx3YXlzX3VzZV9oYWN0ID0gMSwKKwkJCS50eF9oYWN0X3dhaXRfc3RvcCA9IDEsCisJCQl9Cit9 OworCitzdHJ1Y3QgIG1pcGlfaHNfZnJlcV9yYW5nZV9jZmcgeworCXUxNiBkZWZhdWx0X2JpdF9y YXRlX21icHM7CisJdTggaHNmcmVxcmFuZ2VfY29kZTsKK307CisKK3N0cnVjdCB2Y29fcGFyYW1z IHsKKwl1MzIgZnJlcTsKKwl1MzIgcmFuZ2U7CisJdTMyIGRpdmlkZXI7Cit9OworCitzdGF0aWMg c3RydWN0IHZjb19wYXJhbXMgdmNvX3RhYmxlW10gPSB7CisJezUyLCAweDNmLCA4fSwKKwl7ODAs IDB4MzksIDh9LAorCXsxMDUsIDB4MmYsIDR9LAorCXsxNjAsIDB4MjksIDR9LAorCXsyMTAsIDB4 MWYsIDJ9LAorCXszMjAsIDB4MTksIDJ9LAorCXs0MjAsIDB4MGYsIDF9LAorCXs2MzAsIDB4MDks IDF9LAorCXsxMTAwLCAweDAzLCAxfSwKKwl7MHhmZmZmLCAweDAxLCAxfSwKK307CisKK3N0YXRp YyBzdHJ1Y3QgbWlwaV9oc19mcmVxX3JhbmdlX2NmZworbWlwaV9oc19mcmVxX3JhbmdlW01JUElf RFBIWV9ERUZBVUxUX0JJVF9SQVRFU10gPSB7CisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSA4 MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDAwfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9 IDkwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MTB9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBz ID0gMTAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MjB9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9t YnBzID0gMTEwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MzB9LAorCXsuZGVmYXVsdF9iaXRfcmF0 ZV9tYnBzID0gMTIwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MDF9LAorCXsuZGVmYXVsdF9iaXRf cmF0ZV9tYnBzID0gMTMwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MTF9LAorCXsuZGVmYXVsdF9i aXRfcmF0ZV9tYnBzID0gMTQwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MjF9LAorCXsuZGVmYXVs dF9iaXRfcmF0ZV9tYnBzID0gMTUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MzF9LAorCXsuZGVm YXVsdF9iaXRfcmF0ZV9tYnBzID0gMTYwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MDJ9LAorCXsu ZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTcwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MTJ9LAor CXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTgwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MjJ9 LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTkwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4 MzJ9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMjA1LCAuaHNmcmVxcmFuZ2VfY29kZSA9 IDB4MDN9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMjIwLCAuaHNmcmVxcmFuZ2VfY29k ZSA9IDB4MTN9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMjM1LCAuaHNmcmVxcmFuZ2Vf Y29kZSA9IDB4MjN9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMjUwLCAuaHNmcmVxcmFu Z2VfY29kZSA9IDB4MzN9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMjc1LCAuaHNmcmVx cmFuZ2VfY29kZSA9IDB4MDR9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMzAwLCAuaHNm cmVxcmFuZ2VfY29kZSA9IDB4MTR9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMzI1LCAu aHNmcmVxcmFuZ2VfY29kZSA9IDB4MjV9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMzUw LCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MzV9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0g NDAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MDV9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBz ID0gNDUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MTZ9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9t YnBzID0gNTAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MjZ9LAorCXsuZGVmYXVsdF9iaXRfcmF0 ZV9tYnBzID0gNTUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4Mzd9LAorCXsuZGVmYXVsdF9iaXRf cmF0ZV9tYnBzID0gNjAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MDd9LAorCXsuZGVmYXVsdF9i aXRfcmF0ZV9tYnBzID0gNjUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MTh9LAorCXsuZGVmYXVs dF9iaXRfcmF0ZV9tYnBzID0gNzAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4Mjh9LAorCXsuZGVm YXVsdF9iaXRfcmF0ZV9tYnBzID0gNzUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4Mzl9LAorCXsu ZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gODAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MDl9LAor CXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gODUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MTl9 LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gOTAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4 Mjl9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTAwMCwgLmhzZnJlcXJhbmdlX2NvZGUg PSAweDBBfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDEwNTAsIC5oc2ZyZXFyYW5nZV9j b2RlID0gMHgxQX0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAxMTAwLCAuaHNmcmVxcmFu Z2VfY29kZSA9IDB4MkF9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTE1MCwgLmhzZnJl cXJhbmdlX2NvZGUgPSAweDNCfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDEyMDAsIC5o c2ZyZXFyYW5nZV9jb2RlID0gMHgwQn0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAxMjUw LCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MUJ9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0g MTMwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDJCfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJw cyA9IDEzNTAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgzQ30sCisJey5kZWZhdWx0X2JpdF9yYXRl X21icHMgPSAxNDAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MEN9LAorCXsuZGVmYXVsdF9iaXRf cmF0ZV9tYnBzID0gMTQ1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDFDfSwKKwl7LmRlZmF1bHRf Yml0X3JhdGVfbWJwcyA9IDE1MDAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgyQ30sCisJey5kZWZh dWx0X2JpdF9yYXRlX21icHMgPSAxNTUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4M0R9LAorCXsu ZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTYwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDBEfSwK Kwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE2NTAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgx RH0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAxNzAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9 IDB4MkV9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTc1MCwgLmhzZnJlcXJhbmdlX2Nv ZGUgPSAweDNFfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE4MDAsIC5oc2ZyZXFyYW5n ZV9jb2RlID0gMHgwRX0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAxODUwLCAuaHNmcmVx cmFuZ2VfY29kZSA9IDB4MUV9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTkwMCwgLmhz ZnJlcXJhbmdlX2NvZGUgPSAweDJGfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE5NTAs IC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgzRn0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAy MDAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MEZ9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBz ID0gMjA1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDQwfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVf bWJwcyA9IDIxMDAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHg0MX0sCisJey5kZWZhdWx0X2JpdF9y YXRlX21icHMgPSAyMTUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4NDJ9LAorCXsuZGVmYXVsdF9i aXRfcmF0ZV9tYnBzID0gMjIwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDQzfSwKKwl7LmRlZmF1 bHRfYml0X3JhdGVfbWJwcyA9IDIyNTAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHg0NH0sCisJey5k ZWZhdWx0X2JpdF9yYXRlX21icHMgPSAyMzAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4NDV9LAor CXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMjM1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDQ2 fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDI0MDAsIC5oc2ZyZXFyYW5nZV9jb2RlID0g MHg0N30sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAyNDUwLCAuaHNmcmVxcmFuZ2VfY29k ZSA9IDB4NDh9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMjUwMCwgLmhzZnJlcXJhbmdl X2NvZGUgPSAweDQ5fQorfTsKKworc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzCitrbWJfZHNp X21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJICAgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNv bm5lY3Rvci0+ZGV2OworCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKm1vZGVfY29uZmlnID0gJmRl di0+bW9kZV9jb25maWc7CisKKwlpZiAobW9kZS0+aGRpc3BsYXkgPCBtb2RlX2NvbmZpZy0+bWlu X3dpZHRoIHx8CisJICAgIG1vZGUtPmhkaXNwbGF5ID4gbW9kZV9jb25maWctPm1heF93aWR0aCkK KwkJcmV0dXJuIE1PREVfQkFEX0hWQUxVRTsKKworCWlmIChtb2RlLT52ZGlzcGxheSA8IG1vZGVf Y29uZmlnLT5taW5faGVpZ2h0IHx8CisJICAgIG1vZGUtPnZkaXNwbGF5ID4gbW9kZV9jb25maWct Pm1heF9oZWlnaHQpCisJCXJldHVybiBNT0RFX0JBRF9WVkFMVUU7CisKKwlyZXR1cm4gTU9ERV9P SzsKK30KKworc3RhdGljIGludCBrbWJfZHNpX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yKQoreworCWludCBudW1fbW9kZXMgPSAwOworCisJbnVtX21vZGVzID0gZHJt X2FkZF9tb2Rlc19ub2VkaWQoY29ubmVjdG9yLAorCQkJCQkgY29ubmVjdG9yLT5kZXYtPm1vZGVf Y29uZmlnLm1heF93aWR0aCwKKwkJCSBjb25uZWN0b3ItPmRldi0+bW9kZV9jb25maWcubWF4X2hl aWdodCk7CisKKwlEUk1fSU5GTygid2lkdGg9JWQgaGVpZ2h0PSVkXG4iLAorCQkgY29ubmVjdG9y LT5kZXYtPm1vZGVfY29uZmlnLm1heF93aWR0aCwKKwkJIGNvbm5lY3Rvci0+ZGV2LT5tb2RlX2Nv bmZpZy5tYXhfaGVpZ2h0KTsKKwlEUk1fSU5GTygibnVtIG1vZGVzPSVkXG4iLCBudW1fbW9kZXMp OworCisJcmV0dXJuIG51bV9tb2RlczsKK30KKwordm9pZCBrbWJfZHNpX2hvc3RfdW5yZWdpc3Rl cih2b2lkKQoreworCW1pcGlfZHNpX2hvc3RfdW5yZWdpc3Rlcihkc2lfaG9zdCk7CisJa2ZyZWUo ZHNpX2hvc3QpOworfQorCitzdGF0aWMgdm9pZCBrbWJfZHNpX2Nvbm5lY3Rvcl9kZXN0cm95KHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGttYl9jb25uZWN0b3Ig KmttYl9jb25uZWN0b3IgPSB0b19rbWJfY29ubmVjdG9yKGNvbm5lY3Rvcik7CisKKwlkcm1fY29u bmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKKwlrZnJlZShrbWJfY29ubmVjdG9yKTsKK30KKwor c3RhdGljIHZvaWQga21iX2RzaV9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyKQoreworCXN0cnVjdCBrbWJfZHNpICprbWJfZHNpID0gdG9fa21iX2RzaShlbmNvZGVy KTsKKworCWlmICgha21iX2RzaSkKKwkJcmV0dXJuOworCisJa2ZyZWUoa21iX2RzaS0+ZHNpX2hv c3QpOworCisJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKKworCWtmcmVlKGttYl9kc2kp OworCWlmICghZHNpX2RldmljZSkKKwkJa2ZyZWUoZHNpX2RldmljZSk7Cit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3Mga21iX2RzaV9mdW5jcyA9IHsKKwkuZGVzdHJv eSA9IGttYl9kc2lfZW5jb2Rlcl9kZXN0cm95LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdAor ZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3Mga21iX2RzaV9jb25uZWN0b3JfaGVscGVyX2Z1bmNz ID0geworCS5nZXRfbW9kZXMgPSBrbWJfZHNpX2dldF9tb2RlcywKKwkubW9kZV92YWxpZCA9IGtt Yl9kc2lfbW9kZV92YWxpZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9mdW5jcyBrbWJfZHNpX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZGVzdHJveSA9IGttYl9kc2lf Y29ubmVjdG9yX2Rlc3Ryb3ksCisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3Npbmds ZV9jb25uZWN0b3JfbW9kZXMsCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9y X3Jlc2V0LAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5l Y3Rvcl9kZXN0cm95X3N0YXRlLAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21p Y19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKK307CisKK3N0YXRpYyBzc2l6ZV90 IGttYl9kc2lfaG9zdF90cmFuc2ZlcihzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCQkg ICAgIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykKK3sKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBrbWJfZHNpX2hvc3RfYXR0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0 LAorCQkJICAgICAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBrbWJfZHNpX2hvc3RfZGV0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0 ICpob3N0LAorCQkJICAgICAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldikKK3sKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9ob3N0X29wcyBrbWJfZHNp X2hvc3Rfb3BzID0geworCS5hdHRhY2ggPSBrbWJfZHNpX2hvc3RfYXR0YWNoLAorCS5kZXRhY2gg PSBrbWJfZHNpX2hvc3RfZGV0YWNoLAorCS50cmFuc2ZlciA9IGttYl9kc2lfaG9zdF90cmFuc2Zl ciwKK307CisKK3N0YXRpYyBzdHJ1Y3Qga21iX2RzaV9ob3N0ICprbWJfZHNpX2hvc3RfaW5pdChz dHJ1Y3QgZHJtX2RldmljZSAqZHJtLAorCQkJCQkgICAgICBzdHJ1Y3Qga21iX2RzaSAqa21iX2Rz aSkKK3sKKwlzdHJ1Y3Qga21iX2RzaV9ob3N0ICpob3N0OworCisJaG9zdCA9IGt6YWxsb2Moc2l6 ZW9mKCpob3N0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFob3N0KQorCQlyZXR1cm4gTlVMTDsKKwor CWhvc3QtPmJhc2UgPSBkc2lfaG9zdDsKKwlob3N0LT5iYXNlLT5vcHMgPSAma21iX2RzaV9ob3N0 X29wczsKKwlob3N0LT5rbWJfZHNpID0ga21iX2RzaTsKKworCWhvc3QtPmJhc2UtPmRldiA9IGRy bS0+ZGV2OworCisJZHNpX2RldmljZS0+aG9zdCA9IGhvc3QtPmJhc2U7CisJaG9zdC0+ZGV2aWNl ID0gZHNpX2RldmljZTsKKwlyZXR1cm4gaG9zdDsKK30KKworc3RydWN0IGRybV9icmlkZ2UgKmtt Yl9kc2lfaG9zdF9icmlkZ2VfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSA9IE5VTEw7CisJc3RydWN0IGRldmljZV9ub2RlICplbmNvZGVyX25v ZGU7CisKKwkvKiBDcmVhdGUgYW5kIHJlZ2lzdGVyIE1JUEkgRFNJIGhvc3QgKi8KKwlpZiAoIWRz aV9ob3N0KSB7CisJCWRzaV9ob3N0ID0ga3phbGxvYyhzaXplb2YoKmRzaV9ob3N0KSwgR0ZQX0tF Uk5FTCk7CisJCWlmICghZHNpX2hvc3QpCisJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwor CQlkc2lfaG9zdC0+b3BzID0gJmttYl9kc2lfaG9zdF9vcHM7CisKKwkJaWYgKCFkc2lfZGV2aWNl KSB7CisJCQlkc2lfZGV2aWNlID0ga3phbGxvYyhzaXplb2YoKmRzaV9kZXZpY2UpLCBHRlBfS0VS TkVMKTsKKwkJCWlmICghZHNpX2RldmljZSkgeworCQkJCWtmcmVlKGRzaV9ob3N0KTsKKwkJCQly ZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJCX0KKwkJfQorCisJCWRzaV9ob3N0LT5kZXYgPSBk ZXY7CisJCW1pcGlfZHNpX2hvc3RfcmVnaXN0ZXIoZHNpX2hvc3QpOworCX0KKwkvKiBGaW5kIEFE Vjc1MzUgbm9kZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLworCWVuY29kZXJfbm9kZSA9IG9mX3BhcnNl X3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAiZW5jb2Rlci1zbGF2ZSIsIDApOworCisJaWYgKCFlbmNv ZGVyX25vZGUpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IGJyaWRnZSBpbmZvIGZyb20g RFRcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwkvKiBMb2NhdGUgZHJt IGJyaWRnZSBmcm9tIHRoZSBoZG1pIGVuY29kZXIgRFQgbm9kZSAqLworCWJyaWRnZSA9IG9mX2Ry bV9maW5kX2JyaWRnZShlbmNvZGVyX25vZGUpOworCW9mX25vZGVfcHV0KGVuY29kZXJfbm9kZSk7 CisJaWYgKCFicmlkZ2UpIHsKKwkJRFJNX0lORk8oIldhaXQgZm9yIGV4dGVybmFsIGJyaWRnZSBk cml2ZXIgRFRcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTsKKwl9CisJcmV0 dXJuIGJyaWRnZTsKK30KKworc3RhdGljIHUzMiBtaXBpX2dldF9kYXRhdHlwZV9wYXJhbXModTMy IGRhdGFfdHlwZSwgdTMyIGRhdGFfbW9kZSwKKwkJCQkgICAgc3RydWN0IG1pcGlfZGF0YV90eXBl X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBtaXBpX2RhdGFfdHlwZV9wYXJhbXMgZGF0YV90 eXBlX3BhcmFtOworCisJc3dpdGNoIChkYXRhX3R5cGUpIHsKKwljYXNlIERTSV9MUF9EVF9QUFNf WUNCQ1I0MjBfMTJCOgorCQlkYXRhX3R5cGVfcGFyYW0uc2l6ZV9jb25zdHJhaW50X3BpeGVscyA9 IDI7CisJCWRhdGFfdHlwZV9wYXJhbS5zaXplX2NvbnN0cmFpbnRfYnl0ZXMgPSAzOworCQlzd2l0 Y2ggKGRhdGFfbW9kZSkgeworCQkJLyogQ2FzZSAwIG5vdCBzdXBwb3J0ZWQgYWNjb3JkaW5nIHRv IE1ESyAqLworCQljYXNlIDE6CisJCWNhc2UgMjoKKwkJY2FzZSAzOgorCQkJZGF0YV90eXBlX3Bh cmFtLnBpeGVsc19wZXJfcGNsayA9IDI7CisJCQlkYXRhX3R5cGVfcGFyYW0uYml0c19wZXJfcGNs ayA9IDI0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoIkRTSTogSW52YWxp ZCBkYXRhX21vZGUgJWRcbiIsIGRhdGFfbW9kZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfTsK KwkJYnJlYWs7CisJY2FzZSBEU0lfTFBfRFRfUFBTX1lDQkNSNDIyXzE2QjoKKwkJZGF0YV90eXBl X3BhcmFtLnNpemVfY29uc3RyYWludF9waXhlbHMgPSAyOworCQlkYXRhX3R5cGVfcGFyYW0uc2l6 ZV9jb25zdHJhaW50X2J5dGVzID0gNDsKKwkJc3dpdGNoIChkYXRhX21vZGUpIHsKKwkJCS8qIENh c2UgMCBhbmQgMSBub3Qgc3VwcG9ydGVkIGFjY29yZGluZworCQkJICogdG8gTURLCisJCQkgKi8K KwkJY2FzZSAyOgorCQkJZGF0YV90eXBlX3BhcmFtLnBpeGVsc19wZXJfcGNsayA9IDE7CisJCQlk YXRhX3R5cGVfcGFyYW0uYml0c19wZXJfcGNsayA9IDE2OworCQkJYnJlYWs7CisJCWNhc2UgMzoK KwkJCWRhdGFfdHlwZV9wYXJhbS5waXhlbHNfcGVyX3BjbGsgPSAyOworCQkJZGF0YV90eXBlX3Bh cmFtLmJpdHNfcGVyX3BjbGsgPSAzMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VS Uk9SKCJEU0k6IEludmFsaWQgZGF0YV9tb2RlICVkXG4iLCBkYXRhX21vZGUpOworCQkJcmV0dXJu IC1FSU5WQUw7CisJCX07CisJCWJyZWFrOworCWNhc2UgRFNJX0xQX0RUX0xQUFNfWUNCQ1I0MjJf MjBCOgorCWNhc2UgRFNJX0xQX0RUX1BQU19ZQ0JDUjQyMl8yNEI6CisJCWRhdGFfdHlwZV9wYXJh bS5zaXplX2NvbnN0cmFpbnRfcGl4ZWxzID0gMjsKKwkJZGF0YV90eXBlX3BhcmFtLnNpemVfY29u c3RyYWludF9ieXRlcyA9IDY7CisJCXN3aXRjaCAoZGF0YV9tb2RlKSB7CisJCQkvKiBDYXNlIDAg bm90IHN1cHBvcnRlZCBhY2NvcmRpbmcgdG8gTURLICovCisJCWNhc2UgMToKKwkJY2FzZSAyOgor CQljYXNlIDM6CisJCQlkYXRhX3R5cGVfcGFyYW0ucGl4ZWxzX3Blcl9wY2xrID0gMTsKKwkJCWRh dGFfdHlwZV9wYXJhbS5iaXRzX3Blcl9wY2xrID0gMjQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoK KwkJCURSTV9FUlJPUigiRFNJOiBJbnZhbGlkIGRhdGFfbW9kZSAlZFxuIiwgZGF0YV9tb2RlKTsK KwkJCXJldHVybiAtRUlOVkFMOworCQl9OworCQlicmVhazsKKwljYXNlIERTSV9MUF9EVF9QUFNf UkdCNTY1XzE2QjoKKwkJZGF0YV90eXBlX3BhcmFtLnNpemVfY29uc3RyYWludF9waXhlbHMgPSAx OworCQlkYXRhX3R5cGVfcGFyYW0uc2l6ZV9jb25zdHJhaW50X2J5dGVzID0gMjsKKwkJc3dpdGNo IChkYXRhX21vZGUpIHsKKwkJY2FzZSAwOgorCQljYXNlIDE6CisJCQlkYXRhX3R5cGVfcGFyYW0u cGl4ZWxzX3Blcl9wY2xrID0gMTsKKwkJCWRhdGFfdHlwZV9wYXJhbS5iaXRzX3Blcl9wY2xrID0g MTY7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQljYXNlIDM6CisJCQlkYXRhX3R5cGVfcGFyYW0u cGl4ZWxzX3Blcl9wY2xrID0gMjsKKwkJCWRhdGFfdHlwZV9wYXJhbS5iaXRzX3Blcl9wY2xrID0g MzI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURSTV9FUlJPUigiRFNJOiBJbnZhbGlkIGRh dGFfbW9kZSAlZFxuIiwgZGF0YV9tb2RlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9OworCQli cmVhazsKKwljYXNlIERTSV9MUF9EVF9QUFNfUkdCNjY2XzE4QjoKKwkJZGF0YV90eXBlX3BhcmFt LnNpemVfY29uc3RyYWludF9waXhlbHMgPSA0OworCQlkYXRhX3R5cGVfcGFyYW0uc2l6ZV9jb25z dHJhaW50X2J5dGVzID0gOTsKKwkJZGF0YV90eXBlX3BhcmFtLmJpdHNfcGVyX3BjbGsgPSAxODsK KwkJZGF0YV90eXBlX3BhcmFtLnBpeGVsc19wZXJfcGNsayA9IDE7CisJCWJyZWFrOworCWNhc2Ug RFNJX0xQX0RUX0xQUFNfUkdCNjY2XzE4QjoKKwljYXNlIERTSV9MUF9EVF9QUFNfUkdCODg4XzI0 QjoKKwkJZGF0YV90eXBlX3BhcmFtLnNpemVfY29uc3RyYWludF9waXhlbHMgPSAxOworCQlkYXRh X3R5cGVfcGFyYW0uc2l6ZV9jb25zdHJhaW50X2J5dGVzID0gMzsKKwkJZGF0YV90eXBlX3BhcmFt LmJpdHNfcGVyX3BjbGsgPSAyNDsKKwkJZGF0YV90eXBlX3BhcmFtLnBpeGVsc19wZXJfcGNsayA9 IDE7CisJCWJyZWFrOworCWNhc2UgRFNJX0xQX0RUX1BQU19SR0IxMDEwMTBfMzBCOgorCQlkYXRh X3R5cGVfcGFyYW0uc2l6ZV9jb25zdHJhaW50X3BpeGVscyA9IDQ7CisJCWRhdGFfdHlwZV9wYXJh bS5zaXplX2NvbnN0cmFpbnRfYnl0ZXMgPSAxNTsKKwkJZGF0YV90eXBlX3BhcmFtLmJpdHNfcGVy X3BjbGsgPSAzMDsKKwkJZGF0YV90eXBlX3BhcmFtLnBpeGVsc19wZXJfcGNsayA9IDE7CisJCWJy ZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiRFNJOiBJbnZhbGlkIGRhdGFfdHlwZSAlZFxu IiwgZGF0YV90eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfTsKKworCSpwYXJhbXMgPSBkYXRh X3R5cGVfcGFyYW07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgY29tcHV0ZV93Yyh1MzIg d2lkdGhfcHgsIHU4IHNpemVfY29uc3RyX3AsIHU4IHNpemVfY29uc3RyX2IpCit7CisJLyogQ2Fs Y3VsYXRlIHRoZSB3b3JkIGNvdW50IGZvciBlYWNoIGxvbmcgcGFja2V0ICovCisJcmV0dXJuICgo KHdpZHRoX3B4IC8gc2l6ZV9jb25zdHJfcCkgKiBzaXplX2NvbnN0cl9iKSAmIDB4ZmZmZik7Cit9 CisKK3N0YXRpYyB1MzIgY29tcHV0ZV91bnBhY2tlZF9ieXRlcyh1MzIgd2MsIHU4IGJpdHNfcGVy X3BjbGspCit7CisJLyogTnVtYmVyIG9mIFBDTEsgY3ljbGVzIG5lZWRlZCB0byB0cmFuc2ZlciBh IGxpbmUKKwkgKiB3aXRoIGVhY2ggUENMSyBjeWNsZSwgNCBCeXRlcyBhcmUgc2VudCB0aHJvdWdo IHRoZSBQUEwgbW9kdWxlCisJICovCisJcmV0dXJuICgod2MgKiA4KSAvIGJpdHNfcGVyX3BjbGsp ICogNDsKK30KKworc3RhdGljIHUzMiBtaXBpX3R4X2ZnX3NlY3Rpb25fY2ZnX3JlZ3Moc3RydWN0 IGttYl9kcm1fcHJpdmF0ZSAqa21iLAorCQkJCSAgICAgICB1OCBmcmFtZV9pZCwgdTggc2VjdGlv biwKKwkJCQkgICAgICAgdTMyIGhlaWdodF9saW5lcywgdTMyIHVucGFja2VkX2J5dGVzLAorCQkJ CSAgICAgICBzdHJ1Y3QgbWlwaV90eF9mcmFtZV9zZWN0X3BoY2ZnICpwaF9jZmcpCit7CisJdTMy IGNmZyA9IDA7CisJdTMyIGN0cmxfbm8gPSBNSVBJX0NUUkw2OworCXUzMiByZWdfYWRyOworCisJ LyogRnJhbWUgc2VjdGlvbiBwYWNrZXQgaGVhZGVyICovCisJLyogV29yZCBjb3VudCBiaXRzIFsx NTowXSAqLworCWNmZyA9IChwaF9jZmctPndjICYgTUlQSV9UWF9TRUNUX1dDX01BU0spIDw8IDA7 CisKKwkvKiBEYXRhIHR5cGUgKGJpdHMgWzIxOjE2XSkgKi8KKwljZmcgfD0gKChwaF9jZmctPmRh dGFfdHlwZSAmIE1JUElfVFhfU0VDVF9EVF9NQVNLKQorCQk8PCBNSVBJX1RYX1NFQ1RfRFRfU0hJ RlQpOworCisJLyogVmlydHVhbCBjaGFubmVsIChiaXRzIFsyMzoyMl0pICovCisJY2ZnIHw9ICgo cGhfY2ZnLT52Y2hhbm5lbCAmIE1JUElfVFhfU0VDVF9WQ19NQVNLKQorCQk8PCBNSVBJX1RYX1NF Q1RfVkNfU0hJRlQpOworCisJLyogRGF0YSBtb2RlIChiaXRzIFsyNDoyNV0pICovCisJY2ZnIHw9 ICgocGhfY2ZnLT5kYXRhX21vZGUgJiBNSVBJX1RYX1NFQ1RfRE1fTUFTSykKKwkJPDwgTUlQSV9U WF9TRUNUX0RNX1NISUZUKTsKKwlpZiAocGhfY2ZnLT5kbWFfcGFja2VkKQorCQljZmcgfD0gTUlQ SV9UWF9TRUNUX0RNQV9QQUNLRUQ7CisKKwlkcm1fZGJnKCZrbWItPmRybSwKKwkJImN0cmw9JWQg ZnJhbWVfaWQ9JWQgc2VjdGlvbj0lZCBjZmc9JXggcGFja2VkPSVkXG4iLAorCQkgIGN0cmxfbm8s IGZyYW1lX2lkLCBzZWN0aW9uLCBjZmcsIHBoX2NmZy0+ZG1hX3BhY2tlZCk7CisJa21iX3dyaXRl X21pcGkoa21iLAorCQkgICAgICAgKE1JUElfVFhtX0hTX0ZHbl9TRUNUb19QSChjdHJsX25vLCBm cmFtZV9pZCwgc2VjdGlvbikpLAorCQkgICAgICAgY2ZnKTsKKworCS8qIFVucGFja2VkIGJ5dGVz ICovCisKKwkvKiBUaGVyZSBhcmUgNCBmcmFtZSBnZW5lcmF0b3JzIGFuZCBlYWNoIGZnIGhhcyA0 IHNlY3Rpb25zCisJICogVGhlcmUgYXJlIDIgcmVnaXN0ZXJzIGZvciB1bnBhY2tlZCBieXRlcyAo IyBieXRlcyBlYWNoCisJICogc2VjdGlvbiBvY2N1cGllcyBpbiBtZW1vcnkpCisJICogUkVHX1VO UEFDS0VEX0JZVEVTMDogWzE1OjBdLUJZVEVTMCwgWzMxOjE2XS1CWVRFUzEKKwkgKiBSRUdfVU5Q QUNLRURfQllURVMxOiBbMTU6MF0tQllURVMyLCBbMzE6MTZdLUJZVEVTMworCSAqLworCXJlZ19h ZHIgPQorCSAgICBNSVBJX1RYbV9IU19GR25fU0VDVF9VTlBBQ0tFRF9CWVRFUzAoY3RybF9ubywK KwkJCQkJCSBmcmFtZV9pZCkgKyAoc2VjdGlvbiAvIDIpICogNDsKKwlrbWJfd3JpdGVfYml0c19t aXBpKGttYiwgcmVnX2FkciwgKHNlY3Rpb24gJSAyKSAqIDE2LCAxNiwKKwkJCSAgICB1bnBhY2tl ZF9ieXRlcyk7CisJZHJtX2RiZygma21iLT5kcm0sCisJCSJ1bnBhY2tlZF9ieXRlcyA9ICVkLCB3 b3JkY291bnQgPSAlZFxuIiwgdW5wYWNrZWRfYnl0ZXMsCisJCSAgcGhfY2ZnLT53Yyk7CisKKwkv KiBMaW5lIGNvbmZpZyAqLworCXJlZ19hZHIgPSBNSVBJX1RYbV9IU19GR25fU0VDVG9fTElORV9D RkcoY3RybF9ubywgZnJhbWVfaWQsIHNlY3Rpb24pOworCWttYl93cml0ZV9taXBpKGttYiwgcmVn X2FkciwgaGVpZ2h0X2xpbmVzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBtaXBpX3R4 X2ZnX3NlY3Rpb25fY2ZnKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiwKKwkJCQkgIHU4IGZy YW1lX2lkLCB1OCBzZWN0aW9uLAorCQkJCSAgc3RydWN0IG1pcGlfdHhfZnJhbWVfc2VjdGlvbl9j ZmcgKmZyYW1lX3NjZmcsCisJCQkJICB1MzIgKmJpdHNfcGVyX3BjbGssIHUzMiAqd2MpCit7CisJ dTMyIHJldCA9IDA7CisJdTMyIHVucGFja2VkX2J5dGVzOworCXN0cnVjdCBtaXBpX2RhdGFfdHlw ZV9wYXJhbXMgZGF0YV90eXBlX3BhcmFtZXRlcnM7CisJc3RydWN0IG1pcGlfdHhfZnJhbWVfc2Vj dF9waGNmZyBwaF9jZmc7CisKKwlyZXQgPSBtaXBpX2dldF9kYXRhdHlwZV9wYXJhbXMoZnJhbWVf c2NmZy0+ZGF0YV90eXBlLAorCQkJCSAgICAgICBmcmFtZV9zY2ZnLT5kYXRhX21vZGUsCisJCQkJ ICAgICAgICZkYXRhX3R5cGVfcGFyYW1ldGVycyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCS8qIFBhY2tldCB3aWR0aCBoYXMgdG8gYmUgYSBtdWx0aXBsZSBvZiB0aGUgbWluaW11bSBw YWNrZXQgd2lkdGgKKwkgKiAoaW4gcGl4ZWxzKSBzZXQgZm9yIGVhY2ggZGF0YSB0eXBlCisJICov CisJaWYgKGZyYW1lX3NjZmctPndpZHRoX3BpeGVscyAlCisJICAgIGRhdGFfdHlwZV9wYXJhbWV0 ZXJzLnNpemVfY29uc3RyYWludF9waXhlbHMgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkq d2MgPSBjb21wdXRlX3djKGZyYW1lX3NjZmctPndpZHRoX3BpeGVscywKKwkJCSBkYXRhX3R5cGVf cGFyYW1ldGVycy5zaXplX2NvbnN0cmFpbnRfcGl4ZWxzLAorCQkJIGRhdGFfdHlwZV9wYXJhbWV0 ZXJzLnNpemVfY29uc3RyYWludF9ieXRlcyk7CisJdW5wYWNrZWRfYnl0ZXMgPSBjb21wdXRlX3Vu cGFja2VkX2J5dGVzKCp3YywKKwkJCQkJCWRhdGFfdHlwZV9wYXJhbWV0ZXJzLmJpdHNfcGVyX3Bj bGspOworCXBoX2NmZy53YyA9ICp3YzsKKwlwaF9jZmcuZGF0YV9tb2RlID0gZnJhbWVfc2NmZy0+ ZGF0YV9tb2RlOworCXBoX2NmZy5kYXRhX3R5cGUgPSBmcmFtZV9zY2ZnLT5kYXRhX3R5cGU7CisJ cGhfY2ZnLmRtYV9wYWNrZWQgPSBmcmFtZV9zY2ZnLT5kbWFfcGFja2VkOworCXBoX2NmZy52Y2hh bm5lbCA9IGZyYW1lX2lkOworCisJbWlwaV90eF9mZ19zZWN0aW9uX2NmZ19yZWdzKGttYiwgZnJh bWVfaWQsIHNlY3Rpb24sCisJCQkJICAgIGZyYW1lX3NjZmctPmhlaWdodF9saW5lcywKKwkJCQkg ICAgdW5wYWNrZWRfYnl0ZXMsICZwaF9jZmcpOworCisJLyogQ2FsbGVyIG5lZWRzIGJpdHNfcGVy X2NsayBmb3IgYWRkaXRpb25hbCBjYWx1Y2xhdGlvbnMgKi8KKwkqYml0c19wZXJfcGNsayA9IGRh dGFfdHlwZV9wYXJhbWV0ZXJzLmJpdHNfcGVyX3BjbGs7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIHZvaWQgbWlwaV90eF9mZ19jZmdfcmVncyhzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIs IHU4IGZyYW1lX2dlbiwKKwkJCQlzdHJ1Y3QgbWlwaV90eF9mcmFtZV90aW1pbmdfY2ZnICpmZ19j ZmcpCit7CisJdTMyIHN5c2NsazsKKwl1MzIgcHBsX2xscF9yYXRpbzsKKwl1MzIgY3RybF9ubyA9 IE1JUElfQ1RSTDYsIHJlZ19hZHIsIHZhbCwgb2Zmc2V0OworCisJLyogNTAwIE1oeiBzeXN0ZW0g Y2xvY2sgbWludXMgNTAgdG8gYWNjb3VudCBmb3IgdGhlIGRpZmZlcmVuY2UgaW4KKwkgKiBNSVBJ IGNsb2NrIHNwZWVkIGluIFJUTCB0ZXN0cworCSAqLworCXN5c2NsayA9IGttYi0+c3lzX2Nsa19t aHogLSA1MDsKKworCS8qIFBQTC1QaXhlbCBQYWNraW5nIExheWVyLCBMTFAtTG93IExldmVsIFBy b3RvY29sCisJICogRnJhbWUgZ2VuYXJ0b3IgdGltaW5nIHBhcmFtZXRlcnMgYXJlIGNsb2NrZWQg b24gdGhlIHN5c3RlbSBjbG9jaywKKwkgKiB3aGVyZWFzIGFzIHRoZSBlcXVpdmFsZW50IHBhcmFt ZXRlcnMgaW4gdGhlIExMUCBibG9ja3MgYXJlIGNsb2NrZWQKKwkgKiBvbiBMTFAgVHggY2xvY2sg ZnJvbSB0aGUgRC1QSFkgLSBCWVRFIGNsb2NrCisJICovCisKKwkvKiBNdWx0aXBseSBieSAxMDAw IHRvIG1haW50YWluIHByZWNpc2lvbiAqLworCXBwbF9sbHBfcmF0aW8gPSAoKGZnX2NmZy0+YnBw IC8gOCkgKiBzeXNjbGsgKiAxMDAwKSAvCisJICAgICgoZmdfY2ZnLT5sYW5lX3JhdGVfbWJwcyAv IDgpICogZmdfY2ZnLT5hY3RpdmVfbGFuZXMpOworCisJZHJtX2RiZygma21iLT5kcm0sICJwcGxf bGxwX3JhdGlvPSVkXG4iLCBwcGxfbGxwX3JhdGlvKTsKKwlkcm1fZGJnKCZrbWItPmRybSwgImJw cD0lZCBzeXNjbGs9JWQgbGFuZS1yYXRlPSVkIGFjdGl2ZS1sYW5lcz0lZFxuIiwKKwkJZmdfY2Zn LT5icHAsIHN5c2NsaywgZmdfY2ZnLT5sYW5lX3JhdGVfbWJwcywKKwkJIGZnX2NmZy0+YWN0aXZl X2xhbmVzKTsKKworCS8qIEZyYW1lIGdlbmVyYXRvciBudW1iZXIgb2YgbGluZXMgKi8KKwlyZWdf YWRyID0gTUlQSV9UWG1fSFNfRkduX05VTV9MSU5FUyhjdHJsX25vLCBmcmFtZV9nZW4pOworCWtt Yl93cml0ZV9taXBpKGttYiwgcmVnX2FkciwgZmdfY2ZnLT52X2FjdGl2ZSk7CisKKwkvKiB2c3lu YyB3aWR0aAorCSAqIFRoZXJlIGFyZSAyIHJlZ2lzdGVycyBmb3IgdnN5bmMgd2lkdGggKFZTQSBp biBsaW5lcyBmb3IKKwkgKiBjaGFubmVscyAwLTMpCisJICogUkVHX1ZTWU5DX1dJRFRIMDogWzE1 OjBdLVZTQSBmb3IgY2hhbm5lbDAsIFszMToxNl0tVlNBIGZvciBjaGFubmVsMQorCSAqIFJFR19W U1lOQ19XSURUSDE6IFsxNTowXS1WU0EgZm9yIGNoYW5uZWwyLCBbMzE6MTZdLVZTQSBmb3IgY2hh bm5lbDMKKwkgKi8KKwlvZmZzZXQgPSAoZnJhbWVfZ2VuICUgMikgKiAxNjsKKwlyZWdfYWRyID0g TUlQSV9UWG1fSFNfVlNZTkNfV0lEVEhuKGN0cmxfbm8sIGZyYW1lX2dlbiAvIDIpOworCWttYl93 cml0ZV9iaXRzX21pcGkoa21iLCByZWdfYWRyLCBvZmZzZXQsIDE2LCBmZ19jZmctPnZzeW5jX3dp ZHRoKTsKKworCS8qIHZlcnRpY2FsIGJhY2twb3JjaCAodmJwKSAqLworCXJlZ19hZHIgPSBNSVBJ X1RYbV9IU19WX0JBQ0tQT1JDSEVTbihjdHJsX25vLCBmcmFtZV9nZW4gLyAyKTsKKwlrbWJfd3Jp dGVfYml0c19taXBpKGttYiwgcmVnX2Fkciwgb2Zmc2V0LCAxNiwgZmdfY2ZnLT52X2JhY2twb3Jj aCk7CisKKwkvKiB2ZXJ0aWNhbCBmcm9udHBvcmNoICh2ZnApICovCisJcmVnX2FkciA9IE1JUElf VFhtX0hTX1ZfRlJPTlRQT1JDSEVTbihjdHJsX25vLCBmcmFtZV9nZW4gLyAyKTsKKwlrbWJfd3Jp dGVfYml0c19taXBpKGttYiwgcmVnX2Fkciwgb2Zmc2V0LCAxNiwgZmdfY2ZnLT52X2Zyb250cG9y Y2gpOworCisJLyogdmVydGljYWwgYWN0aXZlICh2YWN0aXZlKSAqLworCXJlZ19hZHIgPSBNSVBJ X1RYbV9IU19WX0FDVElWRW4oY3RybF9ubywgZnJhbWVfZ2VuIC8gMik7CisJa21iX3dyaXRlX2Jp dHNfbWlwaShrbWIsIHJlZ19hZHIsIG9mZnNldCwgMTYsIGZnX2NmZy0+dl9hY3RpdmUpOworCisJ LyogaHN5bmMgd2lkdGggKi8KKwlyZWdfYWRyID0gTUlQSV9UWG1fSFNfSFNZTkNfV0lEVEhuKGN0 cmxfbm8sIGZyYW1lX2dlbik7CisJa21iX3dyaXRlX21pcGkoa21iLCByZWdfYWRyLAorCQkgICAg ICAgKGZnX2NmZy0+aHN5bmNfd2lkdGggKiBwcGxfbGxwX3JhdGlvKSAvIDEwMDApOworCisJLyog aG9yaXpvbnRhbCBiYWNrcG9yY2ggKGhicCkgKi8KKwlyZWdfYWRyID0gTUlQSV9UWG1fSFNfSF9C QUNLUE9SQ0huKGN0cmxfbm8sIGZyYW1lX2dlbik7CisJa21iX3dyaXRlX21pcGkoa21iLCByZWdf YWRyLAorCQkgICAgICAgKGZnX2NmZy0+aF9iYWNrcG9yY2ggKiBwcGxfbGxwX3JhdGlvKSAvIDEw MDApOworCisJLyogaG9yaXpvbnRhbCBmcm9udHBvcmNoIChoZnApICovCisJcmVnX2FkciA9IE1J UElfVFhtX0hTX0hfRlJPTlRQT1JDSG4oY3RybF9ubywgZnJhbWVfZ2VuKTsKKwlrbWJfd3JpdGVf bWlwaShrbWIsIHJlZ19hZHIsCisJCSAgICAgICAoZmdfY2ZnLT5oX2Zyb250cG9yY2ggKiBwcGxf bGxwX3JhdGlvKSAvIDEwMDApOworCisJLyogaG9yaXpvbnRhbCBhY3RpdmUgKGhhKSAqLworCXJl Z19hZHIgPSBNSVBJX1RYbV9IU19IX0FDVElWRW4oY3RybF9ubywgZnJhbWVfZ2VuKTsKKworCS8q IGNvbnZlcnQgaF9hY3RpdmUgd2hpY2ggaXMgd2MgaW4gYnl0ZXMgdG8gY3ljbGVzICovCisJdmFs ID0gKGZnX2NmZy0+aF9hY3RpdmUgKiBzeXNjbGsgKiAxMDAwKSAvCisJICAgICgoZmdfY2ZnLT5s YW5lX3JhdGVfbWJwcyAvIDgpICogZmdfY2ZnLT5hY3RpdmVfbGFuZXMpOworCXZhbCAvPSAxMDAw OworCWttYl93cml0ZV9taXBpKGttYiwgcmVnX2FkciwgdmFsKTsKKworCS8qIGxscCBoc3luYyB3 aWR0aCAqLworCXJlZ19hZHIgPSBNSVBJX1RYbV9IU19MTFBfSFNZTkNfV0lEVEhuKGN0cmxfbm8s IGZyYW1lX2dlbik7CisJa21iX3dyaXRlX21pcGkoa21iLCByZWdfYWRyLCBmZ19jZmctPmhzeW5j X3dpZHRoICogKGZnX2NmZy0+YnBwIC8gOCkpOworCisJLyogbGxwIGggYmFja3BvcmNoICovCisJ cmVnX2FkciA9IE1JUElfVFhtX0hTX0xMUF9IX0JBQ0tQT1JDSG4oY3RybF9ubywgZnJhbWVfZ2Vu KTsKKwlrbWJfd3JpdGVfbWlwaShrbWIsIHJlZ19hZHIsIGZnX2NmZy0+aF9iYWNrcG9yY2ggKiAo ZmdfY2ZnLT5icHAgLyA4KSk7CisKKwkvKiBsbHAgaCBmcm9udHBvcmNoICovCisJcmVnX2FkciA9 IE1JUElfVFhtX0hTX0xMUF9IX0ZST05UUE9SQ0huKGN0cmxfbm8sIGZyYW1lX2dlbik7CisJa21i X3dyaXRlX21pcGkoa21iLCByZWdfYWRyLAorCQkgICAgICAgZmdfY2ZnLT5oX2Zyb250cG9yY2gg KiAoZmdfY2ZnLT5icHAgLyA4KSk7Cit9CisKK3N0YXRpYyB2b2lkIG1pcGlfdHhfZmdfY2ZnKHN0 cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiwgdTggZnJhbWVfZ2VuLAorCQkJICAgdTggYWN0aXZl X2xhbmVzLCB1MzIgYnBwLCB1MzIgd2MsCisJCQkgICB1MzIgbGFuZV9yYXRlX21icHMsIHN0cnVj dCBtaXBpX3R4X2ZyYW1lX2NmZyAqZmdfY2ZnKQoreworCXUzMiBpLCBmZ19udW1fbGluZXMgPSAw OworCXN0cnVjdCBtaXBpX3R4X2ZyYW1lX3RpbWluZ19jZmcgZmdfdF9jZmc7CisKKwkvKiBDYWxj dWxhdGUgdGhlIHRvdGFsIGZyYW1lIGdlbmVyYXRvciBudW1iZXIgb2YKKwkgKiBsaW5lcyBiYXNl ZCBvbiBpdCdzIGFjdGl2ZSBzZWN0aW9ucworCSAqLworCWZvciAoaSA9IDA7IGkgPCBNSVBJX1RY X0ZSQU1FX0dFTl9TRUNUSU9OUzsgaSsrKSB7CisJCWlmIChmZ19jZmctPnNlY3Rpb25zW2ldKQor CQkJZmdfbnVtX2xpbmVzICs9IGZnX2NmZy0+c2VjdGlvbnNbaV0tPmhlaWdodF9saW5lczsKKwl9 CisKKwlmZ190X2NmZy5icHAgPSBicHA7CisJZmdfdF9jZmcubGFuZV9yYXRlX21icHMgPSBsYW5l X3JhdGVfbWJwczsKKwlmZ190X2NmZy5oc3luY193aWR0aCA9IGZnX2NmZy0+aHN5bmNfd2lkdGg7 CisJZmdfdF9jZmcuaF9iYWNrcG9yY2ggPSBmZ19jZmctPmhfYmFja3BvcmNoOworCWZnX3RfY2Zn LmhfZnJvbnRwb3JjaCA9IGZnX2NmZy0+aF9mcm9udHBvcmNoOworCWZnX3RfY2ZnLmhfYWN0aXZl ID0gd2M7CisJZmdfdF9jZmcudnN5bmNfd2lkdGggPSBmZ19jZmctPnZzeW5jX3dpZHRoOworCWZn X3RfY2ZnLnZfYmFja3BvcmNoID0gZmdfY2ZnLT52X2JhY2twb3JjaDsKKwlmZ190X2NmZy52X2Zy b250cG9yY2ggPSBmZ19jZmctPnZfZnJvbnRwb3JjaDsKKwlmZ190X2NmZy52X2FjdGl2ZSA9IGZn X251bV9saW5lczsKKwlmZ190X2NmZy5hY3RpdmVfbGFuZXMgPSBhY3RpdmVfbGFuZXM7CisKKwkv KiBBcHBseSBmcmFtZSBnZW5lcmF0b3IgdGltaW5nIHNldHRpbmcgKi8KKwltaXBpX3R4X2ZnX2Nm Z19yZWdzKGttYiwgZnJhbWVfZ2VuLCAmZmdfdF9jZmcpOworfQorCitzdGF0aWMgdm9pZCBtaXBp X3R4X211bHRpY2hhbm5lbF9maWZvX2NmZyhzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIsCisJ CQkJCSAgdTggYWN0aXZlX2xhbmVzLCB1OCB2Y2hhbm5lbF9pZCkKK3sKKwl1MzIgZmlmb19zaXpl LCBmaWZvX3J0aHJlc2hvbGQ7CisJdTMyIGN0cmxfbm8gPSBNSVBJX0NUUkw2OworCisJLyogQ2xl YXIgYWxsIG1jIGZpZm8gY2hhbm5lbCBzaXplcyBhbmQgdGhyZXNob2xkcyAqLworCWttYl93cml0 ZV9taXBpKGttYiwgTUlQSV9UWF9IU19NQ19GSUZPX0NUUkxfRU4sIDApOworCWttYl93cml0ZV9t aXBpKGttYiwgTUlQSV9UWF9IU19NQ19GSUZPX0NIQU5fQUxMT0MwLCAwKTsKKwlrbWJfd3JpdGVf bWlwaShrbWIsIE1JUElfVFhfSFNfTUNfRklGT19DSEFOX0FMTE9DMSwgMCk7CisJa21iX3dyaXRl X21pcGkoa21iLCBNSVBJX1RYX0hTX01DX0ZJRk9fUlRIUkVTSE9MRDAsIDApOworCWttYl93cml0 ZV9taXBpKGttYiwgTUlQSV9UWF9IU19NQ19GSUZPX1JUSFJFU0hPTEQxLCAwKTsKKworCWZpZm9f c2l6ZSA9ICgoYWN0aXZlX2xhbmVzID4gTUlQSV9EX0xBTkVTX1BFUl9EUEhZKSA/CisJCSAgICAg TUlQSV9DVFJMXzRMQU5FX01BWF9NQ19GSUZPX0xPQyA6CisJCSAgICAgTUlQSV9DVFJMXzJMQU5F X01BWF9NQ19GSUZPX0xPQykgLSAxOworCisJLyogTUMgZmlmbyBzaXplIGZvciB2aXJ0dWFsIGNo YW5uZWxzIDAtMworCSAqIFJFR19NQ19GSUZPX0NIQU5fQUxMT0MwOiBbODowXS1jaGFubmVsMCwg WzI0OjE2XS1jaGFubmVsMQorCSAqIFJFR19NQ19GSUZPX0NIQU5fQUxMT0MxOiBbODowXS0yLCBb MjQ6MTZdLWNoYW5uZWwzCisJICovCisJU0VUX01DX0ZJRk9fQ0hBTl9BTExPQyhrbWIsIGN0cmxf bm8sIHZjaGFubmVsX2lkLCBmaWZvX3NpemUpOworCisJLyogU2V0IHRocmVzaG9sZCB0byBoYWxm IHRoZSBmaWZvIHNpemUsIGFjdHVhbCBzaXplPXNpemUqMTYgKi8KKwlmaWZvX3J0aHJlc2hvbGQg PSAoKGZpZm9fc2l6ZSkgKiA4KSAmIEJJVF9NQVNLXzE2OworCVNFVF9NQ19GSUZPX1JUSFJFU0hP TEQoa21iLCBjdHJsX25vLCB2Y2hhbm5lbF9pZCwgZmlmb19ydGhyZXNob2xkKTsKKworCS8qIEVu YWJsZSB0aGUgTUMgRklGTyBjaGFubmVsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFZpcnR1YWwgQ2hh bm5lbCAqLworCWttYl9zZXRfYml0X21pcGkoa21iLCBNSVBJX1RYbV9IU19NQ19GSUZPX0NUUkxf RU4oY3RybF9ubyksCisJCQkgdmNoYW5uZWxfaWQpOworfQorCitzdGF0aWMgdm9pZCBtaXBpX3R4 X2N0cmxfY2ZnKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiwgdTggZmdfaWQsCisJCQkgICAg IHN0cnVjdCBtaXBpX2N0cmxfY2ZnICpjdHJsX2NmZykKK3sKKwl1MzIgc3luY19jZmcgPSAwLCBj dHJsID0gMCwgZmdfZW47CisJdTMyIGN0cmxfbm8gPSBNSVBJX0NUUkw2OworCisJLyogTUlQSV9U WF9IU19TWU5DX0NGRyAqLworCWlmIChjdHJsX2NmZy0+dHhfY3RybF9jZmcubGluZV9zeW5jX3Br dF9lbikKKwkJc3luY19jZmcgfD0gTElORV9TWU5DX1BLVF9FTkFCTEU7CisJaWYgKGN0cmxfY2Zn LT50eF9jdHJsX2NmZy5mcmFtZV9jb3VudGVyX2FjdGl2ZSkKKwkJc3luY19jZmcgfD0gRlJBTUVf Q09VTlRFUl9BQ1RJVkU7CisJaWYgKGN0cmxfY2ZnLT50eF9jdHJsX2NmZy5saW5lX2NvdW50ZXJf YWN0aXZlKQorCQlzeW5jX2NmZyB8PSBMSU5FX0NPVU5URVJfQUNUSVZFOworCWlmIChjdHJsX2Nm Zy0+dHhfY3RybF9jZmcudHhfZHNpX2NmZy0+dl9ibGFua2luZykKKwkJc3luY19jZmcgfD0gRFNJ X1ZfQkxBTktJTkc7CisJaWYgKGN0cmxfY2ZnLT50eF9jdHJsX2NmZy50eF9kc2lfY2ZnLT5oc2Ff YmxhbmtpbmcpCisJCXN5bmNfY2ZnIHw9IERTSV9IU0FfQkxBTktJTkc7CisJaWYgKGN0cmxfY2Zn LT50eF9jdHJsX2NmZy50eF9kc2lfY2ZnLT5oYnBfYmxhbmtpbmcpCisJCXN5bmNfY2ZnIHw9IERT SV9IQlBfQkxBTktJTkc7CisJaWYgKGN0cmxfY2ZnLT50eF9jdHJsX2NmZy50eF9kc2lfY2ZnLT5o ZnBfYmxhbmtpbmcpCisJCXN5bmNfY2ZnIHw9IERTSV9IRlBfQkxBTktJTkc7CisJaWYgKGN0cmxf Y2ZnLT50eF9jdHJsX2NmZy50eF9kc2lfY2ZnLT5zeW5jX3B1bHNlX2V2ZW50bikKKwkJc3luY19j ZmcgfD0gRFNJX1NZTkNfUFVMU0VfRVZFTlROOworCWlmIChjdHJsX2NmZy0+dHhfY3RybF9jZmcu dHhfZHNpX2NmZy0+bHBtX2ZpcnN0X3ZzYV9saW5lKQorCQlzeW5jX2NmZyB8PSBEU0lfTFBNX0ZJ UlNUX1ZTQV9MSU5FOworCWlmIChjdHJsX2NmZy0+dHhfY3RybF9jZmcudHhfZHNpX2NmZy0+bHBt X2xhc3RfdmZwX2xpbmUpCisJCXN5bmNfY2ZnIHw9IERTSV9MUE1fTEFTVF9WRlBfTElORTsKKwor CS8qIEVuYWJsZSBmcmFtZSBnZW5lcmF0b3IgKi8KKwlmZ19lbiA9IDEgPDwgZmdfaWQ7CisJc3lu Y19jZmcgfD0gRlJBTUVfR0VOX0VOKGZnX2VuKTsKKworCWlmIChjdHJsX2NmZy0+dHhfY3RybF9j ZmcudHhfYWx3YXlzX3VzZV9oYWN0KQorCQlzeW5jX2NmZyB8PSBBTFdBWVNfVVNFX0hBQ1QoZmdf ZW4pOworCWlmIChjdHJsX2NmZy0+dHhfY3RybF9jZmcudHhfaGFjdF93YWl0X3N0b3ApCisJCXN5 bmNfY2ZnIHw9IEhBQ1RfV0FJVF9TVE9QKGZnX2VuKTsKKworCWRybV9kYmcoJmttYi0+ZHJtLCAi c3luY19jZmc9JWQgZmdfZW49JWRcbiIsIHN5bmNfY2ZnLCBmZ19lbik7CisKKwkvKiBNSVBJX1RY X0hTX0NUUkwgKi8KKworCS8qIHR5cGU6RFNJLCBzb3VyY2U6TENEICovCisJY3RybCA9IEhTX0NU UkxfRU4gfCBUWF9TT1VSQ0U7CisJY3RybCB8PSBMQ0RfVkMoZmdfaWQpOworCWN0cmwgfD0gQUNU SVZFX0xBTkVTKGN0cmxfY2ZnLT5hY3RpdmVfbGFuZXMgLSAxKTsKKwlpZiAoY3RybF9jZmctPnR4 X2N0cmxfY2ZnLnR4X2RzaV9jZmctPmVvdHBfZW4pCisJCWN0cmwgfD0gRFNJX0VPVFBfRU47CisJ aWYgKGN0cmxfY2ZnLT50eF9jdHJsX2NmZy50eF9kc2lfY2ZnLT5oZnBfYmxhbmtfZW4pCisJCWN0 cmwgfD0gRFNJX0NNRF9IRlBfRU47CisKKwkvKjY3IG5zIHN0b3AgdGltZSAqLworCWN0cmwgfD0g SFNFWElUX0NOVCgweDQzKTsKKworCWttYl93cml0ZV9taXBpKGttYiwgTUlQSV9UWG1fSFNfU1lO Q19DRkcoY3RybF9ubyksIHN5bmNfY2ZnKTsKKwlrbWJfd3JpdGVfbWlwaShrbWIsIE1JUElfVFht X0hTX0NUUkwoY3RybF9ubyksIGN0cmwpOworfQorCitzdGF0aWMgdTMyIG1pcGlfdHhfaW5pdF9j bnRybChzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIsCisJCQkgICAgICBzdHJ1Y3QgbWlwaV9j dHJsX2NmZyAqY3RybF9jZmcpCit7CisJdTMyIHJldCA9IDA7CisJdTggYWN0aXZlX3ZjaGFubmVs cyA9IDA7CisJdTggZnJhbWVfaWQsIHNlY3Q7CisJdTMyIGJpdHNfcGVyX3BjbGsgPSAwOworCXUz MiB3b3JkX2NvdW50ID0gMDsKKwlzdHJ1Y3QgbWlwaV90eF9mcmFtZV9jZmcgKmZyYW1lOworCisJ LyogVGhpcyBpcyB0aGUgb3JkZXIgdG8gaW5pdGlhbGl6ZSBNSVBJIFRYOgorCSAqIDEuIHNldCBm cmFtZSBzZWN0aW9uIHBhcmFtZXRlcnMKKwkgKiAyLiBzZXQgZnJhbWUgc3BlY2lmaWMgcGFyYW1l dGVycworCSAqIDMuIGNvbm5lY3QgbGNkIHRvIG1pcGkKKwkgKiA0LiBtdWx0aSBjaGFubmVsIGZp Zm8gY2ZnCisJICogNS4gc2V0IG1pcGl0eGNjdHJsY2ZnCisJICovCisKKwlmb3IgKGZyYW1lX2lk ID0gMDsgZnJhbWVfaWQgPCA0OyBmcmFtZV9pZCsrKSB7CisJCWZyYW1lID0gY3RybF9jZmctPnR4 X2N0cmxfY2ZnLmZyYW1lc1tmcmFtZV9pZF07CisKKwkJLyogRmluZCB2YWxpZCBmcmFtZSwgYXNz dW1lIG9ubHkgb25lIHZhbGlkIGZyYW1lICovCisJCWlmICghZnJhbWUpCisJCQljb250aW51ZTsK KworCQkvKiBGcmFtZSBTZWN0aW9uIGNvbmZpZ3VyYXRpb24gKi8KKwkJLyogVE9ETyAtIGFzc3Vt ZSB0aGVyZSBpcyBvbmx5IG9uZSB2YWxpZCBzZWN0aW9uIGluIGEgZnJhbWUsCisJCSAqIHNvIGJp dHNfcGVyX3BjbGsgYW5kIHdvcmRfY291bnQgYXJlIG9ubHkgc2V0IG9uY2UKKwkJICovCisJCWZv ciAoc2VjdCA9IDA7IHNlY3QgPCBNSVBJX0NUUkxfVklSVFVBTF9DSEFOTkVMUzsgc2VjdCsrKSB7 CisJCQlpZiAoIWZyYW1lLT5zZWN0aW9uc1tzZWN0XSkKKwkJCQljb250aW51ZTsKKworCQkJcmV0 ID0gbWlwaV90eF9mZ19zZWN0aW9uX2NmZyhrbWIsIGZyYW1lX2lkLCBzZWN0LAorCQkJCQkJICAg ICBmcmFtZS0+c2VjdGlvbnNbc2VjdF0sCisJCQkJCQkgICAgICZiaXRzX3Blcl9wY2xrLAorCQkJ CQkJICAgICAmd29yZF9jb3VudCk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0K KworCQkvKiBTZXQgZnJhbWUgc3BlY2lmaWMgcGFyYW1ldGVycyAqLworCQltaXBpX3R4X2ZnX2Nm ZyhrbWIsIGZyYW1lX2lkLCBjdHJsX2NmZy0+YWN0aXZlX2xhbmVzLAorCQkJICAgICAgIGJpdHNf cGVyX3BjbGssIHdvcmRfY291bnQsCisJCQkgICAgICAgY3RybF9jZmctPmxhbmVfcmF0ZV9tYnBz LCBmcmFtZSk7CisKKwkJYWN0aXZlX3ZjaGFubmVscysrOworCisJCS8qIFN0b3AgaXRlcmF0aW5n IGFzIG9ubHkgb25lIHZpcnR1YWwgY2hhbm5lbAorCQkgKiBzaGFsbCBiZSB1c2VkIGZvciBMQ0Qg Y29ubmVjdGlvbgorCQkgKi8KKwkJYnJlYWs7CisJfQorCisJaWYgKGFjdGl2ZV92Y2hhbm5lbHMg PT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJLyogTXVsdGktQ2hhbm5lbCBGSUZPIENvbmZpZ3Vy YXRpb24gKi8KKwltaXBpX3R4X211bHRpY2hhbm5lbF9maWZvX2NmZyhrbWIsIGN0cmxfY2ZnLT5h Y3RpdmVfbGFuZXMsIGZyYW1lX2lkKTsKKworCS8qIEZyYW1lIEdlbmVyYXRvciBFbmFibGUgKi8K KwltaXBpX3R4X2N0cmxfY2ZnKGttYiwgZnJhbWVfaWQsIGN0cmxfY2ZnKTsKKworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfbW9kZV9zZW5kKHN0cnVjdCBrbWJfZHJtX3ByaXZh dGUgKmttYiwgdTMyIGRwaHlfbm8sCisJCQkgICB1MzIgdGVzdF9jb2RlLCB1MzIgdGVzdF9kYXRh KQoreworCS8qIFN0ZXBzIHRvIHNlbmQgdGVzdCBjb2RlOgorCSAqIC0gc2V0IHRlc3RjbGsgSElH SAorCSAqIC0gc2V0IHRlc3RkaW4gd2l0aCB0ZXN0IGNvZGUKKwkgKiAtIHNldCB0ZXN0ZW4gSElH SAorCSAqIC0gc2V0IHRlc3RjbGsgTE9XCisJICogLSBzZXQgdGVzdGVuIExPVworCSAqLworCisJ LyogU2V0IHRlc3RjbGsgaGlnaCAqLworCVNFVF9EUEhZX1RFU1RfQ1RSTDFfQ0xLKGttYiwgZHBo eV9ubyk7CisKKwkvKiBTZXQgdGVzdGRpbiAqLworCVNFVF9URVNUX0RJTjBfMyhrbWIsIGRwaHlf bm8sIHRlc3RfY29kZSk7CisKKwkvKiBTZXQgdGVzdGVuIGhpZ2ggKi8KKwlTRVRfRFBIWV9URVNU X0NUUkwxX0VOKGttYiwgZHBoeV9ubyk7CisKKwkvKiBTZXQgdGVzdGNsayBsb3cgKi8KKwlDTFJf RFBIWV9URVNUX0NUUkwxX0NMSyhrbWIsIGRwaHlfbm8pOworCisJLyogU2V0IHRlc3RlbiBsb3cg Ki8KKwlDTFJfRFBIWV9URVNUX0NUUkwxX0VOKGttYiwgZHBoeV9ubyk7CisKKwlpZiAodGVzdF9j b2RlKSB7CisJCS8qICBTdGVwcyB0byBzZW5kIHRlc3QgZGF0YToKKwkJICogLSBzZXQgdGVzdGVu IExPVworCQkgKiAtIHNldCB0ZXN0Y2xrIExPVworCQkgKiAtIHNldCB0ZXN0ZGluIHdpdGggZGF0 YQorCQkgKiAtIHNldCB0ZXN0Y2xrIEhJR0gKKwkJICovCisKKwkJLyogU2V0IHRlc3RlbiBsb3cg Ki8KKwkJQ0xSX0RQSFlfVEVTVF9DVFJMMV9FTihrbWIsIGRwaHlfbm8pOworCisJCS8qIFNldCB0 ZXN0Y2xrIGxvdyAqLworCQlDTFJfRFBIWV9URVNUX0NUUkwxX0NMSyhrbWIsIGRwaHlfbm8pOwor CisJCS8qIFNldCBkYXRhIGluIHRlc3RkaW4gKi8KKwkJa21iX3dyaXRlX21pcGkoa21iLAorCQkJ ICAgICAgIERQSFlfVEVTVF9ESU4wXzMgKyAoKGRwaHlfbm8gLyAweDQpICogMHg0KSwKKwkJCSAg ICAgICB0ZXN0X2RhdGEgPDwgKChkcGh5X25vICUgNCkgKiA4KSk7CisKKwkJLyogU2V0IHRlc3Rj bGsgaGlnaCAqLworCQlTRVRfRFBIWV9URVNUX0NUUkwxX0NMSyhrbWIsIGRwaHlfbm8pOworCX0K K30KKworc3RhdGljIGlubGluZSB2b2lkCisJc2V0X3Rlc3RfbW9kZV9zcmNfb3NjX2ZyZXFfdGFy Z2V0X2xvd19iaXRzKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiwKKwkJCQkJCSAgIHUzMiBk cGh5X25vLAorCQkJCQkJICAgdTMyIGZyZXEpCit7CisJLyogVHlwaWNhbCByaXNlL2ZhbGwgdGlt ZT0xNjYsIHJlZmVyIFRhYmxlIDEyMDcgZGF0YWJvb2ssCisJICogc3Jfb3NjX2ZyZXFfdGFyZ2V0 Wzc6MF0KKwkgKi8KKwl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlfbm8sIFRFU1RfQ09ERV9TTEVX X1JBVEVfRERMX0NZQ0xFUywKKwkJICAgICAgIChmcmVxICYgMHg3ZikpOworfQorCitzdGF0aWMg aW5saW5lIHZvaWQKKwlzZXRfdGVzdF9tb2RlX3NyY19vc2NfZnJlcV90YXJnZXRfaGlfYml0cyhz dHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIsCisJCQkJCQkgIHUzMiBkcGh5X25vLAorCQkJCQkJ ICB1MzIgZnJlcSkKK3sKKwl1MzIgZGF0YTsKKworCS8qIEZsYWcgdGhpcyBhcyBoaWdoIG5pYmJs ZSAqLworCWRhdGEgPSAoKGZyZXEgPj4gNikgJiAweDFmKSB8ICgxIDw8IDcpOworCisJLyogVHlw aWNhbCByaXNlL2ZhbGwgdGltZT0xNjYsIHJlZmVyIFRhYmxlIDEyMDcgZGF0YWJvb2ssCisJICog c3Jfb3NjX2ZyZXFfdGFyZ2V0WzExOjddCisJICovCisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5 X25vLCBURVNUX0NPREVfU0xFV19SQVRFX0RETF9DWUNMRVMsIGRhdGEpOworfQorCitzdGF0aWMg dm9pZCBtaXBpX3R4X2dldF92Y29fcGFyYW1zKHN0cnVjdCB2Y29fcGFyYW1zICp2Y28pCit7CisJ aW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2Y29fdGFibGUpOyBpKyspIHsK KwkJaWYgKHZjby0+ZnJlcSA8IHZjb190YWJsZVtpXS5mcmVxKSB7CisJCQkqdmNvID0gdmNvX3Rh YmxlW2ldOworCQkJcmV0dXJuOworCQl9CisJfQorCisJV0FSTl9PTkNFKDEsICJJbnZhbGlkIHZj byBmcmVxID0gJXUgZm9yIFBMTCBzZXR1cFxuIiwgdmNvLT5mcmVxKTsKK30KKworc3RhdGljIHZv aWQgbWlwaV90eF9wbGxfc2V0dXAoc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iLCB1MzIgZHBo eV9ubywKKwkJCSAgICAgIHUzMiByZWZfY2xrX21oeiwgdTMyIHRhcmdldF9mcmVxX21oeikKK3sK Kwl1MzIgYmVzdF9uID0gMCwgYmVzdF9tID0gMDsKKwl1MzIgbiA9IDAsIG0gPSAwLCBkaXYgPSAw LCBkZWx0YSwgZnJlcSA9IDAsIHRfZnJlcTsKKwl1MzIgYmVzdF9mcmVxX2RlbHRhID0gMzAwMDsK KworCS8qIHBsbF9yZWZfY2xrOiAtIHZhbGlkIHJhbmdlOiAyfjY0IE1IejsgVHlwaWNhbGx5IDI0 IE1IegorCSAqIEZ2Y286IC0gdmFsaWQgcmFuZ2U6IDMyMH4xMjUwIE1IeiAoR2VuMyBELVBIWSkK KwkgKiBGb3V0OiAtIHZhbGlkIHJhbmdlOiA0MH4xMjUwIE1IeiAoR2VuMyBELVBIWSkKKwkgKiBu OiAtIHZhbGlkIHJhbmdlIFswIDE1XQorCSAqIE46IC0gTiA9IG4gKyAxCisJICogICAgICAtdmFs aWQgcmFuZ2U6IFsxIDE2XQorCSAqICAgICAgLWNvbmRpdGlvbnM6IC0gKHBsbF9yZWZfY2xrIC8g TikgPj0gMiBNSHoKKwkgKiAgICAgICAgICAgICAgLShwbGxfcmVmX2NsayAvIE4pIDw9IDggTUh6 CisJICogbTogdmFsaWQgcmFuZ2UgWzYyIDYyM10KKwkgKiBNOiAtIE0gPSBtICsgMgorCSAqICAg ICAgLXZhbGlkIHJhbmdlIFs2NCA2MjVdCisJICogICAgICAtRnZjbyA9IChNL04pICogcGxsX3Jl Zl9jbGsKKwkgKi8KKwlzdHJ1Y3QgdmNvX3BhcmFtcyB2Y29fcCA9IHsKKwkJLnJhbmdlID0gMCwK KwkJLmRpdmlkZXIgPSAxLAorCX07CisKKwl2Y29fcC5mcmVxID0gdGFyZ2V0X2ZyZXFfbWh6Owor CW1pcGlfdHhfZ2V0X3Zjb19wYXJhbXMoJnZjb19wKTsKKworCS8qIFNlYXJjaCBwbGwgbiBwYXJh bWV0ZXIgKi8KKwlmb3IgKG4gPSBQTExfTl9NSU47IG4gPD0gUExMX05fTUFYOyBuKyspIHsKKwkJ LyogQ2FsY3VsYXRlIHRoZSBwbGwgaW5wdXQgZnJlcXVlbmN5IGRpdmlzaW9uIHJhdGlvCisJCSAq IG11bHRpcGx5IGJ5IDEwMDAgZm9yIHByZWNpc2lvbiAtCisJCSAqIG5vIGZsb2F0aW5nIHBvaW50 LCBhZGQgbiBmb3Igcm91bmRpbmcKKwkJICovCisJCWRpdiA9ICgocmVmX2Nsa19taHogKiAxMDAw KSArIG4pIC8gKG4gKyAxKTsKKworCQkvKiBGb3VuZCBhIHZhbGlkIG4gcGFyYW1ldGVyICovCisJ CWlmICgoZGl2IDwgMjAwMCB8fCBkaXYgPiA4MDAwKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFNl YXJjaCBwbGwgbSBwYXJhbWV0ZXIgKi8KKwkJZm9yIChtID0gUExMX01fTUlOOyBtIDw9IFBMTF9N X01BWDsgbSsrKSB7CisJCQkvKiBDYWxjdWxhdGUgdGhlIEZ2Y28oRFBIWSBQTEwgb3V0cHV0IGZy ZXF1ZW5jeSkKKwkJCSAqIHVzaW5nIHRoZSBjdXJyZW50IG4sbSBwYXJhbXMKKwkJCSAqLworCQkJ ZnJlcSA9IGRpdiAqIChtICsgMik7CisJCQlmcmVxIC89IDEwMDA7CisKKwkJCS8qIFRyaW0gdGhl IHBvdGVudGlhbCBwbGwgZnJlcSB0byBtYXggc3VwcG9ydGVkICovCisJCQlpZiAoZnJlcSA+IFBM TF9GVkNPX01BWCkKKwkJCQljb250aW51ZTsKKworCQkJZGVsdGEgPSBhYnMoZnJlcSAtIHRhcmdl dF9mcmVxX21oeik7CisKKwkJCS8qIFNlbGVjdCB0aGUgYmVzdCAoY2xvc2VzdCB0byB0YXJnZXQg cGxsIGZyZXEpCisJCQkgKiBuLG0gcGFyYW1ldGVycyBzbyBmYXIKKwkJCSAqLworCQkJaWYgKGRl bHRhIDwgYmVzdF9mcmVxX2RlbHRhKSB7CisJCQkJYmVzdF9uID0gbjsKKwkJCQliZXN0X20gPSBt OworCQkJCWJlc3RfZnJlcV9kZWx0YSA9IGRlbHRhOworCQkJfQorCQl9CisJfQorCisJLyogUHJv Z3JhbSB2Y29fY250cmwgcGFyYW1ldGVyCisJICogUExMX1ZDT19Db250cm9sWzU6MF0gPSBwbGxf dmNvX2NudHJsX292ciwKKwkgKiBQTExfVkNPX0NvbnRyb2xbNl0gICA9IHBsbF92Y29fY250cmxf b3ZyX2VuCisJICovCisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCBURVNUX0NPREVfUExM X1ZDT19DVFJMLCAodmNvX3AucmFuZ2UKKwkJCQkJCQkJfCAoMSA8PCA2KSkpOworCisJLyogUHJv Z3JhbSBtLCBuIHBsbCBwYXJhbWV0ZXJzICovCisJZHJtX2RiZygma21iLT5kcm0sICJtID0gJWQg biA9ICVkXG4iLCBiZXN0X20sIGJlc3Rfbik7CisKKwkvKiBQTExfSW5wdXRfRGl2aWRlcl9SYXRp b1szOjBdID0gcGxsX25fb3ZyICovCisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCBURVNU X0NPREVfUExMX0lOUFVUX0RJVklERVIsCisJCSAgICAgICAoYmVzdF9uICYgMHgwZikpOworCisJ LyogbSAtIGxvdyBuaWJibGUgUExMX0xvb3BfRGl2aWRlcl9SYXRpb1s0OjBdCisJICogcGxsX21f b3ZyWzQ6MF0KKwkgKi8KKwl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlfbm8sIFRFU1RfQ09ERV9Q TExfRkVFREJBQ0tfRElWSURFUiwKKwkJICAgICAgIChiZXN0X20gJiAweDFmKSk7CisKKwkvKiBt IC0gaGlnaCBuaWJibGUgUExMX0xvb3BfRGl2aWRlcl9SYXRpb1s0OjBdCisJICogcGxsX21fb3Zy Wzk6NV0KKwkgKi8KKwl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlfbm8sIFRFU1RfQ09ERV9QTExf RkVFREJBQ0tfRElWSURFUiwKKwkJICAgICAgICgoYmVzdF9tID4+IDUpICYgMHgxZikgfCBQTExf RkVFREJBQ0tfRElWSURFUl9ISUdIKTsKKworCS8qIEVuYWJsZSBvdmVyd3JpdGUgb2YgbixtIHBh cmFtZXRlcnMgOnBsbF9uX292cl9lbiwgcGxsX21fb3ZyX2VuICovCisJdGVzdF9tb2RlX3NlbmQo a21iLCBkcGh5X25vLCBURVNUX0NPREVfUExMX09VVFBVVF9DTEtfU0VMLAorCQkgICAgICAgKFBM TF9OX09WUl9FTiB8IFBMTF9NX09WUl9FTikpOworCisJLyogUHJvZ3JhbSBDaGFyZ2UtUHVtcCBw YXJhbWV0ZXJzICovCisKKwkvKiBwbGxfcHJvcF9jbnRybC1maXhlZCB2YWx1ZXMgZm9yIHByb3Bf Y250cmwgZnJvbSBEUEhZIGRvYyAqLworCXRfZnJlcSA9IHRhcmdldF9mcmVxX21oeiAqIHZjb19w LmRpdmlkZXI7CisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLAorCQkgICAgICAgVEVTVF9D T0RFX1BMTF9QUk9QT1JUSU9OQUxfQ0hBUkdFX1BVTVBfQ1RSTCwKKwkJICAgICAgICgodF9mcmVx ID4gMTE1MCkgPyAweDBDIDogMHgwQikpOworCisJLyogcGxsX2ludF9jbnRybC1maXhlZCB2YWx1 ZSBmb3IgaW50X2NudHJsIGZyb20gRFBIWSBkb2MgKi8KKwl0ZXN0X21vZGVfc2VuZChrbWIsIGRw aHlfbm8sIFRFU1RfQ09ERV9QTExfSU5URUdSQUxfQ0hBUkdFX1BVTVBfQ1RSTCwKKwkJICAgICAg IDB4MDApOworCisJLyogcGxsX2dtcF9jbnRybC1maXhlZCB2YWx1ZSBmb3IgZ21wX2NudHJsIGZy b20gRFBIWSBkb2NpICovCisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCBURVNUX0NPREVf UExMX0dNUF9DVFJMLCAweDEwKTsKKworCS8qIHBsbF9jcGJpYXNfY250cmwtZml4ZWQgdmFsdWUg Zm9yIGNwYmlhc19jbnRybCBmcm9tIERQSFkgZG9jICovCisJdGVzdF9tb2RlX3NlbmQoa21iLCBk cGh5X25vLCBURVNUX0NPREVfUExMX0NIQVJHRV9QVU1QX0JJQVMsIDB4MTApOworCisJLyogcGxs X3RoMSAtTG9jayBEZXRlY3RvciBQaGFzZSBlcnJvciB0aHJlc2hvbGQsCisJICogZG9jdW1lbnQg Z2l2ZXMgZml4ZWQgdmFsdWUKKwkgKi8KKwl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlfbm8sIFRF U1RfQ09ERV9QTExfUEhBU0VfRVJSX0NUUkwsIDB4MDIpOworCisJLyogUExMIExvY2sgQ29uZmln dXJhdGlvbiAqLworCisJLyogcGxsX3RoMiAtIExvY2sgRmlsdGVyIGxlbmd0aCwgZG9jdW1lbnQg Z2l2ZXMgZml4ZWQgdmFsdWUgKi8KKwl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlfbm8sIFRFU1Rf Q09ERV9QTExfTE9DS19GSUxURVIsIDB4NjApOworCisJLyogcGxsX3RoMy0gUExMIFVubG9ja2lu ZyBmaWx0ZXIsIGRvY3VtZW50IGdpdmVzIGZpeGVkIHZhbHVlICovCisJdGVzdF9tb2RlX3NlbmQo a21iLCBkcGh5X25vLCBURVNUX0NPREVfUExMX1VOTE9DS19GSUxURVIsIDB4MDMpOworCisJLyog cGxsX2xvY2tfc2VsLVBMTCBMb2NrIERldGVjdG9yIFNlbGVjdGlvbiwKKwkgKiBkb2N1bWVudCBn aXZlcyBmaXhlZCB2YWx1ZQorCSAqLworCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywgVEVT VF9DT0RFX1BMTF9MT0NLX0RFVEVDVE9SLCAweDAyKTsKK30KKworc3RhdGljIHZvaWQgc2V0X3Ns ZXdyYXRlX2d0XzE1MDAoc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iLCB1MzIgZHBoeV9ubykK K3sKKwl1MzIgdGVzdF9jb2RlID0gMCwgdGVzdF9kYXRhID0gMDsKKwkvKiBCeXBhc3Mgc2xldyBy YXRlIGNhbGlicmF0aW9uIGFsZ29yaXRobQorCSAqIGJpdHNbMTowfSBzcmNhbF9lbl9vdnJfZW4s IHNyY2FsX2VuX292cgorCSAqLworCXRlc3RfY29kZSA9IFRFU1RfQ09ERV9TTEVXX1JBVEVfT1ZF UlJJREVfQ1RSTDsKKwl0ZXN0X2RhdGEgPSAweDAyOworCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBo eV9ubywgdGVzdF9jb2RlLCB0ZXN0X2RhdGEpOworCisJLyogRGlzYWJsZSBzbGV3IHJhdGUgY2Fs aWJyYXRpb24gKi8KKwl0ZXN0X2NvZGUgPSBURVNUX0NPREVfU0xFV19SQVRFX0RETF9MT09QX0NU Ukw7CisJdGVzdF9kYXRhID0gMHgwMDsKKwl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlfbm8sIHRl c3RfY29kZSwgdGVzdF9kYXRhKTsKK30KKworc3RhdGljIHZvaWQgc2V0X3NsZXdyYXRlX2d0XzEw MDAoc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iLCB1MzIgZHBoeV9ubykKK3sKKwl1MzIgdGVz dF9jb2RlID0gMCwgdGVzdF9kYXRhID0gMDsKKworCS8qIEJpdFJhdGU6ID4gMSBHYnBzICYmIDw9 IDEuNSBHYnBzOiAtIHNsZXcgcmF0ZSBjb250cm9sIE9OCisJICogdHlwaWNhbCByaXNlL2ZhbGwg dGltZXM6IDE2NiBwcworCSAqLworCisJLyogRG8gbm90IGJ5cGFzcyBzbGV3IHJhdGUgY2FsaWJy YXRpb24gYWxnb3JpdGhtCisJICogYml0c1sxOjB9PXNyY2FsX2VuX292cl9lbiwgc3JjYWxfZW5f b3ZyLCBiaXRbNl09c3JfcmFuZ2UKKwkgKi8KKwl0ZXN0X2NvZGUgPSBURVNUX0NPREVfU0xFV19S QVRFX09WRVJSSURFX0NUUkw7CisJdGVzdF9kYXRhID0gKDB4MDMgfCAoMSA8PCA2KSk7CisJdGVz dF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCB0ZXN0X2NvZGUsIHRlc3RfZGF0YSk7CisKKwkvKiBF bmFibGUgc2xldyByYXRlIGNhbGlicmF0aW9uICovCisJdGVzdF9jb2RlID0gVEVTVF9DT0RFX1NM RVdfUkFURV9ERExfTE9PUF9DVFJMOworCXRlc3RfZGF0YSA9IDB4MDE7CisJdGVzdF9tb2RlX3Nl bmQoa21iLCBkcGh5X25vLCB0ZXN0X2NvZGUsIHRlc3RfZGF0YSk7CisKKwkvKiBTZXQgc3Jfb3Nj X2ZyZXFfdGFyZ2V0WzY6MF0gbG93IG5pYmJsZQorCSAqIHR5cGljYWwgcmlzZS9mYWxsIHRpbWU9 MTY2LCByZWZlciBUYWJsZSAxMjA3IGRhdGFib29rCisJICovCisJdGVzdF9jb2RlID0gVEVTVF9D T0RFX1NMRVdfUkFURV9ERExfQ1lDTEVTOworCXRlc3RfZGF0YSA9ICgweDcyZiAmIDB4N2YpOwor CXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywgdGVzdF9jb2RlLCB0ZXN0X2RhdGEpOworCisJ LyogU2V0IHNyX29zY19mcmVxX3RhcmdldFsxMTo3XSBoaWdoIG5pYmJsZQorCSAqIFR5cGljYWwg cmlzZS9mYWxsIHRpbWU9MTY2LCByZWZlciBUYWJsZSAxMjA3IGRhdGFib29rCisJICovCisJdGVz dF9jb2RlID0gVEVTVF9DT0RFX1NMRVdfUkFURV9ERExfQ1lDTEVTOworCXRlc3RfZGF0YSA9ICgo MHg3MmYgPj4gNikgJiAweDFmKSB8ICgxIDw8IDcpOworCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBo eV9ubywgdGVzdF9jb2RlLCB0ZXN0X2RhdGEpOworfQorCitzdGF0aWMgdm9pZCBzZXRfc2xld3Jh dGVfbHRfMTAwMChzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIsIHUzMiBkcGh5X25vKQorewor CXUzMiB0ZXN0X2NvZGUgPSAwLCB0ZXN0X2RhdGEgPSAwOworCisJLyogbGFuZV9yYXRlX21icHMg PD0gMTAwMCBNYnBzCisJICogQml0UmF0ZTogIDw9IDEgR2JwczoKKwkgKiAtIHNsZXcgcmF0ZSBj b250cm9sIE9OCisJICogLSB0eXBpY2FsIHJpc2UvZmFsbCB0aW1lczogMjI1IHBzCisJICovCisK KwkvKiBEbyBub3QgYnlwYXNzIHNsZXcgcmF0ZSBjYWxpYnJhdGlvbiBhbGdvcml0aG0gKi8KKwl0 ZXN0X2NvZGUgPSBURVNUX0NPREVfU0xFV19SQVRFX09WRVJSSURFX0NUUkw7CisJdGVzdF9kYXRh ID0gKDB4MDMgfCAoMSA8PCA2KSk7CisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCB0ZXN0 X2NvZGUsIHRlc3RfZGF0YSk7CisKKwkvKiBFbmFibGUgc2xldyByYXRlIGNhbGlicmF0aW9uICov CisJdGVzdF9jb2RlID0gVEVTVF9DT0RFX1NMRVdfUkFURV9ERExfTE9PUF9DVFJMOworCXRlc3Rf ZGF0YSA9IDB4MDE7CisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCB0ZXN0X2NvZGUsIHRl c3RfZGF0YSk7CisKKwkvKiBUeXBpY2FsIHJpc2UvZmFsbCB0aW1lPTI1NSwgcmVmZXIgVGFibGUg MTIwNyBkYXRhYm9vayAqLworCXRlc3RfY29kZSA9IFRFU1RfQ09ERV9TTEVXX1JBVEVfRERMX0NZ Q0xFUzsKKwl0ZXN0X2RhdGEgPSAoMHg1MjMgJiAweDdmKTsKKwl0ZXN0X21vZGVfc2VuZChrbWIs IGRwaHlfbm8sIHRlc3RfY29kZSwgdGVzdF9kYXRhKTsKKworCS8qIFNldCBzcl9vc2NfZnJlcV90 YXJnZXRbMTE6N10gaGlnaCBuaWJibGUgKi8KKwl0ZXN0X2NvZGUgPSBURVNUX0NPREVfU0xFV19S QVRFX0RETF9DWUNMRVM7CisJdGVzdF9kYXRhID0gKCgweDUyMyA+PiA2KSAmIDB4MWYpIHwgKDEg PDwgNyk7CisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCB0ZXN0X2NvZGUsIHRlc3RfZGF0 YSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX3BsbChzdHJ1Y3Qga21iX2RybV9wcml2YXRlICpr bWIsIHUzMiBkcGh5X25vLAorCQkgICAgICBzdHJ1Y3QgbWlwaV9jdHJsX2NmZyAqY2ZnKQorewor CXUzMiB0ZXN0X2NvZGUgPSAwLCB0ZXN0X2RhdGEgPSAwOworCisJLyogU2V0IFBMTCByZWd1bGF0 b3IgaW4gYnlwYXNzICovCisJdGVzdF9jb2RlID0gVEVTVF9DT0RFX1BMTF9BTkFMT0dfUFJPRzsK Kwl0ZXN0X2RhdGEgPSAweDAxOworCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywgdGVzdF9j b2RlLCB0ZXN0X2RhdGEpOworCisJLyogUExMIFBhcmFtZXRlcnMgU2V0dXAgKi8KKwltaXBpX3R4 X3BsbF9zZXR1cChrbWIsIGRwaHlfbm8sIGNmZy0+cmVmX2Nsa19raHogLyAxMDAwLAorCQkJICBj ZmctPmxhbmVfcmF0ZV9tYnBzIC8gMik7CisKKwkvKiBTZXQgY2xrc2VsICovCisJa21iX3dyaXRl X2JpdHNfbWlwaShrbWIsIERQSFlfSU5JVF9DVFJMMSwgUExMX0NMS1NFTF8wLCAyLCAweDAxKTsK KworCS8qIFNldCBwbGxfc2hhZG93X2NvbnRyb2wgKi8KKwlrbWJfc2V0X2JpdF9taXBpKGttYiwg RFBIWV9JTklUX0NUUkwxLCBQTExfU0hBRE9XX0NUUkwpOworfQorCitzdGF0aWMgdm9pZCBzZXRf bGFuZV9kYXRhX3JhdGUoc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iLCB1MzIgZHBoeV9ubywK KwkJCSAgICAgICBzdHJ1Y3QgbWlwaV9jdHJsX2NmZyAqY2ZnKQoreworCXUzMiBpLCB0ZXN0X2Nv ZGUgPSAwLCB0ZXN0X2RhdGEgPSAwOworCisJZm9yIChpID0gMDsgaSA8IE1JUElfRFBIWV9ERUZB VUxUX0JJVF9SQVRFUzsgaSsrKSB7CisJCWlmIChtaXBpX2hzX2ZyZXFfcmFuZ2VbaV0uZGVmYXVs dF9iaXRfcmF0ZV9tYnBzIDwKKwkJICAgIGNmZy0+bGFuZV9yYXRlX21icHMpCisJCQljb250aW51 ZTsKKworCQkvKiBTZW5kIHRoZSB0ZXN0IGNvZGUgYW5kIGRhdGEgKi8KKwkJLyogYml0WzY6MF0g PSBoc2ZyZXFyYW5nZV9vdnIgYml0WzddID0gaHNmcmVxcmFuZ2Vfb3ZyX2VuICovCisJCXRlc3Rf Y29kZSA9IFRFU1RfQ09ERV9IU19GUkVRX1JBTkdFX0NGRzsKKwkJdGVzdF9kYXRhID0gKG1pcGlf aHNfZnJlcV9yYW5nZVtpXS5oc2ZyZXFyYW5nZV9jb2RlICYgMHg3ZikgfAorCQkgICAgKDEgPDwg Nyk7CisJCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywgdGVzdF9jb2RlLCB0ZXN0X2RhdGEp OworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRwaHlfaW5pdF9zZXF1ZW5jZShzdHJ1 Y3Qga21iX2RybV9wcml2YXRlICprbWIsCisJCQkgICAgICAgc3RydWN0IG1pcGlfY3RybF9jZmcg KmNmZywgdTMyIGRwaHlfbm8sCisJCQkgICAgICAgaW50IGFjdGl2ZV9sYW5lcywgZW51bSBkcGh5 X21vZGUgbW9kZSkKK3sKKwl1MzIgdGVzdF9jb2RlID0gMCwgdGVzdF9kYXRhID0gMCwgdmFsOwor CisJLyogU2V0IEQtUEhZIGluIHNodXRkb3duIG1vZGUgKi8KKwkvKiBBc3NlcnQgUlNUWiBzaWdu YWwgKi8KKwlDTFJfRFBIWV9JTklUX0NUUkwwKGttYiwgZHBoeV9ubywgUkVTRVRaKTsKKworCS8q IEFzc2VydCBTSFVURE9XTlogc2lnbmFsICovCisJQ0xSX0RQSFlfSU5JVF9DVFJMMChrbWIsIGRw aHlfbm8sIFNIVVRET1dOWik7CisJdmFsID0ga21iX3JlYWRfbWlwaShrbWIsIERQSFlfSU5JVF9D VFJMMCk7CisKKwkvKiBJbml0IEQtUEhZX24KKwkgKiBQdWxzZSB0ZXN0Y2xlYXIgc2lnbmFsIHRv IG1ha2Ugc3VyZSB0aGUgZC1waHkgY29uZmlndXJhdGlvbgorCSAqIHN0YXJ0cyBmcm9tIGEgY2xl YW4gYmFzZQorCSAqLworCUNMUl9EUEhZX1RFU1RfQ1RSTDAoa21iLCBkcGh5X25vKTsKKwluZGVs YXkoMTUpOworCVNFVF9EUEhZX1RFU1RfQ1RSTDAoa21iLCBkcGh5X25vKTsKKwluZGVsYXkoMTUp OworCUNMUl9EUEhZX1RFU1RfQ1RSTDAoa21iLCBkcGh5X25vKTsKKwluZGVsYXkoMTUpOworCisJ LyogU2V0IG1hc3Rlcm1hY3JvIGJpdCAtIE1hc3RlciBvciBzbGF2ZSBtb2RlICovCisJdGVzdF9j b2RlID0gVEVTVF9DT0RFX01VTFRJUExFX1BIWV9DVFJMOworCisJLyogRFBIWSBoYXMgaXRzIG93 biBjbG9jayBsYW5lIGVuYWJsZWQgKG1hc3RlcikgKi8KKwlpZiAobW9kZSA9PSBNSVBJX0RQSFlf TUFTVEVSKQorCQl0ZXN0X2RhdGEgPSAweDAxOworCWVsc2UKKwkJdGVzdF9kYXRhID0gMHgwMDsK KworCS8qIFNlbmQgdGhlIHRlc3QgY29kZSBhbmQgZGF0YSAqLworCXRlc3RfbW9kZV9zZW5kKGtt YiwgZHBoeV9ubywgdGVzdF9jb2RlLCB0ZXN0X2RhdGEpOworCisJLyogU2V0IHRoZSBsYW5lIGRh dGEgcmF0ZSAqLworCXNldF9sYW5lX2RhdGFfcmF0ZShrbWIsIGRwaHlfbm8sIGNmZyk7CisKKwkv KiBIaWdoLVNwZWVkIFR4IFNsZXcgUmF0ZSBDYWxpYnJhdGlvbgorCSAqIEJpdFJhdGU6ID4gMS41 IEdicHMgJiYgPD0gMi41IEdicHM6IHNsZXcgcmF0ZSBjb250cm9sIE9GRgorCSAqLworCWlmIChj ZmctPmxhbmVfcmF0ZV9tYnBzID4gMTUwMCkKKwkJc2V0X3NsZXdyYXRlX2d0XzE1MDAoa21iLCBk cGh5X25vKTsKKwllbHNlIGlmIChjZmctPmxhbmVfcmF0ZV9tYnBzID4gMTAwMCkKKwkJc2V0X3Ns ZXdyYXRlX2d0XzEwMDAoa21iLCBkcGh5X25vKTsKKwllbHNlCisJCXNldF9zbGV3cmF0ZV9sdF8x MDAwKGttYiwgZHBoeV9ubyk7CisKKwkvKiBTZXQgY2ZnY2xrZnJlcXJhbmdlICovCisJdmFsID0g KCgoY2ZnLT5jZmdfY2xrX2toeiAvIDEwMDApIC0gMTcpICogNCkgJiAweDNmOworCVNFVF9EUEhZ X0ZSRVFfQ1RSTDBfMyhrbWIsIGRwaHlfbm8sIHZhbCk7CisKKwkvKiBFbmFibGUgY29uZmlnIGNs ayBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZC1waHkgKi8KKwlrbWJfc2V0X2JpdF9taXBpKGttYiwg RFBIWV9DRkdfQ0xLX0VOLCBkcGh5X25vKTsKKworCS8qIFBMTCBzZXR1cCAqLworCWlmIChtb2Rl ID09IE1JUElfRFBIWV9NQVNURVIpCisJCXNldHVwX3BsbChrbWIsIGRwaHlfbm8sIGNmZyk7CisK KwkvKiBTZW5kIE5PUk1BTCBPUEVSQVRJT04gdGVzdCBjb2RlICovCisJdGVzdF9jb2RlID0gMHgw OworCXRlc3RfZGF0YSA9IDB4MDsKKwl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlfbm8sIHRlc3Rf Y29kZSwgdGVzdF9kYXRhKTsKKworCS8qIENvbmZpZ3VyZSBCQVNFRElSIGZvciBkYXRhIGxhbmVz CisJICogTk9URTogYmFzZWRpciBvbmx5IGFwcGxpZXMgdG8gTEFORV8wIG9mIGVhY2ggRC1QSFku CisJICogVGhlIG90aGVyIGxhbmVzIGtlZXAgdGhlaXIgZGlyZWN0aW9uIGJhc2VkIG9uIHRoZSBE LVBIWSB0eXBlLAorCSAqIGVpdGhlciBSeCBvciBUeC4KKwkgKiBiaXRzWzU6MF0gIC0gQmFzZURp cjogMSA9IFJ4CisJICogYml0c1s5OjZdIC0gQmFzZURpcjogMCA9IFR4CisJICovCisJa21iX3dy aXRlX2JpdHNfbWlwaShrbWIsIERQSFlfSU5JVF9DVFJMMiwgMCwgOSwgMHgwM2YpOworCW5kZWxh eSgxNSk7CisKKwkvKiBFbmFibGUgQ0xPQ0sgTEFORQorCSAqIENsb2NrIGxhbmUgc2hvdWxkIGJl IGVuYWJsZWQgcmVnYXJkbGVzcyBvZiB0aGUgZGlyZWN0aW9uCisJICogc2V0IGZvciB0aGUgRC1Q SFkgKFJ4L1R4KQorCSAqLworCWttYl9zZXRfYml0X21pcGkoa21iLCBEUEhZX0lOSVRfQ1RSTDIs IDEyICsgZHBoeV9ubyk7CisKKwkvKiBFbmFibGUgREFUQSBMQU5FUyAqLworCWttYl93cml0ZV9i aXRzX21pcGkoa21iLCBEUEhZX0VOQUJMRSwgZHBoeV9ubyAqIDIsIDIsCisJCQkgICAgKCgxIDw8 IGFjdGl2ZV9sYW5lcykgLSAxKSk7CisKKwluZGVsYXkoMTUpOworCisJLyogVGFrZSBELVBIWSBv dXQgb2Ygc2h1dGRvd24gbW9kZSAqLworCS8qIERlYXNzZXJ0IFNIVVRET1dOWiBzaWduYWwgKi8K KwlTRVRfRFBIWV9JTklUX0NUUkwwKGttYiwgZHBoeV9ubywgU0hVVERPV05aKTsKKwluZGVsYXko MTUpOworCisJLyogRGVhc3NlcnQgUlNUWiBzaWduYWwgKi8KKwlTRVRfRFBIWV9JTklUX0NUUkww KGttYiwgZHBoeV9ubywgUkVTRVRaKTsKK30KKworc3RhdGljIHZvaWQgZHBoeV93YWl0X2ZzbShz dHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIsIHUzMiBkcGh5X25vLAorCQkJICBlbnVtIGRwaHlf dHhfZnNtIGZzbV9zdGF0ZSkKK3sKKwllbnVtIGRwaHlfdHhfZnNtIHZhbCA9IERQSFlfVFhfUE9X RVJEV047CisJaW50IGkgPSAwOworCWludCBzdGF0dXMgPSAxOworCisJZG8geworCQl0ZXN0X21v ZGVfc2VuZChrbWIsIGRwaHlfbm8sIFRFU1RfQ09ERV9GU01fQ09OVFJPTCwgMHg4MCk7CisKKwkJ dmFsID0gR0VUX1RFU1RfRE9VVDRfNyhrbWIsIGRwaHlfbm8pOworCQlpKys7CisJCWlmIChpID4g VElNRU9VVCkgeworCQkJc3RhdHVzID0gMDsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAodmFs ICE9IGZzbV9zdGF0ZSk7CisKKwlkcm1fZGJnKCZrbWItPmRybSwgIiVzOiBkcGh5ICVkIHZhbCA9 ICV4IiwgX19mdW5jX18sIGRwaHlfbm8sIHZhbCk7CisJZHJtX2RiZygma21iLT5kcm0sICIqIERQ SFkgJWQgV0FJVF9GU00gJXMgKiIsCisJCWRwaHlfbm8sIHN0YXR1cyA/ICJTVUNDRVNTIiA6ICJG QUlMRUQiKTsKK30KKworc3RhdGljIHZvaWQgd2FpdF9pbml0X2RvbmUoc3RydWN0IGttYl9kcm1f cHJpdmF0ZSAqa21iLCB1MzIgZHBoeV9ubywKKwkJCSAgIHUzMiBhY3RpdmVfbGFuZXMpCit7CisJ dTMyIHN0b3BzdGF0ZWRhdGEgPSAwOworCXUzMiBkYXRhX2xhbmVzID0gKDEgPDwgYWN0aXZlX2xh bmVzKSAtIDE7CisJaW50IGkgPSAwLCB2YWw7CisJaW50IHN0YXR1cyA9IDE7CisKKwlkbyB7CisJ CXZhbCA9IGttYl9yZWFkX21pcGkoa21iLCBNSVBJX0RQSFlfU1RBVDRfNyk7CisJCXN0b3BzdGF0 ZWRhdGEgPSBHRVRfU1RPUFNUQVRFX0RBVEEoa21iLCBkcGh5X25vKSAmIGRhdGFfbGFuZXM7CisK KwkJLyogVE9ETy1uZWVkIHRvIGFkZCBhIHRpbWUgb3V0IGFuZCByZXR1cm4gZmFpbHVyZSAqLwor CQlpKys7CisKKwkJaWYgKGkgPiBUSU1FT1VUKSB7CisJCQlzdGF0dXMgPSAwOworCQkJZHJtX2Ri Zygma21iLT5kcm0sCisJCQkJIiEgV0FJVF9JTklUX0RPTkU6IFRJTUlORyBPVVQhKGVycl9zdGF0 PSVkKSIsCisJCQkJa21iX3JlYWRfbWlwaShrbWIsIE1JUElfRFBIWV9FUlJfU1RBVDZfNykpOwor CQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlIChzdG9wc3RhdGVkYXRhICE9IGRhdGFfbGFuZXMpOwor CisJZHJtX2RiZygma21iLT5kcm0sICIqIERQSFkgJWQgSU5JVCAtICVzICoiLAorCQlkcGh5X25v LCBzdGF0dXMgPyAiU1VDQ0VTUyIgOiAiRkFJTEVEIik7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRf cGxsX2xvY2soc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iLCB1MzIgZHBoeV9ubykKK3sKKwlp bnQgaSA9IDA7CisJaW50IHN0YXR1cyA9IDE7CisKKwlkbyB7CisJCS8qIFRPRE8tbmVlZCB0byBh ZGQgYSB0aW1lIG91dCBhbmQgcmV0dXJuIGZhaWx1cmUgKi8KKwkJaSsrOworCQlpZiAoaSA+IFRJ TUVPVVQpIHsKKwkJCXN0YXR1cyA9IDA7CisJCQlkcm1fZGJnKCZrbWItPmRybSwgIiVzOiB0aW1p bmcgb3V0IiwgX19mdW5jX18pOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlICghR0VUX1BMTF9M T0NLKGttYiwgZHBoeV9ubykpOworCisJZHJtX2RiZygma21iLT5kcm0sICIqIFBMTCBMb2NrZWQg Zm9yIERQSFkgJWQgLSAlcyAqIiwKKwkJZHBoeV9ubywgc3RhdHVzID8gIlNVQ0NFU1MiIDogIkZB SUxFRCIpOworfQorCitzdGF0aWMgdTMyIG1pcGlfdHhfaW5pdF9kcGh5KHN0cnVjdCBrbWJfZHJt X3ByaXZhdGUgKmttYiwKKwkJCSAgICAgc3RydWN0IG1pcGlfY3RybF9jZmcgKmNmZykKK3sKKwl1 MzIgZHBoeV9ubyA9IE1JUElfRFBIWTY7CisKKwkvKiBNdWx0aXBsZSBELVBIWXMgbmVlZGVkICov CisJaWYgKGNmZy0+YWN0aXZlX2xhbmVzID4gTUlQSV9EUEhZX0RfTEFORVMpIHsKKwkJLyoKKwkJ ICpJbml0aWFsaXphdGlvbiBmb3IgVHggYWdncmVnYXRpb24gbW9kZSBpcyBkb25lIGFjY29yZGlu ZyB0bworCQkgKmEuIHN0YXJ0IGluaXQgUEhZMQorCQkgKmIuIHBvbGwgZm9yIFBIWTEgRlNNIHN0 YXRlIExPQ0sKKwkJICogICBiMS4gcmVnIGFkZHIgMHgwM1szOjBdIC0gc3RhdGVfbWFpblszOjBd ID09IDUgKExPQ0spCisJCSAqYy4gcG9sbCBmb3IgUEhZMSBjYWxpYnJhdGlvbnMgZG9uZSA6CisJ CSAqICAgYzEuIHRlcm1pbmF0aW9uIGNhbGlicmF0aW9uIGxvd2VyIHNlY3Rpb246IGFkZHIgMHgy Mls1XQorCQkgKiAgIC0gcmVzY2FsX2RvbmUKKwkJICogICBjMi4gc2xld3JhdGUgY2FsaWJyYXRp b24gKGlmIGRhdGEgcmF0ZSA8ID0gMTUwMCBNYnBzKToKKwkJICogICAgIGFkZHIgMHhBN1szOjJd IC0gc3JjYWxfZG9uZSwgc3JfZmluaXNoZWQKKwkJICpkLiBzdGFydCBpbml0IFBIWTAKKwkJICpl LiBwb2xsIGZvciBQSFkwIHN0b3BzdGF0ZQorCQkgKmYuIHBvbGwgZm9yIFBIWTEgc3RvcHN0YXRl CisJCSAqLworCQkvKiBQSFkgI04rMSAoJ3NsYXZlJykgKi8KKworCQlkcGh5X2luaXRfc2VxdWVu Y2Uoa21iLCBjZmcsIGRwaHlfbm8gKyAxLAorCQkJCSAgIChjZmctPmFjdGl2ZV9sYW5lcyAtIE1J UElfRFBIWV9EX0xBTkVTKSwKKwkJCQkgICBNSVBJX0RQSFlfU0xBVkUpOworCQlkcGh5X3dhaXRf ZnNtKGttYiwgZHBoeV9ubyArIDEsIERQSFlfVFhfTE9DSyk7CisKKwkJLyogUEhZICNOIG1hc3Rl ciAqLworCQlkcGh5X2luaXRfc2VxdWVuY2Uoa21iLCBjZmcsIGRwaHlfbm8sIE1JUElfRFBIWV9E X0xBTkVTLAorCQkJCSAgIE1JUElfRFBIWV9NQVNURVIpOworCisJCS8qIFdhaXQgZm9yIERQSFkg aW5pdCB0byBjb21wbGV0ZSAqLworCQl3YWl0X2luaXRfZG9uZShrbWIsIGRwaHlfbm8sIE1JUElf RFBIWV9EX0xBTkVTKTsKKwkJd2FpdF9pbml0X2RvbmUoa21iLCBkcGh5X25vICsgMSwKKwkJCSAg ICAgICBjZmctPmFjdGl2ZV9sYW5lcyAtIE1JUElfRFBIWV9EX0xBTkVTKTsKKwkJd2FpdF9wbGxf bG9jayhrbWIsIGRwaHlfbm8pOworCQl3YWl0X3BsbF9sb2NrKGttYiwgZHBoeV9ubyArIDEpOwor CQlkcGh5X3dhaXRfZnNtKGttYiwgZHBoeV9ubywgRFBIWV9UWF9JRExFKTsKKwl9IGVsc2UgewkJ LyogU2luZ2xlIERQSFkgKi8KKwkJZHBoeV9pbml0X3NlcXVlbmNlKGttYiwgY2ZnLCBkcGh5X25v LCBjZmctPmFjdGl2ZV9sYW5lcywKKwkJCQkgICBNSVBJX0RQSFlfTUFTVEVSKTsKKwkJZHBoeV93 YWl0X2ZzbShrbWIsIGRwaHlfbm8sIERQSFlfVFhfSURMRSk7CisJCXdhaXRfaW5pdF9kb25lKGtt YiwgZHBoeV9ubywgY2ZnLT5hY3RpdmVfbGFuZXMpOworCQl3YWl0X3BsbF9sb2NrKGttYiwgZHBo eV9ubyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNvbm5lY3RfbGNkX3Rv X21pcGkoc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iKQoreworCS8qIERJU0FCTEUgTUlQSS0+ Q0lGIENPTk5FQ1RJT04gKi8KKwlrbWJfd3JpdGVfbXNzY2FtKGttYiwgTVNTX01JUElfQ0lGX0NG RywgMCk7CisKKwkvKiBFTkFCTEUgTENELT5NSVBJIENPTk5FQ1RJT04gKi8KKwlrbWJfd3JpdGVf bXNzY2FtKGttYiwgTVNTX0xDRF9NSVBJX0NGRywgMSk7CisKKwkvKiBESVNBQkxFIExDRC0+Q0lG IExPT1BCQUNLICovCisJa21iX3dyaXRlX21zc2NhbShrbWIsIE1TU19MT09QQkFDS19DRkcsIDAp OworfQorCitpbnQga21iX2RzaV9od19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmtt YiA9IHRvX2ttYihkZXYpOworCXU2NCBkYXRhX3JhdGU7CisKKwltaXBpX3R4X2luaXRfY2ZnLmFj dGl2ZV9sYW5lcyA9IE1JUElfVFhfQUNUSVZFX0xBTkVTOworCisJbWlwaV90eF9mcmFtZTBfc2Vj dF9jZmcud2lkdGhfcGl4ZWxzID0gbW9kZS0+Y3J0Y19oZGlzcGxheTsKKwltaXBpX3R4X2ZyYW1l MF9zZWN0X2NmZy5oZWlnaHRfbGluZXMgPSBtb2RlLT5jcnRjX3ZkaXNwbGF5OworCW1pcGl0eF9m cmFtZTBfY2ZnLnZzeW5jX3dpZHRoID0KKwkJbW9kZS0+Y3J0Y192c3luY19lbmQgLSBtb2RlLT5j cnRjX3ZzeW5jX3N0YXJ0OworCW1pcGl0eF9mcmFtZTBfY2ZnLnZfYmFja3BvcmNoID0KKwkJbW9k ZS0+Y3J0Y192dG90YWwgLSBtb2RlLT5jcnRjX3ZzeW5jX2VuZDsKKwltaXBpdHhfZnJhbWUwX2Nm Zy52X2Zyb250cG9yY2ggPQorCQltb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0IC0gbW9kZS0+Y3J0Y192 ZGlzcGxheTsKKwltaXBpdHhfZnJhbWUwX2NmZy5oc3luY193aWR0aCA9CisJCW1vZGUtPmNydGNf aHN5bmNfZW5kIC0gbW9kZS0+Y3J0Y19oc3luY19zdGFydDsKKwltaXBpdHhfZnJhbWUwX2NmZy5o X2JhY2twb3JjaCA9CisJCW1vZGUtPmNydGNfaHRvdGFsIC0gbW9kZS0+Y3J0Y19oc3luY19lbmQ7 CisJbWlwaXR4X2ZyYW1lMF9jZmcuaF9mcm9udHBvcmNoID0KKwkJbW9kZS0+Y3J0Y19oc3luY19z dGFydCAtIG1vZGUtPmNydGNfaGRpc3BsYXk7CisKKwkvKiBMYW5lIHJhdGUgPSAodnRvdGFsKmh0 b3RhbCpmcHMqYnBwKS80IC8gMTAwMDAwMAorCSAqIHRvIGNvbnZlcnQgdG8gTWJwcworCSAqLwor CWRhdGFfcmF0ZSA9ICgoKCh1MzIpbW9kZS0+Y3J0Y192dG90YWwgKgkodTMyKW1vZGUtPmNydGNf aHRvdGFsKSAqCisJCQkodTMyKShkcm1fbW9kZV92cmVmcmVzaChtb2RlKSkgKgorCQkJTUlQSV9U WF9CUFApIC8gbWlwaV90eF9pbml0X2NmZy5hY3RpdmVfbGFuZXMpIC8JMTAwMDAwMDsKKworCWRy bV9kYmcoJmttYi0+ZHJtLCAiZGF0YV9yYXRlPSV1IGFjdGl2ZV9sYW5lcz0lZFxuIiwKKwkJKHUz MilkYXRhX3JhdGUsIG1pcGlfdHhfaW5pdF9jZmcuYWN0aXZlX2xhbmVzKTsKKworCS8qIFdoZW4g bGF0ZSByYXRlIDwgODAwLCBtb2Rlc2V0IGZhaWxzIHdpdGggNCBsYW5lcywKKwkgKiBzbyBzd2l0 Y2ggdG8gMiBsYW5lcworCSAqLworCWlmIChkYXRhX3JhdGUgPCA4MDApIHsKKwkJbWlwaV90eF9p bml0X2NmZy5hY3RpdmVfbGFuZXMgPSAyOworCQltaXBpX3R4X2luaXRfY2ZnLmxhbmVfcmF0ZV9t YnBzID0gZGF0YV9yYXRlICogMjsKKwl9IGVsc2UgeworCQltaXBpX3R4X2luaXRfY2ZnLmxhbmVf cmF0ZV9tYnBzID0gZGF0YV9yYXRlOworCX0KKworCWttYl93cml0ZV9taXBpKGttYiwgRFBIWV9F TkFCTEUsIDApOworCWttYl93cml0ZV9taXBpKGttYiwgRFBIWV9JTklUX0NUUkwwLCAwKTsKKwlr bWJfd3JpdGVfbWlwaShrbWIsIERQSFlfSU5JVF9DVFJMMSwgMCk7CisJa21iX3dyaXRlX21pcGko a21iLCBEUEhZX0lOSVRfQ1RSTDIsIDApOworCisJLyogSW5pdGlhbGl6ZSBtaXBpIGNvbnRyb2xs ZXIgKi8KKwltaXBpX3R4X2luaXRfY250cmwoa21iLCAmbWlwaV90eF9pbml0X2NmZyk7CisKKwkv KiBEcGh5IGluaXRpYWxpemF0aW9uICovCisJbWlwaV90eF9pbml0X2RwaHkoa21iLCAmbWlwaV90 eF9pbml0X2NmZyk7CisKKwljb25uZWN0X2xjZF90b19taXBpKGttYik7CisKKwlkcm1faW5mbygm a21iLT5kcm0sICJtaXBpIGh3X2luaXRpYWxpemVkIik7CisKKwlyZXR1cm4gMDsKK30KKworaW50 IGttYl9kc2lfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2JyaWRnZSAq YnJpZGdlKQoreworCXN0cnVjdCBrbWJfZHNpICprbWJfZHNpOworCXN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCXN0cnVjdCBr bWJfZHNpX2hvc3QgKmhvc3Q7CisJaW50IHJldCA9IDA7CisKKwlrbWJfZHNpID0ga3phbGxvYyhz aXplb2YoKmttYl9kc2kpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWttYl9kc2kpIHsKKwkJRFJNX0VS Uk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUga21iX2RzaVxuIik7CisJCXJldHVybiAtRU5PTUVNOwor CX0KKworCWhvc3QgPSBrbWJfZHNpX2hvc3RfaW5pdChkZXYsIGttYl9kc2kpOworCWlmICghaG9z dCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBob3N0XG4iKTsKKwkJa2ZyZWUo a21iX2RzaSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWttYl9kc2ktPmRzaV9ob3N0ID0g aG9zdDsKKwllbmNvZGVyID0gJmttYl9kc2ktPmJhc2U7CisJZW5jb2Rlci0+cG9zc2libGVfY3J0 Y3MgPSAxOworCWVuY29kZXItPnBvc3NpYmxlX2Nsb25lcyA9IDA7CisKKwlkcm1fZW5jb2Rlcl9p bml0KGRldiwgZW5jb2RlciwgJmttYl9kc2lfZnVuY3MsIERSTV9NT0RFX0VOQ09ERVJfRFNJLAor CQkJICJNSVBJLURTSSIpOworCisJLyogTGluayBkcm1fYnJpZGdlIHRvIGVuY29kZXIgKi8KKwly ZXQgPSBkcm1fYnJpZGdlX2F0dGFjaChlbmNvZGVyLCBicmlkZ2UsIE5VTEwsCisJCQlEUk1fQlJJ REdFX0FUVEFDSF9OT19DT05ORUNUT1IpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gYXR0YWNoIGJyaWRnZSB0byBNSVBJXG4iKTsKKwkJZHJtX2VuY29kZXJfY2xlYW51cChl bmNvZGVyKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZHJtX2luZm8oZGV2LCAiQnJpZGdlIGF0dGFj aGVkIDogU1VDQ0VTUyIpOworCWNvbm5lY3RvciA9IGRybV9icmlkZ2VfY29ubmVjdG9yX2luaXQo ZGV2LCBlbmNvZGVyKTsKKwlpZiAoSVNfRVJSKGNvbm5lY3RvcikpIHsKKwkJRFJNX0VSUk9SKCJV bmFibGUgdG8gY3JlYXRlIGJyaWRnZSBjb25uZWN0b3IiKTsKKwkJZHJtX2VuY29kZXJfY2xlYW51 cChlbmNvZGVyKTsKKwkJcmV0dXJuIFBUUl9FUlIoY29ubmVjdG9yKTsKKwl9CisJZHJtX2Nvbm5l Y3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIpOworCisJcmV0dXJuIDA7Cit9 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0va21iL2ttYl9kc2kuaCBiL2RyaXZlcnMvZ3B1 L2RybS9rbWIva21iX2RzaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZj NDM2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0va21iL2ttYl9kc2kuaApA QCAtMCwwICsxLDM1MCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25s eQorICoKKyAqIENvcHlyaWdodCDCqSAyMDE5LTIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLwor CisjaWZuZGVmIF9fS01CX0RTSV9IX18KKyNkZWZpbmUgX19LTUJfRFNJX0hfXworCisjaW5jbHVk ZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgorI2luY2x1 ZGUgPGRybS9kcm1fbW9kZXMuaD4KKyNpbmNsdWRlICJrbWJfZHJ2LmgiCisKKy8qIE1JUEkgVFgg Q0ZHKi8KKyNkZWZpbmUgTUlQSV9UWF9MQU5FX0RBVEFfUkFURV9NQlBTIDg5MQorI2RlZmluZSBN SVBJX1RYX1JFRl9DTEtfS0haICAgICAgICAgMjQwMDAKKyNkZWZpbmUgTUlQSV9UWF9DRkdfQ0xL X0tIWiAgICAgICAgIDI0MDAwCisjZGVmaW5lIE1JUElfVFhfQlBQCQkgICAgMjQKKworLyogRFBI WSBUeCB0ZXN0IGNvZGVzKi8KKyNkZWZpbmUgVEVTVF9DT0RFX0ZTTV9DT05UUk9MCQkJCTB4MDMK KyNkZWZpbmUgVEVTVF9DT0RFX01VTFRJUExFX1BIWV9DVFJMCQkJMHgwQworI2RlZmluZSBURVNU X0NPREVfUExMX1BST1BPUlRJT05BTF9DSEFSR0VfUFVNUF9DVFJMCTB4MEUKKyNkZWZpbmUgVEVT VF9DT0RFX1BMTF9JTlRFR1JBTF9DSEFSR0VfUFVNUF9DVFJMCQkweDBGCisjZGVmaW5lIFRFU1Rf Q09ERV9QTExfVkNPX0NUUkwJCQkJMHgxMgorI2RlZmluZSBURVNUX0NPREVfUExMX0dNUF9DVFJM CQkJCTB4MTMKKyNkZWZpbmUgVEVTVF9DT0RFX1BMTF9QSEFTRV9FUlJfQ1RSTAkJCTB4MTQKKyNk ZWZpbmUgVEVTVF9DT0RFX1BMTF9MT0NLX0ZJTFRFUgkJCTB4MTUKKyNkZWZpbmUgVEVTVF9DT0RF X1BMTF9VTkxPQ0tfRklMVEVSCQkJMHgxNgorI2RlZmluZSBURVNUX0NPREVfUExMX0lOUFVUX0RJ VklERVIJCQkweDE3CisjZGVmaW5lIFRFU1RfQ09ERV9QTExfRkVFREJBQ0tfRElWSURFUgkJCTB4 MTgKKyNkZWZpbmUgICBQTExfRkVFREJBQ0tfRElWSURFUl9ISUdICQkJQklUKDcpCisjZGVmaW5l IFRFU1RfQ09ERV9QTExfT1VUUFVUX0NMS19TRUwJCQkweDE5CisjZGVmaW5lICAgUExMX05fT1ZS X0VOCQkJCQlCSVQoNCkKKyNkZWZpbmUgICBQTExfTV9PVlJfRU4JCQkJCUJJVCg1KQorI2RlZmlu ZSBURVNUX0NPREVfVk9EX0xFVkVMCQkJCTB4MjQKKyNkZWZpbmUgVEVTVF9DT0RFX1BMTF9DSEFS R0VfUFVNUF9CSUFTCQkJMHgxQworI2RlZmluZSBURVNUX0NPREVfUExMX0xPQ0tfREVURUNUT1IJ CQkweDFECisjZGVmaW5lIFRFU1RfQ09ERV9IU19GUkVRX1JBTkdFX0NGRwkJCTB4NDQKKyNkZWZp bmUgVEVTVF9DT0RFX1BMTF9BTkFMT0dfUFJPRwkJCTB4MUYKKyNkZWZpbmUgVEVTVF9DT0RFX1NM RVdfUkFURV9PVkVSUklERV9DVFJMCQkweEEwCisjZGVmaW5lIFRFU1RfQ09ERV9TTEVXX1JBVEVf RERMX0xPT1BfQ1RSTAkJMHhBMworI2RlZmluZSBURVNUX0NPREVfU0xFV19SQVRFX0RETF9DWUNM RVMJCQkweEE0CisKKy8qIERQSFkgcGFyYW1zICovCisjZGVmaW5lIFBMTF9OX01JTgkwCisjZGVm aW5lIFBMTF9OX01BWAkxNQorI2RlZmluZSBQTExfTV9NSU4JNjIKKyNkZWZpbmUgUExMX01fTUFY CTYyMworI2RlZmluZSBQTExfRlZDT19NQVgJMTI1MAorCisjZGVmaW5lIFRJTUVPVVQJCTYwMAor CisjZGVmaW5lIE1JUElfVFhfRlJBTUVfR0VOCQkJCTQKKyNkZWZpbmUgTUlQSV9UWF9GUkFNRV9H RU5fU0VDVElPTlMJCQk0CisjZGVmaW5lIE1JUElfQ1RSTF9WSVJUVUFMX0NIQU5ORUxTCQkJNAor I2RlZmluZSBNSVBJX0RfTEFORVNfUEVSX0RQSFkJCQkJMgorI2RlZmluZSBNSVBJX0NUUkxfMkxB TkVfTUFYX01DX0ZJRk9fTE9DCQkJMjU1CisjZGVmaW5lIE1JUElfQ1RSTF80TEFORV9NQVhfTUNf RklGT19MT0MJCQk1MTEKKy8qIDIgRGF0YSBMYW5lcyBwZXIgRC1QSFkgKi8KKyNkZWZpbmUgTUlQ SV9EUEhZX0RfTEFORVMJCQkJMgorI2RlZmluZSBNSVBJX0RQSFlfREVGQVVMVF9CSVRfUkFURVMJ CQk2MworCisjZGVmaW5lIHRvX2ttYl9jb25uZWN0b3IoeCkgY29udGFpbmVyX29mKHgsIHN0cnVj dCBrbWJfY29ubmVjdG9yLCBiYXNlKQorI2RlZmluZSB0b19rbWJfaG9zdCh4KSBjb250YWluZXJf b2YoeCwgc3RydWN0IGttYl9kc2lfaG9zdCwgYmFzZSkKKyNkZWZpbmUgdG9fa21iX2RzaSh4KSBj b250YWluZXJfb2YoeCwgc3RydWN0IGttYl9kc2ksIGJhc2UpCisKK3N0cnVjdCBrbWJfY29ubmVj dG9yOworc3RydWN0IGttYl9kc2lfaG9zdDsKKworc3RydWN0IGttYl9kc2kgeworCXN0cnVjdCBk cm1fZW5jb2RlciBiYXNlOworCXN0cnVjdCBrbWJfZHNpX2hvc3QgKmRzaV9ob3N0OworCXN0cnVj dCBkcm1fYnJpZGdlICpicmlkZ2U7Cit9OworCitzdHJ1Y3Qga21iX2RzaV9ob3N0IHsKKwlzdHJ1 Y3QgbWlwaV9kc2lfaG9zdCAqYmFzZTsKKwlzdHJ1Y3Qga21iX2RzaSAqa21iX2RzaTsKKwlzdHJ1 Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZpY2U7Cit9OworCitzdHJ1Y3Qga21iX2Nvbm5lY3RvciB7 CisJc3RydWN0IGRybV9jb25uZWN0b3IgYmFzZTsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXI7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmZpeGVkX21vZGU7Cit9OworCisvKiBEUEhZ IFR4IHRlc3QgY29kZXMgKi8KKworZW51bSBtaXBpX2N0cmxfbnVtIHsKKwlNSVBJX0NUUkwwID0g MCwKKwlNSVBJX0NUUkwxLAorCU1JUElfQ1RSTDIsCisJTUlQSV9DVFJMMywKKwlNSVBJX0NUUkw0 LAorCU1JUElfQ1RSTDUsCisJTUlQSV9DVFJMNiwKKwlNSVBJX0NUUkw3LAorCU1JUElfQ1RSTDgs CisJTUlQSV9DVFJMOSwKKwlNSVBJX0NUUkxfTkEKK307CisKK2VudW0gbWlwaV9kcGh5X251bSB7 CisJTUlQSV9EUEhZMCA9IDAsCisJTUlQSV9EUEhZMSwKKwlNSVBJX0RQSFkyLAorCU1JUElfRFBI WTMsCisJTUlQSV9EUEhZNCwKKwlNSVBJX0RQSFk1LAorCU1JUElfRFBIWTYsCisJTUlQSV9EUEhZ NywKKwlNSVBJX0RQSFk4LAorCU1JUElfRFBIWTksCisJTUlQSV9EUEhZX05BCit9OworCitlbnVt IG1pcGlfZGlyIHsKKwlNSVBJX1JYLAorCU1JUElfVFgKK307CisKK2VudW0gbWlwaV9jdHJsX3R5 cGUgeworCU1JUElfRFNJLAorCU1JUElfQ1NJCit9OworCitlbnVtIG1pcGlfZGF0YV9pZiB7CisJ TUlQSV9JRl9ETUEsCisJTUlQSV9JRl9QQVJBTExFTAorfTsKKworZW51bSBtaXBpX2RhdGFfbW9k ZSB7CisJTUlQSV9EQVRBX01PREUwLAorCU1JUElfREFUQV9NT0RFMSwKKwlNSVBJX0RBVEFfTU9E RTIsCisJTUlQSV9EQVRBX01PREUzCit9OworCitlbnVtIG1pcGlfZHNpX3ZpZGVvX21vZGUgewor CURTSV9WSURFT19NT0RFX05PX0JVUlNUX1BVTFNFLAorCURTSV9WSURFT19NT0RFX05PX0JVUlNU X0VWRU5ULAorCURTSV9WSURFT19NT0RFX0JVUlNUCit9OworCitlbnVtIG1pcGlfZHNpX2JsYW5r aW5nX21vZGUgeworCVRSQU5TSVRJT05fVE9fTE9XX1BPV0VSLAorCVNFTkRfQkxBTktfUEFDS0VU Cit9OworCitlbnVtIG1pcGlfZHNpX2VvdHAgeworCURTSV9FT1RQX0RJU0FCTEVELAorCURTSV9F T1RQX0VOQUJMRVMKK307CisKK2VudW0gbWlwaV9kc2lfZGF0YV90eXBlIHsKKwlEU0lfU1BfRFRf UkVTRVJWRURfMDAgPSAweDAwLAorCURTSV9TUF9EVF9WU1lOQ19TVEFSVCA9IDB4MDEsCisJRFNJ X1NQX0RUX0NPTE9SX01PREVfT0ZGID0gMHgwMiwKKwlEU0lfU1BfRFRfR0VORVJJQ19TSE9SVF9X UiA9IDB4MDMsCisJRFNJX1NQX0RUX0dFTkVSSUNfUkQgPSAweDA0LAorCURTSV9TUF9EVF9EQ1Nf U0hPUlRfV1IgPSAweDA1LAorCURTSV9TUF9EVF9EQ1NfUkQgPSAweDA2LAorCURTSV9TUF9EVF9F T1RQID0gMHgwOCwKKwlEU0lfTFBfRFRfTlVMTCA9IDB4MDksCisJRFNJX0xQX0RUX1JFU0VSVkVE XzBBID0gMHgwYSwKKwlEU0lfTFBfRFRfUkVTRVJWRURfMEIgPSAweDBiLAorCURTSV9MUF9EVF9M UFBTX1lDQkNSNDIyXzIwQiA9IDB4MGMsCisJRFNJX0xQX0RUX1BQU19SR0IxMDEwMTBfMzBCID0g MHgwZCwKKwlEU0lfTFBfRFRfUFBTX1JHQjU2NV8xNkIgPSAweDBlLAorCURTSV9MUF9EVF9SRVNF UlZFRF8wRiA9IDB4MGYsCisKKwlEU0lfU1BfRFRfUkVTRVJWRURfMTAgPSAweDEwLAorCURTSV9T UF9EVF9WU1lOQ19FTkQgPSAweDExLAorCURTSV9TUF9EVF9DT0xPUl9NT0RFX09OID0gMHgxMiwK KwlEU0lfU1BfRFRfR0VORVJJQ19TSE9SVF9XUl8xUEFSID0gMHgxMywKKwlEU0lfU1BfRFRfR0VO RVJJQ19SRF8xUEFSID0gMHgxNCwKKwlEU0lfU1BfRFRfRENTX1NIT1JUX1dSXzFQQVIgPSAweDE1 LAorCURTSV9TUF9EVF9SRVNFUlZFRF8xNiA9IDB4MTYsCisJRFNJX1NQX0RUX1JFU0VSVkVEXzE3 ID0gMHgxNywKKwlEU0lfU1BfRFRfUkVTRVJWRURfMTggPSAweDE4LAorCURTSV9MUF9EVF9CTEFO SyA9IDB4MTksCisJRFNJX0xQX0RUX1JFU0VSVkVEXzFBID0gMHgxYSwKKwlEU0lfTFBfRFRfUkVT RVJWRURfMUIgPSAweDFiLAorCURTSV9MUF9EVF9QUFNfWUNCQ1I0MjJfMjRCID0gMHgxYywKKwlE U0lfTFBfRFRfUFBTX1JHQjEyMTIxMl8zNkIgPSAweDFkLAorCURTSV9MUF9EVF9QUFNfUkdCNjY2 XzE4QiA9IDB4MWUsCisJRFNJX0xQX0RUX1JFU0VSVkVEXzFGID0gMHgxZiwKKworCURTSV9TUF9E VF9SRVNFUlZFRF8yMCA9IDB4MjAsCisJRFNJX1NQX0RUX0hTWU5DX1NUQVJUID0gMHgyMSwKKwlE U0lfU1BfRFRfU0hVVF9ET1dOX1BFUklQSF9DTUQgPSAweDIyLAorCURTSV9TUF9EVF9HRU5FUklD X1NIT1JUX1dSXzJQQVIgPSAweDIzLAorCURTSV9TUF9EVF9HRU5FUklDX1JEXzJQQVIgPSAweDI0 LAorCURTSV9TUF9EVF9SRVNFUlZFRF8yNSA9IDB4MjUsCisJRFNJX1NQX0RUX1JFU0VSVkVEXzI2 ID0gMHgyNiwKKwlEU0lfU1BfRFRfUkVTRVJWRURfMjcgPSAweDI3LAorCURTSV9TUF9EVF9SRVNF UlZFRF8yOCA9IDB4MjgsCisJRFNJX0xQX0RUX0dFTkVSSUNfTE9OR19XUiA9IDB4MjksCisJRFNJ X0xQX0RUX1JFU0VSVkVEXzJBID0gMHgyYSwKKwlEU0lfTFBfRFRfUkVTRVJWRURfMkIgPSAweDJi LAorCURTSV9MUF9EVF9QUFNfWUNCQ1I0MjJfMTZCID0gMHgyYywKKwlEU0lfTFBfRFRfUkVTRVJW RURfMkQgPSAweDJkLAorCURTSV9MUF9EVF9MUFBTX1JHQjY2Nl8xOEIgPSAweDJlLAorCURTSV9M UF9EVF9SRVNFUlZFRF8yRiA9IDB4MmYsCisKKwlEU0lfU1BfRFRfUkVTRVJWRURfMzAgPSAweDMw LAorCURTSV9TUF9EVF9IU1lOQ19FTkQgPSAweDMxLAorCURTSV9TUF9EVF9UVVJOX09OX1BFUklQ SF9DTUQgPSAweDMyLAorCURTSV9TUF9EVF9SRVNFUlZFRF8zMyA9IDB4MzMsCisJRFNJX1NQX0RU X1JFU0VSVkVEXzM0ID0gMHgzNCwKKwlEU0lfU1BfRFRfUkVTRVJWRURfMzUgPSAweDM1LAorCURT SV9TUF9EVF9SRVNFUlZFRF8zNiA9IDB4MzYsCisJRFNJX1NQX0RUX1NFVF9NQVhfUkVUVVJOX1BL VF9TSVpFID0gMHgzNywKKwlEU0lfU1BfRFRfUkVTRVJWRURfMzggPSAweDM4LAorCURTSV9MUF9E VF9EU0NfTE9OR19XUiA9IDB4MzksCisJRFNJX0xQX0RUX1JFU0VSVkVEXzNBID0gMHgzYSwKKwlE U0lfTFBfRFRfUkVTRVJWRURfM0IgPSAweDNiLAorCURTSV9MUF9EVF9SRVNFUlZFRF8zQyA9IDB4 M2MsCisJRFNJX0xQX0RUX1BQU19ZQ0JDUjQyMF8xMkIgPSAweDNkLAorCURTSV9MUF9EVF9QUFNf UkdCODg4XzI0QiA9IDB4M2UsCisJRFNJX0xQX0RUX1JFU0VSVkVEXzNGID0gMHgzZgorfTsKKwor ZW51bSBtaXBpX3R4X2hzX3RwX3NlbCB7CisJTUlQSV9UWF9IU19UUF9XSE9MRV9GUkFNRV9DT0xP UjAgPSAwLAorCU1JUElfVFhfSFNfVFBfV0hPTEVfRlJBTUVfQ09MT1IxLAorCU1JUElfVFhfSFNf VFBfVl9TVFJJUEVTLAorCU1JUElfVFhfSFNfVFBfSF9TVFJJUEVTLAorfTsKKworZW51bSBkcGh5 X21vZGUgeworCU1JUElfRFBIWV9TTEFWRSA9IDAsCisJTUlQSV9EUEhZX01BU1RFUgorfTsKKwor ZW51bSBkcGh5X3R4X2ZzbSB7CisJRFBIWV9UWF9QT1dFUkRXTiA9IDAsCisJRFBIWV9UWF9CR1BP TiwKKwlEUEhZX1RYX1RFUk1DQUwsCisJRFBIWV9UWF9URVJNQ0FMVVAsCisJRFBIWV9UWF9PRkZT RVRDQUwsCisJRFBIWV9UWF9MT0NLLAorCURQSFlfVFhfU1JDQUwsCisJRFBIWV9UWF9JRExFLAor CURQSFlfVFhfVUxQLAorCURQSFlfVFhfTEFORVNUQVJULAorCURQSFlfVFhfQ0xLQUxJR04sCisJ RFBIWV9UWF9ERExUVU5OSU5HLAorCURQSFlfVFhfVUxQX0ZPUkNFX1BMTCwKKwlEUEhZX1RYX0xP Q0tfTE9TUworfTsKKworc3RydWN0IG1pcGlfZGF0YV90eXBlX3BhcmFtcyB7CisJdTggc2l6ZV9j b25zdHJhaW50X3BpeGVsczsKKwl1OCBzaXplX2NvbnN0cmFpbnRfYnl0ZXM7CisJdTggcGl4ZWxz X3Blcl9wY2xrOworCXU4IGJpdHNfcGVyX3BjbGs7Cit9OworCitzdHJ1Y3QgbWlwaV90eF9kc2lf Y2ZnIHsKKwl1OCBoZnBfYmxhbmtfZW47CS8qaG9yaXpvbnRhbCBmcm9udCBwb3JjaCBibGFua2lu ZyBlbmFibGUgKi8KKwl1OCBlb3RwX2VuOwkvKkVuZCBvZiB0cmFuc21pc3Npb24gcGFja2V0IGVu YWJsZSAqLworCS8qbGFzdCB2ZXJ0aWNhbCBmcm9udCBwb3JjaCBibGFua2luZyBtb2RlICovCisJ dTggbHBtX2xhc3RfdmZwX2xpbmU7CisJLypmaXJzdCB2ZXJ0aWNhbCBzeW5jIGFjdGl2ZSBibGFu a2luZyBtb2RlICovCisJdTggbHBtX2ZpcnN0X3ZzYV9saW5lOworCXU4IHN5bmNfcHVsc2VfZXZl bnRuOwkvKnN5bmMgdHlwZSAqLworCXU4IGhmcF9ibGFua2luZzsJLypob3Jpem9udGFsIGZyb250 IHBvcmNoIGJsYW5raW5nIG1vZGUgKi8KKwl1OCBoYnBfYmxhbmtpbmc7CS8qaG9yaXpvbnRhbCBi YWNrIHBvcmNoIGJsYW5raW5nIG1vZGUgKi8KKwl1OCBoc2FfYmxhbmtpbmc7CS8qaG9yaXpvbnRh bCBzeW5jIGFjdGl2ZSBibGFua2luZyBtb2RlICovCisJdTggdl9ibGFua2luZzsJLyp2ZXJ0aWNh bCB0aW1pbmcgYmxhbmtpbmcgbW9kZSAqLworfTsKKworc3RydWN0IG1pcGlfdHhfZnJhbWVfc2Vj dGlvbl9jZmcgeworCXUzMiBkbWFfdl9zdHJpZGU7CisJdTE2IGRtYV92X3NjYWxlX2NmZzsKKwl1 MTYgd2lkdGhfcGl4ZWxzOworCXUxNiBoZWlnaHRfbGluZXM7CisJdTggZG1hX3BhY2tlZDsKKwl1 OCBicHA7CisJdTggYnBwX3VucGFja2VkOworCXU4IGRtYV9oX3N0cmlkZTsKKwl1OCBkYXRhX3R5 cGU7CisJdTggZGF0YV9tb2RlOworCXU4IGRtYV9mbGlwX3JvdGF0ZV9zZWw7Cit9OworCitzdHJ1 Y3QgbWlwaV90eF9mcmFtZV90aW1pbmdfY2ZnIHsKKwl1MzIgYnBwOworCXUzMiBsYW5lX3JhdGVf bWJwczsKKwl1MzIgaHN5bmNfd2lkdGg7CisJdTMyIGhfYmFja3BvcmNoOworCXUzMiBoX2Zyb250 cG9yY2g7CisJdTMyIGhfYWN0aXZlOworCXUxNiB2c3luY193aWR0aDsKKwl1MTYgdl9iYWNrcG9y Y2g7CisJdTE2IHZfZnJvbnRwb3JjaDsKKwl1MTYgdl9hY3RpdmU7CisJdTggYWN0aXZlX2xhbmVz OworfTsKKworc3RydWN0IG1pcGlfdHhfZnJhbWVfc2VjdF9waGNmZyB7CisJdTMyIHdjOworCWVu dW0gbWlwaV9kYXRhX21vZGUgZGF0YV9tb2RlOworCWVudW0gbWlwaV9kc2lfZGF0YV90eXBlIGRh dGFfdHlwZTsKKwl1OCB2Y2hhbm5lbDsKKwl1OCBkbWFfcGFja2VkOworfTsKKworc3RydWN0IG1p cGlfdHhfZnJhbWVfY2ZnIHsKKwlzdHJ1Y3QgbWlwaV90eF9mcmFtZV9zZWN0aW9uX2NmZyAqc2Vj dGlvbnNbTUlQSV9UWF9GUkFNRV9HRU5fU0VDVElPTlNdOworCXUzMiBoc3luY193aWR0aDsJLypp biBwaXhlbHMgKi8KKwl1MzIgaF9iYWNrcG9yY2g7CS8qaW4gcGl4ZWxzICovCisJdTMyIGhfZnJv bnRwb3JjaDsJLyppbiBwaXhlbHMgKi8KKwl1MTYgdnN5bmNfd2lkdGg7CS8qaW4gbGluZXMgKi8K Kwl1MTYgdl9iYWNrcG9yY2g7CS8qaW4gbGluZXMgKi8KKwl1MTYgdl9mcm9udHBvcmNoOwkvKmlu IGxpbmVzICovCit9OworCitzdHJ1Y3QgbWlwaV90eF9jdHJsX2NmZyB7CisJc3RydWN0IG1pcGlf dHhfZnJhbWVfY2ZnICpmcmFtZXNbTUlQSV9UWF9GUkFNRV9HRU5dOworCXN0cnVjdCBtaXBpX3R4 X2RzaV9jZmcgKnR4X2RzaV9jZmc7CisJdTggbGluZV9zeW5jX3BrdF9lbjsKKwl1OCBsaW5lX2Nv dW50ZXJfYWN0aXZlOworCXU4IGZyYW1lX2NvdW50ZXJfYWN0aXZlOworCXU4IHR4X2hzY2xra2lk bGVfY250OworCXU4IHR4X2hzZXhpdF9jbnQ7CisJdTggdHhfY3JjX2VuOworCXU4IHR4X2hhY3Rf d2FpdF9zdG9wOworCXU4IHR4X2Fsd2F5c191c2VfaGFjdDsKKwl1OCB0eF93YWl0X3RyaWc7CisJ dTggdHhfd2FpdF9hbGxfc2VjdDsKK307CisKKy8qY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgZm9y IE1JUEkgY29udHJvbCAqLworc3RydWN0IG1pcGlfY3RybF9jZmcgeworCXU4IGFjdGl2ZV9sYW5l czsJLyogIyBhY3RpdmUgbGFuZXMgcGVyIGNvbnRyb2xsZXIgMi80ICovCisJdTMyIGxhbmVfcmF0 ZV9tYnBzOwkvKk1CUFMgKi8KKwl1MzIgcmVmX2Nsa19raHo7CisJdTMyIGNmZ19jbGtfa2h6Owor CXN0cnVjdCBtaXBpX3R4X2N0cmxfY2ZnIHR4X2N0cmxfY2ZnOworfTsKKworc3RydWN0IGRybV9i cmlkZ2UgKmttYl9kc2lfaG9zdF9icmlkZ2VfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpOworaW50 IGttYl9kc2lfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2JyaWRnZSAq YnJpZGdlKTsKK3ZvaWQga21iX2RzaV9ob3N0X3VucmVnaXN0ZXIodm9pZCk7CitpbnQga21iX2Rz aV9od19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlKTsKKyNlbmRpZiAvKiBfX0tNQl9EU0lfSF9fICovCi0tIAoyLjcuNAoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcg bGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==