From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH i-g-t] tests/kms_fbc_crc.c: No longer dependant on Cairo A setup function that used to use Cairo to draw 2 rectangles covering the whole screen has been changed to use igt_draw Date: Fri, 22 Jan 2016 18:12:24 +0100 Message-ID: <20160122171224.GF11240@phenom.ffwll.local> References: <1452872548-4959-1-git-send-email-devon.davies@intel.com> <1453318472.22174.93.camel@intel.com> <38ACF0BC99FA3A449472D1EE32ACA1EA2B2918AB@IRSMSX107.ger.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-f68.google.com (mail-wm0-f68.google.com [74.125.82.68]) by gabe.freedesktop.org (Postfix) with ESMTPS id 661516EC55 for ; Fri, 22 Jan 2016 09:12:18 -0800 (PST) Received: by mail-wm0-f68.google.com with SMTP id 123so18456330wmz.2 for ; Fri, 22 Jan 2016 09:12:18 -0800 (PST) Content-Disposition: inline In-Reply-To: <38ACF0BC99FA3A449472D1EE32ACA1EA2B2918AB@IRSMSX107.ger.corp.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Davies, Devon" Cc: "Vetter, Daniel" , "intel-gfx@lists.freedesktop.org" , "Zanoni, Paulo R" List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBKYW4gMjIsIDIwMTYgYXQgMDU6MDI6MDdQTSArMDAwMCwgRGF2aWVzLCBEZXZvbiB3 cm90ZToKPiBIaSwKPiAKPiBXaXRoIHJlZ2FyZHMgdG8gdGhlIGFkZGl0aW9uYWwgTlVMTCBhcmd1 bWVudCB0byBkcm1Nb2RlU2V0UGxhbmUgb24gQW5kcm9pZC4KPiAKPiBBcHBhcmVudGx5LCB0aGVy ZSB3YXMgYSBwcmV2aW91cyBhdHRlbXB0IHRvIG1ha2UgYSB3cmFwcGVyIGZvciBpdC4KPiBXb3Vs ZCBpdCBiZSBwb3NzaWJsZSB0byB1cHN0cmVhbSB0aGF0PwoKTm8uIFdob2V2ZXIgaGFzIGRvbmUg dGhhdCBwcml2YXRlIHBhdGNoIGluIEFuZHJvaWQgaGFzIG5vIGlkZWEgYWJvdXQgYWJpCmNvbXBh dGliaWxpdHkgYW5kIGJldHRlciBjYXJyeSB0aGUgZmFsbG91dCBmcm9tIHRoYXQgdGhlbXNlbHZl cy4gSWlyYyB0aGlzCmZ1biBpcyBhIGZldyB5ZWFycyBvbGQgYWxyZWFkeSwgYXQgbGVhc3QgaXQg bG9va3MgdmVyeSBmYW1pbGlhci4KLURhbmllbAoKPiAKPiBEZXZvbgo+IAo+IAo+IC0tLS0tT3Jp Z2luYWwgTWVzc2FnZS0tLS0tCj4gRnJvbTogRGF2aWVzLCBEZXZvbiAKPiBTZW50OiBGcmlkYXks IEphbnVhcnkgMjIsIDIwMTYgMzoxOCBQTQo+IFRvOiBaYW5vbmksIFBhdWxvIFI7IGludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBDYzogR29yZSwgVGltOyBWZXR0ZXIsIERhbmllbAo+ IFN1YmplY3Q6IFJFOiBbSW50ZWwtZ2Z4XSBbUEFUQ0ggaS1nLXRdIHRlc3RzL2ttc19mYmNfY3Jj LmM6IE5vIGxvbmdlciBkZXBlbmRhbnQgb24gQ2Fpcm8gQSBzZXR1cCBmdW5jdGlvbiB0aGF0IHVz ZWQgdG8gdXNlIENhaXJvIHRvIGRyYXcgMiByZWN0YW5nbGVzIGNvdmVyaW5nIHRoZSB3aG9sZSBz Y3JlZW4gaGFzIGJlZW4gY2hhbmdlZCB0byB1c2UgaWd0X2RyYXcKPiAKPiBIaSwKPiAKPiBUaGFu a3MgZm9yIHRoZSBmZWVkYmFjay4KPiAKPiBJJ2xsIHVwZGF0ZSB0aGUgY29tbWl0IHRpdGxlLiBJ IHdpbGwgYWxzbyBzZXBhcmF0ZSB0aGlzIHBhdGNoIGludG8gNSBwYXRjaGVzLgo+IAo+IEZvciBu b3cgSSB3YW50IHRvIGtlZXAgdGhlICJpZmRlZiBkYW5jZSIgaW4gaWd0X2ZiYy5jLiBJZiB3ZSB3 YW50IHRvIHNwbGl0IHRoZSBmaWxlIHVwLCB0aGF0IHNob3VsZCBiZSBhIG5ldyBjb21taXQvcGF0 Y2guCj4gKEkgdGhpbmsgd2Ugc2hvdWxkIGdldCB0aGUgZmJjIHRlc3RzIGJ1aWxkaW5nIG9uIEFu ZHJvaWQgZmlyc3QgYmVmb3JlIHdlIHN0YXJ0IHRoZSBzcGxpdHRpbmcgdXAgaWd0X2ZiYy5jLCBz aW5jZSB3ZSB3YW50IHRvIHN0YXJ0IHRlc3RpbmcgYXNhcC4pCj4gCj4gSSBsb29rZWQgdG8gc2Vl IGlmIEkgaGFkIHJlbW92ZWQvYWRkZWQgYW55IGV4dHJhIGxpbmVzLi4uIHNvbWUgbXVzdCBoYXZl IG1pc3NlZCBtZSwgSSB3aWxsIHJldmVydCB0aGVtLgo+IAo+IFRoZSBmZnMgZGVmaW5lOiBJIGNh biBzZWUgdGhhdCBiZWluZyBkYW5nZXJvdXMuCj4gU2hvdWxkIEkgZG8KPiAjaWYgZGVmaW5lZChf X0dOVUNfXykKPiAjZGVmaW5lIGZmcyBfX2J1aWx0aW5fZmZzCj4gI2VuZGlmCj4gPwo+IEluIG15 IG9waW5pb24gdGhhdCBpcyBjbGVhbmVyIHRoYW4gaGF2aW5nIGEgaWZkZWYgYXJvdW5kIHRoZSBh Y3R1YWwgZmZzIGZ1bmN0aW9uIGNhbGwuIEl0J3MgYWxzbyBlYXNpZXIgdG8gYWRkIHRvIChpbiBj YXNlIHNvbWVvbmUgaW4gdGhlIGZ1dHVyZSB1c2VzIGEgZGlmZmVyZW50IGNvbXBpbGVyKS4KPiAK PiBpZ3RfZHJtX3BsYW5lX2NvbW1pdDoKPiBJIGRvbid0IGtub3cgd2h5IEFuZHJvaWQgaXMgZGlm ZmVyZW50LCBhY2NvcmRpbmcgdG8gZ2l0IGJsYW1lLCBpdCdzIGJlZW4gdGhpcyB3YXkgc2luY2Ug MTN0aCBKdW5lIDIwMTQuCj4gSSdsbCBhc2sgd2h5IHNlcGFyYXRlbHkgdG8gdGhpcyB0aHJlYWQu Cj4gQXMgZm9yIG1ha2luZyBhIHdyYXBwZXIuIEkgdGhpbmsgdGhhdCBzaG91bGQgYmUgcGFydCBv ZiBhbm90aGVyIGNvbW1pdC4KPiAoQWdhaW4gdG8gYmUgZG9uZSBhZnRlciB0aGlzLCBzaW5jZSB3 ZSB3YW50IHRvIGJlZ2luIHRlc3RpbmcgYXNhcC4pCj4gCj4gVGhhbmtzLAo+IERldm9uLgo+IAo+ IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4gRnJvbTogWmFub25pLCBQYXVsbyBSCj4gU2Vu dDogV2VkbmVzZGF5LCBKYW51YXJ5IDIwLCAyMDE2IDc6MzUgUE0KPiBUbzogaW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZzsgRGF2aWVzLCBEZXZvbgo+IENjOiBHb3JlLCBUaW07IFZldHRl ciwgRGFuaWVsCj4gU3ViamVjdDogUmU6IFtJbnRlbC1nZnhdIFtQQVRDSCBpLWctdF0gdGVzdHMv a21zX2ZiY19jcmMuYzogTm8gbG9uZ2VyIGRlcGVuZGFudCBvbiBDYWlybyBBIHNldHVwIGZ1bmN0 aW9uIHRoYXQgdXNlZCB0byB1c2UgQ2Fpcm8gdG8gZHJhdyAyIHJlY3RhbmdsZXMgY292ZXJpbmcg dGhlIHdob2xlIHNjcmVlbiBoYXMgYmVlbiBjaGFuZ2VkIHRvIHVzZSBpZ3RfZHJhdwo+IAo+IEhp Cj4gCj4gSW4gb3VyIElHVC9LZXJuZWwgY3VsdHVyZSwgcGF0Y2ggY29tbWl0IHRpdGxlcyAoaGVy ZSwgcHJlc2VudGVkIGFzIHRoZSBlbWFpbCBzdWJqZWN0KSBhcmUgdXN1YWxseSBzbWFsbCAodW5k ZXIgNzAtODAgY2hhcnMpIHByb3ZpZGluZyBhIHF1aWNrIHN1bW1hcnkgb2Ygd2hhdCB0aGUgY2hh bmdlIGRvZXMuCj4gCj4gQWxzbywgd2UgdHJ5IHRvIG1ha2UgZWFjaCBwYXRjaCBjb250YWluIGEg c2luZ2xlIGxvZ2ljYWwgYW5kIGNvbXBsZXRlIGNoYW5nZS4gU28sIGZvciBleGFtcGxlLCBvbmUg YXBwcm9hY2ggeW91IGNvdWxkIGhhdmUgdGFrZW4gaGVyZSB3b3VsZAo+IGJlOgo+IMKgLSBwYXRj aCAxOiB1cGRhdGUgbGliL2lndF9mYi5jIHNvIGl0IGNvbXBpbGVzIG9uIEFuZHJvaWQgd2l0aG91 dCBjYWlybwo+IMKgLSBwYXRjaCAyOiBzb2x2ZSB0aGUgZmZzKCkgcHJvYmxlbQo+IMKgLSBwYXRj aCAzOiBzb2x2ZSB0aGUgZHJtTW9kZVNldFBsYW5lKCkgcHJvYmxlbQo+IMKgLSBwYXRjaCA0OiBj aGFuZ2Uga21zX2ZiY19jcmMgdG8gbm90IG5lZWQgY2Fpcm8KPiDCoC0gcGF0Y2ggNTogY2hhbmdl IHRoZSBidWlsZCBzeXN0ZW0gc28gaXQgY29tcGlsZXMgdGVzdHMgdGhhdCBub3cgd29yayBvbiBB bmRyb2lkCj4gCj4gRm9sbG93aW5nIGlzIGFub3RoZXIgdGV4dCBleHBsYWluaW5nIHRoaXMgcGF0 dGVybjoKPiBodHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZHJtLWludGVsL3RyZWUvRG9jdW1l bnRhdGlvbi9TdWJtaXR0aW5nUGF0Ywo+IGhlcyNuMjAxCj4gCj4gCj4gTm93LCByZWdhcmRpbmcg dGhlIEFuZHJvaWQgdnMgQ2Fpcm8gbWFjcm9zOiBJIGtub3cgdGhpcyBoYXMgYmVlbiBkaXNjdXNz ZWQgaW4gdGhlIG1haWxpbmcgbGlzdCBhIGZldyB0aW1lcyBidXQgSSBkaWRuJ3QgZm9sbG93IGl0 IGNsb3NlbHksIGFuZCBJR1QgZXZlbiBoYXMgdGhlIEFORFJPSURfSEFTX0NBSVJPIHN1cHBvcnQs IHNvIEknZCBsaWtlIERhbmllbCBvciBvdGhlcnMgdG8gY29tbWVudCBvbiB0aGlzLiBEbyB3ZSB3 YW50IHRoZSBpZmRlZiBkYW5jZSBpbiBpZ3RfZmI/IFBlcmhhcHMgd2UgY291bGQgc3BsaXQgdGhl IGxpYnMgaW50byBpZ3RfZmIgZm9yIHRoZSBub24tY2Fpcm8gcGFydHMsIGFuZCBpZ3RfY2Fpcm8g Zm9yIHRoZSBjYWlybyBwYXJ0cz8gVGhlIGlndF9mYiBsaWJyYXJ5IGlzIGRlZmluaXRlbHkgdXNl ZnVsIHdpdGhvdXQgY2Fpcm8sIHNvIHRoaXMgd291bGQgbWFrZSBzZW5zZSB0byBtZS4gQnV0IHBl cmhhcHMgd2Ugd2FudCB0byBqdXN0IGtlZXAgZXZlcnl0aGluZyBhcy1pcyBzaW5jZSBpdCdzIHBv c3NpYmxlIHRvIGhhdmUgY2Fpcm8gb24gQW5kcm9pZD8KPiAKPiBUaGVyZSBhcmUgc29tZSBvdGhl ciBjb21tZW50cyBpbmxpbmUuIFBsZWFzZSBzZWUgYmVsb3cuCj4gCj4gCj4gRW0gU2V4LCAyMDE2 LTAxLTE1IMOgcyAxNTo0MiArMDAwMCwgZGV2b24uZGF2aWVzQGludGVsLmNvbSBlc2NyZXZldToK PiA+IEZyb206IERldm9uIERhdmllcyA8ZGV2b24uZGF2aWVzQGludGVsLmNvbT4KPiA+IAo+ID4g dGVzdHMva21zX2Zyb250YnVmZmVyX3RyYWNraW5nLmM6IE5vdyBidWlsZHMgd2l0aCBEUk1fUFJJ TUFSWV9ESVNBQkxFCj4gPiDCoMKgwqDCoEVhY2ggY2FsbCB0byB0aGUgZnVuY3Rpb24gZHJtTW9k ZVNldFBsYW5lIG5vdyBoYXMgYW4gYWRkdGlvbmFsIAo+ID4gTlVMTCBpbiB0aGUKPiA+IMKgwqDC oMKgYXJndW1lbnRzIGlmIERSTV9QUklNQVJZX0RJU0FCTEUgaXMgc2V0Lgo+ID4gCj4gPiB0ZXN0 cy9BbmRyb2lkLm1rOiBBbGxvdyB0aGUgYWJvdmUgdGVzdHMgdG8gYmUgYnVpbHQgd2l0aG91dCBD YWlybwo+ID4gwqDCoMKgwqBTaW1wbHkgcmVtb3ZlZCB0aGVtIGZyb20gdGhlIHRlc3RzIHRoZSBi ZSBza2lwcGVkLgo+ID4gCj4gPiBsaWJzL2lndF9rbXMuYzogTm93IGJ1aWxkcyB3aXRoIERSTV9Q UklNQVJZX0RJU0FCTEUKPiA+IMKgwqDCoMKgSSBoYWQgdG8gZGVmaW5lIGZmcyBhcyBfX2J1aWx0 aW5fZnNzIGR1ZSB0byBjb21waWxlciBpc3N1ZXMuCj4gPiDCoMKgwqDCoEVhY2ggY2FsbCB0byB0 aGUgZnVuY3Rpb24gZHJtTW9kZVNldFBsYW5lIG5vdyBoYXMgYW4gYWRkdGlvbmFsIAo+ID4gTlVM TCBpbiB0aGUKPiA+IMKgwqDCoMKgYXJndW1lbnRzIGlmIERSTV9QUklNQVJZX0RJU0FCTEUgaXMg c2V0Lgo+ID4gCj4gPiBsaWJzL2lndF9mYi5jOiBXaWxsIG5vdyBidWlsZCBzb21lIGZ1bmN0aW9u cyB3aXRob3V0IENhaXJvCj4gPiDCoMKgwqDCoEZ1bmN0aW9ucyB3aGljaCBhcmVuJ3QgdXNlZCBi eSB0aGUgZnJhbWVidWZmZXIgY29tcHJlc3Npb24gdGVzdHMgCj4gPiBhcmUKPiA+IMKgwqDCoMKg bm93IGJlaGluZCBhbiAjaWYgKCFkZWZpbmVkKEFORFJPSUQpKSB8fCAoZGVmaW5lZChBTkRST0lE KSAmJgo+ID4gwqDCoMKgwqBBTkRST0lEX0hBU19DQUlSTwo+ID4gCj4gPiBsaWJzL0FuZHJvaWQu bWsKPiA+IMKgwqDCoMKgaWd0X2ZiIGFuZCBpZ3Rfa21zIGFyZSBubyBsb25nZXIgaWdub3JlZCBp ZiB3ZSBkb24ndCBoYXZlIENhaXJvLgo+ID4gCj4gPiBUaGUgdGVzdHMga21zX2ZiY19jcmMgYW5k IGttc19mcm9udGJ1ZmZlcl90cmFja2luZyBoYWQgYW4gdW5uZWNlc3NhcnkgCj4gPiBkZXBlbmRh bmNlIG9uIHRoZSBDYWlybyBncmFwaGljcyBlbmdpbmUuCj4gPiBBbHNvLCBkcm1Nb2RlU2V0UGxh bmUgbWF5IGhhdmUgYW4gYWRkaXRpb25hbCBhcmd1bWVudCBpZiAKPiA+IERSTV9QUklNQVJZX0RJ U0FCTEUgaXMgc2V0IChhcyBpdCB3YXMgZm9yIG1lKSwgSSBoYXZlIGZpeGVkIHRoYXQgCj4gPiBp c3N1ZS4KPiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogRGV2b24gRGF2aWVzIDxkZXZvbi5kYXZpZXNA aW50ZWwuY29tPgo+ID4gLS0tCj4gPiDCoGxpYi9BbmRyb2lkLm1rwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDQgLS0KPiA+IMKgbGliL2lndF9mYi5jwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfCAyNiArKysrKysrKysrKystCj4gPiDC oGxpYi9pZ3Rfa21zLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfCAx NSArKysrKystLQo+ID4gwqB0ZXN0cy9BbmRyb2lkLm1rwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHzCoMKgNSArKysKPiA+IMKgdGVzdHMva21zX2ZiY19jcmMuY8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB8IDIwICsrKysrKy0tLS0KPiA+IMKgdGVzdHMva21zX2Zyb250YnVm ZmVyX3RyYWNraW5nLmMgfCA3OQo+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr LS0tLS0tLQo+ID4gwqA2IGZpbGVzIGNoYW5nZWQsIDExOSBpbnNlcnRpb25zKCspLCAzMCBkZWxl dGlvbnMoLSkKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2xpYi9BbmRyb2lkLm1rIGIvbGliL0FuZHJv aWQubWsgaW5kZXggYmFkZWMxZS4uYmJkYjA1MQo+ID4gMTAwNjQ0Cj4gPiAtLS0gYS9saWIvQW5k cm9pZC5tawo+ID4gKysrIGIvbGliL0FuZHJvaWQubWsKPiA+IEBAIC0zNywxMCArMzcsNiBAQCBp ZmVxICgiJHtBTkRST0lEX0hBU19DQUlST30iLCAiMSIpCj4gPiDCoMKgwqDCoMKgTE9DQUxfQ19J TkNMVURFUyArPSAkKEFORFJPSURfQlVJTERfVE9QKS9leHRlcm5hbC9jYWlyby0KPiA+IDEuMTIu MTYvc3JjCj4gPiDCoMKgwqDCoMKgTE9DQUxfQ0ZMQUdTICs9IC1EQU5EUk9JRF9IQVNfQ0FJUk89 MSAtRElHVF9EQVRBRElSPVwiLlwiCj4gPiAtRElHVF9TUkNESVI9XCIuXCIKPiA+IMKgZWxzZQo+ ID4gLXNraXBfbGliX2xpc3QgOj0gXAo+ID4gLcKgwqDCoMKgaWd0X2ttcy5jIFwKPiA+IC3CoMKg wqDCoGlndF9rbXMuaCBcCj4gPiAtwqDCoMKgwqBpZ3RfZmIuYwo+ID4gwqDCoMKgwqDCoC1EQU5E Uk9JRF9IQVNfQ0FJUk89MAo+ID4gwqBlbmRpZgo+ID4gwqAKPiA+IGRpZmYgLS1naXQgYS9saWIv aWd0X2ZiLmMgYi9saWIvaWd0X2ZiLmMgaW5kZXggYzk4NTgyNC4uNWFjZGFhNyAxMDA2NDQKPiA+ IC0tLSBhL2xpYi9pZ3RfZmIuYwo+ID4gKysrIGIvbGliL2lndF9mYi5jCj4gPiBAQCAtMzMsNiAr MzMsNyBAQAo+ID4gwqAjaW5jbHVkZSAiaWd0X2ZiLmgiCj4gPiDCoCNpbmNsdWRlICJpb2N0bF93 cmFwcGVycy5oIgo+ID4gwqAKPiA+ICsKPiAKPiBQbGVhc2UgZG9uJ3QgYWRkIHJhbmRvbSBsaW5l cyB0byBmaWxlcy4KPiAKPiAKPiA+IMKgLyoqCj4gPiDCoCAqIFNFQ1RJT046aWd0X2ZiCj4gPiDC oCAqIEBzaG9ydF9kZXNjcmlwdGlvbjogRnJhbWVidWZmZXIgaGFuZGxpbmcgYW5kIGRyYXdpbmcg bGlicmFyeSBAQAo+ID4gLTUyLDExICs1MywyMyBAQAo+ID4gwqAgKi8KPiA+IMKgCj4gPiDCoC8q IGRybSBmb3VyY2MvY2Fpcm8gZm9ybWF0IG1hcHMgKi8KPiA+ICsjaWYgKCFkZWZpbmVkKEFORFJP SUQpKSB8fCAoZGVmaW5lZChBTkRST0lEKSAmJiBBTkRST0lEX0hBU19DQUlSTykKPiA+ICsKPiA+ IMKgI2RlZmluZSBERihkaWQsIGNpZCwgX2JwcCwgX2RlcHRoKQlcCj4gPiDCoAl7IERSTV9GT1JN QVRfIyNkaWQsIENBSVJPX0ZPUk1BVF8jI2NpZCwgIyBkaWQsIF9icHAsIF9kZXB0aCB9Cj4gPiAr Cj4gPiArI2Vsc2UKPiA+ICsKPiA+ICsjZGVmaW5lIERGKGRpZCwgY2lkLCBfYnBwLCBfZGVwdGgp CVwKPiA+ICsJeyBEUk1fRk9STUFUXyMjZGlkLCAjIGRpZCwgX2JwcCwgX2RlcHRoIH0KPiA+ICsK PiA+ICsjZW5kaWYKPiA+ICsKPiA+IMKgc3RhdGljIHN0cnVjdCBmb3JtYXRfZGVzY19zdHJ1Y3Qg ewo+ID4gwqAJdWludDMyX3QgZHJtX2lkOwo+ID4gKyNpZiAoIWRlZmluZWQoQU5EUk9JRCkpIHx8 IChkZWZpbmVkKEFORFJPSUQpICYmIEFORFJPSURfSEFTX0NBSVJPKQo+ID4gwqAJY2Fpcm9fZm9y bWF0X3QgY2Fpcm9faWQ7Cj4gPiArI2VuZGlmCj4gPiDCoAljb25zdCBjaGFyICpuYW1lOwo+ID4g wqAJaW50IGJwcDsKPiA+IMKgCWludCBkZXB0aDsKPiA+IEBAIC03Miw3ICs4NSw2IEBAIHN0YXRp YyBzdHJ1Y3QgZm9ybWF0X2Rlc2Nfc3RydWN0IHsKPiA+IMKgI2RlZmluZSBmb3JfZWFjaF9mb3Jt YXQoZikJXAo+ID4gwqAJZm9yIChmID0gZm9ybWF0X2Rlc2M7IGYgLSBmb3JtYXRfZGVzYyA8IEFS UkFZX1NJWkUoZm9ybWF0X2Rlc2MpOwo+ID4gZisrKQo+ID4gwqAKPiA+IC0KPiAKPiBQbGVhc2Ug ZG9uJ3QgcmVtb3ZlIHJhbmRvbSBsaW5lcyBmcm9tIGZpbGVzLgo+IAo+IAo+ID4gwqAvKiBoZWxw ZXJzIHRvIGNyZWF0ZSBuaWNlLWxvb2tpbmcgZnJhbWVidWZmZXJzICovCj4gPiDCoHN0YXRpYyBp bnQgY3JlYXRlX2JvX2Zvcl9mYihpbnQgZmQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGJw cCwKPiA+IMKgCQkJwqDCoMKgwqB1aW50NjRfdCB0aWxpbmcsIHVuc2lnbmVkIGJvX3NpemUsIEBA IC0xMjUsNiArMTM3LDggQEAgc3RhdGljIAo+ID4gaW50IGNyZWF0ZV9ib19mb3JfZmIoaW50IGZk LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBicHAsCj4gPiDCoAlyZXR1cm4gcmV0Owo+ID4g wqB9Cj4gPiDCoAo+ID4gKyNpZiAoIWRlZmluZWQoQU5EUk9JRCkpIHx8IChkZWZpbmVkKEFORFJP SUQpICYmIEFORFJPSURfSEFTX0NBSVJPKQo+ID4gKwo+ID4gwqAvKioKPiA+IMKgICogaWd0X3Bh aW50X2NvbG9yOgo+ID4gwqAgKiBAY3I6IGNhaXJvIGRyYXdpbmcgY29udGV4dAo+ID4gQEAgLTM5 NCw2ICs0MDgsNyBAQCB2b2lkIGlndF9wYWludF9pbWFnZShjYWlyb190ICpjciwgY29uc3QgY2hh ciAKPiA+ICpmaWxlbmFtZSwKPiA+IMKgCj4gPiDCoAlmY2xvc2UoZik7Cj4gPiDCoH0KPiA+ICsj ZW5kaWYKPiA+IMKgCj4gPiDCoC8qKgo+ID4gwqAgKiBpZ3RfY3JlYXRlX2ZiX3dpdGhfYm9fc2l6 ZToKPiA+IEBAIC00OTQsNiArNTA5LDcgQEAgdW5zaWduZWQgaW50IGlndF9jcmVhdGVfZmIoaW50 IGZkLCBpbnQgd2lkdGgsIGludCAKPiA+IGhlaWdodCwgdWludDMyX3QgZm9ybWF0LAo+ID4gwqAJ cmV0dXJuIGlndF9jcmVhdGVfZmJfd2l0aF9ib19zaXplKGZkLCB3aWR0aCwgaGVpZ2h0LCBmb3Jt YXQsIHRpbGluZywgCj4gPiBmYiwKPiA+IMKgCQkJCQnCoMKgMCwgMCk7Cj4gPiDCoH0KPiA+ICsj aWYgKCFkZWZpbmVkKEFORFJPSUQpKSB8fCAoZGVmaW5lZChBTkRST0lEKSAmJiBBTkRST0lEX0hB U19DQUlSTykKPiA+IMKgCj4gPiDCoC8qKgo+ID4gwqAgKiBpZ3RfY3JlYXRlX2NvbG9yX2ZiOgo+ ID4gQEAgLTk4NSw2ICsxMDAxLDcgQEAgdm9pZCBpZ3Rfd3JpdGVfZmJfdG9fcG5nKGludCBmZCwg c3RydWN0IGlndF9mYiAKPiA+ICpmYiwgY29uc3QgY2hhciAqZmlsZW5hbWUpCj4gPiDCoAo+ID4g wqAJaWd0X2Fzc2VydChzdGF0dXMgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpOwo+ID4gwqB9Cj4g PiArI2VuZGlmCj4gPiDCoAo+ID4gwqAvKioKPiA+IMKgICogaWd0X3JlbW92ZV9mYjoKPiA+IEBA IC05OTcsMTAgKzEwMTQsMTMgQEAgdm9pZCBpZ3Rfd3JpdGVfZmJfdG9fcG5nKGludCBmZCwgc3Ry dWN0IGlndF9mYiAKPiA+ICpmYiwgY29uc3QgY2hhciAqZmlsZW5hbWUpCj4gPiDCoCAqLwo+ID4g wqB2b2lkIGlndF9yZW1vdmVfZmIoaW50IGZkLCBzdHJ1Y3QgaWd0X2ZiICpmYikKPiA+IMKgewo+ ID4gKyNpZiAoIWRlZmluZWQoQU5EUk9JRCkpIHx8IChkZWZpbmVkKEFORFJPSUQpICYmIEFORFJP SURfSEFTX0NBSVJPKQo+ID4gwqAJY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGZiLT5jYWlyb19zdXJm YWNlKTsKPiA+ICsjZW5kaWYKPiA+IMKgCWRvX29yX2RpZShkcm1Nb2RlUm1GQihmZCwgZmItPmZi X2lkKSk7Cj4gPiDCoAlnZW1fY2xvc2UoZmQsIGZiLT5nZW1faGFuZGxlKTsKPiA+IMKgfQo+ID4g KyNpZiAoIWRlZmluZWQoQU5EUk9JRCkpIHx8IChkZWZpbmVkKEFORFJPSUQpICYmIEFORFJPSURf SEFTX0NBSVJPKQo+ID4gwqAKPiA+IMKgLyoqCj4gPiDCoCAqIGlndF9icHBfZGVwdGhfdG9fZHJt X2Zvcm1hdDoKPiA+IEBAIC0xMDI0LDYgKzEwNDQsOCBAQCB1aW50MzJfdCBpZ3RfYnBwX2RlcHRo X3RvX2RybV9mb3JtYXQoaW50IGJwcCwgCj4gPiBpbnQgZGVwdGgpCj4gPiDCoAkJwqDCoMKgwqDC oGRlcHRoKTsKPiA+IMKgfQo+ID4gwqAKPiA+ICsjZW5kaWYKPiA+ICsKPiA+IMKgLyoqCj4gPiDC oCAqIGlndF9kcm1fZm9ybWF0X3RvX2JwcDoKPiA+IMKgICogQGRybV9mb3JtYXQ6IGRybSBmb3Vy Y2MgcGl4ZWwgZm9ybWF0IGNvZGUgQEAgLTEwNjIsNiArMTA4NCw3IEBAIAo+ID4gY29uc3QgY2hh ciAqaWd0X2Zvcm1hdF9zdHIodWludDMyX3QgZHJtX2Zvcm1hdCkKPiA+IMKgCj4gPiDCoAlyZXR1 cm4gImludmFsaWQiOwo+ID4gwqB9Cj4gPiArI2lmICghZGVmaW5lZChBTkRST0lEKSkgfHwgKGRl ZmluZWQoQU5EUk9JRCkgJiYgQU5EUk9JRF9IQVNfQ0FJUk8pCj4gPiDCoAo+ID4gwqAvKioKPiA+ IMKgICogaWd0X2dldF9hbGxfZm9ybWF0czoKPiA+IEBAIC0xMDg5LDMgKzExMTIsNCBAQCB2b2lk IGlndF9nZXRfYWxsX2Zvcm1hdHMoY29uc3QgdWludDMyX3QgCj4gPiAqKmZvcm1hdHMsIGludCAq Zm9ybWF0X2NvdW50KQo+ID4gwqAJKmZvcm1hdHMgPSBkcm1fZm9ybWF0czsKPiA+IMKgCSpmb3Jt YXRfY291bnQgPSBBUlJBWV9TSVpFKGZvcm1hdF9kZXNjKTsKPiA+IMKgfQo+ID4gKyNlbmRpZgo+ ID4gZGlmZiAtLWdpdCBhL2xpYi9pZ3Rfa21zLmMgYi9saWIvaWd0X2ttcy5jIGluZGV4IDQ5NzEx OGEuLjdiNjgyY2IKPiA+IDEwMDY0NAo+ID4gLS0tIGEvbGliL2lndF9rbXMuYwo+ID4gKysrIGIv bGliL2lndF9rbXMuYwo+ID4gQEAgLTQ5LDYgKzQ5LDggQEAKPiA+IMKgI2luY2x1ZGUgImludGVs X2NoaXBzZXQuaCIKPiA+IMKgI2luY2x1ZGUgImlndF9kZWJ1Z2ZzLmgiCj4gPiDCoAo+ID4gKyNk ZWZpbmUgZmZzIF9fYnVpbHRpbl9mZnMKPiAKPiBBIGRlZmluZSBsaWtlIHRoaXMgY2FuIGJlIGRh bmdlcm91cy4gU2hvdWxkbid0IHdlIGp1c3QgZml4IGFsbCB0aGUgY2FsbGVycywgc28gY29kZSBy ZWFkZXJzIGtub3cgZXhhY3RseSB3aGljaCBmdW5jdGlvbiBpcyBiZWluZyBydW4/Cj4gCj4gT24g dGhlIG90aGVyIGhhbmQsIGl0IHNlZW1zIHRoYXQgdGhpcyBjaGFuZ2Ugd2lsbCByZXN0cmljdCB1 cyB0byBnY2MtIG9ubHkuIFNvIG1heWJlIHdlIGNvdWxkIGp1c3QgZGVmaW5lIGZmcyBhcyBfX2J1 aWx0aW5fZmZzIGlmIEFORFJPSUQgaXMgZGVmaW5lZD8KPiAKPiAKPiA+ICsKPiA+IMKgLyogbGlz dCBvZiBjb25uZWN0b3JzIHRoYXQgbmVlZCByZXNldHRpbmcgb24gZXhpdCAqLwo+ID4gwqAjZGVm aW5lIE1BWF9DT05ORUNUT1JTIDMyCj4gPiDCoHN0YXRpYyBjaGFyICpmb3JjZWRfY29ubmVjdG9y c1tNQVhfQ09OTkVDVE9SUyArIDFdOyBAQCAtMTM1NCw4Cj4gPiArMTM1NiwxMSBAQCBzdGF0aWMg aW50IGlndF9kcm1fcGxhbmVfY29tbWl0KGlndF9wbGFuZV90ICpwbGFuZSwKPiA+IMKgCQkJCcKg wqDCoMKgwqDCoElHVF9GSVhFRCgwLDApLCAvKiBzcmNfeCAqLwo+ID4gwqAJCQkJwqDCoMKgwqDC oMKgSUdUX0ZJWEVEKDAsMCksIC8qIHNyY195ICovCj4gPiDCoAkJCQnCoMKgwqDCoMKgwqBJR1Rf RklYRUQoMCwwKSwgLyogc3JjX3cgKi8KPiA+IC0JCQkJwqDCoMKgwqDCoMKgSUdUX0ZJWEVEKDAs MCkgLyogc3JjX2ggKi8pOwo+ID4gLQo+ID4gKwkJCQnCoMKgwqDCoMKgwqBJR1RfRklYRUQoMCww KSAvKiBzcmNfaCAqLwo+ID4gKyNpZiBEUk1fUFJJTUFSWV9ESVNBQkxFCj4gPiArCQkJCQnCoMKg LCBOVUxMCj4gPiArI2VuZGlmCj4gCj4gSWYgd2UncmUgZ29pbmcgdGhpcyB3YXksIG1heWJlIHRo ZSBiZXN0IGFwcHJvYWNoIHdvdWxkIGJlIHRvIGFkZCBhIHdyYXBwZXIgKGlndF9rbXNfc2V0X3Bs YW5lPykgYW5kIG1ha2UgdGhlIGN1cnJlbnQgY2FsbGVycyB1c2UgaXQuCj4gCj4gT24gYSBzaWRl IG5vdGU6IHdoeSBpcyBBbmRyb2lkIGRpZmZlcmVudCBoZXJlIT8KPiAKPiAKPiBUaGFua3MsCj4g UGF1bG8KPiAKPiA+ICsJCQkJCcKgwqApOwo+ID4gwqAJCUNIRUNLX1JFVFVSTihyZXQsIGZhaWxf b25fZXJyb3IpOwo+ID4gwqAJfSBlbHNlIGlmIChwbGFuZS0+ZmJfY2hhbmdlZCB8fCBwbGFuZS0+ cG9zaXRpb25fY2hhbmdlZCB8fAo+ID4gwqAJCXBsYW5lLT5zaXplX2NoYW5nZWQpIHsKPiA+IEBA IC0xMzg2LDcgKzEzOTEsMTEgQEAgc3RhdGljIGludCBpZ3RfZHJtX3BsYW5lX2NvbW1pdChpZ3Rf cGxhbmVfdCAKPiA+ICpwbGFuZSwKPiA+IMKgCQkJCcKgwqDCoMKgwqDCoGNydGNfeCwgY3J0Y195 LAo+ID4gwqAJCQkJwqDCoMKgwqDCoMKgY3J0Y193LCBjcnRjX2gsCj4gPiDCoAkJCQnCoMKgwqDC oMKgwqBzcmNfeCwgc3JjX3ksCj4gPiAtCQkJCcKgwqDCoMKgwqDCoHNyY193LCBzcmNfaCk7Cj4g PiArCQkJCcKgwqDCoMKgwqDCoHNyY193LCBzcmNfaAo+ID4gKyNpZiBEUk1fUFJJTUFSWV9ESVNB QkxFCj4gPiArCQkJCQnCoMKgLCBOVUxMCj4gPiArI2VuZGlmCj4gPiArCQkJCQnCoMKgKTsKPiA+ IMKgCj4gPiDCoAkJQ0hFQ0tfUkVUVVJOKHJldCwgZmFpbF9vbl9lcnJvcik7Cj4gPiDCoAl9Cj4g PiBkaWZmIC0tZ2l0IGEvdGVzdHMvQW5kcm9pZC5tayBiL3Rlc3RzL0FuZHJvaWQubWsgaW5kZXgK PiA+IDg0NTcxMjUuLmViMjg3YTYgMTAwNjQ0Cj4gPiAtLS0gYS90ZXN0cy9BbmRyb2lkLm1rCj4g PiArKysgYi90ZXN0cy9BbmRyb2lkLm1rCj4gPiBAQCAtNjUsNiArNjUsMTEgQEAgZWxzZQo+ID4g wqAKPiA+IMKgwqDCoMKgwqB0bXBfbGlzdCA6PSAkKGZvcmVhY2ggdGVzdF9uYW1lLCAkKFRFU1RT X3Byb2dzX00pLFwKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoCQoaWYgJChmaW5kc3RyaW5nIGttc18s JCh0ZXN0X25hbWUpKSwkKHRlc3RfbmFtZSkpKQo+ID4gKwo+ID4gKyMga21zX2ZiY19jcmMgYW5k IGttc19mcm9udGJ1ZmZlcl90cmFja2luZyBubyBsb25nZXIgZGVwZW5kIG9uIENhaXJvCj4gPiAr wqDCoMKgwqB0bXBfbGlzdCA6PSAkKGZpbHRlci1vdXQga21zX2ZiY19jcmMsICQodG1wX2xpc3Qp KQo+ID4gK8KgwqDCoMKgdG1wX2xpc3QgOj0gJChmaWx0ZXItb3V0IGttc19mcm9udGJ1ZmZlcl90 cmFja2luZywgJCh0bXBfbGlzdCkpCj4gPiArCj4gPiDCoMKgwqDCoMKgc2tpcF90ZXN0c19saXN0 ICs9ICQodG1wX2xpc3QpCj4gPiDCoAo+ID4gwqDCoMKgwqDCoElHVF9MT0NBTF9DRkxBR1MgKz0g LURBTkRST0lEX0hBU19DQUlSTz0wIGRpZmYgLS1naXQgCj4gPiBhL3Rlc3RzL2ttc19mYmNfY3Jj LmMgYi90ZXN0cy9rbXNfZmJjX2NyYy5jIGluZGV4IDAyZTk1ZTUuLjcxN2U4OTEKPiA+IDEwMDY0 NAo+ID4gLS0tIGEvdGVzdHMva21zX2ZiY19jcmMuYwo+ID4gKysrIGIvdGVzdHMva21zX2ZiY19j cmMuYwo+ID4gQEAgLTMzNiwxNCArMzM2LDE4IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZV9mYnMoZGF0 YV90ICpkYXRhLCBib29sIHRpbGVkLCAKPiA+IHN0cnVjdCBpZ3RfZmIgKmZicykKPiA+IMKgCXVp bnQ2NF90IHRpbGluZyA9IHRpbGVkID8gTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQgOgo+ ID4gwqAJCQkJwqDCoExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkU7Cj4gPiDCoAo+ID4gLQlyYyA9 IGlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+ZHJtX2ZkLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0K PiA+ID52ZGlzcGxheSwKPiA+IC0JCQkJwqBEUk1fRk9STUFUX1hSR0I4ODg4LCB0aWxpbmcsCj4g PiAtCQkJCcKgMC4wLCAwLjAsIDAuMCwgJmZic1swXSk7Cj4gPiAtCWlndF9hc3NlcnQocmMpOwo+ ID4gLQlyYyA9IGlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+ZHJtX2ZkLCBtb2RlLT5oZGlzcGxh eSwgbW9kZS0KPiA+ID52ZGlzcGxheSwKPiA+IC0JCQkJwqBEUk1fRk9STUFUX1hSR0I4ODg4LCB0 aWxpbmcsCj4gPiAtCQkJCcKgMC4xLCAwLjEsIDAuMSwgJmZic1sxXSk7Cj4gPiAtCWlndF9hc3Nl cnQocmMpOwo+ID4gKwl1bnNpZ25lZCBpbnQgZmJfaWQ7Cj4gPiArCj4gPiArCWZiX2lkID0gaWd0 X2NyZWF0ZV9mYihkYXRhLT5kcm1fZmQsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLQo+ID4gPnZkaXNw bGF5LAo+ID4gKwkJCQlEUk1fRk9STUFUX1hSR0I4ODg4LCB0aWxpbmcsCj4gPiAmZmJzWzBdKTsK PiA+ICsJaWd0X2Fzc2VydChmYl9pZCk7Cj4gPiArCWlndF9kcmF3X2ZpbGxfZmIoZGF0YS0+ZHJt X2ZkLCAmZmJzWzBdLCAwKTsKPiA+ICsKPiA+ICsJZmJfaWQgPSBpZ3RfY3JlYXRlX2ZiKGRhdGEt PmRybV9mZCwgbW9kZS0+aGRpc3BsYXksIG1vZGUtCj4gPiA+dmRpc3BsYXksCj4gPiArCQkJCURS TV9GT1JNQVRfWFJHQjg4ODgsIHRpbGluZywKPiA+ICZmYnNbMV0pOwo+ID4gKwlpZ3RfYXNzZXJ0 KGZiX2lkKTsKPiA+ICsJaWd0X2RyYXdfZmlsbF9mYihkYXRhLT5kcm1fZmQsICZmYnNbMV0sIDB4 NzcpOwo+ID4gKwo+ID4gwqB9Cj4gPiDCoAo+ID4gwqAvKiBTaW5jZSB3ZSB3YW50IHRvIGJlIHJl YWxseSBzYWZlIHRoYXQgdGhlIENSQ3MgYXJlIGFjdHVhbGx5IHdoYXQgd2UgCj4gPiByZWFsbHkg ZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc19mcm9udGJ1ZmZlcl90cmFja2luZy5jCj4gPiBiL3Rlc3Rz L2ttc19mcm9udGJ1ZmZlcl90cmFja2luZy5jCj4gPiBpbmRleCBlN2FjYzdjLi5mOGI5ZWNhIDEw MDY0NAo+ID4gLS0tIGEvdGVzdHMva21zX2Zyb250YnVmZmVyX3RyYWNraW5nLmMKPiA+ICsrKyBi L3Rlc3RzL2ttc19mcm9udGJ1ZmZlcl90cmFja2luZy5jCj4gPiBAQCAtMTA3OSw3ICsxMDc5LDEx IEBAIHN0YXRpYyB2b2lkIHVuc2V0X2FsbF9jcnRjcyh2b2lkKQo+ID4gwqAKPiA+IMKgCWZvciAo aSA9IDA7IGkgPCBkcm0ucGxhbmVfcmVzLT5jb3VudF9wbGFuZXM7IGkrKykgewo+ID4gwqAJCXJj ID0gZHJtTW9kZVNldFBsYW5lKGRybS5mZCwgZHJtLnBsYW5lX3Jlcy0KPiA+ID5wbGFuZXNbaV0s IDAsIDAsIDAsCj4gPiAtCQkJCcKgwqDCoMKgwqAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKPiA+ ICsJCQkJwqDCoMKgwqDCoDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKPiA+ICsjaWYgRFJNX1BSSU1B UllfRElTQUJMRQo+ID4gKwkJCQnCoMKgwqDCoMKgLCBOVUxMCj4gPiArI2VuZGlmCj4gPiArCQkJ wqDCoMKgwqDCoCk7Cj4gPiDCoAkJaWd0X2Fzc2VydF9lcShyYywgMCk7Cj4gPiDCoAl9Cj4gPiDC oH0KPiA+IEBAIC0xNzE1LDcgKzE3MTksMTEgQEAgc3RhdGljIHZvaWQgc2V0X3Nwcml0ZV9mb3Jf dGVzdChjb25zdCBzdHJ1Y3QgCj4gPiB0ZXN0X21vZGUgKnQsCj4gPiDCoAkJCcKgwqDCoMKgwqBw YXJhbXMtPnNwcml0ZS5mYi0+ZmJfaWQsIDAsIDAsIDAsCj4gPiDCoAkJCcKgwqDCoMKgwqBwYXJh bXMtPnNwcml0ZS53LCBwYXJhbXMtPnNwcml0ZS5oLAo+ID4gwqAJCQnCoMKgwqDCoMKgMCwgMCwg cGFyYW1zLT5zcHJpdGUudyA8PCAxNiwKPiA+IC0JCQnCoMKgwqDCoMKgcGFyYW1zLT5zcHJpdGUu aCA8PCAxNik7Cj4gPiArCQkJwqDCoMKgwqDCoHBhcmFtcy0+c3ByaXRlLmggPDwgMTYKPiA+ICsj aWYgRFJNX1BSSU1BUllfRElTQUJMRQo+ID4gKwkJCcKgwqDCoMKgwqAsIE5VTEwKPiA+ICsjZW5k aWYKPiA+ICsJCQnCoMKgwqDCoMKgKTsKPiA+IMKgCWlndF9hc3NlcnRfZXEocmMsIDApOwo+ID4g wqAKPiA+IMKgCWRvX2Fzc2VydGlvbnMoQVNTRVJUX05PX0FDVElPTl9DSEFOR0UpOwo+ID4gQEAg LTIyMjAsNyArMjIyOCwxMSBAQCBzdGF0aWMgdm9pZCBzZXRfcHJpbV9wbGFuZV9mb3JfcGFyYW1z KHN0cnVjdCAKPiA+IG1vZGVzZXRfcGFyYW1zICpwYXJhbXMpCj4gPiDCoAkJCcKgwqDCoMKgwqBw YXJhbXMtPm1vZGUtPmhkaXNwbGF5LAo+ID4gwqAJCQnCoMKgwqDCoMKgcGFyYW1zLT5tb2RlLT52 ZGlzcGxheSwKPiA+IMKgCQkJwqDCoMKgwqDCoHBhcmFtcy0+ZmIueCA8PCAxNiwgcGFyYW1zLT5m Yi55IDw8IDE2LAo+ID4gLQkJCcKgwqDCoMKgwqBwYXJhbXMtPmZiLncgPDwgMTYsIHBhcmFtcy0+ ZmIuaCA8PAo+ID4gMTYpOwo+ID4gKwkJCcKgwqDCoMKgwqBwYXJhbXMtPmZiLncgPDwgMTYsIHBh cmFtcy0+ZmIuaCA8PCAxNiAjaWYgCj4gPiArRFJNX1BSSU1BUllfRElTQUJMRQo+ID4gKwkJCcKg wqDCoMKgwqAsIE5VTEwKPiA+ICsjZW5kaWYKPiA+ICsJCQnCoMKgwqDCoMKgKTsKPiA+IMKgCWln dF9hc3NlcnQocmMgPT0gMCk7Cj4gPiDCoH0KPiA+IMKgCj4gPiBAQCAtMjQwNiw3ICsyNDE4LDEx IEBAIHN0YXRpYyB2b2lkIG1vdmVfc3VidGVzdChjb25zdCBzdHJ1Y3QgdGVzdF9tb2RlCj4gPiAq dCkKPiA+IMKgCQkJCQnCoMKgwqDCoMKgcGFyYW1zLT5zcHJpdGUuZmItCj4gPiA+ZmJfaWQsIDAs Cj4gPiDCoAkJCQkJwqDCoMKgwqDCoHJlY3QueCwgcmVjdC55LCByZWN0LncsCj4gPiDCoAkJCQkJ wqDCoMKgwqDCoHJlY3QuaCwgMCwgMCwgcmVjdC53IDw8Cj4gPiAxNiwKPiA+IC0JCQkJCcKgwqDC oMKgwqByZWN0LmggPDwgMTYpOwo+ID4gKwkJCQkJwqDCoMKgwqDCoHJlY3QuaCA8PCAxNgo+ID4g KyNpZiBEUk1fUFJJTUFSWV9ESVNBQkxFCj4gPiArCQkJCQnCoMKgwqDCoMKgLCBOVUxMCj4gPiAr I2VuZGlmCj4gPiArCQkJwqDCoMKgwqDCoCk7Cj4gPiDCoAkJCWlndF9hc3NlcnRfZXEocmMsIDAp Owo+ID4gwqAJCQlicmVhazsKPiA+IMKgCQlkZWZhdWx0Ogo+ID4gQEAgLTI0NjMsOCArMjQ3OSwx MSBAQCBzdGF0aWMgdm9pZCBvbm9mZl9zdWJ0ZXN0KGNvbnN0IHN0cnVjdCAKPiA+IHRlc3RfbW9k ZSAqdCkKPiA+IMKgCQkJCWJyZWFrOwo+ID4gwqAJCQljYXNlIFBMQU5FX1NQUjoKPiA+IMKgCQkJ CXJjID0gZHJtTW9kZVNldFBsYW5lKGRybS5mZCwgcGFyYW1zLQo+ID4gPnNwcml0ZV9pZCwKPiA+ IC0JCQkJCQnCoMKgwqDCoMKgMCwgMCwgMCwgMCwgMCwKPiA+IDAsIDAsIDAsIDAsCj4gPiAtCQkJ CQkJwqDCoMKgwqDCoDAsIDApOwo+ID4gKwkJCQkJCcKgwqDCoMKgwqAwLCAwLCAwLCAwLCAwLAo+ ID4gMCwgMCwgMCwgMCwgMCwgMAo+ID4gKyNpZiBEUk1fUFJJTUFSWV9ESVNBQkxFCj4gPiArCQkJ CQkJwqDCoMKgwqDCoCwgTlVMTAo+ID4gKyNlbmRpZgo+ID4gKwkJCcKgwqDCoMKgwqApOwo+ID4g wqAJCQkJaWd0X2Fzc2VydF9lcShyYywgMCk7Cj4gPiDCoAkJCQlicmVhazsKPiA+IMKgCQkJZGVm YXVsdDoKPiA+IEBAIC0yNDg5LDcgKzI1MDgsMTEgQEAgc3RhdGljIHZvaWQgb25vZmZfc3VidGVz dChjb25zdCBzdHJ1Y3QgCj4gPiB0ZXN0X21vZGUgKnQpCj4gPiDCoAkJCQkJCcKgwqDCoMKgwqBw YXJhbXMtCj4gPiA+c3ByaXRlLmgsIDAsCj4gPiDCoAkJCQkJCcKgwqDCoMKgwqAwLAo+ID4gwqAJ CQkJCQnCoMKgwqDCoMKgcGFyYW1zLQo+ID4gPnNwcml0ZS53IDw8IDE2LAo+ID4gLQkJCQkJCcKg wqDCoMKgwqBwYXJhbXMtCj4gPiA+c3ByaXRlLmggPDwgMTYpOwo+ID4gKwkJCQkJCcKgwqDCoMKg wqBwYXJhbXMtCj4gPiA+c3ByaXRlLmggPDwgMTYKPiA+ICsjaWYgRFJNX1BSSU1BUllfRElTQUJM RQo+ID4gKwkJCQkJCcKgwqDCoMKgwqAsIE5VTEwKPiA+ICsjZW5kaWYKPiA+ICsJCQnCoMKgwqDC oMKgKTsKPiA+IMKgCQkJCWlndF9hc3NlcnRfZXEocmMsIDApOwo+ID4gwqAJCQkJYnJlYWs7Cj4g PiDCoAkJCWRlZmF1bHQ6Cj4gPiBAQCAtMjU2MSw3ICsyNTg0LDExIEBAIHN0YXRpYyB2b2lkIGZ1 bGxzY3JlZW5fcGxhbmVfc3VidGVzdChjb25zdCAKPiA+IHN0cnVjdCB0ZXN0X21vZGUgKnQpCj4g PiDCoAkJCcKgwqDCoMKgwqBmdWxsc2NyZWVuX2ZiLmZiX2lkLCAwLCAwLCAwLCBmdWxsc2NyZWVu X2ZiLndpZHRoLAo+ID4gwqAJCQnCoMKgwqDCoMKgZnVsbHNjcmVlbl9mYi5oZWlnaHQsIDAsIDAs Cj4gPiDCoAkJCcKgwqDCoMKgwqBmdWxsc2NyZWVuX2ZiLndpZHRoIDw8IDE2LAo+ID4gLQkJCcKg wqDCoMKgwqBmdWxsc2NyZWVuX2ZiLmhlaWdodCA8PCAxNik7Cj4gPiArCQkJwqDCoMKgwqDCoGZ1 bGxzY3JlZW5fZmIuaGVpZ2h0IDw8IDE2Cj4gPiArI2lmIERSTV9QUklNQVJZX0RJU0FCTEUKPiA+ ICsJCQnCoMKgwqDCoMKgLCBOVUxMCj4gPiArI2VuZGlmCj4gPiArCQkJwqDCoMKgwqDCoCk7Cj4g PiDCoAlpZ3RfYXNzZXJ0X2VxKHJjLCAwKTsKPiA+IMKgCXVwZGF0ZV93YW50ZWRfY3JjKHQsICZw YXR0ZXJuLT5jcmNzW3QtPmZvcm1hdF1bMF0pOwo+ID4gwqAKPiA+IEBAIC0yNTgxLDcgKzI2MDgs MTEgQEAgc3RhdGljIHZvaWQgZnVsbHNjcmVlbl9wbGFuZV9zdWJ0ZXN0KGNvbnN0IAo+ID4gc3Ry dWN0IHRlc3RfbW9kZSAqdCkKPiA+IMKgCWRvX2Fzc2VydGlvbnMoYXNzZXJ0aW9ucyk7Cj4gPiDC oAo+ID4gwqAJcmMgPSBkcm1Nb2RlU2V0UGxhbmUoZHJtLmZkLCBwYXJhbXMtPnNwcml0ZV9pZCwg MCwgMCwgMCwgMCwgMCwgMCwgMCwgCj4gPiAwLAo+ID4gLQkJCcKgwqDCoMKgwqAwLCAwLCAwKTsK PiA+ICsJCQnCoMKgwqDCoMKgMCwgMCwgMAo+ID4gKyNpZiBEUk1fUFJJTUFSWV9ESVNBQkxFCj4g PiArCQkJwqDCoMKgwqDCoCwgTlVMTAo+ID4gKyNlbmRpZgo+ID4gKwkJCcKgwqDCoMKgwqApOwo+ ID4gwqAJaWd0X2Fzc2VydF9lcShyYywgMCk7Cj4gPiDCoAo+ID4gwqAJaWYgKHQtPnNjcmVlbiA9 PSBTQ1JFRU5fUFJJTSkKPiA+IEBAIC0yNjU3LDcgKzI2ODgsMTEgQEAgc3RhdGljIHZvaWQgc2Nh bGVkcHJpbWFyeV9zdWJ0ZXN0KGNvbnN0IHN0cnVjdCAKPiA+IHRlc3RfbW9kZSAqdCkKPiA+IMKg CQkJwqDCoMKgwqDCoDAsIDAsCj4gPiDCoAkJCcKgwqDCoMKgwqBwYXJhbXMtPm1vZGUtPmhkaXNw bGF5LCBwYXJhbXMtPm1vZGUtCj4gPiA+dmRpc3BsYXksCj4gPiDCoAkJCcKgwqDCoMKgwqBwYXJh bXMtPmZiLnggPDwgMTYsIHBhcmFtcy0+ZmIueSA8PCAxNiwKPiA+IC0JCQnCoMKgwqDCoMKgcGFy YW1zLT5mYi53IDw8IDE2LCBwYXJhbXMtPmZiLmggPDwKPiA+IDE2KTsKPiA+ICsJCQnCoMKgwqDC oMKgcGFyYW1zLT5mYi53IDw8IDE2LCBwYXJhbXMtPmZiLmggPDwgMTYgI2lmIAo+ID4gK0RSTV9Q UklNQVJZX0RJU0FCTEUKPiA+ICsJCQnCoMKgwqDCoMKgLCBOVUxMCj4gPiArI2VuZGlmCj4gPiAr CQkJwqDCoMKgwqDCoCk7Cj4gPiDCoAlpZ3RfYXNzZXJ0KHJjID09IDApOwo+ID4gwqAJZG9fYXNz ZXJ0aW9ucyhET05UX0FTU0VSVF9DUkMpOwo+ID4gwqAKPiA+IEBAIC0yNjY4LDcgKzI3MDMsMTEg QEAgc3RhdGljIHZvaWQgc2NhbGVkcHJpbWFyeV9zdWJ0ZXN0KGNvbnN0IHN0cnVjdCAKPiA+IHRl c3RfbW9kZSAqdCkKPiA+IMKgCQkJwqDCoMKgwqDCoHBhcmFtcy0+bW9kZS0+aGRpc3BsYXksIHBh cmFtcy0+bW9kZS0KPiA+ID52ZGlzcGxheSwKPiA+IMKgCQkJwqDCoMKgwqDCoHBhcmFtcy0+ZmIu eCA8PCAxNiwgcGFyYW1zLT5mYi55IDw8IDE2LAo+ID4gwqAJCQnCoMKgwqDCoMKgKHBhcmFtcy0+ ZmIudyAvIDIpIDw8IDE2LAo+ID4gLQkJCcKgwqDCoMKgwqAocGFyYW1zLT5mYi5oIC8gMikgPDwg MTYpOwo+ID4gKwkJCcKgwqDCoMKgwqAocGFyYW1zLT5mYi5oIC8gMikgPDwgMTYKPiA+ICsjaWYg RFJNX1BSSU1BUllfRElTQUJMRQo+ID4gKwkJCcKgwqDCoMKgwqAsIE5VTEwKPiA+ICsjZW5kaWYK PiA+ICsJCQnCoMKgwqDCoMKgKTsKPiA+IMKgCWlndF9hc3NlcnQocmMgPT0gMCk7Cj4gPiDCoAlk b19hc3NlcnRpb25zKERPTlRfQVNTRVJUX0NSQyk7Cj4gPiDCoAo+ID4gQEAgLTI2ODEsNyArMjcy MCwxMSBAQCBzdGF0aWMgdm9pZCBzY2FsZWRwcmltYXJ5X3N1YnRlc3QoY29uc3Qgc3RydWN0IAo+ ID4gdGVzdF9tb2RlICp0KQo+ID4gwqAJCQnCoMKgwqDCoMKgcGFyYW1zLT5tb2RlLT52ZGlzcGxh eSAvIDIsCj4gPiDCoAkJCcKgwqDCoMKgwqBwYXJhbXMtPmZiLnggPDwgMTYsIHBhcmFtcy0+ZmIu eSA8PCAxNiwKPiA+IMKgCQkJwqDCoMKgwqDCoChwYXJhbXMtPmZiLncgLyAyKSA8PCAxNiwKPiA+ IC0JCQnCoMKgwqDCoMKgKHBhcmFtcy0+ZmIuaCAvIDIpIDw8IDE2KTsKPiA+ICsJCQnCoMKgwqDC oMKgKHBhcmFtcy0+ZmIuaCAvIDIpIDw8IDE2Cj4gPiArI2lmIERSTV9QUklNQVJZX0RJU0FCTEUK PiA+ICsJCQnCoMKgwqDCoMKgLCBOVUxMCj4gPiArI2VuZGlmCj4gPiArCQkJwqDCoMKgwqDCoCk7 Cj4gPiDCoAlpZ3RfYXNzZXJ0KHJjID09IDApOwo+ID4gwqAJZG9fYXNzZXJ0aW9ucyhET05UX0FT U0VSVF9DUkMpOwo+ID4gwqAKPiA+IEBAIC0yNjk1LDcgKzI3MzgsMTEgQEAgc3RhdGljIHZvaWQg c2NhbGVkcHJpbWFyeV9zdWJ0ZXN0KGNvbnN0IHN0cnVjdCAKPiA+IHRlc3RfbW9kZSAqdCkKPiA+ IMKgCQkJwqDCoMKgwqDCoChwYXJhbXMtPmZiLnggKyBwYXJhbXMtPmZiLncgLyAyKSA8PCAxNiwK PiA+IMKgCQkJwqDCoMKgwqDCoChwYXJhbXMtPmZiLnkgKyBwYXJhbXMtPmZiLmggLyAyKSA8PCAx NiwKPiA+IMKgCQkJwqDCoMKgwqDCoChwYXJhbXMtPmZiLncgLyA0KSA8PCAxNiwKPiA+IC0JCQnC oMKgwqDCoMKgKHBhcmFtcy0+ZmIuaCAvIDQpIDw8IDE2KTsKPiA+ICsJCQnCoMKgwqDCoMKgKHBh cmFtcy0+ZmIuaCAvIDQpIDw8IDE2Cj4gPiArI2lmIERSTV9QUklNQVJZX0RJU0FCTEUKPiA+ICsJ CQnCoMKgwqDCoMKgLCBOVUxMCj4gPiArI2VuZGlmCj4gPiArCQkJwqDCoMKgwqDCoCk7Cj4gPiDC oAlpZ3RfYXNzZXJ0KHJjID09IDApOwo+ID4gwqAJZG9fYXNzZXJ0aW9ucyhET05UX0FTU0VSVF9D UkMpOwo+ID4gwqAKPiA+IEBAIC0yNzA1LDcgKzI3NTIsMTEgQEAgc3RhdGljIHZvaWQgc2NhbGVk cHJpbWFyeV9zdWJ0ZXN0KGNvbnN0IHN0cnVjdCAKPiA+IHRlc3RfbW9kZSAqdCkKPiA+IMKgCQkJ wqDCoMKgwqDCoDAsIDAsCj4gPiDCoAkJCcKgwqDCoMKgwqBwYXJhbXMtPm1vZGUtPmhkaXNwbGF5 LCBwYXJhbXMtPm1vZGUtCj4gPiA+dmRpc3BsYXksCj4gPiDCoAkJCcKgwqDCoMKgwqBwYXJhbXMt PmZiLnggPDwgMTYsIHBhcmFtcy0+ZmIueSA8PCAxNiwKPiA+IC0JCQnCoMKgwqDCoMKgcGFyYW1z LT5mYi53IDw8IDE2LCBwYXJhbXMtPmZiLmggPDwKPiA+IDE2KTsKPiA+ICsJCQnCoMKgwqDCoMKg cGFyYW1zLT5mYi53IDw8IDE2LCBwYXJhbXMtPmZiLmggPDwgMTYgI2lmIAo+ID4gK0RSTV9QUklN QVJZX0RJU0FCTEUKPiA+ICsJCQnCoMKgwqDCoMKgLCBOVUxMCj4gPiArI2VuZGlmCj4gPiArCQkJ wqDCoMKgwqDCoCk7Cj4gPiDCoAlpZ3RfYXNzZXJ0KHJjID09IDApOwo+ID4gwqAJZG9fYXNzZXJ0 aW9ucygwKTsKPiA+IMKgCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwo+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZngKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBD b3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeAo=