From mboxrd@z Thu Jan 1 00:00:00 1970 From: John.C.Harrison@Intel.com Subject: [RFC 6/9] drm/i915: Add sync framework support to execbuff IOCTL Date: Wed, 13 Jan 2016 17:57:32 +0000 Message-ID: <1452707855-9791-7-git-send-email-John.C.Harrison@Intel.com> References: <1452707855-9791-1-git-send-email-John.C.Harrison@Intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 96C036E980 for ; Wed, 13 Jan 2016 09:58:13 -0800 (PST) In-Reply-To: <1452707855-9791-1-git-send-email-John.C.Harrison@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 RnJvbTogSm9obiBIYXJyaXNvbiA8Sm9obi5DLkhhcnJpc29uQEludGVsLmNvbT4KClZhcmlvdXMg cHJvamVjdHMgZGVzaXJlIGEgbWVjaGFuaXNtIGZvciBtYW5hZ2luZyBkZXBlbmRlbmNpZXMgYmV0 d2Vlbgp3b3JrIGl0ZW1zIGFzeW5jaHJvbm91c2x5LiBUaGlzIGNhbiBhbHNvIGluY2x1ZGUgd29y ayBpdGVtcyBhY3Jvc3MKY29tcGxldGUgZGlmZmVyZW50IGFuZCBpbmRlcGVuZGVudCBzeXN0ZW1z LiBGb3IgZXhhbXBsZSwgYW4KYXBwbGljYXRpb24gd2FudHMgdG8gcmV0cmlldmUgYSBmcmFtZSBm cm9tIGEgdmlkZW8gaW4gZGV2aWNlLAp1c2luZyBpdCBmb3IgcmVuZGVyaW5nIG9uIGEgR1BVIHRo ZW4gc2VuZCBpdCB0byB0aGUgdmlkZW8gb3V0IGRldmljZQpmb3IgZGlzcGxheSBhbGwgd2l0aG91 dCBoYXZpbmcgdG8gc3RhbGwgd2FpdGluZyBmb3IgY29tcGxldGlvbiBhbG9uZwp0aGUgd2F5LiBU aGUgc3luYyBmcmFtZXdvcmsgYWxsb3dzIHRoaXMuIEl0IGVuY2Fwc3VsYXRlcwpzeW5jaHJvbmlz YXRpb24gZXZlbnRzIGluIGZpbGUgZGVzY3JpcHRvcnMuIFRoZSBhcHBsaWNhdGlvbiBjYW4KcmVx dWVzdCBhIHN5bmMgcG9pbnQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIGVhY2ggcGllY2Ugb2Ygd29y ay4gRHJpdmVycwpzaG91bGQgYWxzbyB0YWtlIHN5bmMgcG9pbnRzIGluIHdpdGggZWFjaCBuZXcg d29yayByZXF1ZXN0IGFuZCBub3QKc2NoZWR1bGUgdGhlIHdvcmsgdG8gc3RhcnQgdW50aWwgdGhl IHN5bmMgaGFzIGJlZW4gc2lnbmFsbGVkLgoKVGhpcyBwYXRjaCBhZGRzIHN5bmMgZnJhbWV3b3Jr IHN1cHBvcnQgdG8gdGhlIGV4ZWMgYnVmZmVyIElPQ1RMLiBBCnN5bmMgcG9pbnQgY2FuIGJlIHBh c3NlZCBpbiB0byBzdGFsbCBleGVjdXRpb24gb2YgdGhlIGJhdGNoIGJ1ZmZlcgp1bnRpbCBzaWdu YWxsZWQuIEFuZCBhIHN5bmMgcG9pbnQgY2FuIGJlIHJldHVybmVkIGFmdGVyIGVhY2ggYmF0Y2gK YnVmZmVyIHN1Ym1pc3Npb24gd2hpY2ggd2lsbCBiZSBzaWduYWxsZWQgdXBvbiB0aGF0IGJhdGNo IGJ1ZmZlcidzCmNvbXBsZXRpb24uCgpBdCBwcmVzZW50LCB0aGUgaW5wdXQgc3luYyBwb2ludCBp cyBzaW1wbHkgd2FpdGVkIG9uIHN5bmNocm9ub3VzbHkKaW5zaWRlIHRoZSBleGVjIGJ1ZmZlciBJ T0NUTCBjYWxsLiBPbmNlIHRoZSBHUFUgc2NoZWR1bGVyIGFycml2ZXMsCnRoaXMgd2lsbCBiZSBo YW5kbGVkIGFzeW5jaHJvbm91c2x5IGluc2lkZSB0aGUgc2NoZWR1bGVyIGFuZCB0aGUgSU9DVEwK Y2FuIHJldHVybiB3aXRob3V0IGhhdmluZyB0byB3YWl0LgoKTm90ZSBhbHNvIHRoYXQgdGhlIHNj aGVkdWxlciB3aWxsIHJlLW9yZGVyIHRoZSBleGVjdXRpb24gb2YgYmF0Y2gKYnVmZmVycywgZS5n LiBiZWNhdXNlIGEgYmF0Y2ggYnVmZmVyIGlzIHN0YWxsZWQgb24gYSBzeW5jIHBvaW50IGFuZApj YW5ub3QgYmUgc3VibWl0dGVkIHlldCBidXQgb3RoZXIsIGluZGVwZW5kZW50LCBiYXRjaCBidWZm ZXJzIGFyZQpiZWluZyBwcmVzZW50ZWQgdG8gdGhlIGRyaXZlci4gVGhpcyBtZWFucyB0aGF0IHRo ZSB0aW1lbGluZSB3aXRoaW4gdGhlCnN5bmMgcG9pbnRzIHJldHVybmVkIGNhbm5vdCBiZSBnbG9i YWwgdG8gdGhlIGVuZ2luZS4gSW5zdGVhZCB0aGV5IG11c3QKYmUga2VwdCBwZXIgY29udGV4dCBw ZXIgZW5naW5lICh0aGUgc2NoZWR1bGVyIG1heSBub3QgcmUtb3JkZXIgYmF0Y2hlcwp3aXRoaW4g YSBjb250ZXh0KS4gSGVuY2UgdGhlIHRpbWVsaW5lIGNhbm5vdCBiZSBiYXNlZCBvbiB0aGUgZXhp c3RpbmcKc2Vxbm8gdmFsdWVzIGJ1dCBtdXN0IGJlIGEgbmV3IGltcGxlbWVudGF0aW9uLgoKVGhp cyBwYXRjaCBpcyBhIHBvcnQgb2Ygd29yayBieSBzZXZlcmFsIHBlb3BsZSB0aGF0IGhhcyBiZWVu IHB1bGxlZAphY3Jvc3MgZnJvbSBBbmRyb2lkLiBJdCBoYXMgYmVlbiB1cGRhdGVkIHNldmVyYWwg dGltZXMgYWNyb3NzIHNldmVyYWwKcGF0Y2hlcy4gUmF0aGVyIHRoYW4gYXR0ZW1wdCB0byBwb3J0 IGVhY2ggaW5kaXZpZHVhbCBwYXRjaCwgdGhpcwp2ZXJzaW9uIGlzIHRoZSBmaW5pc2hlZCBwcm9k dWN0IGFzIGEgc2luZ2xlIHBhdGNoLiBUaGUgdmFyaW91cwpjb250cmlidXRvcnMvYXV0aG9ycyBh bG9uZyB0aGUgd2F5IChpbiBhZGRpdGlvbiB0byBteXNlbGYpIHdlcmU6CiAgU2F0eWFuYW50aGEg UmFtYUdvcGFsIE0gPHJhbWEuZ29wYWwubS5zYXR5YW5hbnRoYUBpbnRlbC5jb20+CiAgVHZydGtv IFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KICBNaWNoZWwgVGhpZXJyeSA8bWlj aGVsLnRoaWVycnlAaW50ZWwuY29tPgogIEFydW4gU2lsdXZlcnkgPGFydW4uc2lsdXZlcnlAbGlu dXguaW50ZWwuY29tPgoKdjAuMjogTmV3IHBhdGNoIGluIHNlcmllcy4KCnYwLjM6IFVwZGF0ZWQg dG8gdXNlIHRoZSBuZXcgJ3N5bmNfZmVuY2VfaXNfc2lnbmFsZWQnIEFQSSByYXRoZXIgdGhhbgpo YXZpbmcgdG8ga25vdyBhYm91dCB0aGUgaW50ZXJuYWwgbWVhbmluZyBvZiB0aGUgJ2ZlbmNlOjpz dGF0dXMnIGZpZWxkCih3aGljaCByZWNlbnRseSBnb3QgaW52ZXJ0ZWQhKSBbd29yayBieSBQZXRl ciBMYXd0aGVyc10uCgpVcGRhdGVkIGFmdGVyIHJldmlldyBjb21tZW50cyBieSBEYW5pZWwgVmV0 dGVyLiBSZW1vdmVkICcjaWZkZWYKQ09ORklHX1NZTkMnIGFuZCBhZGQgJ3NlbGVjdCBTWU5DJyB0 byB0aGUgS2NvbmZpZyBpbnN0ZWFkLiBNb3ZlZCB0aGUKZmQgaW5zdGFsbGF0aW9uIG9mIGZlbmNl cyB0byB0aGUgZW5kIG9mIHRoZSBleGVjYnVmZiBjYWxsIHRvIGluIG9yZGVyCnRvIHJlbW92ZSB0 aGUgbmVlZCB0byB1c2UgJ3N5c19jbG9zZScgdG8gY2xlYW4gdXAgb24gZmFpbHVyZS4KClVwZGF0 ZWQgYWZ0ZXIgcmV2aWV3IGNvbW1lbnRzIGJ5IFR2cnRrbyBVcnN1bGluLiBSZW12b2VkIHRoZQon ZmVuY2VfZXh0ZXJuYWwnIGZsYWcgYXMgcmVkdW5kYW50LiBDb3ZuZXJ0ZWQgRFJNX0VSUk9ScyB0 bwpEUk1fREVCVUdzLiBDaGFuZ2VkIG9uZSBzZWNvbmQgd2FpdCB0byBhIHdhaXQgZm9yZXZlciB3 aGVuIHdhaXRpbmcgb24KaW5jb21pbmcgZmVuY2VzLgoKdjAuNDogUmUtaW5zdGF0ZWQgbWlzc2lu ZyByZXR1cm4gb2YgZmQgdG8gdXNlciBsYW5kIHRoYXQgc29tZWhvdyBnb3QKbG9zdCBpbiB0aGUg YW50aS1zeXNfY2xvc2UoKSByZS1mYWN0b3IuCgp2MC41OiBDb3JyZWN0IHR5cG8gaW4gY29tbWl0 IG1lc3NhZ2UuIFR3aWRkbGVkIHdoaXRlIHNwYWNlIGFuZCB3cmFwcGVkCnNvbWUgbG9uZyBsaW5l cyB0byBrZWVwIHN0eWxlIGNoZWNrZXIgaGFwcHkuCgpDb3JyZWN0ZWQgcmV0dXJuIGNvZGVzLCBy ZW1vdmVkIHJlZHVuZGFudCB0ZXN0IGFuZCBhZGRlZCBhIGRlc2NyaXB0aXZlCmNvbW1lbnQgdG8g aTkxNV9lYXJseV9mZW5jZV93YWl0KCkgLSByZXZpZXcgZmVlZGJhY2sgZnJvbSBUdnJ0a28uCgpB bHNvLCBwYXRjaCBhcHBlYXJzIHNvbWV3aGF0IGRpZmZlcmVudCBpbiBhIGZldyBwbGFjZXMgZHVl IHRvIGJlaW5nCnJlYmFzZWQgYWZ0ZXIgdGhlIHNjaGVkdWxlciBwYXRjaGVzIHJhdGhlciB0aGFu IGJlZm9yZS4KCkZvcjogVklaLTUxOTAKU2lnbmVkLW9mZi1ieTogSm9obiBIYXJyaXNvbiA8Sm9o bi5DLkhhcnJpc29uQEludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogUGV0ZXIgTGF3dGhlcnMgPHBl dGVyLmxhd3RoZXJzQGludGVsLmNvbT4KQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxp bkBpbnRlbC5jb20+CkNjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+Ci0tLQogZHJp dmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZyAgICAgICAgICAgICAgIHwgICAzICsKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICAgICB8ICAgNyArKwogZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAgICAgIHwgIDkwICsrKysrKysrKysrKysrKysrKysr KysrKystCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMgfCAxMDAg KysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KIGluY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0u aCAgICAgICAgICAgICAgICB8ICAxNiArKysrLQogNSBmaWxlcyBjaGFuZ2VkLCAyMDYgaW5zZXJ0 aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWcKaW5kZXggMWQ5NmZlMS4u Y2I1ZDViMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmlnCkBAIC0yMiw2ICsyMiw5IEBAIGNvbmZpZyBEUk1f STkxNQogCXNlbGVjdCBBQ1BJX1ZJREVPIGlmIEFDUEkKIAlzZWxlY3QgQUNQSV9CVVRUT04gaWYg QUNQSQogCXNlbGVjdCBNTVVfTk9USUZJRVIKKwkjIEFORFJPSUQgaXMgcmVxdWlyZWQgZm9yIFNZ TkMKKwlzZWxlY3QgQU5EUk9JRAorCXNlbGVjdCBTWU5DCiAJaGVscAogCSAgQ2hvb3NlIHRoaXMg b3B0aW9uIGlmIHlvdSBoYXZlIGEgc3lzdGVtIHRoYXQgaGFzICJJbnRlbCBHcmFwaGljcwogCSAg TWVkaWEgQWNjZWxlcmF0b3IiIG9yICJIRCBHcmFwaGljcyIgaW50ZWdyYXRlZCBncmFwaGljcywK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDIwYzhhMDYuLjdjOWE2ZWMgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaApAQCAtMjMyMyw2ICsyMzIzLDEzIEBAIHZvaWQgaTkxNV9nZW1fcmVxdWVz dF9ub3RpZnkoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywgYm9vbCBmZW5jZV9sb2NrZWQp OwogaW50IGk5MTVfY3JlYXRlX2ZlbmNlX3RpbWVsaW5lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs CiAJCQkgICAgICAgc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCwKIAkJCSAgICAgICBzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nKTsKK3N0cnVjdCBzeW5jX2ZlbmNlOworaW50IGk5MTVfY3Jl YXRlX3N5bmNfZmVuY2Uoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCisJCQkgICBz dHJ1Y3Qgc3luY19mZW5jZSAqKnN5bmNfZmVuY2UsIGludCAqZmVuY2VfZmQpOwordm9pZCBpOTE1 X2luc3RhbGxfc3luY19mZW5jZV9mZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwK KwkJCQlzdHJ1Y3Qgc3luY19mZW5jZSAqc3luY19mZW5jZSwgaW50IGZlbmNlX2ZkKTsKK2Jvb2wg aTkxNV9zYWZlX3RvX2lnbm9yZV9mZW5jZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAor CQkJICAgICAgIHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSk7CiAKIHN0YXRpYyBpbmxpbmUgYm9v bCBpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qg KnJlcSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDA1ZjU1ZGIuLjc1OWQ2MjYgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4 L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtYnVm Lmg+CisjaW5jbHVkZSA8Li4vZHJpdmVycy9hbmRyb2lkL3N5bmMuaD4KICNpbmNsdWRlICJpOTE1 X3NjaGVkdWxlci5oIgogCiAjZGVmaW5lIFJRX0JVR19PTihleHByKQpAQCAtMjYzOSw3ICsyNjQw LDEzIEBAIHZvaWQgX19pOTE1X2FkZF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcmVxdWVzdCwKIAogCS8qCiAJICogQWRkIHRoZSBmZW5jZSB0byB0aGUgcGVuZGluZyBsaXN0 IGJlZm9yZSBlbWl0dGluZyB0aGUgY29tbWFuZHMgdG8KLQkgKiBnZW5lcmF0ZSBhIHNlcW5vIG5v dGlmaWNhdGlvbiBpbnRlcnJ1cHQuCisJICogZ2VuZXJhdGUgYSBzZXFubyBub3RpZmljYXRpb24g aW50ZXJydXB0LiBUaGlzIHdpbGwgYWxzbyBlbmFibGUKKwkgKiBpbnRlcnJ1cHRzIGlmICdzaWdu YWxfcmVxdWVzdGVkJyBoYXMgYmVlbiBzZXQuCisJICoKKwkgKiBGb3IgZXhhbXBsZSwgaWYgYW4g ZXhwb3J0ZWQgc3luYyBwb2ludCBoYXMgYmVlbiByZXF1ZXN0ZWQgZm9yIHRoaXMKKwkgKiByZXF1 ZXN0IHRoZW4gaXQgY2FuIGJlIHdhaXRlZCBvbiB3aXRob3V0IHRoZSBkcml2ZXIncyBrbm93bGVk Z2UsCisJICogaS5lLiB3aXRob3V0IGNhbGxpbmcgX19pOTE1X3dhaXRfcmVxdWVzdCgpLiBUaHVz IGludGVycnVwdHMgbXVzdAorCSAqIGJlIGVuYWJsZWQgZnJvbSB0aGUgc3RhcnQgcmF0aGVyIHRo YW4gb25seSBvbiBkZW1hbmQuCiAJICovCiAJaTkxNV9nZW1fcmVxdWVzdF9zdWJtaXQocmVxdWVz dCk7CiAKQEAgLTMwMjAsNiArMzAyNyw4NyBAQCBzdGF0aWMgdW5zaWduZWQgaTkxNV9mZW5jZV90 aW1lbGluZV9nZXRfbmV4dF9zZXFubyhzdHJ1Y3QgaTkxNV9mZW5jZV90aW1lbGluZSAqdAogCXJl dHVybiBzZXFubzsKIH0KIAoraW50IGk5MTVfY3JlYXRlX3N5bmNfZmVuY2Uoc3RydWN0IGRybV9p OTE1X2dlbV9yZXF1ZXN0ICpyZXEsCisJCQkgICBzdHJ1Y3Qgc3luY19mZW5jZSAqKnN5bmNfZmVu Y2UsIGludCAqZmVuY2VfZmQpCit7CisJY2hhciByaW5nX25hbWVbXSA9ICJpOTE1X3JpbmcwIjsK KwlpbnQgZmQ7CisKKwlmZCA9IGdldF91bnVzZWRfZmRfZmxhZ3MoT19DTE9FWEVDKTsKKwlpZiAo ZmQgPCAwKSB7CisJCURSTV9ERUJVRygiTm8gYXZhaWxhYmxlIGZpbGUgZGVzY3JpcHRvcnMhXG4i KTsKKwkJKmZlbmNlX2ZkID0gLTE7CisJCXJldHVybiBmZDsKKwl9CisKKwlyaW5nX25hbWVbOV0g Kz0gcmVxLT5yaW5nLT5pZDsKKwkqc3luY19mZW5jZSA9IHN5bmNfZmVuY2VfY3JlYXRlX2RtYShy aW5nX25hbWUsICZyZXEtPmZlbmNlKTsKKwlpZiAoISpzeW5jX2ZlbmNlKSB7CisJCXB1dF91bnVz ZWRfZmQoZmQpOworCQkqZmVuY2VfZmQgPSAtMTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJ KmZlbmNlX2ZkID0gZmQ7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBpOTE1X2luc3RhbGxfc3lu Y19mZW5jZV9mZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKKwkJCQlzdHJ1Y3Qg c3luY19mZW5jZSAqc3luY19mZW5jZSwgaW50IGZlbmNlX2ZkKQoreworCXN5bmNfZmVuY2VfaW5z dGFsbChzeW5jX2ZlbmNlLCBmZW5jZV9mZCk7CisKKwkvKgorCSAqIE5COiBUaGUgY29ycmVzcG9u ZGluZyBwdXQgaGFwcGVucyBhdXRvbWF0aWNhbGx5IG9uIGZpbGUgY2xvc2UKKwkgKiBmcm9tIHN5 bmNfZmVuY2VfcmVsZWFzZSgpIHZpYSB0aGUgZm9wcyBjYWxsYmFjay4KKwkgKi8KKwlmZW5jZV9n ZXQoJnJlcS0+ZmVuY2UpOworCisJLyoKKwkgKiBUaGUgc3luYyBmcmFtZXdvcmsgYWRkcyBhIGNh bGxiYWNrIHRvIHRoZSBmZW5jZS4gVGhlIGZlbmNlCisJICogZnJhbWV3b3JrIGNhbGxzICdlbmFi bGVfc2lnbmFsbGluZycgd2hlbiBhIGNhbGxiYWNrIGlzIGFkZGVkLgorCSAqIFRodXMgdGhpcyBm bGFnIHNob3VsZCBoYXZlIGJlZW4gc2V0IGJ5IG5vdy4gSWYgbm90IHRoZW4KKwkgKiAnZW5hYmxl X3NpZ25hbGxpbmcnIG11c3QgYmUgY2FsbGVkIGV4cGxpY2l0bHkgYmVjYXVzZSBleHBvcnRpbmcK KwkgKiBhIGZlbmNlIHRvIHVzZXIgbGFuZCBtZWFucyBpdCBjYW4gYmUgd2FpdGVkIG9uIGFzeW5j aHJvbm91c2x5IGFuZAorCSAqIHRodXMgbXVzdCBiZSBzaWduYWxsZWQgYXN5bmNocm9ub3VzbHku CisJICovCisJV0FSTl9PTighcmVxLT5zaWduYWxfcmVxdWVzdGVkKTsKK30KKworYm9vbCBpOTE1 X3NhZmVfdG9faWdub3JlX2ZlbmNlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCisJCQkg ICAgICAgc3RydWN0IHN5bmNfZmVuY2UgKnN5bmNfZmVuY2UpCit7CisJc3RydWN0IGZlbmNlICpk bWFfZmVuY2U7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXE7CisJaW50IGk7CisK KwlpZiAoc3luY19mZW5jZV9pc19zaWduYWxlZChzeW5jX2ZlbmNlKSkKKwkJcmV0dXJuIHRydWU7 CisKKwlmb3IgKGkgPSAwOyBpIDwgc3luY19mZW5jZS0+bnVtX2ZlbmNlczsgaSsrKSB7CisJCWRt YV9mZW5jZSA9IHN5bmNfZmVuY2UtPmNic1tpXS5zeW5jX3B0OworCisJCS8qIE5vIG5lZWQgdG8g d29ycnkgYWJvdXQgZGVhZCBwb2ludHM6ICovCisJCWlmIChmZW5jZV9pc19zaWduYWxlZChkbWFf ZmVuY2UpKQorCQkJY29udGludWU7CisKKwkJLyogQ2FuJ3QgaWdub3JlIG90aGVyIHBlb3BsZSdz IHBvaW50czogKi8KKwkJaWYgKGRtYV9mZW5jZS0+b3BzICE9ICZpOTE1X2dlbV9yZXF1ZXN0X2Zv cHMpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJcmVxID0gY29udGFpbmVyX29mKGRtYV9mZW5jZSwg dHlwZW9mKCpyZXEpLCBmZW5jZSk7CisKKwkJLyogQ2FuJ3QgaWdub3JlIHBvaW50cyBvbiBvdGhl ciByaW5nczogKi8KKwkJaWYgKHJlcS0+cmluZyAhPSByaW5nKQorCQkJcmV0dXJuIGZhbHNlOwor CisJCS8qIFNhbWUgcmluZyBtZWFucyBndWFyYW50ZWVkIHRvIGJlIGluIG9yZGVyIHNvIGlnbm9y ZSBpdC4gKi8KKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogaW50IGk5MTVfZ2VtX3JlcXVlc3Rf YWxsb2Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKIAkJCSAgIHN0cnVjdCBpbnRlbF9j b250ZXh0ICpjdHgsCiAJCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKipyZXFfb3V0 KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCmluZGV4IDMwNTk0 NzUuLjM3MjkyMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4 ZWNidWZmZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVy LmMKQEAgLTI2LDYgKzI2LDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxz Lmg+CiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KICNpbmNsdWRlIDxkcm0vaTkxNV9kcm0uaD4KICNp bmNsdWRlICJpOTE1X2Rydi5oIgpAQCAtMzMsNiArMzQsNyBAQAogI2luY2x1ZGUgImludGVsX2Ry di5oIgogI2luY2x1ZGUgPGxpbnV4L2RtYV9yZW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC91 YWNjZXNzLmg+CisjaW5jbHVkZSA8Li4vZHJpdmVycy9hbmRyb2lkL3N5bmMuaD4KICNpbmNsdWRl ICJpOTE1X3NjaGVkdWxlci5oIgogCiAjZGVmaW5lICBfX0VYRUNfT0JKRUNUX0hBU19QSU4gKDE8 PDMxKQpAQCAtMTQwOSw2ICsxNDExLDQxIEBAIGViX2dldF9iYXRjaChzdHJ1Y3QgZWJfdm1hcyAq ZWIpCiAJcmV0dXJuIHZtYS0+b2JqOwogfQogCisvKgorICogRG8gYSBzeW5jaHJvbm91cyB3YWl0 IG9uIGFueSBpbmNvbWluZyBmZW5jZSBvYmplY3QgKHVudGlsIHRoZSBzY2hlZHVsZXIKKyAqIGFy cml2ZXMgYW5kIGltcGxlbWVudHMgYXN5bmNocm9ub3VzIHdhaXRzKS4gTkI6IFRoaXMgbXVzdCBi ZSBjYWxsZWQgYmVmb3JlCisgKiBhY3F1aXJpbmcgdGhlIGRyaXZlciBtdXRleCBsb2NrIQorICov CitzdGF0aWMgaW50IGk5MTVfZWFybHlfZmVuY2Vfd2FpdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICpyaW5nLCBpbnQgZmVuY2VfZmQpCit7CisJc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlOworCWlu dCByZXQgPSAwOworCisJaWYgKGZlbmNlX2ZkIDwgMCkgeworCQlEUk1fREVCVUcoIkludmFsaWQg d2FpdCBmZW5jZSBmZCAlZCBvbiByaW5nICVkXG4iLCBmZW5jZV9mZCwKKwkJCSAgKGludCkgcmlu Zy0+aWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmZW5jZSA9IHN5bmNfZmVuY2VfZmRn ZXQoZmVuY2VfZmQpOworCWlmIChmZW5jZSA9PSBOVUxMKSB7CisJCURSTV9ERUJVRygiSW52YWxp ZCB3YWl0IGZlbmNlICVkIG9uIHJpbmcgJWRcbiIsIGZlbmNlX2ZkLAorCQkJICAoaW50KSByaW5n LT5pZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogV2FpdCBmb3JldmVyIGZv ciB0aGUgZmVuY2UgdG8gYmUgc2lnbmFsbGVkLiBUaGlzIGlzIHNhZmUKKwkgKiBiZWNhdXNlIHRo ZSB0aGUgbXV0ZXggbG9jayBoYXMgbm90IHlldCBiZWVuIGFjcXVpcmVkIGFuZAorCSAqIHRoZSB3 YWl0IGlzIGludGVycnVwdGlibGUuCisJICovCisJaWYgKCFpOTE1X3NhZmVfdG9faWdub3JlX2Zl bmNlKHJpbmcsIGZlbmNlKSkKKwkJcmV0ID0gc3luY19mZW5jZV93YWl0KGZlbmNlLCAtMSk7CisK KwlzeW5jX2ZlbmNlX3B1dChmZW5jZSk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludAog aTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRh LAogCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlLApAQCAtMTQyOCw2ICsxNDY1LDE3IEBA IGk5MTVfZ2VtX2RvX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0 YSwKIAl1MzIgZGlzcGF0Y2hfZmxhZ3M7CiAJaW50IHJldCwgaTsKIAlib29sIG5lZWRfcmVsb2Nz OworCWludCBmZF9mZW5jZV9jb21wbGV0ZSA9IC0xOworCWludCBmZF9mZW5jZV93YWl0ID0gbG93 ZXJfMzJfYml0cyhhcmdzLT5yc3ZkMik7CisJc3RydWN0IHN5bmNfZmVuY2UgKnN5bmNfZmVuY2U7 CisKKwkvKgorCSAqIE1ha2Ugc3VyZSBhbiBicm9rZW4gZmVuY2UgaGFuZGxlIGlzIG5vdCByZXR1 cm5lZCBubyBtYXR0ZXIKKwkgKiBob3cgZWFybHkgYW4gZXJyb3IgbWlnaHQgYmUgaGl0LiBOb3Rl IHRoYXQgcnN2ZDIgaGFzIGJlZW4KKwkgKiBzYXZlZCBhd2F5IGFib3ZlIGJlY2F1c2UgaXQgaXMg YWxzbyBhbiBpbnB1dCBwYXJhbWV0ZXIhCisJICovCisJaWYgKGFyZ3MtPmZsYWdzICYgSTkxNV9F WEVDX0NSRUFURV9GRU5DRSkKKwkJYXJncy0+cnN2ZDIgPSAoX191NjQpIC0xOwogCiAJaWYgKCFp OTE1X2dlbV9jaGVja19leGVjYnVmZmVyKGFyZ3MpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE1 MTEsNiArMTU1OSwxNyBAQCBpOTE1X2dlbV9kb19leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEsCiAJCWRpc3BhdGNoX2ZsYWdzIHw9IEk5MTVfRElTUEFUQ0hfUlM7 CiAJfQogCisJLyoKKwkgKiBXaXRob3V0IGEgR1BVIHNjaGVkdWxlciwgYW55IGZlbmNlIHdhaXRz IG11c3QgYmUgZG9uZSB1cCBmcm9udC4KKwkgKi8KKwlpZiAoYXJncy0+ZmxhZ3MgJiBJOTE1X0VY RUNfV0FJVF9GRU5DRSkgeworCQlyZXQgPSBpOTE1X2Vhcmx5X2ZlbmNlX3dhaXQocmluZywgZmRf ZmVuY2Vfd2FpdCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlhcmdzLT5m bGFncyAmPSB+STkxNV9FWEVDX1dBSVRfRkVOQ0U7CisJfQorCiAJcmV0ID0gaTkxNV9tdXRleF9s b2NrX2ludGVycnVwdGlibGUoZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIHByZV9tdXRleF9lcnI7 CkBAIC0xNjk1LDEzICsxNzU0LDQxIEBAIGk5MTVfZ2VtX2RvX2V4ZWNidWZmZXIoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAlpOTE1X2dlbV9jb250ZXh0X3JlZmVyZW5jZShj dHgpOwogCXBhcmFtcy0+Y3R4ID0gY3R4OwogCisJaWYgKGFyZ3MtPmZsYWdzICYgSTkxNV9FWEVD X0NSRUFURV9GRU5DRSkgeworCQkvKgorCQkgKiBDYWxsZXIgaGFzIHJlcXVlc3RlZCBhIHN5bmMg ZmVuY2UuCisJCSAqIFVzZXIgaW50ZXJydXB0cyB3aWxsIGJlIGVuYWJsZWQgdG8gbWFrZSBzdXJl IHRoYXQKKwkJICogdGhlIHRpbWVsaW5lIGlzIHNpZ25hbGxlZCBvbiBjb21wbGV0aW9uLgorCQkg Ki8KKwkJcmV0ID0gaTkxNV9jcmVhdGVfc3luY19mZW5jZShwYXJhbXMtPnJlcXVlc3QsICZzeW5j X2ZlbmNlLAorCQkJCQkgICAgICZmZF9mZW5jZV9jb21wbGV0ZSk7CisJCWlmIChyZXQpIHsKKwkJ CURSTV9FUlJPUigiRmVuY2UgY3JlYXRpb24gZmFpbGVkIGZvciByaW5nICVkLCBjdHggJXBcbiIs CisJCQkJICByaW5nLT5pZCwgY3R4KTsKKwkJCWdvdG8gZXJyX2JhdGNoX3VucGluOworCQl9CisJ fQorCiAJcmV0ID0gZGV2X3ByaXYtPmd0LmV4ZWNidWZfc3VibWl0KHBhcmFtcywgYXJncywgJmVi LT52bWFzKTsKIAlpZiAocmV0KQotCQlnb3RvIGVycl9iYXRjaF91bnBpbjsKKwkJZ290byBlcnJf ZmVuY2U7CiAKIAkvKiB0aGUgcmVxdWVzdCBvd25zIHRoZSByZWYgbm93ICovCiAJaTkxNV9nZW1f Y29udGV4dF91bnJlZmVyZW5jZShjdHgpOwogCisJaWYgKGZkX2ZlbmNlX2NvbXBsZXRlICE9IC0x KSB7CisJCS8qCisJCSAqIEluc3RhbGwgdGhlIGZlbmNlIGludG8gdGhlIHByZS1hbGxvY2F0ZWQg ZmlsZQorCQkgKiBkZXNjcmlwdG9yIHRvIHRoZSBmZW5jZSBvYmplY3Qgc28gdGhhdCB1c2VyIGxh bmQKKwkJICogY2FuIHdhaXQgb24gaXQuLi4KKwkJICovCisJCWk5MTVfaW5zdGFsbF9zeW5jX2Zl bmNlX2ZkKHBhcmFtcy0+cmVxdWVzdCwKKwkJCQkJICAgc3luY19mZW5jZSwgZmRfZmVuY2VfY29t cGxldGUpOworCisJCS8qIFJldHVybiB0aGUgZmVuY2UgdGhyb3VnaCB0aGUgcnN2ZDIgZmllbGQg Ki8KKwkJYXJncy0+cnN2ZDIgPSAoX191NjQpIGZkX2ZlbmNlX2NvbXBsZXRlOworCX0KKwogCS8q CiAJICogVGhlIGViIGxpc3QgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkLiBUaGUgc2NoZWR1bGVyIGhh cyBleHRyYWN0ZWQgYWxsCiAJICogdGhlIGluZm9ybWF0aW9uIHRoYW4gbmVlZHMgdG8gcGVyc2lz dC4KQEAgLTE3MTYsNiArMTgwMywxMiBAQCBpOTE1X2dlbV9kb19leGVjYnVmZmVyKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAKIAlyZXR1cm4gMDsKIAorZXJyX2ZlbmNlOgor CWlmIChmZF9mZW5jZV9jb21wbGV0ZSAhPSAtMSkgeworCQlzeW5jX2ZlbmNlX3B1dChzeW5jX2Zl bmNlKTsKKwkJcHV0X3VudXNlZF9mZChmZF9mZW5jZV9jb21wbGV0ZSk7CisJfQorCiBlcnJfYmF0 Y2hfdW5waW46CiAJaWYgKGRpc3BhdGNoX2ZsYWdzICYgSTkxNV9ESVNQQVRDSF9TRUNVUkUpCiAJ CWk5MTVfZ2VtX2V4ZWNidWZmX3JlbGVhc2VfYmF0Y2hfb2JqKGJhdGNoX29iaik7CkBAIC0xODc0 LDExICsxOTY3LDYgQEAgaTkxNV9nZW1fZXhlY2J1ZmZlcjIoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdm9pZCAqZGF0YSwKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKGFyZ3MtPnJzdmQy ICE9IDApIHsKLQkJRFJNX0RFQlVHKCJkaXJ0eSBydnNkMiBmaWVsZFxuIik7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQogCS8qIFRocm90dGxlIGJhdGNoIHJlcXVlc3RzIHBlciBkZXZpY2UgZmls ZSAqLwogCWlmIChpOTE1X3NjaGVkdWxlcl9maWxlX3F1ZXVlX2lzX2Z1bGwoZmlsZSkpCiAJCXJl dHVybiAtRUFHQUlOOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oIGIv aW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCmluZGV4IDg2YTI1NWMuLjVmMzVmODkgMTAwNjQ0 Ci0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAorKysgYi9pbmNsdWRlL3VhcGkvZHJt L2k5MTVfZHJtLmgKQEAgLTI1MCw3ICsyNTAsNyBAQCB0eXBlZGVmIHN0cnVjdCBfZHJtX2k5MTVf c2FyZWEgewogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9IV1NfQUREUgkJRFJNX0lPVyhEUk1fQ09N TUFORF9CQVNFICsgRFJNX0k5MTVfSFdTX0FERFIsIHN0cnVjdCBkcm1faTkxNV9nZW1faW5pdCkK ICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0lOSVQJCURSTV9JT1coRFJNX0NPTU1BTkRfQkFT RSArIERSTV9JOTE1X0dFTV9JTklULCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2luaXQpCiAjZGVmaW5l IERSTV9JT0NUTF9JOTE1X0dFTV9FWEVDQlVGRkVSCURSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSAr IERSTV9JOTE1X0dFTV9FWEVDQlVGRkVSLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIp Ci0jZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9FWEVDQlVGRkVSMglEUk1fSU9XKERSTV9DT01N QU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fRVhFQ0JVRkZFUjIsIHN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY2J1ZmZlcjIpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9FWEVDQlVGRkVSMglEUk1f SU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0VYRUNCVUZGRVIyLCBzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyKQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fUElO CQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1BJTiwgc3RydWN0IGRy bV9pOTE1X2dlbV9waW4pCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9VTlBJTglEUk1fSU9X KERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fVU5QSU4sIHN0cnVjdCBkcm1faTkxNV9n ZW1fdW5waW4pCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9CVVNZCQlEUk1fSU9XUihEUk1f Q09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0JVU1ksIHN0cnVjdCBkcm1faTkxNV9nZW1fYnVz eSkKQEAgLTY5NSw3ICs2OTUsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiB7 CiAJX191NjQgZmxhZ3M7CiAKIAlfX3U2NCByc3ZkMTsKLQlfX3U2NCByc3ZkMjsKKwlfX3U2NCBy c3ZkMjsJLyogVXNlZCBmb3IgZmVuY2UgZmQgKi8KIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY2J1ZmZlcjIgewpAQCAtNzc2LDcgKzc3NiwxNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4 ZWNidWZmZXIyIHsKICAqLwogI2RlZmluZSBJOTE1X0VYRUNfUkVTT1VSQ0VfU1RSRUFNRVIgICAg ICgxPDwxNSkKIAotI2RlZmluZSBfX0k5MTVfRVhFQ19VTktOT1dOX0ZMQUdTIC0oSTkxNV9FWEVD X1JFU09VUkNFX1NUUkVBTUVSPDwxKQorLyoqIENhbGxlciBzdXBwbGllcyBhIHN5bmMgZmVuY2Ug ZmQgaW4gdGhlIHJzdmQyIGZpZWxkLgorICogV2FpdCBmb3IgaXQgdG8gYmUgc2lnbmFsbGVkIGJl Zm9yZSBzdGFydGluZyB0aGUgd29yaworICovCisjZGVmaW5lIEk5MTVfRVhFQ19XQUlUX0ZFTkNF CQkoMTw8MTYpCisKKy8qKiBDYWxsZXIgd2FudHMgYSBzeW5jIGZlbmNlIGZkIGZvciB0aGlzIGV4 ZWNidWZmZXIuCisgKiAgSXQgd2lsbCBiZSByZXR1cm5lZCBpbiByc3ZkMgorICovCisjZGVmaW5l IEk5MTVfRVhFQ19DUkVBVEVfRkVOQ0UJCSgxPDwxNykKKworI2RlZmluZSBfX0k5MTVfRVhFQ19V TktOT1dOX0ZMQUdTIC0oSTkxNV9FWEVDX0NSRUFURV9GRU5DRTw8MSkKIAogI2RlZmluZSBJOTE1 X0VYRUNfQ09OVEVYVF9JRF9NQVNLCSgweGZmZmZmZmZmKQogI2RlZmluZSBpOTE1X2V4ZWNidWZm ZXIyX3NldF9jb250ZXh0X2lkKGViMiwgY29udGV4dCkgXAotLSAKMS45LjEKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxp c3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==