From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757570AbXFZMgv (ORCPT ); Tue, 26 Jun 2007 08:36:51 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752569AbXFZMgn (ORCPT ); Tue, 26 Jun 2007 08:36:43 -0400 Received: from nz-out-0506.google.com ([64.233.162.234]:3966 "EHLO nz-out-0506.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752046AbXFZMgl (ORCPT ); Tue, 26 Jun 2007 08:36:41 -0400 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:cc:mime-version:content-type; b=aFUNgbRIv0HhVKLeZSQ8OQtcZUPVRXGmIddlJCMkSmMXguIdAUNSZ2tnSK7lKv8yk/p5etVXtNR51C+PCznLP9pM34rTddh0vaBL3Xrx/JKVvouNSmUAcml9u0KzmLjbMBZvzOXEuHhzi0HdJGu9XJU5z2wmHseStU/QA+Ib7XQ= Message-ID: <5d5443650706260536i73ba23b2n89a41b7f032b3acd@mail.gmail.com> Date: Tue, 26 Jun 2007 18:06:39 +0530 From: "Trilok Soni" To: linux-fbdev-devel@lists.sourceforge.net, adaplas@gmail.com, akpm@linux-foundation.org Subject: [PATCH 04/17] OMAP: Add TI OMAP2 internal display controller support. Cc: "Tony Lindgren" , imre.deak@solidboot.com, juha.yrjola@solidboot.com, linux-kernel@vger.kernel.org MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_17312_32991079.1182861399766" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org ------=_Part_17312_32991079.1182861399766 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline -- --Trilok Soni ------=_Part_17312_32991079.1182861399766 Content-Type: text/x-patch; name=0004-OMAP-Add-TI-OMAP2-internal-display-controller-support.patch; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_f3ed445l Content-Disposition: attachment; filename="0004-OMAP-Add-TI-OMAP2-internal-display-controller-support.patch" RnJvbSBmZTFlMDdmZjA3ZjIyMDc4NjM2ZWI4MDY1YTY0MmJjN2ZmMDU2Y2NhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJbXJlIERlYWsgPGltcmUuZGVha0Bzb2xpZGJvb3QuY29tPgpE YXRlOiBUdWUsIDI2IEp1biAyMDA3IDE3OjI4OjIxICswNTMwClN1YmplY3Q6IFtQQVRDSCAwNC8x N10gT01BUDogQWRkIFRJIE9NQVAyIGludGVybmFsIGRpc3BsYXkgY29udHJvbGxlciBzdXBwb3J0 LgoKLSBBZGRzIFRleGFzIEluc3RydW1lbnRzIE9NQVAyIHByb2Nlc3NvciBzZXJpZXMgKE9NQVAy NDIwLzI0MzApCiAgaW50ZXJuYWwgZGlzcGxheSBjb250cm9sbGVyIGludGVyZmFjZSBzdXBwb3J0 LgoKU2lnbmVkLW9mZi1ieTogVHJpbG9rIFNvbmkgPHNvbmkudHJpbG9rQGdtYWlsLmNvbT4KLS0t CiBkcml2ZXJzL3ZpZGVvL29tYXAvTWFrZWZpbGUgfCAgICAxICsKIGRyaXZlcnMvdmlkZW8vb21h cC9kaXNwYy5jICB8IDE1MDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmggIHwgICA0MyArKwogMyBmaWxlcyBjaGFu Z2VkLCAxNTQ2IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3ZpZGVvL29tYXAvZGlzcGMuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9NYWtl ZmlsZSBiL2RyaXZlcnMvdmlkZW8vb21hcC9NYWtlZmlsZQppbmRleCAyZjM1Mzg5Li4xMGI1NjQ3 IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy92 aWRlby9vbWFwL01ha2VmaWxlCkBAIC03LDYgKzcsNyBAQCBvYmotJChDT05GSUdfRkJfT01BUCkg Kz0gb21hcGZiLm8KIG9ianMteXkgOj0gb21hcGZiX21haW4ubwogCiBvYmpzLXkkKENPTkZJR19B UkNIX09NQVAxKSArPSBsY2RjLm8KK29ianMteSQoQ09ORklHX0FSQ0hfT01BUDIpICs9IGRpc3Bj Lm8KIAogb21hcGZiLW9ianMgOj0gJChvYmpzLXl5KQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zp ZGVvL29tYXAvZGlzcGMuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YzIzNDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL3ZpZGVvL29tYXAvZGlzcGMuYwpAQCAtMCwwICsxLDE1MDIgQEAKKy8qCisgKiBPTUFQMiBk aXNwbGF5IGNvbnRyb2xsZXIgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tp YSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBJbXJlIERlYWsgPGltcmUuZGVha0Bub2tpYS5jb20+ CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91 cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3 cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxl IFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKi8KKyNp bmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgor I2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNs dWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvc3JhbS5oPgorI2luY2x1ZGUg PGFzbS9hcmNoL29tYXBmYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisKKyNpbmNs dWRlICJkaXNwYy5oIgorCisjZGVmaW5lIE1PRFVMRV9OQU1FCQkJImRpc3BjIgorCisjZGVmaW5l IERTU19CQVNFCQkJMHg0ODA1MDAwMAorI2RlZmluZSBEU1NfU1lTQ09ORklHCQkJMHgwMDEwCisK KyNkZWZpbmUgRElTUENfQkFTRQkJCTB4NDgwNTA0MDAKKworLyogRElTUEMgY29tbW9uICovCisj ZGVmaW5lIERJU1BDX1JFVklTSU9OCQkJMHgwMDAwCisjZGVmaW5lIERJU1BDX1NZU0NPTkZJRwkJ CTB4MDAxMAorI2RlZmluZSBESVNQQ19TWVNTVEFUVVMJCQkweDAwMTQKKyNkZWZpbmUgRElTUENf SVJRU1RBVFVTCQkJMHgwMDE4CisjZGVmaW5lIERJU1BDX0lSUUVOQUJMRQkJCTB4MDAxQworI2Rl ZmluZSBESVNQQ19DT05UUk9MCQkJMHgwMDQwCisjZGVmaW5lIERJU1BDX0NPTkZJRwkJCTB4MDA0 NAorI2RlZmluZSBESVNQQ19DQVBBQkxFCQkJMHgwMDQ4CisjZGVmaW5lIERJU1BDX0RFRkFVTFRf Q09MT1IwCQkweDAwNEMKKyNkZWZpbmUgRElTUENfREVGQVVMVF9DT0xPUjEJCTB4MDA1MAorI2Rl ZmluZSBESVNQQ19UUkFOU19DT0xPUjAJCTB4MDA1NAorI2RlZmluZSBESVNQQ19UUkFOU19DT0xP UjEJCTB4MDA1OAorI2RlZmluZSBESVNQQ19MSU5FX1NUQVRVUwkJMHgwMDVDCisjZGVmaW5lIERJ U1BDX0xJTkVfTlVNQkVSCQkweDAwNjAKKyNkZWZpbmUgRElTUENfVElNSU5HX0gJCQkweDAwNjQK KyNkZWZpbmUgRElTUENfVElNSU5HX1YJCQkweDAwNjgKKyNkZWZpbmUgRElTUENfUE9MX0ZSRVEJ CQkweDAwNkMKKyNkZWZpbmUgRElTUENfRElWSVNPUgkJCTB4MDA3MAorI2RlZmluZSBESVNQQ19T SVpFX0RJRwkJCTB4MDA3OAorI2RlZmluZSBESVNQQ19TSVpFX0xDRAkJCTB4MDA3QworCisjZGVm aW5lIERJU1BDX0RBVEFfQ1lDTEUxCQkweDAxRDQKKyNkZWZpbmUgRElTUENfREFUQV9DWUNMRTIJ CTB4MDFEOAorI2RlZmluZSBESVNQQ19EQVRBX0NZQ0xFMwkJMHgwMURDCisKKy8qIERJU1BDIEdG WCBwbGFuZSAqLworI2RlZmluZSBESVNQQ19HRlhfQkEwCQkJMHgwMDgwCisjZGVmaW5lIERJU1BD X0dGWF9CQTEJCQkweDAwODQKKyNkZWZpbmUgRElTUENfR0ZYX1BPU0lUSU9OCQkweDAwODgKKyNk ZWZpbmUgRElTUENfR0ZYX1NJWkUJCQkweDAwOEMKKyNkZWZpbmUgRElTUENfR0ZYX0FUVFJJQlVU RVMJCTB4MDBBMAorI2RlZmluZSBESVNQQ19HRlhfRklGT19USFJFU0hPTEQJMHgwMEE0CisjZGVm aW5lIERJU1BDX0dGWF9GSUZPX1NJWkVfU1RBVFVTCTB4MDBBOAorI2RlZmluZSBESVNQQ19HRlhf Uk9XX0lOQwkJMHgwMEFDCisjZGVmaW5lIERJU1BDX0dGWF9QSVhFTF9JTkMJCTB4MDBCMAorI2Rl ZmluZSBESVNQQ19HRlhfV0lORE9XX1NLSVAJCTB4MDBCNAorI2RlZmluZSBESVNQQ19HRlhfVEFC TEVfQkEJCTB4MDBCOAorCisvKiBESVNQQyBWaWRlbyBwbGFuZSAxLzIgKi8KKyNkZWZpbmUgRElT UENfVklEMV9CQVNFCQkJMHgwMEJDCisjZGVmaW5lIERJU1BDX1ZJRDJfQkFTRQkJCTB4MDE0Qwor CisvKiBPZmZzZXRzIGludG8gRElTUENfVklEMS8yX0JBU0UgKi8KKyNkZWZpbmUgRElTUENfVklE X0JBMAkJCTB4MDAwMAorI2RlZmluZSBESVNQQ19WSURfQkExCQkJMHgwMDA0CisjZGVmaW5lIERJ U1BDX1ZJRF9QT1NJVElPTgkJMHgwMDA4CisjZGVmaW5lIERJU1BDX1ZJRF9TSVpFCQkJMHgwMDBD CisjZGVmaW5lIERJU1BDX1ZJRF9BVFRSSUJVVEVTCQkweDAwMTAKKyNkZWZpbmUgRElTUENfVklE X0ZJRk9fVEhSRVNIT0xECTB4MDAxNAorI2RlZmluZSBESVNQQ19WSURfRklGT19TSVpFX1NUQVRV UwkweDAwMTgKKyNkZWZpbmUgRElTUENfVklEX1JPV19JTkMJCTB4MDAxQworI2RlZmluZSBESVNQ Q19WSURfUElYRUxfSU5DCQkweDAwMjAKKyNkZWZpbmUgRElTUENfVklEX0ZJUgkJCTB4MDAyNAor I2RlZmluZSBESVNQQ19WSURfUElDVFVSRV9TSVpFCQkweDAwMjgKKyNkZWZpbmUgRElTUENfVklE X0FDQ1UwCQkJMHgwMDJDCisjZGVmaW5lIERJU1BDX1ZJRF9BQ0NVMQkJCTB4MDAzMAorCisvKiA4 IGVsZW1lbnRzIGluIDggYnl0ZSBpbmNyZW1lbnRzICovCisjZGVmaW5lIERJU1BDX1ZJRF9GSVJf Q09FRl9IMAkJMHgwMDM0CisvKiA4IGVsZW1lbnRzIGluIDggYnl0ZSBpbmNyZW1lbnRzICovCisj ZGVmaW5lIERJU1BDX1ZJRF9GSVJfQ09FRl9IVjAJCTB4MDAzOAorLyogNSBlbGVtZW50cyBpbiA0 IGJ5dGUgaW5jcmVtZW50cyAqLworI2RlZmluZSBESVNQQ19WSURfQ09OVl9DT0VGMAkJMHgwMDc0 CisKKyNkZWZpbmUgRElTUENfSVJRX0ZSQU1FTUFTSwkJMHgwMDAxCisjZGVmaW5lIERJU1BDX0lS UV9WU1lOQwkJCTB4MDAwMgorI2RlZmluZSBESVNQQ19JUlFfRVZTWU5DX0VWRU4JCTB4MDAwNAor I2RlZmluZSBESVNQQ19JUlFfRVZTWU5DX09ERAkJMHgwMDA4CisjZGVmaW5lIERJU1BDX0lSUV9B Q0JJQVNfQ09VTlRfU1RBVAkweDAwMTAKKyNkZWZpbmUgRElTUENfSVJRX1BST0dfTElORV9OVU0J CTB4MDAyMAorI2RlZmluZSBESVNQQ19JUlFfR0ZYX0ZJRk9fVU5ERVJGTE9XCTB4MDA0MAorI2Rl ZmluZSBESVNQQ19JUlFfR0ZYX0VORF9XSU4JCTB4MDA4MAorI2RlZmluZSBESVNQQ19JUlFfUEFM X0dBTU1BX01BU0sJMHgwMTAwCisjZGVmaW5lIERJU1BDX0lSUV9PQ1BfRVJSCQkweDAyMDAKKyNk ZWZpbmUgRElTUENfSVJRX1ZJRDFfRklGT19VTkRFUkZMT1cJMHgwNDAwCisjZGVmaW5lIERJU1BD X0lSUV9WSUQxX0VORF9XSU4JCTB4MDgwMAorI2RlZmluZSBESVNQQ19JUlFfVklEMl9GSUZPX1VO REVSRkxPVwkweDEwMDAKKyNkZWZpbmUgRElTUENfSVJRX1ZJRDJfRU5EX1dJTgkJMHgyMDAwCisj ZGVmaW5lIERJU1BDX0lSUV9TWU5DX0xPU1QJCTB4NDAwMAorCisjZGVmaW5lIERJU1BDX0lSUV9N QVNLX0FMTAkJMHg3ZmZmCisKKyNkZWZpbmUgRElTUENfSVJRX01BU0tfRVJST1IJCShESVNQQ19J UlFfR0ZYX0ZJRk9fVU5ERVJGTE9XIHwJXAorCQkJCQkgICAgIERJU1BDX0lSUV9WSUQxX0ZJRk9f VU5ERVJGTE9XIHwgXAorCQkJCQkgICAgIERJU1BDX0lSUV9WSUQyX0ZJRk9fVU5ERVJGTE9XIHwg XAorCQkJCQkgICAgIERJU1BDX0lSUV9TWU5DX0xPU1QpCisKKyNkZWZpbmUgUkZCSV9DT05UUk9M CQkJMHg0ODA1MDA0MAorCisjZGVmaW5lIE1BWF9QQUxFVFRFX1NJWkUJCSgyNTYgKiAxNikKKwor I2RlZmluZSBGTERfTUFTSyhwb3MsIGxlbikJKCgoMSA8PCBsZW4pIC0gMSkgPDwgcG9zKQorCisj ZGVmaW5lIE1PRF9SRUdfRkxEKHJlZywgbWFzaywgdmFsKSBcCisJZGlzcGNfd3JpdGVfcmVnKChy ZWcpLCAoZGlzcGNfcmVhZF9yZWcocmVnKSAmIH4obWFzaykpIHwgKHZhbCkpOworCisjZGVmaW5l IE9NQVAyX1NSQU1fU1RBUlQJCTB4NDAyMDAwMDAKKy8qIE1heGltdW0gc2l6ZSwgaW4gcmVhbGl0 eSB0aGlzIGlzIHNtYWxsZXIgaWYgU1JBTSBpcyBwYXJ0aWFsbHkgbG9ja2VkLiAqLworI2RlZmlu ZSBPTUFQMl9TUkFNX1NJWkUJCQkweGEwMDAwCQkvKiA2NDBrICovCisKKy8qIFdlIHN1cHBvcnQg dGhlIFNEUkFNIC8gU1JBTSB0eXBlcy4gU2VlIE9NQVBGQl9QTEFORV9NRU1UWVBFXyogaW4gb21h cGZiLmggKi8KKyNkZWZpbmUgRElTUENfTUVNVFlQRV9OVU0JCTIKKworI2RlZmluZSBSRVNNQVBf U0laRShfcGFnZV9jbnQpCQkJCQkJXAorCSgoX3BhZ2VfY250ICsgKHNpemVvZih1bnNpZ25lZCBs b25nKSAqIDgpIC0gMSkgLyA4KQorI2RlZmluZSBSRVNNQVBfUFRSKF9yZXNfbWFwLCBfcGFnZV9u cikJCQkJCVwKKwkoKChfcmVzX21hcCktPm1hcCkgKyAoX3BhZ2VfbnIpIC8gKHNpemVvZih1bnNp Z25lZCBsb25nKSAqIDgpKQorI2RlZmluZSBSRVNNQVBfTUFTSyhfcGFnZV9ucikJCQkJCQlcCisJ KDEgPDwgKChfcGFnZV9ucikgJiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogOCAtIDEpKSkKKwor c3RydWN0IHJlc21hcCB7CisJdW5zaWduZWQgbG9uZwlzdGFydDsKKwl1bnNpZ25lZAlwYWdlX2Nu dDsKKwl1bnNpZ25lZCBsb25nCSptYXA7Cit9OworCitzdGF0aWMgc3RydWN0IHsKKwl1MzIJCWJh c2U7CisKKwlzdHJ1Y3Qgb21hcGZiX21lbV9kZXNjCW1lbV9kZXNjOworCXN0cnVjdCByZXNtYXAJ CSpyZXNfbWFwW0RJU1BDX01FTVRZUEVfTlVNXTsKKwlhdG9taWNfdAkJbWFwX2NvdW50W09NQVBG Ql9QTEFORV9OVU1dOworCisJZG1hX2FkZHJfdAlwYWxldHRlX3BhZGRyOworCXZvaWQJCSpwYWxl dHRlX3ZhZGRyOworCisJaW50CQlleHRfbW9kZTsKKworCXVuc2lnbmVkIGxvbmcJZW5hYmxlZF9p cnFzOworCXZvaWQJCSgqaXJxX2NhbGxiYWNrKSh2b2lkICopOworCXZvaWQJCSppcnFfY2FsbGJh Y2tfZGF0YTsKKwlzdHJ1Y3QgY29tcGxldGlvbglmcmFtZV9kb25lOworCisJaW50CQlmaXJfaGlu Y1tPTUFQRkJfUExBTkVfTlVNXTsKKwlpbnQJCWZpcl92aW5jW09NQVBGQl9QTEFORV9OVU1dOwor CisJc3RydWN0IGNsawkqZHNzX2ljaywgKmRzczFfZmNrOworCXN0cnVjdCBjbGsJKmRzc181NG1f ZmNrOworCisJZW51bSBvbWFwZmJfdXBkYXRlX21vZGUJdXBkYXRlX21vZGU7CisJc3RydWN0IG9t YXBmYl9kZXZpY2UJKmZiZGV2OworCisJc3RydWN0IG9tYXBmYl9jb2xvcl9rZXkJY29sb3Jfa2V5 OworfSBkaXNwYzsKKworc3RhdGljIHZvaWQgZW5hYmxlX2xjZF9jbG9ja3MoaW50IGVuYWJsZSk7 CisKK3N0YXRpYyB2b2lkIGlubGluZSBkaXNwY193cml0ZV9yZWcoaW50IGlkeCwgdTMyIHZhbCkK K3sKKwlfX3Jhd193cml0ZWwodmFsLCBkaXNwYy5iYXNlICsgaWR4KTsKK30KKworc3RhdGljIHUz MiBpbmxpbmUgZGlzcGNfcmVhZF9yZWcoaW50IGlkeCkKK3sKKwl1MzIgbCA9IF9fcmF3X3JlYWRs KGRpc3BjLmJhc2UgKyBpZHgpOworCXJldHVybiBsOworfQorCisvKiBTZWxlY3QgUkZCSSBvciBi eXBhc3MgbW9kZSAqLworc3RhdGljIHZvaWQgZW5hYmxlX3JmYmlfbW9kZShpbnQgZW5hYmxlKQor eworCXUzMiBsOworCisJbCA9IGRpc3BjX3JlYWRfcmVnKERJU1BDX0NPTlRST0wpOworCS8qIEVu YWJsZSBSRkJJLCBHUElPMC8xICovCisJbCAmPSB+KCgxIDw8IDExKSB8ICgxIDw8IDE1KSB8ICgx IDw8IDE2KSk7CisJbCB8PSBlbmFibGUgPyAoMSA8PCAxMSkgOiAwOworCS8qIFJGQkkgRW46IEdQ SU8wLzE9MTAgIFJGQkkgRGlzOiBHUElPMC8xPTExICovCisJbCB8PSAxIDw8IDE1OworCWwgfD0g ZW5hYmxlID8gMCA6ICgxIDw8IDE2KTsKKwlkaXNwY193cml0ZV9yZWcoRElTUENfQ09OVFJPTCwg bCk7CisKKwkvKiBTZXQgYnlwYXNzIG1vZGUgaW4gUkZCSSBtb2R1bGUgKi8KKwlsID0gX19yYXdf cmVhZGwoaW9fcDJ2KFJGQklfQ09OVFJPTCkpOworCWwgfD0gZW5hYmxlID8gMCA6ICgxIDw8IDEp OworCV9fcmF3X3dyaXRlbChsLCBpb19wMnYoUkZCSV9DT05UUk9MKSk7Cit9CisKK3N0YXRpYyB2 b2lkIHNldF9sY2RfZGF0YV9saW5lcyhpbnQgZGF0YV9saW5lcykKK3sKKwl1MzIgbDsKKwlpbnQg Y29kZSA9IDA7CisKKwlzd2l0Y2ggKGRhdGFfbGluZXMpIHsKKwljYXNlIDEyOgorCQljb2RlID0g MDsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJY29kZSA9IDE7CisJCWJyZWFrOworCWNhc2UgMTg6 CisJCWNvZGUgPSAyOworCQlicmVhazsKKwljYXNlIDI0OgorCQljb2RlID0gMzsKKwkJYnJlYWs7 CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJbCA9IGRpc3BjX3JlYWRfcmVnKERJU1BDX0NP TlRST0wpOworCWwgJj0gfigweDAzIDw8IDgpOworCWwgfD0gY29kZSA8PCA4OworCWRpc3BjX3dy aXRlX3JlZyhESVNQQ19DT05UUk9MLCBsKTsKK30KKworc3RhdGljIHZvaWQgc2V0X2xvYWRfbW9k ZShpbnQgbW9kZSkKK3sKKwlCVUdfT04obW9kZSAmIH4oRElTUENfTE9BRF9DTFVUX09OTFkgfCBE SVNQQ19MT0FEX0ZSQU1FX09OTFkgfAorCQkJRElTUENfTE9BRF9DTFVUX09OQ0VfRlJBTUUpKTsK KwlNT0RfUkVHX0ZMRChESVNQQ19DT05GSUcsIDB4MDMgPDwgMSwgbW9kZSA8PCAxKTsKK30KKwor dm9pZCBvbWFwX2Rpc3BjX3NldF9sY2Rfc2l6ZShpbnQgeCwgaW50IHkpCit7CisJQlVHX09OKCh4 ID4gKDEgPDwgMTEpKSB8fCAoeSA+ICgxIDw8IDExKSkpOworCWVuYWJsZV9sY2RfY2xvY2tzKDEp OworCU1PRF9SRUdfRkxEKERJU1BDX1NJWkVfTENELCBGTERfTUFTSygxNiwgMTEpIHwgRkxEX01B U0soMCwgMTEpLAorCQkJKCh5IC0gMSkgPDwgMTYpIHwgKHggLSAxKSk7CisJZW5hYmxlX2xjZF9j bG9ja3MoMCk7Cit9CitFWFBPUlRfU1lNQk9MKG9tYXBfZGlzcGNfc2V0X2xjZF9zaXplKTsKKwor dm9pZCBvbWFwX2Rpc3BjX3NldF9kaWdpdF9zaXplKGludCB4LCBpbnQgeSkKK3sKKwlCVUdfT04o KHggPiAoMSA8PCAxMSkpIHx8ICh5ID4gKDEgPDwgMTEpKSk7CisJZW5hYmxlX2xjZF9jbG9ja3Mo MSk7CisJTU9EX1JFR19GTEQoRElTUENfU0laRV9ESUcsIEZMRF9NQVNLKDE2LCAxMSkgfCBGTERf TUFTSygwLCAxMSksCisJCQkoKHkgLSAxKSA8PCAxNikgfCAoeCAtIDEpKTsKKwllbmFibGVfbGNk X2Nsb2NrcygwKTsKK30KK0VYUE9SVF9TWU1CT0wob21hcF9kaXNwY19zZXRfZGlnaXRfc2l6ZSk7 CisKK3N0YXRpYyB2b2lkIHNldHVwX3BsYW5lX2ZpZm8oaW50IHBsYW5lLCBpbnQgZXh0X21vZGUp Cit7CisJY29uc3QgdTMyIGZ0cnNfcmVnW10gPSB7IERJU1BDX0dGWF9GSUZPX1RIUkVTSE9MRCwK KwkJCQlESVNQQ19WSUQxX0JBU0UgKyBESVNQQ19WSURfRklGT19USFJFU0hPTEQsCisJCQkgICAg ICAgIERJU1BDX1ZJRDJfQkFTRSArIERJU1BDX1ZJRF9GSUZPX1RIUkVTSE9MRCB9OworCWNvbnN0 IHUzMiBmc3pfcmVnW10gPSB7IERJU1BDX0dGWF9GSUZPX1NJWkVfU1RBVFVTLAorCQkJCURJU1BD X1ZJRDFfQkFTRSArIERJU1BDX1ZJRF9GSUZPX1NJWkVfU1RBVFVTLAorCQkJCURJU1BDX1ZJRDJf QkFTRSArIERJU1BDX1ZJRF9GSUZPX1NJWkVfU1RBVFVTIH07CisJaW50IGxvdywgaGlnaDsKKwl1 MzIgbDsKKworCUJVR19PTihwbGFuZSA+IDIpOworCisJbCA9IGRpc3BjX3JlYWRfcmVnKGZzel9y ZWdbcGxhbmVdKTsKKwlsICY9IEZMRF9NQVNLKDAsIDkpOworCWlmIChleHRfbW9kZSkgeworCQls b3cgPSBsICogMyAvIDQ7CisJCWhpZ2ggPSBsOworCX0gZWxzZSB7CisJCWxvdyA9IGwgLyA0Owor CQloaWdoID0gbCAqIDMgLyA0OworCX0KKwlNT0RfUkVHX0ZMRChmdHJzX3JlZ1twbGFuZV0sIEZM RF9NQVNLKDE2LCA5KSB8IEZMRF9NQVNLKDAsIDkpLAorCQkJKGhpZ2ggPDwgMTYpIHwgbG93KTsK K30KKwordm9pZCBvbWFwX2Rpc3BjX2VuYWJsZV9sY2Rfb3V0KGludCBlbmFibGUpCit7CisJZW5h YmxlX2xjZF9jbG9ja3MoMSk7CisJTU9EX1JFR19GTEQoRElTUENfQ09OVFJPTCwgMSwgZW5hYmxl ID8gMSA6IDApOworCWVuYWJsZV9sY2RfY2xvY2tzKDApOworfQorRVhQT1JUX1NZTUJPTChvbWFw X2Rpc3BjX2VuYWJsZV9sY2Rfb3V0KTsKKwordm9pZCBvbWFwX2Rpc3BjX2VuYWJsZV9kaWdpdF9v dXQoaW50IGVuYWJsZSkKK3sKKwllbmFibGVfbGNkX2Nsb2NrcygxKTsKKwlNT0RfUkVHX0ZMRChE SVNQQ19DT05UUk9MLCAxIDw8IDEsIGVuYWJsZSA/IDEgPDwgMSA6IDApOworCWVuYWJsZV9sY2Rf Y2xvY2tzKDApOworfQorRVhQT1JUX1NZTUJPTChvbWFwX2Rpc3BjX2VuYWJsZV9kaWdpdF9vdXQp OworCitzdGF0aWMgaW5saW5lIGludCBfc2V0dXBfcGxhbmUoaW50IHBsYW5lLCBpbnQgY2hhbm5l bF9vdXQsCisJCQkJICB1MzIgcGFkZHIsIGludCBzY3JlZW5fd2lkdGgsCisJCQkJICBpbnQgcG9z X3gsIGludCBwb3NfeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorCQkJCSAgaW50IGNvbG9yX21v ZGUpCit7CisJY29uc3QgdTMyIGF0X3JlZ1tdID0geyBESVNQQ19HRlhfQVRUUklCVVRFUywKKwkJ CQlESVNQQ19WSUQxX0JBU0UgKyBESVNQQ19WSURfQVRUUklCVVRFUywKKwkJCSAgICAgICAgRElT UENfVklEMl9CQVNFICsgRElTUENfVklEX0FUVFJJQlVURVMgfTsKKwljb25zdCB1MzIgYmFfcmVn W10gPSB7IERJU1BDX0dGWF9CQTAsIERJU1BDX1ZJRDFfQkFTRSArIERJU1BDX1ZJRF9CQTAsCisJ CQkJRElTUENfVklEMl9CQVNFICsgRElTUENfVklEX0JBMCB9OworCWNvbnN0IHUzMiBwc19yZWdb XSA9IHsgRElTUENfR0ZYX1BPU0lUSU9OLAorCQkJCURJU1BDX1ZJRDFfQkFTRSArIERJU1BDX1ZJ RF9QT1NJVElPTiwKKwkJCQlESVNQQ19WSUQyX0JBU0UgKyBESVNQQ19WSURfUE9TSVRJT04gfTsK Kwljb25zdCB1MzIgc3pfcmVnW10gPSB7IERJU1BDX0dGWF9TSVpFLAorCQkJCURJU1BDX1ZJRDFf QkFTRSArIERJU1BDX1ZJRF9QSUNUVVJFX1NJWkUsCisJCQkJRElTUENfVklEMl9CQVNFICsgRElT UENfVklEX1BJQ1RVUkVfU0laRSB9OworCWNvbnN0IHUzMiByaV9yZWdbXSA9IHsgRElTUENfR0ZY X1JPV19JTkMsCisJCQkJRElTUENfVklEMV9CQVNFICsgRElTUENfVklEX1JPV19JTkMsCisJCQkg ICAgICAgIERJU1BDX1ZJRDJfQkFTRSArIERJU1BDX1ZJRF9ST1dfSU5DIH07CisJY29uc3QgdTMy IHZzX3JlZ1tdID0geyAwLCBESVNQQ19WSUQxX0JBU0UgKyBESVNQQ19WSURfU0laRSwKKwkJCQlE SVNQQ19WSUQyX0JBU0UgKyBESVNQQ19WSURfU0laRSB9OworCisJaW50IGNob3V0X3NoaWZ0LCBi dXJzdF9zaGlmdDsKKwlpbnQgY2hvdXRfdmFsOworCWludCBjb2xvcl9jb2RlOworCWludCBicHA7 CisJaW50IGNjb252X2VuOworCWludCBzZXRfdnNpemU7CisJdTMyIGw7CisKKyNpZmRlZiBWRVJC T1NFCisJZGV2X2RiZyhkaXNwYy5mYmRldi0+ZGV2LCAicGxhbmUgJWQgY2hhbm5lbCAlZCBwYWRk ciAlIzA4eCBzY3Jfd2lkdGggJWQiCisJCSAgICAiIHBvc194ICVkIHBvc195ICVkIHdpZHRoICVk IGhlaWdodCAlZCBjb2xvcl9tb2RlICVkXG4iLAorCQkgICAgcGxhbmUsIGNoYW5uZWxfb3V0LCBw YWRkciwgc2NyZWVuX3dpZHRoLCBwb3NfeCwgcG9zX3ksCisJCSAgICB3aWR0aCwgaGVpZ2h0LCBj b2xvcl9tb2RlKTsKKyNlbmRpZgorCisJc2V0X3ZzaXplID0gMDsKKwlzd2l0Y2ggKHBsYW5lKSB7 CisJY2FzZSBPTUFQRkJfUExBTkVfR0ZYOgorCQlidXJzdF9zaGlmdCA9IDY7CisJCWNob3V0X3No aWZ0ID0gODsKKwkJYnJlYWs7CisJY2FzZSBPTUFQRkJfUExBTkVfVklEMToKKwljYXNlIE9NQVBG Ql9QTEFORV9WSUQyOgorCQlidXJzdF9zaGlmdCA9IDE0OworCQljaG91dF9zaGlmdCA9IDE2Owor CQlzZXRfdnNpemUgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisKKwlzd2l0Y2ggKGNoYW5uZWxfb3V0KSB7CisJY2FzZSBPTUFQRkJfQ0hBTk5FTF9PVVRf TENEOgorCQljaG91dF92YWwgPSAwOworCQlicmVhazsKKwljYXNlIE9NQVBGQl9DSEFOTkVMX09V VF9ESUdJVDoKKwkJY2hvdXRfdmFsID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCisJY2NvbnZfZW4gPSAwOworCXN3aXRjaCAoY29sb3JfbW9kZSkgewor CWNhc2UgT01BUEZCX0NPTE9SX1JHQjU2NToKKwkJY29sb3JfY29kZSA9IERJU1BDX1JHQl8xNl9C UFA7CisJCWJwcCA9IDE2OworCQlicmVhazsKKwljYXNlIE9NQVBGQl9DT0xPUl9ZVVY0MjI6CisJ CWlmIChwbGFuZSA9PSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWNvbG9yX2NvZGUgPSBESVNQ Q19VWVZZXzQyMjsKKwkJY2NvbnZfZW4gPSAxOworCQlicHAgPSAxNjsKKwkJYnJlYWs7CisJY2Fz ZSBPTUFQRkJfQ09MT1JfWVVZNDIyOgorCQlpZiAocGxhbmUgPT0gMCkKKwkJCXJldHVybiAtRUlO VkFMOworCQljb2xvcl9jb2RlID0gRElTUENfWVVWMl80MjI7CisJCWNjb252X2VuID0gMTsKKwkJ YnBwID0gMTY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CWwgPSBkaXNwY19yZWFkX3JlZyhhdF9yZWdbcGxhbmVdKTsKKworCWwgJj0gfigweDBmIDw8IDEp OworCWwgfD0gY29sb3JfY29kZSA8PCAxOworCWwgJj0gfigxIDw8IDkpOworCWwgfD0gY2NvbnZf ZW4gPDwgOTsKKworCWwgJj0gfigweDAzIDw8IGJ1cnN0X3NoaWZ0KTsKKwlsIHw9IERJU1BDX0JV UlNUXzh4MzIgPDwgYnVyc3Rfc2hpZnQ7CisKKwlsICY9IH4oMSA8PCBjaG91dF9zaGlmdCk7CisJ bCB8PSBjaG91dF92YWwgPDwgY2hvdXRfc2hpZnQ7CisKKwlkaXNwY193cml0ZV9yZWcoYXRfcmVn W3BsYW5lXSwgbCk7CisKKwlkaXNwY193cml0ZV9yZWcoYmFfcmVnW3BsYW5lXSwgcGFkZHIpOwor CU1PRF9SRUdfRkxEKHBzX3JlZ1twbGFuZV0sCisJCSAgICBGTERfTUFTSygxNiwgMTEpIHwgRkxE X01BU0soMCwgMTEpLCAocG9zX3kgPDwgMTYpIHwgcG9zX3gpOworCisJTU9EX1JFR19GTEQoc3pf cmVnW3BsYW5lXSwgRkxEX01BU0soMTYsIDExKSB8IEZMRF9NQVNLKDAsIDExKSwKKwkJCSgoaGVp Z2h0IC0gMSkgPDwgMTYpIHwgKHdpZHRoIC0gMSkpOworCisJaWYgKHNldF92c2l6ZSkgeworCQkv KiBTZXQgdmlkZW8gc2l6ZSBpZiBzZXRfc2NhbGUgaGFzbid0IHNldCBpdCAqLworCQlpZiAoIWRp c3BjLmZpcl92aW5jW3BsYW5lXSkKKwkJCU1PRF9SRUdfRkxEKHZzX3JlZ1twbGFuZV0sCisJCQkJ RkxEX01BU0soMTYsIDExKSwgKGhlaWdodCAtIDEpIDw8IDE2KTsKKwkJaWYgKCFkaXNwYy5maXJf aGluY1twbGFuZV0pCisJCQlNT0RfUkVHX0ZMRCh2c19yZWdbcGxhbmVdLAorCQkJCUZMRF9NQVNL KDAsIDExKSwgd2lkdGggLSAxKTsKKwl9CisKKwlkaXNwY193cml0ZV9yZWcocmlfcmVnW3BsYW5l XSwgKHNjcmVlbl93aWR0aCAtIHdpZHRoKSAqIGJwcCAvIDggKyAxKTsKKworCXJldHVybiBoZWln aHQgKiBzY3JlZW5fd2lkdGggKiBicHAgLyA4OworfQorCitzdGF0aWMgaW50IG9tYXBfZGlzcGNf c2V0dXBfcGxhbmUoaW50IHBsYW5lLCBpbnQgY2hhbm5lbF9vdXQsCisJCQkJICB1bnNpZ25lZCBs b25nIG9mZnNldCwKKwkJCQkgIGludCBzY3JlZW5fd2lkdGgsCisJCQkJICBpbnQgcG9zX3gsIGlu dCBwb3NfeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorCQkJCSAgaW50IGNvbG9yX21vZGUpCit7 CisJdTMyIHBhZGRyOworCWludCByOworCisJaWYgKCh1bnNpZ25lZClwbGFuZSA+IGRpc3BjLm1l bV9kZXNjLnJlZ2lvbl9jbnQpCisJCXJldHVybiAtRUlOVkFMOworCXBhZGRyID0gZGlzcGMubWVt X2Rlc2MucmVnaW9uW3BsYW5lXS5wYWRkciArIG9mZnNldDsKKwllbmFibGVfbGNkX2Nsb2Nrcygx KTsKKwlyID0gX3NldHVwX3BsYW5lKHBsYW5lLCBjaGFubmVsX291dCwgcGFkZHIsCisJCQlzY3Jl ZW5fd2lkdGgsCisJCQlwb3NfeCwgcG9zX3ksIHdpZHRoLCBoZWlnaHQsIGNvbG9yX21vZGUpOwor CWVuYWJsZV9sY2RfY2xvY2tzKDApOworCXJldHVybiByOworfQorCitzdGF0aWMgdm9pZCB3cml0 ZV9maXJoX3JlZyhpbnQgcGxhbmUsIGludCByZWcsIHUzMiB2YWx1ZSkKK3sKKwl1MzIgYmFzZTsK KworCWlmIChwbGFuZSA9PSAxKQorCQliYXNlID0gRElTUENfVklEMV9CQVNFICsgRElTUENfVklE X0ZJUl9DT0VGX0gwOworCWVsc2UKKwkJYmFzZSA9IERJU1BDX1ZJRDJfQkFTRSArIERJU1BDX1ZJ RF9GSVJfQ09FRl9IMDsKKwlkaXNwY193cml0ZV9yZWcoYmFzZSArIHJlZyAqIDgsCXZhbHVlKTsK K30KKworc3RhdGljIHZvaWQgd3JpdGVfZmlyaHZfcmVnKGludCBwbGFuZSwgaW50IHJlZywgdTMy IHZhbHVlKQoreworCXUzMiBiYXNlOworCisJaWYgKHBsYW5lID09IDEpCisJCWJhc2UgPSBESVNQ Q19WSUQxX0JBU0UgKyBESVNQQ19WSURfRklSX0NPRUZfSFYwOworCWVsc2UKKwkJYmFzZSA9IERJ U1BDX1ZJRDJfQkFTRSArIERJU1BDX1ZJRF9GSVJfQ09FRl9IVjA7CisJZGlzcGNfd3JpdGVfcmVn KGJhc2UgKyByZWcgKiA4LAl2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF91cHNhbXBsaW5n X2NvZWZfdGFibGUoaW50IHBsYW5lKQoreworCWNvbnN0IHUzMiBjb2VmW11bMl0gPSB7CisJCXsg MHgwMDgwMDAwMCwgMHgwMDgwMDAwMCB9LAorCQl7IDB4MEQ3Q0Y4MDAsIDB4MDM3QjAyRkYgfSwK KwkJeyAweDFFNzBGNUZGLCAweDBDNkYwNUZFIH0sCisJCXsgMHgzMzVGRjVGRSwgMHgyMDU5MDdG QiB9LAorCQl7IDB4Rjc0OTQ5RjcsIDB4MDA0MDQwMDAgfSwKKwkJeyAweEY1NUYzM0ZCLCAweDA3 NTkyMEZFIH0sCisJCXsgMHhGNTcwMUVGRSwgMHgwNTZGMENGRiB9LAorCQl7IDB4Rjg3QzBERkYs IDB4MDI3QjAzMDAgfSwKKwl9OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykg eworCQl3cml0ZV9maXJoX3JlZyhwbGFuZSwgaSwgY29lZltpXVswXSk7CisJCXdyaXRlX2Zpcmh2 X3JlZyhwbGFuZSwgaSwgY29lZltpXVsxXSk7CisJfQorfQorCitzdGF0aWMgaW50IG9tYXBfZGlz cGNfc2V0X3NjYWxlKGludCBwbGFuZSwKKwkJCQlpbnQgb3JpZ193aWR0aCwgaW50IG9yaWdfaGVp Z2h0LAorCQkJCWludCBvdXRfd2lkdGgsIGludCBvdXRfaGVpZ2h0KQoreworCWNvbnN0IHUzMiBh dF9yZWdbXSAgPSB7IDAsIERJU1BDX1ZJRDFfQkFTRSArIERJU1BDX1ZJRF9BVFRSSUJVVEVTLAor CQkJCURJU1BDX1ZJRDJfQkFTRSArIERJU1BDX1ZJRF9BVFRSSUJVVEVTIH07CisJY29uc3QgdTMy IHZzX3JlZ1tdICA9IHsgMCwgRElTUENfVklEMV9CQVNFICsgRElTUENfVklEX1NJWkUsCisJCQkJ RElTUENfVklEMl9CQVNFICsgRElTUENfVklEX1NJWkUgfTsKKwljb25zdCB1MzIgZmlyX3JlZ1td ID0geyAwLCBESVNQQ19WSUQxX0JBU0UgKyBESVNQQ19WSURfRklSLAorCQkJCURJU1BDX1ZJRDJf QkFTRSArIERJU1BDX1ZJRF9GSVIgfTsKKworCXUzMiBsOworCWludCBmaXJfaGluYzsKKwlpbnQg ZmlyX3ZpbmM7CisKKwlpZiAoKHVuc2lnbmVkKXBsYW5lID4gT01BUEZCX1BMQU5FX05VTSkKKwkJ cmV0dXJuIC1FTk9ERVY7CisKKwlpZiAocGxhbmUgPT0gT01BUEZCX1BMQU5FX0dGWCAmJgorCSAg ICAob3V0X3dpZHRoICE9IG9yaWdfd2lkdGggfHwgb3V0X2hlaWdodCAhPSBvcmlnX2hlaWdodCkp CisJCXJldHVybiAtRUlOVkFMOworCisJZW5hYmxlX2xjZF9jbG9ja3MoMSk7CisJaWYgKG9yaWdf d2lkdGggPCBvdXRfd2lkdGgpIHsKKwkJLyoKKwkJICogVXBzYW1wbGluZy4KKwkJICogQ3VycmVu dGx5IHlvdSBjYW4gb25seSBzY2FsZSBib3RoIGRpbWVuc2lvbnMgaW4gb25lIHdheS4KKwkJICov CisJCWlmIChvcmlnX2hlaWdodCA+IG91dF9oZWlnaHQgfHwKKwkJICAgIG9yaWdfd2lkdGggKiA4 IDwgb3V0X3dpZHRoIHx8CisJCSAgICBvcmlnX2hlaWdodCAqIDggPCBvdXRfaGVpZ2h0KSB7CisJ CQllbmFibGVfbGNkX2Nsb2NrcygwKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXNldF91 cHNhbXBsaW5nX2NvZWZfdGFibGUocGxhbmUpOworCX0gZWxzZSBpZiAob3JpZ193aWR0aCA+IG91 dF93aWR0aCkgeworCQkvKiBEb3duc2FtcGxpbmcgbm90IHlldCBzdXBwb3J0ZWQKKwkJKi8KKwor CQllbmFibGVfbGNkX2Nsb2NrcygwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICghb3Jp Z193aWR0aCB8fCBvcmlnX3dpZHRoID09IG91dF93aWR0aCkKKwkJZmlyX2hpbmMgPSAwOworCWVs c2UKKwkJZmlyX2hpbmMgPSAxMDI0ICogb3JpZ193aWR0aCAvIG91dF93aWR0aDsKKwlpZiAoIW9y aWdfaGVpZ2h0IHx8IG9yaWdfaGVpZ2h0ID09IG91dF9oZWlnaHQpCisJCWZpcl92aW5jID0gMDsK KwllbHNlCisJCWZpcl92aW5jID0gMTAyNCAqIG9yaWdfaGVpZ2h0IC8gb3V0X2hlaWdodDsKKwlk aXNwYy5maXJfaGluY1twbGFuZV0gPSBmaXJfaGluYzsKKwlkaXNwYy5maXJfdmluY1twbGFuZV0g PSBmaXJfdmluYzsKKworCU1PRF9SRUdfRkxEKGZpcl9yZWdbcGxhbmVdLAorCQkgICAgRkxEX01B U0soMTYsIDEyKSB8IEZMRF9NQVNLKDAsIDEyKSwKKwkJICAgICgoZmlyX3ZpbmMgJiA0MDk1KSA8 PCAxNikgfAorCQkgICAgKGZpcl9oaW5jICYgNDA5NSkpOworCisJZGV2X2RiZyhkaXNwYy5mYmRl di0+ZGV2LCAib3V0X3dpZHRoICVkIG91dF9oZWlnaHQgJWQgb3JpZ193aWR0aCAlZCAiCisJCSJv cmlnX2hlaWdodCAlZCBmaXJfaGluYyAgJWQgZmlyX3ZpbmMgJWRcbiIsCisJCW91dF93aWR0aCwg b3V0X2hlaWdodCwgb3JpZ193aWR0aCwgb3JpZ19oZWlnaHQsCisJCWZpcl9oaW5jLCBmaXJfdmlu Yyk7CisKKwlNT0RfUkVHX0ZMRCh2c19yZWdbcGxhbmVdLAorCQkgICAgRkxEX01BU0soMTYsIDEx KSB8IEZMRF9NQVNLKDAsIDExKSwKKwkJICAgICgob3V0X2hlaWdodCAtIDEpIDw8IDE2KSB8IChv dXRfd2lkdGggLSAxKSk7CisKKwlsID0gZGlzcGNfcmVhZF9yZWcoYXRfcmVnW3BsYW5lXSk7CisJ bCAmPSB+KDB4MDMgPDwgNSk7CisJbCB8PSBmaXJfaGluYyA/ICgxIDw8IDUpIDogMDsKKwlsIHw9 IGZpcl92aW5jID8gKDEgPDwgNikgOiAwOworCWRpc3BjX3dyaXRlX3JlZyhhdF9yZWdbcGxhbmVd LCBsKTsKKworCWVuYWJsZV9sY2RfY2xvY2tzKDApOworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IG9tYXBfZGlzcGNfZW5hYmxlX3BsYW5lKGludCBwbGFuZSwgaW50IGVuYWJsZSkKK3sKKwlj b25zdCB1MzIgYXRfcmVnW10gPSB7IERJU1BDX0dGWF9BVFRSSUJVVEVTLAorCQkJCURJU1BDX1ZJ RDFfQkFTRSArIERJU1BDX1ZJRF9BVFRSSUJVVEVTLAorCQkJCURJU1BDX1ZJRDJfQkFTRSArIERJ U1BDX1ZJRF9BVFRSSUJVVEVTIH07CisJaWYgKCh1bnNpZ25lZCBpbnQpcGxhbmUgPiBkaXNwYy5t ZW1fZGVzYy5yZWdpb25fY250KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVuYWJsZV9sY2RfY2xv Y2tzKDEpOworCU1PRF9SRUdfRkxEKGF0X3JlZ1twbGFuZV0sIDEsIGVuYWJsZSA/IDEgOiAwKTsK KwllbmFibGVfbGNkX2Nsb2NrcygwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9t YXBfZGlzcGNfc2V0X2NvbG9yX2tleShzdHJ1Y3Qgb21hcGZiX2NvbG9yX2tleSAqY2spCit7CisJ dTMyIGRmX3JlZywgdHJfcmVnOworCWludCBzaGlmdCwgdmFsOworCisJc3dpdGNoIChjay0+Y2hh bm5lbF9vdXQpIHsKKwljYXNlIE9NQVBGQl9DSEFOTkVMX09VVF9MQ0Q6CisJCWRmX3JlZyA9IERJ U1BDX0RFRkFVTFRfQ09MT1IwOworCQl0cl9yZWcgPSBESVNQQ19UUkFOU19DT0xPUjA7CisJCXNo aWZ0ID0gMTA7CisJCWJyZWFrOworCWNhc2UgT01BUEZCX0NIQU5ORUxfT1VUX0RJR0lUOgorCQlk Zl9yZWcgPSBESVNQQ19ERUZBVUxUX0NPTE9SMTsKKwkJdHJfcmVnID0gRElTUENfVFJBTlNfQ09M T1IxOworCQlzaGlmdCA9IDEyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisJc3dpdGNoIChjay0+a2V5X3R5cGUpIHsKKwljYXNlIE9NQVBGQl9DT0xPUl9LRVlf RElTQUJMRUQ6CisJCXZhbCA9IDA7CisJCWJyZWFrOworCWNhc2UgT01BUEZCX0NPTE9SX0tFWV9H RlhfRFNUOgorCQl2YWwgPSAxOworCQlicmVhazsKKwljYXNlIE9NQVBGQl9DT0xPUl9LRVlfVklE X1NSQzoKKwkJdmFsID0gMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCWVuYWJsZV9sY2RfY2xvY2tzKDEpOworCU1PRF9SRUdfRkxEKERJU1BDX0NPTkZJRywg RkxEX01BU0soc2hpZnQsIDIpLCB2YWwgPDwgc2hpZnQpOworCisJaWYgKHZhbCAhPSAwKQorCQlk aXNwY193cml0ZV9yZWcodHJfcmVnLCBjay0+dHJhbnNfa2V5KTsKKwlkaXNwY193cml0ZV9yZWco ZGZfcmVnLCBjay0+YmFja2dyb3VuZCk7CisJZW5hYmxlX2xjZF9jbG9ja3MoMCk7CisKKwlkaXNw Yy5jb2xvcl9rZXkgPSAqY2s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwX2Rp c3BjX2dldF9jb2xvcl9rZXkoc3RydWN0IG9tYXBmYl9jb2xvcl9rZXkgKmNrKQoreworCSpjayA9 IGRpc3BjLmNvbG9yX2tleTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbG9hZF9wYWxl dHRlKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbnQgb21hcF9kaXNwY19zZXRfdXBkYXRlX21vZGUo ZW51bSBvbWFwZmJfdXBkYXRlX21vZGUgbW9kZSkKK3sKKwlpbnQgciA9IDA7CisKKwlpZiAobW9k ZSAhPSBkaXNwYy51cGRhdGVfbW9kZSkgeworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSBPTUFQ RkJfQVVUT19VUERBVEU6CisJCWNhc2UgT01BUEZCX01BTlVBTF9VUERBVEU6CisJCQllbmFibGVf bGNkX2Nsb2NrcygxKTsKKwkJCW9tYXBfZGlzcGNfZW5hYmxlX2xjZF9vdXQoMSk7CisJCQlkaXNw Yy51cGRhdGVfbW9kZSA9IG1vZGU7CisJCQlicmVhazsKKwkJY2FzZSBPTUFQRkJfVVBEQVRFX0RJ U0FCTEVEOgorCQkJaW5pdF9jb21wbGV0aW9uKCZkaXNwYy5mcmFtZV9kb25lKTsKKwkJCW9tYXBf ZGlzcGNfZW5hYmxlX2xjZF9vdXQoMCk7CisJCQlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGlt ZW91dCgmZGlzcGMuZnJhbWVfZG9uZSwKKwkJCQkJbXNlY3NfdG9famlmZmllcyg1MDApKSkgewor CQkJCWRldl9lcnIoZGlzcGMuZmJkZXYtPmRldiwKKwkJCQkJICJ0aW1lb3V0IHdhaXRpbmcgZm9y IEZSQU1FIERPTkVcbiIpOworCQkJfQorCQkJZGlzcGMudXBkYXRlX21vZGUgPSBtb2RlOworCQkJ ZW5hYmxlX2xjZF9jbG9ja3MoMCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXIgPSAtRUlO VkFMOworCQl9CisJfQorCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfZGlzcGNf Z2V0X2NhcHMoaW50IHBsYW5lLCBzdHJ1Y3Qgb21hcGZiX2NhcHMgKmNhcHMpCit7CisJY2Fwcy0+ Y3RybCB8PSBPTUFQRkJfQ0FQU19QTEFORV9SRUxPQ0FURV9NRU07CisJaWYgKHBsYW5lID4gMCkK KwkJY2Fwcy0+Y3RybCB8PSBPTUFQRkJfQ0FQU19QTEFORV9TQ0FMRTsKKwljYXBzLT5wbGFuZV9j b2xvciB8PSAoMSA8PCBPTUFQRkJfQ09MT1JfUkdCNTY1KSB8CisJCQkgICAgICgxIDw8IE9NQVBG Ql9DT0xPUl9ZVVY0MjIpIHwKKwkJCSAgICAgKDEgPDwgT01BUEZCX0NPTE9SX1lVWTQyMik7CisJ aWYgKHBsYW5lID09IDApCisJCWNhcHMtPnBsYW5lX2NvbG9yIHw9ICgxIDw8IE9NQVBGQl9DT0xP Ul9DTFVUXzhCUFApIHwKKwkJCQkgICAgICgxIDw8IE9NQVBGQl9DT0xPUl9DTFVUXzRCUFApIHwK KwkJCQkgICAgICgxIDw8IE9NQVBGQl9DT0xPUl9DTFVUXzJCUFApIHwKKwkJCQkgICAgICgxIDw8 IE9NQVBGQl9DT0xPUl9DTFVUXzFCUFApIHwKKwkJCQkgICAgICgxIDw8IE9NQVBGQl9DT0xPUl9S R0I0NDQpOworfQorCitzdGF0aWMgZW51bSBvbWFwZmJfdXBkYXRlX21vZGUgb21hcF9kaXNwY19n ZXRfdXBkYXRlX21vZGUodm9pZCkKK3sKKwlyZXR1cm4gZGlzcGMudXBkYXRlX21vZGU7Cit9CisK K3N0YXRpYyB2b2lkIHNldHVwX2NvbG9yX2NvbnZfY29lZih2b2lkKQoreworCXUzMiBtYXNrID0g RkxEX01BU0soMTYsIDExKSB8IEZMRF9NQVNLKDAsIDExKTsKKwlpbnQgY2YxX3JlZyA9IERJU1BD X1ZJRDFfQkFTRSArIERJU1BDX1ZJRF9DT05WX0NPRUYwOworCWludCBjZjJfcmVnID0gRElTUENf VklEMl9CQVNFICsgRElTUENfVklEX0NPTlZfQ09FRjA7CisJaW50IGF0MV9yZWcgPSBESVNQQ19W SUQxX0JBU0UgKyBESVNQQ19WSURfQVRUUklCVVRFUzsKKwlpbnQgYXQyX3JlZyA9IERJU1BDX1ZJ RDJfQkFTRSArIERJU1BDX1ZJRF9BVFRSSUJVVEVTOworCWNvbnN0IHN0cnVjdCBjb2xvcl9jb252 X2NvZWYgeworCQlpbnQgIHJ5LCAgcmNyLCAgcmNiLCAgIGd5LCAgZ2NyLCAgZ2NiLCAgIGJ5LCAg YmNyLCAgYmNiOworCQlpbnQgIGZ1bGxfcmFuZ2U7CisJfSAgY3RibF9idDYwMV81ID0geworCQkg ICAgMjk4LCAgNDA5LCAgICAwLCAgMjk4LCAtMjA4LCAtMTAwLCAgMjk4LCAgICAwLCAgNTE3LCAw LAorCX07CisJY29uc3Qgc3RydWN0IGNvbG9yX2NvbnZfY29lZiAqY3Q7CisjZGVmaW5lIENWQUwo eCwgeSkJKCgoeCAmIDIwNDcpIDw8IDE2KSB8ICh5ICYgMjA0NykpCisKKwljdCA9ICZjdGJsX2J0 NjAxXzU7CisKKwlNT0RfUkVHX0ZMRChjZjFfcmVnLAkJbWFzaywJQ1ZBTChjdC0+cmNyLCBjdC0+ cnkpKTsKKwlNT0RfUkVHX0ZMRChjZjFfcmVnICsgNCwJbWFzaywJQ1ZBTChjdC0+Z3ksICBjdC0+ cmNiKSk7CisJTU9EX1JFR19GTEQoY2YxX3JlZyArIDgsCW1hc2ssCUNWQUwoY3QtPmdjYiwgY3Qt PmdjcikpOworCU1PRF9SRUdfRkxEKGNmMV9yZWcgKyAxMiwJbWFzaywJQ1ZBTChjdC0+YmNyLCBj dC0+YnkpKTsKKwlNT0RfUkVHX0ZMRChjZjFfcmVnICsgMTYsCW1hc2ssCUNWQUwoMCwJICAgICAg Y3QtPmJjYikpOworCisJTU9EX1JFR19GTEQoY2YyX3JlZywJCW1hc2ssCUNWQUwoY3QtPnJjciwg Y3QtPnJ5KSk7CisJTU9EX1JFR19GTEQoY2YyX3JlZyArIDQsCW1hc2ssCUNWQUwoY3QtPmd5LCAg Y3QtPnJjYikpOworCU1PRF9SRUdfRkxEKGNmMl9yZWcgKyA4LAltYXNrLAlDVkFMKGN0LT5nY2Is IGN0LT5nY3IpKTsKKwlNT0RfUkVHX0ZMRChjZjJfcmVnICsgMTIsCW1hc2ssCUNWQUwoY3QtPmJj ciwgY3QtPmJ5KSk7CisJTU9EX1JFR19GTEQoY2YyX3JlZyArIDE2LAltYXNrLAlDVkFMKDAsCSAg ICAgIGN0LT5iY2IpKTsKKyN1bmRlZiBDVkFMCisKKwlNT0RfUkVHX0ZMRChhdDFfcmVnLCAoMSA8 PCAxMSksIGN0LT5mdWxsX3JhbmdlKTsKKwlNT0RfUkVHX0ZMRChhdDJfcmVnLCAoMSA8PCAxMSks IGN0LT5mdWxsX3JhbmdlKTsKK30KKworc3RhdGljIHZvaWQgY2FsY19ja19kaXYoaW50IGlzX3Rm dCwgaW50IHBjaywgaW50ICpsY2tfZGl2LCBpbnQgKnBja19kaXYpCit7CisJdW5zaWduZWQgbG9u ZyBmY2ssIGxjazsKKworCSpsY2tfZGl2ID0gMTsKKwlwY2sgPSBtYXgoMSwgcGNrKTsKKwlmY2sg PSBjbGtfZ2V0X3JhdGUoZGlzcGMuZHNzMV9mY2spOworCWxjayA9IGZjazsKKwkqcGNrX2RpdiA9 IChsY2sgKyBwY2sgLSAxKSAvIHBjazsKKwlpZiAoaXNfdGZ0KQorCQkqcGNrX2RpdiA9IG1heCgy LCAqcGNrX2Rpdik7CisJZWxzZQorCQkqcGNrX2RpdiA9IG1heCgzLCAqcGNrX2Rpdik7CisJaWYg KCpwY2tfZGl2ID4gMjU1KSB7CisJCSpwY2tfZGl2ID0gMjU1OworCQlsY2sgPSBwY2sgKiAqcGNr X2RpdjsKKwkJKmxja19kaXYgPSBmY2sgLyBsY2s7CisJCUJVR19PTigqbGNrX2RpdiA8IDEpOwor CQlpZiAoKmxja19kaXYgPiAyNTUpIHsKKwkJCSpsY2tfZGl2ID0gMjU1OworCQkJZGV2X3dhcm4o ZGlzcGMuZmJkZXYtPmRldiwgInBpeGNsb2NrICVkIGtIeiB0b28gbG93LlxuIiwKKwkJCQkgcGNr IC8gMTAwMCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF9sY2RfdGZ0X21vZGUoaW50 IGVuYWJsZSkKK3sKKwl1MzIgbWFzazsKKworCW1hc2sgPSAxIDw8IDM7CisJTU9EX1JFR19GTEQo RElTUENfQ09OVFJPTCwgbWFzaywgZW5hYmxlID8gbWFzayA6IDApOworfQorCitzdGF0aWMgdm9p ZCBzZXRfbGNkX3RpbWluZ3Modm9pZCkKK3sKKwl1MzIgbDsKKwlpbnQgbGNrX2RpdiwgcGNrX2Rp djsKKwlzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCA9IGRpc3BjLmZiZGV2LT5wYW5lbDsKKwlpbnQg aXNfdGZ0ID0gcGFuZWwtPmNvbmZpZyAmIE9NQVBfTENEQ19QQU5FTF9URlQ7CisJdW5zaWduZWQg bG9uZyBmY2s7CisKKwlsID0gZGlzcGNfcmVhZF9yZWcoRElTUENfVElNSU5HX0gpOworCWwgJj0g fihGTERfTUFTSygwLCA2KSB8IEZMRF9NQVNLKDgsIDgpIHwgRkxEX01BU0soMjAsIDgpKTsKKwls IHw9ICggbWF4KDEsIChtaW4oNjQsICBwYW5lbC0+aHN3KSkpIC0gMSApIDw8IDA7CisJbCB8PSAo IG1heCgxLCAobWluKDI1NiwgcGFuZWwtPmhmcCkpKSAtIDEgKSA8PCA4OworCWwgfD0gKCBtYXgo MSwgKG1pbigyNTYsIHBhbmVsLT5oYnApKSkgLSAxICkgPDwgMjA7CisJZGlzcGNfd3JpdGVfcmVn KERJU1BDX1RJTUlOR19ILCBsKTsKKworCWwgPSBkaXNwY19yZWFkX3JlZyhESVNQQ19USU1JTkdf Vik7CisJbCAmPSB+KEZMRF9NQVNLKDAsIDYpIHwgRkxEX01BU0soOCwgOCkgfCBGTERfTUFTSygy MCwgOCkpOworCWwgfD0gKCBtYXgoMSwgKG1pbig2NCwgIHBhbmVsLT52c3cpKSkgLSAxICkgPDwg MDsKKwlsIHw9ICggbWF4KDAsIChtaW4oMjU1LCBwYW5lbC0+dmZwKSkpIC0gMCApIDw8IDg7CisJ bCB8PSAoIG1heCgwLCAobWluKDI1NSwgcGFuZWwtPnZicCkpKSAtIDAgKSA8PCAyMDsKKwlkaXNw Y193cml0ZV9yZWcoRElTUENfVElNSU5HX1YsIGwpOworCisJbCA9IGRpc3BjX3JlYWRfcmVnKERJ U1BDX1BPTF9GUkVRKTsKKwlsICY9IH5GTERfTUFTSygxMiwgNik7CisJbCB8PSAocGFuZWwtPmNv bmZpZyAmIE9NQVBfTENEQ19TSUdOQUxfTUFTSykgPDwgMTI7CisJbCB8PSBwYW5lbC0+YWNiICYg MHhmZjsKKwlkaXNwY193cml0ZV9yZWcoRElTUENfUE9MX0ZSRVEsIGwpOworCisJY2FsY19ja19k aXYoaXNfdGZ0LCBwYW5lbC0+cGl4ZWxfY2xvY2sgKiAxMDAwLCAmbGNrX2RpdiwgJnBja19kaXYp OworCisJbCA9IGRpc3BjX3JlYWRfcmVnKERJU1BDX0RJVklTT1IpOworCWwgJj0gfihGTERfTUFT SygxNiwgOCkgfCBGTERfTUFTSygwLCA4KSk7CisJbCB8PSAobGNrX2RpdiA8PCAxNikgfCAocGNr X2RpdiA8PCAwKTsKKwlkaXNwY193cml0ZV9yZWcoRElTUENfRElWSVNPUiwgbCk7CisKKwkvKiB1 cGRhdGUgcGFuZWwgaW5mbyB3aXRoIHRoZSBleGFjdCBjbG9jayAqLworCWZjayA9IGNsa19nZXRf cmF0ZShkaXNwYy5kc3MxX2Zjayk7CisJcGFuZWwtPnBpeGVsX2Nsb2NrID0gZmNrIC8gbGNrX2Rp diAvIHBja19kaXYgLyAxMDAwOworfQorCitpbnQgb21hcF9kaXNwY19yZXF1ZXN0X2lycSh2b2lk ICgqY2FsbGJhY2spKHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKQoreworCWludCByID0gMDsKKwor CUJVR19PTihjYWxsYmFjayA9PSBOVUxMKTsKKworCWlmIChkaXNwYy5pcnFfY2FsbGJhY2spCisJ CXIgPSAtRUJVU1k7CisJZWxzZSB7CisJCWRpc3BjLmlycV9jYWxsYmFjayA9IGNhbGxiYWNrOwor CQlkaXNwYy5pcnFfY2FsbGJhY2tfZGF0YSA9IGRhdGE7CisJfQorCisJcmV0dXJuIHI7Cit9CitF WFBPUlRfU1lNQk9MKG9tYXBfZGlzcGNfcmVxdWVzdF9pcnEpOworCit2b2lkIG9tYXBfZGlzcGNf ZW5hYmxlX2lycXMoaW50IGlycV9tYXNrKQoreworCWVuYWJsZV9sY2RfY2xvY2tzKDEpOworCWRp c3BjLmVuYWJsZWRfaXJxcyA9IGlycV9tYXNrOworCWlycV9tYXNrIHw9IERJU1BDX0lSUV9NQVNL X0VSUk9SOworCU1PRF9SRUdfRkxEKERJU1BDX0lSUUVOQUJMRSwgMHg3ZmZmLCBpcnFfbWFzayk7 CisJZW5hYmxlX2xjZF9jbG9ja3MoMCk7Cit9CitFWFBPUlRfU1lNQk9MKG9tYXBfZGlzcGNfZW5h YmxlX2lycXMpOworCit2b2lkIG9tYXBfZGlzcGNfZGlzYWJsZV9pcnFzKGludCBpcnFfbWFzaykK K3sKKwllbmFibGVfbGNkX2Nsb2NrcygxKTsKKwlkaXNwYy5lbmFibGVkX2lycXMgJj0gfmlycV9t YXNrOworCWlycV9tYXNrICY9IH5ESVNQQ19JUlFfTUFTS19FUlJPUjsKKwlNT0RfUkVHX0ZMRChE SVNQQ19JUlFFTkFCTEUsIDB4N2ZmZiwgaXJxX21hc2spOworCWVuYWJsZV9sY2RfY2xvY2tzKDAp OworfQorRVhQT1JUX1NZTUJPTChvbWFwX2Rpc3BjX2Rpc2FibGVfaXJxcyk7CisKK3ZvaWQgb21h cF9kaXNwY19mcmVlX2lycSh2b2lkKQoreworCWVuYWJsZV9sY2RfY2xvY2tzKDEpOworCW9tYXBf ZGlzcGNfZGlzYWJsZV9pcnFzKERJU1BDX0lSUV9NQVNLX0FMTCk7CisJZGlzcGMuaXJxX2NhbGxi YWNrID0gTlVMTDsKKwlkaXNwYy5pcnFfY2FsbGJhY2tfZGF0YSA9IE5VTEw7CisJZW5hYmxlX2xj ZF9jbG9ja3MoMCk7Cit9CitFWFBPUlRfU1lNQk9MKG9tYXBfZGlzcGNfZnJlZV9pcnEpOworCitz dGF0aWMgaXJxcmV0dXJuX3Qgb21hcF9kaXNwY19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpk ZXYpCit7CisJdTMyIHN0YXQgPSBkaXNwY19yZWFkX3JlZyhESVNQQ19JUlFTVEFUVVMpOworCisJ aWYgKHN0YXQgJiBESVNQQ19JUlFfRlJBTUVNQVNLKQorCQljb21wbGV0ZSgmZGlzcGMuZnJhbWVf ZG9uZSk7CisKKwlpZiAoc3RhdCAmIERJU1BDX0lSUV9NQVNLX0VSUk9SKSB7CisJCWlmIChwcmlu dGtfcmF0ZWxpbWl0KCkpIHsKKwkJCWRldl9lcnIoZGlzcGMuZmJkZXYtPmRldiwgImlycSBlcnJv ciBzdGF0dXMgJTA0eFxuIiwKKwkJCQlzdGF0ICYgMHg3ZmZmKTsKKwkJfQorCX0KKworCWlmICgo c3RhdCAmIGRpc3BjLmVuYWJsZWRfaXJxcykgJiYgZGlzcGMuaXJxX2NhbGxiYWNrKQorCQlkaXNw Yy5pcnFfY2FsbGJhY2soZGlzcGMuaXJxX2NhbGxiYWNrX2RhdGEpOworCisJZGlzcGNfd3JpdGVf cmVnKERJU1BDX0lSUVNUQVRVUywgc3RhdCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisK K3N0YXRpYyBpbnQgZ2V0X2Rzc19jbG9ja3Modm9pZCkKK3sKKwlpZiAoSVNfRVJSKChkaXNwYy5k c3NfaWNrID0gY2xrX2dldChkaXNwYy5mYmRldi0+ZGV2LCAiZHNzX2ljayIpKSkpIHsKKwkJZGV2 X2VycihkaXNwYy5mYmRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGRzc19pY2siKTsKKwkJcmV0dXJuIFBU Ul9FUlIoZGlzcGMuZHNzX2ljayk7CisJfQorCisJaWYgKElTX0VSUigoZGlzcGMuZHNzMV9mY2sg PSBjbGtfZ2V0KGRpc3BjLmZiZGV2LT5kZXYsICJkc3MxX2ZjayIpKSkpIHsKKwkJZGV2X2Vycihk aXNwYy5mYmRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGRzczFfZmNrIik7CisJCWNsa19wdXQoZGlzcGMu ZHNzX2ljayk7CisJCXJldHVybiBQVFJfRVJSKGRpc3BjLmRzczFfZmNrKTsKKwl9CisKKwlpZiAo SVNfRVJSKChkaXNwYy5kc3NfNTRtX2ZjayA9CisJCQkJY2xrX2dldChkaXNwYy5mYmRldi0+ZGV2 LCAiZHNzXzU0bV9mY2siKSkpKSB7CisJCWRldl9lcnIoZGlzcGMuZmJkZXYtPmRldiwgImNhbid0 IGdldCBkc3NfNTRtX2ZjayIpOworCQljbGtfcHV0KGRpc3BjLmRzc19pY2spOworCQljbGtfcHV0 KGRpc3BjLmRzczFfZmNrKTsKKwkJcmV0dXJuIFBUUl9FUlIoZGlzcGMuZHNzXzU0bV9mY2spOwor CX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwdXRfZHNzX2Nsb2Nrcyh2b2lkKQor eworCWNsa19wdXQoZGlzcGMuZHNzXzU0bV9mY2spOworCWNsa19wdXQoZGlzcGMuZHNzMV9mY2sp OworCWNsa19wdXQoZGlzcGMuZHNzX2ljayk7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9sY2Rf Y2xvY2tzKGludCBlbmFibGUpCit7CisJaWYgKGVuYWJsZSkKKwkJY2xrX2VuYWJsZShkaXNwYy5k c3MxX2Zjayk7CisJZWxzZQorCQljbGtfZGlzYWJsZShkaXNwYy5kc3MxX2Zjayk7Cit9CisKK3N0 YXRpYyB2b2lkIGVuYWJsZV9pbnRlcmZhY2VfY2xvY2tzKGludCBlbmFibGUpCit7CisJaWYgKGVu YWJsZSkKKwkJY2xrX2VuYWJsZShkaXNwYy5kc3NfaWNrKTsKKwllbHNlCisJCWNsa19kaXNhYmxl KGRpc3BjLmRzc19pY2spOworfQorCitzdGF0aWMgdm9pZCBlbmFibGVfZGlnaXRfY2xvY2tzKGlu dCBlbmFibGUpCit7CisJaWYgKGVuYWJsZSkKKwkJY2xrX2VuYWJsZShkaXNwYy5kc3NfNTRtX2Zj ayk7CisJZWxzZQorCQljbGtfZGlzYWJsZShkaXNwYy5kc3NfNTRtX2Zjayk7Cit9CisKK3N0YXRp YyB2b2lkIG9tYXBfZGlzcGNfc3VzcGVuZCh2b2lkKQoreworCWlmIChkaXNwYy51cGRhdGVfbW9k ZSA9PSBPTUFQRkJfQVVUT19VUERBVEUpIHsKKwkJaW5pdF9jb21wbGV0aW9uKCZkaXNwYy5mcmFt ZV9kb25lKTsKKwkJb21hcF9kaXNwY19lbmFibGVfbGNkX291dCgwKTsKKwkJaWYgKCF3YWl0X2Zv cl9jb21wbGV0aW9uX3RpbWVvdXQoJmRpc3BjLmZyYW1lX2RvbmUsCisJCQkJbXNlY3NfdG9famlm Zmllcyg1MDApKSkgeworCQkJZGV2X2VycihkaXNwYy5mYmRldi0+ZGV2LAorCQkJCSJ0aW1lb3V0 IHdhaXRpbmcgZm9yIEZSQU1FIERPTkVcbiIpOworCQl9CisJCWVuYWJsZV9sY2RfY2xvY2tzKDAp OworCX0KK30KKworc3RhdGljIHZvaWQgb21hcF9kaXNwY19yZXN1bWUodm9pZCkKK3sKKwlpZiAo ZGlzcGMudXBkYXRlX21vZGUgPT0gT01BUEZCX0FVVE9fVVBEQVRFKSB7CisJCWVuYWJsZV9sY2Rf Y2xvY2tzKDEpOworCQlpZiAoIWRpc3BjLmV4dF9tb2RlKSB7CisJCQlzZXRfbGNkX3RpbWluZ3Mo KTsKKwkJCWxvYWRfcGFsZXR0ZSgpOworCQl9CisJCW9tYXBfZGlzcGNfZW5hYmxlX2xjZF9vdXQo MSk7CisJfQorfQorCisKK3N0YXRpYyBpbnQgb21hcF9kaXNwY191cGRhdGVfd2luZG93KHN0cnVj dCBmYl9pbmZvICpmYmksCisJCQkJIHN0cnVjdCBvbWFwZmJfdXBkYXRlX3dpbmRvdyAqd2luLAor CQkJCSB2b2lkICgqY29tcGxldGVfY2FsbGJhY2spKHZvaWQgKmFyZyksCisJCQkJIHZvaWQgKmNv bXBsZXRlX2NhbGxiYWNrX2RhdGEpCit7CisJcmV0dXJuIGRpc3BjLnVwZGF0ZV9tb2RlID09IE9N QVBGQl9VUERBVEVfRElTQUJMRUQgPyAtRU5PREVWIDogMDsKK30KKworc3RhdGljIGludCBtbWFw X2tlcm4oc3RydWN0IG9tYXBmYl9tZW1fcmVnaW9uICpyZWdpb24pCit7CisJc3RydWN0IHZtX3N0 cnVjdAkqa3ZtYTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QJdm1hOworCXBncHJvdF90CQlwZ3By b3Q7CisJdW5zaWduZWQgbG9uZwkJdmFkZHI7CisKKwlrdm1hID0gZ2V0X3ZtX2FyZWEocmVnaW9u LT5zaXplLCBWTV9JT1JFTUFQKTsKKwlpZiAoa3ZtYSA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGlz cGMuZmJkZXYtPmRldiwgImNhbid0IGdldCBrZXJuZWwgdm0gYXJlYVxuIik7CisJCXJldHVybiAt RU5PTUVNOworCX0KKwl2bWEudm1fbW0gPSAmaW5pdF9tbTsKKworCXZhZGRyID0gKHVuc2lnbmVk IGxvbmcpa3ZtYS0+YWRkcjsKKworCXBncHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUocGdwcm90 X2tlcm5lbCk7CisJdm1hLnZtX3N0YXJ0ID0gdmFkZHI7CisJdm1hLnZtX2VuZCA9IHZhZGRyICsg cmVnaW9uLT5zaXplOworCWlmIChpb19yZW1hcF9wZm5fcmFuZ2UoJnZtYSwgdmFkZHIsIHJlZ2lv bi0+cGFkZHIgPj4gUEFHRV9TSElGVCwKKwkJCSAgIHJlZ2lvbi0+c2l6ZSwgcGdwcm90KSA8IDAp IHsKKwkJZGV2X2VycihkaXNwYy5mYmRldi0+ZGV2LCAia2VybmVsIG1tYXAgZm9yIEZCTUVNIGZh aWxlZFxuIik7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlyZWdpb24tPnZhZGRyID0gKHZvaWQg Kil2YWRkcjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtbWFwX3VzZXJfb3Blbihz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlpbnQgcGxhbmUgPSAoaW50KXZtYS0+dm1f cHJpdmF0ZV9kYXRhOworCisJYXRvbWljX2luYygmZGlzcGMubWFwX2NvdW50W3BsYW5lXSk7Cit9 CisKK3N0YXRpYyB2b2lkIG1tYXBfdXNlcl9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZt YSkKK3sKKwlpbnQgcGxhbmUgPSAoaW50KXZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCisJYXRvbWlj X2RlYygmZGlzcGMubWFwX2NvdW50W3BsYW5lXSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgdm1fb3Bl cmF0aW9uc19zdHJ1Y3QgbW1hcF91c2VyX29wcyA9IHsKKwkub3BlbiA9IG1tYXBfdXNlcl9vcGVu LAorCS5jbG9zZSA9IG1tYXBfdXNlcl9jbG9zZSwKK307CisKK3N0YXRpYyBpbnQgb21hcF9kaXNw Y19tbWFwX3VzZXIoc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJc3RydWN0IHZtX2FyZWFfc3Ry dWN0ICp2bWEpCit7CisJc3RydWN0IG9tYXBmYl9wbGFuZV9zdHJ1Y3QgKnBsYW5lID0gaW5mby0+ cGFyOworCXVuc2lnbmVkIGxvbmcgb2ZmOworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJdTMyIGxl bjsKKworCWlmICh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQgPT0gMCkKKwkJcmV0dXJuIDA7 CisJaWYgKHZtYS0+dm1fcGdvZmYgPiAofjBVTCA+PiBQQUdFX1NISUZUKSkKKwkJcmV0dXJuIC1F SU5WQUw7CisJb2ZmID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOworCisJc3RhcnQgPSBp bmZvLT5maXguc21lbV9zdGFydDsKKwlsZW4gPSBpbmZvLT5maXguc21lbV9sZW47CisJaWYgKG9m ZiA+PSBsZW4pCisJCXJldHVybiAtRUlOVkFMOworCWlmICgodm1hLT52bV9lbmQgLSB2bWEtPnZt X3N0YXJ0ICsgb2ZmKSA+IGxlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisJb2ZmICs9IHN0YXJ0Owor CXZtYS0+dm1fcGdvZmYgPSBvZmYgPj4gUEFHRV9TSElGVDsKKwl2bWEtPnZtX2ZsYWdzIHw9IFZN X0lPIHwgVk1fUkVTRVJWRUQ7CisJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21i aW5lKHZtYS0+dm1fcGFnZV9wcm90KTsKKwl2bWEtPnZtX29wcyA9ICZtbWFwX3VzZXJfb3BzOwor CXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gKHZvaWQgKilwbGFuZS0+aWR4OworCWlmIChpb19yZW1h cF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCBvZmYgPj4gUEFHRV9TSElGVCwKKwkJCSAg ICAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX3BhZ2VfcHJvdCkpCisJCXJl dHVybiAtRUFHQUlOOworCS8qIHZtX29wcy5vcGVuIHdvbid0IGJlIGNhbGxlZCBmb3IgbW1hcCBp dHNlbGYuICovCisJYXRvbWljX2luYygmZGlzcGMubWFwX2NvdW50W3BsYW5lLT5pZHhdKTsKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdW5tYXBfa2VybihzdHJ1Y3Qgb21hcGZiX21lbV9y ZWdpb24gKnJlZ2lvbikKK3sKKwl2dW5tYXAocmVnaW9uLT52YWRkcik7Cit9CisKK3N0YXRpYyBp bnQgYWxsb2NfcGFsZXR0ZV9yYW0odm9pZCkKK3sKKwlkaXNwYy5wYWxldHRlX3ZhZGRyID0gZG1h X2FsbG9jX3dyaXRlY29tYmluZShkaXNwYy5mYmRldi0+ZGV2LAorCQlNQVhfUEFMRVRURV9TSVpF LCAmZGlzcGMucGFsZXR0ZV9wYWRkciwgR0ZQX0tFUk5FTCk7CisJaWYgKGRpc3BjLnBhbGV0dGVf dmFkZHIgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRpc3BjLmZiZGV2LT5kZXYsICJmYWlsZWQgdG8g YWxsb2MgcGFsZXR0ZSBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9wYWxldHRlX3JhbSh2b2lkKQoreworCWRtYV9m cmVlX3dyaXRlY29tYmluZShkaXNwYy5mYmRldi0+ZGV2LCBNQVhfUEFMRVRURV9TSVpFLAorCQkJ ZGlzcGMucGFsZXR0ZV92YWRkciwgZGlzcGMucGFsZXR0ZV9wYWRkcik7Cit9CisKK3N0YXRpYyBp bnQgYWxsb2NfZmJtZW0oc3RydWN0IG9tYXBmYl9tZW1fcmVnaW9uICpyZWdpb24pCit7CisJcmVn aW9uLT52YWRkciA9IGRtYV9hbGxvY193cml0ZWNvbWJpbmUoZGlzcGMuZmJkZXYtPmRldiwKKwkJ CXJlZ2lvbi0+c2l6ZSwgJnJlZ2lvbi0+cGFkZHIsIEdGUF9LRVJORUwpOworCisJaWYgKHJlZ2lv bi0+dmFkZHIgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRpc3BjLmZiZGV2LT5kZXYsICJ1bmFibGUg dG8gYWxsb2NhdGUgRkIgRE1BIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwor CXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2ZibWVtKHN0cnVjdCBvbWFwZmJfbWVt X3JlZ2lvbiAqcmVnaW9uKQoreworCWRtYV9mcmVlX3dyaXRlY29tYmluZShkaXNwYy5mYmRldi0+ ZGV2LCByZWdpb24tPnNpemUsCisJCQkgICAgICByZWdpb24tPnZhZGRyLCByZWdpb24tPnBhZGRy KTsKK30KKworc3RhdGljIHN0cnVjdCByZXNtYXAgKmluaXRfcmVzbWFwKHVuc2lnbmVkIGxvbmcg c3RhcnQsIHNpemVfdCBzaXplKQoreworCXVuc2lnbmVkIHBhZ2VfY250OworCXN0cnVjdCByZXNt YXAgKnJlc19tYXA7CisKKwlwYWdlX2NudCA9IFBBR0VfQUxJR04oc2l6ZSkgLyBQQUdFX1NJWkU7 CisJcmVzX21hcCA9CisJICAgIGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNtYXApICsgUkVTTUFQ X1NJWkUocGFnZV9jbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAocmVzX21hcCA9PSBOVUxMKQorCQly ZXR1cm4gTlVMTDsKKwlyZXNfbWFwLT5zdGFydCA9IHN0YXJ0OworCXJlc19tYXAtPnBhZ2VfY250 ID0gcGFnZV9jbnQ7CisJcmVzX21hcC0+bWFwID0gKHVuc2lnbmVkIGxvbmcgKikocmVzX21hcCAr IDEpOworCXJldHVybiByZXNfbWFwOworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwX3Jlc21hcChz dHJ1Y3QgcmVzbWFwICpyZXNfbWFwKQoreworCWtmcmVlKHJlc19tYXApOworfQorCitzdGF0aWMg aW5saW5lIGludCByZXNtYXBfbWVtX3R5cGUodW5zaWduZWQgbG9uZyBzdGFydCkKK3sKKwlpZiAo c3RhcnQgPj0gT01BUDJfU1JBTV9TVEFSVCAmJgorCSAgICBzdGFydCA8IE9NQVAyX1NSQU1fU1RB UlQgKyBPTUFQMl9TUkFNX1NJWkUpCisJCXJldHVybiBPTUFQRkJfTUVNVFlQRV9TUkFNOworCWVs c2UKKwkJcmV0dXJuIE9NQVBGQl9NRU1UWVBFX1NEUkFNOworfQorCitzdGF0aWMgaW5saW5lIGlu dCByZXNtYXBfcGFnZV9yZXNlcnZlZChzdHJ1Y3QgcmVzbWFwICpyZXNfbWFwLCB1bnNpZ25lZCBw YWdlX25yKQoreworCXJldHVybiAqUkVTTUFQX1BUUihyZXNfbWFwLCBwYWdlX25yKSAmIFJFU01B UF9NQVNLKHBhZ2VfbnIpID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZXNtYXBf cmVzZXJ2ZV9wYWdlKHN0cnVjdCByZXNtYXAgKnJlc19tYXAsIHVuc2lnbmVkIHBhZ2VfbnIpCit7 CisJQlVHX09OKHJlc21hcF9wYWdlX3Jlc2VydmVkKHJlc19tYXAsIHBhZ2VfbnIpKTsKKwkqUkVT TUFQX1BUUihyZXNfbWFwLCBwYWdlX25yKSB8PSBSRVNNQVBfTUFTSyhwYWdlX25yKTsKK30KKwor c3RhdGljIGlubGluZSB2b2lkIHJlc21hcF9mcmVlX3BhZ2Uoc3RydWN0IHJlc21hcCAqcmVzX21h cCwgdW5zaWduZWQgcGFnZV9ucikKK3sKKwlCVUdfT04oIXJlc21hcF9wYWdlX3Jlc2VydmVkKHJl c19tYXAsIHBhZ2VfbnIpKTsKKwkqUkVTTUFQX1BUUihyZXNfbWFwLCBwYWdlX25yKSAmPSB+UkVT TUFQX01BU0socGFnZV9ucik7Cit9CisKK3N0YXRpYyB2b2lkIHJlc21hcF9yZXNlcnZlX3JlZ2lv bih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3Qgc2l6ZSkKK3sKKworCXN0cnVjdCByZXNtYXAJ KnJlc19tYXA7CisJdW5zaWduZWQJc3RhcnRfcGFnZTsKKwl1bnNpZ25lZAllbmRfcGFnZTsKKwlp bnQJCW10eXBlOworCXVuc2lnbmVkCWk7CisKKwltdHlwZSA9IHJlc21hcF9tZW1fdHlwZShzdGFy dCk7CisJcmVzX21hcCA9IGRpc3BjLnJlc19tYXBbbXR5cGVdOworCWRldl9kYmcoZGlzcGMuZmJk ZXYtPmRldiwgInJlc2VydmUgbWVtIHR5cGUgJWQgc3RhcnQgJTA4bHggc2l6ZSAlZFxuIiwKKwkJ bXR5cGUsIHN0YXJ0LCBzaXplKTsKKwlzdGFydF9wYWdlID0gKHN0YXJ0IC0gcmVzX21hcC0+c3Rh cnQpIC8gUEFHRV9TSVpFOworCWVuZF9wYWdlID0gc3RhcnRfcGFnZSArIFBBR0VfQUxJR04oc2l6 ZSkgLyBQQUdFX1NJWkU7CisJZm9yIChpID0gc3RhcnRfcGFnZTsgaSA8IGVuZF9wYWdlOyBpKysp CisJCXJlc21hcF9yZXNlcnZlX3BhZ2UocmVzX21hcCwgaSk7Cit9CisKK3N0YXRpYyB2b2lkIHJl c21hcF9mcmVlX3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3Qgc2l6ZSkKK3sKKwlz dHJ1Y3QgcmVzbWFwCSpyZXNfbWFwOworCXVuc2lnbmVkCXN0YXJ0X3BhZ2U7CisJdW5zaWduZWQJ ZW5kX3BhZ2U7CisJdW5zaWduZWQJaTsKKwlpbnQJCW10eXBlOworCisJbXR5cGUgPSByZXNtYXBf bWVtX3R5cGUoc3RhcnQpOworCXJlc19tYXAgPSBkaXNwYy5yZXNfbWFwW210eXBlXTsKKwlkZXZf ZGJnKGRpc3BjLmZiZGV2LT5kZXYsICJmcmVlIG1lbSB0eXBlICVkIHN0YXJ0ICUwOGx4IHNpemUg JWRcbiIsCisJCW10eXBlLCBzdGFydCwgc2l6ZSk7CisJc3RhcnRfcGFnZSA9IChzdGFydCAtIHJl c19tYXAtPnN0YXJ0KSAvIFBBR0VfU0laRTsKKwllbmRfcGFnZSA9IHN0YXJ0X3BhZ2UgKyBQQUdF X0FMSUdOKHNpemUpIC8gUEFHRV9TSVpFOworCWZvciAoaSA9IHN0YXJ0X3BhZ2U7IGkgPCBlbmRf cGFnZTsgaSsrKQorCQlyZXNtYXBfZnJlZV9wYWdlKHJlc19tYXAsIGkpOworfQorCitzdGF0aWMg dW5zaWduZWQgbG9uZyByZXNtYXBfYWxsb2NfcmVnaW9uKGludCBtdHlwZSwgc2l6ZV90IHNpemUp Cit7CisJdW5zaWduZWQgaTsKKwl1bnNpZ25lZCB0b3RhbDsKKwl1bnNpZ25lZCBzdGFydF9wYWdl OworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJc3RydWN0IHJlc21hcCAqcmVzX21hcCA9IGRpc3Bj LnJlc19tYXBbbXR5cGVdOworCisJQlVHX09OKG10eXBlID49IERJU1BDX01FTVRZUEVfTlVNIHx8 IHJlc19tYXAgPT0gTlVMTCB8fCAhc2l6ZSk7CisKKwlzaXplID0gUEFHRV9BTElHTihzaXplKSAv IFBBR0VfU0laRTsKKwlzdGFydF9wYWdlID0gMDsKKwl0b3RhbCA9IDA7CisJZm9yIChpID0gMDsg aSA8IHJlc19tYXAtPnBhZ2VfY250OyBpKyspIHsKKwkJaWYgKHJlc21hcF9wYWdlX3Jlc2VydmVk KHJlc19tYXAsIGkpKSB7CisJCQlzdGFydF9wYWdlID0gaSArIDE7CisJCQl0b3RhbCA9IDA7CisJ CX0gZWxzZSBpZiAoKyt0b3RhbCA9PSBzaXplKQorCQkJYnJlYWs7CisJfQorCWlmICh0b3RhbCA8 IHNpemUpCisJCXJldHVybiAwOworCisJc3RhcnQgPSByZXNfbWFwLT5zdGFydCArIHN0YXJ0X3Bh Z2UgKiBQQUdFX1NJWkU7CisJcmVzbWFwX3Jlc2VydmVfcmVnaW9uKHN0YXJ0LCBzaXplICogUEFH RV9TSVpFKTsKKworCXJldHVybiBzdGFydDsKK30KKworLyogTm90ZSB0aGF0IHRoaXMgd2lsbCBv bmx5IHdvcmsgZm9yIHVzZXIgbWFwcGluZ3MsIHdlIGRvbid0IGRlYWwgd2l0aAorICoga2VybmVs IG1hcHBpbmdzIGhlcmUsIHNvIGZiY29uIHdpbGwga2VlcCB1c2luZyB0aGUgb2xkIHJlZ2lvbi4K KyAqLworc3RhdGljIGludCBvbWFwX2Rpc3BjX3NldHVwX21lbShpbnQgcGxhbmUsIHNpemVfdCBz aXplLCBpbnQgbWVtX3R5cGUsCisJCQkJdW5zaWduZWQgbG9uZyAqcGFkZHIpCit7CisJc3RydWN0 IG9tYXBmYl9tZW1fcmVnaW9uICpyZzsKKwl1bnNpZ25lZCBsb25nIG5ld19hZGRyID0gMDsKKwor CWlmICgodW5zaWduZWQpcGxhbmUgPiBkaXNwYy5tZW1fZGVzYy5yZWdpb25fY250KQorCQlyZXR1 cm4gLUVJTlZBTDsKKwlpZiAobWVtX3R5cGUgPj0gRElTUENfTUVNVFlQRV9OVU0pCisJCXJldHVy biAtRUlOVkFMOworCWlmIChkaXNwYy5yZXNfbWFwW21lbV90eXBlXSA9PSBOVUxMKQorCQlyZXR1 cm4gLUVOT01FTTsKKwlyZyA9ICZkaXNwYy5tZW1fZGVzYy5yZWdpb25bcGxhbmVdOworCWlmIChz aXplID09IHJnLT5zaXplICYmIG1lbV90eXBlID09IHJnLT50eXBlKQorCQlyZXR1cm4gMDsKKwlp ZiAoYXRvbWljX3JlYWQoJmRpc3BjLm1hcF9jb3VudFtwbGFuZV0pKQorCQlyZXR1cm4gLUVCVVNZ OworCWlmIChyZy0+c2l6ZSAhPSAwKQorCQlyZXNtYXBfZnJlZV9yZWdpb24ocmctPnBhZGRyLCBy Zy0+c2l6ZSk7CisJaWYgKHNpemUgIT0gMCkgeworCQluZXdfYWRkciA9IHJlc21hcF9hbGxvY19y ZWdpb24obWVtX3R5cGUsIHNpemUpOworCQlpZiAoIW5ld19hZGRyKSB7CisJCQkvKiBSZWFsbG9j YXRlIG9sZCByZWdpb24uICovCisJCQlyZXNtYXBfcmVzZXJ2ZV9yZWdpb24ocmctPnBhZGRyLCBy Zy0+c2l6ZSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKwlyZy0+cGFkZHIgPSBuZXdf YWRkcjsKKwlyZy0+c2l6ZSA9IHNpemU7CisJcmctPnR5cGUgPSBtZW1fdHlwZTsKKworCSpwYWRk ciA9IG5ld19hZGRyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0dXBfZmJtZW0o c3RydWN0IG9tYXBmYl9tZW1fZGVzYyAqcmVxX21kKQoreworCXN0cnVjdCBvbWFwZmJfbWVtX3Jl Z2lvbgkqcmc7CisJaW50IGk7CisJaW50IHI7CisJdW5zaWduZWQgbG9uZwkJCW1lbV9zdGFydFtE SVNQQ19NRU1UWVBFX05VTV07CisJdW5zaWduZWQgbG9uZwkJCW1lbV9lbmRbRElTUENfTUVNVFlQ RV9OVU1dOworCisJaWYgKCFyZXFfbWQtPnJlZ2lvbl9jbnQpIHsKKwkJZGV2X2VycihkaXNwYy5m YmRldi0+ZGV2LCAibm8gbWVtb3J5IHJlZ2lvbnMgZGVmaW5lZFxuIik7CisJCXJldHVybiAtRU5P RU5UOworCX0KKworCXJnID0gJnJlcV9tZC0+cmVnaW9uWzBdOworCW1lbXNldChtZW1fc3RhcnQs IDB4ZmYsIHNpemVvZihtZW1fc3RhcnQpKTsKKwltZW1zZXQobWVtX2VuZCwgMCwgc2l6ZW9mKG1l bV9lbmQpKTsKKworCWZvciAoaSA9IDA7IGkgPCByZXFfbWQtPnJlZ2lvbl9jbnQ7IGkrKywgcmcr KykgeworCQlpbnQgbXR5cGU7CisJCWlmIChyZy0+cGFkZHIpIHsKKwkJCXJnLT5hbGxvYyA9IDA7 CisJCQlpZiAocmctPnZhZGRyID09IE5VTEwpIHsKKwkJCQlyZy0+bWFwID0gMTsKKwkJCQlpZiAo KHIgPSBtbWFwX2tlcm4ocmcpKSA8IDApCisJCQkJCXJldHVybiByOworCQkJfQorCQl9IGVsc2Ug eworCQkJaWYgKHJnLT50eXBlICE9IE9NQVBGQl9NRU1UWVBFX1NEUkFNKSB7CisJCQkJZGV2X2Vy cihkaXNwYy5mYmRldi0+ZGV2LAorCQkJCQkidW5zdXBwb3J0ZWQgbWVtb3J5IHR5cGVcbiIpOwor CQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJcmctPmFsbG9jID0gcmctPm1hcCA9IDE7CisJ CQlpZiAoKHIgPSBhbGxvY19mYm1lbShyZykpIDwgMCkKKwkJCQlyZXR1cm4gcjsKKwkJfQorCQlt dHlwZSA9IHJnLT50eXBlOworCisJCWlmIChyZy0+cGFkZHIgPCBtZW1fc3RhcnRbbXR5cGVdKQor CQkJbWVtX3N0YXJ0W210eXBlXSA9IHJnLT5wYWRkcjsKKwkJaWYgKHJnLT5wYWRkciArIHJnLT5z aXplID4gbWVtX2VuZFttdHlwZV0pCisJCQltZW1fZW5kW210eXBlXSA9IHJnLT5wYWRkciArIHJn LT5zaXplOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBESVNQQ19NRU1UWVBFX05VTTsgaSsrKSB7 CisJCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJCXNpemVfdCBzaXplOworCQlpZiAobWVtX2VuZFtp XSA9PSAwKQorCQkJY29udGludWU7CisJCXN0YXJ0ID0gbWVtX3N0YXJ0W2ldOworCQlzaXplID0g bWVtX2VuZFtpXSAtIHN0YXJ0OworCQlkaXNwYy5yZXNfbWFwW2ldID0gaW5pdF9yZXNtYXAoc3Rh cnQsIHNpemUpOworCQlyID0gLUVOT01FTTsKKwkJaWYgKGRpc3BjLnJlc19tYXBbaV0gPT0gTlVM TCkKKwkJCWdvdG8gZmFpbDsKKwkJLyogSW5pdGlhbCBzdGF0ZSBpcyB0aGF0IGV2ZXJ5dGhpbmcg aXMgcmVzZXJ2ZWQuIFRoaXMKKwkJICogaW5jbHVkZXMgcG9zc2libGUgaG9sZXMgYXMgd2VsbCwg d2hpY2ggd2lsbCBuZXZlciBiZQorCQkgKiBmcmVlZC4KKwkJICovCisJCXJlc21hcF9yZXNlcnZl X3JlZ2lvbihzdGFydCwgc2l6ZSk7CisJfQorCisJZGlzcGMubWVtX2Rlc2MgPSAqcmVxX21kOwor CisJcmV0dXJuIDA7CitmYWlsOgorCWZvciAoaSA9IDA7IGkgPCBESVNQQ19NRU1UWVBFX05VTTsg aSsrKSB7CisJCWlmIChkaXNwYy5yZXNfbWFwW2ldICE9IE5VTEwpCisJCQljbGVhbnVwX3Jlc21h cChkaXNwYy5yZXNfbWFwW2ldKTsKKwl9CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIGNs ZWFudXBfZmJtZW0odm9pZCkKK3sKKwlzdHJ1Y3Qgb21hcGZiX21lbV9yZWdpb24gKnJnOworCWlu dCBpOworCisJZm9yIChpID0gMDsgaSA8IERJU1BDX01FTVRZUEVfTlVNOyBpKyspIHsKKwkJaWYg KGRpc3BjLnJlc19tYXBbaV0gIT0gTlVMTCkKKwkJCWNsZWFudXBfcmVzbWFwKGRpc3BjLnJlc19t YXBbaV0pOworCX0KKwlyZyA9ICZkaXNwYy5tZW1fZGVzYy5yZWdpb25bMF07CisJZm9yIChpID0g MDsgaSA8IGRpc3BjLm1lbV9kZXNjLnJlZ2lvbl9jbnQ7IGkrKywgcmcrKykgeworCQlpZiAocmct PmFsbG9jKQorCQkJZnJlZV9mYm1lbShyZyk7CisJCWVsc2UgeworCQkJaWYgKHJnLT5tYXApCisJ CQkJdW5tYXBfa2VybihyZyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgb21hcF9kaXNwY19p bml0KHN0cnVjdCBvbWFwZmJfZGV2aWNlICpmYmRldiwgaW50IGV4dF9tb2RlLAorCQkJICAgc3Ry dWN0IG9tYXBmYl9tZW1fZGVzYyAqcmVxX3ZyYW0pCit7CisJaW50IHI7CisJdTMyIGw7CisJc3Ry dWN0IGxjZF9wYW5lbCAqcGFuZWwgPSBmYmRldi0+cGFuZWw7CisJaW50IHRtbyA9IDEwMDAwOwor CWludCBza2lwX2luaXQgPSAwOworCWludCBpOworCisJbWVtc2V0KCZkaXNwYywgMCwgc2l6ZW9m KGRpc3BjKSk7CisKKwlkaXNwYy5iYXNlID0gaW9fcDJ2KERJU1BDX0JBU0UpOworCWRpc3BjLmZi ZGV2ID0gZmJkZXY7CisJZGlzcGMuZXh0X21vZGUgPSBleHRfbW9kZTsKKworCWluaXRfY29tcGxl dGlvbigmZGlzcGMuZnJhbWVfZG9uZSk7CisKKwlpZiAoKHIgPSBnZXRfZHNzX2Nsb2NrcygpKSA8 IDApCisJCXJldHVybiByOworCisJZW5hYmxlX2ludGVyZmFjZV9jbG9ja3MoMSk7CisJZW5hYmxl X2xjZF9jbG9ja3MoMSk7CisKKyNpZmRlZiBDT05GSUdfRkJfT01BUF9CT09UTE9BREVSX0lOSVQK KwlsID0gZGlzcGNfcmVhZF9yZWcoRElTUENfQ09OVFJPTCk7CisJLyogTENEIGVuYWJsZWQgPyAq LworCWlmIChsICYgMSkgeworCQlwcl9pbmZvKCJvbWFwZmI6IHNraXBwaW5nIGhhcmR3YXJlIGlu aXRpYWxpemF0aW9uXG4iKTsKKwkJc2tpcF9pbml0ID0gMTsKKwl9CisjZW5kaWYKKworCWlmICgh c2tpcF9pbml0KSB7CisJCS8qIFJlc2V0IG1vbml0b3Jpbmcgd29ya3Mgb25seSB3LyB0aGUgNTRN IGNsayAqLworCQllbmFibGVfZGlnaXRfY2xvY2tzKDEpOworCisJCS8qIFNvZnQgcmVzZXQgKi8K KwkJTU9EX1JFR19GTEQoRElTUENfU1lTQ09ORklHLCAxIDw8IDEsIDEgPDwgMSk7CisKKwkJd2hp bGUgKCEoZGlzcGNfcmVhZF9yZWcoRElTUENfU1lTU1RBVFVTKSAmIDEpKSB7CisJCQlpZiAoIS0t dG1vKSB7CisJCQkJZGV2X2VycihkaXNwYy5mYmRldi0+ZGV2LCAic29mdCByZXNldCBmYWlsZWRc biIpOworCQkJCXIgPSAtRU5PREVWOworCQkJCWVuYWJsZV9kaWdpdF9jbG9ja3MoMCk7CisJCQkJ Z290byBmYWlsMTsKKwkJCX0KKwkJfQorCisJCWVuYWJsZV9kaWdpdF9jbG9ja3MoMCk7CisJfQor CisJLyogRW5hYmxlIHNtYXJ0IGlkbGUgYW5kIGF1dG9pZGxlICovCisJbCA9IGRpc3BjX3JlYWRf cmVnKERJU1BDX0NPTlRST0wpOworCWwgJj0gfigoMyA8PCAxMikgfCAoMyA8PCAzKSk7CisJbCB8 PSAoMiA8PCAxMikgfCAoMiA8PCAzKSB8ICgxIDw8IDApOworCWRpc3BjX3dyaXRlX3JlZyhESVNQ Q19TWVNDT05GSUcsIGwpOworCW9tYXBfd3JpdGVsKDEgPDwgMCwgRFNTX0JBU0UgKyBEU1NfU1lT Q09ORklHKTsKKworCS8qIFNldCBmdW5jdGlvbmFsIGNsb2NrIGF1dG9nYXRpbmcgKi8KKwlsID0g ZGlzcGNfcmVhZF9yZWcoRElTUENfQ09ORklHKTsKKwlsIHw9IDEgPDwgOTsKKwlkaXNwY193cml0 ZV9yZWcoRElTUENfQ09ORklHLCBsKTsKKworCWwgPSBkaXNwY19yZWFkX3JlZyhESVNQQ19JUlFT VEFUVVMpOworCWRpc3BjX3dyaXRlX3JlZyhsLCBESVNQQ19JUlFTVEFUVVMpOworCisJLyogRW5h YmxlIHRob3NlIHRoYXQgd2UgaGFuZGxlIGFsd2F5cyAqLworCW9tYXBfZGlzcGNfZW5hYmxlX2ly cXMoRElTUENfSVJRX0ZSQU1FTUFTSyk7CisKKwlpZiAoKHIgPSByZXF1ZXN0X2lycShJTlRfMjRY WF9EU1NfSVJRLCBvbWFwX2Rpc3BjX2lycV9oYW5kbGVyLAorCQkJICAgMCwgTU9EVUxFX05BTUUs IGZiZGV2KSkgPCAwKSB7CisJCWRldl9lcnIoZGlzcGMuZmJkZXYtPmRldiwgImNhbid0IGdldCBE U1MgSVJRXG4iKTsKKwkJZ290byBmYWlsMTsKKwl9CisKKwkvKiBMMyBmaXJld2FsbCBzZXR0aW5n OiBlbmFibGUgYWNjZXNzIHRvIE9DTSBSQU0gKi8KKwlfX3Jhd193cml0ZWwoMHg0MDIwMDBiMCwg aW9fcDJ2KDB4NjgwMDUwYTApKTsKKworCWlmICgociA9IGFsbG9jX3BhbGV0dGVfcmFtKCkpIDwg MCkKKwkJZ290byBmYWlsMjsKKworCWlmICgociA9IHNldHVwX2ZibWVtKHJlcV92cmFtKSkgPCAw KQorCQlnb3RvIGZhaWwzOworCisJaWYgKCFza2lwX2luaXQpIHsKKwkJZm9yIChpID0gMDsgaSA8 IGRpc3BjLm1lbV9kZXNjLnJlZ2lvbl9jbnQ7IGkrKykgeworCQkJbWVtc2V0KGRpc3BjLm1lbV9k ZXNjLnJlZ2lvbltpXS52YWRkciwgMCwKKwkJCQlkaXNwYy5tZW1fZGVzYy5yZWdpb25baV0uc2l6 ZSk7CisJCX0KKworCQkvKiBTZXQgbG9naWMgY2xvY2sgdG8gZmNrLCBwaXhlbCBjbG9jayB0byBm Y2svMiBmb3Igbm93ICovCisJCU1PRF9SRUdfRkxEKERJU1BDX0RJVklTT1IsIEZMRF9NQVNLKDE2 LCA4KSwgMSA8PCAxNik7CisJCU1PRF9SRUdfRkxEKERJU1BDX0RJVklTT1IsIEZMRF9NQVNLKDAs IDgpLCAyIDw8IDApOworCisJCXNldHVwX3BsYW5lX2ZpZm8oMCwgZXh0X21vZGUpOworCQlzZXR1 cF9wbGFuZV9maWZvKDEsIGV4dF9tb2RlKTsKKwkJc2V0dXBfcGxhbmVfZmlmbygyLCBleHRfbW9k ZSk7CisKKwkJc2V0dXBfY29sb3JfY29udl9jb2VmKCk7CisKKwkJc2V0X2xjZF90ZnRfbW9kZShw YW5lbC0+Y29uZmlnICYgT01BUF9MQ0RDX1BBTkVMX1RGVCk7CisJCXNldF9sb2FkX21vZGUoRElT UENfTE9BRF9GUkFNRV9PTkxZKTsKKworCQlpZiAoIWV4dF9tb2RlKSB7CisJCQlzZXRfbGNkX2Rh dGFfbGluZXMocGFuZWwtPmRhdGFfbGluZXMpOworCQkJb21hcF9kaXNwY19zZXRfbGNkX3NpemUo cGFuZWwtPnhfcmVzLCBwYW5lbC0+eV9yZXMpOworCQkJc2V0X2xjZF90aW1pbmdzKCk7CisJCX0g ZWxzZQorCQkJc2V0X2xjZF9kYXRhX2xpbmVzKHBhbmVsLT5icHApOworCQllbmFibGVfcmZiaV9t b2RlKGV4dF9tb2RlKTsKKwl9CisKKwlsID0gZGlzcGNfcmVhZF9yZWcoRElTUENfUkVWSVNJT04p OworCXByX2luZm8oIm9tYXBmYjogRElTUEMgdmVyc2lvbiAlZC4lZCBpbml0aWFsaXplZFxuIiwK KwkJIGwgPj4gNCAmIDB4MGYsIGwgJiAweDBmKTsKKwllbmFibGVfbGNkX2Nsb2NrcygwKTsKKwor CXJldHVybiAwOworZmFpbDM6CisJZnJlZV9wYWxldHRlX3JhbSgpOworZmFpbDI6CisJZnJlZV9p cnEoSU5UXzI0WFhfRFNTX0lSUSwgZmJkZXYpOworZmFpbDE6CisJZW5hYmxlX2xjZF9jbG9ja3Mo MCk7CisJZW5hYmxlX2ludGVyZmFjZV9jbG9ja3MoMCk7CisJcHV0X2Rzc19jbG9ja3MoKTsKKwor CXJldHVybiByOworfQorCitzdGF0aWMgdm9pZCBvbWFwX2Rpc3BjX2NsZWFudXAodm9pZCkKK3sK KwlpbnQgaTsKKworCW9tYXBfZGlzcGNfc2V0X3VwZGF0ZV9tb2RlKE9NQVBGQl9VUERBVEVfRElT QUJMRUQpOworCS8qIFRoaXMgd2lsbCBhbHNvIGRpc2FibGUgY2xvY2tzIHRoYXQgYXJlIG9uICov CisJZm9yIChpID0gMDsgaSA8IGRpc3BjLm1lbV9kZXNjLnJlZ2lvbl9jbnQ7IGkrKykKKwkJb21h cF9kaXNwY19lbmFibGVfcGxhbmUoaSwgMCk7CisJY2xlYW51cF9mYm1lbSgpOworCWZyZWVfcGFs ZXR0ZV9yYW0oKTsKKwlmcmVlX2lycShJTlRfMjRYWF9EU1NfSVJRLCBkaXNwYy5mYmRldik7CisJ ZW5hYmxlX2ludGVyZmFjZV9jbG9ja3MoMCk7CisJcHV0X2Rzc19jbG9ja3MoKTsKK30KKworY29u c3Qgc3RydWN0IGxjZF9jdHJsIG9tYXAyX2ludF9jdHJsID0geworCS5uYW1lCQkJPSAiaW50ZXJu YWwiLAorCS5pbml0CQkJPSBvbWFwX2Rpc3BjX2luaXQsCisJLmNsZWFudXAJCT0gb21hcF9kaXNw Y19jbGVhbnVwLAorCS5nZXRfY2FwcwkJPSBvbWFwX2Rpc3BjX2dldF9jYXBzLAorCS5zZXRfdXBk YXRlX21vZGUJPSBvbWFwX2Rpc3BjX3NldF91cGRhdGVfbW9kZSwKKwkuZ2V0X3VwZGF0ZV9tb2Rl CT0gb21hcF9kaXNwY19nZXRfdXBkYXRlX21vZGUsCisJLnVwZGF0ZV93aW5kb3cJCT0gb21hcF9k aXNwY191cGRhdGVfd2luZG93LAorCS5zdXNwZW5kCQk9IG9tYXBfZGlzcGNfc3VzcGVuZCwKKwku cmVzdW1lCQkJPSBvbWFwX2Rpc3BjX3Jlc3VtZSwKKwkuc2V0dXBfcGxhbmUJCT0gb21hcF9kaXNw Y19zZXR1cF9wbGFuZSwKKwkuc2V0dXBfbWVtCQk9IG9tYXBfZGlzcGNfc2V0dXBfbWVtLAorCS5z ZXRfc2NhbGUJCT0gb21hcF9kaXNwY19zZXRfc2NhbGUsCisJLmVuYWJsZV9wbGFuZQkJPSBvbWFw X2Rpc3BjX2VuYWJsZV9wbGFuZSwKKwkuc2V0X2NvbG9yX2tleQkJPSBvbWFwX2Rpc3BjX3NldF9j b2xvcl9rZXksCisJLmdldF9jb2xvcl9rZXkJCT0gb21hcF9kaXNwY19nZXRfY29sb3Jfa2V5LAor CS5tbWFwCQkJPSBvbWFwX2Rpc3BjX21tYXBfdXNlciwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJz L3ZpZGVvL29tYXAvZGlzcGMuaCBiL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMTUxMmIKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL3ZpZGVvL29tYXAvZGlzcGMuaApAQCAtMCwwICsxLDQzIEBACisjaWZuZGVmIF9ESVNQ Q19ICisjZGVmaW5lIF9ESVNQQ19ICisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKwor I2RlZmluZSBESVNQQ19QTEFORV9HRlgJCQkwCisjZGVmaW5lIERJU1BDX1BMQU5FX1ZJRDEJCTEK KyNkZWZpbmUgRElTUENfUExBTkVfVklEMgkJMgorCisjZGVmaW5lIERJU1BDX1JHQl8xX0JQUAkJ CTB4MDAKKyNkZWZpbmUgRElTUENfUkdCXzJfQlBQCQkJMHgwMQorI2RlZmluZSBESVNQQ19SR0Jf NF9CUFAJCQkweDAyCisjZGVmaW5lIERJU1BDX1JHQl84X0JQUAkJCTB4MDMKKyNkZWZpbmUgRElT UENfUkdCXzEyX0JQUAkJMHgwNAorI2RlZmluZSBESVNQQ19SR0JfMTZfQlBQCQkweDA2CisjZGVm aW5lIERJU1BDX1JHQl8yNF9CUFAJCTB4MDgKKyNkZWZpbmUgRElTUENfUkdCXzI0X0JQUF9VTlBB Q0tfMzIJMHgwOQorI2RlZmluZSBESVNQQ19ZVVYyXzQyMgkJCTB4MGEKKyNkZWZpbmUgRElTUENf VVlWWV80MjIJCQkweDBiCisKKyNkZWZpbmUgRElTUENfQlVSU1RfNHgzMgkJMAorI2RlZmluZSBE SVNQQ19CVVJTVF84eDMyCQkxCisjZGVmaW5lIERJU1BDX0JVUlNUXzE2eDMyCQkyCisKKyNkZWZp bmUgRElTUENfTE9BRF9DTFVUX0FORF9GUkFNRQkweDAwCisjZGVmaW5lIERJU1BDX0xPQURfQ0xV VF9PTkxZCQkweDAxCisjZGVmaW5lIERJU1BDX0xPQURfRlJBTUVfT05MWQkJMHgwMgorI2RlZmlu ZSBESVNQQ19MT0FEX0NMVVRfT05DRV9GUkFNRQkweDAzCisKKyNkZWZpbmUgRElTUENfVEZUX0RB VEFfTElORVNfMTIJCTAKKyNkZWZpbmUgRElTUENfVEZUX0RBVEFfTElORVNfMTYJCTEKKyNkZWZp bmUgRElTUENfVEZUX0RBVEFfTElORVNfMTgJCTIKKyNkZWZpbmUgRElTUENfVEZUX0RBVEFfTElO RVNfMjQJCTMKKworZXh0ZXJuIHZvaWQgb21hcF9kaXNwY19zZXRfbGNkX3NpemUoaW50IHdpZHRo LCBpbnQgaGVpZ2h0KTsKKworZXh0ZXJuIHZvaWQgb21hcF9kaXNwY19lbmFibGVfbGNkX291dChp bnQgZW5hYmxlKTsKK2V4dGVybiB2b2lkIG9tYXBfZGlzcGNfZW5hYmxlX2RpZ2l0X291dChpbnQg ZW5hYmxlKTsKKworZXh0ZXJuIGludCAgb21hcF9kaXNwY19yZXF1ZXN0X2lycSh2b2lkICgqY2Fs bGJhY2spKHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkIG9tYXBfZGlzcGNf ZnJlZV9pcnEodm9pZCk7CisKKyNlbmRpZgotLSAKMS41LjAKCg== ------=_Part_17312_32991079.1182861399766--