From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 2/4] drm: Create a format/modifier blob Date: Thu, 29 Jun 2017 22:49:44 +0300 Message-ID: <20170629194944.GG12629@intel.com> References: <20170623164544.7362-1-ben@bwidawsk.net> <20170623164544.7362-3-ben@bwidawsk.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20170623164544.7362-3-ben@bwidawsk.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ben Widawsky Cc: Liviu Dudau , Intel GFX , "Kristian H . Kristensen" , Daniel Stone , DRI Development List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBKdW4gMjMsIDIwMTcgYXQgMDk6NDU6NDJBTSAtMDcwMCwgQmVuIFdpZGF3c2t5IHdy b3RlOgo+IFVwZGF0ZWQgYmxvYiBsYXlvdXQgKFJvYiwgRGFuaWVsLCBLcmlzdGlhbiwgeGVycGkp Cj4gCj4gdjI6Cj4gKiBSZW1vdmVkIF9fcGFja2VkLCBhbmQgYWxpZ25tZW50ICguKykKPiAqIEZp eCBpbmRlbnQgaW4gZHJtX2Zvcm1hdF9tb2RpZmllciBmaWVsZHMgKExpdml1KQo+ICogUmVtb3Zl IGR1cGxpY2F0ZWQgbW9kaWZpZXIgPiA2NCBjaGVjayAoTGl2aXUpCj4gKiBDaGFuZ2UgY29tbWVu dCBhYm91dCBtb2RpZmllciAoTGl2aXUpCj4gKiBSZW1vdmUgYXJndW1lbnRzIHRvIGJsb2IgY3Jl YXRpb24sIHVzZSBwbGFuZSBpbnN0ZWFkIChMaXZpdSkKPiAqIEZpeCBkYXRhIHR5cGVzIChCZW4p Cj4gKiBNYWtlIHRoZSBibG9iIHBhcnQgb2YgdWFwaSAoRGFuaWVsKQo+IAo+IHYzOgo+IFJlbW92 ZSB1bnVzZWQgcmV0IGZpZWxkLgo+IENoYW5nZSBpLCBhbmQgaiB0byB1bnNpZ25lZCBpbnQgKEVt aWwpCj4gCj4gdjQ6Cj4gVXNlIHBsYW5lLT5tb2RpZmllcl9jb3VudCBpbnN0ZWFkIG9mIHJlY291 bnRpbmcgKERhbmllbCkKPiAKPiBDYzogUm9iIENsYXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgo+ IENjOiBLcmlzdGlhbiBILiBLcmlzdGVuc2VuIDxob2Vnc2JlcmdAZ21haWwuY29tPgo+IFNpZ25l ZC1vZmYtYnk6IEJlbiBXaWRhd3NreSA8YmVuQGJ3aWRhd3NrLm5ldD4KPiBSZXZpZXdlZC1ieTog RGFuaWVsIFN0b25lIDxkYW5pZWxzQGNvbGxhYm9yYS5jb20+ICh2MikKPiBSZXZpZXdlZC1ieTog TGl2aXUgRHVkYXUgPGxpdml1QGR1ZGF1LmNvLnVrPiAodjIpCj4gUmV2aWV3ZWQtYnk6IEVtaWwg VmVsaWtvdiA8ZW1pbC5sLnZlbGlrb3ZAZ21haWwuY29tPiAodjMpCj4gLS0tCj4gIGRyaXZlcnMv Z3B1L2RybS9kcm1fbW9kZV9jb25maWcuYyB8ICA3ICsrKysKPiAgZHJpdmVycy9ncHUvZHJtL2Ry bV9wbGFuZS5jICAgICAgIHwgODMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCj4gIGluY2x1ZGUvZHJtL2RybV9tb2RlX2NvbmZpZy5oICAgICB8ICA2ICsrKwo+ICBpbmNs dWRlL3VhcGkvZHJtL2RybV9tb2RlLmggICAgICAgfCA1MCArKysrKysrKysrKysrKysrKysrKysr Kwo+ICA0IGZpbGVzIGNoYW5nZWQsIDE0NiBpbnNlcnRpb25zKCspCj4gCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZV9jb25maWcuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1f bW9kZV9jb25maWcuYwo+IGluZGV4IGQ5ODYyMjU5YTJhNy4uNmJmYmMzODM5ZGY1IDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZV9jb25maWcuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9kcm1fbW9kZV9jb25maWcuYwo+IEBAIC0zMzcsNiArMzM3LDEzIEBAIHN0YXRpYyBp bnQgZHJtX21vZGVfY3JlYXRlX3N0YW5kYXJkX3Byb3BlcnRpZXMoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKPiAgCQlyZXR1cm4gLUVOT01FTTsKPiAgCWRldi0+bW9kZV9jb25maWcuZ2FtbWFfbHV0 X3NpemVfcHJvcGVydHkgPSBwcm9wOwo+ICAKPiArCXByb3AgPSBkcm1fcHJvcGVydHlfY3JlYXRl KGRldiwKPiArCQkJCSAgIERSTV9NT0RFX1BST1BfSU1NVVRBQkxFIHwgRFJNX01PREVfUFJPUF9C TE9CLAo+ICsJCQkJICAgIklOX0ZPUk1BVFMiLCAwKTsKPiArCWlmICghcHJvcCkKPiArCQlyZXR1 cm4gLUVOT01FTTsKPiArCWRldi0+bW9kZV9jb25maWcubW9kaWZpZXJzID0gcHJvcDsKPiArCj4g IAlyZXR1cm4gMDsKPiAgfQo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9w bGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9wbGFuZS5jCj4gaW5kZXggZDNmYzU2MWQ3YjQ4 Li44YTJkNTc2NTgzN2EgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9wbGFuZS5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9wbGFuZS5jCj4gQEAgLTYyLDYgKzYyLDg2IEBA IHN0YXRpYyB1bnNpZ25lZCBpbnQgZHJtX251bV9wbGFuZXMoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKPiAgCXJldHVybiBudW07Cj4gIH0KPiAgCj4gK3N0YXRpYyBpbmxpbmUgdTMyICoKPiArZm9y bWF0c19wdHIoc3RydWN0IGRybV9mb3JtYXRfbW9kaWZpZXJfYmxvYiAqYmxvYikKPiArewo+ICsJ cmV0dXJuICh1MzIgKikoKChjaGFyICopYmxvYikgKyBibG9iLT5mb3JtYXRzX29mZnNldCk7Cj4g K30KPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRybV9mb3JtYXRfbW9kaWZpZXIgKgo+ICtt b2RpZmllcnNfcHRyKHN0cnVjdCBkcm1fZm9ybWF0X21vZGlmaWVyX2Jsb2IgKmJsb2IpCj4gK3sK PiArCXJldHVybiAoc3RydWN0IGRybV9mb3JtYXRfbW9kaWZpZXIgKikoKChjaGFyICopYmxvYikg KyBibG9iLT5tb2RpZmllcnNfb2Zmc2V0KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBjcmVhdGVf aW5fZm9ybWF0X2Jsb2Ioc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9wbGFuZSAq cGxhbmUpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZpZyA9ICZk ZXYtPm1vZGVfY29uZmlnOwo+ICsJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpibG9iOwo+ICsJ c3RydWN0IGRybV9mb3JtYXRfbW9kaWZpZXIgKm1vZDsKPiArCXNpemVfdCBibG9iX3NpemUsIGZv cm1hdHNfc2l6ZSwgbW9kaWZpZXJzX3NpemU7Cj4gKwlzdHJ1Y3QgZHJtX2Zvcm1hdF9tb2RpZmll cl9ibG9iICpibG9iX2RhdGE7Cj4gKwl1bnNpZ25lZCBpbnQgaSwgajsKPiArCj4gKwlmb3JtYXRz X3NpemUgPSBzaXplb2YoKnBsYW5lLT5mb3JtYXRfdHlwZXMpICogcGxhbmUtPmZvcm1hdF9jb3Vu dDsKCnNpemVvZihfX3UzMikgcGVyaGFwcyBoZXJlIHNpbmNlIHRoaXMgaXMgYWJvdXQgdGhlIHVh YmksIG5vdCBhYm91dCBob3cKd2Ugc3RvcmUgdGhlIGZvcm1hdHMgaW50ZXJuYWxseS4KCj4gKwlp ZiAoV0FSTl9PTighZm9ybWF0c19zaXplKSkgewo+ICsJCS8qIDAgZm9ybWF0cyBhcmUgbmV2ZXIg ZXhwZWN0ZWQgKi8KPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwltb2RpZmllcnNfc2l6ZSA9 Cj4gKwkJc2l6ZW9mKHN0cnVjdCBkcm1fZm9ybWF0X21vZGlmaWVyKSAqIHBsYW5lLT5tb2RpZmll cl9jb3VudDsKPiArCj4gKwlibG9iX3NpemUgPSBzaXplb2Yoc3RydWN0IGRybV9mb3JtYXRfbW9k aWZpZXJfYmxvYik7Cj4gKwkvKiBNb2RpZmllcnMgb2Zmc2V0IGlzIGEgcG9pbnRlciB0byBhIHN0 cnVjdCB3aXRoIGEgNjQgYml0IGZpZWxkIHNvIGl0Cj4gKwkgKiBzaG91bGQgYmUgbmF0dXJhbGx5 IGFsaWduZWQgdG8gOEIuCj4gKwkgKi8KPiArCWJsb2Jfc2l6ZSArPSBBTElHTihmb3JtYXRzX3Np emUsIDgpOwoKSGVyZSBpdCdzIEFMSUdOKGZvcm1hdF9zaXplKSAuLi4KCj4gKwlibG9iX3NpemUg Kz0gbW9kaWZpZXJzX3NpemU7Cj4gKwo+ICsJYmxvYiA9IGRybV9wcm9wZXJ0eV9jcmVhdGVfYmxv YihkZXYsIGJsb2Jfc2l6ZSwgTlVMTCk7Cj4gKwlpZiAoSVNfRVJSKGJsb2IpKQo+ICsJCXJldHVy biAtMTsKPiArCj4gKwlibG9iX2RhdGEgPSAoc3RydWN0IGRybV9mb3JtYXRfbW9kaWZpZXJfYmxv YiAqKWJsb2ItPmRhdGE7Cj4gKwlibG9iX2RhdGEtPnZlcnNpb24gPSBGT1JNQVRfQkxPQl9DVVJS RU5UOwo+ICsJYmxvYl9kYXRhLT5jb3VudF9mb3JtYXRzID0gcGxhbmUtPmZvcm1hdF9jb3VudDsK PiArCWJsb2JfZGF0YS0+Zm9ybWF0c19vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGRybV9mb3JtYXRf bW9kaWZpZXJfYmxvYik7Cj4gKwlibG9iX2RhdGEtPmNvdW50X21vZGlmaWVycyA9IHBsYW5lLT5t b2RpZmllcl9jb3VudDsKPiArCj4gKwlibG9iX2RhdGEtPm1vZGlmaWVyc19vZmZzZXQgPQo+ICsJ CUFMSUdOKGJsb2JfZGF0YS0+Zm9ybWF0c19vZmZzZXQgKyBmb3JtYXRzX3NpemUsIDgpOwoKLi4u IGJ1dCBoZXJlIGl0J3MgQUxJR04oZm9ybWF0c19vZmZzZXQrZm9ybWF0c19zaXplKS4gSSB0aGlu ayB3ZSBzaG91bGQKYmUgYWxpZ25pbmcgdGhlIHNhbWUgdGhpbmcgaW4gYm90aCBjYXNlcywgb3Ig d2UgYWRkIGEgQlVJTERfQlVHX09OIHRvCm1ha2Ugc3VyZSB0aGUgaGVhZGVyIHNpemUgYWx3YXlz IHN0YXlzIGEgbXVsdGlwbGUgb2YgOCBieXRlcy4KClRoYXQncyBtYWlubHkgYmVjYXVzZSB0aGUg ZGVzaWduIG9mIHRoZSBzdHJ1Y3R1cmUgc2VlbXMgZ2VhcmVkIHRvd2FyZHMKZXhwYW5kaW5nIHRo ZSBoZWFkZXIgaW4gdGhlIGZ1dHVyZSAoYXMgaW4gd2h5IGVsc2Ugd291bGQgeW91IGhhdmUgdGhl Cm9mZnNldHM/KS4KCj4gKwo+ICsJbWVtY3B5KGZvcm1hdHNfcHRyKGJsb2JfZGF0YSksIHBsYW5l LT5mb3JtYXRfdHlwZXMsIGZvcm1hdHNfc2l6ZSk7Cj4gKwo+ICsJLyogSWYgd2UgY2FuJ3QgZGV0 ZXJtaW5lIHN1cHBvcnQsIGp1c3QgYmFpbCAqLwo+ICsJaWYgKCFwbGFuZS0+ZnVuY3MtPmZvcm1h dF9tb2Rfc3VwcG9ydGVkKQo+ICsJCWdvdG8gZG9uZTsKPiArCj4gKwltb2QgPSBtb2RpZmllcnNf cHRyKGJsb2JfZGF0YSk7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgcGxhbmUtPm1vZGlmaWVyX2NvdW50 OyBpKyspIHsKPiArCQlmb3IgKGogPSAwOyBqIDwgcGxhbmUtPmZvcm1hdF9jb3VudDsgaisrKSB7 Cj4gKwkJCWlmIChwbGFuZS0+ZnVuY3MtPmZvcm1hdF9tb2Rfc3VwcG9ydGVkKHBsYW5lLAo+ICsJ CQkJCQkJICAgICAgIHBsYW5lLT5mb3JtYXRfdHlwZXNbal0sCj4gKwkJCQkJCQkgICAgICAgcGxh bmUtPm1vZGlmaWVyc1tpXSkpIHsKPiArCj4gKwkJCQltb2QtPmZvcm1hdHMgfD0gMSA8PCBqOwo+ ICsJCQl9Cj4gKwkJfQo+ICsKPiArCQltb2QtPm1vZGlmaWVyID0gcGxhbmUtPm1vZGlmaWVyc1tp XTsKPiArCQltb2QtPm9mZnNldCA9IDA7Cj4gKwkJbW9kLT5wYWQgPSAwOwo+ICsJCW1vZCsrOwo+ ICsJfQo+ICsKPiArZG9uZToKPiArCWRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KCZwbGFuZS0+ YmFzZSwgY29uZmlnLT5tb2RpZmllcnMsCj4gKwkJCQkgICBibG9iLT5iYXNlLmlkKTsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiAgLyoqCj4gICAqIGRybV91bml2ZXJzYWxfcGxhbmVfaW5p dCAtIEluaXRpYWxpemUgYSBuZXcgdW5pdmVyc2FsIHBsYW5lIG9iamVjdAo+ICAgKiBAZGV2OiBE Uk0gZGV2aWNlCj4gQEAgLTE4MSw2ICsyNjEsOSBAQCBpbnQgZHJtX3VuaXZlcnNhbF9wbGFuZV9p bml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJ CWRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KCZwbGFuZS0+YmFzZSwgY29uZmlnLT5wcm9wX3Ny Y19oLCAwKTsKPiAgCX0KPiAgCj4gKwlpZiAoY29uZmlnLT5hbGxvd19mYl9tb2RpZmllcnMpCj4g KwkJY3JlYXRlX2luX2Zvcm1hdF9ibG9iKGRldiwgcGxhbmUpOwo+ICsKPiAgCXJldHVybiAwOwo+ ICB9Cj4gIEVYUE9SVF9TWU1CT0woZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KTsKPiBkaWZmIC0t Z2l0IGEvaW5jbHVkZS9kcm0vZHJtX21vZGVfY29uZmlnLmggYi9pbmNsdWRlL2RybS9kcm1fbW9k ZV9jb25maWcuaAo+IGluZGV4IDQyOTgxNzExMTg5Yi4uMDM3NzZlNjU5ODExIDEwMDY0NAo+IC0t LSBhL2luY2x1ZGUvZHJtL2RybV9tb2RlX2NvbmZpZy5oCj4gKysrIGIvaW5jbHVkZS9kcm0vZHJt X21vZGVfY29uZmlnLmgKPiBAQCAtNzU3LDYgKzc1NywxMiBAQCBzdHJ1Y3QgZHJtX21vZGVfY29u ZmlnIHsKPiAgCSAqLwo+ICAJYm9vbCBhbGxvd19mYl9tb2RpZmllcnM7Cj4gIAo+ICsJLyoqCj4g KwkgKiBAbW9kaWZpZXJzOiBQbGFuZSBwcm9wZXJ0eSB0byBsaXN0IHN1cHBvcnQgbW9kaWZpZXIv Zm9ybWF0Cj4gKwkgKiBjb21iaW5hdGlvbi4KPiArCSAqLwo+ICsJc3RydWN0IGRybV9wcm9wZXJ0 eSAqbW9kaWZpZXJzOwoKSSBiZWxpZXZlIHRoYXQgaWYgd2UgZm9sbG93IHRoZSBtb3N0IGNvbW1v biBuYW1pbmcgcGF0dGVybiB0aGlzIHNob3VsZApiZSAibW9kaWZpZXJzX3Byb3BlcnR5Ii4gQWxz byBtaWdodCBiZSBnb29kIHRvIGdyb3VwIGl0IG5leHQgdG8gdGhlCm90aGVyIHByb3BlcnRpZXMu Cgo+ICsKPiAgCS8qIGN1cnNvciBzaXplICovCj4gIAl1aW50MzJfdCBjdXJzb3Jfd2lkdGgsIGN1 cnNvcl9oZWlnaHQ7Cj4gIAo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9tb2Rl LmggYi9pbmNsdWRlL3VhcGkvZHJtL2RybV9tb2RlLmgKPiBpbmRleCA0MDMzMzlmOThhOTIuLmEy YmI3MTYxZjAyMCAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9tb2RlLmgKPiAr KysgYi9pbmNsdWRlL3VhcGkvZHJtL2RybV9tb2RlLmgKPiBAQCAtNzEyLDYgKzcxMiw1NiBAQCBz dHJ1Y3QgZHJtX21vZGVfYXRvbWljIHsKPiAgCV9fdTY0IHVzZXJfZGF0YTsKPiAgfTsKPiAgCj4g K3N0cnVjdCBkcm1fZm9ybWF0X21vZGlmaWVyX2Jsb2Igewo+ICsjZGVmaW5lIEZPUk1BVF9CTE9C X0NVUlJFTlQgMQo+ICsJLyogVmVyc2lvbiBvZiB0aGlzIGJsb2IgZm9ybWF0ICovCj4gKwl1MzIg dmVyc2lvbjsKPiArCj4gKwkvKiBGbGFncyAqLwo+ICsJdTMyIGZsYWdzOwo+ICsKPiArCS8qIE51 bWJlciBvZiBmb3VyY2MgZm9ybWF0cyBzdXBwb3J0ZWQgKi8KPiArCXUzMiBjb3VudF9mb3JtYXRz Owo+ICsKPiArCS8qIFdoZXJlIGluIHRoaXMgYmxvYiB0aGUgZm9ybWF0cyBleGlzdCAoaW4gYnl0 ZXMpICovCj4gKwl1MzIgZm9ybWF0c19vZmZzZXQ7Cj4gKwo+ICsJLyogTnVtYmVyIG9mIGRybV9m b3JtYXRfbW9kaWZpZXJzICovCj4gKwl1MzIgY291bnRfbW9kaWZpZXJzOwo+ICsKPiArCS8qIFdo ZXJlIGluIHRoaXMgYmxvYiB0aGUgbW9kaWZpZXJzIGV4aXN0IChpbiBieXRlcykgKi8KPiArCXUz MiBtb2RpZmllcnNfb2Zmc2V0Owo+ICsKPiArCS8qIHUzMiBmb3JtYXRzW10gKi8KPiArCS8qIHN0 cnVjdCBkcm1fZm9ybWF0X21vZGlmaWVyIG1vZGlmaWVyc1tdICovCj4gK307Cj4gKwo+ICtzdHJ1 Y3QgZHJtX2Zvcm1hdF9tb2RpZmllciB7Cj4gKwkvKiBCaXRtYXNrIG9mIGZvcm1hdHMgaW4gZ2V0 X3BsYW5lIGZvcm1hdCBsaXN0IHRoaXMgaW5mbyBhcHBsaWVzIHRvLiBUaGUKPiArCSAqIG9mZnNl dCBhbGxvd3MgYSBzbGlkaW5nIHdpbmRvdyBvZiB3aGljaCA2NCBmb3JtYXRzIChiaXRzKS4KPiAr CSAqCj4gKwkgKiBTb21lIGV4YW1wbGVzOgo+ICsJICogSW4gdG9kYXkncyB3b3JsZCB3aXRoIDwg NjUgZm9ybWF0cywgYW5kIGZvcm1hdHMgMCwgYW5kIDIgYXJlCj4gKwkgKiBzdXBwb3J0ZWQKPiAr CSAqIDB4MDAwMDAwMDAwMDAwMDAwNQo+ICsJICoJCSAgXi1vZmZzZXQgPSAwLCBmb3JtYXRzID0g NQo+ICsJICoKPiArCSAqIElmIHRoZSBudW1iZXIgZm9ybWF0cyBncmV3IHRvIDEyOCwgYW5kIGZv cm1hdHMgOTgtMTAyIGFyZQo+ICsJICogc3VwcG9ydGVkIHdpdGggdGhlIG1vZGlmaWVyOgo+ICsJ ICoKPiArCSAqIDB4MDAwMDAwM2MwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwCj4gKwkgKgkJICBe Cj4gKwkgKgkJICB8X19vZmZzZXQgPSA2NCwgZm9ybWF0cyA9IDB4M2MwMDAwMDAwMAo+ICsJICoK PiArCSAqLwo+ICsJX191NjQgZm9ybWF0czsKPiArCV9fdTMyIG9mZnNldDsKPiArCV9fdTMyIHBh ZDsKPiArCj4gKwkvKiBUaGUgbW9kaWZpZXIgdGhhdCBhcHBsaWVzIHRvIHRoZSA+Z2V0X3BsYW5l IGZvcm1hdCBsaXN0IGJpdG1hc2suICovCj4gKwlfX3U2NCBtb2RpZmllcjsKPiArfTsKPiArCj4g IC8qKgo+ICAgKiBDcmVhdGUgYSBuZXcgJ2Jsb2InIGRhdGEgcHJvcGVydHksIGNvcHlpbmcgbGVu Z3RoIGJ5dGVzIGZyb20gZGF0YSBwb2ludGVyLAo+ICAgKiBhbmQgcmV0dXJuaW5nIG5ldyBibG9i IElELgo+IC0tIAo+IDIuMTMuMQo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeAoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbCBPVEMKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxp bmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==