From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v5 4/5] drm: Add library for shmem backed GEM objects Date: Wed, 17 Oct 2018 17:46:21 +0200 Message-ID: <20181017154621.GP31561@phenom.ffwll.local> References: <20181017130454.44292-1-noralf@tronnes.org> <20181017130454.44292-5-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x541.google.com (mail-ed1-x541.google.com [IPv6:2a00:1450:4864:20::541]) by gabe.freedesktop.org (Postfix) with ESMTPS id 884576E3C0 for ; Wed, 17 Oct 2018 15:46:25 +0000 (UTC) Received: by mail-ed1-x541.google.com with SMTP id x31-v6so25324349edd.8 for ; Wed, 17 Oct 2018 08:46:25 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20181017130454.44292-5-noralf@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: intel-gfx@lists.freedesktop.org, sam@ravnborg.org, david@lechnology.com, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBPY3QgMTcsIDIwMTggYXQgMDM6MDQ6NTNQTSArMDIwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IFRoaXMgYWRkcyBhIGxpYnJhcnkgZm9yIHNobWVtIGJhY2tlZCBHRU0gb2JqZWN0 cy4KPiAKPiB2NToKPiAtIERyb3AgZHJtX2dlbV9zaG1lbV9wcmltZV9tbWFwKCkgKERhbmllbCBW ZXR0ZXIpCj4gLSBkcm1fZ2VtX3NobWVtX21tYXAoKTogU3VidHJhY3QgZHJtX3ZtYV9ub2RlX3N0 YXJ0KCkgdG8gZ2V0IHRoZSByZWFsCj4gICB2bWEtPnZtX3Bnb2ZmCj4gLSBkcm1fZ2VtX3NobWVt X2ZhdWx0KCk6IFVzZSB2bWYtPnBnb2ZmIG5vdyB0aGF0IHZtYS0+dm1fcGdvZmYgaXMgY29ycmVj dAo+IAo+IHY0Ogo+IC0gRHJvcCBjYWNoZSBtb2RlcyAoVGhvbWFzIEhlbGxzdHJvbSkKPiAtIEFk ZCBhIEdFTSBhdHRhY2hlZCB2dGFibGUKPiAKPiB2MzoKPiAtIEdyYW1tYXIgKFNhbSBSYXZuYm9y ZykKPiAtIHMvZHJtX2dlbV9zaG1lbV9wdXRfcGFnZXNfdW5sb2NrZWQvZHJtX2dlbV9zaG1lbV9w dXRfcGFnZXNfbG9ja2VkLwo+ICAgKFNhbSBSYXZuYm9yZykKPiAtIEFkZCBkZWJ1ZyBvdXRwdXQg aW4gZXJyb3IgcGF0aCAoU2FtIFJhdm5ib3JnKQo+IAo+IFNpZ25lZC1vZmYtYnk6IE5vcmFsZiBU csO4bm5lcyA8bm9yYWxmQHRyb25uZXMub3JnPgo+IC0tLQo+ICBEb2N1bWVudGF0aW9uL2dwdS9k cm0ta21zLWhlbHBlcnMucnN0ICB8ICAxMiArCj4gIGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAg ICAgICAgICAgICAgIHwgICA2ICsKPiAgZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAgICAg ICAgICAgfCAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYyB8 IDU1MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgaW5jbHVkZS9kcm0vZHJt X2dlbV9zaG1lbV9oZWxwZXIuaCAgICAgfCAxNTMgKysrKysrKysrCj4gIDUgZmlsZXMgY2hhbmdl ZCwgNzIzIGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2Ry bS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oCj4gCj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24v Z3B1L2RybS1rbXMtaGVscGVycy5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLWhlbHBl cnMucnN0Cj4gaW5kZXggNGI0ZGMyMzZlZjZmLi44MzA1ZDM1NjY5MjggMTAwNjQ0Cj4gLS0tIGEv RG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy1oZWxwZXJzLnJzdAo+ICsrKyBiL0RvY3VtZW50YXRp b24vZ3B1L2RybS1rbXMtaGVscGVycy5yc3QKPiBAQCAtMzM1LDMgKzMzNSwxNSBAQCBMZWdhY3kg Q1JUQy9Nb2Rlc2V0IEhlbHBlciBGdW5jdGlvbnMgUmVmZXJlbmNlCj4gIAo+ICAuLiBrZXJuZWwt ZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCj4gICAgIDpleHBvcnQ6Cj4g Kwo+ICtTSE1FTSBHRU0gSGVscGVyIFJlZmVyZW5jZQo+ICs9PT09PT09PT09PT09PT09PT09PT09 PT09PQo+ICsKPiArLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVt X2hlbHBlci5jCj4gKyAgIDpkb2M6IG92ZXJ2aWV3Cj4gKwo+ICsuLiBrZXJuZWwtZG9jOjogaW5j bHVkZS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuaAo+ICsgICA6aW50ZXJuYWw6Cj4gKwo+ICsu LiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMKPiAr ICAgOmV4cG9ydDoKClRoaXMgZG9lc24ndCBtYWtlIHNlbnNlIGhlcmUgaW1vIC0gcHV0IHRoZW0g cmlnaHQgbmV4dCB0byB0aGUgY21hIGhlbHBlcnMKaW4gZHJtLW1tLnJzdCBpbnN0ZWFkPwoKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2Nv bmZpZwo+IGluZGV4IDczNmI3ZTY3ZTRlYy4uNDYwOTBhMzZmNTJlIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiBA QCAtMTU3LDYgKzE1NywxMiBAQCBjb25maWcgRFJNX0tNU19DTUFfSEVMUEVSCj4gIAloZWxwCj4g IAkgIENob29zZSB0aGlzIGlmIHlvdSBuZWVkIHRoZSBLTVMgQ01BIGhlbHBlciBmdW5jdGlvbnMK PiAgCj4gK2NvbmZpZyBEUk1fR0VNX1NITUVNX0hFTFBFUgo+ICsJYm9vbAo+ICsJZGVwZW5kcyBv biBEUk0KPiArCWhlbHAKPiArCSAgQ2hvb3NlIHRoaXMgaWYgeW91IG5lZWQgdGhlIEdFTSBzaG1l bSBoZWxwZXIgZnVuY3Rpb25zCj4gKwo+ICBjb25maWcgRFJNX1ZNCj4gIAlib29sCj4gIAlkZXBl bmRzIG9uIERSTSAmJiBNTVUKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxl IGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gaW5kZXggNTc2YmE5ODVlMTM4Li44NzMzY2Vi NDEyOTIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL01ha2VmaWxlCj4gQEAgLTI1LDYgKzI1LDcgQEAgZHJtLSQoQ09ORklHX0RS TV9MSUJfUkFORE9NKSArPSBsaWIvZHJtX3JhbmRvbS5vCj4gIGRybS0kKENPTkZJR19EUk1fVk0p ICs9IGRybV92bS5vCj4gIGRybS0kKENPTkZJR19DT01QQVQpICs9IGRybV9pb2MzMi5vCj4gIGRy bS0kKENPTkZJR19EUk1fR0VNX0NNQV9IRUxQRVIpICs9IGRybV9nZW1fY21hX2hlbHBlci5vCj4g K2RybS0kKENPTkZJR19EUk1fR0VNX1NITUVNX0hFTFBFUikgKz0gZHJtX2dlbV9zaG1lbV9oZWxw ZXIubwo+ICBkcm0tJChDT05GSUdfUENJKSArPSBhdGlfcGNpZ2FydC5vCj4gIGRybS0kKENPTkZJ R19EUk1fUEFORUwpICs9IGRybV9wYW5lbC5vCj4gIGRybS0kKENPTkZJR19PRikgKz0gZHJtX29m Lm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMg Yi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYwo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5jNGVlYzUxZDMyODIKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMKPiBAQCAtMCww ICsxLDU1MSBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ ICsgKiBDb3B5cmlnaHQgMjAxOCBOb3JhbGYgVHLDuG5uZXMKPiArICovCj4gKwo+ICsjaW5jbHVk ZSA8bGludXgvZG1hLWJ1Zi5oPgo+ICsjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9tdXRleC5oPgo+ICsjaW5jbHVkZSA8bGludXgvc2htZW1fZnMuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KPiArCj4g KyNpbmNsdWRlIDxkcm0vZHJtX2RldmljZS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4K PiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJt L2RybV9wcmltZS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPgo+ICsKPiArLyoqCj4g KyAqIERPQzogb3ZlcnZpZXcKPiArICoKPiArICogVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIGhlbHBl cnMgZm9yIEdFTSBvYmplY3RzIGJhY2tlZCBieSBzaG1lbSBidWZmZXJzCj4gKyAqIGFsbG9jYXRl ZCB1c2luZyBhbm9ueW1vdXMgcGFnZWFibGUgbWVtb3J5LgoKV291bGQgYmUgbmVhdCB0byBpbnNl cnQgYSBsaW5rIHRvIHRoZSBjbWEgdmVyc2lvbiBoZXJlIChhbmQgdG8gdGhlIGdlbQp2ZXJzaW9u IGluIHRoZSBjbWEgaGVscGVycykgYW5kIHNwZW5kIGEgZmV3IHdvcmRzIG9uIHdoZW4gdG8gdXNl IGVhY2guCgo+ICsgKi8KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3Rf ZnVuY3MgZHJtX2dlbV9zaG1lbV9mdW5jcyA9IHsKPiArCS5mcmVlID0gZHJtX2dlbV9zaG1lbV9m cmVlX29iamVjdCwKPiArCS5wcmludF9pbmZvID0gZHJtX2dlbV9zaG1lbV9wcmludF9pbmZvLAo+ ICsJLnBpbiA9IGRybV9nZW1fc2htZW1fcGluLAo+ICsJLnVucGluID0gZHJtX2dlbV9zaG1lbV91 bnBpbiwKPiArCS5nZXRfc2dfdGFibGUgPSBkcm1fZ2VtX3NobWVtX2dldF9zZ190YWJsZSwKPiAr CS52bWFwID0gZHJtX2dlbV9zaG1lbV92bWFwLAo+ICsJLnZ1bm1hcCA9IGRybV9nZW1fc2htZW1f dnVubWFwLAo+ICsJLnZtX29wcyA9ICZkcm1fZ2VtX3NobWVtX3ZtX29wcywKPiArfTsKPiArCj4g Ky8qKgo+ICsgKiBkcm1fZ2VtX3NobWVtX2NyZWF0ZSAtIEFsbG9jYXRlIGFuIG9iamVjdCB3aXRo IHRoZSBnaXZlbiBzaXplCj4gKyAqIEBkZXY6IERSTSBkZXZpY2UKPiArICogQHNpemU6IFNpemUg b2YgdGhlIG9iamVjdCB0byBhbGxvY2F0ZQo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0 ZXMgYSBzaG1lbSBHRU0gb2JqZWN0Lgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiBBIHN0cnVj dCBkcm1fZ2VtX3NobWVtX29iamVjdCAqIG9uIHN1Y2Nlc3Mgb3IgYW4gRVJSX1BUUigpLWVuY29k ZWQgbmVnYXRpdmUKPiArICogZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ICsgKi8KPiArc3RydWN0 IGRybV9nZW1fc2htZW1fb2JqZWN0ICpkcm1fZ2VtX3NobWVtX2NyZWF0ZShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCBzaXplX3Qgc2l6ZSkKPiArewo+ICsJc3RydWN0IGRybV9nZW1fc2htZW1fb2Jq ZWN0ICpzaG1lbTsKPiArCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwo+ICsJaW50IHJldDsK PiArCj4gKwlzaXplID0gUEFHRV9BTElHTihzaXplKTsKPiArCj4gKwlpZiAoZGV2LT5kcml2ZXIt PmdlbV9jcmVhdGVfb2JqZWN0KQo+ICsJCW9iaiA9IGRldi0+ZHJpdmVyLT5nZW1fY3JlYXRlX29i amVjdChkZXYsIHNpemUpOwo+ICsJZWxzZQo+ICsJCW9iaiA9IGt6YWxsb2Moc2l6ZW9mKCpzaG1l bSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFvYmopCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7Cj4gKwo+ICsJaWYgKCFvYmotPmZ1bmNzKQo+ICsJCW9iai0+ZnVuY3MgPSAmZHJtX2dlbV9z aG1lbV9mdW5jczsKPiArCj4gKwlyZXQgPSBkcm1fZ2VtX29iamVjdF9pbml0KGRldiwgb2JqLCBz aXplKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfZnJlZTsKPiArCj4gKwlyZXQgPSBkcm1f Z2VtX2NyZWF0ZV9tbWFwX29mZnNldChvYmopOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9y ZWxlYXNlOwo+ICsKPiArCXNobWVtID0gdG9fZHJtX2dlbV9zaG1lbV9vYmoob2JqKTsKPiArCW11 dGV4X2luaXQoJnNobWVtLT5wYWdlc19sb2NrKTsKPiArCW11dGV4X2luaXQoJnNobWVtLT52bWFw X2xvY2spOwo+ICsKPiArCXJldHVybiBzaG1lbTsKPiArCj4gK2Vycl9yZWxlYXNlOgo+ICsJZHJt X2dlbV9vYmplY3RfcmVsZWFzZShvYmopOwo+ICtlcnJfZnJlZToKPiArCWtmcmVlKHNobWVtKTsK PiArCj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRy bV9nZW1fc2htZW1fY3JlYXRlKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fZ2VtX3NobWVtX2ZyZWVf b2JqZWN0IC0gRnJlZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgc2htZW0gR0VNIG9iamVj dAo+ICsgKiBAb2JqOiBHRU0gb2JqZWN0IHRvIGZyZWUKPiArICoKPiArICogVGhpcyBmdW5jdGlv biBjbGVhbnMgdXAgdGhlIEdFTSBvYmplY3Qgc3RhdGUgYW5kIGZyZWVzIHRoZSBtZW1vcnkgdXNl ZCB0bwo+ICsgKiBzdG9yZSB0aGUgb2JqZWN0IGl0c2VsZi4KPiArICovCj4gK3ZvaWQgZHJtX2dl bV9zaG1lbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiArewo+ICsJ c3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2Jq KG9iaik7Cj4gKwo+ICsJV0FSTl9PTihzaG1lbS0+dm1hcF91c2VfY291bnQpOwo+ICsKPiArCWlm IChvYmotPmltcG9ydF9hdHRhY2gpIHsKPiArCQlzaG1lbS0+cGFnZXNfdXNlX2NvdW50LS07Cj4g KwkJZHJtX3ByaW1lX2dlbV9kZXN0cm95KG9iaiwgc2htZW0tPnNndCk7Cj4gKwkJa3ZmcmVlKHNo bWVtLT5wYWdlcyk7Cj4gKwl9Cj4gKwo+ICsJV0FSTl9PTihzaG1lbS0+cGFnZXNfdXNlX2NvdW50 KTsKPiArCj4gKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7Cj4gKwltdXRleF9kZXN0cm95 KCZzaG1lbS0+cGFnZXNfbG9jayk7Cj4gKwltdXRleF9kZXN0cm95KCZzaG1lbS0+dm1hcF9sb2Nr KTsKPiArCWtmcmVlKHNobWVtKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2VtX3No bWVtX2ZyZWVfb2JqZWN0KTsKPiArCj4gK3N0YXRpYyBpbnQgZHJtX2dlbV9zaG1lbV9nZXRfcGFn ZXNfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pCj4gK3sKPiArCXN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gJnNobWVtLT5iYXNlOwo+ICsJc3RydWN0IHBhZ2Ug KipwYWdlczsKPiArCj4gKwlpZiAoc2htZW0tPnBhZ2VzX3VzZV9jb3VudCsrID4gMCkKPiArCQly ZXR1cm4gMDsKPiArCj4gKwlwYWdlcyA9IGRybV9nZW1fZ2V0X3BhZ2VzKG9iaik7CgpJIHRoaW5r IG1vdmluZyB0aGUgZHJtX2dlbV9nZXQvcHV0X3BhZ2VzIGludG8gdGhlIHNobWVtIGhlbHBlciBo ZXJlIHdvdWxkCmJlIGEgZ29vZCBjbGVhbnVwLiBQbHVzIGFsaWduaW5nIHRoZSBwcmVmaXggdG8g ZHJtX2dlbV9zaG1lbSAtIHRoZXkgcmVhbGx5Cm9ubHkgd29yayB3aXRoIHNobWVtLCBub3QgY21h IGdlbSBiby4KCj4gKwlpZiAoSVNfRVJSKHBhZ2VzKSkgewo+ICsJCURSTV9ERUJVR19LTVMoIkZh aWxlZCB0byBnZXQgcGFnZXMgKCVsZClcbiIsIFBUUl9FUlIocGFnZXMpKTsKPiArCQlzaG1lbS0+ cGFnZXNfdXNlX2NvdW50ID0gMDsKPiArCQlyZXR1cm4gUFRSX0VSUihwYWdlcyk7Cj4gKwl9Cj4g Kwo+ICsJc2htZW0tPnBhZ2VzID0gcGFnZXM7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g Ky8qCj4gKyAqIGRybV9nZW1fc2htZW1fZ2V0X3BhZ2VzIC0gQWxsb2NhdGUgYmFja2luZyBwYWdl cyBmb3IgYSBzaG1lbSBHRU0gb2JqZWN0Cj4gKyAqIEBzaG1lbTogc2htZW0gR0VNIG9iamVjdAo+ ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIHN1cmUgdGhhdCBiYWNraW5nIHBhZ2VzIGV4 aXN0cyBmb3IgdGhlIHNobWVtIEdFTSBvYmplY3QKPiArICogYW5kIGluY3JlYXNlcyB0aGUgdXNl IGNvdW50Lgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdh dGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKyAqLwo+ICtpbnQgZHJtX2dlbV9zaG1lbV9n ZXRfcGFnZXMoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSkKPiArewo+ICsJaW50 IHJldDsKPiArCj4gKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnNobWVtLT5wYWdl c19sb2NrKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCXJldCA9IGRybV9nZW1f c2htZW1fZ2V0X3BhZ2VzX2xvY2tlZChzaG1lbSk7Cj4gKwltdXRleF91bmxvY2soJnNobWVtLT5w YWdlc19sb2NrKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJt X2dlbV9zaG1lbV9nZXRfcGFnZXMpOwo+ICsKPiArc3RhdGljIHZvaWQgZHJtX2dlbV9zaG1lbV9w dXRfcGFnZXNfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pCj4gK3sK PiArCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gJnNobWVtLT5iYXNlOwo+ICsKPiArCWlm IChXQVJOX09OX09OQ0UoIXNobWVtLT5wYWdlc191c2VfY291bnQpKQo+ICsJCXJldHVybjsKPiAr Cj4gKwlpZiAoLS1zaG1lbS0+cGFnZXNfdXNlX2NvdW50ID4gMCkKPiArCQlyZXR1cm47Cj4gKwo+ ICsJZHJtX2dlbV9wdXRfcGFnZXMob2JqLCBzaG1lbS0+cGFnZXMsCj4gKwkJCSAgc2htZW0tPnBh Z2VzX21hcmtfZGlydHlfb25fcHV0LAo+ICsJCQkgIHNobWVtLT5wYWdlc19tYXJrX2FjY2Vzc2Vk X29uX3B1dCk7Cj4gKwlzaG1lbS0+cGFnZXMgPSBOVUxMOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBk cm1fZ2VtX3NobWVtX3B1dF9wYWdlcyAtIERlY3JlYXNlIHVzZSBjb3VudCBvbiB0aGUgYmFja2lu ZyBwYWdlcyBmb3IgYSBzaG1lbSBHRU0gb2JqZWN0Cj4gKyAqIEBzaG1lbTogc2htZW0gR0VNIG9i amVjdAo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGRlY3JlYXNlcyB0aGUgdXNlIGNvdW50IGFu ZCBwdXRzIHRoZSBiYWNraW5nIHBhZ2VzIHdoZW4gdXNlIGRyb3BzIHRvIHplcm8uCj4gKyAqLwo+ ICt2b2lkIGRybV9nZW1fc2htZW1fcHV0X3BhZ2VzKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVj dCAqc2htZW0pCj4gK3sKPiArCW11dGV4X2xvY2soJnNobWVtLT5wYWdlc19sb2NrKTsKPiArCWRy bV9nZW1fc2htZW1fcHV0X3BhZ2VzX2xvY2tlZChzaG1lbSk7Cj4gKwltdXRleF91bmxvY2soJnNo bWVtLT5wYWdlc19sb2NrKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fcHV0 X3BhZ2VzKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fZ2VtX3NobWVtX3BpbiAtIFBpbiBiYWNraW5n IHBhZ2VzIGZvciBhIHNobWVtIEdFTSBvYmplY3QKPiArICogQG9iajogR0VNIG9iamVjdAo+ICsg Kgo+ICsgKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIHN1cmUgdGhlIGJhY2tpbmcgcGFnZXMgYXJlIHBp bm5lZCBpbiBtZW1vcnkgd2hpbGUgdGhlCj4gKyAqIGJ1ZmZlciBpcyBleHBvcnRlZC4KPiArICoK PiArICogUmV0dXJuczoKPiArICogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29k ZSBvbiBmYWlsdXJlLgo+ICsgKi8KPiAraW50IGRybV9nZW1fc2htZW1fcGluKHN0cnVjdCBkcm1f Z2VtX29iamVjdCAqb2JqKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNo bWVtID0gdG9fZHJtX2dlbV9zaG1lbV9vYmoob2JqKTsKPiArCj4gKwlyZXR1cm4gZHJtX2dlbV9z aG1lbV9nZXRfcGFnZXMoc2htZW0pOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2dlbV9zaG1l bV9waW4pOwo+ICsKPiArLyoqCj4gKyAqIGRybV9nZW1fc2htZW1fdW5waW4gLSBVbnBpbiBiYWNr aW5nIHBhZ2VzIGZvciBhIHNobWVtIEdFTSBvYmplY3QKPiArICogQG9iajogR0VNIG9iamVjdAo+ ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIHJlcXVpcmVtZW50IHRoYXQgdGhl IGJhY2tpbmcgcGFnZXMgYXJlIHBpbm5lZCBpbgo+ICsgKiBtZW1vcnkuCj4gKyAqLwo+ICt2b2lk IGRybV9nZW1fc2htZW1fdW5waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4gK3sKPiAr CXN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0gPSB0b19kcm1fZ2VtX3NobWVtX29i aihvYmopOwo+ICsKPiArCWRybV9nZW1fc2htZW1fcHV0X3BhZ2VzKHNobWVtKTsKPiArfQo+ICtF WFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fdW5waW4pOwo+ICsKPiArc3RhdGljIHZvaWQgKmRy bV9nZW1fc2htZW1fdm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1l bSkKPiArewo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmc2htZW0tPmJhc2U7Cj4g KwlpbnQgcmV0Owo+ICsKPiArCWlmIChzaG1lbS0+dm1hcF91c2VfY291bnQrKyA+IDApCj4gKwkJ cmV0dXJuIHNobWVtLT52YWRkcjsKPiArCj4gKwlyZXQgPSBkcm1fZ2VtX3NobWVtX2dldF9wYWdl cyhzaG1lbSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX3plcm9fdXNlOwo+ICsKPiArCWlm IChvYmotPmltcG9ydF9hdHRhY2gpCj4gKwkJc2htZW0tPnZhZGRyID0gZG1hX2J1Zl92bWFwKG9i ai0+aW1wb3J0X2F0dGFjaC0+ZG1hYnVmKTsKPiArCWVsc2UKPiArCQlzaG1lbS0+dmFkZHIgPSB2 bWFwKHNobWVtLT5wYWdlcywgb2JqLT5zaXplID4+IFBBR0VfU0hJRlQsIFZNX01BUCwgUEFHRV9L RVJORUwpOwo+ICsKPiArCWlmICghc2htZW0tPnZhZGRyKSB7Cj4gKwkJRFJNX0RFQlVHX0tNUygi RmFpbGVkIHRvIHZtYXAgcGFnZXNcbiIpOwo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byBl cnJfcHV0X3BhZ2VzOwo+ICsJfQo+ICsKPiArCXJldHVybiBzaG1lbS0+dmFkZHI7Cj4gKwo+ICtl cnJfcHV0X3BhZ2VzOgo+ICsJZHJtX2dlbV9zaG1lbV9wdXRfcGFnZXMoc2htZW0pOwo+ICtlcnJf emVyb191c2U6Cj4gKwlzaG1lbS0+dm1hcF91c2VfY291bnQgPSAwOwo+ICsKPiArCXJldHVybiBF UlJfUFRSKHJldCk7Cj4gK30KPiArCj4gKy8qCj4gKyAqIGRybV9nZW1fc2htZW1fdm1hcCAtIENy ZWF0ZSBhIHZpcnR1YWwgbWFwcGluZyBmb3IgYSBzaG1lbSBHRU0gb2JqZWN0Cj4gKyAqIEBzaG1l bTogc2htZW0gR0VNIG9iamVjdAo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIHN1cmUg dGhhdCBhIHZpcnR1YWwgYWRkcmVzcyBleGlzdHMgZm9yIHRoZSBidWZmZXIgYmFja2luZwo+ICsg KiB0aGUgc2htZW0gR0VNIG9iamVjdC4KPiArICoKPiArICogUmV0dXJuczoKPiArICogMCBvbiBz dWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ICsgKi8KPiArdm9p ZCAqZHJtX2dlbV9zaG1lbV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtID0gdG9fZHJtX2dlbV9zaG1lbV9v Ymoob2JqKTsKPiArCXZvaWQgKnZhZGRyOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBtdXRl eF9sb2NrX2ludGVycnVwdGlibGUoJnNobWVtLT52bWFwX2xvY2spOwo+ICsJaWYgKHJldCkKPiAr CQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsJdmFkZHIgPSBkcm1fZ2VtX3NobWVtX3ZtYXBfbG9j a2VkKHNobWVtKTsKPiArCW11dGV4X3VubG9jaygmc2htZW0tPnZtYXBfbG9jayk7Cj4gKwo+ICsJ cmV0dXJuIHZhZGRyOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2dlbV9zaG1lbV92bWFwKTsK PiArCj4gK3N0YXRpYyB2b2lkIGRybV9nZW1fc2htZW1fdnVubWFwX2xvY2tlZChzdHJ1Y3QgZHJt X2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaiA9ICZzaG1lbS0+YmFzZTsKPiArCj4gKwlpZiAoV0FSTl9PTl9PTkNFKCFzaG1lbS0+dm1h cF91c2VfY291bnQpKQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAoLS1zaG1lbS0+dm1hcF91c2Vf Y291bnQgPiAwKQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAob2JqLT5pbXBvcnRfYXR0YWNoKQo+ ICsJCWRtYV9idWZfdnVubWFwKG9iai0+aW1wb3J0X2F0dGFjaC0+ZG1hYnVmLCBzaG1lbS0+dmFk ZHIpOwo+ICsJZWxzZQo+ICsJCXZ1bm1hcChzaG1lbS0+dmFkZHIpOwo+ICsKPiArCXNobWVtLT52 YWRkciA9IE5VTEw7Cj4gKwlkcm1fZ2VtX3NobWVtX3B1dF9wYWdlcyhzaG1lbSk7Cj4gK30KPiAr Cj4gKy8qCj4gKyAqIGRybV9nZW1fc2htZW1fdnVubWFwIC0gVW5tYXAgYSB2aXJ0dWFsIG1hcHBp bmcgZm8gYSBzaG1lbSBHRU0gb2JqZWN0Cj4gKyAqIEBzaG1lbTogc2htZW0gR0VNIG9iamVjdAo+ ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIHZpcnR1YWwgYWRkcmVzcyB3aGVu IHVzZSBjb3VudCBkcm9wcyB0byB6ZXJvLgo+ICsgKi8KPiArdm9pZCBkcm1fZ2VtX3NobWVtX3Z1 bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpCj4gK3sKPiArCXN0 cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0gPSB0b19kcm1fZ2VtX3NobWVtX29iaihv YmopOwo+ICsKPiArCW11dGV4X2xvY2soJnNobWVtLT52bWFwX2xvY2spOwo+ICsJZHJtX2dlbV9z aG1lbV92dW5tYXBfbG9ja2VkKHNobWVtKTsKPiArCW11dGV4X3VubG9jaygmc2htZW0tPnZtYXBf bG9jayk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3NobWVtX3Z1bm1hcCk7Cj4gKwo+ ICtzdGF0aWMgc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICoKPiArZHJtX2dlbV9zaG1lbV9j cmVhdGVfd2l0aF9oYW5kbGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCj4gKwkJCQkgc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCj4gKwkJCQkgdWludDMyX3QgKmhhbmRs ZSkKPiArewo+ICsJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbTsKPiArCWludCBy ZXQ7Cj4gKwo+ICsJc2htZW0gPSBkcm1fZ2VtX3NobWVtX2NyZWF0ZShkZXYsIHNpemUpOwo+ICsJ aWYgKElTX0VSUihzaG1lbSkpCj4gKwkJcmV0dXJuIHNobWVtOwo+ICsKPiArCS8qCj4gKwkgKiBB bGxvY2F0ZSBhbiBpZCBvZiBpZHIgdGFibGUgd2hlcmUgdGhlIG9iaiBpcyByZWdpc3RlcmVkCj4g KwkgKiBhbmQgaGFuZGxlIGhhcyB0aGUgaWQgd2hhdCB1c2VyIGNhbiBzZWUuCj4gKwkgKi8KPiAr CXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsICZzaG1lbS0+YmFzZSwgaGFu ZGxlKTsKPiArCS8qIGRyb3AgcmVmZXJlbmNlIGZyb20gYWxsb2NhdGUgLSBoYW5kbGUgaG9sZHMg aXQgbm93LiAqLwo+ICsJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKCZzaG1lbS0+YmFzZSk7 Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gKwo+ICsJcmV0dXJuIHNo bWVtOwo+ICt9Cj4gKwo+ICsvKioKPiArICogZHJtX2dlbV9zaG1lbV9kdW1iX2NyZWF0ZSAtIENy ZWF0ZSBhIGR1bWIgc2htZW0gYnVmZmVyIG9iamVjdAo+ICsgKiBAZmlsZTogRFJNIGZpbGUgc3Ry dWN0dXJlIHRvIGNyZWF0ZSB0aGUgZHVtYiBidWZmZXIgZm9yCj4gKyAqIEBkZXY6IERSTSBkZXZp Y2UKPiArICogQGFyZ3M6IElPQ1RMIGRhdGEKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBjb21w dXRlcyB0aGUgcGl0Y2ggb2YgdGhlIGR1bWIgYnVmZmVyIGFuZCByb3VuZHMgaXQgdXAgdG8gYW4K PiArICogaW50ZWdlciBudW1iZXIgb2YgYnl0ZXMgcGVyIHBpeGVsLiBEcml2ZXJzIGZvciBoYXJk d2FyZSB0aGF0IGRvZXNuJ3QgaGF2ZQo+ICsgKiBhbnkgYWRkaXRpb25hbCByZXN0cmljdGlvbnMg b24gdGhlIHBpdGNoIGNhbiBkaXJlY3RseSB1c2UgdGhpcyBmdW5jdGlvbiBhcwo+ICsgKiB0aGVp ciAmZHJtX2RyaXZlci5kdW1iX2NyZWF0ZSBjYWxsYmFjay4KPiArICoKPiArICogRm9yIGhhcmR3 YXJlIHdpdGggYWRkaXRpb25hbCByZXN0cmljdGlvbnMsIGRyaXZlcnMgY2FuIGFkanVzdCB0aGUg ZmllbGRzCj4gKyAqIHNldCB1cCBieSB1c2Vyc3BhY2UgYmVmb3JlIGNhbGxpbmcgaW50byB0aGlz IGZ1bmN0aW9uLgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiAwIG9uIHN1Y2Nlc3Mgb3IgYSBu ZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKyAqLwo+ICtpbnQgZHJtX2dlbV9zaG1l bV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsIHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCj4gKwkJCSAgICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncykKPiArewo+ ICsJdTMyIG1pbl9waXRjaCA9IERJVl9ST1VORF9VUChhcmdzLT53aWR0aCAqIGFyZ3MtPmJwcCwg OCk7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtOwo+ICsKPiArCWlmICgh YXJncy0+cGl0Y2ggfHwgIWFyZ3MtPnNpemUpIHsKPiArCQlhcmdzLT5waXRjaCA9IG1pbl9waXRj aDsKPiArCQlhcmdzLT5zaXplID0gYXJncy0+cGl0Y2ggKiBhcmdzLT5oZWlnaHQ7Cj4gKwl9IGVs c2Ugewo+ICsJCS8qIGVuc3VyZSBzYW5lIG1pbmltdW0gdmFsdWVzICovCj4gKwkJaWYgKGFyZ3Mt PnBpdGNoIDwgbWluX3BpdGNoKQo+ICsJCQlhcmdzLT5waXRjaCA9IG1pbl9waXRjaDsKPiArCQlp ZiAoYXJncy0+c2l6ZSA8IGFyZ3MtPnBpdGNoICogYXJncy0+aGVpZ2h0KQo+ICsJCQlhcmdzLT5z aXplID0gYXJncy0+cGl0Y2ggKiBhcmdzLT5oZWlnaHQ7Cj4gKwl9Cj4gKwo+ICsJc2htZW0gPSBk cm1fZ2VtX3NobWVtX2NyZWF0ZV93aXRoX2hhbmRsZShmaWxlLCBkZXYsIGFyZ3MtPnNpemUsICZh cmdzLT5oYW5kbGUpOwo+ICsKPiArCXJldHVybiBQVFJfRVJSX09SX1pFUk8oc2htZW0pOwo+ICt9 Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9nZW1fc2htZW1fZHVtYl9jcmVhdGUpOwo+ICsKPiAr c3RhdGljIHZtX2ZhdWx0X3QgZHJtX2dlbV9zaG1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZt ZikKPiArewo+ICsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtPnZtYTsKPiArCXN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gdm1hLT52bV9wcml2YXRlX2RhdGE7Cj4gKwlzdHJ1 Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtID0gdG9fZHJtX2dlbV9zaG1lbV9vYmoob2Jq KTsKPiArCWxvZmZfdCBudW1fcGFnZXMgPSBvYmotPnNpemUgPj4gUEFHRV9TSElGVDsKPiArCXN0 cnVjdCBwYWdlICpwYWdlOwo+ICsKPiArCWlmICh2bWYtPnBnb2ZmID4gbnVtX3BhZ2VzIHx8IFdB Uk5fT05fT05DRSghc2htZW0tPnBhZ2VzKSkKPiArCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwo+ ICsKPiArCXBhZ2UgPSBzaG1lbS0+cGFnZXNbdm1mLT5wZ29mZl07Cj4gKwo+ICsJcmV0dXJuIHZt Zl9pbnNlcnRfcGFnZSh2bWEsIHZtZi0+YWRkcmVzcywgcGFnZSk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGRybV9nZW1fc2htZW1fdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEp Cj4gK3sKPiArCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gdm1hLT52bV9wcml2YXRlX2Rh dGE7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtID0gdG9fZHJtX2dlbV9z aG1lbV9vYmoob2JqKTsKPiArCj4gKwlkcm1fZ2VtX3NobWVtX3B1dF9wYWdlcyhzaG1lbSk7CgpJ bWJhbGFuY2UgZ2V0L3B1dF9wYWdlcyBoZXJlLCBpZiBzb21lb25lIGZvcmtzICh3aGljaCBpcyB3 aGF0IGNhbGxzCnZtX29wcy0+b3BlbiBvbiBhbiBleGlzdGluZyB2bWEpLgoKPiArCWRybV9nZW1f dm1fY2xvc2Uodm1hKTsKPiArfQo+ICsKPiArY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3Ry dWN0IGRybV9nZW1fc2htZW1fdm1fb3BzID0gewo+ICsJLmZhdWx0ID0gZHJtX2dlbV9zaG1lbV9m YXVsdCwKPiArCS5vcGVuID0gZHJtX2dlbV92bV9vcGVuLAo+ICsJLmNsb3NlID0gZHJtX2dlbV9z aG1lbV92bV9jbG9zZSwKPiArfTsKPiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV92 bV9vcHMpOwo+ICsKPiArLyoqCj4gKyAqIGRybV9nZW1fc2htZW1fbW1hcCAtIE1lbW9yeS1tYXAg YSBzaG1lbSBHRU0gb2JqZWN0Cj4gKyAqIEBmaWxwOiBGaWxlIG9iamVjdAo+ICsgKiBAdm1hOiBW TUEgZm9yIHRoZSBhcmVhIHRvIGJlIG1hcHBlZAo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGlt cGxlbWVudHMgYW4gYXVnbWVudGVkIHZlcnNpb24gb2YgdGhlIEdFTSBEUk0gZmlsZSBtbWFwCj4g KyAqIG9wZXJhdGlvbiBmb3Igc2htZW0gb2JqZWN0cy4gRHJpdmVycyB3aGljaCBlbXBsb3kgdGhl IHNobWVtIGhlbHBlcnMgc2hvdWxkCj4gKyAqIHVzZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZWlyICZm aWxlX29wZXJhdGlvbnMubW1hcCBoYW5kbGVyIGluIHRoZSBEUk0gZGV2aWNlIGZpbGUncwo+ICsg KiBmaWxlX29wZXJhdGlvbnMgc3RydWN0dXJlLgo+ICsgKgo+ICsgKiBJbnN0ZWFkIG9mIGRpcmVj dGx5IHJlZmVyZW5jaW5nIHRoaXMgZnVuY3Rpb24sIGRyaXZlcnMgc2hvdWxkIHVzZSB0aGUKPiAr ICogREVGSU5FX0RSTV9HRU1fU0hNRU1fRk9QUygpIG1hY3JvLgo+ICsgKgo+ICsgKiBSZXR1cm5z Ogo+ICsgKiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUu Cj4gKyAqLwoKQmV0d2VlbiBjbWEgaGVscGVycywgZ2VtIHNobWVtIGhlbHBlcnMgYW5kIHRoZSBk cm1fZ2VtX21tYXAgd2Ugbm93IGhhdmUKcXVpdGUgYSBiaXQgYSBjb25mdXNpb24gb2YgbW1hcCBm dW5jdGlvbnMuIEkgdGhpbmsgaXQnZCBiZSBnb29kIHRvIHVwZGF0ZQp0aGUga2VybmVsZG9jIGZv ciBkcm1fZ2VtX21tYXAoKSB0byBwb2ludCBhdCB0aGVzZSBoZXJlIChib3RoIHRoZSBzaG1lbQph bmQgY21hIHZlcnNpb24pLCBzbyB0aGF0IHBlb3BsZSBwcmVmZXIgdG8gdXNlIHRoZXNlIGhlbHBl cnMgaGVyZS4gRGlyZWN0CmNhbGwgdG8gZHJtX2dlbV9tbWFwIHdvdWxkIG9ubHkgYmUgbmVlZGVk IGlmIHlvdSB3YW50IHRvIHVzZSB5b3VyIG93bgp2bV9vcHMuCgo+ICtpbnQgZHJtX2dlbV9zaG1l bV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiAr ewo+ICsJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbTsKPiArCWludCByZXQ7Cj4g Kwo+ICsJcmV0ID0gZHJtX2dlbV9tbWFwKGZpbHAsIHZtYSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJl dHVybiByZXQ7Cj4gKwo+ICsJc2htZW0gPSB0b19kcm1fZ2VtX3NobWVtX29iaih2bWEtPnZtX3By aXZhdGVfZGF0YSk7Cj4gKwo+ICsJcmV0ID0gZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXMoc2htZW0p Owo+ICsJaWYgKHJldCkgewo+ICsJCWRybV9nZW1fdm1fY2xvc2Uodm1hKTsKPiArCQlyZXR1cm4g cmV0Owo+ICsJfQo+ICsKPiArCS8qIFZNX1BGTk1BUCB3YXMgc2V0IGJ5IGRybV9nZW1fbW1hcCgp ICovCj4gKwl2bWEtPnZtX2ZsYWdzICY9IH5WTV9QRk5NQVA7Cj4gKwl2bWEtPnZtX2ZsYWdzIHw9 IFZNX01JWEVETUFQOwo+ICsJdm1hLT52bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZt YS0+dm1fZmxhZ3MpOwo+ICsKPiArCWZwdXQodm1hLT52bV9maWxlKTsKPiArCXZtYS0+dm1fZmls ZSA9IGdldF9maWxlKHNobWVtLT5iYXNlLmZpbHApOwo+ICsJLyogUmVtb3ZlIHRoZSBmYWtlIG9m ZnNldCAqLwo+ICsJdm1hLT52bV9wZ29mZiAtPSBkcm1fdm1hX25vZGVfc3RhcnQoJnNobWVtLT5i YXNlLnZtYV9ub2RlKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQ TChkcm1fZ2VtX3NobWVtX21tYXApOwoKTG9va2luZyB0aHJvdWdoIHlvdXIgbW1hcCBjb2RlIHRo ZXJlJ3MgMiBiaXRzOgotIHNobWVtIGlzbid0IGNvaGVyZW50LCBpZiB5b3UgdHJ5IHRvIGFjdHVh bGx5IGJ1ZmZlciBzaGFyZSB0aGlzIHdpdGgKICBwcmltZSBJIGV4cGVjdCBpdCdsbCBmYWlsIGJh ZGx5LiBXZSdkIG5lZWQgYmVnaW4vZW5kX2NwdV9hY2Nlc3MKICBjYWxsYmFja3MgaW4gZG1hX2J1 Zl9vcHMgdG8gbWFrZSB0aGlzIHdvcmsuIFNvIG5vdCBlbnRpcmVseSBzdXJlIGhvdwogIG11Y2gg dmFsdWUgdGhlcmUgaXMgaW4gaW1wbGVtZW50aW5nIHRoZSBwcmltZSBtbWFwIHN0dWZmIChidXQg ZG9lc24ndAogIGh1cnQgdG8gaGF2ZSBpdCkuCgotIHNobWVtIGFscmVhZHkgaGFzIGFuIG1tYXAg aW1wbGVtdGF0aW9uLCB5b3UgY2FuIGp1c3QgdXNlIHRoYXQuIE5lZWRzIGEKICBzaW1pbGFyIG1t YXAgZm9yd2FyZGluZyB0cmljayBhcyB5b3UndmUgZG9uZSBmb3IgcHJpbWUgbW1hcCwgYnV0IGlu c3RlYWQKICB5b3UgZm9yd2FyZCB0byBvYmotPmJhc2UuZmlscC4gVGhhdCBhbGxvd3MgeW91IHRv IGN1dCBhd2F5IGFsbCB0aGUKICB2bV9vcHMgYW5kIGV2ZXJ5dGhpbmcuIEkgZ3Vlc3Mgd2UgY291 bGQgY2xlYW4gdGhpcyB1cCBpbiBhIGZvbGxvdy11cCwKICBzaW5jZSBpdCBkb2Vzbid0IGhhdmUg YW4gZWZmZWN0IG9uIHRoZSBpbnRlcmZhY2VzIGV4cG9zZWQgdG8gZHJpdmVycy4gQXQKICBsZWFz dCBub3QgYSBiaWcgb25lLCBkcm1fZ2VtX3NobWVtX3ZtX29wcyB3b3VsZCBkaXNhcHBlYXIuCgo+ ICsKPiArLyoqCj4gKyAqIGRybV9nZW1fc2htZW1fcHJpbnRfaW5mbygpIC0gUHJpbnQgJmRybV9n ZW1fc2htZW1fb2JqZWN0IGluZm8gZm9yIGRlYnVnZnMKPiArICogQHA6IERSTSBwcmludGVyCj4g KyAqIEBpbmRlbnQ6IFRhYiBpbmRlbnRhdGlvbiBsZXZlbAo+ICsgKiBAb2JqOiBHRU0gb2JqZWN0 CgpXb3VsZCBiZSBnb29kIHRvIHJlZmVyZW5jZSB0aGUgaG9vayB0aGlzIGlzIG1lYW50IGZvcjoK JmRybV9nZW1fb2JqZWN0X2Z1bmNzLnByaW50X2luZm8sIHNhbWUgZm9yIGFsbCB0aGUgb3RoZXJz LiBGb3IgdGhvc2UKZHJpdmVycyB0aGF0IHdhbnQgdG8gcGljayZjaG9vc2UuCgpDaGVlcnMsIERh bmllbAoKPiArICovCj4gK3ZvaWQgZHJtX2dlbV9zaG1lbV9wcmludF9pbmZvKHN0cnVjdCBkcm1f cHJpbnRlciAqcCwgdW5zaWduZWQgaW50IGluZGVudCwKPiArCQkJICAgICAgY29uc3Qgc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmopCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBkcm1fZ2VtX3NobWVt X29iamVjdCAqc2htZW0gPSB0b19kcm1fZ2VtX3NobWVtX29iaihvYmopOwo+ICsKPiArCWRybV9w cmludGZfaW5kZW50KHAsIGluZGVudCwgInBhZ2VzX3VzZV9jb3VudD0ldVxuIiwgc2htZW0tPnBh Z2VzX3VzZV9jb3VudCk7Cj4gKwlkcm1fcHJpbnRmX2luZGVudChwLCBpbmRlbnQsICJ2bWFwX3Vz ZV9jb3VudD0ldVxuIiwgc2htZW0tPnZtYXBfdXNlX2NvdW50KTsKPiArCWRybV9wcmludGZfaW5k ZW50KHAsIGluZGVudCwgInZhZGRyPSVwXG4iLCBzaG1lbS0+dmFkZHIpOwo+ICt9Cj4gK0VYUE9S VF9TWU1CT0woZHJtX2dlbV9zaG1lbV9wcmludF9pbmZvKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1f Z2VtX3NobWVtX2dldF9zZ190YWJsZSAtIFByb3ZpZGUgYSBzY2F0dGVyL2dhdGhlciB0YWJsZSBv ZiBwaW5uZWQKPiArICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlcyBmb3IgYSBz aG1lbSBHRU0gb2JqZWN0Cj4gKyAqIEBvYmo6IEdFTSBvYmplY3QKPiArICoKPiArICogVGhpcyBm dW5jdGlvbiBleHBvcnRzIGEgc2NhdHRlci9nYXRoZXIgdGFibGUgc3VpdGFibGUgZm9yIFBSSU1F IHVzYWdlIGJ5Cj4gKyAqIGNhbGxpbmcgdGhlIHN0YW5kYXJkIERNQSBtYXBwaW5nIEFQSS4KPiAr ICoKPiArICogUmV0dXJuczoKPiArICogQSBwb2ludGVyIHRvIHRoZSBzY2F0dGVyL2dhdGhlciB0 YWJsZSBvZiBwaW5uZWQgcGFnZXMgb3IgTlVMTCBvbiBmYWlsdXJlLgo+ICsgKi8KPiArc3RydWN0 IHNnX3RhYmxlICpkcm1fZ2VtX3NobWVtX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKPiArewo+ICsJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRv X2RybV9nZW1fc2htZW1fb2JqKG9iaik7Cj4gKwo+ICsJcmV0dXJuIGRybV9wcmltZV9wYWdlc190 b19zZyhzaG1lbS0+cGFnZXMsIG9iai0+c2l6ZSA+PiBQQUdFX1NISUZUKTsKPiArfQo+ICtFWFBP UlRfU1lNQk9MX0dQTChkcm1fZ2VtX3NobWVtX2dldF9zZ190YWJsZSk7Cj4gKwo+ICsvKioKPiAr ICogZHJtX2dlbV9zaG1lbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgLSBQcm9kdWNlIGEgc2htZW0g R0VNIG9iamVjdCBmcm9tCj4gKyAqICAgICAgICAgICAgICAgICBhbm90aGVyIGRyaXZlcidzIHNj YXR0ZXIvZ2F0aGVyIHRhYmxlIG9mIHBpbm5lZCBwYWdlcwo+ICsgKiBAZGV2OiBEZXZpY2UgdG8g aW1wb3J0IGludG8KPiArICogQGF0dGFjaDogRE1BLUJVRiBhdHRhY2htZW50Cj4gKyAqIEBzZ3Q6 IFNjYXR0ZXIvZ2F0aGVyIHRhYmxlIG9mIHBpbm5lZCBwYWdlcwo+ICsgKgo+ICsgKiBUaGlzIGZ1 bmN0aW9uIGltcG9ydHMgYSBzY2F0dGVyL2dhdGhlciB0YWJsZSBleHBvcnRlZCB2aWEgRE1BLUJV RiBieQo+ICsgKiBhbm90aGVyIGRyaXZlci4gRHJpdmVycyB0aGF0IHVzZSB0aGUgc2htZW0gaGVs cGVycyBzaG91bGQgc2V0IHRoaXMgYXMgdGhlaXIKPiArICogJmRybV9kcml2ZXIuZ2VtX3ByaW1l X2ltcG9ydF9zZ190YWJsZSBjYWxsYmFjay4KPiArICoKPiArICogUmV0dXJuczoKPiArICogQSBw b2ludGVyIHRvIGEgbmV3bHkgY3JlYXRlZCBHRU0gb2JqZWN0IG9yIGFuIEVSUl9QVFItZW5jb2Rl ZCBuZWdhdGl2ZQo+ICsgKiBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKyAqLwo+ICtzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKgo+ICtkcm1fZ2VtX3NobWVtX3ByaW1lX2ltcG9ydF9zZ190YWJsZShz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkJICAgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1l bnQgKmF0dGFjaCwKPiArCQkJCSAgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCkKPiArewo+ICsJc2l6 ZV90IHNpemUgPSBQQUdFX0FMSUdOKGF0dGFjaC0+ZG1hYnVmLT5zaXplKTsKPiArCXNpemVfdCBu cGFnZXMgPSBzaXplID4+IFBBR0VfU0hJRlQ7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmpl Y3QgKnNobWVtOwo+ICsJaW50IHJldDsKPiArCj4gKwlzaG1lbSA9IGRybV9nZW1fc2htZW1fY3Jl YXRlKGRldiwgc2l6ZSk7Cj4gKwlpZiAoSVNfRVJSKHNobWVtKSkKPiArCQlyZXR1cm4gRVJSX0NB U1Qoc2htZW0pOwo+ICsKPiArCXNobWVtLT5wYWdlcyA9IGt2bWFsbG9jX2FycmF5KG5wYWdlcywg c2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKPiArCWlmICghc2htZW0tPnBhZ2Vz KSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3RvIGVycl9mcmVlX2dlbTsKPiArCX0KPiAr Cj4gKwlyZXQgPSBkcm1fcHJpbWVfc2dfdG9fcGFnZV9hZGRyX2FycmF5cyhzZ3QsIHNobWVtLT5w YWdlcywgTlVMTCwgbnBhZ2VzKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCWdvdG8gZXJyX2ZyZWVf YXJyYXk7Cj4gKwo+ICsJc2htZW0tPnNndCA9IHNndDsKPiArCXNobWVtLT5wYWdlc191c2VfY291 bnQgPSAxOyAvKiBQZXJtYW5lbnRseSBwaW5uZWQgZnJvbSBvdXIgcG9pbnQgb2YgdmlldyAqLwo+ ICsKPiArCURSTV9ERUJVR19QUklNRSgic2l6ZSA9ICV6dVxuIiwgc2l6ZSk7Cj4gKwo+ICsJcmV0 dXJuICZzaG1lbS0+YmFzZTsKPiArCj4gK2Vycl9mcmVlX2FycmF5Ogo+ICsJa3ZmcmVlKHNobWVt LT5wYWdlcyk7Cj4gK2Vycl9mcmVlX2dlbToKPiArCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tl ZCgmc2htZW0tPmJhc2UpOwo+ICsKPiArCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gK30KPiArRVhQ T1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9wcmltZV9pbXBvcnRfc2dfdGFibGUpOwo+IGRp ZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oIGIvaW5jbHVkZS9k cm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMDAwMDAwLi4yNmIwNWUwNjQwN2QKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvaW5jbHVk ZS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuaAo+IEBAIC0wLDAgKzEsMTUzIEBACj4gKy8qIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCj4gKwo+ICsjaWZuZGVmIF9fRFJNX0dF TV9TSE1FTV9IRUxQRVJfSF9fCj4gKyNkZWZpbmUgX19EUk1fR0VNX1NITUVNX0hFTFBFUl9IX18K PiArCj4gKyNpbmNsdWRlIDxsaW51eC9mcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW0uaD4KPiAr I2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybV9maWxlLmg+ Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9pb2N0bC5o Pgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcmltZS5oPgo+ICsKPiArc3RydWN0IGRtYV9idWZfYXR0 YWNobWVudDsKPiArc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iOwo+ICtzdHJ1Y3QgZHJtX3By aW50ZXI7Cj4gK3N0cnVjdCBzZ190YWJsZTsKPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgZHJtX2dl bV9zaG1lbV9vYmplY3QgLSBHRU0gb2JqZWN0IGJhY2tlZCBieSBzaG1lbQo+ICsgKi8KPiArc3Ry dWN0IGRybV9nZW1fc2htZW1fb2JqZWN0IHsKPiArCS8qKgo+ICsJICogQGJhc2U6IEJhc2UgR0VN IG9iamVjdAo+ICsJICovCj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgYmFzZTsKPiArCj4gKwkv KioKPiArCSAqIEBwYWdlc19sb2NrOiBQcm90ZWN0cyB0aGUgcGFnZSB0YWJsZSBhbmQgdXNlIGNv dW50Cj4gKwkgKi8KPiArCXN0cnVjdCBtdXRleCBwYWdlc19sb2NrOwo+ICsKPiArCS8qKgo+ICsJ ICogQHBhZ2VzOiBQYWdlIHRhYmxlCj4gKwkgKi8KPiArCXN0cnVjdCBwYWdlICoqcGFnZXM7Cj4g Kwo+ICsJLyoqCj4gKwkgKiBAcGFnZXNfdXNlX2NvdW50Ogo+ICsJICoKPiArCSAqIFJlZmVyZW5j ZSBjb3VudCBvbiB0aGUgcGFnZXMgdGFibGUuCj4gKwkgKiBUaGUgcGFnZXMgYXJlIHB1dCB3aGVu IHRoZSBjb3VudCByZWFjaGVzIHplcm8uCj4gKwkgKi8KPiArCXVuc2lnbmVkIGludCBwYWdlc191 c2VfY291bnQ7Cj4gKwo+ICsJLyoqCj4gKwkgKiBAcGFnZXNfbWFya19kaXJ0eV9vbl9wdXQ6Cj4g KwkgKgo+ICsJICogTWFyayBwYWdlcyBhcyBkaXJ0eSB3aGVuIHRoZXkgYXJlIHB1dC4KPiArCSAq Lwo+ICsJdW5zaWduZWQgaW50IHBhZ2VzX21hcmtfZGlydHlfb25fcHV0ICAgIDogMTsKPiArCj4g KwkvKioKPiArCSAqIEBwYWdlc19tYXJrX2FjY2Vzc2VkX29uX3B1dDoKPiArCSAqCj4gKwkgKiBN YXJrIHBhZ2VzIGFzIGFjY2Vzc2VkIHdoZW4gdGhleSBhcmUgcHV0Lgo+ICsJICovCj4gKwl1bnNp Z25lZCBpbnQgcGFnZXNfbWFya19hY2Nlc3NlZF9vbl9wdXQgOiAxOwo+ICsKPiArCS8qKgo+ICsJ ICogQHNndDogU2NhdHRlci9nYXRoZXIgdGFibGUgZm9yIGltcG9ydGVkIFBSSU1FIGJ1ZmZlcnMK PiArCSAqLwo+ICsJc3RydWN0IHNnX3RhYmxlICpzZ3Q7Cj4gKwo+ICsJLyoqCj4gKwkgKiBAdm1h cF9sb2NrOiBQcm90ZWN0cyB0aGUgdm1hcCBhZGRyZXNzIGFuZCB1c2UgY291bnQKPiArCSAqLwo+ ICsJc3RydWN0IG11dGV4IHZtYXBfbG9jazsKPiArCj4gKwkvKioKPiArCSAqIEB2YWRkcjogS2Vy bmVsIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgYmFja2luZyBtZW1vcnkKPiArCSAqLwo+ICsJdm9p ZCAqdmFkZHI7Cj4gKwo+ICsJLyoqCj4gKwkgKiBAdm1hcF91c2VfY291bnQ6Cj4gKwkgKgo+ICsJ ICogUmVmZXJlbmNlIGNvdW50IG9uIHRoZSB2aXJ0dWFsIGFkZHJlc3MuCj4gKwkgKiBUaGUgYWRk cmVzcyBhcmUgdW4tbWFwcGVkIHdoZW4gdGhlIGNvdW50IHJlYWNoZXMgemVyby4KPiArCSAqLwo+ ICsJdW5zaWduZWQgaW50IHZtYXBfdXNlX2NvdW50Owo+ICt9Owo+ICsKPiArI2RlZmluZSB0b19k cm1fZ2VtX3NobWVtX29iaihvYmopIFwKPiArCWNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBkcm1f Z2VtX3NobWVtX29iamVjdCwgYmFzZSkKPiArCj4gKy8qKgo+ICsgKiBERUZJTkVfRFJNX0dFTV9T SE1FTV9GT1BTKCkgLSBNYWNybyB0byBnZW5lcmF0ZSBmaWxlIG9wZXJhdGlvbnMgZm9yIHNobWVt IGRyaXZlcnMKPiArICogQG5hbWU6IG5hbWUgZm9yIHRoZSBnZW5lcmF0ZWQgc3RydWN0dXJlCj4g KyAqCj4gKyAqIFRoaXMgbWFjcm8gYXV0b2dlbmVyYXRlcyBhIHN1aXRhYmxlICZzdHJ1Y3QgZmls ZV9vcGVyYXRpb25zIGZvciBzaG1lbSBiYXNlZAo+ICsgKiBkcml2ZXJzLCB3aGljaCBjYW4gYmUg YXNzaWduZWQgdG8gJmRybV9kcml2ZXIuZm9wcy4gTm90ZSB0aGF0IHRoaXMgc3RydWN0dXJlCj4g KyAqIGNhbm5vdCBiZSBzaGFyZWQgYmV0d2VlbiBkcml2ZXJzLCBiZWNhdXNlIGl0IGNvbnRhaW5z IGEgcmVmZXJlbmNlIHRvIHRoZQo+ICsgKiBjdXJyZW50IG1vZHVsZSB1c2luZyBUSElTX01PRFVM RS4KPiArICoKPiArICogTm90ZSB0aGF0IHRoZSBkZWNsYXJhdGlvbiBpcyBhbHJlYWR5IG1hcmtl ZCBhcyBzdGF0aWMgLSBpZiB5b3UgbmVlZCBhCj4gKyAqIG5vbi1zdGF0aWMgdmVyc2lvbiBvZiB0 aGlzIHlvdSdyZSBwcm9iYWJseSBkb2luZyBpdCB3cm9uZyBhbmQgd2lsbCBicmVhayB0aGUKPiAr ICogVEhJU19NT0RVTEUgcmVmZXJlbmNlIGJ5IGFjY2lkZW50Lgo+ICsgKi8KPiArI2RlZmluZSBE RUZJTkVfRFJNX0dFTV9TSE1FTV9GT1BTKG5hbWUpIFwKPiArCXN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZmlsZV9vcGVyYXRpb25zIG5hbWUgPSB7XAo+ICsJCS5vd25lcgkJPSBUSElTX01PRFVMRSxcCj4g KwkJLm9wZW4JCT0gZHJtX29wZW4sXAo+ICsJCS5yZWxlYXNlCT0gZHJtX3JlbGVhc2UsXAo+ICsJ CS51bmxvY2tlZF9pb2N0bAk9IGRybV9pb2N0bCxcCj4gKwkJLmNvbXBhdF9pb2N0bAk9IGRybV9j b21wYXRfaW9jdGwsXAo+ICsJCS5wb2xsCQk9IGRybV9wb2xsLFwKPiArCQkucmVhZAkJPSBkcm1f cmVhZCxcCj4gKwkJLmxsc2VlawkJPSBub29wX2xsc2VlayxcCj4gKwkJLm1tYXAJCT0gZHJtX2dl bV9zaG1lbV9tbWFwLCBcCj4gKwl9Cj4gKwo+ICtzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3Qg KmRybV9nZW1fc2htZW1fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHNpemVfdCBzaXpl KTsKPiArdm9pZCBkcm1fZ2VtX3NobWVtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqKTsKPiArCj4gK2ludCBkcm1fZ2VtX3NobWVtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dl bV9zaG1lbV9vYmplY3QgKnNobWVtKTsKPiArdm9pZCBkcm1fZ2VtX3NobWVtX3B1dF9wYWdlcyhz dHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKTsKPiAraW50IGRybV9nZW1fc2htZW1f cGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiArdm9pZCBkcm1fZ2VtX3NobWVtX3Vu cGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiArdm9pZCAqZHJtX2dlbV9zaG1lbV92 bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiArdm9pZCBkcm1fZ2VtX3NobWVtX3Z1 bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpOwo+ICsKPiAraW50 IGRybV9nZW1fc2htZW1fZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlLCBzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAo+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIg KmFyZ3MpOwo+ICsKPiAraW50IGRybV9nZW1fc2htZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwg c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ICsKPiArZXh0ZXJuIGNvbnN0IHN0cnVjdCB2 bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fZ2VtX3NobWVtX3ZtX29wczsKPiArCj4gK3ZvaWQgZHJt X2dlbV9zaG1lbV9wcmludF9pbmZvKHN0cnVjdCBkcm1fcHJpbnRlciAqcCwgdW5zaWduZWQgaW50 IGluZGVudCwKPiArCQkJICAgICAgY29uc3Qgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ ICsKPiArc3RydWN0IHNnX3RhYmxlICpkcm1fZ2VtX3NobWVtX2dldF9zZ190YWJsZShzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqCj4gK2RybV9n ZW1fc2htZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4g KwkJCQkgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAo+ICsJCQkJICAgIHN0 cnVjdCBzZ190YWJsZSAqc2d0KTsKPiArCj4gKy8qKgo+ICsgKiBEUk1fR0VNX1NITUVNX0RSSVZF Ul9PUFMgLSBEZWZhdWx0IHNobWVtIEdFTSBvcGVyYXRpb25zCj4gKyAqCj4gKyAqIFRoaXMgbWFj cm8gcHJvdmlkZXMgYSBzaG9ydGN1dCBmb3Igc2V0dGluZyB0aGUgc2htZW0gR0VNIG9wZXJhdGlv bnMgaW4KPiArICogdGhlICZkcm1fZHJpdmVyIHN0cnVjdHVyZS4KPiArICovCj4gKyNkZWZpbmUg RFJNX0dFTV9TSE1FTV9EUklWRVJfT1BTIFwKPiArCS5wcmltZV9oYW5kbGVfdG9fZmQJPSBkcm1f Z2VtX3ByaW1lX2hhbmRsZV90b19mZCwgXAo+ICsJLnByaW1lX2ZkX3RvX2hhbmRsZQk9IGRybV9n ZW1fcHJpbWVfZmRfdG9faGFuZGxlLCBcCj4gKwkuZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSA9 IGRybV9nZW1fc2htZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlLCBcCj4gKwkuZ2VtX3ByaW1lX21t YXAJCT0gZHJtX2dlbV9wcmltZV9tbWFwLCBcCj4gKwkuZHVtYl9jcmVhdGUJCT0gZHJtX2dlbV9z aG1lbV9kdW1iX2NyZWF0ZQo+ICsKPiArI2VuZGlmIC8qIF9fRFJNX0dFTV9TSE1FTV9IRUxQRVJf SF9fICovCj4gLS0gCj4gMi4xNS4xCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KPiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4gZHJpLWRldmVsQGxp c3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vZHJpLWRldmVsCgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVl ciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApk cmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==