From mboxrd@z Thu Jan 1 00:00:00 1970 From: Qiang Yu Subject: [PATCH v6 2/2] drm/lima: driver for ARM Mali4xx GPUs Date: Mon, 4 Mar 2019 22:05:52 +0800 Message-ID: <20190304140552.13369-1-yuq825@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Marek Vasut , lima@lists.freedesktop.org, Maxime Ripard , =?UTF-8?q?Christian=20K=C3=B6nig?= , Neil Armstrong , Sam Ravnborg , David Airlie , Qiang Yu , Simon Shields , Vasily Khoruzhick , Sean Paul , Andreas Baierl , Erico Nunes List-Id: dri-devel@lists.freedesktop.org LSBNYWxpIDR4eCBHUFVzIGhhdmUgdHdvIGtpbmRzIG9mIHByb2Nlc3NvcnMgR1AgYW5kIFBQLiBH UCBpcyBmb3IKICBPcGVuR0wgdmVydGV4IHNoYWRlciBwcm9jZXNzaW5nIGFuZCBQUCBpcyBmb3Ig ZnJhZ21lbnQgc2hhZGVyCiAgcHJvY2Vzc2luZy4gRWFjaCBwcm9jZXNzb3IgaGFzIGl0cyBvd24g TU1VIHNvIHByY2Vzc29ycyB3b3JrIGluCiAgdmlydHVhbCBhZGRyZXNzIHNwYWNlLgotIFRoZXJl J3Mgb25seSBvbmUgR1AgYnV0IG11bHRpcGxlIFBQIChtYXggNCBmb3IgbWFsaSA0MDAgYW5kIDgK ICBmb3IgbWFsaSA0NTApIGluIHRoZSBzYW1lIG1hbGkgNHh4IEdQVS4gQWxsIFBQcyBhcmUgZ3Jv dXBlZAogIHRvZ2F0aGVyIHRvIGhhbmRsZSBhIHNpbmdsZSBmcmFnbWVudCBzaGFkZXIgdGFzayBk aXZpZGVkIGJ5CiAgRkIgb3V0cHV0IHRpbGVkIHBpeGVscy4gTWFsaSA0MDAgdXNlciBzcGFjZSBk cml2ZXIgaXMKICByZXNwb25zaWJsZSBmb3IgYXNzaWduIHRhcmdldCB0aWxlZCBwaXhlbHMgdG8g ZWFjaCBQUCwgYnV0IG1hbGkKICA0NTAgaGFzIGEgSFcgbW9kdWxlIGNhbGxlZCBETEJVIHRvIGR5 bmFtaWNhbGx5IGJhbGFuY2UgZWFjaAogIFBQJ3MgbG9hZC4KLSBVc2VyIHNwYWNlIGRyaXZlciBh bGxvY2F0ZSBidWZmZXIgb2JqZWN0IGFuZCBtYXAgaW50byBHUFUKICB2aXJ0dWFsIGFkZHJlc3Mg c3BhY2UsIHVwbG9hZCBjb21tYW5kIHN0cmVhbSBhbmQgZHJhdyBkYXRhIHdpdGgKICBDUFUgbW1h cCBvZiB0aGUgYnVmZmVyIG9iamVjdCwgdGhlbiBzdWJtaXQgdGFzayB0byBHUC9QUCB3aXRoCiAg YSByZWdpc3RlciBmcmFtZSBpbmRpY2F0aW5nIHdoZXJlIGlzIHRoZSBjb21tYW5kIHN0cmVhbSBh bmQgbWlzYwogIHNldHRpbmdzLgotIFRoZXJlJ3Mgbm8gY29tbWFuZCBzdHJlYW0gdmFsaWRhdGlv bi9yZWxvY2F0aW9uIGR1ZSB0byBlYWNoIHVzZXIKICBwcm9jZXNzIGhhcyBpdHMgb3duIEdQVSB2 aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuIEdQL1BQJ3MgTU1VIHN3aXRjaAogIHZpcnR1YWwgYWRkcmVz cyBzcGFjZSBiZWZvcmUgcnVubmluZyB0d28gdGFza3MgZnJvbSBkaWZmZXJlbnQKICB1c2VyIHBy b2Nlc3MuIEVycm9yIG9yIGV2aWwgdXNlciBzcGFjZSBjb2RlIGp1c3QgZ2V0IE1NVSBmYXVsdAog IG9yIEdQL1BQIGVycm9yIElSUSwgdGhlbiB0aGUgSFcvU1cgd2lsbCBiZSByZWNvdmVyZWQuCi0g VXNlIEdFTStzaG1lbSBmb3IgTU0uIEN1cnJlbnRseSBqdXN0IGFsbG9jIGFuZCBwaW4gbWVtb3J5 IHdoZW4KICBnZW0gb2JqZWN0IGNyZWF0aW9uLiBHUFUgdm0gbWFwIG9mIHRoZSBidWZmZXIgaXMg YWxzbyBkb25lIGluCiAgdGhlIGFsbG9jIHN0YWdlIGluIGtlcm5lbCBzcGFjZS4gV2UgbWF5IGRl bGF5IHRoZSBtZW1vcnkKICBhbGxvY2F0aW9uIGFuZCByZWFsIEdQVSB2bSBtYXAgdG8gY29tbWFu ZCBzdWJtaXNzaW9uIHN0YWdlIGluIHRoZQogIGZ1cnR1cmUgYXMgaW1wcm92ZW1lbnQuCi0gVXNl IGRybV9zY2hlZCBmb3IgR1BVIHRhc2sgc2NoZWR1bGUuIEVhY2ggT3BlbkdMIGNvbnRleHQgc2hv dWxkCiAgaGF2ZSBhIGxpbWEgY29udGV4dCBvYmplY3QgaW4gdGhlIGtlcm5lbCB0byBkaXN0aW5n dWlzaCB0YXNrcwogIGZyb20gZGlmZmVyZW50IHVzZXIuIGRybV9zY2hlZCBnZXRzIHRhc2sgZnJv bSBlYWNoIGxpbWEgY29udGV4dAogIGluIGEgZmFpciB3YXkuCgp2NjoKLSBmaXggY29tbWVudHMg YnkgY2hlY2twYXRjaC5wbAoKdjU6Ci0gZXhwb3J0IGdwL3BwIHZlcnNpb24gdG8gdXNlcnNwYWNl Ci0gcmViYXNlIG9uIGRybS1taXNjLW5leHQKCnY0OgotIHVzZSBnZXQgcGFyYW0gaW50ZXJmYWNl IHRvIGdldCBpbmZvCi0gc2VwYXJhdGUgY29udGV4dCBjcmVhdGUvZnJlZSBpb2N0bAotIHJlbW92 ZSB1bnVzZWQgbWF4IHNjaGVkIHRhc2sgcGFyYW0KLSB1cGRhdGUgY29weXJpZ2h0IHRpbWUKLSB1 c2UgeGFycmF5IGluc3RlYWQgb2YgaWRyCi0gc3RvcCB1c2luZyBkcm1QLmgKCnYzOgotIGZpeCBj b21tZW50cyBmcm9tIGtidWlsZCByb2JvdAotIHJlc3RyaWN0IHN1cHBvcnRlZCBhcmNoIHRvIHRl c3RlZCBvbmVzCgp2MjoKLSBmaXggc3lzY2FsbCBhcmd1bWVudCBjaGVjawotIGZpeCBqb2IgZmlu aXNoIGZlbmNlIGxlYWsgc2luY2Uga2VybmVsIDUuMAotIHVzZSBkcm0gc3luY29iaiB0byByZXBs YWNlIG5hdGl2ZSBmZW5jZQotIG1vdmUgYnVmZmVyIG9iamVjdCBHUFUgdmEgbWFwIGludG8ga2Vy bmVsCi0gcmVzZXJ2ZSBzeXNjYWxsIGFyZ3VtZW50IHNwYWNlIGZvciBmdXR1cmUgaW5mbwotIHJl bW92ZSBrZXJuZWwgZ2VtIG1vZGlmaWVyCi0gc3dpdGNoIFRUTSBiYWNrIHRvIEdFTStzaG1lbSBN TQotIHVzZSB0aW1lIGJhc2VkIGlvIHBvbGwKLSB1c2Ugd2hvbGUgcmVnaXN0ZXIgbmFtZQotIGFk b3B0IGdlbSByZXNlcnZhdGlvbiBvYmogaW50ZWdyYXRpb24KLSB1c2UgZHJtX3RpbWVvdXRfYWJz X3RvX2ppZmZpZXMKCkNjOiBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgpDYzogUm9iIEhl cnJpbmcgPHJvYmhAa2VybmVsLm9yZz4KQ2M6IENocmlzdGlhbiBLw7ZuaWcgPGNrb2VuaWcubGVp Y2h0enVtZXJrZW5AZ21haWwuY29tPgpDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNo PgpDYzogQWxleCBEZXVjaGVyIDxhbGV4ZGV1Y2hlckBnbWFpbC5jb20+CkNjOiBTYW0gUmF2bmJv cmcgPHNhbUByYXZuYm9yZy5vcmc+CkNjOiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+ ClNpZ25lZC1vZmYtYnk6IEFuZHJlYXMgQmFpZXJsIDxpY2hnZWhAaW1rcmVpc3J1bS5kZT4KU2ln bmVkLW9mZi1ieTogRXJpY28gTnVuZXMgPG51bmVzLmVyaWNvQGdtYWlsLmNvbT4KU2lnbmVkLW9m Zi1ieTogSGVpa28gU3R1ZWJuZXIgPGhlaWtvQHNudGVjaC5kZT4KU2lnbmVkLW9mZi1ieTogTWFy ZWsgVmFzdXQgPG1hcmV4QGRlbnguZGU+ClNpZ25lZC1vZmYtYnk6IE5laWwgQXJtc3Ryb25nIDxu YXJtc3Ryb25nQGJheWxpYnJlLmNvbT4KU2lnbmVkLW9mZi1ieTogU2ltb24gU2hpZWxkcyA8c2lt b25AbGluZWFnZW9zLm9yZz4KU2lnbmVkLW9mZi1ieTogVmFzaWx5IEtob3J1emhpY2sgPGFuYXJz b3VsQGdtYWlsLmNvbT4KU2lnbmVkLW9mZi1ieTogUWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+ Ci0tLQogZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgICAgICB8ICAgMiArCiBkcml2 ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2Ry bS9saW1hL0tjb25maWcgICAgICAgICAgfCAgMTAgKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvTWFr ZWZpbGUgICAgICAgICB8ICAyMSArKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9iY2FzdC5j ICAgICB8ICA0NyArKysKIGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfYmNhc3QuaCAgICAgfCAg MTQgKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9jdHguYyAgICAgICB8ICA5NyArKysrKysK IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfY3R4LmggICAgICAgfCAgMzAgKysKIGRyaXZlcnMv Z3B1L2RybS9saW1hL2xpbWFfZGV2aWNlLmMgICAgfCAzODUgKysrKysrKysrKysrKysrKysrKysr KysKIGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZGV2aWNlLmggICAgfCAxMzEgKysrKysrKysK IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZGxidS5jICAgICAgfCAgNTggKysrKwogZHJpdmVy cy9ncHUvZHJtL2xpbWEvbGltYV9kbGJ1LmggICAgICB8ICAxOCArKwogZHJpdmVycy9ncHUvZHJt L2xpbWEvbGltYV9kcnYuYyAgICAgICB8IDM2NiArKysrKysrKysrKysrKysrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vbGltYS9saW1hX2Rydi5oICAgICAgIHwgIDQ1ICsrKwogZHJpdmVycy9ncHUv ZHJtL2xpbWEvbGltYV9nZW0uYyAgICAgICB8IDM4MSArKysrKysrKysrKysrKysrKysrKysrKwog ZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9nZW0uaCAgICAgICB8ICAyNSArKwogZHJpdmVycy9n cHUvZHJtL2xpbWEvbGltYV9nZW1fcHJpbWUuYyB8ICA0NyArKysKIGRyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfZ2VtX3ByaW1lLmggfCAgMTMgKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9n cC5jICAgICAgICB8IDI4MyArKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2xpbWEv bGltYV9ncC5oICAgICAgICB8ICAxNiArCiBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2wyX2Nh Y2hlLmMgIHwgIDgwICsrKysrCiBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2wyX2NhY2hlLmgg IHwgIDE0ICsKIGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbW11LmMgICAgICAgfCAxNDIgKysr KysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX21tdS5oICAgICAgIHwgIDE2ICsKIGRy aXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfb2JqZWN0LmMgICAgfCAxMjIgKysrKysrKysKIGRyaXZl cnMvZ3B1L2RybS9saW1hL2xpbWFfb2JqZWN0LmggICAgfCAgMzYgKysrCiBkcml2ZXJzL2dwdS9k cm0vbGltYS9saW1hX3BtdS5jICAgICAgIHwgIDYwICsrKysKIGRyaXZlcnMvZ3B1L2RybS9saW1h L2xpbWFfcG11LmggICAgICAgfCAgMTIgKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9wcC5j ICAgICAgICB8IDQyNCArKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJt L2xpbWEvbGltYV9wcC5oICAgICAgICB8ICAxOSArKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGlt YV9yZWdzLmggICAgICB8IDI5OCArKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfc2NoZWQuYyAgICAgfCA0MDQgKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmggICAgIHwgMTA0ICsrKysrKysKIGRyaXZlcnMv Z3B1L2RybS9saW1hL2xpbWFfdm0uYyAgICAgICAgfCAyODIgKysrKysrKysrKysrKysrKysKIGRy aXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfdm0uaCAgICAgICAgfCAgNjIgKysrKwogaW5jbHVkZS91 YXBpL2RybS9saW1hX2RybS5oICAgICAgICAgICB8IDEzOSArKysrKysrKysKIDM2IGZpbGVzIGNo YW5nZWQsIDQyMDQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9saW1hL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGlt YS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFf YmNhc3QuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfYmNh c3QuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfY3R4LmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2N0eC5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kZXZpY2UuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZGV2aWNlLmgKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2RsYnUuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZGxidS5oCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZHJ2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vbGltYS9saW1hX2dlbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2xpbWEvbGltYV9nZW0uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfZ2VtX3ByaW1lLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v bGltYS9saW1hX2dlbV9wcmltZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2xpbWEvbGltYV9ncC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEv bGltYV9ncC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9s Ml9jYWNoZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9s Ml9jYWNoZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9t bXUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbW11LmgK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX29iamVjdC5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9vYmplY3QuaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfcG11LmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3BtdS5oCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9wcC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9wcC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2xpbWEvbGltYV9yZWdzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vbGltYS9saW1hX3NjaGVkLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vbGltYS9saW1hX3NjaGVkLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v bGltYS9saW1hX3ZtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9s aW1hX3ZtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VhcGkvZHJtL2xpbWFfZHJtLmgK CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9L Y29uZmlnCmluZGV4IGJkOTQzYTcxNzU2Yy4uMTcxNmU0MjBiYWY5IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtMzI5 LDYgKzMyOSw4IEBAIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3R2ZTIwMC9LY29uZmlnIgogCiBz b3VyY2UgImRyaXZlcnMvZ3B1L2RybS94ZW4vS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL2dw dS9kcm0vbGltYS9LY29uZmlnIgorCiAjIEtlZXAgbGVnYWN5IGRyaXZlcnMgbGFzdAogCiBtZW51 Y29uZmlnIERSTV9MRUdBQ1kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBi L2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCAxYWM1NWM2NWVhYzAuLjFmOWQwMDc2Zjk5 YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9NYWtlZmlsZQpAQCAtMTA5LDMgKzEwOSw0IEBAIG9iai0kKENPTkZJR19EUk1fVElOWURS TSkgKz0gdGlueWRybS8KIG9iai0kKENPTkZJR19EUk1fUEwxMTEpICs9IHBsMTExLwogb2JqLSQo Q09ORklHX0RSTV9UVkUyMDApICs9IHR2ZTIwMC8KIG9iai0kKENPTkZJR19EUk1fWEVOKSArPSB4 ZW4vCitvYmotJChDT05GSUdfRFJNX0xJTUEpICArPSBsaW1hLwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2xpbWEvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL0tjb25maWcKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mMTEzMTQ0NDgwOTMKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9LY29uZmlnCkBAIC0wLDAgKzEsMTAg QEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisjIENvcHlyaWdo dCAyMDE3LTIwMTkgUWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+CisKK2NvbmZpZyBEUk1fTElN QQorICAgICAgIHRyaXN0YXRlICJMSU1BIChEUk0gc3VwcG9ydCBmb3IgQVJNIE1hbGkgNDAwLzQ1 MCBHUFUpIgorICAgICAgIGRlcGVuZHMgb24gRFJNCisgICAgICAgZGVwZW5kcyBvbiBBUk0gfHwg QVJNNjQgfHwgQ09NUElMRV9URVNUCisgICAgICAgc2VsZWN0IERSTV9TQ0hFRAorICAgICAgIGhl bHAKKyAgICAgICAgIERSTSBkcml2ZXIgZm9yIEFSTSBNYWxpIDQwMC80NTAgR1BVcy4KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2xp bWEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zOGNj NzAyODFiYTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9NYWtlZmls ZQpAQCAtMCwwICsxLDIxIEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9S IE1JVAorIyBDb3B5cmlnaHQgMjAxNy0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPgor CitsaW1hLXkgOj0gXAorCWxpbWFfZHJ2Lm8gXAorCWxpbWFfZGV2aWNlLm8gXAorCWxpbWFfcG11 Lm8gXAorCWxpbWFfbDJfY2FjaGUubyBcCisJbGltYV9tbXUubyBcCisJbGltYV9ncC5vIFwKKwls aW1hX3BwLm8gXAorCWxpbWFfZ2VtLm8gXAorCWxpbWFfdm0ubyBcCisJbGltYV9zY2hlZC5vIFwK KwlsaW1hX2N0eC5vIFwKKwlsaW1hX2dlbV9wcmltZS5vIFwKKwlsaW1hX2RsYnUubyBcCisJbGlt YV9iY2FzdC5vIFwKKwlsaW1hX29iamVjdC5vCisKK29iai0kKENPTkZJR19EUk1fTElNQSkgKz0g bGltYS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2JjYXN0LmMgYi9k cml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2JjYXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi4yODgzOTgwMjdiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbGltYS9saW1hX2JjYXN0LmMKQEAgLTAsMCArMSw0NyBAQAorLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisvKiBDb3B5cmlnaHQgMjAxOC0yMDE5IFFp YW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNp bmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgImxpbWFfZGV2aWNlLmgiCisjaW5j bHVkZSAibGltYV9iY2FzdC5oIgorI2luY2x1ZGUgImxpbWFfcmVncy5oIgorCisjZGVmaW5lIGJj YXN0X3dyaXRlKHJlZywgZGF0YSkgd3JpdGVsKGRhdGEsIGlwLT5pb21lbSArIHJlZykKKyNkZWZp bmUgYmNhc3RfcmVhZChyZWcpIHJlYWRsKGlwLT5pb21lbSArIHJlZykKKwordm9pZCBsaW1hX2Jj YXN0X2VuYWJsZShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiwgaW50IG51bV9wcCkKK3sKKwlzdHJ1 Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlID0gZGV2LT5waXBlICsgbGltYV9waXBlX3BwOworCXN0 cnVjdCBsaW1hX2lwICppcCA9IGRldi0+aXAgKyBsaW1hX2lwX2JjYXN0OworCWludCBpLCBtYXNr ID0gYmNhc3RfcmVhZChMSU1BX0JDQVNUX0JST0FEQ0FTVF9NQVNLKSAmIDB4ZmZmZjAwMDA7CisK Kwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BwOyBpKyspIHsKKwkJc3RydWN0IGxpbWFfaXAgKnBwID0g cGlwZS0+cHJvY2Vzc29yW2ldOworCisJCW1hc2sgfD0gMSA8PCAocHAtPmlkIC0gbGltYV9pcF9w cDApOworCX0KKworCWJjYXN0X3dyaXRlKExJTUFfQkNBU1RfQlJPQURDQVNUX01BU0ssIG1hc2sp OworfQorCitpbnQgbGltYV9iY2FzdF9pbml0KHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwlpbnQg aSwgbWFzayA9IDA7CisKKwlmb3IgKGkgPSBsaW1hX2lwX3BwMDsgaSA8PSBsaW1hX2lwX3BwNzsg aSsrKSB7CisJCWlmIChpcC0+ZGV2LT5pcFtpXS5wcmVzZW50KQorCQkJbWFzayB8PSAxIDw8IChp IC0gbGltYV9pcF9wcDApOworCX0KKworCWJjYXN0X3dyaXRlKExJTUFfQkNBU1RfQlJPQURDQVNU X01BU0ssIG1hc2sgPDwgMTYpOworCWJjYXN0X3dyaXRlKExJTUFfQkNBU1RfSU5URVJSVVBUX01B U0ssIG1hc2spOworCXJldHVybiAwOworfQorCit2b2lkIGxpbWFfYmNhc3RfZmluaShzdHJ1Y3Qg bGltYV9pcCAqaXApCit7CisKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEv bGltYV9iY2FzdC5oIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9iY2FzdC5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYzQ3ZTU4NTYzZDBhCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9iY2FzdC5oCkBAIC0wLDAgKzEsMTQg QEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAqLworLyogQ29w eXJpZ2h0IDIwMTgtMjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2lmbmRl ZiBfX0xJTUFfQkNBU1RfSF9fCisjZGVmaW5lIF9fTElNQV9CQ0FTVF9IX18KKworc3RydWN0IGxp bWFfaXA7CisKK2ludCBsaW1hX2JjYXN0X2luaXQoc3RydWN0IGxpbWFfaXAgKmlwKTsKK3ZvaWQg bGltYV9iY2FzdF9maW5pKHN0cnVjdCBsaW1hX2lwICppcCk7CisKK3ZvaWQgbGltYV9iY2FzdF9l bmFibGUoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYsIGludCBudW1fcHApOworCisjZW5kaWYKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfY3R4LmMgYi9kcml2ZXJzL2dwdS9k cm0vbGltYS9saW1hX2N0eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uMTI2OTcyNjc4ZWI2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEv bGltYV9jdHguYwpAQCAtMCwwICsxLDk3IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMCBPUiBNSVQKKy8qIENvcHlyaWdodCAyMDE4LTIwMTkgUWlhbmcgWXUgPHl1cTgyNUBn bWFpbC5jb20+ICovCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICJsaW1h X2RldmljZS5oIgorI2luY2x1ZGUgImxpbWFfY3R4LmgiCisKK2ludCBsaW1hX2N0eF9jcmVhdGUo c3RydWN0IGxpbWFfZGV2aWNlICpkZXYsIHN0cnVjdCBsaW1hX2N0eF9tZ3IgKm1nciwgdTMyICpp ZCkKK3sKKwlzdHJ1Y3QgbGltYV9jdHggKmN0eDsKKwlpbnQgaSwgZXJyOworCisJY3R4ID0ga3ph bGxvYyhzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOworCWlmICghY3R4KQorCQlyZXR1cm4gLUVO T01FTTsKKwljdHgtPmRldiA9IGRldjsKKwlrcmVmX2luaXQoJmN0eC0+cmVmY250KTsKKworCWZv ciAoaSA9IDA7IGkgPCBsaW1hX3BpcGVfbnVtOyBpKyspIHsKKwkJZXJyID0gbGltYV9zY2hlZF9j b250ZXh0X2luaXQoZGV2LT5waXBlICsgaSwgY3R4LT5jb250ZXh0ICsgaSwgJmN0eC0+Z3VpbHR5 KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dDA7CisJfQorCisJZXJyID0geGFfYWxsb2Mo Jm1nci0+aGFuZGxlcywgaWQsIFVJTlRfTUFYLCBjdHgsIEdGUF9LRVJORUwpOworCWlmIChlcnIg PCAwKQorCQlnb3RvIGVycl9vdXQwOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXQwOgorCWZvciAo aS0tOyBpID49IDA7IGktLSkKKwkJbGltYV9zY2hlZF9jb250ZXh0X2ZpbmkoZGV2LT5waXBlICsg aSwgY3R4LT5jb250ZXh0ICsgaSk7CisJa2ZyZWUoY3R4KTsKKwlyZXR1cm4gZXJyOworfQorCitz dGF0aWMgdm9pZCBsaW1hX2N0eF9kb19yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpCit7CisJc3Ry dWN0IGxpbWFfY3R4ICpjdHggPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgbGltYV9jdHgsIHJl ZmNudCk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGltYV9waXBlX251bTsgaSsrKQor CQlsaW1hX3NjaGVkX2NvbnRleHRfZmluaShjdHgtPmRldi0+cGlwZSArIGksIGN0eC0+Y29udGV4 dCArIGkpOworCWtmcmVlKGN0eCk7Cit9CisKK2ludCBsaW1hX2N0eF9mcmVlKHN0cnVjdCBsaW1h X2N0eF9tZ3IgKm1nciwgdTMyIGlkKQoreworCXN0cnVjdCBsaW1hX2N0eCAqY3R4OworCisJbXV0 ZXhfbG9jaygmbWdyLT5sb2NrKTsKKwljdHggPSB4YV9lcmFzZSgmbWdyLT5oYW5kbGVzLCBpZCk7 CisJaWYgKGN0eCkgeworCQlrcmVmX3B1dCgmY3R4LT5yZWZjbnQsIGxpbWFfY3R4X2RvX3JlbGVh c2UpOworCQlyZXR1cm4gMDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZtZ3ItPmxvY2spOworCXJldHVy biAtRUlOVkFMOworfQorCitzdHJ1Y3QgbGltYV9jdHggKmxpbWFfY3R4X2dldChzdHJ1Y3QgbGlt YV9jdHhfbWdyICptZ3IsIHUzMiBpZCkKK3sKKwlzdHJ1Y3QgbGltYV9jdHggKmN0eDsKKworCW11 dGV4X2xvY2soJm1nci0+bG9jayk7CisJY3R4ID0geGFfbG9hZCgmbWdyLT5oYW5kbGVzLCBpZCk7 CisJaWYgKGN0eCkKKwkJa3JlZl9nZXQoJmN0eC0+cmVmY250KTsKKwltdXRleF91bmxvY2soJm1n ci0+bG9jayk7CisJcmV0dXJuIGN0eDsKK30KKwordm9pZCBsaW1hX2N0eF9wdXQoc3RydWN0IGxp bWFfY3R4ICpjdHgpCit7CisJa3JlZl9wdXQoJmN0eC0+cmVmY250LCBsaW1hX2N0eF9kb19yZWxl YXNlKTsKK30KKwordm9pZCBsaW1hX2N0eF9tZ3JfaW5pdChzdHJ1Y3QgbGltYV9jdHhfbWdyICpt Z3IpCit7CisJbXV0ZXhfaW5pdCgmbWdyLT5sb2NrKTsKKwl4YV9pbml0X2ZsYWdzKCZtZ3ItPmhh bmRsZXMsIFhBX0ZMQUdTX0FMTE9DKTsKK30KKwordm9pZCBsaW1hX2N0eF9tZ3JfZmluaShzdHJ1 Y3QgbGltYV9jdHhfbWdyICptZ3IpCit7CisJc3RydWN0IGxpbWFfY3R4ICpjdHg7CisJdW5zaWdu ZWQgbG9uZyBpZDsKKworCXhhX2Zvcl9lYWNoKCZtZ3ItPmhhbmRsZXMsIGlkLCBjdHgpIHsKKwkJ a3JlZl9wdXQoJmN0eC0+cmVmY250LCBsaW1hX2N0eF9kb19yZWxlYXNlKTsKKwl9CisKKwl4YV9k ZXN0cm95KCZtZ3ItPmhhbmRsZXMpOworCW11dGV4X2Rlc3Ryb3koJm1nci0+bG9jayk7Cit9CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2N0eC5oIGIvZHJpdmVycy9ncHUv ZHJtL2xpbWEvbGltYV9jdHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLjYxNTRlNWM5YmZlNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1h L2xpbWFfY3R4LmgKQEAgLTAsMCArMSwzMCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAgT1IgTUlUICovCisvKiBDb3B5cmlnaHQgMjAxOC0yMDE5IFFpYW5nIFl1IDx5dXE4 MjVAZ21haWwuY29tPiAqLworCisjaWZuZGVmIF9fTElNQV9DVFhfSF9fCisjZGVmaW5lIF9fTElN QV9DVFhfSF9fCisKKyNpbmNsdWRlIDxsaW51eC94YXJyYXkuaD4KKworI2luY2x1ZGUgImxpbWFf ZGV2aWNlLmgiCisKK3N0cnVjdCBsaW1hX2N0eCB7CisJc3RydWN0IGtyZWYgcmVmY250OworCXN0 cnVjdCBsaW1hX2RldmljZSAqZGV2OworCXN0cnVjdCBsaW1hX3NjaGVkX2NvbnRleHQgY29udGV4 dFtsaW1hX3BpcGVfbnVtXTsKKwlhdG9taWNfdCBndWlsdHk7Cit9OworCitzdHJ1Y3QgbGltYV9j dHhfbWdyIHsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlzdHJ1Y3QgeGFycmF5IGhhbmRsZXM7Cit9 OworCitpbnQgbGltYV9jdHhfY3JlYXRlKHN0cnVjdCBsaW1hX2RldmljZSAqZGV2LCBzdHJ1Y3Qg bGltYV9jdHhfbWdyICptZ3IsIHUzMiAqaWQpOworaW50IGxpbWFfY3R4X2ZyZWUoc3RydWN0IGxp bWFfY3R4X21nciAqbWdyLCB1MzIgaWQpOworc3RydWN0IGxpbWFfY3R4ICpsaW1hX2N0eF9nZXQo c3RydWN0IGxpbWFfY3R4X21nciAqbWdyLCB1MzIgaWQpOwordm9pZCBsaW1hX2N0eF9wdXQoc3Ry dWN0IGxpbWFfY3R4ICpjdHgpOwordm9pZCBsaW1hX2N0eF9tZ3JfaW5pdChzdHJ1Y3QgbGltYV9j dHhfbWdyICptZ3IpOwordm9pZCBsaW1hX2N0eF9tZ3JfZmluaShzdHJ1Y3QgbGltYV9jdHhfbWdy ICptZ3IpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFf ZGV2aWNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2RldmljZS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTcwZDBlOTNmOWE5Ci0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kZXZpY2UuYwpAQCAtMCwwICsxLDM4NSBA QAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisvKiBDb3B5cmln aHQgMjAxNy0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaW5jbHVkZSA8 bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKyNp bmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2lu Y2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSAibGltYV9kZXZpY2Uu aCIKKyNpbmNsdWRlICJsaW1hX2dwLmgiCisjaW5jbHVkZSAibGltYV9wcC5oIgorI2luY2x1ZGUg ImxpbWFfbW11LmgiCisjaW5jbHVkZSAibGltYV9wbXUuaCIKKyNpbmNsdWRlICJsaW1hX2wyX2Nh Y2hlLmgiCisjaW5jbHVkZSAibGltYV9kbGJ1LmgiCisjaW5jbHVkZSAibGltYV9iY2FzdC5oIgor I2luY2x1ZGUgImxpbWFfdm0uaCIKKworc3RydWN0IGxpbWFfaXBfZGVzYyB7CisJY2hhciAqbmFt ZTsKKwljaGFyICppcnFfbmFtZTsKKwlib29sIG11c3RfaGF2ZVtsaW1hX2dwdV9udW1dOworCWlu dCBvZmZzZXRbbGltYV9ncHVfbnVtXTsKKworCWludCAoKmluaXQpKHN0cnVjdCBsaW1hX2lwICpp cCk7CisJdm9pZCAoKmZpbmkpKHN0cnVjdCBsaW1hX2lwICppcCk7Cit9OworCisjZGVmaW5lIExJ TUFfSVBfREVTQyhpcG5hbWUsIG1zdDAsIG1zdDEsIG9mZjAsIG9mZjEsIGZ1bmMsIGlycSkgXAor CVtsaW1hX2lwXyMjaXBuYW1lXSA9IHsgXAorCQkubmFtZSA9ICNpcG5hbWUsIFwKKwkJLmlycV9u YW1lID0gaXJxLCBcCisJCS5tdXN0X2hhdmUgPSB7IFwKKwkJCVtsaW1hX2dwdV9tYWxpNDAwXSA9 IG1zdDAsIFwKKwkJCVtsaW1hX2dwdV9tYWxpNDUwXSA9IG1zdDEsIFwKKwkJfSwgXAorCQkub2Zm c2V0ID0geyBcCisJCQlbbGltYV9ncHVfbWFsaTQwMF0gPSBvZmYwLCBcCisJCQlbbGltYV9ncHVf bWFsaTQ1MF0gPSBvZmYxLCBcCisJCX0sIFwKKwkJLmluaXQgPSBsaW1hXyMjZnVuYyMjX2luaXQs IFwKKwkJLmZpbmkgPSBsaW1hXyMjZnVuYyMjX2ZpbmksIFwKKwl9CisKK3N0YXRpYyBzdHJ1Y3Qg bGltYV9pcF9kZXNjIGxpbWFfaXBfZGVzY1tsaW1hX2lwX251bV0gPSB7CisJTElNQV9JUF9ERVND KHBtdSwgICAgICAgICBmYWxzZSwgZmFsc2UsIDB4MDIwMDAsIDB4MDIwMDAsIHBtdSwgICAgICAi cG11IiksCisJTElNQV9JUF9ERVNDKGwyX2NhY2hlMCwgICB0cnVlLCAgdHJ1ZSwgIDB4MDEwMDAs IDB4MTAwMDAsIGwyX2NhY2hlLCBOVUxMKSwKKwlMSU1BX0lQX0RFU0MobDJfY2FjaGUxLCAgIGZh bHNlLCB0cnVlLCAgLTEsICAgICAgMHgwMTAwMCwgbDJfY2FjaGUsIE5VTEwpLAorCUxJTUFfSVBf REVTQyhsMl9jYWNoZTIsICAgZmFsc2UsIGZhbHNlLCAtMSwgICAgICAweDExMDAwLCBsMl9jYWNo ZSwgTlVMTCksCisJTElNQV9JUF9ERVNDKGdwLCAgICAgICAgICB0cnVlLCAgdHJ1ZSwgIDB4MDAw MDAsIDB4MDAwMDAsIGdwLCAgICAgICAiZ3AiKSwKKwlMSU1BX0lQX0RFU0MocHAwLCAgICAgICAg IHRydWUsICB0cnVlLCAgMHgwODAwMCwgMHgwODAwMCwgcHAsICAgICAgICJwcDAiKSwKKwlMSU1B X0lQX0RFU0MocHAxLCAgICAgICAgIGZhbHNlLCBmYWxzZSwgMHgwQTAwMCwgMHgwQTAwMCwgcHAs ICAgICAgICJwcDEiKSwKKwlMSU1BX0lQX0RFU0MocHAyLCAgICAgICAgIGZhbHNlLCBmYWxzZSwg MHgwQzAwMCwgMHgwQzAwMCwgcHAsICAgICAgICJwcDIiKSwKKwlMSU1BX0lQX0RFU0MocHAzLCAg ICAgICAgIGZhbHNlLCBmYWxzZSwgMHgwRTAwMCwgMHgwRTAwMCwgcHAsICAgICAgICJwcDMiKSwK KwlMSU1BX0lQX0RFU0MocHA0LCAgICAgICAgIGZhbHNlLCBmYWxzZSwgLTEsICAgICAgMHgyODAw MCwgcHAsICAgICAgICJwcDQiKSwKKwlMSU1BX0lQX0RFU0MocHA1LCAgICAgICAgIGZhbHNlLCBm YWxzZSwgLTEsICAgICAgMHgyQTAwMCwgcHAsICAgICAgICJwcDUiKSwKKwlMSU1BX0lQX0RFU0Mo cHA2LCAgICAgICAgIGZhbHNlLCBmYWxzZSwgLTEsICAgICAgMHgyQzAwMCwgcHAsICAgICAgICJw cDYiKSwKKwlMSU1BX0lQX0RFU0MocHA3LCAgICAgICAgIGZhbHNlLCBmYWxzZSwgLTEsICAgICAg MHgyRTAwMCwgcHAsICAgICAgICJwcDciKSwKKwlMSU1BX0lQX0RFU0MoZ3BtbXUsICAgICAgIHRy dWUsICB0cnVlLCAgMHgwMzAwMCwgMHgwMzAwMCwgbW11LCAgICAgICJncG1tdSIpLAorCUxJTUFf SVBfREVTQyhwcG1tdTAsICAgICAgdHJ1ZSwgIHRydWUsICAweDA0MDAwLCAweDA0MDAwLCBtbXUs ICAgICAgInBwbW11MCIpLAorCUxJTUFfSVBfREVTQyhwcG1tdTEsICAgICAgZmFsc2UsIGZhbHNl LCAweDA1MDAwLCAweDA1MDAwLCBtbXUsICAgICAgInBwbW11MSIpLAorCUxJTUFfSVBfREVTQyhw cG1tdTIsICAgICAgZmFsc2UsIGZhbHNlLCAweDA2MDAwLCAweDA2MDAwLCBtbXUsICAgICAgInBw bW11MiIpLAorCUxJTUFfSVBfREVTQyhwcG1tdTMsICAgICAgZmFsc2UsIGZhbHNlLCAweDA3MDAw LCAweDA3MDAwLCBtbXUsICAgICAgInBwbW11MyIpLAorCUxJTUFfSVBfREVTQyhwcG1tdTQsICAg ICAgZmFsc2UsIGZhbHNlLCAtMSwgICAgICAweDFDMDAwLCBtbXUsICAgICAgInBwbW11NCIpLAor CUxJTUFfSVBfREVTQyhwcG1tdTUsICAgICAgZmFsc2UsIGZhbHNlLCAtMSwgICAgICAweDFEMDAw LCBtbXUsICAgICAgInBwbW11NSIpLAorCUxJTUFfSVBfREVTQyhwcG1tdTYsICAgICAgZmFsc2Us IGZhbHNlLCAtMSwgICAgICAweDFFMDAwLCBtbXUsICAgICAgInBwbW11NiIpLAorCUxJTUFfSVBf REVTQyhwcG1tdTcsICAgICAgZmFsc2UsIGZhbHNlLCAtMSwgICAgICAweDFGMDAwLCBtbXUsICAg ICAgInBwbW11NyIpLAorCUxJTUFfSVBfREVTQyhkbGJ1LCAgICAgICAgZmFsc2UsIHRydWUsICAt MSwgICAgICAweDE0MDAwLCBkbGJ1LCAgICAgTlVMTCksCisJTElNQV9JUF9ERVNDKGJjYXN0LCAg ICAgICBmYWxzZSwgdHJ1ZSwgIC0xLCAgICAgIDB4MTMwMDAsIGJjYXN0LCAgICBOVUxMKSwKKwlM SU1BX0lQX0RFU0MocHBfYmNhc3QsICAgIGZhbHNlLCB0cnVlLCAgLTEsICAgICAgMHgxNjAwMCwg cHBfYmNhc3QsICJwcCIpLAorCUxJTUFfSVBfREVTQyhwcG1tdV9iY2FzdCwgZmFsc2UsIHRydWUs ICAtMSwgICAgICAweDE1MDAwLCBtbXUsICAgICAgTlVMTCksCit9OworCitjb25zdCBjaGFyICps aW1hX2lwX25hbWUoc3RydWN0IGxpbWFfaXAgKmlwKQoreworCXJldHVybiBsaW1hX2lwX2Rlc2Nb aXAtPmlkXS5uYW1lOworfQorCitzdGF0aWMgaW50IGxpbWFfY2xrX2luaXQoc3RydWN0IGxpbWFf ZGV2aWNlICpkZXYpCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIGJ1c19yYXRlLCBncHVf cmF0ZTsKKworCWRldi0+Y2xrX2J1cyA9IGRldm1fY2xrX2dldChkZXYtPmRldiwgImJ1cyIpOwor CWlmIChJU19FUlIoZGV2LT5jbGtfYnVzKSkgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiZ2V0IGJ1 cyBjbGsgZmFpbGVkICVsZFxuIiwgUFRSX0VSUihkZXYtPmNsa19idXMpKTsKKwkJcmV0dXJuIFBU Ul9FUlIoZGV2LT5jbGtfYnVzKTsKKwl9CisKKwlkZXYtPmNsa19ncHUgPSBkZXZtX2Nsa19nZXQo ZGV2LT5kZXYsICJjb3JlIik7CisJaWYgKElTX0VSUihkZXYtPmNsa19ncHUpKSB7CisJCWRldl9l cnIoZGV2LT5kZXYsICJnZXQgY29yZSBjbGsgZmFpbGVkICVsZFxuIiwgUFRSX0VSUihkZXYtPmNs a19ncHUpKTsKKwkJcmV0dXJuIFBUUl9FUlIoZGV2LT5jbGtfZ3B1KTsKKwl9CisKKwlidXNfcmF0 ZSA9IGNsa19nZXRfcmF0ZShkZXYtPmNsa19idXMpOworCWRldl9pbmZvKGRldi0+ZGV2LCAiYnVz IHJhdGUgPSAlbHVcbiIsIGJ1c19yYXRlKTsKKworCWdwdV9yYXRlID0gY2xrX2dldF9yYXRlKGRl di0+Y2xrX2dwdSk7CisJZGV2X2luZm8oZGV2LT5kZXYsICJtb2QgcmF0ZSA9ICVsdSIsIGdwdV9y YXRlKTsKKworCWVyciA9IGNsa19wcmVwYXJlX2VuYWJsZShkZXYtPmNsa19idXMpOworCWlmIChl cnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBjbGtfcHJlcGFyZV9lbmFibGUoZGV2LT5jbGtf Z3B1KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yX291dDA7CisKKwlkZXYtPnJlc2V0ID0gZGV2 bV9yZXNldF9jb250cm9sX2dldF9vcHRpb25hbChkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VS UihkZXYtPnJlc2V0KSkgeworCQllcnIgPSBQVFJfRVJSKGRldi0+cmVzZXQpOworCQlnb3RvIGVy cm9yX291dDE7CisJfSBlbHNlIGlmIChkZXYtPnJlc2V0ICE9IE5VTEwpIHsKKwkJZXJyID0gcmVz ZXRfY29udHJvbF9kZWFzc2VydChkZXYtPnJlc2V0KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJy b3Jfb3V0MTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyb3Jfb3V0MToKKwljbGtfZGlzYWJsZV91 bnByZXBhcmUoZGV2LT5jbGtfZ3B1KTsKK2Vycm9yX291dDA6CisJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGRldi0+Y2xrX2J1cyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgbGltYV9j bGtfZmluaShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2LT5yZXNldCAhPSBO VUxMKQorCQlyZXNldF9jb250cm9sX2Fzc2VydChkZXYtPnJlc2V0KTsKKwljbGtfZGlzYWJsZV91 bnByZXBhcmUoZGV2LT5jbGtfZ3B1KTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZGV2LT5jbGtf YnVzKTsKK30KKworc3RhdGljIGludCBsaW1hX3JlZ3VsYXRvcl9pbml0KHN0cnVjdCBsaW1hX2Rl dmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwlkZXYtPnJlZ3VsYXRvciA9IGRldm1fcmVndWxh dG9yX2dldF9vcHRpb25hbChkZXYtPmRldiwgIm1hbGkiKTsKKwlpZiAoSVNfRVJSKGRldi0+cmVn dWxhdG9yKSkgeworCQlyZXQgPSBQVFJfRVJSKGRldi0+cmVndWxhdG9yKTsKKwkJZGV2LT5yZWd1 bGF0b3IgPSBOVUxMOworCQlpZiAocmV0ID09IC1FTk9ERVYpCisJCQlyZXR1cm4gMDsKKwkJZGV2 X2VycihkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgcmVndWxhdG9yOiAlZFxuIiwgcmV0KTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKGRldi0+cmVndWxhdG9y KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJs ZSByZWd1bGF0b3I6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAw OworfQorCitzdGF0aWMgdm9pZCBsaW1hX3JlZ3VsYXRvcl9maW5pKHN0cnVjdCBsaW1hX2Rldmlj ZSAqZGV2KQoreworCWlmIChkZXYtPnJlZ3VsYXRvcikKKwkJcmVndWxhdG9yX2Rpc2FibGUoZGV2 LT5yZWd1bGF0b3IpOworfQorCitzdGF0aWMgaW50IGxpbWFfaW5pdF9pcChzdHJ1Y3QgbGltYV9k ZXZpY2UgKmRldiwgaW50IGluZGV4KQoreworCXN0cnVjdCBsaW1hX2lwX2Rlc2MgKmRlc2MgPSBs aW1hX2lwX2Rlc2MgKyBpbmRleDsKKwlzdHJ1Y3QgbGltYV9pcCAqaXAgPSBkZXYtPmlwICsgaW5k ZXg7CisJaW50IG9mZnNldCA9IGRlc2MtPm9mZnNldFtkZXYtPmlkXTsKKwlib29sIG11c3QgPSBk ZXNjLT5tdXN0X2hhdmVbZGV2LT5pZF07CisJaW50IGVycjsKKworCWlmIChvZmZzZXQgPCAwKQor CQlyZXR1cm4gMDsKKworCWlwLT5kZXYgPSBkZXY7CisJaXAtPmlkID0gaW5kZXg7CisJaXAtPmlv bWVtID0gZGV2LT5pb21lbSArIG9mZnNldDsKKwlpZiAoZGVzYy0+aXJxX25hbWUpIHsKKwkJZXJy ID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoZGV2LT5wZGV2LCBkZXNjLT5pcnFfbmFtZSk7CisJ CWlmIChlcnIgPCAwKQorCQkJZ290byBvdXQ7CisJCWlwLT5pcnEgPSBlcnI7CisJfQorCisJZXJy ID0gZGVzYy0+aW5pdChpcCk7CisJaWYgKCFlcnIpIHsKKwkJaXAtPnByZXNlbnQgPSB0cnVlOwor CQlyZXR1cm4gMDsKKwl9CisKK291dDoKKwlyZXR1cm4gbXVzdCA/IGVyciA6IDA7Cit9CisKK3N0 YXRpYyB2b2lkIGxpbWFfZmluaV9pcChzdHJ1Y3QgbGltYV9kZXZpY2UgKmxkZXYsIGludCBpbmRl eCkKK3sKKwlzdHJ1Y3QgbGltYV9pcF9kZXNjICpkZXNjID0gbGltYV9pcF9kZXNjICsgaW5kZXg7 CisJc3RydWN0IGxpbWFfaXAgKmlwID0gbGRldi0+aXAgKyBpbmRleDsKKworCWlmIChpcC0+cHJl c2VudCkKKwkJZGVzYy0+ZmluaShpcCk7Cit9CisKK3N0YXRpYyBpbnQgbGltYV9pbml0X2dwX3Bp cGUoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAq cGlwZSA9IGRldi0+cGlwZSArIGxpbWFfcGlwZV9ncDsKKwlpbnQgZXJyOworCisJZXJyID0gbGlt YV9zY2hlZF9waXBlX2luaXQocGlwZSwgImdwIik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsK KworCXBpcGUtPmwyX2NhY2hlW3BpcGUtPm51bV9sMl9jYWNoZSsrXSA9IGRldi0+aXAgKyBsaW1h X2lwX2wyX2NhY2hlMDsKKwlwaXBlLT5tbXVbcGlwZS0+bnVtX21tdSsrXSA9IGRldi0+aXAgKyBs aW1hX2lwX2dwbW11OworCXBpcGUtPnByb2Nlc3NvcltwaXBlLT5udW1fcHJvY2Vzc29yKytdID0g ZGV2LT5pcCArIGxpbWFfaXBfZ3A7CisKKwllcnIgPSBsaW1hX2dwX3BpcGVfaW5pdChkZXYpOwor CWlmIChlcnIpIHsKKwkJbGltYV9zY2hlZF9waXBlX2ZpbmkocGlwZSk7CisJCXJldHVybiBlcnI7 CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfZmluaV9ncF9waXBlKHN0 cnVjdCBsaW1hX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUg PSBkZXYtPnBpcGUgKyBsaW1hX3BpcGVfZ3A7CisKKwlsaW1hX2dwX3BpcGVfZmluaShkZXYpOwor CWxpbWFfc2NoZWRfcGlwZV9maW5pKHBpcGUpOworfQorCitzdGF0aWMgaW50IGxpbWFfaW5pdF9w cF9waXBlKHN0cnVjdCBsaW1hX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBsaW1hX3NjaGVkX3Bp cGUgKnBpcGUgPSBkZXYtPnBpcGUgKyBsaW1hX3BpcGVfcHA7CisJaW50IGVyciwgaTsKKworCWVy ciA9IGxpbWFfc2NoZWRfcGlwZV9pbml0KHBpcGUsICJwcCIpOworCWlmIChlcnIpCisJCXJldHVy biBlcnI7CisKKwlmb3IgKGkgPSAwOyBpIDwgTElNQV9TQ0hFRF9QSVBFX01BWF9QUk9DRVNTT1I7 IGkrKykgeworCQlzdHJ1Y3QgbGltYV9pcCAqcHAgPSBkZXYtPmlwICsgbGltYV9pcF9wcDAgKyBp OworCQlzdHJ1Y3QgbGltYV9pcCAqcHBtbXUgPSBkZXYtPmlwICsgbGltYV9pcF9wcG1tdTAgKyBp OworCQlzdHJ1Y3QgbGltYV9pcCAqbDJfY2FjaGU7CisKKwkJaWYgKGRldi0+aWQgPT0gbGltYV9n cHVfbWFsaTQwMCkKKwkJCWwyX2NhY2hlID0gZGV2LT5pcCArIGxpbWFfaXBfbDJfY2FjaGUwOwor CQllbHNlCisJCQlsMl9jYWNoZSA9IGRldi0+aXAgKyBsaW1hX2lwX2wyX2NhY2hlMSArIChpID4+ IDIpOworCisJCWlmIChwcC0+cHJlc2VudCAmJiBwcG1tdS0+cHJlc2VudCAmJiBsMl9jYWNoZS0+ cHJlc2VudCkgeworCQkJcGlwZS0+bW11W3BpcGUtPm51bV9tbXUrK10gPSBwcG1tdTsKKwkJCXBp cGUtPnByb2Nlc3NvcltwaXBlLT5udW1fcHJvY2Vzc29yKytdID0gcHA7CisJCQlpZiAoIXBpcGUt PmwyX2NhY2hlW2kgPj4gMl0pCisJCQkJcGlwZS0+bDJfY2FjaGVbcGlwZS0+bnVtX2wyX2NhY2hl KytdID0gbDJfY2FjaGU7CisJCX0KKwl9CisKKwlpZiAoZGV2LT5pcFtsaW1hX2lwX2JjYXN0XS5w cmVzZW50KSB7CisJCXBpcGUtPmJjYXN0X3Byb2Nlc3NvciA9IGRldi0+aXAgKyBsaW1hX2lwX3Bw X2JjYXN0OworCQlwaXBlLT5iY2FzdF9tbXUgPSBkZXYtPmlwICsgbGltYV9pcF9wcG1tdV9iY2Fz dDsKKwl9CisKKwllcnIgPSBsaW1hX3BwX3BpcGVfaW5pdChkZXYpOworCWlmIChlcnIpIHsKKwkJ bGltYV9zY2hlZF9waXBlX2ZpbmkocGlwZSk7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfZmluaV9wcF9waXBlKHN0cnVjdCBsaW1hX2Rldmlj ZSAqZGV2KQoreworCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUgPSBkZXYtPnBpcGUgKyBs aW1hX3BpcGVfcHA7CisKKwlsaW1hX3BwX3BpcGVfZmluaShkZXYpOworCWxpbWFfc2NoZWRfcGlw ZV9maW5pKHBpcGUpOworfQorCitpbnQgbGltYV9kZXZpY2VfaW5pdChzdHJ1Y3QgbGltYV9kZXZp Y2UgKmxkZXYpCit7CisJaW50IGVyciwgaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCWRt YV9zZXRfY29oZXJlbnRfbWFzayhsZGV2LT5kZXYsIERNQV9CSVRfTUFTSygzMikpOworCisJZXJy ID0gbGltYV9jbGtfaW5pdChsZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIobGRldi0+ZGV2 LCAiY2xrIGluaXQgZmFpbCAlZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIg PSBsaW1hX3JlZ3VsYXRvcl9pbml0KGxkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihsZGV2 LT5kZXYsICJyZWd1bGF0b3IgaW5pdCBmYWlsICVkXG4iLCBlcnIpOworCQlnb3RvIGVycl9vdXQw OworCX0KKworCWxkZXYtPmVtcHR5X3ZtID0gbGltYV92bV9jcmVhdGUobGRldik7CisJaWYgKCFs ZGV2LT5lbXB0eV92bSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQxOworCX0K KworCWxkZXYtPnZhX3N0YXJ0ID0gMDsKKwlpZiAobGRldi0+aWQgPT0gbGltYV9ncHVfbWFsaTQ1 MCkgeworCQlsZGV2LT52YV9lbmQgPSBMSU1BX1ZBX1JFU0VSVkVfU1RBUlQ7CisJCWxkZXYtPmRs YnVfY3B1ID0gZG1hX2FsbG9jX3djKAorCQkJbGRldi0+ZGV2LCBMSU1BX1BBR0VfU0laRSwKKwkJ CSZsZGV2LT5kbGJ1X2RtYSwgR0ZQX0tFUk5FTCk7CisJCWlmICghbGRldi0+ZGxidV9jcHUpIHsK KwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9vdXQyOworCQl9CisJfSBlbHNlCisJCWxk ZXYtPnZhX2VuZCA9IExJTUFfVkFfUkVTRVJWRV9FTkQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRf cmVzb3VyY2UobGRldi0+cGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWxkZXYtPmlvbWVtID0g ZGV2bV9pb3JlbWFwX3Jlc291cmNlKGxkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGxkZXYt PmlvbWVtKSkgeworCQlkZXZfZXJyKGxkZXYtPmRldiwgImZhaWwgdG8gaW9yZW1hcCBpb21lbVxu Iik7CisJCWVyciA9IFBUUl9FUlIobGRldi0+aW9tZW0pOworCQlnb3RvIGVycl9vdXQzOworCX0K KworCWZvciAoaSA9IDA7IGkgPCBsaW1hX2lwX251bTsgaSsrKSB7CisJCWVyciA9IGxpbWFfaW5p dF9pcChsZGV2LCBpKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dDQ7CisJfQorCisJZXJy ID0gbGltYV9pbml0X2dwX3BpcGUobGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0NDsK KworCWVyciA9IGxpbWFfaW5pdF9wcF9waXBlKGxkZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJy X291dDU7CisKKwlyZXR1cm4gMDsKKworZXJyX291dDU6CisJbGltYV9maW5pX2dwX3BpcGUobGRl dik7CitlcnJfb3V0NDoKKwl3aGlsZSAoLS1pID49IDApCisJCWxpbWFfZmluaV9pcChsZGV2LCBp KTsKK2Vycl9vdXQzOgorCWlmIChsZGV2LT5kbGJ1X2NwdSkKKwkJZG1hX2ZyZWVfd2MobGRldi0+ ZGV2LCBMSU1BX1BBR0VfU0laRSwKKwkJCSAgICBsZGV2LT5kbGJ1X2NwdSwgbGRldi0+ZGxidV9k bWEpOworZXJyX291dDI6CisJbGltYV92bV9wdXQobGRldi0+ZW1wdHlfdm0pOworZXJyX291dDE6 CisJbGltYV9yZWd1bGF0b3JfZmluaShsZGV2KTsKK2Vycl9vdXQwOgorCWxpbWFfY2xrX2Zpbmko bGRldik7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBsaW1hX2RldmljZV9maW5pKHN0cnVjdCBs aW1hX2RldmljZSAqbGRldikKK3sKKwlpbnQgaTsKKworCWxpbWFfZmluaV9wcF9waXBlKGxkZXYp OworCWxpbWFfZmluaV9ncF9waXBlKGxkZXYpOworCisJZm9yIChpID0gbGltYV9pcF9udW0gLSAx OyBpID49IDA7IGktLSkKKwkJbGltYV9maW5pX2lwKGxkZXYsIGkpOworCisJaWYgKGxkZXYtPmRs YnVfY3B1KQorCQlkbWFfZnJlZV93YyhsZGV2LT5kZXYsIExJTUFfUEFHRV9TSVpFLAorCQkJICAg IGxkZXYtPmRsYnVfY3B1LCBsZGV2LT5kbGJ1X2RtYSk7CisKKwlsaW1hX3ZtX3B1dChsZGV2LT5l bXB0eV92bSk7CisKKwlsaW1hX3JlZ3VsYXRvcl9maW5pKGxkZXYpOworCisJbGltYV9jbGtfZmlu aShsZGV2KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZGV2aWNl LmggYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2RldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzExNThkODYyNzFjCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kZXZpY2UuaApAQCAtMCwwICsxLDEzMSBAQAorLyog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCisvKiBDb3B5cmlnaHQg MjAxOC0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaWZuZGVmIF9fTElN QV9ERVZJQ0VfSF9fCisjZGVmaW5lIF9fTElNQV9ERVZJQ0VfSF9fCisKKyNpbmNsdWRlIDxkcm0v ZHJtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJsaW1h X3NjaGVkLmgiCisKK2VudW0gbGltYV9ncHVfaWQgeworCWxpbWFfZ3B1X21hbGk0MDAgPSAwLAor CWxpbWFfZ3B1X21hbGk0NTAsCisJbGltYV9ncHVfbnVtLAorfTsKKworZW51bSBsaW1hX2lwX2lk IHsKKwlsaW1hX2lwX3BtdSwKKwlsaW1hX2lwX2dwbW11LAorCWxpbWFfaXBfcHBtbXUwLAorCWxp bWFfaXBfcHBtbXUxLAorCWxpbWFfaXBfcHBtbXUyLAorCWxpbWFfaXBfcHBtbXUzLAorCWxpbWFf aXBfcHBtbXU0LAorCWxpbWFfaXBfcHBtbXU1LAorCWxpbWFfaXBfcHBtbXU2LAorCWxpbWFfaXBf cHBtbXU3LAorCWxpbWFfaXBfZ3AsCisJbGltYV9pcF9wcDAsCisJbGltYV9pcF9wcDEsCisJbGlt YV9pcF9wcDIsCisJbGltYV9pcF9wcDMsCisJbGltYV9pcF9wcDQsCisJbGltYV9pcF9wcDUsCisJ bGltYV9pcF9wcDYsCisJbGltYV9pcF9wcDcsCisJbGltYV9pcF9sMl9jYWNoZTAsCisJbGltYV9p cF9sMl9jYWNoZTEsCisJbGltYV9pcF9sMl9jYWNoZTIsCisJbGltYV9pcF9kbGJ1LAorCWxpbWFf aXBfYmNhc3QsCisJbGltYV9pcF9wcF9iY2FzdCwKKwlsaW1hX2lwX3BwbW11X2JjYXN0LAorCWxp bWFfaXBfbnVtLAorfTsKKworc3RydWN0IGxpbWFfZGV2aWNlOworCitzdHJ1Y3QgbGltYV9pcCB7 CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXY7CisJZW51bSBsaW1hX2lwX2lkIGlkOworCWJvb2wg cHJlc2VudDsKKworCXZvaWQgX19pb21lbSAqaW9tZW07CisJaW50IGlycTsKKworCXVuaW9uIHsK KwkJLyogZ3AvcHAgKi8KKwkJYm9vbCBhc3luY19yZXNldDsKKwkJLyogbDIgY2FjaGUgKi8KKwkJ c3BpbmxvY2tfdCBsb2NrOworCX0gZGF0YTsKK307CisKK2VudW0gbGltYV9waXBlX2lkIHsKKwls aW1hX3BpcGVfZ3AsCisJbGltYV9waXBlX3BwLAorCWxpbWFfcGlwZV9udW0sCit9OworCitzdHJ1 Y3QgbGltYV9kZXZpY2UgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCisJZW51bSBsaW1hX2dw dV9pZCBpZDsKKwl1MzIgZ3BfdmVyc2lvbjsKKwl1MzIgcHBfdmVyc2lvbjsKKwlpbnQgbnVtX3Bw OworCisJdm9pZCBfX2lvbWVtICppb21lbTsKKwlzdHJ1Y3QgY2xrICpjbGtfYnVzOworCXN0cnVj dCBjbGsgKmNsa19ncHU7CisJc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJlc2V0OworCXN0cnVjdCBy ZWd1bGF0b3IgKnJlZ3VsYXRvcjsKKworCXN0cnVjdCBsaW1hX2lwIGlwW2xpbWFfaXBfbnVtXTsK KwlzdHJ1Y3QgbGltYV9zY2hlZF9waXBlIHBpcGVbbGltYV9waXBlX251bV07CisKKwlzdHJ1Y3Qg bGltYV92bSAqZW1wdHlfdm07CisJdWludDY0X3QgdmFfc3RhcnQ7CisJdWludDY0X3QgdmFfZW5k OworCisJdTMyICpkbGJ1X2NwdTsKKwlkbWFfYWRkcl90IGRsYnVfZG1hOworfTsKKworc3RhdGlj IGlubGluZSBzdHJ1Y3QgbGltYV9kZXZpY2UgKgordG9fbGltYV9kZXYoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKK3sKKwlyZXR1cm4gZGV2LT5kZXZfcHJpdmF0ZTsKK30KKworaW50IGxpbWFfZGV2 aWNlX2luaXQoc3RydWN0IGxpbWFfZGV2aWNlICpsZGV2KTsKK3ZvaWQgbGltYV9kZXZpY2VfZmlu aShzdHJ1Y3QgbGltYV9kZXZpY2UgKmxkZXYpOworCitjb25zdCBjaGFyICpsaW1hX2lwX25hbWUo c3RydWN0IGxpbWFfaXAgKmlwKTsKKwordHlwZWRlZiBpbnQgKCpsaW1hX3BvbGxfZnVuY190KShz dHJ1Y3QgbGltYV9pcCAqKTsKKworc3RhdGljIGlubGluZSBpbnQgbGltYV9wb2xsX3RpbWVvdXQo c3RydWN0IGxpbWFfaXAgKmlwLCBsaW1hX3BvbGxfZnVuY190IGZ1bmMsCisJCQkJICAgIGludCBz bGVlcF91cywgaW50IHRpbWVvdXRfdXMpCit7CisJa3RpbWVfdCB0aW1lb3V0ID0ga3RpbWVfYWRk X3VzKGt0aW1lX2dldCgpLCB0aW1lb3V0X3VzKTsKKworCW1pZ2h0X3NsZWVwX2lmKHNsZWVwX3Vz KTsKKwl3aGlsZSAoMSkgeworCQlpZiAoZnVuYyhpcCkpCisJCQlyZXR1cm4gMDsKKworCQlpZiAo dGltZW91dF91cyAmJiBrdGltZV9jb21wYXJlKGt0aW1lX2dldCgpLCB0aW1lb3V0KSA+IDApCisJ CQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCQlpZiAoc2xlZXBfdXMpCisJCQl1c2xlZXBfcmFuZ2Uo KHNsZWVwX3VzID4+IDIpICsgMSwgc2xlZXBfdXMpOworCX0KKwlyZXR1cm4gMDsKK30KKworI2Vu ZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2RsYnUuYyBiL2RyaXZl cnMvZ3B1L2RybS9saW1hL2xpbWFfZGxidS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMC4uODM5OWNlZmZiOTRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2xpbWEvbGltYV9kbGJ1LmMKQEAgLTAsMCArMSw1OCBAQAorLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisvKiBDb3B5cmlnaHQgMjAxOC0yMDE5IFFpYW5nIFl1 IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRl IDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgImxpbWFfZGV2aWNlLmgiCisjaW5jbHVkZSAi bGltYV9kbGJ1LmgiCisjaW5jbHVkZSAibGltYV92bS5oIgorI2luY2x1ZGUgImxpbWFfcmVncy5o IgorCisjZGVmaW5lIGRsYnVfd3JpdGUocmVnLCBkYXRhKSB3cml0ZWwoZGF0YSwgaXAtPmlvbWVt ICsgcmVnKQorI2RlZmluZSBkbGJ1X3JlYWQocmVnKSByZWFkbChpcC0+aW9tZW0gKyByZWcpCisK K3ZvaWQgbGltYV9kbGJ1X2VuYWJsZShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiwgaW50IG51bV9w cCkKK3sKKwlzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlID0gZGV2LT5waXBlICsgbGltYV9w aXBlX3BwOworCXN0cnVjdCBsaW1hX2lwICppcCA9IGRldi0+aXAgKyBsaW1hX2lwX2RsYnU7CisJ aW50IGksIG1hc2sgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wcDsgaSsrKSB7CisJCXN0 cnVjdCBsaW1hX2lwICpwcCA9IHBpcGUtPnByb2Nlc3NvcltpXTsKKworCQltYXNrIHw9IDEgPDwg KHBwLT5pZCAtIGxpbWFfaXBfcHAwKTsKKwl9CisKKwlkbGJ1X3dyaXRlKExJTUFfRExCVV9QUF9F TkFCTEVfTUFTSywgbWFzayk7Cit9CisKK3ZvaWQgbGltYV9kbGJ1X2Rpc2FibGUoc3RydWN0IGxp bWFfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGxpbWFfaXAgKmlwID0gZGV2LT5pcCArIGxpbWFf aXBfZGxidTsKKworCWRsYnVfd3JpdGUoTElNQV9ETEJVX1BQX0VOQUJMRV9NQVNLLCAwKTsKK30K Kwordm9pZCBsaW1hX2RsYnVfc2V0X3JlZyhzdHJ1Y3QgbGltYV9pcCAqaXAsIHUzMiAqcmVnKQor eworCWRsYnVfd3JpdGUoTElNQV9ETEJVX1RMTElTVF9WQkFTRUFERFIsIHJlZ1swXSk7CisJZGxi dV93cml0ZShMSU1BX0RMQlVfRkJfRElNLCByZWdbMV0pOworCWRsYnVfd3JpdGUoTElNQV9ETEJV X1RMTElTVF9DT05GLCByZWdbMl0pOworCWRsYnVfd3JpdGUoTElNQV9ETEJVX1NUQVJUX1RJTEVf UE9TLCByZWdbM10pOworfQorCitpbnQgbGltYV9kbGJ1X2luaXQoc3RydWN0IGxpbWFfaXAgKmlw KQoreworCXN0cnVjdCBsaW1hX2RldmljZSAqZGV2ID0gaXAtPmRldjsKKworCWRsYnVfd3JpdGUo TElNQV9ETEJVX01BU1RFUl9UTExJU1RfUEhZU19BRERSLCBkZXYtPmRsYnVfZG1hIHwgMSk7CisJ ZGxidV93cml0ZShMSU1BX0RMQlVfTUFTVEVSX1RMTElTVF9WQUREUiwgTElNQV9WQV9SRVNFUlZF X0RMQlUpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbGltYV9kbGJ1X2Zpbmkoc3RydWN0IGxp bWFfaXAgKmlwKQoreworCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1h X2RsYnUuaCBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZGxidS5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTZmODc3OTg0NDY2Ci0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kbGJ1LmgKQEAgLTAsMCArMSwxOCBAQAorLyog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCisvKiBDb3B5cmlnaHQg MjAxOC0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaWZuZGVmIF9fTElN QV9ETEJVX0hfXworI2RlZmluZSBfX0xJTUFfRExCVV9IX18KKworc3RydWN0IGxpbWFfaXA7Citz dHJ1Y3QgbGltYV9kZXZpY2U7CisKK3ZvaWQgbGltYV9kbGJ1X2VuYWJsZShzdHJ1Y3QgbGltYV9k ZXZpY2UgKmRldiwgaW50IG51bV9wcCk7Cit2b2lkIGxpbWFfZGxidV9kaXNhYmxlKHN0cnVjdCBs aW1hX2RldmljZSAqZGV2KTsKKwordm9pZCBsaW1hX2RsYnVfc2V0X3JlZyhzdHJ1Y3QgbGltYV9p cCAqaXAsIHUzMiAqcmVnKTsKKworaW50IGxpbWFfZGxidV9pbml0KHN0cnVjdCBsaW1hX2lwICpp cCk7Cit2b2lkIGxpbWFfZGxidV9maW5pKHN0cnVjdCBsaW1hX2lwICppcCk7CisKKyNlbmRpZgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kcnYuYyBiL2RyaXZlcnMvZ3B1 L2RybS9saW1hL2xpbWFfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi4xOTBkNzQ5Yzg1MWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGlt YS9saW1hX2Rydi5jCkBAIC0wLDAgKzEsMzY2IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCBPUiBNSVQKKy8qIENvcHlyaWdodCAyMDE3LTIwMTkgUWlhbmcgWXUgPHl1cTgy NUBnbWFpbC5jb20+ICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxs aW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRl IDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9pb2N0bC5oPgorI2luY2x1ZGUgPGRy bS9kcm1fZHJ2Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wcmltZS5oPgorI2luY2x1ZGUgPGRybS9s aW1hX2RybS5oPgorCisjaW5jbHVkZSAibGltYV9kcnYuaCIKKyNpbmNsdWRlICJsaW1hX2dlbS5o IgorI2luY2x1ZGUgImxpbWFfZ2VtX3ByaW1lLmgiCisjaW5jbHVkZSAibGltYV92bS5oIgorCitp bnQgbGltYV9zY2hlZF90aW1lb3V0X21zOworCitNT0RVTEVfUEFSTV9ERVNDKHNjaGVkX3RpbWVv dXRfbXMsICJ0YXNrIHJ1biB0aW1lb3V0IGluIG1zICgwID0gbm8gdGltZW91dCAoZGVmYXVsdCkp Iik7Cittb2R1bGVfcGFyYW1fbmFtZWQoc2NoZWRfdGltZW91dF9tcywgbGltYV9zY2hlZF90aW1l b3V0X21zLCBpbnQsIDA0NDQpOworCitzdGF0aWMgaW50IGxpbWFfaW9jdGxfZ2V0X3BhcmFtKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkK K3sKKwlzdHJ1Y3QgZHJtX2xpbWFfZ2V0X3BhcmFtICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgbGlt YV9kZXZpY2UgKmxkZXYgPSB0b19saW1hX2RldihkZXYpOworCisJc3dpdGNoIChhcmdzLT5wYXJh bSkgeworCWNhc2UgRFJNX0xJTUFfUEFSQU1fR1BVX0lEOgorCQlzd2l0Y2ggKGxkZXYtPmlkKSB7 CisJCWNhc2UgbGltYV9ncHVfbWFsaTQwMDoKKwkJCWFyZ3MtPnZhbHVlID0gRFJNX0xJTUFfUEFS QU1fR1BVX0lEX01BTEk0MDA7CisJCQlicmVhazsKKwkJY2FzZSBsaW1hX2dwdV9tYWxpNDUwOgor CQkJYXJncy0+dmFsdWUgPSBEUk1fTElNQV9QQVJBTV9HUFVfSURfTUFMSTQ1MDsKKwkJCWJyZWFr OworCQlkZWZhdWx0OgorCQkJYXJncy0+dmFsdWUgPSBEUk1fTElNQV9QQVJBTV9HUFVfSURfVU5L Tk9XTjsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJY2FzZSBEUk1fTElNQV9QQVJBTV9O VU1fUFA6CisJCWFyZ3MtPnZhbHVlID0gbGRldi0+cGlwZVtsaW1hX3BpcGVfcHBdLm51bV9wcm9j ZXNzb3I7CisJCWJyZWFrOworCisJY2FzZSBEUk1fTElNQV9QQVJBTV9HUF9WRVJTSU9OOgorCQlh cmdzLT52YWx1ZSA9IGxkZXYtPmdwX3ZlcnNpb247CisJCWJyZWFrOworCisJY2FzZSBEUk1fTElN QV9QQVJBTV9QUF9WRVJTSU9OOgorCQlhcmdzLT52YWx1ZSA9IGxkZXYtPnBwX3ZlcnNpb247CisJ CWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgbGltYV9pb2N0bF9nZW1fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJt X2xpbWFfZ2VtX2NyZWF0ZSAqYXJncyA9IGRhdGE7CisKKwlpZiAoYXJncy0+ZmxhZ3MpCisJCXJl dHVybiAtRUlOVkFMOworCisJaWYgKGFyZ3MtPnNpemUgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwlyZXR1cm4gbGltYV9nZW1fY3JlYXRlX2hhbmRsZShkZXYsIGZpbGUsIGFyZ3MtPnNpemUs IGFyZ3MtPmZsYWdzLCAmYXJncy0+aGFuZGxlKTsKK30KKworc3RhdGljIGludCBsaW1hX2lvY3Rs X2dlbV9pbmZvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2xpbWFfZ2VtX2luZm8gKmFyZ3MgPSBkYXRhOwor CisJcmV0dXJuIGxpbWFfZ2VtX2dldF9pbmZvKGZpbGUsIGFyZ3MtPmhhbmRsZSwgJmFyZ3MtPnZh LCAmYXJncy0+b2Zmc2V0KTsKK30KKworc3RhdGljIGludCBsaW1hX2lvY3RsX2dlbV9zdWJtaXQo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxl KQoreworCXN0cnVjdCBkcm1fbGltYV9nZW1fc3VibWl0ICphcmdzID0gZGF0YTsKKwlzdHJ1Y3Qg bGltYV9kZXZpY2UgKmxkZXYgPSB0b19saW1hX2RldihkZXYpOworCXN0cnVjdCBsaW1hX2RybV9w cml2ICpwcml2ID0gZmlsZS0+ZHJpdmVyX3ByaXY7CisJc3RydWN0IGRybV9saW1hX2dlbV9zdWJt aXRfYm8gKmJvczsKKwlzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlOworCXN0cnVjdCBsaW1h X3NjaGVkX3Rhc2sgKnRhc2s7CisJc3RydWN0IGxpbWFfY3R4ICpjdHg7CisJc3RydWN0IGxpbWFf c3VibWl0IHN1Ym1pdCA9IHswfTsKKwlzaXplX3Qgc2l6ZTsKKwlpbnQgZXJyID0gMDsKKworCWlm IChhcmdzLT5waXBlID49IGxpbWFfcGlwZV9udW0gfHwgYXJncy0+bnJfYm9zID09IDApCisJCXJl dHVybiAtRUlOVkFMOworCisJaWYgKGFyZ3MtPmZsYWdzICYgfihMSU1BX1NVQk1JVF9GTEFHX0VY UExJQ0lUX0ZFTkNFKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwaXBlID0gbGRldi0+cGlwZSAr IGFyZ3MtPnBpcGU7CisJaWYgKGFyZ3MtPmZyYW1lX3NpemUgIT0gcGlwZS0+ZnJhbWVfc2l6ZSkK KwkJcmV0dXJuIC1FSU5WQUw7CisKKwlib3MgPSBrdmNhbGxvYyhhcmdzLT5ucl9ib3MsIHNpemVv Zigqc3VibWl0LmJvcykgKyBzaXplb2YoKnN1Ym1pdC5sYm9zKSwgR0ZQX0tFUk5FTCk7CisJaWYg KCFib3MpCisJCXJldHVybiAtRU5PTUVNOworCisJc2l6ZSA9IGFyZ3MtPm5yX2JvcyAqIHNpemVv Zigqc3VibWl0LmJvcyk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJvcywgdTY0X3RvX3VzZXJfcHRy KGFyZ3MtPmJvcyksIHNpemUpKSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0MDsKKwl9 CisKKwl0YXNrID0ga21lbV9jYWNoZV96YWxsb2MocGlwZS0+dGFza19zbGFiLCBHRlBfS0VSTkVM KTsKKwlpZiAoIXRhc2spIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQwOworCX0KKwor CXRhc2stPmZyYW1lID0gdGFzayArIDE7CisJaWYgKGNvcHlfZnJvbV91c2VyKHRhc2stPmZyYW1l LCB1NjRfdG9fdXNlcl9wdHIoYXJncy0+ZnJhbWUpLCBhcmdzLT5mcmFtZV9zaXplKSkgeworCQll cnIgPSAtRUZBVUxUOworCQlnb3RvIG91dDE7CisJfQorCisJZXJyID0gcGlwZS0+dGFza192YWxp ZGF0ZShwaXBlLCB0YXNrKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDE7CisKKwljdHggPSBsaW1h X2N0eF9nZXQoJnByaXYtPmN0eF9tZ3IsIGFyZ3MtPmN0eCk7CisJaWYgKCFjdHgpIHsKKwkJZXJy ID0gLUVOT0VOVDsKKwkJZ290byBvdXQxOworCX0KKworCXN1Ym1pdC5waXBlID0gYXJncy0+cGlw ZTsKKwlzdWJtaXQuYm9zID0gYm9zOworCXN1Ym1pdC5sYm9zID0gKHZvaWQgKilib3MgKyBzaXpl OworCXN1Ym1pdC5ucl9ib3MgPSBhcmdzLT5ucl9ib3M7CisJc3VibWl0LnRhc2sgPSB0YXNrOwor CXN1Ym1pdC5jdHggPSBjdHg7CisJc3VibWl0LmZsYWdzID0gYXJncy0+ZmxhZ3M7CisJc3VibWl0 LmluX3N5bmNbMF0gPSBhcmdzLT5pbl9zeW5jWzBdOworCXN1Ym1pdC5pbl9zeW5jWzFdID0gYXJn cy0+aW5fc3luY1sxXTsKKwlzdWJtaXQub3V0X3N5bmMgPSBhcmdzLT5vdXRfc3luYzsKKworCWVy ciA9IGxpbWFfZ2VtX3N1Ym1pdChmaWxlLCAmc3VibWl0KTsKKworCWxpbWFfY3R4X3B1dChjdHgp Oworb3V0MToKKwlpZiAoZXJyKQorCQlrbWVtX2NhY2hlX2ZyZWUocGlwZS0+dGFza19zbGFiLCB0 YXNrKTsKK291dDA6CisJa3ZmcmVlKGJvcyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlu dCBsaW1hX2lvY3RsX2dlbV93YWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEs IHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2xpbWFfZ2VtX3dhaXQgKmFy Z3MgPSBkYXRhOworCisJaWYgKGFyZ3MtPm9wICYgfihMSU1BX0dFTV9XQUlUX1JFQUR8TElNQV9H RU1fV0FJVF9XUklURSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGxpbWFfZ2VtX3dh aXQoZmlsZSwgYXJncy0+aGFuZGxlLCBhcmdzLT5vcCwgYXJncy0+dGltZW91dF9ucyk7Cit9CisK K3N0YXRpYyBpbnQgbGltYV9pb2N0bF9jdHhfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2xpbWFf Y3R4X2NyZWF0ZSAqYXJncyA9IGRhdGE7CisJc3RydWN0IGxpbWFfZHJtX3ByaXYgKnByaXYgPSBm aWxlLT5kcml2ZXJfcHJpdjsKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmxkZXYgPSB0b19saW1hX2Rl dihkZXYpOworCisJcmV0dXJuIGxpbWFfY3R4X2NyZWF0ZShsZGV2LCAmcHJpdi0+Y3R4X21nciwg JmFyZ3MtPmlkKTsKK30KKworc3RhdGljIGludCBsaW1hX2lvY3RsX2N0eF9mcmVlKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlz dHJ1Y3QgZHJtX2xpbWFfY3R4X2NyZWF0ZSAqYXJncyA9IGRhdGE7CisJc3RydWN0IGxpbWFfZHJt X3ByaXYgKnByaXYgPSBmaWxlLT5kcml2ZXJfcHJpdjsKKworCXJldHVybiBsaW1hX2N0eF9mcmVl KCZwcml2LT5jdHhfbWdyLCBhcmdzLT5pZCk7Cit9CisKK3N0YXRpYyBpbnQgbGltYV9kcm1fZHJp dmVyX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlKQor eworCWludCBlcnI7CisJc3RydWN0IGxpbWFfZHJtX3ByaXYgKnByaXY7CisJc3RydWN0IGxpbWFf ZGV2aWNlICpsZGV2ID0gdG9fbGltYV9kZXYoZGV2KTsKKworCXByaXYgPSBremFsbG9jKHNpemVv ZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisK Kwlwcml2LT52bSA9IGxpbWFfdm1fY3JlYXRlKGxkZXYpOworCWlmICghcHJpdi0+dm0pIHsKKwkJ ZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0MDsKKwl9CisKKwlsaW1hX2N0eF9tZ3JfaW5p dCgmcHJpdi0+Y3R4X21ncik7CisKKwlmaWxlLT5kcml2ZXJfcHJpdiA9IHByaXY7CisJcmV0dXJu IDA7CisKK2Vycl9vdXQwOgorCWtmcmVlKHByaXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRp YyB2b2lkIGxpbWFfZHJtX2RyaXZlcl9wb3N0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg c3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBsaW1hX2RybV9wcml2ICpwcml2ID0g ZmlsZS0+ZHJpdmVyX3ByaXY7CisKKwlsaW1hX2N0eF9tZ3JfZmluaSgmcHJpdi0+Y3R4X21ncik7 CisJbGltYV92bV9wdXQocHJpdi0+dm0pOworCWtmcmVlKHByaXYpOworfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9pb2N0bF9kZXNjIGxpbWFfZHJtX2RyaXZlcl9pb2N0bHNbXSA9IHsKKwlE Uk1fSU9DVExfREVGX0RSVihMSU1BX0dFVF9QQVJBTSwgbGltYV9pb2N0bF9nZXRfcGFyYW0sIERS TV9BVVRIfERSTV9SRU5ERVJfQUxMT1cpLAorCURSTV9JT0NUTF9ERUZfRFJWKExJTUFfR0VNX0NS RUFURSwgbGltYV9pb2N0bF9nZW1fY3JlYXRlLCBEUk1fQVVUSHxEUk1fUkVOREVSX0FMTE9XKSwK KwlEUk1fSU9DVExfREVGX0RSVihMSU1BX0dFTV9JTkZPLCBsaW1hX2lvY3RsX2dlbV9pbmZvLCBE Uk1fQVVUSHxEUk1fUkVOREVSX0FMTE9XKSwKKwlEUk1fSU9DVExfREVGX0RSVihMSU1BX0dFTV9T VUJNSVQsIGxpbWFfaW9jdGxfZ2VtX3N1Ym1pdCwgRFJNX0FVVEh8RFJNX1JFTkRFUl9BTExPVyks CisJRFJNX0lPQ1RMX0RFRl9EUlYoTElNQV9HRU1fV0FJVCwgbGltYV9pb2N0bF9nZW1fd2FpdCwg RFJNX0FVVEh8RFJNX1JFTkRFUl9BTExPVyksCisJRFJNX0lPQ1RMX0RFRl9EUlYoTElNQV9DVFhf Q1JFQVRFLCBsaW1hX2lvY3RsX2N0eF9jcmVhdGUsIERSTV9BVVRIfERSTV9SRU5ERVJfQUxMT1cp LAorCURSTV9JT0NUTF9ERUZfRFJWKExJTUFfQ1RYX0ZSRUUsIGxpbWFfaW9jdGxfY3R4X2ZyZWUs IERSTV9BVVRIfERSTV9SRU5ERVJfQUxMT1cpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBm aWxlX29wZXJhdGlvbnMgbGltYV9kcm1fZHJpdmVyX2ZvcHMgPSB7CisJLm93bmVyICAgICAgICAg ICAgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgICAgICAgICAgICAgPSBkcm1fb3BlbiwKKwku cmVsZWFzZSAgICAgICAgICAgID0gZHJtX3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsICAgICA9 IGRybV9pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCAgICAgICA9 IGRybV9jb21wYXRfaW9jdGwsCisjZW5kaWYKKwkubW1hcCAgICAgICAgICAgICAgID0gbGltYV9n ZW1fbW1hcCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBsaW1hX2RybV9kcml2ZXIg PSB7CisJLmRyaXZlcl9mZWF0dXJlcyAgICA9IERSSVZFUl9SRU5ERVIgfCBEUklWRVJfR0VNIHwg RFJJVkVSX1BSSU1FIHwgRFJJVkVSX1NZTkNPQkosCisJLm9wZW4gICAgICAgICAgICAgICA9IGxp bWFfZHJtX2RyaXZlcl9vcGVuLAorCS5wb3N0Y2xvc2UgICAgICAgICAgPSBsaW1hX2RybV9kcml2 ZXJfcG9zdGNsb3NlLAorCS5pb2N0bHMgICAgICAgICAgICAgPSBsaW1hX2RybV9kcml2ZXJfaW9j dGxzLAorCS5udW1faW9jdGxzICAgICAgICAgPSBBUlJBWV9TSVpFKGxpbWFfZHJtX2RyaXZlcl9p b2N0bHMpLAorCS5mb3BzICAgICAgICAgICAgICAgPSAmbGltYV9kcm1fZHJpdmVyX2ZvcHMsCisJ LmdlbV9mcmVlX29iamVjdF91bmxvY2tlZCA9IGxpbWFfZ2VtX2ZyZWVfb2JqZWN0LAorCS5nZW1f b3Blbl9vYmplY3QgICAgPSBsaW1hX2dlbV9vYmplY3Rfb3BlbiwKKwkuZ2VtX2Nsb3NlX29iamVj dCAgID0gbGltYV9nZW1fb2JqZWN0X2Nsb3NlLAorCS5nZW1fdm1fb3BzICAgICAgICAgPSAmbGlt YV9nZW1fdm1fb3BzLAorCS5uYW1lICAgICAgICAgICAgICAgPSAibGltYSIsCisJLmRlc2MgICAg ICAgICAgICAgICA9ICJsaW1hIERSTSIsCisJLmRhdGUgICAgICAgICAgICAgICA9ICIyMDE5MDIx NyIsCisJLm1ham9yICAgICAgICAgICAgICA9IDEsCisJLm1pbm9yICAgICAgICAgICAgICA9IDAs CisJLnBhdGNobGV2ZWwgICAgICAgICA9IDAsCisKKwkucHJpbWVfZmRfdG9faGFuZGxlID0gZHJt X2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgPSBs aW1hX2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUsCisJLnByaW1lX2hhbmRsZV90b19mZCA9IGRy bV9nZW1fcHJpbWVfaGFuZGxlX3RvX2ZkLAorCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlID0gbGlt YV9nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfbW1hcCA9IGxpbWFfZ2VtX3By aW1lX21tYXAsCit9OworCitzdGF0aWMgaW50IGxpbWFfcGRldl9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBsaW1hX2RldmljZSAqbGRldjsKKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGRldjsKKwlpbnQgZXJyOworCisJbGRldiA9IGRldm1fa3phbGxvYygmcGRl di0+ZGV2LCBzaXplb2YoKmxkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxkZXYpCisJCXJldHVy biAtRU5PTUVNOworCisJbGRldi0+cGRldiA9IHBkZXY7CisJbGRldi0+ZGV2ID0gJnBkZXYtPmRl djsKKwlsZGV2LT5pZCA9IChlbnVtIGxpbWFfZ3B1X2lkKW9mX2RldmljZV9nZXRfbWF0Y2hfZGF0 YSgmcGRldi0+ZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGxkZXYpOworCisJ LyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIERSTSBkZXZpY2UuICovCisJZGRldiA9IGRy bV9kZXZfYWxsb2MoJmxpbWFfZHJtX2RyaXZlciwgJnBkZXYtPmRldik7CisJaWYgKElTX0VSUihk ZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIoZGRldik7CisKKwlkZGV2LT5kZXZfcHJpdmF0ZSA9IGxk ZXY7CisJbGRldi0+ZGRldiA9IGRkZXY7CisKKwllcnIgPSBsaW1hX2RldmljZV9pbml0KGxkZXYp OworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmF0YWwgZXJyb3IgZHVyaW5n IEdQVSBpbml0XG4iKTsKKwkJZ290byBlcnJfb3V0MDsKKwl9CisKKwkvKgorCSAqIFJlZ2lzdGVy IHRoZSBEUk0gZGV2aWNlIHdpdGggdGhlIGNvcmUgYW5kIHRoZSBjb25uZWN0b3JzIHdpdGgKKwkg KiBzeXNmcy4KKwkgKi8KKwllcnIgPSBkcm1fZGV2X3JlZ2lzdGVyKGRkZXYsIDApOworCWlmIChl cnIgPCAwKQorCQlnb3RvIGVycl9vdXQxOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXQxOgorCWxp bWFfZGV2aWNlX2ZpbmkobGRldik7CitlcnJfb3V0MDoKKwlkcm1fZGV2X3B1dChkZGV2KTsKKwly ZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGxpbWFfcGRldl9yZW1vdmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmxkZXYgPSBwbGF0Zm9y bV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IGxkZXYtPmRk ZXY7CisKKwlkcm1fZGV2X3VucmVnaXN0ZXIoZGRldik7CisJbGltYV9kZXZpY2VfZmluaShsZGV2 KTsKKwlkcm1fZGV2X3B1dChkZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBvZl9kZXZpY2VfaWQgZHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImFybSxt YWxpLTQwMCIsIC5kYXRhID0gKHZvaWQgKilsaW1hX2dwdV9tYWxpNDAwIH0sCisJeyAuY29tcGF0 aWJsZSA9ICJhcm0sbWFsaS00NTAiLCAuZGF0YSA9ICh2b2lkICopbGltYV9ncHVfbWFsaTQ1MCB9 LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZHRfbWF0Y2gpOworCitzdGF0aWMg c3RydWN0IHBsYXRmb3JtX2RyaXZlciBsaW1hX3BsYXRmb3JtX2RyaXZlciA9IHsKKwkucHJvYmUg ICAgICA9IGxpbWFfcGRldl9wcm9iZSwKKwkucmVtb3ZlICAgICA9IGxpbWFfcGRldl9yZW1vdmUs CisJLmRyaXZlciAgICAgPSB7CisJCS5uYW1lICAgPSAibGltYSIsCisJCS5vZl9tYXRjaF90YWJs ZSA9IGR0X21hdGNoLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBsaW1hX2luaXQodm9p ZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbGltYV9zY2hlZF9zbGFiX2luaXQoKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZs aW1hX3BsYXRmb3JtX2RyaXZlcik7CisJaWYgKHJldCkKKwkJbGltYV9zY2hlZF9zbGFiX2Zpbmko KTsKKworCXJldHVybiByZXQ7Cit9Cittb2R1bGVfaW5pdChsaW1hX2luaXQpOworCitzdGF0aWMg dm9pZCBfX2V4aXQgbGltYV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0 ZXIoJmxpbWFfcGxhdGZvcm1fZHJpdmVyKTsKKwlsaW1hX3NjaGVkX3NsYWJfZmluaSgpOworfQor bW9kdWxlX2V4aXQobGltYV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTGltYSBQcm9qZWN0IERl dmVsb3BlcnMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTGltYSBEUk0gRHJpdmVyIik7CitNT0RV TEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9s aW1hX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kcnYuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjY5YzczNDQ3MTVjOQotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZHJ2LmgKQEAgLTAsMCArMSw0NSBAQAorLyog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCisvKiBDb3B5cmlnaHQg MjAxNy0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaWZuZGVmIF9fTElN QV9EUlZfSF9fCisjZGVmaW5lIF9fTElNQV9EUlZfSF9fCisKKyNpbmNsdWRlIDxkcm0vZHJtX2Zp bGUuaD4KKworI2luY2x1ZGUgImxpbWFfY3R4LmgiCisKK2V4dGVybiBpbnQgbGltYV9zY2hlZF90 aW1lb3V0X21zOworCitzdHJ1Y3QgbGltYV92bTsKK3N0cnVjdCBsaW1hX2JvOworc3RydWN0IGxp bWFfc2NoZWRfdGFzazsKKworc3RydWN0IGRybV9saW1hX2dlbV9zdWJtaXRfYm87CisKK3N0cnVj dCBsaW1hX2RybV9wcml2IHsKKwlzdHJ1Y3QgbGltYV92bSAqdm07CisJc3RydWN0IGxpbWFfY3R4 X21nciBjdHhfbWdyOworfTsKKworc3RydWN0IGxpbWFfc3VibWl0IHsKKwlzdHJ1Y3QgbGltYV9j dHggKmN0eDsKKwlpbnQgcGlwZTsKKwl1MzIgZmxhZ3M7CisKKwlzdHJ1Y3QgZHJtX2xpbWFfZ2Vt X3N1Ym1pdF9ibyAqYm9zOworCXN0cnVjdCBsaW1hX2JvICoqbGJvczsKKwl1MzIgbnJfYm9zOwor CisJdTMyIGluX3N5bmNbMl07CisJdTMyIG91dF9zeW5jOworCisJc3RydWN0IGxpbWFfc2NoZWRf dGFzayAqdGFzazsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxpbWFfZHJtX3ByaXYgKgor dG9fbGltYV9kcm1fcHJpdihzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJcmV0dXJuIGZpbGUt PmRyaXZlcl9wcml2OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMmQzY2Y5NmY2YzU4Ci0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9nZW0uYwpAQCAtMCwwICsxLDM4MSBA QAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisvKiBDb3B5cmln aHQgMjAxNy0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaW5jbHVkZSA8 bGludXgvc3luY19maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGZuX3QuaD4KKworI2luY2x1ZGUg PGRybS9kcm1fZmlsZS5oPgorI2luY2x1ZGUgPGRybS9kcm1fc3luY29iai5oPgorI2luY2x1ZGUg PGRybS9kcm1fdXRpbHMuaD4KKworI2luY2x1ZGUgPGRybS9saW1hX2RybS5oPgorCisjaW5jbHVk ZSAibGltYV9kcnYuaCIKKyNpbmNsdWRlICJsaW1hX2dlbS5oIgorI2luY2x1ZGUgImxpbWFfZ2Vt X3ByaW1lLmgiCisjaW5jbHVkZSAibGltYV92bS5oIgorI2luY2x1ZGUgImxpbWFfb2JqZWN0Lmgi CisKK2ludCBsaW1hX2dlbV9jcmVhdGVfaGFuZGxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0 cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJCSAgIHUzMiBzaXplLCB1MzIgZmxhZ3MsIHUzMiAqaGFu ZGxlKQoreworCWludCBlcnI7CisJc3RydWN0IGxpbWFfYm8gKmJvOworCXN0cnVjdCBsaW1hX2Rl dmljZSAqbGRldiA9IHRvX2xpbWFfZGV2KGRldik7CisKKwlibyA9IGxpbWFfYm9fY3JlYXRlKGxk ZXYsIHNpemUsIGZsYWdzLCBOVUxMLCBOVUxMKTsKKwlpZiAoSVNfRVJSKGJvKSkKKwkJcmV0dXJu IFBUUl9FUlIoYm8pOworCisJZXJyID0gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbGUsICZiby0+ Z2VtLCBoYW5kbGUpOworCisJLyogZHJvcCByZWZlcmVuY2UgZnJvbSBhbGxvY2F0ZSAtIGhhbmRs ZSBob2xkcyBpdCBub3cgKi8KKwlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQoJmJvLT5nZW0p OworCisJcmV0dXJuIGVycjsKK30KKwordm9pZCBsaW1hX2dlbV9mcmVlX29iamVjdChzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgbGltYV9ibyAqYm8gPSB0b19saW1hX2Jv KG9iaik7CisKKwlpZiAoIWxpc3RfZW1wdHkoJmJvLT52YSkpCisJCWRldl9lcnIob2JqLT5kZXYt PmRldiwgImxpbWEgZ2VtIGZyZWUgYm8gc3RpbGwgaGFzIHZhXG4iKTsKKworCWxpbWFfYm9fZGVz dHJveShibyk7Cit9CisKK2ludCBsaW1hX2dlbV9vYmplY3Rfb3BlbihzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKm9iaiwgc3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBsaW1hX2JvICpi byA9IHRvX2xpbWFfYm8ob2JqKTsKKwlzdHJ1Y3QgbGltYV9kcm1fcHJpdiAqcHJpdiA9IHRvX2xp bWFfZHJtX3ByaXYoZmlsZSk7CisJc3RydWN0IGxpbWFfdm0gKnZtID0gcHJpdi0+dm07CisKKwly ZXR1cm4gbGltYV92bV9ib19hZGQodm0sIGJvLCB0cnVlKTsKK30KKwordm9pZCBsaW1hX2dlbV9v YmplY3RfY2xvc2Uoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkcm1fZmlsZSAq ZmlsZSkKK3sKKwlzdHJ1Y3QgbGltYV9ibyAqYm8gPSB0b19saW1hX2JvKG9iaik7CisJc3RydWN0 IGxpbWFfZHJtX3ByaXYgKnByaXYgPSB0b19saW1hX2RybV9wcml2KGZpbGUpOworCXN0cnVjdCBs aW1hX3ZtICp2bSA9IHByaXYtPnZtOworCisJbGltYV92bV9ib19kZWwodm0sIGJvKTsKK30KKwor aW50IGxpbWFfZ2VtX2dldF9pbmZvKHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgdTMyIGhhbmRsZSwg dTMyICp2YSwgdTY0ICpvZmZzZXQpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJ c3RydWN0IGxpbWFfYm8gKmJvOworCXN0cnVjdCBsaW1hX2RybV9wcml2ICpwcml2ID0gdG9fbGlt YV9kcm1fcHJpdihmaWxlKTsKKwlzdHJ1Y3QgbGltYV92bSAqdm0gPSBwcml2LT52bTsKKwlpbnQg ZXJyOworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGZpbGUsIGhhbmRsZSk7CisJaWYg KCFvYmopCisJCXJldHVybiAtRU5PRU5UOworCisJYm8gPSB0b19saW1hX2JvKG9iaik7CisKKwkq dmEgPSBsaW1hX3ZtX2dldF92YSh2bSwgYm8pOworCisJZXJyID0gZHJtX2dlbV9jcmVhdGVfbW1h cF9vZmZzZXQob2JqKTsKKwlpZiAoIWVycikKKwkJKm9mZnNldCA9IGRybV92bWFfbm9kZV9vZmZz ZXRfYWRkcigmb2JqLT52bWFfbm9kZSk7CisKKwlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQo b2JqKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm1fZmF1bHRfdCBsaW1hX2dlbV9mYXVs dChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKK3sKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9 IHZtZi0+dm1hOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gdm1hLT52bV9wcml2YXRl X2RhdGE7CisJc3RydWN0IGxpbWFfYm8gKmJvID0gdG9fbGltYV9ibyhvYmopOworCXBmbl90IHBm bjsKKwlwZ29mZl90IHBnb2ZmOworCisJLyogV2UgZG9uJ3QgdXNlIHZtZi0+cGdvZmYgc2luY2Ug dGhhdCBoYXMgdGhlIGZha2Ugb2Zmc2V0OiAqLworCXBnb2ZmID0gKHZtZi0+YWRkcmVzcyAtIHZt YS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQ7CisJcGZuID0gX19wZm5fdG9fcGZuX3QocGFnZV90 b19wZm4oYm8tPnBhZ2VzW3Bnb2ZmXSksIFBGTl9ERVYpOworCisJcmV0dXJuIHZtZl9pbnNlcnRf bWl4ZWQodm1hLCB2bWYtPmFkZHJlc3MsIHBmbik7Cit9CisKK2NvbnN0IHN0cnVjdCB2bV9vcGVy YXRpb25zX3N0cnVjdCBsaW1hX2dlbV92bV9vcHMgPSB7CisJLmZhdWx0ID0gbGltYV9nZW1fZmF1 bHQsCisJLm9wZW4gPSBkcm1fZ2VtX3ZtX29wZW4sCisJLmNsb3NlID0gZHJtX2dlbV92bV9jbG9z ZSwKK307CisKK3ZvaWQgbGltYV9zZXRfdm1hX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hKQoreworCXBncHJvdF90IHByb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS0+dm1fZmxhZ3Mp OworCisJdm1hLT52bV9mbGFncyB8PSBWTV9NSVhFRE1BUDsKKwl2bWEtPnZtX2ZsYWdzICY9IH5W TV9QRk5NQVA7CisJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHByb3Qp OworfQorCitpbnQgbGltYV9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWEpCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9nZW1fbW1hcChmaWxw LCB2bWEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlsaW1hX3NldF92bWFfZmxhZ3Mo dm1hKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaW1hX2dlbV9zeW5jX2JvKHN0cnVj dCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2ssIHN0cnVjdCBsaW1hX2JvICpibywKKwkJCSAgICBib29s IHdyaXRlLCBib29sIGV4cGxpY2l0KQoreworCWludCBlcnIgPSAwOworCisJaWYgKCF3cml0ZSkg eworCQllcnIgPSByZXNlcnZhdGlvbl9vYmplY3RfcmVzZXJ2ZV9zaGFyZWQoYm8tPmdlbS5yZXN2 LCAxKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJLyogZXhwbGljaXQgc3lu YyB1c2UgdXNlciBwYXNzZWQgZGVwIGZlbmNlICovCisJaWYgKGV4cGxpY2l0KQorCQlyZXR1cm4g MDsKKworCS8qIGltcGxpY2l0IHN5bmMgdXNlIGJvIGZlbmNlIGluIHJlc3Ygb2JqICovCisJaWYg KHdyaXRlKSB7CisJCXVuc2lnbmVkIG5yX2ZlbmNlczsKKwkJc3RydWN0IGRtYV9mZW5jZSAqKmZl bmNlczsKKwkJaW50IGk7CisKKwkJZXJyID0gcmVzZXJ2YXRpb25fb2JqZWN0X2dldF9mZW5jZXNf cmN1KAorCQkJYm8tPmdlbS5yZXN2LCBOVUxMLCAmbnJfZmVuY2VzLCAmZmVuY2VzKTsKKwkJaWYg KGVyciB8fCAhbnJfZmVuY2VzKQorCQkJcmV0dXJuIGVycjsKKworCQlmb3IgKGkgPSAwOyBpIDwg bnJfZmVuY2VzOyBpKyspIHsKKwkJCWVyciA9IGxpbWFfc2NoZWRfdGFza19hZGRfZGVwKHRhc2ss IGZlbmNlc1tpXSk7CisJCQlpZiAoZXJyKQorCQkJCWJyZWFrOworCQl9CisKKwkJLyogZm9yIGVy cm9yIGNhc2UgZnJlZSByZW1haW5pbmcgZmVuY2VzICovCisJCWZvciAoIDsgaSA8IG5yX2ZlbmNl czsgaSsrKQorCQkJZG1hX2ZlbmNlX3B1dChmZW5jZXNbaV0pOworCisJCWtmcmVlKGZlbmNlcyk7 CisJfSBlbHNlIHsKKwkJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7CisKKwkJZmVuY2UgPSByZXNl cnZhdGlvbl9vYmplY3RfZ2V0X2V4Y2xfcmN1KGJvLT5nZW0ucmVzdik7CisJCWlmIChmZW5jZSkg eworCQkJZXJyID0gbGltYV9zY2hlZF90YXNrX2FkZF9kZXAodGFzaywgZmVuY2UpOworCQkJaWYg KGVycikKKwkJCQlkbWFfZmVuY2VfcHV0KGZlbmNlKTsKKwkJfQorCX0KKworCXJldHVybiBlcnI7 Cit9CisKK3N0YXRpYyBpbnQgbGltYV9nZW1fbG9ja19ib3Moc3RydWN0IGxpbWFfYm8gKipib3Ms IHUzMiBucl9ib3MsCisJCQkgICAgIHN0cnVjdCB3d19hY3F1aXJlX2N0eCAqY3R4KQoreworCWlu dCBpLCByZXQgPSAwLCBjb250ZW5kZWQsIHNsb3dfbG9ja2VkID0gLTE7CisKKwl3d19hY3F1aXJl X2luaXQoY3R4LCAmcmVzZXJ2YXRpb25fd3dfY2xhc3MpOworCityZXRyeToKKwlmb3IgKGkgPSAw OyBpIDwgbnJfYm9zOyBpKyspIHsKKwkJaWYgKGkgPT0gc2xvd19sb2NrZWQpIHsKKwkJCXNsb3df bG9ja2VkID0gLTE7CisJCQljb250aW51ZTsKKwkJfQorCisJCXJldCA9IHd3X211dGV4X2xvY2tf aW50ZXJydXB0aWJsZSgmYm9zW2ldLT5nZW0ucmVzdi0+bG9jaywgY3R4KTsKKwkJaWYgKHJldCA8 IDApIHsKKwkJCWNvbnRlbmRlZCA9IGk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCXd3X2Fj cXVpcmVfZG9uZShjdHgpOworCXJldHVybiAwOworCitlcnI6CisJZm9yIChpLS07IGkgPj0gMDsg aS0tKQorCQl3d19tdXRleF91bmxvY2soJmJvc1tpXS0+Z2VtLnJlc3YtPmxvY2spOworCisJaWYg KHNsb3dfbG9ja2VkID49IDApCisJCXd3X211dGV4X3VubG9jaygmYm9zW3Nsb3dfbG9ja2VkXS0+ Z2VtLnJlc3YtPmxvY2spOworCisJaWYgKHJldCA9PSAtRURFQURMSykgeworCQkvKiB3ZSBsb3N0 IG91dCBpbiBhIHNlcW5vIHJhY2UsIGxvY2sgYW5kIHJldHJ5Li4gKi8KKwkJcmV0ID0gd3dfbXV0 ZXhfbG9ja19zbG93X2ludGVycnVwdGlibGUoCisJCQkmYm9zW2NvbnRlbmRlZF0tPmdlbS5yZXN2 LT5sb2NrLCBjdHgpOworCQlpZiAoIXJldCkgeworCQkJc2xvd19sb2NrZWQgPSBjb250ZW5kZWQ7 CisJCQlnb3RvIHJldHJ5OworCQl9CisJfQorCXd3X2FjcXVpcmVfZmluaShjdHgpOworCisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbGltYV9nZW1fdW5sb2NrX2JvcyhzdHJ1Y3QgbGlt YV9ibyAqKmJvcywgdTMyIG5yX2JvcywKKwkJCQlzdHJ1Y3Qgd3dfYWNxdWlyZV9jdHggKmN0eCkK K3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9ib3M7IGkrKykKKwkJd3dfbXV0ZXhf dW5sb2NrKCZib3NbaV0tPmdlbS5yZXN2LT5sb2NrKTsKKwl3d19hY3F1aXJlX2ZpbmkoY3R4KTsK K30KKworc3RhdGljIGludCBsaW1hX2dlbV9hZGRfZGVwcyhzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUs IHN0cnVjdCBsaW1hX3N1Ym1pdCAqc3VibWl0KQoreworCWludCBpLCBlcnI7CisKKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShzdWJtaXQtPmluX3N5bmMpOyBpKyspIHsKKwkJc3RydWN0IGRt YV9mZW5jZSAqZmVuY2UgPSBOVUxMOworCisJCWlmICghc3VibWl0LT5pbl9zeW5jW2ldKQorCQkJ Y29udGludWU7CisKKwkJZXJyID0gZHJtX3N5bmNvYmpfZmluZF9mZW5jZShmaWxlLCBzdWJtaXQt PmluX3N5bmNbaV0sCisJCQkJCSAgICAgMCwgMCwgJmZlbmNlKTsKKwkJaWYgKGVycikKKwkJCXJl dHVybiBlcnI7CisKKwkJZXJyID0gbGltYV9zY2hlZF90YXNrX2FkZF9kZXAoc3VibWl0LT50YXNr LCBmZW5jZSk7CisJCWlmIChlcnIpIHsKKwkJCWRtYV9mZW5jZV9wdXQoZmVuY2UpOworCQkJcmV0 dXJuIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitpbnQgbGltYV9nZW1fc3VibWl0 KHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgc3RydWN0IGxpbWFfc3VibWl0ICpzdWJtaXQpCit7CisJ aW50IGksIGVyciA9IDA7CisJc3RydWN0IHd3X2FjcXVpcmVfY3R4IGN0eDsKKwlzdHJ1Y3QgbGlt YV9kcm1fcHJpdiAqcHJpdiA9IHRvX2xpbWFfZHJtX3ByaXYoZmlsZSk7CisJc3RydWN0IGxpbWFf dm0gKnZtID0gcHJpdi0+dm07CisJc3RydWN0IGRybV9zeW5jb2JqICpvdXRfc3luYyA9IE5VTEw7 CisJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7CisJc3RydWN0IGxpbWFfYm8gKipib3MgPSBzdWJt aXQtPmxib3M7CisKKwlpZiAoc3VibWl0LT5vdXRfc3luYykgeworCQlvdXRfc3luYyA9IGRybV9z eW5jb2JqX2ZpbmQoZmlsZSwgc3VibWl0LT5vdXRfc3luYyk7CisJCWlmICghb3V0X3N5bmMpCisJ CQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc3VibWl0LT5ucl9ib3M7 IGkrKykgeworCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwkJc3RydWN0IGxpbWFfYm8g KmJvOworCisJCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChmaWxlLCBzdWJtaXQtPmJvc1tp XS5oYW5kbGUpOworCQlpZiAoIW9iaikgeworCQkJZXJyID0gLUVOT0VOVDsKKwkJCWdvdG8gZXJy X291dDA7CisJCX0KKworCQlibyA9IHRvX2xpbWFfYm8ob2JqKTsKKworCQkvKiBpbmNyZWFzZSBy ZWZjbnQgb2YgZ3B1IHZhIG1hcCB0byBwcmV2ZW50IHVubWFwcGVkIHdoZW4gZXhlY3V0aW5nLAor CQkgKiB3aWxsIGJlIGRlY3JlYXNlZCB3aGVuIHRhc2sgZG9uZQorCQkgKi8KKwkJZXJyID0gbGlt YV92bV9ib19hZGQodm0sIGJvLCBmYWxzZSk7CisJCWlmIChlcnIpIHsKKwkJCWRybV9nZW1fb2Jq ZWN0X3B1dF91bmxvY2tlZChvYmopOworCQkJZ290byBlcnJfb3V0MDsKKwkJfQorCisJCWJvc1tp XSA9IGJvOworCX0KKworCWVyciA9IGxpbWFfZ2VtX2xvY2tfYm9zKGJvcywgc3VibWl0LT5ucl9i b3MsICZjdHgpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDA7CisKKwllcnIgPSBsaW1hX3Nj aGVkX3Rhc2tfaW5pdCgKKwkJc3VibWl0LT50YXNrLCBzdWJtaXQtPmN0eC0+Y29udGV4dCArIHN1 Ym1pdC0+cGlwZSwKKwkJYm9zLCBzdWJtaXQtPm5yX2Jvcywgdm0pOworCWlmIChlcnIpCisJCWdv dG8gZXJyX291dDE7CisKKwllcnIgPSBsaW1hX2dlbV9hZGRfZGVwcyhmaWxlLCBzdWJtaXQpOwor CWlmIChlcnIpCisJCWdvdG8gZXJyX291dDI7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3VibWl0LT5u cl9ib3M7IGkrKykgeworCQllcnIgPSBsaW1hX2dlbV9zeW5jX2JvKAorCQkJc3VibWl0LT50YXNr LCBib3NbaV0sCisJCQlzdWJtaXQtPmJvc1tpXS5mbGFncyAmIExJTUFfU1VCTUlUX0JPX1dSSVRF LAorCQkJc3VibWl0LT5mbGFncyAmIExJTUFfU1VCTUlUX0ZMQUdfRVhQTElDSVRfRkVOQ0UpOwor CQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0MjsKKwl9CisKKwlmZW5jZSA9IGxpbWFfc2NoZWRf Y29udGV4dF9xdWV1ZV90YXNrKAorCQlzdWJtaXQtPmN0eC0+Y29udGV4dCArIHN1Ym1pdC0+cGlw ZSwgc3VibWl0LT50YXNrKTsKKworCWZvciAoaSA9IDA7IGkgPCBzdWJtaXQtPm5yX2JvczsgaSsr KSB7CisJCWlmIChzdWJtaXQtPmJvc1tpXS5mbGFncyAmIExJTUFfU1VCTUlUX0JPX1dSSVRFKQor CQkJcmVzZXJ2YXRpb25fb2JqZWN0X2FkZF9leGNsX2ZlbmNlKGJvc1tpXS0+Z2VtLnJlc3YsIGZl bmNlKTsKKwkJZWxzZQorCQkJcmVzZXJ2YXRpb25fb2JqZWN0X2FkZF9zaGFyZWRfZmVuY2UoYm9z W2ldLT5nZW0ucmVzdiwgZmVuY2UpOworCX0KKworCWxpbWFfZ2VtX3VubG9ja19ib3MoYm9zLCBz dWJtaXQtPm5yX2JvcywgJmN0eCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3VibWl0LT5ucl9ib3M7 IGkrKykKKwkJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKCZib3NbaV0tPmdlbSk7CisKKwlp ZiAob3V0X3N5bmMpIHsKKwkJZHJtX3N5bmNvYmpfcmVwbGFjZV9mZW5jZShvdXRfc3luYywgZmVu Y2UpOworCQlkcm1fc3luY29ial9wdXQob3V0X3N5bmMpOworCX0KKworCWRtYV9mZW5jZV9wdXQo ZmVuY2UpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXQyOgorCWxpbWFfc2NoZWRfdGFza19maW5p KHN1Ym1pdC0+dGFzayk7CitlcnJfb3V0MToKKwlsaW1hX2dlbV91bmxvY2tfYm9zKGJvcywgc3Vi bWl0LT5ucl9ib3MsICZjdHgpOworZXJyX291dDA6CisJZm9yIChpID0gMDsgaSA8IHN1Ym1pdC0+ bnJfYm9zOyBpKyspIHsKKwkJaWYgKCFib3NbaV0pCisJCQlicmVhazsKKwkJbGltYV92bV9ib19k ZWwodm0sIGJvc1tpXSk7CisJCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZCgmYm9zW2ldLT5n ZW0pOworCX0KKwlpZiAob3V0X3N5bmMpCisJCWRybV9zeW5jb2JqX3B1dChvdXRfc3luYyk7CisJ cmV0dXJuIGVycjsKK30KKworaW50IGxpbWFfZ2VtX3dhaXQoc3RydWN0IGRybV9maWxlICpmaWxl LCB1MzIgaGFuZGxlLCB1MzIgb3AsIHM2NCB0aW1lb3V0X25zKQoreworCWJvb2wgd3JpdGUgPSBv cCAmIExJTUFfR0VNX1dBSVRfV1JJVEU7CisJbG9uZyByZXQsIHRpbWVvdXQ7CisKKwlpZiAoIW9w KQorCQlyZXR1cm4gMDsKKworCXRpbWVvdXQgPSBkcm1fdGltZW91dF9hYnNfdG9famlmZmllcyh0 aW1lb3V0X25zKTsKKworCXJldCA9IGRybV9nZW1fcmVzZXJ2YXRpb25fb2JqZWN0X3dhaXQoZmls ZSwgaGFuZGxlLCB3cml0ZSwgdGltZW91dCk7CisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSB0aW1l b3V0ID8gLUVUSU1FRE9VVCA6IC1FQlVTWTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbS5oIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEv bGltYV9nZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjU1NjEx MWEwMTEzNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2Vt LmgKQEAgLTAsMCArMSwyNSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAg T1IgTUlUICovCisvKiBDb3B5cmlnaHQgMjAxNy0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwu Y29tPiAqLworCisjaWZuZGVmIF9fTElNQV9HRU1fSF9fCisjZGVmaW5lIF9fTElNQV9HRU1fSF9f CisKK3N0cnVjdCBsaW1hX2JvOworc3RydWN0IGxpbWFfc3VibWl0OworCitleHRlcm4gY29uc3Qg c3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGxpbWFfZ2VtX3ZtX29wczsKKworc3RydWN0IGxp bWFfYm8gKmxpbWFfZ2VtX2NyZWF0ZV9ibyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgc2l6 ZSwgdTMyIGZsYWdzKTsKK2ludCBsaW1hX2dlbV9jcmVhdGVfaGFuZGxlKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJCSAgIHUzMiBzaXplLCB1MzIgZmxh Z3MsIHUzMiAqaGFuZGxlKTsKK3ZvaWQgbGltYV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmopOworaW50IGxpbWFfZ2VtX29iamVjdF9vcGVuKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwordm9pZCBsaW1hX2dlbV9vYmpl Y3RfY2xvc2Uoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkcm1fZmlsZSAqZmls ZSk7CitpbnQgbGltYV9nZW1fZ2V0X2luZm8oc3RydWN0IGRybV9maWxlICpmaWxlLCB1MzIgaGFu ZGxlLCB1MzIgKnZhLCB1NjQgKm9mZnNldCk7CitpbnQgbGltYV9nZW1fbW1hcChzdHJ1Y3QgZmls ZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworaW50IGxpbWFfZ2VtX3N1Ym1p dChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsIHN0cnVjdCBsaW1hX3N1Ym1pdCAqc3VibWl0KTsKK2lu dCBsaW1hX2dlbV93YWl0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgdTMyIGhhbmRsZSwgdTMyIG9w LCBzNjQgdGltZW91dF9ucyk7CisKK3ZvaWQgbGltYV9zZXRfdm1hX2ZsYWdzKHN0cnVjdCB2bV9h cmVhX3N0cnVjdCAqdm1hKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bGltYS9saW1hX2dlbV9wcmltZS5jIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9nZW1fcHJp bWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjljNmQ5ZjFkYmE1 NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtX3ByaW1l LmMKQEAgLTAsMCArMSw0NyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAg T1IgTUlUCisvKiBDb3B5cmlnaHQgMjAxOC0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29t PiAqLworCisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1ZGUgPGRybS9kcm1fcHJp bWUuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgorI2luY2x1ZGUgPGRybS9kcm1fZmlsZS5o PgorCisjaW5jbHVkZSAibGltYV9kZXZpY2UuaCIKKyNpbmNsdWRlICJsaW1hX29iamVjdC5oIgor I2luY2x1ZGUgImxpbWFfZ2VtLmgiCisjaW5jbHVkZSAibGltYV9nZW1fcHJpbWUuaCIKKworc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpsaW1hX2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoCisJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAor CXN0cnVjdCBzZ190YWJsZSAqc2d0KQoreworCXN0cnVjdCBsaW1hX2RldmljZSAqbGRldiA9IHRv X2xpbWFfZGV2KGRldik7CisJc3RydWN0IGxpbWFfYm8gKmJvOworCisJYm8gPSBsaW1hX2JvX2Ny ZWF0ZShsZGV2LCBhdHRhY2gtPmRtYWJ1Zi0+c2l6ZSwgMCwgc2d0LAorCQkJICAgIGF0dGFjaC0+ ZG1hYnVmLT5yZXN2KTsKKwlpZiAoSVNfRVJSKGJvKSkKKwkJcmV0dXJuIEVSUl9DQVNUKGJvKTsK KworCXJldHVybiAmYm8tPmdlbTsKK30KKworc3RydWN0IHNnX3RhYmxlICpsaW1hX2dlbV9wcmlt ZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGxp bWFfYm8gKmJvID0gdG9fbGltYV9ibyhvYmopOworCWludCBucGFnZXMgPSBvYmotPnNpemUgPj4g UEFHRV9TSElGVDsKKworCXJldHVybiBkcm1fcHJpbWVfcGFnZXNfdG9fc2coYm8tPnBhZ2VzLCBu cGFnZXMpOworfQorCitpbnQgbGltYV9nZW1fcHJpbWVfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50IHJldDsKKworCXJl dCA9IGRybV9nZW1fbW1hcF9vYmoob2JqLCBvYmotPnNpemUsIHZtYSk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCWxpbWFfc2V0X3ZtYV9mbGFncyh2bWEpOworCXJldHVybiAwOworfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9nZW1fcHJpbWUuaCBiL2RyaXZl cnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtX3ByaW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi4zNGI0ZDM1YzIxZTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbGltYS9saW1hX2dlbV9wcmltZS5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAqLworLyogQ29weXJpZ2h0IDIwMTgt MjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2lmbmRlZiBfX0xJTUFfR0VN X1BSSU1FX0hfXworI2RlZmluZSBfX0xJTUFfR0VNX1BSSU1FX0hfXworCitzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKmxpbWFfZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSgKKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCisJc3RydWN0IHNn X3RhYmxlICpzZ3QpOworc3RydWN0IHNnX3RhYmxlICpsaW1hX2dlbV9wcmltZV9nZXRfc2dfdGFi bGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworaW50IGxpbWFfZ2VtX3ByaW1lX21tYXAo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsK KworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dwLmMgYi9k cml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi5jY2Y0OWZhZWRlYmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vbGltYS9saW1hX2dwLmMKQEAgLTAsMCArMSwyODMgQEAKKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorLyogQ29weXJpZ2h0IDIwMTctMjAxOSBRaWFuZyBZ dSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgor I2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPGRybS9saW1hX2RybS5oPgorCisjaW5j bHVkZSAibGltYV9kZXZpY2UuaCIKKyNpbmNsdWRlICJsaW1hX2dwLmgiCisjaW5jbHVkZSAibGlt YV9yZWdzLmgiCisKKyNkZWZpbmUgZ3Bfd3JpdGUocmVnLCBkYXRhKSB3cml0ZWwoZGF0YSwgaXAt PmlvbWVtICsgcmVnKQorI2RlZmluZSBncF9yZWFkKHJlZykgcmVhZGwoaXAtPmlvbWVtICsgcmVn KQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbGltYV9ncF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lk ICpkYXRhKQoreworCXN0cnVjdCBsaW1hX2lwICppcCA9IGRhdGE7CisJc3RydWN0IGxpbWFfZGV2 aWNlICpkZXYgPSBpcC0+ZGV2OworCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUgPSBkZXYt PnBpcGUgKyBsaW1hX3BpcGVfZ3A7CisJdTMyIHN0YXRlID0gZ3BfcmVhZChMSU1BX0dQX0lOVF9T VEFUKTsKKwl1MzIgc3RhdHVzID0gZ3BfcmVhZChMSU1BX0dQX1NUQVRVUyk7CisJYm9vbCBkb25l ID0gZmFsc2U7CisKKwkvKiBmb3Igc2hhcmVkIGlycSBjYXNlICovCisJaWYgKCFzdGF0ZSkKKwkJ cmV0dXJuIElSUV9OT05FOworCisJaWYgKHN0YXRlICYgTElNQV9HUF9JUlFfTUFTS19FUlJPUikg eworCQlkZXZfZXJyKGRldi0+ZGV2LCAiZ3AgZXJyb3IgaXJxIHN0YXRlPSV4IHN0YXR1cz0leFxu IiwKKwkJCXN0YXRlLCBzdGF0dXMpOworCisJCS8qIG1hc2sgYWxsIGludGVycnVwdHMgYmVmb3Jl IGhhcmQgcmVzZXQgKi8KKwkJZ3Bfd3JpdGUoTElNQV9HUF9JTlRfTUFTSywgMCk7CisKKwkJcGlw ZS0+ZXJyb3IgPSB0cnVlOworCQlkb25lID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlib29sIHZhbGlk ID0gc3RhdGUgJiAoTElNQV9HUF9JUlFfVlNfRU5EX0NNRF9MU1QgfAorCQkJCSAgICAgIExJTUFf R1BfSVJRX1BMQlVfRU5EX0NNRF9MU1QpOworCQlib29sIGFjdGl2ZSA9IHN0YXR1cyAmIChMSU1B X0dQX1NUQVRVU19WU19BQ1RJVkUgfAorCQkJCQlMSU1BX0dQX1NUQVRVU19QTEJVX0FDVElWRSk7 CisJCWRvbmUgPSB2YWxpZCAmJiAhYWN0aXZlOworCX0KKworCWdwX3dyaXRlKExJTUFfR1BfSU5U X0NMRUFSLCBzdGF0ZSk7CisKKwlpZiAoZG9uZSkKKwkJbGltYV9zY2hlZF9waXBlX3Rhc2tfZG9u ZShwaXBlKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgbGltYV9n cF9zb2Z0X3Jlc2V0X2FzeW5jKHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwlpZiAoaXAtPmRhdGEu YXN5bmNfcmVzZXQpCisJCXJldHVybjsKKworCWdwX3dyaXRlKExJTUFfR1BfSU5UX01BU0ssIDAp OworCWdwX3dyaXRlKExJTUFfR1BfSU5UX0NMRUFSLCBMSU1BX0dQX0lSUV9SRVNFVF9DT01QTEVU RUQpOworCWdwX3dyaXRlKExJTUFfR1BfQ01ELCBMSU1BX0dQX0NNRF9TT0ZUX1JFU0VUKTsKKwlp cC0+ZGF0YS5hc3luY19yZXNldCA9IHRydWU7Cit9CisKK3N0YXRpYyBpbnQgbGltYV9ncF9zb2Z0 X3Jlc2V0X2FzeW5jX3dhaXQoc3RydWN0IGxpbWFfaXAgKmlwKQoreworCXN0cnVjdCBsaW1hX2Rl dmljZSAqZGV2ID0gaXAtPmRldjsKKwlpbnQgZXJyOworCXUzMiB2OworCisJaWYgKCFpcC0+ZGF0 YS5hc3luY19yZXNldCkKKwkJcmV0dXJuIDA7CisKKwllcnIgPSByZWFkbF9wb2xsX3RpbWVvdXQo aXAtPmlvbWVtICsgTElNQV9HUF9JTlRfUkFXU1RBVCwgdiwKKwkJCQkgdiAmIExJTUFfR1BfSVJR X1JFU0VUX0NPTVBMRVRFRCwKKwkJCQkgMCwgMTAwKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIo ZGV2LT5kZXYsICJncCBzb2Z0IHJlc2V0IHRpbWUgb3V0XG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9 CisKKwlncF93cml0ZShMSU1BX0dQX0lOVF9DTEVBUiwgTElNQV9HUF9JUlFfTUFTS19BTEwpOwor CWdwX3dyaXRlKExJTUFfR1BfSU5UX01BU0ssIExJTUFfR1BfSVJRX01BU0tfVVNFRCk7CisKKwlp cC0+ZGF0YS5hc3luY19yZXNldCA9IGZhbHNlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IGxpbWFfZ3BfdGFza192YWxpZGF0ZShzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlLAorCQkJ CSBzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrKQoreworCXN0cnVjdCBkcm1fbGltYV9ncF9m cmFtZSAqZnJhbWUgPSB0YXNrLT5mcmFtZTsKKwl1MzIgKmYgPSBmcmFtZS0+ZnJhbWU7CisJKHZv aWQpcGlwZTsKKworCWlmIChmW0xJTUFfR1BfVlNDTF9TVEFSVF9BRERSID4+IDJdID4KKwkgICAg ZltMSU1BX0dQX1ZTQ0xfRU5EX0FERFIgPj4gMl0gfHwKKwkgICAgZltMSU1BX0dQX1BMQlVDTF9T VEFSVF9BRERSID4+IDJdID4KKwkgICAgZltMSU1BX0dQX1BMQlVDTF9FTkRfQUREUiA+PiAyXSB8 fAorCSAgICBmW0xJTUFfR1BfUExCVV9BTExPQ19TVEFSVF9BRERSID4+IDJdID4KKwkgICAgZltM SU1BX0dQX1BMQlVfQUxMT0NfRU5EX0FERFIgPj4gMl0pCisJCXJldHVybiAtRUlOVkFMOworCisJ aWYgKGZbTElNQV9HUF9WU0NMX1NUQVJUX0FERFIgPj4gMl0gPT0KKwkgICAgZltMSU1BX0dQX1ZT Q0xfRU5EX0FERFIgPj4gMl0gJiYKKwkgICAgZltMSU1BX0dQX1BMQlVDTF9TVEFSVF9BRERSID4+ IDJdID09CisJICAgIGZbTElNQV9HUF9QTEJVQ0xfRU5EX0FERFIgPj4gMl0pCisJCXJldHVybiAt RUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfZ3BfdGFza19ydW4o c3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSwKKwkJCSAgICAgc3RydWN0IGxpbWFfc2NoZWRf dGFzayAqdGFzaykKK3sKKwlzdHJ1Y3QgbGltYV9pcCAqaXAgPSBwaXBlLT5wcm9jZXNzb3JbMF07 CisJc3RydWN0IGRybV9saW1hX2dwX2ZyYW1lICpmcmFtZSA9IHRhc2stPmZyYW1lOworCXUzMiAq ZiA9IGZyYW1lLT5mcmFtZTsKKwl1MzIgY21kID0gMDsKKwlpbnQgaTsKKworCWlmIChmW0xJTUFf R1BfVlNDTF9TVEFSVF9BRERSID4+IDJdICE9CisJICAgIGZbTElNQV9HUF9WU0NMX0VORF9BRERS ID4+IDJdKQorCQljbWQgfD0gTElNQV9HUF9DTURfU1RBUlRfVlM7CisJaWYgKGZbTElNQV9HUF9Q TEJVQ0xfU1RBUlRfQUREUiA+PiAyXSAhPQorCSAgICBmW0xJTUFfR1BfUExCVUNMX0VORF9BRERS ID4+IDJdKQorCQljbWQgfD0gTElNQV9HUF9DTURfU1RBUlRfUExCVTsKKworCS8qIGJlZm9yZSBh bnkgaHcgb3BzLCB3YWl0IGxhc3Qgc3VjY2VzcyB0YXNrIGFzeW5jIHNvZnQgcmVzZXQgKi8KKwls aW1hX2dwX3NvZnRfcmVzZXRfYXN5bmNfd2FpdChpcCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTElN QV9HUF9GUkFNRV9SRUdfTlVNOyBpKyspCisJCXdyaXRlbChmW2ldLCBpcC0+aW9tZW0gKyBMSU1B X0dQX1ZTQ0xfU1RBUlRfQUREUiArIGkgKiA0KTsKKworCWdwX3dyaXRlKExJTUFfR1BfQ01ELCBM SU1BX0dQX0NNRF9VUERBVEVfUExCVV9BTExPQyk7CisJZ3Bfd3JpdGUoTElNQV9HUF9DTUQsIGNt ZCk7Cit9CisKK3N0YXRpYyBpbnQgbGltYV9ncF9oYXJkX3Jlc2V0X3BvbGwoc3RydWN0IGxpbWFf aXAgKmlwKQoreworCWdwX3dyaXRlKExJTUFfR1BfUEVSRl9DTlRfMF9MSU1JVCwgMHhDMDFBMDAw MCk7CisJcmV0dXJuIGdwX3JlYWQoTElNQV9HUF9QRVJGX0NOVF8wX0xJTUlUKSA9PSAweEMwMUEw MDAwOworfQorCitzdGF0aWMgaW50IGxpbWFfZ3BfaGFyZF9yZXNldChzdHJ1Y3QgbGltYV9pcCAq aXApCit7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSBpcC0+ZGV2OworCWludCByZXQ7CisK KwlncF93cml0ZShMSU1BX0dQX1BFUkZfQ05UXzBfTElNSVQsIDB4QzBGRkUwMDApOworCWdwX3dy aXRlKExJTUFfR1BfSU5UX01BU0ssIDApOworCWdwX3dyaXRlKExJTUFfR1BfQ01ELCBMSU1BX0dQ X0NNRF9SRVNFVCk7CisJcmV0ID0gbGltYV9wb2xsX3RpbWVvdXQoaXAsIGxpbWFfZ3BfaGFyZF9y ZXNldF9wb2xsLCAxMCwgMTAwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LT5kZXYsICJn cCBoYXJkIHJlc2V0IHRpbWVvdXRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWdwX3dyaXRl KExJTUFfR1BfUEVSRl9DTlRfMF9MSU1JVCwgMCk7CisJZ3Bfd3JpdGUoTElNQV9HUF9JTlRfQ0xF QVIsIExJTUFfR1BfSVJRX01BU0tfQUxMKTsKKwlncF93cml0ZShMSU1BX0dQX0lOVF9NQVNLLCBM SU1BX0dQX0lSUV9NQVNLX1VTRUQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsaW1h X2dwX3Rhc2tfZmluaShzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlKQoreworCWxpbWFfZ3Bf c29mdF9yZXNldF9hc3luYyhwaXBlLT5wcm9jZXNzb3JbMF0pOworfQorCitzdGF0aWMgdm9pZCBs aW1hX2dwX3Rhc2tfZXJyb3Ioc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSkKK3sKKwlzdHJ1 Y3QgbGltYV9pcCAqaXAgPSBwaXBlLT5wcm9jZXNzb3JbMF07CisKKwlkZXZfZXJyKGlwLT5kZXYt PmRldiwgImdwIHRhc2sgZXJyb3IgaW50X3N0YXRlPSV4IHN0YXR1cz0leFxuIiwKKwkJZ3BfcmVh ZChMSU1BX0dQX0lOVF9TVEFUKSwgZ3BfcmVhZChMSU1BX0dQX1NUQVRVUykpOworCisJbGltYV9n cF9oYXJkX3Jlc2V0KGlwKTsKK30KKworc3RhdGljIHZvaWQgbGltYV9ncF90YXNrX21tdV9lcnJv cihzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlKQoreworCWxpbWFfc2NoZWRfcGlwZV90YXNr X2RvbmUocGlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfZ3BfcHJpbnRfdmVyc2lvbihzdHJ1 Y3QgbGltYV9pcCAqaXApCit7CisJdTMyIHZlcnNpb24sIG1ham9yLCBtaW5vcjsKKwljaGFyICpu YW1lOworCisJdmVyc2lvbiA9IGdwX3JlYWQoTElNQV9HUF9WRVJTSU9OKTsKKwltYWpvciA9ICh2 ZXJzaW9uID4+IDgpICYgMHhGRjsKKwltaW5vciA9IHZlcnNpb24gJiAweEZGOworCXN3aXRjaCAo dmVyc2lvbiA+PiAxNikgeworCWNhc2UgMHhBMDc6CisJICAgIG5hbWUgPSAibWFsaTIwMCI7CisJ CWJyZWFrOworCWNhc2UgMHhDMDc6CisJCW5hbWUgPSAibWFsaTMwMCI7CisJCWJyZWFrOworCWNh c2UgMHhCMDc6CisJCW5hbWUgPSAibWFsaTQwMCI7CisJCWJyZWFrOworCWNhc2UgMHhEMDc6CisJ CW5hbWUgPSAibWFsaTQ1MCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW5hbWUgPSAidW5rbm93 biI7CisJCWJyZWFrOworCX0KKwlkZXZfaW5mbyhpcC0+ZGV2LT5kZXYsICIlcyAtICVzIHZlcnNp b24gbWFqb3IgJWQgbWlub3IgJWRcbiIsCisJCSBsaW1hX2lwX25hbWUoaXApLCBuYW1lLCBtYWpv ciwgbWlub3IpOworfQorCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmxpbWFfZ3BfdGFza19z bGFiOworc3RhdGljIGludCBsaW1hX2dwX3Rhc2tfc2xhYl9yZWZjbnQ7CisKK2ludCBsaW1hX2dw X2luaXQoc3RydWN0IGxpbWFfaXAgKmlwKQoreworCXN0cnVjdCBsaW1hX2RldmljZSAqZGV2ID0g aXAtPmRldjsKKwlpbnQgZXJyOworCisJbGltYV9ncF9wcmludF92ZXJzaW9uKGlwKTsKKworCWlw LT5kYXRhLmFzeW5jX3Jlc2V0ID0gZmFsc2U7CisJbGltYV9ncF9zb2Z0X3Jlc2V0X2FzeW5jKGlw KTsKKwllcnIgPSBsaW1hX2dwX3NvZnRfcmVzZXRfYXN5bmNfd2FpdChpcCk7CisJaWYgKGVycikK KwkJcmV0dXJuIGVycjsKKworCWVyciA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LT5kZXYsIGlwLT5p cnEsIGxpbWFfZ3BfaXJxX2hhbmRsZXIsCisJCQkgICAgICAgSVJRRl9TSEFSRUQsIGxpbWFfaXBf bmFtZShpcCksIGlwKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoZGV2LT5kZXYsICJncCAlcyBm YWlsIHRvIHJlcXVlc3QgaXJxXG4iLAorCQkJbGltYV9pcF9uYW1lKGlwKSk7CisJCXJldHVybiBl cnI7CisJfQorCisJZGV2LT5ncF92ZXJzaW9uID0gZ3BfcmVhZChMSU1BX0dQX1ZFUlNJT04pOwor CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbGltYV9ncF9maW5pKHN0cnVjdCBsaW1hX2lwICppcCkK K3sKKworfQorCitpbnQgbGltYV9ncF9waXBlX2luaXQoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYp Cit7CisJaW50IGZyYW1lX3NpemUgPSBzaXplb2Yoc3RydWN0IGRybV9saW1hX2dwX2ZyYW1lKTsK KwlzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlID0gZGV2LT5waXBlICsgbGltYV9waXBlX2dw OworCisJaWYgKCFsaW1hX2dwX3Rhc2tfc2xhYikgeworCQlsaW1hX2dwX3Rhc2tfc2xhYiA9IGtt ZW1fY2FjaGVfY3JlYXRlX3VzZXJjb3B5KAorCQkJImxpbWFfZ3BfdGFzayIsIHNpemVvZihzdHJ1 Y3QgbGltYV9zY2hlZF90YXNrKSArIGZyYW1lX3NpemUsCisJCQkwLCBTTEFCX0hXQ0FDSEVfQUxJ R04sIHNpemVvZihzdHJ1Y3QgbGltYV9zY2hlZF90YXNrKSwKKwkJCWZyYW1lX3NpemUsIE5VTEwp OworCQlpZiAoIWxpbWFfZ3BfdGFza19zbGFiKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCWxp bWFfZ3BfdGFza19zbGFiX3JlZmNudCsrOworCisJcGlwZS0+ZnJhbWVfc2l6ZSA9IGZyYW1lX3Np emU7CisJcGlwZS0+dGFza19zbGFiID0gbGltYV9ncF90YXNrX3NsYWI7CisKKwlwaXBlLT50YXNr X3ZhbGlkYXRlID0gbGltYV9ncF90YXNrX3ZhbGlkYXRlOworCXBpcGUtPnRhc2tfcnVuID0gbGlt YV9ncF90YXNrX3J1bjsKKwlwaXBlLT50YXNrX2ZpbmkgPSBsaW1hX2dwX3Rhc2tfZmluaTsKKwlw aXBlLT50YXNrX2Vycm9yID0gbGltYV9ncF90YXNrX2Vycm9yOworCXBpcGUtPnRhc2tfbW11X2Vy cm9yID0gbGltYV9ncF90YXNrX21tdV9lcnJvcjsKKworCXJldHVybiAwOworfQorCit2b2lkIGxp bWFfZ3BfcGlwZV9maW5pKHN0cnVjdCBsaW1hX2RldmljZSAqZGV2KQoreworCWlmICghLS1saW1h X2dwX3Rhc2tfc2xhYl9yZWZjbnQpIHsKKwkJa21lbV9jYWNoZV9kZXN0cm95KGxpbWFfZ3BfdGFz a19zbGFiKTsKKwkJbGltYV9ncF90YXNrX3NsYWIgPSBOVUxMOworCX0KK30KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ3AuaCBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xp bWFfZ3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjUxNmU1YzFi YWJiYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ3AuaApA QCAtMCwwICsxLDE2IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBN SVQgKi8KKy8qIENvcHlyaWdodCAyMDE3LTIwMTkgUWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+ ICovCisKKyNpZm5kZWYgX19MSU1BX0dQX0hfXworI2RlZmluZSBfX0xJTUFfR1BfSF9fCisKK3N0 cnVjdCBsaW1hX2lwOworc3RydWN0IGxpbWFfZGV2aWNlOworCitpbnQgbGltYV9ncF9pbml0KHN0 cnVjdCBsaW1hX2lwICppcCk7Cit2b2lkIGxpbWFfZ3BfZmluaShzdHJ1Y3QgbGltYV9pcCAqaXAp OworCitpbnQgbGltYV9ncF9waXBlX2luaXQoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYpOwordm9p ZCBsaW1hX2dwX3BpcGVfZmluaShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldik7CisKKyNlbmRpZgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9sMl9jYWNoZS5jIGIvZHJpdmVy cy9ncHUvZHJtL2xpbWEvbGltYV9sMl9jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uNjg3M2E3YWY1YTVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL2xpbWEvbGltYV9sMl9jYWNoZS5jCkBAIC0wLDAgKzEsODAgQEAKKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorLyogQ29weXJpZ2h0IDIwMTctMjAxOSBR aWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5o PgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSAibGltYV9kZXZpY2UuaCIK KyNpbmNsdWRlICJsaW1hX2wyX2NhY2hlLmgiCisjaW5jbHVkZSAibGltYV9yZWdzLmgiCisKKyNk ZWZpbmUgbDJfY2FjaGVfd3JpdGUocmVnLCBkYXRhKSB3cml0ZWwoZGF0YSwgaXAtPmlvbWVtICsg cmVnKQorI2RlZmluZSBsMl9jYWNoZV9yZWFkKHJlZykgcmVhZGwoaXAtPmlvbWVtICsgcmVnKQor CitzdGF0aWMgaW50IGxpbWFfbDJfY2FjaGVfd2FpdF9pZGxlKHN0cnVjdCBsaW1hX2lwICppcCkK K3sKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlwLT5kZXY7CisJaW50IGVycjsKKwl1MzIg djsKKworCWVyciA9IHJlYWRsX3BvbGxfdGltZW91dChpcC0+aW9tZW0gKyBMSU1BX0wyX0NBQ0hF X1NUQVRVUywgdiwKKwkJCQkgISh2ICYgTElNQV9MMl9DQUNIRV9TVEFUVVNfQ09NTUFORF9CVVNZ KSwKKwkJCQkgMCwgMTAwMCk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAibDIg Y2FjaGUgd2FpdCBjb21tYW5kIHRpbWVvdXRcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1 cm4gMDsKK30KKworaW50IGxpbWFfbDJfY2FjaGVfZmx1c2goc3RydWN0IGxpbWFfaXAgKmlwKQor eworCWludCByZXQ7CisKKwlzcGluX2xvY2soJmlwLT5kYXRhLmxvY2spOworCWwyX2NhY2hlX3dy aXRlKExJTUFfTDJfQ0FDSEVfQ09NTUFORCwgTElNQV9MMl9DQUNIRV9DT01NQU5EX0NMRUFSX0FM TCk7CisJcmV0ID0gbGltYV9sMl9jYWNoZV93YWl0X2lkbGUoaXApOworCXNwaW5fdW5sb2NrKCZp cC0+ZGF0YS5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbGltYV9sMl9jYWNoZV9pbml0 KHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwlpbnQgaSwgZXJyOworCXUzMiBzaXplOworCXN0cnVj dCBsaW1hX2RldmljZSAqZGV2ID0gaXAtPmRldjsKKworCS8qIGwyX2NhY2hlMiBvbmx5IGV4aXN0 cyB3aGVuIG9uZSBvZiBQUDQtNyBwcmVzZW50ICovCisJaWYgKGlwLT5pZCA9PSBsaW1hX2lwX2wy X2NhY2hlMikgeworCQlmb3IgKGkgPSBsaW1hX2lwX3BwNDsgaSA8PSBsaW1hX2lwX3BwNzsgaSsr KSB7CisJCQlpZiAoZGV2LT5pcFtpXS5wcmVzZW50KQorCQkJCWJyZWFrOworCQl9CisJCWlmIChp ID4gbGltYV9pcF9wcDcpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzcGluX2xvY2tfaW5p dCgmaXAtPmRhdGEubG9jayk7CisKKwlzaXplID0gbDJfY2FjaGVfcmVhZChMSU1BX0wyX0NBQ0hF X1NJWkUpOworCWRldl9pbmZvKGRldi0+ZGV2LCAibDIgY2FjaGUgJXVLLCAldS13YXksICV1Ynl0 ZSBjYWNoZSBsaW5lLCAldWJpdCBleHRlcm5hbCBidXNcbiIsCisJCSAxIDw8ICgoKHNpemUgPj4g MTYpICYgMHhmZikgLSAxMCksCisJCSAxIDw8ICgoc2l6ZSA+PiA4KSAmIDB4ZmYpLAorCQkgMSA8 PCAoc2l6ZSAmIDB4ZmYpLAorCQkgMSA8PCAoKHNpemUgPj4gMjQpICYgMHhmZikpOworCisJZXJy ID0gbGltYV9sMl9jYWNoZV9mbHVzaChpcCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwor CWwyX2NhY2hlX3dyaXRlKExJTUFfTDJfQ0FDSEVfRU5BQkxFLAorCQkgICAgICAgTElNQV9MMl9D QUNIRV9FTkFCTEVfQUNDRVNTfExJTUFfTDJfQ0FDSEVfRU5BQkxFX1JFQURfQUxMT0NBVEUpOwor CWwyX2NhY2hlX3dyaXRlKExJTUFfTDJfQ0FDSEVfTUFYX1JFQURTLCAweDFjKTsKKworCXJldHVy biAwOworfQorCit2b2lkIGxpbWFfbDJfY2FjaGVfZmluaShzdHJ1Y3QgbGltYV9pcCAqaXApCit7 CisKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbDJfY2FjaGUuaCBi L2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbDJfY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLmM2M2ZiNjc2ZmYxNAotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbDJfY2FjaGUuaApAQCAtMCwwICsxLDE0IEBACisvKiBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQgKi8KKy8qIENvcHlyaWdodCAy MDE3LTIwMTkgUWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+ICovCisKKyNpZm5kZWYgX19MSU1B X0wyX0NBQ0hFX0hfXworI2RlZmluZSBfX0xJTUFfTDJfQ0FDSEVfSF9fCisKK3N0cnVjdCBsaW1h X2lwOworCitpbnQgbGltYV9sMl9jYWNoZV9pbml0KHN0cnVjdCBsaW1hX2lwICppcCk7Cit2b2lk IGxpbWFfbDJfY2FjaGVfZmluaShzdHJ1Y3QgbGltYV9pcCAqaXApOworCitpbnQgbGltYV9sMl9j YWNoZV9mbHVzaChzdHJ1Y3QgbGltYV9pcCAqaXApOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbW11LmMgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1h X21tdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOGUxNjUxZDZh NjFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9tbXUuYwpA QCAtMCwwICsxLDE0MiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1Ig TUlUCisvKiBDb3B5cmlnaHQgMjAxNy0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAq LworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb2xs Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlICJsaW1hX2RldmljZS5o IgorI2luY2x1ZGUgImxpbWFfbW11LmgiCisjaW5jbHVkZSAibGltYV92bS5oIgorI2luY2x1ZGUg ImxpbWFfb2JqZWN0LmgiCisjaW5jbHVkZSAibGltYV9yZWdzLmgiCisKKyNkZWZpbmUgbW11X3dy aXRlKHJlZywgZGF0YSkgd3JpdGVsKGRhdGEsIGlwLT5pb21lbSArIHJlZykKKyNkZWZpbmUgbW11 X3JlYWQocmVnKSByZWFkbChpcC0+aW9tZW0gKyByZWcpCisKKyNkZWZpbmUgbGltYV9tbXVfc2Vu ZF9jb21tYW5kKGNtZCwgYWRkciwgdmFsLCBjb25kKQkgICAgIFwKKyh7CQkJCQkJCSAgICAgXAor CWludCBfX3JldDsJCQkJCSAgICAgXAorCQkJCQkJCSAgICAgXAorCW1tdV93cml0ZShMSU1BX01N VV9DT01NQU5ELCBjbWQpOwkJICAgICBcCisJX19yZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoaXAt PmlvbWVtICsgKGFkZHIpLCB2YWwsICBcCisJCQkJICBjb25kLCAwLCAxMDApOwkgICAgIFwKKwlp ZiAoX19yZXQpCQkJCQkgICAgIFwKKwkJZGV2X2VycihkZXYtPmRldiwJCQkgICAgIFwKKwkJCSJt bXUgY29tbWFuZCAleCB0aW1lb3V0XG4iLCBjbWQpOyAgICBcCisJX19yZXQ7CQkJCQkJICAgICBc Cit9KQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbGltYV9tbXVfaXJxX2hhbmRsZXIoaW50IGlycSwg dm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbGltYV9pcCAqaXAgPSBkYXRhOworCXN0cnVjdCBsaW1h X2RldmljZSAqZGV2ID0gaXAtPmRldjsKKwl1MzIgc3RhdHVzID0gbW11X3JlYWQoTElNQV9NTVVf SU5UX1NUQVRVUyk7CisJc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZTsKKworCS8qIGZvciBz aGFyZWQgaXJxIGNhc2UgKi8KKwlpZiAoIXN0YXR1cykKKwkJcmV0dXJuIElSUV9OT05FOworCisJ aWYgKHN0YXR1cyAmIExJTUFfTU1VX0lOVF9QQUdFX0ZBVUxUKSB7CisJCXUzMiBmYXVsdCA9IG1t dV9yZWFkKExJTUFfTU1VX1BBR0VfRkFVTFRfQUREUik7CisKKwkJZGV2X2VycihkZXYtPmRldiwg Im1tdSBwYWdlIGZhdWx0IGF0IDB4JXggZnJvbSBidXMgaWQgJWQgb2YgdHlwZSAlcyBvbiAlc1xu IiwKKwkJCWZhdWx0LCBMSU1BX01NVV9TVEFUVVNfQlVTX0lEKHN0YXR1cyksCisJCQlzdGF0dXMg JiBMSU1BX01NVV9TVEFUVVNfUEFHRV9GQVVMVF9JU19XUklURSA/ICJ3cml0ZSIgOiAicmVhZCIs CisJCQlsaW1hX2lwX25hbWUoaXApKTsKKwl9CisKKwlpZiAoc3RhdHVzICYgTElNQV9NTVVfSU5U X1JFQURfQlVTX0VSUk9SKQorCQlkZXZfZXJyKGRldi0+ZGV2LCAibW11ICVzIGlycSBidXMgZXJy b3JcbiIsIGxpbWFfaXBfbmFtZShpcCkpOworCisJLyogbWFzayBhbGwgaW50ZXJydXB0cyBiZWZv cmUgcmVzdW1lICovCisJbW11X3dyaXRlKExJTUFfTU1VX0lOVF9NQVNLLCAwKTsKKwltbXVfd3Jp dGUoTElNQV9NTVVfSU5UX0NMRUFSLCBzdGF0dXMpOworCisJcGlwZSA9IGRldi0+cGlwZSArIChp cC0+aWQgPT0gbGltYV9pcF9ncG1tdSA/IGxpbWFfcGlwZV9ncCA6IGxpbWFfcGlwZV9wcCk7CisJ bGltYV9zY2hlZF9waXBlX21tdV9lcnJvcihwaXBlKTsKKworCXJldHVybiBJUlFfSEFORExFRDsK K30KKworaW50IGxpbWFfbW11X2luaXQoc3RydWN0IGxpbWFfaXAgKmlwKQoreworCXN0cnVjdCBs aW1hX2RldmljZSAqZGV2ID0gaXAtPmRldjsKKwlpbnQgZXJyOworCXUzMiB2OworCisJaWYgKGlw LT5pZCA9PSBsaW1hX2lwX3BwbW11X2JjYXN0KQorCQlyZXR1cm4gMDsKKworCW1tdV93cml0ZShM SU1BX01NVV9EVEVfQUREUiwgMHhDQUZFQkFCRSk7CisJaWYgKG1tdV9yZWFkKExJTUFfTU1VX0RU RV9BRERSKSAhPSAweENBRkVCMDAwKSB7CisJCWRldl9lcnIoZGV2LT5kZXYsICJtbXUgJXMgZHRl IHdyaXRlIHRlc3QgZmFpbFxuIiwgbGltYV9pcF9uYW1lKGlwKSk7CisJCXJldHVybiAtRUlPOwor CX0KKworCW1tdV93cml0ZShMSU1BX01NVV9DT01NQU5ELCBMSU1BX01NVV9DT01NQU5EX0hBUkRf UkVTRVQpOworCWVyciA9IGxpbWFfbW11X3NlbmRfY29tbWFuZChMSU1BX01NVV9DT01NQU5EX0hB UkRfUkVTRVQsCisJCQkJICAgIExJTUFfTU1VX0RURV9BRERSLCB2LCB2ID09IDApOworCWlmIChl cnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldi0+ZGV2LCBp cC0+aXJxLCBsaW1hX21tdV9pcnFfaGFuZGxlciwKKwkJCSAgICAgICBJUlFGX1NIQVJFRCwgbGlt YV9pcF9uYW1lKGlwKSwgaXApOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgIm1t dSAlcyBmYWlsIHRvIHJlcXVlc3QgaXJxXG4iLCBsaW1hX2lwX25hbWUoaXApKTsKKwkJcmV0dXJu IGVycjsKKwl9CisKKwltbXVfd3JpdGUoTElNQV9NTVVfSU5UX01BU0ssIExJTUFfTU1VX0lOVF9Q QUdFX0ZBVUxUIHwgTElNQV9NTVVfSU5UX1JFQURfQlVTX0VSUk9SKTsKKwltbXVfd3JpdGUoTElN QV9NTVVfRFRFX0FERFIsIGRldi0+ZW1wdHlfdm0tPnBkLmRtYSk7CisJcmV0dXJuIGxpbWFfbW11 X3NlbmRfY29tbWFuZChMSU1BX01NVV9DT01NQU5EX0VOQUJMRV9QQUdJTkcsCisJCQkJICAgICBM SU1BX01NVV9TVEFUVVMsIHYsCisJCQkJICAgICB2ICYgTElNQV9NTVVfU1RBVFVTX1BBR0lOR19F TkFCTEVEKTsKK30KKwordm9pZCBsaW1hX21tdV9maW5pKHN0cnVjdCBsaW1hX2lwICppcCkKK3sK KworfQorCit2b2lkIGxpbWFfbW11X3N3aXRjaF92bShzdHJ1Y3QgbGltYV9pcCAqaXAsIHN0cnVj dCBsaW1hX3ZtICp2bSkKK3sKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlwLT5kZXY7CisJ dTMyIHY7CisKKwlsaW1hX21tdV9zZW5kX2NvbW1hbmQoTElNQV9NTVVfQ09NTUFORF9FTkFCTEVf U1RBTEwsCisJCQkgICAgICBMSU1BX01NVV9TVEFUVVMsIHYsCisJCQkgICAgICB2ICYgTElNQV9N TVVfU1RBVFVTX1NUQUxMX0FDVElWRSk7CisKKwlpZiAodm0pCisJCW1tdV93cml0ZShMSU1BX01N VV9EVEVfQUREUiwgdm0tPnBkLmRtYSk7CisKKwkvKiBmbHVzaCB0aGUgVExCICovCisJbW11X3dy aXRlKExJTUFfTU1VX0NPTU1BTkQsIExJTUFfTU1VX0NPTU1BTkRfWkFQX0NBQ0hFKTsKKworCWxp bWFfbW11X3NlbmRfY29tbWFuZChMSU1BX01NVV9DT01NQU5EX0RJU0FCTEVfU1RBTEwsCisJCQkg ICAgICBMSU1BX01NVV9TVEFUVVMsIHYsCisJCQkgICAgICAhKHYgJiBMSU1BX01NVV9TVEFUVVNf U1RBTExfQUNUSVZFKSk7Cit9CisKK3ZvaWQgbGltYV9tbXVfcGFnZV9mYXVsdF9yZXN1bWUoc3Ry dWN0IGxpbWFfaXAgKmlwKQoreworCXN0cnVjdCBsaW1hX2RldmljZSAqZGV2ID0gaXAtPmRldjsK Kwl1MzIgc3RhdHVzID0gbW11X3JlYWQoTElNQV9NTVVfU1RBVFVTKTsKKwl1MzIgdjsKKworCWlm IChzdGF0dXMgJiBMSU1BX01NVV9TVEFUVVNfUEFHRV9GQVVMVF9BQ1RJVkUpIHsKKwkJZGV2X2lu Zm8oZGV2LT5kZXYsICJtbXUgcmVzdW1lXG4iKTsKKworCQltbXVfd3JpdGUoTElNQV9NTVVfSU5U X01BU0ssIDApOworCQltbXVfd3JpdGUoTElNQV9NTVVfRFRFX0FERFIsIDB4Q0FGRUJBQkUpOwor CQlsaW1hX21tdV9zZW5kX2NvbW1hbmQoTElNQV9NTVVfQ09NTUFORF9IQVJEX1JFU0VULAorCQkJ CSAgICAgIExJTUFfTU1VX0RURV9BRERSLCB2LCB2ID09IDApOworCQltbXVfd3JpdGUoTElNQV9N TVVfSU5UX01BU0ssIExJTUFfTU1VX0lOVF9QQUdFX0ZBVUxUIHwgTElNQV9NTVVfSU5UX1JFQURf QlVTX0VSUk9SKTsKKwkJbW11X3dyaXRlKExJTUFfTU1VX0RURV9BRERSLCBkZXYtPmVtcHR5X3Zt LT5wZC5kbWEpOworCQlsaW1hX21tdV9zZW5kX2NvbW1hbmQoTElNQV9NTVVfQ09NTUFORF9FTkFC TEVfUEFHSU5HLAorCQkJCSAgICAgIExJTUFfTU1VX1NUQVRVUywgdiwKKwkJCQkgICAgICB2ICYg TElNQV9NTVVfU1RBVFVTX1BBR0lOR19FTkFCTEVEKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbGltYS9saW1hX21tdS5oIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9t bXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhjNzgzMTliY2M4 ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbW11LmgKQEAg LTAsMCArMSwxNiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlU ICovCisvKiBDb3B5cmlnaHQgMjAxNy0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAq LworCisjaWZuZGVmIF9fTElNQV9NTVVfSF9fCisjZGVmaW5lIF9fTElNQV9NTVVfSF9fCisKK3N0 cnVjdCBsaW1hX2lwOworc3RydWN0IGxpbWFfdm07CisKK2ludCBsaW1hX21tdV9pbml0KHN0cnVj dCBsaW1hX2lwICppcCk7Cit2b2lkIGxpbWFfbW11X2Zpbmkoc3RydWN0IGxpbWFfaXAgKmlwKTsK Kwordm9pZCBsaW1hX21tdV9zd2l0Y2hfdm0oc3RydWN0IGxpbWFfaXAgKmlwLCBzdHJ1Y3QgbGlt YV92bSAqdm0pOwordm9pZCBsaW1hX21tdV9wYWdlX2ZhdWx0X3Jlc3VtZShzdHJ1Y3QgbGltYV9p cCAqaXApOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFf b2JqZWN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX29iamVjdC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNWM0MWY4NTlhNzJmCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9vYmplY3QuYwpAQCAtMCwwICsxLDEyMiBA QAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisvKiBDb3B5cmln aHQgMjAxOC0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaW5jbHVkZSA8 ZHJtL2RybV9wcmltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxs aW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSAibGltYV9vYmplY3QuaCIKKwordm9pZCBs aW1hX2JvX2Rlc3Ryb3koc3RydWN0IGxpbWFfYm8gKmJvKQoreworCWlmIChiby0+c2d0KSB7CisJ CWtmcmVlKGJvLT5wYWdlcyk7CisJCWRybV9wcmltZV9nZW1fZGVzdHJveSgmYm8tPmdlbSwgYm8t PnNndCk7CisJfSBlbHNlIHsKKwkJaWYgKGJvLT5wYWdlc19kbWFfYWRkcikgeworCQkJaW50IGks IG5wYWdlcyA9IGJvLT5nZW0uc2l6ZSA+PiBQQUdFX1NISUZUOworCisJCQlmb3IgKGkgPSAwOyBp IDwgbnBhZ2VzOyBpKyspIHsKKwkJCQlpZiAoYm8tPnBhZ2VzX2RtYV9hZGRyW2ldKQorCQkJCQlk bWFfdW5tYXBfcGFnZShiby0+Z2VtLmRldi0+ZGV2LAorCQkJCQkJICAgICAgIGJvLT5wYWdlc19k bWFfYWRkcltpXSwKKwkJCQkJCSAgICAgICBQQUdFX1NJWkUsIERNQV9CSURJUkVDVElPTkFMKTsK KwkJCX0KKwkJfQorCisJCWlmIChiby0+cGFnZXMpCisJCQlkcm1fZ2VtX3B1dF9wYWdlcygmYm8t PmdlbSwgYm8tPnBhZ2VzLCB0cnVlLCB0cnVlKTsKKwl9CisKKwlrZnJlZShiby0+cGFnZXNfZG1h X2FkZHIpOworCWRybV9nZW1fb2JqZWN0X3JlbGVhc2UoJmJvLT5nZW0pOworCWtmcmVlKGJvKTsK K30KKworc3RhdGljIHN0cnVjdCBsaW1hX2JvICpsaW1hX2JvX2NyZWF0ZV9zdHJ1Y3Qoc3RydWN0 IGxpbWFfZGV2aWNlICpkZXYsIHUzMiBzaXplLCB1MzIgZmxhZ3MsCisJCQkJCSAgICAgc3RydWN0 IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdikKK3sKKwlzdHJ1Y3QgbGltYV9ibyAqYm87CisJaW50 IGVycjsKKworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCisJYm8gPSBremFsbG9jKHNpemVv ZigqYm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJvKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVN KTsKKworCW11dGV4X2luaXQoJmJvLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmYm8tPnZhKTsK Kwliby0+Z2VtLnJlc3YgPSByZXN2OworCisJZXJyID0gZHJtX2dlbV9vYmplY3RfaW5pdChkZXYt PmRkZXYsICZiby0+Z2VtLCBzaXplKTsKKwlpZiAoZXJyKSB7CisJCWtmcmVlKGJvKTsKKwkJcmV0 dXJuIEVSUl9QVFIoZXJyKTsKKwl9CisKKwlyZXR1cm4gYm87Cit9CisKK3N0cnVjdCBsaW1hX2Jv ICpsaW1hX2JvX2NyZWF0ZShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiwgdTMyIHNpemUsCisJCQkg ICAgICAgdTMyIGZsYWdzLCBzdHJ1Y3Qgc2dfdGFibGUgKnNndCwKKwkJCSAgICAgICBzdHJ1Y3Qg cmVzZXJ2YXRpb25fb2JqZWN0ICpyZXN2KQoreworCWludCBpLCBlcnI7CisJc2l6ZV90IG5wYWdl czsKKwlzdHJ1Y3QgbGltYV9ibyAqYm8sICpyZXQ7CisKKwlibyA9IGxpbWFfYm9fY3JlYXRlX3N0 cnVjdChkZXYsIHNpemUsIGZsYWdzLCByZXN2KTsKKwlpZiAoSVNfRVJSKGJvKSkKKwkJcmV0dXJu IGJvOworCisJbnBhZ2VzID0gYm8tPmdlbS5zaXplID4+IFBBR0VfU0hJRlQ7CisKKwliby0+cGFn ZXNfZG1hX2FkZHIgPSBrY2FsbG9jKG5wYWdlcywgc2l6ZW9mKGRtYV9hZGRyX3QpLCBHRlBfS0VS TkVMKTsKKwlpZiAoIWJvLT5wYWdlc19kbWFfYWRkcikgeworCQlyZXQgPSBFUlJfUFRSKC1FTk9N RU0pOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJaWYgKHNndCkgeworCQliby0+c2d0ID0gc2d0 OworCisJCWJvLT5wYWdlcyA9IGtjYWxsb2MobnBhZ2VzLCBzaXplb2YoKmJvLT5wYWdlcyksIEdG UF9LRVJORUwpOworCQlpZiAoIWJvLT5wYWdlcykgeworCQkJcmV0ID0gRVJSX1BUUigtRU5PTUVN KTsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCisJCWVyciA9IGRybV9wcmltZV9zZ190b19wYWdl X2FkZHJfYXJyYXlzKAorCQkJc2d0LCBiby0+cGFnZXMsIGJvLT5wYWdlc19kbWFfYWRkciwgbnBh Z2VzKTsKKwkJaWYgKGVycikgeworCQkJcmV0ID0gRVJSX1BUUihlcnIpOworCQkJZ290byBlcnJf b3V0OworCQl9CisJfSBlbHNlIHsKKwkJbWFwcGluZ19zZXRfZ2ZwX21hc2soYm8tPmdlbS5maWxw LT5mX21hcHBpbmcsIEdGUF9ETUEzMik7CisJCWJvLT5wYWdlcyA9IGRybV9nZW1fZ2V0X3BhZ2Vz KCZiby0+Z2VtKTsKKwkJaWYgKElTX0VSUihiby0+cGFnZXMpKSB7CisJCQlyZXQgPSBFUlJfQ0FT VChiby0+cGFnZXMpOworCQkJYm8tPnBhZ2VzID0gTlVMTDsKKwkJCWdvdG8gZXJyX291dDsKKwkJ fQorCisJCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7IGkrKykgeworCQkJZG1hX2FkZHJfdCBhZGRy ID0gZG1hX21hcF9wYWdlKGRldi0+ZGV2LCBiby0+cGFnZXNbaV0sIDAsCisJCQkJCQkgICAgICAg UEFHRV9TSVpFLCBETUFfQklESVJFQ1RJT05BTCk7CisJCQlpZiAoZG1hX21hcHBpbmdfZXJyb3Io ZGV2LT5kZXYsIGFkZHIpKSB7CisJCQkJcmV0ID0gRVJSX1BUUigtRUZBVUxUKTsKKwkJCQlnb3Rv IGVycl9vdXQ7CisJCQl9CisJCQliby0+cGFnZXNfZG1hX2FkZHJbaV0gPSBhZGRyOworCQl9CisK Kwl9CisKKwlyZXR1cm4gYm87CisKK2Vycl9vdXQ6CisJbGltYV9ib19kZXN0cm95KGJvKTsKKwly ZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9vYmpl Y3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfb2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42NzM4NzI0YWZiN2IKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX29iamVjdC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8q IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAqLworLyogQ29weXJpZ2h0 IDIwMTgtMjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2lmbmRlZiBfX0xJ TUFfT0JKRUNUX0hfXworI2RlZmluZSBfX0xJTUFfT0JKRUNUX0hfXworCisjaW5jbHVkZSA8ZHJt L2RybV9nZW0uaD4KKworI2luY2x1ZGUgImxpbWFfZGV2aWNlLmgiCisKK3N0cnVjdCBsaW1hX2Jv IHsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgZ2VtOworCisJc3RydWN0IHBhZ2UgKipwYWdlczsK KwlkbWFfYWRkcl90ICpwYWdlc19kbWFfYWRkcjsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKKwl2 b2lkICp2YWRkcjsKKworCXN0cnVjdCBtdXRleCBsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgdmE7 Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsaW1hX2JvICoKK3RvX2xpbWFfYm8oc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihvYmosIHN0cnVj dCBsaW1hX2JvLCBnZW0pOworfQorCitzdHJ1Y3QgbGltYV9ibyAqbGltYV9ib19jcmVhdGUoc3Ry dWN0IGxpbWFfZGV2aWNlICpkZXYsIHUzMiBzaXplLAorCQkJICAgICAgIHUzMiBmbGFncywgc3Ry dWN0IHNnX3RhYmxlICpzZ3QsCisJCQkgICAgICAgc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCAq cmVzdik7Cit2b2lkIGxpbWFfYm9fZGVzdHJveShzdHJ1Y3QgbGltYV9ibyAqYm8pOwordm9pZCAq bGltYV9ib192bWFwKHN0cnVjdCBsaW1hX2JvICpibyk7Cit2b2lkIGxpbWFfYm9fdnVubWFwKHN0 cnVjdCBsaW1hX2JvICpibyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2xpbWEvbGltYV9wbXUuYyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfcG11LmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41NzFmNmQ2NjE1ODEKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3BtdS5jCkBAIC0wLDAgKzEsNjAg QEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorLyogQ29weXJp Z2h0IDIwMTctMjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2luY2x1ZGUg PGxpbnV4L2lvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSAi bGltYV9kZXZpY2UuaCIKKyNpbmNsdWRlICJsaW1hX3BtdS5oIgorI2luY2x1ZGUgImxpbWFfcmVn cy5oIgorCisjZGVmaW5lIHBtdV93cml0ZShyZWcsIGRhdGEpIHdyaXRlbChkYXRhLCBpcC0+aW9t ZW0gKyByZWcpCisjZGVmaW5lIHBtdV9yZWFkKHJlZykgcmVhZGwoaXAtPmlvbWVtICsgcmVnKQor CitzdGF0aWMgaW50IGxpbWFfcG11X3dhaXRfY21kKHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwlz dHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlwLT5kZXY7CisJaW50IGVycjsKKwl1MzIgdjsKKwor CWVyciA9IHJlYWRsX3BvbGxfdGltZW91dChpcC0+aW9tZW0gKyBMSU1BX1BNVV9JTlRfUkFXU1RB VCwKKwkJCQkgdiwgdiAmIExJTUFfUE1VX0lOVF9DTURfTUFTSywKKwkJCQkgMTAwLCAxMDAwMDAp OworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgInRpbWVvdXQgd2FpdCBwbWQgY21k XG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlwbXVfd3JpdGUoTElNQV9QTVVfSU5UX0NMRUFS LCBMSU1BX1BNVV9JTlRfQ01EX01BU0spOworCXJldHVybiAwOworfQorCitpbnQgbGltYV9wbXVf aW5pdChzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJaW50IGVycjsKKwl1MzIgc3RhdDsKKworCXBt dV93cml0ZShMSU1BX1BNVV9JTlRfTUFTSywgMCk7CisKKwkvKiBJZiB0aGlzIHZhbHVlIGlzIHRv byBsb3csIHdoZW4gaW4gaGlnaCBHUFUgY2xrIGZyZXEsCisJICogR1BVIHdpbGwgYmUgaW4gdW5z dGFibGUgc3RhdGUuCisJICovCisJcG11X3dyaXRlKExJTUFfUE1VX1NXX0RFTEFZLCAweGZmZmYp OworCisJLyogc3RhdHVzIHJlZyAxPW9mZiAwPW9uICovCisJc3RhdCA9IHBtdV9yZWFkKExJTUFf UE1VX1NUQVRVUyk7CisKKwkvKiBwb3dlciB1cCBhbGwgaXAgKi8KKwlpZiAoc3RhdCkgeworCQlw bXVfd3JpdGUoTElNQV9QTVVfUE9XRVJfVVAsIHN0YXQpOworCQllcnIgPSBsaW1hX3BtdV93YWl0 X2NtZChpcCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gMDsKK30K Kwordm9pZCBsaW1hX3BtdV9maW5pKHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKworfQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9wbXUuaCBiL2RyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfcG11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5h MmExODc3NWViMDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1h X3BtdS5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wIE9SIE1JVCAqLworLyogQ29weXJpZ2h0IDIwMTctMjAxOSBRaWFuZyBZdSA8eXVxODI1QGdt YWlsLmNvbT4gKi8KKworI2lmbmRlZiBfX0xJTUFfUE1VX0hfXworI2RlZmluZSBfX0xJTUFfUE1V X0hfXworCitzdHJ1Y3QgbGltYV9pcDsKKworaW50IGxpbWFfcG11X2luaXQoc3RydWN0IGxpbWFf aXAgKmlwKTsKK3ZvaWQgbGltYV9wbXVfZmluaShzdHJ1Y3QgbGltYV9pcCAqaXApOworCisjZW5k aWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfcHAuYyBiL2RyaXZlcnMv Z3B1L2RybS9saW1hL2xpbWFfcHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLjVkMjFhM2ZlODhhNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfcHAuYwpAQCAtMCwwICsxLDQyNCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAgT1IgTUlUCisvKiBDb3B5cmlnaHQgMjAxNy0yMDE5IFFpYW5nIFl1IDx5dXE4 MjVAZ21haWwuY29tPiAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVk ZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51 eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxkcm0vbGltYV9kcm0uaD4KKworI2luY2x1ZGUgImxpbWFf ZGV2aWNlLmgiCisjaW5jbHVkZSAibGltYV9wcC5oIgorI2luY2x1ZGUgImxpbWFfZGxidS5oIgor I2luY2x1ZGUgImxpbWFfYmNhc3QuaCIKKyNpbmNsdWRlICJsaW1hX3ZtLmgiCisjaW5jbHVkZSAi bGltYV9yZWdzLmgiCisKKyNkZWZpbmUgcHBfd3JpdGUocmVnLCBkYXRhKSB3cml0ZWwoZGF0YSwg aXAtPmlvbWVtICsgcmVnKQorI2RlZmluZSBwcF9yZWFkKHJlZykgcmVhZGwoaXAtPmlvbWVtICsg cmVnKQorCitzdGF0aWMgdm9pZCBsaW1hX3BwX2hhbmRsZV9pcnEoc3RydWN0IGxpbWFfaXAgKmlw LCB1MzIgc3RhdGUpCit7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSBpcC0+ZGV2OworCXN0 cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUgPSBkZXYtPnBpcGUgKyBsaW1hX3BpcGVfcHA7CisK KwlpZiAoc3RhdGUgJiBMSU1BX1BQX0lSUV9NQVNLX0VSUk9SKSB7CisJCXUzMiBzdGF0dXMgPSBw cF9yZWFkKExJTUFfUFBfU1RBVFVTKTsKKworCQlkZXZfZXJyKGRldi0+ZGV2LCAicHAgZXJyb3Ig aXJxIHN0YXRlPSV4IHN0YXR1cz0leFxuIiwKKwkJCXN0YXRlLCBzdGF0dXMpOworCisJCXBpcGUt PmVycm9yID0gdHJ1ZTsKKworCQkvKiBtYXNrIGFsbCBpbnRlcnJ1cHRzIGJlZm9yZSBoYXJkIHJl c2V0ICovCisJCXBwX3dyaXRlKExJTUFfUFBfSU5UX01BU0ssIDApOworCX0KKworCXBwX3dyaXRl KExJTUFfUFBfSU5UX0NMRUFSLCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBsaW1h X3BwX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGxpbWFfaXAg KmlwID0gZGF0YTsKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlwLT5kZXY7CisJc3RydWN0 IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSA9IGRldi0+cGlwZSArIGxpbWFfcGlwZV9wcDsKKwl1MzIg c3RhdGUgPSBwcF9yZWFkKExJTUFfUFBfSU5UX1NUQVRVUyk7CisKKwkvKiBmb3Igc2hhcmVkIGly cSBjYXNlICovCisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJbGltYV9wcF9o YW5kbGVfaXJxKGlwLCBzdGF0ZSk7CisKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcGlwZS0+ dGFzaykpCisJCWxpbWFfc2NoZWRfcGlwZV90YXNrX2RvbmUocGlwZSk7CisKKwlyZXR1cm4gSVJR X0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBsaW1hX3BwX2JjYXN0X2lycV9oYW5k bGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJaW50IGk7CisJaXJxcmV0dXJuX3QgcmV0ID0g SVJRX05PTkU7CisJc3RydWN0IGxpbWFfaXAgKnBwX2JjYXN0ID0gZGF0YTsKKwlzdHJ1Y3QgbGlt YV9kZXZpY2UgKmRldiA9IHBwX2JjYXN0LT5kZXY7CisJc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAq cGlwZSA9IGRldi0+cGlwZSArIGxpbWFfcGlwZV9wcDsKKwlzdHJ1Y3QgZHJtX2xpbWFfbTQ1MF9w cF9mcmFtZSAqZnJhbWUgPSBwaXBlLT5jdXJyZW50X3Rhc2stPmZyYW1lOworCisJZm9yIChpID0g MDsgaSA8IGZyYW1lLT5udW1fcHA7IGkrKykgeworCQlzdHJ1Y3QgbGltYV9pcCAqaXAgPSBwaXBl LT5wcm9jZXNzb3JbaV07CisJCXUzMiBzdGF0dXMsIHN0YXRlOworCisJCWlmIChwaXBlLT5kb25l ICYgKDEgPDwgaSkpCisJCQljb250aW51ZTsKKworCQkvKiBzdGF0dXMgcmVhZCBmaXJzdCBpbiBj YXNlIGludCBzdGF0ZSBjaGFuZ2UgaW4gdGhlIG1pZGRsZQorCQkgKiB3aGljaCBtYXkgbWlzcyB0 aGUgaW50ZXJydXB0IGhhbmRsaW5nCisJCSAqLworCQlzdGF0dXMgPSBwcF9yZWFkKExJTUFfUFBf U1RBVFVTKTsKKwkJc3RhdGUgPSBwcF9yZWFkKExJTUFfUFBfSU5UX1NUQVRVUyk7CisKKwkJaWYg KHN0YXRlKSB7CisJCQlsaW1hX3BwX2hhbmRsZV9pcnEoaXAsIHN0YXRlKTsKKwkJCXJldCA9IElS UV9IQU5ETEVEOworCQl9IGVsc2UgeworCQkJaWYgKHN0YXR1cyAmIExJTUFfUFBfU1RBVFVTX1JF TkRFUklOR19BQ1RJVkUpCisJCQkJY29udGludWU7CisJCX0KKworCQlwaXBlLT5kb25lIHw9ICgx IDw8IGkpOworCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcGlwZS0+dGFzaykpCisJCQlsaW1h X3NjaGVkX3BpcGVfdGFza19kb25lKHBpcGUpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyB2b2lkIGxpbWFfcHBfc29mdF9yZXNldF9hc3luYyhzdHJ1Y3QgbGltYV9pcCAqaXApCit7 CisJaWYgKGlwLT5kYXRhLmFzeW5jX3Jlc2V0KQorCQlyZXR1cm47CisKKwlwcF93cml0ZShMSU1B X1BQX0lOVF9NQVNLLCAwKTsKKwlwcF93cml0ZShMSU1BX1BQX0lOVF9SQVdTVEFULCBMSU1BX1BQ X0lSUV9NQVNLX0FMTCk7CisJcHBfd3JpdGUoTElNQV9QUF9DVFJMLCBMSU1BX1BQX0NUUkxfU09G VF9SRVNFVCk7CisJaXAtPmRhdGEuYXN5bmNfcmVzZXQgPSB0cnVlOworfQorCitzdGF0aWMgaW50 IGxpbWFfcHBfc29mdF9yZXNldF9wb2xsKHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwlyZXR1cm4g IShwcF9yZWFkKExJTUFfUFBfU1RBVFVTKSAmIExJTUFfUFBfU1RBVFVTX1JFTkRFUklOR19BQ1RJ VkUpICYmCisJCXBwX3JlYWQoTElNQV9QUF9JTlRfUkFXU1RBVCkgPT0gTElNQV9QUF9JUlFfUkVT RVRfQ09NUExFVEVEOworfQorCitzdGF0aWMgaW50IGxpbWFfcHBfc29mdF9yZXNldF9hc3luY193 YWl0X29uZShzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYg PSBpcC0+ZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBsaW1hX3BvbGxfdGltZW91dChpcCwgbGlt YV9wcF9zb2Z0X3Jlc2V0X3BvbGwsIDAsIDEwMCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRl di0+ZGV2LCAicHAgJXMgcmVzZXQgdGltZSBvdXRcbiIsIGxpbWFfaXBfbmFtZShpcCkpOworCQly ZXR1cm4gcmV0OworCX0KKworCXBwX3dyaXRlKExJTUFfUFBfSU5UX0NMRUFSLCBMSU1BX1BQX0lS UV9NQVNLX0FMTCk7CisJcHBfd3JpdGUoTElNQV9QUF9JTlRfTUFTSywgTElNQV9QUF9JUlFfTUFT S19VU0VEKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaW1hX3BwX3NvZnRfcmVzZXRf YXN5bmNfd2FpdChzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJaW50IGksIGVyciA9IDA7CisKKwlp ZiAoIWlwLT5kYXRhLmFzeW5jX3Jlc2V0KQorCQlyZXR1cm4gMDsKKworCWlmIChpcC0+aWQgPT0g bGltYV9pcF9wcF9iY2FzdCkgeworCQlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlwLT5kZXY7 CisJCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUgPSBkZXYtPnBpcGUgKyBsaW1hX3BpcGVf cHA7CisJCXN0cnVjdCBkcm1fbGltYV9tNDUwX3BwX2ZyYW1lICpmcmFtZSA9IHBpcGUtPmN1cnJl bnRfdGFzay0+ZnJhbWU7CisKKwkJZm9yIChpID0gMDsgaSA8IGZyYW1lLT5udW1fcHA7IGkrKykK KwkJCWVyciB8PSBsaW1hX3BwX3NvZnRfcmVzZXRfYXN5bmNfd2FpdF9vbmUocGlwZS0+cHJvY2Vz c29yW2ldKTsKKwl9IGVsc2UKKwkJZXJyID0gbGltYV9wcF9zb2Z0X3Jlc2V0X2FzeW5jX3dhaXRf b25lKGlwKTsKKworCWlwLT5kYXRhLmFzeW5jX3Jlc2V0ID0gZmFsc2U7CisJcmV0dXJuIGVycjsK K30KKworc3RhdGljIHZvaWQgbGltYV9wcF93cml0ZV9mcmFtZShzdHJ1Y3QgbGltYV9pcCAqaXAs IHUzMiAqZnJhbWUsIHUzMiAqd2IpCit7CisJaW50IGksIGosIG4gPSAwOworCisJZm9yIChpID0g MDsgaSA8IExJTUFfUFBfRlJBTUVfUkVHX05VTTsgaSsrKQorCQl3cml0ZWwoZnJhbWVbaV0sIGlw LT5pb21lbSArIExJTUFfUFBfRlJBTUUgKyBpICogNCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsg aSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBMSU1BX1BQX1dCX1JFR19OVU07IGorKykKKwkJCXdy aXRlbCh3YltuKytdLCBpcC0+aW9tZW0gKyBMSU1BX1BQX1dCKGkpICsgaiAqIDQpOworCX0KK30K Kworc3RhdGljIGludCBsaW1hX3BwX2hhcmRfcmVzZXRfcG9sbChzdHJ1Y3QgbGltYV9pcCAqaXAp Cit7CisJcHBfd3JpdGUoTElNQV9QUF9QRVJGX0NOVF8wX0xJTUlULCAweEMwMUEwMDAwKTsKKwly ZXR1cm4gcHBfcmVhZChMSU1BX1BQX1BFUkZfQ05UXzBfTElNSVQpID09IDB4QzAxQTAwMDA7Cit9 CisKK3N0YXRpYyBpbnQgbGltYV9wcF9oYXJkX3Jlc2V0KHN0cnVjdCBsaW1hX2lwICppcCkKK3sK KwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlwLT5kZXY7CisJaW50IHJldDsKKworCXBwX3dy aXRlKExJTUFfUFBfUEVSRl9DTlRfMF9MSU1JVCwgMHhDMEZGRTAwMCk7CisJcHBfd3JpdGUoTElN QV9QUF9JTlRfTUFTSywgMCk7CisJcHBfd3JpdGUoTElNQV9QUF9DVFJMLCBMSU1BX1BQX0NUUkxf Rk9SQ0VfUkVTRVQpOworCXJldCA9IGxpbWFfcG9sbF90aW1lb3V0KGlwLCBsaW1hX3BwX2hhcmRf cmVzZXRfcG9sbCwgMTAsIDEwMCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAi cHAgaGFyZCByZXNldCB0aW1lb3V0XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwcF93cml0 ZShMSU1BX1BQX1BFUkZfQ05UXzBfTElNSVQsIDApOworCXBwX3dyaXRlKExJTUFfUFBfSU5UX0NM RUFSLCBMSU1BX1BQX0lSUV9NQVNLX0FMTCk7CisJcHBfd3JpdGUoTElNQV9QUF9JTlRfTUFTSywg TElNQV9QUF9JUlFfTUFTS19VU0VEKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbGlt YV9wcF9wcmludF92ZXJzaW9uKHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwl1MzIgdmVyc2lvbiwg bWFqb3IsIG1pbm9yOworCWNoYXIgKm5hbWU7CisKKwl2ZXJzaW9uID0gcHBfcmVhZChMSU1BX1BQ X1ZFUlNJT04pOworCW1ham9yID0gKHZlcnNpb24gPj4gOCkgJiAweEZGOworCW1pbm9yID0gdmVy c2lvbiAmIDB4RkY7CisJc3dpdGNoICh2ZXJzaW9uID4+IDE2KSB7CisJY2FzZSAweEM4MDc6CisJ ICAgIG5hbWUgPSAibWFsaTIwMCI7CisJCWJyZWFrOworCWNhc2UgMHhDRTA3OgorCQluYW1lID0g Im1hbGkzMDAiOworCQlicmVhazsKKwljYXNlIDB4Q0QwNzoKKwkJbmFtZSA9ICJtYWxpNDAwIjsK KwkJYnJlYWs7CisJY2FzZSAweENGMDc6CisJCW5hbWUgPSAibWFsaTQ1MCI7CisJCWJyZWFrOwor CWRlZmF1bHQ6CisJCW5hbWUgPSAidW5rbm93biI7CisJCWJyZWFrOworCX0KKwlkZXZfaW5mbyhp cC0+ZGV2LT5kZXYsICIlcyAtICVzIHZlcnNpb24gbWFqb3IgJWQgbWlub3IgJWRcbiIsCisJCSBs aW1hX2lwX25hbWUoaXApLCBuYW1lLCBtYWpvciwgbWlub3IpOworfQorCitpbnQgbGltYV9wcF9p bml0KHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlw LT5kZXY7CisJaW50IGVycjsKKworCWxpbWFfcHBfcHJpbnRfdmVyc2lvbihpcCk7CisKKwlpcC0+ ZGF0YS5hc3luY19yZXNldCA9IGZhbHNlOworCWxpbWFfcHBfc29mdF9yZXNldF9hc3luYyhpcCk7 CisJZXJyID0gbGltYV9wcF9zb2Z0X3Jlc2V0X2FzeW5jX3dhaXQoaXApOworCWlmIChlcnIpCisJ CXJldHVybiBlcnI7CisKKwllcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldi0+ZGV2LCBpcC0+aXJx LCBsaW1hX3BwX2lycV9oYW5kbGVyLAorCQkJICAgICAgIElSUUZfU0hBUkVELCBsaW1hX2lwX25h bWUoaXApLCBpcCk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAicHAgJXMgZmFp bCB0byByZXF1ZXN0IGlycVxuIiwKKwkJCWxpbWFfaXBfbmFtZShpcCkpOworCQlyZXR1cm4gZXJy OworCX0KKworCWRldi0+cHBfdmVyc2lvbiA9IHBwX3JlYWQoTElNQV9QUF9WRVJTSU9OKTsKKwor CXJldHVybiAwOworfQorCit2b2lkIGxpbWFfcHBfZmluaShzdHJ1Y3QgbGltYV9pcCAqaXApCit7 CisKK30KKworaW50IGxpbWFfcHBfYmNhc3RfaW5pdChzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJ c3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSBpcC0+ZGV2OworCWludCBlcnI7CisKKwllcnIgPSBk ZXZtX3JlcXVlc3RfaXJxKGRldi0+ZGV2LCBpcC0+aXJxLCBsaW1hX3BwX2JjYXN0X2lycV9oYW5k bGVyLAorCQkJICAgICAgIElSUUZfU0hBUkVELCBsaW1hX2lwX25hbWUoaXApLCBpcCk7CisJaWYg KGVycikgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAicHAgJXMgZmFpbCB0byByZXF1ZXN0IGlycVxu IiwKKwkJCWxpbWFfaXBfbmFtZShpcCkpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAw OworfQorCit2b2lkIGxpbWFfcHBfYmNhc3RfZmluaShzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisK K30KKworc3RhdGljIGludCBsaW1hX3BwX3Rhc2tfdmFsaWRhdGUoc3RydWN0IGxpbWFfc2NoZWRf cGlwZSAqcGlwZSwKKwkJCQkgc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzaykKK3sKKwl1MzIg bnVtX3BwOworCisJaWYgKHBpcGUtPmJjYXN0X3Byb2Nlc3NvcikgeworCQlzdHJ1Y3QgZHJtX2xp bWFfbTQ1MF9wcF9mcmFtZSAqZiA9IHRhc2stPmZyYW1lOworCisJCW51bV9wcCA9IGYtPm51bV9w cDsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgZHJtX2xpbWFfbTQwMF9wcF9mcmFtZSAqZiA9IHRhc2st PmZyYW1lOworCisJCW51bV9wcCA9IGYtPm51bV9wcDsKKwl9CisKKwlpZiAobnVtX3BwID09IDAg fHwgbnVtX3BwID4gcGlwZS0+bnVtX3Byb2Nlc3NvcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbGltYV9wcF90YXNrX3J1bihzdHJ1Y3QgbGltYV9z Y2hlZF9waXBlICpwaXBlLAorCQkJICAgICBzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrKQor eworCWlmIChwaXBlLT5iY2FzdF9wcm9jZXNzb3IpIHsKKwkJc3RydWN0IGRybV9saW1hX200NTBf cHBfZnJhbWUgKmZyYW1lID0gdGFzay0+ZnJhbWU7CisJCXN0cnVjdCBsaW1hX2RldmljZSAqZGV2 ID0gcGlwZS0+YmNhc3RfcHJvY2Vzc29yLT5kZXY7CisJCXN0cnVjdCBsaW1hX2lwICppcCA9IHBp cGUtPmJjYXN0X3Byb2Nlc3NvcjsKKwkJaW50IGk7CisKKwkJcGlwZS0+ZG9uZSA9IDA7CisJCWF0 b21pY19zZXQoJnBpcGUtPnRhc2ssIGZyYW1lLT5udW1fcHApOworCisJCWlmIChmcmFtZS0+dXNl X2RsYnUpIHsKKwkJCWxpbWFfZGxidV9lbmFibGUoZGV2LCBmcmFtZS0+bnVtX3BwKTsKKworCQkJ ZnJhbWUtPmZyYW1lW0xJTUFfUFBfRlJBTUUgPj4gMl0gPSBMSU1BX1ZBX1JFU0VSVkVfRExCVTsK KwkJCWxpbWFfZGxidV9zZXRfcmVnKGRldi0+aXAgKyBsaW1hX2lwX2RsYnUsIGZyYW1lLT5kbGJ1 X3JlZ3MpOworCQl9IGVsc2UKKwkJCWxpbWFfZGxidV9kaXNhYmxlKGRldik7CisKKwkJbGltYV9i Y2FzdF9lbmFibGUoZGV2LCBmcmFtZS0+bnVtX3BwKTsKKworCQlsaW1hX3BwX3NvZnRfcmVzZXRf YXN5bmNfd2FpdChpcCk7CisKKwkJbGltYV9wcF93cml0ZV9mcmFtZShpcCwgZnJhbWUtPmZyYW1l LCBmcmFtZS0+d2IpOworCisJCWZvciAoaSA9IDA7IGkgPCBmcmFtZS0+bnVtX3BwOyBpKyspIHsK KwkJCXN0cnVjdCBsaW1hX2lwICppcCA9IHBpcGUtPnByb2Nlc3NvcltpXTsKKworCQkJcHBfd3Jp dGUoTElNQV9QUF9TVEFDSywgZnJhbWUtPmZyYWdtZW50X3N0YWNrX2FkZHJlc3NbaV0pOworCQkJ aWYgKCFmcmFtZS0+dXNlX2RsYnUpCisJCQkJcHBfd3JpdGUoTElNQV9QUF9GUkFNRSwgZnJhbWUt PnBsYnVfYXJyYXlfYWRkcmVzc1tpXSk7CisJCX0KKworCQlwcF93cml0ZShMSU1BX1BQX0NUUkws IExJTUFfUFBfQ1RSTF9TVEFSVF9SRU5ERVJJTkcpOworCX0gZWxzZSB7CisJCXN0cnVjdCBkcm1f bGltYV9tNDAwX3BwX2ZyYW1lICpmcmFtZSA9IHRhc2stPmZyYW1lOworCQlpbnQgaTsKKworCQlh dG9taWNfc2V0KCZwaXBlLT50YXNrLCBmcmFtZS0+bnVtX3BwKTsKKworCQlmb3IgKGkgPSAwOyBp IDwgZnJhbWUtPm51bV9wcDsgaSsrKSB7CisJCQlzdHJ1Y3QgbGltYV9pcCAqaXAgPSBwaXBlLT5w cm9jZXNzb3JbaV07CisKKwkJCWZyYW1lLT5mcmFtZVtMSU1BX1BQX0ZSQU1FID4+IDJdID0KKwkJ CQlmcmFtZS0+cGxidV9hcnJheV9hZGRyZXNzW2ldOworCQkJZnJhbWUtPmZyYW1lW0xJTUFfUFBf U1RBQ0sgPj4gMl0gPQorCQkJCWZyYW1lLT5mcmFnbWVudF9zdGFja19hZGRyZXNzW2ldOworCisJ CQlsaW1hX3BwX3NvZnRfcmVzZXRfYXN5bmNfd2FpdChpcCk7CisKKwkJCWxpbWFfcHBfd3JpdGVf ZnJhbWUoaXAsIGZyYW1lLT5mcmFtZSwgZnJhbWUtPndiKTsKKworCQkJcHBfd3JpdGUoTElNQV9Q UF9DVFJMLCBMSU1BX1BQX0NUUkxfU1RBUlRfUkVOREVSSU5HKTsKKwkJfQorCX0KK30KKworc3Rh dGljIHZvaWQgbGltYV9wcF90YXNrX2Zpbmkoc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSkK K3sKKwlpZiAocGlwZS0+YmNhc3RfcHJvY2Vzc29yKQorCQlsaW1hX3BwX3NvZnRfcmVzZXRfYXN5 bmMocGlwZS0+YmNhc3RfcHJvY2Vzc29yKTsKKwllbHNlIHsKKwkJaW50IGk7CisKKwkJZm9yIChp ID0gMDsgaSA8IHBpcGUtPm51bV9wcm9jZXNzb3I7IGkrKykKKwkJCWxpbWFfcHBfc29mdF9yZXNl dF9hc3luYyhwaXBlLT5wcm9jZXNzb3JbaV0pOworCX0KK30KKworc3RhdGljIHZvaWQgbGltYV9w cF90YXNrX2Vycm9yKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUpCit7CisJaW50IGk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgcGlwZS0+bnVtX3Byb2Nlc3NvcjsgaSsrKSB7CisJCXN0cnVjdCBs aW1hX2lwICppcCA9IHBpcGUtPnByb2Nlc3NvcltpXTsKKworCQlkZXZfZXJyKGlwLT5kZXYtPmRl diwgInBwIHRhc2sgZXJyb3IgJWQgaW50X3N0YXRlPSV4IHN0YXR1cz0leFxuIiwKKwkJCWksIHBw X3JlYWQoTElNQV9QUF9JTlRfU1RBVFVTKSwgcHBfcmVhZChMSU1BX1BQX1NUQVRVUykpOworCisJ CWxpbWFfcHBfaGFyZF9yZXNldChpcCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBsaW1hX3BwX3Rh c2tfbW11X2Vycm9yKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUpCit7CisJaWYgKGF0b21p Y19kZWNfYW5kX3Rlc3QoJnBpcGUtPnRhc2spKQorCQlsaW1hX3NjaGVkX3BpcGVfdGFza19kb25l KHBpcGUpOworfQorCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmxpbWFfcHBfdGFza19zbGFi Oworc3RhdGljIGludCBsaW1hX3BwX3Rhc2tfc2xhYl9yZWZjbnQ7CisKK2ludCBsaW1hX3BwX3Bp cGVfaW5pdChzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldikKK3sKKwlpbnQgZnJhbWVfc2l6ZTsKKwlz dHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlID0gZGV2LT5waXBlICsgbGltYV9waXBlX3BwOwor CisJaWYgKGRldi0+aWQgPT0gbGltYV9ncHVfbWFsaTQwMCkKKwkJZnJhbWVfc2l6ZSA9IHNpemVv ZihzdHJ1Y3QgZHJtX2xpbWFfbTQwMF9wcF9mcmFtZSk7CisJZWxzZQorCQlmcmFtZV9zaXplID0g c2l6ZW9mKHN0cnVjdCBkcm1fbGltYV9tNDUwX3BwX2ZyYW1lKTsKKworCWlmICghbGltYV9wcF90 YXNrX3NsYWIpIHsKKwkJbGltYV9wcF90YXNrX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZV91c2Vy Y29weSgKKwkJCSJsaW1hX3BwX3Rhc2siLCBzaXplb2Yoc3RydWN0IGxpbWFfc2NoZWRfdGFzaykg KyBmcmFtZV9zaXplLAorCQkJMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLCBzaXplb2Yoc3RydWN0IGxp bWFfc2NoZWRfdGFzayksCisJCQlmcmFtZV9zaXplLCBOVUxMKTsKKwkJaWYgKCFsaW1hX3BwX3Rh c2tfc2xhYikKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKwlsaW1hX3BwX3Rhc2tfc2xhYl9yZWZj bnQrKzsKKworCXBpcGUtPmZyYW1lX3NpemUgPSBmcmFtZV9zaXplOworCXBpcGUtPnRhc2tfc2xh YiA9IGxpbWFfcHBfdGFza19zbGFiOworCisJcGlwZS0+dGFza192YWxpZGF0ZSA9IGxpbWFfcHBf dGFza192YWxpZGF0ZTsKKwlwaXBlLT50YXNrX3J1biA9IGxpbWFfcHBfdGFza19ydW47CisJcGlw ZS0+dGFza19maW5pID0gbGltYV9wcF90YXNrX2Zpbmk7CisJcGlwZS0+dGFza19lcnJvciA9IGxp bWFfcHBfdGFza19lcnJvcjsKKwlwaXBlLT50YXNrX21tdV9lcnJvciA9IGxpbWFfcHBfdGFza19t bXVfZXJyb3I7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBsaW1hX3BwX3BpcGVfZmluaShzdHJ1 Y3QgbGltYV9kZXZpY2UgKmRldikKK3sKKwlpZiAoIS0tbGltYV9wcF90YXNrX3NsYWJfcmVmY250 KSB7CisJCWttZW1fY2FjaGVfZGVzdHJveShsaW1hX3BwX3Rhc2tfc2xhYik7CisJCWxpbWFfcHBf dGFza19zbGFiID0gTlVMTDsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGlt YS9saW1hX3BwLmggYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3BwLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iZjYwYzc3YjI2MzMKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3BwLmgKQEAgLTAsMCArMSwxOSBAQAorLyog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCisvKiBDb3B5cmlnaHQg MjAxNy0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaWZuZGVmIF9fTElN QV9QUF9IX18KKyNkZWZpbmUgX19MSU1BX1BQX0hfXworCitzdHJ1Y3QgbGltYV9pcDsKK3N0cnVj dCBsaW1hX2RldmljZTsKKworaW50IGxpbWFfcHBfaW5pdChzdHJ1Y3QgbGltYV9pcCAqaXApOwor dm9pZCBsaW1hX3BwX2Zpbmkoc3RydWN0IGxpbWFfaXAgKmlwKTsKKworaW50IGxpbWFfcHBfYmNh c3RfaW5pdChzdHJ1Y3QgbGltYV9pcCAqaXApOwordm9pZCBsaW1hX3BwX2JjYXN0X2Zpbmkoc3Ry dWN0IGxpbWFfaXAgKmlwKTsKKworaW50IGxpbWFfcHBfcGlwZV9pbml0KHN0cnVjdCBsaW1hX2Rl dmljZSAqZGV2KTsKK3ZvaWQgbGltYV9wcF9waXBlX2Zpbmkoc3RydWN0IGxpbWFfZGV2aWNlICpk ZXYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfcmVn cy5oIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hY2U4ZWNlZmJlOTAKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3JlZ3MuaApAQCAtMCwwICsxLDI5OCBAQAorLyogU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qIENvcHlyaWdodCAyMDEwLTIwMTcg QVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAxNy0yMDE5 IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPgorICovCisKKyNpZm5kZWYgX19MSU1BX1JFR1Nf SF9fCisjZGVmaW5lIF9fTElNQV9SRUdTX0hfXworCisvKiBUaGlzIGZpbGUncyByZWdpc3RlciBk ZWZpbml0aW9uIGlzIGNvbGxlY3RlZCBmcm9tIHRoZQorICogb2ZmaWNpYWwgQVJNIE1hbGkgVXRn YXJkIEdQVSBrZXJuZWwgZHJpdmVyIHNvdXJjZSBjb2RlCisgKi8KKworLyogUE1VIHJlZ3MgKi8K KyNkZWZpbmUgTElNQV9QTVVfUE9XRVJfVVAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5l IExJTUFfUE1VX1BPV0VSX0RPV04gICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSAgIExJTUFf UE1VX1BPV0VSX0dQMF9NQVNLICAgICAgICAgIEJJVCgwKQorI2RlZmluZSAgIExJTUFfUE1VX1BP V0VSX0wyX01BU0sgICAgICAgICAgIEJJVCgxKQorI2RlZmluZSAgIExJTUFfUE1VX1BPV0VSX1BQ X01BU0soaSkgICAgICAgIEJJVCgyICsgaSkKKworLyoKKyAqIE9uIE1hbGk0NTAgZWFjaCBibG9j ayBhdXRvbWF0aWNhbGx5IHN0YXJ0cyB1cCBpdHMgY29ycmVzcG9uZGluZyBMMgorICogYW5kIHRo ZSBQUHMgYXJlIG5vdCBmdWxseSBpbmRlcGVuZGVudCBjb250cm9sbGFibGUuCisgKiBJbnN0ZWFk IFBQMCwgUFAxLTMgYW5kIFBQNC03IGNhbiBiZSB0dXJuZWQgb24gb3Igb2ZmLgorICovCisjZGVm aW5lICAgTElNQTQ1MF9QTVVfUE9XRVJfUFAwX01BU0sgICAgICAgQklUKDEpCisjZGVmaW5lICAg TElNQTQ1MF9QTVVfUE9XRVJfUFAxM19NQVNLICAgICAgQklUKDIpCisjZGVmaW5lICAgTElNQTQ1 MF9QTVVfUE9XRVJfUFA0N19NQVNLICAgICAgQklUKDMpCisKKyNkZWZpbmUgTElNQV9QTVVfU1RB VFVTICAgICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIExJTUFfUE1VX0lOVF9NQVNLICAg ICAgICAgICAgICAgICAgMHgwQworI2RlZmluZSBMSU1BX1BNVV9JTlRfUkFXU1RBVCAgICAgICAg ICAgICAgIDB4MTAKKyNkZWZpbmUgTElNQV9QTVVfSU5UX0NMRUFSICAgICAgICAgICAgICAgICAw eDE4CisjZGVmaW5lICAgTElNQV9QTVVfSU5UX0NNRF9NQVNLICAgICAgICAgICAgQklUKDApCisj ZGVmaW5lIExJTUFfUE1VX1NXX0RFTEFZICAgICAgICAgICAgICAgICAgMHgxQworCisvKiBMMiBj YWNoZSByZWdzICovCisjZGVmaW5lIExJTUFfTDJfQ0FDSEVfU0laRSAgICAgICAgICAgICAgICAg ICAweDAwMDQKKyNkZWZpbmUgTElNQV9MMl9DQUNIRV9TVEFUVVMgICAgICAgICAgICAgICAgIDB4 MDAwOAorI2RlZmluZSAgIExJTUFfTDJfQ0FDSEVfU1RBVFVTX0NPTU1BTkRfQlVTWSAgQklUKDAp CisjZGVmaW5lICAgTElNQV9MMl9DQUNIRV9TVEFUVVNfREFUQV9CVVNZICAgICBCSVQoMSkKKyNk ZWZpbmUgTElNQV9MMl9DQUNIRV9DT01NQU5EICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmlu ZSAgIExJTUFfTDJfQ0FDSEVfQ09NTUFORF9DTEVBUl9BTEwgICAgQklUKDApCisjZGVmaW5lIExJ TUFfTDJfQ0FDSEVfQ0xFQVJfUEFHRSAgICAgICAgICAgICAweDAwMTQKKyNkZWZpbmUgTElNQV9M Ml9DQUNIRV9NQVhfUkVBRFMgICAgICAgICAgICAgIDB4MDAxOAorI2RlZmluZSBMSU1BX0wyX0NB Q0hFX0VOQUJMRSAgICAgICAgICAgICAgICAgMHgwMDFDCisjZGVmaW5lICAgTElNQV9MMl9DQUNI RV9FTkFCTEVfQUNDRVNTICAgICAgICBCSVQoMCkKKyNkZWZpbmUgICBMSU1BX0wyX0NBQ0hFX0VO QUJMRV9SRUFEX0FMTE9DQVRFIEJJVCgxKQorI2RlZmluZSBMSU1BX0wyX0NBQ0hFX1BFUkZDTlRf U1JDMCAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIExJTUFfTDJfQ0FDSEVfUEVSRkNOVF9WQUww ICAgICAgICAgICAweDAwMjQKKyNkZWZpbmUgTElNQV9MMl9DQUNIRV9QRVJGQ05UX1NSQzEgICAg ICAgICAgIDB4MDAyOAorI2RlZmluZSBMSU1BX0wyX0NBQ0hFX0VSRkNOVF9WQUwxICAgICAgICAg ICAgMHgwMDJDCisKKy8qIEdQIHJlZ3MgKi8KKyNkZWZpbmUgTElNQV9HUF9WU0NMX1NUQVJUX0FE RFIgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBMSU1BX0dQX1ZTQ0xfRU5EX0FERFIgICAg ICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIExJTUFfR1BfUExCVUNMX1NUQVJUX0FERFIgICAg ICAgICAgICAgIDB4MDgKKyNkZWZpbmUgTElNQV9HUF9QTEJVQ0xfRU5EX0FERFIgICAgICAgICAg ICAgICAgMHgwYworI2RlZmluZSBMSU1BX0dQX1BMQlVfQUxMT0NfU1RBUlRfQUREUiAgICAgICAg ICAweDEwCisjZGVmaW5lIExJTUFfR1BfUExCVV9BTExPQ19FTkRfQUREUiAgICAgICAgICAgIDB4 MTQKKyNkZWZpbmUgTElNQV9HUF9DTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMAor I2RlZmluZSAgIExJTUFfR1BfQ01EX1NUQVJUX1ZTICAgICAgICAgICAgICAgICBCSVQoMCkKKyNk ZWZpbmUgICBMSU1BX0dQX0NNRF9TVEFSVF9QTEJVICAgICAgICAgICAgICAgQklUKDEpCisjZGVm aW5lICAgTElNQV9HUF9DTURfVVBEQVRFX1BMQlVfQUxMT0MgICAgICAgIEJJVCg0KQorI2RlZmlu ZSAgIExJTUFfR1BfQ01EX1JFU0VUICAgICAgICAgICAgICAgICAgICBCSVQoNSkKKyNkZWZpbmUg ICBMSU1BX0dQX0NNRF9GT1JDRV9IQU5HICAgICAgICAgICAgICAgQklUKDYpCisjZGVmaW5lICAg TElNQV9HUF9DTURfU1RPUF9CVVMgICAgICAgICAgICAgICAgIEJJVCg5KQorI2RlZmluZSAgIExJ TUFfR1BfQ01EX1NPRlRfUkVTRVQgICAgICAgICAgICAgICBCSVQoMTApCisjZGVmaW5lIExJTUFf R1BfSU5UX1JBV1NUQVQgICAgICAgICAgICAgICAgICAgIDB4MjQKKyNkZWZpbmUgTElNQV9HUF9J TlRfQ0xFQVIgICAgICAgICAgICAgICAgICAgICAgMHgyOAorI2RlZmluZSBMSU1BX0dQX0lOVF9N QVNLICAgICAgICAgICAgICAgICAgICAgICAweDJDCisjZGVmaW5lIExJTUFfR1BfSU5UX1NUQVQg ICAgICAgICAgICAgICAgICAgICAgIDB4MzAKKyNkZWZpbmUgICBMSU1BX0dQX0lSUV9WU19FTkRf Q01EX0xTVCAgICAgICAgICAgQklUKDApCisjZGVmaW5lICAgTElNQV9HUF9JUlFfUExCVV9FTkRf Q01EX0xTVCAgICAgICAgIEJJVCgxKQorI2RlZmluZSAgIExJTUFfR1BfSVJRX1BMQlVfT1VUX09G X01FTSAgICAgICAgICBCSVQoMikKKyNkZWZpbmUgICBMSU1BX0dQX0lSUV9WU19TRU1fSVJRICAg ICAgICAgICAgICAgQklUKDMpCisjZGVmaW5lICAgTElNQV9HUF9JUlFfUExCVV9TRU1fSVJRICAg ICAgICAgICAgIEJJVCg0KQorI2RlZmluZSAgIExJTUFfR1BfSVJRX0hBTkcgICAgICAgICAgICAg ICAgICAgICBCSVQoNSkKKyNkZWZpbmUgICBMSU1BX0dQX0lSUV9GT1JDRV9IQU5HICAgICAgICAg ICAgICAgQklUKDYpCisjZGVmaW5lICAgTElNQV9HUF9JUlFfUEVSRl9DTlRfMF9MSU1JVCAgICAg ICAgIEJJVCg3KQorI2RlZmluZSAgIExJTUFfR1BfSVJRX1BFUkZfQ05UXzFfTElNSVQgICAgICAg ICBCSVQoOCkKKyNkZWZpbmUgICBMSU1BX0dQX0lSUV9XUklURV9CT1VORF9FUlIgICAgICAgICAg QklUKDkpCisjZGVmaW5lICAgTElNQV9HUF9JUlFfU1lOQ19FUlJPUiAgICAgICAgICAgICAgIEJJ VCgxMCkKKyNkZWZpbmUgICBMSU1BX0dQX0lSUV9BWElfQlVTX0VSUk9SICAgICAgICAgICAgQklU KDExKQorI2RlZmluZSAgIExJTUFfR1BfSVJRX0FYSV9CVVNfU1RPUFBFRCAgICAgICAgICBCSVQo MTIpCisjZGVmaW5lICAgTElNQV9HUF9JUlFfVlNfSU5WQUxJRF9DTUQgICAgICAgICAgIEJJVCgx MykKKyNkZWZpbmUgICBMSU1BX0dQX0lSUV9QTEJfSU5WQUxJRF9DTUQgICAgICAgICAgQklUKDE0 KQorI2RlZmluZSAgIExJTUFfR1BfSVJRX1JFU0VUX0NPTVBMRVRFRCAgICAgICAgICBCSVQoMTkp CisjZGVmaW5lICAgTElNQV9HUF9JUlFfU0VNQVBIT1JFX1VOREVSRkxPVyAgICAgIEJJVCgyMCkK KyNkZWZpbmUgICBMSU1BX0dQX0lSUV9TRU1BUEhPUkVfT1ZFUkZMT1cgICAgICAgQklUKDIxKQor I2RlZmluZSAgIExJTUFfR1BfSVJRX1BUUl9BUlJBWV9PVVRfT0ZfQk9VTkRTICBCSVQoMjIpCisj ZGVmaW5lIExJTUFfR1BfV1JJVEVfQk9VTkRfTE9XICAgICAgICAgICAgICAgIDB4MzQKKyNkZWZp bmUgTElNQV9HUF9QRVJGX0NOVF8wX0VOQUJMRSAgICAgICAgICAgICAgMHgzQworI2RlZmluZSBM SU1BX0dQX1BFUkZfQ05UXzFfRU5BQkxFICAgICAgICAgICAgICAweDQwCisjZGVmaW5lIExJTUFf R1BfUEVSRl9DTlRfMF9TUkMgICAgICAgICAgICAgICAgIDB4NDQKKyNkZWZpbmUgTElNQV9HUF9Q RVJGX0NOVF8xX1NSQyAgICAgICAgICAgICAgICAgMHg0OAorI2RlZmluZSBMSU1BX0dQX1BFUkZf Q05UXzBfVkFMVUUgICAgICAgICAgICAgICAweDRDCisjZGVmaW5lIExJTUFfR1BfUEVSRl9DTlRf MV9WQUxVRSAgICAgICAgICAgICAgIDB4NTAKKyNkZWZpbmUgTElNQV9HUF9QRVJGX0NOVF8wX0xJ TUlUICAgICAgICAgICAgICAgMHg1NAorI2RlZmluZSBMSU1BX0dQX1NUQVRVUyAgICAgICAgICAg ICAgICAgICAgICAgICAweDY4CisjZGVmaW5lICAgTElNQV9HUF9TVEFUVVNfVlNfQUNUSVZFICAg ICAgICAgICAgIEJJVCgxKQorI2RlZmluZSAgIExJTUFfR1BfU1RBVFVTX0JVU19TVE9QUEVEICAg ICAgICAgICBCSVQoMikKKyNkZWZpbmUgICBMSU1BX0dQX1NUQVRVU19QTEJVX0FDVElWRSAgICAg ICAgICAgQklUKDMpCisjZGVmaW5lICAgTElNQV9HUF9TVEFUVVNfQlVTX0VSUk9SICAgICAgICAg ICAgIEJJVCg2KQorI2RlZmluZSAgIExJTUFfR1BfU1RBVFVTX1dSSVRFX0JPVU5EX0VSUiAgICAg ICBCSVQoOCkKKyNkZWZpbmUgTElNQV9HUF9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAg MHg2QworI2RlZmluZSBMSU1BX0dQX1ZTQ0xfU1RBUlRfQUREUl9SRUFEICAgICAgICAgICAweDgw CisjZGVmaW5lIExJTUFfR1BfUExCQ0xfU1RBUlRfQUREUl9SRUFEICAgICAgICAgIDB4ODQKKyNk ZWZpbmUgTElNQV9HUF9DT05UUl9BWElfQlVTX0VSUk9SX1NUQVQgICAgICAgMHg5NAorCisjZGVm aW5lIExJTUFfR1BfSVJRX01BU0tfQUxMCQkgICBcCisJKAkJCQkgICBcCisJIExJTUFfR1BfSVJR X1ZTX0VORF9DTURfTFNUICAgICAgfCBcCisJIExJTUFfR1BfSVJRX1BMQlVfRU5EX0NNRF9MU1Qg ICAgfCBcCisJIExJTUFfR1BfSVJRX1BMQlVfT1VUX09GX01FTSAgICAgfCBcCisJIExJTUFfR1Bf SVJRX1ZTX1NFTV9JUlEgICAgICAgICAgfCBcCisJIExJTUFfR1BfSVJRX1BMQlVfU0VNX0lSUSAg ICAgICAgfCBcCisJIExJTUFfR1BfSVJRX0hBTkcgICAgICAgICAgICAgICAgfCBcCisJIExJTUFf R1BfSVJRX0ZPUkNFX0hBTkcgICAgICAgICAgfCBcCisJIExJTUFfR1BfSVJRX1BFUkZfQ05UXzBf TElNSVQgICAgfCBcCisJIExJTUFfR1BfSVJRX1BFUkZfQ05UXzFfTElNSVQgICAgfCBcCisJIExJ TUFfR1BfSVJRX1dSSVRFX0JPVU5EX0VSUiAgICAgfCBcCisJIExJTUFfR1BfSVJRX1NZTkNfRVJS T1IgICAgICAgICAgfCBcCisJIExJTUFfR1BfSVJRX0FYSV9CVVNfRVJST1IgICAgICAgfCBcCisJ IExJTUFfR1BfSVJRX0FYSV9CVVNfU1RPUFBFRCAgICAgfCBcCisJIExJTUFfR1BfSVJRX1ZTX0lO VkFMSURfQ01EICAgICAgfCBcCisJIExJTUFfR1BfSVJRX1BMQl9JTlZBTElEX0NNRCAgICAgfCBc CisJIExJTUFfR1BfSVJRX1JFU0VUX0NPTVBMRVRFRCAgICAgfCBcCisJIExJTUFfR1BfSVJRX1NF TUFQSE9SRV9VTkRFUkZMT1cgfCBcCisJIExJTUFfR1BfSVJRX1NFTUFQSE9SRV9PVkVSRkxPVyAg fCBcCisJIExJTUFfR1BfSVJRX1BUUl9BUlJBWV9PVVRfT0ZfQk9VTkRTKQorCisjZGVmaW5lIExJ TUFfR1BfSVJRX01BU0tfRVJST1IgICAgICAgICAgICAgXAorCSggICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorCSBMSU1BX0dQX0lSUV9QTEJVX09VVF9PRl9NRU0gICAgIHwgXAor CSBMSU1BX0dQX0lSUV9GT1JDRV9IQU5HICAgICAgICAgIHwgXAorCSBMSU1BX0dQX0lSUV9XUklU RV9CT1VORF9FUlIgICAgIHwgXAorCSBMSU1BX0dQX0lSUV9TWU5DX0VSUk9SICAgICAgICAgIHwg XAorCSBMSU1BX0dQX0lSUV9BWElfQlVTX0VSUk9SICAgICAgIHwgXAorCSBMSU1BX0dQX0lSUV9W U19JTlZBTElEX0NNRCAgICAgIHwgXAorCSBMSU1BX0dQX0lSUV9QTEJfSU5WQUxJRF9DTUQgICAg IHwgXAorCSBMSU1BX0dQX0lSUV9TRU1BUEhPUkVfVU5ERVJGTE9XIHwgXAorCSBMSU1BX0dQX0lS UV9TRU1BUEhPUkVfT1ZFUkZMT1cgIHwgXAorCSBMSU1BX0dQX0lSUV9QVFJfQVJSQVlfT1VUX09G X0JPVU5EUykKKworI2RlZmluZSBMSU1BX0dQX0lSUV9NQVNLX1VTRUQJCSAgIFwKKwkoCQkJCSAg IFwKKwkgTElNQV9HUF9JUlFfVlNfRU5EX0NNRF9MU1QgICAgICB8IFwKKwkgTElNQV9HUF9JUlFf UExCVV9FTkRfQ01EX0xTVCAgICB8IFwKKwkgTElNQV9HUF9JUlFfTUFTS19FUlJPUikKKworLyog UFAgcmVncyAqLworI2RlZmluZSBMSU1BX1BQX0ZSQU1FICAgICAgICAgICAgICAgICAgICAgICAg MHgwMDAwCisjZGVmaW5lIExJTUFfUFBfUlNXCQkJICAgICAweDAwMDQKKyNkZWZpbmUgTElNQV9Q UF9TVEFDSwkJCSAgICAgMHgwMDMwCisjZGVmaW5lIExJTUFfUFBfU1RBQ0tfU0laRQkJICAgICAw eDAwMzQKKyNkZWZpbmUgTElNQV9QUF9PUklHSU5fT0ZGU0VUX1gJICAgICAgICAgICAgIDB4MDA0 MAorI2RlZmluZSBMSU1BX1BQX1dCKGkpICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDEwMCAq IChpICsgMSkpCisjZGVmaW5lICAgTElNQV9QUF9XQl9TT1VSQ0VfU0VMRUNUICAgICAgICAgICAw eDAwMDAKKyNkZWZpbmUJICBMSU1BX1BQX1dCX1NPVVJDRV9BRERSICAgICAgICAgICAgIDB4MDAw NAorCisjZGVmaW5lIExJTUFfUFBfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAweDEwMDAK KyNkZWZpbmUgTElNQV9QUF9DVVJSRU5UX1JFTkRfTElTVF9BRERSICAgICAgIDB4MTAwNAorI2Rl ZmluZSBMSU1BX1BQX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgMHgxMDA4CisjZGVmaW5l ICAgTElNQV9QUF9TVEFUVVNfUkVOREVSSU5HX0FDVElWRSAgICBCSVQoMCkKKyNkZWZpbmUgICBM SU1BX1BQX1NUQVRVU19CVVNfU1RPUFBFRCAgICAgICAgIEJJVCg0KQorI2RlZmluZSBMSU1BX1BQ X0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDBjCisjZGVmaW5lICAgTElNQV9QUF9D VFJMX1NUT1BfQlVTICAgICAgICAgICAgICBCSVQoMCkKKyNkZWZpbmUgICBMSU1BX1BQX0NUUkxf RkxVU0hfQ0FDSEVTICAgICAgICAgIEJJVCgzKQorI2RlZmluZSAgIExJTUFfUFBfQ1RSTF9GT1JD RV9SRVNFVCAgICAgICAgICAgQklUKDUpCisjZGVmaW5lICAgTElNQV9QUF9DVFJMX1NUQVJUX1JF TkRFUklORyAgICAgICBCSVQoNikKKyNkZWZpbmUgICBMSU1BX1BQX0NUUkxfU09GVF9SRVNFVCAg ICAgICAgICAgIEJJVCg3KQorI2RlZmluZSBMSU1BX1BQX0lOVF9SQVdTVEFUICAgICAgICAgICAg ICAgICAgMHgxMDIwCisjZGVmaW5lIExJTUFfUFBfSU5UX0NMRUFSICAgICAgICAgICAgICAgICAg ICAweDEwMjQKKyNkZWZpbmUgTElNQV9QUF9JTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4 MTAyOAorI2RlZmluZSBMSU1BX1BQX0lOVF9TVEFUVVMgICAgICAgICAgICAgICAgICAgMHgxMDJj CisjZGVmaW5lICAgTElNQV9QUF9JUlFfRU5EX09GX0ZSQU1FICAgICAgICAgICBCSVQoMCkKKyNk ZWZpbmUgICBMSU1BX1BQX0lSUV9FTkRfT0ZfVElMRSAgICAgICAgICAgIEJJVCgxKQorI2RlZmlu ZSAgIExJTUFfUFBfSVJRX0hBTkcgICAgICAgICAgICAgICAgICAgQklUKDIpCisjZGVmaW5lICAg TElNQV9QUF9JUlFfRk9SQ0VfSEFORyAgICAgICAgICAgICBCSVQoMykKKyNkZWZpbmUgICBMSU1B X1BQX0lSUV9CVVNfRVJST1IgICAgICAgICAgICAgIEJJVCg0KQorI2RlZmluZSAgIExJTUFfUFBf SVJRX0JVU19TVE9QICAgICAgICAgICAgICAgQklUKDUpCisjZGVmaW5lICAgTElNQV9QUF9JUlFf Q05UXzBfTElNSVQgICAgICAgICAgICBCSVQoNikKKyNkZWZpbmUgICBMSU1BX1BQX0lSUV9DTlRf MV9MSU1JVCAgICAgICAgICAgIEJJVCg3KQorI2RlZmluZSAgIExJTUFfUFBfSVJRX1dSSVRFX0JP VU5EQVJZX0VSUk9SICAgQklUKDgpCisjZGVmaW5lICAgTElNQV9QUF9JUlFfSU5WQUxJRF9QTElT VF9DT01NQU5EICBCSVQoOSkKKyNkZWZpbmUgICBMSU1BX1BQX0lSUV9DQUxMX1NUQUNLX1VOREVS RkxPVyAgIEJJVCgxMCkKKyNkZWZpbmUgICBMSU1BX1BQX0lSUV9DQUxMX1NUQUNLX09WRVJGTE9X ICAgIEJJVCgxMSkKKyNkZWZpbmUgICBMSU1BX1BQX0lSUV9SRVNFVF9DT01QTEVURUQgICAgICAg IEJJVCgxMikKKyNkZWZpbmUgTElNQV9QUF9XUklURV9CT1VOREFSWV9MT1cgICAgICAgICAgIDB4 MTA0NAorI2RlZmluZSBMSU1BX1BQX0JVU19FUlJPUl9TVEFUVVMgICAgICAgICAgICAgMHgxMDUw CisjZGVmaW5lIExJTUFfUFBfUEVSRl9DTlRfMF9FTkFCTEUgICAgICAgICAgICAweDEwODAKKyNk ZWZpbmUgTElNQV9QUF9QRVJGX0NOVF8wX1NSQyAgICAgICAgICAgICAgIDB4MTA4NAorI2RlZmlu ZSBMSU1BX1BQX1BFUkZfQ05UXzBfTElNSVQgICAgICAgICAgICAgMHgxMDg4CisjZGVmaW5lIExJ TUFfUFBfUEVSRl9DTlRfMF9WQUxVRSAgICAgICAgICAgICAweDEwOGMKKyNkZWZpbmUgTElNQV9Q UF9QRVJGX0NOVF8xX0VOQUJMRSAgICAgICAgICAgIDB4MTBhMAorI2RlZmluZSBMSU1BX1BQX1BF UkZfQ05UXzFfU1JDICAgICAgICAgICAgICAgMHgxMGE0CisjZGVmaW5lIExJTUFfUFBfUEVSRl9D TlRfMV9MSU1JVCAgICAgICAgICAgICAweDEwYTgKKyNkZWZpbmUgTElNQV9QUF9QRVJGX0NOVF8x X1ZBTFVFICAgICAgICAgICAgIDB4MTBhYworI2RlZmluZSBMSU1BX1BQX1BFUkZNT05fQ09OVFIg ICAgICAgICAgICAgICAgMHgxMGIwCisjZGVmaW5lIExJTUFfUFBfUEVSRk1PTl9CQVNFICAgICAg ICAgICAgICAgICAweDEwYjQKKworI2RlZmluZSBMSU1BX1BQX0lSUV9NQVNLX0FMTCAgICAgICAg ICAgICAgICAgXAorCSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJIExJ TUFfUFBfSVJRX0VORF9PRl9GUkFNRSAgICAgICAgICB8IFwKKwkgTElNQV9QUF9JUlFfRU5EX09G X1RJTEUgICAgICAgICAgIHwgXAorCSBMSU1BX1BQX0lSUV9IQU5HICAgICAgICAgICAgICAgICAg fCBcCisJIExJTUFfUFBfSVJRX0ZPUkNFX0hBTkcgICAgICAgICAgICB8IFwKKwkgTElNQV9QUF9J UlFfQlVTX0VSUk9SICAgICAgICAgICAgIHwgXAorCSBMSU1BX1BQX0lSUV9CVVNfU1RPUCAgICAg ICAgICAgICAgfCBcCisJIExJTUFfUFBfSVJRX0NOVF8wX0xJTUlUICAgICAgICAgICB8IFwKKwkg TElNQV9QUF9JUlFfQ05UXzFfTElNSVQgICAgICAgICAgIHwgXAorCSBMSU1BX1BQX0lSUV9XUklU RV9CT1VOREFSWV9FUlJPUiAgfCBcCisJIExJTUFfUFBfSVJRX0lOVkFMSURfUExJU1RfQ09NTUFO RCB8IFwKKwkgTElNQV9QUF9JUlFfQ0FMTF9TVEFDS19VTkRFUkZMT1cgIHwgXAorCSBMSU1BX1BQ X0lSUV9DQUxMX1NUQUNLX09WRVJGTE9XICAgfCBcCisJIExJTUFfUFBfSVJRX1JFU0VUX0NPTVBM RVRFRCkKKworI2RlZmluZSBMSU1BX1BQX0lSUV9NQVNLX0VSUk9SICAgICAgICAgICAgICAgXAor CSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJIExJTUFfUFBfSVJRX0ZP UkNFX0hBTkcgICAgICAgICAgICB8IFwKKwkgTElNQV9QUF9JUlFfQlVTX0VSUk9SICAgICAgICAg ICAgIHwgXAorCSBMSU1BX1BQX0lSUV9XUklURV9CT1VOREFSWV9FUlJPUiAgfCBcCisJIExJTUFf UFBfSVJRX0lOVkFMSURfUExJU1RfQ09NTUFORCB8IFwKKwkgTElNQV9QUF9JUlFfQ0FMTF9TVEFD S19VTkRFUkZMT1cgIHwgXAorCSBMSU1BX1BQX0lSUV9DQUxMX1NUQUNLX09WRVJGTE9XKQorCisj ZGVmaW5lIExJTUFfUFBfSVJRX01BU0tfVVNFRCAgICAgICAgICAgICAgICBcCisJKCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgTElNQV9QUF9JUlFfRU5EX09GX0ZSQU1F ICAgICAgICAgIHwgXAorCSBMSU1BX1BQX0lSUV9NQVNLX0VSUk9SKQorCisvKiBNTVUgcmVncyAq LworI2RlZmluZSBMSU1BX01NVV9EVEVfQUREUiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMAor I2RlZmluZSBMSU1BX01NVV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2Rl ZmluZSAgIExJTUFfTU1VX1NUQVRVU19QQUdJTkdfRU5BQkxFRCAgICAgIEJJVCgwKQorI2RlZmlu ZSAgIExJTUFfTU1VX1NUQVRVU19QQUdFX0ZBVUxUX0FDVElWRSAgIEJJVCgxKQorI2RlZmluZSAg IExJTUFfTU1VX1NUQVRVU19TVEFMTF9BQ1RJVkUgICAgICAgIEJJVCgyKQorI2RlZmluZSAgIExJ TUFfTU1VX1NUQVRVU19JRExFICAgICAgICAgICAgICAgIEJJVCgzKQorI2RlZmluZSAgIExJTUFf TU1VX1NUQVRVU19SRVBMQVlfQlVGRkVSX0VNUFRZIEJJVCg0KQorI2RlZmluZSAgIExJTUFfTU1V X1NUQVRVU19QQUdFX0ZBVUxUX0lTX1dSSVRFIEJJVCg1KQorI2RlZmluZSAgIExJTUFfTU1VX1NU QVRVU19CVVNfSUQoeCkgICAgICAgICAgICgoeCA+PiA2KSAmIDB4MUYpCisjZGVmaW5lIExJTUFf TU1VX0NPTU1BTkQgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lICAgTElNQV9N TVVfQ09NTUFORF9FTkFCTEVfUEFHSU5HICAgICAgMHgwMAorI2RlZmluZSAgIExJTUFfTU1VX0NP TU1BTkRfRElTQUJMRV9QQUdJTkcgICAgIDB4MDEKKyNkZWZpbmUgICBMSU1BX01NVV9DT01NQU5E X0VOQUJMRV9TVEFMTCAgICAgICAweDAyCisjZGVmaW5lICAgTElNQV9NTVVfQ09NTUFORF9ESVNB QkxFX1NUQUxMICAgICAgMHgwMworI2RlZmluZSAgIExJTUFfTU1VX0NPTU1BTkRfWkFQX0NBQ0hF ICAgICAgICAgIDB4MDQKKyNkZWZpbmUgICBMSU1BX01NVV9DT01NQU5EX1BBR0VfRkFVTFRfRE9O RSAgICAweDA1CisjZGVmaW5lICAgTElNQV9NTVVfQ09NTUFORF9IQVJEX1JFU0VUICAgICAgICAg MHgwNgorI2RlZmluZSBMSU1BX01NVV9QQUdFX0ZBVUxUX0FERFIgICAgICAgICAgICAgIDB4MDAw QworI2RlZmluZSBMSU1BX01NVV9aQVBfT05FX0xJTkUgICAgICAgICAgICAgICAgIDB4MDAxMAor I2RlZmluZSBMSU1BX01NVV9JTlRfUkFXU1RBVCAgICAgICAgICAgICAgICAgIDB4MDAxNAorI2Rl ZmluZSBMSU1BX01NVV9JTlRfQ0xFQVIgICAgICAgICAgICAgICAgICAgIDB4MDAxOAorI2RlZmlu ZSBMSU1BX01NVV9JTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAxQworI2RlZmluZSAg IExJTUFfTU1VX0lOVF9QQUdFX0ZBVUxUICAgICAgICAgICAgIEJJVCgwKQorI2RlZmluZSAgIExJ TUFfTU1VX0lOVF9SRUFEX0JVU19FUlJPUiAgICAgICAgIEJJVCgxKQorI2RlZmluZSBMSU1BX01N VV9JTlRfU1RBVFVTICAgICAgICAgICAgICAgICAgIDB4MDAyMAorCisjZGVmaW5lIExJTUFfVk1f RkxBR19QUkVTRU5UICAgICAgICAgIEJJVCgwKQorI2RlZmluZSBMSU1BX1ZNX0ZMQUdfUkVBRF9Q RVJNSVNTSU9OICBCSVQoMSkKKyNkZWZpbmUgTElNQV9WTV9GTEFHX1dSSVRFX1BFUk1JU1NJT04g QklUKDIpCisjZGVmaW5lIExJTUFfVk1fRkxBR19PVkVSUklERV9DQUNIRSAgIEJJVCgzKQorI2Rl ZmluZSBMSU1BX1ZNX0ZMQUdfV1JJVEVfQ0FDSEVBQkxFICBCSVQoNCkKKyNkZWZpbmUgTElNQV9W TV9GTEFHX1dSSVRFX0FMTE9DQVRFICAgQklUKDUpCisjZGVmaW5lIExJTUFfVk1fRkxBR19XUklU RV9CVUZGRVJBQkxFIEJJVCg2KQorI2RlZmluZSBMSU1BX1ZNX0ZMQUdfUkVBRF9DQUNIRUFCTEUg ICBCSVQoNykKKyNkZWZpbmUgTElNQV9WTV9GTEFHX1JFQURfQUxMT0NBVEUgICAgQklUKDgpCisj ZGVmaW5lIExJTUFfVk1fRkxBR19NQVNLICAgICAgICAgICAgIDB4MUZGCisKKyNkZWZpbmUgTElN QV9WTV9GTEFHU19DQUNIRSAoCQkJIFwKKwkJTElNQV9WTV9GTEFHX1BSRVNFTlQgfAkJIFwKKwkJ TElNQV9WTV9GTEFHX1JFQURfUEVSTUlTU0lPTiB8CSBcCisJCUxJTUFfVk1fRkxBR19XUklURV9Q RVJNSVNTSU9OIHwJIFwKKwkJTElNQV9WTV9GTEFHX09WRVJSSURFX0NBQ0hFIHwJIFwKKwkJTElN QV9WTV9GTEFHX1dSSVRFX0NBQ0hFQUJMRSB8CSBcCisJCUxJTUFfVk1fRkxBR19XUklURV9CVUZG RVJBQkxFIHwJIFwKKwkJTElNQV9WTV9GTEFHX1JFQURfQ0FDSEVBQkxFIHwJIFwKKwkJTElNQV9W TV9GTEFHX1JFQURfQUxMT0NBVEUpCisKKyNkZWZpbmUgTElNQV9WTV9GTEFHU19VTkNBQ0hFICgJ CQlcCisJCUxJTUFfVk1fRkxBR19QUkVTRU5UIHwJCVwKKwkJTElNQV9WTV9GTEFHX1JFQURfUEVS TUlTU0lPTiB8CVwKKwkJTElNQV9WTV9GTEFHX1dSSVRFX1BFUk1JU1NJT04pCisKKy8qIERMQlUg cmVncyAqLworI2RlZmluZSBMSU1BX0RMQlVfTUFTVEVSX1RMTElTVF9QSFlTX0FERFIgIDB4MDAw MAorI2RlZmluZQlMSU1BX0RMQlVfTUFTVEVSX1RMTElTVF9WQUREUiAgICAgIDB4MDAwNAorI2Rl ZmluZQlMSU1BX0RMQlVfVExMSVNUX1ZCQVNFQUREUiAgICAgICAgIDB4MDAwOAorI2RlZmluZQlM SU1BX0RMQlVfRkJfRElNICAgICAgICAgICAgICAgICAgIDB4MDAwQworI2RlZmluZQlMSU1BX0RM QlVfVExMSVNUX0NPTkYgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZQlMSU1BX0RMQlVfU1RB UlRfVElMRV9QT1MgICAgICAgICAgIDB4MDAxNAorI2RlZmluZQlMSU1BX0RMQlVfUFBfRU5BQkxF X01BU0sgICAgICAgICAgIDB4MDAxOAorCisvKiBCQ0FTVCByZWdzICovCisjZGVmaW5lIExJTUFf QkNBU1RfQlJPQURDQVNUX01BU0sgICAgMHgwCisjZGVmaW5lIExJTUFfQkNBU1RfSU5URVJSVVBU X01BU0sgICAgMHg0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEv bGltYV9zY2hlZC5jIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9zY2hlZC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNjA2ZThhYWQyYTgyCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9zY2hlZC5jCkBAIC0wLDAgKzEsNDA0 IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQKKy8qIENvcHly aWdodCAyMDE3LTIwMTkgUWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+ICovCisKKyNpbmNsdWRl IDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAi bGltYV9kcnYuaCIKKyNpbmNsdWRlICJsaW1hX3NjaGVkLmgiCisjaW5jbHVkZSAibGltYV92bS5o IgorI2luY2x1ZGUgImxpbWFfbW11LmgiCisjaW5jbHVkZSAibGltYV9sMl9jYWNoZS5oIgorI2lu Y2x1ZGUgImxpbWFfb2JqZWN0LmgiCisKK3N0cnVjdCBsaW1hX2ZlbmNlIHsKKwlzdHJ1Y3QgZG1h X2ZlbmNlIGJhc2U7CisJc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZTsKK307CisKK3N0YXRp YyBzdHJ1Y3Qga21lbV9jYWNoZSAqbGltYV9mZW5jZV9zbGFiOworCitpbnQgbGltYV9zY2hlZF9z bGFiX2luaXQodm9pZCkKK3sKKwlsaW1hX2ZlbmNlX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZSgK KwkJImxpbWFfZmVuY2UiLCBzaXplb2Yoc3RydWN0IGxpbWFfZmVuY2UpLCAwLAorCQlTTEFCX0hX Q0FDSEVfQUxJR04sIE5VTEwpOworCWlmICghbGltYV9mZW5jZV9zbGFiKQorCQlyZXR1cm4gLUVO T01FTTsKKworCXJldHVybiAwOworfQorCit2b2lkIGxpbWFfc2NoZWRfc2xhYl9maW5pKHZvaWQp Cit7CisJa21lbV9jYWNoZV9kZXN0cm95KGxpbWFfZmVuY2Vfc2xhYik7Cit9CisKK3N0YXRpYyBp bmxpbmUgc3RydWN0IGxpbWFfZmVuY2UgKnRvX2xpbWFfZmVuY2Uoc3RydWN0IGRtYV9mZW5jZSAq ZmVuY2UpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihmZW5jZSwgc3RydWN0IGxpbWFfZmVuY2Us IGJhc2UpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqbGltYV9mZW5jZV9nZXRfZHJpdmVyX25h bWUoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCit7CisJcmV0dXJuICJsaW1hIjsKK30KKworc3Rh dGljIGNvbnN0IGNoYXIgKmxpbWFfZmVuY2VfZ2V0X3RpbWVsaW5lX25hbWUoc3RydWN0IGRtYV9m ZW5jZSAqZmVuY2UpCit7CisJc3RydWN0IGxpbWFfZmVuY2UgKmYgPSB0b19saW1hX2ZlbmNlKGZl bmNlKTsKKworCXJldHVybiBmLT5waXBlLT5iYXNlLm5hbWU7Cit9CisKK3N0YXRpYyBib29sIGxp bWFfZmVuY2VfZW5hYmxlX3NpZ25hbGluZyhzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKK3sKKwly ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbGltYV9mZW5jZV9yZWxlYXNlX3JjdShzdHJ1 Y3QgcmN1X2hlYWQgKnJjdSkKK3sKKwlzdHJ1Y3QgZG1hX2ZlbmNlICpmID0gY29udGFpbmVyX29m KHJjdSwgc3RydWN0IGRtYV9mZW5jZSwgcmN1KTsKKwlzdHJ1Y3QgbGltYV9mZW5jZSAqZmVuY2Ug PSB0b19saW1hX2ZlbmNlKGYpOworCisJa21lbV9jYWNoZV9mcmVlKGxpbWFfZmVuY2Vfc2xhYiwg ZmVuY2UpOworfQorCitzdGF0aWMgdm9pZCBsaW1hX2ZlbmNlX3JlbGVhc2Uoc3RydWN0IGRtYV9m ZW5jZSAqZmVuY2UpCit7CisJc3RydWN0IGxpbWFfZmVuY2UgKmYgPSB0b19saW1hX2ZlbmNlKGZl bmNlKTsKKworCWNhbGxfcmN1KCZmLT5iYXNlLnJjdSwgbGltYV9mZW5jZV9yZWxlYXNlX3JjdSk7 Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2ZlbmNlX29wcyBsaW1hX2ZlbmNlX29wcyA9 IHsKKwkuZ2V0X2RyaXZlcl9uYW1lID0gbGltYV9mZW5jZV9nZXRfZHJpdmVyX25hbWUsCisJLmdl dF90aW1lbGluZV9uYW1lID0gbGltYV9mZW5jZV9nZXRfdGltZWxpbmVfbmFtZSwKKwkuZW5hYmxl X3NpZ25hbGluZyA9IGxpbWFfZmVuY2VfZW5hYmxlX3NpZ25hbGluZywKKwkud2FpdCA9IGRtYV9m ZW5jZV9kZWZhdWx0X3dhaXQsCisJLnJlbGVhc2UgPSBsaW1hX2ZlbmNlX3JlbGVhc2UsCit9Owor CitzdGF0aWMgc3RydWN0IGxpbWFfZmVuY2UgKmxpbWFfZmVuY2VfY3JlYXRlKHN0cnVjdCBsaW1h X3NjaGVkX3BpcGUgKnBpcGUpCit7CisJc3RydWN0IGxpbWFfZmVuY2UgKmZlbmNlOworCisJZmVu Y2UgPSBrbWVtX2NhY2hlX3phbGxvYyhsaW1hX2ZlbmNlX3NsYWIsIEdGUF9LRVJORUwpOworCWlm ICghZmVuY2UpCisJCXJldHVybiBOVUxMOworCisJZmVuY2UtPnBpcGUgPSBwaXBlOworCWRtYV9m ZW5jZV9pbml0KCZmZW5jZS0+YmFzZSwgJmxpbWFfZmVuY2Vfb3BzLCAmcGlwZS0+ZmVuY2VfbG9j aywKKwkJICAgICAgIHBpcGUtPmZlbmNlX2NvbnRleHQsICsrcGlwZS0+ZmVuY2Vfc2Vxbm8pOwor CisJcmV0dXJuIGZlbmNlOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsaW1hX3NjaGVkX3Rh c2sgKnRvX2xpbWFfdGFzayhzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqam9iKQoreworCXJldHVybiBj b250YWluZXJfb2Yoam9iLCBzdHJ1Y3QgbGltYV9zY2hlZF90YXNrLCBiYXNlKTsKK30KKworc3Rh dGljIGlubGluZSBzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICp0b19saW1hX3BpcGUoc3RydWN0IGRy bV9ncHVfc2NoZWR1bGVyICpzY2hlZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNjaGVkLCBz dHJ1Y3QgbGltYV9zY2hlZF9waXBlLCBiYXNlKTsKK30KKworaW50IGxpbWFfc2NoZWRfdGFza19p bml0KHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2ssCisJCQkgc3RydWN0IGxpbWFfc2NoZWRf Y29udGV4dCAqY29udGV4dCwKKwkJCSBzdHJ1Y3QgbGltYV9ibyAqKmJvcywgaW50IG51bV9ib3Ms CisJCQkgc3RydWN0IGxpbWFfdm0gKnZtKQoreworCWludCBlcnIsIGk7CisKKwl0YXNrLT5ib3Mg PSBrbWVtZHVwKGJvcywgc2l6ZW9mKCpib3MpICogbnVtX2JvcywgR0ZQX0tFUk5FTCk7CisJaWYg KCF0YXNrLT5ib3MpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IG51bV9i b3M7IGkrKykKKwkJZHJtX2dlbV9vYmplY3RfZ2V0KCZib3NbaV0tPmdlbSk7CisKKwllcnIgPSBk cm1fc2NoZWRfam9iX2luaXQoJnRhc2stPmJhc2UsICZjb250ZXh0LT5iYXNlLCB2bSk7CisJaWYg KGVycikgeworCQlrZnJlZSh0YXNrLT5ib3MpOworCQlyZXR1cm4gZXJyOworCX0KKworCXRhc2st Pm51bV9ib3MgPSBudW1fYm9zOworCXRhc2stPnZtID0gbGltYV92bV9nZXQodm0pOworCXJldHVy biAwOworfQorCit2b2lkIGxpbWFfc2NoZWRfdGFza19maW5pKHN0cnVjdCBsaW1hX3NjaGVkX3Rh c2sgKnRhc2spCit7CisJaW50IGk7CisKKwlkcm1fc2NoZWRfam9iX2NsZWFudXAoJnRhc2stPmJh c2UpOworCisJZm9yIChpID0gMDsgaSA8IHRhc2stPm51bV9kZXA7IGkrKykKKwkJZG1hX2ZlbmNl X3B1dCh0YXNrLT5kZXBbaV0pOworCisJa2ZyZWUodGFzay0+ZGVwKTsKKworCWlmICh0YXNrLT5i b3MpIHsKKwkJZm9yIChpID0gMDsgaSA8IHRhc2stPm51bV9ib3M7IGkrKykKKwkJCWRybV9nZW1f b2JqZWN0X3B1dF91bmxvY2tlZCgmdGFzay0+Ym9zW2ldLT5nZW0pOworCQlrZnJlZSh0YXNrLT5i b3MpOworCX0KKworCWxpbWFfdm1fcHV0KHRhc2stPnZtKTsKK30KKworaW50IGxpbWFfc2NoZWRf dGFza19hZGRfZGVwKHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2ssIHN0cnVjdCBkbWFfZmVu Y2UgKmZlbmNlKQoreworCWludCBpLCBuZXdfZGVwID0gNDsKKworCS8qIHNhbWUgY29udGV4dCdz IGZlbmNlIGlzIGRlZmluaXRseSBlYXJsaWVyIHRoZW4gdGhpcyB0YXNrICovCisJaWYgKGZlbmNl LT5jb250ZXh0ID09IHRhc2stPmJhc2Uuc19mZW5jZS0+ZmluaXNoZWQuY29udGV4dCkgeworCQlk bWFfZmVuY2VfcHV0KGZlbmNlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHRhc2stPmRlcCAm JiB0YXNrLT5udW1fZGVwID09IHRhc2stPm1heF9kZXApCisJCW5ld19kZXAgPSB0YXNrLT5tYXhf ZGVwICogMjsKKworCWlmICh0YXNrLT5tYXhfZGVwIDwgbmV3X2RlcCkgeworCQl2b2lkICpkZXAg PSBrcmVhbGxvYyh0YXNrLT5kZXAsIHNpemVvZigqdGFzay0+ZGVwKSAqIG5ld19kZXAsIEdGUF9L RVJORUwpOworCisJCWlmICghZGVwKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJdGFzay0+bWF4 X2RlcCA9IG5ld19kZXA7CisJCXRhc2stPmRlcCA9IGRlcDsKKwl9CisKKwlmb3IgKGkgPSAwOyBp IDwgdGFzay0+bnVtX2RlcDsgaSsrKSB7CisJCWlmICh0YXNrLT5kZXBbaV0tPmNvbnRleHQgPT0g ZmVuY2UtPmNvbnRleHQgJiYKKwkJICAgIGRtYV9mZW5jZV9pc19sYXRlcihmZW5jZSwgdGFzay0+ ZGVwW2ldKSkgeworCQkJZG1hX2ZlbmNlX3B1dCh0YXNrLT5kZXBbaV0pOworCQkJdGFzay0+ZGVw W2ldID0gZmVuY2U7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXRhc2stPmRlcFt0YXNrLT5u dW1fZGVwKytdID0gZmVuY2U7CisJcmV0dXJuIDA7Cit9CisKK2ludCBsaW1hX3NjaGVkX2NvbnRl eHRfaW5pdChzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlLAorCQkJICAgIHN0cnVjdCBsaW1h X3NjaGVkX2NvbnRleHQgKmNvbnRleHQsCisJCQkgICAgYXRvbWljX3QgKmd1aWx0eSkKK3sKKwlz dHJ1Y3QgZHJtX3NjaGVkX3JxICpycSA9IHBpcGUtPmJhc2Uuc2NoZWRfcnEgKyBEUk1fU0NIRURf UFJJT1JJVFlfTk9STUFMOworCisJcmV0dXJuIGRybV9zY2hlZF9lbnRpdHlfaW5pdCgmY29udGV4 dC0+YmFzZSwgJnJxLCAxLCBndWlsdHkpOworfQorCit2b2lkIGxpbWFfc2NoZWRfY29udGV4dF9m aW5pKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUsCisJCQkgICAgIHN0cnVjdCBsaW1hX3Nj aGVkX2NvbnRleHQgKmNvbnRleHQpCit7CisJZHJtX3NjaGVkX2VudGl0eV9maW5pKCZjb250ZXh0 LT5iYXNlKTsKK30KKworc3RydWN0IGRtYV9mZW5jZSAqbGltYV9zY2hlZF9jb250ZXh0X3F1ZXVl X3Rhc2soc3RydWN0IGxpbWFfc2NoZWRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCXN0cnVjdCBs aW1hX3NjaGVkX3Rhc2sgKnRhc2spCit7CisJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UgPSBkbWFf ZmVuY2VfZ2V0KCZ0YXNrLT5iYXNlLnNfZmVuY2UtPmZpbmlzaGVkKTsKKworCWRybV9zY2hlZF9l bnRpdHlfcHVzaF9qb2IoJnRhc2stPmJhc2UsICZjb250ZXh0LT5iYXNlKTsKKwlyZXR1cm4gZmVu Y2U7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2ZlbmNlICpsaW1hX3NjaGVkX2RlcGVuZGVuY3ko c3RydWN0IGRybV9zY2hlZF9qb2IgKmpvYiwKKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fc2NoZWRf ZW50aXR5ICplbnRpdHkpCit7CisJc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzayA9IHRvX2xp bWFfdGFzayhqb2IpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHRhc2stPm51bV9kZXA7 IGkrKykgeworCQlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSA9IHRhc2stPmRlcFtpXTsKKworCQlp ZiAoIXRhc2stPmRlcFtpXSkKKwkJCWNvbnRpbnVlOworCisJCXRhc2stPmRlcFtpXSA9IE5VTEw7 CisKKwkJaWYgKCFkbWFfZmVuY2VfaXNfc2lnbmFsZWQoZmVuY2UpKQorCQkJcmV0dXJuIGZlbmNl OworCisJCWRtYV9mZW5jZV9wdXQoZmVuY2UpOworCX0KKworCXJldHVybiBOVUxMOworfQorCitz dGF0aWMgc3RydWN0IGRtYV9mZW5jZSAqbGltYV9zY2hlZF9ydW5fam9iKHN0cnVjdCBkcm1fc2No ZWRfam9iICpqb2IpCit7CisJc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzayA9IHRvX2xpbWFf dGFzayhqb2IpOworCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUgPSB0b19saW1hX3BpcGUo am9iLT5zY2hlZCk7CisJc3RydWN0IGxpbWFfZmVuY2UgKmZlbmNlOworCXN0cnVjdCBkbWFfZmVu Y2UgKnJldDsKKwlzdHJ1Y3QgbGltYV92bSAqdm0gPSBOVUxMLCAqbGFzdF92bSA9IE5VTEw7CisJ aW50IGk7CisKKwkvKiBhZnRlciBHUFUgcmVzZXQgKi8KKwlpZiAoam9iLT5zX2ZlbmNlLT5maW5p c2hlZC5lcnJvciA8IDApCisJCXJldHVybiBOVUxMOworCisJZmVuY2UgPSBsaW1hX2ZlbmNlX2Ny ZWF0ZShwaXBlKTsKKwlpZiAoIWZlbmNlKQorCQlyZXR1cm4gTlVMTDsKKwl0YXNrLT5mZW5jZSA9 ICZmZW5jZS0+YmFzZTsKKworCS8qIGZvciBjYWxsZXIgdXNhZ2Ugb2YgdGhlIGZlbmNlLCBvdGhl cndpc2UgaXJxIGhhbmRsZXIKKwkgKiBtYXkgY29uc3VtZSB0aGUgZmVuY2UgYmVmb3JlIGNhbGxl ciB1c2UgaXQKKwkgKi8KKwlyZXQgPSBkbWFfZmVuY2VfZ2V0KHRhc2stPmZlbmNlKTsKKworCXBp cGUtPmN1cnJlbnRfdGFzayA9IHRhc2s7CisKKwkvKiB0aGlzIGlzIG5lZWRlZCBmb3IgTU1VIHRv IHdvcmsgY29ycmVjdGx5LCBvdGhlcndpc2UgR1AvUFAKKwkgKiB3aWxsIGhhbmcgb3IgcGFnZSBm YXVsdCBmb3IgdW5rbm93biByZWFzb24gYWZ0ZXIgcnVubmluZyBmb3IKKwkgKiBhIHdoaWxlLgor CSAqCisJICogTmVlZCB0byBpbnZlc3RpZ2F0ZToKKwkgKiAxLiBpcyBpdCByZWxhdGVkIHRvIFRM QgorCSAqIDIuIGhvdyBtdWNoIHBlcmZvcm1hbmNlIHdpbGwgYmUgYWZmZWN0ZWQgYnkgTDIgY2Fj aGUgZmx1c2gKKwkgKiAzLiBjYW4gd2UgcmVkdWNlIHRoZSBjYWxsaW5nIG9mIHRoaXMgZnVuY3Rp b24gYmVjYXVzZSBhbGwKKwkgKiAgICBHUC9QUCB1c2UgdGhlIHNhbWUgTDIgY2FjaGUgb24gbWFs aTQwMAorCSAqCisJICogVE9ETzoKKwkgKiAxLiBtb3ZlIHRoaXMgdG8gdGFzayBmaW5pIHRvIHNh dmUgc29tZSB3YWl0IHRpbWU/CisJICogMi4gd2hlbiBHUC9QUCB1c2UgZGlmZmVyZW50IGwyIGNh Y2hlLCBuZWVkIFBQIHdhaXQgR1AgbDIKKwkgKiAgICBjYWNoZSBmbHVzaD8KKwkgKi8KKwlmb3Ig KGkgPSAwOyBpIDwgcGlwZS0+bnVtX2wyX2NhY2hlOyBpKyspCisJCWxpbWFfbDJfY2FjaGVfZmx1 c2gocGlwZS0+bDJfY2FjaGVbaV0pOworCisJaWYgKHRhc2stPnZtICE9IHBpcGUtPmN1cnJlbnRf dm0pIHsKKwkJdm0gPSBsaW1hX3ZtX2dldCh0YXNrLT52bSk7CisJCWxhc3Rfdm0gPSBwaXBlLT5j dXJyZW50X3ZtOworCQlwaXBlLT5jdXJyZW50X3ZtID0gdGFzay0+dm07CisJfQorCisJaWYgKHBp cGUtPmJjYXN0X21tdSkKKwkJbGltYV9tbXVfc3dpdGNoX3ZtKHBpcGUtPmJjYXN0X21tdSwgdm0p OworCWVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgcGlwZS0+bnVtX21tdTsgaSsrKQorCQkJbGlt YV9tbXVfc3dpdGNoX3ZtKHBpcGUtPm1tdVtpXSwgdm0pOworCX0KKworCWlmIChsYXN0X3ZtKQor CQlsaW1hX3ZtX3B1dChsYXN0X3ZtKTsKKworCXBpcGUtPmVycm9yID0gZmFsc2U7CisJcGlwZS0+ dGFza19ydW4ocGlwZSwgdGFzayk7CisKKwlyZXR1cm4gdGFzay0+ZmVuY2U7Cit9CisKK3N0YXRp YyB2b2lkIGxpbWFfc2NoZWRfaGFuZGxlX2Vycm9yX3Rhc2soc3RydWN0IGxpbWFfc2NoZWRfcGlw ZSAqcGlwZSwKKwkJCQkJIHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2spCit7CisJZHJtX3Nj aGVkX3N0b3AoJnBpcGUtPmJhc2UpOworCisJaWYgKHRhc2spCisJCWRybV9zY2hlZF9pbmNyZWFz ZV9rYXJtYSgmdGFzay0+YmFzZSk7CisKKwlwaXBlLT50YXNrX2Vycm9yKHBpcGUpOworCisJaWYg KHBpcGUtPmJjYXN0X21tdSkKKwkJbGltYV9tbXVfcGFnZV9mYXVsdF9yZXN1bWUocGlwZS0+YmNh c3RfbW11KTsKKwllbHNlIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IHBpcGUtPm51 bV9tbXU7IGkrKykKKwkJCWxpbWFfbW11X3BhZ2VfZmF1bHRfcmVzdW1lKHBpcGUtPm1tdVtpXSk7 CisJfQorCisJaWYgKHBpcGUtPmN1cnJlbnRfdm0pCisJCWxpbWFfdm1fcHV0KHBpcGUtPmN1cnJl bnRfdm0pOworCisJcGlwZS0+Y3VycmVudF92bSA9IE5VTEw7CisJcGlwZS0+Y3VycmVudF90YXNr ID0gTlVMTDsKKworCWRybV9zY2hlZF9yZXN1Ym1pdF9qb2JzKCZwaXBlLT5iYXNlKTsKKwlkcm1f c2NoZWRfc3RhcnQoJnBpcGUtPmJhc2UsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBsaW1hX3Nj aGVkX3RpbWVkb3V0X2pvYihzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqam9iKQoreworCXN0cnVjdCBs aW1hX3NjaGVkX3BpcGUgKnBpcGUgPSB0b19saW1hX3BpcGUoam9iLT5zY2hlZCk7CisJc3RydWN0 IGxpbWFfc2NoZWRfdGFzayAqdGFzayA9IHRvX2xpbWFfdGFzayhqb2IpOworCisJRFJNX0VSUk9S KCJsaW1hIGpvYiB0aW1lb3V0XG4iKTsKKworCWxpbWFfc2NoZWRfaGFuZGxlX2Vycm9yX3Rhc2so cGlwZSwgdGFzayk7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfc2NoZWRfZnJlZV9qb2Ioc3RydWN0 IGRybV9zY2hlZF9qb2IgKmpvYikKK3sKKwlzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrID0g dG9fbGltYV90YXNrKGpvYik7CisJc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSA9IHRvX2xp bWFfcGlwZShqb2ItPnNjaGVkKTsKKwlzdHJ1Y3QgbGltYV92bSAqdm0gPSB0YXNrLT52bTsKKwlz dHJ1Y3QgbGltYV9ibyAqKmJvcyA9IHRhc2stPmJvczsKKwlpbnQgaTsKKworCWRtYV9mZW5jZV9w dXQodGFzay0+ZmVuY2UpOworCisJZm9yIChpID0gMDsgaSA8IHRhc2stPm51bV9ib3M7IGkrKykK KwkJbGltYV92bV9ib19kZWwodm0sIGJvc1tpXSk7CisKKwlsaW1hX3NjaGVkX3Rhc2tfZmluaSh0 YXNrKTsKKwlrbWVtX2NhY2hlX2ZyZWUocGlwZS0+dGFza19zbGFiLCB0YXNrKTsKK30KKworY29u c3Qgc3RydWN0IGRybV9zY2hlZF9iYWNrZW5kX29wcyBsaW1hX3NjaGVkX29wcyA9IHsKKwkuZGVw ZW5kZW5jeSA9IGxpbWFfc2NoZWRfZGVwZW5kZW5jeSwKKwkucnVuX2pvYiA9IGxpbWFfc2NoZWRf cnVuX2pvYiwKKwkudGltZWRvdXRfam9iID0gbGltYV9zY2hlZF90aW1lZG91dF9qb2IsCisJLmZy ZWVfam9iID0gbGltYV9zY2hlZF9mcmVlX2pvYiwKK307CisKK3N0YXRpYyB2b2lkIGxpbWFfc2No ZWRfZXJyb3Jfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGxpbWFf c2NoZWRfcGlwZSAqcGlwZSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGltYV9zY2hl ZF9waXBlLCBlcnJvcl93b3JrKTsKKwlzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrID0gcGlw ZS0+Y3VycmVudF90YXNrOworCisJbGltYV9zY2hlZF9oYW5kbGVfZXJyb3JfdGFzayhwaXBlLCB0 YXNrKTsKK30KKworaW50IGxpbWFfc2NoZWRfcGlwZV9pbml0KHN0cnVjdCBsaW1hX3NjaGVkX3Bp cGUgKnBpcGUsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJbG9uZyB0aW1lb3V0OworCisJaWYgKGxp bWFfc2NoZWRfdGltZW91dF9tcyA8PSAwKQorCQl0aW1lb3V0ID0gTUFYX1NDSEVEVUxFX1RJTUVP VVQ7CisJZWxzZQorCQl0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhsaW1hX3NjaGVkX3RpbWVv dXRfbXMpOworCisJcGlwZS0+ZmVuY2VfY29udGV4dCA9IGRtYV9mZW5jZV9jb250ZXh0X2FsbG9j KDEpOworCXNwaW5fbG9ja19pbml0KCZwaXBlLT5mZW5jZV9sb2NrKTsKKworCUlOSVRfV09SSygm cGlwZS0+ZXJyb3Jfd29yaywgbGltYV9zY2hlZF9lcnJvcl93b3JrKTsKKworCXJldHVybiBkcm1f c2NoZWRfaW5pdCgmcGlwZS0+YmFzZSwgJmxpbWFfc2NoZWRfb3BzLCAxLCAwLCB0aW1lb3V0LCBu YW1lKTsKK30KKwordm9pZCBsaW1hX3NjaGVkX3BpcGVfZmluaShzdHJ1Y3QgbGltYV9zY2hlZF9w aXBlICpwaXBlKQoreworCWRybV9zY2hlZF9maW5pKCZwaXBlLT5iYXNlKTsKK30KKwordm9pZCBs aW1hX3NjaGVkX3BpcGVfdGFza19kb25lKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUpCit7 CisJaWYgKHBpcGUtPmVycm9yKQorCQlzY2hlZHVsZV93b3JrKCZwaXBlLT5lcnJvcl93b3JrKTsK KwllbHNlIHsKKwkJc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzayA9IHBpcGUtPmN1cnJlbnRf dGFzazsKKworCQlwaXBlLT50YXNrX2ZpbmkocGlwZSk7CisJCWRtYV9mZW5jZV9zaWduYWwodGFz ay0+ZmVuY2UpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFf c2NoZWQuaCBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfc2NoZWQuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmIwMTdjZmE3ZTMyNwotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfc2NoZWQuaApAQCAtMCwwICsxLDEwNCBAQAor LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCisvKiBDb3B5cmln aHQgMjAxNy0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaWZuZGVmIF9f TElNQV9TQ0hFRF9IX18KKyNkZWZpbmUgX19MSU1BX1NDSEVEX0hfXworCisjaW5jbHVkZSA8ZHJt L2dwdV9zY2hlZHVsZXIuaD4KKworc3RydWN0IGxpbWFfdm07CisKK3N0cnVjdCBsaW1hX3NjaGVk X3Rhc2sgeworCXN0cnVjdCBkcm1fc2NoZWRfam9iIGJhc2U7CisKKwlzdHJ1Y3QgbGltYV92bSAq dm07CisJdm9pZCAqZnJhbWU7CisKKwlzdHJ1Y3QgZG1hX2ZlbmNlICoqZGVwOworCWludCBudW1f ZGVwOworCWludCBtYXhfZGVwOworCisJc3RydWN0IGxpbWFfYm8gKipib3M7CisJaW50IG51bV9i b3M7CisKKwkvKiBwaXBlIGZlbmNlICovCisJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7Cit9Owor CitzdHJ1Y3QgbGltYV9zY2hlZF9jb250ZXh0IHsKKwlzdHJ1Y3QgZHJtX3NjaGVkX2VudGl0eSBi YXNlOworfTsKKworI2RlZmluZSBMSU1BX1NDSEVEX1BJUEVfTUFYX01NVSAgICAgICA4CisjZGVm aW5lIExJTUFfU0NIRURfUElQRV9NQVhfTDJfQ0FDSEUgIDIKKyNkZWZpbmUgTElNQV9TQ0hFRF9Q SVBFX01BWF9QUk9DRVNTT1IgOAorCitzdHJ1Y3QgbGltYV9pcDsKKworc3RydWN0IGxpbWFfc2No ZWRfcGlwZSB7CisJc3RydWN0IGRybV9ncHVfc2NoZWR1bGVyIGJhc2U7CisKKwl1NjQgZmVuY2Vf Y29udGV4dDsKKwl1MzIgZmVuY2Vfc2Vxbm87CisJc3BpbmxvY2tfdCBmZW5jZV9sb2NrOworCisJ c3RydWN0IGxpbWFfc2NoZWRfdGFzayAqY3VycmVudF90YXNrOworCXN0cnVjdCBsaW1hX3ZtICpj dXJyZW50X3ZtOworCisJc3RydWN0IGxpbWFfaXAgKm1tdVtMSU1BX1NDSEVEX1BJUEVfTUFYX01N VV07CisJaW50IG51bV9tbXU7CisKKwlzdHJ1Y3QgbGltYV9pcCAqbDJfY2FjaGVbTElNQV9TQ0hF RF9QSVBFX01BWF9MMl9DQUNIRV07CisJaW50IG51bV9sMl9jYWNoZTsKKworCXN0cnVjdCBsaW1h X2lwICpwcm9jZXNzb3JbTElNQV9TQ0hFRF9QSVBFX01BWF9QUk9DRVNTT1JdOworCWludCBudW1f cHJvY2Vzc29yOworCisJc3RydWN0IGxpbWFfaXAgKmJjYXN0X3Byb2Nlc3NvcjsKKwlzdHJ1Y3Qg bGltYV9pcCAqYmNhc3RfbW11OworCisJdTMyIGRvbmU7CisJYm9vbCBlcnJvcjsKKwlhdG9taWNf dCB0YXNrOworCisJaW50IGZyYW1lX3NpemU7CisJc3RydWN0IGttZW1fY2FjaGUgKnRhc2tfc2xh YjsKKworCWludCAoKnRhc2tfdmFsaWRhdGUpKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUs IHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2spOworCXZvaWQgKCp0YXNrX3J1bikoc3RydWN0 IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSwgc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzayk7CisJ dm9pZCAoKnRhc2tfZmluaSkoc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSk7CisJdm9pZCAo KnRhc2tfZXJyb3IpKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUpOworCXZvaWQgKCp0YXNr X21tdV9lcnJvcikoc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSk7CisKKwlzdHJ1Y3Qgd29y a19zdHJ1Y3QgZXJyb3Jfd29yazsKK307CisKK2ludCBsaW1hX3NjaGVkX3Rhc2tfaW5pdChzdHJ1 Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrLAorCQkJIHN0cnVjdCBsaW1hX3NjaGVkX2NvbnRleHQg KmNvbnRleHQsCisJCQkgc3RydWN0IGxpbWFfYm8gKipib3MsIGludCBudW1fYm9zLAorCQkJIHN0 cnVjdCBsaW1hX3ZtICp2bSk7Cit2b2lkIGxpbWFfc2NoZWRfdGFza19maW5pKHN0cnVjdCBsaW1h X3NjaGVkX3Rhc2sgKnRhc2spOworaW50IGxpbWFfc2NoZWRfdGFza19hZGRfZGVwKHN0cnVjdCBs aW1hX3NjaGVkX3Rhc2sgKnRhc2ssIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKTsKKworaW50IGxp bWFfc2NoZWRfY29udGV4dF9pbml0KHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUsCisJCQkg ICAgc3RydWN0IGxpbWFfc2NoZWRfY29udGV4dCAqY29udGV4dCwKKwkJCSAgICBhdG9taWNfdCAq Z3VpbHR5KTsKK3ZvaWQgbGltYV9zY2hlZF9jb250ZXh0X2Zpbmkoc3RydWN0IGxpbWFfc2NoZWRf cGlwZSAqcGlwZSwKKwkJCSAgICAgc3RydWN0IGxpbWFfc2NoZWRfY29udGV4dCAqY29udGV4dCk7 CitzdHJ1Y3QgZG1hX2ZlbmNlICpsaW1hX3NjaGVkX2NvbnRleHRfcXVldWVfdGFzayhzdHJ1Y3Qg bGltYV9zY2hlZF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJc3RydWN0IGxpbWFfc2NoZWRfdGFz ayAqdGFzayk7CisKK2ludCBsaW1hX3NjaGVkX3BpcGVfaW5pdChzdHJ1Y3QgbGltYV9zY2hlZF9w aXBlICpwaXBlLCBjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQgbGltYV9zY2hlZF9waXBlX2Zpbmko c3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSk7Cit2b2lkIGxpbWFfc2NoZWRfcGlwZV90YXNr X2RvbmUoc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSk7CisKK3N0YXRpYyBpbmxpbmUgdm9p ZCBsaW1hX3NjaGVkX3BpcGVfbW11X2Vycm9yKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUp Cit7CisJcGlwZS0+ZXJyb3IgPSB0cnVlOworCXBpcGUtPnRhc2tfbW11X2Vycm9yKHBpcGUpOwor fQorCitpbnQgbGltYV9zY2hlZF9zbGFiX2luaXQodm9pZCk7Cit2b2lkIGxpbWFfc2NoZWRfc2xh Yl9maW5pKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1h L2xpbWFfdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfdm0uYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjE5ZTg4Y2ExNjUyNwotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfdm0uYwpAQCAtMCwwICsxLDI4MiBAQAorLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisvKiBDb3B5cmlnaHQgMjAx Ny0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaW5jbHVkZSA8bGludXgv c2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKyNpbmNsdWRlICJsaW1h X2RldmljZS5oIgorI2luY2x1ZGUgImxpbWFfdm0uaCIKKyNpbmNsdWRlICJsaW1hX29iamVjdC5o IgorI2luY2x1ZGUgImxpbWFfcmVncy5oIgorCitzdHJ1Y3QgbGltYV9ib192YSB7CisJc3RydWN0 IGxpc3RfaGVhZCBsaXN0OworCXVuc2lnbmVkIGludCByZWZfY291bnQ7CisKKwlzdHJ1Y3QgZHJt X21tX25vZGUgbm9kZTsKKworCXN0cnVjdCBsaW1hX3ZtICp2bTsKK307CisKKyNkZWZpbmUgTElN QV9WTV9QRF9TSElGVCAyMgorI2RlZmluZSBMSU1BX1ZNX1BUX1NISUZUIDEyCisjZGVmaW5lIExJ TUFfVk1fUEJfU0hJRlQgKExJTUFfVk1fUERfU0hJRlQgKyBMSU1BX1ZNX05VTV9QVF9QRVJfQlRf U0hJRlQpCisjZGVmaW5lIExJTUFfVk1fQlRfU0hJRlQgTElNQV9WTV9QVF9TSElGVAorCisjZGVm aW5lIExJTUFfVk1fUFRfTUFTSyAoKDEgPDwgTElNQV9WTV9QRF9TSElGVCkgLSAxKQorI2RlZmlu ZSBMSU1BX1ZNX0JUX01BU0sgKCgxIDw8IExJTUFfVk1fUEJfU0hJRlQpIC0gMSkKKworI2RlZmlu ZSBMSU1BX1BERSh2YSkgKHZhID4+IExJTUFfVk1fUERfU0hJRlQpCisjZGVmaW5lIExJTUFfUFRF KHZhKSAoKHZhICYgTElNQV9WTV9QVF9NQVNLKSA+PiBMSU1BX1ZNX1BUX1NISUZUKQorI2RlZmlu ZSBMSU1BX1BCRSh2YSkgKHZhID4+IExJTUFfVk1fUEJfU0hJRlQpCisjZGVmaW5lIExJTUFfQlRF KHZhKSAoKHZhICYgTElNQV9WTV9CVF9NQVNLKSA+PiBMSU1BX1ZNX0JUX1NISUZUKQorCisKK3N0 YXRpYyB2b2lkIGxpbWFfdm1fdW5tYXBfcGFnZV90YWJsZShzdHJ1Y3QgbGltYV92bSAqdm0sIHUz MiBzdGFydCwgdTMyIGVuZCkKK3sKKwl1MzIgYWRkcjsKKworCWZvciAoYWRkciA9IHN0YXJ0OyBh ZGRyIDw9IGVuZDsgYWRkciArPSBMSU1BX1BBR0VfU0laRSkgeworCQl1MzIgcGJlID0gTElNQV9Q QkUoYWRkcik7CisJCXUzMiBidGUgPSBMSU1BX0JURShhZGRyKTsKKworCQl2bS0+YnRzW3BiZV0u Y3B1W2J0ZV0gPSAwOworCX0KK30KKworc3RhdGljIGludCBsaW1hX3ZtX21hcF9wYWdlX3RhYmxl KHN0cnVjdCBsaW1hX3ZtICp2bSwgZG1hX2FkZHJfdCAqZG1hLAorCQkJCSAgdTMyIHN0YXJ0LCB1 MzIgZW5kKQoreworCXU2NCBhZGRyOworCWludCBpID0gMDsKKworCWZvciAoYWRkciA9IHN0YXJ0 OyBhZGRyIDw9IGVuZDsgYWRkciArPSBMSU1BX1BBR0VfU0laRSkgeworCQl1MzIgcGJlID0gTElN QV9QQkUoYWRkcik7CisJCXUzMiBidGUgPSBMSU1BX0JURShhZGRyKTsKKworCQlpZiAoIXZtLT5i dHNbcGJlXS5jcHUpIHsKKwkJCWRtYV9hZGRyX3QgcHRzOworCQkJdTMyICpwZDsKKwkJCWludCBq OworCisJCQl2bS0+YnRzW3BiZV0uY3B1ID0gZG1hX2FsbG9jX3djKAorCQkJCXZtLT5kZXYtPmRl diwgTElNQV9QQUdFX1NJWkUgPDwgTElNQV9WTV9OVU1fUFRfUEVSX0JUX1NISUZULAorCQkJCSZ2 bS0+YnRzW3BiZV0uZG1hLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CisJCQlpZiAoIXZtLT5i dHNbcGJlXS5jcHUpIHsKKwkJCQlpZiAoYWRkciAhPSBzdGFydCkKKwkJCQkJbGltYV92bV91bm1h cF9wYWdlX3RhYmxlKHZtLCBzdGFydCwgYWRkciAtIDEpOworCQkJCXJldHVybiAtRU5PTUVNOwor CQkJfQorCisJCQlwdHMgPSB2bS0+YnRzW3BiZV0uZG1hOworCQkJcGQgPSB2bS0+cGQuY3B1ICsg KHBiZSA8PCBMSU1BX1ZNX05VTV9QVF9QRVJfQlRfU0hJRlQpOworCQkJZm9yIChqID0gMDsgaiA8 IExJTUFfVk1fTlVNX1BUX1BFUl9CVDsgaisrKSB7CisJCQkJcGRbal0gPSBwdHMgfCBMSU1BX1ZN X0ZMQUdfUFJFU0VOVDsKKwkJCQlwdHMgKz0gTElNQV9QQUdFX1NJWkU7CisJCQl9CisJCX0KKwor CQl2bS0+YnRzW3BiZV0uY3B1W2J0ZV0gPSBkbWFbaSsrXSB8IExJTUFfVk1fRkxBR1NfQ0FDSEU7 CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGltYV9ib192YSAqCitsaW1h X3ZtX2JvX2ZpbmQoc3RydWN0IGxpbWFfdm0gKnZtLCBzdHJ1Y3QgbGltYV9ibyAqYm8pCit7CisJ c3RydWN0IGxpbWFfYm9fdmEgKmJvX3ZhLCAqcmV0ID0gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hf ZW50cnkoYm9fdmEsICZiby0+dmEsIGxpc3QpIHsKKwkJaWYgKGJvX3ZhLT52bSA9PSB2bSkgewor CQkJcmV0ID0gYm9fdmE7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisK K2ludCBsaW1hX3ZtX2JvX2FkZChzdHJ1Y3QgbGltYV92bSAqdm0sIHN0cnVjdCBsaW1hX2JvICpi bywgYm9vbCBjcmVhdGUpCit7CisJc3RydWN0IGxpbWFfYm9fdmEgKmJvX3ZhOworCWludCBlcnI7 CisKKwltdXRleF9sb2NrKCZiby0+bG9jayk7CisKKwlib192YSA9IGxpbWFfdm1fYm9fZmluZCh2 bSwgYm8pOworCWlmIChib192YSkgeworCQlib192YS0+cmVmX2NvdW50Kys7CisJCW11dGV4X3Vu bG9jaygmYm8tPmxvY2spOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBzaG91bGQgbm90IGNyZWF0 ZSBuZXcgYm9fdmEgaWYgbm90IGFza2VkIGJ5IGNhbGxlciAqLworCWlmICghY3JlYXRlKSB7CisJ CW11dGV4X3VubG9jaygmYm8tPmxvY2spOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlib192 YSA9IGt6YWxsb2Moc2l6ZW9mKCpib192YSksIEdGUF9LRVJORUwpOworCWlmICghYm9fdmEpIHsK KwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0MDsKKwl9CisKKwlib192YS0+dm0gPSB2 bTsKKwlib192YS0+cmVmX2NvdW50ID0gMTsKKworCW11dGV4X2xvY2soJnZtLT5sb2NrKTsKKwor CWVyciA9IGRybV9tbV9pbnNlcnRfbm9kZSgmdm0tPm1tLCAmYm9fdmEtPm5vZGUsIGJvLT5nZW0u c2l6ZSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0MTsKKworCWVyciA9IGxpbWFfdm1fbWFw X3BhZ2VfdGFibGUodm0sIGJvLT5wYWdlc19kbWFfYWRkciwgYm9fdmEtPm5vZGUuc3RhcnQsCisJ CQkJICAgICBib192YS0+bm9kZS5zdGFydCArIGJvX3ZhLT5ub2RlLnNpemUgLSAxKTsKKwlpZiAo ZXJyKQorCQlnb3RvIGVycl9vdXQyOworCisJbXV0ZXhfdW5sb2NrKCZ2bS0+bG9jayk7CisKKwls aXN0X2FkZF90YWlsKCZib192YS0+bGlzdCwgJmJvLT52YSk7CisKKwltdXRleF91bmxvY2soJmJv LT5sb2NrKTsKKwlyZXR1cm4gMDsKKworZXJyX291dDI6CisJZHJtX21tX3JlbW92ZV9ub2RlKCZi b192YS0+bm9kZSk7CitlcnJfb3V0MToKKwltdXRleF91bmxvY2soJnZtLT5sb2NrKTsKKwlrZnJl ZShib192YSk7CitlcnJfb3V0MDoKKwltdXRleF91bmxvY2soJmJvLT5sb2NrKTsKKwlyZXR1cm4g ZXJyOworfQorCit2b2lkIGxpbWFfdm1fYm9fZGVsKHN0cnVjdCBsaW1hX3ZtICp2bSwgc3RydWN0 IGxpbWFfYm8gKmJvKQoreworCXN0cnVjdCBsaW1hX2JvX3ZhICpib192YTsKKworCW11dGV4X2xv Y2soJmJvLT5sb2NrKTsKKworCWJvX3ZhID0gbGltYV92bV9ib19maW5kKHZtLCBibyk7CisJaWYg KC0tYm9fdmEtPnJlZl9jb3VudCA+IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZiby0+bG9jayk7CisJ CXJldHVybjsKKwl9CisKKwltdXRleF9sb2NrKCZ2bS0+bG9jayk7CisKKwlsaW1hX3ZtX3VubWFw X3BhZ2VfdGFibGUodm0sIGJvX3ZhLT5ub2RlLnN0YXJ0LAorCQkJCSBib192YS0+bm9kZS5zdGFy dCArIGJvX3ZhLT5ub2RlLnNpemUgLSAxKTsKKworCWRybV9tbV9yZW1vdmVfbm9kZSgmYm9fdmEt Pm5vZGUpOworCisJbXV0ZXhfdW5sb2NrKCZ2bS0+bG9jayk7CisKKwlsaXN0X2RlbCgmYm9fdmEt Pmxpc3QpOworCisJbXV0ZXhfdW5sb2NrKCZiby0+bG9jayk7CisKKwlrZnJlZShib192YSk7Cit9 CisKK3UzMiBsaW1hX3ZtX2dldF92YShzdHJ1Y3QgbGltYV92bSAqdm0sIHN0cnVjdCBsaW1hX2Jv ICpibykKK3sKKwlzdHJ1Y3QgbGltYV9ib192YSAqYm9fdmE7CisJdTMyIHJldDsKKworCW11dGV4 X2xvY2soJmJvLT5sb2NrKTsKKworCWJvX3ZhID0gbGltYV92bV9ib19maW5kKHZtLCBibyk7CisJ cmV0ID0gYm9fdmEtPm5vZGUuc3RhcnQ7CisKKwltdXRleF91bmxvY2soJmJvLT5sb2NrKTsKKwor CXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBsaW1hX3ZtICpsaW1hX3ZtX2NyZWF0ZShzdHJ1Y3Qg bGltYV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbGltYV92bSAqdm07CisKKwl2bSA9IGt6YWxs b2Moc2l6ZW9mKCp2bSksIEdGUF9LRVJORUwpOworCWlmICghdm0pCisJCXJldHVybiBOVUxMOwor CisJdm0tPmRldiA9IGRldjsKKwltdXRleF9pbml0KCZ2bS0+bG9jayk7CisJa3JlZl9pbml0KCZ2 bS0+cmVmY291bnQpOworCisJdm0tPnBkLmNwdSA9IGRtYV9hbGxvY193YyhkZXYtPmRldiwgTElN QV9QQUdFX1NJWkUsICZ2bS0+cGQuZG1hLAorCQkJCSAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8p OworCWlmICghdm0tPnBkLmNwdSkKKwkJZ290byBlcnJfb3V0MDsKKworCWlmIChkZXYtPmRsYnVf Y3B1KSB7CisJCWludCBlcnIgPSBsaW1hX3ZtX21hcF9wYWdlX3RhYmxlKAorCQkJdm0sICZkZXYt PmRsYnVfZG1hLCBMSU1BX1ZBX1JFU0VSVkVfRExCVSwKKwkJCUxJTUFfVkFfUkVTRVJWRV9ETEJV ICsgTElNQV9QQUdFX1NJWkUgLSAxKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dDE7CisJ fQorCisJZHJtX21tX2luaXQoJnZtLT5tbSwgZGV2LT52YV9zdGFydCwgZGV2LT52YV9lbmQgLSBk ZXYtPnZhX3N0YXJ0KTsKKworCXJldHVybiB2bTsKKworZXJyX291dDE6CisJZG1hX2ZyZWVfd2Mo ZGV2LT5kZXYsIExJTUFfUEFHRV9TSVpFLCB2bS0+cGQuY3B1LCB2bS0+cGQuZG1hKTsKK2Vycl9v dXQwOgorCWtmcmVlKHZtKTsKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBsaW1hX3ZtX3JlbGVh c2Uoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IGxpbWFfdm0gKnZtID0gY29udGFpbmVy X29mKGtyZWYsIHN0cnVjdCBsaW1hX3ZtLCByZWZjb3VudCk7CisJaW50IGk7CisKKwlkcm1fbW1f dGFrZWRvd24oJnZtLT5tbSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTElNQV9WTV9OVU1fQlQ7IGkr KykgeworCQlpZiAodm0tPmJ0c1tpXS5jcHUpCisJCQlkbWFfZnJlZV93Yyh2bS0+ZGV2LT5kZXYs IExJTUFfUEFHRV9TSVpFIDw8IExJTUFfVk1fTlVNX1BUX1BFUl9CVF9TSElGVCwKKwkJCQkgICAg dm0tPmJ0c1tpXS5jcHUsIHZtLT5idHNbaV0uZG1hKTsKKwl9CisKKwlpZiAodm0tPnBkLmNwdSkK KwkJZG1hX2ZyZWVfd2Modm0tPmRldi0+ZGV2LCBMSU1BX1BBR0VfU0laRSwgdm0tPnBkLmNwdSwg dm0tPnBkLmRtYSk7CisKKwlrZnJlZSh2bSk7Cit9CisKK3ZvaWQgbGltYV92bV9wcmludChzdHJ1 Y3QgbGltYV92bSAqdm0pCit7CisJaW50IGksIGosIGs7CisJdTMyICpwZCwgKnB0OworCisJaWYg KCF2bS0+cGQuY3B1KQorCQlyZXR1cm47CisKKwlwZCA9IHZtLT5wZC5jcHU7CisJZm9yIChpID0g MDsgaSA8IExJTUFfVk1fTlVNX0JUOyBpKyspIHsKKwkJaWYgKCF2bS0+YnRzW2ldLmNwdSkKKwkJ CWNvbnRpbnVlOworCisJCXB0ID0gdm0tPmJ0c1tpXS5jcHU7CisJCWZvciAoaiA9IDA7IGogPCBM SU1BX1ZNX05VTV9QVF9QRVJfQlQ7IGorKykgeworCQkJaW50IGlkeCA9IChpIDw8IExJTUFfVk1f TlVNX1BUX1BFUl9CVF9TSElGVCkgKyBqOworCisJCQlwcmludGsoS0VSTl9JTkZPICJsaW1hIHZt IHBkICUwM3g6JTA4eFxuIiwgaWR4LCBwZFtpZHhdKTsKKworCQkJZm9yIChrID0gMDsgayA8IExJ TUFfUEFHRV9FTlRfTlVNOyBrKyspIHsKKwkJCQl1MzIgcHRlID0gKnB0Kys7CisKKwkJCQlpZiAo cHRlKQorCQkJCQlwcmludGsoS0VSTl9JTkZPICIgIHB0ICUwM3g6JTA4eFxuIiwgaywgcHRlKTsK KwkJCX0KKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFf dm0uaCBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfdm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLmNhZWUyZjhhMjliNAotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfdm0uaApAQCAtMCwwICsxLDYyIEBACisvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQgKi8KKy8qIENvcHlyaWdodCAyMDE3LTIw MTkgUWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+ICovCisKKyNpZm5kZWYgX19MSU1BX1ZNX0hf XworI2RlZmluZSBfX0xJTUFfVk1fSF9fCisKKyNpbmNsdWRlIDxkcm0vZHJtX21tLmg+CisjaW5j bHVkZSA8bGludXgva3JlZi5oPgorCisjZGVmaW5lIExJTUFfUEFHRV9TSVpFICAgIDQwOTYKKyNk ZWZpbmUgTElNQV9QQUdFX01BU0sgICAgKExJTUFfUEFHRV9TSVpFIC0gMSkKKyNkZWZpbmUgTElN QV9QQUdFX0VOVF9OVU0gKExJTUFfUEFHRV9TSVpFIC8gc2l6ZW9mKHUzMikpCisKKyNkZWZpbmUg TElNQV9WTV9OVU1fUFRfUEVSX0JUX1NISUZUIDMKKyNkZWZpbmUgTElNQV9WTV9OVU1fUFRfUEVS X0JUICgxIDw8IExJTUFfVk1fTlVNX1BUX1BFUl9CVF9TSElGVCkKKyNkZWZpbmUgTElNQV9WTV9O VU1fQlQgKExJTUFfUEFHRV9FTlRfTlVNID4+IExJTUFfVk1fTlVNX1BUX1BFUl9CVF9TSElGVCkK KworI2RlZmluZSBMSU1BX1ZBX1JFU0VSVkVfU1RBUlQgIDB4RkZGMDAwMDAKKyNkZWZpbmUgTElN QV9WQV9SRVNFUlZFX0RMQlUgICBMSU1BX1ZBX1JFU0VSVkVfU1RBUlQKKyNkZWZpbmUgTElNQV9W QV9SRVNFUlZFX0VORCAgICAweDEwMDAwMDAwMAorCitzdHJ1Y3QgbGltYV9kZXZpY2U7CisKK3N0 cnVjdCBsaW1hX3ZtX3BhZ2UgeworCXUzMiAqY3B1OworCWRtYV9hZGRyX3QgZG1hOworfTsKKwor c3RydWN0IGxpbWFfdm0geworCXN0cnVjdCBtdXRleCBsb2NrOworCXN0cnVjdCBrcmVmIHJlZmNv dW50OworCisJc3RydWN0IGRybV9tbSBtbTsKKworCXN0cnVjdCBsaW1hX2RldmljZSAqZGV2Owor CisJc3RydWN0IGxpbWFfdm1fcGFnZSBwZDsKKwlzdHJ1Y3QgbGltYV92bV9wYWdlIGJ0c1tMSU1B X1ZNX05VTV9CVF07Cit9OworCitpbnQgbGltYV92bV9ib19hZGQoc3RydWN0IGxpbWFfdm0gKnZt LCBzdHJ1Y3QgbGltYV9ibyAqYm8sIGJvb2wgY3JlYXRlKTsKK3ZvaWQgbGltYV92bV9ib19kZWwo c3RydWN0IGxpbWFfdm0gKnZtLCBzdHJ1Y3QgbGltYV9ibyAqYm8pOworCit1MzIgbGltYV92bV9n ZXRfdmEoc3RydWN0IGxpbWFfdm0gKnZtLCBzdHJ1Y3QgbGltYV9ibyAqYm8pOworCitzdHJ1Y3Qg bGltYV92bSAqbGltYV92bV9jcmVhdGUoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYpOwordm9pZCBs aW1hX3ZtX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpOworCitzdGF0aWMgaW5saW5lIHN0cnVj dCBsaW1hX3ZtICpsaW1hX3ZtX2dldChzdHJ1Y3QgbGltYV92bSAqdm0pCit7CisJa3JlZl9nZXQo JnZtLT5yZWZjb3VudCk7CisJcmV0dXJuIHZtOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbGlt YV92bV9wdXQoc3RydWN0IGxpbWFfdm0gKnZtKQoreworCWtyZWZfcHV0KCZ2bS0+cmVmY291bnQs IGxpbWFfdm1fcmVsZWFzZSk7Cit9CisKK3ZvaWQgbGltYV92bV9wcmludChzdHJ1Y3QgbGltYV92 bSAqdm0pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vbGltYV9kcm0u aCBiL2luY2x1ZGUvdWFwaS9kcm0vbGltYV9kcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLjcwNTcyM2E2NGI1ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUv dWFwaS9kcm0vbGltYV9kcm0uaApAQCAtMCwwICsxLDEzOSBAQAorLyogU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IChHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlKSBPUiBNSVQgKi8KKy8q IENvcHlyaWdodCAyMDE3LTIwMTggUWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+ICovCisKKyNp Zm5kZWYgX19MSU1BX0RSTV9IX18KKyNkZWZpbmUgX19MSU1BX0RSTV9IX18KKworI2luY2x1ZGUg ImRybS5oIgorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlm CisKK2VudW0gZHJtX2xpbWFfcGFyYW1fZ3B1X2lkIHsKKwlEUk1fTElNQV9QQVJBTV9HUFVfSURf VU5LTk9XTiwKKwlEUk1fTElNQV9QQVJBTV9HUFVfSURfTUFMSTQwMCwKKwlEUk1fTElNQV9QQVJB TV9HUFVfSURfTUFMSTQ1MCwKK307CisKK2VudW0gZHJtX2xpbWFfcGFyYW0geworCURSTV9MSU1B X1BBUkFNX0dQVV9JRCwKKwlEUk1fTElNQV9QQVJBTV9OVU1fUFAsCisJRFJNX0xJTUFfUEFSQU1f R1BfVkVSU0lPTiwKKwlEUk1fTElNQV9QQVJBTV9QUF9WRVJTSU9OLAorfTsKKworc3RydWN0IGRy bV9saW1hX2dldF9wYXJhbSB7CisJX191MzIgcGFyYW07IC8qIGluICovCisJX191MzIgcGFkOwor CV9fdTY0IHZhbHVlOyAvKiBvdXQgKi8KK307CisKK3N0cnVjdCBkcm1fbGltYV9nZW1fY3JlYXRl IHsKKwlfX3UzMiBzaXplOyAgICAvKiBpbiAqLworCV9fdTMyIGZsYWdzOyAgIC8qIGluICovCisJ X191MzIgaGFuZGxlOyAgLyogb3V0ICovCisJX191MzIgcGFkOworfTsKKworc3RydWN0IGRybV9s aW1hX2dlbV9pbmZvIHsKKwlfX3UzMiBoYW5kbGU7ICAvKiBpbiAqLworCV9fdTMyIHZhOyAgICAg IC8qIG91dCAqLworCV9fdTY0IG9mZnNldDsgIC8qIG91dCAqLworfTsKKworI2RlZmluZSBMSU1B X1NVQk1JVF9CT19SRUFEICAgMHgwMQorI2RlZmluZSBMSU1BX1NVQk1JVF9CT19XUklURSAgMHgw MgorCitzdHJ1Y3QgZHJtX2xpbWFfZ2VtX3N1Ym1pdF9ibyB7CisJX191MzIgaGFuZGxlOyAgLyog aW4gKi8KKwlfX3UzMiBmbGFnczsgICAvKiBpbiAqLworfTsKKworI2RlZmluZSBMSU1BX0dQX0ZS QU1FX1JFR19OVU0gNgorCitzdHJ1Y3QgZHJtX2xpbWFfZ3BfZnJhbWUgeworCV9fdTMyIGZyYW1l W0xJTUFfR1BfRlJBTUVfUkVHX05VTV07Cit9OworCisjZGVmaW5lIExJTUFfUFBfRlJBTUVfUkVH X05VTSAyMworI2RlZmluZSBMSU1BX1BQX1dCX1JFR19OVU0gMTIKKworc3RydWN0IGRybV9saW1h X200MDBfcHBfZnJhbWUgeworCV9fdTMyIGZyYW1lW0xJTUFfUFBfRlJBTUVfUkVHX05VTV07CisJ X191MzIgbnVtX3BwOworCV9fdTMyIHdiWzMgKiBMSU1BX1BQX1dCX1JFR19OVU1dOworCV9fdTMy IHBsYnVfYXJyYXlfYWRkcmVzc1s0XTsKKwlfX3UzMiBmcmFnbWVudF9zdGFja19hZGRyZXNzWzRd OworfTsKKworc3RydWN0IGRybV9saW1hX200NTBfcHBfZnJhbWUgeworCV9fdTMyIGZyYW1lW0xJ TUFfUFBfRlJBTUVfUkVHX05VTV07CisJX191MzIgbnVtX3BwOworCV9fdTMyIHdiWzMgKiBMSU1B X1BQX1dCX1JFR19OVU1dOworCV9fdTMyIHVzZV9kbGJ1OworCV9fdTMyIF9wYWQ7CisJdW5pb24g eworCQlfX3UzMiBwbGJ1X2FycmF5X2FkZHJlc3NbOF07CisJCV9fdTMyIGRsYnVfcmVnc1s0XTsK Kwl9OworCV9fdTMyIGZyYWdtZW50X3N0YWNrX2FkZHJlc3NbOF07Cit9OworCisjZGVmaW5lIExJ TUFfUElQRV9HUCAgMHgwMAorI2RlZmluZSBMSU1BX1BJUEVfUFAgIDB4MDEKKworI2RlZmluZSBM SU1BX1NVQk1JVF9GTEFHX0VYUExJQ0lUX0ZFTkNFICgxIDw8IDApCisKK3N0cnVjdCBkcm1fbGlt YV9nZW1fc3VibWl0IHsKKwlfX3UzMiBjdHg7ICAgICAgICAgLyogaW4gKi8KKwlfX3UzMiBwaXBl OyAgICAgICAgLyogaW4gKi8KKwlfX3UzMiBucl9ib3M7ICAgICAgLyogaW4gKi8KKwlfX3UzMiBm cmFtZV9zaXplOyAgLyogaW4gKi8KKwlfX3U2NCBib3M7ICAgICAgICAgLyogaW4gKi8KKwlfX3U2 NCBmcmFtZTsgICAgICAgLyogaW4gKi8KKwlfX3UzMiBmbGFnczsgICAgICAgLyogaW4gKi8KKwlf X3UzMiBvdXRfc3luYzsgICAgLyogaW4gKi8KKwlfX3UzMiBpbl9zeW5jWzJdOyAgLyogaW4gKi8K K307CisKKyNkZWZpbmUgTElNQV9HRU1fV0FJVF9SRUFEICAgMHgwMQorI2RlZmluZSBMSU1BX0dF TV9XQUlUX1dSSVRFICAweDAyCisKK3N0cnVjdCBkcm1fbGltYV9nZW1fd2FpdCB7CisJX191MzIg aGFuZGxlOyAgICAgIC8qIGluICovCisJX191MzIgb3A7ICAgICAgICAgIC8qIGluICovCisJX19z NjQgdGltZW91dF9uczsgIC8qIGluICovCit9OworCitzdHJ1Y3QgZHJtX2xpbWFfY3R4X2NyZWF0 ZSB7CisJX191MzIgaWQ7ICAgICAgICAgIC8qIG91dCAqLworCV9fdTMyIF9wYWQ7Cit9OworCitz dHJ1Y3QgZHJtX2xpbWFfY3R4X2ZyZWUgeworCV9fdTMyIGlkOyAgICAgICAgICAvKiBpbiAqLwor CV9fdTMyIF9wYWQ7Cit9OworCisjZGVmaW5lIERSTV9MSU1BX0dFVF9QQVJBTSAgIDB4MDAKKyNk ZWZpbmUgRFJNX0xJTUFfR0VNX0NSRUFURSAgMHgwMQorI2RlZmluZSBEUk1fTElNQV9HRU1fSU5G TyAgICAweDAyCisjZGVmaW5lIERSTV9MSU1BX0dFTV9TVUJNSVQgIDB4MDMKKyNkZWZpbmUgRFJN X0xJTUFfR0VNX1dBSVQgICAgMHgwNAorI2RlZmluZSBEUk1fTElNQV9DVFhfQ1JFQVRFICAweDA1 CisjZGVmaW5lIERSTV9MSU1BX0NUWF9GUkVFICAgIDB4MDYKKworI2RlZmluZSBEUk1fSU9DVExf TElNQV9HRVRfUEFSQU0gRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9MSU1BX0dFVF9Q QVJBTSwgc3RydWN0IGRybV9saW1hX2dldF9wYXJhbSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0xJTUFf R0VNX0NSRUFURSBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0xJTUFfR0VNX0NSRUFU RSwgc3RydWN0IGRybV9saW1hX2dlbV9jcmVhdGUpCisjZGVmaW5lIERSTV9JT0NUTF9MSU1BX0dF TV9JTkZPIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTElNQV9HRU1fSU5GTywgc3Ry dWN0IGRybV9saW1hX2dlbV9pbmZvKQorI2RlZmluZSBEUk1fSU9DVExfTElNQV9HRU1fU1VCTUlU IERSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9MSU1BX0dFTV9TVUJNSVQsIHN0cnVjdCBk cm1fbGltYV9nZW1fc3VibWl0KQorI2RlZmluZSBEUk1fSU9DVExfTElNQV9HRU1fV0FJVCBEUk1f SU9XKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTElNQV9HRU1fV0FJVCwgc3RydWN0IGRybV9saW1h X2dlbV93YWl0KQorI2RlZmluZSBEUk1fSU9DVExfTElNQV9DVFhfQ1JFQVRFIERSTV9JT1IoRFJN X0NPTU1BTkRfQkFTRSArIERSTV9MSU1BX0NUWF9DUkVBVEUsIHN0cnVjdCBkcm1fbGltYV9jdHhf Y3JlYXRlKQorI2RlZmluZSBEUk1fSU9DVExfTElNQV9DVFhfRlJFRSBEUk1fSU9XKERSTV9DT01N QU5EX0JBU0UgKyBEUk1fTElNQV9DVFhfRlJFRSwgc3RydWN0IGRybV9saW1hX2N0eF9mcmVlKQor CisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19MSU1B X0RSTV9IX18gKi8KLS0gCjIuMTcuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vZHJpLWRldmVs