From mboxrd@z Thu Jan 1 00:00:00 1970 From: Brian Starkey Subject: Re: [PATCH 2/3] drm: Create a format/modifier blob Date: Wed, 3 May 2017 12:00:33 +0100 Message-ID: <20170503110032.GA18155@e106950-lin.cambridge.arm.com> References: <20170503051428.4734-1-ben@bwidawsk.net> <20170503051428.4734-2-ben@bwidawsk.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20170503051428.4734-2-ben@bwidawsk.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Ben Widawsky Cc: Intel GFX , "Kristian H . Kristensen" , Daniel Stone , DRI Development List-Id: dri-devel@lists.freedesktop.org SGksCgpIYXZpbmcganVzdCBjYXVnaHQgdXAgb24gSVJDIEknbSBzdXJlIEknbSBmYXIgdG9vIGxh dGUgZm9yIHRoaXMgcGFydHksCmJ1dC4uLgoKV291bGRuJ3QgdGhpcyB3aG9sZSB0aGluZyBiZSBh IHdob2xlIGxvdCBzaW1wbGVyIGlmICJJTl9GT1JNQVRTIgpzdG9yZWQgInBvaW50ZXJzIiB0byBz ZXBhcmF0ZSBibG9icyBmb3IgdGhlIGZvcm1hdCBhbmQgbW9kaWZpZXIgbGlzdHM/CgpzdHJ1Y3Qg ZHJtX2Zvcm1hdF9tb2RpZmllcl9ibG9iIHsKI2RlZmluZSBGT1JNQVRfQkxPQl9DVVJSRU5UIDEK CS8qIFZlcnNpb24gb2YgdGhpcyBibG9iIGZvcm1hdCAqLwoJdTMyIHZlcnNpb247CgoJLyogRmxh Z3MgKi8KCXUzMiBmbGFnczsKCgkvKiBJRCBvZiBhIGJsb2Igc3RvcmluZyBhbiBhcnJheSBvZiBG b3VyQ0NzICovCgl1MzIgZm9ybWF0c19ibG9iX2lkOwoKCS8qIElEIG9mIGEgYmxvYiBzdG9yaW5n IGFuIGFycmF5IG9mIGRybV9mb3JtYXRfbW9kaWZpZXJzICovCgl1MzIgbW9kaWZpZXJzX2Jsb2Jf aWQ7Cn0gX19wYWNrZWQ7CgpJJ3ZlIHVzZWQvd3JpdHRlbiBhIGZldyBpbnRlcmZhY2VzIHdpdGgg b2Zmc2V0cyB0bwp2YXJpYWJsZS1sZW5ndGgtYXJyYXlzIGFuZCBJTU8gdGhlIGNvZGUgdG8gaGFu ZGxlIHRoZW0gaXMgYWx3YXlzCmhpZGVvdXMuCgpBZGRlZCBib251czogV2l0aCBzbWFydCBlbm91 Z2ggaGVscGVyIGNvZGUgdGhlIEZvdXJDQyBhbmQgbW9kaWZpZXJzCmJsb2JzIGNhbiBiZSBzaGFy ZWQgYWNyb3NzIHBsYW5lcy4KCi1CcmlhbgoKT24gVHVlLCBNYXkgMDIsIDIwMTcgYXQgMTA6MTQ6 MjdQTSAtMDcwMCwgQmVuIFdpZGF3c2t5IHdyb3RlOgo+VXBkYXRlZCBibG9iIGxheW91dCAoUm9i LCBEYW5pZWwsIEtyaXN0aWFuLCB4ZXJwaSkKPgo+Q2M6IFJvYiBDbGFyayA8cm9iZGNsYXJrQGdt YWlsLmNvbT4KPkNjOiBEYW5pZWwgU3RvbmUgPGRhbmllbHNAY29sbGFib3JhLmNvbT4KPkNjOiBL cmlzdGlhbiBILiBLcmlzdGVuc2VuIDxob2Vnc2JlcmdAZ21haWwuY29tPgo+U2lnbmVkLW9mZi1i eTogQmVuIFdpZGF3c2t5IDxiZW5AYndpZGF3c2submV0Pgo+LS0tCj4gZHJpdmVycy9ncHUvZHJt L2RybV9tb2RlX2NvbmZpZy5jIHwgICA3ICsrKwo+IGRyaXZlcnMvZ3B1L2RybS9kcm1fcGxhbmUu YyAgICAgICB8IDExOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+IGlu Y2x1ZGUvZHJtL2RybV9tb2RlX2NvbmZpZy5oICAgICB8ICAgNiArKwo+IGluY2x1ZGUvdWFwaS9k cm0vZHJtX21vZGUuaCAgICAgICB8ICAyNiArKysrKysrKysKPiA0IGZpbGVzIGNoYW5nZWQsIDE1 OCBpbnNlcnRpb25zKCspCj4KPmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVf Y29uZmlnLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVfY29uZmlnLmMKPmluZGV4IGQ5ODYy MjU5YTJhNy4uNmJmYmMzODM5ZGY1IDEwMDY0NAo+LS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9t b2RlX2NvbmZpZy5jCj4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVfY29uZmlnLmMKPkBA IC0zMzcsNiArMzM3LDEzIEBAIHN0YXRpYyBpbnQgZHJtX21vZGVfY3JlYXRlX3N0YW5kYXJkX3By b3BlcnRpZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAJCXJldHVybiAtRU5PTUVNOwo+IAlk ZXYtPm1vZGVfY29uZmlnLmdhbW1hX2x1dF9zaXplX3Byb3BlcnR5ID0gcHJvcDsKPgo+Kwlwcm9w ID0gZHJtX3Byb3BlcnR5X2NyZWF0ZShkZXYsCj4rCQkJCSAgIERSTV9NT0RFX1BST1BfSU1NVVRB QkxFIHwgRFJNX01PREVfUFJPUF9CTE9CLAo+KwkJCQkgICAiSU5fRk9STUFUUyIsIDApOwo+Kwlp ZiAoIXByb3ApCj4rCQlyZXR1cm4gLUVOT01FTTsKPisJZGV2LT5tb2RlX2NvbmZpZy5tb2RpZmll cnMgPSBwcm9wOwo+Kwo+IAlyZXR1cm4gMDsKPiB9Cj4KPmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZHJtX3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3BsYW5lLmMKPmluZGV4IDI4 NmUxODM4OTFlNS4uMmU4OWUwZTczNDM1IDEwMDY0NAo+LS0tIGEvZHJpdmVycy9ncHUvZHJtL2Ry bV9wbGFuZS5jCj4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3BsYW5lLmMKPkBAIC02Miw2ICs2 MiwxMTcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkcm1fbnVtX3BsYW5lcyhzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQo+IAlyZXR1cm4gbnVtOwo+IH0KPgo+K3N0cnVjdCBkcm1fZm9ybWF0X21vZGlm aWVyX2Jsb2Igewo+KyNkZWZpbmUgRk9STUFUX0JMT0JfQ1VSUkVOVCAxCj4rCS8qIFZlcnNpb24g b2YgdGhpcyBibG9iIGZvcm1hdCAqLwo+Kwl1MzIgdmVyc2lvbjsKPisKPisJLyogRmxhZ3MgKi8K PisJdTMyIGZsYWdzOwo+Kwo+KwkvKiBOdW1iZXIgb2YgZm91cmNjIGZvcm1hdHMgc3VwcG9ydGVk ICovCj4rCXUzMiBjb3VudF9mb3JtYXRzOwo+Kwo+KwkvKiBXaGVyZSBpbiB0aGlzIGJsb2IgdGhl IGZvcm1hdHMgZXhpc3QgKGluIGJ5dGVzKSAqLwo+Kwl1MzIgZm9ybWF0c19vZmZzZXQ7Cj4rCj4r CS8qIE51bWJlciBvZiBkcm1fZm9ybWF0X21vZGlmaWVycyAqLwo+Kwl1MzIgY291bnRfbW9kaWZp ZXJzOwo+Kwo+KwkvKiBXaGVyZSBpbiB0aGlzIGJsb2IgdGhlIG1vZGlmaWVycyBleGlzdCAoaW4g Ynl0ZXMpICovCj4rCXUzMiBtb2RpZmllcnNfb2Zmc2V0Owo+Kwo+KwkvKiB1MzIgZm9ybWF0c1td ICovCj4rCS8qIHN0cnVjdCBkcm1fZm9ybWF0X21vZGlmaWVyIG1vZGlmaWVyc1tdICovCj4rfSBf X3BhY2tlZDsKPisKPitzdGF0aWMgaW5saW5lIHUzMiAqCj4rZm9ybWF0c19wdHIoc3RydWN0IGRy bV9mb3JtYXRfbW9kaWZpZXJfYmxvYiAqYmxvYikKPit7Cj4rCXJldHVybiAodTMyICopKCgoY2hh ciAqKWJsb2IpICsgYmxvYi0+Zm9ybWF0c19vZmZzZXQpOwo+K30KPisKPitzdGF0aWMgaW5saW5l IHN0cnVjdCBkcm1fZm9ybWF0X21vZGlmaWVyICoKPittb2RpZmllcnNfcHRyKHN0cnVjdCBkcm1f Zm9ybWF0X21vZGlmaWVyX2Jsb2IgKmJsb2IpCj4rewo+KwlyZXR1cm4gKHN0cnVjdCBkcm1fZm9y bWF0X21vZGlmaWVyICopKCgoY2hhciAqKWJsb2IpICsgYmxvYi0+bW9kaWZpZXJzX29mZnNldCk7 Cj4rfQo+Kwo+K3N0YXRpYyBpbnQgY3JlYXRlX2luX2Zvcm1hdF9ibG9iKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+KwkJCQkgY29uc3Qgc3RydWN0IGRy bV9wbGFuZV9mdW5jcyAqZnVuY3MsCj4rCQkJCSBjb25zdCB1aW50MzJfdCAqZm9ybWF0cywgdW5z aWduZWQgaW50IGZvcm1hdF9jb3VudCwKPisJCQkJIGNvbnN0IHVpbnQ2NF90ICpmb3JtYXRfbW9k aWZpZXJzKQo+K3sKPisJY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmlnID0gJmRl di0+bW9kZV9jb25maWc7Cj4rCWNvbnN0IHVpbnQ2NF90ICp0ZW1wX21vZGlmaWVycyA9IGZvcm1h dF9tb2RpZmllcnM7Cj4rCXVuc2lnbmVkIGludCBmb3JtYXRfbW9kaWZpZXJfY291bnQgPSAwOwo+ KwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2IgPSBOVUxMOwo+KwlzdHJ1Y3QgZHJtX2Zv cm1hdF9tb2RpZmllciAqbW9kOwo+KwlzaXplX3QgYmxvYl9zaXplID0gMCwgZm9ybWF0c19zaXpl LCBtb2RpZmllcnNfc2l6ZTsKPisJc3RydWN0IGRybV9mb3JtYXRfbW9kaWZpZXJfYmxvYiAqYmxv Yl9kYXRhOwo+KwlpbnQgaSwgaiwgcmV0ID0gMDsKPisKPisJaWYgKGZvcm1hdF9tb2RpZmllcnMp Cj4rCQl3aGlsZSAoKnRlbXBfbW9kaWZpZXJzKysgIT0gRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRCkK PisJCQlmb3JtYXRfbW9kaWZpZXJfY291bnQrKzsKPisKPisJZm9ybWF0c19zaXplID0gc2l6ZW9m KF9fdTMyKSAqIGZvcm1hdF9jb3VudDsKPisJaWYgKFdBUk5fT04oIWZvcm1hdHNfc2l6ZSkpIHsK PisJCS8qIDAgZm9ybWF0cyBhcmUgbmV2ZXIgZXhwZWN0ZWQgKi8KPisJCXJldHVybiAwOwo+Kwl9 Cj4rCj4rCW1vZGlmaWVyc19zaXplID0KPisJCXNpemVvZihzdHJ1Y3QgZHJtX2Zvcm1hdF9tb2Rp ZmllcikgKiBmb3JtYXRfbW9kaWZpZXJfY291bnQ7Cj4rCj4rCWJsb2Jfc2l6ZSA9IEFMSUdOKHNp emVvZihzdHJ1Y3QgZHJtX2Zvcm1hdF9tb2RpZmllcl9ibG9iKSwgOCk7Cj4rCWJsb2Jfc2l6ZSAr PSBBTElHTihmb3JtYXRzX3NpemUsIDgpOwo+KwlibG9iX3NpemUgKz0gbW9kaWZpZXJzX3NpemU7 Cj4rCj4rCWJsb2IgPSBkcm1fcHJvcGVydHlfY3JlYXRlX2Jsb2IoZGV2LCBibG9iX3NpemUsIE5V TEwpOwo+KwlpZiAoSVNfRVJSKGJsb2IpKQo+KwkJcmV0dXJuIC0xOwo+Kwo+KwlibG9iX2RhdGEg PSAoc3RydWN0IGRybV9mb3JtYXRfbW9kaWZpZXJfYmxvYiAqKWJsb2ItPmRhdGE7Cj4rCWJsb2Jf ZGF0YS0+dmVyc2lvbiA9IEZPUk1BVF9CTE9CX0NVUlJFTlQ7Cj4rCWJsb2JfZGF0YS0+Y291bnRf Zm9ybWF0cyA9IGZvcm1hdF9jb3VudDsKPisJYmxvYl9kYXRhLT5mb3JtYXRzX29mZnNldCA9IHNp emVvZihzdHJ1Y3QgZHJtX2Zvcm1hdF9tb2RpZmllcl9ibG9iKTsKPisJYmxvYl9kYXRhLT5jb3Vu dF9tb2RpZmllcnMgPSBmb3JtYXRfbW9kaWZpZXJfY291bnQ7Cj4rCj4rCS8qIE1vZGlmaWVycyBv ZmZzZXQgaXMgYSBwb2ludGVyIHRvIGEgc3RydWN0IHdpdGggYSA2NCBiaXQgZmllbGQgc28gaXQK PisJICogc2hvdWxkIGJlIG5hdHVyYWxseSBhbGlnbmVkIHRvIDhCLgo+KwkgKi8KPisJYmxvYl9k YXRhLT5tb2RpZmllcnNfb2Zmc2V0ID0KPisJCUFMSUdOKGJsb2JfZGF0YS0+Zm9ybWF0c19vZmZz ZXQgKyBmb3JtYXRzX3NpemUsIDgpOwo+Kwo+KwltZW1jcHkoZm9ybWF0c19wdHIoYmxvYl9kYXRh KSwgZm9ybWF0cywgZm9ybWF0c19zaXplKTsKPisKPisJLyogSWYgd2UgY2FuJ3QgZGV0ZXJtaW5l IHN1cHBvcnQsIGp1c3QgYmFpbCAqLwo+KwlpZiAoIWZ1bmNzLT5mb3JtYXRfbW9kX3N1cHBvcnRl ZCkKPisJCWdvdG8gZG9uZTsKPisKPisJbW9kID0gbW9kaWZpZXJzX3B0cihibG9iX2RhdGEpOwo+ Kwlmb3IgKGkgPSAwOyBpIDwgZm9ybWF0X21vZGlmaWVyX2NvdW50OyBpKyspIHsKPisJCWZvciAo aiA9IDA7IGogPCBmb3JtYXRfY291bnQ7IGorKykgewo+KwkJCWlmIChmdW5jcy0+Zm9ybWF0X21v ZF9zdXBwb3J0ZWQocGxhbmUsIGZvcm1hdHNbal0sCj4rCQkJCQkJCWZvcm1hdF9tb2RpZmllcnNb aV0pKSB7Cj4rCQkJCW1vZC0+Zm9ybWF0cyB8PSAxIDw8IGo7Cj4rCQkJfQo+KwkJfQo+Kwo+KwkJ bW9kLT5tb2RpZmllciA9IGZvcm1hdF9tb2RpZmllcnNbaV07Cj4rCQltb2QtPm9mZnNldCA9IDA7 Cj4rCQltb2QtPnBhZCA9IDA7Cj4rCQltb2QrKzsKPisJfQo+Kwo+K2RvbmU6Cj4rCWRybV9vYmpl Y3RfYXR0YWNoX3Byb3BlcnR5KCZwbGFuZS0+YmFzZSwgY29uZmlnLT5tb2RpZmllcnMsCj4rCQkJ CSAgIGJsb2ItPmJhc2UuaWQpOwo+Kwo+KwlyZXR1cm4gcmV0Owo+K30KPisKPiAvKioKPiAgKiBk cm1fdW5pdmVyc2FsX3BsYW5lX2luaXQgLSBJbml0aWFsaXplIGEgbmV3IHVuaXZlcnNhbCBwbGFu ZSBvYmplY3QKPiAgKiBAZGV2OiBEUk0gZGV2aWNlCj5AQCAtMTMwLDYgKzI0MSwxMCBAQCBpbnQg ZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAo+IAkJcmV0dXJuIC1FTk9NRU07Cj4gCX0KPgo+KwkvKiBGaXJzdCBk cml2ZXIgdG8gbmVlZCBtb3JlIHRoYW4gNjQgZm9ybWF0cyBuZWVkcyB0byBmaXggdGhpcyAqLwo+ KwlpZiAoV0FSTl9PTihmb3JtYXRfY291bnQgPiA2NCkpCj4rCQlyZXR1cm4gLUVJTlZBTDsKPisK PiAJaWYgKG5hbWUpIHsKPiAJCXZhX2xpc3QgYXA7Cj4KPkBAIC0xNzcsNiArMjkyLDEwIEBAIGlu dCBkcm1fdW5pdmVyc2FsX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUsCj4gCQlkcm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eSgmcGxhbmUt PmJhc2UsIGNvbmZpZy0+cHJvcF9zcmNfaCwgMCk7Cj4gCX0KPgo+KwlpZiAoY29uZmlnLT5hbGxv d19mYl9tb2RpZmllcnMpCj4rCQljcmVhdGVfaW5fZm9ybWF0X2Jsb2IoZGV2LCBwbGFuZSwgZnVu Y3MsIGZvcm1hdHMsIGZvcm1hdF9jb3VudCwKPisJCQkJICAgICAgZm9ybWF0X21vZGlmaWVycyk7 Cj4rCj4gCXJldHVybiAwOwo+IH0KPiBFWFBPUlRfU1lNQk9MKGRybV91bml2ZXJzYWxfcGxhbmVf aW5pdCk7Cj5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX21vZGVfY29uZmlnLmggYi9pbmNs dWRlL2RybS9kcm1fbW9kZV9jb25maWcuaAo+aW5kZXggNDI5ODE3MTExODliLi4wMzc3NmU2NTk4 MTEgMTAwNjQ0Cj4tLS0gYS9pbmNsdWRlL2RybS9kcm1fbW9kZV9jb25maWcuaAo+KysrIGIvaW5j bHVkZS9kcm0vZHJtX21vZGVfY29uZmlnLmgKPkBAIC03NTcsNiArNzU3LDEyIEBAIHN0cnVjdCBk cm1fbW9kZV9jb25maWcgewo+IAkgKi8KPiAJYm9vbCBhbGxvd19mYl9tb2RpZmllcnM7Cj4KPisJ LyoqCj4rCSAqIEBtb2RpZmllcnM6IFBsYW5lIHByb3BlcnR5IHRvIGxpc3Qgc3VwcG9ydCBtb2Rp Zmllci9mb3JtYXQKPisJICogY29tYmluYXRpb24uCj4rCSAqLwo+KwlzdHJ1Y3QgZHJtX3Byb3Bl cnR5ICptb2RpZmllcnM7Cj4rCj4gCS8qIGN1cnNvciBzaXplICovCj4gCXVpbnQzMl90IGN1cnNv cl93aWR0aCwgY3Vyc29yX2hlaWdodDsKPgo+ZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0v ZHJtX21vZGUuaCBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX21vZGUuaAo+aW5kZXggOGM2N2ZjMDNk NTNkLi5kY2RkMDRjNTU3OTIgMTAwNjQ0Cj4tLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9tb2Rl LmgKPisrKyBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX21vZGUuaAo+QEAgLTY2NSw2ICs2NjUsMzIg QEAgc3RydWN0IGRybV9tb2RlX2F0b21pYyB7Cj4gCV9fdTY0IHVzZXJfZGF0YTsKPiB9Owo+Cj4r c3RydWN0IGRybV9mb3JtYXRfbW9kaWZpZXIgewo+KyAgICAgICAvKiBCaXRtYXNrIG9mIGZvcm1h dHMgaW4gZ2V0X3BsYW5lIGZvcm1hdCBsaXN0IHRoaXMgaW5mbyBhcHBsaWVzIHRvLiBUaGUKPisJ KiBvZmZzZXQgYWxsb3dzIGEgc2xpZGluZyB3aW5kb3cgb2Ygd2hpY2ggNjQgZm9ybWF0cyAoYml0 cykuCj4rCSoKPisJKiBTb21lIGV4YW1wbGVzOgo+KwkqIEluIHRvZGF5J3Mgd29ybGQgd2l0aCA8 IDY1IGZvcm1hdHMsIGFuZCBmb3JtYXRzIDAsIGFuZCAyIGFyZQo+KwkqIHN1cHBvcnRlZAo+Kwkq IDB4MDAwMDAwMDAwMDAwMDAwNQo+KwkqCQkgIF4tb2Zmc2V0ID0gMCwgZm9ybWF0cyA9IDUKPisJ Kgo+KwkqIElmIHRoZSBudW1iZXIgZm9ybWF0cyBncmV3IHRvIDEyOCwgYW5kIGZvcm1hdHMgOTgt MTAyIGFyZQo+KwkqIHN1cHBvcnRlZCB3aXRoIHRoZSBtb2RpZmllcjoKPisJKgo+KwkqIDB4MDAw MDAwM2MwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwCj4rCSoJCSAgXgo+KwkqCQkgIHxfX29mZnNl dCA9IDY0LCBmb3JtYXRzID0gMHgzYzAwMDAwMDAwCj4rCSoKPisJKi8KPisgICAgICAgdWludDY0 X3QgZm9ybWF0czsKPisgICAgICAgdWludDMyX3Qgb2Zmc2V0Owo+KyAgICAgICB1aW50MzJfdCBw YWQ7Cj4rCj4rICAgICAgIC8qIFRoaXMgbW9kaWZpZXIgY2FuIGJlIHVzZWQgd2l0aCB0aGUgZm9y bWF0IGZvciB0aGlzIHBsYW5lLiAqLwo+KyAgICAgICB1aW50NjRfdCBtb2RpZmllcjsKPit9IF9f cGFja2VkOwo+Kwo+IC8qKgo+ICAqIENyZWF0ZSBhIG5ldyAnYmxvYicgZGF0YSBwcm9wZXJ0eSwg Y29weWluZyBsZW5ndGggYnl0ZXMgZnJvbSBkYXRhIHBvaW50ZXIsCj4gICogYW5kIHJldHVybmlu ZyBuZXcgYmxvYiBJRC4KPi0tIAo+Mi4xMi4yCj4KPl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCj5kcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj5kcmktZGV2ZWxA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCj5odHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2RyaS1kZXZlbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWwK