From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC 2/7] drm: Add GEM backed framebuffer library Date: Thu, 20 Jul 2017 10:10:36 +0200 Message-ID: <20170720081036.nyc73hb7yf2hy7aw@phenom.ffwll.local> References: <1499867165-60925-1-git-send-email-noralf@tronnes.org> <1499867165-60925-3-git-send-email-noralf@tronnes.org> <84ead3e1-146a-d69c-2280-061a5d36f6ba@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x241.google.com (mail-wm0-x241.google.com [IPv6:2a00:1450:400c:c09::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1EA6D6E0E9 for ; Thu, 20 Jul 2017 08:10:41 +0000 (UTC) Received: by mail-wm0-x241.google.com with SMTP id 143so2584816wmu.5 for ; Thu, 20 Jul 2017 01:10:41 -0700 (PDT) Content-Disposition: inline In-Reply-To: <84ead3e1-146a-d69c-2280-061a5d36f6ba@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Noralf =?iso-8859-1?Q?Tr=F8nnes?= Cc: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBKdWwgMTgsIDIwMTcgYXQgMDU6NDI6MjhQTSArMDIwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IAo+IERlbiAxMi4wNy4yMDE3IDE1LjQ2LCBza3JldiBOb3JhbGYgVHLDuG5uZXM6 Cj4gPiBBZGQgYSBsaWJyYXJ5IGZvciBkcml2ZXJzIHRoYXQgY2FuIHVzZSBhIHNpbXBsZSByZXBy ZXNlbnRhdGlvbgo+ID4gb2YgYSBHRU0gYmFja2VkIGZyYW1lYnVmZmVyLgo+ID4gCj4gPiBTaWdu ZWQtb2ZmLWJ5OiBOb3JhbGYgVHLDuG5uZXMgPG5vcmFsZkB0cm9ubmVzLm9yZz4KPiA+IC0tLQo+ IAo+IFRoaXMgcGF0Y2ggYWRkcyBhIGdlbSBiYWNrZWQgZHJtX2ZyYW1lYnVmZmVyIGxpa2UgdGhp czoKPiAKPiBzdHJ1Y3QgZHJtX2ZiX2dlbSB7Cj4gICAgIC8qKgo+ICAgICAgKiBAYmFzZTogQmFz ZSBEUk0gZnJhbWVidWZmZXIKPiAgICAgICovCj4gICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg YmFzZTsKPiAgICAgLyoqCj4gICAgICAqIEBvYmo6IEdFTSBvYmplY3QgYXJyYXkgYmFja2luZyB0 aGUgZnJhbWVidWZmZXIuIE9uZSBvYmplY3QgcGVyCj4gICAgICAqIHBsYW5lLgo+ICAgICAgKi8K PiAgICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmpbNF07Cj4gfTsKPiAKPiBOb3cgSSB3b25k ZXIgaWYgaXQgd291bGQgYmUgYmV0dGVyIHRvIGV4dGVuZCBkcm1fZnJhbWVidWZmZXIgaW5zdGVh ZDoKPiAKPiAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciB7Cj4gKyAgICAvKioKPiArICAgICAqIEBv Ymo6IEdFTSBvYmplY3RzIGJhY2tpbmcgdGhlIGZyYW1lYnVmZmVyLCBvbmUgcGVyIHBsYW5lIChv cHRpb25hbCkuCj4gKyAgICAgKi8KPiArICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqWzRd Owo+ICB9OwoKSSB0aGluayB3ZSBjYW4gZGlyZWN0bHkgZW1iZWRkIHRoZSBnZW0gb2JqIHBvaW50 ZXJzIGludG8gdGhlCmRybV9mcmFtZWJ1ZmZlci4gQWdhaW4gdGhlIGlkZWEgdGhhdCB0aGVyZSB3 b3VsZCBiZSBhbnl0aGluZyBlbHNlIHRoYW4gZ2VtCmtpbmRhIGRpZG4ndCBwYW4gb3V0LCBleGNl cHQgZm9yIHZtd2dmeC4KCldlIGNvdWxkIHRoZW4gaGF2ZSBhIGdlbSB2ZXJzaW9uIG9mIGRybV9o ZWxwZXJfbW9kZV9maWxsX2ZiX3N0cnVjdCgpLAp3aGljaCBhbHNvIGRvZXMgdGhlIGdlbSBibyBs b29rdXBzLgoKPiBUaGUgcmVhc29uIGZvciB0aGlzLCBpcyB0aGF0IEkgaGF2ZSBsb29rZWQgdGhy b3VnaCBhbGwgZHJpdmVycyB0aGF0Cj4gc3ViY2xhc3MgZHJtX2ZyYW1lYnVmZmVyIGFuZCBmb3Vu ZCB0aGlzOgo+IC0gMTEgZHJpdmVycyBqdXN0IGFkZHMgZHJtX2dlbV9vYmplY3QKClVzdWFsbHkg dGhhdCdzIGJlY2F1c2UgdGhleSBkb24ndCBzdXBwb3J0IHl1diwgc28gb25seSBuZWVkIG9uZSBw bGFuZS4KCj4gLSAyIGRyaXZlcnMgYWRkcyBkcm1fZ2VtX29iamVjdCBhbmQgc29tZSBtb3JlCj4g LSA2IGRyaXZlcnMgYWRkcyBkcm1fZ2VtX29iamVjdCBpbmRpcmVjdGx5IHRocm91Z2ggdGhlaXIg c3ViY2xhc3NlZAo+ICAgZHJtX2dlbV9vYmplY3QKPiAtIDMgZHJpdmVycyBkb2Vzbid0IGFkZCBk cm1fZ2VtX29iamVjdAoKSSB0aGluayBmb3IgZWFzaWVyIGNvbnZlcnNpb24gd2UgY2FuIGxlYXZl IGFsbCB0aGUgZHJpdmVyLXNwZWNpZmljIHN0dWZmCmludGFjdCwgYW5kIGp1c3QgcHJvdmlkZSBo ZWxwZXJzIHRoYXQgd29yayBvbiB0aGUgY29yZSBiaXRzLgoKSSBndWVzcyB0aGlzIHdvdWxkIGFs c28gaGVscCBhIGxvdCB3aXRoIHVuaWZ5aW5nIHRoZSBjbWEgZmIgaGVscGVycyBieQplc3NlbnRp YWxseSBtYWtpbmcgdGhlbSBmdWxseSBnZW5lcmljIGdlbSBmYiBoZWxwZXJzPwotRGFuaWVsCgo+ IAo+IAo+IEZ1bGwgZGV0YWlscyBiZWxvdzoKPiAKPiBBZGRzIG9ubHkgZHJtX2dlbV9vYmplY3QK PiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAKPiBzdHJ1Y3QgYW1kZ3B1X2ZyYW1lYnVmZmVy IHsKPiAgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBiYXNlOwo+ICAgICBzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iajsKPiB9Owo+IAo+IHN0cnVjdCBhc3RfZnJhbWVidWZmZXIgewo+ICAgICBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGJhc2U7Cj4gICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq b2JqOwo+IH07Cj4gCj4gc3RydWN0IGJvY2hzX2ZyYW1lYnVmZmVyIHsKPiAgICAgc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciBiYXNlOwo+ICAgICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKPiB9 Owo+IAo+IHN0cnVjdCBjaXJydXNfZnJhbWVidWZmZXIgewo+ICAgICBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICAgICAgICBiYXNlOwo+ICAgICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKPiB9 Owo+IAo+IHN0cnVjdCBkcm1fZmJfY21hIHsKPiAgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAg ICAgICAgZmI7Cj4gICAgIHN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgICAgKm9ials0XTsKPiB9 Owo+IAo+IHN0cnVjdCBoaWJtY19mcmFtZWJ1ZmZlciB7Cj4gICAgIHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgZmI7Cj4gICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwo+IH07Cj4gCj4gc3Ry dWN0IG1nYV9mcmFtZWJ1ZmZlciB7Cj4gICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgYmFzZTsK PiAgICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4gfTsKPiAKPiBzdHJ1Y3QgbXRrX2Ry bV9mYiB7Cj4gICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgICAgYmFzZTsKPiAgICAgLyogRm9y IG5vdyB3ZSBvbmx5IHN1cHBvcnQgYSBzaW5nbGUgcGxhbmUgKi8KPiAgICAgc3RydWN0IGRybV9n ZW1fb2JqZWN0ICAgICpnZW1fb2JqOwo+IH07Cj4gCj4gc3RydWN0IHF4bF9mcmFtZWJ1ZmZlciB7 Cj4gICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgYmFzZTsKPiAgICAgc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmo7Cj4gfTsKPiAKPiBzdHJ1Y3QgcmFkZW9uX2ZyYW1lYnVmZmVyIHsKPiAgICAg c3RydWN0IGRybV9mcmFtZWJ1ZmZlciBiYXNlOwo+ICAgICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iajsKPiB9Owo+IAo+IHN0cnVjdCByb2NrY2hpcF9kcm1fZmIgewo+ICAgICBzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyIGZiOwo+ICAgICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9ialtST0NLQ0hJ UF9NQVhfRkJfQlVGRkVSXTsKPiB9Owo+ICNkZWZpbmUgUk9DS0NISVBfTUFYX0ZCX0JVRkZFUiAg ICAzCj4gCj4gCj4gQWRkcyBkcm1fZ2VtX29iamVjdCBhbmQgc29tZSBtb3JlCj4gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gCj4gc3RydWN0IG1zbV9mcmFtZWJ1ZmZlciB7Cj4g ICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgYmFzZTsKPiAgICAgY29uc3Qgc3RydWN0IG1zbV9m b3JtYXQgKmZvcm1hdDsKPiAgICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpwbGFuZXNbTUFYX1BM QU5FXTsKPiB9Owo+ICNkZWZpbmUgTUFYX1BMQU5FICAgIDQKPiAKPiBzdHJ1Y3QgdmlydGlvX2dw dV9mcmFtZWJ1ZmZlciB7Cj4gICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgYmFzZTsKPiAgICAg c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4gICAgIGludCB4MSwgeTEsIHgyLCB5MjsgLyog ZGlydHkgcmVjdCAqLwo+ICAgICBzcGlubG9ja190IGRpcnR5X2xvY2s7Cj4gICAgIHVpbnQzMl90 IGh3X3Jlc19oYW5kbGU7Cj4gfTsKPiAKPiAKPiBJbmRpcmVjdGx5IGFkZHMgYSBkcm1fZ2VtX29i amVjdAo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gCj4gc3RydWN0IGFybWFk YV9mcmFtZWJ1ZmZlciB7Cj4gICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgICAgZmI7Cj4gICAg IHN0cnVjdCBhcm1hZGFfZ2VtX29iamVjdCAqb2JqOwo+ICAgICB1aW50OF90ICAgICAgICAgICAg Zm10Owo+ICAgICB1aW50OF90ICAgICAgICAgICAgbW9kOwo+IH07Cj4gCj4gc3RydWN0IGV4eW5v c19kcm1fZmIgewo+ICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICAgIGZiOwo+ICAgICBzdHJ1 Y3QgZXh5bm9zX2RybV9nZW0gICAgKmV4eW5vc19nZW1bTUFYX0ZCX0JVRkZFUl07Cj4gICAgIGRt YV9hZGRyX3QgICAgICAgICAgICBkbWFfYWRkcltNQVhfRkJfQlVGRkVSXTsKPiB9Owo+ICNkZWZp bmUgTUFYX0ZCX0JVRkZFUiAgICA0Cj4gCj4gc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyIHsKPiAg ICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBiYXNlOwo+ICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqOwo+ICAgICBzdHJ1Y3QgaW50ZWxfcm90YXRpb25faW5mbyByb3RfaW5mbzsK PiAKPiAgICAgLyogZm9yIGVhY2ggcGxhbmUgaW4gdGhlIG5vcm1hbCBHVFQgdmlldyAqLwo+ICAg ICBzdHJ1Y3Qgewo+ICAgICAgICAgdW5zaWduZWQgaW50IHgsIHk7Cj4gICAgIH0gbm9ybWFsWzJd Owo+ICAgICAvKiBmb3IgZWFjaCBwbGFuZSBpbiB0aGUgcm90YXRlZCBHVFQgdmlldyAqLwo+ICAg ICBzdHJ1Y3Qgewo+ICAgICAgICAgdW5zaWduZWQgaW50IHgsIHk7Cj4gICAgICAgICB1bnNpZ25l ZCBpbnQgcGl0Y2g7IC8qIHBpeGVscyAqLwo+ICAgICB9IHJvdGF0ZWRbMl07Cj4gfTsKPiAKPiBz dHJ1Y3Qgbm91dmVhdV9mcmFtZWJ1ZmZlciB7Cj4gICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg YmFzZTsKPiAgICAgc3RydWN0IG5vdXZlYXVfYm8gKm52Ym87Cj4gICAgIHN0cnVjdCBudmttX3Zt YSB2bWE7Cj4gICAgIHUzMiByX2hhbmRsZTsKPiAgICAgdTMyIHJfZm9ybWF0Owo+ICAgICB1MzIg cl9waXRjaDsKPiAgICAgc3RydWN0IG52aWZfb2JqZWN0IGhfYmFzZVs0XTsKPiAgICAgc3RydWN0 IG52aWZfb2JqZWN0IGhfY29yZTsKPiB9Owo+IAo+IHN0cnVjdCB0ZWdyYV9mYiB7Cj4gICAgIHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgYmFzZTsKPiAgICAgc3RydWN0IHRlZ3JhX2JvICoqcGxhbmVz Owo+ICAgICB1bnNpZ25lZCBpbnQgbnVtX3BsYW5lczsKPiB9Owo+IAo+IHN0cnVjdCB1ZGxfZnJh bWVidWZmZXIgewo+ICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGJhc2U7Cj4gICAgIHN0cnVj dCB1ZGxfZ2VtX29iamVjdCAqb2JqOwo+ICAgICBib29sIGFjdGl2ZV8xNjsgLyogYWN0aXZlIG9u IHRoZSAxNi1iaXQgY2hhbm5lbCAqLwo+IH07Cj4gCj4gCj4gRG9lcyBub3QgYWRkIGRybV9nZW1f b2JqZWN0Cj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gCj4gc3RydWN0IG9tYXBfZnJh bWVidWZmZXIgewo+ICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGJhc2U7Cj4gICAgIGludCBw aW5fY291bnQ7Cj4gICAgIGNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmZvcm1hdDsKPiAg ICAgZW51bSBvbWFwX2NvbG9yX21vZGUgZHNzX2Zvcm1hdDsKPiAgICAgc3RydWN0IHBsYW5lIHBs YW5lc1syXTsKPiAgICAgLyogbG9jayBmb3IgcGlubmluZyAocGluX2NvdW50IGFuZCBwbGFuZXMu cGFkZHIpICovCj4gICAgIHN0cnVjdCBtdXRleCBsb2NrOwo+IH07Cj4gCj4gc3RydWN0IHBzYl9m cmFtZWJ1ZmZlciB7Cj4gICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgYmFzZTsKPiAgICAgc3Ry dWN0IGFkZHJlc3Nfc3BhY2UgKmFkZHJfc3BhY2U7Cj4gICAgIHN0cnVjdCBmYl9pbmZvICpmYmRl djsKPiAgICAgc3RydWN0IGd0dF9yYW5nZSAqZ3R0Owo+IH07Cj4gCj4gc3RydWN0IHZtd19mcmFt ZWJ1ZmZlciB7Cj4gICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgYmFzZTsKPiAgICAgaW50ICgq cGluKShzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICpmYik7Cj4gICAgIGludCAoKnVucGluKShzdHJ1 Y3Qgdm13X2ZyYW1lYnVmZmVyICpmYik7Cj4gICAgIGJvb2wgZG1hYnVmOwo+ICAgICBzdHJ1Y3Qg dHRtX2Jhc2Vfb2JqZWN0ICp1c2VyX29iajsKPiAgICAgdWludDMyX3QgdXNlcl9oYW5kbGU7Cj4g fTsKPiAKPiAKPiBOb3JhbGYuCj4gCj4gCj4gPiAgIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAg ICAgICAgICAgIHwgICAyICstCj4gPiAgIGRyaXZlcnMvZ3B1L2RybS9kcm1fZmJfZ2VtX2hlbHBl ci5jIHwgMjQ4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gICBpbmNs dWRlL2RybS9kcm1fZmJfZ2VtX2hlbHBlci5oICAgICB8ICA2NCArKysrKysrKysrCj4gPiAgIDMg ZmlsZXMgY2hhbmdlZCwgMzEzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiA+ICAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9kcm1fZmJfZ2VtX2hlbHBlci5jCj4gPiAg IGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2RybS9kcm1fZmJfZ2VtX2hlbHBlci5oCj4gPiAK PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9k cm0vTWFrZWZpbGUKPiA+IGluZGV4IDI0YTA2NmUuLjgzZDhiMDkgMTAwNjQ0Cj4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmls ZQo+ID4gQEAgLTMzLDcgKzMzLDcgQEAgZHJtX2ttc19oZWxwZXIteSA6PSBkcm1fY3J0Y19oZWxw ZXIubyBkcm1fZHBfaGVscGVyLm8gZHJtX3Byb2JlX2hlbHBlci5vIFwKPiA+ICAgCQlkcm1fcGxh bmVfaGVscGVyLm8gZHJtX2RwX21zdF90b3BvbG9neS5vIGRybV9hdG9taWNfaGVscGVyLm8gXAo+ ID4gICAJCWRybV9rbXNfaGVscGVyX2NvbW1vbi5vIGRybV9kcF9kdWFsX21vZGVfaGVscGVyLm8g XAo+ID4gICAJCWRybV9zaW1wbGVfa21zX2hlbHBlci5vIGRybV9tb2Rlc2V0X2hlbHBlci5vIFwK PiA+IC0JCWRybV9zY2RjX2hlbHBlci5vCj4gPiArCQlkcm1fc2NkY19oZWxwZXIubyBkcm1fZmJf Z2VtX2hlbHBlci5vCj4gPiAgIGRybV9rbXNfaGVscGVyLSQoQ09ORklHX0RSTV9QQU5FTF9CUklE R0UpICs9IGJyaWRnZS9wYW5lbC5vCj4gPiAgIGRybV9rbXNfaGVscGVyLSQoQ09ORklHX0RSTV9M T0FEX0VESURfRklSTVdBUkUpICs9IGRybV9lZGlkX2xvYWQubwo+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9kcm1fZmJfZ2VtX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9m Yl9nZW1faGVscGVyLmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAw Li45YTBkYTA5Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJt X2ZiX2dlbV9oZWxwZXIuYwo+ID4gQEAgLTAsMCArMSwyNDggQEAKPiA+ICsvKgo+ID4gKyAqIGRy bSBmYiBnZW0gaGVscGVyIGZ1bmN0aW9ucwo+ID4gKyAqCj4gPiArICogQ29weXJpZ2h0IChDKSAy MDE3IE5vcmFsZiBUcsO4bm5lcwo+ID4gKyAqCj4gPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiA+ICsgKiBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQo+ID4gKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCj4gPiArICogKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KPiA+ICsgKi8KPiA+ICsKPiA+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1 Zi5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgo+ID4gKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvcmVzZXJ2YXRpb24uaD4KPiA+ICsK PiA+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMu aD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1f Y3J0Y19oZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KPiA+ICsj aW5jbHVkZSA8ZHJtL2RybV9mYl9nZW1faGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1f Z2VtLmg+Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2ZiX2dlbV9nZXRfb2JqKCkgLSBHZXQg R0VNIG9iamVjdCBmb3IgZnJhbWVidWZmZXIKPiA+ICsgKiBAZmI6IFRoZSBmcmFtZWJ1ZmZlcgo+ ID4gKyAqIEBwbGFuZTogV2hpY2ggcGxhbmUKPiA+ICsgKgo+ID4gKyAqIFJldHVybnMgdGhlIEdF TSBvYmplY3QgZm9yIGdpdmVuIGZyYW1lYnVmZmVyLgo+ID4gKyAqLwo+ID4gK3N0cnVjdCBkcm1f Z2VtX29iamVjdCAqZHJtX2ZiX2dlbV9nZXRfb2JqKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi LAo+ID4gKwkJCQkJICB1bnNpZ25lZCBpbnQgcGxhbmUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJt X2ZiX2dlbSAqZmJfZ2VtID0gdG9fZmJfZ2VtKGZiKTsKPiA+ICsKPiA+ICsJaWYgKHBsYW5lID49 IDQpCj4gPiArCQlyZXR1cm4gTlVMTDsKPiA+ICsKPiA+ICsJcmV0dXJuIGZiX2dlbS0+b2JqW3Bs YW5lXTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2ZiX2dlbV9nZXRfb2JqKTsK PiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fZmJfZ2VtX2FsbG9jIC0gQWxsb2NhdGUgR0VNIGJh Y2tlZCBmcmFtZWJ1ZmZlcgo+ID4gKyAqIEBkZXY6IERSTSBkZXZpY2UKPiA+ICsgKiBAbW9kZV9j bWQ6IG1ldGFkYXRhIGZyb20gdGhlIHVzZXJzcGFjZSBmYiBjcmVhdGlvbiByZXF1ZXN0Cj4gPiAr ICogQG9iajogR0VNIG9iamVjdCBuYWNraW5nIHRoZSBmcmFtZWJ1ZmZlcgo+ID4gKyAqIEBudW1f cGxhbmVzOiBOdW1iZXIgb2YgcGxhbmVzCj4gPiArICogQGZ1bmNzOiB2dGFibGUgdG8gYmUgdXNl ZCBmb3IgdGhlIG5ldyBmcmFtZWJ1ZmZlciBvYmplY3QKPiA+ICsgKgo+ID4gKyAqIFJldHVybnM6 Cj4gPiArICogQWxsb2NhdGVkIHN0cnVjdCBkcm1fZmJfZ2VtICogb3IgZXJyb3IgZW5jb2RlZCBw b2ludGVyLgo+ID4gKyAqLwo+ID4gK3N0cnVjdCBkcm1fZmJfZ2VtICoKPiA+ICtkcm1fZmJfZ2Vt X2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiArCQkgY29uc3Qgc3RydWN0IGRybV9t b2RlX2ZiX2NtZDIgKm1vZGVfY21kLAo+ID4gKwkJIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKm9i aiwgdW5zaWduZWQgaW50IG51bV9wbGFuZXMsCj4gPiArCQkgY29uc3Qgc3RydWN0IGRybV9mcmFt ZWJ1ZmZlcl9mdW5jcyAqZnVuY3MpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2ZiX2dlbSAqZmJf Z2VtOwo+ID4gKwlpbnQgcmV0LCBpOwo+ID4gKwo+ID4gKwlmYl9nZW0gPSBremFsbG9jKHNpemVv ZigqZmJfZ2VtKSwgR0ZQX0tFUk5FTCk7Cj4gPiArCWlmICghZmJfZ2VtKQo+ID4gKwkJcmV0dXJu IEVSUl9QVFIoLUVOT01FTSk7Cj4gPiArCj4gPiArCWRybV9oZWxwZXJfbW9kZV9maWxsX2ZiX3N0 cnVjdChkZXYsICZmYl9nZW0tPmJhc2UsIG1vZGVfY21kKTsKPiA+ICsKPiA+ICsJZm9yIChpID0g MDsgaSA8IG51bV9wbGFuZXM7IGkrKykKPiA+ICsJCWZiX2dlbS0+b2JqW2ldID0gb2JqW2ldOwo+ ID4gKwo+ID4gKwlyZXQgPSBkcm1fZnJhbWVidWZmZXJfaW5pdChkZXYsICZmYl9nZW0tPmJhc2Us IGZ1bmNzKTsKPiA+ICsJaWYgKHJldCkgewo+ID4gKwkJZGV2X2VycihkZXYtPmRldiwgIkZhaWxl ZCB0byBpbml0aWFsaXplIGZyYW1lYnVmZmVyOiAlZFxuIiwgcmV0KTsKPiA+ICsJCWtmcmVlKGZi X2dlbSk7Cj4gPiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJl dHVybiBmYl9nZW07Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2ZiX2dlbV9hbGxvYyk7 Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2ZiX2dlbV9kZXN0cm95IC0gRnJlZSBHRU0gYmFj a2VkIGZyYW1lYnVmZmVyCj4gPiArICogQGZiOiBEUk0gZnJhbWVidWZmZXIKPiA+ICsgKgo+ID4g KyAqIEZyZWVzIGEgR0VNIGJhY2tlZCBmcmFtZWJ1ZmZlciB3aXRoIGl0J3MgYmFja2luZyBidWZm ZXIocykgYW5kIHRoZSBzdHJ1Y3R1cmUKPiA+ICsgKiBpdHNlbGYuIERyaXZlcnMgY2FuIHVzZSB0 aGlzIGFzIHRoZWlyICZkcm1fZnJhbWVidWZmZXJfZnVuY3MtPmRlc3Ryb3kKPiA+ICsgKiBjYWxs YmFjay4KPiA+ICsgKi8KPiA+ICt2b2lkIGRybV9mYl9nZW1fZGVzdHJveShzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYikKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fZmJfZ2VtICpmYl9nZW0gPSB0 b19mYl9nZW0oZmIpOwo+ID4gKwlpbnQgaTsKPiA+ICsKPiA+ICsJZm9yIChpID0gMDsgaSA8IDQ7 IGkrKykgewo+ID4gKwkJaWYgKGZiX2dlbS0+b2JqW2ldKQo+ID4gKwkJCWRybV9nZW1fb2JqZWN0 X3B1dF91bmxvY2tlZChmYl9nZW0tPm9ialtpXSk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJZHJtX2Zy YW1lYnVmZmVyX2NsZWFudXAoZmIpOwo+ID4gKwlrZnJlZShmYl9nZW0pOwo+ID4gK30KPiA+ICtF WFBPUlRfU1lNQk9MKGRybV9mYl9nZW1fZGVzdHJveSk7Cj4gPiArCj4gPiArLyoqCj4gPiArICog ZHJtX2ZiX2dlbV9jcmVhdGVfaGFuZGxlIC0gQ3JlYXRlIGhhbmRsZSBmb3IgR0VNIGJhY2tlZCBm cmFtZWJ1ZmZlcgo+ID4gKyAqIEBmYjogRFJNIGZyYW1lYnVmZmVyCj4gPiArICogQGZpbGU6IGRy bSBmaWxlCj4gPiArICogQGhhbmRsZTogaGFuZGxlIGNyZWF0ZWQKPiA+ICsgKgo+ID4gKyAqIERy aXZlcnMgY2FuIHVzZSB0aGlzIGFzIHRoZWlyICZkcm1fZnJhbWVidWZmZXJfZnVuY3MtPmNyZWF0 ZV9oYW5kbGUKPiA+ICsgKiBjYWxsYmFjay4KPiA+ICsgKgo+ID4gKyAqIFJldHVybnM6Cj4gPiAr ICogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ID4g KyAqLwo+ID4gK2ludCBkcm1fZmJfZ2VtX2NyZWF0ZV9oYW5kbGUoc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKPiA+ICsJCQkgICAgIHVuc2lnbmVkIGlu dCAqaGFuZGxlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9mYl9nZW0gKmZiX2dlbSA9IHRvX2Zi X2dlbShmYik7Cj4gPiArCj4gPiArCXJldHVybiBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZSwg ZmJfZ2VtLT5vYmpbMF0sIGhhbmRsZSk7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2Zi X2dlbV9jcmVhdGVfaGFuZGxlKTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fZmJfZ2VtX2Ny ZWF0ZV93aXRoX2Z1bmNzKCkgLSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZQo+ID4gKyAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkcm1fbW9kZV9jb25maWdfZnVuY3MuZmJfY3Jl YXRlCj4gPiArICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sKPiA+ ICsgKiBAZGV2OiBEUk0gZGV2aWNlCj4gPiArICogQGZpbGU6IGRybSBmaWxlIGZvciB0aGUgaW9j dGwgY2FsbAo+ID4gKyAqIEBtb2RlX2NtZDogbWV0YWRhdGEgZnJvbSB0aGUgdXNlcnNwYWNlIGZi IGNyZWF0aW9uIHJlcXVlc3QKPiA+ICsgKiBAZnVuY3M6IHZ0YWJsZSB0byBiZSB1c2VkIGZvciB0 aGUgbmV3IGZyYW1lYnVmZmVyIG9iamVjdAo+ID4gKyAqCj4gPiArICogVGhpcyBjYW4gYmUgdXNl ZCB0byBzZXQgJmRybV9mcmFtZWJ1ZmZlcl9mdW5jcyBmb3IgZHJpdmVycyB0aGF0IG5lZWQgdGhl Cj4gPiArICogJmRybV9mcmFtZWJ1ZmZlcl9mdW5jcy5kaXJ0eSBjYWxsYmFjay4gVXNlIGRybV9m Yl9nZW1fY3JlYXRlKCkgaWYgeW91IGRvbid0Cj4gPiArICogbmVlZCB0byBjaGFuZ2UgJmRybV9m cmFtZWJ1ZmZlcl9mdW5jcy4KPiA+ICsgKi8KPiA+ICtzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoK PiA+ICtkcm1fZmJfZ2VtX2NyZWF0ZV93aXRoX2Z1bmNzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKPiA+ICsJCQkgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9k ZV9mYl9jbWQyICptb2RlX2NtZCwKPiA+ICsJCQkgICAgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXJfZnVuY3MgKmZ1bmNzKQo+ID4gK3sKPiA+ICsJY29uc3Qgc3RydWN0IGRybV9mb3JtYXRf aW5mbyAqaW5mbzsKPiA+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmpzWzRdOwo+ID4gKwlz dHJ1Y3QgZHJtX2ZiX2dlbSAqZmJfZ2VtOwo+ID4gKwlpbnQgcmV0LCBpOwo+ID4gKwo+ID4gKwlp bmZvID0gZHJtX2dldF9mb3JtYXRfaW5mbyhkZXYsIG1vZGVfY21kKTsKPiA+ICsJaWYgKCFpbmZv KQo+ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7 IGkgPCBpbmZvLT5udW1fcGxhbmVzOyBpKyspIHsKPiA+ICsJCXVuc2lnbmVkIGludCB3aWR0aCA9 IG1vZGVfY21kLT53aWR0aCAvIChpID8gaW5mby0+aHN1YiA6IDEpOwo+ID4gKwkJdW5zaWduZWQg aW50IGhlaWdodCA9IG1vZGVfY21kLT5oZWlnaHQgLyAoaSA/IGluZm8tPnZzdWIgOiAxKTsKPiA+ ICsJCXVuc2lnbmVkIGludCBtaW5fc2l6ZTsKPiA+ICsKPiA+ICsJCW9ianNbaV0gPSBkcm1fZ2Vt X29iamVjdF9sb29rdXAoZmlsZSwgbW9kZV9jbWQtPmhhbmRsZXNbaV0pOwo+ID4gKwkJaWYgKCFv YmpzW2ldKSB7Cj4gPiArCQkJZGV2X2VycihkZXYtPmRldiwgIkZhaWxlZCB0byBsb29rdXAgR0VN IG9iamVjdFxuIik7Cj4gPiArCQkJcmV0ID0gLUVOT0VOVDsKPiA+ICsJCQlnb3RvIGVycl9nZW1f b2JqZWN0X3B1dDsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCW1pbl9zaXplID0gKGhlaWdodCAtIDEp ICogbW9kZV9jbWQtPnBpdGNoZXNbaV0KPiA+ICsJCQkgKyB3aWR0aCAqIGluZm8tPmNwcFtpXQo+ ID4gKwkJCSArIG1vZGVfY21kLT5vZmZzZXRzW2ldOwo+ID4gKwo+ID4gKwkJaWYgKG9ianNbaV0t PnNpemUgPCBtaW5fc2l6ZSkgewo+ID4gKwkJCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChv YmpzW2ldKTsKPiA+ICsJCQlyZXQgPSAtRUlOVkFMOwo+ID4gKwkJCWdvdG8gZXJyX2dlbV9vYmpl Y3RfcHV0Owo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCWZiX2dlbSA9IGRybV9mYl9nZW1f YWxsb2MoZGV2LCBtb2RlX2NtZCwgb2JqcywgaSwgZnVuY3MpOwo+ID4gKwlpZiAoSVNfRVJSKGZi X2dlbSkpIHsKPiA+ICsJCXJldCA9IFBUUl9FUlIoZmJfZ2VtKTsKPiA+ICsJCWdvdG8gZXJyX2dl bV9vYmplY3RfcHV0Owo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiAmZmJfZ2VtLT5iYXNlOwo+ ID4gKwo+ID4gK2Vycl9nZW1fb2JqZWN0X3B1dDoKPiA+ICsJZm9yIChpLS07IGkgPj0gMDsgaS0t KQo+ID4gKwkJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKG9ianNbaV0pOwo+ID4gKwo+ID4g KwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1f ZmJfZ2VtX2NyZWF0ZV93aXRoX2Z1bmNzKTsKPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IGRybV9m cmFtZWJ1ZmZlcl9mdW5jcyBkcm1fZmJfZ2VtX2ZiX2Z1bmNzID0gewo+ID4gKwkuZGVzdHJveQk9 IGRybV9mYl9nZW1fZGVzdHJveSwKPiA+ICsJLmNyZWF0ZV9oYW5kbGUJPSBkcm1fZmJfZ2VtX2Ny ZWF0ZV9oYW5kbGUsCj4gPiArfTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fZmJfZ2VtX2Ny ZWF0ZSgpIC0gJmRybV9tb2RlX2NvbmZpZ19mdW5jcy5mYl9jcmVhdGUgY2FsbGJhY2sgZnVuY3Rp b24KPiA+ICsgKiBAZGV2OiBEUk0gZGV2aWNlCj4gPiArICogQGZpbGU6IGRybSBmaWxlIGZvciB0 aGUgaW9jdGwgY2FsbAo+ID4gKyAqIEBtb2RlX2NtZDogbWV0YWRhdGEgZnJvbSB0aGUgdXNlcnNw YWNlIGZiIGNyZWF0aW9uIHJlcXVlc3QKPiA+ICsgKgo+ID4gKyAqIElmIHlvdXIgaGFyZHdhcmUg aGFzIHNwZWNpYWwgYWxpZ25tZW50IG9yIHBpdGNoIHJlcXVpcmVtZW50cyB0aGVzZSBzaG91bGQg YmUKPiA+ICsgKiBjaGVja2VkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIFVzZSBkcm1f ZmJfZ2VtX2NyZWF0ZV93aXRoX2Z1bmNzKCkgaWYKPiA+ICsgKiB5b3UgbmVlZCB0byBzZXQgJmRy bV9mcmFtZWJ1ZmZlcl9mdW5jcy5kaXJ0eS4KPiA+ICsgKi8KPiA+ICtzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICoKPiA+ICtkcm1fZmJfZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCj4gPiArCQkgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9j bWQyICptb2RlX2NtZCkKPiA+ICt7Cj4gPiArCXJldHVybiBkcm1fZmJfZ2VtX2NyZWF0ZV93aXRo X2Z1bmNzKGRldiwgZmlsZSwgbW9kZV9jbWQsCj4gPiArCQkJCQkgICAgJmRybV9mYl9nZW1fZmJf ZnVuY3MpOwo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fZmJfZ2VtX2NyZWF0ZSk7 Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2ZiX2dlbV9wcmVwYXJlX2ZiKCkgLSBQcmVwYXJl IGdlbSBmcmFtZWJ1ZmZlcgo+ID4gKyAqIEBwbGFuZTogV2hpY2ggcGxhbmUKPiA+ICsgKiBAc3Rh dGU6IFBsYW5lIHN0YXRlIGF0dGFjaCBmZW5jZSB0bwo+ID4gKyAqCj4gPiArICogVGhpcyBzaG91 bGQgYmUgc2V0IGFzIHRoZSAmc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MucHJlcGFyZV9m YiBob29rLgo+ID4gKyAqCj4gPiArICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIHBsYW5l IEZCIGhhcyBhbiBkbWEtYnVmIGF0dGFjaGVkLCBleHRyYWN0cwo+ID4gKyAqIHRoZSBleGNsdXNp dmUgZmVuY2UgYW5kIGF0dGFjaGVzIGl0IHRvIHBsYW5lIHN0YXRlIGZvciB0aGUgYXRvbWljIGhl bHBlcgo+ID4gKyAqIHRvIHdhaXQgb24uCj4gPiArICoKPiA+ICsgKiBUaGVyZSBpcyBubyBuZWVk IGZvciBjbGVhbnVwX2ZiIGZvciBnZW0gYmFzZWQgZnJhbWVidWZmZXIgZHJpdmVycy4KPiA+ICsg Ki8KPiA+ICtpbnQgZHJtX2ZiX2dlbV9wcmVwYXJlX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LAo+ID4gKwkJCSAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCj4gPiArewo+ID4gKwlz dHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZjsKPiA+ICsJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7Cj4g PiArCj4gPiArCWlmICgocGxhbmUtPnN0YXRlLT5mYiA9PSBzdGF0ZS0+ZmIpIHx8ICFzdGF0ZS0+ ZmIpCj4gPiArCQlyZXR1cm4gMDsKPiA+ICsKPiA+ICsJZG1hX2J1ZiA9IGRybV9mYl9nZW1fZ2V0 X29iaihzdGF0ZS0+ZmIsIDApLT5kbWFfYnVmOwo+ID4gKwlpZiAoZG1hX2J1Zikgewo+ID4gKwkJ ZmVuY2UgPSByZXNlcnZhdGlvbl9vYmplY3RfZ2V0X2V4Y2xfcmN1KGRtYV9idWYtPnJlc3YpOwo+ ID4gKwkJZHJtX2F0b21pY19zZXRfZmVuY2VfZm9yX3BsYW5lKHN0YXRlLCBmZW5jZSk7Cj4gPiAr CX0KPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0xfR1BMKGRy bV9mYl9nZW1fcHJlcGFyZV9mYik7Cj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2Zi X2dlbV9oZWxwZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9mYl9nZW1faGVscGVyLmgKPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi40MDVhMWUxCj4gPiAtLS0gL2Rldi9u dWxsCj4gPiArKysgYi9pbmNsdWRlL2RybS9kcm1fZmJfZ2VtX2hlbHBlci5oCj4gPiBAQCAtMCww ICsxLDY0IEBACj4gPiArI2lmbmRlZiBfX0RSTV9GQl9HRU1fSEVMUEVSX0hfXwo+ID4gKyNkZWZp bmUgX19EUk1fRkJfR0VNX0hFTFBFUl9IX18KPiA+ICsKPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9m cmFtZWJ1ZmZlci5oPgo+ID4gKwo+ID4gK3N0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdDsKPiA+ ICtzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMjsKPiA+ICtzdHJ1Y3QgZHJtX3BsYW5lOwo+ID4gK3N0 cnVjdCBkcm1fcGxhbmVfc3RhdGU7Cj4gPiArCj4gPiArLyoqCj4gPiArICogc3RydWN0IGRybV9m Yl9nZW0gLSBHRU0gYmFja2VkIGZyYW1lYnVmZmVyCj4gPiArICovCj4gPiArc3RydWN0IGRybV9m Yl9nZW0gewo+ID4gKwkvKioKPiA+ICsJICogQGJhc2U6IEJhc2UgRFJNIGZyYW1lYnVmZmVyCj4g PiArCSAqLwo+ID4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGJhc2U7Cj4gPiArCS8qKgo+ID4g KwkgKiBAb2JqOiBHRU0gb2JqZWN0IGFycmF5IGJhY2tpbmcgdGhlIGZyYW1lYnVmZmVyLiBPbmUg b2JqZWN0IHBlcgo+ID4gKwkgKiBwbGFuZS4KPiA+ICsJICovCj4gPiArCXN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqWzRdOwo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGlubGluZSBzdHJ1Y3Qg ZHJtX2ZiX2dlbSAqdG9fZmJfZ2VtKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQo+ID4gK3sK PiA+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihmYiwgc3RydWN0IGRybV9mYl9nZW0sIGJhc2UpOwo+ ID4gK30KPiA+ICsKPiA+ICtzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmRybV9mYl9nZW1fZ2V0X29i aihzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPiA+ICsJCQkJCSAgdW5zaWduZWQgaW50IHBs YW5lKTsKPiA+ICtzdHJ1Y3QgZHJtX2ZiX2dlbSAqCj4gPiArZHJtX2ZiX2dlbV9hbGxvYyhzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gKwkJIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQy ICptb2RlX2NtZCwKPiA+ICsJCSBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKipvYmosIHVuc2lnbmVk IGludCBudW1fcGxhbmVzLAo+ID4gKwkJIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXJfZnVu Y3MgKmZ1bmNzKTsKPiA+ICt2b2lkIGRybV9mYl9nZW1fZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYik7Cj4gPiAraW50IGRybV9mYl9nZW1fY3JlYXRlX2hhbmRsZShzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpmYiwgc3RydWN0IGRybV9maWxlICpmaWxlLAo+ID4gKwkJCSAgICAgdW5z aWduZWQgaW50ICpoYW5kbGUpOwo+ID4gKwo+ID4gK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKgo+ ID4gK2RybV9mYl9nZW1fY3JlYXRlX3dpdGhfZnVuY3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwg c3RydWN0IGRybV9maWxlICpmaWxlLAo+ID4gKwkJCSAgICAgY29uc3Qgc3RydWN0IGRybV9tb2Rl X2ZiX2NtZDIgKm1vZGVfY21kLAo+ID4gKwkJCSAgICAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlcl9mdW5jcyAqZnVuY3MpOwo+ID4gK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKgo+ID4gK2Ry bV9mYl9nZW1fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAq ZmlsZSwKPiA+ICsJCSAgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kKTsK PiA+ICsKPiA+ICsKPiA+ICtpbnQgZHJtX2ZiX2dlbV9wcmVwYXJlX2ZiKHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lLAo+ID4gKwkJCSAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpOwo+ID4g Kwo+ID4gKwo+ID4gKwo+ID4gKwo+ID4gKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKPiA+ICtzdHJ1 Y3Qgc2VxX2ZpbGU7Cj4gPiArCj4gPiAraW50IGRybV9mYl9nZW1fZGVidWdmc19zaG93KHN0cnVj dCBzZXFfZmlsZSAqbSwgdm9pZCAqYXJnKTsKPiA+ICsjZW5kaWYKPiA+ICsKPiA+ICsjZW5kaWYK PiA+ICsKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xwo+IGRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmkt ZGV2ZWwKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3Jh dGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK