From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH v3 2/2] drm/v3d: Introduce a new DRM driver for Broadcom V3D V3.x+ Date: Mon, 30 Apr 2018 11:10:58 -0700 Message-ID: <20180430181058.30181-3-eric@anholt.net> References: <20180430181058.30181-1-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from anholt.net (anholt.net [50.246.234.109]) by gabe.freedesktop.org (Postfix) with ESMTP id 3E8156E2D3 for ; Mon, 30 Apr 2018 18:11:13 +0000 (UTC) In-Reply-To: <20180430181058.30181-1-eric@anholt.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, Rob Herring , Mark Rutland , devicetree@vger.kernel.org Cc: linux-kernel@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org VGhpcyBkcml2ZXIgd2lsbCBiZSB1c2VkIHRvIHN1cHBvcnQgTWVzYSBvbiB0aGUgQnJvYWRjb20g NzI2OCBhbmQgNzI3OApwbGF0Zm9ybXMuCgpWM0QgMy4zIGludHJvZHVjZXMgYW4gTU1VLCB3aGlj aCBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCBDTUEgb3IgdmM0J3MKY29tcGxpY2F0ZWQgQ0wvc2hh ZGVyIHZhbGlkYXRpb24gc2NoZW1lLiAgVGhpcyBtYXNzaXZlbHkgY2hhbmdlcyB0aGUKR0VNIGJl aGF2aW9yLCBzbyBJJ3ZlIGZvcmtlZCBvZmYgdG8gYSBuZXcgZHJpdmVyLgoKdjI6IE1hcmsgU1VC TUlUX0NMIGFzIG5lZWRpbmcgRFJNX0FVVEguICBjb2NjaW5lbGxlIGZpeGVzIGZyb20ga2J1aWxk CiAgICB0ZXN0IHJvYm90LiBEcm9wIHBlcnNvbmFsIGdpdCBsaW5rIGZyb20gTUFJTlRBSU5FUlMu ICBEb24ndAogICAgZG91YmxlLW1hcCBkbWEtYnVmIGltcG9ydGVkIEJPcy4gIEFkZCBrZXJuZWxk b2MgYWJvdXQgbmVlZGluZyBNTVUKICAgIGV2aWN0aW9uLiAgRHJvcCBwcmltZSB2bWFwL3VubWFw IHN0dWJzLiAgRGVsYXkgbW1hcCBvZmZzZXQgc2V0dXAKICAgIHRvIG1tYXAgdGltZS4gIFVzZSBk cm1fZGV2X2luaXQgaW5zdGVhZCBvZiBfYWxsb2MuICBVc2UKICAgIGt0aW1lX2dldCgpIGZvciB3 YWl0X2JvIHRpbWVvdXRzLiAgRHJvcCBkcm1fY2FuX3NsZWVwKCkgdXNhZ2UsCiAgICBzaW5jZSB3 ZSBkb24ndCBtb2Rlc2V0LiAgU3dpdGNoIHBhZ2UgdGFibGVzIGJhY2sgdG8gV0MgKGRlYnVnCiAg ICBjaGFuZ2UgdG8gY29oZXJlbnQgaGFkIHNsaXBwZWQgaW4pLiAgU3dpdGNoCiAgICBkcm1fZ2Vt X29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgpIHRvCiAgICBkcm1fZ2VtX29iamVjdF9wdXRf dW5sb2NrZWQoKS4gIFNpbXBsaWZ5IG92ZXJmbG93IG1lbSBoYW5kbGluZyBieQogICAgbm90IHNo YXJpbmcgb3ZlcmZsb3cgbWVtIGJldHdlZW4gam9icy4KdjM6IG5vIGNoYW5nZXMKClNpZ25lZC1v ZmYtYnk6IEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CkFja2VkLWJ5OiBEYW5pZWwgVmV0 dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgotLS0KIERvY3VtZW50YXRpb24vZ3B1L2RyaXZl cnMucnN0ICAgICAgICAgIHwgICAxICsKIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICA4ICsKIGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAgICAgICAgIHwg ICAyICsKIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICAxICsKIGRy aXZlcnMvZ3B1L2RybS92M2QvS2NvbmZpZyAgICAgICAgICAgIHwgICA5ICsKIGRyaXZlcnMvZ3B1 L2RybS92M2QvTWFrZWZpbGUgICAgICAgICAgIHwgIDE4ICsKIGRyaXZlcnMvZ3B1L2RybS92M2Qv djNkX2JvLmMgICAgICAgICAgIHwgMzc5ICsrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0v djNkL3YzZF9kZWJ1Z2ZzLmMgICAgICB8IDE5MSArKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdjNk L3YzZF9kcnYuYyAgICAgICAgICB8IDM3MSArKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJt L3YzZC92M2RfZHJ2LmggICAgICAgICAgfCAyOTQgKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2Ry bS92M2QvdjNkX2ZlbmNlLmMgICAgICAgIHwgIDU4ICsrKwogZHJpdmVycy9ncHUvZHJtL3YzZC92 M2RfZ2VtLmMgICAgICAgICAgfCA2NjMgKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVy cy9ncHUvZHJtL3YzZC92M2RfaXJxLmMgICAgICAgICAgfCAyMDYgKysrKysrKysKIGRyaXZlcnMv Z3B1L2RybS92M2QvdjNkX21tdS5jICAgICAgICAgIHwgMTIyICsrKysrCiBkcml2ZXJzL2dwdS9k cm0vdjNkL3YzZF9yZWdzLmggICAgICAgICB8IDI5NSArKysrKysrKysrKwogZHJpdmVycy9ncHUv ZHJtL3YzZC92M2Rfc2NoZWQuYyAgICAgICAgfCAyMjggKysrKysrKysrCiBkcml2ZXJzL2dwdS9k cm0vdjNkL3YzZF90cmFjZS5oICAgICAgICB8ICA4MiArKysKIGRyaXZlcnMvZ3B1L2RybS92M2Qv djNkX3RyYWNlX3BvaW50cy5jIHwgICA5ICsKIGluY2x1ZGUvdWFwaS9kcm0vdjNkX2RybS5oICAg ICAgICAgICAgIHwgMTkxICsrKysrKysKIDE5IGZpbGVzIGNoYW5nZWQsIDMxMjggaW5zZXJ0aW9u cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92M2QvS2NvbmZpZwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92M2QvTWFrZWZpbGUKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9iby5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZGVidWdmcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL3YzZC92M2RfZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vdjNkL3YzZF9kcnYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92 M2QvdjNkX2ZlbmNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdjNkL3Yz ZF9nZW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2lycS5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfbW11LmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9yZWdzLmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zY2hlZC5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfdHJhY2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS92M2QvdjNkX3RyYWNlX3BvaW50cy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg aW5jbHVkZS91YXBpL2RybS92M2RfZHJtLmgKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dw dS9kcml2ZXJzLnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2RyaXZlcnMucnN0CmluZGV4IGQzYWI2 YWJhZTgzOC4uZjk4MjU1OGZjMjVkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcml2 ZXJzLnJzdAorKysgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcml2ZXJzLnJzdApAQCAtMTAsNiArMTAs NyBAQCBHUFUgRHJpdmVyIERvY3VtZW50YXRpb24KICAgIHRlZ3JhCiAgICB0aW55ZHJtCiAgICB0 dmUyMDAKKyAgIHYzZAogICAgdmM0CiAgICBicmlkZ2UvZHctaGRtaQogICAgeGVuLWZyb250CmRp ZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGJjYTNjMzJmYjE0MS4u NDZjNDljMDJkODdiIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpA QCAtNDc5NSw2ICs0Nzk1LDE0IEBAIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvZ3B1L2RybS9v bWFwZHJtLwogRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdGkv CiAKK0RSTSBEUklWRVJTIEZPUiBWM0QKK006CUVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+ CitTOglTdXBwb3J0ZWQKK0Y6CWRyaXZlcnMvZ3B1L2RybS92M2QvCitGOglpbmNsdWRlL3VhcGkv ZHJtL3YzZF9kcm0uaAorRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3Bs YXkvYnJjbSxiY20tdjNkLnR4dAorVDoJZ2l0IGdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3Jn L2RybS9kcm0tbWlzYworCiBEUk0gRFJJVkVSUyBGT1IgVkM0CiBNOglFcmljIEFuaG9sdCA8ZXJp Y0BhbmhvbHQubmV0PgogVDoJZ2l0IGdpdDovL2dpdGh1Yi5jb20vYW5ob2x0L2xpbnV4CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmln CmluZGV4IDc1NzgyNWFjNjBkZi4uMWM3M2E0NTVmZGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtMjY3LDYgKzI2 Nyw4IEBAIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZyIKIAogc291 cmNlICJkcml2ZXJzL2dwdS9kcm0vaW14L0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9ncHUv ZHJtL3YzZC9LY29uZmlnIgorCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS92YzQvS2NvbmZpZyIK IAogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9LY29uZmlnIgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4 IDlkNjY2NTdlYTExNy4uN2E0MDFlZGQ4NzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v TWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCkBAIC02MSw2ICs2MSw3IEBA IG9iai0kKENPTkZJR19EUk1fTUdBKQkrPSBtZ2EvCiBvYmotJChDT05GSUdfRFJNX0k4MTApCSs9 IGk4MTAvCiBvYmotJChDT05GSUdfRFJNX0k5MTUpCSs9IGk5MTUvCiBvYmotJChDT05GSUdfRFJN X01HQUcyMDApICs9IG1nYWcyMDAvCitvYmotJChDT05GSUdfRFJNX1YzRCkgICs9IHYzZC8KIG9i ai0kKENPTkZJR19EUk1fVkM0KSAgKz0gdmM0Lwogb2JqLSQoQ09ORklHX0RSTV9DSVJSVVNfUUVN VSkgKz0gY2lycnVzLwogb2JqLSQoQ09ORklHX0RSTV9TSVMpICAgKz0gc2lzLwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3YzZC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3YzZC9LY29u ZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYTBjMDI1OTM1NWJk Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3YzZC9LY29uZmlnCkBAIC0wLDAg KzEsOSBAQAorY29uZmlnIERSTV9WM0QKKwl0cmlzdGF0ZSAiQnJvYWRjb20gVjNEIDMueCBhbmQg bmV3ZXIiCisJZGVwZW5kcyBvbiBBUkNIX0JDTSB8fCBBUkNIX0JDTVNUQiB8fCBDT01QSUxFX1RF U1QKKwlkZXBlbmRzIG9uIERSTQorCWRlcGVuZHMgb24gQ09NTU9OX0NMSworCXNlbGVjdCBEUk1f U0NIRUQKKwloZWxwCisJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBzeXN0ZW0g dGhhdCBoYXMgYSBCcm9hZGNvbQorCSAgVjNEIDMueCBvciBuZXdlciBHUFUsIHN1Y2ggYXMgQkNN NzI2OC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92M2QvTWFrZWZpbGUgYi9kcml2ZXJz L2dwdS9kcm0vdjNkL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uMzQ0NDZlMWRlNjRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Yz ZC9NYWtlZmlsZQpAQCAtMCwwICsxLDE4IEBACisjIFBsZWFzZSBrZWVwIHRoZXNlIGJ1aWxkIGxp c3RzIHNvcnRlZCEKKworIyBjb3JlIGRyaXZlciBjb2RlCit2M2QteSA6PSBcCisJdjNkX2JvLm8g XAorCXYzZF9kcnYubyBcCisJdjNkX2ZlbmNlLm8gXAorCXYzZF9nZW0ubyBcCisJdjNkX2lycS5v IFwKKwl2M2RfbW11Lm8gXAorCXYzZF90cmFjZV9wb2ludHMubyBcCisJdjNkX3NjaGVkLm8KKwor djNkLSQoQ09ORklHX0RFQlVHX0ZTKSArPSB2M2RfZGVidWdmcy5vCisKK29iai0kKENPTkZJR19E Uk1fVjNEKSAgKz0gdjNkLm8KKworQ0ZMQUdTX3YzZF90cmFjZV9wb2ludHMubyA6PSAtSSQoc3Jj KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfYm8uYyBiL2RyaXZlcnMvZ3B1 L2RybS92M2QvdjNkX2JvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li4yYmU0ZThiNzE2MDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3Yz ZF9iby5jCkBAIC0wLDAgKzEsMzc5IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMCsKKy8qIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEJyb2FkY29tICovCisKKy8qKgorICog RE9DOiBWM0QgR0VNIEJPIG1hbmFnZW1lbnQgc3VwcG9ydAorICoKKyAqIENvbXBhcmVkIHRvIFZD NCAoVjNEIDIueCksIFYzRCAzLjMgaW50cm9kdWNlcyBhbiBNTVUgYmV0d2VlbiB0aGUKKyAqIEdQ VSBhbmQgdGhlIGJ1cywgYWxsb3dpbmcgdXMgdG8gdXNlIHNobWVtIG9iamVjdHMgZm9yIG91ciBz dG9yYWdlCisgKiBpbnN0ZWFkIG9mIENNQS4KKyAqCisgKiBQaHlzaWNhbGx5IGNvbnRpZ3VvdXMg b2JqZWN0cyBtYXkgc3RpbGwgYmUgaW1wb3J0ZWQgdG8gVjNELCBidXQgdGhlCisgKiBkcml2ZXIg ZG9lc24ndCBhbGxvY2F0ZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgb2JqZWN0cyBvbiBpdHMgb3du LgorICogRGlzcGxheSBlbmdpbmVzIHJlcXVpcmluZyBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgYWxs b2NhdGlvbnMgc2hvdWxkCisgKiBsb29rIGludG8gTWVzYSdzICJyZW5kZXJvbmx5IiBzdXBwb3J0 IChhcyB1c2VkIGJ5IHRoZSBNZXNhIHBsMTExCisgKiBkcml2ZXIpIGZvciBhbiBleGFtcGxlIG9m IGhvdyB0byBpbnRlZ3JhdGUgd2l0aCBWM0QuCisgKgorICogTG9uZyB0ZXJtLCB3ZSBzaG91bGQg c3VwcG9ydCBldmljdGluZyBwYWdlcyBmcm9tIHRoZSBNTVUgd2hlbiB1bmRlcgorICogbWVtb3J5 IHByZXNzdXJlICh0aHVzIHRoZSB2M2RfYm9fZ2V0X3BhZ2VzKCkgcmVmY291bnRpbmcpLCBidXQK KyAqIHRoYXQncyBub3QgYSBoaWdoIHByaW9yaXR5IHNpbmNlIG91ciBzeXN0ZW1zIHRlbmQgdG8g bm90IGhhdmUgc3dhcC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1 ZGUgPGxpbnV4L3Bmbl90Lmg+CisKKyNpbmNsdWRlICJ2M2RfZHJ2LmgiCisjaW5jbHVkZSAidWFw aS9kcm0vdjNkX2RybS5oIgorCisvKiBQaW5zIHRoZSBzaG1lbSBwYWdlcywgZmlsbHMgaW4gdGhl IC5wYWdlcyBhbmQgLnNndCBmaWVsZHMgb2YgdGhlIEJPLCBhbmQgbWFwcworICogaXQgZm9yIERN QS4KKyAqLworc3RhdGljIGludAordjNkX2JvX2dldF9wYWdlcyhzdHJ1Y3QgdjNkX2JvICpibykK K3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9ICZiby0+YmFzZTsKKwlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJaW50IG5wYWdlcyA9IG9iai0+c2l6ZSA+PiBQQUdF X1NISUZUOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmYm8tPmxvY2spOworCWlmIChi by0+cGFnZXNfcmVmY291bnQrKyAhPSAwKQorCQlnb3RvIHVubG9jazsKKworCWlmICghb2JqLT5p bXBvcnRfYXR0YWNoKSB7CisJCWJvLT5wYWdlcyA9IGRybV9nZW1fZ2V0X3BhZ2VzKG9iaik7CisJ CWlmIChJU19FUlIoYm8tPnBhZ2VzKSkgeworCQkJcmV0ID0gUFRSX0VSUihiby0+cGFnZXMpOwor CQkJZ290byB1bmxvY2s7CisJCX0KKworCQliby0+c2d0ID0gZHJtX3ByaW1lX3BhZ2VzX3RvX3Nn KGJvLT5wYWdlcywgbnBhZ2VzKTsKKwkJaWYgKElTX0VSUihiby0+c2d0KSkgeworCQkJcmV0ID0g UFRSX0VSUihiby0+c2d0KTsKKwkJCWdvdG8gcHV0X3BhZ2VzOworCQl9CisKKwkJLyogTWFwIHRo ZSBwYWdlcyBmb3IgdXNlIGJ5IHRoZSBHUFUuICovCisJCWRtYV9tYXBfc2coZGV2LT5kZXYsIGJv LT5zZ3QtPnNnbCwKKwkJCSAgIGJvLT5zZ3QtPm5lbnRzLCBETUFfQklESVJFQ1RJT05BTCk7CisJ fSBlbHNlIHsKKwkJYm8tPnBhZ2VzID0ga2NhbGxvYyhucGFnZXMsIHNpemVvZigqYm8tPnBhZ2Vz KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYm8tPnBhZ2VzKQorCQkJZ290byBwdXRfcGFnZXM7CisK KwkJZHJtX3ByaW1lX3NnX3RvX3BhZ2VfYWRkcl9hcnJheXMoYm8tPnNndCwgYm8tPnBhZ2VzLAor CQkJCQkJIE5VTEwsIG5wYWdlcyk7CisKKwkJLyogTm90ZSB0aGF0IGRtYS1idWZzIGNvbWUgaW4g bWFwcGVkLiAqLworCX0KKworCW11dGV4X3VubG9jaygmYm8tPmxvY2spOworCisJcmV0dXJuIDA7 CisKK3B1dF9wYWdlczoKKwlkcm1fZ2VtX3B1dF9wYWdlcyhvYmosIGJvLT5wYWdlcywgdHJ1ZSwg dHJ1ZSk7CisJYm8tPnBhZ2VzID0gTlVMTDsKK3VubG9jazoKKwliby0+cGFnZXNfcmVmY291bnQt LTsKKwltdXRleF91bmxvY2soJmJvLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg dm9pZAordjNkX2JvX3B1dF9wYWdlcyhzdHJ1Y3QgdjNkX2JvICpibykKK3sKKwlzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iaiA9ICZiby0+YmFzZTsKKworCW11dGV4X2xvY2soJmJvLT5sb2NrKTsK KwlpZiAoLS1iby0+cGFnZXNfcmVmY291bnQgPT0gMCkgeworCQlpZiAoIW9iai0+aW1wb3J0X2F0 dGFjaCkgeworCQkJZG1hX3VubWFwX3NnKG9iai0+ZGV2LT5kZXYsIGJvLT5zZ3QtPnNnbCwKKwkJ CQkgICAgIGJvLT5zZ3QtPm5lbnRzLCBETUFfQklESVJFQ1RJT05BTCk7CisJCQlzZ19mcmVlX3Rh YmxlKGJvLT5zZ3QpOworCQkJa2ZyZWUoYm8tPnNndCk7CisJCQlkcm1fZ2VtX3B1dF9wYWdlcyhv YmosIGJvLT5wYWdlcywgdHJ1ZSwgdHJ1ZSk7CisJCX0gZWxzZSB7CisJCQlrZnJlZShiby0+cGFn ZXMpOworCQl9CisJfQorCW11dGV4X3VubG9jaygmYm8tPmxvY2spOworfQorCitzdGF0aWMgc3Ry dWN0IHYzZF9ibyAqdjNkX2JvX2NyZWF0ZV9zdHJ1Y3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK KwkJCQkJICAgc2l6ZV90IHVuYWxpZ25lZF9zaXplKQoreworCXN0cnVjdCB2M2RfZGV2ICp2M2Qg PSB0b192M2RfZGV2KGRldik7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0 IHYzZF9ibyAqYm87CisJc2l6ZV90IHNpemUgPSByb3VuZHVwKHVuYWxpZ25lZF9zaXplLCBQQUdF X1NJWkUpOworCWludCByZXQ7CisKKwlpZiAoc2l6ZSA9PSAwKQorCQlyZXR1cm4gRVJSX1BUUigt RUlOVkFMKTsKKworCWJvID0ga3phbGxvYyhzaXplb2YoKmJvKSwgR0ZQX0tFUk5FTCk7CisJaWYg KCFibykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJb2JqID0gJmJvLT5iYXNlOworCisJ SU5JVF9MSVNUX0hFQUQoJmJvLT52bWFzKTsKKwlJTklUX0xJU1RfSEVBRCgmYm8tPnVucmVmX2hl YWQpOworCW11dGV4X2luaXQoJmJvLT5sb2NrKTsKKworCXJldCA9IGRybV9nZW1fb2JqZWN0X2lu aXQoZGV2LCBvYmosIHNpemUpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9ibzsKKworCXNwaW5f bG9jaygmdjNkLT5tbV9sb2NrKTsKKwlyZXQgPSBkcm1fbW1faW5zZXJ0X25vZGVfZ2VuZXJpYygm djNkLT5tbSwgJmJvLT5ub2RlLAorCQkJCQkgb2JqLT5zaXplID4+IFBBR0VfU0hJRlQsCisJCQkJ CSBHTVBfR1JBTlVMQVJJVFkgPj4gUEFHRV9TSElGVCwgMCwgMCk7CisJc3Bpbl91bmxvY2soJnYz ZC0+bW1fbG9jayk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX29iajsKKworCXJldHVybiBibzsK KworZnJlZV9vYmo6CisJZHJtX2dlbV9vYmplY3RfcmVsZWFzZShvYmopOworZnJlZV9ibzoKKwlr ZnJlZShibyk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KKworc3RydWN0IHYzZF9ibyAqdjNk X2JvX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVf cHJpdiwKKwkJCSAgICAgc2l6ZV90IHVuYWxpZ25lZF9zaXplKQoreworCXN0cnVjdCB2M2RfZGV2 ICp2M2QgPSB0b192M2RfZGV2KGRldik7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJ c3RydWN0IHYzZF9ibyAqYm87CisJaW50IHJldDsKKworCWJvID0gdjNkX2JvX2NyZWF0ZV9zdHJ1 Y3QoZGV2LCB1bmFsaWduZWRfc2l6ZSk7CisJaWYgKElTX0VSUihibykpCisJCXJldHVybiBibzsK KwlvYmogPSAmYm8tPmJhc2U7CisKKwliby0+cmVzdiA9ICZiby0+X3Jlc3Y7CisJcmVzZXJ2YXRp b25fb2JqZWN0X2luaXQoYm8tPnJlc3YpOworCisJcmV0ID0gdjNkX2JvX2dldF9wYWdlcyhibyk7 CisJaWYgKHJldCkKKwkJZ290byBmcmVlX21tOworCisJdjNkX21tdV9pbnNlcnRfcHRlcyhibyk7 CisKKwltdXRleF9sb2NrKCZ2M2QtPmJvX2xvY2spOworCXYzZC0+Ym9fc3RhdHMubnVtX2FsbG9j YXRlZCsrOworCXYzZC0+Ym9fc3RhdHMucGFnZXNfYWxsb2NhdGVkICs9IG9iai0+c2l6ZSA+PiBQ QUdFX1NISUZUOworCW11dGV4X3VubG9jaygmdjNkLT5ib19sb2NrKTsKKworCXJldHVybiBibzsK KworZnJlZV9tbToKKwlzcGluX2xvY2soJnYzZC0+bW1fbG9jayk7CisJZHJtX21tX3JlbW92ZV9u b2RlKCZiby0+bm9kZSk7CisJc3Bpbl91bmxvY2soJnYzZC0+bW1fbG9jayk7CisKKwlkcm1fZ2Vt X29iamVjdF9yZWxlYXNlKG9iaik7CisJa2ZyZWUoYm8pOworCXJldHVybiBFUlJfUFRSKHJldCk7 Cit9CisKKy8qIENhbGxlZCBEUk0gY29yZSBvbiB0aGUgbGFzdCB1c2Vyc3BhY2Uva2VybmVsIHVu cmVmZXJlbmNlIG9mIHRoZQorICogQk8uCisgKi8KK3ZvaWQgdjNkX2ZyZWVfb2JqZWN0KHN0cnVj dCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2Rf ZGV2KG9iai0+ZGV2KTsKKwlzdHJ1Y3QgdjNkX2JvICpibyA9IHRvX3YzZF9ibyhvYmopOworCisJ bXV0ZXhfbG9jaygmdjNkLT5ib19sb2NrKTsKKwl2M2QtPmJvX3N0YXRzLm51bV9hbGxvY2F0ZWQt LTsKKwl2M2QtPmJvX3N0YXRzLnBhZ2VzX2FsbG9jYXRlZCAtPSBvYmotPnNpemUgPj4gUEFHRV9T SElGVDsKKwltdXRleF91bmxvY2soJnYzZC0+Ym9fbG9jayk7CisKKwlyZXNlcnZhdGlvbl9vYmpl Y3RfZmluaSgmYm8tPl9yZXN2KTsKKworCXYzZF9ib19wdXRfcGFnZXMoYm8pOworCisJaWYgKG9i ai0+aW1wb3J0X2F0dGFjaCkKKwkJZHJtX3ByaW1lX2dlbV9kZXN0cm95KG9iaiwgYm8tPnNndCk7 CisKKwl2M2RfbW11X3JlbW92ZV9wdGVzKGJvKTsKKwlzcGluX2xvY2soJnYzZC0+bW1fbG9jayk7 CisJZHJtX21tX3JlbW92ZV9ub2RlKCZiby0+bm9kZSk7CisJc3Bpbl91bmxvY2soJnYzZC0+bW1f bG9jayk7CisKKwltdXRleF9kZXN0cm95KCZiby0+bG9jayk7CisKKwlkcm1fZ2VtX29iamVjdF9y ZWxlYXNlKG9iaik7CisJa2ZyZWUoYm8pOworfQorCitzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0 ICp2M2RfcHJpbWVfcmVzX29iaihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1 Y3QgdjNkX2JvICpibyA9IHRvX3YzZF9ibyhvYmopOworCisJcmV0dXJuIGJvLT5yZXN2OworfQor CitzdGF0aWMgdm9pZAordjNkX3NldF9tbWFwX3ZtYV9mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKnZtYSkKK3sKKwl2bWEtPnZtX2ZsYWdzICY9IH5WTV9QRk5NQVA7CisJdm1hLT52bV9mbGFn cyB8PSBWTV9NSVhFRE1BUDsKKwl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJp bmUodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtPnZtX2ZsYWdzKSk7Cit9CisKK2ludCB2M2RfZ2VtX2Zh dWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQoreworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1h ID0gdm1mLT52bWE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSB2bWEtPnZtX3ByaXZh dGVfZGF0YTsKKwlzdHJ1Y3QgdjNkX2JvICpibyA9IHRvX3YzZF9ibyhvYmopOworCXVuc2lnbmVk IGxvbmcgcGZuOworCXBnb2ZmX3QgcGdvZmY7CisJaW50IHJldDsKKworCS8qIFdlIGRvbid0IHVz ZSB2bWYtPnBnb2ZmIHNpbmNlIHRoYXQgaGFzIHRoZSBmYWtlIG9mZnNldDogKi8KKwlwZ29mZiA9 ICh2bWYtPmFkZHJlc3MgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUOworCXBmbiA9IHBh Z2VfdG9fcGZuKGJvLT5wYWdlc1twZ29mZl0pOworCisJcmV0ID0gdm1faW5zZXJ0X21peGVkKHZt YSwgdm1mLT5hZGRyZXNzLCBfX3Bmbl90b19wZm5fdChwZm4sIFBGTl9ERVYpKTsKKworCXN3aXRj aCAocmV0KSB7CisJY2FzZSAtRUFHQUlOOgorCWNhc2UgMDoKKwljYXNlIC1FUkVTVEFSVFNZUzoK KwljYXNlIC1FSU5UUjoKKwljYXNlIC1FQlVTWToKKwkJLyoKKwkJICogRUJVU1kgaXMgb2s6IHRo aXMganVzdCBtZWFucyB0aGF0IGFub3RoZXIgdGhyZWFkCisJCSAqIGFscmVhZHkgZGlkIHRoZSBq b2IuCisJCSAqLworCQlyZXR1cm4gVk1fRkFVTFRfTk9QQUdFOworCWNhc2UgLUVOT01FTToKKwkJ cmV0dXJuIFZNX0ZBVUxUX09PTTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVT OworCX0KK30KKworaW50IHYzZF9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJl YV9zdHJ1Y3QgKnZtYSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2dlbV9tbWFwKGZpbHAs IHZtYSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXYzZF9zZXRfbW1hcF92bWFfZmxh Z3Modm1hKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCB2M2RfcHJpbWVfbW1hcChzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50 IHJldDsKKworCXJldCA9IGRybV9nZW1fbW1hcF9vYmoob2JqLCBvYmotPnNpemUsIHZtYSk7CisJ aWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwl2M2Rfc2V0X21tYXBfdm1hX2ZsYWdzKHZt YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNnX3RhYmxlICoKK3YzZF9wcmltZV9nZXRf c2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IHYzZF9ibyAq Ym8gPSB0b192M2RfYm8ob2JqKTsKKwlpbnQgbnBhZ2VzID0gb2JqLT5zaXplID4+IFBBR0VfU0hJ RlQ7CisKKwlyZXR1cm4gZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKGJvLT5wYWdlcywgbnBhZ2VzKTsK K30KKworc3RydWN0IGRybV9nZW1fb2JqZWN0ICoKK3YzZF9wcmltZV9pbXBvcnRfc2dfdGFibGUo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAq YXR0YWNoLAorCQkJICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKm9iajsKKwlzdHJ1Y3QgdjNkX2JvICpibzsKKworCWJvID0gdjNkX2JvX2NyZWF0ZV9z dHJ1Y3QoZGV2LCBhdHRhY2gtPmRtYWJ1Zi0+c2l6ZSk7CisJaWYgKElTX0VSUihibykpCisJCXJl dHVybiBFUlJfQ0FTVChibyk7CisJb2JqID0gJmJvLT5iYXNlOworCisJYm8tPnJlc3YgPSBhdHRh Y2gtPmRtYWJ1Zi0+cmVzdjsKKworCWJvLT5zZ3QgPSBzZ3Q7CisJdjNkX2JvX2dldF9wYWdlcyhi byk7CisKKwl2M2RfbW11X2luc2VydF9wdGVzKGJvKTsKKworCXJldHVybiBvYmo7Cit9CisKK2lu dCB2M2RfY3JlYXRlX2JvX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEs CisJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX3YzZF9jcmVh dGVfYm8gKmFyZ3MgPSBkYXRhOworCXN0cnVjdCB2M2RfYm8gKmJvID0gTlVMTDsKKwlpbnQgcmV0 OworCisJYm8gPSB2M2RfYm9fY3JlYXRlKGRldiwgZmlsZV9wcml2LCBQQUdFX0FMSUdOKGFyZ3Mt PnNpemUpKTsKKwlpZiAoSVNfRVJSKGJvKSkKKwkJcmV0dXJuIFBUUl9FUlIoYm8pOworCisJYXJn cy0+b2Zmc2V0ID0gYm8tPm5vZGUuc3RhcnQgPDwgUEFHRV9TSElGVDsKKworCXJldCA9IGRybV9n ZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsICZiby0+YmFzZSwgJmFyZ3MtPmhhbmRsZSk7CisJ ZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKCZiby0+YmFzZSk7CisKKwlyZXR1cm4gcmV0Owor fQorCitpbnQgdjNkX21tYXBfYm9faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSwKKwkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRy bV92M2RfbW1hcF9ibyAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1f b2JqOworCWludCByZXQ7CisKKwlnZW1fb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGZpbGVf cHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAoIWdlbV9vYmopIHsKKwkJRFJNX0RFQlVHKCJGYWls ZWQgdG8gbG9vayB1cCBHRU0gQk8gJWRcbiIsIGFyZ3MtPmhhbmRsZSk7CisJCXJldHVybiAtRU5P RU5UOworCX0KKworCXJldCA9IGRybV9nZW1fY3JlYXRlX21tYXBfb2Zmc2V0KGdlbV9vYmopOwor CWlmIChyZXQgPT0gMCkKKwkJYXJncy0+b2Zmc2V0ID0gZHJtX3ZtYV9ub2RlX29mZnNldF9hZGRy KCZnZW1fb2JqLT52bWFfbm9kZSk7CisJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKGdlbV9v YmopOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHYzZF9nZXRfYm9fb2Zmc2V0X2lvY3RsKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICAgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV92M2RfZ2V0X2JvX29mZnNldCAqYXJncyA9IGRh dGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqOworCXN0cnVjdCB2M2RfYm8gKmJv OworCisJZ2VtX29iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChmaWxlX3ByaXYsIGFyZ3MtPmhh bmRsZSk7CisJaWYgKCFnZW1fb2JqKSB7CisJCURSTV9ERUJVRygiRmFpbGVkIHRvIGxvb2sgdXAg R0VNIEJPICVkXG4iLCBhcmdzLT5oYW5kbGUpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisJYm8g PSB0b192M2RfYm8oZ2VtX29iaik7CisKKwlhcmdzLT5vZmZzZXQgPSBiby0+bm9kZS5zdGFydCA8 PCBQQUdFX1NISUZUOworCisJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKGdlbV9vYmopOwor CXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZGVidWdm cy5jIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZGVidWdmcy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNGRiNjJjNTQ1NzQ4Ci0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZGVidWdmcy5jCkBAIC0wLDAgKzEsMTkxIEBACisvLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKKy8qIENvcHlyaWdodCAoQykgMjAxNC0y MDE4IEJyb2FkY29tICovCisKKyNpbmNsdWRlIDxsaW51eC9jaXJjX2J1Zi5oPgorI2luY2x1ZGUg PGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxp bnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUg PGRybS9kcm1QLmg+CisKKyNpbmNsdWRlICJ2M2RfZHJ2LmgiCisjaW5jbHVkZSAidjNkX3JlZ3Mu aCIKKworI2RlZmluZSBSRUdERUYocmVnKSB7IHJlZywgI3JlZyB9CitzdHJ1Y3QgdjNkX3JlZ19k ZWYgeworCXUzMiByZWc7CisJY29uc3QgY2hhciAqbmFtZTsKK307CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgdjNkX3JlZ19kZWYgdjNkX2h1Yl9yZWdfZGVmc1tdID0geworCVJFR0RFRihWM0RfSFVC X0FYSUNGRyksCisJUkVHREVGKFYzRF9IVUJfVUlGQ0ZHKSwKKwlSRUdERUYoVjNEX0hVQl9JREVO VDApLAorCVJFR0RFRihWM0RfSFVCX0lERU5UMSksCisJUkVHREVGKFYzRF9IVUJfSURFTlQyKSwK KwlSRUdERUYoVjNEX0hVQl9JREVOVDMpLAorCVJFR0RFRihWM0RfSFVCX0lOVF9TVFMpLAorCVJF R0RFRihWM0RfSFVCX0lOVF9NU0tfU1RTKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjNk X3JlZ19kZWYgdjNkX2djYV9yZWdfZGVmc1tdID0geworCVJFR0RFRihWM0RfR0NBX1NBRkVfU0hV VERPV04pLAorCVJFR0RFRihWM0RfR0NBX1NBRkVfU0hVVERPV05fQUNLKSwKK307CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgdjNkX3JlZ19kZWYgdjNkX2NvcmVfcmVnX2RlZnNbXSA9IHsKKwlSRUdE RUYoVjNEX0NUTF9JREVOVDApLAorCVJFR0RFRihWM0RfQ1RMX0lERU5UMSksCisJUkVHREVGKFYz RF9DVExfSURFTlQyKSwKKwlSRUdERUYoVjNEX0NUTF9NSVNDQ0ZHKSwKKwlSRUdERUYoVjNEX0NU TF9JTlRfU1RTKSwKKwlSRUdERUYoVjNEX0NUTF9JTlRfTVNLX1NUUyksCisJUkVHREVGKFYzRF9D TEVfQ1QwQ1MpLAorCVJFR0RFRihWM0RfQ0xFX0NUMENBKSwKKwlSRUdERUYoVjNEX0NMRV9DVDBF QSksCisJUkVHREVGKFYzRF9DTEVfQ1QxQ1MpLAorCVJFR0RFRihWM0RfQ0xFX0NUMUNBKSwKKwlS RUdERUYoVjNEX0NMRV9DVDFFQSksCisKKwlSRUdERUYoVjNEX1BUQl9CUENBKSwKKwlSRUdERUYo VjNEX1BUQl9CUENTKSwKKworCVJFR0RFRihWM0RfTU1VX0NUTCksCisJUkVHREVGKFYzRF9NTVVf VklPX0FERFIpLAorCisJUkVHREVGKFYzRF9HTVBfU1RBVFVTKSwKKwlSRUdERUYoVjNEX0dNUF9D RkcpLAorCVJFR0RFRihWM0RfR01QX1ZJT19BRERSKSwKK307CisKK3N0YXRpYyBpbnQgdjNkX3Yz ZF9kZWJ1Z2ZzX3JlZ3Moc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCit7CisJc3Ry dWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKiltLT5wcml2 YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCXN0cnVj dCB2M2RfZGV2ICp2M2QgPSB0b192M2RfZGV2KGRldik7CisJaW50IGksIGNvcmU7CisKKwlmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2M2RfaHViX3JlZ19kZWZzKTsgaSsrKSB7CisJCXNlcV9w cmludGYobSwgIiVzICgweCUwNHgpOiAweCUwOHhcbiIsCisJCQkgICB2M2RfaHViX3JlZ19kZWZz W2ldLm5hbWUsIHYzZF9odWJfcmVnX2RlZnNbaV0ucmVnLAorCQkJICAgVjNEX1JFQUQodjNkX2h1 Yl9yZWdfZGVmc1tpXS5yZWcpKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2 M2RfZ2NhX3JlZ19kZWZzKTsgaSsrKSB7CisJCXNlcV9wcmludGYobSwgIiVzICgweCUwNHgpOiAw eCUwOHhcbiIsCisJCQkgICB2M2RfZ2NhX3JlZ19kZWZzW2ldLm5hbWUsIHYzZF9nY2FfcmVnX2Rl ZnNbaV0ucmVnLAorCQkJICAgVjNEX0dDQV9SRUFEKHYzZF9nY2FfcmVnX2RlZnNbaV0ucmVnKSk7 CisJfQorCisJZm9yIChjb3JlID0gMDsgY29yZSA8IHYzZC0+Y29yZXM7IGNvcmUrKykgeworCQlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2M2RfY29yZV9yZWdfZGVmcyk7IGkrKykgeworCQkJ c2VxX3ByaW50ZihtLCAiY29yZSAlZCAlcyAoMHglMDR4KTogMHglMDh4XG4iLAorCQkJCSAgIGNv cmUsCisJCQkJICAgdjNkX2NvcmVfcmVnX2RlZnNbaV0ubmFtZSwKKwkJCQkgICB2M2RfY29yZV9y ZWdfZGVmc1tpXS5yZWcsCisJCQkJICAgVjNEX0NPUkVfUkVBRChjb3JlLAorCQkJCQkJIHYzZF9j b3JlX3JlZ19kZWZzW2ldLnJlZykpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgdjNkX3YzZF9kZWJ1Z2ZzX2lkZW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51 c2VkKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19u b2RlICopbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3It PmRldjsKKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gdG9fdjNkX2RldihkZXYpOworCXUzMiBpZGVu dDAsIGlkZW50MSwgaWRlbnQyLCBpZGVudDMsIGNvcmVzOworCWludCByZXQsIGNvcmU7CisKKwly ZXQgPSBwbV9ydW50aW1lX2dldF9zeW5jKHYzZC0+ZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0 dXJuIHJldDsKKworCWlkZW50MCA9IFYzRF9SRUFEKFYzRF9IVUJfSURFTlQwKTsKKwlpZGVudDEg PSBWM0RfUkVBRChWM0RfSFVCX0lERU5UMSk7CisJaWRlbnQyID0gVjNEX1JFQUQoVjNEX0hVQl9J REVOVDIpOworCWlkZW50MyA9IFYzRF9SRUFEKFYzRF9IVUJfSURFTlQzKTsKKwljb3JlcyA9IFYz RF9HRVRfRklFTEQoaWRlbnQxLCBWM0RfSFVCX0lERU5UMV9OQ09SRVMpOworCisJc2VxX3ByaW50 ZihtLCAiUmV2aXNpb246ICAgJWQuJWQuJWQuJWRcbiIsCisJCSAgIFYzRF9HRVRfRklFTEQoaWRl bnQxLCBWM0RfSFVCX0lERU5UMV9UVkVSKSwKKwkJICAgVjNEX0dFVF9GSUVMRChpZGVudDEsIFYz RF9IVUJfSURFTlQxX1JFViksCisJCSAgIFYzRF9HRVRfRklFTEQoaWRlbnQzLCBWM0RfSFVCX0lE RU5UM19JUFJFViksCisJCSAgIFYzRF9HRVRfRklFTEQoaWRlbnQzLCBWM0RfSFVCX0lERU5UM19J UElEWCkpOworCXNlcV9wcmludGYobSwgIk1NVTogICAgICAgICVzXG4iLAorCQkgICAoaWRlbnQy ICYgVjNEX0hVQl9JREVOVDJfV0lUSF9NTVUpID8gInllcyIgOiAibm8iKTsKKwlzZXFfcHJpbnRm KG0sICJURlU6ICAgICAgICAlc1xuIiwKKwkJICAgKGlkZW50MSAmIFYzRF9IVUJfSURFTlQxX1dJ VEhfVEZVKSA/ICJ5ZXMiIDogIm5vIik7CisJc2VxX3ByaW50ZihtLCAiVFNZOiAgICAgICAgJXNc biIsCisJCSAgIChpZGVudDEgJiBWM0RfSFVCX0lERU5UMV9XSVRIX1RTWSkgPyAieWVzIiA6ICJu byIpOworCXNlcV9wcmludGYobSwgIk1TTzogICAgICAgICVzXG4iLAorCQkgICAoaWRlbnQxICYg VjNEX0hVQl9JREVOVDFfV0lUSF9NU08pID8gInllcyIgOiAibm8iKTsKKwlzZXFfcHJpbnRmKG0s ICJMM0M6ICAgICAgICAlcyAoJWRrYilcbiIsCisJCSAgIChpZGVudDEgJiBWM0RfSFVCX0lERU5U MV9XSVRIX0wzQykgPyAieWVzIiA6ICJubyIsCisJCSAgIFYzRF9HRVRfRklFTEQoaWRlbnQyLCBW M0RfSFVCX0lERU5UMl9MM0NfTktCKSk7CisKKwlmb3IgKGNvcmUgPSAwOyBjb3JlIDwgY29yZXM7 IGNvcmUrKykgeworCQl1MzIgbWlzY2NmZzsKKwkJdTMyIG5zbGMsIG50bXUsIHF1cHM7CisKKwkJ aWRlbnQwID0gVjNEX0NPUkVfUkVBRChjb3JlLCBWM0RfQ1RMX0lERU5UMCk7CisJCWlkZW50MSA9 IFYzRF9DT1JFX1JFQUQoY29yZSwgVjNEX0NUTF9JREVOVDEpOworCQlpZGVudDIgPSBWM0RfQ09S RV9SRUFEKGNvcmUsIFYzRF9DVExfSURFTlQyKTsKKwkJbWlzY2NmZyA9IFYzRF9DT1JFX1JFQUQo Y29yZSwgVjNEX0NUTF9NSVNDQ0ZHKTsKKworCQluc2xjID0gVjNEX0dFVF9GSUVMRChpZGVudDEs IFYzRF9JREVOVDFfTlNMQyk7CisJCW50bXUgPSBWM0RfR0VUX0ZJRUxEKGlkZW50MSwgVjNEX0lE RU5UMV9OVE1VKTsKKwkJcXVwcyA9IFYzRF9HRVRfRklFTEQoaWRlbnQxLCBWM0RfSURFTlQxX1FV UFMpOworCisJCXNlcV9wcmludGYobSwgIkNvcmUgJWQ6XG4iLCBjb3JlKTsKKwkJc2VxX3ByaW50 ZihtLCAiICBSZXZpc2lvbjogICAgICVkLiVkXG4iLAorCQkJICAgVjNEX0dFVF9GSUVMRChpZGVu dDAsIFYzRF9JREVOVDBfVkVSKSwKKwkJCSAgIFYzRF9HRVRfRklFTEQoaWRlbnQxLCBWM0RfSURF TlQxX1JFVikpOworCQlzZXFfcHJpbnRmKG0sICIgIFNsaWNlczogICAgICAgJWRcbiIsIG5zbGMp OworCQlzZXFfcHJpbnRmKG0sICIgIFRNVXM6ICAgICAgICAgJWRcbiIsIG5zbGMgKiBudG11KTsK KwkJc2VxX3ByaW50ZihtLCAiICBRUFVzOiAgICAgICAgICVkXG4iLCBuc2xjICogcXVwcyk7CisJ CXNlcV9wcmludGYobSwgIiAgU2VtYXBob3JlczogICAlZFxuIiwKKwkJCSAgIFYzRF9HRVRfRklF TEQoaWRlbnQxLCBWM0RfSURFTlQxX05TRU0pKTsKKwkJc2VxX3ByaW50ZihtLCAiICBCQ0cgaW50 OiAgICAgICVkXG4iLAorCQkJICAgKGlkZW50MiAmIFYzRF9JREVOVDJfQkNHX0lOVCkgIT0gMCk7 CisJCXNlcV9wcmludGYobSwgIiAgT3ZlcnJpZGUgVE1VOiAlZFxuIiwKKwkJCSAgIChtaXNjY2Zn ICYgVjNEX01JU0NDRkdfT1ZSVE1VT1VUKSAhPSAwKTsKKwl9CisKKwlwbV9ydW50aW1lX21hcmtf bGFzdF9idXN5KHYzZC0+ZGV2KTsKKwlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZCh2M2QtPmRl dik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2M2RfZGVidWdmc19ib19zdGF0cyhz dHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9k ZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKW0tPnByaXZhdGU7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJc3RydWN0IHYzZF9kZXYgKnYzZCA9 IHRvX3YzZF9kZXYoZGV2KTsKKworCW11dGV4X2xvY2soJnYzZC0+Ym9fbG9jayk7CisJc2VxX3By aW50ZihtLCAiYWxsb2NhdGVkIGJvczogICAgICAgICAgJWRcbiIsCisJCSAgIHYzZC0+Ym9fc3Rh dHMubnVtX2FsbG9jYXRlZCk7CisJc2VxX3ByaW50ZihtLCAiYWxsb2NhdGVkIGJvIHNpemUgKGti KTogJWxkXG4iLAorCQkgICAobG9uZyl2M2QtPmJvX3N0YXRzLnBhZ2VzX2FsbG9jYXRlZCA8PCAo UEFHRV9TSElGVCAtIDEwKSk7CisJbXV0ZXhfdW5sb2NrKCZ2M2QtPmJvX2xvY2spOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2luZm9fbGlzdCB2M2RfZGVidWdm c19saXN0W10gPSB7CisJeyJ2M2RfaWRlbnQiLCB2M2RfdjNkX2RlYnVnZnNfaWRlbnQsIDB9LAor CXsidjNkX3JlZ3MiLCB2M2RfdjNkX2RlYnVnZnNfcmVncywgMH0sCisJeyJib19zdGF0cyIsIHYz ZF9kZWJ1Z2ZzX2JvX3N0YXRzLCAwfSwKK307CisKK2ludAordjNkX2RlYnVnZnNfaW5pdChzdHJ1 Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlyZXR1cm4gZHJtX2RlYnVnZnNfY3JlYXRlX2ZpbGVz KHYzZF9kZWJ1Z2ZzX2xpc3QsCisJCQkJCUFSUkFZX1NJWkUodjNkX2RlYnVnZnNfbGlzdCksCisJ CQkJCW1pbm9yLT5kZWJ1Z2ZzX3Jvb3QsIG1pbm9yKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS92M2QvdjNkX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZHJ2LmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zOGU4MDQxYjVmMGMKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9kcnYuYwpAQCAtMCwwICsxLDM3 MSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCisvKiBDb3B5cmlnaHQg KEMpIDIwMTQtMjAxOCBCcm9hZGNvbSAqLworCisvKioKKyAqIERPQzogQnJvYWRjb20gVjNEIEdy YXBoaWNzIERyaXZlcgorICoKKyAqIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBCcm9hZGNvbSBW M0QgMy4zIGFuZCA0LjEgT3BlbkdMIEVTIEdQVXMuCisgKiBGb3IgVjNEIDIueCBzdXBwb3J0LCBz ZWUgdGhlIFZDNCBkcml2ZXIuCisgKgorICogQ3VycmVudGx5IG9ubHkgc2luZ2xlLWNvcmUgcmVu ZGVyaW5nIHVzaW5nIHRoZSBiaW5uZXIgYW5kIHJlbmRlcmVyCisgKiBpcyBzdXBwb3J0ZWQuICBU aGUgVEZVICh0ZXh0dXJlIGZvcm1hdHRpbmcgdW5pdCkgYW5kIFYzRCA0LngncyBDU0QKKyAqIChj b21wdXRlIHNoYWRlciBkaXNwYXRjaCkgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLgorICovCisKKyNp bmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRl IDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4 L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5j bHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBl ci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+CisKKyNpbmNsdWRlICJ1YXBpL2Ry bS92M2RfZHJtLmgiCisjaW5jbHVkZSAidjNkX2Rydi5oIgorI2luY2x1ZGUgInYzZF9yZWdzLmgi CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgInYzZCIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkJyb2Fk Y29tIFYzRCBncmFwaGljcyIKKyNkZWZpbmUgRFJJVkVSX0RBVEUgIjIwMTgwNDE5IgorI2RlZmlu ZSBEUklWRVJfTUFKT1IgMQorI2RlZmluZSBEUklWRVJfTUlOT1IgMAorI2RlZmluZSBEUklWRVJf UEFUQ0hMRVZFTCAwCisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgdjNkX3J1bnRpbWVf c3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9 IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2RfZGV2 KGRybSk7CisKKwl2M2RfaXJxX2Rpc2FibGUodjNkKTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFy ZSh2M2QtPmNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2M2RfcnVudGltZV9y ZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gdG9fdjNkX2Rldihk cm0pOworCWludCByZXQ7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUodjNkLT5jbGspOwor CWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFhYWDogVlBNIGJhc2UgKi8KKwor CXYzZF9tbXVfc2V0X3BhZ2VfdGFibGUodjNkKTsKKwl2M2RfaXJxX2VuYWJsZSh2M2QpOworCisJ cmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHYz ZF92M2RfcG1fb3BzID0geworCVNFVF9SVU5USU1FX1BNX09QUyh2M2RfcnVudGltZV9zdXNwZW5k LCB2M2RfcnVudGltZV9yZXN1bWUsIE5VTEwpCit9OworCitzdGF0aWMgaW50IHYzZF9nZXRfcGFy YW1faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgICAgICBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gdG9f djNkX2RldihkZXYpOworCXN0cnVjdCBkcm1fdjNkX2dldF9wYXJhbSAqYXJncyA9IGRhdGE7CisJ aW50IHJldDsKKwlzdGF0aWMgY29uc3QgdTMyIHJlZ19tYXBbXSA9IHsKKwkJW0RSTV9WM0RfUEFS QU1fVjNEX1VJRkNGR10gPSBWM0RfSFVCX1VJRkNGRywKKwkJW0RSTV9WM0RfUEFSQU1fVjNEX0hV Ql9JREVOVDFdID0gVjNEX0hVQl9JREVOVDEsCisJCVtEUk1fVjNEX1BBUkFNX1YzRF9IVUJfSURF TlQyXSA9IFYzRF9IVUJfSURFTlQyLAorCQlbRFJNX1YzRF9QQVJBTV9WM0RfSFVCX0lERU5UM10g PSBWM0RfSFVCX0lERU5UMywKKwkJW0RSTV9WM0RfUEFSQU1fVjNEX0NPUkUwX0lERU5UMF0gPSBW M0RfQ1RMX0lERU5UMCwKKwkJW0RSTV9WM0RfUEFSQU1fVjNEX0NPUkUwX0lERU5UMV0gPSBWM0Rf Q1RMX0lERU5UMSwKKwkJW0RSTV9WM0RfUEFSQU1fVjNEX0NPUkUwX0lERU5UMl0gPSBWM0RfQ1RM X0lERU5UMiwKKwl9OworCisJaWYgKGFyZ3MtPnBhZCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsK KworCS8qIE5vdGUgdGhhdCBEUk1fVjNEX1BBUkFNX1YzRF9DT1JFMF9JREVOVDAgaXMgMCwgc28g d2UgbmVlZAorCSAqIHRvIGV4cGxpY2l0bHkgYWxsb3cgaXQgaW4gdGhlICJ0aGUgcmVnaXN0ZXIg aW4gb3VyCisJICogcGFyYW1ldGVyIG1hcCIgY2hlY2suCisJICovCisJaWYgKGFyZ3MtPnBhcmFt IDwgQVJSQVlfU0laRShyZWdfbWFwKSAmJgorCSAgICAocmVnX21hcFthcmdzLT5wYXJhbV0gfHwK KwkgICAgIGFyZ3MtPnBhcmFtID09IERSTV9WM0RfUEFSQU1fVjNEX0NPUkUwX0lERU5UMCkpIHsK KwkJdTMyIG9mZnNldCA9IHJlZ19tYXBbYXJncy0+cGFyYW1dOworCisJCWlmIChhcmdzLT52YWx1 ZSAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJcmV0ID0gcG1fcnVudGltZV9nZXRfc3lu Yyh2M2QtPmRldik7CisJCWlmIChhcmdzLT5wYXJhbSA+PSBEUk1fVjNEX1BBUkFNX1YzRF9DT1JF MF9JREVOVDAgJiYKKwkJICAgIGFyZ3MtPnBhcmFtIDw9IERSTV9WM0RfUEFSQU1fVjNEX0NPUkUw X0lERU5UMikgeworCQkJYXJncy0+dmFsdWUgPSBWM0RfQ09SRV9SRUFEKDAsIG9mZnNldCk7CisJ CX0gZWxzZSB7CisJCQlhcmdzLT52YWx1ZSA9IFYzRF9SRUFEKG9mZnNldCk7CisJCX0KKwkJcG1f cnVudGltZV9tYXJrX2xhc3RfYnVzeSh2M2QtPmRldik7CisJCXBtX3J1bnRpbWVfcHV0X2F1dG9z dXNwZW5kKHYzZC0+ZGV2KTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQW55IHBhcmFtcyB0aGF0 IGFyZW4ndCBqdXN0IHJlZ2lzdGVyIHJlYWRzIHdvdWxkIGdvIGhlcmUuICovCisKKwlEUk1fREVC VUcoIlVua25vd24gcGFyYW1ldGVyICVkXG4iLCBhcmdzLT5wYXJhbSk7CisJcmV0dXJuIC1FSU5W QUw7Cit9CisKK3N0YXRpYyBpbnQKK3YzZF9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0 cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gdG9fdjNkX2Rl dihkZXYpOworCXN0cnVjdCB2M2RfZmlsZV9wcml2ICp2M2RfcHJpdjsKKwlpbnQgaTsKKworCXYz ZF9wcml2ID0ga3phbGxvYyhzaXplb2YoKnYzZF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2 M2RfcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl2M2RfcHJpdi0+djNkID0gdjNkOworCisJ Zm9yIChpID0gMDsgaSA8IFYzRF9NQVhfUVVFVUVTOyBpKyspIHsKKwkJZHJtX3NjaGVkX2VudGl0 eV9pbml0KCZ2M2QtPnF1ZXVlW2ldLnNjaGVkLAorCQkJCSAgICAgICZ2M2RfcHJpdi0+c2NoZWRf ZW50aXR5W2ldLAorCQkJCSAgICAgICZ2M2QtPnF1ZXVlW2ldLnNjaGVkLnNjaGVkX3JxW0RSTV9T Q0hFRF9QUklPUklUWV9OT1JNQUxdLAorCQkJCSAgICAgIDMyLCBOVUxMKTsKKwl9CisKKwlmaWxl LT5kcml2ZXJfcHJpdiA9IHYzZF9wcml2OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk Cit2M2RfcG9zdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAq ZmlsZSkKK3sKKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gdG9fdjNkX2RldihkZXYpOworCXN0cnVj dCB2M2RfZmlsZV9wcml2ICp2M2RfcHJpdiA9IGZpbGUtPmRyaXZlcl9wcml2OworCWVudW0gdjNk X3F1ZXVlIHE7CisKKwlmb3IgKHEgPSAwOyBxIDwgVjNEX01BWF9RVUVVRVM7IHErKykgeworCQlk cm1fc2NoZWRfZW50aXR5X2ZpbmkoJnYzZC0+cXVldWVbcV0uc2NoZWQsCisJCQkJICAgICAgJnYz ZF9wcml2LT5zY2hlZF9lbnRpdHlbcV0pOworCX0KKworCWtmcmVlKHYzZF9wcml2KTsKK30KKwor c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdjNkX2RybV9mb3BzID0geworCS5v d25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gZHJtX29wZW4sCisJLnJlbGVhc2UgPSBkcm1f cmVsZWFzZSwKKwkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCisJLm1tYXAgPSB2M2RfbW1h cCwKKwkucG9sbCA9IGRybV9wb2xsLAorCS5yZWFkID0gZHJtX3JlYWQsCisJLmNvbXBhdF9pb2N0 bCA9IGRybV9jb21wYXRfaW9jdGwsCisJLmxsc2VlayA9IG5vb3BfbGxzZWVrLAorfTsKKworLyog RFJNX0FVVEggaXMgcmVxdWlyZWQgb24gU1VCTUlUX0NMIGZvciBub3csIHdoaWxlIHdlIGRvbid0 IGhhdmUgR01QCisgKiBwcm90ZWN0aW9uIGJldHdlZW4gY2xpZW50cy4gIE5vdGUgdGhhdCByZW5k ZXIgbm9kZXMgd291bGQgYmUgYmUKKyAqIGFibGUgdG8gc3VibWl0IENMcyB0aGF0IGNvdWxkIGFj Y2VzcyBCT3MgZnJvbSBjbGllbnRzIGF1dGhlbnRpY2F0ZWQKKyAqIHdpdGggdGhlIG1hc3RlciBu b2RlLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pb2N0bF9kZXNjIHYzZF9kcm1faW9j dGxzW10gPSB7CisJRFJNX0lPQ1RMX0RFRl9EUlYoVjNEX1NVQk1JVF9DTCwgdjNkX3N1Ym1pdF9j bF9pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyB8IERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVGX0RS VihWM0RfV0FJVF9CTywgdjNkX3dhaXRfYm9faW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAorCURS TV9JT0NUTF9ERUZfRFJWKFYzRF9DUkVBVEVfQk8sIHYzZF9jcmVhdGVfYm9faW9jdGwsIERSTV9S RU5ERVJfQUxMT1cpLAorCURSTV9JT0NUTF9ERUZfRFJWKFYzRF9NTUFQX0JPLCB2M2RfbW1hcF9i b19pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCisJRFJNX0lPQ1RMX0RFRl9EUlYoVjNEX0dFVF9Q QVJBTSwgdjNkX2dldF9wYXJhbV9pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCisJRFJNX0lPQ1RM X0RFRl9EUlYoVjNEX0dFVF9CT19PRkZTRVQsIHYzZF9nZXRfYm9fb2Zmc2V0X2lvY3RsLCBEUk1f UkVOREVSX0FMTE9XKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19z dHJ1Y3QgdjNkX3ZtX29wcyA9IHsKKwkuZmF1bHQgPSB2M2RfZ2VtX2ZhdWx0LAorCS5vcGVuID0g ZHJtX2dlbV92bV9vcGVuLAorCS5jbG9zZSA9IGRybV9nZW1fdm1fY2xvc2UsCit9OworCitzdGF0 aWMgc3RydWN0IGRybV9kcml2ZXIgdjNkX2RybV9kcml2ZXIgPSB7CisJLmRyaXZlcl9mZWF0dXJl cyA9IChEUklWRVJfR0VNIHwKKwkJCSAgICBEUklWRVJfUkVOREVSIHwKKwkJCSAgICBEUklWRVJf UFJJTUUgfAorCQkJICAgIERSSVZFUl9TWU5DT0JKKSwKKworCS5vcGVuID0gdjNkX29wZW4sCisJ LnBvc3RjbG9zZSA9IHYzZF9wb3N0Y2xvc2UsCisKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19G UykKKwkuZGVidWdmc19pbml0ID0gdjNkX2RlYnVnZnNfaW5pdCwKKyNlbmRpZgorCisJLmdlbV9m cmVlX29iamVjdF91bmxvY2tlZCA9IHYzZF9mcmVlX29iamVjdCwKKwkuZ2VtX3ZtX29wcyA9ICZ2 M2Rfdm1fb3BzLAorCisJLnByaW1lX2hhbmRsZV90b19mZCA9IGRybV9nZW1fcHJpbWVfaGFuZGxl X3RvX2ZkLAorCS5wcmltZV9mZF90b19oYW5kbGUgPSBkcm1fZ2VtX3ByaW1lX2ZkX3RvX2hhbmRs ZSwKKwkuZ2VtX3ByaW1lX2ltcG9ydCA9IGRybV9nZW1fcHJpbWVfaW1wb3J0LAorCS5nZW1fcHJp bWVfZXhwb3J0ID0gZHJtX2dlbV9wcmltZV9leHBvcnQsCisJLmdlbV9wcmltZV9yZXNfb2JqID0g djNkX3ByaW1lX3Jlc19vYmosCisJLmdlbV9wcmltZV9nZXRfc2dfdGFibGUJPSB2M2RfcHJpbWVf Z2V0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gdjNkX3ByaW1lX2lt cG9ydF9zZ190YWJsZSwKKwkuZ2VtX3ByaW1lX21tYXAgPSB2M2RfcHJpbWVfbW1hcCwKKworCS5p b2N0bHMgPSB2M2RfZHJtX2lvY3RscywKKwkubnVtX2lvY3RscyA9IEFSUkFZX1NJWkUodjNkX2Ry bV9pb2N0bHMpLAorCS5mb3BzID0gJnYzZF9kcm1fZm9wcywKKworCS5uYW1lID0gRFJJVkVSX05B TUUsCisJLmRlc2MgPSBEUklWRVJfREVTQywKKwkuZGF0ZSA9IERSSVZFUl9EQVRFLAorCS5tYWpv ciA9IERSSVZFUl9NQUpPUiwKKwkubWlub3IgPSBEUklWRVJfTUlOT1IsCisJLnBhdGNobGV2ZWwg PSBEUklWRVJfUEFUQ0hMRVZFTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNl X2lkIHYzZF9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYnJjbSw3MjY4LXYzZCIg fSwKKwl7IC5jb21wYXRpYmxlID0gImJyY20sNzI3OC12M2QiIH0sCisJe30sCit9OworTU9EVUxF X0RFVklDRV9UQUJMRShvZiwgdjNkX29mX21hdGNoKTsKKworc3RhdGljIGludAorbWFwX3JlZ3Mo c3RydWN0IHYzZF9kZXYgKnYzZCwgdm9pZCBfX2lvbWVtICoqcmVncywgY29uc3QgY2hhciAqbmFt ZSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9CisJCXBsYXRmb3JtX2dldF9yZXNvdXJjZV9i eW5hbWUodjNkLT5wZGV2LCBJT1JFU09VUkNFX01FTSwgbmFtZSk7CisKKwkqcmVncyA9IGRldm1f aW9yZW1hcF9yZXNvdXJjZSh2M2QtPmRldiwgcmVzKTsKKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJP KCpyZWdzKTsKK30KKworc3RhdGljIGludCB2M2RfcGxhdGZvcm1fZHJtX3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRl djsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtOworCXN0cnVjdCB2M2RfZGV2ICp2M2Q7CisJaW50 IHJldDsKKwl1MzIgaWRlbnQxOworCisJZGV2LT5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRf TUFTSygzNik7CisKKwl2M2QgPSBremFsbG9jKHNpemVvZigqdjNkKSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCF2M2QpCisJCXJldHVybiAtRU5PTUVNOworCXYzZC0+ZGV2ID0gZGV2OworCXYzZC0+cGRl diA9IHBkZXY7CisJZHJtID0gJnYzZC0+ZHJtOworCisJcmV0ID0gbWFwX3JlZ3ModjNkLCAmdjNk LT5icmlkZ2VfcmVncywgImJyaWRnZSIpOworCWlmIChyZXQpCisJCWdvdG8gZGV2X2ZyZWU7CisK KwlyZXQgPSBtYXBfcmVncyh2M2QsICZ2M2QtPmh1Yl9yZWdzLCAiaHViIik7CisJaWYgKHJldCkK KwkJZ290byBkZXZfZnJlZTsKKworCXJldCA9IG1hcF9yZWdzKHYzZCwgJnYzZC0+Y29yZV9yZWdz WzBdLCAiY29yZTAiKTsKKwlpZiAocmV0KQorCQlnb3RvIGRldl9mcmVlOworCisJaWRlbnQxID0g VjNEX1JFQUQoVjNEX0hVQl9JREVOVDEpOworCXYzZC0+dmVyID0gKFYzRF9HRVRfRklFTEQoaWRl bnQxLCBWM0RfSFVCX0lERU5UMV9UVkVSKSAqIDEwICsKKwkJICAgIFYzRF9HRVRfRklFTEQoaWRl bnQxLCBWM0RfSFVCX0lERU5UMV9SRVYpKTsKKwl2M2QtPmNvcmVzID0gVjNEX0dFVF9GSUVMRChp ZGVudDEsIFYzRF9IVUJfSURFTlQxX05DT1JFUyk7CisJV0FSTl9PTih2M2QtPmNvcmVzID4gMSk7 IC8qIG11bHRpY29yZSBub3QgeWV0IGltcGxlbWVudGVkICovCisKKwlpZiAodjNkLT52ZXIgPCA0 MSkgeworCQlyZXQgPSBtYXBfcmVncyh2M2QsICZ2M2QtPmdjYV9yZWdzLCAiZ2NhIik7CisJCWlm IChyZXQpCisJCQlnb3RvIGRldl9mcmVlOworCX0KKworCXYzZC0+bW11X3NjcmF0Y2ggPSBkbWFf YWxsb2Nfd2MoZGV2LCA0MDk2LCAmdjNkLT5tbXVfc2NyYXRjaF9wYWRkciwKKwkJCQkJR0ZQX0tF Uk5FTCB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX1pFUk8pOworCWlmICghdjNkLT5tbXVfc2NyYXRj aCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBNTVUgc2NyYXRjaCBwYWdl XG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBkZXZfZnJlZTsKKwl9CisKKwlwbV9ydW50 aW1lX3VzZV9hdXRvc3VzcGVuZChkZXYpOworCXBtX3J1bnRpbWVfc2V0X2F1dG9zdXNwZW5kX2Rl bGF5KGRldiwgNTApOworCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CisKKwlyZXQgPSBkcm1fZGV2 X2luaXQoJnYzZC0+ZHJtLCAmdjNkX2RybV9kcml2ZXIsIGRldik7CisJaWYgKHJldCkKKwkJZ290 byBkbWFfZnJlZTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRybSk7CisJZHJtLT5k ZXZfcHJpdmF0ZSA9IHYzZDsKKworCXJldCA9IHYzZF9nZW1faW5pdChkcm0pOworCWlmIChyZXQp CisJCWdvdG8gZGV2X2Rlc3Ryb3k7CisKKwl2M2RfaXJxX2luaXQodjNkKTsKKworCXJldCA9IGRy bV9kZXZfcmVnaXN0ZXIoZHJtLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGdlbV9kZXN0cm95Owor CisJcmV0dXJuIDA7CisKK2dlbV9kZXN0cm95OgorCXYzZF9nZW1fZGVzdHJveShkcm0pOworZGV2 X2Rlc3Ryb3k6CisJZHJtX2Rldl9wdXQoZHJtKTsKK2RtYV9mcmVlOgorCWRtYV9mcmVlX3djKGRl diwgNDA5NiwgdjNkLT5tbXVfc2NyYXRjaCwgdjNkLT5tbXVfc2NyYXRjaF9wYWRkcik7CitkZXZf ZnJlZToKKwlrZnJlZSh2M2QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdjNkX3Bs YXRmb3JtX2RybV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0 IHYzZF9kZXYgKnYzZCA9IHRvX3YzZF9kZXYoZHJtKTsKKworCWRybV9kZXZfdW5yZWdpc3Rlcihk cm0pOworCisJdjNkX2dlbV9kZXN0cm95KGRybSk7CisKKwlkcm1fZGV2X3B1dChkcm0pOworCisJ ZG1hX2ZyZWVfd2ModjNkLT5kZXYsIDQwOTYsIHYzZC0+bW11X3NjcmF0Y2gsIHYzZC0+bW11X3Nj cmF0Y2hfcGFkZHIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1f ZHJpdmVyIHYzZF9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHYzZF9wbGF0Zm9ybV9k cm1fcHJvYmUsCisJLnJlbW92ZQkJPSB2M2RfcGxhdGZvcm1fZHJtX3JlbW92ZSwKKwkuZHJpdmVy CQk9IHsKKwkJLm5hbWUJPSAidjNkIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gdjNkX29mX21hdGNo LAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCB2M2RfZHJtX3JlZ2lzdGVyKHZvaWQpCit7 CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdjNkX3BsYXRmb3JtX2RyaXZlcik7 Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB2M2RfZHJtX3VucmVnaXN0ZXIodm9pZCkKK3sKKwlw bGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdjNkX3BsYXRmb3JtX2RyaXZlcik7Cit9CisKK21v ZHVsZV9pbml0KHYzZF9kcm1fcmVnaXN0ZXIpOworbW9kdWxlX2V4aXQodjNkX2RybV91bnJlZ2lz dGVyKTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp2M2QtZHJtIik7CitNT0RVTEVfREVTQ1JJ UFRJT04oIkJyb2FkY29tIFYzRCBEUk0gRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJFcmljIEFu aG9sdCA8ZXJpY0BhbmhvbHQubmV0PiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0v djNkL3YzZF9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmEw NDNhYzNhYWU5OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2Ry di5oCkBAIC0wLDAgKzEsMjk0IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MCsKKy8qIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEJyb2FkY29tICovCisKKyNpbmNsdWRlIDxs aW51eC9yZXNlcnZhdGlvbi5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9lbmNvZGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KKyNpbmNsdWRlIDxkcm0v Z3B1X3NjaGVkdWxlci5oPgorCisjZGVmaW5lIEdNUF9HUkFOVUxBUklUWSAoMTI4ICogMTAyNCkK KworLyogRW51bSBmb3IgZWFjaCBvZiB0aGUgVjNEIHF1ZXVlcy4gIFdlIG1haW50YWluIHZhcmlv dXMgcXVldWUKKyAqIHRyYWNraW5nIGFzIGFuIGFycmF5IGJlY2F1c2UgYXQgc29tZSBwb2ludCB3 ZSdsbCB3YW50IHRvIHN1cHBvcnQKKyAqIHRoZSBURlUgKHRleHR1cmUgZm9ybWF0dGluZyB1bml0 KSBhcyBhbm90aGVyIHF1ZXVlLgorICovCitlbnVtIHYzZF9xdWV1ZSB7CisJVjNEX0JJTiwKKwlW M0RfUkVOREVSLAorfTsKKworI2RlZmluZSBWM0RfTUFYX1FVRVVFUyAoVjNEX1JFTkRFUiArIDEp CisKK3N0cnVjdCB2M2RfcXVldWVfc3RhdGUgeworCXN0cnVjdCBkcm1fZ3B1X3NjaGVkdWxlciBz Y2hlZDsKKworCXU2NCBmZW5jZV9jb250ZXh0OworCXU2NCBlbWl0X3NlcW5vOworCXU2NCBmaW5p c2hlZF9zZXFubzsKK307CisKK3N0cnVjdCB2M2RfZGV2IHsKKwlzdHJ1Y3QgZHJtX2RldmljZSBk cm07CisKKwkvKiBTaG9ydCByZXByZXNlbnRhdGlvbiAoZS5nLiAzMywgNDEpIG9mIHRoZSBWM0Qg dGVjaCB2ZXJzaW9uCisJICogYW5kIHJldmlzaW9uLgorCSAqLworCWludCB2ZXI7CisKKwlzdHJ1 Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwl2b2lkIF9f aW9tZW0gKmh1Yl9yZWdzOworCXZvaWQgX19pb21lbSAqY29yZV9yZWdzWzNdOworCXZvaWQgX19p b21lbSAqYnJpZGdlX3JlZ3M7CisJdm9pZCBfX2lvbWVtICpnY2FfcmVnczsKKwlzdHJ1Y3QgY2xr ICpjbGs7CisKKwkvKiBWaXJ0dWFsIGFuZCBETUEgYWRkcmVzc2VzIG9mIHRoZSBzaW5nbGUgc2hh cmVkIHBhZ2UgdGFibGUuICovCisJdm9sYXRpbGUgdTMyICpwdDsKKwlkbWFfYWRkcl90IHB0X3Bh ZGRyOworCisJLyogVmlydHVhbCBhbmQgRE1BIGFkZHJlc3NlcyBvZiB0aGUgTU1VJ3Mgc2NyYXRj aCBwYWdlLiAgV2hlbgorCSAqIGEgcmVhZCBvciB3cml0ZSBpcyBpbnZhbGlkIGluIHRoZSBNTVUs IGl0IHdpbGwgYmUKKwkgKiByZWRpcmVjdGVkIGhlcmUuCisJICovCisJdm9pZCAqbW11X3NjcmF0 Y2g7CisJZG1hX2FkZHJfdCBtbXVfc2NyYXRjaF9wYWRkcjsKKworCS8qIE51bWJlciBvZiBWM0Qg Y29yZXMuICovCisJdTMyIGNvcmVzOworCisJLyogQWxsb2NhdG9yIG1hbmFnaW5nIHRoZSBhZGRy ZXNzIHNwYWNlLiAgQWxsIHVuaXRzIGFyZSBpbgorCSAqIG51bWJlciBvZiBwYWdlcy4KKwkgKi8K KwlzdHJ1Y3QgZHJtX21tIG1tOworCXNwaW5sb2NrX3QgbW1fbG9jazsKKworCXN0cnVjdCB3b3Jr X3N0cnVjdCBvdmVyZmxvd19tZW1fd29yazsKKworCXN0cnVjdCB2M2RfZXhlY19pbmZvICpiaW5f am9iOworCXN0cnVjdCB2M2RfZXhlY19pbmZvICpyZW5kZXJfam9iOworCisJc3RydWN0IHYzZF9x dWV1ZV9zdGF0ZSBxdWV1ZVtWM0RfTUFYX1FVRVVFU107CisKKwkvKiBTcGlubG9jayB1c2VkIHRv IHN5bmNocm9uaXplIHRoZSBvdmVyZmxvdyBtZW1vcnkKKwkgKiBtYW5hZ2VtZW50IGFnYWluc3Qg YmluIGpvYiBzdWJtaXNzaW9uLgorCSAqLworCXNwaW5sb2NrX3Qgam9iX2xvY2s7CisKKwkvKiBQ cm90ZWN0cyBib19zdGF0cyAqLworCXN0cnVjdCBtdXRleCBib19sb2NrOworCisJLyogTG9jayB0 YWtlbiB3aGVuIHJlc2V0dGluZyB0aGUgR1BVLCB0byBrZWVwIG11bHRpcGxlCisJICogcHJvY2Vz c2VzIGZyb20gdHJ5aW5nIHRvIHBhcmsgdGhlIHNjaGVkdWxlciB0aHJlYWRzIGFuZAorCSAqIHJl c2V0IGF0IG9uY2UuCisJICovCisJc3RydWN0IG11dGV4IHJlc2V0X2xvY2s7CisKKwlzdHJ1Y3Qg eworCQl1MzIgbnVtX2FsbG9jYXRlZDsKKwkJdTMyIHBhZ2VzX2FsbG9jYXRlZDsKKwl9IGJvX3N0 YXRzOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdjNkX2RldiAqCit0b192M2RfZGV2KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIChzdHJ1Y3QgdjNkX2RldiAqKWRldi0+ ZGV2X3ByaXZhdGU7Cit9CisKKy8qIFRoZSBwZXItZmQgc3RydWN0LCB3aGljaCB0cmFja3MgdGhl IE1NVSBtYXBwaW5ncy4gKi8KK3N0cnVjdCB2M2RfZmlsZV9wcml2IHsKKwlzdHJ1Y3QgdjNkX2Rl diAqdjNkOworCisJc3RydWN0IGRybV9zY2hlZF9lbnRpdHkgc2NoZWRfZW50aXR5W1YzRF9NQVhf UVVFVUVTXTsKK307CisKKy8qIFRyYWNrcyBhIG1hcHBpbmcgb2YgYSBCTyBpbnRvIGEgcGVyLWZk IGFkZHJlc3Mgc3BhY2UgKi8KK3N0cnVjdCB2M2Rfdm1hIHsKKwlzdHJ1Y3QgdjNkX3BhZ2VfdGFi bGUgKnB0OworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgLyogZW50cnkgaW4gdjNkX2JvLnZtYXMg Ki8KK307CisKK3N0cnVjdCB2M2RfYm8geworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCBiYXNlOwor CisJc3RydWN0IG11dGV4IGxvY2s7CisKKwlzdHJ1Y3QgZHJtX21tX25vZGUgbm9kZTsKKworCXUz MiBwYWdlc19yZWZjb3VudDsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworCXN0cnVjdCBzZ190YWJs ZSAqc2d0OworCXZvaWQgKnZhZGRyOworCisJc3RydWN0IGxpc3RfaGVhZCB2bWFzOyAgICAvKiBs aXN0IG9mIHYzZF92bWEgKi8KKworCS8qIExpc3QgZW50cnkgZm9yIHRoZSBCTydzIHBvc2l0aW9u IGluCisJICogdjNkX2V4ZWNfaW5mby0+dW5yZWZfbGlzdAorCSAqLworCXN0cnVjdCBsaXN0X2hl YWQgdW5yZWZfaGVhZDsKKworCS8qIG5vcm1hbGx5IChyZXN2ID09ICZfcmVzdikgZXhjZXB0IGZv ciBpbXBvcnRlZCBibydzICovCisJc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdjsKKwlz dHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0IF9yZXN2OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1 Y3QgdjNkX2JvICoKK3RvX3YzZF9ibyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmJvKQoreworCXJl dHVybiAoc3RydWN0IHYzZF9ibyAqKWJvOworfQorCitzdHJ1Y3QgdjNkX2ZlbmNlIHsKKwlzdHJ1 Y3QgZG1hX2ZlbmNlIGJhc2U7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKwkvKiB2M2Qgc2Vx bm8gZm9yIHNpZ25hbGVkKCkgdGVzdCAqLworCXU2NCBzZXFubzsKKwllbnVtIHYzZF9xdWV1ZSBx dWV1ZTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHYzZF9mZW5jZSAqCit0b192M2RfZmVu Y2Uoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCit7CisJcmV0dXJuIChzdHJ1Y3QgdjNkX2ZlbmNl ICopZmVuY2U7Cit9CisKKyNkZWZpbmUgVjNEX1JFQUQob2Zmc2V0KSByZWFkbCh2M2QtPmh1Yl9y ZWdzICsgb2Zmc2V0KQorI2RlZmluZSBWM0RfV1JJVEUob2Zmc2V0LCB2YWwpIHdyaXRlbCh2YWws IHYzZC0+aHViX3JlZ3MgKyBvZmZzZXQpCisKKyNkZWZpbmUgVjNEX0JSSURHRV9SRUFEKG9mZnNl dCkgcmVhZGwodjNkLT5icmlkZ2VfcmVncyArIG9mZnNldCkKKyNkZWZpbmUgVjNEX0JSSURHRV9X UklURShvZmZzZXQsIHZhbCkgd3JpdGVsKHZhbCwgdjNkLT5icmlkZ2VfcmVncyArIG9mZnNldCkK KworI2RlZmluZSBWM0RfR0NBX1JFQUQob2Zmc2V0KSByZWFkbCh2M2QtPmdjYV9yZWdzICsgb2Zm c2V0KQorI2RlZmluZSBWM0RfR0NBX1dSSVRFKG9mZnNldCwgdmFsKSB3cml0ZWwodmFsLCB2M2Qt PmdjYV9yZWdzICsgb2Zmc2V0KQorCisjZGVmaW5lIFYzRF9DT1JFX1JFQUQoY29yZSwgb2Zmc2V0 KSByZWFkbCh2M2QtPmNvcmVfcmVnc1tjb3JlXSArIG9mZnNldCkKKyNkZWZpbmUgVjNEX0NPUkVf V1JJVEUoY29yZSwgb2Zmc2V0LCB2YWwpIHdyaXRlbCh2YWwsIHYzZC0+Y29yZV9yZWdzW2NvcmVd ICsgb2Zmc2V0KQorCitzdHJ1Y3QgdjNkX2pvYiB7CisJc3RydWN0IGRybV9zY2hlZF9qb2IgYmFz ZTsKKworCXN0cnVjdCB2M2RfZXhlY19pbmZvICpleGVjOworCisJLyogQW4gb3B0aW9uYWwgZmVu Y2UgdXNlcnNwYWNlIGNhbiBwYXNzIGluIGZvciB0aGUgam9iIHRvIGRlcGVuZCBvbi4gKi8KKwlz dHJ1Y3QgZG1hX2ZlbmNlICppbl9mZW5jZTsKKworCS8qIHYzZCBmZW5jZSB0byBiZSBzaWduYWxl ZCBieSBJUlEgaGFuZGxlciB3aGVuIHRoZSBqb2IgaXMgY29tcGxldGUuICovCisJc3RydWN0IGRt YV9mZW5jZSAqZG9uZV9mZW5jZTsKKworCS8qIEdQVSB2aXJ0dWFsIGFkZHJlc3NlcyBvZiB0aGUg c3RhcnQvZW5kIG9mIHRoZSBDTCBqb2IuICovCisJdTMyIHN0YXJ0LCBlbmQ7Cit9OworCitzdHJ1 Y3QgdjNkX2V4ZWNfaW5mbyB7CisJc3RydWN0IHYzZF9kZXYgKnYzZDsKKworCXN0cnVjdCB2M2Rf am9iIGJpbiwgcmVuZGVyOworCisJLyogRmVuY2UgZm9yIHdoZW4gdGhlIHNjaGVkdWxlciBjb25z aWRlcnMgdGhlIGJpbm5lciB0byBiZQorCSAqIGRvbmUsIGZvciByZW5kZXIgdG8gZGVwZW5kIG9u LgorCSAqLworCXN0cnVjdCBkbWFfZmVuY2UgKmJpbl9kb25lX2ZlbmNlOworCisJc3RydWN0IGty ZWYgcmVmY291bnQ7CisKKwkvKiBUaGlzIGlzIHRoZSBhcnJheSBvZiBCT3MgdGhhdCB3ZXJlIGxv b2tlZCB1cCBhdCB0aGUgc3RhcnQgb2YgZXhlYy4gKi8KKwlzdHJ1Y3QgdjNkX2JvICoqYm87CisJ dTMyIGJvX2NvdW50OworCisJLyogTGlzdCBvZiBvdmVyZmxvdyBCT3MgdXNlZCBpbiB0aGUgam9i IHRoYXQgbmVlZCB0byBiZQorCSAqIHJlbGVhc2VkIG9uY2UgdGhlIGpvYiBpcyBjb21wbGV0ZS4K KwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHVucmVmX2xpc3Q7CisKKwkvKiBTdWJtaXR0ZWQgdGls ZSBtZW1vcnkgYWxsb2NhdGlvbiBzdGFydC9zaXplLCB0aWxlIHN0YXRlLiAqLworCXUzMiBxbWEs IHFtcywgcXRzOworfTsKKworLyoqCisgKiBfd2FpdF9mb3IgLSBtYWdpYyAocmVnaXN0ZXIpIHdh aXQgbWFjcm8KKyAqCisgKiBEb2VzIHRoZSByaWdodCB0aGluZyBmb3IgbW9kZXNldCBwYXRocyB3 aGVuIHJ1biB1bmRlciBrZGdiIG9yIHNpbWlsYXIgYXRvbWljCisgKiBjb250ZXh0cy4gTm90ZSB0 aGF0IGl0J3MgaW1wb3J0YW50IHRoYXQgd2UgY2hlY2sgdGhlIGNvbmRpdGlvbiBhZ2FpbiBhZnRl cgorICogaGF2aW5nIHRpbWVkIG91dCwgc2luY2UgdGhlIHRpbWVvdXQgY291bGQgYmUgZHVlIHRv IHByZWVtcHRpb24gb3Igc2ltaWxhciBhbmQKKyAqIHdlJ3ZlIG5ldmVyIGhhZCBhIGNoYW5jZSB0 byBjaGVjayB0aGUgY29uZGl0aW9uIGJlZm9yZSB0aGUgdGltZW91dC4KKyAqLworI2RlZmluZSB3 YWl0X2ZvcihDT05ELCBNUykgKHsgXAorCXVuc2lnbmVkIGxvbmcgdGltZW91dF9fID0gamlmZmll cyArIG1zZWNzX3RvX2ppZmZpZXMoTVMpICsgMTsJXAorCWludCByZXRfXyA9IDA7CQkJCQkJCVwK Kwl3aGlsZSAoIShDT05EKSkgewkJCQkJCVwKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGlt ZW91dF9fKSkgewkJCVwKKwkJCWlmICghKENPTkQpKQkJCQkJXAorCQkJCXJldF9fID0gLUVUSU1F RE9VVDsJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCX0JCQkJCQkJXAorCQltc2xlZXAoMSk7CQkJ CQlcCisJfQkJCQkJCQkJXAorCXJldF9fOwkJCQkJCQkJXAorfSkKKworc3RhdGljIGlubGluZSB1 bnNpZ25lZCBsb25nIG5zZWNzX3RvX2ppZmZpZXNfdGltZW91dChjb25zdCB1NjQgbikKK3sKKwkv KiBuc2Vjc190b19qaWZmaWVzNjQoKSBkb2VzIG5vdCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93ICov CisJaWYgKE5TRUNfUEVSX1NFQyAlIEhaICYmCisJICAgIGRpdl91NjQobiwgTlNFQ19QRVJfU0VD KSA+PSBNQVhfSklGRllfT0ZGU0VUIC8gSFopCisJCXJldHVybiBNQVhfSklGRllfT0ZGU0VUOwor CisJcmV0dXJuIG1pbl90KHU2NCwgTUFYX0pJRkZZX09GRlNFVCwgbnNlY3NfdG9famlmZmllczY0 KG4pICsgMSk7Cit9CisKKy8qIHYzZF9iby5jICovCit2b2lkIHYzZF9mcmVlX29iamVjdChzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopOworc3RydWN0IHYzZF9ibyAqdjNkX2JvX2NyZWF0 ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJ CSAgICAgc2l6ZV90IHNpemUpOworaW50IHYzZF9jcmVhdGVfYm9faW9jdGwoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsK K2ludCB2M2RfbW1hcF9ib19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRh LAorCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgdjNkX2dldF9ib19v ZmZzZXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgICBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgdjNkX2dlbV9mYXVsdChzdHJ1Y3Qgdm1f ZmF1bHQgKnZtZik7CitpbnQgdjNkX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9h cmVhX3N0cnVjdCAqdm1hKTsKK3N0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgKnYzZF9wcmltZV9y ZXNfb2JqKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK2ludCB2M2RfcHJpbWVfbW1hcChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwor c3RydWN0IHNnX3RhYmxlICp2M2RfcHJpbWVfZ2V0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqKTsKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqdjNkX3ByaW1lX2ltcG9ydF9zZ190 YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJIHN0cnVjdCBkbWFfYnVmX2F0dGFj aG1lbnQgKmF0dGFjaCwKKwkJCQkJCSBzdHJ1Y3Qgc2dfdGFibGUgKnNndCk7CisKKy8qIHYzZF9k ZWJ1Z2ZzLmMgKi8KK2ludCB2M2RfZGVidWdmc19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9y KTsKKworLyogdjNkX2ZlbmNlLmMgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgZG1hX2ZlbmNlX29w cyB2M2RfZmVuY2Vfb3BzOworc3RydWN0IGRtYV9mZW5jZSAqdjNkX2ZlbmNlX2NyZWF0ZShzdHJ1 Y3QgdjNkX2RldiAqdjNkLCBlbnVtIHYzZF9xdWV1ZSBxdWV1ZSk7CisKKy8qIHYzZF9nZW0uYyAq LworaW50IHYzZF9nZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQgdjNkX2dl bV9kZXN0cm95KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworaW50IHYzZF9zdWJtaXRfY2xfaW9j dGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmls ZSAqZmlsZV9wcml2KTsKK2ludCB2M2Rfd2FpdF9ib19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB2b2lkICpkYXRhLAorCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Cit2 b2lkIHYzZF9leGVjX3B1dChzdHJ1Y3QgdjNkX2V4ZWNfaW5mbyAqZXhlYyk7Cit2b2lkIHYzZF9y ZXNldChzdHJ1Y3QgdjNkX2RldiAqdjNkKTsKK3ZvaWQgdjNkX2ludmFsaWRhdGVfY2FjaGVzKHN0 cnVjdCB2M2RfZGV2ICp2M2QpOwordm9pZCB2M2RfZmx1c2hfY2FjaGVzKHN0cnVjdCB2M2RfZGV2 ICp2M2QpOworCisvKiB2M2RfaXJxLmMgKi8KK3ZvaWQgdjNkX2lycV9pbml0KHN0cnVjdCB2M2Rf ZGV2ICp2M2QpOwordm9pZCB2M2RfaXJxX2VuYWJsZShzdHJ1Y3QgdjNkX2RldiAqdjNkKTsKK3Zv aWQgdjNkX2lycV9kaXNhYmxlKHN0cnVjdCB2M2RfZGV2ICp2M2QpOwordm9pZCB2M2RfaXJxX3Jl c2V0KHN0cnVjdCB2M2RfZGV2ICp2M2QpOworCisvKiB2M2RfbW11LmMgKi8KK2ludCB2M2RfbW11 X2dldF9vZmZzZXQoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHN0cnVjdCB2M2RfYm8gKmJv LAorCQkgICAgICAgdTMyICpvZmZzZXQpOworaW50IHYzZF9tbXVfc2V0X3BhZ2VfdGFibGUoc3Ry dWN0IHYzZF9kZXYgKnYzZCk7Cit2b2lkIHYzZF9tbXVfaW5zZXJ0X3B0ZXMoc3RydWN0IHYzZF9i byAqYm8pOwordm9pZCB2M2RfbW11X3JlbW92ZV9wdGVzKHN0cnVjdCB2M2RfYm8gKmJvKTsKKwor LyogdjNkX3NjaGVkLmMgKi8KK2ludCB2M2Rfc2NoZWRfaW5pdChzdHJ1Y3QgdjNkX2RldiAqdjNk KTsKK3ZvaWQgdjNkX3NjaGVkX2Zpbmkoc3RydWN0IHYzZF9kZXYgKnYzZCk7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9mZW5jZS5jIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92 M2RfZmVuY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjA4N2Q0 OWM4Y2IxMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2ZlbmNl LmMKQEAgLTAsMCArMSw1OCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAr CisvKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBCcm9hZGNvbSAqLworCisjaW5jbHVkZSAidjNk X2Rydi5oIgorCitzdHJ1Y3QgZG1hX2ZlbmNlICp2M2RfZmVuY2VfY3JlYXRlKHN0cnVjdCB2M2Rf ZGV2ICp2M2QsIGVudW0gdjNkX3F1ZXVlIHF1ZXVlKQoreworCXN0cnVjdCB2M2RfZmVuY2UgKmZl bmNlOworCisJZmVuY2UgPSBremFsbG9jKHNpemVvZigqZmVuY2UpLCBHRlBfS0VSTkVMKTsKKwlp ZiAoIWZlbmNlKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWZlbmNlLT5kZXYgPSAm djNkLT5kcm07CisJZmVuY2UtPnF1ZXVlID0gcXVldWU7CisJZmVuY2UtPnNlcW5vID0gKyt2M2Qt PnF1ZXVlW3F1ZXVlXS5lbWl0X3NlcW5vOworCWRtYV9mZW5jZV9pbml0KCZmZW5jZS0+YmFzZSwg JnYzZF9mZW5jZV9vcHMsICZ2M2QtPmpvYl9sb2NrLAorCQkgICAgICAgdjNkLT5xdWV1ZVtxdWV1 ZV0uZmVuY2VfY29udGV4dCwgZmVuY2UtPnNlcW5vKTsKKworCXJldHVybiAmZmVuY2UtPmJhc2U7 Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp2M2RfZmVuY2VfZ2V0X2RyaXZlcl9uYW1lKHN0cnVj dCBkbWFfZmVuY2UgKmZlbmNlKQoreworCXJldHVybiAidjNkIjsKK30KKworc3RhdGljIGNvbnN0 IGNoYXIgKnYzZF9mZW5jZV9nZXRfdGltZWxpbmVfbmFtZShzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5j ZSkKK3sKKwlzdHJ1Y3QgdjNkX2ZlbmNlICpmID0gdG9fdjNkX2ZlbmNlKGZlbmNlKTsKKworCWlm IChmLT5xdWV1ZSA9PSBWM0RfQklOKQorCQlyZXR1cm4gInYzZC1iaW4iOworCWVsc2UKKwkJcmV0 dXJuICJ2M2QtcmVuZGVyIjsKK30KKworc3RhdGljIGJvb2wgdjNkX2ZlbmNlX2VuYWJsZV9zaWdu YWxpbmcoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCit7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0 YXRpYyBib29sIHYzZF9mZW5jZV9zaWduYWxlZChzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKK3sK KwlzdHJ1Y3QgdjNkX2ZlbmNlICpmID0gdG9fdjNkX2ZlbmNlKGZlbmNlKTsKKwlzdHJ1Y3QgdjNk X2RldiAqdjNkID0gdG9fdjNkX2RldihmLT5kZXYpOworCisJcmV0dXJuIHYzZC0+cXVldWVbZi0+ cXVldWVdLmZpbmlzaGVkX3NlcW5vID49IGYtPnNlcW5vOworfQorCitjb25zdCBzdHJ1Y3QgZG1h X2ZlbmNlX29wcyB2M2RfZmVuY2Vfb3BzID0geworCS5nZXRfZHJpdmVyX25hbWUgPSB2M2RfZmVu Y2VfZ2V0X2RyaXZlcl9uYW1lLAorCS5nZXRfdGltZWxpbmVfbmFtZSA9IHYzZF9mZW5jZV9nZXRf dGltZWxpbmVfbmFtZSwKKwkuZW5hYmxlX3NpZ25hbGluZyA9IHYzZF9mZW5jZV9lbmFibGVfc2ln bmFsaW5nLAorCS5zaWduYWxlZCA9IHYzZF9mZW5jZV9zaWduYWxlZCwKKwkud2FpdCA9IGRtYV9m ZW5jZV9kZWZhdWx0X3dhaXQsCisJLnJlbGVhc2UgPSBkbWFfZmVuY2VfZnJlZSwKK307CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS92 M2QvdjNkX2dlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZmEz OWExZTM1MjYzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZ2Vt LmMKQEAgLTAsMCArMSw2NjMgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w KworLyogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQnJvYWRjb20gKi8KKworI2luY2x1ZGUgPGRy bS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9zeW5jb2JqLmg+CisjaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8 bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUg PGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQvc2lnbmFsLmg+CisKKyNpbmNsdWRl ICJ1YXBpL2RybS92M2RfZHJtLmgiCisjaW5jbHVkZSAidjNkX2Rydi5oIgorI2luY2x1ZGUgInYz ZF9yZWdzLmgiCisjaW5jbHVkZSAidjNkX3RyYWNlLmgiCisKK3N0YXRpYyB2b2lkCit2M2RfaW5p dF9jb3JlKHN0cnVjdCB2M2RfZGV2ICp2M2QsIGludCBjb3JlKQoreworCS8qIFNldCBPVlJUTVVP VVQsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHRleHR1cmUgc2FtcGxlciB1bmlmb3JtCisJICogY29u ZmlndXJhdGlvbidzIHRtdSBvdXRwdXQgdHlwZSBmaWVsZCBpcyB1c2VkLCBpbnN0ZWFkIG9mCisJ ICogdXNpbmcgdGhlIGhhcmR3YXJlIGRlZmF1bHQgYmVoYXZpb3IgYmFzZWQgb24gdGhlIHRleHR1 cmUKKwkgKiB0eXBlLiAgSWYgeW91IHdhbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3IsIHlvdSBjYW4g c3RpbGwgcHV0CisJICogIjIiIGluIHRoZSBpbmRpcmVjdCB0ZXh0dXJlIHN0YXRlJ3Mgb3V0cHV0 X3R5cGUgZmllbGQuCisJICovCisJVjNEX0NPUkVfV1JJVEUoY29yZSwgVjNEX0NUTF9NSVNDQ0ZH LCBWM0RfTUlTQ0NGR19PVlJUTVVPVVQpOworCisJLyogV2hlbmV2ZXIgd2UgZmx1c2ggdGhlIEwy VCBjYWNoZSwgd2UgYWx3YXlzIHdhbnQgdG8gZmx1c2gKKwkgKiB0aGUgd2hvbGUgdGhpbmcuCisJ ICovCisJVjNEX0NPUkVfV1JJVEUoY29yZSwgVjNEX0NUTF9MMlRGTFNUQSwgMCk7CisJVjNEX0NP UkVfV1JJVEUoY29yZSwgVjNEX0NUTF9MMlRGTEVORCwgfjApOworfQorCisvKiBTZXRzIGludmFy aWFudCBzdGF0ZSBmb3IgdGhlIEhXLiAqLworc3RhdGljIHZvaWQKK3YzZF9pbml0X2h3X3N0YXRl KHN0cnVjdCB2M2RfZGV2ICp2M2QpCit7CisJdjNkX2luaXRfY29yZSh2M2QsIDApOworfQorCitz dGF0aWMgdm9pZAordjNkX2lkbGVfYXhpKHN0cnVjdCB2M2RfZGV2ICp2M2QsIGludCBjb3JlKQor eworCVYzRF9DT1JFX1dSSVRFKGNvcmUsIFYzRF9HTVBfQ0ZHLCBWM0RfR01QX0NGR19TVE9QX1JF USk7CisKKwlpZiAod2FpdF9mb3IoKFYzRF9DT1JFX1JFQUQoY29yZSwgVjNEX0dNUF9TVEFUVVMp ICYKKwkJICAgICAgKFYzRF9HTVBfU1RBVFVTX1JEX0NPVU5UX01BU0sgfAorCQkgICAgICAgVjNE X0dNUF9TVEFUVVNfV1JfQ09VTlRfTUFTSyB8CisJCSAgICAgICBWM0RfR01QX1NUQVRVU19DRkdf QlVTWSkpID09IDAsIDEwMCkpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gd2FpdCBmb3Igc2Fm ZSBHTVAgc2h1dGRvd25cbiIpOworCX0KK30KKworc3RhdGljIHZvaWQKK3YzZF9pZGxlX2djYShz dHJ1Y3QgdjNkX2RldiAqdjNkKQoreworCWlmICh2M2QtPnZlciA+PSA0MSkKKwkJcmV0dXJuOwor CisJVjNEX0dDQV9XUklURShWM0RfR0NBX1NBRkVfU0hVVERPV04sIFYzRF9HQ0FfU0FGRV9TSFVU RE9XTl9FTik7CisKKwlpZiAod2FpdF9mb3IoKFYzRF9HQ0FfUkVBRChWM0RfR0NBX1NBRkVfU0hV VERPV05fQUNLKSAmCisJCSAgICAgIFYzRF9HQ0FfU0FGRV9TSFVURE9XTl9BQ0tfQUNLRUQpID09 CisJCSAgICAgVjNEX0dDQV9TQUZFX1NIVVRET1dOX0FDS19BQ0tFRCwgMTAwKSkgeworCQlEUk1f RVJST1IoIkZhaWxlZCB0byB3YWl0IGZvciBzYWZlIEdDQSBzaHV0ZG93blxuIik7CisJfQorfQor CitzdGF0aWMgdm9pZAordjNkX3Jlc2V0X3YzZChzdHJ1Y3QgdjNkX2RldiAqdjNkKQoreworCWlu dCB2ZXJzaW9uID0gVjNEX0JSSURHRV9SRUFEKFYzRF9UT1BfR1JfQlJJREdFX1JFVklTSU9OKTsK KworCWlmIChWM0RfR0VUX0ZJRUxEKHZlcnNpb24sIFYzRF9UT1BfR1JfQlJJREdFX01BSk9SKSA9 PSAyKSB7CisJCVYzRF9CUklER0VfV1JJVEUoVjNEX1RPUF9HUl9CUklER0VfU1dfSU5JVF8wLAor CQkJCSBWM0RfVE9QX0dSX0JSSURHRV9TV19JTklUXzBfVjNEX0NMS18xMDhfU1dfSU5JVCk7CisJ CVYzRF9CUklER0VfV1JJVEUoVjNEX1RPUF9HUl9CUklER0VfU1dfSU5JVF8wLCAwKTsKKworCQkv KiBHRlhILTEzODM6IFRoZSBTV19JTklUIG1heSBjYXVzZSBhIHN0cmF5IHdyaXRlIHRvIGFkZHJl c3MgMAorCQkgKiBvZiB0aGUgdW5pdCwgc28gcmVzZXQgaXQgdG8gaXRzIHBvd2VyLW9uIHZhbHVl IGhlcmUuCisJCSAqLworCQlWM0RfV1JJVEUoVjNEX0hVQl9BWElDRkcsIFYzRF9IVUJfQVhJQ0ZH X01BWF9MRU5fTUFTSyk7CisJfSBlbHNlIHsKKwkJV0FSTl9PTl9PTkNFKFYzRF9HRVRfRklFTEQo dmVyc2lvbiwKKwkJCQkJICAgVjNEX1RPUF9HUl9CUklER0VfTUFKT1IpICE9IDcpOworCQlWM0Rf QlJJREdFX1dSSVRFKFYzRF9UT1BfR1JfQlJJREdFX1NXX0lOSVRfMSwKKwkJCQkgVjNEX1RPUF9H Ul9CUklER0VfU1dfSU5JVF8xX1YzRF9DTEtfMTA4X1NXX0lOSVQpOworCQlWM0RfQlJJREdFX1dS SVRFKFYzRF9UT1BfR1JfQlJJREdFX1NXX0lOSVRfMSwgMCk7CisJfQorCisJdjNkX2luaXRfaHdf c3RhdGUodjNkKTsKK30KKwordm9pZAordjNkX3Jlc2V0KHN0cnVjdCB2M2RfZGV2ICp2M2QpCit7 CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZ2M2QtPmRybTsKKworCURSTV9FUlJPUigiUmVz ZXR0aW5nIEdQVS5cbiIpOworCXRyYWNlX3YzZF9yZXNldF9iZWdpbihkZXYpOworCisJLyogWFhY OiBvbmx5IG5lZWRlZCBmb3Igc2FmZSBwb3dlcmRvd24sIG5vdCByZXNldC4gKi8KKwlpZiAoZmFs c2UpCisJCXYzZF9pZGxlX2F4aSh2M2QsIDApOworCisJdjNkX2lkbGVfZ2NhKHYzZCk7CisJdjNk X3Jlc2V0X3YzZCh2M2QpOworCisJdjNkX21tdV9zZXRfcGFnZV90YWJsZSh2M2QpOworCXYzZF9p cnFfcmVzZXQodjNkKTsKKworCXRyYWNlX3YzZF9yZXNldF9lbmQoZGV2KTsKK30KKworc3RhdGlj IHZvaWQKK3YzZF9mbHVzaF9sMyhzdHJ1Y3QgdjNkX2RldiAqdjNkKQoreworCWlmICh2M2QtPnZl ciA8IDQxKSB7CisJCXUzMiBnY2FfY3RybCA9IFYzRF9HQ0FfUkVBRChWM0RfR0NBX0NBQ0hFX0NU UkwpOworCisJCVYzRF9HQ0FfV1JJVEUoVjNEX0dDQV9DQUNIRV9DVFJMLAorCQkJICAgICAgZ2Nh X2N0cmwgfCBWM0RfR0NBX0NBQ0hFX0NUUkxfRkxVU0gpOworCisJCWlmICh2M2QtPnZlciA8IDMz KSB7CisJCQlWM0RfR0NBX1dSSVRFKFYzRF9HQ0FfQ0FDSEVfQ1RSTCwKKwkJCQkgICAgICBnY2Ff Y3RybCAmIH5WM0RfR0NBX0NBQ0hFX0NUUkxfRkxVU0gpOworCQl9CisJfQorfQorCisvKiBJbnZh bGlkYXRlcyB0aGUgKHJlYWQtb25seSkgTDIgY2FjaGUuICovCitzdGF0aWMgdm9pZAordjNkX2lu dmFsaWRhdGVfbDIoc3RydWN0IHYzZF9kZXYgKnYzZCwgaW50IGNvcmUpCit7CisJVjNEX0NPUkVf V1JJVEUoY29yZSwgVjNEX0NUTF9MMkNBQ1RMLAorCQkgICAgICAgVjNEX0wyQ0FDVExfTDJDQ0xS IHwKKwkJICAgICAgIFYzRF9MMkNBQ1RMX0wyQ0VOQSk7Cit9CisKK3N0YXRpYyB2b2lkCit2M2Rf aW52YWxpZGF0ZV9sMXRkKHN0cnVjdCB2M2RfZGV2ICp2M2QsIGludCBjb3JlKQoreworCVYzRF9D T1JFX1dSSVRFKGNvcmUsIFYzRF9DVExfTDJUQ0FDVEwsIFYzRF9MMlRDQUNUTF9UTVVXQ0YpOwor CWlmICh3YWl0X2ZvcighKFYzRF9DT1JFX1JFQUQoY29yZSwgVjNEX0NUTF9MMlRDQUNUTCkgJgor CQkgICAgICAgVjNEX0wyVENBQ1RMX0wyVEZMUyksIDEwMCkpIHsKKwkJRFJNX0VSUk9SKCJUaW1l b3V0IHdhaXRpbmcgZm9yIEwxVCB3cml0ZSBjb21iaW5lciBmbHVzaFxuIik7CisJfQorfQorCisv KiBJbnZhbGlkYXRlcyB0ZXh0dXJlIEwyIGNhY2hlbGluZXMgKi8KK3N0YXRpYyB2b2lkCit2M2Rf Zmx1c2hfbDJ0KHN0cnVjdCB2M2RfZGV2ICp2M2QsIGludCBjb3JlKQoreworCXYzZF9pbnZhbGlk YXRlX2wxdGQodjNkLCBjb3JlKTsKKworCVYzRF9DT1JFX1dSSVRFKGNvcmUsIFYzRF9DVExfTDJU Q0FDVEwsCisJCSAgICAgICBWM0RfTDJUQ0FDVExfTDJURkxTIHwKKwkJICAgICAgIFYzRF9TRVRf RklFTEQoVjNEX0wyVENBQ1RMX0ZMTV9GTFVTSCwgVjNEX0wyVENBQ1RMX0ZMTSkpOworCWlmICh3 YWl0X2ZvcighKFYzRF9DT1JFX1JFQUQoY29yZSwgVjNEX0NUTF9MMlRDQUNUTCkgJgorCQkgICAg ICAgVjNEX0wyVENBQ1RMX0wyVEZMUyksIDEwMCkpIHsKKwkJRFJNX0VSUk9SKCJUaW1lb3V0IHdh aXRpbmcgZm9yIEwyVCBmbHVzaFxuIik7CisJfQorfQorCisvKiBJbnZhbGlkYXRlcyB0aGUgc2xp Y2UgY2FjaGVzLiAgVGhlc2UgYXJlIHJlYWQtb25seSBjYWNoZXMuICovCitzdGF0aWMgdm9pZAor djNkX2ludmFsaWRhdGVfc2xpY2VzKHN0cnVjdCB2M2RfZGV2ICp2M2QsIGludCBjb3JlKQorewor CVYzRF9DT1JFX1dSSVRFKGNvcmUsIFYzRF9DVExfU0xDQUNUTCwKKwkJICAgICAgIFYzRF9TRVRf RklFTEQoMHhmLCBWM0RfU0xDQUNUTF9UVkNDUykgfAorCQkgICAgICAgVjNEX1NFVF9GSUVMRCgw eGYsIFYzRF9TTENBQ1RMX1REQ0NTKSB8CisJCSAgICAgICBWM0RfU0VUX0ZJRUxEKDB4ZiwgVjNE X1NMQ0FDVExfVUNDKSB8CisJCSAgICAgICBWM0RfU0VUX0ZJRUxEKDB4ZiwgVjNEX1NMQ0FDVExf SUNDKSk7Cit9CisKKy8qIEludmFsaWRhdGVzIHRleHR1cmUgTDIgY2FjaGVsaW5lcyAqLworc3Rh dGljIHZvaWQKK3YzZF9pbnZhbGlkYXRlX2wydChzdHJ1Y3QgdjNkX2RldiAqdjNkLCBpbnQgY29y ZSkKK3sKKwlWM0RfQ09SRV9XUklURShjb3JlLAorCQkgICAgICAgVjNEX0NUTF9MMlRDQUNUTCwK KwkJICAgICAgIFYzRF9MMlRDQUNUTF9MMlRGTFMgfAorCQkgICAgICAgVjNEX1NFVF9GSUVMRChW M0RfTDJUQ0FDVExfRkxNX0NMRUFSLCBWM0RfTDJUQ0FDVExfRkxNKSk7CisJaWYgKHdhaXRfZm9y KCEoVjNEX0NPUkVfUkVBRChjb3JlLCBWM0RfQ1RMX0wyVENBQ1RMKSAmCisJCSAgICAgICBWM0Rf TDJUQ0FDVExfTDJURkxTKSwgMTAwKSkgeworCQlEUk1fRVJST1IoIlRpbWVvdXQgd2FpdGluZyBm b3IgTDJUIGludmFsaWRhdGVcbiIpOworCX0KK30KKwordm9pZAordjNkX2ludmFsaWRhdGVfY2Fj aGVzKHN0cnVjdCB2M2RfZGV2ICp2M2QpCit7CisJdjNkX2ZsdXNoX2wzKHYzZCk7CisKKwl2M2Rf aW52YWxpZGF0ZV9sMih2M2QsIDApOworCXYzZF9pbnZhbGlkYXRlX3NsaWNlcyh2M2QsIDApOwor CXYzZF9mbHVzaF9sMnQodjNkLCAwKTsKK30KKwordm9pZAordjNkX2ZsdXNoX2NhY2hlcyhzdHJ1 Y3QgdjNkX2RldiAqdjNkKQoreworCXYzZF9pbnZhbGlkYXRlX2wxdGQodjNkLCAwKTsKKwl2M2Rf aW52YWxpZGF0ZV9sMnQodjNkLCAwKTsKK30KKworc3RhdGljIHZvaWQKK3YzZF9hdHRhY2hfb2Jq ZWN0X2ZlbmNlcyhzdHJ1Y3QgdjNkX2V4ZWNfaW5mbyAqZXhlYykKK3sKKwlzdHJ1Y3QgZG1hX2Zl bmNlICpvdXRfZmVuY2UgPSAmZXhlYy0+cmVuZGVyLmJhc2Uuc19mZW5jZS0+ZmluaXNoZWQ7CisJ c3RydWN0IHYzZF9ibyAqYm87CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZXhlYy0+Ym9f Y291bnQ7IGkrKykgeworCQlibyA9IHRvX3YzZF9ibygmZXhlYy0+Ym9baV0tPmJhc2UpOworCisJ CS8qIFhYWDogVXNlIHNoYXJlZCBmZW5jZXMgZm9yIHJlYWQtb25seSBvYmplY3RzLiAqLworCQly ZXNlcnZhdGlvbl9vYmplY3RfYWRkX2V4Y2xfZmVuY2UoYm8tPnJlc3YsIG91dF9mZW5jZSk7CisJ fQorfQorCitzdGF0aWMgdm9pZAordjNkX3VubG9ja19ib19yZXNlcnZhdGlvbnMoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCB2M2RfZXhlY19pbmZvICpleGVjLAorCQkJICAg c3RydWN0IHd3X2FjcXVpcmVfY3R4ICphY3F1aXJlX2N0eCkKK3sKKwlpbnQgaTsKKworCWZvciAo aSA9IDA7IGkgPCBleGVjLT5ib19jb3VudDsgaSsrKSB7CisJCXN0cnVjdCB2M2RfYm8gKmJvID0g dG9fdjNkX2JvKCZleGVjLT5ib1tpXS0+YmFzZSk7CisKKwkJd3dfbXV0ZXhfdW5sb2NrKCZiby0+ cmVzdi0+bG9jayk7CisJfQorCisJd3dfYWNxdWlyZV9maW5pKGFjcXVpcmVfY3R4KTsKK30KKwor LyogVGFrZXMgdGhlIHJlc2VydmF0aW9uIGxvY2sgb24gYWxsIHRoZSBCT3MgYmVpbmcgcmVmZXJl bmNlZCwgc28gdGhhdAorICogYXQgcXVldWUgc3VibWl0IHRpbWUgd2UgY2FuIHVwZGF0ZSB0aGUg cmVzZXJ2YXRpb25zLgorICoKKyAqIFdlIGRvbid0IGxvY2sgdGhlIFJDTCB0aGUgdGlsZSBhbGxv Yy9zdGF0ZSBCT3MsIG9yIG92ZXJmbG93IG1lbW9yeQorICogKGFsbCBvZiB3aGljaCBhcmUgb24g ZXhlYy0+dW5yZWZfbGlzdCkuICBUaGV5J3JlIGVudGlyZWx5IHByaXZhdGUKKyAqIHRvIHYzZCwg c28gd2UgZG9uJ3QgYXR0YWNoIGRtYS1idWYgZmVuY2VzIHRvIHRoZW0uCisgKi8KK3N0YXRpYyBp bnQKK3YzZF9sb2NrX2JvX3Jlc2VydmF0aW9ucyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJ IHN0cnVjdCB2M2RfZXhlY19pbmZvICpleGVjLAorCQkJIHN0cnVjdCB3d19hY3F1aXJlX2N0eCAq YWNxdWlyZV9jdHgpCit7CisJaW50IGNvbnRlbmRlZF9sb2NrID0gLTE7CisJaW50IGksIHJldDsK KwlzdHJ1Y3QgdjNkX2JvICpibzsKKworCXd3X2FjcXVpcmVfaW5pdChhY3F1aXJlX2N0eCwgJnJl c2VydmF0aW9uX3d3X2NsYXNzKTsKKworcmV0cnk6CisJaWYgKGNvbnRlbmRlZF9sb2NrICE9IC0x KSB7CisJCWJvID0gdG9fdjNkX2JvKCZleGVjLT5ib1tjb250ZW5kZWRfbG9ja10tPmJhc2UpOwor CQlyZXQgPSB3d19tdXRleF9sb2NrX3Nsb3dfaW50ZXJydXB0aWJsZSgmYm8tPnJlc3YtPmxvY2ss CisJCQkJCQkgICAgICAgYWNxdWlyZV9jdHgpOworCQlpZiAocmV0KSB7CisJCQl3d19hY3F1aXJl X2RvbmUoYWNxdWlyZV9jdHgpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCWZvciAoaSA9 IDA7IGkgPCBleGVjLT5ib19jb3VudDsgaSsrKSB7CisJCWlmIChpID09IGNvbnRlbmRlZF9sb2Nr KQorCQkJY29udGludWU7CisKKwkJYm8gPSB0b192M2RfYm8oJmV4ZWMtPmJvW2ldLT5iYXNlKTsK KworCQlyZXQgPSB3d19tdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmJvLT5yZXN2LT5sb2NrLCBh Y3F1aXJlX2N0eCk7CisJCWlmIChyZXQpIHsKKwkJCWludCBqOworCisJCQlmb3IgKGogPSAwOyBq IDwgaTsgaisrKSB7CisJCQkJYm8gPSB0b192M2RfYm8oJmV4ZWMtPmJvW2pdLT5iYXNlKTsKKwkJ CQl3d19tdXRleF91bmxvY2soJmJvLT5yZXN2LT5sb2NrKTsKKwkJCX0KKworCQkJaWYgKGNvbnRl bmRlZF9sb2NrICE9IC0xICYmIGNvbnRlbmRlZF9sb2NrID49IGkpIHsKKwkJCQlibyA9IHRvX3Yz ZF9ibygmZXhlYy0+Ym9bY29udGVuZGVkX2xvY2tdLT5iYXNlKTsKKworCQkJCXd3X211dGV4X3Vu bG9jaygmYm8tPnJlc3YtPmxvY2spOworCQkJfQorCisJCQlpZiAocmV0ID09IC1FREVBRExLKSB7 CisJCQkJY29udGVuZGVkX2xvY2sgPSBpOworCQkJCWdvdG8gcmV0cnk7CisJCQl9CisKKwkJCXd3 X2FjcXVpcmVfZG9uZShhY3F1aXJlX2N0eCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJ d3dfYWNxdWlyZV9kb25lKGFjcXVpcmVfY3R4KTsKKworCS8qIFJlc2VydmUgc3BhY2UgZm9yIG91 ciBzaGFyZWQgKHJlYWQtb25seSkgZmVuY2UgcmVmZXJlbmNlcywKKwkgKiBiZWZvcmUgd2UgY29t bWl0IHRoZSBDTCB0byB0aGUgaGFyZHdhcmUuCisJICovCisJZm9yIChpID0gMDsgaSA8IGV4ZWMt PmJvX2NvdW50OyBpKyspIHsKKwkJYm8gPSB0b192M2RfYm8oJmV4ZWMtPmJvW2ldLT5iYXNlKTsK KworCQlyZXQgPSByZXNlcnZhdGlvbl9vYmplY3RfcmVzZXJ2ZV9zaGFyZWQoYm8tPnJlc3YpOwor CQlpZiAocmV0KSB7CisJCQl2M2RfdW5sb2NrX2JvX3Jlc2VydmF0aW9ucyhkZXYsIGV4ZWMsIGFj cXVpcmVfY3R4KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwor LyoqCisgKiB2M2RfY2xfbG9va3VwX2JvcygpIC0gU2V0cyB1cCBleGVjLT5ib1tdIHdpdGggdGhl IEdFTSBvYmplY3RzCisgKiByZWZlcmVuY2VkIGJ5IHRoZSBqb2IuCisgKiBAZGV2OiBEUk0gZGV2 aWNlCisgKiBAZmlsZV9wcml2OiBEUk0gZmlsZSBmb3IgdGhpcyBmZAorICogQGV4ZWM6IFYzRCBq b2IgYmVpbmcgc2V0IHVwCisgKgorICogVGhlIGNvbW1hbmQgdmFsaWRhdG9yIG5lZWRzIHRvIHJl ZmVyZW5jZSBCT3MgYnkgdGhlaXIgaW5kZXggd2l0aGluCisgKiB0aGUgc3VibWl0dGVkIGpvYidz IEJPIGxpc3QuICBUaGlzIGRvZXMgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGpvYidzCisgKiBCTyBs aXN0IGFuZCByZWZlcmVuY2UgY291bnRpbmcgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgam9iLgor ICoKKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgbmVlZCB0byB1bnJlZmVyZW5j ZSB0aGUgQk9zIG9uCisgKiBmYWlsdXJlLCBiZWNhdXNlIHRoYXQgd2lsbCBoYXBwZW4gYXQgdjNk X2V4ZWNfY2xlYW51cCgpIHRpbWUuCisgKi8KK3N0YXRpYyBpbnQKK3YzZF9jbF9sb29rdXBfYm9z KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYs CisJCSAgc3RydWN0IGRybV92M2Rfc3VibWl0X2NsICphcmdzLAorCQkgIHN0cnVjdCB2M2RfZXhl Y19pbmZvICpleGVjKQoreworCXUzMiAqaGFuZGxlczsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsK KworCWV4ZWMtPmJvX2NvdW50ID0gYXJncy0+Ym9faGFuZGxlX2NvdW50OworCisJaWYgKCFleGVj LT5ib19jb3VudCkgeworCQkvKiBTZWUgY29tbWVudCBvbiBib19pbmRleCBmb3Igd2h5IHdlIGhh dmUgdG8gY2hlY2sKKwkJICogdGhpcy4KKwkJICovCisJCURSTV9ERUJVRygiUmVuZGVyaW5nIHJl cXVpcmVzIEJPc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWV4ZWMtPmJvID0ga3Zt YWxsb2NfYXJyYXkoZXhlYy0+Ym9fY291bnQsCisJCQkJICBzaXplb2Yoc3RydWN0IGRybV9nZW1f Y21hX29iamVjdCAqKSwKKwkJCQkgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKKwlpZiAoIWV4 ZWMtPmJvKSB7CisJCURSTV9ERUJVRygiRmFpbGVkIHRvIGFsbG9jYXRlIHZhbGlkYXRlZCBCTyBw b2ludGVyc1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWhhbmRsZXMgPSBrdm1hbGxv Y19hcnJheShleGVjLT5ib19jb3VudCwgc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOworCWlmICgh aGFuZGxlcykgeworCQlyZXQgPSAtRU5PTUVNOworCQlEUk1fREVCVUcoIkZhaWxlZCB0byBhbGxv Y2F0ZSBpbmNvbWluZyBHRU0gaGFuZGxlc1xuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpZiAo Y29weV9mcm9tX3VzZXIoaGFuZGxlcywKKwkJCSAgICh2b2lkIF9fdXNlciAqKSh1aW50cHRyX3Qp YXJncy0+Ym9faGFuZGxlcywKKwkJCSAgIGV4ZWMtPmJvX2NvdW50ICogc2l6ZW9mKHUzMikpKSB7 CisJCXJldCA9IC1FRkFVTFQ7CisJCURSTV9ERUJVRygiRmFpbGVkIHRvIGNvcHkgaW4gR0VNIGhh bmRsZXNcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJc3Bpbl9sb2NrKCZmaWxlX3ByaXYtPnRh YmxlX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBleGVjLT5ib19jb3VudDsgaSsrKSB7CisJCXN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqYm8gPSBpZHJfZmluZCgmZmlsZV9wcml2LT5vYmplY3RfaWRy LAorCQkJCQkJICAgICBoYW5kbGVzW2ldKTsKKwkJaWYgKCFibykgeworCQkJRFJNX0RFQlVHKCJG YWlsZWQgdG8gbG9vayB1cCBHRU0gQk8gJWQ6ICVkXG4iLAorCQkJCSAgaSwgaGFuZGxlc1tpXSk7 CisJCQlyZXQgPSAtRU5PRU5UOworCQkJc3Bpbl91bmxvY2soJmZpbGVfcHJpdi0+dGFibGVfbG9j ayk7CisJCQlnb3RvIGZhaWw7CisJCX0KKwkJZHJtX2dlbV9vYmplY3RfZ2V0KGJvKTsKKwkJZXhl Yy0+Ym9baV0gPSB0b192M2RfYm8oYm8pOworCX0KKwlzcGluX3VubG9jaygmZmlsZV9wcml2LT50 YWJsZV9sb2NrKTsKKworZmFpbDoKKwlrdmZyZWUoaGFuZGxlcyk7CisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIHZvaWQKK3YzZF9leGVjX2NsZWFudXAoc3RydWN0IGtyZWYgKnJlZikKK3sKKwlz dHJ1Y3QgdjNkX2V4ZWNfaW5mbyAqZXhlYyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCB2M2Rf ZXhlY19pbmZvLAorCQkJCQkJICByZWZjb3VudCk7CisJc3RydWN0IHYzZF9kZXYgKnYzZCA9IGV4 ZWMtPnYzZDsKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgdjNkX2JvICpibywgKnNhdmU7CisK KwlkbWFfZmVuY2VfcHV0KGV4ZWMtPmJpbi5pbl9mZW5jZSk7CisJZG1hX2ZlbmNlX3B1dChleGVj LT5yZW5kZXIuaW5fZmVuY2UpOworCisJZG1hX2ZlbmNlX3B1dChleGVjLT5iaW4uZG9uZV9mZW5j ZSk7CisJZG1hX2ZlbmNlX3B1dChleGVjLT5yZW5kZXIuZG9uZV9mZW5jZSk7CisKKwlkbWFfZmVu Y2VfcHV0KGV4ZWMtPmJpbl9kb25lX2ZlbmNlKTsKKworCWZvciAoaSA9IDA7IGkgPCBleGVjLT5i b19jb3VudDsgaSsrKQorCQlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQoJmV4ZWMtPmJvW2ld LT5iYXNlKTsKKwlrdmZyZWUoZXhlYy0+Ym8pOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZl KGJvLCBzYXZlLCAmZXhlYy0+dW5yZWZfbGlzdCwgdW5yZWZfaGVhZCkgeworCQlkcm1fZ2VtX29i amVjdF9wdXRfdW5sb2NrZWQoJmJvLT5iYXNlKTsKKwl9CisKKwlwbV9ydW50aW1lX21hcmtfbGFz dF9idXN5KHYzZC0+ZGV2KTsKKwlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZCh2M2QtPmRldik7 CisKKwlrZnJlZShleGVjKTsKK30KKwordm9pZCB2M2RfZXhlY19wdXQoc3RydWN0IHYzZF9leGVj X2luZm8gKmV4ZWMpCit7CisJa3JlZl9wdXQoJmV4ZWMtPnJlZmNvdW50LCB2M2RfZXhlY19jbGVh bnVwKTsKK30KKworaW50Cit2M2Rfd2FpdF9ib19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCB2b2lkICpkYXRhLAorCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCWludCBy ZXQ7CisJc3RydWN0IGRybV92M2Rfd2FpdF9ibyAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpnZW1fb2JqOworCXN0cnVjdCB2M2RfYm8gKmJvOworCWt0aW1lX3Qgc3RhcnQg PSBrdGltZV9nZXQoKTsKKwl1NjQgZGVsdGFfbnM7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0X2pp ZmZpZXMgPQorCQluc2Vjc190b19qaWZmaWVzX3RpbWVvdXQoYXJncy0+dGltZW91dF9ucyk7CisK KwlpZiAoYXJncy0+cGFkICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJZ2VtX29iaiA9IGRy bV9nZW1fb2JqZWN0X2xvb2t1cChmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYgKCFnZW1f b2JqKSB7CisJCURSTV9ERUJVRygiRmFpbGVkIHRvIGxvb2sgdXAgR0VNIEJPICVkXG4iLCBhcmdz LT5oYW5kbGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJYm8gPSB0b192M2RfYm8oZ2VtX29i aik7CisKKwlyZXQgPSByZXNlcnZhdGlvbl9vYmplY3Rfd2FpdF90aW1lb3V0X3JjdShiby0+cmVz diwKKwkJCQkJCSAgdHJ1ZSwgdHJ1ZSwKKwkJCQkJCSAgdGltZW91dF9qaWZmaWVzKTsKKworCWlm IChyZXQgPT0gMCkKKwkJcmV0ID0gLUVUSU1FOworCWVsc2UgaWYgKHJldCA+IDApCisJCXJldCA9 IDA7CisKKwkvKiBEZWNyZW1lbnQgdGhlIHVzZXIncyB0aW1lb3V0LCBpbiBjYXNlIHdlIGdvdCBp bnRlcnJ1cHRlZAorCSAqIHN1Y2ggdGhhdCB0aGUgaW9jdGwgd2lsbCBiZSByZXN0YXJ0ZWQuCisJ ICovCisJZGVsdGFfbnMgPSBrdGltZV90b19ucyhrdGltZV9zdWIoa3RpbWVfZ2V0KCksIHN0YXJ0 KSk7CisJaWYgKGRlbHRhX25zIDwgYXJncy0+dGltZW91dF9ucykKKwkJYXJncy0+dGltZW91dF9u cyAtPSBkZWx0YV9uczsKKwllbHNlCisJCWFyZ3MtPnRpbWVvdXRfbnMgPSAwOworCisJLyogQXNr ZWQgdG8gd2FpdCBiZXlvbmQgdGhlIGppZmZpZS9zY2hlZHVsZXIgcHJlY2lzaW9uPyAqLworCWlm IChyZXQgPT0gLUVUSU1FICYmIGFyZ3MtPnRpbWVvdXRfbnMpCisJCXJldCA9IC1FQUdBSU47CisK Kwlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQoZ2VtX29iaik7CisKKwlyZXR1cm4gcmV0Owor fQorCisvKioKKyAqIHYzZF9zdWJtaXRfY2xfaW9jdGwoKSAtIFN1Ym1pdHMgYSBqb2IgKGZyYW1l KSB0byB0aGUgVjNELgorICogQGRldjogRFJNIGRldmljZQorICogQGRhdGE6IGlvY3RsIGFyZ3Vt ZW50CisgKiBAZmlsZV9wcml2OiBEUk0gZmlsZSBmb3IgdGhpcyBmZAorICoKKyAqIFRoaXMgaXMg dGhlIG1haW4gZW50cnlwb2ludCBmb3IgdXNlcnNwYWNlIHRvIHN1Ym1pdCBhIDNEIGZyYW1lIHRv CisgKiB0aGUgR1BVLiAgVXNlcnNwYWNlIHByb3ZpZGVzIHRoZSBiaW5uZXIgY29tbWFuZCBsaXN0 IChpZgorICogYXBwbGljYWJsZSksIGFuZCB0aGUga2VybmVsIHNldHMgdXAgdGhlIHJlbmRlciBj b21tYW5kIGxpc3QgdG8gZHJhdworICogdG8gdGhlIGZyYW1lYnVmZmVyIGRlc2NyaWJlZCBpbiB0 aGUgaW9jdGwsIHVzaW5nIHRoZSBjb21tYW5kIGxpc3RzCisgKiB0aGF0IHRoZSAzRCBlbmdpbmUn cyBiaW5uZXIgd2lsbCBwcm9kdWNlLgorICovCitpbnQKK3YzZF9zdWJtaXRfY2xfaW9jdGwoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAq ZmlsZV9wcml2KQoreworCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2RfZGV2KGRldik7CisJ c3RydWN0IHYzZF9maWxlX3ByaXYgKnYzZF9wcml2ID0gZmlsZV9wcml2LT5kcml2ZXJfcHJpdjsK KwlzdHJ1Y3QgZHJtX3YzZF9zdWJtaXRfY2wgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCB2M2RfZXhl Y19pbmZvICpleGVjOworCXN0cnVjdCB3d19hY3F1aXJlX2N0eCBhY3F1aXJlX2N0eDsKKwlzdHJ1 Y3QgZHJtX3N5bmNvYmogKnN5bmNfb3V0OworCWludCByZXQgPSAwOworCisJZXhlYyA9IGtjYWxs b2MoMSwgc2l6ZW9mKCpleGVjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFleGVjKQorCQlyZXR1cm4g LUVOT01FTTsKKworCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmModjNkLT5kZXYpOworCWlmIChy ZXQgPCAwKSB7CisJCWtmcmVlKGV4ZWMpOworCQlyZXR1cm4gcmV0OworCX0KKworCWtyZWZfaW5p dCgmZXhlYy0+cmVmY291bnQpOworCisJcmV0ID0gZHJtX3N5bmNvYmpfZmluZF9mZW5jZShmaWxl X3ByaXYsIGFyZ3MtPmluX3N5bmNfYmNsLAorCQkJCSAgICAgJmV4ZWMtPmJpbi5pbl9mZW5jZSk7 CisJaWYgKHJldCA9PSAtRUlOVkFMKQorCQlnb3RvIGZhaWw7CisKKwlyZXQgPSBkcm1fc3luY29i al9maW5kX2ZlbmNlKGZpbGVfcHJpdiwgYXJncy0+aW5fc3luY19yY2wsCisJCQkJICAgICAmZXhl Yy0+cmVuZGVyLmluX2ZlbmNlKTsKKwlpZiAocmV0ID09IC1FSU5WQUwpCisJCWdvdG8gZmFpbDsK KworCWV4ZWMtPnFtYSA9IGFyZ3MtPnFtYTsKKwlleGVjLT5xbXMgPSBhcmdzLT5xbXM7CisJZXhl Yy0+cXRzID0gYXJncy0+cXRzOworCWV4ZWMtPmJpbi5leGVjID0gZXhlYzsKKwlleGVjLT5iaW4u c3RhcnQgPSBhcmdzLT5iY2xfc3RhcnQ7CisJZXhlYy0+YmluLmVuZCA9IGFyZ3MtPmJjbF9lbmQ7 CisJZXhlYy0+cmVuZGVyLmV4ZWMgPSBleGVjOworCWV4ZWMtPnJlbmRlci5zdGFydCA9IGFyZ3Mt PnJjbF9zdGFydDsKKwlleGVjLT5yZW5kZXIuZW5kID0gYXJncy0+cmNsX2VuZDsKKwlleGVjLT52 M2QgPSB2M2Q7CisJSU5JVF9MSVNUX0hFQUQoJmV4ZWMtPnVucmVmX2xpc3QpOworCisJcmV0ID0g djNkX2NsX2xvb2t1cF9ib3MoZGV2LCBmaWxlX3ByaXYsIGFyZ3MsIGV4ZWMpOworCWlmIChyZXQp CisJCWdvdG8gZmFpbDsKKworCXJldCA9IHYzZF9sb2NrX2JvX3Jlc2VydmF0aW9ucyhkZXYsIGV4 ZWMsICZhY3F1aXJlX2N0eCk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCisJaWYgKGV4ZWMt PmJpbi5zdGFydCAhPSBleGVjLT5iaW4uZW5kKSB7CisJCXJldCA9IGRybV9zY2hlZF9qb2JfaW5p dCgmZXhlYy0+YmluLmJhc2UsCisJCQkJCSAmdjNkLT5xdWV1ZVtWM0RfQklOXS5zY2hlZCwKKwkJ CQkJICZ2M2RfcHJpdi0+c2NoZWRfZW50aXR5W1YzRF9CSU5dLAorCQkJCQkgdjNkX3ByaXYpOwor CQlpZiAocmV0KQorCQkJZ290byBmYWlsX3VucmVzZXJ2ZTsKKworCQlleGVjLT5iaW5fZG9uZV9m ZW5jZSA9CisJCQlkbWFfZmVuY2VfZ2V0KCZleGVjLT5iaW4uYmFzZS5zX2ZlbmNlLT5maW5pc2hl ZCk7CisKKwkJa3JlZl9nZXQoJmV4ZWMtPnJlZmNvdW50KTsgLyogcHV0IGJ5IHNjaGVkdWxlciBq b2IgY29tcGxldGlvbiAqLworCQlkcm1fc2NoZWRfZW50aXR5X3B1c2hfam9iKCZleGVjLT5iaW4u YmFzZSwKKwkJCQkJICAmdjNkX3ByaXYtPnNjaGVkX2VudGl0eVtWM0RfQklOXSk7CisJfQorCisJ cmV0ID0gZHJtX3NjaGVkX2pvYl9pbml0KCZleGVjLT5yZW5kZXIuYmFzZSwKKwkJCQkgJnYzZC0+ cXVldWVbVjNEX1JFTkRFUl0uc2NoZWQsCisJCQkJICZ2M2RfcHJpdi0+c2NoZWRfZW50aXR5W1Yz RF9SRU5ERVJdLAorCQkJCSB2M2RfcHJpdik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsX3VucmVz ZXJ2ZTsKKworCWtyZWZfZ2V0KCZleGVjLT5yZWZjb3VudCk7IC8qIHB1dCBieSBzY2hlZHVsZXIg am9iIGNvbXBsZXRpb24gKi8KKwlkcm1fc2NoZWRfZW50aXR5X3B1c2hfam9iKCZleGVjLT5yZW5k ZXIuYmFzZSwKKwkJCQkgICZ2M2RfcHJpdi0+c2NoZWRfZW50aXR5W1YzRF9SRU5ERVJdKTsKKwor CXYzZF9hdHRhY2hfb2JqZWN0X2ZlbmNlcyhleGVjKTsKKworCXYzZF91bmxvY2tfYm9fcmVzZXJ2 YXRpb25zKGRldiwgZXhlYywgJmFjcXVpcmVfY3R4KTsKKworCS8qIFVwZGF0ZSB0aGUgcmV0dXJu IHN5bmMgb2JqZWN0IGZvciB0aGUgKi8KKwlzeW5jX291dCA9IGRybV9zeW5jb2JqX2ZpbmQoZmls ZV9wcml2LCBhcmdzLT5vdXRfc3luYyk7CisJaWYgKHN5bmNfb3V0KSB7CisJCWRybV9zeW5jb2Jq X3JlcGxhY2VfZmVuY2Uoc3luY19vdXQsCisJCQkJCSAgJmV4ZWMtPnJlbmRlci5iYXNlLnNfZmVu Y2UtPmZpbmlzaGVkKTsKKwkJZHJtX3N5bmNvYmpfcHV0KHN5bmNfb3V0KTsKKwl9CisKKwl2M2Rf ZXhlY19wdXQoZXhlYyk7CisKKwlyZXR1cm4gMDsKKworZmFpbF91bnJlc2VydmU6CisJdjNkX3Vu bG9ja19ib19yZXNlcnZhdGlvbnMoZGV2LCBleGVjLCAmYWNxdWlyZV9jdHgpOworZmFpbDoKKwl2 M2RfZXhlY19wdXQoZXhlYyk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQKK3YzZF9nZW1faW5p dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192 M2RfZGV2KGRldik7CisJdTMyIHB0X3NpemUgPSA0MDk2ICogMTAyNDsKKwlpbnQgcmV0LCBpOwor CisJZm9yIChpID0gMDsgaSA8IFYzRF9NQVhfUVVFVUVTOyBpKyspCisJCXYzZC0+cXVldWVbaV0u ZmVuY2VfY29udGV4dCA9IGRtYV9mZW5jZV9jb250ZXh0X2FsbG9jKDEpOworCisJc3Bpbl9sb2Nr X2luaXQoJnYzZC0+bW1fbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnYzZC0+am9iX2xvY2spOwor CW11dGV4X2luaXQoJnYzZC0+Ym9fbG9jayk7CisJbXV0ZXhfaW5pdCgmdjNkLT5yZXNldF9sb2Nr KTsKKworCS8qIE5vdGU6IFdlIGRvbid0IGFsbG9jYXRlIGFkZHJlc3MgMC4gIFZhcmlvdXMgYml0 cyBvZiBIVworCSAqIHRyZWF0IDAgYXMgc3BlY2lhbCwgc3VjaCBhcyB0aGUgb2NjbHVzaW9uIHF1 ZXJ5IGNvdW50ZXJzCisJICogd2hlcmUgMCBtZWFucyAiZGlzYWJsZWQiLgorCSAqLworCWRybV9t bV9pbml0KCZ2M2QtPm1tLCAxLCBwdF9zaXplIC8gc2l6ZW9mKHUzMikgLSAxKTsKKworCXYzZC0+ cHQgPSBkbWFfYWxsb2Nfd2ModjNkLT5kZXYsIHB0X3NpemUsCisJCQkgICAgICAgJnYzZC0+cHRf cGFkZHIsCisJCQkgICAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX1pFUk8p OworCWlmICghdjNkLT5wdCkgeworCQlkcm1fbW1fdGFrZWRvd24oJnYzZC0+bW0pOworCQlkZXZf ZXJyKHYzZC0+ZGV2LAorCQkJIkZhaWxlZCB0byBhbGxvY2F0ZSBwYWdlIHRhYmxlcy4gIgorCQkJ IlBsZWFzZSBlbnN1cmUgeW91IGhhdmUgQ01BIGVuYWJsZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9N RU07CisJfQorCisJdjNkX2luaXRfaHdfc3RhdGUodjNkKTsKKwl2M2RfbW11X3NldF9wYWdlX3Rh YmxlKHYzZCk7CisKKwlyZXQgPSB2M2Rfc2NoZWRfaW5pdCh2M2QpOworCWlmIChyZXQpIHsKKwkJ ZHJtX21tX3Rha2Vkb3duKCZ2M2QtPm1tKTsKKwkJZG1hX2ZyZWVfY29oZXJlbnQodjNkLT5kZXYs IDQwOTYgKiAxMDI0LCAodm9pZCAqKXYzZC0+cHQsCisJCQkJICB2M2QtPnB0X3BhZGRyKTsKKwl9 CisKKwlyZXR1cm4gMDsKK30KKwordm9pZAordjNkX2dlbV9kZXN0cm95KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCit7CisJc3RydWN0IHYzZF9kZXYgKnYzZCA9IHRvX3YzZF9kZXYoZGV2KTsKKwll bnVtIHYzZF9xdWV1ZSBxOworCisJdjNkX3NjaGVkX2ZpbmkodjNkKTsKKworCS8qIFdhaXRpbmcg Zm9yIGV4ZWMgdG8gZmluaXNoIHdvdWxkIG5lZWQgdG8gYmUgZG9uZSBiZWZvcmUKKwkgKiB1bnJl Z2lzdGVyaW5nIFYzRC4KKwkgKi8KKwlmb3IgKHEgPSAwOyBxIDwgVjNEX01BWF9RVUVVRVM7IHEr KykgeworCQlXQVJOX09OKHYzZC0+cXVldWVbcV0uZW1pdF9zZXFubyAhPQorCQkJdjNkLT5xdWV1 ZVtxXS5maW5pc2hlZF9zZXFubyk7CisJfQorCisJZHJtX21tX3Rha2Vkb3duKCZ2M2QtPm1tKTsK KworCWRtYV9mcmVlX2NvaGVyZW50KHYzZC0+ZGV2LCA0MDk2ICogMTAyNCwgKHZvaWQgKil2M2Qt PnB0LCB2M2QtPnB0X3BhZGRyKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92M2Qv djNkX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfaXJxLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43N2UxZmEwNDZjMTAKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9pcnEuYwpAQCAtMCwwICsxLDIwNiBAQAorLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCisvKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAx OCBCcm9hZGNvbSAqLworCisvKioKKyAqIERPQzogSW50ZXJydXB0IG1hbmFnZW1lbnQgZm9yIHRo ZSBWM0QgZW5naW5lCisgKgorICogV2hlbiB3ZSB0YWtlIGEgYmlubmluZyBvciByZW5kZXJpbmcg Zmx1c2ggZG9uZSBpbnRlcnJ1cHQsIHdlIG5lZWQKKyAqIHRvIHNpZ25hbCB0aGUgZmVuY2UgZm9y IHRoYXQgam9iIHNvIHRoYXQgdGhlIHNjaGVkdWxlciBjYW4gcXVldWUgdXAKKyAqIHRoZSBuZXh0 IG9uZSBhbmQgdW5ibG9jayBhbnkgd2FpdGVycy4KKyAqCisgKiBXaGVuIHdlIHRha2UgdGhlIGJp bm5lciBvdXQgb2YgbWVtb3J5IGludGVycnVwdCwgd2UgbmVlZCB0bworICogYWxsb2NhdGUgc29t ZSBuZXcgbWVtb3J5IGFuZCBwYXNzIGl0IHRvIHRoZSBiaW5uZXIgc28gdGhhdCB0aGUKKyAqIGN1 cnJlbnQgam9iIGNhbiBtYWtlIHByb2dyZXNzLgorICovCisKKyNpbmNsdWRlICJ2M2RfZHJ2Lmgi CisjaW5jbHVkZSAidjNkX3JlZ3MuaCIKKworI2RlZmluZSBWM0RfQ09SRV9JUlFTICgodTMyKShW M0RfSU5UX09VVE9NRU0gfAlcCisJCQkgICAgIFYzRF9JTlRfRkxET05FIHwJXAorCQkJICAgICBW M0RfSU5UX0ZSRE9ORSB8CVwKKwkJCSAgICAgVjNEX0lOVF9HTVBWKSkKKworI2RlZmluZSBWM0Rf SFVCX0lSUVMgKCh1MzIpKFYzRF9IVUJfSU5UX01NVV9XUlYgfAlcCisJCQkgICAgVjNEX0hVQl9J TlRfTU1VX1BUSSB8CVwKKwkJCSAgICBWM0RfSFVCX0lOVF9NTVVfQ0FQKSkKKworc3RhdGljIHZv aWQKK3YzZF9vdmVyZmxvd19tZW1fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJ c3RydWN0IHYzZF9kZXYgKnYzZCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdjNkX2Rl diwgb3ZlcmZsb3dfbWVtX3dvcmspOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmdjNkLT5k cm07CisJc3RydWN0IHYzZF9ibyAqYm8gPSB2M2RfYm9fY3JlYXRlKGRldiwgTlVMTCAvKiBYWFg6 IEdNUCAqLywgMjU2ICogMTAyNCk7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCWlmIChJ U19FUlIoYm8pKSB7CisJCURSTV9FUlJPUigiQ291bGRuJ3QgYWxsb2NhdGUgYmlubmVyIG92ZXJm bG93IG1lbVxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBXZSBsb3N0IGEgcmFjZSwgYW5kIG91 ciB3b3JrIHRhc2sgY2FtZSBpbiBhZnRlciB0aGUgYmluIGpvYgorCSAqIGNvbXBsZXRlZCBhbmQg ZXhpdGVkLiAgVGhpcyBjYW4gaGFwcGVuIGJlY2F1c2UgdGhlIEhXCisJICogc2lnbmFscyBPT00g YmVmb3JlIGl0J3MgZnVsbHkgT09NLCBzbyB0aGUgYmlubmVyIG1pZ2h0IGp1c3QKKwkgKiBiYXJl bHkgY29tcGxldGUuCisJICoKKwkgKiBJZiB3ZSBsb3NlIHRoZSByYWNlIGFuZCBvdXIgd29yayB0 YXNrIGNvbWVzIGluIGFmdGVyIGEgbmV3CisJICogYmluIGpvYiBnb3Qgc2NoZWR1bGVkLCB0aGF0 J3MgZmluZS4gIFdlJ2xsIGp1c3QgZ2l2ZSB0aGVtCisJICogc29tZSBiaW5uZXIgcG9vbCBhbnl3 YXkuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnYzZC0+am9iX2xvY2ssIGlycWZsYWdzKTsK KwlpZiAoIXYzZC0+YmluX2pvYikgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2M2QtPmpv Yl9sb2NrLCBpcnFmbGFncyk7CisJCWdvdG8gb3V0OworCX0KKworCWRybV9nZW1fb2JqZWN0X2dl dCgmYm8tPmJhc2UpOworCWxpc3RfYWRkX3RhaWwoJmJvLT51bnJlZl9oZWFkLCAmdjNkLT5iaW5f am9iLT51bnJlZl9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2M2QtPmpvYl9sb2Nr LCBpcnFmbGFncyk7CisKKwlWM0RfQ09SRV9XUklURSgwLCBWM0RfUFRCX0JQT0EsIGJvLT5ub2Rl LnN0YXJ0IDw8IFBBR0VfU0hJRlQpOworCVYzRF9DT1JFX1dSSVRFKDAsIFYzRF9QVEJfQlBPUywg Ym8tPmJhc2Uuc2l6ZSk7CisKK291dDoKKwlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQoJmJv LT5iYXNlKTsKK30KKworc3RhdGljIGlycXJldHVybl90Cit2M2RfaXJxKGludCBpcnEsIHZvaWQg KmFyZykKK3sKKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gYXJnOworCXUzMiBpbnRzdHM7CisJaXJx cmV0dXJuX3Qgc3RhdHVzID0gSVJRX05PTkU7CisKKwlpbnRzdHMgPSBWM0RfQ09SRV9SRUFEKDAs IFYzRF9DVExfSU5UX1NUUyk7CisKKwkvKiBBY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0cyB3ZSdy ZSBoYW5kbGluZyBoZXJlLiAqLworCVYzRF9DT1JFX1dSSVRFKDAsIFYzRF9DVExfSU5UX0NMUiwg aW50c3RzKTsKKworCWlmIChpbnRzdHMgJiBWM0RfSU5UX09VVE9NRU0pIHsKKwkJLyogTm90ZSB0 aGF0IHRoZSBPT00gc3RhdHVzIGlzIGVkZ2Ugc2lnbmFsZWQsIHNvIHRoZQorCQkgKiBpbnRlcnJ1 cHQgd29uJ3QgaGFwcGVuIGFnYWluIHVudGlsIHRoZSB3ZSBhY3R1YWxseQorCQkgKiBhZGQgbW9y ZSBtZW1vcnkuCisJCSAqLworCQlzY2hlZHVsZV93b3JrKCZ2M2QtPm92ZXJmbG93X21lbV93b3Jr KTsKKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJfQorCisJaWYgKGludHN0cyAmIFYzRF9JTlRf RkxET05FKSB7CisJCXYzZC0+cXVldWVbVjNEX0JJTl0uZmluaXNoZWRfc2Vxbm8rKzsKKwkJZG1h X2ZlbmNlX3NpZ25hbCh2M2QtPmJpbl9qb2ItPmJpbi5kb25lX2ZlbmNlKTsKKwkJc3RhdHVzID0g SVJRX0hBTkRMRUQ7CisJfQorCisJaWYgKGludHN0cyAmIFYzRF9JTlRfRlJET05FKSB7CisJCXYz ZC0+cXVldWVbVjNEX1JFTkRFUl0uZmluaXNoZWRfc2Vxbm8rKzsKKwkJZG1hX2ZlbmNlX3NpZ25h bCh2M2QtPnJlbmRlcl9qb2ItPnJlbmRlci5kb25lX2ZlbmNlKTsKKworCQlzdGF0dXMgPSBJUlFf SEFORExFRDsKKwl9CisKKwkvKiBXZSBzaG91bGRuJ3QgYmUgdHJpZ2dlcmluZyB0aGVzZSBpZiB3 ZSBoYXZlIEdNUCBpbgorCSAqIGFsd2F5cy1hbGxvd2VkIG1vZGUuCisJICovCisJaWYgKGludHN0 cyAmIFYzRF9JTlRfR01QVikKKwkJZGV2X2Vycih2M2QtPmRldiwgIkdNUCB2aW9sYXRpb25cbiIp OworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGlycXJldHVybl90Cit2M2RfaHViX2ly cShpbnQgaXJxLCB2b2lkICphcmcpCit7CisJc3RydWN0IHYzZF9kZXYgKnYzZCA9IGFyZzsKKwl1 MzIgaW50c3RzOworCWlycXJldHVybl90IHN0YXR1cyA9IElSUV9OT05FOworCisJaW50c3RzID0g VjNEX1JFQUQoVjNEX0hVQl9JTlRfU1RTKTsKKworCS8qIEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1 cHRzIHdlJ3JlIGhhbmRsaW5nIGhlcmUuICovCisJVjNEX1dSSVRFKFYzRF9IVUJfSU5UX0NMUiwg aW50c3RzKTsKKworCWlmIChpbnRzdHMgJiAoVjNEX0hVQl9JTlRfTU1VX1dSViB8CisJCSAgICAg IFYzRF9IVUJfSU5UX01NVV9QVEkgfAorCQkgICAgICBWM0RfSFVCX0lOVF9NTVVfQ0FQKSkgewor CQl1MzIgYXhpX2lkID0gVjNEX1JFQUQoVjNEX01NVV9WSU9fSUQpOworCQl1NjQgdmlvX2FkZHIg PSAodTY0KVYzRF9SRUFEKFYzRF9NTVVfVklPX0FERFIpIDw8IDg7CisKKwkJZGV2X2Vycih2M2Qt PmRldiwgIk1NVSBlcnJvciBmcm9tIGNsaWVudCAlZCBhdCAweCUwOGxseCVzJXMlc1xuIiwKKwkJ CWF4aV9pZCwgKGxvbmcgbG9uZyl2aW9fYWRkciwKKwkJCSgoaW50c3RzICYgVjNEX0hVQl9JTlRf TU1VX1dSVikgPworCQkJICIsIHdyaXRlIHZpb2xhdGlvbiIgOiAiIiksCisJCQkoKGludHN0cyAm IFYzRF9IVUJfSU5UX01NVV9QVEkpID8KKwkJCSAiLCBwdGUgaW52YWxpZCIgOiAiIiksCisJCQko KGludHN0cyAmIFYzRF9IVUJfSU5UX01NVV9DQVApID8KKwkJCSAiLCBjYXAgZXhjZWVkZWQiIDog IiIpKTsKKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30K Kwordm9pZAordjNkX2lycV9pbml0KHN0cnVjdCB2M2RfZGV2ICp2M2QpCit7CisJaW50IHJldCwg Y29yZTsKKworCUlOSVRfV09SSygmdjNkLT5vdmVyZmxvd19tZW1fd29yaywgdjNkX292ZXJmbG93 X21lbV93b3JrKTsKKworCS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMgc29tZW9uZSBt aWdodCBoYXZlIGxlZnQgYXJvdW5kCisJICogZm9yIHVzLgorCSAqLworCWZvciAoY29yZSA9IDA7 IGNvcmUgPCB2M2QtPmNvcmVzOyBjb3JlKyspCisJCVYzRF9DT1JFX1dSSVRFKGNvcmUsIFYzRF9D VExfSU5UX0NMUiwgVjNEX0NPUkVfSVJRUyk7CisJVjNEX1dSSVRFKFYzRF9IVUJfSU5UX0NMUiwg VjNEX0hVQl9JUlFTKTsKKworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEodjNkLT5kZXYsIHBsYXRm b3JtX2dldF9pcnEodjNkLT5wZGV2LCAwKSwKKwkJCSAgICAgICB2M2RfaHViX2lycSwgSVJRRl9T SEFSRUQsCisJCQkgICAgICAgInYzZF9odWIiLCB2M2QpOworCXJldCA9IGRldm1fcmVxdWVzdF9p cnEodjNkLT5kZXYsIHBsYXRmb3JtX2dldF9pcnEodjNkLT5wZGV2LCAxKSwKKwkJCSAgICAgICB2 M2RfaXJxLCBJUlFGX1NIQVJFRCwKKwkJCSAgICAgICAidjNkX2NvcmUwIiwgdjNkKTsKKwlpZiAo cmV0KQorCQlkZXZfZXJyKHYzZC0+ZGV2LCAiSVJRIHNldHVwIGZhaWxlZDogJWRcbiIsIHJldCk7 CisKKwl2M2RfaXJxX2VuYWJsZSh2M2QpOworfQorCit2b2lkCit2M2RfaXJxX2VuYWJsZShzdHJ1 Y3QgdjNkX2RldiAqdjNkKQoreworCWludCBjb3JlOworCisJLyogRW5hYmxlIG91ciBzZXQgb2Yg aW50ZXJydXB0cywgbWFza2luZyBvdXQgYW55IG90aGVycy4gKi8KKwlmb3IgKGNvcmUgPSAwOyBj b3JlIDwgdjNkLT5jb3JlczsgY29yZSsrKSB7CisJCVYzRF9DT1JFX1dSSVRFKGNvcmUsIFYzRF9D VExfSU5UX01TS19TRVQsIH5WM0RfQ09SRV9JUlFTKTsKKwkJVjNEX0NPUkVfV1JJVEUoY29yZSwg VjNEX0NUTF9JTlRfTVNLX0NMUiwgVjNEX0NPUkVfSVJRUyk7CisJfQorCisJVjNEX1dSSVRFKFYz RF9IVUJfSU5UX01TS19TRVQsIH5WM0RfSFVCX0lSUVMpOworCVYzRF9XUklURShWM0RfSFVCX0lO VF9NU0tfQ0xSLCBWM0RfSFVCX0lSUVMpOworfQorCit2b2lkCit2M2RfaXJxX2Rpc2FibGUoc3Ry dWN0IHYzZF9kZXYgKnYzZCkKK3sKKwlpbnQgY29yZTsKKworCS8qIERpc2FibGUgYWxsIGludGVy cnVwdHMuICovCisJZm9yIChjb3JlID0gMDsgY29yZSA8IHYzZC0+Y29yZXM7IGNvcmUrKykKKwkJ VjNEX0NPUkVfV1JJVEUoY29yZSwgVjNEX0NUTF9JTlRfTVNLX1NFVCwgfjApOworCVYzRF9XUklU RShWM0RfSFVCX0lOVF9NU0tfU0VULCB+MCk7CisKKwkvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRl cnJ1cHRzIHdlIG1pZ2h0IGhhdmUgbGVmdC4gKi8KKwlmb3IgKGNvcmUgPSAwOyBjb3JlIDwgdjNk LT5jb3JlczsgY29yZSsrKQorCQlWM0RfQ09SRV9XUklURShjb3JlLCBWM0RfQ1RMX0lOVF9DTFIs IFYzRF9DT1JFX0lSUVMpOworCVYzRF9XUklURShWM0RfSFVCX0lOVF9DTFIsIFYzRF9IVUJfSVJR Uyk7CisKKwljYW5jZWxfd29ya19zeW5jKCZ2M2QtPm92ZXJmbG93X21lbV93b3JrKTsKK30KKwor LyoqIFJlaW5pdGlhbGl6ZXMgaW50ZXJydXB0IHJlZ2lzdGVycyB3aGVuIGEgR1BVIHJlc2V0IGlz IHBlcmZvcm1lZC4gKi8KK3ZvaWQgdjNkX2lycV9yZXNldChzdHJ1Y3QgdjNkX2RldiAqdjNkKQor eworCXYzZF9pcnFfZW5hYmxlKHYzZCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v djNkL3YzZF9tbXUuYyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX21tdS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjAwZjk3YzMxYjcwCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfbW11LmMKQEAgLTAsMCArMSwxMjIgQEAKKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKworLyogQ29weXJpZ2h0IChDKSAyMDE3 LTIwMTggQnJvYWRjb20gKi8KKworLyoqCisgKiBET0M6IEJyb2FkY29tIFYzRCBNTVUKKyAqCisg KiBUaGUgVjNEIDMueCBoYXJkd2FyZSAoY29tcGFyZWQgdG8gVkM0KSBub3cgaW5jbHVkZXMgYW4g TU1VLiAgSXQgaGFzCisgKiBhIHNpbmdsZSBsZXZlbCBvZiBwYWdlIHRhYmxlcyBmb3IgdGhlIFYz RCdzIDRHQiBhZGRyZXNzIHNwYWNlIHRvCisgKiBtYXAgdG8gQVhJIGJ1cyBhZGRyZXNzZXMsIHRo dXMgaXQgY291bGQgbmVlZCB1cCB0byA0TUIgb2YKKyAqIHBoeXNpY2FsbHkgY29udGlndW91cyBt ZW1vcnkgdG8gc3RvcmUgdGhlIFBURXMuCisgKgorICogQmVjYXVzZSB0aGUgNE1CIG9mIGNvbnRp Z3VvdXMgbWVtb3J5IGZvciBwYWdlIHRhYmxlcyBpcyBwcmVjaW91cywKKyAqIGFuZCBzd2l0Y2hp bmcgYmV0d2VlbiB0aGVtIGlzIGV4cGVuc2l2ZSwgd2UgbG9hZCBhbGwgQk9zIGludG8gdGhlCisg KiBzYW1lIDRHQiBhZGRyZXNzIHNwYWNlLgorICoKKyAqIFRvIHByb3RlY3QgY2xpZW50cyBmcm9t IGVhY2ggb3RoZXIsIHdlIHNob3VsZCB1c2UgdGhlIEdNUCB0bworICogcXVpY2tseSBtYXNrIG91 dCAoYXQgMTI4a2IgZ3JhbnVsYXJpdHkpIHdoYXQgcGFnZXMgYXJlIGF2YWlsYWJsZSB0bworICog ZWFjaCBjbGllbnQuICBUaGlzIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisgKi8KKworI2luY2x1 ZGUgInYzZF9kcnYuaCIKKyNpbmNsdWRlICJ2M2RfcmVncy5oIgorCisjZGVmaW5lIFYzRF9NTVVf UEFHRV9TSElGVCAxMgorCisvKiBOb3RlOiBBbGwgUFRFcyBmb3IgdGhlIDFNQiBzdXBlcnBhZ2Ug bXVzdCBiZSBmaWxsZWQgd2l0aCB0aGUKKyAqIHN1cGVycGFnZSBiaXQgc2V0LgorICovCisjZGVm aW5lIFYzRF9QVEVfU1VQRVJQQUdFIEJJVCgzMSkKKyNkZWZpbmUgVjNEX1BURV9XUklURUFCTEUg QklUKDI5KQorI2RlZmluZSBWM0RfUFRFX1ZBTElEIEJJVCgyOCkKKworc3RhdGljIGludCB2M2Rf bW11X2ZsdXNoX2FsbChzdHJ1Y3QgdjNkX2RldiAqdjNkKQoreworCWludCByZXQ7CisKKwkvKiBN YWtlIHN1cmUgdGhhdCBhbm90aGVyIGZsdXNoIGlzbid0IGFscmVhZHkgcnVubmluZyB3aGVuIHdl CisJICogc3RhcnQgdGhpcyBvbmUuCisJICovCisJcmV0ID0gd2FpdF9mb3IoIShWM0RfUkVBRChW M0RfTU1VX0NUTCkgJgorCQkJIFYzRF9NTVVfQ1RMX1RMQl9DTEVBUklORyksIDEwMCk7CisJaWYg KHJldCkKKwkJZGV2X2Vycih2M2QtPmRldiwgIlRMQiBjbGVhciB3YWl0IGlkbGUgcHJlLXdhaXQg ZmFpbGVkXG4iKTsKKworCVYzRF9XUklURShWM0RfTU1VX0NUTCwgVjNEX1JFQUQoVjNEX01NVV9D VEwpIHwKKwkJICBWM0RfTU1VX0NUTF9UTEJfQ0xFQVIpOworCisJVjNEX1dSSVRFKFYzRF9NTVVD X0NPTlRST0wsCisJCSAgVjNEX01NVUNfQ09OVFJPTF9GTFVTSCB8CisJCSAgVjNEX01NVUNfQ09O VFJPTF9FTkFCTEUpOworCisJcmV0ID0gd2FpdF9mb3IoIShWM0RfUkVBRChWM0RfTU1VX0NUTCkg JgorCQkJIFYzRF9NTVVfQ1RMX1RMQl9DTEVBUklORyksIDEwMCk7CisJaWYgKHJldCkgeworCQlk ZXZfZXJyKHYzZC0+ZGV2LCAiVExCIGNsZWFyIHdhaXQgaWRsZSBmYWlsZWRcbiIpOworCQlyZXR1 cm4gcmV0OworCX0KKworCXJldCA9IHdhaXRfZm9yKCEoVjNEX1JFQUQoVjNEX01NVUNfQ09OVFJP TCkgJgorCQkJIFYzRF9NTVVDX0NPTlRST0xfRkxVU0hJTkcpLCAxMDApOworCWlmIChyZXQpCisJ CWRldl9lcnIodjNkLT5kZXYsICJNTVVDIGZsdXNoIHdhaXQgaWRsZSBmYWlsZWRcbiIpOworCisJ cmV0dXJuIHJldDsKK30KKworaW50IHYzZF9tbXVfc2V0X3BhZ2VfdGFibGUoc3RydWN0IHYzZF9k ZXYgKnYzZCkKK3sKKwlWM0RfV1JJVEUoVjNEX01NVV9QVF9QQV9CQVNFLCB2M2QtPnB0X3BhZGRy ID4+IFYzRF9NTVVfUEFHRV9TSElGVCk7CisJVjNEX1dSSVRFKFYzRF9NTVVfQ1RMLAorCQkgIFYz RF9NTVVfQ1RMX0VOQUJMRSB8CisJCSAgVjNEX01NVV9DVExfUFRfSU5WQUxJRCB8CisJCSAgVjNE X01NVV9DVExfUFRfSU5WQUxJRF9BQk9SVCB8CisJCSAgVjNEX01NVV9DVExfV1JJVEVfVklPTEFU SU9OX0FCT1JUIHwKKwkJICBWM0RfTU1VX0NUTF9DQVBfRVhDRUVERURfQUJPUlQpOworCVYzRF9X UklURShWM0RfTU1VX0lMTEVHQUxfQUREUiwKKwkJICAodjNkLT5tbXVfc2NyYXRjaF9wYWRkciA+ PiBWM0RfTU1VX1BBR0VfU0hJRlQpIHwKKwkJICBWM0RfTU1VX0lMTEVHQUxfQUREUl9FTkFCTEUp OworCVYzRF9XUklURShWM0RfTU1VQ19DT05UUk9MLCBWM0RfTU1VQ19DT05UUk9MX0VOQUJMRSk7 CisKKwlyZXR1cm4gdjNkX21tdV9mbHVzaF9hbGwodjNkKTsKK30KKwordm9pZCB2M2RfbW11X2lu c2VydF9wdGVzKHN0cnVjdCB2M2RfYm8gKmJvKQoreworCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0 b192M2RfZGV2KGJvLT5iYXNlLmRldik7CisJdTMyIHBhZ2UgPSBiby0+bm9kZS5zdGFydDsKKwl1 MzIgcGFnZV9wcm90ID0gVjNEX1BURV9XUklURUFCTEUgfCBWM0RfUFRFX1ZBTElEOworCXVuc2ln bmVkIGludCBjb3VudDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbDsKKworCWZvcl9lYWNoX3Nn KGJvLT5zZ3QtPnNnbCwgc2dsLCBiby0+c2d0LT5uZW50cywgY291bnQpIHsKKwkJdTMyIHBhZ2Vf YWRkcmVzcyA9IHNnX2RtYV9hZGRyZXNzKHNnbCkgPj4gVjNEX01NVV9QQUdFX1NISUZUOworCQl1 MzIgcHRlID0gcGFnZV9wcm90IHwgcGFnZV9hZGRyZXNzOworCQl1MzIgaTsKKworCQlCVUdfT04o cGFnZV9hZGRyZXNzICsgKHNnX2RtYV9sZW4oc2dsKSA+PiBWM0RfTU1VX1BBR0VfU0hJRlQpID49 CisJCSAgICAgICBCSVQoMjQpKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2dfZG1hX2xlbihzZ2wp ID4+IFYzRF9NTVVfUEFHRV9TSElGVDsgaSsrKQorCQkJdjNkLT5wdFtwYWdlKytdID0gcHRlICsg aTsKKwl9CisKKwlXQVJOX09OX09OQ0UocGFnZSAtIGJvLT5ub2RlLnN0YXJ0ICE9CisJCSAgICAg Ym8tPmJhc2Uuc2l6ZSA+PiBWM0RfTU1VX1BBR0VfU0hJRlQpOworCisJaWYgKHYzZF9tbXVfZmx1 c2hfYWxsKHYzZCkpCisJCWRldl9lcnIodjNkLT5kZXYsICJNTVUgZmx1c2ggdGltZW91dFxuIik7 Cit9CisKK3ZvaWQgdjNkX21tdV9yZW1vdmVfcHRlcyhzdHJ1Y3QgdjNkX2JvICpibykKK3sKKwlz dHJ1Y3QgdjNkX2RldiAqdjNkID0gdG9fdjNkX2Rldihiby0+YmFzZS5kZXYpOworCXUzMiBucGFn ZXMgPSBiby0+YmFzZS5zaXplID4+IFYzRF9NTVVfUEFHRV9TSElGVDsKKwl1MzIgcGFnZTsKKwor CWZvciAocGFnZSA9IGJvLT5ub2RlLnN0YXJ0OyBwYWdlIDwgYm8tPm5vZGUuc3RhcnQgKyBucGFn ZXM7IHBhZ2UrKykKKwkJdjNkLT5wdFtwYWdlXSA9IDA7CisKKwlpZiAodjNkX21tdV9mbHVzaF9h bGwodjNkKSkKKwkJZGV2X2Vycih2M2QtPmRldiwgIk1NVSBmbHVzaCB0aW1lb3V0XG4iKTsKK30K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3JlZ3MuaCBiL2RyaXZlcnMvZ3B1 L2RybS92M2QvdjNkX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLmZjMTMyODJkZmMyZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92M2Qv djNkX3JlZ3MuaApAQCAtMCwwICsxLDI5NSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjArCisvKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBCcm9hZGNvbSAqLworCisjaWZu ZGVmIFYzRF9SRUdTX0gKKyNkZWZpbmUgVjNEX1JFR1NfSAorCisjaW5jbHVkZSA8bGludXgvYml0 b3BzLmg+CisKKyNkZWZpbmUgVjNEX01BU0soaGlnaCwgbG93KSAoKHUzMilHRU5NQVNLKGhpZ2gs IGxvdykpCisvKiBVc2luZyB0aGUgR05VIHN0YXRlbWVudCBleHByZXNzaW9uIGV4dGVuc2lvbiAq LworI2RlZmluZSBWM0RfU0VUX0ZJRUxEKHZhbHVlLCBmaWVsZCkJCQkJCVwKKwkoewkJCQkJCQkJ XAorCQl1MzIgZmllbGR2YWwgPSAodmFsdWUpIDw8IGZpZWxkIyNfU0hJRlQ7CQlcCisJCVdBUk5f T04oKGZpZWxkdmFsICYgfmZpZWxkIyNfTUFTSykgIT0gMCk7CQlcCisJCWZpZWxkdmFsICYgZmll bGQjI19NQVNLOwkJCQlcCisJIH0pCisKKyNkZWZpbmUgVjNEX0dFVF9GSUVMRCh3b3JkLCBmaWVs ZCkgKCgod29yZCkgJiBmaWVsZCMjX01BU0spID4+CQlcCisJCQkJICAgIGZpZWxkIyNfU0hJRlQp CisKKy8qIEh1YiByZWdpc3RlcnMgZm9yIHNoYXJlZCBoYXJkd2FyZSBiZXR3ZWVuIFYzRCBjb3Jl cy4gKi8KKworI2RlZmluZSBWM0RfSFVCX0FYSUNGRyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDB4MDAwMDAKKyMgZGVmaW5lIFYzRF9IVUJfQVhJQ0ZHX01BWF9MRU5fTUFTSyAgICAg ICAgICAgICAgICAgICBWM0RfTUFTSygzLCAwKQorIyBkZWZpbmUgVjNEX0hVQl9BWElDRkdfTUFY X0xFTl9TSElGVCAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVjNEX0hVQl9VSUZDRkcgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0CisjZGVmaW5lIFYzRF9IVUJfSURF TlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOAorCisjZGVmaW5lIFYz RF9IVUJfSURFTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYworIyBk ZWZpbmUgVjNEX0hVQl9JREVOVDFfV0lUSF9NU08gICAgICAgICAgICAgICAgICAgICAgIEJJVCgx OSkKKyMgZGVmaW5lIFYzRF9IVUJfSURFTlQxX1dJVEhfVFNZICAgICAgICAgICAgICAgICAgICAg ICBCSVQoMTgpCisjIGRlZmluZSBWM0RfSFVCX0lERU5UMV9XSVRIX1RGVSAgICAgICAgICAgICAg ICAgICAgICAgQklUKDE3KQorIyBkZWZpbmUgVjNEX0hVQl9JREVOVDFfV0lUSF9MM0MgICAgICAg ICAgICAgICAgICAgICAgIEJJVCgxNikKKyMgZGVmaW5lIFYzRF9IVUJfSURFTlQxX05IT1NUU19N QVNLICAgICAgICAgICAgICAgICAgICBWM0RfTUFTSygxNSwgMTIpCisjIGRlZmluZSBWM0RfSFVC X0lERU5UMV9OSE9TVFNfU0hJRlQgICAgICAgICAgICAgICAgICAgMTIKKyMgZGVmaW5lIFYzRF9I VUJfSURFTlQxX05DT1JFU19NQVNLICAgICAgICAgICAgICAgICAgICBWM0RfTUFTSygxMSwgOCkK KyMgZGVmaW5lIFYzRF9IVUJfSURFTlQxX05DT1JFU19TSElGVCAgICAgICAgICAgICAgICAgICA4 CisjIGRlZmluZSBWM0RfSFVCX0lERU5UMV9SRVZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAg VjNEX01BU0soNywgNCkKKyMgZGVmaW5lIFYzRF9IVUJfSURFTlQxX1JFVl9TSElGVCAgICAgICAg ICAgICAgICAgICAgICA0CisjIGRlZmluZSBWM0RfSFVCX0lERU5UMV9UVkVSX01BU0sgICAgICAg ICAgICAgICAgICAgICAgVjNEX01BU0soMywgMCkKKyMgZGVmaW5lIFYzRF9IVUJfSURFTlQxX1RW RVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwCisKKyNkZWZpbmUgVjNEX0hVQl9JREVOVDIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwCisjIGRlZmluZSBWM0RfSFVC X0lERU5UMl9XSVRIX01NVSAgICAgICAgICAgICAgICAgICAgICAgQklUKDgpCisjIGRlZmluZSBW M0RfSFVCX0lERU5UMl9MM0NfTktCX01BU0sgICAgICAgICAgICAgICAgICAgVjNEX01BU0soNywg MCkKKyMgZGVmaW5lIFYzRF9IVUJfSURFTlQyX0wzQ19OS0JfU0hJRlQgICAgICAgICAgICAgICAg ICAwCisKKyNkZWZpbmUgVjNEX0hVQl9JREVOVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAweDAwMDE0CisjIGRlZmluZSBWM0RfSFVCX0lERU5UM19JUFJFVl9NQVNLICAgICAgICAg ICAgICAgICAgICAgVjNEX01BU0soMTUsIDgpCisjIGRlZmluZSBWM0RfSFVCX0lERU5UM19JUFJF Vl9TSElGVCAgICAgICAgICAgICAgICAgICAgOAorIyBkZWZpbmUgVjNEX0hVQl9JREVOVDNfSVBJ RFhfTUFTSyAgICAgICAgICAgICAgICAgICAgIFYzRF9NQVNLKDcsIDApCisjIGRlZmluZSBWM0Rf SFVCX0lERU5UM19JUElEWF9TSElGVCAgICAgICAgICAgICAgICAgICAgMAorCisjZGVmaW5lIFYz RF9IVUJfSU5UX1NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA1MAorI2Rl ZmluZSBWM0RfSFVCX0lOVF9TRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAw NTQKKyNkZWZpbmUgVjNEX0hVQl9JTlRfQ0xSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAweDAwMDU4CisjZGVmaW5lIFYzRF9IVUJfSU5UX01TS19TVFMgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMHgwMDA1YworI2RlZmluZSBWM0RfSFVCX0lOVF9NU0tfU0VUICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDB4MDAwNjAKKyNkZWZpbmUgVjNEX0hVQl9JTlRfTVNLX0NMUiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDY0CisjIGRlZmluZSBWM0RfSFVCX0lOVF9NTVVf V1JWICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDUpCisjIGRlZmluZSBWM0RfSFVCX0lO VF9NTVVfUFRJICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDQpCisjIGRlZmluZSBWM0Rf SFVCX0lOVF9NTVVfQ0FQICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDMpCisjIGRlZmlu ZSBWM0RfSFVCX0lOVF9NU08gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDIpCisj IGRlZmluZSBWM0RfSFVCX0lOVF9URlVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklU KDEpCisjIGRlZmluZSBWM0RfSFVCX0lOVF9URlVGICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQklUKDApCisKKyNkZWZpbmUgVjNEX0dDQV9DQUNIRV9DVFJMICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAweDAwMDBjCisjIGRlZmluZSBWM0RfR0NBX0NBQ0hFX0NUUkxfRkxVU0ggICAg ICAgICAgICAgICAgICAgICAgQklUKDApCisKKyNkZWZpbmUgVjNEX0dDQV9TQUZFX1NIVVRET1dO ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMGIwCisjIGRlZmluZSBWM0RfR0NBX1NBRkVf U0hVVERPV05fRU4gICAgICAgICAgICAgICAgICAgICAgQklUKDApCisKKyNkZWZpbmUgVjNEX0dD QV9TQUZFX1NIVVRET1dOX0FDSyAgICAgICAgICAgICAgICAgICAgICAweDAwMGI0CisjIGRlZmlu ZSBWM0RfR0NBX1NBRkVfU0hVVERPV05fQUNLX0FDS0VEICAgICAgICAgICAgICAgMworCisjIGRl ZmluZSBWM0RfVE9QX0dSX0JSSURHRV9SRVZJU0lPTiAgICAgICAgICAgICAgICAgICAgMHgwMDAw MAorIyBkZWZpbmUgVjNEX1RPUF9HUl9CUklER0VfTUFKT1JfTUFTSyAgICAgICAgICAgICAgICAg IFYzRF9NQVNLKDE1LCA4KQorIyBkZWZpbmUgVjNEX1RPUF9HUl9CUklER0VfTUFKT1JfU0hJRlQg ICAgICAgICAgICAgICAgIDgKKyMgZGVmaW5lIFYzRF9UT1BfR1JfQlJJREdFX01JTk9SX01BU0sg ICAgICAgICAgICAgICAgICBWM0RfTUFTSyg3LCAwKQorIyBkZWZpbmUgVjNEX1RPUF9HUl9CUklE R0VfTUlOT1JfU0hJRlQgICAgICAgICAgICAgICAgIDAKKworLyogNzI2OCByZXNldCByZWcgKi8K KyMgZGVmaW5lIFYzRF9UT1BfR1JfQlJJREdFX1NXX0lOSVRfMCAgICAgICAgICAgICAgICAgICAw eDAwMDA4CisjIGRlZmluZSBWM0RfVE9QX0dSX0JSSURHRV9TV19JTklUXzBfVjNEX0NMS18xMDhf U1dfSU5JVCBCSVQoMCkKKy8qIDcyNzggcmVzZXQgcmVnICovCisjIGRlZmluZSBWM0RfVE9QX0dS X0JSSURHRV9TV19JTklUXzEgICAgICAgICAgICAgICAgICAgMHgwMDAwYworIyBkZWZpbmUgVjNE X1RPUF9HUl9CUklER0VfU1dfSU5JVF8xX1YzRF9DTEtfMTA4X1NXX0lOSVQgQklUKDApCisKKy8q IFBlci1NTVUgcmVnaXN0ZXJzLiAqLworCisjZGVmaW5lIFYzRF9NTVVDX0NPTlRST0wgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMAorIyBkZWZpbmUgVjNEX01NVUNfQ09OVFJP TF9DTEVBUiAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgzKQorIyBkZWZpbmUgVjNEX01NVUNf Q09OVFJPTF9GTFVTSElORyAgICAgICAgICAgICAgICAgICAgIEJJVCgyKQorIyBkZWZpbmUgVjNE X01NVUNfQ09OVFJPTF9GTFVTSCAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgxKQorIyBkZWZp bmUgVjNEX01NVUNfQ09OVFJPTF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgIEJJVCgwKQor CisjZGVmaW5lIFYzRF9NTVVfQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MHgwMTIwMAorIyBkZWZpbmUgVjNEX01NVV9DVExfQ0FQX0VYQ0VFREVEICAgICAgICAgICAgICAg ICAgICAgIEJJVCgyNykKKyMgZGVmaW5lIFYzRF9NTVVfQ1RMX0NBUF9FWENFRURFRF9BQk9SVCAg ICAgICAgICAgICAgICBCSVQoMjYpCisjIGRlZmluZSBWM0RfTU1VX0NUTF9DQVBfRVhDRUVERURf SU5UICAgICAgICAgICAgICAgICAgQklUKDI1KQorIyBkZWZpbmUgVjNEX01NVV9DVExfQ0FQX0VY Q0VFREVEX0VYQ0VQVElPTiAgICAgICAgICAgIEJJVCgyNCkKKyMgZGVmaW5lIFYzRF9NTVVfQ1RM X1BUX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMjApCisjIGRlZmluZSBWM0Rf TU1VX0NUTF9QVF9JTlZBTElEX0FCT1JUICAgICAgICAgICAgICAgICAgQklUKDE5KQorIyBkZWZp bmUgVjNEX01NVV9DVExfUFRfSU5WQUxJRF9JTlQgICAgICAgICAgICAgICAgICAgIEJJVCgxOCkK KyMgZGVmaW5lIFYzRF9NTVVfQ1RMX1BUX0lOVkFMSURfRVhDRVBUSU9OICAgICAgICAgICAgICBC SVQoMTcpCisjIGRlZmluZSBWM0RfTU1VX0NUTF9XUklURV9WSU9MQVRJT04gICAgICAgICAgICAg ICAgICAgQklUKDE2KQorIyBkZWZpbmUgVjNEX01NVV9DVExfV1JJVEVfVklPTEFUSU9OX0FCT1JU ICAgICAgICAgICAgIEJJVCgxMSkKKyMgZGVmaW5lIFYzRF9NTVVfQ1RMX1dSSVRFX1ZJT0xBVElP Tl9JTlQgICAgICAgICAgICAgICBCSVQoMTApCisjIGRlZmluZSBWM0RfTU1VX0NUTF9XUklURV9W SU9MQVRJT05fRVhDRVBUSU9OICAgICAgICAgQklUKDkpCisjIGRlZmluZSBWM0RfTU1VX0NUTF9U TEJfQ0xFQVJJTkcgICAgICAgICAgICAgICAgICAgICAgQklUKDcpCisjIGRlZmluZSBWM0RfTU1V X0NUTF9UTEJfU1RBVFNfQ0xFQVIgICAgICAgICAgICAgICAgICAgQklUKDMpCisjIGRlZmluZSBW M0RfTU1VX0NUTF9UTEJfQ0xFQVIgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDIpCisjIGRl ZmluZSBWM0RfTU1VX0NUTF9UTEJfU1RBVFNfRU5BQkxFICAgICAgICAgICAgICAgICAgQklUKDEp CisjIGRlZmluZSBWM0RfTU1VX0NUTF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAg QklUKDApCisKKyNkZWZpbmUgVjNEX01NVV9QVF9QQV9CQVNFICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAweDAxMjA0CisjZGVmaW5lIFYzRF9NTVVfSElUICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMHgwMTIwOAorI2RlZmluZSBWM0RfTU1VX01JU1NFUyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDB4MDEyMGMKKyNkZWZpbmUgVjNEX01NVV9TVEFMTFMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMjEwCisKKyNkZWZpbmUgVjNEX01NVV9B RERSX0NBUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMjE0CisjIGRlZmluZSBW M0RfTU1VX0FERFJfQ0FQX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgQklUKDMxKQorIyBk ZWZpbmUgVjNEX01NVV9BRERSX0NBUF9NUEFHRV9NQVNLICAgICAgICAgICAgICAgICAgIFYzRF9N QVNLKDExLCAwKQorIyBkZWZpbmUgVjNEX01NVV9BRERSX0NBUF9NUEFHRV9TSElGVCAgICAgICAg ICAgICAgICAgIDAKKworI2RlZmluZSBWM0RfTU1VX1NIT09UX0RPV04gICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDB4MDEyMTgKKyMgZGVmaW5lIFYzRF9NTVVfU0hPT1RfRE9XTl9TSE9PVElO RyAgICAgICAgICAgICAgICAgICBCSVQoMjkpCisjIGRlZmluZSBWM0RfTU1VX1NIT09UX0RPV05f U0hPT1QgICAgICAgICAgICAgICAgICAgICAgQklUKDI4KQorIyBkZWZpbmUgVjNEX01NVV9TSE9P VF9ET1dOX1BBR0VfTUFTSyAgICAgICAgICAgICAgICAgIFYzRF9NQVNLKDI3LCAwKQorIyBkZWZp bmUgVjNEX01NVV9TSE9PVF9ET1dOX1BBR0VfU0hJRlQgICAgICAgICAgICAgICAgIDAKKworI2Rl ZmluZSBWM0RfTU1VX0JZUEFTU19TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEy MWMKKyNkZWZpbmUgVjNEX01NVV9CWVBBU1NfRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAweDAxMjIwCisKKy8qIEFYSSBJRCBvZiB0aGUgYWNjZXNzIHRoYXQgZmF1bHRlZCAqLworI2Rl ZmluZSBWM0RfTU1VX1ZJT19JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEy MmMKKworLyogQWRkcmVzcyBmb3IgaWxsZWdhbCBQVEVzIHRvIHJldHVybiAqLworI2RlZmluZSBW M0RfTU1VX0lMTEVHQUxfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEyMzAKKyMg ZGVmaW5lIFYzRF9NTVVfSUxMRUdBTF9BRERSX0VOQUJMRSAgICAgICAgICAgICAgICAgICBCSVQo MzEpCisKKy8qIEFkZHJlc3MgdGhhdCBmYXVsdGVkICovCisjZGVmaW5lIFYzRF9NTVVfVklPX0FE RFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTIzNAorCisvKiBQZXItVjNELWNv cmUgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgVjNEX0NUTF9JREVOVDAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAweDAwMDAwCisjIGRlZmluZSBWM0RfSURFTlQwX1ZFUl9NQVNLICAg ICAgICAgICAgICAgICAgICAgICAgICAgVjNEX01BU0soMzEsIDI0KQorIyBkZWZpbmUgVjNEX0lE RU5UMF9WRVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKyNkZWZpbmUgVjNE X0NUTF9JREVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0CisvKiBN dWx0aXBsZXMgb2YgMWtiICovCisjIGRlZmluZSBWM0RfSURFTlQxX1ZQTV9TSVpFX01BU0sgICAg ICAgICAgICAgICAgICAgICAgVjNEX01BU0soMzEsIDI4KQorIyBkZWZpbmUgVjNEX0lERU5UMV9W UE1fU0laRV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDI4CisjIGRlZmluZSBWM0RfSURFTlQx X05TRU1fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgVjNEX01BU0soMjMsIDE2KQorIyBk ZWZpbmUgVjNEX0lERU5UMV9OU0VNX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDE2Cisj IGRlZmluZSBWM0RfSURFTlQxX05UTVVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgVjNE X01BU0soMTUsIDEyKQorIyBkZWZpbmUgVjNEX0lERU5UMV9OVE1VX1NISUZUICAgICAgICAgICAg ICAgICAgICAgICAgIDEyCisjIGRlZmluZSBWM0RfSURFTlQxX1FVUFNfTUFTSyAgICAgICAgICAg ICAgICAgICAgICAgICAgVjNEX01BU0soMTEsIDgpCisjIGRlZmluZSBWM0RfSURFTlQxX1FVUFNf U0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOAorIyBkZWZpbmUgVjNEX0lERU5UMV9OU0xD X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIFYzRF9NQVNLKDcsIDQpCisjIGRlZmluZSBW M0RfSURFTlQxX05TTENfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNAorIyBkZWZpbmUg VjNEX0lERU5UMV9SRVZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIFYzRF9NQVNLKDMs IDApCisjIGRlZmluZSBWM0RfSURFTlQxX1JFVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAg ICAgMAorCisjZGVmaW5lIFYzRF9DVExfSURFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMHgwMDAwOAorIyBkZWZpbmUgVjNEX0lERU5UMl9CQ0dfSU5UICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEJJVCgyOCkKKworI2RlZmluZSBWM0RfQ1RMX01JU0NDRkcgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTgKKyMgZGVmaW5lIFYzRF9NSVNDQ0ZHX09WUlRN VU9VVCAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMCkKKworI2RlZmluZSBWM0RfQ1RMX0wy Q0FDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAKKyMgZGVmaW5lIFYz RF9MMkNBQ1RMX0wyQ0NMUiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMikKKyMgZGVm aW5lIFYzRF9MMkNBQ1RMX0wyQ0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMSkK KyMgZGVmaW5lIFYzRF9MMkNBQ1RMX0wyQ0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICBC SVQoMCkKKworI2RlZmluZSBWM0RfQ1RMX1NMQ0FDVEwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDB4MDAwMjQKKyMgZGVmaW5lIFYzRF9TTENBQ1RMX1RWQ0NTX01BU0sgICAgICAgICAg ICAgICAgICAgICAgICBWM0RfTUFTSygyNywgMjQpCisjIGRlZmluZSBWM0RfU0xDQUNUTF9UVkND U19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMjQKKyMgZGVmaW5lIFYzRF9TTENBQ1RMX1RE Q0NTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICBWM0RfTUFTSygxOSwgMTYpCisjIGRlZmlu ZSBWM0RfU0xDQUNUTF9URENDU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTYKKyMgZGVm aW5lIFYzRF9TTENBQ1RMX1VDQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICBWM0RfTUFT SygxMSwgOCkKKyMgZGVmaW5lIFYzRF9TTENBQ1RMX1VDQ19TSElGVCAgICAgICAgICAgICAgICAg ICAgICAgICA4CisjIGRlZmluZSBWM0RfU0xDQUNUTF9JQ0NfTUFTSyAgICAgICAgICAgICAgICAg ICAgICAgICAgVjNEX01BU0soMywgMCkKKyMgZGVmaW5lIFYzRF9TTENBQ1RMX0lDQ19TSElGVCAg ICAgICAgICAgICAgICAgICAgICAgICAwCisKKyNkZWZpbmUgVjNEX0NUTF9MMlRDQUNUTCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwCisjIGRlZmluZSBWM0RfTDJUQ0FDVExf VE1VV0NGICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDgpCisjIGRlZmluZSBWM0RfTDJU Q0FDVExfTDJUX05PX1dNICAgICAgICAgICAgICAgICAgICAgICAgQklUKDQpCisjIGRlZmluZSBW M0RfTDJUQ0FDVExfRkxNX0ZMVVNIICAgICAgICAgICAgICAgICAgICAgICAgMAorIyBkZWZpbmUg VjNEX0wyVENBQ1RMX0ZMTV9DTEVBUiAgICAgICAgICAgICAgICAgICAgICAgIDEKKyMgZGVmaW5l IFYzRF9MMlRDQUNUTF9GTE1fQ0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAyCisjIGRlZmlu ZSBWM0RfTDJUQ0FDVExfRkxNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgVjNEX01BU0so MiwgMSkKKyMgZGVmaW5lIFYzRF9MMlRDQUNUTF9GTE1fU0hJRlQgICAgICAgICAgICAgICAgICAg ICAgICAxCisjIGRlZmluZSBWM0RfTDJUQ0FDVExfTDJURkxTICAgICAgICAgICAgICAgICAgICAg ICAgICAgQklUKDApCisjZGVmaW5lIFYzRF9DVExfTDJURkxTVEEgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMHgwMDAzNAorI2RlZmluZSBWM0RfQ1RMX0wyVEZMRU5EICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDB4MDAwMzgKKworI2RlZmluZSBWM0RfQ1RMX0lOVF9TVFMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNTAKKyNkZWZpbmUgVjNEX0NUTF9JTlRf U0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDU0CisjZGVmaW5lIFYzRF9D VExfSU5UX0NMUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA1OAorI2RlZmlu ZSBWM0RfQ1RMX0lOVF9NU0tfU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNWMK KyNkZWZpbmUgVjNEX0NUTF9JTlRfTVNLX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAw eDAwMDYwCisjZGVmaW5lIFYzRF9DVExfSU5UX01TS19DTFIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMHgwMDA2NAorIyBkZWZpbmUgVjNEX0lOVF9RUFVfTUFTSyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFYzRF9NQVNLKDI3LCAxNikKKyMgZGVmaW5lIFYzRF9JTlRfUVBVX1NISUZU ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorIyBkZWZpbmUgVjNEX0lOVF9HTVBWICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCg1KQorIyBkZWZpbmUgVjNEX0lOVF9U UkZCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCg0KQorIyBkZWZpbmUgVjNE X0lOVF9TUElMTFVTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgzKQorIyBkZWZp bmUgVjNEX0lOVF9PVVRPTUVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgyKQor IyBkZWZpbmUgVjNEX0lOVF9GTERPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJ VCgxKQorIyBkZWZpbmUgVjNEX0lOVF9GUkRPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEJJVCgwKQorCisjZGVmaW5lIFYzRF9DTEVfQ1QwQ1MgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMHgwMDEwMAorI2RlZmluZSBWM0RfQ0xFX0NUMUNTICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDB4MDAxMDQKKyNkZWZpbmUgVjNEX0NMRV9DVE5DUyhuKSAoVjNE X0NMRV9DVDBDUyArIDQgKiBuKQorI2RlZmluZSBWM0RfQ0xFX0NUMEVBICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDB4MDAxMDgKKyNkZWZpbmUgVjNEX0NMRV9DVDFFQSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTBjCisjZGVmaW5lIFYzRF9DTEVfQ1RORUEo bikgKFYzRF9DTEVfQ1QwRUEgKyA0ICogbikKKyNkZWZpbmUgVjNEX0NMRV9DVDBDQSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTEwCisjZGVmaW5lIFYzRF9DTEVfQ1QxQ0Eg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDExNAorI2RlZmluZSBWM0RfQ0xF X0NUTkNBKG4pIChWM0RfQ0xFX0NUMENBICsgNCAqIG4pCisjZGVmaW5lIFYzRF9DTEVfQ1QwUkEg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDExOAorI2RlZmluZSBWM0RfQ0xF X0NUMVJBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMWMKKyNkZWZpbmUg VjNEX0NMRV9DVDBMQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTIwCisj ZGVmaW5lIFYzRF9DTEVfQ1QxTEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw MDEyNAorI2RlZmluZSBWM0RfQ0xFX0NUMFBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDAxMjgKKyNkZWZpbmUgVjNEX0NMRV9DVDFQQyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAweDAwMTJjCisjZGVmaW5lIFYzRF9DTEVfUENTICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMHgwMDEzMAorI2RlZmluZSBWM0RfQ0xFX0JGQyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMzQKKyNkZWZpbmUgVjNEX0NMRV9SRkMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTM4CisjZGVmaW5lIFYzRF9DTEVf VEZCQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEzYworI2RlZmluZSBW M0RfQ0xFX1RGSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxNDAKKyNk ZWZpbmUgVjNEX0NMRV9DVDFDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAw MTQ0CisjZGVmaW5lIFYzRF9DTEVfQ1QxVElMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMHgwMDE0OAorI2RlZmluZSBWM0RfQ0xFX0NUMVRTS0lQICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDB4MDAxNGMKKyNkZWZpbmUgVjNEX0NMRV9DVDFQVENUICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAweDAwMTUwCisjZGVmaW5lIFYzRF9DTEVfQ1QwU1lOQyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE1NAorI2RlZmluZSBWM0RfQ0xFX0NUMVNZTkMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxNTgKKyNkZWZpbmUgVjNEX0NMRV9D VDBRVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTVjCisjIGRlZmluZSBW M0RfQ0xFX0NUMFFUU19FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDEpCisjZGVm aW5lIFYzRF9DTEVfQ1QwUUJBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE2 MAorI2RlZmluZSBWM0RfQ0xFX0NUMVFCQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDB4MDAxNjQKKyNkZWZpbmUgVjNEX0NMRV9DVE5RQkEobikgKFYzRF9DTEVfQ1QwUUJBICsgNCAq IG4pCisjZGVmaW5lIFYzRF9DTEVfQ1QwUUVBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMHgwMDE2OAorI2RlZmluZSBWM0RfQ0xFX0NUMVFFQSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDB4MDAxNmMKKyNkZWZpbmUgVjNEX0NMRV9DVE5RRUEobikgKFYzRF9DTEVfQ1Qw UUVBICsgNCAqIG4pCisjZGVmaW5lIFYzRF9DTEVfQ1QwUU1BICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMHgwMDE3MAorI2RlZmluZSBWM0RfQ0xFX0NUMFFNUyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDB4MDAxNzQKKyNkZWZpbmUgVjNEX0NMRV9DVDFRQ0ZHICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTc4CisvKiBJZiBzZXQgd2l0aG91dCBFVFBS T0MsIGVudGlyZWx5IHNraXAgdGlsZXMgd2l0aCBubyBwcmltaXRpdmVzLiAqLworIyBkZWZpbmUg VjNEX0NMRV9RQ0ZHX0VURklMVCAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCg3KQorLyog SWYgc2V0IHdpdGggRVRGSUxULCBqdXN0IHdyaXRlIHRoZSBjbGVhciBjb2xvciB0byB0aWxlcyB3 aXRoIG5vCisgKiBwcmltaXRpdmVzLgorICovCisjIGRlZmluZSBWM0RfQ0xFX1FDRkdfRVRQUk9D ICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDYpCisjIGRlZmluZSBWM0RfQ0xFX1FDRkdf RVRTRkxVU0ggICAgICAgICAgICAgICAgICAgICAgICAgQklUKDEpCisjIGRlZmluZSBWM0RfQ0xF X1FDRkdfTUNESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDApCisKKyNkZWZpbmUg VjNEX1BUQl9CUENBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMzAwCisj ZGVmaW5lIFYzRF9QVEJfQlBDUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw MDMwNAorI2RlZmluZSBWM0RfUFRCX0JQT0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDAzMDgKKyNkZWZpbmUgVjNEX1BUQl9CUE9TICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAweDAwMzBjCisKKyNkZWZpbmUgVjNEX1BUQl9CWENGICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAweDAwMzEwCisjIGRlZmluZSBWM0RfUFRCX0JYQ0ZfUldPUkRF UkRJU0EgICAgICAgICAgICAgICAgICAgICAgQklUKDEpCisjIGRlZmluZSBWM0RfUFRCX0JYQ0Zf Q0xJUERJU0EgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDApCisKKyNkZWZpbmUgVjNEX0dN UF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwCisjIGRlZmlu ZSBWM0RfR01QX1NUQVRVU19HTVBSU1QgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDMxKQor IyBkZWZpbmUgVjNEX0dNUF9TVEFUVVNfV1JfQ09VTlRfTUFTSyAgICAgICAgICAgICAgICAgIFYz RF9NQVNLKDMwLCAyNCkKKyMgZGVmaW5lIFYzRF9HTVBfU1RBVFVTX1dSX0NPVU5UX1NISUZUICAg ICAgICAgICAgICAgICAyNAorIyBkZWZpbmUgVjNEX0dNUF9TVEFUVVNfUkRfQ09VTlRfTUFTSyAg ICAgICAgICAgICAgICAgIFYzRF9NQVNLKDIyLCAxNikKKyMgZGVmaW5lIFYzRF9HTVBfU1RBVFVT X1JEX0NPVU5UX1NISUZUICAgICAgICAgICAgICAgICAxNgorIyBkZWZpbmUgVjNEX0dNUF9TVEFU VVNfV1JfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgIEJJVCg1KQorIyBkZWZpbmUgVjNEX0dN UF9TVEFUVVNfUkRfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgIEJJVCg0KQorIyBkZWZpbmUg VjNEX0dNUF9TVEFUVVNfQ0ZHX0JVU1kgICAgICAgICAgICAgICAgICAgICAgIEJJVCgzKQorIyBk ZWZpbmUgVjNEX0dNUF9TVEFUVVNfQ05UT1ZGICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgy KQorIyBkZWZpbmUgVjNEX0dNUF9TVEFUVVNfSU5WUFJPVCAgICAgICAgICAgICAgICAgICAgICAg IEJJVCgxKQorIyBkZWZpbmUgVjNEX0dNUF9TVEFUVVNfVklPICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEJJVCgwKQorCisjZGVmaW5lIFYzRF9HTVBfQ0ZHICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMHgwMDgwNAorIyBkZWZpbmUgVjNEX0dNUF9DRkdfTEJVUlNURU4gICAg ICAgICAgICAgICAgICAgICAgICAgIEJJVCgzKQorIyBkZWZpbmUgVjNEX0dNUF9DRkdfUEdDUlNF TiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgpCisjIGRlZmluZSBWM0RfR01QX0NGR19T VE9QX1JFUSAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDEpCisjIGRlZmluZSBWM0RfR01Q X0NGR19QUk9UX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgQklUKDApCisKKyNkZWZpbmUg VjNEX0dNUF9WSU9fQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODA4Cisj ZGVmaW5lIFYzRF9HTVBfVklPX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw MDgwYworI2RlZmluZSBWM0RfR01QX1RBQkxFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDA4MTAKKyNkZWZpbmUgVjNEX0dNUF9DTEVBUl9MT0FEICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAweDAwODE0CisjZGVmaW5lIFYzRF9HTVBfUFJFU0VSVkVfTE9BRCAgICAgICAg ICAgICAgICAgICAgICAgICAgMHgwMDgxOAorI2RlZmluZSBWM0RfR01QX1ZBTElEX0xJTkVTICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MjAKKworI2VuZGlmIC8qIFYzRF9SRUdTX0gg Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3NjaGVkLmMgYi9kcml2ZXJz L2dwdS9kcm0vdjNkL3YzZF9zY2hlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uYjA3YmVjZTk0MTdkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L3YzZC92M2Rfc2NoZWQuYwpAQCAtMCwwICsxLDIyOCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjArCisvKiBDb3B5cmlnaHQgKEMpIDIwMTggQnJvYWRjb20gKi8KKworLyoq CisgKiBET0M6IEJyb2FkY29tIFYzRCBzY2hlZHVsaW5nCisgKgorICogVGhlIHNoYXJlZCBEUk0g R1BVIHNjaGVkdWxlciBpcyB1c2VkIHRvIGNvb3JkaW5hdGUgc3VibWl0dGluZyBqb2JzCisgKiB0 byB0aGUgaGFyZHdhcmUuICBFYWNoIERSTSBmZCAocm91Z2hseSBhIGNsaWVudCBwcm9jZXNzKSBn ZXRzIGl0cworICogb3duIHNjaGVkdWxlciBlbnRpdHksIHdoaWNoIHdpbGwgcHJvY2VzcyBqb2Jz IGluIG9yZGVyLiAgVGhlIEdQVQorICogc2NoZWR1bGVyIHdpbGwgcm91bmQtcm9iaW4gYmV0d2Vl biBjbGllbnRzIHRvIHN1Ym1pdCB0aGUgbmV4dCBqb2IuCisgKgorICogRm9yIHNpbXBsaWNpdHks IGFuZCBpbiBvcmRlciB0byBrZWVwIGxhdGVuY3kgbG93IGZvciBpbnRlcmFjdGl2ZQorICogam9i cyB3aGVuIGJ1bGsgYmFja2dyb3VuZCBqb2JzIGFyZSBxdWV1ZWQgdXAsIHdlIHN1Ym1pdCBhIG5l dyBqb2IKKyAqIHRvIHRoZSBIVyBvbmx5IHdoZW4gaXQgaGFzIGNvbXBsZXRlZCB0aGUgbGFzdCBv bmUsIGluc3RlYWQgb2YKKyAqIGZpbGxpbmcgdXAgdGhlIENUWzAxXVEgRklGT3Mgd2l0aCBqb2Jz LiAgU2ltaWxhcmx5LCB3ZSB1c2UKKyAqIHYzZF9qb2JfZGVwZW5kZW5jeSgpIHRvIG1hbmFnZSB0 aGUgZGVwZW5kZW5jeSBiZXR3ZWVuIGJpbiBhbmQKKyAqIHJlbmRlciwgaW5zdGVhZCBvZiBoYXZp bmcgdGhlIGNsaWVudHMgc3VibWl0IGpvYnMgd2l0aCB1c2luZyB0aGUKKyAqIEhXJ3Mgc2VtYXBo b3JlcyB0byBpbnRlcmxvY2sgYmV0d2VlbiB0aGVtLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9r dGhyZWFkLmg+CisKKyNpbmNsdWRlICJ2M2RfZHJ2LmgiCisjaW5jbHVkZSAidjNkX3JlZ3MuaCIK KyNpbmNsdWRlICJ2M2RfdHJhY2UuaCIKKworc3RhdGljIHN0cnVjdCB2M2Rfam9iICoKK3RvX3Yz ZF9qb2Ioc3RydWN0IGRybV9zY2hlZF9qb2IgKnNjaGVkX2pvYikKK3sKKwlyZXR1cm4gY29udGFp bmVyX29mKHNjaGVkX2pvYiwgc3RydWN0IHYzZF9qb2IsIGJhc2UpOworfQorCitzdGF0aWMgdm9p ZAordjNkX2pvYl9mcmVlKHN0cnVjdCBkcm1fc2NoZWRfam9iICpzY2hlZF9qb2IpCit7CisJc3Ry dWN0IHYzZF9qb2IgKmpvYiA9IHRvX3YzZF9qb2Ioc2NoZWRfam9iKTsKKworCXYzZF9leGVjX3B1 dChqb2ItPmV4ZWMpOworfQorCisvKioKKyAqIFJldHVybnMgdGhlIGZlbmNlcyB0aGF0IHRoZSBi aW4gam9iIGRlcGVuZHMgb24sIG9uZSBieSBvbmUuCisgKiB2M2Rfam9iX3J1bigpIHdvbid0IGJl IGNhbGxlZCB1bnRpbCBhbGwgb2YgdGhlbSBoYXZlIGJlZW4gc2lnbmFsZWQuCisgKi8KK3N0YXRp YyBzdHJ1Y3QgZG1hX2ZlbmNlICoKK3YzZF9qb2JfZGVwZW5kZW5jeShzdHJ1Y3QgZHJtX3NjaGVk X2pvYiAqc2NoZWRfam9iLAorCQkgICBzdHJ1Y3QgZHJtX3NjaGVkX2VudGl0eSAqc19lbnRpdHkp Cit7CisJc3RydWN0IHYzZF9qb2IgKmpvYiA9IHRvX3YzZF9qb2Ioc2NoZWRfam9iKTsKKwlzdHJ1 Y3QgdjNkX2V4ZWNfaW5mbyAqZXhlYyA9IGpvYi0+ZXhlYzsKKwllbnVtIHYzZF9xdWV1ZSBxID0g am9iID09ICZleGVjLT5iaW4gPyBWM0RfQklOIDogVjNEX1JFTkRFUjsKKwlzdHJ1Y3QgZG1hX2Zl bmNlICpmZW5jZTsKKworCWZlbmNlID0gam9iLT5pbl9mZW5jZTsKKwlpZiAoZmVuY2UpIHsKKwkJ am9iLT5pbl9mZW5jZSA9IE5VTEw7CisJCXJldHVybiBmZW5jZTsKKwl9CisKKwlpZiAocSA9PSBW M0RfUkVOREVSKSB7CisJCS8qIElmIHdlIGhhZCBhIGJpbiBqb2IsIHRoZSByZW5kZXIgam9iIGRl ZmluaXRlbHkgZGVwZW5kcyBvbgorCQkgKiBpdC4gV2UgZmlyc3QgaGF2ZSB0byB3YWl0IGZvciBi aW4gdG8gYmUgc2NoZWR1bGVkLCBzbyB0aGF0CisJCSAqIGl0cyBkb25lX2ZlbmNlIGlzIGNyZWF0 ZWQuCisJCSAqLworCQlmZW5jZSA9IGV4ZWMtPmJpbl9kb25lX2ZlbmNlOworCQlpZiAoZmVuY2Up IHsKKwkJCWV4ZWMtPmJpbl9kb25lX2ZlbmNlID0gTlVMTDsKKwkJCXJldHVybiBmZW5jZTsKKwkJ fQorCX0KKworCS8qIFhYWDogV2FpdCBvbiBhIGZlbmNlIGZvciBzd2l0Y2hpbmcgdGhlIEdNUCBp ZiBuZWNlc3NhcnksCisJICogYW5kIHRoZW4gZG8gc28uCisJICovCisKKwlyZXR1cm4gZmVuY2U7 Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2ZlbmNlICp2M2Rfam9iX3J1bihzdHJ1Y3QgZHJtX3Nj aGVkX2pvYiAqc2NoZWRfam9iKQoreworCXN0cnVjdCB2M2Rfam9iICpqb2IgPSB0b192M2Rfam9i KHNjaGVkX2pvYik7CisJc3RydWN0IHYzZF9leGVjX2luZm8gKmV4ZWMgPSBqb2ItPmV4ZWM7CisJ ZW51bSB2M2RfcXVldWUgcSA9IGpvYiA9PSAmZXhlYy0+YmluID8gVjNEX0JJTiA6IFYzRF9SRU5E RVI7CisJc3RydWN0IHYzZF9kZXYgKnYzZCA9IGV4ZWMtPnYzZDsKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gJnYzZC0+ZHJtOworCXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlOworCXVuc2lnbmVk IGxvbmcgaXJxZmxhZ3M7CisKKwlpZiAodW5saWtlbHkoam9iLT5iYXNlLnNfZmVuY2UtPmZpbmlz aGVkLmVycm9yKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBMb2NrIHJlcXVpcmVkIGFyb3VuZCBi aW5fam9iIHVwZGF0ZSB2cworCSAqIHYzZF9vdmVyZmxvd19tZW1fd29yaygpLgorCSAqLworCXNw aW5fbG9ja19pcnFzYXZlKCZ2M2QtPmpvYl9sb2NrLCBpcnFmbGFncyk7CisJaWYgKHEgPT0gVjNE X0JJTikgeworCQl2M2QtPmJpbl9qb2IgPSBqb2ItPmV4ZWM7CisKKwkJLyogQ2xlYXIgb3V0IHRo ZSBvdmVyZmxvdyBhbGxvY2F0aW9uLCBzbyB3ZSBkb24ndAorCQkgKiByZXVzZSB0aGUgb3ZlcmZs b3cgYXR0YWNoZWQgdG8gYSBwcmV2aW91cyBqb2IuCisJCSAqLworCQlWM0RfQ09SRV9XUklURSgw LCBWM0RfUFRCX0JQT1MsIDApOworCX0gZWxzZSB7CisJCXYzZC0+cmVuZGVyX2pvYiA9IGpvYi0+ ZXhlYzsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdjNkLT5qb2JfbG9jaywgaXJxZmxh Z3MpOworCisJLyogQ2FuIHdlIGF2b2lkIHRoaXMgZmx1c2ggd2hlbiBxPT1SRU5ERVI/ICBXZSBu ZWVkIHRvIGJlCisJICogY2FyZWZ1bCBvZiBzY2hlZHVsaW5nLCB0aG91Z2ggLS0gaW1hZ2luZSBq b2IwIHJlbmRlcmluZyB0bworCSAqIHRleHR1cmUgYW5kIGpvYjEgcmVhZGluZywgYW5kIHRoZW0g YmVpbmcgZXhlY3V0ZWQgYXMgYmluMCwKKwkgKiBiaW4xLCByZW5kZXIwLCByZW5kZXIxLCBzbyB0 aGF0IHJlbmRlcjEncyBmbHVzaCBhdCBiaW4gdGltZQorCSAqIHdhc24ndCBlbm91Z2guCisJICov CisJdjNkX2ludmFsaWRhdGVfY2FjaGVzKHYzZCk7CisKKwlmZW5jZSA9IHYzZF9mZW5jZV9jcmVh dGUodjNkLCBxKTsKKwlpZiAoIWZlbmNlKQorCQlyZXR1cm4gZmVuY2U7CisKKwlpZiAoam9iLT5k b25lX2ZlbmNlKQorCQlkbWFfZmVuY2VfcHV0KGpvYi0+ZG9uZV9mZW5jZSk7CisJam9iLT5kb25l X2ZlbmNlID0gZG1hX2ZlbmNlX2dldChmZW5jZSk7CisKKwl0cmFjZV92M2Rfc3VibWl0X2NsKGRl diwgcSA9PSBWM0RfUkVOREVSLCB0b192M2RfZmVuY2UoZmVuY2UpLT5zZXFubywKKwkJCSAgICBq b2ItPnN0YXJ0LCBqb2ItPmVuZCk7CisKKwlpZiAocSA9PSBWM0RfQklOKSB7CisJCWlmIChleGVj LT5xbWEpIHsKKwkJCVYzRF9DT1JFX1dSSVRFKDAsIFYzRF9DTEVfQ1QwUU1BLCBleGVjLT5xbWEp OworCQkJVjNEX0NPUkVfV1JJVEUoMCwgVjNEX0NMRV9DVDBRTVMsIGV4ZWMtPnFtcyk7CisJCX0K KwkJaWYgKGV4ZWMtPnF0cykgeworCQkJVjNEX0NPUkVfV1JJVEUoMCwgVjNEX0NMRV9DVDBRVFMs CisJCQkJICAgICAgIFYzRF9DTEVfQ1QwUVRTX0VOQUJMRSB8CisJCQkJICAgICAgIGV4ZWMtPnF0 cyk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBYWFg6IFNldCB0aGUgUUNGRyAqLworCX0KKworCS8q IFNldCB0aGUgY3VycmVudCBhbmQgZW5kIGFkZHJlc3Mgb2YgdGhlIGNvbnRyb2wgbGlzdC4KKwkg KiBXcml0aW5nIHRoZSBlbmQgcmVnaXN0ZXIgaXMgd2hhdCBzdGFydHMgdGhlIGpvYi4KKwkgKi8K KwlWM0RfQ09SRV9XUklURSgwLCBWM0RfQ0xFX0NUTlFCQShxKSwgam9iLT5zdGFydCk7CisJVjNE X0NPUkVfV1JJVEUoMCwgVjNEX0NMRV9DVE5RRUEocSksIGpvYi0+ZW5kKTsKKworCXJldHVybiBm ZW5jZTsKK30KKworc3RhdGljIHZvaWQKK3YzZF9qb2JfdGltZWRvdXQoc3RydWN0IGRybV9zY2hl ZF9qb2IgKnNjaGVkX2pvYikKK3sKKwlzdHJ1Y3QgdjNkX2pvYiAqam9iID0gdG9fdjNkX2pvYihz Y2hlZF9qb2IpOworCXN0cnVjdCB2M2RfZXhlY19pbmZvICpleGVjID0gam9iLT5leGVjOworCXN0 cnVjdCB2M2RfZGV2ICp2M2QgPSBleGVjLT52M2Q7CisJZW51bSB2M2RfcXVldWUgcTsKKworCW11 dGV4X2xvY2soJnYzZC0+cmVzZXRfbG9jayk7CisKKwkvKiBibG9jayBzY2hlZHVsZXIgKi8KKwlm b3IgKHEgPSAwOyBxIDwgVjNEX01BWF9RVUVVRVM7IHErKykgeworCQlzdHJ1Y3QgZHJtX2dwdV9z Y2hlZHVsZXIgKnNjaGVkID0gJnYzZC0+cXVldWVbcV0uc2NoZWQ7CisKKwkJa3RocmVhZF9wYXJr KHNjaGVkLT50aHJlYWQpOworCQlkcm1fc2NoZWRfaHdfam9iX3Jlc2V0KHNjaGVkLCAoc2NoZWRf am9iLT5zY2hlZCA9PSBzY2hlZCA/CisJCQkJCSAgICAgICBzY2hlZF9qb2IgOiBOVUxMKSk7CisJ fQorCisJLyogZ2V0IHRoZSBHUFUgYmFjayBpbnRvIHRoZSBpbml0IHN0YXRlICovCisJdjNkX3Jl c2V0KHYzZCk7CisKKwkvKiBVbmJsb2NrIHNjaGVkdWxlcnMgYW5kIHJlc3RhcnQgdGhlaXIgam9i cy4gKi8KKwlmb3IgKHEgPSAwOyBxIDwgVjNEX01BWF9RVUVVRVM7IHErKykgeworCQlkcm1fc2No ZWRfam9iX3JlY292ZXJ5KCZ2M2QtPnF1ZXVlW3FdLnNjaGVkKTsKKwkJa3RocmVhZF91bnBhcmso djNkLT5xdWV1ZVtxXS5zY2hlZC50aHJlYWQpOworCX0KKworCW11dGV4X3VubG9jaygmdjNkLT5y ZXNldF9sb2NrKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fc2NoZWRfYmFja2VuZF9v cHMgdjNkX3NjaGVkX29wcyA9IHsKKwkuZGVwZW5kZW5jeSA9IHYzZF9qb2JfZGVwZW5kZW5jeSwK KwkucnVuX2pvYiA9IHYzZF9qb2JfcnVuLAorCS50aW1lZG91dF9qb2IgPSB2M2Rfam9iX3RpbWVk b3V0LAorCS5mcmVlX2pvYiA9IHYzZF9qb2JfZnJlZQorfTsKKworaW50Cit2M2Rfc2NoZWRfaW5p dChzdHJ1Y3QgdjNkX2RldiAqdjNkKQoreworCWludCBod19qb2JzX2xpbWl0ID0gMTsKKwlpbnQg am9iX2hhbmdfbGltaXQgPSAwOworCWludCBoYW5nX2xpbWl0X21zID0gNTAwOworCWludCByZXQ7 CisKKwlyZXQgPSBkcm1fc2NoZWRfaW5pdCgmdjNkLT5xdWV1ZVtWM0RfQklOXS5zY2hlZCwKKwkJ CSAgICAgJnYzZF9zY2hlZF9vcHMsCisJCQkgICAgIGh3X2pvYnNfbGltaXQsIGpvYl9oYW5nX2xp bWl0LAorCQkJICAgICBtc2Vjc190b19qaWZmaWVzKGhhbmdfbGltaXRfbXMpLAorCQkJICAgICAi djNkX2JpbiIpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycih2M2QtPmRldiwgIkZhaWxlZCB0byBj cmVhdGUgYmluIHNjaGVkdWxlcjogJWQuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwly ZXQgPSBkcm1fc2NoZWRfaW5pdCgmdjNkLT5xdWV1ZVtWM0RfUkVOREVSXS5zY2hlZCwKKwkJCSAg ICAgJnYzZF9zY2hlZF9vcHMsCisJCQkgICAgIGh3X2pvYnNfbGltaXQsIGpvYl9oYW5nX2xpbWl0 LAorCQkJICAgICBtc2Vjc190b19qaWZmaWVzKGhhbmdfbGltaXRfbXMpLAorCQkJICAgICAidjNk X3JlbmRlciIpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycih2M2QtPmRldiwgIkZhaWxlZCB0byBj cmVhdGUgcmVuZGVyIHNjaGVkdWxlcjogJWQuIiwKKwkJCXJldCk7CisJCWRybV9zY2hlZF9maW5p KCZ2M2QtPnF1ZXVlW1YzRF9CSU5dLnNjaGVkKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1 cm4gMDsKK30KKwordm9pZAordjNkX3NjaGVkX2Zpbmkoc3RydWN0IHYzZF9kZXYgKnYzZCkKK3sK KwllbnVtIHYzZF9xdWV1ZSBxOworCisJZm9yIChxID0gMDsgcSA8IFYzRF9NQVhfUVVFVUVTOyBx KyspCisJCWRybV9zY2hlZF9maW5pKCZ2M2QtPnF1ZXVlW3FdLnNjaGVkKTsKK30KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3RyYWNlLmggYi9kcml2ZXJzL2dwdS9kcm0vdjNk L3YzZF90cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODVk ZDM1MWUxZTA5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfdHJh Y2UuaApAQCAtMCwwICsxLDgyIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MCsKKy8qIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEJyb2FkY29tICovCisKKyNpZiAhZGVmaW5l ZChfVjNEX1RSQUNFX0hfKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKQorI2Rl ZmluZSBfVjNEX1RSQUNFX0hfCisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNs dWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworI3Vu ZGVmIFRSQUNFX1NZU1RFTQorI2RlZmluZSBUUkFDRV9TWVNURU0gdjNkCisjZGVmaW5lIFRSQUNF X0lOQ0xVREVfRklMRSB2M2RfdHJhY2UKKworVFJBQ0VfRVZFTlQodjNkX3N1Ym1pdF9jbCwKKwkg ICAgVFBfUFJPVE8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBpc19yZW5kZXIsCisJCSAg ICAgdWludDY0X3Qgc2Vxbm8sCisJCSAgICAgdTMyIGN0bnFiYSwgdTMyIGN0bnFlYSksCisJICAg IFRQX0FSR1MoZGV2LCBpc19yZW5kZXIsIHNlcW5vLCBjdG5xYmEsIGN0bnFlYSksCisKKwkgICAg VFBfU1RSVUNUX19lbnRyeSgKKwkJCSAgICAgX19maWVsZCh1MzIsIGRldikKKwkJCSAgICAgX19m aWVsZChib29sLCBpc19yZW5kZXIpCisJCQkgICAgIF9fZmllbGQodTY0LCBzZXFubykKKwkJCSAg ICAgX19maWVsZCh1MzIsIGN0bnFiYSkKKwkJCSAgICAgX19maWVsZCh1MzIsIGN0bnFlYSkKKwkJ CSAgICAgKSwKKworCSAgICBUUF9mYXN0X2Fzc2lnbigKKwkJCSAgIF9fZW50cnktPmRldiA9IGRl di0+cHJpbWFyeS0+aW5kZXg7CisJCQkgICBfX2VudHJ5LT5pc19yZW5kZXIgPSBpc19yZW5kZXI7 CisJCQkgICBfX2VudHJ5LT5zZXFubyA9IHNlcW5vOworCQkJICAgX19lbnRyeS0+Y3RucWJhID0g Y3RucWJhOworCQkJICAgX19lbnRyeS0+Y3RucWVhID0gY3RucWVhOworCQkJICAgKSwKKworCSAg ICBUUF9wcmludGsoImRldj0ldSwgJXMsIHNlcW5vPSVsbHUsIDB4JTA4eC4uMHglMDh4IiwKKwkJ ICAgICAgX19lbnRyeS0+ZGV2LAorCQkgICAgICBfX2VudHJ5LT5pc19yZW5kZXIgPyAiUkNMIiA6 ICJCQ0wiLAorCQkgICAgICBfX2VudHJ5LT5zZXFubywKKwkJICAgICAgX19lbnRyeS0+Y3RucWJh LAorCQkgICAgICBfX2VudHJ5LT5jdG5xZWEpCispOworCitUUkFDRV9FVkVOVCh2M2RfcmVzZXRf YmVnaW4sCisJICAgIFRQX1BST1RPKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpLAorCSAgICBUUF9B UkdTKGRldiksCisKKwkgICAgVFBfU1RSVUNUX19lbnRyeSgKKwkJCSAgICAgX19maWVsZCh1MzIs IGRldikKKwkJCSAgICAgKSwKKworCSAgICBUUF9mYXN0X2Fzc2lnbigKKwkJCSAgIF9fZW50cnkt PmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CisJCQkgICApLAorCisJICAgIFRQX3ByaW50aygi ZGV2PSV1IiwKKwkJICAgICAgX19lbnRyeS0+ZGV2KQorKTsKKworVFJBQ0VfRVZFTlQodjNkX3Jl c2V0X2VuZCwKKwkgICAgVFBfUFJPVE8oc3RydWN0IGRybV9kZXZpY2UgKmRldiksCisJICAgIFRQ X0FSR1MoZGV2KSwKKworCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAorCQkJICAgICBfX2ZpZWxkKHUz MiwgZGV2KQorCQkJICAgICApLAorCisJICAgIFRQX2Zhc3RfYXNzaWduKAorCQkJICAgX19lbnRy eS0+ZGV2ID0gZGV2LT5wcmltYXJ5LT5pbmRleDsKKwkJCSAgICksCisKKwkgICAgVFBfcHJpbnRr KCJkZXY9JXUiLAorCQkgICAgICBfX2VudHJ5LT5kZXYpCispOworCisjZW5kaWYgLyogX1YzRF9U UkFDRV9IXyAqLworCisvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8K KyN1bmRlZiBUUkFDRV9JTkNMVURFX1BBVEgKKyNkZWZpbmUgVFJBQ0VfSU5DTFVERV9QQVRIIC4K KyNpbmNsdWRlIDx0cmFjZS9kZWZpbmVfdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS92M2QvdjNkX3RyYWNlX3BvaW50cy5jIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfdHJh Y2VfcG9pbnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40ODI5 MjJkN2M3ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF90cmFj ZV9wb2ludHMuYwpAQCAtMCwwICsxLDkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wKworLyogQ29weXJpZ2h0IChDKSAyMDE1IEJyb2FkY29tICovCisKKyNpbmNsdWRlICJ2 M2RfZHJ2LmgiCisKKyNpZm5kZWYgX19DSEVDS0VSX18KKyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BP SU5UUworI2luY2x1ZGUgInYzZF90cmFjZS5oIgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRl L3VhcGkvZHJtL3YzZF9kcm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0vdjNkX2RybS5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjAxYTA3NjQ1YmRkCi0tLSAvZGV2L251 bGwKKysrIGIvaW5jbHVkZS91YXBpL2RybS92M2RfZHJtLmgKQEAgLTAsMCArMSwxOTEgQEAKKy8q CisgKiBDb3B5cmlnaHQgwqkgMjAxNC0yMDE4IEJyb2FkY29tCisgKgorICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFM SU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX1YzRF9EUk1fSF8KKyNk ZWZpbmUgX1YzRF9EUk1fSF8KKworI2luY2x1ZGUgImRybS5oIgorCisjaWYgZGVmaW5lZChfX2Nw bHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgRFJNX1YzRF9TVUJNSVRf Q0wgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBEUk1fVjNEX1dBSVRfQk8g ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIERSTV9WM0RfQ1JFQVRFX0JP ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgRFJNX1YzRF9NTUFQX0JPICAg ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBEUk1fVjNEX0dFVF9QQVJBTSAg ICAgICAgICAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIERSTV9WM0RfR0VUX0JPX09GRlNF VCAgICAgICAgICAgICAgICAgICAgIDB4MDUKKworI2RlZmluZSBEUk1fSU9DVExfVjNEX1NVQk1J VF9DTCAgICAgICAgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WM0RfU1VCTUlU X0NMLCBzdHJ1Y3QgZHJtX3YzZF9zdWJtaXRfY2wpCisjZGVmaW5lIERSTV9JT0NUTF9WM0RfV0FJ VF9CTyAgICAgICAgICAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1YzRF9XQUlU X0JPLCBzdHJ1Y3QgZHJtX3YzZF93YWl0X2JvKQorI2RlZmluZSBEUk1fSU9DVExfVjNEX0NSRUFU RV9CTyAgICAgICAgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WM0RfQ1JFQVRF X0JPLCBzdHJ1Y3QgZHJtX3YzZF9jcmVhdGVfYm8pCisjZGVmaW5lIERSTV9JT0NUTF9WM0RfTU1B UF9CTyAgICAgICAgICAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1YzRF9NTUFQ X0JPLCBzdHJ1Y3QgZHJtX3YzZF9tbWFwX2JvKQorI2RlZmluZSBEUk1fSU9DVExfVjNEX0dFVF9Q QVJBTSAgICAgICAgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WM0RfR0VUX1BB UkFNLCBzdHJ1Y3QgZHJtX3YzZF9nZXRfcGFyYW0pCisjZGVmaW5lIERSTV9JT0NUTF9WM0RfR0VU X0JPX09GRlNFVCAgICAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1YzRF9HRVRf Qk9fT0ZGU0VULCBzdHJ1Y3QgZHJtX3YzZF9nZXRfYm9fb2Zmc2V0KQorCisvKioKKyAqIHN0cnVj dCBkcm1fdjNkX3N1Ym1pdF9jbCAtIGlvY3RsIGFyZ3VtZW50IGZvciBzdWJtaXR0aW5nIGNvbW1h bmRzIHRvIHRoZSAzRAorICogZW5naW5lLgorICoKKyAqIFRoaXMgYXNrcyB0aGUga2VybmVsIHRv IGhhdmUgdGhlIEdQVSBleGVjdXRlIGFuIG9wdGlvbmFsIGJpbm5lcgorICogY29tbWFuZCBsaXN0 LCBhbmQgYSByZW5kZXIgY29tbWFuZCBsaXN0LgorICovCitzdHJ1Y3QgZHJtX3YzZF9zdWJtaXRf Y2wgeworCS8qIFBvaW50ZXIgdG8gdGhlIGJpbm5lciBjb21tYW5kIGxpc3QuCisJICoKKwkgKiBU aGlzIGlzIHRoZSBmaXJzdCBzZXQgb2YgY29tbWFuZHMgZXhlY3V0ZWQsIHdoaWNoIHJ1bnMgdGhl CisJICogY29vcmRpbmF0ZSBzaGFkZXIgdG8gZGV0ZXJtaW5lIHdoZXJlIHByaW1pdGl2ZXMgbGFu ZCBvbiB0aGUgc2NyZWVuLAorCSAqIHRoZW4gd3JpdGVzIG91dCB0aGUgc3RhdGUgdXBkYXRlcyBh bmQgZHJhdyBjYWxscyBuZWNlc3NhcnkgcGVyIHRpbGUKKwkgKiB0byB0aGUgdGlsZSBhbGxvY2F0 aW9uIEJPLgorCSAqLworCV9fdTMyIGJjbF9zdGFydDsKKworCSAvKiogRW5kIGFkZHJlc3Mgb2Yg dGhlIEJDTCAoZmlyc3QgYnl0ZSBhZnRlciB0aGUgQkNMKSAqLworCV9fdTMyIGJjbF9lbmQ7CisK KwkvKiBPZmZzZXQgb2YgdGhlIHJlbmRlciBjb21tYW5kIGxpc3QuCisJICoKKwkgKiBUaGlzIGlz IHRoZSBzZWNvbmQgc2V0IG9mIGNvbW1hbmRzIGV4ZWN1dGVkLCB3aGljaCB3aWxsIGVpdGhlcgor CSAqIGV4ZWN1dGUgdGhlIHRpbGVzIHRoYXQgaGF2ZSBiZWVuIHNldCB1cCBieSB0aGUgQkNMLCBv ciBhIGZpeGVkIHNldAorCSAqIG9mIHRpbGVzIChpbiB0aGUgY2FzZSBvZiBSQ0wtb25seSBibGl0 cykuCisJICovCisJX191MzIgcmNsX3N0YXJ0OworCisJIC8qKiBFbmQgYWRkcmVzcyBvZiB0aGUg UkNMIChmaXJzdCBieXRlIGFmdGVyIHRoZSBSQ0wpICovCisJX191MzIgcmNsX2VuZDsKKworCS8q KiBBbiBvcHRpb25hbCBzeW5jIG9iamVjdCB0byB3YWl0IG9uIGJlZm9yZSBzdGFydGluZyB0aGUg QkNMLiAqLworCV9fdTMyIGluX3N5bmNfYmNsOworCS8qKiBBbiBvcHRpb25hbCBzeW5jIG9iamVj dCB0byB3YWl0IG9uIGJlZm9yZSBzdGFydGluZyB0aGUgUkNMLiAqLworCV9fdTMyIGluX3N5bmNf cmNsOworCS8qKiBBbiBvcHRpb25hbCBzeW5jIG9iamVjdCB0byBwbGFjZSB0aGUgY29tcGxldGlv biBmZW5jZSBpbi4gKi8KKwlfX3UzMiBvdXRfc3luYzsKKworCS8qIE9mZnNldCBvZiB0aGUgdGls ZSBhbGxvYyBtZW1vcnkKKwkgKgorCSAqIFRoaXMgaXMgb3B0aW9uYWwgb24gVjNEIDMuMyAod2hl cmUgdGhlIENMIGNhbiBzZXQgdGhlIHZhbHVlKSBidXQKKwkgKiByZXF1aXJlZCBvbiBWM0QgNC4x LgorCSAqLworCV9fdTMyIHFtYTsKKworCS8qKiBTaXplIG9mIHRoZSB0aWxlIGFsbG9jIG1lbW9y eS4gKi8KKwlfX3UzMiBxbXM7CisKKwkvKiogT2Zmc2V0IG9mIHRoZSB0aWxlIHN0YXRlIGRhdGEg YXJyYXkuICovCisJX191MzIgcXRzOworCisJLyogUG9pbnRlciB0byBhIHUzMiBhcnJheSBvZiB0 aGUgQk9zIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgdGhlIGpvYi4KKwkgKi8KKwlfX3U2NCBib19o YW5kbGVzOworCisJLyogTnVtYmVyIG9mIEJPIGhhbmRsZXMgcGFzc2VkIGluIChzaXplIGlzIHRo YXQgdGltZXMgNCkuICovCisJX191MzIgYm9faGFuZGxlX2NvdW50OworfTsKKworLyoqCisgKiBz dHJ1Y3QgZHJtX3YzZF93YWl0X2JvIC0gaW9jdGwgYXJndW1lbnQgZm9yIHdhaXRpbmcgZm9yCisg KiBjb21wbGV0aW9uIG9mIHRoZSBsYXN0IERSTV9WM0RfU1VCTUlUX0NMIG9uIGEgQk8uCisgKgor ICogVGhpcyBpcyB1c2VmdWwgZm9yIGNhc2VzIHdoZXJlIG11bHRpcGxlIHByb2Nlc3NlcyBtaWdo dCBiZQorICogcmVuZGVyaW5nIHRvIGEgQk8gYW5kIHlvdSB3YW50IHRvIHdhaXQgZm9yIGFsbCBy ZW5kZXJpbmcgdG8gYmUKKyAqIGNvbXBsZXRlZC4KKyAqLworc3RydWN0IGRybV92M2Rfd2FpdF9i byB7CisJX191MzIgaGFuZGxlOworCV9fdTMyIHBhZDsKKwlfX3U2NCB0aW1lb3V0X25zOworfTsK KworLyoqCisgKiBzdHJ1Y3QgZHJtX3YzZF9jcmVhdGVfYm8gLSBpb2N0bCBhcmd1bWVudCBmb3Ig Y3JlYXRpbmcgVjNEIEJPcy4KKyAqCisgKiBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHZhbHVlcyBm b3IgdGhlIGZsYWdzIGFyZ3VtZW50LCBidXQgaXQgbWF5IGJlCisgKiB1c2VkIGluIGEgZnV0dXJl IGV4dGVuc2lvbi4KKyAqLworc3RydWN0IGRybV92M2RfY3JlYXRlX2JvIHsKKwlfX3UzMiBzaXpl OworCV9fdTMyIGZsYWdzOworCS8qKiBSZXR1cm5lZCBHRU0gaGFuZGxlIGZvciB0aGUgQk8uICov CisJX191MzIgaGFuZGxlOworCS8qKgorCSAqIFJldHVybmVkIG9mZnNldCBmb3IgdGhlIEJPIGlu IHRoZSBWM0QgYWRkcmVzcyBzcGFjZS4gIFRoaXMgb2Zmc2V0CisJICogaXMgcHJpdmF0ZSB0byB0 aGUgRFJNIGZkIGFuZCBpcyB2YWxpZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBHRU0KKwkgKiBo YW5kbGUuCisJICoKKwkgKiBUaGlzIG9mZnNldCB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBub256ZXJv LCBzaW5jZSB2YXJpb3VzIEhXCisJICogdW5pdHMgdHJlYXQgMCBzcGVjaWFsbHkuCisJICovCisJ X191MzIgb2Zmc2V0OworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHJtX3YzZF9tbWFwX2JvIC0gaW9j dGwgYXJndW1lbnQgZm9yIG1hcHBpbmcgVjNEIEJPcy4KKyAqCisgKiBUaGlzIGRvZXNuJ3QgYWN0 dWFsbHkgcGVyZm9ybSBhbiBtbWFwLiAgSW5zdGVhZCwgaXQgcmV0dXJucyB0aGUKKyAqIG9mZnNl dCB5b3UgbmVlZCB0byB1c2UgaW4gYW4gbW1hcCBvbiB0aGUgRFJNIGRldmljZSBub2RlLiAgVGhp cworICogbWVhbnMgdGhhdCB0b29scyBsaWtlIHZhbGdyaW5kIGVuZCB1cCBrbm93aW5nIGFib3V0 IHRoZSBtYXBwZWQKKyAqIG1lbW9yeS4KKyAqCisgKiBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHZh bHVlcyBmb3IgdGhlIGZsYWdzIGFyZ3VtZW50LCBidXQgaXQgbWF5IGJlCisgKiB1c2VkIGluIGEg ZnV0dXJlIGV4dGVuc2lvbi4KKyAqLworc3RydWN0IGRybV92M2RfbW1hcF9ibyB7CisJLyoqIEhh bmRsZSBmb3IgdGhlIG9iamVjdCBiZWluZyBtYXBwZWQuICovCisJX191MzIgaGFuZGxlOworCV9f dTMyIGZsYWdzOworCS8qKiBvZmZzZXQgaW50byB0aGUgZHJtIG5vZGUgdG8gdXNlIGZvciBzdWJz ZXF1ZW50IG1tYXAgY2FsbC4gKi8KKwlfX3U2NCBvZmZzZXQ7Cit9OworCitlbnVtIGRybV92M2Rf cGFyYW0geworCURSTV9WM0RfUEFSQU1fVjNEX1VJRkNGRywKKwlEUk1fVjNEX1BBUkFNX1YzRF9I VUJfSURFTlQxLAorCURSTV9WM0RfUEFSQU1fVjNEX0hVQl9JREVOVDIsCisJRFJNX1YzRF9QQVJB TV9WM0RfSFVCX0lERU5UMywKKwlEUk1fVjNEX1BBUkFNX1YzRF9DT1JFMF9JREVOVDAsCisJRFJN X1YzRF9QQVJBTV9WM0RfQ09SRTBfSURFTlQxLAorCURSTV9WM0RfUEFSQU1fVjNEX0NPUkUwX0lE RU5UMiwKK307CisKK3N0cnVjdCBkcm1fdjNkX2dldF9wYXJhbSB7CisJX191MzIgcGFyYW07CisJ X191MzIgcGFkOworCV9fdTY0IHZhbHVlOworfTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBvZmZz ZXQgZm9yIHRoZSBCTyBpbiB0aGUgVjNEIGFkZHJlc3Mgc3BhY2UgZm9yIHRoaXMgRFJNIGZkLgor ICogVGhpcyBpcyB0aGUgc2FtZSB2YWx1ZSByZXR1cm5lZCBieSBkcm1fdjNkX2NyZWF0ZV9ibywg aWYgdGhhdCB3YXMgY2FsbGVkCisgKiBmcm9tIHRoaXMgRFJNIGZkLgorICovCitzdHJ1Y3QgZHJt X3YzZF9nZXRfYm9fb2Zmc2V0IHsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgb2Zmc2V0OworfTsK KworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9WM0Rf RFJNX0hfICovCi0tIAoyLjE3LjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWwK