From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH 1/2] drm/i915/selftests: Verify the LRC register layout between init and HW Date: Tue, 24 Sep 2019 18:07:01 +0300 Message-ID: <87a7atzqay.fsf@gaia.fi.intel.com> References: <20190923230209.16480-1-chris@chris-wilson.co.uk> <87mueuyoy5.fsf@gaia.fi.intel.com> <156932183753.3684.11723522936667671637@skylake-alporthouse-com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 308C389F1B for ; Tue, 24 Sep 2019 15:07:28 +0000 (UTC) In-Reply-To: <156932183753.3684.11723522936667671637@skylake-alporthouse-com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gUXVvdGlu ZyBNaWthIEt1b3BwYWxhICgyMDE5LTA5LTI0IDExOjIxOjM4KQo+PiBDaHJpcyBXaWxzb24gPGNo cmlzQGNocmlzLXdpbHNvbi5jby51az4gd3JpdGVzOgo+PiAKPj4gPiBCZWZvcmUgd2Ugc3VibWl0 IHRoZSBmaXJzdCBjb250ZXh0IHRvIEhXLCB3ZSBuZWVkIHRvIGNvbnN0cnVjdCBhIHZhbGlkCj4+ ID4gaW1hZ2Ugb2YgdGhlIHJlZ2lzdGVyIHN0YXRlLiBUaGlzIGxheW91dCBpcyBkZWZpbmVkIGJ5 IHRoZSBIVyBhbmQgc2hvdWxkCj4+ID4gbWF0Y2ggdGhlIGxheW91dCBnZW5lcmF0ZWQgYnkgSFcg d2hlbiBpdCBzYXZlcyB0aGUgY29udGV4dCBpbWFnZS4KPj4gPiBBc3NlcnRpbmcgdGhhdCB0aGlz IHNob3VsZCBiZSBlcXVpdmFsZW50IHNob3VsZCBoZWxwIGF2b2lkIGFueSB1bmRlZmluZWQKPj4g PiBiZWhhdmlvdXIgYW5kIHZlcmlmeSB0aGF0IHdlIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGlt cG9ydGFudCEKPj4gPgo+PiA+IE9mIGNvdXJzZSwgaGF2aW5nIGluc2lzdGVkIHRoYXQgdGhlIGlu aXRpYWwgcmVnaXN0ZXIgc3RhdGUgd2l0aGluIHRoZQo+PiA+IExSQyBzaG91bGQgbWF0Y2ggdGhh dCByZXR1cm5lZCBieSBIVywgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCBpdCBkb2VzLgo+PiA+Cj4+ ID4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+ Cj4+ID4gQ2M6IE1pa2EgS3VvcHBhbGEgPG1pa2Eua3VvcHBhbGFAbGludXguaW50ZWwuY29tPgo+ PiA+IENjOiBEYW5pZWxlIENlcmFvbG8gU3B1cmlvIDxkYW5pZWxlLmNlcmFvbG9zcHVyaW9AaW50 ZWwuY29tPgo+Cj4+ID4gK3N0YXRpYyB1MzIgKnNldF9vZmZzZXRzKHUzMiAqcmVncywKPj4gPiAr ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdTggKmRhdGEsCj4+ID4gKyAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPj4gPiArI2RlZmlu ZSBOT1AoeCkgKEJJVCg3KSB8ICh4KSkKPj4gPiArI2RlZmluZSBMUkkoY291bnQsIGZsYWdzKSAo KGZsYWdzKSA8PCA2IHwgKGNvdW50KSkKPj4gPiArI2RlZmluZSBQT1NURUQgQklUKDApCj4+ID4g KyNkZWZpbmUgUkVHKHgpICgoKHgpID4+IDIpIHwgQlVJTERfQlVHX09OX1pFUk8oeCA+PSAweDIw MCkpCj4+ID4gKyNkZWZpbmUgUkVHMTYoeCkgXAo+PiA+ICsgICAgICgoKHgpID4+IDkpIHwgQklU KDcpIHwgQlVJTERfQlVHX09OX1pFUk8oeCA+PSAweDEwMDAwKSksIFwKPj4gPiArICAgICAoKCh4 KSA+PiAyKSAmIDB4N2YpCj4+IAo+PiBJIGFtIHN0aWxsIG5vdCBzdXJlIGlmIHRoZSBhY3R1YWwg c2F2aW5nIGFyZSB3b3J0aCB0aGUgY29tcGxleGl0eS4KPj4gCj4+ID4gKyNkZWZpbmUgRU5EKCkg MAo+PiA+ICt7Cj4+ID4gKyAgICAgY29uc3QgdTMyIGJhc2UgPSBlbmdpbmUtPm1taW9fYmFzZTsK Pj4gPiArCj4+ID4gKyAgICAgd2hpbGUgKCpkYXRhKSB7Cj4+ID4gKyAgICAgICAgICAgICB1OCBj b3VudCwgZmxhZ3M7Cj4+ID4gKwo+PiA+ICsgICAgICAgICAgICAgaWYgKCpkYXRhICYgQklUKDcp KSB7IC8qIHNraXAgKi8KPj4gPiArICAgICAgICAgICAgICAgICAgICAgcmVncyArPSAqZGF0YSsr ICYgfkJJVCg3KTsKPj4gPiArICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4+ID4gKyAg ICAgICAgICAgICB9Cj4+ID4gKwo+PiA+ICsgICAgICAgICAgICAgY291bnQgPSAqZGF0YSAmIDB4 M2Y7Cj4+ID4gKyAgICAgICAgICAgICBmbGFncyA9ICpkYXRhID4+IDY7Cj4+ID4gKyAgICAgICAg ICAgICBkYXRhKys7Cj4+ID4gKwo+PiA+ICsgICAgICAgICAgICAgKnJlZ3MgPSBNSV9MT0FEX1JF R0lTVEVSX0lNTShjb3VudCk7Cj4+ID4gKyAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBQT1NURUQp Cj4+ID4gKyAgICAgICAgICAgICAgICAgICAgICpyZWdzIHw9IE1JX0xSSV9GT1JDRV9QT1NURUQ7 Cj4+ID4gKyAgICAgICAgICAgICBpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTEpCj4+ ID4gKyAgICAgICAgICAgICAgICAgICAgICpyZWdzIHw9IE1JX0xSSV9DU19NTUlPOwo+PiA+ICsg ICAgICAgICAgICAgcmVncysrOwo+PiA+ICsKPj4gPiArICAgICAgICAgICAgIEdFTV9CVUdfT04o IWNvdW50KTsKPj4gPiArICAgICAgICAgICAgIGRvIHsKPj4gPiArICAgICAgICAgICAgICAgICAg ICAgdTMyIG9mZnNldCA9IDA7Cj4+ID4gKyAgICAgICAgICAgICAgICAgICAgIHU4IHY7Cj4+ID4g Kwo+PiA+ICsgICAgICAgICAgICAgICAgICAgICBkbyB7Cj4+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdiA9ICpkYXRhKys7Cj4+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgb2Zmc2V0IDw8PSA3Owo+PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNl dCB8PSB2ICYgfkJJVCg3KTsKPj4gPiArICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAodiAm IEJJVCg3KSk7Cj4+IAo+PiAuLi5idXQgcGVyaGFwcyB0aGlzIGFtb3VudCBvZiBleHRyYSBjYW4g YmUgdG9sZXJhdGVkLgo+PiAKPj4gRGlkIHlvdSBjaGVjayBob3cgdGhpcyB3b3VsZCBwbGF5IG91 dCB3aXRoIGp1c3QgUkVHIGJlaW5nIHdpZGUgZW5vdWdoPwo+Cj4gV2hlbiBJIHN0YXJ0ZWQsIEkg dGhvdWdodCB3ZSBjb3VsZCBnZXQgYXdheSB3aXRoIG9ubHkgb25lIFJFRzE2LiBMb29raW5nCj4g YXQgdGhlIGNvbnRleHQgaW1hZ2UgSSB0aGluayB3ZSBtaWdodCB3YW50IGEgZmV3IG5vbiBlbmdp bmUtPm1taW9fYmFzZQo+IHJlZ3MgaW4gdGhlcmUgKGlmIEkgcmVhZCBpdCByaWdodCwgc29tZSBv ZiB0aGUgMHg0MDAwIHJhbmdlIGFyZSBwZXIKPiBlbmdpbmUpLiBUaGF0IHdpbGwgbmVlZCBhIHNs aWdodGx5IGRpZmZlcmVudCBlbmNvZGluZyBhcyB3ZWxsIDp8Cj4KPiBObywgSSBoYXZlbid0IGJ1 dCBzaW5jZSB5b3UgYXNrLCBJIHNoYWxsLgoKTm93IHdlIGtub3cgdGhlIGJsb2F0IGRpZmYgYW5k IHRoZSBjb21wbGV4aXR5IGFkZGl0aW9uCmlzIHRpbnkgc28gSSBhbSBmaW5lIHdpdGggdXNpbmcg dGhlIHRpZ2h0ZXIgUkVHL1JFRzE2CnNwbGl0LgoKPgo+PiA+ICsKPj4gPiArICAgICAgICAgICAg ICAgICAgICAgKnJlZ3MgPSBiYXNlICsgKG9mZnNldCA8PCAyKTsKPj4gCj4+IEluIGhlcmUgcmVh ZGVyIGlzIHllYXJuaW5nIGZvciBhbiBhc3NlcnRzIG9mIG5vdCB0cmFtcGxpbmcKPj4gb24gd3Jv bmcgdGVycml0b3J5Lgo+Cj4gSWYgeW91IGhhdmUgYW4gaWRlYSBmb3IgYSBnb29kIGFzc2VydCwg Z28gZm9yIGl0IDopCj4KPiBXaGF0IHJhbmdlIHNob3VsZCBiZSBjaGVja2VkLiBvZmZzZXQgPCAw eDEwMDAgPwo+CgpJIGFtIGZpbmUgYXQgc2VsZnRlc3QgdHJ5aW5nIHRvIHRha2UgdGhlIGJ1cmRl bi4KKHRoYXQgY2FuIGJlIHJlYWQgbGlrZSB0aGF0IEkgY2FuJ3QgbWFrZSB1cCBnb29kIGFzc2Vy dHMpCgo+PiBCdXQgSSB3b3VsZCBndWVzcyB0aGF0IHlvdSB3YW50IHRoaXMgcGFydCB0byBiZSBs aWtlCj4+IG9pbGVkIGxpZ2h0bmluZyBhbmQgdGVzdCB0aGUgbWFjaGluZXJ5IHdpdGggc2VsZnRl c3QuLmFzIHRoZQo+PiBzdWJqZWN0IHNlZW1zIHRvIHByb21pc2UuCj4KPiBUaGUgaW1wb3J0YW5j ZSBpcyBjZXJ0YWlubHkgcGxhY2VkIG9uIGhhdmluZyBhIHNlbGZ0ZXN0IGFuZCB0aGUKPiBjb25m aWRlbmNlIGluIGtlZXBpbmcgb3VyIG9mZnNldHMgaW4gbGluZSB3aXRoIHRoZSBIVy4gVGhlIGdv YWwgd2FzIHRvCj4gaGF2ZSBhIGNvbXBhY3QgZGVzY3JpcHRpb24gZm9yIHRoZSByZWdpc3RlciBv ZmZzZXRzLCBpbiB0ZXJtcyBvZgo+IHJlYWRhYmlsaXR5IEkgdGhpbmsgdGhlIGVtcGhhc2lzIHNo b3VsZCBiZSBvbiB0aGUgdGFibGVzCj4gKGdlbjhfeGNzX29mZnNldHNbXSkuCj4KPj4gPiBAQCAt MzA5Miw3ICszNDUxLDcgQEAgdm9pZCBpbnRlbF9leGVjbGlzdHNfc2V0X2RlZmF1bHRfc3VibWlz c2lvbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4+ID4gICAgICAgICAgICAgICAg ICAgICAgIGVuZ2luZS0+ZmxhZ3MgfD0gSTkxNV9FTkdJTkVfSEFTX1BSRUVNUFRJT047Cj4+ID4g ICAgICAgfQo+PiA+ICAKPj4gPiAtICAgICBpZiAoZW5naW5lLT5jbGFzcyAhPSBDT1BZX0VOR0lO RV9DTEFTUyAmJiBJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMikKPj4gPiArICAgICBpZiAo ZW5naW5lLT5jbGFzcyAhPSBDT1BZX0VOR0lORV9DTEFTUyAmJiBJTlRFTF9HRU4oZW5naW5lLT5p OTE1KSA+PSAxMSkKPj4gPiAgICAgICAgICAgICAgIGVuZ2luZS0+ZmxhZ3MgfD0gSTkxNV9FTkdJ TkVfSEFTX1JFTEFUSVZFX01NSU87Cj4+IAo+PiBPaywgZmlyc3QgSSB0aG91Z2h0IHRoaXMgd2Fz IHVuaW50ZW50aW9uYWwuIEJ1dCBwcm9sbHkgbm90Lgo+PiBEbyB5b3UgbmVlZCBpdCBmb3IgdGhl IHZlcmlmaWVyIHRvIHdvcms/Cj4KPiBObywgSSBlbmRlZCB1cCBjb21wbGV0ZWx5IGlnbm9yaW5n IHRoaXMgZmxhZyBhcyB0aGUgSFcgZG9lcyBub3QKPiBkaWZmZXJlbnRpYXRlIGJldHdlZW4gZW5n aW5lcy4gT24gZ2VuMTErLCBpdCBzZXRzIHRoZSBMUkkgZmxhZyBldmVyeXdoZXJlCj4gaW4gdGhl IGNvbnRleHQgaW1hZ2UuCj4KPj4gQ291bGQgd2Ugc3RpbGwgcmlwIGl0IG91dCB0byBiZSBhIGZp cnN0IGluIHRoZSBzZXJpZXMuCj4+IEp1c3Qgd291bGQgd2FudCB0byBkaWZmZXJpYW50ZSBwb3Nz aWJsZSBpY2wgaGlja3VwcyBhcGFydAo+PiBmcm9tIHRoaXMgcGF0Y2guCgpXaXRoIHRoZSByZWxh dGl2ZSBNTUlPIGZvciBnZW4xMSBsaWZ0ZWQgYXMgYSBzZXBhcmF0ZQpwYXRjaCBwcmlvciB0byB0 aGlzIG9uZSwKClJldmlld2VkLWJ5OiBNaWthIEt1b3BwYWxhIDxtaWthLmt1b3BwYWxhQGxpbnV4 LmludGVsLmNvbT4KCgo+Cj4gU3VyZS4KPgo+PiA+ICtzdGF0aWMgaW50IGxpdmVfbHJjX2xheW91 dCh2b2lkICphcmcpCj4+ID4gK3sKPj4gPiArICAgICBzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gYXJn Owo+PiA+ICsgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPj4gPiArICAgICBl bnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPj4gPiArICAgICB1MzIgKm1lbTsKPj4gPiArICAgICBp bnQgZXJyOwo+PiA+ICsKPj4gPiArICAgICAvKgo+PiA+ICsgICAgICAqIENoZWNrIHRoZSByZWdp c3RlcnMgb2Zmc2V0cyB3ZSB1c2UgdG8gY3JlYXRlIHRoZSBpbml0aWFsIHJlZyBzdGF0ZQo+PiA+ ICsgICAgICAqIG1hdGNoIHRoZSBsYXlvdXQgc2F2ZWQgYnkgSFcuCj4+ID4gKyAgICAgICovCj4+ ID4gKwo+PiA+ICsgICAgIG1lbSA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKPj4g PiArICAgICBpZiAoIW1lbSkKPj4gPiArICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwo+PiA+ ICsKPj4gPiArICAgICBlcnIgPSAwOwo+PiA+ICsgICAgIGZvcl9lYWNoX2VuZ2luZShlbmdpbmUs IGd0LT5pOTE1LCBpZCkgewo+PiA+ICsgICAgICAgICAgICAgdTMyICpodywgKmxyYzsKPj4gPiAr ICAgICAgICAgICAgIGludCBkdzsKPj4gPiArCj4+ID4gKyAgICAgICAgICAgICBpZiAoIWVuZ2lu ZS0+ZGVmYXVsdF9zdGF0ZSkKPj4gPiArICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4+ ID4gKwo+PiA+ICsgICAgICAgICAgICAgaHcgPSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChlbmdp bmUtPmRlZmF1bHRfc3RhdGUsCj4+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEk5MTVfTUFQX1dCKTsKPj4gCj4+IFRoaXMgZGVmYXVsdCBzdGF0ZSBpcyBub3Qg cHJpc3RpbmUgYXMgd2UgaGF2ZSB0cmFtcGxlZAo+PiBpdCB3aXRoIG91ciBmaXJzdCBzdWJtaXNz aW9uLCByaWdodD8KPgo+IEl0IGlzIHRoZSBjb250ZXh0IGltYWdlIHNhdmVkIGFmdGVyIHRoZSBm aXJzdCByZXF1ZXN0Lgo+ICAKPj4gQnV0IGJlaW5nIHN1Y2NlZWRlZCBhdCBkb2luZyBzbywgdGhl IG5leHQgY29udGV4dAo+PiBzYXZlIHNob3VsZCBvdmVyd3JpdGUgb3VyIHRyYW1wbGluZyBhbmQg aXQgd291bGQKPj4gdGhlbiByZXByZXNlbnQgdGhlIGh3IGFjY3VyYXRlIGNvbnRleHQgc2F2ZQo+ PiBzdGF0ZS4KPj4gCj4+IEFnYWluc3Qgd2hpY2ggd2Ugd2lsbCBjb21wYXJlIG9mIG91ciByZWcg c3RhdGUKPj4gd3JpdGVyLgo+Cj4gUmlnaHQsIGRlZmF1bHRfc3RhdGUgaXMgdGhlIEhXIHZlcnNp b24gb2Ygb3VyIGluaXRfcmVnX3N0YXRlLgo+Cj4+ID4gKyAgICAgICAgICAgICBpZiAoSVNfRVJS KGh3KSkgewo+PiA+ICsgICAgICAgICAgICAgICAgICAgICBlcnIgPSBQVFJfRVJSKGh3KTsKPj4g PiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+ID4gKyAgICAgICAgICAgICB9Cj4+ID4g KyAgICAgICAgICAgICBodyArPSBMUkNfU1RBVEVfUE4gKiBQQUdFX1NJWkUgLyBzaXplb2YoKmh3 KTsKPj4gPiArCj4+ID4gKyAgICAgICAgICAgICBscmMgPSBtZW1zZXQobWVtLCAwLCBQQUdFX1NJ WkUpOwo+PiA+ICsgICAgICAgICAgICAgZXhlY2xpc3RzX2luaXRfcmVnX3N0YXRlKGxyYywKPj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmUtPmtlcm5lbF9j b250ZXh0LAo+PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2lu ZSwKPj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmUtPmtl cm5lbF9jb250ZXh0LT5yaW5nLAo+PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRydWUpOwo+PiA+ICsKPj4gPiArICAgICAgICAgICAgIGR3ID0gMDsKPj4gPiArICAg ICAgICAgICAgIGRvIHsKPj4gPiArICAgICAgICAgICAgICAgICAgICAgdTMyIGxyaSA9IGh3W2R3 XTsKPj4gPiArCj4+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChscmkgPT0gMCkgewo+PiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR3Kys7Cj4+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29udGludWU7Cj4+ID4gKyAgICAgICAgICAgICAgICAgICAgIH0KPj4g PiArCj4+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmICgobHJpICYgR0VOTUFTSygzMSwgMjMp KSAhPSBNSV9JTlNUUigweDIyLCAwKSkgewo+PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHByX2VycigiJXM6IEV4cGVjdGVkIExSSSBjb21tYW5kIGF0IGR3b3JkICVkLCBmb3VuZCAl MDh4XG4iLAo+PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmUt Pm5hbWUsIGR3LCBscmkpOwo+PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9 IC1FSU5WQUw7Cj4+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+ID4g KyAgICAgICAgICAgICAgICAgICAgIH0KPj4gPiArCj4+ID4gKyAgICAgICAgICAgICAgICAgICAg IGlmIChscmNbZHddICE9IGxyaSkgewo+PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHByX2VycigiJXM6IExSSSBjb21tYW5kIG1pc21hdGNoIGF0IGR3b3JkICVkLCBleHBlY3RlZCAl MDh4IGZvdW5kICUwOHhcbiIsCj4+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGVuZ2luZS0+bmFtZSwgZHcsIGxyaSwgbHJjW2R3XSk7Cj4+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZXJyID0gLUVJTlZBTDsKPj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKPj4gPiArICAgICAgICAgICAgICAgICAgICAgfQo+PiA+ICsKPj4gPiAr ICAgICAgICAgICAgICAgICAgICAgbHJpICY9IDB4N2Y7Cj4+ID4gKyAgICAgICAgICAgICAgICAg ICAgIGxyaSsrOwo+PiA+ICsgICAgICAgICAgICAgICAgICAgICBkdysrOwo+PiA+ICsKPj4gPiAr ICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxyaSkgewo+PiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChod1tkd10gIT0gbHJjW2R3XSkgewo+PiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcHJfZXJyKCIlczogRGlmZmVyZW50IHJlZ2lzdGVycyBm b3VuZCBhdCBkd29yZCAlZCwgZXhwZWN0ZWQgJXgsIGZvdW5kICV4XG4iLAo+PiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZS0+bmFtZSwgZHcsIGh3 W2R3XSwgbHJjW2R3XSk7Cj4+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlcnIgPSAtRUlOVkFMOwo+PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Cj4+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQo+PiA+ICsKPj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgo+PiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqIFNraXAgb3ZlciB0aGUgYWN0dWFsIHJlZ2lzdGVyIHZhbHVlIGFzIHdl Cj4+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZXhwZWN0IHRoYXQgdG8gZGlm ZmVyLgo+PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwo+PiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGR3ICs9IDI7Cj4+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbHJpIC09IDI7Cj4+IAo+PiBUaGlzIG1ha2VzIG1lIHdvbmRlciBpZiB3ZSBjb3Vs ZCB1c2UgdGhpcyBtYWNoaW5lcnkgcG9zdCBoYW5nLiBKdXN0IHRvCj4+IGdldCBhIGxpdHRsZSBt b3JlIHRyaWFnZSBkYXRhIG91dCwgaWUgJ3lvdXIgY29udGV4dCBsb29rcyBjb3JydXB0ZWQgYXQK Pj4gb2Zmc2V0ICV4Jy4uLgo+Cj4gQ2VydGFpbmx5IHBvc3NpYmxlLCBidXQgd2hhdCB3ZSBjaGVj ayBoZXJlIGlzIF9tb3N0bHlfIHRoZSBwcml2aWxlZ2VkCj4gcmVnaXN0ZXJzIHRoYXQgYXJlIG5v dCByZWFsbHkgbWVhbnQgdG8gYmUgY2hhbmdlZCBieSB0aGUgdXNlciAtLSBhbmQgd2UKPiBhcmUg b25seSBjaGVja2luZyB0aGUgb2Zmc2V0cywgc28gdW5saWtlbHkgdGhlcmUgdG8gYmUganVzdCBv bmUgd3JvbmcuCj4KPiBUaGUgZ2VuZXJhbCBwcmluY2lwbGUgd2FzIHRoYXQgd2Ugc2hvdWxkIHBy b3ZpZGUgcmF3IGluZm9ybWF0aW9uIGFuZAo+IGhhdmUgdGhlIHNtYXJ0cyBpbiB1c2Vyc3BhY2Ug KHNvIHRoYXQgd2UgY291bGQgYWx3YXlzIGVuaGFuY2Ugb3VyCj4gcHJvY2Vzc2luZyBhbmQgcmVh bmFseXNlIGV4aXN0aW5nIGR1bXBzKS4gQnV0IGF0IHRoZSBlbmQgb2YgdGhlIGRheSwKPiB3aGF0 ZXZlciBhbGxvd3MgdXMgdG8gcHJldmVudCBidWdzIG9yIGZpeCBidWdzIGlzIHBhcmFtb3VudC4K Pgo+IEJ1dCBJJ20gbm90IHlldCBzb2xkIHRoaXMgaGVscHMuIE1heWJlIGlmIHdlIGZpbmQgYW4g ZXhhbXBsZSB3aGVyZSBpdAo+IHByb3ZlcyB1c2VmdWwuLi4KPgo+PiA+ICsgICAgICAgICAgICAg ICAgICAgICB9Cj4+ID4gKyAgICAgICAgICAgICB9IHdoaWxlICgobHJjW2R3XSAmIH5CSVQoMCkp ICE9IE1JX0JBVENIX0JVRkZFUl9FTkQpOwo+PiAKPj4gT2ssIHlvdSB0aWUgdXAgYWx3YXlzIHRo ZSBnZW5lcmF0ZSBpbWFnZS4gRm9yIGZ1dHVyZSB3b3JrIGFkZCB0aGUgaHcgYmF0Y2gKPj4gZW5k cG9pbnQgYmUgYSBwYXJ0IG9mIGNoZWNrZXI/Cj4KPiBJdCdzIG5vdCBhbHdheXMgaW4gdGhlIGZp cnN0IHBhZ2UsIEknbSBub3QgZXZlbiBzdXJlIGlmIGEgQkJfRU5EIGlzCj4gYWx3YXlzIGluY2x1 ZGVkIGluIHRoZSBvbGRlciBnZW4uIChJIGhhdmUgYSBmZWVsaW5nIHRoZSBIVyBkZWZpbml0ZWx5 Cj4gc3RhcnRlZCBpbmNsdWRpbmcgaXQgfmdlbjEwLikKPiAtQ2hyaXMKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJ bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4