From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH v8 4/4] drm/i915: Introduce concept of a sub-platform Date: Fri, 29 Mar 2019 15:10:58 +0200 Message-ID: <87h8bl25ct.fsf@intel.com> References: <20190326074057.27833-5-tvrtko.ursulin@linux.intel.com> <20190327142328.31780-1-tvrtko.ursulin@linux.intel.com> <87pnqa0zvq.fsf@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3C2096E8FA for ; Fri, 29 Mar 2019 13:08:19 +0000 (UTC) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Tvrtko Ursulin , Intel-gfx@lists.freedesktop.org Cc: Lucas De Marchi , Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCAyOSBNYXIgMjAxOSwgVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGxpbnV4 LmludGVsLmNvbT4gd3JvdGU6Cj4gT24gMjkvMDMvMjAxOSAwOTo1NCwgSmFuaSBOaWt1bGEgd3Jv dGU6Cj4+IE9uIFdlZCwgMjcgTWFyIDIwMTksIFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxp bkBsaW51eC5pbnRlbC5jb20+IHdyb3RlOgo+Pj4gRnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRr by51cnN1bGluQGludGVsLmNvbT4KPj4+Cj4+PiBDb25jZXB0IG9mIGEgc3ViLXBsYXRmb3JtIGFs cmVhZHkgZXhpc3QgaW4gb3VyIGNvZGUgKGxpa2UgVUxYIGFuZCBVTFQKPj4+IHBsYXRmb3JtIHZh cmlhbnRzIGFuZCBzaW1pbGFyKSxpbXBsZW1lbnRlZCB2aWEgdGhlIG1hY3JvcyB3aGljaCBjaGVj ayBhCj4+PiBsaXN0IG9mIGRldmljZSBpZHMgdG8gZGV0ZXJtaW5lIGEgbWF0Y2guCj4+Pgo+Pj4g V2l0aCB0aGlzIHBhdGNoIHdlIGNvbnNvbGlkYXRlIGRldmljZSBpZHMgY2hlY2tpbmcgaW50byBh IHNpbmdsZSBmdW5jdGlvbgo+Pj4gY2FsbGVkIGR1cmluZyBlYXJseSBkcml2ZXIgbG9hZC4KPj4+ Cj4+PiBBIGZldyBsb3cgYml0cyBpbiB0aGUgcGxhdGZvcm0gbWFzayBhcmUgcmVzZXJ2ZWQgZm9y IHN1Yi1wbGF0Zm9ybQo+Pj4gaWRlbnRpZmljYXRpb24gYW5kIGRlZmluZWQgYXMgYSBwZXItcGxh dGZvcm0gbmFtZXNwYWNlLgo+Pj4KPj4+IEF0IHRoZSBzYW1lIHRpbWUgaXQgZnV0dXJlIHByb29m cyB0aGUgcGxhdGZvcm1fbWFzayBoYW5kbGluZyBieSBwcmVwYXJpbmcKPj4+IHRoZSBjb2RlIGZv ciBlYXN5IGV4dGVuZGluZywgYW5kIHRpZGllcyB0aGUgdmVyeSB2ZXJib3NlIFdBUk4gc3RyaW5n cwo+Pj4gZ2VuZXJhdGVkIHdoZW4gSVNfUExBVEZPUk0gbWFjcm9zIGFyZSBlbWJlZGRlZCBpbnRv IGEgV0FSTiB0eXBlCj4+PiBzdGF0ZW1lbnRzLgo+Pj4KPj4+IHYyOiBGaXhlZCBJU19TVUJQTEFU Rk9STS4gVXBkYXRlZCBjb21taXQgbXNnLgo+Pj4gdjM6IENocmlzIHdhcyByaWdodCwgdGhlcmUg aXMgYW4gb3JkZXJpbmcgcHJvYmxlbS4KPj4+Cj4+PiB2NDoKPj4+ICAgKiBDYXRjaC11cCB3aXRo IG5ldyBzdWItcGxhdGZvcm1zLgo+Pj4gICAqIFJlYmFzZSBmb3IgUlVOVElNRV9JTkZPLgo+Pj4g ICAqIERyb3Agc3VicGxhdGZvcm0gbWFzayB1bmlvbiB0cmlja3MgYW5kIGNvbnZlcnQgcGxhdGZv cm1fbWFzayB0byBhbgo+Pj4gICAgIGFycmF5IGZvciBleHRlbnNpYmlsaXR5Lgo+Pj4KPj4+IHY1 Ogo+Pj4gICAqIEZpeCBzdWJwbGF0Zm9ybSBjaGVjay4KPj4+ICAgKiBQcm90ZWN0IGFnYWluc3Qg Zm9yZ2V0dGluZyB0byBleHBhbmQgc3VicGxhdGZvcm0gYml0cy4KPj4+ICAgKiBSZW1vdmUgcGxh dGZvcm0gZW51bSB0YWxseWluZy4KPj4+ICAgKiBBZGQgc3VicGxhdGZvcm0gdG8gZXJyb3Igc3Rh dGUuIChDaHJpcykKPj4+ICAgKiBEcm9wIG1hY3JvcyBhbmQganVzdCB1c2Ugc3RhdGljIGlubGlu ZXMuCj4+PiAgICogUmVtb3ZlIHJlZHVuZGFudCBJUk9OTEFLRV9NLiAoVmlsbGUpCj4+Pgo+Pj4g djY6Cj4+PiAgICogU3BsaXQgb3V0IElyb25sYWtlIGNoYW5nZS4KPj4+ICAgKiBPcHRpbWl6ZSBz dWJwbGF0Zm9ybSBjaGVjay4KPj4+ICAgKiBVc2UgX19hbHdheXNfaW5saW5lLiAoTHVjYXMpCj4+ PiAgICogQWRkIHBsYXRmb3JtX21hc2sgY29tbWVudC4gKFBhdWxvKQo+Pj4gICAqIFBhc3Mgc3Rv cmVkIHJ1bnRpbWUgaW5mbyBpbiBlcnJvciBjYXB0dXJlLiAoQ2hyaXMpCj4+Pgo+Pj4gdjc6Cj4+ PiAgICogUmViYXNlZCBmb3IgbmV3IEFNTCBVTFggZGV2aWNlIGlkLgo+Pj4gICAqIEJ1bXAgcGxh dGZvcm0gbWFzayBhcnJheSBzaXplIGZvciBFSEwuCj4+PiAgICogU3RvcCBtZW50aW9uaW5nIGRl dmljZSBpZHMgaW4gaW50ZWxfZGV2aWNlX3N1YnBsYXRmb3JtX2luaXQgYnkgdXNpbmcKPj4+ICAg ICB0aGUgdHJpY2sgb2Ygc3BsaXR0aW5nIG1hY3JvcyBpOTE1X3BjaWlkcy5oLiAoSmFuaSkKPj4+ ICAgKiBBTUwgc2VlbXMgdG8gYmUgZWl0aGVyIGEgc3VicGxhdGZvcm0gb2YgS0JMIG9yIENGTCBz byBleHByZXNzIGl0IGxpa2UKPj4+ICAgICB0aGF0Lgo+Pj4KPj4+IHY4Ogo+Pj4gICAqIFVzZSBv bmUgZGV2aWNlIGlkIHRhYmxlIHBlciBzdWJwbGF0Zm9ybS4gKEphbmkpCj4+Pgo+Pj4gU2lnbmVk LW9mZi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPj4+IFN1 Z2dlc3RlZC1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4+PiBD YzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4+PiBDYzogSmFuaSBO aWt1bGEgPGphbmkubmlrdWxhQGludGVsLmNvbT4KPj4+IENjOiBMdWNhcyBEZSBNYXJjaGkgPGx1 Y2FzLmRlbWFyY2hpQGludGVsLmNvbT4KPj4+IENjOiBKb3NlIFNvdXphIDxqb3NlLnNvdXphQGlu dGVsLmNvbT4KPj4+IENjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50 ZWwuY29tPgo+Pj4gQ2M6IFBhdWxvIFphbm9uaSA8cGF1bG8uci56YW5vbmlAaW50ZWwuY29tPgo+ Pj4gUmV2aWV3ZWQtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPiAj IHY2Cj4+PiAtLS0KPj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgICAg ICB8ICAgOCArLQo+Pj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAg IHwgMTIzICsrKysrKysrKysrKysrKystLS0tLS0tCj4+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ3B1X2Vycm9yLmMgICAgfCAgIDMgKwo+Pj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3BjaS5jICAgICAgICAgIHwgICAyICstCj4+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2RldmljZV9pbmZvLmMgfCAgOTMgKysrKysrKysrKysrKysrKysKPj4+ICAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZGV2aWNlX2luZm8uaCB8ICAyNyArKysrLQo+Pj4gICA2IGZpbGVz IGNoYW5nZWQsIDIxNCBpbnNlcnRpb25zKCspLCA0MiBkZWxldGlvbnMoLSkKPj4+Cj4+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmMKPj4+IGluZGV4IGYxMzM0ZjVkNGVhZC4uNzQ3MzRkNzY2MWU1IDEw MDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+Pj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+Pj4gQEAgLTg2OCw2ICs4NjgsOCBAQCBz dGF0aWMgaW50IGk5MTVfZHJpdmVyX2luaXRfZWFybHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQo+Pj4gICAJaWYgKGk5MTVfaW5qZWN0X2xvYWRfZmFpbHVyZSgpKQo+Pj4gICAJ CXJldHVybiAtRU5PREVWOwo+Pj4gICAKPj4+ICsJaW50ZWxfZGV2aWNlX2luZm9fc3VicGxhdGZv cm1faW5pdChkZXZfcHJpdik7Cj4+PiArCj4+PiAgIAlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYt PmlycV9sb2NrKTsKPj4+ICAgCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+Z3B1X2Vycm9yLmxv Y2spOwo+Pj4gICAJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPmJhY2tsaWdodF9sb2NrKTsKPj4+IEBA IC0xNzE4LDEwICsxNzIwLDEyIEBAIHN0YXRpYyB2b2lkIGk5MTVfd2VsY29tZV9tZXNzYWdlcyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+PiAgIAlpZiAoZHJtX2RlYnVnICYg RFJNX1VUX0RSSVZFUikgewo+Pj4gICAJCXN0cnVjdCBkcm1fcHJpbnRlciBwID0gZHJtX2RlYnVn X3ByaW50ZXIoImk5MTUgZGV2aWNlIGluZm86Iik7Cj4+PiAgIAo+Pj4gLQkJZHJtX3ByaW50Zigm cCwgInBjaWlkPTB4JTA0eCByZXY9MHglMDJ4IHBsYXRmb3JtPSVzIGdlbj0laVxuIiwKPj4+ICsJ CWRybV9wcmludGYoJnAsICJwY2lpZD0weCUwNHggcmV2PTB4JTAyeCBwbGF0Zm9ybT0lcyAoc3Vi cGxhdGZvcm09MHgleCkgZ2VuPSVpXG4iLAo+Pj4gICAJCQkgICBJTlRFTF9ERVZJRChkZXZfcHJp diksCj4+PiAgIAkJCSAgIElOVEVMX1JFVklEKGRldl9wcml2KSwKPj4+ICAgCQkJICAgaW50ZWxf cGxhdGZvcm1fbmFtZShJTlRFTF9JTkZPKGRldl9wcml2KS0+cGxhdGZvcm0pLAo+Pj4gKwkJCSAg IGludGVsX3N1YnBsYXRmb3JtKFJVTlRJTUVfSU5GTyhkZXZfcHJpdiksCj4+PiArCQkJCQkgICAg IElOVEVMX0lORk8oZGV2X3ByaXYpLT5wbGF0Zm9ybSksCj4+PiAgIAkJCSAgIElOVEVMX0dFTihk ZXZfcHJpdikpOwo+Pj4gICAKPj4+ICAgCQlpbnRlbF9kZXZpY2VfaW5mb19kdW1wX2ZsYWdzKElO VEVMX0lORk8oZGV2X3ByaXYpLCAmcCk7Cj4+PiBAQCAtMTc2NCw4ICsxNzY4LDYgQEAgaTkxNV9k cml2ZXJfY3JlYXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2Rldmlj ZV9pZCAqZW50KQo+Pj4gICAJbWVtY3B5KGRldmljZV9pbmZvLCBtYXRjaF9pbmZvLCBzaXplb2Yo KmRldmljZV9pbmZvKSk7Cj4+PiAgIAlSVU5USU1FX0lORk8oaTkxNSktPmRldmljZV9pZCA9IHBk ZXYtPmRldmljZTsKPj4+ICAgCj4+PiAtCUJVSUxEX0JVR19PTihJTlRFTF9NQVhfUExBVEZPUk1T ID4KPj4+IC0JCSAgICAgQklUU19QRVJfVFlQRShkZXZpY2VfaW5mby0+cGxhdGZvcm1fbWFzaykp Owo+Pj4gICAJQlVHX09OKGRldmljZV9pbmZvLT5nZW4gPiBCSVRTX1BFUl9UWVBFKGRldmljZV9p bmZvLT5nZW5fbWFzaykpOwo+Pj4gICAKPj4+ICAgCXJldHVybiBpOTE1Owo+Pj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oCj4+PiBpbmRleCA5ZDNjYWI5NDA2ZTEuLmI3ZDNmM2E0NWVkOSAxMDA2NDQK Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPj4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPj4+IEBAIC0yMjk4LDcgKzIyOTgsNjcgQEAgc3Rh dGljIGlubGluZSB1bnNpZ25lZCBpbnQgaTkxNV9zZ19zZWdtZW50X3NpemUodm9pZCkKPj4+ICAg I2RlZmluZSBJU19SRVZJRChwLCBzaW5jZSwgdW50aWwpIFwKPj4+ICAgCShJTlRFTF9SRVZJRChw KSA+PSAoc2luY2UpICYmIElOVEVMX1JFVklEKHApIDw9ICh1bnRpbCkpCj4+PiAgIAo+Pj4gLSNk ZWZpbmUgSVNfUExBVEZPUk0oZGV2X3ByaXYsIHApIChJTlRFTF9JTkZPKGRldl9wcml2KS0+cGxh dGZvcm1fbWFzayAmIEJJVChwKSkKPj4+ICtzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVk IGludAo+Pj4gK19fcGxhdGZvcm1fbWFza19pbmRleChjb25zdCBzdHJ1Y3QgaW50ZWxfcnVudGlt ZV9pbmZvICppbmZvLAo+Pj4gKwkJICAgICAgZW51bSBpbnRlbF9wbGF0Zm9ybSBwKQo+Pj4gK3sK Pj4+ICsJY29uc3QgdW5zaWduZWQgaW50IHBiaXRzID0KPj4+ICsJCUJJVFNfUEVSX1RZUEUoaW5m by0+cGxhdGZvcm1fbWFza1swXSkgLSBJTlRFTF9TVUJQTEFURk9STV9CSVRTOwo+Pj4gKwo+Pj4g KwkvKiBFeHBhbmQgdGhlIHBsYXRmb3JtX21hc2sgYXJyYXkgaWYgdGhpcyBmYWlscy4gKi8KPj4+ ICsJQlVJTERfQlVHX09OKElOVEVMX01BWF9QTEFURk9STVMgPgo+Pj4gKwkJICAgICBwYml0cyAq IEFSUkFZX1NJWkUoaW5mby0+cGxhdGZvcm1fbWFzaykpOwo+Pj4gKwo+Pj4gKwlyZXR1cm4gcCAv IHBiaXRzOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVk IGludAo+Pj4gK19fcGxhdGZvcm1fbWFza19iaXQoY29uc3Qgc3RydWN0IGludGVsX3J1bnRpbWVf aW5mbyAqaW5mbywKPj4+ICsJCSAgICBlbnVtIGludGVsX3BsYXRmb3JtIHApCj4+PiArewo+Pj4g Kwljb25zdCB1bnNpZ25lZCBpbnQgcGJpdHMgPQo+Pj4gKwkJQklUU19QRVJfVFlQRShpbmZvLT5w bGF0Zm9ybV9tYXNrWzBdKSAtIElOVEVMX1NVQlBMQVRGT1JNX0JJVFM7Cj4+PiArCj4+PiArCXJl dHVybiBwICUgcGJpdHMgKyBJTlRFTF9TVUJQTEFURk9STV9CSVRTOwo+Pj4gK30KPj4+ICsKPj4+ ICtzdGF0aWMgaW5saW5lIHUzMgo+Pj4gK2ludGVsX3N1YnBsYXRmb3JtKGNvbnN0IHN0cnVjdCBp bnRlbF9ydW50aW1lX2luZm8gKmluZm8sIGVudW0gaW50ZWxfcGxhdGZvcm0gcCkKPj4+ICt7Cj4+ PiArCWNvbnN0IHVuc2lnbmVkIGludCBwaSA9IF9fcGxhdGZvcm1fbWFza19pbmRleChpbmZvLCBw KTsKPj4+ICsKPj4+ICsJcmV0dXJuIGluZm8tPnBsYXRmb3JtX21hc2tbcGldICYgSU5URUxfU1VC UExBVEZPUk1fQklUUzsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIF9fYWx3YXlzX2lubGluZSBi b29sCj4+PiArSVNfUExBVEZPUk0oY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUs IGVudW0gaW50ZWxfcGxhdGZvcm0gcCkKPj4+ICt7Cj4+PiArCWNvbnN0IHN0cnVjdCBpbnRlbF9y dW50aW1lX2luZm8gKmluZm8gPSBSVU5USU1FX0lORk8oaTkxNSk7Cj4+PiArCWNvbnN0IHVuc2ln bmVkIGludCBwaSA9IF9fcGxhdGZvcm1fbWFza19pbmRleChpbmZvLCBwKTsKPj4+ICsJY29uc3Qg dW5zaWduZWQgaW50IHBiID0gX19wbGF0Zm9ybV9tYXNrX2JpdChpbmZvLCBwKTsKPj4+ICsKPj4+ ICsJQlVJTERfQlVHX09OKCFfX2J1aWx0aW5fY29uc3RhbnRfcChwKSk7Cj4+PiArCj4+PiArCXJl dHVybiBpbmZvLT5wbGF0Zm9ybV9tYXNrW3BpXSAmIEJJVChwYik7Cj4+PiArfQo+Pj4gKwo+Pj4g K3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbAo+Pj4gK0lTX1NVQlBMQVRGT1JNKGNvbnN0IHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+Pj4gKwkgICAgICAgZW51bSBpbnRlbF9wbGF0 Zm9ybSBwLCB1bnNpZ25lZCBpbnQgcykKPj4+ICt7Cj4+PiArCWNvbnN0IHN0cnVjdCBpbnRlbF9y dW50aW1lX2luZm8gKmluZm8gPSBSVU5USU1FX0lORk8oaTkxNSk7Cj4+PiArCWNvbnN0IHVuc2ln bmVkIGludCBwaSA9IF9fcGxhdGZvcm1fbWFza19pbmRleChpbmZvLCBwKTsKPj4+ICsJY29uc3Qg dW5zaWduZWQgaW50IHBiID0gX19wbGF0Zm9ybV9tYXNrX2JpdChpbmZvLCBwKTsKPj4+ICsJY29u c3QgdW5zaWduZWQgaW50IG1zYiA9IEJJVFNfUEVSX1RZUEUoaW5mby0+cGxhdGZvcm1fbWFza1sw XSkgLSAxOwo+Pj4gKwljb25zdCB1MzIgbWFzayA9IGluZm8tPnBsYXRmb3JtX21hc2tbcGldOwo+ Pj4gKwo+Pj4gKwlCVUlMRF9CVUdfT04oIV9fYnVpbHRpbl9jb25zdGFudF9wKHApKTsKPj4+ICsJ QlVJTERfQlVHX09OKCFfX2J1aWx0aW5fY29uc3RhbnRfcChzKSk7Cj4+PiArCUJVSUxEX0JVR19P TigocykgPj0gSU5URUxfU1VCUExBVEZPUk1fQklUUyk7Cj4+PiArCj4+PiArCS8qIFNoaWZ0IGFu ZCB0ZXN0IG9uIHRoZSBNU0IgcG9zaXRpb24gc28gc2lnbiBmbGFnIGNhbiBiZSB1c2VkLiAqLwo+ Pj4gKwlyZXR1cm4gKChtYXNrIDw8IChtc2IgLSBwYikpICYgKG1hc2sgPDwgKG1zYiAtIHMpKSkg JiBCSVQobXNiKTsKPj4+ICt9Cj4+IAo+PiBIdW0sIEkgd29uZGVyIGlmIHRoZSBfX2J1aWx0aW5f Y29uc3RhbnRfcCgpJ3MgaW4gYW4gaW5saW5lIGZ1bmN0aW9uIGFyZQo+PiBnb2luZyB0byBiZSBh IHByb2JsZW0gZm9yIGNsYW5nLgo+Cj4gTm8gaWRlYS4uIGhhcyBzb21ldGhpbmcgYmVlbiBoYXBw ZW5pbmcgYWxvbmcgdGhlc2UgbGluZXMgaW4gdGhlIHBhc3Q/CgpUaGUgdGhyZWFkIGFuZCB0d28g cGF0Y2hlcyBzdGFydGluZyBmcm9tIFsxXSBtYXkgYmUgcmVsYXRlZC4KClsxXSBodHRwOi8vbWlk Lm1haWwtYXJjaGl2ZS5jb20vMjAxODEwMTYxMjI5MzguMTg3NTctMS1qYW5pLm5pa3VsYUBpbnRl bC5jb20KCj4gSXQgY291bGQgYmUgYSBtYWNybyBidXQgdGhlbiBhbGwgV0FSTl9PTidzIHdoaWNo IHVzZSBJU19QTEFURk9STSBleHBhbmQgCj4gdG8gbW9zdCB1bnJlYWRhYmxlIG1lc3MuCgpJIGtu b3cuCgo+Pj4gK3N0YXRpYyBib29sIGZpbmRfZGV2aWQodTE2IGlkLCBjb25zdCB1MTYgKnAsIHVu c2lnbmVkIGludCBudW0pCj4+PiArewo+Pj4gKwlmb3IgKDsgbnVtOyBudW0tLSwgcCsrKSB7Cj4+ PiArCQlpZiAoKnAgPT0gaWQpCj4+PiArCQkJcmV0dXJuIHRydWU7Cj4+PiArCX0KPj4gCj4+IFdo eSBzdWNoIGEgY29udm9sdXRlZCB3YXkgb2YgZG9pbmcgd2hhdCdzIHN1cHBvc2VkIHRvIGJlIGEg c2ltcGxlIHRoaW5nPwo+PiBJIGhhZCB0byBzdG9wIGF0IHRoYXQgYW5kIHdvbmRlciB3aGF0J3Mg Z29pbmcgb24uIFdoaWxlIHRoaXMgd291bGQndmUKPj4gYmVlbiBvYnZpb3VzIGFuZCByZXZpZXdl ZCB3aXRoIGEgMi1zZWNvbmQgZ2xhbmNlOgo+PiAKPj4gCWludCBpOwo+PiAKPj4gICAgICAgICAg Zm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQo+PiAgICAgICAgICAJaWYgKGlkID09IHBbaV0pCj4+ ICAgICAgICAgICAgICAgICAgCXJldHVybiB0cnVlOwo+PiAKPj4gVGhlIGFsdGVybmF0aXZlIGlz IHplcm8tdGVybWluYXRpbmcgdGhlIGFycmF5czoKPj4gCj4+IAlmb3IgKDsgKnA7IHArKykKPj4g ICAgICAgICAgCWlmIChpZCA9PSAqcCkKPj4gICAgICAgICAgICAgICAgICAJcmV0dXJuIHRydWU7 Cj4+IAo+Cj4gSSB0aGluayBtaW5lIGlzIG5vdCB0aGF0IGNvbXBsaWNhdGVkLiBJdCdzIGEgc3Rh bmRhcmQgY291bnRkb3duIHBhdHRlcm4sIAo+IG5vPyBXaHkgYWRkIGxvY2FscyBvciBudWxsIHRl cm1pbmF0aW9uIGlmIG5vdCBuZWVkZWQuCgpJIGp1c3QgbGlrZSB0byBzaW1wbGlmeSB0aGUgY29k ZSBmb3IgdGhlIGh1bWFucywgbm90IGZvciB0aGUgY29tcGlsZXIuCgpCUiwKSmFuaS4KCgoKLS0g CkphbmkgTmlrdWxhLCBJbnRlbCBPcGVuIFNvdXJjZSBHcmFwaGljcyBDZW50ZXIKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4