From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tomas Elf Subject: [PATCH 11/20] drm/i915: Fake lost context event interrupts through forced CSB checking. Date: Fri, 23 Oct 2015 02:32:33 +0100 Message-ID: <1445563962-20753-12-git-send-email-tomas.elf@intel.com> References: <1445563962-20753-1-git-send-email-tomas.elf@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 2933B6E761 for ; Thu, 22 Oct 2015 18:33:42 -0700 (PDT) In-Reply-To: <1445563962-20753-1-git-send-email-tomas.elf@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 List-Id: intel-gfx@lists.freedesktop.org KioqIEdlbmVyYWwgKioqCkEgcmVjdXJyaW5nIGlzc3VlIGR1cmluZyBsb25nLWR1cmF0aW9uIG9w ZXJhdGlvbnMgdGVzdGluZyBvZiBjb25jdXJyZW50CnJlbmRlcmluZyB0YXNrcyB3aXRoIGludGVy bWl0dGVudCBoYW5ncyBpcyB0aGF0IGNvbnRleHQgY29tcGxldGlvbiBpbnRlcnJ1cHRzCmZvbGxv d2luZyBlbmdpbmUgcmVzZXRzIGFyZSBzb21ldGltZXMgbG9zdC4gVGhpcyBiZWNvbWVzIGEgcmVh bCBwcm9ibGVtIHNpbmNlCnRoZSBoYXJkd2FyZSBtaWdodCBoYXZlIGNvbXBsZXRlZCBhIHByZXZp b3VzbHkgaHVuZyBjb250ZXh0IGZvbGxvd2luZyBhCnBlci1lbmdpbmUgaGFuZyByZWNvdmVyeSBh bmQgdGhlbiBnb25lIGlkbGUgc29tZWhvdyB3aXRob3V0IHNlbmRpbmcgYW4KaW50ZXJydXB0IHRl bGxpbmcgdGhlIGRyaXZlciBhYm91dCB0aGlzLiBBdCB0aGlzIHBvaW50IHRoZSBkcml2ZXIgd291 bGQgYmUKc3R1Y2sgd2FpdGluZyBmb3IgY29udGV4dCBjb21wbGV0aW9uLCB0aGlua2luZyB0aGF0 IHRoZSBjb250ZXh0IGlzIHN0aWxsCmFjdGl2ZSwgZXZlbiB0aG91Z2ggdGhlIGhhcmR3YXJlIHdv dWxkIGJlIGlkbGUgYW5kIHdhaXRpbmcgZm9yIG1vcmUgd29yay4gVGhlCnBlcmlvZGljIGhhbmcg Y2hlY2tlciB3b3VsZCBkZXRlY3QgaGFuZ3MgY2F1c2VkIGJ5IHN0dWNrIHdvcmtsb2FkcyBpbiB0 aGUgR1BVCmFzIHdlbGwgYXMgdGhlc2UgaW5jb25zaXN0ZW5jaWVzIGNhdXNpbmcgc29mdHdhcmUg aGFuZ3MuIFRoZSBkaWZmZXJlbmNlIGxpZXMgaW4KaG93IHdlIGhhbmRsZSB0aGVzZSB0d28gdHlw ZXMgb2YgaGFuZ3MuCgoqKiogUmVjdGlmaWNhdGlvbiAqKioKVGhlIHdheSBoYW5ncyBjYXVzZWQg YnkgaW5jb25zaXN0ZW50IGNvbnRleHQgc3VibWlzc2lvbiBzdGF0ZXMgYXJlIHJlc29sdmVkIGlz CmJ5IGNoZWNraW5nIHRoZSBjb250ZXh0IHN1Ym1pc3Npb24gc3RhdGUgY29uc2lzdGVuY3kgYXMg YSBwcmUtc3RhZ2UgdG8gdGhlCmVuZ2luZSByZWNvdmVyeSBwYXRoLiBJZiB0aGUgc3RhdGUgaXMg bm90IGNvbnNpc3RlbnQgYXQgdGhhdCBwb2ludCB0aGVuIHRoZQpub3JtYWwgZm9ybSBvZiBlbmdp bmUgcmVjb3ZlcnkgaXMgbm90IGF0dGVtcHRlZC4gSW5zdGVhZCwgYW4gYXR0ZW1wdCB0byByZWN0 aWZ5CnRoZSBpbmNvbnNpc3RlbmN5IGlzIG1hZGUgYnkgZmFraW5nIHRoZSBwcmVzdW1lZCBsb3N0 IGNvbnRleHQgZXZlbnQgaW50ZXJydXB0IC0Kb3IgbW9yZSBzcGVjaWZpY2FsbHkgYnkgY2FsbGlu ZyB0aGUgY29udGV4dCBldmVudCBpbnRlcnJ1cHQgaGFuZGxlciBtYW51YWxseQpmcm9tIHRoZSBo YW5nIHJlY292ZXJ5IHBhdGggb3V0c2lkZSBvZiB0aGUgbm9ybWFsIGludGVycnVwdCBleGVjdXRp b24gY29udGV4dC4KVGhlIHJlYXNvbiB0aGlzIHdvcmtzIGlzIGJlY2F1c2UgcmVnYXJkbGVzcyBv ZiB3aGV0aGVyIG9yIG5vdCBhbiBJUlEgZ29lcwptaXNzaW5nIHRoZSBoYXJkd2FyZSBhbHdheXMg dXBkYXRlcyB0aGUgQ1NCIGJ1ZmZlciBkdXJpbmcgY29udGV4dCBzdGF0ZQp0cmFuc2l0aW9ucywg d2hpY2ggbWVhbnMgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIG1pc3NpbmcgSVJRIHRoZXJlIHdvdWxk IGJlCm91dHN0YW5kaW5nIENTQiBldmVudHMgd2FpdGluZyB0byBiZSBwcm9jZXNzZWQsIG91dCBv ZiB3aGljaCBvbmUgbWlnaHQgYmUgdGhlCmNvbnRleHQgY29tcGxldGlvbiBldmVudCBiZWxvbmdp bmcgdG8gdGhlIGNvbnRleHQgY3VycmVudGx5IGJsb2NraW5nIHRoZSB3b3JrCnN1Ym1pc3Npb24g ZmxvdyBpbiBvbmUgb2YgdGhlIGV4ZWNsaXN0IHF1ZXVlcy4gVGhlIGZha2VkIGNvbnRleHQgZXZl bnQKaW50ZXJydXB0IHdvdWxkIHRoZW4gZW5kIHVwIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwg d2hpY2ggd291bGQgcHJvY2VzcyB0aGUKb3V0c3RhbmRpbmcgZXZlbnRzIGFuZCBwdXJnZSB0aGUg c3R1Y2sgY29udGV4dC4KCklmIHRoaXMgcmVjdGlmaWNhdGlvbiBhdHRlbXB0IGZhaWxzIChiZWNh dXNlIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZyBDU0IKZXZlbnRzLCBhdCBsZWFzdCBub25lIHRo YXQgY291bGQgYWNjb3VudCBmb3IgdGhlIGluY29uc2lzdGVuY3kpIHRoZW4gdGhlIGVuZ2luZQpy ZWNvdmVyeSBpcyBmYWlsZWQgYW5kIHRoZSBlcnJvciBoYW5kbGVyIGZhbGxzIGJhY2sgdG8gbGVn YWN5IGZ1bGwgR1BVIHJlc2V0Cm1vZGUuIEFzc3VtaW5nIHRoZSBmdWxsIEdQVSByZXNldCBpcyBz dWNjZXNzZnVsIHRoaXMgZm9ybSBvZiByZWNvdmVyeSB3aWxsCmFsd2F5cyBjYXVzZSB0aGUgc3lz dGVtIHRvIGJlY29tZSBjb25zaXN0ZW50IHNpbmNlIHRoZSBHUFUgaXMgcmVzZXQgYW5kIGZvcmNl ZAppbnRvIGFuIGlkbGUgc3RhdGUgYW5kIGFsbCBwZW5kaW5nIGRyaXZlciB3b3JrIGlzIGRpc2Nh cmRlZCwgd2hpY2ggd291bGQKY29uc2lzdGVudGx5IHJlZmxlY3QgdGhlIGlkbGUgR1BVIGhhcmR3 YXJlIHN0YXRlLgoKSWYgdGhlIHJlY3RpZmljYXRpb24gYXR0ZW1wdCBzdWNjZWVkcywgbWVhbmlu ZyB0aGF0IHVucHJvY2Vzc2VkIENTQiBldmVudHMgd2VyZQpmb3VuZCBhbmQgYWN0ZWQgdXBvbiB3 aGljaCBsZWFkIHRvIG9sZCBjb250ZXh0cyBiZWluZyBwdXJnZWQgZnJvbSB0aGUgZXhlY2xpc3QK cXVldWUgYW5kIG5ldyB3b3JrIGJlaW5nIHN1Ym1pdHRlZCB0byBoYXJkd2FyZSwgdGhlbiB0aGUg aW5jb25zaXN0ZW5jeQpyZWN0aWZpY2F0aW9uIGlzIGNvbnNpZGVyZWQgdG8gaGF2ZSBzdWNjZXNz ZnVsbHkgcmVzb2x2ZWQgdGhlIGRldGVjdGVkIGhhbmcKdGhhdCBicm91Z2h0IG9uIHRoZSBoYW5n IHJlY292ZXJ5LiBUaGVyZWZvcmUgdGhlIGVuZ2luZSByZWNvdmVyeSBpcyBlbmRlZCBlYXJseQph dCB0aGF0IHBvaW50IGFuZCBubyBmdXJ0aGVyIGF0dGVtcHRzIGF0IHJlc29sdmluZyB0aGUgaGFu ZyBhcmUgbWFkZSBhbmQgdGhlCmhhbmcgZGV0ZWN0aW9uIGlzIGNsZWFyZWQsIGFsbG93aW5nIHRo ZSBkcml2ZXIgdG8gcmVzdW1lIGV4ZWN1dGluZy4KCioqKiBEZXRlY3Rpb24gKioqCkluIHByaW5j aXBsZSBhIGNvbnRleHQgc3VibWlzc2lvbiBzdGF0dXMgaW5jb25zaXN0ZW5jeSBpcyBkZXRlY3Rl ZCBieSBjb21wYXJpbmcKdGhlIElEIG9mIHRoZSBjb250ZXh0IGluIHRoZSBoZWFkIHJlcXVlc3Qg b2YgYW4gZXhlY2xpc3QgcXVldWUgd2l0aCB0aGUgY29udGV4dApJRCBjdXJyZW50bHkgaW4gdGhl IEVYRUNMSVNUX1NUQVRVUyByZWdpc3RlciBvZiB0aGUgc2FtZSBlbmdpbmUgKHRoZSBsYXR0ZXIK ZGVub3RpbmcgdGhlIElEIG9mIHRoZSBjb250ZXh0IGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZSBo YXJkd2FyZSkuIElmIHRoZSB0d28KZG8gbm90IG1hdGNoIGl0IGlzIGFzc3VtZWQgdGhhdCBhbiBp bnRlcnJ1cHQgd2FzIG1pc3NlZCBhbmQgdGhhdCB0aGUgZHJpdmVyIGlzCm5vdyBzdHVjayBpbiBh biBpbmNvbnNpc3RlbnQgc3RhdGUuIE9mIGNvdXJzZSwgdGhlIGRyaXZlciBhbmQgaGFyZHdhcmUg Y2FuCmdvIGluIGFuZCBvdXQgb2YgY29uc2lzdGVuY3kgbW9tZW50YXJpbHkgbWFueSB0aW1lcyBw ZXIgc2Vjb25kIGFzIGNvbnRleHRzCnN0YXJ0IGFuZCBjb21wbGV0ZSBpbiB0aGUgZHJpdmVyIGlu ZGVwZW5kZW50bHkgZnJvbSB0aGUgYWN0dWFsIEdQVQpoYXJkd2FyZS4gVGhlIG9ubHkgd2F5IGFu IGluY29uc2lzdGVuY3kgZGV0ZWN0aW9uIGNhbiBiZSB0cnVzdGVkIGlzIGJ5CmZpcnN0IG1ha2lu ZyBzdXJlIHRoYXQgdGhlIGRldGVjdGVkIHN0YXRlIGlzIHN0YWJsZSwgZWl0aGVyIGJ5IG9ic2Vy dmluZwpzdXN0YWluZWQsIGluaXRpYWwgc2lnbnMgb2YgYSBoYW5nIGluIHRoZSBwZXJpb2RpYyBo YW5nIGNoZWNrZXIgb3IgYXQgdGhlCm9uc2V0IG9mIHRoZSBoYW5nIHJlY292ZXJ5IHBhdGgsIGF0 IHdoaWNoIHBvaW50IGl0IGhhcyBiZWVuIGRlY2lkZWQgdGhhdAp0aGUgZXhlY3V0aW9uIGlzIGh1 bmcgYW5kIHRoYXQgdGhlIGRyaXZlciBpcyBzdGFibGUgaW4gdGhhdCBzdGF0ZS4KCioqKiBXQVJO SU5HICoqKgpJbiB0aW1lLWNvbnN0cmFpbmVkIHNjZW5hcmlvcyB3YWl0aW5nIHVudGlsIHRoZSBv bnNldCBvZiBoYW5nIHJlY292ZXJ5IGJlZm9yZQpkZXRlY3RpbmcgYW5kIHBvdGVudGlhbGx5IHJl Y3RpZnlpbmcgY29udGV4dCBzdWJtaXNzaW9uIHN0YXRlIGluY29uc2lzdGVuY2llcwptaWdodCBj YXVzZSBwcm9ibGVtYXRpYyBzaWRlLWVmZmVjdHMuIEZvciBleGFtcGxlLCBpbiBBbmRyb2lkIHRo ZQpTdXJmYWNlRmxpbmdlci9IV0MgY29tcG9zaXRvciBoYXMgYSBoYXJkIHRpbWUgbGltaXQgb2Yg MyBzZWNvbmRzIGFmdGVyIHdoaWNoCmFueSB1bnJlc29sdmVkIGhhbmdzIG1pZ2h0IGNhdXNlIGRp c3BsYXkgZnJlZXplcyAoZHVlIHRvIGRyb3BwZWQgZGlzcGxheSBmbGlwCnJlcXVlc3RzKSwgd2hp Y2ggY2FuIG9ubHkgYmUgcmVzb2x2ZWQgYnkgYSByZWJvb3QuIElmIGhhbmcgZGV0ZWN0aW9uIGFu ZCBoYW5nCnJlY292ZXJ5IHRha2VzIHVwd2FyZHMgb2YgMyBzZWNvbmRzIHRoZW4gdGhlcmUgaXMg YSBkaXN0aW5jdCByaXNrIHRoYXQgaGFuZGxpbmcKaW5jb25zaXN0ZW5jaWVzIHRoaXMgbGF0ZSBt aWdodCBjYXVzZSBpc3N1ZXMuIFdoZXRoZXIgb3Igbm90IHRoaXMgd2lsbCBiZWNvbWUgYQpwcm9i bGVtIHJlbWFpbnMgdG8gYmUgc2hvd24gaW4gcHJhY3RpY2UuIFNvIGZhciBubyBpc3N1ZXMgaGF2 ZSBiZWVuIHNwb3R0ZWQgaW4Kb3RoZXIgZW52aXJvbm1lbnRzIHN1Y2ggYXMgWCBidXQgaXQgaXMg d29ydGggYmVpbmcgYXdhcmUgb2YuCgpTaWduZWQtb2ZmLWJ5OiBUb21hcyBFbGYgPHRvbWFzLmVs ZkBpbnRlbC5jb20+CkNjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4K Q2M6IE1pa2EgS3VvcHBhbGEgPG1pa2Eua3VvcHBhbGFAbGludXguaW50ZWwuY29tPgotLS0KIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAgICB8IDE4MiArKysrKysrKysrKysrKysr KysrKysrKysrKystLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYyAgICAg IHwgIDMyICsrLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgICAgIHwgIDgz ICsrKysrKysrKysrKysrKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oICAgICB8 ICAgMiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjX3Rkci5oIHwgICAzICsKIDUg ZmlsZXMgY2hhbmdlZCwgMjMyIGluc2VydGlvbnMoKyksIDcwIGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5jCmluZGV4IDM0OGRhYjYuLmMzNjFiMTkgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuYwpAQCAtOTY5LDYgKzk2OSwxMjAgQEAgaW50IGk5MTVfcmVzZXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKIH0KIAogLyoqCisgKiBpOTE1X2dlbV9yZXNldF9lbmdpbmVfQ1NTQ19wcmVj aGVjayAtIGNoZWNrL3JlY3RpZnkgY29udGV4dCBpbmNvbnNpc3RlbmN5CisgKiBAZGV2X3ByaXY6 CS4uLgorICogQGVuZ2luZTogCVRoZSBlbmdpbmUgd2hvc2Ugc3RhdGUgaXMgdG8gYmUgY2hlY2tl ZC4KKyAqIEByZXE6IAlPdXRwdXQgcGFyYW1ldGVyIGNvbnRhaW5pbmcgdGhlIHJlcXVlc3QgbW9z dCByZWNlbnRseSBzdWJtaXR0ZWQKKyAqIAkJdG8gaGFyZHdhcmUsIGlmIGFueS4gIE1heSBiZSBO VUxMLgorICogQHJldDogCU91dHB1dCBwYXJhbWV0ZXIgY29udGFpbmluZyB0aGUgZXJyb3IgY29k ZSB0byBiZSByZXR1cm5lZCB0bworICogCQlpOTE1X2hhbmRsZV9lcnJvcigpLgorICoKKyAqIEJl Zm9yZSBhbiBlbmdpbmUgcmVzZXQgY2FuIGJlIGF0dGVtcHRlZCBpdCBpcyBpbXBvcnRhbnQgdGhh dCB0aGUgc3VibWlzc2lvbgorICogc3RhdGUgb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIChpLmUu IGh1bmcpIGNvbnRleHQgaXMgdmVyaWZpZWQgYXMKKyAqIGNvbnNpc3RlbnQuIElmIHRoZSBjb250 ZXh0IHN1Ym1pc3Npb24gc3RhdGUgaXMgaW5jb25zaXN0ZW50IHRoYXQgbWVhbnMgdGhhdAorICog dGhlIGNvbnRleHQgdGhhdCB0aGUgZHJpdmVyIHRoaW5rcyBpcyBydW5uaW5nIG9uIGhhcmR3YXJl IGlzIGluIGZhY3Qgbm90CisgKiBydW5uaW5nIGF0IGFsbC4gSXQgbWlnaHQgYmUgdGhhdCB0aGUg aGFyZHdhcmUgaXMgaWRsZSBvciBpcyBydW5uaW5nIGFub3RoZXIKKyAqIGNvbnRleHQgYWx0b2dl dGhlci4gVGhlIHJlYXNvbiB3aHkgdGhpcyBpcyBpbXBvcnRhbnQgaW4gdGhlIGNhc2Ugb2YgZW5n aW5lCisgKiByZXNldCBpbiBwYXJ0aWN1bGFyIGlzIGJlY2F1c2UgYXQgdGhlIGVuZCBvZiB0aGUg ZW5naW5lIHJlY292ZXJ5IHBhdGggdGhlCisgKiBmaXhlZC11cCBjb250ZXh0IG5lZWRzIHRvIGJl IHJlc3VibWl0dGVkIHRvIGhhcmR3YXJlIGluIG9yZGVyIGZvciB0aGUKKyAqIGNvbnRleHQgY2hh bmdlcyAoSEVBRCByZWdpc3RlciBudWRnZWQgcGFzdCB0aGUgaHVuZyBiYXRjaCBidWZmZXIpIHRv IHRha2UKKyAqIGVmZmVjdC4gQ29udGV4dCByZXN1Ym1pc3Npb24gcmVxdWlyZXMgdGhlIHNhbWUg Y29udGV4dCBhcyBpcyByZXN1Ym1pdHRlZCB0bworICogYmUgcnVubmluZyBvbiBoYXJkd2FyZSAt IG90aGVyd2lzZSB3ZSBtaWdodCBjYXVzZSB1bmV4cGVjdGVkIHByZWVtcHRpb25zIG9yCisgKiBz dWJtaXQgYSBjb250ZXh0IHRvIGEgR1BVIGVuZ2luZSB0aGF0IGlzIGlkbGUsIHdoaWNoIHdvdWxk IG5vdCBtYWtlIG11Y2gKKyAqIHNlbnNlLiAoaWYgdGhlIGVuZ2luZSBpcyBpZGxlIHdoeSBkb2Vz IHRoZSBkcml2ZXIgdGhpbmsgdGhhdCB0aGUgY29udGV4dCBpbgorICogcXVlc3Rpb24gaXMgaHVu ZyBldGMuKQorICogSWYgYW4gaW5jb25zaXN0ZW50IHN0YXRlIGxpa2UgdGhpcyBpcyBkZXRlY3Rl ZCB0aGVuIGEgcmVjdGlmaWNhdGlvbiBhdHRlbXB0CisgKiBpcyBtYWRlIGJ5IGZha2luZyB0aGUg cHJlc3VtZWQgbG9zdCBjb250ZXh0IGV2ZW50IGludGVycnVwdC4gVGhlIG91dGNvbWUgb2YKKyAq IHRoaXMgYXR0ZW1wdCBpcyByZXR1cm5lZCBiYWNrIHRvIHRoZSBwZXItZW5naW5lIHJlY292ZXJ5 IHBhdGg6IElmIGl0IHdhcworICogc3VjY2VzZnVsIHRoZSBoYW5nIHJlY292ZXJ5IGNhbiBiZSBh Ym9ydGVkIGVhcmx5IHNpbmNlIHdlIG5vdyBoYXZlIHJlc29sdmVkCisgKiB0aGUgaGFuZyB0aGlz IHdheS4gSWYgaXQgd2FzIG5vdCBzdWNjZXNzZnVsIHRoZW4gZmFpbCB0aGUgaGFuZyByZWNvdmVy eSBhbmQKKyAqIGxldCB0aGUgZXJyb3IgaGFuZGxlciBwcm9tb3RlIHRvIHRoZSBuZXh0IGxldmVs IG9mIGhhbmcgcmVjb3ZlcnkuCisgKgorICogUmV0dXJuczoKKyAqCVRydWU6IAlXb3JrIGN1cnJl bnRseSBpbiBwcm9ncmVzcywgY29uc2lzdGVudCBzdGF0ZS4KKyAqCQlQcm9jZWVkIHdpdGggZW5n aW5lIHJlc2V0LgorICoJRmFsc2U6IAlObyB3b3JrIGluIHByb2dyZXNzIG9yIHdvcmsgaW4gcHJv Z3Jlc3MgYnV0IHN0YXRlIGlycmVjb3ZlcmFibHkKKyAqCQlpbmNvbnNpc3RlbnQgKGNvbnRleHQg ZXZlbnQgSVJRIGZha2luZyBhdHRlbXB0ZWQgYnV0IGZhaWxlZCkuCisgKgkJRG8gbm90IHByb2Nl ZWQgd2l0aCBlbmdpbmUgcmVzZXQuCisgKi8KK3N0YXRpYyBib29sIGk5MTVfZ2VtX3Jlc2V0X2Vu Z2luZV9DU1NDX3ByZWNoZWNrKAorCQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs CisJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKKwkJc3RydWN0IGRybV9pOTE1X2dl bV9yZXF1ZXN0ICoqcmVxLAorCQlpbnQgKnJldCkKK3sKKwlib29sIHByZWNoZWNrX29rID0gdHJ1 ZTsKKwllbnVtIGNvbnRleHRfc3VibWlzc2lvbl9zdGF0dXMgc3RhdHVzOworCisJV0FSTl9PTigh cmV0KTsKKworCSpyZXQgPSAwOworCisJc3RhdHVzID0gaW50ZWxfZXhlY2xpc3RzX1REUl9nZXRf Y3VycmVudF9yZXF1ZXN0KGVuZ2luZSwgcmVxKTsKKworCWlmIChzdGF0dXMgPT0gQ09OVEVYVF9T VUJNSVNTSU9OX1NUQVRVU19OT05FX1NVQk1JVFRFRCkgeworCQkvKgorCQkgKiBObyB3b3JrIGlu IGZsaWdodCwgbm8gd2F5IHRvIGNhcnJ5IG91dCBhIHBlci1lbmdpbmUgaGFuZworCQkgKiByZWNv dmVyeSBpbiB0aGlzIHN0YXRlLiBKdXN0IGRvIGVhcmx5IGV4aXQgYW5kIGZvcmdldCBpdAorCQkg KiBoYXBwZW5lZC4gSWYgdGhpcyBzdGF0ZSBwZXJzaXN0cyB0aGVuIHRoZSBlcnJvciBoYW5kbGVy IHdpbGwKKwkJICogYmUgY2FsbGVkIGJ5IHRoZSBwZXJpb2RpYyBoYW5nIGNoZWNrZXIgc29vbiBh ZnRlciB0aGlzIGFuZAorCQkgKiBhdCB0aGF0IHBvaW50IHRoZSBoYW5nIHdpbGwgaG9wZWZ1bGx5 IGJlIHByb21vdGVkIHRvIGZ1bGwKKwkJICogR1BVIHJlc2V0LCB3aGljaCB3aWxsIHRha2UgY2Fy ZSBvZiBpdC4KKwkJICovCisJCVdBUk4oMSwgIk5vIHdvcmsgaW4gZmxpZ2h0ISBBYm9ydGluZyBy ZWNvdmVyeSBvbiAlc1xuIiwKKwkJCWVuZ2luZS0+bmFtZSk7CisKKwkJIHByZWNoZWNrX29rID0g ZmFsc2U7CisJCSAqcmV0ID0gMDsKKworCX0gZWxzZSBpZiAoc3RhdHVzID09IENPTlRFWFRfU1VC TUlTU0lPTl9TVEFUVVNfSU5DT05TSVNURU5UKSB7CisJCWlmICghaW50ZWxfZXhlY2xpc3RzX1RE Ul9mb3JjZV9DU0JfY2hlY2soZGV2X3ByaXYsIGVuZ2luZSkpIHsKKwkJCURSTV9FUlJPUigiSW5j b25zaXN0ZW5jeSByZWN0aWZpY2F0aW9uIG9uICVzIHVuc3VjY2Vzc2Z1bCFcbiIsCisJCQkJZW5n aW5lLT5uYW1lKTsKKworCQkJLyoKKwkJCSAqIENvbnRleHQgc3VibWlzc2lvbiBzdGF0ZSBpcyBp bmNvbnNpc3RlbnQgYW5kCisJCQkgKiBmYWtpbmcgYSBjb250ZXh0IGV2ZW50IElSUSBkaWQgbm90 IGhlbHAuCisJCQkgKiBGYWlsIGFuZCBwcm9tb3RlIHRvIGhpZ2hlciBsZXZlbCBvZgorCQkJICog cmVjb3ZlcnkhCisJCQkgKi8KKwkJCXByZWNoZWNrX29rID0gZmFsc2U7CisJCQkqcmV0ID0gLUVJ TlZBTDsKKwkJfSBlbHNlIHsKKwkJCURSTV9JTkZPKCJJbmNvbnNpc3RlbmN5IHJlY3RpZmljYXRp b24gb24gJXMgc3VjY2Vzc2Z1bCFcbiIsCisJCQkJZW5naW5lLT5uYW1lKTsKKworCQkJLyoKKwkJ CSAqIFJlY3RpZnlpbmcgdGhlIGluY29uc2lzdGVudCBjb250ZXh0CisJCQkgKiBzdWJtaXNzaW9u IHN0YXR1cyBoZWxwZWQhIE5vIHJlc2V0IHJlcXVpcmVkLAorCQkJICoganVzdCBleGl0IGFuZCBt b3ZlIG9uIQorCQkJICovCisJCQkgcHJlY2hlY2tfb2sgPSBmYWxzZTsKKwkJCSAqcmV0ID0gMDsK KworCQkJLyoKKwkJCSAqIFJlc2V0IHRoZSBoYW5nY2hlY2sgc3RhdGUgb3RoZXJ3aXNlIHRoZSBo YW5nIGNoZWNrZXIKKwkJCSAqIHdpbGwgZGV0ZWN0IGFub3RoZXIgaGFuZyBpbW1lZGlhdGVseS4g U2luY2UgdGhlCisJCQkgKiBmb3JjZWQgQ1NCIGNoZWNrZXIgcmVzdWx0ZWQgaW4gbW9yZSB3b3Jr IGJlaW5nCisJCQkgKiBzdWJtaXR0ZWQgdG8gaGFyZHdhcmUgd2Uga25vdyB0aGF0IHdlIGFyZSBu b3QgaHVuZworCQkJICogYW55bW9yZSBzbyBpdCBzaG91bGQgYmUgc2FmZSB0byBjbGVhciBhbnkg aGFuZworCQkJICogZGV0ZWN0aW9ucyBmb3IgdGhpcyBlbmdpbmUgcHJpb3IgdG8gdGhpcyBwb2lu dC4KKwkJCSAqLworCQkJaTkxNV9oYW5nY2hlY2tfcmVpbml0KGVuZ2luZSk7CisJCX0KKworCX0g ZWxzZSBpZiAoc3RhdHVzICE9IENPTlRFWFRfU1VCTUlTU0lPTl9TVEFUVVNfT0spIHsKKwkJV0FS TigxLCAiVW5leHBlY3RlZCBjb250ZXh0IHN1Ym1pc3Npb24gc3RhdHVzICgldSkgb24gJXNcbiIs CisJCQlzdGF0dXMsIGVuZ2luZS0+bmFtZSk7CisKKwkJcHJlY2hlY2tfb2sgPSBmYWxzZTsKKwkJ KnJldCA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHByZWNoZWNrX29rOworfQorCisvKioKICAq IGk5MTVfcmVzZXRfZW5naW5lIC0gcmVzZXQgR1BVIGVuZ2luZSBhZnRlciBhIGhhbmcKICAqIEBl bmdpbmU6IGVuZ2luZSB0byByZXNldAogICoKQEAgLTEwMDksMjggKzExMjMsMjIgQEAgaW50IGk5 MTVfcmVzZXRfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAlpOTE1X2dl bV9yZXNldF9yaW5nX3N0YXR1cyhkZXZfcHJpdiwgZW5naW5lKTsKIAogCWlmIChpOTE1LmVuYWJs ZV9leGVjbGlzdHMpIHsKLQkJZW51bSBjb250ZXh0X3N1Ym1pc3Npb25fc3RhdHVzIHN0YXR1cyA9 Ci0JCQlpbnRlbF9leGVjbGlzdHNfVERSX2dldF9jdXJyZW50X3JlcXVlc3QoZW5naW5lLCBOVUxM KTsKLQogCQkvKgotCQkgKiBJZiB0aGUgY29udGV4dCBzdWJtaXNzaW9uIHN0YXRlIGluIGhhcmR3 YXJlIGlzIG5vdAotCQkgKiBjb25zaXN0ZW50IHdpdGggdGhlIHRoZSBjb3JyZXNwb25kaW5nIHN0 YXRlIGluIHRoZSBkcml2ZXIgb3IKLQkJICogaWYgdGhlcmUgZm9yIHNvbWUgcmVhc29uIGlzIG5v IGN1cnJlbnQgY29udGV4dCBpbiB0aGUKLQkJICogcHJvY2VzcyBvZiBiZWluZyBzdWJtaXR0ZWQg dGhlbiBiYWlsIG91dCBhbmQgdHJ5IGFnYWluLiBEbwotCQkgKiBub3QgcHJvY2VlZCB1bmxlc3Mg d2UgaGF2ZSByZWxpYWJsZSBjdXJyZW50IGNvbnRleHQgc3RhdGUKLQkJICogaW5mb3JtYXRpb24u IFRoZSByZWFzb24gd2h5IHRoaXMgaXMgaW1wb3J0YW50IGlzIGJlY2F1c2UKLQkJICogcGVyLWVu Z2luZSBoYW5nIHJlY292ZXJ5IHJlbGllcyBvbiBjb250ZXh0IHJlc3VibWlzc2lvbiBpbgotCQkg KiBvcmRlciB0byBmb3JjZSB0aGUgZXhlY3V0aW9uIHRvIHJlc3VtZSBmb2xsb3dpbmcgdGhlIGh1 bmcKLQkJICogYmF0Y2ggYnVmZmVyLiBJZiB0aGUgaGFyZHdhcmUgaXMgbm90IGN1cnJlbnRseSBy dW5uaW5nIHRoZQotCQkgKiBzYW1lIGNvbnRleHQgYXMgdGhlIGRyaXZlciB0aGlua3MgaXMgaHVu ZyB0aGVuIGFueXRoaW5nIGNhbgotCQkgKiBoYXBwZW4gYXQgdGhlIHBvaW50IG9mIGNvbnRleHQg cmVzdWJtaXNzaW9uLCBlLmcuIHVuZXhwZWN0ZWQKLQkJICogcHJlZW1wdGlvbnMgb3IgdGhlIHBy ZXZpb3VzbHkgaHVuZyBjb250ZXh0IGNvdWxkIGJlCi0JCSAqIHN1Ym1pdHRlZCB3aGVuIHRoZSBo YXJkd2FyZSBpcyBpZGxlIHdoaWNoIG1ha2VzIG5vIHNlbnNlLgorCQkgKiBDaGVjayBjb250ZXh0 IHN1Ym1pc3Npb24gc3RhdHVzIGNvbnNpc3RlbmN5IChDU1NDKSBiZWZvcmUKKwkJICogbW92aW5n IG9uLiBJZiB0aGUgZHJpdmVyIGFuZCBoYXJkd2FyZSBoYXZlIGRpZmZlcmVudAorCQkgKiBvcGlu aW9ucyBhYm91dCB3aGF0IGlzIGdvaW5nIG9uIGFuZCB0aGlzIGluY29uc2lzdGVuY3kKKwkJICog Y2Fubm90IGJlIHJlY3RpZmllZCB0aGVuIGp1c3QgZmFpbCBhbmQgbGV0IFREUiBlc2NhbGF0ZSB0 byBhCisJCSAqIGhpZ2hlciBmb3JtIG9mIGhhbmcgcmVjb3ZlcnkuCiAJCSAqLwotCQlpZiAoc3Rh dHVzICE9IENPTlRFWFRfU1VCTUlTU0lPTl9TVEFUVVNfT0spIHsKLQkJCXJldCA9IC1FQUdBSU47 CisJCSBpZiAoIWk5MTVfZ2VtX3Jlc2V0X2VuZ2luZV9DU1NDX3ByZWNoZWNrKGRldl9wcml2LAor CQkJCQkJCSAgZW5naW5lLAorCQkJCQkJCSAgTlVMTCwKKwkJCQkJCQkgICZyZXQpKSB7CisJCQlE Uk1fSU5GTygiQWJvcnRpbmcgaGFuZyByZWNvdmVyeSBvbiAlcyAoJWQpXG4iLAorCQkJCWVuZ2lu ZS0+bmFtZSwgcmV0KTsKKwogCQkJZ290byByZXNldF9lbmdpbmVfZXJyb3I7Ci0JCX0KKwkJIH0K IAl9CiAKIAlyZXQgPSBpbnRlbF9yaW5nX2Rpc2FibGUoZW5naW5lKTsKQEAgLTEwNDAsMjcgKzEx NDgsMjUgQEAgaW50IGk5MTVfcmVzZXRfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKIAl9CiAKIAlpZiAoaTkxNS5lbmFibGVfZXhlY2xpc3RzKSB7Ci0JCWVudW0gY29udGV4 dF9zdWJtaXNzaW9uX3N0YXR1cyBzdGF0dXM7Ci0JCWJvb2wgaW5jb25zaXN0ZW50OwotCi0JCXN0 YXR1cyA9IGludGVsX2V4ZWNsaXN0c19URFJfZ2V0X2N1cnJlbnRfcmVxdWVzdChlbmdpbmUsCi0J CQkJJmN1cnJlbnRfcmVxdWVzdCk7Ci0KLQkJaW5jb25zaXN0ZW50ID0gKHN0YXR1cyAhPSBDT05U RVhUX1NVQk1JU1NJT05fU1RBVFVTX09LKTsKLQkJaWYgKGluY29uc2lzdGVudCkgewotCQkJLyoK LQkJCSAqIElmIHdlIHNvbWVob3cgaGF2ZSByZWFjaGVkIHRoaXMgcG9pbnQgd2l0aAotCQkJICog YW4gaW5jb25zaXN0ZW50IGNvbnRleHQgc3VibWlzc2lvbiBzdGF0dXMgdGhlbgotCQkJICogYmFj ayBvdXQgb2YgdGhlIHByZXZpb3VzbHkgcmVxdWVzdGVkIHJlc2V0IGFuZAotCQkJICogcmV0cnkg bGF0ZXIuCi0JCQkgKi8KLQkJCVdBUk4oaW5jb25zaXN0ZW50LAotCQkJICAgICAiSW5jb25zaXN0 ZW50IGNvbnRleHQgc3RhdHVzIG9uICVzOiAldVxuIiwKLQkJCSAgICAgZW5naW5lLT5uYW1lLCBz dGF0dXMpOworCQkvKgorCQkgKiBHZXQgYSBob2xkIG9mIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5n IGNvbnRleHQuCisJCSAqCisJCSAqIENvbnRleHQgc3VibWlzc2lvbiBzdGF0dXMgY29uc2lzdGVu Y3kgaXMgZG9uZSBpbXBsaWNpdGx5IHNvCisJCSAqIHdlIG1pZ2h0IGFzIHdlbGwgY2hlY2sgaXQg cG9zdC1lbmdpbmUgZGlzYWJsZW1lbnQgc2luY2Ugd2UKKwkJICogZ2V0IHRoYXQgb3B0aW9uIGZv ciBmcmVlLiBBbHNvLCBpdCdzIGNvbmNlaXZhYmxlIHRoYXQgdGhlCisJCSAqIGNvbnRleHQgc3Vi bWlzc2lvbiBzdGF0ZSBtaWdodCBoYXZlIGNoYW5nZWQgYXMgcGFydCBvZiB0aGUKKwkJICogcmVz ZXQgcmVxdWVzdCBvbiBnZW44KyBzbyBpdCdzIG5vdCBjb21wbGV0ZWx5IGRldm9pZCBvZgorCQkg KiB2YWx1ZSB0byBkbyB0aGlzLgorCQkgKi8KKwkJIGlmICghaTkxNV9nZW1fcmVzZXRfZW5naW5l X0NTU0NfcHJlY2hlY2soZGV2X3ByaXYsCisJCQkJCQkJICBlbmdpbmUsCisJCQkJCQkJICAmY3Vy cmVudF9yZXF1ZXN0LAorCQkJCQkJCSAgJnJldCkpIHsKKwkJCURSTV9JTkZPKCJBYm9ydGluZyBo YW5nIHJlY292ZXJ5IG9uICVzICglZClcbiIsCisJCQkJZW5naW5lLT5uYW1lLCByZXQpOwogCi0J CQlyZXQgPSAtRUFHQUlOOwogCQkJZ290byByZWVuYWJsZV9yZXNldF9lbmdpbmVfZXJyb3I7Ci0J CX0KKwkJIH0KIAl9CiAKIAkvKiBTYW1wbGUgdGhlIGN1cnJlbnQgcmluZyBoZWFkIHBvc2l0aW9u ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCBmMzVhOWIwLi43MTIwOGRlIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfaXJxLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJpOTE1X2Rydi5o IgogI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKICNpbmNsdWRlICJpbnRlbF9kcnYuaCIKKyNpbmNs dWRlICJpbnRlbF9scmNfdGRyLmgiCiAKIC8qKgogICogRE9DOiBpbnRlcnJ1cHQgaGFuZGxpbmcK QEAgLTEzMDIsNyArMTMwMyw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBnZW44X2d0X2lycV9oYW5k bGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJCXJldCA9IElSUV9IQU5E TEVEOwogCiAJCQlpZiAodG1wICYgKEdUX0NPTlRFWFRfU1dJVENIX0lOVEVSUlVQVCA8PCBHRU44 X1JDU19JUlFfU0hJRlQpKQotCQkJCWludGVsX2xyY19pcnFfaGFuZGxlcigmZGV2X3ByaXYtPnJp bmdbUkNTXSk7CisJCQkJaW50ZWxfbHJjX2lycV9oYW5kbGVyKCZkZXZfcHJpdi0+cmluZ1tSQ1Nd LCB0cnVlKTsKIAkJCWlmICh0bXAgJiAoR1RfUkVOREVSX1VTRVJfSU5URVJSVVBUIDw8IEdFTjhf UkNTX0lSUV9TSElGVCkpCiAJCQkJbm90aWZ5X3JpbmcoJmRldl9wcml2LT5yaW5nW1JDU10pOwog CQkJaWYgKHRtcCAmIChHVF9HRU44X1JDU19XQVRDSERPR19JTlRFUlJVUFQgPDwgR0VOOF9SQ1Nf SVJRX1NISUZUKSkgewpAQCAtMTMxOSw3ICsxMzIwLDcgQEAgc3RhdGljIGlycXJldHVybl90IGdl bjhfZ3RfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkJ fQogCiAJCQlpZiAodG1wICYgKEdUX0NPTlRFWFRfU1dJVENIX0lOVEVSUlVQVCA8PCBHRU44X0JD U19JUlFfU0hJRlQpKQotCQkJCWludGVsX2xyY19pcnFfaGFuZGxlcigmZGV2X3ByaXYtPnJpbmdb QkNTXSk7CisJCQkJaW50ZWxfbHJjX2lycV9oYW5kbGVyKCZkZXZfcHJpdi0+cmluZ1tCQ1NdLCB0 cnVlKTsKIAkJCWlmICh0bXAgJiAoR1RfUkVOREVSX1VTRVJfSU5URVJSVVBUIDw8IEdFTjhfQkNT X0lSUV9TSElGVCkpCiAJCQkJbm90aWZ5X3JpbmcoJmRldl9wcml2LT5yaW5nW0JDU10pOwogCQl9 IGVsc2UKQEAgLTEzMzMsNyArMTMzNCw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBnZW44X2d0X2ly cV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJCXJldCA9IElS UV9IQU5ETEVEOwogCiAJCQlpZiAodG1wICYgKEdUX0NPTlRFWFRfU1dJVENIX0lOVEVSUlVQVCA8 PCBHRU44X1ZDUzFfSVJRX1NISUZUKSkKLQkJCQlpbnRlbF9scmNfaXJxX2hhbmRsZXIoJmRldl9w cml2LT5yaW5nW1ZDU10pOworCQkJCWludGVsX2xyY19pcnFfaGFuZGxlcigmZGV2X3ByaXYtPnJp bmdbVkNTXSwgdHJ1ZSk7CiAJCQlpZiAodG1wICYgKEdUX1JFTkRFUl9VU0VSX0lOVEVSUlVQVCA8 PCBHRU44X1ZDUzFfSVJRX1NISUZUKSkKIAkJCQlub3RpZnlfcmluZygmZGV2X3ByaXYtPnJpbmdb VkNTXSk7CiAJCQlpZiAodG1wICYgKEdUX0dFTjhfVkNTX1dBVENIRE9HX0lOVEVSUlVQVCA8PCBH RU44X1ZDUzFfSVJRX1NISUZUKSkgewpAQCAtMTM1MCw3ICsxMzUxLDcgQEAgc3RhdGljIGlycXJl dHVybl90IGdlbjhfZ3RfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAogCQkJfQogCiAJCQlpZiAodG1wICYgKEdUX0NPTlRFWFRfU1dJVENIX0lOVEVSUlVQVCA8 PCBHRU44X1ZDUzJfSVJRX1NISUZUKSkKLQkJCQlpbnRlbF9scmNfaXJxX2hhbmRsZXIoJmRldl9w cml2LT5yaW5nW1ZDUzJdKTsKKwkJCQlpbnRlbF9scmNfaXJxX2hhbmRsZXIoJmRldl9wcml2LT5y aW5nW1ZDUzJdLCB0cnVlKTsKIAkJCWlmICh0bXAgJiAoR1RfUkVOREVSX1VTRVJfSU5URVJSVVBU IDw8IEdFTjhfVkNTMl9JUlFfU0hJRlQpKQogCQkJCW5vdGlmeV9yaW5nKCZkZXZfcHJpdi0+cmlu Z1tWQ1MyXSk7CiAJCQlpZiAodG1wICYgKEdUX0dFTjhfVkNTX1dBVENIRE9HX0lOVEVSUlVQVCA8 PCBHRU44X1ZDUzJfSVJRX1NISUZUKSkgewpAQCAtMTM3Niw3ICsxMzc3LDcgQEAgc3RhdGljIGly cXJldHVybl90IGdlbjhfZ3RfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAogCQkJcmV0ID0gSVJRX0hBTkRMRUQ7CiAKIAkJCWlmICh0bXAgJiAoR1RfQ09OVEVY VF9TV0lUQ0hfSU5URVJSVVBUIDw8IEdFTjhfVkVDU19JUlFfU0hJRlQpKQotCQkJCWludGVsX2xy Y19pcnFfaGFuZGxlcigmZGV2X3ByaXYtPnJpbmdbVkVDU10pOworCQkJCWludGVsX2xyY19pcnFf aGFuZGxlcigmZGV2X3ByaXYtPnJpbmdbVkVDU10sIHRydWUpOwogCQkJaWYgKHRtcCAmIChHVF9S RU5ERVJfVVNFUl9JTlRFUlJVUFQgPDwgR0VOOF9WRUNTX0lSUV9TSElGVCkpCiAJCQkJbm90aWZ5 X3JpbmcoJmRldl9wcml2LT5yaW5nW1ZFQ1NdKTsKIAkJfSBlbHNlCkBAIC0yNDc2LDI3ICsyNDc3 LDYgQEAgc3RhdGljIHZvaWQgaTkxNV9lcnJvcl93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0 ICp3b3JrKQogCiAJCQlyZXQgPSBpOTE1X3Jlc2V0X2VuZ2luZShyaW5nKTsKIAotCQkJLyoKLQkJ CSAqIEV4ZWNsaXN0IG1vZGUgb25seToKLQkJCSAqCi0JCQkgKiAtRUFHQUlOIG1lYW5zIHRoYXQg YmV0d2VlbiBkZXRlY3RpbmcgYSBoYW5nIChhbmQKLQkJCSAqIGFsc28gZGV0ZXJtaW5pbmcgdGhh dCB0aGUgY3VycmVudGx5IHN1Ym1pdHRlZAotCQkJICogY29udGV4dCBpcyBzdGFibGUgYW5kIHZh bGlkKSBhbmQgdHJ5aW5nIHRvIHJlY292ZXIKLQkJCSAqIGZyb20gdGhlIGhhbmcgdGhlIGN1cnJl bnQgY29udGV4dCBjaGFuZ2VkIHN0YXRlLgotCQkJICogVGhpcyBtZWFucyB0aGF0IHdlIGFyZSBw cm9iYWJseSBub3QgY29tcGxldGVseSBodW5nCi0JCQkgKiBhZnRlciBhbGwuIEp1c3QgZmFpbCBh bmQgcmV0cnkgYnkgZXhpdGluZyBhbGwgdGhlCi0JCQkgKiB3YXkgYmFjayBhbmQgd2FpdCBmb3Ig dGhlIG5leHQgaGFuZyBkZXRlY3Rpb24uIElmIHdlCi0JCQkgKiBoYXZlIGEgdHJ1ZSBoYW5nIG9u IG91ciBoYW5kcyB0aGVuIHdlIHdpbGwgZGV0ZWN0IGl0Ci0JCQkgKiBhZ2Fpbiwgb3RoZXJ3aXNl IHdlIHdpbGwgY29udGludWUgbGlrZSBub3RoaW5nCi0JCQkgKiBoYXBwZW5lZC4KLQkJCSAqLwot CQkJaWYgKHJldCA9PSAtRUFHQUlOKSB7Ci0JCQkJRFJNX0VSUk9SKCJSZXNldCBvZiAlcyBhYm9y dGVkIGR1ZSB0byAiIFwKLQkJCQkJICAiY2hhbmdlIGluIGNvbnRleHQgc3VibWlzc2lvbiAiIFwK LQkJCQkJICAic3RhdGUgLSByZXRyeWluZyEiLCByaW5nLT5uYW1lKTsKLQkJCQlyZXQgPSAwOwot CQkJfQotCiAJCQlpZiAocmV0KSB7CiAJCQkJRFJNX0VSUk9SKCJSZXNldCBvZiAlcyBmYWlsZWQh ICglZCkiLCByaW5nLT5uYW1lLCByZXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCmluZGV4 IDlkMDFmYzMuLmI0OGY3NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2xyYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCkBAIC03MDIsMTEg KzcwMiwxNSBAQCBzdGF0aWMgYm9vbCBleGVjbGlzdHNfY2hlY2tfcmVtb3ZlX3JlcXVlc3Qoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKIC8qKgogICogaW50ZWxfbHJjX2lycV9oYW5kbGVy KCkgLSBoYW5kbGUgQ29udGV4dCBTd2l0Y2ggaW50ZXJydXB0cwogICogQHJpbmc6IEVuZ2luZSBD b21tYW5kIFN0cmVhbWVyIHRvIGhhbmRsZS4KKyAqIEBkb19sb2NrOiBMb2NrIGV4ZWNsaXN0IHNw aW5sb2NrIChpZiBmYWxzZSB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzKQogICoK ICAqIENoZWNrIHRoZSB1bnJlYWQgQ29udGV4dCBTdGF0dXMgQnVmZmVycyBhbmQgbWFuYWdlIHRo ZSBzdWJtaXNzaW9uIG9mIG5ldwogICogY29udGV4dHMgdG8gdGhlIEVMU1AgYWNjb3JkaW5nbHku CisgKgorICogUmV0dXJuOgorICogICAgICBUaGUgbnVtYmVyIG9mIHVucXVldWVkIGNvbnRleHRz LgogICovCi12b2lkIGludGVsX2xyY19pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICpyaW5nKQoraW50IGludGVsX2xyY19pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICpyaW5nLCBib29sIGRvX2xvY2spCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gcmluZy0+ZGV2LT5kZXZfcHJpdmF0ZTsKIAl1MzIgc3RhdHVzX3BvaW50ZXI7CkBAIC03 MTYsNiArNzIwLDkgQEAgdm9pZCBpbnRlbF9scmNfaXJxX2hhbmRsZXIoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqcmluZykKIAl1MzIgc3RhdHVzX2lkOwogCXUzMiBzdWJtaXRfY29udGV4dHMgPSAw OwogCisJaWYgKGRvX2xvY2spCisJCXNwaW5fbG9jaygmcmluZy0+ZXhlY2xpc3RfbG9jayk7CisK IAlzdGF0dXNfcG9pbnRlciA9IEk5MTVfUkVBRChSSU5HX0NPTlRFWFRfU1RBVFVTX1BUUihyaW5n KSk7CiAKIAlyZWFkX3BvaW50ZXIgPSByaW5nLT5uZXh0X2NvbnRleHRfc3RhdHVzX2J1ZmZlcjsK QEAgLTcyMyw4ICs3MzAsNiBAQCB2b2lkIGludGVsX2xyY19pcnFfaGFuZGxlcihzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICpyaW5nKQogCWlmIChyZWFkX3BvaW50ZXIgPiB3cml0ZV9wb2ludGVyKQog CQl3cml0ZV9wb2ludGVyICs9IEdFTjhfQ1NCX0VOVFJJRVM7CiAKLQlzcGluX2xvY2soJnJpbmct PmV4ZWNsaXN0X2xvY2spOwotCiAJd2hpbGUgKHJlYWRfcG9pbnRlciA8IHdyaXRlX3BvaW50ZXIp IHsKIAkJcmVhZF9wb2ludGVyKys7CiAJCXN0YXR1cyA9IEk5MTVfUkVBRChSSU5HX0NPTlRFWFRf U1RBVFVTX0JVRl9MTyhyaW5nLCByZWFkX3BvaW50ZXIgJSBHRU44X0NTQl9FTlRSSUVTKSk7CkBA IC03NTcsOCArNzYyLDYgQEAgdm9pZCBpbnRlbF9scmNfaXJxX2hhbmRsZXIoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqcmluZykKIAkJZXhlY2xpc3RzX2NvbnRleHRfdW5xdWV1ZShyaW5nLCBmYWxz ZSk7CiAJfQogCi0Jc3Bpbl91bmxvY2soJnJpbmctPmV4ZWNsaXN0X2xvY2spOwotCiAJV0FSTihz dWJtaXRfY29udGV4dHMgPiAyLCAiTW9yZSB0aGFuIHR3byBjb250ZXh0IGNvbXBsZXRlIGV2ZW50 cz9cbiIpOwogCXJpbmctPm5leHRfY29udGV4dF9zdGF0dXNfYnVmZmVyID0gd3JpdGVfcG9pbnRl ciAlIEdFTjhfQ1NCX0VOVFJJRVM7CiAKQEAgLTc2Niw2ICs3NjksMTEgQEAgdm9pZCBpbnRlbF9s cmNfaXJxX2hhbmRsZXIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKIAkJICAgX01BU0tF RF9GSUVMRChHRU44X0NTQl9QVFJfTUFTSyA8PCA4LAogCQkJCSAoKHUzMilyaW5nLT5uZXh0X2Nv bnRleHRfc3RhdHVzX2J1ZmZlciAmCiAJCQkJICBHRU44X0NTQl9QVFJfTUFTSykgPDwgOCkpOwor CisJaWYgKGRvX2xvY2spCisJCXNwaW5fdW5sb2NrKCZyaW5nLT5leGVjbGlzdF9sb2NrKTsKKwor CXJldHVybiBzdWJtaXRfY29udGV4dHM7CiB9CiAKIHN0YXRpYyBpbnQgZXhlY2xpc3RzX2NvbnRl eHRfcXVldWUoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0KQpAQCAtMTc3MCw2 ICsxNzc4LDcgQEAgc3RhdGljIGludCBnZW44X2luaXRfY29tbW9uX3Jpbmcoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqcmluZykKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmluZy0+ZGV2Owog CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJ dTggbmV4dF9jb250ZXh0X3N0YXR1c19idWZmZXJfaHc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsK IAogCWxyY19zZXR1cF9oYXJkd2FyZV9zdGF0dXNfcGFnZShyaW5nLAogCQkJCXJpbmctPmRlZmF1 bHRfY29udGV4dC0+ZW5naW5lW3JpbmctPmlkXS5zdGF0ZSk7CkBAIC0xNzg4LDYgKzE3OTcsNyBA QCBzdGF0aWMgaW50IGdlbjhfaW5pdF9jb21tb25fcmluZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICpyaW5nKQogCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoR0ZYX1JVTl9MSVNUX0VOQUJMRSkpOwog CVBPU1RJTkdfUkVBRChSSU5HX01PREVfR0VONyhyaW5nKSk7CiAKKwlzcGluX2xvY2tfaXJxc2F2 ZSgmcmluZy0+ZXhlY2xpc3RfbG9jaywgZmxhZ3MpOwogCS8qCiAJICogSW5zdGVhZCBvZiByZXNl dHRpbmcgdGhlIENvbnRleHQgU3RhdHVzIEJ1ZmZlciAoQ1NCKSByZWFkIHBvaW50ZXIgdG8KIAkg KiB6ZXJvLCB3ZSBuZWVkIHRvIHJlYWQgdGhlIHdyaXRlIHBvaW50ZXIgZnJvbSBoYXJkd2FyZSBh bmQgdXNlIGl0cwpAQCAtMTgxMCw2ICsxODIwLDggQEAgc3RhdGljIGludCBnZW44X2luaXRfY29t bW9uX3Jpbmcoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKIAkJbmV4dF9jb250ZXh0X3N0 YXR1c19idWZmZXJfaHcgPSAoR0VOOF9DU0JfRU5UUklFUyAtIDEpOwogCiAJcmluZy0+bmV4dF9j b250ZXh0X3N0YXR1c19idWZmZXIgPSBuZXh0X2NvbnRleHRfc3RhdHVzX2J1ZmZlcl9odzsKKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZyaW5nLT5leGVjbGlzdF9sb2NrLCBmbGFncyk7CisKIAlE Uk1fREVCVUdfRFJJVkVSKCJFeGVjbGlzdHMgZW5hYmxlZCBmb3IgJXNcbiIsIHJpbmctPm5hbWUp OwogCiAJaTkxNV9oYW5nY2hlY2tfcmVpbml0KHJpbmcpOwpAQCAtMzE5MiwzICszMjA0LDY0IEBA IGludGVsX2V4ZWNsaXN0c19URFJfZ2V0X2N1cnJlbnRfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICpyaW5nLAogCiAJcmV0dXJuIHN0YXR1czsKIH0KKworLyoqCisgKiBleGVjbGlzdHNf VERSX2ZvcmNlX0NTQl9jaGVjaygpIC0gcmVjdGlmeSBpbmNvbnNpc3RlbmN5IGJ5IGZha2luZyBJ UlEKKyAqIEBkZXZfcHJpdjogLi4uCisgKiBAZW5naW5lOiBlbmdpbmUgd2hvc2UgQ1NCIGlzIHRv IGJlIGNoZWNrZWQuCisgKgorICogQ29udGV4dCBzdWJtaXNzaW9uIHN0YXR1cyBpbmNvbnNpc3Rl bmNpZXMgYXJlIGNhdXNlZCBieSBsb3N0IGludGVycnVwdHMgdGhhdAorICogbGVhdmUgQ1NCIGV2 ZW50cyB1bnByb2Nlc3NlZCBhbmQgbGVhdmUgY29udGV4dHMgaW4gdGhlIGV4ZWNsaXN0IHF1ZXVl cyB3aGVuCisgKiB0aGV5IHNob3VsZCByZWFsbHkgaGF2ZSBiZWVuIHJlbW92ZWQuIFRoZXNlIHN0 YWxlIGNvbnRleHRzIGJsb2NrIGZ1cnRoZXIKKyAqIHN1Ym1pc3Npb25zIHRvIHRoZSBoYXJkd2Fy ZSAoYWxsIHRoZSB3aGlsZSB0aGUgaGFyZHdhcmUgaXMgc2l0dGluZyBpZGxlKSBhbmQKKyAqIHRo ZXJlYnkgY2F1c2UgYSBzb2Z0d2FyZSBoYW5nLiBUaGUgd2F5IHRvIHJlY3RpZnkgdGhpcyBpcyBi eSBtYW51YWxseQorICogY2hlY2tpbmcgdGhlIENTQiBidWZmZXIgZm9yIG91dHN0YW5kaW5nIGNv bnRleHQgc3RhdGUgdHJhbnNpdGlvbiBldmVudHMgYW5kCisgKiBhY3Rpbmcgb24gdGhlc2UuIFRo ZSBlYXNpZXN0IHdheSBvZiBkb2luZyB0aGlzIGlzIGJ5IHNpbXBseSBmYWtpbmcgdGhlCisgKiBw cmVzdW1lZCBsb3N0IGNvbnRleHQgZXZlbnQgaW50ZXJydXB0IGJ5IG1hbnVhbGx5IGNhbGxpbmcg dGhlIGludGVycnVwdAorICogaGFuZGxlci4gSWYgdGhlcmUgYXJlIGluZGVlZCBvdXRzdGFuZGlu ZywgdW5wcm9jZXNzZWQgQ1NCIGV2ZW50cyB0aGVuIHRoZXNlCisgKiB3aWxsIGJlIHByb2Nlc3Nl ZCBieSB0aGUgZmFrZWQgaW50ZXJydXB0IGNhbGwgYW5kIGlmIG9uZSBvZiB0aGVzZSBldmVudHMg aXMKKyAqIHNvbWUgZm9ybSBvZiBjb250ZXh0IGNvbXBsZXRpb24gZXZlbnQgdGhlbiB0aGF0IHdp bGwgcHVyZ2UgYSBzdGFsZSBjb250ZXh0CisgKiBmcm9tIHRoZSBleGVjbGlzdCBxdWV1ZSBhbmQg c3VibWl0IGEgbmV3IGNvbnRleHQgdG8gaGFyZHdhcmUgZnJvbSB0aGUgcXVldWUsCisgKiB0aGVy ZWJ5IHJlc3VtaW5nIGV4ZWN1dGlvbi4KKyAqCisgKiBSZXR1cm5zOgorICogCVRydWU6IEZvcmNl ZCBDU0IgY2hlY2sgc3VjY2Vzc2Z1bCwgc3RhdGUgY29uc2lzdGVuY3kgcmVzdG9yZWQuCisgKiAJ RmFsc2U6IE5vIENTQiBldmVudHMgZm91bmQsIGZvcmNlZCBDU0IgY2hlY2sgdW5zdWNjZXNzZnVs LCBmYWlsZWQKKyAqIAkgICAgICAgdHJ5aW5nIHRvIHJlc3RvcmUgY29uc2lzdGVuY3kuCisgKi8K K2Jvb2wgaW50ZWxfZXhlY2xpc3RzX1REUl9mb3JjZV9DU0JfY2hlY2soc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCQkgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJYm9vbCBod19hY3RpdmU7CisJaW50IHdhc19l ZmZlY3RpdmU7CisKKwlod19hY3RpdmUgPQorCQkoSTkxNV9SRUFEKFJJTkdfRVhFQ0xJU1RfU1RB VFVTX0xPKGVuZ2luZSkpICYKKwkJCUVYRUNMSVNUX1NUQVRVU19DVVJSRU5UX0FDVElWRV9FTEVN RU5UX1NUQVRVUykgPworCQkJCXRydWUgOiBmYWxzZTsKKwlpZiAoaHdfYWN0aXZlKSB7CisJCXUz MiBod19jb250ZXh0OworCisJCWh3X2NvbnRleHQgPSBJOTE1X1JFQUQoUklOR19FWEVDTElTVF9T VEFUVVNfQ1RYX0lEKGVuZ2luZSkpOworCQlXQVJOKGh3X2FjdGl2ZSwgIkNvbnRleHQgKCV4KSBl eGVjdXRpbmcgb24gJXMgLSAiIFwKKwkJCQkiTm8gbmVlZCBmb3IgZmFrZWQgSVJRIVxuIiwKKwkJ CQlod19jb250ZXh0LCBlbmdpbmUtPm5hbWUpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJc3Bp bl9sb2NrX2lycXNhdmUoJmVuZ2luZS0+ZXhlY2xpc3RfbG9jaywgZmxhZ3MpOworCisJV0FSTigx LCAiJXM6IEluY29uc2lzdGVudCBjb250ZXh0IHN0YXRlIC0gRmFraW5nIGNvbnRleHQgZXZlbnQg SVJRIVxuIiwKKwkJZW5naW5lLT5uYW1lKTsKKworCWlmICghKHdhc19lZmZlY3RpdmUgPSBpbnRl bF9scmNfaXJxX2hhbmRsZXIoZW5naW5lLCBmYWxzZSkpKQorCQlEUk1fRVJST1IoIkZvcmNlZCBD U0IgY2hlY2sgb2YgJXMgaW5lZmZlY3RpdmUhXG4iLCBlbmdpbmUtPm5hbWUpOworCisJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT5leGVjbGlzdF9sb2NrLCBmbGFncyk7CisKKwl3YWtl X3VwX2FsbCgmZW5naW5lLT5pcnFfcXVldWUpOworCisJcmV0dXJuICEhd2FzX2VmZmVjdGl2ZTsK K30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaAppbmRleCA1OTNmNWU3Li5mZmI0MTU5IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9scmMuaApAQCAtOTcsNyArOTcsNyBAQCBpbnQgaW50ZWxfZXhlY2xp c3RzX3N1Ym1pc3Npb24oc3RydWN0IGk5MTVfZXhlY2J1ZmZlcl9wYXJhbXMgKnBhcmFtcywKIAkJ CSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICp2bWFzKTsKIHUzMiBpbnRlbF9leGVjbGlzdHNfY3R4 X2lkKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpjdHhfb2JqKTsKIAotdm9pZCBpbnRlbF9s cmNfaXJxX2hhbmRsZXIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7CitpbnQgaW50ZWxf bHJjX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsIGJvb2wgZG9fbG9j ayk7CiB2b2lkIGludGVsX2V4ZWNsaXN0c19yZXRpcmVfcmVxdWVzdHMoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqcmluZyk7CiAKIGludCBpbnRlbF9leGVjbGlzdHNfcmVhZF90YWlsKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKnJpbmcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9scmNfdGRyLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmNfdGRyLmgKaW5k ZXggNDUyMDc1My4uMDQxYzgwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfbHJjX3Rkci5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyY190ZHIuaApA QCAtMzIsNSArMzIsOCBAQCBlbnVtIGNvbnRleHRfc3VibWlzc2lvbl9zdGF0dXMKIGludGVsX2V4 ZWNsaXN0c19URFJfZ2V0X2N1cnJlbnRfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpy aW5nLAogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKipyZXEpOwogCitib29sIGludGVs X2V4ZWNsaXN0c19URFJfZm9yY2VfQ1NCX2NoZWNrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKKwkJCQkJIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7CisKICNlbmRp ZiAvKiBfSU5URUxfTFJDX1REUl9IXyAqLwogCi0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRl bC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK