From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Zhong Subject: [PATCH 3/6] drm/rockchip: vop: add cdn DP support for rk3399 Date: Fri, 27 May 2016 14:02:16 +0800 Message-ID: <1464328939-8073-4-git-send-email-zyw@rock-chips.com> References: <1464328939-8073-1-git-send-email-zyw@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1464328939-8073-1-git-send-email-zyw@rock-chips.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dianders@chromium.org, tfiga@chromium.org, heiko@sntech.de, yzq@rock-chips.com Cc: alsa-devel@alsa-project.org, Takashi Iwai , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Jaroslav Kysela , linux-rockchip@lists.infradead.org, Chris Zhong , linux-arm-kernel@lists.infradead.org List-Id: linux-rockchip.vger.kernel.org QWRkIHN1cHBvcnQgZm9yIGNkbiBEUCBjb250cm9sbGVyIHdoaWNoIGlzIGVtYmVkZGVkIGluIHRo ZSByazMzOTkKU29Dcy4gVGhlIERQIGlzIGNvbXBsaWFudCB3aXRoIERpc3BsYXlQb3J0IFNwZWNp ZmljYXRpb24sClZlcnNpb24gMS4zLCBUaGlzIElQIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgcm9j a2NoaXAgdHlwZS1jIFBIWSBJUC4KVGhlcmUgaXMgYSB1Q1BVIGluIERQIGNvbnRyb2xsZXIsIGl0 IG5lZWQgYSBmaXJtd2FyZSB0byB3b3JrLApwbGVhc2UgcHV0IHRoZSBmaXJtd2FyZSBmaWxlIHRv IC9saWIvZmlybXdhcmUvY2RuL2RwdHguYmluLiBUaGUKdUNQVSBpbiBjaGFyZ2Ugb2YgYXV4IGNv bW11bmljYXRpb24gYW5kIGxpbmsgdHJhaW5pbmcsIHRoZSBob3N0IHVzZQptYWlsYm94IHRvIGNv bW11bmljYXRlIHdpdGggdGhlIHVjcHUuClRoZSBkY2xrIHBpbl9wb2wgb2Ygdm9wIG11c3Qgbm90 IGJlIGludmVydCBmb3IgRFAuCgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBaaG9uZyA8enl3QHJvY2st Y2hpcHMuY29tPgotLS0KCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZyAgICAgICAg ICAgIHwgICA5ICsKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZSAgICAgICAgICAg fCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1jb3JlLmMgICAgICB8IDYy MCArKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1k cC1jb3JlLmggICAgICB8ICA5NSArKysrCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRw LXJlZy5jICAgICAgIHwgNzMwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMv Z3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmggICAgICAgfCA0MDQgKysrKysrKysrKysrKysr CiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jIHwgICA5ICstCiBk cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5oIHwgICAyICsKIGRyaXZl cnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF92b3BfcmVnLmMgfCAgIDIgKwogaW5jbHVkZS9z b3VuZC9jZG4tZHAtYXVkaW8uaCAgICAgICAgICAgICAgICB8ICA1MSArKwogMTAgZmlsZXMgY2hh bmdlZCwgMTkyMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1jb3JlLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuaAogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgaW5jbHVkZS9zb3VuZC9jZG4tZHAtYXVkaW8uaAoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tj b25maWcKaW5kZXggZDMwYmRjMy4uMjBkYTlhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcK QEAgLTI1LDYgKzI1LDE1IEBAIGNvbmZpZyBST0NLQ0hJUF9BTkFMT0dJWF9EUAogCSAgZm9yIHRo ZSBBbmFsb2dpeCBDb3JlIERQIGRyaXZlci4gSWYgeW91IHdhbnQgdG8gZW5hYmxlIERQCiAJICBv biBSSzMyODggYmFzZWQgU29DLCB5b3Ugc2hvdWxkIHNlbGV0IHRoaXMgb3B0aW9uLgogCitjb25m aWcgUk9DS0NISVBfQ0ROX0RQCisgICAgICAgIHRyaXN0YXRlICJSb2NrY2hpcCBjZG4gRFAiCisg ICAgICAgIGRlcGVuZHMgb24gRFJNX1JPQ0tDSElQCisgICAgICAgIGhlbHAKKwkgIFRoaXMgc2Vs ZWN0cyBzdXBwb3J0IGZvciBSb2NrY2hpcCBTb0Mgc3BlY2lmaWMgZXh0ZW5zaW9ucworCSAgZm9y IHRoZSBjZG4gRHAgZHJpdmVyLiBJZiB5b3Ugd2FudCB0byBlbmFibGUgRHAgb24KKwkgIFJLMzM5 OSBiYXNlZCBTb0MsIHlvdSBzaG91bGQgc2VsZXQgdGhpcworCSAgb3B0aW9uLgorCiBjb25maWcg Uk9DS0NISVBfRFdfSERNSQogICAgICAgICB0cmlzdGF0ZSAiUm9ja2NoaXAgc3BlY2lmaWMgZXh0 ZW5zaW9ucyBmb3IgU3lub3BzeXMgRFcgSERNSSIKICAgICAgICAgZGVwZW5kcyBvbiBEUk1fUk9D S0NISVAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZSBiL2Ry aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZQppbmRleCAwNWQwNzEzLi5hYmRlY2Q1IDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKKysrIGIvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlCkBAIC03LDYgKzcsNyBAQCByb2NrY2hpcGRybS15 IDo9IHJvY2tjaGlwX2RybV9kcnYubyByb2NrY2hpcF9kcm1fZmIubyBcCiByb2NrY2hpcGRybS0k KENPTkZJR19EUk1fRkJERVZfRU1VTEFUSU9OKSArPSByb2NrY2hpcF9kcm1fZmJkZXYubwogCiBv YmotJChDT05GSUdfUk9DS0NISVBfQU5BTE9HSVhfRFApICs9IGFuYWxvZ2l4X2RwLXJvY2tjaGlw Lm8KK29iai0kKENPTkZJR19ST0NLQ0hJUF9DRE5fRFApICs9IGNkbi1kcC1jb3JlLm8gY2RuLWRw LXJlZy5vCiBvYmotJChDT05GSUdfUk9DS0NISVBfRFdfSERNSSkgKz0gZHdfaGRtaS1yb2NrY2hp cC5vCiBvYmotJChDT05GSUdfUk9DS0NISVBfRFdfTUlQSV9EU0kpICs9IGR3LW1pcGktZHNpLm8K IG9iai0kKENPTkZJR19ST0NLQ0hJUF9JTk5PX0hETUkpICs9IGlubm9faGRtaS5vCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuYyBiL2RyaXZlcnMvZ3B1 L2RybS9yb2NrY2hpcC9jZG4tZHAtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLmZkZjk5ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvY2RuLWRwLWNvcmUuYwpAQCAtMCwwICsxLDYyMCBAQAorLyoKKyAqIGNkbiBkcCBjb250cm9s bGVyIGNvcmUgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE2IENocmlzIFpob25nIDx6 eXdAcm9jay1jaGlwcy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgUk9DS0NISVAsIEluYy4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9kcF9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2VkaWQu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+CisKKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQu aD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgor I2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+ CisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS1yb2NrY2hpcC10eXBlYy5oPgorI2luY2x1ZGUgPGxp bnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+CisKKyNpbmNsdWRlIDx2aWRl by9vZl92aWRlb21vZGUuaD4KKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KKworI2luY2x1 ZGUgPHNvdW5kL2Nkbi1kcC1hdWRpby5oPgorCisjaW5jbHVkZSAicm9ja2NoaXBfZHJtX3ZvcC5o IgorI2luY2x1ZGUgImNkbi1kcC1yZWcuaCIKKyNpbmNsdWRlICJjZG4tZHAtY29yZS5oIgorCisj ZGVmaW5lIGNvbm5lY3Rvcl90b19kcChjKSBcCisJCWNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgY2Ru X2RwX2RldmljZSwgY29ubmVjdG9yKQorCisjZGVmaW5lIGVuY29kZXJfdG9fZHAoYykgXAorCQlj b250YWluZXJfb2YoYywgc3RydWN0IGNkbl9kcF9kZXZpY2UsIGVuY29kZXIpCisKKy8qIGRwIGdy ZiByZWdpc3RlciBvZmZzZXQgKi8KKyNkZWZpbmUgRFBfVk9QX1NFTAkJMHg2MjI0CisjZGVmaW5l IERQX1NFTF9WT1BfTElUCQlCSVQoMTIpCisKK3N0YXRpYyBpbnQgY2RuX2RwX2Nsa19lbmFibGUo c3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCWludCByZXQgPSAwOworCWludCBjbGtfcmF0 ZSA9IDIwMDAwMDAwMDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkcC0+cGNsayk7CisJ aWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiY2Fubm90IGVuYWJsZSBkcCBwY2xr ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9wY2xrOworCX0KKworCXJldCA9IGNsa19wcmVwYXJl X2VuYWJsZShkcC0+Y29yZV9jbGspOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHAtPmRl diwgImNhbm5vdCBlbmFibGUgY29yZV9jbGsgJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2NvcmVf Y2xrOworCX0KKworCXJldCA9IGNsa19zZXRfcmF0ZShkcC0+Y29yZV9jbGssIGNsa19yYXRlKTsK KwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJjYW5ub3Qgc2V0IGRwIGNvcmUg Y2xrIHRvICVkICVkXG4iLAorCQkJY2xrX3JhdGUsIHJldCk7CisJCWdvdG8gZXJyX3NldF9yYXRl OworCX0KKworCS8qIG5vdGljZSBmdyB0aGUgY2xrIGZyZXEgdmFsdWUgKi8KKwljZG5fZHBfc2V0 X2Z3X2NsayhkcCwgY2xrX3JhdGUpOworCisJcmV0dXJuIDA7CisKK2Vycl9zZXRfcmF0ZToKKwlj bGtfZGlzYWJsZV91bnByZXBhcmUoZHAtPmNvcmVfY2xrKTsKK2Vycl9jb3JlX2NsazoKKwljbGtf ZGlzYWJsZV91bnByZXBhcmUoZHAtPnBjbGspOworZXJyX3BjbGs6CisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKK2Nkbl9kcF9jb25uZWN0b3JfZGV0 ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCit7CisJc3Ry dWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gY29ubmVjdG9yX3RvX2RwKGNvbm5lY3Rvcik7CisJaW50 IHJldDsKKworCWlmICghZHAtPmZ3X2xvYWRlZCkKKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNf dW5rbm93bjsKKworCXJldCA9IGNkbl9kcF9nZXRfaHBkX3N0YXR1cyhkcCk7CisJaWYgKHJldCA8 IDApCisJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX3Vua25vd247CisKKwlkcC0+cGx1Z2dlZCA9 IHJldDsKKworCXJldHVybiByZXQgPyBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6IGNvbm5l Y3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworfQorCitzdGF0aWMgdm9pZCBjZG5fZHBfY29ubmVj dG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlkcm1fY29u bmVjdG9yX3VucmVnaXN0ZXIoY29ubmVjdG9yKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29u bmVjdG9yKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIGNkbl9kcF9h dG9taWNfY29ubmVjdG9yX2Z1bmNzID0geworCS5kcG1zID0gZHJtX2F0b21pY19oZWxwZXJfY29u bmVjdG9yX2RwbXMsCisJLmRldGVjdCA9IGNkbl9kcF9jb25uZWN0b3JfZGV0ZWN0LAorCS5kZXN0 cm95ID0gY2RuX2RwX2Nvbm5lY3Rvcl9kZXN0cm95LAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBl cl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVs cGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9t aWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0 YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCit9OworCitz dGF0aWMgaW50IGNkbl9kcF9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gY29ubmVjdG9yX3Rv X2RwKGNvbm5lY3Rvcik7CisJc3RydWN0IGVkaWQgKmVkaWQ7CisJaW50IHJldDsKKworCWlmICgh ZHAtPmZ3X2xvYWRlZCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBjZG5fZHBfc2V0X2hvc3RfY2Fw KGRwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZHAtPmRldiwgInNldCBob3N0IGNhcGFiaWxp dGllcyBmYWlsZWQ6JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZWRpZCA9IGRy bV9kb19nZXRfZWRpZChjb25uZWN0b3IsIGNkbl9kcF9nZXRfZWRpZF9ibG9jaywgZHApOworCWlm IChlZGlkKSB7CisJCWRldl9kYmcoZHAtPmRldiwgImdvdCBlZGlkOiB3aWR0aFslZF0geCBoZWln aHRbJWRdXG4iLAorCQkJZWRpZC0+d2lkdGhfY20sIGVkaWQtPmhlaWdodF9jbSk7CisKKwkJZHAt PnNpbmtfaGFzX2F1ZGlvID0gZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKGVkaWQpOworCQlkcm1f bW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLCBlZGlkKTsKKwkJ ZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7CisJCS8qIFN0b3JlIHRoZSBFTEQg Ki8KKwkJZHJtX2VkaWRfdG9fZWxkKGNvbm5lY3RvciwgZWRpZCk7CisJCWtmcmVlKGVkaWQpOwor CX0gZWxzZSB7CisJCWRldl9kYmcoZHAtPmRldiwgImZhaWxlZCB0byBnZXQgZWRpZFxuIik7CisJ fQorCisJLyoKKwkgKiBwdXQgdGhlIHRyYWluaW5nIHByb2Nlc3MgaGVyZSwgc2luY2UgdGhlIG1v ZGVfdmFsaWQgbmVlZCB0aGUKKwkgKiB0cmFpbmluZyByZXN1bHQgdG8gY2hlY2sgaWYgdGhlIHJl c29sdXRpb24gaXMgc3VwcG9ydC4KKwkgKi8KKwlyZXQgPSBjZG5fZHBfdHJhaW5pbmdfc3RhcnQo ZHApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiaHcgbHQgZXJyOiVkXG4iLCBy ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGNkbl9kcF9nZXRfbHRfc3RhdHVzKGRw KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZHAtPmRldiwgImh3IGx0IGdldCBzdGF0dXMgZXJy OiVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldl9kYmcoZHAtPmRldiwgInJh dGU6JWQsIGxhbmVzOiVkXG4iLAorCQlkcC0+bGluay5yYXRlLCBkcC0+bGluay5udW1fbGFuZXMp OworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyICoKKwljZG5fZHBf Y29ubmVjdG9yX2Jlc3RfZW5jb2RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQor eworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGNvbm5lY3Rvcl90b19kcChjb25uZWN0b3Ip OworCisJcmV0dXJuICZkcC0+ZW5jb2RlcjsKK30KKworc3RhdGljIGludCBjZG5fZHBfY29ubmVj dG9yX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkgICAg ICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGNkbl9kcF9kZXZp Y2UgKmRwID0gY29ubmVjdG9yX3RvX2RwKGNvbm5lY3Rvcik7CisJc3RydWN0IGRybV9kaXNwbGF5 X2luZm8gKmRpc3BsYXlfaW5mbyA9ICZkcC0+Y29ubmVjdG9yLmRpc3BsYXlfaW5mbzsKKwlsb25n IHJlcXVlc3RlZCA9IG1vZGUtPmNsb2NrICogZGlzcGxheV9pbmZvLT5icGMgKiAzIC8gMTAwMDsK Kwlsb25nIGFjdHVhbCwgcmF0ZTsKKworCXJhdGUgPSBkcm1fZHBfYndfY29kZV90b19saW5rX3Jh dGUoZHAtPmxpbmsucmF0ZSk7CisJYWN0dWFsID0gcmF0ZSAqIGRwLT5saW5rLm51bV9sYW5lcyAv IDEwMDsKKworCS8qIGVmZmljaWVuY3kgaXMgYWJvdXQgMC44ICovCisJYWN0dWFsID0gYWN0dWFs ICogOCAvIDEwOworCisJaWYgKHJlcXVlc3RlZCA+IGFjdHVhbCkgeworCQlkZXZfZGJnKGRwLT5k ZXYsICJyZXF1ZXN0ZWQ9JWxkLCBhY3R1YWw9JWxkLCBjbG9jaz0lZCwgYnBjPSAlZFxuIiwKKwkJ CXJlcXVlc3RlZCwgYWN0dWFsLCBtb2RlLT5jbG9jaywgZGlzcGxheV9pbmZvLT5icGMpOworCQly ZXR1cm4gTU9ERV9IX0lMTEVHQUw7CisJfQorCisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0YXRp YyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgY2RuX2RwX2Nvbm5lY3Rvcl9oZWxw ZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IGNkbl9kcF9jb25uZWN0b3JfZ2V0X21vZGVzLAor CS5iZXN0X2VuY29kZXIgPSBjZG5fZHBfY29ubmVjdG9yX2Jlc3RfZW5jb2RlciwKKwkubW9kZV92 YWxpZCA9IGNkbl9kcF9jb25uZWN0b3JfbW9kZV92YWxpZCwKK307CisKK3N0YXRpYyBpbnQgY2Ru X2RwX2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGNkbl9k cF9kZXZpY2UgKmRwID0gZW5jb2Rlcl90b19kcChlbmNvZGVyKTsKKwlpbnQgcmV0OworCisJY2Ru X2RwX3NldF92aWRlb19zdGF0dXMoZHAsIENPTlRST0xfVklERU9fSURMRSk7CisKKwlyZXQgPSBj ZG5fZHBfY29uZmlnX3ZpZGVvKGRwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZHAtPmRldiwg InVuYWJsZSB0byBjb25maWcgdmlkZW9cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWNkbl9k cF9zZXRfdmlkZW9fc3RhdHVzKGRwLCBDT05UUk9MX1ZJREVPX1ZBTElEKTsKKwlkcC0+ZHBtc19t b2RlID0gRFJNX01PREVfRFBNU19PTjsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lk IGNkbl9kcF9lbmNvZGVyX21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJ CQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgIHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICphZGp1c3RlZCkKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBl bmNvZGVyX3RvX2RwKGVuY29kZXIpOworCXN0cnVjdCBkcm1fZGlzcGxheV9pbmZvICpkaXNwbGF5 X2luZm8gPSAmZHAtPmNvbm5lY3Rvci5kaXNwbGF5X2luZm87CisJc3RydWN0IHJvY2tjaGlwX2Ny dGNfc3RhdGUgKnN0YXRlOworCXN0cnVjdCB2aWRlb19pbmZvICp2aWRlbyA9ICZkcC0+dmlkZW9f aW5mbzsKKwlpbnQgcmV0LCB2YWw7CisKKwlzd2l0Y2ggKGRpc3BsYXlfaW5mby0+YnBjKSB7CisJ Y2FzZSAxNjoKKwljYXNlIDEyOgorCWNhc2UgMTA6CisJCXZpZGVvLT5jb2xvcl9kZXB0aCA9IDEw OworCQlicmVhazsKKwljYXNlIDY6CisJCXZpZGVvLT5jb2xvcl9kZXB0aCA9IDY7CisJCWJyZWFr OworCWRlZmF1bHQ6CisJCXZpZGVvLT5jb2xvcl9kZXB0aCA9IDg7CisJCWJyZWFrOworCX0KKwor CXZpZGVvLT5jb2xvcl9mbXQgPSBQWExfUkdCOworCisJdmlkZW8tPnZfc3luY19wb2xhcml0eSA9 ICEhKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OVlNZTkMpOworCXZpZGVvLT5oX3N5bmNf cG9sYXJpdHkgPSAhIShtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTkhTWU5DKTsKKworCXJl dCA9IGRybV9vZl9lbmNvZGVyX2FjdGl2ZV9lbmRwb2ludF9pZChkcC0+ZGV2LT5vZl9ub2RlLCBl bmNvZGVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuOworCisJc3RhdGUgPSB0b19yb2NrY2hp cF9jcnRjX3N0YXRlKGVuY29kZXItPmNydGMtPnN0YXRlKTsKKwlpZiAocmV0KSB7CisJCXZhbCA9 IERQX1NFTF9WT1BfTElUIHwgKERQX1NFTF9WT1BfTElUIDw8IDE2KTsKKwkJc3RhdGUtPm91dHB1 dF9tb2RlID0gUk9DS0NISVBfT1VUX01PREVfUDg4ODsKKwl9IGVsc2UgeworCQl2YWwgPSBEUF9T RUxfVk9QX0xJVCA8PCAxNjsKKwkJc3RhdGUtPm91dHB1dF9tb2RlID0gUk9DS0NISVBfT1VUX01P REVfQUFBQTsKKwl9CisJcmV0ID0gcmVnbWFwX3dyaXRlKGRwLT5ncmYsIERQX1ZPUF9TRUwsIHZh bCk7CisJaWYgKHJldCAhPSAwKQorCQlkZXZfZXJyKGRwLT5kZXYsICJDb3VsZCBub3Qgd3JpdGUg dG8gR1JGOiAlZFxuIiwgcmV0KTsKKworCW1lbWNweSgmZHAtPm1vZGUsIGFkanVzdGVkLCBzaXpl b2YoKm1vZGUpKTsKK30KKworc3RhdGljIHZvaWQgY2RuX2RwX2VuY29kZXJfZW5hYmxlKHN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBl bmNvZGVyX3RvX2RwKGVuY29kZXIpOworCisJaWYgKGRwLT5kcG1zX21vZGUgPT0gRFJNX01PREVf RFBNU19PTikKKwkJcmV0dXJuOworCisJY2RuX2RwX2NvbW1pdChlbmNvZGVyKTsKK30KKworc3Rh dGljIHZvaWQgY2RuX2RwX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gZW5jb2Rlcl90b19kcChlbmNvZGVy KTsKKworCWlmIChkcC0+ZHBtc19tb2RlICE9IERSTV9NT0RFX0RQTVNfT04pCisJCXJldHVybjsK KworCWNkbl9kcF9zZXRfdmlkZW9fc3RhdHVzKGRwLCBDT05UUk9MX1ZJREVPX0lETEUpOworCisJ ZHAtPmRwbXNfbW9kZSA9IERSTV9NT0RFX0RQTVNfT0ZGOworfQorCitzdGF0aWMgaW50CitjZG5f ZHBfZW5jb2Rlcl9hdG9taWNfY2hlY2soc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJ ICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgICBzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKK3sKKwlzdHJ1Y3Qgcm9ja2NoaXBfY3J0Y19z dGF0ZSAqcyA9IHRvX3JvY2tjaGlwX2NydGNfc3RhdGUoY3J0Y19zdGF0ZSk7CisKKwlzLT5vdXRw dXRfbW9kZSA9IFJPQ0tDSElQX09VVF9NT0RFX0FBQUE7CisJcy0+b3V0cHV0X3R5cGUgPSBEUk1f TU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0 cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgY2RuX2RwX2VuY29kZXJfaGVscGVyX2Z1bmNz ID0geworCS5tb2RlX3NldCA9IGNkbl9kcF9lbmNvZGVyX21vZGVfc2V0LAorCS5lbmFibGUgPSBj ZG5fZHBfZW5jb2Rlcl9lbmFibGUsCisJLmRpc2FibGUgPSBjZG5fZHBfZW5jb2Rlcl9kaXNhYmxl LAorCS5hdG9taWNfY2hlY2sgPSBjZG5fZHBfZW5jb2Rlcl9hdG9taWNfY2hlY2ssCit9OworCitz dGF0aWMgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIGNkbl9kcF9lbmNvZGVyX2Z1bmNzID0gewor CS5kZXN0cm95ID0gZHJtX2VuY29kZXJfY2xlYW51cCwKK307CisKK2ludCBjZG5fZHBfZmlybXdh cmVfaW5pdChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJaW50IHJldDsKKwljb25zdCB1 MzIgKmlyYW1fZGF0YSwgKmRyYW1fZGF0YTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3Owor CWNvbnN0IHN0cnVjdCBjZG5fZmlybXdhcmVfaGVhZGVyICpoZHI7CisKKwlpZiAoZHAtPmZ3X2xv YWRlZCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgImNkbi9k cHR4LmJpbiIsIGRwLT5kZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHAtPmRldiwg ImZhaWxlZCB0byByZXF1ZXN0IGZpcm13YXJlICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0Owor CX0KKworCWhkciA9IChzdHJ1Y3QgY2RuX2Zpcm13YXJlX2hlYWRlciAqKWZ3LT5kYXRhOworCWlm IChmdy0+c2l6ZSAhPSBsZTMyX3RvX2NwdShoZHItPnNpemVfYnl0ZXMpKQorCQlyZXR1cm4gLUVJ TlZBTDsKKworCXJldCA9IGNkbl9kcF9jbGtfZW5hYmxlKGRwKTsKKwlpZiAocmV0IDwgMCkgewor CQlkZXZfZXJyKGRwLT5kZXYsICJjYW5ub3QgZW5hYmxlIGRwIGNsayAlZFxuIiwgcmV0KTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwlkcF9jbG9ja19yZXNldF9zZXEoZHApOworCisJaXJhbV9kYXRh ID0gKGNvbnN0IHUzMiAqKShmdy0+ZGF0YSArIGhkci0+aGVhZGVyX3NpemUpOworCWRyYW1fZGF0 YSA9IChjb25zdCB1MzIgKikoZnctPmRhdGEgKyBoZHItPmhlYWRlcl9zaXplICsgaGRyLT5pcmFt X3NpemUpOworCisJcmV0ID0gY2RuX2RwX2xvYWRfZmlybXdhcmUoZHAsCisJCQkJICAgaXJhbV9k YXRhLCBoZHItPmlyYW1fc2l6ZSwKKwkJCQkgICBkcmFtX2RhdGEsIGhkci0+ZHJhbV9zaXplKTsK KworCXJldCA9IGNkbl9kcF9hY3RpdmUoZHAsIHRydWUpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vy cihkcC0+ZGV2LCAiYWN0aXZlIHVjcHUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwljZG5fZHBfZXZlbnRfY29uZmlnKGRwKTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IGNkbl9kcF9pbml0KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sKKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSBkcC0+ZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYt Pm9mX25vZGU7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2Rl dmljZShkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJZHAtPmdyZiA9IHN5c2Nvbl9y ZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUobnAsICJyb2NrY2hpcCxncmYiKTsKKwlpZiAoSVNfRVJS KGRwLT5ncmYpKSB7CisJCWRldl9lcnIoZGV2LCAiY2RuLWRwIG5lZWRzIHJvY2tjaGlwLGdyZiBw cm9wZXJ0eVxuIik7CisJCXJldHVybiBQVFJfRVJSKGRwLT5ncmYpOworCX0KKworCWRwLT5pcnEg PSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChkcC0+aXJxIDwgMCkgeworCQlkZXZf ZXJyKGRldiwgImNkbi1kcCBjYW4gbm90IGdldCBpcnFcbiIpOworCQlyZXR1cm4gZHAtPmlycTsK Kwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0s IDApOworCWRwLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAo SVNfRVJSKGRwLT5yZWdzKSkgeworCQlkZXZfZXJyKGRldiwgImlvcmVtYXAgcmVnIGZhaWxlZFxu Iik7CisJCXJldHVybiBQVFJfRVJSKGRwLT5yZWdzKTsKKwl9CisKKwlkcC0+Y29yZV9jbGsgPSBk ZXZtX2Nsa19nZXQoZGV2LCAiY29yZV9jbGsiKTsKKwlpZiAoSVNfRVJSKGRwLT5jb3JlX2Nsaykp IHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IGNvcmVfY2xrX2RwXG4iKTsKKwkJcmV0dXJu IFBUUl9FUlIoZHAtPmNvcmVfY2xrKTsKKwl9CisKKwlkcC0+cGNsayA9IGRldm1fY2xrX2dldChk ZXYsICJwY2xrIik7CisJaWYgKElTX0VSUihkcC0+cGNsaykpIHsKKwkJZGV2X2VycihkZXYsICJj YW5ub3QgZ2V0IHBjbGtcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkcC0+cGNsayk7CisJfQorCisJ ZHAtPnNwZGlmX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJzcGRpZiIpOworCWlmIChJU19FUlIo ZHAtPnNwZGlmX2NsaykpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IHNwZGlmX2Nsa1xu Iik7CisJCXJldHVybiBQVFJfRVJSKGRwLT5zcGRpZl9jbGspOworCX0KKworCWRwLT5kcG1zX21v ZGUgPSBEUk1fTU9ERV9EUE1TX09GRjsKKworCWRldl9zZXRfbmFtZShkcC0+ZGV2LCAiY2RuLWRw Iik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjZG5fZHBfYXVkaW9f b3BzIGRwX2F1ZGlvX29wcyA9IHsKKwkuYXVkaW9fc3RhcnR1cCA9IGNkbl9kcF9hdWRpb19zdGFy dCwKKwkuYXVkaW9fc2h1dGRvd24gPSBjZG5fZHBfYXVkaW9fc3RvcCwKKwkuYXVkaW9fc3RhcnQg PSBjZG5fZHBfYXVkaW9fc3RhcnQsCisJLmF1ZGlvX3N0b3AgPSBjZG5fZHBfYXVkaW9fc3RvcCwK KwkuYXVkaW9fY29uZmlnID0gY2RuX2RwX2F1ZGlvX2NvbmZpZ19zZXQsCit9OworCitzdGF0aWMg aW50IGNkbl9kcF9wZF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJICAgdW5z aWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAq ZHA7CisJdTggbWFwLCBpc19kcDsKKwlpbnQgdmFsdWUgPSAqKGludCAqKXByaXY7CisKKwlkcCA9 IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IGNkbl9kcF9kZXZpY2UsIGV2ZW50X25iKTsKKwlpZiAo SVNfRVJSX09SX05VTEwoZHApKSB7CisJCXByX2VycigiaW5pdGlhbGl6YXRpb24gaXNzdWUiKTsK KwkJcmV0dXJuIC0xOworCX0KKworCWlzX2RwID0gR0VUX0RQKHZhbHVlKTsKKworCWlmICghaXNf ZHApCisJCXJldHVybiAwOworCisJZHAtPmZsaXAgPSBHRVRfRkxJUCh2YWx1ZSk7CisJbWFwID0g R0VUX1BJTl9NQVAodmFsdWUpOworCWlmIChtYXAgJiAoUElOX01BUF9CIHwgUElOX01BUF9EIHwg UElOX01BUF9GKSkKKwkJZHAtPmNhcF9sYW5lcyA9IDI7CisJZWxzZQorCQlkcC0+Y2FwX2xhbmVz ID0gNDsKKworCXNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbigwLCAmZHAtPmV2ZW50X3dxLCAxMDAp OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNkbl9kcF9wZF9ldmVudF93cShzdHJ1 Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwOworCisJ ZHAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNkbl9kcF9kZXZpY2UsIGV2ZW50X3dxLndv cmspOworCWlmIChJU19FUlJfT1JfTlVMTChkcCkpIHsKKwkJcHJfZXJyKCJpbml0aWFsaXphdGlv biBpc3N1ZSIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGNkbl9kcF9maXJtd2FyZV9pbml0KGRw KSkKKwkJcmV0dXJuOworCisJaWYgKChjZG5fZHBfZ2V0X2V2ZW50KGRwKSAmIERQVFhfSFBEX0VW RU5UKSAmJiAoZHAtPmRybV9kZXYpKQorCQlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoZHAtPmRy bV9kZXYpOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwg c3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkgICAgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qg Y2RuX2RwX2F1ZGlvX3BkYXRhIGF1ZGlvX3BkYXRhOworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpk cCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYt Pm9mX25vZGU7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOwor CXN0cnVjdCBwaHkgKnBoeSA9IGRldm1fb2ZfcGh5X2dldF9ieV9pbmRleChkZXYsIG5wLCAwKTsK KwlpbnQgcmV0OworCisJaWYgKElTX0VSUihwaHkpKQorCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsK KworCWRwLT5waHkgPSBwaHk7CisKKwlyZXQgPSBjZG5fZHBfaW5pdChkcCk7CisJaWYgKHJldCA8 IDApCisJCXJldHVybiByZXQ7CisKKwlkcC0+ZHJtX2RldiA9IGRybV9kZXY7CisKKwllbmNvZGVy ID0gJmRwLT5lbmNvZGVyOworCisJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSBkcm1fb2ZfZmlu ZF9wb3NzaWJsZV9jcnRjcyhkcm1fZGV2LAorCQkJCQkJCSAgICAgZGV2LT5vZl9ub2RlKTsKKwlE Uk1fREVCVUdfS01TKCJwb3NzaWJsZV9jcnRjcyA9IDB4JXhcbiIsIGVuY29kZXItPnBvc3NpYmxl X2NydGNzKTsKKworCXJldCA9IGRybV9lbmNvZGVyX2luaXQoZHJtX2RldiwgZW5jb2RlciwgJmNk bl9kcF9lbmNvZGVyX2Z1bmNzLAorCQkJICAgICAgIERSTV9NT0RFX0VOQ09ERVJfVE1EUywgTlVM TCk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIGVuY29k ZXIgd2l0aCBkcm1cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRybV9lbmNvZGVyX2hlbHBl cl9hZGQoZW5jb2RlciwgJmNkbl9kcF9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CisKKwljb25uZWN0 b3IgPSAmZHAtPmNvbm5lY3RvcjsKKwljb25uZWN0b3ItPnBvbGxlZCA9IERSTV9DT05ORUNUT1Jf UE9MTF9IUEQ7CisJY29ubmVjdG9yLT5kcG1zID0gRFJNX01PREVfRFBNU19PRkY7CisKKwlyZXQg PSBkcm1fY29ubmVjdG9yX2luaXQoZHJtX2RldiwgY29ubmVjdG9yLAorCQkJCSAmY2RuX2RwX2F0 b21pY19jb25uZWN0b3JfZnVuY3MsCisJCQkJIERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9y dCk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIGNvbm5l Y3RvciB3aXRoIGRybVxuIik7CisJCWdvdG8gZXJyX2ZyZWVfZW5jb2RlcjsKKwl9CisKKwlkcm1f Y29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVjdG9yLCAmY2RuX2RwX2Nvbm5lY3Rvcl9oZWxwZXJf ZnVuY3MpOworCisJcmV0ID0gZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5l Y3RvciwgZW5jb2Rlcik7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhdHRh Y2ggY29ubmVjdG9yIGFuZCBlbmNvZGVyXG4iKTsKKwkJZ290byBlcnJfZnJlZV9jb25uZWN0b3I7 CisJfQorCisJYXVkaW9fcGRhdGEuZGV2ID0gZGV2LAorCWF1ZGlvX3BkYXRhLm9wcyA9ICZkcF9h dWRpb19vcHMsCisJYXVkaW9fcGRhdGEuZGF0YSA9IGRwOworCisJZHAtPmF1ZGlvX3BkZXYgPSBw bGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YSgKKwkJZGV2LCAiY2RuLWRwLWF1ZGlvIiwgUExB VEZPUk1fREVWSURfTk9ORSwKKwkJJmF1ZGlvX3BkYXRhLCBzaXplb2YoYXVkaW9fcGRhdGEpKTsK KworCWlmIChJU19FUlIoZHAtPmF1ZGlvX3BkZXYpKQorCQlyZXR1cm4gUFRSX0VSUihkcC0+YXVk aW9fcGRldik7CisKKwlkcC0+ZXZlbnRfbmIubm90aWZpZXJfY2FsbCA9IGNkbl9kcF9wZF9ldmVu dDsKKwlJTklUX0RFTEFZRURfV09SSygmZHAtPmV2ZW50X3dxLCBjZG5fZHBfcGRfZXZlbnRfd3Ep OworCXRjcGh5X3JlZ2lzdGVyX25vdGlmaWVyKHBoeSwgJmRwLT5ldmVudF9uYik7CisKKwlyZXR1 cm4gMDsKKworZXJyX2ZyZWVfY29ubmVjdG9yOgorCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25u ZWN0b3IpOworZXJyX2ZyZWVfZW5jb2RlcjoKKwlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIp OworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNkbl9kcF91bmJpbmQoc3RydWN0IGRl dmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0 IGNkbl9kcF9kZXZpY2UgKmRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyID0gJmRwLT5lbmNvZGVyOworCisJcGxhdGZvcm1fZGV2aWNlX3VucmVn aXN0ZXIoZHAtPmF1ZGlvX3BkZXYpOworCWNkbl9kcF9lbmNvZGVyX2Rpc2FibGUoZW5jb2Rlcik7 CisJZW5jb2Rlci0+ZnVuY3MtPmRlc3Ryb3koZW5jb2Rlcik7CisJZHJtX2Nvbm5lY3Rvcl91bnJl Z2lzdGVyKCZkcC0+Y29ubmVjdG9yKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoJmRwLT5jb25u ZWN0b3IpOworCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7CisJdGNwaHlfdW5yZWdpc3Rl cl9ub3RpZmllcihkcC0+cGh5LCAmZHAtPmV2ZW50X25iKTsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBjb21wb25lbnRfb3BzIGNkbl9kcF9jb21wb25lbnRfb3BzID0geworCS5iaW5kID0gY2Ru X2RwX2JpbmQsCisJLnVuYmluZCA9IGNkbl9kcF91bmJpbmQsCit9OworCitzdGF0aWMgaW50IGNk bl9kcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwOworCisJZHAg PSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcCkK KwkJcmV0dXJuIC1FTk9NRU07CisJZHAtPmRldiA9IGRldjsKKworCXBsYXRmb3JtX3NldF9kcnZk YXRhKHBkZXYsIGRwKTsKKworCXJldHVybiBjb21wb25lbnRfYWRkKGRldiwgJmNkbl9kcF9jb21w b25lbnRfb3BzKTsKK30KKworc3RhdGljIGludCBjZG5fZHBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpCit7CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmY2RuX2RwX2Nv bXBvbmVudF9vcHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2Zf ZGV2aWNlX2lkIGNkbl9kcF9kdF9pZHNbXSA9IHsKKwl7LmNvbXBhdGlibGUgPSAicm9ja2NoaXAs Y2RuLWRwIix9LAorCXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBjZG5fZHBfZHRf aWRzKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY2RuX2RwX2RyaXZlciA9IHsK KwkucHJvYmUgPSBjZG5fZHBfcHJvYmUsCisJLnJlbW92ZSA9IGNkbl9kcF9yZW1vdmUsCisJLmRy aXZlciA9IHsKKwkJICAgLm5hbWUgPSAiY2RuLWRwIiwKKwkJICAgLm93bmVyID0gVEhJU19NT0RV TEUsCisJCSAgIC5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihjZG5fZHBfZHRfaWRzKSwK Kwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihjZG5fZHBfZHJpdmVyKTsKKworTU9E VUxFX0FVVEhPUigiQ2hyaXMgWmhvbmcgPHp5d0Byb2NrLWNoaXBzLmNvbT4iKTsKK01PRFVMRV9E RVNDUklQVElPTigiY2RuIERQIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1jb3JlLmggYi9kcml2 ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi45OWMwMTIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL2Nkbi1kcC1jb3JlLmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdo dCAoQykgMjAxNiBDaHJpcyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29tPgorICogQ29weXJpZ2h0 IChDKSAyMDE2IFJPQ0tDSElQLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9m IHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBf Uk9DS0NISVBfRURQX0NPUkVfSAorI2RlZmluZSBfUk9DS0NISVBfRURQX0NPUkVfSAorCisjaW5j bHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9kcF9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+Cisj aW5jbHVkZSAicm9ja2NoaXBfZHJtX2Rydi5oIgorI2luY2x1ZGUgImNkbi1kcC1yZWcuaCIKKwor c3RydWN0IHZpZGVvX2luZm8geworCWJvb2wgaF9zeW5jX3BvbGFyaXR5OworCWJvb2wgdl9zeW5j X3BvbGFyaXR5OworCWJvb2wgaW50ZXJsYWNlZDsKKwlpbnQgY29sb3JfZGVwdGg7CisJZW51bSBW SUNfUFhMX0VOQ09ESU5HX0ZPUk1BVCBjb2xvcl9mbXQ7Cit9OworCitzdHJ1Y3QgY2RuX2Zpcm13 YXJlX2hlYWRlciB7CisJdTMyIHNpemVfYnl0ZXM7IC8qIHNpemUgb2YgdGhlIGVudGlyZSBoZWFk ZXIraW1hZ2UocykgaW4gYnl0ZXMgKi8KKwl1MzIgaGVhZGVyX3NpemU7IC8qIHNpemUgb2YganVz dCB0aGUgaGVhZGVyIGluIGJ5dGVzICovCisJdTMyIGlyYW1fc2l6ZTsgLyogc2l6ZSBvZiBpcmFt ICovCisJdTMyIGRyYW1fc2l6ZTsgLyogc2l6ZSBvZiBkcmFtICovCit9OworCitzdHJ1Y3QgY2Ru X2RwX2RldmljZSB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBkcm1fZGV2aWNlICpk cm1fZGV2OworCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2Vu Y29kZXIgZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBtb2RlOworCXN0cnVjdCBk ZWxheWVkX3dvcmsgaG90cGx1Z193b3JrOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF1ZGlv X3BkZXY7CisJYm9vbCBwbHVnZ2VkOworCisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsJLyog Y2RuIGRwIGZpcm13YXJlICovCisJdW5zaWduZWQgaW50IGZ3X3ZlcnNpb247CS8qIGNkbiBmdyB2 ZXJzaW9uICovCisJYm9vbCBmd19sb2FkZWQ7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXZvaWQg X19pb21lbSAqcGh5X3JlZ3M7CisJc3RydWN0IHJlZ21hcCAqZ3JmOworCXVuc2lnbmVkIGludCBp cnE7CisJc3RydWN0IGNsayAqY29yZV9jbGs7CisJc3RydWN0IGNsayAqcGNsazsKKwlzdHJ1Y3Qg Y2xrICpzcGRpZl9jbGs7CisJc3RydWN0IHZpZGVvX2luZm8gdmlkZW9faW5mbzsKKwlzdHJ1Y3Qg cGh5ICpwaHk7CisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrCWV2ZW50X25iOworCXN0cnVjdCBkZWxh eWVkX3dvcmsJZXZlbnRfd3E7CisKKwlpbnQgY2FwX2xhbmVzOworCWJvb2wgZmxpcDsKKworCWlu dCBkcG1zX21vZGU7CisJc3RydWN0IGRybV9kcF9saW5rIGxpbms7CisJYm9vbCBzaW5rX2hhc19h dWRpbzsKK307CisKK3ZvaWQgZHBfY2xvY2tfcmVzZXRfc2VxKHN0cnVjdCBjZG5fZHBfZGV2aWNl ICpkcCk7CisKK3ZvaWQgY2RuX2RwX3NldF9md19jbGsoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw LCBpbnQgY2xrKTsKK2ludCBjZG5fZHBfbG9hZF9maXJtd2FyZShzdHJ1Y3QgY2RuX2RwX2Rldmlj ZSAqZHAsIGNvbnN0IHUzMiAqaV9tZW0sCisJCQkgdTMyIGlfc2l6ZSwgY29uc3QgdTMyICpkX21l bSwgdTMyIGRfc2l6ZSk7CitpbnQgY2RuX2RwX2FjdGl2ZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAq ZHAsIHU4IGVuYWJsZSk7CitpbnQgY2RuX2RwX3NldF9ob3N0X2NhcChzdHJ1Y3QgY2RuX2RwX2Rl dmljZSAqZHApOworaW50IGNkbl9kcF9ldmVudF9jb25maWcoc3RydWN0IGNkbl9kcF9kZXZpY2Ug KmRwKTsKK2ludCBjZG5fZHBfZ2V0X2V2ZW50KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCk7Citp bnQgY2RuX2RwX2dldF9ocGRfc3RhdHVzKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCk7CitpbnQg Y2RuX2RwX2RwY2Rfd3JpdGUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1MzIgYWRkciwgdTgg dmFsdWUpOworaW50IGNkbl9kcF9kcGNkX3JlYWQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1 MzIgYWRkcik7CitpbnQgY2RuX2RwX2dldF9lZGlkX2Jsb2NrKHZvaWQgKmRwLCB1OCAqZWRpZCwK KwkJCSAgdW5zaWduZWQgaW50IGJsb2NrLCBzaXplX3QgbGVuZ3RoKTsKK2ludCBjZG5fZHBfdHJh aW5pbmdfc3RhcnQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKTsKK2ludCBjZG5fZHBfZ2V0X2x0 X3N0YXR1cyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApOworaW50IGNkbl9kcF9zZXRfdmlkZW9f c3RhdHVzKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgaW50IGFjdGl2ZSk7CitpbnQgY2RuX2Rw X2NvbmZpZ192aWRlbyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApOworaW50IGNkbl9kcF9hdWRp b19zdGFydCh2b2lkICpkcF9kZXYsIHN0cnVjdCBhdWRpb19pbmZvICphdWRpbyk7CitpbnQgY2Ru X2RwX2F1ZGlvX3N0b3Aodm9pZCAqZHBfZGV2LCBzdHJ1Y3QgYXVkaW9faW5mbyAqYXVkaW8pOwor aW50IGNkbl9kcF9hdWRpb19jb25maWdfc2V0KHZvaWQgKmRwX2Rldiwgc3RydWN0IGF1ZGlvX2lu Zm8gKmF1ZGlvKTsKKworI2VuZGlmICAvKiBfUk9DS0NISVBfRURQX0NPUkVfSCAqLwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1yZWcuYyBiL2RyaXZlcnMvZ3B1 L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uZDZjOWJjYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC9jZG4tZHAtcmVnLmMKQEAgLTAsMCArMSw3MzAgQEAKKy8qCisgKiBjZG4gZHAgY29udHJvbGxl ciByZWdpc3RlciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ2hyaXMgWmhvbmcg PHp5d0Byb2NrLWNoaXBzLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBST0NLQ0hJUCwgSW5j LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRl IDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxp bnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvcmVz ZXQuaD4KKworI2luY2x1ZGUgPHNvdW5kL2Nkbi1kcC1hdWRpby5oPgorCisjaW5jbHVkZSAiY2Ru LWRwLWNvcmUuaCIKKyNpbmNsdWRlICJjZG4tZHAtcmVnLmgiCisKKyNkZWZpbmUgRldfQUxJVkVf VElNRU9VVF9VUwkJMTAwMDAwMAorI2RlZmluZSBNQUlMQk9YX1RJTUVPVVRfVVMJCTUwMDAwMDAK KworLyogdGhlIG1heCBzaXplIG9mIHJlYWQgYnVmZiBpcyAxMzQgKi8KK3N0YXRpYyB1OCByeF9i dWZmWzEzNF07CisKK3ZvaWQgY2RuX2RwX3NldF9md19jbGsoc3RydWN0IGNkbl9kcF9kZXZpY2Ug KmRwLCBpbnQgY2xrKQoreworCXdyaXRlbChjbGsgLyAxMDAwMDAwLCBkcC0+cmVncyArIFNXX0NM S19IKTsKK30KKwordm9pZCBkcF9jbG9ja19yZXNldF9zZXEoc3RydWN0IGNkbl9kcF9kZXZpY2Ug KmRwKQoreworCXdyaXRlbCgweGZmZiwgZHAtPnJlZ3MgKyBTT1VSQ0VfRFBUWF9DQVIpOworCXdy aXRlbCgweDcsIGRwLT5yZWdzICsgU09VUkNFX1BIWV9DQVIpOworCXdyaXRlbCgweGYsIGRwLT5y ZWdzICsgU09VUkNFX1BLVF9DQVIpOworCXdyaXRlbCgweGZmLCBkcC0+cmVncyArIFNPVVJDRV9B SUZfQ0FSKTsKKwl3cml0ZWwoMHhmLCBkcC0+cmVncyArIFNPVVJDRV9DSVBIRVJfQ0FSKTsKKwl3 cml0ZWwoMHgzLCBkcC0+cmVncyArIFNPVVJDRV9DUllQVE9fQ0FSKTsKKwl3cml0ZWwoMCwgZHAt PnJlZ3MgKyBBUEJfSU5UX01BU0spOworfQorCitzdGF0aWMgdTggY2RuX2RwX21haWxib3hfcmVh ZChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJaW50IHZhbCwgcmV0OworCisJaWYgKCFk cC0+ZndfbG9hZGVkKQorCQlyZXR1cm4gMDsKKworCXJldCA9IHJlYWR4X3BvbGxfdGltZW91dChy ZWFkbCwgZHAtPnJlZ3MgKyBNQUlMQk9YX0VNUFRZX0FERFIsCisJCQkJIHZhbCwgIXZhbCwgMTAw MCwgTUFJTEJPWF9USU1FT1VUX1VTKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRwLT5k ZXYsICJmYWlsZWQgdG8gd2FpdCBtYWlsYm94IHJlc3BvbnNlXG4iKTsKKwkJcmV0dXJuIDA7CisJ fQorCisJcmV0dXJuIHJlYWRsKGRwLT5yZWdzICsgTUFJTEJPWDBfUkRfREFUQSkgJiAweGZmOwor fQorCitzdGF0aWMgdm9pZCBjZHBfZHBfbWFpbGJveF93cml0ZShzdHJ1Y3QgY2RuX2RwX2Rldmlj ZSAqZHAsIHU4IHZhbCkKK3sKKwlpbnQgcmV0LCBmdWxsOworCisJaWYgKCFkcC0+ZndfbG9hZGVk KQorCQlyZXR1cm47CisKKwlyZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQocmVhZGwsIGRwLT5yZWdz ICsgTUFJTEJPWF9GVUxMX0FERFIsCisJCQkJIGZ1bGwsICFmdWxsLCAxMDAwLCBNQUlMQk9YX1RJ TUVPVVRfVVMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHAtPmRldiwgIm1haWxib3gg aXMgZnVsbFxuIik7CisJCXJldHVybjsKKwl9CisKKwl3cml0ZWwodmFsLCBkcC0+cmVncyArIE1B SUxCT1gwX1dSX0RBVEEpOworfQorCisvKiByZXR1cm4gdGhlIHNpemUgb2YgbWVzc2FnZSAqLwor aW50IGNkbl9kcF9tYWlsYm94X3Jlc3BvbnNlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTgg bW9kdWxlX2lkLAorCQkJICAgIHU4IG9wY29kZSwgdTggKiptZXNzYWdlKQoreworCWludCBzaXpl LCBpID0gMDsKKworCW1lbXNldChyeF9idWZmLCAwLCA0KTsKKworCXdoaWxlIChpIDwgc2l6ZW9m KHJ4X2J1ZmYpKSB7CisJCWlmIChpIDwgc2l6ZW9mKHJ4X2J1ZmYpKQorCQkJcnhfYnVmZltpKytd ID0gY2RuX2RwX21haWxib3hfcmVhZChkcCk7CisKKwkJc2l6ZSA9ICgocnhfYnVmZlsyXSA8PCA4 KSB8IHJ4X2J1ZmZbM10pICsgNDsKKwkJaWYgKGkgPj0gc2l6ZSkKKwkJCWJyZWFrOworCX0KKwor CWlmICgob3Bjb2RlICE9IHJ4X2J1ZmZbMF0pIHx8IChtb2R1bGVfaWQgIT0gcnhfYnVmZlsxXSkp CisJCXJldHVybiAtRUlOVkFMOworCisJc2l6ZSA9IChyeF9idWZmWzJdIDw8IDgpIHwgcnhfYnVm ZlszXTsKKworCSptZXNzYWdlID0gJnJ4X2J1ZmZbNF07CisKKwlyZXR1cm4gc2l6ZTsKK30KKwor aW50IGNkbl9kcF9tYWlsYm94X3NlbmQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1OCBtb2R1 bGVfaWQsIHU4IG9wY29kZSwKKwkJCXUxNiBzaXplLCB1OCAqbWVzc2FnZSkKK3sKKwljZHBfZHBf bWFpbGJveF93cml0ZShkcCwgb3Bjb2RlKTsKKwljZHBfZHBfbWFpbGJveF93cml0ZShkcCwgbW9k dWxlX2lkKTsKKwljZHBfZHBfbWFpbGJveF93cml0ZShkcCwgc2l6ZSA+PiA4KTsKKwljZHBfZHBf bWFpbGJveF93cml0ZShkcCwgc2l6ZSAmIDB4ZmYpOworCisJd2hpbGUgKHNpemUtLSkKKwkJY2Rw X2RwX21haWxib3hfd3JpdGUoZHAsICptZXNzYWdlKyspOworCisJcmV0dXJuIDA7Cit9CisKK2lu dCBjZG5fZHBfbG9hZF9maXJtd2FyZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIGNvbnN0IHUz MiAqaV9tZW0sCisJCQkgdTMyIGlfc2l6ZSwgY29uc3QgdTMyICpkX21lbSwgdTMyIGRfc2l6ZSkK K3sKKwlpbnQgaSwgcmVnLCByZXQ7CisKKwkvKiByZXNldCB1Y3B1IGJlZm9yZSBsb2FkIGZpcm13 YXJlKi8KKwl3cml0ZWwoQVBCX0lSQU1fUEFUSCB8IEFQQl9EUkFNX1BBVEggfCBBUEJfWFRfUkVT RVQsCisJICAgICAgIGRwLT5yZWdzICsgQVBCX0NUUkwpOworCisJZm9yIChpID0gMDsgaSA8IGlf c2l6ZTsgaSArPSA0KQorCQl3cml0ZWwoKmlfbWVtKyssIGRwLT5yZWdzICsgQUREUl9JTUVNICsg aSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZF9zaXplOyBpICs9IDQpCisJCXdyaXRlbCgqZF9tZW0r KywgZHAtPnJlZ3MgKyBBRERSX0RNRU0gKyBpKTsKKworCS8qIHVuLXJlc2V0IHVjcHUgKi8KKwl3 cml0ZWwoMCwgZHAtPnJlZ3MgKyBBUEJfQ1RSTCk7CisKKwkvKiBjaGVjayB0aGUga2VlcCBhbGl2 ZSByZWdpc3RlciB0byBtYWtlIHN1cmUgZncgd29ya2luZyAqLworCXJldCA9IHJlYWR4X3BvbGxf dGltZW91dChyZWFkbCwgZHAtPnJlZ3MgKyBLRUVQX0FMSVZFLAorCQkJCSByZWcsIHJlZywgMjAw MCwgRldfQUxJVkVfVElNRU9VVF9VUyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkcC0+ ZGV2LCAiZmFpbGVkIHRvIGxvYWRlZCB0aGUgRlcgcmVnID0gJXhcbiIsIHJlZyk7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCXJlZyA9IHJlYWRsKGRwLT5yZWdzICsgVkVSX0wpICYgMHhmZjsK KwlkcC0+ZndfdmVyc2lvbiA9IHJlZzsKKwlyZWcgPSByZWFkbChkcC0+cmVncyArIFZFUl9IKSAm IDB4ZmY7CisJZHAtPmZ3X3ZlcnNpb24gfD0gcmVnIDw8IDg7CisJcmVnID0gcmVhZGwoZHAtPnJl Z3MgKyBWRVJfTElCX0xfQUREUikgJiAweGZmOworCWRwLT5md192ZXJzaW9uIHw9IHJlZyA8PCAx NjsKKwlyZWcgPSByZWFkbChkcC0+cmVncyArIFZFUl9MSUJfSF9BRERSKSAmIDB4ZmY7CisJZHAt PmZ3X3ZlcnNpb24gfD0gcmVnIDw8IDI0OworCisJZHAtPmZ3X2xvYWRlZCA9IDE7CisKKwlyZXR1 cm4gMDsKK30KKworaW50IGNkbl9kcF9yZWdfd3JpdGUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw LCB1MTYgYWRkciwgdTMyIHZhbCkKK3sKKwl1OCBtc2dbNl07CisKKwltc2dbMF0gPSAoYWRkciA+ PiA4KSAmIDB4ZmY7CisJbXNnWzFdID0gYWRkciAmIDB4ZmY7CisJbXNnWzJdID0gKHZhbCA+PiAy NCkgJiAweGZmOworCW1zZ1szXSA9ICh2YWwgPj4gMTYpICYgMHhmZjsKKwltc2dbNF0gPSAodmFs ID4+IDgpICYgMHhmZjsKKwltc2dbNV0gPSB2YWwgJiAweGZmOworCXJldHVybiBjZG5fZHBfbWFp bGJveF9zZW5kKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsIERQVFhfV1JJVEVfUkVHSVNURVIsCisJ CQkJICAgQVJSQVlfU0laRShtc2cpLCBtc2cpOworfQorCitpbnQgY2RuX2RwX3JlZ19yZWFkKHN0 cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTE2IGFkZHIpCit7CisJdTggbXNnWzJdLCAqcmVnID0g TlVMTDsKKwl1MTYgc2l6ZTsKKworCW1zZ1swXSA9IChhZGRyID4+IDgpICYgMHhmZjsKKwltc2db MV0gPSBhZGRyICYgMHhmZjsKKwljZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9NT0RVTEVfSURf RFBfVFgsIERQVFhfUkVBRF9SRUdJU1RFUiwKKwkJCSAgICBBUlJBWV9TSVpFKG1zZyksIG1zZyk7 CisKKwlzaXplID0gY2RuX2RwX21haWxib3hfcmVzcG9uc2UoZHAsIE1CX01PRFVMRV9JRF9EUF9U WCwKKwkJCQkgICAgICAgRFBUWF9SRUFEX1JFR0lTVEVSLCAmcmVnKTsKKwlpZiAoc2l6ZSAhPSA2 KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgobXNnWzBdID09IHJlZ1swXSkgJiYgKG1zZ1sx XSA9PSByZWdbMV0pKQorCQlyZXR1cm4gKHJlZ1syXSA8PCAyNCkgfCAocmVnWzNdIDw8IDE2KSB8 IChyZWdbNF0gPDwgOCkgfCByZWdbNV07CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworaW50IGNk bl9kcF9yZWdfd3JpdGVfYml0KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTE2IGFkZHIsIHU4 IHN0YXJ0X2JpdCwKKwkJCSB1OCBiaXRzX25vLCB1MzIgdmFsKQoreworCXU4IGZpZWxkWzhdOwor CisJZmllbGRbMF0gPSAoYWRkciA+PiA4KSAmIDB4ZmY7CisJZmllbGRbMV0gPSBhZGRyICYgMHhm ZjsKKwlmaWVsZFsyXSA9IHN0YXJ0X2JpdDsKKwlmaWVsZFszXSA9IGJpdHNfbm87CisJZmllbGRb NF0gPSAodmFsID4+IDI0KSAmIDB4ZmY7CisJZmllbGRbNV0gPSAodmFsID4+IDE2KSAmIDB4ZmY7 CisJZmllbGRbNl0gPSAodmFsID4+IDgpICYgMHhmZjsKKwlmaWVsZFs3XSA9IHZhbCAmIDB4ZmY7 CisKKwlyZXR1cm4gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBE UFRYX1dSSVRFX0ZJRUxELAorCQkJICAgIHNpemVvZihmaWVsZCksIGZpZWxkKTsKK30KKworaW50 IGNkbl9kcF9kcGNkX3dyaXRlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTMyIGFkZHIsIHU4 IHZhbHVlKQoreworCXU4IG1zZ1s2XSwgKnJlZyA9IE5VTEw7CisJdTE2IHNpemU7CisKKwltc2db MF0gPSAwOworCW1zZ1sxXSA9IDE7CisJbXNnWzJdID0gKGFkZHIgPj4gMTYpICYgMHhmZjsKKwlt c2dbM10gPSAoYWRkciA+PiA4KSAmIDB4ZmY7CisJbXNnWzRdID0gYWRkciAmIDB4ZmY7CisJbXNn WzVdID0gdmFsdWU7CisJY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RY LCBEUFRYX1dSSVRFX0RQQ0QsCisJCQkgICAgQVJSQVlfU0laRShtc2cpLCBtc2cpOworCisJc2l6 ZSA9IGNkbl9kcF9tYWlsYm94X3Jlc3BvbnNlKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsCisJCQkJ ICAgICAgIERQVFhfV1JJVEVfRFBDRCwgJnJlZyk7CisJaWYgKHNpemUgIT0gNSkKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwlpZiAoKG1zZ1syXSA9PSByZWdbMl0pICYmIChtc2dbM10gPT0gcmVnWzNd KSAmJiAobXNnWzRdID09IHJlZ1s0XSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIC1FSU5WQUw7 Cit9CisKK2ludCBjZG5fZHBfZHBjZF9yZWFkKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTMy IGFkZHIpCit7CisJdTggbXNnWzVdLCAqcmVnID0gTlVMTDsKKwl1MTYgc2l6ZTsKKworCW1zZ1sw XSA9IDA7CisJbXNnWzFdID0gMTsKKwltc2dbMl0gPSAoYWRkciA+PiAxNikgJiAweGZmOworCW1z Z1szXSA9IChhZGRyID4+IDgpICYgMHhmZjsKKwltc2dbNF0gPSBhZGRyICYgMHhmZjsKKwljZG5f ZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsIERQVFhfUkVBRF9EUENELAor CQkJICAgIEFSUkFZX1NJWkUobXNnKSwgbXNnKTsKKworCXNpemUgPSBjZG5fZHBfbWFpbGJveF9y ZXNwb25zZShkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLAorCQkJCSAgICAgICBEUFRYX1JFQURfRFBD RCwgJnJlZyk7CisJaWYgKHNpemUgIT0gNikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKG1z Z1syXSA9PSByZWdbMl0pICYmIChtc2dbM10gPT0gcmVnWzNdKSAmJiAobXNnWzRdID09IHJlZ1s0 XSkpCisJCXJldHVybiByZWdbNV07CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworaW50IGNkbl9k cF9hY3RpdmUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1OCBlbmFibGUpCit7CisJdTggYWN0 aXZlID0gZW5hYmxlID8gMSA6IDA7CisJdTggKnJlc3AgPSBOVUxMOworCWludCBzaXplOworCisJ Lyogc2V0IGZpcm13YXJlIHN0YXR1cywgMTogYXZ0aXZlOyAwOiBzdGFuZGJ5ICovCisJY2RuX2Rw X21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0dFTkVSQUwsIEdFTkVSQUxfTUFJTl9DT05U Uk9MLAorCQkJICAgIDEsICZhY3RpdmUpOworCisJc2l6ZSA9IGNkbl9kcF9tYWlsYm94X3Jlc3Bv bnNlKGRwLCBNQl9NT0RVTEVfSURfR0VORVJBTCwKKwkJCQkgICAgICAgR0VORVJBTF9NQUlOX0NP TlRST0wsICZyZXNwKTsKKwlpZiAoc2l6ZSAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJl dHVybiAqcmVzcCA/IDAgOiAtRUlOVkFMOworfQorCitpbnQgY2RuX2RwX3NldF9ob3N0X2NhcChz dHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJdTggbXNnWzhdOworCisJbXNnWzBdID0gRFBf TElOS19CV181XzQ7CisJbXNnWzFdID0gZHAtPmNhcF9sYW5lczsKKwltc2dbMl0gPSBWT0xUQUdF X0xFVkVMXzI7CisJbXNnWzNdID0gUFJFX0VNUEhBU0lTX0xFVkVMXzM7CisJbXNnWzRdID0gUFJC UzcgfCBEMTBfMiB8IFRSQUlOSU5HX1BUTjEgfCBUUkFJTklOR19QVE4yOworCW1zZ1s1XSA9IEZB U1RfTFRfTk9UX1NVUFBPUlQ7CisJbXNnWzZdID0gTEFORV9NQVBQSU5HX05PUk1BTDsKKwltc2db N10gPSBFTkhBTkNFRDsKKworCWNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9E UF9UWCwKKwkJCSAgICBEUFRYX1NFVF9IT1NUX0NBUEFCSUxJVElFUywKKwkJCSAgICBBUlJBWV9T SVpFKG1zZyksIG1zZyk7CisKKwljZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9BVVhfU1dBUF9JTlZF UlNJT05fQ09OVFJPTCwgQVVYX0hPU1RfSU5WRVJUKTsKKworCXJldHVybiAwOworfQorCitpbnQg Y2RuX2RwX2V2ZW50X2NvbmZpZyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJdTggbXNn WzVdOworCisJbXNnWzBdID0gRFBUWF9FVkVOVF9FTkFCTEVfSFBEIHwgRFBUWF9FVkVOVF9FTkFC TEVfVFJBSU5JTkc7CisKKwlyZXR1cm4gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxF X0lEX0RQX1RYLCBEUFRYX0VOQUJMRV9FVkVOVCwKKwkJCQkgICAgQVJSQVlfU0laRShtc2cpLCBt c2cpOworfQorCitpbnQgY2RuX2RwX2dldF9ldmVudChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAp Cit7CisJcmV0dXJuIHJlYWRsKGRwLT5yZWdzICsgU1dfRVZFTlRTMCk7Cit9CisKK2ludCBjZG5f ZHBfZ2V0X2hwZF9zdGF0dXMoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXU4ICpzdGF0 dXMgPSBOVUxMOworCWludCBzaXplOworCisJY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9E VUxFX0lEX0RQX1RYLCBEUFRYX0hQRF9TVEFURSwKKwkJCSAgICAwLCBOVUxMKTsKKworCXNpemUg PSBjZG5fZHBfbWFpbGJveF9yZXNwb25zZShkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLAorCQkJCSAg ICAgICBEUFRYX0hQRF9TVEFURSwgJnN0YXR1cyk7CisJaWYgKHNpemUgIT0gMSkKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwlyZXR1cm4gKnN0YXR1czsKK30KKworaW50IGNkbl9kcF9nZXRfZWRpZF9i bG9jayh2b2lkICpkYXRhLCB1OCAqZWRpZCwKKwkJCSAgdW5zaWduZWQgaW50IGJsb2NrLCBzaXpl X3QgbGVuZ3RoKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGRhdGE7CisJaW50IHNp emU7CisJdTggbXNnWzJdLCAqcmVnID0gTlVMTDsKKworCWlmIChsZW5ndGggIT0gRURJRF9CTE9D S19TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1zZ1swXSA9IGJsb2NrIC8gMjsKKwltc2db MV0gPSBibG9jayAlIDI7CisKKwljZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9NT0RVTEVfSURf RFBfVFgsIERQVFhfR0VUX0VESUQsCisJCQkgICAgMiwgbXNnKTsKKworCXNpemUgPSBjZG5fZHBf bWFpbGJveF9yZXNwb25zZShkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLAorCQkJCSAgICAgICBEUFRY X0dFVF9FRElELCAmcmVnKTsKKworCWlmIChzaXplICE9IEVESURfREFUQSArIEVESURfQkxPQ0tf U0laRSkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJyZWFkIGVkaWQgZmFpbGVkXG4iKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKChyZWdbRURJRF9MRU5HVEhfQllURV0gIT0gRURJRF9C TE9DS19TSVpFKSB8fAorCSAgICAocmVnW0VESURfU0VHTUVOVF9CVU1CRVJdICE9IGJsb2NrIC8g MikpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiZWRpZCBibG9jayBzaXplIGVyclxuIik7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKworCW1lbWNweShlZGlkLCAmcmVnW0VESURfREFUQV0sIEVESURf QkxPQ0tfU0laRSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNkbl9kcF90cmFpbmluZ19zdGFy dChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJaW50IHNpemU7CisJdTggbXNnLCAqZXZl bnQgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKworCW1zZyA9IExJTktfVFJBSU5J TkdfUlVOOworCisJLyogc3RhcnQgdHJhaW5pbmcgKi8KKwljZG5fZHBfbWFpbGJveF9zZW5kKGRw LCBNQl9NT0RVTEVfSURfRFBfVFgsIERQVFhfVFJBSU5JTkdfQ09OVFJPTCwKKwkJCSAgICAxLCAm bXNnKTsKKworCS8qIHRoZSB3aG9sZSB0cmFpbmluZyBzaG91bGQgZmluaXNoIGluIDUwMG1zICov CisJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwMCk7CisJd2hpbGUgKDEp IHsKKwkJbXNsZWVwKDIwKTsKKwkJY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lE X0RQX1RYLCBEUFRYX1JFQURfRVZFTlQsCisJCQkJICAgIDAsIE5VTEwpOworCisJCXNpemUgPSBj ZG5fZHBfbWFpbGJveF9yZXNwb25zZShkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLAorCQkJCQkgICAg ICAgRFBUWF9SRUFEX0VWRU5ULCAmZXZlbnQpOworCQlpZiAoc2l6ZSAhPSAyKQorCQkJcmV0dXJu IC1FSU5WQUw7CisKKwkJaWYgKGV2ZW50WzFdICYgRVFfUEhBU0VfRklOSVNIRUQpCisJCQlicmVh azsKKworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJCXJldHVybiAtRVRJ TUVET1VUOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgY2RuX2RwX2dldF9sdF9zdGF0dXMo c3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXU4ICpzdGF0dXMgPSBOVUxMOworCWludCBz aXplOworCisJY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRY X1JFQURfTElOS19TVEFULAorCQkJICAgIDAsIE5VTEwpOworCisJc2l6ZSA9IGNkbl9kcF9tYWls Ym94X3Jlc3BvbnNlKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsCisJCQkJICAgICAgIERQVFhfUkVB RF9MSU5LX1NUQVQsICZzdGF0dXMpOworCisJaWYgKHNpemUgIT0gMTApCisJCXJldHVybiAtRUlO VkFMOworCisJZHAtPmxpbmsucmF0ZSA9IHN0YXR1c1swXTsKKwlkcC0+bGluay5udW1fbGFuZXMg PSBzdGF0dXNbMV07CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNkbl9kcF9zZXRfdmlkZW9fc3Rh dHVzKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgaW50IGFjdGl2ZSkKK3sKKwl1OCBtc2c7CisK Kwltc2cgPSAhIWFjdGl2ZTsKKworCWNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9J RF9EUF9UWCwgRFBUWF9TRVRfVklERU8sCisJCQkgICAgMSwgJm1zZyk7CisKKwlyZXR1cm4gMDsK K30KKworaW50IGNkbl9kcF9zZXRfYXVkaW9fc3RhdHVzKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpk cCwgaW50IGFjdGl2ZSkKK3sKKwl1OCBtc2c7CisKKwltc2cgPSAhIWFjdGl2ZTsKKworCWNkbl9k cF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwgRFBUWF9TRVRfQVVESU8sCisJ CQkgICAgMSwgJm1zZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZG5fZHBfZ2V0 X21zYV9taXNjKHN0cnVjdCB2aWRlb19pbmZvICp2aWRlbywKKwkJCSAgICAgICBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwl1OCB2YWwwLCB2YWwxOworCXUzMiBtc2FfbWlzYzsK KworCXN3aXRjaCAodmlkZW8tPmNvbG9yX2ZtdCkgeworCWNhc2UgUFhMX1JHQjoKKwljYXNlIFlf T05MWToKKwkJdmFsMCA9IDA7CisJCWJyZWFrOworCWNhc2UgWUNCQ1JfNF80XzQ6CisJCXZhbDAg PSA2OworCQlicmVhazsKKwljYXNlIFlDQkNSXzRfMl8yOgorCQl2YWwwID0gNTsKKwkJYnJlYWs7 CisJY2FzZSBZQ0JDUl80XzJfMDoKKwkJdmFsMCA9IDU7CisJCWJyZWFrOworCX07CisKKwlzd2l0 Y2ggKHZpZGVvLT5jb2xvcl9kZXB0aCkgeworCWNhc2UgNjoKKwkJdmFsMSA9IDA7CisJCWJyZWFr OworCWNhc2UgODoKKwkJdmFsMSA9IDE7CisJCWJyZWFrOworCWNhc2UgMTA6CisJCXZhbDEgPSAy OworCQlicmVhazsKKwljYXNlIDEyOgorCQl2YWwxID0gMzsKKwkJYnJlYWs7CisJY2FzZSAxNjoK KwkJdmFsMSA9IDQ7CisJCWJyZWFrOworCX07CisKKwltc2FfbWlzYyA9IDIgKiB2YWwwICsgMzIg KiB2YWwxICsKKwkJICAgKCh2aWRlby0+Y29sb3JfZm10ID09IFlfT05MWSkgPyAoMSA8PCAxNCkg OiAwKTsKKworCXJldHVybiBtc2FfbWlzYzsKK30KKworaW50IGNkbl9kcF9jb25maWdfdmlkZW8o c3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXN0cnVjdCB2aWRlb19pbmZvICp2aWRlbyA9 ICZkcC0+dmlkZW9faW5mbzsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZkcC0+ bW9kZTsKKwl1MzIgdmFsLCBsaW5rX3JhdGU7CisJdTggYml0X3Blcl9waXg7CisKKwliaXRfcGVy X3BpeCA9ICh2aWRlby0+Y29sb3JfZm10ID09IFlDQkNSXzRfMl8yKSA/CisJCSAgICAgICh2aWRl by0+Y29sb3JfZGVwdGggKiAyKSA6ICh2aWRlby0+Y29sb3JfZGVwdGggKiAzKTsKKworCXZhbCA9 IFZJRl9CWVBBU1NfSU5URVJMQUNFOworCisJY2RuX2RwX3JlZ193cml0ZShkcCwgQk5EX0hTWU5D MlZTWU5DLCB2YWwpOworCisJY2RuX2RwX3JlZ193cml0ZShkcCwgSFNZTkMyVlNZTkNfUE9MX0NU UkwsIDApOworCisJbGlua19yYXRlID0gZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKGRwLT5s aW5rLnJhdGUpIC8gMTAwMDsKKworCXZhbCA9IFRVX1NJWkUgKiBtb2RlLT5jbG9jayAqIGJpdF9w ZXJfcGl4OworCXZhbCAvPSBkcC0+bGluay5udW1fbGFuZXMgKiBsaW5rX3JhdGUgKiA4ICogMTAw MDsKKwkvKiBGSVhNRTogbmVlZCBhZGQgMSB0byBzeW1ib2xzIDRLIGRpc3BsYXkgKi8KKwlpZiAo bW9kZS0+Y2xvY2sgPiA1MDAwMDApCisJCXZhbCArPSAxOworCisJdmFsICs9IFRVX1NJWkUgPDwg ODsKKworCWNkbl9kcF9yZWdfd3JpdGUoZHAsIERQX0ZSQU1FUl9UVSwgdmFsKTsKKworCXN3aXRj aCAodmlkZW8tPmNvbG9yX2RlcHRoKSB7CisJY2FzZSA2OgorCQl2YWwgPSBCQ1NfNjsKKwkJYnJl YWs7CisJY2FzZSA4OgorCQl2YWwgPSBCQ1NfODsKKwkJYnJlYWs7CisJY2FzZSAxMDoKKwkJdmFs ID0gQkNTXzEwOworCQlicmVhazsKKwljYXNlIDEyOgorCQl2YWwgPSBCQ1NfMTI7CisJCWJyZWFr OworCWNhc2UgMTY6CisJCXZhbCA9IEJDU18xNjsKKwkJYnJlYWs7CisJfTsKKworCXZhbCArPSB2 aWRlby0+Y29sb3JfZm10IDw8IDg7CisJY2RuX2RwX3JlZ193cml0ZShkcCwgRFBfRlJBTUVSX1BY TF9SRVBSLCB2YWwpOworCisJdmFsID0gdmlkZW8tPmhfc3luY19wb2xhcml0eSA/IERQX0ZSQU1F Ul9TUF9IU1AgOiAwOworCXZhbCB8PSB2aWRlby0+dl9zeW5jX3BvbGFyaXR5ID8gRFBfRlJBTUVS X1NQX1ZTUCA6IDA7CisJY2RuX2RwX3JlZ193cml0ZShkcCwgRFBfRlJBTUVSX1NQLCB2YWwpOwor CisJdmFsID0gKG1vZGUtPmhzeW5jX3N0YXJ0IC0gbW9kZS0+aGRpc3BsYXkpIDw8IDE2OworCXZh bCB8PSBtb2RlLT5odG90YWwgLSBtb2RlLT5oc3luY19lbmQ7CisJY2RuX2RwX3JlZ193cml0ZShk cCwgRFBfRlJPTlRfQkFDS19QT1JDSCwgdmFsKTsKKworCXZhbCA9IG1vZGUtPmhkaXNwbGF5ICog Yml0X3Blcl9waXggLyA4OworCWNkbl9kcF9yZWdfd3JpdGUoZHAsIERQX0JZVEVfQ09VTlQsIHZh bCk7CisKKwl2YWwgPSBtb2RlLT5odG90YWwgfCAoKG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5j X3N0YXJ0KSA8PCAxNik7CisJY2RuX2RwX3JlZ193cml0ZShkcCwgTVNBX0hPUklaT05UQUxfMCwg dmFsKTsKKworCXZhbCA9IG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0OworCXZh bCB8PSAobW9kZS0+aGRpc3BsYXkgPDwgMTYpIHwgKHZpZGVvLT5oX3N5bmNfcG9sYXJpdHkgPDwg MTUpOworCWNkbl9kcF9yZWdfd3JpdGUoZHAsIE1TQV9IT1JJWk9OVEFMXzEsIHZhbCk7CisKKwl2 YWwgPSBtb2RlLT52dG90YWw7CisJdmFsIHw9ICgobW9kZS0+dnRvdGFsIC0gbW9kZS0+dnN5bmNf c3RhcnQpIDw8IDE2KTsKKworCWNkbl9kcF9yZWdfd3JpdGUoZHAsIE1TQV9WRVJUSUNBTF8wLCB2 YWwpOworCisJdmFsID0gbW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQ7CisJdmFs IHw9IG1vZGUtPnZkaXNwbGF5IDw8IDE2OworCXZhbCB8PSAodmlkZW8tPnZfc3luY19wb2xhcml0 eSA8PCAxNSk7CisJY2RuX2RwX3JlZ193cml0ZShkcCwgTVNBX1ZFUlRJQ0FMXzEsIHZhbCk7CisK Kwl2YWwgPSBjZG5fZHBfZ2V0X21zYV9taXNjKHZpZGVvLCBtb2RlKTsKKwljZG5fZHBfcmVnX3dy aXRlKGRwLCBNU0FfTUlTQywgdmFsKTsKKworCWNkbl9kcF9yZWdfd3JpdGUoZHAsIFNUUkVBTV9D T05GSUcsIDEpOworCisJdmFsID0gbW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7 CisJdmFsIHw9IChtb2RlLT5oZGlzcGxheSA8PCAxNik7CisJY2RuX2RwX3JlZ193cml0ZShkcCwg RFBfSE9SSVpPTlRBTCwgdmFsKTsKKworCXZhbCA9IG1vZGUtPnZ0b3RhbDsKKwl2YWwgLT0gKG1v ZGUtPnZ0b3RhbCAtIG1vZGUtPnZkaXNwbGF5KTsKKwl2YWwgfD0gKG1vZGUtPnZ0b3RhbCAtIG1v ZGUtPnZzeW5jX3N0YXJ0KSA8PCAxNjsKKworCWNkbl9kcF9yZWdfd3JpdGUoZHAsIERQX1ZFUlRJ Q0FMXzAsIHZhbCk7CisKKwl2YWwgPSBtb2RlLT52dG90YWw7CisJY2RuX2RwX3JlZ193cml0ZShk cCwgRFBfVkVSVElDQUxfMSwgdmFsKTsKKworCXZhbCA9ICAwOworCWNkbl9kcF9yZWdfd3JpdGVf Yml0KGRwLCBEUF9WQl9JRCwgMiwgMSwgdmFsKTsKKworCXJldHVybiAwOworfQorCitpbnQgY2Ru X2RwX2F1ZGlvX3N0YXJ0KHZvaWQgKmRwX2Rldiwgc3RydWN0IGF1ZGlvX2luZm8gKmF1ZGlvKQor eworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqKWRw X2RldjsKKworCWlmIChhdWRpby0+dHlwZSA9PSBUWVBFX1NQRElGKSB7CisJCWNsa19wcmVwYXJl X2VuYWJsZShkcC0+c3BkaWZfY2xrKTsKKwkJY2xrX3NldF9yYXRlKGRwLT5zcGRpZl9jbGssIDQw MDAwMDAwMCk7CisJfQorCisJcmV0dXJuIGNkbl9kcF9yZWdfd3JpdGUoZHAsIEFVRElPX1BBQ0tf Q09OVFJPTCwgQVVESU9fUEFDS19FTigxKSk7Cit9CisKK2ludCBjZG5fZHBfYXVkaW9fc3RvcCh2 b2lkICpkcF9kZXYsIHN0cnVjdCBhdWRpb19pbmZvICphdWRpbykKK3sKKwlzdHJ1Y3QgY2RuX2Rw X2RldmljZSAqZHAgPSAoc3RydWN0IGNkbl9kcF9kZXZpY2UgKilkcF9kZXY7CisKKwljZG5fZHBf cmVnX3dyaXRlKGRwLCBBVURJT19QQUNLX0NPTlRST0wsIEFVRElPX1BBQ0tfRU4oMCkpOworCisJ aWYgKGF1ZGlvLT50eXBlID09IFRZUEVfU1BESUYpCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShk cC0+c3BkaWZfY2xrKTsKKworCXJldHVybiAwOworfQorCitpbnQgY2RuX2RwX2F1ZGlvX2NvbmZp Z19zZXQodm9pZCAqZHBfZGV2LCBzdHJ1Y3QgYXVkaW9faW5mbyAqYXVkaW8pCit7CisJc3RydWN0 IGNkbl9kcF9kZXZpY2UgKmRwID0gKHN0cnVjdCBjZG5fZHBfZGV2aWNlICopZHBfZGV2OworCWlu dCBsYW5lc19wYXJhbSwgaTJzX3BvcnRfZW5fdmFsLCB2YWwsIGk7CisKKwlpZiAoKGF1ZGlvLT5j aGFubmVscyA9PSAyKSAmJiAoZHAtPmxpbmsubnVtX2xhbmVzID09IDEpKQorCQlsYW5lc19wYXJh bSA9IDE7CisJZWxzZSBpZiAoYXVkaW8tPmNoYW5uZWxzID09IDIpCisJCWxhbmVzX3BhcmFtID0g MzsKKwllbHNlCisJCWxhbmVzX3BhcmFtID0gMDsKKworCWlmIChhdWRpby0+Y2hhbm5lbHMgPT0g MikKKwkJaTJzX3BvcnRfZW5fdmFsID0gMTsKKwllbHNlIGlmIChhdWRpby0+Y2hhbm5lbHMgPT0g NCkKKwkJaTJzX3BvcnRfZW5fdmFsID0gMzsKKwllbHNlCisJCWkyc19wb3J0X2VuX3ZhbCA9IDB4 ZjsKKworCWNkbl9kcF9yZWdfd3JpdGUoZHAsIENNX0xBTkVfQ1RSTCwgMHg4MDAwKTsKKworCWNk bl9kcF9yZWdfd3JpdGUoZHAsIENNX0NUUkwsIDApOworCisJaWYgKGF1ZGlvLT50eXBlID09IFRZ UEVfSTJTKSB7CisJCXdyaXRlbCgweDAsIGRwLT5yZWdzICsgU1BESUZfQ1RSTF9BRERSKTsKKwor CQl3cml0ZWwoU1lOQ19XUl9UT19DSF9aRVJPLCBkcC0+cmVncyArIEZJRk9fQ05UTCk7CisKKwkJ dmFsID0gYXVkaW8tPmNoYW5uZWxzIC0gMTsKKwkJdmFsIHw9IChhdWRpby0+Y2hhbm5lbHMgLyAy IC0gMSkgPDwgNTsKKwkJdmFsIHw9IEJJVCg4KTsKKwkJdmFsIHw9IGxhbmVzX3BhcmFtIDw8IDEx OworCQl3cml0ZWwodmFsLCBkcC0+cmVncyArIFNNUEwyUEtUX0NORkcpOworCisJCWlmIChhdWRp by0+d29yZF9sZW5ndGggPT0gMTYpCisJCQl2YWwgPSAwOworCQllbHNlIGlmIChhdWRpby0+d29y ZF9sZW5ndGggPT0gMjQpCisJCQl2YWwgPSAxIDw8IDk7CisJCWVsc2UKKwkJCXZhbCA9IDIgPDwg OTsKKworCQl2YWwgfD0gKGF1ZGlvLT5jaGFubmVscyAtIDEpIDw8IDI7CisJCXZhbCB8PSBpMnNf cG9ydF9lbl92YWwgPDwgMTc7CisJCXZhbCB8PSAyIDw8IDExOworCQl3cml0ZWwodmFsLCBkcC0+ cmVncyArIEFVRElPX1NSQ19DTkZHKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgKGF1ZGlvLT5jaGFu bmVscyArIDEpIC8gMjsgaSsrKSB7CisJCQlpZiAoYXVkaW8tPndvcmRfbGVuZ3RoID09IDE2KQor CQkJCXZhbCA9ICgweDA4IDw8IDgpIHwgKDB4MDggPDwgMjApOworCQkJZWxzZSBpZiAoYXVkaW8t PndvcmRfbGVuZ3RoID09IDI0KQorCQkJCXZhbCA9ICgweDBiIDw8IDgpIHwgKDB4MGIgPDwgMjAp OworCisJCQl2YWwgfD0gKCgyICogaSkgPDwgNCkgfCAoKDIgKiBpICsgMSkgPDwgMTYpOworCQkJ d3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTVFRTX0JJVF9DSChpKSk7CisJCX0KKworCQlzd2l0Y2gg KGF1ZGlvLT5mcmVxKSB7CisJCWNhc2UgMzIwMDA6CisJCQl2YWwgPSBTQU1QTElOR19GUkVRKDMp IHwKKwkJCSAgICAgIE9SSUdJTkFMX1NBTVBfRlJFUSgweGMpOworCQkJYnJlYWs7CisJCWNhc2Ug NDQxMDA6CisJCQl2YWwgPSBTQU1QTElOR19GUkVRKDApIHwKKwkJCSAgICAgIE9SSUdJTkFMX1NB TVBfRlJFUSgweGYpOworCQkJYnJlYWs7CisJCWNhc2UgNDgwMDA6CisJCQl2YWwgPSBTQU1QTElO R19GUkVRKDIpIHwKKwkJCSAgICAgIE9SSUdJTkFMX1NBTVBfRlJFUSgweGQpOworCQkJYnJlYWs7 CisJCWNhc2UgODgyMDA6CisJCQl2YWwgPSBTQU1QTElOR19GUkVRKDgpIHwKKwkJCSAgICAgIE9S SUdJTkFMX1NBTVBfRlJFUSgweDcpOworCQkJYnJlYWs7CisJCWNhc2UgOTYwMDA6CisJCQl2YWwg PSBTQU1QTElOR19GUkVRKDB4YSkgfAorCQkJICAgICAgT1JJR0lOQUxfU0FNUF9GUkVRKDUpOwor CQkJYnJlYWs7CisJCWNhc2UgMTc2NDAwOgorCQkJdmFsID0gU0FNUExJTkdfRlJFUSgweGMpIHwK KwkJCSAgICAgIE9SSUdJTkFMX1NBTVBfRlJFUSgzKTsKKwkJCWJyZWFrOworCQljYXNlIDE5MjAw MDoKKwkJCXZhbCA9IFNBTVBMSU5HX0ZSRVEoMHhlKSB8CisJCQkgICAgICBPUklHSU5BTF9TQU1Q X0ZSRVEoMSk7CisJCQlicmVhazsKKwkJfQorCQl2YWwgfD0gNDsKKwkJd3JpdGVsKHZhbCwgZHAt PnJlZ3MgKyBDT01fQ0hfU1RUU19CSVRTKTsKKworCQl3cml0ZWwoMiwgZHAtPnJlZ3MgKyBTTVBM MlBLVF9DTlRMKTsKKwkJd3JpdGVsKDIsIGRwLT5yZWdzICsgQVVESU9fU1JDX0NOVEwpOworCQlj ZG5fZHBfcmVnX3dyaXRlX2JpdChkcCwgRFBfVkJfSUQsIDQsIDEsIDApOworCX0gZWxzZSB7CisJ CXZhbCA9IDB4MUYwNzA3OworCQl3cml0ZWwodmFsLCBkcC0+cmVncyArIFNQRElGX0NUUkxfQURE Uik7CisKKwkJd3JpdGVsKFNZTkNfV1JfVE9fQ0hfWkVSTywgZHAtPnJlZ3MgKyBGSUZPX0NOVEwp OworCisJCXZhbCA9IDB4MTAxIHwgKDMgPDwgMTEpOworCQl3cml0ZWwodmFsLCBkcC0+cmVncyAr IFNNUEwyUEtUX0NORkcpOworCQl3cml0ZWwoMiwgZHAtPnJlZ3MgKyBTTVBMMlBLVF9DTlRMKTsK KworCQl2YWwgPSAweDNGMDcwNzsKKwkJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTUERJRl9DVFJM X0FERFIpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL2Nkbi1kcC1yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAt cmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRmYzdmOQotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmgKQEAgLTAs MCArMSw0MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ2hyaXMgWmhvbmcgPHp5d0By b2NrLWNoaXBzLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBST0NLQ0hJUCwgSW5jLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0NETl9EUF9SRUdfSAorI2RlZmluZSBfQ0ROX0RQ X1JFR19ICisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworI2RlZmluZSBBRERSX0lNRU0J CTB4MTAwMDAKKyNkZWZpbmUgQUREUl9ETUVNCQkweDIwMDAwCisKKy8qIEFQQiBDRkcgYWRkciAq LworI2RlZmluZSBBUEJfQ1RSTAkJCTAKKyNkZWZpbmUgWFRfSU5UX0NUUkwJCQkweDA0CisjZGVm aW5lIE1BSUxCT1hfRlVMTF9BRERSCQkweDA4CisjZGVmaW5lIE1BSUxCT1hfRU1QVFlfQUREUgkJ MHgwYworI2RlZmluZSBNQUlMQk9YMF9XUl9EQVRBCQkweDEwCisjZGVmaW5lIE1BSUxCT1gwX1JE X0RBVEEJCTB4MTQKKyNkZWZpbmUgS0VFUF9BTElWRQkJCTB4MTgKKyNkZWZpbmUgVkVSX0wJCQkJ MHgxYworI2RlZmluZSBWRVJfSAkJCQkweDIwCisjZGVmaW5lIFZFUl9MSUJfTF9BRERSCQkJMHgy NAorI2RlZmluZSBWRVJfTElCX0hfQUREUgkJCTB4MjgKKyNkZWZpbmUgU1dfREVCVUdfTAkJCTB4 MmMKKyNkZWZpbmUgU1dfREVCVUdfSAkJCTB4MzAKKyNkZWZpbmUgTUFJTEJPWF9JTlRfTUFTSwkJ MHgzNAorI2RlZmluZSBNQUlMQk9YX0lOVF9TVEFUVVMJCTB4MzgKKyNkZWZpbmUgU1dfQ0xLX0wJ CQkweDNjCisjZGVmaW5lIFNXX0NMS19ICQkJMHg0MAorI2RlZmluZSBTV19FVkVOVFMwCQkJMHg0 NAorI2RlZmluZSBTV19FVkVOVFMxCQkJMHg0OAorI2RlZmluZSBTV19FVkVOVFMyCQkJMHg0Ywor I2RlZmluZSBTV19FVkVOVFMzCQkJMHg1MAorI2RlZmluZSBYVF9PQ0RfQ1RSTAkJCTB4NjAKKyNk ZWZpbmUgQVBCX0lOVF9NQVNLCQkJMHg2YworI2RlZmluZSBBUEJfU1RBVFVTX01BU0sJCQkweDcw CisKKy8qIGF1ZGlvIGRlY29kZXIgYWRkciAqLworI2RlZmluZSBBVURJT19TUkNfQ05UTAkJCTB4 MzAwMDAKKyNkZWZpbmUgQVVESU9fU1JDX0NORkcJCQkweDMwMDA0CisjZGVmaW5lIENPTV9DSF9T VFRTX0JJVFMJCTB4MzAwMDgKKyNkZWZpbmUgU1RUU19CSVRfQ0goeCkJCQkoMHgzMDAwYyArICh4 IDw8IDIpKQorI2RlZmluZSBTUERJRl9DVFJMX0FERFIJCQkweDMwMDRjCisjZGVmaW5lIFNQRElG X0NIMV9DU18zMTAwX0FERFIJCTB4MzAwNTAKKyNkZWZpbmUgU1BESUZfQ0gxX0NTXzYzMzJfQURE UgkJMHgzMDA1NAorI2RlZmluZSBTUERJRl9DSDFfQ1NfOTU2NF9BRERSCQkweDMwMDU4CisjZGVm aW5lIFNQRElGX0NIMV9DU18xMjc5Nl9BRERSCQkweDMwMDVjCisjZGVmaW5lIFNQRElGX0NIMV9D U18xNTkxMjhfQUREUgkweDMwMDYwCisjZGVmaW5lIFNQRElGX0NIMV9DU18xOTExNjBfQUREUgkw eDMwMDY0CisjZGVmaW5lIFNQRElGX0NIMl9DU18zMTAwX0FERFIJCTB4MzAwNjgKKyNkZWZpbmUg U1BESUZfQ0gyX0NTXzYzMzJfQUREUgkJMHgzMDA2YworI2RlZmluZSBTUERJRl9DSDJfQ1NfOTU2 NF9BRERSCQkweDMwMDcwCisjZGVmaW5lIFNQRElGX0NIMl9DU18xMjc5Nl9BRERSCQkweDMwMDc0 CisjZGVmaW5lIFNQRElGX0NIMl9DU18xNTkxMjhfQUREUgkweDMwMDc4CisjZGVmaW5lIFNQRElG X0NIMl9DU18xOTExNjBfQUREUgkweDMwMDdjCisjZGVmaW5lIFNNUEwyUEtUX0NOVEwJCQkweDMw MDgwCisjZGVmaW5lIFNNUEwyUEtUX0NORkcJCQkweDMwMDg0CisjZGVmaW5lIEZJRk9fQ05UTAkJ CTB4MzAwODgKKyNkZWZpbmUgRklGT19TVFRTCQkJMHgzMDA4YworCisvKiBzb3VyY2UgcGlmIGFk ZHIgKi8KKyNkZWZpbmUgU09VUkNFX1BJRl9XUl9BRERSCQkweDMwODAwCisjZGVmaW5lIFNPVVJD RV9QSUZfV1JfUkVRCQkweDMwODA0CisjZGVmaW5lIFNPVVJDRV9QSUZfUkRfQUREUgkJMHgzMDgw OAorI2RlZmluZSBTT1VSQ0VfUElGX1JEX1JFUQkJMHgzMDgwYworI2RlZmluZSBTT1VSQ0VfUElG X0RBVEFfV1IJCTB4MzA4MTAKKyNkZWZpbmUgU09VUkNFX1BJRl9EQVRBX1JECQkweDMwODE0Cisj ZGVmaW5lIFNPVVJDRV9QSUZfRklGTzFfRkxVU0gJCTB4MzA4MTgKKyNkZWZpbmUgU09VUkNFX1BJ Rl9GSUZPMl9GTFVTSAkJMHgzMDgxYworI2RlZmluZSBTT1VSQ0VfUElGX1NUQVRVUwkJMHgzMDgy MAorI2RlZmluZSBTT1VSQ0VfUElGX0lOVEVSUlVQVF9TT1VSQ0UJMHgzMDgyNAorI2RlZmluZSBT T1VSQ0VfUElGX0lOVEVSUlVQVF9NQVNLCTB4MzA4MjgKKyNkZWZpbmUgU09VUkNFX1BJRl9QS1Rf QUxMT0NfUkVHCTB4MzA4MmMKKyNkZWZpbmUgU09VUkNFX1BJRl9QS1RfQUxMT0NfV1JfRU4JMHgz MDgzMAorI2RlZmluZSBTT1VSQ0VfUElGX1NXX1JFU0VUCQkweDMwODM0CisKKy8qIGJlbGxvdyBy ZWdpc3RlcnMgbmVlZCBhY2Nlc3MgYnkgbWFpbGJveCAqLworLyogc291cmNlIGNhciBhZGRyICov CisjZGVmaW5lIFNPVVJDRV9IRFRYX0NBUgkJCTB4MDkwMAorI2RlZmluZSBTT1VSQ0VfRFBUWF9D QVIJCQkweDA5MDQKKyNkZWZpbmUgU09VUkNFX1BIWV9DQVIJCQkweDA5MDgKKyNkZWZpbmUgU09V UkNFX0NFQ19DQVIJCQkweDA5MGMKKyNkZWZpbmUgU09VUkNFX0NCVVNfQ0FSCQkJMHgwOTEwCisj ZGVmaW5lIFNPVVJDRV9QS1RfQ0FSCQkJMHgwOTE4CisjZGVmaW5lIFNPVVJDRV9BSUZfQ0FSCQkJ MHgwOTFjCisjZGVmaW5lIFNPVVJDRV9DSVBIRVJfQ0FSCQkweDA5MjAKKyNkZWZpbmUgU09VUkNF X0NSWVBUT19DQVIJCTB4MDkyNAorCisvKiBjbG9jayBtZXRlcnMgYWRkciAqLworI2RlZmluZSBD TV9DVFJMCQkJCTB4MGEwMAorI2RlZmluZSBDTV9JMlNfQ1RSTAkJCTB4MGEwNAorI2RlZmluZSBD TV9TUERJRl9DVFJMCQkJMHgwYTA4CisjZGVmaW5lIENNX1ZJRF9DVFJMCQkJMHgwYTBjCisjZGVm aW5lIENNX0xBTkVfQ1RSTAkJCTB4MGExMAorI2RlZmluZSBJMlNfTk1fU1RBQkxFCQkJMHgwYTE0 CisjZGVmaW5lIEkyU19OQ1RTX1NUQUJMRQkJCTB4MGExOAorI2RlZmluZSBTUERJRl9OTV9TVEFC TEUJCQkweDBhMWMKKyNkZWZpbmUgU1BESUZfTkNUU19TVEFCTEUJCTB4MGEyMAorI2RlZmluZSBO TVZJRF9NRUFTX1NUQUJMRQkJMHgwYTI0CisjZGVmaW5lIEkyU19NRUFTCQkJMHgwYTQwCisjZGVm aW5lIFNQRElGX01FQVMJCQkweDBhODAKKyNkZWZpbmUgTk1WSURfTUVBUwkJCTB4MGFjMAorCisv KiBzb3VyY2UgdmlmIGFkZHIgKi8KKyNkZWZpbmUgQk5EX0hTWU5DMlZTWU5DCQkJMHgwYjAwCisj ZGVmaW5lIEhTWU5DMlZTWU5DX0YxX0wxCQkweDBiMDQKKyNkZWZpbmUgSFNZTkMyVlNZTkNfRjJf TDEJCTB4MGIwOAorI2RlZmluZSBIU1lOQzJWU1lOQ19TVEFUVVMJCTB4MGIwYworI2RlZmluZSBI U1lOQzJWU1lOQ19QT0xfQ1RSTAkJMHgwYjEwCisKKy8qIGRwdHggcGh5IGFkZHIgKi8KKyNkZWZp bmUgRFBfVFhfUEhZX0NPTkZJR19SRUcJCTB4MjAwMAorI2RlZmluZSBEUF9UWF9QSFlfU1RBVFVT X1JFRwkJMHgyMDA0CisjZGVmaW5lIERQX1RYX1BIWV9TV19SRVNFVAkJMHgyMDA4CisjZGVmaW5l IERQX1RYX1BIWV9TQ1JBTUJMRVJfU0VFRAkweDIwMGMKKyNkZWZpbmUgRFBfVFhfUEhZX1RSQUlO SU5HXzAxXzA0CTB4MjAxMAorI2RlZmluZSBEUF9UWF9QSFlfVFJBSU5JTkdfMDVfMDgJMHgyMDE0 CisjZGVmaW5lIERQX1RYX1BIWV9UUkFJTklOR18wOV8xMAkweDIwMTgKKyNkZWZpbmUgVEVTVF9D T1IJCQkweDIzZmMKKworLyogZHB0eCBocGQgYWRkciAqLworI2RlZmluZSBIUERfSVJRX0RFVF9N SU5fVElNRVIJCTB4MjEwMAorI2RlZmluZSBIUERfSVJRX0RFVF9NQVhfVElNRVIJCTB4MjEwNAor I2RlZmluZSBIUERfVU5QTEdFRF9ERVRfTUlOX1RJTUVSCTB4MjEwOAorI2RlZmluZSBIUERfU1RB QkxFX1RJTUVSCQkweDIxMGMKKyNkZWZpbmUgSFBEX0ZJTFRFUl9USU1FUgkJMHgyMTEwCisjZGVm aW5lIEhQRF9FVkVOVF9NQVNLCQkJMHgyMTFjCisjZGVmaW5lIEhQRF9FVkVOVF9ERVQJCQkweDIx MjAKKworLyogZHB5eCBmcmFtZXIgYWRkciAqLworI2RlZmluZSBEUF9GUkFNRVJfR0xPQkFMX0NP TkZJRwkJMHgyMjAwCisjZGVmaW5lIERQX1NXX1JFU0VUCQkJMHgyMjA0CisjZGVmaW5lIERQX0ZS QU1FUl9UVQkJCTB4MjIwOAorI2RlZmluZSBEUF9GUkFNRVJfUFhMX1JFUFIJCTB4MjIwYworI2Rl ZmluZSBEUF9GUkFNRVJfU1AJCQkweDIyMTAKKyNkZWZpbmUgQVVESU9fUEFDS19DT05UUk9MCQkw eDIyMTQKKyNkZWZpbmUgRFBfVkNfVEFCTEUoeCkJCQkoMHgyMjE4ICsgKHggPDwgMikpCisjZGVm aW5lIERQX1ZCX0lECQkJMHgyMjU4CisjZGVmaW5lIERQX01UUEhfTFZQX0NPTlRST0wJCTB4MjI1 YworI2RlZmluZSBEUF9NVFBIX1NZTUJPTF9WQUxVRVMJCTB4MjI2MAorI2RlZmluZSBEUF9NVFBI X0VDRl9DT05UUk9MCQkweDIyNjQKKyNkZWZpbmUgRFBfTVRQSF9BQ1RfQ09OVFJPTAkJMHgyMjY4 CisjZGVmaW5lIERQX01UUEhfU1RBVFVTCQkJMHgyMjZjCisjZGVmaW5lIERQX0lOVEVSUlVQVF9T T1VSQ0UJCTB4MjI3MAorI2RlZmluZSBEUF9JTlRFUlJVUFRfTUFTSwkJMHgyMjc0CisjZGVmaW5l IERQX0ZST05UX0JBQ0tfUE9SQ0gJCTB4MjI3OAorI2RlZmluZSBEUF9CWVRFX0NPVU5UCQkJMHgy MjdjCisKKy8qIGRwdHggc3RyZWFtIGFkZHIgKi8KKyNkZWZpbmUgTVNBX0hPUklaT05UQUxfMAkJ MHgyMjgwCisjZGVmaW5lIE1TQV9IT1JJWk9OVEFMXzEJCTB4MjI4NAorI2RlZmluZSBNU0FfVkVS VElDQUxfMAkJCTB4MjI4OAorI2RlZmluZSBNU0FfVkVSVElDQUxfMQkJCTB4MjI4YworI2RlZmlu ZSBNU0FfTUlTQwkJCTB4MjI5MAorI2RlZmluZSBTVFJFQU1fQ09ORklHCQkJMHgyMjk0CisjZGVm aW5lIEFVRElPX1BBQ0tfU1RBVFVTCQkweDIyOTgKKyNkZWZpbmUgVklGX1NUQVRVUwkJCTB4MjI5 YworI2RlZmluZSBQQ0tfU1RVRkZfU1RBVFVTXzAJCTB4MjJhMAorI2RlZmluZSBQQ0tfU1RVRkZf U1RBVFVTXzEJCTB4MjJhNAorI2RlZmluZSBJTkZPX1BBQ0tfU1RBVFVTCQkweDIyYTgKKyNkZWZp bmUgUkFURV9HT1ZFUk5PUl9TVEFUVVMJCTB4MjJhYworI2RlZmluZSBEUF9IT1JJWk9OVEFMCQkJ MHgyMmIwCisjZGVmaW5lIERQX1ZFUlRJQ0FMXzAJCQkweDIyYjQKKyNkZWZpbmUgRFBfVkVSVElD QUxfMQkJCTB4MjJiOAorI2RlZmluZSBEUF9CTE9DS19TRFAJCQkweDIyYmMKKworLyogZHB0eCBn bGJsIGFkZHIgKi8KKyNkZWZpbmUgRFBUWF9MQU5FX0VOCQkJMHgyMzAwCisjZGVmaW5lIERQVFhf RU5ITkNECQkJMHgyMzA0CisjZGVmaW5lIERQVFhfSU5UX01BU0sJCQkweDIzMDgKKyNkZWZpbmUg RFBUWF9JTlRfU1RBVFVTCQkJMHgyMzBjCisKKy8qIGRwIGF1eCBhZGRyICovCisjZGVmaW5lIERQ X0FVWF9IT1NUX0NPTlRST0wJCTB4MjgwMAorI2RlZmluZSBEUF9BVVhfSU5URVJSVVBUX1NPVVJD RQkJMHgyODA0CisjZGVmaW5lIERQX0FVWF9JTlRFUlJVUFRfTUFTSwkJMHgyODA4CisjZGVmaW5l IERQX0FVWF9TV0FQX0lOVkVSU0lPTl9DT05UUk9MCTB4MjgwYworI2RlZmluZSBEUF9BVVhfU0VO RF9OQUNLX1RSQU5TQUNUSU9OCTB4MjgxMAorI2RlZmluZSBEUF9BVVhfQ0xFQVJfUlgJCQkweDI4 MTQKKyNkZWZpbmUgRFBfQVVYX0NMRUFSX1RYCQkJMHgyODE4CisjZGVmaW5lIERQX0FVWF9USU1F Ul9TVE9QCQkweDI4MWMKKyNkZWZpbmUgRFBfQVVYX1RJTUVSX0NMRUFSCQkweDI4MjAKKyNkZWZp bmUgRFBfQVVYX1JFU0VUX1NXCQkJMHgyODI0CisjZGVmaW5lIERQX0FVWF9ESVZJREVfMk0JCTB4 MjgyOAorI2RlZmluZSBEUF9BVVhfVFhfUFJFQUNIQVJHRV9MRU5HVEgJMHgyODJjCisjZGVmaW5l IERQX0FVWF9GUkVRVUVOQ1lfMU1fTUFYCQkweDI4MzAKKyNkZWZpbmUgRFBfQVVYX0ZSRVFVRU5D WV8xTV9NSU4JCTB4MjgzNAorI2RlZmluZSBEUF9BVVhfUlhfUFJFX01JTgkJMHgyODM4CisjZGVm aW5lIERQX0FVWF9SWF9QUkVfTUFYCQkweDI4M2MKKyNkZWZpbmUgRFBfQVVYX1RJTUVSX1BSRVNF VAkJMHgyODQwCisjZGVmaW5lIERQX0FVWF9OQUNLX0ZPUk1BVAkJMHgyODQ0CisjZGVmaW5lIERQ X0FVWF9UWF9EQVRBCQkJMHgyODQ4CisjZGVmaW5lIERQX0FVWF9SWF9EQVRBCQkJMHgyODRjCisj ZGVmaW5lIERQX0FVWF9UWF9TVEFUVVMJCTB4Mjg1MAorI2RlZmluZSBEUF9BVVhfUlhfU1RBVFVT CQkweDI4NTQKKyNkZWZpbmUgRFBfQVVYX1JYX0NZQ0xFX0NPVU5URVIJCTB4Mjg1OAorI2RlZmlu ZSBEUF9BVVhfTUFJTl9TVEFURVMJCTB4Mjg1YworI2RlZmluZSBEUF9BVVhfTUFJTl9USU1FUgkJ MHgyODYwCisjZGVmaW5lIERQX0FVWF9BRkVfT1VUCQkJMHgyODY0CisKKy8qIGNyeXB0byBhZGRy ICovCisjZGVmaW5lIENSWVBUT19IRENQX1JFVklTSU9OCQkweDU4MDAKKyNkZWZpbmUgSERDUF9D UllQVE9fQ09ORklHCQkweDU4MDQKKyNkZWZpbmUgQ1JZUFRPX0lOVEVSUlVQVF9TT1VSQ0UJCTB4 NTgwOAorI2RlZmluZSBDUllQVE9fSU5URVJSVVBUX01BU0sJCTB4NTgwYworI2RlZmluZSBDUllQ VE8yMl9DT05GSUcJCQkweDU4MTgKKyNkZWZpbmUgQ1JZUFRPMjJfU1RBVFVTCQkJMHg1ODFjCisj ZGVmaW5lIFNIQV8yNTZfREFUQV9JTgkJCTB4NTgzYworI2RlZmluZSBTSEFfMjU2X0RBVEFfT1VU Xyh4KQkJKDB4NTg1MCArICh4IDw8IDIpKQorI2RlZmluZSBBRVNfMzJfS0VZXyh4KQkJCSgweDU4 NzAgKyAoeCA8PCAyKSkKKyNkZWZpbmUgQUVTXzMyX0RBVEFfSU4JCQkweDU4ODAKKyNkZWZpbmUg QUVTXzMyX0RBVEFfT1VUXyh4KQkJKDB4NTg4NCArICh4IDw8IDIpKQorI2RlZmluZSBDUllQVE8x NF9DT05GSUcJCQkweDU4YTAKKyNkZWZpbmUgQ1JZUFRPMTRfU1RBVFVTCQkJMHg1OGE0CisjZGVm aW5lIENSWVBUTzE0X1BSTk1fT1VUCQkweDU4YTgKKyNkZWZpbmUgQ1JZUFRPMTRfS01fMAkJCTB4 NThhYworI2RlZmluZSBDUllQVE8xNF9LTV8xCQkJMHg1OGIwCisjZGVmaW5lIENSWVBUTzE0X0FO XzAJCQkweDU4YjQKKyNkZWZpbmUgQ1JZUFRPMTRfQU5fMQkJCTB4NThiOAorI2RlZmluZSBDUllQ VE8xNF9ZT1VSX0tTVl8wCQkweDU4YmMKKyNkZWZpbmUgQ1JZUFRPMTRfWU9VUl9LU1ZfMQkJMHg1 OGMwCisjZGVmaW5lIENSWVBUTzE0X01JXzAJCQkweDU4YzQKKyNkZWZpbmUgQ1JZUFRPMTRfTUlf MQkJCTB4NThjOAorI2RlZmluZSBDUllQVE8xNF9USV8wCQkJMHg1OGNjCisjZGVmaW5lIENSWVBU TzE0X0tJXzAJCQkweDU4ZDAKKyNkZWZpbmUgQ1JZUFRPMTRfS0lfMQkJCTB4NThkNAorI2RlZmlu ZSBDUllQVE8xNF9CTE9DS1NfTlVNCQkweDU4ZDgKKyNkZWZpbmUgQ1JZUFRPMTRfS0VZX01FTV9E QVRBXzAJCTB4NThkYworI2RlZmluZSBDUllQVE8xNF9LRVlfTUVNX0RBVEFfMQkJMHg1OGUwCisj ZGVmaW5lIENSWVBUTzE0X1NIQTFfTVNHX0RBVEEJCTB4NThlNAorI2RlZmluZSBDUllQVE8xNF9T SEExX1ZfVkFMVUVfKHgpCSgweDU4ZTggKyAoeCA8PCAyKSkKKyNkZWZpbmUgVFJOR19DVFJMCQkJ MHg1OGZjCisjZGVmaW5lIFRSTkdfREFUQV9SRFkJCQkweDU5MDAKKyNkZWZpbmUgVFJOR19EQVRB CQkJMHg1OTA0CisKKy8qIGNpcGhlciBhZGRyICovCisjZGVmaW5lIEhEQ1BfUkVWSVNJT04JCQkw eDYwMDAwCisjZGVmaW5lIElOVEVSUlVQVF9TT1VSQ0UJCTB4NjAwMDQKKyNkZWZpbmUgSU5URVJS VVBUX01BU0sJCQkweDYwMDA4CisjZGVmaW5lIEhEQ1BfQ0lQSEVSX0NPTkZJRwkJMHg2MDAwYwor I2RlZmluZSBBRVNfMTI4X0tFWV8wCQkJMHg2MDAxMAorI2RlZmluZSBBRVNfMTI4X0tFWV8xCQkJ MHg2MDAxNAorI2RlZmluZSBBRVNfMTI4X0tFWV8yCQkJMHg2MDAxOAorI2RlZmluZSBBRVNfMTI4 X0tFWV8zCQkJMHg2MDAxYworI2RlZmluZSBBRVNfMTI4X1JBTkRPTV8wCQkweDYwMDIwCisjZGVm aW5lIEFFU18xMjhfUkFORE9NXzEJCTB4NjAwMjQKKyNkZWZpbmUgQ0lQSEVSMTRfS01fMAkJCTB4 NjAwMjgKKyNkZWZpbmUgQ0lQSEVSMTRfS01fMQkJCTB4NjAwMmMKKyNkZWZpbmUgQ0lQSEVSMTRf U1RBVFVTCQkJMHg2MDAzMAorI2RlZmluZSBDSVBIRVIxNF9SSV9QSl9TVEFUVVMJCTB4NjAwMzQK KyNkZWZpbmUgQ0lQSEVSX01PREUJCQkweDYwMDM4CisjZGVmaW5lIENJUEhFUjE0X0FOXzAJCQkw eDYwMDNjCisjZGVmaW5lIENJUEhFUjE0X0FOXzEJCQkweDYwMDQwCisjZGVmaW5lIENJUEhFUjIy X0FVVEgJCQkweDYwMDQ0CisjZGVmaW5lIENJUEhFUjE0X1IwX0RQX1NUQVRVUwkJMHg2MDA0OAor I2RlZmluZSBDSVBIRVIxNF9CT09UU1RSQVAJCTB4NjAwNGMKKworI2RlZmluZSBBUEJfSVJBTV9Q QVRICQkJQklUKDIpCisjZGVmaW5lIEFQQl9EUkFNX1BBVEgJCQlCSVQoMSkKKyNkZWZpbmUgQVBC X1hUX1JFU0VUCQkJQklUKDApCisKKy8qIG1haWxib3ggKi8KKyNkZWZpbmUgTUJfT1BDT0RFX0lE CQkJMAorI2RlZmluZSBNQl9NT0RVTEVfSUQJCQkxCisjZGVmaW5lIE1CX1NJWkVfTVNCX0lECQkJ MgorI2RlZmluZSBNQl9TSVpFX0xTQl9JRAkJCTMKKyNkZWZpbmUgTUJfREFUQV9JRAkJCTQKKwor I2RlZmluZSBNQl9NT0RVTEVfSURfRFBfVFgJCTB4MDEKKyNkZWZpbmUgTUJfTU9EVUxFX0lEX0hE Q1BfVFgJCTB4MDcKKyNkZWZpbmUgTUJfTU9EVUxFX0lEX0hEQ1BfUlgJCTB4MDgKKyNkZWZpbmUg TUJfTU9EVUxFX0lEX0hEQ1BfR0VORVJBTAkweDA5CisjZGVmaW5lIE1CX01PRFVMRV9JRF9HRU5F UkFMCQkweDBhCisKKy8qIGdlbmVyYWwgb3Bjb2RlICovCisjZGVmaW5lIEdFTkVSQUxfTUFJTl9D T05UUk9MICAgICAgICAgICAgMHgwMQorI2RlZmluZSBHRU5FUkFMX1RFU1RfRUNITyAgICAgICAg ICAgICAgIDB4MDIKKyNkZWZpbmUgR0VORVJBTF9CVVNfU0VUVElOR1MgICAgICAgICAgICAweDAz CisjZGVmaW5lIEdFTkVSQUxfVEVTVF9BQ0NFU1MgICAgICAgICAgICAgMHgwNAorCisjZGVmaW5l IERQVFhfU0VUX1BPV0VSX01ORwkJCTB4MDAKKyNkZWZpbmUgRFBUWF9TRVRfSE9TVF9DQVBBQklM SVRJRVMJCTB4MDEKKyNkZWZpbmUgRFBUWF9HRVRfRURJRAkJCQkweDAyCisjZGVmaW5lIERQVFhf UkVBRF9EUENECQkJCTB4MDMKKyNkZWZpbmUgRFBUWF9XUklURV9EUENECQkJCTB4MDQKKyNkZWZp bmUgRFBUWF9FTkFCTEVfRVZFTlQJCQkweDA1CisjZGVmaW5lIERQVFhfV1JJVEVfUkVHSVNURVIJ CQkweDA2CisjZGVmaW5lIERQVFhfUkVBRF9SRUdJU1RFUgkJCTB4MDcKKyNkZWZpbmUgRFBUWF9X UklURV9GSUVMRAkJCTB4MDgKKyNkZWZpbmUgRFBUWF9UUkFJTklOR19DT05UUk9MCQkJMHgwOQor I2RlZmluZSBEUFRYX1JFQURfRVZFTlQJCQkJMHgwYQorI2RlZmluZSBEUFRYX1JFQURfTElOS19T VEFUCQkJMHgwYgorI2RlZmluZSBEUFRYX1NFVF9WSURFTwkJCQkweDBjCisjZGVmaW5lIERQVFhf U0VUX0FVRElPCQkJCTB4MGQKKyNkZWZpbmUgRFBUWF9HRVRfTEFTVF9BVVhfU1RBVVMJCQkweDBl CisjZGVmaW5lIERQVFhfU0VUX0xJTktfQlJFQUtfUE9JTlQJCTB4MGYKKyNkZWZpbmUgRFBUWF9G T1JDRV9MQU5FUwkJCTB4MTAKKyNkZWZpbmUgRFBUWF9IUERfU1RBVEUJCQkJMHgxMQorCisjZGVm aW5lIERQVFhfRVZFTlRfRU5BQkxFX0hQRAkJCUJJVCgwKQorI2RlZmluZSBEUFRYX0VWRU5UX0VO QUJMRV9UUkFJTklORwkJQklUKDEpCisKKyNkZWZpbmUgTElOS19UUkFJTklOR19OT1RfQUNUSVZF CQkwCisjZGVmaW5lIExJTktfVFJBSU5JTkdfUlVOCQkJMQorI2RlZmluZSBMSU5LX1RSQUlOSU5H X1JFU1RBUlQJCQkyCisKKyNkZWZpbmUgQ09OVFJPTF9WSURFT19JRExFCQkJMAorI2RlZmluZSBD T05UUk9MX1ZJREVPX1ZBTElECQkJMQorCisjZGVmaW5lIFZJRl9CWVBBU1NfSU5URVJMQUNFCQkJ QklUKDEzKQorI2RlZmluZSBJTlRFUkxBQ0VfRk1UX0RFVAkJCUJJVCgxMikKKyNkZWZpbmUgSU5U RVJMQUNFX0RUQ1RfV0lOCQkJMHgyMAorCisjZGVmaW5lIERQX0ZSQU1FUl9TUF9JTlRFUkxBQ0Vf RU4JCUJJVCgyKQorI2RlZmluZSBEUF9GUkFNRVJfU1BfSFNQCQkJQklUKDEpCisjZGVmaW5lIERQ X0ZSQU1FUl9TUF9WU1AJCQlCSVQoMCkKKworLyogY2FwYWJpbGl0eSAqLworI2RlZmluZSBBVVhf SE9TVF9JTlZFUlQJCQkJMworI2RlZmluZQlGQVNUX0xUX1NVUFBPUlQJCQkJMQorI2RlZmluZSBG QVNUX0xUX05PVF9TVVBQT1JUCQkJMAorI2RlZmluZSBMQU5FX01BUFBJTkdfTk9STUFMCQkJMHhl NAorI2RlZmluZSBMQU5FX01BUFBJTkdfRkxJUFBFRAkJCTB4MWIKKyNkZWZpbmUgRU5IQU5DRUQJ CQkJMQorCisjZGVmaW5lCUZVTExfTFRfU1RBUlRFRAkJCQlCSVQoMCkKKyNkZWZpbmUgRkFTRV9M VF9TVEFSVEVECQkJCUJJVCgxKQorI2RlZmluZSBDTEtfUkVDT1ZFUllfRklOSVNIRUQJCQlCSVQo MikKKyNkZWZpbmUgRVFfUEhBU0VfRklOSVNIRUQJCQlCSVQoMykKKyNkZWZpbmUgRkFTRV9MVF9T VEFSVF9GSU5JU0hFRAkJCUJJVCg0KQorI2RlZmluZSBDTEtfUkVDT1ZFUllfRkFJTEVECQkJQklU KDUpCisjZGVmaW5lIEVRX1BIQVNFX0ZBSUxFRAkJCQlCSVQoNikKKyNkZWZpbmUgRkFTRV9MVF9G QUlMRUQJCQkJQklUKDcpCisKKyNkZWZpbmUgRFBUWF9IUERfRVZFTlQJCQkJQklUKDApCisjZGVm aW5lIERQVFhfVFJBSU5JTkdfRVZFTlQJCQlCSVQoMSkKKyNkZWZpbmUgSERDUF9UWF9TVEFUVVNf RVZFTlQJCQlCSVQoNCkKKyNkZWZpbmUgSERDUDJfVFhfSVNfS01fU1RPUkVEX0VWRU5UCQlCSVQo NSkKKyNkZWZpbmUgSERDUDJfVFhfU1RPUkVfS01fRVZFTlQJCQlCSVQoNikKKyNkZWZpbmUgSERD UF9UWF9JU19SRUNFSVZFUl9JRF9WQUxJRF9FVkVOVAlCSVQoNykKKworI2RlZmluZSBFRElEX0xF TkdUSF9CWVRFCQkJMAorI2RlZmluZSBFRElEX1NFR01FTlRfQlVNQkVSCQkJMQorI2RlZmluZSBF RElEX0RBVEEJCQkJMgorI2RlZmluZSBFRElEX0JMT0NLX1NJWkUJCQkJMTI4CisKKyNkZWZpbmUg VFVfU0laRQkJCQkJNjQKKworLyogYXVkaW8gKi8KKyNkZWZpbmUgQVVESU9fUEFDS19FTih4KQkJ CSh4IDw8IDgpCisjZGVmaW5lIFNBTVBMSU5HX0ZSRVEoeCkJCQkoeCA8PCAxNikKKyNkZWZpbmUg T1JJR0lOQUxfU0FNUF9GUkVRKHgpCQkJKHggPDwgMjQpCisjZGVmaW5lIFNZTkNfV1JfVE9fQ0hf WkVSTwkJCUJJVCgxKQorCitlbnVtIHZvbHRhZ2Vfc3dpbmdfbGV2ZWwgeworCVZPTFRBR0VfTEVW RUxfMCwKKwlWT0xUQUdFX0xFVkVMXzEsCisJVk9MVEFHRV9MRVZFTF8yLAorCVZPTFRBR0VfTEVW RUxfMywKK307CisKK2VudW0gcHJlX2VtcGhhc2lzX2xldmVsIHsKKwlQUkVfRU1QSEFTSVNfTEVW RUxfMCwKKwlQUkVfRU1QSEFTSVNfTEVWRUxfMSwKKwlQUkVfRU1QSEFTSVNfTEVWRUxfMiwKKwlQ UkVfRU1QSEFTSVNfTEVWRUxfMywKK307CisKK2VudW0gcGF0dGVybl9zZXQgeworCVBSQlM3CQk9 IEJJVCgwKSwKKwlEMTBfMgkJPSBCSVQoMSksCisJVFJBSU5JTkdfUFROMQk9IEJJVCgyKSwKKwlU UkFJTklOR19QVE4yCT0gQklUKDMpLAorCURQX05PTkUJCT0gQklUKDQpCit9OworCitlbnVtIFZJ Q19QWExfRU5DT0RJTkdfRk9STUFUIHsKKwlQWExfUkdCID0gMHgxLAorCVlDQkNSXzRfNF80ID0g MHgyLAorCVlDQkNSXzRfMl8yID0gMHg0LAorCVlDQkNSXzRfMl8wID0gMHg4LAorCVlfT05MWSA9 IDB4MTAsCit9OworCitlbnVtIFZJQ19DT0xPUl9ERVBUSCB7CisJQkNTXzYgPSAweDEsCisJQkNT XzggPSAweDIsCisJQkNTXzEwID0gMHg0LAorCUJDU18xMiA9IDB4OCwKKwlCQ1NfMTYgPSAweDEw LAorfTsKKworI2VuZGlmIC8qIF9DRE5fRFBfUkVHX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jCmluZGV4IGVkZDdlYzIuLjYyM2Q5ZTMgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYwpAQCAtOTY5LDcgKzk2OSwx MCBAQCBzdGF0aWMgdm9pZCB2b3BfY3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQog CQl2b3BfZHNwX2hvbGRfdmFsaWRfaXJxX2Rpc2FibGUodm9wKTsKIAl9CiAKLQlwaW5fcG9sID0g MHg4OworCWlmIChzLT5vdXRwdXRfdHlwZSAhPSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBv cnQpCisJCXBpbl9wb2wgPSAweDg7CisJZWxzZQorCQlwaW5fcG9sID0gMDsKIAlwaW5fcG9sIHw9 IChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTkhTWU5DKSA/IDAgOiAxOwog CXBpbl9wb2wgfD0gKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OVlNZTkMp ID8gMCA6ICgxIDw8IDEpOwogCVZPUF9DVFJMX1NFVCh2b3AsIHBpbl9wb2wsIHBpbl9wb2wpOwpA QCAtOTkxLDYgKzk5NCwxMCBAQCBzdGF0aWMgdm9pZCB2b3BfY3J0Y19lbmFibGUoc3RydWN0IGRy bV9jcnRjICpjcnRjKQogCQlWT1BfQ1RSTF9TRVQodm9wLCBtaXBpX3Bpbl9wb2wsIHBpbl9wb2wp OwogCQlWT1BfQ1RSTF9TRVQodm9wLCBtaXBpX2VuLCAxKTsKIAkJYnJlYWs7CisJY2FzZSBEUk1f TU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQ6CisJCVZPUF9DVFJMX1NFVCh2b3AsIGRwX3Bpbl9w b2wsIHBpbl9wb2wpOworCQlWT1BfQ1RSTF9TRVQodm9wLCBkcF9lbiwgMSk7CisJCWJyZWFrOwog CWRlZmF1bHQ6CiAJCURSTV9FUlJPUigidW5zdXBwb3J0IGNvbm5lY3Rvcl90eXBlWyVkXVxuIiwg cy0+b3V0cHV0X3R5cGUpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC9yb2NrY2hpcF9kcm1fdm9wLmggYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBf ZHJtX3ZvcC5oCmluZGV4IGZmNGY1MmUuLjUwYTA0NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL3JvY2tjaGlwX2RybV92b3AuaApAQCAtNDUsNiArNDUsNyBAQCBzdHJ1Y3Qgdm9wX2N0 cmwgewogCXN0cnVjdCB2b3BfcmVnIGVkcF9lbjsKIAlzdHJ1Y3Qgdm9wX3JlZyBoZG1pX2VuOwog CXN0cnVjdCB2b3BfcmVnIG1pcGlfZW47CisJc3RydWN0IHZvcF9yZWcgZHBfZW47CiAJc3RydWN0 IHZvcF9yZWcgb3V0X21vZGU7CiAJc3RydWN0IHZvcF9yZWcgZGl0aGVyX2Rvd247CiAJc3RydWN0 IHZvcF9yZWcgZGl0aGVyX3VwOwpAQCAtNTMsNiArNTQsNyBAQCBzdHJ1Y3Qgdm9wX2N0cmwgewog CXN0cnVjdCB2b3BfcmVnIGhkbWlfcGluX3BvbDsKIAlzdHJ1Y3Qgdm9wX3JlZyBlZHBfcGluX3Bv bDsKIAlzdHJ1Y3Qgdm9wX3JlZyBtaXBpX3Bpbl9wb2w7CisJc3RydWN0IHZvcF9yZWcgZHBfcGlu X3BvbDsKIAogCXN0cnVjdCB2b3BfcmVnIGh0b3RhbF9wdzsKIAlzdHJ1Y3Qgdm9wX3JlZyBoYWN0 X3N0X2VuZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF92 b3BfcmVnLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfdm9wX3JlZy5jCmlu ZGV4IDViMWFlMWYuLmRjZjE3MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC9yb2NrY2hpcF92b3BfcmVnLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tj aGlwX3ZvcF9yZWcuYwpAQCAtMjgxLDYgKzI4MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm9w X2RhdGEgcmszMjg4X3ZvcCA9IHsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm9wX2N0cmwgcmszMzk5 X2N0cmxfZGF0YSA9IHsKIAkuc3RhbmRieSA9IFZPUF9SRUcoUkszMzk5X1NZU19DVFJMLCAweDEs IDIyKSwKIAkuZ2F0ZV9lbiA9IFZPUF9SRUcoUkszMzk5X1NZU19DVFJMLCAweDEsIDIzKSwKKwku ZHBfZW4gPSBWT1BfUkVHKFJLMzM5OV9TWVNfQ1RSTCwgMHgxLCAxMSksCiAJLnJnYl9lbiA9IFZP UF9SRUcoUkszMzk5X1NZU19DVFJMLCAweDEsIDEyKSwKIAkuaGRtaV9lbiA9IFZPUF9SRUcoUksz Mzk5X1NZU19DVFJMLCAweDEsIDEzKSwKIAkuZWRwX2VuID0gVk9QX1JFRyhSSzMzOTlfU1lTX0NU UkwsIDB4MSwgMTQpLApAQCAtMjkwLDYgKzI5MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm9w X2N0cmwgcmszMzk5X2N0cmxfZGF0YSA9IHsKIAkuZGF0YV9ibGFuayA9IFZPUF9SRUcoUkszMzk5 X0RTUF9DVFJMMCwgMHgxLCAxOSksCiAJLm91dF9tb2RlID0gVk9QX1JFRyhSSzMzOTlfRFNQX0NU UkwwLCAweGYsIDApLAogCS5yZ2JfcGluX3BvbCA9IFZPUF9SRUcoUkszMzk5X0RTUF9DVFJMMSwg MHhmLCAxNiksCisJLmRwX3Bpbl9wb2wgPSBWT1BfUkVHKFJLMzM5OV9EU1BfQ1RSTDEsIDB4Ziwg MTYpLAogCS5oZG1pX3Bpbl9wb2wgPSBWT1BfUkVHKFJLMzM5OV9EU1BfQ1RSTDEsIDB4ZiwgMjAp LAogCS5lZHBfcGluX3BvbCA9IFZPUF9SRUcoUkszMzk5X0RTUF9DVFJMMSwgMHhmLCAyNCksCiAJ Lm1pcGlfcGluX3BvbCA9IFZPUF9SRUcoUkszMzk5X0RTUF9DVFJMMSwgMHhmLCAyOCksCmRpZmYg LS1naXQgYS9pbmNsdWRlL3NvdW5kL2Nkbi1kcC1hdWRpby5oIGIvaW5jbHVkZS9zb3VuZC9jZG4t ZHAtYXVkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzZlNTVjCi0t LSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9jZG4tZHAtYXVkaW8uaApAQCAtMCwwICsx LDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IENocmlzIFpob25nIDx6eXdAcm9jay1j aGlwcy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgUk9DS0NISVAsIEluYy4KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyAqLworCisjaWZuZGVmIF9fQ0ROX0RQX0FVRElPX0hfXworI2RlZmluZSBfX0NETl9E UF9BVURJT19IX18KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjZGVm aW5lIEFVRElPX1RZUEVfSTJTCQkJMAorI2RlZmluZSBBVURJT19UWVBFX1NQSURJRl9JTlRFUk5B TAkxCisjZGVmaW5lIEFVRElPX1RZUEVfU1BJRElGX0VYVEVSTkFMCTIKKworZW51bSBBVURJT19U WVBFIHsKKwlUWVBFX0kyUyA9IDAsCisJVFlQRV9TUERJRiA9IDEsCit9OworCitzdHJ1Y3QgYXVk aW9faW5mbyB7CisJZW51bSBBVURJT19UWVBFIHR5cGU7CisJaW50IGZyZXE7CisJaW50IGNoYW5u ZWxzOworCWludCB3b3JkX2xlbmd0aDsKK307CisKK3N0cnVjdCBjZG5fZHBfYXVkaW9fb3BzIHsK KwlpbnQgKCphdWRpb19zdGFydHVwKSh2b2lkICpkcF9kZXYsIHN0cnVjdCBhdWRpb19pbmZvICph dWRpbyk7CisJaW50ICgqYXVkaW9fc2h1dGRvd24pKHZvaWQgKmRwX2Rldiwgc3RydWN0IGF1ZGlv X2luZm8gKmF1ZGlvKTsKKwlpbnQgKCphdWRpb19zdGFydCkodm9pZCAqZHBfZGV2LCBzdHJ1Y3Qg YXVkaW9faW5mbyAqYXVkaW8pOworCWludCAoKmF1ZGlvX3N0b3ApKHZvaWQgKmRwX2Rldiwgc3Ry dWN0IGF1ZGlvX2luZm8gKmF1ZGlvKTsKKwlpbnQgKCphdWRpb19jb25maWcpKHZvaWQgKmRwX2Rl diwgc3RydWN0IGF1ZGlvX2luZm8gKmF1ZGlvKTsKK307CisKKy8qIERQIGF1ZGlvIGluaXRhbGl6 YXRpb24gZGF0YSAqLworc3RydWN0IGNkbl9kcF9hdWRpb19wZGF0YSB7CisJc3RydWN0IGRldmlj ZSAqZGV2OworCWNvbnN0IHN0cnVjdCBjZG5fZHBfYXVkaW9fb3BzICpvcHM7CisJdm9pZCAqZGF0 YTsKK307CisKKyNlbmRpZiAvKiBfX0NETl9EUF9BVURJT19IX18gKi8KLS0gCjIuNi4zCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFp bGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK