From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 25/60] drm: Add helper to create a connector for a chain of bridges Date: Wed, 14 Aug 2019 17:01:31 +0200 Message-ID: <20190814150131.GG7444@phenom.ffwll.local> References: <20190707180852.5512-1-laurent.pinchart@ideasonboard.com> <20190707181937.6250-1-laurent.pinchart@ideasonboard.com> <20190707181937.6250-22-laurent.pinchart@ideasonboard.com> <20190718170103.GB15868@phenom.ffwll.local> <20190808194843.GB6055@pendragon.ideasonboard.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com [IPv6:2a00:1450:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id C0B626E5FC for ; Wed, 14 Aug 2019 15:01:35 +0000 (UTC) Received: by mail-ed1-x544.google.com with SMTP id z51so22745898edz.13 for ; Wed, 14 Aug 2019 08:01:35 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20190808194843.GB6055@pendragon.ideasonboard.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Laurent Pinchart Cc: Maxime Ripard , Sebastian Reichel , dri-devel@lists.freedesktop.org, Tomi Valkeinen , Sean Paul List-Id: dri-devel@lists.freedesktop.org SGkgTGF1cmVudCwKCk9uIFRodSwgQXVnIDA4LCAyMDE5IGF0IDEwOjQ4OjQzUE0gKzAzMDAsIExh dXJlbnQgUGluY2hhcnQgd3JvdGU6Cj4gSGkgRGFuaWVsLAo+IAo+IE9uIFRodSwgSnVsIDE4LCAy MDE5IGF0IDA3OjAxOjAzUE0gKzAyMDAsIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gPiBPbiBTdW4s IEp1bCAwNywgMjAxOSBhdCAwOToxOTowMlBNICswMzAwLCBMYXVyZW50IFBpbmNoYXJ0IHdyb3Rl Ogo+ID4gPiBNb3N0IGJyaWRnZSBkcml2ZXJzIGNyZWF0ZSBhIERSTSBjb25uZWN0b3IgdG8gbW9k ZWwgdGhlIGNvbm5lY3RvciBhdCB0aGUKPiA+ID4gb3V0cHV0IG9mIHRoZSBicmlkZ2UuIFRoaXMg bW9kZWwgaXMgaGlzdG9yaWNhbCBhbmQgaGFzIHdvcmtlZCBwcmV0dHkKPiA+ID4gd2VsbCBzbyBm YXIsIGJ1dCBjYXVzZXMgc2V2ZXJhbCBpc3N1ZXM6Cj4gPiA+IAo+ID4gPiAtIEl0IHByZXZlbnRz IHN1cHBvcnRpbmcgbW9yZSBjb21wbGV4IGRpc3BsYXkgcGlwZWxpbmVzIHdoZXJlIERSTQo+ID4g PiBjb25uZWN0b3Igb3BlcmF0aW9ucyBhcmUgc3BsaXQgb3ZlciBtdWx0aXBsZSBjb21wb25lbnRz LiBGb3IgaW5zdGFuY2UgYQo+ID4gPiBwaXBlbGluZSB3aXRoIGEgYnJpZGdlIGNvbm5lY3RlZCB0 byB0aGUgRERDIHNpZ25hbHMgdG8gcmVhZCBFRElEIGRhdGEsCj4gPiA+IGFuZCBhbm90aGVyIG9u ZSBjb25uZWN0ZWQgdG8gdGhlIEhQRCBzaWduYWwgdG8gZGV0ZWN0IGNvbm5lY3Rpb24gYW5kCj4g PiA+IGRpc2Nvbm5lY3Rpb24sIHdpbGwgbm90IGJlIHBvc3NpYmxlIHRvIHN1cHBvcnQgdGhyb3Vn aCB0aGlzIG1vZGVsLgo+ID4gPiAKPiA+ID4gLSBJdCByZXF1aXJlcyBldmVyeSBicmlkZ2UgZHJp dmVyIHRvIGltcGxlbWVudCBzaW1pbGFyIGNvbm5lY3Rvcgo+ID4gPiBoYW5kbGluZyBjb2RlLCBy ZXN1bHRpbmcgaW4gY29kZSBkdXBsaWNhdGlvbi4KPiA+ID4gCj4gPiA+IC0gSXQgYXNzdW1lcyB0 aGF0IGEgYnJpZGdlIHdpbGwgZWl0aGVyIGJlIHdpcmVkIHRvIGEgY29ubmVjdG9yIG9yIHRvCj4g PiA+IGFub3RoZXIgYnJpZGdlLCBidXQgZG9lc24ndCBzdXBwb3J0IGJyaWRnZXMgdGhhdCBjYW4g YmUgdXNlZCBpbiBib3RoCj4gPiA+IHBvc2l0aW9ucyB2ZXJ5IHdlbGwgKGFsdGhvdWdoIHRoZXJl IGlzIHNvbWUgYWQtaG9jIHN1cHBvcnQgZm9yIHRoaXMgaW4KPiA+ID4gdGhlIGFuYWxvZ2l4X2Rw IGJyaWRnZSBkcml2ZXIpLgo+ID4gPiAKPiA+ID4gSW4gb3JkZXIgdG8gc29sdmUgdGhlc2UgaXNz dWVzLCBvd25lcnNoaXAgb2YgdGhlIGNvbm5lY3RvciBuZWVkcyB0byBiZQo+ID4gPiBtb3ZlZCB0 byB0aGUgZGlzcGxheSBjb250cm9sbGVyIGRyaXZlci4KPiA+ID4gCj4gPiA+IFRvIGF2b2lkIGNv ZGUgZHVwbGljYXRpb24gaW4gZGlzcGxheSBjb250cm9sbGVyIGRyaXZlcnMsIGFkZCBhIG5ldwo+ ID4gPiBoZWxwZXIgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgYSBEUk0gY29ubmVjdG9yIGJhY2tlZCBi eSBhIGNoYWluIG9mCj4gPiA+IGJyaWRnZXMuIEFsbCBjb25uZWN0b3Igb3BlcmF0aW9ucyBhcmUg ZGVsZWdhdGluZyB0byB0aGUgYXBwcm9wcmlhdGUKPiA+ID4gYnJpZGdlIGluIHRoZSBjaGFpbi4K PiA+ID4gCj4gPiA+IFNpZ25lZC1vZmYtYnk6IExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGlu Y2hhcnRAaWRlYXNvbmJvYXJkLmNvbT4KPiA+ID4gLS0tCj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0v TWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgMyArLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2Ry bV9icmlkZ2VfY29ubmVjdG9yLmMgfCAzODUgKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4g PiAgaW5jbHVkZS9kcm0vZHJtX2JyaWRnZV9jb25uZWN0b3IuaCAgICAgfCAgMTggKysKPiA+ID4g IDMgZmlsZXMgY2hhbmdlZCwgNDA1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiA+ID4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZHJtX2JyaWRnZV9jb25uZWN0b3Iu Ywo+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvZHJtL2RybV9icmlkZ2VfY29ubmVj dG9yLmgKPiA+ID4gCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUg Yi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiA+ID4gaW5kZXggOWYwZDJlZTM1Nzk0Li4xYjc0 NjUzYzlkYjkgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ID4g PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiA+ID4gQEAgLTM3LDcgKzM3LDggQEAg ZHJtX3ZyYW1faGVscGVyLXkgOj0gZHJtX2dlbV92cmFtX2hlbHBlci5vIFwKPiA+ID4gIAkJICAg ICBkcm1fdnJhbV9tbV9oZWxwZXIubwo+ID4gPiAgb2JqLSQoQ09ORklHX0RSTV9WUkFNX0hFTFBF UikgKz0gZHJtX3ZyYW1faGVscGVyLm8KPiA+ID4gIAo+ID4gPiAtZHJtX2ttc19oZWxwZXIteSA6 PSBkcm1fY3J0Y19oZWxwZXIubyBkcm1fZHBfaGVscGVyLm8gZHJtX2RzYy5vIGRybV9wcm9iZV9o ZWxwZXIubyBcCj4gPiA+ICtkcm1fa21zX2hlbHBlci15IDo9IGRybV9icmlkZ2VfY29ubmVjdG9y Lm8gZHJtX2NydGNfaGVscGVyLm8gZHJtX2RwX2hlbHBlci5vIFwKPiA+ID4gKwkJZHJtX2RzYy5v IGRybV9wcm9iZV9oZWxwZXIubyBcCj4gPiA+ICAJCWRybV9wbGFuZV9oZWxwZXIubyBkcm1fZHBf bXN0X3RvcG9sb2d5Lm8gZHJtX2F0b21pY19oZWxwZXIubyBcCj4gPiA+ICAJCWRybV9rbXNfaGVs cGVyX2NvbW1vbi5vIGRybV9kcF9kdWFsX21vZGVfaGVscGVyLm8gXAo+ID4gPiAgCQlkcm1fc2lt cGxlX2ttc19oZWxwZXIubyBkcm1fbW9kZXNldF9oZWxwZXIubyBcCj4gPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vZHJtX2JyaWRnZV9jb25uZWN0b3IuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fYnJpZGdlX2Nvbm5lY3Rvci5jCj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiA+ IGluZGV4IDAwMDAwMDAwMDAwMC4uMDlmMmQ2YmZiNTYxCj4gPiA+IC0tLSAvZGV2L251bGwKPiA+ ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9icmlkZ2VfY29ubmVjdG9yLmMKPiA+ID4gQEAg LTAsMCArMSwzODUgQEAKPiA+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w Kwo+ID4gPiArLyoKPiA+ID4gKyAqIENvcHlyaWdodCAoQykgMjAxOSBMYXVyZW50IFBpbmNoYXJ0 IDxsYXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+Cj4gPiA+ICsgKi8KPiA+ID4gKwo+ ID4gPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPgo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiA+ID4gKwo+ID4gPiArI2lu Y2x1ZGUgPGRybS9kcm1fYXRvbWljX3N0YXRlX2hlbHBlci5oPgo+ID4gPiArI2luY2x1ZGUgPGRy bS9kcm1fYnJpZGdlLmg+Cj4gPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9icmlkZ2VfY29ubmVjdG9y Lmg+Cj4gPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4KPiA+ID4gKyNpbmNsdWRl IDxkcm0vZHJtX2RldmljZS5oPgo+ID4gPiArI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgo+ID4g PiArI2luY2x1ZGUgPGRybS9kcm1fbW9kZXNldF9oZWxwZXJfdnRhYmxlcy5oPgo+ID4gPiArI2lu Y2x1ZGUgPGRybS9kcm1fcHJvYmVfaGVscGVyLmg+Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiAr ICogRE9DOiBvdmVydmlldwo+ID4gPiArICoKPiA+ID4gKyAqIFRoZSBEUk0gYnJpZGdlIGNvbm5l Y3RvciBoZWxwZXIgb2JqZWN0IHByb3ZpZGVzIGEgRFJNIGNvbm5lY3Rvcgo+ID4gPiArICogaW1w bGVtZW50YXRpb24gdGhhdCB3cmFwcyBhIGNoYWluIG9mICZzdHJ1Y3QgZHJtX2JyaWRnZS4gVGhl IGNvbm5lY3Rvcgo+ID4gPiArICogb3BlcmF0aW9ucyBhcmUgZnVsbHkgaW1wbGVtZW50ZWQgYmFz ZWQgb24gdGhlIG9wZXJhdGlvbnMgb2YgdGhlIGJyaWRnZXMgaW4KPiA+ID4gKyAqIHRoZSBjaGFp biwgYW5kIGRvbid0IHJlcXVpcmUgYW55IGludGVydmVudGlvbiBmcm9tIHRoZSBkaXNwbGF5IGNv bnRyb2xsZXIKPiA+ID4gKyAqIGRyaXZlciBhdCBydW50aW1lLgo+ID4gPiArICoKPiA+ID4gKyAq IFRvIHVzZSB0aGUgaGVscGVyLCBkaXNwbGF5IGNvbnRyb2xsZXIgZHJpdmVycyBjcmVhdGUgYSBi cmlkZ2UgY29ubmVjdG9yIHdpdGgKPiA+ID4gKyAqIGEgY2FsbCB0byBkcm1fYnJpZGdlX2Nvbm5l Y3Rvcl9pbml0KCkuIFRoaXMgYXNzb2NpYXRlcyB0aGUgbmV3bHkgY3JlYXRlZAo+ID4gPiArICog Y29ubmVjdG9yIHdpdGggdGhlIGNoYWluIG9mIGJyaWRnZXMgcGFzc2VkIHRvIHRoZSBmdW5jdGlv biBhbmQgcmVnaXN0ZXJzIGl0Cj4gPiA+ICsgKiB3aXRoIHRoZSBEUk0gZGV2aWNlLiBBdCB0aGF0 IHBvaW50IHRoZSBjb25uZWN0b3IgYmVjb21lcyBmdWxseSB1c2FibGUsIG5vCj4gPiA+ICsgKiBm dXJ0aGVyIG9wZXJhdGlvbiBpcyBuZWVkZWQuCj4gPiA+ICsgKgo+ID4gPiArICogVGhlIERSTSBi cmlkZ2UgY29ubmVjdG9yIG9wZXJhdGlvbnMgYXJlIGltcGxlbWVudGVkIGJhc2VkIG9uIHRoZSBv cGVyYXRpb25zCj4gPiA+ICsgKiBwcm92aWRlZCBieSB0aGUgYnJpZGdlcyBpbiB0aGUgY2hhaW4u IEVhY2ggY29ubmVjdG9yIG9wZXJhdGlvbiBpcyBkZWxlZ2F0ZWQKPiA+ID4gKyAqIHRvIHRoZSBi cmlkZ2UgY2xvc2VzdCB0byB0aGUgY29ubmVjdG9yIChhdCB0aGUgZW5kIG9mIHRoZSBjaGFpbikg dGhhdAo+ID4gPiArICogcHJvdmlkZXMgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHkuCj4gPiA+ ICsgKgo+ID4gPiArICogVG8gbWFrZSB1c2Ugb2YgdGhpcyBoZWxwZXIsIGFsbCBicmlkZ2VzIGlu IHRoZSBjaGFpbiBzaGFsbCByZXBvcnQgYnJpZGdlCj4gPiA+ICsgKiBvcGVyYXRpb24gZmxhZ3Mg KCZkcm1fYnJpZGdlLT5vcHMpIGFuZCBicmlkZ2Ugb3V0cHV0IHR5cGUKPiA+ID4gKyAqICgmZHJt X2JyaWRnZS0+dHlwZSksIGFuZCBub25lIG9mIHRoZW0gbWF5IGNyZWF0ZSBhIERSTSBjb25uZWN0 b3IgZGlyZWN0bHkuCj4gPiA+ICsgKi8KPiA+ID4gKwo+ID4gPiArLyoqCj4gPiA+ICsgKiBzdHJ1 Y3QgZHJtX2JyaWRnZV9jb25uZWN0b3IgLSBBIGNvbm5lY3RvciBiYWNrZWQgYnkgYSBjaGFpbiBv ZiBicmlkZ2VzCj4gPiA+ICsgKi8KPiA+ID4gK3N0cnVjdCBkcm1fYnJpZGdlX2Nvbm5lY3RvciB7 Cj4gPiA+ICsJLyoqCj4gPiA+ICsJICogQGJhc2U6IFRoZSBiYXNlIERSTSBjb25uZWN0b3IKPiA+ ID4gKwkgKi8KPiA+ID4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBiYXNlOwo+ID4gPiArCS8qKgo+ ID4gPiArCSAqIEBicmlkZ2U6Cj4gPiA+ICsJICoKPiA+ID4gKwkgKiBUaGUgZmlyc3QgYnJpZGdl IGluIHRoZSBjaGFpbiAoY29ubmVjdGVkIHRvIHRoZSBvdXRwdXQgb2YgdGhlIENSVEMpLgo+ID4g PiArCSAqLwo+ID4gPiArCXN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2U7Cj4gPiA+ICsJLyoqCj4g PiA+ICsJICogQGJyaWRnZV9lZGlkOgo+ID4gPiArCSAqCj4gPiA+ICsJICogVGhlIGxhc3QgYnJp ZGdlIGluIHRoZSBjaGFpbiAoY2xvc2VzdCB0byB0aGUgY29ubmVjdG9yKSB0aGF0IHByb3ZpZGVz Cj4gPiA+ICsJICogRURJRCByZWFkIHN1cHBvcnQsIGlmIGFueSAoc2VlICZEUk1fQlJJREdFX09Q X0VESUQpLgo+ID4gPiArCSAqLwo+ID4gPiArCXN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2VfZWRp ZDsKPiA+ID4gKwkvKioKPiA+ID4gKwkgKiBAYnJpZGdlX2hwZDoKPiA+ID4gKwkgKgo+ID4gPiAr CSAqIFRoZSBsYXN0IGJyaWRnZSBpbiB0aGUgY2hhaW4gKGNsb3Nlc3QgdG8gdGhlIGNvbm5lY3Rv cikgdGhhdCBwcm92aWRlcwo+ID4gPiArCSAqIGhvdC1wbHVnIGRldGVjdGlvbiBub3RpZmljYXRp b24sIGlmIGFueSAoc2VlICZEUk1fQlJJREdFX09QX0hQRCkuCj4gPiA+ICsJICovCj4gPiA+ICsJ c3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZV9ocGQ7Cj4gPiA+ICsJLyoqCj4gPiA+ICsJICogQGJy aWRnZV9kZXRlY3Q6Cj4gPiA+ICsJICoKPiA+ID4gKwkgKiBUaGUgbGFzdCBicmlkZ2UgaW4gdGhl IGNoYWluIChjbG9zZXN0IHRvIHRoZSBjb25uZWN0b3IpIHRoYXQgcHJvdmlkZXMKPiA+ID4gKwkg KiBjb25uZWN0b3IgZGV0ZWN0aW9uLCBpZiBhbnkgKHNlZSAmRFJNX0JSSURHRV9PUF9ERVRFQ1Qp Lgo+ID4gPiArCSAqLwo+ID4gPiArCXN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2VfZGV0ZWN0Owo+ ID4gPiArCS8qKgo+ID4gPiArCSAqIEBicmlkZ2VfZGV0ZWN0Ogo+ID4gPiArCSAqCj4gPiA+ICsJ ICogVGhlIGxhc3QgYnJpZGdlIGluIHRoZSBjaGFpbiAoY2xvc2VzdCB0byB0aGUgY29ubmVjdG9y KSB0aGF0IHByb3ZpZGVzCj4gPiA+ICsJICogY29ubmVjdG9yIG1vZGVzIGRldGVjdGlvbiwgaWYg YW55IChzZWUgJkRSTV9CUklER0VfT1BfTU9ERVMpLgo+ID4gPiArCSAqLwo+ID4gPiArCXN0cnVj dCBkcm1fYnJpZGdlICpicmlkZ2VfbW9kZXM7Cj4gPiA+ICsJLyoqCj4gPiA+ICsJICogQGhkbWlf bW9kZTogVmFsaWQgZm9yIEhETUkgY29ubmVjdG9ycyBvbmx5Lgo+ID4gPiArCSAqLwo+ID4gPiAr CWJvb2wgaGRtaV9tb2RlOwo+ID4gCj4gPiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSBpbiBkcm1f ZGlzcGxheV9pbmZvIHNvbWV3aGVyZSwgbm90IGhlcmU/Cj4gCj4gWWVzLCBhbmQgaXQncyB1bnVz ZWQgaW4gdGhpcyBwYXRjaCwgSSd2ZSBqdXN0IG5vdGljZWQgdGhhdC4gRmllbGQKPiBkcm9wcGVk Lgo+IAo+ID4gV3J0IHRoZSBvdmVyYWxsIGRlc2lnbiAuLi4gd2h5IGRvIHdlIG5lZWQgYSBuZXcg c3RydWN0PyBJZiB3ZSBhc3N1bWUgKGF0Cj4gPiBsZWFzdCBmb3Igbm93KSB0aGF0IHdlIG9ubHkg YWxsb3cgb25lIGVuY29kZXIgZm9yIHN1Y2ggYSBicmlkZ2UgY2hhaW4KPiA+IChjdXJyZW50bHkg c3RpbGwgdHJ1ZSksIHRoZW4geW91IGNhbiBhbHdheXMgZ28gZnJvbSB0aGUgY29ubmVjdG9yIHRv IGl0J3MKPiA+IG9ubHkgcG9zc2liZWwgZW5jb2Rlci4gQW5kIGZyb20gdGhlcmUgdG8gdGhlIGJy aWRnZSBjaGFpbi4KPiA+IAo+ID4gRnVydGhlcm1vcmUgYWxsIHRoZSBzcGVjaWFsIGJyaWRnZSBw b2ludGVycyBoZXJlIGNhbiBqdXN0IGJlIGZvdW5kIGF0Cj4gPiBydW50aW1lIGJ5IHdhbGtpbmcg dGhlIGJyaWRnZSBsaW5rcy4gQW5kIG5vbmUgb2YgdGhlc2UgcGF0aHMgYXJlIGhvdAo+ID4gZW5v dWdoIHRvIG1ha2UgdGhpcyBhIHByb2JsZW0uCj4gPiAKPiA+IFdpdGggdGhhdCB5b3VyIGRybV9i cmlkZ2VfY29ubmVjdG9yIGhlcmUgd291bGQgYmVjb21lIGp1c3QgYSBwaWxlIG9mCj4gPiBmdW5j dGlvbnMgYXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgZm9yIGNvbm5lY3RvcnMuIE1ha2luZyBp dCBtb3JlCj4gPiBtb2R1bGFyIGFuZCBtb3JlIGhlbHBlci15IGFuZCBlYXNpZXIgdG8gdHJhbnNp dGlvbiBncmFkdWFsbHkuCj4gCj4gVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIHN0cnVjdHVyZSBp cyBpbmRlZWQgdG8gY2FjaGUgdGhlIGJyaWRnZQo+IHBvaW50ZXJzLCB3aGljaCBjb3VsZCBiZSBy ZWNhbGN1bGF0ZWQgYXQgcnVudGltZS4gSSBhZ3JlZSB0aGVyZSdzIG5vCj4gcmVhbCBob3QgcGF0 aCwgYnV0IGNhY2hpbmcgdGhlbSBzdGlsbCBmZWVscyBuaWNlIDotKQoKV2UndmUgdHJlYXRlZCBh bnl0aGluZyBpbiBhdG9taWMgYXMgbm90IGEgaG90LXBhdGgsIHByZWZlcnJpbmcgY2xlYW4gY29k ZQpvdmVyIGZhc3QuIEV4Y2VwdCBpZiBzb21lb25lIGNhbiBwcm9vZiBvdGhlcndpc2UsIHdoaWNo IHZlcnkgZmV3IGV2ZXIKYm90aGVyIHRvIGV2ZW4gdHJ5IDotKQoKPiBIb3cgZG8geW91IGdvIGZy b20gdGhlIGNvbm5lY3RvciB0byBpdHMgZW5jb2RlciB0aG91Z2ggPyBUaGUKPiBkcm1fY29ubmVj dG9yIGVuY29kZXIgZmllbGQgaXMgdmFsaWQgZm9yIG5vbi1hdG9taWMgZHJpdmVycyBvbmx5LCBh bmQKPiB0aGUgZW5jb2Rlcl9pZHMgZmllbGQgaXMgbWFya2VkIGFzIG5vdCB0byBiZSBhY2Nlc3Nl ZCBkaXJlY3RseS4gU2hvdWxkIEkKPiB1c2UgZHJtX2Nvbm5lY3Rvcl9mb3JfZWFjaF9wb3NzaWJs ZV9lbmNvZGVyKCkgYW5kIHBpY2sgdGhlIGZpcnN0IGVuY29kZXIKPiA/CgpwaWNrX3NpbmdsZV9l bmNvZGVyX2Zvcl9jb25uZWN0b3IuIFdhcyBvbmNlIGV4cG9ydGVkIGV2ZW4gLi4uIEkgdGhpbmsg Zm9yCmJyaWRnZSB3ZSBjYW4ganVzdCBoYXJkLWNvZGUgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGVy ZSdzIG9ubHkgb25lCmNvbm5lY3RvciBmb3IgYSBicmlkZ2UgY2hhaW4uCgpGb3IgbW9yZSBmYW5j eSB0b3BvbG9naWVzIHRoaXMgb2ZjIGFsbCBicmVha3MgZG93biwgYnV0IG1heWJlIHdlIGNhbgpw b3N0cG9uZSBzb2x2aW5nIHRoYXQgcHJvYmxlbSAuLi4KCj4gCj4gPiA+ICt9Owo+ID4gPiArCj4g PiA+ICsjZGVmaW5lIHRvX2RybV9icmlkZ2VfY29ubmVjdG9yKHgpIFwKPiA+ID4gKwljb250YWlu ZXJfb2YoeCwgc3RydWN0IGRybV9icmlkZ2VfY29ubmVjdG9yLCBiYXNlKQo+ID4gPiArCj4gPiA+ ICsvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gPiArICogQnJpZGdlIENvbm5lY3RvciBIb3Qt UGx1ZyBIYW5kbGluZwo+ID4gPiArICovCj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB2b2lkIGRybV9i cmlkZ2VfY29ubmVjdG9yX2hwZF9ub3RpZnkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciwKPiA+ID4gKwkJCQkJICAgIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzKQo+ID4g PiArewo+ID4gPiArCXN0cnVjdCBkcm1fYnJpZGdlX2Nvbm5lY3RvciAqYnJpZGdlX2Nvbm5lY3Rv ciA9Cj4gPiA+ICsJCXRvX2RybV9icmlkZ2VfY29ubmVjdG9yKGNvbm5lY3Rvcik7Cj4gPiA+ICsJ c3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZTsKPiA+ID4gKwo+ID4gPiArCWlmIChzdGF0dXMgIT0g Y29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQpCj4gPiA+ICsJCXJldHVybjsKPiA+ID4gKwo+ ID4gPiArCS8qCj4gPiA+ICsJICogTm90aWZ5IGFsbCBicmlkZ2VzIGluIHRoZSBwaXBlbGluZSBv ZiBkaXNjb25uZWN0aW9uLiBUaGlzIGlzIHJlcXVpcmVkCj4gPiA+ICsJICogdG8gbGV0IHRoZSBI RE1JIGVuY29kZXJzIHJlc2V0IHRoZWlyIGludGVybmFsIHN0YXRlIHJlbGF0ZWQgdG8KPiA+ID4g KwkgKiBjb25uZWN0aW9uIHN0YXR1cywgc3VjaCBhcyB0aGUgQ0VDIGFkZHJlc3MuCj4gPiA+ICsJ ICovCj4gPiA+ICsJZm9yIChicmlkZ2UgPSBicmlkZ2VfY29ubmVjdG9yLT5icmlkZ2U7IGJyaWRn ZTsgYnJpZGdlID0gYnJpZGdlLT5uZXh0KSB7Cj4gPiA+ICsJCWlmIChicmlkZ2UtPmZ1bmNzLT5s b3N0X2hvdHBsdWcpCj4gPiA+ICsJCQlicmlkZ2UtPmZ1bmNzLT5sb3N0X2hvdHBsdWcoYnJpZGdl KTsKPiA+IAo+ID4gU28gbG9va2luZyBhdCB0aGlzIHlvdSBwcmV0dHkgbXVjaCBpbXBsZW1lbnQg bXkgaWRlYSBmb3IgaGRwIGhhbmRsaW5nCj4gPiBhbHJlYWR5LCBleGNlcHQgeW91J3JlIGNhbGxp bmcgaXQgLT5sb3N0X2hvdHBsdWcgYW5kIG5vdCAtPm5vdGlmeV9ocGQuCj4gCj4gUmVuYW1lZCBh bHJlYWR5IGluIG15IHByaXZhdGUgdHJlZSwgd2lsbCBiZSBpbiB2MiA6LSkKPiAKPiA+IFBsdXMg eW91IHJlcXVpcmUgc29tZSBjYWxsYmFjayByZWdpc3RyYXRpb24uIEVzc2VudGlhbGx5IG15IGRl c2lnbiAodGhhdCBJCj4gPiBleHBsYWluZWQgaW4gbXkgcmVwbHkgdG8geW91ciBicmlkZ2UgcGF0 Y2gpIHdvdWxkIGp1c3QgbWFrZQo+ID4gZHJtX2JyaWRnZV9jb25uZWN0b3JfaHBkX2NiKCkgdGhl IG9uZSBhbmQgb25seSBocGRfY2IsIGFuZCBwdW50IGFsbCBocGQKPiA+IGhhbmRsaW5nIHRvIGJy aWRnZSBkcml2ZXJzIGxpa2UgeW91IGRvIGhlcmUuCj4gPiAKPiA+IE9mYyB0aGF0IGxlYXZlcyB1 cyB3aXRoICJ3aG8ncyBjYWxsaW5nIGRybV9rbXNfaGVscGVyX2hvdHBsdWdfZXZlbnQoKSIsCj4g PiBhbmQgdGhhdCdzIHdoYXQgdGhlIG5ldyBoZHBfbm90aWZ5IG9uIHRoZSBlbmNvZGVyIGFuZCB0 aGUgZ2xvYmFsCj4gPiBkcm1fbW9kZV9jb25maWdfaGVscGVyX2Z1bmNzIHdvdWxkIGJlIGZvci4K PiAKPiBMZXQncyBkaXNjdXNzIHRoYXQgaW4gdGhlIHJlcGxpZXMgdG8gdGhlIG90aGVyIHBhdGNo LCBhcyB0aGUgZGlzY3Vzc2lvbgo+IGlzIGFscmVhZHkgbG9uZ2VyIHRoZXJlLiBJJ20gbm90IG9w cG9zZWQgdG8geW91ciBwcm9wb3NhbCwgYnV0IEkndmUKPiBhc2tlZCBhIGZldyBxdWVzdGlvbnMg dG8gY2xhcmlmeSBpdC4KPiAKPiA+ID4gKwl9Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRp YyB2b2lkIGRybV9icmlkZ2VfY29ubmVjdG9yX2hwZF9jYih2b2lkICpjYl9kYXRhLAo+ID4gPiAr CQkJCQllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cykKPiA+ID4gK3sKPiA+ID4gKwlz dHJ1Y3QgZHJtX2JyaWRnZV9jb25uZWN0b3IgKmRybV9icmlkZ2VfY29ubmVjdG9yID0gY2JfZGF0 YTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gJmRybV9icmlkZ2Vf Y29ubmVjdG9yLT5iYXNlOwo+ID4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0 b3ItPmRldjsKPiA+ID4gKwllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIG9sZF9zdGF0dXM7Cj4g PiA+ICsKPiA+ID4gKwltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKPiA+ID4g KwlvbGRfc3RhdHVzID0gY29ubmVjdG9yLT5zdGF0dXM7Cj4gPiA+ICsJY29ubmVjdG9yLT5zdGF0 dXMgPSBzdGF0dXM7Cj4gPiA+ICsJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4 KTsKPiA+ID4gKwo+ID4gPiArCWlmIChvbGRfc3RhdHVzID09IHN0YXR1cykKPiA+ID4gKwkJcmV0 dXJuOwo+ID4gPiArCj4gPiA+ICsJZHJtX2JyaWRnZV9jb25uZWN0b3JfaHBkX25vdGlmeShjb25u ZWN0b3IsIHN0YXR1cyk7Cj4gPiA+ICsKPiA+ID4gKwlkcm1fa21zX2hlbHBlcl9ob3RwbHVnX2V2 ZW50KGRldik7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICogZHJtX2JyaWRn ZV9jb25uZWN0b3JfZW5hYmxlX2hwZCAtIEVuYWJsZSBob3QtcGx1ZyBkZXRlY3Rpb24gZm9yIHRo ZSBjb25uZWN0b3IKPiA+ID4gKyAqIEBjb25uZWN0b3I6IFRoZSBEUk0gYnJpZGdlIGNvbm5lY3Rv cgo+ID4gPiArICoKPiA+ID4gKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyBob3QtcGx1ZyBkZXRl Y3Rpb24gZm9yIHRoZSBnaXZlbiBicmlkZ2UgY29ubmVjdG9yLgo+ID4gPiArICogVGhpcyBpcyB0 eXBpY2FsbHkgdXNlZCBieSBkaXNwbGF5IGRyaXZlcnMgaW4gdGhlaXIgcmVzdW1lIGhhbmRsZXIu Cj4gPiA+ICsgKi8KPiA+ID4gK3ZvaWQgZHJtX2JyaWRnZV9jb25uZWN0b3JfZW5hYmxlX2hwZChz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBk cm1fYnJpZGdlX2Nvbm5lY3RvciAqYnJpZGdlX2Nvbm5lY3RvciA9Cj4gPiA+ICsJCXRvX2RybV9i cmlkZ2VfY29ubmVjdG9yKGNvbm5lY3Rvcik7Cj4gPiA+ICsJc3RydWN0IGRybV9icmlkZ2UgKmhw ZCA9IGJyaWRnZV9jb25uZWN0b3ItPmJyaWRnZV9ocGQ7Cj4gPiA+ICsKPiA+ID4gKwlpZiAoaHBk KQo+ID4gPiArCQlkcm1fYnJpZGdlX2hwZF9lbmFibGUoaHBkLCBkcm1fYnJpZGdlX2Nvbm5lY3Rv cl9ocGRfY2IsCj4gPiA+ICsJCQkJICAgICAgYnJpZGdlX2Nvbm5lY3Rvcik7Cj4gPiA+ICt9Cj4g PiA+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fYnJpZGdlX2Nvbm5lY3Rvcl9lbmFibGVfaHBkKTsK PiA+ID4gKwo+ID4gPiArLyoqCj4gPiA+ICsgKiBkcm1fYnJpZGdlX2Nvbm5lY3Rvcl9kaXNhYmxl X2hwZCAtIERpc2FibGUgaG90LXBsdWcgZGV0ZWN0aW9uIGZvciB0aGUKPiA+ID4gKyAqIGNvbm5l Y3Rvcgo+ID4gPiArICogQGNvbm5lY3RvcjogVGhlIERSTSBicmlkZ2UgY29ubmVjdG9yCj4gPiA+ ICsgKgo+ID4gPiArICogVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyBob3QtcGx1ZyBkZXRlY3Rpb24g Zm9yIHRoZSBnaXZlbiBicmlkZ2UgY29ubmVjdG9yLgo+ID4gPiArICogVGhpcyBpcyB0eXBpY2Fs bHkgdXNlZCBieSBkaXNwbGF5IGRyaXZlcnMgaW4gdGhlaXIgc3VzcGVuZCBoYW5kbGVyLgo+ID4g PiArICovCj4gPiA+ICt2b2lkIGRybV9icmlkZ2VfY29ubmVjdG9yX2Rpc2FibGVfaHBkKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGRybV9i cmlkZ2VfY29ubmVjdG9yICpicmlkZ2VfY29ubmVjdG9yID0KPiA+ID4gKwkJdG9fZHJtX2JyaWRn ZV9jb25uZWN0b3IoY29ubmVjdG9yKTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqaHBkID0g YnJpZGdlX2Nvbm5lY3Rvci0+YnJpZGdlX2hwZDsKPiA+ID4gKwo+ID4gPiArCWlmIChocGQpCj4g PiA+ICsJCWRybV9icmlkZ2VfaHBkX2Rpc2FibGUoaHBkKTsKPiA+ID4gK30KPiA+ID4gK0VYUE9S VF9TWU1CT0xfR1BMKGRybV9icmlkZ2VfY29ubmVjdG9yX2Rpc2FibGVfaHBkKTsKPiA+ID4gKwo+ ID4gPiArLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ID4gKyAqIEJyaWRnZSBDb25uZWN0b3Ig RnVuY3Rpb25zCj4gPiA+ICsgKi8KPiA+ID4gKwo+ID4gPiArc3RhdGljIGVudW0gZHJtX2Nvbm5l Y3Rvcl9zdGF0dXMKPiA+ID4gK2RybV9icmlkZ2VfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQo+ID4gPiArewo+ID4gPiArCXN0cnVj dCBkcm1fYnJpZGdlX2Nvbm5lY3RvciAqYnJpZGdlX2Nvbm5lY3RvciA9Cj4gPiA+ICsJCXRvX2Ry bV9icmlkZ2VfY29ubmVjdG9yKGNvbm5lY3Rvcik7Cj4gPiA+ICsJc3RydWN0IGRybV9icmlkZ2Ug KmRldGVjdCA9IGJyaWRnZV9jb25uZWN0b3ItPmJyaWRnZV9kZXRlY3Q7Cj4gPiA+ICsJZW51bSBk cm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXM7Cj4gPiA+ICsKPiA+ID4gKwlpZiAoZGV0ZWN0KSB7 Cj4gPiA+ICsJCXN0YXR1cyA9IGRldGVjdC0+ZnVuY3MtPmRldGVjdChkZXRlY3QpOwo+ID4gPiAr Cj4gPiA+ICsJCWRybV9icmlkZ2VfY29ubmVjdG9yX2hwZF9ub3RpZnkoY29ubmVjdG9yLCBzdGF0 dXMpOwo+ID4gPiArCX0gZWxzZSB7Cj4gPiA+ICsJCXN3aXRjaCAoY29ubmVjdG9yLT5jb25uZWN0 b3JfdHlwZSkgewo+ID4gPiArCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EUEk6Cj4gPiA+ICsJ CWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0xWRFM6Cj4gPiA+ICsJCWNhc2UgRFJNX01PREVfQ09O TkVDVE9SX0RTSToKPiA+ID4gKwkJCXN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVk Owo+ID4gPiArCQkJYnJlYWs7Cj4gPiA+ICsJCWRlZmF1bHQ6Cj4gPiA+ICsJCQlzdGF0dXMgPSBj b25uZWN0b3Jfc3RhdHVzX3Vua25vd247Cj4gPiA+ICsJCQlicmVhazsKPiA+ID4gKwkJfQo+ID4g PiArCX0KPiA+ID4gKwo+ID4gPiArCXJldHVybiBzdGF0dXM7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ ID4gK3N0YXRpYyB2b2lkIGRybV9icmlkZ2VfY29ubmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvcikKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX2JyaWRnZV9j b25uZWN0b3IgKmJyaWRnZV9jb25uZWN0b3IgPQo+ID4gPiArCQl0b19kcm1fYnJpZGdlX2Nvbm5l Y3Rvcihjb25uZWN0b3IpOwo+ID4gPiArCj4gPiA+ICsJaWYgKGJyaWRnZV9jb25uZWN0b3ItPmJy aWRnZV9ocGQpIHsKPiA+ID4gKwkJc3RydWN0IGRybV9icmlkZ2UgKmhwZCA9IGJyaWRnZV9jb25u ZWN0b3ItPmJyaWRnZV9ocGQ7Cj4gPiA+ICsKPiA+ID4gKwkJZHJtX2JyaWRnZV9ocGRfZGlzYWJs ZShocGQpOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rl cihjb25uZWN0b3IpOwo+ID4gPiArCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwo+ ID4gPiArCj4gPiA+ICsJa2ZyZWUoYnJpZGdlX2Nvbm5lY3Rvcik7Cj4gPiA+ICt9Cj4gPiA+ICsK PiA+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBkcm1fYnJpZGdl X2Nvbm5lY3Rvcl9mdW5jcyA9IHsKPiA+ID4gKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9j b25uZWN0b3JfcmVzZXQsCj4gPiA+ICsJLmRldGVjdCA9IGRybV9icmlkZ2VfY29ubmVjdG9yX2Rl dGVjdCwKPiA+IAo+ID4gRm9yIHRoYXQgc21vb2h0IGhlbHBlciBsaWJyYXJ5IGZlZWxpbmcgSSB0 aGluayB3ZSBzaG91bGQgZXhwb3J0IF9kZXRlY3QKPiA+IGFuZCBnZXRfbW9kZXMgYXQgbGVhc3Qu Cj4gCj4gQWxyZWFkeSwgZXZlbiB3aXRob3V0IGEgdXNlciA/IE9yIHNob3VsZCB3ZSB3YWl0IHVu dGlsIHNvbWVvbmUgbmVlZHMKPiB0aGVtID8KCkkgZmlndXJlZCBtb3N0bHkgdG8gaGF2ZSBhbiBl eGN1c2UgZm9yIHRoZSBrZXJuZWxkb2MgLi4uCgpDaGVlcnMsIERhbmllbAoKPiA+ID4gKwkuZmls bF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKPiA+ID4g KwkuZGVzdHJveSA9IGRybV9icmlkZ2VfY29ubmVjdG9yX2Rlc3Ryb3ksCj4gPiA+ICsJLmF0b21p Y19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRl X3N0YXRlLAo+ID4gPiArCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVy X2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAo+ID4gPiArfTsKPiA+ID4gKwo+ID4gPiArLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KPiA+ID4gKyAqIEJyaWRnZSBDb25uZWN0b3IgSGVscGVyIEZ1bmN0 aW9ucwo+ID4gPiArICovCj4gPiA+ICsKPiA+ID4gKyNkZWZpbmUgTUFYX0VESUQgIDUxMgo+ID4g PiArCj4gPiA+ICtzdGF0aWMgaW50IGRybV9icmlkZ2VfY29ubmVjdG9yX2dldF9tb2Rlc19lZGlk KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiA+ICsJCQkJCSAgICAgICBzdHJ1 Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fYnJpZGdl X2Nvbm5lY3RvciAqYnJpZGdlX2Nvbm5lY3RvciA9Cj4gPiA+ICsJCXRvX2RybV9icmlkZ2VfY29u bmVjdG9yKGNvbm5lY3Rvcik7Cj4gPiA+ICsJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0 dXM7Cj4gPiA+ICsJc3RydWN0IGVkaWQgKmVkaWQ7Cj4gPiA+ICsJaW50IG47Cj4gPiA+ICsKPiA+ ID4gKwlzdGF0dXMgPSBkcm1fYnJpZGdlX2Nvbm5lY3Rvcl9kZXRlY3QoY29ubmVjdG9yLCBmYWxz ZSk7Cj4gPiA+ICsJaWYgKHN0YXR1cyAhPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCkKPiA+ ID4gKwkJZ290byBub19lZGlkOwo+ID4gPiArCj4gPiA+ICsJZWRpZCA9IGJyaWRnZS0+ZnVuY3Mt PmdldF9lZGlkKGJyaWRnZSwgY29ubmVjdG9yKTsKPiA+ID4gKwlpZiAoIWVkaWQgfHwgIWRybV9l ZGlkX2lzX3ZhbGlkKGVkaWQpKSB7Cj4gPiA+ICsJCWtmcmVlKGVkaWQpOwo+ID4gPiArCQlnb3Rv IG5vX2VkaWQ7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJZHJtX2Nvbm5lY3Rvcl91cGRhdGVf ZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsIGVkaWQpOwo+ID4gPiArCW4gPSBkcm1fYWRkX2VkaWRf bW9kZXMoY29ubmVjdG9yLCBlZGlkKTsKPiA+ID4gKwo+ID4gPiArCWJyaWRnZV9jb25uZWN0b3It PmhkbWlfbW9kZSA9IGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKGVkaWQpOwo+ID4gPiArCj4gPiA+ ICsJa2ZyZWUoZWRpZCk7Cj4gPiA+ICsJcmV0dXJuIG47Cj4gPiA+ICsKPiA+ID4gK25vX2VkaWQ6 Cj4gPiA+ICsJZHJtX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsIE5V TEwpOwo+ID4gPiArCXJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgaW50 IGRybV9icmlkZ2VfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fYnJpZGdlX2Nvbm5lY3RvciAqYnJp ZGdlX2Nvbm5lY3RvciA9Cj4gPiA+ICsJCXRvX2RybV9icmlkZ2VfY29ubmVjdG9yKGNvbm5lY3Rv cik7Cj4gPiA+ICsJc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZTsKPiA+ID4gKwo+ID4gPiArCS8q Cj4gPiA+ICsJICogSWYgZGlzcGxheSBleHBvc2VzIEVESUQsIHRoZW4gd2UgcGFyc2UgdGhhdCBp biB0aGUgbm9ybWFsIHdheSB0bwo+ID4gPiArCSAqIGJ1aWxkIHRhYmxlIG9mIHN1cHBvcnRlZCBt b2Rlcy4KPiA+ID4gKwkgKi8KPiA+ID4gKwlicmlkZ2UgPSBicmlkZ2VfY29ubmVjdG9yLT5icmlk Z2VfZWRpZDsKPiA+ID4gKwlpZiAoYnJpZGdlKQo+ID4gPiArCQlyZXR1cm4gZHJtX2JyaWRnZV9j b25uZWN0b3JfZ2V0X21vZGVzX2VkaWQoY29ubmVjdG9yLCBicmlkZ2UpOwo+ID4gPiArCj4gPiA+ ICsJLyoKPiA+ID4gKwkgKiBPdGhlcndpc2UgaWYgdGhlIGRpc3BsYXkgcGlwZWxpbmUgcmVwb3J0 cyBtb2RlcyAoZS5nLiB3aXRoIGEgZml4ZWQKPiA+ID4gKwkgKiByZXNvbHV0aW9uIHBhbmVsIG9y IGFuIGFuYWxvZyBUViBvdXRwdXQpLCBxdWVyeSBpdC4KPiA+ID4gKwkgKi8KPiA+ID4gKwlicmlk Z2UgPSBicmlkZ2VfY29ubmVjdG9yLT5icmlkZ2VfbW9kZXM7Cj4gPiA+ICsJaWYgKGJyaWRnZSkK PiA+ID4gKwkJcmV0dXJuIGJyaWRnZS0+ZnVuY3MtPmdldF9tb2RlcyhicmlkZ2UsIGNvbm5lY3Rv cik7Cj4gPiA+ICsKPiA+ID4gKwkvKgo+ID4gPiArCSAqIFdlIGNhbid0IHJldHJpZXZlIG1vZGVz LCB3aGljaCBjYW4gaGFwcGVuIGZvciBpbnN0YW5jZSBmb3IgYSBEVkkgb3IKPiA+ID4gKwkgKiBW R0Egb3V0cHV0IHdpdGggdGhlIEREQyBidXMgdW5jb25uZWN0ZWQuIFRoZSBLTVMgY29yZSB3aWxs IGFkZCB0aGUKPiA+ID4gKwkgKiBkZWZhdWx0IG1vZGVzLgo+ID4gPiArCSAqLwo+ID4gPiArCXJl dHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9j b25uZWN0b3JfaGVscGVyX2Z1bmNzIGRybV9icmlkZ2VfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9 IHsKPiA+ID4gKwkuZ2V0X21vZGVzID0gZHJtX2JyaWRnZV9jb25uZWN0b3JfZ2V0X21vZGVzLAo+ ID4gPiArCS8qIE5vIG5lZWQgZm9yIC5tb2RlX3ZhbGlkKCksIHRoZSBicmlkZ2VzIGFyZSBjaGVj a2VkIGJ5IHRoZSBjb3JlLiAqLwo+ID4gPiArfTsKPiA+ID4gKwo+ID4gPiArLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KPiA+ID4gKyAqIEJyaWRnZSBDb25uZWN0b3IgSW5pdGlhbGlzYXRpb24KPiA+ ID4gKyAqLwo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIGRybV9icmlkZ2VfY29ubmVjdG9y X2luaXQgLSBJbml0aWFsaXNlIGEgY29ubmVjdG9yIGZvciBhIGNoYWluIG9mIGJyaWRnZXMKPiA+ ID4gKyAqIEBkcm06IHRoZSBEUk0gZGV2aWNlCj4gPiA+ICsgKiBAYnJpZGdlOiB0aGUgYnJpZGdl IGNsb3Nlc3QgdG8gdGhlIENSVEMgb3V0cHV0Cj4gPiA+ICsgKgo+ID4gPiArICogQWxsb2NhdGUs IGluaXRpYWxpc2UgYW5kIHJlZ2lzdGVyIGEgJmRybV9icmlkZ2VfY29ubmVjdG9yIHdpdGggdGhl IEBkcm0KPiA+ID4gKyAqIGRldmljZS4gVGhlIGNvbm5lY3RvciBpcyBhc3NvY2lhdGVkIHdpdGgg YSBjaGFpbiBvZiBicmlkZ2VzIHRoYXQgc3RhcnRzIGF0Cj4gPiA+ICsgKiB0aGUgQ1JUQyBvdXRw dXQgd2l0aCBAYnJpZGdlLiBBbGwgYnJpZGdlcyBpbiB0aGUgY2hhaW4gc2hhbGwgcmVwb3J0IGJy aWRnZQo+ID4gPiArICogb3BlcmF0aW9uIGZsYWdzICgmZHJtX2JyaWRnZS0+b3BzKSBhbmQgYnJp ZGdlIG91dHB1dCB0eXBlCj4gPiA+ICsgKiAoJmRybV9icmlkZ2UtPnR5cGUpLCBhbmQgbm9uZSBv ZiB0aGVtIG1heSBjcmVhdGUgYSBEUk0gY29ubmVjdG9yIGRpcmVjdGx5Lgo+ID4gPiArICoKPiA+ ID4gKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXcgY29ubmVjdG9yIG9uIHN1Y2Nlc3Ms IG9yIGEgbmVnYXRpdmUgZXJyb3IKPiA+ID4gKyAqIHBvaW50ZXIgb3RoZXJ3aXNlLgo+ID4gPiAr ICovCj4gPiA+ICtzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqZHJtX2JyaWRnZV9jb25uZWN0b3JfaW5p dChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+ID4gPiArCQkJCQkJc3RydWN0IGRybV9icmlkZ2Ug KmJyaWRnZSkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX2JyaWRnZV9jb25uZWN0b3IgKmJy aWRnZV9jb25uZWN0b3I7Cj4gPiA+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsK PiA+ID4gKwlpbnQgY29ubmVjdG9yX3R5cGU7Cj4gPiA+ICsKPiA+ID4gKwlicmlkZ2VfY29ubmVj dG9yID0ga3phbGxvYyhzaXplb2YoKmJyaWRnZV9jb25uZWN0b3IpLCBHRlBfS0VSTkVMKTsKPiA+ ID4gKwlpZiAoIWJyaWRnZV9jb25uZWN0b3IpCj4gPiA+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9N RU0pOwo+ID4gPiArCj4gPiA+ICsJYnJpZGdlX2Nvbm5lY3Rvci0+YnJpZGdlID0gYnJpZGdlOwo+ ID4gPiArCj4gPiA+ICsJLyoKPiA+ID4gKwkgKiBJbml0aWFsaXNlIGNvbm5lY3RvciBzdGF0dXMg aGFuZGxpbmcuIEZpcnN0IGxvY2F0ZSB0aGUgZnVydGhlc3QKPiA+ID4gKwkgKiBicmlkZ2VzIGlu IHRoZSBwaXBlbGluZSB0aGF0IHN1cHBvcnQgSFBEIGFuZCBvdXRwdXQgZGV0ZWN0aW9uLiBUaGVu Cj4gPiA+ICsJICogaW5pdGlhbGlzZSB0aGUgY29ubmVjdG9yIHBvbGxpbmcgbW9kZSwgdXNpbmcg SFBEIGlmIGF2YWlsYWJsZSBhbmQKPiA+ID4gKwkgKiBmYWxsaW5nIGJhY2sgdG8gcG9sbGluZyBp ZiBzdXBwb3J0ZWQuIElmIG5laXRoZXIgSFBEIG5vciBvdXRwdXQKPiA+ID4gKwkgKiBkZXRlY3Rp b24gYXJlIGF2YWlsYWJsZSwgd2UgZG9uJ3Qgc3VwcG9ydCBob3RwbHVnIGRldGVjdGlvbiBhdCBh bGwuCj4gPiA+ICsJICovCj4gPiA+ICsJY29ubmVjdG9yX3R5cGUgPSBEUk1fTU9ERV9DT05ORUNU T1JfVW5rbm93bjsKPiA+ID4gKwlmb3IgKCA7IGJyaWRnZTsgYnJpZGdlID0gYnJpZGdlLT5uZXh0 KSB7Cj4gPiA+ICsJCWlmIChicmlkZ2UtPm9wcyAmIERSTV9CUklER0VfT1BfRURJRCkKPiA+ID4g KwkJCWJyaWRnZV9jb25uZWN0b3ItPmJyaWRnZV9lZGlkID0gYnJpZGdlOwo+ID4gPiArCQlpZiAo YnJpZGdlLT5vcHMgJiBEUk1fQlJJREdFX09QX0hQRCkKPiA+ID4gKwkJCWJyaWRnZV9jb25uZWN0 b3ItPmJyaWRnZV9ocGQgPSBicmlkZ2U7Cj4gPiA+ICsJCWlmIChicmlkZ2UtPm9wcyAmIERSTV9C UklER0VfT1BfREVURUNUKQo+ID4gPiArCQkJYnJpZGdlX2Nvbm5lY3Rvci0+YnJpZGdlX2RldGVj dCA9IGJyaWRnZTsKPiA+ID4gKwkJaWYgKGJyaWRnZS0+b3BzICYgRFJNX0JSSURHRV9PUF9NT0RF UykKPiA+ID4gKwkJCWJyaWRnZV9jb25uZWN0b3ItPmJyaWRnZV9tb2RlcyA9IGJyaWRnZTsKPiA+ ID4gKwo+ID4gPiArCQlpZiAoIWJyaWRnZS0+bmV4dCkKPiA+ID4gKwkJCWNvbm5lY3Rvcl90eXBl ID0gYnJpZGdlLT50eXBlOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWlmIChjb25uZWN0b3Jf dHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93bikgewo+ID4gPiArCQlrZnJlZShicmlk Z2VfY29ubmVjdG9yKTsKPiA+ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gPiA+ICsJ fQo+ID4gPiArCj4gPiA+ICsJLyoKPiA+ID4gKwkgKiBUT0RPOiBIYW5kbGUgaW50ZXJsYWNlX2Fs bG93ZWQsIGRvdWJsZXNjYW5fYWxsb3dlZCwgc3RlcmVvX2FsbG93ZWQKPiA+ID4gKwkgKiBhbmQg eWNiY3JfNDIwX2FsbG93ZWQuCj4gPiA+ICsJICovCj4gPiA+ICsJY29ubmVjdG9yID0gJmJyaWRn ZV9jb25uZWN0b3ItPmJhc2U7Cj4gPiA+ICsJZHJtX2Nvbm5lY3Rvcl9pbml0KGRybSwgY29ubmVj dG9yLCAmZHJtX2JyaWRnZV9jb25uZWN0b3JfZnVuY3MsCj4gPiA+ICsJCQkgICBjb25uZWN0b3Jf dHlwZSk7Cj4gPiA+ICsJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJmRybV9i cmlkZ2VfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7Cj4gPiA+ICsKPiA+ID4gKwlpZiAoYnJpZGdl X2Nvbm5lY3Rvci0+YnJpZGdlX2hwZCkKPiA+ID4gKwkJY29ubmVjdG9yLT5wb2xsZWQgPSBEUk1f Q09OTkVDVE9SX1BPTExfSFBEOwo+ID4gPiArCWVsc2UgaWYgKGJyaWRnZV9jb25uZWN0b3ItPmJy aWRnZV9kZXRlY3QpCj4gPiA+ICsJCWNvbm5lY3Rvci0+cG9sbGVkID0gRFJNX0NPTk5FQ1RPUl9Q T0xMX0NPTk5FQ1QKPiA+ID4gKwkJCQkgIHwgRFJNX0NPTk5FQ1RPUl9QT0xMX0RJU0NPTk5FQ1Q7 Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gY29ubmVjdG9yOwo+ID4gPiArfQo+ID4gPiArRVhQT1JU X1NZTUJPTF9HUEwoZHJtX2JyaWRnZV9jb25uZWN0b3JfaW5pdCk7Cj4gPiA+IGRpZmYgLS1naXQg YS9pbmNsdWRlL2RybS9kcm1fYnJpZGdlX2Nvbm5lY3Rvci5oIGIvaW5jbHVkZS9kcm0vZHJtX2Jy aWRnZV9jb25uZWN0b3IuaAo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gPiBpbmRleCAw MDAwMDAwMDAwMDAuLmVjMzNiNDQ5NTRiOAo+ID4gPiAtLS0gL2Rldi9udWxsCj4gPiA+ICsrKyBi L2luY2x1ZGUvZHJtL2RybV9icmlkZ2VfY29ubmVjdG9yLmgKPiA+ID4gQEAgLTAsMCArMSwxOCBA QAo+ID4gPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArICovCj4gPiA+ICsv Kgo+ID4gPiArICogQ29weXJpZ2h0IChDKSAyMDE5IExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQu cGluY2hhcnRAaWRlYXNvbmJvYXJkLmNvbT4KPiA+ID4gKyAqLwo+ID4gPiArCj4gPiA+ICsjaWZu ZGVmIF9fRFJNX0JSSURHRV9DT05ORUNUT1JfSF9fCj4gPiA+ICsjZGVmaW5lIF9fRFJNX0JSSURH RV9DT05ORUNUT1JfSF9fCj4gPiA+ICsKPiA+ID4gK3N0cnVjdCBkcm1fYnJpZGdlOwo+ID4gPiAr c3RydWN0IGRybV9jb25uZWN0b3I7Cj4gPiA+ICtzdHJ1Y3QgZHJtX2RldmljZTsKPiA+ID4gKwo+ ID4gPiArdm9pZCBkcm1fYnJpZGdlX2Nvbm5lY3Rvcl9lbmFibGVfaHBkKHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpOwo+ID4gPiArdm9pZCBkcm1fYnJpZGdlX2Nvbm5lY3Rvcl9kaXNh YmxlX2hwZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKPiA+ID4gK3N0cnVjdCBk cm1fY29ubmVjdG9yICpkcm1fYnJpZGdlX2Nvbm5lY3Rvcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNl ICpkcm0sCj4gPiA+ICsJCQkJCQlzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKTsKPiA+ID4gKwo+ ID4gPiArI2VuZGlmIC8qIF9fRFJNX0JSSURHRV9DT05ORUNUT1JfSF9fICovCj4gCj4gLS0gCj4g UmVnYXJkcywKPiAKPiBMYXVyZW50IFBpbmNoYXJ0CgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2Fy ZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxp bmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs