From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: Re: [PATCH v2 2/2] drm/i915: Wait for pending modesets to complete before trying link training, v2. Date: Mon, 26 Jun 2017 11:24:04 +0200 Message-ID: References: <20170614090842.9669-1-maarten.lankhorst@linux.intel.com> <20170614090842.9669-2-maarten.lankhorst@linux.intel.com> <20170614134424.GN12629@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170614134424.GN12629@intel.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: =?UTF-8?B?VmlsbGUgU3lyasOkbMOk?= Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T3AgMTQtMDYtMTcgb20gMTU6NDQgc2NocmVlZiBWaWxsZSBTeXJqw6Rsw6Q6Cj4gT24gV2VkLCBK dW4gMTQsIDIwMTcgYXQgMTE6MDg6NDJBTSArMDIwMCwgTWFhcnRlbiBMYW5raG9yc3Qgd3JvdGU6 Cj4+IFRoZSBub25ibG9ja2luZyBtb2Rlc2V0IHRlc3RzIHdlcmUgZmFpbGluZyBvbiBzeXN0ZW1z IHdpdGggYSBEUCBvdXRwdXQsCj4+IGJlY2F1c2UgbGlqbmsgdHJhaW5pbmcgY291bGQgb2NjdXIg ZHVyaW5nIHRoZSBtb2Rlc2V0Lgo+Pgo+PiBXaXRoIG5vcm1hbCBtb2Rlc2V0cyB3ZSdyZSBwcm90 ZWN0ZWQgYnkgdGhlIGNvbm5lY3Rpb25fbXV0ZXggbG9jaywKPj4gYnV0IG5vbmJsb2NraW5nIG1v ZGVzZXRzIGRyb3AgbG9ja3MgYmVmb3JlIGNvbXBsZXRpbmcuIFRvIGdldCBhcm91bmQKPj4gdGhh dCwgY2hlY2sgaWYgdGhlIG1vc3QgcmVjZW50IGNydGNfc3RhdGUgaGFzIGEgbW9kZXNldCwgYW5k IGlmIHRoaXMKPj4gaXMgdGhlIGNhc2UsIHdhaXQgZm9yIGFsbCBvdXRzdGFuZGluZyBhdG9taWMg dXBkYXRlcyBvbiB0aGF0IGNydGMKPj4gdG8gY29tcGxldGUuCj4+Cj4+IFRoaXMgZml4ZXMgdGhl IGZvbGxvd2luZyBzcGV3IHdoZW4gcnVubmluZyBub25ibG9ja2luZyB0ZXN0czoKPj4gWyAxMDYx LjY1Mzc3OF0gLS0tLS0tLS0tLS0tWyBjdXQgaGVyZSBdLS0tLS0tLS0tLS0tCj4+IFsgMTA2MS42 NTM3ODFdIFdBUk5JTkc6IENQVTogMSBQSUQ6IDgxNjUgYXQKPj4gZHJpdmVycy9ncHUvZHJtL2Ry bV9pcnEuYzoxMjE3IGRybV93YWl0X29uZV92YmxhbmsrMHgxNjUvMHgxYTAKPj4gWyAxMDYxLjY1 Mzc4Ml0gdmJsYW5rIG5vdCBhdmFpbGFibGUgb24gY3J0YyAwLCByZXQ9LTIyCj4+IFsgMTA2MS42 NTM3ODNdIE1vZHVsZXMgbGlua2VkIGluOiB2Z2VtIHNuZF9oZGFfaW50ZWwgaTkxNQo+PiBzbmRf aGRhX2NvZGVjX2hkbWkgc25kX2hkYV9jb2RlY19yZWFsdGVrIHNuZF9oZGFfY29kZWNfZ2VuZXJp Ywo+PiB4ODZfcGtnX3RlbXBfdGhlcm1hbCBpbnRlbF9wb3dlcmNsYW1wIGNvcmV0ZW1wIGNyY3Qx MGRpZl9wY2xtdWwKPj4gY3JjMzJfcGNsbXVsIGdoYXNoX2NsbXVsbmlfaW50ZWwgc25kX2hkYV9j b2RlYyBzbmRfaHdkZXAgc25kX2hkYV9jb3JlCj4+IHNuZF9wY20gbWVpX21lIG1laSBlMTAwMGUg cHRwIHBwc19jb3JlIGkyY19oaWQgW2xhc3QgdW5sb2FkZWQ6IHZnZW1dCj4+IFsgMTA2MS42NTM3 OTZdIENQVTogMSBQSUQ6IDgxNjUgQ29tbToga3dvcmtlci8xOjMgVGFpbnRlZDogRyAgICAgVSAg Vwo+PiA0LjEwLjAtcmMxLUNJLUN1c3RvbV8xMTQrICMxCj4+IFsgMTA2MS42NTM3OTddIEhhcmR3 YXJlIG5hbWU6IEdJR0FCWVRFIEdCLUJLaTVBLTcyMDAvTUZMUDVBUC0wMCwgQklPUyBGMQo+PiAw Ny8yNy8yMDE2Cj4+IFsgMTA2MS42NTM4MTJdIFdvcmtxdWV1ZTogZXZlbnRzIGk5MTVfaHBkX3Bv bGxfaW5pdF93b3JrIFtpOTE1XQo+PiBbIDEwNjEuNjUzODEzXSBDYWxsIFRyYWNlOgo+PiBbIDEw NjEuNjUzODE2XSAgZHVtcF9zdGFjaysweDY3LzB4OTIKPj4gWyAxMDYxLjY1MzgxOF0gIF9fd2Fy bisweGM2LzB4ZTAKPj4gWyAxMDYxLjY1MzgxOV0gIHdhcm5fc2xvd3BhdGhfZm10KzB4NGEvMHg1 MAo+PiBbIDEwNjEuNjUzODIwXSAgPyBkcm1fdmJsYW5rX2dldCsweDc0LzB4YzAKPj4gWyAxMDYx LjY1MzgyMV0gIGRybV93YWl0X29uZV92YmxhbmsrMHgxNjUvMHgxYTAKPj4gWyAxMDYxLjY1Mzgy M10gID8gZHJtX2RwX2RwY2Rfd3JpdGUrMHgxNi8weDIwCj4+IFsgMTA2MS42NTM4MzddICA/IGlu dGVsX2RwX3NldF9saW5rX3RyYWluKzB4NDQvMHhlMCBbaTkxNV0KPj4gWyAxMDYxLjY1Mzg1MV0g IGludGVsX2RwX2NoZWNrX2xpbmtfc3RhdHVzKzB4MTEzLzB4MWEwIFtpOTE1XQo+PiBbIDEwNjEu NjUzODY0XSAgaW50ZWxfZHBfZGV0ZWN0KzB4NWExLzB4YTQwIFtpOTE1XQo+PiBbIDEwNjEuNjUz ODY2XSAgZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KzB4OGQvMHgxMTAKPj4gWyAxMDYxLjY1Mzg4 MF0gIGk5MTVfaHBkX3BvbGxfaW5pdF93b3JrKzB4YWIvMHhkMCBbaTkxNV0KPj4gWyAxMDYxLjY1 Mzg4Ml0gIHByb2Nlc3Nfb25lX3dvcmsrMHgxZjQvMHg2ZDAKPj4gWyAxMDYxLjY1Mzg4M10gID8g cHJvY2Vzc19vbmVfd29yaysweDE2ZS8weDZkMAo+PiBbIDEwNjEuNjUzODg1XSAgd29ya2VyX3Ro cmVhZCsweDQ5LzB4NGEwCj4+IFsgMTA2MS42NTM4ODZdICBrdGhyZWFkKzB4MTA3LzB4MTQwCj4+ IFsgMTA2MS42NTM4ODhdICA/IHByb2Nlc3Nfb25lX3dvcmsrMHg2ZDAvMHg2ZDAKPj4gWyAxMDYx LjY1Mzg4OV0gID8ga3RocmVhZF9jcmVhdGVfb25fbm9kZSsweDQwLzB4NDAKPj4gWyAxMDYxLjY1 Mzg5MV0gIHJldF9mcm9tX2ZvcmsrMHgyNy8weDQwCj4+IFsgMTA2MS42NTM4OTJdIC0tLVsgZW5k IHRyYWNlIGY2MDM3NjE4NjY4ZDRjYmMgXS0tLQo+PiBbIDEwNjEuNjU2MzUzXSBbZHJtOmludGVs X2RwX3NldF9pZGxlX2xpbmtfdHJhaW4gW2k5MTVdXSAqRVJST1IqIFRpbWVkIG91dCB3YWl0aW5n IGZvciBEUCBpZGxlIHBhdHRlcm5zCj4+Cj4+IENoYW5nZXMgc2luY2UgdjE6Cj4+IC0gaW50ZWxf ZHBfZGV0ZWN0KCkgbm93IGhvbGRzIGNvbm5lY3Rpb25fbXV0ZXggYW5kIGhhcyBhbiBhY3F1aXJl X2N0eCwKPj4gICByZXdyaXRlIHBhdGNoIHRvIHRha2UgYWR2YW50YWdlIG9mIGl0Lgo+Pgo+PiBT aWduZWQtb2ZmLWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXgu aW50ZWwuY29tPgo+PiBCdWd6aWxsYTogaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93 X2J1Zy5jZ2k/aWQ9OTkyNzIKPj4gVGVzdGNhc2U6IGttc19hdG9taWNfdHJhbnNpdGlvbnMuMXgt bW9kZXNldC10cmFuc2l0aW9ucy1ub25ibG9ja2luZwo+PiAtLS0KPj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2RwLmMgfCA3MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr LS0tLS0tLQo+PiAgMSBmaWxlIGNoYW5nZWQsIDYwIGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9u cygtKQo+Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKPj4gaW5kZXggNjRmYTc3NGM4NTViLi5j N2E2Njg4M2U0NTMgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rw LmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwo+PiBAQCAtNDI0Mywy MSArNDI0MywzMiBAQCBzdGF0aWMgdm9pZAo+PiAgaW50ZWxfZHBfY2hlY2tfbGlua19zdGF0dXMo c3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPj4gIHsKPj4gIAlzdHJ1Y3QgaW50ZWxfZW5jb2Rl ciAqaW50ZWxfZW5jb2RlciA9ICZkcF90b19kaWdfcG9ydChpbnRlbF9kcCktPmJhc2U7Cj4+IC0J c3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2RwX3RvX2RldihpbnRlbF9kcCk7Cj4+ICAJ dTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07Cj4+ICsJc3RydWN0IGludGVsX2Nv bm5lY3RvciAqaW50ZWxfY29ubmVjdG9yID0gaW50ZWxfZHAtPmF0dGFjaGVkX2Nvbm5lY3RvcjsK Pj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4+ICAKPj4gLQlXQVJOX09OKCFkcm1fbW9kZXNl dF9pc19sb2NrZWQoJmRldi0+bW9kZV9jb25maWcuY29ubmVjdGlvbl9tdXRleCkpOwo+PiAtCj4+ IC0JaWYgKCFpbnRlbF9kcF9nZXRfbGlua19zdGF0dXMoaW50ZWxfZHAsIGxpbmtfc3RhdHVzKSkg ewo+PiAtCQlEUk1fRVJST1IoIkZhaWxlZCB0byBnZXQgbGluayBzdGF0dXNcbiIpOwo+PiArCWNy dGMgPSBpbnRlbF9jb25uZWN0b3ItPmJhc2Uuc3RhdGUtPmNydGM7Cj4+ICsJaWYgKCFjcnRjKQo+ PiAgCQlyZXR1cm47Cj4+IC0JfQo+PiAgCj4+IC0JaWYgKCFpbnRlbF9lbmNvZGVyLT5iYXNlLmNy dGMpCj4+ICsJV0FSTl9PTighZHJtX21vZGVzZXRfaXNfbG9ja2VkKCZjcnRjLT5tdXRleCkpOwo+ PiArCj4+ICsJaWYgKCFjcnRjLT5zdGF0ZS0+YWN0aXZlKQo+PiAgCQlyZXR1cm47Cj4+ICAKPj4g LQlpZiAoIXRvX2ludGVsX2NydGMoaW50ZWxfZW5jb2Rlci0+YmFzZS5jcnRjKS0+YWN0aXZlKQo+ PiArCWlmIChkcm1fYXRvbWljX2NydGNfbmVlZHNfbW9kZXNldChjcnRjLT5zdGF0ZSkpIHsKPj4g KwkJaW50IHJldDsKPj4gKwo+PiArCQkvKiB3YWl0IGZvciBhdG9taWMgbW9kZXNldCB0byBjb21w bGV0ZSAqLwo+PiArCQlyZXQgPSBkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl9od19kb25lKGNy dGMpOwo+PiArCQlpZiAocmV0IDwgMCkKPj4gKwkJCURSTV9FUlJPUigiV2FpdGluZyBmb3IgaHdf ZG9uZSB0aW1lZCBvdXRcbiIpOwo+PiArCX0KPj4gKwo+PiArCWlmICghaW50ZWxfZHBfZ2V0X2xp bmtfc3RhdHVzKGludGVsX2RwLCBsaW5rX3N0YXR1cykpIHsKPj4gKwkJRFJNX0VSUk9SKCJGYWls ZWQgdG8gZ2V0IGxpbmsgc3RhdHVzXG4iKTsKPj4gIAkJcmV0dXJuOwo+PiArCX0KPj4gIAo+PiAg CS8qCj4+ICAJICogVmFsaWRhdGUgdGhlIGNhY2hlZCB2YWx1ZXMgb2YgaW50ZWxfZHAtPmxpbmtf cmF0ZSBhbmQKPj4gQEAgLTQyOTEsNyArNDMwMiw2IEBAIGludGVsX2RwX2NoZWNrX2xpbmtfc3Rh dHVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4+ICBzdGF0aWMgYm9vbAo+PiAgaW50ZWxf ZHBfc2hvcnRfcHVsc2Uoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPj4gIHsKPj4gLQlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfZHBfdG9fZGV2KGludGVsX2RwKTsKPj4gIAlzdHJ1 Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2RlciA9ICZkcF90b19kaWdfcG9ydChpbnRlbF9k cCktPmJhc2U7Cj4+ICAJdTggc2lua19pcnFfdmVjdG9yID0gMDsKPj4gIAl1OCBvbGRfc2lua19j b3VudCA9IGludGVsX2RwLT5zaW5rX2NvdW50Owo+PiBAQCAtNDMzMSw5ICs0MzQxLDggQEAgaW50 ZWxfZHBfc2hvcnRfcHVsc2Uoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPj4gIAkJCURSTV9E RUJVR19EUklWRVIoIkNQIG9yIHNpbmsgc3BlY2lmaWMgaXJxIHVuaGFuZGxlZFxuIik7Cj4+ICAJ fQo+PiAgCj4+IC0JZHJtX21vZGVzZXRfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0aW9u X211dGV4LCBOVUxMKTsKPj4gIAlpbnRlbF9kcF9jaGVja19saW5rX3N0YXR1cyhpbnRlbF9kcCk7 Cj4+IC0JZHJtX21vZGVzZXRfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0 ZXgpOwo+PiArCj4+ICAJaWYgKGludGVsX2RwLT5jb21wbGlhbmNlLnRlc3RfdHlwZSA9PSBEUF9U RVNUX0xJTktfVFJBSU5JTkcpIHsKPj4gIAkJRFJNX0RFQlVHX0tNUygiTGluayBUcmFpbmluZyBD b21wbGlhbmNlIFRlc3QgcmVxdWVzdGVkXG4iKTsKPj4gIAkJLyogU2VuZCBhIEhvdHBsdWcgVWV2 ZW50IHRvIHVzZXJzcGFjZSB0byBzdGFydCBtb2Rlc2V0ICovCj4+IEBAIC00NzM1LDggKzQ3NDQs MTkgQEAgaW50ZWxfZHBfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4+ ICAJCSAgICAgIGNvbm5lY3Rvci0+YmFzZS5pZCwgY29ubmVjdG9yLT5uYW1lKTsKPj4gIAo+PiAg CS8qIElmIGZ1bGwgZGV0ZWN0IGlzIG5vdCBwZXJmb3JtZWQgeWV0LCBkbyBhIGZ1bGwgZGV0ZWN0 ICovCj4+IC0JaWYgKCFpbnRlbF9kcC0+ZGV0ZWN0X2RvbmUpCj4+ICsJaWYgKCFpbnRlbF9kcC0+ ZGV0ZWN0X2RvbmUpIHsKPj4gKwkJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+PiArCQlpbnQgcmV0 Owo+PiArCj4+ICsJCWNydGMgPSBjb25uZWN0b3ItPnN0YXRlLT5jcnRjOwo+PiArCQlpZiAoY3J0 Yykgewo+PiArCQkJcmV0ID0gZHJtX21vZGVzZXRfbG9jaygmY3J0Yy0+bXV0ZXgsIGN0eCk7Cj4+ ICsJCQlpZiAocmV0KQo+PiArCQkJCXJldHVybiByZXQ7Cj4+ICsJCX0KPj4gKwo+PiAgCQlzdGF0 dXMgPSBpbnRlbF9kcF9sb25nX3B1bHNlKGludGVsX2RwLT5hdHRhY2hlZF9jb25uZWN0b3IpOwo+ PiArCX0KPj4gIAo+PiAgCWludGVsX2RwLT5kZXRlY3RfZG9uZSA9IGZhbHNlOwo+PiAgCj4+IEBA IC01MDI4LDEwICs1MDQ4LDM4IEBAIGludGVsX2RwX2hwZF9wdWxzZShzdHJ1Y3QgaW50ZWxfZGln aXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwgYm9vbCBsb25nX2hwZCkKPj4gIAl9Cj4+ICAKPj4g IAlpZiAoIWludGVsX2RwLT5pc19tc3QpIHsKPj4gKwkJc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVp cmVfY3R4IGN0eDsKPj4gKwkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9ICZpbnRl bF9kcC0+YXR0YWNoZWRfY29ubmVjdG9yLT5iYXNlOwo+PiArCQlzdHJ1Y3QgZHJtX2NydGMgKmNy dGM7Cj4+ICsJCWludCBpcmV0Owo+PiArCj4+ICsJCWRybV9tb2Rlc2V0X2FjcXVpcmVfaW5pdCgm Y3R4LCAwKTsKPj4gK3JldHJ5Ogo+PiArCQlpcmV0ID0gZHJtX21vZGVzZXRfbG9jaygmZGV2LT5t b2RlX2NvbmZpZy5jb25uZWN0aW9uX211dGV4LCAmY3R4KTsKPj4gKwkJaWYgKGlyZXQpCj4+ICsJ CQlnb3RvIGVycjsKPj4gKwo+PiArCQljcnRjID0gY29ubmVjdG9yLT5zdGF0ZS0+Y3J0YzsKPj4g KwkJaWYgKGNydGMpIHsKPj4gKwkJCWlyZXQgPSBkcm1fbW9kZXNldF9sb2NrKCZjcnRjLT5tdXRl eCwgJmN0eCk7Cj4gUGxlYXNlIG5vIG1vZGVzZXQgbG9ja3MgaW4gdGhlIGRpZ193b3JrLiBIbW0u IExvb2tzIGxpa2Ugd2UgYWxyZWFkeSBoYXZlCj4gaXQgdGhlcmUgdGhvdWdoIDooIEkgdGhvdWdo dCB3ZSBoYWQgbW92ZWQgdGhlIGxpbmsgcmV0cmFpbmluZyBmdWxseSBpbnRvCj4gdGhlIGhvcGx1 Z193b3JrLCBidXQgSSBndWVzcyBub3QuIENhbiB5b3UgdHJ5IHRvIGRvIHRoYXQgaW5zdGVhZD8K SSBzZWUgeW91J3ZlIGhhZCBhIHNlcmllcyB0byBmaXggdGhpcywgd2hhdCBoYXBwZW5lZCB0byBp dD8KPj4gKwkJCWlmIChpcmV0KQo+PiArCQkJCWdvdG8gZXJyOwo+PiArCQl9Cj4+ICsKPj4gIAkJ aWYgKCFpbnRlbF9kcF9zaG9ydF9wdWxzZShpbnRlbF9kcCkpIHsKPj4gIAkJCWludGVsX2RwLT5k ZXRlY3RfZG9uZSA9IGZhbHNlOwo+PiAgCQkJZ290byBwdXRfcG93ZXI7Cj4+ICAJCX0KPj4gKwo+ PiArZXJyOgo+PiArCQlpZiAoaXJldCA9PSAtRURFQURMSykgewo+PiArCQkJZHJtX21vZGVzZXRf YmFja29mZigmY3R4KTsKPj4gKwkJCWdvdG8gcmV0cnk7Cj4+ICsJCX0KPj4gKwo+PiArCQlkcm1f bW9kZXNldF9kcm9wX2xvY2tzKCZjdHgpOwo+PiArCQlkcm1fbW9kZXNldF9hY3F1aXJlX2Zpbmko JmN0eCk7Cj4+ICsJCVdBUk4oaXJldCwgIkFjcXVpcmluZyBtb2Rlc2V0IGxvY2tzIGZhaWxlZCB3 aXRoICVpXG4iLCBpcmV0KTsKPj4gIAl9Cj4+ICAKPj4gIAlyZXQgPSBJUlFfSEFORExFRDsKPj4g LS0gCj4+IDIuMTEuMAo+Pgo+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwo+PiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4+IEludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKPj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p bnRlbC1nZngK