From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 13/15] drm/i915: Split gen2_crtc_compute_clock() Date: Tue, 22 Mar 2016 12:11:56 +0100 Message-ID: <20160322111156.GY28483@phenom.ffwll.local> References: <1458576016-30348-1-git-send-email-ander.conselvan.de.oliveira@intel.com> <1458576016-30348-14-git-send-email-ander.conselvan.de.oliveira@intel.com> <20160322102427.GE4329@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x22c.google.com (mail-wm0-x22c.google.com [IPv6:2a00:1450:400c:c09::22c]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7DB356E75A for ; Tue, 22 Mar 2016 11:11:08 +0000 (UTC) Received: by mail-wm0-x22c.google.com with SMTP id l68so158169086wml.1 for ; Tue, 22 Mar 2016 04:11:08 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20160322102427.GE4329@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Cc: Ander Conselvan de Oliveira , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBNYXIgMjIsIDIwMTYgYXQgMTI6MjQ6MjdQTSArMDIwMCwgVmlsbGUgU3lyasOkbMOk IHdyb3RlOgo+IE9uIE1vbiwgTWFyIDIxLCAyMDE2IGF0IDA2OjAwOjE0UE0gKzAyMDAsIEFuZGVy IENvbnNlbHZhbiBkZSBPbGl2ZWlyYSB3cm90ZToKPiA+IFNwbGl0IGEgR0VOMiBzcGVjaWZpYyB2 ZXJzaW9uIGZyb20gaTl4eF9jcnRjX2NvbXB1dGVfY2xvY2soKS4gV2l0aCB0aGlzCj4gPiB0aGVy ZSBpcyBubyBuZWVkIGZvciBpOXh4X2dldF9yZWZjbGsoKSBhbnltb3JlLCBhbmQgdGhlIGRpZmZl cmVuY2VzCj4gPiBiZXR3ZWVuIHBsYXRmb3JtcyBiZWNvbWUgbW9yZSBvYnZpb3VzLgo+ID4gCj4g PiBTaWduZWQtb2ZmLWJ5OiBBbmRlciBDb25zZWx2YW4gZGUgT2xpdmVpcmEgPGFuZGVyLmNvbnNl bHZhbi5kZS5vbGl2ZWlyYUBpbnRlbC5jb20+Cj4gCj4gTGV0J3MgY2FsbCBpdCBpOHh4IHNoYWxs IHdlLiBUaGF0J3MgdGhlIG1vcmUgdHlwaWNhbCBjb252ZW50aW9uIGluIHRoZQo+IG1vZGVzZXQg Y29kZS4KClllYWgsIHdhbnRlZCB0byBkcm9wIHRoZSBzYW1lIGJpa2VzaGVkIC0gZ2VuWCBpcyBn ZW5lcmFsbHkgd2hhdCB3ZSB1c2UgZm9yCnJlbmRlciBzaWRlIHN0dWZmLCB3aGVyZWFzIHByb2R1 Y3QgbmFtZXMgYXJlIG1vcmUgdXNlZCBmb3IgbW9kZXNldCwgc2ltcGx5CmJlY2F1c2UgdGhhdCB0 ZW5kcyB0byBiZSB0aGUgc3BsaXRzIGFsb25nIHdoaWNoIElQIGJsb2NrcyBhcmUgcmV1c2VkLgot RGFuaWVsCgo+IAo+IE90aGVyd2lzZSBsb29rcyBPSywgc28gd2l0aCB0aGF0Cj4gUmV2aWV3ZWQt Ynk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gCj4g PiAtLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgfCA5MSArKysr KysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KPiA+ICAxIGZpbGUgY2hhbmdlZCwgNTMg aW5zZXJ0aW9ucygrKSwgMzggZGVsZXRpb25zKC0pCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kaXNwbGF5LmMKPiA+IGluZGV4IGRjYTViMTUuLjI0NWQ2YzYgMTAwNjQ0Cj4gPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gQEAgLTU5NSw3ICs1OTUsNyBAQCBpbnRl bF9saW1pdChzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwgaW50IHJlZmNsaykK PiA+ICAJY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQ7Cj4gPiAgCj4gPiAgCWlmIChJU19CUk9Y VE9OKGRldikgfHwgSVNfQ0hFUlJZVklFVyhkZXYpIHx8IElTX1ZBTExFWVZJRVcoZGV2KSB8fAo+ ID4gLQkgICAgSEFTX1BDSF9TUExJVChkZXYpKQo+ID4gKwkgICAgSEFTX1BDSF9TUExJVChkZXYp IHx8IElTX0dFTjIoZGV2KSkKPiA+ICAJCWxpbWl0ID0gTlVMTDsKPiA+ICAKPiA+ICAJaWYgKElT X0c0WChkZXYpKSB7Cj4gPiBAQCAtNjEwLDEzICs2MTAsNiBAQCBpbnRlbF9saW1pdChzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwgaW50IHJlZmNsaykKPiA+ICAJCQlsaW1pdCA9 ICZpbnRlbF9saW1pdHNfaTl4eF9sdmRzOwo+ID4gIAkJZWxzZQo+ID4gIAkJCWxpbWl0ID0gJmlu dGVsX2xpbWl0c19pOXh4X3Nkdm87Cj4gPiAtCX0gZWxzZSB7Cj4gPiAtCQlpZiAoaW50ZWxfcGlw ZV93aWxsX2hhdmVfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykpCj4gPiAtCQkJ bGltaXQgPSAmaW50ZWxfbGltaXRzX2k4eHhfbHZkczsKPiA+IC0JCWVsc2UgaWYgKGludGVsX3Bp cGVfd2lsbF9oYXZlX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0RWTykpCj4gPiAtCQkJ bGltaXQgPSAmaW50ZWxfbGltaXRzX2k4eHhfZHZvOwo+ID4gLQkJZWxzZQo+ID4gLQkJCWxpbWl0 ID0gJmludGVsX2xpbWl0c19pOHh4X2RhYzsKPiA+ICAJfQo+ID4gIAo+ID4gIAlXQVJOX09OKGxp bWl0ID09IE5VTEwpOwo+ID4gQEAgLTcxMDIsMjcgKzcwOTUsNiBAQCBzdGF0aWMgaW5saW5lIGJv b2wgaW50ZWxfcGFuZWxfdXNlX3NzYyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Cj4gPiAgCQkmJiAhKGRldl9wcml2LT5xdWlya3MgJiBRVUlSS19MVkRTX1NTQ19ESVNBQkxFKTsK PiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIGludCBpOXh4X2dldF9yZWZjbGsoY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gPiAtewo+ID4gLQlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2ID0gY3J0Y19zdGF0ZS0+YmFzZS5jcnRjLT5kZXY7Cj4gPiAtCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gPiAtCWludCByZWZj bGs7Cj4gPiAtCj4gPiAtCVdBUk5fT04oIWNydGNfc3RhdGUtPmJhc2Uuc3RhdGUpOwo+ID4gLQo+ ID4gLQlpZiAoaW50ZWxfcGlwZV93aWxsX2hhdmVfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQ VVRfTFZEUykgJiYKPiA+IC0JICAgIGludGVsX3BhbmVsX3VzZV9zc2MoZGV2X3ByaXYpKSB7Cj4g PiAtCQlyZWZjbGsgPSBkZXZfcHJpdi0+dmJ0Lmx2ZHNfc3NjX2ZyZXE7Cj4gPiAtCQlEUk1fREVC VUdfS01TKCJ1c2luZyBTU0MgcmVmZXJlbmNlIGNsb2NrIG9mICVkIGtIelxuIiwgcmVmY2xrKTsK PiA+IC0JfSBlbHNlIGlmICghSVNfR0VOMihkZXYpKSB7Cj4gPiAtCQlyZWZjbGsgPSA5NjAwMDsK PiA+IC0JfSBlbHNlIHsKPiA+IC0JCXJlZmNsayA9IDQ4MDAwOwo+ID4gLQl9Cj4gPiAtCj4gPiAt CXJldHVybiByZWZjbGs7Cj4gPiAtfQo+ID4gLQo+ID4gIHN0YXRpYyB1aW50MzJfdCBwbnZfZHBs bF9jb21wdXRlX2ZwKHN0cnVjdCBkcGxsICpkcGxsKQo+ID4gIHsKPiA+ICAJcmV0dXJuICgxIDw8 IGRwbGwtPm4pIDw8IDE2IHwgZHBsbC0+bTI7Cj4gPiBAQCAtNzg3NywxNCArNzg0OSw1MCBAQCBz dGF0aWMgdm9pZCBpOXh4X3NldF9waXBlY29uZihzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0 YykKPiA+ICAJUE9TVElOR19SRUFEKFBJUEVDT05GKGludGVsX2NydGMtPnBpcGUpKTsKPiA+ICB9 Cj4gPiAgCj4gPiArc3RhdGljIGludCBnZW4yX2NydGNfY29tcHV0ZV9jbG9jayhzdHJ1Y3QgaW50 ZWxfY3J0YyAqY3J0YywKPiA+ICsJCQkJICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5k ZXY7Cj4gPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7Cj4gPiArCWNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0Owo+ID4gKwlpbnQgcmVmY2xr ID0gNDgwMDA7Cj4gPiArCj4gPiArCW1lbXNldCgmY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSwg MCwKPiA+ICsJICAgICAgIHNpemVvZihjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlKSk7Cj4gPiAr Cj4gPiArCWlmIChpbnRlbF9waXBlX3dpbGxfaGF2ZV90eXBlKGNydGNfc3RhdGUsIElOVEVMX09V VFBVVF9MVkRTKSkgewo+ID4gKwkJaWYgKGludGVsX3BhbmVsX3VzZV9zc2MoZGV2X3ByaXYpKSB7 Cj4gPiArCQkJcmVmY2xrID0gZGV2X3ByaXYtPnZidC5sdmRzX3NzY19mcmVxOwo+ID4gKwkJCURS TV9ERUJVR19LTVMoInVzaW5nIFNTQyByZWZlcmVuY2UgY2xvY2sgb2YgJWQga0h6XG4iLCByZWZj bGspOwo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2k4eHhfbHZk czsKPiA+ICsJfSBlbHNlIGlmIChpbnRlbF9waXBlX3dpbGxfaGF2ZV90eXBlKGNydGNfc3RhdGUs IElOVEVMX09VVFBVVF9EVk8pKSB7Cj4gPiArCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfaTh4eF9k dm87Cj4gPiArCX0gZWxzZSB7Cj4gPiArCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfaTh4eF9kYWM7 Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWYgKCFjcnRjX3N0YXRlLT5jbG9ja19zZXQgJiYKPiA+ICsJ ICAgICFpOXh4X2ZpbmRfYmVzdF9kcGxsKGxpbWl0LCBjcnRjX3N0YXRlLCBjcnRjX3N0YXRlLT5w b3J0X2Nsb2NrLAo+ID4gKwkJCQkgcmVmY2xrLCBOVUxMLCAmY3J0Y19zdGF0ZS0+ZHBsbCkpIHsK PiA+ICsJCURSTV9FUlJPUigiQ291bGRuJ3QgZmluZCBQTEwgc2V0dGluZ3MgZm9yIG1vZGUhXG4i KTsKPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gKwl9Cj4gPiArCj4gPiArCWk4eHhfY29tcHV0 ZV9kcGxsKGNydGMsIGNydGNfc3RhdGUsIE5VTEwpOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ ICt9Cj4gPiArCj4gPiAgc3RhdGljIGludCBpOXh4X2NydGNfY29tcHV0ZV9jbG9jayhzdHJ1Y3Qg aW50ZWxfY3J0YyAqY3J0YywKPiA+ICAJCQkJICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUpCj4gPiAgewo+ID4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFz ZS5kZXY7Cj4gPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2 X3ByaXZhdGU7Cj4gPiAtCWludCByZWZjbGs7Cj4gPiAgCWJvb2wgb2s7Cj4gPiAgCWNvbnN0IGlu dGVsX2xpbWl0X3QgKmxpbWl0Owo+ID4gKwlpbnQgcmVmY2xrID0gOTYwMDA7Cj4gPiAgCj4gPiAg CW1lbXNldCgmY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSwgMCwKPiA+ICAJICAgICAgIHNpemVv ZihjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlKSk7Cj4gPiBAQCAtNzg5Miw5ICs3OTAwLDEzIEBA IHN0YXRpYyBpbnQgaTl4eF9jcnRjX2NvbXB1dGVfY2xvY2soc3RydWN0IGludGVsX2NydGMgKmNy dGMsCj4gPiAgCWlmIChjcnRjX3N0YXRlLT5oYXNfZHNpX2VuY29kZXIpCj4gPiAgCQlyZXR1cm4g MDsKPiA+ICAKPiA+IC0JaWYgKCFjcnRjX3N0YXRlLT5jbG9ja19zZXQpIHsKPiA+IC0JCXJlZmNs ayA9IGk5eHhfZ2V0X3JlZmNsayhjcnRjX3N0YXRlKTsKPiA+ICsJaWYgKGludGVsX3BpcGVfd2ls bF9oYXZlX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0xWRFMpICYmCj4gPiArCSAgICBp bnRlbF9wYW5lbF91c2Vfc3NjKGRldl9wcml2KSkgewo+ID4gKwkJcmVmY2xrID0gZGV2X3ByaXYt PnZidC5sdmRzX3NzY19mcmVxOwo+ID4gKwkJRFJNX0RFQlVHX0tNUygidXNpbmcgU1NDIHJlZmVy ZW5jZSBjbG9jayBvZiAlZCBrSHpcbiIsIHJlZmNsayk7Cj4gPiArCX0KPiA+ICAKPiA+ICsJaWYg KCFjcnRjX3N0YXRlLT5jbG9ja19zZXQpIHsKPiA+ICAJCS8qCj4gPiAgCQkgKiBSZXR1cm5zIGEg c2V0IG9mIGRpdmlzb3JzIGZvciB0aGUgZGVzaXJlZCB0YXJnZXQgY2xvY2sgd2l0aAo+ID4gIAkJ ICogdGhlIGdpdmVuIHJlZmNsaywgb3IgRkFMU0UuICBUaGUgcmV0dXJuZWQgdmFsdWVzIHJlcHJl c2VudAo+ID4gQEAgLTc5MTIsMTEgKzc5MjQsNyBAQCBzdGF0aWMgaW50IGk5eHhfY3J0Y19jb21w dXRlX2Nsb2NrKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+ID4gIAkJfQo+ID4gIAl9Cj4gPiAg Cj4gPiAtCWlmIChJU19HRU4yKGRldikpIHsKPiA+IC0JCWk4eHhfY29tcHV0ZV9kcGxsKGNydGMs IGNydGNfc3RhdGUsIE5VTEwpOwo+ID4gLQl9IGVsc2Ugewo+ID4gLQkJaTl4eF9jb21wdXRlX2Rw bGwoY3J0YywgY3J0Y19zdGF0ZSwgTlVMTCk7Cj4gPiAtCX0KPiA+ICsJaTl4eF9jb21wdXRlX2Rw bGwoY3J0YywgY3J0Y19zdGF0ZSwgTlVMTCk7Cj4gPiAgCj4gPiAgCXJldHVybiAwOwo+ID4gIH0K PiA+IEBAIC0xNDk0MywxMyArMTQ5NTEsMjAgQEAgdm9pZCBpbnRlbF9pbml0X2Rpc3BsYXlfaG9v a3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ID4gIAkJZGV2X3ByaXYtPmRp c3BsYXkuY3J0Y19jb21wdXRlX2Nsb2NrID0gdmx2X2NydGNfY29tcHV0ZV9jbG9jazsKPiA+ICAJ CWRldl9wcml2LT5kaXNwbGF5LmNydGNfZW5hYmxlID0gdmFsbGV5dmlld19jcnRjX2VuYWJsZTsK PiA+ICAJCWRldl9wcml2LT5kaXNwbGF5LmNydGNfZGlzYWJsZSA9IGk5eHhfY3J0Y19kaXNhYmxl Owo+ID4gLQl9IGVsc2Ugewo+ID4gKwl9IGVsc2UgaWYgKCFJU19HRU4yKGRldl9wcml2KSkgewo+ ID4gIAkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X3BpcGVfY29uZmlnID0gaTl4eF9nZXRfcGlwZV9j b25maWc7Cj4gPiAgCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfaW5pdGlhbF9wbGFuZV9jb25maWcg PQo+ID4gIAkJCWk5eHhfZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnOwo+ID4gIAkJZGV2X3ByaXYt PmRpc3BsYXkuY3J0Y19jb21wdXRlX2Nsb2NrID0gaTl4eF9jcnRjX2NvbXB1dGVfY2xvY2s7Cj4g PiAgCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2VuYWJsZSA9IGk5eHhfY3J0Y19lbmFibGU7Cj4g PiAgCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2Rpc2FibGUgPSBpOXh4X2NydGNfZGlzYWJsZTsK PiA+ICsJfSBlbHNlIHsKPiA+ICsJCWRldl9wcml2LT5kaXNwbGF5LmdldF9waXBlX2NvbmZpZyA9 IGk5eHhfZ2V0X3BpcGVfY29uZmlnOwo+ID4gKwkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X2luaXRp YWxfcGxhbmVfY29uZmlnID0KPiA+ICsJCQlpOXh4X2dldF9pbml0aWFsX3BsYW5lX2NvbmZpZzsK PiA+ICsJCWRldl9wcml2LT5kaXNwbGF5LmNydGNfY29tcHV0ZV9jbG9jayA9IGdlbjJfY3J0Y19j b21wdXRlX2Nsb2NrOwo+ID4gKwkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19lbmFibGUgPSBpOXh4 X2NydGNfZW5hYmxlOwo+ID4gKwkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19kaXNhYmxlID0gaTl4 eF9jcnRjX2Rpc2FibGU7Cj4gPiAgCX0KPiA+ICAKPiA+ICAJLyogUmV0dXJucyB0aGUgY29yZSBk aXNwbGF5IGNsb2NrIHNwZWVkICovCj4gPiAtLSAKPiA+IDIuNC4zCj4gPiAKPiA+IF9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPiBJbnRlbC1nZnggbWFp bGluZyBsaXN0Cj4gPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gPiBodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo+IAo+IC0t IAo+IFZpbGxlIFN5cmrDpGzDpAo+IEludGVsIE9UQwo+IF9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVs LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUg RW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5n IGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=