From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 1/3] drm/i915/bios: iterate over child devices to initialize ddi_port_info Date: Wed, 6 Mar 2019 20:55:47 +0200 Message-ID: <20190306185547.GM3888@intel.com> References: <4d90cd6097b7b30daa54ebf078fe18fbd6d1ef2c.1551886309.git.jani.nikula@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 ESMTPS id 5D6B36E179 for ; Wed, 6 Mar 2019 18:55:51 +0000 (UTC) Content-Disposition: inline In-Reply-To: <4d90cd6097b7b30daa54ebf078fe18fbd6d1ef2c.1551886309.git.jani.nikula@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Jani Nikula Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBNYXIgMDYsIDIwMTkgYXQgMDU6MzQ6MTRQTSArMDIwMCwgSmFuaSBOaWt1bGEgd3Jv dGU6Cj4gSXRlcmF0ZSBvdmVyIGNoaWxkIGRldmljZXMgaW5zdGVhZCBvZiBwb3J0cyBpbiBwYXJz ZV9kZGlfcG9ydHMoKSB0bwo+IGluaXRpYWxpemUgZHJpX3BvcnRfaW5mby4gV2UnbGwgZXZlbnR1 YWxseSBuZWVkIHRvIGRlY2lkZSBzb21lIHN0dWZmCj4gYmFzZWQgb24gdGhlIGNoaWxkIGRldmlj ZSBvcmRlciwgd2hpY2ggbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBwb3J0Cj4gb3JkZXIuCj4g Cj4gQXMgYSBib251cywgdGhpcyBhbGxvd3MgYmV0dGVyIGFic3RyYWN0aW9ucyBmb3IgZS5nLiBk dm8gcG9ydCBtYXBwaW5nLgo+IAo+IFRoZXJlJ3MgYSBzdWJ0bGUgY2hhbmdlIGluIHRoZSBEREMg cGluIGFuZCBBVVggY2hhbm5lbCBzYW5pdGl6YXRpb24gYXMKPiB3ZSBjaGFuZ2UgdGhlIG9yZGVy LiBPdGhlcndpc2UsIHRoaXMgc2hvdWxkIG5vdCBjaGFuZ2UgYmVoYXZpb3VyLgoKSSBoYXZlIGEg ZmVlbGluZyB3ZSBoYWQgc29tZSBvZGQgY2FzZXMgd2l0aCB0aGUgcG9ydCBBIHZzLiBwb3J0IEUs IGJ1dCBJCnRoaW5rIHRob3NlIHdlcmUgcHJvYmFibHkgZHVlIHRvIHRoZSBub24tVkJUIGRlZmF1 bHRzIGZvciBwb3J0IEEKc21hc2hpbmcgaW50byB0aGUgVkJUIHByb3ZpZGVkIHZhbHVlcyBvZiBw b3J0IEUuCgpTbyB5ZWFoLCBJIHRoaW5rIChvciBhdCBsZWFzdCBob3BlKSB0aGF0IHRoaXMgaXMg ZmluZS4KUmV2aWV3ZWQtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5p bnRlbC5jb20+Cgo+IAo+IFNpZ25lZC1vZmYtYnk6IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBp bnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICB8ICAg MSArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYyB8IDEwNCArKysrKysrKysr KysrKysrKy0tLS0tLS0tLS0tLS0KPiAgMiBmaWxlcyBjaGFuZ2VkLCA1OSBpbnNlcnRpb25zKCsp LCA0NiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCBmZjAz OTc1MDA2OWQuLmVlZWIwZDljZmRjZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBA IC05NDYsNiArOTQ2LDcgQEAgc3RydWN0IGRkaV92YnRfcG9ydF9pbmZvIHsKPiAgI2RlZmluZSBI RE1JX0xFVkVMX1NISUZUX1VOS05PV04JMHhmZgo+ICAJdTggaGRtaV9sZXZlbF9zaGlmdDsKPiAg Cj4gKwl1OCBwcmVzZW50OjE7Cj4gIAl1OCBzdXBwb3J0c19kdmk6MTsKPiAgCXU4IHN1cHBvcnRz X2hkbWk6MTsKPiAgCXU4IHN1cHBvcnRzX2RwOjE7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Jpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3Mu Ywo+IGluZGV4IGI1MDhkOGE3MzVlMC4uZmMyN2ZmZTgxYzE0IDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Jpb3MuYwo+IEBAIC0xMjIyLDEwICsxMjIyLDExIEBAIHN0YXRpYyB2b2lkIHNhbml0 aXplX2RkY19waW4oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJaWYgKCFp bmZvLT5hbHRlcm5hdGVfZGRjX3BpbikKPiAgCQlyZXR1cm47Cj4gIAo+IC0JZm9yX2VhY2hfcG9y dF9tYXNrZWQocCwgKDEgPDwgcG9ydCkgLSAxKSB7Cj4gKwlmb3IgKHAgPSBQT1JUX0E7IHAgPCBJ OTE1X01BWF9QT1JUUzsgcCsrKSB7Cj4gIAkJc3RydWN0IGRkaV92YnRfcG9ydF9pbmZvICppID0g JmRldl9wcml2LT52YnQuZGRpX3BvcnRfaW5mb1twXTsKPiAgCj4gLQkJaWYgKGluZm8tPmFsdGVy bmF0ZV9kZGNfcGluICE9IGktPmFsdGVybmF0ZV9kZGNfcGluKQo+ICsJCWlmIChwID09IHBvcnQg fHwgIWktPnByZXNlbnQgfHwKPiArCQkgICAgaW5mby0+YWx0ZXJuYXRlX2RkY19waW4gIT0gaS0+ YWx0ZXJuYXRlX2RkY19waW4pCj4gIAkJCWNvbnRpbnVlOwo+ICAKPiAgCQlEUk1fREVCVUdfS01T KCJwb3J0ICVjIHRyeWluZyB0byB1c2UgdGhlIHNhbWUgRERDIHBpbiAoMHgleCkgYXMgcG9ydCAl YywgIgo+IEBAIC0xMjM5LDggKzEyNDAsOCBAQCBzdGF0aWMgdm9pZCBzYW5pdGl6ZV9kZGNfcGlu KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgCQkgKiBwb3J0LiBPdGhlcndp c2UgdGhleSBzaGFyZSB0aGUgc2FtZSBkZGMgYmluIGFuZAo+ICAJCSAqIHN5c3RlbSBjb3VsZG4n dCBjb21tdW5pY2F0ZSB3aXRoIHRoZW0gc2VwYXJhdGVseS4KPiAgCQkgKgo+IC0JCSAqIER1ZSB0 byBwYXJzaW5nIHRoZSBwb3J0cyBpbiBhbHBoYWJldGljYWwgb3JkZXIsCj4gLQkJICogYSBoaWdo ZXIgcG9ydCB3aWxsIGFsd2F5cyBjbG9iYmVyIGEgbG93ZXIgb25lLgo+ICsJCSAqIER1ZSB0byBw YXJzaW5nIHRoZSBwb3J0cyBpbiBjaGlsZCBkZXZpY2Ugb3JkZXIsCj4gKwkJICogYSBsYXRlciBk ZXZpY2Ugd2lsbCBhbHdheXMgY2xvYmJlciBhbiBlYXJsaWVyIG9uZS4KPiAgCQkgKi8KPiAgCQlp LT5zdXBwb3J0c19kdmkgPSBmYWxzZTsKPiAgCQlpLT5zdXBwb3J0c19oZG1pID0gZmFsc2U7Cj4g QEAgLTEyNTgsMTAgKzEyNTksMTEgQEAgc3RhdGljIHZvaWQgc2FuaXRpemVfYXV4X2NoKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgCWlmICghaW5mby0+YWx0ZXJuYXRlX2F1 eF9jaGFubmVsKQo+ICAJCXJldHVybjsKPiAgCj4gLQlmb3JfZWFjaF9wb3J0X21hc2tlZChwLCAo MSA8PCBwb3J0KSAtIDEpIHsKPiArCWZvciAocCA9IFBPUlRfQTsgcCA8IEk5MTVfTUFYX1BPUlRT OyBwKyspIHsKPiAgCQlzdHJ1Y3QgZGRpX3ZidF9wb3J0X2luZm8gKmkgPSAmZGV2X3ByaXYtPnZi dC5kZGlfcG9ydF9pbmZvW3BdOwo+ICAKPiAtCQlpZiAoaW5mby0+YWx0ZXJuYXRlX2F1eF9jaGFu bmVsICE9IGktPmFsdGVybmF0ZV9hdXhfY2hhbm5lbCkKPiArCQlpZiAocCA9PSBwb3J0IHx8ICFp LT5wcmVzZW50IHx8Cj4gKwkJICAgIGluZm8tPmFsdGVybmF0ZV9hdXhfY2hhbm5lbCAhPSBpLT5h bHRlcm5hdGVfYXV4X2NoYW5uZWwpCj4gIAkJCWNvbnRpbnVlOwo+ICAKPiAgCQlEUk1fREVCVUdf S01TKCJwb3J0ICVjIHRyeWluZyB0byB1c2UgdGhlIHNhbWUgQVVYIENIICgweCV4KSBhcyBwb3J0 ICVjLCAiCj4gQEAgLTEyNzUsOCArMTI3Nyw4IEBAIHN0YXRpYyB2b2lkIHNhbml0aXplX2F1eF9j aChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAkJICogcG9ydC4gT3RoZXJ3 aXNlIHRoZXkgc2hhcmUgdGhlIHNhbWUgYXV4IGNoYW5uZWwKPiAgCQkgKiBhbmQgc3lzdGVtIGNv dWxkbid0IGNvbW11bmljYXRlIHdpdGggdGhlbSBzZXBhcmF0ZWx5Lgo+ICAJCSAqCj4gLQkJICog RHVlIHRvIHBhcnNpbmcgdGhlIHBvcnRzIGluIGFscGhhYmV0aWNhbCBvcmRlciwKPiAtCQkgKiBh IGhpZ2hlciBwb3J0IHdpbGwgYWx3YXlzIGNsb2JiZXIgYSBsb3dlciBvbmUuCj4gKwkJICogRHVl IHRvIHBhcnNpbmcgdGhlIHBvcnRzIGluIGNoaWxkIGRldmljZSBvcmRlciwKPiArCQkgKiBhIGxh dGVyIGRldmljZSB3aWxsIGFsd2F5cyBjbG9iYmVyIGFuIGVhcmxpZXIgb25lLgo+ICAJCSAqLwo+ ICAJCWktPnN1cHBvcnRzX2RwID0gZmFsc2U7Cj4gIAkJaS0+YWx0ZXJuYXRlX2F1eF9jaGFubmVs ID0gMDsKPiBAQCAtMTMyNCw0OSArMTMyNiw1OCBAQCBzdGF0aWMgdTggbWFwX2RkY19waW4oc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1OCB2YnRfcGluKQo+ICAJcmV0dXJuIDA7 Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIHBhcnNlX2RkaV9wb3J0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwgZW51bSBwb3J0IHBvcnQsCj4gLQkJCSAgIHU4IGJkYl92ZXJzaW9u KQo+ICtzdGF0aWMgZW51bSBwb3J0IGR2b19wb3J0X3RvX3BvcnQodTggZHZvX3BvcnQpCj4gIHsK PiAtCXN0cnVjdCBjaGlsZF9kZXZpY2VfY29uZmlnICppdCwgKmNoaWxkID0gTlVMTDsKPiAtCXN0 cnVjdCBkZGlfdmJ0X3BvcnRfaW5mbyAqaW5mbyA9ICZkZXZfcHJpdi0+dmJ0LmRkaV9wb3J0X2lu Zm9bcG9ydF07Cj4gLQlpbnQgaSwgajsKPiAtCWJvb2wgaXNfZHZpLCBpc19oZG1pLCBpc19kcCwg aXNfZWRwLCBpc19jcnQ7Cj4gLQkvKiBFYWNoIERESSBwb3J0IGNhbiBoYXZlIG1vcmUgdGhhbiBv bmUgdmFsdWUgb24gdGhlICJEVk8gUG9ydCIgZmllbGQsCj4gKwkvKgo+ICsJICogRWFjaCBEREkg cG9ydCBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHZhbHVlIG9uIHRoZSAiRFZPIFBvcnQiIGZpZWxk LAo+ICAJICogc28gbG9vayBmb3IgYWxsIHRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIGVhY2ggcG9y dC4KPiAgCSAqLwo+IC0JaW50IGR2b19wb3J0c1tdWzNdID0gewo+IC0JCXtEVk9fUE9SVF9IRE1J QSwgRFZPX1BPUlRfRFBBLCAtMX0sCj4gLQkJe0RWT19QT1JUX0hETUlCLCBEVk9fUE9SVF9EUEIs IC0xfSwKPiAtCQl7RFZPX1BPUlRfSERNSUMsIERWT19QT1JUX0RQQywgLTF9LAo+IC0JCXtEVk9f UE9SVF9IRE1JRCwgRFZPX1BPUlRfRFBELCAtMX0sCj4gLQkJe0RWT19QT1JUX0NSVCwgRFZPX1BP UlRfSERNSUUsIERWT19QT1JUX0RQRX0sCj4gLQkJe0RWT19QT1JUX0hETUlGLCBEVk9fUE9SVF9E UEYsIC0xfSwKPiArCXN0YXRpYyBjb25zdCBpbnQgZHZvX3BvcnRzW11bM10gPSB7Cj4gKwkJW1BP UlRfQV0gPSB7IERWT19QT1JUX0hETUlBLCBEVk9fUE9SVF9EUEEsIC0xfSwKPiArCQlbUE9SVF9C XSA9IHsgRFZPX1BPUlRfSERNSUIsIERWT19QT1JUX0RQQiwgLTF9LAo+ICsJCVtQT1JUX0NdID0g eyBEVk9fUE9SVF9IRE1JQywgRFZPX1BPUlRfRFBDLCAtMX0sCj4gKwkJW1BPUlRfRF0gPSB7IERW T19QT1JUX0hETUlELCBEVk9fUE9SVF9EUEQsIC0xfSwKPiArCQlbUE9SVF9FXSA9IHsgRFZPX1BP UlRfQ1JULCBEVk9fUE9SVF9IRE1JRSwgRFZPX1BPUlRfRFBFfSwKPiArCQlbUE9SVF9GXSA9IHsg RFZPX1BPUlRfSERNSUYsIERWT19QT1JUX0RQRiwgLTF9LAo+ICAJfTsKPiArCWVudW0gcG9ydCBw b3J0Owo+ICsJaW50IGk7Cj4gIAo+IC0JLyoKPiAtCSAqIEZpbmQgdGhlIGZpcnN0IGNoaWxkIGRl dmljZSB0byByZWZlcmVuY2UgdGhlIHBvcnQsIHJlcG9ydCBpZiBtb3JlCj4gLQkgKiB0aGFuIG9u ZSBmb3VuZC4KPiAtCSAqLwo+IC0JZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT52YnQuY2hpbGRf ZGV2X251bTsgaSsrKSB7Cj4gLQkJaXQgPSBkZXZfcHJpdi0+dmJ0LmNoaWxkX2RldiArIGk7Cj4g LQo+IC0JCWZvciAoaiA9IDA7IGogPCAzOyBqKyspIHsKPiAtCQkJaWYgKGR2b19wb3J0c1twb3J0 XVtqXSA9PSAtMSkKPiArCWZvciAocG9ydCA9IFBPUlRfQTsgcG9ydCA8IEFSUkFZX1NJWkUoZHZv X3BvcnRzKTsgcG9ydCsrKSB7Cj4gKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHZvX3Bv cnRzW3BvcnRdKTsgaSsrKSB7Cj4gKwkJCWlmIChkdm9fcG9ydHNbcG9ydF1baV0gPT0gLTEpCj4g IAkJCQlicmVhazsKPiAgCj4gLQkJCWlmIChpdC0+ZHZvX3BvcnQgPT0gZHZvX3BvcnRzW3BvcnRd W2pdKSB7Cj4gLQkJCQlpZiAoY2hpbGQpIHsKPiAtCQkJCQlEUk1fREVCVUdfS01TKCJNb3JlIHRo YW4gb25lIGNoaWxkIGRldmljZSBmb3IgcG9ydCAlYyBpbiBWQlQsIHVzaW5nIHRoZSBmaXJzdC5c biIsCj4gLQkJCQkJCSAgICAgIHBvcnRfbmFtZShwb3J0KSk7Cj4gLQkJCQl9IGVsc2Ugewo+IC0J CQkJCWNoaWxkID0gaXQ7Cj4gLQkJCQl9Cj4gLQkJCX0KPiArCQkJaWYgKGR2b19wb3J0ID09IGR2 b19wb3J0c1twb3J0XVtpXSkKPiArCQkJCXJldHVybiBwb3J0Owo+ICAJCX0KPiAgCX0KPiAtCWlm ICghY2hpbGQpCj4gKwo+ICsJcmV0dXJuIFBPUlRfTk9ORTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgcGFyc2VfZGRpX3BvcnQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJ CQkgICBjb25zdCBzdHJ1Y3QgY2hpbGRfZGV2aWNlX2NvbmZpZyAqY2hpbGQsCj4gKwkJCSAgIHU4 IGJkYl92ZXJzaW9uKQo+ICt7Cj4gKwlzdHJ1Y3QgZGRpX3ZidF9wb3J0X2luZm8gKmluZm87Cj4g Kwlib29sIGlzX2R2aSwgaXNfaGRtaSwgaXNfZHAsIGlzX2VkcCwgaXNfY3J0Owo+ICsJZW51bSBw b3J0IHBvcnQ7Cj4gKwo+ICsJcG9ydCA9IGR2b19wb3J0X3RvX3BvcnQoY2hpbGQtPmR2b19wb3J0 KTsKPiArCWlmIChwb3J0ID09IFBPUlRfTk9ORSkKPiAgCQlyZXR1cm47Cj4gIAo+ICsJaW5mbyA9 ICZkZXZfcHJpdi0+dmJ0LmRkaV9wb3J0X2luZm9bcG9ydF07Cj4gKwo+ICsJaWYgKGluZm8tPnBy ZXNlbnQpIHsKPiArCQlEUk1fREVCVUdfS01TKCJNb3JlIHRoYW4gb25lIGNoaWxkIGRldmljZSBm b3IgcG9ydCAlYyBpbiBWQlQsIHVzaW5nIHRoZSBmaXJzdC5cbiIsCj4gKwkJCSAgICAgIHBvcnRf bmFtZShwb3J0KSk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWluZm8tPnByZXNlbnQgPSB0 cnVlOwo+ICsKPiAgCWlzX2R2aSA9IGNoaWxkLT5kZXZpY2VfdHlwZSAmIERFVklDRV9UWVBFX1RN RFNfRFZJX1NJR05BTElORzsKPiAgCWlzX2RwID0gY2hpbGQtPmRldmljZV90eXBlICYgREVWSUNF X1RZUEVfRElTUExBWVBPUlRfT1VUUFVUOwo+ICAJaXNfY3J0ID0gY2hpbGQtPmRldmljZV90eXBl ICYgREVWSUNFX1RZUEVfQU5BTE9HX09VVFBVVDsKPiBAQCAtMTQ5OCwxOSArMTUwOSwyMCBAQCBz dGF0aWMgdm9pZCBwYXJzZV9kZGlfcG9ydChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsIGVudW0gcG9ydCBwb3J0LAo+ICAKPiAgc3RhdGljIHZvaWQgcGFyc2VfZGRpX3BvcnRzKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTggYmRiX3ZlcnNpb24pCj4gIHsKPiAt CWVudW0gcG9ydCBwb3J0Owo+ICsJY29uc3Qgc3RydWN0IGNoaWxkX2RldmljZV9jb25maWcgKmNo aWxkOwo+ICsJaW50IGk7Cj4gIAo+ICAJaWYgKCFIQVNfRERJKGRldl9wcml2KSAmJiAhSVNfQ0hF UlJZVklFVyhkZXZfcHJpdikpCj4gIAkJcmV0dXJuOwo+ICAKPiAtCWlmICghZGV2X3ByaXYtPnZi dC5jaGlsZF9kZXZfbnVtKQo+IC0JCXJldHVybjsKPiAtCj4gIAlpZiAoYmRiX3ZlcnNpb24gPCAx NTUpCj4gIAkJcmV0dXJuOwo+ICAKPiAtCWZvciAocG9ydCA9IFBPUlRfQTsgcG9ydCA8IEk5MTVf TUFYX1BPUlRTOyBwb3J0KyspCj4gLQkJcGFyc2VfZGRpX3BvcnQoZGV2X3ByaXYsIHBvcnQsIGJk Yl92ZXJzaW9uKTsKPiArCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+dmJ0LmNoaWxkX2Rldl9u dW07IGkrKykgewo+ICsJCWNoaWxkID0gZGV2X3ByaXYtPnZidC5jaGlsZF9kZXYgKyBpOwo+ICsK PiArCQlwYXJzZV9kZGlfcG9ydChkZXZfcHJpdiwgY2hpbGQsIGJkYl92ZXJzaW9uKTsKPiArCX0K PiAgfQo+ICAKPiAgc3RhdGljIHZvaWQKPiAtLSAKPiAyLjIwLjEKCi0tIApWaWxsZSBTeXJqw6Rs w6QKSW50ZWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4