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 13:51:48 +0100 Message-ID: <20170503125146.GB20378@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 SGksCgpPbiBUdWUsIE1heSAwMiwgMjAxNyBhdCAxMDoxNDoyN1BNIC0wNzAwLCBCZW4gV2lkYXdz a3kgd3JvdGU6Cj5VcGRhdGVkIGJsb2IgbGF5b3V0IChSb2IsIERhbmllbCwgS3Jpc3RpYW4sIHhl cnBpKQo+Cj5DYzogUm9iIENsYXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgo+Q2M6IERhbmllbCBT dG9uZSA8ZGFuaWVsc0Bjb2xsYWJvcmEuY29tPgo+Q2M6IEtyaXN0aWFuIEguIEtyaXN0ZW5zZW4g PGhvZWdzYmVyZ0BnbWFpbC5jb20+Cj5TaWduZWQtb2ZmLWJ5OiBCZW4gV2lkYXdza3kgPGJlbkBi d2lkYXdzay5uZXQ+Cj4tLS0KPiBkcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVfY29uZmlnLmMgfCAg IDcgKysrCj4gZHJpdmVycy9ncHUvZHJtL2RybV9wbGFuZS5jICAgICAgIHwgMTE5ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gaW5jbHVkZS9kcm0vZHJtX21vZGVfY29u ZmlnLmggICAgIHwgICA2ICsrCj4gaW5jbHVkZS91YXBpL2RybS9kcm1fbW9kZS5oICAgICAgIHwg IDI2ICsrKysrKysrKwo+IDQgZmlsZXMgY2hhbmdlZCwgMTU4IGluc2VydGlvbnMoKykKPgo+ZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZV9jb25maWcuYyBiL2RyaXZlcnMvZ3B1 L2RybS9kcm1fbW9kZV9jb25maWcuYwo+aW5kZXggZDk4NjIyNTlhMmE3Li42YmZiYzM4MzlkZjUg MTAwNjQ0Cj4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVfY29uZmlnLmMKPisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9kcm1fbW9kZV9jb25maWcuYwo+QEAgLTMzNyw2ICszMzcsMTMgQEAgc3Rh dGljIGludCBkcm1fbW9kZV9jcmVhdGVfc3RhbmRhcmRfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQo+IAkJcmV0dXJuIC1FTk9NRU07Cj4gCWRldi0+bW9kZV9jb25maWcuZ2FtbWFf bHV0X3NpemVfcHJvcGVydHkgPSBwcm9wOwo+Cj4rCXByb3AgPSBkcm1fcHJvcGVydHlfY3JlYXRl KGRldiwKPisJCQkJICAgRFJNX01PREVfUFJPUF9JTU1VVEFCTEUgfCBEUk1fTU9ERV9QUk9QX0JM T0IsCj4rCQkJCSAgICJJTl9GT1JNQVRTIiwgMCk7Cj4rCWlmICghcHJvcCkKPisJCXJldHVybiAt RU5PTUVNOwo+KwlkZXYtPm1vZGVfY29uZmlnLm1vZGlmaWVycyA9IHByb3A7Cj4rCj4gCXJldHVy biAwOwo+IH0KPgo+ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGxhbmUuYyBiL2Ry aXZlcnMvZ3B1L2RybS9kcm1fcGxhbmUuYwo+aW5kZXggMjg2ZTE4Mzg5MWU1Li4yZTg5ZTBlNzM0 MzUgMTAwNjQ0Cj4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3BsYW5lLmMKPisrKyBiL2RyaXZl cnMvZ3B1L2RybS9kcm1fcGxhbmUuYwo+QEAgLTYyLDYgKzYyLDExNyBAQCBzdGF0aWMgdW5zaWdu ZWQgaW50IGRybV9udW1fcGxhbmVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gCXJldHVybiBu dW07Cj4gfQo+Cj4rc3RydWN0IGRybV9mb3JtYXRfbW9kaWZpZXJfYmxvYiB7Cj4rI2RlZmluZSBG T1JNQVRfQkxPQl9DVVJSRU5UIDEKPisJLyogVmVyc2lvbiBvZiB0aGlzIGJsb2IgZm9ybWF0ICov Cj4rCXUzMiB2ZXJzaW9uOwo+Kwo+KwkvKiBGbGFncyAqLwo+Kwl1MzIgZmxhZ3M7Cj4rCj4rCS8q IE51bWJlciBvZiBmb3VyY2MgZm9ybWF0cyBzdXBwb3J0ZWQgKi8KPisJdTMyIGNvdW50X2Zvcm1h dHM7Cj4rCj4rCS8qIFdoZXJlIGluIHRoaXMgYmxvYiB0aGUgZm9ybWF0cyBleGlzdCAoaW4gYnl0 ZXMpICovCj4rCXUzMiBmb3JtYXRzX29mZnNldDsKPisKPisJLyogTnVtYmVyIG9mIGRybV9mb3Jt YXRfbW9kaWZpZXJzICovCj4rCXUzMiBjb3VudF9tb2RpZmllcnM7Cj4rCj4rCS8qIFdoZXJlIGlu IHRoaXMgYmxvYiB0aGUgbW9kaWZpZXJzIGV4aXN0IChpbiBieXRlcykgKi8KPisJdTMyIG1vZGlm aWVyc19vZmZzZXQ7Cj4rCj4rCS8qIHUzMiBmb3JtYXRzW10gKi8KPisJLyogc3RydWN0IGRybV9m b3JtYXRfbW9kaWZpZXIgbW9kaWZpZXJzW10gKi8KPit9IF9fcGFja2VkOwo+Kwo+K3N0YXRpYyBp bmxpbmUgdTMyICoKPitmb3JtYXRzX3B0cihzdHJ1Y3QgZHJtX2Zvcm1hdF9tb2RpZmllcl9ibG9i ICpibG9iKQo+K3sKPisJcmV0dXJuICh1MzIgKikoKChjaGFyICopYmxvYikgKyBibG9iLT5mb3Jt YXRzX29mZnNldCk7Cj4rfQo+Kwo+K3N0YXRpYyBpbmxpbmUgc3RydWN0IGRybV9mb3JtYXRfbW9k aWZpZXIgKgo+K21vZGlmaWVyc19wdHIoc3RydWN0IGRybV9mb3JtYXRfbW9kaWZpZXJfYmxvYiAq YmxvYikKPit7Cj4rCXJldHVybiAoc3RydWN0IGRybV9mb3JtYXRfbW9kaWZpZXIgKikoKChjaGFy ICopYmxvYikgKyBibG9iLT5tb2RpZmllcnNfb2Zmc2V0KTsKPit9Cj4rCj4rc3RhdGljIGludCBj cmVhdGVfaW5fZm9ybWF0X2Jsb2Ioc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9w bGFuZSAqcGxhbmUsCj4rCQkJCSBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzICpmdW5jcywK PisJCQkJIGNvbnN0IHVpbnQzMl90ICpmb3JtYXRzLCB1bnNpZ25lZCBpbnQgZm9ybWF0X2NvdW50 LAo+KwkJCQkgY29uc3QgdWludDY0X3QgKmZvcm1hdF9tb2RpZmllcnMpCj4rewo+Kwljb25zdCBz dHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKPisJY29u c3QgdWludDY0X3QgKnRlbXBfbW9kaWZpZXJzID0gZm9ybWF0X21vZGlmaWVyczsKPisJdW5zaWdu ZWQgaW50IGZvcm1hdF9tb2RpZmllcl9jb3VudCA9IDA7Cj4rCXN0cnVjdCBkcm1fcHJvcGVydHlf YmxvYiAqYmxvYiA9IE5VTEw7Cj4rCXN0cnVjdCBkcm1fZm9ybWF0X21vZGlmaWVyICptb2Q7Cj4r CXNpemVfdCBibG9iX3NpemUgPSAwLCBmb3JtYXRzX3NpemUsIG1vZGlmaWVyc19zaXplOwo+Kwlz dHJ1Y3QgZHJtX2Zvcm1hdF9tb2RpZmllcl9ibG9iICpibG9iX2RhdGE7Cj4rCWludCBpLCBqLCBy ZXQgPSAwOwo+Kwo+KwlpZiAoZm9ybWF0X21vZGlmaWVycykKPisJCXdoaWxlICgqdGVtcF9tb2Rp ZmllcnMrKyAhPSBEUk1fRk9STUFUX01PRF9JTlZBTElEKQo+KwkJCWZvcm1hdF9tb2RpZmllcl9j b3VudCsrOwo+Kwo+Kwlmb3JtYXRzX3NpemUgPSBzaXplb2YoX191MzIpICogZm9ybWF0X2NvdW50 Owo+KwlpZiAoV0FSTl9PTighZm9ybWF0c19zaXplKSkgewo+KwkJLyogMCBmb3JtYXRzIGFyZSBu ZXZlciBleHBlY3RlZCAqLwo+KwkJcmV0dXJuIDA7Cj4rCX0KPisKPisJbW9kaWZpZXJzX3NpemUg PQo+KwkJc2l6ZW9mKHN0cnVjdCBkcm1fZm9ybWF0X21vZGlmaWVyKSAqIGZvcm1hdF9tb2RpZmll cl9jb3VudDsKPisKPisJYmxvYl9zaXplID0gQUxJR04oc2l6ZW9mKHN0cnVjdCBkcm1fZm9ybWF0 X21vZGlmaWVyX2Jsb2IpLCA4KTsKPisJYmxvYl9zaXplICs9IEFMSUdOKGZvcm1hdHNfc2l6ZSwg OCk7Cj4rCWJsb2Jfc2l6ZSArPSBtb2RpZmllcnNfc2l6ZTsKPisKPisJYmxvYiA9IGRybV9wcm9w ZXJ0eV9jcmVhdGVfYmxvYihkZXYsIGJsb2Jfc2l6ZSwgTlVMTCk7Cj4rCWlmIChJU19FUlIoYmxv YikpCj4rCQlyZXR1cm4gLTE7Cj4rCj4rCWJsb2JfZGF0YSA9IChzdHJ1Y3QgZHJtX2Zvcm1hdF9t b2RpZmllcl9ibG9iICopYmxvYi0+ZGF0YTsKPisJYmxvYl9kYXRhLT52ZXJzaW9uID0gRk9STUFU X0JMT0JfQ1VSUkVOVDsKPisJYmxvYl9kYXRhLT5jb3VudF9mb3JtYXRzID0gZm9ybWF0X2NvdW50 Owo+KwlibG9iX2RhdGEtPmZvcm1hdHNfb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBkcm1fZm9ybWF0 X21vZGlmaWVyX2Jsb2IpOwoKVGhpcyBsb29rcyB0byBiZSBtaXNzaW5nIHNvbWUgYWxpZ25tZW50 LgoKRGVmaW5pdGVseSBuZWVkcyB0byBiZSBhdCBsZWFzdCB0byA0IGJ5dGVzLCBidXQgZ2l2ZW4g eW91IGFsaWduZWQKaXQgdXAgdG8gOCBmb3IgdGhlIGluaXRpYWwgImJsb2Jfc2l6ZSIgSSBhc3N1 bWUgdGhlIGludGVudGlvbiB3YXMgdG8KcHV0IHRoZSBmb3JtYXRzIG9uIHRoZSBuZXh0IDgtYnl0 ZSBhbGlnbmVkIGFkZHJlc3MgYWZ0ZXIgdGhlIGVuZCBvZgp0aGUgc3RydWN0LCBlLmcuOgoKCWJs b2JfZGF0YS0+Zm9ybWF0c19vZmZzZXQgPSBBTElHTihzaXplb2Yoc3RydWN0IGRybV9mb3JtYXRf bW9kaWZpZXJfYmxvYiksIDgpOwoKLUJyaWFuCgo+KwlibG9iX2RhdGEtPmNvdW50X21vZGlmaWVy cyA9IGZvcm1hdF9tb2RpZmllcl9jb3VudDsKPisKPisJLyogTW9kaWZpZXJzIG9mZnNldCBpcyBh IHBvaW50ZXIgdG8gYSBzdHJ1Y3Qgd2l0aCBhIDY0IGJpdCBmaWVsZCBzbyBpdAo+KwkgKiBzaG91 bGQgYmUgbmF0dXJhbGx5IGFsaWduZWQgdG8gOEIuCj4rCSAqLwo+KwlibG9iX2RhdGEtPm1vZGlm aWVyc19vZmZzZXQgPQo+KwkJQUxJR04oYmxvYl9kYXRhLT5mb3JtYXRzX29mZnNldCArIGZvcm1h dHNfc2l6ZSwgOCk7Cj4rCj4rCW1lbWNweShmb3JtYXRzX3B0cihibG9iX2RhdGEpLCBmb3JtYXRz LCBmb3JtYXRzX3NpemUpOwo+Kwo+KwkvKiBJZiB3ZSBjYW4ndCBkZXRlcm1pbmUgc3VwcG9ydCwg anVzdCBiYWlsICovCj4rCWlmICghZnVuY3MtPmZvcm1hdF9tb2Rfc3VwcG9ydGVkKQo+KwkJZ290 byBkb25lOwo+Kwo+Kwltb2QgPSBtb2RpZmllcnNfcHRyKGJsb2JfZGF0YSk7Cj4rCWZvciAoaSA9 IDA7IGkgPCBmb3JtYXRfbW9kaWZpZXJfY291bnQ7IGkrKykgewo+KwkJZm9yIChqID0gMDsgaiA8 IGZvcm1hdF9jb3VudDsgaisrKSB7Cj4rCQkJaWYgKGZ1bmNzLT5mb3JtYXRfbW9kX3N1cHBvcnRl ZChwbGFuZSwgZm9ybWF0c1tqXSwKPisJCQkJCQkJZm9ybWF0X21vZGlmaWVyc1tpXSkpIHsKPisJ CQkJbW9kLT5mb3JtYXRzIHw9IDEgPDwgajsKPisJCQl9Cj4rCQl9Cj4rCj4rCQltb2QtPm1vZGlm aWVyID0gZm9ybWF0X21vZGlmaWVyc1tpXTsKPisJCW1vZC0+b2Zmc2V0ID0gMDsKPisJCW1vZC0+ cGFkID0gMDsKPisJCW1vZCsrOwo+Kwl9Cj4rCj4rZG9uZToKPisJZHJtX29iamVjdF9hdHRhY2hf cHJvcGVydHkoJnBsYW5lLT5iYXNlLCBjb25maWctPm1vZGlmaWVycywKPisJCQkJICAgYmxvYi0+ YmFzZS5pZCk7Cj4rCj4rCXJldHVybiByZXQ7Cj4rfQo+Kwo+IC8qKgo+ICAqIGRybV91bml2ZXJz YWxfcGxhbmVfaW5pdCAtIEluaXRpYWxpemUgYSBuZXcgdW5pdmVyc2FsIHBsYW5lIG9iamVjdAo+ ICAqIEBkZXY6IERSTSBkZXZpY2UKPkBAIC0xMzAsNiArMjQxLDEwIEBAIGludCBkcm1fdW5pdmVy c2FsX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsCj4gCQlyZXR1cm4gLUVOT01FTTsKPiAJfQo+Cj4rCS8qIEZpcnN0IGRyaXZlciB0byBu ZWVkIG1vcmUgdGhhbiA2NCBmb3JtYXRzIG5lZWRzIHRvIGZpeCB0aGlzICovCj4rCWlmIChXQVJO X09OKGZvcm1hdF9jb3VudCA+IDY0KSkKPisJCXJldHVybiAtRUlOVkFMOwo+Kwo+IAlpZiAobmFt ZSkgewo+IAkJdmFfbGlzdCBhcDsKPgo+QEAgLTE3Nyw2ICsyOTIsMTAgQEAgaW50IGRybV91bml2 ZXJzYWxfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSwKPiAJCWRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KCZwbGFuZS0+YmFzZSwgY29u ZmlnLT5wcm9wX3NyY19oLCAwKTsKPiAJfQo+Cj4rCWlmIChjb25maWctPmFsbG93X2ZiX21vZGlm aWVycykKPisJCWNyZWF0ZV9pbl9mb3JtYXRfYmxvYihkZXYsIHBsYW5lLCBmdW5jcywgZm9ybWF0 cywgZm9ybWF0X2NvdW50LAo+KwkJCQkgICAgICBmb3JtYXRfbW9kaWZpZXJzKTsKPisKPiAJcmV0 dXJuIDA7Cj4gfQo+IEVYUE9SVF9TWU1CT0woZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KTsKPmRp ZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fbW9kZV9jb25maWcuaCBiL2luY2x1ZGUvZHJtL2Ry bV9tb2RlX2NvbmZpZy5oCj5pbmRleCA0Mjk4MTcxMTE4OWIuLjAzNzc2ZTY1OTgxMSAxMDA2NDQK Pi0tLSBhL2luY2x1ZGUvZHJtL2RybV9tb2RlX2NvbmZpZy5oCj4rKysgYi9pbmNsdWRlL2RybS9k cm1fbW9kZV9jb25maWcuaAo+QEAgLTc1Nyw2ICs3NTcsMTIgQEAgc3RydWN0IGRybV9tb2RlX2Nv bmZpZyB7Cj4gCSAqLwo+IAlib29sIGFsbG93X2ZiX21vZGlmaWVyczsKPgo+KwkvKioKPisJICog QG1vZGlmaWVyczogUGxhbmUgcHJvcGVydHkgdG8gbGlzdCBzdXBwb3J0IG1vZGlmaWVyL2Zvcm1h dAo+KwkgKiBjb21iaW5hdGlvbi4KPisJICovCj4rCXN0cnVjdCBkcm1fcHJvcGVydHkgKm1vZGlm aWVyczsKPisKPiAJLyogY3Vyc29yIHNpemUgKi8KPiAJdWludDMyX3QgY3Vyc29yX3dpZHRoLCBj dXJzb3JfaGVpZ2h0Owo+Cj5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9kcm1fbW9kZS5o IGIvaW5jbHVkZS91YXBpL2RybS9kcm1fbW9kZS5oCj5pbmRleCA4YzY3ZmMwM2Q1M2QuLmRjZGQw NGM1NTc5MiAxMDA2NDQKPi0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX21vZGUuaAo+KysrIGIv aW5jbHVkZS91YXBpL2RybS9kcm1fbW9kZS5oCj5AQCAtNjY1LDYgKzY2NSwzMiBAQCBzdHJ1Y3Qg ZHJtX21vZGVfYXRvbWljIHsKPiAJX191NjQgdXNlcl9kYXRhOwo+IH07Cj4KPitzdHJ1Y3QgZHJt X2Zvcm1hdF9tb2RpZmllciB7Cj4rICAgICAgIC8qIEJpdG1hc2sgb2YgZm9ybWF0cyBpbiBnZXRf cGxhbmUgZm9ybWF0IGxpc3QgdGhpcyBpbmZvIGFwcGxpZXMgdG8uIFRoZQo+KwkqIG9mZnNldCBh bGxvd3MgYSBzbGlkaW5nIHdpbmRvdyBvZiB3aGljaCA2NCBmb3JtYXRzIChiaXRzKS4KPisJKgo+ KwkqIFNvbWUgZXhhbXBsZXM6Cj4rCSogSW4gdG9kYXkncyB3b3JsZCB3aXRoIDwgNjUgZm9ybWF0 cywgYW5kIGZvcm1hdHMgMCwgYW5kIDIgYXJlCj4rCSogc3VwcG9ydGVkCj4rCSogMHgwMDAwMDAw MDAwMDAwMDA1Cj4rCSoJCSAgXi1vZmZzZXQgPSAwLCBmb3JtYXRzID0gNQo+KwkqCj4rCSogSWYg dGhlIG51bWJlciBmb3JtYXRzIGdyZXcgdG8gMTI4LCBhbmQgZm9ybWF0cyA5OC0xMDIgYXJlCj4r CSogc3VwcG9ydGVkIHdpdGggdGhlIG1vZGlmaWVyOgo+KwkqCj4rCSogMHgwMDAwMDAzYzAwMDAw MDAwIDAwMDAwMDAwMDAwMDAwMDAKPisJKgkJICBeCj4rCSoJCSAgfF9fb2Zmc2V0ID0gNjQsIGZv cm1hdHMgPSAweDNjMDAwMDAwMDAKPisJKgo+KwkqLwo+KyAgICAgICB1aW50NjRfdCBmb3JtYXRz Owo+KyAgICAgICB1aW50MzJfdCBvZmZzZXQ7Cj4rICAgICAgIHVpbnQzMl90IHBhZDsKPisKPisg ICAgICAgLyogVGhpcyBtb2RpZmllciBjYW4gYmUgdXNlZCB3aXRoIHRoZSBmb3JtYXQgZm9yIHRo aXMgcGxhbmUuICovCj4rICAgICAgIHVpbnQ2NF90IG1vZGlmaWVyOwo+K30gX19wYWNrZWQ7Cj4r Cj4gLyoqCj4gICogQ3JlYXRlIGEgbmV3ICdibG9iJyBkYXRhIHByb3BlcnR5LCBjb3B5aW5nIGxl bmd0aCBieXRlcyBmcm9tIGRhdGEgcG9pbnRlciwKPiAgKiBhbmQgcmV0dXJuaW5nIG5ldyBibG9i IElELgo+LS0gCj4yLjEyLjIKPgo+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KPmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKPmRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKPmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vZHJpLWRldmVsCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZl bAo=