From mboxrd@z Thu Jan 1 00:00:00 1970 From: Samuel Pitoiset Subject: Re: [PATCH mesa 5/6] nouveau: codegen: Add support for OpenCL global memory buffers Date: Wed, 16 Mar 2016 11:49:48 +0100 Message-ID: <56E93A4C.9050807@gmail.com> References: <1458120239-27659-1-git-send-email-hdegoede@redhat.com> <1458120239-27659-5-git-send-email-hdegoede@redhat.com> <56E93756.8040109@gmail.com> <56E9394D.8040704@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <56E9394D.8040704-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Hans de Goede , Ilia Mirkin Cc: mesa-dev-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: nouveau.vger.kernel.org CgpPbiAwMy8xNi8yMDE2IDExOjQ1IEFNLCBIYW5zIGRlIEdvZWRlIHdyb3RlOgo+IEhpLAo+Cj4g T24gMTYtMDMtMTYgMTE6MzcsIFNhbXVlbCBQaXRvaXNldCB3cm90ZToKPj4gQ291bGQgeW91IHBs ZWFzZSBnZXQgcmlkIG9mIHRoZSBjb3NtZXRpYyBjaGFuZ2VzIChlZy4gdGhlIHN3aXRjaCBvbmVz KT8KPj4gQmVjYXVzZSB0aGlzIGRvZXNuJ3QgcmVhbGx5IGltcHJvdmUgcmVhZGFiaWxpdHkgYW5k IGluIG15IG9waW5pb24KPj4gdGhlc2UgY2hhbmdlcyBzaG91bGQgYmUgZXZlbnR1YWxseSBkb25l IGluIGEgc2VwYXJhdGUgcGF0Y2guCj4KPiBJIG5lZWQgYXQgbGVhc3QgaGFsdmUgb2YgdGhvc2Ug Y29zbWV0aWMgY2hhbmdlcywgYmVjYXVzZSBoYWxmIG9mIHRoZW0gaXMKPiBub3QgY29zbWV0aWMs IGUuZy4gOgo+Cj4gLSAgIGNhc2UgRklMRV9NRU1PUllfQlVGRkVSOiBjb2RlWzFdID0gMHhlMDAw MDAwMDsgY29kZVswXSA9IDB4MDAwMDAwMDA7Cj4gYnJlYWs7Cj4gLSAgIGNhc2UgRklMRV9NRU1P UllfTE9DQUw6ICBjb2RlWzFdID0gMHg3YTgwMDAwMDsgY29kZVswXSA9IDB4MDAwMDAwMDI7Cj4g YnJlYWs7Cj4gKyAgIGNhc2UgRklMRV9NRU1PUllfQlVGRkVSOgo+ICsgICBjYXNlIEZJTEVfTUVN T1JZX0dMT0JBTDoKPiArICAgICAgY29kZVswXSA9IDB4MDAwMDAwMDA7Cj4gKyAgICAgIGNvZGVb MV0gPSAweGUwMDAwMDAwOwo+ICsgICAgICBicmVhazsKPiArICAgY2FzZSBGSUxFX01FTU9SWV9M T0NBTDoKPiArICAgICAgY29kZVswXSA9IDB4MDAwMDAwMDI7Cj4gKyAgICAgIGNvZGVbMV0gPSAw eDdhODAwMDAwOwo+ICsgICAgICBicmVhazsKPgo+IFRoZSBmaXJzdCBiaXQgYWN0dWFsbHkgY2hh bmdlcyB0aGluZ3MgdG8gaGF2ZSAyIGNhc2VzIGZvciB0aGUgQlVGRkVSCj4gY29kZSwgYW4KPiBv dGhlciB3YXkgb2Ygd3JpdGluZyB0aGlzIHdvdWxkIGJlOgo+Cj4gKyAgIGNhc2UgRklMRV9NRU1P UllfR0xPQkFMOgo+ICAgICAgY2FzZSBGSUxFX01FTU9SWV9CVUZGRVI6IGNvZGVbMV0gPSAweGUw MDAwMDAwOyBjb2RlWzBdID0KPiAweDAwMDAwMDAwOyBicmVhazsKPiAgICAgIGNhc2UgRklMRV9N RU1PUllfTE9DQUw6IGNvZGVbMV0gPSAweDdhODAwMDAwOyBjb2RlWzBdID0gMHgwMDAwMDAwMjsK PiBicmVhazsKPgo+IEJ1dCB0aGF0IGp1c3QgbG9va3Mgd2VpcmQsIGlmIHdlIGhhdmUgbXVsdGlw bGUgY2FzZSBsYWJlbHMgd2Ugc2hvdWxkIG5vdAo+IHVzZQo+IHRoZSBzaW5nbGUgbGluZSBzdGF0 ZW1lbnQgZm9sbG93aW5nIHRoZSBjYXNlIGxhYmVsIHN0eWxlIElNSE8sIHdoaWNoCj4gYnJpbmdz IHVzIHRvOgo+Cj4gKyAgIGNhc2UgRklMRV9NRU1PUllfQlVGRkVSOgo+ICsgICBjYXNlIEZJTEVf TUVNT1JZX0dMT0JBTDoKPiArICAgICAgY29kZVswXSA9IDB4MDAwMDAwMDA7Cj4gKyAgICAgIGNv ZGVbMV0gPSAweGUwMDAwMDAwOwo+ICsgICAgICBicmVhazsKPgo+IEF0IHdoaWNoIHBvaW50IGtl ZXBpbmcgdGhlIExPQ0FMIGNvZGUgbG9va3MgdWdseSBJTUhPOgo+Cj4gKyAgIGNhc2UgRklMRV9N RU1PUllfQlVGRkVSOgo+ICsgICBjYXNlIEZJTEVfTUVNT1JZX0dMT0JBTDoKPiArICAgICAgY29k ZVswXSA9IDB4MDAwMDAwMDA7Cj4gKyAgICAgIGNvZGVbMV0gPSAweGUwMDAwMDAwOwo+ICsgICAg ICBicmVhazsKPiAgICAgIGNhc2UgRklMRV9NRU1PUllfTE9DQUw6IGNvZGVbMV0gPSAweDdhODAw MDAwOyBjb2RlWzBdID0gMHgwMDAwMDAwMjsKPiBicmVhazsKPiAgICAgIGNhc2UgRklMRV9NRU1P UllfU0hBUkVEOgo+ICAgICAgICAgY29kZVswXSA9IDB4MDAwMDAwMDI7Cj4gICAgICAgICBpZiAo aS0+c3ViT3AgPT0gTlY1MF9JUl9TVUJPUF9MT0FEX0xPQ0tFRCkKPgo+IE5vdGljZSBob3cgdGhl IEZJTEVfTUVNT1JZX0xPQ0FMIGNhc2UgbG9va3Mgd2VpcmQgbm93Lgo+Cj4gTm90ZSBJJ20gb3Bl biB0byBmaXhpbmcgdGhpcyBob3dldmVyIHlvdSBsaWtlLCBqdXN0IGV4cGxhaW5pbmcgd2h5IEkg ZGlkIGl0Cj4gdGhlIHdheSBJIGRpZCBpdC4KClRoaXMgbWFrZXMgbW9yZSBzZW5zZSBhY3R1YWxs eSwgYW5kIHlvdSBoYXZlIHN0cm9uZyBhcmd1bWVudHMuIDotKQpGZWVsIGZyZWUgdG8ga2VlcCB0 aGlzIGFzIGlzLCBidXQgYXQgdGhlIGZpcnN0IGxvb2sgaXQgbG9va2VkIHdlaXJkLgoKPgo+PiBP dGhlciB0aGFuIHRoYXQsIHRoaXMgcGF0Y2ggaXMgOgo+Pgo+PiBSZXZpZXdlZC1ieTogU2FtdWVs IFBpdG9pc2V0IDxzYW11ZWwucGl0b2lzZXRAZ21haWwuY29tPgo+Cj4gVGhhbmtzIGZvciB0aGUg cmV2aWV3cyEKCllvdSdyZSB3ZWxjb21lLgoKPgo+IFJlZ2FyZHMsCj4KPiBIYW5zCj4KPgo+PiBZ ZXMsIHRoaXMgcHJvYmFibHkgd29uJ3Qgd29yayBhcyBpcyBmb3IgYXRvbWljIG9wZXJhdGlvbnMg YnV0IHRoZQo+PiBsb3dlcmluZyBwYXNzIGlzIGFscmVhZHkgaGVyZSwgc28gaXQgc2hvdWxkIGJl IGVhc3kgdG8gbWFrZSBpdCB3b3JrLgo+Pgo+PiBPbiAwMy8xNi8yMDE2IDEwOjIzIEFNLCBIYW5z IGRlIEdvZWRlIHdyb3RlOgo+Pj4gQWRkIHN1cHBvcnQgZm9yIE9wZW5DTCBnbG9iYWwgbWVtb3J5 IGJ1ZmZlcnMsIG5vdGUgdGhpcyBoYXMgb25seQo+Pj4gYmVlbiB0ZXN0ZWQgd2l0aCByZWd1bGFy IGxvYWQgYW5kIHN0b3JlcyBhbmQgbGlrZWx5IG5lZWRzIG1vcmUgd29yawo+Pj4gZm9yIGUuZy4g YXRvbWljIG9wcy4KPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBIYW5zIGRlIEdvZWRlIDxoZGVnb2Vk ZUByZWRoYXQuY29tPgo+Pj4gLS0tCj4+PiAgIHNyYy9nYWxsaXVtL2RyaXZlcnMvbm91dmVhdS9j b2RlZ2VuL252NTBfaXIuaCAgICAgIHwgIDEgKwo+Pj4gICAuLi4vZHJpdmVycy9ub3V2ZWF1L2Nv ZGVnZW4vbnY1MF9pcl9lbWl0X2drMTEwLmNwcCB8IDMxCj4+PiArKysrKysrKysrKysrKysrKy0t LS0tCj4+PiAgIC4uLi9kcml2ZXJzL25vdXZlYXUvY29kZWdlbi9udjUwX2lyX2VtaXRfZ20xMDcu Y3BwIHwgIDUgKysrLQo+Pj4gICAuLi4vZHJpdmVycy9ub3V2ZWF1L2NvZGVnZW4vbnY1MF9pcl9l bWl0X252NTAuY3BwICB8IDEwICsrKystLS0KPj4+ICAgLi4uL2RyaXZlcnMvbm91dmVhdS9jb2Rl Z2VuL252NTBfaXJfZW1pdF9udmMwLmNwcCAgfCAyNgo+Pj4gKysrKysrKysrKysrKy0tLS0tCj4+ PiAgIC4uLi9kcml2ZXJzL25vdXZlYXUvY29kZWdlbi9udjUwX2lyX2Zyb21fdGdzaS5jcHAgIHwg MTQgKysrKysrKy0tLQo+Pj4gICAuLi4vZHJpdmVycy9ub3V2ZWF1L2NvZGVnZW4vbnY1MF9pcl9w ZWVwaG9sZS5jcHAgICB8ICA1ICsrKy0KPj4+ICAgLi4uL2RyaXZlcnMvbm91dmVhdS9jb2RlZ2Vu L252NTBfaXJfcHJpbnQuY3BwICAgICAgfCAgMSArCj4+PiAgIC4uLi9ub3V2ZWF1L2NvZGVnZW4v bnY1MF9pcl90YXJnZXRfbnY1MC5jcHAgICAgICAgIHwgIDEgKwo+Pj4gICAuLi4vbm91dmVhdS9j b2RlZ2VuL252NTBfaXJfdGFyZ2V0X252YzAuY3BwICAgICAgICB8ICAxICsKPj4+ICAgMTAgZmls ZXMgY2hhbmdlZCwgNzQgaW5zZXJ0aW9ucygrKSwgMjEgZGVsZXRpb25zKC0pCj4+Pgo+Pj4gZGlm ZiAtLWdpdCBhL3NyYy9nYWxsaXVtL2RyaXZlcnMvbm91dmVhdS9jb2RlZ2VuL252NTBfaXIuaAo+ Pj4gYi9zcmMvZ2FsbGl1bS9kcml2ZXJzL25vdXZlYXUvY29kZWdlbi9udjUwX2lyLmgKPj4+IGlu ZGV4IGZkYzIxOTUuLjUxNDFmYzYgMTAwNjQ0Cj4+PiAtLS0gYS9zcmMvZ2FsbGl1bS9kcml2ZXJz L25vdXZlYXUvY29kZWdlbi9udjUwX2lyLmgKPj4+ICsrKyBiL3NyYy9nYWxsaXVtL2RyaXZlcnMv bm91dmVhdS9jb2RlZ2VuL252NTBfaXIuaAo+Pj4gQEAgLTMzMyw2ICszMzMsNyBAQCBlbnVtIERh dGFGaWxlCj4+PiAgICAgIEZJTEVfU0hBREVSX0lOUFVULAo+Pj4gICAgICBGSUxFX1NIQURFUl9P VVRQVVQsCj4+PiAgICAgIEZJTEVfTUVNT1JZX0JVRkZFUiwKPj4+ICsgICBGSUxFX01FTU9SWV9H TE9CQUwsCj4+PiAgICAgIEZJTEVfTUVNT1JZX1NIQVJFRCwKPj4+ICAgICAgRklMRV9NRU1PUllf TE9DQUwsCj4+PiAgICAgIEZJTEVfU1lTVEVNX1ZBTFVFLAo+Pj4gZGlmZiAtLWdpdAo+Pj4gYS9z cmMvZ2FsbGl1bS9kcml2ZXJzL25vdXZlYXUvY29kZWdlbi9udjUwX2lyX2VtaXRfZ2sxMTAuY3Bw Cj4+PiBiL3NyYy9nYWxsaXVtL2RyaXZlcnMvbm91dmVhdS9jb2RlZ2VuL252NTBfaXJfZW1pdF9n azExMC5jcHAKPj4+IGluZGV4IDAyYTExMDEuLjYyZjE1OTggMTAwNjQ0Cj4+PiAtLS0gYS9zcmMv Z2FsbGl1bS9kcml2ZXJzL25vdXZlYXUvY29kZWdlbi9udjUwX2lyX2VtaXRfZ2sxMTAuY3BwCj4+ PiArKysgYi9zcmMvZ2FsbGl1bS9kcml2ZXJzL25vdXZlYXUvY29kZWdlbi9udjUwX2lyX2VtaXRf Z2sxMTAuY3BwCj4+PiBAQCAtMTY0MSw4ICsxNjQxLDE1IEBAIENvZGVFbWl0dGVyR0sxMTA6OmVt aXRTVE9SRShjb25zdCBJbnN0cnVjdGlvbiAqaSkKPj4+ICAgICAgaW50MzJfdCBvZmZzZXQgPSBT REFUQShpLT5zcmMoMCkpLm9mZnNldDsKPj4+Cj4+PiAgICAgIHN3aXRjaCAoaS0+c3JjKDApLmdl dEZpbGUoKSkgewo+Pj4gLSAgIGNhc2UgRklMRV9NRU1PUllfQlVGRkVSOiBjb2RlWzFdID0gMHhl MDAwMDAwMDsgY29kZVswXSA9Cj4+PiAweDAwMDAwMDAwOyBicmVhazsKPj4+IC0gICBjYXNlIEZJ TEVfTUVNT1JZX0xPQ0FMOiAgY29kZVsxXSA9IDB4N2E4MDAwMDA7IGNvZGVbMF0gPQo+Pj4gMHgw MDAwMDAwMjsgYnJlYWs7Cj4+PiArICAgY2FzZSBGSUxFX01FTU9SWV9CVUZGRVI6Cj4+PiArICAg Y2FzZSBGSUxFX01FTU9SWV9HTE9CQUw6Cj4+PiArICAgICAgY29kZVswXSA9IDB4MDAwMDAwMDA7 Cj4+PiArICAgICAgY29kZVsxXSA9IDB4ZTAwMDAwMDA7Cj4+PiArICAgICAgYnJlYWs7Cj4+PiAr ICAgY2FzZSBGSUxFX01FTU9SWV9MT0NBTDoKPj4+ICsgICAgICBjb2RlWzBdID0gMHgwMDAwMDAw MjsKPj4+ICsgICAgICBjb2RlWzFdID0gMHg3YTgwMDAwMDsKPj4+ICsgICAgICBicmVhazsKPj4+ ICAgICAgY2FzZSBGSUxFX01FTU9SWV9TSEFSRUQ6Cj4+PiAgICAgICAgIGNvZGVbMF0gPSAweDAw MDAwMDAyOwo+Pj4gICAgICAgICBpZiAoaS0+c3ViT3AgPT0gTlY1MF9JUl9TVUJPUF9TVE9SRV9V TkxPQ0tFRCkKPj4+IEBAIC0xNjc4LDcgKzE2ODUsOCBAQCBDb2RlRW1pdHRlckdLMTEwOjplbWl0 U1RPUkUoY29uc3QgSW5zdHJ1Y3Rpb24gKmkpCj4+Pgo+Pj4gICAgICBzcmNJZChpLT5zcmMoMSks IDIpOwo+Pj4gICAgICBzcmNJZChpLT5zcmMoMCkuZ2V0SW5kaXJlY3QoMCksIDEwKTsKPj4+IC0g ICBpZiAoaS0+c3JjKDApLmdldEZpbGUoKSA9PSBGSUxFX01FTU9SWV9CVUZGRVIgJiYKPj4+ICsg ICBpZiAoKGktPnNyYygwKS5nZXRGaWxlKCkgPT0gRklMRV9NRU1PUllfQlVGRkVSIHx8Cj4+PiAr ICAgICAgICBpLT5zcmMoMCkuZ2V0RmlsZSgpID09IEZJTEVfTUVNT1JZX0dMT0JBTCkgJiYKPj4+ ICAgICAgICAgIGktPnNyYygwKS5pc0luZGlyZWN0KDApICYmCj4+PiAgICAgICAgICBpLT5nZXRJ bmRpcmVjdCgwLCAwKS0+cmVnLnNpemUgPT0gOCkKPj4+ICAgICAgICAgY29kZVsxXSB8PSAxIDw8 IDIzOwo+Pj4gQEAgLTE2OTAsOCArMTY5OCwxNSBAQCBDb2RlRW1pdHRlckdLMTEwOjplbWl0TE9B RChjb25zdCBJbnN0cnVjdGlvbiAqaSkKPj4+ICAgICAgaW50MzJfdCBvZmZzZXQgPSBTREFUQShp LT5zcmMoMCkpLm9mZnNldDsKPj4+Cj4+PiAgICAgIHN3aXRjaCAoaS0+c3JjKDApLmdldEZpbGUo KSkgewo+Pj4gLSAgIGNhc2UgRklMRV9NRU1PUllfQlVGRkVSOiBjb2RlWzFdID0gMHhjMDAwMDAw MDsgY29kZVswXSA9Cj4+PiAweDAwMDAwMDAwOyBicmVhazsKPj4+IC0gICBjYXNlIEZJTEVfTUVN T1JZX0xPQ0FMOiAgY29kZVsxXSA9IDB4N2EwMDAwMDA7IGNvZGVbMF0gPQo+Pj4gMHgwMDAwMDAw MjsgYnJlYWs7Cj4+PiArICAgY2FzZSBGSUxFX01FTU9SWV9CVUZGRVI6Cj4+PiArICAgY2FzZSBG SUxFX01FTU9SWV9HTE9CQUw6Cj4+PiArICAgICAgY29kZVswXSA9IDB4MDAwMDAwMDA7Cj4+PiAr ICAgICAgY29kZVsxXSA9IDB4YzAwMDAwMDA7Cj4+PiArICAgICAgYnJlYWs7Cj4+PiArICAgY2Fz ZSBGSUxFX01FTU9SWV9MT0NBTDoKPj4+ICsgICAgICBjb2RlWzBdID0gMHgwMDAwMDAwMjsKPj4+ ICsgICAgICBjb2RlWzFdID0gMHg3YTAwMDAwMDsKPj4+ICsgICAgICBicmVhazsKPj4+ICAgICAg Y2FzZSBGSUxFX01FTU9SWV9TSEFSRUQ6Cj4+PiAgICAgICAgIGNvZGVbMF0gPSAweDAwMDAwMDAy Owo+Pj4gICAgICAgICBpZiAoaS0+c3ViT3AgPT0gTlY1MF9JUl9TVUJPUF9MT0FEX0xPQ0tFRCkK Pj4+IEBAIC0xODAwLDcgKzE4MTUsOCBAQCBDb2RlRW1pdHRlckdLMTEwOjplbWl0TU9WKGNvbnN0 IEluc3RydWN0aW9uICppKQo+Pj4gICBzdGF0aWMgaW5saW5lIGJvb2wKPj4+ICAgdXNlczY0Yml0 QWRkcmVzcyhjb25zdCBJbnN0cnVjdGlvbiAqbGRzdCkKPj4+ICAgewo+Pj4gLSAgIHJldHVybiBs ZHN0LT5zcmMoMCkuZ2V0RmlsZSgpID09IEZJTEVfTUVNT1JZX0JVRkZFUiAmJgo+Pj4gKyAgIHJl dHVybiAobGRzdC0+c3JjKDApLmdldEZpbGUoKSA9PSBGSUxFX01FTU9SWV9CVUZGRVIgfHwKPj4+ ICsgICAgICAgICAgIGxkc3QtPnNyYygwKS5nZXRGaWxlKCkgPT0gRklMRV9NRU1PUllfR0xPQkFM KSAmJgo+Pj4gICAgICAgICBsZHN0LT5zcmMoMCkuaXNJbmRpcmVjdCgwKSAmJgo+Pj4gICAgICAg ICBsZHN0LT5nZXRJbmRpcmVjdCgwLCAwKS0+cmVnLnNpemUgPT0gODsKPj4+ICAgfQo+Pj4gQEAg LTE4NjIsNyArMTg3OCw4IEBAIENvZGVFbWl0dGVyR0sxMTA6OmVtaXRDQ1RMKGNvbnN0IEluc3Ry dWN0aW9uICppKQo+Pj4KPj4+ICAgICAgY29kZVswXSA9IDB4MDAwMDAwMDIgfCAoaS0+c3ViT3Ag PDwgMik7Cj4+Pgo+Pj4gLSAgIGlmIChpLT5zcmMoMCkuZ2V0RmlsZSgpID09IEZJTEVfTUVNT1JZ X0JVRkZFUikgewo+Pj4gKyAgIGlmIChpLT5zcmMoMCkuZ2V0RmlsZSgpID09IEZJTEVfTUVNT1JZ X0JVRkZFUiB8fAo+Pj4gKyAgICAgICBpLT5zcmMoMCkuZ2V0RmlsZSgpID09IEZJTEVfTUVNT1JZ X0dMT0JBTCkgewo+Pj4gICAgICAgICBjb2RlWzFdID0gMHg3YjAwMDAwMDsKPj4+ICAgICAgfSBl bHNlIHsKPj4+ICAgICAgICAgY29kZVsxXSA9IDB4N2MwMDAwMDA7Cj4+PiBkaWZmIC0tZ2l0Cj4+ PiBhL3NyYy9nYWxsaXVtL2RyaXZlcnMvbm91dmVhdS9jb2RlZ2VuL252NTBfaXJfZW1pdF9nbTEw Ny5jcHAKPj4+IGIvc3JjL2dhbGxpdW0vZHJpdmVycy9ub3V2ZWF1L2NvZGVnZW4vbnY1MF9pcl9l bWl0X2dtMTA3LmNwcAo+Pj4gaW5kZXggMjdmMjg3Zi4uM2ZjZGM1NSAxMDA2NDQKPj4+IC0tLSBh L3NyYy9nYWxsaXVtL2RyaXZlcnMvbm91dmVhdS9jb2RlZ2VuL252NTBfaXJfZW1pdF9nbTEwNy5j cHAKPj4+ICsrKyBiL3NyYy9nYWxsaXVtL2RyaXZlcnMvbm91dmVhdS9jb2RlZ2VuL252NTBfaXJf ZW1pdF9nbTEwNy5jcHAKPj4+IEBAIC0yNDE3LDcgKzI0MTcsOCBAQCB2b2lkCj4+PiAgIENvZGVF bWl0dGVyR00xMDc6OmVtaXRDQ1RMKCkKPj4+ICAgewo+Pj4gICAgICB1bnNpZ25lZCB3aWR0aDsK Pj4+IC0gICBpZiAoaW5zbi0+c3JjKDApLmdldEZpbGUoKSA9PSBGSUxFX01FTU9SWV9CVUZGRVIp IHsKPj4+ICsgICBpZiAoaW5zbi0+c3JjKDApLmdldEZpbGUoKSA9PSBGSUxFX01FTU9SWV9CVUZG RVIgfHwKPj4+ICsgICAgICAgaW5zbi0+c3JjKDApLmdldEZpbGUoKSA9PSBGSUxFX01FTU9SWV9H TE9CQUwpIHsKPj4+ICAgICAgICAgZW1pdEluc24oMHhlZjYwMDAwMCk7Cj4+PiAgICAgICAgIHdp ZHRoID0gMzA7Cj4+PiAgICAgIH0gZWxzZSB7Cj4+PiBAQCAtMjk4OSw2ICsyOTkwLDcgQEAgQ29k ZUVtaXR0ZXJHTTEwNzo6ZW1pdEluc3RydWN0aW9uKEluc3RydWN0aW9uICppKQo+Pj4gICAgICAg ICBjYXNlIEZJTEVfTUVNT1JZX0xPQ0FMIDogZW1pdExETCgpOyBicmVhazsKPj4+ICAgICAgICAg Y2FzZSBGSUxFX01FTU9SWV9TSEFSRUQ6IGVtaXRMRFMoKTsgYnJlYWs7Cj4+PiAgICAgICAgIGNh c2UgRklMRV9NRU1PUllfQlVGRkVSOiBlbWl0TEQoKTsgYnJlYWs7Cj4+PiArICAgICAgY2FzZSBG SUxFX01FTU9SWV9HTE9CQUw6IGVtaXRMRCgpOyBicmVhazsKPj4+ICAgICAgICAgZGVmYXVsdDoK Pj4+ICAgICAgICAgICAgYXNzZXJ0KCEiaW52YWxpZCBsb2FkIik7Cj4+PiAgICAgICAgICAgIGVt aXROT1AoKTsKPj4+IEBAIC0zMDAwLDYgKzMwMDIsNyBAQCBDb2RlRW1pdHRlckdNMTA3OjplbWl0 SW5zdHJ1Y3Rpb24oSW5zdHJ1Y3Rpb24gKmkpCj4+PiAgICAgICAgIGNhc2UgRklMRV9NRU1PUllf TE9DQUwgOiBlbWl0U1RMKCk7IGJyZWFrOwo+Pj4gICAgICAgICBjYXNlIEZJTEVfTUVNT1JZX1NI QVJFRDogZW1pdFNUUygpOyBicmVhazsKPj4+ICAgICAgICAgY2FzZSBGSUxFX01FTU9SWV9CVUZG RVI6IGVtaXRTVCgpOyBicmVhazsKPj4+ICsgICAgICBjYXNlIEZJTEVfTUVNT1JZX0dMT0JBTDog ZW1pdFNUKCk7IGJyZWFrOwo+Pj4gICAgICAgICBkZWZhdWx0Ogo+Pj4gICAgICAgICAgICBhc3Nl cnQoISJpbnZhbGlkIGxvYWQiKTsKPj4+ICAgICAgICAgICAgZW1pdE5PUCgpOwo+Pj4gZGlmZiAt LWdpdAo+Pj4gYS9zcmMvZ2FsbGl1bS9kcml2ZXJzL25vdXZlYXUvY29kZWdlbi9udjUwX2lyX2Vt aXRfbnY1MC5jcHAKPj4+IGIvc3JjL2dhbGxpdW0vZHJpdmVycy9ub3V2ZWF1L2NvZGVnZW4vbnY1 MF9pcl9lbWl0X252NTAuY3BwCj4+PiBpbmRleCA3NDc2ZTIxLi4yNjUzYzgyIDEwMDY0NAo+Pj4g LS0tIGEvc3JjL2dhbGxpdW0vZHJpdmVycy9ub3V2ZWF1L2NvZGVnZW4vbnY1MF9pcl9lbWl0X252 NTAuY3BwCj4+PiArKysgYi9zcmMvZ2FsbGl1bS9kcml2ZXJzL25vdXZlYXUvY29kZWdlbi9udjUw X2lyX2VtaXRfbnY1MC5jcHAKPj4+IEBAIC02NjMsNiArNjYzLDcgQEAgQ29kZUVtaXR0ZXJOVjUw OjplbWl0TE9BRChjb25zdCBJbnN0cnVjdGlvbiAqaSkKPj4+ICAgICAgICAgY29kZVsxXSA9IDB4 NDAwMDAwMDA7Cj4+PiAgICAgICAgIGJyZWFrOwo+Pj4gICAgICBjYXNlIEZJTEVfTUVNT1JZX0JV RkZFUjoKPj4+ICsgICBjYXNlIEZJTEVfTUVNT1JZX0dMT0JBTDoKPj4+ICAgICAgICAgY29kZVsw XSA9IDB4ZDAwMDAwMDEgfCAoaS0+Z2V0U3JjKDApLT5yZWcuZmlsZUluZGV4IDw8IDE2KTsKPj4+ ICAgICAgICAgY29kZVsxXSA9IDB4ODAwMDAwMDA7Cj4+PiAgICAgICAgIGJyZWFrOwo+Pj4gQEAg LTY3MSw3ICs2NzIsOCBAQCBDb2RlRW1pdHRlck5WNTA6OmVtaXRMT0FEKGNvbnN0IEluc3RydWN0 aW9uICppKQo+Pj4gICAgICAgICBicmVhazsKPj4+ICAgICAgfQo+Pj4gICAgICBpZiAoc2YgPT0g RklMRV9NRU1PUllfTE9DQUwgfHwKPj4+IC0gICAgICAgc2YgPT0gRklMRV9NRU1PUllfQlVGRkVS KQo+Pj4gKyAgICAgICBzZiA9PSBGSUxFX01FTU9SWV9CVUZGRVIgfHwKPj4+ICsgICAgICAgc2Yg PT0gRklMRV9NRU1PUllfR0xPQkFMKQo+Pj4gICAgICAgICBlbWl0TG9hZFN0b3JlU2l6ZUxHKGkt PnNUeXBlLCAyMSArIDMyKTsKPj4+Cj4+PiAgICAgIHNldERzdChpLCAwKTsKPj4+IEBAIC02Nzks NyArNjgxLDggQEAgQ29kZUVtaXR0ZXJOVjUwOjplbWl0TE9BRChjb25zdCBJbnN0cnVjdGlvbiAq aSkKPj4+ICAgICAgZW1pdEZsYWdzUmQoaSk7Cj4+PiAgICAgIGVtaXRGbGFnc1dyKGkpOwo+Pj4K Pj4+IC0gICBpZiAoaS0+c3JjKDApLmdldEZpbGUoKSA9PSBGSUxFX01FTU9SWV9CVUZGRVIpIHsK Pj4+ICsgICBpZiAoaS0+c3JjKDApLmdldEZpbGUoKSA9PSBGSUxFX01FTU9SWV9CVUZGRVIgfHwK Pj4+ICsgICAgICAgaS0+c3JjKDApLmdldEZpbGUoKSA9PSBGSUxFX01FTU9SWV9HTE9CQUwpIHsK Pj4+ICAgICAgICAgc3JjSWQoKmktPnNyYygwKS5nZXRJbmRpcmVjdCgwKSwgOSk7Cj4+PiAgICAg IH0gZWxzZSB7Cj4+PiAgICAgICAgIHNldEFSZWcxNihpLCAwKTsKPj4+IEBAIC03MDAsNiArNzAz LDcgQEAgQ29kZUVtaXR0ZXJOVjUwOjplbWl0U1RPUkUoY29uc3QgSW5zdHJ1Y3Rpb24gKmkpCj4+ PiAgICAgICAgIHNyY0lkKGktPnNyYygxKSwgMzIgKyAxNCk7Cj4+PiAgICAgICAgIGJyZWFrOwo+ Pj4gICAgICBjYXNlIEZJTEVfTUVNT1JZX0JVRkZFUjoKPj4+ICsgICBjYXNlIEZJTEVfTUVNT1JZ X0dMT0JBTDoKPj4+ICAgICAgICAgY29kZVswXSA9IDB4ZDAwMDAwMDEgfCAoaS0+Z2V0U3JjKDAp LT5yZWcuZmlsZUluZGV4IDw8IDE2KTsKPj4+ICAgICAgICAgY29kZVsxXSA9IDB4YTAwMDAwMDA7 Cj4+PiAgICAgICAgIGVtaXRMb2FkU3RvcmVTaXplTEcoaS0+ZFR5cGUsIDIxICsgMzIpOwo+Pj4g QEAgLTczNyw3ICs3NDEsNyBAQCBDb2RlRW1pdHRlck5WNTA6OmVtaXRTVE9SRShjb25zdCBJbnN0 cnVjdGlvbiAqaSkKPj4+ICAgICAgICAgYnJlYWs7Cj4+PiAgICAgIH0KPj4+Cj4+PiAtICAgaWYg KGYgPT0gRklMRV9NRU1PUllfQlVGRkVSKQo+Pj4gKyAgIGlmIChmID09IEZJTEVfTUVNT1JZX0JV RkZFUiB8fCBmID09IEZJTEVfTUVNT1JZX0dMT0JBTCkKPj4+ICAgICAgICAgc3JjSWQoKmktPnNy YygwKS5nZXRJbmRpcmVjdCgwKSwgOSk7Cj4+PiAgICAgIGVsc2UKPj4+ICAgICAgICAgc2V0QVJl ZzE2KGksIDApOwo+Pj4gZGlmZiAtLWdpdAo+Pj4gYS9zcmMvZ2FsbGl1bS9kcml2ZXJzL25vdXZl YXUvY29kZWdlbi9udjUwX2lyX2VtaXRfbnZjMC5jcHAKPj4+IGIvc3JjL2dhbGxpdW0vZHJpdmVy cy9ub3V2ZWF1L2NvZGVnZW4vbnY1MF9pcl9lbWl0X252YzAuY3BwCj4+PiBpbmRleCA2MjM2NjU5 Li5jYTQ3NWNlIDEwMDY0NAo+Pj4gLS0tIGEvc3JjL2dhbGxpdW0vZHJpdmVycy9ub3V2ZWF1L2Nv ZGVnZW4vbnY1MF9pcl9lbWl0X252YzAuY3BwCj4+PiArKysgYi9zcmMvZ2FsbGl1bS9kcml2ZXJz L25vdXZlYXUvY29kZWdlbi9udjUwX2lyX2VtaXRfbnZjMC5jcHAKPj4+IEBAIC0yODEsNiArMjgx LDcgQEAgQ29kZUVtaXR0ZXJOVkMwOjpzZXRBZGRyZXNzQnlGaWxlKGNvbnN0IFZhbHVlUmVmJgo+ Pj4gc3JjKQo+Pj4gICB7Cj4+PiAgICAgIHN3aXRjaCAoc3JjLmdldEZpbGUoKSkgewo+Pj4gICAg ICBjYXNlIEZJTEVfTUVNT1JZX0JVRkZFUjoKPj4+ICsgICBjYXNlIEZJTEVfTUVNT1JZX0dMT0JB TDoKPj4+ICAgICAgICAgc3JjQWRkcjMyKHNyYywgMjYsIDApOwo+Pj4gICAgICAgICBicmVhazsK Pj4+ICAgICAgY2FzZSBGSUxFX01FTU9SWV9MT0NBTDoKPj4+IEBAIC0xNzY4LDcgKzE3NjksOCBA QCBDb2RlRW1pdHRlck5WQzA6OmVtaXRDYWNoaW5nTW9kZShDYWNoZU1vZGUgYykKPj4+ICAgc3Rh dGljIGlubGluZSBib29sCj4+PiAgIHVzZXM2NGJpdEFkZHJlc3MoY29uc3QgSW5zdHJ1Y3Rpb24g Kmxkc3QpCj4+PiAgIHsKPj4+IC0gICByZXR1cm4gbGRzdC0+c3JjKDApLmdldEZpbGUoKSA9PSBG SUxFX01FTU9SWV9CVUZGRVIgJiYKPj4+ICsgICByZXR1cm4gKGxkc3QtPnNyYygwKS5nZXRGaWxl KCkgPT0gRklMRV9NRU1PUllfQlVGRkVSIHx8Cj4+PiArICAgICAgICAgICBsZHN0LT5zcmMoMCku Z2V0RmlsZSgpID09IEZJTEVfTUVNT1JZX0dMT0JBTCkgJiYKPj4+ICAgICAgICAgbGRzdC0+c3Jj KDApLmlzSW5kaXJlY3QoMCkgJiYKPj4+ICAgICAgICAgbGRzdC0+Z2V0SW5kaXJlY3QoMCwgMCkt PnJlZy5zaXplID09IDg7Cj4+PiAgIH0KPj4+IEBAIC0xNzc5LDggKzE3ODEsMTMgQEAgQ29kZUVt aXR0ZXJOVkMwOjplbWl0U1RPUkUoY29uc3QgSW5zdHJ1Y3Rpb24gKmkpCj4+PiAgICAgIHVpbnQz Ml90IG9wYzsKPj4+Cj4+PiAgICAgIHN3aXRjaCAoaS0+c3JjKDApLmdldEZpbGUoKSkgewo+Pj4g LSAgIGNhc2UgRklMRV9NRU1PUllfQlVGRkVSOiBvcGMgPSAweDkwMDAwMDAwOyBicmVhazsKPj4+ IC0gICBjYXNlIEZJTEVfTUVNT1JZX0xPQ0FMOiAgb3BjID0gMHhjODAwMDAwMDsgYnJlYWs7Cj4+ PiArICAgY2FzZSBGSUxFX01FTU9SWV9CVUZGRVI6Cj4+PiArICAgY2FzZSBGSUxFX01FTU9SWV9H TE9CQUw6Cj4+PiArICAgICAgb3BjID0gMHg5MDAwMDAwMDsKPj4+ICsgICAgICBicmVhazsKPj4+ ICsgICBjYXNlIEZJTEVfTUVNT1JZX0xPQ0FMOgo+Pj4gKyAgICAgIG9wYyA9IDB4YzgwMDAwMDA7 Cj4+PiArICAgICAgYnJlYWs7Cj4+PiAgICAgIGNhc2UgRklMRV9NRU1PUllfU0hBUkVEOgo+Pj4g ICAgICAgICBpZiAoaS0+c3ViT3AgPT0gTlY1MF9JUl9TVUJPUF9TVE9SRV9VTkxPQ0tFRCkgewo+ Pj4gICAgICAgICAgICBpZiAodGFyZy0+Z2V0Q2hpcHNldCgpID49IE5WSVNBX0dLMTA0X0NISVBT RVQpCj4+PiBAQCAtMTgyOCw4ICsxODM1LDEzIEBAIENvZGVFbWl0dGVyTlZDMDo6ZW1pdExPQUQo Y29uc3QgSW5zdHJ1Y3Rpb24gKmkpCj4+PiAgICAgIGNvZGVbMF0gPSAweDAwMDAwMDA1Owo+Pj4K Pj4+ICAgICAgc3dpdGNoIChpLT5zcmMoMCkuZ2V0RmlsZSgpKSB7Cj4+PiAtICAgY2FzZSBGSUxF X01FTU9SWV9CVUZGRVI6IG9wYyA9IDB4ODAwMDAwMDA7IGJyZWFrOwo+Pj4gLSAgIGNhc2UgRklM RV9NRU1PUllfTE9DQUw6ICBvcGMgPSAweGMwMDAwMDAwOyBicmVhazsKPj4+ICsgICBjYXNlIEZJ TEVfTUVNT1JZX0JVRkZFUjoKPj4+ICsgICBjYXNlIEZJTEVfTUVNT1JZX0dMT0JBTDoKPj4+ICsg ICAgICBvcGMgPSAweDgwMDAwMDAwOwo+Pj4gKyAgICAgIGJyZWFrOwo+Pj4gKyAgIGNhc2UgRklM RV9NRU1PUllfTE9DQUw6Cj4+PiArICAgICAgb3BjID0gMHhjMDAwMDAwMDsKPj4+ICsgICAgICBi cmVhazsKPj4+ICAgICAgY2FzZSBGSUxFX01FTU9SWV9TSEFSRUQ6Cj4+PiAgICAgICAgIGlmIChp LT5zdWJPcCA9PSBOVjUwX0lSX1NVQk9QX0xPQURfTE9DS0VEKSB7Cj4+PiAgICAgICAgICAgIGlm ICh0YXJnLT5nZXRDaGlwc2V0KCkgPj0gTlZJU0FfR0sxMDRfQ0hJUFNFVCkKPj4+IEBAIC0yMDkw LDcgKzIxMDIsOCBAQCBDb2RlRW1pdHRlck5WQzA6OmVtaXRDQ1RMKGNvbnN0IEluc3RydWN0aW9u ICppKQo+Pj4gICB7Cj4+PiAgICAgIGNvZGVbMF0gPSAweDAwMDAwMDA1IHwgKGktPnN1Yk9wIDw8 IDUpOwo+Pj4KPj4+IC0gICBpZiAoaS0+c3JjKDApLmdldEZpbGUoKSA9PSBGSUxFX01FTU9SWV9C VUZGRVIpIHsKPj4+ICsgICBpZiAoaS0+c3JjKDApLmdldEZpbGUoKSA9PSBGSUxFX01FTU9SWV9C VUZGRVIgfHwKPj4+ICsgICAgICAgaS0+c3JjKDApLmdldEZpbGUoKSA9PSBGSUxFX01FTU9SWV9H TE9CQUwpIHsKPj4+ICAgICAgICAgY29kZVsxXSA9IDB4OTgwMDAwMDA7Cj4+PiAgICAgICAgIHNy Y0FkZHIzMihpLT5zcmMoMCksIDI4LCAyKTsKPj4+ICAgICAgfSBlbHNlIHsKPj4+IEBAIC0zMTIy LDYgKzMxMzUsNyBAQCBTY2hlZERhdGFDYWxjdWxhdG9yOjpjaGVja1JkKGNvbnN0IFZhbHVlICp2 LAo+Pj4gaW50IGN5Y2xlLCBpbnQmIGRlbGF5KSBjb25zdAo+Pj4gICAgICBjYXNlIEZJTEVfTUVN T1JZX0NPTlNUOgo+Pj4gICAgICBjYXNlIEZJTEVfTUVNT1JZX1NIQVJFRDoKPj4+ICAgICAgY2Fz ZSBGSUxFX01FTU9SWV9CVUZGRVI6Cj4+PiArICAgY2FzZSBGSUxFX01FTU9SWV9HTE9CQUw6Cj4+ PiAgICAgIGNhc2UgRklMRV9TWVNURU1fVkFMVUU6Cj4+PiAgICAgICAgIC8vIFRPRE86IGFueSBy ZXN0cmljdGlvbnMgaGVyZSA/Cj4+PiAgICAgICAgIGJyZWFrOwo+Pj4gZGlmZiAtLWdpdAo+Pj4g YS9zcmMvZ2FsbGl1bS9kcml2ZXJzL25vdXZlYXUvY29kZWdlbi9udjUwX2lyX2Zyb21fdGdzaS5j cHAKPj4+IGIvc3JjL2dhbGxpdW0vZHJpdmVycy9ub3V2ZWF1L2NvZGVnZW4vbnY1MF9pcl9mcm9t X3Rnc2kuY3BwCj4+PiBpbmRleCA5MTg3OWU0Li5jMTY3YzRhIDEwMDY0NAo+Pj4gLS0tIGEvc3Jj L2dhbGxpdW0vZHJpdmVycy9ub3V2ZWF1L2NvZGVnZW4vbnY1MF9pcl9mcm9tX3Rnc2kuY3BwCj4+ PiArKysgYi9zcmMvZ2FsbGl1bS9kcml2ZXJzL25vdXZlYXUvY29kZWdlbi9udjUwX2lyX2Zyb21f dGdzaS5jcHAKPj4+IEBAIC0zNzQsNyArMzc0LDcgQEAgc3RhdGljIG52NTBfaXI6OkRhdGFGaWxl IHRyYW5zbGF0ZUZpbGUodWludCBmaWxlKQo+Pj4gICAgICBjYXNlIFRHU0lfRklMRV9JTU1FRElB VEU6ICAgICAgIHJldHVybiBudjUwX2lyOjpGSUxFX0lNTUVESUFURTsKPj4+ICAgICAgY2FzZSBU R1NJX0ZJTEVfU1lTVEVNX1ZBTFVFOiAgICByZXR1cm4gbnY1MF9pcjo6RklMRV9TWVNURU1fVkFM VUU7Cj4+PiAgICAgIGNhc2UgVEdTSV9GSUxFX0JVRkZFUjogICAgICAgICAgcmV0dXJuIG52NTBf aXI6OkZJTEVfTUVNT1JZX0JVRkZFUjsKPj4+IC0gICBjYXNlIFRHU0lfRklMRV9NRU1PUlk6ICAg ICAgICAgIHJldHVybiBudjUwX2lyOjpGSUxFX01FTU9SWV9CVUZGRVI7Cj4+PiArICAgY2FzZSBU R1NJX0ZJTEVfTUVNT1JZOiAgICAgICAgICByZXR1cm4gbnY1MF9pcjo6RklMRV9NRU1PUllfR0xP QkFMOwo+Pj4gICAgICBjYXNlIFRHU0lfRklMRV9TQU1QTEVSOgo+Pj4gICAgICBjYXNlIFRHU0lf RklMRV9OVUxMOgo+Pj4gICAgICBkZWZhdWx0Ogo+Pj4gQEAgLTEyODQsNyArMTI4NCw5IEBAIGJv b2wgU291cmNlOjpzY2FuSW5zdHJ1Y3Rpb24oY29uc3Qgc3RydWN0Cj4+PiB0Z3NpX2Z1bGxfaW5z dHJ1Y3Rpb24gKmluc3QpCj4+PiAgICAgICAgICAgIGlmIChkc3QuaXNJbmRpcmVjdCgwKSkKPj4+ ICAgICAgICAgICAgICAgaW5kaXJlY3RUZW1wQXJyYXlzLmluc2VydChkc3QuZ2V0QXJyYXlJZCgp KTsKPj4+ICAgICAgICAgfSBlbHNlCj4+PiAtICAgICAgaWYgKGRzdC5nZXRGaWxlKCkgPT0gVEdT SV9GSUxFX0JVRkZFUikgewo+Pj4gKyAgICAgIGlmIChkc3QuZ2V0RmlsZSgpID09IFRHU0lfRklM RV9CVUZGRVIgfHwKPj4+ICsgICAgICAgICAgKGRzdC5nZXRGaWxlKCkgPT0gVEdTSV9GSUxFX01F TU9SWSAmJgo+Pj4gKyAgICAgICAgICAgbWVtb3J5RmlsZXNbZHN0LmdldEluZGV4KDApXS5tZW1f dHlwZSA9PQo+Pj4gVEdTSV9NRU1PUllfVFlQRV9HTE9CQUwpKSB7Cj4+PiAgICAgICAgICAgIGlu Zm8tPmlvLmdsb2JhbEFjY2VzcyB8PSAweDI7Cj4+PiAgICAgICAgIH0KPj4+ICAgICAgfQo+Pj4g QEAgLTEyOTUsNyArMTI5Nyw5IEBAIGJvb2wgU291cmNlOjpzY2FuSW5zdHJ1Y3Rpb24oY29uc3Qg c3RydWN0Cj4+PiB0Z3NpX2Z1bGxfaW5zdHJ1Y3Rpb24gKmluc3QpCj4+PiAgICAgICAgICAgIGlm IChzcmMuaXNJbmRpcmVjdCgwKSkKPj4+ICAgICAgICAgICAgICAgaW5kaXJlY3RUZW1wQXJyYXlz Lmluc2VydChzcmMuZ2V0QXJyYXlJZCgpKTsKPj4+ICAgICAgICAgfSBlbHNlCj4+PiAtICAgICAg aWYgKHNyYy5nZXRGaWxlKCkgPT0gVEdTSV9GSUxFX0JVRkZFUikgewo+Pj4gKyAgICAgIGlmIChz cmMuZ2V0RmlsZSgpID09IFRHU0lfRklMRV9CVUZGRVIgfHwKPj4+ICsgICAgICAgICAgKHNyYy5n ZXRGaWxlKCkgPT0gVEdTSV9GSUxFX01FTU9SWSAmJgo+Pj4gKyAgICAgICAgICAgbWVtb3J5Rmls ZXNbc3JjLmdldEluZGV4KDApXS5tZW1fdHlwZSA9PQo+Pj4gVEdTSV9NRU1PUllfVFlQRV9HTE9C QUwpKSB7Cj4+PiAgICAgICAgICAgIGluZm8tPmlvLmdsb2JhbEFjY2VzcyB8PSAoaW5zbi5nZXRP cGNvZGUoKSA9PQo+Pj4gVEdTSV9PUENPREVfTE9BRCkgPwo+Pj4gICAgICAgICAgICAgICAgICAw eDEgOiAweDI7Cj4+PiAgICAgICAgIH0gZWxzZQo+Pj4gQEAgLTE1MjksNiArMTUzMywxMCBAQCBD b252ZXJ0ZXI6Om1ha2VTeW0odWludCB0Z3NpRmlsZSwgaW50IGZpbGVJZHgsCj4+PiBpbnQgaWR4 LCBpbnQgYywgdWludDMyX3QgYWRkcmVzcykKPj4+Cj4+PiAgICAgIGlmICh0Z3NpRmlsZSA9PSBU R1NJX0ZJTEVfTUVNT1JZKSB7Cj4+PiAgICAgICAgIHN3aXRjaCAoY29kZS0+bWVtb3J5RmlsZXNb ZmlsZUlkeF0ubWVtX3R5cGUpIHsKPj4+ICsgICAgICBjYXNlIFRHU0lfTUVNT1JZX1RZUEVfR0xP QkFMOgo+Pj4gKyAgICAgICAgIC8qIE5vLW9wIHRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIFRHU0lf RklMRV9NRU1PUlkgKi8KPj4+ICsgICAgICAgICBzeW0tPnNldEZpbGUoRklMRV9NRU1PUllfR0xP QkFMKTsKPj4+ICsgICAgICAgICBicmVhazsKPj4+ICAgICAgICAgY2FzZSBUR1NJX01FTU9SWV9U WVBFX1NIQVJFRDoKPj4+ICAgICAgICAgICAgc3ltLT5zZXRGaWxlKEZJTEVfTUVNT1JZX1NIQVJF RCk7Cj4+PiAgICAgICAgICAgIGJyZWFrOwo+Pj4gZGlmZiAtLWdpdCBhL3NyYy9nYWxsaXVtL2Ry aXZlcnMvbm91dmVhdS9jb2RlZ2VuL252NTBfaXJfcGVlcGhvbGUuY3BwCj4+PiBiL3NyYy9nYWxs aXVtL2RyaXZlcnMvbm91dmVhdS9jb2RlZ2VuL252NTBfaXJfcGVlcGhvbGUuY3BwCj4+PiBpbmRl eCA0YTk2ZDA0Li44NGQyOTQ0IDEwMDY0NAo+Pj4gLS0tIGEvc3JjL2dhbGxpdW0vZHJpdmVycy9u b3V2ZWF1L2NvZGVnZW4vbnY1MF9pcl9wZWVwaG9sZS5jcHAKPj4+ICsrKyBiL3NyYy9nYWxsaXVt L2RyaXZlcnMvbm91dmVhdS9jb2RlZ2VuL252NTBfaXJfcGVlcGhvbGUuY3BwCj4+PiBAQCAtMjU4 MSw2ICsyNTgxLDcgQEAgTWVtb3J5T3B0OjpydW5PcHQoQmFzaWNCbG9jayAqYmIpCj4+PiAgICAg ICAgICAgICAgICBsZHN0LT5vcCA9PSBPUF9NRU1CQVIpIHsKPj4+ICAgICAgICAgICAgICAgcHVy Z2VSZWNvcmRzKE5VTEwsIEZJTEVfTUVNT1JZX0xPQ0FMKTsKPj4+ICAgICAgICAgICAgICAgcHVy Z2VSZWNvcmRzKE5VTEwsIEZJTEVfTUVNT1JZX0JVRkZFUik7Cj4+PiArICAgICAgICAgICAgcHVy Z2VSZWNvcmRzKE5VTEwsIEZJTEVfTUVNT1JZX0dMT0JBTCk7Cj4+PiAgICAgICAgICAgICAgIHB1 cmdlUmVjb3JkcyhOVUxMLCBGSUxFX01FTU9SWV9TSEFSRUQpOwo+Pj4gICAgICAgICAgICAgICBw dXJnZVJlY29yZHMoTlVMTCwgRklMRV9TSEFERVJfT1VUUFVUKTsKPj4+ICAgICAgICAgICAgfSBl bHNlCj4+PiBAQCAtMjU4OCw2ICsyNTg5LDcgQEAgTWVtb3J5T3B0OjpydW5PcHQoQmFzaWNCbG9j ayAqYmIpCj4+PiAgICAgICAgICAgICAgIGlmIChsZHN0LT5zcmMoMCkuZ2V0RmlsZSgpID09IEZJ TEVfTUVNT1JZX0JVRkZFUikgewo+Pj4gICAgICAgICAgICAgICAgICBwdXJnZVJlY29yZHMoTlVM TCwgRklMRV9NRU1PUllfTE9DQUwpOwo+Pj4gICAgICAgICAgICAgICAgICBwdXJnZVJlY29yZHMo TlVMTCwgRklMRV9NRU1PUllfQlVGRkVSKTsKPj4+ICsgICAgICAgICAgICAgICBwdXJnZVJlY29y ZHMoTlVMTCwgRklMRV9NRU1PUllfR0xPQkFMKTsKPj4+ICAgICAgICAgICAgICAgICAgcHVyZ2VS ZWNvcmRzKE5VTEwsIEZJTEVfTUVNT1JZX1NIQVJFRCk7Cj4+PiAgICAgICAgICAgICAgIH0gZWxz ZSB7Cj4+PiAgICAgICAgICAgICAgICAgIHB1cmdlUmVjb3JkcyhOVUxMLCBsZHN0LT5zcmMoMCku Z2V0RmlsZSgpKTsKPj4+IEBAIC0yNjA3LDcgKzI2MDksOCBAQCBNZW1vcnlPcHQ6OnJ1bk9wdChC YXNpY0Jsb2NrICpiYikKPj4+ICAgICAgICAgICAgRGF0YUZpbGUgZmlsZSA9IGxkc3QtPnNyYygw KS5nZXRGaWxlKCk7Cj4+Pgo+Pj4gICAgICAgICAgICAvLyBpZiBsZCBsW10vZ1tdIGxvb2sgZm9y IHByZXZpb3VzIHN0b3JlIHRvIGVsaW1pbmF0ZSB0aGUKPj4+IHJlbG9hZAo+Pj4gLSAgICAgICAg IGlmIChmaWxlID09IEZJTEVfTUVNT1JZX0JVRkZFUiB8fCBmaWxlID09IEZJTEVfTUVNT1JZX0xP Q0FMKSB7Cj4+PiArICAgICAgICAgaWYgKGZpbGUgPT0gRklMRV9NRU1PUllfQlVGRkVSIHx8IGZp bGUgPT0gRklMRV9NRU1PUllfTE9DQUwgfHwKPj4+ICsgICAgICAgICAgICAgZmlsZSA9PSBGSUxF X01FTU9SWV9HTE9CQUwpIHsKPj4+ICAgICAgICAgICAgICAgLy8gVE9ETzogc2hhcmVkIG1lbW9y eSA/Cj4+PiAgICAgICAgICAgICAgIHJlYyA9IGZpbmRSZWNvcmQobGRzdCwgZmFsc2UsIGlzQWRq YWNlbnQpOwo+Pj4gICAgICAgICAgICAgICBpZiAocmVjICYmICFpc0FkamFjZW50KQo+Pj4gZGlm ZiAtLWdpdCBhL3NyYy9nYWxsaXVtL2RyaXZlcnMvbm91dmVhdS9jb2RlZ2VuL252NTBfaXJfcHJp bnQuY3BwCj4+PiBiL3NyYy9nYWxsaXVtL2RyaXZlcnMvbm91dmVhdS9jb2RlZ2VuL252NTBfaXJf cHJpbnQuY3BwCj4+PiBpbmRleCA3M2VkNzUzLi4zOTE3NzY4IDEwMDY0NAo+Pj4gLS0tIGEvc3Jj L2dhbGxpdW0vZHJpdmVycy9ub3V2ZWF1L2NvZGVnZW4vbnY1MF9pcl9wcmludC5jcHAKPj4+ICsr KyBiL3NyYy9nYWxsaXVtL2RyaXZlcnMvbm91dmVhdS9jb2RlZ2VuL252NTBfaXJfcHJpbnQuY3Bw Cj4+PiBAQCAtNDU2LDYgKzQ1Niw3IEBAIGludCBTeW1ib2w6OnByaW50KGNoYXIgKmJ1Ziwgc2l6 ZV90IHNpemUsCj4+PiAgICAgIGNhc2UgRklMRV9TSEFERVJfSU5QVVQ6ICBjID0gJ2EnOyBicmVh azsKPj4+ICAgICAgY2FzZSBGSUxFX1NIQURFUl9PVVRQVVQ6IGMgPSAnbyc7IGJyZWFrOwo+Pj4g ICAgICBjYXNlIEZJTEVfTUVNT1JZX0JVRkZFUjogYyA9ICdnJzsgYnJlYWs7Cj4+PiArICAgY2Fz ZSBGSUxFX01FTU9SWV9HTE9CQUw6IGMgPSAnZyc7IGJyZWFrOwo+Pj4gICAgICBjYXNlIEZJTEVf TUVNT1JZX1NIQVJFRDogYyA9ICdzJzsgYnJlYWs7Cj4+PiAgICAgIGNhc2UgRklMRV9NRU1PUllf TE9DQUw6ICBjID0gJ2wnOyBicmVhazsKPj4+ICAgICAgZGVmYXVsdDoKPj4+IGRpZmYgLS1naXQK Pj4+IGEvc3JjL2dhbGxpdW0vZHJpdmVycy9ub3V2ZWF1L2NvZGVnZW4vbnY1MF9pcl90YXJnZXRf bnY1MC5jcHAKPj4+IGIvc3JjL2dhbGxpdW0vZHJpdmVycy9ub3V2ZWF1L2NvZGVnZW4vbnY1MF9p cl90YXJnZXRfbnY1MC5jcHAKPj4+IGluZGV4IDFjZDQ1YTIuLjVjNjBiMjIgMTAwNjQ0Cj4+PiAt LS0gYS9zcmMvZ2FsbGl1bS9kcml2ZXJzL25vdXZlYXUvY29kZWdlbi9udjUwX2lyX3RhcmdldF9u djUwLmNwcAo+Pj4gKysrIGIvc3JjL2dhbGxpdW0vZHJpdmVycy9ub3V2ZWF1L2NvZGVnZW4vbnY1 MF9pcl90YXJnZXRfbnY1MC5jcHAKPj4+IEBAIC0yMDgsNiArMjA4LDcgQEAgVGFyZ2V0TlY1MDo6 Z2V0RmlsZVNpemUoRGF0YUZpbGUgZmlsZSkgY29uc3QKPj4+ICAgICAgY2FzZSBGSUxFX1NIQURF Ul9JTlBVVDogIHJldHVybiAweDIwMDsKPj4+ICAgICAgY2FzZSBGSUxFX1NIQURFUl9PVVRQVVQ6 IHJldHVybiAweDIwMDsKPj4+ICAgICAgY2FzZSBGSUxFX01FTU9SWV9CVUZGRVI6IHJldHVybiAw eGZmZmZmZmZmOwo+Pj4gKyAgIGNhc2UgRklMRV9NRU1PUllfR0xPQkFMOiByZXR1cm4gMHhmZmZm ZmZmZjsKPj4+ICAgICAgY2FzZSBGSUxFX01FTU9SWV9TSEFSRUQ6IHJldHVybiAxNiA8PCAxMDsK Pj4+ICAgICAgY2FzZSBGSUxFX01FTU9SWV9MT0NBTDogIHJldHVybiA0OCA8PCAxMDsKPj4+ICAg ICAgY2FzZSBGSUxFX1NZU1RFTV9WQUxVRTogIHJldHVybiAxNjsKPj4+IGRpZmYgLS1naXQKPj4+ IGEvc3JjL2dhbGxpdW0vZHJpdmVycy9ub3V2ZWF1L2NvZGVnZW4vbnY1MF9pcl90YXJnZXRfbnZj MC5jcHAKPj4+IGIvc3JjL2dhbGxpdW0vZHJpdmVycy9ub3V2ZWF1L2NvZGVnZW4vbnY1MF9pcl90 YXJnZXRfbnZjMC5jcHAKPj4+IGluZGV4IGJkYTU5YTUuLjllMWU3YmYgMTAwNjQ0Cj4+PiAtLS0g YS9zcmMvZ2FsbGl1bS9kcml2ZXJzL25vdXZlYXUvY29kZWdlbi9udjUwX2lyX3RhcmdldF9udmMw LmNwcAo+Pj4gKysrIGIvc3JjL2dhbGxpdW0vZHJpdmVycy9ub3V2ZWF1L2NvZGVnZW4vbnY1MF9p cl90YXJnZXRfbnZjMC5jcHAKPj4+IEBAIC0yNDksNiArMjQ5LDcgQEAgVGFyZ2V0TlZDMDo6Z2V0 RmlsZVNpemUoRGF0YUZpbGUgZmlsZSkgY29uc3QKPj4+ICAgICAgY2FzZSBGSUxFX1NIQURFUl9J TlBVVDogIHJldHVybiAweDQwMDsKPj4+ICAgICAgY2FzZSBGSUxFX1NIQURFUl9PVVRQVVQ6IHJl dHVybiAweDQwMDsKPj4+ICAgICAgY2FzZSBGSUxFX01FTU9SWV9CVUZGRVI6IHJldHVybiAweGZm ZmZmZmZmOwo+Pj4gKyAgIGNhc2UgRklMRV9NRU1PUllfR0xPQkFMOiByZXR1cm4gMHhmZmZmZmZm ZjsKPj4+ICAgICAgY2FzZSBGSUxFX01FTU9SWV9TSEFSRUQ6IHJldHVybiAxNiA8PCAxMDsKPj4+ ICAgICAgY2FzZSBGSUxFX01FTU9SWV9MT0NBTDogIHJldHVybiA0OCA8PCAxMDsKPj4+ICAgICAg Y2FzZSBGSUxFX1NZU1RFTV9WQUxVRTogIHJldHVybiAzMjsKPj4+Cl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5vdXZlYXUgbWFpbGluZyBsaXN0Ck5vdXZl YXVAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vbm91dmVhdQo=