From mboxrd@z Thu Jan 1 00:00:00 1970 From: ankitprasad.r.sharma@intel.com Subject: [PATCH 7/9] drm/i915: Support for pread/pwrite from/to non shmem backed objects Date: Mon, 14 Dec 2015 11:16:09 +0530 Message-ID: <1450071971-30321-8-git-send-email-ankitprasad.r.sharma@intel.com> References: <1450071971-30321-1-git-send-email-ankitprasad.r.sharma@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 4B67F6E5D6 for ; Sun, 13 Dec 2015 22:05:34 -0800 (PST) In-Reply-To: <1450071971-30321-1-git-send-email-ankitprasad.r.sharma@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: Ankitprasad Sharma , akash.goel@intel.com, shashidhar.hiremath@intel.com List-Id: intel-gfx@lists.freedesktop.org RnJvbTogQW5raXRwcmFzYWQgU2hhcm1hIDxhbmtpdHByYXNhZC5yLnNoYXJtYUBpbnRlbC5jb20+ CgpUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZXh0ZW5kaW5nIHRoZSBwcmVhZC9wd3JpdGUg ZnVuY3Rpb25hbGl0eQpmb3Igb2JqZWN0cyBub3QgYmFja2VkIGJ5IHNobWVtLiBUaGUgYWNjZXNz IHdpbGwgYmUgbWFkZSB0aHJvdWdoCmd0dCBpbnRlcmZhY2UuIFRoaXMgd2lsbCBjb3ZlciBvYmpl Y3RzIGJhY2tlZCBieSBzdG9sZW4gbWVtb3J5IGFzIHdlbGwKYXMgb3RoZXIgbm9uLXNobWVtIGJh Y2tlZCBvYmplY3RzLgoKdjI6IERyb3AgbG9ja3MgYXJvdW5kIHNsb3dfdXNlcl9hY2Nlc3MsIHBy ZWZhdWx0IHRoZSBwYWdlcyBiZWZvcmUKYWNjZXNzIChDaHJpcykKCnYzOiBSZWJhc2VkIHRvIHRo ZSBsYXRlc3QgZHJtLWludGVsLW5pZ2h0bHkgKEFua2l0KQoKdjQ6IE1vdmVkIHBhZ2UgYmFzZSAm IG9mZnNldCBjYWxjdWxhdGlvbnMgb3V0c2lkZSB0aGUgY29weSBsb29wLApjb3JyZWN0ZWQgZGF0 YSB0eXBlcyBmb3Igc2l6ZSBhbmQgb2Zmc2V0IHZhcmlhYmxlcywgY29ycmVjdGVkIGlmLWVsc2UK YnJhY2VzIGZvcm1hdCAoVHZydGtvL2tlcm5lbGRvY3MpCgp2NTogRW5hYmxlZCBwcmVhZC9wd3Jp dGUgZm9yIGFsbCBub24tc2htZW0gYmFja2VkIG9iamVjdHMgaW5jbHVkaW5nCndpdGhvdXQgdGls aW5nIHJlc3RyaWN0aW9ucyAoQW5raXQpCgp2NjogVXNpbmcgcHdyaXRlX2Zhc3QgZm9yIG5vbi1z aG1lbSBiYWNrZWQgb2JqZWN0cyBhcyB3ZWxsIChDaHJpcykKCnY3OiBVcGRhdGVkIGNvbW1pdCBt ZXNzYWdlLCBSZW5hbWVkIGk5MTVfZ2VtX2d0dF9yZWFkIHRvIGk5MTVfZ2VtX2d0dF9jb3B5LAph ZGRlZCBwd3JpdGUgc2xvdyBwYXRoIGZvciBub24tc2htZW0gYmFja2VkIG9iamVjdHMgKENocmlz L1R2cnRrbykKCnY4OiBVcGRhdGVkIHY3IGNvbW1pdCBtZXNzYWdlLCBtdXRleCB1bmxvY2sgYXJv dW5kIHB3cml0ZSBzbG93IHBhdGggZm9yCm5vbi1zaG1lbSBiYWNrZWQgb2JqZWN0cyAoVHZydGtv KQoKdjk6IENvcnJlY3RlZCBjaGVjayBkdXJpbmcgcHJlYWRfaW9jdGwsIHRvIGF2b2lkIHNobWVt X3ByZWFkIGJlaW5nCmNhbGxlZCBmb3Igbm9uLXNobWVtIGJhY2tlZCBvYmplY3RzIChUdnJ0a28p CgpUZXN0Y2FzZTogaWd0L2dlbV9zdG9sZW4KClNpZ25lZC1vZmYtYnk6IEFua2l0cHJhc2FkIFNo YXJtYSA8YW5raXRwcmFzYWQuci5zaGFybWFAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtLmMgfCAxNTEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr LS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEyNyBpbnNlcnRpb25zKCspLCAyNCBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCA4YTUwOGNkLi5hZDYxNzgzIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTYyOSw2ICs2MjksOTkgQEAgc2htZW1fcHJlYWRfc2xvdyhz dHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHNobWVtX3BhZ2Vfb2Zmc2V0LCBpbnQgcGFnZV9sZW5ndGgs CiAJcmV0dXJuIHJldCA/IC0gRUZBVUxUIDogMDsKIH0KIAorc3RhdGljIGlubGluZSB1aW50NjRf dAorc2xvd191c2VyX2FjY2VzcyhzdHJ1Y3QgaW9fbWFwcGluZyAqbWFwcGluZywKKwkJIHVpbnQ2 NF90IHBhZ2VfYmFzZSwgaW50IHBhZ2Vfb2Zmc2V0LAorCQkgY2hhciBfX3VzZXIgKnVzZXJfZGF0 YSwKKwkJIGludCBsZW5ndGgsIGJvb2wgcHdyaXRlKQoreworCXZvaWQgX19pb21lbSAqdmFkZHJf aW5hdG9taWM7CisJdm9pZCAqdmFkZHI7CisJdWludDY0X3QgdW53cml0dGVuOworCisJdmFkZHJf aW5hdG9taWMgPSBpb19tYXBwaW5nX21hcF93YyhtYXBwaW5nLCBwYWdlX2Jhc2UpOworCS8qIFdl IGNhbiB1c2UgdGhlIGNwdSBtZW0gY29weSBmdW5jdGlvbiBiZWNhdXNlIHRoaXMgaXMgWDg2LiAq LworCXZhZGRyID0gKHZvaWQgX19mb3JjZSAqKXZhZGRyX2luYXRvbWljICsgcGFnZV9vZmZzZXQ7 CisJaWYgKHB3cml0ZSkKKwkJdW53cml0dGVuID0gX19jb3B5X2Zyb21fdXNlcih2YWRkciwgdXNl cl9kYXRhLCBsZW5ndGgpOworCWVsc2UKKwkJdW53cml0dGVuID0gX19jb3B5X3RvX3VzZXIodXNl cl9kYXRhLCB2YWRkciwgbGVuZ3RoKTsKKworCWlvX21hcHBpbmdfdW5tYXAodmFkZHJfaW5hdG9t aWMpOworCXJldHVybiB1bndyaXR0ZW47Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX2d0dF9j b3B5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosIHVpbnQ2NF90IHNpemUsCisJCSAgIHVpbnQ2NF90IGRhdGFfb2Zmc2V0LCB1aW50 NjRfdCBkYXRhX3B0cikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOworCWNoYXIgX191c2VyICp1c2VyX2RhdGE7CisJdWludDY0X3QgcmVt YWluOworCXVpbnQ2NF90IG9mZnNldCwgcGFnZV9iYXNlOworCWludCBwYWdlX29mZnNldCwgcGFn ZV9sZW5ndGgsIHJldCA9IDA7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9waW4ob2JqLCAw LCBQSU5fTUFQUEFCTEUpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gaTkxNV9n ZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKG9iaiwgZmFsc2UpOworCWlmIChyZXQpCisJCWdv dG8gb3V0X3VucGluOworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3B1dF9mZW5jZShvYmopOwor CWlmIChyZXQpCisJCWdvdG8gb3V0X3VucGluOworCisJdXNlcl9kYXRhID0gdG9fdXNlcl9wdHIo ZGF0YV9wdHIpOworCXJlbWFpbiA9IHNpemU7CisJb2Zmc2V0ID0gaTkxNV9nZW1fb2JqX2dndHRf b2Zmc2V0KG9iaikgKyBkYXRhX29mZnNldDsKKworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3Rf bXV0ZXgpOworCWlmIChsaWtlbHkoIWk5MTUucHJlZmF1bHRfZGlzYWJsZSkpCisJCXJldCA9IGZh dWx0X2luX211bHRpcGFnZXNfd3JpdGVhYmxlKHVzZXJfZGF0YSwgcmVtYWluKTsKKworCS8qCisJ ICogcGFnZV9vZmZzZXQgPSBvZmZzZXQgd2l0aGluIHBhZ2UKKwkgKiBwYWdlX2Jhc2UgPSBwYWdl IG9mZnNldCB3aXRoaW4gYXBlcnR1cmUKKwkgKi8KKwlwYWdlX29mZnNldCA9IG9mZnNldF9pbl9w YWdlKG9mZnNldCk7CisJcGFnZV9iYXNlID0gb2Zmc2V0ICYgUEFHRV9NQVNLOworCisJd2hpbGUg KHJlbWFpbiA+IDApIHsKKwkJLyogcGFnZV9sZW5ndGggPSBieXRlcyB0byBjb3B5IGZvciB0aGlz IHBhZ2UgKi8KKwkJcGFnZV9sZW5ndGggPSByZW1haW47CisJCWlmICgocGFnZV9vZmZzZXQgKyBy ZW1haW4pID4gUEFHRV9TSVpFKQorCQkJcGFnZV9sZW5ndGggPSBQQUdFX1NJWkUgLSBwYWdlX29m ZnNldDsKKworCQkvKiBUaGlzIGlzIGEgc2xvdyByZWFkL3dyaXRlIGFzIGl0IHRyaWVzIHRvIHJl YWQgZnJvbQorCQkgKiBhbmQgd3JpdGUgdG8gdXNlciBtZW1vcnkgd2hpY2ggbWF5IHJlc3VsdCBp bnRvIHBhZ2UKKwkJICogZmF1bHRzCisJCSAqLworCQlyZXQgPSBzbG93X3VzZXJfYWNjZXNzKGRl dl9wcml2LT5ndHQubWFwcGFibGUsIHBhZ2VfYmFzZSwKKwkJCQkgICAgICAgcGFnZV9vZmZzZXQs IHVzZXJfZGF0YSwKKwkJCQkgICAgICAgcGFnZV9sZW5ndGgsIGZhbHNlKTsKKworCQlpZiAocmV0 KSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKworCQlyZW1haW4gLT0gcGFn ZV9sZW5ndGg7CisJCXVzZXJfZGF0YSArPSBwYWdlX2xlbmd0aDsKKwkJcGFnZV9iYXNlICs9IHBh Z2VfbGVuZ3RoOworCQlwYWdlX29mZnNldCA9IDA7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT5z dHJ1Y3RfbXV0ZXgpOworCitvdXRfdW5waW46CisJaTkxNV9nZW1fb2JqZWN0X2dndHRfdW5waW4o b2JqKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50CiBpOTE1X2dlbV9zaG1l bV9wcmVhZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkgICAgIHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmosCkBAIC03NTIsMTcgKzg0NSwxNCBAQCBpOTE1X2dlbV9wcmVhZF9pb2N0 bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQlnb3RvIG91dDsKIAl9CiAK LQkvKiBwcmltZSBvYmplY3RzIGhhdmUgbm8gYmFja2luZyBmaWxwIHRvIEdFTSBwcmVhZC9wd3Jp dGUKLQkgKiBwYWdlcyBmcm9tLgotCSAqLwotCWlmICghb2JqLT5iYXNlLmZpbHApIHsKLQkJcmV0 ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCiAJdHJhY2VfaTkxNV9nZW1fb2JqZWN0X3By ZWFkKG9iaiwgYXJncy0+b2Zmc2V0LCBhcmdzLT5zaXplKTsKIAotCXJldCA9IGk5MTVfZ2VtX3No bWVtX3ByZWFkKGRldiwgb2JqLCBhcmdzLCBmaWxlKTsKKwkvKiBwcmVhZCBmb3Igbm9uIHNobWVt IGJhY2tlZCBvYmplY3RzICovCisJaWYgKCFvYmotPmJhc2UuZmlscCAmJiBvYmotPnRpbGluZ19t b2RlID09IEk5MTVfVElMSU5HX05PTkUpCisJCXJldCA9IGk5MTVfZ2VtX2d0dF9jb3B5KGRldiwg b2JqLCBhcmdzLT5zaXplLAorCQkJCQlhcmdzLT5vZmZzZXQsIGFyZ3MtPmRhdGFfcHRyKTsKKwll bHNlIGlmIChvYmotPmJhc2UuZmlscCkKKwkJcmV0ID0gaTkxNV9nZW1fc2htZW1fcHJlYWQoZGV2 LCBvYmosIGFyZ3MsIGZpbGUpOwogCiBvdXQ6CiAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uo Jm9iai0+YmFzZSk7CkBAIC04MDQsMTAgKzg5NCwxMiBAQCBpOTE1X2dlbV9ndHRfcHdyaXRlX2Zh c3Qoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCiAJCQkgc3RydWN0IGRybV9pOTE1X2dl bV9wd3JpdGUgKmFyZ3MsCiAJCQkgc3RydWN0IGRybV9maWxlICpmaWxlKQogeworCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2OwogCXN0cnVjdCBkcm1fbW1fbm9kZSBub2Rl OwogCXVpbnQ2NF90IHJlbWFpbiwgb2Zmc2V0OwogCWNoYXIgX191c2VyICp1c2VyX2RhdGE7CiAJ aW50IHJldDsKKwlib29sIGZhdWx0ZWQgPSBmYWxzZTsKIAogCXJldCA9IGk5MTVfZ2VtX29ial9n Z3R0X3BpbihvYmosIDAsIFBJTl9NQVBQQUJMRSB8IFBJTl9OT05CTE9DSyk7CiAJaWYgKHJldCkg ewpAQCAtODYyLDExICs5NTQsMjkgQEAgaTkxNV9nZW1fZ3R0X3B3cml0ZV9mYXN0KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1LAogCQkvKiBJZiB3ZSBnZXQgYSBmYXVsdCB3aGlsZSBjb3B5 aW5nIGRhdGEsIHRoZW4gKHByZXN1bWFibHkpIG91cgogCQkgKiBzb3VyY2UgcGFnZSBpc24ndCBh dmFpbGFibGUuICBSZXR1cm4gdGhlIGVycm9yIGFuZCB3ZSdsbAogCQkgKiByZXRyeSBpbiB0aGUg c2xvdyBwYXRoLgorCQkgKiBJZiB0aGUgb2JqZWN0IGlzIG5vbi1zaG1lbSBiYWNrZWQsIHdlIHJl dHJ5IGFnYWluIHdpdGggdGhlCisJCSAqIHBhdGggdGhhdCBoYW5kbGVzIHBhZ2UgZmF1bHQuCiAJ CSAqLwotCQlpZiAoZmFzdF91c2VyX3dyaXRlKGk5MTUtPmd0dC5tYXBwYWJsZSwgcGFnZV9iYXNl LAotCQkJCSAgICBwYWdlX29mZnNldCwgdXNlcl9kYXRhLCBwYWdlX2xlbmd0aCkpIHsKLQkJCXJl dCA9IC1FRkFVTFQ7Ci0JCQlnb3RvIG91dF9mbHVzaDsKKwkJaWYgKGZhdWx0ZWQgfHwgZmFzdF91 c2VyX3dyaXRlKGk5MTUtPmd0dC5tYXBwYWJsZSwKKwkJCQkJCXBhZ2VfYmFzZSwgcGFnZV9vZmZz ZXQsCisJCQkJCQl1c2VyX2RhdGEsIHBhZ2VfbGVuZ3RoKSkgeworCQkJaWYgKCFvYmotPmJhc2Uu ZmlscCkgeworCQkJCWZhdWx0ZWQgPSB0cnVlOworCQkJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1 Y3RfbXV0ZXgpOworCQkJCWlmIChzbG93X3VzZXJfYWNjZXNzKGk5MTUtPmd0dC5tYXBwYWJsZSwK KwkJCQkJCSAgICAgcGFnZV9iYXNlLAorCQkJCQkJICAgICBwYWdlX29mZnNldCwgdXNlcl9kYXRh LAorCQkJCQkJICAgICBwYWdlX2xlbmd0aCwgdHJ1ZSkpIHsKKwkJCQkJcmV0ID0gLUVGQVVMVDsK KwkJCQkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQkJCQlnb3RvIG91dF9mbHVz aDsKKwkJCQl9CisKKwkJCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCQl9IGVs c2UgeworCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJZ290byBvdXRfZmx1c2g7CisJCQl9CiAJCX0K IAogCQlyZW1haW4gLT0gcGFnZV9sZW5ndGg7CkBAIC0xMTMyLDE0ICsxMjQyLDYgQEAgaTkxNV9n ZW1fcHdyaXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCWdv dG8gb3V0OwogCX0KIAotCS8qIHByaW1lIG9iamVjdHMgaGF2ZSBubyBiYWNraW5nIGZpbHAgdG8g R0VNIHByZWFkL3B3cml0ZQotCSAqIHBhZ2VzIGZyb20uCi0JICovCi0JaWYgKCFvYmotPmJhc2Uu ZmlscCkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KIAl0cmFjZV9pOTE1 X2dlbV9vYmplY3RfcHdyaXRlKG9iaiwgYXJncy0+b2Zmc2V0LCBhcmdzLT5zaXplKTsKIAogCXJl dCA9IC1FRkFVTFQ7CkBAIC0xMTUwLDggKzEyNTIsOSBAQCBpOTE1X2dlbV9wd3JpdGVfaW9jdGwo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkgKiBwZXJzcGVjdGl2ZSwgcmVx dWlyaW5nIG1hbnVhbCBkZXRpbGluZyBieSB0aGUgY2xpZW50LgogCSAqLwogCWlmIChvYmotPnRp bGluZ19tb2RlID09IEk5MTVfVElMSU5HX05PTkUgJiYKLQkgICAgb2JqLT5iYXNlLndyaXRlX2Rv bWFpbiAhPSBJOTE1X0dFTV9ET01BSU5fQ1BVICYmCi0JICAgIGNwdV93cml0ZV9uZWVkc19jbGZs dXNoKG9iaikpIHsKKwkgICAgKCFvYmotPmJhc2UuZmlscCB8fAorCSAgICAob2JqLT5iYXNlLndy aXRlX2RvbWFpbiAhPSBJOTE1X0dFTV9ET01BSU5fQ1BVICYmCisJICAgIGNwdV93cml0ZV9uZWVk c19jbGZsdXNoKG9iaikpKSkgewogCQlyZXQgPSBpOTE1X2dlbV9ndHRfcHdyaXRlX2Zhc3QoZGV2 X3ByaXYsIG9iaiwgYXJncywgZmlsZSk7CiAJCS8qIE5vdGUgdGhhdCB0aGUgZ3R0IHBhdGhzIG1p Z2h0IGZhaWwgd2l0aCBub24tcGFnZS1iYWNrZWQgdXNlcgogCQkgKiBwb2ludGVycyAoZS5nLiBn dHQgbWFwcGluZ3Mgd2hlbiBtb3ZpbmcgZGF0YSBiZXR3ZWVuCkBAIC0xMTYxLDcgKzEyNjQsNyBA QCBpOTE1X2dlbV9wd3JpdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0 YSwKIAlpZiAocmV0ID09IC1FRkFVTFQgfHwgcmV0ID09IC1FTk9TUEMpIHsKIAkJaWYgKG9iai0+ cGh5c19oYW5kbGUpCiAJCQlyZXQgPSBpOTE1X2dlbV9waHlzX3B3cml0ZShvYmosIGFyZ3MsIGZp bGUpOwotCQllbHNlCisJCWVsc2UgaWYgKG9iai0+YmFzZS5maWxwKQogCQkJcmV0ID0gaTkxNV9n ZW1fc2htZW1fcHdyaXRlKGRldiwgb2JqLCBhcmdzLCBmaWxlKTsKIAl9CiAKLS0gCjEuOS4xCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=