Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759897AbYJVVPY (ORCPT ); Wed, 22 Oct 2008 17:15:24 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1754665AbYJVVO7 (ORCPT ); Wed, 22 Oct 2008 17:14:59 -0400 Received: from yx-out-2324.google.com ([74.125.44.28]:62544 "EHLO yx-out-2324.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756781AbYJVVOn (ORCPT ); Wed, 22 Oct 2008 17:14:43 -0400 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:mime-version:content-type; b=xwV6uXI8ROuzzWRhpv+1hhcIVdHlQv8etj5zwSBjG2Wt3INoco5UM7gqRY6axxBnoj idsRhh4EW714TbLS/otYd+dtoL0xFKjW/yzkBPDlH3LPTY+9Ux49MgM91/pSc5Jmb6OY viN26DcKkWxgkFQgBSrZ5Wb3YaiPTEIbQFYrc= Message-ID: Date: Wed, 22 Oct 2008 23:14:36 +0200 From: "Markus Rechberger" To: "Linux Kernel Mailing List" , em28xx Subject: [PATCH 1/7] Adding empia base driver Cc: acano@fastmail.fm, "Andre Kelmanson" , "Bouwsma Barry" , "Dan Kreiser" , "Frank Neuber" , "Jelle de Jong" , "John Stowers" , "Lukas Kuna" , "Stefan Vonolfen" , "Stephan Berberig" , "Thomas Giesecke" , "Vitaly Wool" , "Zhenyu Wang" MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_25604_18097724.1224710077109" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 581066 Lines: 7583 ------=_Part_25604_18097724.1224710077109 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline em2880-dvb: * supporting the digital part of Empia based devices, which includes ATSC, ISDB-T and DVB-T em28xx-aad.c: * alternative audio driver, can be used instead of em28xx-audio if alsa is not available or not compiled into the kernel, it provides a raw interface to the PCM samples em28xx-audio.c: * em28xx alsa driver and audio driver for FM radio em28xx-audioep.c: * em28xx alsa driver for devices which are set to vendor specific audio on interface 1, in that case snd-usb-audio will not attach to the interface and em28xx-audioep will be needed em28xx-cards.c: * card definition and initial setup of devices. em28xx-core.c: * core videohandling and VBI frame slicing em28xx-i2c.c: * i2c setup and GPIO setup handling of the devices (including em2888 based ones) em28xx-input.c: * currently mostly disabled since the linuxtv input handling is broken by design and racy em28xx-keymaps.c: * keymap references of some remotes (could be merged into ir-common, although as mentioned this should be in userland done by lirc). em28xx-video.c: * inode handling for analog TV, radio and VBI, also some device probing em28xx-webcam.c: * videology webcam specific i2c commands ------=_Part_25604_18097724.1224710077109 Content-Type: text/x-diff; name=em28xx-01.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_fmmgqpzu0 Content-Disposition: attachment; filename=em28xx-01.diff Y29tbWl0IGExODgxNmY2YjkxNjI5ZWI2MDM4YWVkNDgxNWU0ZmI5NGRkYzBhNmIKQXV0aG9yOiBN YXJrdXMgUmVjaGJlcmdlciA8bXJlY2hiZXJnZXJAc3VuZHRlay5kZT4KRGF0ZTogICBXZWQgT2N0 IDIyIDIxOjU2OjQ1IDIwMDggKzAyMDAKCiAgICBBZGRpbmcgZW1waWEgYmFzZSBkcml2ZXIKICAg IAogICAgZW0yODgwLWR2YjoKICAgICogc3VwcG9ydGluZyB0aGUgZGlnaXRhbCBwYXJ0IG9mIEVt cGlhIGJhc2VkIGRldmljZXMsIHdoaWNoIGluY2x1ZGVzIEFUU0MsIElTREItVCBhbmQgRFZCLVQK ICAgIAogICAgZW0yOHh4LWFhZC5jOgogICAgKiBhbHRlcm5hdGl2ZSBhdWRpbyBkcml2ZXIsIGNh biBiZSB1c2VkIGluc3RlYWQgb2YgZW0yOHh4LWF1ZGlvIGlmIGFsc2EgaXMgbm90IGF2YWlsYWJs ZQogICAgb3Igbm90IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgaXQgcHJvdmlkZXMgYSByYXcg aW50ZXJmYWNlIHRvIHRoZSBQQ00gc2FtcGxlcwogICAgCiAgICBlbTI4eHgtYXVkaW8uYzoKICAg ICogZW0yOHh4IGFsc2EgZHJpdmVyIGFuZCBhdWRpbyBkcml2ZXIgZm9yIEZNIHJhZGlvCiAgICAK ICAgIGVtMjh4eC1hdWRpb2VwLmM6CiAgICAqIGVtMjh4eCBhbHNhIGRyaXZlciBmb3IgZGV2aWNl cyB3aGljaCBhcmUgc2V0IHRvIHZlbmRvciBzcGVjaWZpYyBhdWRpbyBvbiBpbnRlcmZhY2UgMSwK ICAgIGluIHRoYXQgY2FzZSBzbmQtdXNiLWF1ZGlvIHdpbGwgbm90IGF0dGFjaCB0byB0aGUgaW50 ZXJmYWNlIGFuZCBlbTI4eHgtYXVkaW9lcCB3aWxsIGJlIG5lZWRlZAogICAgCiAgICBlbTI4eHgt Y2FyZHMuYzoKICAgICogY2FyZCBkZWZpbml0aW9uIGFuZCBpbml0aWFsIHNldHVwIG9mIGRldmlj ZXMuCiAgICAKICAgIGVtMjh4eC1jb3JlLmM6CiAgICAqIGNvcmUgdmlkZW9oYW5kbGluZyBhbmQg VkJJIGZyYW1lIHNsaWNpbmcKICAgIAogICAgZW0yOHh4LWkyYy5jOgogICAgKiBpMmMgc2V0dXAg YW5kIEdQSU8gc2V0dXAgaGFuZGxpbmcgb2YgdGhlIGRldmljZXMgKGluY2x1ZGluZyBlbTI4ODgg YmFzZWQgb25lcykKICAgIAogICAgZW0yOHh4LWlucHV0LmM6CiAgICAqIGN1cnJlbnRseSBtb3N0 bHkgZGlzYWJsZWQgc2luY2UgdGhlIGxpbnV4dHYgaW5wdXQgaGFuZGxpbmcgaXMgYnJva2VuIGJ5 IGRlc2lnbiBhbmQgcmFjeQogICAgCiAgICBlbTI4eHgta2V5bWFwcy5jOgogICAgKiBrZXltYXAg cmVmZXJlbmNlcyBvZiBzb21lIHJlbW90ZXMgKGNvdWxkIGJlIG1lcmdlZCBpbnRvIGlyLWNvbW1v biwgYWx0aG91Z2ggYXMgbWVudGlvbmVkCiAgICB0aGlzIHNob3VsZCBiZSBpbiB1c2VybGFuZCBk b25lIGJ5IGxpcmMpLgogICAgCiAgICBlbTI4eHgtdmlkZW8uYzoKICAgICogaW5vZGUgaGFuZGxp bmcgZm9yIGFuYWxvZyBUViwgcmFkaW8gYW5kIFZCSSwgYWxzbyBzb21lIGRldmljZSBwcm9iaW5n CiAgICAKICAgIGVtMjh4eC13ZWJjYW0uYzoKICAgICogdmlkZW9sb2d5IHdlYmNhbSBzcGVjaWZp YyBpMmMgY29tbWFuZHMKClNpZ25lZC1vZmYtYnk6IE1hcmt1cyBSZWNoYmVyZ2VyIDxtcmVjaGJl cmdlckBzdW5kdGVrLmRlPgoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZp ZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwppbmRleCA0NzEwMmMyLi5hNzI2YzU5IDEw MDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRp YS92aWRlby9LY29uZmlnCkBAIC03ODMsNiArNzgzLDggQEAgc291cmNlICJkcml2ZXJzL21lZGlh L3ZpZGVvL3B2cnVzYjIvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2Vt Mjh4eC9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vZW1waWEvS2NvbmZp ZyIKKwogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi9LY29uZmlnIgogCiBz b3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vS2NvbmZpZyIKZGlmZiAtLWdpdCBh L2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2Vm aWxlCmluZGV4IDE2OTYyZjMuLjkzNTczNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlk ZW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQpAQCAtNjQsNiAr NjQsNyBAQCBvYmotJChDT05GSUdfVklERU9fTUVZRSkgKz0gbWV5ZS5vCiBvYmotJChDT05GSUdf VklERU9fU0FBNzEzNCkgKz0gc2FhNzEzNC8KIG9iai0kKENPTkZJR19WSURFT19DWDg4KSArPSBj eDg4Lwogb2JqLSQoQ09ORklHX1ZJREVPX0VNMjhYWCkgKz0gZW0yOHh4Lworb2JqLSQoQ09ORklH X1ZJREVPX0VNUElBKSArPSBlbXBpYS8KIG9iai0kKENPTkZJR19WSURFT19VU0JWSVNJT04pICs9 IHVzYnZpc2lvbi8KIG9iai0kKENPTkZJR19WSURFT19UVlA1MTUwKSArPSB0dnA1MTUwLm8KIG9i ai0kKENPTkZJR19WSURFT19QVlJVU0IyKSArPSBwdnJ1c2IyLwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9tZWRpYS92aWRlby9lbXBpYS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbXBpYS9L Y29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZDBhYzMKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtcGlhL0tjb25maWcKQEAgLTAsMCAr MSw2MSBAQAorY29uZmlnIFZJREVPX0VNUElBCisJdHJpc3RhdGUgIkVtcGlhIEVNMjh4eCBVU0Ig dmlkZW8gY2FwdHVyZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQworCXNl bGVjdCBWSURFT19CVUYKKwlzZWxlY3QgVklERU9fVFVORVIKKwlzZWxlY3QgVklERU9fU0FBNzEx WCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCXNlbGVjdCBWSURFT19UVlA1MTUwIGlmIFZJ REVPX0hFTFBFUl9DSElQU19BVVRPCisJLS0taGVscC0tLQorCSAgVGhpcyBlbTI4eHggZHJpdmVy IGhhcyBiZWVuIHdvcmtlZCBvbiBzaW5jZSAyMDA2IGFuZCBjb25zdGFudGx5CisJICBpbXByb3Zl ZCB0byBzdXBwb3J0IHRoZSBsYXRlc3QgYXZhaWxhYmxlIGRldmljZXMgaW5jbHVkaW5nCisJICBk aWZmZXJlbnQgVFYgc3RhbmRhcmRzIGFzIHdlbGwgYXMgVkJJLgorCisJICB0aGUgZGlmZmVyZW5j ZSBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBvdGhlciBlbTI4eHggZHJpdmVyIGlzIHRoYXQKKwkgIGl0 J3Mgd2VsbCB0ZXN0ZWQgYW5kIHN1cHBvcnRzIG1vcmUgZGV2aWNlcy4KKworY29uZmlnIFZJREVP X0VNUElBX0RUVgorCXRyaXN0YXRlICJFbXBpYSBFTTI4OHgvRU0yNzV4IERWQi1UIHN1cHBvcnQi CisJZGVwZW5kcyBvbiBWSURFT19FTVBJQSAmJiBEVkJfQ09SRQorCXNlbGVjdCBGV19MT0FERVIK KwlzZWxlY3QgRFZCX1RVTkVSX01UMjA2MAorCXNlbGVjdCBEVkJfVFVORVJfUVQxMDEwCisJc2Vs ZWN0IERWQl9MR0RUMzMwNAorCXNlbGVjdCBEVkJfTVQzNTIgaWYgIURWQl9GRV9DVVNUT01JU0UK KwlzZWxlY3QgRFZCX1pMMTAzNTMgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0xH RFQzMzBYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9MR0RUMzMwNCBpZiAhRFZC X0ZFX0NVU1RPTUlTRQorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIEVtcGlhIGVtMjg4eC9l bTI4NzAgRFZCLVQvQVRTQyBhbmQgSVNEQi1UIGV4dGVuc2lvbgorCisJICBJZiB1bnN1cmUgc2F5 IE4uCisKK2NvbmZpZyBWSURFT19FTVBJQV9BVURJTworCXRyaXN0YXRlICJFbXBpYSBFTTI4eHgg VVNCIEF1ZGlvIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBWSURFT19FTVBJQQorCS0tLWhlbHAtLS0K KwkgIFRoaXMgaXMgYW4gYXVkaW8gZHJpdmVyIGZvciBFbTI4eFsxLzJdIGJhc2VkIHVzYiB2aWRl byBkZXZpY2VzLAorCSAgdGhpcyB3aWxsIGJlIHVzZWQgYnkgSGF1cHBhdWdlIEhWUiA5MDAgZm9y IGFuYWxvZ3VlIFRWCisJICBpbnN0ZWFkIG9mIHNuZC11c2ItYXVkaW8uCisKKwkgIFRvIGNvbXBp bGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxl IHdpbGwgYmUgY2FsbGVkIGVtMjh4eAorCitjb25maWcgVklERU9fRU1QSUFfQVVESU9FUAorCXRy aXN0YXRlICJFbXBpYSBFTTI4eHggVVNCIEF1ZGlvIHN1cHBvcnQgKHNlY29uZCBjb25maWd1cmF0 aW9uKSIKKwlkZXBlbmRzIG9uIFZJREVPX0VNUElBCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBh bm90aGVyIGF1ZGlvZHJpdmVyIGZvciBlbTI4eHggYmFzZWQgZGV2aWNlcyB3aGljaCBoYXZlCisJ ICBhIHZlbmRvciBzcGVjaWZpYyBhdWRpbyBpbnRlcmZhY2Ugb24gaW50ZXJmYWNlIDEuCisKKwkg IGNob29zZSB5ZXMgaWYgdW5zdXJlLCB0aGUgZHJpdmVyIHdpbGwgb25seSBhdHRhY2ggaWYgeW91 cgorCSAgRW1waWEgZGV2aWNlIGhhcyBzdWNoIGEgY29uZmlndXJhdGlvbgorCitjb25maWcgVklE RU9fRU1QSUFfQUFEX0FVRElPCisJdHJpc3RhdGUgIkVtcGlhIEVNMjh4eCBVU0IgQXVkaW8gc3Vw cG9ydCAobm90IGFsc2EgY29tcGF0aWJsZSkiCisJZGVwZW5kcyBvbiBWSURFT19FTVBJQQorCS0t LWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIGFkZHMgdmVuZG9yIHNwZWNpZmljIGF1ZGlvIHN1cHBv cnQgdG8gZW0yOHh4IGJhc2VkIGRldmljZXMKKwkgIEl0IGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVy bmF0aXZlIGlmIGFsc2EgaXMgbm90IGF2YWlsYWJsZSBvciBlbmFibGVkCisJICBpbiB0aGUga2Vy bmVsIChlZy4gdG8gc3VwcG9ydCBhdWRpbyB3aXRoIE9TUykuCisKKwkgIGNob29zZSBubyBpZiB1 bnN1cmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW1waWEvTWFrZWZpbGUgYi9k cml2ZXJzL21lZGlhL3ZpZGVvL2VtcGlhL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjllZTIzNzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3Zp ZGVvL2VtcGlhL01ha2VmaWxlCkBAIC0wLDAgKzEsMTkgQEAKK2VtMjh4eC1vYmpzICAgICA6PSBl bTI4eHgtdmlkZW8ubyBlbTI4eHgtaTJjLm8gZW0yOHh4LWNhcmRzLm8gZW0yOHh4LWNvcmUubyBc CisJCSAgIGVtMjh4eC1pbnB1dC5vIGVtMjh4eC13ZWJjYW0ubyBlbTI4eHgta2V5bWFwcy5vCisK K2VtMjh4eC1kdmItb2JqcyAgIDo9IGVtMjg4MC1kdmIubyAKKworb2JqLSQoQ09ORklHX1ZJREVP X0VNUElBKSArPSBlbTI4eHgubworb2JqLSQoQ09ORklHX1ZJREVPX0VNUElBX0FVRElPKSArPSBl bTI4eHgtYXVkaW8ubworb2JqLSQoQ09ORklHX1ZJREVPX0VNUElBX0FVRElPRVApICs9IGVtMjh4 eC1hdWRpb2VwLm8KK29iai0kKENPTkZJR19WSURFT19FTVBJQV9BQURfQVVESU8pICs9IGVtMjh4 eC1hYWQubworb2JqLSQoQ09ORklHX1ZJREVPX0VNUElBX0RUVikgKz0gZW0yOHh4LWR2Yi5vCitv YmotJChDT05GSUdfVklERU9fRU1QSUEpICs9IGN4MjU4NDMvCitvYmotJChDT05GSUdfVklERU9f RU1QSUFfRFRWKSArPSBsZ2R0MzMwNC8KK29iai0kKENPTkZJR19WSURFT19FTVBJQSkgKz0geGMz MDI4Lworb2JqLSQoQ09ORklHX1ZJREVPX0VNUElBKSArPSB4YzUwMDAvCisKK0VYVFJBX0NGTEFH UyArPSAtSWRyaXZlcnMvbWVkaWEvdmlkZW8KK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVk aWEvZHZiL2R2Yi1jb3JlCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9mcm9u dGVuZHMKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbXBpYS9lbTI4ODAtZHZiLmMgYi9kcml2ZXJz L21lZGlhL3ZpZGVvL2VtcGlhL2VtMjg4MC1kdmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5iZDM4MDE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRl by9lbXBpYS9lbTI4ODAtZHZiLmMKQEAgLTAsMCArMSwxMTM5IEBACisvKgorICogIEVtcGlhdGVj aCBlbTI4ODAgRFZCLVQgZXh0ZW5zaW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi8yMDA3 LzIwMDggTWFya3VzIFJlY2hiZXJnZXIgPG1yZWNoYmVyZ2VyQHN1bmR0ZWsuZGU+CisgKgorICog IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwg d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFz cyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgv aW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cisj aW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5j bHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgor I2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2lu Y2x1ZGUgImVtMjh4eC5oIgorCisjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KKyNpbmNsdWRlIDxt ZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorCisjaW5jbHVk ZSAiemwxMDM1My5oIgorI2luY2x1ZGUgIm10MzUyLmgiCisjaW5jbHVkZSAieGM1MDAwL3hjNTAw MF9jb250cm9sLmgiCisjaWZkZWYgTUlDUk9OQVNfRFJYMzk3NUQKKyNpbmNsdWRlICJkcngzOTcz ZC9kcngzOTczZF9kZW1vZC5oIgorI2VuZGlmCisjaW5jbHVkZSAibGdkdDMzMDQvbGdkdDMzMDQu aCIKKyNpbmNsdWRlICJxdDEwMTAuaCIKKyNpbmNsdWRlICJtdDIwNjAuaCIKKyNpZmRlZiBBRElN VFYxMDIKKyNpbmNsdWRlICJhZGltdHYxMDIvYWRpbXR2MTAyLmgiCisjZW5kaWYKKworI2luY2x1 ZGUgImxnZHQzMzB4LmgiCisjaW5jbHVkZSAic2hhcnAvczkyMV9tb2R1bGUuaCIKKworI2RlZmlu ZSBFTTI4ODBfRFZCX05VTV9QQUNLRVRTIDY0CisjZGVmaW5lIEVNMjg4MF9VUkJfQ09VTlQgMzIK KworI2lmIGRlZmluZWQgRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIKK0RWQl9ERUZJTkVf TU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOworI2VuZGlmCisKKworI2RlZmluZSB4YzMw Mjhfb2Zmc2V0XzhtaHogMjc1MDAwMDsKKyNkZWZpbmUgeGMzMDI4X29mZnNldF83bWh6IDIyNTAw MDA7CisjZGVmaW5lIHhjMzAyOF9vZmZzZXRfNm1oeiAyNzUwMDAwOworI2RlZmluZSB4YzMwMjhf b2Zmc2V0X2F0c2MgMTc1MDAwMDsKKworCitNT0RVTEVfREVTQ1JJUFRJT04oIkVtcGlhdGVjaCBl bTI4ODAgRFZCLVQgZXh0ZW5zaW9uIik7CitNT0RVTEVfQVVUSE9SKCJNYXJrdXMgUmVjaGJlcmdl ciA8bXJlY2hiZXJnZXJAZ21haWwuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisj aWZkZWYgTUlDUk9OQVNfRFJYMzk3NUQKK0RSWDM5NzNERGF0YV90IERSWDM5NzNERGF0YV9nID0g eworCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJMCwK KwkwLAorCTAsCisJMCwKKwlEUlhfVUlPX01PREVfRElTQUJMRSwKKwlEUlhfVUlPX01PREVfRElT QUJMRSwKKwl7CisJCURSWDM5NzNEX0FHQ19DVFJMX0FVVE8sCisJCTAsCisJCTAsCisJCTAsCisJ CTAsCisJCTAKKwl9LAorCXsKKwkJRFJYMzk3M0RfQUdDX0NUUkxfQVVUTywKKwkJMCwKKwkJMCwK KwkJMCwKKwkJMCwKKwkJMAorCX0sCisJRFJYMzk3M0RfSUZGSUxURVJfU0FXLAorCUZBTFNFLAor CURSWF9CQU5EV0lEVEhfOE1IWiwKKwlGQUxTRSwKKwlEUlgzOTczRF9BUFBFTlZfUE9SVEFCTEUs CisJVFJVRSwKKwlGQUxTRSwKKyNpZm5kZWYgX0NIXworCXsKKwkJIjAxMjM0NTY3ODkwIiwKKwkJ IjAxMjM0NTY3ODkwIgorCX0sCisJeworCQl7CisJCQlEUlhfTU9EVUxFX1VOS05PV04sCisJCQko Y2hhciAqKShOVUxMKSwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCShjaGFyICopKE5VTEwpCisJ CX0sCisJCXsKKwkJCURSWF9NT0RVTEVfVU5LTk9XTiwKKwkJCShjaGFyICopKE5VTEwpLAorCQkJ MCwKKwkJCTAsCisJCQkwLAorCQkJKGNoYXIgKikoTlVMTCkKKwkJfQorCX0sCisJeworCQl7CisJ CQkocERSWFZlcnNpb25fdCkoTlVMTCksCisJCQkocERSWFZlcnNpb25MaXN0X3QpKE5VTEwpCisJ CX0sCisJCXsKKwkJCShwRFJYVmVyc2lvbl90KShOVUxMKSwKKwkJCShwRFJYVmVyc2lvbkxpc3Rf dCkoTlVMTCkKKwkJfQorCX0sCisJRFJYMzk3M0RfU1BJTl9VTktOT1dOLAorCXsKKwl9LAorCUZB TFNFLAorCisjaWYgKERSWERfVFlQRV9CKQorCURSWDM5NzNEX0kyQ19JTklUX0FTRUwKKyNlbmRp ZgorCisKKworI2VuZGlmCit9OworCisvKioKKyAqIFx2YXIgRFJYMzk3M0REZWZhdWx0QWRkcl9n CisgKiBcYnJpZWYgRGVmYXVsdCBJMkMgYWRkcmVzcyBhbmQgZGV2aWNlIGlkZW50aWZpZXIuCisg Ki8KK0kyQ0RldmljZUFkZHJfdCBEUlgzOTczRERlZmF1bHRBZGRyX2cgPSB7CisjZGVmaW5lIERS WDM5NzNEX0RFRl9JMkNfQUREUiAoMHhlMCk+PjEKKwlEUlgzOTczRF9ERUZfSTJDX0FERFIsICAg ICAvKiBpMmMgYWRkcmVzcyAqLworI2RlZmluZSBEUlgzOTczRF9ERUZfREVNT0RfREVWX0lEICAg KDEpCisJRFJYMzk3M0RfREVGX0RFTU9EX0RFVl9JRCwgIC8qIGRldmljZSBpZCAqLworCU5VTEwg ICAgICAgLyogcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSAqLworfTsKKworLyoqCisgKiBcdmFyIERS WDM5NzNERGVmYXVsdENvbW1BdHRyX2cKKyAqIFxicmllZiBEZWZhdWx0IGNvbW1vbiBhdHRyaWJ1 dGVzIG9mIGEgZHJ4Mzk3M2QgZGVtb2R1bGF0b3IgaW5zdGFuY2UuCisgKi8KK0RSWENvbW1vbkF0 dHJfdCBEUlgzOTczRERlZmF1bHRDb21tQXR0cl9nID0geworCShwdThfdClOVUxMLAorCTAsCisJ VFJVRSwKKwk0NTYwLAorCTQ4MDAwTCwKKwkxMjAwMEwsCisJMEwsCisJRkFMU0UsCisJVFJVRSwK KwlUUlVFLAorCVRSVUUsCisJRkFMU0UsCisJRkFMU0UsCisJRkFMU0UsCisJRkFMU0UsCisJRkFM U0UsCisJRkFMU0UsCisJMzIwMDAwMDBVTCwKKwlGQUxTRSwKKwkocERSWFNjYW5QYXJhbV90KShO VUxMKSwKKwkwLAorCTAsCisJRkFMU0UsCisJMEwsCisJMEwsCisJMTAwLAorCURSWF9MT0NLRUQs CisJRkFMU0UsCisJRFJYX1BPV0VSX0RPV04sCisJMSwKKwkwTCwKKwkwTAorfTsKKworI2VuZGlm CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwg MDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZW0yODgwLWR2YiBkZWJ1ZyBsZXZlbCAo ZGVmYXVsdCBvZmYpIik7CisKKyNkZWZpbmUgZHByaW50ayhsdmwsIGZtdCwgYXJncy4uLikgaWYg KGRlYnVnID49IGx2bCkgZG8ge1wKKwlwcmludGsoZm10LCAjI2FyZ3MpOyB9IHdoaWxlICgwKQor CisKK3N0YXRpYyBpbnQgZW0yODgwX3NldF9hbHRlcm5hdGUoc3RydWN0IGVtMjg4MF9kdmIgKmR2 Yl9kZXYpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtF Uk5FTF9WRVJTSU9OKDIsIDYsIDE5KQorc3RhdGljIHZvaWQgZW0yODgwX2NvbXBsZXRlX2lycShz dHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpwdHJlZ3MpCit7CisjZWxzZQorc3RhdGlj IHZvaWQgZW0yODgwX2NvbXBsZXRlX2lycShzdHJ1Y3QgdXJiICp1cmIpCit7CisjZW5kaWYKKwlz dHJ1Y3QgZW0yODgwX2R2YiAqZHZiX2RldiA9IHVyYi0+Y29udGV4dDsKKwlpbnQgaTsKKwlpbnQg c3RhdHVzOworCisJaWYgKGR2Yl9kZXYgPT0gTlVMTCkgeworCQlkcHJpbnRrKDEsICJlbTI4ODAt ZGV2LmM6IGRldmljZSBub3QgdmFsaWQhXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChkZWJ1 ZyAmJiB1cmItPnN0YXR1cyA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIiVzOiV1OiVzKCk6IHN0 YXR1cyA9ICVpXG4iLCBfX0ZJTEVfXywKKwkJCQlfX0xJTkVfXywgX19mdW5jX18sIHVyYi0+c3Rh dHVzKTsKKwl9CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJCWNhc2UgLUVTSFVURE9XTjoK KwkJCXJldHVybjsKKwkJCWJyZWFrOworCX0KKworCWlmICh1cmItPnN0YXR1cyA9PSAtRU5PRU5U KQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsg aSsrKSB7CisJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyAhPSAwKSB7CisJCQlk cHJpbnRrKDEsICJlbTI4ODAtZHZiLmM6IHN0YXR1cyAhPSAwXG4iKTsKKwkJCWNvbnRpbnVlOwor CQl9IGVsc2UgaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA+IDApCisJ CQlkdmJfZG14X3N3ZmlsdGVyKCZkdmJfZGV2LT5kZW11eCwKKwkJCQkJdXJiLT50cmFuc2Zlcl9i dWZmZXIgKworCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCwKKwkJCQkJdXJiLT5p c29fZnJhbWVfZGVzY1tpXQorCQkJCQkuYWN0dWFsX2xlbmd0aCk7CisJfQorCisJc3RhdHVzID0g dXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKQorCQlkcHJpbnRr KDEsICJyZXN1Ym1pdHRpbmcgdXJiIGZhaWxlZCFcbiIpOworfQorCitzdGF0aWMgdm9pZCBlbTI4 ODBfc3RvcF9zdHJlYW0oc3RydWN0IGVtMjg4MF9kdmIgKmR2Yl9kZXYpCit7CisJaW50IGk7CisJ aW50IGFyZzsKKwlmb3IgKGkgPSAwOyBpIDwgRU0yODgwX0RWQl9OVU1fQlVGUzsgaSsrKSB7CisJ CWlmIChkdmJfZGV2LT51cmJbaV0pIHsKKwkJCXVzYl9raWxsX3VyYihkdmJfZGV2LT51cmJbaV0p OworCQkJaWYgKGR2Yl9kZXYtPnRyYW5zZmVyX2J1ZmZlcltpXSkgeworCQkJCXVzYl9idWZmZXJf ZnJlZShkdmJfZGV2LT51ZGV2LAorCQkJCQkJKEVNMjg4MF9EVkJfTlVNX1BBQ0tFVFMgKgorCQkJ CQkJIGR2Yl9kZXYtPmR0dl9wYWNrZXRzaXplKSwKKwkJCQkJCWR2Yl9kZXYtPnRyYW5zZmVyX2J1 ZmZlcltpXSwKKwkJCQkJCWR2Yl9kZXYtPnVyYltpXS0+dHJhbnNmZXJfZG1hKTsKKwkJCX0KKwkJ CXVzYl9mcmVlX3VyYihkdmJfZGV2LT51cmJbaV0pOworCQl9CisJCWR2Yl9kZXYtPnVyYltpXSA9 IE5VTEw7CisJCWR2Yl9kZXYtPnRyYW5zZmVyX2J1ZmZlcltpXSA9IE5VTEw7CisJfQorCWFyZz1F TTI4WFhfUkVHX09GRjsKKwlkdmJfZGV2LT5lbTI4eHhfZGV2LT5lbTI4eHhfZ3Bpb19jb250cm9s KGR2Yl9kZXYtPmVtMjh4eF9kZXYsIEVNMjhYWF9MRUQxX09OLCAmYXJnKTsKKworfQorCitzdGF0 aWMgaW50IGVtMjg4MF9zdGFydF9zdHJlYW0oc3RydWN0IGVtMjg4MF9kdmIgKmR2Yl9kZXYpCit7 CisJaW50IGksIGVyckNvZGU7CisJaW50IGFyZzsKKwljb25zdCBpbnQgc2Jfc2l6ZSA9IEVNMjg4 MF9EVkJfTlVNX1BBQ0tFVFMgKiBkdmJfZGV2LT5kdHZfcGFja2V0c2l6ZTsKKworCWRwcmludGso MSwgImVtMjg4MC1kdmIuYzogZ290IHN0YXJ0IHN0cmVhbSByZXF1ZXN0ICVzXG4iLCBfX2Z1bmNf Xyk7CisJYXJnPUVNMjhYWF9SRUdfT047CisJZHZiX2Rldi0+ZW0yOHh4X2Rldi0+ZW0yOHh4X2dw aW9fY29udHJvbChkdmJfZGV2LT5lbTI4eHhfZGV2LCBFTTI4WFhfTEVEMV9PTiwgJmFyZyk7CisK KwllbTI4ODBfc2V0X2FsdGVybmF0ZShkdmJfZGV2KTsKKworCS8qIGFsbG9jYXRlIHVyYnMgKi8K KworCWZvciAoaSA9IDA7IGkgPCBFTTI4ODBfRFZCX05VTV9CVUZTOyBpKyspIHsKKwkJc3RydWN0 IHVyYiAqdXJiOworCQlpbnQgaiwgazsKKwkJLyogYWxsb2NhdGUgdHJhbnNmZXIgYnVmZmVyICov CisJCXVyYiA9IHVzYl9hbGxvY191cmIoRU0yODgwX0RWQl9OVU1fUEFDS0VUUywgR0ZQX0tFUk5F TCk7CisJCWlmICghdXJiKSB7CisJCQlkcHJpbnRrKDEsICJjYW5ub3QgYWxsb2MgdXJiICVpXG4i LCBpKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWR2Yl9kZXYtPnRyYW5zZmVyX2J1ZmZl cltpXSA9CisJCQl1c2JfYnVmZmVyX2FsbG9jKGR2Yl9kZXYtPnVkZXYsIHNiX3NpemUsCisJCQkJ CUdGUF9LRVJORUwsICZ1cmItPnRyYW5zZmVyX2RtYSk7CisKKwkJaWYgKCFkdmJfZGV2LT50cmFu c2Zlcl9idWZmZXJbaV0pIHsKKwkJCWRwcmludGsoMSwgInVuYWJsZSB0byBhbGxvY2F0ZSAlaSBi eXRlcyBmb3IgdHJhbnNmZXIiCisJCQkJICAgImJ1ZmZlciAlaVxuIiwgc2Jfc2l6ZSwgaSk7CisK KwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbXNldChkdmJfZGV2LT50cmFuc2Zlcl9idWZm ZXJbaV0sIDAsIHNiX3NpemUpOworCQl1cmItPmRldiA9IGR2Yl9kZXYtPnVkZXY7CisJCXVyYi0+ Y29udGV4dCA9IGR2Yl9kZXY7CisJCXVyYi0+cGlwZSA9IHVzYl9yY3Zpc29jcGlwZShkdmJfZGV2 LT51ZGV2LCAweDg0KTsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJ dXJiLT5pbnRlcnZhbCA9IDE7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gZHZiX2Rldi0+dHJh bnNmZXJfYnVmZmVyW2ldOworCQl1cmItPmNvbXBsZXRlID0gZW0yODgwX2NvbXBsZXRlX2lycTsK KwkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IEVNMjg4MF9EVkJfTlVNX1BBQ0tFVFM7CisJCXVy Yi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHNiX3NpemU7CisJCWZvciAoaiA9IGsgPSAwOyBq IDwgRU0yODgwX0RWQl9OVU1fUEFDS0VUUzsKKwkJCQlqKyssIGsgKz0gZHZiX2Rldi0+ZHR2X3Bh Y2tldHNpemUpIHsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ub2Zmc2V0ID0gazsKKwkJCXVy Yi0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0KKwkJCQlkdmJfZGV2LT5kdHZfcGFja2V0c2l6 ZTsKKwkJfQorCQlkdmJfZGV2LT51cmJbaV0gPSB1cmI7CisJfQorCisJLyogc3VibWl0IHVyYnMg Ki8KKwlmb3IgKGkgPSAwOyBpIDwgRU0yODgwX0RWQl9OVU1fQlVGUzsgaSsrKSB7CisJCWVyckNv ZGUgPSB1c2Jfc3VibWl0X3VyYihkdmJfZGV2LT51cmJbaV0sIEdGUF9LRVJORUwpOworCQlpZiAo ZXJyQ29kZSkgeworCQkJZHByaW50aygxLCAic3VibWl0IG9mIHVyYiAlaSBmYWlsZWQgKGVycm9y PSVpKVxuIiwKKwkJCQkJaSwKKwkJCQkJZXJyQ29kZSk7CisJCQlyZXR1cm4gZXJyQ29kZTsKKwkJ fQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlbTI4ODBfc2V0X2FsdGVybmF0ZShz dHJ1Y3QgZW0yODgwX2R2YiAqZHZiX2RldikKK3sKKwlpbnQgZXJyQ29kZTsKKwllcnJDb2RlID0g dXNiX3NldF9pbnRlcmZhY2UoZHZiX2Rldi0+dWRldiwgZHZiX2Rldi0+ZW0yOHh4X2Rldi0+dXNi X2ludGVyZmFjZSwgMSk7CisKKwlyZXR1cm4gZXJyQ29kZTsKK30KKworc3RhdGljIGludCBlbTI4 ODBfc3RhcnRfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmR2YmRteGZlZWQpCit7CisJc3Ry dWN0IGR2Yl9kZW11eCAqZGVtdXggPSBkdmJkbXhmZWVkLT5kZW11eDsKKwlzdHJ1Y3QgZW0yODgw X2R2YiAqZHZiX2RldiA9IGRlbXV4LT5wcml2OworCWRwcmludGsoMSwgImVtMjg4MC1kdmIuYzog Z290IHN0YXJ0IGZlZWQgcmVxdWVzdCAlc1xuIiwgX19mdW5jX18pOworCisJaWYgKG11dGV4X2xv Y2tfaW50ZXJydXB0aWJsZSgmZHZiX2Rldi0+c2VtKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsK KworCWlmIChkdmJfZGV2LT5zdHJlYW1pbmcgPT0gMCkKKwkJZW0yODgwX3N0YXJ0X3N0cmVhbShk dmJfZGV2KTsKKworCWR2Yl9kZXYtPnN0cmVhbWluZysrOworCW11dGV4X3VubG9jaygmZHZiX2Rl di0+c2VtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlbTI4ODBfc3RvcF9mZWVkKHN0 cnVjdCBkdmJfZGVtdXhfZmVlZCAqZHZiZG14ZmVlZCkKK3sKKwlzdHJ1Y3QgZHZiX2RlbXV4ICpk ZW11eCA9IGR2YmRteGZlZWQtPmRlbXV4OworCXN0cnVjdCBlbTI4ODBfZHZiICpkdmJfZGV2ID0g ZGVtdXgtPnByaXY7CisKKwlkcHJpbnRrKDEsICJlbTI4ODAtZHZiLmM6IGdvdCBzdG9wIGZlZWQg cmVxdWVzdCAlc1xuIiwgX19mdW5jX18pOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJs ZSgmZHZiX2Rldi0+c2VtKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwlpZiAoMCA9PSAtLWR2 Yl9kZXYtPnN0cmVhbWluZykKKwkJZW0yODgwX3N0b3Bfc3RyZWFtKGR2Yl9kZXYpOworCW11dGV4 X3VubG9jaygmZHZiX2Rldi0+c2VtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlbTI4 eHhfdHNfYnVzX2N0cmxfaW50KHN0cnVjdCBlbTI4eHggKmRldiwgaW50IGFjcXVpcmUpCit7CisJ dTggZ3BpbzsKKwlncGlvID0gZGV2LT5lbTI4eHhfcmVhZF9yZWcoZGV2LCAwNCk7CisJZ3BpbyAm PSB+KCh1OCkweDMpOworCisJaWYgKGFjcXVpcmUgPT0gMSkKKwkJZ3BpbyB8PSAxOworCisJcmV0 dXJuIGRldi0+ZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA0LCAmZ3BpbywgMSk7Cit9CisKK3N0 YXRpYyBpbnQgZW0yOHh4X3RzX2J1c19jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQg YWNxdWlyZSkKK3sKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBmZS0+ZHZiLT5wcml2OworCXJldHVy biBkZXYtPmVtMjh4eF9hY3F1aXJlKGRldiwgRU0yOFhYX0RWQlQsIGFjcXVpcmUpOworfQorCitz dGF0aWMgc3RydWN0IHpsMTAzNTNfY29uZmlnIGVtMjg4MF96bDEwMzUzX2RldiA9IHsKKwkuZGVt b2RfYWRkcmVzcyA9ICgweDFlID4+IDEpLAorCS5ub190dW5lciA9IDEsCisJLnBhcmFsbGVsX3Rz ID0gMSwKKwkuaWYyID0gNDU2MDAKK307CisKK3N0cnVjdCBiY29kZSB7CisJaW50IHJlZzsKKwlj aGFyICp0eHQ7CisJaW50IGxlbjsKKwlpbnQgZGVsYXk7Cit9OworCisKK3N0YXRpYyBpbnQgbXQz NTJfcGlubmFjbGVfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlpbnQgaTsKKwlz dHJ1Y3QgYmNvZGUgemxjb25mW109eworCQkJezB4MWUsIlx4OGFceDJjIiwyLDB9LAorCQkJezB4 MWUsIlx4ODlceDM4IiwyLDB9LAorCQkJezB4MWUsIlx4NTBceDgwIiwyLDB9LAorCQkJezB4MWUs Ilx4OGVceDQwIiwyLDB9LAorCQkJezB4MWUsIlx4NjlceDAwIiwyLDB9LAorCQkJezB4MWUsIlx4 NmFceGZmIiwyLDB9LAorCQkJezB4MWUsIlx4NmJceGZmIiwyLDB9LAorCQkJezB4MWUsIlx4NmNc eDAwIiwyLDB9LAorCQkJezB4MWUsIlx4NmRceGZmIiwyLDB9LAorCQkJezB4MWUsIlx4NmVceDAw IiwyLDB9LAorCQkJezB4MWUsIlx4NmZceDQwIiwyLDB9LAorCQkJezB4MWUsIlx4NzBceDQwIiwy LDB9LAorCQkJezB4MWUsIlx4NjhceGEwIiwyLDB9LAorCisJCQl7MHgxZSwiXHg1Nlx4MzEiLDIs MH0sIC8vIHNldCBpbnB1dCBmcmVxdWVuY3kKKwkJCXsweDFlLCJceDU3XHhiOCIsMiwwfSwKKwkJ CXsweDFlLCJceDc1XHgzMyIsMiwwfSwKKworCQkJezB4MWUsIlx4N2NceDAwIiwyLDB9LAorCQkJ ezB4MWUsIlx4N2RceDRkIiwyLDB9LAorCQkJezB4MWUsIlx4YjVceDdhIiwyLDB9LAorCQkJezB4 MWUsIlx4NTFceDQwIiwyLDB9LAorCQkJezB4MWUsIlx4NTJceDgwIiwyLDB9LAorCQkJezB4MWUs Ilx4NTNceDUwIiwyLDB9LAorCQkJezB4MWUsIlx4NWRceDAxIiwyLDB9LAorCQkJe30KKwl9Owor CWZvcihpPTA7emxjb25mW2ldLnR4dDtpKyspCisJCWZlLT5vcHMud3JpdGUoZmUsIHpsY29uZltp XS50eHQsemxjb25mW2ldLmxlbik7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBt dDM1Ml9jb25maWcgZW0yODgwX210MzUyX2RldiA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9ICgweDFl ID4+IDEpLAorCS5ub190dW5lciA9IDEsCisJLy8ucGFyYWxsZWxfdHMgPSAxLAorCS5pZjIgPSA0 NTYwMCwKKwkuZGVtb2RfaW5pdCA9IG10MzUyX3Bpbm5hY2xlX2luaXQsCit9OworCisKK3N0YXRp YyBzdHJ1Y3QgemwxMDM1M19jb25maWcgZW0yODgwX3psMTAzNTNfcGlubmFjbGUgPSB7CisJLmRl bW9kX2FkZHJlc3MgPSAoMHgxZSA+PiAxKSwKKwkubm9fdHVuZXIgPSAxLAorCS5wYXJhbGxlbF90 cyA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHpsMTAzNTNfY29uZmlnIGVtMjg4MF9rd29ybGRf MzU1dV9kZXYgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAoMHgxZSA+PiAxKSwKKwkubm9fdHVuZXIg PSAxLAorCS5wYXJhbGxlbF90cyA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IGxnZHQzMzB4X2Nv bmZpZyBlbTI4ODBfbGdkdDMzMDNfZGV2ID0geworCS5kZW1vZF9hZGRyZXNzID0gMHgwZSwKKwku ZGVtb2RfY2hpcCA9IExHRFQzMzAzCit9OworCitzdGF0aWMgc3RydWN0IG10MjA2MF9jb25maWcg ZW0yODcwX210MjA2MF9jb25maWcgPSB7CisJLmkyY19hZGRyZXNzID0gMHg2MAorfTsKKworc3Rh dGljIHN0cnVjdCBxdDEwMTBfY29uZmlnIGVtMjg3MF9xdDEwMTBfY29uZmlnID0geworCS5pMmNf YWRkcmVzcyA9IDB4NjIKK307CisKK3N0YXRpYyBpbnQga3dvcmxkMzU1dV9pMmNfZ2F0ZV9jdHJs KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCB6bDEwMzUz X3N0YXRlIHsKKwkJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CisJCXN0cnVjdCBkdmJfZnJvbnRl bmQgZnJvbnRlbmQ7CisKKwkJc3RydWN0IHpsMTAzNTNfY29uZmlnIGNvbmZpZzsKKworCQllbnVt IGZlX2JhbmR3aWR0aCBiYW5kd2lkdGg7CisJfTsKKwlzdHJ1Y3QgemwxMDM1M19zdGF0ZSAqc3Rh dGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCXN0cnVjdCBlbTI4eHggKmRldiA9IHN0YXRl LT5pMmMtPmFsZ29fZGF0YTsKKworCXJldHVybiBlbTI4eHhfdHNfYnVzX2N0cmxfaW50KGRldiwg ZW5hYmxlKTsKK30KKworc3RhdGljIHN0cnVjdCBsZ2R0MzMwNF9jb25maWcgbGdkdDMzMDRfYXRz Y19jb25maWcgPSB7CisJLmkyY19hZGRyZXNzID0gMHgwZQorfTsKKworc3RhdGljIGludCBlbTI4 eHhfc2V0X3BhcmFtcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJc3RydWN0IGR2Yl9mcm9u dGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCit7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gZmUtPmR2 Yi0+cHJpdjsKKwlzdHJ1Y3QgZW0yODgwX2R2YiAqZHZiZGV2ID0gZGV2LT5kdmJfZGV2OworCWlu dCBpOworCXVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5ID0gcGFyYW1zLT5mcmVxdWVuY3k7CisJc3Ry dWN0IGR2Yl9vZmRtX3BhcmFtZXRlcnMgKm9wID0gJnBhcmFtcy0+dS5vZmRtOworCisJaWYgKCFk ZXYtPnR1bmVyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoZmUtPm9wcy5pbmZvLnR5 cGUpIHsKKwljYXNlIEZFX09GRE06CisJCWlmIChkZXYtPmR2Ym5vcm0tPmJhbmR3aWR0aCAhPQor CQkJCW9wLT5iYW5kd2lkdGgpIHsKKwkJCWZvciAoaSA9IDA7IGRldi0+Ym9hcmQtPmR2Ym5vcm1z W2ldLnR2X21vZGUgfHwgZGV2LT5ib2FyZC0+ZHZibm9ybXNbaV0uaW5kZXg7IGkrKykgeworCQkJ CWlmIChkZXYtPmJvYXJkLT5kdmJub3Jtc1tpXS5iYW5kd2lkdGggPT0gb3AtPmJhbmR3aWR0aCkg eworCQkJCQlzd2l0Y2ggKGRldi0+dHVuZXJfdHlwZSkgeworCQkJCQljYXNlIFRVTkVSX1hDRUlW RV9YQzMwMjg6CisJCQkJCXsKKwkJCQkJCXN0cnVjdCB4YzMwMjhfaW5pdF9jbWQgY21kOworCQkJ CQkJZHZiZGV2LT5id19pbmRleCA9IGk7CisJCQkJCQljbWQubmV3X3R2X21vZGVfcHRyID0gZGV2 LT5ib2FyZC0+ZHZibm9ybXNbaV0udHZfbW9kZTsKKwkJCQkJCWNtZC5uZXdfY2hhbm5lbF9tYXBf cHRyID0gZGV2LT5ib2FyZC0+ZHZibm9ybXNbaV0uY2hhbm5lbG1hcDsKKwkJCQkJCWRldi0+ZHZi bm9ybSA9ICZkZXYtPmJvYXJkLT5kdmJub3Jtc1tpXTsKKwkJCQkJCWlmIChkZXYtPnR1bmVyLT50 dW5lcl9jbWQpCisJCQkJCQkJZGV2LT50dW5lci0+dHVuZXJfY21kKGRldi0+dHVuZXIsIFhDMzAy OF9JTklUX1RVTkVSLCAmY21kKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgVFVO RVJfWENFSVZFX1hDNTAwMDoKKwkJCQkJeworCQkJCQkJc3RydWN0IHhjX3N0ZF9jb25mIGNtZDsK KwkJCQkJCWR2YmRldi0+YndfaW5kZXggPSBpOworCQkJCQkJY21kLmluZGV4ID0gZGV2LT5ib2Fy ZC0+ZHZibm9ybXNbaV0uaW5kZXg7CisJCQkJCQlkZXYtPmR2Ym5vcm0gPSAmZGV2LT5ib2FyZC0+ ZHZibm9ybXNbaV07CisJCQkJCQlkZXYtPnR1bmVyLT50dW5lcl9jbWQoZGV2LT50dW5lciwgWEM1 MDAwX1NFVF9NT0RFLCAmY21kKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCX0KKwkJCQkJ YnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKGRldi0+dHVuZXItPnNldF9mcmVxdWVu Y3kpIHsKKwkJCXN3aXRjaCAocGFyYW1zLT51Lm9mZG0uYmFuZHdpZHRoKSB7CisJCQljYXNlIEJB TkRXSURUSF9BVVRPOgorCQkJY2FzZSBCQU5EV0lEVEhfOF9NSFo6CisJCQkJZnJlcXVlbmN5IC09 IHhjMzAyOF9vZmZzZXRfOG1oejsKKwkJCQlicmVhazsKKwkJCWNhc2UgQkFORFdJRFRIXzdfTUha OgorCQkJCWZyZXF1ZW5jeSAtPSB4YzMwMjhfb2Zmc2V0XzdtaHo7CisJCQkJYnJlYWs7CisJCQlj YXNlIEJBTkRXSURUSF82X01IWjoKKwkJCQlmcmVxdWVuY3kgLT0geGMzMDI4X29mZnNldF82bWh6 OworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJ CWRldi0+dHVuZXItPnNldF9mcmVxdWVuY3koZGV2LT50dW5lciwgZnJlcXVlbmN5KTsKKwkJCWRl di0+ZGN0bF9mcmVxID0gZnJlcXVlbmN5OworCQl9CisJCWJyZWFrOworCWNhc2UgRkVfUUFNOgor CQlzd2l0Y2ggKGRldi0+dHVuZXJfdHlwZSkgeworCQljYXNlIFRVTkVSX1hDRUlWRV9YQzMwMjg6 CisJCXsKKwkJCXN0cnVjdCB4YzMwMjhfaW5pdF9jbWQgY21kOworCQkJZHZiZGV2LT5id19pbmRl eCA9IDA7CisJCQljbWQubmV3X3R2X21vZGVfcHRyID0gZGV2LT5ib2FyZC0+cWFtbm9ybXNbMF0u dHZfbW9kZTsKKwkJCWNtZC5uZXdfY2hhbm5lbF9tYXBfcHRyID0gZGV2LT5ib2FyZC0+cWFtbm9y bXNbMF0uY2hhbm5lbG1hcDsKKwkJCWRldi0+cWFtbm9ybSA9ICZkZXYtPmJvYXJkLT5xYW1ub3Jt c1swXTsKKwkJCWlmIChkZXYtPnR1bmVyLT50dW5lcl9jbWQpCisJCQkJZGV2LT50dW5lci0+dHVu ZXJfY21kKGRldi0+dHVuZXIsIFhDMzAyOF9JTklUX1RVTkVSLCAmY21kKTsKKwkJCWJyZWFrOwor CQl9CisJCWNhc2UgVFVORVJfWENFSVZFX1hDNTAwMDoKKwkJeworCQkJc3RydWN0IHhjX3N0ZF9j b25mIGNtZDsKKwkJCWR2YmRldi0+YndfaW5kZXggPSAwOworCQkJY21kLmluZGV4ID0gZGV2LT5i b2FyZC0+YXRzY25vcm1zWzBdLmluZGV4OworCQkJZGV2LT5hdHNjbm9ybSA9ICZkZXYtPmJvYXJk LT5hdHNjbm9ybXNbMF07CisJCQlkZXYtPnR1bmVyLT50dW5lcl9jbWQoZGV2LT50dW5lciwgWEM1 MDAwX1NFVF9NT0RFLCAmY21kKTsKKwkJCWJyZWFrOworCQl9CisJCX0KKwkJZnJlcXVlbmN5IC09 IHhjMzAyOF9vZmZzZXRfYXRzYzsKKworCQlkZXYtPnR1bmVyLT5zZXRfZnJlcXVlbmN5KGRldi0+ dHVuZXIsIGZyZXF1ZW5jeSk7CisJCWRldi0+ZGN0bF9mcmVxID0gZnJlcXVlbmN5OworCQlicmVh azsKKwljYXNlIEZFX0FUU0M6CisJCXN3aXRjaCAoZGV2LT50dW5lcl90eXBlKSB7CisJCWNhc2Ug VFVORVJfWENFSVZFX1hDMzAyODoKKwkJeworCQkJc3RydWN0IHhjMzAyOF9pbml0X2NtZCBjbWQ7 CisJCQlkdmJkZXYtPmJ3X2luZGV4ID0gMDsKKwkJCWNtZC5uZXdfdHZfbW9kZV9wdHIgPSBkZXYt PmJvYXJkLT5hdHNjbm9ybXNbMF0udHZfbW9kZTsKKwkJCWNtZC5uZXdfY2hhbm5lbF9tYXBfcHRy ID0gZGV2LT5ib2FyZC0+YXRzY25vcm1zWzBdLmNoYW5uZWxtYXA7CisJCQlkZXYtPmF0c2Nub3Jt ID0gJmRldi0+Ym9hcmQtPmF0c2Nub3Jtc1swXTsKKwkJCWlmIChkZXYtPnR1bmVyLT50dW5lcl9j bWQpCisJCQkJZGV2LT50dW5lci0+dHVuZXJfY21kKGRldi0+dHVuZXIsIFhDMzAyOF9JTklUX1RV TkVSLCAmY21kKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgVFVORVJfWENFSVZFX1hDNTAwMDoK KwkJeworCQkJc3RydWN0IHhjX3N0ZF9jb25mIGNtZDsKKwkJCWR2YmRldi0+YndfaW5kZXggPSAw OworCQkJY21kLmluZGV4ID0gZGV2LT5ib2FyZC0+YXRzY25vcm1zWzBdLmluZGV4OworCQkJZGV2 LT5hdHNjbm9ybSA9ICZkZXYtPmJvYXJkLT5hdHNjbm9ybXNbMF07CisJCQlkZXYtPnR1bmVyLT50 dW5lcl9jbWQoZGV2LT50dW5lciwgWEM1MDAwX1NFVF9NT0RFLCAmY21kKTsKKwkJCWJyZWFrOwor CQl9CisJCX0KKworCQlmcmVxdWVuY3kgLT0geGMzMDI4X29mZnNldF9hdHNjOworCQlkZXYtPnR1 bmVyLT5zZXRfZnJlcXVlbmN5KGRldi0+dHVuZXIsIGZyZXF1ZW5jeSk7CisJCWRldi0+ZGN0bF9m cmVxID0gZnJlcXVlbmN5OworCQlicmVhazsKKwljYXNlIEZFX1FQU0s6CisJCXByaW50ayhLRVJO X0lORk8iRkVfUVBTSyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZFxuIik7CisJCWJyZWFrOworCX0K KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVtMjh4eF9nZXRfZnJlcXVlbmN5KHN0cnVj dCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmZyZXF1ZW5jeSkKK3sKKwlzdHJ1Y3QgZW0yOHh4ICpk ZXYgPSBmZS0+ZHZiLT5wcml2OworCSpmcmVxdWVuY3kgPSBkZXYtPmRjdGxfZnJlcTsKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBlbTI4eHhfZ2V0X2JhbmR3aWR0aChzdHJ1Y3QgZHZiX2Zy b250ZW5kICpmZSwgdTMyICpiYW5kd2lkdGgpCit7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gZmUt PmR2Yi0+cHJpdjsKKwlzdHJ1Y3QgZW0yODgwX2R2YiAqZHZiZGV2ID0gZGV2LT5kdmJfZGV2Owor CSpiYW5kd2lkdGggPSAodTMyKWRldi0+Ym9hcmQtPmR2Ym5vcm1zW2R2YmRldi0+YndfaW5kZXhd LmJhbmR3aWR0aDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlbTI4eHhfZHZiX2luaXQo c3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gZmUtPmR2 Yi0+cHJpdjsKKwlpbnQgZ3Bpb19hcmc7CisKKwlwcmludGsoS0VSTl9JTkZPImVtMjh4eF9kdmJf aW5pdFxuIik7CisKKwlpZiAoZGV2LT5tb2RlICE9IFY0TDJfVFVORVJfRElHSVRBTF9UVikgewor CQlwcmludGsoS0VSTl9JTkZPInN3aXRjaGluZyBvdmVyIGZyb20gJWRcbiIsIGRldi0+bW9kZSk7 CisJCWdwaW9fYXJnID0gRU0yOFhYX1JFR19PRkY7CisJCWRldi0+ZW0yOHh4X2dwaW9fY29udHJv bChkZXYsIEVNMjhYWF9BTkFMT0dfT04sICAgICZncGlvX2FyZyk7CisKKwkJZ3Bpb19hcmcgPSBF TTI4WFhfUkVHX09OOworCQlkZXYtPmVtMjh4eF9ncGlvX2NvbnRyb2woZGV2LCBFTTI4WFhfVFMx X09OLCAgICAgICAmZ3Bpb19hcmcpOworCQlkZXYtPmVtMjh4eF9ncGlvX2NvbnRyb2woZGV2LCBF TTI4WFhfVFVORVIxX09OLCAgICAmZ3Bpb19hcmcpOworCQlkZXYtPmVtMjh4eF9ncGlvX2NvbnRy b2woZGV2LCBFTTI4WFhfREVNT0QxX1JFU0VULCBOVUxMKTsKKwkJbWRlbGF5KDEwMCk7CisJfQor CWRldi0+bW9kZSA9IFY0TDJfVFVORVJfRElHSVRBTF9UVjsKKwltc2xlZXAoMTAwKTsKKwlzd2l0 Y2ggKGRldi0+dHVuZXJfdHlwZSkgeworCWNhc2UgVFVORVJfWENFSVZFX1hDMzAyODoKKwl7CisJ CXN0cnVjdCB4YzMwMjhfaW5pdF9jbWQgY21kOworCQlpZiAoZGV2LT5kZXZfbW9kZXMgJiBFTTI4 WFhfRFZCVCkgeworCQkJY21kLm5ld190dl9tb2RlX3B0ciA9IGRldi0+ZHZibm9ybS0+dHZfbW9k ZTsKKwkJCWNtZC5uZXdfY2hhbm5lbF9tYXBfcHRyID0gZGV2LT5kdmJub3JtLT5jaGFubmVsbWFw OworCQl9IGVsc2UgaWYgKGRldi0+ZGV2X21vZGVzICYgRU0yOFhYX0FUU0MpIHsKKwkJCWNtZC5u ZXdfdHZfbW9kZV9wdHIgPSBkZXYtPmF0c2Nub3JtLT50dl9tb2RlOworCQkJY21kLm5ld19jaGFu bmVsX21hcF9wdHIgPSBkZXYtPmF0c2Nub3JtLT5jaGFubmVsbWFwOworCQl9CisJCQkKKwkJaWYg KGRldi0+dHVuZXIgJiYgZGV2LT50dW5lci0+dHVuZXJfY21kKQorCQkJZGV2LT50dW5lci0+dHVu ZXJfY21kKGRldi0+dHVuZXIsIFhDMzAyOF9JTklUX1RVTkVSLCAmY21kKTsKKwkJYnJlYWs7CisJ fQorCWNhc2UgVFVORVJfWENFSVZFX1hDNTAwMDoKKwl7CisJCXN0cnVjdCB4Y19zdGRfY29uZiBj bWQ7CisJCWlmIChkZXYtPmRldl9tb2RlcyAmIEVNMjhYWF9EVkJUKSB7CisJCQljbWQuaW5kZXgg PSBkZXYtPmR2Ym5vcm0tPmluZGV4OworCQl9IGVsc2UgaWYgKGRldi0+ZGV2X21vZGVzICYgRU0y OFhYX0FUU0MpIHsKKwkJCWNtZC5pbmRleCA9IGRldi0+YXRzY25vcm0tPmluZGV4OworCQl9CisK KwkJcHJpbnRrKEtFUk5fSU5GTyJpbml0aWFsaXppbmc6ICVkXG4iLCBkZXYtPmR2Ym5vcm0tPmlu ZGV4KTsKKwkJZGV2LT50dW5lci0+dHVuZXJfY21kKGRldi0+dHVuZXIsIFhDNTAwMF9JTklUX1RV TkVSLCBOVUxMKTsKKworCQlpZiAoZGV2LT50dW5lciAmJiBkZXYtPnR1bmVyLT50dW5lcl9jbWQp CisJCQlkZXYtPnR1bmVyLT50dW5lcl9jbWQoZGV2LT50dW5lciwgWEM1MDAwX1NFVF9NT0RFLCAm Y21kKTsKKwl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZW0yOHh4X3M5MjFf aW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBm ZS0+ZHZiLT5wcml2OworCXN0cnVjdCBlbTI4ODBfZHZiICpkdmJkZXYgPSBkZXYtPmR2Yl9kZXY7 CisJc3dpdGNoIChkZXYtPmVtX3R5cGUpIHsKKwljYXNlIEVNMjg3NToKKwkJZGV2LT5lbTI4eHhf d3JpdGVfcmVnc19yZXEoZGV2LCAweDAwLCAweDVmLCAiXHgwMSIsIDEpOworCQlicmVhazsKKwlk ZWZhdWx0OgorCQlicmVhazsKKwl9CisJaWYgKGR2YmRldi0+aW5pdF9vdmVycmlkZSkKKwkJZHZi ZGV2LT5pbml0X292ZXJyaWRlKGZlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVt Mjh4eF96bDEwMzUzX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGVt Mjh4eCAqZGV2ID0gZmUtPmR2Yi0+cHJpdjsKKwlzdHJ1Y3QgZW0yODgwX2R2YiAqZHZiZGV2ID0g ZGV2LT5kdmJfZGV2OworCisJaW50IGdwaW9fYXJnOworCisvLwlpZiAoZGV2LT5tb2RlICE9IFY0 TDJfVFVORVJfRElHSVRBTF9UVikgeworCQlkZXYtPmVtMjh4eF93cml0ZV9yZWdzX3JlcShkZXYs IDB4MDAsIDB4NDgsICJceDAwIiwgMSk7CisJCWRldi0+ZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRl diwgMHgwMCwgMHgxMiwgIlx4NzciLCAxKTsKKworCQlncGlvX2FyZyA9IEVNMjhYWF9SRUdfT0ZG OworCQlkZXYtPmVtMjh4eF9ncGlvX2NvbnRyb2woZGV2LCBFTTI4WFhfQU5BTE9HX09OLCAgICAm Z3Bpb19hcmcpOworCQlncGlvX2FyZyA9IEVNMjhYWF9SRUdfT047CisJCWRldi0+ZW0yOHh4X2dw aW9fY29udHJvbChkZXYsIEVNMjhYWF9UUzFfT04sICAgICAgICZncGlvX2FyZyk7CisJCWRldi0+ ZW0yOHh4X2dwaW9fY29udHJvbChkZXYsIEVNMjhYWF9UVU5FUjFfT04sICAgICZncGlvX2FyZyk7 CisJCWRldi0+ZW0yOHh4X2dwaW9fY29udHJvbChkZXYsIEVNMjhYWF9ERUNPREVSX1NMRUVQLCAm Z3Bpb19hcmcpOworCQlkZXYtPmVtMjh4eF9ncGlvX2NvbnRyb2woZGV2LCBFTTI4WFhfREVNT0Qx X1JFU0VULCBOVUxMKTsKKwkJbWRlbGF5KDEwMCk7CisvLwl9CisJZGV2LT5tb2RlID0gVjRMMl9U VU5FUl9ESUdJVEFMX1RWOworCW1zbGVlcCgxMDApOworCisJaWYgKGR2YmRldi0+aW5pdF9vdmVy cmlkZSkKKwkJZHZiZGV2LT5pbml0X292ZXJyaWRlKGZlKTsKKworCXN3aXRjaCAoZGV2LT5lbV90 eXBlKSB7CisJY2FzZSBFTTI4ODg6CisJCWRldi0+ZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwg MHgwMCwgMHg1ZiwgIlx4MDEiLCAxKTsKKwkJLyogVE9ETyBtb3ZlIHRoaXMgdG8gemwxMDM1Mywg dGhvdWdoIGtlZXAgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLworCQlkZXYtPmVtMjh4eF93cml0 ZV9yZWdzX3JlcShkZXYsIDB4MDIsIDB4MWUsICJceDUwXHgwYiIsIDIpOworCQlkZXYtPmVtMjh4 eF93cml0ZV9yZWdzX3JlcShkZXYsIDB4MDIsIDB4MWUsICJceDUxXHg2NCIsIDIpOworCQlicmVh azsKKwljYXNlIEVNMjg3NToKKwkJZGV2LT5lbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCAweDAw LCAweDVmLCAiXHgwMSIsIDEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXYtPmVtMjh4eF93 cml0ZV9yZWdzX3JlcShkZXYsIDB4MDIsIDB4MWUsICJceDUwXHgwYiIsIDIpOworCQlkZXYtPmVt Mjh4eF93cml0ZV9yZWdzX3JlcShkZXYsIDB4MDIsIDB4MWUsICJceDUxXHg0NCIsIDIpOworCQli cmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBlbTI4eHhfemwxMDM1M19z bGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBm ZS0+ZHZiLT5wcml2OworLy8JaW50IGdwaW9fYXJnID0gRU0yOFhYX1JFR19PRkY7CisJaWYgKGRl di0+bW9kZSA9PSBWNEwyX1RVTkVSX0RJR0lUQUxfVFYgJiYgZGV2LT5wb3dlcnNhdmluZykgewor Ly8JCWRldi0+ZW0yOHh4X2dwaW9fY29udHJvbChkZXYsIEVNMjhYWF9UUzFfT04sICAgICAgICZn cGlvX2FyZyk7CisJCXByaW50ayhLRVJOX0lORk8icG93ZXJlZCBkb3duIHpsMTAzNTNcbiIpOwor CX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGVtMjh4eF9kdmJfc2xlZXAoc3RydWN0 IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gZmUtPmR2Yi0+cHJp djsKKyNpZiAwCisJaW50IGdwaW9fYXJnOworI2VuZGlmCisJaWYgKGRldi0+bW9kZSA9PSBWNEwy X1RVTkVSX0RJR0lUQUxfVFYgJiYgZGV2LT5wb3dlcnNhdmluZykgeworLy8JCWRldi0+dHVuZXIt PnNodXRkb3duKGRldi0+dHVuZXIpOworI2lmIDAKKwkJZ3Bpb19hcmcgPSBFTTI4WFhfUkVHX09G RjsKKwkJZGV2LT5lbTI4eHhfZ3Bpb19jb250cm9sKGRldiwgRU0yOFhYX1RVTkVSMV9PTiwgICAg JmdwaW9fYXJnKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyJwb3dlcmVkIGRvd24geGMzMDI4XG4iKTsK KyNlbmRpZgorCX0KKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIEFESU1UVjEwMgorc3RydWN0IGFk aW10djEwMl9jb25maWcgZG1idF9hZGltX2NvbmZpZyA9IHsKKwkuaTJjX2FkZHJlc3MgPSAweGMy Pj4xCit9OworCisjZW5kaWYKKworc3RydWN0IHM5MjFfY29uZmlnIHNoYXJwX2lzZGJ0X2NvbmZp ZyA9IHsKKwkuaTJjX2FkZHJlc3MgPSAweDMwPj4xCit9OworCitzdGF0aWMgaW50IGVtMjg4MF9k dmJfaW5pdChzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJc3RydWN0IGVtMjg4MF9kdmIgKmR2Yl9k ZXY7CisJaW50IGVycjsKKwl1MTYgaWYxID0gMTIyMDsKKwlpbnQgZ3Bpb19hcmc7CisJaW50IGk7 CisJc3RydWN0IGR2Yl9kZW11eCAqZHZiZGVtdXg7CisKKwlwcmludGsoS0VSTl9JTkZPImVtMjg4 MC1kdmIuYzogRFZCIEluaXRcbiIpOworCWlmIChOVUxMID09IGRldikgeworCQlkcHJpbnRrKDEs ICJlbTI4ODAtZHZiLmM6IG5vIGRldmljZSBhdHRhY2hlZD9cbiIpOworCQlyZXR1cm4gLUVOT01F TTsKKwl9CisKKwlkdmJfZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGVtMjg4MF9kdmIpLCBH RlBfS0VSTkVMKTsKKwlpZiAoIWR2Yl9kZXYpIHsKKwkJZHByaW50aygxLCAib3V0IG9mIG1lbW9y eSFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltdXRleF9pbml0KCZkdmJfZGV2LT5z ZW0pOworCisJZGV2LT5lbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCAweDAwLCAweDQ4LCAiXHgw MCIsIDEpOworCWRldi0+ZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwgMHgwMCwgMHgxMiwgIlx4 NzciLCAxKTsKKworCisJaWYgKGRldi0+ZHZibm9ybSA9PSBOVUxMKSB7CisJCWtmcmVlKGR2Yl9k ZXYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlncGlvX2FyZyA9IEVNMjhYWF9SRUdfT0ZG OworCWRldi0+ZW0yOHh4X2dwaW9fY29udHJvbChkZXYsIEVNMjhYWF9BTkFMT0dfT04sICAgICZn cGlvX2FyZyk7CisJZ3Bpb19hcmcgPSBFTTI4WFhfUkVHX09OOworCWRldi0+ZW0yOHh4X2dwaW9f Y29udHJvbChkZXYsIEVNMjhYWF9UUzFfT04sICAgICAgICZncGlvX2FyZyk7CisJZGV2LT5lbTI4 eHhfZ3Bpb19jb250cm9sKGRldiwgRU0yOFhYX1RVTkVSMV9PTiwgICAgJmdwaW9fYXJnKTsKKwlk ZXYtPmVtMjh4eF9ncGlvX2NvbnRyb2woZGV2LCBFTTI4WFhfREVDT0RFUl9TTEVFUCwgJmdwaW9f YXJnKTsKKwlkZXYtPmVtMjh4eF9ncGlvX2NvbnRyb2woZGV2LCBFTTI4WFhfREVNT0QxX1JFU0VU LCBOVUxMKTsKKwltZGVsYXkoMTAwKTsKKwlkZXYtPm1vZGUgPSBWNEwyX1RVTkVSX0RJR0lUQUxf VFY7CisKKworCXN3aXRjaCAoZGV2LT5tb2RlbCkgeworCWNhc2UgRU0yODgwX0JPQVJEX0hBVVBQ QVVHRV9XSU5UVl9IVlJfOTAwX1IyOgorCWNhc2UgRU0yODgyX0JPQVJEX1BJTk5BQ0xFX0hZQlJJ RF9QUk86CisjaWZkZWYgTUlDUk9OQVNfRFJYMzk3NUQKKwkJZHZiX2Rldi0+ZnJvbnRlbmQgPSBk dmJfYXR0YWNoKGRyeDM5NzNkX2F0dGFjaCwKKwkJCQkmRFJYMzk3M0REZWZhdWx0Q29tbUF0dHJf ZywKKwkJCQkmRFJYMzk3M0REZWZhdWx0QWRkcl9nLAorCQkJCSZEUlgzOTczRERhdGFfZywKKwkJ CQkmZGV2LT5pMmNfYWRhcCk7CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSBFTTI4ODNfQk9BUkRf VEVSUkFURUNfSFlCUklEX1hTX0ZNOgorCWNhc2UgRU0yODgwX0JPQVJEX0hBVVBQQVVHRV9XSU5U Vl9IVlJfOTAwOgorCWNhc2UgRU0yODgwX0JPQVJEX1RFUlJBVEVDX0hZQlJJRF9YUzoKKwljYXNl IEVNMjg4MF9CT0FSRF9URVJSQVRFQ19IWUJSSURfWFNfRlI6CisJY2FzZSBFTTI4ODJfQk9BUkRf VEVSUkFURUNfSFlCUklEX1hTOgorCWNhc2UgRU0yODgyX0JPQVJEX0xFQURURUtfUEFMTVRPUF9E VFZfMjAwSDoJCisJY2FzZSBFTTI4NzBfQk9BUkRfVEVSUkFURUNfWFM6CisJY2FzZSBFTTI4ODFf Qk9BUkRfUElOTkFDTEVfSFlCUklEX1BSTzoKKwljYXNlIEVNMjg4MV9CT0FSRF9ETlRfREEyX0hZ QlJJRDoKKwljYXNlIEVNMjg4MF9CT0FSRF9NU0lfRElHSVZPWF9BRDoKKwljYXNlIEVNMjg4MF9C T0FSRF9NU0lfRElHSVZPWF9BRF9JSToKKwljYXNlIEVNMjg3MF9CT0FSRF9LV09STERfMzUwVToK KwljYXNlIEVNMjg4M19CT0FSRF9LV09STERfSFlCUklEX0UzMjM6CisJY2FzZSBFTTI4ODhfQk9B UkRfS1dPUkxEX0hZQlJJRF9FMzI5OgorCWNhc2UgRU0yODg4X0JPQVJEX0VNUElBX0hZQlJJRDoK KwljYXNlIEVNMjg4MF9CT0FSRF9URVJSQVRFQ19QUk9ESUdZX1hTOgorCQlkdmJfZGV2LT5mcm9u dGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCisJCQkJJmVtMjg4MF96bDEwMzUzX2Rl diwgJmRldi0+aTJjX2FkYXApOworCQlpZiAoZHZiX2Rldi0+ZnJvbnRlbmQgPT0gTlVMTCkKKwkJ ZHZiX2Rldi0+ZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKKwkJCQkmZW0yODgw X210MzUyX2RldiwgJmRldi0+aTJjX2FkYXApOworIAkJCisJCWJyZWFrOworCWNhc2UgRU0yODcw X0JPQVJEX1RFUlJBVEVDX1hTX01UMjA2MDoKKwkJZHZiX2Rldi0+ZnJvbnRlbmQgPSBkdmJfYXR0 YWNoKHpsMTAzNTNfYXR0YWNoLAorCQkJCSZlbTI4ODBfemwxMDM1M19waW5uYWNsZSwgJmRldi0+ aTJjX2FkYXApOworCQlicmVhazsKKwljYXNlIEVNMjg4M19CT0FSRF9IQVVQUEFVR0VfV0lOVFZf SFZSXzk1MDoKKwljYXNlIEVNMjg4M19CT0FSRF9QSU5OQUNMRV9QQ1RWX0hEX1BSTzoKKwljYXNl IEVNMjg4M19CT0FSRF9LV09STERfSFlCUklEX0EzMTY6CisJY2FzZSBFTTI4ODNfQk9BUkRfQVRJ X1RWV09OREVSNjAwOgorCQlkdmJfZGV2LT5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhf YXR0YWNoLAorCQkJCSZlbTI4ODBfbGdkdDMzMDNfZGV2LCAmZGV2LT5pMmNfYWRhcCk7CisJCWJy ZWFrOworCWNhc2UgRU0yODcwX0JPQVJEX0tXT1JMRF8zNTVVOgorCWNhc2UgRU0yODcwX0JPQVJE X0NPTVBST19WSURFT01BVEU6CisJCWVtMjh4eF90c19idXNfY3RybF9pbnQoZGV2LCAwKTsKKwkJ LyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBFTTI4NzBfQk9BUkRfUElOTkFDTEVfUENUVl9EVkI6 CisJCWR2Yl9kZXYtPmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJCQkm ZW0yODgwX2t3b3JsZF8zNTV1X2RldiwKKwkJCQkmZGV2LT5pMmNfYWRhcCk7CisJCWJyZWFrOwor CWNhc2UgRU0yODgzX0JPQVJEX0VNUElBX0hZQlJJRF9BVFNDOgorCWNhc2UgRU0yODgzX0JPQVJE X0VRVUlOVVhfVFVCRVNUSUNLX0FUU0M6CisJCWR2Yl9kZXYtPmZyb250ZW5kID0gZHZiX2F0dGFj aChsZ2R0MzMwNF9hdHRhY2gsCisJCQkJJmxnZHQzMzA0X2F0c2NfY29uZmlnLCAmZGV2LT5pMmNf YWRhcCk7CisJCWJyZWFrOworCWNhc2UgRU0yODc1X0JPQVJEX1NBTVBMRV9JU0RCVDoKKwkJCisj aWYgMQorCQlkdmJfZGV2LT5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczkyMV9hdHRhY2gsCisJCQkJ JnNoYXJwX2lzZGJ0X2NvbmZpZywgJmRldi0+aTJjX2FkYXApOworI2VuZGlmCisJCWlmIChkdmJf ZGV2LT5mcm9udGVuZCkgeworCQkJZHZiX2Rldi0+ZnJvbnRlbmQtPnR1bmVyX3ByaXYgPSBkZXY7 CisJCQlkdmJfZGV2LT5pbml0X292ZXJyaWRlID0gZHZiX2Rldi0+ZnJvbnRlbmQtPm9wcy5pbml0 OworCQkJZHZiX2Rldi0+ZnJvbnRlbmQtPm9wcy5pbml0ID0gZW0yOHh4X3M5MjFfaW5pdDsKKwkJ fSBlbHNlIHsKKwkJCXByaW50aygiZmFpbGVkIHRvIGluaXRpYWxpemUgczkyMVxuIik7CisJCX0K KwkJYnJlYWs7CisJY2FzZSBFTTI4NzlfQk9BUkRfU0FNUExFX0RNQjoKKyNpZiAwCisJCWR2Yl9k ZXYtPmZyb250ZW5kID0gZHZiX2F0dGFjaChkbWJfYXR0YWNoLAorCQkJCSZzaGFycF9kbWJfY29u ZmlnLCAmZGV2LT5pMmNfYWRhcCk7CisjZW5kaWYKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJp bnRrKEtFUk5fSU5GTyJlbTI4ODAtZHZiLmM6IHVuc3VwcG9ydGVkIGRldmljZVxuIik7CisJCWtm cmVlKGR2Yl9kZXYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZHZiX2Rldi0+ZnJv bnRlbmQgJiYgZGV2LT5tb2RlbCAhPSBFTTI4NzVfQk9BUkRfU0FNUExFX0lTREJUKSB7CisJCXN3 aXRjaCAoZGV2LT50dW5lcl90eXBlKSB7CisJCWNhc2UgVFVORVJfWENFSVZFX1hDMzAyODoKKwkJ Y2FzZSBUVU5FUl9YQ0VJVkVfWEM1MDAwOgorCQkJZHZiX2Rldi0+ZnJvbnRlbmQtPnR1bmVyX3By aXYgPSBkZXY7CisJCQlkdmJfZGV2LT5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1z ID0KKwkJCQllbTI4eHhfc2V0X3BhcmFtczsKKwkJCWR2Yl9kZXYtPmZyb250ZW5kLT5vcHMudHVu ZXJfb3BzLmdldF9mcmVxdWVuY3kgPQorCQkJCWVtMjh4eF9nZXRfZnJlcXVlbmN5OworCQkJZHZi X2Rldi0+ZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuZ2V0X2JhbmR3aWR0aCA9CisJCQkJZW0yOHh4 X2dldF9iYW5kd2lkdGg7CisKKwkJCS8qIHhjMzAyOCBwb3dlcnNhdmluZyBtb2RlICovCisJCQlk dmJfZGV2LT5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0KKwkJCQllbTI4eHhfZHZiX2lu aXQ7CisJCQlkdmJfZGV2LT5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zbGVlcCA9CisJCQkJZW0y OHh4X2R2Yl9zbGVlcDsKKwkJCWJyZWFrOworCQljYXNlIFRVTkVSX01UMjA2MDoKKwkJCWR2Yl9h dHRhY2gobXQyMDYwX2F0dGFjaCwgZHZiX2Rldi0+ZnJvbnRlbmQsCisJCQkJCSZkZXYtPmkyY19h ZGFwLCAmZW0yODcwX210MjA2MF9jb25maWcsCisJCQkJCWlmMSk7CisJCQlicmVhazsKKwkJY2Fz ZSBUVU5FUl9RVDEwMTA6CisJCQlkdmJfZGV2LT5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwg PQorCQkJCWt3b3JsZDM1NXVfaTJjX2dhdGVfY3RybDsKKwkJCWR2Yl9hdHRhY2gocXQxMDEwX2F0 dGFjaCwgZHZiX2Rldi0+ZnJvbnRlbmQsCisJCQkJCSZkZXYtPmkyY19hZGFwLCAmZW0yODcwX3F0 MTAxMF9jb25maWcpOworCQkJYnJlYWs7CisJCWNhc2UgVFVORVJfQURJTVRWMTAyOgorI2lmZGVm IEFESU1UVjEwMgorCQkJZHZiX2F0dGFjaChhZGltdHYxMDJfYXR0YWNoLCBkdmJfZGV2LT5mcm9u dGVuZCwgJmRldi0+aTJjX2FkYXAsICZkbWJ0X2FkaW1fY29uZmlnKTsKKyNlbmRpZgorCQkJYnJl YWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9JTkZPInVuc3VwcG9ydGVkIHR1bmVyICgl ZClcbiIsCisJCQkJCWRldi0+dHVuZXJfdHlwZSk7CisJCX0KKworCQkvKiB6bDEwMzUzIHBvd2Vy c2F2aW5nICovCisJCWR2Yl9kZXYtPmluaXRfb3ZlcnJpZGUgPSBkdmJfZGV2LT5mcm9udGVuZC0+ b3BzLmluaXQ7CisKKwkJZHZiX2Rldi0+ZnJvbnRlbmQtPm9wcy5zbGVlcCA9IGVtMjh4eF96bDEw MzUzX3NsZWVwOworCQlkdmJfZGV2LT5mcm9udGVuZC0+b3BzLmluaXQgPSBlbTI4eHhfemwxMDM1 M19pbml0OworCX0KKworCWlmIChOVUxMID09IGR2Yl9kZXYtPmZyb250ZW5kKSB7CisJCXByaW50 ayhLRVJOX0lORk8iZW0yODgwLWR2Yi5jOiBmYWlsZWQgaW5pdGlhbGl6aW5nIHpsMTAzNTMiCisJ CSAgICAgICAiRFZCLVQgZGVtb2R1bGF0b3JcbiIpOworCQlwcmludGsoS0VSTl9JTkZPImVtMjg4 MC1kdmIuYzogcmV0cnlpbmcgd2l0aCBtdDM1MiBEVkItVCIKKwkJCQkiZGVtb2R1bGF0b3JcbiIp OworCQlpZiAoTlVMTCA9PSBkdmJfZGV2LT5mcm9udGVuZCkgeworCQkJcHJpbnRrKEtFUk5fSU5G TyJlbTI4ODAtZHZiLmM6IG5vIGx1Y2sgd2l0aCBtdDM1MiIKKwkJCSAgICAgICAiZGVtb2R1bGF0 b3IsIG5vdCBhdHRhY2hpbmcgZW0yODgwLWR2YlxuIik7CisJCQlrZnJlZShkdmJfZGV2KTsKKwkJ CXJldHVybiAtRU5PREVWOworCQl9CisJfQorCisJLyogdGhpcyBpcyBub3QgYmFja3dhcmQgY29t cGF0aWJsZSAqLworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsIDYs IDIwKQorCWR2Yl9kZXYtPmZyb250ZW5kLT5vcHMudHNfYnVzX2N0cmwgPSBlbTI4eHhfdHNfYnVz X2N0cmw7CisjZW5kaWYKKworCWR2Yl9yZWdpc3Rlcl9hZGFwdGVyKCZkdmJfZGV2LT5hZGFwdGVy LCAiZW0yODgwIERWQi1UIiwgVEhJU19NT0RVTEUsCisJCQkmZGV2LT51ZGV2LT5kZXYKKyNpZiBk ZWZpbmVkIERWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SCisJCQksYWRhcHRlcl9ucgorI2Vu ZGlmCisJKTsKKworCQorCWZvciAoaT0wOyBpPGRldi0+dWlmLT5hbHRzZXR0aW5nWzFdLmRlc2Mu Yk51bUVuZHBvaW50czsgaSsrKSB7CisJCWlmIChkZXYtPnVpZi0+YWx0c2V0dGluZ1sxXS5lbmRw b2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgPT0gMHg4NCkgeworCQkJZHZiX2Rldi0+ZHR2 X3BhY2tldHNpemUgPSBkZXYtPnVpZi0+YWx0c2V0dGluZ1sxXS4KKwkJCQkJZW5kcG9pbnRbaV0u ZGVzYy53TWF4UGFja2V0U2l6ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJZHZiX2Rldi0+YWRh cHRlci5wcml2ID0gZGV2OworCisJZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKCZkdmJfZGV2LT5hZGFw dGVyLCBkdmJfZGV2LT5mcm9udGVuZCk7CisKKwlkdmJfZGV2LT5kZW11eC5wcml2ID0gZHZiX2Rl djsKKwlkdmJfZGV2LT5kZW11eC5maWx0ZXJudW0gPSAyNTY7CisJZHZiX2Rldi0+ZGVtdXguZmVl ZG51bSA9IDI1NjsKKwlkdmJfZGV2LT5kZW11eC5zdGFydF9mZWVkID0gZW0yODgwX3N0YXJ0X2Zl ZWQ7CisJZHZiX2Rldi0+ZGVtdXguc3RvcF9mZWVkID0gZW0yODgwX3N0b3BfZmVlZDsKKwlkdmJf ZGV2LT5kZW11eC5kbXguY2FwYWJpbGl0aWVzID0gRE1YX1RTX0ZJTFRFUklORyB8CisJCQkJCURN WF9TRUNUSU9OX0ZJTFRFUklORyB8CisJCQkJCURNWF9NRU1PUllfQkFTRURfRklMVEVSSU5HOwor CisJZXJyID0gZHZiX2RteF9pbml0KCZkdmJfZGV2LT5kZW11eCk7CisJaWYgKGVyciA8IDApIHsK KwkJZHByaW50aygxLCAiZHZiX2RteF9pbml0IGZhaWxlZCFcbiIpOworCQlrZnJlZShkdmJfZGV2 KTsKKwkJcmV0dXJuIC0xOworCX0KKworCWR2Yl9kZXYtPmRteGRldi5maWx0ZXJudW0gPSBkdmJf ZGV2LT5kZW11eC5maWx0ZXJudW07CisJZHZiX2Rldi0+ZG14ZGV2LmRlbXV4ID0gJmR2Yl9kZXYt PmRlbXV4LmRteDsKKwlkdmJfZGV2LT5kbXhkZXYuY2FwYWJpbGl0aWVzID0gMDsKKworCWVyciA9 IGR2Yl9kbXhkZXZfaW5pdCgmZHZiX2Rldi0+ZG14ZGV2LCAmZHZiX2Rldi0+YWRhcHRlcik7CisK KwlpZiAoZXJyIDwgMCkgeworCQlkcHJpbnRrKDEsICJkdmJfZG14ZGV2IGZhaWxlZCFcbiIpOwor CQlkdmJfZG14ZGV2X3JlbGVhc2UoJmR2Yl9kZXYtPmRteGRldik7CisJCWtmcmVlKGR2Yl9kZXYp OworCQlyZXR1cm4gLTE7CisJfQorCisJZHZiX2Rldi0+dWRldiA9IGRldi0+dWRldjsKKwlkdmJf ZGV2LT5lbTI4eHhfZGV2ID0gZGV2OyAvKiBGSVhNRSBnZXQgcmlkIG9mIHRoaXMgKi8KKworCWRl di0+ZHZiX2RldiA9IGR2Yl9kZXY7CisKKwlkdmJkZW11eCA9ICZkdmJfZGV2LT5kZW11eDsKKwlk dmJfbmV0X2luaXQoJmR2Yl9kZXYtPmFkYXB0ZXIsICZkdmJfZGV2LT5kdmJuZXQsICZkdmJkZW11 eC0+ZG14KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVtMjg4MF9kdmJfZmluaShz dHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJc3RydWN0IGVtMjg4MF9kdmIgKmR2Yl9kZXYgPSBkZXYt PmR2Yl9kZXY7CisJaWYgKCFkZXYpIHsKKwkJZHByaW50aygxLCAiZmluaSBhbHJlYWR5IGNhbGxl ZCFcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCWlmICghZGV2LT5kdmJfZGV2KSB7CisJCWRwcmlu dGsoMSwgImR2Yl9kZXYgbm90IGluaXRpYWxpemVkIVxuIik7CisJCXJldHVybiAtMTsKKwl9CisJ ZHZiX2RldiA9IGRldi0+ZHZiX2RldjsKKworCWRwcmludGsoMSwgInJlbGVhc2luZyBkdmIgZGV2 aWNlIVxuIik7CisKKwlkdmJfbmV0X3JlbGVhc2UoJmR2Yl9kZXYtPmR2Ym5ldCk7CisJZHZiX3Vu cmVnaXN0ZXJfZnJvbnRlbmQoZHZiX2Rldi0+ZnJvbnRlbmQpOworCWR2Yl9mcm9udGVuZF9kZXRh Y2goZHZiX2Rldi0+ZnJvbnRlbmQpOworCisJZHZiX2Rldi0+ZGVtdXguZG14LmNsb3NlKCZkdmJf ZGV2LT5kZW11eC5kbXgpOworCWR2Yl9kbXhkZXZfcmVsZWFzZSgmZHZiX2Rldi0+ZG14ZGV2KTsK KwlkdmJfZG14X3JlbGVhc2UoJmR2Yl9kZXYtPmRlbXV4KTsKKworCWR2Yl91bnJlZ2lzdGVyX2Fk YXB0ZXIoJmR2Yl9kZXYtPmFkYXB0ZXIpOworCisJZHByaW50aygxLCAiZHZiX2ZpbmlcbiIpOwor CWlmIChkZXYtPmR2Yl9kZXYpIHsKKwkJZHByaW50aygxLCAiZnJlZWluZyBkdmJfZGV2XG4iKTsK KwkJa2ZyZWUoZGV2LT5kdmJfZGV2KTsKKwkJZGV2LT5kdmJfZGV2ID0gTlVMTDsKKwl9CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZW0yOHh4X29wcyBkdmJfb3BzID0geworCS5pZAk9 IEVNMjhYWF9EVkJUIHwgRU0yOFhYX0FUU0MgfCBFTTI4WFhfSVNEQiB8IEVNMjhYWF9ETUIsCisJ Lm5hbWUJPSAiRW0yODgwIERWQiBFeHRlbnNpb24iLAorCS5pbml0CT0gZW0yODgwX2R2Yl9pbml0 LAorCS5maW5pCT0gZW0yODgwX2R2Yl9maW5pLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZW0y ODgwX2R2Yl9yZWdpc3Rlcih2b2lkKQoreworCXJldHVybiBlbTI4eHhfcmVnaXN0ZXJfZXh0ZW5z aW9uKCZkdmJfb3BzKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGVtMjg4MF9kdmJfdW5yZWdp c3Rlcih2b2lkKQoreworCWVtMjh4eF91bnJlZ2lzdGVyX2V4dGVuc2lvbigmZHZiX29wcyk7Cit9 CisKK21vZHVsZV9pbml0KGVtMjg4MF9kdmJfcmVnaXN0ZXIpOworbW9kdWxlX2V4aXQoZW0yODgw X2R2Yl91bnJlZ2lzdGVyKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogTG9jYWwgdmFyaWFi bGVzOgorICogYy1iYXNpYy1vZmZzZXQ6IDgKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9tZWRpYS92aWRlby9lbXBpYS9lbTI4eHgtYWFkLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVv L2VtcGlhL2VtMjh4eC1hYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43 YzZkY2I2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbXBpYS9lbTI4 eHgtYWFkLmMKQEAgLTAsMCArMSw0MDQgQEAKKy8qIAorICogRW0yOHh4LWFhZCBFbXBpYSBBbHRl cm5hdGl2ZSBBdWRpbyBEcml2ZXIKKyAqCisgKiBUaGlzIGlzIGEgdmVuZG9yIHNwZWNpZmljIGRy aXZlciB3aGljaCBwcm92aWRlcyBhIHZlbmRvciBzcGVjaWZpYworICogYXVkaW8gaW50ZXJmYWNl IGZvciBFbXBpYSBiYXNlZCBkZXZpY2VzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBFbXBp YSBUZWNobm9sb2d5IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBTdW5kdGVrIEx0ZC4KKyAq CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0 Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgor I2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVk ZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51 eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2Rl bGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5o PgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5j bHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUg PGxpbnV4L2ZjbnRsLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgImVt Mjh4eC1hYWQuaCIKKyNpbmNsdWRlICJlbTI4eHguaCIKKworc3RhdGljIHVuc2lnbmVkIGxvbmcg ZW0yOHh4X2FhZF9kZXZpY2VzOyAvKiBtYXAgKi8KK3N0YXRpYyBpbnQgZW0yOHh4X2FhZF9yZWdp c3RlcihzdHJ1Y3QgZW0yOHh4ICpkZXYpOworCit2b2lkIGVtMjh4eF9hYWRfdW5yZWdpc3Rlcihz dHJ1Y3QgZW0yOHh4X2FhZF9pbmZvICoqaW50X2FhZCk7CisKK3N0YXRpYyBpbnQgZW0yOHh4X21h eGRldnM7CisKK3N0YXRpYyBMSVNUX0hFQUQoZW0yOHh4X2FhZF9kZXZsaXN0KTsKKworLyogcmlu Z2J1ZmZlciBpbXBsZW1lbnRhdGlvbiwgdGFrZW4gZnJvbSBlbXBpYSByYWRpbyBhcHBsaWNhdGlv biAqLworCisjZGVmaW5lIEFBRF9CVUZGRVJfU0laRSAyMDAwMAorCitzdGF0aWMgc3RydWN0IGFh ZF9yYl9pbmZvICphYWRfcmJfaW5pdCh2b2lkKTsKK3N0YXRpYyBzdHJ1Y3QgYWFkX3JiX2luZm8g KmFhZF9yYl9pbml0KHZvaWQpIHsKKwlzdHJ1Y3QgYWFkX3JiX2luZm8gKnJiID0ga3phbGxvYyhz aXplb2Yoc3RydWN0IGFhZF9yYl9pbmZvKSwgR0ZQX0tFUk5FTCk7CisgICAgICAgIHJiLT5sZWZ0 ID0gcmItPnJpZ2h0ID0gcmItPnBvcyA9IDA7CisJcmItPmJ1ZnNpemUgPSBBQURfQlVGRkVSX1NJ WkU7CisgICAgICAgIHJiLT5idWZmZXIgPSBremFsbG9jKEFBRF9CVUZGRVJfU0laRSpzaXplb2Yo dTgpLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgaWYgKHJiLT5idWZmZXIgPT0gTlVMTCkKKyAgICAg ICAgICAgIHJldHVybiAwOworCXNwaW5fbG9ja19pbml0KCZyYi0+X19hYWRfbG9jayk7CisJcmV0 dXJuIHJiOworfTsKKwordm9pZCBhYWRfcmJfZnJlZShzdHJ1Y3QgYWFkX3JiX2luZm8gKipyYikg eworCWtmcmVlKCgqcmIpLT5idWZmZXIpOworCWtmcmVlKCgqcmIpKTsKK30KKworc3RhdGljIGlu bGluZSB1MzIgYWFkX3JiX2dldF9idWZmZXJfc2l6ZShzdHJ1Y3QgYWFkX3JiX2luZm8gKnJiKSB7 CisJaWYgKHJiLT5sZWZ0ID4gcmItPnJpZ2h0KQorCQlyZXR1cm4gKHJiLT5idWZzaXplIC0gcmIt PmxlZnQgKyByYi0+cmlnaHQpOworCWVsc2UgaWYocmItPmxlZnQgPCByYi0+cmlnaHQpCisJCXJl dHVybiAocmItPnJpZ2h0IC0gcmItPmxlZnQpOworCWVsc2UgaWYocmItPmxlZnQgPT0gcmItPnJp Z2h0KQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWFkX3JiX3Jl c2V0X2J1ZmZlcihzdHJ1Y3QgYWFkX3JiX2luZm8gKnJiKSB7CisgICAgICAgIHVuc2lnbmVkIGxv bmcgZmxhZ3M7CisgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZyYi0+X19hYWRfbG9jaywgZmxh Z3MpOworICAgICAgICByYi0+bGVmdCA9IHJiLT5yaWdodCA9IHJiLT5wb3MgPSAwOworICAgICAg ICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyYi0+X19hYWRfbG9jaywgZmxhZ3MpOworfQorCitz dGF0aWMgaW5saW5lIHUzMiBhYWRfcmJfZnJlZV9idWZmZXJfc2l6ZShzdHJ1Y3QgYWFkX3JiX2lu Zm8gKnJiKSB7CisJdTMyIGN1cl9idWZmc2l6ZSA9IGFhZF9yYl9nZXRfYnVmZmVyX3NpemUocmIp OworCWlmIChyYi0+YnVmc2l6ZSAtIGN1cl9idWZmc2l6ZSA+IDApCisJCXJldHVybiByYi0+YnVm c2l6ZSAtIGN1cl9idWZmc2l6ZSAtIDE7CisJcmV0dXJuIHJiLT5idWZzaXplIC0gMTsKK30KKwor c3RhdGljIGludCBhYWRfcmJfd3JpdGVfZGF0YShzdHJ1Y3QgYWFkX3JiX2luZm8gKnJiLCB1OCAq ZGF0YSwgc3NpemVfdCBzaXplKSB7CisJaW50IGxlbiA9IHNpemU7CisJLy9pbnQgbGVuMjsKKwlp bnQgZnJlZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCS8qIGxvY2sgKi8KKyAgICAgICAgc3Bp bl9sb2NrX2lycXNhdmUoJnJiLT5fX2FhZF9sb2NrLCBmbGFncyk7CisJZnJlZSA9IGFhZF9yYl9m cmVlX2J1ZmZlcl9zaXplKHJiKTsKKworCWlmIChzaXplID4gZnJlZSkKKwkJc2l6ZSA9IGZyZWUg LSBmcmVlICUgc2l6ZW9mKHUzMik7IC8qIGFsaWdubWVudCAqLworCisJaWYgKGZyZWUgPT0gMCkg eworICAgICAgICAgICAgICAgIGlmKHByaW50a19yYXRlbGltaXQoKSkgCisgICAgICAgICAgICAg ICAgICAgIHByaW50aygiZHJvcHBpbmcgZGF0YSFcbiIpOworCQkvKiB1bmxvY2sgKi8KKyAgICAg ICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyYi0+X19hYWRfbG9jaywgZmxhZ3Mp OworCQlyZXR1cm4gMDsKKwl9CisJaWYgKHJiLT5yaWdodCArIHNpemUgPj0gcmItPmJ1ZnNpemUg LSAxKSB7CisJCWxlbiA9IHJiLT5idWZzaXplIC0gcmItPnJpZ2h0OworCQltZW1jcHkoJnJiLT5i dWZmZXJbcmItPnJpZ2h0XSwgZGF0YSwgbGVuKTsKKwkJbWVtY3B5KHJiLT5idWZmZXIsIGRhdGEr bGVuLCBzaXplIC0gbGVuKTsKKwkJcmItPnJpZ2h0ID0gc2l6ZSAtIGxlbjsKKwl9IGVsc2Ugewor CQltZW1jcHkoJnJiLT5idWZmZXJbcmItPnJpZ2h0XSwgZGF0YSwgc2l6ZSk7CisJCXJiLT5yaWdo dCArPSBzaXplOworCX0KKwkvKiB1bmxvY2sgKi8KKyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmcmItPl9fYWFkX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyogdGhpcyBp cyBhIGJpdCBjb21wbGljYXRlZCBzaW5jZSB3ZSBjYW5ub3QgZG8gbWVtY3B5L2NvcHlfdG9fdXNl ciB3aXRoaW4gdGhlCisgKiBzcGlubG9ja2VkIGJsb2NrLCBpdCBtaWdodCB3b3JrIGZpbmUgd2l0 aCBtb3N0IHN5c3RlbXMgYWx0aG91Z2ggdGhlIHRhcmdldAorICogc3lzdGVtcyBqdXN0IGJsZXcg dXAgKi8KKworc3RhdGljIGludCBhYWRfcmJfcmVhZF9kYXRhKHN0cnVjdCBlbTI4eHhfYWFkX2lu Zm8gKmFhZCwgdTggKmJ1ZmZlciwgc3NpemVfdCBzaXplKSB7CisJaW50IGxlbjsKKwlpbnQgYnVm c2l6ZTsKKwl1bnNpZ25lZCBpbnQgbGVmdDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsK KyAgICAgICAgc3RydWN0IGFhZF9yYl9pbmZvICpyYiA9IGFhZC0+X19hYWRfcmJbYWFkLT5fX2N1 cnJfcmJdOworCS8qIGxvY2sgKi8KKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnJiLT5fX2Fh ZF9sb2NrLCBmbGFncyk7CisKKworCWlmIChhYWRfcmJfZ2V0X2J1ZmZlcl9zaXplKHJiKSA9PSAw KSB7CisJCS8qIHVubG9jayAqLworICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnJiLT5fX2FhZF9sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCWJ1ZnNpemUg PSBhYWRfcmJfZ2V0X2J1ZmZlcl9zaXplKHJiKTsKKwlpZiAoc2l6ZSA+IGJ1ZnNpemUpCisJCXNp emUgPSBidWZzaXplOworCisJc2l6ZSAtPSBzaXplICUgODsgLyogYWxpZ25tZW50ICovCisKKyAg ICAgICAgYWFkLT5fX2N1cnJfcmIgXj0gMTsgLyogc3dpdGNoIHJiIGJ1ZmZlciBzbyB0aGUgaXJx IGNhbiB3cml0ZSB0byB0aGUgb3RoZXIgYnVmZmVyIGR1cmluZworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0aGUgY29weSByb3V0aW5lICovCisKKyAgICAgICAgYWFkLT5fX3dyaXRl X3JiID0gYWFkLT5fX2FhZF9yYlthYWQtPl9fY3Vycl9yYl07CisKKwlpZiAocmItPmxlZnQgKyBz aXplID49IHJiLT5idWZzaXplIC0xKSB7CisJCWxlbiA9IHJiLT5idWZzaXplIC0gcmItPmxlZnQ7 CisJCWxlZnQgPSByYi0+bGVmdDsKKwkJcmItPmxlZnQgPSBzaXplIC0gbGVuOworICAgICAgICAJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmItPl9fYWFkX2xvY2ssIGZsYWdzKTsKKwkJY29weV90 b191c2VyKGJ1ZmZlciwgJnJiLT5idWZmZXJbbGVmdF0sIGxlbik7CisJCWNvcHlfdG9fdXNlcigm YnVmZmVyW2xlbl0sIHJiLT5idWZmZXIsIHNpemUgLSBsZW4pOworCX0gZWxzZSB7CisJCWxlZnQg PSByYi0+bGVmdDsKKwkJcmItPmxlZnQgKz0gc2l6ZTsKKyAgICAgICAgCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJnJiLT5fX2FhZF9sb2NrLCBmbGFncyk7CisJCWNvcHlfdG9fdXNlcihidWZmZXIs ICZyYi0+YnVmZmVyW2xlZnRdLCBzaXplKTsKKwl9CisKKyAgICAgICAgLyogcmVzZXQgb3VyIGJh Y2tlZCB1cCByaW5nYnVmZmVyICovCisJCisgICAgICAgIGFhZF9yYl9yZXNldF9idWZmZXIocmIp OworCS8qIHVubG9jayAqLworCXJldHVybiBzaXplOworfQorCisvKiBlbmQgcmluZ2J1ZmZlciBp bXBsZW1lbnRhdGlvbiAqLworCisvKiB1c2IgY29kZSAqLworCisjaWYgTElOVVhfVkVSU0lPTl9D T0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDE5KQorc3RhdGljIHZvaWQgZW0yOHh4X2FhZF9pc29j aXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCisjZWxzZQorc3RhdGlj IHZvaWQgZW0yOHh4X2FhZF9pc29jaXJxKHN0cnVjdCB1cmIgKnVyYikKKyNlbmRpZgoreworICAg IHN0cnVjdCBlbTI4eHhfYWFkX2luZm8gKmFhZCA9IHVyYi0+Y29udGV4dDsKKyAgICB1OCAqY3A7 CisgICAgaW50IGk7CisgICAgZm9yKGk9MDtpPHVyYi0+bnVtYmVyX29mX3BhY2tldHM7aSsrKXsK KyAgICAgICAgaW50IGxlbmd0aD11cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGg7 CisgICAgICAgIGNwPSh1bnNpZ25lZCBjaGFyICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJi LT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7CisKKyAgICAgICAgaWYoIWxlbmd0aCkKKyAgICAg ICAgICAgIGNvbnRpbnVlOworCisKKyAgICAgICAgaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0u c3RhdHVzKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYWFkX3JiX3dyaXRlX2Rh dGEoYWFkLT5fX3dyaXRlX3JiLCBjcCwgbGVuZ3RoKTsKKworICAgIH0KKyAgICB1cmItPnN0YXR1 cyA9IDA7CisKKyAgICBpZih1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKQorICAgICAg ICBwcmludGsoInVuYWJsZSB0byBzdWJtaXQgdXJiXG4iKTsKK30KKworc3RhdGljIGludCBhYWRf YXVkaW9faXNvY19kZWluaXQoc3RydWN0IGVtMjh4eF9hYWRfaW5mbyAqYWFkKQoreworICAgIGlu dCBpOworICAgIGZvcihpPTA7aTxBQURfQVVESU9fQlVGUztpKyspeworICAgICAgICB1c2Jfa2ls bF91cmIoYWFkLT51cmJbaV0pOworICAgICAgICB1c2JfZnJlZV91cmIoYWFkLT51cmJbaV0pOwor ICAgICAgICBhYWQtPnVyYltpXT1OVUxMOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBhYWRfYXVkaW9faXNvY19pbml0KHN0cnVjdCBlbTI4eHhfYWFkX2luZm8gKmFhZCkK K3sKKyAgICBpbnQgaTsKKyAgICBpbnQgZXJyQ29kZTsKKyAgICBjb25zdCBpbnQgc2Jfc2l6ZT1B QURfTlVNX0FVRElPX1BBQ0tFVFMgKiBBQURfQVVESU9fTUFYX1BBQ0tFVF9TSVpFOworCisgICAg cHJpbnRrKCJhYWRfaXNvYyBhdWRpbyBpbml0XG4iKTsKKworICAgIGZvcihpPTA7aTxBQURfQVVE SU9fQlVGUztpKyspeworICAgICAgICBzdHJ1Y3QgdXJiICp1cmI7CisgICAgICAgIGludCBqLGs7 CisgICAgICAgIGFhZC0+dHJhbnNmZXJfYnVmZmVyW2ldPWttYWxsb2Moc2Jfc2l6ZSxHRlBfQVRP TUlDKTsKKworICAgICAgICBpZighYWFkLT50cmFuc2Zlcl9idWZmZXJbaV0pCisgICAgICAgICAg ICByZXR1cm4gLUVOT01FTTsKKworICAgICAgICBtZW1zZXQoYWFkLT50cmFuc2Zlcl9idWZmZXJb aV0sMHg4MCxzYl9zaXplKTsKKyAgICAgICAgdXJiID0gdXNiX2FsbG9jX3VyYihBQURfTlVNX0FV RElPX1BBQ0tFVFMsR0ZQX0FUT01JQyk7CisKKyAgICAgICAgaWYodXJiKXsKKyAgICAgICAgICAg IHVyYi0+ZGV2PWFhZC0+X19hYWRfdWRldjsKKyAgICAgICAgICAgIHVyYi0+Y29udGV4dD1hYWQ7 CisgICAgICAgICAgICB1cmItPnBpcGU9dXNiX3Jjdmlzb2NwaXBlKGFhZC0+X19hYWRfdWRldiwg MHg4Myk7CisgICAgICAgICAgICB1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOwor ICAgICAgICAgICAgdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBhYWQtPnRyYW5zZmVyX2J1ZmZlcltp XTsKKyAgICAgICAgICAgIHVyYi0+aW50ZXJ2YWw9MTsKKyAgICAgICAgICAgIHVyYi0+Y29tcGxl dGUgPSBlbTI4eHhfYWFkX2lzb2NpcnE7CisgICAgICAgICAgICB1cmItPm51bWJlcl9vZl9wYWNr ZXRzID0gQUFEX05VTV9BVURJT19QQUNLRVRTOworICAgICAgICAgICAgdXJiLT50cmFuc2Zlcl9i dWZmZXJfbGVuZ3RoID0gc2Jfc2l6ZTsKKyAgICAgICAgICAgIGZvcihqPWs9MDsgajxBQURfTlVN X0FVRElPX1BBQ0tFVFM7aisrLGsrPUFBRF9BVURJT19NQVhfUEFDS0VUX1NJWkUpeworICAgICAg ICAgICAgICAgIHVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ub2Zmc2V0ID0gazsKKyAgICAgICAgICAg ICAgICB1cmItPmlzb19mcmFtZV9kZXNjW2pdLmxlbmd0aD1BQURfQVVESU9fTUFYX1BBQ0tFVF9T SVpFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYWFkLT51cmJbaV09dXJiOworICAgICAg ICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworCisgICAgfQorICAgIGZvcihp PTA7aTxBQURfQVVESU9fQlVGUztpKyspeworICAgICAgICBlcnJDb2RlID0gdXNiX3N1Ym1pdF91 cmIoYWFkLT51cmJbaV0sIEdGUF9BVE9NSUMpOworICAgICAgICBpZiAoZXJyQ29kZSl7CisgICAg ICAgICAgICBhYWRfYXVkaW9faXNvY19kZWluaXQoYWFkKTsKKyAgICAgICAgICAgIHJldHVybiBl cnJDb2RlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKiBjaGVhcCB1 c2VyY2hlY2sgKi8KK3N0YXRpYyBpbnQgYWFkX3VzZXJzOworCitzdGF0aWMgaW50IGFhZF9vcGVu KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKSB7CisJc3RydWN0IGVtMjh4 eF9hYWRfaW5mbyAqYWFkID0gTlVMTDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCisJaWYg KGFhZF91c2VycyAhPSAwKSAKKwkJcmV0dXJuIC1FQlVTWTsKKwlhYWRfdXNlcnMrKzsKKyAgICAg ICAgLyogVE9ETzogc3VwcG9ydCBtdWx0aXBsZSBkZXZpY2VzIGhlcmUgKi8KKwlsaXN0X2Zvcl9l YWNoKGxpc3QsICZlbTI4eHhfYWFkX2Rldmxpc3QpIHsKKwkJYWFkID0gbGlzdF9lbnRyeShsaXN0 LCBzdHJ1Y3QgZW0yOHh4X2FhZF9pbmZvLCBfX2FhZF9kZXZsaXN0KTsKKwkJYnJlYWs7CisJfQor CisJaWYgKGFhZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByaW50aygiZm91bmQg ZGV2aWNlIGVudHJ5IVxuIik7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBhYWQ7CisKKyAgICAg ICAgYWFkX3JiX3Jlc2V0X2J1ZmZlcihhYWQtPl9fd3JpdGVfcmIpOworICAgICAgICBhYWQtPl9f YWFkX2NhbGxiYWNrKGFhZC0+X19jYl9wcml2LCBFTTI4WFhfRU5BQkxFX0FVRElPLCBOVUxMKTsK KyAgICAgICAgYWFkX2F1ZGlvX2lzb2NfaW5pdChhYWQpOworCXJldHVybiAwOworfQorCitzdGF0 aWMgc3NpemVfdCBhYWRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1Ziwg c2l6ZV90IGNvdW50LCBsb2ZmX3QgKmZfcG9zKSB7CisJc3RydWN0IGVtMjh4eF9hYWRfaW5mbyAq YWFkID0gTlVMTDsKKwlzc2l6ZV90IHJldHZhbDsKKwlhYWQgPSBmaWxwLT5wcml2YXRlX2RhdGE7 CisJcmV0dmFsID0gYWFkX3JiX3JlYWRfZGF0YShhYWQsIGJ1ZiwgY291bnQpOworCXJldHVybiBy ZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgYWFkX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwg c3RydWN0IGZpbGUgKmZpbGUpIHsKKyAgICAgICAgc3RydWN0IGVtMjh4eF9hYWRfaW5mbyAqYWFk OworICAgICAgICBhYWQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJYWFkX3VzZXJzLS07CisgICAg ICAgIGFhZF9hdWRpb19pc29jX2RlaW5pdChhYWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMg c3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlbTI4eHhfYWFkX2ZvcHMgPSB7CisgICAgICAgIC5vd25l ciAgID0gVEhJU19NT0RVTEUsCisgICAgICAgIC5vcGVuICAgID0gYWFkX29wZW4sCisgICAgICAg IC5yZWFkICAgID0gYWFkX3JlYWQsCisgICAgICAgIC5yZWxlYXNlID0gYWFkX3JlbGVhc2UsCit9 OworCitzdGF0aWMgaW50IGVtMjh4eF9hYWRfcmVnaXN0ZXIoc3RydWN0IGVtMjh4eCAqZGV2KSB7 CisJc3RydWN0IGVtMjh4eF9hYWRfaW5mbyAqYWFkOworCWludCBpZDsKKwlhYWQgPSBremFsbG9j KHNpemVvZihzdHJ1Y3QgZW0yOHh4X2FhZF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWQgPSBmaW5k X2ZpcnN0X3plcm9fYml0KCZlbTI4eHhfYWFkX2RldmljZXMsIHNpemVvZih1MzIpKTsKKwllbTI4 eHhfYWFkX2RldmljZXMgfD0gKDE8PGlkKTsKKwlhYWQtPl9faWQgPSBpZDsKKyAgICAgICAgYWFk LT5fX2FhZF91ZGV2ID0gZGV2LT51ZGV2OworICAgICAgICBhYWQtPl9fYWFkX2NhbGxiYWNrID0g ZGV2LT5lbTI4eHhfYWFkX2NvbnRyb2w7CisgICAgICAgIGFhZC0+X19jYl9wcml2ID0gZGV2Owor ICAgICAgICBkZXYtPmFhZCA9IGFhZDsKKwlzbnByaW50ZihhYWQtPl9fYWFkX2Rldm5hbWUsIDUw LCAiYWFkJWQiLCBpZCk7CisJcHJpbnRrKCJlbTI4eHgtYWFkOiByZWdpc3RlcmVkIC9kZXYvJXNc biIsYWFkLT5fX2FhZF9kZXZuYW1lKTsKKworCWFhZC0+X19hYWRfbWFqb3IgPSByZWdpc3Rlcl9j aHJkZXYoMCwgYWFkLT5fX2FhZF9kZXZuYW1lLCAmZW0yOHh4X2FhZF9mb3BzKTsKKwlhYWQtPl9f YWFkX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCBhYWQtPl9fYWFkX2Rldm5hbWUp OworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDI2KQorCWFh ZC0+X19hYWRfY2RldiAgPSBjbGFzc19kZXZpY2VfY3JlYXRlKGFhZC0+X19hYWRfY2xhc3MsIE5V TEwsIE1LREVWKGFhZC0+X19hYWRfbWFqb3IsIDApLCBOVUxMLCBhYWQtPl9fYWFkX2Rldm5hbWUp OworI2Vsc2UKKy8qIFhYWCBub3cgaW4gMi42LjI3IGRldmljZV9jcmVhdGUgPT0gZGV2aWNlX2Ny ZWF0ZV9kcnZkYXRhIC4uLiAqLworLyogZHZiLWNvcmUvZHZiZGV2LmMgdXNlcyBkX2NfZHJ2ZGF0 YSBhbHJlYWR5LCBpbWl0YXRlIHRoYXQgc2luY2UgSSBkb24ndAorICoga25vdyBhbnkgYmV0dGVy Li4uICBYWFggICovCisgICAgICAgIGFhZC0+X19hYWRfY2RldiAgPSBkZXZpY2VfY3JlYXRlX2Ry dmRhdGEoYWFkLT5fX2FhZF9jbGFzcywgTlVMTCwKKyAgICAgICAgICAgICAgICBNS0RFVihhYWQt Pl9fYWFkX21ham9yLCAwKSwgTlVMTCwgYWFkLT5fX2FhZF9kZXZuYW1lKTsKKyNlbmRpZgorCisJ SU5JVF9MSVNUX0hFQUQoJmFhZC0+X19hYWRfZGV2bGlzdCk7CisJbGlzdF9hZGRfdGFpbCgmYWFk LT5fX2FhZF9kZXZsaXN0LCAmZW0yOHh4X2FhZF9kZXZsaXN0KTsKKworICAgICAgICAvKiB3ZSBj YW5ub3QgY29weSBvdXQgZnJvbSB0aGUgcmluZ3B1ZmZlciB3aGlsZSBpdCBpcyBzcGlubG9ja2Vk IHdpdGggMi42LjE3ICovCisJYWFkLT5fX2FhZF9yYlswXSA9IGFhZF9yYl9pbml0KCk7CisJYWFk LT5fX2FhZF9yYlsxXSA9IGFhZF9yYl9pbml0KCk7CisgICAgICAgIGFhZC0+X193cml0ZV9yYiA9 IGFhZC0+X19hYWRfcmJbMF07CisgICAgICAgIGFhZC0+X19jdXJyX3JiID0gMDsKKwlyZXR1cm4g MDsKK30KKwordm9pZCBlbTI4eHhfYWFkX3VucmVnaXN0ZXIoc3RydWN0IGVtMjh4eF9hYWRfaW5m byAqKmFhZF9pbnQpIHsKKwlzdHJ1Y3QgZW0yOHh4X2FhZF9pbmZvICphYWQgPSAoKmFhZF9pbnQp OworCWVtMjh4eF9hYWRfZGV2aWNlcyAmPSB+ICgxPDxhYWQtPl9faWQpOworI2lmIExJTlVYX1ZF UlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDI2KQorCWNsYXNzX2RldmljZV9kZXN0 cm95KGFhZC0+X19hYWRfY2xhc3MsIE1LREVWKGFhZC0+X19hYWRfbWFqb3IsIDApKTsKKyNlbHNl CisgICAgICAgIGRldmljZV9kZXN0cm95KGFhZC0+X19hYWRfY2xhc3MsIE1LREVWKGFhZC0+X19h YWRfbWFqb3IsIDApKTsKKyNlbmRpZgorCXVucmVnaXN0ZXJfY2hyZGV2KDAsIGFhZC0+X19hYWRf ZGV2bmFtZSk7CisJY2xhc3NfZGVzdHJveShhYWQtPl9fYWFkX2NsYXNzKTsKKwlhYWRfcmJfZnJl ZSgmYWFkLT5fX2FhZF9yYlswXSk7CisJYWFkX3JiX2ZyZWUoJmFhZC0+X19hYWRfcmJbMV0pOwor ICAgICAgICBsaXN0X2RlbCgmYWFkLT5fX2FhZF9kZXZsaXN0KTsKKworCWtmcmVlKGFhZCk7Cit9 CisKK3N0YXRpYyBpbnQgZW0yOHh4X2FhZF9maW5pKHN0cnVjdCBlbTI4eHggKmRldikgeworICAg IGVtMjh4eF9hYWRfdW5yZWdpc3RlcigmZGV2LT5hYWQpOworICAgIGRldi0+YWFkID0gTlVMTDsK KyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBlbTI4eHhfb3BzIGF1ZGlvX29wcyA9 IHsKKwkuaWQJPSBFTTI4WFhfQVVESU8sCisJLm5hbWUJPSAiRW0yOHh4IEFsdGVybmF0aXZlIEF1 ZGlvIERyaXZlciIsCisJLmluaXQJPSBlbTI4eHhfYWFkX3JlZ2lzdGVyLAorCS5maW5pCT0gZW0y OHh4X2FhZF9maW5pLAorfTsKKworc3RhdGljIGludCBfX2luaXQgIGVtMjh4eF9hYWRfaW5pdCh2 b2lkKSB7CisJcHJpbnRrKCJpbml0aWFsaXppbmcgRW1waWEgQXVkaW8gRHJpdmVyXG4iKTsKKwlw cmludGsoIkNvcHlyaWdodCAoQykgMjAwOCBFbXBpYSBUZWNobm9sb2d5IEluY1xuIik7CisJcHJp bnRrKCJDb3B5cmlnaHQgKEMpIDIwMDggU3VuZHRlayBMdGQuXG4iKTsKKworCWVtMjh4eF9tYXhk ZXZzID0gc2l6ZW9mKGludCk7CisJcmV0dXJuIGVtMjh4eF9yZWdpc3Rlcl9leHRlbnNpb24oJmF1 ZGlvX29wcyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBlbTI4eHhfYWFkX2V4aXQodm9pZCkg eworCXByaW50aygicmVsZWFzaW5nIEVtcGlhIEF1ZGlvIERyaXZlclxuIik7CisJZW0yOHh4X3Vu cmVnaXN0ZXJfZXh0ZW5zaW9uKCZhdWRpb19vcHMpOworfQorCitNT0RVTEVfQVVUSE9SKCJFbXBp YSBUZWNobm9sb2d5IEluYy4vU3VuZHRlayBMdGQuIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFs dGVybmF0aXZlIEF1ZGlvIERyaXZlciBmb3IgRW1waWEgYmFzZWQgZGV2aWNlcyIpOworTU9EVUxF X0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfaW5pdChlbTI4eHhfYWFkX2luaXQpOworbW9kdWxl X2V4aXQoZW0yOHh4X2FhZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8v ZW1waWEvZW0yOHh4LWFhZC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbXBpYS9lbTI4eHgtYWFk LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQzOWVkMQotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW1waWEvZW0yOHh4LWFhZC5oCkBAIC0wLDAg KzEsNDYgQEAKKyNpZm5kZWYgX19FTTI4WFhfQUFEX0gKKyNkZWZpbmUgX19FTTI4WFhfQUFEX0gK KworI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1 ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8 bGludXgvY29tcGlsZXIuaD4gLyogbmVlZCBfX3VzZXIgKi8KKworI2RlZmluZSBNQVhfQUFEX0RF VlMgMTAKKworc3RydWN0IGFhZF9yYl9pbmZvIHsKKyAgICBzcGlubG9ja190IF9fYWFkX2xvY2s7 CisgICAgdTMyIGxlZnQ7CisgICAgdTMyIHJpZ2h0OworICAgIHUzMiBwb3M7CisgICAgdTMyIGJ1 ZnNpemU7CisgICAgdTggKmJ1ZmZlcjsKK307CisKKyNkZWZpbmUgQUFEX0FVRElPX0JVRlMgMwor I2RlZmluZSBBQURfTlVNX0FVRElPX1BBQ0tFVFMgNjQKKyNkZWZpbmUgQUFEX0FVRElPX01BWF9Q QUNLRVRfU0laRSAxOTYgLyogc3RhdGljIHZhbHVlICovCisKK3N0cnVjdCBlbTI4eHhfYWFkX2lu Zm8geworICAgIHUzMiBfX2lkOworICAgIHU4IF9fYWFkX2Rldm5hbWVbNTBdOworI2lmIExJTlVY X1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDI2KQorICAgIHN0cnVjdCBjbGFz c19kZXZpY2UgKl9fYWFkX2NkZXY7CisjZWxzZQorICAgIHN0cnVjdCBkZXZpY2UgKl9fYWFkX2Nk ZXY7CisjZW5kaWYKKyAgICBpbnQgX19hYWRfbWFqb3I7CisgICAgc3RydWN0IGNsYXNzICpfX2Fh ZF9jbGFzczsKKyAgICBzdHJ1Y3QgbGlzdF9oZWFkIF9fYWFkX2Rldmxpc3Q7CisgICAgc3RydWN0 IGFhZF9yYl9pbmZvICpfX2FhZF9yYlsyXTsKKyAgICBzdHJ1Y3QgYWFkX3JiX2luZm8gKl9fd3Jp dGVfcmI7CisgICAgdTggX19jdXJyX3JiOworICAgIHN0cnVjdCB1c2JfZGV2aWNlICpfX2FhZF91 ZGV2OworICAgIHU4ICp0cmFuc2Zlcl9idWZmZXJbQUFEX0FVRElPX0JVRlNdOworICAgIHN0cnVj dCB1cmIgKnVyYltBQURfQVVESU9fQlVGU107CisgICAgaW50ICgqX19hYWRfY2FsbGJhY2spKHZv aWQgKiwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKKyAgICB2b2lkICpfX2NiX3ByaXY7 Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW1waWEvZW0y OHh4LWF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtcGlhL2VtMjh4eC1hdWRpby5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZDA2YTcKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtcGlhL2VtMjh4eC1hdWRpby5jCkBAIC0wLDAgKzEs NjMwIEBACisvKgorICogIEVtcGlhdGVjaCBlbTI4eDEgYXVkaW8gZXh0ZW5zaW9uCisgKgorICog IENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgUmVjaGJlcmdlciA8bXJlY2hiZXJnZXJAc3VuZHRl ay5kZT4KKyAqCisgKiAgVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gbXkgcHJldmlvdXMgYXU2MDAg dXNiIHBzdG4gYXVkaW8gZHJpdmVyCisgKiAgYW5kIGluaGVyaXRzIGFsbCB0aGUgY29weXJpZ2h0 cworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAq ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j LiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1 ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRl IDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgv c291bmQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3Nv dW5kY2FyZC5oPgorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYs IDI1KQorI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgorI2VuZGlmCisjaW5jbHVkZSA8bGludXgv c2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9j X2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC93 YWl0Lmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFt cy5oPgorI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+ CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNp bmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgImVtMjh4eC5oIgorI2luY2x1 ZGUgInhjNTAwMC94YzUwMDBfY29udHJvbC5oIgorCitzdGF0aWMgaW50IGluZGV4W1NORFJWX0NB UkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOworc3RhdGljIGludCBlbTI4eHhfY21kKHN0cnVjdCBl bTI4eHggKmRldiwgaW50IGNtZCxpbnQgYXJnKTsKKworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RF IDw9IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKK3N0YXRpYyBpbnQgc25kX3BjbV9hbGxvY192bWFs bG9jX2J1ZmZlcihzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzLCBzaXplX3Qgc2l6ZSkKKyNlbHNl CitzdGF0aWMgaW50IHNuZF9wY21fYWxsb2Nfdm1hbGxvY19idWZmZXIoc3RydWN0IHNuZF9wY21f c3Vic3RyZWFtICpzdWJzLCBzaXplX3Qgc2l6ZSkKKyNlbmRpZgoreworI2lmIExJTlVYX1ZFUlNJ T05fQ09ERSA8PSBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJc25kX3BjbV9ydW50aW1lX3QgKnJ1 bnRpbWUgPSBzdWJzLT5ydW50aW1lOworI2Vsc2UKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpy dW50aW1lID0gc3Vicy0+cnVudGltZTsKKyNlbmRpZgorCWlmKHJ1bnRpbWUtPmRtYV9hcmVhKXsK KwkJaWYocnVudGltZS0+ZG1hX2J5dGVzID4gc2l6ZSkKKwkJCXJldHVybiAwOworCQl2ZnJlZShy dW50aW1lLT5kbWFfYXJlYSk7CisJfQorCXJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvYyhzaXpl KTsKKwlpZighcnVudGltZSAtPmRtYV9hcmVhKQorCQlyZXR1cm4gLUVOT01FTTsKKwlydW50aW1l LT5kbWFfYnl0ZXMgPSBzaXplOworCXJldHVybiAwOworfQorCisjaWYgTElOVVhfVkVSU0lPTl9D T0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKK3N0YXRpYyBzbmRfcGNtX2hhcmR3YXJlX3Qg c25kX2VtMjh4eF9od19jYXB0dXJlID0geworI2Vsc2UKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9o YXJkd2FyZSBzbmRfZW0yOHh4X2h3X2NhcHR1cmUgPSB7CisjZW5kaWYKKwkuaW5mbyA9IFNORFJW X1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwgCisJCVNORFJWX1BDTV9JTkZPX01NQVAgfCAKKwkJ U05EUlZfUENNX0lORk9fQkFUQ0ggfAorCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCAgfCAK KwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCwKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRC SVRfUzE2X0xFLAorCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFX0NPTlRJTlVPVVMgfCBTTkRSVl9Q Q01fUkFURV9LTk9ULAorCS5yYXRlX21pbiA9IDQ4MDAwLAorCS5yYXRlX21heCA9IDQ4MDAwLAor CS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5idWZmZXJfYnl0ZXNf bWF4ID0gMTAyNCoxMDI0LCAKKwkucGVyaW9kX2J5dGVzX21pbiA9IDY0LCAKKwkucGVyaW9kX2J5 dGVzX21heCA9IDUxMioxMDI0LAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0g MTAyNCwKK307CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZFUlNJT04oMiw2 LDE2KQorc3RhdGljIGludCBzbmRfZW0yOHh4X2NhcHR1cmVfb3BlbihzbmRfcGNtX3N1YnN0cmVh bV90ICpzdWJzdHJlYW0pCisjZWxzZQorc3RhdGljIGludCBzbmRfZW0yOHh4X2NhcHR1cmVfb3Bl bihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKKyNlbmRpZgoreworCWludCBy ZXQgPSAwOworCWludCBtb2RlOworCWludCBhcmc7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gc25k X3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8 PSBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBz dWJzdHJlYW0tPnJ1bnRpbWU7CisjZWxzZQorCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRp bWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisjZW5kaWYKKwlwcmludGsoIm9wZW5pbmcgcmFkaW8g ZGV2aWNlIGFuZCB0cnlpbmcgdG8gYWNxdWlyZSBleGNsdXNpdmUgbG9ja1xuIik7CisgICAgICAg IHN3aXRjaChkZXYtPm1vZGUpeworCWNhc2UgVjRMMl9UVU5FUl9ESUdJVEFMX1RWOgorCQkvKiBk aWdpdGFsIGhhcyBubyBzdXBwb3J0IGZvciBhbmFsb2cgYXVkaW8gKi8KKwkJcmV0ID0gZGV2LT5l bTI4eHhfYWNxdWlyZShkZXYsIEVNMjhYWF9SQURJTywgMSk7IAorCQlpZiAocmV0ICE9IDAgKSB7 CisJCQlwcmludGsoImRldmljZSBpcyBhbHJlYWR5IGluIHVzZSBieSBEVkItVFxuIik7CisJCQly ZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCB2NGwyX3R1bmVyIHR1bmVyOwor CQkJc3RydWN0IHY0bDJfcm91dGluZyBhcm91dGluZzsKKwkJCXByaW50aygic3dpdGNoaW5nIGRl dmljZSB0byBGTSBtb2RlXG4iKTsKKworCQkJbW9kZSA9IFY0TDJfVFVORVJfUkFESU87CisJCQlt ZW1zZXQoJnR1bmVyLCAweDAsIHNpemVvZihzdHJ1Y3QgdjRsMl90dW5lcikpOworCQkJdHVuZXIu dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisKKwkJCWRldi0+bW9kZSA9IG1vZGU7CisJCQorCQkJ YXJnID0gRU0yOFhYX1JFR19PTjsKKwkJCWRldi0+ZW0yOHh4X2dwaW9fY29udHJvbChkZXYsIEVN MjhYWF9BTkFMT0dfT04sICZhcmcpOworCQkJZGV2LT5lbTI4eHhfZ3Bpb19jb250cm9sKGRldiwg RU0yOFhYX0xFRDFfT04sICZhcmcpOworCQkJZGV2LT5lbTI4eHhfZ3Bpb19jb250cm9sKGRldiwg RU0yOFhYX1RVTkVSMV9PTiwgJmFyZyk7CisJCQlhcmcgPSBFTTI4WFhfUkVHX09GRjsKKwkJCWRl di0+ZW0yOHh4X2dwaW9fY29udHJvbChkZXYsIEVNMjhYWF9UUzFfT04sICZhcmcpOworCQkJbWRl bGF5KDEwMCk7CisKKwkJCS8qIHVwbG9hZCBmaXJtd2FyZSAqLworCQkJc3dpdGNoKGRldi0+dHVu ZXJfdHlwZSkgeworCQkJY2FzZSBUVU5FUl9YQ0VJVkVfWEMzMDI4OgorCQkJCXsKKwkJCQkJc3Ry dWN0IHhjMzAyOF9pbml0X2NtZCBjbWQ7CisKKwkJCQkJLyogdGhpcyBpcyBtb3Jlb3ZlciB0byBz d2l0Y2ggdGhlIGRlY29kZXIgdG8gRk0gKi8KKwkJCQkJY21kLm5ld190dl9tb2RlX3B0ciA9IGRl di0+Zm1ub3JtLT50dl9tb2RlOworCQkJCQljbWQubmV3X2NoYW5uZWxfbWFwX3B0ciA9IGRldi0+ Zm1ub3JtLT5jaGFubmVsbWFwOworCQkJCQlpZiAoZGV2LT50dW5lcikKKwkJCQkJCWRldi0+dHVu ZXItPnR1bmVyX2NtZChkZXYtPnR1bmVyLCBYQzMwMjhfSU5JVF9UVU5FUiwgJmNtZCk7CisJCQkJ CWJyZWFrOworCQkJCX0gCisJCQljYXNlIFRVTkVSX1hDRUlWRV9YQzUwMDA6CisJCQkJeworCQkJ CQlzdHJ1Y3QgeGNfc3RkX2NvbmYgY21kOworCQkJCQkvKiB0aGlzIGlzIG1vcmVvdmVyIHRvIHN3 aXRjaCB0aGUgZGVjb2RlciB0byBGTSAqLworCQkJCQlpZiAoZGV2LT50dW5lcikgeworCQkJCQkJ ZGV2LT50dW5lci0+dHVuZXJfY21kKGRldi0+dHVuZXIsIFhDNTAwMF9JTklUX1RVTkVSLCBOVUxM KTsKKwkJCQkJCWNtZC5pbmRleD1kZXYtPmZtbm9ybS0+aW5kZXg7CisJCQkJCQlkZXYtPnR1bmVy LT50dW5lcl9jbWQoZGV2LT50dW5lciwgWEM1MDAwX1NFVF9NT0RFLCAmY21kKTsKKwkJCQkJfQor CQkJCQlicmVhazsKKwkJCQl9CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCisJCQlk ZXYtPmVtMjh4eF93cml0ZV9yZWdfYml0cyhkZXYsIFIwRl9YQ0xLX1JFRywgMHg4MCwgMHg4MCk7 CisKKwkJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX0lOVF9SRVNFVCwgMCk7 CisJCQkKKwkJCWFyb3V0aW5nLmlucHV0ID0gQ1gyNTg0M19SQURJTzsKKwkJCWVtMjh4eF9pMmNf Y2FsbF9jbGllbnRzKGRldiwgVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsICZhcm91dGluZyk7 CisKKwkJCXByaW50aygicmV0cmlldmVkIG1vZGUgZnJvbSB0dW5lcjogJWRcbiIsbW9kZSk7CisJ CX0KKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfVFVORVJfQU5BTE9HX1RWOgorCQlwcmludGsoImVt Mjh4eC1hdWRpbzogZGV2aWNlIGlzIGN1cnJlbnRseSBpbiBhbmFsb2cgVFYgbW9kZVxuIik7CisJ CS8qIHVubXV0ZSBieSBkZWZhdWx0ICovCisJCXJldCA9IGRldi0+ZW0yOHh4X2FjcXVpcmUoZGV2 LCBFTTI4WFhfVklERU8sIDEpOyAKKwkJaWYgKHJldCE9MCkKKwkJCXJldHVybiAtRUJVU1k7CisK KwkJZGV2LT5lbTI4eHhfd3JpdGVfcmVnX2JpdHMoZGV2LCBSMEZfWENMS19SRUcsIDB4ODAsIDB4 ODApOworCisJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9SQURJTzoKKwl7CisJCXN0cnVjdCB2 NGwyX3JvdXRpbmcgYXJvdXRpbmc7CisJCS8qIGNoZWNrIGN1cnJlbnQgbW9kZSBhbmQgcHV0IGEg aGFyZCBsb2NrIG9udG8gaXQgKi8KKwkJcHJpbnRrKCJlbTI4eHgtYXVkaW86IGRldmljZSBpcyBj dXJyZW50bHkgaW4gYW5hbG9ndWUgRk0gbW9kZVxuIik7CisJCS8qIHVubXV0ZSBieSBkZWZhdWx0 IGhlcmUgKi8KKwkJcmV0ID0gZGV2LT5lbTI4eHhfYWNxdWlyZShkZXYsIEVNMjhYWF9SQURJTywg MSk7IAorCisJCWRldi0+bW9kZSA9IFY0TDJfVFVORVJfUkFESU87CisKKwkJaWYgKCByZXQgPT0g MCApIAorCQkJcHJpbnRrKCJkZXZpY2UgaXMgbG9ja2VkIGluIGZtcmFkaW8gbW9kZSBub3dcbiIp OworCisJCWRldi0+ZW0yOHh4X3dyaXRlX3JlZ19iaXRzKGRldiwgUjBGX1hDTEtfUkVHLCAweDgw LCAweDgwKTsKKwkJYXJvdXRpbmcuaW5wdXQgPSBDWDI1ODQzX1JBRElPOworCQllbTI4eHhfaTJj X2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCAmYXJvdXRpbmcp OworCisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlwcmludGsoImVtMjh4eC1hdWRpbzogdW5o YW5kbGVkIG1vZGUgJWRcbiIsIGRldi0+bW9kZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwly dW50aW1lLT5odyA9IHNuZF9lbTI4eHhfaHdfY2FwdHVyZTsKKwlpZihkZXYtPmFsdCA9PSAwICYm IGRldi0+YWRldi0+dXNlcnMgPT0gMCApIHsKKwkJaW50IGVyckNvZGU7CisJCWRldi0+YWx0ID0g NzsKKwkJZXJyQ29kZSA9IHVzYl9zZXRfaW50ZXJmYWNlKGRldi0+dWRldiwgZGV2LT51c2JfaW50 ZXJmYWNlLCA3KTsKKwkJcHJpbnRrKCJjaGFuZ2luZyBhbHRlcm5hdGUgbnVtYmVyIHRvIDdcbiIp OworCX0KKwlkZXYtPmFkZXYtPnVzZXJzKys7CisJc25kX3BjbV9od19jb25zdHJhaW50X2ludGVn ZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOworCWRldi0+YWRldi0+Y2Fw dHVyZV9wY21fc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9 IGRldjsKKwlyZXR1cm4gMDsKK30KKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSBLRVJORUxf VkVSU0lPTigyLDYsMTYpCitzdGF0aWMgaW50IHNuZF9lbTI4eHhfcGNtX2Nsb3NlKHNuZF9wY21f c3Vic3RyZWFtX3QgKnN1YnN0cmVhbSkKKyNlbHNlCitzdGF0aWMgaW50IHNuZF9lbTI4eHhfcGNt X2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorI2VuZGlmCit7CisJ c3RydWN0IGVtMjh4eCAqZGV2ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwor CWludCBhbW9kZSA9IDA7CisJZGV2LT5hZGV2LT51c2Vycy0tOworCisJLyogZGVjcmVhc2UgYXVk aW8gcmVmZXJlbmNlICovCisJc3dpdGNoKGRldi0+bW9kZSkgeworCQljYXNlIFY0TDJfVFVORVJf QU5BTE9HX1RWOgorCQkJYW1vZGUgPSBFTTI4WFhfVklERU87CisJCQlicmVhazsKKwkJY2FzZSBW NEwyX1RVTkVSX1JBRElPOgorCQkJYW1vZGUgPSBFTTI4WFhfUkFESU87CisJCQlicmVhazsKKwkJ ZGVmYXVsdDoKKwkJCXByaW50aygiaW52YWxpZCBtb2RlOiAlZFxuIixkZXYtPm1vZGUpOworCQkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2LT5lbTI4eHhfYWNxdWlyZShkZXYsIGFtb2RlLCAw KTsgCisKKwlpZihkZXYtPmFkZXYtPnVzZXJzID09IDAgJiYgZGV2LT5hZGV2LT5zaHV0ZG93biA9 PSAxKSB7CisJCWRldi0+YWRldi0+c2h1dGRvd24gPSAwOworCQllbTI4eHhfY21kKGRldixFTTI4 WFhfQ0FQVFVSRV9TVFJFQU1fRU4sMCk7CisJfQorCXdha2VfdXAoJmRldi0+YWRldi0+b3Blbik7 CisJcmV0dXJuIDA7Cit9CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZFUlNJ T04oMiw2LDE2KQorc3RhdGljIGludCBzbmRfZW0yOHh4X2h3X2NhcHR1cmVfcGFyYW1zKHNuZF9w Y21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwgc25kX3BjbV9od19wYXJhbXNfdCAqaHdfcGFyYW1z KQorI2Vsc2UKK3N0YXRpYyBpbnQgc25kX2VtMjh4eF9od19jYXB0dXJlX3BhcmFtcyhzdHJ1Y3Qg c25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpo d19wYXJhbXMpCisjZW5kaWYKK3sKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbHMsIHJhdGUsIGZvcm1h dDsKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVh bSk7CisJaW50IHJldDsKKwlyZXQgPSBzbmRfcGNtX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN1YnN0 cmVhbSwgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKwlkZXYtPmFkZXYtPmh3cHRy X2RvbmVfY2FwdHVyZSA9IDA7CisKKwlmb3JtYXQgPSBwYXJhbXNfZm9ybWF0KGh3X3BhcmFtcyk7 CisJcmF0ZSA9IHBhcmFtc19yYXRlKGh3X3BhcmFtcyk7CisJY2hhbm5lbHMgPSBwYXJhbXNfY2hh bm5lbHMoaHdfcGFyYW1zKTsKKwkvKiBUT0RPOiBzZXQgdXAgZW0yOHh4IGF1ZGlvIGNoaXAgdG8g ZGVsaXZlciB0aGUgY29ycmVjdCBhdWRpbyBmb3JtYXQsIAorCSAgIHhjNTAwMC9jeDI1ODQzIHN1 cHBvcnRzIHN0ZXJlbworCSAgIHhjMzAyOC9lbTIwMiBzdXBwb3J0cyBtb25vIG9ubHkKKwkgICAq LworCXJldHVybiAwOworfQorCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJT SU9OKDIsNiwxNikKK3N0YXRpYyBpbnQgc25kX2VtMjh4eF9od19jYXB0dXJlX2ZyZWUoc25kX3Bj bV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQorI2Vsc2UKK3N0YXRpYyBpbnQgc25kX2VtMjh4eF9o d19jYXB0dXJlX2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCisjZW5k aWYKK3sKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0 cmVhbSk7CisKKwlpZihkZXYtPmFkZXYtPmNhcHR1cmVfc3RyZWFtPT1TVFJFQU1fT04pCisJCWVt Mjh4eF9jbWQoZGV2LEVNMjhYWF9DQVBUVVJFX1NUUkVBTV9FTiwwKTsKKworCXJldHVybiAwOwor fQorCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKK3N0 YXRpYyBpbnQgc25kX2VtMjh4eF9wcmVwYXJlKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVh bSkKKyNlbHNlCitzdGF0aWMgaW50IHNuZF9lbTI4eHhfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9z dWJzdHJlYW0gKnN1YnN0cmVhbSkKKyNlbmRpZgoreworCXJldHVybiAwOworfQorCisjaWYgTElO VVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKK3N0YXRpYyBpbnQgc25k X2VtMjh4eF9jYXB0dXJlX3RyaWdnZXIoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLCBp bnQgY21kKQorI2Vsc2UKK3N0YXRpYyBpbnQgc25kX2VtMjh4eF9jYXB0dXJlX3RyaWdnZXIoc3Ry dWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCisjZW5kaWYKK3sKKwlz dHJ1Y3QgZW0yOHh4ICpkZXYgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJ c3dpdGNoKGNtZCl7CisJCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCQllbTI4eHhf Y21kKGRldixFTTI4WFhfQ0FQVFVSRV9TVFJFQU1fRU4sMSk7CisJCQlyZXR1cm4gMDsKKwkJY2Fz ZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQkJZGV2LT5hZGV2LT5zaHV0ZG93bj0xOworCQkJ cmV0dXJuIDA7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKyNpZiBM SU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTkpCitzdGF0aWMgdm9pZCBl bTI4eHhfYXVkaW9faXNvY2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdz KQorI2Vsc2UKK3N0YXRpYyB2b2lkIGVtMjh4eF9hdWRpb19pc29jaXJxKHN0cnVjdCB1cmIgKnVy YikKKyNlbmRpZgoreworCXN0cnVjdCBlbTI4eHggKmRldiA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1 Y3QgZW0yOHh4X2F1ZGlvICphZGV2ID0gZGV2LT5hZGV2OworCWludCBpOworCXVuc2lnbmVkIGlu dCBvbGRwdHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcGVyaW9kX2VsYXBzZWQgPSAw OworCWludCBzdGF0dXM7CisJdW5zaWduZWQgY2hhciAqY3A7CisJdW5zaWduZWQgaW50IHN0cmlk ZTsKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorCXNu ZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbTsKKwlzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGlt ZTsKKyNlbHNlCisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CisJc3RydWN0 IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKKyNlbmRpZgorICAgICAgICBpZiAoYWRldi0+Y2Fw dHVyZV9zdHJlYW0gPT0gU1RSRUFNX0lOVEVSUlVQVCkgeworICAgICAgICAgICAgICAgIGFkZXYt PmNhcHR1cmVfc3RyZWFtID0gU1RSRUFNX09GRjsKKyAgICAgICAgICAgICAgICB3YWtlX3VwX2lu dGVycnVwdGlibGUoJmFkZXYtPmF1ZGlvX3dhaXRfc3RyZWFtKTsKKyAgICAgICAgfQorCisJaWYg KChkZXYtPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgfHwgCisJCQkoZGV2LT5zdGF0ZSAmIERF Vl9NSVNDT05GSUdVUkVEKSkgICAgICAgICAgICAgICAgCisJCXJldHVybjsKKworCisJaWYoZGV2 LT5hZGV2LT5jYXB0dXJlX3BjbV9zdWJzdHJlYW0peworCQlzdWJzdHJlYW09ZGV2LT5hZGV2LT5j YXB0dXJlX3BjbV9zdWJzdHJlYW07CisJCXJ1bnRpbWU9c3Vic3RyZWFtLT5ydW50aW1lOworCisJ CXN0cmlkZSA9IHJ1bnRpbWUtPmZyYW1lX2JpdHMgPj4gMzsKKwkJZm9yKGk9MDtpPHVyYi0+bnVt YmVyX29mX3BhY2tldHM7aSsrKXsKKworCQkJaW50IGxlbmd0aD11cmItPmlzb19mcmFtZV9kZXNj W2ldLmFjdHVhbF9sZW5ndGgvc3RyaWRlOworCQkJY3A9KHVuc2lnbmVkIGNoYXIgKikgdXJiLT50 cmFuc2Zlcl9idWZmZXIgKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKKworCQkJaWYo IWxlbmd0aCkKKwkJCQljb250aW51ZTsKKworCisJCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tp XS5zdGF0dXMpIAorCQkJCWNvbnRpbnVlOworCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5h ZGV2LT5zbG9jaywgZmxhZ3MpOworCQkJb2xkcHRyID0gZGV2LT5hZGV2LT5od3B0cl9kb25lX2Nh cHR1cmU7CisJCQlkZXYtPmFkZXYtPmh3cHRyX2RvbmVfY2FwdHVyZSArPWxlbmd0aDsKKwkJCWlm KGRldi0+YWRldi0+aHdwdHJfZG9uZV9jYXB0dXJlID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQor CQkJCWRldi0+YWRldi0+aHdwdHJfZG9uZV9jYXB0dXJlIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXpl OworCisJCQlkZXYtPmFkZXYtPmNhcHR1cmVfdHJhbnNmZXJfZG9uZSArPSBsZW5ndGg7CisJCQlp ZihkZXYtPmFkZXYtPmNhcHR1cmVfdHJhbnNmZXJfZG9uZSA+PSBydW50aW1lLT5wZXJpb2Rfc2l6 ZSl7CisJCQkJZGV2LT5hZGV2LT5jYXB0dXJlX3RyYW5zZmVyX2RvbmUgLT0gcnVudGltZS0+cGVy aW9kX3NpemU7CisJCQkJcGVyaW9kX2VsYXBzZWQ9MTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmRldi0+YWRldi0+c2xvY2ssIGZsYWdzKTsKKworCQkJaWYob2xkcHRyICsgbGVu Z3RoID4gcnVudGltZS0+YnVmZmVyX3NpemUpeworCQkJCXVuc2lnbmVkIGludCBjbnQgPSBydW50 aW1lLT5idWZmZXJfc2l6ZS1vbGRwdHI7CisJCQkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhK29s ZHB0cipzdHJpZGUsIGNwICwgY250KnN0cmlkZSk7CisJCQkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9h cmVhLCBjcCArIGNudCpzdHJpZGUsIGxlbmd0aCpzdHJpZGUgLSBjbnQqc3RyaWRlKTsKKwkJCX0g ZWxzZSB7CisJCQkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhK29sZHB0cipzdHJpZGUsIGNwLCBs ZW5ndGgqc3RyaWRlKTsKKwkJCX0KKwkJfQorCQlpZihwZXJpb2RfZWxhcHNlZCl7CisJCQlzbmRf cGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7CisJCX0KKwl9CisJdXJiLT5zdGF0dXMgPSAw OworCQorCWlmKGRldi0+YWRldi0+c2h1dGRvd24pCisJCXJldHVybjsKKworCWlmKChzdGF0dXMg PSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSkKKwkJZW0yOHh4X2VycmRldigicmVz dWJtaXQgb2YgYXVkaW8gdXJiIGZhaWxlZCAoZXJyb3I9JWkpXG4iLCBzdGF0dXMpOworCXJldHVy bjsKK30KKworc3RhdGljIGludCBlbTI4eHhfaXNvY19hdWRpb19kZWluaXQoc3RydWN0IGVtMjh4 eCAqZGV2KQoreworCWludCBpOworCWZvcihpPTA7aTxFTTI4WFhfQVVESU9fQlVGUztpKyspewor CQl1c2Jfa2lsbF91cmIoZGV2LT5hZGV2LT51cmJbaV0pOworCQl1c2JfZnJlZV91cmIoZGV2LT5h ZGV2LT51cmJbaV0pOworCQlkZXYtPmFkZXYtPnVyYltpXT1OVUxMOworCX0KKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBlbTI4eHhfaW5pdF9hdWRpb19pc29jKHN0cnVjdCBlbTI4eHggKmRl dikKK3sKKwlpbnQgaTsKKwlpbnQgZXJyQ29kZTsKKwljb25zdCBpbnQgc2Jfc2l6ZT1FTTI4WFhf TlVNX0FVRElPX1BBQ0tFVFMgKiBFTTI4WFhfQVVESU9fTUFYX1BBQ0tFVF9TSVpFOworCisJZm9y KGk9MDtpPEVNMjhYWF9BVURJT19CVUZTO2krKyl7CisJCXN0cnVjdCB1cmIgKnVyYjsKKwkJaW50 IGosazsKKwkJZGV2LT5hZGV2LT50cmFuc2Zlcl9idWZmZXJbaV09a21hbGxvYyhzYl9zaXplLEdG UF9BVE9NSUMpOworCisJCWlmKCFkZXYtPmFkZXYtPnRyYW5zZmVyX2J1ZmZlcltpXSkKKwkJCXJl dHVybiAtRU5PTUVNOworCisJCW1lbXNldChkZXYtPmFkZXYtPnRyYW5zZmVyX2J1ZmZlcltpXSww eDgwLHNiX3NpemUpOworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKEVNMjhYWF9OVU1fQVVESU9fUEFD S0VUUyxHRlBfQVRPTUlDKTsKKworCQlpZih1cmIpeworCQkJdXJiLT5kZXY9ZGV2LT51ZGV2Owor CQkJdXJiLT5jb250ZXh0PWRldjsKKwkJCXVyYi0+cGlwZT11c2JfcmN2aXNvY3BpcGUoZGV2LT51 ZGV2LDB4ODMpOworCQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJCXVy Yi0+dHJhbnNmZXJfYnVmZmVyID0gZGV2LT5hZGV2LT50cmFuc2Zlcl9idWZmZXJbaV07CisJCQl1 cmItPmludGVydmFsPTE7CisJCQl1cmItPmNvbXBsZXRlID0gZW0yOHh4X2F1ZGlvX2lzb2NpcnE7 CisJCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gRU0yOFhYX05VTV9BVURJT19QQUNLRVRTOwor CQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gc2Jfc2l6ZTsKKwkJCWZvcihqPWs9MDsg ajxFTTI4WFhfTlVNX0FVRElPX1BBQ0tFVFM7aisrLGsrPUVNMjhYWF9BVURJT19NQVhfUEFDS0VU X1NJWkUpeworCQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ub2Zmc2V0ID0gazsKKwkJCQl1cmIt Pmlzb19mcmFtZV9kZXNjW2pdLmxlbmd0aD1FTTI4WFhfQVVESU9fTUFYX1BBQ0tFVF9TSVpFOwor CQkJfQorCQkJZGV2LT5hZGV2LT51cmJbaV09dXJiOworCQl9IGVsc2UgCisJCQlyZXR1cm4gLUVO T01FTTsKKworCX0KKwlmb3IoaT0wO2k8RU0yOFhYX0FVRElPX0JVRlM7aSsrKXsKKwkJZXJyQ29k ZSA9IHVzYl9zdWJtaXRfdXJiKGRldi0+YWRldi0+dXJiW2ldLCBHRlBfQVRPTUlDKTsKKwkJaWYg KGVyckNvZGUpeworCQkJZW0yOHh4X2lzb2NfYXVkaW9fZGVpbml0KGRldik7CisJCQlyZXR1cm4g ZXJyQ29kZTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGVtMjh4eF9j bWQoc3RydWN0IGVtMjh4eCAqZGV2LCBpbnQgY21kLGludCBhcmcpCit7CisJc3dpdGNoKGNtZCl7 CisJCWNhc2UgRU0yOFhYX0NBUFRVUkVfU1RSRUFNX0VOOgorCQkJaWYoZGV2LT5hZGV2LT5jYXB0 dXJlX3N0cmVhbSA9PSBTVFJFQU1fT0ZGICYmIGFyZz09MSl7CisJCQkJZGV2LT5hZGV2LT5jYXB0 dXJlX3N0cmVhbT1TVFJFQU1fT047CisJCQkJZW0yOHh4X2luaXRfYXVkaW9faXNvYyhkZXYpOwor CQkJfSBlbHNlIGlmIChkZXYtPmFkZXYtPmNhcHR1cmVfc3RyZWFtPT1TVFJFQU1fT04gJiYgYXJn PT0wKXsKKwkJCQlkZXYtPmFkZXYtPmNhcHR1cmVfc3RyZWFtPVNUUkVBTV9PRkY7CisJCQkJZW0y OHh4X2lzb2NfYXVkaW9fZGVpbml0KGRldik7CisJCQl9IAorCQkJcmV0dXJuIDA7CisJCWRlZmF1 bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUg PD0gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF9l bTI4eHhfY2FwdHVyZV9wb2ludGVyKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSkKKyNl bHNlCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3Qgc25kX2VtMjh4eF9jYXB0dXJlX3BvaW50ZXIo c3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCisjZW5kaWYKK3sKKwlzdHJ1Y3Qg ZW0yOHh4ICpkZXY7CisJc25kX3BjbV91ZnJhbWVzX3QgaHdwdHJfZG9uZTsKKwlkZXYgPSBzbmRf cGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaHdwdHJfZG9uZSA9IGRldi0+YWRldi0+ aHdwdHJfZG9uZV9jYXB0dXJlOworCXJldHVybiBod3B0cl9kb25lOworfQorCisjaWYgTElOVVhf VkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKK3N0YXRpYyBzdHJ1Y3QgcGFn ZSAqc25kX3BjbV9nZXRfdm1hbGxvY19wYWdlKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnMsCisJ CQkJCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQpCisjZWxzZQorc3RhdGljIHN0cnVjdCBwYWdl ICpzbmRfcGNtX2dldF92bWFsbG9jX3BhZ2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJz LAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQorI2VuZGlmCit7CisJdm9pZCAqcGFn ZXB0ciA9IHN1YnMtPnJ1bnRpbWUtPmRtYV9hcmVhICsgb2Zmc2V0OworCXJldHVybiB2bWFsbG9j X3RvX3BhZ2UocGFnZXB0cik7Cit9CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVM X1ZFUlNJT04oMiw2LDE2KQorc3RhdGljIHNuZF9wY21fb3BzX3Qgc25kX2VtMjh4eF9wY21fY2Fw dHVyZSA9IHsKKyNlbHNlCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9lbTI4eHhfcGNt X2NhcHR1cmUgPSB7CisjZW5kaWYKKwkub3BlbiA9IHNuZF9lbTI4eHhfY2FwdHVyZV9vcGVuLAor CS5jbG9zZSA9IHNuZF9lbTI4eHhfcGNtX2Nsb3NlLAorCS5pb2N0bCA9IHNuZF9wY21fbGliX2lv Y3RsLAorCS5od19wYXJhbXMgPSBzbmRfZW0yOHh4X2h3X2NhcHR1cmVfcGFyYW1zLAorCS5od19m cmVlID0gc25kX2VtMjh4eF9od19jYXB0dXJlX2ZyZWUsCisJLnByZXBhcmUgPSBzbmRfZW0yOHh4 X3ByZXBhcmUsCisJLnRyaWdnZXIgPSBzbmRfZW0yOHh4X2NhcHR1cmVfdHJpZ2dlciwKKwkucG9p bnRlciA9IHNuZF9lbTI4eHhfY2FwdHVyZV9wb2ludGVyLAorCS5wYWdlID0gc25kX3BjbV9nZXRf dm1hbGxvY19wYWdlLAorfTsKKworCitzdGF0aWMgaW50IGVtMjh4eF9hdWRpb19pbml0KHN0cnVj dCBlbTI4eHggKmRldikKK3sKKwlzdHJ1Y3QgZW0yOHh4X2F1ZGlvICphZGV2OworI2lmIExJTlVY X1ZFUlNJT05fQ09ERSA8PSBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJc25kX3BjbV90ICpwY207 CisJc25kX2NhcmRfdCAqY2FyZDsKKyNlbHNlCisJc3RydWN0IHNuZF9wY20gKnBjbTsKKwlzdHJ1 Y3Qgc25kX2NhcmQgKmNhcmQ7CisjZW5kaWYKKwlzdGF0aWMgaW50IGRldm5yOworCWludCByZXQ7 CisJaW50IGVycjsKKwlwcmludGsoImVtMjh4eC1hdWRpby5jOiBwcm9iaW5nIGZvciBlbTI4eDEg bm9uIHN0YW5kYXJkIHVzYmF1ZGlvXG4iKTsKKwlwcmludGsoImVtMjh4eC1hdWRpby5jOiBDb3B5 cmlnaHQgKEMpIDIwMDYgTWFya3VzIFJlY2hiZXJnZXJcbiIpOworCWFkZXY9a3phbGxvYyhzaXpl b2YoKmFkZXYpLEdGUF9LRVJORUwpOworCWlmKCFhZGV2KXsKKwkJcHJpbnRrKCJlbTI4eHgtYXVk aW8uYzogb3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAtMTsKKwl9CisJY2FyZCA9IHNuZF9j YXJkX25ldyhpbmRleFtkZXZucl0sICJFbTI4eHggQXVkaW8iLCBUSElTX01PRFVMRSwwKTsKKwlp ZihjYXJkPT1OVUxMKXsKKwkJa2ZyZWUoYWRldik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwor CXNwaW5fbG9ja19pbml0KCZhZGV2LT5zbG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmYWRl di0+YXVkaW9fd2FpdF9zdHJlYW0pOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFkZXYtPm9wZW4p OworCXJldD1zbmRfcGNtX25ldyhjYXJkLCAiRW0yOHh4IEF1ZGlvIiwgMCwgMCwgMSwgJnBjbSk7 CisJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCAmc25kX2Vt Mjh4eF9wY21fY2FwdHVyZSk7CisJcGNtLT5pbmZvX2ZsYWdzID0gMDsKKwlwY20tPnByaXZhdGVf ZGF0YSA9IGRldjsKKwlzdHJjcHkocGNtLT5uYW1lLCJFbXBpYSAyOHh4IENhcHR1cmUiKTsKKwlz dHJjcHkoY2FyZC0+ZHJpdmVyLCAiRW1waWEgRW0yOHh4IEF1ZGlvIik7CisJc3RyY3B5KGNhcmQt PnNob3J0bmFtZSwgIkVtMjh4eCBBdWRpbyIpOworCXN0cmNweShjYXJkLT5sb25nbmFtZSwiRW1w aWEgRW0yOHh4IEF1ZGlvIik7CisKKwlpZigoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkp PDApeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJYWRl di0+c25kY2FyZD1jYXJkOworCWFkZXYtPnVkZXY9ZGV2LT51ZGV2OworCWRldi0+YWRldj1hZGV2 OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVtMjh4eF9hdWRpb19maW5pKHN0cnVjdCBl bTI4eHggKmRldikKK3sKKwlzdHJ1Y3QgZW0yOHh4X2F1ZGlvICphZGV2ID0gZGV2LT5hZGV2Owor CWludCByZXQ7CisJcHJpbnRrKCJhdWRpbzogZGVpbml0aWFsaXppbmcgYXVkaW8gZGV2aWNlXG4i KTsKKworCWlmKGRldj09TlVMTCkgeworCQlwcmludGsoImF1ZGlvOiBkZXYgaXMgYWxyZWFkeSBu dWxsXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYoYWRldil7CisJCXByaW50aygiYXVkaW86 IGJlZm9yZSB3YWl0c3RyZWFtXG4iKTsKKwkJaWYgKGFkZXYtPmNhcHR1cmVfc3RyZWFtID09IFNU UkVBTV9PTikgeworCQkJYWRldi0+Y2FwdHVyZV9zdHJlYW0gPSBTVFJFQU1fSU5URVJSVVBUOwor CQkJcmV0ID0gd2FpdF9ldmVudF90aW1lb3V0KGFkZXYtPmF1ZGlvX3dhaXRfc3RyZWFtLAorCQkJ CQkoYWRldi0+Y2FwdHVyZV9zdHJlYW0gPT0gU1RSRUFNX09GRikgfHwKKwkJCQkJKGRldi0+c3Rh dGUgJiBERVZfRElTQ09OTkVDVEVEKSwKKwkJCQkJRU0yOFhYX1VSQl9USU1FT1VUKTsKKwkJfQor CQlwcmludGsoImF1ZGlvOiBhZnRlciB3YWl0c3RyZWFtXG4iKTsKKwkJcHJpbnRrKCJhdWRpbzog d2FpdGluZyBmb3IgYXVkaW9jbGllbnRzIHRvIHJlbGVhc2UgYXVkaW8gbm9kZVxuIik7CisKKwkJ aWYgKGFkZXYtPnVzZXJzPjApIAorCQkJLyogd2UgaGF2ZSB0byBzdHJpY3RseSB3YWl0IGZvciB0 aGlzLi4uICovCisKKwkJCXdhaXRfZXZlbnQoYWRldi0+b3BlbiwgKGFkZXYtPnVzZXJzID09IDAp KTsKKworCQlzbmRfY2FyZF9mcmVlKGRldi0+YWRldi0+c25kY2FyZCk7CisJCWtmcmVlKGRldi0+ YWRldik7CisJCWRldi0+YWRldj1OVUxMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0 cnVjdCBlbTI4eHhfb3BzIGF1ZGlvX29wcyA9IHsKKwkuaWQJPSBFTTI4WFhfQVVESU8sCisJLm5h bWUJPSAiRW0yOHh4IEF1ZGlvIEV4dGVuc2lvbiIsCisJLmluaXQJPSBlbTI4eHhfYXVkaW9faW5p dCwKKwkuZmluaQk9IGVtMjh4eF9hdWRpb19maW5pLAorfTsKKworc3RhdGljIGludCBfX2luaXQg ZW0yOHh4X2Fsc2FfcmVnaXN0ZXIodm9pZCkKK3sKKwlyZXR1cm4gZW0yOHh4X3JlZ2lzdGVyX2V4 dGVuc2lvbigmYXVkaW9fb3BzKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGVtMjh4eF9hbHNh X3VucmVnaXN0ZXIodm9pZCkKK3sKKwllbTI4eHhfdW5yZWdpc3Rlcl9leHRlbnNpb24oJmF1ZGlv X29wcyk7Cit9CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hcmt1 cyBSZWNoYmVyZ2VyIDxtcmVjaGJlcmdlckBnbWFpbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJ T04oIkVtMjh4eCBBdWRpbyBkcml2ZXIiKTsKKworbW9kdWxlX2luaXQoZW0yOHh4X2Fsc2FfcmVn aXN0ZXIpOworbW9kdWxlX2V4aXQoZW0yOHh4X2Fsc2FfdW5yZWdpc3Rlcik7CmRpZmYgLS1naXQg YS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtcGlhL2VtMjh4eC1hdWRpb2VwLmMgYi9kcml2ZXJzL21l ZGlhL3ZpZGVvL2VtcGlhL2VtMjh4eC1hdWRpb2VwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uODY4ZTQ4OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlk ZW8vZW1waWEvZW0yOHh4LWF1ZGlvZXAuYwpAQCAtMCwwICsxLDUyMiBAQAorLyogQ29weXJpZ2h0 IChDKSAyMDA4IEVtcGlhIFRlY2hub2xvZ3kgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1h cmt1cyBSZWNoYmVyZ2VyIDxtcmVjaGJlcmdlckBnbWFpbC5jb20+CisgKi8KKyNpbmNsdWRlIDxs aW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgv bGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNp b24uaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9zb3VuZC5oPgor I2luY2x1ZGUgPGxpbnV4L3NvdW5kY2FyZC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4K KyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA2LCAyNSkKKyNpbmNs dWRlIDxzb3VuZC9kcml2ZXIuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNp bmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5j bHVkZSA8c291bmQvaW5mby5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRl IDxzb3VuZC9jb250cm9sLmg+CisKKworI2luY2x1ZGUgImVtMjh4eC5oIgorCitzdGF0aWMgaW50 IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOworCitNT0RVTEVfQVVUSE9S KCJNYXJrdXMgUmVjaGJlcmdlciA8bXJlY2hiZXJnZXJAZ21haWwuY29tPiIpOworTU9EVUxFX0xJ Q0VOU0UoIkdQTCIpOyAvLyBteSBhcHByb3ByaWF0ZSBjb2RlIGlzIGR1YWwgbGljZW5zZWQgYWxz byBCU0QKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGVtMjh4eF9hdWRpb19kcnY7CitzdGF0 aWMgaW50IGVtMjh4eF9jbWQoc3RydWN0IGVtMjh4eF9hdWRpbyAqYWRldiwgaW50IGNtZCxpbnQg YXJnKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGVtMjh4eF9hdWRpb19pZF90YWJs ZVtdPXsKKyAgICAgICAgeyBVU0JfREVWSUNFKDB4MGNjZCwgMHgwMDQyKSB9LCAvKiBqdXN0IGZv ciB0ZXN0aW5nIGl0IHdpbGwgbm90IGF0dGFjaCB0byB0aGUgcmVhbCBkZXZpY2UgKi8KKwl7IFVT Ql9ERVZJQ0UoMHhlYjFhLCAweGUzMDApIH0sCisJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHhlMzAx KSB9LAorCXsgVVNCX0RFVklDRSgweGViMWEsIDB4ZTMwNSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHhl YjFhLCAweGUzMTApIH0sCisJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHhlMzIwKSB9LAorCXsgVVNC X0RFVklDRSgweGViMWEsIDB4Mjg2MSkgfSwKKyAgICAgICAgeyB9LAorfTsKKworI2lmIExJTlVY X1ZFUlNJT05fQ09ERSA8PSBLRVJORUxfVkVSU0lPTigyLDYsMTYpCitzdGF0aWMgc25kX3BjbV9o YXJkd2FyZV90IHNuZF9lbTI4eHhfaHdfY2FwdHVyZSA9IHsKKyNlbHNlCitzdGF0aWMgc3RydWN0 IHNuZF9wY21faGFyZHdhcmUgc25kX2VtMjh4eF9od19jYXB0dXJlID0geworI2VuZGlmCisJLmlu Zm8gPSBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8IAorCQlTTkRSVl9QQ01fSU5GT19N TUFQIHwgCisJCVNORFJWX1BDTV9JTkZPX0JBVENIIHwKKwkJU05EUlZfUENNX0lORk9fSU5URVJM RUFWRUQgIHwgCisJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQsCisJLmZvcm1hdHMgPSBTTkRS Vl9QQ01fRk1UQklUX1MxNl9MRSwKKwkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV9DT05USU5VT1VT IHwgU05EUlZfUENNX1JBVEVfS05PVCwKKwkucmF0ZV9taW4gPSA0ODAwMCwKKwkucmF0ZV9tYXgg PSA0ODAwMCwKKwkuY2hhbm5lbHNfbWluID0gMiwKKwkuY2hhbm5lbHNfbWF4ID0gMiwKKwkuYnVm ZmVyX2J5dGVzX21heCA9IDEwMjQqMTAyNCwgCisJLnBlcmlvZF9ieXRlc19taW4gPSA2NCwgCisJ LnBlcmlvZF9ieXRlc19tYXggPSA1MTIqMTAyNCwKKwkucGVyaW9kc19taW4gPSAyLAorCS5wZXJp b2RzX21heCA9IDEwMjQsCit9OworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9W RVJTSU9OKDIsNiwxNikKK3N0YXRpYyBpbnQgc25kX3BjbV9hbGxvY192bWFsbG9jX2J1ZmZlcihz bmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzLCBzaXplX3Qgc2l6ZSkKKyNlbHNlCitzdGF0aWMgaW50 IHNuZF9wY21fYWxsb2Nfdm1hbGxvY19idWZmZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpz dWJzLCBzaXplX3Qgc2l6ZSkKKyNlbmRpZgoreworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSBL RVJORUxfVkVSU0lPTigyLDYsMTYpCisgICAgICAgIHNuZF9wY21fcnVudGltZV90ICpydW50aW1l ID0gc3Vicy0+cnVudGltZTsKKyNlbHNlCisgICAgICAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUg KnJ1bnRpbWUgPSBzdWJzLT5ydW50aW1lOworI2VuZGlmCisgICAgICAgIGlmKHJ1bnRpbWUtPmRt YV9hcmVhKXsKKyAgICAgICAgICAgICAgICBpZihydW50aW1lLT5kbWFfYnl0ZXMgPiBzaXplKQor ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgdmZyZWUo cnVudGltZS0+ZG1hX2FyZWEpOworICAgICAgICB9CisgICAgICAgIHJ1bnRpbWUtPmRtYV9hcmVh ID0gdm1hbGxvYyhzaXplKTsKKyAgICAgICAgaWYoIXJ1bnRpbWUgLT5kbWFfYXJlYSkKKyAgICAg ICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAgcnVudGltZS0+ZG1hX2J5dGVzID0g c2l6ZTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8 PSBLRVJORUxfVkVSU0lPTigyLDYsMTYpCitzdGF0aWMgaW50IHNuZF9lbTI4eHhfaHdfY2FwdHVy ZV9wYXJhbXMoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLCBzbmRfcGNtX2h3X3BhcmFt c190ICpod19wYXJhbXMpCisjZWxzZQorc3RhdGljIGludCBzbmRfZW0yOHh4X2h3X2NhcHR1cmVf cGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBzdHJ1Y3Qgc25kX3Bj bV9od19wYXJhbXMgKmh3X3BhcmFtcykKKyNlbmRpZgoreworICAgICAgICB1bnNpZ25lZCBpbnQg Y2hhbm5lbHMsIHJhdGUsIGZvcm1hdDsKKyAgICAgICAgc3RydWN0IGVtMjh4eF9hdWRpbyAqYWRl diA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKyAgICAgICAgaW50IHJldDsK KyAgICAgICAgcmV0ID0gc25kX3BjbV9hbGxvY192bWFsbG9jX2J1ZmZlcihzdWJzdHJlYW0sIHBh cmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CisgICAgICAgIGFkZXYtPmh3cHRyX2RvbmVf Y2FwdHVyZSA9IDA7CisKKyAgICAgICAgZm9ybWF0ID0gcGFyYW1zX2Zvcm1hdChod19wYXJhbXMp OworICAgICAgICByYXRlID0gcGFyYW1zX3JhdGUoaHdfcGFyYW1zKTsKKyAgICAgICAgY2hhbm5l bHMgPSBwYXJhbXNfY2hhbm5lbHMoaHdfcGFyYW1zKTsKKyAgICAgICAgLyogVE9ETzogc2V0IHVw IGVtMjh4eCBhdWRpbyBjaGlwIHRvIGRlbGl2ZXIgdGhlIGNvcnJlY3QgYXVkaW8gZm9ybWF0LCAK KyAgICAgICAgICAgeGM1MDAwL2N4MjU4NDMgc3VwcG9ydHMgc3RlcmVvCisgICAgICAgICAgIHhj MzAyOC9lbTIwMiBzdXBwb3J0cyBtb25vIG9ubHkKKyAgICAgICAgICAgKi8KKyAgICAgICAgcmV0 dXJuIDA7Cit9CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZFUlNJT04oMiw2 LDE2KQorc3RhdGljIGludCBzbmRfZW0yOHh4X2h3X2NhcHR1cmVfZnJlZShzbmRfcGNtX3N1YnN0 cmVhbV90ICpzdWJzdHJlYW0pCisjZWxzZQorc3RhdGljIGludCBzbmRfZW0yOHh4X2h3X2NhcHR1 cmVfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKKyNlbmRpZgorewor ICAgICAgICBzdHJ1Y3QgZW0yOHh4X2F1ZGlvICphZGV2ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hp cChzdWJzdHJlYW0pOworCisgICAgICAgIGlmKGFkZXYtPmNhcHR1cmVfc3RyZWFtID09IFNUUkVB TV9PTikKKyAgICAgICAgICAgICAgICBlbTI4eHhfY21kKGFkZXYsIEVNMjhYWF9DQVBUVVJFX1NU UkVBTV9FTiwgMCk7CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKyNpZiBMSU5VWF9WRVJTSU9O X0NPREUgPD0gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorc3RhdGljIGludCBzbmRfZW0yOHh4X3By ZXBhcmUoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQorI2Vsc2UKK3N0YXRpYyBpbnQg c25kX2VtMjh4eF9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQor I2VuZGlmCit7CisgICAgICAgIHJldHVybiAwOworfQorCisjaWYgTElOVVhfVkVSU0lPTl9DT0RF IDw9IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKK3N0YXRpYyBpbnQgc25kX2VtMjh4eF9jYXB0dXJl X3RyaWdnZXIoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLCBpbnQgY21kKQorI2Vsc2UK K3N0YXRpYyBpbnQgc25kX2VtMjh4eF9jYXB0dXJlX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vi c3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCisjZW5kaWYKK3sKKyAgICAgICAgc3RydWN0IGVt Mjh4eF9hdWRpbyAqYWRldiA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKyAg ICAgICAgc3dpdGNoKGNtZCl7CisgICAgICAgICAgICAgICAgY2FzZSBTTkRSVl9QQ01fVFJJR0dF Ul9TVEFSVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVtMjh4eF9jbWQoYWRldiwgRU0yOFhY X0NBUFRVUkVfU1RSRUFNX0VOLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAw OworICAgICAgICAgICAgICAgIGNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKyAgICAgICAg ICAgICAgICAgICAgICAgIGFkZXYtPnNodXRkb3duID0gMTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorfQorCisjaWYgTElOVVhfVkVSU0lP Tl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDE5KQorc3RhdGljIHZvaWQgZW0yOHh4X2F1ZGlv X2lzb2NpcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKKyNlbHNlCitz dGF0aWMgdm9pZCBlbTI4eHhfYXVkaW9faXNvY2lycShzdHJ1Y3QgdXJiICp1cmIpCisjZW5kaWYK K3sKKyAgICAgICAgc3RydWN0IGVtMjh4eF9hdWRpbyAqYWRldiA9IHVyYi0+Y29udGV4dDsKKyAg ICAgICAgaW50IGk7CisgICAgICAgIHVuc2lnbmVkIGludCBvbGRwdHI7CisgICAgICAgIHVuc2ln bmVkIGxvbmcgZmxhZ3M7CisgICAgICAgIGludCBwZXJpb2RfZWxhcHNlZCA9IDA7CisgICAgICAg IHVuc2lnbmVkIGNoYXIgKmNwOworICAgICAgICB1bnNpZ25lZCBpbnQgc3RyaWRlOworCisJaW50 IHN0YXR1czsKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZFUlNJT04oMiw2LDE2 KQorICAgICAgICBzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW07CisgICAgICAgIHNuZF9w Y21fcnVudGltZV90ICpydW50aW1lOworI2Vsc2UKKyAgICAgICAgc3RydWN0IHNuZF9wY21fc3Vi c3RyZWFtICpzdWJzdHJlYW07CisgICAgICAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRp bWU7CisjZW5kaWYKKyAgICAgICAgaWYgKGFkZXYtPmNhcHR1cmVfc3RyZWFtID09IFNUUkVBTV9J TlRFUlJVUFQpIHsKKyAgICAgICAgICAgICAgICBhZGV2LT5jYXB0dXJlX3N0cmVhbSA9IFNUUkVB TV9PRkY7CisgICAgICAgICAgICAgICAgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhZGV2LT5hdWRp b193YWl0X3N0cmVhbSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChhZGV2LT5zdGF0ZSAmIERF Vl9ESVNDT05ORUNURUQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAoYWRldi0+c3RhdGUg JiBERVZfTUlTQ09ORklHVVJFRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisKKyAgICAg ICAgaWYoYWRldi0+Y2FwdHVyZV9wY21fc3Vic3RyZWFtKXsKKyAgICAgICAgICAgICAgICBzdWJz dHJlYW09YWRldi0+Y2FwdHVyZV9wY21fc3Vic3RyZWFtOworICAgICAgICAgICAgICAgIHJ1bnRp bWU9c3Vic3RyZWFtLT5ydW50aW1lOworCisgICAgICAgICAgICAgICAgc3RyaWRlID0gcnVudGlt ZS0+ZnJhbWVfYml0cyA+PiAzOworICAgICAgICAgICAgICAgIGZvcihpPTA7aTx1cmItPm51bWJl cl9vZl9wYWNrZXRzO2krKyl7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGg9 dXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoL3N0cmlkZTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGNwPSh1bnNpZ25lZCBjaGFyICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyICsg dXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7CisKKworICAgICAgICAgICAgICAgICAgICAg ICAgaWYoIWxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7 CisKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0u c3RhdHVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg ICAgICAgICAgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmFkZXYtPnNsb2NrLCBmbGFn cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBvbGRwdHIgPSBhZGV2LT5od3B0cl9kb25lX2Nh cHR1cmU7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGV2LT5od3B0cl9kb25lX2NhcHR1cmUg Kz1sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihhZGV2LT5od3B0cl9kb25lX2Nh cHR1cmUgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFkZXYtPmh3cHRyX2RvbmVfY2FwdHVyZSAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsK KworICAgICAgICAgICAgICAgICAgICAgICAgYWRldi0+Y2FwdHVyZV90cmFuc2Zlcl9kb25lICs9 IGxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGFkZXYtPmNhcHR1cmVfdHJhbnNm ZXJfZG9uZSA+PSBydW50aW1lLT5wZXJpb2Rfc2l6ZSl7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFkZXYtPmNhcHR1cmVfdHJhbnNmZXJfZG9uZSAtPSBydW50aW1lLT5wZXJpb2Rf c2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyaW9kX2VsYXBzZWQ9MTsK KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmFkZXYtPnNsb2NrLCBmbGFncyk7CisKKyAgICAgICAgICAgICAg ICAgICAgICAgIGlmKG9sZHB0ciArIGxlbmd0aCA+IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKXsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNudCA9IHJ1bnRpbWUt PmJ1ZmZlcl9zaXplLW9sZHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVt Y3B5KHJ1bnRpbWUtPmRtYV9hcmVhK29sZHB0cipzdHJpZGUsIGNwICwgY250KnN0cmlkZSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShydW50aW1lLT5kbWFfYXJlYSwg Y3AgKyBjbnQqc3RyaWRlLCBsZW5ndGgqc3RyaWRlIC0gY250KnN0cmlkZSk7CisgICAgICAgICAg ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt ZW1jcHkocnVudGltZS0+ZG1hX2FyZWErb2xkcHRyKnN0cmlkZSwgY3AsIGxlbmd0aCpzdHJpZGUp OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBpZihwZXJpb2RfZWxhcHNlZCl7CisgICAgICAgICAgICAgICAgICAgICAgICBzbmRf cGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgICAgIHVyYi0+c3RhdHVzID0gMDsKKworICAgICAgICBpZihhZGV2LT5zaHV0ZG93 bikKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYoKHN0YXR1cyA9IHVzYl9z dWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpKQorICAgICAgICAgICAgICAgIHByaW50aygicmVz dWJtaXQgb2YgYXVkaW8gdXJiIGZhaWxlZCAoZXJyb3I9JWkpXG4iLCBzdGF0dXMpOworICAgICAg ICByZXR1cm47Cit9CisKKworc3RhdGljIGludCBlbTI4eHhfaXNvY19hdWRpb19kZWluaXQoc3Ry dWN0IGVtMjh4eF9hdWRpbyAqYWRldikKK3sKKyAgICAgICAgaW50IGk7CisgICAgICAgIGZvcihp PTA7IGk8RU0yOFhYX0FVRElPX0JVRlM7IGkrKyl7CisgICAgICAgICAgICAgICAgdXNiX2tpbGxf dXJiKGFkZXYtPnVyYltpXSk7CisgICAgICAgICAgICAgICAgdXNiX2ZyZWVfdXJiKGFkZXYtPnVy YltpXSk7CisgICAgICAgICAgICAgICAgYWRldi0+dXJiW2ldID0gTlVMTDsKKyAgICAgICAgfQor ICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlbTI4eHhfaW5pdF9hdWRpb19pc29j KHN0cnVjdCBlbTI4eHhfYXVkaW8gKmFkZXYpCit7CisgICAgICAgIGludCBpOworICAgICAgICBp bnQgZXJyQ29kZTsKKyAgICAgICAgY29uc3QgaW50IHNiX3NpemU9RU0yOFhYX05VTV9BVURJT19Q QUNLRVRTICogRU0yOFhYX0FVRElPX01BWF9QQUNLRVRfU0laRTsKKworICAgICAgICBmb3IoaT0w OyBpPEVNMjhYWF9BVURJT19CVUZTOyBpKyspeworICAgICAgICAgICAgICAgIHN0cnVjdCB1cmIg KnVyYjsKKyAgICAgICAgICAgICAgICBpbnQgaixrOworICAgICAgICAgICAgICAgIGFkZXYtPnRy YW5zZmVyX2J1ZmZlcltpXT1remFsbG9jKHNiX3NpemUsR0ZQX0FUT01JQyk7CisKKyAgICAgICAg ICAgICAgICBpZighYWRldi0+dHJhbnNmZXJfYnVmZmVyW2ldKQorICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIC1FTk9NRU07CisKKyAgICAgICAgICAgICAgICB1cmIgPSB1c2JfYWxsb2Nf dXJiKEVNMjhYWF9OVU1fQVVESU9fUEFDS0VUUyxHRlBfQVRPTUlDKTsKKworICAgICAgICAgICAg ICAgIGlmKHVyYil7CisgICAgICAgICAgICAgICAgICAgICAgICB1cmItPmRldiA9IGFkZXYtPnVk ZXY7CisgICAgICAgICAgICAgICAgICAgICAgICB1cmItPmNvbnRleHQgPSBhZGV2OworICAgICAg ICAgICAgICAgICAgICAgICAgdXJiLT5waXBlID0gdXNiX3Jjdmlzb2NwaXBlKGFkZXYtPnVkZXYs MHg4Myk7CisgICAgICAgICAgICAgICAgICAgICAgICB1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJC X0lTT19BU0FQOworICAgICAgICAgICAgICAgICAgICAgICAgdXJiLT50cmFuc2Zlcl9idWZmZXIg PSBhZGV2LT50cmFuc2Zlcl9idWZmZXJbaV07CisgICAgICAgICAgICAgICAgICAgICAgICB1cmIt PmludGVydmFsID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVyYi0+Y29tcGxldGUgPSBl bTI4eHhfYXVkaW9faXNvY2lycTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVyYi0+bnVtYmVy X29mX3BhY2tldHMgPSBFTTI4WFhfTlVNX0FVRElPX1BBQ0tFVFM7CisgICAgICAgICAgICAgICAg ICAgICAgICB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBzYl9zaXplOworICAgICAgICAg ICAgICAgICAgICAgICAgZm9yKGo9az0wOyBqPEVNMjhYWF9OVU1fQVVESU9fUEFDS0VUUzsgaisr LGsrPUVNMjhYWF9BVURJT19NQVhfUEFDS0VUX1NJWkUpeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1cmItPmlzb19mcmFtZV9kZXNjW2pdLm9mZnNldCA9IGs7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0gRU0y OFhYX0FVRElPX01BWF9QQUNLRVRfU0laRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgICAgICAgIGFkZXYtPnVyYltpXSA9IHVyYjsKKyAgICAgICAgICAgICAg ICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworCisgICAg ICAgIH0KKyAgICAgICAgZm9yKGk9MDsgaTxFTTI4WFhfQVVESU9fQlVGUzsgaSsrKXsKKyAgICAg ICAgICAgICAgICBlcnJDb2RlID0gdXNiX3N1Ym1pdF91cmIoYWRldi0+dXJiW2ldLCBHRlBfQVRP TUlDKTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyQ29kZSl7CisgICAgICAgICAgICAgICAgICAg ICAgICBlbTI4eHhfaXNvY19hdWRpb19kZWluaXQoYWRldik7CisgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gZXJyQ29kZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZW0yOHh4X2NtZChzdHJ1Y3QgZW0yOHh4X2F1 ZGlvICphZGV2LCBpbnQgY21kLGludCBhcmcpCit7CisgICAgICAgIHN3aXRjaChjbWQpeworCWNh c2UgRU0yOFhYX0NBUFRVUkVfU1RSRUFNX0VOOgorCQlpZihhZGV2LT5jYXB0dXJlX3N0cmVhbSA9 PSBTVFJFQU1fT0ZGICYmIGFyZz09MSl7CisJCQlhZGV2LT5jYXB0dXJlX3N0cmVhbSA9IFNUUkVB TV9PTjsKKwkJCWVtMjh4eF9pbml0X2F1ZGlvX2lzb2MoYWRldik7CisJCX0gZWxzZSBpZiAoYWRl di0+Y2FwdHVyZV9zdHJlYW0gPT0gU1RSRUFNX09OICYmIGFyZz09MCl7CisJCQlhZGV2LT5jYXB0 dXJlX3N0cmVhbSA9IFNUUkVBTV9PRkY7CisJCQllbTI4eHhfaXNvY19hdWRpb19kZWluaXQoYWRl dik7CisJCX0KKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisgICAg ICAgIH0KK30KKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSBLRVJORUxfVkVSU0lPTigyLDYs MTYpCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3Qgc25kX2VtMjh4eF9jYXB0dXJlX3BvaW50ZXIo c25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQorI2Vsc2UKK3N0YXRpYyBzbmRfcGNtX3Vm cmFtZXNfdCBzbmRfZW0yOHh4X2NhcHR1cmVfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJl YW0gKnN1YnN0cmVhbSkKKyNlbmRpZgoreworICAgICAgICBzdHJ1Y3QgZW0yOHh4X2F1ZGlvICph ZGV2OworICAgICAgICBzbmRfcGNtX3VmcmFtZXNfdCBod3B0cl9kb25lOworICAgICAgICBhZGV2 ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworICAgICAgICBod3B0cl9kb25l ID0gYWRldi0+aHdwdHJfZG9uZV9jYXB0dXJlOworICAgICAgICByZXR1cm4gaHdwdHJfZG9uZTsK K30KKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSBLRVJORUxfVkVSU0lPTigyLDYsMTYpCitz dGF0aWMgc3RydWN0IHBhZ2UgKnNuZF9wY21fZ2V0X3ZtYWxsb2NfcGFnZShzbmRfcGNtX3N1YnN0 cmVhbV90ICpzdWJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgbG9uZyBvZmZzZXQpCisjZWxzZQorc3RhdGljIHN0cnVjdCBwYWdlICpzbmRf cGNtX2dldF92bWFsbG9jX3BhZ2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBv ZmZzZXQpCisjZW5kaWYKK3sKKyAgICAgICAgdm9pZCAqcGFnZXB0ciA9IHN1YnMtPnJ1bnRpbWUt PmRtYV9hcmVhICsgb2Zmc2V0OworICAgICAgICByZXR1cm4gdm1hbGxvY190b19wYWdlKHBhZ2Vw dHIpOworfQorCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNiwx NikKK3N0YXRpYyBpbnQgc25kX2VtMjh4eF9jYXB0dXJlX29wZW4oc25kX3BjbV9zdWJzdHJlYW1f dCAqc3Vic3RyZWFtKQorI2Vsc2UKK3N0YXRpYyBpbnQgc25kX2VtMjh4eF9jYXB0dXJlX29wZW4o c3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCisjZW5kaWYKK3sKKyAgICAgICAg c3RydWN0IGVtMjh4eF9hdWRpbyAqYWRldiA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3Ry ZWFtKTsKKwlpbnQgZXJyQ29kZTsKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZF UlNJT04oMiw2LDE2KQorICAgICAgICBzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSA9IHN1YnN0 cmVhbS0+cnVudGltZTsKKyNlbHNlCisgICAgICAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1 bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisjZW5kaWYKKworCWlmKGFkZXYtPmFsdCA9PSAw ICYmIGFkZXYtPnVzZXJzID09IDAgKSAKKyAgICAgICAgICAgICAgICBlcnJDb2RlID0gdXNiX3Nl dF9pbnRlcmZhY2UoYWRldi0+dWRldiwgMSwgYWRldi0+YWx0X21heCk7IC8qIFRvZG8gKi8KKwor CXJ1bnRpbWUtPmh3ID0gc25kX2VtMjh4eF9od19jYXB0dXJlOworCisgICAgICAgIGFkZXYtPnVz ZXJzKys7CisgICAgICAgIHJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGFkZXY7CisJc25kX3BjbV9o d19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMp OworCWFkZXYtPmNhcHR1cmVfcGNtX3N1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwlyZXR1cm4gMDsK KworfQorCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikK K3N0YXRpYyBpbnQgc25kX2VtMjh4eF9wY21fY2xvc2Uoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vi c3RyZWFtKQorI2Vsc2UKK3N0YXRpYyBpbnQgc25kX2VtMjh4eF9wY21fY2xvc2Uoc3RydWN0IHNu ZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCisjZW5kaWYKK3sKKyAgICAgICAgc3RydWN0IGVt Mjh4eF9hdWRpbyAqYWRldiA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKyAg ICAgICAgYWRldi0+dXNlcnMtLTsKKyAgICAgICAgaWYoYWRldi0+dXNlcnMgPT0gMCAmJiBhZGV2 LT5zaHV0ZG93biA9PSAxKSB7CisgICAgICAgICAgICAgICAgYWRldi0+c2h1dGRvd24gPSAwOwor ICAgICAgICAgICAgICAgIGVtMjh4eF9jbWQoYWRldiwgRU0yOFhYX0NBUFRVUkVfU1RSRUFNX0VO LCAwKTsKKyAgICAgICAgfQorICAgICAgICB3YWtlX3VwKCZhZGV2LT5vcGVuKTsKKyAgICAgICAg cmV0dXJuIDA7Cit9CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZFUlNJT04o Miw2LDE2KQorc3RhdGljIHNuZF9wY21fb3BzX3Qgc25kX2VtMjh4eF9wY21fY2FwdHVyZSA9IHsK KyNlbHNlCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9lbTI4eHhfcGNtX2NhcHR1cmUg PSB7CisjZW5kaWYKKyAgICAgICAgLm9wZW4gPSBzbmRfZW0yOHh4X2NhcHR1cmVfb3BlbiwKKyAg ICAgICAgLmNsb3NlID0gc25kX2VtMjh4eF9wY21fY2xvc2UsCisgICAgICAgIC5pb2N0bCA9IHNu ZF9wY21fbGliX2lvY3RsLAorICAgICAgICAuaHdfcGFyYW1zID0gc25kX2VtMjh4eF9od19jYXB0 dXJlX3BhcmFtcywKKyAgICAgICAgLmh3X2ZyZWUgPSBzbmRfZW0yOHh4X2h3X2NhcHR1cmVfZnJl ZSwKKyAgICAgICAgLnByZXBhcmUgPSBzbmRfZW0yOHh4X3ByZXBhcmUsCisgICAgICAgIC50cmln Z2VyID0gc25kX2VtMjh4eF9jYXB0dXJlX3RyaWdnZXIsCisgICAgICAgIC5wb2ludGVyID0gc25k X2VtMjh4eF9jYXB0dXJlX3BvaW50ZXIsCisgICAgICAgIC5wYWdlID0gc25kX3BjbV9nZXRfdm1h bGxvY19wYWdlLAorfTsKKworCitzdGF0aWMgaW50IGVtMjh4eF9hdWRpb19wcm9iZShzdHJ1Y3Qg dXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQp Cit7CisJaW50IGVycjsKKwlpbnQgaTsKKwl1OCBtYXhfYWx0OworCXU4IGlmX251bTsKKwl1MTYg bWF4X3BjayA9IDAsIGN1cl9wY2sgPSAwOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0 cnVjdCBlbTI4eHhfYXVkaW8gKmFkZXYgPSBOVUxMOworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RF IDw9IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKyAgICAgICAgc25kX3BjbV90ICpwY207CisgICAg ICAgIHNuZF9jYXJkX3QgKmNhcmQ7CisjZWxzZQorICAgICAgICBzdHJ1Y3Qgc25kX3BjbSAqcGNt OworICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisjZW5kaWYKKworCisJaW50IHJldHZh bCA9IC1FTk9ERVY7CisJdTggaV9tYXggPSAwOworICAgICAgICBzdGF0aWMgaW50IGRldm5yOwor ICAgICAgICBpbnQgcmV0OworCisKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVu ZHBvaW50OworCXVkZXYgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFj ZSkpOworCWVuZHBvaW50ID0gJmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50WzBd LmRlc2M7CisKKwlpZl9udW0gPSBpbnRlcmZhY2UtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJm YWNlTnVtYmVyOworCW1heF9hbHQgPSBpbnRlcmZhY2UtPm51bV9hbHRzZXR0aW5nOworCisJaWYg KG1heF9hbHQgPT0gNiAmJiBpZl9udW0gPiAwKSB7CisJCXByaW50aygicmVnaXN0ZXJpbmcgZW0y OHh4LWF1ZGlvZXBcbiIpOworCQlmb3IgKGk9MDsgaTxtYXhfYWx0OyBpKyspIHsKKwkJCWN1cl9w Y2s9bGUxNl90b19jcHUoaW50ZXJmYWNlLT5hbHRzZXR0aW5nW2ldLmVuZHBvaW50WzBdLmRlc2Mu d01heFBhY2tldFNpemUpOworCQkJaWYgKGN1cl9wY2sgPiBtYXhfcGNrKSB7CisJCQkJaV9tYXgg PSBpOworCQkJCW1heF9wY2sgPSBjdXJfcGNrOworCQkJfQorCQl9CisJCWFkZXYgPSBremFsbG9j KHNpemVvZihzdHJ1Y3QgZW0yOHh4X2F1ZGlvKSwgR0ZQX0tFUk5FTCk7CisJCXJldHZhbCA9IDA7 CisJCWFkZXYtPm1heF9wY2sgPSBtYXhfcGNrOworCQlhZGV2LT5hbHRfbWF4ID0gaV9tYXg7CisJ CWFkZXYtPnVkZXYgPSB1ZGV2OworCQkKKwkJcHJpbnRrKCJlbTI4eHgtYXVkaW9lcC5jOiBkZXRl Y3RlZCBub25zdGFuZGFyZCB1c2JhdWRpb1xuIik7CisJCXByaW50aygiZW0yOHh4LWF1ZGlvZXAu YzogQ29weXJpZ2h0IChDKSAyMDA4IEVtcGlhIFRlY2hub2xvZ3kgSW5jLlxuIik7CisJCXByaW50 aygiZW0yOHh4LWF1ZGlvZXAuYzogQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBSZWNoYmVyZ2Vy XG4iKTsKKwkJCisKKwkJY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZucl0sICJFbTI4eHgg QXVkaW8yIiwgVEhJU19NT0RVTEUsIDApOworCisJCS8vIHRvZG8gaW5jcmVhc2UgZGV2bnIgLi4g b3IgYmV0dGVyIG1ha2UgYSBiaXRtYXAgb3V0IG9mIGl0CisKKwkJaWYoY2FyZCA9PSBOVUxMKSB7 CisJCQlrZnJlZShhZGV2KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJc3Bpbl9sb2Nr X2luaXQoJmFkZXYtPnNsb2NrKTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmYWRldi0+YXVkaW9f d2FpdF9zdHJlYW0pOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhZGV2LT5vcGVuKTsKKwkJcmV0 ID0gc25kX3BjbV9uZXcoY2FyZCwgIkVtMjh4eCBBdWRpbzIiLCAwLCAwLCAxLCAmcGNtKTsKKwkJ c25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCAmc25kX2VtMjh4 eF9wY21fY2FwdHVyZSk7CisJCXBjbS0+aW5mb19mbGFncyA9IDA7CisJCXBjbS0+cHJpdmF0ZV9k YXRhID0gYWRldjsKKwkJc3RyY3B5KHBjbS0+bmFtZSwgIkVtcGlhIGVtMjh4eCBDYXB0dXJlIik7 CisJCXN0cmNweShjYXJkLT5kcml2ZXIsICJFbXBpYSBFbTI4eHggQXVkaW8gMiIpOworCQlzdHJj cHkoY2FyZC0+c2hvcnRuYW1lLCAiRW0yOHh4IEF1ZGlvIDIiKTsKKwkJc3RyY3B5KGNhcmQtPmxv bmduYW1lLCAiRW1waWEgRW0yOHh4IEF1ZGlvIDIiKTsKKworCQlpZiAoKGVyciA9IHNuZF9jYXJk X3JlZ2lzdGVyKGNhcmQpKSA8IDApIHsKKwkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCQlyZXR1 cm4gLUVOT01FTTsKKwkJfQorCQlhZGV2LT5zbmRjYXJkID0gY2FyZDsKKworCQl1c2Jfc2V0X2lu dGZkYXRhKGludGVyZmFjZSwgYWRldik7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRp YyB2b2lkIGVtMjh4eF9hdWRpb19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRl cmZhY2UpCit7CisJc3RydWN0IGVtMjh4eF9hdWRpbyAqYWRldiA9IHVzYl9nZXRfaW50ZmRhdGEo aW50ZXJmYWNlKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisJaWYgKCFh ZGV2KQorCQlyZXR1cm47CisKKwlpZiAoYWRldi0+dXNlcnMgPiAwKQorCQl3YWl0X2V2ZW50KGFk ZXYtPm9wZW4sIChhZGV2LT51c2VycyA9PSAwKSk7CisKKwlzbmRfY2FyZF9mcmVlKGFkZXYtPnNu ZGNhcmQpOworCWtmcmVlKGFkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZW0y OHh4X2F1ZGlvX2RydiA9IHsKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZFUlNJ T04oMiwgNiwgMTUpCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisjZW5kaWYKKwkubmFtZSA9ICJl bTI4eHgtYXVkaW9lcCIsCisJLnByb2JlID0gZW0yOHh4X2F1ZGlvX3Byb2JlLAorCS5kaXNjb25u ZWN0ID0gZW0yOHh4X2F1ZGlvX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0gZW0yOHh4X2F1ZGlv X2lkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZW0yOHh4X2F1ZGlvX2luaXQodm9p ZCkKK3sKKwlpbnQgcmVzdWx0OworCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmZW0yOHh4X2F1ZGlv X2Rydik7CisJaWYgKHJlc3VsdCkKKwkJcHJpbnRrKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJv ciBudW1iZXIgJWQuXG4iLCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2 b2lkIF9fZXhpdCBlbTI4eHhfYXVkaW9fZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZl bTI4eHhfYXVkaW9fZHJ2KTsKK30KKworbW9kdWxlX2luaXQoZW0yOHh4X2F1ZGlvX2luaXQpOwor bW9kdWxlX2V4aXQoZW0yOHh4X2F1ZGlvX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRp YS92aWRlby9lbXBpYS9lbTI4eHgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW1waWEv ZW0yOHh4LWNhcmRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBiZWEw NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW1waWEvZW0yOHh4LWNh cmRzLmMKQEAgLTAsMCArMSwzMzg3IEBACisvKgorICAgZW0yOHh4LWNhcmRzLmMgLSBkcml2ZXIg Zm9yIEVtcGlhIEVNMjgwMC9FTTI4MjAvMjg0MC8yODgwIFVTQiB2aWRlbyBjYXB0dXJlIGRldmlj ZXMKKworICAgQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBNYXJrdXMgUmVjaGJlcmdlciA8bXJl Y2hiZXJnZXJAZ21haWwuY29tPgorCQkgMjAwNSAgICAgICBNYXVybyBDYXJ2YWxobyBDaGVoYWIg PG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KKwkJIDIwMDUgICAgICAgU2FzY2hhIFNvbW1lciA8c2Fz Y2hhc29tbWVyQGZyZWVuZXQuZGU+CisJCSAyMDA1ICAgICAgIEx1ZG92aWNvIENhdmVkb24gPGNh dmVkb25Ac3NzdXAuaXQ+CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z ZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwg Njc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUg PGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51 eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5o PgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5o PgorI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CisjaWZkZWYgRU0yOFhYX1RWRUVQUk9NCisjaW5j bHVkZSA8bWVkaWEvdHZlZXByb20uaD4KKyNlbmRpZgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29t bW9uLmg+CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9ICBLRVJORUxfVkVSU0lPTigyLCA2LCAy NikKKyNpbmNsdWRlIDxtZWRpYS9hdWRpb2NoaXAuaD4KKyNlbHNlCisjaW5jbHVkZSA8bWVkaWEv djRsMi1jaGlwLWlkZW50Lmg+CisjZW5kaWYKKyNpbmNsdWRlICJtc3AzNDAwLWRyaXZlci5oIgor I2luY2x1ZGUgPG1lZGlhL3NhYTcxMTUuaD4KKyNpbmNsdWRlIDxtZWRpYS90dnA1MTUwLmg+CisK KyNpbmNsdWRlICJ4YzMwMjgveGMzMDI4X2Zpcm13YXJlcy5oIgorI2luY2x1ZGUgInhjMzAyOC94 YzMwMjhsX2Zpcm13YXJlcy5oIgorI2luY2x1ZGUgInhjMzAyOC94YzMwMjhfY2hhbm5lbG1hcHMu aCIKKyNkZWZpbmUgWENFSVZFX0VYVEVSTkFMX0ZJUk1XQVJFCisjaWZkZWYgWENFSVZFX0VYVEVS TkFMX0ZJUk1XQVJFCisjaW5jbHVkZSAieGMzMDI4L3hjMzAyOGZ3X2hlbHBlci5oIgorI2VuZGlm CisKKyNpbmNsdWRlICJlbTI4eHguaCIKKyNpbmNsdWRlICJlbTI4eHgta2V5bWFwcy5oIgorCitl eHRlcm4gdW5zaWduZWQgY2hhciAqWEM1MDAwX2Zpcm13YXJlX1NFUVVFTkNFOworCisKKworc3Rh dGljIGNvbnN0IHU4IGVtMjh4eF90ZXJyYXRlY19jaW5lcmd5XzIwMF91c2JfaTJjX2RldnNbXSAg ICAgPSB7MHg0YSwgMHg2MCwgMHg2MiwgMHg2NCwgMHg4NiwgMHhjMCwgMHhjMiwgMH07CitzdGF0 aWMgY29uc3QgdTggZW0yOHh4X3ZnZWFyX3BvY2tldHR2X2kyY19kZXZzW10gICAgICAgICAgICAg ICA9IHsweDRhLCAweDYwLCAweGM2LCAwfTsKKworLyoga2VlcCB0aGlzIG1hcCBwcml2YXRlICov CisjZGVmaW5lIEVFVElfWEMzMDI4X0RFRkFVTFRfQU5BTE9HIHsgCQkJCQlcCisJewkJCQkJCQkJ XAorCQkvKiBhbmFsb2d1ZSBUViAqLwkJCQkJXAorCQkubmFtZSA9ICJQQUwtQkciLCAvKiBBViAt IHRlc3RlZCBPSyAqLwkJCVwKKwkJLmlkID0gVjRMMl9TVERfUEFMX0JHLCAJCQkJCVwKKwkJLnR2 X21vZGUgPSAmWEMzMDI4X3R2X21vZGVfYl9nX3BhbF9uaWNhbV9iX21vbm8sIAlcCisJCS5jaGFu bmVsbWFwID0gJlhDMzAyOF9jaGFubmVsX21hcF9jY2lyX2FuYWxvZ19haXIsIAlcCisJCS52Ymlf c2FtcGxlX3JhdGUgPSAyNzAwMDAwMCwgCQkJCVwKKwkJLnZiaV9zYW1wbGVzX3Blcl9saW5lID0g MTQ0MCwgCQkJCVwKKwkJLnZiaV9zdGFydF8wID0gNSwgCQkJCQlcCisJCS52Ymlfc3RhcnRfMSA9 IDMxNywgCQkJCQlcCisJCS52YmlfY291bnRfMCA9IDE4LCAJCQkJCVwKKwkJLnZiaV9jb3VudF8x ID0gMTgsIAkJCQkJXAorCQkudmJpX2hfc3RhcnQgPSAweDAwLCAJCQkJCVwKKwkJLnZiaV92X3N0 YXJ0ID0gMHg0NiwgCQkJCQlcCisJCS52YmlfdyA9IDB4YjQsIAkJCQkJCVwKKwkJLnZiaV9oID0g MTgJCQkJCQlcCisJfSwgewkJCQkJCQkJXAorCQkubmFtZSA9ICJQQUwtREsiLCAvKiBBViAtIHRl c3RlZCBPSyAqLwkJCVwKKwkJLmlkID0gVjRMMl9TVERfUEFMX0RLLCAJCQkJCVwKKwkJLnR2X21v ZGUgPSAmWEMzMDI4X3R2X21vZGVfZF9rX3BhbF9uaWNhbV9tb25vLCAJCVwKKwkJLmNoYW5uZWxt YXAgPSAmWEMzMDI4X2NoYW5uZWxfbWFwX2NjaXJfYW5hbG9nX2FpciwgCVwKKwkJLnZiaV9zYW1w bGVfcmF0ZSA9IDI3MDAwMDAwLCAJCQkJXAorCQkudmJpX3NhbXBsZXNfcGVyX2xpbmUgPSAxNDQw LCAJCQkJXAorCQkudmJpX3N0YXJ0XzAgPSA1LCAJCQkJCVwKKwkJLnZiaV9zdGFydF8xID0gMzE3 LCAJCQkJCVwKKwkJLnZiaV9jb3VudF8wID0gMTgsIAkJCQkJXAorCQkudmJpX2NvdW50XzEgPSAx OCwgCQkJCQlcCisJCS52YmlfaF9zdGFydCA9IDB4MDAsIAkJCQkJXAorCQkudmJpX3Zfc3RhcnQg PSAweDQ2LCAJCQkJCVwKKwkJLnZiaV93ID0gMHhiNCwgCQkJCQkJXAorCQkudmJpX2ggPSAweDEy CQkJCQkJXAorCX0sIHsJCQkJCQkJCVwKKwkJLm5hbWUgPSAiUEFMLUkiLCAvKiBBViAtIHRlc3Rl ZCBPSyAqLwkJCVwKKwkJLmlkID0gVjRMMl9TVERfUEFMX0ksIAkJCQkJXAorCQkudHZfbW9kZSA9 ICZYQzMwMjhfdHZfbW9kZV9pX3BhbF9uaWNhbV9tb25vLCAJCVwKKwkJLmNoYW5uZWxtYXAgPSAm WEMzMDI4X2NoYW5uZWxfbWFwX2NjaXJfYW5hbG9nX2FpciwgCVwKKwkJLnZiaV9zYW1wbGVfcmF0 ZSA9IDI3MDAwMDAwLCAJCQkJXAorCQkudmJpX3NhbXBsZXNfcGVyX2xpbmUgPSAxNDQwLCAJCQkJ XAorCQkudmJpX3N0YXJ0XzAgPSA1LCAJCQkJCVwKKwkJLnZiaV9zdGFydF8xID0gMzE3LCAJCQkJ CVwKKwkJLnZiaV9jb3VudF8wID0gMTgsIAkJCQkJXAorCQkudmJpX2NvdW50XzEgPSAxOCwgCQkJ CQlcCisJCS52YmlfaF9zdGFydCA9IDB4MDAsIAkJCQkJXAorCQkudmJpX3Zfc3RhcnQgPSAweDQ2 LCAJCQkJCVwKKwkJLnZiaV93ID0gMHhiNCwgCQkJCQkJXAorCQkudmJpX2ggPSAweDEyCQkJCQkJ XAorCX0sIHsJCQkJCQkJCVwKKwkJLm5hbWUgPSAiTlRTQy1NIiwgLyogQVYgLSB0ZXN0ZWQgT0sg Ki8JCQlcCisJCS5pZCA9IFY0TDJfU1REX05UU0NfTSwgCQkJCQlcCisJCS50dl9tb2RlID0gJlhD MzAyOF90dl9tb2RlX21fbl9udHNjX3BhbF9hMl9tb25vLCAgICAgICAgXAorCQkuY2hhbm5lbG1h cCA9ICZYQzMwMjhfY2hhbm5lbF9tYXBfY2Npcl9hbmFsb2dfYWlyLCAJXAorCQkudmJpX3NhbXBs ZV9yYXRlID0gMjcwMDAwMDAsIAkJCQlcCisJCS52Ymlfc2FtcGxlc19wZXJfbGluZSA9IDE0NDAs IAkJCQlcCisJCS52Ymlfc3RhcnRfMCA9IDgsIAkJCQkJXAorCQkudmJpX3N0YXJ0XzEgPSAzMTgs IAkJCQkJXAorCQkudmJpX2NvdW50XzAgPSAxMiwgCQkJCQlcCisJCS52YmlfY291bnRfMSA9IDEy LCAJCQkJCVwKKwkJLnZiaV9oX3N0YXJ0ID0gMHgwMCwgCQkJCQlcCisJCS52Ymlfdl9zdGFydCA9 IDB4MDYsIAkJCQkJXAorCQkudmJpX3cgPSAweGI0LCAJCQkJCQlcCisJCS52YmlfaCA9IDB4MGMJ CQkJCQlcCisJfSwgewkJCQkJCQkJXAorCQkubmFtZSA9ICJTRUNBTSBMIiwgLyogQVYgdGVzdGVk IG9rICovCQkJXAorCQkuaWQgPSBWNEwyX1NURF9TRUNBTV9MLCAJCQkJXAorICAgICAgICAgICAg ICAgIC50dl9tb2RlID0gJlhDMzAyOF90dl9tb2RlX2xfc2VjYW1fbmljYW1fYW1fb25seSwgICAg ICAgXAorCQkuY2hhbm5lbG1hcCA9ICZYQzMwMjhfY2hhbm5lbF9tYXBfZnJhbmNlX2FuYWxvZ19h aXIsIAlcCisJCS52Ymlfc2FtcGxlX3JhdGUgPSAyNzAwMDAwMCwgCQkJCVwKKwkJLnZiaV9zYW1w bGVzX3Blcl9saW5lID0gMTQ0MCwgCQkJCVwKKwkJLnZiaV9zdGFydF8wID0gNSwgCQkJCQlcCisJ CS52Ymlfc3RhcnRfMSA9IDMxNywgCQkJCQlcCisJCS52YmlfY291bnRfMCA9IDE4LCAJCQkJCVwK KwkJLnZiaV9jb3VudF8xID0gMTgsIAkJCQkJXAorCQkudmJpX2hfc3RhcnQgPSAweDAwLCAJCQkJ CVwKKwkJLnZiaV92X3N0YXJ0ID0gMHg0NiwgCQkJCQlcCisJCS52YmlfdyA9IDB4YjQsIAkJCQkJ CVwKKwkJLnZiaV9oID0gMHgxMgkJCQkJCVwKKwl9LCB7CQkJCQkJCQlcCisJCS5uYW1lID0gIlNF Q0FNIExDIiwgLyogQVYgLSBub3QgdGVzdGVkICovCQlcCisJCS5pZCA9IFY0TDJfU1REX1NFQ0FN X0xDLCAJCQkJXAorCQkudHZfbW9kZSA9ICZYQzMwMjhfdHZfbW9kZV9kX2tfc2VjYW1fYTJfZGsx X21vbm8sIAlcCisJCS5jaGFubmVsbWFwID0gJlhDMzAyOF9jaGFubmVsX21hcF9jY2lyX2FuYWxv Z19haXIsIAlcCisJCS52Ymlfc2FtcGxlX3JhdGUgPSAyNzAwMDAwMCwgCQkJCVwKKwkJLnZiaV9z YW1wbGVzX3Blcl9saW5lID0gMTQ0MCwgCQkJCVwKKwkJLnZiaV9zdGFydF8wID0gNSwgCQkJCQlc CisJCS52Ymlfc3RhcnRfMSA9IDMxNywgCQkJCQlcCisJCS52YmlfY291bnRfMCA9IDE4LCAJCQkJ CVwKKwkJLnZiaV9jb3VudF8xID0gMTgsIAkJCQkJXAorCQkudmJpX2hfc3RhcnQgPSAweDAwLCAJ CQkJCVwKKwkJLnZiaV92X3N0YXJ0ID0gMHg0NiwgCQkJCQlcCisJCS52YmlfdyA9IDB4YjQsIAkJ CQkJCVwKKwkJLnZiaV9oID0gMHgxMgkJCQkJCVwKKwl9LCB7CQkJCQkJCQlcCisJCS5uYW1lID0g IlNFQ0FNIEsxIiwgLyogQVYgLSBub3QgdGVzdGVkICovCQlcCisJCS5pZCA9IFY0TDJfU1REX1NF Q0FNX0sxLCAJCQkJXAorCQkudHZfbW9kZSA9ICZYQzMwMjhfdHZfbW9kZV9kX2tfc2VjYW1fYTJf ZGsxX21vbm8sIAlcCisJCS5jaGFubmVsbWFwID0gJlhDMzAyOF9jaGFubmVsX21hcF9jY2lyX2Fu YWxvZ19haXIsIAlcCisJCS52Ymlfc2FtcGxlX3JhdGUgPSAyNzAwMDAwMCwgCQkJCVwKKwkJLnZi aV9zYW1wbGVzX3Blcl9saW5lID0gMTQ0MCwgCQkJCVwKKwkJLnZiaV9zdGFydF8wID0gNSwgCQkJ CQlcCisJCS52Ymlfc3RhcnRfMSA9IDMxNywgCQkJCQlcCisJCS52YmlfY291bnRfMCA9IDE4LCAJ CQkJCVwKKwkJLnZiaV9jb3VudF8xID0gMTgsIAkJCQkJXAorCQkudmJpX2hfc3RhcnQgPSAweDAw LCAJCQkJCVwKKwkJLnZiaV92X3N0YXJ0ID0gMHg0NiwgCQkJCQlcCisJCS52YmlfdyA9IDB4YjQs IAkJCQkJCVwKKwkJLnZiaV9oID0gMHgxMgkJCQkJCVwKKwl9LCB7CQkJCQkJCQlcCisJCS5uYW1l ID0gIlBBTC1NIiwgLyogQVYgLSBub3QgdGVzdGVkICovCQkJXAorCQkuaWQgPSBWNEwyX1NURF9Q QUxfTSwgCQkJCQlcCisJCS50dl9tb2RlID0gJlhDMzAyOF90dl9tb2RlX21fbl9udHNjX3BhbF9h Ml9tb25vLCAJXAorCQkuY2hhbm5lbG1hcCA9ICZYQzMwMjhfY2hhbm5lbF9tYXBfY2Npcl9hbmFs b2dfYWlyLCAJXAorCQkudmJpX3NhbXBsZV9yYXRlID0gMjcwMDAwMDAsIAkJCQlcCisJCS52Ymlf c2FtcGxlc19wZXJfbGluZSA9IDE0NDAsIAkJCQlcCisJCS52Ymlfc3RhcnRfMCA9IDgsIAkJCQkJ XAorCQkudmJpX3N0YXJ0XzEgPSAzMTgsIAkJCQkJXAorCQkudmJpX2NvdW50XzAgPSAxMiwgCQkJ CQlcCisJCS52YmlfY291bnRfMSA9IDEyLCAJCQkJCVwKKwkJLnZiaV9oX3N0YXJ0ID0gMHgwMCwg CQkJCQlcCisJCS52Ymlfdl9zdGFydCA9IDB4MDYsIAkJCQkJXAorCQkudmJpX3cgPSAweGI0LCAJ CQkJCQlcCisJCS52YmlfaCA9IDB4MGMJCQkJCQlcCisJfQkJCQkJCQkJXAorfQorCisvKiBrZWVw IHRoaXMgbWFwIHByaXZhdGUgKi8KKyNkZWZpbmUgRUVUSV9YQzMwMjhfREVGQVVMVF9BTkFMT0df U1RFUkVPIHsJCQkJXAorCXsJCQkJCQkJCVwKKwkJLyogYW5hbG9ndWUgVFYgKi8JCQkJCVwKKwkJ Lm5hbWUgPSAiUEFMLUJHIiwgLyogQVYgLSB0ZXN0ZWQgT0sgKi8JCQlcCisJCS5pZCA9IFY0TDJf U1REX1BBTF9CRywgCQkJCQlcCisJCS50dl9tb2RlID0gJlhDMzAyOF90dl9tb2RlX2JfZ19wYWxf bmljYW1fYiwJCVwKKwkJLmNoYW5uZWxtYXAgPSAmWEMzMDI4X2NoYW5uZWxfbWFwX2NjaXJfYW5h bG9nX2FpciwgCVwKKwkJLnZiaV9zYW1wbGVfcmF0ZSA9IDI3MDAwMDAwLCAJCQkJXAorCQkudmJp X3NhbXBsZXNfcGVyX2xpbmUgPSAxNDQwLCAJCQkJXAorCQkudmJpX3N0YXJ0XzAgPSA1LCAJCQkJ CVwKKwkJLnZiaV9zdGFydF8xID0gMzE3LCAJCQkJCVwKKwkJLnZiaV9jb3VudF8wID0gMTgsIAkJ CQkJXAorCQkudmJpX2NvdW50XzEgPSAxOCwgCQkJCQlcCisJCS52YmlfaF9zdGFydCA9IDB4MDAs IAkJCQkJXAorCQkudmJpX3Zfc3RhcnQgPSAweDQ2LCAJCQkJCVwKKwkJLnZiaV93ID0gMHhiNCwg CQkJCQkJXAorCQkudmJpX2ggPSAxOAkJCQkJCVwKKwl9LCB7CQkJCQkJCQlcCisJCS5uYW1lID0g IlBBTC1ESyIsIC8qIEFWIC0gdGVzdGVkIE9LICovCQkJXAorCQkuaWQgPSBWNEwyX1NURF9QQUxf REssIAkJCQkJXAorCQkudHZfbW9kZSA9ICZYQzMwMjhfdHZfbW9kZV9kX2tfcGFsX25pY2FtLCAJ CVwKKwkJLmNoYW5uZWxtYXAgPSAmWEMzMDI4X2NoYW5uZWxfbWFwX2NjaXJfYW5hbG9nX2Fpciwg CVwKKwkJLnZiaV9zYW1wbGVfcmF0ZSA9IDI3MDAwMDAwLCAJCQkJXAorCQkudmJpX3NhbXBsZXNf cGVyX2xpbmUgPSAxNDQwLCAJCQkJXAorCQkudmJpX3N0YXJ0XzAgPSA1LCAJCQkJCVwKKwkJLnZi aV9zdGFydF8xID0gMzE3LCAJCQkJCVwKKwkJLnZiaV9jb3VudF8wID0gMTgsIAkJCQkJXAorCQku dmJpX2NvdW50XzEgPSAxOCwgCQkJCQlcCisJCS52YmlfaF9zdGFydCA9IDB4MDAsIAkJCQkJXAor CQkudmJpX3Zfc3RhcnQgPSAweDQ2LCAJCQkJCVwKKwkJLnZiaV93ID0gMHhiNCwgCQkJCQkJXAor CQkudmJpX2ggPSAweDEyCQkJCQkJXAorCX0sIHsJCQkJCQkJCVwKKwkJLm5hbWUgPSAiUEFMLUki LCAvKiBBViAtIHRlc3RlZCBPSyAqLwkJCVwKKwkJLmlkID0gVjRMMl9TVERfUEFMX0ksIAkJCQkJ XAorCQkudHZfbW9kZSA9ICZYQzMwMjhfdHZfbW9kZV9pX3BhbF9uaWNhbSwgCQlcCisJCS5jaGFu bmVsbWFwID0gJlhDMzAyOF9jaGFubmVsX21hcF9jY2lyX2FuYWxvZ19haXIsIAlcCisJCS52Ymlf c2FtcGxlX3JhdGUgPSAyNzAwMDAwMCwgCQkJCVwKKwkJLnZiaV9zYW1wbGVzX3Blcl9saW5lID0g MTQ0MCwgCQkJCVwKKwkJLnZiaV9zdGFydF8wID0gNSwgCQkJCQlcCisJCS52Ymlfc3RhcnRfMSA9 IDMxNywgCQkJCQlcCisJCS52YmlfY291bnRfMCA9IDE4LCAJCQkJCVwKKwkJLnZiaV9jb3VudF8x ID0gMTgsIAkJCQkJXAorCQkudmJpX2hfc3RhcnQgPSAweDAwLCAJCQkJCVwKKwkJLnZiaV92X3N0 YXJ0ID0gMHg0NiwgCQkJCQlcCisJCS52YmlfdyA9IDB4YjQsIAkJCQkJCVwKKwkJLnZiaV9oID0g MHgxMgkJCQkJCVwKKwl9LCB7CQkJCQkJCQlcCisJCS5uYW1lID0gIk5UU0MtTSIsIC8qIEFWIC0g dGVzdGVkIE9LICovCQkJXAorCQkuaWQgPSBWNEwyX1NURF9OVFNDX00sIAkJCQkJXAorCQkudHZf bW9kZSA9ICZYQzMwMjhfdHZfbW9kZV9tX25fbnRzY19wYWxfYTJfaWYsCQlcCisJCS5jaGFubmVs bWFwID0gJlhDMzAyOF9jaGFubmVsX21hcF9jY2lyX2FuYWxvZ19haXIsIAlcCisJCS52Ymlfc2Ft cGxlX3JhdGUgPSAyNzAwMDAwMCwgCQkJCVwKKwkJLnZiaV9zYW1wbGVzX3Blcl9saW5lID0gMTQ0 MCwgCQkJCVwKKwkJLnZiaV9zdGFydF8wID0gOCwgCQkJCQlcCisJCS52Ymlfc3RhcnRfMSA9IDMx OCwgCQkJCQlcCisJCS52YmlfY291bnRfMCA9IDEyLCAJCQkJCVwKKwkJLnZiaV9jb3VudF8xID0g MTIsIAkJCQkJXAorCQkudmJpX2hfc3RhcnQgPSAweDAwLCAJCQkJCVwKKwkJLnZiaV92X3N0YXJ0 ID0gMHgwNiwgCQkJCQlcCisJCS52YmlfdyA9IDB4YjQsIAkJCQkJCVwKKwkJLnZiaV9oID0gMHgw YwkJCQkJCVwKKwl9LCB7CQkJCQkJCQlcCisJCS5uYW1lID0gIlNFQ0FNIEwiLCAvKiBBViAtIG5v dCB0ZXN0ZWQgKi8JCVwKKwkJLmlkID0gVjRMMl9TVERfU0VDQU1fTCwgCQkJCVwKKwkJLnR2X21v ZGUgPSAmWEMzMDI4X3R2X21vZGVfZF9rX3NlY2FtX2EyX2RrMSwJIAlcCisJCS5jaGFubmVsbWFw ID0gJlhDMzAyOF9jaGFubmVsX21hcF9jY2lyX2FuYWxvZ19haXIsIAlcCisJCS52Ymlfc2FtcGxl X3JhdGUgPSAyNzAwMDAwMCwgCQkJCVwKKwkJLnZiaV9zYW1wbGVzX3Blcl9saW5lID0gMTQ0MCwg CQkJCVwKKwkJLnZiaV9zdGFydF8wID0gNSwgCQkJCQlcCisJCS52Ymlfc3RhcnRfMSA9IDMxNywg CQkJCQlcCisJCS52YmlfY291bnRfMCA9IDE4LCAJCQkJCVwKKwkJLnZiaV9jb3VudF8xID0gMTgs IAkJCQkJXAorCQkudmJpX2hfc3RhcnQgPSAweDAwLCAJCQkJCVwKKwkJLnZiaV92X3N0YXJ0ID0g MHg0NiwgCQkJCQlcCisJCS52YmlfdyA9IDB4YjQsIAkJCQkJCVwKKwkJLnZiaV9oID0gMHgxMgkJ CQkJCVwKKwl9LCB7CQkJCQkJCQlcCisJCS5uYW1lID0gIlNFQ0FNIExDIiwgLyogQVYgLSBub3Qg dGVzdGVkICovCQlcCisJCS5pZCA9IFY0TDJfU1REX1NFQ0FNX0xDLCAJCQkJXAorCQkudHZfbW9k ZSA9ICZYQzMwMjhfdHZfbW9kZV9kX2tfc2VjYW1fYTJfZGsxLAkgCVwKKwkJLmNoYW5uZWxtYXAg PSAmWEMzMDI4X2NoYW5uZWxfbWFwX2NjaXJfYW5hbG9nX2FpciwgCVwKKwkJLnZiaV9zYW1wbGVf cmF0ZSA9IDI3MDAwMDAwLCAJCQkJXAorCQkudmJpX3NhbXBsZXNfcGVyX2xpbmUgPSAxNDQwLCAJ CQkJXAorCQkudmJpX3N0YXJ0XzAgPSA1LCAJCQkJCVwKKwkJLnZiaV9zdGFydF8xID0gMzE3LCAJ CQkJCVwKKwkJLnZiaV9jb3VudF8wID0gMTgsIAkJCQkJXAorCQkudmJpX2NvdW50XzEgPSAxOCwg CQkJCQlcCisJCS52YmlfaF9zdGFydCA9IDB4MDAsIAkJCQkJXAorCQkudmJpX3Zfc3RhcnQgPSAw eDQ2LCAJCQkJCVwKKwkJLnZiaV93ID0gMHhiNCwgCQkJCQkJXAorCQkudmJpX2ggPSAweDEyCQkJ CQkJXAorCX0sIHsJCQkJCQkJCVwKKwkJLm5hbWUgPSAiU0VDQU0gSzEiLCAvKiBBViAtIG5vdCB0 ZXN0ZWQgKi8JCVwKKwkJLmlkID0gVjRMMl9TVERfU0VDQU1fSzEsIAkJCQlcCisJCS50dl9tb2Rl ID0gJlhDMzAyOF90dl9tb2RlX2Rfa19zZWNhbV9hMl9kazEsCSAJXAorCQkuY2hhbm5lbG1hcCA9 ICZYQzMwMjhfY2hhbm5lbF9tYXBfY2Npcl9hbmFsb2dfYWlyLCAJXAorCQkudmJpX3NhbXBsZV9y YXRlID0gMjcwMDAwMDAsIAkJCQlcCisJCS52Ymlfc2FtcGxlc19wZXJfbGluZSA9IDE0NDAsIAkJ CQlcCisJCS52Ymlfc3RhcnRfMCA9IDUsIAkJCQkJXAorCQkudmJpX3N0YXJ0XzEgPSAzMTcsIAkJ CQkJXAorCQkudmJpX2NvdW50XzAgPSAxOCwgCQkJCQlcCisJCS52YmlfY291bnRfMSA9IDE4LCAJ CQkJCVwKKwkJLnZiaV9oX3N0YXJ0ID0gMHgwMCwgCQkJCQlcCisJCS52Ymlfdl9zdGFydCA9IDB4 NDYsIAkJCQkJXAorCQkudmJpX3cgPSAweGI0LCAJCQkJCQlcCisJCS52YmlfaCA9IDB4MTIJCQkJ CQlcCisJfSwgewkJCQkJCQkJXAorCQkubmFtZSA9ICJQQUwtTSIsIC8qIEFWIC0gbm90IHRlc3Rl ZCAqLwkJCVwKKwkJLmlkID0gVjRMMl9TVERfUEFMX00sIAkJCQkJXAorCQkudHZfbW9kZSA9ICZY QzMwMjhfdHZfbW9kZV9tX25fbnRzY19wYWxfYTIsIAkJXAorCQkuY2hhbm5lbG1hcCA9ICZYQzMw MjhfY2hhbm5lbF9tYXBfY2Npcl9hbmFsb2dfYWlyLCAJXAorCQkudmJpX3NhbXBsZV9yYXRlID0g MjcwMDAwMDAsIAkJCQlcCisJCS52Ymlfc2FtcGxlc19wZXJfbGluZSA9IDE0NDAsIAkJCQlcCisJ CS52Ymlfc3RhcnRfMCA9IDgsIAkJCQkJXAorCQkudmJpX3N0YXJ0XzEgPSAzMTgsIAkJCQkJXAor CQkudmJpX2NvdW50XzAgPSAxMiwgCQkJCQlcCisJCS52YmlfY291bnRfMSA9IDEyLCAJCQkJCVwK KwkJLnZiaV9oX3N0YXJ0ID0gMHgwMCwgCQkJCQlcCisJCS52Ymlfdl9zdGFydCA9IDB4MDYsIAkJ CQkJXAorCQkudmJpX3cgPSAweGI0LCAJCQkJCQlcCisJCS52YmlfaCA9IDB4MGMJCQkJCQlcCisJ fQkJCQkJCQkJXAorfQorCisjZGVmaW5lIEVFVElfWEMzMDI4TF9ERUZBVUxUX0FOQUxPRyB7CQkJ CQlcCisJewkJCQkJCQkJXAorCQkvKiBhbmFsb2d1ZSBUViAqLwkJCQkJXAorCQkubmFtZSA9ICJQ QUwtQkciLCAvKiBBViAtIHRlc3RlZCBPSyAqLwkJCVwKKwkJLmlkID0gVjRMMl9TVERfUEFMX0JH LCAJCQkJCVwKKwkJLnR2X21vZGUgPSAmWEMzMDI4TF90dl9tb2RlX2JfZ19wYWxfbmljYW1fYiwJ CVwKKwkJLmNoYW5uZWxtYXAgPSAmWEMzMDI4X2NoYW5uZWxfbWFwX2NjaXJfYW5hbG9nX2Fpciwg CVwKKwkJLnZiaV9zYW1wbGVfcmF0ZSA9IDI3MDAwMDAwLCAJCQkJXAorCQkudmJpX3NhbXBsZXNf cGVyX2xpbmUgPSAxNDQwLCAJCQkJXAorCQkudmJpX3N0YXJ0XzAgPSA2LCAJCQkJCVwKKwkJLnZi aV9zdGFydF8xID0gMzE3LCAJCQkJCVwKKwkJLnZiaV9jb3VudF8wID0gMTgsIAkJCQkJXAorCQku dmJpX2NvdW50XzEgPSAxOCwgCQkJCQlcCisJCS52YmlfaF9zdGFydCA9IDB4MDAsIAkJCQkJXAor CQkudmJpX3Zfc3RhcnQgPSAweDQ2LCAJCQkJCVwKKwkJLnZiaV93ID0gMHhiNCwgCQkJCQkJXAor CQkudmJpX2ggPSAxOAkJCQkJCVwKKwl9LCB7CQkJCQkJCQlcCisJCS5uYW1lID0gIlBBTC1ESyIs IC8qIEFWIC0gdGVzdGVkIE9LICovCQkJXAorCQkuaWQgPSBWNEwyX1NURF9QQUxfREssIAkJCQkJ XAorCQkudHZfbW9kZSA9ICZYQzMwMjhMX3R2X21vZGVfZF9rX3BhbF9uaWNhbSwgCQlcCisJCS5j aGFubmVsbWFwID0gJlhDMzAyOF9jaGFubmVsX21hcF9jY2lyX2FuYWxvZ19haXIsIAlcCisJCS52 Ymlfc2FtcGxlX3JhdGUgPSAyNzAwMDAwMCwgCQkJCVwKKwkJLnZiaV9zYW1wbGVzX3Blcl9saW5l ID0gMTQ0MCwgCQkJCVwKKwkJLnZiaV9zdGFydF8wID0gNiwgCQkJCQlcCisJCS52Ymlfc3RhcnRf MSA9IDMxNywgCQkJCQlcCisJCS52YmlfY291bnRfMCA9IDE4LCAJCQkJCVwKKwkJLnZiaV9jb3Vu dF8xID0gMTgsIAkJCQkJXAorCQkudmJpX2hfc3RhcnQgPSAweDAwLCAJCQkJCVwKKwkJLnZiaV92 X3N0YXJ0ID0gMHg0NiwgCQkJCQlcCisJCS52YmlfdyA9IDB4YjQsIAkJCQkJCVwKKwkJLnZiaV9o ID0gMHgxMgkJCQkJCVwKKwl9LCB7CQkJCQkJCQlcCisJCS5uYW1lID0gIlBBTC1JIiwgLyogQVYg LSB0ZXN0ZWQgT0sgKi8JCQlcCisJCS5pZCA9IFY0TDJfU1REX1BBTF9JLCAJCQkJCVwKKwkJLnR2 X21vZGUgPSAmWEMzMDI4TF90dl9tb2RlX2lfcGFsX25pY2FtLCAJCVwKKwkJLmNoYW5uZWxtYXAg PSAmWEMzMDI4X2NoYW5uZWxfbWFwX2NjaXJfYW5hbG9nX2FpciwgCVwKKwkJLnZiaV9zYW1wbGVf cmF0ZSA9IDI3MDAwMDAwLCAJCQkJXAorCQkudmJpX3NhbXBsZXNfcGVyX2xpbmUgPSAxNDQwLCAJ CQkJXAorCQkudmJpX3N0YXJ0XzAgPSA2LCAJCQkJCVwKKwkJLnZiaV9zdGFydF8xID0gMzE3LCAJ CQkJCVwKKwkJLnZiaV9jb3VudF8wID0gMTgsIAkJCQkJXAorCQkudmJpX2NvdW50XzEgPSAxOCwg CQkJCQlcCisJCS52YmlfaF9zdGFydCA9IDB4MDAsIAkJCQkJXAorCQkudmJpX3Zfc3RhcnQgPSAw eDQ2LCAJCQkJCVwKKwkJLnZiaV93ID0gMHhiNCwgCQkJCQkJXAorCQkudmJpX2ggPSAweDEyCQkJ CQkJXAorCX0sIHsJCQkJCQkJCVwKKwkJLm5hbWUgPSAiTlRTQy1NIiwgLyogQVYgLSB0ZXN0ZWQg T0sgKi8JCQlcCisJCS5pZCA9IFY0TDJfU1REX05UU0NfTSwgCQkJCQlcCisJCS50dl9tb2RlID0g JlhDMzAyOExfdHZfbW9kZV9tX25fbnRzY19wYWxfYTJfaWYsCQlcCisJCS5jaGFubmVsbWFwID0g JlhDMzAyOF9jaGFubmVsX21hcF9jY2lyX2FuYWxvZ19haXIsIAlcCisJCS52Ymlfc2FtcGxlX3Jh dGUgPSAyNzAwMDAwMCwgCQkJCVwKKwkJLnZiaV9zYW1wbGVzX3Blcl9saW5lID0gMTQ0MCwgCQkJ CVwKKwkJLnZiaV9zdGFydF8wID0gOCwgCQkJCQlcCisJCS52Ymlfc3RhcnRfMSA9IDMxOCwgCQkJ CQlcCisJCS52YmlfY291bnRfMCA9IDEyLCAJCQkJCVwKKwkJLnZiaV9jb3VudF8xID0gMTIsIAkJ CQkJXAorCQkudmJpX2hfc3RhcnQgPSAweDAwLCAJCQkJCVwKKwkJLnZiaV92X3N0YXJ0ID0gMHgw NiwgCQkJCQlcCisJCS52YmlfdyA9IDB4YjQsIAkJCQkJCVwKKwkJLnZiaV9oID0gMHgwYwkJCQkJ CVwKKwl9LCB7CQkJCQkJCQlcCisJCS5uYW1lID0gIlNFQ0FNIEwiLCAvKiBBViAtIG5vdCB0ZXN0 ZWQgKi8JCVwKKwkJLmlkID0gVjRMMl9TVERfU0VDQU1fTCwgCQkJCVwKKwkJLnR2X21vZGUgPSAm WEMzMDI4TF90dl9tb2RlX2Rfa19zZWNhbV9hMl9kazEsCSAJXAorCQkuY2hhbm5lbG1hcCA9ICZY QzMwMjhfY2hhbm5lbF9tYXBfY2Npcl9hbmFsb2dfYWlyLCAJXAorCQkudmJpX3NhbXBsZV9yYXRl ID0gMjcwMDAwMDAsIAkJCQlcCisJCS52Ymlfc2FtcGxlc19wZXJfbGluZSA9IDE0NDAsIAkJCQlc CisJCS52Ymlfc3RhcnRfMCA9IDYsIAkJCQkJXAorCQkudmJpX3N0YXJ0XzEgPSAzMTcsIAkJCQkJ XAorCQkudmJpX2NvdW50XzAgPSAxOCwgCQkJCQlcCisJCS52YmlfY291bnRfMSA9IDE4LCAJCQkJ CVwKKwkJLnZiaV9oX3N0YXJ0ID0gMHgwMCwgCQkJCQlcCisJCS52Ymlfdl9zdGFydCA9IDB4NDYs IAkJCQkJXAorCQkudmJpX3cgPSAweGI0LCAJCQkJCQlcCisJCS52YmlfaCA9IDB4MTIJCQkJCQlc CisJfSwgewkJCQkJCQkJXAorCQkubmFtZSA9ICJTRUNBTSBMQyIsIC8qIEFWIC0gbm90IHRlc3Rl ZCAqLwkJXAorCQkuaWQgPSBWNEwyX1NURF9TRUNBTV9MQywgCQkJCVwKKwkJLnR2X21vZGUgPSAm WEMzMDI4TF90dl9tb2RlX2Rfa19zZWNhbV9hMl9kazEsCSAJXAorCQkuY2hhbm5lbG1hcCA9ICZY QzMwMjhfY2hhbm5lbF9tYXBfY2Npcl9hbmFsb2dfYWlyLCAJXAorCQkudmJpX3NhbXBsZV9yYXRl ID0gMjcwMDAwMDAsIAkJCQlcCisJCS52Ymlfc2FtcGxlc19wZXJfbGluZSA9IDE0NDAsIAkJCQlc CisJCS52Ymlfc3RhcnRfMCA9IDYsIAkJCQkJXAorCQkudmJpX3N0YXJ0XzEgPSAzMTcsIAkJCQkJ XAorCQkudmJpX2NvdW50XzAgPSAxOCwgCQkJCQlcCisJCS52YmlfY291bnRfMSA9IDE4LCAJCQkJ CVwKKwkJLnZiaV9oX3N0YXJ0ID0gMHgwMCwgCQkJCQlcCisJCS52Ymlfdl9zdGFydCA9IDB4NDYs IAkJCQkJXAorCQkudmJpX3cgPSAweGI0LCAJCQkJCQlcCisJCS52YmlfaCA9IDB4MTIJCQkJCQlc CisJfSwgewkJCQkJCQkJXAorCQkubmFtZSA9ICJTRUNBTSBLMSIsIC8qIEFWIC0gbm90IHRlc3Rl ZCAqLwkJXAorCQkuaWQgPSBWNEwyX1NURF9TRUNBTV9LMSwgCQkJCVwKKwkJLnR2X21vZGUgPSAm WEMzMDI4TF90dl9tb2RlX2Rfa19zZWNhbV9hMl9kazEsCSAJXAorCQkuY2hhbm5lbG1hcCA9ICZY QzMwMjhfY2hhbm5lbF9tYXBfY2Npcl9hbmFsb2dfYWlyLCAJXAorCQkudmJpX3NhbXBsZV9yYXRl ID0gMjcwMDAwMDAsIAkJCQlcCisJCS52Ymlfc2FtcGxlc19wZXJfbGluZSA9IDE0NDAsIAkJCQlc CisJCS52Ymlfc3RhcnRfMCA9IDYsIAkJCQkJXAorCQkudmJpX3N0YXJ0XzEgPSAzMTcsIAkJCQkJ XAorCQkudmJpX2NvdW50XzAgPSAxOCwgCQkJCQlcCisJCS52YmlfY291bnRfMSA9IDE4LCAJCQkJ CVwKKwkJLnZiaV9oX3N0YXJ0ID0gMHgwMCwgCQkJCQlcCisJCS52Ymlfdl9zdGFydCA9IDB4NDYs IAkJCQkJXAorCQkudmJpX3cgPSAweGI0LCAJCQkJCQlcCisJCS52YmlfaCA9IDB4MTIJCQkJCQlc CisJfSwgewkJCQkJCQkJXAorCQkubmFtZSA9ICJQQUwtTSIsIC8qIEFWIC0gbm90IHRlc3RlZCAq LwkJCVwKKwkJLmlkID0gVjRMMl9TVERfUEFMX00sIAkJCQkJXAorCQkudHZfbW9kZSA9ICZYQzMw MjhMX3R2X21vZGVfZF9rX3NlY2FtX2EyX2RrMSwJIAlcCisJCS5jaGFubmVsbWFwID0gJlhDMzAy OF9jaGFubmVsX21hcF9jY2lyX2FuYWxvZ19haXIsIAlcCisJCS52Ymlfc2FtcGxlX3JhdGUgPSAy NzAwMDAwMCwgCQkJCVwKKwkJLnZiaV9zYW1wbGVzX3Blcl9saW5lID0gMTQ0MCwgCQkJCVwKKwkJ LnZiaV9zdGFydF8wID0gNiwgCQkJCQlcCisJCS52Ymlfc3RhcnRfMSA9IDMxNywgCQkJCQlcCisJ CS52YmlfY291bnRfMCA9IDE4LCAJCQkJCVwKKwkJLnZiaV9jb3VudF8xID0gMTgsIAkJCQkJXAor CQkudmJpX2hfc3RhcnQgPSAweDAwLCAJCQkJCVwKKwkJLnZiaV92X3N0YXJ0ID0gMHg0NiwgCQkJ CQlcCisJCS52YmlfdyA9IDB4YjQsIAkJCQkJCVwKKwkJLnZiaV9oID0gMHgxMgkJCQkJCVwKKwl9 CQkJCQkJCQlcCit9CisKKyNkZWZpbmUgRUVUSV9YQzMwMjhMX0RFRkFVTFRfRFZCVCB7IAkJCQkJ XAorCXsJCQkJCQkJCVwKKwkJLyogRFZCLVQgKi8JCQkJCQlcCisJCS5iYW5kd2lkdGggPSBFTTI4 WFhfQkFORFdJRFRIXzhfTUhaLCAJCQlcCisJCS50dl9tb2RlID0gJlhDMzAyOExfdHZfbW9kZV9k dHY3OF96YXJsaW5rXzRfNTZtaHosIAlcCisJCS5jaGFubmVsbWFwID0gJlhDMzAyOF9jaGFubmVs X21hcF9jY2lyX2RpZ2l0YWxfYWlyLCAJXAorCX0sIHsJCQkJCQkJCVwKKwkJLmJhbmR3aWR0aCA9 IEVNMjhYWF9CQU5EV0lEVEhfN19NSFosIAkJCVwKKwkJLnR2X21vZGUgPSAmWEMzMDI4TF90dl9t b2RlX2R0djc4X3phcmxpbmtfNF81Nm1oeiwgCVwKKwkJLmNoYW5uZWxtYXAgPSAmWEMzMDI4X2No YW5uZWxfbWFwX2NjaXJfZGlnaXRhbF9haXIsIAlcCisJfSwgewkJCQkJCQkJXAorCQkuYmFuZHdp ZHRoID0gRU0yOFhYX0JBTkRXSURUSF82X01IWiwgCQkJXAorCQkudHZfbW9kZSA9ICZYQzMwMjhM X3R2X21vZGVfZHR2NzhfemFybGlua180XzU2bWh6LCAJXAorCQkuY2hhbm5lbG1hcCA9ICZYQzMw MjhfY2hhbm5lbF9tYXBfY2Npcl9kaWdpdGFsX2FpciwgCVwKKwl9CQkJCQkJCQlcCit9CisKKyNk ZWZpbmUgRUVUSV9YQzMwMjhMX0RFRkFVTFRfUUFNIHsgCQkJCQlcCisJewkJCQkJCQkJXAorCQku YmFuZHdpZHRoID0gRU0yOFhYX0JBTkRXSURUSF82X01IWiwgCQkJXAorCQkudHZfbW9kZSA9ICZY QzMwMjhMX3R2X21vZGVfZHR2Nl96YXJsaW5rX3FhbV80XzU2bWh6LCAJXAorCQkuY2hhbm5lbG1h cCA9ICZYQzMwMjhfY2hhbm5lbF9tYXBfY2Npcl9kaWdpdGFsX2FpciwgCVwKKwl9CQkJCQkJCQlc Cit9CisKKyNkZWZpbmUgRUVUSV9YQzMwMjhMX0RFRkFVTFRfRk0geyAJCQkJCVwKKwl7CQkJCQkJ CQlcCisJCS50dl9tb2RlID0gJlhDMzAyOExfdHZfbW9kZV9mbV9yYWRpb19pbnB1dDEsIAkJXAor CQkuY2hhbm5lbG1hcCA9ICZYQzMwMjhfY2hhbm5lbF9tYXBfY2Npcl9hbmFsb2dfYWlyLCAJXAor CX0JCQkJCQkJCVwKK30KKworI2RlZmluZSBFRVRJX1hDMzAyOExfREVGQVVMVF9BVFNDIHsJCQkJ CVwKKwl7CQkJCQkJCQlcCisJCS8qIEFUU0MgKi8JCQkJCQlcCisJCS5iYW5kd2lkdGggPSBFTTI4 WFhfQkFORFdJRFRIXzZfTUhaLCAJCQlcCisJCS50dl9tb2RlID0gJlhDMzAyOExfdHZfbW9kZV9k dHY2X2F0c2NfbGdfNl8wbWh6LCAJXAorCQkuY2hhbm5lbG1hcCA9ICZYQzMwMjhfY2hhbm5lbF9t YXBfY2Npcl9kaWdpdGFsX2FpcglcCisJfQkJCQkJCQkJXAorfQorCisjZGVmaW5lIEVFVElfWEMz MDI4X0RFRkFVTFRfUUFNIHsgCQkJCQlcCisJewkJCQkJCQkJXAorCQkuYmFuZHdpZHRoID0gRU0y OFhYX0JBTkRXSURUSF82X01IWiwgCQkJXAorCQkudHZfbW9kZSA9ICZYQzMwMjhfdHZfbW9kZV9k dHY2X3phcmxpbmtfcWFtXzRfNTZtaHosIAlcCisJCS5jaGFubmVsbWFwID0gJlhDMzAyOF9jaGFu bmVsX21hcF9jY2lyX2RpZ2l0YWxfYWlyLCAJXAorCX0JCQkJCQkJCVwKK30KKworI2RlZmluZSBF RVRJX1hDMzAyOF9ERUZBVUxUX0RWQlQgeyAJCQkJCVwKKwl7CQkJCQkJCQlcCisJCS8qIERWQi1U ICovCQkJCQkJXAorCQkuYmFuZHdpZHRoID0gRU0yOFhYX0JBTkRXSURUSF84X01IWiwgCQkJXAor CQkudHZfbW9kZSA9ICZYQzMwMjhfdHZfbW9kZV9kdHY3OF96YXJsaW5rXzRfNTZtaHosIAlcCisJ CS5jaGFubmVsbWFwID0gJlhDMzAyOF9jaGFubmVsX21hcF9jY2lyX2RpZ2l0YWxfYWlyLCAJXAor CX0sIHsJCQkJCQkJCVwKKwkJLmJhbmR3aWR0aCA9IEVNMjhYWF9CQU5EV0lEVEhfN19NSFosIAkJ CVwKKwkJLnR2X21vZGUgPSAmWEMzMDI4X3R2X21vZGVfZHR2NzhfemFybGlua180XzU2bWh6LCAJ XAorCQkuY2hhbm5lbG1hcCA9ICZYQzMwMjhfY2hhbm5lbF9tYXBfY2Npcl9kaWdpdGFsX2Fpciwg CVwKKwl9LCB7CQkJCQkJCQlcCisJCS5iYW5kd2lkdGggPSBFTTI4WFhfQkFORFdJRFRIXzZfTUha LCAJCQlcCisJCS50dl9tb2RlID0gJlhDMzAyOF90dl9tb2RlX2R0djc4X3phcmxpbmtfNF81Nm1o eiwgCVwKKwkJLmNoYW5uZWxtYXAgPSAmWEMzMDI4X2NoYW5uZWxfbWFwX2NjaXJfZGlnaXRhbF9h aXIsIAlcCisJfQkJCQkJCQkJXAorfQorCisKKyNkZWZpbmUgRUVUSV9YQzMwMjhfREVGQVVMVF9B VFNDIHsJCQkJCVwKKwl7CQkJCQkJCQlcCisJCS8qIEFUU0MgKi8JCQkJCQlcCisJCS5iYW5kd2lk dGggPSBFTTI4WFhfQkFORFdJRFRIXzZfTUhaLCAJCQlcCisJCS50dl9tb2RlID0gJlhDMzAyOF90 dl9tb2RlX2R0djZfYXRzY19sZ182XzBtaHosIAlcCisJCS5jaGFubmVsbWFwID0gJlhDMzAyOF9j aGFubmVsX21hcF9jY2lyX2RpZ2l0YWxfYWlyCVwKKwl9CQkJCQkJCQlcCit9CisKKyNkZWZpbmUg RUVUSV9YQzMwMjhfREVGQVVMVF9RQU02NCB7CQkJCQlcCisJewkvKiBRQU02NCAqLwkJCQkJCVwK KwkJLmJhbmR3aWR0aCA9IEVNMjhYWF9CQU5EV0lEVEhfNl9NSFosIAkJCVwKKwkJLnR2X21vZGUg PSAmWEMzMDI4X3R2X21vZGVfZHR2Nl9xYW1fNl8wbWh6LCAJCVwKKwkJLmNoYW5uZWxtYXAgPSAm WEMzMDI4X2NoYW5uZWxfbWFwX2NjaXJfZGlnaXRhbF9haXIJXAorCX0JCQkJCQkJCVwKK30KKwor I2RlZmluZSBFRVRJX1hDMzAyOF9ERUZBVUxUX0ZNIHsgCQkJCQlcCisJewkJCQkJCQkJXAorCQku dHZfbW9kZSA9ICZYQzMwMjhfdHZfbW9kZV9mbV9yYWRpb19pbnB1dDEsIAkJXAorCQkuY2hhbm5l bG1hcCA9ICZYQzMwMjhfY2hhbm5lbF9tYXBfY2Npcl9hbmFsb2dfYWlyLCAJXAorCX0JCQkJCQkJ CVwKK30KKworI2RlZmluZSBFRVRJX1hDNTAwMF9ERUZBVUxUX0FOQUxPRyB7CQkJCQlcCisJewkJ CQkJCQkJXAorCQkubmFtZSA9ICJQQUwtQkciLCAJCQkJCVwKKwkJLmlkID0gVjRMMl9TVERfUEFM X0JHLCAJCQkJCVwKKwkJLmluZGV4ID0gNCwgCQkJCQkJXAorCQkudmJpX3NhbXBsZV9yYXRlID0g MjcwMDAwMDAsIAkJCQlcCisJCS52Ymlfc2FtcGxlc19wZXJfbGluZSA9IDE0NDAsIAkJCQlcCisJ CS52Ymlfc3RhcnRfMCA9IDYsIAkJCQkJXAorCQkudmJpX3N0YXJ0XzEgPSAzMTcsIAkJCQkJXAor CQkudmJpX2NvdW50XzAgPSAxNywgCQkJCQlcCisJCS52YmlfY291bnRfMSA9IDE3LCAJCQkJCVwK KwkJLnZiaV9oX3N0YXJ0ID0gMHgwMCwgCQkJCQlcCisJCS52Ymlfdl9zdGFydCA9IDB4NDYsIAkJ CQkJXAorCQkudmJpX3cgPSAweGI0LCAJCQkJCQlcCisJCS52YmlfaCA9IDB4MTEJCQkJCQlcCisJ fSwgewkJCQkJCQkJXAorCQkubmFtZSA9ICJQQUwtREsiLCAJCQkJCVwKKwkJLmlkID0gVjRMMl9T VERfUEFMX0RLLCAJCQkJCVwKKwkJLmluZGV4ID0gOSwgCQkJCQkJXAorCQkudmJpX3NhbXBsZV9y YXRlID0gMjcwMDAwMDAsIAkJCQlcCisJCS52Ymlfc2FtcGxlc19wZXJfbGluZSA9IDE0NDAsIAkJ CQlcCisJCS52Ymlfc3RhcnRfMCA9IDYsIAkJCQkJXAorCQkudmJpX3N0YXJ0XzEgPSAzMTcsIAkJ CQkJXAorCQkudmJpX2NvdW50XzAgPSAxNywgCQkJCQlcCisJCS52YmlfY291bnRfMSA9IDE3LCAJ CQkJCVwKKwkJLnZiaV9oX3N0YXJ0ID0gMHgwMCwgCQkJCQlcCisJCS52Ymlfdl9zdGFydCA9IDB4 NDYsIAkJCQkJXAorCQkudmJpX3cgPSAweGI0LCAJCQkJCQlcCisJCS52YmlfaCA9IDB4MTEJCQkJ CQlcCisJfSwgewkJCQkJCQkJXAorCQkubmFtZSA9ICJQQUwtSSIsIAkJCQkJXAorCQkuaWQgPSBW NEwyX1NURF9QQUxfSSwgCQkJCQlcCisJCS5pbmRleCA9IDcsIAkJCQkJCVwKKwkJLnZiaV9zYW1w bGVfcmF0ZSA9IDI3MDAwMDAwLCAJCQkJXAorCQkudmJpX3NhbXBsZXNfcGVyX2xpbmUgPSAxNDQw LCAJCQkJXAorCQkudmJpX3N0YXJ0XzAgPSA2LCAJCQkJCVwKKwkJLnZiaV9zdGFydF8xID0gMzE3 LCAJCQkJCVwKKwkJLnZiaV9jb3VudF8wID0gMTcsIAkJCQkJXAorCQkudmJpX2NvdW50XzEgPSAx NywgCQkJCQlcCisJCS52YmlfaF9zdGFydCA9IDB4MDAsIAkJCQkJXAorCQkudmJpX3Zfc3RhcnQg PSAweDQ2LCAJCQkJCVwKKwkJLnZiaV93ID0gMHhiNCwgCQkJCQkJXAorCQkudmJpX2ggPSAweDEx CQkJCQkJXAorCX0sIHsJCQkJCQkJCVwKKwkJLm5hbWUgPSAiTlRTQyBNIiwgCQkJCQlcCisJCS5p ZCA9IFY0TDJfU1REX05UU0NfTSwgCQkJCQlcCisJCS5pbmRleCA9IDAsIAkJCQkJCVwKKwkJLnZi aV9zYW1wbGVfcmF0ZSA9IDI3MDAwMDAwLCAJCQkJXAorCQkudmJpX3NhbXBsZXNfcGVyX2xpbmUg PSAxNDQwLCAJCQkJXAorCQkudmJpX3N0YXJ0XzAgPSA2LCAJCQkJCVwKKwkJLnZiaV9zdGFydF8x ID0gMzE3LCAJCQkJCVwKKwkJLnZiaV9jb3VudF8wID0gMTIsIAkJCQkJXAorCQkudmJpX2NvdW50 XzEgPSAxMiwgCQkJCQlcCisJCS52YmlfaF9zdGFydCA9IDB4MDAsIAkJCQkJXAorCQkudmJpX3Zf c3RhcnQgPSAweDA2LCAJCQkJCVwKKwkJLnZiaV93ID0gMHhiNCwgCQkJCQkJXAorCQkudmJpX2gg PSAweDBjCQkJCQkJXAorCX0sIHsJCQkJCQkJCVwKKwkJLm5hbWUgPSAiU0VDQU0gTCIsIAkJCQkJ XAorCQkuaWQgPSBWNEwyX1NURF9TRUNBTV9MLCAJCQkJXAorCQkuaW5kZXggPSAxNSwgCQkJCQkJ XAorCQkudmJpX3NhbXBsZV9yYXRlID0gMjcwMDAwMDAsIAkJCQlcCisJCS52Ymlfc2FtcGxlc19w ZXJfbGluZSA9IDE0NDAsIAkJCQlcCisJCS52Ymlfc3RhcnRfMCA9IDYsIAkJCQkJXAorCQkudmJp X3N0YXJ0XzEgPSAzMTcsIAkJCQkJXAorCQkudmJpX2NvdW50XzAgPSAxNywgCQkJCQlcCisJCS52 YmlfY291bnRfMSA9IDE3LCAJCQkJCVwKKwkJLnZiaV9oX3N0YXJ0ID0gMHgwMCwgCQkJCQlcCisJ CS52Ymlfdl9zdGFydCA9IDB4NDYsIAkJCQkJXAorCQkudmJpX3cgPSAweGI0LCAJCQkJCQlcCisJ CS52YmlfaCA9IDB4MTEJCQkJCQlcCisJfSwgewkJCQkJCQkJXAorCQkubmFtZSA9ICJTRUNBTSBM QyIsIAkJCQkJXAorCQkuaWQgPSBWNEwyX1NURF9TRUNBTV9MQywgCQkJCVwKKwkJLmluZGV4ID0g MTYsIAkJCQkJCVwKKwkJLnZiaV9zYW1wbGVfcmF0ZSA9IDI3MDAwMDAwLCAJCQkJXAorCQkudmJp X3NhbXBsZXNfcGVyX2xpbmUgPSAxNDQwLCAJCQkJXAorCQkudmJpX3N0YXJ0XzAgPSA2LCAJCQkJ CVwKKwkJLnZiaV9zdGFydF8xID0gMzE3LCAJCQkJCVwKKwkJLnZiaV9jb3VudF8wID0gMTcsIAkJ CQkJXAorCQkudmJpX2NvdW50XzEgPSAxNywgCQkJCQlcCisJCS52YmlfaF9zdGFydCA9IDB4MDAs IAkJCQkJXAorCQkudmJpX3Zfc3RhcnQgPSAweDQ2LCAJCQkJCVwKKwkJLnZiaV93ID0gMHhiNCwg CQkJCQkJXAorCQkudmJpX2ggPSAweDExCQkJCQkJXAorCX0sIHsJCQkJCQkJCVwKKwkJLm5hbWUg PSAiU0VDQU0gSzEiLCAJCQkJCVwKKwkJLmlkID0gVjRMMl9TVERfU0VDQU1fSzEsIAkJCQlcCisJ CS5pbmRleCA9IDE1LCAJCQkJCQlcCisJCS52Ymlfc2FtcGxlX3JhdGUgPSAyNzAwMDAwMCwgCQkJ CVwKKwkJLnZiaV9zYW1wbGVzX3Blcl9saW5lID0gMTQ0MCwgCQkJCVwKKwkJLnZiaV9zdGFydF8w ID0gNiwgCQkJCQlcCisJCS52Ymlfc3RhcnRfMSA9IDMxNywgCQkJCQlcCisJCS52YmlfY291bnRf MCA9IDE3LCAJCQkJCVwKKwkJLnZiaV9jb3VudF8xID0gMTcsIAkJCQkJXAorCQkudmJpX2hfc3Rh cnQgPSAweDAwLCAJCQkJCVwKKwkJLnZiaV92X3N0YXJ0ID0gMHg0NiwgCQkJCQlcCisJCS52Ymlf dyA9IDB4YjQsIAkJCQkJCVwKKwkJLnZiaV9oID0gMHgxMQkJCQkJCVwKKwl9LCB7CQkJCQkJCQlc CisJCS5uYW1lID0gIlBBTC1NIiwgLyogdG9kbywgdGhpcyBvbmUgbmVlZHMgdGVzdGluZyAqLwlc CisJCS5pZCA9IFY0TDJfU1REX1BBTF9NLCAJCQkJCVwKKwkJLmluZGV4ID0gMSwgCQkJCQkJXAor CQkudmJpX3NhbXBsZV9yYXRlID0gMjcwMDAwMDAsIAkJCQlcCisJCS52Ymlfc2FtcGxlc19wZXJf bGluZSA9IDE0NDAsIAkJCQlcCisJCS52Ymlfc3RhcnRfMCA9IDYsIAkJCQkJXAorCQkudmJpX3N0 YXJ0XzEgPSAzMTcsIAkJCQkJXAorCQkudmJpX2NvdW50XzAgPSAxNywgCQkJCQlcCisJCS52Ymlf Y291bnRfMSA9IDE3LCAJCQkJCVwKKwkJLnZiaV9oX3N0YXJ0ID0gMHgwMCwgCQkJCQlcCisJCS52 Ymlfdl9zdGFydCA9IDB4NDYsIAkJCQkJXAorCQkudmJpX3cgPSAweGI0LCAJCQkJCQlcCisJCS52 YmlfaCA9IDB4MTEJCQkJCQlcCisJfQkJCQkJCQkJXAorfQorCisjZGVmaW5lIEVFVElfWEM1MDAw X0RFRkFVTFRfRk0gewkJCQkJXAorCXsJCQkJCQkJCVwKKwkJLm5hbWUgPSAiRk0gUmFkaW8iLCAJ CQkJCVwKKwkJLmluZGV4ID0gMjIsIAkJCQkJCVwKKwl9CQkJCQkJCQlcCit9CisKKyNkZWZpbmUg RUVUSV9YQzUwMDBfREVGQVVMVF9EVkJUIHsJCQkJCVwKKwl7CQkJCQkJCQlcCisJCS5iYW5kd2lk dGggPSBFTTI4WFhfQkFORFdJRFRIXzhfTUhaLCAJCQlcCisJCS5pbmRleCA9IDE4CQkJCQkJXAor CX0sIHsJCQkJCQkJCVwKKwkJLmJhbmR3aWR0aCA9IEVNMjhYWF9CQU5EV0lEVEhfN19NSFosIAkJ CVwKKwkJLmluZGV4ID0gMjAJCQkJCQlcCisJfSwgewkJCQkJCQkJXAorCQkuYmFuZHdpZHRoID0g RU0yOFhYX0JBTkRXSURUSF82X01IWiwgCQkJXAorCQkuaW5kZXggPSAxNwkJCQkJCVwKKwl9CQkJ CQkJCQlcCit9CisKKyNkZWZpbmUgRUVUSV9YQzUwMDBfREVGQVVMVF9BVFNDIHsJCQkJCVwKKwl7 CQkJCQkJCQlcCisJCS5iYW5kd2lkdGggPSBFTTI4WFhfQkFORFdJRFRIXzhfTUhaLCAJCQlcCisJ CS5pbmRleCA9IDAgLyogVE9ETyAqLwkJCQkJXAorCX0JCQkJCQkJCVwKK30KKworI2RlZmluZSBF RVRJX1hDNTAwMF9ERUZBVUxUX1FBTSB7CQkJCQlcCisJewkJCQkJCQkJXAorCQkuYmFuZHdpZHRo ID0gRU0yOFhYX0JBTkRXSURUSF84X01IWiwgCQkJXAorCQkuaW5kZXggPSAwIC8qIFRPRE8gKi8J CQkJCVwKKwl9CQkJCQkJCQlcCit9CisKKyNkZWZpbmUgRUVUSV9ERUZBVUxUX0dQSU8gewkJCQkJ CVwKKwkudHMxX29uICAgICA9IF9CSVRfVkFMKEVNMjhYWF9HUElPMCwgIDAsIDApLCAJCQlcCisJ LmFfb24gICAgICAgPSBfQklUX1ZBTChFTTI4WFhfR1BJTzEsICAwLCAwKSwgCQkJXAorCS54YzMw Mjhfc2VjID0gX0JJVF9WQUwoRU0yOFhYX0dQSU8yLCAgMSwgMCksIAkJCVwKKwkvKiByZXNlcnZl ZCAqLwkJCQkJCQlcCisJLnQxX3Jlc2V0ICAgPSBfQklUX1ZBTChFTTI4WFhfR1BJTzQsICAwLCAx KSwgCQkJXAorCS8qIHJlc2VydmVkICovCQkJCQkJCVwKKwkudDFfb24gICAgICA9IF9CSVRfVkFM KEVNMjhYWF9HUElPNiwgIDAsIDApLCAJCQlcCisJLnQyX29uICAgICAgPSBfQklUX1ZBTChFTTI4 WFhfR1BJTzcsICAxLCAwKSwgCQkJXAorCQkJCQkJCQkJXAorCS5sMV9vbiAgICAgID0gX0JJVF9W QUwoRU0yOFhYX0dPUDIsICAgMSwgMCksIAkJCVwKKwkuZDFfcmVzZXQgICA9IF9CSVRfVkFMKEVN MjhYWF9HT1AzLCAgIDAsIDEpLCAJCQlcCit9CisKKyNkZWZpbmUgRUVUSV9EUlgzOTc1RF9HUElP IHsJCQkJCQlcCisJLnRzMV9vbiAgICAgPSBfQklUX1ZBTChFTTI4WFhfR1BJTzAsICAwLCAwKSwg CQkJXAorCS5hX29uICAgICAgID0gX0JJVF9WQUwoRU0yOFhYX0dQSU8xLCAgMCwgMCksIAkJCVwK KwkueGMzMDI4X3NlYyA9IF9CSVRfVkFMKEVNMjhYWF9HUElPMiwgIDEsIDApLCAJCQlcCisJLyog cmVzZXJ2ZWQgKi8JCQkJCQkJXAorCS50MV9yZXNldCAgID0gX0JJVF9WQUwoRU0yOFhYX0dQSU80 LCAgMCwgMSksIAkJCVwKKwkvKiByZXNlcnZlZCAqLwkJCQkJCQlcCisJLnQxX29uICAgICAgPSBf QklUX1ZBTChFTTI4WFhfR1BJTzYsICAwLCAwKSwgCQkJXAorCS50Ml9vbiAgICAgID0gX0JJVF9W QUwoRU0yOFhYX0dQSU83LCAgMSwgMCksIAkJCVwKKwkJCQkJCQkJCVwKKwkubDFfb24gICAgICA9 IF9CSVRfVkFMKEVNMjhYWF9HT1AyLCAgIDEsIDApLCAJCQlcCit9CisKK3N0cnVjdCBlbTI4eHhf Ym9hcmQgZW0yOHh4X2JvYXJkc1tdID0geworCS8qIEZJWE1FOiBwbGVhc2UgdmVyaWZ5IHRoZSBz dXBwb3J0ZWQgdmlkZW8gc3RhbmRhcmRzICovCisJW0VNMjgwMF9CT0FSRF9HRU5FUklDXSA9IHsK KwkJLm5hbWUgICAgICAgICA9ICJHZW5lcmljIEVNMjgwMCB2aWRlbyBncmFiYmVyIiwKKwl9LAor CVtFTTI4MjBfQk9BUkRfR0VORVJJQ10gPSB7CisJCS5uYW1lICAgICAgICAgPSAiR2VuZXJpYyBF TTI4MjAgdmlkZW8gZ3JhYmJlciIsCisJfSwKKwlbRU0yODIxX0JPQVJEX0dFTkVSSUNdID0gewor CQkubmFtZSAgICAgICAgID0gIkdlbmVyaWMgRU0yODIxIHZpZGVvIGdyYWJiZXIiLAorCX0sCisJ W0VNMjc1MF9CT0FSRF9HRU5FUklDXSA9IHsKKwkJLm5hbWUgICAgICAgICA9ICJHZW5lcmljIEVN Mjc1MCB2aWRlbyBncmFiYmVyIiwKKwl9LAorCVtFTTI4NjBfQk9BUkRfR0VORVJJQ10gPSB7CisJ CS5uYW1lICAgICAgICAgPSAiR2VuZXJpYyBFTTI4NjAgdmlkZW8gZ3JhYmJlciIsCisJfSwKKwlb RU0yODYxX0JPQVJEX0dFTkVSSUNdID0geworCQkubmFtZSAgICAgICAgID0gIkdlbmVyaWMgRU0y ODYxIHZpZGVvIGdyYWJiZXIiLAorCX0sCisJW0VNMjg3MF9CT0FSRF9HRU5FUklDXSA9IHsKKwkJ Lm5hbWUgICAgICAgICA9ICJHZW5lcmljIEVNMjg3MCB2aWRlbyBncmFiYmVyIiwKKwl9LAorCVtF TTI4ODFfQk9BUkRfR0VORVJJQ10gPSB7CisJCS5uYW1lICAgICAgICAgPSAiR2VuZXJpYyBFTTI4 ODEgdmlkZW8gZ3JhYmJlciIsCisJfSwKKwlbRU0yODgzX0JPQVJEX0dFTkVSSUNdID0geworCQku bmFtZSAgICAgICAgID0gIkdlbmVyaWMgRU0yODgzIHZpZGVvIGdyYWJiZXIiLAorCX0sCisJW0VN MjgyMF9CT0FSRF9LV09STERfUFZSVFYyODAwUkZdID0geworCQkubmFtZSAgICAgICAgID0gIktX b3JsZCBQVlIgVFYgMjgwMCBSRiIsCisJCS52Y2hhbm5lbHMgICAgPSAyLAorCQkubm9ybSAgICAg ICAgID0gVjRMMl9TVERfUEFMX0JHLAorCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5U LAorCQkuaGFzX3R1bmVyICAgID0gMSwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTEz LAorCQkuZGV2X21vZGVzICAgID0gRU0yOFhYX1ZJREVPLAorCQkuaW5wdXQgICAgICAgICAgID0g e3sKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAg PSBTQUE3MTE1X0NPTVBPU0lURTAsCisJCQkuYW11eCAgICAgPSAxLAorCQl9LCB7CisJCQkudHlw ZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSBTQUE3MTE1X1NWSURF TzMsCisJCQkuYW11eCAgICAgPSAxLAorCQl9IH0sCisJCS50dm5vcm1zCT0ge3sKKwkJCQkubmFt ZSA9ICJQQUwtQkciLAorCQkJCS5pZCA9IFY0TDJfU1REX1BBTF9CRywKKwkJCX0sIHsKKwkJCQku bmFtZSA9ICJQQUwtREsiLAorCQkJCS5pZCA9IFY0TDJfU1REX1BBTF9ESywKKwkJCX0sIHsKKwkJ CQkubmFtZSA9ICJQQUwtSSIsCisJCQkJLmlkID0gVjRMMl9TVERfUEFMX0ksCisJCQl9LCB7CisJ CQkJLm5hbWUgPSAiUEFMLU0iLAorCisJCQkJLmlkID0gVjRMMl9TVERfUEFMX00sCisJCX0gfSwK Kwl9LAorCVtFTTI4MjBfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8yNTBdID0geworCQkubmFtZSAg ICAgICAgID0gIlRlcnJhdGVjIENpbmVyZ3kgMjUwIFVTQiIsCisJCS52Y2hhbm5lbHMgICAgPSAz LAorCQkubm9ybSAgICAgICAgID0gVjRMMl9TVERfUEFMX0JHLAorCQkudHVuZXJfdHlwZSAgID0g VFVORVJfTEdfUEFMX05FV19UQVBDLAorCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5U LAorCQkuaGFzX3R1bmVyICAgID0gMSwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTEz LAorCQkuZGV2X21vZGVzICAgID0gRU0yOFhYX1ZJREVPLAorCQkuaXJfaTJjICAgICAgID0gMSwK KwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVW SVNJT04sCisJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTIsCisJCQkuYW11eCAgICAg PSAxLAorCQkJLmFtaXggICAgID0gRU0yOFhYX01JWF9WSURFTywKKwkJfSwgeworCQkJLnR5cGUg ICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09N UE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW1peCAgICAgPSBFTTI4WFhfTUlYX0xJ TkVfSU4sCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52 bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKKwkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW1peCAg ICAgPSBFTTI4WFhfTUlYX0xJTkVfSU4sCisJCX0gfSwKKwkJLnR2bm9ybXMJPSB7CisJCQl7CisJ CQkJLm5hbWUgPSAiUEFMLUJHIiwKKwkJCQkuaWQgPSBWNEwyX1NURF9QQUxfQkcsCisJCQl9LCB7 CisJCQkJLm5hbWUgPSAiUEFMLURLIiwKKwkJCQkuaWQgPSBWNEwyX1NURF9QQUxfREssCisJCQl9 LCB7CisJCQkJLm5hbWUgPSAiUEFMLUkiLAorCQkJCS5pZCA9IFY0TDJfU1REX1BBTF9JLAorCQkJ fSwgeworCQkJCS5uYW1lID0gIlBBTC1NIiwKKwkJCQkuaWQgPSBWNEwyX1NURF9QQUxfTSwKKwkJ fSB9LAorCX0sCisJW0VNMjgyMF9CT0FSRF9ETElOS19VU0JfVFZdID0geworCQkubmFtZSAgICAg ICAgID0gIkQtTGluayBEVUItVDIxMCBUViBUdW5lciIsCisJCS52Y2hhbm5lbHMgICAgPSAzLAor CQkubm9ybSAgICAgICAgID0gVjRMMl9TVERfUEFMX0JHLAorCQkudHVuZXJfdHlwZSAgID0gVFVO RVJfTEdfUEFMX05FV19UQVBDLAorCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5ULAor CQkuaGFzX3R1bmVyICAgID0gMSwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTEzLAor CQkuZGV2X21vZGVzICAgID0gRU0yOFhYX1ZJREVPLAorCQkuaW5wdXQgICAgICAgICAgPSB7ewor CQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IFNB QTcxMTVfQ09NUE9TSVRFMiwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0sIHsKKwkJCS50eXBlICAg ICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBP U0lURTAsCisJCQkuYW11eCAgICAgPSAxLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhf Vk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSBTQUE3MTE1X1NWSURFTzMsCisJCQkuYW11eCAg ICAgPSAxLAorCQl9IH0sCisJCS50dm5vcm1zCT0geworCQkJeworCQkJCS5uYW1lID0gIlBBTC1C RyIsCisJCQkJLmlkID0gVjRMMl9TVERfUEFMX0JHLAorCQkJfSwgeworCQkJCS5uYW1lID0gIlBB TC1ESyIsCisJCQkJLmlkID0gVjRMMl9TVERfUEFMX0RLLAorCQkJfSwgeworCQkJCS5uYW1lID0g IlBBTC1JIiwKKwkJCQkuaWQgPSBWNEwyX1NURF9QQUxfSSwKKwkJCX0sIHsKKwkJCQkubmFtZSA9 ICJQQUwtTSIsCisJCQkJLmlkID0gVjRMMl9TVERfUEFMX00sCisJCX0gfSwKKwl9LAorCVtFTTI4 MjFfQk9BUkRfUFJPTElOS19QTEFZVFZfVVNCMl0gPSB7CisJCS5uYW1lICAgICAgICAgPSAiU0lJ RyBBVlR1bmVyLVBWUi9Qcm9saW5rIFBsYXlUViBVU0IgMi4wIiwKKwkJLnZjaGFubmVscyAgICA9 IDMsCisJCS5ub3JtICAgICAgICAgPSBWNEwyX1NURF9QQUxfQkcsCisJCS50dW5lcl90eXBlICAg PSBUVU5FUl9MR19QQUxfTkVXX1RBUEMsIC8qIHVua25vd24/ICovCisJCS50ZGE5ODg3X2NvbmYg PSBUREE5ODg3X1BSRVNFTlQsIC8qIHVua25vd24/ICovCisJCS5oYXNfdHVuZXIgICAgPSAxLAor CQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMTMsCisJCS5kZXZfbW9kZXMgICAgPSBFTTI4 WFhfVklERU8sCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgICAgPSBFTTI4WFhf Vk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUyLAorCQkJ LmFtdXggICAgID0gMSwKKwkJCS5hbWl4ICAgICA9IEVNMjhYWF9NSVhfTk9UT1VDSCwKKwkJfSwg eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9 IFNBQTcxMTVfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IDIsCisJCQkuYW1peCAgICAgPSBF TTI4WFhfTUlYX0xJTkVfSU4sCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NW SURFTywKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKKwkJCS5hbXV4ICAgICA9IDEs CisJCQkuYW1peCAgICAgPSBFTTI4WFhfTUlYX0xJTkVfSU4sCisJCX19LAorCQkudHZub3Jtcwk9 IHsKKwkJCXsKKwkJCQkubmFtZSA9ICJQQUwtQkciLAorCQkJCS5pZCA9IFY0TDJfU1REX1BBTF9C RywKKwkJCX0sIHsKKwkJCQkubmFtZSA9ICJQQUwtREsiLAorCQkJCS5pZCA9IFY0TDJfU1REX1BB TF9ESywKKwkJCX0sIHsKKwkJCQkubmFtZSA9ICJQQUwtSSIsCisJCQkJLmlkID0gVjRMMl9TVERf UEFMX0ksCisJCQl9LCB7CisJCQkJLm5hbWUgPSAiUEFMLU0iLAorCQkJCS5pZCA9IFY0TDJfU1RE X1BBTF9NLAorCQl9IH0sCisJfSwKKwlbRU0yODIwX0JPQVJEX0hFUkNVTEVTX1NNQVJUX1RWX1VT QjJdID0geworCQkubmFtZSAgICAgICAgID0gIkhlcmN1bGVzIFNtYXJ0IFRWIFVTQiAyLjAiLAor CQkudmNoYW5uZWxzICAgID0gMywKKwkJLm5vcm0gICAgICAgICA9IFY0TDJfU1REX1BBTF9CRywK KwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywKKwkJLnRkYTk4ODdfY29u ZiA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmhhc190dW5lciAgICA9IDEsCisJCS5kZWNvZGVyICAg ICAgPSBFTTI4WFhfU0FBNzExMywKKwkJLmRldl9tb2RlcyAgICA9IEVNMjhYWF9WSURFTywKKwkJ LmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJ T04sCisJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTIsCisJCQkuYW11eCAgICAgPSAx LAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZt dXggICAgID0gU0FBNzExNV9DT01QT1NJVEUwLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSwgewor CQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gU0FBNzEx NV9TVklERU8zLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSB9LAorCQkudHZub3Jtcwk9IHsKKwkJ CXsKKwkJCQkubmFtZSA9ICJQQUwtQkciLAorCQkJCS5pZCA9IFY0TDJfU1REX1BBTF9CRywKKwkJ CX0sIHsKKwkJCQkubmFtZSA9ICJQQUwtREsiLAorCQkJCS5pZCA9IFY0TDJfU1REX1BBTF9ESywK KwkJCX0sIHsKKwkJCQkubmFtZSA9ICJQQUwtSSIsCisJCQkJLmlkID0gVjRMMl9TVERfUEFMX0ks CisJCQl9LCB7CisJCQkJLm5hbWUgPSAiUEFMLU0iLAorCQkJCS5pZCA9IFY0TDJfU1REX1BBTF9N LAorCQl9IH0sCisJfSwKKwlbRU0yODIwX0JPQVJEX1BJTk5BQ0xFX1VTQl8yXSA9IHsKKwkJLm5h bWUgICAgICAgICA9ICJQaW5uYWNsZSBQQ1RWIFVTQiAyIiwKKwkJLnZjaGFubmVscyAgICA9IDMs CisJCS5ub3JtICAgICAgICAgPSBWNEwyX1NURF9QQUxfQkcsCisJCS50dW5lcl90eXBlICAgPSBU VU5FUl9MR19QQUxfTkVXX1RBUEMsCisJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQs CisJCS5oYXNfdHVuZXIgICAgPSAxLAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMTMs CisJCS5kZXZfbW9kZXMgICAgPSBFTTI4WFhfVklERU8sCisJCS5pbnB1dCAgICAgICAgICA9IHt7 CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0g U0FBNzExNV9DT01QT1NJVEUyLAorCQkJLmFtdXggICAgID0gMCwKKwkJfSwgeworCQkJLnR5cGUg ICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09N UE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhY WF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKKwkJCS5hbXV4 ICAgICA9IDEsCisJCX0gfSwKKwkJLnR2bm9ybXMJPSB7CisJCQl7CisJCQkJLm5hbWUgPSAiUEFM LUJHIiwKKwkJCQkuaWQgPSBWNEwyX1NURF9QQUxfQkcsCisJCQl9LCB7CisJCQkJLm5hbWUgPSAi UEFMLURLIiwKKwkJCQkuaWQgPSBWNEwyX1NURF9QQUxfREssCisJCQl9LCB7CisJCQkJLm5hbWUg PSAiUEFMLUkiLAorCisJCQkJLmlkID0gVjRMMl9TVERfUEFMX0ksCisJCQl9LCB7CisJCQkJLm5h bWUgPSAiUEFMLU0iLAorCisJCQkJLmlkID0gVjRMMl9TVERfUEFMX00sCisJCQl9LCB7CisJCQkJ Lm5hbWUgPSAiTlRTQyIsCisKKwkJCQkuaWQgPSBWNEwyX1NURF9OVFNDLAorCQl9IH0sCisJfSwK KwlbRU0yODIwX0JPQVJEX1BJTk5BQ0xFX1VTQl8yX0ZNMTIxNk1FXSA9IHsKKwkJLm5hbWUgICAg ICAgICA9ICJQaW5uYWNsZSBQQ1RWIFVTQiAyIChQaGlsaXBzIEZNMTIxNk1FKSIsCisJCS52Y2hh bm5lbHMgICAgPSAzLAorCQkubm9ybSAgICAgICAgID0gVjRMMl9TVERfUEFMX0JHLAorCQkudHVu ZXJfdHlwZSAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsCisJCS50ZGE5ODg3X2NvbmYg PSBUREE5ODg3X1BSRVNFTlQsCisJCS5oYXNfdHVuZXIgICAgPSAxLAorCQkuZGVjb2RlciAgICAg ID0gRU0yOFhYX1NBQTcxMTMsCisJCS5kZXZfbW9kZXMgICAgPSBFTTI4WFhfVklERU8sCisJCS5p bnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9O LAorCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUyLAorCQkJLmFtdXggICAgID0gMCwK KwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4 ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0sIHsKKwkJ CS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVf U1ZJREVPMywKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0gfSwKKwkJLnR2bm9ybXMgICAgICAgID0g eworCQkJeworCQkJCS5uYW1lID0gIlBBTC1CRyIsCisJCQkJLmlkID0gVjRMMl9TVERfUEFMX0JH LAorCQkJfSwgeworCQkJCS5uYW1lID0gIlBBTC1ESyIsCisJCQkJLmlkID0gVjRMMl9TVERfUEFM X0RLLAorCQkJfSwgeworCQkJCS5uYW1lID0gIlBBTC1JIiwKKwkJCQkuaWQgPSBWNEwyX1NURF9Q QUxfSSwKKwkJCX0sIHsKKwkJCQkubmFtZSA9ICJQQUwtTSIsCisJCQkJLmlkID0gVjRMMl9TVERf UEFMX00sCisJCQl9LCB7CisJCQkJLm5hbWUgPSAiTlRTQyIsCisJCQkJLmlkID0gVjRMMl9TVERf TlRTQywKKwkJCX0sIHsKKwkJCQkubmFtZSA9ICJTRUNBTS1ESyIsCisJCQkJLmlkID0gVjRMMl9T VERfU0VDQU1fREssCisJCQl9IH0sCisJfSwKKwlbRU0yODIwX0JPQVJEX0hBVVBQQVVHRV9XSU5U Vl9VU0JfMl9SMl0gPSB7CisJCS5uYW1lICAgICAgICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiAy IChSMikiLAorCQkudmNoYW5uZWxzICAgID0gMywKKwkJLm5vcm0gICAgICAgICA9IFY0TDJfU1RE X1BBTF9CRywKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0FCU0VOVCwKKwkJLnRkYTk4ODdfY29u ZiA9IFREQTk4ODdfUFJFU0VOVHxUREE5ODg3X1BPUlQxX0FDVElWRXxUREE5ODg3X1BPUlQyX0FD VElWRSwKKwkJLmhhc190dW5lciAgICA9IDEsCisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQ NTE1MCwKKwkJLmhhc19tc3AzNHh4ICA9IDEsCisJCS5kZXZfbW9kZXMgICAgPSBFTTI4WFhfVklE RU8sCisJCS8qRklYTUU6IFMtVmlkZW8gbm90IHRlc3RlZCAqLworCQkuaW5wdXQgICAgICAgICAg PSB7eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAg ICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IDYsCisJCX0sIHsKKwkJCS50 eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfU1ZJ REVPLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSB9LAorCQkudHZub3Jtcwk9IHt7CisJCQkJLm5h bWUgPSAiUEFMLUJHIiwKKwkJCQkuaWQgPSBWNEwyX1NURF9QQUxfQkcsCisJCQl9LCB7CisJCQkJ Lm5hbWUgPSAiTlRTQyIsCisJCQkJLmlkID0gVjRMMl9TVERfTlRTQywKKwkJfSB9LAorCX0sCisJ W0VNMjgyMF9CT0FSRF9IQVVQUEFVR0VfV0lOVFZfVVNCXzJdID0geworCQkubmFtZSAgICAgICAg ID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgMiIsCisJCS52Y2hhbm5lbHMgICAgPSAzLAorCQkubm9y bSAgICAgICAgID0gVjRMMl9TVERfTlRTQywKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0FCU0VO VCwKKwkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVHxUREE5ODg3X1BPUlQxX0FDVElW RXxUREE5ODg3X1BPUlQyX0FDVElWRSwKKwkJLmhhc190dW5lciAgICA9IDEsCisJCS5kZWNvZGVy ICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKKwkJLmhhc19tc3AzNHh4ICA9IDEsCisJCS5kZXZfbW9k ZXMgICAgPSBFTTI4WFhfVklERU8sCisJCS8qRklYTUU6IFMtVmlkZW8gbm90IHRlc3RlZCAqLwor CQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJ U0lPTiwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9 IDYsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4 ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMSwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0gfSwKKwkJ LnR2bm9ybXMJPSB7eworCQkJCS5uYW1lID0gIk5UU0MiLAorCisJCQkJLmlkID0gVjRMMl9TVERf TlRTQywKKwkJfSB9LAorCX0sCisJW0VNMjg3MF9CT0FSRF9IQVVQUEFVR0VfV0lOVFZfVVNCXzJf UjJdID0geworCQkubmFtZSAgICAgICAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgMiBSMiIsCisJ CS52Y2hhbm5lbHMgICAgPSAzLAorCQkubm9ybSAgICAgICAgID0gVjRMMl9TVERfTlRTQ19NLAor CQkudHVuZXJfdHlwZSAgID0gVFVORVJfWENFSVZFX1hDMzAyOCwKKwkJLnR1bmVyX2FkZHIgICA9 IDB4YzIsCisJCS5oYXNfdHVuZXIgICAgPSAxLAorCQkuaGFzX2ludHR1bmVyID0gMSwKKwkJLmRl Y29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAorCQkuZGV2X21vZGVzICAgID0gRU0yOFhYX1ZJ REVPLAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhf VEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKKwkJCS5hbXV4 ICAgICA9IDYsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEs CisJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTEsCisJCQkuYW11eCAgICAgPSAxLAor CQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgICAg PSBUVlA1MTUwX1NWSURFTywKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0gfSwKKwkJLm1hbnVhbF9n cGlvCT0gMSwKKwkJLmdwaW9fcmVncyAJPSBFRVRJX0RFRkFVTFRfR1BJTywKKwkJLnR2bm9ybXMJ PSBFRVRJX1hDMzAyOF9ERUZBVUxUX0FOQUxPRywKKwkJLmR2Ym5vcm1zCT0gRUVUSV9YQzMwMjhf REVGQVVMVF9EVkJULAorCX0sCisJW0VNMjgyMV9CT0FSRF9TVVBFUkNPTVBfVVNCXzJdID0gewor CQkubmFtZSAgICAgICAgID0gIlN1cGVyY29tcCBVU0IgMi4wIFRWIiwKKwkJLnZjaGFubmVscyAg ICA9IDMsCisJCS5ub3JtICAgICAgICAgPSBWNEwyX1NURF9QQUxfQkcsCisJCS5oYXNfdHVuZXIg ICAgPSAxLAorCQkudHVuZXJfdHlwZSAgID0gVFVORVJfUEhJTElQU19GTTEyMzZfTUszLAorCQku dGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5UfFREQTk4ODdfUE9SVDFfQUNUSVZFfFREQTk4 ODdfUE9SVDJfQUNUSVZFLAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMTMsCisJCS5k ZXZfbW9kZXMgICAgPSBFTTI4WFhfVklERU8sCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQku dHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gU0FBNzEx NV9DT01QT1NJVEUyLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSwgeworCQkJLnR5cGUgICAgID0g RU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRF MCwKKwkJCS5hbXV4ICAgICA9IDAsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVY X1NWSURFTywKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKKwkJCS5hbXV4ICAgICA9 IDEsCisJCX0gfSwKKwkJLnR2bm9ybXMJPSB7CisJCQl7CisJCQkJLm5hbWUgPSAiUEFMLUJHIiwK KwkJCQkuaWQgPSBWNEwyX1NURF9QQUxfQkcsCisJCQl9LCB7CisJCQkJLm5hbWUgPSAiUEFMLURL IiwKKwkJCQkuaWQgPSBWNEwyX1NURF9QQUxfREssCisJCQl9LCB7CisJCQkJLm5hbWUgPSAiUEFM LUkiLAorCQkJCS5pZCA9IFY0TDJfU1REX1BBTF9JLAorCQkJfSwgeworCQkJCS5uYW1lID0gIlBB TC1NIiwKKwkJCQkuaWQgPSBWNEwyX1NURF9QQUxfTSwKKwkJfSB9LAorCX0sCisJW0VNMjg4MF9C T0FSRF9IQVVQUEFVR0VfV0lOVFZfSFZSXzkwMF0gPSB7CisJCS5uYW1lICAgICAgICAgPSAiSGF1 cHBhdWdlIFdpblRWIEhWUiA5MDAiLAorCQkudmNoYW5uZWxzICAgID0gMywKKwkJLm5vcm0gICAg ICAgICA9IFY0TDJfU1REX1BBTF9CRywKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1hDRUlWRV9Y QzMwMjgsCisJCS50dW5lcl9hZGRyICAgPSAweGMyLAorCQkuaGFzX3R1bmVyICAgID0gMSwKKwkJ Lmhhc19pbnR0dW5lciA9IDEsCisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKKwkJ LmRldl9tb2RlcyAgICA9IEVNMjhYWF9WSURFTyB8IEVNMjhYWF9WQkkgfCBFTTI4WFhfRFZCVCwK KwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVW SVNJT04sCisJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTAsCisJCQkuYW11eCAgICAg PSAwLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJ LnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUxLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSwg eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gVFZQ NTE1MF9TVklERU8sCisJCQkuYW11eCAgICAgPSAxLAorCQl9IH0sCisJCS5tYW51YWxfZ3Bpbwk9 IDEsCisJCS5ncGlvX3JlZ3MgCT0gRUVUSV9ERUZBVUxUX0dQSU8sCisJCS50dm5vcm1zCT0gRUVU SV9YQzMwMjhfREVGQVVMVF9BTkFMT0csCisJCS5kdmJub3Jtcwk9IEVFVElfWEMzMDI4X0RFRkFV TFRfRFZCVAorCX0sCisJW0VNMjg4M19CT0FSRF9QSU5OQUNMRV9QQ1RWX0hEX1BST10gPSB7CisJ CS5uYW1lICAgICAgICAgPSAiUGlubmFjbGUgUENUViBIRCBQcm8iLAorCQkudmNoYW5uZWxzICAg ID0gMywKKwkJLm5vcm0gICAgICAgICA9IFY0TDJfU1REX05UU0NfTSwKKwkJLnR1bmVyX3R5cGUg ICA9IFRVTkVSX1hDRUlWRV9YQzMwMjgsCisJCS5oYXNfdHVuZXIgICAgPSAxLAorCQkuaGFzX2lu dHR1bmVyID0gMSwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAorCQkuZGV2X21v ZGVzICAgID0gRU0yOFhYX1ZJREVPIHwgRU0yOFhYX0FVRElPIHwgRU0yOFhYX1ZCSSB8IEVNMjhY WF9BVFNDLAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZN VVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKKwkJCS5h bXV4ICAgICA9IDAsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lU RTEsCisJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTEsCisJCQkuYW11eCAgICAgPSAx LAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAg ICAgPSBUVlA1MTUwX1NWSURFTywKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0gfSwKKwkJLm1hbnVh bF9ncGlvCT0gMSwKKwkJLmdwaW9fcmVncyAJPSBFRVRJX0RFRkFVTFRfR1BJTywKKwkJLnR2bm9y bXMJPSBFRVRJX1hDMzAyOF9ERUZBVUxUX0FOQUxPRywKKwkJLmF0c2Nub3Jtcwk9IEVFVElfWEMz MDI4X0RFRkFVTFRfQVRTQywKKwkJLnFhbW5vcm1zCT0gRUVUSV9YQzMwMjhfREVGQVVMVF9RQU0s CisJfSwKKwlbRU0yODgzX0JPQVJEX0tXT1JMRF9IWUJSSURfRjMwNl0gPSB7CisJCS5uYW1lICAg ICAgICAgPSAiS1dvcmxkIFBsdXNUViBGMzA2IiwKKwkJLmVtX3R5cGUgICAgICA9IEVNMjg4MywK KwkJLnZjaGFubmVscyAgICA9IDMsCisJCS5ub3JtICAgICAgICAgPSBWNEwyX1NURF9OVFNDX00s CisJCS50dW5lcl90eXBlICAgPSBUVU5FUl9YQ0VJVkVfWEMzMDI4LAorCQkuaGFzX2ludHR1bmVy ID0gMSwKKwkJLmhhc190dW5lciAgICA9IDEsCisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQ NTE1MCwKKwkJLmRldl9tb2RlcyAgICA9IEVNMjhYWF9WSURFTyB8IEVNMjhYWF9BVURJTyB8IEVN MjhYWF9WQkksCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgICAgPSBFTTI4WFhf Vk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLAorCQkJ LmFtdXggICAgID0gMCwKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9T SVRFMSwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMSwKKwkJCS5hbXV4ICAgICA9 IDEsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4 ICAgICA9IFRWUDUxNTBfU1ZJREVPLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSB9LAorCQkubWFu dWFsX2dwaW8JPSAxLAorCQkuZ3Bpb19yZWdzIAk9IEVFVElfREVGQVVMVF9HUElPLAorCQkudHZu b3Jtcwk9IEVFVElfWEMzMDI4X0RFRkFVTFRfQU5BTE9HLAorCX0sCisJW0VNMjg4OF9CT0FSRF9L V09STERfSFlCUklEX0UzMjldID0geworCQkubmFtZQkgICAgICA9ICJLV29ybGQgMzI5dSIsCisJ CS5lbV90eXBlICAgICAgPSBFTTI4ODgsCisJCS52Y2hhbm5lbHMgICAgPSAzLAorCQkubm9ybQkg ICAgICA9IFY0TDJfU1REX05UU0NfTSwKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1hDRUlWRV9Y QzMwMjgsCisJCS5oYXNfaW50dHVuZXIgPSAxLAorCQkuaGFzX3R1bmVyICAgID0gMSwKKwkJLmRl Y29kZXIgICAgICA9IEVNMjhYWF9DWDI1ODQzLAorCQkuaXJfa2V5dGFiICAgID0gaXJfY29kZXNf ZW1fa3dvcmxkLAorCQkuaXJfZ2V0a2V5ICAgID0gZW0yODg4X2dldF9rZXlfZW1waWEsCisJCS5k ZXZfbW9kZXMgICAgPSBFTTI4WFhfVklERU8gfCBFTTI4WFhfVkJJIHwgRU0yOFhYX0RWQlQgfCBF TTI4WFhfQVVESU8gfCBFTTI4WFhfUkFESU8sCisJCS5wb3dlcnNhdmluZyAgPSAxLAorCQkuaW5w dXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwK KwkJCS52bXV4ICAgICA9IENYMjU4NDNfVEVMRVZJU0lPTiwKKwkJCS5hbXV4ICAgICA9IDAsCisJ CX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAg ICAgPSBDWDI1ODQzX0NPTVBPU0lURTEsCisJCQkuYW11eCAgICAgPSA0LAorCQl9LCB7CisJCQku dHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSBDWDI1ODQzX1NW SURFTywKKwkJCS5hbXV4ICAgICA9IDUsCisJCX0gfSwKKwkJLnR2bm9ybXMJPSBFRVRJX1hDMzAy OExfREVGQVVMVF9BTkFMT0csCisJCS5kdmJub3Jtcwk9IEVFVElfWEMzMDI4TF9ERUZBVUxUX0RW QlQsCisJCS5mbW5vcm1zCT0gRUVUSV9YQzMwMjhMX0RFRkFVTFRfRk0sCisJfSwKKwlbRU0yODg4 X0JPQVJEX0xJTkNPTE5fVFZfRk1dID0geworCQkubmFtZQkgICAgICA9ICJMaW5jb2xuIFRWIEZN IiwKKwkJLmVtX3R5cGUgICAgICA9IEVNMjg4OCwKKwkJLnZjaGFubmVscyAgICA9IDMsCisJCS5u b3JtCSAgICAgID0gVjRMMl9TVERfTlRTQ19NLAorCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWENF SVZFX1hDMzAyOCwKKwkJLmhhc19pbnR0dW5lciA9IDEsCisJCS5oYXNfdHVuZXIgICAgPSAxLAor CQkuZGVjb2RlciAgICAgID0gRU0yOFhYX0NYMjU4NDMsCisJCS5kZXZfbW9kZXMgICAgPSBFTTI4 WFhfVklERU8gfCBFTTI4WFhfVkJJIHwgRU0yOFhYX0FVRElPIHwgRU0yOFhYX1JBRElPLAorCQku cG93ZXJzYXZpbmcgID0gMSwKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgICA9 IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgICAgPSBDWDI1ODQzX1RFTEVWSVNJ T04sCisJCQkuYW11eCAgICAgPSAwLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1V WF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gQ1gyNTg0M19DT01QT1NJVEUxLAorCQkJLmFt dXggICAgID0gNCwKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAor CQkJLnZtdXggICAgID0gQ1gyNTg0M19TVklERU8sCisJCQkuYW11eCAgICAgPSA1LAorCQl9IH0s CisJCS50dm5vcm1zCT0gRUVUSV9YQzMwMjhMX0RFRkFVTFRfQU5BTE9HLAorCQkuZm1ub3Jtcwk9 IEVFVElfWEMzMDI4TF9ERUZBVUxUX0ZNLAorCX0sCisJW0VNMjg4M19CT0FSRF9LV09STERfSFlC UklEX0UzMjNdID0geworCQkubmFtZQkgICAgICA9ICJLV29ybGQgRTMyMyIsCisJCS52Y2hhbm5l bHMgICAgPSAzLAorCQkubm9ybQkgICAgICA9IFY0TDJfU1REX05UU0NfTSwKKwkJLnR1bmVyX3R5 cGUgICA9IFRVTkVSX1hDRUlWRV9YQzMwMjgsCisJCS5oYXNfaW50dHVuZXIgPSAxLAorCQkuaGFz X3R1bmVyICAgID0gMSwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAorCQkuZGV2 X21vZGVzICAgID0gRU0yOFhYX1ZJREVPIHwgRU0yOFhYX0FVRElPIHwgRU0yOFhYX1ZCSSB8IEVN MjhYWF9EVkJULAorCQkuaW5wdXQgICAgICAgID0ge3sKKwkJCS50eXBlICAgICA9IEVNMjhYWF9W TVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTAsCisJCQku YW11eCAgICAgPSAwLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJ VEUxLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUxLAorCQkJLmFtdXggICAgID0g MSwKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXgg ICAgID0gVFZQNTE1MF9TVklERU8sCisJCQkuYW11eCAgICAgPSAxLAorCQl9IH0sCisJCS5tYW51 YWxfZ3Bpbwk9IDEsCisJCS5ncGlvX3JlZ3MgCT0gRUVUSV9ERUZBVUxUX0dQSU8sCisJCS50dm5v cm1zCT0gRUVUSV9YQzMwMjhfREVGQVVMVF9BTkFMT0csCisJCS5kdmJub3Jtcwk9IEVFVElfWEMz MDI4X0RFRkFVTFRfRFZCVCwKKwkJLmZtbm9ybXMJPSBFRVRJX1hDMzAyOF9ERUZBVUxUX0ZNLAor CX0sCisJW0VNMjg4M19CT0FSRF9LV09STERfSFlCUklEX0EzMTZdID0geworCQkubmFtZSAgICAg ICAgID0gIktXb3JsZCBQbHVzVFYgSEQgSHlicmlkIDMzMCIsCisJCS52Y2hhbm5lbHMgICAgPSAz LAorCQkubm9ybSAgICAgICAgID0gVjRMMl9TVERfTlRTQ19NLAorCQkudHVuZXJfdHlwZSAgID0g VFVORVJfWENFSVZFX1hDMzAyOCwKKwkJLmhhc19pbnR0dW5lciA9IDEsCisJCS5oYXNfdHVuZXIg ICAgPSAxLAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCisJCS5kZXZfbW9kZXMg ICAgPSBFTTI4WFhfVklERU8gfCBFTTI4WFhfQVVESU8gfCBFTTI4WFhfVkJJIHwgRU0yOFhYX0RW QlQsCisKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVY X1RFTEVWSVNJT04sCisJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTAsCisJCQkuYW11 eCAgICAgPSAwLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUx LAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUxLAorCQkJLmFtdXggICAgID0gMSwK KwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAg ID0gVFZQNTE1MF9TVklERU8sCisJCQkuYW11eCAgICAgPSAxLAorCQl9IH0sCisKKwkJLm1hbnVh bF9ncGlvCT0gMSwKKwkJLmdwaW9fcmVncyAJPSBFRVRJX0RFRkFVTFRfR1BJTywKKwkJLnR2bm9y bXMJPSBFRVRJX1hDMzAyOF9ERUZBVUxUX0FOQUxPRywKKwkJLmR2Ym5vcm1zCT0gRUVUSV9YQzMw MjhfREVGQVVMVF9EVkJULAorCX0sCisJW0VNMjg4M19CT0FSRF9IQVVQUEFVR0VfV0lOVFZfSFZS Xzk1MF0gPSB7CisJCS5uYW1lICAgICAgICAgPSAiSGF1cHBhdWdlIFdpblRWIEhWUiA5NTAiLAor CQkudmNoYW5uZWxzICAgID0gMywKKwkJLm5vcm0gICAgICAgICA9IFY0TDJfU1REX05UU0NfTSwK KwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1hDRUlWRV9YQzMwMjgsCisJCS5oYXNfdHVuZXIgICAg PSAxLAorCQkuaGFzX2ludHR1bmVyID0gMSwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1 MTUwLAorCQkuZGV2X21vZGVzICAgID0gRU0yOFhYX1ZJREVPIHwgRU0yOFhYX0FVRElPIHwgRU0y OFhYX1ZCSSB8IEVNMjhYWF9BVFNDLAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUg ICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09N UE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IDAsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhY WF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTEsCisJ CQkuYW11eCAgICAgPSAxLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklE RU8sCisJCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKKwkJCS5hbXV4ICAgICA9IDEsCisJ CX0gfSwKKwkJLm1hbnVhbF9ncGlvCT0gMSwKKwkJLmdwaW9fcmVncyAJPSBFRVRJX0RFRkFVTFRf R1BJTywKKwkJLnR2bm9ybXMJPSBFRVRJX1hDMzAyOF9ERUZBVUxUX0FOQUxPRywKKwkJLmF0c2Nu b3Jtcwk9IEVFVElfWEMzMDI4X0RFRkFVTFRfQVRTQywKKwkJLnFhbW5vcm1zCT0gRUVUSV9YQzMw MjhfREVGQVVMVF9RQU0sCisJfSwKKwlbRU0yODgwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJf OTAwX1IyXSA9IHsKKwkJLm5hbWUgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYgSFZSIChCMkMw KSIsCisJCS52Y2hhbm5lbHMgICAgPSAzLAorCQkubm9ybSAgICAgICAgID0gVjRMMl9TVERfUEFM X0JHLAorCQkuaGFzX2ludHR1bmVyID0gMSwKKwkJLmhhc190dW5lciAgICA9IDEsCisJCS50dW5l cl90eXBlICAgPSBUVU5FUl9YQ0VJVkVfWEMzMDI4LAorCQkudHVuZXJfYWRkciAgID0gMHhjMiwK KwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAorCQkuaXJfa2V5dGFiICAgID0gaXJf Y29kZXNfaGF1cHBhdWdlX25ld191LAorCQkuaXJfZ2V0a2V5ICAgID0gZW0yODgwX2dldF9rZXlf ZW1waWEsCisJCS5kZXZfbW9kZXMgICAgPSBFTTI4WFhfVklERU8gfCBFTTI4WFhfQVVESU8gfCBF TTI4WFhfVkJJIHwgRU0yOFhYX0RWQlQsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlw ZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9D T01QT1NJVEUwLAorCQkJLmFtdXggICAgID0gMCwKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0y OFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMSwK KwkJCS5hbXV4ICAgICA9IDEsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NW SURFTywKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfU1ZJREVPLAorCQkJLmFtdXggICAgID0gMSwK KwkJfSB9LAorCQkubWFudWFsX2dwaW8JPSAxLAorCQkuZ3Bpb19yZWdzIAk9IEVFVElfRFJYMzk3 NURfR1BJTywKKwkJLnR2bm9ybXMJPSBFRVRJX1hDMzAyOF9ERUZBVUxUX0FOQUxPRywKKwkJLmR2 Ym5vcm1zCT0gRUVUSV9YQzMwMjhfREVGQVVMVF9EVkJULAorCX0sCisJW0VNMjg2MF9CT0FSRF9U RVJSQVRFQ19IWUJSSURfWFNdID0geworCQkubmFtZSAgICAgICAgID0gIlRlcnJhdGVjIENpbmVy Z3kgQSBIeWJyaWQgWFMiLAorCQkudmNoYW5uZWxzICAgID0gMywKKwkJLm5vcm0gICAgICAgICA9 IFY0TDJfU1REX1BBTF9CRywKKwkJLmhhc190dW5lciAgICA9IDEsCisJCS5oYXNfaW50dHVuZXIg PSAxLAorCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWENFSVZFX1hDMzAyOCwKKwkJLmRlY29kZXIg ICAgICA9IEVNMjhYWF9UVlA1MTUwLAorCQkuaXJfa2V5dGFiICAgID0gaXJfY29kZXNfZW1fdGVy cmF0ZWMyLAorCQkuaXJfZ2V0a2V5ICAgID0gZW0yODgwX2dldF9rZXlfdGVycmF0ZWMsCisJCS5k ZXZfbW9kZXMgICAgPSBFTTI4WFhfVklERU8gfCBFTTI4WFhfVkJJLAorCQkuaW5wdXQgICAgICAg ICAgPSB7eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4 ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IDAsCisJCX0sIHsKKwkJ CS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSBUVlA1 MTUwX0NPTVBPU0lURTEsCisJCQkuYW11eCAgICAgPSAxLAorCQl9LCB7CisJCQkudHlwZSAgICAg PSBFTTI4WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKKwkJ CS5hbXV4ICAgICA9IDEsCisJCX0gfSwKKwkJLm1hbnVhbF9ncGlvCT0gMSwKKwkJLmdwaW9fcmVn cyAJPSBFRVRJX0RFRkFVTFRfR1BJTywKKwkJLnR2bm9ybXMJPSBFRVRJX1hDMzAyOF9ERUZBVUxU X0FOQUxPRywKKwl9LAorCVtFTTI4ODBfQk9BUkRfVEVSUkFURUNfSFlCUklEX1hTXSA9IHsKKwkJ Lm5hbWUgICAgICAgICA9ICJUZXJyYXRlYyBIeWJyaWQgWFMiLAorCQkudmNoYW5uZWxzICAgID0g MywKKwkJLmhhc19pbnR0dW5lciA9IDEsCisJCS5oYXNfdHVuZXIgICAgPSAxLAorCQkubm9ybSAg ICAgICAgID0gVjRMMl9TVERfUEFMX0JHLAorCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWENFSVZF X1hDMzAyOCwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAorCQkuaXJfa2V5dGFi ICAgID0gaXJfY29kZXNfZW1fdGVycmF0ZWMyLAorCQkuaXJfZ2V0a2V5ICAgID0gZW0yODgwX2dl dF9rZXlfdGVycmF0ZWMsCisJCS5kZXZfbW9kZXMgICAgPSBFTTI4WFhfVklERU8gfCBFTTI4WFhf VkJJIHwgRU0yOFhYX0RWQlQsCisJCS5wb3dlcnNhdmluZyAgPSAxLAorCQkuaW5wdXQgICAgICAg ICAgPSB7eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4 ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IDAsCisJCX0sIHsKKwkJ CS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSBUVlA1 MTUwX0NPTVBPU0lURTEsCisJCQkuYW11eCAgICAgPSAxLAorCQl9LCB7CisJCQkudHlwZSAgICAg PSBFTTI4WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKKwkJ CS5hbXV4ICAgICA9IDEsCisJCX0gfSwKKwkJLm1hbnVhbF9ncGlvCT0gMSwKKwkJLmdwaW9fcmVn cyAJPSBFRVRJX0RFRkFVTFRfR1BJTywKKwkJLnR2bm9ybXMJPSBFRVRJX1hDMzAyOF9ERUZBVUxU X0FOQUxPRywKKwkJLmR2Ym5vcm1zCT0gRUVUSV9YQzMwMjhfREVGQVVMVF9EVkJULAorCX0sCisJ W0VNMjg2MV9CT0FSRF9LV09STERfUFZSVFZfMzAwVV0gPSB7CisJCS5uYW1lCSAgICAgID0gIktX b3JsZCBQVlJUViAzMDBVIiwKKwkJLnZjaGFubmVscyAgICA9IDMsCisJCS5ub3JtICAgICAgICAg PSBWNEwyX1NURF9OVFNDX00sCisJCS5oYXNfdHVuZXIgICAgPSAxLAorCQkuaGFzX2ludHR1bmVy ID0gMSwKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1hDRUlWRV9YQzMwMjgsCisJCS5kZWNvZGVy ICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKKwkJLmRldl9tb2RlcyAgICA9IEVNMjhYWF9WSURFTyB8 IEVNMjhYWF9WQkkgfCBFTTI4WFhfQVVESU8yLAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJ LnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IFRWUDUx NTBfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IDAsCisJCX0sIHsKKwkJCS50eXBlICAgICA9 IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lU RTEsCisJCQkuYW11eCAgICAgPSAxLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1V WF9TVklERU8sCisJCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKKwkJCS5hbXV4ICAgICA9 IDEsCisJCX0gfSwKKwkJLm1hbnVhbF9ncGlvCT0gMSwKKwkJLmdwaW9fcmVncyAJPSBFRVRJX0RF RkFVTFRfR1BJTywKKwkJLnR2bm9ybXMJPSBFRVRJX1hDMzAyOF9ERUZBVUxUX0FOQUxPRywKKwl9 LAorCVtFTTI4ODBfQk9BUkRfS1dPUkxEX0RWQl8zMTBVXSA9IHsKKwkJLm5hbWUJICAgICAgPSAi S1dvcmxkIERWQi1UIDMxMFUiLAorCQkudmNoYW5uZWxzICAgID0gMywKKwkJLm5vcm0gICAgICAg ICA9IFY0TDJfU1REX1BBTF9CRywKKwkJLmhhc190dW5lciAgICA9IDEsCisJCS5oYXNfaW50dHVu ZXIgPSAxLAorCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWENFSVZFX1hDMzAyOCwKKwkJLmRlY29k ZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAorCQkuZGV2X21vZGVzICAgID0gRU0yOFhYX1ZJREVP IHwgRU0yOFhYX1ZCSSB8IEVNMjhYWF9EVkJULAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJ LnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IFRWUDUx NTBfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IDAsCisJCX0sIHsKKwkJCS50eXBlICAgICA9 IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lU RTEsCisJCQkuYW11eCAgICAgPSAxLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1V WF9TVklERU8sCisJCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKKwkJCS5hbXV4ICAgICA9 IDEsCisJCX0gfSwKKwkJLm1hbnVhbF9ncGlvCT0gMSwKKwkJLmdwaW9fcmVncyAJPSBFRVRJX0RF RkFVTFRfR1BJTywKKwkJLnR2bm9ybXMJPSBFRVRJX1hDMzAyOF9ERUZBVUxUX0FOQUxPRywKKwkJ LmR2Ym5vcm1zCT0gRUVUSV9YQzMwMjhfREVGQVVMVF9EVkJULAorCX0sCisJW0VNMjg4MF9CT0FS RF9LV09STERfRFZCXzMwNVVdID0geworCQkubmFtZQkgICAgICA9ICJLV29ybGQgRFZCLVQgMzA1 VSIsCisJCS52Y2hhbm5lbHMgICAgPSAzLAorCQkubm9ybSAgICAgICAgID0gVjRMMl9TVERfUEFM X0JHLAorCQkuaGFzX3R1bmVyICAgID0gMSwKKwkJLmhhc19pbnR0dW5lciA9IDEsCisJCS50dW5l cl90eXBlICAgPSBUVU5FUl9YQ0VJVkVfWEMzMDI4LAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhY X1RWUDUxNTAsCisJCS5kZXZfbW9kZXMgICAgPSBFTTI4WFhfVklERU8gfCBFTTI4WFhfVkJJIHwg RU0yOFhYX0RWQlQsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgICAgPSBFTTI4 WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLAor CQkJLmFtdXggICAgID0gMCwKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09N UE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMSwKKwkJCS5hbXV4ICAg ICA9IDEsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52 bXV4ICAgICA9IFRWUDUxNTBfU1ZJREVPLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSB9LAorCQku bWFudWFsX2dwaW8JPSAxLAorCQkuZ3Bpb19yZWdzIAk9IEVFVElfREVGQVVMVF9HUElPLAorCQku dHZub3Jtcwk9IEVFVElfWEMzMDI4X0RFRkFVTFRfQU5BTE9HLAorCQkuZHZibm9ybXMJPSBFRVRJ X1hDMzAyOF9ERUZBVUxUX0RWQlQsCisJfSwKKwlbRU0yODgwX0JPQVJEX1RFUlJBVEVDX0hZQlJJ RF9YU19GUl0gPSB7CisJCS5uYW1lICAgICAgICAgPSAiVGVycmF0ZWMgSHlicmlkIFhTIFNlY2Ft IiwKKwkJLnZjaGFubmVscyAgICA9IDMsCisJCS5ub3JtICAgICAgICAgPSBWNEwyX1NURF9TRUNB TV9MLAorCQkuaGFzX3R1bmVyICAgID0gMSwKKwkJLmhhc19pbnR0dW5lciA9IDEsCisJCS5oYXNf bXNwMzR4eCAgPSAxLAorCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWENFSVZFX1hDMzAyOCwKKwkJ LmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAorCQkuZGV2X21vZGVzICAgID0gRU0yOFhY X1ZJREVPIHwgRU0yOFhYX1ZCSSB8IEVNMjhYWF9EVkJULAorCQkuaW5wdXQgICAgICAgICAgPSB7 eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9 IFRWUDUxNTBfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IDAsCisJCX0sIHsKKwkJCS50eXBl ICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSBUVlA1MTUwX0NP TVBPU0lURTEsCisJCQkuYW11eCAgICAgPSAxLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4 WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKKwkJCS5hbXV4 ICAgICA9IDEsCisJCX0gfSwKKwkJLm1hbnVhbF9ncGlvCT0gMSwKKwkJLmdwaW9fcmVncyAJPSBF RVRJX0RFRkFVTFRfR1BJTywKKwkJLnR2bm9ybXMJPSBFRVRJX1hDMzAyOF9ERUZBVUxUX0FOQUxP RywKKwkJLmR2Ym5vcm1zCT0gRUVUSV9YQzMwMjhfREVGQVVMVF9EVkJULAorCX0sCisJW0VNMjg4 Ml9CT0FSRF9URVJSQVRFQ19IWUJSSURfWFNdID0geworCQkubmFtZSAgICAgICAgID0gIkVtcGlh IEh5YnJpZCBBVFNDIChlbTI4ODIpIiwKKwkJLnZjaGFubmVscyAgICA9IDMsCisJCS5ub3JtICAg ICAgICAgPSBWNEwyX1NURF9QQUxfQkcsCisJCS5oYXNfdHVuZXIgICAgPSAxLAorCQkuaGFzX2lu dHR1bmVyID0gMSwKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1hDRUlWRV9YQzMwMjgsCisJCS5k ZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKKwkJLmlyX2tleXRhYiAgICA9IGlyX2NvZGVz X2VtX3RlcnJhdGVjMiwKKwkJLmlyX2dldGtleSAgICA9IGVtMjg4MF9nZXRfa2V5X3RlcnJhdGVj LCAKKwkJLmRldl9tb2RlcyAgICA9IEVNMjhYWF9WSURFTyB8IEVNMjhYWF9WQkkgfCBFTTI4WFhf RFZCVCB8IEVNMjhYWF9BVURJTywKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAg ICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBP U0lURTAsCisJCQkuYW11eCAgICAgPSAwLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhf Vk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUxLAorCQkJ LmFtdXggICAgID0gMSwKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVP LAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9TVklERU8sCisJCQkuYW11eCAgICAgPSAxLAorCQl9 IH0sCisJCS5tYW51YWxfZ3Bpbwk9IDEsCisJCS5ncGlvX3JlZ3MgCT0gRUVUSV9ERUZBVUxUX0dQ SU8sCisJCS50dm5vcm1zCT0gRUVUSV9YQzMwMjhfREVGQVVMVF9BTkFMT0csCisJCS5kdmJub3Jt cwk9IEVFVElfWEMzMDI4X0RFRkFVTFRfRFZCVCwKKwl9LAorCVtFTTI4ODNfQk9BUkRfVEVSUkFU RUNfSFlCUklEX1hTX0ZNXSA9IHsKKwkJLm5hbWUgICAgICAgICA9ICJUZXJyYXRlYyBIeWJyaWQg WFMgRk0gKGVtMjg4MykiLAorCQkuZW1fdHlwZSAgICAgID0gRU0yODgzLAorCQkudmNoYW5uZWxz ICAgID0gMywKKwkJLm5vcm0gICAgICAgICA9IFY0TDJfU1REX1BBTF9CRywKKwkJLmhhc19yYWRp byAgICA9IDEsCisJCS5oYXNfaW50dHVuZXIgPSAxLAorI2lmIDAKKwkJLnBvd2Vyc2F2aW5nICA9 IDEsCisjZW5kaWYKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1hDRUlWRV9YQzUwMDAsCisJCS5k ZWNvZGVyICAgICAgPSBFTTI4WFhfQ1gyNTg0MywKKwkJLmlyX2tleXRhYiAgICA9IGlyX2NvZGVz X2VtX3RlcnJhdGVjMiwKKwkJLmlyX2dldGtleSAgICA9IGVtMjg4MF9nZXRfa2V5X3RlcnJhdGVj LAorCQkuZGV2X21vZGVzICAgID0gRU0yOFhYX1ZJREVPIHwgRU0yOFhYX1ZCSSB8IEVNMjhYWF9E VkJUIHwgRU0yOFhYX0FVRElPIHwgRU0yOFhYX1JBRElPLAorCQkuaW5wdXQgICAgICAgICAgPSB7 eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9 IENYMjU4NDNfVEVMRVZJU0lPTiwKKwkJCS5hbXV4ICAgICA9IDAsCisJCX0sIHsKKwkJCS50eXBl ICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSBDWDI1ODQzX0NP TVBPU0lURTEsCisJCQkuYW11eCAgICAgPSA0LAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4 WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSBDWDI1ODQzX1NWSURFTywKKwkJCS5hbXV4 ICAgICA9IDUsCisJCX0gfSwKKwkJLnR2bm9ybXMJPSBFRVRJX1hDNTAwMF9ERUZBVUxUX0FOQUxP RywKKwkJLmR2Ym5vcm1zCT0gRUVUSV9YQzUwMDBfREVGQVVMVF9EVkJULAorCQkuZm1ub3Jtcwk9 IEVFVElfWEM1MDAwX0RFRkFVTFRfRk0sCisJfSwKKwlbRU0yODgxX0JPQVJEX0ROVF9EQTJfSFlC UklEXSA9IHsKKwkJLm5hbWUgICAgICAgICA9ICJETlQgREEyIEh5YnJpZCIsCisJCS52Y2hhbm5l bHMgICAgPSAzLAorCQkubm9ybSAgICAgICAgID0gVjRMMl9TVERfUEFMX0JHLAorCQkuaGFzX3R1 bmVyICAgID0gMSwKKwkJLmhhc19pbnR0dW5lciA9IDEsCisJCS50dW5lcl90eXBlICAgPSBUVU5F Ul9YQ0VJVkVfWEMzMDI4LAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCisJCS5k ZXZfbW9kZXMgICAgPSBFTTI4WFhfVklERU8gfCBFTTI4WFhfVkJJIHwgRU0yOFhYX0RWQlQsCisJ CS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklT SU9OLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLAorCQkJLmFtdXggICAgID0g MCwKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52 bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMSwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0sIHsK KwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IFRWUDUx NTBfU1ZJREVPLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSB9LAorCQkubWFudWFsX2dwaW8JPSAx LAorCQkuZ3Bpb19yZWdzIAk9IEVFVElfREVGQVVMVF9HUElPLAorCQkudHZub3Jtcwk9IEVFVElf WEMzMDI4X0RFRkFVTFRfQU5BTE9HLAorCQkuZHZibm9ybXMJPSBFRVRJX1hDMzAyOF9ERUZBVUxU X0RWQlQsCisJfSwKKwlbRU0yODcwX0JPQVJEX1RFUlJBVEVDX1hTXSA9IHsKKwkJLm5hbWUgICAg ICAgICA9ICJUZXJyYXRlYyBDaW5lcmd5IFQgWFMiLAorCQkuaGFzX3R1bmVyICAgID0gMSwKKwkJ Lmhhc19pbnR0dW5lciA9IDEsCisJCS50dW5lcl90eXBlICAgPSBUVU5FUl9YQ0VJVkVfWEMzMDI4 LAorCQkuZGV2X21vZGVzICAgID0gRU0yOFhYX0RWQlQsCisJCS5tYW51YWxfZ3Bpbwk9IDEsCisJ CS5ncGlvX3JlZ3MgCT0gRUVUSV9ERUZBVUxUX0dQSU8sCisJCS5kdmJub3Jtcwk9IEVFVElfWEMz MDI4X0RFRkFVTFRfRFZCVCwKKwl9LAorCVtFTTI4NzBfQk9BUkRfVEVSUkFURUNfWFNfTVQyMDYw XSA9IHsKKwkJLm5hbWUgICAgICAgICA9ICJUZXJyYXRlYyBDaW5lcmd5IFQgWFMgKE1UMjA2MCki LAorCQkudHVuZXJfdHlwZSAgID0gVFVORVJfTVQyMDYwLAorCQkuZGV2X21vZGVzICAgID0gRU0y OFhYX0RWQlQsCisjaWYgMAorCQkubWFudWFsX2dwaW8gID0gMSwKKwkJLmdwaW9fcmVncyAgICA9 IEVFVElfREVGQVVMVF9HUElPLAorI2VuZGlmCisJfSwKKwlbRU0yODcwX0JPQVJEX1BJTk5BQ0xF X1BDVFZfRFZCXSA9IHsKKwkJLm5hbWUgICAgICAgICA9ICJQaW5uYWNsZSBQQ1RWIERWQi1UIiwK KwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX01UMjA2MCwKKwkJLmRldl9tb2RlcyAgICA9IEVNMjhY WF9EVkJULAorCQkuaXJfa2V5dGFiICAgID0gaXJfY29kZXNfcGlubmFjbGUyLAorCQkuaXJfZ2V0 a2V5ICAgID0gZW0yODgwX2dldF9rZXlfZW1waWEsCisjaWYgMAorCQkubWFudWFsX2dwaW8gID0g MSwKKwkJLmdwaW9fcmVncyAgICA9IEVFVElfREVGQVVMVF9HUElPLAorI2VuZGlmCisJfSwKKwlb RU0yODcwX0JPQVJEX0tXT1JMRF8zNTBVXSA9IHsKKwkJLm5hbWUgICAgICAgICA9ICJLV29ybGQg MzUwIFUgRFZCLVQiLAorCQkuaGFzX3R1bmVyICAgID0gMSwKKwkJLmhhc19pbnR0dW5lciA9IDEs CisJCS5kZXZfbW9kZXMgICAgPSBFTTI4WFhfRFZCVCwKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVS X1hDRUlWRV9YQzMwMjgsCisJCS5tYW51YWxfZ3Bpbwk9IDEsCisJCS5ncGlvX3JlZ3MgCT0gRUVU SV9ERUZBVUxUX0dQSU8sCisJCS5kdmJub3Jtcwk9IEVFVElfWEMzMDI4X0RFRkFVTFRfRFZCVCwK Kwl9LAorCVtFTTI4NzBfQk9BUkRfS1dPUkxEXzM1NVVdID0geworCQkubmFtZSAgICAgICAgID0g IktXb3JsZCAzNTUgVSBEVkItVCIsCisJCS50dW5lcl90eXBlICAgPSBUVU5FUl9RVDEwMTAsCisJ CS5kZXZfbW9kZXMgICAgPSBFTTI4WFhfRFZCVCwKKwkJLm1hbnVhbF9ncGlvICA9IDEsCisJCS5n cGlvX3JlZ3MgCT0gRUVUSV9ERUZBVUxUX0dQSU8sCisJfSwKKwlbRU0yODcwX0JPQVJEX0NPTVBS T19WSURFT01BVEVdID0geworCQkubmFtZSAgICAgICAgID0gIkNvbXBybywgVmlkZW9NYXRlIFUz IiwKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX01UMjA2MCwKKwkJLmRldl9tb2RlcyAgICA9IEVN MjhYWF9EVkJULAorCX0sCisJW0VNMjg4MV9CT0FSRF9QSU5OQUNMRV9IWUJSSURfUFJPXSA9IHsK KwkJLm5hbWUgICAgICAgICA9ICJQaW5uYWNsZSBIeWJyaWQgUHJvIiwKKwkJLnZjaGFubmVscyAg ICA9IDMsCisJCS5ub3JtICAgICAgICAgPSBWNEwyX1NURF9QQUxfQkcsCisJCS5oYXNfdHVuZXIg ICAgPSAxLAorCQkuaGFzX2ludHR1bmVyID0gMSwKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1hD RUlWRV9YQzMwMjgsCisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKKwkJLmlyX2tl eXRhYiAgICA9IGlyX2NvZGVzX3Bpbm5hY2xlMiwKKwkJLmlyX2dldGtleSAgICA9IGVtMjg4MF9n ZXRfa2V5X2VtcGlhLAorCQkuZGV2X21vZGVzICAgID0gRU0yOFhYX1ZJREVPIHwgRU0yOFhYX1ZC SSB8IEVNMjhYWF9EVkJULAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICAgID0g RU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRF MCwKKwkJCS5hbXV4ICAgICA9IDAsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVY X0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTEsCisJCQkuYW11 eCAgICAgPSAxLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJ CQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0gfSwK KwkJLm1hbnVhbF9ncGlvCT0gMSwKKwkJLmdwaW9fcmVncyAJPSBFRVRJX0RFRkFVTFRfR1BJTywK KwkJLnR2bm9ybXMJPSBFRVRJX1hDMzAyOF9ERUZBVUxUX0FOQUxPRywKKwkJLmR2Ym5vcm1zCT0g RUVUSV9YQzMwMjhfREVGQVVMVF9EVkJULAorCX0sCisJW0VNMjg4Ml9CT0FSRF9QSU5OQUNMRV9I WUJSSURfUFJPXSA9IHsKKwkJLm5hbWUgICAgICAgICA9ICJQaW5uYWNsZSBIeWJyaWQgUHJvIChl bTI4ODIpIiwKKwkJLnZjaGFubmVscyAgICA9IDMsCisJCS5ub3JtICAgICAgICAgPSBWNEwyX1NU RF9QQUxfQkcsCisJCS50dW5lcl90eXBlICAgPSBUVU5FUl9YQ0VJVkVfWEMzMDI4LAorCQkudHVu ZXJfYWRkciAgID0gMHhjMiwKKwkJLmhhc190dW5lciAgICA9IDEsCisJCS5oYXNfaW50dHVuZXIg PSAxLAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCisJCS5pcl9rZXl0YWIgICAg PSBpcl9jb2Rlc19lbV9waW5uYWNsZTJfdXNiLAorCQkuaXJfZ2V0a2V5ICAgID0gZW0yODgwX2dl dF9rZXlfZW1waWEsCisJCS5kZXZfbW9kZXMgICAgPSBFTTI4WFhfVklERU8gfCBFTTI4WFhfQVVE SU8gfCBFTTI4WFhfVkJJIHwgRU0yOFhYX0RWQlQsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJ CQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gVFZQ NTE1MF9DT01QT1NJVEUwLAorCQkJLmFtdXggICAgID0gMCwKKwkJfSwgeworCQkJLnR5cGUgICAg ID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9T SVRFMSwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9W TVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfU1ZJREVPLAorCQkJLmFtdXggICAg ID0gMSwKKwkJfSB9LAorCQkubWFudWFsX2dwaW8JPSAxLAorCQkuZ3Bpb19yZWdzIAk9IEVFVElf RFJYMzk3NURfR1BJTywKKwkJLnR2bm9ybXMJPSBFRVRJX1hDMzAyOF9ERUZBVUxUX0FOQUxPRywK KwkJLmR2Ym5vcm1zCT0gRUVUSV9YQzMwMjhfREVGQVVMVF9EVkJULAorCX0sCisJLyogbWF5YmUg dGhlcmUncyBhIHJlYXNvbiBiZWhpbmQgaXQgd2h5IFRlcnJhdGVjIHNlbGxzIHRoZSBIeWJyaWQg WFMgYXMgUHJvZGlneSBYUyB3aXRoIGEKKwkgKiBkaWZmZXJlbnQgUElELCBsZXQncyBrZWVwIGl0 IHNlcGFyYXRlZCBmb3Igbm93IG1heWJlIHdlJ2xsIG5lZWQgaXQgbGF0ZXJvbiAqLworCVtFTTI4 ODBfQk9BUkRfVEVSUkFURUNfUFJPRElHWV9YU10gPSB7CisJCS5uYW1lICAgICAgICAgPSAiVGVy cmF0ZWMgUHJvZGlneSBYUyIsCisJCS52Y2hhbm5lbHMgICAgPSAzLAorCQkubm9ybSAgICAgICAg ID0gVjRMMl9TVERfUEFMX0JHLAorCQkuaGFzX3R1bmVyICAgID0gMSwKKwkJLmhhc19pbnR0dW5l ciA9IDEsCisJCS50dW5lcl90eXBlICAgPSBUVU5FUl9YQ0VJVkVfWEMzMDI4LAorCQkuZGVjb2Rl ciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCisJCS5kZXZfbW9kZXMgICAgPSBFTTI4WFhfVklERU8g fCBFTTI4WFhfVkJJIHwgRU0yOFhYX0RWQlQsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQku dHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gVFZQNTE1 MF9DT01QT1NJVEUwLAorCQkJLmFtdXggICAgID0gMCwKKwkJfSwgeworCQkJLnR5cGUgICAgID0g RU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRF MSwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVY X1NWSURFTywKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfU1ZJREVPLAorCQkJLmFtdXggICAgID0g MSwKKwkJfSB9LAorCQkubWFudWFsX2dwaW8JPSAxLAorCQkuZ3Bpb19yZWdzIAk9IEVFVElfREVG QVVMVF9HUElPLAorCQkudHZub3Jtcwk9IEVFVElfWEMzMDI4X0RFRkFVTFRfQU5BTE9HLAorCQku ZHZibm9ybXMJPSBFRVRJX1hDMzAyOF9ERUZBVUxUX0RWQlQsCisJfSwKKwlbRU0yODgwX0JPQVJE X01TSV9ESUdJVk9YX0FEXSA9IHsKKwkJLm5hbWUgICAgICAgICA9ICJNU0kgRGlnaVZveCBBL0Qi LAorCQkudmNoYW5uZWxzICAgID0gMywKKwkJLm5vcm0gICAgICAgICA9IFY0TDJfU1REX1BBTF9C RywKKwkJLmhhc190dW5lciAgICA9IDEsCisJCS5oYXNfaW50dHVuZXIgPSAxLAorCQkudHVuZXJf dHlwZSAgID0gVFVORVJfWENFSVZFX1hDMzAyOCwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9U VlA1MTUwLAorCQkuZGV2X21vZGVzICAgID0gRU0yOFhYX1ZJREVPIHwgRU0yOFhYX1ZCSSB8IEVN MjhYWF9EVkJULAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICAgID0gRU0yOFhY X1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKKwkJ CS5hbXV4ICAgICA9IDAsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBP U0lURTEsCisJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTEsCisJCQkuYW11eCAgICAg PSAxLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJCQkudm11 eCAgICAgPSBUVlA1MTUwX1NWSURFTywKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0gfSwKKwkJLm1h bnVhbF9ncGlvCT0gMSwKKwkJLmdwaW9fcmVncyAJPSBFRVRJX0RFRkFVTFRfR1BJTywKKwkJLnR2 bm9ybXMJPSBFRVRJX1hDMzAyOF9ERUZBVUxUX0FOQUxPRywKKwkJLmR2Ym5vcm1zCT0gRUVUSV9Y QzMwMjhfREVGQVVMVF9EVkJULAorCX0sCisJW0VNMjg4MF9CT0FSRF9NU0lfRElHSVZPWF9BRF9J SV0gPSB7CisJCS5uYW1lICAgICAgICAgPSAiTVNJIERpZ2lWb3ggQS9EIElJIiwKKwkJLnZjaGFu bmVscyAgICA9IDMsCisJCS5ub3JtICAgICAgICAgPSBWNEwyX1NURF9QQUxfQkcsCisJCS5oYXNf dHVuZXIgICAgPSAxLAorCQkuaGFzX2ludHR1bmVyID0gMSwKKwkJLnR1bmVyX3R5cGUgICA9IFRV TkVSX1hDRUlWRV9YQzMwMjgsCisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKKwkJ LmRldl9tb2RlcyAgICA9IEVNMjhYWF9WSURFTyB8IEVNMjhYWF9WQkkgfCBFTTI4WFhfRFZCVCwK KwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVW SVNJT04sCisJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTAsCisJCQkuYW11eCAgICAg PSAwLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJ LnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUxLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSwg eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gVFZQ NTE1MF9TVklERU8sCisJCQkuYW11eCAgICAgPSAxLAorCQl9IH0sCisJCS5tYW51YWxfZ3Bpbwk9 IDEsCisJCS5ncGlvX3JlZ3MgCT0gRUVUSV9ERUZBVUxUX0dQSU8sCisJCS50dm5vcm1zCT0gRUVU SV9YQzMwMjhfREVGQVVMVF9BTkFMT0csCisJCS5kdmJub3Jtcwk9IEVFVElfWEMzMDI4X0RFRkFV TFRfRFZCVCwKKwl9LAorCVtFTTI4ODNfQk9BUkRfQVRJX1RWV09OREVSNjAwXSA9IHsKKwkJLm5h bWUgICAgICAgICA9ICJBVEkgVFYgV29uZGVyIEhEIDYwMCIsCisJCS52Y2hhbm5lbHMgICAgPSAz LAorCQkubm9ybSAgICAgICAgID0gVjRMMl9TVERfUEFMX0JHLAorCQkuaGFzX3R1bmVyICAgID0g MSwKKwkJLmhhc19pbnR0dW5lciA9IDEsCisJCS50dW5lcl90eXBlICAgPSBUVU5FUl9YQ0VJVkVf WEMzMDI4LAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCisJCS5kZXZfbW9kZXMg ICAgPSBFTTI4WFhfVklERU8gfCBFTTI4WFhfVkJJIHwgRU0yOFhYX0FUU0MgfCBFTTI4WFhfQVVE SU8sCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9U RUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLAorCQkJLmFtdXgg ICAgID0gMCwKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwK KwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMSwKKwkJCS5hbXV4ICAgICA9IDEsCisJ CX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9 IFRWUDUxNTBfU1ZJREVPLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSB9LAorCQkubWFudWFsX2dw aW8JPSAxLAorCQkuZ3Bpb19yZWdzIAk9IEVFVElfREVGQVVMVF9HUElPLAorCQkudHZub3Jtcwk9 IEVFVElfWEMzMDI4TF9ERUZBVUxUX0FOQUxPRywKKwkJLmF0c2Nub3Jtcwk9IEVFVElfWEMzMDI4 TF9ERUZBVUxUX0FUU0MsCisJCS5xYW1ub3Jtcwk9IEVFVElfWEMzMDI4TF9ERUZBVUxUX1FBTSwK Kwl9LAorCVtFTTI4MjBfQk9BUkRfTVNJX1ZPWF9VU0JfMl0gPSB7CisJCS5uYW1lCQk9ICJNU0kg Vk9YIFVTQiAyLjAiLAorCQkudmNoYW5uZWxzCT0gMywKKwkJLm5vcm0JCT0gVjRMMl9TVERfUEFM X0JHLAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywKKwkJLnRkYTk4ODdf Y29uZgk9IFREQTk4ODdfUFJFU0VOVHxUREE5ODg3X1BPUlQxX0FDVElWRXxUREE5ODg3X1BPUlQy X0FDVElWRSwKKwkJLmhhc190dW5lcgk9IDEsCisJCS5kZWNvZGVyICAgICAgICA9IEVNMjhYWF9T QUE3MTE0LAorCQkuZGV2X21vZGVzICAgICAgPSBFTTI4WFhfVklERU8sCisJCS5pbnB1dCAgICAg ICAgICA9IHt7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZt dXggICAgID0gU0FBNzExNV9DT01QT1NJVEU0LAorCQkJLmFtdXggICAgID0gMCwKKwkJfSwgewor CQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IFNB QTcxMTVfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0sIHsKKwkJCS50eXBlICAg ICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywK KwkJCS5hbXV4ICAgICA9IDEsCisJCX0gfSwKKwkJLnR2bm9ybXMJPSB7CisJCQl7CisJCQkJLm5h bWUgPSAiUEFMLUJHIiwKKwkJCQkuaWQgPSBWNEwyX1NURF9QQUxfQkcsCisJCQl9LCB7CisJCQkJ Lm5hbWUgPSAiUEFMLURLIiwKKwkJCQkuaWQgPSBWNEwyX1NURF9QQUxfREssCisJCQl9LCB7CisJ CQkJLm5hbWUgPSAiUEFMLUkiLAorCQkJCS5pZCA9IFY0TDJfU1REX1BBTF9JLAorCQkJfSwgewor CQkJCS5uYW1lID0gIlBBTC1NIiwKKwkJCQkuaWQgPSBWNEwyX1NURF9QQUxfTSwKKwkJCX0sIHsK KwkJCQkubmFtZSA9ICJOVFNDIiwKKwkJCQkuaWQgPSBWNEwyX1NURF9OVFNDX00sCisJCX0gfSwK Kwl9LAorCVtFTTI4MDBfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8yMDBdID0geworCQkubmFtZSAg ICAgICAgID0gIlRlcnJhdGVjIENpbmVyZ3kgMjAwIFVTQiIsCisJCS5lbV90eXBlICAgICAgPSBF TTI4MDAsCisJCS5pMmNfZGV2cyAgICAgPSBlbTI4eHhfdGVycmF0ZWNfY2luZXJneV8yMDBfdXNi X2kyY19kZXZzLAorCQkudmNoYW5uZWxzICAgID0gMywKKwkJLm5vcm0gICAgICAgICA9IFY0TDJf U1REX1BBTF9CRywKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywKKwkJ LnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmhhc190dW5lciAgICA9IDEsCisJ CS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExMywKKwkJLmRldl9tb2RlcyAgICA9IEVNMjhY WF9WSURFTywKKwkJLmlyX2kyYyAgICAgICA9IDEsCisKKwkJLmlucHV0ICAgICAgICAgID0ge3sK KwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgICAgPSBT QUE3MTE1X0NPTVBPU0lURTIsCisJCQkuYW11eCAgICAgPSAwLAorCQl9LCB7CisJCQkudHlwZSAg ICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01Q T1NJVEUwLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhY X1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gU0FBNzExNV9TVklERU8zLAorCQkJLmFtdXgg ICAgID0gMSwKKwkJfSB9LAorCQkudHZub3Jtcwk9IHsKKwkJCXsKKwkJCQkubmFtZSA9ICJQQUwt QkciLAorCisJCQkJLmlkID0gVjRMMl9TVERfUEFMX0JHLAorCQkJfSwgeworCQkJCS5uYW1lID0g IlBBTC1ESyIsCisKKwkJCQkuaWQgPSBWNEwyX1NURF9QQUxfREssCisJCQl9LCB7CisJCQkJLm5h bWUgPSAiUEFMLUkiLAorCisJCQkJLmlkID0gVjRMMl9TVERfUEFMX0ksCisJCQl9LCB7CisJCQkJ Lm5hbWUgPSAiUEFMLU0iLAorCisJCQkJLmlkID0gVjRMMl9TVERfUEFMX00sCisJCX0gfSwKKwl9 LAorCVtFTTI4MjBfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1VTQklJX0RFTFVYRV0gPSB7CisJCS5u YW1lICAgICAgICAgPSAiTGVhZHRlayBXaW5mYXN0IFVTQiBJSSBEZWx1eGUiLAorCQkuZW1fdHlw ZSAgICAgID0gRU0yODIwLAorCQkudmNoYW5uZWxzICAgID0gMywKKwkJLm5vcm0gICAgICAgICA9 IFY0TDJfU1REX1BBTF9CRywKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1BISUxJUFNfRk0xMjE2 TUVfTUszLAorCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5ULAorCQkuaGFzX3R1bmVy ICAgID0gMSwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTE0LAorCQkuZGV2X21vZGVz ICAgICAgPSBFTTI4WFhfVklERU8sCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAg ICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gMiwKKwkJCS5hbXV4 ICAgICA9IDAsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEs CisJCQkudm11eCAgICAgPSAwLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSwgeworCQkJLnR5cGUg ICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gOSwKKwkJCS5hbXV4ICAg ICA9IDEsCisJCX0gfSwKKwkJLnR2bm9ybXMJPSB7CisJCQl7CisJCQkJLm5hbWUgPSAiUEFMLUJH IiwKKwkJCQkuaWQgPSBWNEwyX1NURF9QQUxfQkcsCisJCQl9LCB7CisJCQkJLm5hbWUgPSAiUEFM LURLIiwKKwkJCQkuaWQgPSBWNEwyX1NURF9QQUxfREssCisJCQl9LCB7CisJCQkJLm5hbWUgPSAi UEFMLUkiLAorCQkJCS5pZCA9IFY0TDJfU1REX1BBTF9JLAorCQkJfSwgeworCQkJCS5uYW1lID0g IlBBTC1NIiwKKwkJCQkuaWQgPSBWNEwyX1NURF9QQUxfTSwKKwkJfSB9LAorCX0sCisJW0VNMjgw MF9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfVVNCSUldID0geworCQkubmFtZSAgICAgICAgID0gIkxl YWR0ZWsgV2luZmFzdCBVU0IgSUkiLAorCQkuZW1fdHlwZSAgICAgID0gRU0yODAwLAorCQkudmNo YW5uZWxzICAgID0gMywKKwkJLm5vcm0gICAgICAgICA9IFY0TDJfU1REX1BBTF9CRywKKwkJLnR1 bmVyX3R5cGUgICA9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywKKwkJLnRkYTk4ODdfY29uZiA9IFRE QTk4ODdfUFJFU0VOVCwKKwkJLmhhc190dW5lciAgICA9IDEsCisJCS5kZWNvZGVyICAgICAgPSBF TTI4WFhfU0FBNzExMywKKwkJLmRldl9tb2RlcyAgICAgID0gRU0yOFhYX1ZJREVPLAorCQkuaW5w dXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwK KwkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFMiwKKwkJCS5hbXV4ICAgICA9IDAsCisJ CX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAg ICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCisJCQkuYW11eCAgICAgPSAxLAorCQl9LCB7CisJCQku dHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSBTQUE3MTE1X1NW SURFTzMsCisJCQkuYW11eCAgICAgPSAxLAorCQl9IH0sCisJCS50dm5vcm1zCT0geworCQkJewor CQkJCS5uYW1lID0gIlBBTC1CRyIsCisJCQkJLmlkID0gVjRMMl9TVERfUEFMX0JHLAorCQkJfSwg eworCQkJCS5uYW1lID0gIlBBTC1ESyIsCisJCQkJLmlkID0gVjRMMl9TVERfUEFMX0RLLAorCQkJ fSwgeworCQkJCS5uYW1lID0gIlBBTC1JIiwKKwkJCQkuaWQgPSBWNEwyX1NURF9QQUxfSSwKKwkJ CX0sIHsKKwkJCQkubmFtZSA9ICJQQUwtTSIsCisJCQkJLmlkID0gVjRMMl9TVERfUEFMX00sCisJ CX0gfSwKKwl9LAorCVtFTTI4MDBfQk9BUkRfS1dPUkxEX1VTQjI4MDBdID0geworCQkubmFtZSAg ICAgICAgID0gIktXb3JsZCBVU0IyODAwIiwKKwkJLmVtX3R5cGUgICAgICA9IEVNMjgwMCwKKwkJ LnZjaGFubmVscyAgICA9IDMsCisJCS5ub3JtICAgICAgICAgPSBWNEwyX1NURF9QQUxfQkcsCisj aWYgZGVmaW5lZCBUVU5FUl9QSElMSVBTX0ZDVjEyMzZECisJCS50dW5lcl90eXBlICAgPSBUVU5F Ul9QSElMSVBTX0ZDVjEyMzZELAorI2Vsc2UKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1BISUxJ UFNfQVRTQywKKyNlbmRpZgorCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5ULAorCQku aGFzX3R1bmVyICAgID0gMSwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTEzLAorCQku ZGV2X21vZGVzICAgICAgPSBFTTI4WFhfVklERU8sCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJ CQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gU0FB NzExNV9DT01QT1NJVEUyLAorCQkJLmFtdXggICAgID0gMCwKKwkJfSwgeworCQkJLnR5cGUgICAg ID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9T SVRFMCwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9W TVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKKwkJCS5hbXV4ICAg ICA9IDEsCisJCX0gfSwKKwkJLnR2bm9ybXMJPSB7CisJCQl7CisJCQkJLm5hbWUgPSAiUEFMLUJH IiwKKwkJCQkuaWQgPSBWNEwyX1NURF9QQUxfQkcsCisJCQl9CisJCX0sCisJfSwKKwlbRU0yODIw X0JPQVJEX1BJTk5BQ0xFX0RWQ185MF0gPSB7CisJCS5uYW1lICAgICAgICAgPSAiUGlubmFjbGUg RGF6emxlIERWQyA5MCIsCisJCS52Y2hhbm5lbHMgICAgPSAzLAorCQkubm9ybSAgICAgICAgID0g VjRMMl9TVERfUEFMX0JHLAorCQkuaGFzX3R1bmVyICAgID0gMCwKKwkJLmRlY29kZXIgICAgICA9 IEVNMjhYWF9TQUE3MTEzLAorCQkuZGV2X21vZGVzICAgICAgPSBFTTI4WFhfVklERU8sCisJCS5p bnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUx LAorCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUwLAorCQkJLmFtdXggICAgID0gMSwK KwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAg ID0gU0FBNzExNV9TVklERU8zLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSB9LAorCQkudHZub3Jt cwk9IHsKKwkJCXsKKwkJCQkubmFtZSA9ICJQQUwtQkciLAorCQkJCS5pZCA9IFY0TDJfU1REX1BB TF9CRywKKwkJfSB9LAorCX0sCisJW0VNMjgyMF9CT0FSRF9QSU5OQUNMRV9EVkNfMTAwXSA9IHsK KwkJLm5hbWUgICAgICAgICA9ICJQaW5uYWNsZSBEYXp6bGUgRFZDIDEwMCIsCisJCS52Y2hhbm5l bHMgICAgPSAzLAorCQkubm9ybSAgICAgICAgID0gVjRMMl9TVERfUEFMX0JHLAorCQkuaGFzX3R1 bmVyICAgID0gMCwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTEzLAorCQkuZGV2X21v ZGVzICAgICAgPSBFTTI4WFhfVklERU8sCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlw ZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gU0FBNzExNV9D T01QT1NJVEUwLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0y OFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gU0FBNzExNV9TVklERU8zLAorCQkJLmFt dXggICAgID0gMSwKKwkJfSB9LAorCQkudHZub3Jtcwk9IHsKKwkJCXsKKwkJCQkubmFtZSA9ICJQ QUwtQkciLAorCQkJCS5pZCA9IFY0TDJfU1REX1BBTF9CRywKKwkJCX0sIHsKKwkJCQkubmFtZSA9 ICJTRUNBTSBMIiwKKwkJCQkuaWQgPSBWNEwyX1NURF9TRUNBTV9MLAorCQkJfSwgeworCQkJCS5u YW1lID0gIlNFQ0FNIExDIiwKKwkJCQkuaWQgPSBWNEwyX1NURF9TRUNBTV9MQywKKwkJCX0sIHsK KwkJCQkubmFtZSA9ICJTRUNBTSBLMSIsCisJCQkJLmlkID0gVjRMMl9TVERfU0VDQU1fSzEsCisJ CX0gfSwKKwl9LAorCVtFTTI4MjBfQk9BUkRfVklERU9MT0dZXzIwSzE0WFVTQl0gPSB7CisJCS5u YW1lICAgICAgICAgID0gIlZpZGVvbG9neSAyMEsxNFhVU0IgVVNCMi4wIiwKKwkJLnZjaGFubmVs cyAgICAgPSAxLAorCQkubm9ybSAgICAgICAgICA9IFY0TDJfU1REX1BBTF9CRywKKwkJLmhhc190 dW5lciAgICAgPSAwLAorCQkuY3RybCAgICAgICAgICA9IGVtMjh4eF92eV9jY3RybCwKKwkJLmdj dHJsICAgICAgICAgPSBlbTI4eHhfdnlfZ2N0cmwsCisJCS5xY3RybCAgICAgICAgID0gZW0yOHh4 X3Z5X3FjdHJsLAorCQkuZGV2X21vZGVzICAgICAgPSBFTTI4WFhfVklERU8sCisJCS5pbnB1dCAg ICAgICAgID0ge3sKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQku dm11eCAgICAgPSAwLAorCQkJLmFtdXggICAgID0gMCwKKwkJfSB9LAorCQkudHZub3Jtcwk9IHsK KwkJCXsKKwkJCQkubmFtZSA9ICJQQUwtQkciLAorCQkJCS5pZCA9IFY0TDJfU1REX1BBTF9CRywK KwkJfSB9LAorCX0sCisJW0VNMjgyMV9CT0FSRF9VU0JHRUFSX1ZEMjA0XSA9IHsKKwkJLm5hbWUg ICAgICAgICAgPSAiVXNiZ2VhciBWRDIwNHY5IiwKKwkJLnZjaGFubmVscyAgICAgPSAyLAorCQku bm9ybSAgICAgICAgICA9IFY0TDJfU1REX1BBTF9CRywKKwkJLmRlY29kZXIgICAgICAgPSBFTTI4 WFhfU0FBNzExMywKKwkJLmRldl9tb2RlcyAgICAgID0gRU0yOFhYX1ZJREVPLAorCQkuaW5wdXQg ICAgICAgICAgPSB7eworCQkJLnR5cGUgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52 bXV4ICA9IFNBQTcxMTVfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICA9IDEsCisJCX0sIHsKKwkJCS50 eXBlICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICA9IFNBQTcxMTVfU1ZJREVPMywK KwkJCS5hbXV4ICA9IDEsCisJCX0gfSwKKwkJLnR2bm9ybXMJPSB7eworCQkJCS5uYW1lID0gIlBB TC1CRyIsCisJCQkJLmlkID0gVjRMMl9TVERfUEFMX0JHLAorCQkJfSwgeworCQkJCS5uYW1lID0g IlBBTC1ESyIsCisJCQkJLmlkID0gVjRMMl9TVERfUEFMX0RLLAorCQkJfSwgeworCQkJCS5uYW1l ID0gIlBBTC1JIiwKKwkJCQkuaWQgPSBWNEwyX1NURF9QQUxfSSwKKwkJCX0sIHsKKwkJCQkubmFt ZSA9ICJQQUwtTSIsCisJCQkJLmlkID0gVjRMMl9TVERfUEFMX00sCisJCX0gfSwKKwl9LAorCVtF TTI4NjBfQk9BUkRfVFlQSE9PTl9EVkRfTUFLRVJdID0geworCQkubmFtZSAgICAgICAgICA9ICJU eXBob29uIERWRCBNYWtlciIsCisJCS52Y2hhbm5lbHMgICAgID0gMiwKKwkJLm5vcm0gICAgICAg ICAgPSBWNEwyX1NURF9QQUxfQkcsCisJCS5kZWNvZGVyICAgICAgID0gRU0yOFhYX1NBQTcxMTMs CisJCS5kZXZfbW9kZXMgICAgICA9IEVNMjhYWF9WSURFTywKKwkJLmlucHV0ICAgICAgICAgID0g e3sKKwkJCS50eXBlICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgPSBTQUE3 MTE1X0NPTVBPU0lURTAsCisJCQkuYW11eCAgPSAxLAorCQl9LCB7CisJCQkudHlwZSAgPSBFTTI4 WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgPSBTQUE3MTE1X1NWSURFTzMsCisJCQkuYW11eCAg PSAxLAorCQl9IH0sCisJCS50dm5vcm1zCT0ge3sKKwkJCQkubmFtZSA9ICJQQUwtQkciLAorCQkJ CS5pZCA9IFY0TDJfU1REX1BBTF9CRywKKwkJCX0sIHsKKwkJCQkubmFtZSA9ICJQQUwtREsiLAor CQkJCS5pZCA9IFY0TDJfU1REX1BBTF9ESywKKwkJCX0sIHsKKwkJCQkubmFtZSA9ICJQQUwtSSIs CisJCQkJLmlkID0gVjRMMl9TVERfUEFMX0ksCisJCQl9LCB7CisJCQkJLm5hbWUgPSAiUEFMLU0i LAorCQkJCS5pZCA9IFY0TDJfU1REX1BBTF9NLAorCQl9IH0sCisJfSwKKwlbRU0yODYwX0JPQVJE X0dBRE1FSV9VVFYzMzBdID0geworCQkubmFtZSAgICAgICAgID0gIkdhZG1laSBVVFYzMzAiLAor CQkudmNoYW5uZWxzICAgID0gMywKKwkJLm5vcm0gICAgICAgICA9IFY0TDJfU1REX05UU0NfTSwK KwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1RORl81MzM1TUYsCisJCS50ZGE5ODg3X2NvbmYgPSBU REE5ODg3X1BSRVNFTlQsCisJCS5oYXNfdHVuZXIgICAgPSAxLAorCQkuZGVjb2RlciAgICAgID0g RU0yOFhYX1NBQTcxMTMsCisJCS5pcl9rZXl0YWIgICAgPSBpcl9jb2Rlc19lbV9nYWRtZWlfdXNi LAorCQkuaXJfZ2V0a2V5ICAgID0gZW0yODgwX2dldF9rZXlfZW1waWEsCisJCS5kZXZfbW9kZXMg ICAgPSBFTTI4WFhfVklERU8sCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgICAg PSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJ VEUyLAorCQkJLmFtdXggICAgID0gMCwKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZN VVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFMCwKKwkJCS5h bXV4ICAgICA9IDEsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywK KwkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0g fSwKKwkJLnR2bm9ybXMJPSB7eworCQkJCS5uYW1lID0gIk5UU0MiLAorCQkJCS5pZCA9IFY0TDJf U1REX05UU0NfTSwKKwkJfSwgeworCQkJCS5uYW1lID0gIlBBTC1ESyIsCisJCQkJLmlkID0gVjRM Ml9TVERfUEFMX0RLLAorCQl9IH0sCisJfSwKKwlbRU0yODIwX0JPQVJEX0dBRE1FSV9VVFYzMTBd ID0geworCQkubmFtZSAgICAgICAgID0gIkdhZG1laSBVVFYzMTAiLAorCQkudmNoYW5uZWxzICAg ID0gMywKKwkJLm5vcm0gICAgICAgICA9IFY0TDJfU1REX05UU0NfTSwKKwkJLnR1bmVyX3R5cGUg ICA9IFRVTkVSX1RORl81MzM1TUYsCisJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQs CisJCS5oYXNfdHVuZXIgICAgPSAxLAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMTMs CisJCS5kZXZfbW9kZXMgICAgPSBFTTI4WFhfVklERU8sCisJCS5pbnB1dCAgICAgICAgICA9IHt7 CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0g U0FBNzExNV9DT01QT1NJVEUxLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSwgeworCQkJLnR5cGUg ICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09N UE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhY WF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKKwkJCS5hbXV4 ICAgICA9IDEsCisJCX0gfSwKKwkJLnR2bm9ybXMJPSB7eworCQkJCS5uYW1lID0gIk5UU0MiLAor CQkJCS5pZCA9IFY0TDJfU1REX05UU0NfTSwKKwkJfSB9LAorCX0sCisJW0VNMjgwMF9CT0FSRF9W R0VBUl9QT0NLRVRUVl0gPSB7CisJCS5uYW1lICAgICAgICAgPSAiVi1HZWFyIFBvY2tldFRWIiwK KwkJLmVtX3R5cGUgICAgICA9IEVNMjgwMCwKKwkJLmkyY19kZXZzICAgICA9IGVtMjh4eF92Z2Vh cl9wb2NrZXR0dl9pMmNfZGV2cywKKwkJLnZjaGFubmVscyAgICA9IDMsCisJCS5ub3JtICAgICAg ICAgPSBWNEwyX1NURF9QQUxfQkcsCisJCS50dW5lcl90eXBlICAgPSBUVU5FUl9MR19QQUxfTkVX X1RBUEMsCisJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5oYXNfdHVuZXIg ICAgPSAxLAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMTMsCisJCS5kZXZfbW9kZXMg ICAgICA9IEVNMjhYWF9WSURFTywKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAg ICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBP U0lURTIsCisJCQkuYW11eCAgICAgPSAwLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhf Vk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUwLAorCQkJ LmFtdXggICAgID0gMSwKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVP LAorCQkJLnZtdXggICAgID0gU0FBNzExNV9TVklERU8zLAorCQkJLmFtdXggICAgID0gMSwKKwkJ fSB9LAorCQkudHZub3Jtcwk9IHsKKwkJCXsKKwkJCQkubmFtZSA9ICJQQUwtQkciLAorCQkJCS5p ZCA9IFY0TDJfU1REX1BBTF9CRywKKwkJCX0sIHsKKwkJCQkubmFtZSA9ICJQQUwtREsiLAorCQkJ CS5pZCA9IFY0TDJfU1REX1BBTF9ESywKKwkJCX0sIHsKKwkJCQkubmFtZSA9ICJQQUwtSSIsCisJ CQkJLmlkID0gVjRMMl9TVERfUEFMX0ksCisJCQl9LCB7CisJCQkJLm5hbWUgPSAiUEFMLU0iLAor CQkJCS5pZCA9IFY0TDJfU1REX1BBTF9NLAorCQl9IH0sCisJfSwKKwlbRU0yODYxX0JPQVJEX1lB S1VNT19NT1ZJRV9NSVhFUl0gPSB7CisJCS5uYW1lICAgICAgICAgID0gIllha3VtbyBNb3ZpZU1p eGVyIiwKKwkJLnZjaGFubmVscyAgICAgPSAxLAorCQkubm9ybSAgICAgICAgICA9IFY0TDJfU1RE X1BBTF9CRywKKwkJLmRlY29kZXIgICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKKwkJLmhhc190dW5l ciAgICAgPSAwLAorCQkuZGV2X21vZGVzICAgICAgPSBFTTI4WFhfVklERU8sCisJCS5pbnB1dCAg ICAgICAgICA9IHt7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJ LnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLAorCQkJLmFtdXggICAgID0gMCwKKwkJfSwg eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9 IFRWUDUxNTBfQ09NUE9TSVRFMSwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0sIHsKKwkJCS50eXBl ICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfU1ZJREVP LAorCQkJLmFtdXggICAgID0gMSwKKwkJfSB9LAorCQkudHZub3Jtcwk9IHsKKwkJCXsKKwkJCQku bmFtZSA9ICJQQUwtQkciLAorCQkJCS5pZCA9IFY0TDJfU1REX1BBTF9CRywKKwkJfSB9LAorCX0s CisJW0VNMjg2MF9CT0FSRF9ORVRHTUJIX0NBTV0gPSB7CisJCS5uYW1lICAgICAgICAgID0gIk5l dEdNQkggQ2FtIiwgLyogQmVpamluZyBIdWFxaSBJbmZvcm1hdGlvbiBEaWdpdGFsIFRlY2hub2xv Z3kgQ28uLCBMdGQgKi8KKwkJLnZjaGFubmVscyAgICAgPSAxLAorCQkubm9ybQkgICAgICAgPSBW NEwyX1NURF9QQUxfQkcsCisJCS5oYXNfdHVuZXIgICAgID0gMCwKKwkJLmRldl9tb2RlcyAgICAg ID0gRU0yOFhYX1ZJREVPLAorCisJCS5pbnB1dCAgICAgICAgID0ge3sKKwkJCS50eXBlICAgICA9 IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSAwLAorCQkJLmFtdXggICAg ID0gMCwKKwkJfSB9LAorCQkudHZub3Jtcwk9IHsKKwkJCXsKKwkJCQkubmFtZSA9ICJQQUwtQkci LAorCQkJCS5pZCA9IFY0TDJfU1REX1BBTF9CRywKKwkJfSB9LAorCX0sCisJW0VNMjc1MF9CT0FS RF9ETENXXzEzMF0gPSB7CisJCS5uYW1lICAgICAgICAgID0gIkh1YXFpIERMQ1ctMTMwIiwgLyog QmVpamluZyBIdWFxaSBJbmZvcm1hdGlvbiBEaWdpdGFsIFRlY2hub2xvZ3kgQ28uLCBMdGQgKi8K KwkJLnZjaGFubmVscyAgICAgPSAxLAorCQkubm9ybQkgICAgICAgPSBWNEwyX1NURF9QQUxfQkcs CisJCS5kZXZfbW9kZXMgICAgICA9IEVNMjhYWF9WSURFTywKKwkJLmVtX3R5cGUJPSBFTTI3NTEs CisJCS5pbnB1dCAgICAgICAgID0ge3sKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBP U0lURTEsCisJCQkudm11eCAgICAgPSAwLAorCQkJLmFtdXggICAgID0gMCwKKwkJfSB9LAorCQku dHZub3Jtcwk9IHsKKwkJCXsKKwkJCQkubmFtZSA9ICJQQUwtQkciLAorCQkJCS5pZCA9IFY0TDJf U1REX1BBTF9CRywKKwkJfSB9LAorCX0sCisJW0VNMjc1MV9CT0FSRF9FTVBJQV9TQU1QTEVdID0g eworCQkubmFtZSAgICAgICAgICA9ICJFTTI3NTEgV2ViY2FtICsgQXVkaW8iLAorCQkudmNoYW5u ZWxzICAgICA9IDEsCisJCS5ub3JtCSAgICAgICA9IFY0TDJfU1REX1BBTF9CRywKKwkJLmRldl9t b2RlcyAgICAgID0gRU0yOFhYX1ZJREVPLAorCQkuZW1fdHlwZQk9IEVNMjc1MSwKKwkJLmlucHV0 ICAgICAgICAgPSB7eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJ CS52bXV4ICAgICA9IDAsCisJCQkuYW11eCAgICAgPSAwLAorCQl9IH0sCisJCS50dm5vcm1zCT0g eworCQkJeworCQkJCS5uYW1lID0gIlBBTC1CRyIsCisJCQkJLmlkID0gVjRMMl9TVERfUEFMX0JH LAorCQl9IH0sCisJfSwKKwlbRU0yODYxX0JPQVJEX1BMRVhUT1JfUFhfVFYxMDBVXSA9IHsKKwkJ Lm5hbWUgICAgICAgICA9ICJQbGV4dG9yIENvbnZlcnRYIFBYLVRWMTAwVSIsCisJCS52Y2hhbm5l bHMgICAgPSAzLAorCQkubm9ybSAgICAgICAgID0gVjRMMl9TVERfTlRTQ19NLAorCQkudHVuZXJf dHlwZSAgID0gVFVORVJfVE5GXzUzMzVNRiwKKwkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJF U0VOVCwKKwkJLmhhc190dW5lciAgICA9IDEsCisJCS5oYXNfbXNwMzR4eCAgPSAxLAorCQkuZGVj b2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCisJCS5kZXZfbW9kZXMgICAgPSBFTTI4WFhfVklE RU8sICAvKiBFTTI4WFhfQVVESU8gPyAqLworCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5 cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBf Q09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVN MjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTEs CisJCQkuYW11eCAgICAgPSAxLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9T VklERU8sCisJCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKKwkJCS5hbXV4ICAgICA9IDEs CisJCX0gfSwKKwkJLnR2bm9ybXMgICAgICAgID0ge3sKKwkJCS5uYW1lID0gIk5UU0MiLAorCisJ CQkuaWQgPSBWNEwyX1NURF9OVFNDX00sCisJCX0gfSwKKwl9LAorCVtFTTI4NjNfQk9BUkRfRU1Q SUFfR0VORVJJQ10gPSB7CisJCS5uYW1lICAgICAgICAgPSAiRW1waWEgZ2VuZXJpYyIsCisJCS52 Y2hhbm5lbHMgICAgPSAzLAorCQkubm9ybSAgICAgICAgID0gVjRMMl9TVERfTlRTQ19NLAorCQku dHVuZXJfdHlwZSAgID0gVFVORVJfWENFSVZFX1hDMzAyOCwKKwkJLmhhc190dW5lciAgICA9IDEs CisJCS5oYXNfaW50dHVuZXIgPSAxLAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX0NYMjU4NDMs CisJCS5kZXZfbW9kZXMgICAgPSBFTTI4WFhfVklERU8gfCBFTTI4WFhfQVVESU8gfCBFTTI4WFhf UkFESU8gfCBFTTI4WFhfVkJJLAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICAg ID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IDEsCisJCQkuYW11eCAg ICAgPSAwLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAor CQkJLnZtdXggICAgID0gMywKKwkJCS5hbXV4ICAgICA9IDQsCisJCX0sIHsKKwkJCS50eXBlICAg ICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IDIsCisJCQkuYW11eCAgICAg PSA1LAorCQl9IH0sCisJCS50dm5vcm1zCT0gRUVUSV9YQzMwMjhfREVGQVVMVF9BTkFMT0csCisj aWYgMAorCQkuZHZibm9ybXMJPSBFRVRJX1hDMzAyOF9ERUZBVUxUX0RWQlQsCisjZW5kaWYKKwor CQkubWFudWFsX2dwaW8gID0gMSwKKwkJLmdwaW9fcmVncyAJPSBFRVRJX0RFRkFVTFRfR1BJTywK KwkJLnR2bm9ybXMJPSBFRVRJX1hDMzAyOF9ERUZBVUxUX0FOQUxPRywKKyNpZiAwCisJCS5kdmJu b3Jtcwk9IEVFVElfWEMzMDI4X0RFRkFVTFRfRFZCVCwKKyNlbmRpZgorCX0sCisJW0VNMjg4M19C T0FSRF9LV09STERfQTM0MF0gPSB7CisJCS5uYW1lICAgICAgICAgPSAiS1dvcmxkIEFUU0MgMzQw IiwKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1BISUxJUFNfVERBMTgyNzEsCisJCS5kZXZfbW9k ZXMgICAgPSBFTTI4WFhfQVRTQywKKwl9LAorCVtFTTI4NzVfQk9BUkRfU0FNUExFX0lTREJUXSA9 IHsKKwkJLm5hbWUgICAgICAgICA9ICJFbXBpYSBJU0RCIiwKKwkJLmVtX3R5cGUgICAgICA9IEVN Mjg3NSwKKwkJLmRldl9tb2RlcyAgICA9IEVNMjhYWF9JU0RCLAorCX0sCisJW0VNMjg3OV9CT0FS RF9TQU1QTEVfRE1CXSA9IHsKKwkJLm5hbWUgICAgICAgICA9ICJFbXBpYSBETUItVCIsCisJCS50 dW5lcl90eXBlICAgPSBUVU5FUl9BRElNVFYxMDIsCisJCS5kZXZfbW9kZXMgICAgPSBFTTI4WFhf RE1CLAorCX0sCisJW0VNMjg4M19CT0FSRF9FTVBJQV9IWUJSSURfQVRTQ10gPSB7CisJCS5uYW1l ICAgICAgICAgPSAiRW1waWEgSHlicmlkIFhTIEFUU0MiLAorCQkudmNoYW5uZWxzICAgID0gMywK KwkJLm5vcm0gICAgICAgICA9IFY0TDJfU1REX05UU0NfTSwKKwkJLnR1bmVyX3R5cGUgICA9IFRV TkVSX1hDRUlWRV9YQzUwMDAsCisJCS5oYXNfdHVuZXIgICAgPSAxLAorCQkuaGFzX2ludHR1bmVy ID0gMSwKKyNpZiAwCisJCS5wb3dlcnNhdmluZyAgPSAxLAorI2VuZGlmCisJCS5kZWNvZGVyICAg ICAgPSBFTTI4WFhfQ1gyNTg0MywKKwkJLmRldl9tb2RlcyAgICA9IEVNMjhYWF9WSURFTyB8IEVN MjhYWF9BVURJTyB8IEVNMjhYWF9SQURJTyB8IEVNMjhYWF9WQkkvKiB8IEVNMjhYWF9BVFNDIG5l ZWRzIG1vcmUgd29yayovLAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICAgID0g RU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IENYMjU4NDNfVEVMRVZJU0lP TiwKKwkJCS5hbXV4ICAgICA9IDAsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVY X0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSBDWDI1ODQzX0NPTVBPU0lURTEsCisJCQkuYW11 eCAgICAgPSA0LAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJ CQkudm11eCAgICAgPSBDWDI1ODQzX1NWSURFTywKKwkJCS5hbXV4ICAgICA9IDUsCisJCX0gfSwK KwkJLnR2bm9ybXMJPSBFRVRJX1hDNTAwMF9ERUZBVUxUX0FOQUxPRywKKwkJLmZtbm9ybXMJPSBF RVRJX1hDNTAwMF9ERUZBVUxUX0ZNLAorCQkuYXRzY25vcm1zCT0gRUVUSV9YQzUwMDBfREVGQVVM VF9BVFNDLAorCQkucWFtbm9ybXMJPSBFRVRJX1hDNTAwMF9ERUZBVUxUX1FBTSwKKwl9LAorCVtF TTI4ODNfQk9BUkRfRVFVSU5VWF9UVUJFU1RJQ0tfQVRTQ10gPSB7CisJCS5uYW1lICAgICAgICAg PSAiRXF1aW51eCBUdWJlU3RpY2sgSHlicmlkIEFUU0MiLAorCQkudmNoYW5uZWxzICAgID0gMywK KwkJLm5vcm0gICAgICAgICA9IFY0TDJfU1REX05UU0NfTSwKKwkJLnR1bmVyX3R5cGUgICA9IFRV TkVSX1hDRUlWRV9YQzUwMDAsCisJCS5oYXNfdHVuZXIgICAgPSAxLAorCQkuaGFzX2ludHR1bmVy ID0gMSwKKyNpZiAwCisJCS5wb3dlcnNhdmluZyAgPSAxLAorI2VuZGlmCisJCS5kZWNvZGVyICAg ICAgPSBFTTI4WFhfQ1gyNTg0MywKKwkJLmRldl9tb2RlcyAgICA9IEVNMjhYWF9WSURFTyB8IEVN MjhYWF9BVURJTyB8IEVNMjhYWF9SQURJTyB8IEVNMjhYWF9WQkkvKiB8IEVNMjhYWF9BVFNDIG5l ZWRzIG1vcmUgd29yayovLAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICAgID0g RU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IENYMjU4NDNfVEVMRVZJU0lP TiwKKwkJCS5hbXV4ICAgICA9IDAsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVY X0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSBDWDI1ODQzX0NPTVBPU0lURTEsCisJCQkuYW11 eCAgICAgPSA0LAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJ CQkudm11eCAgICAgPSBDWDI1ODQzX1NWSURFTywKKwkJCS5hbXV4ICAgICA9IDUsCisJCX0gfSwK KwkJLnR2bm9ybXMJPSBFRVRJX1hDNTAwMF9ERUZBVUxUX0FOQUxPRywKKwkJLmZtbm9ybXMJPSBF RVRJX1hDNTAwMF9ERUZBVUxUX0ZNLAorCQkuYXRzY25vcm1zCT0gRUVUSV9YQzUwMDBfREVGQVVM VF9BVFNDLAorCQkucWFtbm9ybXMJPSBFRVRJX1hDNTAwMF9ERUZBVUxUX1FBTSwKKwl9LAorCVtF TTI4ODhfQk9BUkRfRFZCX1RDX0hZQlJJRF0gPSB7CisJCS5uYW1lCSAgICAgID0gIlBpbm5hY2xl IDUxMGUiLAorCQkuZW1fdHlwZSAgICAgID0gRU0yODg4LAorCQkudmNoYW5uZWxzICAgID0gMywK KwkJLm5vcm0JICAgICAgPSBWNEwyX1NURF9QQUxfQkcsCisJCS50dW5lcl90eXBlICAgPSBUVU5F Ul9YQ0VJVkVfWEM1MDAwLAorCQkuaGFzX2ludHR1bmVyID0gMSwKKwkJLmhhc190dW5lciAgICA9 IDEsCisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfQ1gyNTg0MywKKwkJLmRldl9tb2RlcyAgICA9 IEVNMjhYWF9WSURFTyB8IEVNMjhYWF9WQkkgfCBFTTI4WFhfQVVESU8gfCBFTTI4WFhfUkFESU8s CisJCS5wb3dlcnNhdmluZyAgPSAxLAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUg ICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IENYMjU4NDNfVEVM RVZJU0lPTiwKKwkJCS5hbXV4ICAgICA9IDAsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhY WF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSBDWDI1ODQzX0NPTVBPU0lURTEsCisJ CQkuYW11eCAgICAgPSA0LAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklE RU8sCisJCQkudm11eCAgICAgPSBDWDI1ODQzX1NWSURFTywKKwkJCS5hbXV4ICAgICA9IDUsCisJ CX0gfSwKKwkJLnR2bm9ybXMJPSBFRVRJX1hDNTAwMF9ERUZBVUxUX0FOQUxPRywKKwkJLmZtbm9y bXMJPSBFRVRJX1hDNTAwMF9ERUZBVUxUX0ZNLAorCX0sCisJW0VNMjg4OF9CT0FSRF9FTVBJQV9I WUJSSURdID0geworCQkubmFtZQkgICAgICA9ICJFbXBpYSBIeWJyaWQgUENUViIsCisJCS5lbV90 eXBlICAgICAgPSBFTTI4ODgsIC8qIFRPRE8gcmVhZCB0aGlzIGZyb20gdGhlIGNoaXAgKi8KKwkJ LnZjaGFubmVscyAgICA9IDMsCisJCS5ub3JtCSAgICAgID0gVjRMMl9TVERfTlRTQ19NLAorCQku dHVuZXJfdHlwZSAgID0gVFVORVJfWENFSVZFX1hDMzAyOCwKKwkJLmhhc19pbnR0dW5lciA9IDEs CisJCS5oYXNfdHVuZXIgICAgPSAxLAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX0NYMjU4NDMs CisJCS5kZXZfbW9kZXMgICAgPSBFTTI4WFhfVklERU8gfCBFTTI4WFhfVkJJIHwgRU0yOFhYX0RW QlQgfCBFTTI4WFhfQVVESU8gfCBFTTI4WFhfUkFESU8sCisJCS5wb3dlcnNhdmluZyAgPSAxLAor CQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJ U0lPTiwKKwkJCS52bXV4ICAgICA9IENYMjU4NDNfVEVMRVZJU0lPTiwKKwkJCS5hbXV4ICAgICA9 IDAsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQku dm11eCAgICAgPSBDWDI1ODQzX0NPTVBPU0lURTEsCisJCQkuYW11eCAgICAgPSA0LAorCQl9LCB7 CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSBDWDI1 ODQzX1NWSURFTywKKwkJCS5hbXV4ICAgICA9IDUsCisJCX0gfSwKKwkJLnR2bm9ybXMJPSBFRVRJ X1hDMzAyOExfREVGQVVMVF9BTkFMT0csCisJCS5kdmJub3Jtcwk9IEVFVElfWEMzMDI4TF9ERUZB VUxUX0RWQlQsCisJCS5mbW5vcm1zCT0gRUVUSV9YQzMwMjhMX0RFRkFVTFRfRk0sCisJfSwKKwlb RU0yODYwX0JPQVJEX0tBSU9NWV9UVk5QQ19VMl0gPSB7CisJCS8qIFRPRE8gcmFkaW8gc3VwcG9y dCAqLworCQkubmFtZQkgICAgICA9ICJLYWlvbXkgVFZuUEMgVTIiLAorCQkudmNoYW5uZWxzICAg ID0gMywKKwkJLm5vcm0gICAgICAgICA9IFY0TDJfU1REX05UU0NfTSwKKwkJLmhhc190dW5lciAg ICA9IDEsCisJCS5oYXNfaW50dHVuZXIgPSAxLAorCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWENF SVZFX1hDMzAyOCwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAorCQkuaXJfa2V5 dGFiICAgID0gaXJfY29kZXNfZW1fa3dvcmxkLAorCQkuaXJfZ2V0a2V5ICAgID0gZW0yODYwX2dl dF9rZXlfa2Fpb215LAorCQkuZGV2X21vZGVzICAgID0gRU0yOFhYX1ZJREVPIHwgRU0yOFhYX1ZC SSB8IEVNMjhYWF9BVURJTzIsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgICAg PSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJ VEUwLAorCQkJLmFtdXggICAgID0gMCwKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZN VVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMSwKKwkJCS5h bXV4ICAgICA9IDEsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywK KwkJCS52bXV4ICAgICA9IFRWUDUxNTBfU1ZJREVPLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSB9 LAorCQkubWFudWFsX2dwaW8JPSAxLAorCQkuZ3Bpb19yZWdzIAk9IEVFVElfREVGQVVMVF9HUElP LAorCQkudHZub3Jtcwk9IEVFVElfWEMzMDI4X0RFRkFVTFRfQU5BTE9HLAorCX0sCisJW0VNMjg2 MV9CT0FSRF9QT0xMSU5fVVNCX1IxXSA9IHsKKwkJLm5hbWUgICAgICAgICAgPSAiUG9sbGluIFVT Qi1SMSIsCisJCS52Y2hhbm5lbHMgICAgID0gMSwKKwkJLm5vcm0gICAgICAgICAgPSBWNEwyX1NU RF9QQUxfQkcsCisJCS5kZWNvZGVyICAgICAgID0gRU0yOFhYX1NBQTcxMTMsCisJCS5oYXNfdHVu ZXIgICAgID0gMCwKKwkJLmRldl9tb2RlcyAgICAgID0gRU0yOFhYX1ZJREVPLAorCQkuaW5wdXQg ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJ CQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCisJCQkuYW11eCAgICAgPSAxLAorCQl9 fSwKKwkJLnR2bm9ybXMJPSB7CisJCQl7CisJCQkJLm5hbWUgPSAiUEFMLUJHIiwKKwkJCQkuaWQg PSBWNEwyX1NURF9QQUxfQkcsCisJCQl9LHsKKwkJCQkubmFtZSA9ICJOVFNDIiwKKwkJCQkuaWQg PSBWNEwyX1NURF9OVFNDLAorCQl9fSwKKwl9LAorCVtFTTI4ODJfQk9BUkRfTEVBRFRFS19QQUxN VE9QX0RUVl8yMDBIXSA9IHsKKwkJLyogVE9ETzogRk0gcmFkaW8gc3VwcG9ydCBmb3IgdGhpcyBM ZWFkdGVrIGRldmljZSAqLworCQkubmFtZSAgICAgICAgID0gIkxlYWR0ZWsgUGFsbVRvcCBEVFYg MjAwSCIsCisJCS52Y2hhbm5lbHMgICAgPSAzLAorCQkubm9ybSAgICAgICAgID0gVjRMMl9TVERf UEFMX0JHLAorCQkuaGFzX3R1bmVyICAgID0gMSwKKwkJLmhhc19pbnR0dW5lciA9IDEsCisJCS50 dW5lcl90eXBlICAgPSBUVU5FUl9YQ0VJVkVfWEMzMDI4LAorCQkuZGVjb2RlciAgICAgID0gRU0y OFhYX1RWUDUxNTAsCisJCS5kZXZfbW9kZXMgICAgPSBFTTI4WFhfVklERU8gfCBFTTI4WFhfVkJJ IHwgRU0yOFhYX0RWQlQgfCBFTTI4WFhfQVVESU8sCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJ CQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gVFZQ NTE1MF9DT01QT1NJVEUwLAorCQkJLmFtdXggICAgID0gMCwKKwkJfSwgeworCQkJLnR5cGUgICAg ID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9T SVRFMSwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9W TVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfU1ZJREVPLAorCQkJLmFtdXggICAg ID0gMSwKKwkJfSB9LAorCQkubWFudWFsX2dwaW8JPSAxLAorCQkuZ3Bpb19yZWdzIAk9IEVFVElf REVGQVVMVF9HUElPLAorCQkudHZub3Jtcwk9IEVFVElfWEMzMDI4X0RFRkFVTFRfQU5BTE9HLAor CQkuZHZibm9ybXMJPSBFRVRJX1hDMzAyOF9ERUZBVUxUX0RWQlQsCisJfSwKKwlbRU0yODIwX0JP QVJEX0NPTVBST19WSURFT19NQVRFXSA9IHsKKwkJLm5hbWUgICAgICAgICA9ICJDb21wcm8gVmlk ZW9NYXRlIEZvcllvdS9TdGVyZW8iLAorCQkudmNoYW5uZWxzICAgID0gMiwKKwkJLnR1bmVyX3R5 cGUgICA9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywKKwkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdf UFJFU0VOVCwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAorCQkuZGV2X21vZGVz ICAgID0gRU0yOFhYX1ZJREVPLAorCQkuaW5wdXQgICAgICAgICAgPSB7IHsKKwkJCS50eXBlICAg ICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBP U0lURTAsCisJCQkuYW11eCAgICAgPSAxLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhf Vk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKKwkJCS5hbXV4ICAg ICA9IDEsCisJCX0gfSwKKwl9LAorfTsKKworY29uc3QgdW5zaWduZWQgaW50IGVtMjh4eF9iY291 bnQgPSBBUlJBWV9TSVpFKGVtMjh4eF9ib2FyZHMpOworCisvKgorICogc2VlbXMgbGlrZSBpdCdz IHBvc3NpYmxlIHRvIGZsYXNoIHRoZSBlZXByb20sIHNvbWVob3cgb25lIG9mIG15IEhWUiA5MDAg ZGV2aWNlcyBzdWRkZW5seQorICogaGFkIHRoZSBjb250ZW50IG9mIGEgV2luVFYgVVNCIDIgZWVw cm9tIGFuZCB0aHVzIGlkZW50aWZpZWQgaXRzZWxmIGFzIGEgV2ludHYgVVNCIDIKKyAqIGRldmlj ZSB3aGljaCBvZiBjb3Vyc2UgZGlkbid0IHdvcmsuLi4KKyAqCisgKi8KKworLyogdGFibGUgb2Yg ZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLworc3RydWN0IHVzYl9kZXZpY2Vf aWQgZW0yOHh4X2lkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRSgweGViMWEsIDB4MjgwMCks IC5kcml2ZXJfaW5mbyA9IEVNMjgwMF9CT0FSRF9HRU5FUklDIH0sCisJeyBVU0JfREVWSUNFKDB4 ZWIxYSwgMHgyODIwKSwgLmRyaXZlcl9pbmZvID0gRU0yODIwX0JPQVJEX0dFTkVSSUMgfSwKKwl7 IFVTQl9ERVZJQ0UoMHhlYjFhLCAweDI4MjEpLCAuZHJpdmVyX2luZm8gPSBFTTI4MjFfQk9BUkRf R0VORVJJQyB9LAorCXsgVVNCX0RFVklDRSgweGViMWEsIDB4Mjc1MCksIC5kcml2ZXJfaW5mbyA9 IEVNMjc1MF9CT0FSRF9HRU5FUklDIH0sCisJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHgyODYwKSwg LmRyaXZlcl9pbmZvID0gRU0yODYwX0JPQVJEX0dFTkVSSUMgfSwKKwl7IFVTQl9ERVZJQ0UoMHhl YjFhLCAweDI4NjEpLCAuZHJpdmVyX2luZm8gPSBFTTI4NjFfQk9BUkRfR0VORVJJQyB9LAorCXsg VVNCX0RFVklDRSgweGViMWEsIDB4Mjg4MSksIC5kcml2ZXJfaW5mbyA9IEVNMjg4MV9CT0FSRF9H RU5FUklDIH0sCisJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHgyODcwKSwgLmRyaXZlcl9pbmZvID0g RU0yODcwX0JPQVJEX0dFTkVSSUMgfSwKKwl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweGUzMTApLCAu ZHJpdmVyX2luZm8gPSBFTTI4ODBfQk9BUkRfTVNJX0RJR0lWT1hfQUQgfSwKKwl7IFVTQl9ERVZJ Q0UoMHhlYjFhLCAweGUzMjApLCAuZHJpdmVyX2luZm8gPSBFTTI4ODBfQk9BUkRfTVNJX0RJR0lW T1hfQURfSUkgfSwKKwl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweGUzMDApLCAuZHJpdmVyX2luZm8g PSBFTTI4NjFfQk9BUkRfS1dPUkxEX1BWUlRWXzMwMFUgfSwKKwl7IFVTQl9ERVZJQ0UoMHhlYjFh LCAweGUzNTApLCAuZHJpdmVyX2luZm8gPSBFTTI4NzBfQk9BUkRfS1dPUkxEXzM1MFUgfSwKKwl7 IFVTQl9ERVZJQ0UoMHhlYjFhLCAweGUzNTUpLCAuZHJpdmVyX2luZm8gPSBFTTI4NzBfQk9BUkRf S1dPUkxEXzM1NVUgfSwKKwl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweGUzNTcpLCAuZHJpdmVyX2lu Zm8gPSBFTTI4NzBfQk9BUkRfS1dPUkxEXzM1NVUgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxYWU3LCAw eDAzODApLCAuZHJpdmVyX2luZm8gPSBFTTI4NzBfQk9BUkRfS1dPUkxEXzM1NVUgfSwKKwl7IFVT Ql9ERVZJQ0UoMHgwY2NkLCAweDAwMzYpLCAuZHJpdmVyX2luZm8gPSBFTTI4MjBfQk9BUkRfVEVS UkFURUNfQ0lORVJHWV8yNTAgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMzA0LCAweDAyMDgpLCAuZHJp dmVyX2luZm8gPSBFTTI4MjBfQk9BUkRfUElOTkFDTEVfVVNCXzIgfSwKKwl7IFVTQl9ERVZJQ0Uo MHgyMDQwLCAweDQyMDApLCAuZHJpdmVyX2luZm8gPSBFTTI4MjBfQk9BUkRfSEFVUFBBVUdFX1dJ TlRWX1VTQl8yIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg0MjAxKSwgLmRyaXZlcl9pbmZv ID0gRU0yODIwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9VU0JfMl9SMiB9LAorCXsgVVNCX0RFVklD RSgweDIwNDAsIDB4NjUwYSksIC5kcml2ZXJfaW5mbyA9IEVNMjg3MF9CT0FSRF9IQVVQUEFVR0Vf V0lOVFZfVVNCXzJfUjIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMzA0LCAweDAyMDcpLCAuZHJpdmVy X2luZm8gPSBFTTI4MjBfQk9BUkRfUElOTkFDTEVfRFZDXzkwIH0sCisJeyBVU0JfREVWSUNFKDB4 MjMwNCwgMHgwMjFhKSwgLmRyaXZlcl9pbmZvID0gRU0yODIwX0JPQVJEX1BJTk5BQ0xFX0RWQ18x MDAgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDY1MDApLCAuZHJpdmVyX2luZm8gPSBFTTI4 ODBfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl85MDAgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQw LCAweDY1MDIpLCAuZHJpdmVyX2luZm8gPSBFTTI4ODBfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hW Ul85MDBfUjIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwY2NkLCAweDAwNDIpLCAuZHJpdmVyX2luZm8g PSBFTTI4ODBfQk9BUkRfVEVSUkFURUNfSFlCUklEX1hTIH0sCisJeyBVU0JfREVWSUNFKDB4MGNj ZCwgMHgwMDRmKSwgLmRyaXZlcl9pbmZvID0gRU0yODYwX0JPQVJEX1RFUlJBVEVDX0hZQlJJRF9Y UyB9LAorCXsgVVNCX0RFVklDRSgweDBjY2QsIDB4MDA0YyksIC5kcml2ZXJfaW5mbyA9IEVNMjg4 MF9CT0FSRF9URVJSQVRFQ19IWUJSSURfWFNfRlIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwY2NkLCAw eDAwNWUpLCAuZHJpdmVyX2luZm8gPSBFTTI4ODJfQk9BUkRfVEVSUkFURUNfSFlCUklEX1hTIH0s CisJeyBVU0JfREVWSUNFKDB4MGNjZCwgMHgwMDQzKSwgLmRyaXZlcl9pbmZvID0gRU0yODcwX0JP QVJEX1RFUlJBVEVDX1hTIH0sCisJeyBVU0JfREVWSUNFKDB4MGNjZCwgMHgwMDQ3KSwgLmRyaXZl cl9pbmZvID0gRU0yODgwX0JPQVJEX1RFUlJBVEVDX1BST0RJR1lfWFMgfSwKKwl7IFVTQl9ERVZJ Q0UoMHgxODViLCAweDI4NzApLCAuZHJpdmVyX2luZm8gPSBFTTI4NzBfQk9BUkRfQ09NUFJPX1ZJ REVPTUFURSB9LAorCXsgVVNCX0RFVklDRSgweDA0MTMsIDB4NjAyMyksIC5kcml2ZXJfaW5mbyA9 IEVNMjgwMF9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfVVNCSUkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgy MDAxLCAweGYxMTIpLCAuZHJpdmVyX2luZm8gPSBFTTI4MjBfQk9BUkRfRExJTktfVVNCX1RWIH0s CisJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHgyODgzKSwgLmRyaXZlcl9pbmZvID0gRU0yODgzX0JP QVJEX0dFTkVSSUMgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDY1MTMpLCAuZHJpdmVyX2lu Zm8gPSBFTTI4ODNfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl85NTAgfSwKKwl7IFVTQl9ERVZJ Q0UoMHgyMDQwLCAweDY1MTcpLCAuZHJpdmVyX2luZm8gPSBFTTI4ODNfQk9BUkRfSEFVUFBBVUdF X1dJTlRWX0hWUl85NTAgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDY1MWIpLCAuZHJpdmVy X2luZm8gPSBFTTI4ODNfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl85NTAgfSwKKwl7IFVTQl9E RVZJQ0UoMHgyMDQwLCAweDY1MWYpLCAuZHJpdmVyX2luZm8gPSBFTTI4ODNfQk9BUkRfSEFVUFBB VUdFX1dJTlRWX0hWUl85NTAgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMzA0LCAweDAyMjcpLCAuZHJp dmVyX2luZm8gPSBFTTI4ODNfQk9BUkRfUElOTkFDTEVfUENUVl9IRF9QUk8gfSwKKwl7IFVTQl9E RVZJQ0UoMHgyMzA0LCAweDAyMjYpLCAuZHJpdmVyX2luZm8gPSBFTTI4ODJfQk9BUkRfUElOTkFD TEVfSFlCUklEX1BSTyB9LAorCXsgVVNCX0RFVklDRSgweGViMWEsIDB4Mjc1MSksIC5kcml2ZXJf aW5mbyA9IEVNMjc1MV9CT0FSRF9FTVBJQV9TQU1QTEUgfSwKKwl7IFVTQl9ERVZJQ0UoMHhlYjFh LCAweGUzMDUpLCAuZHJpdmVyX2luZm8gPSBFTTI4ODBfQk9BUkRfS1dPUkxEX0RWQl8zMDVVIH0s CisJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHhhMzE2KSwgLmRyaXZlcl9pbmZvID0gRU0yODgzX0JP QVJEX0tXT1JMRF9IWUJSSURfQTMxNiB9LAorCXsgVVNCX0RFVklDRSgweDA5M2IsIDB4YTAwNSks IC5kcml2ZXJfaW5mbyA9IEVNMjg2MV9CT0FSRF9QTEVYVE9SX1BYX1RWMTAwVSB9LAorCXsgVVNC X0RFVklDRSgweGViMWEsIDB4NTBhNiksIC5kcml2ZXJfaW5mbyA9IEVNMjg2MF9CT0FSRF9HQURN RUlfVVRWMzMwIH0sCisJeyBVU0JfREVWSUNFKDB4MGNjZCwgMHgwMDcyKSwgLmRyaXZlcl9pbmZv ID0gRU0yODgzX0JPQVJEX1RFUlJBVEVDX0hZQlJJRF9YU19GTSB9LAorCXsgVVNCX0RFVklDRSgw eDBjY2QsIDB4MDA5MiksIC5kcml2ZXJfaW5mbyA9IEVNMjg4M19CT0FSRF9URVJSQVRFQ19IWUJS SURfWFNfRk0gfSwKKwl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweDI4NjMpLCAuZHJpdmVyX2luZm8g PSBFTTI4NjNfQk9BUkRfRU1QSUFfR0VORVJJQyB9LAorCisJeyBVU0JfREVWSUNFKDB4ZWIxYSwg MHhmMzA2KSwgLmRyaXZlcl9pbmZvID0gRU0yODgzX0JPQVJEX0tXT1JMRF9IWUJSSURfRjMwNiB9 LAorCXsgVVNCX0RFVklDRSgweGViMWEsIDB4ZTMwNiksIC5kcml2ZXJfaW5mbyA9IEVNMjg4M19C T0FSRF9LV09STERfSFlCUklEX0YzMDYgfSwgLyogZGV2ZWxvcG1lbnQgb25seSAqLworCXsgVVNC X0RFVklDRSgweDFiODAsIDB4ZTMyOSksIC5kcml2ZXJfaW5mbyA9IEVNMjg4OF9CT0FSRF9LV09S TERfSFlCUklEX0UzMjkgfSwKKwl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweDI4ODkpLCAuZHJpdmVy X2luZm8gPSBFTTI4ODhfQk9BUkRfRU1QSUFfSFlCUklEIH0sCisJeyBVU0JfREVWSUNFKDB4ZWIx YSwgMHhlMzIzKSwgLmRyaXZlcl9pbmZvID0gRU0yODgzX0JPQVJEX0tXT1JMRF9IWUJSSURfRTMy MyB9LAorCXsgVVNCX0RFVklDRSgweGViMWEsIDB4YTEzOSksIC5kcml2ZXJfaW5mbyA9IEVNMjg4 OF9CT0FSRF9MSU5DT0xOX1RWX0ZNIH0sCisjaWYgMAorCXsgVVNCX0RFVklDRSgweDIzMDQsIDB4 MDI0MiksIC5kcml2ZXJfaW5mbyA9IEVNMjg4OF9CT0FSRF9EVkJfVENfSFlCUklEIH0sCisjZW5k aWYKKwl7IFVTQl9ERVZJQ0UoMHgwNDM4LCAweGIwMDIpLCAuZHJpdmVyX2luZm8gPSBFTTI4ODNf Qk9BUkRfQVRJX1RWV09OREVSNjAwIH0sCisJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHgyODc1KSwg LmRyaXZlcl9pbmZvID0gRU0yODc1X0JPQVJEX1NBTVBMRV9JU0RCVCB9LAorCXsgVVNCX0RFVklD RSgweGViMWEsIDB4Mjg3OSksIC5kcml2ZXJfaW5mbyA9IEVNMjg3OV9CT0FSRF9TQU1QTEVfRE1C ICAgfSwKKwl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweGUzMDEpLCAuZHJpdmVyX2luZm8gPSBFTTI4 NjBfQk9BUkRfS0FJT01ZX1RWTlBDX1UyIH0sCisJeyBVU0JfREVWSUNFKDB4MDQxMywgMHg2ZjAy KSwgLmRyaXZlcl9pbmZvID0gRU0yODgyX0JPQVJEX0xFQURURUtfUEFMTVRPUF9EVFZfMjAwSCB9 LAorCXsgVVNCX0RFVklDRSgweDE4NWIsIDB4MjA0MSksIC5kcml2ZXJfaW5mbyA9IEVNMjgyMF9C T0FSRF9DT01QUk9fVklERU9fTUFURSB9LAorCQorCXsgfSwKK307CitFWFBPUlRfU1lNQk9MKGVt Mjh4eF9pZF90YWJsZSk7CisKKy8qIFRPRE8gY2xlYW4gdGhpcyB1cCAqLworaW50IGVtMjh4eF9j YXJkX3NldHVwKHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlpbnQgcmV0ID0gMDsKKworI2lmZGVm IFhDRUlWRV9FWFRFUk5BTF9GSVJNV0FSRQorCXN3aXRjaChkZXYtPnR1bmVyX3R5cGUpIHsKKwlj YXNlIFRVTkVSX1hDRUlWRV9YQzMwMjg6CisJeworCQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3 OworCQlzdGF0aWMgdW5zaWduZWQgY2hhciAqeGMzMDI4X2Zpcm13YXJlOworCisJCWlmICh4YzMw MjhfZmlybXdhcmU9PU5VTEwpIHsKKwkJCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCAiZW1w aWFfeGMzMDI4LmZ3IiwgJmRldi0+dWRldi0+ZGV2KTsKKworCQkJaWYgKHJldCkgeworCQkJCXBy aW50ayhLRVJOX0lORk8iQ291bGRuJ3QgZmluZCBlbXBpYV94YzMwMjguZncsIHBsZWFzZSBydW46 XG4iKTsKKwkJCQlwcmludGsoS0VSTl9JTkZPImNkIC9saWIvZmlybXdhcmVcbiIpOworCQkJCXBy aW50ayhLRVJOX0lORk8ic3VkbyB3Z2V0IG1jZW50cmFsLmRlL2VtcGlhL2VtcGlhX3hjMzAyOC5m d1xuIik7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyJhbmQgcmVwbHVnIHlvdXIgZGV2aWNlXG4iKTsK KwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKworCQkJaWYgKGZ3LT5zaXplICE9IDEyMDI3Mykg eworCQkJCXByaW50ayhLRVJOX0lORk8iRmlybXdhcmUgc2l6ZSBkb2Vzbid0IG1hdGNoLCBwbGVh c2UgYmUgc3VyZVxuIik7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyJ0aGF0IHlvdSBwaWNrZWQgdGhl IGNvcnJlY3QgZmlybXdhcmVcbiIpOworCQkJCXByaW50ayhLRVJOX0lORk8iY2QgL2xpYi9maXJt d2FyZVxuIik7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyJzdWRvIHdnZXQgbWNlbnRyYWwuZGUvZW1w aWEvZW1waWFfeGMzMDI4LmZ3XG4iKTsKKwkJCQlwcmludGsoS0VSTl9JTkZPImFuZCByZXBsdWcg eW91ciBkZXZpY2VcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfSBlbHNlIAorCQkJCXBy aW50ayhLRVJOX0lORk8ieGMzMDI4IGZpcm13YXJlIHN1Y2Nlc3NmdWxseSBsb2FkZWQgdG8gUkFN XG4iKTsKKworCisJCQl4YzMwMjhfZmlybXdhcmUgPSBremFsbG9jKGZ3LT5zaXplLCBHRlBfS0VS TkVMKTsKKwkJCW1lbWNweSh4YzMwMjhfZmlybXdhcmUsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisJ CQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKworCQkJeGMzMDI4X3NldF9maXJtd2FyZSh4YzMwMjhf ZmlybXdhcmUsIDEyMDI3Myk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgVFVORVJfWENFSVZF X1hDNTAwMDoKKwl7CisJCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisKKwkJaWYgKFhDNTAw MF9maXJtd2FyZV9TRVFVRU5DRSA9PSBOVUxMKSB7CisJCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJl KCZmdywgImVtcGlhX3hjNTAwMC5mdyIsICZkZXYtPnVkZXYtPmRldik7CisKKwkJCWlmIChyZXQp IHsKKwkJCQlwcmludGsoS0VSTl9JTkZPIkNvdWxkbid0IGZpbmQgZW1waWFfeGM1MDAwLmZ3LCBw bGVhc2UgcnVuOlxuIik7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyJjZCAvbGliL2Zpcm13YXJlXG4i KTsKKwkJCQlwcmludGsoS0VSTl9JTkZPInN1ZG8gd2dldCBtY2VudHJhbC5kZS9lbXBpYS9lbXBp YV94YzUwMDAuZndcbiIpOworCQkJCXByaW50ayhLRVJOX0lORk8iYW5kIHJlcGx1ZyB5b3VyIGRl dmljZVxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCWlmIChmdy0+c2l6ZSAh PSAxMjM3NikgeworCQkJCXByaW50ayhLRVJOX0lORk8iRmlybXdhcmUgc2l6ZSBkb2Vzbid0IG1h dGNoLCBwbGVhc2UgYmUgc3VyZVxuIik7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyJ0aGF0IHlvdSBw aWNrZWQgdGhlIGNvcnJlY3QgZmlybXdhcmVcbiIpOworCQkJCXByaW50ayhLRVJOX0lORk8iY2Qg L2xpYi9maXJtd2FyZVxuIik7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyJzdWRvIHdnZXQgbWNlbnRy YWwuZGUvZW1waWEvZW1waWFfeGM1MDAwLmZ3XG4iKTsKKwkJCQlwcmludGsoS0VSTl9JTkZPImFu ZCByZXBsdWcgeW91ciBkZXZpY2VcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisK KwkJCVhDNTAwMF9maXJtd2FyZV9TRVFVRU5DRSA9IGt6YWxsb2MoZnctPnNpemUsIEdGUF9LRVJO RUwpOworCQkJbWVtY3B5KFhDNTAwMF9maXJtd2FyZV9TRVFVRU5DRSwgJmZ3LT5kYXRhWzZdLCBm dy0+c2l6ZS02KTsKKwkJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCisJCX0KKwkJYnJlYWs7CisJ fQorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKyNlbmRpZgorCisJc3dpdGNoIChkZXYtPm1vZGVs KSB7CisJY2FzZSBFTTI3NTBfQk9BUkRfRExDV18xMzA6CisJY2FzZSBFTTI3NTFfQk9BUkRfRU1Q SUFfU0FNUExFOgorCXsKKwkJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBSMEZfWENMS19S RUcsICJceDBhIiwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJYnJlYWs7 CisJfQorCWNhc2UgRU0yODIwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9VU0JfMjoKKwljYXNlIEVN MjgyMF9CT0FSRF9IQVVQUEFVR0VfV0lOVFZfVVNCXzJfUjI6CisJY2FzZSBFTTI4NzBfQk9BUkRf SEFVUFBBVUdFX1dJTlRWX1VTQl8yX1IyOgorCXsKKwkJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3Mo ZGV2LCBSMEZfWENMS19SRUcsICJceDI3IiwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJu IHJldDsKKwkJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBSMDZfSTJDX0NMS19SRUcsICJc eDQwIiwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKyNpZmRlZiBFTTI4WFhf VFZFRVBST00KKwkJc3RydWN0IHR2ZWVwcm9tIHR2OworCQlyZXF1ZXN0X21vZHVsZSgidHZlZXBy b20iKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NT0RVTEVTCisJCXJlcXVlc3RfbW9kdWxlKCJp ci1rYmQtaTJjIik7CisJCXJlcXVlc3RfbW9kdWxlKCJtc3AzNDAwIik7CisjZW5kaWYKKwkJLyog Q2FsbCBmaXJzdCBUVmVlcHJvbSAqLworCisjaWZkZWYgRU0yOFhYX1RWRUVQUk9NCisJCWRldi0+ aTJjX2NsaWVudC5hZGRyID0gMHhhMCA+PiAxOworCQl0dmVlcHJvbV9oYXVwcGF1Z2VfYW5hbG9n KCZkZXYtPmkyY19jbGllbnQsICZ0diwgZGV2LT5lZWRhdGEpOworCisJCWRldi0+dHVuZXJfdHlw ZSA9IHR2LnR1bmVyX3R5cGU7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9ICBLRVJORUxfVkVS U0lPTigyLCA2LCAyNikKKwkJaWYgKHR2LmF1ZGlvX3Byb2Nlc3NvciA9PSBBVURJT19DSElQX01T UDM0WFgpIHsKKyNlbHNlCisJCWlmICh0di5hdWRpb19wcm9jZXNzb3IgPT0gVjRMMl9JREVOVF9N U1BYNFhYKSB7CisjZW5kaWYKKwkJCWRldi0+aTJzX3NwZWVkID0gMjA0ODAwMDsKKwkJCWRldi0+ aGFzX21zcDM0eHggPSAxOworCQl9IGVsc2UKKwkJCWRldi0+aGFzX21zcDM0eHggPSAwOworCisJ CWlmIChkZXYtPmhhc19tc3AzNHh4KSB7CisJCQkvKiBTZW5kIGEgcmVzZXQgdG8gb3RoZXIgY2hp cHMgdmlhIGdwaW8gKi8KKwkJCXJldCA9IGVtMjh4eF93cml0ZV9yZWdzX3JlcShkZXYsIDB4MDAs IDB4MDgsICJceGY3IiwgMSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQkJ dWRlbGF5KDI1MDApOworCQkJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwgMHgwMCwg MHgwOCwgIlx4ZmYiLCAxKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCQl1 ZGVsYXkoMjUwMCk7CisJCX0KKyNlbmRpZgorCisJCWJyZWFrOworCX0KKwljYXNlIEVNMjgyMF9C T0FSRF9LV09STERfUFZSVFYyODAwUkY6CisJeworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhk ZXYsIFIwRl9YQ0xLX1JFRywgIlx4MjciLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4g cmV0OworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIwNl9JMkNfQ0xLX1JFRywgIlx4 NDAiLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQkvKiBHUElPIGVuYWJs ZXMgc291bmQgb24gS1dPUkxEIFBWUiBUViAyODAwUkYgKi8KKwkJcmV0ID0gZW0yOHh4X3dyaXRl X3JlZ3NfcmVxKGRldiwgMHgwMCwgMHgwOCwgIlx4ZjkiLCAxKTsKKwkJaWYgKHJldCA8IDApCisJ CQlyZXR1cm4gcmV0OworCQlicmVhazsKKwl9CisJY2FzZSBFTTI4ODBfQk9BUkRfSEFVUFBBVUdF X1dJTlRWX0hWUl85MDA6CisJeworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIwRl9Y Q0xLX1JFRywgIlx4MjciLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQly ZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIwNl9JMkNfQ0xLX1JFRywgIlx4NGMiLCAxKTsK KwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQltc2xlZXAoMTApOworCQlyZXQgPSBl bTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MDgsICJceDZkIiwgMSk7CisJCWlmIChyZXQgPCAwKQor CQkJcmV0dXJuIHJldDsKKwkJbXNsZWVwKDEwKTsKKwkJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3Mo ZGV2LCAweDA4LCAiXHg3ZCIsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJ CW1zbGVlcCgxMCk7CisjaWZkZWYgQ09ORklHX01PRFVMRVMKKwkJcmVxdWVzdF9tb2R1bGUoInR2 ZWVwcm9tIik7CisjZW5kaWYKKwkJYnJlYWs7CisJfQorCWNhc2UgRU0yODIwX0JPQVJEX01TSV9W T1hfVVNCXzI6CisJeworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIwRl9YQ0xLX1JF RywgIlx4MjciLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlyZXQgPSBl bTI4eHhfd3JpdGVfcmVncyhkZXYsIFIwNl9JMkNfQ0xLX1JFRywgIlx4NDAiLCAxKTsKKwkJaWYg KHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQkvKiBlbmFibGVzIGF1ZGlvIGZvciB0aGF0IGRl dmljZSAqLworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCAweDAwLCAweDA4LCAi XHhmZCIsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCWJyZWFrOworCX0K KwljYXNlIEVNMjg4MF9CT0FSRF9URVJSQVRFQ19IWUJSSURfWFNfRlI6CisJeworCQlyZXQgPSBl bTI4eHhfd3JpdGVfcmVncyhkZXYsIFIwRl9YQ0xLX1JFRywgIlx4MjciLCAxKTsKKwkJaWYgKHJl dCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIw Nl9JMkNfQ0xLX1JFRywgIlx4NDAiLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0 OworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MDgsICJceGZkIiwgMSk7CisJCWlm IChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJbXNsZWVwKDEwKTsKKwkJcmV0ID0gZW0yOHh4 X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHhmZiIsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJl dHVybiByZXQ7CisJCW1zbGVlcCgxMCk7CisJCXJldCA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwg MHgwOCwgIlx4ZmUiLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQltc2xl ZXAoMTApOworCisJCXJldCA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwNCwgIlx4MDAiLCAx KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQltc2xlZXAoMTAwKTsKKwkJcmV0 ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA0LCAiXHgwOCIsIDEpOworCQlpZiAocmV0IDwg MCkKKwkJCXJldHVybiByZXQ7CisJCW1zbGVlcCgxMDApOworCQlyZXQgPSBlbTI4eHhfd3JpdGVf cmVncyhkZXYsIDB4MDgsICJceGZlIiwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJl dDsKKwkJbXNsZWVwKDEwMCk7CisJCWJyZWFrOworCX0KKworCWNhc2UgRU0yODgwX0JPQVJEX1RF UlJBVEVDX0hZQlJJRF9YUzoKKwljYXNlIEVNMjg2MF9CT0FSRF9URVJSQVRFQ19IWUJSSURfWFM6 CisJeworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIwRl9YQ0xLX1JFRywgIlx4OTci LCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlyZXQgPSBlbTI4eHhfd3Jp dGVfcmVncyhkZXYsIFIwNl9JMkNfQ0xLX1JFRywgIlx4NDAiLCAxKTsKKwkJaWYgKHJldCA8IDAp CisJCQlyZXR1cm4gcmV0OworCQltc2xlZXAoMTApOworCQlicmVhazsKKwl9CisJY2FzZSBFTTI4 ODJfQk9BUkRfVEVSUkFURUNfSFlCUklEX1hTOgorCWNhc2UgRU0yODgyX0JPQVJEX0xFQURURUtf UEFMTVRPUF9EVFZfMjAwSDoKKwl7CisJCXJldCA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgUjBG X1hDTEtfUkVHLCAiXHgwNyIsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJ CXJldCA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgUjA2X0kyQ19DTEtfUkVHLCAiXHg0YyIsIDEp OworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCW1zbGVlcCgxMCk7CisJCXJldCA9 IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwOCwgIlx4NmQiLCAxKTsKKwkJaWYgKHJldCA8IDAp CisJCQlyZXR1cm4gcmV0OworCQltc2xlZXAoMTApOworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVn cyhkZXYsIDB4MDgsICJceDdkIiwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsK KwkJbXNsZWVwKDEwKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgRU0yODgxX0JPQVJEX0ROVF9EQTJf SFlCUklEOgorCWNhc2UgRU0yODYxX0JPQVJEX0tXT1JMRF9QVlJUVl8zMDBVOgorCWNhc2UgRU0y ODgwX0JPQVJEX0tXT1JMRF9EVkJfMzEwVToKKwljYXNlIEVNMjg4MF9CT0FSRF9LV09STERfRFZC XzMwNVU6CisJY2FzZSBFTTI4ODBfQk9BUkRfTVNJX0RJR0lWT1hfQUQ6CisJY2FzZSBFTTI4ODBf Qk9BUkRfTVNJX0RJR0lWT1hfQURfSUk6CisJeworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhk ZXYsIFIwRl9YQ0xLX1JFRywgIlx4MjciLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4g cmV0OworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIwNl9JMkNfQ0xLX1JFRywgIlx4 NGMiLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQltc2xlZXAoMTApOwor CQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MDgsICJceDZkIiwgMSk7CisJCWlmIChy ZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJbXNsZWVwKDEwKTsKKwkJcmV0ID0gZW0yOHh4X3dy aXRlX3JlZ3MoZGV2LCAweDA4LCAiXHg3ZCIsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVy biByZXQ7CisJCW1zbGVlcCgxMCk7CisJCWJyZWFrOworCX0KKy8qCQljYXNlIEVNMjg3MF9CT0FS RF9DT01QUk9fVklERU9NQVRFOiBUT0RPICovCisJY2FzZSBFTTI4NzBfQk9BUkRfUElOTkFDTEVf UENUVl9EVkI6CisJeworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIwNl9JMkNfQ0xL X1JFRywgIlx4NDAiLCAxKTsKKwkJLyogdGhpcyBkZXZpY2UgbmVlZHMgc29tZSBncGlvIHdyaXRl cyB0byBnZXQgdGhlIERWQi1UIGRlbW9kIHdvcmsgKi8KKwkJcmV0ID0gZW0yOHh4X3dyaXRlX3Jl Z3MoZGV2LCAweDA4LCAiXHhmZSIsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7 CisJCW1kZWxheSg3MCk7CisJCXJldCA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwOCwgIlx4 ZGUiLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQltZGVsYXkoNzApOwor CQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MDgsICJceGZlIiwgMSk7CisJCWlmIChy ZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJbWRlbGF5KDcwKTsKKwkJcmV0ID0gZW0yOHh4X3dy aXRlX3JlZ3MoZGV2LCBSMEZfWENMS19SRUcsICJceDIyIiwgMSk7IC8qIHN3aXRjaCBlbTI4ODAg cmMgcHJvdG9jb2wgKi8KKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlicmVhazsK Kwl9CisJY2FzZSBFTTI4NzBfQk9BUkRfVEVSUkFURUNfWFNfTVQyMDYwOgorCXsKKwkJcmV0ID0g ZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBSMEZfWENMS19SRUcsICJceDI3IiwgMSk7CisJCWlmIChy ZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBS MDZfSTJDX0NMS19SRUcsICJceDQwIiwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJl dDsKKwkJLyogdGhpcyBkZXZpY2UgbmVlZHMgc29tZSBncGlvIHdyaXRlcyB0byBnZXQgdGhlIERW Qi1UIGRlbW9kIHdvcmsgKi8KKwkJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAi XHhmZSIsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCW1kZWxheSg3MCk7 CisJCXJldCA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwOCwgIlx4ZGUiLCAxKTsKKwkJaWYg KHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQltZGVsYXkoNzApOworCQlyZXQgPSBkZXYtPmVt Mjh4eF93cml0ZV9yZWdzKGRldiwgMHgwOCwgIlx4ZmUiLCAxKTsKKwkJaWYgKHJldCA8IDApCisJ CQlyZXR1cm4gcmV0OworCQltZGVsYXkoNzApOworCQlicmVhazsKKwl9CisJY2FzZSBFTTI4NzBf Qk9BUkRfS1dPUkxEXzM1MFU6CisJeworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIw Rl9YQ0xLX1JFRywgIlx4MjciLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0Owor CQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIwNl9JMkNfQ0xLX1JFRywgIlx4NDAiLCAx KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlyZXQgPSBlbTI4eHhfd3JpdGVf cmVncyhkZXYsIDB4MDgsICJceGRmIiwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJl dDsKKwkJbXNsZWVwKDEwKTsKKwkJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAi XHhkZSIsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCW1zbGVlcCgxMCk7 CisJCXJldCA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwOCwgIlx4ZmUiLCAxKTsKKwkJaWYg KHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQltc2xlZXAoMTApOworCQlyZXQgPSBlbTI4eHhf d3JpdGVfcmVncyhkZXYsIDB4MDgsICJceDZlIiwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0 dXJuIHJldDsKKwkJbXNsZWVwKDEwKTsKKwkJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAw eDA4LCAiXHg3ZSIsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCW1zbGVl cCgxMCk7CisJCWJyZWFrOworCX0KKwljYXNlIEVNMjg3MF9CT0FSRF9LV09STERfMzU1VToKKwlj YXNlIEVNMjg3MF9CT0FSRF9DT01QUk9fVklERU9NQVRFOgorCXsKKwkJcmV0ID0gZW0yOHh4X3dy aXRlX3JlZ3MoZGV2LCBSMEZfWENMS19SRUcsICJceDI3IiwgMSk7CisJCWlmIChyZXQgPCAwKQor CQkJcmV0dXJuIHJldDsKKwkJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBSMDZfSTJDX0NM S19SRUcsICJceDQwIiwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJLyog VE9ETzogc29tZW9uZSBjYW4gZG8gc29tZSBjbGVhbnVwIGhlcmUuLi4gbm90IGV2ZXJ5dGhpbmcn cyBuZWVkZWQgKi8KKwkJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA0LCAiXHgwMCIs IDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCW1zbGVlcCgxMCk7CisJCXJl dCA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwNCwgIlx4MDEiLCAxKTsKKwkJaWYgKHJldCA8 IDApCisJCQlyZXR1cm4gcmV0OworCQltc2xlZXAoMTApOworCQlyZXQgPSBlbTI4eHhfd3JpdGVf cmVncyhkZXYsIDB4MDgsICJceGZkIiwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJl dDsKKwkJbWRlbGF5KDcwKTsKKwkJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAi XHhmYyIsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCW1kZWxheSg3MCk7 CisJCXJldCA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwOCwgIlx4ZGMiLCAxKTsKKwkJaWYg KHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQltZGVsYXkoNzApOworCQlyZXQgPSBlbTI4eHhf d3JpdGVfcmVncyhkZXYsIDB4MDgsICJceGZjIiwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0 dXJuIHJldDsKKwkJbWRlbGF5KDcwKTsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBFTTI4ODNfQk9B UkRfUElOTkFDTEVfUENUVl9IRF9QUk86CisJY2FzZSBFTTI4ODJfQk9BUkRfUElOTkFDTEVfSFlC UklEX1BSTzoKKwljYXNlIEVNMjg4MF9CT0FSRF9IQVVQUEFVR0VfV0lOVFZfSFZSXzkwMF9SMjoK KwljYXNlIEVNMjg4M19CT0FSRF9LV09STERfSFlCUklEX0UzMjM6CisJeworCQlyZXQgPSBlbTI4 eHhfd3JpdGVfcmVncyhkZXYsIFIwRl9YQ0xLX1JFRywgIlx4MjciLCAxKTsKKwkJaWYgKHJldCA8 IDApCisJCQlyZXR1cm4gcmV0OworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIwNl9J MkNfQ0xLX1JFRywgIlx4NDAiLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0Owor CQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MDgsICJceGZmIiwgMSk7CisJCWlmIChy ZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAw eDA0LCAiXHgwMCIsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCW1zbGVl cCgxMDApOworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MDQsICJceDA4IiwgMSk7 CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJbXNsZWVwKDEwMCk7CisJCXJldCA9 IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwOCwgIlx4ZmYiLCAxKTsKKwkJaWYgKHJldCA8IDAp CisJCQlyZXR1cm4gcmV0OworCQltc2xlZXAoNTApOworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVn cyhkZXYsIDB4MDgsICJceDJkIiwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsK KwkJbXNsZWVwKDUwKTsKKwkJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHgz ZCIsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJLyogZW5hYmxlIGF1 ZGlvIDEyIG1oeiBpMnMqLworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MGYsICJc eGE3IiwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJbXNsZWVwKDEwKTsK KwkJYnJlYWs7CisJfQorCWNhc2UgRU0yODgzX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfOTUw OgorCWNhc2UgRU0yODgzX0JPQVJEX0FUSV9UVldPTkRFUjYwMDoKKwljYXNlIEVNMjg4M19CT0FS RF9LV09STERfSFlCUklEX0EzMTY6CisJeworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYs IFIwRl9YQ0xLX1JFRywgIlx4MjciLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0 OworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIwNl9JMkNfQ0xLX1JFRywgIlx4NDAi LCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlyZXQgPSBlbTI4eHhfd3Jp dGVfcmVncyhkZXYsIDB4MDgsICJceGZmIiwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJu IHJldDsKKwkJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA0LCAiXHgwMCIsIDEpOwor CQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCW1zbGVlcCgxMDApOworCQlyZXQgPSBl bTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MDQsICJceDA4IiwgMSk7CisJCWlmIChyZXQgPCAwKQor CQkJcmV0dXJuIHJldDsKKwkJbXNsZWVwKDEwMCk7CisJCXJldCA9IGVtMjh4eF93cml0ZV9yZWdz KGRldiwgMHgwOCwgIlx4ZmYiLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0Owor CQltc2xlZXAoNTApOworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MDgsICJceDJk IiwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJbXNsZWVwKDUwKTsKKwkJ cmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHgzZCIsIDEpOworCQlpZiAocmV0 IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAw eDBmLCAiXHhhNyIsIDEpOyAvKiBlbmFibGUgYXVkaW8gMTIgbWh6IGkycyovCisJCWlmIChyZXQg PCAwKQorCQkJcmV0dXJuIHJldDsKKwkJbXNsZWVwKDEwKTsKKwkJYnJlYWs7CisJfQorCWNhc2Ug RU0yODgxX0JPQVJEX1BJTk5BQ0xFX0hZQlJJRF9QUk86CisJeworCQlyZXQgPSBlbTI4eHhfd3Jp dGVfcmVncyhkZXYsIFIwNl9JMkNfQ0xLX1JFRywgIlx4NGMiLCAxKTsKKwkJaWYgKHJldCA8IDAp CisJCQlyZXR1cm4gcmV0OworCQltc2xlZXAoMTApOworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVn cyhkZXYsIDB4MDgsICJceGZkIiwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsK KwkJbXNsZWVwKDEwMCk7CisJCXJldCA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwOCwgIlx4 ZmQiLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQltc2xlZXAoMTAwKTsK KwkJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHhmZiIsIDEpOworCQlpZiAo cmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCW1zbGVlcCg1KTsKKwkJcmV0ID0gZW0yOHh4X3dy aXRlX3JlZ3MoZGV2LCBSMEZfWENMS19SRUcsICJceDI3IiwgMSk7IC8qIHN3aXRjaCBlbTI4ODAg cmMgcHJvdG9jb2wgKi8KKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworI2lmIDAKKwor CQlyZXQgPSBkZXYtPmVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwOCwgIlx4NmQiLCAxKTsKKwkJ aWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQltc2xlZXAoMTApOworCQlyZXQgPSBkZXYt PmVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwOCwgIlx4N2QiLCAxKTsKKwkJaWYgKHJldCA8IDAp CisJCQlyZXR1cm4gcmV0OworCQltc2xlZXAoMTApOworI2VuZGlmCisjaWYgMAorCQllbTI4ODBf aXJfYXR0YWNoKGRldiwgaXJfY29kZXNfcGlubmFjbGUyLCBBUlJBWV9TSVpFKGlyX2NvZGVzX3Bp bm5hY2xlMiksIGVtMjg4MF9nZXRfa2V5X2VtcGlhKTsKKyNlbmRpZgorCQlicmVhazsKKwl9CisJ Y2FzZSBFTTI4MjBfQk9BUkRfR0FETUVJX1VUVjMxMDoKKwl7CisJCXJldCA9IGVtMjh4eF93cml0 ZV9yZWdzKGRldiwgUjBGX1hDTEtfUkVHLCAiXHgyNyIsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJ CXJldHVybiByZXQ7CisJCXJldCA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgUjA2X0kyQ19DTEtf UkVHLCAiXHg0MCIsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCS8qIFR1 cm4gb24gYW5hbG9nIGF1ZGlvIG91dHB1dCAqLworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVnc19y ZXEoZGV2LCAweDAwLCAweDA4LCAiXHhmZCIsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVy biByZXQ7CisJCWJyZWFrOworCX0KKwljYXNlIEVNMjg2MF9CT0FSRF9HQURNRUlfVVRWMzMwOgor CXsKKwkJLyogVHVybiBvbiBJUiAqLworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIw Rl9YQ0xLX1JFRywgIlx4MDciLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0Owor CQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIwNl9JMkNfQ0xLX1JFRywgIlx4NDAiLCAx KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlicmVhazsKKwl9CisJY2FzZSBF TTI4NjFfQk9BUkRfUExFWFRPUl9QWF9UVjEwMFU6CisJeworCQlyZXQgPSBlbTI4eHhfd3JpdGVf cmVncyhkZXYsIFIwRl9YQ0xLX1JFRywgIlx4MjciLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQly ZXR1cm4gcmV0OworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIwNl9JMkNfQ0xLX1JF RywgIlx4NDAiLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQkvKiBUdXJu IG9uIGFuYWxvZyBhdWRpbyBvdXRwdXQgKi8KKwkJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3NfcmVx KGRldiwgMHgwMCwgMHgwOCwgIlx4ZmQiLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4g cmV0OworCQlicmVhazsKKwl9CisJY2FzZSBFTTI4ODhfQk9BUkRfS1dPUkxEX0hZQlJJRF9FMzI5 OgorCWNhc2UgRU0yODg4X0JPQVJEX0VNUElBX0hZQlJJRDoKKwljYXNlIEVNMjg4OF9CT0FSRF9M SU5DT0xOX1RWX0ZNOgorCXsKKwkJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDgwLCAi XHhmMCIsIDEpOworCQltc2xlZXAoMTAwKTsKKwkJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2 LCAweDgwLCAiXHhmNCIsIDEpOworCQltc2xlZXAoNTApOworCQlyZXQgPSBlbTI4eHhfd3JpdGVf cmVncyhkZXYsIDB4ODAsICJceGY2IiwgMSk7CisJCXJldCA9IGVtMjh4eF93cml0ZV9yZWdzKGRl diwgMHg4MCwgIlx4YjYiLCAxKTsKKwkJbXNsZWVwKDEwMCk7CisJCXJldCA9IGVtMjh4eF93cml0 ZV9yZWdzKGRldiwgMHg4MCwgIlx4ZjYiLCAxKTsKKwkJbXNsZWVwKDEwMCk7CisJCXJldCA9IGVt Mjh4eF93cml0ZV9yZWdzKGRldiwgMHg4MCwgIlx4ZjUiLCAxKTsKKwkJaWYgKHJldCA8IDApCisJ CQlyZXR1cm4gcmV0OworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCXJldCA9IGVt Mjh4eF93cml0ZV9yZWdzKGRldiwgUjA2X0kyQ19DTEtfUkVHLCAiXHg0NSIsIDEpOworCQlpZiAo cmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCXJldCA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwg UjBGX1hDTEtfUkVHLCAiXHgwMiIsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7 CisJCXJldCA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHg1MCwgIlx4MDEiLCAxKTsKKwkJaWYg KHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlicmVhazsKKwl9CisJY2FzZSBFTTI4ODNfQk9B UkRfRU1QSUFfSFlCUklEX0FUU0M6CisJY2FzZSBFTTI4ODNfQk9BUkRfRVFVSU5VWF9UVUJFU1RJ Q0tfQVRTQzoKKwljYXNlIEVNMjg4M19CT0FSRF9URVJSQVRFQ19IWUJSSURfWFNfRk06CisJY2Fz ZSBFTTI4NjNfQk9BUkRfRU1QSUFfR0VORVJJQzoKKwl7CisJCXJldCA9IGVtMjh4eF93cml0ZV9y ZWdzKGRldiwgUjBGX1hDTEtfUkVHLCAiXHg5NyIsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJl dHVybiByZXQ7CisJCXJldCA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgUjA2X0kyQ19DTEtfUkVH LCAiXHg0MCIsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCW1zbGVlcCgx MCk7CisJCXJldCA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwOCwgIlx4MmQiLCAxKTsKKwkJ aWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQltc2xlZXAoMTApOworI2lmIDAKKwkJcmV0 ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHg3ZCIsIDEpOworCQlpZiAocmV0IDwg MCkKKwkJCXJldHVybiByZXQ7CisJCW1zbGVlcCgxMCk7CisjZW5kaWYKKwkJYnJlYWs7CisJfQor CWNhc2UgRU0yODYwX0JPQVJEX0tBSU9NWV9UVk5QQ19VMjoKKwl7CisJCXJldCA9IGVtMjh4eF93 cml0ZV9yZWdzKGRldiwgUjBGX1hDTEtfUkVHLCAiXHgyNyIsIDEpOworCQlpZiAocmV0IDwgMCkK KwkJCXJldHVybiByZXQ7CisJCXJldCA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgUjA2X0kyQ19D TEtfUkVHLCAiXHg0YyIsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCW1z bGVlcCgxMCk7CisJCXJldCA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwOCwgIlx4NmQiLCAx KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQltc2xlZXAoMTApOworCQlyZXQg PSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MDgsICJceDdkIiwgMSk7CisJCWlmIChyZXQgPCAw KQorCQkJcmV0dXJuIHJldDsKKwkJbXNsZWVwKDEwKTsKKwkJcmV0ID0gZW0yOHh4X3dyaXRlX3Jl Z3MoZGV2LCAweDBmLCAiXHgwNyIsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7 CisJCWJyZWFrOworCX0KKwljYXNlIEVNMjg3NV9CT0FSRF9TQU1QTEVfSVNEQlQ6CisJeworCQkv LyAgICAgICAgICAgIGVtMjh4eF93cml0ZV9yZWdzKGRldiwgUjA2X0kyQ19DTEtfUkVHLCAiXHg0 MCIsIDEpOyAvLyBFRVBST00gYWNjZXNzCisJCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgUjA2X0ky Q19DTEtfUkVHLCAiXHg0NCIsIDEpOworCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MGYsICJc eDAyIiwgMSk7CisJCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHg1MCwgIlx4MGUiLCAxKTsKKwkJ ZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDgwLCAiXHhmMCIsIDEpOworCQlicmVhazsKKwl9CisK KwlkZWZhdWx0OgorCQlyZXQgPSBkZXYtPmVtMjh4eF93cml0ZV9yZWdzKGRldiwgUjBGX1hDTEtf UkVHLCAiXHgyNyIsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCWlmIChk ZXYtPmVtX3R5cGUgIT0gRU0yODAwKSB7CisJCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYs IFIwNl9JMkNfQ0xLX1JFRywgIlx4NDAiLCAxKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVy biByZXQ7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZW0yOHh4X2NhcmRfZGlzY29u bmVjdChzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJaWYgKGRldi0+aXJfZW0yODgwKQorCQllbTI4 ODBfaXJfZGV0YWNoKGRldik7Cit9CisKK0VYUE9SVF9TWU1CT0woZW0yOHh4X2JvYXJkcyk7CitF WFBPUlRfU1lNQk9MKGVtMjh4eF9iY291bnQpOworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2Is IGVtMjh4eF9pZF90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtcGlh L2VtMjh4eC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtcGlhL2VtMjh4eC1jb3JlLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhiNGI4YwotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW1waWEvZW0yOHh4LWNvcmUuYwpAQCAtMCwwICsx LDEzNjYgQEAKKy8qCisgICBlbTI4eHgtY29yZS5jIC0gZHJpdmVyIGZvciBFbXBpYSBFTTI4MDAv RU0yODIwLzI4NDAvMjg4MCBVU0IgdmlkZW8gY2FwdHVyZSBkZXZpY2VzCisKKyAgIENvcHlyaWdo dCAoQykgMjAwNSBMdWRvdmljbyBDYXZlZG9uIDxjYXZlZG9uQHNzc3VwLml0PgorCQkgICAgICBN YXJrdXMgUmVjaGJlcmdlciA8bXJlY2hiZXJnZXJAZ21haWwuY29tPgorCQkgICAgICBNYXVybyBD YXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KKwkJICAgICAgU2FzY2hhIFNv bW1lciA8c2FzY2hhc29tbWVyQGZyZWVuZXQuZGU+CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91 bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisg Ki8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Cisj aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4K KyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNp bmNsdWRlICJlbTI4eHguaCIKKworLyogI2RlZmluZSBFTkFCTEVfREVCVUdfSVNPQ19GUkFNRVMg Ki8KKworc3RhdGljIHVuc2lnbmVkIGludCBjb3JlX2RlYnVnOworbW9kdWxlX3BhcmFtKGNvcmVf ZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGNvcmVfZGVidWcsICJlbmFibGUg ZGVidWcgbWVzc2FnZXMgW2NvcmVdIik7CisKKyNkZWZpbmUgZW0yOHh4X2NvcmVkYmcoZm10LCBh cmcuLi4pIGRvIHtcCisJaWYgKGNvcmVfZGVidWcpIFwKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMg JXMgOiJmbXQsIFwKKwkJCSBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyAsICMjYXJnKTsgfSB3aGls ZSAoMCkKKworc3RhdGljIHVuc2lnbmVkIGludCByZWdfZGVidWc7Cittb2R1bGVfcGFyYW0ocmVn X2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhyZWdfZGVidWcsICJlbmFibGUg ZGVidWcgbWVzc2FnZXMgW1VSQiByZWddIik7CisKKyNkZWZpbmUgZW0yOHh4X3JlZ2RiZyhmbXQs IGFyZy4uLikgZG8ge1wKKwlpZiAocmVnX2RlYnVnKSBcCisJCXByaW50ayhLRVJOX0lORk8gIiVz OiAiZm10LCBcCisJCQkgZGV2LT5uYW1lLCAjI2FyZyk7IH0gd2hpbGUgKDApCisKK3N0YXRpYyB1 bnNpZ25lZCBpbnQgaXNvY19kZWJ1ZzsKK21vZHVsZV9wYXJhbShpc29jX2RlYnVnLCBpbnQsIDA2 NDQpOworTU9EVUxFX1BBUk1fREVTQyhpc29jX2RlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2Vz IFtpc29jIHRyYW5zZmVyc10iKTsKKworI2RlZmluZSBlbTI4eHhfaXNvY2RiZyhmbXQsIGFyZy4u LikgZG8ge1wKKwlpZiAoaXNvY19kZWJ1ZykgXAorCQlwcmludGsoS0VSTl9JTkZPICIlcyAlcyA6 ImZtdCwgXAorCQkJIGRldi0+bmFtZSwgX19GVU5DVElPTl9fICwgIyNhcmcpOyB9IHdoaWxlICgw KQorCitzdGF0aWMgaW50IGFsdCA9IEVNMjhYWF9QSU5PVVQ7Cittb2R1bGVfcGFyYW0oYWx0LCBp bnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhhbHQsICJhbHRlcm5hdGUgc2V0dGluZyB0byB1 c2UgZm9yIHZpZGVvIGVuZHBvaW50Iik7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJO RUxfVkVSU0lPTigyLCA2LCAxNSkKK3N0YXRpYyB2b2lkICpydm1hbGxvYyhzaXplX3Qgc2l6ZSkK K3sKKwl2b2lkICptZW07CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlzaXplID0gUEFHRV9BTElH TihzaXplKTsKKworCW1lbSA9IHZtYWxsb2NfMzIoKHVuc2lnbmVkIGxvbmcpc2l6ZSk7CisJaWYg KCFtZW0pCisJCXJldHVybiBOVUxMOworCisJYWRyID0gKHVuc2lnbmVkIGxvbmcpbWVtOworCXdo aWxlIChzaXplID4gMCkgeworCQlTZXRQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lk ICopYWRyKSk7CisJCWFkciArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0K KworCXJldHVybiBtZW07Cit9CisKK3N0YXRpYyB2b2lkIHJ2ZnJlZSh2b2lkICptZW0sIHNpemVf dCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgYWRyOworCisJaWYgKCFtZW0pCisJCXJldHVybjsK KworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCisJYWRyID0gKHVuc2lnbmVkIGxvbmcpbWVt OworCXdoaWxlIChzaXplID4gMCkgeworCQlDbGVhclBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3Bh Z2UoKHZvaWQgKilhZHIpKTsKKwkJYWRyICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJ WkU7CisJfQorCisJdmZyZWUobWVtKTsKK30KKyNlbmRpZgorCisvKgorICogZW0yOHh4X3JlcXVl c3RfYnVmZmVycygpCisgKiBhbGxvY2F0ZSBhIG51bWJlciBvZiBidWZmZXJzCisgKi8KK3UzMiBl bTI4eHhfcmVxdWVzdF9idWZmZXJzKHN0cnVjdCBlbTI4eHggKmRldiwgdTMyIGNvdW50LCBpbnQg dHlwZSkKK3sKKwlzaXplX3Qgc2l6ZTsKKworCXZvaWQgKmJ1ZmYgPSBOVUxMOworCXUzMiBpOwor CisKKwlzaXplID0gUEFHRV9BTElHTigodHlwZSA9PSBFTTI4WFhfVkJJKSA/CisJCQlkZXYtPnZi aV9mcmFtZV9zaXplIDogZGV2LT5mcmFtZV9zaXplKTsKKworCXN3aXRjaCAodHlwZSkgeworCWNh c2UgRU0yOFhYX1ZJREVPOgorCQlpZiAoY291bnQgPiBFTTI4WFhfTlVNX0ZSQU1FUykKKwkJCWNv dW50ID0gRU0yOFhYX05VTV9GUkFNRVM7CisKKwkJaWYgKGRldi0+bnVtX2ZyYW1lcyA+IDApCisJ CQlyZXR1cm4gLUVJTlZBTDsKKworCQlkZXYtPm51bV9mcmFtZXMgPSBjb3VudDsKKwkJc2l6ZSA9 IFBBR0VfQUxJR04oZGV2LT5mcmFtZV9zaXplKTsKKwkJYnJlYWs7CisJY2FzZSBFTTI4WFhfVkJJ OgorCQlpZiAoY291bnQgPiBFTTI4WFhfTlVNX0ZSQU1FUykgLyogRklYTUUgVkJJX05VTV9GUkFN RVMgKi8KKwkJCWNvdW50ID0gRU0yOFhYX05VTV9GUkFNRVM7CisKKwkJaWYgKGRldi0+dmJpX251 bV9mcmFtZXMgPiAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJZGV2LT52YmlfbnVtX2ZyYW1l cyA9IGNvdW50OworCQlzaXplID0gUEFHRV9BTElHTihkZXYtPnZiaV9mcmFtZV9zaXplKTsKKwkJ YnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fSU5GTyJlbTI4eHgtY29yZS5jOiBlcnJv ciB3cm9uZyBidWZmZXIgcmVxdWVzdCFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwll bTI4eHhfY29yZWRiZygicmVxdWVzdGVkICVpIGJ1ZmZlcnMgd2l0aCBzaXplICV6aSIsIGNvdW50 LCBzaXplKTsKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYs IDE1KQorCWJ1ZmYgPSBydm1hbGxvYyhjb3VudCAqIHNpemUpOworI2Vsc2UKKwlidWZmID0gdm1h bGxvY18zMihjb3VudCAqIHNpemUpOworI2VuZGlmCisJaWYgKGJ1ZmYpCisJCW1lbXNldChidWZm LCAwLCBjb3VudCAqIHNpemUpOworCWVsc2UKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGkg PSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBFTTI4WFhf VkJJOgorCQkJZGV2LT52YmlfZnJhbWVbaV0uYnVmbWVtID0gYnVmZiArIGkgKiBzaXplOworCQkJ ZGV2LT52YmlfZnJhbWVbaV0uYnVmLmluZGV4ID0gaTsKKwkJCWRldi0+dmJpX2ZyYW1lW2ldLmJ1 Zi5tLm9mZnNldCA9IGkgKiBzaXplOworCQkJZGV2LT52YmlfZnJhbWVbaV0uYnVmLmxlbmd0aCA9 IGRldi0+dmJpX2ZyYW1lX3NpemU7CisJCQlkZXYtPnZiaV9mcmFtZVtpXS5idWYudHlwZSA9IFY0 TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU7CisJCQlkZXYtPnZiaV9mcmFtZVtpXS5idWYuc2VxdWVu Y2UgPSAwOworCisvKiBJbmRpY2F0ZXMgdGhlIGZpZWxkIG9yZGVyIG9mIHRoZSBpbWFnZSBpbiB0 aGUgYnVmZmVyLCBzZWUgVGFibGUgMy04Pi4gVGhpcworICAgZmllbGQgaXMgbm90IHVzZWQgd2hl biB0aGUgYnVmZmVyIGNvbnRhaW5zIFZCSSBkYXRhLiBEcml2ZXJzIG11c3Qgc2V0IGl0IAorICAg d2hlbiB0eXBlIHJlZmVycyB0byBhbiBpbnB1dCBzdHJlYW0sIGFwcGxpY2F0aW9ucyB3aGVuIGFu IG91dHB1dCBzdHJlYW0uIAorIAorICAgdGhpcyBwcm9iYWJseSBzaG91bGQgYmUgY2hhbmdlZCBz aW5jZSB3ZSBjYW4gaGF2ZSBhbiBpbnRlcmxhY2VkIGZpZWxkIGhlcmUgCisqLworCQkJaWYgKGRl di0+dmJpX2ludGVybGFjZWQpCisJCQkJZGV2LT52YmlfZnJhbWVbaV0uYnVmLmZpZWxkID0gVjRM Ml9WQklfSU5URVJMQUNFRDsKKwkJCWVsc2UKKwkJCQlkZXYtPnZiaV9mcmFtZVtpXS5idWYuZmll bGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJCQlkZXYtPnZiaV9mcmFtZVtpXS5idWYubWVtb3J5ID0g VjRMMl9NRU1PUllfTU1BUDsKKwkJCWRldi0+dmJpX2ZyYW1lW2ldLmJ1Zi5mbGFncyA9IDA7CisJ CQlicmVhazsKKwkJY2FzZSBFTTI4WFhfVklERU86CisJCQlkZXYtPmZyYW1lW2ldLmJ1Zm1lbSA9 IGJ1ZmYgKyBpICogc2l6ZTsKKwkJCWRldi0+ZnJhbWVbaV0uYnVmLmluZGV4ID0gaTsKKwkJCWRl di0+ZnJhbWVbaV0uYnVmLm0ub2Zmc2V0ID0gaSAqIHNpemU7CisJCQlkZXYtPmZyYW1lW2ldLmJ1 Zi5sZW5ndGggPSBkZXYtPmZyYW1lX3NpemU7CisJCQlkZXYtPmZyYW1lW2ldLmJ1Zi50eXBlID0g VjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQkJZGV2LT5mcmFtZVtpXS5idWYuc2VxdWVu Y2UgPSAwOworCQkJZGV2LT5mcmFtZVtpXS5idWYuZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFD RUQ7IC8qX1RCOyAgVjRMMl9GSUVMRF9OT05FOyAqLworCQkJZGV2LT5mcmFtZVtpXS5idWYubWVt b3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKKwkJCWRldi0+ZnJhbWVbaV0uYnVmLmZsYWdzID0gMDsK KwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fSU5GTyJlcnJvciB3cm9uZyBi dWZmZXIgcmVxdWVzdCFcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCX0KKwlyZXR1 cm4gY291bnQ7Cit9CisKKy8qCisgKiBlbTI4eHhfcXVldWVfdW51c2VkZnJhbWVzKCkKKyAqIGFk ZCBhbGwgZnJhbWVzIHRoYXQgYXJlIG5vdCBjdXJyZW50bHkgaW4gdXNlIHRvIHRoZSBpbmJ1ZmZl ciBxdWV1ZQorICovCit2b2lkIGVtMjh4eF9xdWV1ZV91bnVzZWRmcmFtZXMoc3RydWN0IGVtMjh4 eCAqZGV2LCBpbnQgdHlwZSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJdTMyIGk7 CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBFTTI4WFhfVklERU86CisJCWZvciAoaSA9IDA7IGkg PCBkZXYtPm51bV9mcmFtZXM7IGkrKykgeworCQkJaWYgKGRldi0+ZnJhbWVbaV0uc3RhdGUgPT0g Rl9VTlVTRUQpIHsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5xdWV1ZV9sb2NrLCBsb2Nr X2ZsYWdzKTsKKwkJCQlkZXYtPmZyYW1lW2ldLnN0YXRlID0gRl9RVUVVRUQ7CisJCQkJbGlzdF9h ZGRfdGFpbCgmZGV2LT5mcmFtZVtpXS5mcmFtZSwKKwkJCQkJCSZkZXYtPmlucXVldWUpOworCQkJ CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cXVldWVfbG9jaywKKwkJCQkJCWxvY2tfZmxh Z3MpOworCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgRU0yOFhYX1ZCSToKKwkJZm9yIChpID0g MDsgaSA8IGRldi0+dmJpX251bV9mcmFtZXM7IGkrKykgeworCQkJaWYgKGRldi0+dmJpX2ZyYW1l W2ldLnN0YXRlID09IEZfVU5VU0VEKSB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+dmJp X3F1ZXVlX2xvY2ssCisJCQkJCQlsb2NrX2ZsYWdzKTsKKwkJCQlkZXYtPnZiaV9mcmFtZVtpXS5z dGF0ZSA9IEZfUVVFVUVEOworCQkJCWxpc3RfYWRkX3RhaWwoJmRldi0+dmJpX2ZyYW1lW2ldLmZy YW1lLAorCQkJCQkJJmRldi0+dmJpX2lucXVldWUpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmRldi0+dmJpX3F1ZXVlX2xvY2ssCisJCQkJCQlsb2NrX2ZsYWdzKTsKKwkJCX0KKwkJfQor CQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBlbTI4eHhfcmVsZWFzZV9idWZmZXJzKCkKKyAqIGZy ZWUgZnJhbWUgYnVmZmVycworICovCit2b2lkIGVtMjh4eF9yZWxlYXNlX2J1ZmZlcnMoc3RydWN0 IGVtMjh4eCAqZGV2LCBpbnQgdHlwZSkKK3sKKwlpZiAodHlwZSA9PSBFTTI4WFhfVklERU8gJiYg ZGV2LT5udW1fZnJhbWVzKSB7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJ T04oMiwgNiwgMTUpCisJCXJ2ZnJlZShkZXYtPmZyYW1lWzBdLmJ1Zm1lbSwKKwkJCQlkZXYtPm51 bV9mcmFtZXMgKgorCQkJCVBBR0VfQUxJR04oZGV2LT5mcmFtZVswXS5idWYubGVuZ3RoKSk7Cisj ZWxzZQorCQl2ZnJlZShkZXYtPmZyYW1lWzBdLmJ1Zm1lbSk7CisJCWRldi0+bnVtX2ZyYW1lcyA9 IDA7CisjZW5kaWYKKwl9IGVsc2UgaWYgKHR5cGUgPT0gRU0yOFhYX1ZCSSAmJiBkZXYtPnZiaV9u dW1fZnJhbWVzKSB7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwg NiwgMTUpCisJCXJ2ZnJlZShkZXYtPnZiaV9mcmFtZVswXS5idWZtZW0sCisJCQkJZGV2LT52Ymlf bnVtX2ZyYW1lcyAqCisJCQkJUEFHRV9BTElHTihkZXYtPnZiaV9mcmFtZVswXS5idWYubGVuZ3Ro KSk7CisjZWxzZQorCQl2ZnJlZShkZXYtPnZiaV9mcmFtZVswXS5idWZtZW0pOworCQlkZXYtPnZi aV9udW1fZnJhbWVzID0gMDsKKyNlbmRpZgorCX0KK30KKworLyoKKyAqIGVtMjh4eF9yZWFkX3Jl Z19yZXEoKQorICogcmVhZHMgZGF0YSBmcm9tIHRoZSB1c2IgZGV2aWNlIHNwZWNpZnlpbmcgYlJl cXVlc3QKKyAqLworaW50IGVtMjh4eF9yZWFkX3JlZ19yZXFfbGVuKHN0cnVjdCBlbTI4eHggKmRl diwgdTggcmVxLCB1MTYgcmVnLAorCQkJCSAgIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQg cmV0LCBieXRlOworCisJaWYgKGRldi0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKQorCQlyZXR1 cm4gLUVOT0RFVjsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsIHVzYl9yY3Zj dHJscGlwZShkZXYtPnVkZXYsIDApLCByZXEsCisJCQkgICAgICBVU0JfRElSX0lOIHwgVVNCX1RZ UEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIDB4MDAwMCwgcmVnLCBidWYs IGxlbiwgSFopOworCisJaWYgKHJlZ19kZWJ1ZykgeworCQllbTI4eHhfcmVnZGJnKCIlcyBjMCAl MDJ4IDAwIDAwICUwMnggMDAgJTAyeCAwMCA8PDwiLAorCQkJCShyZXQgPCAwKSA/ICJbTk9LXSIg OiAiWyBPS10iLCByZXEsIHJlZywgbGVuKTsKKworCQlmb3IgKGJ5dGUgPSAwOyBieXRlIDwgbGVu OyBieXRlKyspCisJCQlwcmludGsoIiAlMDJ4IiwgKHVuc2lnbmVkIGNoYXIpYnVmW2J5dGVdKTsK KwkJcHJpbnRrKCJcbiIpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogZW0yOHh4X3Jl YWRfcmVnX3JlcSgpCisgKiByZWFkcyBkYXRhIGZyb20gdGhlIHVzYiBkZXZpY2Ugc3BlY2lmeWlu ZyBiUmVxdWVzdAorICovCitpbnQgZW0yOHh4X3JlYWRfcmVnX3JlcShzdHJ1Y3QgZW0yOHh4ICpk ZXYsIHU4IHJlcSwgdTE2IHJlZykKK3sKKwl1OCB2YWw7CisJaW50IHJldDsKKworCWlmIChkZXYt PnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkKKwkJcmV0dXJuKC1FTk9ERVYpOworCisKKwlyZXQg PSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LT51ZGV2LCAw KSwgcmVxLAorCQkJICAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJ UF9ERVZJQ0UsCisJCQkgICAgICAweDAwMDAsIHJlZywgJnZhbCwgMSwgSFopOworCisJaWYgKHJl Z19kZWJ1ZykgeworCQlpZiAocmV0IDwgMCkKKwkJCWVtMjh4eF9yZWdkYmcoIiVzIGMwICUwMngg MDAgMDAgJTAyeCAwMCAwMSAwMCA8PDxcbiIsCisJCQkJCShyZXQgPCAwKSA/ICJbTk9LXSIgOiAi WyBPS10iLCByZXEsCisJCQkJCXJlZyk7CisJCWVsc2UKKwkJCWVtMjh4eF9yZWdkYmcoIiVzIGMw ICUwMnggMDAgMDAgJTAyeCAwMCAwMSAwMCA8PDwgIgorCQkJCSAgICAgICIlMDJ4XG4iLCAocmV0 IDwgMCkgPyAiW05PS10iIDogIlsgT0tdIiwKKwkJCQkgICAgICByZXEsIHJlZywgKHVuc2lnbmVk IGNoYXIpdmFsKTsKKwl9CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVy biB2YWw7Cit9CisKK2ludCBlbTI4eHhfcmVhZF9yZWcoc3RydWN0IGVtMjh4eCAqZGV2LCB1MTYg cmVnKQoreworCXJldHVybiBlbTI4eHhfcmVhZF9yZWdfcmVxKGRldiwgVVNCX1JFUV9HRVRfU1RB VFVTLCByZWcpOworfQorCisvKgorICogZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKCkKKyAqIHNlbmRz IGRhdGEgdG8gdGhlIHVzYiBkZXZpY2UsIHNwZWNpZnlpbmcgYlJlcXVlc3QKKyAqLworaW50IGVt Mjh4eF93cml0ZV9yZWdzX3JlcShzdHJ1Y3QgZW0yOHh4ICpkZXYsIHU4IHJlcSwgdTE2IHJlZywg Y2hhciAqYnVmLAorCQkJCSBpbnQgbGVuKQoreworCWludCByZXQ7CisKKwkvKnVzYl9jb250cm9s X21zZyBzZWVtcyB0byBleHBlY3QgYSBrbWFsbG9jZWQgYnVmZmVyICovCisJdW5zaWduZWQgY2hh ciAqYnVmczsKKworCWlmIChkZXYtPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkKKwkJcmV0dXJu KC1FTk9ERVYpOworCisJYnVmcyA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKworCWlmICgh YnVmcykKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtY3B5KGJ1ZnMsIGJ1ZiwgbGVuKTsKKworCXJl dCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYs IDApLCByZXEsCisJCQkgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9S RUNJUF9ERVZJQ0UsCisJCQkgICAgICAweDAwMDAsIHJlZywgYnVmcywgbGVuLCBIWik7CisJaWYg KHJlZ19kZWJ1ZykgeworCQlpbnQgaTsKKwkJZW0yOHh4X3JlZ2RiZygiJXMgNDAgJTAyeCAwMCAw MCAlMDJ4IDAwICUwMnggMDAgPj4+IiwKKwkJCQkocmV0IDwgMCkgPyAiW05PS10iIDogIlsgT0td IiwgcmVxLCByZWcsIGxlbik7CisJCWZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkKKwkJCXByaW50 aygiICUwMngiLCAodW5zaWduZWQgY2hhcilidWZbaV0pOworCQlwcmludGsoIlxuIik7CisJfQor CWtmcmVlKGJ1ZnMpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBlbTI4eHhfd3JpdGVfcmVncyhz dHJ1Y3QgZW0yOHh4ICpkZXYsIHUxNiByZWcsIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlyZXR1 cm4gZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwgVVNCX1JFUV9HRVRfU1RBVFVTLCByZWcsIGJ1 ZiwgbGVuKTsKK30KKworLyoKKyAqIGVtMjh4eF93cml0ZV9yZWdfYml0cygpCisgKiBzZXRzIG9u bHkgc29tZSBiaXRzIChzcGVjaWZpZWQgYnkgYml0bWFzaykgb2YgYSByZWdpc3RlciwgYnkgZmly c3QgcmVhZGluZworICogdGhlIGFjdHVhbCB2YWx1ZQorICovCitpbnQgZW0yOHh4X3dyaXRlX3Jl Z19iaXRzKHN0cnVjdCBlbTI4eHggKmRldiwgdTE2IHJlZywgdTggdmFsLAorCQkJCSB1OCBiaXRt YXNrKQoreworCWludCBvbGR2YWw7CisJdTggbmV3dmFsOworCW9sZHZhbCA9IGVtMjh4eF9yZWFk X3JlZyhkZXYsIHJlZyk7CisJaWYgKG9sZHZhbCA8IDApCisJCXJldHVybiBvbGR2YWw7CisJbmV3 dmFsID0gKCgodTgpIG9sZHZhbCkgJiB+Yml0bWFzaykgfCAodmFsICYgYml0bWFzayk7CisJcmV0 dXJuIGVtMjh4eF93cml0ZV9yZWdzKGRldiwgcmVnLCAmbmV3dmFsLCAxKTsKK30KKworLyoKKyAq IGVtMjh4eF93cml0ZV9hYzk3KCkKKyAqIHdyaXRlIGEgMTYgYml0IHZhbHVlIHRvIHRoZSBzcGVj aWZpZWQgQUM5NyBhZGRyZXNzIChMU0IgZmlyc3QhKQorICovCitpbnQgZW0yOHh4X3dyaXRlX2Fj OTcoc3RydWN0IGVtMjh4eCAqZGV2LCB1OCByZWcsIHU4ICp2YWwpCit7CisJaW50IHJldDsKKwl1 OCBhZGRyOworCXN3aXRjaCAoZGV2LT5tb2RlbCkgeworCWNhc2UgRU0yODgxX0JPQVJEX1BJTk5B Q0xFX0hZQlJJRF9QUk86CisJY2FzZSBFTTI4ODBfQk9BUkRfVEVSUkFURUNfSFlCUklEX1hTX0ZS OgorCWNhc2UgRU0yODgxX0JPQVJEX0ROVF9EQTJfSFlCUklEOgorCQlhZGRyID0gMHgxYTsKKwkJ YnJlYWs7CisJZGVmYXVsdDoKKwkJYWRkciA9IHJlZyAmIDB4N2Y7CisJfQorCQorCXJldCA9IGVt Mjh4eF9yZWFkX3JlZyhkZXYsIFI0M19BQzk3QlVTWV9SRUcpOworCWlmIChyZXQgPCAwKQorCQly ZXR1cm4gcmV0OworCWVsc2UgaWYgKCgodTgpIHJldCkgJiAweDAxKSAKKwkJcmV0dXJuIDA7CisJ CisJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBSNDBfQUM5N0xTQl9SRUcsIHZhbCwgMik7 CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBlbTI4eHhfd3JpdGVfcmVn cyhkZXYsIFI0Ml9BQzk3QUREUl9SRUcsICZhZGRyLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0 dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitpbnQgZW0yOHh4X2F1ZGlvX2FuYWxvZ19zZXQo c3RydWN0IGVtMjh4eCAqZGV2KQoreworCWNoYXIgc1syXSA9IHsgMHgwMCwgMHgwMCB9OworCisJ c3dpdGNoIChkZXYtPm1vZGVsKSB7CisJY2FzZSBFTTI4ODFfQk9BUkRfUElOTkFDTEVfSFlCUklE X1BSTzoKKwljYXNlIEVNMjg4MF9CT0FSRF9URVJSQVRFQ19IWUJSSURfWFNfRlI6CisJY2FzZSBF TTI4ODFfQk9BUkRfRE5UX0RBMl9IWUJSSUQ6CisJCXNbMF0gPSAweDA1OworCQlzWzFdID0gMHgw NTsKKwkJYnJlYWs7CisJY2FzZSBFTTI4NjFfQk9BUkRfUExFWFRPUl9QWF9UVjEwMFU6CisJY2Fz ZSBFTTI4NjBfQk9BUkRfR0FETUVJX1VUVjMzMDoKKwkJc3dpdGNoIChkZXYtPmN0bF9haW5wdXQp IHsKKwkJY2FzZSAwOgorCQkJc1swXSA9IDB4ZmQ7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJ c1swXSA9IDB4ZmM7CisJCQlicmVhazsKKwkJZGVmYXVsdCA6CisJCQlzWzBdID0gMHhmZTsKKwkJ CWJyZWFrOworCQl9CisJCWlmIChkZXYtPm11dGUpCisJCQlzWzBdID0gMHhmZTsKKwkJcmV0dXJu IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwOCwgcywgMSk7CisJZGVmYXVsdDoKKwkJc1swXSB8 PSAweDFmIC0gZGV2LT52b2x1bWU7CisJCXNbMV0gfD0gMHgxZiAtIGRldi0+dm9sdW1lOworCX0K KworCWlmIChkZXYtPm11dGUpCisJCXNbMV0gfD0gMHg4MDsKKwlyZXR1cm4gZW0yOHh4X3dyaXRl X2FjOTcoZGV2LCBSMDJfTUFTVEVSX0FDOTcsIHMpOworfQorCitpbnQgZW0yOHh4X2NvbG9ybGV2 ZWxzX3NldF9kZWZhdWx0KHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlpbnQgcmV0OworCisJLyog Y29udHJhc3QgKi8KKwlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIyMF9ZR0FJTl9SRUcs ICJceDEwIiwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBicmlnaHRu ZXNzICovCisJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBSMjFfWU9GRlNFVF9SRUcsICJc eDAwIiwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBzYXR1cmF0aW9u ICovCisJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBSMjJfVVZHQUlOX1JFRywgIlx4MTAi LCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGVtMjh4eF93cml0 ZV9yZWdzKGRldiwgUjIzX1VPRkZTRVRfUkVHLCAiXHgwMCIsIDEpOworCWlmIChyZXQgPCAwKQor CQlyZXR1cm4gcmV0OworCisJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBSMjRfVk9GRlNF VF9SRUcsICJceDAwIiwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQg PSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIyNV9TSEFSUE5FU1NfUkVHLCAiXHgwMCIsIDEpOwor CWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3Mo ZGV2LCBSMTRfR0FNTUFfUkVHLCAiXHgyMCIsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4g cmV0OworCisJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBSMTVfUkdBSU5fUkVHLCAiXHgy MCIsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZW0yOHh4X3dy aXRlX3JlZ3MoZGV2LCBSMTZfR0dBSU5fUkVHLCAiXHgyMCIsIDEpOworCWlmIChyZXQgPCAwKQor CQlyZXR1cm4gcmV0OworCisJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBSMTdfQkdBSU5f UkVHLCAiXHgyMCIsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0g ZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBSMThfUk9GRlNFVF9SRUcsICJceDAwIiwgMSk7CisJaWYg KHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYs IFIxOV9HT0ZGU0VUX1JFRywgIlx4MDAiLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJl dDsKKworCXJldCA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgUjFBX0JPRkZTRVRfUkVHLCAiXHgw MCIsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisK K2ludCBlbTI4eHhfY2FwdHVyZV9zdGFydChzdHJ1Y3QgZW0yOHh4ICpkZXYsIGludCBzdGFydCkK K3sKKwlpbnQgcmV0OworCS8qIEZJWE1FOiB3aGljaCBpcyB0aGUgYmVzdCBvcmRlcj8gKi8KKwkv KiB2aWRlbyByZWdpc3RlcnMgYXJlIHNhbXBsZWQgYnkgVlJFRiAqLworCWlmICgocmV0ID0gZW0y OHh4X3dyaXRlX3JlZ19iaXRzKGRldiwgUjBDX1VTQlNVU1BfUkVHLCBzdGFydCA/CisJCQkJCTB4 MTAgOiAweDAwLAorCQkJCQkgIDB4MTApKSA8IDApCisJCXJldHVybiByZXQ7CisJLyogZW5hYmxl IHZpZGVvIGNhcHR1cmUgKi8KKwlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBSMTJfVklO RU5BQkxFX1JFRywgc3RhcnQgPworCQkJIlx4NjciIDogIlx4MjciLCAxKTsKK30KKworaW50IGVt Mjh4eF9vdXRmbXRfc2V0X3l1djQyMihzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJaW50IHJldDsK KworCS8qIG1heWJlIHB1dCB0aGlzIGNvbmZpZ3VyYXRpb24gaW50byB0aGUgY2FyZCBjb25maWdz dHJ1Y3QsCisJICAgaXQncyBub3QgZW50aXJlbHkgY2xlYXIgd2hhdCB2YWx1ZXMgYXJlIG5lZWRl ZCBmb3IgZW0yNzUwCisJICAgYm9hcmRzIHNvIHRoaXMgaXMgYSBoYWNraW5nIHBsYWNlIGF0IHRo ZSBtb21lbnQgKi8KKworCWlmIChkZXYtPmVtX3R5cGUgPT0gRU0yNzUwIHx8IGRldi0+ZW1fdHlw ZSA9PSBFTTI3NTEpIHsKKwkJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBSMTFfVklOQ1RS TF9SRUcsICJceDAwIiwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQly ZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIxMF9WSU5NT0RFX1JFRywgIlx4MGEiLCAxKTsK KwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJCXU4IGZtdF92YWw7 CisKKwkJZm10X3ZhbCA9ICgodTgpZW0yOHh4X3JlYWRfcmVnKGRldiwgUjI3X09VVEZNVF9SRUcp ICYgfjB4MWYpIHwgZGV2LT5vdXRmbXQtPmNvbmZpZzsKKworCQlyZXQgPSBlbTI4eHhfd3JpdGVf cmVncyhkZXYsIFIyN19PVVRGTVRfUkVHLCAmZm10X3ZhbCwgMSk7CisJCWlmIChyZXQgPCAwKQor CQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIxMF9WSU5N T0RFX1JFRywgIlx4MTAiLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJ CXJldCA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgUjExX1ZJTkNUUkxfUkVHLCAiXHgxMSIsIDEp OworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCWlmIChkZXYtPmRldl9tb2Rl cyAmIEVNMjhYWF9WQkkpCisJCWVtMjh4eF9zZXRfdmJpKGRldiwgMSk7CisJcmV0dXJuIDA7Cit9 CisKK2ludCBlbTI4eHhfc2V0X3ZiaShzdHJ1Y3QgZW0yOHh4ICpkZXYsIGludCBlbmFibGUpCit7 CisJdTggdmljOworCWludCByZXQ7CisJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwg MHgwMCwgMHgzNCwKKwkJCSZkZXYtPnR2bm9ybS0+dmJpX2hfc3RhcnQsIDEpOworCWlmIChyZXQg PCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwg MHgwMCwgMHgzNSwKKwkJCSZkZXYtPnR2bm9ybS0+dmJpX3Zfc3RhcnQsIDEpOworCWlmIChyZXQg PCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwg MHgwMCwgMHgzNiwKKwkJCSZkZXYtPnR2bm9ybS0+dmJpX3csIDEpOworCWlmIChyZXQgPCAwKQor CQlyZXR1cm4gcmV0OworCisJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwgMHgwMCwg MHgzNywKKwkJCSZkZXYtPnR2bm9ybS0+dmJpX2gsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1 cm4gcmV0OworCisJaWYgKGVuYWJsZSkKKwkJdmljID0gZW0yOHh4X3JlYWRfcmVnKGRldiwgUjEx X1ZJTkNUUkxfUkVHKSB8IDB4NDg7CisJZWxzZQorCQl2aWMgPSBlbTI4eHhfcmVhZF9yZWcoZGV2 LCBSMTFfVklOQ1RSTF9SRUcpICYgfjB4NDg7CisKKwlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhk ZXYsIFIxMV9WSU5DVFJMX1JFRywgJnZpYyAsIDEpOworCisJaWYgKHJldCA8IDApCisJCXJldHVy biByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGVtMjh4eF9hY2N1bXVsYXRvcl9zZXQoc3Ry dWN0IGVtMjh4eCAqZGV2LCB1OCB4bWluLCB1OCB4bWF4LCB1OCB5bWluLAorCQkJCSAgdTggeW1h eCkKK3sKKwlpbnQgcmV0OworCWVtMjh4eF9jb3JlZGJnKCJlbTI4eHggU2NhbGU6ICglZCwlZCkt KCVkLCVkKVxuIiwgeG1pbiwKKwkJCXltaW4sIHhtYXgsIHltYXgpOworCisJcmV0ID0gZW0yOHh4 X3dyaXRlX3JlZ3MoZGV2LCBSMjhfWE1JTl9SRUcsICZ4bWluLCAxKTsKKwlpZiAocmV0IDwgMCkK KwkJcmV0dXJuIHJldDsKKworCXJldCA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgUjI5X1hNQVhf UkVHLCAmeG1heCwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBl bTI4eHhfd3JpdGVfcmVncyhkZXYsIFIyQV9ZTUlOX1JFRywgJnltaW4sIDEpOworCWlmIChyZXQg PCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBSMkJf WU1BWF9SRUcsICZ5bWF4LCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJl dHVybiAwOworfQorCitpbnQgZW0yOHh4X2NhcHR1cmVfYXJlYV9zZXQoc3RydWN0IGVtMjh4eCAq ZGV2LCB1OCBoc3RhcnQsIHU4IHZzdGFydCwKKwkJCQkgICB1MTYgd2lkdGgsIHUxNiBoZWlnaHQp Cit7CisJaW50IHJldDsKKwl1OCBjd2lkdGggPSB3aWR0aDsKKwl1OCBjaGVpZ2h0ID0gaGVpZ2h0 OworCXU4IG92ZXJmbG93ID0gKGhlaWdodCA+PiA3ICYgMHgwMikgfCAod2lkdGggPj4gOCAmIDB4 MDEpOworCisJZW0yOHh4X2NvcmVkYmcoImVtMjh4eCBBcmVhIFNldDogKCVkLCVkKVxuIiwKKwkJ CSh3aWR0aCB8IChvdmVyZmxvdyAmIDIpIDw8IDcpLAorCQkJKGhlaWdodCB8IChvdmVyZmxvdyAm IDEpIDw8IDgpKTsKKworCXJldCA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgUjFDX0hTVEFSVF9S RUcsICZoc3RhcnQsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0g ZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBSMURfVlNUQVJUX1JFRywgJnZzdGFydCwgMSk7CisJaWYg KHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYs IFIxRV9DV0lEVEhfUkVHLCAmY3dpZHRoLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJl dDsKKworCXJldCA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgUjFGX0NIRUlHSFRfUkVHLCAmY2hl aWdodCwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBlbTI4eHhf d3JpdGVfcmVncyhkZXYsIFIxQl9PRkxPV19SRUcsICZvdmVyZmxvdywgMSk7CisJaWYgKHJldCA8 IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIDA7Cit9CisKK2ludCBlbTI4eHhfc2NhbGVyX3Nl dChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHUxNiBoLCB1MTYgdikKK3sKKwlpbnQgcmV0OworCXU4IG1v ZGU7CisJdTggYnVmWzJdOworCS8qIHRoZSBlbTI4MDAgc2NhbGVyIG9ubHkgc3VwcG9ydHMgc2Nh bGluZyBkb3duIHRvIDUwJSAqLworCisJc3dpdGNoIChkZXYtPmVtX3R5cGUpIHsKKwljYXNlIEVN Mjc1MDoKKyNpZiAxIC8qIFRPRE86IFBMRUFTRSBWRVJJRlkgKi8KKwkJbW9kZSA9IChoIHx8IHYp PyAweDMwOiAweDAwOworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIzMF9IU0NBTEVM T1dfUkVHLCAiXHgwMFx4MzAiLCAyKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0Owor CQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIzMl9WU0NBTEVMT1dfUkVHLCAiXHgwMFx4 MzAiLCAyKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworI2VuZGlmCisJCWJyZWFr OworCWNhc2UgRU0yODAwOgorCQltb2RlID0gKHYgPyAweDIwIDogMHgwMCkgfCAoaCA/IDB4MTAg OiAweDAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnVmWzBdID0gaDsKKwkJYnVmWzFdID0g aCA+PiA4OworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIzMF9IU0NBTEVMT1dfUkVH LCAoY2hhciAqKWJ1ZiwgMik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJYnVm WzBdID0gdjsKKwkJYnVmWzFdID0gdiA+PiA4OworCQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhk ZXYsIFIzMl9WU0NBTEVMT1dfUkVHLCAoY2hhciAqKWJ1ZiwgMik7CisJCWlmIChyZXQgPCAwKQor CQkJcmV0dXJuIHJldDsKKwkJLyogaXQgc2VlbXMgdGhhdCBib3RoIEggYW5kIFYgc2NhbGVycyBt dXN0IGJlIGFjdGl2ZSB0byB3b3JrCisJCSAgIGNvcnJlY3RseSAqLworCQltb2RlID0gKGggfHwg dik/IDB4MzA6IDB4MDA7CisJfQorCXJldCA9IGVtMjh4eF93cml0ZV9yZWdfYml0cyhkZXYsIFIy Nl9DT01QUl9SRUcsIG1vZGUsIDB4MzApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0Owor CisJcmV0dXJuIHJldDsKK30KKworLyogRklYTUU6IHRoaXMgb25seSBmdW5jdGlvbiByZWFkIHZh bHVlcyBmcm9tIGRldiAqLworaW50IGVtMjh4eF9yZXNvbHV0aW9uX3NldChzdHJ1Y3QgZW0yOHh4 ICpkZXYpCit7CisJaW50IHdpZHRoLCBoZWlnaHQ7CisJd2lkdGggPSBub3JtX21heHcoZGV2KTsK KwloZWlnaHQgPSBub3JtX21heGgoZGV2KSA+PiAxOworCisJZW0yOHh4X291dGZtdF9zZXRfeXV2 NDIyKGRldik7CisJZW0yOHh4X2FjY3VtdWxhdG9yX3NldChkZXYsIDEsICh3aWR0aCAtIDQpID4+ IDIsIDEsIChoZWlnaHQgLSA0KSA+PiAyKTsKKwllbTI4eHhfY2FwdHVyZV9hcmVhX3NldChkZXYs IDAsIDAsIHdpZHRoID4+IDIsIGhlaWdodCA+PiAyKTsKKwlyZXR1cm4gZW0yOHh4X3NjYWxlcl9z ZXQoZGV2LCBkZXYtPmhzY2FsZSwgZGV2LT52c2NhbGUpOworfQorCisKKy8qKioqKioqKioqKioq KioqKioqIGlzb2MgdHJhbnNmZXIgaGFuZGxpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKworI2lmZGVmIEVOQUJMRV9ERUJVR19JU09DX0ZSQU1FUworI2lmIExJTlVYX1ZFUlNJT05f Q09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE5KQorc3RhdGljIHZvaWQgZW0yOHh4X2lzb2Nf ZHVtcChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorI2Vsc2UKK3N0YXRp YyB2b2lkIGVtMjh4eF9pc29jX2R1bXAoc3RydWN0IHVyYiAqdXJiKQorI2VuZGlmCit7CisJaW50 IGxlbiA9IDA7CisJaW50IG50cmFucyA9IDA7CisJaW50IGk7CisKKwlwcmludGsoS0VSTl9ERUJV RyAiaXNvY0lycTogc2Y9JWQgbnA9JWQgZWM9JXhcbiIsCisJICAgICAgIHVyYi0+c3RhcnRfZnJh bWUsIHVyYi0+bnVtYmVyX29mX3BhY2tldHMsCisJICAgICAgIHVyYi0+ZXJyb3JfY291bnQpOwor CWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJdW5zaWdu ZWQgY2hhciAqYnVmID0KKwkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciArCisJCQkJdXJiLT5pc29f ZnJhbWVfZGVzY1tpXS5vZmZzZXQ7CisJCWludCBhbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tp XS5hY3R1YWxfbGVuZ3RoOworCQlpZiAoYWxlbiA+IDApIHsKKwkJCWlmIChidWZbMF0gPT0gMHg4 OCkgeworCQkJCW50cmFucysrOworCQkJCWxlbiArPSBhbGVuOworCQkJfSBlbHNlIGlmIChidWZb MF0gPT0gMHgyMikgeworCQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkJCQkiPSBsPSVkIG50PSVk IGJwcD0lZFxuIiwKKwkJCQlsZW4gLSA0ICogbnRyYW5zLCBudHJhbnMsCisJCQkJbnRyYW5zID09 IDAgPyAwIDogbGVuIC8gbnRyYW5zKTsKKwkJCQludHJhbnMgPSAxOworCQkJCWxlbiA9IGFsZW47 CisJCQl9IGVsc2UKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiIVxuIik7CisJCX0KKwkJcHJpbnRr KEtFUk5fREVCVUcgIiAgIG49JWQgcz0lZCBhbD0lZCAleFxuIiwgaSwKKwkJICAgICAgIHVyYi0+ aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzLAorCQkgICAgICAgdXJiLT5pc29fZnJhbWVfZGVzY1tp XS5hY3R1YWxfbGVuZ3RoLAorCQkgICAgICAgKHVuc2lnbmVkIGludCkKKwkJCQkgICAgICAgKigo dW5zaWduZWQgY2hhciAqKSh1cmItPnRyYW5zZmVyX2J1ZmZlciArCisJCQkJICAgICAgIHVyYi0+ aXNvX2ZyYW1lX2Rlc2NbaV0uCisJCQkJICAgICAgIG9mZnNldCkpKTsKKwl9Cit9CisjZW5kaWYK Kworc3RhdGljIGludCBlbTI4eHhfaXNvY192aWRlbyhzdHJ1Y3QgZW0yOHh4ICpkZXYsIHN0cnVj dCBlbTI4eHhfZnJhbWVfdCAqKmYsCisJCQkJc3RydWN0IGVtMjh4eF9mcmFtZV90ICoqdmJpZiwK KwkJCQl1bnNpZ25lZCBsb25nICpsb2NrX2ZsYWdzLCB1bnNpZ25lZCBjaGFyIGJ1ZikKK3sKKwor CWlmICghKGJ1ZiAmIDB4MDEpKSB7CisJCWlmICgoKnZiaWYpKSB7CisJCQlpZiAoKCp2YmlmKS0+ c3RhdGUgPT0gRl9HUkFCQklORykgeworCQkJCS8qcHJldmlvdXMgZnJhbWUgaXMgaW5jb21wbGV0 ZSAqLworCQkJCWlmICgoKnZiaWYpLT5maWVsZGJ5dGVzdXNlZCA8IGRldi0+dmJpX2ZpZWxkX3Np emUpIHsKKwkJCQkJKCp2YmlmKS0+c3RhdGUgPSBGX0VSUk9SOworCQkJCX0gZWxzZSB7CisJCQkJ CSgqdmJpZiktPnN0YXRlID0gRl9ET05FOworCQkJCQkoKnZiaWYpLT5idWYuYnl0ZXN1c2VkID0g ZGV2LT52YmlfZnJhbWVfc2l6ZTsKKwkJCQl9CisJCQl9CisJCQlpZiAoKCp2YmlmKS0+c3RhdGUg PT0gRl9ET05FIHx8CisJCQkJCSgqdmJpZiktPnN0YXRlID09IEZfRVJST1IpIHsKKwkJCQkvKiBt b3ZlIGN1cnJlbnQgZnJhbWUgdG8gb3V0cXVldWUgYW5kIGdldCBuZXh0IGZyZWUgYnVmZmVyIGZy b20gaW5xdWV1ZSAqLworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnZiaV9xdWV1ZV9sb2Nr LAorCQkJCQkJKmxvY2tfZmxhZ3MpOworCQkJCWxpc3RfbW92ZV90YWlsKCYoKnZiaWYpLT5mcmFt ZSwKKwkJCQkJCSZkZXYtPnZiaV9vdXRxdWV1ZSk7CisJCQkJaWYgKCFsaXN0X2VtcHR5KCZkZXYt PnZiaV9pbnF1ZXVlKSkKKwkJCQkJKCp2YmlmKSA9IGxpc3RfZW50cnkoCisJCQkJCQkJZGV2LT52 YmlfaW5xdWV1ZS5uZXh0LAorCQkJCQkJCXN0cnVjdCBlbTI4eHhfZnJhbWVfdCwKKwkJCQkJCQlm cmFtZSk7CisJCQkJZWxzZQorCQkJCQkoKnZiaWYpID0gTlVMTDsKKwkJCQlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZkZXYtPnZiaV9xdWV1ZV9sb2NrLAorCQkJCQkJKmxvY2tfZmxhZ3MpOworCQkJ fQorCQkJaWYgKCgqdmJpZikpIHsKKwkJCQlkb19nZXR0aW1lb2ZkYXkoJigqdmJpZiktPmJ1Zi50 aW1lc3RhbXApOworCQkJCSgqdmJpZiktPmJ1Zi5zZXF1ZW5jZSA9ICsrZGV2LT52YmlfZnJhbWVf Y291bnQ7CisJCQkJKCp2YmlmKS0+YnVmLmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwor CQkJCSgqdmJpZiktPnN0YXRlID0gRl9HUkFCQklORzsKKwkJCQkoKnZiaWYpLT5idWYuYnl0ZXN1 c2VkID0gMDsKKwkJCQkoKnZiaWYpLT50b3BfZmllbGQgPSAxOworCQkJCSgqdmJpZiktPmZpZWxk Ynl0ZXN1c2VkID0gMDsKKwkJCX0KKwkJfQorCQlpZiAoKCpmKSkgeworCQkJaWYgKCgqZiktPnN0 YXRlID09IEZfR1JBQkJJTkcpIHsKKwkJCQkvKnByZXZpb3VzIGZyYW1lIGlzIGluY29tcGxldGUg Ki8KKwkJCQlpZiAoKCpmKS0+ZmllbGRieXRlc3VzZWQgPCBkZXYtPmZpZWxkX3NpemUpIHsKKwkJ CQkJKCpmKS0+c3RhdGUgPSBGX0VSUk9SOworCQkJCX0gZWxzZSB7CisJCQkJCSgqZiktPnN0YXRl ID0gRl9ET05FOworCQkJCQkoKmYpLT5idWYuYnl0ZXN1c2VkID0gZGV2LT5mcmFtZV9zaXplOwor CQkJCX0KKwkJCX0KKwkJCWlmICgoKmYpLT5zdGF0ZSA9PSBGX0RPTkUgfHwgKCpmKS0+c3RhdGUg PT0gRl9FUlJPUikgeworCQkJCS8qIG1vdmUgY3VycmVudCBmcmFtZSB0byBvdXRxdWV1ZSBhbmQg Z2V0IG5leHQKKwkJCQkgICBmcmVlIGJ1ZmZlciBmcm9tIGlucXVldWUgKi8KKwkJCQlzcGluX2xv Y2tfaXJxc2F2ZSgmZGV2LT5xdWV1ZV9sb2NrLCAqbG9ja19mbGFncyk7CisJCQkJbGlzdF9tb3Zl X3RhaWwoJigqZiktPmZyYW1lLCAmZGV2LT5vdXRxdWV1ZSk7CisJCQkJaWYgKCFsaXN0X2VtcHR5 KCZkZXYtPmlucXVldWUpKSB7CisJCQkJCSgqZikgPSBsaXN0X2VudHJ5KGRldi0+aW5xdWV1ZS5u ZXh0LAorCQkJCQkJCXN0cnVjdCBlbTI4eHhfZnJhbWVfdCwKKwkJCQkJCQlmcmFtZSk7CisJCQkJ fSBlbHNlIHsKKwkJCQkJKCpmKSA9IE5VTEw7CisJCQkJfQorCQkJCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJmRldi0+cXVldWVfbG9jaywKKwkJCQkJCSpsb2NrX2ZsYWdzKTsKKwkJCX0KKwkJCWlm ICgoKmYpKSB7CisJCQkJZG9fZ2V0dGltZW9mZGF5KCYoKmYpLT5idWYudGltZXN0YW1wKTsKKwkJ CQkoKmYpLT5idWYuc2VxdWVuY2UgPSArK2Rldi0+ZnJhbWVfY291bnQ7CisJCQkJKCpmKS0+YnVm LmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCQkJCSgqZiktPnN0YXRlID0gRl9HUkFC QklORzsKKwkJCQkoKmYpLT5idWYuYnl0ZXN1c2VkID0gMDsKKwkJCQkoKmYpLT50b3BfZmllbGQg PSAxOworCQkJCSgqZiktPmZpZWxkYnl0ZXN1c2VkID0gMDsKKwkJCX0KKwkJfQorCX0gZWxzZSB7 CisJCWlmICgoKnZiaWYpKSB7CisJCQlpZiAoKCp2YmlmKS0+c3RhdGUgPT0gRl9RVUVVRUQpCisJ CQkJKCp2YmlmKS0+dG9wX2ZpZWxkID0gMDsKKwkJCWVsc2UgaWYgKCgqdmJpZiktPnN0YXRlID09 IEZfR1JBQkJJTkcpIHsKKwkJCQlpZiAoISgqdmJpZiktPnRvcF9maWVsZCkKKwkJCQkJKCp2Ymlm KS0+c3RhdGUgPSBGX0VSUk9SOworCQkJCWVsc2UgaWYgKCgqdmJpZiktPmZpZWxkYnl0ZXN1c2Vk IDwKKwkJCQkJCWRldi0+dmJpX2ZpZWxkX3NpemUgLSAxNzIpCisJCQkJCSgqdmJpZiktPnN0YXRl ID0gRl9FUlJPUjsKKwkJCQllbHNlIHsKKwkJCQkJKCp2YmlmKS0+dG9wX2ZpZWxkID0gMDsKKwkJ CQkJKCp2YmlmKS0+ZmllbGRieXRlc3VzZWQgPSAwOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlm ICgoKmYpKSB7CisJCQlpZiAoKCpmKS0+c3RhdGUgPT0gRl9HUkFCQklORykgeworCQkJCWlmICgh KCpmKS0+dG9wX2ZpZWxkKQorCQkJCQkoKmYpLT5zdGF0ZSA9IEZfRVJST1I7CisJCQkJZWxzZSBp ZiAoKCpmKS0+ZmllbGRieXRlc3VzZWQgPAorCQkJCQkJZGV2LT5maWVsZF9zaXplIC0gMTcyKQor CQkJCQkoKmYpLT5zdGF0ZSA9IEZfRVJST1I7CisJCQkJZWxzZSB7CisJCQkJCSgqZiktPnRvcF9m aWVsZCA9IDA7CisJCQkJCSgqZiktPmZpZWxkYnl0ZXN1c2VkID0gMDsKKwkJCQl9CisJCQl9CisJ CX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGVtMjh4eF9pc29jX3ZpZGVvX2Nv cHkoc3RydWN0IGVtMjh4eCAqZGV2LAorCQkJCQkgIHN0cnVjdCBlbTI4eHhfZnJhbWVfdCAqKmYs IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IHZiaW9mZnNldCkKK3sKKwl2b2lkICpm aWVsZHN0YXJ0LCAqc3RhcnR3cml0ZSwgKnN0YXJ0cmVhZDsKKwlpbnQgbGluZXNkb25lLCBjdXJy bGluZWRvbmUsIG9mZnNldCwgbGVuY29weSwgcmVtYWluOworCisJaWYgKGRldi0+ZnJhbWVfc2l6 ZSAhPSAoKmYpLT5idWYubGVuZ3RoKQorCQlyZXR1cm47CisKKwlpZiAodmJpb2Zmc2V0ID4gMCkg eworCQlzdGFydHJlYWQgPSBidWYrdmJpb2Zmc2V0OworCQlsZW4gLT0gdmJpb2Zmc2V0OworCX0g ZWxzZSB7CisJCXN0YXJ0cmVhZCA9IGJ1Zis0OworCQlsZW4gLT0gNDsKKwl9CisKKwlpZiAoKCpm KS0+ZmllbGRieXRlc3VzZWQgKyBsZW4gPiBkZXYtPmZpZWxkX3NpemUpCisJCWxlbiA9IGRldi0+ ZmllbGRfc2l6ZSAtICgqZiktPmZpZWxkYnl0ZXN1c2VkOworCisJcmVtYWluID0gbGVuOworCisK KwlpZiAoKCpmKS0+dG9wX2ZpZWxkKQorCQlmaWVsZHN0YXJ0ID0gKCpmKS0+YnVmbWVtOworCWVs c2UKKwkJZmllbGRzdGFydCA9ICgqZiktPmJ1Zm1lbSArIGRldi0+Ynl0ZXNwZXJsaW5lOworCisJ bGluZXNkb25lID0gKCpmKS0+ZmllbGRieXRlc3VzZWQgLyBkZXYtPmJ5dGVzcGVybGluZTsKKwlj dXJybGluZWRvbmUgPSAoKmYpLT5maWVsZGJ5dGVzdXNlZCAlIGRldi0+Ynl0ZXNwZXJsaW5lOwor CW9mZnNldCA9IGxpbmVzZG9uZSAqIGRldi0+Ynl0ZXNwZXJsaW5lICogMiArIGN1cnJsaW5lZG9u ZTsKKwlzdGFydHdyaXRlID0gZmllbGRzdGFydCArIG9mZnNldDsKKwlsZW5jb3B5ID0gZGV2LT5i eXRlc3BlcmxpbmUgLSBjdXJybGluZWRvbmU7CisJbGVuY29weSA9IGxlbmNvcHkgPiByZW1haW4g PyByZW1haW4gOiBsZW5jb3B5OworCisJbWVtY3B5KHN0YXJ0d3JpdGUsIHN0YXJ0cmVhZCwgbGVu Y29weSk7CisJcmVtYWluIC09IGxlbmNvcHk7CisKKwl3aGlsZSAocmVtYWluID4gMCkgeworCQlz dGFydHdyaXRlICs9IGxlbmNvcHkgKyBkZXYtPmJ5dGVzcGVybGluZTsKKwkJc3RhcnRyZWFkICs9 IGxlbmNvcHk7CisJCWlmIChkZXYtPmJ5dGVzcGVybGluZSA+IHJlbWFpbikKKwkJCWxlbmNvcHkg PSByZW1haW47CisJCWVsc2UKKwkJCWxlbmNvcHkgPSBkZXYtPmJ5dGVzcGVybGluZTsKKworCQlt ZW1jcHkoc3RhcnR3cml0ZSwgc3RhcnRyZWFkLCBsZW5jb3B5KTsKKwkJcmVtYWluIC09IGxlbmNv cHk7CisJfQorCisJKCpmKS0+ZmllbGRieXRlc3VzZWQgKz0gbGVuOworfQorCitzdGF0aWMgaW50 IGVtMjh4eF9pc29jX3ZiaV9jb3B5KHN0cnVjdCBlbTI4eHggKmRldiwKKwkJc3RydWN0IGVtMjh4 eF9mcmFtZV90ICoqdmJpZiwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXZvaWQg KmZpZWxkc3RhcnQsICpzdGFydHdyaXRlLCAqc3RhcnRyZWFkOworCWludCBsaW5lc2RvbmUsIGN1 cnJsaW5lZG9uZSwgb2Zmc2V0LCBsZW5jb3B5LCByZW1haW47CisKKwlpZiAoKCgqdmJpZikgJiYg ZGV2LT52YmlfZHJvcGJ5dGVzID09IDApICYmCisJCSEoKCp2YmlmKS0+dG9wX2ZpZWxkID09IDAg JiYgKCp2YmlmKS0+c3RhdGUgPT0gRl9RVUVVRUQpKSB7CisJCWlmICgoKnZiaWYpLT5maWVsZGJ5 dGVzdXNlZCA8IGRldi0+dmJpX2ZpZWxkX3NpemUpIHsKKwkJCWlmICgoKnZiaWYpLT5maWVsZGJ5 dGVzdXNlZCArIChsZW4tNCkgPgorCQkJCQlkZXYtPnZiaV9maWVsZF9zaXplKSB7CisJCQkJbGVu ID0gZGV2LT52YmlfZmllbGRfc2l6ZSAtCisJCQkJCSgqdmJpZiktPmZpZWxkYnl0ZXN1c2VkOwor CisJCQkJc3RhcnRyZWFkID0gYnVmKzQ7CisJCQkJcmVtYWluID0gbGVuLTQ7CisKKwkJCQlpZiAo KCp2YmlmKS0+dG9wX2ZpZWxkKQorCQkJCQlmaWVsZHN0YXJ0ID0gKCp2YmlmKS0+YnVmbWVtOwor CQkJCWVsc2UgeworCQkJCQlpZiAoZGV2LT52YmlfaW50ZXJsYWNlZCkKKwkJCQkJCWZpZWxkc3Rh cnQgPSAoKnZiaWYpLT5idWZtZW0gKworCQkJCQkJCWRldi0+dmJpX2J5dGVzcGVybGluZTsKKwkJ CQkJZWxzZQorCQkJCQkJZmllbGRzdGFydCA9ICgqdmJpZiktPmJ1Zm1lbSArCisJCQkJCQkJZGV2 LT52YmlfZmllbGRfc2l6ZTsKKwkJCQl9CisKKwkJCQlsaW5lc2RvbmUgPSAoKnZiaWYpLT5maWVs ZGJ5dGVzdXNlZCAvCisJCQkJCWRldi0+dmJpX2J5dGVzcGVybGluZTsKKwkJCQljdXJybGluZWRv bmUgPSAoKnZiaWYpLT5maWVsZGJ5dGVzdXNlZCAlCisJCQkJCWRldi0+dmJpX2J5dGVzcGVybGlu ZTsKKworCQkJCWlmIChkZXYtPnZiaV9pbnRlcmxhY2VkKQorCQkJCQlvZmZzZXQgPSBsaW5lc2Rv bmUgKiBkZXYtPnZiaV9ieXRlc3BlcmxpbmUgKgorCQkJCQkJMiArIGN1cnJsaW5lZG9uZTsKKwkJ CQllbHNlCisJCQkJCW9mZnNldCA9IGxpbmVzZG9uZSAqIGRldi0+dmJpX2J5dGVzcGVybGluZSAr CisJCQkJCQljdXJybGluZWRvbmU7CisKKwkJCQlzdGFydHdyaXRlID0gZmllbGRzdGFydCArIG9m ZnNldDsKKwkJCQlsZW5jb3B5ID0gZGV2LT52YmlfYnl0ZXNwZXJsaW5lIC0gY3VycmxpbmVkb25l OworCQkJCWxlbmNvcHkgPSBsZW5jb3B5ID4gcmVtYWluID8gcmVtYWluIDogbGVuY29weTsKKwor CQkJCW1lbWNweShzdGFydHdyaXRlLCBzdGFydHJlYWQsIGxlbmNvcHkpOworCQkJCXJlbWFpbiAt PSBsZW5jb3B5OworCisJCQkJd2hpbGUgKHJlbWFpbiA+IDApIHsKKwkJCQkJc3RhcnR3cml0ZSAr PSBsZW5jb3B5OworCQkJCQlpZiAoZGV2LT52YmlfaW50ZXJsYWNlZCkKKwkJCQkJCXN0YXJ0d3Jp dGUgKz0gZGV2LT52YmlfYnl0ZXNwZXJsaW5lOworCisJCQkJCXN0YXJ0cmVhZCArPSBsZW5jb3B5 OworCQkJCQlpZiAoZGV2LT52YmlfYnl0ZXNwZXJsaW5lID4gcmVtYWluKQorCQkJCQkJbGVuY29w eSA9IHJlbWFpbjsKKwkJCQkJZWxzZQorCQkJCQkJbGVuY29weSA9IGRldi0+dmJpX2J5dGVzcGVy bGluZTsKKworCQkJCQltZW1jcHkoc3RhcnR3cml0ZSwgc3RhcnRyZWFkLCBsZW5jb3B5KTsKKwkJ CQkJcmVtYWluIC09IGxlbmNvcHk7CisJCQkJfQorCQkJCSgqdmJpZiktPmZpZWxkYnl0ZXN1c2Vk ID0gZGV2LT52YmlfZmllbGRfc2l6ZTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKCgqdmJpZiktPnRv cF9maWVsZCkKKwkJCQkJZmllbGRzdGFydCA9ICgqdmJpZiktPmJ1Zm1lbTsKKwkJCQllbHNlIHsK KwkJCQkJaWYgKGRldi0+dmJpX2ludGVybGFjZWQpCisJCQkJCQlmaWVsZHN0YXJ0ID0gKCp2Ymlm KS0+YnVmbWVtICsgCisJCQkJCQkJZGV2LT52YmlfYnl0ZXNwZXJsaW5lOworCQkJCQllbHNlIAor CQkJCQkJZmllbGRzdGFydCA9ICgqdmJpZiktPmJ1Zm1lbSArCisJCQkJCQkJZGV2LT52YmlfZmll bGRfc2l6ZTsKKwkJCQl9CisKKwkJCQlzdGFydHJlYWQgPSBidWYrNDsKKwkJCQlyZW1haW4gPSBs ZW4tNDsKKworCQkJCWxpbmVzZG9uZSA9ICgqdmJpZiktPmZpZWxkYnl0ZXN1c2VkIC8KKwkJCQkJ ZGV2LT52YmlfYnl0ZXNwZXJsaW5lOworCQkJCWN1cnJsaW5lZG9uZSA9ICgqdmJpZiktPmZpZWxk Ynl0ZXN1c2VkICUKKwkJCQkJZGV2LT52YmlfYnl0ZXNwZXJsaW5lOworCQkJCWlmIChkZXYtPnZi aV9pbnRlcmxhY2VkKQorCQkJCQlvZmZzZXQgPSBsaW5lc2RvbmUgKiBkZXYtPnZiaV9ieXRlc3Bl cmxpbmUgKgorCQkJCQkJMiArIGN1cnJsaW5lZG9uZTsKKwkJCQllbHNlCisJCQkJCW9mZnNldCA9 IGxpbmVzZG9uZSAqIGRldi0+dmJpX2J5dGVzcGVybGluZSArCisJCQkJCQljdXJybGluZWRvbmU7 CisKKwkJCQlzdGFydHdyaXRlID0gZmllbGRzdGFydCArIG9mZnNldDsKKwkJCQlsZW5jb3B5ID0g ZGV2LT52YmlfYnl0ZXNwZXJsaW5lIC0gY3VycmxpbmVkb25lOworCQkJCWxlbmNvcHkgPSBsZW5j b3B5ID4gcmVtYWluID8gcmVtYWluIDogbGVuY29weTsKKworCQkJCW1lbWNweShzdGFydHdyaXRl LCBzdGFydHJlYWQsIGxlbmNvcHkpOworCQkJCXJlbWFpbiAtPSBsZW5jb3B5OworCisJCQkJd2hp bGUgKHJlbWFpbiA+IDApIHsKKwkJCQkJc3RhcnR3cml0ZSArPSBsZW5jb3B5OworCisJCQkJCWlm IChkZXYtPnZiaV9pbnRlcmxhY2VkKQorCQkJCQkJc3RhcnR3cml0ZSArPSBkZXYtPnZiaV9ieXRl c3BlcmxpbmU7CisKKwkJCQkJc3RhcnRyZWFkICs9IGxlbmNvcHk7CisJCQkJCWlmIChkZXYtPnZi aV9ieXRlc3BlcmxpbmUgPiByZW1haW4pCisJCQkJCQlsZW5jb3B5ID0gcmVtYWluOworCQkJCQll bHNlCisJCQkJCQlsZW5jb3B5ID0gZGV2LT52YmlfYnl0ZXNwZXJsaW5lOworCQkJCQltZW1jcHko c3RhcnR3cml0ZSwgc3RhcnRyZWFkLCBsZW5jb3B5KTsKKwkJCQkJcmVtYWluIC09IGxlbmNvcHk7 CisJCQkJfQorCQkJCSgqdmJpZiktPmZpZWxkYnl0ZXN1c2VkICs9IChsZW4tNCk7CisJCQkJbGVu IC09IDQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQlsZW4gPSAtNDsKKwkJfQorCX0gZWxzZSB7CisJ CWlmIChkZXYtPnZiaV9kcm9wYnl0ZXMgPCBkZXYtPnZiaV9maWVsZF9zaXplKSB7CisJCQlpZiAo ZGV2LT52YmlfZHJvcGJ5dGVzICsgKGxlbi00KSA+CisJCQkJCWRldi0+dmJpX2ZpZWxkX3NpemUp IHsKKwkJCQlsZW4gPSBkZXYtPnZiaV9maWVsZF9zaXplIC0gZGV2LT52YmlfZHJvcGJ5dGVzOwor CQkJCWRldi0+dmJpX2Ryb3BieXRlcyA9IGRldi0+dmJpX2ZpZWxkX3NpemU7CisJCQl9IGVsc2Ug eworCQkJCWRldi0+dmJpX2Ryb3BieXRlcyArPSAobGVuLTQpOworCQkJCWxlbiAtPSA0OworCQkJ fQorCQl9IGVsc2UgeworCQkJbGVuID0gLTQ7CisJCX0KKwl9CisJcmV0dXJuIGxlbjsKK30KKwor LyoKKyAqIGVtMjh4eF9pc29JcnEoKQorICogaGFuZGxlcyB0aGUgaW5jb21pbmcgaXNvYyB1cmJz IGFuZCBmaWxscyB0aGUgZnJhbWVzIGZyb20gb3VyIGlucXVldWUKKyAqLworI2lmIExJTlVYX1ZF UlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE5KQordm9pZCBlbTI4eHhfaXNvY0ly cShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorI2Vsc2UKK3N0YXRpYyB2 b2lkIGVtMjh4eF9pc29jSXJxKHN0cnVjdCB1cmIgKnVyYikKKyNlbmRpZgoreworCXN0cnVjdCBl bTI4eHggKmRldiA9IHVyYi0+Y29udGV4dDsKKwlpbnQgaSwgc3RhdHVzOworCXN0cnVjdCBlbTI4 eHhfZnJhbWVfdCAqKmYsICoqdmJpZjsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJaW50 IHZiaW9mZnNldCA9IDA7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuOworI2lmZGVmIEVOQUJMRV9E RUJVR19JU09DX0ZSQU1FUworCWlmIChpc29jX2RlYnVnID4gMSkKKyNpZiBMSU5VWF9WRVJTSU9O X0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA2LCAxOSkKKwkJZW0yOHh4X2lzb2NfZHVtcCh1cmIs IHJlZ3MpOworI2Vsc2UKKwkJZW0yOHh4X2lzb2NfZHVtcCh1cmIpOworI2VuZGlmCisjZW5kaWYK KwlpZiAodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCkKKwkJcmV0dXJuOworCisJZiA9ICZkZXYtPmZy YW1lX2N1cnJlbnQ7CisJdmJpZiA9ICZkZXYtPnZiaV9mcmFtZV9jdXJyZW50OworCisJaWYgKGRl di0+dmlkZW9fc3RyZWFtID09IFNUUkVBTV9JTlRFUlJVUFQpIHsKKwkJZGV2LT52aWRlb19zdHJl YW0gPSBTVFJFQU1fT0ZGOworCQlpZiAoKCpmKSkKKwkJCSgqZiktPnN0YXRlID0gRl9RVUVVRUQ7 CisJCSgqZikgPSBOVUxMOworCisJCWVtMjh4eF9pc29jZGJnKCJzdHJlYW0gaW50ZXJydXB0ZWQi KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPnZpZGVvX3dhaXRfc3RyZWFtKTsKKwl9 CisKKwlpZiAoZGV2LT52Ymlfc3RyZWFtID09IFNUUkVBTV9JTlRFUlJVUFQpIHsKKwkJZGV2LT52 Ymlfc3RyZWFtID0gU1RSRUFNX09GRjsKKwkJaWYgKCgqdmJpZikpIHsKKwkJCWlmICgoKnZiaWYp LT5maWVsZGJ5dGVzdXNlZCkKKwkJCQlkZXYtPnZiaV9kcm9wYnl0ZXMgPSAoKnZiaWYpLT5maWVs ZGJ5dGVzdXNlZDsKKworCQkJKCp2YmlmKS0+c3RhdGUgPSBGX1FVRVVFRDsKKwkJfQorCQkoKnZi aWYpID0gTlVMTDsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPnZiaV93YWl0X3N0cmVh bSk7CisJfQorCisJaWYgKChkZXYtPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgfHwgKGRldi0+ c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkpCisJCXJldHVybjsKKworCWlmIChkZXYtPnZpZGVv X3N0cmVhbSA9PSBTVFJFQU1fT04gfHwgZGV2LT52Ymlfc3RyZWFtID09IFNUUkVBTV9PTikgewor CQlpZiAoZGV2LT52aWRlb19zdHJlYW0gPT0gU1RSRUFNX09OICYmCisJCQkhbGlzdF9lbXB0eSgm ZGV2LT5pbnF1ZXVlKSAmJgorCQkJISgqZikpCisKKwkJCSgqZikgPSBsaXN0X2VudHJ5KGRldi0+ aW5xdWV1ZS5uZXh0LAorCQkJCQlzdHJ1Y3QgZW0yOHh4X2ZyYW1lX3QsIGZyYW1lKTsKKworCQlp ZiAoKGRldi0+ZGV2X21vZGVzICYgRU0yOFhYX1ZCSSkgJiYKKwkJCWRldi0+dmJpX3N0cmVhbSA9 PSBTVFJFQU1fT04gJiYKKwkJCSFsaXN0X2VtcHR5KCZkZXYtPnZiaV9pbnF1ZXVlKSAmJgorCQkJ ISgqdmJpZikpCisKKwkJCSgqdmJpZikgPSBsaXN0X2VudHJ5KGRldi0+dmJpX2lucXVldWUubmV4 dCwKKwkJCQkJc3RydWN0IGVtMjh4eF9mcmFtZV90LCBmcmFtZSk7CisKKwkJZm9yIChpID0gMDsg aSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQkJdW5zaWduZWQgY2hhciAqYnVm ID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKworCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9m ZnNldDsKKwkJCWludCBsZW4gPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGg7 CisKKwkJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cykgeworCQkJCWVtMjh4eF9p c29jZGJnKCJkYXRhIGVycm9yOiBbJWRdIGxlbj0lZCwgIgorCQkJCQkJInN0YXR1cz0lZCIsIGks CisJCQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCwKKwkJCQkJdXJiLT5p c29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpOworCisJCQkJaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2Nb aV0uc3RhdHVzICE9IC1FUFJPVE8pIHsKKwkJCQkJZW0yOHh4X2lzb2NkYmcoImNvbnRpbnVlLCBs ZW49JWRcbiIsCisJCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGgpOwor CQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tp XS5hY3R1YWxfbGVuZ3RoIDw9IDApIHsKKwkJCQllbTI4eHhfaXNvY2RiZygicGFja2V0ICVkIGlz IGVtcHR5XG4iLCBpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKHVyYi0+aXNvX2Zy YW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA+CisJCQkJCQkgZGV2LT5tYXhfcGt0X3NpemUpIHsK KwkJCQllbTI4eHhfaXNvY2RiZygicGFja2V0IGJpZ2dlciB0aGFuIHBhY2tldCAiCisJCQkJCSAg ICAgICAic2l6ZVxuIik7CisJCQkJY29udGludWU7CisJCQl9CisjaWYgMAorCQkJaWYgKGJ1Zlsw XSAhPSAweDg4ICYmIGJ1ZlsxXSAhPSAweDg4KQorCQkJCXByaW50ayhLRVJOX0RFQlVHImhlYWRp bmdzOiAlMDJ4ICUwMnhcbiIsCisJCQkJCQlidWZbMF0sIGJ1ZlsxXSk7CisjZW5kaWYKKwkJCWlm IChidWZbMF0gPT0gMHgyMiAmJiBidWZbMV0gPT0gMHg1YSkgeworCQkJCWVtMjh4eF9pc29jZGJn KCJWaWRlbyBmcmFtZSwgbGVuZ3RoPSVpIVxuIiwKKwkJCQkJCWxlbik7CisJCQkJZGV2LT52Ymlf ZHJvcGJ5dGVzID0gMDsKKwkJCQllbTI4eHhfaXNvY192aWRlbyhkZXYsIGYsIHZiaWYsICZsb2Nr X2ZsYWdzLAorCQkJCQkJYnVmWzJdKTsKKwkJCX0gZWxzZSBpZiAoYnVmWzBdID09IDB4MzMgJiYg YnVmWzFdID09IDB4OTUpIHsKKwkJCQlkZXYtPnZiaV9kcm9wYnl0ZXMgPSAwOworCQkJCWVtMjh4 eF9pc29jX3ZpZGVvKGRldiwgZiwgdmJpZiwgJmxvY2tfZmxhZ3MsCisJCQkJCQlidWZbMl0pOwor CQkJfQorCisJCQkvKiBhY3R1YWwgY29weWluZyAqLworCQkJaWYgKGRldi0+ZGV2X21vZGVzICYg RU0yOFhYX1ZCSSkgeworCQkJCXZiaW9mZnNldCA9IGVtMjh4eF9pc29jX3ZiaV9jb3B5KGRldiwg dmJpZiwKKwkJCQkJCWJ1ZiwgbGVuKSArIDQ7CisJCQl9IGVsc2UKKwkJCQl2YmlvZmZzZXQgPSAw OworCisJCQlpZiAoKCpmKSAmJiAobGVuIC0gdmJpb2Zmc2V0ID4gMCkgJiYKKwkJCQkJKCpmKS0+ c3RhdGUgPT0gRl9HUkFCQklORykKKwkJCQllbTI4eHhfaXNvY192aWRlb19jb3B5KGRldiwgZiwg YnVmLCBsZW4sCisJCQkJCQl2YmlvZmZzZXQpOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8 IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ld LnN0YXR1cyA9IDA7CisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA9IDA7 CisJfQorCisJdXJiLT5zdGF0dXMgPSAwOworCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwg R0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cykgeworCQllbTI4eHhfZXJyZGV2KCJyZXN1Ym1pdCBv ZiB1cmIgZmFpbGVkIChlcnJvcj0laSlcbiIsIHN0YXR1cyk7CisJCWRldi0+c3RhdGUgfD0gREVW X01JU0NPTkZJR1VSRUQ7CisJfQorCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X2Zy YW1lKTsKKwlpZiAoZGV2LT5kZXZfbW9kZXMgJiBFTTI4WFhfVkJJKQorCQl3YWtlX3VwX2ludGVy cnVwdGlibGUoJmRldi0+d2FpdF92YmlfZnJhbWUpOworfQorCisvKgorICogZW0yOHh4X3VuaW5p dF9pc29jKCkKKyAqIGRlYWxsb2NhdGVzIHRoZSBidWZmZXJzIGFuZCB1cmJzIGFsbG9jYXRlZCBk dXJpbmcgZW0yOHh4X2luaXRfaW9zYygpCisgKi8KK3ZvaWQgZW0yOHh4X3VuaW5pdF9pc29jKHN0 cnVjdCBlbTI4eHggKmRldikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgRU0yOFhYX05V TV9CVUZTOyBpKyspIHsKKwkJaWYgKGRldi0+dXJiW2ldKSB7CisJCQl1c2Jfa2lsbF91cmIoZGV2 LT51cmJbaV0pOworCQkJaWYgKGRldi0+dHJhbnNmZXJfYnVmZmVyW2ldKSB7CisJCQkJdXNiX2J1 ZmZlcl9mcmVlKGRldi0+dWRldiwKKwkJCQkJZGV2LT51cmJbaV0tPnRyYW5zZmVyX2J1ZmZlcl9s ZW5ndGgsCisJCQkJCWRldi0+dHJhbnNmZXJfYnVmZmVyW2ldLAorCQkJCQlkZXYtPnVyYltpXS0+ dHJhbnNmZXJfZG1hKTsKKwkJCX0KKwkJCXVzYl9mcmVlX3VyYihkZXYtPnVyYltpXSk7CisJCX0K KwkJZGV2LT51cmJbaV0gPSBOVUxMOworCQlkZXYtPnRyYW5zZmVyX2J1ZmZlcltpXSA9IE5VTEw7 CisJfQorCWVtMjh4eF9jYXB0dXJlX3N0YXJ0KGRldiwgMCk7Cit9CisKKy8qCisgKiBlbTI4eHhf aW5pdF9pc29jKCkKKyAqIGFsbG9jYXRlcyB0cmFuc2ZlciBidWZmZXJzIGFuZCBzdWJtaXRzIHRo ZSB1cmJzIGZvciBpc29jIHRyYW5zZmVyCisgKi8KK2ludCBlbTI4eHhfaW5pdF9pc29jKHN0cnVj dCBlbTI4eHggKmRldikKK3sKKwkvKiBjaGFuZ2UgaW50ZXJmYWNlIHRvIDMgd2hpY2ggYWxsb3dl cyB0aGUgYmlnZ2VzdCBwYWNrZXQgc2l6ZXMgKi8KKwlpbnQgaSwgZXJyQ29kZTsKKwljb25zdCBp bnQgc2Jfc2l6ZSA9IEVNMjhYWF9OVU1fUEFDS0VUUyAqIGRldi0+bWF4X3BrdF9zaXplOworCisJ LyogcmVzZXQgc3RyZWFtaW5nIHZhcnMgKi8KKwlkZXYtPmZyYW1lX2N1cnJlbnQgPSBOVUxMOwor CWRldi0+ZnJhbWVfY291bnQgPSAwOworCisJZGV2LT52YmlfZnJhbWVfY3VycmVudCA9IE5VTEw7 CisJZGV2LT52YmlfZnJhbWVfY291bnQgPSAwOworCisJLyogYWxsb2NhdGUgdXJicyAqLworCWZv ciAoaSA9IDA7IGkgPCBFTTI4WFhfTlVNX0JVRlM7IGkrKykgeworCQlzdHJ1Y3QgdXJiICp1cmI7 CisJCWludCBqLCBrOworCQkvKiBhbGxvY2F0ZSB0cmFuc2ZlciBidWZmZXIgKi8KKwkJdXJiID0g dXNiX2FsbG9jX3VyYihFTTI4WFhfTlVNX1BBQ0tFVFMsIEdGUF9LRVJORUwpOworCQlpZiAoIXVy YikgeworCQkJZW0yOHh4X2VycmRldigiY2Fubm90IGFsbG9jIHVyYiAlaVxuIiwgaSk7CisJCQll bTI4eHhfdW5pbml0X2lzb2MoZGV2KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWRldi0+ dHJhbnNmZXJfYnVmZmVyW2ldID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYtPnVkZXYsCisJCQkJc2Jf c2l6ZSwgR0ZQX0tFUk5FTCwgJnVyYi0+dHJhbnNmZXJfZG1hKTsKKwkJaWYgKCFkZXYtPnRyYW5z ZmVyX2J1ZmZlcltpXSkgeworCQkJZW0yOHh4X2VycmRldigidW5hYmxlIHRvIGFsbG9jYXRlICVp IGJ5dGVzIGZvciAiCisJCQkJICAgICAgInRyYW5zZmVyIGJ1ZmZlciAlaVxuIiwgc2Jfc2l6ZSwg aSk7CisJCQllbTI4eHhfdW5pbml0X2lzb2MoZGV2KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9 CisJCW1lbXNldChkZXYtPnRyYW5zZmVyX2J1ZmZlcltpXSwgMCwgc2Jfc2l6ZSk7CisJCXVyYi0+ ZGV2ID0gZGV2LT51ZGV2OworCQl1cmItPmNvbnRleHQgPSBkZXY7CisJCXVyYi0+cGlwZSA9IHVz Yl9yY3Zpc29jcGlwZShkZXYtPnVkZXYsIDB4ODIpOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0g VVJCX0lTT19BU0FQIHwgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJCXVyYi0+aW50ZXJ2YWwg PSAxOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGRldi0+dHJhbnNmZXJfYnVmZmVyW2ldOwor CQl1cmItPmNvbXBsZXRlID0gZW0yOHh4X2lzb2NJcnE7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tl dHMgPSBFTTI4WFhfTlVNX1BBQ0tFVFM7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9 IHNiX3NpemU7CisJCWZvciAoaiA9IGsgPSAwOyBqIDwgRU0yOFhYX05VTV9QQUNLRVRTOworCQkJ CWorKywgayArPSBkZXYtPm1heF9wa3Rfc2l6ZSkgeworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tq XS5vZmZzZXQgPSBrOworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5sZW5ndGggPQorCQkJCWRl di0+bWF4X3BrdF9zaXplOworCQl9CisJCWRldi0+dXJiW2ldID0gdXJiOworCX0KKworCS8qIHN1 Ym1pdCB1cmJzICovCisJZm9yIChpID0gMDsgaSA8IEVNMjhYWF9OVU1fQlVGUzsgaSsrKSB7CisJ CWVyckNvZGUgPSB1c2Jfc3VibWl0X3VyYihkZXYtPnVyYltpXSwgR0ZQX0tFUk5FTCk7CisJCWlm IChlcnJDb2RlKSB7CisJCQllbTI4eHhfZXJyZGV2KCJzdWJtaXQgb2YgdXJiICVpIGZhaWxlZCAo ZXJyb3I9JWkpXG4iLCBpLAorCQkJCSAgICAgIGVyckNvZGUpOworCQkJZW0yOHh4X3VuaW5pdF9p c29jKGRldik7CisJCQlyZXR1cm4gZXJyQ29kZTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQor CitpbnQgZW0yOHh4X3NldF9hbHRlcm5hdGUoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCWludCBl cnJDb2RlLCBwcmV2X2FsdCA9IGRldi0+YWx0OworCWRldi0+YWx0ID0gYWx0OworCWlmIChkZXYt PmFsdCA9PSAwKSB7CisJCWludCBpOworI2lmIDEgLyogQWx3YXlzIHRyeSB0byBnZXQgdGhlIG1h eGltdW0gc2l6ZSB2YWx1ZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fYWx0OyBpKysp CisJCQlpZiAoZGV2LT5hbHRfbWF4X3BrdF9zaXplW2ldID4KKwkJCQkJZGV2LT5hbHRfbWF4X3Br dF9zaXplW2Rldi0+YWx0XSkKKwkJCQlkZXYtPmFsdCA9IGk7CisjZW5kaWYKKyNpZiAwIC8qIFNo b3VsZCBiZSBkZXBlbmRlbnQgb2YgaG9yaXpvbnRhbCBzaXplICovCisJCWlmIChkZXYtPmVtX3R5 cGUgPT0gRU0yODAwKSB7CisJCQkvKiBhbHdheXMgdXNlIHRoZSBtYXggcGFja2V0IHNpemUgZm9y IGVtMjgwMAorCQkJICAgYmFzZWQgZGV2aWNlcyAqLworCQkJZm9yIChpID0gMDsgaSA8IGRldi0+ bnVtX2FsdDsgaSsrKQorCQkJCWlmIChkZXYtPmFsdF9tYXhfcGt0X3NpemVbaV0gPgorCQkJCQlk ZXYtPmFsdF9tYXhfcGt0X3NpemVbZGV2LT5hbHRdKQorCQkJCQlkZXYtPmFsdCA9IGk7CisJCX0g ZWxzZSB7CisJCQkvKiBGSVhNRTogZW1waXJpYyBtYWdpYyBudW1iZXIgKi8KKwkJCXVuc2lnbmVk IGludCBtaW5fcGt0X3NpemUgPSBkZXYtPmZpZWxkX3NpemUgLyAxMzc7CisJCQllbTI4eHhfY29y ZWRiZygibWluaW11bSBpc29jIHBhY2tldCBzaXplOiAldSIsCisJCQkJCW1pbl9wa3Rfc2l6ZSk7 CisJCQlkZXYtPmFsdCA9IDc7CisJCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fYWx0OyBpICsr KQorCQkJCWlmIChkZXYtPmFsdF9tYXhfcGt0X3NpemVbaV0gPj0gbWluX3BrdF9zaXplKSB7CisJ CQkJCWRldi0+YWx0ID0gaTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQl9CisjZW5kaWYKKwl9CisK KwlpZiAoZGV2LT5hbHQgIT0gcHJldl9hbHQpIHsKKwkJZGV2LT5tYXhfcGt0X3NpemUgPSBkZXYt PmFsdF9tYXhfcGt0X3NpemVbZGV2LT5hbHRdOworCQllbTI4eHhfY29yZWRiZygic2V0dGluZyBh bHRlcm5hdGUgJWQgd2l0aCB3TWF4UGFja2V0U2l6ZT0ldVxuIiwgZGV2LT5hbHQsCisJCSAgICAg ICBkZXYtPm1heF9wa3Rfc2l6ZSk7CisKKwkJZXJyQ29kZSA9IHVzYl9zZXRfaW50ZXJmYWNlKGRl di0+dWRldiwgZGV2LT51c2JfaW50ZXJmYWNlLCBkZXYtPmFsdCk7CisJCWlmIChlcnJDb2RlIDwg MCkgeworCQkJZW0yOHh4X2VycmRldigiY2Fubm90IGNoYW5nZSBhbHRlcm5hdGUgbnVtYmVyIHRv ICVkICIKKwkJCQkJIihlcnJvcj0laSlcbiIsCisJCQkJCWRldi0+YWx0LCBlcnJDb2RlKTsKKwkJ CXJldHVybiBlcnJDb2RlOworCQl9CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9tZWRpYS92aWRlby9lbXBpYS9lbTI4eHgtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVv L2VtcGlhL2VtMjh4eC1pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x Mjc4ZTZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbXBpYS9lbTI4 eHgtaTJjLmMKQEAgLTAsMCArMSw5ODMgQEAKKy8qCisgICBlbTI4eHgtaTJjLmMgLSBkcml2ZXIg Zm9yIEVtcGlhIEVNMjgwMC9FTTI4MjAvMjg0MC8yODgwIFVTQgorICAgdmlkZW8gY2FwdHVyZSBk ZXZpY2VzCisKKyAgIENvcHlyaWdodCAoQykgMjAwNSBMdWRvdmljbyBDYXZlZG9uIDxjYXZlZG9u QHNzc3VwLml0PgorCQkgICAgICBNYXJrdXMgUmVjaGJlcmdlciA8bXJlY2hiZXJnZXJAZ21haWwu Y29tPgorCQkgICAgICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9y Zz4KKwkJICAgICAgU2FzY2hhIFNvbW1lciA8c2FzY2hhc29tbWVyQGZyZWVuZXQuZGU+CisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg RnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlk Z2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUg PGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51 eC92aWRlb19kZWNvZGVyLmg+CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJ T04oMiwgNiwgMjcpCisjaW5jbHVkZSA8bWVkaWEvYXVkaW9jaGlwLmg+CisjZWxzZQorI2luY2x1 ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2VuZGlmCisjaWZkZWYgRU0yOFhYX1RWRUVQ Uk9NCisjaW5jbHVkZSA8bWVkaWEvdHZlZXByb20uaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZW0y OHh4LmgiCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS90 dW5lci5oPgorCisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisKKyNpbmNsdWRlICJ4YzUwMDAv eGM1MDAwX2NvbnRyb2wuaCIKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGky Y19zY2FuOworbW9kdWxlX3BhcmFtKGkyY19zY2FuLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1f REVTQyhpMmNfc2NhbiwgInNjYW4gaTJjIGJ1cyBhdCBpbnNtb2QgdGltZSIpOworCitzdGF0aWMg dW5zaWduZWQgaW50IGkyY19kZWJ1ZyA9IDE7Cittb2R1bGVfcGFyYW0oaTJjX2RlYnVnLCBpbnQs IDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhpMmNfZGVidWcsICJlbmFibGUgZGVidWcgbWVzc2Fn ZXMgW2kyY10iKTsKKworI2RlZmluZSBkcHJpbnRrMShsdmwsIGZtdCwgYXJncy4uLikgaWYgKGky Y19kZWJ1ZyA+PSBsdmwpIGRvIHtcCisJCQlwcmludGsoZm10LCAjI2FyZ3MpOyB9IHdoaWxlICgw KQorI2RlZmluZSBkcHJpbnRrMihsdmwsIGZtdCwgYXJncy4uLikgaWYgKGkyY19kZWJ1ZyA+PSBs dmwpIGRvIHsgXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzIGF0ICVzOiAiIGZtdCwgXAorCQkJ ZGV2LT5uYW1lLCBfX2Z1bmNfXywgIyNhcmdzKTsgfSB3aGlsZSAoMCkKKworLyoKKyAqIGVtMjgw MF9pMmNfc2VuZF9tYXg0KCkKKyAqIHNlbmQgdXAgdG8gNCBieXRlcyB0byB0aGUgaTJjIGRldmlj ZQorICovCitzdGF0aWMgaW50IGVtMjgwMF9pMmNfc2VuZF9tYXg0KHN0cnVjdCBlbTI4eHggKmRl diwgdW5zaWduZWQgY2hhciBhZGRyLAorCQkJCWNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQg cmV0OworCWludCB3cml0ZV90aW1lb3V0OworCXVuc2lnbmVkIGNoYXIgYjJbNl07CisJQlVHX09O KGxlbiA8IDEgfHwgbGVuID4gNCk7CisJYjJbNV0gPSAweDgwICsgbGVuIC0gMTsKKwliMls0XSA9 IGFkZHI7CisJYjJbM10gPSBidWZbMF07CisJaWYgKGxlbiA+IDEpCisJCWIyWzJdID0gYnVmWzFd OworCWlmIChsZW4gPiAyKQorCQliMlsxXSA9IGJ1ZlsyXTsKKwlpZiAobGVuID4gMykKKwkJYjJb MF0gPSBidWZbM107CisKKwlyZXQgPSBkZXYtPmVtMjh4eF93cml0ZV9yZWdzKGRldiwgNCAtIGxl biwgJmIyWzQgLSBsZW5dLCAyICsgbGVuKTsKKwlpZiAocmV0IDwgMCkgeworCQlkcHJpbnRrMSgy LCAiJXM6JXU6JXMoKTogRklYTUU6IGVtMjh4eF93cml0ZV9yZWdzKCkgZmFpbGVkLCIKKwkJCSJy ZXQgPSAlaVxuIiwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXywgcmV0KTsKKwkJcmV0dXJu IHJldDsKKwl9CisJaWYgKHJldCAhPSAyICsgbGVuKSB7CisJCWVtMjh4eF93YXJuKCJ3cml0aW5n IHRvIGkyYyBkZXZpY2UgZmFpbGVkIChlcnJvcj0laSlcbiIsIHJldCk7CisJCXJldHVybiAtRUlP OworCX0KKwlmb3IgKHdyaXRlX3RpbWVvdXQgPSBFTTI4MDBfSTJDX1dSSVRFX1RJTUVPVVQ7IHdy aXRlX3RpbWVvdXQgPiAwOworCSAgICAgd3JpdGVfdGltZW91dCAtPSA1KSB7CisJCXJldCA9IGRl di0+ZW0yOHh4X3JlYWRfcmVnKGRldiwgMHgwNSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkcHJp bnRrMSgyLCAiJXM6JXU6JXMoKTogRklYTUU6IGVtMjh4eF9yZWFkX3JlZygpIgorCQkJCSJmYWls ZWQsIHJldCA9ICVpXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sCisJCQkJX19mdW5jX18sIHJldCk7 CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWlmIChyZXQgPT0gMHg4MCArIGxlbiAtIDEpCisJCQly ZXR1cm4gbGVuOworCQltc2xlZXAoNSk7CisJfQorCWVtMjh4eF93YXJuKCJpMmMgd3JpdGUgdGlt ZWQgb3V0XG4iKTsKKwlyZXR1cm4gLUVJTzsKK30KKworaW50IGVtMjh4eF9ncGlvX2NtZChzdHJ1 Y3QgZW0yOHh4ICpkZXYsIHVuc2lnbmVkIGludCBjb21tYW5kLCB1MTYgKnZhbHVlLAorCQl1bnNp Z25lZCBpbnQgKmxlbikKK3sKKwlzdHJ1Y3QgZW0yOHh4X2dwaW8gKmdwaW9fbWFwID0gJmVtMjh4 eF9ib2FyZHNbZGV2LT5tb2RlbF0uZ3Bpb19yZWdzOworCXN3aXRjaCAoY29tbWFuZCkgeworCWNh c2UgRU0yOFhYX0FOQUxPR19PTjoKKwkJKnZhbHVlID0gZ3Bpb19tYXAtPmFfb247CisJCWJyZWFr OworCWNhc2UgRU0yOFhYX0xFRDFfT046CisJCSp2YWx1ZSA9IGdwaW9fbWFwLT5sMV9vbjsKKwkJ YnJlYWs7CisJY2FzZSBFTTI4WFhfWEMzMDI4X1NFQ0FNOgorCQkqdmFsdWUgPSBncGlvX21hcC0+ eGMzMDI4X3NlYzsKKwkJYnJlYWs7CisJY2FzZSBFTTI4WFhfVFMxX09OOgorCQkqdmFsdWUgPSBn cGlvX21hcC0+dHMxX29uOworCQlicmVhazsKKwljYXNlIEVNMjhYWF9NT0RFU1dJVENIOgorCQkq dmFsdWUgPSBncGlvX21hcC0+bV9zd2l0Y2g7CisJCWJyZWFrOworCWNhc2UgRU0yOFhYX0RFQ09E RVJfU0xFRVA6CisJCSp2YWx1ZSA9IGdwaW9fbWFwLT5kX3NsZWVwOworCQlicmVhazsKKwljYXNl IEVNMjhYWF9MRUQyX09OOgorCQkqdmFsdWUgPSBncGlvX21hcC0+bDJfb247CisJCWJyZWFrOwor CWNhc2UgRU0yOFhYX1JGOgorCQkqdmFsdWUgPSBncGlvX21hcC0+cmY7CisJCWJyZWFrOworCWNh c2UgRU0yOFhYX0RWQjFfT046CisJCSp2YWx1ZSA9IGdwaW9fbWFwLT5kdmJzX2xuYjsKKwkJYnJl YWs7CisJY2FzZSBFTTI4WFhfRFZCMl9PTjoKKwkJKnZhbHVlID0gZ3Bpb19tYXAtPmR2YnNfdjsK KwkJYnJlYWs7CisJY2FzZSBFTTI4WFhfVFVORVIxX09OOgorCQkqdmFsdWUgPSBncGlvX21hcC0+ dDFfb247CisJCWJyZWFrOworCWNhc2UgRU0yOFhYX0RFTU9EMV9SRVNFVDoKKwkJKnZhbHVlID0g Z3Bpb19tYXAtPmQxX3Jlc2V0OworCQlicmVhazsKKwljYXNlIEVNMjhYWF9UVU5FUjFfUkVTRVQ6 CisJCSp2YWx1ZSA9IGdwaW9fbWFwLT50MV9yZXNldDsKKwkJYnJlYWs7CisJY2FzZSBFTTI4WFhf REVDT0RFUl9SRVNFVDoKKwkJKnZhbHVlID0gZ3Bpb19tYXAtPmRjX3Jlc2V0OworCQlicmVhazsK KwljYXNlIEVNMjhYWF9ERU1PRDJfUkVTRVQ6CisJCSp2YWx1ZSA9IGdwaW9fbWFwLT5kMl9yZXNl dDsKKwkJYnJlYWs7CisJY2FzZSBFTTI4WFhfVFVORVIyX1JFU0VUOgorCQkqdmFsdWUgPSBncGlv X21hcC0+dDJfcmVzZXQ7CisJCWJyZWFrOworCWNhc2UgRU0yOFhYX1RVTkVSMl9PTjoKKwkJKnZh bHVlID0gZ3Bpb19tYXAtPnQyX29uOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9 CisJcmV0dXJuIDA7Cit9CisKK2ludCBlbTI4eHhfZ3Bpb19jb250cm9sX3RyYW5zbGF0ZSh2b2lk ICpwcml2LCB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdm9pZCAqcHRyKQoreworCWludCBjbWQ7CisJ c3dpdGNoIChjb21tYW5kKSB7CisJY2FzZSBYQzMwMjhfQ0hJUF9SRVNFVDoKKwkJY21kID0gRU0y OFhYX1RVTkVSMV9SRVNFVDsKKwkJYnJlYWs7CisJY2FzZSBYQzUwMDBfQ0hJUF9SRVNFVDoKKwkJ Y21kID0gRU0yOFhYX1RVTkVSMV9SRVNFVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRr KCJ1bmtub3duIGdwaW8gdHJhbnNsYXRlIGNvbW1hbmRcbiIpOworCQlicmVhazsKKwl9CisKKwly ZXR1cm4gZW0yOHh4X2dwaW9fY29udHJvbChwcml2LCBjbWQsIHB0cik7Cit9CisKK2ludCBlbTI4 eHhfZ3Bpb19jb250cm9sKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBjb21tYW5kLCB2b2lkICpw dHIpCit7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gKHN0cnVjdCBlbTI4eHggKilwcml2OworCXVu c2lnbmVkIGludCBsZW47CisJdTE2IGdwaW9fdmFsdWU7CisJdTggYnVmWzJdOworCXU4ICppbmRl eDsKKwl1OCBncGlvOworCWludCAqYXJnID0gcHRyOworCXUxNiBncGlvX3JlZzsKKwl1OCBlZXBy b21fb2Zmc2V0OworCisJaWYgKGVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0ubWFudWFsX2dwaW8p CisJCWVtMjh4eF9ncGlvX2NtZChkZXYsIGNvbW1hbmQsICZncGlvX3ZhbHVlLCAmbGVuKTsKKwll bHNlIHsKKwkJc3dpdGNoIChkZXYtPmVtX3R5cGUpIHsKKwkJY2FzZSBFTTI4ODg6CisJCWNhc2Ug RU0yODg5OgorCQljYXNlIEVNMjg3NToKKwkJCWVlcHJvbV9vZmZzZXQgPSAweGEwOworCQkJYnVm WzBdID0gMDsKKwkJCWluZGV4ID0gJmJ1ZlsxXTsKKwkJCWxlbiA9IDI7CisJCQlkZXYtPmVtMjh4 eF93cml0ZV9yZWdzKGRldiwgMHgwNiwgIlx4NDAiLCAxKTsKKwkJCWJyZWFrOworCQljYXNlIEVN Mjg4MzoKKwkJZGVmYXVsdDoKKwkJCWVlcHJvbV9vZmZzZXQgPSAweDNjOworCQkJaW5kZXggPSAm YnVmWzBdOworCQkJbGVuID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwkJc3dpdGNoIChjb21tYW5k KSB7CisJCWNhc2UgRU0yOFhYX0FOQUxPR19PTjoKKwkJCSppbmRleCA9IGVlcHJvbV9vZmZzZXQg KyAyNDsKKwkJCWVtMjh4eF93cml0ZV9yZWdzX3JlcShkZXYsIDB4MDMsIDB4YTAsIGJ1ZiwgbGVu KTsKKwkJCWdwaW9fdmFsdWUgPSBlbTI4eHhfcmVhZF9yZWdfcmVxKGRldiwgMHgyLCAweGEwKTsK KwkJCWJyZWFrOworCQljYXNlIEVNMjhYWF9UUzFfT046CisJCQkqaW5kZXggPSBlZXByb21fb2Zm c2V0ICsgMjU7CisJCQllbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCAweDAzLCAweGEwLCBidWYs IGxlbik7CisJCQlncGlvX3ZhbHVlID0gZW0yOHh4X3JlYWRfcmVnX3JlcShkZXYsIDB4MiwgMHhh MCk7CisJCQlicmVhazsKKwkJY2FzZSBFTTI4WFhfREVDT0RFUl9TTEVFUDoKKwkJCSppbmRleCA9 IGVlcHJvbV9vZmZzZXQgKyAyMDsKKwkJCWVtMjh4eF93cml0ZV9yZWdzX3JlcShkZXYsIDB4MDMs IDB4YTAsIGJ1ZiwgbGVuKTsKKwkJCWdwaW9fdmFsdWUgPSBlbTI4eHhfcmVhZF9yZWdfcmVxKGRl diwgMHgyLCAweGEwKTsKKwkJCWJyZWFrOworCQljYXNlIEVNMjhYWF9ERU1PRDFfUkVTRVQ6CisJ CQkqaW5kZXggPSBlZXByb21fb2Zmc2V0ICsgMTY7CisJCQllbTI4eHhfd3JpdGVfcmVnc19yZXEo ZGV2LCAweDAzLCAweGEwLCBidWYsIGxlbik7CisJCQlncGlvX3ZhbHVlID0gZW0yOHh4X3JlYWRf cmVnX3JlcShkZXYsIDB4MiwgMHhhMCk7CisJCQlicmVhazsKKwkJY2FzZSBFTTI4WFhfVFVORVIx X1JFU0VUOgorCQkJKmluZGV4ID0gZWVwcm9tX29mZnNldCArIDE3OworCQkJZW0yOHh4X3dyaXRl X3JlZ3NfcmVxKGRldiwgMHgwMywgMHhhMCwgYnVmLCBsZW4pOworCQkJZ3Bpb192YWx1ZSA9IGVt Mjh4eF9yZWFkX3JlZ19yZXEoZGV2LCAweDIsIDB4YTApOworCQkJYnJlYWs7CisJCWNhc2UgRU0y OFhYX1RVTkVSMV9PTjoKKwkJCSppbmRleCA9IGVlcHJvbV9vZmZzZXQgKyAyMzsKKwkJCWVtMjh4 eF93cml0ZV9yZWdzX3JlcShkZXYsIDB4MDMsIDB4YTAsIGJ1ZiwgbGVuKTsKKwkJCWdwaW9fdmFs dWUgPSBlbTI4eHhfcmVhZF9yZWdfcmVxKGRldiwgMHgyLCAweGEwKTsKKwkJCWJyZWFrOworCQlj YXNlIEVNMjhYWF9MRUQxX09OOgorCQkJcHJpbnRrKCJyZWFkaW5nIGxlZFxuIik7CisJCQkqaW5k ZXggPSBlZXByb21fb2Zmc2V0ICsgMjI7CisJCQllbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCAw eDAzLCAweGEwLCBidWYsIGxlbik7CisJCQlncGlvX3ZhbHVlID0gZW0yOHh4X3JlYWRfcmVnX3Jl cShkZXYsIDB4MiwgMHhhMCk7CisJCQlwcmludGsoImxlZCByZXR1cm5lZDogJTAyeFxuIiwgZ3Bp b192YWx1ZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXN3aXRjaCAoZGV2LT5lbV90eXBl KSB7CisJCQljYXNlIEVNMjg4ODoKKwkJCWNhc2UgRU0yODg5OgorCQkJY2FzZSBFTTI4NzU6CisJ CQkJZGV2LT5lbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MDYsICJceDQ1IiwgMSk7CisJCQkJYnJl YWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQkJcmV0dXJuIC1FSU5WQUw7CisJ CX0KKwkJc3dpdGNoIChkZXYtPmVtX3R5cGUpIHsKKwkJY2FzZSBFTTI4ODg6CisJCWNhc2UgRU0y ODc1OgorCQljYXNlIEVNMjg4OToKKwkJCWRldi0+ZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA2 LCAiXHg0NSIsIDEpOworCQkJYnJlYWs7CisJCWNhc2UgRU0yODgzOgorCQlkZWZhdWx0OgorCQkJ ZWVwcm9tX29mZnNldCA9IDB4M2I7CisJCQlpbmRleCA9ICZidWZbMF07CisJCQlsZW4gPSAxOwor CQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBjaGVjayBpZiBncGlvIHJlZ2lzdGVyIGVuYWJsZWQg Ki8KKwlpZiAoZ3Bpb192YWx1ZSAmIDB4ODApIHsKKwkJaWYgKCgoZ3Bpb192YWx1ZSA+PiA2KSYx KSA9PSAwKSB7CisJCQlpZiAoYXJnID09IE5VTEwpIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPIm5v IGFyZ3VtZW50IGdpdmVuICUwMnhcbiIsCisJCQkJCQlncGlvX3ZhbHVlKTsKKwkJCQlyZXR1cm4g LUVJTlZBTDsKKwkJCX0KKwkJCS8qIG9uL29mZiBjb21tYW5kICovCisJCQlzd2l0Y2ggKGRldi0+ ZW1fdHlwZSkgeworCQkJY2FzZSBFTTI4ODg6CisJCQljYXNlIEVNMjg4OToKKwkJCWNhc2UgRU0y ODc1OgorCQkJCWdwaW9fcmVnID0gMHg4MDsKKwkJCQlicmVhazsKKwkJCWNhc2UgRU0yODgzOgor CQkJZGVmYXVsdDoKKwkJCQlncGlvX3JlZyA9IGdwaW9fdmFsdWUmMHgxMCA/IDB4MDQgOiAweDA4 OworCQkJCWJyZWFrOworCQkJfQorCQkJZ3BpbyA9IGRldi0+ZW0yOHh4X3JlYWRfcmVnKGRldiwg Z3Bpb19yZWcpOworCQkJZ3BpbyAmPSB+KCh1OCkoMSA8PCAoZ3Bpb192YWx1ZSYweDcpKSk7CisK KwkJCWlmICgqYXJnID09IEVNMjhYWF9SRUdfT04pCisJCQkJZ3BpbyB8PSAoKGdwaW9fdmFsdWUg Pj4gNSkmMSkgPDwKKwkJCQkJKGdwaW9fdmFsdWUmNyk7CisJCQllbHNlCisJCQkJZ3BpbyB8PSAo KChncGlvX3ZhbHVlID4+IDUpJjEpXjEpIDw8CisJCQkJCShncGlvX3ZhbHVlJjcpOworCisJCQlk ZXYtPmVtMjh4eF93cml0ZV9yZWdzKGRldiwgZ3Bpb19yZWcsICZncGlvLCAxKTsKKwkJCWRwcmlu dGsxKDIsICIoMSkgd3JpdGluZyB0byAlMDJ4IC0+ICUwMnhcbiIsIGdwaW9fcmVnLCBncGlvKTsK KwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAoZGV2LT5lbV90eXBlKSB7CisJCQljYXNlIEVNMjg4OToK KwkJCWNhc2UgRU0yODg4OgorCQkJY2FzZSBFTTI4NzU6CisJCQkJZ3Bpb19yZWcgPSAweDgwOwor CQkJCWJyZWFrOworCQkJY2FzZSBFTTI4ODM6CisJCQlkZWZhdWx0OgorCQkJCWdwaW9fcmVnID0g Z3Bpb192YWx1ZSYweDEwID8gMHgwNCA6IDB4MDg7CisJCQkJYnJlYWs7CisJCQl9CisJCQlncGlv ID0gZGV2LT5lbTI4eHhfcmVhZF9yZWcoZGV2LCBncGlvX3JlZyk7CisJCQlncGlvICY9IH4oKHU4 KSgxIDw8IChncGlvX3ZhbHVlJjB4ZikpKTsKKworCQkJZ3BpbyB8PSAoKGdwaW9fdmFsdWUgPj4g NSkmMSkgPDwgKGdwaW9fdmFsdWUmNyk7CisJCQlkZXYtPmVtMjh4eF93cml0ZV9yZWdzKGRldiwg Z3Bpb19yZWcsICZncGlvLCAxKTsKKwkJCWRwcmludGsxKDIsICIoMikgd3JpdGluZyB0byAlMDJ4 IC0+ICUwMnhcbiIsIGdwaW9fcmVnLCBncGlvKTsKKwkJCWdwaW8gJj0gfigodTgpKDEgPDwgKGdw aW9fdmFsdWUmMHhmKSkpOworCQkJZ3BpbyB8PSAoKChncGlvX3ZhbHVlID4+IDUpJjEpXjEpIDw8 IChncGlvX3ZhbHVlJjcpOworCQkJbWRlbGF5KDEwMCk7CisJCQlkZXYtPmVtMjh4eF93cml0ZV9y ZWdzKGRldiwgZ3Bpb19yZWcsICZncGlvLCAxKTsKKwkJCW1kZWxheSgxMDApOworCQkJZHByaW50 azEoMiwgIigzKSB3cml0aW5nIHRvICUwMnggLT4gJTAyeFxuIiwgZ3Bpb19yZWcsIGdwaW8pOwor CQl9CisJfSBlbHNlIHsKKwkJcHJpbnRrKCJyZWdpc3RlciBkaXNhYmxlZFxuIik7CisJfQorCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZW0yODAwX2kyY19zZW5kX2J5dGVzKHZvaWQgKmRh dGEsIHVuc2lnbmVkIGNoYXIgYWRkciwgY2hhciAqYnVmLAorCQkJCSBzaG9ydCBsZW4pCit7CisJ Y2hhciAqYnVmUHRyID0gYnVmOworCWludCByZXQ7CisJaW50IHdyY291bnQgPSAwOworCWludCBj b3VudDsKKwlpbnQgbWF4TGVuID0gNDsKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSAoc3RydWN0IGVt Mjh4eCAqKWRhdGE7CisJd2hpbGUgKGxlbiA+IDApIHsKKwkJY291bnQgPSAobGVuID4gbWF4TGVu KSA/IG1heExlbiA6IGxlbjsKKwkJcmV0ID0gZW0yODAwX2kyY19zZW5kX21heDQoZGV2LCBhZGRy LCBidWZQdHIsIGNvdW50KTsKKwkJaWYgKHJldCA+IDApIHsKKwkJCWxlbiAtPSBjb3VudDsKKwkJ CWJ1ZlB0ciArPSBjb3VudDsKKwkJCXdyY291bnQgKz0gY291bnQ7CisJCX0gZWxzZQorCQkJcmV0 dXJuIChyZXQgPCAwKSA/IHJldCA6IC1FRkFVTFQ7CisJfQorCXJldHVybiB3cmNvdW50OworfQor CisvKgorICogZW0yODAwX2kyY19jaGVja19mb3JfZGV2aWNlKCkKKyAqIGNoZWNrIGlmIHRoZXJl IGlzIGEgaTJjX2RldmljZSBhdCB0aGUgc3VwcGxpZWQgYWRkcmVzcworICovCitpbnQgZW0yODAw X2kyY19jaGVja19mb3JfZGV2aWNlKHN0cnVjdCBlbTI4eHggKmRldiwgdW5zaWduZWQgY2hhciBh ZGRyKQoreworCWNoYXIgbXNnOworCWludCByZXQ7CisJaW50IHdyaXRlX3RpbWVvdXQ7CisJbXNn ID0gYWRkcjsKKwlyZXQgPSBkZXYtPmVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwNCwgJm1zZywg MSk7CisJaWYgKHJldCA8IDApIHsKKwkJZW0yOHh4X3dhcm4oInNldHRpbmcgaTJjIGRldmljZSBh ZGRyZXNzIGZhaWxlZCAoZXJyb3I9JWkpXG4iLAorCQkJICAgIHJldCk7CisJCXJldHVybiByZXQ7 CisJfQorCW1zZyA9IDB4ODQ7CisJcmV0ID0gZGV2LT5lbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4 MDUsICZtc2csIDEpOworCWlmIChyZXQgPCAwKSB7CisJCWVtMjh4eF93YXJuKCJwcmVwYXJpbmcg aTJjIHJlYWQgZmFpbGVkIChlcnJvcj0laSlcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQor CWZvciAod3JpdGVfdGltZW91dCA9IEVNMjgwMF9JMkNfV1JJVEVfVElNRU9VVDsgd3JpdGVfdGlt ZW91dCA+IDA7CisJICAgICB3cml0ZV90aW1lb3V0IC09IDUpIHsKKwkJdW5zaWduZWQgaW50IG1z ZzsKKwkJcmV0ID0gZGV2LT5lbTI4eHhfcmVhZF9yZWcoZGV2LCAweDUpOworCQlpZiAocmV0IDwg MCkgeworCQkJZHByaW50azEoMiwgIiVzOiV1OiVzKCk6IEZJWE1FOiBlbTI4eHhfcmVhZF9yZWco KSAiCisJCQkJImZhaWxlZCwgZ3B2YWwgPSAlaVxuIiwgX19GSUxFX18sIF9fTElORV9fLAorCQkJ CV9fZnVuY19fLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQltc2cgPSByZXQ7CisJCWlm IChtc2cgPT0gMHg5NCkKKwkJCXJldHVybiAtRU5PREVWOworCQllbHNlIGlmIChtc2cgPT0gMHg4 NCkKKwkJCXJldHVybiAwOworCQltc2xlZXAoNSk7CisJfQorCXJldHVybiAtRU5PREVWOworfQor CisvKgorICogZW0yODAwX2kyY19yZWN2X2J5dGVzKCkKKyAqIHJlYWQgZnJvbSB0aGUgaTJjIGRl dmljZQorICovCitzdGF0aWMgaW50IGVtMjgwMF9pMmNfcmVjdl9ieXRlcyhzdHJ1Y3QgZW0yOHh4 ICpkZXYsIHVuc2lnbmVkIGNoYXIgYWRkciwKKwkJCQkgY2hhciAqYnVmLCBpbnQgbGVuKQorewor CWludCByZXQ7CisJLyogY2hlY2sgZm9yIHRoZSBkZXZpY2UgYW5kIHNldCBpMmMgcmVhZCBhZGRy ZXNzICovCisJcmV0ID0gZW0yODAwX2kyY19jaGVja19mb3JfZGV2aWNlKGRldiwgYWRkcik7CisJ aWYgKHJldCkgeworCQllbTI4eHhfd2FybgorCQkgICAgKCJwcmVwYXJpbmcgcmVhZCBhdCBpMmMg YWRkcmVzcyAweCV4IGZhaWxlZCAoZXJyb3I9JWkpXG4iLAorCQkgICAgIGFkZHIsIHJldCk7CisJ CXJldHVybiByZXQ7CisJfQorCXJldCA9IGRldi0+ZW0yOHh4X3JlYWRfcmVnX3JlcV9sZW4oZGV2 LCAweDAsIDB4MywgYnVmLCBsZW4pOworCWlmIChyZXQgPCAwKSB7CisJCWVtMjh4eF93YXJuKCJy ZWFkaW5nIGZyb20gaTJjIGRldmljZSBhdCAweCV4IGZhaWxlZCAoZXJyb3I9JWkpIiwKKwkJCSAg ICBhZGRyLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgor ICogZW0yOHh4X2kyY19zZW5kX2J5dGVzKCkKKyAqIHVudGVzdGVkIGZvciBtb3JlIHRoYW4gNCBi eXRlcworICovCitzdGF0aWMgaW50IGVtMjh4eF9pMmNfc2VuZF9ieXRlcyh2b2lkICpkYXRhLCB1 bnNpZ25lZCBjaGFyIGFkZHIsIGNoYXIgKmJ1ZiwKKwkJCQkgc2hvcnQgbGVuLCBpbnQgc3RvcCkK K3sKKwlpbnQgd3Jjb3VudCA9IDA7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gKHN0cnVjdCBlbTI4 eHggKilkYXRhOworCWludCBpOworCisJd3Jjb3VudCA9IGRldi0+ZW0yOHh4X3dyaXRlX3JlZ3Nf cmVxKGRldiwgc3RvcCA/IDIgOiAzLCBhZGRyLCBidWYsIGxlbik7CisJaWYgKHdyY291bnQgPCAw KSB7CisJCWRwcmludGsxKDIsICIlczoldTolcygpOiBGSVhNRTogZW0yOHh4X3dyaXRlX3JlZ3Nf cmVxKCkiCisJCQkiZmFpbGVkLCB3cmNvdW50ID0gJWlcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywK KwkJCV9fZnVuY19fLCB3cmNvdW50KTsKKworCQlyZXR1cm4gd3Jjb3VudDsKKwl9CisKKwlpZiAo ZGV2LT5lbTI4eHhfcmVhZF9yZWcoZGV2LCAweDUpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJS IkZJWE1FOmVtMjh4eF9pMmNfc2VuZF9ieXRlcyglMDJ4KTogIgorCQkJCSJ3cml0ZSBmYWlsZWQ6 XG4iLCBhZGRyKTsKKwkJcHJpbnRrKEtFUk5fRVJSIj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT1cbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCQlwcmludGsoIiUwMngg IiwgKHVuc2lnbmVkIGNoYXIpYnVmW2ldKTsKKworCQlwcmludGsoIlxuIik7CisJCXByaW50ayhL RVJOX0VSUiI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisJfQorCisJcmV0 dXJuIHdyY291bnQ7Cit9CisKKy8qCisgKiBlbTI4eHhfaTJjX3JlY3ZfYnl0ZXMoKQorICogcmVh ZCBhIGJ5dGUgZnJvbSB0aGUgaTJjIGRldmljZQorICovCitzdGF0aWMgaW50IGVtMjh4eF9pMmNf cmVjdl9ieXRlcyhzdHJ1Y3QgZW0yOHh4ICpkZXYsIHVuc2lnbmVkIGNoYXIgYWRkciwKKwkJCQkg Y2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCByZXQ7CisJcmV0ID0gZGV2LT5lbTI4eHhfcmVh ZF9yZWdfcmVxX2xlbihkZXYsIDIsIGFkZHIsIGJ1ZiwgbGVuKTsKKwlpZiAocmV0IDwgMCkgewor CQllbTI4eHhfd2FybigicmVhZGluZyBpMmMgZGV2aWNlIGZhaWxlZCAoZXJyb3I9JWkpXG4iLCBy ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlpZiAoZGV2LT5lbTI4eHhfcmVhZF9yZWcoZGV2LCAw eDUpICE9IDApCisJCXJldHVybiAtRU5PREVWOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBl bTI4eHhfaTJjX2NoZWNrX2Zvcl9kZXZpY2UoKQorICogY2hlY2sgaWYgdGhlcmUgaXMgYSBpMmNf ZGV2aWNlIGF0IHRoZSBzdXBwbGllZCBhZGRyZXNzCisgKi8KK3N0YXRpYyBpbnQgZW0yOHh4X2ky Y19jaGVja19mb3JfZGV2aWNlKHN0cnVjdCBlbTI4eHggKmRldiwgdW5zaWduZWQgY2hhciBhZGRy KQoreworCWNoYXIgbXNnOworCWludCByZXQ7CisJbXNnID0gYWRkcjsKKworCXJldCA9IGRldi0+ ZW0yOHh4X3JlYWRfcmVnX3JlcShkZXYsIDIsIGFkZHIpOworCWlmIChyZXQgPCAwKSB7CisJCWVt Mjh4eF93YXJuKCJyZWFkaW5nIGZyb20gaTJjIGRldmljZSBmYWlsZWQgKGVycm9yPSVpKVxuIiwg cmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaWYgKGRldi0+ZW0yOHh4X3JlYWRfcmVnKGRldiwg MHg1KSAhPSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGVt Mjh4eF9pMmNfeGZlcigpCisgKiB0aGUgbWFpbiBpMmMgdHJhbnNmZXIgZnVuY3Rpb24KKyAqLwor c3RhdGljIGludCBlbTI4eHhfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwK KwkJCSAgIHN0cnVjdCBpMmNfbXNnIG1zZ3NbXSwgaW50IG51bSkKK3sKKwlzdHJ1Y3QgZW0yOHh4 ICpkZXYgPSBpMmNfYWRhcC0+YWxnb19kYXRhOworCWludCBhZGRyLCByYywgaSwgYnl0ZTsKKwor CWlmIChudW0gPD0gMCkKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7 CisJCWFkZHIgPSBtc2dzW2ldLmFkZHIgPDwgMTsKKwkJZHByaW50azIoMiwgIiVzICVzIGFkZHI9 JXggbGVuPSVkOiIsCisJCQkgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgPyAicmVhZCIgOiAi d3JpdGUiLAorCQkJIGkgPT0gbnVtIC0gMSA/ICJzdG9wIiA6ICJub25zdG9wIiwgYWRkciwgbXNn c1tpXS5sZW4pOworCQkvKiBubyBsZW46IGNoZWNrIG9ubHkgZm9yIGRldmljZSBwcmVzZW5jZSAq LworCQlpZiAoIW1zZ3NbaV0ubGVuKSB7CisJCQlpZiAoZGV2LT5lbV90eXBlID09IEVNMjgwMCkK KwkJCQlyYyA9IGVtMjgwMF9pMmNfY2hlY2tfZm9yX2RldmljZShkZXYsIGFkZHIpOworCQkJZWxz ZQorCQkJCXJjID0gZW0yOHh4X2kyY19jaGVja19mb3JfZGV2aWNlKGRldiwgYWRkcik7CisJCQlp ZiAocmMgPCAwKSB7CisJCQkJZHByaW50azIoMiwgIiBubyBkZXZpY2VcbiIpOworCQkJCXJldHVy biByYzsKKwkJCX0KKworCQl9IGVsc2UgaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgewor CQkJLyogcmVhZCBieXRlcyAqLworCQkJaWYgKGRldi0+ZW1fdHlwZSA9PSBFTTI4MDApCisJCQkJ cmMgPSBlbTI4MDBfaTJjX3JlY3ZfYnl0ZXMoZGV2LCBhZGRyLAorCQkJCQkJCSAgIG1zZ3NbaV0u YnVmLAorCQkJCQkJCSAgIG1zZ3NbaV0ubGVuKTsKKwkJCWVsc2UKKwkJCQlyYyA9IGVtMjh4eF9p MmNfcmVjdl9ieXRlcyhkZXYsIGFkZHIsCisJCQkJCQkJICAgbXNnc1tpXS5idWYsCisJCQkJCQkJ ICAgbXNnc1tpXS5sZW4pOworCQkJaWYgKGkyY19kZWJ1ZyA+PSAyKSB7CisJCQkJZm9yIChieXRl ID0gMDsgYnl0ZSA8IG1zZ3NbaV0ubGVuOyBieXRlKyspCisJCQkJCXByaW50ayhLRVJOX0lORk8i ICUwMngiLAorCQkJCQkJCW1zZ3NbaV0uYnVmW2J5dGVdKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJ CS8qIHdyaXRlIGJ5dGVzICovCisJCQlpZiAoaTJjX2RlYnVnID49IDIpIHsKKwkJCQlmb3IgKGJ5 dGUgPSAwOyBieXRlIDwgbXNnc1tpXS5sZW47IGJ5dGUrKykKKwkJCQkJcHJpbnRrKCIgJTAyeCIs IG1zZ3NbaV0uYnVmW2J5dGVdKTsKKwkJCX0KKwkJCWlmIChkZXYtPmVtX3R5cGUgPT0gRU0yODAw KQorCQkJCXJjID0gZW0yODAwX2kyY19zZW5kX2J5dGVzKGRldiwgYWRkciwKKwkJCQkJCQkgICBt c2dzW2ldLmJ1ZiwKKwkJCQkJCQkgICBtc2dzW2ldLmxlbik7CisJCQllbHNlCisJCQkJcmMgPSBl bTI4eHhfaTJjX3NlbmRfYnl0ZXMoZGV2LCBhZGRyLAorCQkJCQkJCSAgIG1zZ3NbaV0uYnVmLAor CQkJCQkJCSAgIG1zZ3NbaV0ubGVuLAorCQkJCQkJCSAgIGkgPT0gbnVtIC0gMSk7CisJCX0KKwkJ aWYgKHJjIDwgMCkKKwkJCWdvdG8gZXJyOworCQlpZiAoaTJjX2RlYnVnID49IDIpCisJCQlwcmlu dGsoIlxuIik7CisJfQorCisJcmV0dXJuIG51bTsKK2VycjoKKwlkcHJpbnRrMigyLCAiIEVSUk9S OiAlaVxuIiwgcmMpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBlbTI4eHhfaTJjX2Vl cHJvbShzdHJ1Y3QgZW0yOHh4ICpkZXYsIHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCXVu c2lnbmVkIGNoYXIgKmVlZGF0YSwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZiwgKnAg PSBlZWRhdGE7CisJc3RydWN0IGVtMjh4eF9lZXByb20gKmVtX2VlcHJvbSA9ICh2b2lkICopZWVk YXRhOworCWludCBpLCBlcnIsIHNpemUgPSBsZW4sIGJsb2NrOworCisJZGV2LT5pMmNfY2xpZW50 LmFkZHIgPSAweGEwID4+IDE7CisKKwkvKiBDaGVjayBpZiBib2FyZCBoYXMgZWVwcm9tICovCisJ ZXJyID0gaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgJmJ1ZiwgMCk7CisJaWYgKGVyciA8IDApCisJ CXJldHVybiAtMTsKKworCWJ1ZiA9IDA7CisKKwllcnIgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50 LCAmYnVmLCAxKTsKKwlpZiAoMSAhPSBlcnIpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEh1 aCwgbm8gZWVwcm9tIHByZXNlbnQgKGVycj0lZCk/XG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBl cnIpOworCQlyZXR1cm4gLTE7CisJfQorCisJd2hpbGUgKHNpemUgPiAwKSB7CisJCWlmIChzaXpl ID4gMTYpCisJCQlibG9jayA9IDE2OworCQllbHNlCisJCQlibG9jayA9IHNpemU7CisKKwkJaWYg KGJsb2NrICE9CisJCSAgICAoZXJyID0gaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgcCwgYmxvY2sp KSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICIlczogaTJjIGVlcHJvbSBy ZWFkIGVycm9yIChlcnI9JWQpXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJCXJl dHVybiAtMTsKKwkJfQorCQlzaXplIC09IGJsb2NrOworCQlwICs9IGJsb2NrOworCX0KKwlmb3Ig KGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKDAgPT0gKGkgJSAxNikpCisJCQlwcmludGso S0VSTl9JTkZPICIlczogaTJjIGVlcHJvbSAlMDJ4OiIsCisJCQkJCWRldi0+bmFtZSwgaSk7CisJ CXByaW50aygiICUwMngiLCBlZWRhdGFbaV0pOworCisJCWlmICgxNSA9PSAoaSAlIDE2KSkKKwkJ CXByaW50aygiXG4iKTsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJFRVBST00gSUQ9IDB4JTA4 eFxuIiwgZW1fZWVwcm9tLT5pZCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiVmVuZG9yL1Byb2R1Y3Qg SUQ9ICUwNHg6JTA0eFxuIiwKKwkJCWVtX2VlcHJvbS0+dmVuZG9yX0lELCBlbV9lZXByb20tPnBy b2R1Y3RfSUQpOworCisJc3dpdGNoIChlbV9lZXByb20tPmNoaXBfY29uZiA+PiA0ICYgMHgzKSB7 CisJY2FzZSAwOgorCQlwcmludGsoS0VSTl9JTkZPICJObyBhdWRpbyBvbiBib2FyZC5cbiIpOwor CQlicmVhazsKKwljYXNlIDE6CisJCXByaW50ayhLRVJOX0lORk8gIkFDOTcgYXVkaW8gKDUgc2Ft cGxlIHJhdGVzKVxuIik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcHJpbnRrKEtFUk5fSU5GTyAi STJTIGF1ZGlvLCBzYW1wbGUgcmF0ZT0zMmtcbiIpOworCQlicmVhazsKKwljYXNlIDM6CisJCXBy aW50ayhLRVJOX0lORk8gIkkyUyBhdWRpbywgMyBzYW1wbGUgcmF0ZXNcbiIpOworCQlicmVhazsK Kwl9CisKKwlpZiAoZW1fZWVwcm9tLT5jaGlwX2NvbmYgJiAxIDw8IDMpCisJCXByaW50ayhLRVJO X0lORk8gIlVTQiBSZW1vdGUgd2FrZXVwIGNhcGFibGVcbiIpOworCisJaWYgKGVtX2VlcHJvbS0+ Y2hpcF9jb25mICYgMSA8PCAyKQorCQlwcmludGsoS0VSTl9JTkZPICJVU0IgU2VsZiBwb3dlciBj YXBhYmxlXG4iKTsKKworCXN3aXRjaCAoZW1fZWVwcm9tLT5jaGlwX2NvbmYgJiAweDMpIHsKKwlj YXNlIDA6CisJCXByaW50ayhLRVJOX0lORk8gIjUwMG1BIG1heCBwb3dlclxuIik7CisJCWJyZWFr OworCWNhc2UgMToKKwkJcHJpbnRrKEtFUk5fSU5GTyAiNDAwbUEgbWF4IHBvd2VyXG4iKTsKKwkJ YnJlYWs7CisJY2FzZSAyOgorCQlwcmludGsoS0VSTl9JTkZPICIzMDBtQSBtYXggcG93ZXJcbiIp OworCQlicmVhazsKKwljYXNlIDM6CisJCXByaW50ayhLRVJOX0lORk8gIjIwMG1BIG1heCBwb3dl clxuIik7CisJCWJyZWFrOworCX0KKwlwcmludGsoS0VSTl9JTkZPICJUYWJsZSBhdCAweCUwMngs IHN0cmluZ3MgPSAweCUwNHgsIDB4JTA0eCwgMHglMDR4XG4iLAorCQkJCWVtX2VlcHJvbS0+c3Ry aW5nX2lkeF90YWJsZSwKKwkJCQllbV9lZXByb20tPnN0cmluZzEsCisJCQkJZW1fZWVwcm9tLT5z dHJpbmcyLAorCQkJCWVtX2VlcHJvbS0+c3RyaW5nMyk7CisKKwlyZXR1cm4gMDsKK30KKworLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0gKi8KKworLyoKKyAqIGZ1bmN0aW9uYWxpdHkoKQorICovCitzdGF0aWMgdTMyIGZ1bmN0aW9u YWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCXJldHVybiBJMkNfRlVOQ19TTUJV U19FTVVMOworfQorCisjaWZuZGVmIEkyQ19QRUMKK3N0YXRpYyB2b2lkIGluY191c2Uoc3RydWN0 IGkyY19hZGFwdGVyICphZGFwKQoreworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9W RVJTSU9OKDIsIDUsIDApCisJTU9EX0lOQ19VU0VfQ09VTlQ7CisjZW5kaWYKK30KKworc3RhdGlj IHZvaWQgZGVjX3VzZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCit7CisjaWYgTElOVVhfVkVS U0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNSwgMCkKKwlNT0RfREVDX1VTRV9DT1VOVDsK KyNlbmRpZgorfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgZW0yOHh4X3NldF90dW5lcihpbnQgY2hl Y2tfZWVwcm9tLCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBlbTI4eHgg KmRldiA9IGNsaWVudC0+YWRhcHRlci0+YWxnb19kYXRhOworCXN0cnVjdCB0dW5lcl9zZXR1cCB0 dW5fc2V0dXA7CisKKwlpZiAoZGV2LT5oYXNfaW50dHVuZXIgPT0gMCAmJiBkZXYtPmRldl9tb2Rl cyAhPSBFTTI4WFhfRFZCVCkgeworCQkvKiBkbyBub3Qgc2V0IHVwIGEgdHVuZXIgaWYgaXQncyBh IGR2YiBvbmx5IGRldmljZSAqLworCQl0dW5fc2V0dXAubW9kZV9tYXNrID0gVF9BTkFMT0dfVFYg fCBUX1JBRElPOworCQl0dW5fc2V0dXAudHlwZSA9IGRldi0+dHVuZXJfdHlwZTsKKwkJdHVuX3Nl dHVwLmFkZHIgPSBkZXYtPnR1bmVyX2FkZHI7CisJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRl diwgVFVORVJfU0VUX1RZUEVfQUREUiwgJnR1bl9zZXR1cCk7CisJfSBlbHNlIHsKKwkJdHVuX3Nl dHVwLm1vZGVfbWFzayA9IFRfVU5JTklUSUFMSVpFRDsKKwkJdHVuX3NldHVwLnR5cGUgPSBUVU5F Ul9BQlNFTlQ7CisJCXR1bl9zZXR1cC5hZGRyID0gZGV2LT50dW5lcl9hZGRyOworCQllbTI4eHhf aTJjX2NhbGxfY2xpZW50cyhkZXYsIFRVTkVSX1NFVF9UWVBFX0FERFIsICZ0dW5fc2V0dXApOwor CX0KKworCXJldHVybiAwOworfQorCisvKgorICogYXR0YWNoX2luZm9ybSgpCisgKiBnZXRzIGNh bGxlZCB3aGVuIGEgZGV2aWNlIGF0dGFjaGVzIHRvIHRoZSBpMmMgYnVzCisgKiBkb2VzIHNvbWUg YmFzaWMgY29uZmlndXJhdGlvbgorICovCitzdGF0aWMgaW50IGF0dGFjaF9pbmZvcm0oc3RydWN0 IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBjbGllbnQtPmFk YXB0ZXItPmFsZ29fZGF0YTsKKwlpbnQgcmV0OworCisJaWYgKGNsaWVudC0+ZHJpdmVyLT5pZCA9 PSBJMkNfRFJJVkVSSURfVFVORVIgJiYgZGV2LT5oYXNfaW50dHVuZXI9PTEpIHsKKwkJcHJpbnRr KEtFUk5fSU5GTyJlbTI4eHgtaTJjOiB1c2luZyBpbnRlcm5hbCB0dW5lciwgZGVueWluZyAiCisJ CQkicmVxdWVzdCB0byBpMmMgdHVuZXIgbW9kdWxlLlxuIik7CisJCWVtMjh4eF9zZXRfdHVuZXIo LTEsIGNsaWVudCk7CisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAoY2xpZW50LT5hZGRyIDw8 IDEpIHsKKwljYXNlIDB4ODY6CisJY2FzZSAweDg0OgorCWNhc2UgMHg5NjoKKwljYXNlIDB4OTQ6 CisJeworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE3KQor I2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDI1KQorCQlzdHJ1 Y3QgdjRsMl9wcml2X3R1bl9jb25maWcgdGRhOTg4N19jZmc7CisjZW5kaWYKKworCQlzdHJ1Y3Qg dHVuZXJfc2V0dXAgdHVuX3NldHVwOworCisJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxP R19UViB8IFRfUkFESU87CisJCXR1bl9zZXR1cC50eXBlID0gVFVORVJfVERBOTg4NzsKKwkJdHVu X3NldHVwLmFkZHIgPSBjbGllbnQtPmFkZHI7CisKKwkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMo ZGV2LCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKKworI2lmIExJTlVYX1ZFUlNJ T05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDI1KQorCQl0ZGE5ODg3X2NmZy50dW5lciA9 IFRVTkVSX1REQTk4ODc7CisJCXRkYTk4ODdfY2ZnLnByaXYgPSAmZGV2LT50ZGE5ODg3X2NvbmY7 CisJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVFVORVJfU0VUX0NPTkZJRywgJnRkYTk4 ODdfY2ZnKTsKKyNlbmRpZgorI2VuZGlmCisJCWJyZWFrOworCX0KKwljYXNlIDB4NDI6CisJCWRw cmludGsxKDEsICJhdHRhY2hfaW5mb3JtOiBzYWE3MTE0IGRldGVjdGVkLlxuIik7CisJCWJyZWFr OworCWNhc2UgMHg0YToKKwkJZHByaW50azEoMSwgImF0dGFjaF9pbmZvcm06IHNhYTcxMTMgZGV0 ZWN0ZWQuXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAweGEwOgorCQlkcHJpbnRrMSgxLCAiYXR0YWNo X2luZm9ybTogZWVwcm9tIGRldGVjdGVkLlxuIik7CisJCWVtMjh4eF9pMmNfZWVwcm9tKGRldiwg Y2xpZW50LCBkZXYtPmVlZGF0YSwKKwkJCQlzaXplb2YoZGV2LT5lZWRhdGEpKTsKKworCQlzd2l0 Y2ggKGRldi0+bW9kZWwpIHsKKwkJY2FzZSBFTTI4MjBfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX1VT Ql8yOgorCQljYXNlIEVNMjgyMF9CT0FSRF9IQVVQUEFVR0VfV0lOVFZfVVNCXzJfUjI6CisJCWNh c2UgRU0yODcwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9VU0JfMl9SMjoKKwkJY2FzZSBFTTI4ODBf Qk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl85MDA6CisJCWNhc2UgRU0yODgzX0JPQVJEX0hBVVBQ QVVHRV9XSU5UVl9IVlJfOTUwOgorCQljYXNlIEVNMjg4M19CT0FSRF9LV09STERfSFlCUklEX0Ez MTY6CisJCWNhc2UgRU0yODgwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfOTAwX1IyOgorCQl7 CisjaWZkZWYgRU0yOFhYX1RWRUVQUk9NCisJCQlzdHJ1Y3QgdHZlZXByb20gdHY7CisJCQl0dmVl cHJvbV9oYXVwcGF1Z2VfYW5hbG9nKGNsaWVudCwgJnR2LCBkZXYtPmVlZGF0YSk7CisKKwkJCWlm IChkZXYtPnR1bmVyX3R5cGUgPT0gVFVORVJfQUJTRU5UKSB7CisJCQkJZGV2LT50dW5lcl90eXBl ID0gdHYudHVuZXJfdHlwZTsKKwkJCQlwcmludGsoS0VSTl9JTkZPInNldHRpbmcgbmV3IHR1bmVy IHR5cGUgbm93IgorCQkJCQkJIiVkIVxuIiwgdHYudHVuZXJfdHlwZSk7CisJCQkJZW0yOHh4X3Nl dF90dW5lcigtMSwgY2xpZW50KTsKKwkJCX0KKyNpZiBkZWZpbmVkIFY0TDJfSURFTlRfTVNQWDRY WCAgICAgLyogIFhYWCAgMi42LjI3ICAqLworCQkJaWYgKHR2LmF1ZGlvX3Byb2Nlc3NvciA9PSBW NEwyX0lERU5UX01TUFg0WFgpIHsKKyNlbHNlCisJCQlpZiAodHYuYXVkaW9fcHJvY2Vzc29yID09 IEFVRElPX0NISVBfTVNQMzRYWCkgeworI2VuZGlmCisJCQkJZGV2LT5pMnNfc3BlZWQgPSAyMDQ4 MDAwOworCQkJCWRldi0+aGFzX21zcDM0eHggPSAxOworCQkJfSBlbHNlCisJCQkJZGV2LT5oYXNf bXNwMzR4eCA9IDA7CisjZW5kaWYKKworCQkJaWYgKGRldi0+aGFzX21zcDM0eHgpIHsKKwkJCQkv KiBTZW5kIGEgcmVzZXQgdG8gb3RoZXIgY2hpcHMgdmlhIGdwaW8gKi8KKwkJCQlyZXQgPSBlbTI4 eHhfd3JpdGVfcmVnc19yZXEoZGV2LCAweDAwLCAweDA4LAorCQkJCQkJIlx4ZjciLCAxKTsKKwkJ CQlpZiAocmV0IDwgMCkgeworCQkJCQlkcHJpbnRrMSgyLCAiJXM6JXU6JXMoKTogRklYTUU6ICIK KwkJCQkJCSJlbTI4eHhfd3JpdGVfcmVnc19yZXEoKSAiCisJCQkJCQkiZmFpbGVkLCByZXQgPSAl aVxuIiwgX19GSUxFX18sCisJCQkJCQlfX0xJTkVfXywgX19mdW5jX18sIHJldCk7CisJCQkJCXJl dHVybiByZXQ7CisJCQkJfQorCQkJCXVkZWxheSgyNTAwKTsKKwkJCQlyZXQgPSBlbTI4eHhfd3Jp dGVfcmVnc19yZXEoZGV2LCAweDAwLCAweDA4LAorCQkJCQkJIlx4ZmYiLCAxKTsKKwkJCQlpZiAo cmV0IDwgMCkgeworCQkJCQlkcHJpbnRrMSgyLCAiJXM6JXU6JXMoKTogRklYTUU6ICIKKwkJCQkJ CSJlbTI4eHhfd3JpdGVfcmVnc19yZXEoKSAiCisJCQkJCQkiZmFpbGVkLCByZXQgPSAlaVxuIiwg X19GSUxFX18sCisJCQkJCQlfX0xJTkVfXywgX19mdW5jX18sIHJldCk7CisJCQkJCXJldHVybiBy ZXQ7CisJCQkJfQorCQkJCXVkZWxheSgyNTAwKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwl9CisJ Y2FzZSAweDYwOgorCWNhc2UgMHg4ZToKKwl7CisJCXN0cnVjdCBJUl9pMmMgKmlyID0gaTJjX2dl dF9jbGllbnRkYXRhKGNsaWVudCk7CisJCWVtMjh4eF9zZXRfaXIoZGV2LCBpcik7CisJCWJyZWFr OworCX0KKwljYXNlIDB4ODA6CisJY2FzZSAweDg4OgorCQlkcHJpbnRrMSgxLCAiYXR0YWNoX2lu Zm9ybTogbXNwMzR4eC9jeDI1ODQzIGRldGVjdGVkLlxuIik7CisJCWJyZWFrOworCWNhc2UgMHhi ODoKKwljYXNlIDB4YmE6CisJCWRwcmludGsxKDEsICJhdHRhY2hfaW5mb3JtOiB0dnA1MTUwIGRl dGVjdGVkLlxuIik7CisJCWJyZWFrOworCWNhc2UgMHgxZToKKwkJZHByaW50azEoMSwgInpsMTAz NTMgZGVtb2R1bGF0b3IgZm91bmQhXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZHByaW50 azEoMSwgImF0dGFjaCBpbmZvcm0gKGRlZmF1bHQpOiAiCisJCQkiZGV0ZWN0ZWQgSTJDIGFkZHJl c3MgJXhcbiIsIGNsaWVudC0+YWRkciA8PCAxKTsKKwkJZGV2LT50dW5lcl9hZGRyID0gY2xpZW50 LT5hZGRyOworCQllbTI4eHhfc2V0X3R1bmVyKC0xLCBjbGllbnQpOworCX0KKwlyZXR1cm4gMDsK K30KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGVtMjh4eF9hbGdvID0geworCS5tYXN0 ZXJfeGZlciAgID0gZW0yOHh4X2kyY194ZmVyLAorCS5mdW5jdGlvbmFsaXR5ID0gZnVuY3Rpb25h bGl0eSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgZW0yOHh4X2FkYXBfdGVtcGxh dGUgPSB7CisjaWZkZWYgSTJDX1BFQworCS5vd25lciA9IFRISVNfTU9EVUxFLAorI2Vsc2UKKyNp ZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA2LCAyNCkKKwkuaW5jX3Vz ZSA9IGluY191c2UsCisJLmRlY191c2UgPSBkZWNfdXNlLAorI2VuZGlmCisjZW5kaWYKKyNpZmRl ZiBJMkNfQ0xBU1NfVFZfQU5BTE9HCisJLmNsYXNzID0gSTJDX0NMQVNTX1RWX0FOQUxPRywKKyNl bmRpZgorCS5uYW1lID0gImVtMjh4eCIsCisJLmlkID0gSTJDX0hXX0JfRU0yOFhYLAorCS5hbGdv ID0gJmVtMjh4eF9hbGdvLAorCS5jbGllbnRfcmVnaXN0ZXIgPSBhdHRhY2hfaW5mb3JtLAorfTsK Kworc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGVtMjh4eF9jbGllbnRfdGVtcGxhdGUgPSB7CisJ Lm5hbWUgPSAiZW0yOHh4IGludGVybmFsIiwKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gIEtF Uk5FTF9WRVJTSU9OKDIsIDYsIDE1KQorCS5mbGFncyA9IEkyQ19DTElFTlRfQUxMT1dfVVNFLAor I2VuZGlmCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogaTJjX2RldnMKKyAqIGluY29tcGxldGUg bGlzdCBvZiBrbm93biBkZXZpY2VzCisgKi8KK3N0YXRpYyBjaGFyICppMmNfZGV2c1sxMjhdID0g eworCVsweDRhID4+IDFdID0gInNhYTcxMTNoIiwKKwlbMHg2MCA+PiAxXSA9ICJyZW1vdGUgSVIg c2Vuc29yIiwKKwlbMHg4ZSA+PiAxXSA9ICJyZW1vdGUgSVIgc2Vuc29yIiwKKwlbMHg4NiA+PiAx XSA9ICJ0ZGE5ODg3IiwKKwlbMHg4MCA+PiAxXSA9ICJtc3AzNHh4IiwKKwlbMHg4OCA+PiAxXSA9 ICJtc3AzNHh4L2N4MjU4NDMiLAorCVsweGEwID4+IDFdID0gImVlcHJvbSIsCisJWzB4YjggPj4g MV0gPSAidHZwNTE1MGEiLAorCVsweGJhID4+IDFdID0gInR2cDUxNTBhIiwKKwlbMHhjMCA+PiAx XSA9ICJ0dW5lciAoYW5hbG9nKSIsCisJWzB4YzIgPj4gMV0gPSAidHVuZXIgKGFuYWxvZykiLAor CVsweGM0ID4+IDFdID0gInR1bmVyIChhbmFsb2cpIiwKKwlbMHhjNiA+PiAxXSA9ICJ0dW5lciAo YW5hbG9nKSIsCisJWzB4MWUgPj4gMV0gPSAiemwxMDM1My9tdDM1MiBkdmItdCBkZW1vZHVsYXRv ciIsCit9OworCisvKgorICogZG9faTJjX3NjYW4oKQorICogY2hlY2sgaTJjIGFkZHJlc3MgcmFu Z2UgZm9yIGRldmljZXMKKyAqLworc3RhdGljIHZvaWQgZG9faTJjX3NjYW4oY2hhciAqbmFtZSwg c3RydWN0IGkyY19jbGllbnQgKmMpCit7CisJdW5zaWduZWQgY2hhciBidWY7CisJaW50IGksIHJj OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaTJjX2RldnMpOyBpKyspIHsKKwkJYy0+ YWRkciA9IGk7CisJCXJjID0gaTJjX21hc3Rlcl9yZWN2KGMsICZidWYsIDApOworCQlpZiAocmMg PCAwKQorCQkJY29udGludWU7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBmb3VuZCBpMmMgZGV2 aWNlIEAgMHgleCBbJXNdXG4iLCBuYW1lLAorCQkgICAgICAgaSA8PCAxLCBpMmNfZGV2c1tpXSA/ IGkyY19kZXZzW2ldIDogIj8/PyIpOworCX0KK30KKworLyoKKyAqIGVtMjh4eF9pMmNfY2FsbF9j bGllbnRzKCkKKyAqIHNlbmQgY29tbWFuZHMgdG8gYWxsIGF0dGFjaGVkIGkyYyBkZXZpY2VzCisg Ki8KK3ZvaWQgZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoc3RydWN0IGVtMjh4eCAqZGV2LCB1bnNp Z25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJQlVHX09OKE5VTEwgPT0gZGV2LT5pMmNfYWRh cC5hbGdvX2RhdGEpOworCWkyY19jbGllbnRzX2NvbW1hbmQoJmRldi0+aTJjX2FkYXAsIGNtZCwg YXJnKTsKK30KK0VYUE9SVF9TWU1CT0woZW0yOHh4X2kyY19jYWxsX2NsaWVudHMpOworCisvKgor ICogZW0yOHh4X2kyY19yZWdpc3RlcigpCisgKiByZWdpc3RlciBpMmMgYnVzCisgKi8KK2ludCBl bTI4eHhfaTJjX3JlZ2lzdGVyKHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlCVUdfT04oIWRldi0+ ZW0yOHh4X3dyaXRlX3JlZ3MgfHwgIWRldi0+ZW0yOHh4X3JlYWRfcmVnKTsKKwlCVUdfT04oIWRl di0+ZW0yOHh4X3dyaXRlX3JlZ3NfcmVxIHx8ICFkZXYtPmVtMjh4eF9yZWFkX3JlZ19yZXEpOwor CWRldi0+aTJjX2FkYXAgPSBlbTI4eHhfYWRhcF90ZW1wbGF0ZTsKKwlkZXYtPmkyY19hZGFwLmRl di5wYXJlbnQgPSAmZGV2LT51ZGV2LT5kZXY7CisJc3RyY3B5KGRldi0+aTJjX2FkYXAubmFtZSwg ZGV2LT5uYW1lKTsKKwlkZXYtPmkyY19hZGFwLmFsZ29fZGF0YSA9IGRldjsKKwlpMmNfYWRkX2Fk YXB0ZXIoJmRldi0+aTJjX2FkYXApOworCisJZGV2LT5pMmNfY2xpZW50ID0gZW0yOHh4X2NsaWVu dF90ZW1wbGF0ZTsKKwlkZXYtPmkyY19jbGllbnQuYWRhcHRlciA9ICZkZXYtPmkyY19hZGFwOwor CisJaWYgKGkyY19zY2FuIHx8IGRldi0+ZGV2X21vZGVzID09IDApCisJCWRvX2kyY19zY2FuKGRl di0+bmFtZSwgJmRldi0+aTJjX2NsaWVudCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBlbTI4 eHhfaTJjX3VucmVnaXN0ZXIoKQorICogdW5yZWdpc3RlciBpMmNfYnVzCisgKi8KK2ludCBlbTI4 eHhfaTJjX3VucmVnaXN0ZXIoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCWkyY19kZWxfYWRhcHRl cigmZGV2LT5pMmNfYWRhcCk7CisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMv bWVkaWEvdmlkZW8vZW1waWEvZW0yOHh4LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2Vt cGlhL2VtMjh4eC1pbnB1dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEw ZmNiYTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtcGlhL2VtMjh4 eC1pbnB1dC5jCkBAIC0wLDAgKzEsNTM2IEBACisvKgorICBoYW5kbGUgZW0yOHh4IElSIHJlbW90 ZXMgdmlhIGxpbnV4IGtlcm5lbCBpbnB1dCBsYXllci4KKworICAgQ29weXJpZ2h0IChDKSAyMDA1 LTIwMDcgTWFya3VzIFJlY2hiZXJnZXIgPG1yZWNoYmVyZ2VyQGdtYWlsLmNvbT4KKwkJIDIwMDUg ICAgICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KKwkJIDIw MDUgICAgICBTYXNjaGEgU29tbWVyIDxzYXNjaGFzb21tZXJAZnJlZW5ldC5kZT4KKworCisgIFRo ZXJlIGhhdmUgYmVlbiBtYW55IGlzc3VlcyB3aXRoIHRoaXMgaW5wdXQgaGFuZGxpbmcgcm91dGlu ZXMsIHN0YXJ0aW5nCisgIGZyb20gY3Jhc2hpbmcgdGhlIGJveCwgcHJpbnRpbmcgcmFuZG9tIGNo YXJhY3RlcnMgb3IgYmxvY2tpbmcgdGhlCisgIGtleWJvYXJkIHdoZW4gbG9hZGluZyBpdCBldGMu ICh0aG9zZSBpc3N1ZXMgd2VyZSBjYXVzZWQgYmVjYXVzZSBpdCB1c2VkCisgIHRoZSBnbG9iYWwg cnVucXVldWUgd2l0aCB0aGUgYXN5bmNocm9ub3VzIG1vZHVsZSBtZWNoYW5pc20pLgorCisgIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9u LCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNp bmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNp bmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVk ZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRl IDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlICJl bTI4eHguaCIKKyNpbmNsdWRlICJlbTI4eHgta2V5bWFwcy5oIgorCitzdGF0aWMgdW5zaWduZWQg aW50IGRpc2FibGVfaXI7Cittb2R1bGVfcGFyYW0oZGlzYWJsZV9pciwgaW50LCAwNDQ0KTsKK01P RFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9pciwgImRpc2FibGUgaW5mcmFyZWQgcmVtb3RlIHN1cHBv cnQiKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBpcl9kZWJ1ZzsKK21vZHVsZV9wYXJhbShpcl9k ZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaXJfZGVidWcsICJlbmFibGUgZGVi dWcgbWVzc2FnZXMgW0lSXSIpOworCisjZGVmaW5lIGRwcmludGsoZm10LCBhcmcuLi4pCWlmIChp cl9kZWJ1ZykgXAorCXByaW50ayhLRVJOX0RFQlVHIiVzL2lyOiAiIGZtdCwgaXItPmMubmFtZSAs ICMjIGFyZykKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBn ZXRfdGltZXN0YW1wKHZvaWQpCit7CisJc3RydWN0IHRpbWV2YWwgdG07CisJZG9fZ2V0dGltZW9m ZGF5KCZ0bSk7CisJcmV0dXJuICh1bnNpZ25lZCBpbnQpKHRtLnR2X3NlYyoxMDAwICsgKHRtLnR2 X3VzZWMgLzEwMDApKTsKK30KKworaW50IGVtMjg4OF9nZXRfa2V5X2VtcGlhKHN0cnVjdCBlbTI4 eHggKmRldiwgdTMyICppcl9rZXksIHUzMiAqa2V5c3RhdHVzKQoreworCXN0cnVjdCBlbTI4ODBf aXIgKmlyID0gZGV2LT5pcl9lbTI4ODA7CisJdTggYnVmWzVdOworCXN0YXRpYyB1OCBkcm9wa2V5 OworCXN0YXRpYyB1OCByZXBlYXRkZWxheTsKKwlpbnQgcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBp bnQgdGltZW91dHZhbDsKKworCS8qIHRoaXMgYWxnb3JpdGhtIHdvcmtzIGJlc3Qgd2l0aCAzLTUg bXMgcG9sbGluZworCSAgIDEwbXMgaW4gdXNlcnNwYWNlICovCisKKwltc2xlZXAoMyk7CisKKwor CWRldi0+ZW0yOHh4X3JlYWRfcmVnX3JlcV9sZW4oZGV2LCAwLCAweDUwLCBidWYsIDUpOworCisJ dGltZW91dHZhbCA9IGdldF90aW1lc3RhbXAoKTsKKworCWlmICgoYnVmWzBdICE9IDB4MTEgfHwg aXItPmJ0biAhPSBidWZbMV0pICYmIGRldi0+Ym9hcmQtPmlyX2tleXRhYltidWZbNF1dICE9IDAp IHsKKwkJaWYgKChpci0+YnRuICE9IGJ1ZlsxXSAmJiBpci0+cmVsZWFzZWQgPT0gMSkgfHwgaXIt PmtleSAhPSBidWZbNF0pIHsKKworI2lmIDAKKwkJCWlmIChpci0+a2V5ICE9IGJ1ZmZlcls0XSAm JiBpci0+cmVsZWFzZWQgPT0gMCkgCisJCQkJcHJpbnRrKCJvbGQga2V5IGdvdCByZWxlYXNlZFxu Iik7CisjZW5kaWYKKworCQkJKmlyX2tleSA9IGJ1Zls0XTsKKwkJCWlyLT5yZWxlYXNlZCA9IDA7 CisJCQlpci0+b2xkdmFsID0gdGltZW91dHZhbDsKKwkJCWlyLT5rZXkgPSBidWZbNF07CisJCQly ZXR2YWwgPSAxOworCQkJCisJCQkvKiB2b2x1bWUgc2hvdWxkIGJlIHJlcGVhdGVkIGZhc3RlciB0 aGFuIG90aGVyIGtleXMgKi8KKworCQkJaWYgKGlyLT5rZXk8SVJfS0VZVEFCX1NJWkUgJiYgKAor CQkJCQlkZXYtPmJvYXJkLT5pcl9rZXl0YWJbaXItPmtleV0gPT0gS0VZX1ZPTFVNRVVQIHx8CisJ CQkJCWRldi0+Ym9hcmQtPmlyX2tleXRhYltpci0+a2V5XSA9PSBLRVlfVk9MVU1FRE9XTikpIHsK KwkJCQlkcm9wa2V5ID0gMTsgCisJCQkJcmVwZWF0ZGVsYXkgPSAxMDsKKwkJCX0gZWxzZSB7CisJ CQkJZHJvcGtleSA9IDM7IAorCQkJCXJlcGVhdGRlbGF5ID0gMTAwOworCQkJfQorCQl9CisKKwkJ aWYgKHRpbWVvdXR2YWwgLSBpci0+b2xkdmFsID4gcmVwZWF0ZGVsYXkgJiYgaXItPnJlbGVhc2Vk ID09IDApIHsKKwkJCWlyLT5vbGR2YWwgPSB0aW1lb3V0dmFsOworCQkJKmlyX2tleSA9IGlyLT5r ZXk7CisJCQlpZiAoZHJvcGtleSkgeworCQkJCXJldHZhbCA9IDA7CisJCQkJZHJvcGtleS0tOwor CQkJfSBlbHNlCisJCQkJcmV0dmFsID0gMTsKKwkJfQorCQlpci0+b2xkdGltZW91dHZhbCA9IDA7 CisJfSBlbHNlIHsKKwkJaWYgKHRpbWVvdXR2YWwgLSBpci0+b2xkdGltZW91dHZhbCA+IDE1MCAm JiBpci0+b2xkdGltZW91dHZhbCA+IDAgJiYgaXItPnJlbGVhc2VkID09IDApIHsKKwkJCWlyLT5y ZWxlYXNlZCA9IDE7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWlmIChpci0+b2xkdGltZW91dHZh bCA9PSAwKQorCQkJaXItPm9sZHRpbWVvdXR2YWwgPSB0aW1lb3V0dmFsOworCQlyZXR2YWwgPSAw OworCX0KKwlpci0+YnRuID0gYnVmWzFdOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qIGdldF9r ZXkgZm9yIHRlcnJhdGVjJ3MgZGV2aWNlcyAqLworCitpbnQgZW0yODgwX2dldF9rZXlfdGVycmF0 ZWMoc3RydWN0IGVtMjh4eCAqZGV2LCB1MzIgKmlyX2tleSwgdTMyICprZXlzdGF0dXMpCit7CisJ aW50IHJjOworCWludCBpcmMgPSAwOworCisJbXNsZWVwKDUwKTsKKworCXJjID0gZW0yOHh4X3Jl YWRfcmVnX3JlcShkZXYsIDB4MCwgMHg0NSk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIC0xOwor CWVsc2UKKwkJaXJjID0gcmM7CisKKwlyYyA9IGVtMjh4eF9yZWFkX3JlZ19yZXEoZGV2LCAweDAs IDB4NDcpOworCWlmIChyYyA8IDApCisJCXJldHVybiAtMTsKKwllbHNlCisJCSppcl9rZXkgPSBy YzsKKworCWRldi0+aXJfZW0yODgwLT5zZXF1ZW5jZVswXSA9IGRldi0+aXJfZW0yODgwLT5zZXF1 ZW5jZVsxXTsKKwlkZXYtPmlyX2VtMjg4MC0+c2VxdWVuY2VbMV0gPSBkZXYtPmlyX2VtMjg4MC0+ c2VxdWVuY2VbMl07CisJZGV2LT5pcl9lbTI4ODAtPnNlcXVlbmNlWzJdID0gaXJjOworCWlmIChk ZXYtPmlyX2VtMjg4MC0+c2VxdWVuY2VbMF0gIT0gZGV2LT5pcl9lbTI4ODAtPnNlcXVlbmNlWzFd ICYmCisJICAgIGRldi0+aXJfZW0yODgwLT5zZXF1ZW5jZVsxXSAhPSBkZXYtPmlyX2VtMjg4MC0+ c2VxdWVuY2VbMl0pCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qIGdl dF9rZXkgZm9yIHBpbm5hY2xlJ3MgZGV2aWNlcyAqLworLyogVE9ETzogdGhpcyBpcyBqdXN0IGEg ZmFzdCBpbXBsZW1lbnRhdGlvbiAuLi4gKi8KKworaW50IGVtMjg4MF9nZXRfa2V5X2VtcGlhKHN0 cnVjdCBlbTI4eHggKmRldiwgdTMyICppcl9rZXksIHUzMiAqa2V5c3RhdHVzKQoreworCWNoYXIg YnVmWzRdOworCWludCByZXQ7CisKKwltc2xlZXAoNTApOworCisJcmV0ID0gZGV2LT5lbTI4eHhf cmVhZF9yZWdfcmVxX2xlbihkZXYsIDB4MCwgMHg0NSwgYnVmLCA0KTsKKworCWlmIChyZXQgPCAw KSB7CisJCXN3aXRjaCAocmV0KSB7CisJCWNhc2UgLUVOT0RFVjoKKwkJCS8qIERldmljZSB3YXMg ZGlzY29ubmVjdGVkICovCisJCQllbTI4eHhfd2FybigicmVhZGluZyBrZXkgZmFpbGVkICIKKwkJ CQkgICAgIihlcnJvcj0laT0tRU5PREVWKVxuIiwgcmV0KTsKKwkJCXJldHVybiAtMTsKKwkJZGVm YXVsdDoKKwkJCWVtMjh4eF93YXJuKCJyZWFkaW5nIGtleSBmYWlsZWQgKGVycm9yPSVpKVxuIiwg cmV0KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCWRldi0+aXJfZW0yODgwLT5zZXF1ZW5j ZVswXSA9IGRldi0+aXJfZW0yODgwLT5zZXF1ZW5jZVsxXTsKKwlkZXYtPmlyX2VtMjg4MC0+c2Vx dWVuY2VbMV0gPSBkZXYtPmlyX2VtMjg4MC0+c2VxdWVuY2VbMl07CisJZGV2LT5pcl9lbTI4ODAt PnNlcXVlbmNlWzJdID0gYnVmWzBdJjE7CisJKmlyX2tleSA9IGJ1ZlsyXTsKKwlpZiAoKGRldi0+ aXJfZW0yODgwLT5zZXF1ZW5jZVswXSA9PSAxICYmCisJICAgICBkZXYtPmlyX2VtMjg4MC0+c2Vx dWVuY2VbMV0gPT0gMCAmJgorCSAgICAgZGV2LT5pcl9lbTI4ODAtPnNlcXVlbmNlWzJdID09IDEp IHx8CisJICAgIChkZXYtPmlyX2VtMjg4MC0+c2VxdWVuY2VbMF0gPT0gMCAmJgorCSAgICAgZGV2 LT5pcl9lbTI4ODAtPnNlcXVlbmNlWzFdID09IDEgJiYKKwkgICAgIGRldi0+aXJfZW0yODgwLT5z ZXF1ZW5jZVsyXSA9PSAwKSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBlbTI4ODBfaXJfa2V5X3BvbGwoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCXN0 cnVjdCBlbTI4ODBfaXIgKmlyID0gZGV2LT5pcl9lbTI4ODA7CisJc3RhdGljIHUzMiBpcl9rZXks IGtleXN0YXR1czsKKwl1MzIga2V5Y29kZTsKKwlzdGF0aWMgdTMyIG9sZF9rZXljb2RlOworCWlu dCByYzsKKwlyYyA9IGlyLT5nZXRfa2V5KGRldiwgJmlyX2tleSwgJmtleXN0YXR1cyk7CisJc3dp dGNoIChyYykgeworCWNhc2UgMDoKKwkJaWYgKGtleXN0YXR1cyA9PSAxKSB7CisJCQlpZiAob2xk X2tleWNvZGUgPT0gMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlucHV0X3JlcG9ydF9rZXko aXItPmlucHV0LCBvbGRfa2V5Y29kZSwgMCk7CisJCQlrZXlzdGF0dXMgPSAwOworCQl9CisJCWJy ZWFrOworCWNhc2UgLTE6CisJCWtleXN0YXR1cyA9IDA7CisJCXJldHVybiByYzsKKwlkZWZhdWx0 OgorCQkvKiBrZXlkb3duICovCisJCWtleWNvZGUgPSBJUl9LRVlDT0RFKGlyLT5rZXltYXAsIGly X2tleSk7CisJCWlmIChrZXljb2RlID09IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaW5wdXRf cmVwb3J0X2tleShpci0+aW5wdXQsIGtleWNvZGUsIDEpOworCQlvbGRfa2V5Y29kZSA9IGtleWNv ZGU7CisJCWtleXN0YXR1cyA9IDE7CisJfQorCXJldHVybiAwOworCit9CisKKyNpZiBMSU5VWF9W RVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA2LCAyMCkKK3N0YXRpYyB2b2lkIGVtMjg4 MF9pcl90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisgICAgICBzdHJ1Y3QgZW0yODgwX2ly ICppciA9ICgoc3RydWN0IGVtMjh4eCAqKWRhdGEpLT5pcl9lbTI4ODA7CisgICAgICBzY2hlZHVs ZV93b3JrKCZpci0+d29yayk7Cit9CisjZW5kaWYKKworCisKKyNpZiBMSU5VWF9WRVJTSU9OX0NP REUgPCBLRVJORUxfVkVSU0lPTigyLCA2LCAyMCkKK3N0YXRpYyB2b2lkIGVtMjh4eF9pcl93b3Jr KHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gKHN0cnVjdCBlbTI4eHggKilk YXRhOworCXN0cnVjdCBlbTI4ODBfaXIgKmlyID0gZGV2LT5pcl9lbTI4ODA7CisJaW50IHJjOwor I2Vsc2UKK3N0YXRpYyB2b2lkIGVtMjh4eF9pcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29y aykKK3sKKwlzdHJ1Y3QgZW0yODgwX2lyICppciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qg ZW0yODgwX2lyLCB3b3JrLndvcmspOworCXN0cnVjdCBlbTI4eHggKmRldiA9IGlyLT5kZXY7CisJ aW50IHJjOworI2VuZGlmCisJaWYgKGlyLT5zdGF0ZSA9PSBFTTI4WFhfUkVNT1RFX1BPTExJTkcp IHsKKwkJcmMgPSBlbTI4ODBfaXJfa2V5X3BvbGwoZGV2KTsKKwkJaWYgKHJjICE9IDApIHsKKwkJ CWlyLT5zdGF0ZSA9IEVNMjhYWF9SRU1PVEVfSURMRTsKKwkJCXJldHVybjsKKwkJfQorCQltdXRl eF9sb2NrKCZpci0+c3RhdGVfbG9jayk7CisJCWlmIChpci0+c3RhdGUgPT0gRU0yOFhYX1JFTU9U RV9QT0xMSU5HKQorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYs IDIwKQorCQkJbW9kX3RpbWVyKCZkZXYtPmlyX2VtMjg4MC0+dGltZXIsIGppZmZpZXMrbXNlY3Nf dG9famlmZmllcyg1MCkpOworI2Vsc2UKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2LT5p cl9lbTI4ODAtPndvcmssIG1zZWNzX3RvX2ppZmZpZXMoNTApKTsKKyNlbmRpZgorCQltdXRleF91 bmxvY2soJmlyLT5zdGF0ZV9sb2NrKTsKKwl9Cit9CisKK2ludCBlbTI4ODBfaXJfZGV0YWNoKHN0 cnVjdCBlbTI4eHggKmRldikKK3sKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVS U0lPTigyLCA2LCAxNykKKwlzdHJ1Y3QgZW0yODgwX2lyICppciA9IGRldi0+aXJfZW0yODgwOwor CisJcmV0dXJuIDA7CisJbXV0ZXhfbG9jaygmZGV2LT5pbnB1dF9sb2NrKTsKKwlpZiAoaXIgPT0g TlVMTCkgeworCQlwcmludGsoS0VSTl9JTkZPImVtMjh4eC1pbnB1dC5jOiBpcj09TlVMTCwgc2tp cHBpbmciCisJCQkJImVtMjg4MF9pcl9kZXRhY2goKVxuIik7CisJCW11dGV4X3VubG9jaygmZGV2 LT5pbnB1dF9sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbXV0ZXhfbG9jaygmaXItPnN0YXRl X2xvY2spOworCWlyLT5zdGF0ZSA9IEVNMjhYWF9SRU1PVEVfSU5URVJSVVBUOworCW11dGV4X3Vu bG9jaygmaXItPnN0YXRlX2xvY2spOworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9W RVJTSU9OKDIsIDYsIDIwKQorCWRlbF90aW1lcl9zeW5jKCZpci0+dGltZXIpOworI2Vsc2UKKwlp ZiAoZGVsYXllZF93b3JrX3BlbmRpbmcoJmlyLT53b3JrKSkKKwkJY2FuY2VsX3JlYXJtaW5nX2Rl bGF5ZWRfd29yaygmaXItPndvcmspOworI2VuZGlmCisKKwlpbnB1dF91bnJlZ2lzdGVyX2Rldmlj ZShpci0+aW5wdXQpOworCWtmcmVlKGRldi0+aXJfZW0yODgwKTsKKwlkZXYtPmlyX2VtMjg4MCA9 IE5VTEw7CisJcHJpbnRrKEtFUk5fSU5GTyJlbTI4eHgtaW5wdXQuYzogcmVtb3RlIGNvbnRyb2wg aGFuZGxlciBkZXRhY2hlZFxuIik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlucHV0X2xvY2spOwor I2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK2ludCBlbTI4ODBfaXJfYXR0YWNoKHN0cnVjdCBlbTI4 eHggKmRldikKK3sKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLCA2 LCAxNykKKwlzdHJ1Y3QgZW0yODgwX2lyICppcjsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9k ZXY7CisJY2hhciBidWZbNV07CisJaW50IGk7CisKKwkvKiBESVNBQkxFRCB0aGlzIHJlbW90ZSBj b250cm9sIHN1cHBvcnQgaXMgYnJva2VuIGJ5IGRlc2lnbiAKKyAgICAgICAgICAgdXBjb21pbmcg c3VwcG9ydCB3aWxsIGJlIG1vdmVkIHRvIHVzZXJzcGFjZSBwbHVzIGludGVycnVwdAorICAgICAg ICAgICB0cmlnZ2VyaW5nIHN1cHBvcnQgaGFzIHRvIGJlIHVzZWQgaGVyZSwgdGhlcmUgYXJlIGFs b3QgcHJvYmxlbXMKKyAgICAgICAgICAgd2l0aCBwb2xsaW5nIGF0IGEgaGlnaCBpbnRlcnZhbCwg d2hlcmUgSSBhbHJlYWR5IHRoaW5rIHRoZSB0aW1lcgorICAgICAgICAgICBBUEkgaXMgc3RpbGwg bm90IGJ1Z2ZyZWUgKi8KKwlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJmRldi0+aW5wdXRfbG9j ayk7CisJaWYgKGRldi0+aXJfZW0yODgwKSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5pbnB1dF9s b2NrKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyJSQyBIYW5kbGVyIGFscmVhZHkgcmVnaXN0ZXJlZFxu Iik7CisJCXJldHVybiAwOworCX0KKwlkZXYtPmlyX2VtMjg4MCA9IGt6YWxsb2Moc2l6ZW9mKHN0 cnVjdCBlbTI4ODBfaXIpLCBHRlBfS0VSTkVMKTsKKwlpciA9IGRldi0+aXJfZW0yODgwOworCWly LT5rZXltYXAgPSBkZXYtPmJvYXJkLT5pcl9rZXl0YWI7CisJaXItPmdldF9rZXkgPSBkZXYtPmJv YXJkLT5pcl9nZXRrZXk7CisJaXItPmRldiA9IGRldjsKKwltdXRleF9pbml0KCZpci0+c3RhdGVf bG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmaXItPnJlbW90ZV9sb29wKTsKKwlpbnB1dF9k ZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpci0+aW5wdXQgPSBpbnB1dF9kZXY7CisJ aW5wdXRfZGV2LT5pZC5idXN0eXBlID0gQlVTX1VTQjsKKwlzcHJpbnRmKGlyLT5uYW1lLCAiZW0y ODgwL2VtMjg3MCByZW1vdGUgY29udHJvbCIpOworCXNwcmludGYoaXItPnBoeXMsICJVU0IiKTsK KwlpbnB1dF9kZXYtPm5hbWUgPSBpci0+bmFtZTsKKwlpbnB1dF9kZXYtPnBoeXMgPSBpci0+cGh5 czsgLyogRklYTUU6IHRoaXMgaXMgdGhlIHdyb25nIGVudHJ5IGhlcmUsCisJCQkJICAgIHNvbWUg YXBwbGljYXRpb25zIGRlcGVuZCBvbiBpdCAqLworCWlucHV0X2Rldi0+a2V5Y29kZSA9IGlyLT5r ZXltYXA7CisJZm9yIChpID0gMDsgaSA8IElSX0tFWVRBQl9TSVpFOyBpKyspCisJCXNldF9iaXQo aXItPmtleW1hcFtpXSwgaW5wdXRfZGV2LT5rZXliaXQpOworCisJaW5wdXRfZGV2LT5rZXljb2Rl c2l6ZSA9IHNpemVvZihJUl9LRVlUQUJfVFlQRSk7CisJaW5wdXRfZGV2LT5rZXljb2RlbWF4ID0g SVJfS0VZVEFCX1NJWkU7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklU KEVWX1JFUCk7CisKKwlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaXItPmlucHV0KTsKKworCWlyLT5z dGF0ZSA9IEVNMjhYWF9SRU1PVEVfUE9MTElORzsKKworCWlmIChkZXYtPmJvYXJkLT5pcl9nZXRr ZXkgPT0gZW0yODg4X2dldF9rZXlfZW1waWEpIHsKKwkJZGV2LT5lbTI4eHhfcmVhZF9yZWdfcmVx X2xlbihkZXYsIDAsIDB4NTAsIGJ1ZiwgNSk7CisJCWlyLT5rZXkgPSBidWZbNF07CisJCWlyLT5v bGR2YWwgPSBnZXRfdGltZXN0YW1wKCk7CisJCWlyLT5idG4gPSBidWZbMV07CisJCWlyLT5yZWxl YXNlZCA9IDE7CisJfQorCisJSU5JVF9ERUxBWUVEX1dPUksoJmlyLT53b3JrLCBlbTI4eHhfaXJf d29yayk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZpci0+d29yaywgbXNlY3NfdG9famlmZmll cyg1MCkpOworCXByaW50ayhLRVJOX0lORk8iZW0yOHh4LWlucHV0LmM6IHJlbW90ZSBjb250cm9s IGhhbmRsZXIgYXR0YWNoZWRcbiIpOworCW11dGV4X3VubG9jaygmZGV2LT5pbnB1dF9sb2NrKTsK KyNlbmRpZgorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgZ2V0X2tleV90ZXJyYXRlYyhz dHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KQoreworCXVuc2lnbmVk IGNoYXIgYjsKKworCS8qIHBvbGwgSVIgY2hpcCAqLworCWlmICgxICE9IGkyY19tYXN0ZXJfcmVj digmaXItPmMsICZiLCAxKSkgeworCQlkcHJpbnRrKCJyZWFkIGVycm9yXG4iKTsKKwkJcmV0dXJu IC1FSU87CisJfQorCisJLyogaXQgc2VlbXMgdGhhdCAweEZFIGluZGljYXRlcyB0aGF0IGEgYnV0 dG9uIGlzIHN0aWxsIGhvbGQKKwkgICBkb3duLCB3aGlsZSAweGZmIGluZGljYXRlcyB0aGF0IG5v IGJ1dHRvbiBpcyBob2xkCisJICAgZG93bi4gMHhmZSBzZXF1ZW5jZXMgYXJlIHNvbWV0aW1lcyBp bnRlcnJ1cHRlZCBieSAweEZGICovCisKKwlkcHJpbnRrKCJrZXkgJTAyeFxuIiwgYik7CisKKwlp ZiAoYiA9PSAweGZmKQorCQlyZXR1cm4gMDsKKworCWlmIChiID09IDB4ZmUpCisJCS8qIGtlZXAg b2xkIGRhdGEgKi8KKwkJcmV0dXJuIDE7CisKKwkqaXJfa2V5ID0gYjsKKwkqaXJfcmF3ID0gYjsK KwlyZXR1cm4gMTsKK30KKworCitzdGF0aWMgaW50IGdldF9rZXlfZW1faGF1cChzdHJ1Y3QgSVJf aTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KQoreworCXVuc2lnbmVkIGNoYXIgYnVm WzJdOworCXVuc2lnbmVkIGNoYXIgY29kZTsKKworCS8qIHBvbGwgSVIgY2hpcCAqLworCWlmICgy ICE9IGkyY19tYXN0ZXJfcmVjdigmaXItPmMsIGJ1ZiwgMikpCisJCXJldHVybiAtRUlPOworCisJ LyogRG9lcyBlbGltaW5hdGUgcmVwZWF0ZWQgcGFyaXR5IGNvZGUgKi8KKwlpZiAoYnVmWzFdID09 IDB4ZmYpCisJCXJldHVybiAwOworCisJaXItPm9sZCA9IGJ1ZlsxXTsKKworCS8qIFJlYXJyYW5n ZXMgYml0cyB0byB0aGUgcmlnaHQgb3JkZXIgKi8KKwljb2RlID0gICAoKGJ1ZlswXSYweDAxKTw8 NSkgfCAvKiAwMDEwIDAwMDAgKi8KKwkJICgoYnVmWzBdJjB4MDIpPDwzKSB8IC8qIDAwMDEgMDAw MCAqLworCQkgKChidWZbMF0mMHgwNCk8PDEpIHwgLyogMDAwMCAxMDAwICovCisJCSAoKGJ1Zlsw XSYweDA4KT4+MSkgfCAvKiAwMDAwIDAxMDAgKi8KKwkJICgoYnVmWzBdJjB4MTApPj4zKSB8IC8q IDAwMDAgMDAxMCAqLworCQkgKChidWZbMF0mMHgyMCk+PjUpOyAgLyogMDAwMCAwMDAxICovCisK KwlkcHJpbnRrKCJpciBoYXVwcGF1Z2UgKGVtMjg0MCk6IGNvZGU9MHglMDJ4IChyY3Y9MHglMDJ4 KVxuIiwKKwkJCWNvZGUsIGJ1ZlswXSk7CisKKwkvKiByZXR1cm4ga2V5ICovCisJKmlyX2tleSA9 IGNvZGU7CisJKmlyX3JhdyA9IGNvZGU7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZ2V0 X2tleV9waW5uYWNsZV91c2Ioc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmly X3JhdykKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZlszXTsKKworCS8qIHBvbGwgSVIgY2hpcCAqLwor CisJaWYgKDMgIT0gaTJjX21hc3Rlcl9yZWN2KCZpci0+YywgYnVmLCAzKSkgeworCQlkcHJpbnRr KCJyZWFkIGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZHByaW50aygia2V5ICUw MnhcbiIsIGJ1ZlsyXSYweDNmKTsKKwlpZiAoYnVmWzBdICE9IDB4MDApIHsKKwkJcmV0dXJuIDA7 CisJfQorCisJKmlyX2tleSA9IGJ1ZlsyXSYweDNmOworCSppcl9yYXcgPSBidWZbMl0mMHgzZjsK KworCXJldHVybiAxOworfQorCitpbnQgZW0yODYwX2dldF9rZXlfa2Fpb215KHN0cnVjdCBlbTI4 eHggKmRldiwgdTMyICppcl9rZXksIHUzMiAqa2V5c3RhdHVzKQoreworCWNoYXIgYnVmWzRdOwor CWludCByZXQ7CisKKwltc2xlZXAoNTApOworCisJcmV0ID0gZGV2LT5lbTI4eHhfcmVhZF9yZWdf cmVxX2xlbihkZXYsIDB4MCwgMHg0NSwgYnVmLCA0KTsKKworCWlmIChyZXQgPCAwKSB7CisJCXN3 aXRjaCAocmV0KSB7CisJCWNhc2UgLUVOT0RFVjoKKwkJCS8qIERldmljZSB3YXMgZGlzY29ubmVj dGVkICovCisJCQllbTI4eHhfd2FybigicmVhZGluZyBrZXkgZmFpbGVkICIKKwkJCQkgICAgIihl cnJvcj0laT0tRU5PREVWKVxuIiwgcmV0KTsKKwkJCXJldHVybiAtMTsKKwkJZGVmYXVsdDoKKwkJ CWVtMjh4eF93YXJuKCJyZWFkaW5nIGtleSBmYWlsZWQgKGVycm9yPSVpKVxuIiwgcmV0KTsKKwkJ CXJldHVybiAtMTsKKwkJfQorCX0KKworCXJldCA9IGVtMjh4eF9yZWFkX3JlZ19yZXEoZGV2LCAw eDAsIDB4NDQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlkZXYtPmlyX2VtMjg4 MC0+c2VxdWVuY2VbMF0gPSBkZXYtPmlyX2VtMjg4MC0+c2VxdWVuY2VbMV0mMHg4MDsKKwlkZXYt PmlyX2VtMjg4MC0+c2VxdWVuY2VbMV0gPSBidWZbMF07CisJKmlyX2tleSA9IGJ1ZlsyXTsKKwly ZXR1cm4gKGJ1ZlswXSYweDdmKSB8fCAoZGV2LT5pcl9lbTI4ODAtPnNlcXVlbmNlWzBdICE9IGRl di0+aXJfZW0yODgwLT5zZXF1ZW5jZVsxXSk7Cit9CisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq Lwordm9pZCBlbTI4eHhfc2V0X2lyKHN0cnVjdCBlbTI4eHggKmRldiwgc3RydWN0IElSX2kyYyAq aXIpCit7CisJaWYgKGRpc2FibGVfaXIpIHsKKwkJaXItPmdldF9rZXkgPSBOVUxMOworCQlyZXR1 cm47CisJfQorCisJLyogZGV0ZWN0ICYgY29uZmlndXJlICovCisJc3dpdGNoIChkZXYtPm1vZGVs KSB7CisJY2FzZSBFTTI4MDBfQk9BUkRfR0VORVJJQzoKKwkJYnJlYWs7CisJY2FzZSBFTTI4MjBf Qk9BUkRfR0VORVJJQzoKKwkJYnJlYWs7CisJY2FzZSBFTTI4MDBfQk9BUkRfVEVSUkFURUNfQ0lO RVJHWV8yMDA6CisJY2FzZSBFTTI4MjBfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8yNTA6CisJCWly LT5pcl9jb2RlcyA9IGlyX2NvZGVzX2VtX3RlcnJhdGVjX3U7CisJCWlyLT5nZXRfa2V5ID0gZ2V0 X2tleV90ZXJyYXRlYzsKKwkJc25wcmludGYoaXItPmMubmFtZSwgc2l6ZW9mKGlyLT5jLm5hbWUp LAorCQkJCSJpMmMgSVIgKEVNMjhYWCBUZXJyYXRlYykiKTsKKwkJYnJlYWs7CisJY2FzZSBFTTI4 MjBfQk9BUkRfUElOTkFDTEVfVVNCXzI6CisJCWlyLT5pcl9jb2RlcyA9IGlyX2NvZGVzX2VtX3Bp bm5hY2xlX3VzYjsKKwkJaXItPmdldF9rZXkgPSBnZXRfa2V5X3Bpbm5hY2xlX3VzYjsKKwkJc25w cmludGYoaXItPmMubmFtZSwgc2l6ZW9mKGlyLT5jLm5hbWUpLAorCQkJCSJpMmMgSVIgKEVNMjhY WCBQaW5uYWNsZSBQQ1RWKSIpOworCQlicmVhazsKKwljYXNlIEVNMjgyMF9CT0FSRF9IQVVQUEFV R0VfV0lOVFZfVVNCXzI6CisJCWlyLT5pcl9jb2RlcyA9IGlyX2NvZGVzX2hhdXBwYXVnZV9uZXdf dTsKKwkJaXItPmdldF9rZXkgPSBnZXRfa2V5X2VtX2hhdXA7CisJCXNucHJpbnRmKGlyLT5jLm5h bWUsIHNpemVvZihpci0+Yy5uYW1lKSwKKwkJCQkiaTJjIElSIChFTTI4NDAgSGF1cHBhdWdlKSIp OworCQlicmVhazsKKwljYXNlIEVNMjgyMF9CT0FSRF9NU0lfVk9YX1VTQl8yOgorCQlicmVhazsK KwljYXNlIEVNMjgwMF9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfVVNCSUk6CisJCWJyZWFrOworCWNh c2UgRU0yODAwX0JPQVJEX0tXT1JMRF9VU0IyODAwOgorCQlicmVhazsKKwl9Cit9CisKKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtYmFzaWMtb2Zmc2V0OiA4Cisg KiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW1waWEvZW0yOHh4 LWtleW1hcHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW1waWEvZW0yOHh4LWtleW1hcHMuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjgyZjkxCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbXBpYS9lbTI4eHgta2V5bWFwcy5jCkBAIC0wLDAg KzEsMzUwIEBACisjaW5jbHVkZSAiZW0yOHh4LWtleW1hcHMuaCIKKworSVJfS0VZVEFCX1RZUEUg aXJfY29kZXNfZW1fdGVycmF0ZWNfdVtJUl9LRVlUQUJfU0laRV0gPSB7CisgICAgICAgIFsgMHgw MSBdID0gS0VZX0NIQU5ORUwsCisgICAgICAgIFsgMHgwMiBdID0gS0VZX1NFTEVDVCwKKyAgICAg ICAgWyAweDAzIF0gPSBLRVlfTVVURSwKKyAgICAgICAgWyAweDA0IF0gPSBLRVlfUE9XRVIsCisg ICAgICAgIFsgMHgwNSBdID0gS0VZXzEsCisgICAgICAgIFsgMHgwNiBdID0gS0VZXzIsCisgICAg ICAgIFsgMHgwNyBdID0gS0VZXzMsCisgICAgICAgIFsgMHgwOCBdID0gS0VZX0NIQU5ORUxVUCwK KyAgICAgICAgWyAweDA5IF0gPSBLRVlfNCwKKyAgICAgICAgWyAweDBhIF0gPSBLRVlfNSwKKyAg ICAgICAgWyAweDBiIF0gPSBLRVlfNiwKKyAgICAgICAgWyAweDBjIF0gPSBLRVlfQ0hBTk5FTERP V04sCisgICAgICAgIFsgMHgwZCBdID0gS0VZXzcsCisgICAgICAgIFsgMHgwZSBdID0gS0VZXzgs CisgICAgICAgIFsgMHgwZiBdID0gS0VZXzksCisgICAgICAgIFsgMHgxMCBdID0gS0VZX1ZPTFVN RVVQLAorICAgICAgICBbIDB4MTEgXSA9IEtFWV8wLAorICAgICAgICBbIDB4MTIgXSA9IEtFWV9N RU5VLAorICAgICAgICBbIDB4MTMgXSA9IEtFWV9QUklOVCwKKyAgICAgICAgWyAweDE0IF0gPSBL RVlfVk9MVU1FRE9XTiwKKyAgICAgICAgWyAweDE2IF0gPSBLRVlfUEFVU0UsCisgICAgICAgIFsg MHgxOCBdID0gS0VZX1JFQ09SRCwKKyAgICAgICAgWyAweDE5IF0gPSBLRVlfUkVXSU5ELAorICAg ICAgICBbIDB4MWEgXSA9IEtFWV9QTEFZLAorICAgICAgICBbIDB4MWIgXSA9IEtFWV9GT1JXQVJE LAorICAgICAgICBbIDB4MWMgXSA9IEtFWV9CQUNLU1BBQ0UsCisgICAgICAgIFsgMHgxZSBdID0g S0VZX1NUT1AsCisgICAgICAgIFsgMHg0MCBdID0gS0VZX1pPT00sCit9OworCitFWFBPUlRfU1lN Qk9MX0dQTChpcl9jb2Rlc19lbV90ZXJyYXRlY191KTsKKworSVJfS0VZVEFCX1RZUEUgaXJfY29k ZXNfaGF1cHBhdWdlX25ld191W0lSX0tFWVRBQl9TSVpFXSA9IHsKKyAgICAgICAgLyogS2V5cyAw IHRvIDkgKi8KKyAgICAgICAgWyAweDAwIF0gPSBLRVlfMCwKKyAgICAgICAgWyAweDAxIF0gPSBL RVlfMSwKKyAgICAgICAgWyAweDAyIF0gPSBLRVlfMiwKKyAgICAgICAgWyAweDAzIF0gPSBLRVlf MywKKyAgICAgICAgWyAweDA0IF0gPSBLRVlfNCwKKyAgICAgICAgWyAweDA1IF0gPSBLRVlfNSwK KyAgICAgICAgWyAweDA2IF0gPSBLRVlfNiwKKyAgICAgICAgWyAweDA3IF0gPSBLRVlfNywKKyAg ICAgICAgWyAweDA4IF0gPSBLRVlfOCwKKyAgICAgICAgWyAweDA5IF0gPSBLRVlfOSwKKworICAg ICAgICBbIDB4MGEgXSA9IEtFWV9URVhULCAgICAgICAgICAgIC8qIGtleXBhZCBhc3RlcmlzayBh cyB3ZWxsICovCisgICAgICAgIFsgMHgwYiBdID0gS0VZX1JFRCwgICAgICAgICAgICAgLyogcmVk IGJ1dHRvbiAqLworICAgICAgICBbIDB4MGMgXSA9IEtFWV9SQURJTywKKyAgICAgICAgWyAweDBk IF0gPSBLRVlfTUVOVSwKKyAgICAgICAgWyAweDBlIF0gPSBLRVlfU1VCVElUTEUsICAgICAgICAv KiBhbHNvIHRoZSAjIGtleSAqLworICAgICAgICBbIDB4MGYgXSA9IEtFWV9NVVRFLAorICAgICAg ICBbIDB4MTAgXSA9IEtFWV9WT0xVTUVVUCwKKyAgICAgICAgWyAweDExIF0gPSBLRVlfVk9MVU1F RE9XTiwKKyAgICAgICAgWyAweDEyIF0gPSBLRVlfUFJFVklPVVMsICAgICAgICAvKiBwcmV2aW91 cyBjaGFubmVsICovCisgICAgICAgIFsgMHgxNCBdID0gS0VZX1VQLAorICAgICAgICBbIDB4MTUg XSA9IEtFWV9ET1dOLAorICAgICAgICBbIDB4MTYgXSA9IEtFWV9MRUZULAorICAgICAgICBbIDB4 MTcgXSA9IEtFWV9SSUdIVCwKKyAgICAgICAgWyAweDE4IF0gPSBLRVlfVklERU8sICAgICAgICAg ICAvKiBWaWRlb3MgKi8KKyAgICAgICAgWyAweDE5IF0gPSBLRVlfQVVESU8sICAgICAgICAgICAv KiBNdXNpYyAqLworICAgICAgICAvKiAweDFhOiBQaWN0dXJlcyAtIHByZXN1bWUgdGhpcyBtZWFu cworICAgICAgICAgICAiTXVsdGltZWRpYSBIb21lIFBsYXRmb3JtIiAtCisgICAgICAgICAgIG5v ICJQSUNUVVJFUyIga2V5IGluIGlucHV0LmgKKyAgICAgICAgICovCisgICAgICAgIFsgMHgxYSBd ID0gS0VZX01IUCwKKworICAgICAgICBbIDB4MWIgXSA9IEtFWV9FUEcsICAgICAgICAgICAgIC8q IEd1aWRlICovCisgICAgICAgIFsgMHgxYyBdID0gS0VZX1RWLAorICAgICAgICBbIDB4MWUgXSA9 IEtFWV9ORVhUU09ORywgICAgICAgIC8qIHNraXAgPnwgKi8KKyAgICAgICAgWyAweDFmIF0gPSBL RVlfRVhJVCwgICAgICAgICAgICAvKiBiYWNrL2V4aXQgKi8KKyAgICAgICAgWyAweDIwIF0gPSBL RVlfQ0hBTk5FTFVQLCAgICAgICAvKiBjaGFubmVsIC8gcHJvZ3JhbSArICovCisgICAgICAgIFsg MHgyMSBdID0gS0VZX0NIQU5ORUxET1dOLCAgICAgLyogY2hhbm5lbCAvIHByb2dyYW0gLSAqLwor ICAgICAgICBbIDB4MjIgXSA9IEtFWV9DSEFOTkVMLCAgICAgICAgIC8qIHNvdXJjZSAob2xkIGJs YWNrIHJlbW90ZSkgKi8KKyAgICAgICAgWyAweDI0IF0gPSBLRVlfUFJFVklPVVNTT05HLCAgICAv KiByZXBsYXkgfDwgKi8KKyAgICAgICAgWyAweDI1IF0gPSBLRVlfRU5URVIsICAgICAgICAgICAv KiBPSyAqLworICAgICAgICBbIDB4MjYgXSA9IEtFWV9TTEVFUCwgICAgICAgICAgIC8qIG1pbmlt aXplIChvbGQgYmxhY2sgcmVtb3RlKSAqLworICAgICAgICBbIDB4MjkgXSA9IEtFWV9CTFVFLCAg ICAgICAgICAgIC8qIGJsdWUga2V5ICovCisgICAgICAgIFsgMHgyZSBdID0gS0VZX0dSRUVOLCAg ICAgICAgICAgLyogZ3JlZW4gYnV0dG9uICovCisgICAgICAgIFsgMHgzMCBdID0gS0VZX1BBVVNF LCAgICAgICAgICAgLyogcGF1c2UgKi8KKyAgICAgICAgWyAweDMyIF0gPSBLRVlfUkVXSU5ELCAg ICAgICAgICAvKiBiYWNrd2FyZCA8PCAqLworICAgICAgICBbIDB4MzQgXSA9IEtFWV9GQVNURk9S V0FSRCwgICAgIC8qIGZvcndhcmQgPj4gKi8KKyAgICAgICAgWyAweDM1IF0gPSBLRVlfUExBWSwK KyAgICAgICAgWyAweDM2IF0gPSBLRVlfU1RPUCwKKyAgICAgICAgWyAweDM3IF0gPSBLRVlfUkVD T1JELCAgICAgICAgICAvKiByZWNvcmRpbmcgKi8KKyAgICAgICAgWyAweDM4IF0gPSBLRVlfWUVM TE9XLCAgICAgICAgICAvKiB5ZWxsb3cga2V5ICovCisgICAgICAgIFsgMHgzYiBdID0gS0VZX1NF TEVDVCwgICAgICAgICAgLyogdG9wIHJpZ2h0IGJ1dHRvbiAqLworICAgICAgICBbIDB4M2MgXSA9 IEtFWV9aT09NLCAgICAgICAgICAgIC8qIGZ1bGwgKi8KKyAgICAgICAgWyAweDNkIF0gPSBLRVlf UE9XRVIsICAgICAgICAgICAvKiBzeXN0ZW0gcG93ZXIgKGdyZWVuIGJ1dHRvbikgKi8KK307CisK K0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2hhdXBwYXVnZV9uZXdfdSk7CisKKworCitJUl9L RVlUQUJfVFlQRSBpcl9jb2Rlc19waW5uYWNsZTJbSVJfS0VZVEFCX1NJWkVdID0geworICAgICAg ICAvKiBLZXlzIDAgdG8gOSAqLworICAgICAgICBbIDB4MTUgXSA9IEtFWV8wLAorICAgICAgICBb IDB4MDggXSA9IEtFWV8xLAorICAgICAgICBbIDB4MDkgXSA9IEtFWV8yLAorICAgICAgICBbIDB4 MGEgXSA9IEtFWV8zLAorICAgICAgICBbIDB4MGMgXSA9IEtFWV80LAorICAgICAgICBbIDB4MGQg XSA9IEtFWV81LAorICAgICAgICBbIDB4MGUgXSA9IEtFWV82LAorICAgICAgICBbIDB4MTAgXSA9 IEtFWV83LAorICAgICAgICBbIDB4MTEgXSA9IEtFWV84LAorICAgICAgICBbIDB4MTIgXSA9IEtF WV85LAorCisgICAgICAgIFsgMHgwMyBdID0gS0VZX1BPV0VSLAorCisgICAgICAgIFsgMHgwYiBd ID0gS0VZX1ZPTFVNRVVQLAorICAgICAgICBbIDB4MGYgXSA9IEtFWV9WT0xVTUVET1dOLAorICAg ICAgICBbIDB4MTMgXSA9IEtFWV9DSEFOTkVMVVAsCisgICAgICAgIFsgMHgxNyBdID0gS0VZX0NI QU5ORUxET1dOLAorICAgICAgICBbIDB4MTQgXSA9IEtFWV9JTkZPLAorCisgICAgICAgIFsgMHgw MCBdID0gS0VZX01VVEUsCisKKyAgICAgICAgWyAweDA2IF0gPSBLRVlfUExBWSwKKyAgICAgICAg WyAweDA0IF0gPSBLRVlfUkVXSU5ELAorICAgICAgICBbIDB4MDcgXSA9IEtFWV9GT1JXQVJELAor ICAgICAgICBbIDB4MDYgXSA9IEtFWV9QQVVTRSwKKyAgICAgICAgWyAweDA1IF0gPSBLRVlfU1RP UCwKKyAgICAgICAgWyAweDAxIF0gPSBLRVlfUkVDT1JELAorICAgICAgICBbIDB4MDIgXSA9IEtF WV9aT09NLCAvKiBmdWxsc2NyZWVuICovCisgICAgICAgIFsgMHgxNiBdID0gS0VZX00sCisKK307 CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19waW5uYWNsZTIpOworCitJUl9LRVlUQUJfVFlQ RSBpcl9jb2Rlc19lbV9nYWRtZWlfdXNiW0lSX0tFWVRBQl9TSVpFXSA9IHsKKyAgICAgICAgWyAw eDAwIF0gPSBLRVlfMSwKKyAgICAgICAgWyAweDAxIF0gPSBLRVlfMiwKKyAgICAgICAgWyAweDAy IF0gPSBLRVlfMywKKyAgICAgICAgWyAweDAzIF0gPSBLRVlfNCwKKyAgICAgICAgWyAweDA0IF0g PSBLRVlfNSwKKyAgICAgICAgWyAweDA1IF0gPSBLRVlfNiwKKyAgICAgICAgWyAweDA2IF0gPSBL RVlfNywKKyAgICAgICAgWyAweDA3IF0gPSBLRVlfOCwKKyAgICAgICAgWyAweDA4IF0gPSBLRVlf OSwKKyAgICAgICAgWyAweDA5IF0gPSBLRVlfMCwKKyAgICAgICAgWyAweDBhIF0gPSBLRVlfQSwK KyAgICAgICAgWyAweDBiIF0gPSBLRVlfVklERU8sCisgICAgICAgIFsgMHgwYyBdID0gS0VZX01V VEUsCisgICAgICAgIFsgMHgwZCBdID0gS0VZX1BMQVlQQVVTRSwKKyAgICAgICAgWyAweDBlIF0g PSBLRVlfRFZELAorICAgICAgICBbIDB4MGYgXSA9IEtFWV9SQURJTywKKyAgICAgICAgWyAweDEw IF0gPSBLRVlfVk9MVU1FVVAsCisgICAgICAgIFsgMHgxMSBdID0gS0VZX1ZPTFVNRURPV04sCisg ICAgICAgIFsgMHgxMiBdID0gS0VZX0NIQU5ORUxVUCwKKyAgICAgICAgWyAweDEzIF0gPSBLRVlf Q0hBTk5FTERPV04sCisgICAgICAgIFsgMHgxNCBdID0gS0VZX1BPV0VSLAorICAgICAgICBbIDB4 MTUgXSA9IEtFWV9NRU5VLAorICAgICAgICBbIDB4MTcgXSA9IEtFWV9TVE9QLAorICAgICAgICBb IDB4MTggXSA9IEtFWV9UViwKKyAgICAgICAgWyAweDFhIF0gPSBLRVlfUkVDT1JELAorICAgICAg ICBbIDB4MWMgXSA9IEtFWV9QUkVWSU9VUywKKyAgICAgICAgWyAweDFlIF0gPSBLRVlfQiwKKyAg ICAgICAgWyAweDFmIF0gPSBLRVlfQywKKyAgICAgICAgWyAweDQ0IF0gPSBLRVlfRSwKKyAgICAg ICAgWyAweDQ2IF0gPSBLRVlfRCwKKyAgICAgICAgWyAweDRhIF0gPSBLRVlfWk9PTSwKK307CitF WFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19lbV9nYWRtZWlfdXNiKTsKKworSVJfS0VZVEFCX1RZ UEUgaXJfY29kZXNfZW1fcGlubmFjbGUyX3VzYltJUl9LRVlUQUJfU0laRV0gPSB7CisgICAgICAg IFsgMHgwMCBdID0gS0VZX01VVEUsCisgICAgICAgIFsgMHgwMSBdID0gS0VZX0EsCisgICAgICAg IFsgMHgzOSBdID0gS0VZX1BPV0VSLAorICAgICAgICBbIDB4MDMgXSA9IEtFWV9WT0xVTUVVUCwK KyAgICAgICAgWyAweDA2IF0gPSBLRVlfQ0hBTk5FTFVQLAorICAgICAgICBbIDB4MDkgXSA9IEtF WV9WT0xVTUVET1dOLAorICAgICAgICBbIDB4MGMgXSA9IEtFWV9DSEFOTkVMRE9XTiwKKyAgICAg ICAgWyAweDBmIF0gPSBLRVlfMSwKKyAgICAgICAgWyAweDE1IF0gPSBLRVlfMiwKKyAgICAgICAg WyAweDEwIF0gPSBLRVlfMywKKyAgICAgICAgWyAweDE4IF0gPSBLRVlfNCwKKyAgICAgICAgWyAw eDFiIF0gPSBLRVlfNSwKKyAgICAgICAgWyAweDFlIF0gPSBLRVlfNiwKKyAgICAgICAgWyAweDEx IF0gPSBLRVlfNywKKyAgICAgICAgWyAweDIxIF0gPSBLRVlfOCwKKyAgICAgICAgWyAweDEyIF0g PSBLRVlfOSwKKyAgICAgICAgWyAweDI0IF0gPSBLRVlfWk9PTSwKKyAgICAgICAgWyAweDI3IF0g PSBLRVlfMCwKKyAgICAgICAgWyAweDJhIF0gPSBLRVlfVCwKKyAgICAgICAgWyAweDJkIF0gPSBL RVlfUkVXSU5ELAorICAgICAgICBbIDB4MzAgXSA9IEtFWV9QTEFZLAorICAgICAgICBbIDB4MzMg XSA9IEtFWV9GT1JXQVJELAorICAgICAgICBbIDB4MzYgXSA9IEtFWV9SRUNPUkQsCisgICAgICAg IFsgMHgzYyBdID0gS0VZX1NUT1AsCisgICAgICAgIFsgMHgzZiBdID0gS0VZX0lORk8sCit9Owor RVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZW1fcGlubmFjbGUyX3VzYik7CisKK0lSX0tFWVRB Ql9UWVBFIGlyX2NvZGVzX2VtX3Bpbm5hY2xlX3VzYltJUl9LRVlUQUJfU0laRV0gPSB7CisgICAg ICAgIFsgMHgzYSBdID0gS0VZXzAsCisgICAgICAgIFsgMHgzMSBdID0gS0VZXzEsCisgICAgICAg IFsgMHgzMiBdID0gS0VZXzIsCisgICAgICAgIFsgMHgzMyBdID0gS0VZXzMsCisgICAgICAgIFsg MHgzNCBdID0gS0VZXzQsCisgICAgICAgIFsgMHgzNSBdID0gS0VZXzUsCisgICAgICAgIFsgMHgz NiBdID0gS0VZXzYsCisgICAgICAgIFsgMHgzNyBdID0gS0VZXzcsCisgICAgICAgIFsgMHgzOCBd ID0gS0VZXzgsCisgICAgICAgIFsgMHgzOSBdID0gS0VZXzksCisKKyAgICAgICAgWyAweDJmIF0g PSBLRVlfUE9XRVIsCisKKyAgICAgICAgWyAweDJlIF0gPSBLRVlfUCwKKyAgICAgICAgWyAweDFm IF0gPSBLRVlfTCwKKyAgICAgICAgWyAweDJiIF0gPSBLRVlfSSwKKworICAgICAgICBbIDB4MmQg XSA9IEtFWV9aT09NLAorICAgICAgICBbIDB4MWUgXSA9IEtFWV9aT09NLAorICAgICAgICBbIDB4 MWIgXSA9IEtFWV9WT0xVTUVVUCwKKyAgICAgICAgWyAweDBmIF0gPSBLRVlfVk9MVU1FRE9XTiwK KyAgICAgICAgWyAweDE3IF0gPSBLRVlfQ0hBTk5FTFVQLAorICAgICAgICBbIDB4MWMgXSA9IEtF WV9DSEFOTkVMRE9XTiwKKyAgICAgICAgWyAweDI1IF0gPSBLRVlfSU5GTywKKworICAgICAgICBb IDB4M2MgXSA9IEtFWV9NVVRFLAorCisgICAgICAgIFsgMHgzZCBdID0gS0VZX0xFRlQsCisgICAg ICAgIFsgMHgzYiBdID0gS0VZX1JJR0hULAorCisgICAgICAgIFsgMHgzZiBdID0gS0VZX1VQLAor ICAgICAgICBbIDB4M2UgXSA9IEtFWV9ET1dOLAorICAgICAgICBbIDB4MWEgXSA9IEtFWV9QQVVT RSwKKworICAgICAgICBbIDB4MWQgXSA9IEtFWV9NRU5VLAorICAgICAgICBbIDB4MTkgXSA9IEtF WV9QTEFZLAorICAgICAgICBbIDB4MTYgXSA9IEtFWV9SRVdJTkQsCisgICAgICAgIFsgMHgxMyBd ID0gS0VZX0ZPUldBUkQsCisgICAgICAgIFsgMHgxNSBdID0gS0VZX1BBVVNFLAorICAgICAgICBb IDB4MGUgXSA9IEtFWV9SRVdJTkQsCisgICAgICAgIFsgMHgwZCBdID0gS0VZX1BMQVksCisgICAg ICAgIFsgMHgwYiBdID0gS0VZX1NUT1AsCisgICAgICAgIFsgMHgwNyBdID0gS0VZX0ZPUldBUkQs CisgICAgICAgIFsgMHgyNyBdID0gS0VZX1JFQ09SRCwKKyAgICAgICAgWyAweDI2IF0gPSBLRVlf VFVORVIsCisgICAgICAgIFsgMHgyOSBdID0gS0VZX1RFWFQsCisgICAgICAgIFsgMHgyYSBdID0g S0VZX01FRElBLAorICAgICAgICBbIDB4MTggXSA9IEtFWV9FUEcsCisgICAgICAgIFsgMHgyNyBd ID0gS0VZX1JFQ09SRCwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19lbV9waW5uYWNs ZV91c2IpOworCitJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19lbV90ZXJyYXRlYzJbSVJfS0VZVEFC X1NJWkVdID0geworICAgICAgICBbIDB4MDEgXSA9IEtFWV9QT1dFUiwKKyAgICAgICAgWyAweDAy IF0gPSBLRVlfMSwKKyAgICAgICAgWyAweDAzIF0gPSBLRVlfMiwKKyAgICAgICAgWyAweDA0IF0g PSBLRVlfMywKKyAgICAgICAgWyAweDA1IF0gPSBLRVlfNCwKKyAgICAgICAgWyAweDA2IF0gPSBL RVlfNSwKKyAgICAgICAgWyAweDA3IF0gPSBLRVlfNiwKKyAgICAgICAgWyAweDA4IF0gPSBLRVlf NywKKyAgICAgICAgWyAweDA5IF0gPSBLRVlfOCwKKyAgICAgICAgWyAweDBhIF0gPSBLRVlfOSwK KyAgICAgICAgWyAweDBiIF0gPSBLRVlfVFVORVIsCisgICAgICAgIFsgMHgwYyBdID0gS0VZXzAs CisgICAgICAgIFsgMHgwZCBdID0gS0VZX1BSRVZJT1VTU09ORywKKworICAgICAgICBbIDB4NDEg XSA9IEtFWV9IT01FLAorICAgICAgICBbIDB4NDIgXSA9IEtFWV9NRU5VLAorICAgICAgICBbIDB4 NDMgXSA9IEtFWV9TVUJUSVRMRSwKKyAgICAgICAgWyAweDQ0IF0gPSBLRVlfVEVYVCwKKyAgICAg ICAgWyAweDQ1IF0gPSBLRVlfREVMRVRFLAorICAgICAgICBbIDB4NDYgXSA9IEtFWV9UViwKKyAg ICAgICAgWyAweDQ3IF0gPSBLRVlfRFZELAorICAgICAgICBbIDB4NDkgXSA9IEtFWV9WSURFTywK KyAgICAgICAgWyAweDRhIF0gPSBLRVlfQVVESU8sCisgICAgICAgIFsgMHg0YiBdID0gS0VZX1NI VUZGTEUsCisKKyAgICAgICAgWyAweDEwIF0gPSBLRVlfVVAsCisgICAgICAgIFsgMHgxMSBdID0g S0VZX0xFRlQsCisgICAgICAgIFsgMHgxMiBdID0gS0VZX09LLAorICAgICAgICBbIDB4MTMgXSA9 IEtFWV9SSUdIVCwKKyAgICAgICAgWyAweDE0IF0gPSBLRVlfRE9XTiwKKworICAgICAgICBbIDB4 MGYgXSA9IEtFWV9FUEcsCisgICAgICAgIFsgMHgxNiBdID0gS0VZX0lORk8sCisgICAgICAgIFsg MHg0ZCBdID0gS0VZX0JBQ0ssCisKKyAgICAgICAgWyAweDFjIF0gPSBLRVlfVk9MVU1FVVAsCisg ICAgICAgIFsgMHg0YyBdID0gS0VZX1BMQVksCisgICAgICAgIFsgMHgxYiBdID0gS0VZX0NIQU5O RUxVUCwKKyAgICAgICAgWyAweDFlIF0gPSBLRVlfVk9MVU1FRE9XTiwKKyAgICAgICAgWyAweDFk IF0gPSBLRVlfTVVURSwKKyAgICAgICAgWyAweDFmIF0gPSBLRVlfQ0hBTk5FTERPV04sCisKKyAg ICAgICAgWyAweDE3IF0gPSBLRVlfUkVELAorICAgICAgICBbIDB4MTggXSA9IEtFWV9HUkVFTiwK KyAgICAgICAgWyAweDE5IF0gPSBLRVlfWUVMTE9XLAorICAgICAgICBbIDB4MWEgXSA9IEtFWV9C TFVFLAorCisgICAgICAgIFsgMHg1OCBdID0gS0VZX1JFQ09SRCwKKyAgICAgICAgWyAweDQ4IF0g PSBLRVlfU1RPUCwKKyAgICAgICAgWyAweDQwIF0gPSBLRVlfUEFVU0UsCisgICAgICAgIFsgMHg1 NCBdID0gS0VZX0xBU1QsCisgICAgICAgIFsgMHg0ZSBdID0gS0VZX1JFV0lORCwKKyAgICAgICAg WyAweDRmIF0gPSBLRVlfRk9SV0FSRCwKKyAgICAgICAgWyAweDVjIF0gPSBLRVlfTkVYVCwKK307 CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19lbV90ZXJyYXRlYzIpOworCisKK0lSX0tFWVRB Ql9UWVBFIGlyX2NvZGVzX2VtX2t3b3JsZFtJUl9LRVlUQUJfU0laRV0gPSB7CisgICAgICAgIFsg MHg0MyBdID0gS0VZX1BPV0VSLAorCVsgMHgwMyBdID0gS0VZX1BPV0VSMiwKKworICAgICAgICBb IDB4MDQgXSA9IEtFWV8xLAorICAgICAgICBbIDB4MDggXSA9IEtFWV8yLAorICAgICAgICBbIDB4 MDIgXSA9IEtFWV8zLAorICAgICAgICBbIDB4MGYgXSA9IEtFWV80LAorICAgICAgICBbIDB4MDUg XSA9IEtFWV81LAorICAgICAgICBbIDB4MDYgXSA9IEtFWV82LAorICAgICAgICBbIDB4MGMgXSA9 IEtFWV83LAorICAgICAgICBbIDB4MGQgXSA9IEtFWV84LAorICAgICAgICBbIDB4MGEgXSA9IEtF WV85LAorICAgICAgICBbIDB4MTEgXSA9IEtFWV8wLAorCisgICAgICAgIFsgMHgwOSBdID0gS0VZ X0NIQU5ORUxVUCwKKyAgICAgICAgWyAweDA3IF0gPSBLRVlfQ0hBTk5FTERPV04sCisgICAgICAg IFsgMHgwZSBdID0gS0VZX1ZPTFVNRVVQLAorICAgICAgICBbIDB4MTMgXSA9IEtFWV9WT0xVTUVE T1dOLAorCisgICAgICAgIFsgMHgwMSBdID0gS0VZX1RVTkVSLAorCVsgMHgwYiBdID0gS0VZX1pP T00sCisKKyAgICAgICAgWyAweDE2IF0gPSBLRVlfUExBWSwKKyAgICAgICAgWyAweDE3IF0gPSBL RVlfTVVURSwKKyAgICAgICAgWyAweDE0IF0gPSBLRVlfUkVDT1JELAorICAgICAgICBbIDB4MTUg XSA9IEtFWV9TVE9QLAorICAgICAgICAKKwlbIDB4MTggXSA9IEtFWV9VUCwKKyAgICAgICAgWyAw eDE5IF0gPSBLRVlfRE9XTiwKKyAgICAgICAgWyAweDFhIF0gPSBLRVlfTEVGVCwKKyAgICAgICAg WyAweDFiIF0gPSBLRVlfUklHSFQsCisgICAgICAgIAorCVsgMHgxYyBdID0gS0VZX1JFRCwKKyAg ICAgICAgWyAweDFkIF0gPSBLRVlfR1JFRU4sCisgICAgICAgIFsgMHgxZSBdID0gS0VZX1lFTExP VywKKyAgICAgICAgWyAweDFmIF0gPSBLRVlfQkxVRSwKKworCVsgMHgxMiBdID0gS0VZX09LLAor CVsgMHgxMCBdID0gS0VZX0hPTUUKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19lbV9r d29ybGQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbXBpYS9lbTI4eHgta2V5 bWFwcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbXBpYS9lbTI4eHgta2V5bWFwcy5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMDU0MTkKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtcGlhL2VtMjh4eC1rZXltYXBzLmgKQEAgLTAsMCArMSwy MSBAQAorI2lmbmRlZiBfRU0yOFhYX0tFWU1BUFMKKyNkZWZpbmUgX0VNMjhYWF9LRVlNQVBTCisj aW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKwor LyogVE9ETyBtb3ZlIGFsbCB0aGF0IHN0dWZmIHRvIHVzZXJzcGFjZSwgZml4ZWQga2V5dGFiIGRl ZmluaXRpb25zIGluIHRoZSBrZXJuZWwKKyAqIGFyZSBicm9rZW4gYnkgZGVzaWduLCB0aGVyZSBh cmUgbXVsdGlwbGUgcmVtb3RlcyBhdmFpbGFibGUgd2l0aCBjdXN0b20gcmV0dXJuIGtleXMKKyAq IC0+IHJhdyBsaXJjIG1vZHVsZSBpcyByZXF1aXJlZCBoZXJlICovCisKKyNkZWZpbmUgSVJfS0VZ VEFCX1RZUEUgIHUzMiAKKyNkZWZpbmUgSVJfS0VZVEFCX1NJWkUgIDEyOCAgLy8gZW5vdWd0aCBm b3IgcmM1LCBwcm9iYWJseSBuZWVkIG1vcmUgc29tZSBkYXkgLi4uCisKK2V4dGVybiBJUl9LRVlU QUJfVFlQRSBpcl9jb2Rlc19waW5uYWNsZTJbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tF WVRBQl9UWVBFIGlyX2NvZGVzX2VtX3Bpbm5hY2xlX3VzYltJUl9LRVlUQUJfU0laRV07CitleHRl cm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZW1fdGVycmF0ZWMyW0lSX0tFWVRBQl9TSVpFXTsK K2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19lbV9waW5uYWNsZTJfdXNiW0lSX0tFWVRB Ql9TSVpFXTsKK2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19lbV9nYWRtZWlfdXNiW0lS X0tFWVRBQl9TSVpFXTsKK2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19lbV90ZXJyYXRl Y191W0lSX0tFWVRBQl9TSVpFXTsKK2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19oYXVw cGF1Z2VfbmV3X3VbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2Nv ZGVzX2VtX2t3b3JsZFtJUl9LRVlUQUJfU0laRV07CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZl cnMvbWVkaWEvdmlkZW8vZW1waWEvZW0yOHh4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVv L2VtcGlhL2VtMjh4eC12aWRlby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjQ5ZGIzNjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtcGlhL2Vt Mjh4eC12aWRlby5jCkBAIC0wLDAgKzEsNDI0NCBAQAorLyoKKyAgIGVtMjh4eC12aWRlby5jIC0g ZHJpdmVyIGZvciBFbXBpYQorCQkgICAgRU0yODAwLzI4MjAvMjg0MC8yODcwLzI4ODAKKwkJICAg IFVTQiB2aWRlbyBjYXB0dXJlIGRldmljZXMKKworICAgQ29weXJpZ2h0IChDKSAyMDA1IFNhc2No YSBTb21tZXIgPHNhc2NoYXNvbW1lckBmcmVlbmV0LmRlPgorCQkgMjAwNS0yMDA3IE1hcmt1cyBS ZWNoYmVyZ2VyIDxtcmVjaGJlcmdlckBnbWFpbC5jb20+CisJCSAyMDA1LTIwMDYgTWF1cm8gQ2Fy dmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+CisJCSAyMDA1IEx1ZG92aWNvIENh dmVkb24gPGNhdmVkb25Ac3NzdXAuaXQ+CisKKyAgIFNvbWUgcGFydHMgYmFzZWQgb24gU045QzEw eCBQQyBDYW1lcmEgQ29udHJvbGxlcnMgR1BMIGRyaXZlciBtYWRlCisgICBieSBMdWNhIFJpc29s aWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAg Rm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0Eu CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+ CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cisj aW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVk ZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxp bnV4L3ZpZGVvX2RlY29kZXIuaD4KKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKyNpZiBMSU5V WF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLCA2LCAxNSkKKyNpbmNsdWRlIDxsaW51 eC9tdXRleC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJlbTI4eHguaCIKKyNpbmNsdWRlIDxtZWRp YS90dW5lci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaWYgTElOVVhfVkVS U0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMjYpCisjaW5jbHVkZSA8bWVkaWEvdjRs Mi1pb2N0bC5oPgorI2VuZGlmCisjaW5jbHVkZSAiaW5jbHVkZS90dW5lcmNoaXAuaCIKKyNpbmNs dWRlICJ4YzMwMjgveGMzMDI4X2NvbnRyb2wuaCIKKyNpbmNsdWRlICJ4YzMwMjgveGMzMDI4X21v ZHVsZS5oIgorCisjaW5jbHVkZSAieGM1MDAwL3hjNTAwMF9jb250cm9sLmgiCisjaW5jbHVkZSAi eGM1MDAwL3hjNTAwMF9tb2R1bGUuaCIKKyNpbmNsdWRlICJjeDI1ODQzL2VtMjh4eC1jeDI1ODQz LmgiCisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA1LCAwKQor I2luY2x1ZGUgImkyYy1jb21wYXQuaCIKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgor I2VuZGlmCisKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTHVkb3ZpY28gQ2F2ZWRvbiA8Y2F2ZWRv bkBzc3N1cC5pdD4sICIgXAorCQkgICAgICAiTWFya3VzIFJlY2hiZXJnZXIgPG1yZWNoYmVyZ2Vy QGdtYWlsLmNvbT4sICIgXAorCQkgICAgICAiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFi QGluZnJhZGVhZC5vcmc+LCAiIFwKKwkJICAgICAgIlNhc2NoYSBTb21tZXIgPHNhc2NoYXNvbW1l ckBmcmVlbmV0LmRlPiIKKworI2RlZmluZSBEUklWRVJfTkFNRSAgICAgICAgICJlbTI4eHgiCisj ZGVmaW5lIERSSVZFUl9ERVNDICAgICAgICAgIkVtcGlhIGVtMjh4eCBiYXNlZCBVU0IgdmlkZW8g ZGV2aWNlIGRyaXZlciIKKyNkZWZpbmUgRU0yOFhYX1ZFUlNJT05fQ09ERSAgS0VSTkVMX1ZFUlNJ T04oMCwgMCwgMSkKKworI2RlZmluZSBlbTI4eHhfdmlkZW9kYmcoZm10LCBhcmcuLi4pIGRvIHtc CisJaWYgKHZpZGVvX2RlYnVnKSBcCisJCXByaW50ayhLRVJOX0lORk8gIiVzICVzIDoiZm10LCBc CisJCQkgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18gLCAjI2FyZyk7IH0gd2hpbGUgKDApCisKK01P RFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RF U0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCit1bnNpZ25lZCBjaGFyICpYQzUwMDBfZmly bXdhcmVfU0VRVUVOQ0U7CisKK0xJU1RfSEVBRChlbTI4eHhfZGV2bGlzdCk7CitzdGF0aWMgTElT VF9IRUFEKGVtMjh4eF9leHRlbnNpb25fZGV2bGlzdCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGVt Mjh4eF9leHRlbnNpb25fZGV2bGlzdF9sb2NrKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBjYXJk W10gICAgID0ge1swIC4uLiAoRU0yOFhYX01BWEJPQVJEUyAtIDEpXSA9IFVOU0VUIH07CitzdGF0 aWMgdW5zaWduZWQgaW50IHJhZGlvX25yW10gPSB7WzAgLi4uIChFTTI4WFhfTUFYQk9BUkRTIC0g MSldID0gVU5TRVQgfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmlkZW9fbnJbXSA9IHtbMCAuLi4g KEVNMjhYWF9NQVhCT0FSRFMgLSAxKV0gPSBVTlNFVCB9Oworc3RhdGljIHVuc2lnbmVkIGludCB2 YmlfbnJbXSA9IHtbMCAuLi4gKEVNMjhYWF9NQVhCT0FSRFMgLSAxKV0gPSBVTlNFVCB9OworI2lm IExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDUsIDApCitNT0RVTEVfUEFS TShjYXJkLCAiMS0iIF9fc3RyaW5naWZ5KEVNMjhYWF9NQVhCT0FSRFMpICJpIik7CitNT0RVTEVf UEFSTSh2aWRlb19uciwgIjEtIiBfX3N0cmluZ2lmeShFTTI4WFhfTUFYQk9BUkRTKSAiaSIpOwor TU9EVUxFX1BBUk0odmJpX25yLCAiMS0iIF9fc3RyaW5naWZ5KEVNMjhYWF9NQVhCT0FSRFMpICJp Iik7CisjZWxzZQorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYs IDEwKQorc3RhdGljIGludCBkdW1teTsKK21vZHVsZV9wYXJhbV9hcnJheShjYXJkLCAgaW50LCBk dW1teSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkodmlkZW9fbnIsIGludCwgZHVtbXksIDA0 NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KHZiaV9uciwgaW50LCBkdW1teSwgMDQ0NCk7CisjZWxz ZQorbW9kdWxlX3BhcmFtX2FycmF5KGNhcmQsICBpbnQsIE5VTEwsIDA0NDQpOworbW9kdWxlX3Bh cmFtX2FycmF5KHZpZGVvX25yLCBpbnQsIE5VTEwsIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5 KHZiaV9uciwgaW50LCBOVUxMLCAwNDQ0KTsKKyNlbmRpZgorI2VuZGlmCitNT0RVTEVfUEFSTV9E RVNDKGNhcmQsICJjYXJkIHR5cGUiKTsKK01PRFVMRV9QQVJNX0RFU0ModmlkZW9fbnIsICJ2aWRl byBkZXZpY2UgbnVtYmVycyIpOworTU9EVUxFX1BBUk1fREVTQyh2YmlfbnIsICJ2YmkgZGV2aWNl IG51bWJlcnMiKTsKKworc3RhdGljIGludCB0dW5lciA9IC0xOworbW9kdWxlX3BhcmFtKHR1bmVy LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyh0dW5lciwgInR1bmVyIHR5cGUiKTsKKwor c3RhdGljIHVuc2lnbmVkIGludCB2aWRlb19kZWJ1ZzsKK21vZHVsZV9wYXJhbSh2aWRlb19kZWJ1 ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModmlkZW9fZGVidWcsICJlbmFibGUgZGVi dWcgbWVzc2FnZXMgW3ZpZGVvXSIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IGRldmljZV9tb2Rl OworbW9kdWxlX3BhcmFtKGRldmljZV9tb2RlLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVT QyhkZXZpY2VfbW9kZSwgImRldmljZSBtb2RlIChEVkItVC9BbmFsb2d1ZSBUVikiKTsKKworc3Rh dGljIHVuc2lnbmVkIGludCB2YmlfbW9kZSA9IDE7Cittb2R1bGVfcGFyYW0odmJpX21vZGUsIGlu dCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHZiaV9tb2RlLCAiVkJJIG1vZGUgKDAgZGlzYWJs ZWQvMSBlbmFibGVkKGRlZmF1bHQsICIKKwkJCQkiaWYgYXBwcm9wcmlhdGUpKSIpOworCitzdGF0 aWMgdW5zaWduZWQgaW50IHZiaV9pbnRlcmxhY2VkOworbW9kdWxlX3BhcmFtKHZiaV9pbnRlcmxh Y2VkLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh2YmlfaW50ZXJsYWNlZCwgIlZCSSBJ bnRlcmxhY2VkIChkZWZhdWx0IDAgLSBvZmYpIik7CisKKy8qIEJpdG1hc2sgbWFya2luZyBhbGxv Y2F0ZWQgZGV2aWNlcyBmcm9tIDAgdG8gRU0yOFhYX01BWEJPQVJEUyAqLworc3RhdGljIHVuc2ln bmVkIGxvbmcgZW0yOHh4X2RldnVzZWQ7CisKK3N0YXRpYyBpbnQgZW0yOHh4X3Y0bDJfdmJpX21t YXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKK3N0YXRp YyBpbnQgZW0yOHh4X3N0cmVhbV9pbnRlcnJ1cHQoc3RydWN0IGVtMjh4eCAqZGV2LCBpbnQgdHlw ZSk7CisKK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0ICplbTI4eHhfd3E7IC8qIGdsb2JhbCB3b3Jr cXVldWUgZm9yIHBvbGxpbmcgdGhlCisJCQkJCSAgICAgIHJlbW90ZSBjb250cm9sIGFuZCByZXF1 ZXN0aW5nCisJCQkJCSAgICAgIHN1Ym1vZHVsZXMgKi8KKy8qIHN1cHBvcnRlZCBjb250cm9scyAq LworLyogQ29tbW9uIHRvIGFsbCBib2FyZHMgKi8KK3N0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0 cmwgZW0yOHh4X3FjdHJsW10gPSB7CisJeworCQkuaWQgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUs CisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgPSAiVm9sdW1lIiwK KwkJLm1pbmltdW0gPSAweDAsCisJCS5tYXhpbXVtID0gMHgxZiwKKwkJLnN0ZXAgPSAweDEsCisJ CS5kZWZhdWx0X3ZhbHVlID0gMHgxZiwKKwkJLmZsYWdzID0gMCwKKwl9LCB7CisJCS5pZCA9IFY0 TDJfQ0lEX0FVRElPX01VVEUsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJ Lm5hbWUgPSAiTXV0ZSIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxLAorCQkuc3Rl cCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMSwKKwkJLmZsYWdzID0gMCwKKwl9Cit9OworCisv KiBGSVhNRTogVGhlc2UgYXJlIHNwZWNpZmljIHRvIHNhYTcxMXggLSBzaG91bGQgYmUgbW92ZWQg dG8gaXRzIGNvZGUgKi8KK3N0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgc2FhNzExeF9xY3Ry bFtdID0geworCXsKKwkJLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUywKKwkJLnR5cGUgPSBWNEwy X0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSA9ICJCcmlnaHRuZXNzMSIsCisJCS5taW5pbXVt ID0gLTEyOCwKKwkJLm1heGltdW0gPSAxMjcsCisJCS5zdGVwID0gMSwKKwkJLmRlZmF1bHRfdmFs dWUgPSAwLAorCQkuZmxhZ3MgPSAwLAorCX0sIHsKKwkJLmlkID0gVjRMMl9DSURfQ09OVFJBU1Qs CisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgPSAiQ29udHJhc3Qi LAorCQkubWluaW11bSA9IDB4MCwKKwkJLm1heGltdW0gPSAweDFmLAorCQkuc3RlcCA9IDB4MSwK KwkJLmRlZmF1bHRfdmFsdWUgPSAweDEwLAorCQkuZmxhZ3MgPSAwLAorCX0sIHsKKwkJLmlkID0g VjRMMl9DSURfU0FUVVJBVElPTiwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAor CQkubmFtZSA9ICJTYXR1cmF0aW9uIiwKKwkJLm1pbmltdW0gPSAweDAsCisJCS5tYXhpbXVtID0g MHgxZiwKKwkJLnN0ZXAgPSAweDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMHgxMCwKKwkJLmZsYWdz ID0gMCwKKwl9LCB7CisJCS5pZCA9IFY0TDJfQ0lEX1JFRF9CQUxBTkNFLAorCQkudHlwZSA9IFY0 TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lID0gIlJlZCBjaHJvbWEgYmFsYW5jZSIsCisJ CS5taW5pbXVtID0gLTEyOCwKKwkJLm1heGltdW0gPSAxMjcsCisJCS5zdGVwID0gMSwKKwkJLmRl ZmF1bHRfdmFsdWUgPSAwLAorCQkuZmxhZ3MgPSAwLAorCX0sIHsKKwkJLmlkID0gVjRMMl9DSURf QkxVRV9CQUxBTkNFLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1l ID0gIkJsdWUgY2hyb21hIGJhbGFuY2UiLAorCQkubWluaW11bSA9IC0xMjgsCisJCS5tYXhpbXVt ID0gMTI3LAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwkJLmZsYWdzID0g MCwKKwl9LCB7CisJCS5pZCA9IFY0TDJfQ0lEX0dBTU1BLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9U WVBFX0lOVEVHRVIsCisJCS5uYW1lID0gIkdhbW1hIiwKKwkJLm1pbmltdW0gPSAweDAsCisJCS5t YXhpbXVtID0gMHgzZiwKKwkJLnN0ZXAgPSAweDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMHgyMCwK KwkJLmZsYWdzID0gMCwKKwl9CisjaWZkZWYgVjRMMl9DSURfU0hBUlBORVNTCisJICwgeworCQku aWQgPSBWNEwyX0NJRF9TSEFSUE5FU1MsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdF UiwKKwkJLm5hbWUgPSAiU2hhcnBuZXNzIiwKKwkJLm1pbmltdW0gPSAweDAsCisJCS5tYXhpbXVt ID0gMHhmLAorCQkuc3RlcCA9IDB4MSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAweDgsCisJCS5mbGFn cyA9IDAsCisJfQorI2VuZGlmCit9OworCitzdHJ1Y3QgZW0yOHh4X291dHB1dF9mbXQgZW0yOHh4 X291dF9mbXRbXT17CisJeworCQkuZm10ID0geworCQkJLmluZGV4ID0gMCwKKwkJCS50eXBlID0g VjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCQkJLmRlc2NyaXB0aW9uID0gIlkwLVUtWTEt ViwgMTYgYnBwIiwKKwkJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ZVVlWLAorCQl9LAor CQkuY29uZmlnID0gMHgxNAorCX0sIHsKKwkJLmZtdCA9IHsKKwkJCS5pbmRleCA9IDEsCisJCQku dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCS5kZXNjcmlwdGlvbiA9ICJZ MS1VLVkwLVYsIDE2IGJwcCIsCisJCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWVVZMSwK KwkJfSwKKwkJLmNvbmZpZyA9IDB4MTUKKwl9LCB7CisJCS5mbXQgPSB7CisJCQkuaW5kZXggPSAy LAorCQkJLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkuZGVzY3JpcHRp b24gPSAiWVVWNDExLCAxMiBicHAiLAorCQkJLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1k0 MVAKKwkJfSwKKwkJLmNvbmZpZyA9IDB4MTgKKwl9LCB7CisJCS5mbXQgPSB7CisJCQkuaW5kZXgg PSAzLAorCQkJLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkuZGVzY3Jp cHRpb24gPSAiWVVWMjExLCA4IGJwcCIsCisJCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRf WVVWMjExCisJCX0sCisJCS5jb25maWcgPSAweDEwCisJfSwgeworCQkuZm10ID0geworCQkJLmlu ZGV4ID0gNCwKKwkJCS50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCQkJLmRl c2NyaXB0aW9uID0gIlJHQiwgMTYgYnBwLCA2LTUtNiIsIC8qIDE2ICE9IDY1Ni0+MTcgKi8KKwkJ CS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9SR0I1NjUgICAvKiA1NjUtPjE2ICovCisJCX0s CisJCS5jb25maWcgPSAweDA0LAorCX0sIHsKKwkJLmZtdCA9IHsKKwkJCS5pbmRleCA9IDUsCisJ CQkudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCS5kZXNjcmlwdGlvbiA9 ICJSR0IsIDhiaXQgUkdSRyIsCisJCQkucGl4ZWxmb3JtYXQgPSAxIC8qIFRPRE8gKi8KKwkJfSwK KwkJLmNvbmZpZyA9IDB4MDAKKwl9LCB7CisJCS5mbXQgPSB7CisJCQkuaW5kZXggPSA2LAorCQkJ LnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkuZGVzY3JpcHRpb24gPSAi UkdCLCA4Yml0IEdSR1IiLAorCQkJLnBpeGVsZm9ybWF0ID0gMiAvKiBUT0RPICovCisJCX0sCisJ CS5jb25maWcgPSAweDAxCisJfSwgeworCQkuZm10ID0geworCQkJLmluZGV4ID0gNywKKwkJCS50 eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCQkJLmRlc2NyaXB0aW9uID0gIlJH QiwgOGJpdCBHQkdCIiwKKwkJCS5waXhlbGZvcm1hdCA9IDMgLyogVE9ETyAqLworCQl9LAorCQku Y29uZmlnID0gMHgwMgorCX0sIHsKKwkJLmZtdCA9IHsKKwkJCS5pbmRleCA9IDgsCisJCQkudHlw ZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCS5kZXNjcmlwdGlvbiA9ICJSR0Is IDhiaXQgQkdCRyIsCisJCQkucGl4ZWxmb3JtYXQgPSA0IC8qIFRPRE8gKi8KKwkJfSwKKwkJLmNv bmZpZyA9IDB4MDMKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZW0yOHh4X3Vz Yl9kcml2ZXI7CisKK3N0YXRpYyBERUZJTkVfTVVURVgoZW0yOHh4X3N5c2ZzX2xvY2spOworc3Rh dGljIERFQ0xBUkVfUldTRU0oZW0yOHh4X2Rpc2Nvbm5lY3QpOworCisvKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogZGVs YXllZCByZXF1ZXN0X21vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ki8KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLCA2LCAxNykKKyNp ZiBkZWZpbmVkKENPTkZJR19NT0RVTEVTKSAmJiBkZWZpbmVkKE1PRFVMRSkKK3N0YXRpYyB2b2lk IHJlcXVlc3RfbW9kdWxlX2FzeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1 Y3QgZW0yOHh4ICpkZXYgPSBjb250YWluZXJfb2Yod29yaywKKwkJCXN0cnVjdCBlbTI4eHgsCisJ CQlyZXF1ZXN0X21vZHVsZV93ay53b3JrKTsKKworCWlmICgoZGV2LT5zdGF0ZSAmIERFVl9ESVND T05ORUNURUQpIHx8CisJCShkZXYtPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpKQorCQlnb3Rv IG91dDsKKworCWlmIChkZXYtPmRldl9tb2RlcyAmIEVNMjhYWF9BVURJTykKKwkJcmVxdWVzdF9t b2R1bGUoImVtMjh4eC1hdWRpbyIpOworCisJaWYgKChkZXYtPmRldl9tb2RlcyAmIEVNMjhYWF9E VkJUIHx8IGRldi0+ZGV2X21vZGVzICYgRU0yOFhYX0FUU0MgfHwgZGV2LT5kZXZfbW9kZXMgJiBF TTI4WFhfSVNEQikpCisJCXJlcXVlc3RfbW9kdWxlKCJlbTI4eHgtZHZiIik7CisKKwkvKiB1bmxv Y2sgYWxsIHRoZSBkZXZpY2Ugbm9kZXMgaGVyZSAqLworb3V0OgorCWRldi0+ZW0yOHh4X2FjcXVp cmUoZGV2LCBFTTI4WFhfTE9DSywgMCk7Cit9CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VS TkVMX1ZFUlNJT04oMiwgNSwgMCkKK3N0YXRpYyB2b2lkIHJlcXVlc3RfbW9kdWxlcyhzdHJ1Y3Qg ZW0yOHh4ICpkZXYpIHsKKwlkZXYtPmVtMjh4eF9hY3F1aXJlKGRldiwgRU0yOFhYX0xPQ0ssIDAp OworfQorI2Vsc2UKKy8qIHRoaXMgaXMgYSBiaXQgZmlzaHkgaGVyZSwgaWYgd2UnZCBkaXJlY3Rs eSB0cnkgdG8gbG9hZCB0aGUgbW9kdWxlIGhlcmUKKyAgIGl0IHdvdWxkIGVuZCB1cCBpbiBhIGRl YWRsb2NrIHNpbmNlIG1vZHByb2JlIGxvY2tzIHRoZSBlbTI4eHggbW9kdWxlLgorICAgV2hlbiBs b2FkaW5nIHRoZSBlbTI4ODAtZHZiIG1vZHVsZSBpdCBhbHNvIHRyaWVzIHRvIG9wZW4gdGhlIGVt Mjh4eCBtb2R1bGUKKyAgIGFuZCBpdCBnZXRzIHN0dWNrIGFuZCB3b24ndCByZXR1cm4sIHNvIGEg c21hbGwgd29ya2Fyb3VuZCBpcyB0byBzZXQgdXAKKyAgIGEgd29ya3F1ZXVlIGFuZCBydW4gbW9k cHJvYmUgZnJvbSBhbm90aGVyIHByb2Nlc3MKKworICAgdGhlIHByZXZpb3VzIGFwcHJvYWNoIHVz ZWQgdGhlIGdsb2JhbCB3b3JrcXVldWUsIGFsdGhvdWdoIHRoaXMgY291bGQgaGF2ZQorICAgbG9j a2VkIHVwIHRoZSBrZXlib2FyZCBpbnB1dCBzeXN0ZW0sIGN1cnJlbnRseSB3aGVuIHJ1bm5pbmcK KworICAgd2hpbGUgOjsgZG8gbW9kcHJvYmUgZW0yOHh4OyBybW1vZCBlbTI4eHgtZHZiOyBybW1v ZCBlbTI4eHgtYXVkaW87IHJtbW9kCisgICBlbTI4eHg7IGRvbmUKKworICAgdGhlIHVubG9hZGlu ZyBwcm9jZXNzIG1pZ2h0IGRlYWRsb2NrIHdpdGggdGhlIHJlcXVlc3QgdGhyZWFkLCB0aGUgcmVx dWVzdGluZy0gICBpbnNtb2QgbmVlZHMgdG8gZ2V0IGtpbGxlZCBtYW51YWxseSAuLi4odGhlICJi dWcvZmVhdHVyZSIgaXMgaW4gdGhlCisgICBsaW51eCBtb2R1bGUgY29kZS4uLikKKworICAgVGhp cyB3aG9sZSBpc3N1ZSBnb2VzIGJhY2sgZm9yIGEgdmVyeSBsb25nIHRpbWUgYWxyZWFkeSBhbmQg cXVpdGUgYSBmZXcKKyAgIHBlb3BsZSB3ZW50IG9uIHRoaXMgYmVmb3JlLi4uCisgKi8KKworc3Rh dGljIHZvaWQgcmVxdWVzdF9tb2R1bGVzKHN0cnVjdCBlbTI4eHggKmRldikKK3sKKyAgICAgICBz Y2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldi0+cmVxdWVzdF9tb2R1bGVfd2ssIG1zZWNzX3RvX2pp ZmZpZXMoNTApKTsKK30KKyNlbmRpZgorI2Vsc2UKK3N0YXRpYyB2b2lkIHJlcXVlc3RfbW9kdWxl cyhzdHJ1Y3QgZW0yOHh4ICpkZXYpIHsKKwlkZXYtPmVtMjh4eF9hY3F1aXJlKGRldiwgRU0yOFhY X0xPQ0ssIDApOworfQorI2VuZGlmCisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKiAg djRsMiBpbnRlcmZhY2UgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKworLyoKKyAqIGVtMjh4eF9jb25maWcoKQorICogaW5pdHMgcmVnaXN0ZXJzIHdpdGggc2Fu ZSBkZWZhdWx0cworICovCitpbnQgZW0yOHh4X2NvbmZpZyhzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7 CisJZW0yOHh4X2F1ZGlvX3VzYl9tdXRlKGRldiwgRU0yOFhYX01VVEVEKTsKKwlkZXYtPm11dGUg PSAxOwkJLyogbWF5YmUgbm90IHRoZSByaWdodCBwbGFjZS4uLiAqLworCWRldi0+dm9sdW1lID0g MHgxZjsKKwllbTI4eHhfYXVkaW9fYW5hbG9nX3NldChkZXYpOworCWVtMjh4eF9hdWRpb19hbmFs b2dfc2V0dXAoZGV2KTsKKwllbTI4eHhfb3V0Zm10X3NldF95dXY0MjIoZGV2KTsKKwllbTI4eHhf Y29sb3JsZXZlbHNfc2V0X2RlZmF1bHQoZGV2KTsKKwllbTI4eHhfY29tcHJlc3Npb25fZGlzYWJs ZShkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBlbTI4eHhfY29uZmlnX2kyYygpCisg KiBjb25maWd1cmUgaTJjIGF0dGFjaGVkIGRldmljZXMKKyAqIFRPRE86IGFkZCBNU0lfVk9YX1VT Ql8yIHN1cHBvcnQgYWdhaW4hCisgKgorICovCit2b2lkIGVtMjh4eF9jb25maWdfaTJjKHN0cnVj dCBlbTI4eHggKmRldikKK3sKKwlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOworCisJcm91dGUu aW5wdXQgPSBJTlBVVChkZXYtPmN0bF9pbnB1dCktPnZtdXg7CisJcm91dGUub3V0cHV0ID0gMDsK KworCS8qIGNvbmZpZ3VyZSBkZWNvZGVyICovCisJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2 LCBWSURJT0NfSU5UX1JFU0VULCAwKTsKKwllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJ RElPQ19JTlRfU19WSURFT19ST1VUSU5HLCAmcm91dGUpOworCWVtMjh4eF9pMmNfY2FsbF9jbGll bnRzKGRldiwgVklESU9DX1NUUkVBTU9OLCBOVUxMKTsKKworfQorCisvKgorICogZW0yOHh4X2Vt cHR5X2ZyYW1lcXVldWVzKCkKKyAqIHByZXBhcmUgcXVldWVzIGZvciBpbmNvbWluZyBhbmQgb3V0 Z29pbmcgZnJhbWVzCisgKi8KK3N0YXRpYyB2b2lkIGVtMjh4eF9lbXB0eV9mcmFtZXF1ZXVlcyhz dHJ1Y3QgZW0yOHh4ICpkZXYsIGludCB0eXBlKQoreworCXUzMiBpOworCS8qIEZJWE1FIHBsZWFz ZSB2ZXJpZnkgRU0yOFhYX05VTV9GUkFNRVMgKi8KKworCWlmICh0eXBlID09IEVNMjhYWF9WQkkp IHsKKwkJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmJpX2lucXVldWUpOworCQlJTklUX0xJU1RfSEVB RCgmZGV2LT52Ymlfb3V0cXVldWUpOworCQlmb3IgKGkgPSAwOyBpIDwgRU0yOFhYX05VTV9GUkFN RVM7IGkrKykgeworCQkJZGV2LT52YmlfZnJhbWVbaV0uc3RhdGUgPSBGX1VOVVNFRDsKKwkJCWRl di0+dmJpX2ZyYW1lW2ldLmJ1Zi5ieXRlc3VzZWQgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJSU5J VF9MSVNUX0hFQUQoJmRldi0+aW5xdWV1ZSk7CisJCUlOSVRfTElTVF9IRUFEKCZkZXYtPm91dHF1 ZXVlKTsKKwkJZm9yIChpID0gMDsgaSA8IEVNMjhYWF9OVU1fRlJBTUVTOyBpKyspIHsKKwkJCWRl di0+ZnJhbWVbaV0uc3RhdGUgPSBGX1VOVVNFRDsKKwkJCWRldi0+ZnJhbWVbaV0uYnVmLmJ5dGVz dXNlZCA9IDA7CisJCX0KKwl9CisKK30KKworc3RhdGljIHZvaWQgdmlkZW9fbXV4KHN0cnVjdCBl bTI4eHggKmRldiwgaW50IGluZGV4KQoreworCWludCBpbnB1dCA9IElOUFVUKGluZGV4KS0+dm11 eDsKKwlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOworCWludCBhaW5wdXQ7CisKKwlyb3V0ZS5p bnB1dCA9IElOUFVUKGluZGV4KS0+dm11eDsKKwlyb3V0ZS5vdXRwdXQgPSAwOworCisJZGV2LT5j dGxfaW5wdXQgPSBpbmRleDsKKwlkZXYtPmN0bF9haW5wdXQgPSBJTlBVVChpbmRleCktPmFtdXg7 CisJZGV2LT5jdGxfYW1peCA9IElOUFVUKGluZGV4KS0+YW1peDsKKworCWVtMjh4eF9pMmNfY2Fs bF9jbGllbnRzKGRldiwgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkcsICZyb3V0ZSk7CisKKwll bTI4eHhfdmlkZW9kYmcoIlNldHRpbmcgaW5wdXQgaW5kZXggPSAlZCwgdm11eCA9ICVkLCBhbXV4 ID0gJWRcbiIsCisJCQlpbmRleCwgaW5wdXQsIGRldi0+Y3RsX2FpbnB1dCk7CisKKwlpZiAoZGV2 LT5oYXNfbXNwMzR4eCkgeworCQlpZiAoZGV2LT5pMnNfc3BlZWQpCisJCQllbTI4eHhfaTJjX2Nh bGxfY2xpZW50cyhkZXYsIFZJRElPQ19JTlRfSTJTX0NMT0NLX0ZSRVEsCisJCQkJCSZkZXYtPmky c19zcGVlZCk7CisJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX1NfQVVESU8s ICZkZXYtPmN0bF9haW5wdXQpOworCQlhaW5wdXQgPSBFTTI4WFhfQVVESU9fU1JDX1RVTkVSOwor CQllbTI4eHhfYXVkaW9fc291cmNlKGRldiwgYWlucHV0KTsKKwl9IGVsc2UgeworCQlzd2l0Y2gg KGRldi0+bW9kZWwpIHsKKwkJY2FzZSBFTTI4NjBfQk9BUkRfR0FETUVJX1VUVjMzMDoKKwkJewor CQkJdTggdmFsOworCQkJc3dpdGNoIChkZXYtPmN0bF9haW5wdXQpIHsKKwkJCQljYXNlIDA6CisJ CQkJCXZhbCA9IDB4ZmQ7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMToKKwkJCQkJdmFsID0gMHhm YzsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdCA6CisJCQkJCXZhbCA9IDB4ZmU7CisJCQkJCWJy ZWFrOworCQkJfQorCQkJaWYgKGRldi0+bXV0ZSkKKwkJCQl2YWwgPSAweGZlOworCisJCQllbTI4 eHhfd3JpdGVfcmVncyhkZXYsIDB4MDgsICZ2YWwsIDEpOworCQkJYnJlYWs7CisJCX0KKwkJZGVm YXVsdCA6CisJCQlzd2l0Y2ggKGRldi0+Y3RsX2FpbnB1dCkgeworCQkJY2FzZSAwOgorCQkJCWFp bnB1dCA9IEVNMjhYWF9BVURJT19TUkNfVFVORVI7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0Ogor CQkJCWFpbnB1dCA9IEVNMjhYWF9BVURJT19TUkNfTElORTsKKwkJCX0KKwkJCWVtMjh4eF9hdWRp b19zb3VyY2UoZGV2LCBhaW5wdXQpOworCQkJYnJlYWs7CisJCX0KKwl9CisJZW0yOHh4X2F1ZGlv X3NldF9taXhlcihkZXYsIGRldi0+Y3RsX2FtaXgpOworfQorCisKK3N0YXRpYyBpbnQgZW0yOHh4 X2FjcXVpcmUoc3RydWN0IGVtMjh4eCAqZGV2LCBpbnQgbW9kZSwgaW50IGxvY2spCit7CisJaW50 IHJldCA9IDA7CisKKwlpZiAoZGV2LT5tb2RlX2xvY2sgJiYgbW9kZSAhPSBFTTI4WFhfTE9DSykK KwkJcmV0dXJuIC1FQlVTWTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgRU0yOFhYX0xPQ0s6 CisJCWlmIChsb2NrKQorCQkJZGV2LT5tb2RlX2xvY2sgPSAxOworCQllbHNlCisJCQlkZXYtPm1v ZGVfbG9jayA9IDA7CisJCWJyZWFrOworCS8qIHJhZGlvIGlzIGFsbG93ZWQgaWYgVFYgYW5kIERW QiBpcyBub3QgaW4gdXNlICovCisJY2FzZSBFTTI4WFhfUkFESU86CisJCWlmIChsb2NrKSB7CisJ CQlpZiAoZGV2LT5mZV91c2VyIHx8IGRldi0+dmlkZW9fdXNlciB8fCBkZXYtPnZiaV91c2VyKQor CQkJCXJldCA9IC1FQlVTWTsKKwkJCWVsc2UKKwkJCQlkZXYtPnJhZGlvX3VzZXIrKzsKKwkJfSBl bHNlCisJCQlkZXYtPnJhZGlvX3VzZXItLTsKKwkJYnJlYWs7CisJLyogdmlkZW8sIHZiaSBhbmQg YW5hbG9ndWUgYXVkaW8gYXJlIGFsbG93ZWQgYXQgdGhlIHNhbWUgdGltZSAqLworCWNhc2UgRU0y OFhYX1ZJREVPOgorCQlpZiAobG9jaykgeworCQkJaWYgKGRldi0+ZmVfdXNlciB8fCBkZXYtPnJh ZGlvX3VzZXIpCisJCQkJcmV0ID0gLUVCVVNZOworCQkJZWxzZQorCQkJCWRldi0+dmlkZW9fdXNl cisrOworCQl9IGVsc2UKKwkJCWRldi0+dmlkZW9fdXNlci0tOworCQlicmVhazsKKwljYXNlIEVN MjhYWF9WQkk6CisJCWlmIChsb2NrKSB7CisJCQlpZiAoZGV2LT5mZV91c2VyIHx8IGRldi0+cmFk aW9fdXNlcikKKwkJCQlyZXQgPSAtRUJVU1k7CisJCQllbHNlCisJCQkJZGV2LT52YmlfdXNlcisr OworCQl9IGVsc2UKKwkJCWRldi0+dmJpX3VzZXItLTsKKwkJYnJlYWs7CisJY2FzZSBFTTI4WFhf RFZCVDoKKwkJaWYgKGxvY2spICB7CisJCQlpZiAoZGV2LT5yYWRpb191c2VyIHx8IGRldi0+dmlk ZW9fdXNlciB8fCBkZXYtPnZiaV91c2VyKQorCQkJCXJldCA9IC1FQlVTWTsKKwkJCWVsc2UKKwkJ CQlkZXYtPmZlX3VzZXIrKzsKKwkJfSBlbHNlIHsKKwkJCWRldi0+ZmVfdXNlci0tOworCQl9CisJ CWJyZWFrOworCWNhc2UgRU0yOFhYX0FUU0M6CisJCWlmIChsb2NrKSB7CisJCQlpZiAoZGV2LT5y YWRpb191c2VyIHx8IGRldi0+dmlkZW9fdXNlciB8fCBkZXYtPnZiaV91c2VyKQorCQkJCXJldCA9 IC1FQlVTWTsKKwkJCWVsc2UKKwkJCQlkZXYtPmZlX3VzZXIrKzsKKwkJfSBlbHNlCisJCQlkZXYt PmZlX3VzZXItLTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisK KwlyZXR1cm4gcmV0OworfQorCisvKgorICogZW0yOHh4X3Y0bDJfb3BlbigpCisgKiBpbml0cyB0 aGUgZGV2aWNlIGFuZCBzdGFydHMgaXNvYyB0cmFuc2ZlcgorICovCisKK3N0YXRpYyBpbnQgZW0y OHh4X3Y0bDJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sK KwlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOworCWludCBlcnJDb2RlID0gMDsKKwlpbnQgbW9k ZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCWludCB0eXBlID0gMDsKKwlpbnQgcmV0OworCXN0 cnVjdCBlbTI4eHggKmgsICpkZXYgPSBOVUxMOworCXN0cnVjdCBlbTI4eHhfZmggKmZoOworCXN0 cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisKKwlsaXN0X2Zvcl9lYWNoKGxpc3QsICZlbTI4eHhfZGV2 bGlzdCkgeworCQloID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgZW0yOHh4LCBkZXZsaXN0KTsK KwkJaWYgKGggPT0gTlVMTCkgeworCQkJcHJpbnRrKCJlbTI4eHgtZGV2bGlzdCBlbXB0eVxuIik7 CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCWlmIChoLT52ZGV2ICYmCisJCQkJaC0+dmRl di0+bWlub3IgPT0gbWlub3IpIHsKKwkJCWRldiAgPSBoOworCQkJdHlwZSA9IEVNMjhYWF9WSURF TzsKKwkJCW1vZGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKKwkJCWJyZWFrOworCQl9CisKKwkJ aWYgKChoLT5kZXZfbW9kZXMgJiBFTTI4WFhfUkFESU8pICYmCisJCQkJaC0+cmRldiAmJgorCQkJ CWgtPnJkZXYtPm1pbm9yID09IG1pbm9yKSB7CisJCQlkZXYgPSBoOworCQkJdHlwZSA9IEVNMjhY WF9SQURJTzsKKwkJCW1vZGUgPSBWNEwyX1RVTkVSX1JBRElPOworCQkJYnJlYWs7CisJCX0KKwor CQlpZiAoKGgtPmRldl9tb2RlcyAmIEVNMjhYWF9WQkkpICYmCisJCQkJaC0+dmJpX2RldiAmJgor CQkJCWgtPnZiaV9kZXYtPm1pbm9yID09IG1pbm9yKSB7CisJCQlkZXYgID0gaDsKKwkJCXR5cGUg PSBFTTI4WFhfVkJJOworCQkJbW9kZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCQkJYnJlYWs7 CisJCX0KKwl9CisKKwlpZiAoTlVMTCA9PSBkZXYpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyJkZXZp Y2Ugc3RydWN0IGlzIG5vdCBzZXRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXQg PSBkZXYtPmVtMjh4eF9hY3F1aXJlKGRldiwgdHlwZSwgMSk7CisKKwlpZiAocmV0ICE9IDApCisJ CXJldHVybiByZXQ7CisKKwlpZiAoZGV2LT5oYXNfaW50dHVuZXIpIHsKKwkJaWYgKGRldi0+bW9k ZSAhPSBtb2RlKSB7CisJCQlpbnQgYXJnOworCisJCQlkZXYtPm1vZGUgPSBtb2RlOworCQkJYXJn ID0gRU0yOFhYX1JFR19PTjsKKworCQkJZGV2LT5lbTI4eHhfZ3Bpb19jb250cm9sKGRldiwgRU0y OFhYX0FOQUxPR19PTiwgJmFyZyk7CisJCQlkZXYtPmVtMjh4eF9ncGlvX2NvbnRyb2woZGV2LCBF TTI4WFhfTEVEMV9PTiwgJmFyZyk7CisJCQlkZXYtPmVtMjh4eF9ncGlvX2NvbnRyb2woZGV2LCBF TTI4WFhfVFVORVIxX09OLCAmYXJnKTsKKwkJCWFyZyA9IEVNMjhYWF9SRUdfT0ZGOworCQkJZGV2 LT5lbTI4eHhfZ3Bpb19jb250cm9sKGRldiwgRU0yOFhYX1RTMV9PTiwgJmFyZyk7CisJCQlkZXYt PmVtMjh4eF9ncGlvX2NvbnRyb2woZGV2LCBFTTI4WFhfREVDT0RFUl9TTEVFUCwgJmFyZyk7CisJ CQltZGVsYXkoMTAwKTsKKworCQkJZW0yOHh4X2NvbmZpZyhkZXYpOworCQkJZW0yOHh4X2NvbmZp Z19pMmMoZGV2KTsKKwkJCWlmIChkZXYtPm1vZGUgPT0gVjRMMl9UVU5FUl9BTkFMT0dfVFYpCisJ CQkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfU19TVEQsCisJCQkJCQkmZGV2 LT50dm5vcm0tPmlkKTsKKworCQkJc3dpdGNoIChkZXYtPnR1bmVyX3R5cGUpIHsKKwkJCWNhc2Ug VFVORVJfWENFSVZFX1hDMzAyODoKKwkJCXsKKwkJCQlzdHJ1Y3QgeGMzMDI4X2luaXRfY21kIGNt ZDsKKworCQkJCWlmIChkZXYtPnR1bmVyID09IE5VTEwpIHsKKwkJCQkJcHJpbnRrKEtFUk5fSU5G TyJ0dW5lciBpcyBub3QgIgorCQkJCQkJCSJhdHRhY2hlZFxuIik7CisJCQkJCWRldi0+ZW0yOHh4 X2FjcXVpcmUoZGV2LCB0eXBlLCAwKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJ CXN3aXRjaCAoZGV2LT5tb2RlKSB7CisJCQkJY2FzZSBWNEwyX1RVTkVSX1JBRElPOgorCQkJCQkv KiB0aGlzIGlzIG1vcmVvdmVyIHRvIHN3aXRjaCB0aGUKKwkJCQkJICAgZGVjb2RlciB0byBGTSAq LworCisJCQkJCWNtZC5uZXdfdHZfbW9kZV9wdHIgPQorCQkJCQkJZGV2LT5mbW5vcm0tPnR2X21v ZGU7CisJCQkJCWNtZC5uZXdfY2hhbm5lbF9tYXBfcHRyID0KKwkJCQkJCWRldi0+Zm1ub3JtLT5j aGFubmVsbWFwOworCQkJCQlpZiAoZGV2LT50dW5lcikKKwkJCQkJCWRldi0+dHVuZXItPnR1bmVy X2NtZCgKKwkJCQkJCQlkZXYtPnR1bmVyLAorCQkJCQkJCVhDMzAyOF9JTklUX1RVTkVSLAorCQkJ CQkJCSZjbWQpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFY0TDJfVFVORVJfQU5BTE9HX1RWOgor CQkJCQljbWQubmV3X3R2X21vZGVfcHRyID0KKwkJCQkJCWRldi0+dHZub3JtLT50dl9tb2RlOwor CQkJCQljbWQubmV3X2NoYW5uZWxfbWFwX3B0ciA9CisJCQkJCQlkZXYtPnR2bm9ybS0+Y2hhbm5l bG1hcDsKKwkJCQkJaWYgKGRldi0+dHVuZXIgJiYgZGV2LT50dW5lci0+dHVuZXJfY21kKQorCQkJ CQkJZGV2LT50dW5lci0+dHVuZXJfY21kKAorCQkJCQkJCWRldi0+dHVuZXIsCisJCQkJCQkJWEMz MDI4X0lOSVRfVFVORVIsCisJCQkJCQkJJmNtZCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQli cmVhazsKKwkJCX0KKwkJCWNhc2UgVFVORVJfWENFSVZFX1hDNTAwMDoKKwkJCXsKKwkJCQlpZiAo ZGV2LT50dW5lciA9PSBOVUxMKSB7CisJCQkJCXByaW50aygidHVuZXIgaXMgbm90IGF0dGFjaGVk XG4iKTsKKwkJCQkJZGV2LT5lbTI4eHhfYWNxdWlyZShkZXYsIHR5cGUsIDApOworCQkJCQlyZXR1 cm4gLUVJTlZBTDsKKwkJCQl9CisKKwkJCQlpZiAoZGV2LT50dW5lciAmJiBkZXYtPnR1bmVyLT50 dW5lcl9jbWQpCisJCQkJCWRldi0+dHVuZXItPnR1bmVyX2NtZChkZXYtPnR1bmVyLAorCQkJCQkJ CVhDNTAwMF9JTklUX1RVTkVSLAorCQkJCQkJCU5VTEwpOworCQkJCXN3aXRjaCAoZGV2LT5tb2Rl KSB7CisJCQkJY2FzZSBWNEwyX1RVTkVSX1JBRElPOgorCQkJCXsKKwkJCQkJc3RydWN0IHhjX3N0 ZF9jb25mIGNtZDsKKwkJCQkJY21kLmluZGV4ID0gZGV2LT5mbW5vcm0tPmluZGV4OworCQkJCQlk ZXYtPnR1bmVyLT50dW5lcl9jbWQoZGV2LT50dW5lciwKKwkJCQkJCQlYQzUwMDBfU0VUX01PREUs ICZjbWQpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJY2FzZSBWNEwyX1RVTkVSX0FOQUxPR19U VjoKKwkJCQl7CisJCQkJCXN0cnVjdCB4Y19zdGRfY29uZiBjbWQ7CisJCQkJCWNtZC5pbmRleCA9 IGRldi0+dHZub3JtLT5pbmRleDsKKwkJCQkJZGV2LT50dW5lci0+dHVuZXJfY21kKGRldi0+dHVu ZXIsCisJCQkJCQkJWEM1MDAwX1NFVF9NT0RFLCAmY21kKTsKKwkJCQkJYnJlYWs7CisJCQkJfQor CQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJCX0KKwkJCWlmIChkZXYtPm1vZGUgPT0gVjRMMl9U VU5FUl9SQURJTykgeworCQkJCXN0cnVjdCB2NGwyX3JvdXRpbmcgYXJvdXRpbmc7CisJCQkJYXJv dXRpbmcuaW5wdXQgPSBDWDI1ODQzX1JBRElPOworCQkJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRz KGRldiwKKwkJCQkJCVZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLAorCQkJCQkJJmFyb3V0aW5n KTsKKwkJCX0KKworCQl9CisJfQorCisJZmggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZW0yOHh4 X2ZoKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWZoKSB7CisJCXByaW50ayhLRVJOX0lORk8iZW0y OHh4LXZpZGVvLmM6IE91dCBvZiBtZW1vcnlcbiIpOworCQlkZXYtPmVtMjh4eF9hY3F1aXJlKGRl diwgdHlwZSwgMCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlmaC0+dHlwZSA9IHR5cGU7CisJ ZmgtPmRldiA9IGRldjsKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBmaDsKKworCWVtMjh4eF92aWRl b2RiZygib3BlbiBtaW5vciA9ICVkIHR5cGUgPSAlcyB1c2VycyA9ICVkXG4iLAorCQkJCW1pbm9y LCB2NGwyX3R5cGVfbmFtZXNbZGV2LT50eXBlXSwgZGV2LT51c2Vycyk7CisKKwlpZiAoIWRvd25f cmVhZF90cnlsb2NrKCZlbTI4eHhfZGlzY29ubmVjdCkpIHsKKwkJZGV2LT5lbTI4eHhfYWNxdWly ZShkZXYsIHR5cGUsIDApOworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKworCWRldi0+dXNl cnMrKzsKKwlpZiAoZGV2LT52YmlfdXNlciA9PSAxICYmIGZoLT50eXBlID09IEVNMjhYWF9WQkkp CisJCWRldi0+dmJpX2J5dGVzcmVhZCA9IDA7CisKKwlpZiAoKGZoLT50eXBlID09IEVNMjhYWF9W SURFTyB8fCBmaC0+dHlwZSA9PSBFTTI4WFhfVkJJKSAmJgorCQkJZGV2LT51c2VycyA9PSAxKSB7 CisKKwkJZW0yOHh4X3NldF9hbHRlcm5hdGUoZGV2KTsKKworCQlkZXYtPndpZHRoID0gbm9ybV9t YXh3KGRldik7CisJCWRldi0+aGVpZ2h0ID0gbm9ybV9tYXhoKGRldik7CisJCWRldi0+ZnJhbWVf c2l6ZSA9IGRldi0+d2lkdGggKiBkZXYtPmhlaWdodCAqIDI7CisJCWRldi0+dmJpX2ZyYW1lX3Np emUgPSA3MjAgKiAyICoKKwkJCShkZXYtPnR2bm9ybS0+dmJpX2NvdW50XzAgKyBkZXYtPnR2bm9y bS0+dmJpX2NvdW50XzEpOworCQlkZXYtPmZpZWxkX3NpemUgPSBkZXYtPmZyYW1lX3NpemUgPj4g MTsKKwkJZGV2LT52YmlfZmllbGRfc2l6ZSA9IGRldi0+dmJpX2ZyYW1lX3NpemUgPj4gMTsKKwkJ ZGV2LT5ieXRlc3BlcmxpbmUgPSBkZXYtPndpZHRoICogMjsKKwkJZGV2LT52YmlfYnl0ZXNwZXJs aW5lID0gZGV2LT53aWR0aCAqIDI7CisJCWRldi0+aHNjYWxlID0gMDsKKwkJZGV2LT52c2NhbGUg PSAwOworCQlkZXYtPnZpZGVvX2J5dGVzcmVhZCA9IDA7CisJCWRldi0+dmJpX2J5dGVzcmVhZCA9 IDA7CisJCWRldi0+dmJpX2Ryb3BieXRlcyA9IDA7CisKKwkJZGV2LT52YmlfZnJhbWVfY3VycmVu dCA9IE5VTEw7CisJCWRldi0+ZnJhbWVfY3VycmVudCA9IE5VTEw7CisKKwkJZW0yOHh4X2NhcHR1 cmVfc3RhcnQoZGV2LCAxKTsKKwkJZW0yOHh4X3Jlc29sdXRpb25fc2V0KGRldik7CisKKwkJLyog c3RhcnQgdGhlIHRyYW5zZmVyICovCisJCWVyckNvZGUgPSBlbTI4eHhfaW5pdF9pc29jKGRldik7 CisKKwkJZW0yOHh4X2VtcHR5X2ZyYW1lcXVldWVzKGRldiwgRU0yOFhYX1ZCSSk7CisJCWVtMjh4 eF9lbXB0eV9mcmFtZXF1ZXVlcyhkZXYsIEVNMjhYWF9WSURFTyk7CisJCWlmIChlcnJDb2RlKSB7 CisJCQlkZXYtPnVzZXJzLS07CisJCQlnb3RvIGVycjsKKwkJfQorCQlkZXYtPnZpZGVvX2lvID0g SU9fTk9ORTsKKwkJZGV2LT52YmlfaW8gPSBJT19OT05FOworCQlkZXYtPnN0cmVhbSA9IFNUUkVB TV9PRkY7CisJCWRldi0+bnVtX2ZyYW1lcyA9IDA7CisJCWRldi0+dmJpX251bV9mcmFtZXMgPSAw OworCQlkZXYtPnN0YXRlIHw9IERFVl9JTklUSUFMSVpFRDsKKwkJZGV2LT5zdGF0ZSAmPSB+REVW X01JU0NPTkZJR1VSRUQ7CisJfQorCXVwX3JlYWQoJmVtMjh4eF9kaXNjb25uZWN0KTsKKwlyZXR1 cm4gMDsKK2VycjoKKwl1cF9yZWFkKCZlbTI4eHhfZGlzY29ubmVjdCk7CisJZGV2LT5lbTI4eHhf YWNxdWlyZShkZXYsIHR5cGUsIDApOworCXJldHVybiBlcnJDb2RlOworfQorCisvKgorICogZW0y OHh4X3JlYWxlYXNlX3Jlc291cmNlcygpCisgKiB1bnJlZ2lzdGVycyB0aGUgdjRsMiwgaTJjIGFu ZCB1c2IgZGV2aWNlcworICogY2FsbGVkIHdoZW4gdGhlIGRldmljZSBnZXRzIGRpc2NvbmVjdGVk IG9yIGF0IG1vZHVsZSB1bmxvYWQKKyovCitzdGF0aWMgdm9pZCBlbTI4eHhfcmVsZWFzZV9yZXNv dXJjZXMoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCW11dGV4X2xvY2soJmVtMjh4eF9zeXNmc19s b2NrKTsKKworCWxpc3RfZGVsKCZkZXYtPmRldmxpc3QpOworCWlmIChkZXYtPmRldl9tb2RlcyZF TTI4WFhfVklERU8pIHsKKwkJZW0yOHh4X2luZm8oImRpc2Nvbm5lY3RpbmcgJXNcbiIsIGRldi0+ dmRldi0+bmFtZSk7CisJCWVtMjh4eF9pbmZvKCJWNEwyIFZJREVPIGRldmljZXMgL2Rldi92aWRl byVkIGRlcmVnaXN0ZXJlZFxuIiwKKwkJCQlkZXYtPnZkZXYtPm51bSk7CisJCXZpZGVvX3VucmVn aXN0ZXJfZGV2aWNlKGRldi0+dmRldik7CisJCWlmIChkZXYtPmRldl9tb2RlcyAmIEVNMjhYWF9W QkkpIHsKKwkJCWVtMjh4eF9pbmZvKCJWNEwyIFZCSSBkZXZpY2VzIC9kZXYvdmJpJWQgIgorCQkJ CSJkZXJlZ2lzdGVyZWRcbiIsCisJCQkJCWRldi0+dmJpX2Rldi0+bnVtKTsKKwkJCXZpZGVvX3Vu cmVnaXN0ZXJfZGV2aWNlKGRldi0+dmJpX2Rldik7CisJCX0KKwl9CisJaWYgKGRldi0+ZGV2X21v ZGVzICYgRU0yOFhYX1JBRElPKQorCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnJkZXYp OworCisJZW0yOHh4X2kyY191bnJlZ2lzdGVyKGRldik7CisJdXNiX3B1dF9kZXYoZGV2LT51ZGV2 KTsKKwltdXRleF91bmxvY2soJmVtMjh4eF9zeXNmc19sb2NrKTsKKworCQkKKwkvKiBNYXJrIGRl dmljZSBhcyB1bnVzZWQgKi8KKwllbTI4eHhfZGV2dXNlZCAmPSB+KDE8PGRldi0+ZGV2bm8pOwor Cit9CisKKy8qCisgKiBlbTI4eHhfdjRsMl9jbG9zZSgpCisgKiBzdG9wcyBzdHJlYW1pbmcgYW5k IGRlYWxsb2NhdGVzIGFsbCByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IHRoZQorICogdjRsMiBjYWxs cyBhbmQgaW9jdGxzCisgKi8KK3N0YXRpYyBpbnQgZW0yOHh4X3Y0bDJfY2xvc2Uoc3RydWN0IGlu b2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IGVyckNvZGU7CisJc3RydWN0 IGVtMjh4eF9maCAqZmg7CisJc3RydWN0IGVtMjh4eCAqZGV2OworCWludCByZXQgPSAwOworCisJ aWYgKGZpbHAtPnByaXZhdGVfZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCisJZmggPSBm aWxwLT5wcml2YXRlX2RhdGE7CisJZGV2ID0gZmgtPmRldjsKKwllbTI4eHhfdmlkZW9kYmcoInVz ZXJzID0gJWRcbiIsIGRldi0+dXNlcnMpOworCisJaWYgKChkZXYtPnZiaV91c2VyID09IDEgfHwg ZmgtPnJlYWRlciA9PSAxKSAmJgorCQkJZmgtPnR5cGUgPT0gRU0yOFhYX1ZCSSkgeworCQlpZiAo ZGV2LT52Ymlfc3RyZWFtID09IFNUUkVBTV9PTikgeworCQkJZW0yOHh4X3ZpZGVvZGJnKCJWSURJ T0NfU1RSRUFNT0ZGOiBpbnRlcnJ1cHRpbmcgIgorCQkJCQkic3RyZWFtXG4iKTsKKwkJCXJldCA9 IGVtMjh4eF9zdHJlYW1faW50ZXJydXB0KGRldiwgRU0yOFhYX1ZCSSk7CisJCQllbTI4eHhfZW1w dHlfZnJhbWVxdWV1ZXMoZGV2LCBFTTI4WFhfVkJJKTsKKwkJCWRldi0+dmJpX3N0cmVhbSA9IFNU UkVBTV9PRkY7CisJCX0KKwkJZGV2LT52YmlfaW8gPSBJT19OT05FOworCQlmaC0+cmVhZGVyID0g MDsKKwkJZGV2LT52YmlfcmVhZGVyID0gMDsKKwl9CisJaWYgKChkZXYtPnZpZGVvX3VzZXIgPT0g MSB8fCBmaC0+cmVhZGVyID09IDEpICYmCisJCQlmaC0+dHlwZSA9PSBFTTI4WFhfVklERU8pIHsK KworCQlpZiAoZGV2LT52aWRlb19zdHJlYW0gPT0gU1RSRUFNX09OKSB7CisJCQllbTI4eHhfdmlk ZW9kYmcoIlZJRElPQ19TVFJFQU1PRkY6IGludGVycnVwdGluZyAiCisJCQkJCSJzdHJlYW1cbiIp OworCQkJcmV0ID0gZW0yOHh4X3N0cmVhbV9pbnRlcnJ1cHQoZGV2LCBFTTI4WFhfVklERU8pOwor CQkJZW0yOHh4X2VtcHR5X2ZyYW1lcXVldWVzKGRldiwgRU0yOFhYX1ZJREVPKTsKKwkJCWRldi0+ dmlkZW9fc3RyZWFtID0gU1RSRUFNX09GRjsKKwkJfQorCQlmaC0+cmVhZGVyID0gMDsKKwkJZGV2 LT52aWRlb19yZWFkZXIgPSAwOworCQlkZXYtPnZpZGVvX2lvID0gSU9fTk9ORTsKKwl9CisKKwlk ZXYtPmVtMjh4eF9hY3F1aXJlKGRldiwgZmgtPnR5cGUsIDApOworCisJLyogYXNzdW1lIHRoYXQg YWxsIGhhbmRsZXMgYXJlIGNsb3NlZCAqLworCWlmIChkZXYtPnVzZXJzID09IDEpIHsKKwkJaW50 IGdwaW9fYXJnOworCQlkZXYtPnZpZGVvX3JlYWRlciA9IDA7CisJCWRldi0+dmJpX3JlYWRlciA9 IDA7CisKKwkJZW0yOHh4X3VuaW5pdF9pc29jKGRldik7CisJCWVtMjh4eF9yZWxlYXNlX2J1ZmZl cnMoZGV2LCBFTTI4WFhfVklERU8pOworCQllbTI4eHhfcmVsZWFzZV9idWZmZXJzKGRldiwgRU0y OFhYX1ZCSSk7CisKKwkJLyogdHVybiBvZmYgbGVkICovCisJCWdwaW9fYXJnID0gRU0yOFhYX1JF R19PRkY7CisJCWVtMjh4eF9ncGlvX2NvbnRyb2woZGV2LCBFTTI4WFhfTEVEMV9PTiwgICAgICAm Z3Bpb19hcmcpOworCQkvKiB0aGUgZGV2aWNlIGlzIGFscmVhZHkgZGlzY29ubmVjdCwgZnJlZSB0 aGUgcmVtYWluaW5nCisJCSAgIHJlc291cmNlcyAqLworCQlpZiAoZGV2LT5zdGF0ZSAmIERFVl9E SVNDT05ORUNURUQpIHsKKwkJCWVtMjh4eF9yZWxlYXNlX3Jlc291cmNlcyhkZXYpOworCQkJa2Zy ZWUoZGV2LT5hbHRfbWF4X3BrdF9zaXplKTsKKwkJCXR1bmVyX2NoaXBfZGV0YWNoKGRldi0+dHVu ZXIpOworCQkJa2ZyZWUoZGV2KTsKKwkJCWtmcmVlKGZoKTsKKwkJCXJldHVybiAwOworCQl9CisK KwkJLyogc2V0IGFsdGVybmF0ZSAwICovCisJCWRldi0+YWx0ID0gMDsKKwkJZW0yOHh4X3ZpZGVv ZGJnKCJzZXR0aW5nIGFsdGVybmF0ZSAwXG4iKTsKKwkJaWYgKGRldi0+YWRldiAmJiBkZXYtPmFk ZXYtPnVzZXJzID09IDApIHsKKwkJCWRldi0+YWx0ID0gMDsKKwkJCWVtMjh4eF92aWRlb2RiZygi c2V0dGluZyBhbHRlcm5hdGUgMFxuIik7CisJCQllcnJDb2RlID0gdXNiX3NldF9pbnRlcmZhY2Uo ZGV2LT51ZGV2LCBkZXYtPnVzYl9pbnRlcmZhY2UsIDApOworCQkJaWYgKGVyckNvZGUgPCAwKSB7 CisJCQkJZW0yOHh4X2VycmRldigiY2Fubm90IGNoYW5nZSBhbHRlcm5hdGUgIgorCQkJCQkibnVt YmVyIHRvIDAgKGVycm9yID0gJWkpXG4iLAorCQkJCQkJZXJyQ29kZSk7CisJCQl9CisJCX0KKwl9 CisJa2ZyZWUoZmgpOworCWRldi0+dXNlcnMtLTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGVfbnIo JmRldi0+b3BlbiwgMSk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGVtMjh4eF92NGwyX3Jl YWQoKQorICogd2lsbCBhbGxvY2F0ZSBidWZmZXJzIHdoZW4gY2FsbGVkIGZvciB0aGUgZmlyc3Qg dGltZQorICovCitzdGF0aWMgc3NpemVfdAorZW0yOHh4X3Y0bDJfcmVhZChzdHJ1Y3QgZmlsZSAq ZmlscCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAorCQkgbG9mZl90ICpmX3BvcykK K3sKKwlzdHJ1Y3QgZW0yOHh4X2ZyYW1lX3QgKmYsICppOworCXVuc2lnbmVkIGxvbmcgbG9ja19m bGFnczsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgZW0yOHh4X2ZoICpmaCA9IGZpbHAtPnByaXZh dGVfZGF0YTsKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBmaC0+ZGV2OworCisJLyogVE9ETzogZWl0 aGVyIGFkZCBzdXBwb3J0IGZvciBzbGljZWQgVkJJICovCisJaWYgKGZoLT50eXBlID09IFY0TDJf QlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFKSB7CisJCWVtMjh4eF92aWRlb2RiZygiVjRMMl9C VUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUgaXMgc2V0XG4iKTsKKwkJaWYgKGNvcHlfdG9fdXNl cihidWYsICIiLCAxKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMTsKKwl9CisKKwlp ZiAoZGV2LT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKKwkJZW0yOHh4X3ZpZGVvZGJnKCJk ZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoZGV2 LT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSB7CisJCWVtMjh4eF92aWRlb2RiZygiZGV2aWNl IG1pc2NvbmZpZ3VyZWQ7IGNsb3NlIGFuZCBvcGVuIGl0ICIKKwkJCQkiYWdhaW5cbiIpOworCQly ZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoZmgtPnR5cGUgPT0gRU0yOFhYX1ZJREVPICYmIGRldi0+ dmlkZW9fcmVhZGVyID4gMCAmJgorCQkJZmgtPnJlYWRlciA9PSAwKQorCQlyZXR1cm4gLUVCVVNZ OworCisJaWYgKGZoLT50eXBlID09IEVNMjhYWF9WQkkgJiYgZGV2LT52YmlfcmVhZGVyID4gMCAm JiBmaC0+cmVhZGVyID09IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoZmgtPnR5cGUgPT0g RU0yOFhYX1ZJREVPICYmIGRldi0+dmlkZW9faW8gPT0gSU9fTU1BUCkgeworCQllbTI4eHhfdmlk ZW9kYmcoIlZpZGVvIElPIG1ldGhvZCBpcyBzZXQgdG8gbW1hcCIKKwkJCQkiIHRoZSBkZXZpY2Ug YWdhaW4gdG8gY2hvb3NlIHRoZSIKKwkJCQkicmVhZCBtZXRob2RcbiIpOworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9IGVsc2UgeworCQlpZiAoZmgtPnR5cGUgPT0gRU0yOFhYX1ZJREVPKSB7CisJCQlk ZXYtPnZpZGVvX3JlYWRlciA9IDE7CisJCQlmaC0+cmVhZGVyID0gMTsKKwkJCWRldi0+dmlkZW9f aW8gPSBJT19SRUFEOworCQl9CisJfQorCisJaWYgKGZoLT50eXBlID09IEVNMjhYWF9WQkkgJiYg ZGV2LT52YmlfaW8gPT0gSU9fTU1BUCkgeworCQllbTI4eHhfdmlkZW9kYmcoIlZCSSBJTyBtZXRo b2QgaXMgc2V0IHRvIG1tYXBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlp ZiAoZmgtPnR5cGUgPT0gRU0yOFhYX1ZCSSkgeworCQkJZGV2LT52YmlfcmVhZGVyID0gMTsKKwkJ CWZoLT5yZWFkZXIgPSAxOworCQkJZGV2LT52YmlfaW8gPSBJT19SRUFEOworCQl9CisJfQorCisJ aWYgKGZoLT50eXBlID09IEVNMjhYWF9WSURFTyAmJiBkZXYtPnZpZGVvX3N0cmVhbSA9PSBTVFJF QU1fT0ZGKSB7CisJCWlmICghZW0yOHh4X3JlcXVlc3RfYnVmZmVycyhkZXYsCisJCQkJCUVNMjhY WF9OVU1fUkVBRF9GUkFNRVMsCisJCQkJCUVNMjhYWF9WSURFTykpIHsKKwkJCWVtMjh4eF9lcnJk ZXYoInJlYWQgZmFpbGVkLCBub3QgZW5vdWdoIG1lbW9yeVxuIik7CisJCQlyZXR1cm4gLUVOT01F TTsKKwkJfQorCisJCWRldi0+dmlkZW9fc3RyZWFtID0gU1RSRUFNX09OOworCQllbTI4eHhfcXVl dWVfdW51c2VkZnJhbWVzKGRldiwgRU0yOFhYX1ZJREVPKTsKKwl9CisKKwlpZiAoZmgtPnR5cGUg PT0gRU0yOFhYX1ZCSSAmJiBkZXYtPnZiaV9zdHJlYW0gPT0gU1RSRUFNX09GRikgeworCQlpZiAo IWVtMjh4eF9yZXF1ZXN0X2J1ZmZlcnMoZGV2LCBFTTI4WFhfTlVNX1JFQURfRlJBTUVTLAorCQkJ CQlFTTI4WFhfVkJJKSkgeworCQkJZW0yOHh4X2VycmRldigicmVhZCBmYWlsZWQgbm90IGVub3Vn aCBtZW1vcnlcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlkZXYtPnZiaV9zdHJl YW0gPSBTVFJFQU1fT047CisJCWVtMjh4eF9xdWV1ZV91bnVzZWRmcmFtZXMoZGV2LCBFTTI4WFhf VkJJKTsKKwl9CisKKworCisJaWYgKCFjb3VudCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZmgtPnR5 cGUgPT0gRU0yOFhYX1ZJREVPKSB7CisJCWlmIChsaXN0X2VtcHR5KCZkZXYtPm91dHF1ZXVlKSkg eworCQkJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQorCQkJCXJldHVybiAtRUFHQUlO OworCisJCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUKKwkJCQkoZGV2LT53YWl0X2Zy YW1lLAorCQkJCSAoIWxpc3RfZW1wdHkoJmRldi0+b3V0cXVldWUpKSB8fAorCQkJCSAoZGV2LT5z dGF0ZSAmIERFVl9ESVNDT05ORUNURUQpKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsK KworCQkJaWYgKGRldi0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKQorCQkJCXJldHVybiAtRU5P REVWOworCisJCQlkZXYtPnZpZGVvX2J5dGVzcmVhZCA9IDA7CisJCX0KKworCQlmID0gbGlzdF9l bnRyeShkZXYtPm91dHF1ZXVlLnByZXYsIHN0cnVjdCBlbTI4eHhfZnJhbWVfdCwKKwkJCQlmcmFt ZSk7CisKKworCQllbTI4eHhfcXVldWVfdW51c2VkZnJhbWVzKGRldiwgRU0yOFhYX1ZJREVPKTsK KworCQlpZiAoY291bnQgPiBmLT5idWYubGVuZ3RoKQorCQkJY291bnQgPSBmLT5idWYubGVuZ3Ro OworCisJCWlmICgoZGV2LT52aWRlb19ieXRlc3JlYWQrY291bnQpID4gZGV2LT5mcmFtZV9zaXpl KQorCQkJY291bnQgPSBkZXYtPmZyYW1lX3NpemUgLSBkZXYtPnZpZGVvX2J5dGVzcmVhZDsKKwor CQlpZiAoY29weV90b191c2VyKGJ1ZiwgZi0+YnVmbWVtICsgZGV2LT52aWRlb19ieXRlc3JlYWQs IGNvdW50KSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWRldi0+dmlkZW9fYnl0ZXNyZWFkICs9 IGNvdW50OworCisJCWlmIChkZXYtPnZpZGVvX2J5dGVzcmVhZCA9PSBkZXYtPmZyYW1lX3NpemUp IHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOwor CQkJbGlzdF9mb3JfZWFjaF9lbnRyeShpLCAmZGV2LT5vdXRxdWV1ZSwgZnJhbWUpCisJCQkJaS0+ c3RhdGUgPSBGX1VOVVNFRDsKKwkJCUlOSVRfTElTVF9IRUFEKCZkZXYtPm91dHF1ZXVlKTsKKwkJ CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisJ CQllbTI4eHhfcXVldWVfdW51c2VkZnJhbWVzKGRldiwgRU0yOFhYX1ZJREVPKTsKKwkJCWRldi0+ dmlkZW9fYnl0ZXNyZWFkID0gMDsKKwkJfQorCisJCSpmX3BvcyArPSBjb3VudDsKKwl9IGVsc2Ug aWYgKGZoLT50eXBlID09IEVNMjhYWF9WQkkpIHsKKworCQlpZiAobGlzdF9lbXB0eSgmZGV2LT52 Ymlfb3V0cXVldWUpKSB7CisJCQlpZiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCisJCQkJ cmV0dXJuIC1FQUdBSU47CisKKwkJCWlmIChkZXYtPnZiaV9udW1fZnJhbWVzID09IDApIHsKKwkJ CQllbTI4eHhfcmVxdWVzdF9idWZmZXJzKGRldiwKKwkJCQkJCUVNMjhYWF9OVU1fUkVBRF9GUkFN RVMsCisJCQkJCQlFTTI4WFhfVkJJKTsKKwkJCQllbTI4eHhfcXVldWVfdW51c2VkZnJhbWVzKGRl diwgRU0yOFhYX1ZCSSk7CisJCQl9CisKKwkJCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJs ZQorCQkJCShkZXYtPndhaXRfdmJpX2ZyYW1lLAorCQkJCSAoIWxpc3RfZW1wdHkoJmRldi0+dmJp X291dHF1ZXVlKSkgfHwKKwkJCQkgKGRldi0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSk7CisK KwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKworCQkJaWYgKGRldi0+c3RhdGUgJiBERVZf RElTQ09OTkVDVEVEKQorCQkJCXJldHVybiAtRU5PREVWOworCisJCQlkZXYtPnZiaV9ieXRlc3Jl YWQgPSAwOworCQl9CisKKwkJZiA9IGxpc3RfZW50cnkoZGV2LT52Ymlfb3V0cXVldWUucHJldiwg c3RydWN0IGVtMjh4eF9mcmFtZV90LAorCQkJCWZyYW1lKTsKKwkJZW0yOHh4X3F1ZXVlX3VudXNl ZGZyYW1lcyhkZXYsIEVNMjhYWF9WQkkpOworCisJCWlmIChjb3VudCA+IGYtPmJ1Zi5sZW5ndGgp CisJCQljb3VudCA9IGYtPmJ1Zi5sZW5ndGg7CisKKwkJaWYgKChkZXYtPnZiaV9ieXRlc3JlYWQg KyBjb3VudCkgPiBkZXYtPnZiaV9mcmFtZV9zaXplKQorCQkJY291bnQgPSBkZXYtPnZiaV9mcmFt ZV9zaXplLWRldi0+dmJpX2J5dGVzcmVhZDsKKworCQlpZiAoY29weV90b191c2VyKGJ1ZiwgZi0+ YnVmbWVtK2Rldi0+dmJpX2J5dGVzcmVhZCwgY291bnQpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisK KwkJZGV2LT52YmlfYnl0ZXNyZWFkICs9IGNvdW50OworCQlpZiAoZGV2LT52YmlfYnl0ZXNyZWFk ID09IGRldi0+dmJpX2ZyYW1lX3NpemUpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnZi aV9xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoaSwgJmRl di0+dmJpX291dHF1ZXVlLCBmcmFtZSkKKwkJCQlpLT5zdGF0ZSA9IEZfVU5VU0VEOworCQkJSU5J VF9MSVNUX0hFQUQoJmRldi0+dmJpX291dHF1ZXVlKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmRldi0+dmJpX3F1ZXVlX2xvY2ssCisJCQkJCWxvY2tfZmxhZ3MpOworCQkJZW0yOHh4X3F1 ZXVlX3VudXNlZGZyYW1lcyhkZXYsIEVNMjhYWF9WQkkpOworCQkJZGV2LT52YmlfYnl0ZXNyZWFk ID0gMDsKKwkJfQorCisJCSpmX3BvcyArPSBjb3VudDsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9 CisKKy8qCisgKiBlbTI4eHhfdjRsMl9wb2xsKCkKKyAqIHdpbGwgYWxsb2NhdGUgYnVmZmVycyB3 aGVuIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHRpbWUKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBl bTI4eHhfdjRsMl9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICogd2FpdCkKK3sK Kwl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CisJc3RydWN0IGVtMjh4eF9maCAqZmggPSBmaWxwLT5w cml2YXRlX2RhdGE7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gZmgtPmRldjsKKworCWlmIChkZXYt PnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkKKwkJZW0yOHh4X3ZpZGVvZGJnKCJkZXZpY2Ugbm90 IHByZXNlbnRcbiIpOworCWVsc2UgaWYgKGRldi0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkK KwkJZW0yOHh4X3ZpZGVvZGJnKCJkZXZpY2UgaXMgbWlzY29uZmlndXJlZDsgY2xvc2UgYW5kIG9w ZW4gaXQgIgorCQkJCSJhZ2FpblxuIik7CisJZWxzZSBpZiAoZmgtPnR5cGUgPT0gRU0yOFhYX1ZC SSkgeworCQlpZiAoZmgtPnJlYWRlciA9PSAwICYmIGRldi0+dmJpX2lvICE9IElPX05PTkUpCisJ CQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoZGV2LT52YmlfbnVtX2ZyYW1lcyA9PSAwICYmIGRl di0+dmJpX3JlYWRlciA9PSAwKSB7CisJCQllbTI4eHhfZW1wdHlfZnJhbWVxdWV1ZXMoZGV2LCBF TTI4WFhfVkJJKTsKKwkJCWlmICghZW0yOHh4X3JlcXVlc3RfYnVmZmVycyhkZXYsCisJCQkJCQlF TTI4WFhfTlVNX1JFQURfRlJBTUVTLAorCQkJCQkJRU0yOFhYX1ZCSSkpCisJCQkJcmV0dXJuIC1F Tk9NRU07CisJCX0KKworCQlpZiAoZGV2LT52YmlfaW8gPT0gSU9fTk9ORSAmJiBkZXYtPnZiaV9y ZWFkZXIgPT0gMCkgeworCQkJZW0yOHh4X3F1ZXVlX3VudXNlZGZyYW1lcyhkZXYsIEVNMjhYWF9W QkkpOworCQkJZGV2LT52YmlfaW8gPSBJT19SRUFEOworCQkJZGV2LT52Ymlfc3RyZWFtID0gU1RS RUFNX09OOworCQkJZGV2LT52YmlfcmVhZGVyID0gMTsKKwkJCWZoLT5yZWFkZXIgPSAxOworCQl9 CisKKwkJcG9sbF93YWl0KGZpbHAsICZkZXYtPndhaXRfdmJpX2ZyYW1lLCB3YWl0KTsKKwkJaWYg KCFsaXN0X2VtcHR5KCZkZXYtPnZiaV9vdXRxdWV1ZSkpCisJCQltYXNrIHw9IFBPTExJTiB8IFBP TExSRE5PUk07CisJCXJldHVybiBtYXNrOworCX0gZWxzZSBpZiAoZmgtPnR5cGUgPT0gRU0yOFhY X1ZJREVPKSB7CisKKwkJaWYgKGRldi0+bnVtX2ZyYW1lcyA9PSAwICYmIGRldi0+cmVhZGVyID09 IDApIHsKKwkJCWVtMjh4eF9lbXB0eV9mcmFtZXF1ZXVlcyhkZXYsIEVNMjhYWF9WSURFTyk7CisJ CQlpZiAoIWVtMjh4eF9yZXF1ZXN0X2J1ZmZlcnMoZGV2LCBFTTI4WFhfTlVNX1JFQURfRlJBTUVT LAorCQkJCQkJRU0yOFhYX1ZJREVPKSkKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCWlm IChkZXYtPnZpZGVvX2lvID09IElPX05PTkUgJiYgZGV2LT5yZWFkZXIgPT0gMCkgeworCQkJZW0y OHh4X3F1ZXVlX3VudXNlZGZyYW1lcyhkZXYsIEVNMjhYWF9WSURFTyk7CisJCQlkZXYtPnZpZGVv X2lvID0gSU9fUkVBRDsKKwkJCWRldi0+dmlkZW9fc3RyZWFtID0gU1RSRUFNX09OOworCQkJZGV2 LT5yZWFkZXIgPSAxOworCQkJZmgtPnJlYWRlciA9IDE7CisJCX0KKworCQlwb2xsX3dhaXQoZmls cCwgJmRldi0+d2FpdF9mcmFtZSwgd2FpdCk7CisJCWlmICghbGlzdF9lbXB0eSgmZGV2LT5vdXRx dWV1ZSkpCisJCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CisJCXJldHVybiBtYXNrOwor CX0KKworCXJldHVybiBQT0xMRVJSOworfQorCisvKgorICogZW0yOHh4X3ZtX29wZW4oKQorICov CitzdGF0aWMgdm9pZCBlbTI4eHhfdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkK K3sKKwlzdHJ1Y3QgZW0yOHh4X2ZyYW1lX3QgKmYgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKwlm LT52bWFfdXNlX2NvdW50Kys7Cit9CisKKy8qCisgKiBlbTI4eHhfdm1fY2xvc2UoKQorICovCitz dGF0aWMgdm9pZCBlbTI4eHhfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7 CisJLyogTk9URTogYnVmZmVycyBhcmUgbm90IGZyZWVkIGhlcmUgKi8KKwlzdHJ1Y3QgZW0yOHh4 X2ZyYW1lX3QgKmYgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKwlmLT52bWFfdXNlX2NvdW50LS07 Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZW0yOHh4X3ZtX29wcyA9 IHsKKwkub3BlbiA9IGVtMjh4eF92bV9vcGVuLAorCS5jbG9zZSA9IGVtMjh4eF92bV9jbG9zZSwK K307CisKKy8qCisgKiBlbTI4eHhfdjRsMl9tbWFwKCkKKyAqLworc3RhdGljIGludCBlbTI4eHhf djRsMl9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkK K3sKKwl1bnNpZ25lZCBsb25nIHNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCisJ ICAgIHN0YXJ0ID0gdm1hLT52bV9zdGFydDsKKwl2b2lkICpwb3M7CisJdTMyIGk7CisKKwlzdHJ1 Y3QgZW0yOHh4X2ZoICpmaCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZW0yOHh4ICpk ZXYgPSBmaC0+ZGV2OworCisJaWYgKGZoLT50eXBlID09IEVNMjhYWF9WQkkpCisJCXJldHVybiBl bTI4eHhfdjRsMl92YmlfbW1hcChmaWxwLCB2bWEpOworCisJaWYgKGZoLT50eXBlICE9IEVNMjhY WF9WSURFTykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKworCWlmIChkZXYtPnZpZGVvX3JlYWRlciA+ IDAgJiYgZmgtPnJlYWRlciA9PSAwKQorCQlyZXR1cm4gLUVCVVNZOworCWVsc2UgeworCQlkZXYt PnZpZGVvX3JlYWRlciA9IDE7CisJCWZoLT5yZWFkZXIgPSAxOworCX0KKworCWlmIChkZXYtPnN0 YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgeworCQllbTI4eHhfdmlkZW9kYmcoIm1tYXA6IGRldmlj ZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChkZXYtPnN0 YXRlICYgREVWX01JU0NPTkZJR1VSRUQpIHsKKwkJZW0yOHh4X3ZpZGVvZGJnKCJtbWFwOiBEZXZp Y2UgaXMgbWlzY29uZmlndXJlZDsgY2xvc2UgYW5kICIKKwkJCQkJCSJvcGVuIGl0IGFnYWluXG4i KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGRldi0+dmlkZW9faW8gIT0gSU9fTU1BUCB8 fCAhKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkgLyp8fAorCSAgICBzaXplICE9IFBBR0VfQUxJ R04oZGV2LT5mcmFtZVswXS5idWYubGVuZ3RoKSAqLykgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fZnJhbWVzOyBpKyspCisJCWlmICgoZGV2LT5m cmFtZVtpXS5idWYubS5vZmZzZXQgPj4gUEFHRV9TSElGVCkgPT0gdm1hLT52bV9wZ29mZikKKwkJ CWJyZWFrOworCisJaWYgKGkgPT0gZGV2LT5udW1fZnJhbWVzKSB7CisJCWVtMjh4eF92aWRlb2Ri ZygibW1hcDogdXNlciBzdXBwbGllZCBtYXBwaW5nIGFkZHJlc3MgaXMgb3V0ICIKKwkJCQkib2Yg cmFuZ2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBWTV9JTyBpcyBldmVudHVh bGx5IGdvaW5nIHRvIHJlcGxhY2UgUGFnZVJlc2VydmVkIGFsdG9nZXRoZXIgKi8KKwl2bWEtPnZt X2ZsYWdzIHw9IFZNX0lPOworCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQ7CS8qIGF2b2lk IHRvIHN3YXAgb3V0IHRoaXMgVk1BICovCisKKwlwb3MgPSBkZXYtPmZyYW1lW2ldLmJ1Zm1lbTsK KwlpZiAocG9zID09IDApIHsKKwkJZW0yOHh4X3ZpZGVvZGJnKCJlbTI4eHgtdmlkZW8uYzogZXhj ZXB0aW9uIHBvcyBpcyAwXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChkZXYtPmZy YW1lWzBdLmJ1Zi5sZW5ndGggPT0gMCkKKworCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkZXYt PmZyYW1lW2ldLmJ1Zi5sZW5ndGggPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3aGlsZSAo c2l6ZSA+IDApIHsJLyogc2l6ZSBpcyBwYWdlLWFsaWduZWQgKi8KKyNpZiBMSU5VWF9WRVJTSU9O X0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA2LCAxNSkKKwkJdW5zaWduZWQgbG9uZyBwYWdlID0g dm1hbGxvY190b19wZm4ocG9zKTsKKwkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBw YWdlLCBQQUdFX1NJWkUsCisJCQkJICAgIHZtYS0+dm1fcGFnZV9wcm90KSkgeworCQkJZW0yOHh4 X3ZpZGVvZGJnKCJtbWFwOiByZW5hbWUgcGFnZSBtYXAgZmFpbGVkXG4iKTsKKyNlbHNlCisJCWlm ICh2bV9pbnNlcnRfcGFnZSh2bWEsIHN0YXJ0LCB2bWFsbG9jX3RvX3BhZ2UocG9zKSkpIHsKKwkJ CWVtMjh4eF92aWRlb2RiZygibW1hcDogdm1faW5zZXJ0X3BhZ2UgZmFpbGVkXG4iKTsKKyNlbmRp ZgorCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwkJc3RhcnQgKz0gUEFHRV9TSVpFOworCQlwb3Mg Kz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisKKwl2bWEtPnZtX29wcyA9 ICZlbTI4eHhfdm1fb3BzOworCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gJmRldi0+ZnJhbWVbaV07 CisKKwllbTI4eHhfdm1fb3Blbih2bWEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVt Mjh4eF92NGwyX3ZiaV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKnZtYSkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1f c3RhcnQsCisJICAgIHN0YXJ0ID0gdm1hLT52bV9zdGFydDsKKwl2b2lkICpwb3M7CisJdTMyIGk7 CisKKwlzdHJ1Y3QgZW0yOHh4X2ZoICpmaCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qg ZW0yOHh4ICpkZXYgPSBmaC0+ZGV2OworCisJaWYgKGZoLT50eXBlICE9IEVNMjhYWF9WQkkpCisJ CXJldHVybiAtRUlOVkFMOworCisJaWYgKGRldi0+dmJpX3JlYWRlciA+IDAgJiYgZmgtPnJlYWRl ciA9PSAwKSB7CisJCXJldHVybiAtRUJVU1k7CisJfSBlbHNlIHsKKwkJZGV2LT52YmlfcmVhZGVy ID0gMTsKKwkJZmgtPnJlYWRlciA9IDE7CisJfQorCisJaWYgKGRldi0+c3RhdGUgJiBERVZfRElT Q09OTkVDVEVEKSB7CisJCWVtMjh4eF92aWRlb2RiZygibW1hcDogZGV2aWNlIG5vdCBwcmVzZW50 XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGRldi0+c3RhdGUgJiBERVZfTUlT Q09ORklHVVJFRCkgeworCQllbTI4eHhfdmlkZW9kYmcoIm1tYXA6IERldmljZSBpcyBtaXNjb25m aWd1cmVkOyBjbG9zZSBhbmQgIgorCQkJCQkJIm9wZW4gaXQgYWdhaW5cbiIpOworCQlyZXR1cm4g LUVJTzsKKwl9CisKKwlpZiAoZGV2LT52YmlfaW8gIT0gSU9fTU1BUCB8fCAhKHZtYS0+dm1fZmxh Z3MgJiBWTV9XUklURSkgLyp8fAorCSAgICBzaXplICE9IFBBR0VfQUxJR04oZGV2LT5mcmFtZVsw XS5idWYubGVuZ3RoKSAqLykgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAw OyBpIDwgZGV2LT52YmlfbnVtX2ZyYW1lczsgaSsrKSB7CisJCWlmICgoZGV2LT52YmlfZnJhbWVb aV0uYnVmLm0ub2Zmc2V0ID4+IFBBR0VfU0hJRlQpID09CisJCQkJdm1hLT52bV9wZ29mZikKKwkJ CWJyZWFrOworCX0KKwlpZiAoaSA9PSBkZXYtPnZiaV9udW1fZnJhbWVzKSB7CisJCWVtMjh4eF92 aWRlb2RiZygibW1hcDogdXNlciBzdXBwbGllZCBtYXBwaW5nIGFkZHJlc3MgaXMgb3V0ICIKKwkJ CQkib2YgcmFuZ2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBWTV9JTyBpcyBl dmVudHVhbGx5IGdvaW5nIHRvIHJlcGxhY2UgUGFnZVJlc2VydmVkIGFsdG9nZXRoZXIgKi8KKwl2 bWEtPnZtX2ZsYWdzIHw9IFZNX0lPOworCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQ7CS8q IGF2b2lkIHRvIHN3YXAgb3V0IHRoaXMgVk1BICovCisKKwlwb3MgPSBkZXYtPnZiaV9mcmFtZVtp XS5idWZtZW07CisJaWYgKHBvcyA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkZXYt PnZiaV9mcmFtZVswXS5idWYubGVuZ3RoID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYg KGRldi0+dmJpX2ZyYW1lW2ldLmJ1Zi5sZW5ndGggPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisK Kwl3aGlsZSAoc2l6ZSA+IDApIHsJLyogc2l6ZSBpcyBwYWdlLWFsaWduZWQgKi8KKyNpZiBMSU5V WF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA2LCAxNSkKKwkJdW5zaWduZWQgbG9u ZyBwYWdlID0gdm1hbGxvY190b19wZm4ocG9zKTsKKwkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEs IHN0YXJ0LCBwYWdlLCBQQUdFX1NJWkUsCisJCQkJICAgIHZtYS0+dm1fcGFnZV9wcm90KSkgewor CQkJZW0yOHh4X3ZpZGVvZGJnKCJtbWFwOiByZW5hbWUgcGFnZSBtYXAgZmFpbGVkXG4iKTsKKyNl bHNlCisJCWlmICh2bV9pbnNlcnRfcGFnZSh2bWEsIHN0YXJ0LCB2bWFsbG9jX3RvX3BhZ2UocG9z KSkpIHsKKwkJCWVtMjh4eF92aWRlb2RiZygibW1hcDogdm1faW5zZXJ0X3BhZ2UgZmFpbGVkXG4i KTsKKyNlbmRpZgorCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwkJc3RhcnQgKz0gUEFHRV9TSVpF OworCQlwb3MgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisKKwl2bWEt PnZtX29wcyA9ICZlbTI4eHhfdm1fb3BzOworCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gJmRldi0+ dmJpX2ZyYW1lW2ldOworCisJZW0yOHh4X3ZtX29wZW4odm1hKTsKKwlyZXR1cm4gMDsKK30KKwor LyoKKyAqIGVtMjh4eF9nZXRfY3RybCgpCisgKiByZXR1cm4gdGhlIGN1cnJlbnQgc2F0dXJhdGlv biwgYnJpZ2h0bmVzcyBvciBjb250cmFzdCwgbXV0ZSBzdGF0ZQorICovCitzdGF0aWMgaW50IGVt Mjh4eF9nZXRfY3RybChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0 cmwpCit7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToK KwkJY3RybC0+dmFsdWUgPSBkZXYtPm11dGU7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURf QVVESU9fVk9MVU1FOgorCQljdHJsLT52YWx1ZSA9IGRldi0+dm9sdW1lOworCQlyZXR1cm4gMDsK KwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKy8qRklYTUU6IHNob3VsZCBi ZSBtb3ZlZCB0byBzYWE3MTF4ICovCitzdGF0aWMgaW50IHNhYTcxMXhfZ2V0X2N0cmwoc3RydWN0 IGVtMjh4eCAqZGV2LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXMzMiB0bXA7CisJ c3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJdG1wID0g ZW0yOHh4X2JyaWdodG5lc3NfZ2V0KGRldik7CisJCWlmICh0bXAgPCAwKQorCQkJcmV0dXJuIC1F SU87CisJCS8qIEZJWE1FOiBjbGVhbmVyIHdheSB0byBleHRlbmQgc2lnbj8gKi8KKwkJY3RybC0+ dmFsdWUgPSAoczMyKSAoKHM4KSB0bXApOworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX0NP TlRSQVNUOgorCQljdHJsLT52YWx1ZSA9IGVtMjh4eF9jb250cmFzdF9nZXQoZGV2KTsKKwkJaWYg KGN0cmwtPnZhbHVlIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQlyZXR1cm4gMDsKKwljYXNlIFY0 TDJfQ0lEX1NBVFVSQVRJT046CisJCWN0cmwtPnZhbHVlID0gZW0yOHh4X3NhdHVyYXRpb25fZ2V0 KGRldik7CisJCWlmIChjdHJsLT52YWx1ZSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJcmV0dXJu IDA7CisJY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToKKwkJdG1wID0gZW0yOHh4X3ZfYmFsYW5j ZV9nZXQoZGV2KTsKKwkJaWYgKHRtcCA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJLyogRklYTUU6 IGNsZW5hZXIgd2F5IHRvIGV4dGVuZCBzaWduPyAqLworCQljdHJsLT52YWx1ZSA9IChzMzIpICgo czgpIHRtcCk7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgorCQl0 bXAgPSBlbTI4eHhfdV9iYWxhbmNlX2dldChkZXYpOworCQlpZiAodG1wIDwgMCkKKwkJCXJldHVy biAtRUlPOworCQkvKiBGSVhNRTogY2xlbmFlciB3YXkgdG8gZXh0ZW5kIHNpZ24/ICovCisJCWN0 cmwtPnZhbHVlID0gKHMzMikgKChzOCkgdG1wKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJ RF9HQU1NQToKKwkJY3RybC0+dmFsdWUgPSBlbTI4eHhfZ2FtbWFfZ2V0KGRldik7CisJCWlmIChj dHJsLT52YWx1ZSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCisvKgorICogZW0yOHh4X3NldF9jdHJsKCkKKyAq IG11dGUgb3Igc2V0IG5ldyBzYXR1cmF0aW9uLCBicmlnaHRuZXNzIG9yIGNvbnRyYXN0CisgKi8K K3N0YXRpYyBpbnQgZW0yOHh4X3NldF9jdHJsKHN0cnVjdCBlbTI4eHggKmRldiwgY29uc3Qgc3Ry dWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBW NEwyX0NJRF9BVURJT19NVVRFOgorCQlpZiAoY3RybC0+dmFsdWUgIT0gZGV2LT5tdXRlKSB7CisJ CQlkZXYtPm11dGUgPSBjdHJsLT52YWx1ZTsKKwkJCWVtMjh4eF9hdWRpb191c2JfbXV0ZShkZXYs IGN0cmwtPnZhbHVlKTsKKwkJCXJldHVybiBlbTI4eHhfYXVkaW9fYW5hbG9nX3NldChkZXYpOwor CQl9CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlkZXYtPnZv bHVtZSA9IGN0cmwtPnZhbHVlOworCQlyZXR1cm4gZW0yOHh4X2F1ZGlvX2FuYWxvZ19zZXQoZGV2 KTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKy8qRklYTUU6IHNob3Vs ZCBiZSBtb3ZlZCB0byBzYWE3MTF4ICovCitzdGF0aWMgaW50IHNhYTcxMXhfc2V0X2N0cmwoc3Ry dWN0IGVtMjh4eCAqZGV2LCBjb25zdCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN3 aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCXJldHVybiBl bTI4eHhfYnJpZ2h0bmVzc19zZXQoZGV2LCBjdHJsLT52YWx1ZSk7CisJY2FzZSBWNEwyX0NJRF9D T05UUkFTVDoKKwkJcmV0dXJuIGVtMjh4eF9jb250cmFzdF9zZXQoZGV2LCBjdHJsLT52YWx1ZSk7 CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQlyZXR1cm4gZW0yOHh4X3NhdHVyYXRpb25f c2V0KGRldiwgY3RybC0+dmFsdWUpOworCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJCXJl dHVybiBlbTI4eHhfdl9iYWxhbmNlX3NldChkZXYsIGN0cmwtPnZhbHVlKTsKKwljYXNlIFY0TDJf Q0lEX0JMVUVfQkFMQU5DRToKKwkJcmV0dXJuIGVtMjh4eF91X2JhbGFuY2Vfc2V0KGRldiwgY3Ry bC0+dmFsdWUpOworCWNhc2UgVjRMMl9DSURfR0FNTUE6CisJCXJldHVybiBlbTI4eHhfZ2FtbWFf c2V0KGRldiwgY3RybC0+dmFsdWUpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0K K30KKworLyoKKyAqIGVtMjh4eF9zdHJlYW1faW50ZXJydXB0KCkKKyAqIHN0b3BzIHN0cmVhbWlu ZworICovCitzdGF0aWMgaW50IGVtMjh4eF9zdHJlYW1faW50ZXJydXB0KHN0cnVjdCBlbTI4eHgg KmRldiwgaW50IHR5cGUpCit7CisJaW50IHJldCA9IDA7CisKKwkvKiBzdG9wIHJlYWRpbmcgZnJv bSB0aGUgZGV2aWNlICovCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBFTTI4WFhfVkJJOgorCQlk ZXYtPnZiaV9zdHJlYW0gPSBTVFJFQU1fSU5URVJSVVBUOworCQlyZXQgPSB3YWl0X2V2ZW50X3Rp bWVvdXQoZGV2LT52Ymlfd2FpdF9zdHJlYW0sCisJCQkJKGRldi0+dmJpX3N0cmVhbSA9PSBTVFJF QU1fT0ZGKSB8fAorCQkJCShkZXYtPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCksCisJCQkJRU0y OFhYX1VSQl9USU1FT1VUKTsKKworCQlpZiAoZGV2LT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQp CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJZWxzZSBpZiAocmV0KSB7CisJCQlkZXYtPnN0YXRlIHw9 IERFVl9NSVNDT05GSUdVUkVEOworCQkJZW0yOHh4X3ZpZGVvZGJnKCJkZXZpY2UgaXMgbWlzY29u ZmlndXJlZDsgY2xvc2UgYW5kICIKKwkJCQkJIm9wZW4gL2Rldi92aWRlbyVkIGFnYWluXG4iLAor CQkJCQlkZXYtPnZkZXYtPm51bSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBFTTI4WFhfVklERU86 CisJCWRldi0+dmlkZW9fc3RyZWFtID0gU1RSRUFNX0lOVEVSUlVQVDsKKwkJcmV0ID0gd2FpdF9l dmVudF90aW1lb3V0KGRldi0+dmlkZW9fd2FpdF9zdHJlYW0sCisJCQkJCSAoZGV2LT52aWRlb19z dHJlYW0gPT0gU1RSRUFNX09GRikgfHwKKwkJCQkJIChkZXYtPnN0YXRlICYgREVWX0RJU0NPTk5F Q1RFRCksCisJCQkJCSBFTTI4WFhfVVJCX1RJTUVPVVQpOworCQlpZiAoZGV2LT5zdGF0ZSAmIERF Vl9ESVNDT05ORUNURUQpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJZWxzZSBpZiAocmV0KSB7CisJ CQlkZXYtPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOworCQkJZW0yOHh4X3ZpZGVvZGJnKCJk ZXZpY2UgaXMgbWlzY29uZmlndXJlZDsgY2xvc2UgYW5kICIKKwkJCQkib3BlbiAvZGV2L3ZpZGVv JWQgYWdhaW5cbiIsCisJCQkJCWRldi0+dmRldi0+bnVtKTsKKwkJCXJldHVybiByZXQ7CisJCX0K KwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVtMjh4eF9zZXRfbm9y bShzdHJ1Y3QgZW0yOHh4ICpkZXYsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKwl1bnNpZ25l ZCBpbnQgaHNjYWxlLCB2c2NhbGU7CisJdW5zaWduZWQgaW50IG1heGgsIG1heHc7CisKKwltYXh3 ID0gbm9ybV9tYXh3KGRldik7CisJbWF4aCA9IG5vcm1fbWF4aChkZXYpOworCisJLyogd2lkdGgg bXVzdCBldmVuIGJlY2F1c2Ugb2YgdGhlIFlVWVYgZm9ybWF0ICovCisJLyogaGVpZ2h0IG11c3Qg YmUgZXZlbiBiZWNhdXNlIG9mIGludGVybGFjaW5nICovCisJaGVpZ2h0ICY9IDB4ZmZmZTsKKwl3 aWR0aCAmPSAweGZmZmU7CisKKwlpZiAoaGVpZ2h0IDwgMzIpCisJCWhlaWdodCA9IDMyOworCWlm IChoZWlnaHQgPiBtYXhoKQorCQloZWlnaHQgPSBtYXhoOworCWlmICh3aWR0aCA8IDQ4KQorCQl3 aWR0aCA9IDQ4OworCWlmICh3aWR0aCA+IG1heHcpCisJCXdpZHRoID0gbWF4dzsKKworCWhzY2Fs ZSA9ICgoKHVuc2lnbmVkIGxvbmcpbWF4dykgPDwgMTIpIC8gd2lkdGggLSA0MDk2TDsKKworCWlm IChoc2NhbGUgPj0gMHg0MDAwKQorCQloc2NhbGUgPSAweDNmZmY7CisJd2lkdGggPSAoKCh1bnNp Z25lZCBsb25nKW1heHcpIDw8IDEyKSAvIChoc2NhbGUgKyA0MDk2TCk7CisKKwl2c2NhbGUgPSAo KCh1bnNpZ25lZCBsb25nKW1heGgpIDw8IDEyKSAvIGhlaWdodCAtIDQwOTZMOworCisJaWYgKHZz Y2FsZSA+PSAweDQwMDApCisJCXZzY2FsZSA9IDB4M2ZmZjsKKworCWhlaWdodCA9ICgoKHVuc2ln bmVkIGxvbmcpbWF4aCkgPDwgMTIpIC8gKHZzY2FsZSArIDQwOTZMKTsKKworCS8qIHNldCBuZXcg aW1hZ2Ugc2l6ZSAqLworCWRldi0+d2lkdGggPSB3aWR0aDsKKwlkZXYtPmhlaWdodCA9IGhlaWdo dDsKKwlkZXYtPmZyYW1lX3NpemUgPSBkZXYtPndpZHRoICogZGV2LT5oZWlnaHQgKiAyOworCWRl di0+ZmllbGRfc2l6ZSA9IGRldi0+ZnJhbWVfc2l6ZSA+PiAxOworCWRldi0+Ynl0ZXNwZXJsaW5l ID0gZGV2LT53aWR0aCAqIDI7CisJZGV2LT5oc2NhbGUgPSBoc2NhbGU7CisJZGV2LT52c2NhbGUg PSB2c2NhbGU7CisKKwllbTI4eHhfcmVzb2x1dGlvbl9zZXQoZGV2KTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGVtMjh4eF9nZXRfZm10KHN0cnVjdCBlbTI4eHggKmRldiwgc3RydWN0 IHY0bDJfZm9ybWF0ICpmb3JtYXQpCit7CisJZW0yOHh4X3ZpZGVvZGJnKCJWSURJT0NfR19GTVQ6 IHR5cGUgPSAlc1xuIiwKKwkJKGZvcm1hdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NB UFRVUkUpID8KKwkJIlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSIgOgorCQkoZm9ybWF0LT50 eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpID8KKwkJIlY0TDJfQlVGX1RZUEVfVkJJ X0NBUFRVUkUiIDoKKwkJKGZvcm1hdC0+dHlwZSA9PSBWNEwyX0NBUF9TTElDRURfVkJJX0NBUFRV UkUpID8KKwkJIlY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFICIgOgorCQkibm90IHN1 cHBvcnRlZCIpOworCisJc3dpdGNoIChmb3JtYXQtPnR5cGUpIHsKKwljYXNlIFY0TDJfQlVGX1RZ UEVfVklERU9fQ0FQVFVSRToKKwl7CisJCWZvcm1hdC0+Zm10LnBpeC53aWR0aCA9IGRldi0+d2lk dGg7CisJCWZvcm1hdC0+Zm10LnBpeC5oZWlnaHQgPSBkZXYtPmhlaWdodDsKKwkJZm9ybWF0LT5m bXQucGl4LnBpeGVsZm9ybWF0ID0gZGV2LT5vdXRmbXQtPmZtdC5waXhlbGZvcm1hdDsKKwkvLwlW NEwyX1BJWF9GTVRfWVVZVjsKKwkJZm9ybWF0LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGRldi0+ Ynl0ZXNwZXJsaW5lOworCQlmb3JtYXQtPmZtdC5waXguc2l6ZWltYWdlID0gZGV2LT5mcmFtZV9z aXplOworCQlmb3JtYXQtPmZtdC5waXguY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBU RTE3ME07CisJCWZvcm1hdC0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsK KyNpZiAwCisJCWZvcm1hdC0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRF9U QjsKKyNlbmRpZgorCisJCWVtMjh4eF92aWRlb2RiZygiVklESU9DX0dfRk1UOiAlZHglZFxuIiwg ZGV2LT53aWR0aCwKKwkJCWRldi0+aGVpZ2h0KTsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBWNEwy X0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRToKKwl7CisJCWZvcm1hdC0+Zm10LnNsaWNlZC5z ZXJ2aWNlX3NldCA9IDA7CisJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX0df Rk1ULCBmb3JtYXQpOworCQlpZiAoZm9ybWF0LT5mbXQuc2xpY2VkLnNlcnZpY2Vfc2V0ID09IDAp CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCWNhc2UgVjRMMl9CVUZfVFlQRV9W QklfQ0FQVFVSRToKKwl7CisJCWZvcm1hdC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRV UkU7CisKKwkJc3dpdGNoIChkZXYtPnR2bm9ybS0+aWQpIHsKKwkJY2FzZSBWNEwyX1NURF9OVFND X006CisJCQlmb3JtYXQtPmZtdC52Ymkuc2FtcGxpbmdfcmF0ZSA9CisJCQkJZGV2LT50dm5vcm0t PnZiaV9zYW1wbGVfcmF0ZTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfU1REX1BBTDoKKwkJZGVm YXVsdDoKKwkJCWZvcm1hdC0+Zm10LnZiaS5zYW1wbGluZ19yYXRlID0KKwkJCQlkZXYtPnR2bm9y bS0+dmJpX3NhbXBsZV9yYXRlOworCQl9CisKKwkJZm9ybWF0LT5mbXQudmJpLnNhbXBsZXNfcGVy X2xpbmUgPQorCQkJZGV2LT50dm5vcm0tPnZiaV9zYW1wbGVzX3Blcl9saW5lOworCQlmb3JtYXQt PmZtdC52Ymkuc2FtcGxlX2Zvcm1hdCA9IFY0TDJfUElYX0ZNVF9HUkVZOworCQlmb3JtYXQtPmZt dC52Ymkub2Zmc2V0ID0gZGV2LT50dm5vcm0tPnZiaV9vZmZzZXQ7CisJCWZvcm1hdC0+Zm10LnZi aS5zdGFydFswXSA9IGRldi0+dHZub3JtLT52Ymlfc3RhcnRfMDsKKwkJZm9ybWF0LT5mbXQudmJp LmNvdW50WzBdID0gZGV2LT50dm5vcm0tPnZiaV9jb3VudF8wOworCQlmb3JtYXQtPmZtdC52Ymku c3RhcnRbMV0gPSBkZXYtPnR2bm9ybS0+dmJpX3N0YXJ0XzE7CisJCWZvcm1hdC0+Zm10LnZiaS5j b3VudFsxXSA9IGRldi0+dHZub3JtLT52YmlfY291bnRfMTsKKwkJaWYgKGRldi0+dmJpX2ludGVy bGFjZWQpCisJCQlmb3JtYXQtPmZtdC52YmkuZmxhZ3MgPSBWNEwyX1ZCSV9JTlRFUkxBQ0VEOwor CQllbHNlIAorCQkJZm9ybWF0LT5mbXQudmJpLmZsYWdzID0gMDsKKwkJcmV0dXJuIDA7CisJfQor CWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBlbTI4eHhfc2V0X2ZtdChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHVuc2lnbmVkIGludCBjbWQs IHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm9ybWF0KQoreworCXUzMiBpOworCWludCByZXQgPSAwOwor CWludCB3aWR0aCA9IGZvcm1hdC0+Zm10LnBpeC53aWR0aDsKKwlpbnQgaGVpZ2h0ID0gZm9ybWF0 LT5mbXQucGl4LmhlaWdodDsKKwl1bnNpZ25lZCBpbnQgaHNjYWxlLCB2c2NhbGU7CisJdW5zaWdu ZWQgaW50IG1heGgsIG1heHc7CisKKwltYXh3ID0gbm9ybV9tYXh3KGRldik7CisJbWF4aCA9IG5v cm1fbWF4aChkZXYpOworCisJZW0yOHh4X3ZpZGVvZGJnKCIlczogdHlwZSA9ICVzXG4iLAorCQkJ Y21kID09IFZJRElPQ19UUllfRk1UID8KKwkJCSJWSURJT0NfVFJZX0ZNVCIgOiAiVklESU9DX1Nf Rk1UIiwKKwkJCWZvcm1hdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgPwor CQkJIlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSIgOgorCQkJZm9ybWF0LT50eXBlID09IFY0 TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUgPworCQkJIlY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUg IiA6CisJCQkibm90IHN1cHBvcnRlZCIpOworCisJaWYgKGZvcm1hdC0+dHlwZSA9PSBWNEwyX0JV Rl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSkgeworCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhk ZXYsIFZJRElPQ19HX0ZNVCwgZm9ybWF0KTsKKworCQlpZiAoZm9ybWF0LT5mbXQuc2xpY2VkLnNl cnZpY2Vfc2V0ID09IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXR1cm4gMDsKKwl9CisJ aWYgKGZvcm1hdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFICYmCisJCQlkZXYt PmRldl9tb2RlcyZFTTI4WFhfVkJJKSB7CisJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwg VklESU9DX1NfRk1ULCBmb3JtYXQpOworCQlmb3JtYXQtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZC SV9DQVBUVVJFOworCQlzd2l0Y2ggKGRldi0+dHZub3JtLT5pZCkgeworCQljYXNlIFY0TDJfU1RE X05UU0NfTToKKwkJCWZvcm1hdC0+Zm10LnZiaS5zYW1wbGluZ19yYXRlID0KKwkJCQlkZXYtPnR2 bm9ybS0+dmJpX3NhbXBsZV9yYXRlOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9TVERfUEFMOgor CQlkZWZhdWx0OgorCQkJZm9ybWF0LT5mbXQudmJpLnNhbXBsaW5nX3JhdGUgPQorCQkJCWRldi0+ dHZub3JtLT52Ymlfc2FtcGxlX3JhdGU7CisJCX0KKwkJZm9ybWF0LT5mbXQudmJpLnNhbXBsZXNf cGVyX2xpbmUgPQorCQkJZGV2LT50dm5vcm0tPnZiaV9zYW1wbGVzX3Blcl9saW5lOworCQlmb3Jt YXQtPmZtdC52Ymkuc2FtcGxlX2Zvcm1hdCA9IFY0TDJfUElYX0ZNVF9HUkVZOworCQlmb3JtYXQt PmZtdC52Ymkub2Zmc2V0ID0gZGV2LT50dm5vcm0tPnZiaV9vZmZzZXQ7CisKKwkJaWYgKGRldi0+ dmJpX2ludGVybGFjZWQpCisJCQlmb3JtYXQtPmZtdC52YmkuZmxhZ3MgPSBWNEwyX1ZCSV9JTlRF UkxBQ0VEOworCQllbHNlIAorCQkJZm9ybWF0LT5mbXQudmJpLmZsYWdzID0gMDsKKworCQlmb3Jt YXQtPmZtdC52Ymkuc3RhcnRbMF0gPSBkZXYtPnR2bm9ybS0+dmJpX3N0YXJ0XzA7CisJCWZvcm1h dC0+Zm10LnZiaS5zdGFydFsxXSA9IGRldi0+dHZub3JtLT52Ymlfc3RhcnRfMTsKKwkJZm9ybWF0 LT5mbXQudmJpLmNvdW50WzBdID0gZGV2LT50dm5vcm0tPnZiaV9jb3VudF8wOworCQlmb3JtYXQt PmZtdC52YmkuY291bnRbMV0gPSBkZXYtPnR2bm9ybS0+dmJpX2NvdW50XzE7CisJCWRldi0+dmJp X2ZyYW1lX3NpemUgPSA3MjAgKiAyICoKKwkJCShkZXYtPnR2bm9ybS0+dmJpX2NvdW50XzAgKyBk ZXYtPnR2bm9ybS0+dmJpX2NvdW50XzEpOworCQlkZXYtPnZiaV9maWVsZF9zaXplID0gZGV2LT52 YmlfZnJhbWVfc2l6ZSA+PiAxOworCisJCXJldHVybiAwOworCX0KKworCWlmIChmb3JtYXQtPnR5 cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CWVtMjh4eF92aWRlb2RiZygiJXM6IHJlcXVlc3RlZCAlZHglZFxuIiwKKwkJY21kID09IFZJRElP Q19UUllfRk1UID8KKwkJIlZJRElPQ19UUllfRk1UIiA6ICJWSURJT0NfU19GTVQiLAorCQlmb3Jt YXQtPmZtdC5waXgud2lkdGgsIGZvcm1hdC0+Zm10LnBpeC5oZWlnaHQpOworCisJLyogRklYTUU6 IE1vdmUgc29tZSBjb2RlIGF3YXkgZnJvbSBoZXJlICovCisJLyogd2lkdGggbXVzdCBldmVuIGJl Y2F1c2Ugb2YgdGhlIFlVWVYgZm9ybWF0ICovCisJLyogaGVpZ2h0IG11c3QgYmUgZXZlbiBiZWNh dXNlIG9mIGludGVybGFjaW5nICovCisJaGVpZ2h0ICY9IDB4ZmZmZTsKKwl3aWR0aCAmPSAweGZm ZmU7CisKKwlpZiAoaGVpZ2h0IDwgMzIpCisJCWhlaWdodCA9IDMyOworCWlmIChoZWlnaHQgPiBt YXhoKQorCQloZWlnaHQgPSBtYXhoOworCWlmICh3aWR0aCA8IDQ4KQorCQl3aWR0aCA9IDQ4Owor CWlmICh3aWR0aCA+IG1heHcpCisJCXdpZHRoID0gbWF4dzsKKworCWlmIChkZXYtPmVtX3R5cGUg PT0gRU0yODAwKSB7CisJCS8qIHRoZSBlbTI4MDAgY2FuIG9ubHkgc2NhbGUgZG93biB0byA1MCUg Ki8KKwkJaWYgKGhlaWdodCAlIChtYXhoIC8gMikpCisJCQloZWlnaHQgPSBtYXhoOworCQlpZiAo d2lkdGggJSAobWF4dyAvIDIpKQorCQkJd2lkdGggPSBtYXh3OworCQkvKiBhY2NvcmRpbmcgdG8g ZW1waWF0ZWNoIHN1cHBvcnQgKi8KKwkJLyogdGhlIE1heFBhY2tldFNpemUgaXMgdG8gc21hbGwg dG8gc3VwcG9ydCAqLworCQkvKiBmcmFtZXNpemVzIGxhcmdlciB0aGFuIDY0MHg0ODAgQCAzMCBm cHMgKi8KKwkJLyogb3IgNjQweDU3NiBAIDI1IGZwcy4gQXMgdGhpcyB3b3VsZCBjdXQgKi8KKwkJ Lyogb2YgYSBwYXJ0IG9mIHRoZSBpbWFnZSB3ZSBwcmVmZXIgKi8KKwkJLyogMzYweDU3NiBvciAz NjB4NDgwIGZvciBub3cgKi8KKwkJaWYgKHdpZHRoID09IG1heHcgJiYgaGVpZ2h0ID09IG1heGgp CisJCQl3aWR0aCAvPSAyOworCX0KKworCWhzY2FsZSA9ICgoKHVuc2lnbmVkIGxvbmcpbWF4dykg PDwgMTIpIC8gd2lkdGggLSA0MDk2TDsKKwlpZiAoaHNjYWxlID49IDB4NDAwMCkKKwkJaHNjYWxl ID0gMHgzZmZmOworCisJd2lkdGggPSAoKCh1bnNpZ25lZCBsb25nKW1heHcpIDw8IDEyKSAvICho c2NhbGUgKyA0MDk2TCk7CisKKwl2c2NhbGUgPSAoKCh1bnNpZ25lZCBsb25nKW1heGgpIDw8IDEy KSAvIGhlaWdodCAtIDQwOTZMOworCWlmICh2c2NhbGUgPj0gMHg0MDAwKQorCQl2c2NhbGUgPSAw eDNmZmY7CisKKwloZWlnaHQgPSAoKCh1bnNpZ25lZCBsb25nKW1heGgpIDw8IDEyKSAvICh2c2Nh bGUgKyA0MDk2TCk7CisKKwlmb3JtYXQtPmZtdC5waXgud2lkdGggPSB3aWR0aDsKKwlmb3JtYXQt PmZtdC5waXguaGVpZ2h0ID0gaGVpZ2h0OworCisJZGV2LT5vdXRmbXQgPSAmZW0yOHh4X291dF9m bXRbMF07CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShlbTI4eHhfb3V0X2ZtdCk7IGkr KykgeworCQlpZiAoZW0yOHh4X291dF9mbXRbaV0uZm10LnBpeGVsZm9ybWF0ID09IGZvcm1hdC0+ Zm10LnBpeC5waXhlbGZvcm1hdCkgeworCQkJZGV2LT5vdXRmbXQgPSAmZW0yOHh4X291dF9mbXRb aV07CisJCQlicmVhazsKKwkJfQorCX0KKwkJCisJZm9ybWF0LT5mbXQucGl4LnBpeGVsZm9ybWF0 ID0gZGV2LT5vdXRmbXQtPmZtdC5waXhlbGZvcm1hdDsKKwlmb3JtYXQtPmZtdC5waXguYnl0ZXNw ZXJsaW5lID0gd2lkdGggKiAyOworCWZvcm1hdC0+Zm10LnBpeC5zaXplaW1hZ2UgPSB3aWR0aCAq IDIgKiBoZWlnaHQ7CisJZm9ybWF0LT5mbXQucGl4LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BB Q0VfU01QVEUxNzBNOworCWZvcm1hdC0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfSU5URVJM QUNFRDsKKworI2lmIDAKKwkvKiBhdmFpbGFibGUgc2luY2Ugd2hhdCBrZXJuZWwgdmVyc2lvbiA/ ICovCisJZm9ybWF0LT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX1RCOwor I2VuZGlmCisKKwllbTI4eHhfdmlkZW9kYmcoIiVzOiByZXR1cm5lZCAlZHglZCAoJWQsICVkKVxu IiwKKwkJY21kID09IFZJRElPQ19UUllfRk1UID8KKwkJIlZJRElPQ19UUllfRk1UIiA6IlZJRElP Q19TX0ZNVCIsCisJCWZvcm1hdC0+Zm10LnBpeC53aWR0aCwgZm9ybWF0LT5mbXQucGl4LmhlaWdo dCwgaHNjYWxlLCB2c2NhbGUpOworCisJaWYgKGNtZCA9PSBWSURJT0NfVFJZX0ZNVCkgeworCQly ZXR1cm4gMDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fZnJhbWVzOyBpKyspCisJ CWlmIChkZXYtPmZyYW1lW2ldLnZtYV91c2VfY291bnQpIHsKKwkJCWVtMjh4eF92aWRlb2RiZygi VklESU9DX1NfRk1UIGZhaWxlZC4gIgorCQkJCSJVbm1hcCB0aGUgYnVmZmVycyBmaXJzdC5cbiIp OworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCS8qIHN0b3AgaW8gaW4gY2FzZSBpdCBpcyBh bHJlYWR5IGluIHByb2dyZXNzICovCisKKwkvKiBzZXQgbmV3IGltYWdlIHNpemUgKi8KKwlkZXYt PndpZHRoID0gd2lkdGg7CisJZGV2LT5oZWlnaHQgPSBoZWlnaHQ7CisJZGV2LT5mcmFtZV9zaXpl ID0gZGV2LT53aWR0aCAqIGRldi0+aGVpZ2h0ICogMjsKKwlkZXYtPmZpZWxkX3NpemUgPSBkZXYt PmZyYW1lX3NpemUgPj4gMTsKKwlkZXYtPmJ5dGVzcGVybGluZSA9IGRldi0+d2lkdGggKiAyOwor CWRldi0+aHNjYWxlID0gaHNjYWxlOworCWRldi0+dnNjYWxlID0gdnNjYWxlOworCWRldi0+dmJp X2ZyYW1lX3NpemUgPSA3MjAgKiAyICoKKwkJKGRldi0+dHZub3JtLT52YmlfY291bnRfMCArIGRl di0+dHZub3JtLT52YmlfY291bnRfMSk7CisJZGV2LT52YmlfZmllbGRfc2l6ZSA9IGRldi0+dmJp X2ZyYW1lX3NpemUgPj4gMTsKKworCWlmIChkZXYtPnZpZGVvX3N0cmVhbSA9PSBTVFJFQU1fT04p IHsKKwkJZW0yOHh4X3ZpZGVvZGJnKCJWSURJT0NfU0VUX0ZNVDogaW50ZXJ1cHRpbmcgdmlkZW8g c3RyZWFtXG4iKTsKKwkJcmV0ID0gZW0yOHh4X3N0cmVhbV9pbnRlcnJ1cHQoZGV2LCBFTTI4WFhf VklERU8pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisJaWYgKGRldi0+dmJpX3N0 cmVhbSA9PSBTVFJFQU1fT04pIHsKKwkJZW0yOHh4X3ZpZGVvZGJnKCJWSURJT0NfU0VUX0ZNVDog aW50ZXJ1cHRpbmcgdmJpIHN0cmVhbVxuIik7CisJCXJldCA9IGVtMjh4eF9zdHJlYW1faW50ZXJy dXB0KGRldiwgRU0yOFhYX1ZCSSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwor CWVtMjh4eF9yZWxlYXNlX2J1ZmZlcnMoZGV2LCBFTTI4WFhfVklERU8pOworCWVtMjh4eF9yZWxl YXNlX2J1ZmZlcnMoZGV2LCBFTTI4WFhfVkJJKTsKKwlkZXYtPnZpZGVvX2lvID0gSU9fTk9ORTsK KwlkZXYtPnZiaV9pbyA9IElPX05PTkU7CisJZW0yOHh4X3VuaW5pdF9pc29jKGRldik7CisJZW0y OHh4X3NldF9hbHRlcm5hdGUoZGV2KTsKKwllbTI4eHhfY2FwdHVyZV9zdGFydChkZXYsIDEpOwor CWVtMjh4eF9yZXNvbHV0aW9uX3NldChkZXYpOworCWVtMjh4eF9pbml0X2lzb2MoZGV2KTsKKwly ZXR1cm4gMDsKK30KKworLyoKKyAqIGVtMjh4eF92NGwyX2RvX2lvY3RsKCkKKyAqIFRoaXMgZnVu Y3Rpb24gaXMgX25vdF8gY2FsbGVkIGRpcmVjdGx5LCBidXQgZnJvbQorICogZW0yOHh4X3Y0bDJf aW9jdGwuIFVzZXJzcGFjZQorICogY29weWluZyBpcyBkb25lIGFscmVhZHksIGFyZyBpcyBhIGtl cm5lbCBwb2ludGVyLgorICovCitzdGF0aWMgaW50IGVtMjh4eF9kb19pb2N0bChzdHJ1Y3QgaW5v ZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSAgIHN0cnVjdCBlbTI4eHggKmRldiwg dW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnLAorCQkJICAgdjRsMl9raW9jdGwgZHJpdmVyX2lv Y3RsKQoreworCWludCByZXQ7CisJc3RydWN0IGVtMjh4eF9maCAqZmggPSBmaWxwLT5wcml2YXRl X2RhdGE7CisKKwlzd2l0Y2ggKGNtZCkgeworCQkvKiAtLS0tLS0tLS0tIHR2IG5vcm1zIC0tLS0t LS0tLS0gKi8KKwljYXNlIFZJRElPQ19FTlVNU1REOgorCXsKKwkJc3RydWN0IHY0bDJfc3RhbmRh cmQgKmUgPSBhcmc7CisJCXVuc2lnbmVkIGludCBpOworCisJCWkgPSBlLT5pbmRleDsKKwkJaWYg KGkgPj0gTUFYX0VNMjhYWF9UVk5PUk1TIHx8IGRldi0+Ym9hcmQtPnR2bm9ybXNbaV0uaWQgPT0g MCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXJldCA9IHY0bDJfdmlkZW9fc3RkX2NvbnN0cnVj dChlLAorCQkJCWRldi0+Ym9hcmQtPnR2bm9ybXNbZS0+aW5kZXhdLmlkLAorCQkJCWRldi0+Ym9h cmQtPnR2bm9ybXNbZS0+aW5kZXhdLm5hbWUpOworCisJCWUtPmluZGV4ID0gaTsKKwkJaWYgKHJl dCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfR19T VEQ6CisJeworCQl2NGwyX3N0ZF9pZCAqaWQgPSBhcmc7CisJCSppZCA9IGRldi0+dHZub3JtLT5p ZDsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1NfU1REOgorCXsKKwkJdjRsMl9zdGRf aWQgKmlkID0gYXJnOworCQl1bnNpZ25lZCBpbnQgaTsKKwkJaW50IHN3aXRjaF9zdGQgPSAwOwor CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfRU0yOFhYX1RWTk9STVMgJiYKKwkJCQlkZXYtPmJvYXJk LT50dm5vcm1zW2ldLmlkOyBpKyspCisJCQlpZiAoZGV2LT5ib2FyZC0+dHZub3Jtc1tpXS5pZCA9 PSAqaWQpCisJCQkJYnJlYWs7CisKKwkJaWYgKGkgPT0gTUFYX0VNMjhYWF9UVk5PUk1TIHx8IGRl di0+Ym9hcmQtPnR2bm9ybXNbaV0uaWQgPT0gMCkKKwkJCWZvciAoaSA9IDA7IGkgPCBNQVhfRU0y OFhYX1RWTk9STVMgJiYKKwkJCQkJZGV2LT5ib2FyZC0+dHZub3Jtc1tpXS5pZDsgaSsrKQorCQkJ CWlmICgoKmlkICYgZGV2LT5ib2FyZC0+dHZub3Jtc1tpXS5pZCkgJiYKKwkJCQkJCWRldi0+Ym9h cmQtPnR2bm9ybXNbaV0uaWQgIT0gMCkKKwkJCQkJYnJlYWs7CisKKwkJaWYgKGkgPT0gTUFYX0VN MjhYWF9UVk5PUk1TIHx8IGRldi0+Ym9hcmQtPnR2bm9ybXNbaV0uaWQgPT0gMCkKKwkJCXJldHVy biAtRUlOVkFMOworCisJCWlmICgoKGRldi0+dHZub3JtLT5pZCAmIFY0TDJfU1REX1NFQ0FNKSAm JgorCQkJKGRldi0+Ym9hcmQtPnR2bm9ybXNbaV0uaWQgJiBWNEwyX1NURF9TRUNBTSkgPT0gMCkg fHwKKwkJICAgKCgoZGV2LT50dm5vcm0tPmlkICYgVjRMMl9TVERfU0VDQU0pID09IDApICYmCisJ CSAgICAoZGV2LT5ib2FyZC0+dHZub3Jtc1tpXS5pZCAmIFY0TDJfU1REX1NFQ0FNKSkpIHsKKwkJ CXN3aXRjaF9zdGQgPSAxOworCQl9CisKKwkJaWYgKCgoZGV2LT50dm5vcm0tPmlkICYgVjRMMl9T VERfNjI1XzUwKSAmJgorCQkgICAgKChkZXYtPmJvYXJkLT50dm5vcm1zW2ldLmlkICYgVjRMMl9T VERfNjI1XzUwKSA9PSAwKSkgfHwKKwkJICAgICAgKCgoZGV2LT50dm5vcm0tPmlkICYgVjRMMl9T VERfNjI1XzUwKSA9PSAwKSAmJgorCQkgICAgICAoZGV2LT5ib2FyZC0+dHZub3Jtc1tpXS5pZCAm IFY0TDJfU1REXzYyNV81MCkpKSB7CisJCQlpZiAoZGV2LT52Ymlfc3RyZWFtID09IFNUUkVBTV9P TiB8fAorCQkJICAgIGRldi0+dmlkZW9fc3RyZWFtID09IFNUUkVBTV9PTikgeworCQkJCXByaW50 ayhLRVJOX0lORk8iZW0yOHh4OiBkb24ndCBzd2l0Y2ggdGhlIHN0YW5kYXJkICIKKwkJCQkJCSJ3 aGlsZSB0aGUgZGV2aWNlIGlzIGNhcHR1cmluZyIpOworCQkJCXJldHVybiAtRUJVU1k7CisJCQl9 CisJCQlkZXYtPnZiaV9mcmFtZV9zaXplID0gNzIwICogMiAqCisJCQkJKGRldi0+Ym9hcmQtPnR2 bm9ybXNbaV0udmJpX2NvdW50XzAgKyBkZXYtPmJvYXJkLT50dm5vcm1zW2ldLnZiaV9jb3VudF8x KTsKKwkJCWRldi0+dmJpX2ZpZWxkX3NpemUgPSBkZXYtPnZiaV9mcmFtZV9zaXplID4+IDE7CisJ CX0KKworCQlkZXYtPnR2bm9ybSA9ICZkZXYtPmJvYXJkLT50dm5vcm1zW2ldOworCisJCWlmIChk ZXYtPmRldl9tb2RlcyAmIEVNMjhYWF9WQkkpCisJCQllbTI4eHhfc2V0X3ZiaShkZXYsIDEpOwor CisJCWVtMjh4eF9zZXRfbm9ybShkZXYsIGRldi0+d2lkdGgsIGRldi0+aGVpZ2h0KTsKKworCQlp ZiAoZGV2LT5oYXNfaW50dHVuZXIpIHsKKwkJCXN3aXRjaCAoZGV2LT50dW5lcl90eXBlKSB7CisJ CQljYXNlIFRVTkVSX1hDRUlWRV9YQzMwMjg6CisJCQl7CisJCQkJc3RydWN0IHhjMzAyOF9pbml0 X2NtZCBjbWQ7CisJCQkJaW50IGdwaW9fYXJnOworCQkJCWNtZC5uZXdfdHZfbW9kZV9wdHIgPSBk ZXYtPnR2bm9ybS0+dHZfbW9kZTsKKwkJCQljbWQubmV3X2NoYW5uZWxfbWFwX3B0ciA9CisJCQkJ CWRldi0+dHZub3JtLT5jaGFubmVsbWFwOworCisJCQkJaWYgKHN3aXRjaF9zdGQpIHsKKwkJCQkJ aWYgKCppZCAmIFY0TDJfU1REX1NFQ0FNKQorCQkJCQkJZ3Bpb19hcmcgPSBFTTI4WFhfUkVHX09O OworCQkJCQllbHNlCisJCQkJCQlncGlvX2FyZyA9IEVNMjhYWF9SRUdfT0ZGOworCisJCQkJCWVt Mjh4eF9ncGlvX2NvbnRyb2woZGV2LAorCQkJCQkJCUVNMjhYWF9YQzMwMjhfU0VDQU0sCisJCQkJ CQkJJmdwaW9fYXJnKTsKKwkJCQl9CisKKwkJCQlpZiAoZGV2LT50dW5lciAmJiBkZXYtPnR1bmVy LT50dW5lcl9jbWQpCisJCQkJCWRldi0+dHVuZXItPnR1bmVyX2NtZChkZXYtPnR1bmVyLAorCQkJ CQkJCVhDMzAyOF9JTklUX1RVTkVSLAorCQkJCQkJCSZjbWQpOworCQkJCWJyZWFrOworCQkJfQor CQkJY2FzZSBUVU5FUl9YQ0VJVkVfWEM1MDAwOgorCQkJeworCQkJCXN0cnVjdCB4Y19zdGRfY29u ZiBjbWQ7CisJCQkJY21kLmluZGV4ID0gZGV2LT50dm5vcm0tPmluZGV4OworCQkJCWRldi0+dHVu ZXItPnR1bmVyX2NtZChkZXYtPnR1bmVyLAorCQkJCQkJWEM1MDAwX1NFVF9NT0RFLAorCQkJCQkJ JmNtZCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQor CQl9CisKKwkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfU19TVEQsCisJCQkJ JmRldi0+dHZub3JtLT5pZCk7CisKKwkJcmV0dXJuIDA7CisJfQorCisJLyogLS0tLS0tIGlucHV0 IHN3aXRjaGluZyAtLS0tLS0tLS0tICovCisJY2FzZSBWSURJT0NfRU5VTUlOUFVUOgorCXsKKwkJ c3RydWN0IHY0bDJfaW5wdXQgKmkgPSBhcmc7CisJCXVuc2lnbmVkIGludCBuOworCQlzdGF0aWMg Y29uc3QgY2hhciAqaW5hbWVbXSA9IHsKKwkJCVtFTTI4WFhfVk1VWF9DT01QT1NJVEUxXSA9ICJD b21wb3NpdGUxIiwKKwkJCVtFTTI4WFhfVk1VWF9DT01QT1NJVEUyXSA9ICJDb21wb3NpdGUyIiwK KwkJCVtFTTI4WFhfVk1VWF9DT01QT1NJVEUzXSA9ICJDb21wb3NpdGUzIiwKKwkJCVtFTTI4WFhf Vk1VWF9DT01QT1NJVEU0XSA9ICJDb21wb3NpdGU0IiwKKwkJCVtFTTI4WFhfVk1VWF9TVklERU9d ID0gIlMtVmlkZW8iLAorCQkJW0VNMjhYWF9WTVVYX1RFTEVWSVNJT05dID0gIlRlbGV2aXNpb24i LAorCQkJW0VNMjhYWF9WTVVYX0NBQkxFXSA9ICJDYWJsZSBUViIsCisJCQlbRU0yOFhYX1ZNVVhf RFZCXSA9ICJEVkIiLAorCQkJW0VNMjhYWF9WTVVYX0RFQlVHXSA9ICJmb3IgZGVidWcgb25seSIs CisJCX07CisKKwkJbiA9IGktPmluZGV4OworCQlpZiAobiA+PSBNQVhfRU0yOFhYX0lOUFVUKQor CQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICgwID09IElOUFVUKG4pLT50eXBlKQorCQkJcmV0dXJu IC1FSU5WQUw7CisJCW1lbXNldChpLCAwLCBzaXplb2YoKmkpKTsKKwkJaS0+aW5kZXggPSBuOwor CQlpLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKKwkJc3RyY3B5KGktPm5hbWUsIGlu YW1lW0lOUFVUKG4pLT50eXBlXSk7CisJCWlmICgoRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiA9PSBJ TlBVVChuKS0+dHlwZSkgfHwKKwkJCShFTTI4WFhfVk1VWF9DQUJMRSA9PSBJTlBVVChuKS0+dHlw ZSkpCisJCQlpLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX1RVTkVSOworCQlmb3IgKG4gPSAwOyBk ZXYtPmJvYXJkLT50dm5vcm1zW25dLmlkOyBuKyspCisJCQlpLT5zdGQgfD0gZGV2LT5ib2FyZC0+ dHZub3Jtc1tuXS5pZDsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX0dfSU5QVVQ6CisJ eworCQlpbnQgKmkgPSBhcmc7CisJCSppID0gZGV2LT5jdGxfaW5wdXQ7CisKKwkJcmV0dXJuIDA7 CisJfQorCWNhc2UgVklESU9DX1NfSU5QVVQ6CisJeworCQlpbnQgKmluZGV4ID0gYXJnOworCisJ CWlmICgqaW5kZXggPj0gTUFYX0VNMjhYWF9JTlBVVCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJ CWlmICgwID09IElOUFVUKCppbmRleCktPnR5cGUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQl2 aWRlb19tdXgoZGV2LCAqaW5kZXgpOworCisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19H X0FVRElPOgorCXsKKwkJc3RydWN0IHY0bDJfYXVkaW8gKmEgPSBhcmc7CisJCXVuc2lnbmVkIGlu dCBpbmRleCA9IGEtPmluZGV4OworCisJCWlmIChhLT5pbmRleCA+IDEpCisJCQlyZXR1cm4gLUVJ TlZBTDsKKwkJbWVtc2V0KGEsIDAsIHNpemVvZigqYSkpOworCQlpbmRleCA9IGRldi0+Y3RsX2Fp bnB1dDsKKworCQlpZiAoaW5kZXggPT0gMCkKKwkJCXN0cmNweShhLT5uYW1lLCAiVGVsZXZpc2lv biIpOworCQllbHNlCisJCQlzdHJjcHkoYS0+bmFtZSwgIkxpbmUgSW4iKTsKKworCQlhLT5jYXBh YmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOworCQlhLT5pbmRleCA9IGluZGV4OworCQlyZXR1 cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfU19BVURJTzoKKwl7CisJCXN0cnVjdCB2NGwyX2F1ZGlv ICphID0gYXJnOworCisJCWlmIChhLT5pbmRleCAhPSBkZXYtPmN0bF9haW5wdXQpCisJCQlyZXR1 cm4gLUVJTlZBTDsKKworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiAtLS0gY29udHJvbHMgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCWNhc2UgVklESU9D X1FVRVJZQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7CisJCWlu dCBpLCBpZCA9IHFjLT5pZDsKKwkJaW50IHJldHZhbDsKKwkJaWYgKGZoLT50eXBlID09IEVNMjhY WF9SQURJTykKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW1lbXNldChxYywgMCwgc2l6ZW9mKCpx YykpOworCQlxYy0+aWQgPSBpZDsKKworCQlpZiAoIWRldi0+aGFzX21zcDM0eHgpIHsKKwkJCWZv ciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVtMjh4eF9xY3RybCk7IGkrKykgeworCQkJCWlmIChx Yy0+aWQgJiYgcWMtPmlkID09IGVtMjh4eF9xY3RybFtpXS5pZCkgeworCQkJCQltZW1jcHkocWMs ICYoZW0yOHh4X3FjdHJsW2ldKSwKKwkJCQkJc2l6ZW9mKCpxYykpOworCQkJCQlyZXR1cm4gMDsK KwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKGRldi0+ZW0yOHh4X3FjdHJsKSB7CisJCQlyZXR2YWwg PSBkZXYtPmVtMjh4eF9xY3RybChhcmcpOworCQkJaWYgKHJldHZhbCA9PSAwKQorCQkJCXJldHVy biAwOworCQl9CisKKwkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBjbWQsIHFjKTsKKwor CQlpZiAocWMtPnR5cGUpCisJCQlyZXR1cm4gMDsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7 CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19HX0NUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9j b250cm9sICpjdHJsID0gYXJnOworCQlpbnQgcmV0dmFsID0gLUVJTlZBTDsKKwkJaWYgKGZoLT50 eXBlID09IEVNMjhYWF9SQURJTykKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICghZGV2LT5o YXNfbXNwMzR4eCkKKwkJCXJldHZhbCA9IGVtMjh4eF9nZXRfY3RybChkZXYsIGN0cmwpOworCQlp ZiAocmV0dmFsID09IC1FSU5WQUwpIHsKKwkJCWlmIChkZXYtPmRlY29kZXIgPT0gRU0yOFhYX1RW UDUxNTApIHsKKwkJCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIGNtZCwgYXJnKTsKKwkJ CQlyZXR1cm4gMDsKKwkJCX0KKworCQkJcmV0dXJuIHNhYTcxMXhfZ2V0X2N0cmwoZGV2LCBjdHJs KTsKKwkJfSBlbHNlIGlmIChkZXYtPmVtMjh4eF9nY3RybCkKKwkJCXJldHVybiBkZXYtPmVtMjh4 eF9jdHJsKGRldiwgYXJnKTsKKwkJZWxzZQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisJY2FzZSBW SURJT0NfU19DVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKKwkJ dTggaTsKKwkJaWYgKGZoLT50eXBlID09IEVNMjhYWF9SQURJTykKKwkJCXJldHVybiAtRUlOVkFM OworCisJCWlmICghZGV2LT5oYXNfbXNwMzR4eCkgeworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUoZW0yOHh4X3FjdHJsKTsgaSsrKSB7CisJCQkJaWYgKGN0cmwtPmlkID09IGVtMjh4eF9x Y3RybFtpXS5pZCkgeworCQkJCQlpZiAoY3RybC0+dmFsdWUgPAorCQkJCQllbTI4eHhfcWN0cmxb aV0ubWluaW11bQorCQkJCQl8fCBjdHJsLT52YWx1ZSA+CisJCQkJCWVtMjh4eF9xY3RybFtpXS5t YXhpbXVtKQorCQkJCQkJcmV0dXJuIC1FUkFOR0U7CisJCQkJCXJldHVybiBlbTI4eHhfc2V0X2N0 cmwoZGV2LCBjdHJsKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoZGV2LT5kZWNvZGVyID09 IEVNMjhYWF9UVlA1MTUwKSB7CisJCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIGNtZCwg YXJnKTsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgaWYgKCFkZXYtPmhhc19tc3AzNHh4KSB7CisJ CQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShlbTI4eHhfcWN0cmwpOyBpKyspIHsKKwkJCQlp ZiAoY3RybC0+aWQgPT0gZW0yOHh4X3FjdHJsW2ldLmlkKSB7CisJCQkJCWlmIChjdHJsLT52YWx1 ZSA8CisJCQkJCWVtMjh4eF9xY3RybFtpXS5taW5pbXVtCisJCQkJCXx8IGN0cmwtPnZhbHVlID4K KwkJCQkJZW0yOHh4X3FjdHJsW2ldLm1heGltdW0pCisJCQkJCQlyZXR1cm4gLUVSQU5HRTsKKwkJ CQkJcmV0dXJuIGVtMjh4eF9zZXRfY3RybChkZXYsIGN0cmwpOworCQkJCX0KKwkJCX0KKwkJCWZv ciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhYTcxMXhfcWN0cmwpOyBpKyspIHsKKwkJCQlpZiAo Y3RybC0+aWQgPT0gc2FhNzExeF9xY3RybFtpXS5pZCkgeworCQkJCQlpZiAoY3RybC0+dmFsdWUg PAorCQkJCQlzYWE3MTF4X3FjdHJsW2ldLm1pbmltdW0KKwkJCQkJfHwgY3RybC0+dmFsdWUgPgor CQkJCQlzYWE3MTF4X3FjdHJsW2ldLm1heGltdW0pCisJCQkJCQlyZXR1cm4gLUVSQU5HRTsKKwkJ CQkJcmV0dXJuIHNhYTcxMXhfc2V0X2N0cmwoZGV2LCBjdHJsKTsKKwkJCQl9CisJCQl9CisJCX0K KworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogLS0tIHR1bmVyIGlvY3RscyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwljYXNlIFZJRElPQ19HX1RVTkVS OgorCXsKKwkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7CisJCXN0YXRpYyB1bnNpZ25lZCBp bnQgdHZfcmFuZ2VbMl0gPSB7IDQ0LCA5NTggfTsKKwkJdW5zaWduZWQgc2hvcnQgaW50IGxvY2tf c3RhdHVzID0gMDsKKworCQlpZiAoMCAhPSB0LT5pbmRleCkKKwkJCXJldHVybiAtRUlOVkFMOwor CisJCXN3aXRjaCAoZmgtPnR5cGUpIHsKKwkJY2FzZSBFTTI4WFhfUkFESU86CisJCQl0LT50eXBl ID0gVjRMMl9UVU5FUl9SQURJTzsKKwkJCS8qIGVtMjg4MiArIGN4MjU4NHggKyB4YzUwMDAgdXNl cyB0aGUgdmlkZW9kZWNvZGVyCisJCQkgICBmb3IgcmFkaW8gZGV0ZWN0aW9uICovCisJCQllbTI4 eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIGNtZCwgdCk7CisJCQlicmVhazsKKwkJY2FzZSBFTTI4 WFhfVkJJOgorCQljYXNlIEVNMjhYWF9WSURFTzoKKwkJCW1lbXNldCh0LCAwLCBzaXplb2YoKnQp KTsKKwkJCXN0cmNweSh0LT5uYW1lLCAiVHVuZXIiKTsKKwkJCXQtPnR5cGUgPSBWNEwyX1RVTkVS X0FOQUxPR19UVjsKKwkJCXQtPmNhcGFiaWxpdHkgfD0gVjRMMl9UVU5FUl9DQVBfTk9STTsKKwkJ CXQtPnJhbmdlbG93ID0gdHZfcmFuZ2VbMF0gKiAxNjsKKwkJCXQtPnJhbmdlaGlnaCA9IHR2X3Jh bmdlWzFdICogMTY7CisKKwkJCWlmIChkZXYtPnR1bmVyICYmIGRldi0+dHVuZXItPmdldF9sb2Nr X3N0YXR1cykgeworCQkJCWRldi0+dHVuZXItPmdldF9sb2NrX3N0YXR1cyhkZXYtPnR1bmVyLCAm bG9ja19zdGF0dXMpOworCQkJCWlmIChsb2NrX3N0YXR1cyA9PSAxKQorCQkJCQl0LT5zaWduYWwg PSAweGZmZmY7CisJCQl9IGVsc2UKKwkJCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIGNt ZCwgdCk7CisKKwkJCWVtMjh4eF92aWRlb2RiZygiVklESU9fR19UVU5FUjogc2lnbmFsID0gJXgs IGFmYyA9ICV4XG4iLCB0LT5zaWduYWwsCisJCQkJCXQtPmFmYyk7CisJCX0KKwkJcmV0dXJuIDA7 CisJfQorCWNhc2UgVklESU9DX1NfVFVORVI6CisJeworCQlzdHJ1Y3QgdjRsMl90dW5lciAqdCA9 IGFyZzsKKworCQlpZiAoMCAhPSB0LT5pbmRleCkKKwkJCXJldHVybiAtRUlOVkFMOworCQkvKiB0 aGVyZSBhcmUgb25seSBhIHZlcnkgZmV3IGRldmljZXMgd2l0aCBtb3JlIHRoYW4gb25lIHR1bmVy CisJCSAgIGF2YWlsYWJsZSwgdGhpcyBjYW4gYmUgdXBkYXRlZCB0byB3b3JrIGNvcnJlY3RseSBs YXRlciAqLworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6CisJewor CQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7CisKKwkJbWVtc2V0KGYsIDAsIHNpemVv ZigqZikpOworCQlzd2l0Y2ggKGZoLT50eXBlKSB7CisJCWNhc2UgRU0yOFhYX1JBRElPOgorCQkJ Zi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJCQlmLT5mcmVxdWVuY3kgPSBkZXYtPnJjdGxf ZnJlcTsKKwkJCWJyZWFrOworCQljYXNlIEVNMjhYWF9WSURFTzoKKwkJY2FzZSBFTTI4WFhfVkJJ OgorCQkJZi0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCQkJZi0+ZnJlcXVlbmN5ID0g ZGV2LT52Y3RsX2ZyZXE7CisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBW SURJT0NfU19GUkVRVUVOQ1k6CisJeworCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7 CisKKwkJaWYgKDAgIT0gZi0+dHVuZXIpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoKGZo LT50eXBlID09IEVNMjhYWF9SQURJTyAmJiBmLT50eXBlICE9IFY0TDJfVFVORVJfUkFESU8pIHx8 CisJCQkoZmgtPnR5cGUgPT0gRU0yOFhYX1ZJREVPICYmIGYtPnR5cGUgIT0gVjRMMl9UVU5FUl9B TkFMT0dfVFYpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJc3dpdGNoIChmaC0+dHlwZSkgewor CQljYXNlIEVNMjhYWF9SQURJTzoKKwkJCWRldi0+cmN0bF9mcmVxID0gZi0+ZnJlcXVlbmN5Owor CQkJYnJlYWs7CisJCWNhc2UgRU0yOFhYX1ZJREVPOgorCQljYXNlIEVNMjhYWF9WQkk6CisJCQlk ZXYtPnZjdGxfZnJlcSA9IGYtPmZyZXF1ZW5jeTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGRl di0+dHVuZXIpIHsKKwkJCXN3aXRjaCAoZmgtPnR5cGUpIHsKKwkJCWNhc2UgRU0yOFhYX1ZCSToK KwkJCWNhc2UgRU0yOFhYX1ZJREVPOgorCQkJCWRldi0+dHVuZXItPnNldF9mcmVxdWVuY3koZGV2 LT50dW5lciwgKHVuc2lnbmVkIGxvbmcpZi0+ZnJlcXVlbmN5KjEwMDAvMTYqMTAwMCk7CisJCQkJ YnJlYWs7CisJCQljYXNlIEVNMjhYWF9SQURJTzoKKwkJCQlkZXYtPnR1bmVyLT5zZXRfZnJlcXVl bmN5KGRldi0+dHVuZXIsICh1bnNpZ25lZCBsb25nKWYtPmZyZXF1ZW5jeS8xNioxMDAwKTsKKwkJ CQlicmVhazsKKwkJCX0KKwkJfSBlbHNlCisJCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYs IFZJRElPQ19TX0ZSRVFVRU5DWSwgZik7CisKKwkJcmV0dXJuIDA7CisJfQorI2lmIDAJCQkJLyog aW9jdGwgaXMgb3B0aW9uYWwgKi8KKwljYXNlIFZJRElPQ19HX1BBUk06CisJeworCQlzdHJ1Y3Qg djRsMl9jYXB0dXJlcGFybSAqcGFybSA9IGFyZzsKKwkJbWVtc2V0KHBhcm0sIDAsIHNpemVvZigq cGFybSkpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKwljYXNlIFZJRElPQ19DUk9QQ0FQOgor CXsKKwkJc3RydWN0IHY0bDJfY3JvcGNhcCAqY2MgPSBhcmc7CisKKwkJaWYgKGNjLT50eXBlICE9 IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQljYy0+ Ym91bmRzLmxlZnQgPSAwOworCQljYy0+Ym91bmRzLnRvcCA9IDA7CisJCWNjLT5ib3VuZHMud2lk dGggPSBkZXYtPndpZHRoOworCQljYy0+Ym91bmRzLmhlaWdodCA9IGRldi0+aGVpZ2h0OworCQlj Yy0+ZGVmcmVjdCA9IGNjLT5ib3VuZHM7CisJCWNjLT5waXhlbGFzcGVjdC5udW1lcmF0b3IgPSA1 NDsJLyogNDozIEZJWE1FOiByZW1vdmUgbWFnaWMgbnVtYmVycyAqLworCQljYy0+cGl4ZWxhc3Bl Y3QuZGVub21pbmF0b3IgPSA1OTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1NUUkVB TU9OOgorCXsKKwkJaW50ICp0eXBlID0gYXJnOworCQlpZiAoZmgtPnR5cGUgPT0gRU0yOFhYX1ZC SSkgeworCQkJZGV2LT52Ymlfc3RyZWFtID0gU1RSRUFNX09OOworCQkJcmV0dXJuIDA7CisJCX0K KworCQlpZiAoKnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFCisJCQl8fCBkZXYt PnZpZGVvX2lvICE9IElPX01NQVApCisJCQlyZXR1cm4gLUVJTlZBTDsKKyNpZiAwCisJCWlmIChs aXN0X2VtcHR5KCZkZXYtPmlucXVldWUpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisjZW5kaWYKKwor CQlkZXYtPnZpZGVvX3N0cmVhbSA9IFNUUkVBTV9PTjsKKworCQllbTI4eHhfdmlkZW9kYmcoIlZJ RElPQ19TVFJFQU1PTjogc3RhcnRpbmcgc3RyZWFtXG4iKTsKKworCQlyZXR1cm4gMDsKKworCX0K KwljYXNlIFZJRElPQ19TVFJFQU1PRkY6CisJeworCQlpbnQgKnR5cGUgPSBhcmc7CisJCWludCBy ZXQ7CisKKwkJaWYgKGZoLT50eXBlID09IEVNMjhYWF9WQkkpIHsKKwkJCWRldi0+dmJpX3JlYWRl ciA9IDA7CisJCQlmaC0+cmVhZGVyID0gMDsKKwkJCWlmIChkZXYtPnZiaV9zdHJlYW0gPT0gU1RS RUFNX09OKSB7CisJCQkJZW0yOHh4X3ZpZGVvZGJnKCJWSURJT0NfU1RSRUFNT0ZGOiBpbnRlcnJ1 cHRpbmcgc3RyZWFtXG4iKTsKKwkJCQlyZXQgPSBlbTI4eHhfc3RyZWFtX2ludGVycnVwdChkZXYs IEVNMjhYWF9WQkkpOworCQkJCWlmIChyZXQpCisJCQkJCXJldHVybiByZXQ7CisJCQl9CisJCQll bTI4eHhfZW1wdHlfZnJhbWVxdWV1ZXMoZGV2LCBFTTI4WFhfVkJJKTsKKwkJCWRldi0+dmJpX3N0 cmVhbSA9IFNUUkVBTV9PRkY7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmICgqdHlwZSAhPSBW NEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUKKwkJCXx8IGRldi0+dmlkZW9faW8gIT0gSU9fTU1B UCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChkZXYtPnZpZGVvX3N0cmVhbSA9PSBTVFJF QU1fT04pIHsKKwkJCWVtMjh4eF92aWRlb2RiZygiVklESU9DX1NUUkVBTU9GRjogaW50ZXJydXB0 aW5nIHN0cmVhbVxuIik7CisJCQlyZXQgPSBlbTI4eHhfc3RyZWFtX2ludGVycnVwdChkZXYsIEVN MjhYWF9WSURFTyk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKwkJZGV2LT52 aWRlb19yZWFkZXIgPSAwOworCQlkZXYtPnZpZGVvX3N0cmVhbSA9IFNUUkVBTV9PRkY7CisJCWZo LT5yZWFkZXIgPSAwOworCQllbTI4eHhfZW1wdHlfZnJhbWVxdWV1ZXMoZGV2LCBFTTI4WFhfVklE RU8pOworCisJCXJldHVybiAwOworCX0KKwlkZWZhdWx0OgorCQlyZXR1cm4gdjRsX2NvbXBhdF90 cmFuc2xhdGVfaW9jdGwoaW5vZGUsIGZpbHAsIGNtZCwgYXJnLAorCQkJCQkJICBkcml2ZXJfaW9j dGwpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGVtMjh4eF92NGwyX2RvX2lvY3RsKCkK KyAqIFRoaXMgZnVuY3Rpb24gaXMgX25vdF8gY2FsbGVkIGRpcmVjdGx5LCBidXQgZnJvbQorICog ZW0yOHh4X3Y0bDJfaW9jdGwuIFVzZXJzcGFjZQorICogY29weWluZyBpcyBkb25lIGFscmVhZHks IGFyZyBpcyBhIGtlcm5lbCBwb2ludGVyLgorICovCitzdGF0aWMgaW50IGVtMjh4eF92aWRlb19k b19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCQkgdW5z aWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBlbTI4eHhfZmggKmZoID0gZmls cC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBlbTI4eHggKmRldiA9IGZoLT5kZXY7CisKKwlpZiAo IWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAodmlkZW9fZGVidWcgPiAxKQorCQl2NGxf cHJpbnRfaW9jdGwoZGV2LT5uYW1lLCBjbWQpOworCisJc3dpdGNoIChjbWQpIHsKKworCQkvKiAt LS0gY2FwYWJpbGl0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAqLworCWNhc2UgVklESU9DX1FVRVJZQ0FQOgorCQl7CisJCXN0cnVjdCB2NGwyX2NhcGFiaWxp dHkgKmNhcCA9IGFyZzsKKworCQltZW1zZXQoY2FwLCAwLCBzaXplb2YoKmNhcCkpOworCQlzdHJs Y3B5KGNhcC0+ZHJpdmVyLCAiZW0yOHh4Iiwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSk7CisJCXN0cmxj cHkoY2FwLT5jYXJkLCBlbTI4eHhfYm9hcmRzW2Rldi0+bW9kZWxdLm5hbWUsCisJCQlzaXplb2Yo Y2FwLT5jYXJkKSk7CisJCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgZGV2LT51ZGV2LT5kZXYuYnVz X2lkLAorCQkJc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKKwkJY2FwLT52ZXJzaW9uID0gRU0yOFhY X1ZFUlNJT05fQ09ERTsKKwkJY2FwLT5jYXBhYmlsaXRpZXMgPQorI2lmIDAKKwkJCQlWNEwyX0NB UF9TTElDRURfVkJJX0NBUFRVUkUgfAorI2VuZGlmCisJCQkJVjRMMl9DQVBfVklERU9fQ0FQVFVS RSB8CisJCQkJVjRMMl9DQVBfQVVESU8gfAorCQkJCVY0TDJfQ0FQX1JFQURXUklURSB8IFY0TDJf Q0FQX1NUUkVBTUlORzsKKwkJaWYgKGRldi0+aGFzX3R1bmVyKQorCQkJY2FwLT5jYXBhYmlsaXRp ZXMgfD0gVjRMMl9DQVBfVFVORVI7CisJCWlmIChkZXYtPmRldl9tb2RlcyAmIEVNMjhYWF9SQURJ TykKKwkJCWNhcC0+Y2FwYWJpbGl0aWVzIHw9IFY0TDJfQ0FQX1RVTkVSOworCQlpZiAoZGV2LT5k ZXZfbW9kZXMgJiBFTTI4WFhfVkJJKQorCQkJY2FwLT5jYXBhYmlsaXRpZXMgfD0gVjRMMl9DQVBf VkJJX0NBUFRVUkU7CisJCXJldHVybiAwOworCX0KKwkvKiAtLS0gY2FwdHVyZSBpb2N0bHMgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCWNhc2UgVklESU9DX0VO VU1fRk1UOgorCXsKKwkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10ZCA9IGFyZzsKKwkJaW50IGlu ZGV4ID0gZm10ZC0+aW5kZXg7CisKKwkJaWYgKGZtdGQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9W SURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGluZGV4ID49IEFSUkFZ X1NJWkUoZW0yOHh4X291dF9mbXQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbWVtc2V0KGZt dGQsIDAsIHNpemVvZigqZm10ZCkpOworCQlmbXRkLT5pbmRleCA9IGluZGV4OworCQlmbXRkLT50 eXBlID0gZW0yOHh4X291dF9mbXRbaW5kZXhdLmZtdC50eXBlOworCQlzdHJjcHkoZm10ZC0+ZGVz Y3JpcHRpb24sIGVtMjh4eF9vdXRfZm10W2luZGV4XS5mbXQuZGVzY3JpcHRpb24pOworCQlmbXRk LT5waXhlbGZvcm1hdCA9IGVtMjh4eF9vdXRfZm10W2luZGV4XS5mbXQucGl4ZWxmb3JtYXQ7CisJ CXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19HX0ZNVDoKKwkJcmV0dXJuIGVtMjh4eF9nZXRf Zm10KGRldiwgKHN0cnVjdCB2NGwyX2Zvcm1hdCAqKSBhcmcpOworCisJY2FzZSBWSURJT0NfVFJZ X0ZNVDoKKwljYXNlIFZJRElPQ19TX0ZNVDoKKwl7CisJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10 ID0gYXJnOworCQlpZiAoKGRldi0+dmlkZW9fcmVhZGVyID09IDEgJiYgZmgtPnJlYWRlciA9PSAw KSB8fAorCQkgICAoZGV2LT52YmlfcmVhZGVyID09IDEgJiYgZmgtPnJlYWRlciA9PSAwKSkgewor CisJCQkvKiB0aGlzIGlzIHNvbWV0aGluZyB0byBzdHJ1Z2dsZSBhcm91bmQgaG93ZXZlciB5b3Ug bmVlZCBpdAorCQkJICAgbXBsYXllciB0cmllcyB0byBzZXQgNjQweDQ4MCBhbmQgb25nb2luZyBm b3JtYXRzIHRpbGwKKwkJCSAgIGl0IGhpdHMgNzIweDU3NiBpZiByZXF1ZXN0ZWQsIGlmIHRoZSBm aXJzdCB0cnkgd2lsbCBmYWlsCisJCQkgICB0aGUgb25nb2luZyB0cmllcyB3aWxsIGFsc28gZmFp bCBhbmQgbXBsYXllciB3aWxsIG5vdAorCQkJICAgd29yayB3aXRoIHRoZSBlbTI4eHggZHJpdmVy CisKKwkJCSAgIHRoZSBlbmFibGVkIGNvZGUgaXMgbXBsYXllciBhd2FyZSwgY29tbWVudGVkIG91 dCBjb2RlCisJCQkgICB3b3VsZCBiZSBhIHNtYWxsIHdvcmthcm91bmQgbm90IHBlcmZlY3QgZWl0 aGVyIGJ1dAorCQkJICAgc2xpZ2h0bHkgYmV0dGVyLgorCQkJICovCisJCQlpZiAoZmgtPnR5cGUg PT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCQkJZm10LT5mbXQucGl4LmhlaWdo dCA9IGRldi0+aGVpZ2h0OworCQkJCWZtdC0+Zm10LnBpeC53aWR0aCA9IGRldi0+d2lkdGg7CisJ CQkJcmV0dXJuIDA7CisjaWYgMAorCQkJCWlmIChkZXYtPndpZHRoID09IChmbXQtPmZtdC5waXgu d2lkdGggJiAweGZmZmUpICYmCisJCQkJCQlkZXYtPmhlaWdodCA9PSAoZm10LT5mbXQucGl4Lmhl aWdodCAmIDB4ZmZmZSkpIHsKKwkJCQkJZm10LT5mbXQucGl4LmhlaWdodCAmPSAweGZmZmU7CisJ CQkJCWZtdC0+Zm10LnBpeC53aWR0aCAmPSAweGZmZmU7CisJCQkJCXByaW50ayhLRVJOX0lORk8i ZXZlcnl0aGluZyBvayBub3QgY2hhbmdpbmcgYW55dGhpbmcgYW5kIHJldHVybmluZyAwXG4iKTsK KwkJCQkJcmV0dXJuIDA7CisJCQkJfQorI2VuZGlmCisJCQl9CisJCQlwcmludGsoImVtMjh4eC12 aWRlby5jOiBkZXZpY2UgaXMgY3VycmVudGx5IGJ1c3khXG4iKTsKKwkJCXJldHVybiAtRUJVU1k7 CisJCX0KKwkJcmV0dXJuIGVtMjh4eF9zZXRfZm10KGRldiwgY21kLCAoc3RydWN0IHY0bDJfZm9y bWF0ICopYXJnKTsKKwl9CisKKwkvKiBvYnNvbGV0ZSB2NGwxIGltcGxlbWVudGF0aW9uLCBidXQg aXQncyBzdGlsbCB1c2VkIGJ5IHNvbWUgYXBwbGljYXRpb25zIC0KKwkgKiBpdCBzaG91bGQgYmUg aW1wbGVtZW50ZWQgYnV0IHdlIGRvbid0IHN1cHBvcnQgaXQKKwkgKi8KKworCWNhc2UgVklESU9D R01CVUY6CisJeworCQlzdHJ1Y3QgdmlkZW9fbWJ1ZiAqbWJ1ZiA9IGFyZzsKKwkJaW50IGk7CisK KwkJaW50IGdidWZmZXJzID0gRU0yOFhYX05VTV9SRUFEX0ZSQU1FUzsKKwkJaW50IGdidWZzaXpl ID0gUEFHRV9BTElHTihkZXYtPmZyYW1lX3NpemUpOyAvKiBtYXggcmVzb2x1dGlvbiBvZiBlbTI4 eHggYmFzZWQgZGV2aWNlcyAqLworCisJCWlmIChmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJ REVPX0NBUFRVUkUpIHsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKGRldi0+dmlk ZW9faW8gIT0gSU9fTk9ORSkgeworCQkJZW0yOHh4X3ZpZGVvZGJnKCJtZXRob2QgaXMgc2V0IHRv IHJlYWQ7IgorCQkJCSIgY2xvc2UgYW5kIG9wZW4gdGhlIGRldmljZSBhZ2FpbiB0byIKKwkJCQki IGNob29zZSB0aGUgbW1hcCBJL08gbWV0aG9kXG4iKTsKKwkJCXByaW50ayhLRVJOX0lORk8iVklE RU9fSU8gaXMgYnVzeVxuIik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisKKwkJbWVtc2V0KG1i dWYsIDAsIHNpemVvZigqbWJ1ZikpOworCQltYnVmLT5mcmFtZXMgPSBnYnVmZmVyczsKKworCQlt YnVmLT5zaXplID0gZ2J1ZnNpemUgKiBnYnVmZmVyczsKKwkJZm9yIChpID0gMDsgaSA8IGdidWZm ZXJzOyBpKyspIHsKKwkJCW1idWYtPm9mZnNldHNbaV0gPSBpKmdidWZzaXplOworCQl9CisKKwkJ LyogRklYTUU6IHNldHRpbmcgcmVzb2x1dGlvbiB1c2luZyB0aGUgdjRsMSBQSUNUIGNvbW1hbmQg Ki8KKworCQllbTI4eHhfZW1wdHlfZnJhbWVxdWV1ZXMoZGV2LCBFTTI4WFhfVklERU8pOworCQll bTI4eHhfcmVsZWFzZV9idWZmZXJzKGRldiwgRU0yOFhYX1ZJREVPKTsKKworCQlpZiAoIWVtMjh4 eF9yZXF1ZXN0X2J1ZmZlcnMoZGV2LCBFTTI4WFhfTlVNX1JFQURfRlJBTUVTLCBFTTI4WFhfVklE RU8pKSB7CisJCQlwcmludGsoS0VSTl9JTkZPImVtMjh4eC12aWRlby5jOiB1bmFibGUgdG8gbWFw IgorCQkJCQkiIGJ1ZmZlcnNcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlkZXYt PnZpZGVvX3N0cmVhbSA9IFNUUkVBTV9PTjsKKwkJZW0yOHh4X2VtcHR5X2ZyYW1lcXVldWVzKGRl diwgRU0yOFhYX1ZJREVPKTsKKwkJZGV2LT5mcmFtZV9jdXJyZW50ID0gTlVMTDsKKwkJZGV2LT52 aWRlb19pbyA9IElPX01NQVA7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ01DQVBUVVJF OgorCXsKKwkJc3RydWN0IHZpZGVvX21tYXAgKnZtID0gYXJnOworCQl1bnNpZ25lZCBsb25nIGxv Y2tfZmxhZ3M7CisKKwkJaWYgKHZtLT5mb3JtYXQgIT0gVklERU9fUEFMRVRURV9ZVVY0MjIpCisJ CQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoZGV2LT5mcmFtZVt2bS0+ZnJhbWVdLnN0YXRlICE9 IEZfVU5VU0VEKSB7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCisJCWRldi0+ZnJhbWVbdm0t PmZyYW1lXS5zdGF0ZSA9IEZfUVVFVUVEOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnF1 ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCQlsaXN0X2FkZF90YWlsKCZkZXYtPmZyYW1lW3ZtLT5m cmFtZV0uZnJhbWUsICZkZXYtPmlucXVldWUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZk ZXYtPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJ T0NTWU5DOgorCXsKKwkJLyogaW50ICpmcmFtZSA9IGFyZzsgRklYTUUgLSBhcmd1bWVudCBub3Qg dXNlZD8qLworCQlzdHJ1Y3QgZW0yOHh4X2ZyYW1lX3QgKmY7CisJCXVuc2lnbmVkIGxvbmcgbG9j a19mbGFnczsKKwkJaW50IHJldCA9IDA7CisKKwkJaWYgKGxpc3RfZW1wdHkoJmRldi0+b3V0cXVl dWUpKSB7CisJCQlpZiAoZGV2LT52aWRlb19zdHJlYW0gPT0gU1RSRUFNX09GRikgeworCQkJCXJl dHVybiAtRUlOVkFMOworCQkJfQorCQkJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7 CisJCQkJcmV0dXJuIC1FQUdBSU47CisJCQl9CisJCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVw dGlibGUoCisJCQkJCWRldi0+d2FpdF9mcmFtZSwKKwkJCQkJKCFsaXN0X2VtcHR5KCZkZXYtPm91 dHF1ZXVlKSkgfHwKKwkJCQkJKGRldi0+c3RhdGUmREVWX0RJU0NPTk5FQ1RFRCkpOworCQkJaWYg KHJldCkgeworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCQlpZiAoZGV2LT5zdGF0ZSAmIERFVl9E SVNDT05ORUNURUQpIHsKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0KKwkJfQorCisJCXNwaW5f bG9ja19pcnFzYXZlKCZkZXYtPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCQlmID0gbGlzdF9l bnRyeShkZXYtPm91dHF1ZXVlLm5leHQsIHN0cnVjdCBlbTI4eHhfZnJhbWVfdCwgZnJhbWUpOwor CQlsaXN0X2RlbChkZXYtPm91dHF1ZXVlLm5leHQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZkZXYtPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCQlmLT5zdGF0ZSA9IEZfVU5VU0VEOwor CQlyZXR1cm4gMDsKKwl9CisKKwkvKiBlbmQgdjRsMSBjb21wYXQgY29kZSAqLworCisJY2FzZSBW SURJT0NfUkVRQlVGUzoKKwl7CisJCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpyYiA9IGFy ZzsKKwkJdTMyIGk7CisJCWludCByZXQ7CisKKwkJaWYgKHJiLT50eXBlID09IFY0TDJfQlVGX1RZ UEVfVkJJX0NBUFRVUkUgJiYKKwkJCQlyYi0+bWVtb3J5ID09IFY0TDJfTUVNT1JZX01NQVApIHsK KwkJCWlmIChkZXYtPnZiaV9yZWFkZXIgPT0gMSAmJiBmaC0+cmVhZGVyID09IDApCisJCQkJcmV0 dXJuIC1FQlVTWTsKKworCQkJaWYgKGRldi0+dmJpX2lvID09IElPX1JFQUQpIHsKKwkJCQlwcmlu dGsoIm1ldGhvZCBpcyBzZXQgdG8gcmVhZDsiCisJCQkJICAgICAgICIgY2xvc2UgYW5kIG9wZW4g dGhlIGRldmljZSBhZ2FpbiB0byIKKwkJCQkgICAgICAgIiBjaG9vc2UgdGhlIG1tYXAgSS9PIG1l dGhvZFxuIik7CisJCQkJcmV0dXJuIC1FQlVTWTsKKwkJCX0KKwkJCWVtMjh4eF9lbXB0eV9mcmFt ZXF1ZXVlcyhkZXYsIEVNMjhYWF9WQkkpOworCisJCQlpZiAoZGV2LT52Ymlfc3RyZWFtID09IFNU UkVBTV9PTikgeworCQkJCWVtMjh4eF92aWRlb2RiZygiVklESU9DX1JFUUJVRlM6IGludGVycnVw dGluZyBzdHJlYW1cbiIpOworCQkJCXJldCA9IGVtMjh4eF9zdHJlYW1faW50ZXJydXB0KGRldiwg RU0yOFhYX1ZCSSk7CisJCQkJaWYgKHJldCkgeworCQkJCQlwcmludGsoS0VSTl9JTkZPImVtMjh4 eC12aWRlby5jOiBWSURJT0NfUkVRQlVGUyA0XG4iKTsKKwkJCQkJcmV0dXJuIHJldDsKKwkJCQl9 CisJCQl9CisKKwkJCWVtMjh4eF9yZWxlYXNlX2J1ZmZlcnMoZGV2LCBFTTI4WFhfVkJJKTsKKwor CQkJaWYgKHJiLT5jb3VudCkKKwkJCQlyYi0+Y291bnQgPSBlbTI4eHhfcmVxdWVzdF9idWZmZXJz KGRldiwgcmItPmNvdW50LCBFTTI4WFhfVkJJKTsKKworCQkJZGV2LT52YmlfZnJhbWVfY3VycmVu dCA9IE5VTEw7CisKKwkJCWRldi0+dmJpX3N0cmVhbSA9IFNUUkVBTV9PTjsKKwkJCWVtMjh4eF92 aWRlb2RiZygiVklESU9DX1JFUUJVRlM6IHNldHRpbmcgaW8gbWV0aG9kIHRvIG1tYXA6IG51bSBi dWZzICVpXG4iLAorCQkJCQlyYi0+Y291bnQpOworCisJCQlkZXYtPnZiaV9pbyA9IHJiLT5jb3Vu dCA/IElPX01NQVAgOiBJT19OT05FOworCQkJZmgtPnJlYWRlciA9IDE7CisJCQlkZXYtPnZiaV9y ZWFkZXIgPSAxOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAocmItPnR5cGUgIT0gVjRMMl9C VUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJCQlyYi0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01N QVApIHsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKGRldi0+dmlkZW9faW8gPT0g SU9fUkVBRCkgeworCQkJZW0yOHh4X3ZpZGVvZGJnKCJtZXRob2QgaXMgc2V0IHRvIHJlYWQ7Igor CQkJCSIgY2xvc2UgYW5kIG9wZW4gdGhlIGRldmljZSBhZ2FpbiB0byIKKwkJCQkiIGNob29zZSB0 aGUgbW1hcCBJL08gbWV0aG9kXG4iKTsKKwkJCXByaW50ayhLRVJOX0lORk8iZW0yOHh4LXZpZGVv LmM6IFZJRElPQ19SRVFCVUZTIDJcbiIpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCisJCWZv ciAoaSA9IDA7IGkgPCBkZXYtPm51bV9mcmFtZXM7IGkrKykKKwkJCWlmIChkZXYtPmZyYW1lW2ld LnZtYV91c2VfY291bnQpIHsKKwkJCQllbTI4eHhfdmlkZW9kYmcoIlZJRElPQ19SRVFCVUZTIGZh aWxlZDsgcHJldmlvdXMgYnVmZmVycyBhcmUgc3RpbGwgbWFwcGVkXG4iKTsKKwkJCQlwcmludGso S0VSTl9JTkZPImVtMjh4eC12aWRlby5jOiBWSURJT0NfUkVRQlVGUyAzXG4iKTsKKwkJCQlyZXR1 cm4gLUVJTlZBTDsKKwkJCX0KKworCQlpZiAoZGV2LT52aWRlb19zdHJlYW0gPT0gU1RSRUFNX09O KSB7CisJCQllbTI4eHhfdmlkZW9kYmcoIlZJRElPQ19SRVFCVUZTOiBpbnRlcnJ1cHRpbmcgc3Ry ZWFtXG4iKTsKKwkJCXJldCA9IGVtMjh4eF9zdHJlYW1faW50ZXJydXB0KGRldiwgRU0yOFhYX1ZJ REVPKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPImVtMjh4eC12aWRlby5j OiBWSURJT0NfUkVRQlVGUyA0XG4iKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9CisKKwkJ ZW0yOHh4X2VtcHR5X2ZyYW1lcXVldWVzKGRldiwgRU0yOFhYX1ZJREVPKTsKKworCQllbTI4eHhf cmVsZWFzZV9idWZmZXJzKGRldiwgRU0yOFhYX1ZJREVPKTsKKwkJaWYgKHJiLT5jb3VudCkKKwkJ CXJiLT5jb3VudCA9CisJCQkJZW0yOHh4X3JlcXVlc3RfYnVmZmVycyhkZXYsIHJiLT5jb3VudCwg RU0yOFhYX1ZJREVPKTsKKworCQlkZXYtPmZyYW1lX2N1cnJlbnQgPSBOVUxMOworCisJCWRldi0+ dmlkZW9fc3RyZWFtID0gU1RSRUFNX09OOworCQllbTI4eHhfdmlkZW9kYmcoIlZJRElPQ19SRVFC VUZTOiBzZXR0aW5nIGlvIG1ldGhvZCB0byBtbWFwOiBudW0gYnVmcyAlaVxuIiwKKwkJCQlyYi0+ Y291bnQpOworCQlkZXYtPnZpZGVvX2lvID0gcmItPmNvdW50ID8gSU9fTU1BUCA6IElPX05PTkU7 CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19RVUVSWUJVRjoKKwl7CisJCXN0cnVjdCB2 NGwyX2J1ZmZlciAqYiA9IGFyZzsKKworCQlpZiAoYi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZC SV9DQVBUVVJFICYmCisJCQkJYi0+aW5kZXggPCBkZXYtPnZiaV9udW1fZnJhbWVzICYmCisJCQkJ ZGV2LT52YmlfaW8gPT0gSU9fTU1BUCkgeworCQkJbWVtY3B5KGIsICZkZXYtPnZiaV9mcmFtZVti LT5pbmRleF0uYnVmLCBzaXplb2YoKmIpKTsKKworCQkJaWYgKGRldi0+dmJpX2ZyYW1lW2ItPmlu ZGV4XS52bWFfdXNlX2NvdW50KQorCQkJCWItPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfTUFQUEVE OworCisJCQlpZiAoZGV2LT5mcmFtZVtiLT5pbmRleF0uc3RhdGUgPT0gRl9ET05FKQorCQkJCWIt PmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfRE9ORTsKKwkJCWVsc2UgaWYgKGRldi0+ZnJhbWVbYi0+ aW5kZXhdLnN0YXRlICE9IEZfVU5VU0VEKQorCQkJCWItPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdf UVVFVUVEOworCisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmIChiLT50eXBlICE9IFY0TDJfQlVG X1RZUEVfVklERU9fQ0FQVFVSRSB8fAorCQkJYi0+aW5kZXggPj0gZGV2LT5udW1fZnJhbWVzIHx8 IGRldi0+dmlkZW9faW8gIT0gSU9fTU1BUCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW1lbWNw eShiLCAmZGV2LT5mcmFtZVtiLT5pbmRleF0uYnVmLCBzaXplb2YoKmIpKTsKKworCQlpZiAoZGV2 LT5mcmFtZVtiLT5pbmRleF0udm1hX3VzZV9jb3VudCkKKwkJCWItPmZsYWdzIHw9IFY0TDJfQlVG X0ZMQUdfTUFQUEVEOworCisJCWlmIChkZXYtPmZyYW1lW2ItPmluZGV4XS5zdGF0ZSA9PSBGX0RP TkUpCisJCQliLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX0RPTkU7CisJCWVsc2UgaWYgKGRldi0+ ZnJhbWVbYi0+aW5kZXhdLnN0YXRlICE9IEZfVU5VU0VEKQorCQkJYi0+ZmxhZ3MgfD0gVjRMMl9C VUZfRkxBR19RVUVVRUQ7CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1FCVUY6CisJ eworCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmIgPSBhcmc7CisJCXVuc2lnbmVkIGxvbmcgbG9ja19m bGFnczsKKworCQlpZiAoYi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFICYmCisJ CQkJYi0+aW5kZXggPCBkZXYtPnZiaV9udW1fZnJhbWVzICYmCisJCQkJZGV2LT52YmlfaW8gPT0g SU9fTU1BUCkgeworCQkJaWYgKGRldi0+dmJpX2ZyYW1lW2ItPmluZGV4XS5zdGF0ZSAhPSBGX1VO VVNFRCkKKwkJCQlyZXR1cm4gLUVBR0FJTjsKKworCQkJZGV2LT52YmlfZnJhbWVbYi0+aW5kZXhd LnN0YXRlID0gRl9RVUVVRUQ7CisKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnF1ZXVlX2xv Y2ssIGxvY2tfZmxhZ3MpOworCQkJbGlzdF9hZGRfdGFpbCgmZGV2LT52YmlfZnJhbWVbYi0+aW5k ZXhdLmZyYW1lLAorCQkJCQkmZGV2LT52YmlfaW5xdWV1ZSk7CisJCQlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZkZXYtPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCQkJcmV0dXJuIDA7CisJCX0K KworCQlpZiAoYi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKKwkJCWIt PmluZGV4ID49IGRldi0+bnVtX2ZyYW1lcyB8fCBkZXYtPnZpZGVvX2lvICE9IElPX01NQVApIHsK KwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKGRldi0+ZnJhbWVbYi0+aW5kZXhdLnN0 YXRlICE9IEZfVU5VU0VEKQorCQkJcmV0dXJuIC1FQUdBSU47CisKKwkJZGV2LT5mcmFtZVtiLT5p bmRleF0uc3RhdGUgPSBGX1FVRVVFRDsKKworCQkvKiBhZGQgZnJhbWUgdG8gZmlmbyAqLworCQlz cGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJbGlzdF9h ZGRfdGFpbCgmZGV2LT5mcmFtZVtiLT5pbmRleF0uZnJhbWUsCisJCQkJJmRldi0+aW5xdWV1ZSk7 CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7 CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX0RRQlVGOgorCXsKKwkJc3RydWN0IHY0 bDJfYnVmZmVyICpiID0gYXJnOworCQlzdHJ1Y3QgZW0yOHh4X2ZyYW1lX3QgKmY7CisJCXVuc2ln bmVkIGxvbmcgbG9ja19mbGFnczsKKwkJaW50IHJldCA9IDA7CisKKwkJaWYgKGItPnR5cGUgPT0g VjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSAmJgorCQkJCWItPmluZGV4IDwgZGV2LT52YmlfbnVt X2ZyYW1lcyAmJgorCQkJCWRldi0+dmJpX2lvID09IElPX01NQVApIHsKKwkJCWlmIChsaXN0X2Vt cHR5KCZkZXYtPnZiaV9vdXRxdWV1ZSkpIHsKKwkJCQlpZiAoZGV2LT52Ymlfc3RyZWFtID09IFNU UkVBTV9PRkYpCisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCWlmIChmaWxwLT5mX2ZsYWdzICYg T19OT05CTE9DSykKKwkJCQkJcmV0dXJuIC1FQUdBSU47CisJCQkJcmV0ID0gd2FpdF9ldmVudF9p bnRlcnJ1cHRpYmxlKGRldi0+d2FpdF92YmlfZnJhbWUsICghbGlzdF9lbXB0eSgmZGV2LT52Ymlf b3V0cXVldWUpKSB8fAorCQkJCQkJKGRldi0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSk7CisK KwkJCQlpZiAocmV0KQorCQkJCQlyZXR1cm4gcmV0OworCisJCQkJaWYgKGRldi0+c3RhdGUgJiBE RVZfRElTQ09OTkVDVEVEKQorCQkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0KKworCQkJc3Bpbl9s b2NrX2lycXNhdmUoJmRldi0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisJCQlmID0gbGlzdF9l bnRyeShkZXYtPnZiaV9vdXRxdWV1ZS5uZXh0LAorCQkJCQlzdHJ1Y3QgZW0yOHh4X2ZyYW1lX3Qs IGZyYW1lKTsKKwkJCWxpc3RfZGVsKGRldi0+dmJpX291dHF1ZXVlLm5leHQpOworCQkJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKworCQkJZi0+ c3RhdGUgPSBGX1VOVVNFRDsKKwkJCW1lbWNweShiLCAmZi0+YnVmLCBzaXplb2YoKmIpKTsKKwor CQkJaWYgKGYtPnZtYV91c2VfY291bnQpCisJCQkJYi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19N QVBQRUQ7CisKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKGItPnR5cGUgIT0gVjRMMl9CVUZf VFlQRV9WSURFT19DQVBUVVJFCisJCQl8fCBkZXYtPnZpZGVvX2lvICE9IElPX01NQVApCisJCQly ZXR1cm4gLUVJTlZBTDsKKworCQlpZiAobGlzdF9lbXB0eSgmZGV2LT5vdXRxdWV1ZSkpIHsKKwkJ CWlmIChkZXYtPnZpZGVvX3N0cmVhbSA9PSBTVFJFQU1fT0ZGKQorCQkJCXJldHVybiAtRUlOVkFM OworCQkJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQorCQkJCXJldHVybiAtRUFHQUlO OworCQkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlCisJCQkJKGRldi0+d2FpdF9mcmFt ZSwKKwkJCQkoIWxpc3RfZW1wdHkoJmRldi0+b3V0cXVldWUpKSB8fAorCQkJCShkZXYtPnN0YXRl ICYgREVWX0RJU0NPTk5FQ1RFRCkpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQkJ aWYgKGRldi0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKQorCQkJCXJldHVybiAtRU5PREVWOwor CQl9CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7 CisJCWYgPSBsaXN0X2VudHJ5KGRldi0+b3V0cXVldWUubmV4dCwKKwkJCQlzdHJ1Y3QgZW0yOHh4 X2ZyYW1lX3QsIGZyYW1lKTsKKwkJbGlzdF9kZWwoZGV2LT5vdXRxdWV1ZS5uZXh0KTsKKwkJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKworCQlm LT5zdGF0ZSA9IEZfVU5VU0VEOworCQltZW1jcHkoYiwgJmYtPmJ1Ziwgc2l6ZW9mKCpiKSk7CisK KwkJaWYgKGYtPnZtYV91c2VfY291bnQpCisJCQliLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX01B UFBFRDsKKworCQlyZXR1cm4gMDsKKwl9CisJZGVmYXVsdDoKKwkJcmV0dXJuIGVtMjh4eF9kb19p b2N0bChpbm9kZSwgZmlscCwgZGV2LCBjbWQsIGFyZywKKwkJCQkgICAgICAgZW0yOHh4X3ZpZGVv X2RvX2lvY3RsKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBlbTI4eHhfdjRsMl9pb2N0 bCgpCisgKiBoYW5kbGUgdjRsMiBpb2N0bCB0aGUgbWFpbiBhY3Rpb24gaGFwcGVucyBpbiBlbTI4 eHhfdjRsMl9kb19pb2N0bCgpCisgKi8KK3N0YXRpYyBpbnQgZW0yOHh4X3Y0bDJfaW9jdGwoc3Ry dWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQkgICAgIHVuc2lnbmVkIGlu dCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBlbTI4 eHhfZmggKmZoID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBlbTI4eHggKmRldiA9IGZo LT5kZXY7CisKKworCWlmIChkZXYtPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgeworCQllbTI4 eHhfZXJyZGV2KCJ2NGwyIGlvY3RsOiBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4g LUVOT0RFVjsKKwl9CisKKwlpZiAoZGV2LT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSB7CisJ CWVtMjh4eF9lcnJkZXYKKwkJICAgICgidjRsMiBpb2N0bDogZGV2aWNlIGlzIG1pc2NvbmZpZ3Vy ZWQ7IGNsb3NlIGFuZCBvcGVuIGl0IGFnYWluXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJ cmV0ID0gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbHAsIGNtZCwgYXJnLCBlbTI4eHhfdmlkZW9f ZG9faW9jdGwpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJh dGlvbnMgZW0yOHh4X3Y0bF9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVu ID0gZW0yOHh4X3Y0bDJfb3BlbiwKKwkucmVsZWFzZSA9IGVtMjh4eF92NGwyX2Nsb3NlLAorCS5p b2N0bCA9IGVtMjh4eF92NGwyX2lvY3RsLAorCS5yZWFkID0gZW0yOHh4X3Y0bDJfcmVhZCwKKwku cG9sbCA9IGVtMjh4eF92NGwyX3BvbGwsCisJLm1tYXAgPSBlbTI4eHhfdjRsMl9tbWFwLAorCS5s bHNlZWsgPSBub19sbHNlZWssCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJT SU9OKDIsIDYsIDExKQorI2lmIDAKKwkuY29tcGF0X2lvY3RsICAgPSB2NGxfY29tcGF0X2lvY3Rs MzIsCisjZW5kaWYKKyNlbmRpZgorCit9OworCitpbnQgZW0yOHh4X2FhZF9jb250cm9sKHZvaWQg KnByaXYsIHVuc2lnbmVkIGludCBjb21tYW5kLCB2b2lkICpwdHIpIHsKKyAgICBzdHJ1Y3QgZW0y OHh4ICpkZXYgPSAoc3RydWN0IGVtMjh4eCopcHJpdjsKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBz d2l0Y2goY29tbWFuZCkgeworICAgIGNhc2UgRU0yOFhYX0VOQUJMRV9BVURJTzoKKyAgICAgICAg cmV0ID0gZGV2LT5lbTI4eHhfd3JpdGVfcmVnX2JpdHMoZGV2LCBSMEZfWENMS19SRUcsIDB4ODAs IDB4ODApOworCWlmKGRldi0+YWx0ID09IDAgKSB7CisJCWludCBlcnJDb2RlOworCQlkZXYtPmFs dCA9IDc7CisJCWVyckNvZGUgPSB1c2Jfc2V0X2ludGVyZmFjZShkZXYtPnVkZXYsIGRldi0+dXNi X2ludGVyZmFjZSwgNyk7CisJCXByaW50aygiY2hhbmdpbmcgYWx0ZXJuYXRlIG51bWJlciB0byA3 XG4iKTsKKwl9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRU0yOFhYX0RJU0FCTEVfQVVESU86 CisgICAgICAgIGlmKGRldi0+YWx0ICE9IDApIHsKKyAgICAgICAgICAgIGludCBlcnJDb2RlOwor ICAgICAgICAgICAgZGV2LT5hbHQgPSAwOworICAgICAgICAgICAgZXJyQ29kZSA9IHVzYl9zZXRf aW50ZXJmYWNlKGRldi0+dWRldiwgZGV2LT51c2JfaW50ZXJmYWNlLCAwKTsKKyAgICAgICAgICAg IHByaW50aygiY2hhbmdpbmcgYWx0ZXJuYXRlIG51bWJlciB0byAwXG4iKTsKKyAgICAgICAgfQor ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAg cmV0dXJuIHJldDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIHVzYiBp bnRlcmZhY2UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8q CisgKiBlbTI4eHhfaW5pdF9kZXYoKQorICogYWxsb2NhdGVzIGFuZCBpbml0cyB0aGUgZGV2aWNl IHN0cnVjdHMsIHJlZ2lzdGVycyBpMmMgYnVzIGFuZCB2NGwgZGV2aWNlCisgKi8KK3N0YXRpYyBp bnQgZW0yOHh4X2luaXRfZGV2KHN0cnVjdCBlbTI4eHggKipkZXZoYW5kbGUsIHN0cnVjdCB1c2Jf ZGV2aWNlICp1ZGV2LAorCQkJICAgaW50IG1pbm9yLCBpbnQgbW9kZWwpCit7CisJc3RydWN0IGVt Mjh4eCAqZGV2ID0gKmRldmhhbmRsZTsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKwlpbnQgZXJy Q29kZSwgaTsKKwl1bnNpZ25lZCBpbnQgbWF4aCwgbWF4dzsKKwlpbnQgcmV0OworCWludCBncGlv X2FyZzsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MgPSBOVUxMOworCXN0cnVjdCBlbTI4eHhfb3Bz ICpvcHMgPSBOVUxMOworCXU4IHZhbHVlOworCisJZGV2LT5tb2RlbCA9IG1vZGVsOworCWRldi0+ ZHZiX2RldiA9IE5VTEw7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT5vcGVuKTsKKworCW11 dGV4X2luaXQoJmRldi0+aW5wdXRfbG9jayk7CisKKwlkZXYtPmVtX3R5cGUgPSBlbTI4eHhfYm9h cmRzW21vZGVsXS5lbV90eXBlOworCWRldi0+aGFzX3R1bmVyID0gZW0yOHh4X2JvYXJkc1ttb2Rl bF0uaGFzX3R1bmVyOworCWRldi0+aGFzX2ludHR1bmVyID0gZW0yOHh4X2JvYXJkc1ttb2RlbF0u aGFzX2ludHR1bmVyOworCWRldi0+cG93ZXJzYXZpbmcgPSBlbTI4eHhfYm9hcmRzW21vZGVsXS5w b3dlcnNhdmluZzsKKwlkZXYtPmhhc19tc3AzNHh4ID0gZW0yOHh4X2JvYXJkc1ttb2RlbF0uaGFz X21zcDM0eHg7CisJZGV2LT50ZGE5ODg3X2NvbmYgPSBlbTI4eHhfYm9hcmRzW21vZGVsXS50ZGE5 ODg3X2NvbmY7CisJZGV2LT5kZWNvZGVyID0gZW0yOHh4X2JvYXJkc1ttb2RlbF0uZGVjb2RlcjsK KwlkZXYtPmVtMjh4eF9jdHJsID0gZW0yOHh4X2JvYXJkc1ttb2RlbF0uY3RybDsKKwlkZXYtPmVt Mjh4eF9xY3RybCA9IGVtMjh4eF9ib2FyZHNbbW9kZWxdLnFjdHJsOworCWRldi0+ZW0yOHh4X2dj dHJsID0gZW0yOHh4X2JvYXJkc1ttb2RlbF0uZ2N0cmw7CisJZGV2LT5kZXZfbW9kZXMgPSBlbTI4 eHhfYm9hcmRzW21vZGVsXS5kZXZfbW9kZXM7CisJZGV2LT5ib2FyZCA9ICZlbTI4eHhfYm9hcmRz W21vZGVsXTsKKwlkZXYtPm91dGZtdCA9ICZlbTI4eHhfb3V0X2ZtdFswXTsgLyogZGVmYXVsdCB0 byBZVVlWICovCisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLCA2 LCAxNykKKwlJTklUX0RFTEFZRURfV09SSygmZGV2LT5yZXF1ZXN0X21vZHVsZV93aywgcmVxdWVz dF9tb2R1bGVfYXN5bmMpOworI2VuZGlmCisJZGV2LT50dm5vcm0gPSAmZW0yOHh4X2JvYXJkc1tt b2RlbF0udHZub3Jtc1swXTsKKwlkZXYtPmR2Ym5vcm0gPSAmZW0yOHh4X2JvYXJkc1ttb2RlbF0u ZHZibm9ybXNbMF07CisJZGV2LT5mbW5vcm0gPSAmZW0yOHh4X2JvYXJkc1ttb2RlbF0uZm1ub3Jt c1swXTsKKwlkZXYtPnFhbW5vcm0gPSAmZW0yOHh4X2JvYXJkc1ttb2RlbF0ucWFtbm9ybXNbMF07 CisJZGV2LT5hdHNjbm9ybSA9ICZlbTI4eHhfYm9hcmRzW21vZGVsXS5hdHNjbm9ybXNbMF07CisK KwlkZXYtPnZiaV9pbnRlcmxhY2VkID0gdmJpX2ludGVybGFjZWQ7CisKKwlkZXYtPmVtMjh4eF9n cGlvX2NvbnRyb2wgPSBlbTI4eHhfZ3Bpb19jb250cm9sOworCWRldi0+bWFudWFsX2dwaW8gPSBl bTI4eHhfYm9hcmRzW21vZGVsXS5tYW51YWxfZ3BpbzsKKyAgICAgICAgZGV2LT5lbTI4eHhfYWFk X2NvbnRyb2wgPSBlbTI4eHhfYWFkX2NvbnRyb2w7CisKKwkvKiBjaGVjayBpZiBncGlvIGNvbmZp ZyBpcyBzdG9yZWQgb25ib2FyZCAqLworCWRldi0+cWFtbm9ybSA9ICZlbTI4eHhfYm9hcmRzW21v ZGVsXS5xYW1ub3Jtc1swXTsKKwlkZXYtPmF0c2Nub3JtID0gJmVtMjh4eF9ib2FyZHNbbW9kZWxd LmF0c2Nub3Jtc1swXTsKKworCWVtMjh4eF93cml0ZV9yZWdzX3JlcShkZXYsIDB4MDIsIDB4YTAs ICJceDIzIiwgMSk7CisJcmV0ID0gZGV2LT5lbTI4eHhfcmVhZF9yZWcoZGV2LCAweDA1KTsKKwor CWlmIChyZXQgPT0gMCkgeworCQl2YWx1ZSA9IGVtMjh4eF9yZWFkX3JlZ19yZXEoZGV2LCAweDIs IDB4YTApOworCQkvKiBrZWVwIGl0IG92ZXJyaWRhYmxlICovCisJCWlmIChkZXYtPm1hbnVhbF9n cGlvID09IDApCisJCQlkZXYtPm1hbnVhbF9ncGlvID0gKGVtMjh4eF9yZWFkX3JlZ19yZXEoZGV2 LCAweDIsIDB4YTApPj4zKSYxOworCX0KKworCisJaWYgKGRldi0+dWRldiA9PSBOVUxMKQorCQlk ZXYtPnVkZXYgPSB1ZGV2OworCisJaWYgKGRldi0+ZGV2X21vZGVzID09IEVNMjhYWF9EVkJUIHx8 IGRldi0+ZGV2X21vZGVzID09IEVNMjhYWF9BVFNDKQorCQlkZXYtPmRldmljZV9tb2RlID0gMTsK KwllbHNlCisJCWRldi0+ZGV2aWNlX21vZGUgPSBkZXZpY2VfbW9kZTsKKworCWlmICh2YmlfbW9k ZSA9PSAwKQorCQlkZXYtPmRldl9tb2RlcyAmPSB+RU0yOFhYX1ZCSTsKKworCWlmIChkZXYtPmRl dl9tb2RlcyAmIEVNMjhYWF9WQkkpCisJCWVtMjh4eF9zZXRfdmJpKGRldiwgMSk7CisKKwlpZiAo dHVuZXIgPj0gMCkKKwkJZGV2LT50dW5lcl90eXBlID0gdHVuZXI7CisJZWxzZQorCQlkZXYtPnR1 bmVyX3R5cGUgPSBlbTI4eHhfYm9hcmRzW21vZGVsXS50dW5lcl90eXBlOworCisJLyogRG8gYm9h cmQgc3BlY2lmaWMgaW5pdCBhbmQgZWVwcm9tIHJlYWRpbmcgKi8KKwlyZXQgPSBlbTI4eHhfY2Fy ZF9zZXR1cChkZXYpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWdwaW9fYXJnID0g RU0yOFhYX1JFR19PRkY7CisJZW0yOHh4X2dwaW9fY29udHJvbChkZXYsIEVNMjhYWF9MRUQxX09O LCAgICAgICZncGlvX2FyZyk7CisJZW0yOHh4X2dwaW9fY29udHJvbChkZXYsIEVNMjhYWF9UUzFf T04sICAgICAgICZncGlvX2FyZyk7CisJZW0yOHh4X2dwaW9fY29udHJvbChkZXYsIEVNMjhYWF9B TkFMT0dfT04sICAgICZncGlvX2FyZyk7CisJZW0yOHh4X2dwaW9fY29udHJvbChkZXYsIEVNMjhY WF9YQzMwMjhfU0VDQU0sICZncGlvX2FyZyk7CisJZW0yOHh4X2dwaW9fY29udHJvbChkZXYsIEVN MjhYWF9UVU5FUjJfT04sICAgICZncGlvX2FyZyk7CisJZW0yOHh4X2dwaW9fY29udHJvbChkZXYs IEVNMjhYWF9ERUNPREVSX1NMRUVQLCAmZ3Bpb19hcmcpOworCW1kZWxheSgxMDApOworCWdwaW9f YXJnID0gRU0yOFhYX1JFR19PTjsKKwllbTI4eHhfZ3Bpb19jb250cm9sKGRldiwgRU0yOFhYX0FO QUxPR19PTiwgICAgJmdwaW9fYXJnKTsKKwllbTI4eHhfZ3Bpb19jb250cm9sKGRldiwgRU0yOFhY X1RVTkVSMV9PTiwgICAgJmdwaW9fYXJnKTsKKwltZGVsYXkoMTAwKTsKKworCWVtMjh4eF9ncGlv X2NvbnRyb2woZGV2LCBFTTI4WFhfREVDT0RFUl9SRVNFVCwgTlVMTCk7CisKKyNpZmRlZiBDT05G SUdfTU9EVUxFUworCS8qIHJlcXVlc3Qgc29tZSBtb2R1bGVzICovCisJaWYgKGRldi0+aGFzX3R1 bmVyICYmIGRldi0+aGFzX2ludHR1bmVyID09IDApCisJCXJlcXVlc3RfbW9kdWxlKCJ0dW5lciIp OworCWlmIChkZXYtPmRlY29kZXIgPT0gRU0yOFhYX1NBQTcxMTMgfHwgZGV2LT5kZWNvZGVyID09 IEVNMjhYWF9TQUE3MTE0KQorCQlyZXF1ZXN0X21vZHVsZSgic2FhNzExNSIpOworCWlmIChkZXYt PmRlY29kZXIgPT0gRU0yOFhYX1RWUDUxNTApCisJCXJlcXVlc3RfbW9kdWxlKCJ0dnA1MTUwIik7 CisJaWYgKGRldi0+dGRhOTg4N19jb25mKQorCQlyZXF1ZXN0X21vZHVsZSgidGRhOTg4NyIpOwor CWlmIChkZXYtPmRlY29kZXIgPT0gRU0yOFhYX0NYMjU4NDMpCisJCXJlcXVlc3RfbW9kdWxlKCJl bTI4eHgtY3gyNTg0MyIpOworI2VuZGlmCisJc3Bpbl9sb2NrX2luaXQoJmRldi0+cXVldWVfbG9j ayk7CisJc3Bpbl9sb2NrX2luaXQoJmRldi0+dmJpX3F1ZXVlX2xvY2spOworCWluaXRfd2FpdHF1 ZXVlX2hlYWQoJmRldi0+d2FpdF9mcmFtZSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT53 YWl0X3ZiaV9mcmFtZSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT52aWRlb193YWl0X3N0 cmVhbSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT52Ymlfd2FpdF9zdHJlYW0pOworCisJ aWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCIlczoldTolcygpOiBlbTI4eHhfY2FyZF9zZXR1cCgp IGZhaWxlZCwgcmV0ID0gJWlcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLCBy ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWVtMjh4eF9pMmNfcmVnaXN0ZXIoZGV2KTsKKwor CWVtMjh4eF9jb25maWdfaTJjKGRldik7CisKKwlpZiAoZGV2LT5oYXNfaW50dHVuZXIpIHsKKwkJ c3dpdGNoIChkZXYtPnR1bmVyX3R5cGUpIHsKKwkJY2FzZSBUVU5FUl9YQ0VJVkVfWEMzMDI4Ogor CQl7CisJCQlzdHJ1Y3QgeGMzMDI4X2NvbmZpZyBjb25maWc7CisJCQltZW1zZXQoJmNvbmZpZywg MHgwLCBzaXplb2Yoc3RydWN0IHhjMzAyOF9jb25maWcpKTsKKwkJCWNvbmZpZy5uZXdfdHZfbW9k ZV9wdHIgPSBlbTI4eHhfYm9hcmRzW21vZGVsXS50dm5vcm1zWzBdLnR2X21vZGU7CisJCQljb25m aWcubmV3X2NoYW5uZWxfbWFwX3B0ciA9IGVtMjh4eF9ib2FyZHNbbW9kZWxdLnR2bm9ybXNbMF0u Y2hhbm5lbG1hcDsKKwkJCWNvbmZpZy5jYWxsYmFjayA9IGVtMjh4eF9ncGlvX2NvbnRyb2xfdHJh bnNsYXRlOworCQkJY29uZmlnLmRldiA9IGRldjsKKwkJCWNvbmZpZy5hZGFwID0gJmRldi0+aTJj X2FkYXA7CisJCQljb25maWcuaTJjX2FkZHJlc3MgPSAweGMyPj4xOworI2lmIDAKKwkJCWVtMjh4 eF9ncGlvX2NvbnRyb2woZGV2LCBFTTI4WFhfWEMzMDI4X1NFQ0FNLCBhcmcpOworI2VuZGlmCisJ CQlkZXYtPnR1bmVyID0gdHVuZXJfY2hpcF9hdHRhY2goeGMzMDI4X3R1bmVyX2F0dGFjaCwgJmNv bmZpZyk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIFRVTkVSX1hDRUlWRV9YQzUwMDA6CisJCXsK KwkJCXN0cnVjdCB4YzUwMDBfY29uZmlnIGNvbmZpZzsKKwkJCXByaW50aygidHJ5aW5nIHRvIGF0 dGFjaCB4YzUwMDBcbiIpOworCQkJbWVtc2V0KCZjb25maWcsIDB4MCwgc2l6ZW9mKHN0cnVjdCB4 YzUwMDBfY29uZmlnKSk7CisJCQljb25maWcuY2FsbGJhY2sgPSBlbTI4eHhfZ3Bpb19jb250cm9s X3RyYW5zbGF0ZTsKKwkJCWNvbmZpZy5kZXYgPSBkZXY7CisJCQljb25maWcuYWRhcCA9ICZkZXYt PmkyY19hZGFwOworCQkJY29uZmlnLmkyY19hZGRyZXNzID0gMHhjMj4+MTsKKwkJCWRldi0+dHVu ZXIgPSB0dW5lcl9jaGlwX2F0dGFjaCh4YzUwMDBfdHVuZXJfYXR0YWNoLCAmY29uZmlnLCBYQzUw MDBfZmlybXdhcmVfU0VRVUVOQ0UpOworCQkJYnJlYWs7CisJCX0KKwkJfQorCisJCS8qIGNvbmZp Z3VyZSB0aGUgZGV2aWNlICovCisKKwkJaWYgKGRldi0+dHVuZXIgPT0gTlVMTCkKKwkJCXByaW50 ayhLRVJOX0lORk8idW5hYmxlIHRvIGF0dGFjaCB0dW5lclxuIik7CisJCWVsc2UKKwkJCXByaW50 ayhLRVJOX0lORk8ic3VjY2Vzc2Z1bGx5IGF0dGFjaGVkIHR1bmVyXG4iKTsKKwl9CisKKwlkZXYt PmVtMjh4eF9hY3F1aXJlID0gZW0yOHh4X2FjcXVpcmU7CisKKwlkZXYtPmVtMjh4eF9hY3F1aXJl KGRldiwgRU0yOFhYX0xPQ0ssIDEpOworCisJbGlzdF9hZGRfdGFpbCgmZGV2LT5kZXZsaXN0LCAm ZW0yOHh4X2Rldmxpc3QpOworCisJaWYgKGRldi0+ZGV2X21vZGVzJkVNMjhYWF9SQURJTykgewor CQlkZXYtPnJkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwkJbWVtc2V0KGRldi0+cmRldiwg MHgwLCBzaXplb2Yoc3RydWN0IHZpZGVvX2RldmljZSkpOworCisJCWlmIChOVUxMID09IGRldi0+ cmRldikgeworCQkJbGlzdF9kZWwoJmRldi0+ZGV2bGlzdCk7CisJCQlrZnJlZShkZXYpOworCQkJ cmV0dXJuIC1FTk9NRU07CisJCX0KKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9W RVJTSU9OKDIsIDYsIDI3KQorCQlkZXYtPnJkZXYtPnR5cGUgPSBWSURfVFlQRV9UVU5FUjsKKwkJ ZGV2LT5yZGV2LT5kZXYgPSAmZGV2LT51ZGV2LT5kZXY7CisjZWxzZQorCQlkZXYtPnJkZXYtPnZm bF90eXBlID0gVklEX1RZUEVfVFVORVI7CisJCWRldi0+cmRldi0+cGFyZW50ID0gJmRldi0+dWRl di0+ZGV2OworI2VuZGlmCisJCWRldi0+cmRldi0+Zm9wcyA9ICZlbTI4eHhfdjRsX2ZvcHM7CisJ CWRldi0+cmRldi0+bWlub3IgPSAtMTsKKwkJZGV2LT5yZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2 aWNlX3JlbGVhc2U7CisJCXNucHJpbnRmKGRldi0+cmRldi0+bmFtZSwgc2l6ZW9mKGRldi0+cmRl di0+bmFtZSksICIlcyMlZCAlcyIsCisJCQkJImVtMjh4eCIsIGRldi0+ZGV2bm8sICJyYWRpbyIp OworCisJCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoZGV2LT5yZGV2LCBWRkxfVFlQRV9SQURJ TywKKwkJCQkJcmFkaW9fbnJbZGV2LT5kZXZub10pIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fSU5G TyJ1bmFibGUgdG8gcmVnaXN0ZXIgcmFkaW8gZGV2aWNlXG4iKTsKKwkJCWxpc3RfZGVsKCZkZXYt PmRldmxpc3QpOworCQkJa2ZyZWUoZGV2KTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCXBy aW50ayhLRVJOX0lORk8icmFkaW8gZGV2aWNlIHJlZ2lzdGVyZWQgYXMgL2Rldi9yYWRpbyVkXG4i LAorCQkJCQlkZXYtPnJkZXYtPm1pbm9yICYgMHgxZik7CisJfQorCisJaWYgKGRldi0+ZGV2X21v ZGVzJkVNMjhYWF9WSURFTykgeworCisJCWRldi0+dmlkZW9faW5wdXRzID0gZW0yOHh4X2JvYXJk c1ttb2RlbF0udmNoYW5uZWxzOworCisJCWRldi0+dHZub3JtID0gJmVtMjh4eF9ib2FyZHNbbW9k ZWxdLnR2bm9ybXNbMF07CS8qIHNldCBkZWZhdWx0IG5vcm0gKi8KKwkJZm9yIChpID0gMDsgZW0y OHh4X2JvYXJkc1ttb2RlbF0udHZub3Jtc1tpXS5pZDsgaSsrKQorCQkJaWYgKGVtMjh4eF9ib2Fy ZHNbbW9kZWxdLm5vcm0gPT0gZW0yOHh4X2JvYXJkc1ttb2RlbF0udHZub3Jtc1tpXS5pZCkgewor CQkJCWRldi0+dHZub3JtID0gJmVtMjh4eF9ib2FyZHNbbW9kZWxdLnR2bm9ybXNbaV07CS8qIHNl dCBkZWZhdWx0IG5vcm0gKi8KKwkJCQlicmVhazsKKwkJCX0KKworCQllbTI4eHhfdmlkZW9kYmco InR2bm9ybSA9ICVzXG4iLCBkZXYtPnR2bm9ybS0+bmFtZSk7CisKKwkJbWF4dyA9IG5vcm1fbWF4 dyhkZXYpOworCQltYXhoID0gbm9ybV9tYXhoKGRldik7CisKKwkJLyogc2V0IGRlZmF1bHQgaW1h Z2Ugc2l6ZSAqLworCQlkZXYtPndpZHRoID0gbWF4dzsKKwkJZGV2LT5oZWlnaHQgPSBtYXhoOwor CQlkZXYtPmludGVybGFjZWQgPSBFTTI4WFhfSU5URVJMQUNFRF9ERUZBVUxUOworCQlkZXYtPmZp ZWxkX3NpemUgPSBkZXYtPndpZHRoICogZGV2LT5oZWlnaHQ7CisJCWRldi0+ZnJhbWVfc2l6ZSA9 CisJCQlkZXYtPmludGVybGFjZWQgPyBkZXYtPmZpZWxkX3NpemUgPDwgMSA6IGRldi0+ZmllbGRf c2l6ZTsKKwkJZGV2LT5ieXRlc3BlcmxpbmUgPSBkZXYtPndpZHRoICogMjsKKwkJZGV2LT5oc2Nh bGUgPSAwOworCQlkZXYtPnZzY2FsZSA9IDA7CisJCWRldi0+Y3RsX2lucHV0ID0gMjsKKworCQlp ZiAoZGV2LT5kZXZfbW9kZXMmRU0yOFhYX1ZJREVPKSB7CisJCQllcnJDb2RlID0gZW0yOHh4X2Nv bmZpZyhkZXYpOyAvKiBUT0RPOiBjaGVjayBmb3IgZXJyb3J2YWx1ZSAqLworCQkJaWYgKGVyckNv ZGUpIHsKKwkJCQllbTI4eHhfZXJyZGV2KCJlcnJvciBjb25maWd1cmluZyBkZXZpY2VcbiIpOwor CQkJCWVtMjh4eF9kZXZ1c2VkICY9IH4oMTw8ZGV2LT5kZXZubyk7CisJCQkJbGlzdF9kZWwoJmRl di0+ZGV2bGlzdCk7CisJCQkJa2ZyZWUoZGV2KTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0K KwkJfQorCisjaWZkZWYgQ09ORklHX01PRFVMRVMKKwkJLyogRklYTUU6IGlzIHRoaXMgbW9kdWxl IHJlYWxseSByZXF1aXJlZD8gc29tZSBkZXZpY2VzIGp1c3Qgc3BpdCBlcnJvcnMKKwkJCSAgd2hl biB1c2luZyB0aGF0IG1vZHVsZXMgKi8KKwkJaWYgKGRldi0+aGFzX21zcDM0eHgpCisJCQlyZXF1 ZXN0X21vZHVsZSgibXNwMzQwMCIpOworI2VuZGlmCisKKwkJLyogYWxsb2NhdGUgYW5kIGZpbGwg djRsMiBkZXZpY2Ugc3RydWN0ICovCisJCWRldi0+dmRldiA9IHZpZGVvX2RldmljZV9hbGxvYygp OworCQlpZiAoTlVMTCA9PSBkZXYtPnZkZXYpIHsKKwkJCWVtMjh4eF9lcnJkZXYoImNhbm5vdCBh bGxvY2F0ZSB2aWRlb19kZXZpY2UuXG4iKTsKKwkJCWVtMjh4eF9kZXZ1c2VkICY9IH4oMTw8ZGV2 LT5kZXZubyk7CisJCQlsaXN0X2RlbCgmZGV2LT5kZXZsaXN0KTsKKwkJCWtmcmVlKGRldik7CisJ CQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQltZW1zZXQoZGV2LT52ZGV2LCAweDAsIHNpemVvZihz dHJ1Y3QgdmlkZW9fZGV2aWNlKSk7CisKKworCQkvKiBGaWxscyBDQVBUVVJFIGRldmljZSBpbmZv ICovCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNiwgMjcpCisJ CWRldi0+dmRldi0+dHlwZSA9IFZJRF9UWVBFX0NBUFRVUkU7CisJCWlmIChkZXYtPmhhc190dW5l cikKKwkJCWRldi0+dmRldi0+dHlwZSB8PSBWSURfVFlQRV9UVU5FUjsKKwkJZGV2LT52ZGV2LT5k ZXYgPSAmZGV2LT51ZGV2LT5kZXY7CisjZWxzZQorCQlkZXYtPnZkZXYtPnZmbF90eXBlID0gVklE X1RZUEVfQ0FQVFVSRTsKKwkJaWYgKGRldi0+aGFzX3R1bmVyKQorCQkJZGV2LT52ZGV2LT52Zmxf dHlwZSB8PSBWSURfVFlQRV9UVU5FUjsKKwkJZGV2LT52ZGV2LT5wYXJlbnQgPSAmZGV2LT51ZGV2 LT5kZXY7CisjZW5kaWYKKwkJZGV2LT52ZGV2LT5mb3BzID0gJmVtMjh4eF92NGxfZm9wczsKKwkJ ZGV2LT52ZGV2LT5taW5vciA9IC0xOworCQlkZXYtPnZkZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZp Y2VfcmVsZWFzZTsKKwkJc25wcmludGYoZGV2LT52ZGV2LT5uYW1lLCBzaXplb2YoZGV2LT52Ymlf ZGV2LT5uYW1lKSwgIiVzIyVkICVzIiwKKwkJCQkiZW0yOHh4IiwgZGV2LT5kZXZubywgInZpZGVv Iik7CisKKwkJLyogcmVnaXN0ZXIgdjRsMiBkZXZpY2UgKi8KKwkJaWYgKChyZXR2YWwgPSB2aWRl b19yZWdpc3Rlcl9kZXZpY2UoZGV2LT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLAorCQkJCQkJdmlk ZW9fbnJbZGV2LT5kZXZub10pKSkgeworCQkJZW0yOHh4X2VycmRldigidW5hYmxlIHRvIHJlZ2lz dGVyIHZpZGVvIGRldmljZSAoZXJyb3IgPSAlaSkuXG4iLAorCQkJCQlyZXR2YWwpOworCQkJbGlz dF9kZWwoJmRldi0+ZGV2bGlzdCk7CisJCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZkZXYp OworCQkJZW0yOHh4X2RldnVzZWQgJj0gfigxPDxkZXYtPmRldm5vKTsKKwkJCWtmcmVlKGRldik7 CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlpZiAoZGV2LT5kZXZfbW9kZXMmRU0yOFhYX1ZC SSkgeworCisJCQlkZXYtPnZiaV9kZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwkJCWlmIChO VUxMID09IGRldi0+dmJpX2RldikgeworCQkJCWVtMjh4eF9lcnJkZXYoImNhbm5vdCBhbGxvY2F0 ZSB2aWRlb19kZXZpY2UuXG4iKTsKKwkJCQllbTI4eHhfZGV2dXNlZCAmPSB+KDE8PGRldi0+ZGV2 bm8pOworCQkJCWxpc3RfZGVsKCZkZXYtPmRldmxpc3QpOworCQkJCXZpZGVvX2RldmljZV9yZWxl YXNlKGRldi0+dmRldik7CisJCQkJa2ZyZWUoZGV2KTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJ CX0KKwkJCW1lbXNldChkZXYtPnZiaV9kZXYsIDB4MCwgc2l6ZW9mKHN0cnVjdCB2aWRlb19kZXZp Y2UpKTsKKworCQkJLyogRmlsbHMgVkJJIGRldmljZSBpbmZvICovCisjaWYgTElOVVhfVkVSU0lP Tl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNiwgMjcpCisJCQlkZXYtPnZiaV9kZXYtPnR5cGUg PSBWRkxfVFlQRV9WQkk7CisJCQlkZXYtPnZiaV9kZXYtPmRldiA9ICZkZXYtPnVkZXYtPmRldjsK KyNlbHNlCisJCQlkZXYtPnZiaV9kZXYtPnZmbF90eXBlID0gVkZMX1RZUEVfVkJJOworCQkJZGV2 LT52YmlfZGV2LT5wYXJlbnQgPSAmZGV2LT51ZGV2LT5kZXY7CisjZW5kaWYKKwkJCWRldi0+dmJp X2Rldi0+Zm9wcyA9ICZlbTI4eHhfdjRsX2ZvcHM7CisJCQlkZXYtPnZiaV9kZXYtPm1pbm9yID0g LTE7CisJCQlkZXYtPnZiaV9kZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKKwkJ CXNucHJpbnRmKGRldi0+dmJpX2Rldi0+bmFtZSwgc2l6ZW9mKGRldi0+dmJpX2Rldi0+bmFtZSks ICIlcyMlZCAlcyIsCisJCQkJCSJlbTI4eHgiLCBkZXYtPmRldm5vLCAidmJpIik7CisKKwkJCWlm ICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoZGV2LT52YmlfZGV2LCBWRkxfVFlQRV9WQkksCisJCQkJ CQl2YmlfbnJbZGV2LT5kZXZub10pIDwgMCkgeworCQkJCXByaW50ayhLRVJOX0lORk8idW5hYmxl IHRvIHJlZ2lzdGVyIHZiaSBkZXZpY2VcbiIpOworCQkJCWxpc3RfZGVsKCZkZXYtPmRldmxpc3Qp OworCQkJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldi0+dmJpX2Rldik7CisJCQkJdmlkZW9fZGV2 aWNlX3JlbGVhc2UoZGV2LT52ZGV2KTsKKwkJCQllbTI4eHhfZGV2dXNlZCAmPSB+KDE8PGRldi0+ ZGV2bm8pOworCQkJCWtmcmVlKGRldik7CisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisJCQll bTI4eHhfaW5mbygiVjRMMiBWQkkgZGV2aWNlIHJlZ2lzdGVyZWQgYXMgL2Rldi92YmklZFxuIiwK KwkJCQkJZGV2LT52YmlfZGV2LT5udW0pOworCQl9CisJCXZpZGVvX211eChkZXYsIDApOworCQll bTI4eHhfaW5mbygiVjRMMiBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWRcbiIsCisJ CQkJZGV2LT52ZGV2LT5udW0pOworCX0KKworCS8qIHdoZW4gcmVhdHRhY2hpbmcgdGhlIGRldmlj ZSByZWluaXRpYWxpemUgdGhlIGF0dGFjaGVkIHN1Ym1vZHVsZXMgKi8KKwltdXRleF9sb2NrKCZl bTI4eHhfZXh0ZW5zaW9uX2Rldmxpc3RfbG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZlbTI4eHhf ZXh0ZW5zaW9uX2Rldmxpc3QpKSB7CisJCWxpc3RfZm9yX2VhY2gocG9zLCAmZW0yOHh4X2V4dGVu c2lvbl9kZXZsaXN0KSB7CisJCQlvcHMgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGVtMjh4eF9v cHMsIG5leHQpOworCQkJaWYgKG9wcy0+aWQgJiBkZXYtPmRldl9tb2RlcykKKwkJCQlvcHMtPmlu aXQoZGV2KTsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmVtMjh4eF9leHRlbnNpb25fZGV2bGlz dF9sb2NrKTsKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsIDYs IDE3KQorCXJlcXVlc3RfbW9kdWxlcyhkZXYpOworI2Vsc2UKKwlkZXYtPmVtMjh4eF9hY3F1aXJl KGRldiwgRU0yOFhYX0xPQ0ssIDApOworI2VuZGlmCisJaWYgKGRldi0+Ym9hcmQtPmlyX2kyYyA9 PSAwICYmCisJCQlkZXYtPmJvYXJkLT5pcl9rZXl0YWIgJiYKKwkJCWRldi0+Ym9hcmQtPmlyX2dl dGtleSkgCisJCWVtMjg4MF9pcl9hdHRhY2goZGV2KTsKKworCXJldHVybiAwOworfQorCisvKgor ICogZW0yOHh4X2dlbmVyaWNfcHJvYmUoKQorICogcHJvYmVzIGdlbmVyaWMgZW0yOHh4IGRldmlj ZXMKKyAqIFRPRE86IGFkZCBlbTI4MDAgYmFzZWQgY2FyZCBkZXRlY3Rpb24gKGNpbmVyZ3kgMjAw KQorICoKKyAqLworCitzdHJ1Y3QgZHJlcXVlc3RfdCB7CisJaW50IGJyZXF1ZXN0OworCWludCBp bmRleDsKKwljaGFyICpidWZmZXI7CisJaW50IHJldHZhbDsKKwlpbnQgYmxlbjsKKwlpbnQgbXNl Y3M7Cit9OworCitzdGF0aWMgaW50IGVtMjh4eF9nZW5lcmljX3Byb2JlKGludCAqbW9kZWwsIHN0 cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQlzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJaW50IGk7 CisJY2hhciBidWZmZXIgPSAtMTsKKwljaGFyICpzZW5kYnVmOworCWludCByZXQ7CisJaW50IHJ2 ID0gMDsKKwlzd2l0Y2ggKCgqbW9kZWwpKSB7CisJCWNhc2UgRU0yODcwX0JPQVJEX1RFUlJBVEVD X1hTOgorCQl7CisJCQlzZW5kYnVmID0ga21hbGxvYygxLCBHRlBfS0VSTkVMKTsKKwkJCW1lbWNw eShzZW5kYnVmLCAiXHgwMCIsIDEpOworCQkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVz Yl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgwMiwKKwkJCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQ RV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCQkweDAwMDAsIDB4MDBjMCwgc2VuZGJ1 ZiwgMSwgSFopOworCQkJa2ZyZWUoc2VuZGJ1Zik7CisJCQlyZXQgPSB1c2JfY29udHJvbF9tc2co dWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDAyLAorCQkJCQlVU0JfRElSX0lOIHwg VVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQkJMHgwMDAwLCAweDAwYzAs ICZidWZmZXIsIDEsIEhaKTsKKwkJCWlmIChidWZmZXIgPT0gMHg2MykgeworCQkJCSgqbW9kZWwp ID0gRU0yODcwX0JPQVJEX1RFUlJBVEVDX1hTX01UMjA2MDsKKwkJCQlwcmludGsoS0VSTl9JTkZP ImVtMjh4eC12aWRlby5jOiBOZXcgVGVycmF0ZWMgWFMgRGV0ZWN0ZWRcbiIpOworCQkJfQorCQl9 CisJCXJldHVybiAwOworCQljYXNlIEVNMjgwMF9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfVVNCSUk6 CisJCXsKKwkJCS8qIHNlZW1zIGxpa2UgbGVhZHRlayBkaWRuJ3QgY2hhbmdlIHRoZSBwcm9kdWN0 IGlkIGZvciBlbTI4MjAvZW0yODAwIGJhc2VkCisJCQkgICBkZXZpY2VzICovCisJCQlyZXQgPSB1 c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDAwLAorCQkJ CQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQkJ MHgwMDAwLCAweDAwMGEsICZidWZmZXIsIDEsIEhaKTsKKwkJCXN3aXRjaCAoYnVmZmVyKSB7CisJ CQljYXNlIDB4MTI6CisJCQkJcHJpbnRrKCJFTTI4MjAgYmFzZWQgZGV2aWNlIGRldGVjdGVkXG4i KTsKKwkJCQkoKm1vZGVsKSA9IEVNMjgyMF9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfVVNCSUlfREVM VVhFOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJCWNhc2UgRU0yODAwX0JPQVJEX0dFTkVS SUM6CisJCXsKKwkJCXU4IGkyY19kZXZzWzEyOF07CisJCQlpbnQgbnJfaTJjX2RldnMgPSAwOwor CQkJcHJpbnRrKEtFUk5fSU5GTyJlbTI4eHg6IGdlbmVyaWMgRU0yODAwIGJvYXJkIHRyeWluZyB0 byBndWVzcyBjYXJkIGJ5IGkyYyBhZGRyZXNzZXNcbiIpOworCQkJLyogZG8gYSBpMmMgc2NhbiAq LworCQkJZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKSB7CisJCQkJaWYgKCFlbTI4MDBfaTJjX2No ZWNrX2Zvcl9kZXZpY2UoZGV2LCBpPDwxKSkKKwkJCQkJaTJjX2RldnNbbnJfaTJjX2RldnMrK10g PSBpPDwxOworCQkJfQorCQkJLyogc29tZXRoaW5nIHdlbnQgd3JvbmcgKi8KKwkJCWlmICghbnJf aTJjX2RldnMpCisJCQkJYnJlYWs7CisJCQkvKiBub3cgbG9vcCB0aHJvdWdoIGFsbCBlbTI4MDAg Y2FyZHMgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBlbTI4eHhfYmNvdW50OyBpKyspIHsKKwkJCQkv KiBpZiB0aGUgY2FyZCBkZWZpbml0aW9uIGNvbnRhaW5zIGEgbGlzdCBvZiBpMmMgZGV2aWNlcyAq LworCQkJCWlmIChlbTI4eHhfYm9hcmRzW2ldLmVtX3R5cGUgPT0gRU0yODAwICYmCisJCQkJCQll bTI4eHhfYm9hcmRzW2ldLmkyY19kZXZzKSB7CisJCQkJCWludCB4OworCQkJCQkvKiBjb21wYXJl IHRoZSBsaXN0IHRvIHRoZSBzY2FuIHJlc3VsdHMgKi8KKwkJCQkJZm9yICh4ID0gMDsgeCA8IG5y X2kyY19kZXZzICYmCisJCQkJCQllbTI4eHhfYm9hcmRzW2ldLmkyY19kZXZzW3hdOworCQkJCQkJ eCsrKSB7CisJCQkJCQlpZiAoaTJjX2RldnNbeF0gIT0KKwkJCQkJCSAgIGVtMjh4eF9ib2FyZHNb aV0uaTJjX2RldnNbeF0pCisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJaWYgKHggPT0gbnJf aTJjX2RldnMgICYmICFlbTI4eHhfYm9hcmRzW2ldLmkyY19kZXZzW3hdKSB7CisJCQkJCQkoKm1v ZGVsKSA9IGk7CisJCQkJCQlyZXR1cm4gMDsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQli cmVhazsKKwkJY2FzZSBFTTI4NjFfQk9BUkRfR0VORVJJQzoKKwkJeworCQkJc3RydWN0IGRyZXF1 ZXN0X3QgeWFrdW1vW10gPSB7CisJCQkJezB4MDMsIDB4YjgsICJceDAwIiwgMHgwMCwgMSwgMH0K KwkJCQkvKiB0aGlzIGlzIHRoZSBvbmx5IGkyYyBwb3J0IHdoaWNoIGlzCisJCQkJICAgYXZhaWxh YmxlICovCisJCQl9OworCQkJZm9yIChpID0gMCwgcnYgPSAwOyBpIDwgQVJSQVlfU0laRSh5YWt1 bW8pOyBpKyspIHsKKwkJCQlzZW5kYnVmID0ga21hbGxvYyh5YWt1bW9baV0uYmxlbiwgR0ZQX0tF Uk5FTCk7CisJCQkJbWVtY3B5KHNlbmRidWYsIHlha3Vtb1tpXS5idWZmZXIsIHlha3Vtb1tpXS5i bGVuKTsKKwkJCQlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVk ZXYsIDApLCB5YWt1bW9baV0uYnJlcXVlc3QsCisJCQkJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBF X1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJCQkweDAwMDAsIHlha3Vtb1tpXS5pbmRl eCwgc2VuZGJ1ZiwgeWFrdW1vW2ldLmJsZW4sIEhaKTsKKwkJCQlrZnJlZShzZW5kYnVmKTsKKwkJ CQlpZiAoeWFrdW1vW2ldLm1zZWNzKQorCQkJCQltc2xlZXAoeWFrdW1vW2ldLm1zZWNzKTsKKwkJ CQlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAw eDAwLAorCQkJCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJ Q0UsCisJCQkJCQkweDAwMDAsIDB4MDUsICZidWZmZXIsIDEsIEhaKTsKKwkJCQlpZiAoYnVmZmVy ICE9IHlha3Vtb1tpXS5yZXR2YWwpIHsKKwkJCQkJcnYgPSAxOworCQkJCQlicmVhazsKKwkJCQl9 CisJCQl9CisJCQlpZiAocnYgPT0gMCkgeworCQkJCSgqbW9kZWwpID0gRU0yODYxX0JPQVJEX1lB S1VNT19NT1ZJRV9NSVhFUjsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQl9CisJCWJyZWFrOwor CQljYXNlIEVNMjgyMF9CT0FSRF9HRU5FUklDOgorCQl7CisJCQlzdHJ1Y3QgZHJlcXVlc3RfdCB2 aWRlb2xvZ3lbXSA9IHsgLyogdG9kbyB2aWRlb2xvZ3kKKwkJCQkJCQkgICAgIGhhcyBhIGRldmlj ZQorCQkJCQkJCSAgICAgaWRlbnRpZmllcgorCQkJCQkJCSAgICAgc29tZXdoZXJlIGluIHRoZQor CQkJCQkJCSAgICAgZWVwcm9tICovCisJCQkJezB4MDMsIDB4YTIsICJceDAwIiwgMHgwMCwgMSwg MH0sCisJCQkJezB4MDMsIDB4YTAsICJceDAwIiwgMHgwMCwgMSwgMH0sCisJCQkJezB4MDMsIDB4 NjgsICJceDAwIiwgMHgwMCwgMSwgMH0sCisJCQkJezB4MDMsIDB4YTQsICJceDAwIiwgMHgwMCwg MSwgMH0sCisJCQkJezB4MDMsIDB4YTYsICJceDAwIiwgMHgwMCwgMSwgMH0sCisJCQkJezB4MDMs IDB4NjYsICJceDAwIiwgMHgxMCwgMSwgMH0sCisJCQkJezB4MDMsIDB4ODYsICJceDAwIiwgMHgx MCwgMSwgMH0sCisJCQkJezB4MDMsIDB4YzAsICJceDAwIiwgMHgxMCwgMSwgMH0sCisJCQkJezB4 MDMsIDB4YzIsICJceDAwIiwgMHgxMCwgMSwgMH0sCisJCQl9OworCisJCQlzdHJ1Y3QgZHJlcXVl c3RfdCBoZXJjdWxlc19zdHZbXSA9IHsKKwkJCQl7MHgwMywgMHg0MiwgIlx4MDAiLCAweDEwLCAx LCAwfSwKKwkJCQl7MHgwMywgMHg0YSwgIlx4MDAiLCAweDAwLCAxLCAwfSwKKwkJCQl7MHgwMywg MHg2MCwgIlx4MDAiLCAweDAwLCAxLCAwfSwKKwkJCQl7MHgwMywgMHg2NiwgIlx4MDAiLCAweDEw LCAxLCAwfSwKKwkJCQl7MHgwMywgMHg2OCwgIlx4MDAiLCAweDEwLCAxLCAwfSwKKwkJCQl7MHgw MywgMHg4NiwgIlx4MDAiLCAweDEwLCAxLCAwfSwKKwkJCQl7MHgwMywgMHhhMCwgIlx4MDAiLCAw eDAwLCAxLCAwfSwKKwkJCQl7MHgwMywgMHhhMiwgIlx4MDAiLCAweDEwLCAxLCAwfSwKKwkJCQl7 MHgwMywgMHhjMCwgIlx4MDAiLCAweDEwLCAxLCAwfSwKKwkJCQl7MHgwMywgMHhjMiwgIlx4MDAi LCAweDEwLCAxLCAwfSwKKwkJCQl7MHgwMywgMHhjNiwgIlx4MDAiLCAweDAwLCAxLCAwfSwKKwkJ CX07CisKKwkJCXN0cnVjdCBkcmVxdWVzdF90IGdhZG1laV91dHZfMzEwW10gPSB7CisJCQkJezB4 MDMsIDB4NDIsICJceDAwIiwgMHgxMCwgMSwgMH0sCisJCQkJezB4MDMsIDB4NGEsICJceDAwIiwg MHgwMCwgMSwgMH0sCisJCQkJezB4MDMsIDB4NjAsICJceDAwIiwgMHgxMCwgMSwgMH0sCisJCQkJ ezB4MDMsIDB4NjYsICJceDAwIiwgMHgxMCwgMSwgMH0sCisJCQkJezB4MDMsIDB4NjgsICJceDAw IiwgMHgxMCwgMSwgMH0sCisJCQkJezB4MDMsIDB4ODYsICJceDAwIiwgMHgxMCwgMSwgMH0sCisJ CQkJezB4MDMsIDB4YTAsICJceDAwIiwgMHgxMCwgMSwgMH0sCisJCQkJezB4MDMsIDB4YTIsICJc eDAwIiwgMHgxMCwgMSwgMH0sCisJCQkJezB4MDMsIDB4YzAsICJceDAwIiwgMHgxMCwgMSwgMH0s CisJCQkJezB4MDMsIDB4YzIsICJceDAwIiwgMHgxMCwgMSwgMH0sCisJCQl9OworCisJCQlzdHJ1 Y3QgZHJlcXVlc3RfdCBtc2lfdm94W10gPSB7CisJCQkJezB4MDMsIDB4NDIsICJceDAwIiwgMHgw MCwgMSwgMH0sCisJCQkJezB4MDMsIDB4NGEsICJceDAwIiwgMHgxMCwgMSwgMH0sCisJCQkJezB4 MDMsIDB4ODYsICJceDAwIiwgMHgwMCwgMSwgMH0sCisJCQkJezB4MDMsIDB4YTAsICJceDAwIiwg MHgxMCwgMSwgMH0sCisJCQkJezB4MDMsIDB4YTIsICJceDAwIiwgMHgxMCwgMSwgMH0sCisJCQkJ ezB4MDMsIDB4YzAsICJceDAwIiwgMHgwMCwgMSwgMH0sCisJCQkJezB4MDMsIDB4YzIsICJceDAw IiwgMHgwMCwgMSwgMH0sCisJCQl9OworCQkJc3RydWN0IGRyZXF1ZXN0X3QgbXNpX3ZveF9udHNj W10gPSB7CisJCQkJezB4MDMsIDB4NDIsICJceDAwIiwgMHgwMCwgMSwgMH0sCisvKgkJCQkJezB4 MDMsIDB4NjYsICJceDAwIiwgMHgwMCwgMSwgMH0sICovCisvKgkJCQkJezB4MDMsIDB4NjgsICJc eDAwIiwgMHgwMCwgMSwgMH0sICovCisJCQkJezB4MDMsIDB4YTAsICJceDAwIiwgMHgxMCwgMSwg MH0sCisJCQkJezB4MDMsIDB4YTIsICJceDAwIiwgMHgxMCwgMSwgMH0sCisJCQkJezB4MDMsIDB4 YzAsICJceDAwIiwgMHgwMCwgMSwgMH0sCisJCQkJezB4MDMsIDB4YzIsICJceDAwIiwgMHgwMCwg MSwgMH0sCisJCQl9OworCisKKwkJCWZvciAoaSA9IDAsIHJ2ID0gMDsgaSA8IEFSUkFZX1NJWkUo dmlkZW9sb2d5KTsgaSsrKSB7CisJCQkJLyogdXNiX2NvbnRyb2xfbXNnKCkgZXhwZWN0cyBrbWFs bG9jZWQgbWVtb3J5LCBvdGhlcndpc2UgdGhlIGhvc3QgY29udHJvbGxlciB3aWxsIGRpZSAqLwor CQkJCXNlbmRidWYgPSBrbWFsbG9jKHZpZGVvbG9neVtpXS5ibGVuLCBHRlBfS0VSTkVMKTsKKwkJ CQltZW1jcHkoc2VuZGJ1ZiwgdmlkZW9sb2d5W2ldLmJ1ZmZlciwgdmlkZW9sb2d5W2ldLmJsZW4p OworCQkJCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwg MCksIHZpZGVvbG9neVtpXS5icmVxdWVzdCwKKwkJCQkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVf VkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQkJCTB4MDAwMCwgdmlkZW9sb2d5W2ldLmlu ZGV4LCBzZW5kYnVmLCB2aWRlb2xvZ3lbaV0uYmxlbiwgSFopOworCQkJCWtmcmVlKHNlbmRidWYp OworCQkJCWlmICh2aWRlb2xvZ3lbaV0ubXNlY3MpCisJCQkJCW1zbGVlcCh2aWRlb2xvZ3lbaV0u bXNlY3MpOworCQkJCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUo dWRldiwgMCksIDB4MDAsCisJCQkJCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNC X1JFQ0lQX0RFVklDRSwKKwkJCQkJCTB4MDAwMCwgMHgwNSwgJmJ1ZmZlciwgMSwgSFopOworCQkJ CWlmIChidWZmZXIgIT0gdmlkZW9sb2d5W2ldLnJldHZhbCkgeworCQkJCQlydiA9IDE7CisJCQkJ CWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChydiA9PSAwKSB7CisJCQkJKCptb2RlbCkgPSBF TTI4MjBfQk9BUkRfVklERU9MT0dZXzIwSzE0WFVTQjsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwor CisJCQlmb3IgKGkgPSAwLCBydiA9IDA7IGkgPCBBUlJBWV9TSVpFKG1zaV92b3gpOyBpKyspIHsK KwkJCQlzZW5kYnVmID0ga21hbGxvYyhtc2lfdm94W2ldLmJsZW4sIEdGUF9LRVJORUwpOworCQkJ CW1lbWNweShzZW5kYnVmLCBtc2lfdm94W2ldLmJ1ZmZlciwgbXNpX3ZveFtpXS5ibGVuKTsKKwkJ CQlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCBt c2lfdm94W2ldLmJyZXF1ZXN0LAorCQkJCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1Ig fCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCQkJMHgwMDAwLCBtc2lfdm94W2ldLmluZGV4LCBzZW5k YnVmLCBtc2lfdm94W2ldLmJsZW4sIEhaKTsKKwkJCQlrZnJlZShzZW5kYnVmKTsKKwkJCQlpZiAo bXNpX3ZveFtpXS5tc2VjcykKKwkJCQkJbXNsZWVwKG1zaV92b3hbaV0ubXNlY3MpOworCQkJCXJl dCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDB4MDAs CisJCQkJCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwK KwkJCQkJCTB4MDAwMCwgMHgwNSwgJmJ1ZmZlciwgMSwgSFopOworCQkJCWlmIChidWZmZXIgIT0g bXNpX3ZveFtpXS5yZXR2YWwpIHsKKwkJCQkJcnYgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJ CQl9CisJCQlpZiAocnYgPT0gMCkgeworCQkJCSgqbW9kZWwpID0gRU0yODIwX0JPQVJEX01TSV9W T1hfVVNCXzI7CisJCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJCWZvciAoaSA9IDAsIHJ2ID0gMDsg aSA8IEFSUkFZX1NJWkUoaGVyY3VsZXNfc3R2KTsgaSsrKSB7CisJCQkJc2VuZGJ1ZiA9IGttYWxs b2MoaGVyY3VsZXNfc3R2W2ldLmJsZW4sIEdGUF9LRVJORUwpOworCQkJCW1lbWNweShzZW5kYnVm LCBoZXJjdWxlc19zdHZbaV0uYnVmZmVyLCBoZXJjdWxlc19zdHZbaV0uYmxlbik7CisJCQkJcmV0 ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgaGVyY3Vs ZXNfc3R2W2ldLmJyZXF1ZXN0LAorCQkJCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1Ig fCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCQkJMHgwMDAwLCBoZXJjdWxlc19zdHZbaV0uaW5kZXgs IHNlbmRidWYsIGhlcmN1bGVzX3N0dltpXS5ibGVuLCBIWik7CisJCQkJa2ZyZWUoc2VuZGJ1Zik7 CisJCQkJaWYgKGhlcmN1bGVzX3N0dltpXS5tc2VjcykKKwkJCQkJbXNsZWVwKGhlcmN1bGVzX3N0 dltpXS5tc2Vjcyk7CisJCQkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJs cGlwZSh1ZGV2LCAwKSwgMHgwMCwKKwkJCQkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1Ig fCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCQkJMHgwMDAwLCAweDA1LCAmYnVmZmVyLCAxLCBIWik7 CisJCQkJaWYgKGJ1ZmZlciAhPSBoZXJjdWxlc19zdHZbaV0ucmV0dmFsKSB7CisJCQkJCXJ2ID0g MTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKHJ2ID09IDApIHsKKwkJCQkoKm1v ZGVsKSA9IEVNMjgyMF9CT0FSRF9IRVJDVUxFU19TTUFSVF9UVl9VU0IyOworCQkJCXJldHVybiAw OworCQkJfQorCisJCQlmb3IgKGkgPSAwLCBydiA9IDA7IGkgPCBBUlJBWV9TSVpFKGdhZG1laV91 dHZfMzEwKTsgaSsrKSB7CisJCQkJc2VuZGJ1ZiA9IGttYWxsb2MoZ2FkbWVpX3V0dl8zMTBbaV0u YmxlbiwgR0ZQX0tFUk5FTCk7CisJCQkJbWVtY3B5KHNlbmRidWYsIGdhZG1laV91dHZfMzEwW2ld LmJ1ZmZlciwgZ2FkbWVpX3V0dl8zMTBbaV0uYmxlbik7CisJCQkJcmV0ID0gdXNiX2NvbnRyb2xf bXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgZ2FkbWVpX3V0dl8zMTBbaV0uYnJl cXVlc3QsCisJCQkJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9E RVZJQ0UsCisJCQkJCQkweDAwMDAsIGdhZG1laV91dHZfMzEwW2ldLmluZGV4LCBzZW5kYnVmLCBn YWRtZWlfdXR2XzMxMFtpXS5ibGVuLCBIWik7CisJCQkJa2ZyZWUoc2VuZGJ1Zik7CisJCQkJaWYg KGdhZG1laV91dHZfMzEwW2ldLm1zZWNzKQorCQkJCQltc2xlZXAoZ2FkbWVpX3V0dl8zMTBbaV0u bXNlY3MpOworCQkJCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUo dWRldiwgMCksIDB4MDAsCisJCQkJCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNC X1JFQ0lQX0RFVklDRSwKKwkJCQkJCTB4MDAwMCwgMHgwNSwgJmJ1ZmZlciwgMSwgSFopOworCQkJ CWlmIChidWZmZXIgIT0gZ2FkbWVpX3V0dl8zMTBbaV0ucmV0dmFsKSB7CisJCQkJCXJ2ID0gMTsK KwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKHJ2ID09IDApIHsKKwkJCQkoKm1vZGVs KSA9IEVNMjgyMF9CT0FSRF9HQURNRUlfVVRWMzEwOworCQkJCXJldHVybiAwOworCQkJfQorCQkJ Zm9yIChpID0gMCwgcnYgPSAwOyBpIDwgQVJSQVlfU0laRShtc2lfdm94X250c2MpOyBpKyspIHsK KwkJCQlzZW5kYnVmID0ga21hbGxvYyhtc2lfdm94X250c2NbaV0uYmxlbiwgR0ZQX0tFUk5FTCk7 CisJCQkJbWVtY3B5KHNlbmRidWYsIG1zaV92b3hfbnRzY1tpXS5idWZmZXIsIG1zaV92b3hfbnRz Y1tpXS5ibGVuKTsKKwkJCQlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxw aXBlKHVkZXYsIDApLCBtc2lfdm94X250c2NbaV0uYnJlcXVlc3QsCisJCQkJCQlVU0JfRElSX09V VCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJCQkweDAwMDAsIG1z aV92b3hfbnRzY1tpXS5pbmRleCwgc2VuZGJ1ZiwgbXNpX3ZveF9udHNjW2ldLmJsZW4sIEhaKTsK KwkJCQlrZnJlZShzZW5kYnVmKTsKKwkJCQlpZiAobXNpX3ZveF9udHNjW2ldLm1zZWNzKQorCQkJ CQltc2xlZXAobXNpX3ZveF9udHNjW2ldLm1zZWNzKTsKKwkJCQlyZXQgPSB1c2JfY29udHJvbF9t c2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDAwLAorCQkJCQkJVVNCX0RJUl9J TiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJCQkweDAwMDAsIDB4 MDUsICZidWZmZXIsIDEsIEhaKTsKKwkJCQlpZiAoYnVmZmVyICE9IG1zaV92b3hfbnRzY1tpXS5y ZXR2YWwpIHsKKwkJCQkJcnYgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAo cnYgPT0gMCkgeworCQkJCSgqbW9kZWwpID0gRU0yODIwX0JPQVJEX01TSV9WT1hfVVNCXzI7CisJ CQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJCWNhc2UgRU0yNzUwX0JPQVJEX0dF TkVSSUM6CisJCXsKKwkJCS8qIFRPRE8gKi8KKwkJCSgqbW9kZWwpID0gRU0yNzUwX0JPQVJEX0RM Q1dfMTMwOworCQkJcmV0dXJuIDA7CisJCX0KKwkJYnJlYWs7CisJCWNhc2UgRU0yODYwX0JPQVJE X0dFTkVSSUM6CisJCXsKKwkJCXN0cnVjdCBkcmVxdWVzdF90IGdhZG1laV91dHZfMzMwW10gPSB7 CisJCQkJezB4MDMsIDB4NDIsICJceDAwIiwgMHgxMCwgMSwgMH0sCisJCQkJezB4MDMsIDB4NGEs ICJceDAwIiwgMHgwMCwgMSwgMH0sCisJCQkJezB4MDMsIDB4NjAsICJceDAwIiwgMHgxMCwgMSwg MH0sCisJCQkJezB4MDMsIDB4NjYsICJceDAwIiwgMHgxMCwgMSwgMH0sCisJCQkJezB4MDMsIDB4 NjgsICJceDAwIiwgMHgxMCwgMSwgMH0sCisJCQkJezB4MDMsIDB4ODYsICJceDAwIiwgMHgxMCwg MSwgMH0sCisJCQkJezB4MDMsIDB4YTAsICJceDAwIiwgMHgwMCwgMSwgMH0sCisJCQkJezB4MDMs IDB4YTIsICJceDAwIiwgMHgxMCwgMSwgMH0sCisJCQkJezB4MDMsIDB4YzAsICJceDAwIiwgMHgw MCwgMSwgMH0sCisJCQkJezB4MDMsIDB4YzIsICJceDAwIiwgMHgxMCwgMSwgMH0sCisJCQl9Owor CQkJc3RydWN0IGRyZXF1ZXN0X3QgbmV0Z21iaF9jYW1bXSA9IHsKKyNpZiAwCisJCQkJezB4MDIs IDB4NDgsICJceDAwIiwgMHgwMCwgMSwgMH0sCisjZW5kaWYKKwkJCQl7MHgwMywgMHg1YSwgIlx4 MDAiLCAweDAwLCAxLCAwfSwKKwkJCX07CisKKwkJCXN0cnVjdCBkcmVxdWVzdF90IHR5cGhvb25f ZHZkbWFrZXJbXSA9IHsKKwkJCQl7MHgwMywgMHg0YSwgIlx4MDAiLCAweDAwLCAxLCAwfSwKKwkJ CX07CisKKwkJCWZvciAoaSA9IDAsIHJ2ID0gMDsgaSA8IEFSUkFZX1NJWkUoZ2FkbWVpX3V0dl8z MzApOworCQkJCQlpKyspIHsKKwkJCQlzZW5kYnVmID0ga21hbGxvYyhnYWRtZWlfdXR2XzMzMFtp XS5ibGVuLCBHRlBfS0VSTkVMKTsKKwkJCQltZW1jcHkoc2VuZGJ1ZiwgZ2FkbWVpX3V0dl8zMzBb aV0uYnVmZmVyLCBnYWRtZWlfdXR2XzMzMFtpXS5ibGVuKTsKKwkJCQlyZXQgPSB1c2JfY29udHJv bF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCBnYWRtZWlfdXR2XzMzMFtpXS5i cmVxdWVzdCwKKwkJCQkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQ X0RFVklDRSwKKwkJCQkJCTB4MDAwMCwgZ2FkbWVpX3V0dl8zMzBbaV0uaW5kZXgsIHNlbmRidWYs IGdhZG1laV91dHZfMzMwW2ldLmJsZW4sIEhaKTsKKwkJCQlrZnJlZShzZW5kYnVmKTsKKwkJCQlp ZiAoZ2FkbWVpX3V0dl8zMzBbaV0ubXNlY3MpCisJCQkJCW1zbGVlcChnYWRtZWlfdXR2XzMzMFtp XS5tc2Vjcyk7CisJCQkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlw ZSh1ZGV2LCAwKSwgMHgwMCwKKwkJCQkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBV U0JfUkVDSVBfREVWSUNFLAorCQkJCQkJMHgwMDAwLCAweDA1LCAmYnVmZmVyLCAxLCBIWik7CisJ CQkJaWYgKGJ1ZmZlciAhPSBnYWRtZWlfdXR2XzMzMFtpXS5yZXR2YWwpIHsKKwkJCQkJcnYgPSAx OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAocnYgPT0gMCkgeworCQkJCSgqbW9k ZWwpID0gRU0yODYwX0JPQVJEX0dBRE1FSV9VVFYzMzA7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJ CQlmb3IgKGkgPSAwLCBydiA9IDA7IGkgPCBBUlJBWV9TSVpFKG5ldGdtYmhfY2FtKTsgaSsrKSB7 CisJCQkJc2VuZGJ1ZiA9IGttYWxsb2MobmV0Z21iaF9jYW1baV0uYmxlbiwgR0ZQX0tFUk5FTCk7 CisJCQkJbWVtY3B5KHNlbmRidWYsIG5ldGdtYmhfY2FtW2ldLmJ1ZmZlciwgbmV0Z21iaF9jYW1b aV0uYmxlbik7CisJCQkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlw ZSh1ZGV2LCAwKSwgbmV0Z21iaF9jYW1baV0uYnJlcXVlc3QsCisJCQkJCQlVU0JfRElSX09VVCB8 IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJCQkweDAwMDAsIG5ldGdt YmhfY2FtW2ldLmluZGV4LCBzZW5kYnVmLCBuZXRnbWJoX2NhbVtpXS5ibGVuLCBIWik7CisJCQkJ a2ZyZWUoc2VuZGJ1Zik7CisJCQkJaWYgKG5ldGdtYmhfY2FtW2ldLm1zZWNzKQorCQkJCQltc2xl ZXAobmV0Z21iaF9jYW1baV0ubXNlY3MpOworCQkJCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2 LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDB4MDAsCisJCQkJCQlVU0JfRElSX0lOIHwgVVNC X1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQkJCTB4MDAwMCwgMHgwNSwgJmJ1 ZmZlciwgMSwgSFopOworCQkJCWlmIChidWZmZXIgIT0gbmV0Z21iaF9jYW1baV0ucmV0dmFsKSB7 CisJCQkJCXJ2ID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKHJ2ID09IDAp IHsKKwkJCQkoKm1vZGVsKSA9IEVNMjg2MF9CT0FSRF9ORVRHTUJIX0NBTTsKKwkJCQlyZXR1cm4g MDsKKwkJCX0KKworCisJCQlmb3IgKGkgPSAwLCBydiA9IDA7IGkgPCBBUlJBWV9TSVpFKHR5cGhv b25fZHZkbWFrZXIpOyBpKyspIHsKKwkJCQlzZW5kYnVmID0ga21hbGxvYyh0eXBob29uX2R2ZG1h a2VyW2ldLmJsZW4sIEdGUF9LRVJORUwpOworCQkJCW1lbWNweShzZW5kYnVmLCB0eXBob29uX2R2 ZG1ha2VyW2ldLmJ1ZmZlciwgdHlwaG9vbl9kdmRtYWtlcltpXS5ibGVuKTsKKwkJCQlyZXQgPSB1 c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCB0eXBob29uX2R2 ZG1ha2VyW2ldLmJyZXF1ZXN0LAorCQkJCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1Ig fCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCQkJMHgwMDAwLCB0eXBob29uX2R2ZG1ha2VyW2ldLmlu ZGV4LCBzZW5kYnVmLCB0eXBob29uX2R2ZG1ha2VyW2ldLmJsZW4sIEhaKTsKKwkJCQlrZnJlZShz ZW5kYnVmKTsKKwkJCQlpZiAodHlwaG9vbl9kdmRtYWtlcltpXS5tc2VjcykKKwkJCQkJbXNsZWVw KHR5cGhvb25fZHZkbWFrZXJbaV0ubXNlY3MpOworCQkJCXJldCA9IHVzYl9jb250cm9sX21zZyh1 ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDB4MDAsCisJCQkJCQlVU0JfRElSX0lOIHwg VVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQkJCTB4MDAwMCwgMHgwNSwg JmJ1ZmZlciwgMSwgSFopOworCQkJCWlmIChidWZmZXIgIT0gdHlwaG9vbl9kdmRtYWtlcltpXS5y ZXR2YWwpIHsKKwkJCQkJcnYgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAo cnYgPT0gMCkgeworCQkJCSgqbW9kZWwpID0gRU0yODYwX0JPQVJEX1RZUEhPT05fRFZEX01BS0VS OworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJCWJyZWFrOworCQljYXNlIEVNMjgyMV9CT0FS RF9HRU5FUklDOgorCQkJeworCQkJCXN0cnVjdCBkcmVxdWVzdF90IHVzYmdlYXJbXSA9IHsKKwkJ CQkJezB4MDMsIDB4YTIsICJceDAwIiwgMHgxMCwgMSwgMH0sCisJCQkJCXsweDAzLCAweGEwLCAi XHgwMCIsIDB4MTAsIDEsIDB9LAorCQkJCQl7MHgwMywgMHg2OCwgIlx4MDAiLCAweDEwLCAxLCAw fSwKKwkJCQkJezB4MDMsIDB4NGEsICJceDAwIiwgMHgwMCwgMSwgMH0sCisJCQkJCXsweDAzLCAw eDY2LCAiXHgwMCIsIDB4MTAsIDEsIDB9LAorCQkJCQl7MHgwMywgMHg2OCwgIlx4MDAiLCAweDEw LCAxLCAwfSwKKwkJCQkJezB4MDMsIDB4ODYsICJceDAwIiwgMHgxMCwgMSwgMH0sCisJCQkJCXsw eDAzLCAweGMwLCAiXHgwMCIsIDB4MTAsIDEsIDB9LAorCQkJCQl7MHgwMywgMHhjMiwgIlx4MDAi LCAweDEwLCAxLCAwfSwKKwkJCQl9OworCQkJCXN0cnVjdCBkcmVxdWVzdF90IHNpaWdfcHJvbGlu a1tdID0geworCQkJCQl7MHgwMywgMHg0YSwgIlx4MDAiLCAweDAwLCAxLCAwfSwKKwkJCQkJezB4 MDMsIDB4NjAsICJceDAwIiwgMHgwMCwgMSwgMH0sCisJCQkJCXsweDAzLCAweGEwLCAiXHgwMCIs IDB4MDAsIDEsIDB9LAorCQkJCQl7MHgwMywgMHhjNiwgIlx4MDAiLCAweDAwLCAxLCAwfSwKKwkJ CQl9OworCQkJCXN0cnVjdCBkcmVxdWVzdF90IHN1cGVyY29tcFtdID0geworCQkJCQl7MHgwMywg MHg0YSwgIlx4MDAiLCAweDAwLCAxLCAwfSwKKyNpZiAwCisJCQkJCXsweDAzLCAweDYwLCAiXHgw MCIsIDB4MDAsIDEsIDB9LAorI2VuZGlmCisJCQkJCXsweDAzLCAweGMyLCAiXHgwMCIsIDB4MDAs IDEsIDB9LAorCQkJCQl7MHgwMywgMHhjNiwgIlx4MDAiLCAweDAwLCAxLCAwfSwKKwkJCQl9Owor CisJCQkJZm9yIChpID0gMCwgcnYgPSAwOyBpIDwgQVJSQVlfU0laRSh1c2JnZWFyKTsgaSsrKSB7 CisJCQkJCXNlbmRidWYgPSBrbWFsbG9jKHVzYmdlYXJbaV0uYmxlbiwgR0ZQX0tFUk5FTCk7CisJ CQkJCW1lbWNweShzZW5kYnVmLCB1c2JnZWFyW2ldLmJ1ZmZlciwgdXNiZ2VhcltpXS5ibGVuKTsK KwkJCQkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAw KSwgdXNiZ2VhcltpXS5icmVxdWVzdCwKKwkJCQkJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZF TkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJCQkJMHgwMDAwLCB1c2JnZWFyW2ldLmluZGV4 LCBzZW5kYnVmLCB1c2JnZWFyW2ldLmJsZW4sIEhaKTsKKwkJCQkJa2ZyZWUoc2VuZGJ1Zik7CisJ CQkJCWlmICh1c2JnZWFyW2ldLm1zZWNzKQorCQkJCQkJbXNsZWVwKHVzYmdlYXJbaV0ubXNlY3Mp OworCQkJCQlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYs IDApLCAweDAwLAorCQkJCQkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVD SVBfREVWSUNFLAorCQkJCQkJCTB4MDAwMCwgMHgwNSwgJmJ1ZmZlciwgMSwgSFopOworCQkJCQlp ZiAoYnVmZmVyICE9IHVzYmdlYXJbaV0ucmV0dmFsKSB7CisJCQkJCQlydiA9IDE7CisJCQkJCQli cmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAocnYgPT0gMCkgeworCQkJCQkoKm1vZGVsKSA9 IEVNMjgyMV9CT0FSRF9VU0JHRUFSX1ZEMjA0OworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisKKwkJ CQlmb3IgKGkgPSAwLCBydiA9IDA7IGkgPCBBUlJBWV9TSVpFKHNpaWdfcHJvbGluayk7IGkrKykg eworCQkJCQlzZW5kYnVmID0ga21hbGxvYyhzaWlnX3Byb2xpbmtbaV0uYmxlbiwgR0ZQX0tFUk5F TCk7CisJCQkJCW1lbWNweShzZW5kYnVmLCBzaWlnX3Byb2xpbmtbaV0uYnVmZmVyLCBzaWlnX3By b2xpbmtbaV0uYmxlbik7CisJCQkJCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25k Y3RybHBpcGUodWRldiwgMCksIHNpaWdfcHJvbGlua1tpXS5icmVxdWVzdCwKKwkJCQkJCQlVU0Jf RElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJCQkJMHgw MDAwLCBzaWlnX3Byb2xpbmtbaV0uaW5kZXgsIHNlbmRidWYsIHNpaWdfcHJvbGlua1tpXS5ibGVu LCBIWik7CisJCQkJCWtmcmVlKHNlbmRidWYpOworCQkJCQlpZiAoc2lpZ19wcm9saW5rW2ldLm1z ZWNzKQorCQkJCQkJbXNsZWVwKHNpaWdfcHJvbGlua1tpXS5tc2Vjcyk7CisJCQkJCXJldCA9IHVz Yl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDB4MDAsCisJCQkJ CQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJ CQkJMHgwMDAwLCAweDA1LCAmYnVmZmVyLCAxLCBIWik7CisJCQkJCWlmIChidWZmZXIgIT0gc2lp Z19wcm9saW5rW2ldLnJldHZhbCkgeworCQkJCQkJcnYgPSAxOworCQkJCQkJYnJlYWs7CisJCQkJ CX0KKwkJCQl9CisJCQkJaWYgKHJ2ID09IDApIHsKKwkJCQkJKCptb2RlbCkgPSBFTTI4MjFfQk9B UkRfUFJPTElOS19QTEFZVFZfVVNCMjsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJCWZvciAo aSA9IDAsIHJ2ID0gMDsgaSA8IEFSUkFZX1NJWkUoc3VwZXJjb21wKTsgaSsrKSB7CisJCQkJCXNl bmRidWYgPSBrbWFsbG9jKHN1cGVyY29tcFtpXS5ibGVuLCBHRlBfS0VSTkVMKTsKKwkJCQkJbWVt Y3B5KHNlbmRidWYsIHN1cGVyY29tcFtpXS5idWZmZXIsIHN1cGVyY29tcFtpXS5ibGVuKTsKKwkJ CQkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwg c3VwZXJjb21wW2ldLmJyZXF1ZXN0LAorCQkJCQkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVO RE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQkJCQkweDAwMDAsIHN1cGVyY29tcFtpXS5pbmRl eCwgc2VuZGJ1Ziwgc3VwZXJjb21wW2ldLmJsZW4sIEhaKTsKKwkJCQkJa2ZyZWUoc2VuZGJ1Zik7 CisJCQkJCWlmIChzdXBlcmNvbXBbaV0ubXNlY3MpCisJCQkJCQltc2xlZXAoc3VwZXJjb21wW2ld Lm1zZWNzKTsKKwkJCQkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlw ZSh1ZGV2LCAwKSwgMHgwMCwKKwkJCQkJCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwg VVNCX1JFQ0lQX0RFVklDRSwKKwkJCQkJCQkweDAwMDAsIDB4MDUsICZidWZmZXIsIDEsIEhaKTsK KwkJCQkJaWYgKGJ1ZmZlciAhPSBzdXBlcmNvbXBbaV0ucmV0dmFsKSB7CisJCQkJCQlydiA9IDE7 CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAocnYgPT0gMCkgeworCQkJCQko Km1vZGVsKSA9IEVNMjgyMV9CT0FSRF9TVVBFUkNPTVBfVVNCXzI7CisJCQkJCXJldHVybiAwOwor CQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEVNMjg3MF9CT0FSRF9HRU5FUklDOgorCQl7 CisJCQlzdHJ1Y3QgZHJlcXVlc3RfdCBwaW5uYWNsZV9wY3R2W10gPSB7CisJCQkJLyogezB4MDMs IDB4YjgsICJceDAwIiwgMHgwMCwgMSwgMH0sIHR2cDUxNTAgLS0gaXQncyBwb3NzaWJsZSB0aGF0 IHRoaXMgSUMgaXNuJ3QgcmVhY2hhYmxlKi8KKwkJCQl7MHgwMywgMHhhMCwgIlx4MDAiLCAweDAw LCAxLCAwfSwgLyogZWVwcm9tICovCisJCQkJezB4MDMsIDB4YzAsICJceDAwIiwgMHgwMCwgMSwg MH0sIC8qIG10MjA2MCAqLworCQkJfTsKKwkJCWZvciAoaSA9IDAsIHJ2ID0gMDsgaSA8IEFSUkFZ X1NJWkUocGlubmFjbGVfcGN0dik7CisJCQkJCWkrKykgeworCQkJCXNlbmRidWYgPSBrbWFsbG9j KHBpbm5hY2xlX3BjdHZbaV0uYmxlbiwgR0ZQX0tFUk5FTCk7CisJCQkJbWVtY3B5KHNlbmRidWYs IHBpbm5hY2xlX3BjdHZbaV0uYnVmZmVyLCBwaW5uYWNsZV9wY3R2W2ldLmJsZW4pOworCQkJCXJl dCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIHBpbm5h Y2xlX3BjdHZbaV0uYnJlcXVlc3QsCisJCQkJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRP UiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJCQkweDAwMDAsIHBpbm5hY2xlX3BjdHZbaV0uaW5k ZXgsIHNlbmRidWYsIHBpbm5hY2xlX3BjdHZbaV0uYmxlbiwgSFopOworCQkJCWtmcmVlKHNlbmRi dWYpOworCQkJCWlmIChwaW5uYWNsZV9wY3R2W2ldLm1zZWNzKQorCQkJCQltc2xlZXAocGlubmFj bGVfcGN0dltpXS5tc2Vjcyk7CisJCQkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9y Y3ZjdHJscGlwZSh1ZGV2LCAwKSwgMHgwMCwKKwkJCQkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9W RU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCQkJMHgwMDAwLCAweDA1LCAmYnVmZmVyLCAx LCBIWik7CisJCQkJaWYgKGJ1ZmZlciAhPSBwaW5uYWNsZV9wY3R2W2ldLnJldHZhbCkgeworCQkJ CQlydiA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChydiA9PSAwKSB7CisJ CQkJKCptb2RlbCkgPSBFTTI4NzBfQk9BUkRfUElOTkFDTEVfUENUVl9EVkI7CisJCQkJcmV0dXJu IDA7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJCS8qIG5vIG90aGVyIGNhcmQgaGFzIGJlZW4gYXZh aWxhYmxlIHlldCB3aXRoIHRoYXQgSUMsCisJCSAgIHNvIHdlIGFzc3VtZSBIVlJfOTUwIGJ5IGRl ZmF1bHQgKi8KKwkJY2FzZSBFTTI4ODNfQk9BUkRfR0VORVJJQzoKKwkJeworCQkJKCptb2RlbCkg PSBFTTI4ODNfQk9BUkRfRU1QSUFfSFlCUklEX0FUU0M7CisJCQlyZXR1cm4gMDsKKwkJfQorCQli cmVhazsKKwkJY2FzZSBFTTI4ODFfQk9BUkRfR0VORVJJQzoKKwkJeworCQkJc3RydWN0IGRyZXF1 ZXN0X3QgZG50X2h5YnJpZFtdID0geworCQkJCXsweDAzLCAweGEwLCAiXHgxNSIsIDB4NTYsIDEs IDB9LAorI2lmIDAKKwkJCQl7MHgwMywgMHhjMiwgIlx4MDAiLCAweDAwLCAxLCAwfSwKKwkJCQl7 MHgwMCwgMHgwNCwgIlx4MDgiLCAweDAwLCAxLCAyMH0sCisJCQkJezB4MDAsIDB4MDgsICJceDZm IiwgMHgwMCwgMSwgMjB9LAorCQkJCXsweDAwLCAweDA4LCAiXHg3ZiIsIDB4MDAsIDEsIDIwfSwK KwkJCQl7MHgwMywgMHhiOCwgIlx4MDAiLCAweDAwLCAxLCAwfSwKKwkJCQl7MHgwMCwgMHgwNCwg Ilx4MGMiLCAweDAwLCAxLCAyMH0sCisJCQkJezB4MDAsIDB4MDgsICJceDZlIiwgMHgwMCwgMSwg MjB9LAorCQkJCXsweDAwLCAweDA4LCAiXHg3ZSIsIDB4MDAsIDEsIDIwfSwKKwkJCQl7MHgwMywg MHgxZSwgIlx4MDAiLCAweDAwLCAxLCAwfSwKKyNlbmRpZgorCQkJfTsKKwkJCXN0cnVjdCBkcmVx dWVzdF90IHBpbm5hY2xlX2h5YnJpZF9wcm9bXSA9IHsKKwkJCQl7MHgwMywgMHhhMCwgIlx4MTUi LCAweDU3LCAxLCAwfSwKKyNpZiAwCisJCQkJezB4MDMsIDB4YzIsICJceDAwIiwgMHgwMCwgMSwg MH0sCisJCQkJezB4MDAsIDB4MDQsICJceDA4IiwgMHgwMCwgMSwgMjB9LAorCQkJCXsweDAwLCAw eDA4LCAiXHg2ZiIsIDB4MDAsIDEsIDIwfSwKKwkJCQl7MHgwMCwgMHgwOCwgIlx4N2YiLCAweDAw LCAxLCAyMH0sCisJCQkJezB4MDMsIDB4YjgsICJceDAwIiwgMHgwMCwgMSwgMH0sCisJCQkJezB4 MDAsIDB4MDQsICJceDBjIiwgMHgwMCwgMSwgMjB9LAorCQkJCXsweDAwLCAweDA4LCAiXHg2ZSIs IDB4MDAsIDEsIDIwfSwKKwkJCQl7MHgwMCwgMHgwOCwgIlx4N2UiLCAweDAwLCAxLCAyMH0sCisJ CQkJezB4MDMsIDB4MWUsICJceDAwIiwgMHgwMCwgMSwgMH0sCisjZW5kaWYKKwkJCX07CisJCQlm b3IgKGkgPSAwLCBydiA9IDA7IGkgPCBBUlJBWV9TSVpFKHBpbm5hY2xlX2h5YnJpZF9wcm8pOyBp KyspCisJCQl7CisJCQkJc2VuZGJ1ZiA9IGttYWxsb2MocGlubmFjbGVfaHlicmlkX3Byb1tpXS5i bGVuLCBHRlBfS0VSTkVMKTsKKwkJCQltZW1jcHkoc2VuZGJ1ZiwgcGlubmFjbGVfaHlicmlkX3By b1tpXS5idWZmZXIsIHBpbm5hY2xlX2h5YnJpZF9wcm9baV0uYmxlbik7CisJCQkJcmV0ID0gdXNi X2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgcGlubmFjbGVfaHli cmlkX3Byb1tpXS5icmVxdWVzdCwKKwkJCQkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9S IHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQkJCTB4MDAwMCwgcGlubmFjbGVfaHlicmlkX3Byb1tp XS5pbmRleCwgc2VuZGJ1ZiwgcGlubmFjbGVfaHlicmlkX3Byb1tpXS5ibGVuLCBIWik7CisJCQkJ a2ZyZWUoc2VuZGJ1Zik7CisJCQkJaWYgKHBpbm5hY2xlX2h5YnJpZF9wcm9baV0ubXNlY3MpCisJ CQkJCW1zbGVlcChwaW5uYWNsZV9oeWJyaWRfcHJvW2ldLm1zZWNzKTsKKwkJCQlyZXQgPSB1c2Jf Y29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDAwLAorCQkJCQkJ VVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJCQkw eDAwMDAsIDB4MDUsICZidWZmZXIsIDEsIEhaKTsKKwkJCQlpZiAocGlubmFjbGVfaHlicmlkX3By b1tpXS5pbmRleCA9PSAweGEwKQorCQkJCQlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNi X3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDAyLAorCQkJCQkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQ RV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCQkJCTB4MDAwMCwgcGlubmFjbGVfaHli cmlkX3Byb1tpXS5pbmRleCwgJmJ1ZmZlciwgMSwgSFopOworCisJCQkJaWYgKGJ1ZmZlciAhPSBw aW5uYWNsZV9oeWJyaWRfcHJvW2ldLnJldHZhbCkgeworCQkJCQlwcmludGsoIkZBSUxFRDogMHgl MDJ4IDB4JTAyeFxuIiwgcGlubmFjbGVfaHlicmlkX3Byb1tpXS5pbmRleCwgYnVmZmVyKTsKKwkJ CQkJcnYgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAocnYgPT0gMCkgewor CQkJCSgqbW9kZWwpID0gRU0yODgxX0JPQVJEX1BJTk5BQ0xFX0hZQlJJRF9QUk87CisJCQkJcmV0 dXJuIDA7CisJCQl9CisJCQlmb3IgKGkgPSAwLCBydiA9IDA7IGkgPCBBUlJBWV9TSVpFKGRudF9o eWJyaWQpOyBpKyspCisJCQl7CisJCQkJc2VuZGJ1ZiA9IGttYWxsb2MoZG50X2h5YnJpZFtpXS5i bGVuLCBHRlBfS0VSTkVMKTsKKwkJCQltZW1jcHkoc2VuZGJ1ZiwgZG50X2h5YnJpZFtpXS5idWZm ZXIsIGRudF9oeWJyaWRbaV0uYmxlbik7CisJCQkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYs IHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgZG50X2h5YnJpZFtpXS5icmVxdWVzdCwKKwkJCQkJ CVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQkJ CTB4MDAwMCwgZG50X2h5YnJpZFtpXS5pbmRleCwgc2VuZGJ1ZiwgZG50X2h5YnJpZFtpXS5ibGVu LCBIWik7CisJCQkJa2ZyZWUoc2VuZGJ1Zik7CisJCQkJaWYgKGRudF9oeWJyaWRbaV0ubXNlY3Mp CisJCQkJCW1zbGVlcChkbnRfaHlicmlkW2ldLm1zZWNzKTsKKwkJCQlyZXQgPSB1c2JfY29udHJv bF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDAwLAorCQkJCQkJVVNCX0RJ Ul9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJCQkweDAwMDAs IDB4MDUsICZidWZmZXIsIDEsIEhaKTsKKwkJCQlpZiAoZG50X2h5YnJpZFtpXS5pbmRleCA9PSAw eGEwKQorCQkJCQlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVk ZXYsIDApLCAweDAyLAorCQkJCQkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0Jf UkVDSVBfREVWSUNFLAorCQkJCQkJCTB4MDAwMCwgcGlubmFjbGVfaHlicmlkX3Byb1tpXS5pbmRl eCwgJmJ1ZmZlciwgMSwgSFopOworCQkJCWlmIChidWZmZXIgIT0gZG50X2h5YnJpZFtpXS5yZXR2 YWwpIHsKKwkJCQkJcnYgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAocnYg PT0gMCkgeworCQkJCSgqbW9kZWwpID0gRU0yODgxX0JPQVJEX0ROVF9EQTJfSFlCUklEOworCQkJ CXJldHVybiAwOworCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4g MDsKKwl9CisKKwllbTI4eHhfZXJyZGV2KCJZb3VyIGJvYXJkIGhhcyBubyBlZXByb20gaW5zaWRl IGl0IGFuZCB0aHVzIGNhbid0XG4iCisJCQkiJXM6IGJlIGF1dG9kZXRlY3RlZC4gIFBsZWFzZSBw YXNzIGNhcmQgPSA8bj4gaW5zbW9kIG9wdGlvbiB0b1xuIgorCQkJIiVzOiB3b3JrYXJvdW5kIHRo YXQuICBSZWRpcmVjdCBjb21wbGFpbnRzIHRvIHRoZSB2ZW5kb3Igb2ZcbiIKKwkJCSIlczogdGhl IFRWIGNhcmQuIEdlbmVyaWMgdHlwZSB3aWxsIGJlIHVzZWQuXG4iCisJCQkiJXM6IEJlc3QgcmVn YXJkcywgXG4iCisJCQkiJXM6ICAgICAgICAgLS0gdHV4XG4iLAorCQkJZGV2LT5uYW1lLCBkZXYt Pm5hbWUsIGRldi0+bmFtZSwgZGV2LT5uYW1lLCBkZXYtPm5hbWUpOworCWVtMjh4eF9lcnJkZXYo IiVzOiBIZXJlIGlzIGEgbGlzdCBvZiB2YWxpZCBjaG9pY2VzIGZvciB0aGUgY2FyZCA9IDxuPiBp bnNtb2Qgb3B0aW9uOlxuIiwKKwkJCWRldi0+bmFtZSk7CisJZm9yIChpID0gMDsgaSA8IGVtMjh4 eF9iY291bnQ7IGkrKykgeworCQllbTI4eHhfZXJyZGV2KCIgICAgY2FyZCA9ICVkIC0+ICVzXG4i LCBpLAorCQkJCWVtMjh4eF9ib2FyZHNbaV0ubmFtZSk7CisJfQorCXJldHVybiAwOworfQorCisv KgorICogZW0yOHh4X3VzYl9wcm9iZSgpCisgKiBjaGVja3MgZm9yIHN1cHBvcnRlZCBkZXZpY2Vz CisgKi8KKworc3RhdGljIGludCBlbTI4eHhfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNl ICppbnRlcmZhY2UsCisJCQkgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorewor CWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0 IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVpZjsKKwlzdHJ1Y3Qg ZW0yOHh4ICpkZXYgPSBOVUxMOworCWludCByZXR2YWwgPSAtRU5PREVWOworCWludCBtb2RlbCwg aSwgbnIsIGlmbnVtLCBpc19lbTI4NzUgPSAwOworCisJdWRldiA9IHVzYl9nZXRfZGV2KGludGVy ZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7CisKKwlpZiAodWRldiA9PSBOVUxMKSB7CisJCXBy aW50aygic29tZXRoaW5nJ3Mgd2VpcmQgaGVyZSB1ZGV2IHJldHVybmVkIDAhXG4iKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJaWZudW0gPSBpbnRlcmZhY2UtPmFsdHNldHRpbmdbMF0uZGVz Yy5iSW50ZXJmYWNlTnVtYmVyOworCisJLyogQ2hlY2sgdG8gc2VlIG5leHQgZnJlZSBkZXZpY2Ug YW5kIG1hcmsgYXMgdXNlZCAqLworCW5yID0gZmluZF9maXJzdF96ZXJvX2JpdCgmZW0yOHh4X2Rl dnVzZWQsIEVNMjhYWF9NQVhCT0FSRFMpOworCWVtMjh4eF9kZXZ1c2VkIHw9IDE8PG5yOworCisJ LyogRG9uJ3QgcmVnaXN0ZXIgYXVkaW8gaW50ZXJmYWNlcyAqLworCWlmIChpbnRlcmZhY2UtPmFs dHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlQ2xhc3MgPT0gVVNCX0NMQVNTX0FVRElPKSB7CisJ CXByaW50ayhLRVJOX0lORk8gImF1ZGlvIGRldmljZSAoJTA0eDolMDR4KTogaW50ZXJmYWNlICVp LCBjbGFzcyAlaVxuIiwKKwkJCQl1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yLCB1ZGV2LT5kZXNj cmlwdG9yLmlkUHJvZHVjdCwKKwkJCQlpZm51bSwKKwkJCQlpbnRlcmZhY2UtPmFsdHNldHRpbmdb MF0uZGVzYy5iSW50ZXJmYWNlQ2xhc3MpOworCisJCWVtMjh4eF9kZXZ1c2VkICY9IH4oMTw8bnIp OworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJlbTI4eHg6IG5l dyB2aWRlbyBkZXZpY2UgKCUwNHg6JTA0eCk6IGludGVyZmFjZSAlaSwgY2xhc3MgJWlcbiIsCisJ CQl1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yLCB1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCwK KwkJCWlmbnVtLAorCQkJaW50ZXJmYWNlLT5hbHRzZXR0aW5nWzBdLmRlc2MuYkludGVyZmFjZUNs YXNzKTsKKworCisJLyogY2hlY2sgaWYgdGhlIGRldmljZSBoYXMgdGhlIGlzbyBpbiBlbmRwb2lu dCBhdCB0aGUgY29ycmVjdCBwbGFjZSAqLworCisgICAgICAgIGVuZHBvaW50ID0gJmludGVyZmFj ZS0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50WzBdLmRlc2M7CisJaWYgKChlbmRwb2ludC0+Ym1B dHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09CisJCQlVU0JfRU5EUE9J TlRfWEZFUl9JU09DICYmCisJCShpbnRlcmZhY2UtPmFsdHNldHRpbmdbMV0uZW5kcG9pbnRbMF0u ZGVzYy53TWF4UGFja2V0U2l6ZSA9PSA5NDApKSB7CisJCXByaW50ayhLRVJOX0lORk8gImVtMjh4 eDogRFRWIERldmljZSBkZXRlY3RlZFxuIik7CisJCWlzX2VtMjg3NSA9IDE7CisJfSBlbHNlIHsK KwkJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnRbMV0uZGVz YzsKKwkJaWYgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBF X01BU0spICE9CisJCQkJVVNCX0VORFBPSU5UX1hGRVJfSVNPQykgeworCQkJZW0yOHh4X2Vycigi ZW0yOHh4OiBwcm9iaW5nIGVycm9yOiBlbmRwb2ludCBpcyBub24tSVNPIGVuZHBvaW50IVxuIik7 CisJCQllbTI4eHhfZGV2dXNlZCAmPSB+KDE8PG5yKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9 CisJCWlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01B U0spID09IFVTQl9ESVJfT1VUKSB7CisJCQllbTI4eHhfZXJyKCJlbTI4eHg6IHByb2JpbmcgZXJy b3I6IGVuZHBvaW50IGlzIElTTyBPVVQgZW5kcG9pbnQhXG4iKTsKKwkJCWVtMjh4eF9kZXZ1c2Vk ICY9IH4oMTw8bnIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CisKKwlzd2l0Y2ggKHVk ZXYtPnNwZWVkKSB7CisJY2FzZSBVU0JfU1BFRURfSElHSDoKKwkJcHJpbnRrKEtFUk5fSU5GTyJl bTI4eHg6IGRldmljZSBpcyBhdHRhY2hlZCB0byBhIFVTQiAyLjAgYnVzXG4iKTsKKwkJYnJlYWs7 CisJY2FzZSBVU0JfU1BFRURfRlVMTDoKKwkJcHJpbnRrKEtFUk5fSU5GTyJlbTI4eHg6IHNldHRp bmcgdXAgZGV2aWNlIG9uIGEgVVNCIDEuMSBidXNcbiIpOworCQkvKiBwYXNzdGhyb3VnaCAqLwor CWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0lORk8iZW0yOHh4OiB5b3VyIGRldmljZSB3b24ndCB3 b3JrIHByb3Blcmx5IHdoZW5cbiIpOworCQlwcmludGsoS0VSTl9JTkZPImVtMjh4eDogbm90IGF0 dGFjaGVkIHRvIGEgVVNCIDIuMCBoaWdoc3BlZWQgYnVzXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5G TyJlbTI4eHg6IG1vcmUgaW5mb3JtYXRpb246XG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyJlbTI4 eHg6IGh0dHA6Ly9tY2VudHJhbC5kZS93aWtpL2luZGV4LnBocDUvVGFsazpFbTI4ODBcbiIpOwor CX0KKworCW1vZGVsID0gaWQtPmRyaXZlcl9pbmZvOworCisJaWYgKG5yID49IEVNMjhYWF9NQVhC T0FSRFMpIHsKKwkJcHJpbnRrKERSSVZFUl9OQU1FICI6IFN1cHBvcnRzIG9ubHkgJWkgZW0yOHh4 IGJvYXJkcy5cbiIsIEVNMjhYWF9NQVhCT0FSRFMpOworCQllbTI4eHhfZGV2dXNlZCAmPSB+KDE8 PG5yKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBv dXIgZGV2aWNlIHN0YXRlIGFuZCBpbml0aWFsaXplIGl0ICovCisJZGV2ID0ga3phbGxvYyhzaXpl b2Yoc3RydWN0IGVtMjh4eCksIEdGUF9LRVJORUwpOworCWlmIChkZXYgPT0gTlVMTCkgeworCQll bTI4eHhfZXJyKERSSVZFUl9OQU1FICI6IG91dCBvZiBtZW1vcnkhXG4iKTsKKwkJZW0yOHh4X2Rl dnVzZWQgJj0gfigxPDxucik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNucHJpbnRmKGRl di0+bmFtZSwgMjgsICJlbTI4eHggIyVkIiwgbnIpOworCWRldi0+ZGV2bm8gPSBucjsKKworCWRl di0+dWRldiA9IHVkZXY7CisKKwlkZXYtPmVtMjh4eF93cml0ZV9yZWdzID0gZW0yOHh4X3dyaXRl X3JlZ3M7CisJZGV2LT5lbTI4eHhfcmVhZF9yZWcgPSBlbTI4eHhfcmVhZF9yZWc7CisJZGV2LT5l bTI4eHhfcmVhZF9yZWdfcmVxX2xlbiA9IGVtMjh4eF9yZWFkX3JlZ19yZXFfbGVuOworCWRldi0+ ZW0yOHh4X3dyaXRlX3JlZ3NfcmVxID0gZW0yOHh4X3dyaXRlX3JlZ3NfcmVxOworCWRldi0+ZW0y OHh4X3JlYWRfcmVnX3JlcSA9IGVtMjh4eF9yZWFkX3JlZ19yZXE7CisJZGV2LT5lbTI4eHhfd3Jp dGVfcmVnX2JpdHMgPSBlbTI4eHhfd3JpdGVfcmVnX2JpdHM7CQorCWRldi0+dXNiX2ludGVyZmFj ZSA9IGlmbnVtOworCisJLyogY29tcHV0ZSBhbHRlcm5hdGUgbWF4IHBhY2tldCBzaXplcyAqLwor CXVpZiA9IHVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2lmbnVtXTsKKworCWRldi0+bnVtX2Fs dCA9IHVpZi0+bnVtX2FsdHNldHRpbmc7CisJZGV2LT51aWYgPSB1aWY7CisKKwllbTI4eHhfaW5m bygiQWx0ZXJuYXRlIHNldHRpbmdzOiAlaVxuIiwgZGV2LT5udW1fYWx0KTsKKwlkZXYtPmFsdF9t YXhfcGt0X3NpemUgPSBrbWFsbG9jKChkZXYtPm51bV9hbHQrMSkqc2l6ZW9mKGludCksCisJCQlH RlBfS0VSTkVMKTsKKwlpZiAoZGV2LT5hbHRfbWF4X3BrdF9zaXplID09IE5VTEwpIHsKKwkJZW0y OHh4X2VycmRldigib3V0IG9mIG1lbW9yeSFcbiIpOworCQllbTI4eHhfZGV2dXNlZCAmPSB+KDE8 PG5yKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVt X2FsdCA7IGkrKykgeworCQl1MTYgdG1wID0gbGUxNl90b19jcHUodWlmLT5hbHRzZXR0aW5nW2ld LmVuZHBvaW50W2lzX2VtMjg3NT8wOjFdLmRlc2MuCisJCQkJCQkJd01heFBhY2tldFNpemUpOwor CisJCWRldi0+YWx0X21heF9wa3Rfc2l6ZVtpXSA9CisJCSAgICAodG1wICYgMHgwN2ZmKSAqICgo KHRtcCAmIDB4MTgwMCkgPj4gMTEpICsgMSk7CisJCWVtMjh4eF9pbmZvKCJBbHRlcm5hdGUgc2V0 dGluZyAlaSwgbWF4IHNpemU9ICVpXG4iLCBpLAorCQkJCQkJCWRldi0+YWx0X21heF9wa3Rfc2l6 ZVtpXSk7CisJfQorCisJaWYgKChjYXJkW25yXSA+PSAwKSAmJiAoY2FyZFtucl0gPCBlbTI4eHhf YmNvdW50KSkKKwkJbW9kZWwgPSBjYXJkW25yXTsKKworCWVtMjh4eF9nZW5lcmljX3Byb2JlKCZt b2RlbCwgdWRldiwgZGV2KTsKKworCS8qIGFsbG9jYXRlIGRldmljZSBzdHJ1Y3QgKi8KKwlyZXR2 YWwgPSBlbTI4eHhfaW5pdF9kZXYoJmRldiwgdWRldiwgbnIsIG1vZGVsKTsKKwlpZiAocmV0dmFs KQorCQlyZXR1cm4gcmV0dmFsOworCisJZW0yOHh4X2luZm8oIkZvdW5kICVzXG4iLCBlbTI4eHhf Ym9hcmRzW21vZGVsXS5uYW1lKTsKKworCS8qIHNhdmUgb3VyIGRhdGEgcG9pbnRlciBpbiB0aGlz IGludGVyZmFjZSBkZXZpY2UgKi8KKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgZGV2KTsK KwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGVtMjh4eF91c2JfZGlzY29ubmVjdCgpCisgKiBjYWxs ZWQgd2hlbiB0aGUgZGV2aWNlIGdldHMgZGljb25lbmN0ZWQKKyAqIHZpZGVvIGRldmljZSB3aWxs IGJlIHVucmVnaXN0ZXJlZCBvbiB2NGwyX2Nsb3NlIGluIGNhc2UgaXQgaXMgc3RpbGwgb3Blbgor ICovCitzdGF0aWMgdm9pZCBlbTI4eHhfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZh Y2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRh KGludGVyZmFjZSk7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCXN0cnVjdCBlbTI4eHhfb3Bz ICpvcHMgPSAwOworCisJLyogbWlnaHQgYmUgcmFjeSAqLworCWRldi0+c3RhdGUgfD0gREVWX0RJ U0NPTk5FQ1RFRDsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKworCS8q IFRPRE86IGtlcm5lbCB2ZXJzaW9ucyA8PTIuNi4yMSAqLworI2lmIExJTlVYX1ZFUlNJT05fQ09E RSA+IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE3KQorCWlmIChkZWxheWVkX3dvcmtfcGVuZGluZygm ZGV2LT5yZXF1ZXN0X21vZHVsZV93aykpCisJCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmso JmRldi0+cmVxdWVzdF9tb2R1bGVfd2spOworI2VuZGlmCisKKwlpZiAoIWRldikKKwkJcmV0dXJu OworCisJZG93bl93cml0ZSgmZW0yOHh4X2Rpc2Nvbm5lY3QpOworCisJZW0yOHh4X2NhcmRfZGlz Y29ubmVjdChkZXYpOworCisJbXV0ZXhfbG9jaygmZW0yOHh4X2V4dGVuc2lvbl9kZXZsaXN0X2xv Y2spOworCWlmICghbGlzdF9lbXB0eSgmZW0yOHh4X2V4dGVuc2lvbl9kZXZsaXN0KSkgeworCQls aXN0X2Zvcl9lYWNoKHBvcywgJmVtMjh4eF9leHRlbnNpb25fZGV2bGlzdCkgeworCQkJb3BzID0g bGlzdF9lbnRyeShwb3MsIHN0cnVjdCBlbTI4eHhfb3BzLCBuZXh0KTsKKwkJCW9wcy0+ZmluaShk ZXYpOworCQl9CisJfQorCW11dGV4X3VubG9jaygmZW0yOHh4X2V4dGVuc2lvbl9kZXZsaXN0X2xv Y2spOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX2FsbCgmZGV2LT5vcGVuKTsKKworCWlmIChk ZXYtPnVzZXJzKSB7CisJCWRldi0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJCWVtMjh4 eF91bmluaXRfaXNvYyhkZXYpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+d2FpdF9m cmFtZSk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT52aWRlb193YWl0X3N0cmVhbSk7 CisJCWlmIChkZXYtPmRldl9tb2RlcyZFTTI4WFhfVkJJKSB7CisJCQl3YWtlX3VwX2ludGVycnVw dGlibGUoJmRldi0+d2FpdF92YmlfZnJhbWUpOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZk ZXYtPnZiaV93YWl0X3N0cmVhbSk7CisJCX0KKwl9IGVsc2UgeworCQllbTI4eHhfcmVsZWFzZV9y ZXNvdXJjZXMoZGV2KTsKKwkJa2ZyZWUoZGV2LT5hbHRfbWF4X3BrdF9zaXplKTsKKwkJdHVuZXJf Y2hpcF9kZXRhY2goZGV2LT50dW5lcik7CisJCWtmcmVlKGRldik7CisJfQorCisJdXBfd3JpdGUo JmVtMjh4eF9kaXNjb25uZWN0KTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGVtMjh4 eF91c2JfZHJpdmVyID0geworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSAgS0VSTkVMX1ZFUlNJ T04oMiwgNiwgMTUpCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisjZW5kaWYKKwkubmFtZSA9ICJl bTI4eHgiLAorCS5wcm9iZSA9IGVtMjh4eF91c2JfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBlbTI4 eHhfdXNiX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0gZW0yOHh4X2lkX3RhYmxlLAorfTsKKwor aW50IGVtMjh4eF9yZWdpc3Rlcl9leHRlbnNpb24oc3RydWN0IGVtMjh4eF9vcHMgKm9wcykKK3sK KwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBOVUxMOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisK KwltdXRleF9sb2NrKCZlbTI4eHhfZXh0ZW5zaW9uX2Rldmxpc3RfbG9jayk7CisJbGlzdF9hZGRf dGFpbCgmb3BzLT5uZXh0LCAmZW0yOHh4X2V4dGVuc2lvbl9kZXZsaXN0KTsKKwkKKwkvKiBUT0RP OiBkZWZlciB0aGUgd29yayBwdXQgdGhlIG1vZHVsZSByZXF1ZXN0IGludG8gYSBsaW5rZWQgbGlz dAorCSAgIGxvY2sgdGhlIGRldmljZSB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIG5vZGUgZ290IGNs b3NlZCBhbmQgbG9hZAorCSAgIHRoZSBtb2R1bGU6CisJIAorCSAgICBwcm9ibGVtIGhlcmUgdG8g Y29uc2lkZXIgaXMgaWYgbW9kdWxlIGF1dG9sb2FkaW5nIGlzIG5vdCBlbmFibGVkCisJICAgIHRv IG1ha2UgaXQgbW9yZSBzYWZlIGl0IHdvdWxkIGJlIGdvb2QgdG8gbG9jayB0aGUgZHJpdmVyIGFu ZCB1bmxvY2sKKwkgICAgaXQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBleHRlbnNpb24gZ290IHVu bG9ja2VkCisKKwkgICAgYmV0dGVyIGlkZWFzIGFyZSB3ZWxjb21lIG9mIGNvdXJzZQorCSAKKwkg Ki8KKworCWxpc3RfZm9yX2VhY2gobGlzdCwgJmVtMjh4eF9kZXZsaXN0KSB7CisJCWRldiA9IGxp c3RfZW50cnkobGlzdCwgc3RydWN0IGVtMjh4eCwgZGV2bGlzdCk7CisJCWlmIChkZXYgJiYKKwkJ ICAgIChkZXYtPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgPT0gMCAmJgorCQkgICAgKGRldi0+ c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgPT0gMCAmJgorCQkgICAgZGV2LT5yYWRpb191c2Vy ID09IDAgJiYKKwkJICAgIGRldi0+dmlkZW9fdXNlciA9PSAwICYmCisJCSAgICBkZXYtPnZiaV91 c2VyID09IDAgJiYgCisJCSAgICBkZXYtPmZlX3VzZXIgPT0gMCAmJgorCQkgICAgZGV2LT5kZXZf bW9kZXMgJiBvcHMtPmlkKSB7CisJCQlkZXYtPmVtMjh4eF9hY3F1aXJlKGRldiwgRU0yOFhYX0xP Q0ssIDEpOworCisJCQlvcHMtPmluaXQoZGV2KTsKKwkJCXByaW50aygiRW0yOHh4OiBJbml0aWFs aXplZCAoJXMpIGV4dGVuc2lvblxuIixvcHMtPm5hbWUpOworCisJCQlkZXYtPmVtMjh4eF9hY3F1 aXJlKGRldiwgRU0yOFhYX0xPQ0ssIDApOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZlbTI4 eHhfZXh0ZW5zaW9uX2Rldmxpc3RfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZW0yOHh4 X3VucmVnaXN0ZXJfZXh0ZW5zaW9uKHN0cnVjdCBlbTI4eHhfb3BzICpvcHMpCit7CisJc3RydWN0 IGVtMjh4eCAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCisJbXV0ZXhf bG9jaygmZW0yOHh4X2V4dGVuc2lvbl9kZXZsaXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2gobGlz dCwgJmVtMjh4eF9kZXZsaXN0KSB7CisJCWRldiA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGVt Mjh4eCwgZGV2bGlzdCk7CisJCWlmIChkZXYpCisJCQlvcHMtPmZpbmkoZGV2KTsKKwl9CisJcHJp bnRrKEtFUk5fSU5GTyJFbTI4eHg6IFJlbW92ZWQgKCVzKSBleHRlbnNpb25cbiIsIG9wcy0+bmFt ZSk7CisJbGlzdF9kZWwoJm9wcy0+bmV4dCk7CisJbXV0ZXhfdW5sb2NrKCZlbTI4eHhfZXh0ZW5z aW9uX2Rldmxpc3RfbG9jayk7Cit9CisKKworc3RhdGljIGludCBfX2luaXQgZW0yOHh4X21vZHVs ZV9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKworCXByaW50ayhLRVJOX0lORk8gRFJJVkVS X05BTUUgIiB2NGwyIGRyaXZlciB2ZXJzaW9uICVkLiVkLiVkIGxvYWRlZFxuIiwKKwkgICAgICAg KEVNMjhYWF9WRVJTSU9OX0NPREUgPj4gMTYpICYgMHhmZiwKKwkgICAgICAgKEVNMjhYWF9WRVJT SU9OX0NPREUgPj4gOCkgJiAweGZmLCBFTTI4WFhfVkVSU0lPTl9DT0RFICYgMHhmZik7CisjaWZk ZWYgU05BUFNIT1QKKwlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICIgc25hcHNob3QgZGF0 ZSAlMDRkLSUwMmQtJTAyZFxuIiwKKwkgICAgICAgU05BUFNIT1QgLyAxMDAwMCwgKFNOQVBTSE9U IC8gMTAwKSAlIDEwMCwgU05BUFNIT1QgJSAxMDApOworI2VuZGlmCisKKwllbTI4eHhfd3EgPSBj cmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiZW0yOHh4LXdvcmtlciIpOworCWlmIChlbTI4 eHhfd3EgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiByZWdpc3RlciB0aGlzIGRy aXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZl bTI4eHhfdXNiX2RyaXZlcik7CisJaWYgKHJlc3VsdCkKKwkJZW0yOHh4X2VycihEUklWRVJfTkFN RQorCQkJICAgIiB1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQuXG4iLCByZXN1 bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGVtMjh4eF9t b2R1bGVfZXhpdCh2b2lkKQoreworCS8qIGRlcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUg VVNCIHN1YnN5c3RlbSAqLworCXVzYl9kZXJlZ2lzdGVyKCZlbTI4eHhfdXNiX2RyaXZlcik7CisJ ZGVzdHJveV93b3JrcXVldWUoZW0yOHh4X3dxKTsKK30KKworbW9kdWxlX2luaXQoZW0yOHh4X21v ZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KGVtMjh4eF9tb2R1bGVfZXhpdCk7CitFWFBPUlRfU1lN Qk9MKGVtMjh4eF9yZWdpc3Rlcl9leHRlbnNpb24pOworRVhQT1JUX1NZTUJPTChlbTI4eHhfdW5y ZWdpc3Rlcl9leHRlbnNpb24pOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2Vt cGlhL2VtMjh4eC13ZWJjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW1waWEvZW0yOHh4LXdl YmNhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOGMwNGUKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtcGlhL2VtMjh4eC13ZWJjYW0uYwpA QCAtMCwwICsxLDM3NSBAQAorLyoKKyAgIGVtMjh4eC12eS5jIC0gZHJpdmVyIGZvciBlbTI4eHgg YmFzZWQgd2ViY2FtcworCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIFJlY2hiZXJnZXIg PG1yZWNoYmVyZ2VyQGdtYWlsLmNvbT4KKworICAgSSBnb3QgYSBmZXcgc3BlY3MgYnV0IG5vbmUg b2YgdGhlbSB3ZXJlIGNsZWFyIGVub3VnaCB0byBnZXQgYW55dGhpbmcKKyAgIHdvcmsuIEZpbmFs bHkgSSBlbmQgdXAgd2l0aCB3cml0aW5nIHVzYnJlcGxheSBhbmQgc3RlcHBpbmcgdGhyb3VnaAor ICAgdGhlIHNuaWZmZWQgbG9nZmlsZXMuLi4KKworICAgYWxsIHRoaXMgaXMgcXVpdGUgZGV2aWNl IHNwZWNpZmljIChlbTI4MjAgc3BlY2lmaWMpIHNvIEkgZGVjaWRlZCB0bworICAgbm90IHdyaXRl IGFuIEkyQyBjbGllbnQgbm8gb3RoZXIgZGV2aWNlIHdpbGwgYmVoYXZlIGxpa2UgdGhpcyBvbmUK KworICAgVGhhbmtzIHRvIFdhbHRlciBHcm9tIGZyb20gTVQgKHd3dy5tdC5jb20pIGZvciBpbXBs ZW1lbnRpbmcKKyAgIHRoZSByZXZlcnNlZCBzcGVjcworCisgICBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZv dW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgor Ki8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K KyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1 ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4 L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorCisjaW5jbHVkZSAi ZW0yOHh4LmgiCisKKyNkZWZpbmUgVllfRkVBVFVSRV9SRUdJU1RFUl8xICAgICAgIDB4MDIgLyog R2FpbiBjb250cm9sIGVuLCBnYWluIGNvbnRyb2wKKwkJCQkJICAgIHZhbHVlcyAqLworI2RlZmlu ZSBWWV9GRUFUVVJFX1JFR0lTVEVSXzIgICAgICAgMHgwNCAvKiBXQk0sIFNodXR0ZXIsIE1pcnJv ciAqLworI2RlZmluZSBWWV9GRUFUVVJFX1JFR0lTVEVSXzMgICAgICAgMHg3YyAvKiBlZGdlIGVu aGFuY2UgKi8KKyNkZWZpbmUgVllfRkVBVFVSRV9SRUdJU1RFUl80ICAgICAgIDB4N2IgLyogZWRn ZSBlbmhhbmNlIGVuICovCisjZGVmaW5lIFZZX0ZFQVRVUkVfUkVHSVNURVJfNSAgICAgICAweDdl IC8qIGVkZ2UgZW5oYW5jZSBhZ2Fpbj8gKi8KKyNkZWZpbmUgVllfRkVBVFVSRV9SRUdJU1RFUl82 ICAgICAgIDB4MTMgLyogQkxDID8/ICovCisjZGVmaW5lIFZZX0ZFQVRVUkVfUkVHSVNURVJfNwkg ICAgMHgxZCAvKiBnYWluIGNvbnRyb2wgdmFsdWVzICovCisjZGVmaW5lIFZZX0ZFQVRVUkVfUkVH SVNURVJfOAkgICAgMHg0MiAvKiBSR2FpbiAqLworI2RlZmluZSBWWV9GRUFUVVJFX1JFR0lTVEVS XzkgICAgICAgMHg0MyAvKiBCR2FpbiAqLworCisjZGVmaW5lIFY0TDJfVllfV0JNX01BU0sgICAg ICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgVjRMMl9WWV9TSFVUVEVSX01BU0sgICAgICAgICAg ICAgMHg3OAorI2RlZmluZSBWNEwyX1ZZX01JUlJPUl9NQVNLICAgICAgICAgICAgICAweDgwCisj ZGVmaW5lIFY0TDJfVllfR0FJTl9DT05UUk9MX0VOX01BU0sgICAgIDB4MDIKKyNkZWZpbmUgVjRM Ml9WWV9HQUlOX0NPTlRST0xfTUFTSyAgICAgICAgMHhmZQorI2RlZmluZSBWNEwyX1ZZX0VER0Vf RU5IQU5DRV9FTl9NQVNLICAgICAweDAzCisjZGVmaW5lIFY0TDJfVllfRURHRV9FTkhBTkNFX01B U0sgICAgICAgIDB4MWYKKyNkZWZpbmUgVjRMMl9WWV9CTENfTUFTSyAgICAgICAgICAgICAgICAg MHgwMCAvKiBGSVhNRSAqLworI2RlZmluZSBWNEwyX1ZZX1JHQUlOX01BU0sgICAgICAgICAgICAg ICAweEZGCisjZGVmaW5lIFY0TDJfVllfQkdBSU5fTUFTSyAgICAgICAgICAgICAgIDB4RkYKKwor LyogdmlkZW9sb2d5IHNwZWNpZmljIGRhdGEgKi8KK3N0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBlbTI4 eHhfdnlfY3RybFtdID0geworCXsKKwkJLmlkID0gVjRMMl9WWV9XQk0sCisJCS50eXBlID0gVjRM Ml9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgPSAid2hpdGVibGMiLAorCQkubWluaW11bSA9 IDB4MCwKKwkJLm1heGltdW0gPSAweDMsCisJCS5zdGVwID0gMHgxLAorCQkuZGVmYXVsdF92YWx1 ZSA9IDB4MCwKKwkJLmZsYWdzID0gMCwKKwl9LCB7CisJCS5pZCA9IFY0TDJfVllfU0hVVFRFUiwK KwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSA9ICJzaHV0dGVybW9k ZSIsCisJCS5taW5pbXVtID0gMHgwLAorCQkubWF4aW11bSA9IDB4ZiwKKwkJLnN0ZXAgPSAxLAor CQkuZGVmYXVsdF92YWx1ZSA9IDB4ZiwKKwkJLmZsYWdzID0gMCwKKwl9LCB7CisJCS5pZCA9IFY0 TDJfVllfTUlSUk9SLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5uYW1l ID0gIm1pcnJvciIsCisJCS5taW5pbXVtID0gMHgwLAorCQkubWF4aW11bSA9IDB4MSwKKwkJLnN0 ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDB4MCwKKwkJLmZsYWdzID0gMCwKKwl9LCB7CisJ CS5pZCA9IFY0TDJfVllfR0FJTl9DT05UUk9MX0VOLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBF X0JPT0xFQU4sCisJCS5uYW1lID0gImdhaW5fZW4iLAorCQkubWluaW11bSA9IDB4MCwKKwkJLm1h eGltdW0gPSAweDEsCisJCS5zdGVwID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAweDAsCisJCS5m bGFncyA9IDAsCisJfSwgeworCQkuaWQgPSBWNEwyX1ZZX0dBSU5fQ09OVFJPTCwKKwkJLnR5cGUg PSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSA9ICJnYWluY3RybCIsCisJCS5taW5p bXVtID0gMHgwLAorCQkubWF4aW11bSA9IDB4N2YsCisJCS5zdGVwID0gMSwKKwkJLmRlZmF1bHRf dmFsdWUgPSAweDAsCisJCS5mbGFncyA9IDAsCisJfSwgeworCQkuaWQgPSBWNEwyX1ZZX0VER0Vf RU5IQU5DRV9FTiwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZSA9 ICJlZGdlX2VuIiwKKwkJLm1pbmltdW0gPSAweDAsCisJCS5tYXhpbXVtID0gMHgxLAorCQkuc3Rl cCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMHgwLAorCQkuZmxhZ3MgPSAwLAorCX0sIHsKKwkJ LmlkID0gVjRMMl9WWV9FREdFX0VOSEFOQ0UsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5U RUdFUiwKKwkJLm5hbWUgPSAiZWRnZWN0cmwiLAorCQkubWluaW11bSA9IDB4MCwKKwkJLm1heGlt dW0gPSAweDFmLAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMHgwLAorCQkuZmxh Z3MgPSAwLAorCX0sIHsKKwkJLmlkID0gVjRMMl9WWV9CTEMsIC8qIHdvbmRlciB3aGF0IHRoaXMg cmVhbGx5IGlzPyAqLworCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1l ID0gImJsYyIsCisJCS5taW5pbXVtID0gMHgwLAorCQkubWF4aW11bSA9IDB4NDAsCisJCS5zdGVw ID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAweDAsCisJCS5mbGFncyA9IDAsCisJfSwgeworCQku aWQgPSBWNEwyX1ZZX1JHQUlOLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJ CS5uYW1lID0gInJnYWluIiwKKwkJLm1pbmltdW0gPSAweDAsCisJCS5tYXhpbXVtID0gMHhmZiwK KwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDB4M2IsCisJCS5mbGFncyA9IDAsCisJ fSwgeworCQkuaWQgPSBWNEwyX1ZZX0JHQUlOLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lO VEVHRVIsCisJCS5uYW1lID0gImJnYWluIiwKKwkJLm1pbmltdW0gPSAweDAsCisJCS5tYXhpbXVt ID0gMHhmZiwKKwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDB4NzQsCisJCS5mbGFn cyA9IDAsCisJfQorfTsKKworCitzdGF0aWMgaW50IGVtMjh4eF92eV9yZWFkbWFwKHN0cnVjdCBl bTI4eHggKmRldiwgdTggcmVnLCBpbnQgbWFzaykKK3sKKwlpbnQgdmFsdWU7CisKKwllbTI4eHhf d3JpdGVfcmVnc19yZXEoZGV2LCAweDAyLCAweGEyLCAmcmVnLCAxKTsKKwl2YWx1ZSA9IGVtMjh4 eF9yZWFkX3JlZ19yZXEoZGV2LCAweDIsIDB4YTIpOworCXZhbHVlICY9IG1hc2s7CisJcmV0dXJu IHZhbHVlOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSAqLworaW50IGVtMjh4eF92eV93cml0ZShzdHJ1Y3QgZW0yOHh4ICpkZXYsIHU4IHJl Z19pbmRleCwgdTggdmFsdWUsIHU4IG1hc2spCit7CisJdTggbXNnWzJdOworCXU4IHZhbDsKKwl1 OCBvbGR2YWw7CisJdTggc3RhdGUgPSAxOyAvKiAxID09IE9LICovCisKKwkvKiB3cml0ZSBpbmRl eCBvZiBkZXNpcmVkIHJlZ2lzdGVyIHRvIGFkcmVzcyAweGEyICovCisJZW0yOHh4X3dyaXRlX3Jl Z3NfcmVxKGRldiwgMHgwMiwgMHhhMiwgJnJlZ19pbmRleCwgMSk7CisJLyogcmVhZCBvbGQgcmVn aXN0ZXIgdmFsdWUgZnJvbSBlZXByb20gKi8KKwlvbGR2YWwgPSBlbTI4eHhfcmVhZF9yZWdfcmVx KGRldiwgMHgyLCAweGEyKTsKKwkvKiB3cml0ZSBhZ2FpbiBpbmRleCBvZiBkZXNpcmVkIHJlZ2lz dGVyIHRvIGFkcmVzcyAweGEyICovCisJZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwgMHgwMiwg MHhhMiwgJnJlZ19pbmRleCwgMSk7CisKKwkvKiBjYWxjdWxhdGUgbmV3IHJlZ2lzdGVyIHZhbHVl ICovCisJbXNnWzBdID0gcmVnX2luZGV4OworCW1zZ1sxXSA9IChvbGR2YWwgJiB+bWFzayl8KHZh bHVlJm1hc2spOworCS8qIHdyaXRlIG5ldyByZWdpc3RlciB2YWx1ZSB0byBlZXByb20gKi8KKwlk ZXYtPmVtMjh4eF93cml0ZV9yZWdzX3JlcShkZXYsIDB4MDIsIDB4YTAsIG1zZywgMik7CisKKwkv KiBpbnN0cnVjdCBtaWNyb2NvbnRyb2xsZXIgdG8gd3JpdGUgdmFsdWVzIGludG8gdGhlIGVlcHJv bSAqLworCW1zZ1swXSA9IDB4MTE7CisJbXNnWzFdID0gcmVnX2luZGV4OworCWRldi0+ZW0yOHh4 X3dyaXRlX3JlZ3NfcmVxKGRldiwgMHgwMiwgMHg2OCwgbXNnLCAyKTsKKwlkZXYtPmVtMjh4eF93 cml0ZV9yZWdzX3JlcShkZXYsIDB4MDMsIDB4NjgsICJceDAwIiwgMSk7CisJdmFsID0gZW0yOHh4 X3JlYWRfcmVnX3JlcShkZXYsIDB4MiwgMHg2OCk7CisJaWYgKHZhbCA9PSAweDA1KQorCQk7IC8q IGV2ZXJ5dGhpbmcncyBmaW5lICovCisJZWxzZQorCQlzdGF0ZSA9IDA7CisKKwkvKiB3cml0ZSBu ZXcgcmVnaXN0ZXIgdmFsdWUgdG8gZWVwcm9tIGFnYWluICovCisJbXNnWzBdID0gcmVnX2luZGV4 OworCW1zZ1sxXSA9IChvbGR2YWwgJiB+bWFzayl8KHZhbHVlJm1hc2spOworCWRldi0+ZW0yOHh4 X3dyaXRlX3JlZ3NfcmVxKGRldiwgMHgwMiwgMHhhMiwgbXNnLCAyKTsKKworCS8qIGluc3RydWN0 IG1pY3JvY29udHJvbGxlciBmb3IgdmVyaWZpY2F0aW9uICovCisJbXNnWzBdID0gMHgyMTsKKwlt c2dbMV0gPSByZWdfaW5kZXg7CisJZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwgMHgwMiwgMHg2 OCwgbXNnLCAyKTsKKwllbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCAweDAzLCAweDY4LCAiXHgw MCIsIDEpOworCXZhbCA9IGVtMjh4eF9yZWFkX3JlZ19yZXEoZGV2LCAweDIsIDB4NjgpOworCWlm ICh2YWwgPT0gMHgwNSkKKwkJOyAvKiBldmVyeXRoaW5nJ3MgZmluZSAqLworCWVsc2UKKwkJc3Rh dGUgPSAwOworCisJaWYgKHN0YXRlID09IDApCisJCXJldHVybiBvbGR2YWw7ICAvKiBlcnJvciAq LworCWVsc2UKKwkJcmV0dXJuIHZhbHVlOworfQorCisvKiBlbWJlZGRlZCBRVUVSWUNUUkwgKi8K K2ludCBlbTI4eHhfdnlfcWN0cmwoc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCkKK3sKKwlz dHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjID0gcWN0cmw7CisJaW50IGk7CisJZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUoZW0yOHh4X3Z5X2N0cmwpOyBpKyspIHsKKwkJaWYgKHFjLT5pZCAmJiBx Yy0+aWQgPT0gZW0yOHh4X3Z5X2N0cmxbaV0uaWQpIHsKKwkJCW1lbWNweShxYywgJihlbTI4eHhf dnlfY3RybFtpXSksCisJCQkJCXNpemVvZigqcWMpKTsKKwkJCXJldHVybiAwOworCQl9CisJfQor CXJldHVybiAtRUlOVkFMOyAvKiBubyBjdHJsIGZvdW5kIGhlcmUgKi8KK30KKworLyogVklESU9D X0dfQ1RSTCAqLworaW50IGVtMjh4eF92eV9nY3RybChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHN0cnVj dCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRM Ml9WWV9XQk06CisJCWN0cmwtPnZhbHVlID0gZW0yOHh4X3Z5X3JlYWRtYXAoZGV2LAorCQkJCVZZ X0ZFQVRVUkVfUkVHSVNURVJfMiwKKwkJCQlWNEwyX1ZZX1dCTV9NQVNLKTsKKwkJYnJlYWs7CisJ Y2FzZSBWNEwyX1ZZX1NIVVRURVI6CisJCWN0cmwtPnZhbHVlID0gKGVtMjh4eF92eV9yZWFkbWFw KGRldiwKKwkJCQkJVllfRkVBVFVSRV9SRUdJU1RFUl8yLAorCQkJCQlWNEwyX1ZZX1NIVVRURVJf TUFTSykpID4+IDM7CisJCWJyZWFrOworCWNhc2UgVjRMMl9WWV9NSVJST1I6CisJCWN0cmwtPnZh bHVlID0gKGVtMjh4eF92eV9yZWFkbWFwKGRldiwKKwkJCQkJVllfRkVBVFVSRV9SRUdJU1RFUl8y LAorCQkJCQlWNEwyX1ZZX01JUlJPUl9NQVNLKSkgPj4gNzsKKwkJYnJlYWs7CisJY2FzZSBWNEwy X1ZZX0dBSU5fQ09OVFJPTF9FTjoKKwkJY3RybC0+dmFsdWUgPSAoZW0yOHh4X3Z5X3JlYWRtYXAo ZGV2LAorCQkJCQlWWV9GRUFUVVJFX1JFR0lTVEVSXzEsCisJCQkJCVY0TDJfVllfR0FJTl9DT05U Uk9MX0VOX01BU0spKSA+PiAxOworCQlicmVhazsKKwljYXNlIFY0TDJfVllfR0FJTl9DT05UUk9M OgorCQljdHJsLT52YWx1ZSA9IChlbTI4eHhfdnlfcmVhZG1hcChkZXYsCisJCQkJCVZZX0ZFQVRV UkVfUkVHSVNURVJfNywKKwkJCQkJVjRMMl9WWV9HQUlOX0NPTlRST0xfTUFTSykpID4+IDE7CisJ CWJyZWFrOworCWNhc2UgVjRMMl9WWV9FREdFX0VOSEFOQ0VfRU46CisJCWN0cmwtPnZhbHVlID0g KGVtMjh4eF92eV9yZWFkbWFwKGRldiwKKwkJCQkJVllfRkVBVFVSRV9SRUdJU1RFUl80LAorCQkJ CQlWNEwyX1ZZX0VER0VfRU5IQU5DRV9FTl9NQVNLKSAmIDB4MDEpID8KKwkJCQkJMCA6IDE7CisJ CWJyZWFrOworCWNhc2UgVjRMMl9WWV9FREdFX0VOSEFOQ0U6CisJCWN0cmwtPnZhbHVlID0gZW0y OHh4X3Z5X3JlYWRtYXAoZGV2LCBWWV9GRUFUVVJFX1JFR0lTVEVSXzMsCisJCQkJCSAgICAgICBW NEwyX1ZZX0VER0VfRU5IQU5DRV9NQVNLKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1ZZX0JMQzoK KyNpZiAwCisJCWN0cmwtPnZhbHVlID0gZW0yOHh4X3Z5X3JlYWRtYXAoZGV2LCBWWV9GRUFUVVJF X1JFR0lTVEVSXzYsCisJCQkJVjRMMl9WWV9CTENfTUFTSyk7CisjZW5kaWYKKwkJcHJpbnRrKEtF Uk5fSU5GTyJlbTI4eHgtdnkuYyBWNEwyX1ZZX0JMQzogbm90IGltcGxlbWVudGVkXG4iKTsKKwkJ YnJlYWs7CisJY2FzZSBWNEwyX1ZZX1JHQUlOOgorCQljdHJsLT52YWx1ZSA9IGVtMjh4eF92eV9y ZWFkbWFwKGRldiwgVllfRkVBVFVSRV9SRUdJU1RFUl84LAorCQkJCQkgICAgICAgVjRMMl9WWV9S R0FJTl9NQVNLKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1ZZX0JHQUlOOgorCQljdHJsLT52YWx1 ZSA9IGVtMjh4eF92eV9yZWFkbWFwKGRldiwgVllfRkVBVFVSRV9SRUdJU1RFUl85LAorCQkJCQkg ICAgICAgVjRMMl9WWV9CR0FJTl9NQVNLKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRr KEtFUk5fSU5GTyJlbTI4eHgtdnkuYzogdW5rbm93biBjb21tYW5kIVxuIik7CisJCXJldHVybiAt RUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogVklESU9DX1NfQ1RSTCAqLworaW50IGVt Mjh4eF92eV9jY3RybChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0 cmwpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShlbTI4eHhfdnlf Y3RybCk7IGkrKykgeworCQlpZiAoY3RybC0+aWQgPT0gZW0yOHh4X3Z5X2N0cmxbaV0uaWQpIHsK KwkJCWlmIChlbTI4eHhfdnlfY3RybFtpXS5taW5pbXVtID49IGN0cmwtPnZhbHVlICYmCisJCQkJ CWVtMjh4eF92eV9jdHJsW2ldLm1heGltdW0gPD0KKwkJCQkJY3RybC0+dmFsdWUpIHsKKwkJCQlw cmludGsoS0VSTl9JTkZPImVtMjh4eC12eS5jOiB2YWx1ZSBvdXQgb2YgIgorCQkJCQkJInJhbmdl XG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfQorCX0KKworCXN3aXRjaCAoY3Ry bC0+aWQpIHsKKwljYXNlIFY0TDJfVllfV0JNOgorCQllbTI4eHhfdnlfd3JpdGUoZGV2LCAodTgp VllfRkVBVFVSRV9SRUdJU1RFUl8yLAorCQkJCSh1OCljdHJsLT52YWx1ZSwgVjRMMl9WWV9XQk1f TUFTSyk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9WWV9TSFVUVEVSOgorCQllbTI4eHhfdnlfd3Jp dGUoZGV2LCAodTgpVllfRkVBVFVSRV9SRUdJU1RFUl8yLAorCQkJCSh1OCkoY3RybC0+dmFsdWUp PDwzLAorCQkJCVY0TDJfVllfU0hVVFRFUl9NQVNLKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1ZZ X01JUlJPUjoKKwkJZW0yOHh4X3Z5X3dyaXRlKGRldiwgKHU4KVZZX0ZFQVRVUkVfUkVHSVNURVJf MiwKKwkJCQkodTgpKGN0cmwtPnZhbHVlKTw8NywKKwkJCQlWNEwyX1ZZX01JUlJPUl9NQVNLKTsK KwkJYnJlYWs7CisJY2FzZSBWNEwyX1ZZX0dBSU5fQ09OVFJPTF9FTjoKKwkJZW0yOHh4X3Z5X3dy aXRlKGRldiwgKHU4KVZZX0ZFQVRVUkVfUkVHSVNURVJfMSwKKwkJCQkodTgpKGN0cmwtPnZhbHVl KTw8MSwKKwkJCQlWNEwyX1ZZX0dBSU5fQ09OVFJPTF9FTl9NQVNLKTsKKwkJYnJlYWs7CisJY2Fz ZSBWNEwyX1ZZX0dBSU5fQ09OVFJPTDoKKwkJZW0yOHh4X3Z5X3dyaXRlKGRldiwgKHU4KVZZX0ZF QVRVUkVfUkVHSVNURVJfNywKKwkJCQkodTgpKGN0cmwtPnZhbHVlKTw8MSwKKwkJCQlWNEwyX1ZZ X0dBSU5fQ09OVFJPTF9NQVNLKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1ZZX0VER0VfRU5IQU5D RV9FTjoKKwkJZW0yOHh4X3Z5X3dyaXRlKGRldiwgKHU4KVZZX0ZFQVRVUkVfUkVHSVNURVJfNCwK KwkJCQkodTgpKH4oKChjdHJsLT52YWx1ZSk8PDEpIHwgKGN0cmwtPnZhbHVlKSkpLAorCQkJCVY0 TDJfVllfRURHRV9FTkhBTkNFX0VOX01BU0spOworCQlicmVhazsKKwljYXNlIFY0TDJfVllfRURH RV9FTkhBTkNFOgorCQllbTI4eHhfdnlfd3JpdGUoZGV2LCAodTgpVllfRkVBVFVSRV9SRUdJU1RF Ul8zLAorCQkJCSh1OCkoY3RybC0+dmFsdWUpLAorCQkJCVY0TDJfVllfRURHRV9FTkhBTkNFX01B U0spOworCQllbTI4eHhfdnlfd3JpdGUoZGV2LCAodTgpVllfRkVBVFVSRV9SRUdJU1RFUl81LAor CQkJCSh1OCkoY3RybC0+dmFsdWUpLAorCQkJCVY0TDJfVllfRURHRV9FTkhBTkNFX01BU0spOwor CQlicmVhazsKKwljYXNlIFY0TDJfVllfUkdBSU46CisJCWVtMjh4eF92eV93cml0ZShkZXYsICh1 OClWWV9GRUFUVVJFX1JFR0lTVEVSXzgsCisJCQkJKHU4KShjdHJsLT52YWx1ZSksCisJCQkJVjRM Ml9WWV9SR0FJTl9NQVNLKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1ZZX0JHQUlOOgorCQllbTI4 eHhfdnlfd3JpdGUoZGV2LCAodTgpVllfRkVBVFVSRV9SRUdJU1RFUl85LAorCQkJCSh1OCkoY3Ry bC0+dmFsdWUpLAorCQkJCVY0TDJfVllfQkdBSU5fTUFTSyk7CisJCWJyZWFrOworCWNhc2UgVjRM Ml9WWV9CTEM6CisJCXByaW50ayhLRVJOX0lORk8iZW0yOHh4LXZ5LmMgVjRsMl9WWV9CTEMgbm90 IGltcGxlbWVudGVkXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fSU5G TyJlbTI4eHgtdnkuYzogdW5rbm93biBjb21tYW5kIVxuIik7CisJfQorCXJldHVybiAwOworfQor CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW1waWEvZW0yOHh4LmggYi9kcml2 ZXJzL21lZGlhL3ZpZGVvL2VtcGlhL2VtMjh4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjA2OWRkNWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVv L2VtcGlhL2VtMjh4eC5oCkBAIC0wLDAgKzEsMTE1MyBAQAorLyoKKyAgIGVtMjh4eC5oIC0gZHJp dmVyIGZvciBFbXBpYSBFTTI4MDAvRU0yODIwLzI4NDAvMjg4MCBVU0IgdmlkZW8gY2FwdHVyZSBk ZXZpY2VzCisKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgUmVjaGJlcmdlciA8bXJlY2hi ZXJnZXJAZ21haWwuY29tPgorCQkgICAgICBMdWRvdmljbyBDYXZlZG9uIDxjYXZlZG9uQHNzc3Vw Lml0PgorCQkgICAgICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9y Zz4KKworICAgQmFzZWQgb24gdGhlIGVtMjgwMCBkcml2ZXIgZnJvbSBTYXNjaGEgU29tbWVyIDxz YXNjaGFzb21tZXJAZnJlZW5ldC5kZT4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor ICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9u LCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisj aWZuZGVmIF9FTTI4WFhfSAorI2RlZmluZSBfRU0yOFhYX0gKKworI2luY2x1ZGUgPGxpbnV4L3Zl cnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2ky Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorI2luY2x1ZGUgImRteGRldi5o IgorI2luY2x1ZGUgImR2Yl9kZW11eC5oIgorI2luY2x1ZGUgImR2Yl9uZXQuaCIKKyNpbmNsdWRl ICJkdmJfZnJvbnRlbmQuaCIKKyNpbmNsdWRlIDxsaW51eC9zb3VuZGNhcmQuaD4KKworI2lmIExJ TlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDI1KQorI2luY2x1ZGUgPHNv dW5kL2RyaXZlci5oPgorI2VuZGlmCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUg PHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlICJ4 YzMwMjgveGMzMDI4X2NvbnRyb2wuaCIKKyNpbmNsdWRlICJjeDI1ODQzL2VtMjh4eC1jeDI1ODQz LmgiCisjaW5jbHVkZSAibWVkaWEvdHVuZXIuaCIKKyNpbmNsdWRlICJlbTI4eHgtYWFkLmgiCisK KyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLCA2LCAxNSkKKyNpbmNs dWRlIDxsaW51eC9tdXRleC5oPgorI2VuZGlmCisjaW5jbHVkZSA8bWVkaWEvaXIta2JkLWkyYy5o PgorCisvKiBCb2FyZHMgc3VwcG9ydGVkIGJ5IGRyaXZlciAqLworCisjZGVmaW5lIEVNMjgwMF9C T0FSRF9HRU5FUklDCQkJICAwCisjZGVmaW5lIEVNMjgyMF9CT0FSRF9HRU5FUklDCQkJICAxCisj ZGVmaW5lIEVNMjgyMV9CT0FSRF9HRU5FUklDICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZp bmUgRU0yODcwX0JPQVJEX0dFTkVSSUMgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBF TTI4ODFfQk9BUkRfR0VORVJJQyAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEVNMjg2 MF9CT0FSRF9HRU5FUklDIAkJCSAgNQorI2RlZmluZSBFTTI4NjFfQk9BUkRfR0VORVJJQyAJCQkg IDYKKyNkZWZpbmUgRU0yODIwX0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfMjUwCSAgNworI2RlZmlu ZSBFTTI4MjBfQk9BUkRfUElOTkFDTEVfVVNCXzIJCSAgOAorI2RlZmluZSBFTTI4MjBfQk9BUkRf SEFVUFBBVUdFX1dJTlRWX1VTQl8yICAgICAgICA5CisjZGVmaW5lIEVNMjgyMF9CT0FSRF9NU0lf Vk9YX1VTQl8yICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEVNMjgwMF9CT0FSRF9URVJSQVRF Q19DSU5FUkdZXzIwMCAgICAgICAgIDExCisjZGVmaW5lIEVNMjgwMF9CT0FSRF9MRUFEVEVLX1dJ TkZBU1RfVVNCSUkgICAgICAgIDEyCisjZGVmaW5lIEVNMjgwMF9CT0FSRF9LV09STERfVVNCMjgw MCAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEVNMjgyMF9CT0FSRF9QSU5OQUNMRV9EVkNfOTAJ CSAgMTQKKyNkZWZpbmUgRU0yODgwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfOTAwCSAgMTUK KyNkZWZpbmUgRU0yODgwX0JPQVJEX1RFUlJBVEVDX0hZQlJJRF9YUwkJICAxNgorI2RlZmluZSBF TTI4ODBfQk9BUkRfVEVSUkFURUNfSFlCUklEX1hTX0ZSCSAgMTcKKyNkZWZpbmUgRU0yODIwX0JP QVJEX0tXT1JMRF9QVlJUVjI4MDBSRgkJICAxOAorI2RlZmluZSBFTTI4ODBfQk9BUkRfVEVSUkFU RUNfUFJPRElHWV9YUwkgIDE5CisjZGVmaW5lIEVNMjgyMF9CT0FSRF9WSURFT0xPR1lfMjBLMTRY VVNCCSAgMjAKKyNkZWZpbmUgRU0yODIxX0JPQVJEX1VTQkdFQVJfVkQyMDQgICAgICAgICAgICAg ICAgMjEKKyNkZWZpbmUgRU0yODcwX0JPQVJEX1RFUlJBVEVDX1hTICAgICAgICAgICAgICAgICAg MjIKKyNkZWZpbmUgRU0yODcwX0JPQVJEX1BJTk5BQ0xFX1BDVFZfRFZCICAgICAgICAgICAgMjMK KyNkZWZpbmUgRU0yODgxX0JPQVJEX0ROVF9EQTJfSFlCUklEICAgICAgICAgICAgICAgMjQKKyNk ZWZpbmUgRU0yODgxX0JPQVJEX1BJTk5BQ0xFX0hZQlJJRF9QUk8gICAgICAgICAgMjUKKyNkZWZp bmUgRU0yODIwX0JPQVJEX0hFUkNVTEVTX1NNQVJUX1RWX1VTQjIJICAyNgorI2RlZmluZSBFTTI4 NzBfQk9BUkRfQ09NUFJPX1ZJREVPTUFURSAgICAgICAgICAgICAyNworI2RlZmluZSBFTTI4ODBf Qk9BUkRfS1dPUkxEX0RWQl8zMTBVICAgICAgICAgICAgICAyOAorI2RlZmluZSBFTTI4MjFfQk9B UkRfUFJPTElOS19QTEFZVFZfVVNCMiAgICAgICAgICAyOQorI2RlZmluZSBFTTI4NzBfQk9BUkRf VEVSUkFURUNfWFNfTVQyMDYwICAgICAgICAgICAzMAorI2RlZmluZSBFTTI4ODBfQk9BUkRfTVNJ X0RJR0lWT1hfQUQgICAgICAgICAgICAgICAzMQorI2RlZmluZSBFTTI4MjBfQk9BUkRfRExJTktf VVNCX1RWICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBFTTI4MjBfQk9BUkRfR0FETUVJX1VU VjMxMCAgICAgICAgICAgICAgICAzMworI2RlZmluZSBFTTI4NzBfQk9BUkRfS1dPUkxEXzM1NVUJ CSAgMzQKKyNkZWZpbmUgRU0yODIxX0JPQVJEX1NVUEVSQ09NUF9VU0JfMiAgICAgICAgICAgICAg MzUKKyNkZWZpbmUgRU0yODgwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfOTAwX1IyCSAgMzYK KyNkZWZpbmUgRU0yODYwX0JPQVJEX0dBRE1FSV9VVFYzMzAJCSAgMzcKKyNkZWZpbmUgRU0yODAw X0JPQVJEX1ZHRUFSX1BPQ0tFVFRWICAgICAgICAgICAgICAgMzgKKyNkZWZpbmUgRU0yODcwX0JP QVJEX0tXT1JMRF8zNTBVCQkgIDM5CisjZGVmaW5lIEVNMjg4Ml9CT0FSRF9URVJSQVRFQ19IWUJS SURfWFMJCSAgNDAKKyNkZWZpbmUgRU0yODIwX0JPQVJEX1BJTk5BQ0xFX0RWQ18xMDAJCSAgNDEK KyNkZWZpbmUgRU0yODYxX0JPQVJEX1lBS1VNT19NT1ZJRV9NSVhFUiAgICAgICAgICAgNDMKKyNk ZWZpbmUgRU0yNzUwX0JPQVJEX0RMQ1dfMTMwICAgICAgICAgICAgICAgICAgICAgNDQKKyNkZWZp bmUgRU0yNzUwX0JPQVJEX0dFTkVSSUMJCQkgIDQyCisjZGVmaW5lIEVNMjg4M19CT0FSRF9HRU5F UklDICAgICAgICAgICAgICAgICAgICAgIDQ1CisjZGVmaW5lIEVNMjg4M19CT0FSRF9IQVVQUEFV R0VfV0lOVFZfSFZSXzk1MCAgICAgIDQ2CisjZGVmaW5lIEVNMjg4M19CT0FSRF9QSU5OQUNMRV9Q Q1RWX0hEX1BSTwkgIDQ3CisjZGVmaW5lIEVNMjg4Ml9CT0FSRF9QSU5OQUNMRV9IWUJSSURfUFJP ICAgICAgICAgIDQ4CisjZGVmaW5lIEVNMjgyMF9CT0FSRF9IQVVQUEFVR0VfV0lOVFZfVVNCXzJf UjIgICAgIDQ5CisjZGVmaW5lIEVNMjg2MF9CT0FSRF9ORVRHTUJIX0NBTQkJICA1MAorI2RlZmlu ZSBFTTI4MjBfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1VTQklJX0RFTFVYRSA1MQorI2RlZmluZSBF TTI4ODBfQk9BUkRfTVNJX0RJR0lWT1hfQURfSUkgICAgICAgICAgICA1MgorI2RlZmluZSBFTTI4 NjBfQk9BUkRfVFlQSE9PTl9EVkRfTUFLRVIgICAgICAgICAgICA1MworI2RlZmluZSBFTTI4MjBf Qk9BUkRfUElOTkFDTEVfVVNCXzJfRk0xMjE2TUUgICAgICA1NAorI2RlZmluZSBFTTI3NTFfQk9B UkRfRU1QSUFfU0FNUExFCQkgIDU1CisjZGVmaW5lIEVNMjg4MF9CT0FSRF9LV09STERfRFZCXzMw NVUgICAgICAgICAgICAgIDU2CisjZGVmaW5lIEVNMjg2MV9CT0FSRF9LV09STERfUFZSVFZfMzAw VSAJCSAgNTcKKyNkZWZpbmUgRU0yODgzX0JPQVJEX0tXT1JMRF9IWUJSSURfQTMxNiAJICA1OAor I2RlZmluZSBFTTI4NjBfQk9BUkRfVEVSUkFURUNfSFlCUklEX1hTCQkgIDU5CisjZGVmaW5lIEVN Mjg2MV9CT0FSRF9QTEVYVE9SX1BYX1RWMTAwVSAgICAgICAgICAgIDYwCisjZGVmaW5lIEVNMjg4 M19CT0FSRF9URVJSQVRFQ19IWUJSSURfWFNfRk0gICAgICAgIDYxCisjZGVmaW5lIEVNMjg3MF9C T0FSRF9IQVVQUEFVR0VfV0lOVFZfVVNCXzJfUjIgICAgIDYyCisjZGVmaW5lIEVNMjg4M19CT0FS RF9FTVBJQV9IWUJSSURfQVRTQyAgICAgICAgICAgIDYzCisjZGVmaW5lIEVNMjg2M19CT0FSRF9F TVBJQV9HRU5FUklDICAgICAgICAgICAgICAgIDY0CisjZGVmaW5lIEVNMjg4M19CT0FSRF9LV09S TERfSFlCUklEX0YzMDYJCSAgNjUKKyNkZWZpbmUgRU0yODg4X0JPQVJEX0tXT1JMRF9IWUJSSURf RTMyOQkJICA2NgorI2RlZmluZSBFTTI4ODNfQk9BUkRfS1dPUkxEX0hZQlJJRF9FMzIzCQkgIDY3 CisjZGVmaW5lIEVNMjg4M19CT0FSRF9LV09STERfQTM0MAkJICA2OAorI2RlZmluZSBFTTI4ODhf Qk9BUkRfTElOQ09MTl9UVl9GTQkJICA2OQorI2RlZmluZSBFTTI4ODhfQk9BUkRfRFZCX1RDX0hZ QlJJRAkJICA3MAorI2RlZmluZSBFTTI4ODhfQk9BUkRfRU1QSUFfSFlCUklEICAgICAgICAgICAg ICAgICA3MQorI2RlZmluZSBFTTI4ODNfQk9BUkRfQVRJX1RWV09OREVSNjAwCQkgIDcyCisjZGVm aW5lIEVNMjg3NV9CT0FSRF9TQU1QTEVfSVNEQlQgICAgICAgICAgICAgICAgIDczCisjZGVmaW5l IEVNMjg3OV9CT0FSRF9TQU1QTEVfRE1CICAgICAgICAgICAgICAgICAgIDc0CisjZGVmaW5lIEVN Mjg2MF9CT0FSRF9LQUlPTVlfVFZOUENfVTIgICAgICAgICAgICAgIDc1CisjZGVmaW5lIEVNMjg2 MV9CT0FSRF9QT0xMSU5fVVNCX1IxICAgICAgICAgICAgICAgIDc2CisjZGVmaW5lIEVNMjg4M19C T0FSRF9FUVVJTlVYX1RVQkVTVElDS19BVFNDICAgICAgIDc3CisjZGVmaW5lIEVNMjg4Ml9CT0FS RF9MRUFEVEVLX1BBTE1UT1BfRFRWXzIwMEggICAgIDc4CisjZGVmaW5lIEVNMjgyMF9CT0FSRF9D T01QUk9fVklERU9fTUFURSAgICAgICAgICAgIDc5CisKKyNpZm5kZWYgVFVORVJfWENFSVZFX1hD NTAwMAorI2RlZmluZSBUVU5FUl9YQ0VJVkVfWEM1MDAwIDEwMDAwCisjZW5kaWYKKworI2lmbmRl ZiBUVU5FUl9YQ0VJVkVfWEMzMDI4CisjZGVmaW5lIFRVTkVSX1hDRUlWRV9YQzMwMjggMTAwMDEK KyNlbmRpZgorCisjaWZuZGVmIFRVTkVSX01UMjA2MAorI2RlZmluZSBUVU5FUl9NVDIwNjAgMTAw MDIKKyNlbmRpZgorCisjaWZuZGVmIFRVTkVSX1FUMTAxMAorI2RlZmluZSBUVU5FUl9RVDEwMTAg MTAwMDMKKyNlbmRpZgorCisjaWZuZGVmIFRVTkVSX1BISUxJUFNfVERBMTgyNzEKKyNkZWZpbmUg VFVORVJfUEhJTElQU19UREExODI3MSAxMDAwNAorI2VuZGlmCisKKyNpZm5kZWYgVFVORVJfQURJ TVRWMTAyCisjZGVmaW5lIFRVTkVSX0FESU1UVjEwMiAxMDAwNQorI2VuZGlmCisKKworI2RlZmlu ZSBVTlNFVCAtMQorCisvKiBtYXhpbXVtIG51bWJlciBvZiBlbTI4eHggYm9hcmRzICovCisvKiBU T0RPOiB3ZSBzaG91bGQgZGlzdGluY3QgaGVyZSBiZXR3ZWVuCisgICAqIERWQi1UCisgICAqIGFu YWxvZ3VlIG9ubHkKKyAgICogaHlicmlkIGRldmljZXMKKyAgIDEgYW5hbG9ndWUgdHVuZXIgcmVx dWlyZXMgdXAgdG8gMTcwIG1iaXQKKyAgIDIgYW5hbG9ndWUgdHVuZXJzIHdpbGwgd29yayBpbiBh bHQgMyBtb2RlLCBidXQgdGhlIGRlZmF1bHQKKyAgICAgaXMgYWx0IDcgYXQgdGhlIG1vbWVudCAo aXQncyBwb3NzaWJsZSB0byBvdmVycmlkZQorICAgICB3aXRoIHRoZSBtb2R1bGUgcGFyYW1ldGVy IGFsdD0zKSwgdGhvdWdoIGl0IHNob3VsZCBiZQorICAgICBpbXBsZW1lbnRlZCBwcm9wZXJseS4K KyAgICAgMiBkZXZpY2VzIHRha2UgdXAgdG8gMzQwIG1iaXQgd2hpY2ggc2hvdWxkIHdvcmsuCisg ICAgICgzIHR1bmVycyB3b3VsZCBiZSA1MTAgbWJpdCB3aGljaCBpcyB0b28gbXVjaCBmb3IKKyAg ICAgb25lIHVzYiBjb250cm9sbGVyKQorCisgICBEVkItVCB0dW5lciBvbmx5IHRha2UgYXJvdW5k IDE1IG1iaXQsIHNvIHdlIHNob3VsZCBiZSBhYmxlCisgICB0byBzdXBwb3J0IG1vcmUgdGhhbiB0 aGUgbGltaXQgYmVsb3cuCisKKyAgIEkgdGhpbmsgYSBjb250cm9sbGVyIGJhc2VkIGJhbmR3aWR0 aCB0YWJsZSB3b3VsZCBkbyBoZXJlCisgICBhbmQgZ3VhcmFudGVlIHRoYXQgdGhlIGluaXRpYWxp emVkIGRldmljZXMgd2lsbCB3b3JrCisqLworI2RlZmluZSBFTTI4WFhfTUFYQk9BUkRTIDMgLyog RklYTUU6IHNob3VsZCBiZSBiaWdnZXIgKi8KKworLyogbWF4aW11bSBudW1iZXIgb2YgZnJhbWVz IHRoYXQgY2FuIGJlIHF1ZXVlZCAqLworI2RlZmluZSBFTTI4WFhfTlVNX0ZSQU1FUyA1CisvKiBu dW1iZXIgb2YgZnJhbWVzIHRoYXQgZ2V0IHVzZWQgZm9yIHY0bDJfcmVhZCgpICovCisjZGVmaW5l IEVNMjhYWF9OVU1fUkVBRF9GUkFNRVMgMgorCisvKiBudW1iZXIgb2YgYnVmZmVycyBmb3IgaXNv YyB0cmFuc2ZlcnMgKi8KKyNkZWZpbmUgRU0yOFhYX05VTV9CVUZTIDUKKyNkZWZpbmUgRU0yODgw X0RWQl9OVU1fQlVGUyA1CisjZGVmaW5lIEVNMjhYWF9BVURJT19CVUZTIDMKKyNkZWZpbmUgRU0y OFhYX05VTV9BVURJT19QQUNLRVRTIDY0CisjZGVmaW5lIEVNMjhYWF9BVURJT19NQVhfUEFDS0VU X1NJWkUgMTk2IC8qIHN0YXRpYyB2YWx1ZSAqLworCisKKy8qIG51bWJlciBvZiBwYWNrZXRzIGZv ciBlYWNoIGJ1ZmZlcgorICAgd2luZG93cyByZXF1ZXN0cyBvbmx5IDQwIHBhY2tldHMgLi4gc28g d2UgYmV0dGVyIGRvIHRoZSBzYW1lCisgICB0aGlzIGlzIHdoYXQgSSBmb3VuZCBvdXQgZm9yIGFs bCBhbHRlcm5hdGUgbnVtYmVycyB0aGVyZSEKKyAqLworI2RlZmluZSBFTTI4WFhfTlVNX1BBQ0tF VFMgNjQKKworLyogZGVmYXVsdCBhbHRlcm5hdGU7IDAgbWVhbnMgY2hvb3NlIHRoZSBiZXN0ICov CisjZGVmaW5lIEVNMjhYWF9QSU5PVVQgMAorCisjZGVmaW5lIEVNMjhYWF9JTlRFUkxBQ0VEX0RF RkFVTFQgMQorCisvKgorI2RlZmluZSAodXNlIHVzYnZpZXcgaWYgeW91IHdhbnQgdG8gZ2V0IHRo ZSBvdGhlciBhbHRlcm5hdGUgbnVtYmVyIGluZm9zKQorI2RlZmluZQorI2RlZmluZSBhbHRlcm5h dGUgbnVtYmVyIDIKKyNkZWZpbmUgCQkJRW5kcG9pbnQgQWRkcmVzczogODIKKwkJCURpcmVjdGlv bjogaW4KKwkJCUF0dHJpYnV0ZTogMQorCQkJVHlwZTogSXNvYworCQkJTWF4IFBhY2tldCBTaXpl OiAxNDQ4CisJCQlJbnRlcnZhbDogMTI1dXMKKworICBhbHRlcm5hdGUgbnVtYmVyIDcKKworCQkJ RW5kcG9pbnQgQWRkcmVzczogODIKKwkJCURpcmVjdGlvbjogaW4KKwkJCUF0dHJpYnV0ZTogMQor CQkJVHlwZTogSXNvYworCQkJTWF4IFBhY2tldCBTaXplOiAzMDcyCisJCQlJbnRlcnZhbDogMTI1 dXMKKyovCisKKy8qIHRpbWUgdG8gd2FpdCB3aGVuIHN0b3BwaW5nIHRoZSBpc29jIHRyYW5zZmVy ICovCisjZGVmaW5lIEVNMjhYWF9VUkJfVElNRU9VVCBcCisJbXNlY3NfdG9famlmZmllcyhFTTI4 WFhfTlVNX0JVRlMgKiBFTTI4WFhfTlVNX1BBQ0tFVFMpCisKKy8qIHRpbWUgaW4gbXNlY3MgdG8g d2FpdCBmb3IgaTJjIHdyaXRlcyB0byBmaW5pc2ggKi8KKyNkZWZpbmUgRU0yODAwX0kyQ19XUklU RV9USU1FT1VUIDIwCisKK2VudW0gZW0yOHh4X2ZlX2JhbmR3aWR0aCB7CisJRU0yOFhYX0JBTkRX SURUSF84X01IWiwKKwlFTTI4WFhfQkFORFdJRFRIXzdfTUhaLAorCUVNMjhYWF9CQU5EV0lEVEhf Nl9NSFosCisJRU0yOFhYX0JBTkRXSURUSF9BVVRPCit9OworCitleHRlcm4gc3RydWN0IGxpc3Rf aGVhZCBlbTI4eHhfZGV2bGlzdDsKKworLyogdGhlIHZhcmlvdXMgZnJhbWUgc3RhdGVzICovCitl bnVtIGVtMjh4eF9mcmFtZV9zdGF0ZSB7CisJRl9VTlVTRUQgPSAwLAorCUZfUVVFVUVELAorCUZf R1JBQkJJTkcsCisJRl9ET05FLAorCUZfRVJST1IsCit9OworCisvKiBzdHJlYW0gc3RhdGVzICov CitlbnVtIGVtMjh4eF9zdHJlYW1fc3RhdGUgeworCVNUUkVBTV9PRkYsCisJU1RSRUFNX09OLAor CVNUUkVBTV9JTlRFUlJVUFQsCit9OworCisvKiBmcmFtZXMgKi8KK3N0cnVjdCBlbTI4eHhfZnJh bWVfdCB7CisJdm9pZCAqYnVmbWVtOworCXN0cnVjdCB2NGwyX2J1ZmZlciBidWY7CisJZW51bSBl bTI4eHhfZnJhbWVfc3RhdGUgc3RhdGU7CisJc3RydWN0IGxpc3RfaGVhZCBmcmFtZTsKKwl1bnNp Z25lZCBsb25nIHZtYV91c2VfY291bnQ7CisJaW50IHRvcF9maWVsZDsKKwlpbnQgZmllbGRieXRl c3VzZWQ7Cit9OworCisvKiBpbyBtZXRob2RzICovCitlbnVtIGVtMjh4eF9pb19tZXRob2Qgewor CUlPX05PTkUsCisJSU9fUkVBRCwKKwlJT19NTUFQLAorfTsKKworLyogQ29sb3JzcGFjZSBPdXRw dXQgKi8KKworLyogVG8gYmUgZGlzY3Vzc2VkICovCisKKyNpZm5kZWYgVjRMMl9QSVhfRk1UX1lV VjIxMQorI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVWMjExCXY0bDJfZm91cmNjKCdZJywnMicsJzEn LCcxJykKKyNlbmRpZgorCisjaWZuZGVmIFY0TDJfUElYX0ZNVF9ZVVkxCisjZGVmaW5lIFY0TDJf UElYX0ZNVF9ZVVkxCXY0bDJfZm91cmNjKCdZJywnVScsJ1knLCcxJykKKyNlbmRpZgorCisjaWZu ZGVmIFY0TDJfUElYX0ZNVF9ZMjFQCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZMjFQCXY0bDJfZm91 cmNjKCdZJywnMicsJzEnLCdQJykKKyNlbmRpZgorCitzdHJ1Y3QgZW0yOHh4X291dHB1dF9mbXQg eworCXN0cnVjdCB2NGwyX2ZtdGRlc2MgZm10OworCXU4IGNvbmZpZzsKK307CisKKy8qIGlucHV0 cyAqLworCisjZGVmaW5lIE1BWF9FTTI4WFhfSU5QVVQgNAorI2RlZmluZSBNQVhfRU0yOFhYX1RW Tk9STVMgMTAKKyNkZWZpbmUgTUFYX0VNMjhYWF9EVkJOT1JNUyA1CisjZGVmaW5lIE1BWF9FTTI4 WFhfRk1OT1JNUyAyCisjZGVmaW5lIE1BWF9FTTI4WFhfQVRTQ05PUk1TIDIKKyNkZWZpbmUgTUFY X0VNMjhYWF9RQU1OT1JNUyAyCisKK2VudW0gZW51bTI4eHhfaXR5cGUgeworCUVNMjhYWF9WTVVY X0NPTVBPU0lURTEgPSAxLAorCUVNMjhYWF9WTVVYX0NPTVBPU0lURTIsCisJRU0yOFhYX1ZNVVhf Q09NUE9TSVRFMywKKwlFTTI4WFhfVk1VWF9DT01QT1NJVEU0LAorCUVNMjhYWF9WTVVYX1NWSURF TywKKwlFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCUVNMjhYWF9WTVVYX0NBQkxFLAorCUVNMjhY WF9WTVVYX0RWQiwKKwlFTTI4WFhfVk1VWF9ERUJVRywKKwlFTTI4WFhfQU1VWF9SQURJTywKK307 CisKK2VudW0gZW51bTI4eHhfbWl4Y2hhbm5lbCB7CisJRU0yOFhYX01JWF9OT1RPVUNIID0gMCwK KwlFTTI4WFhfTUlYX0xJTkVfSU4gPSAxLAorCUVNMjhYWF9NSVhfVklERU8gPSAyLAorfTsKKwor c3RydWN0IGVtMjh4eF9pbnB1dCB7CisJZW51bSBlbnVtMjh4eF9pdHlwZSB0eXBlOworCXVuc2ln bmVkIGludCB2bXV4OworCXVuc2lnbmVkIGludCBhbXV4OworCWVudW0gZW51bTI4eHhfbWl4Y2hh bm5lbCBhbWl4OworfTsKKworI2RlZmluZSBJTlBVVChucikgKCZlbTI4eHhfYm9hcmRzW2Rldi0+ bW9kZWxdLmlucHV0W25yXSkKKworZW51bSBlbTI4eHhfZGVjb2RlciB7CisJRU0yOFhYX1RWUDUx NTAsCisJRU0yOFhYX1NBQTcxMTMsCisJRU0yOFhYX1NBQTcxMTQsCisJRU0yOFhYX0NYMjU4NDMs Cit9OworCitzdHJ1Y3QgZW0yOHh4OworCisvKiAweDAgLSB1bmRlZiAqLworZW51bSBlbXBpYV90 eXBlIHsKKwlFTTI4MDAgPSAxLAorCUVNMjgyMCwKKwlFTTI4NDAsCisJRU0yNzUwLAorCUVNMjc1 MSwKKwlFTTI4NjAsCisJRU0yODc1LAorCUVNMjg4MCwKKwlFTTI4ODEsCisJRU0yODgyLAorCUVN Mjg4MywKKwlFTTI4ODgsCisJRU0yODg5Cit9OworCisjZGVmaW5lIEVNMjhYWF9WSURFTyAgICAw eDAxCisjZGVmaW5lIEVNMjhYWF9EVkJUICAgICAweDAyCisjZGVmaW5lIEVNMjhYWF9EVkJDICAg ICAweDA0CisjZGVmaW5lIEVNMjhYWF9BVFNDICAgICAweDA4CisjZGVmaW5lIEVNMjhYWF9ETUIg ICAgICAweDEwCisjZGVmaW5lIEVNMjhYWF9JU0RCICAgICAweDIwCisjZGVmaW5lIEVNMjhYWF9W QkkgICAgICAweDQwCisjZGVmaW5lIEVNMjhYWF9SRU1PVEUgICAweDgwCisjZGVmaW5lIEVNMjhY WF9BVURJTyAgICAweDEwMCAvKiB2ZW5kb3Igc3BlY2lmaWMgYXVkaW9kcml2ZXIgKi8KKyNkZWZp bmUgRU0yOFhYX0FVRElPMiAgIDB4MjAwIC8qIHZlbmRvciBzcGVjaWZpYyBhdWRpb2RyaXZlciwg ZGlmZmVyZW50IGludGVyZmFjZSBudW1iZXIgKi8KKyNkZWZpbmUgRU0yOFhYX1JBRElPICAgIDB4 NDAwCisjZGVmaW5lIEVNMjhYWF9MT0NLCTB4ODAwCisKKyNkZWZpbmUgRU0yOFhYX0NBUFRVUkVf U1RSRUFNX0VOIDEKKworLyogdXNlZCBieSB0aGUgYXVkaW8gZHJpdmVyICovCisjZGVmaW5lIEVN MjhYWF9FTkFCTEVfQVVESU8gMQorI2RlZmluZSBFTTI4WFhfRElTQUJMRV9BVURJTyAyCisKKy8q IHR2bm9ybXMgKi8KK3N0cnVjdCBlbTI4eHhfdHZub3JtIHsKKwljaGFyICpuYW1lOworCVhDMzAy OF9UVl9NT0RFICp0dl9tb2RlOworCVhDMzAyOF9DSEFOTkVMX01BUCAqY2hhbm5lbG1hcDsKKwlp bnQgaW5kZXg7IC8qIHhjNTAwMCBjb25maWd1cmF0aW9uICovCisKKwkvKiBkaWdpdGFsIHR2ICov CisJZW51bSBlbTI4eHhfZmVfYmFuZHdpZHRoIGJhbmR3aWR0aDsKKwkvKiBhbmFsb2cgdHYgKi8K Kwl2NGwyX3N0ZF9pZCBpZDsKKwl1MzIgdmJpX3NhbXBsZV9yYXRlOworCXUxNiB2Ymlfc2FtcGxl c19wZXJfbGluZTsKKwl1MTYgdmJpX2xpbmVzOworCXUxNiB2Ymlfb2Zmc2V0OworCXUxNiB2Ymlf c3RhcnRfMDsKKwl1MTYgdmJpX3N0YXJ0XzE7CisJdTggdmJpX2NvdW50XzA7CisJdTggdmJpX2Nv dW50XzE7CisKKwl1OCB2YmlfaF9zdGFydDsKKwl1OCB2Ymlfdl9zdGFydDsKKwl1OCB2YmlfdzsK Kwl1OCB2YmlfaDsKK307CisKKy8qIGdwaW8gZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRU0yOFhY X0dQSU9fRU4gMHgxCisKKyNkZWZpbmUgRU0yOFhYX0dPUDAgICAgMHgxMAorI2RlZmluZSBFTTI4 WFhfR09QMSAgICAweDExCisjZGVmaW5lIEVNMjhYWF9HT1AyICAgIDB4MTIKKyNkZWZpbmUgRU0y OFhYX0dPUDMgICAgMHgxMworCisjZGVmaW5lIEVNMjhYWF9HUElPMCAgIDB4MAorI2RlZmluZSBF TTI4WFhfR1BJTzEgICAweDEKKyNkZWZpbmUgRU0yOFhYX0dQSU8yICAgMHgyCisjZGVmaW5lIEVN MjhYWF9HUElPMyAgIDB4MworI2RlZmluZSBFTTI4WFhfR1BJTzQgICAweDQKKyNkZWZpbmUgRU0y OFhYX0dQSU81ICAgMHg1CisjZGVmaW5lIEVNMjhYWF9HUElPNiAgIDB4NgorI2RlZmluZSBFTTI4 WFhfR1BJTzcgICAweDcKKworLyogaGVscGVycyAqLworI2RlZmluZSBfQklUX1ZBTChyZWcsIHZh bCwgcmVzZXQpIChyZWcgIHwgMHg4MCB8IChyZXNldD8xPDw2OjApIHwgKHZhbDw8NSkpCisKKy8q IGludGVybmFsIGdwaW8gY29udHJvbHMgKi8KKyNkZWZpbmUgRU0yOFhYX1RTMV9PTiAgICAgICAg IDEKKyNkZWZpbmUgRU0yOFhYX0FOQUxPR19PTiAgICAgIDIKKyNkZWZpbmUgRU0yOFhYX0xFRDFf T04gICAgICAgIDMKKyNkZWZpbmUgRU0yOFhYX1hDMzAyOF9TRUNBTSAgIDQKKyNkZWZpbmUgRU0y OFhYX01PREVTV0lUQ0ggICAgIDUKKyNkZWZpbmUgRU0yOFhYX0RFQ09ERVJfU0xFRVAgIDYKKyNk ZWZpbmUgRU0yOFhYX0xFRDJfT04gICAgICAgIDcKKyNkZWZpbmUgRU0yOFhYX1JGICAgICAgICAg ICAgIDgKKyNkZWZpbmUgRU0yOFhYX0RWQjFfT04gICAgICAgIDkKKyNkZWZpbmUgRU0yOFhYX0RW QjJfT04gICAgICAgIDEwCisjZGVmaW5lIEVNMjhYWF9UVU5FUjFfT04gICAgICAxMQorI2RlZmlu ZSBFTTI4WFhfVFVORVIyX09OICAgICAgMTIKKyNkZWZpbmUgRU0yOFhYX0RFTU9EMV9SRVNFVCAg IDEzCisjZGVmaW5lIEVNMjhYWF9UVU5FUjFfUkVTRVQgICAxNAorI2RlZmluZSBFTTI4WFhfREVD T0RFUl9SRVNFVCAgMTUKKyNkZWZpbmUgRU0yOFhYX0RFTU9EMl9SRVNFVCAgIDE2CisjZGVmaW5l IEVNMjhYWF9UVU5FUjJfUkVTRVQgICAxNworI2RlZmluZSBFTTI4WFhfSTJDX0JVUyAgICAgICAg MTgKKworLyogaW50ZXJuYWwgZ3BpbyBjb250cm9sIGFyZ3VtZW50cyAqLworI2RlZmluZSBFTTI4 WFhfUkVHX09OICAgICAgIDEgCisjZGVmaW5lIEVNMjhYWF9SRUdfT0ZGICAgICAgMgorCitzdHJ1 Y3QgZW0yOHh4X2dwaW8geworCXUxNiBkMV9yZXNldDsKKwl1MTYgZDJfcmVzZXQ7CisJdTE2IHQx X3Jlc2V0OworCXUxNiB0Ml9yZXNldDsKKwl1MTYgZGNfcmVzZXQ7CisJdTE2IGFfb247CisJdTE2 IGwxX29uOworCXUxNiBsMl9vbjsKKwl1MTYgeGMzMDI4X3NlYzsKKwl1MTYgbV9zd2l0Y2g7CisJ dTE2IGRfc2xlZXA7CisJdTE2IHRzMV9vbjsKKwl1MTYgdHMyX29uOworCXUxNiB0MV9vbjsKKwl1 MTYgdDJfb247CisJdTE2IHJmOworCXUxNiBkdmJzX2xuYjsKKwl1MTYgZHZic192OworfTsKKwor c3RydWN0IGVtMjh4eF9ib2FyZCB7CisJY2hhciAqbmFtZTsKKwlpbnQgdmNoYW5uZWxzOworCXY0 bDJfc3RkX2lkIG5vcm07CisJaW50IHR1bmVyX3R5cGU7CisJaW50IHR1bmVyX2FkZHI7CisKKwkv KiBpMmMgZmxhZ3MgKi8KKwl1bnNpZ25lZCBpbnQgZW1fdHlwZTsKKwkvKiBudWxsIHRlcm1pbmF0 ZWQgbGlzdCBvZiB1c2VkIGkyYyBhZGRyZXNzZXMgKi8KKwkvKiB1c2VkIHRvIGF1dG9kZXRlY3Qg c29tZSBlbTI4MDAgZGV2aWNlcyB3aXRob3V0IGVlcHJvbSAqLworCWNvbnN0IHU4ICppMmNfZGV2 czsKKwl1OCB0ZGE5ODg3X2NvbmY7CisKKwl1OCBoYXNfdHVuZXI6MTsKKwl1OCBoYXNfaW50dHVu ZXI6MTsKKwl1OCBoYXNfbXNwMzR4eDoxOworCXU4IGhhc19yYWRpbzoxOworCXU4IHBvd2Vyc2F2 aW5nOjE7CisKKwl1OCBtYW51YWxfZ3BpbzoxOworCXU4IGlyX2kyYzoxOyAvKiByZW1vdGUgaXMg aTJjIGJhc2VkICovCisKKwlzdHJ1Y3QgZW0yOHh4X2dwaW8gZ3Bpb19yZWdzOworCisJdTE2IGRl dl9tb2RlczsKKworCWVudW0gZW0yOHh4X2RlY29kZXIgZGVjb2RlcjsKKworCXN0cnVjdCBlbTI4 eHhfdHZub3JtICB0dm5vcm1zW01BWF9FTTI4WFhfVFZOT1JNU107CisJc3RydWN0IGVtMjh4eF90 dm5vcm0gIGR2Ym5vcm1zW01BWF9FTTI4WFhfRFZCTk9STVNdOworCXN0cnVjdCBlbTI4eHhfdHZu b3JtICBmbW5vcm1zW01BWF9FTTI4WFhfRk1OT1JNU107CisJc3RydWN0IGVtMjh4eF90dm5vcm0g IGF0c2Nub3Jtc1tNQVhfRU0yOFhYX0FUU0NOT1JNU107CisJc3RydWN0IGVtMjh4eF90dm5vcm0g IHFhbW5vcm1zW01BWF9FTTI4WFhfUUFNTk9STVNdOworCisJaW50ICgqY3RybCkoc3RydWN0IGVt Mjh4eCAqZGV2LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKTsKKwlpbnQgKCpnY3RybCkoc3Ry dWN0IGVtMjh4eCAqZGV2LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKTsKKwlpbnQgKCpxY3Ry bCkoc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCk7CisKKwlJUl9LRVlUQUJfVFlQRSAqaXJf a2V5dGFiOworCWludCAoKmlyX2dldGtleSkoc3RydWN0IGVtMjh4eCAqZGV2LCB1MzIgKmlyX2tl eSwgdTMyICprZXlzdGF0dXMpOworCisJc3RydWN0IGVtMjh4eF9pbnB1dCAgICAgICBpbnB1dFtN QVhfRU0yOFhYX0lOUFVUXTsKK307CisKK3N0cnVjdCBlbTI4eHhfZWVwcm9tIHsKKwl1MzIgaWQ7 CQkJLyogMHg5NTY3ZWIxYSAqLworCXUxNiB2ZW5kb3JfSUQ7CisJdTE2IHByb2R1Y3RfSUQ7CisK Kwl1MTYgY2hpcF9jb25mOworCisJdTE2IGJvYXJkX2NvbmY7CisKKwl1MTYgc3RyaW5nMSwgc3Ry aW5nMiwgc3RyaW5nMzsKKworCXU4IHN0cmluZ19pZHhfdGFibGU7Cit9OworCisvKiBkZXZpY2Ug c3RhdGVzICovCitlbnVtIGVtMjh4eF9kZXZfc3RhdGUgeworCURFVl9JTklUSUFMSVpFRCA9IDB4 MDEsCisJREVWX0RJU0NPTk5FQ1RFRCA9IDB4MDIsCisJREVWX01JU0NPTkZJR1VSRUQgPSAweDA0 LAorfTsKKworCisvKiBkaWdpdGFsIG1haW4gZGV2aWNlIHN0cnVjdCAqLworCitlbnVtIG10eXBl IHsKKwlFTTI4WFhfWkwxMDM1MywKKwlFTTI4WFhfTVQzNTIsCisJRU0yOFhYX0RSWDM5NzVELAor CUVNMjhYWF9MR0RUMzMwWCwKK307CisKK3N0cnVjdCBlbTI4ODBfZHZiIHsKKwljaGFyICpuYW1l OworCXN0cnVjdCBkdmJfZGVtdXggZGVtdXg7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VS TkVMX1ZFUlNJT04oMiwgNiwgMTUpCisJc3RydWN0IG11dGV4IHNlbTsKKyNlbHNlCisJc3RydWN0 IHNlbWFwaG9yZSBzZW07CisjZW5kaWYKKwlpbnQgc3RyZWFtaW5nOworCWVudW0gbXR5cGUgbW9k X3R5cGU7CisJc3RydWN0IGR2Yl9hZGFwdGVyIGFkYXB0ZXI7CisJc3RydWN0IGR2Yl9mcm9udGVu ZCAgICAgICAgKmZyb250ZW5kOworCXN0cnVjdCBkdmJfZGV2aWNlICpmZWRldjsKKwlzdHJ1Y3Qg ZG14ZGV2IGRteGRldjsKKwlzdHJ1Y3QgZW0yOHh4ICplbTI4eHhfZGV2OyAvKiBwbGVhc2UgZ2V0 IHJpZCBvZiBpdCBsYXRlcm9uICovCisJc3RydWN0IGR2Yl9uZXQgZHZibmV0OworCXN0cnVjdCB1 c2JfZGV2aWNlICp1ZGV2OwkvKiB0aGUgdXNiIGRldmljZSAqLworCWNoYXIgKnRyYW5zZmVyX2J1 ZmZlcltFTTI4ODBfRFZCX05VTV9CVUZTXTsgICAgIC8qIHRyYW5zZmVyIGJ1ZmZlcnMgZm9yIGlz b2MgdHJhbnNmZXIgKi8KKwlzdHJ1Y3QgdXJiICp1cmJbRU0yODgwX0RWQl9OVU1fQlVGU107ICAg LyogdXJiIGZvciBpc29jIHRyYW5zZmVycyAqLworCWludCAoKmRlbW9kX2luaXQpKHN0cnVjdCBk dmJfZnJvbnRlbmQgKmZlKTsKKwlpbnQgYndfaW5kZXg7IC8qIGJhbmR3aWR0aCBpbmRleCAqLwor CWludCAoKmluaXRfb3ZlcnJpZGUpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKTsKKwl1MTYgZHR2 X3BhY2tldHNpemU7IAorfTsKKworc3RydWN0IGVtMjh4eF9hdWRpbyB7CisJY2hhciBuYW1lWzUw XTsKKwljaGFyICp0cmFuc2Zlcl9idWZmZXJbRU0yOFhYX0FVRElPX0JVRlNdOworCXN0cnVjdCB1 cmIgKnVyYltFTTI4WFhfQVVESU9fQlVGU107CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJ dW5zaWduZWQgaW50IGNhcHR1cmVfdHJhbnNmZXJfZG9uZTsKKyNpZiBMSU5VWF9WRVJTSU9OX0NP REUgPD0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTYpCisJc25kX3BjbV9zdWJzdHJlYW1fdCAgICAg ICAgKmNhcHR1cmVfcGNtX3N1YnN0cmVhbTsKKyNlbHNlCisJc3RydWN0IHNuZF9wY21fc3Vic3Ry ZWFtICAgKmNhcHR1cmVfcGNtX3N1YnN0cmVhbTsKKyNlbmRpZgorCisJdW5zaWduZWQgaW50IGh3 cHRyX2RvbmVfY2FwdHVyZTsKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZFUlNJ T04oMiwgNiwgMTYpCisJc25kX2NhcmRfdCAgICAgICAgICAgICAgICAgKnNuZGNhcmQ7CisjZWxz ZQorCXN0cnVjdCBzbmRfY2FyZCAgICAgICAgICAgICpzbmRjYXJkOworI2VuZGlmCisKKwlpbnQg dXNlcnM7CisJdW5zaWduZWQgaW50IHNodXRkb3duOjE7CisJc3BpbmxvY2tfdCBzbG9jazsgLyog Zm9yIHByb3RlY3RpbmcgdGhlIGFsc2EgYnVmZmVyICovCisJZW51bSBlbTI4eHhfc3RyZWFtX3N0 YXRlIGNhcHR1cmVfc3RyZWFtOworCXdhaXRfcXVldWVfaGVhZF90IGF1ZGlvX3dhaXRfc3RyZWFt LCBvcGVuOworCXUxNiBtYXhfcGNrOworCXU4IGFsdF9tYXg7CisJLyogc3RhdGVzICovCisJZW51 bSBlbTI4eHhfZGV2X3N0YXRlIHN0YXRlOworCXU4IGFsdDsJCS8qIGFsdGVybmF0ZSAqLworCXN0 cnVjdCB1c2JfaW50ZXJmYWNlIHVzYl9kZXY7Cit9OworCisKK3N0cnVjdCBlbTI4ODBfaXIgewor CXU4ICAgICAgb2xkOworCXU4ICAgICAgc2VxdWVuY2VbNF07CisJSVJfS0VZVEFCX1RZUEUJCSpr ZXltYXA7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQor CXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworI2Vsc2UKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdv cms7CisjZW5kaWYKKworCXN0cnVjdCBpbnB1dF9kZXYJKmlucHV0OworCXN0cnVjdCBlbTI4eHgJ CSpkZXY7CisJaW50ICAgICAgICAgICAgICAgICAgICAga2V5cHJlc3NlZDsKKwlzdHJ1Y3QgdGlt ZXJfbGlzdCAgICAgICB0aW1lcjsKKwl1MzIgICAgICAgICAgICAgICAgICAgICBrZXljb2RlOwor CisJdTMyCQkJb2xkdmFsOworCXUzMgkJCW9sZHRpbWVvdXR2YWw7CisJdTMyCQkJa2V5OworCXU4 CQkJYnRuOworCisJdTggICAgICAgICAgICAgICAgICAgICAgbmFtZVs1MF07CisJdTgJCQlwaHlz WzUwXTsKKwl1OAkJCXJlbGVhc2VkOjE7CisJdTgJCQlzdGF0ZTsKKwlzdHJ1Y3QgbXV0ZXggc3Rh dGVfbG9jazsKKyNkZWZpbmUgRU0yOFhYX1JFTU9URV9JRExFICAgICAgMAorI2RlZmluZSBFTTI4 WFhfUkVNT1RFX1BPTExJTkcgICAxCisjZGVmaW5lIEVNMjhYWF9SRU1PVEVfSU5URVJSVVBUIDIK KwlpbnQgKCpnZXRfa2V5KShzdHJ1Y3QgZW0yOHh4ICpkZXYsIHUzMiAqaXJfa2V5LCB1MzIgKmtl eXN0YXR1cyk7CisJd2FpdF9xdWV1ZV9oZWFkX3QJcmVtb3RlX2xvb3A7Cit9OworCitzdHJ1Y3Qg ZW0yOHh4X2ZoIHsKKwlzdHJ1Y3QgZW0yOHh4ICpkZXY7CisJdW5zaWduZWQgaW50IHJlYWRlcjox OworCWludCB0eXBlOworfTsKKworCisvKiBtYWluIGRldmljZSBzdHJ1Y3QgKi8KK3N0cnVjdCBl bTI4eHggeworCS8qIGdlbmVyaWMgZGV2aWNlIHByb3BlcnRpZXMgKi8KKwljaGFyIG5hbWVbMzBd OwkJLyogbmFtZSAoaW5jbHVkaW5nIG1pbm9yKSBvZiB0aGUgZGV2aWNlICovCisJaW50IG1vZGVs OwkJLyogaW5kZXggaW4gdGhlIGRldmljZV9kYXRhIHN0cnVjdCAqLworCWludCBkZXZubzsJCS8q IG1hcmtzIHRoZSBudW1iZXIgb2YgdGhpcyBkZXZpY2UgKi8KKwl1bnNpZ25lZCBpbnQgZW1fdHlw ZTsKKwl1OCB2aWRlb19pbnB1dHM7CS8qIG51bWJlciBvZiB2aWRlbyBpbnB1dHMgKi8KKwlzdHJ1 Y3QgbGlzdF9oZWFkCWRldmxpc3Q7CisJdTggaGFzX3R1bmVyOjE7CisJdTggaGFzX2ludHR1bmVy OjE7CisJdTggaGFzX21zcDM0eHg6MTsKKwl1OCBoYXNfdGRhOTg4NzoxOworCXU4IGhhc192Ymk6 MTsKKwl1OCBkZXZpY2VfbW9kZToxOyAvKiBFTTI4WFhfVklERU8gfCBFTTI4WFhfRFZCICAqLwor CXUxNiBkZXZfbW9kZXM7CisJdTggbWFudWFsX2dwaW86MTsKKwl1OCBwb3dlcnNhdmluZzoxOwor CisJdTggbW9kdWxlc19yZXF1ZXN0ZWQ7CisjZGVmaW5lIEVNMjhYWF9NT0RVTEVTX1JFUVVFU1RF RCAwCisjZGVmaW5lIEVNMjhYWF9NT0RVTEVTX1BFTkRJTkcgICAxCisJd2FpdF9xdWV1ZV9oZWFk X3QgbW9kX3JlcXVlc3Q7CisKKwl2b2lkICgqcmVxdWVzdF9tb2R1bGVzKShzdHJ1Y3QgZW0yOHh4 ICpkZXYpOworCisJdTggdmJpX2ludGVybGFjZWQ6MTsKKworCXU4IHZiaV9mcmFtZV9kb25lOjE7 CisKKwl1OCB1c2JfaW50ZXJmYWNlOworCisJdTggYXVkaW9fdXNlcjsKKwl1OCB2aWRlb191c2Vy OworCXU4IHJhZGlvX3VzZXI7CisJdTggZmVfdXNlcjsKKwl1OCB2YmlfdXNlcjsKKwl1OCBtb2Rl X2xvY2s7CisKKworCWludCBtb2RlOworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVM X1ZFUlNJT04oMiwgNiwgMTcpCisJc3RydWN0IGRlbGF5ZWRfd29yayByZXF1ZXN0X21vZHVsZV93 azsKKyNlbmRpZgorCisJc3RydWN0IGVtMjh4eF9ib2FyZCAqYm9hcmQ7CisJc3RydWN0IHVzYl9p bnRlcmZhY2UgKnVpZjsKKwlzdHJ1Y3QgZW0yOHh4X291dHB1dF9mbXQgKm91dGZtdDsKKworCXUz MiBpMnNfc3BlZWQ7CQkvKiBJMlMgc3BlZWQgZm9yIGF1ZGlvIGRpZ2l0YWwgc3RyZWFtICovCisK KwllbnVtIGVtMjh4eF9kZWNvZGVyIGRlY29kZXI7CisKKwlpbnQgdHVuZXJfdHlwZTsJCS8qIHR5 cGUgb2YgdGhlIHR1bmVyICovCisJdTggdHVuZXJfYWRkcjsJCS8qIHR1bmVyIGFkZHJlc3MgKi8K KwlpbnQgdGRhOTg4N19jb25mOworCisJc3RydWN0IHR1bmVyX21vZHVsZSAqdHVuZXI7CisJLyog aTJjIGkvbyAqLworCXN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcDsKKwlzdHJ1Y3QgaTJjX2Ns aWVudCBpMmNfY2xpZW50OworCisJLyogZHZiICovCisJc3RydWN0IGVtMjg4MF9kdmIgKmR2Yl9k ZXY7CisJc3RydWN0IGVtMjh4eF9hdWRpbyAqYWRldjsKKwlzdHJ1Y3QgZW0yODgwX2lyICppcl9l bTI4ODA7CisKKwkvKiB2aWRlbyBmb3IgbGludXggKi8KKwl1OCB1c2VyczsJCS8qIHVzZXIgY291 bnQgZm9yIGV4Y2x1c2l2ZSB1c2UgKi8KKworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnJkZXY7CS8q IHZpZGVvIGZvciBsaW51eCBkZXZpY2Ugc3RydWN0ICovCisJc3RydWN0IHZpZGVvX2RldmljZSAq dmRldjsJLyogdmlkZW8gZm9yIGxpbnV4IGRldmljZSBzdHJ1Y3QgKi8KKwlzdHJ1Y3QgdmlkZW9f ZGV2aWNlICp2YmlfZGV2OworCisJc3RydWN0IGVtMjh4eF90dm5vcm0gKnR2bm9ybTsJLyogc2Vs ZWN0ZWQgdHYgbm9ybSAqLworCXN0cnVjdCBlbTI4eHhfdHZub3JtICpkdmJub3JtOworCXN0cnVj dCBlbTI4eHhfdHZub3JtICphdHNjbm9ybTsKKwlzdHJ1Y3QgZW0yOHh4X3R2bm9ybSAqcWFtbm9y bTsKKwlzdHJ1Y3QgZW0yOHh4X3R2bm9ybSAqZm1ub3JtOworCXVuc2lnbmVkIGludCB0dl9zdGQ7 CisKKwl1bnNpZ25lZCBsb25nIHJjdGxfZnJlcTsJCS8qIHNlbGVjdGVkIHJhZGlvIGZyZXF1ZW5j eSAqLworCXVuc2lnbmVkIGxvbmcgdmN0bF9mcmVxOwkJLyogc2VsZWN0ZWQgdmlkZW8gZnJlcXVl bmN5ICovCisJdW5zaWduZWQgbG9uZyBkY3RsX2ZyZXE7CQkvKiBzZWxlY3RlZCBkdmItdC9hdHNj IGZyZXF1ZW5jeSAqLworCXU4IGN0bF9pbnB1dDsJLyogc2VsZWN0ZWQgaW5wdXQgKi8KKwl1OCBj dGxfYWlucHV0OwkvKiBzZWxlY3RlZCBhdWRpbyBpbnB1dCAqLworCWVudW0gZW51bTI4eHhfbWl4 Y2hhbm5lbCBjdGxfYW1peDsJLyogc2xlY3RlZCBhdWRpbyBtaXhlciBjaGFubmVsICovCisJdTgg bXV0ZTsKKwlpbnQgdm9sdW1lOworCS8qIGZyYW1lIHByb3BlcnRpZXMgKi8KKwlzdHJ1Y3QgZW0y OHh4X2ZyYW1lX3QgZnJhbWVbRU0yOFhYX05VTV9GUkFNRVNdOwkvKiBsaXN0IG9mIGZyYW1lcyAq LworCXN0cnVjdCBlbTI4eHhfZnJhbWVfdCB2YmlfZnJhbWVbRU0yOFhYX05VTV9GUkFNRVNdOwkv KiBsaXN0IG9mIGZyYW1lcyAqLworCXU4IG51bV9mcmFtZXM7CQkvKiBudW1iZXIgb2YgZnJhbWVz IGN1cnJlbnRseSBpbiB1c2UgKi8KKwl1OCB2YmlfbnVtX2ZyYW1lczsKKwl1MzIgZnJhbWVfY291 bnQ7CS8qIHRvdGFsIG51bWJlciBvZiB0cmFuc2ZlcmVkIGZyYW1lcyAqLworCXUzMiB2YmlfZnJh bWVfY291bnQ7CS8qIHRvdGFsIG51bWJlciBvZiB0cmFuc2ZlcmVkIGZyYW1lcyAqLworCXN0cnVj dCBlbTI4eHhfZnJhbWVfdCAqZnJhbWVfY3VycmVudDsJLyogdGhlIGZyYW1lIHRoYXQgaXMgYmVp bmcgZmlsbGVkICovCisJc3RydWN0IGVtMjh4eF9mcmFtZV90ICp2YmlfZnJhbWVfY3VycmVudDsJ LyogdGhlIGZyYW1lIHRoYXQgaXMgYmVpbmcgZmlsbGVkICovCisJdTE2IHdpZHRoOwkJLyogY3Vy cmVudCBmcmFtZSB3aWR0aCAqLworCXUxNiBoZWlnaHQ7CQkvKiBjdXJyZW50IGZyYW1lIGhlaWdo dCAqLworCXUzMiBmcmFtZV9zaXplOwkJLyogY3VycmVudCBmcmFtZSBzaXplICovCisJdTMyIGZp ZWxkX3NpemU7CQkvKiBjdXJyZW50IGZpZWxkIHNpemUgKi8KKwl1MTYgdmJpX2ZyYW1lX3NpemU7 CisJdTE2IHZiaV9maWVsZF9zaXplOworCXUxNiBieXRlc3BlcmxpbmU7CisJdTE2IHZiaV9ieXRl c3BlcmxpbmU7CisJdTE2IGhzY2FsZTsJCS8qIGhvcml6b250YWwgc2NhbGUgZmFjdG9yIChzZWUg ZGF0YXNoZWV0KSAqLworCXUxNiB2c2NhbGU7CQkvKiB2ZXJ0aWNhbCBzY2FsZSBmYWN0b3IgKHNl ZSBkYXRhc2hlZXQpICovCisJdTggaW50ZXJsYWNlZDoxOwkvKiAxPWludGVybGFjZSBmaWxlZHMs IDA9anVzdCB0b3AgZmlsZWRzICovCisJaW50IHR5cGU7CisKKwl1OCByZWFkZXI6MTsKKwl1OCB2 YmlfcmVhZGVyOjE7CisJdTggdmlkZW9fcmVhZGVyOjE7CisKKwkvKiBzdGF0ZXMgKi8KKwllbnVt IGVtMjh4eF9kZXZfc3RhdGUgc3RhdGU7CisKKwllbnVtIGVtMjh4eF9zdHJlYW1fc3RhdGUgc3Ry ZWFtOworCWVudW0gZW0yOHh4X3N0cmVhbV9zdGF0ZSB2aWRlb19zdHJlYW07CisJZW51bSBlbTI4 eHhfc3RyZWFtX3N0YXRlIHZiaV9zdHJlYW07CisKKwllbnVtIGVtMjh4eF9pb19tZXRob2QgaW87 CisKKwllbnVtIGVtMjh4eF9pb19tZXRob2QgdmlkZW9faW87CisJZW51bSBlbTI4eHhfaW9fbWV0 aG9kIHZiaV9pbzsKKworCS8qIGxvY2tzICovCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VS TkVMX1ZFUlNJT04oMiwgNiwgMTUpCisJc3RydWN0IG11dGV4IGxvY2ssIGZpbGVvcF9sb2NrLCB2 YmlfZmlsZW9wX2xvY2ssIGlucHV0X2xvY2s7CisjZWxzZQorCXN0cnVjdCBzZW1hcGhvcmUgbG9j aywgZmlsZW9wX2xvY2ssIHZiaV9maWxlb3BfbG9jaywgaW5wdXRfbG9jazsKKyNlbmRpZgorCXNw aW5sb2NrX3QgcXVldWVfbG9jazsKKwlzcGlubG9ja190IHZiaV9xdWV1ZV9sb2NrOworCisJc3Ry dWN0IGxpc3RfaGVhZCBpbnF1ZXVlLCBvdXRxdWV1ZSwgdmJpX2lucXVldWUsIHZiaV9vdXRxdWV1 ZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBvcGVuLCB3YWl0X2ZyYW1lLCB3YWl0X3ZiaV9mcmFtZSwg dmJpX3dhaXRfc3RyZWFtOworCXdhaXRfcXVldWVfaGVhZF90IHZpZGVvX3dhaXRfc3RyZWFtOwor CXUzMiB2aWRlb19ieXRlc3JlYWQ7CisJdTE2IHZiaV9ieXRlc3JlYWQ7CisJdTE2IHZiaV9kcm9w Ynl0ZXM7CisKKwl1bnNpZ25lZCBjaGFyIGVlZGF0YVsyNTZdOworCisJLyogdXNiIHRyYW5zZmVy ICovCisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CS8qIHRoZSB1c2IgZGV2aWNlICovCisJdTgg YWx0OwkJLyogYWx0ZXJuYXRlICovCisJdTE2IG1heF9wa3Rfc2l6ZTsJLyogbWF4IHBhY2tldCBz aXplIG9mIGlzb2MgdHJhbnNhY3Rpb24gKi8KKwl1OCBudW1fYWx0OwkJLyogTnVtYmVyIG9mIGFs dGVybmF0aXZlIHNldHRpbmdzICovCisJdW5zaWduZWQgaW50ICphbHRfbWF4X3BrdF9zaXplOwkv KiBhcnJheSBvZiB3TWF4UGFja2V0U2l6ZSAqLworCXN0cnVjdCB1cmIgKnVyYltFTTI4WFhfTlVN X0JVRlNdOwkvKiB1cmIgZm9yIGlzb2MgdHJhbnNmZXJzICovCisJY2hhciAqdHJhbnNmZXJfYnVm ZmVyW0VNMjhYWF9OVU1fQlVGU107CS8qIHRyYW5zZmVyIGJ1ZmZlcnMgZm9yIGlzb2MgdHJhbnNm ZXIgKi8KKworCS8qIGhlbHBlciBmdW5jcyB0aGF0IGNhbGwgdXNiX2NvbnRyb2xfbXNnICovCisK KwlpbnQgKCplbTI4eHhfYWNxdWlyZSkoc3RydWN0IGVtMjh4eCAqZGV2LCBpbnQgbW9kZSwgaW50 IGxvY2spOworCWludCAoKmVtMjh4eF9jYWxsYmFjaykodm9pZCAqcHJpdiwgaW50IHB0ciwgaW50 IG1vZGUpOworCisJaW50ICgqZW0yOHh4X3dyaXRlX3JlZ3MpIChzdHJ1Y3QgZW0yOHh4ICpkZXYs IHUxNiByZWcsIGNoYXIgKmJ1ZiwKKwkJCQkgIGludCBsZW4pOworCWludCAoKmVtMjh4eF9yZWFk X3JlZykgKHN0cnVjdCBlbTI4eHggKmRldiwgdTE2IHJlZyk7CisJaW50ICgqZW0yOHh4X3JlYWRf cmVnX3JlcV9sZW4pIChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHU4IHJlcSwgdTE2IHJlZywKKwkJCQkJ Y2hhciAqYnVmLCBpbnQgbGVuKTsKKwlpbnQgKCplbTI4eHhfd3JpdGVfcmVnc19yZXEpIChzdHJ1 Y3QgZW0yOHh4ICpkZXYsIHU4IHJlcSwgdTE2IHJlZywKKwkJCQkgICAgICBjaGFyICpidWYsIGlu dCBsZW4pOworCWludCAoKmVtMjh4eF9yZWFkX3JlZ19yZXEpIChzdHJ1Y3QgZW0yOHh4ICpkZXYs IHU4IHJlcSwgdTE2IHJlZyk7CisJaW50ICgqZW0yOHh4X3dyaXRlX3JlZ19iaXRzKShzdHJ1Y3Qg ZW0yOHh4ICpkZXYsIHUxNiByZWcsIHU4IHZhbCwKKwkJCXU4IGJpdG1hc2spOworCisJaW50ICgq ZW0yOHh4X2N0cmwpKHN0cnVjdCBlbTI4eHggKmRldiwgc3RydWN0IHY0bDJfY29udHJvbCAqY3Ry bCk7CisJaW50ICgqZW0yOHh4X2djdHJsKShzdHJ1Y3QgZW0yOHh4ICpkZXYsIHN0cnVjdCB2NGwy X2NvbnRyb2wgKmN0cmwpOworCWludCAoKmVtMjh4eF9xY3RybCkoc3RydWN0IHY0bDJfcXVlcnlj dHJsICpxY3RybCk7CisKKwlpbnQgKCplbTI4eHhfZ3Bpb19jb250cm9sKSh2b2lkICpwcml2LCB1 bnNpZ25lZCBpbnQgY29tbWFuZCwgdm9pZCAqcHRyKTsKKyAgICAgICAgaW50ICgqZW0yOHh4X2Fh ZF9jb250cm9sKSh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdm9pZCAqcHRyKTsK KworICAgICAgICBzdHJ1Y3QgZW0yOHh4X2FhZF9pbmZvICphYWQ7CisKK307CisKK3N0cnVjdCBl bTI4eHhfb3BzIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7CisJY2hhciAqbmFtZTsKKwlpbnQg aWQ7CisJaW50ICgqaW5pdCkoc3RydWN0IGVtMjh4eCAqKTsKKwlpbnQgKCpmaW5pKShzdHJ1Y3Qg ZW0yOHh4ICopOworfTsKKworLyogUHJvdmlkZWQgYnkgZW0yOHh4LWkyYy5jICovCitpbnQgZW0y ODAwX2kyY19jaGVja19mb3JfZGV2aWNlKHN0cnVjdCBlbTI4eHggKmRldiwgdW5zaWduZWQgY2hh ciBhZGRyKTsKK3ZvaWQgZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoc3RydWN0IGVtMjh4eCAqZGV2 LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOworaW50IGVtMjh4eF9pMmNfcmVnaXN0ZXIo c3RydWN0IGVtMjh4eCAqZGV2KTsKK2ludCBlbTI4eHhfaTJjX3VucmVnaXN0ZXIoc3RydWN0IGVt Mjh4eCAqZGV2KTsKKworLyogUHJvdmlkZWQgYnkgZW0yOHh4LWlucHV0LmMgKi8KKwordm9pZCBl bTI4eHhfc2V0X2lyKHN0cnVjdCBlbTI4eHggKmRldiwgc3RydWN0IElSX2kyYyAqaXIpOworCisv KiBQcm92aWRlZCBieSBlbTI4eHgtY29yZS5jICovCisKK3UzMiBlbTI4eHhfcmVxdWVzdF9idWZm ZXJzKHN0cnVjdCBlbTI4eHggKmRldiwgdTMyIGNvdW50LCBpbnQgdHlwZSk7Cit2b2lkIGVtMjh4 eF9xdWV1ZV91bnVzZWRmcmFtZXMoc3RydWN0IGVtMjh4eCAqZGV2LCBpbnQgdHlwZSk7Cit2b2lk IGVtMjh4eF9yZWxlYXNlX2J1ZmZlcnMoc3RydWN0IGVtMjh4eCAqZGV2LCBpbnQgdHlwZSk7CisK K2ludCBlbTI4eHhfcmVhZF9yZWdfcmVxX2xlbihzdHJ1Y3QgZW0yOHh4ICpkZXYsIHU4IHJlcSwg dTE2IHJlZywKKwkJCSAgICBjaGFyICpidWYsIGludCBsZW4pOworaW50IGVtMjh4eF9yZWFkX3Jl Z19yZXEoc3RydWN0IGVtMjh4eCAqZGV2LCB1OCByZXEsIHUxNiByZWcpOworaW50IGVtMjh4eF9y ZWFkX3JlZyhzdHJ1Y3QgZW0yOHh4ICpkZXYsIHUxNiByZWcpOworaW50IGVtMjh4eF93cml0ZV9y ZWdzX3JlcShzdHJ1Y3QgZW0yOHh4ICpkZXYsIHU4IHJlcSwgdTE2IHJlZywgY2hhciAqYnVmLAor CQkJICBpbnQgbGVuKTsKK2ludCBlbTI4eHhfd3JpdGVfcmVncyhzdHJ1Y3QgZW0yOHh4ICpkZXYs IHUxNiByZWcsIGNoYXIgKmJ1ZiwgaW50IGxlbik7CitpbnQgZW0yOHh4X3dyaXRlX3JlZ19iaXRz KHN0cnVjdCBlbTI4eHggKmRldiwgdTE2IHJlZywgdTggdmFsLAorCQkJICB1OCBiaXRtYXNrKTsK K2ludCBlbTI4eHhfd3JpdGVfYWM5NyhzdHJ1Y3QgZW0yOHh4ICpkZXYsIHU4IHJlZywgdTggKnZh bCk7CitpbnQgZW0yOHh4X2F1ZGlvX2FuYWxvZ19zZXQoc3RydWN0IGVtMjh4eCAqZGV2KTsKK2lu dCBlbTI4eHhfY29sb3JsZXZlbHNfc2V0X2RlZmF1bHQoc3RydWN0IGVtMjh4eCAqZGV2KTsKK2lu dCBlbTI4eHhfY2FwdHVyZV9zdGFydChzdHJ1Y3QgZW0yOHh4ICpkZXYsIGludCBzdGFydCk7Citp bnQgZW0yOHh4X291dGZtdF9zZXRfeXV2NDIyKHN0cnVjdCBlbTI4eHggKmRldik7CitpbnQgZW0y OHh4X2FjY3VtdWxhdG9yX3NldChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHU4IHhtaW4sIHU4IHhtYXgs IHU4IHltaW4sCisJCQkgICB1OCB5bWF4KTsKK2ludCBlbTI4eHhfY2FwdHVyZV9hcmVhX3NldChz dHJ1Y3QgZW0yOHh4ICpkZXYsIHU4IGhzdGFydCwgdTggdnN0YXJ0LAorCQkJICAgIHUxNiB3aWR0 aCwgdTE2IGhlaWdodCk7CitpbnQgZW0yOHh4X3NjYWxlcl9zZXQoc3RydWN0IGVtMjh4eCAqZGV2 LCB1MTYgaCwgdTE2IHYpOworaW50IGVtMjh4eF9yZXNvbHV0aW9uX3NldChzdHJ1Y3QgZW0yOHh4 ICpkZXYpOworaW50IGVtMjh4eF9pbml0X2lzb2Moc3RydWN0IGVtMjh4eCAqZGV2KTsKK3ZvaWQg ZW0yOHh4X3VuaW5pdF9pc29jKHN0cnVjdCBlbTI4eHggKmRldik7CitpbnQgZW0yOHh4X3NldF9h bHRlcm5hdGUoc3RydWN0IGVtMjh4eCAqZGV2KTsKK2ludCBlbTI4eHhfcmVnaXN0ZXJfZXh0ZW5z aW9uKHN0cnVjdCBlbTI4eHhfb3BzICpkZXYpOwordm9pZCBlbTI4eHhfdW5yZWdpc3Rlcl9leHRl bnNpb24oc3RydWN0IGVtMjh4eF9vcHMgKmRldik7CitpbnQgZW0yODgwX2lyX2RldGFjaChzdHJ1 Y3QgZW0yOHh4ICpkZXYpOworaW50IGVtMjg4MF9pcl9hdHRhY2goc3RydWN0IGVtMjh4eCAqZGV2 KTsKK2ludCBlbTI4ODBfZ2V0X2tleV90ZXJyYXRlYyhzdHJ1Y3QgZW0yOHh4ICpkZXYsIHUzMiAq aXJfa2V5LCB1MzIgKmtleXN0YXR1cyk7CitpbnQgZW0yODgwX2dldF9rZXlfZW1waWEoc3RydWN0 IGVtMjh4eCAqZGV2LCB1MzIgKmlyX2tleSwgdTMyICprZXlzdGF0dXMpOworaW50IGVtMjg4OF9n ZXRfa2V5X2VtcGlhKHN0cnVjdCBlbTI4eHggKmRldiwgdTMyICppcl9rZXksIHUzMiAqa2V5c3Rh dHVzKTsKK2ludCBlbTI4NjBfZ2V0X2tleV9rYWlvbXkoc3RydWN0IGVtMjh4eCAqZGV2LCB1MzIg KmlyX2tleSwgdTMyICprZXlzdGF0dXMpOworaW50IGVtMjh4eF9zZXRfdmJpKHN0cnVjdCBlbTI4 eHggKmRldiwgaW50IGVuYWJsZSk7CisKKworZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0 ICplbTI4eHhfd3E7CisKKworLyogUHJvdmlkZWQgYnkgZW0yOHh4LWNhcmRzLmMgKi8KK2V4dGVy biBpbnQgZW0yODAwX3ZhcmlhbnRfZGV0ZWN0KHN0cnVjdCB1c2JfZGV2aWNlKiB1ZGV2LCBpbnQg bW9kZWwpOworZXh0ZXJuIGludCBlbTI4eHhfY2FyZF9zZXR1cChzdHJ1Y3QgZW0yOHh4ICpkZXYp OworZXh0ZXJuIHZvaWQgZW0yOHh4X2NhcmRfZGlzY29ubmVjdChzdHJ1Y3QgZW0yOHh4ICpkZXYp OworZXh0ZXJuIHN0cnVjdCBlbTI4eHhfYm9hcmQgZW0yOHh4X2JvYXJkc1tdOworZXh0ZXJuIHN0 cnVjdCB1c2JfZGV2aWNlX2lkIGVtMjh4eF9pZF90YWJsZVtdOworZXh0ZXJuIGNvbnN0IHVuc2ln bmVkIGludCBlbTI4eHhfYmNvdW50OworZXh0ZXJuIGludCBlbTI4eHhfZ3Bpb19jb250cm9sKHZv aWQgKnByaXYsIHVuc2lnbmVkIGludCBjb21tYW5kLCB2b2lkICpwdHIpOworZXh0ZXJuIGludCBl bTI4eHhfZ3Bpb19jb250cm9sX3RyYW5zbGF0ZSh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgY29t bWFuZCwgdm9pZCAqcHRyKTsKK2V4dGVybiBpbnQgZW0yOHh4X3F0MTAxMF9yZXNldF9jb250cm9s KHZvaWQgKnByaXYsIGludCBjb21tYW5kLCB2b2lkICpwdHIpOworCisvKiBWaWRlb2xvZ3kgc3Bl Y2lmaWMgZnVuY3Rpb25zICovCisKKy8qIHdoaXRlIGJhbGFuY2UgbW9kZSAqLworI2RlZmluZSBW NEwyX1ZZX1dCTSAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSswKQorLyog c2h1dHRlciBzcGVlZCAqLworI2RlZmluZSBWNEwyX1ZZX1NIVVRURVIgICAgICAgICAgICAgKFY0 TDJfQ0lEX1BSSVZBVEVfQkFTRSsxKQorLyogbWlycm9yIG1vZGUgKi8KKyNkZWZpbmUgVjRMMl9W WV9NSVJST1IgICAgICAgICAgICAgIChWNEwyX0NJRF9QUklWQVRFX0JBU0UrMikKKy8qIGdhaW4g Y29udHJvbCBvbi9vZmYgKi8KKyNkZWZpbmUgVjRMMl9WWV9HQUlOX0NPTlRST0xfRU4gICAgIChW NEwyX0NJRF9QUklWQVRFX0JBU0UrMykKKy8qIGdhaW4gY29udHJvbCB2YWx1ZXMgMHgwMCAtIDB4 N2YgKi8KKyNkZWZpbmUgVjRMMl9WWV9HQUlOX0NPTlRST0wgICAgICAgIChWNEwyX0NJRF9QUklW QVRFX0JBU0UrNCkKKy8qIGVuYWJsZSBlZGdlIGVuaGFuY2UgKi8KKyNkZWZpbmUgVjRMMl9WWV9F REdFX0VOSEFOQ0VfRU4gICAgIChWNEwyX0NJRF9QUklWQVRFX0JBU0UrNSkKKy8qIGVkZ2UgZW5o YW5jZSB2YWx1ZXMgMHgwMCAtIDB4MWYgKi8KKyNkZWZpbmUgVjRMMl9WWV9FREdFX0VOSEFOQ0Ug ICAgICAgIChWNEwyX0NJRF9QUklWQVRFX0JBU0UrNikKKy8qIEJMQyAoPz8/KSB2YWx1ZXMgMHgw MCAob2ZmKSAtIDB4NDAgKi8KKyNkZWZpbmUgVjRMMl9WWV9CTEMgICAgICAgICAgICAgICAgIChW NEwyX0NJRF9QUklWQVRFX0JBU0UrNykKKy8qIFJHYWluIHZhbHVlICAgIDB4MDAtMHhmZiAqLwor I2RlZmluZSBWNEwyX1ZZX1JHQUlOICAgICAgICAgICAgICAgKFY0TDJfQ0lEX1BSSVZBVEVfQkFT RSs4KQorLyogQkdhaW4gdmFsdWUgICAgMHgwMC0weGZmICovCisjZGVmaW5lIFY0TDJfVllfQkdB SU4gICAgICAgICAgICAgICAoVjRMMl9DSURfUFJJVkFURV9CQVNFKzkpCisKKworaW50IGVtMjh4 eF92eV9jY3RybChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwp OworaW50IGVtMjh4eF92eV9nY3RybChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHN0cnVjdCB2NGwyX2Nv bnRyb2wgKmN0cmwpOworaW50IGVtMjh4eF92eV9xY3RybChzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwg KnFjdHJsKTsKKworLyogZW0yOHh4IHJlZ2lzdGVycyAqLworI2RlZmluZSBSMDZfSTJDX0NMS19S RUcgICAgICAgICAweDA2CisjZGVmaW5lIFIwQV9DSElQSURfUkVHCQkweDBhCisjZGVmaW5lIFIw Q19VU0JTVVNQX1JFRwkJMHgwYworCisjZGVmaW5lIFIwRV9BVURJT1NSQ19SRUcJMHgwZQorI2Rl ZmluZSBSMEZfWENMS19SRUcgIAkJMHgwZgorCisjZGVmaW5lIFIxMF9WSU5NT0RFX1JFRyAgICAg ICAgCTB4MTAKKyNkZWZpbmUgUjExX1ZJTkNUUkxfUkVHICAgICAgICAJMHgxMQorI2RlZmluZSBS MTJfVklORU5BQkxFX1JFRyAgICAgIAkweDEyCisKKyNkZWZpbmUgUjE0X0dBTU1BX1JFRyAgCQkw eDE0CisjZGVmaW5lIFIxNV9SR0FJTl9SRUcgIAkJMHgxNQorI2RlZmluZSBSMTZfR0dBSU5fUkVH ICAJCTB4MTYKKyNkZWZpbmUgUjE3X0JHQUlOX1JFRyAgCQkweDE3CisjZGVmaW5lIFIxOF9ST0ZG U0VUX1JFRyAgICAgICAgCTB4MTgKKyNkZWZpbmUgUjE5X0dPRkZTRVRfUkVHICAgICAgICAJMHgx OQorI2RlZmluZSBSMUFfQk9GRlNFVF9SRUcgICAgICAgIAkweDFhCisKKyNkZWZpbmUgUjFCX09G TE9XX1JFRyAgCQkweDFiCisjZGVmaW5lIFIxQ19IU1RBUlRfUkVHIAkJMHgxYworI2RlZmluZSBS MURfVlNUQVJUX1JFRyAJCTB4MWQKKyNkZWZpbmUgUjFFX0NXSURUSF9SRUcgCQkweDFlCisjZGVm aW5lIFIxRl9DSEVJR0hUX1JFRyAgICAgICAgCTB4MWYKKworI2RlZmluZSBSMjBfWUdBSU5fUkVH ICAJCTB4MjAKKyNkZWZpbmUgUjIxX1lPRkZTRVRfUkVHICAgICAgICAJMHgyMQorI2RlZmluZSBS MjJfVVZHQUlOX1JFRyAJCTB4MjIKKyNkZWZpbmUgUjIzX1VPRkZTRVRfUkVHICAgICAgICAJMHgy MworI2RlZmluZSBSMjRfVk9GRlNFVF9SRUcgICAgICAgIAkweDI0CisjZGVmaW5lIFIyNV9TSEFS UE5FU1NfUkVHICAgICAgCTB4MjUKKworI2RlZmluZSBSMjZfQ09NUFJfUkVHICAJCTB4MjYKKyNk ZWZpbmUgUjI3X09VVEZNVF9SRUcgCQkweDI3CisKKyNkZWZpbmUgUjI4X1hNSU5fUkVHICAgCQkw eDI4CisjZGVmaW5lIFIyOV9YTUFYX1JFRyAgIAkJMHgyOQorI2RlZmluZSBSMkFfWU1JTl9SRUcg ICAJCTB4MmEKKyNkZWZpbmUgUjJCX1lNQVhfUkVHICAgCQkweDJiCisKKyNkZWZpbmUgUjMwX0hT Q0FMRUxPV19SRUcgICAgICAJMHgzMAorI2RlZmluZSBSMzFfSFNDQUxFSElHSF9SRUcgICAgIAkw eDMxCisjZGVmaW5lIFIzMl9WU0NBTEVMT1dfUkVHICAgICAgCTB4MzIKKyNkZWZpbmUgUjMzX1ZT Q0FMRUhJR0hfUkVHICAgICAJMHgzMworCisjZGVmaW5lIFI0MF9BQzk3TFNCX1JFRyAgICAgICAg CTB4NDAKKyNkZWZpbmUgUjQxX0FDOTdNU0JfUkVHICAgICAgICAJMHg0MQorI2RlZmluZSBSNDJf QUM5N0FERFJfUkVHICAgICAgIAkweDQyCisjZGVmaW5lIFI0M19BQzk3QlVTWV9SRUcgICAgICAg CTB4NDMKKworLyogZW0yMDIgcmVnaXN0ZXJzICovCisjZGVmaW5lIFIwMl9NQVNURVJfQUM5NyAg ICAgCTB4MDIKKyNkZWZpbmUgUjEwX0xJTkVfSU5fQUM5NyAgICAgICAgMHgxMAorI2RlZmluZSBS MTRfVklERU9fQUM5NyAJCTB4MTQKKworLyogZW0yODAwIHJlZ2lzdGVycyAqLworI2RlZmluZSBF TTI4MDBfQVVESU9TUkNfUkVHIAkweDA4CisKKy8qIHJlZ2lzdGVyIHNldHRpbmdzICovCisjZGVm aW5lIEVNMjgwMF9BVURJT19TUkNfVFVORVIgIDB4MGQKKyNkZWZpbmUgRU0yODAwX0FVRElPX1NS Q19MSU5FICAgMHgwYworI2RlZmluZSBFTTI4WFhfQVVESU9fU1JDX1RVTkVSCTB4YzAKKyNkZWZp bmUgRU0yOFhYX0FVRElPX1NSQ19MSU5FCTB4ODAKKworLyogcHJpbnRrIG1hY3JvcyAqLworCisj ZGVmaW5lIGVtMjh4eF9lcnIoZm10LCBhcmcuLi4pIGRvIHtcCisJcHJpbnRrKEtFUk5fRVJSIGZt dCAsICMjYXJnKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBlbTI4eHhfZXJyZGV2KGZtdCwgYXJn Li4uKSBkbyB7XAorCXByaW50ayhLRVJOX0VSUiAiJXM6ICJmbXQsXAorCQkJZGV2LT5uYW1lICwg IyNhcmcpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGVtMjh4eF9pbmZvKGZtdCwgYXJnLi4uKSBk byB7XAorCXByaW50ayhLRVJOX0lORk8gIiVzOiAiZm10LFwKKwkJCWRldi0+bmFtZSAsICMjYXJn KTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZW0yOHh4X3dhcm4oZm10LCBhcmcuLi4pIGRvIHtcCisJ cHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICJmbXQsXAorCQkJZGV2LT5uYW1lICwgIyNhcmcpOyB9 IHdoaWxlICgwKQorCit2b2lkIGVtMjh4eF9jb25maWdfaTJjKHN0cnVjdCBlbTI4eHggKmRldik7 CitpbnQgZW0yOHh4X2NvbmZpZyhzdHJ1Y3QgZW0yOHh4ICpkZXYpOworCitzdGF0aWMgaW5saW5l IGludCBlbTI4eHhfYXVkaW9fc291cmNlKHN0cnVjdCBlbTI4eHggKmRldiwgaW50IGlucHV0KQor eworCWlmIChkZXYtPmVtX3R5cGUgPT0gRU0yODAwKSB7CisJCXU4IHRtcCA9IEVNMjgwMF9BVURJ T19TUkNfVFVORVI7CisJCWlmIChpbnB1dCA9PSBFTTI4WFhfQVVESU9fU1JDX0xJTkUpCisJCQl0 bXAgPSBFTTI4MDBfQVVESU9fU1JDX0xJTkU7CisJCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgRU0y ODAwX0FVRElPU1JDX1JFRywgJnRtcCwgMSk7CisJfQorCXJldHVybiBlbTI4eHhfd3JpdGVfcmVn X2JpdHMoZGV2LCBSMEVfQVVESU9TUkNfUkVHLCBpbnB1dCwgMHhjMCk7Cit9CisKKy8qIEZJWE1F OiByZXR1cm4gc29tZXRoaW5nIHNhbmUgaGVyZSAqLworCisjZGVmaW5lIEVNMjhYWF9NVVRFRCAg IDEKKyNkZWZpbmUgRU0yOFhYX1VOTVVURUQgMAorCitzdGF0aWMgaW5saW5lIGludCBlbTI4eHhf YXVkaW9fdXNiX211dGUoc3RydWN0IGVtMjh4eCAqZGV2LCBpbnQgbXV0ZSkKK3sKKwlzd2l0Y2gg KGRldi0+ZW1fdHlwZSkgeworCWNhc2UgRU0yNzUwOgorCQllbTI4eHhfd3JpdGVfcmVncyhkZXYs IFIwRl9YQ0xLX1JFRywgIlx4MGEiLCAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZW0yOHh4 X3dyaXRlX3JlZ19iaXRzKGRldiwgUjBGX1hDTEtfUkVHLCBtdXRlID8gMHgwMCA6IDB4ODAsIDB4 ODApOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZW0yOHh4X2F1ZGlv X2FuYWxvZ19zZXR1cChzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJLyogdW5tdXRlIHZpZGVvIG1p eGVyIHdpdGggZGVmYXVsdCB2b2x1bWUgbGV2ZWwgKi8KKwlyZXR1cm4gZW0yOHh4X3dyaXRlX2Fj OTcoZGV2LCBSMTRfVklERU9fQUM5NywgIlx4MDhceDA4Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUg aW50IGVtMjh4eF9hdWRpb19zZXRfbWl4ZXIoc3RydWN0IGVtMjh4eCAqZGV2LCBlbnVtICBlbnVt Mjh4eF9taXhjaGFubmVsIGNoYW4pCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoY2hhbiA9PSBF TTI4WFhfTUlYX05PVE9VQ0gpCisJCXJldHVybiByZXQ7CisJaWYgKChyZXQgPSBlbTI4eHhfd3Jp dGVfYWM5NyhkZXYsIFIxMF9MSU5FX0lOX0FDOTcsCisJCQkJCWNoYW4gPT0gRU0yOFhYX01JWF9M SU5FX0lOID8KKwkJCQkJIlx4MDhceDA4IiA6ICJceDA4XHg4OCIpKSkKKwkJcmV0dXJuIHJldDsK KwlpZiAoKHJldCA9IGVtMjh4eF93cml0ZV9hYzk3KGRldiwgUjE0X1ZJREVPX0FDOTcsIGNoYW4g PT0gRU0yOFhYX01JWF9WSURFTyA/CisJCQkJCSJceDA4XHgwOCI6Ilx4MDhceDg4IikpKQorCQly ZXR1cm4gcmV0OworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGVtMjh4eF9j b21wcmVzc2lvbl9kaXNhYmxlKHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwkvKiBzaWRlIGVmZmVj dCBvZiBkaXNhYmxpbmcgc2NhbGVyIGFuZCBtaXhlciAqLworCXJldHVybiBlbTI4eHhfd3JpdGVf cmVncyhkZXYsIFIyNl9DT01QUl9SRUcsICJceDAwIiwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUg aW50IGVtMjh4eF9jb250cmFzdF9nZXQoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCXJldHVybiBl bTI4eHhfcmVhZF9yZWcoZGV2LCBSMjBfWUdBSU5fUkVHKSAmIDB4MWY7Cit9CisKK3N0YXRpYyBp bmxpbmUgaW50IGVtMjh4eF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJ cmV0dXJuIGVtMjh4eF9yZWFkX3JlZyhkZXYsIFIyMV9ZT0ZGU0VUX1JFRyk7Cit9CisKK3N0YXRp YyBpbmxpbmUgaW50IGVtMjh4eF9zYXR1cmF0aW9uX2dldChzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7 CisJcmV0dXJuIGVtMjh4eF9yZWFkX3JlZyhkZXYsIFIyMl9VVkdBSU5fUkVHKSAmIDB4MWY7Cit9 CisKK3N0YXRpYyBpbmxpbmUgaW50IGVtMjh4eF91X2JhbGFuY2VfZ2V0KHN0cnVjdCBlbTI4eHgg KmRldikKK3sKKwlyZXR1cm4gZW0yOHh4X3JlYWRfcmVnKGRldiwgUjIzX1VPRkZTRVRfUkVHKTsK K30KKworc3RhdGljIGlubGluZSBpbnQgZW0yOHh4X3ZfYmFsYW5jZV9nZXQoc3RydWN0IGVtMjh4 eCAqZGV2KQoreworCXJldHVybiBlbTI4eHhfcmVhZF9yZWcoZGV2LCBSMjRfVk9GRlNFVF9SRUcp OworfQorCitzdGF0aWMgaW5saW5lIGludCBlbTI4eHhfZ2FtbWFfZ2V0KHN0cnVjdCBlbTI4eHgg KmRldikKK3sKKwlyZXR1cm4gZW0yOHh4X3JlYWRfcmVnKGRldiwgUjE0X0dBTU1BX1JFRykgJiAw eDNmOworfQorCitzdGF0aWMgaW5saW5lIGludCBlbTI4eHhfY29udHJhc3Rfc2V0KHN0cnVjdCBl bTI4eHggKmRldiwgczMyIHZhbCkKK3sKKwl1OCB0bXAgPSAodTgpIHZhbDsKKwlyZXR1cm4gZW0y OHh4X3dyaXRlX3JlZ3MoZGV2LCBSMjBfWUdBSU5fUkVHLCAmdG1wLCAxKTsKK30KKworc3RhdGlj IGlubGluZSBpbnQgZW0yOHh4X2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBlbTI4eHggKmRldiwgczMy IHZhbCkKK3sKKwl1OCB0bXAgPSAodTgpIHZhbDsKKwlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZ3Mo ZGV2LCBSMjFfWU9GRlNFVF9SRUcsICZ0bXAsIDEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBl bTI4eHhfc2F0dXJhdGlvbl9zZXQoc3RydWN0IGVtMjh4eCAqZGV2LCBzMzIgdmFsKQoreworCXU4 IHRtcCA9ICh1OCkgdmFsOworCXJldHVybiBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIyMl9VVkdB SU5fUkVHLCAmdG1wLCAxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZW0yOHh4X3VfYmFsYW5j ZV9zZXQoc3RydWN0IGVtMjh4eCAqZGV2LCBzMzIgdmFsKQoreworCXU4IHRtcCA9ICh1OCkgdmFs OworCXJldHVybiBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIFIyM19VT0ZGU0VUX1JFRywgJnRtcCwg MSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGVtMjh4eF92X2JhbGFuY2Vfc2V0KHN0cnVjdCBl bTI4eHggKmRldiwgczMyIHZhbCkKK3sKKwl1OCB0bXAgPSAodTgpIHZhbDsKKwlyZXR1cm4gZW0y OHh4X3dyaXRlX3JlZ3MoZGV2LCBSMjRfVk9GRlNFVF9SRUcsICZ0bXAsIDEpOworfQorCitzdGF0 aWMgaW5saW5lIGludCBlbTI4eHhfZ2FtbWFfc2V0KHN0cnVjdCBlbTI4eHggKmRldiwgczMyIHZh bCkKK3sKKwl1OCB0bXAgPSAodTgpIHZhbDsKKwlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2 LCBSMTRfR0FNTUFfUkVHLCAmdG1wLCAxKTsKK30KKworLypGSVhNRTogZXNwZWNpYWxseSBlbTI4 MDAgZGV2aWNlcyBoYXZlIGEgdG9vIHNtYWxsIGZyYW1lYnVmZmVyCisgIGZvciA3MjAvWVVZMiBm cmFtZXMgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG5vcm1fbWF4dyhzdHJ1Y3QgZW0y OHh4ICpkZXYpCit7CisJc3dpdGNoIChkZXYtPm1vZGVsKSB7CisJCWRlZmF1bHQ6IHJldHVybiA3 MjA7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBub3JtX21heGgoc3RydWN0 IGVtMjh4eCAqZGV2KQoreworCXN3aXRjaCAoZGV2LT5tb2RlbCkgeworCQlkZWZhdWx0OiByZXR1 cm4gKGRldi0+dHZub3JtLT5pZCAmIFY0TDJfU1REXzYyNV81MCkgPyA1NzYgOiA0ODA7CisJfQor fQorCisjZW5kaWYK ------=_Part_25604_18097724.1224710077109-- -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/