From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [PATCH v2 15/24] drm/msm: dpu: Stop using encoder->crtc pointer Date: Fri, 16 Nov 2018 16:14:17 -0500 Message-ID: <20181116211417.GX154160@art_vandelay> References: <20181116184238.170034-1-sean@poorly.run> <20181116184238.170034-16-sean@poorly.run> <580ced340265a3c45b31836291bfbb4c@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <580ced340265a3c45b31836291bfbb4c-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Jeykumar Sankaran Cc: Sean Paul , dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, Sean Paul , linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org T24gRnJpLCBOb3YgMTYsIDIwMTggYXQgMTI6MDU6MDlQTSAtMDgwMCwgSmV5a3VtYXIgU2Fua2Fy YW4gd3JvdGU6Cj4gT24gMjAxOC0xMS0xNiAxMDo0MiwgU2VhbiBQYXVsIHdyb3RlOgo+ID4gRnJv bTogU2VhbiBQYXVsIDxzZWFucGF1bEBjaHJvbWl1bS5vcmc+Cj4gPiAKPiA+IEl0J3MgZm9yIGxl Z2FjeSBkcml2ZXJzLCBmb3IgYXRvbWljIGRyaXZlcnMgY3J0Yy0+c3RhdGUtPmVuY29kZXJfbWFz awo+ID4gc2hvdWxkIGJlIHVzZWQgdG8gbWFwIGVuY29kZXIgdG8gY3J0Yy4KPiA+IAo+ID4gQ2hh bmdlcyBpbiB2MjoKPiA+IC0gTm9uZQo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBTZWFuIFBhdWwg PHNlYW5wYXVsQGNocm9taXVtLm9yZz4KPiA+IC0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9jcnRjLmMgfCA0NiArKysrKysrKy0tLS0tLS0tLS0tLS0tLS0KPiA+ICBk cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmMgIHwgMTkgKysrKysrKy0tLQo+ ID4gIDIgZmlsZXMgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKSwgMzYgZGVsZXRpb25zKC0pCj4g PiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0 Yy5jCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKPiA+IGlu ZGV4IDE1NmY0Yzc3Y2E0NC4uYTAwOGE4N2E4MTEzIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwo+ID4gQEAgLTI4NCw5ICsyODQsOSBAQCBlbnVtIGRw dV9pbnRmX21vZGUgZHB1X2NydGNfZ2V0X2ludGZfbW9kZShzdHJ1Y3QKPiA+IGRybV9jcnRjICpj cnRjKQo+ID4gIAkJcmV0dXJuIElOVEZfTU9ERV9OT05FOwo+ID4gIAl9Cj4gPiAKPiA+IC0JZHJt X2Zvcl9lYWNoX2VuY29kZXIoZW5jb2RlciwgY3J0Yy0+ZGV2KQo+ID4gLQkJaWYgKGVuY29kZXIt PmNydGMgPT0gY3J0YykKPiA+IC0JCQlyZXR1cm4gZHB1X2VuY29kZXJfZ2V0X2ludGZfbW9kZShl bmNvZGVyKTsKPiA+ICsJLyogVE9ETzogUmV0dXJucyB0aGUgZmlyc3QgSU5URl9NT0RFLCBjb3Vs ZCB0aGVyZSBiZSBtdWx0aXBsZQo+ID4gdmFsdWVzPyAqLwo+ID4gKwlkcm1fZm9yX2VhY2hfZW5j b2Rlcl9tYXNrKGVuY29kZXIsIGNydGMtPmRldiwKPiA+IGNydGMtPnN0YXRlLT5lbmNvZGVyX21h c2spCj4gPiArCQlyZXR1cm4gZHB1X2VuY29kZXJfZ2V0X2ludGZfbW9kZShlbmNvZGVyKTsKPiA+ IAo+ID4gIAlyZXR1cm4gSU5URl9NT0RFX05PTkU7Cj4gPiAgfQo+ID4gQEAgLTU1MSwxMyArNTUx LDkgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfYXRvbWljX2JlZ2luKHN0cnVjdCBkcm1fY3J0Ywo+ ID4gKmNydGMsCj4gPiAgCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ss IGZsYWdzKTsKPiA+ICAJfQo+ID4gCj4gPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2Rlciwg JmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKQo+ID4gewo+ID4gLQkJaWYgKGVu Y29kZXItPmNydGMgIT0gY3J0YykKPiA+IC0JCQljb250aW51ZTsKPiA+IC0KPiA+IC0JCS8qIGVu Y29kZXIgd2lsbCB0cmlnZ2VyIHBlbmRpbmcgbWFzayBub3cgKi8KPiA+ICsJLyogZW5jb2RlciB3 aWxsIHRyaWdnZXIgcGVuZGluZyBtYXNrIG5vdyAqLwo+ID4gKwlkcm1fZm9yX2VhY2hfZW5jb2Rl cl9tYXNrKGVuY29kZXIsIGNydGMtPmRldiwKPiA+IGNydGMtPnN0YXRlLT5lbmNvZGVyX21hc2sp Cj4gPiAgCQlkcHVfZW5jb2Rlcl90cmlnZ2VyX2tpY2tvZmZfcGVuZGluZyhlbmNvZGVyKTsKPiA+ IC0JfQo+ID4gCj4gPiAgCS8qCj4gPiAgCSAqIElmIG5vIG1peGVycyBoYXZlIGJlZW4gYWxsb2Nh dGVkIGluIGRwdV9jcnRjX2F0b21pY19jaGVjaygpLAo+ID4gQEAgLTcwNCw3ICs3MDAsNiBAQCBz dGF0aWMgaW50IF9kcHVfY3J0Y193YWl0X2Zvcl9mcmFtZV9kb25lKHN0cnVjdAo+ID4gZHJtX2Ny dGMgKmNydGMpCj4gPiAgdm9pZCBkcHVfY3J0Y19jb21taXRfa2lja29mZihzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCj4gPiAgewo+ID4gIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7Cj4gPiAt CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gPiAgCXN0cnVjdCBkcHVfY3J0 YyAqZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKPiA+ICAJc3RydWN0IGRwdV9rbXMgKmRw dV9rbXMgPSBfZHB1X2NydGNfZ2V0X2ttcyhjcnRjKTsKPiA+ICAJc3RydWN0IGRwdV9jcnRjX3N0 YXRlICpjc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7Cj4gPiBAQCAtNzIw LDE2ICs3MTUsMTMgQEAgdm9pZCBkcHVfY3J0Y19jb21taXRfa2lja29mZihzdHJ1Y3QgZHJtX2Ny dGMKPiA+ICpjcnRjKQo+ID4gCj4gPiAgCURQVV9BVFJBQ0VfQkVHSU4oImNydGNfY29tbWl0Iik7 Cj4gPiAKPiA+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZp Zy5lbmNvZGVyX2xpc3QsIGhlYWQpCj4gPiB7Cj4gPiArCS8qCj4gPiArCSAqIEVuY29kZXIgd2ls bCBmbHVzaC9zdGFydCBub3csIHVubGVzcyBpdCBoYXMgYSB0eCBwZW5kaW5nLiBJZgo+ID4gc28s IGl0Cj4gPiArCSAqIG1heSBkZWxheSBhbmQgZmx1c2ggYXQgYW4gaXJxIGV2ZW50IChlLmcuIHBw ZG9uZSkKPiA+ICsJICovCj4gPiArCWRybV9mb3JfZWFjaF9lbmNvZGVyX21hc2soZW5jb2Rlciwg Y3J0Yy0+ZGV2LAo+ID4gKwkJCQkgIGNydGMtPnN0YXRlLT5lbmNvZGVyX21hc2spIHsKPiA+ICAJ CXN0cnVjdCBkcHVfZW5jb2Rlcl9raWNrb2ZmX3BhcmFtcyBwYXJhbXMgPSB7IDAgfTsKPiA+IC0K PiA+IC0JCWlmIChlbmNvZGVyLT5jcnRjICE9IGNydGMpCj4gPiAtCQkJY29udGludWU7Cj4gPiAt Cj4gPiAtCQkvKgo+ID4gLQkJICogRW5jb2RlciB3aWxsIGZsdXNoL3N0YXJ0IG5vdywgdW5sZXNz IGl0IGhhcyBhIHR4Cj4gPiBwZW5kaW5nLgo+ID4gLQkJICogSWYgc28sIGl0IG1heSBkZWxheSBh bmQgZmx1c2ggYXQgYW4gaXJxIGV2ZW50IChlLmcuCj4gPiBwcGRvbmUpCj4gPiAtCQkgKi8KPiA+ ICAJCWRwdV9lbmNvZGVyX3ByZXBhcmVfZm9yX2tpY2tvZmYoZW5jb2RlciwgJnBhcmFtcyk7Cj4g PiAgCX0KPiA+IAo+ID4gQEAgLTc1NCwxMiArNzQ2LDggQEAgdm9pZCBkcHVfY3J0Y19jb21taXRf a2lja29mZihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gPiAKPiA+ICAJZHB1X3ZiaWZfY2xlYXJf ZXJyb3JzKGRwdV9rbXMpOwo+ID4gCj4gPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2Rlciwg JmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKQo+ID4gewo+ID4gLQkJaWYgKGVu Y29kZXItPmNydGMgIT0gY3J0YykKPiA+IC0JCQljb250aW51ZTsKPiA+IC0KPiA+ICsJZHJtX2Zv cl9lYWNoX2VuY29kZXJfbWFzayhlbmNvZGVyLCBjcnRjLT5kZXYsCj4gPiBjcnRjLT5zdGF0ZS0+ ZW5jb2Rlcl9tYXNrKQo+ID4gIAkJZHB1X2VuY29kZXJfa2lja29mZihlbmNvZGVyKTsKPiA+IC0J fQo+IFdlIHdvbnQgYmUgaG9sZGluZyB0aGUgbW9kZXNldCBsb2NrcyBoZXJlIChhbmQgaW4gY3J0 Y19hdG9taWNfYmVnaW4pIGluIHRoZQo+IGRpc3BsYXkgdGhyZWFkLiBJcwo+IGl0IHNhZmUgdG8g aXRlcmF0ZSBvdmVyIGVuY29kZXJfbWFzaz8KCkhtbSwgSSdtIG5vdCBzdXJlIEkgZm9sbG93LiBB RkFJQ1QsIHRoZXJlIGFyZSAyIGNhbGxzaXRlcyBmb3IKZHB1X2NydGNfY29tbWl0X2tpY2tvZmYo KToKCjEtIGRwdV9rbXNfZW5jb2Rlcl9lbmFibGUoKSB3aGljaCBpcyBjYWxsZWQgdmlhIHRoZSBl bmNvZGVyLT5mdW5jcy0+ZW5hYmxlIGhvb2sKMi0gZHB1X2ttc19jb21taXQoKSB3aGljaCBpcyBj YWxsZWQgaW4gdGhlIG1vZGVfY29uZmlnLT5mdW5jcy0+YXRvbWljX2NvbW1pdF90YWlsCgpCb3Ro IG9mIHRoZXNlIGNhbGxzaXRlcyB3aWxsIGhvbGQgdGhlIG1vZGVzZXQgbG9ja3MuCgpBbSBJIG1p c3Npbmcgc29tZXRoaW5nPwoKVGhhbmtzIGZvciB5b3VyIHJldmlldywKClNlYW4KCj4gPiAKPiA+ ICBlbmQ6Cj4gPiAgCXJlaW5pdF9jb21wbGV0aW9uKCZkcHVfY3J0Yy0+ZnJhbWVfZG9uZV9jb21w KTsKPiA+IEBAIC04ODMsMTEgKzg3MSw4IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2Rpc2FibGUo c3RydWN0IGRybV9jcnRjICpjcnRjKQo+ID4gCj4gPiAgCWRwdV9jb3JlX3BlcmZfY3J0Y191cGRh dGUoY3J0YywgMCwgdHJ1ZSk7Cj4gPiAKPiA+IC0JZHJtX2Zvcl9lYWNoX2VuY29kZXIoZW5jb2Rl ciwgY3J0Yy0+ZGV2KSB7Cj4gPiAtCQlpZiAoZW5jb2Rlci0+Y3J0YyAhPSBjcnRjKQo+ID4gLQkJ CWNvbnRpbnVlOwo+ID4gKwlkcm1fZm9yX2VhY2hfZW5jb2Rlcl9tYXNrKGVuY29kZXIsIGNydGMt PmRldiwKPiA+IGNydGMtPnN0YXRlLT5lbmNvZGVyX21hc2spCj4gPiAgCQlkcHVfZW5jb2Rlcl9y ZWdpc3Rlcl9mcmFtZV9ldmVudF9jYWxsYmFjayhlbmNvZGVyLCBOVUxMLAo+ID4gTlVMTCk7Cj4g PiAtCX0KPiA+IAo+ID4gIAltZW1zZXQoY3N0YXRlLT5taXhlcnMsIDAsIHNpemVvZihjc3RhdGUt Pm1peGVycykpOwo+ID4gIAljc3RhdGUtPm51bV9taXhlcnMgPSAwOwo+ID4gQEAgLTkyMiwxMiAr OTA3LDkgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywKPiA+ICAJRFJNX0RFQlVHX0tNUygiY3J0YyVkXG4iLCBjcnRjLT5iYXNlLmlkKTsKPiA+ICAJ ZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKPiA+IAo+ID4gLQlkcm1fZm9yX2VhY2hfZW5j b2RlcihlbmNvZGVyLCBjcnRjLT5kZXYpIHsKPiA+IC0JCWlmIChlbmNvZGVyLT5jcnRjICE9IGNy dGMpCj4gPiAtCQkJY29udGludWU7Cj4gPiArCWRybV9mb3JfZWFjaF9lbmNvZGVyX21hc2soZW5j b2RlciwgY3J0Yy0+ZGV2LAo+ID4gY3J0Yy0+c3RhdGUtPmVuY29kZXJfbWFzaykKPiA+ICAJCWRw dV9lbmNvZGVyX3JlZ2lzdGVyX2ZyYW1lX2V2ZW50X2NhbGxiYWNrKGVuY29kZXIsCj4gPiAgCQkJ CWRwdV9jcnRjX2ZyYW1lX2V2ZW50X2NiLCAodm9pZCAqKWNydGMpOwo+ID4gLQl9Cj4gPiAKPiA+ ICAJbXV0ZXhfbG9jaygmZHB1X2NydGMtPmNydGNfbG9jayk7Cj4gPiAgCXRyYWNlX2RwdV9jcnRj X2VuYWJsZShEUk1JRChjcnRjKSwgdHJ1ZSwgZHB1X2NydGMpOwo+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYwo+ID4gYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmMKPiA+IGluZGV4IDFiZWM0NTQwZjNlMS4uNjQxMzRk NjE5NzQ4IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2ttcy5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmMK PiA+IEBAIC0zMjAsNyArMzIwLDEwIEBAIHN0YXRpYyB2b2lkIGRwdV9rbXNfcHJlcGFyZV9jb21t aXQoc3RydWN0IG1zbV9rbXMKPiA+ICprbXMsCj4gPiAgCXN0cnVjdCBkcHVfa21zICpkcHVfa21z Owo+ID4gIAlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2Owo+ID4gIAlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2Owo+ID4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gPiArCXN0cnVjdCBkcm1f Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiA+ICAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVy Owo+ID4gKwlpbnQgaTsKPiA+IAo+ID4gIAlpZiAoIWttcykKPiA+ICAJCXJldHVybjsKPiA+IEBA IC0zMzIsOSArMzM1LDEzIEBAIHN0YXRpYyB2b2lkIGRwdV9rbXNfcHJlcGFyZV9jb21taXQoc3Ry dWN0IG1zbV9rbXMKPiA+ICprbXMsCj4gPiAgCXByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ID4g IAlwbV9ydW50aW1lX2dldF9zeW5jKCZkcHVfa21zLT5wZGV2LT5kZXYpOwo+ID4gCj4gPiAtCWxp c3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0 LCBoZWFkKQo+ID4gLQkJaWYgKGVuY29kZXItPmNydGMgIT0gTlVMTCkKPiA+ICsJLyogQ2FsbCBw cmVwYXJlX2NvbW1pdCBmb3IgYWxsIGFmZmVjdGVkIGVuY29kZXJzICovCj4gPiArCWZvcl9lYWNo X25ld19jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRlLCBpKSB7Cj4gPiArCQlk cm1fZm9yX2VhY2hfZW5jb2Rlcl9tYXNrKGVuY29kZXIsIGNydGMtPmRldiwKPiA+ICsJCQkJCSAg Y3J0Y19zdGF0ZS0+ZW5jb2Rlcl9tYXNrKSB7Cj4gPiAgCQkJZHB1X2VuY29kZXJfcHJlcGFyZV9j b21taXQoZW5jb2Rlcik7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICB9Cj4gPiAKPiA+ICAvKgo+ID4g QEAgLTM0NCwxMyArMzUxLDE3IEBAIHN0YXRpYyB2b2lkIGRwdV9rbXNfcHJlcGFyZV9jb21taXQo c3RydWN0IG1zbV9rbXMKPiA+ICprbXMsCj4gPiAgdm9pZCBkcHVfa21zX2VuY29kZXJfZW5hYmxl KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKPiA+ICB7Cj4gPiAgCWNvbnN0IHN0cnVjdCBk cm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgKmZ1bmNzID0KPiA+IGVuY29kZXItPmhlbHBlcl9wcml2 YXRlOwo+ID4gLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBlbmNvZGVyLT5jcnRjOwo+ID4gKwlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2Owo+ID4gKwlzdHJ1Y3QgZHJtX2Ny dGMgKmNydGM7Cj4gPiAKPiA+ICAJLyogRm9yd2FyZCB0aGlzIGVuYWJsZSBjYWxsIHRvIHRoZSBj b21taXQgaG9vayAqLwo+ID4gIAlpZiAoZnVuY3MgJiYgZnVuY3MtPmNvbW1pdCkKPiA+ICAJCWZ1 bmNzLT5jb21taXQoZW5jb2Rlcik7Cj4gPiAKPiA+IC0JaWYgKGNydGMgJiYgY3J0Yy0+c3RhdGUt PmFjdGl2ZSkgewo+ID4gKwlkcm1fZm9yX2VhY2hfY3J0YyhjcnRjLCBkZXYpIHsKPiA+ICsJCWlm ICghKGNydGMtPnN0YXRlLT5lbmNvZGVyX21hc2sgJgo+ID4gZHJtX2VuY29kZXJfbWFzayhlbmNv ZGVyKSkpCj4gPiArCQkJY29udGludWU7Cj4gPiArCj4gPiAgCQl0cmFjZV9kcHVfa21zX2VuY19l bmFibGUoRFJNSUQoY3J0YykpOwo+ID4gIAkJZHB1X2NydGNfY29tbWl0X2tpY2tvZmYoY3J0Yyk7 Cj4gPiAgCX0KPiAKPiAtLSAKPiBKZXlrdW1hciBTCgotLSAKU2VhbiBQYXVsLCBTb2Z0d2FyZSBF bmdpbmVlciwgR29vZ2xlIC8gQ2hyb21pdW0gT1MKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9AbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZnJlZWRyZW5vCg==