From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oi1-x241.google.com (mail-oi1-x241.google.com [IPv6:2607:f8b0:4864:20::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id C52C76E21A for ; Thu, 11 Jul 2019 12:36:44 +0000 (UTC) Received: by mail-oi1-x241.google.com with SMTP id w7so4344374oic.3 for ; Thu, 11 Jul 2019 05:36:44 -0700 (PDT) MIME-Version: 1.0 References: <20190704095604.16589-1-oleg.vasilev@intel.com> <20190704095604.16589-2-oleg.vasilev@intel.com> <20190710163542.GX15868@phenom.ffwll.local> In-Reply-To: From: Daniel Vetter Date: Thu, 11 Jul 2019 14:36:32 +0200 Message-ID: Subject: Re: [igt-dev] [PATCH 2/2] tests/prime_generic: add vendor-agnostic prime tests List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: "Vasilev, Oleg" Cc: "igt-dev@lists.freedesktop.org" List-ID: T24gVGh1LCBKdWwgMTEsIDIwMTkgYXQgMTE6MDkgQU0gVmFzaWxldiwgT2xlZyA8b2xlZy52YXNp bGV2QGludGVsLmNvbT4gd3JvdGU6Cj4KPiBPbiBXZWQsIDIwMTktMDctMTAgYXQgMTg6MzUgKzAy MDAsIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gPiBPbiBUaHUsIEp1bCAwNCwgMjAxOSBhdCAxMjo1 NjowNFBNICswMzAwLCBPbGVnIFZhc2lsZXYgd3JvdGU6Cj4gPiA+IEN1cnJlbnRseSwgd2UgaGF2 ZSBkaWZmZXJlbnQgc2V0cyBvZiBwcmltZSB0ZXN0czoKPiA+ID4gIC0gdmdlbStpOTE1Cj4gPiA+ ICAtIGFtZGdwdStpOTE1Cj4gPiA+ICAtIG52K2k5MTUKPiA+ID4KPiA+ID4gVGhvc2UgdGVzdHMg dXNlIHZlbmRvci1zcGVjaWZpYyBpb2N0bHMsIHRoZXJlZm9yZSwgbm90Cj4gPiA+IGludGVyY2hh bmdlYWJsZS4KPiA+ID4gVGhlIGlkZWEgaXMgdG8gY3JlYXRlIGEgc2V0IG9mIHRlc3RzIHdoaWNo IGFyZSBleHBlY3RlZCB0byB3b3JrIG9uCj4gPiA+IGFueQo+ID4gPiBwcmltZS1jb21wYXRpYmxl IGRyaXZlci4gSXQgY2FuIGJlIHJ1biB3aXRoIGFueSBjb21iaW5hdGlvbiBvZgo+ID4gPiBleHBv cnRlcitpbXBvcnRlciwgd2hlcmUKPiA+ID4KPiA+ID4gVGhlIGZpcnN0IHRlc3QgaXMgc2ltcGxl Ogo+ID4gPiAxLiBFeHBvcnRlciBjcmVhdGVzIGEgZnJhbWVidWZmZXIgYW5kIGZpbGxzIGl0IHdp dGggYSBwbGFpbiBjb2xvcgo+ID4gPiAyLiBGYiBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgaW1wb3J0 ZXIKPiA+ID4gMy4gSW1wb3J0ZXIgbW9kZXNldHMgYW5kIGNvbXB1dGVzIHBpcGUgQ1JDCj4gPiA+ IDQuIEltcG9ydGVyIGRyYXdzIHRoZSBzYW1lIGNvbG9yIHRocm91Z2ggY2Fpcm8gYW5kIGNvbXBh cmVzIENSQwo+ID4gPgo+ID4gPiBUaGUgaW5pdGlhbCBtb3RpdmF0aW9uIGNvbWVzIGZyb20gdGhl IG5lZWQgdG8gdGVzdCBwcmltZSBzdXBwb3J0IGluCj4gPiA+IHZrbXMuCj4gPiA+Cj4gPiA+IENj OiBSb2RyaWdvIFNpcXVlaXJhIDxyb2RyaWdvc2lxdWVpcmFtZWxvQGdtYWlsLmNvbT4KPiA+ID4g Q2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbEBmZndsbC5jaD4KPiA+ID4gU2lnbmVkLW9mZi1ieTog T2xlZyBWYXNpbGV2IDxvbGVnLnZhc2lsZXZAaW50ZWwuY29tPgo+ID4gPiAtLS0KPiA+ID4gIHRl c3RzL21lc29uLmJ1aWxkICAgICB8ICAgMSArCj4gPiA+ICB0ZXN0cy9wcmltZV9nZW5lcmljLmMg fCAyMzgKPiA+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4g PiA+ICAyIGZpbGVzIGNoYW5nZWQsIDIzOSBpbnNlcnRpb25zKCspCj4gPiA+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgdGVzdHMvcHJpbWVfZ2VuZXJpYy5jCj4gPiA+Cj4gPiA+IGRpZmYgLS1naXQgYS90 ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkCj4gPiA+IGluZGV4IDM0YTc0MDI1 Li4xYzkzOGU5NSAxMDA2NDQKPiA+ID4gLS0tIGEvdGVzdHMvbWVzb24uYnVpbGQKPiA+ID4gKysr IGIvdGVzdHMvbWVzb24uYnVpbGQKPiA+ID4gQEAgLTc2LDYgKzc2LDcgQEAgdGVzdF9wcm9ncyA9 IFsKPiA+ID4gICAgICdwcmltZV9zZWxmX2ltcG9ydCcsCj4gPiA+ICAgICAncHJpbWVfdWRsJywK PiA+ID4gICAgICdwcmltZV92Z2VtJywKPiA+ID4gKyAgICdwcmltZV9nZW5lcmljJywKPiA+ID4g ICAgICdzeW5jb2JqX2Jhc2ljJywKPiA+ID4gICAgICdzeW5jb2JqX3dhaXQnLAo+ID4gPiAgICAg J3RlbXBsYXRlJywKPiA+ID4gZGlmZiAtLWdpdCBhL3Rlc3RzL3ByaW1lX2dlbmVyaWMuYyBiL3Rl c3RzL3ByaW1lX2dlbmVyaWMuYwo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gPiBpbmRl eCAwMDAwMDAwMC4uNjVlNDg3NjMKPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiArKysgYi90ZXN0 cy9wcmltZV9nZW5lcmljLmMKPiA+ID4gQEAgLTAsMCArMSwyMzggQEAKPiA+ID4gKy8qCj4gPiA+ ICsgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgo+ID4gPiArICoKPiA+ID4g KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uCj4gPiA+IG9idGFpbmluZyBhCj4gPiA+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCj4gPiA+ICJTb2Z0d2FyZSIp LAo+ID4gPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQKPiA+ID4gbGltaXRhdGlvbgo+ID4gPiArICogdGhlIHJpZ2h0cyB0 byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsCj4gPiA+IHN1 YmxpY2Vuc2UsCj4gPiA+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8KPiA+ID4gd2hvbSB0aGUKPiA+ID4gKyAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCj4gPiA+IGNv bmRpdGlvbnM6Cj4gPiA+ICsgKgo+ID4gPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKPiA+ID4gKGluY2x1ZGluZyB0aGUgbmV4dAo+ID4g PiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsCj4gPiA+IHBvcnRpb25zIG9mIHRoZQo+ID4gPiArICogU29mdHdhcmUuCj4gPiA+ICsg Kgo+ID4gPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsCj4gPiA+IEVYUFJFU1MgT1IKPiA+ID4gKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKPiA+ID4gTUVSQ0hB TlRBQklMSVRZLAo+ID4gPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gIElOIE5PCj4gPiA+IEVWRU5UIFNIQUxMCj4gPiA+ICsgKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKPiA+ ID4gREFNQUdFUyBPUiBPVEhFUgo+ID4gPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCj4gPiA+IEFSSVNJTkcKPiA+ID4g KyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IKPiA+ID4gT1RIRVIgREVBTElOR1MKPiA+ID4gKyAqIElOIFRIRSBTT0ZUV0FSRS4K PiA+ID4gKyAqLwo+ID4gPiArCj4gPiA+ICsjaW5jbHVkZSAiaWd0LmgiCj4gPiA+ICsjaW5jbHVk ZSAiaWd0X3ZnZW0uaCIKPiA+ID4gKwo+ID4gPiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgo+ID4g PiArI2luY2x1ZGUgPHN5cy9wb2xsLmg+Cj4gPiA+ICsjaW5jbHVkZSA8dGltZS5oPgo+ID4gPiAr Cj4gPiA+ICtzdGF0aWMgc3RydWN0IHsKPiA+ID4gKyAgIGRvdWJsZSByLCBnLCBiOwo+ID4gPiAr ICAgdWludDMyX3QgY29sb3I7Cj4gPiA+ICsgICBpZ3RfY3JjX3QgcHJpbWVfY3JjOwo+ID4gPiAr ICAgaWd0X2NyY190IGRpcmVjdF9jcmM7Cj4gPiA+ICsgICBjaGFyICpwcmltZV9zdHI7Cj4gPiA+ ICsgICBjaGFyICpkaXJlY3Rfc3RyOwo+ID4gPiArfSBjb2xvcnNbM10gPSB7Cj4gPiA+ICsgICB7 IC5yID0gMC4wLCAuZyA9IDAuMCwgLmIgPSAwLjAsIC5jb2xvciA9IDB4ZmYwMDAwMDB9LAo+ID4g PiArICAgeyAuciA9IDEuMCwgLmcgPSAxLjAsIC5iID0gMS4wLCAuY29sb3IgPSAweGZmZmZmZmZm fSwKPiA+ID4gKyAgIHsgLnIgPSAxLjAsIC5nID0gMC4wLCAuYiA9IDAuMCwgLmNvbG9yID0gMHhm ZmZmMDAwMH0sCj4gPiA+ICt9Owo+ID4gPiArCj4gPiA+ICtJR1RfVEVTVF9ERVNDUklQVElPTigi R2VuZXJpYyB0ZXN0cywgd29ya2luZyB3aXRoIGFueSBwcmltZQo+ID4gPiBkZXZpY2UiKTsKPiA+ ID4gKwo+ID4gPiArc3RhdGljIGJvb2wgaGFzX3ByaW1lX2ltcG9ydChpbnQgZmQpCj4gPiA+ICt7 Cj4gPiA+ICsgICB1aW50NjRfdCB2YWx1ZTsKPiA+ID4gKwo+ID4gPiArICAgaWYgKGRybUdldENh cChmZCwgRFJNX0NBUF9QUklNRSwgJnZhbHVlKSkKPiA+ID4gKyAgICAgICAgICAgcmV0dXJuIGZh bHNlOwo+ID4gPiArCj4gPiA+ICsgICByZXR1cm4gdmFsdWUgJiBEUk1fUFJJTUVfQ0FQX0lNUE9S VDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGJvb2wgaGFzX3ByaW1lX2V4cG9ydChp bnQgZmQpCj4gPiA+ICt7Cj4gPiA+ICsgICB1aW50NjRfdCB2YWx1ZTsKPiA+ID4gKwo+ID4gPiAr ICAgaWYgKGRybUdldENhcChmZCwgRFJNX0NBUF9QUklNRSwgJnZhbHVlKSkKPiA+ID4gKyAgICAg ICAgICAgcmV0dXJuIGZhbHNlOwo+ID4gPiArCj4gPiA+ICsgICByZXR1cm4gdmFsdWUgJiBEUk1f UFJJTUVfQ0FQX0VYUE9SVDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQgcHJl cGFyZV9zY3JhdGNoKGludCBleHBvcnRlciwgc3RydWN0IHZnZW1fYm8gKnNjcmF0Y2gsCj4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwgdWludDMyX3Qg Y29sb3IpCj4gPiA+ICt7Cj4gPiA+ICsgICBpbnQgaTsKPiA+ID4gKyAgIHVpbnQzMl90ICpwdHI7 Cj4gPiA+ICsKPiA+ID4gKyAgIHNjcmF0Y2gtPndpZHRoID0gbW9kZS0+aGRpc3BsYXk7Cj4gPiA+ ICsgICBzY3JhdGNoLT5oZWlnaHQgPSBtb2RlLT52ZGlzcGxheTsKPiA+ID4gKyAgIHNjcmF0Y2gt PmJwcCA9IDMyOwo+ID4gPiArICAgdmdlbV9jcmVhdGUoZXhwb3J0ZXIsIHNjcmF0Y2gpOwo+ID4g PiArCj4gPiA+ICsgICBwdHIgPSB2Z2VtX21tYXAoZXhwb3J0ZXIsIHNjcmF0Y2gsIFBST1RfV1JJ VEUpOwo+ID4gPiArICAgZm9yIChpID0gMDsgaSA8IHNjcmF0Y2gtPnNpemUgLyBzaXplb2YoKnB0 cik7ICsraSkKPiA+ID4gKyAgICAgICAgICAgcHRyW2ldID0gY29sb3I7Cj4gPiA+ICsKPiA+ID4g KyAgIG11bm1hcChwdHIsIHNjcmF0Y2gtPnNpemUpOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtz dGF0aWMgdm9pZCBwcmVwYXJlX2ZiKGludCBpbXBvcnRlciwgc3RydWN0IHZnZW1fYm8gKnNjcmF0 Y2gsCj4gPiA+IHN0cnVjdCBpZ3RfZmIgKmZiKQo+ID4gPiArewo+ID4gPiArICAgZW51bSBpZ3Rf Y29sb3JfZW5jb2RpbmcgY29sb3JfZW5jb2RpbmcgPSBJR1RfQ09MT1JfWUNCQ1JfQlQ3MDk7Cj4g PiA+ICsgICBlbnVtIGlndF9jb2xvcl9yYW5nZSBjb2xvcl9yYW5nZSA9Cj4gPiA+IElHVF9DT0xP Ul9ZQ0JDUl9MSU1JVEVEX1JBTkdFOwo+ID4gPiArCj4gPiA+ICsgICBpZ3RfaW5pdF9mYihmYiwg aW1wb3J0ZXIsIHNjcmF0Y2gtPndpZHRoLCBzY3JhdGNoLT5oZWlnaHQsCj4gPiA+ICsgICAgICAg ICAgICAgICBEUk1fRk9STUFUX1hSR0I4ODg4LCBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAo+ ID4gPiArICAgICAgICAgICAgICAgY29sb3JfZW5jb2RpbmcsIGNvbG9yX3JhbmdlKTsKPiA+ID4g K30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQgaW1wb3J0X2ZiKGludCBpbXBvcnRlciwgc3Ry dWN0IGlndF9mYiAqZmIsCj4gPiA+ICsgICAgICAgICAgICAgICAgIGludCBkbWFidWZfZmQsIHVp bnQzMl90IHBpdGNoKQo+ID4gPiArewo+ID4gPiArICAgdWludDMyX3Qgb2Zmc2V0c1s0XSwgcGl0 Y2hlc1s0XSwgaGFuZGxlc1s0XTsKPiA+ID4gKyAgIGludCByZXQ7Cj4gPiA+ICsKPiA+ID4gKyAg IGZiLT5nZW1faGFuZGxlID0gcHJpbWVfZmRfdG9faGFuZGxlKGltcG9ydGVyLCBkbWFidWZfZmQp Owo+ID4gPiArCj4gPiA+ICsgICBoYW5kbGVzWzBdID0gZmItPmdlbV9oYW5kbGU7Cj4gPiA+ICsg ICBwaXRjaGVzWzBdID0gcGl0Y2g7Cj4gPiA+ICsgICBvZmZzZXRzWzBdID0gMDsKPiA+ID4gKwo+ ID4gPiArICAgcmV0ID0gZHJtTW9kZUFkZEZCMihpbXBvcnRlciwgZmItPndpZHRoLCBmYi0+aGVp Z2h0LAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBEUk1fRk9STUFUX1hSR0I4ODg4LAo+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVzLCBwaXRjaGVzLCBvZmZzZXRzLAo+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAmZmItPmZiX2lkLCAwKTsKPiA+ID4gKyAgIGln dF9hc3NlcnQocmV0ID09IDApOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZCBz ZXRfZmIoc3RydWN0IGlndF9mYiAqZmIsCj4gPiA+ICsgICAgICAgICAgICAgIGlndF9kaXNwbGF5 X3QgKmRpc3BsYXksCj4gPiA+ICsgICAgICAgICAgICAgIGlndF9vdXRwdXRfdCAqb3V0cHV0KQo+ ID4gPiArewo+ID4gPiArICAgaWd0X3BsYW5lX3QgKnByaW1hcnk7Cj4gPiA+ICsgICBpbnQgcmV0 Owo+ID4gPiArCj4gPiA+ICsgICBwcmltYXJ5ID0gaWd0X291dHB1dF9nZXRfcGxhbmUob3V0cHV0 LCAwKTsKPiA+ID4gKyAgIGlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgZmIpOwo+ID4gPiArICAg cmV0ID0gaWd0X2Rpc3BsYXlfY29tbWl0KGRpc3BsYXkpOwo+ID4gPiArCj4gPiA+ICsgICBpZ3Rf YXNzZXJ0KHJldCA9PSAwKTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQgdGVz dF9jcmMoaW50IGV4cG9ydGVyLCBpbnQgaW1wb3J0ZXIpCj4gPiA+ICt7Cj4gPiA+ICsgICBlbnVt IHBpcGUgcGlwZSA9IFBJUEVfQTsKPiA+ID4gKyAgIGlndF9kaXNwbGF5X3QgZGlzcGxheTsKPiA+ ID4gKyAgIGlndF9vdXRwdXRfdCAqb3V0cHV0Owo+ID4gPiArICAgaWd0X3BpcGVfY3JjX3QgKnBp cGVfY3JjOwo+ID4gPiArICAgc3RydWN0IGlndF9mYiBmYjsKPiA+ID4gKyAgIGludCBkbWFidWZf ZmQ7Cj4gPiA+ICsgICBzdHJ1Y3QgdmdlbV9ibyBzY3JhdGNoOyAvKiBkZXNwaXRlIHRoZSBuYW1l LCBpdCBzdWl0cyBmb3IgYW55Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn ZW0tY29tcGF0aWJsZSBkZXZpY2UgKi8KPiA+ID4gKyAgIGludCBpLCBqOwo+ID4gPiArICAgZHJt TW9kZU1vZGVJbmZvICptb2RlOwo+ID4gPiArCj4gPiA+ICsgICBib29sIGNyY19lcXVhbDsKPiA+ ID4gKwo+ID4gPiArICAgaWd0X2Rpc3BsYXlfcmVxdWlyZSgmZGlzcGxheSwgaW1wb3J0ZXIpOwo+ ID4gPiArICAgaWd0X3NraXBfb24ocGlwZSA+PSBkaXNwbGF5Lm5fcGlwZXMpOwo+ID4gPiArICAg b3V0cHV0ID0gaWd0X2dldF9zaW5nbGVfb3V0cHV0X2Zvcl9waXBlKCZkaXNwbGF5LCBwaXBlKTsK PiA+ID4gKyAgIGlndF9yZXF1aXJlX2Yob3V0cHV0LCAiTm8gY29ubmVjdG9yIGZvdW5kIGZvciBw aXBlICVzXG4iLAo+ID4gPiArICAgICAgICAgICAgICAgICBrbXN0ZXN0X3BpcGVfbmFtZShwaXBl KSk7Cj4gPiA+ICsKPiA+ID4gKyAgIGlndF9kaXNwbGF5X3Jlc2V0KCZkaXNwbGF5KTsKPiA+ID4g KyAgIGlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBwaXBlKTsKPiA+ID4gKwo+ID4gPiArICAg bW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKPiA+ID4gKyAgIHBpcGVfY3JjID0g aWd0X3BpcGVfY3JjX25ldyhpbXBvcnRlciwgcGlwZSwKPiA+ID4gSU5URUxfUElQRV9DUkNfU09V UkNFX0FVVE8pOwo+ID4gPiArCj4gPiA+ICsgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShj b2xvcnMpOyBpKyspIHsKPiA+ID4gKyAgICAgICAgICAgcHJlcGFyZV9zY3JhdGNoKGV4cG9ydGVy LCAmc2NyYXRjaCwgbW9kZSwKPiA+ID4gY29sb3JzW2ldLmNvbG9yKTsKPiA+ID4gKyAgICAgICAg ICAgZG1hYnVmX2ZkID0gcHJpbWVfaGFuZGxlX3RvX2ZkKGV4cG9ydGVyLAo+ID4gPiBzY3JhdGNo LmhhbmRsZSk7Cj4gPiA+ICsgICAgICAgICAgIGdlbV9jbG9zZShleHBvcnRlciwgc2NyYXRjaC5o YW5kbGUpOwo+ID4gPiArCj4gPiA+ICsgICAgICAgICAgIHByZXBhcmVfZmIoaW1wb3J0ZXIsICZz Y3JhdGNoLCAmZmIpOwo+ID4gPiArICAgICAgICAgICBpbXBvcnRfZmIoaW1wb3J0ZXIsICZmYiwg ZG1hYnVmX2ZkLCBzY3JhdGNoLnBpdGNoKTsKPiA+ID4gKyAgICAgICAgICAgY2xvc2UoZG1hYnVm X2ZkKTsKPiA+ID4gKwo+ID4gPiArICAgICAgICAgICBzZXRfZmIoJmZiLCAmZGlzcGxheSwgb3V0 cHV0KTsKPiA+ID4gKyAgICAgICAgICAgaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKHBpcGVfY3Jj LAo+ID4gPiAmY29sb3JzW2ldLnByaW1lX2NyYyk7Cj4gPiA+ICsgICAgICAgICAgIGNvbG9yc1tp XS5wcmltZV9zdHIgPQo+ID4gPiBpZ3RfY3JjX3RvX3N0cmluZygmY29sb3JzW2ldLnByaW1lX2Ny Yyk7Cj4gPiA+ICsgICAgICAgICAgIGlndF9kZWJ1ZygiUHJpbWUgQ1JDIGZvciAlIzA4eCBpcyAl c1xuIiwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1tpXS5jb2xvciwgY29sb3Jz W2ldLnByaW1lX3N0cik7Cj4gPiA+ICsgICAgICAgICAgIGlndF9yZW1vdmVfZmIoaW1wb3J0ZXIs ICZmYik7Cj4gPiA+ICsKPiA+ID4gKyAgICAgICAgICAgaWd0X2NyZWF0ZV9jb2xvcl9mYihpbXBv cnRlciwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlLT5oZGlzcGxh eSwgbW9kZS0+dmRpc3BsYXksCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RFJNX0ZPUk1BVF9YUkdCODg4OCwKPiA+ID4gTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbaV0uciwgY29sb3JzW2ld LmcsCj4gPiA+IGNvbG9yc1tpXS5iLAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZmYik7Cj4gPiA+ICsKPiA+ID4gKyAgICAgICAgICAgc2V0X2ZiKCZmYiwgJmRpc3BsYXks IG91dHB1dCk7Cj4gPiA+ICsgICAgICAgICAgIGlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhwaXBl X2NyYywKPiA+ID4gJmNvbG9yc1tpXS5kaXJlY3RfY3JjKTsKPiA+ID4gKyAgICAgICAgICAgY29s b3JzW2ldLmRpcmVjdF9zdHIgPQo+ID4gPiBpZ3RfY3JjX3RvX3N0cmluZygmY29sb3JzW2ldLmRp cmVjdF9jcmMpOwo+ID4gPiArICAgICAgICAgICBpZ3RfZGVidWcoIkRpcmVjdCBDUkMgZm9yICUj MDh4IGlzICVzXG4iLAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgY29sb3JzW2ldLmNvbG9y LCBjb2xvcnNbaV0uZGlyZWN0X3N0cik7Cj4gPiA+ICsgICAgICAgICAgIGlndF9yZW1vdmVfZmIo aW1wb3J0ZXIsICZmYik7Cj4gPiA+ICsgICB9Cj4gPiA+ICsgICBpZ3RfcGlwZV9jcmNfZnJlZShw aXBlX2NyYyk7Cj4gPiA+ICsKPiA+ID4gKyAgIGlndF9kZWJ1ZygiQ1JDIHRhYmxlOlxuIik7Cj4g PiA+ICsgICBpZ3RfZGVidWcoIkNvbG9yXHRcdFByaW1lXHRcdERpcmVjdFxuIik7Cj4gPiA+ICsg ICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb2xvcnMpOyBpKyspIHsKPiA+ID4gKyAgICAg ICAgICAgaWd0X2RlYnVnKCIlIzA4eFx0JS44c1x0JS44c1xuIiwgY29sb3JzW2ldLmNvbG9yLAo+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgY29sb3JzW2ldLnByaW1lX3N0ciwgY29sb3JzW2ld LmRpcmVjdF9zdHIpOwo+ID4gPiArICAgfQo+ID4gPiArCj4gPiA+ICsgICBmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShjb2xvcnMpOyBpKyspIHsKPiA+ID4gKyAgICAgICAgICAgZm9yIChqID0g MDsgaiA8IEFSUkFZX1NJWkUoY29sb3JzKTsgaisrKSB7Cj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgaWYgKGkgPT0gaikgewo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgaWd0X2Fz c2VydF9jcmNfZXF1YWwoJmNvbG9yc1tpXS5wcmltZV9jCj4gPiA+IHJjLAo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbG9yc1tqXS5kaXJl Y3RfCj4gPiA+IGNyYyk7Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyY19lcXVhbCA9Cj4gPiA+IGlndF9jaGVja19j cmNfZXF1YWwoJmNvbG9yc1tpXS5wcmltZV9jcmMsCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb2xvcnMKPiA+ID4gW2pd LmRpcmVjdF9jcmMpOwo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgaWd0X2Fzc2Vy dF9mKCFjcmNfZXF1YWwsICJDUkMgc2hvdWxkIGJlCj4gPiA+IGRpZmZlcmVudCIpOwo+ID4gPiAr ICAgICAgICAgICAgICAgICAgIH0KPiA+ID4gKyAgICAgICAgICAgfQo+ID4gPiArICAgfQo+ID4g PiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZCBydW5fdGVzdF9jcmMoaW50IGV4cG9ydF9j aGlwc2V0LCBpbnQgaW1wb3J0X2NoaXBzZXQpCj4gPiA+ICt7Cj4gPiA+ICsgICBpbnQgaW1wb3J0 ZXIgPSAtMTsKPiA+ID4gKyAgIGludCBleHBvcnRlciA9IC0xOwo+ID4gPiArCj4gPiA+ICsgICBl eHBvcnRlciA9IGRybV9vcGVuX2RyaXZlcihleHBvcnRfY2hpcHNldCk7Cj4gPiA+ICsgICBpbXBv cnRlciA9IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIoaW1wb3J0X2NoaXBzZXQpOwo+ID4gPiArCj4g PiA+ICsgICBpZ3RfcmVxdWlyZShoYXNfcHJpbWVfZXhwb3J0KGV4cG9ydGVyKSk7Cj4gPiA+ICsg ICBpZ3RfcmVxdWlyZShoYXNfcHJpbWVfaW1wb3J0KGltcG9ydGVyKSk7Cj4gPiA+ICsgICBpZ3Rf cmVxdWlyZV9waXBlX2NyYyhpbXBvcnRlcik7Cj4gPiA+ICsKPiA+ID4gKyAgIHRlc3RfY3JjKGV4 cG9ydGVyLCBpbXBvcnRlcik7Cj4gPiA+ICsgICBjbG9zZShpbXBvcnRlcik7Cj4gPiA+ICsgICBj bG9zZShleHBvcnRlcik7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK2lndF9tYWluCj4gPiA+ICt7 Cj4gPiA+ICsgICBpZ3RfZml4dHVyZSB7Cj4gPiA+ICsgICAgICAgICAgIGttc3Rlc3Rfc2V0X3Z0 X2dyYXBoaWNzX21vZGUoKTsKPiA+ID4gKyAgIH0KPiA+ID4gKyAgIGlndF9zdWJ0ZXN0KCJjcmMt dmdlbS12a21zIikKPiA+ID4gKyAgICAgICAgICAgcnVuX3Rlc3RfY3JjKERSSVZFUl9WR0VNLCBE UklWRVJfVktNUyk7Cj4gPiA+ICsgICBpZ3Rfc3VidGVzdCgiY3JjLWk5MTUtdmttcyIpCj4gPiA+ ICsgICAgICAgICAgIHJ1bl90ZXN0X2NyYyhEUklWRVJfSU5URUwsIERSSVZFUl9WS01TKTsKPiA+ ID4gKyAgIGlndF9zdWJ0ZXN0KCJjcmMtdmdlbS1pOTE1IikKPiA+ID4gKyAgICAgICAgICAgcnVu X3Rlc3RfY3JjKERSSVZFUl9WR0VNLCBEUklWRVJfSU5URUwpOwo+ID4gPiArICAgaWd0X3N1YnRl c3QoImNyYy1hbWQtaTkxNSIpCj4gPiA+ICsgICAgICAgICAgIHJ1bl90ZXN0X2NyYyhEUklWRVJf QU1ER1BVLCBEUklWRVJfSU5URUwpOwo+ID4gPiArICAgaWd0X3N1YnRlc3QoImNyYy1pOTE1LWFt ZCIpCj4gPiA+ICsgICAgICAgICAgIHJ1bl90ZXN0X2NyYyhEUklWRVJfSU5URUwsIERSSVZFUl9B TURHUFUpOwo+ID4KPiA+IFRoaXMgaXNuJ3QgYW55IG1vcmUgZ2VuZXJpYyB0aGFuIHdoYXQgd2Ug aGF2ZSBlLmcuIGluIHByaW1lX3ZnZW0KPiA+IGFscmVhZHkuCj4KPiBIZXJlIG5vbi1nZW5lcmlj IHBhcnQgaXMgb25seSB0aG9zZSAxMCBsaW5lcyBvZiBzdWJ0ZXN0cyBkZWZpbml0aW9ucy4KPiBU aGUgcmVzdCBpcyBjb21tb24gY29kZS4KPgo+IEkgZ3Vlc3MsIHRoaXMgc2VwYXJhdGUgc3VidGVz dCBkZWZpbml0aW9ucyBjYW4gZG9jdW1lbnQgdGhlIGRldmljZQo+IHBhaXJzIHRoZSB0ZXN0IGlz IGV4cGVjdGVkIHRvIHdvcmsgKyB3ZSBjYW4gYmxhY2tsaXN0IHRlc3RzIHdoaWNoIHdlCj4gZG9u J3QgaGF2ZSB0aGUgaGFyZHdhcmUgZm9yLgoKQnV0IHdlIGFscmVhZHkgaGF2ZSB0ZXN0cyBmb3Ig c3BlY2lmaWMgcGFpcnMsIHdoaWNoIGNhbiBhbHNvIHRlc3QKc3BlY2lmaWMgc3R1ZmYuIEluIGdl bmVyYWwgd2UgZG9uJ3QgZG8gdGVzdHMgd2l0aCAtZ2VuOSwgZ2VuMTEsIC1nZW44CnByZWZpeGVz IGVpdGhlci4gVGhpcyBoZXJlIHdvdWxkIGJlIGEgZmlyc3QgSSdkIHNheS4KCj4gPiBUaGUgd2F5 IHRvIGRvIGEgZ2VuZXJpYyBrbXMgdGVzdGNhc2UgaXMgdG8gdXNlIERSSVZFUl9BTlkgKHllcyBz b21lCj4gPiBvZiB0aGUKPiA+IGVhcmxpZXIgY29udmVyc2lvbiB1bmZvcnR1bmF0ZWx5IHVzZWQg c3R1ZmYgbGlrZSBEUklWRVJfSU5URUwgfAo+ID4gRFJJVkVSX0FNREdQVSkuIFdpdGggdGhhdCB5 b3UgYWxzbyBkb24ndCBuZWVkIHlvdXIgbGlicmFyeSBwcmVwCj4gPiBwYXRjaCwKPiA+IGJlY2F1 c2Ugbm8gbmVlZCBmb3IgYSBEUklWRVJfVktNUy4KPgo+IEJ1dCBob3cgY2FuIHdlIG9wZW4gdHdv IGRpZmZlcmVudCBkZXZpY2VzIHdpdGggRFJJVkVSX0FOWT8gSWYgSSBwdXQKPgo+IGZkID0gZHJt X29wZW5fZHJpdmVyKERSSVZFUl9BTlkpCj4gZmQyID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9B TlkpCj4KPiBJIGdldCB0aGUgc2FtZSBkZXZpY2Ugb3BlbmVkIHR3byB0aW1lcywgZG8gST8KCk9u ZSBvZiB0aGVtIHdvdWxkIGJlIERSSVZFUl9WR0VNLiBBbmQgSSB0aGluayB3ZSBhbHJlYWR5IG1h a2Ugc3VyZQp0aGF0IHlvdSBkb24ndCBhY2NpZGVudGFsbHkgZ2V0IHZnZW0gZm9yIERSSVZFUl9B TlkuIE90aGVyd2lzZSBJIGd1ZXNzCndlJ2QgbmVlZCBhIERSSVZFUl9BTllfQlVUX1ZHRU0uIFdl bGwgcmVhbGx5IHdoYXQgd2Ugd2FudCBpcwpEUklWRVJfQU5ZX0tNUyBoZXJlLCB3aGljaCB3b3Vs ZCBhbHNvIGV4Y2x1ZGUgdmdlbS4gU28gaWYgaXQgZG9lc24ndAp3b3JrIGFscmVhZHksIHNtYWxs IHBhdGNoIG5lZWRlZCBpbiBsaWIvLCBidXQgRFJJVkVSX1ZLTVMgYWxzbyBuZWVkcwp0aGF0LiBB bmQgSSByZWFsbHkgZG9uJ3Qgd2FudCBtb3JlIERSSVZFUl9GT08gZGVmaW5lcyBmb3IgYSBwbGFp biBvbGQKa21zLW9ubHkgZHJpdmVyLiBrbXMgaXMgc3VwcG9zZWQgdG8gYmUgYSBzaGFyZWQgY3Jv c3MtZHJpdmVyIHN0YW5kYXJkLAppZiB3ZSBjYW4ndCBldmVuIHdyaXRlIHNoYXJlZCB0ZXN0Y2Fz ZXMgaXQncyBqdXN0IGVwaWMgZmFpbCA6LSkKCj4gPiBJbW8gYmVzdCB0byBzdGFydCBvdXQgYnkg Y29udmVydGluZyBwcmltZV92Z2VtLmMgZm9yIHRoaXMsIGFuZCBhZGRpbmcKPiA+IGZvcgo+ID4g dGhlIGk5MTUgc3BlY2lmaWMgdGVzdHMgKGJ1dCBfb25seV8gZm9yIHRob3NlKSBhIHNwZWNpZmlj ICJpcyB0aGlzCj4gPiBpOTE1Igo+ID4gY2hlY2ssIHNvIHdlIHNraXAgdGhvc2UgdGVzdHMuIEFu ZCByZXBsYWNlIERSSVZFUl9JTlRFTCBieQo+ID4gRFJJVkVSX0FOWS4KPiA+IFdlbGwsIGFueXRo aW5nIGV4Y2VwdCB2Z2VtIDotKQo+Cj4gSWYgSSBhbSBub3QgbWlzdGFrZW4sIGFsbCB0ZXN0cyBp biBwcmltZV92Z2VtIGFyZSBpbnRlbC1zcGVjaWZpYyA6RAo+Cj4gU29tZSBpZGVhcyBjYW4gYmUg dGFrZW4gZnJvbSBpdCwgYnV0IGFueXdheSwgaXQgcHJvYmFibHkgbmVlZHMgYSBkZWVwCj4gcmV3 cml0ZS4KPgo+IEFuZCBwcmltZV92Z2VtIHVzZSBvbmx5IHZnZW0gYXMgYW4gZXhwb3J0ZXIgZGV2 aWNlLiBIZXJlIHdlIGNhbiB1c2UgYW55Cj4gZGV2aWNlLiBTdXJlLCBzb21lIHRlc3RzIHdvdWxk IGV2ZW50dWFsbHkgdXNlIHZnZW0tc3BlY2lmaWMgZmVhdHVyZXMsCj4gYnV0IHNvbWUgY291bGQg cmVtYWluIG1vcmUgZ2VuZXJpYy4KCk1heWJlIEkgd2Fzbid0IGFsbCB0aGF0IGNsZWFyIHRoZW4s IEkgdGhpbmsgd2hhdCB3ZSB3YW50IHRvIHRlc3QgaW4gYQpnZW5lcmljIHByaW1lIHRlc3QgaXMg dmdlbStEUklWRVJfQU5ZX0tNUy4gVGhlbiBkcml2ZXJzIGNhbiB0ZXN0IHRoZQpyZW5kZXIgc2lk ZSB1c2luZyBEUklWRVJfRk9PK3ZnZW0uIFRoaXMgd2F5IHlvdSBvbmx5IG5lZWQgdG8gaGF2ZSAx CmdlbmVyaWMga21zIHRlc3QsIHBsdXMgTiB0ZXN0cyBmb3IgYWxsIHRoZSByZW5kZXJpbmcgZHJp dmVycy4gSW5zdGVhZApvZiBNIHggTiB0ZXN0Y2FzZXMgbGlrZSB5b3UncmUgcHJvcG9zaW5nIGhl cmUuIHZnZW0gaXMganVzdCB0aGUKYWJzdHJhY3Rpb24gbGF5ZXIvbW9ja2luZyBsYXllciB3ZSB1 c2UgdG8gc2VwYXJhdGUgdGhlc2UgdHdvIHdvcmxkcy4KQW5kIG9mIGNvdXJzZSBmb3Igc3BlY2lm aWMgc2hhcmluZyB5b3UgY2FuIHN0aWxsIGRvIHRoYXQsIGUuZy4gdG8gdGVzdApkbWEgZW5naW5l IGNvbXBhdGliaWxpdHkgYmV0d2VlbiBhbWRncHUgYW5kIGk5MTUsIG9yIG5vdXZlYXUgYW5kIGk5 MTUuCkJ1dCB0aG9zZSB0ZXN0cyBkb24ndCBuZWVkIHRvIGludm9sdmUga21zLgoKQW5kIHllYWgg cHJpbWVfdmdlbSBtaWdodCBuZWVkIHRvIGJlIHNwbGl0IGludG8gcHJpbWVfaTkxNV92Z2VtIGFu ZApwcmltZV9rbXNfdmdlbS4gQnV0IGFsbCB0aGUgZGlzcGxheSByZWxhdGVkIHRlc3RjYXNlcyBz aG91bGQgYmUKcG9zc2libGUgdG8gZXh0cmFjdCBpbnRvIHN1Y2ggYSBwcmltZV9rbXNfdmdlbSBm cmFtZXdvcmsuCi1EYW5pZWwKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIElu dGVsIENvcnBvcmF0aW9uCis0MSAoMCkgNzkgMzY1IDU3IDQ4IC0gaHR0cDovL2Jsb2cuZmZ3bGwu Y2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRl diBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2