From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [Intel-gfx] [PATCH v5 3/5] drm/gem: Add drm_gem_object_funcs Date: Thu, 1 Nov 2018 09:36:36 +0100 Message-ID: <20181101083635.GY21967@phenom.ffwll.local> References: <20181017130454.44292-1-noralf@tronnes.org> <20181017130454.44292-4-noralf@tronnes.org> <579b9bcb-1812-884c-6b56-4834d6c5fe8e@tronnes.org> 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 4991B6E443 for ; Thu, 1 Nov 2018 08:36:40 +0000 (UTC) Received: by mail-ed1-x544.google.com with SMTP id t10-v6so15885513eds.12 for ; Thu, 01 Nov 2018 01:36:40 -0700 (PDT) Content-Disposition: inline In-Reply-To: <579b9bcb-1812-884c-6b56-4834d6c5fe8e@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: sam@ravnborg.org, intel-gfx@lists.freedesktop.org, david@lechnology.com, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBOb3YgMDEsIDIwMTggYXQgMTI6Mzc6MTRBTSArMDEwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IAo+IERlbiAxNy4xMC4yMDE4IDE1LjA0LCBza3JldiBOb3JhbGYgVHLDuG5uZXM6 Cj4gPiBUaGlzIGFkZHMgYW4gb3B0aW9uYWwgZnVuY3Rpb24gdGFibGUgb24gR0VNIG9iamVjdHMu Cj4gPiBUaGUgbWFpbiBiZW5lZml0IGlzIGZvciBkcml2ZXJzIHRoYXQgc3VwcG9ydCBtb3JlIHRo YW4gb25lIHR5cGUgb2YKPiA+IG1lbW9yeSAoc2htZW0sdnJhbSxjbWEpIGZvciB0aGVpciBidWZm ZXJzIGRlcGVuZGluZyBvbiB0aGUgaGFyZHdhcmUgaXQKPiA+IHJ1bnMgb24uIFdpdGggdGhlIGNh bGxiYWNrcyBhdHRhY2hlZCB0byB0aGUgR0VNIG9iamVjdCBpdHNlbGYsIGl0IGlzCj4gPiBlYXNp ZXIgdG8gaGF2ZSBjb3JlIGhlbHBlcnMgZm9yIHRoZSB0aGUgdmFyaW91cyBidWZmZXIgdHlwZXMu IFRoZSBkcml2ZXIKPiA+IG9ubHkgaGFzIHRvIG1ha2UgdGhlIGRlY2lzaW9uIGFib3V0IGJ1ZmZl ciB0eXBlIG9uIEdFTSBvYmplY3QgY3JlYXRpb24KPiA+IGFuZCBhbGwgb3RoZXIgY2FsbGJhY2tz IGNhbiBiZSBoYW5kbGVkIGJ5IHRoZSBjaG9zZW4gaGVscGVyLgo+ID4gCj4gPiBkcm1fZHJpdmVy LT5nZW1fcHJpbWVfcmVzX29iaiBoYXMgbm90IGJlZW4gYWRkZWQgc2luY2UgdGhlcmUncyBhIHRv ZG8gdG8KPiA+IHB1dCBhIHJlc2VydmF0aW9uX29iamVjdCBpbnRvIGRybV9nZW1fb2JqZWN0Lgo+ ID4gCj4gPiB2MjogRHJvcCBkcm1fZ2VtX29iamVjdF9mdW5jcy0+cHJpbWVfbW1hcCBpbiBmYXZv dXIgb2YKPiA+IGRybV9nZW1fcHJpbWVfbW1hcCgpIChEYW5pZWwgVmV0dGVyKQo+ID4gCj4gPiB2 MToKPiA+IC0gZHJtX2dlbV9vYmplY3RfZnVuY3MubWFwIC0+IC5wcmltZV9tYXAgbGV0IGl0IG9u bHkgZG8gUFJJTUUgbW1hcCBsaWtlCj4gPiAgICB0aGUgZnVuY3Rpb24gaXQgc3VwZXJzZWVkcyAo RGFuaWVsIFZldHRlcikKPiA+IC0gRmxpcCBhcm91bmQgdGhlIGlmIGxhZGRlcnMgYW5kIG1ha2Ug b2JqLT5mdW5jcyB0aGUgZmlyc3QgY2hvaWNlCj4gPiAgICBoaWdobGlnaHRpbmcgdGhlIGZhY3Qg dGhhdCB0aGlzIHRoZSBuZXcgZGVmYXVsdCB3YXkgb2YgZG9pbmcgaXQKPiA+ICAgIChEYW5pZWwg VmV0dGVyKQo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBOb3JhbGYgVHLDuG5uZXMgPG5vcmFsZkB0 cm9ubmVzLm9yZz4KPiA+IEFja2VkLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZm d2xsLmNoPgo+ID4gLS0tCj4gCj4gTm93IHRoYXQgdGhlIHNobWVtIGhlbHBlciBoYXMgbm93IGJl ZW4gcG9zdHBvbmVkIHRvIHRoZSBmdXR1cmUgSSdtCj4gdGhpbmtpbmcgYWJvdXQgZG9pbmcgc29t ZSBwcmVwIHdvcmsgaW4gdGlueWRybSB0byBsb29zZW4gdGhlIGNvdXBsaW5nIHRvCj4gdGhlIGNt YSBoZWxwZXIgKGxvbmd0ZXJtIGdvYWwgaXMgdHJ5IGFuZCBnZXQgcmlkIG9mIHRpbnlkcm0ua28g YWx0b2dldGhlcikuCj4gCj4gRmlyc3Qgc3RlcCBjb3VsZCBiZSB0byBhZGQgYSBkcm1fZHJpdmVy LT5nZW1fY3JlYXRlX29iamVjdCBmdW5jdGlvbiBmb3IKPiB0aGUgY21hIGhlbHBlciB0aGF0IGdp dmVzIHRoZSBkZWZhdWx0IGdlbSBmdW5jdGlvbnM6Cj4gCj4gc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fZ2VtX29iamVjdF9mdW5jcyBkcm1fY21hX2dlbV9mdW5jcyA9IHsKPiDCoMKgwqAgLmZyZWUg PSBkcm1fZ2VtX2NtYV9mcmVlX29iamVjdCwKPiDCoMKgwqAgLnByaW50X2luZm8gPSBkcm1fZ2Vt X2NtYV9wcmludF9pbmZvLAo+IMKgwqDCoCAuZ2V0X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJp bWVfZ2V0X3NnX3RhYmxlLAo+IMKgwqDCoCAudm1hcCA9IGRybV9nZW1fY21hX3ByaW1lX3ZtYXAs Cj4gwqDCoMKgIC52bV9vcHMgPSAmZHJtX2dlbV9jbWFfdm1fb3BzLAo+IH07Cj4gCj4gc3RydWN0 IGRybV9nZW1fb2JqZWN0ICoKPiBkcm1fY21hX2dlbV9jcmVhdGVfb2JqZWN0X2RlZmF1bHRfZnVu Y3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUpCj4gewo+IMKgwqDCoCBzdHJ1 Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpjbWFfb2JqOwo+IAo+IMKgwqDCoCBjbWFfb2JqID0ga3ph bGxvYyhzaXplb2YoKmNtYV9vYmopLCBHRlBfS0VSTkVMKTsKPiDCoMKgwqAgaWYgKCFjbWFfb2Jq KQo+IMKgwqDCoCDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4gCj4gwqDCoMKgIGNtYV9vYmotPmJhc2Uu ZnVuY3MgPSAmZHJtX2NtYV9nZW1fZnVuY3M7Cj4gCj4gwqDCoMKgIHJldHVybiBjbWFfb2JqOwo+ IH0KPiAKPiB0aW55ZHJtIGRyaXZlcnMgcmVsaWVzIG9uIHRoZSBidWZmZXIgYWx3YXlzIGhhdmlu ZyBhIHZpcnR1YWwgYWRkcmVzcywgc28KPiBmb3IgaW1wb3J0ZWQgYnVmZmVycyB0aGVyZSdzIGN1 cnJlbnRseSBhIGN1c3RvbSAuZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZQo+IHRoYXQgdm1hcHMg dGhlIGJ1ZmZlci4gSW4gb3JkZXIgdG8gdXNlIHRoZSBkZWZhdWx0IGNtYSBoZWxwZXIgZ2VtCj4g ZnVuY3Rpb25zIEkgcGxhbiB0byBkbyB0aGUgdm1hcHBpbmcgb24gZnJhbWVidWZmZXIgY3JlYXRp b24gaW5zdGVhZC4KPiAKPiBJIGNvdWxkIGNyZWF0ZSBhIHBhaXIgb2YgZnVuY3Rpb25zIChmYl9j cmVhdGUvZGVzdHJveSkgaW4gdGhlIGNtYSBoZWxwZXIKPiB0byBhY2hpZXZlIHRoYXQ6Cj4gCj4g c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqCj4gZHJtX2NtYV9mYl9jcmVhdGVfdm1hcF93aXRoX2Z1 bmNzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZQo+ICpmaWxlLAo+IMKg wqDCoCDCoMKgwqAgwqDCoMKgIMKgwqDCoCDCoCBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfZmJfY21k MiAqbW9kZV9jbWQsCj4gwqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIMKgIGNvbnN0IHN0cnVj dCBkcm1fZnJhbWVidWZmZXJfZnVuY3MgKmZ1bmNzKQo+IHsKPiDCoMKgwqAgc3RydWN0IGRybV9n ZW1fY21hX29iamVjdCAqY21hOwo+IMKgwqDCoCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsK PiDCoMKgwqAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW07Cj4gCj4gwqDCoMKgIGZiID0gZHJt X2dlbV9mYl9jcmVhdGVfd2l0aF9mdW5jcyhkZXYsIGZpbGUsIG1vZGVfY21kLCBmdW5jcyk7Cj4g wqDCoMKgIGlmIChJU19FUlIoZmIpKQo+IMKgwqDCoCDCoMKgwqAgcmV0dXJuIGZiOwo+IAo+IMKg wqDCoCBnZW0gPSBkcm1fZ2VtX2ZiX2dldF9vYmooZmIsIDApOwo+IMKgwqDCoCBjbWEgPSB0b19k cm1fZ2VtX2NtYV9vYmooZ2VtKTsKPiAKPiDCoMKgwqAgaWYgKGdlbS0+aW1wb3J0X2F0dGFjaCkK PiDCoMKgwqAgwqDCoMKgIGNtYS0+dmFkZHIgPSBkbWFfYnVmX3ZtYXAoZ2VtLT5pbXBvcnRfYXR0 YWNoLT5kbWFidWYpOwo+IAo+IMKgwqDCoCBpZiAoIWNtYS0+dmFkZHIpIHsKPiDCoMKgwqAgwqDC oMKgIERSTV9ERVZfREVCVUcoZGV2LT5kZXYsICJGYWlsZWQgdG8gdm1hcCBidWZmZXJcbiIpOwo+ IMKgwqDCoCDCoMKgwqAgZHJtX2dlbV9mYl9kZXN0cm95KGZiKTsKPiDCoMKgwqAgwqDCoMKgIHJl dHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+IMKgwqDCoCB9Cj4gCj4gwqDCoMKgIHJldHVybiBmYjsK PiB9Cj4gCj4gdm9pZCBkcm1fY21hX2ZiX2Rlc3Ryb3lfdnVubWFwKHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiKQo+IHsKPiDCoMKgwqAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW0gPSBkcm1f Z2VtX2ZiX2dldF9vYmooZmIsIDApOwo+IMKgwqDCoCBzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0 ICpjbWEgPSB0b19kcm1fZ2VtX2NtYV9vYmooZ2VtKTsKPiAKPiDCoMKgwqAgaWYgKGdlbS0+aW1w b3J0X2F0dGFjaCkgewo+IMKgwqDCoCDCoMKgwqAgZG1hX2J1Zl92bWFwKGdlbS0+aW1wb3J0X2F0 dGFjaC0+ZG1hYnVmLCBjbWEtPnZhZGRyKTsKPiDCoMKgwqAgwqDCoMKgIGNtYS0+dmFkZHIgPSBO VUxMOwo+IMKgwqDCoCB9Cj4gwqDCoMKgIGRybV9nZW1fZmJfZGVzdHJveShmYik7Cj4gfQo+IAo+ IAo+IFRoaXMgYXBwcm9hY2ggbWVhbnMgdGhhdCBJIHdvdWxkIGhhdmUgdG8gZG8gdGhlIHNhbWUg Zm9yIHRoZSBmdXR1cmUgc2htZW0KPiBoZWxwZXIgYXMgd2VsbC4gSWYgSSBhZGQgYSB2YWRkciB0 byB0aGUgZ2VtIG9iamVjdCwgSSBjb3VsZCBjcmVhdGUgYQo+IGNvbW1vbiBwYWlyIG9mIGZ1bmN0 aW9ucyBpbiB0aGUgZ2VtIGZiIGhlbHBlciB0aGF0IGNhbiBiZSB1c2VkIHJlZ2FyZGxlc3MKPiBv ZiB0aGUgdW5kZXJseWluZyBidWZmZXI6Cj4gCj4gc3RydWN0IGRybV9nZW1fb2JqZWN0IHsKPiDC oMKgwqAgdm9pZCAqdmFkZHI7Cj4gfTsKPiAKPiBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoKPiBk cm1fZ2VtX2ZiX2NyZWF0ZV92bWFwX3dpdGhfZnVuY3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwg c3RydWN0IGRybV9maWxlCj4gKmZpbGUsCj4gwqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIMKg IGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICptb2RlX2NtZCwKPiDCoMKgwqAgwqDCoMKg IMKgwqDCoCDCoMKgwqAgwqAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyAqZnVu Y3MpCj4gewo+IMKgwqDCoCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKPiDCoMKgwqAgc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4gwqDCoMKgIHZvaWQgKnZhZGRyOwo+IAo+IMKgwqDC oCBmYiA9IGRybV9nZW1fZmJfY3JlYXRlX3dpdGhfZnVuY3MoZGV2LCBmaWxlLCBtb2RlX2NtZCwg ZnVuY3MpOwo+IMKgwqDCoCBpZiAoSVNfRVJSKGZiKSkKPiDCoMKgwqAgwqDCoMKgIHJldHVybiBm YjsKPiAKPiDCoMKgwqAgaWYgKG9iai0+aW1wb3J0X2F0dGFjaCkKPiDCoMKgwqAgwqDCoMKgIHZh ZGRyID0gZG1hX2J1Zl92bWFwKG9iai0+aW1wb3J0X2F0dGFjaC0+ZG1hYnVmKTsKPiDCoMKgwqAg ZWxzZQo+IMKgwqDCoCDCoMKgwqAgdmFkZHIgPSBkcm1fZ2VtX3ZtYXAob2JqKTsKPiAKPiDCoMKg wqAgaWYgKCF2YWRkciB8fCBJU19FUlIodmFkZHIpKSB7Cj4gwqDCoMKgIMKgwqDCoCBEUk1fREVW X0RFQlVHKGRldi0+ZGV2LCAiRmFpbGVkIHRvIHZtYXAgYnVmZmVyXG4iKTsKPiDCoMKgwqAgwqDC oMKgIGRybV9nZW1fZmJfZGVzdHJveShmYik7Cj4gwqDCoMKgIMKgwqDCoCByZXR1cm4gRVJSX1BU UigtRU5PTUVNKTsKPiDCoMKgwqAgfQo+IAo+IMKgwqDCoCBvYmotPnZhZGRyID0gdmFkZHI7Cj4g Cj4gwqDCoMKgIHJldHVybiBmYjsKPiB9Cj4gCj4gdm9pZCBkcm1fZ2VtX2ZiX2Rlc3Ryb3lfdnVu bWFwKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQo+IHsKPiDCoMKgwqAgc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmogPSBkcm1fZ2VtX2ZiX2dldF9vYmooZmIsIDApOwo+IAo+IMKgwqDCoCBp ZiAob2JqLT5pbXBvcnRfYXR0YWNoKSB7Cj4gwqDCoMKgIMKgwqDCoCBkbWFfYnVmX3ZtYXAob2Jq LT5pbXBvcnRfYXR0YWNoLT5kbWFidWYsIG9iai0+dmFkZHIpOwo+IMKgwqDCoCDCoMKgwqAgb2Jq LT52YWRkciA9IE5VTEw7Cj4gwqDCoMKgIH0gZWxzZSB7Cj4gwqDCoMKgIMKgwqDCoCBkcm1fZ2Vt X3Z1bm1hcChvYmosIG9iai0+dmFkZHIpOwo+IMKgwqDCoCB9Cj4gwqDCoMKgIGRybV9nZW1fZmJf ZGVzdHJveShmYik7Cj4gfQo+IAo+IAo+IEl0IGlzIGFsc28gcG9zc2libGUgdG8gdGFrZSB0aGlz IGEgYml0IGZ1cnRoZXIgYW5kIG1vdmUgdGhlIGRtYV9idWZfdm1hcCgpCj4gY2FsbCBpbnRvIGRy bV9nZW1fdm1hcCgpIGFuZCBsZXQgaXQgcHJvdmlkZSBhbiBhZGRyZXNzIGZvciBpbXBvcnRlZAo+ IGJ1ZmZlcnMgYXMgd2VsbDoKPiAKPiBzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qgewo+IMKgwqDCoCBz dHJ1Y3QgbXV0ZXggdm1hcF9sb2NrOwo+IMKgwqDCoCB1bnNpZ25lZCBpbnQgdm1hcF91c2VfY291 bnQ7Cj4gwqDCoMKgIHZvaWQgKnZhZGRyOwo+IH07Cj4gCj4gdm9pZCAqZHJtX2dlbV92bWFwKHN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+IHsKPiDCoMKgwqAgdm9pZCAqdmFkZHI7Cj4gwqDC oMKgIGludCByZXQ7Cj4gCj4gwqDCoMKgIHJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgm b2JqLT52bWFwX2xvY2spOwo+IMKgwqDCoCBpZiAocmV0KQo+IMKgwqDCoCDCoMKgwqAgcmV0dXJu IEVSUl9QVFIocmV0KTsKPiAKPiDCoMKgwqAgaWYgKG9iai0+dm1hcF91c2VfY291bnQrKyA+IDAp IHsKPiDCoMKgwqAgwqDCoMKgIHZhZGRyID0gb2JqLT52YWRkcjsKPiDCoMKgwqAgwqDCoMKgIGdv dG8gb3V0X3VubG9jazsKPiDCoMKgwqAgfQo+IAo+IMKgwqDCoCBpZiAob2JqLT5pbXBvcnRfYXR0 YWNoKQo+IMKgwqDCoCDCoMKgwqAgdmFkZHIgPSBkbWFfYnVmX3ZtYXAob2JqLT5pbXBvcnRfYXR0 YWNoLT5kbWFidWYpOwo+IMKgwqDCoCBlbHNlIGlmIChvYmotPmZ1bmNzICYmIG9iai0+ZnVuY3Mt PnZtYXApCj4gwqDCoMKgIMKgwqDCoCB2YWRkciA9IG9iai0+ZnVuY3MtPnZtYXAob2JqKTsKPiDC oMKgwqAgZWxzZSBpZiAob2JqLT5kZXYtPmRyaXZlci0+Z2VtX3ByaW1lX3ZtYXApCj4gwqDCoMKg IMKgwqDCoCB2YWRkciA9IG9iai0+ZGV2LT5kcml2ZXItPmdlbV9wcmltZV92bWFwKG9iaik7Cj4g wqDCoMKgIGVsc2UKPiDCoMKgwqAgwqDCoMKgIHZhZGRyID0gRVJSX1BUUigtRU9QTk9UU1VQUCk7 Cj4gCj4gwqDCoMKgIGlmICghdmFkZHIpCj4gwqDCoMKgIMKgwqDCoCB2YWRkciA9IEVSUl9QVFIo LUVOT01FTSk7Cj4gwqDCoMKgIGlmIChJU19FUlIodmFkZHIpKSB7Cj4gwqDCoMKgIMKgwqDCoCBv YmotPnZtYXBfdXNlX2NvdW50ID0gMDsKPiDCoMKgwqAgwqDCoMKgIGdvdG8gb3V0X3VubG9jazsK PiDCoMKgwqAgfQo+IAo+IMKgwqDCoCBvYmotPnZhZGRyID0gdmFkZHI7Cj4gb3V0X3VubG9jazoK PiDCoMKgwqAgbXV0ZXhfdW5sb2NrKCZvYmotPnZtYXBfbG9jayk7Cj4gCj4gwqDCoMKgIHJldHVy biB2YWRkcjsKPiB9Cj4gCj4gdm9pZCBkcm1fZ2VtX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKPiB7Cj4gwqDCoMKgIG11dGV4X2xvY2soJm9iai0+dm1hcF9sb2NrKTsKPiAKPiDC oMKgwqAgaWYgKFdBUk5fT05fT05DRSghb2JqLT52bWFwX3VzZV9jb3VudCkpCj4gwqDCoMKgIMKg wqDCoCBnb3RvIG91dF91bmxvY2s7Cj4gCj4gwqDCoMKgIGlmICgtLW9iai0+dm1hcF91c2VfY291 bnQgPiAwKQo+IMKgwqDCoCDCoMKgwqAgZ290byBvdXRfdW5sb2NrOwo+IAo+IMKgwqDCoCBpZiAo b2JqLT5pbXBvcnRfYXR0YWNoKQo+IMKgwqDCoCDCoMKgwqAgZG1hX2J1Zl92dW5tYXAob2JqLT5p bXBvcnRfYXR0YWNoLT5kbWFidWYsIG9iai0+dmFkZHIpOwo+IMKgwqDCoCBlbHNlIGlmIChvYmot PmZ1bmNzICYmIG9iai0+ZnVuY3MtPnZ1bm1hcCkKPiDCoMKgwqAgwqDCoMKgIG9iai0+ZnVuY3Mt PnZ1bm1hcChvYmosIG9iai0+dmFkZHIpOwo+IMKgwqDCoCBlbHNlIGlmIChvYmotPmRldi0+ZHJp dmVyLT5nZW1fcHJpbWVfdnVubWFwKQo+IMKgwqDCoCDCoMKgwqAgb2JqLT5kZXYtPmRyaXZlci0+ Z2VtX3ByaW1lX3Z1bm1hcChvYmosIG9iai0+dmFkZHIpOwo+IG91dF91bmxvY2s6Cj4gwqDCoMKg IG11dGV4X3VubG9jaygmb2JqLT52bWFwX2xvY2spOwo+IH0KPiAKPiAKPiBXaGF0IGRvIHlvdSB0 aGluaz8KCkZvciB0aGUgcmVhc29ucyB5b3UndmUgcG9pbnRlZCBvdXQgaW4geW91ciBvdGhlciBt YWlsLCB2bWFwIGlzCmNvbXBsaWNhdGVkLiBFdmVuIG1vcmUgY29tcGxpY2F0ZWQgd2hlbiB5b3Ug d2FudCB0byBtaXggaXQgd2l0aCBidWZmZXIKc2hhcmluZy4gT24gcmVhc29uYWJsZSBtb2Rlcm4g YXJjaGl0ZWN0dXJlcyAoYW55dGhpbmcgcHBjLCB4ODYgYW5kIGFybTgrKQppdCBqdXN0IGFtb3Vu dHMgdG8gZ2V0dGluZyB0aGUgY2FjaGUgZmx1c2hpbmcgcmlnaHQsIGJ1dCBvbiBvbGRlciBhcm0g eW91CmhhdmUgYWxsIHRoYXQgZnVuIHJtayBsYWlkIG91dCB3aXRoIGluY29tcGF0aWJsZSBtYXBw aW5ncyBhbmQgc3R1ZmYuCgpPbiB0b3Agd2UgaGF2ZSBzdWJzeXN0ZW1zIHRoYXQga2luZGEgbXVk ZGxlIG9uLCBsaWtlIHNwaSwgc28gbm8gY2xlYXIKaW5kaWNhdGlvbiB3aGF0IHdvdWxkIGJlIGJl c3QgZnJvbSB0aG9zZSBlaXRoZXIuCgpJIGhvbmVzdGx5IGhhdmUgbm8gaWRlYSB3aGF0J3MgdGhl IGJlc3QgYXBwcm9hY2guCgpZb3VyIGRyYWZ0IHNob3VsZCB3b3JrLCBidXQgd2UgbWlnaHQgZW5j b2RlIHZtYXAgZXhwZWN0YXRpbnMgdGhhdCBqdXN0CmRvbid0IHJlYWxseSB3b3JrIGluIGdlbmVy YWwuCi1EYW5pZWwKCj4gCj4gTm9yYWxmLgo+IAo+ID4gICBkcml2ZXJzL2dwdS9kcm0vZHJtX2Ns aWVudC5jIHwgIDEyICsrLS0KPiA+ICAgZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYyAgICB8IDEw OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQo+ID4gICBkcml2ZXJzL2dwdS9k cm0vZHJtX3ByaW1lLmMgIHwgIDM0ICsrKysrKy0tLS0tCj4gPiAgIGluY2x1ZGUvZHJtL2RybV9n ZW0uaCAgICAgICAgfCAxMzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwo+ID4gICA0IGZpbGVzIGNoYW5nZWQsIDI1MiBpbnNlcnRpb25zKCspLCAzNCBkZWxldGlv bnMoLSkKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY2xpZW50LmMg Yi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NsaWVudC5jCj4gPiBpbmRleCAxN2Q5YTY0ZTg4NWUuLmVj YTczMzE3NjJlNCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY2xpZW50LmMK PiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY2xpZW50LmMKPiA+IEBAIC04MCw4ICs4MCw3 IEBAIGludCBkcm1fY2xpZW50X25ldyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJt X2NsaWVudF9kZXYgKmNsaWVudCwKPiA+ICAgewo+ID4gICAJaW50IHJldDsKPiA+IC0JaWYgKCFk cm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpIHx8Cj4gPiAtCSAgICAh ZGV2LT5kcml2ZXItPmR1bWJfY3JlYXRlIHx8ICFkZXYtPmRyaXZlci0+Z2VtX3ByaW1lX3ZtYXAp Cj4gPiArCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSB8 fCAhZGV2LT5kcml2ZXItPmR1bWJfY3JlYXRlKQo+ID4gICAJCXJldHVybiAtRU9QTk9UU1VQUDsK PiA+ICAgCWlmIChmdW5jcyAmJiAhdHJ5X21vZHVsZV9nZXQoZnVuY3MtPm93bmVyKSkKPiA+IEBA IC0yMTIsOCArMjExLDcgQEAgc3RhdGljIHZvaWQgZHJtX2NsaWVudF9idWZmZXJfZGVsZXRlKHN0 cnVjdCBkcm1fY2xpZW50X2J1ZmZlciAqYnVmZmVyKQo+ID4gICB7Cj4gPiAgIAlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gYnVmZmVyLT5jbGllbnQtPmRldjsKPiA+IC0JaWYgKGJ1ZmZlci0+dmFk ZHIgJiYgZGV2LT5kcml2ZXItPmdlbV9wcmltZV92dW5tYXApCj4gPiAtCQlkZXYtPmRyaXZlci0+ Z2VtX3ByaW1lX3Z1bm1hcChidWZmZXItPmdlbSwgYnVmZmVyLT52YWRkcik7Cj4gPiArCWRybV9n ZW1fdnVubWFwKGJ1ZmZlci0+Z2VtLCBidWZmZXItPnZhZGRyKTsKPiA+ICAgCWlmIChidWZmZXIt PmdlbSkKPiA+ICAgCQlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQoYnVmZmVyLT5nZW0pOwo+ ID4gQEAgLTI2Niw5ICsyNjQsOSBAQCBkcm1fY2xpZW50X2J1ZmZlcl9jcmVhdGUoc3RydWN0IGRy bV9jbGllbnRfZGV2ICpjbGllbnQsIHUzMiB3aWR0aCwgdTMyIGhlaWdodCwgdQo+ID4gICAJICog ZmRfaW5zdGFsbCBzdGVwIG91dCBvZiB0aGUgZHJpdmVyIGJhY2tlbmQgaG9va3MsIHRvIG1ha2Ug dGhhdAo+ID4gICAJICogZmluYWwgc3RlcCBvcHRpb25hbCBmb3IgaW50ZXJuYWwgdXNlcnMuCj4g PiAgIAkgKi8KPiA+IC0JdmFkZHIgPSBkZXYtPmRyaXZlci0+Z2VtX3ByaW1lX3ZtYXAob2JqKTsK PiA+IC0JaWYgKCF2YWRkcikgewo+ID4gLQkJcmV0ID0gLUVOT01FTTsKPiA+ICsJdmFkZHIgPSBk cm1fZ2VtX3ZtYXAob2JqKTsKPiA+ICsJaWYgKElTX0VSUih2YWRkcikpIHsKPiA+ICsJCXJldCA9 IFBUUl9FUlIodmFkZHIpOwo+ID4gICAJCWdvdG8gZXJyX2RlbGV0ZTsKPiA+ICAgCX0KPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2Ry bV9nZW0uYwo+ID4gaW5kZXggNTEyMDc4ZWJkOTdiLi44YjU1ZWNlOTc5NjcgMTAwNjQ0Cj4gPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v ZHJtX2dlbS5jCj4gPiBAQCAtMjU3LDcgKzI1Nyw5IEBAIGRybV9nZW1fb2JqZWN0X3JlbGVhc2Vf aGFuZGxlKGludCBpZCwgdm9pZCAqcHRyLCB2b2lkICpkYXRhKQo+ID4gICAJc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmogPSBwdHI7Cj4gPiAgIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2Jq LT5kZXY7Cj4gPiAtCWlmIChkZXYtPmRyaXZlci0+Z2VtX2Nsb3NlX29iamVjdCkKPiA+ICsJaWYg KG9iai0+ZnVuY3MgJiYgb2JqLT5mdW5jcy0+Y2xvc2UpCj4gPiArCQlvYmotPmZ1bmNzLT5jbG9z ZShvYmosIGZpbGVfcHJpdik7Cj4gPiArCWVsc2UgaWYgKGRldi0+ZHJpdmVyLT5nZW1fY2xvc2Vf b2JqZWN0KQo+ID4gICAJCWRldi0+ZHJpdmVyLT5nZW1fY2xvc2Vfb2JqZWN0KG9iaiwgZmlsZV9w cml2KTsKPiA+ICAgCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX1BSSU1F KSkKPiA+IEBAIC00MTAsNyArNDEyLDExIEBAIGRybV9nZW1faGFuZGxlX2NyZWF0ZV90YWlsKHN0 cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAo+ID4gICAJaWYgKHJldCkKPiA+ICAgCQlnb3RvIGVy cl9yZW1vdmU7Cj4gPiAtCWlmIChkZXYtPmRyaXZlci0+Z2VtX29wZW5fb2JqZWN0KSB7Cj4gPiAr CWlmIChvYmotPmZ1bmNzICYmIG9iai0+ZnVuY3MtPm9wZW4pIHsKPiA+ICsJCXJldCA9IG9iai0+ ZnVuY3MtPm9wZW4ob2JqLCBmaWxlX3ByaXYpOwo+ID4gKwkJaWYgKHJldCkKPiA+ICsJCQlnb3Rv IGVycl9yZXZva2U7Cj4gPiArCX0gZWxzZSBpZiAoZGV2LT5kcml2ZXItPmdlbV9vcGVuX29iamVj dCkgewo+ID4gICAJCXJldCA9IGRldi0+ZHJpdmVyLT5nZW1fb3Blbl9vYmplY3Qob2JqLCBmaWxl X3ByaXYpOwo+ID4gICAJCWlmIChyZXQpCj4gPiAgIAkJCWdvdG8gZXJyX3Jldm9rZTsKPiA+IEBA IC04MzUsNyArODQxLDkgQEAgZHJtX2dlbV9vYmplY3RfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikK PiA+ICAgCQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRybV9nZW1fb2JqZWN0LCByZWZjb3Vu dCk7Cj4gPiAgIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7Cj4gPiAtCWlmIChk ZXYtPmRyaXZlci0+Z2VtX2ZyZWVfb2JqZWN0X3VubG9ja2VkKSB7Cj4gPiArCWlmIChvYmotPmZ1 bmNzKSB7Cj4gPiArCQlvYmotPmZ1bmNzLT5mcmVlKG9iaik7Cj4gPiArCX0gZWxzZSBpZiAoZGV2 LT5kcml2ZXItPmdlbV9mcmVlX29iamVjdF91bmxvY2tlZCkgewo+ID4gICAJCWRldi0+ZHJpdmVy LT5nZW1fZnJlZV9vYmplY3RfdW5sb2NrZWQob2JqKTsKPiA+ICAgCX0gZWxzZSBpZiAoZGV2LT5k cml2ZXItPmdlbV9mcmVlX29iamVjdCkgewo+ID4gICAJCVdBUk5fT04oIW11dGV4X2lzX2xvY2tl ZCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKPiA+IEBAIC04NjQsMTMgKzg3MiwxMyBAQCBkcm1fZ2Vt X29iamVjdF9wdXRfdW5sb2NrZWQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4gPiAgIAlk ZXYgPSBvYmotPmRldjsKPiA+IC0JaWYgKGRldi0+ZHJpdmVyLT5nZW1fZnJlZV9vYmplY3RfdW5s b2NrZWQpIHsKPiA+IC0JCWtyZWZfcHV0KCZvYmotPnJlZmNvdW50LCBkcm1fZ2VtX29iamVjdF9m cmVlKTsKPiA+IC0JfSBlbHNlIHsKPiA+ICsJaWYgKGRldi0+ZHJpdmVyLT5nZW1fZnJlZV9vYmpl Y3QpIHsKPiA+ICAgCQltaWdodF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gPiAgIAkJaWYg KGtyZWZfcHV0X211dGV4KCZvYmotPnJlZmNvdW50LCBkcm1fZ2VtX29iamVjdF9mcmVlLAo+ID4g ICAJCQkJJmRldi0+c3RydWN0X211dGV4KSkKPiA+ICAgCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0 cnVjdF9tdXRleCk7Cj4gPiArCX0gZWxzZSB7Cj4gPiArCQlrcmVmX3B1dCgmb2JqLT5yZWZjb3Vu dCwgZHJtX2dlbV9vYmplY3RfZnJlZSk7Cj4gPiAgIAl9Cj4gPiAgIH0KPiA+ICAgRVhQT1JUX1NZ TUJPTChkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQpOwo+ID4gQEAgLTk2MCwxMSArOTY4LDE0 IEBAIGludCBkcm1fZ2VtX21tYXBfb2JqKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB1bnNp Z25lZCBsb25nIG9ial9zaXplLAo+ID4gICAJaWYgKG9ial9zaXplIDwgdm1hLT52bV9lbmQgLSB2 bWEtPnZtX3N0YXJ0KQo+ID4gICAJCXJldHVybiAtRUlOVkFMOwo+ID4gLQlpZiAoIWRldi0+ZHJp dmVyLT5nZW1fdm1fb3BzKQo+ID4gKwlpZiAob2JqLT5mdW5jcyAmJiBvYmotPmZ1bmNzLT52bV9v cHMpCj4gPiArCQl2bWEtPnZtX29wcyA9IG9iai0+ZnVuY3MtPnZtX29wczsKPiA+ICsJZWxzZSBp ZiAoZGV2LT5kcml2ZXItPmdlbV92bV9vcHMpCj4gPiArCQl2bWEtPnZtX29wcyA9IGRldi0+ZHJp dmVyLT5nZW1fdm1fb3BzOwo+ID4gKwllbHNlCj4gPiAgIAkJcmV0dXJuIC1FSU5WQUw7Cj4gPiAg IAl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPIHwgVk1fUEZOTUFQIHwgVk1fRE9OVEVYUEFORCB8IFZN X0RPTlREVU1QOwo+ID4gLQl2bWEtPnZtX29wcyA9IGRldi0+ZHJpdmVyLT5nZW1fdm1fb3BzOwo+ ID4gICAJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBvYmo7Cj4gPiAgIAl2bWEtPnZtX3BhZ2VfcHJv dCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtPnZtX2ZsYWdzKSk7 Cj4gPiAgIAl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQodm1hLT52bV9wYWdl X3Byb3QpOwo+ID4gQEAgLTEwNjYsNiArMTA3Nyw4NiBAQCB2b2lkIGRybV9nZW1fcHJpbnRfaW5m byhzdHJ1Y3QgZHJtX3ByaW50ZXIgKnAsIHVuc2lnbmVkIGludCBpbmRlbnQsCj4gPiAgIAlkcm1f cHJpbnRmX2luZGVudChwLCBpbmRlbnQsICJpbXBvcnRlZD0lc1xuIiwKPiA+ICAgCQkJICBvYmot PmltcG9ydF9hdHRhY2ggPyAieWVzIiA6ICJubyIpOwo+ID4gLQlpZiAob2JqLT5kZXYtPmRyaXZl ci0+Z2VtX3ByaW50X2luZm8pCj4gPiArCWlmIChvYmotPmZ1bmNzICYmIG9iai0+ZnVuY3MtPnBy aW50X2luZm8pCj4gPiArCQlvYmotPmZ1bmNzLT5wcmludF9pbmZvKHAsIGluZGVudCwgb2JqKTsK PiA+ICsJZWxzZSBpZiAob2JqLT5kZXYtPmRyaXZlci0+Z2VtX3ByaW50X2luZm8pCj4gPiAgIAkJ b2JqLT5kZXYtPmRyaXZlci0+Z2VtX3ByaW50X2luZm8ocCwgaW5kZW50LCBvYmopOwo+ID4gICB9 Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2dlbV9waW4gLSBQaW4gYmFja2luZyBidWZmZXIg aW4gbWVtb3J5Cj4gPiArICogQG9iajogR0VNIG9iamVjdAo+ID4gKyAqCj4gPiArICogTWFrZSBz dXJlIHRoZSBiYWNraW5nIGJ1ZmZlciBpcyBwaW5uZWQgaW4gbWVtb3J5Lgo+ID4gKyAqCj4gPiAr ICogUmV0dXJuczoKPiA+ICsgKiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2Rl IG9uIGZhaWx1cmUuCj4gPiArICovCj4gPiAraW50IGRybV9nZW1fcGluKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqKQo+ID4gK3sKPiA+ICsJaWYgKG9iai0+ZnVuY3MgJiYgb2JqLT5mdW5jcy0+ cGluKQo+ID4gKwkJcmV0dXJuIG9iai0+ZnVuY3MtPnBpbihvYmopOwo+ID4gKwllbHNlIGlmIChv YmotPmRldi0+ZHJpdmVyLT5nZW1fcHJpbWVfcGluKQo+ID4gKwkJcmV0dXJuIG9iai0+ZGV2LT5k cml2ZXItPmdlbV9wcmltZV9waW4ob2JqKTsKPiA+ICsJZWxzZQo+ID4gKwkJcmV0dXJuIDA7Cj4g PiArfQo+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2dlbV9waW4pOwo+ID4gKwo+ID4gKy8qKgo+ID4g KyAqIGRybV9nZW1fdW5waW4gLSBVbnBpbiBiYWNraW5nIGJ1ZmZlciBmcm9tIG1lbW9yeQo+ID4g KyAqIEBvYmo6IEdFTSBvYmplY3QKPiA+ICsgKgo+ID4gKyAqIFJlbGF4IHRoZSByZXF1aXJlbWVu dCB0aGF0IHRoZSBiYWNraW5nIGJ1ZmZlciBpcyBwaW5uZWQgaW4gbWVtb3J5Lgo+ID4gKyAqLwo+ ID4gK3ZvaWQgZHJtX2dlbV91bnBpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiA+ICt7 Cj4gPiArCWlmIChvYmotPmZ1bmNzICYmIG9iai0+ZnVuY3MtPnVucGluKQo+ID4gKwkJb2JqLT5m dW5jcy0+dW5waW4ob2JqKTsKPiA+ICsJZWxzZSBpZiAob2JqLT5kZXYtPmRyaXZlci0+Z2VtX3By aW1lX3VucGluKQo+ID4gKwkJb2JqLT5kZXYtPmRyaXZlci0+Z2VtX3ByaW1lX3VucGluKG9iaik7 Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2dlbV91bnBpbik7Cj4gPiArCj4gPiArLyoq Cj4gPiArICogZHJtX2dlbV92bWFwIC0gTWFwIGJ1ZmZlciBpbnRvIGtlcm5lbCB2aXJ0dWFsIGFk ZHJlc3Mgc3BhY2UKPiA+ICsgKiBAb2JqOiBHRU0gb2JqZWN0Cj4gPiArICoKPiA+ICsgKiBSZXR1 cm5zOgo+ID4gKyAqIEEgdmlydHVhbCBwb2ludGVyIHRvIGEgbmV3bHkgY3JlYXRlZCBHRU0gb2Jq ZWN0IG9yIGFuIEVSUl9QVFItZW5jb2RlZCBuZWdhdGl2ZQo+ID4gKyAqIGVycm9yIGNvZGUgb24g ZmFpbHVyZS4KPiA+ICsgKi8KPiA+ICt2b2lkICpkcm1fZ2VtX3ZtYXAoc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmopCj4gPiArewo+ID4gKwl2b2lkICp2YWRkcjsKPiA+ICsKPiA+ICsJaWYgKG9i ai0+ZnVuY3MgJiYgb2JqLT5mdW5jcy0+dm1hcCkKPiA+ICsJCXZhZGRyID0gb2JqLT5mdW5jcy0+ dm1hcChvYmopOwo+ID4gKwllbHNlIGlmIChvYmotPmRldi0+ZHJpdmVyLT5nZW1fcHJpbWVfdm1h cCkKPiA+ICsJCXZhZGRyID0gb2JqLT5kZXYtPmRyaXZlci0+Z2VtX3ByaW1lX3ZtYXAob2JqKTsK PiA+ICsJZWxzZQo+ID4gKwkJdmFkZHIgPSBFUlJfUFRSKC1FT1BOT1RTVVBQKTsKPiA+ICsKPiA+ ICsJaWYgKCF2YWRkcikKPiA+ICsJCXZhZGRyID0gRVJSX1BUUigtRU5PTUVNKTsKPiA+ICsKPiA+ ICsJcmV0dXJuIHZhZGRyOwo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9nZW1fdm1hcCk7 Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2dlbV92dW5tYXAgLSBSZW1vdmUgYnVmZmVyIG1h cHBpbmcgZnJvbSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlCj4gPiArICogQG9iajogR0VN IG9iamVjdAo+ID4gKyAqIEB2YWRkcjogVmlydHVhbCBhZGRyZXNzIChjYW4gYmUgTlVMTCkKPiA+ ICsgKi8KPiA+ICt2b2lkIGRybV9nZW1fdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq LCB2b2lkICp2YWRkcikKPiA+ICt7Cj4gPiArCWlmICghdmFkZHIpCj4gPiArCQlyZXR1cm47Cj4g PiArCj4gPiArCWlmIChvYmotPmZ1bmNzICYmIG9iai0+ZnVuY3MtPnZ1bm1hcCkKPiA+ICsJCW9i ai0+ZnVuY3MtPnZ1bm1hcChvYmosIHZhZGRyKTsKPiA+ICsJZWxzZSBpZiAob2JqLT5kZXYtPmRy aXZlci0+Z2VtX3ByaW1lX3Z1bm1hcCkKPiA+ICsJCW9iai0+ZGV2LT5kcml2ZXItPmdlbV9wcmlt ZV92dW5tYXAob2JqLCB2YWRkcik7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2dlbV92 dW5tYXApOwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJpbWUuYyBiL2Ry aXZlcnMvZ3B1L2RybS9kcm1fcHJpbWUuYwo+ID4gaW5kZXggNDJhYmY5OGMxZDRhLi5lMGFiNTIx M2VmYTcgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3ByaW1lLmMKPiA+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJpbWUuYwo+ID4gQEAgLTE5OSw3ICsxOTksNiBAQCBp bnQgZHJtX2dlbV9tYXBfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmLAo+ID4gICB7Cj4g PiAgIAlzdHJ1Y3QgZHJtX3ByaW1lX2F0dGFjaG1lbnQgKnByaW1lX2F0dGFjaDsKPiA+ICAgCXN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gZG1hX2J1Zi0+cHJpdjsKPiA+IC0Jc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2Owo+ID4gICAJcHJpbWVfYXR0YWNoID0ga3phbGxvYyhz aXplb2YoKnByaW1lX2F0dGFjaCksIEdGUF9LRVJORUwpOwo+ID4gICAJaWYgKCFwcmltZV9hdHRh Y2gpCj4gPiBAQCAtMjA4LDEwICsyMDcsNyBAQCBpbnQgZHJtX2dlbV9tYXBfYXR0YWNoKHN0cnVj dCBkbWFfYnVmICpkbWFfYnVmLAo+ID4gICAJcHJpbWVfYXR0YWNoLT5kaXIgPSBETUFfTk9ORTsK PiA+ICAgCWF0dGFjaC0+cHJpdiA9IHByaW1lX2F0dGFjaDsKPiA+IC0JaWYgKCFkZXYtPmRyaXZl ci0+Z2VtX3ByaW1lX3BpbikKPiA+IC0JCXJldHVybiAwOwo+ID4gLQo+ID4gLQlyZXR1cm4gZGV2 LT5kcml2ZXItPmdlbV9wcmltZV9waW4ob2JqKTsKPiA+ICsJcmV0dXJuIGRybV9nZW1fcGluKG9i aik7Cj4gPiAgIH0KPiA+ICAgRVhQT1JUX1NZTUJPTChkcm1fZ2VtX21hcF9hdHRhY2gpOwo+ID4g QEAgLTIyOCw3ICsyMjQsNiBAQCB2b2lkIGRybV9nZW1fbWFwX2RldGFjaChzdHJ1Y3QgZG1hX2J1 ZiAqZG1hX2J1ZiwKPiA+ICAgewo+ID4gICAJc3RydWN0IGRybV9wcmltZV9hdHRhY2htZW50ICpw cmltZV9hdHRhY2ggPSBhdHRhY2gtPnByaXY7Cj4gPiAgIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaiA9IGRtYV9idWYtPnByaXY7Cj4gPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmot PmRldjsKPiA+ICAgCWlmIChwcmltZV9hdHRhY2gpIHsKPiA+ICAgCQlzdHJ1Y3Qgc2dfdGFibGUg KnNndCA9IHByaW1lX2F0dGFjaC0+c2d0Owo+ID4gQEAgLTI0Nyw4ICsyNDIsNyBAQCB2b2lkIGRy bV9nZW1fbWFwX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZiwKPiA+ICAgCQlhdHRhY2gt PnByaXYgPSBOVUxMOwo+ID4gICAJfQo+ID4gLQlpZiAoZGV2LT5kcml2ZXItPmdlbV9wcmltZV91 bnBpbikKPiA+IC0JCWRldi0+ZHJpdmVyLT5nZW1fcHJpbWVfdW5waW4ob2JqKTsKPiA+ICsJZHJt X2dlbV91bnBpbihvYmopOwo+ID4gICB9Cj4gPiAgIEVYUE9SVF9TWU1CT0woZHJtX2dlbV9tYXBf ZGV0YWNoKTsKPiA+IEBAIC0zMTAsNyArMzA0LDEwIEBAIHN0cnVjdCBzZ190YWJsZSAqZHJtX2dl bV9tYXBfZG1hX2J1ZihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCj4gPiAgIAlp ZiAoV0FSTl9PTihwcmltZV9hdHRhY2gtPmRpciAhPSBETUFfTk9ORSkpCj4gPiAgIAkJcmV0dXJu IEVSUl9QVFIoLUVCVVNZKTsKPiA+IC0Jc2d0ID0gb2JqLT5kZXYtPmRyaXZlci0+Z2VtX3ByaW1l X2dldF9zZ190YWJsZShvYmopOwo+ID4gKwlpZiAob2JqLT5mdW5jcykKPiA+ICsJCXNndCA9IG9i ai0+ZnVuY3MtPmdldF9zZ190YWJsZShvYmopOwo+ID4gKwllbHNlCj4gPiArCQlzZ3QgPSBvYmot PmRldi0+ZHJpdmVyLT5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlKG9iaik7Cj4gPiAgIAlpZiAoIUlT X0VSUihzZ3QpKSB7Cj4gPiAgIAkJaWYgKCFkbWFfbWFwX3NnX2F0dHJzKGF0dGFjaC0+ZGV2LCBz Z3QtPnNnbCwgc2d0LT5uZW50cywgZGlyLAo+ID4gQEAgLTQwNiwxMiArNDAzLDEzIEBAIEVYUE9S VF9TWU1CT0woZHJtX2dlbV9kbWFidWZfcmVsZWFzZSk7Cj4gPiAgIHZvaWQgKmRybV9nZW1fZG1h YnVmX3ZtYXAoc3RydWN0IGRtYV9idWYgKmRtYV9idWYpCj4gPiAgIHsKPiA+ICAgCXN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqID0gZG1hX2J1Zi0+cHJpdjsKPiA+IC0Jc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IG9iai0+ZGV2Owo+ID4gKwl2b2lkICp2YWRkcjsKPiA+IC0JaWYgKGRldi0+ZHJp dmVyLT5nZW1fcHJpbWVfdm1hcCkKPiA+IC0JCXJldHVybiBkZXYtPmRyaXZlci0+Z2VtX3ByaW1l X3ZtYXAob2JqKTsKPiA+IC0JZWxzZQo+ID4gLQkJcmV0dXJuIE5VTEw7Cj4gPiArCXZhZGRyID0g ZHJtX2dlbV92bWFwKG9iaik7Cj4gPiArCWlmIChJU19FUlIodmFkZHIpKQo+ID4gKwkJdmFkZHIg PSBOVUxMOwo+ID4gKwo+ID4gKwlyZXR1cm4gdmFkZHI7Cj4gPiAgIH0KPiA+ICAgRVhQT1JUX1NZ TUJPTChkcm1fZ2VtX2RtYWJ1Zl92bWFwKTsKPiA+IEBAIC00MjYsMTAgKzQyNCw4IEBAIEVYUE9S VF9TWU1CT0woZHJtX2dlbV9kbWFidWZfdm1hcCk7Cj4gPiAgIHZvaWQgZHJtX2dlbV9kbWFidWZf dnVubWFwKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmLCB2b2lkICp2YWRkcikKPiA+ICAgewo+ID4g ICAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBkbWFfYnVmLT5wcml2Owo+ID4gLQlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7Cj4gPiAtCWlmIChkZXYtPmRyaXZlci0+Z2Vt X3ByaW1lX3Z1bm1hcCkKPiA+IC0JCWRldi0+ZHJpdmVyLT5nZW1fcHJpbWVfdnVubWFwKG9iaiwg dmFkZHIpOwo+ID4gKwlkcm1fZ2VtX3Z1bm1hcChvYmosIHZhZGRyKTsKPiA+ICAgfQo+ID4gICBF WFBPUlRfU1lNQk9MKGRybV9nZW1fZG1hYnVmX3Z1bm1hcCk7Cj4gPiBAQCAtNTI5LDcgKzUyNSw5 IEBAIHN0YXRpYyBzdHJ1Y3QgZG1hX2J1ZiAqZXhwb3J0X2FuZF9yZWdpc3Rlcl9vYmplY3Qoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ICAgCQlyZXR1cm4gZG1hYnVmOwo+ID4gICAJfQo+ID4g LQlpZiAoZGV2LT5kcml2ZXItPmdlbV9wcmltZV9leHBvcnQpCj4gPiArCWlmIChvYmotPmZ1bmNz ICYmIG9iai0+ZnVuY3MtPmV4cG9ydCkKPiA+ICsJCWRtYWJ1ZiA9IG9iai0+ZnVuY3MtPmV4cG9y dChvYmosIGZsYWdzKTsKPiA+ICsJZWxzZSBpZiAoZGV2LT5kcml2ZXItPmdlbV9wcmltZV9leHBv cnQpCj4gPiAgIAkJZG1hYnVmID0gZGV2LT5kcml2ZXItPmdlbV9wcmltZV9leHBvcnQoZGV2LCBv YmosIGZsYWdzKTsKPiA+ICAgCWVsc2UKPiA+ICAgCQlkbWFidWYgPSBkcm1fZ2VtX3ByaW1lX2V4 cG9ydChkZXYsIG9iaiwgZmxhZ3MpOwo+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9n ZW0uaCBiL2luY2x1ZGUvZHJtL2RybV9nZW0uaAo+ID4gaW5kZXggMzU4M2I5OGExNzE4Li5mNDY2 Y2U1YmRlMGUgMTAwNjQ0Cj4gPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fZ2VtLmgKPiA+ICsrKyBi L2luY2x1ZGUvZHJtL2RybV9nZW0uaAo+ID4gQEAgLTM4LDYgKzM4LDEyMSBAQAo+ID4gICAjaW5j bHVkZSA8ZHJtL2RybV92bWFfbWFuYWdlci5oPgo+ID4gK3N0cnVjdCBkcm1fZ2VtX29iamVjdDsK PiA+ICsKPiA+ICsvKioKPiA+ICsgKiBzdHJ1Y3QgZHJtX2dlbV9vYmplY3RfZnVuY3MgLSBHRU0g b2JqZWN0IGZ1bmN0aW9ucwo+ID4gKyAqLwo+ID4gK3N0cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5j cyB7Cj4gPiArCS8qKgo+ID4gKwkgKiBAZnJlZToKPiA+ICsJICoKPiA+ICsJICogRGVjb25zdHJ1 Y3RvciBmb3IgZHJtX2dlbV9vYmplY3RzLgo+ID4gKwkgKgo+ID4gKwkgKiBUaGlzIGNhbGxiYWNr IGlzIG1hbmRhdG9yeS4KPiA+ICsJICovCj4gPiArCXZvaWQgKCpmcmVlKShzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaik7Cj4gPiArCj4gPiArCS8qKgo+ID4gKwkgKiBAb3BlbjoKPiA+ICsJICoK PiA+ICsJICogQ2FsbGVkIHVwb24gR0VNIGhhbmRsZSBjcmVhdGlvbi4KPiA+ICsJICoKPiA+ICsJ ICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4KPiA+ICsJICovCj4gPiArCWludCAoKm9wZW4p KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwo+ID4g Kwo+ID4gKwkvKioKPiA+ICsJICogQGNsb3NlOgo+ID4gKwkgKgo+ID4gKwkgKiBDYWxsZWQgdXBv biBHRU0gaGFuZGxlIHJlbGVhc2UuCj4gPiArCSAqCj4gPiArCSAqIFRoaXMgY2FsbGJhY2sgaXMg b3B0aW9uYWwuCj4gPiArCSAqLwo+ID4gKwl2b2lkICgqY2xvc2UpKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwo+ID4gKwo+ID4gKwkvKioKPiA+ICsJ ICogQHByaW50X2luZm86Cj4gPiArCSAqCj4gPiArCSAqIElmIGRyaXZlciBzdWJjbGFzc2VzIHN0 cnVjdCAmZHJtX2dlbV9vYmplY3QsIGl0IGNhbiBpbXBsZW1lbnQgdGhpcwo+ID4gKwkgKiBvcHRp b25hbCBob29rIGZvciBwcmludGluZyBhZGRpdGlvbmFsIGRyaXZlciBzcGVjaWZpYyBpbmZvLgo+ ID4gKwkgKgo+ID4gKwkgKiBkcm1fcHJpbnRmX2luZGVudCgpIHNob3VsZCBiZSB1c2VkIGluIHRo ZSBjYWxsYmFjayBwYXNzaW5nIGl0IHRoZQo+ID4gKwkgKiBpbmRlbnQgYXJndW1lbnQuCj4gPiAr CSAqCj4gPiArCSAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIGZyb20gZHJtX2dlbV9wcmludF9p bmZvKCkuCj4gPiArCSAqCj4gPiArCSAqIFRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwuCj4gPiAr CSAqLwo+ID4gKwl2b2lkICgqcHJpbnRfaW5mbykoc3RydWN0IGRybV9wcmludGVyICpwLCB1bnNp Z25lZCBpbnQgaW5kZW50LAo+ID4gKwkJCSAgIGNvbnN0IHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq b2JqKTsKPiA+ICsKPiA+ICsJLyoqCj4gPiArCSAqIEBleHBvcnQ6Cj4gPiArCSAqCj4gPiArCSAq IEV4cG9ydCBiYWNraW5nIGJ1ZmZlciBhcyBhICZkbWFfYnVmLgo+ID4gKwkgKiBJZiB0aGlzIGlz IG5vdCBzZXQgZHJtX2dlbV9wcmltZV9leHBvcnQoKSBpcyB1c2VkLgo+ID4gKwkgKgo+ID4gKwkg KiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsLgo+ID4gKwkgKi8KPiA+ICsJc3RydWN0IGRtYV9i dWYgKigqZXhwb3J0KShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IGZsYWdzKTsKPiA+ ICsKPiA+ICsJLyoqCj4gPiArCSAqIEBwaW46Cj4gPiArCSAqCj4gPiArCSAqIFBpbiBiYWNraW5n IGJ1ZmZlciBpbiBtZW1vcnkuCj4gPiArCSAqCj4gPiArCSAqIFRoaXMgY2FsbGJhY2sgaXMgb3B0 aW9uYWwuCj4gPiArCSAqLwo+ID4gKwlpbnQgKCpwaW4pKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq b2JqKTsKPiA+ICsKPiA+ICsJLyoqCj4gPiArCSAqIEB1bnBpbjoKPiA+ICsJICoKPiA+ICsJICog VW5waW4gYmFja2luZyBidWZmZXIuCj4gPiArCSAqCj4gPiArCSAqIFRoaXMgY2FsbGJhY2sgaXMg b3B0aW9uYWwuCj4gPiArCSAqLwo+ID4gKwl2b2lkICgqdW5waW4pKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqKTsKPiA+ICsKPiA+ICsJLyoqCj4gPiArCSAqIEBnZXRfc2dfdGFibGU6Cj4gPiAr CSAqCj4gPiArCSAqIFJldHVybnMgYSBTY2F0dGVyLUdhdGhlciB0YWJsZSByZXByZXNlbnRhdGlv biBvZiB0aGUgYnVmZmVyLgo+ID4gKwkgKiBVc2VkIHdoZW4gZXhwb3J0aW5nIGEgYnVmZmVyLgo+ ID4gKwkgKgo+ID4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG1hbmRhdG9yeSBpZiBidWZmZXIgZXhw b3J0IGlzIHN1cHBvcnRlZC4KPiA+ICsJICovCj4gPiArCXN0cnVjdCBzZ190YWJsZSAqKCpnZXRf c2dfdGFibGUpKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiA+ICsKPiA+ICsJLyoqCj4g PiArCSAqIEB2bWFwOgo+ID4gKwkgKgo+ID4gKwkgKiBSZXR1cm5zIGEgdmlydHVhbCBhZGRyZXNz IGZvciB0aGUgYnVmZmVyLgo+ID4gKwkgKgo+ID4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlv bmFsLgo+ID4gKwkgKi8KPiA+ICsJdm9pZCAqKCp2bWFwKShzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaik7Cj4gPiArCj4gPiArCS8qKgo+ID4gKwkgKiBAdnVubWFwOgo+ID4gKwkgKgo+ID4gKwkg KiBSZWxlYXNlcyB0aGUgdGhlIGFkZHJlc3MgcHJldmlvdXNseSByZXR1cm5lZCBieSBAdm1hcC4K PiA+ICsJICoKPiA+ICsJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4KPiA+ICsJICovCj4g PiArCXZvaWQgKCp2dW5tYXApKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB2b2lkICp2YWRk cik7Cj4gPiArCj4gPiArCS8qKgo+ID4gKwkgKiBAdm1fb3BzOgo+ID4gKwkgKgo+ID4gKwkgKiBW aXJ0dWFsIG1lbW9yeSBvcGVyYXRpb25zIHVzZWQgd2l0aCBtbWFwLgo+ID4gKwkgKgo+ID4gKwkg KiBUaGlzIGlzIG9wdGlvbmFsIGJ1dCBuZWNlc3NhcnkgZm9yIG1tYXAgc3VwcG9ydC4KPiA+ICsJ ICovCj4gPiArCWNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqdm1fb3BzOwo+ID4g K307Cj4gPiArCj4gPiAgIC8qKgo+ID4gICAgKiBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgLSBHRU0g YnVmZmVyIG9iamVjdAo+ID4gICAgKgo+ID4gQEAgLTE0Niw2ICsyNjEsMTcgQEAgc3RydWN0IGRy bV9nZW1fb2JqZWN0IHsKPiA+ICAgCSAqIHNpbXBseSBsZWF2ZSBpdCBhcyBOVUxMLgo+ID4gICAJ ICovCj4gPiAgIAlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICppbXBvcnRfYXR0YWNoOwo+ID4g Kwo+ID4gKwkvKioKPiA+ICsJICogQGZ1bmNzOgo+ID4gKwkgKgo+ID4gKwkgKiBPcHRpb25hbCBH RU0gb2JqZWN0IGZ1bmN0aW9ucy4gSWYgdGhpcyBpcyBzZXQsIGl0IHdpbGwgYmUgdXNlZCBpbnN0 ZWFkIG9mIHRoZQo+ID4gKwkgKiBjb3JyZXNwb25kaW5nICZkcm1fZHJpdmVyIEdFTSBjYWxsYmFj a3MuCj4gPiArCSAqCj4gPiArCSAqIE5ldyBkcml2ZXJzIHNob3VsZCB1c2UgdGhpcy4KPiA+ICsJ ICoKPiA+ICsJICovCj4gPiArCWNvbnN0IHN0cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5jcyAqZnVu Y3M7Cj4gPiAgIH07Cj4gPiAgIC8qKgo+ID4gQEAgLTI5Myw0ICs0MTksOSBAQCBpbnQgZHJtX2dl bV9kdW1iX2Rlc3Ryb3koc3RydWN0IGRybV9maWxlICpmaWxlLAo+ID4gICAJCQkgc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKPiA+ICAgCQkJIHVpbnQzMl90IGhhbmRsZSk7Cj4gPiAraW50IGRybV9n ZW1fcGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiA+ICt2b2lkIGRybV9nZW1fdW5w aW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ID4gK3ZvaWQgKmRybV9nZW1fdm1hcChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gPiArdm9pZCBkcm1fZ2VtX3Z1bm1hcChzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpOwo+ID4gKwo+ID4gICAjZW5kaWYg LyogX19EUk1fR0VNX0hfXyAqLwo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIs IEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJp LWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=