From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [CI 2/9] drm/i915/pmu: Expose a PMU interface for perf queries Date: Tue, 21 Nov 2017 18:18:45 +0000 Message-ID: <20171121181852.16128-2-tvrtko.ursulin@linux.intel.com> References: <20171121181852.16128-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x230.google.com (mail-wm0-x230.google.com [IPv6:2a00:1450:400c:c09::230]) by gabe.freedesktop.org (Postfix) with ESMTPS id A4B006E55F for ; Tue, 21 Nov 2017 18:19:13 +0000 (UTC) Received: by mail-wm0-x230.google.com with SMTP id y80so5320223wmd.0 for ; Tue, 21 Nov 2017 10:19:13 -0800 (PST) In-Reply-To: <20171121181852.16128-1-tvrtko.ursulin@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel-gfx@lists.freedesktop.org Cc: Peter Zijlstra List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkZyb206IENo cmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpGcm9tOiBUdnJ0a28gVXJzdWxp biA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpGcm9tOiBEbWl0cnkgUm9nb3poa2luIDxkbWl0 cnkudi5yb2dvemhraW5AaW50ZWwuY29tPgoKVGhlIGZpcnN0IGdvYWwgaXMgdG8gYmUgYWJsZSB0 byBtZWFzdXJlIEdQVSAoYW5kIGludmlkdWFsIHJpbmcpIGJ1c3luZXNzCndpdGhvdXQgaGF2aW5n IHRvIHBvbGwgcmVnaXN0ZXJzIGZyb20gdXNlcnNwYWNlLiAoV2hpY2ggbm90IG9ubHkgaW5jdXJz CmhvbGRpbmcgdGhlIGZvcmNld2FrZSBsb2NrIGluZGVmaW5pdGVseSwgcGVydHVyYmluZyB0aGUg c3lzdGVtLCBidXQgYWxzbwpydW5zIHRoZSByaXNrIG9mIGhhbmdpbmcgdGhlIG1hY2hpbmUuKSBB cyBhbiBhbHRlcm5hdGl2ZSB3ZSBjYW4gdXNlIHRoZQpwZXJmIGV2ZW50IGNvdW50ZXIgaW50ZXJm YWNlIHRvIHNhbXBsZSB0aGUgcmluZyByZWdpc3RlcnMgcGVyaW9kaWNhbGx5CmFuZCBzZW5kIHRo b3NlIHJlc3VsdHMgdG8gdXNlcnNwYWNlLgoKRnVuY3Rpb25hbGl0eSB3ZSBhcmUgZXhwb3J0aW5n IHRvIHVzZXJzcGFjZSBpcyB2aWEgdGhlIGV4aXN0aW5nIHBlcmYgUE1VCkFQSSBhbmQgY2FuIGJl IGV4ZXJjaXNlZCB2aWEgdGhlIGV4aXN0aW5nIHRvb2xzLiBGb3IgZXhhbXBsZToKCiAgcGVyZiBz dGF0IC1hIC1lIGk5MTUvcmNzMC1idXN5LyAtSSAxMDAwCgpXaWxsIHByaW50IHRoZSByZW5kZXIg ZW5naW5lIGJ1c3lubmVzIG9uY2UgcGVyIHNlY29uZC4gQWxsIHRoZSBwZXJmb3JtYW5jZQpjb3Vu dGVycyBjYW4gYmUgZW51bWVyYXRlZCAocGVyZiBsaXN0KSBhbmQgaGF2ZSB0aGVpciB1bml0IG9m IG1lYXN1cmUKY29ycmVjdGx5IHJlcG9ydGVkIGluIHN5c2ZzLgoKdjEtdjIgKENocmlzIFdpbHNv bik6Cgp2MjogVXNlIGEgY29tbW9uIHRpbWVyIGZvciB0aGUgcmluZyBzYW1wbGluZy4KCnYzOiAo VHZydGtvIFVyc3VsaW4pCiAqIERlY291cGxlIHVBUEkgZnJvbSBpOTE1IGVuZ2luZSBpZHMuCiAq IENvbXBsZXRlIHVBUEkgZGVmaW5lcy4KICogUmVmYWN0b3Igc29tZSBjb2RlIHRvIGhlbHBlcnMg Zm9yIGNsYXJpdHkuCiAqIFNraXAgc2FtcGxpbmcgZGlzYWJsZWQgZW5naW5lcy4KICogRXhwb3Nl IGNvdW50ZXJzIGluIHN5c2ZzLgogKiBQYXNzIGluIGZha2UgcmVncyB0byBhdm9pZCBudWxsIHB0 ciBkZXJlZiBpbiBwZXJmIGNvcmUuCiAqIENvbnZlcnQgdG8gY2xhc3MvaW5zdGFuY2UgdUFQSS4K ICogVXNlIHNoYXJlZCBkcml2ZXIgY29kZSBmb3IgcmM2IHJlc2lkZW5jeSwgcG93ZXIgYW5kIGZy ZXF1ZW5jeS4KCnY0OiAoRG1pdHJ5IFJvZ296aGtpbikKICogUmVnaXN0ZXIgUE1VIHdpdGggLnRh c2tfY3R4X25yPXBlcmZfaW52YWxpZF9jb250ZXh0CiAqIEV4cG9zZSBjcHVtYXNrIGZvciB0aGUg UE1VIHdpdGggdGhlIHNpbmdsZSBDUFUgaW4gdGhlIG1hc2sKICogUHJvcGVybHkgc3VwcG9ydCBw bXUtPnN0b3AoKTogaXQgc2hvdWxkIGNhbGwgcG11LT5yZWFkKCkKICogUHJvcGVybHkgc3VwcG9y dCBwbXUtPmRlbCgpOiBpdCBzaG91bGQgY2FsbCBzdG9wKGV2ZW50LCBQRVJGX0VGX1VQREFURSkK ICogSW50cm9kdWNlIHJlZmNvdW50aW5nIG9mIGV2ZW50IHN1YnNjcmlwdGlvbnMuCiAqIE1ha2Ug cG11LmJ1c3lfc3RhdHMgYSByZWZjb3VudGVyIHRvIGF2b2lkIGJ1c3kgc3RhdHMgZ29pbmcgYXdh eQogICB3aXRoIHNvbWUgZGVsZXRlZCBldmVudC4KICogRXhwb3NlIGNwdW1hc2sgZm9yIGk5MTUg UE1VIHRvIGF2b2lkIG11bHRpcGxlIGV2ZW50cyBjcmVhdGlvbiBvZgogICB0aGUgc2FtZSB0eXBl IGZvbGxvd2VkIGJ5IGNvdW50ZXIgYWdncmVnYXRpb24gYnkgcGVyZi1zdGF0LgogKiBUcmFjayBD UFVzIGdldHRpbmcgb25saW5lL29mZmxpbmUgdG8gbWlncmF0ZSBwZXJmIGNvbnRleHQuIElmIChs aWtlbHkpCiAgIGNwdW1hc2sgd2lsbCBpbml0aWFsbHkgc2V0IENQVTAsIENPTkZJR19CT09UUEFS QU1fSE9UUExVR19DUFUwIHdpbGwgYmUKICAgbmVlZGVkIHRvIHNlZSBlZmZlY3Qgb2YgQ1BVIHN0 YXR1cyB0cmFja2luZy4KICogRW5kIHJlc3VsdCBpcyB0aGF0IG9ubHkgZ2xvYmFsIGV2ZW50cyBh cmUgc3VwcG9ydGVkIGFuZCBwZXJmIHN0YXQKICAgd29ya3MgY29ycmVjdGx5LgogKiBEZW55IHBl cmYgZHJpdmVyIGxldmVsIHNhbXBsaW5nIC0gaXQgaXMgcHJvaGliaXRlZCBmb3IgdW5jb3JlIFBN VS4KCnY1OiAoVHZydGtvIFVyc3VsaW4pCgogKiBEb24ndCBoYXJkY29kZSBudW1iZXIgb2YgZW5n aW5lIHNhbXBsZXJzLgogKiBSZXdyaXRlIGV2ZW50IHJlZi1jb3VudGluZyBmb3IgY29ycmVjdG5l c3MgYW5kIHNpbXBsaWNpdHkuCiAqIFN0b3JlIGluaXRpYWwgY291bnRlciB2YWx1ZSB3aGVuIHN0 YXJ0aW5nIGFscmVhZHkgZW5hYmxlZCBldmVudHMKICAgdG8gY29ycmVjdGx5IHJlcG9ydCB2YWx1 ZXMgdG8gYWxsIGxpc3RlbmVycy4KICogRml4IFJDNiByZXNpZGVuY3kgcmVhZG91dC4KICogQ29t bWVudHMsIEdQTCBoZWFkZXIuCgp2NjoKICogQWRkIG1pc3NpbmcgZW50cnkgdG8gdjQgY2hhbmdl bG9nLgogKiBGaXggYWNjb3VudGluZyBpbiBDUFUgaG90cGx1ZyBjYXNlIGJ5IGNvcHlpbmcgdGhl IGFwcHJvYWNoIGZyb20KICAgYXJjaC94ODYvZXZlbnRzL2ludGVsL2NzdGF0ZS5jLiAoRG1pdHJ5 IFJvZ296aGtpbikKCnY3OgogKiBMb2cgZmFpbHVyZSBtZXNzYWdlIG9ubHkgb24gZmFpbHVyZS4K ICogUmVtb3ZlIENQVSBob3RwbHVnIG5vdGlmaWNhdGlvbiBzdGF0ZSBvbiB1bnJlZ2lzdGVyLgoK djg6CiAqIEZpeCBlcnJvciB1bndpbmQgb24gZmFpbGVkIHJlZ2lzdHJhdGlvbi4KICogQ2hlY2tw YXRjaCBjbGVhbnVwLgoKdjk6CiAqIERyb3AgdGhlIGVuZXJneSBtZXRyaWMsIGl0IGlzIGF2YWls YWJsZSB2aWEgaW50ZWxfcmFwbF9wZXJmLgogICAoVmlsbGUgU3lyasOkbMOkKQogKiBVc2UgSEFT X1JDNihwKS4gKENocmlzIFdpbHNvbikKICogSGFuZGxlIHVuc3VwcG9ydGVkIG5vbi1lbmdpbmUg ZXZlbnRzLiAoRG1pdHJ5IFJvZ296aGtpbikKICogUmViYXNlIGZvciBpbnRlbF9yYzZfcmVzaWRl bmN5X25zIG5lZWRpbmcgY2FsbGVyIG1hbmFnZWQKICAgcnVudGltZSBwbS4KICogRHJvcCBIQVNf UkM2IGNoZWNrcyBmcm9tIHRoZSByZWFkIGNhbGxiYWNrIHNpbmNlIGNyZWF0aW5nIHRob3NlCiAg IGV2ZW50cyB3aWxsIGJlIHJlamVjdGVkIGF0IGluaXQgdGltZSBhbHJlYWR5LgogKiBBZGQgY291 bnRlciB1bml0cyB0byBzeXNmcyBzbyBwZXJmIHN0YXQgb3V0cHV0IGlzIG5pY2VyLgogKiBDbGVh bnVwIHRoZSBhdHRyaWJ1dGUgdGFibGVzIGZvciBicmV2aXR5IGFuZCByZWFkYWJpbGl0eS4KCnYx MDoKICogRml4ZWQgcXVldWVkIGFjY291bnRpbmcuCgp2MTE6CiAqIE1vdmUgaW50ZWxfZW5naW5l X2xvb2t1cF91c2VyIHRvIGludGVsX2VuZ2luZV9jcy5jCiAqIENvbW1pdCB1cGRhdGUuIChKb29u YXMgTGFodGluZW4pCgp2MTI6CiAqIE1vcmUgYWNjdXJhdGUgc2FtcGxpbmcuIChDaHJpcyBXaWxz b24pCiAqIFN0b3JlIGFuZCByZXBvcnQgZnJlcXVlbmN5IGluIE1IeiBmb3IgYmV0dGVyIHVzYWJp bGl0eSBmcm9tCiAgIHBlcmYgc3RhdC4KICogUmVtb3ZlZCBtZXRyaWNzOiBxdWV1ZWQsIGludGVy cnVwdHMsIHJjNiBjb3VudGVycy4KICogU2FtcGxlIGVuZ2luZSBidXN5bmVzcyBiYXNlZCBvbiBz ZXFubyBkaWZmZXJlbmNlIG9ubHkKICAgZm9yIGxlc3MgTU1JTyAoYW5kIGZvcmNld2FrZSkgb24g YWxsIHBsYXRmb3Jtcy4gKENocmlzIFdpbHNvbikKCnYxMzoKICogQ29tbWVudCBzcGVsbGluZywg dXNlIG11bF91MzJfdTMyIHRvIHdvcmsgYXJvdW5kIHBvdGVudGlhbCBHQ0MKICAgaXNzdWUgYW5k IHNvbW5lIGNvZGUgYWxpZ25tZW50IGNoYW5nZXMuIChDaHJpcyBXaWxzb24pCgp2MTQ6CiAqIFJl YmFzZS4KCnYxNToKICogUmViYXNlIGZvciBSUFMgcmVmYWN0b3JpbmcuCgp2MTY6CiAqIFVzZSB0 aGUgZHluYW1pYyBzbG90IGluIHRoZSBDUFUgaG90cGx1ZyBzdGF0ZSBtYWNoaW5lIHNvIHRoYXQg d2UgYXJlCiAgIGZyZWUgdG8gc2V0dXAgb3VyIHN0YXRlIGFzIG11bHRpLWluc3RhbmNlLiBQcmV2 aW91c2x5IHdlIHdlcmUgcmUtdXNpbmcKICAgdGhlIENQVUhQX0FQX1BFUkZfWDg2X1VOQ09SRV9P TkxJTkUgc2xvdCB3aGljaCBpcyBuZWl0aGVyIHVzZWQgYXMKICAgbXVsdGktaW5zdGFuY2UsIG5v ciBvd25lZCBieSBvdXIgZHJpdmVyIHRvIHN0YXJ0IHdpdGguCiAqIFJlZ2lzdGVyIHRoZSBDUFUg aG90cGx1ZyBoYW5kbGVycyBhZnRlciB0aGUgUE1VLCBvdGhlcndpc2UgdGhlIGNhbGxiYWNrCiAg IHdpbGwgZ2V0IGNhbGxlZCBiZWZvcmUgdGhlIFBNVSBpcyBpbml0aWFsaXplZCB3aGljaCBjYW4g ZW5kIHVwIGluCiAgIHBlcmZfcG11X21pZ3JhdGVfY29udGV4dCB3aXRoIGFuIHVuLWluaXRpYWxp emVkIGJhc2UuCiAqIEFkZGVkIHdvcmthcm91bmQgZm9yIGEgcHJvYmFibGUgYnVnIGluIGNwdWhw IGNvcmUuCgp2MTc6CiAqIFJlbW92ZSB3b3JrYXJvdW5kIGZvciB0aGUgY3B1aHAgYnVnLgoKdjE4 OgogKiBSZWJhc2UgZm9yIGRybV9pOTE1X2dlbV9lbmdpbmVfY2xhc3MgZ2V0dGluZyB1cHN0cmVh bSBiZWZvcmUgdXMuCgp2MTk6CiAqIFJlYmFzZS4gKHRyaXZpYWwpCgpTaWduZWQtb2ZmLWJ5OiBD aHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KU2lnbmVkLW9mZi1ieTogVHZy dGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogRG1p dHJ5IFJvZ296aGtpbiA8ZG1pdHJ5LnYucm9nb3poa2luQGludGVsLmNvbT4KQ2M6IFR2cnRrbyBV cnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+CkNjOiBDaHJpcyBXaWxzb24gPGNocmlz QGNocmlzLXdpbHNvbi5jby51az4KQ2M6IERtaXRyeSBSb2dvemhraW4gPGRtaXRyeS52LnJvZ296 aGtpbkBpbnRlbC5jb20+CkNjOiBQZXRlciBaaWpsc3RyYSA8cGV0ZXJ6QGluZnJhZGVhZC5vcmc+ ClJldmlld2VkLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KLS0t CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgfCAgIDEgKwogZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgICAgIHwgICAzICsKIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICB8ICAgNSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3BtdS5jICAgICAgICAgfCA2ODggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmggICAgICAgICB8IDEwNCArKysrKwogZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCAgICAgICAgIHwgICAzICsKIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jICB8ICAzMyArKwogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcmluZ2J1ZmZlci5oIHwgIDI2ICsrCiBpbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJt LmggICAgICAgICAgICAgfCAgMzkgKysKIDkgZmlsZXMgY2hhbmdlZCwgOTAyIGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuaAoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUKaW5kZXggNDliOTUzNWU0MGQxLi4wOTFhZWYyODE5NjMgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlCkBAIC00Niw2ICs0Niw3IEBAIGk5MTUteSA6PSBpOTE1X2Rydi5vIFwKIAogaTkx NS0kKENPTkZJR19DT01QQVQpICAgKz0gaTkxNV9pb2MzMi5vCiBpOTE1LSQoQ09ORklHX0RFQlVH X0ZTKSArPSBpOTE1X2RlYnVnZnMubyBpbnRlbF9waXBlX2NyYy5vCitpOTE1LSQoQ09ORklHX1BF UkZfRVZFTlRTKSArPSBpOTE1X3BtdS5vCiAKICMgR0VNIGNvZGUKIGk5MTUteSArPSBpOTE1X2Nt ZF9wYXJzZXIubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCA4ZGJjYjAzYjVmNTQuLjA3 OTNhMjdlMmI5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBAIC00OCw2ICs0OCw3IEBACiAK ICNpbmNsdWRlICJpOTE1X2Rydi5oIgogI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKKyNpbmNsdWRl ICJpOTE1X3BtdS5oIgogI2luY2x1ZGUgImk5MTVfdmdwdS5oIgogI2luY2x1ZGUgImludGVsX2Ry di5oIgogI2luY2x1ZGUgImludGVsX3VjLmgiCkBAIC0xMjE1LDYgKzEyMTYsNyBAQCBzdGF0aWMg dm9pZCBpOTE1X2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOwogCiAJaTkxNV9n ZW1fc2hyaW5rZXJfaW5pdChkZXZfcHJpdik7CisJaTkxNV9wbXVfcmVnaXN0ZXIoZGV2X3ByaXYp OwogCiAJLyoKIAkgKiBOb3RpZnkgYSB2YWxpZCBzdXJmYWNlIGFmdGVyIG1vZGVzZXR0aW5nLApA QCAtMTI2OSw2ICsxMjcxLDcgQEAgc3RhdGljIHZvaWQgaTkxNV9kcml2ZXJfdW5yZWdpc3Rlcihz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJaW50ZWxfb3ByZWdpb25fdW5yZWdp c3RlcihkZXZfcHJpdik7CiAKIAlpOTE1X3BlcmZfdW5yZWdpc3RlcihkZXZfcHJpdik7CisJaTkx NV9wbXVfdW5yZWdpc3RlcihkZXZfcHJpdik7CiAKIAlpOTE1X3RlYXJkb3duX3N5c2ZzKGRldl9w cml2KTsKIAlpOTE1X2d1Y19sb2dfdW5yZWdpc3RlcihkZXZfcHJpdik7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaAppbmRleCA3NDZlNGNjMjJhNjEuLjExOTM2YzY4ZTJkYiAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvaGFzaC5oPgogI2lu Y2x1ZGUgPGxpbnV4L2ludGVsLWlvbW11Lmg+CiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2lu Y2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KICNpbmNsdWRlIDxsaW51eC9wbV9xb3MuaD4KICNp bmNsdWRlIDxsaW51eC9yZXNlcnZhdGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3NobWVtX2ZzLmg+ CkBAIC0yMjkwLDYgKzIyOTEsOCBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJc3RydWN0 IGk5MTVfZ2VtX2NvbnRleHQgKmtlcm5lbF9jb250ZXh0OwogCS8qIENvbnRleHQgb25seSB0byBi ZSB1c2VkIGZvciBpbmplY3RpbmcgcHJlZW1wdGlvbiBjb21tYW5kcyAqLwogCXN0cnVjdCBpOTE1 X2dlbV9jb250ZXh0ICpwcmVlbXB0X2NvbnRleHQ7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lX2NsYXNzW01BWF9FTkdJTkVfQ0xBU1MgKyAxXQorCQkJCQkgICAgW01BWF9FTkdJTkVf SU5TVEFOQ0UgKyAxXTsKIAogCXN0cnVjdCBkcm1fZG1hX2hhbmRsZSAqc3RhdHVzX3BhZ2VfZG1h aDsKIAlzdHJ1Y3QgcmVzb3VyY2UgbWNoX3JlczsKQEAgLTI3NjEsNiArMjc2NCw4IEBAIHN0cnVj dCBkcm1faTkxNV9wcml2YXRlIHsKIAkJaW50CWlycTsKIAl9IGxwZV9hdWRpbzsKIAorCXN0cnVj dCBpOTE1X3BtdSBwbXU7CisKIAkvKgogCSAqIE5PVEU6IFRoaXMgaXMgdGhlIGRyaTEvdW1zIGR1 bmdlb24sIGRvbid0IGFkZCBzdHVmZiBoZXJlLiBZb3VyIHBhdGNoCiAJICogd2lsbCBiZSByZWpl Y3RlZC4gSW5zdGVhZCBsb29rIGZvciBhIGJldHRlciBwbGFjZS4KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Bt dS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMDFiNWVlNjdjMWJm Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYwpAQCAt MCwwICsxLDY4OCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9u CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdh cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBT b2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO RworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLwor CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRp bWUuaD4KKworI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaTkxNV9wbXUuaCIKKyNp bmNsdWRlICJpbnRlbF9yaW5nYnVmZmVyLmgiCisKKy8qIEZyZXF1ZW5jeSBmb3IgdGhlIHNhbXBs aW5nIHRpbWVyIGZvciBldmVudHMgd2hpY2ggbmVlZCBpdC4gKi8KKyNkZWZpbmUgRlJFUVVFTkNZ IDIwMAorI2RlZmluZSBQRVJJT0QgbWF4X3QodTY0LCAxMDAwMCwgTlNFQ19QRVJfU0VDIC8gRlJF UVVFTkNZKQorCisjZGVmaW5lIEVOR0lORV9TQU1QTEVfTUFTSyBcCisJKEJJVChJOTE1X1NBTVBM RV9CVVNZKSB8IFwKKwkgQklUKEk5MTVfU0FNUExFX1dBSVQpIHwgXAorCSBCSVQoSTkxNV9TQU1Q TEVfU0VNQSkpCisKKyNkZWZpbmUgRU5HSU5FX1NBTVBMRV9CSVRTICgxIDw8IEk5MTVfUE1VX1NB TVBMRV9CSVRTKQorCitzdGF0aWMgY3B1bWFza190IGk5MTVfcG11X2NwdW1hc2sgPSBDUFVfTUFT S19OT05FOworCitzdGF0aWMgdTggZW5naW5lX2NvbmZpZ19zYW1wbGUodTY0IGNvbmZpZykKK3sK KwlyZXR1cm4gY29uZmlnICYgSTkxNV9QTVVfU0FNUExFX01BU0s7Cit9CisKK3N0YXRpYyB1OCBl bmdpbmVfZXZlbnRfc2FtcGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4g ZW5naW5lX2NvbmZpZ19zYW1wbGUoZXZlbnQtPmF0dHIuY29uZmlnKTsKK30KKworc3RhdGljIHU4 IGVuZ2luZV9ldmVudF9jbGFzcyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJcmV0dXJu IChldmVudC0+YXR0ci5jb25maWcgPj4gSTkxNV9QTVVfQ0xBU1NfU0hJRlQpICYgMHhmZjsKK30K Kworc3RhdGljIHU4IGVuZ2luZV9ldmVudF9pbnN0YW5jZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZl bnQpCit7CisJcmV0dXJuIChldmVudC0+YXR0ci5jb25maWcgPj4gSTkxNV9QTVVfU0FNUExFX0JJ VFMpICYgMHhmZjsKK30KKworc3RhdGljIGJvb2wgaXNfZW5naW5lX2NvbmZpZyh1NjQgY29uZmln KQoreworCXJldHVybiBjb25maWcgPCBfX0k5MTVfUE1VX09USEVSKDApOworfQorCitzdGF0aWMg dW5zaWduZWQgaW50IGNvbmZpZ19lbmFibGVkX2JpdCh1NjQgY29uZmlnKQoreworCWlmIChpc19l bmdpbmVfY29uZmlnKGNvbmZpZykpCisJCXJldHVybiBlbmdpbmVfY29uZmlnX3NhbXBsZShjb25m aWcpOworCWVsc2UKKwkJcmV0dXJuIEVOR0lORV9TQU1QTEVfQklUUyArIChjb25maWcgLSBfX0k5 MTVfUE1VX09USEVSKDApKTsKK30KKworc3RhdGljIHU2NCBjb25maWdfZW5hYmxlZF9tYXNrKHU2 NCBjb25maWcpCit7CisJcmV0dXJuIEJJVF9VTEwoY29uZmlnX2VuYWJsZWRfYml0KGNvbmZpZykp OworfQorCitzdGF0aWMgYm9vbCBpc19lbmdpbmVfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2 ZW50KQoreworCXJldHVybiBpc19lbmdpbmVfY29uZmlnKGV2ZW50LT5hdHRyLmNvbmZpZyk7Cit9 CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZXZlbnRfZW5hYmxlZF9iaXQoc3RydWN0IHBlcmZfZXZl bnQgKmV2ZW50KQoreworCXJldHVybiBjb25maWdfZW5hYmxlZF9iaXQoZXZlbnQtPmF0dHIuY29u ZmlnKTsKK30KKworc3RhdGljIGJvb2wgZ3JhYl9mb3JjZXdha2Uoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUsIGJvb2wgZncpCit7CisJaWYgKCFmdykKKwkJaW50ZWxfdW5jb3JlX2ZvcmNl d2FrZV9nZXQoaTkxNSwgRk9SQ0VXQUtFX0FMTCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3Rh dGljIHZvaWQKK3VwZGF0ZV9zYW1wbGUoc3RydWN0IGk5MTVfcG11X3NhbXBsZSAqc2FtcGxlLCB1 MzIgdW5pdCwgdTMyIHZhbCkKK3sKKwkvKgorCSAqIFNpbmNlIHdlIGFyZSBkb2luZyBzdG9jaGFz dGljIHNhbXBsaW5nIGZvciB0aGVzZSBjb3VudGVycywKKwkgKiBhdmVyYWdlIHRoZSBkZWx0YSB3 aXRoIHRoZSBwcmV2aW91cyB2YWx1ZSBmb3IgYmV0dGVyIGFjY3VyYWN5LgorCSAqLworCXNhbXBs ZS0+Y3VyICs9IGRpdl91NjQobXVsX3UzMl91MzIoc2FtcGxlLT5wcmV2ICsgdmFsLCB1bml0KSwg Mik7CisJc2FtcGxlLT5wcmV2ID0gdmFsOworfQorCitzdGF0aWMgdm9pZCBlbmdpbmVzX3NhbXBs ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lOworCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOworCWJvb2wgZncgPSBm YWxzZTsKKworCWlmICgoZGV2X3ByaXYtPnBtdS5lbmFibGUgJiBFTkdJTkVfU0FNUExFX01BU0sp ID09IDApCisJCXJldHVybjsKKworCWlmICghZGV2X3ByaXYtPmd0LmF3YWtlKQorCQlyZXR1cm47 CisKKwlpZiAoIWludGVsX3J1bnRpbWVfcG1fZ2V0X2lmX2luX3VzZShkZXZfcHJpdikpCisJCXJl dHVybjsKKworCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpZCkgeworCQl1MzIg Y3VycmVudF9zZXFubyA9IGludGVsX2VuZ2luZV9nZXRfc2Vxbm8oZW5naW5lKTsKKwkJdTMyIGxh c3Rfc2Vxbm8gPSBpbnRlbF9lbmdpbmVfbGFzdF9zdWJtaXQoZW5naW5lKTsKKwkJdTMyIHZhbDsK KworCQl2YWwgPSAhaTkxNV9zZXFub19wYXNzZWQoY3VycmVudF9zZXFubywgbGFzdF9zZXFubyk7 CisKKwkJdXBkYXRlX3NhbXBsZSgmZW5naW5lLT5wbXUuc2FtcGxlW0k5MTVfU0FNUExFX0JVU1ld LAorCQkJICAgICAgUEVSSU9ELCB2YWwpOworCisJCWlmICh2YWwgJiYgKGVuZ2luZS0+cG11LmVu YWJsZSAmCisJCSAgICAoQklUKEk5MTVfU0FNUExFX1dBSVQpIHwgQklUKEk5MTVfU0FNUExFX1NF TUEpKSkpIHsKKwkJCWZ3ID0gZ3JhYl9mb3JjZXdha2UoZGV2X3ByaXYsIGZ3KTsKKworCQkJdmFs ID0gSTkxNV9SRUFEX0ZXKFJJTkdfQ1RMKGVuZ2luZS0+bW1pb19iYXNlKSk7CisJCX0gZWxzZSB7 CisJCQl2YWwgPSAwOworCQl9CisKKwkJdXBkYXRlX3NhbXBsZSgmZW5naW5lLT5wbXUuc2FtcGxl W0k5MTVfU0FNUExFX1dBSVRdLAorCQkJICAgICAgUEVSSU9ELCAhISh2YWwgJiBSSU5HX1dBSVQp KTsKKworCQl1cGRhdGVfc2FtcGxlKCZlbmdpbmUtPnBtdS5zYW1wbGVbSTkxNV9TQU1QTEVfU0VN QV0sCisJCQkgICAgICBQRVJJT0QsICEhKHZhbCAmIFJJTkdfV0FJVF9TRU1BUEhPUkUpKTsKKwl9 CisKKwlpZiAoZncpCisJCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGRldl9wcml2LCBGT1JD RVdBS0VfQUxMKTsKKworCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKK30KKworc3Rh dGljIHZvaWQgZnJlcXVlbmN5X3NhbXBsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCit7CisJaWYgKGRldl9wcml2LT5wbXUuZW5hYmxlICYKKwkgICAgY29uZmlnX2VuYWJsZWRf bWFzayhJOTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZKSkgeworCQl1MzIgdmFsOworCisJCXZhbCA9 IGRldl9wcml2LT5ndF9wbS5ycHMuY3VyX2ZyZXE7CisJCWlmIChkZXZfcHJpdi0+Z3QuYXdha2Ug JiYKKwkJICAgIGludGVsX3J1bnRpbWVfcG1fZ2V0X2lmX2luX3VzZShkZXZfcHJpdikpIHsKKwkJ CXZhbCA9IGludGVsX2dldF9jYWdmKGRldl9wcml2LAorCQkJCQkgICAgIEk5MTVfUkVBRF9OT1RS QUNFKEdFTjZfUlBTVEFUMSkpOworCQkJaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOwor CQl9CisKKwkJdXBkYXRlX3NhbXBsZSgmZGV2X3ByaXYtPnBtdS5zYW1wbGVbX19JOTE1X1NBTVBM RV9GUkVRX0FDVF0sCisJCQkgICAgICAxLCBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgdmFsKSk7 CisJfQorCisJaWYgKGRldl9wcml2LT5wbXUuZW5hYmxlICYKKwkgICAgY29uZmlnX2VuYWJsZWRf bWFzayhJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZKSkgeworCQl1cGRhdGVfc2FtcGxlKCZk ZXZfcHJpdi0+cG11LnNhbXBsZVtfX0k5MTVfU0FNUExFX0ZSRVFfUkVRXSwgMSwKKwkJCSAgICAg IGludGVsX2dwdV9mcmVxKGRldl9wcml2LAorCQkJCQkgICAgIGRldl9wcml2LT5ndF9wbS5ycHMu Y3VyX2ZyZXEpKTsKKwl9Cit9CisKK3N0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpOTE1X3Nh bXBsZShzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZihocnRpbWVyLCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSwgcG11LnRpbWVyKTsKKworCWlmIChpOTE1LT5wbXUuZW5hYmxlID09IDApCisJCXJldHVybiBI UlRJTUVSX05PUkVTVEFSVDsKKworCWVuZ2luZXNfc2FtcGxlKGk5MTUpOworCWZyZXF1ZW5jeV9z YW1wbGUoaTkxNSk7CisKKwlocnRpbWVyX2ZvcndhcmRfbm93KGhydGltZXIsIG5zX3RvX2t0aW1l KFBFUklPRCkpOworCXJldHVybiBIUlRJTUVSX1JFU1RBUlQ7Cit9CisKK3N0YXRpYyB2b2lkIGk5 MTVfcG11X2V2ZW50X2Rlc3Ryb3koc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCVdBUk5f T04oZXZlbnQtPnBhcmVudCk7Cit9CisKK3N0YXRpYyBpbnQgZW5naW5lX2V2ZW50X2luaXQoc3Ry dWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 ID0KKwkJY29udGFpbmVyX29mKGV2ZW50LT5wbXUsIHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsK KworCWlmICghaW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKGk5MTUsIGVuZ2luZV9ldmVudF9jbGFz cyhldmVudCksCisJCQkJICAgICAgZW5naW5lX2V2ZW50X2luc3RhbmNlKGV2ZW50KSkpCisJCXJl dHVybiAtRU5PREVWOworCisJc3dpdGNoIChlbmdpbmVfZXZlbnRfc2FtcGxlKGV2ZW50KSkgewor CWNhc2UgSTkxNV9TQU1QTEVfQlVTWToKKwljYXNlIEk5MTVfU0FNUExFX1dBSVQ6CisJCWJyZWFr OworCWNhc2UgSTkxNV9TQU1QTEVfU0VNQToKKwkJaWYgKElOVEVMX0dFTihpOTE1KSA8IDYpCisJ CQlyZXR1cm4gLUVOT0RFVjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9FTlQ7 CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9wbXVfZXZlbnRfaW5pdChz dHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUgPQorCQljb250YWluZXJfb2YoZXZlbnQtPnBtdSwgdHlwZW9mKCppOTE1KSwgcG11LmJhc2Up OworCWludCBjcHUsIHJldDsKKworCWlmIChldmVudC0+YXR0ci50eXBlICE9IGV2ZW50LT5wbXUt PnR5cGUpCisJCXJldHVybiAtRU5PRU5UOworCisJLyogdW5zdXBwb3J0ZWQgbW9kZXMgYW5kIGZp bHRlcnMgKi8KKwlpZiAoZXZlbnQtPmF0dHIuc2FtcGxlX3BlcmlvZCkgLyogbm8gc2FtcGxpbmcg Ki8KKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaGFzX2JyYW5jaF9zdGFjayhldmVudCkpCisJ CXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChldmVudC0+Y3B1IDwgMCkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwljcHUgPSBjcHVtYXNrX2FueV9hbmQoJmk5MTVfcG11X2NwdW1hc2ssCisJCQkg ICAgICB0b3BvbG9neV9zaWJsaW5nX2NwdW1hc2soZXZlbnQtPmNwdSkpOworCWlmIChjcHUgPj0g bnJfY3B1X2lkcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoaXNfZW5naW5lX2V2ZW50KGV2 ZW50KSkgeworCQlyZXQgPSBlbmdpbmVfZXZlbnRfaW5pdChldmVudCk7CisJfSBlbHNlIHsKKwkJ cmV0ID0gMDsKKwkJc3dpdGNoIChldmVudC0+YXR0ci5jb25maWcpIHsKKwkJY2FzZSBJOTE1X1BN VV9BQ1RVQUxfRlJFUVVFTkNZOgorCQkJaWYgKElTX1ZBTExFWVZJRVcoaTkxNSkgfHwgSVNfQ0hF UlJZVklFVyhpOTE1KSkKKwkJCQkgLyogUmVxdWlyZXMgYSBtdXRleCBmb3Igc2FtcGxpbmchICov CisJCQkJcmV0ID0gLUVOT0RFVjsKKwkJY2FzZSBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZ OgorCQkJaWYgKElOVEVMX0dFTihpOTE1KSA8IDYpCisJCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWJy ZWFrOworCQlkZWZhdWx0OgorCQkJcmV0ID0gLUVOT0VOVDsKKwkJCWJyZWFrOworCQl9CisJfQor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlldmVudC0+Y3B1ID0gY3B1OworCWlmICghZXZl bnQtPnBhcmVudCkKKwkJZXZlbnQtPmRlc3Ryb3kgPSBpOTE1X3BtdV9ldmVudF9kZXN0cm95Owor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1NjQgX19pOTE1X3BtdV9ldmVudF9yZWFkKHN0cnVj dCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9 CisJCWNvbnRhaW5lcl9vZihldmVudC0+cG11LCB0eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7CisJ dTY0IHZhbCA9IDA7CisKKwlpZiAoaXNfZW5naW5lX2V2ZW50KGV2ZW50KSkgeworCQl1OCBzYW1w bGUgPSBlbmdpbmVfZXZlbnRfc2FtcGxlKGV2ZW50KTsKKwkJc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lOworCisJCWVuZ2luZSA9IGludGVsX2VuZ2luZV9sb29rdXBfdXNlcihpOTE1LAor CQkJCQkJICBlbmdpbmVfZXZlbnRfY2xhc3MoZXZlbnQpLAorCQkJCQkJICBlbmdpbmVfZXZlbnRf aW5zdGFuY2UoZXZlbnQpKTsKKworCQlpZiAoV0FSTl9PTl9PTkNFKCFlbmdpbmUpKSB7CisJCQkv KiBEbyBub3RoaW5nICovCisJCX0gZWxzZSB7CisJCQl2YWwgPSBlbmdpbmUtPnBtdS5zYW1wbGVb c2FtcGxlXS5jdXI7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKGV2ZW50LT5hdHRyLmNvbmZp ZykgeworCQljYXNlIEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVOQ1k6CisJCQl2YWwgPQorCQkJICAg ZGl2X3U2NChpOTE1LT5wbXUuc2FtcGxlW19fSTkxNV9TQU1QTEVfRlJFUV9BQ1RdLmN1ciwKKwkJ CQkgICBGUkVRVUVOQ1kpOworCQkJYnJlYWs7CisJCWNhc2UgSTkxNV9QTVVfUkVRVUVTVEVEX0ZS RVFVRU5DWToKKwkJCXZhbCA9CisJCQkgICBkaXZfdTY0KGk5MTUtPnBtdS5zYW1wbGVbX19JOTE1 X1NBTVBMRV9GUkVRX1JFUV0uY3VyLAorCQkJCSAgIEZSRVFVRU5DWSk7CisJCQlicmVhazsKKwkJ fQorCX0KKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcG11X2V2ZW50X3Jl YWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpo d2MgPSAmZXZlbnQtPmh3OworCXU2NCBwcmV2LCBuZXc7CisKK2FnYWluOgorCXByZXYgPSBsb2Nh bDY0X3JlYWQoJmh3Yy0+cHJldl9jb3VudCk7CisJbmV3ID0gX19pOTE1X3BtdV9ldmVudF9yZWFk KGV2ZW50KTsKKworCWlmIChsb2NhbDY0X2NtcHhjaGcoJmh3Yy0+cHJldl9jb3VudCwgcHJldiwg bmV3KSAhPSBwcmV2KQorCQlnb3RvIGFnYWluOworCisJbG9jYWw2NF9hZGQobmV3IC0gcHJldiwg JmV2ZW50LT5jb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcG11X2VuYWJsZShzdHJ1Y3Qg cGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQor CQljb250YWluZXJfb2YoZXZlbnQtPnBtdSwgdHlwZW9mKCppOTE1KSwgcG11LmJhc2UpOworCXVu c2lnbmVkIGludCBiaXQgPSBldmVudF9lbmFibGVkX2JpdChldmVudCk7CisJdW5zaWduZWQgbG9u ZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpOTE1LT5wbXUubG9jaywgZmxhZ3MpOwor CisJLyoKKwkgKiBTdGFydCB0aGUgc2FtcGxpbmcgdGltZXIgd2hlbiBlbmFibGluZyB0aGUgZmly c3QgZXZlbnQuCisJICovCisJaWYgKGk5MTUtPnBtdS5lbmFibGUgPT0gMCkKKwkJaHJ0aW1lcl9z dGFydF9yYW5nZV9ucygmaTkxNS0+cG11LnRpbWVyLAorCQkJCSAgICAgICBuc190b19rdGltZShQ RVJJT0QpLCAwLAorCQkJCSAgICAgICBIUlRJTUVSX01PREVfUkVMX1BJTk5FRCk7CisKKwkvKgor CSAqIFVwZGF0ZSB0aGUgYml0bWFzayBvZiBlbmFibGVkIGV2ZW50cyBhbmQgaW5jcmVtZW50CisJ ICogdGhlIGV2ZW50IHJlZmVyZW5jZSBjb3VudGVyLgorCSAqLworCUdFTV9CVUdfT04oYml0ID49 IEk5MTVfUE1VX01BU0tfQklUUyk7CisJR0VNX0JVR19PTihpOTE1LT5wbXUuZW5hYmxlX2NvdW50 W2JpdF0gPT0gfjApOworCWk5MTUtPnBtdS5lbmFibGUgfD0gQklUX1VMTChiaXQpOworCWk5MTUt PnBtdS5lbmFibGVfY291bnRbYml0XSsrOworCisJLyoKKwkgKiBGb3IgcGVyLWVuZ2luZSBldmVu dHMgdGhlIGJpdG1hc2sgYW5kIHJlZmVyZW5jZSBjb3VudGluZworCSAqIGlzIHN0b3JlZCBwZXIg ZW5naW5lLgorCSAqLworCWlmIChpc19lbmdpbmVfZXZlbnQoZXZlbnQpKSB7CisJCXU4IHNhbXBs ZSA9IGVuZ2luZV9ldmVudF9zYW1wbGUoZXZlbnQpOworCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmU7CisKKwkJZW5naW5lID0gaW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKGk5MTUsCisJ CQkJCQkgIGVuZ2luZV9ldmVudF9jbGFzcyhldmVudCksCisJCQkJCQkgIGVuZ2luZV9ldmVudF9p bnN0YW5jZShldmVudCkpOworCQlHRU1fQlVHX09OKCFlbmdpbmUpOworCQllbmdpbmUtPnBtdS5l bmFibGUgfD0gQklUKHNhbXBsZSk7CisKKwkJR0VNX0JVR19PTihzYW1wbGUgPj0gSTkxNV9QTVVf U0FNUExFX0JJVFMpOworCQlHRU1fQlVHX09OKGVuZ2luZS0+cG11LmVuYWJsZV9jb3VudFtzYW1w bGVdID09IH4wKTsKKwkJZW5naW5lLT5wbXUuZW5hYmxlX2NvdW50W3NhbXBsZV0rKzsKKwl9CisK KwkvKgorCSAqIFN0b3JlIHRoZSBjdXJyZW50IGNvdW50ZXIgdmFsdWUgc28gd2UgY2FuIHJlcG9y dCB0aGUgY29ycmVjdCBkZWx0YQorCSAqIGZvciBhbGwgbGlzdGVuZXJzLiBFdmVuIHdoZW4gdGhl IGV2ZW50IHdhcyBhbHJlYWR5IGVuYWJsZWQgYW5kIGhhcworCSAqIGFuIGV4aXN0aW5nIG5vbi16 ZXJvIHZhbHVlLgorCSAqLworCWxvY2FsNjRfc2V0KCZldmVudC0+aHcucHJldl9jb3VudCwgX19p OTE1X3BtdV9ldmVudF9yZWFkKGV2ZW50KSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZp OTE1LT5wbXUubG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV9kaXNhYmxl KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSA9CisJCWNvbnRhaW5lcl9vZihldmVudC0+cG11LCB0eXBlb2YoKmk5MTUpLCBwbXUuYmFz ZSk7CisJdW5zaWduZWQgaW50IGJpdCA9IGV2ZW50X2VuYWJsZWRfYml0KGV2ZW50KTsKKwl1bnNp Z25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmk5MTUtPnBtdS5sb2NrLCBm bGFncyk7CisKKwlpZiAoaXNfZW5naW5lX2V2ZW50KGV2ZW50KSkgeworCQl1OCBzYW1wbGUgPSBl bmdpbmVfZXZlbnRfc2FtcGxlKGV2ZW50KTsKKwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lOworCisJCWVuZ2luZSA9IGludGVsX2VuZ2luZV9sb29rdXBfdXNlcihpOTE1LAorCQkJCQkJ ICBlbmdpbmVfZXZlbnRfY2xhc3MoZXZlbnQpLAorCQkJCQkJICBlbmdpbmVfZXZlbnRfaW5zdGFu Y2UoZXZlbnQpKTsKKwkJR0VNX0JVR19PTighZW5naW5lKTsKKwkJR0VNX0JVR19PTihzYW1wbGUg Pj0gSTkxNV9QTVVfU0FNUExFX0JJVFMpOworCQlHRU1fQlVHX09OKGVuZ2luZS0+cG11LmVuYWJs ZV9jb3VudFtzYW1wbGVdID09IDApOworCQkvKgorCQkgKiBEZWNyZW1lbnQgdGhlIHJlZmVyZW5j ZSBjb3VudCBhbmQgY2xlYXIgdGhlIGVuYWJsZWQKKwkJICogYml0bWFzayB3aGVuIHRoZSBsYXN0 IGxpc3RlbmVyIG9uIGFuIGV2ZW50IGdvZXMgYXdheS4KKwkJICovCisJCWlmICgtLWVuZ2luZS0+ cG11LmVuYWJsZV9jb3VudFtzYW1wbGVdID09IDApCisJCQllbmdpbmUtPnBtdS5lbmFibGUgJj0g fkJJVChzYW1wbGUpOworCX0KKworCUdFTV9CVUdfT04oYml0ID49IEk5MTVfUE1VX01BU0tfQklU Uyk7CisJR0VNX0JVR19PTihpOTE1LT5wbXUuZW5hYmxlX2NvdW50W2JpdF0gPT0gMCk7CisJLyoK KwkgKiBEZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBhbmQgY2xlYXIgdGhlIGVuYWJsZWQK KwkgKiBiaXRtYXNrIHdoZW4gdGhlIGxhc3QgbGlzdGVuZXIgb24gYW4gZXZlbnQgZ29lcyBhd2F5 LgorCSAqLworCWlmICgtLWk5MTUtPnBtdS5lbmFibGVfY291bnRbYml0XSA9PSAwKQorCQlpOTE1 LT5wbXUuZW5hYmxlICY9IH5CSVRfVUxMKGJpdCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZpOTE1LT5wbXUubG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVu dF9zdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykKK3sKKwlpOTE1X3Bt dV9lbmFibGUoZXZlbnQpOworCWV2ZW50LT5ody5zdGF0ZSA9IDA7Cit9CisKK3N0YXRpYyB2b2lk IGk5MTVfcG11X2V2ZW50X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3Mp Cit7CisJaWYgKGZsYWdzICYgUEVSRl9FRl9VUERBVEUpCisJCWk5MTVfcG11X2V2ZW50X3JlYWQo ZXZlbnQpOworCWk5MTVfcG11X2Rpc2FibGUoZXZlbnQpOworCWV2ZW50LT5ody5zdGF0ZSA9IFBF UkZfSEVTX1NUT1BQRUQ7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9wbXVfZXZlbnRfYWRkKHN0cnVj dCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQoreworCWlmIChmbGFncyAmIFBFUkZfRUZf U1RBUlQpCisJCWk5MTVfcG11X2V2ZW50X3N0YXJ0KGV2ZW50LCBmbGFncyk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHZvaWQgaTkxNV9wbXVfZXZlbnRfZGVsKHN0cnVjdCBwZXJmX2V2ZW50 ICpldmVudCwgaW50IGZsYWdzKQoreworCWk5MTVfcG11X2V2ZW50X3N0b3AoZXZlbnQsIFBFUkZf RUZfVVBEQVRFKTsKK30KKworc3RhdGljIGludCBpOTE1X3BtdV9ldmVudF9ldmVudF9pZHgoc3Ry dWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVf dCBpOTE1X3BtdV9mb3JtYXRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVj dCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGRldl9leHRf YXR0cmlidXRlICplYXR0cjsKKworCWVhdHRyID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBk ZXZfZXh0X2F0dHJpYnV0ZSwgYXR0cik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIChj aGFyICopZWF0dHItPnZhcik7Cit9CisKKyNkZWZpbmUgSTkxNV9QTVVfRk9STUFUX0FUVFIoX25h bWUsIF9jb25maWcpIFwKKwkoJigoc3RydWN0IGRldl9leHRfYXR0cmlidXRlW10pIHsgXAorCQl7 IC5hdHRyID0gX19BVFRSKF9uYW1lLCAwNDQ0LCBpOTE1X3BtdV9mb3JtYXRfc2hvdywgTlVMTCks IFwKKwkJICAudmFyID0gKHZvaWQgKilfY29uZmlnLCB9IFwKKwl9KVswXS5hdHRyLmF0dHIpCisK K3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppOTE1X3BtdV9mb3JtYXRfYXR0cnNbXSA9IHsKKwlJ OTE1X1BNVV9GT1JNQVRfQVRUUihpOTE1X2V2ZW50aWQsICJjb25maWc6MC0yMCIpLAorCU5VTEws Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpOTE1X3BtdV9mb3Jt YXRfYXR0cl9ncm91cCA9IHsKKwkubmFtZSA9ICJmb3JtYXQiLAorCS5hdHRycyA9IGk5MTVfcG11 X2Zvcm1hdF9hdHRycywKK307CisKK3N0YXRpYyBzc2l6ZV90IGk5MTVfcG11X2V2ZW50X3Nob3co c3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRy LCBjaGFyICpidWYpCit7CisJc3RydWN0IGRldl9leHRfYXR0cmlidXRlICplYXR0cjsKKworCWVh dHRyID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZSwgYXR0cik7 CisJcmV0dXJuIHNwcmludGYoYnVmLCAiY29uZmlnPTB4JWx4XG4iLCAodW5zaWduZWQgbG9uZyll YXR0ci0+dmFyKTsKK30KKworI2RlZmluZSBJOTE1X0VWRU5UX0FUVFIoX25hbWUsIF9jb25maWcp IFwKKwkoJigoc3RydWN0IGRldl9leHRfYXR0cmlidXRlW10pIHsgXAorCQl7IC5hdHRyID0gX19B VFRSKF9uYW1lLCAwNDQ0LCBpOTE1X3BtdV9ldmVudF9zaG93LCBOVUxMKSwgXAorCQkgIC52YXIg PSAodm9pZCAqKV9jb25maWcsIH0gXAorCX0pWzBdLmF0dHIuYXR0cikKKworI2RlZmluZSBJOTE1 X0VWRU5UX1NUUihfbmFtZSwgX3N0cikgXAorCSgmKChzdHJ1Y3QgcGVyZl9wbXVfZXZlbnRzX2F0 dHJbXSkgeyBcCisJCXsgLmF0dHIJICAgICA9IF9fQVRUUihfbmFtZSwgMDQ0NCwgcGVyZl9ldmVu dF9zeXNmc19zaG93LCBOVUxMKSwgXAorCQkgIC5pZAkgICAgID0gMCwgXAorCQkgIC5ldmVudF9z dHIgPSBfc3RyLCB9IFwKKwl9KVswXS5hdHRyLmF0dHIpCisKKyNkZWZpbmUgSTkxNV9FVkVOVChf bmFtZSwgX2NvbmZpZywgX3VuaXQpIFwKKwlJOTE1X0VWRU5UX0FUVFIoX25hbWUsIF9jb25maWcp LCBcCisJSTkxNV9FVkVOVF9TVFIoX25hbWUudW5pdCwgX3VuaXQpCisKKyNkZWZpbmUgSTkxNV9F TkdJTkVfRVZFTlQoX25hbWUsIF9jbGFzcywgX2luc3RhbmNlLCBfc2FtcGxlKSBcCisJSTkxNV9F VkVOVF9BVFRSKF9uYW1lLCBfX0k5MTVfUE1VX0VOR0lORShfY2xhc3MsIF9pbnN0YW5jZSwgX3Nh bXBsZSkpLCBcCisJSTkxNV9FVkVOVF9TVFIoX25hbWUudW5pdCwgIm5zIikKKworI2RlZmluZSBJ OTE1X0VOR0lORV9FVkVOVFMoX25hbWUsIF9jbGFzcywgX2luc3RhbmNlKSBcCisJSTkxNV9FTkdJ TkVfRVZFTlQoX25hbWUjI19pbnN0YW5jZS1idXN5LCBfY2xhc3MsIF9pbnN0YW5jZSwgSTkxNV9T QU1QTEVfQlVTWSksIFwKKwlJOTE1X0VOR0lORV9FVkVOVChfbmFtZSMjX2luc3RhbmNlLXNlbWEs IF9jbGFzcywgX2luc3RhbmNlLCBJOTE1X1NBTVBMRV9TRU1BKSwgXAorCUk5MTVfRU5HSU5FX0VW RU5UKF9uYW1lIyNfaW5zdGFuY2Utd2FpdCwgX2NsYXNzLCBfaW5zdGFuY2UsIEk5MTVfU0FNUExF X1dBSVQpCisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppOTE1X3BtdV9ldmVudHNfYXR0cnNb XSA9IHsKKwlJOTE1X0VOR0lORV9FVkVOVFMocmNzLCBJOTE1X0VOR0lORV9DTEFTU19SRU5ERVIs IDApLAorCUk5MTVfRU5HSU5FX0VWRU5UUyhiY3MsIEk5MTVfRU5HSU5FX0NMQVNTX0NPUFksIDAp LAorCUk5MTVfRU5HSU5FX0VWRU5UUyh2Y3MsIEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPLCAwKSwK KwlJOTE1X0VOR0lORV9FVkVOVFModmNzLCBJOTE1X0VOR0lORV9DTEFTU19WSURFTywgMSksCisJ STkxNV9FTkdJTkVfRVZFTlRTKHZlY3MsIEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0Us IDApLAorCisJSTkxNV9FVkVOVChhY3R1YWwtZnJlcXVlbmN5LCAgICBJOTE1X1BNVV9BQ1RVQUxf RlJFUVVFTkNZLCAgICAiTUh6IiksCisJSTkxNV9FVkVOVChyZXF1ZXN0ZWQtZnJlcXVlbmN5LCBJ OTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZLCAiTUh6IiksCisKKwlOVUxMLAorfTsKKworc3Rh dGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaTkxNV9wbXVfZXZlbnRzX2F0dHJfZ3Jv dXAgPSB7CisJLm5hbWUgPSAiZXZlbnRzIiwKKwkuYXR0cnMgPSBpOTE1X3BtdV9ldmVudHNfYXR0 cnMsCit9OworCitzdGF0aWMgc3NpemVfdAoraTkxNV9wbXVfZ2V0X2F0dHJfY3B1bWFzayhzdHJ1 Y3QgZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJ ICBjaGFyICpidWYpCit7CisJcmV0dXJuIGNwdW1hcF9wcmludF90b19wYWdlYnVmKHRydWUsIGJ1 ZiwgJmk5MTVfcG11X2NwdW1hc2spOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoY3B1bWFzaywg MDQ0NCwgaTkxNV9wbXVfZ2V0X2F0dHJfY3B1bWFzaywgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3Qg YXR0cmlidXRlICppOTE1X2NwdW1hc2tfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfY3B1bWFzay5h dHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpOTE1X3Bt dV9jcHVtYXNrX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gaTkxNV9jcHVtYXNrX2F0dHJzLAor fTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmk5MTVfcG11X2F0dHJf Z3JvdXBzW10gPSB7CisJJmk5MTVfcG11X2Zvcm1hdF9hdHRyX2dyb3VwLAorCSZpOTE1X3BtdV9l dmVudHNfYXR0cl9ncm91cCwKKwkmaTkxNV9wbXVfY3B1bWFza19hdHRyX2dyb3VwLAorCU5VTEwK K307CisKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKK3N0YXRpYyBpbnQgaTkxNV9wbXVfY3B1 X29ubGluZSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSkKK3sKKwlz dHJ1Y3QgaTkxNV9wbXUgKnBtdSA9IGhsaXN0X2VudHJ5X3NhZmUobm9kZSwgdHlwZW9mKCpwbXUp LCBub2RlKTsKKwl1bnNpZ25lZCBpbnQgdGFyZ2V0OworCisJR0VNX0JVR19PTighcG11LT5iYXNl LmV2ZW50X2luaXQpOworCisJdGFyZ2V0ID0gY3B1bWFza19hbnlfYW5kKCZpOTE1X3BtdV9jcHVt YXNrLCAmaTkxNV9wbXVfY3B1bWFzayk7CisJLyogU2VsZWN0IHRoZSBmaXJzdCBvbmxpbmUgQ1BV IGFzIGEgZGVzaWduYXRlZCByZWFkZXIuICovCisJaWYgKHRhcmdldCA+PSBucl9jcHVfaWRzKQor CQljcHVtYXNrX3NldF9jcHUoY3B1LCAmaTkxNV9wbXVfY3B1bWFzayk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBpOTE1X3BtdV9jcHVfb2ZmbGluZSh1bnNpZ25lZCBpbnQgY3B1LCBz dHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSkKK3sKKwlzdHJ1Y3QgaTkxNV9wbXUgKnBtdSA9IGhsaXN0 X2VudHJ5X3NhZmUobm9kZSwgdHlwZW9mKCpwbXUpLCBub2RlKTsKKwl1bnNpZ25lZCBpbnQgdGFy Z2V0OworCisJR0VNX0JVR19PTighcG11LT5iYXNlLmV2ZW50X2luaXQpOworCisJaWYgKGNwdW1h c2tfdGVzdF9hbmRfY2xlYXJfY3B1KGNwdSwgJmk5MTVfcG11X2NwdW1hc2spKSB7CisJCXRhcmdl dCA9IGNwdW1hc2tfYW55X2J1dCh0b3BvbG9neV9zaWJsaW5nX2NwdW1hc2soY3B1KSwgY3B1KTsK KwkJLyogTWlncmF0ZSBldmVudHMgaWYgdGhlcmUgaXMgYSB2YWxpZCB0YXJnZXQgKi8KKwkJaWYg KHRhcmdldCA8IG5yX2NwdV9pZHMpIHsKKwkJCWNwdW1hc2tfc2V0X2NwdSh0YXJnZXQsICZpOTE1 X3BtdV9jcHVtYXNrKTsKKwkJCXBlcmZfcG11X21pZ3JhdGVfY29udGV4dCgmcG11LT5iYXNlLCBj cHUsIHRhcmdldCk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVudW0gY3B1 aHBfc3RhdGUgY3B1aHBfc2xvdCA9IENQVUhQX0lOVkFMSUQ7CisjZW5kaWYKKworc3RhdGljIGlu dCBpOTE1X3BtdV9yZWdpc3Rlcl9jcHVocF9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSkKK3sKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwllbnVtIGNwdWhwX3N0YXRlIHNs b3Q7CisJaW50IHJldDsKKworCXJldCA9IGNwdWhwX3NldHVwX3N0YXRlX211bHRpKENQVUhQX0FQ X09OTElORV9EWU4sCisJCQkJICAgICAgInBlcmYveDg2L2ludGVsL2k5MTU6b25saW5lIiwKKwkJ CQkgICAgICBpOTE1X3BtdV9jcHVfb25saW5lLAorCQkJCSAgICAgIGk5MTVfcG11X2NwdV9vZmZs aW5lKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXNsb3QgPSByZXQ7CisJcmV0 ID0gY3B1aHBfc3RhdGVfYWRkX2luc3RhbmNlKHNsb3QsICZpOTE1LT5wbXUubm9kZSk7CisJaWYg KHJldCkgeworCQljcHVocF9yZW1vdmVfbXVsdGlfc3RhdGUoc2xvdCk7CisJCXJldHVybiByZXQ7 CisJfQorCisJY3B1aHBfc2xvdCA9IHNsb3Q7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIHZvaWQgaTkxNV9wbXVfdW5yZWdpc3Rlcl9jcHVocF9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSkKK3sKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlXQVJOX09OKGNw dWhwX3Nsb3QgPT0gQ1BVSFBfSU5WQUxJRCk7CisJV0FSTl9PTihjcHVocF9zdGF0ZV9yZW1vdmVf aW5zdGFuY2UoY3B1aHBfc2xvdCwgJmk5MTUtPnBtdS5ub2RlKSk7CisJY3B1aHBfcmVtb3ZlX211 bHRpX3N0YXRlKGNwdWhwX3Nsb3QpOworI2VuZGlmCit9CisKK3ZvaWQgaTkxNV9wbXVfcmVnaXN0 ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCit7CisJaW50IHJldDsKKworCWlmIChJ TlRFTF9HRU4oaTkxNSkgPD0gMikgeworCQlEUk1fSU5GTygiUE1VIG5vdCBzdXBwb3J0ZWQgZm9y IHRoaXMgR1BVLiIpOworCQlyZXR1cm47CisJfQorCisJaTkxNS0+cG11LmJhc2UuYXR0cl9ncm91 cHMJPSBpOTE1X3BtdV9hdHRyX2dyb3VwczsKKwlpOTE1LT5wbXUuYmFzZS50YXNrX2N0eF9ucgk9 IHBlcmZfaW52YWxpZF9jb250ZXh0OworCWk5MTUtPnBtdS5iYXNlLmV2ZW50X2luaXQJPSBpOTE1 X3BtdV9ldmVudF9pbml0OworCWk5MTUtPnBtdS5iYXNlLmFkZAkJPSBpOTE1X3BtdV9ldmVudF9h ZGQ7CisJaTkxNS0+cG11LmJhc2UuZGVsCQk9IGk5MTVfcG11X2V2ZW50X2RlbDsKKwlpOTE1LT5w bXUuYmFzZS5zdGFydAkJPSBpOTE1X3BtdV9ldmVudF9zdGFydDsKKwlpOTE1LT5wbXUuYmFzZS5z dG9wCQk9IGk5MTVfcG11X2V2ZW50X3N0b3A7CisJaTkxNS0+cG11LmJhc2UucmVhZAkJPSBpOTE1 X3BtdV9ldmVudF9yZWFkOworCWk5MTUtPnBtdS5iYXNlLmV2ZW50X2lkeAk9IGk5MTVfcG11X2V2 ZW50X2V2ZW50X2lkeDsKKworCXNwaW5fbG9ja19pbml0KCZpOTE1LT5wbXUubG9jayk7CisJaHJ0 aW1lcl9pbml0KCZpOTE1LT5wbXUudGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RF X1JFTCk7CisJaTkxNS0+cG11LnRpbWVyLmZ1bmN0aW9uID0gaTkxNV9zYW1wbGU7CisKKwlyZXQg PSBwZXJmX3BtdV9yZWdpc3RlcigmaTkxNS0+cG11LmJhc2UsICJpOTE1IiwgLTEpOworCWlmIChy ZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gaTkxNV9wbXVfcmVnaXN0ZXJfY3B1aHBfc3RhdGUo aTkxNSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfdW5yZWc7CisKKwlyZXR1cm47CisKK2Vycl91 bnJlZzoKKwlwZXJmX3BtdV91bnJlZ2lzdGVyKCZpOTE1LT5wbXUuYmFzZSk7CitlcnI6CisJaTkx NS0+cG11LmJhc2UuZXZlbnRfaW5pdCA9IE5VTEw7CisJRFJNX05PVEUoIkZhaWxlZCB0byByZWdp c3RlciBQTVUhIChlcnI9JWQpXG4iLCByZXQpOworfQorCit2b2lkIGk5MTVfcG11X3VucmVnaXN0 ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCit7CisJaWYgKCFpOTE1LT5wbXUuYmFz ZS5ldmVudF9pbml0KQorCQlyZXR1cm47CisKKwlXQVJOX09OKGk5MTUtPnBtdS5lbmFibGUpOwor CisJaHJ0aW1lcl9jYW5jZWwoJmk5MTUtPnBtdS50aW1lcik7CisKKwlpOTE1X3BtdV91bnJlZ2lz dGVyX2NwdWhwX3N0YXRlKGk5MTUpOworCisJcGVyZl9wbXVfdW5yZWdpc3RlcigmaTkxNS0+cG11 LmJhc2UpOworCWk5MTUtPnBtdS5iYXNlLmV2ZW50X2luaXQgPSBOVUxMOworfQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcG11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xYWM4 YjJlMzQ2MDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Bt dS5oCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29y cG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisg KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hh bGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0 aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisg KgorICovCisjaWZuZGVmIF9fSTkxNV9QTVVfSF9fCisjZGVmaW5lIF9fSTkxNV9QTVVfSF9fCisK K2VudW0geworCV9fSTkxNV9TQU1QTEVfRlJFUV9BQ1QgPSAwLAorCV9fSTkxNV9TQU1QTEVfRlJF UV9SRVEsCisJX19JOTE1X05VTV9QTVVfU0FNUExFUlMKK307CisKKy8qKgorICogSG93IG1hbnkg ZGlmZmVyZW50IGV2ZW50cyB3ZSB0cmFjayBpbiB0aGUgZ2xvYmFsIFBNVSBtYXNrLgorICoKKyAq IEl0IGlzIGFsc28gdXNlZCB0byBrbm93IHRvIG5lZWRlZCBudW1iZXIgb2YgZXZlbnQgcmVmZXJl bmNlIGNvdW50ZXJzLgorICovCisjZGVmaW5lIEk5MTVfUE1VX01BU0tfQklUUyBcCisJKCgxIDw8 IEk5MTVfUE1VX1NBTVBMRV9CSVRTKSArIFwKKwkgKEk5MTVfUE1VX0xBU1QgKyAxIC0gX19JOTE1 X1BNVV9PVEhFUigwKSkpCisKK3N0cnVjdCBpOTE1X3BtdV9zYW1wbGUgeworCXU2NCBjdXI7CisJ dTMyIHByZXY7Cit9OworCitzdHJ1Y3QgaTkxNV9wbXUgeworCS8qKgorCSAqIEBub2RlOiBMaXN0 IG5vZGUgZm9yIENQVSBob3RwbHVnIGhhbmRsaW5nLgorCSAqLworCXN0cnVjdCBobGlzdF9ub2Rl IG5vZGU7CisJLyoqCisJICogQGJhc2U6IFBNVSBiYXNlLgorCSAqLworCXN0cnVjdCBwbXUgYmFz ZTsKKwkvKioKKwkgKiBAbG9jazogTG9jayBwcm90ZWN0aW5nIGVuYWJsZSBtYXNrIGFuZCByZWYg Y291bnQgaGFuZGxpbmcuCisJICovCisJc3BpbmxvY2tfdCBsb2NrOworCS8qKgorCSAqIEB0aW1l cjogVGltZXIgZm9yIGludGVybmFsIGk5MTUgUE1VIHNhbXBsaW5nLgorCSAqLworCXN0cnVjdCBo cnRpbWVyIHRpbWVyOworCS8qKgorCSAqIEBlbmFibGU6IEJpdG1hc2sgb2YgYWxsIGN1cnJlbnRs eSBlbmFibGVkIGV2ZW50cy4KKwkgKgorCSAqIEJpdHMgYXJlIGRlcml2ZWQgZnJvbSB1QVBJIGV2 ZW50IG51bWJlcnMgaW4gYSB3YXkgdGhhdCBsb3cgMTYgYml0cworCSAqIGNvcnJlc3BvbmQgdG8g ZW5naW5lIGV2ZW50IF9zYW1wbGVfIF90eXBlXyAoSTkxNV9TQU1QTEVfUVVFVUVEIGlzCisJICog Yml0IDApLCBhbmQgaGlnaGVyIGJpdHMgY29ycmVzcG9uZCB0byBvdGhlciBldmVudHMgKGZvciBp bnN0YW5jZQorCSAqIEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVOQ1kgaXMgYml0IDE2IGV0YykuCisJ ICoKKwkgKiBJbiBvdGhlciB3b3JkcywgbG93IDE2IGJpdHMgYXJlIG5vdCBwZXIgZW5naW5lIGJ1 dCBwZXIgZW5naW5lCisJICogc2FtcGxlciB0eXBlLCB3aGlsZSB0aGUgdXBwZXIgYml0cyBhcmUg ZGlyZWN0bHkgbWFwcGVkIHRvIG90aGVyCisJICogZXZlbnQgdHlwZXMuCisJICovCisJdTY0IGVu YWJsZTsKKwkvKioKKwkgKiBAZW5hYmxlX2NvdW50OiBSZWZlcmVuY2UgY291bnRzIGZvciB0aGUg ZW5hYmxlZCBldmVudHMuCisJICoKKwkgKiBBcnJheSBpbmRpY2VzIGFyZSBtYXBwZWQgaW4gdGhl IHNhbWUgd2F5IGFzIGJpdHMgaW4gdGhlIEBlbmFibGUgZmllbGQKKwkgKiBhbmQgdGhleSBhcmUg dXNlZCB0byBjb250cm9sIHNhbXBsaW5nIG9uL29mZiB3aGVuIG11bHRpcGxlIGNsaWVudHMKKwkg KiBhcmUgdXNpbmcgdGhlIFBNVSBBUEkuCisJICovCisJdW5zaWduZWQgaW50IGVuYWJsZV9jb3Vu dFtJOTE1X1BNVV9NQVNLX0JJVFNdOworCS8qKgorCSAqIEBzYW1wbGU6IEN1cnJlbnQgYW5kIHBy ZXZpb3VzIChyYXcpIGNvdW50ZXJzIGZvciBzYW1wbGluZyBldmVudHMuCisJICoKKwkgKiBUaGVz ZSBjb3VudGVycyBhcmUgdXBkYXRlZCBmcm9tIHRoZSBpOTE1IFBNVSBzYW1wbGluZyB0aW1lci4K KwkgKgorCSAqIE9ubHkgZ2xvYmFsIGNvdW50ZXJzIGFyZSBoZWxkIGhlcmUsIHdoaWxlIHRoZSBw ZXItZW5naW5lIG9uZXMgYXJlIGluCisJICogc3RydWN0IGludGVsX2VuZ2luZV9jcy4KKwkgKi8K KwlzdHJ1Y3QgaTkxNV9wbXVfc2FtcGxlIHNhbXBsZVtfX0k5MTVfTlVNX1BNVV9TQU1QTEVSU107 Cit9OworCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCit2b2lkIGk5MTVfcG11X3JlZ2lzdGVy KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKK3ZvaWQgaTkxNV9wbXVfdW5yZWdpc3Rl cihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7CisjZWxzZQorc3RhdGljIGlubGluZSB2 b2lkIGk5MTVfcG11X3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KSB7fQor c3RhdGljIGlubGluZSB2b2lkIGk5MTVfcG11X3VucmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUpIHt9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApp bmRleCA5NmM4MGZhMGZjYWMuLjA5YmYwNDNjMWMyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5o CkBAIC0xODYsNiArMTg2LDkgQEAgc3RhdGljIGlubGluZSBib29sIGk5MTVfbW1pb19yZWdfdmFs aWQoaTkxNV9yZWdfdCByZWcpCiAjZGVmaW5lIFZJREVPX0VOSEFOQ0VNRU5UX0NMQVNTCTIKICNk ZWZpbmUgQ09QWV9FTkdJTkVfQ0xBU1MJMwogI2RlZmluZSBPVEhFUl9DTEFTUwkJNAorI2RlZmlu ZSBNQVhfRU5HSU5FX0NMQVNTCTQKKworI2RlZmluZSBNQVhfRU5HSU5FX0lOU1RBTkNFICAgIDEK IAogLyogUENJIGNvbmZpZyBzcGFjZSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9lbmdpbmVfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2lu ZV9jcy5jCmluZGV4IDIyYzA5NTAzNTUzOS4uYTVhNDk0MjEwYjllIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9lbmdpbmVfY3MuYwpAQCAtMjA1LDYgKzIwNSwxNSBAQCBpbnRlbF9lbmdpbmVf c2V0dXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCUdFTV9CVUdfT04oaW5m by0+Y2xhc3MgPj0gQVJSQVlfU0laRShpbnRlbF9lbmdpbmVfY2xhc3NlcykpOwogCWNsYXNzX2lu Zm8gPSAmaW50ZWxfZW5naW5lX2NsYXNzZXNbaW5mby0+Y2xhc3NdOwogCisJaWYgKEdFTV9XQVJO X09OKGluZm8tPmNsYXNzID4gTUFYX0VOR0lORV9DTEFTUykpCisJCXJldHVybiAtRUlOVkFMOwor CisJaWYgKEdFTV9XQVJOX09OKGluZm8tPmluc3RhbmNlID4gTUFYX0VOR0lORV9JTlNUQU5DRSkp CisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKEdFTV9XQVJOX09OKGRldl9wcml2LT5lbmdpbmVf Y2xhc3NbaW5mby0+Y2xhc3NdW2luZm8tPmluc3RhbmNlXSkpCisJCXJldHVybiAtRUlOVkFMOwor CiAJR0VNX0JVR19PTihkZXZfcHJpdi0+ZW5naW5lW2lkXSk7CiAJZW5naW5lID0ga3phbGxvYyhz aXplb2YoKmVuZ2luZSksIEdGUF9LRVJORUwpOwogCWlmICghZW5naW5lKQpAQCAtMjM0LDYgKzI0 Myw3IEBAIGludGVsX2VuZ2luZV9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCiAKIAlBVE9NSUNfSU5JVF9OT1RJRklFUl9IRUFEKCZlbmdpbmUtPmNvbnRleHRfc3RhdHVz X25vdGlmaWVyKTsKIAorCWRldl9wcml2LT5lbmdpbmVfY2xhc3NbaW5mby0+Y2xhc3NdW2luZm8t Pmluc3RhbmNlXSA9IGVuZ2luZTsKIAlkZXZfcHJpdi0+ZW5naW5lW2lkXSA9IGVuZ2luZTsKIAly ZXR1cm4gMDsKIH0KQEAgLTE4MTYsNiArMTgyNiwyOSBAQCB2b2lkIGludGVsX2VuZ2luZV9kdW1w KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgc3RydWN0IGRybV9wcmludGVyICptKQog CWRybV9wcmludGYobSwgIlxuIik7CiB9CiAKK3N0YXRpYyB1OCB1c2VyX2NsYXNzX21hcFtdID0g eworCVtJOTE1X0VOR0lORV9DTEFTU19SRU5ERVJdID0gUkVOREVSX0NMQVNTLAorCVtJOTE1X0VO R0lORV9DTEFTU19DT1BZXSA9IENPUFlfRU5HSU5FX0NMQVNTLAorCVtJOTE1X0VOR0lORV9DTEFT U19WSURFT10gPSBWSURFT19ERUNPREVfQ0xBU1MsCisJW0k5MTVfRU5HSU5FX0NMQVNTX1ZJREVP X0VOSEFOQ0VdID0gVklERU9fRU5IQU5DRU1FTlRfQ0xBU1MsCit9OworCitzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICoKK2ludGVsX2VuZ2luZV9sb29rdXBfdXNlcihzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSwgdTggY2xhc3MsIHU4IGluc3RhbmNlKQoreworCWlmIChjbGFzcyA+PSBBUlJB WV9TSVpFKHVzZXJfY2xhc3NfbWFwKSkKKwkJcmV0dXJuIE5VTEw7CisKKwljbGFzcyA9IHVzZXJf Y2xhc3NfbWFwW2NsYXNzXTsKKworCUdFTV9CVUdfT04oY2xhc3MgPiBNQVhfRU5HSU5FX0NMQVNT KTsKKworCWlmIChpbnN0YW5jZSA+IE1BWF9FTkdJTkVfSU5TVEFOQ0UpCisJCXJldHVybiBOVUxM OworCisJcmV0dXJuIGk5MTUtPmVuZ2luZV9jbGFzc1tjbGFzc11baW5zdGFuY2VdOworfQorCiAj aWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVfU0VMRlRFU1QpCiAjaW5jbHVkZSAic2VsZnRl c3RzL21vY2tfZW5naW5lLmMiCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3JpbmdidWZmZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jpbmdi dWZmZXIuaAppbmRleCBkMTZlMzJhZGYxOWEuLmQ1MzdkMjIyNjMyYSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaApAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlICJpOTE1 X2dlbV9iYXRjaF9wb29sLmgiCiAjaW5jbHVkZSAiaTkxNV9nZW1fcmVxdWVzdC5oIgogI2luY2x1 ZGUgImk5MTVfZ2VtX3RpbWVsaW5lLmgiCisjaW5jbHVkZSAiaTkxNV9wbXUuaCIKICNpbmNsdWRl ICJpOTE1X3NlbGZ0ZXN0LmgiCiAKIHN0cnVjdCBkcm1fcHJpbnRlcjsKQEAgLTMzOSw2ICszNDAs MjggQEAgc3RydWN0IGludGVsX2VuZ2luZV9jcyB7CiAJCUk5MTVfU0VMRlRFU1RfREVDTEFSRShi b29sIG1vY2sgOiAxKTsKIAl9IGJyZWFkY3J1bWJzOwogCisJc3RydWN0IHsKKwkJLyoqCisJCSAq IEBlbmFibGU6IEJpdG1hc2sgb2YgZW5hYmxlIHNhbXBsZSBldmVudHMgb24gdGhpcyBlbmdpbmUu CisJCSAqCisJCSAqIEJpdHMgY29ycmVzcG9uZCB0byBzYW1wbGUgZXZlbnQgdHlwZXMsIGZvciBp bnN0YW5jZQorCQkgKiBJOTE1X1NBTVBMRV9RVUVVRUQgaXMgYml0IDAgZXRjLgorCQkgKi8KKwkJ dTMyIGVuYWJsZTsKKwkJLyoqCisJCSAqIEBlbmFibGVfY291bnQ6IFJlZmVyZW5jZSBjb3VudCBm b3IgdGhlIGVuYWJsZWQgc2FtcGxlcnMuCisJCSAqCisJCSAqIEluZGV4IG51bWJlciBjb3JyZXNw b25kcyB0byB0aGUgYml0IG51bWJlciBmcm9tIEBlbmFibGUuCisJCSAqLworCQl1bnNpZ25lZCBp bnQgZW5hYmxlX2NvdW50W0k5MTVfUE1VX1NBTVBMRV9CSVRTXTsKKwkJLyoqCisJCSAqIEBzYW1w bGU6IENvdW50ZXIgdmFsdWVzIGZvciBzYW1wbGluZyBldmVudHMuCisJCSAqCisJCSAqIE91ciBp bnRlcm5hbCB0aW1lciBzdG9yZXMgdGhlIGN1cnJlbnQgY291bnRlcnMgaW4gdGhpcyBmaWVsZC4K KwkJICovCisJCXN0cnVjdCBpOTE1X3BtdV9zYW1wbGUgc2FtcGxlW0k5MTVfRU5HSU5FX1NBTVBM RV9NQVhdOworCX0gcG11OworCiAJLyoKIAkgKiBBIHBvb2wgb2Ygb2JqZWN0cyB0byB1c2UgYXMg c2hhZG93IGNvcGllcyBvZiBjbGllbnQgYmF0Y2ggYnVmZmVycwogCSAqIHdoZW4gdGhlIGNvbW1h bmQgcGFyc2VyIGlzIGVuYWJsZWQuIFByZXZlbnRzIHRoZSBjbGllbnQgZnJvbQpAQCAtOTI3LDQg Kzk1MCw3IEBAIGJvb2wgaW50ZWxfZW5naW5lX2Nhbl9zdG9yZV9kd29yZChzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpOwogCiB2b2lkIGludGVsX2VuZ2luZV9kdW1wKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSwgc3RydWN0IGRybV9wcmludGVyICpwKTsKIAorc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqCitpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUsIHU4IGNsYXNzLCB1OCBpbnN0YW5jZSk7CisKICNlbmRpZiAvKiBfSU5U RUxfUklOR0JVRkZFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2Ry bS5oIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCmluZGV4IGI1Nzk4NTkyOTU1My4uNDBl N2I0MzhiZGFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKKysrIGIv aW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCkBAIC0xMDIsNiArMTAyLDQ1IEBAIGVudW0gZHJt X2k5MTVfZ2VtX2VuZ2luZV9jbGFzcyB7CiAJSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRAk9IC0x CiB9OwogCisvKioKKyAqIERPQzogcGVyZl9ldmVudHMgZXhwb3NlZCBieSBpOTE1IHRocm91Z2gg L3N5cy9idXMvZXZlbnRfc291cmNlcy9kcml2ZXJzL2k5MTUKKyAqCisgKi8KKworZW51bSBkcm1f aTkxNV9wbXVfZW5naW5lX3NhbXBsZSB7CisJSTkxNV9TQU1QTEVfQlVTWSA9IDAsCisJSTkxNV9T QU1QTEVfV0FJVCA9IDEsCisJSTkxNV9TQU1QTEVfU0VNQSA9IDIsCisJSTkxNV9FTkdJTkVfU0FN UExFX01BWCAvKiBub24tQUJJICovCit9OworCisjZGVmaW5lIEk5MTVfUE1VX1NBTVBMRV9CSVRT ICg0KQorI2RlZmluZSBJOTE1X1BNVV9TQU1QTEVfTUFTSyAoMHhmKQorI2RlZmluZSBJOTE1X1BN VV9TQU1QTEVfSU5TVEFOQ0VfQklUUyAoOCkKKyNkZWZpbmUgSTkxNV9QTVVfQ0xBU1NfU0hJRlQg XAorCShJOTE1X1BNVV9TQU1QTEVfQklUUyArIEk5MTVfUE1VX1NBTVBMRV9JTlNUQU5DRV9CSVRT KQorCisjZGVmaW5lIF9fSTkxNV9QTVVfRU5HSU5FKGNsYXNzLCBpbnN0YW5jZSwgc2FtcGxlKSBc CisJKChjbGFzcykgPDwgSTkxNV9QTVVfQ0xBU1NfU0hJRlQgfCBcCisJKGluc3RhbmNlKSA8PCBJ OTE1X1BNVV9TQU1QTEVfQklUUyB8IFwKKwkoc2FtcGxlKSkKKworI2RlZmluZSBJOTE1X1BNVV9F TkdJTkVfQlVTWShjbGFzcywgaW5zdGFuY2UpIFwKKwlfX0k5MTVfUE1VX0VOR0lORShjbGFzcywg aW5zdGFuY2UsIEk5MTVfU0FNUExFX0JVU1kpCisKKyNkZWZpbmUgSTkxNV9QTVVfRU5HSU5FX1dB SVQoY2xhc3MsIGluc3RhbmNlKSBcCisJX19JOTE1X1BNVV9FTkdJTkUoY2xhc3MsIGluc3RhbmNl LCBJOTE1X1NBTVBMRV9XQUlUKQorCisjZGVmaW5lIEk5MTVfUE1VX0VOR0lORV9TRU1BKGNsYXNz LCBpbnN0YW5jZSkgXAorCV9fSTkxNV9QTVVfRU5HSU5FKGNsYXNzLCBpbnN0YW5jZSwgSTkxNV9T QU1QTEVfU0VNQSkKKworI2RlZmluZSBfX0k5MTVfUE1VX09USEVSKHgpIChfX0k5MTVfUE1VX0VO R0lORSgweGZmLCAweGZmLCAweGYpICsgMSArICh4KSkKKworI2RlZmluZSBJOTE1X1BNVV9BQ1RV QUxfRlJFUVVFTkNZCV9fSTkxNV9QTVVfT1RIRVIoMCkKKyNkZWZpbmUgSTkxNV9QTVVfUkVRVUVT VEVEX0ZSRVFVRU5DWQlfX0k5MTVfUE1VX09USEVSKDEpCisKKyNkZWZpbmUgSTkxNV9QTVVfTEFT VCBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZCisKIC8qIEVhY2ggcmVnaW9uIGlzIGEgbWlu aW11bSBvZiAxNmssIGFuZCB0aGVyZSBhcmUgYXQgbW9zdCAyNTUgb2YgdGhlbS4KICAqLwogI2Rl ZmluZSBJOTE1X05SX1RFWF9SRUdJT05TIDI1NQkvKiB0YWJsZSBzaXplIDJrIC0gbWF4aW11bSBk dWUgdG8gdXNlCi0tIAoyLjE0LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeAo=