From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 7/9] drm/cma-helper: Use the generic fbdev emulation Date: Thu, 24 May 2018 12:16:43 +0200 Message-ID: <20180524101643.GM3438@phenom.ffwll.local> References: <20180523143411.64070-1-noralf@tronnes.org> <20180523143411.64070-8-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20180523143411.64070-8-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Noralf =?iso-8859-1?Q?Tr=F8nnes?= Cc: intel-gfx@lists.freedesktop.org, laurent.pinchart@ideasonboard.com, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBNYXkgMjMsIDIwMTggYXQgMDQ6MzQ6MDlQTSArMDIwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IFRoaXMgc3dpdGNoZXMgdGhlIENNQSBoZWxwZXIgZHJpdmVycyB0aGF0IHVzZSBp dHMgZmJkZXYgZW11bGF0aW9uIG92ZXIKPiB0byB0aGUgZ2VuZXJpYyBmYmRldiBlbXVsYXRpb24u IEl0J3MgdGhlIGZpcnN0IHBoYXNlIG9mIHVzaW5nIGdlbmVyaWMKPiBmYmRldi4gQSBsYXRlciBw aGFzZSB3aWxsIHVzZSBEUk0gY2xpZW50IGNhbGxiYWNrcyBmb3IgdGhlCj4gbGFzdGNsb3NlL2hv dHBsdWcvcmVtb3ZlIGNhbGxiYWNrcy4KPiAKPiBUaGVyZSBhcmUgY3VycmVudGx5IDIgZmJkZXYg aW5pdC9maW5pIGZ1bmN0aW9uczoKPiAtIGRybV9mYl9jbWFfZmJkZXZfaW5pdC9kcm1fZmJfY21h X2ZiZGV2X2ZpbmkKPiAtIGRybV9mYmRldl9jbWFfaW5pdC9kcm1fZmJkZXZfY21hX2ZpbmkKPiAK PiBUaGlzIGlzIGJlY2F1c2UgdGhlIHdvcmsgb24gZ2VuZXJpYyBmYmRldiBjYW1lIHVwIGR1cmlu ZyBhIGZiZGV2Cj4gcmVmYWN0b3JpbmcgYW5kIHRodXMgd2Fzbid0IGNvbXBsZXRlZC4gTm8gcG9p bnQgaW4gY29tcGxldGluZyB0aGF0Cj4gcmVmYWN0b3Jpbmcgd2hlbiBkcml2ZXJzIHdpbGwgc29v biBtb3ZlIHRvIGRybV9mYl9oZWxwZXJfZ2VuZXJpY19wcm9iZSgpLgo+IAo+IHRpbnlkcm0gdXNl cyBkcm1fZmJfY21hX2ZiZGV2X2luaXRfd2l0aF9mdW5jcygpLgo+IAo+IENjOiBMYXVyZW50IFBp bmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+Cj4gU2lnbmVkLW9mZi1i eTogTm9yYWxmIFRyw7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+Cj4gLS0tCj4gIGRyaXZlcnMv Z3B1L2RybS9kcm1fZmJfY21hX2hlbHBlci5jIHwgMzY1ICsrKysrLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQoKWWF5IGZvciB0aGUgZGlmZnN0YXQhIEhhcyBteSBhY2ssIGJ1dCB3b3Vs ZCBiZSBnb29kIHRvIGdldCBMYXVyZW50J3MKcmV2aWV3LgotRGFuaWVsCgoKPiAgaW5jbHVkZS9k cm0vZHJtX2ZiX2NtYV9oZWxwZXIuaCAgICAgfCAgIDMgLQo+ICAyIGZpbGVzIGNoYW5nZWQsIDQ3 IGluc2VydGlvbnMoKyksIDMyMSBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2RybV9mYl9jbWFfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2Nt YV9oZWxwZXIuYwo+IGluZGV4IDE4NmQwMGFkZmI1Zi4uNzZlMmY3OTc3Nzc5IDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfY21hX2hlbHBlci5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2RybV9mYl9jbWFfaGVscGVyLmMKPiBAQCAtMTgsNiArMTgsNyBAQAo+ICAgKi8KPiAg Cj4gICNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jbGllbnQuaD4K PiAgI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2Zy YW1lYnVmZmVyLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+Cj4gQEAg LTI2LDExICsyNyw4IEBACj4gICNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+Cj4gICNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KPiAgCj4gLSNkZWZpbmUgREVGQVVMVF9GQkRFRklPX0RFTEFZX01T IDUwCj4gLQo+ICBzdHJ1Y3QgZHJtX2ZiZGV2X2NtYSB7Cj4gIAlzdHJ1Y3QgZHJtX2ZiX2hlbHBl cglmYl9oZWxwZXI7Cj4gLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzICpmYl9m dW5jczsKPiAgfTsKPiAgCj4gIC8qKgo+IEBAIC00NCwzNiArNDIsNiBAQCBzdHJ1Y3QgZHJtX2Zi ZGV2X2NtYSB7Cj4gICAqCj4gICAqIEFuIGZiZGV2IGZyYW1lYnVmZmVyIGJhY2tlZCBieSBjbWEg aXMgYWxzbyBhdmFpbGFibGUgYnkgY2FsbGluZwo+ICAgKiBkcm1fZmJfY21hX2ZiZGV2X2luaXQo KS4gZHJtX2ZiX2NtYV9mYmRldl9maW5pKCkgdGVhcnMgaXQgZG93bi4KPiAtICogSWYgdGhlICZk cm1fZnJhbWVidWZmZXJfZnVuY3MuZGlydHkgY2FsbGJhY2sgaXMgc2V0LCBmYl9kZWZlcnJlZF9p byB3aWxsIGJlCj4gLSAqIHNldCB1cCBhdXRvbWF0aWNhbGx5LiAmZHJtX2ZyYW1lYnVmZmVyX2Z1 bmNzLmRpcnR5IGlzIGNhbGxlZCBieQo+IC0gKiBkcm1fZmJfaGVscGVyX2RlZmVycmVkX2lvKCkg aW4gcHJvY2VzcyBjb250ZXh0ICgmc3RydWN0IGRlbGF5ZWRfd29yaykuCj4gLSAqCj4gLSAqIEV4 YW1wbGUgZmJkZXYgZGVmZXJyZWQgaW8gY29kZTo6Cj4gLSAqCj4gLSAqICAgICBzdGF0aWMgaW50 IGRyaXZlcl9mYl9kaXJ0eShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPiAtICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAo+IC0g KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZmxhZ3MsIHVuc2lnbmVk IGNvbG9yLAo+IC0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9j bGlwX3JlY3QgKmNsaXBzLAo+IC0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgbnVtX2NsaXBzKQo+IC0gKiAgICAgewo+IC0gKiAgICAgICAgIHN0cnVjdCBkcm1fZ2Vt X2NtYV9vYmplY3QgKmNtYSA9IGRybV9mYl9jbWFfZ2V0X2dlbV9vYmooZmIsIDApOwo+IC0gKiAg ICAgICAgIC4uLiBwdXNoIGNoYW5nZXMgLi4uCj4gLSAqICAgICAgICAgcmV0dXJuIDA7Cj4gLSAq ICAgICB9Cj4gLSAqCj4gLSAqICAgICBzdGF0aWMgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5j cyBkcml2ZXJfZmJfZnVuY3MgPSB7Cj4gLSAqICAgICAgICAgLmRlc3Ryb3kgICAgICAgPSBkcm1f Z2VtX2ZiX2Rlc3Ryb3ksCj4gLSAqICAgICAgICAgLmNyZWF0ZV9oYW5kbGUgPSBkcm1fZ2VtX2Zi X2NyZWF0ZV9oYW5kbGUsCj4gLSAqICAgICAgICAgLmRpcnR5ICAgICAgICAgPSBkcml2ZXJfZmJf ZGlydHksCj4gLSAqICAgICB9Owo+IC0gKgo+IC0gKiBJbml0aWFsaXplOjoKPiAtICoKPiAtICog ICAgIGZiZGV2ID0gZHJtX2ZiX2NtYV9mYmRldl9pbml0X3dpdGhfZnVuY3MoZGV2LCAxNiwKPiAt ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5tb2RlX2Nv bmZpZy5udW1fY3J0YywKPiAtICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGV2LT5tb2RlX2NvbmZpZy5udW1fY29ubmVjdG9yLAo+IC0gKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHJpdmVyX2ZiX2Z1bmNzKTsKPiAtICoKPiAg ICovCj4gIAo+ICBzdGF0aWMgaW5saW5lIHN0cnVjdCBkcm1fZmJkZXZfY21hICp0b19mYmRldl9j bWEoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlcikKPiBAQCAtMTMxLDE1MyArOTksNiBAQCBk bWFfYWRkcl90IGRybV9mYl9jbWFfZ2V0X2dlbV9hZGRyKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiLAo+ICB9Cj4gIEVYUE9SVF9TWU1CT0xfR1BMKGRybV9mYl9jbWFfZ2V0X2dlbV9hZGRyKTsK PiAgCj4gLXN0YXRpYyBpbnQgZHJtX2ZiX2NtYV9tbWFwKHN0cnVjdCBmYl9pbmZvICppbmZvLCBz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiAtewo+IC0JcmV0dXJuIGRtYV9tbWFwX3dyaXRl Y29tYmluZShpbmZvLT5kZXZpY2UsIHZtYSwgaW5mby0+c2NyZWVuX2Jhc2UsCj4gLQkJCQkgICAg IGluZm8tPmZpeC5zbWVtX3N0YXJ0LCBpbmZvLT5maXguc21lbV9sZW4pOwo+IC19Cj4gLQo+IC1z dGF0aWMgc3RydWN0IGZiX29wcyBkcm1fZmJkZXZfY21hX29wcyA9IHsKPiAtCS5vd25lcgkJPSBU SElTX01PRFVMRSwKPiAtCURSTV9GQl9IRUxQRVJfREVGQVVMVF9PUFMsCj4gLQkuZmJfZmlsbHJl Y3QJPSBkcm1fZmJfaGVscGVyX3N5c19maWxscmVjdCwKPiAtCS5mYl9jb3B5YXJlYQk9IGRybV9m Yl9oZWxwZXJfc3lzX2NvcHlhcmVhLAo+IC0JLmZiX2ltYWdlYmxpdAk9IGRybV9mYl9oZWxwZXJf c3lzX2ltYWdlYmxpdCwKPiAtCS5mYl9tbWFwCT0gZHJtX2ZiX2NtYV9tbWFwLAo+IC19Owo+IC0K PiAtc3RhdGljIGludCBkcm1fZmJkZXZfY21hX2RlZmVycmVkX2lvX21tYXAoc3RydWN0IGZiX2lu Zm8gKmluZm8sCj4gLQkJCQkJICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiAtewo+IC0J ZmJfZGVmZXJyZWRfaW9fbW1hcChpbmZvLCB2bWEpOwo+IC0Jdm1hLT52bV9wYWdlX3Byb3QgPSBw Z3Byb3Rfd3JpdGVjb21iaW5lKHZtYS0+dm1fcGFnZV9wcm90KTsKPiAtCj4gLQlyZXR1cm4gMDsK PiAtfQo+IC0KPiAtc3RhdGljIGludCBkcm1fZmJkZXZfY21hX2RlZmlvX2luaXQoc3RydWN0IGZi X2luZm8gKmZiaSwKPiAtCQkJCSAgICBzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpjbWFfb2Jq KQo+IC17Cj4gLQlzdHJ1Y3QgZmJfZGVmZXJyZWRfaW8gKmZiZGVmaW87Cj4gLQlzdHJ1Y3QgZmJf b3BzICpmYm9wczsKPiAtCj4gLQkvKgo+IC0JICogUGVyIGRldmljZSBzdHJ1Y3R1cmVzIGFyZSBu ZWVkZWQgYmVjYXVzZToKPiAtCSAqIGZib3BzOiBmYl9kZWZlcnJlZF9pb19jbGVhbnVwKCkgY2xl YXJzIGZib3BzLmZiX21tYXAKPiAtCSAqIGZiZGVmaW86IGluZGl2aWR1YWwgZGVsYXlzCj4gLQkg Ki8KPiAtCWZiZGVmaW8gPSBremFsbG9jKHNpemVvZigqZmJkZWZpbyksIEdGUF9LRVJORUwpOwo+ IC0JZmJvcHMgPSBremFsbG9jKHNpemVvZigqZmJvcHMpLCBHRlBfS0VSTkVMKTsKPiAtCWlmICgh ZmJkZWZpbyB8fCAhZmJvcHMpIHsKPiAtCQlrZnJlZShmYmRlZmlvKTsKPiAtCQlrZnJlZShmYm9w cyk7Cj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4gLQl9Cj4gLQo+IC0JLyogY2FuJ3QgYmUgb2Zmc2V0 IGZyb20gdmFkZHIgc2luY2UgZGlydHkoKSB1c2VzIGNtYV9vYmogKi8KPiAtCWZiaS0+c2NyZWVu X2J1ZmZlciA9IGNtYV9vYmotPnZhZGRyOwo+IC0JLyogZmJfZGVmZXJyZWRfaW9fZmF1bHQoKSBu ZWVkcyBhIHBoeXNpY2FsIGFkZHJlc3MgKi8KPiAtCWZiaS0+Zml4LnNtZW1fc3RhcnQgPSBwYWdl X3RvX3BoeXModmlydF90b19wYWdlKGZiaS0+c2NyZWVuX2J1ZmZlcikpOwo+IC0KPiAtCSpmYm9w cyA9ICpmYmktPmZib3BzOwo+IC0JZmJpLT5mYm9wcyA9IGZib3BzOwo+IC0KPiAtCWZiZGVmaW8t PmRlbGF5ID0gbXNlY3NfdG9famlmZmllcyhERUZBVUxUX0ZCREVGSU9fREVMQVlfTVMpOwo+IC0J ZmJkZWZpby0+ZGVmZXJyZWRfaW8gPSBkcm1fZmJfaGVscGVyX2RlZmVycmVkX2lvOwo+IC0JZmJp LT5mYmRlZmlvID0gZmJkZWZpbzsKPiAtCWZiX2RlZmVycmVkX2lvX2luaXQoZmJpKTsKPiAtCWZi aS0+ZmJvcHMtPmZiX21tYXAgPSBkcm1fZmJkZXZfY21hX2RlZmVycmVkX2lvX21tYXA7Cj4gLQo+ IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGRybV9mYmRldl9jbWFfZGVmaW9f ZmluaShzdHJ1Y3QgZmJfaW5mbyAqZmJpKQo+IC17Cj4gLQlpZiAoIWZiaS0+ZmJkZWZpbykKPiAt CQlyZXR1cm47Cj4gLQo+IC0JZmJfZGVmZXJyZWRfaW9fY2xlYW51cChmYmkpOwo+IC0Ja2ZyZWUo ZmJpLT5mYmRlZmlvKTsKPiAtCWtmcmVlKGZiaS0+ZmJvcHMpOwo+IC19Cj4gLQo+IC1zdGF0aWMg aW50Cj4gLWRybV9mYmRldl9jbWFfY3JlYXRlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIs Cj4gLQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9zdXJmYWNlX3NpemUgKnNpemVzKQo+IC17Cj4gLQlz dHJ1Y3QgZHJtX2ZiZGV2X2NtYSAqZmJkZXZfY21hID0gdG9fZmJkZXZfY21hKGhlbHBlcik7Cj4g LQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaGVscGVyLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2dl bV9jbWFfb2JqZWN0ICpvYmo7Cj4gLQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKPiAtCXVu c2lnbmVkIGludCBieXRlc19wZXJfcGl4ZWw7Cj4gLQl1bnNpZ25lZCBsb25nIG9mZnNldDsKPiAt CXN0cnVjdCBmYl9pbmZvICpmYmk7Cj4gLQlzaXplX3Qgc2l6ZTsKPiAtCWludCByZXQ7Cj4gLQo+ IC0JRFJNX0RFQlVHX0tNUygic3VyZmFjZSB3aWR0aCglZCksIGhlaWdodCglZCkgYW5kIGJwcCgl ZClcbiIsCj4gLQkJCXNpemVzLT5zdXJmYWNlX3dpZHRoLCBzaXplcy0+c3VyZmFjZV9oZWlnaHQs Cj4gLQkJCXNpemVzLT5zdXJmYWNlX2JwcCk7Cj4gLQo+IC0JYnl0ZXNfcGVyX3BpeGVsID0gRElW X1JPVU5EX1VQKHNpemVzLT5zdXJmYWNlX2JwcCwgOCk7Cj4gLQlzaXplID0gc2l6ZXMtPnN1cmZh Y2Vfd2lkdGggKiBzaXplcy0+c3VyZmFjZV9oZWlnaHQgKiBieXRlc19wZXJfcGl4ZWw7Cj4gLQlv YmogPSBkcm1fZ2VtX2NtYV9jcmVhdGUoZGV2LCBzaXplKTsKPiAtCWlmIChJU19FUlIob2JqKSkK PiAtCQlyZXR1cm4gLUVOT01FTTsKPiAtCj4gLQlmYmkgPSBkcm1fZmJfaGVscGVyX2FsbG9jX2Zi aShoZWxwZXIpOwo+IC0JaWYgKElTX0VSUihmYmkpKSB7Cj4gLQkJcmV0ID0gUFRSX0VSUihmYmkp Owo+IC0JCWdvdG8gZXJyX2dlbV9mcmVlX29iamVjdDsKPiAtCX0KPiAtCj4gLQlmYiA9IGRybV9n ZW1fZmJkZXZfZmJfY3JlYXRlKGRldiwgc2l6ZXMsIDAsICZvYmotPmJhc2UsCj4gLQkJCQkgICAg IGZiZGV2X2NtYS0+ZmJfZnVuY3MpOwo+IC0JaWYgKElTX0VSUihmYikpIHsKPiAtCQlkZXZfZXJy KGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIERSTSBmcmFtZWJ1ZmZlci5cbiIpOwo+IC0J CXJldCA9IFBUUl9FUlIoZmIpOwo+IC0JCWdvdG8gZXJyX2ZiX2luZm9fZGVzdHJveTsKPiAtCX0K PiAtCj4gLQloZWxwZXItPmZiID0gZmI7Cj4gLQo+IC0JZmJpLT5wYXIgPSBoZWxwZXI7Cj4gLQlm YmktPmZsYWdzID0gRkJJTkZPX0ZMQUdfREVGQVVMVDsKPiAtCWZiaS0+ZmJvcHMgPSAmZHJtX2Zi ZGV2X2NtYV9vcHM7Cj4gLQo+IC0JZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChmYmksIGZiLT5waXRj aGVzWzBdLCBmYi0+Zm9ybWF0LT5kZXB0aCk7Cj4gLQlkcm1fZmJfaGVscGVyX2ZpbGxfdmFyKGZi aSwgaGVscGVyLCBzaXplcy0+ZmJfd2lkdGgsIHNpemVzLT5mYl9oZWlnaHQpOwo+IC0KPiAtCW9m ZnNldCA9IGZiaS0+dmFyLnhvZmZzZXQgKiBieXRlc19wZXJfcGl4ZWw7Cj4gLQlvZmZzZXQgKz0g ZmJpLT52YXIueW9mZnNldCAqIGZiLT5waXRjaGVzWzBdOwo+IC0KPiAtCWRldi0+bW9kZV9jb25m aWcuZmJfYmFzZSA9IChyZXNvdXJjZV9zaXplX3Qpb2JqLT5wYWRkcjsKPiAtCWZiaS0+c2NyZWVu X2Jhc2UgPSBvYmotPnZhZGRyICsgb2Zmc2V0Owo+IC0JZmJpLT5maXguc21lbV9zdGFydCA9ICh1 bnNpZ25lZCBsb25nKShvYmotPnBhZGRyICsgb2Zmc2V0KTsKPiAtCWZiaS0+c2NyZWVuX3NpemUg PSBzaXplOwo+IC0JZmJpLT5maXguc21lbV9sZW4gPSBzaXplOwo+IC0KPiAtCWlmIChmYi0+ZnVu Y3MtPmRpcnR5KSB7Cj4gLQkJcmV0ID0gZHJtX2ZiZGV2X2NtYV9kZWZpb19pbml0KGZiaSwgb2Jq KTsKPiAtCQlpZiAocmV0KQo+IC0JCQlnb3RvIGVycl9jbWFfZGVzdHJveTsKPiAtCX0KPiAtCj4g LQlyZXR1cm4gMDsKPiAtCj4gLWVycl9jbWFfZGVzdHJveToKPiAtCWRybV9mcmFtZWJ1ZmZlcl9y ZW1vdmUoZmIpOwo+IC1lcnJfZmJfaW5mb19kZXN0cm95Ogo+IC0JZHJtX2ZiX2hlbHBlcl9maW5p KGhlbHBlcik7Cj4gLWVycl9nZW1fZnJlZV9vYmplY3Q6Cj4gLQlkcm1fZ2VtX29iamVjdF9wdXRf dW5sb2NrZWQoJm9iai0+YmFzZSk7Cj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC1zdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9mYl9oZWxwZXJfZnVuY3MgZHJtX2ZiX2NtYV9oZWxwZXJfZnVuY3Mg PSB7Cj4gLQkuZmJfcHJvYmUgPSBkcm1fZmJkZXZfY21hX2NyZWF0ZSwKPiAtfTsKPiAtCj4gIC8q Kgo+ICAgKiBkcm1fZmJfY21hX2ZiZGV2X2luaXRfd2l0aF9mdW5jcygpIC0gQWxsb2NhdGUgYW5k IGluaXRpYWxpemUgZmJkZXYgZW11bGF0aW9uCj4gICAqIEBkZXY6IERSTSBkZXZpY2UKPiBAQCAt Mjk1LDUzICsxMTYsNyBAQCBpbnQgZHJtX2ZiX2NtYV9mYmRldl9pbml0X3dpdGhfZnVuY3Moc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCXVuc2lnbmVkIGludCBwcmVmZXJyZWRfYnBwLCB1bnNp Z25lZCBpbnQgbWF4X2Nvbm5fY291bnQsCj4gIAljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy X2Z1bmNzICpmdW5jcykKPiAgewo+IC0Jc3RydWN0IGRybV9mYmRldl9jbWEgKmZiZGV2X2NtYTsK PiAtCXN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXI7Cj4gLQlpbnQgcmV0Owo+IC0KPiAt CWlmICghcHJlZmVycmVkX2JwcCkKPiAtCQlwcmVmZXJyZWRfYnBwID0gZGV2LT5tb2RlX2NvbmZp Zy5wcmVmZXJyZWRfZGVwdGg7Cj4gLQlpZiAoIXByZWZlcnJlZF9icHApCj4gLQkJcHJlZmVycmVk X2JwcCA9IDMyOwo+IC0KPiAtCWlmICghbWF4X2Nvbm5fY291bnQpCj4gLQkJbWF4X2Nvbm5fY291 bnQgPSBkZXYtPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3I7Cj4gLQo+IC0JZmJkZXZfY21hID0g a3phbGxvYyhzaXplb2YoKmZiZGV2X2NtYSksIEdGUF9LRVJORUwpOwo+IC0JaWYgKCFmYmRldl9j bWEpCj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4gLQo+IC0JZmJkZXZfY21hLT5mYl9mdW5jcyA9IGZ1 bmNzOwo+IC0JZmJfaGVscGVyID0gJmZiZGV2X2NtYS0+ZmJfaGVscGVyOwo+IC0KPiAtCWRybV9m Yl9oZWxwZXJfcHJlcGFyZShkZXYsIGZiX2hlbHBlciwgJmRybV9mYl9jbWFfaGVscGVyX2Z1bmNz KTsKPiAtCj4gLQlyZXQgPSBkcm1fZmJfaGVscGVyX2luaXQoZGV2LCBmYl9oZWxwZXIsIG1heF9j b25uX2NvdW50KTsKPiAtCWlmIChyZXQgPCAwKSB7Cj4gLQkJRFJNX0RFVl9FUlJPUihkZXYtPmRl diwgIkZhaWxlZCB0byBpbml0aWFsaXplIGZiZGV2IGhlbHBlci5cbiIpOwo+IC0JCWdvdG8gZXJy X2ZyZWU7Cj4gLQl9Cj4gLQo+IC0JcmV0ID0gZHJtX2ZiX2hlbHBlcl9zaW5nbGVfYWRkX2FsbF9j b25uZWN0b3JzKGZiX2hlbHBlcik7Cj4gLQlpZiAocmV0IDwgMCkgewo+IC0JCURSTV9ERVZfRVJS T1IoZGV2LT5kZXYsICJGYWlsZWQgdG8gYWRkIGNvbm5lY3RvcnMuXG4iKTsKPiAtCQlnb3RvIGVy cl9kcm1fZmJfaGVscGVyX2Zpbmk7Cj4gLQl9Cj4gLQo+IC0JcmV0ID0gZHJtX2ZiX2hlbHBlcl9p bml0aWFsX2NvbmZpZyhmYl9oZWxwZXIsIHByZWZlcnJlZF9icHApOwo+IC0JaWYgKHJldCA8IDAp IHsKPiAtCQlEUk1fREVWX0VSUk9SKGRldi0+ZGV2LCAiRmFpbGVkIHRvIHNldCBmYmRldiBjb25m aWd1cmF0aW9uLlxuIik7Cj4gLQkJZ290byBlcnJfZHJtX2ZiX2hlbHBlcl9maW5pOwo+IC0JfQo+ IC0KPiAtCXJldHVybiAwOwo+IC0KPiAtZXJyX2RybV9mYl9oZWxwZXJfZmluaToKPiAtCWRybV9m Yl9oZWxwZXJfZmluaShmYl9oZWxwZXIpOwo+IC1lcnJfZnJlZToKPiAtCWtmcmVlKGZiZGV2X2Nt YSk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiArCXJldHVybiBkcm1fZmJfY21hX2ZiZGV2X2luaXQo ZGV2LCBwcmVmZXJyZWRfYnBwLCBtYXhfY29ubl9jb3VudCk7Cj4gIH0KPiAgRVhQT1JUX1NZTUJP TF9HUEwoZHJtX2ZiX2NtYV9mYmRldl9pbml0X3dpdGhfZnVuY3MpOwo+ICAKPiBAQCAtMzU5LDgg KzEzNCwxNCBAQCBFWFBPUlRfU1lNQk9MX0dQTChkcm1fZmJfY21hX2ZiZGV2X2luaXRfd2l0aF9m dW5jcyk7Cj4gIGludCBkcm1fZmJfY21hX2ZiZGV2X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdW5zaWduZWQgaW50IHByZWZlcnJlZF9icHAsCj4gIAkJCSAgdW5zaWduZWQgaW50IG1heF9j b25uX2NvdW50KQo+ICB7Cj4gLQlyZXR1cm4gZHJtX2ZiX2NtYV9mYmRldl9pbml0X3dpdGhfZnVu Y3MoZGV2LCBwcmVmZXJyZWRfYnBwLAo+IC0JCQkJCQltYXhfY29ubl9jb3VudCwgTlVMTCk7Cj4g KwlzdHJ1Y3QgZHJtX2ZiZGV2X2NtYSAqZmJkZXZfY21hOwo+ICsKPiArCS8qIGRldi0+ZmJfaGVs cGVyIHdpbGwgaW5kaXJlY3RseSBwb2ludCB0byBmYmRldl9jbWEgYWZ0ZXIgdGhpcyBjYWxsICov Cj4gKwlmYmRldl9jbWEgPSBkcm1fZmJkZXZfY21hX2luaXQoZGV2LCBwcmVmZXJyZWRfYnBwLCBt YXhfY29ubl9jb3VudCk7Cj4gKwlpZiAoSVNfRVJSKGZiZGV2X2NtYSkpCj4gKwkJcmV0dXJuIFBU Ul9FUlIoZmJkZXZfY21hKTsKPiArCj4gKwlyZXR1cm4gMDsKPiAgfQo+ICBFWFBPUlRfU1lNQk9M X0dQTChkcm1fZmJfY21hX2ZiZGV2X2luaXQpOwo+ICAKPiBAQCAtMzcwLDg3ICsxNTEsMTMgQEAg RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2ZiX2NtYV9mYmRldl9pbml0KTsKPiAgICovCj4gIHZvaWQg ZHJtX2ZiX2NtYV9mYmRldl9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIHsKPiAtCXN0 cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIgPSBkZXYtPmZiX2hlbHBlcjsKPiAtCj4gLQlp ZiAoIWZiX2hlbHBlcikKPiAtCQlyZXR1cm47Cj4gLQo+IC0JLyogVW5yZWdpc3RlciBpZiBpdCBo YXNuJ3QgYmVlbiBkb25lIGFscmVhZHkgKi8KPiAtCWlmIChmYl9oZWxwZXItPmZiZGV2ICYmIGZi X2hlbHBlci0+ZmJkZXYtPmRldikKPiAtCQlkcm1fZmJfaGVscGVyX3VucmVnaXN0ZXJfZmJpKGZi X2hlbHBlcik7Cj4gLQo+IC0JaWYgKGZiX2hlbHBlci0+ZmJkZXYpCj4gLQkJZHJtX2ZiZGV2X2Nt YV9kZWZpb19maW5pKGZiX2hlbHBlci0+ZmJkZXYpOwo+IC0KPiAtCWlmIChmYl9oZWxwZXItPmZi KQo+IC0JCWRybV9mcmFtZWJ1ZmZlcl9yZW1vdmUoZmJfaGVscGVyLT5mYik7Cj4gLQo+IC0JZHJt X2ZiX2hlbHBlcl9maW5pKGZiX2hlbHBlcik7Cj4gLQlrZnJlZSh0b19mYmRldl9jbWEoZmJfaGVs cGVyKSk7Cj4gKwlpZiAoZGV2LT5mYl9oZWxwZXIpCj4gKwkJZHJtX2ZiZGV2X2NtYV9maW5pKHRv X2ZiZGV2X2NtYShkZXYtPmZiX2hlbHBlcikpOwo+ICB9Cj4gIEVYUE9SVF9TWU1CT0xfR1BMKGRy bV9mYl9jbWFfZmJkZXZfZmluaSk7Cj4gIAo+IC0vKioKPiAtICogZHJtX2ZiZGV2X2NtYV9pbml0 X3dpdGhfZnVuY3MoKSAtIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplcyBhIGRybV9mYmRldl9jbWEg c3RydWN0Cj4gLSAqIEBkZXY6IERSTSBkZXZpY2UKPiAtICogQHByZWZlcnJlZF9icHA6IFByZWZl cnJlZCBiaXRzIHBlciBwaXhlbCBmb3IgdGhlIGRldmljZQo+IC0gKiBAbWF4X2Nvbm5fY291bnQ6 IE1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3RvcnMKPiAtICogQGZ1bmNzOiBmYiBoZWxwZXIgZnVu Y3Rpb25zLCBpbiBwYXJ0aWN1bGFyIGEgY3VzdG9tIGRpcnR5KCkgY2FsbGJhY2sKPiAtICoKPiAt ICogUmV0dXJucyBhIG5ld2x5IGFsbG9jYXRlZCBkcm1fZmJkZXZfY21hIHN0cnVjdCBvciBhIEVS Ul9QVFIuCj4gLSAqLwo+IC1zdHJ1Y3QgZHJtX2ZiZGV2X2NtYSAqZHJtX2ZiZGV2X2NtYV9pbml0 X3dpdGhfZnVuY3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAtCXVuc2lnbmVkIGludCBwcmVm ZXJyZWRfYnBwLCB1bnNpZ25lZCBpbnQgbWF4X2Nvbm5fY291bnQsCj4gLQljb25zdCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzICpmdW5jcykKPiAtewo+IC0Jc3RydWN0IGRybV9mYmRldl9j bWEgKmZiZGV2X2NtYTsKPiAtCXN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXI7Cj4gLQlpbnQg cmV0Owo+IC0KPiAtCWZiZGV2X2NtYSA9IGt6YWxsb2Moc2l6ZW9mKCpmYmRldl9jbWEpLCBHRlBf S0VSTkVMKTsKPiAtCWlmICghZmJkZXZfY21hKSB7Cj4gLQkJZGV2X2VycihkZXYtPmRldiwgIkZh aWxlZCB0byBhbGxvY2F0ZSBkcm0gZmJkZXYuXG4iKTsKPiAtCQlyZXR1cm4gRVJSX1BUUigtRU5P TUVNKTsKPiAtCX0KPiAtCWZiZGV2X2NtYS0+ZmJfZnVuY3MgPSBmdW5jczsKPiAtCj4gLQloZWxw ZXIgPSAmZmJkZXZfY21hLT5mYl9oZWxwZXI7Cj4gLQo+IC0JZHJtX2ZiX2hlbHBlcl9wcmVwYXJl KGRldiwgaGVscGVyLCAmZHJtX2ZiX2NtYV9oZWxwZXJfZnVuY3MpOwo+IC0KPiAtCXJldCA9IGRy bV9mYl9oZWxwZXJfaW5pdChkZXYsIGhlbHBlciwgbWF4X2Nvbm5fY291bnQpOwo+IC0JaWYgKHJl dCA8IDApIHsKPiAtCQlkZXZfZXJyKGRldi0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgZHJt IGZiIGhlbHBlci5cbiIpOwo+IC0JCWdvdG8gZXJyX2ZyZWU7Cj4gLQl9Cj4gLQo+IC0JcmV0ID0g ZHJtX2ZiX2hlbHBlcl9zaW5nbGVfYWRkX2FsbF9jb25uZWN0b3JzKGhlbHBlcik7Cj4gLQlpZiAo cmV0IDwgMCkgewo+IC0JCWRldl9lcnIoZGV2LT5kZXYsICJGYWlsZWQgdG8gYWRkIGNvbm5lY3Rv cnMuXG4iKTsKPiAtCQlnb3RvIGVycl9kcm1fZmJfaGVscGVyX2Zpbmk7Cj4gLQo+IC0JfQo+IC0K PiAtCXJldCA9IGRybV9mYl9oZWxwZXJfaW5pdGlhbF9jb25maWcoaGVscGVyLCBwcmVmZXJyZWRf YnBwKTsKPiAtCWlmIChyZXQgPCAwKSB7Cj4gLQkJZGV2X2VycihkZXYtPmRldiwgIkZhaWxlZCB0 byBzZXQgaW5pdGlhbCBodyBjb25maWd1cmF0aW9uLlxuIik7Cj4gLQkJZ290byBlcnJfZHJtX2Zi X2hlbHBlcl9maW5pOwo+IC0JfQo+IC0KPiAtCXJldHVybiBmYmRldl9jbWE7Cj4gLQo+IC1lcnJf ZHJtX2ZiX2hlbHBlcl9maW5pOgo+IC0JZHJtX2ZiX2hlbHBlcl9maW5pKGhlbHBlcik7Cj4gLWVy cl9mcmVlOgo+IC0Ja2ZyZWUoZmJkZXZfY21hKTsKPiAtCj4gLQlyZXR1cm4gRVJSX1BUUihyZXQp Owo+IC19Cj4gLUVYUE9SVF9TWU1CT0xfR1BMKGRybV9mYmRldl9jbWFfaW5pdF93aXRoX2Z1bmNz KTsKPiAtCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzIGRybV9m Yl9jbWFfZnVuY3MgPSB7Cj4gLQkuZGVzdHJveQk9IGRybV9nZW1fZmJfZGVzdHJveSwKPiAtCS5j cmVhdGVfaGFuZGxlCT0gZHJtX2dlbV9mYl9jcmVhdGVfaGFuZGxlLAo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9mYl9oZWxwZXJfZnVuY3MgZHJtX2ZiX2NtYV9oZWxwZXJfZnVuY3MgPSB7Cj4g KwkuZmJfcHJvYmUgPSBkcm1fZmJfaGVscGVyX2dlbmVyaWNfcHJvYmUsCj4gIH07Cj4gIAo+ICAv KioKPiBAQCAtNDY0LDkgKzE3MSwzOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlcl9mdW5jcyBkcm1fZmJfY21hX2Z1bmNzID0gewo+ICBzdHJ1Y3QgZHJtX2ZiZGV2X2NtYSAq ZHJtX2ZiZGV2X2NtYV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAl1bnNpZ25lZCBp bnQgcHJlZmVycmVkX2JwcCwgdW5zaWduZWQgaW50IG1heF9jb25uX2NvdW50KQo+ICB7Cj4gLQly ZXR1cm4gZHJtX2ZiZGV2X2NtYV9pbml0X3dpdGhfZnVuY3MoZGV2LCBwcmVmZXJyZWRfYnBwLAo+ IC0JCQkJCSAgICAgbWF4X2Nvbm5fY291bnQsCj4gLQkJCQkJICAgICAmZHJtX2ZiX2NtYV9mdW5j cyk7Cj4gKwlzdHJ1Y3QgZHJtX2ZiZGV2X2NtYSAqZmJkZXZfY21hOwo+ICsJc3RydWN0IGRybV9m Yl9oZWxwZXIgKmZiX2hlbHBlcjsKPiArCXN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50Owo+ ICsJaW50IHJldDsKPiArCj4gKwlmYmRldl9jbWEgPSBremFsbG9jKHNpemVvZigqZmJkZXZfY21h KSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWZiZGV2X2NtYSkKPiArCQlyZXR1cm4gRVJSX1BUUigt RU5PTUVNKTsKPiArCj4gKwljbGllbnQgPSBkcm1fY2xpZW50X25ldyhkZXYpOwo+ICsJaWYgKElT X0VSUihjbGllbnQpKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihjbGllbnQpOwo+ICsJCWdvdG8gZXJy X2ZyZWU7Cj4gKwl9Cj4gKwo+ICsJZmJfaGVscGVyID0gJmZiZGV2X2NtYS0+ZmJfaGVscGVyOwo+ ICsJY2xpZW50LT5wcml2YXRlID0gZmJfaGVscGVyOwo+ICsJZmJfaGVscGVyLT5jbGllbnQgPSBj bGllbnQ7Cj4gKwo+ICsJcmV0ID0gZHJtX2ZiX2hlbHBlcl9mYmRldl9zZXR1cChkZXYsIGZiX2hl bHBlciwgJmRybV9mYl9jbWFfaGVscGVyX2Z1bmNzLAo+ICsJCQkJCXByZWZlcnJlZF9icHAsIG1h eF9jb25uX2NvdW50KTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfY2xpZW50X2ZyZWU7Cj4g Kwo+ICsJcmV0dXJuIGZiZGV2X2NtYTsKPiArCj4gK2Vycl9jbGllbnRfZnJlZToKPiArCWRybV9j bGllbnRfZnJlZShjbGllbnQpOwo+ICtlcnJfZnJlZToKPiArCWtmcmVlKGZiZGV2X2NtYSk7Cj4g Kwo+ICsJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiAgfQo+ICBFWFBPUlRfU1lNQk9MX0dQTChkcm1f ZmJkZXZfY21hX2luaXQpOwo+ICAKPiBAQCAtNDc3LDE0ICsyMTMsNyBAQCBFWFBPUlRfU1lNQk9M X0dQTChkcm1fZmJkZXZfY21hX2luaXQpOwo+ICB2b2lkIGRybV9mYmRldl9jbWFfZmluaShzdHJ1 Y3QgZHJtX2ZiZGV2X2NtYSAqZmJkZXZfY21hKQo+ICB7Cj4gIAlkcm1fZmJfaGVscGVyX3VucmVn aXN0ZXJfZmJpKCZmYmRldl9jbWEtPmZiX2hlbHBlcik7Cj4gLQlpZiAoZmJkZXZfY21hLT5mYl9o ZWxwZXIuZmJkZXYpCj4gLQkJZHJtX2ZiZGV2X2NtYV9kZWZpb19maW5pKGZiZGV2X2NtYS0+ZmJf aGVscGVyLmZiZGV2KTsKPiAtCj4gLQlpZiAoZmJkZXZfY21hLT5mYl9oZWxwZXIuZmIpCj4gLQkJ ZHJtX2ZyYW1lYnVmZmVyX3JlbW92ZShmYmRldl9jbWEtPmZiX2hlbHBlci5mYik7Cj4gLQo+IC0J ZHJtX2ZiX2hlbHBlcl9maW5pKCZmYmRldl9jbWEtPmZiX2hlbHBlcik7Cj4gLQlrZnJlZShmYmRl dl9jbWEpOwo+ICsJLyogQWxsIHJlc291cmNlcyBoYXZlIG5vdyBiZWVuIGZyZWVkIGJ5IGRybV9m YmRldl9mYl9kZXN0cm95KCkgKi8KPiAgfQo+ICBFWFBPUlRfU1lNQk9MX0dQTChkcm1fZmJkZXZf Y21hX2ZpbmkpOwo+ICAKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2ZiX2NtYV9oZWxw ZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9mYl9jbWFfaGVscGVyLmgKPiBpbmRleCBkNTMyZjg4YThk NTUuLmEwNTQ2YzM0NTFmOSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fZmJfY21hX2hl bHBlci5oCj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2ZiX2NtYV9oZWxwZXIuaAo+IEBAIC0yMyw5 ICsyMyw2IEBAIGludCBkcm1fZmJfY21hX2ZiZGV2X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdW5zaWduZWQgaW50IHByZWZlcnJlZF9icHAsCj4gIAkJCSAgdW5zaWduZWQgaW50IG1heF9j b25uX2NvdW50KTsKPiAgdm9pZCBkcm1fZmJfY21hX2ZiZGV2X2Zpbmkoc3RydWN0IGRybV9kZXZp Y2UgKmRldik7Cj4gIAo+IC1zdHJ1Y3QgZHJtX2ZiZGV2X2NtYSAqZHJtX2ZiZGV2X2NtYV9pbml0 X3dpdGhfZnVuY3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAtCXVuc2lnbmVkIGludCBwcmVm ZXJyZWRfYnBwLCB1bnNpZ25lZCBpbnQgbWF4X2Nvbm5fY291bnQsCj4gLQljb25zdCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzICpmdW5jcyk7Cj4gIHN0cnVjdCBkcm1fZmJkZXZfY21hICpk cm1fZmJkZXZfY21hX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCXVuc2lnbmVkIGlu dCBwcmVmZXJyZWRfYnBwLCB1bnNpZ25lZCBpbnQgbWF4X2Nvbm5fY291bnQpOwo+ICB2b2lkIGRy bV9mYmRldl9jbWFfZmluaShzdHJ1Y3QgZHJtX2ZiZGV2X2NtYSAqZmJkZXZfY21hKTsKPiAtLSAK PiAyLjE1LjEKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwo+IGRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9k cmktZGV2ZWwKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jw b3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngK