From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Kocialkowski Subject: Re: [PATCH i-g-t v3 1/4] chamelium: Calculate CRC from framebuffer instead of hardcoding it Date: Thu, 06 Jul 2017 11:49:36 +0300 Message-ID: <1499330976.1379.6.camel@linux.intel.com> References: <20170705080435.26789-1-paul.kocialkowski@linux.intel.com> <1499286840.20388.4.camel@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6F9BD6E5D2 for ; Thu, 6 Jul 2017 08:49:40 +0000 (UTC) In-Reply-To: <1499286840.20388.4.camel@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Lyude Paul , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org SGksCgpPbiBXZWQsIDIwMTctMDctMDUgYXQgMTY6MzQgLTA0MDAsIEx5dWRlIFBhdWwgd3JvdGU6 Cj4gU28gYSBjb3VwbGUgb2Ygbm90ZXMgaGVyZSB0aGF0IHdpbGwgbWFrZSBpdCBhIGxvdCBlYXNp ZXIgZm9yIG1lIHRvCj4gcmV2aWV3IHRoZXNlIGluIHRoZSBmdXR1cmUKPiAKPiAgKiBXaGVuIHlv dSdyZSBkb2luZyBhIG5ldyByZXZpc2lvbiBvZiBhIHBhdGNoIHNlcmllcywgaXQncyBoZWxwZnVs IHRvCj4gICAga2VlcCBpdCBpbiB0aGUgc2FtZSBlbWFpbCB0aHJlYWQgYXMgdGhlIG9yaWdpbmFs IHYxIHNvIGl0J3MgZWFzaWVyCj4gICAgdG8ga2VlcCB0cmFjayBvZiBpbiBwZW9wbGUncyBtYWls IGNsaWVudHMgKGFzIHdlbGwgYXMgYXZvaWRpbmcKPiAgICBhY2NpZGVudGFsbHkgcmV2aWV3aW5n IG9sZGVyIHBhdGNoIHZlcnNpb25zLiBJIHVzdWFsbHkgZG8gc29tZXRoaW5nCj4gICAgbGlrZSB0 aGlzIChvdGhlciBwcm9qZWN0cyBtaWdodCByZXF1ZXN0IHlvdSBkbyB0aGlzIHNsaWdodGx5Cj4g ICAgZGlmZmVyZW50bHksIGJ1dCB0aGlzIHNob3VsZCBiZSBmaW5lIGhlcmUpOgo+ICAgICAqIFtQ QVRDSCAwLzJdIENsZWFuaW5nIHVwIHRoZSBhbGlnbm1lbnQgb2YgdmFyaW91cyBmb29zCj4gICAg ICAgICogW1BBVENIIDEvMl0gRm9vIHRoZSBiYXIsIG5vdCB0aGUgYmF6Cj4gICAgICAgICogW1BB VENIIDIvMl0gSW50cm9kdWNlIHRoZSBhbWF6aW5nIG5ldyBmb29fYmFyCj4gICAgICAgICogW1BB VENIIHYyIDAvMl0gQ2xlYW5pbmcgdXAgdGhlIGFsaWdubWVudCBvZiB2YXJpb3VzIGZvb3MKPiAg ICAgICAgICAgKiBbUEFUQ0ggdjIgMS8yXSBGb28gdGhlIGJhciwgbm90IHRoZSBiYXoKPiAgICAg ICAgICAgKiBbUEFUQ0ggdjIgMi8yXSBJbnRyb2R1Y2UgdGhlIGFtYXppbmcgbmV3IGZvb19iYXIK PiAgICAgICAgKiBbUEFUQ0ggdjMgMC8yXSBDbGVhbmluZyB1cCB0aGUgYWxpZ25tZW50IG9mIHZh cmlvdXMgZm9vcwo+ICAgICAgICAgICAqIFtQQVRDSCB2MyAxLzJdIEZvbyB0aGUgYmFyLCBub3Qg dGhlIGJhego+ICAgICAgICAgICAqIFtQQVRDSCB2MyAyLzJdIEludHJvZHVjZSB0aGUgYW1hemlu ZyBuZXcgZm9vX2Jhcgo+ICAqIFRyeSBub3QgdG8gZ3JvdXAgdW5yZWxhdGVkIHBhdGNoZXMgdG9n ZXRoZXIgaW4gdGhlIHNhbWUgdGhyZWFkLiBUaGlzCj4gICAgYWxzbyBtYWtlcyBzb3J0aW5nIHRo cm91Z2ggYWxsIG9mIHRoZW0gYSBsaXR0bGUgbW9yZSBkaWZmaWN1bHQuCj4gICogV2hlbiB5b3Ug bWFrZSBuZXcgcmV2aXNpb25zIG9mIHBhdGNoZXMsIGl0J3MgdmVyeSB1c2VmdWwgaWYgeW91IGFs c28KPiAgICBpbmNsdWRlIGEgbGlzdCBvZiBjaGFuZ2VzIHlvdSBtYWRlIHRvIHRoZSBwYXRjaCBz aW5jZSB0aGUgbGFzdAo+ICAgIHJldmlzaW9uLiBJdCBkb2Vzbid0IG5lZWQgdG8gYmUgdmVyeSBm aW5lbHkgZGV0YWlsZWQsIHNvbWV0aGluZyBsaWtlCj4gICAgdGhpcyB3b3VsZCBzdWZmaWNlOgo+ ICAgICAqIFZhcmlvdXMgc3R5bGUgZml4ZXMKPiAgICAgKiBSZW5hbWUgYmF6IHRvIG1vbywgYWRk IGNvdyBub2lzZXMKPiAgICAgKiBTcGxpdCBpbml0X2NvdygpIGludG8gaW5pdF93aGl0ZV9jb3co KSBhbmQgaW5pdF9ibGFja19jb3coKQo+ICAgICAgIGluc3RlYWQgb2YgaGFuZGxpbmcgYm90aCBr aW5kcyBvZiBjb3dzIGluIHRoZSBzYW1lIGZ1bmN0aW9uCj4gICAgICogRml4IGRvY3VtZW50YXRp b24KPiAgICAgRm9yIGludGVsLWdwdS10b29scywgaXQncyBmaW5lIHRvIGp1c3Qgc3RpY2sgdGhp cyBpbiB0aGUgY29tbWl0Cj4gICAgIG1lc3NhZ2UuIE90aGVyIHByb2plY3RzIG1heSByZXF1ZXN0 IHlvdSBwdXQgdGhlIGNoYW5nZWxvZyBiZWxvdyB0aGUKPiAgICAgLS0tLS0gcmlnaHQgYWJvdmUg dGhlIGRpZmYgc3RhdHMgKHRoaXMgYWxsb3dzIHRoZSBjb21tZW50cyBub3QgdG8KPiAgICAgZ2V0 IGluY2x1ZGVkIGluIHRoZSBmaW5hbCBjb21taXQgbWVzc2FnZSkKPiAgKiBVbmxlc3MgdGhleSBh cmUgYWxsIHZlcnkgc21hbGwgYW5kIGxlc3MgaW1wb3J0YW50IGZpeGVzLCBpbmNsdWRpbmcKPiAg ICBjb3ZlciBsZXR0ZXJzIGhlbHBzIGFzIHdlbGwgc2luY2UgaXQgbGV0cyBwYXRjaHdvcmsgZ3Jv dXAgdG9nZXRoZXIKPiAgICBwYXRjaCBzZXJpZXMgbGlrZSB0aGlzLgoKVGhhbmtzIGZvciBjbGFy aWZ5aW5nIHRoZXNlIGd1aWRlbGluZXMuIEkgbXVzdCBhZG1pdCB0aGF0IEkgaGF2ZSBiZWVuIHRv byBsYXp5CnRvIGNyYWZ0IGNvdmVyIGxldHRlcnMgc28gZmFyLCBidXQgSSdsbCBkZWZpbml0ZWx5 IGRvIGl0IGluIHRoZSBmdXR1cmUuCgpBcyBmb3IgZ3JvdXBpbmcgdW5yZWxhdGVkIHBhdGNoZXMg aW4gdGhlIHNhbWUgc2VyaWVzLCBJIG1vc3RseSBkaWQgdGhhdCB0bwpjbGFyaWZ5IGluIHdoYXQg b3JkZXIgdGhlICh1bnJlbGF0ZWQpIHBhdGNoZXMgc2hvdWxkIGJlIGFwcGxpZWQsIGJ1dCBJIHdp bGwKc3BlY2lmeSB0aGVzZSBkZXBlbmRlbmNpZXMgaW4gdGhlIGNvdmVyIGxldHRlcnMgZnJvbSBu b3cgb24uCgo+IEFueXdheSwgYmFjayB0byB0aGUgYWN0dWFsIHBhdGNoOgo+IEEgZ29vZCBzdGFy dCEgV2lsbCBuZWVkIGEgY291cGxlIG9mIGNoYW5nZXMgdGhvdWdoCgpJIGFncmVlIHdpdGggeW91 dCBjb21tZW50cyBhbmQgd2lsbCBjcmFmdCB2NCBpbiB0aGF0IGRpcmVjdGlvbi4KClRoYW5rcyBh IGxvdCBmb3IgdGhlIHJldmlldyEKCj4gT24gV2VkLCAyMDE3LTA3LTA1IGF0IDExOjA0ICswMzAw LCBQYXVsIEtvY2lhbGtvd3NraSB3cm90ZToKPiA+IFRoaXMgaW50cm9kdWNlcyBDUkMgY2FsY3Vs YXRpb24gZm9yIHJlZmVyZW5jZSBmcmFtZXMsIGluc3RlYWQgb2YKPiA+IHVzaW5nCj4gPiBoYXJk Y29kZWQgdmFsdWVzIGZvciB0aGVtLiBUaGUgcmVuZGVyaW5nIG9mIHJlZmVyZW5jZSBmcmFtZXMg bWF5Cj4gPiBkaWZmZXIKPiA+IGZyb20gbWFjaGluZSB0byBtYWNoaW5lLCBlc3BlY2lhbGx5IGR1 ZSB0byBmb250IHJlbmRlcmluZywgYW5kIHRoZQo+ID4gZnJhbWUgaXRzZWxmIG1heSBjaGFuZ2Ug d2l0aCBzdWJzZXF1ZW50IElHVCBjaGFuZ2VzLgo+ID4gCj4gPiBUaGVzZSBkaWZmZXJlbmNlcyB3 b3VsZCBjYXVzZSB0aGUgQ1JDIGNoZWNrcyB0byBmYWlsIG9uIGRpZmZlcmVudAo+ID4gc2V0dXBz LiBUaGlzIGFsbG93cyB0aGVtIHRvIHBhc3MgcmVnYXJkbGVzcyBvZiB0aGUgc2V0dXAuCj4gPiAK PiA+IFNpZ25lZC1vZmYtYnk6IFBhdWwgS29jaWFsa293c2tpIDxwYXVsLmtvY2lhbGtvd3NraUBs aW51eC5pbnRlbC5jb20+Cj4gPiAtLS0KPiA+ICBsaWIvaWd0X2NoYW1lbGl1bS5jIHwgMTYwCj4g PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4g PiAgbGliL2lndF9jaGFtZWxpdW0uaCB8ICAgNSArKwo+ID4gIHRlc3RzL2NoYW1lbGl1bS5jICAg fCAgNzYgKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gIDMgZmlsZXMgY2hhbmdlZCwgMTgz IGluc2VydGlvbnMoKyksIDU4IGRlbGV0aW9ucygtKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvbGli L2lndF9jaGFtZWxpdW0uYyBiL2xpYi9pZ3RfY2hhbWVsaXVtLmMKPiA+IGluZGV4IGJmZjA4YzBl Li5iOWQ4MGI2YiAxMDA2NDQKPiA+IC0tLSBhL2xpYi9pZ3RfY2hhbWVsaXVtLmMKPiA+ICsrKyBi L2xpYi9pZ3RfY2hhbWVsaXVtLmMKPiA+IEBAIC05NCw2ICs5NCwxNCBAQCBzdHJ1Y3QgY2hhbWVs aXVtX2ZyYW1lX2R1bXAgewo+ID4gIAlzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQ7Cj4gPiAg fTsKPiA+ICAKPiA+ICtzdHJ1Y3QgY2hhbWVsaXVtX2ZiX2NyYyB7Cj4gPiArCWludCBmZDsKPiA+ ICsJc3RydWN0IGlndF9mYiAqZmI7Cj4gPiArCj4gPiArCXB0aHJlYWRfdCB0aHJlYWRfaWQ7Cj4g PiArCWlndF9jcmNfdCAqcmV0Owo+ID4gK307Cj4gPiArCj4gCj4gVGhlIG5hbWUgb2YgdGhpcyBz dHJ1Y3R1cmUgaXMgYSBsaXR0bGUgbWlzbGVhZGluZywgYmVjYXVzZSBub3cgd2UgaGF2ZQo+IGFu IEFQSSB0aGF0IGV4cG9zZXMgYm90aCBhIHN0cnVjdCBjaGFtZWxpdW1fZmJfY3JjIHN0cnVjdCBp biBhZGRpdGlvbgo+IHRvIHRoZSBpZ3RfY3JjX3Qgc3RydWN0LiBSZW5hbWUgdGhpcyB0byBzb21l dGhpbmcgbGlrZSBzdHJ1Y3QKPiBjaGFtZWxpdW1fZmJfY3JjX3dvcmsKPiAKPiA+ICBzdHJ1Y3Qg Y2hhbWVsaXVtIHsKPiA+ICAJeG1scnBjX2VudiBlbnY7Cj4gPiAgCXhtbHJwY19jbGllbnQgKmNs aWVudDsKPiA+IEBAIC0xMDAzLDYgKzEwMTEsMTU4IEBAIGludCBjaGFtZWxpdW1fZ2V0X2ZyYW1l X2xpbWl0KHN0cnVjdAo+ID4gY2hhbWVsaXVtICpjaGFtZWxpdW0sCj4gPiAgCXJldHVybiByZXQ7 Cj4gPiAgfQo+ID4gIAo+ID4gK3N0YXRpYyB1aW50MzJfdCBjaGFtZWxpdW1feHJnYl9oYXNoMTYo dW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQKPiA+IHdpZHRoLAo+ID4gKwkJCQkgICAgICBpbnQg aGVpZ2h0LCBpbnQgaywgaW50IG0pCj4gPiArewo+IAo+IFdlJ3JlIG5vdCBtb2RpZnlpbmcgYnVm ZmVyLCBzbyBtYWtlIGl0IGEgY29uc3QuIEFzIHdlbGwsIGZlZWwgZnJlZSB0bwo+IG1hcmsgdGhp cyBmdW5jdGlvbiBhcyBpbmxpbmUuCj4gCj4gPiArCXVuc2lnbmVkIGNoYXIgciwgZywgYjsKPiA+ ICsJdWludDY0X3Qgc3VtID0gMDsKPiA+ICsJdWludDY0X3QgY291bnQgPSAwOwo+ID4gKwl1aW50 NjRfdCB2YWx1ZTsKPiA+ICsJdWludDMyX3QgaGFzaDsKPiA+ICsJaW50IGluZGV4Owo+ID4gKwlp bnQgaTsKPiA+ICsKPiA+ICsJZm9yIChpPTA7IGkgPCB3aWR0aCAqIGhlaWdodDsgaSsrKSB7Cj4g PiArCQlpZiAoKGkgJSBtKSAhPSBrKQo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwo+ID4gKwkJaW5k ZXggPSBpICogNDsKPiA+ICsKPiA+ICsJCXIgPSBidWZmZXJbaW5kZXggKyAyXTsKPiA+ICsJCWcg PSBidWZmZXJbaW5kZXggKyAxXTsKPiA+ICsJCWIgPSBidWZmZXJbaW5kZXggKyAwXTsKPiA+ICsK PiA+ICsJCXZhbHVlID0gciB8IChnIDw8IDgpIHwgKGIgPDwgMTYpOwo+ID4gKwkJc3VtICs9ICsr Y291bnQgKiB2YWx1ZTsKPiA+ICsJfQo+ID4gKwo+ID4gKwloYXNoID0gKChzdW0gPj4gMCkgXiAo c3VtID4+IDE2KSBeIChzdW0gPj4gMzIpIF4gKHN1bSA+Pgo+ID4gNDgpKSAmIDB4ZmZmZjsKPiA+ ICsKPiA+ICsJcmV0dXJuIGhhc2g7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGNoYW1l bGl1bV9jYWxjdWxhdGVfZmJfY3JjOgo+ID4gKyAqIEBmZDogVGhlIGRybSBmaWxlIGRlc2NyaXB0 b3IKPiA+ICsgKiBAZmI6IFRoZSBmcmFtZWJ1ZmZlciB0byBjYWxjdWxhdGUgdGhlIENSQyBmb3IK PiA+ICsgKgo+ID4gKyAqIENhbGN1bGF0ZXMgYSBDUkMgZm9yIHRoZSBwcm92aWRlZCBmcmFtZWJ1 ZmZlciwgdGhlIHNhbWUgd2F5IGFzCj4gPiB0aGUgQ2hhbWVsaXVtLgo+IAo+IENhbGN1bGF0ZSB0 aGUgQ1JDIGZvciB0aGUgcHJvdmlkZWQgZnJhbWVidWZmZXIsIHVzaW5nIHRoZSBDaGFtZWxpdW0n cwo+IENSQyBhbGdvcml0aG0KPiA+ICsgKiBUaGlzIGNhbGN1bGF0ZXMgdGhlIENSQyBpbiBhIG5v bi10aHJlYWRlZCBmYXNoaW9uLgo+ID4gKyAqCj4gPiArICogUmV0dXJuczogVGhlIGNhbGN1bGF0 ZWQgQ1JDCj4gPiArICovCj4gPiAraWd0X2NyY190ICpjaGFtZWxpdW1fY2FsY3VsYXRlX2ZiX2Ny YyhpbnQgZmQsIHN0cnVjdCBpZ3RfZmIgKmZiKQo+ID4gK3sKPiA+ICsJaWd0X2NyY190ICpyZXQ7 Cj4gPiArCWNhaXJvX3QgKmNyOwo+ID4gKwljYWlyb19zdXJmYWNlX3QgKmZiX3N1cmZhY2U7Cj4g PiArCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKPiA+ICsJaW50IG4gPSA0Owo+ID4gKwlpbnQgdywg aDsKPiA+ICsJaW50IGksIGo7Cj4gPiArCj4gPiArCXJldCA9IGNhbGxvYygxLCBzaXplb2YoaWd0 X2NyY190KSk7Cj4gPiArCj4gPiArCS8qIEdldCB0aGUgY2Fpcm8gc3VyZmFjZSBmb3IgdGhlIGZy YW1lYnVmZmVyICovCj4gPiArCWNyID0gaWd0X2dldF9jYWlyb19jdHgoZmQsIGZiKTsKPiA+ICsJ ZmJfc3VyZmFjZSA9IGNhaXJvX2dldF90YXJnZXQoY3IpOwo+ID4gKwljYWlyb19zdXJmYWNlX3Jl ZmVyZW5jZShmYl9zdXJmYWNlKTsKPiA+ICsJY2Fpcm9fZGVzdHJveShjcik7Cj4gPiArCj4gPiAr CWJ1ZmZlciA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoZmJfc3VyZmFjZSk7Cj4gPiAr CXcgPSBmYi0+d2lkdGg7Cj4gPiArCWggPSBmYi0+aGVpZ2h0Owo+ID4gKwo+ID4gKwlmb3IgKGkg PSAwOyBpIDwgbjsgaSsrKSB7Cj4gPiArCQlqID0gbiAtIGkgLSAxOwo+ID4gKwkJcmV0LT5jcmNb aV0gPSBjaGFtZWxpdW1feHJnYl9oYXNoMTYoYnVmZmVyLCB3LCBoLCBqLAo+ID4gbik7Cj4gPiAr CX0KPiA+ICsKPiA+ICsJcmV0LT5uX3dvcmRzID0gbjsKPiA+ICsJY2Fpcm9fc3VyZmFjZV9kZXN0 cm95KGZiX3N1cmZhY2UpOwo+ID4gKwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgdm9pZCAqY2hhbWVsaXVtX2NhbGN1bGF0ZV9mYl9jcmNfdGhyZWFkKHZvaWQgKmRh dGEpCj4gPiArewo+ID4gKwlzdHJ1Y3QgY2hhbWVsaXVtX2ZiX2NyYyAqZmJfY3JjID0gKHN0cnVj dCBjaGFtZWxpdW1fZmJfY3JjCj4gPiAqKSBkYXRhOwo+ID4gKwljYWlyb190ICpjcjsKPiA+ICsJ Y2Fpcm9fc3VyZmFjZV90ICpmYl9zdXJmYWNlOwo+ID4gKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7 Cj4gPiArCWludCBuID0gNDsKPiA+ICsJaW50IHcsIGg7Cj4gPiArCWludCBpLCBqOwo+ID4gKwo+ ID4gKwkvKiBHZXQgdGhlIGNhaXJvIHN1cmZhY2UgZm9yIHRoZSBmcmFtZWJ1ZmZlciAqLwo+ID4g KwljciA9IGlndF9nZXRfY2Fpcm9fY3R4KGZiX2NyYy0+ZmQsIGZiX2NyYy0+ZmIpOwo+ID4gKwlm Yl9zdXJmYWNlID0gY2Fpcm9fZ2V0X3RhcmdldChjcik7Cj4gPiArCWNhaXJvX3N1cmZhY2VfcmVm ZXJlbmNlKGZiX3N1cmZhY2UpOwo+ID4gKwljYWlyb19kZXN0cm95KGNyKTsKPiA+ICsKPiA+ICsJ YnVmZmVyID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShmYl9zdXJmYWNlKTsKPiA+ICsJ dyA9IGZiX2NyYy0+ZmItPndpZHRoOwo+ID4gKwloID0gZmJfY3JjLT5mYi0+aGVpZ2h0Owo+ID4g Kwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Cj4gPiArCQlqID0gbiAtIGkgLSAxOwo+ ID4gKwkJZmJfY3JjLT5yZXQtPmNyY1tpXSA9IGNoYW1lbGl1bV94cmdiX2hhc2gxNihidWZmZXIs Cj4gPiB3LCBoLCBqLCBuKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlmYl9jcmMtPnJldC0+bl93b3Jk cyA9IG47Cj4gPiArCWNhaXJvX3N1cmZhY2VfZGVzdHJveShmYl9zdXJmYWNlKTsKPiA+ICsKPiA+ ICsJcmV0dXJuIE5VTEw7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGNoYW1lbGl1bV9j YWxjdWxhdGVfZmJfY3JjX2xhdW5jaDoKPiA+ICsgKiBAZmQ6IFRoZSBkcm0gZmlsZSBkZXNjcmlw dG9yCj4gPiArICogQGZiOiBUaGUgZnJhbWVidWZmZXIgdG8gY2FsY3VsYXRlIHRoZSBDUkMgZm9y Cj4gPiArICoKPiA+ICsgKiBMYXVuY2hlcyB0aGUgQ1JDIGNhbGN1bGF0aW9uIGZvciB0aGUgcHJv dmlkZWQgZnJhbWVidWZmZXIsIHRoZQo+ID4gc2FtZSB3YXkgYXMKPiA+ICsgKiB0aGUgQ2hhbWVs aXVtLiBUaGlzIGNhbGN1bGF0ZXMgdGhlIENSQyBpbiBhIHRocmVhZGVkIGZhc2hpb24uCj4gPiAr ICogVGhyZWFkLXJlbGF0ZWQgaW5mb3JtYXRpb24gaXMgcmV0dXJuZWQgYW5kIHNob3VsZCBiZSBw YXNzZWQgdG8gYQo+ID4gc3Vic2VxdWVudAo+ID4gKyAqIGNhbGwgdG8gY2hhbWVsaXVtX2NhbGN1 bGF0ZV9mYl9jcmNfcmVzdWx0LiBJdCBzaG91bGQgbm90IGJlCj4gPiBmcmVlZC4KPiA+ICsgKgo+ ID4gKyAqIFJldHVybnM6IEFuIGludGVybWVkaWF0ZSBzdHJ1Y3R1cmUgd2l0aCB0aHJlYWQtcmVs YXRlZAo+ID4gaW5mb3JtYXRpb24KPiAKPiBUaGUgdXNlciBkb2Vzbid0IG5lZWQgdG8ga25vdyBh Ym91dCB0aGUgbWFnaWMgaW5zaWRlIHRoZSBzdHJ1Y3R1cmUsCj4gc2luY2Ugd2UncmUgbm90IGdv aW5nIHRvIGV4cG9zZSBpdCdzIGRlZmluaXRpb24gb3V0c2lkZSBvZiB0aGlzIGZpbGUKPiBhbnl3 YXkuCj4gPiArICovCj4gPiArc3RydWN0IGNoYW1lbGl1bV9mYl9jcmMgKmNoYW1lbGl1bV9jYWxj dWxhdGVfZmJfY3JjX2xhdW5jaChpbnQgZmQsCj4gPiArCQkJCQkJCSAgIHN0cnVjdAo+ID4gaWd0 X2ZiICpmYikKPiA+ICt7Cj4gPiArCXN0cnVjdCBjaGFtZWxpdW1fZmJfY3JjICpmYl9jcmM7Cj4g PiArCj4gPiArCWZiX2NyYyA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGNoYW1lbGl1bV9mYl9j cmMpKTsKPiA+ICsJZmJfY3JjLT5yZXQgPSBjYWxsb2MoMSwgc2l6ZW9mKGlndF9jcmNfdCkpOwo+ ID4gKwlmYl9jcmMtPmZkID0gZmQ7Cj4gPiArCWZiX2NyYy0+ZmIgPSBmYjsKPiA+ICsKPiA+ICsJ cHRocmVhZF9jcmVhdGUoJmZiX2NyYy0+dGhyZWFkX2lkLCBOVUxMLAo+ID4gKwkJICAgICAgIGNo YW1lbGl1bV9jYWxjdWxhdGVfZmJfY3JjX3RocmVhZCwgZmJfY3JjKTsKPiA+ICsKPiA+ICsJcmV0 dXJuIGZiX2NyYzsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogY2hhbWVsaXVtX2NhbGN1 bGF0ZV9mYl9jcmNfcmVzdWx0Ogo+ID4gKyAqIEBmYl9jcmM6IEFuIGludGVybWVkaWF0ZSBzdHJ1 Y3R1cmUgd2l0aCB0aHJlYWQtcmVsYXRlZAo+ID4gaW5mb3JtYXRpb24KPiA+ICsgKgo+ID4gKyAq IFByb3ZpZGVzIHRoZSByZXN1bHQgZm9yIHRoZSBwcmV2aW91c2x5LWxhdW5jaGVkIENSQyBjYWxj dWxhdGlvbi4KPiAKPiBCbG9ja3MgdW50aWwgdGhlIGFzeW5jIENSQyBjYWxjdWxhdGlvbiBpcyBm aW5pc2hlZCwgYW5kIHRoZW4gcmV0dXJucwo+IHRoZSByZXN1bHQuCj4gPiArICoKPiA+ICsgKiBS ZXR1cm5zOiBUaGUgY2FsY3VsYXRlZCBDUkMKPiA+ICsgKi8KPiA+ICtpZ3RfY3JjX3QgKmNoYW1l bGl1bV9jYWxjdWxhdGVfZmJfY3JjX3Jlc3VsdChzdHJ1Y3QgY2hhbWVsaXVtX2ZiX2NyYwo+ID4g KmZiX2NyYykKPiA+ICt7Cj4gPiArCWlndF9jcmNfdCAqcmV0Owo+ID4gKwo+ID4gKwlwdGhyZWFk X2pvaW4oZmJfY3JjLT50aHJlYWRfaWQsIE5VTEwpOwo+ID4gKwo+ID4gKwlyZXQgPSBmYl9jcmMt PnJldDsKPiA+ICsJZnJlZShmYl9jcmMpOwo+ID4gKwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30K PiA+ICsKPiA+ICBzdGF0aWMgdW5zaWduZWQgaW50IGNoYW1lbGl1bV9nZXRfcG9ydF90eXBlKHN0 cnVjdCBjaGFtZWxpdW0KPiA+ICpjaGFtZWxpdW0sCj4gPiAgCQkJCQkgICAgc3RydWN0IGNoYW1l bGl1bV9wb3J0Cj4gPiAqcG9ydCkKPiA+ICB7Cj4gPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9jaGFt ZWxpdW0uaCBiL2xpYi9pZ3RfY2hhbWVsaXVtLmgKPiA+IGluZGV4IDgxMzIyYWQyLi5lNTFjZjRm OSAxMDA2NDQKPiA+IC0tLSBhL2xpYi9pZ3RfY2hhbWVsaXVtLmgKPiA+ICsrKyBiL2xpYi9pZ3Rf Y2hhbWVsaXVtLmgKPiA+IEBAIC0zNiw2ICszNiw3IEBACj4gPiAgc3RydWN0IGNoYW1lbGl1bTsK PiA+ICBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQ7Cj4gPiAgc3RydWN0IGNoYW1lbGl1bV9mcmFtZV9k dW1wOwo+ID4gK3N0cnVjdCBjaGFtZWxpdW1fZmJfY3JjOwo+ID4gIAo+ID4gIHN0cnVjdCBjaGFt ZWxpdW0gKmNoYW1lbGl1bV9pbml0KGludCBkcm1fZmQpOwo+ID4gIHZvaWQgY2hhbWVsaXVtX2Rl aW5pdChzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxpdW0pOwo+ID4gQEAgLTkyLDYgKzkzLDEwIEBA IHN0cnVjdCBjaGFtZWxpdW1fZnJhbWVfZHVtcAo+ID4gKmNoYW1lbGl1bV9wb3J0X2R1bXBfcGl4 ZWxzKHN0cnVjdCBjaGFtZWxpdW0gKmNoYW1lbAo+ID4gIAkJCQkJCQlzdHJ1Y3QKPiA+IGNoYW1l bGl1bV9wb3J0ICpwb3J0LAo+ID4gIAkJCQkJCQlpbnQgeCwgaW50Cj4gPiB5LAo+ID4gIAkJCQkJ CQlpbnQgdywgaW50Cj4gPiBoKTsKPiA+ICtpZ3RfY3JjX3QgKmNoYW1lbGl1bV9jYWxjdWxhdGVf ZmJfY3JjKGludCBmZCwgc3RydWN0IGlndF9mYiAqZmIpOwo+ID4gK3N0cnVjdCBjaGFtZWxpdW1f ZmJfY3JjICpjaGFtZWxpdW1fY2FsY3VsYXRlX2ZiX2NyY19sYXVuY2goaW50IGZkLAo+ID4gKwkJ CQkJCQkgICBzdHJ1Y3QKPiA+IGlndF9mYiAqZmIpOwo+ID4gK2lndF9jcmNfdCAqY2hhbWVsaXVt X2NhbGN1bGF0ZV9mYl9jcmNfcmVzdWx0KHN0cnVjdCBjaGFtZWxpdW1fZmJfY3JjCj4gPiAqZmJf Y3JjKTsKPiA+ICBpbnQgY2hhbWVsaXVtX2dldF9jYXB0dXJlZF9mcmFtZV9jb3VudChzdHJ1Y3Qg Y2hhbWVsaXVtICpjaGFtZWxpdW0pOwo+ID4gIGludCBjaGFtZWxpdW1fZ2V0X2ZyYW1lX2xpbWl0 KHN0cnVjdCBjaGFtZWxpdW0gKmNoYW1lbGl1bSwKPiA+ICAJCQkgICAgICBzdHJ1Y3QgY2hhbWVs aXVtX3BvcnQgKnBvcnQsCj4gPiBkaWZmIC0tZ2l0IGEvdGVzdHMvY2hhbWVsaXVtLmMgYi90ZXN0 cy9jaGFtZWxpdW0uYwo+ID4gaW5kZXggZTMwNjc2NjQuLjNmZDJiMDJjIDEwMDY0NAo+ID4gLS0t IGEvdGVzdHMvY2hhbWVsaXVtLmMKPiA+ICsrKyBiL3Rlc3RzL2NoYW1lbGl1bS5jCj4gPiBAQCAt NDksNDMgKzQ5LDYgQEAgdHlwZWRlZiBzdHJ1Y3Qgewo+ID4gICNkZWZpbmUgSFBEX1RPR0dMRV9D T1VOVF9WR0EgNQo+ID4gICNkZWZpbmUgSFBEX1RPR0dMRV9DT1VOVF9EUF9IRE1JIDE1Cj4gPiAg Cj4gPiAtLyogUHJlLWNhbGN1bGF0ZWQgQ1JDcyBmb3IgdGhlIHBhdHRlcm4gZmIsIGZvciBhbGwg dGhlIG1vZGVzIGluIHRoZQo+ID4gZGVmYXVsdAo+ID4gLSAqIGNoYW1lbGl1bSBlZGlkCj4gPiAt ICovCj4gPiAtc3RydWN0IGNyY19lbnRyeSB7Cj4gPiAtCWludCB3aWR0aDsKPiA+IC0JaW50IGhl aWdodDsKPiA+IC0JaWd0X2NyY190IGNyYzsKPiA+IC19Owo+ID4gLQo+ID4gLSNkZWZpbmUgQ1JD X0VOVFJZKHdfLCBoXywgLi4uKSBcCj4gPiAtCXsgd18sIGhfLCB7IC5uX3dvcmRzID0gNCwgLmNy YyA9IHsgX19WQV9BUkdTX18gfSB9IH0KPiA+IC0KPiA+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGNy Y19lbnRyeSBwYXR0ZXJuX2ZiX2NyY3NbXSA9IHsKPiA+IC0JQ1JDX0VOVFJZKDE5MjAsIDEwODAs IDB4Zjg1OSwgMHhhNzUxLCAweDhjODEsIDB4NDVhMSksCj4gPiAtCUNSQ19FTlRSWSgxMjgwLCAg NzIwLCAweGNlYzIsIDB4NDI0NiwgMHg2Y2ZkLCAweGViNDMpLAo+ID4gLQlDUkNfRU5UUlkoMTAy NCwgIDc2OCwgMHg4NWU1LCAweGYwY2QsIDB4YWZlMywgMHg3ZjE4KSwKPiA+IC0JQ1JDX0VOVFJZ KCA4MDAsICA2MDAsIDB4NmIzOSwgMHgzMmI2LCAweDgzMWEsIDB4YjAzZSksCj4gPiAtCUNSQ19F TlRSWSggNjQwLCAgNDgwLCAweGExMjEsIDB4MjQ3MywgMHhiMTUwLCAweDhjNDcpLAo+ID4gLX07 Cj4gPiAtI3VuZGVmIENSQ19FTlRSWQo+ID4gLQo+ID4gLXN0YXRpYyBjb25zdCBpZ3RfY3JjX3Qg Kgo+ID4gLWdldF9wcmVjYWxjdWxhdGVkX2NyYyhzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQs IGludCB3LCBpbnQgaCkKPiA+IC17Cj4gPiAtCWludCBpOwo+ID4gLQljb25zdCBzdHJ1Y3QgY3Jj X2VudHJ5ICplbnRyeTsKPiA+IC0KPiA+IC0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGF0 dGVybl9mYl9jcmNzKTsgaSsrKSB7Cj4gPiAtCQllbnRyeSA9ICZwYXR0ZXJuX2ZiX2NyY3NbaV07 Cj4gPiAtCj4gPiAtCQlpZiAoZW50cnktPndpZHRoID09IHcgJiYgZW50cnktPmhlaWdodCA9PSBo KQo+ID4gLQkJCXJldHVybiAmZW50cnktPmNyYzsKPiA+IC0JfQo+ID4gLQo+ID4gLQlyZXR1cm4g TlVMTDsKPiA+IC19Cj4gPiAtCj4gPiAgc3RhdGljIHZvaWQKPiA+ICByZXF1aXJlX2Nvbm5lY3Rv cl9wcmVzZW50KGRhdGFfdCAqZGF0YSwgdW5zaWduZWQgaW50IHR5cGUpCj4gPiAgewo+ID4gQEAg LTQyNCw3ICszODcsOCBAQCB0ZXN0X2Rpc3BsYXlfY3JjX3NpbmdsZShkYXRhX3QgKmRhdGEsIHN0 cnVjdAo+ID4gY2hhbWVsaXVtX3BvcnQgKnBvcnQpCj4gPiAgCWlndF9vdXRwdXRfdCAqb3V0cHV0 Owo+ID4gIAlpZ3RfcGxhbmVfdCAqcHJpbWFyeTsKPiA+ICAJaWd0X2NyY190ICpjcmM7Cj4gPiAt CWNvbnN0IGlndF9jcmNfdCAqZXhwZWN0ZWRfY3JjOwo+ID4gKwlpZ3RfY3JjX3QgKmV4cGVjdGVk X2NyYzsKPiA+ICsJc3RydWN0IGNoYW1lbGl1bV9mYl9jcmMgKmZiX2NyYzsKPiA+ICAJc3RydWN0 IGlndF9mYiBmYjsKPiA+ICAJZHJtTW9kZU1vZGVJbmZvICptb2RlOwo+ID4gIAlkcm1Nb2RlQ29u bmVjdG9yICpjb25uZWN0b3I7Cj4gPiBAQCAtNDQ3LDI0ICs0MTEsMjEgQEAgdGVzdF9kaXNwbGF5 X2NyY19zaW5nbGUoZGF0YV90ICpkYXRhLCBzdHJ1Y3QKPiA+IGNoYW1lbGl1bV9wb3J0ICpwb3J0 KQo+ID4gIAkJCQkJCSAgICAwLCAwLCAwLCAmZmIpOwo+ID4gIAkJaWd0X2Fzc2VydChmYl9pZCA+ IDApOwo+ID4gIAo+ID4gLQkJZW5hYmxlX291dHB1dChkYXRhLCBwb3J0LCBvdXRwdXQsIG1vZGUs ICZmYik7Cj4gPiArCQlmYl9jcmMgPSBjaGFtZWxpdW1fY2FsY3VsYXRlX2ZiX2NyY19sYXVuY2go ZGF0YS0KPiA+ID4gZHJtX2ZkLCAmZmIpOwo+ID4gCj4gPiAgCj4gPiAtCQlleHBlY3RlZF9jcmMg PSBnZXRfcHJlY2FsY3VsYXRlZF9jcmMocG9ydCwKPiA+IC0JCQkJCQkgICAgIG1vZGUtPmhkaXNw bGF5LAo+ID4gLQkJCQkJCSAgICAgbW9kZS0KPiA+ID4gdmRpc3BsYXkpOwo+ID4gCj4gPiAtCQlp ZiAoIWV4cGVjdGVkX2NyYykgewo+ID4gLQkJCWlndF93YXJuKCJObyBwcmVjYWxjdWxhdGVkIENS QyBmb3VuZCBmb3IKPiA+ICVkeCVkLCBza2lwcGluZyBDUkMgY2hlY2tcbiIsCj4gPiAtCQkJCSBt b2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXkpOwo+ID4gLQkJCWdvdG8gbmV4dDsKPiA+IC0J CX0KPiA+ICsJCWVuYWJsZV9vdXRwdXQoZGF0YSwgcG9ydCwgb3V0cHV0LCBtb2RlLCAmZmIpOwo+ ID4gIAo+ID4gIAkJaWd0X2RlYnVnKCJUZXN0aW5nIHNpbmdsZSBDUkMgZmV0Y2hcbiIpOwo+ID4g Kwo+ID4gIAkJY3JjID0gY2hhbWVsaXVtX2dldF9jcmNfZm9yX2FyZWEoZGF0YS0+Y2hhbWVsaXVt LAo+ID4gcG9ydCwKPiA+ICAJCQkJCQkgMCwgMCwgMCwgMCk7Cj4gPiArCj4gPiArCQlleHBlY3Rl ZF9jcmMgPQo+ID4gY2hhbWVsaXVtX2NhbGN1bGF0ZV9mYl9jcmNfcmVzdWx0KGZiX2NyYyk7Cj4g PiArCj4gPiAgCQlpZ3RfYXNzZXJ0X2NyY19lcXVhbChjcmMsIGV4cGVjdGVkX2NyYyk7Cj4gPiAr CQlmcmVlKGV4cGVjdGVkX2NyYyk7Cj4gPiAgCQlmcmVlKGNyYyk7Cj4gPiAgCj4gPiAtbmV4dDoK PiA+ICAJCWRpc2FibGVfb3V0cHV0KGRhdGEsIHBvcnQsIG91dHB1dCk7Cj4gPiAgCQlpZ3RfcmVt b3ZlX2ZiKGRhdGEtPmRybV9mZCwgJmZiKTsKPiA+ICAJfQo+ID4gQEAgLTQ4MCw3ICs0NDEsOCBA QCB0ZXN0X2Rpc3BsYXlfY3JjX211bHRpcGxlKGRhdGFfdCAqZGF0YSwgc3RydWN0Cj4gPiBjaGFt ZWxpdW1fcG9ydCAqcG9ydCkKPiA+ICAJaWd0X291dHB1dF90ICpvdXRwdXQ7Cj4gPiAgCWlndF9w bGFuZV90ICpwcmltYXJ5Owo+ID4gIAlpZ3RfY3JjX3QgKmNyYzsKPiA+IC0JY29uc3QgaWd0X2Ny Y190ICpleHBlY3RlZF9jcmM7Cj4gPiArCWlndF9jcmNfdCAqZXhwZWN0ZWRfY3JjOwo+ID4gKwlz dHJ1Y3QgY2hhbWVsaXVtX2ZiX2NyYyAqZmJfY3JjOwo+ID4gIAlzdHJ1Y3QgaWd0X2ZiIGZiOwo+ ID4gIAlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7Cj4gPiAgCWRybU1vZGVDb25uZWN0b3IgKmNvbm5l Y3RvcjsKPiA+IEBAIC01MDMsMTUgKzQ2NSw5IEBAIHRlc3RfZGlzcGxheV9jcmNfbXVsdGlwbGUo ZGF0YV90ICpkYXRhLCBzdHJ1Y3QKPiA+IGNoYW1lbGl1bV9wb3J0ICpwb3J0KQo+ID4gIAkJCQkJ CSAgICAwLCAwLCAwLCAmZmIpOwo+ID4gIAkJaWd0X2Fzc2VydChmYl9pZCA+IDApOwo+ID4gIAo+ ID4gLQkJZW5hYmxlX291dHB1dChkYXRhLCBwb3J0LCBvdXRwdXQsIG1vZGUsICZmYik7Cj4gPiAr CQlmYl9jcmMgPSBjaGFtZWxpdW1fY2FsY3VsYXRlX2ZiX2NyY19sYXVuY2goZGF0YS0KPiA+ID4g ZHJtX2ZkLCAmZmIpOwo+ID4gCj4gPiAgCj4gPiAtCQlleHBlY3RlZF9jcmMgPSBnZXRfcHJlY2Fs Y3VsYXRlZF9jcmMocG9ydCwgbW9kZS0KPiA+ID4gaGRpc3BsYXksCj4gPiAKPiA+IC0JCQkJCQkg ICAgIG1vZGUtCj4gPiA+IHZkaXNwbGF5KTsKPiA+IAo+ID4gLQkJaWYgKCFleHBlY3RlZF9jcmMp IHsKPiA+IC0JCQlpZ3Rfd2FybigiTm8gcHJlY2FsY3VsYXRlZCBDUkMgZm91bmQgZm9yCj4gPiAl ZHglZCwgc2tpcHBpbmcgQ1JDIGNoZWNrXG4iLAo+ID4gLQkJCQkgbW9kZS0+aGRpc3BsYXksIG1v ZGUtPnZkaXNwbGF5KTsKPiA+IC0JCQlnb3RvIG5leHQ7Cj4gPiAtCQl9Cj4gPiArCQllbmFibGVf b3V0cHV0KGRhdGEsIHBvcnQsIG91dHB1dCwgbW9kZSwgJmZiKTsKPiA+ICAKPiA+ICAJCS8qIFdl IHdhbnQgdG8ga2VlcCB0aGUgZGlzcGxheSBydW5uaW5nIGZvciBhIGxpdHRsZQo+ID4gYml0LCBz aW5jZQo+ID4gIAkJICogdGhlcmUncyBhbHdheXMgdGhlIHBvdGVudGlhbCB0aGUgZHJpdmVyIGlz bid0Cj4gPiBhYmxlIHRvIGtlZXAKPiA+IEBAIC01MjIsMTEgKzQ3OCwxNSBAQCB0ZXN0X2Rpc3Bs YXlfY3JjX211bHRpcGxlKGRhdGFfdCAqZGF0YSwgc3RydWN0Cj4gPiBjaGFtZWxpdW1fcG9ydCAq cG9ydCkKPiA+ICAJCQkJCQkgICAmY2FwdHVyZWRfZnJhbWVfYwo+ID4gb3VudCk7Cj4gPiAgCj4g PiAgCQlpZ3RfZGVidWcoIkNhcHR1cmVkICVkIGZyYW1lc1xuIiwKPiA+IGNhcHR1cmVkX2ZyYW1l X2NvdW50KTsKPiA+ICsKPiA+ICsJCWV4cGVjdGVkX2NyYyA9Cj4gPiBjaGFtZWxpdW1fY2FsY3Vs YXRlX2ZiX2NyY19yZXN1bHQoZmJfY3JjKTsKPiA+ICsKPiA+ICAJCWZvciAoaiA9IDA7IGogPCBj YXB0dXJlZF9mcmFtZV9jb3VudDsgaisrKQo+ID4gIAkJCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZj cmNbal0sIGV4cGVjdGVkX2NyYyk7Cj4gPiArCj4gPiArCQlmcmVlKGV4cGVjdGVkX2NyYyk7Cj4g PiAgCQlmcmVlKGNyYyk7Cj4gPiAgCj4gPiAtbmV4dDoKPiA+ICAJCWRpc2FibGVfb3V0cHV0KGRh dGEsIHBvcnQsIG91dHB1dCk7Cj4gPiAgCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJmZi KTsKPiA+ICAJfQotLSAKUGF1bCBLb2NpYWxrb3dza2kgPHBhdWwua29jaWFsa293c2tpQGxpbnV4 LmludGVsLmNvbT4KSW50ZWwgRmlubGFuZCBPeSAtIEJJQyAwMzU3NjA2LTQgLSBXZXN0ZW5kaW5r YXR1IDcsIDAyMTYwIEVzcG9vLCBGSW5sYW5kCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAo=