From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: Re: [PATCH i-g-t v2] tests/kms_concurrent: Concurrent and interruptible subtests for atomic Date: Wed, 29 Mar 2017 11:53:54 +0200 Message-ID: References: <1489567424-29474-1-git-send-email-mika.kahola@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6F9356E70C for ; Wed, 29 Mar 2017 09:53:59 +0000 (UTC) In-Reply-To: <1489567424-29474-1-git-send-email-mika.kahola@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Mika Kahola , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T3AgMTUtMDMtMTcgb20gMDk6NDMgc2NocmVlZiBNaWthIEthaG9sYToKPiBUaGlzIHRlc3QgY2Fz ZSBpbnRyb2R1Y2VzIGNvbmN1cnJlbnRseSBydW5uaW5nIHRlc3QgY2FzZXMgZm9yIGF0b21pYwo+ IG1vZGVzZXR0aW5nLgo+Cj4gVGhlIGZpcnN0IHRlc3Qgb3IgdGhyZWFkIGRyYXdzIGJsdWUgYmFj a3JvdW5kIHdpdGggYmxhY2sgaG9sZXMgb24gaXQuCj4gVGhlc2UgaG9sZXMgYXJlIGNvdmVyZWQg YnkgcmVjdGFuZ3VsYXIsIGJsdWUgcGxhbmVzIHRoYXQgYXJlIHBsYWNlZAo+IHJhbmRvbWx5IGxp a2UgaW4gdGVzdCBjYXNlICdrbXNfcGxhbmVfbXVsdGlwbGUnLgo+Cj4gVGhlIHNlY29uZCB0aHJl YWQgY2hhbmdlcyByZXNvbHV0aW9uIGZyb20gaGlnaGVyIHRvIGxvd2VyIG9uZSBhbmQgYmFjay4K PiBUaGUgZGVsYXkgYmV0d2VlbiByZXNvbHV0aW9uIGNoYW5nZXMgaXMgcmFuZG9tbHkgc2VsZWN0 ZWQgYmV0d2VlbiAyMCBhbmQKPiA1MCBtaWxsaXNlY29uZHMuCj4KPiBUaGUgdGVzdCBydW5zIGJ5 IGRlZmF1bHQgMzIgaXRlcmF0aW9ucyB0byBpbmNyZWFzZSB0aGUgY292ZXJhZ2UuCj4KPiB2Mjog dXNlIGlndF9mb3JrIGluc3RlYWQgb2YgcHRocmVhZHMgdG8gY3JlYXRlIGNvbmN1cnJlbnQgdGVz dCBydW5zIChNYWFydGVuKQo+Cj4gU2lnbmVkLW9mZi1ieTogTWlrYSBLYWhvbGEgPG1pa2Eua2Fo b2xhQGludGVsLmNvbT4KPiAtLS0KPiAgdGVzdHMvTWFrZWZpbGUuc291cmNlcyB8ICAgMSArCj4g IHRlc3RzL2ttc19jb25jdXJyZW50LmMgfCA2MzAgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwo+ICAyIGZpbGVzIGNoYW5nZWQsIDYzMSBpbnNlcnRpb25z KCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9rbXNfY29uY3VycmVudC5jCj4KPiA8c25p cD4KPiArc3RhdGljIGludAo+ICtkaXNwbGF5X2NvbW1pdF9tb2RlKGRhdGFfdCAqZGF0YSwgaWd0 X2NyY190ICpjcmMpCj4gK3sKPiArCWNoYXIgYnVmWzI1Nl07Cj4gKwlzdHJ1Y3QgZHJtX2V2ZW50 ICplID0gKHZvaWQgKilidWY7Cj4gKwlpbnQgbiwgcmV0Owo+ICsJaW50IGZsYWdzID0gRFJNX01P REVfUEFHRV9GTElQX0VWRU5UIHwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQgfCBEUk1f TU9ERV9BVE9NSUNfTk9OQkxPQ0s7Cj4gKwo+ICsJcmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1p dF9hdG9taWMoJmRhdGEtPmRpc3BsYXksCj4gKwkJCQkJICAgIGZsYWdzLAo+ICsJCQkJCSAgICBO VUxMKTsKPiArCWlndF9za2lwX29uKHJldCAhPSAwKTsKPiArCj4gKwlpZ3Rfc2V0X3RpbWVvdXQo MSwgIlN0dWNrIG9uIHBhZ2UgZmxpcCIpOwo+ICsJcmV0ID0gcmVhZChkYXRhLT5kaXNwbGF5LmRy bV9mZCwgYnVmLCBzaXplb2YoYnVmKSk7Cj4gKwlpZ3RfYXNzZXJ0KHJldCA+PSAwKTsKPiArCj4g KwlpZ3RfYXNzZXJ0X2VxKGUtPnR5cGUsIERSTV9FVkVOVF9GTElQX0NPTVBMRVRFKTsKPiArCWln dF9yZXNldF90aW1lb3V0KCk7Cj4gKwo+ICsJcmV0dXJuIG47Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkCj4gK3Rlc3RfZ3JhYl9jcmMoZGF0YV90ICpkYXRhLCBjb2xvcl90ICpjb2xvciwgaWd0X2Ny Y190ICpjcmMgLyogb3V0ICovKQo+ICt7Cj4gKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7Cj4gKwlp Z3RfcGxhbmVfdCAqcHJpbWFyeTsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWd0X291dHB1dF9zZXRf cGlwZShkYXRhLT5vdXRwdXQsIGRhdGEtPnBpcGUpOwo+ICsKPiArCXByaW1hcnkgPSBpZ3Rfb3V0 cHV0X2dldF9wbGFuZV90eXBlKGRhdGEtPm91dHB1dCwgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7 Cj4gKwlkYXRhLT5wbGFuZVtwcmltYXJ5LT5pbmRleF0gPSBwcmltYXJ5Owo+ICsKPiArCW1vZGUg PSBpZ3Rfb3V0cHV0X2dldF9tb2RlKGRhdGEtPm91dHB1dCk7Cj4gKwo+ICsJaWd0X2NyZWF0ZV9j b2xvcl9mYihkYXRhLT5kcm1fZmQsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKPiAr CQkJICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCj4gKwkJCSAgICBMT0NBTF9JOTE1X0ZPUk1BVF9N T0RfWF9USUxFRCwKPiArCQkJICAgIGNvbG9yLT5yZWQsIGNvbG9yLT5ncmVlbiwgY29sb3ItPmJs dWUsCj4gKwkJCSAgICAmZGF0YS0+ZmJbcHJpbWFyeS0+aW5kZXhdKTsKPiArCj4gKwlpZ3RfcGxh bmVfc2V0X2ZiKGRhdGEtPnBsYW5lW3ByaW1hcnktPmluZGV4XSwgJmRhdGEtPmZiW3ByaW1hcnkt PmluZGV4XSk7Cj4gKwo+ICsJcmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIoJmRhdGEtPmRp c3BsYXksIENPTU1JVF9BVE9NSUMpOwo+ICsJaWd0X3NraXBfb24ocmV0ICE9IDApOwo+ICt9Cj4g Kwo+ICsvKgo+ICsgKiBNdWx0aXBsZSBwbGFuZSBwb3NpdGlvbiB0ZXN0Lgo+ICsgKiAgIC0gV2Ug c3RhcnQgYnkgZ3JhYmJpbmcgYSByZWZlcmVuY2UgQ1JDIG9mIGEgZnVsbCBibHVlIGZiIGJlaW5n IHNjYW5uZWQKPiArICogICAgIG91dCBvbiB0aGUgcHJpbWFyeSBwbGFuZQo+ICsgKiAgIC0gVGhl biB3ZSBzY2Fubm91dCBudW1iZXIgb2YgcGxhbmVzOgo+ICsgKiAgICAgICogdGhlIHByaW1hcnkg cGxhbmUgdXNlcyBhIGJsdWUgZmIgd2l0aCBhIGJsYWNrIHJlY3RhbmdsZSBob2xlCj4gKyAqICAg ICAgKiBwbGFuZXMsIG9uIHRvcCBvZiB0aGUgcHJpbWFyeSBwbGFuZSwgd2l0aCBhIGJsdWUgZmIg dGhhdCBpcyBzZXQtdXAKPiArICogICAgICAgIHRvIGNvdmVyIHRoZSBibGFjayByZWN0YW5nbGVz IG9mIHRoZSBwcmltYXJ5IHBsYW5lIGZiCj4gKyAqICAgICBUaGUgcmVzdWx0aW5nIENSQyBzaG91 bGQgYmUgaWRlbnRpY2FsIHRvIHRoZSByZWZlcmVuY2UgQ1JDCj4gKyAqLwo+ICsKPiArc3RhdGlj IHZvaWQKPiArY3JlYXRlX2ZiX2Zvcl9tb2RlX3Bvc2l0aW9uKGRhdGFfdCAqZGF0YSwgZHJtTW9k ZU1vZGVJbmZvICptb2RlLAo+ICsJCQkgICAgY29sb3JfdCAqY29sb3IsIGludCAqcmVjdF94LCBp bnQgKnJlY3RfeSwKPiArCQkJICAgIGludCAqcmVjdF93LCBpbnQgKnJlY3RfaCwgdWludDY0X3Qg dGlsaW5nLAo+ICsJCQkgICAgaW50IG1heF9wbGFuZXMpCj4gK3sKPiArCXVuc2lnbmVkIGludCBm Yl9pZDsKPiArCWNhaXJvX3QgKmNyOwo+ICsJaWd0X3BsYW5lX3QgKnByaW1hcnk7Cj4gKwo+ICsJ cHJpbWFyeSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lX3R5cGUoZGF0YS0+b3V0cHV0LCBEUk1fUExB TkVfVFlQRV9QUklNQVJZKTsKPiArCj4gKwlmYl9pZCA9IGlndF9jcmVhdGVfZmIoZGF0YS0+ZHJt X2ZkLAo+ICsJCQkgICAgICBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4gKwkJCSAg ICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCj4gKwkJCSAgICAgIHRpbGluZywKPiArCQkJICAgICAg JmRhdGEtPmZiW3ByaW1hcnktPmluZGV4XSk7Cj4gKwlpZ3RfYXNzZXJ0KGZiX2lkKTsKPiArCj4g KwljciA9IGlndF9nZXRfY2Fpcm9fY3R4KGRhdGEtPmRybV9mZCwgJmRhdGEtPmZiW3ByaW1hcnkt PmluZGV4XSk7Cj4gKwlpZ3RfcGFpbnRfY29sb3IoY3IsIHJlY3RfeFswXSwgcmVjdF95WzBdLAo+ ICsJCQltb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4gKwkJCWNvbG9yLT5yZWQsIGNv bG9yLT5ncmVlbiwgY29sb3ItPmJsdWUpOwo+ICsKPiArCWZvciAoaW50IGkgPSAwOyBpIDwgbWF4 X3BsYW5lczsgaSsrKSB7Cj4gKwkJaWYgKGRhdGEtPnBsYW5lW2ldLT50eXBlID09IERSTV9QTEFO RV9UWVBFX1BSSU1BUlkpCj4gKwkJCWNvbnRpbnVlOwo+ICsJCWlndF9wYWludF9jb2xvcihjciwg cmVjdF94W2ldLCByZWN0X3lbaV0sCj4gKwkJCQlyZWN0X3dbaV0sIHJlY3RfaFtpXSwgMC4wLCAw LjAsIDAuMCk7Cj4gKwl9Cj4gKwo+ICsJaWd0X2Fzc2VydChjYWlyb19zdGF0dXMoY3IpID09IDAp Owo+ICsJY2Fpcm9fZGVzdHJveShjcik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3ByZXBh cmVfcGxhbmVzKGRhdGFfdCAqZGF0YSwgY29sb3JfdCAqY29sb3IsIGludCBtYXhfcGxhbmVzKQo+ ICt7Cj4gKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7Cj4gKwlpZ3RfcGlwZV90ICpwaXBlOwo+ICsJ aWd0X3BsYW5lX3QgKnByaW1hcnk7Cj4gKwlpbnQgKng7Cj4gKwlpbnQgKnk7Cj4gKwlpbnQgKnNp emU7Cj4gKwlpbnQgaTsKPiArCj4gKwlpZ3Rfb3V0cHV0X3NldF9waXBlKGRhdGEtPm91dHB1dCwg ZGF0YS0+cGlwZSk7Cj4gKwlwcmltYXJ5ID0gaWd0X291dHB1dF9nZXRfcGxhbmVfdHlwZShkYXRh LT5vdXRwdXQsIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOwo+ICsJcGlwZSA9IHByaW1hcnktPnBp cGU7Cj4gKwo+ICsJeCA9IG1hbGxvYyhwaXBlLT5uX3BsYW5lcyAqIHNpemVvZigqeCkpOwo+ICsJ aWd0X2Fzc2VydF9mKHgsICJGYWlsZWQgdG8gYWxsb2NhdGUgJWxkIGJ5dGVzIGZvciB2YXJpYWJs ZSB4XG4iLCAobG9uZyBpbnQpIChwaXBlLT5uX3BsYW5lcyAqIHNpemVvZigqeCkpKTsKPiArCXkg PSBtYWxsb2MocGlwZS0+bl9wbGFuZXMgKiBzaXplb2YoKnkpKTsKPiArCWlndF9hc3NlcnRfZih5 LCAiRmFpbGVkIHRvIGFsbG9jYXRlICVsZCBieXRlcyBmb3IgdmFyaWFibGUgeVxuIiwgKGxvbmcg aW50KSAocGlwZS0+bl9wbGFuZXMgKiBzaXplb2YoKnkpKSk7Cj4gKwlzaXplID0gbWFsbG9jKHBp cGUtPm5fcGxhbmVzICogc2l6ZW9mKCpzaXplKSk7Cj4gKwlpZ3RfYXNzZXJ0X2Yoc2l6ZSwgIkZh aWxlZCB0byBhbGxvY2F0ZSAlbGQgYnl0ZXMgZm9yIHZhcmlhYmxlIHNpemVcbiIsIChsb25nIGlu dCkgKHBpcGUtPm5fcGxhbmVzICogc2l6ZW9mKCpzaXplKSkpOwo+ICsKPiArCW1vZGUgPSBpZ3Rf b3V0cHV0X2dldF9tb2RlKGRhdGEtPm91dHB1dCk7Cj4gKwo+ICsJLyogcGxhbmVzIHdpdGggcmFu ZG9tIHBvc2l0aW9ucyAqLwo+ICsJeFtwcmltYXJ5LT5pbmRleF0gPSAwOwo+ICsJeVtwcmltYXJ5 LT5pbmRleF0gPSAwOwo+ICsJZm9yIChpID0gMDsgaSA8IG1heF9wbGFuZXM7IGkrKykgewo+ICsJ CWlndF9wbGFuZV90ICpwbGFuZSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKGRhdGEtPm91dHB1dCwg aSk7Cj4gKwo+ICsJCWlmIChwbGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKQo+ ICsJCQljb250aW51ZTsKPiArCQllbHNlIGlmIChwbGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQ RV9DVVJTT1IpCj4gKwkJCXNpemVbaV0gPSBTSVpFX0NVUlNPUjsKPiArCQllbHNlCj4gKwkJCXNp emVbaV0gPSBTSVpFX1BMQU5FOwo+ICsKPiArCQl4W2ldID0gcmFuZCgpICUgKG1vZGUtPmhkaXNw bGF5IC0gc2l6ZVtpXSk7Cj4gKwkJeVtpXSA9IHJhbmQoKSAlIChtb2RlLT52ZGlzcGxheSAtIHNp emVbaV0pOwo+ICsKPiArCQlkYXRhLT5wbGFuZVtpXSA9IHBsYW5lOwo+ICsKPiArCQlpZ3RfY3Jl YXRlX2NvbG9yX2ZiKGRhdGEtPmRybV9mZCwKPiArCQkJCSAgICBzaXplW2ldLCBzaXplW2ldLAo+ ICsJCQkJICAgIGRhdGEtPnBsYW5lW2ldLT50eXBlID09IERSTV9QTEFORV9UWVBFX0NVUlNPUiA/ IERSTV9GT1JNQVRfQVJHQjg4ODggOiBEUk1fRk9STUFUX1hSR0I4ODg4LAo+ICsJCQkJICAgIGRh dGEtPnBsYW5lW2ldLT50eXBlID09IERSTV9QTEFORV9UWVBFX0NVUlNPUiA/IExPQ0FMX0RSTV9G T1JNQVRfTU9EX05PTkUgOiBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKPiArCQkJCSAg ICBjb2xvci0+cmVkLCBjb2xvci0+Z3JlZW4sIGNvbG9yLT5ibHVlLAo+ICsJCQkJICAgICZkYXRh LT5mYltpXSk7Cj4gKwo+ICsJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24oZGF0YS0+cGxhbmVbaV0s IHhbaV0sIHlbaV0pOwo+ICsJCWlndF9wbGFuZV9zZXRfZmIoZGF0YS0+cGxhbmVbaV0sICZkYXRh LT5mYltpXSk7Cj4gKwl9Cj4gKwo+ICsJLyogcHJpbWFyeSBwbGFuZSAqLwo+ICsJZGF0YS0+cGxh bmVbcHJpbWFyeS0+aW5kZXhdID0gcHJpbWFyeTsKPiArCWNyZWF0ZV9mYl9mb3JfbW9kZV9wb3Np dGlvbihkYXRhLCBtb2RlLCBjb2xvciwgeCwgeSwgc2l6ZSwgc2l6ZSwKPiArCQkJCSAgICBMT0NB TF9JOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwgbWF4X3BsYW5lcyk7Cj4gKwlpZ3RfcGxhbmVfc2V0 X2ZiKGRhdGEtPnBsYW5lW3ByaW1hcnktPmluZGV4XSwgJmRhdGEtPmZiW3ByaW1hcnktPmluZGV4 XSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3Rlc3RfcGxhbmVfcG9zaXRpb25fd2l0aF9v dXRwdXQoZGF0YV90ICpkYXRhKQo+ICt7Cj4gKwlpZ3RfY3JjX3QgKmNyYzsKPiArCWNvbG9yX3Qg Ymx1ZSAgPSB7IDAuMGYsIDAuMGYsIDEuMGYgfTsKPiArCWludCBpOwo+ICsJaW50IGl0ZXJhdGlv bnMgPSBvcHQuaXRlcmF0aW9ucyA8IDEgPyAxIDogb3B0Lml0ZXJhdGlvbnM7Cj4gKwlib29sIGxv b3BfZm9yZXZlcjsKPiArCWNoYXIgaW5mb1syNTZdOwo+ICsJaW50IG1heF9wbGFuZXMgPSBkYXRh LT5kaXNwbGF5LnBpcGVzW2RhdGEtPnBpcGVdLm5fcGxhbmVzOwo+ICsKPiArCWlmIChvcHQuaXRl cmF0aW9ucyA9PSBMT09QX0ZPUkVWRVIpIHsKPiArCQlsb29wX2ZvcmV2ZXIgPSB0cnVlOwo+ICsJ CXNwcmludGYoaW5mbywgImZvcmV2ZXIiKTsKPiArCX0gZWxzZSB7Cj4gKwkJbG9vcF9mb3JldmVy ID0gZmFsc2U7Cj4gKwkJc3ByaW50ZihpbmZvLCAiZm9yICVkICVzIiwKPiArCQkJaXRlcmF0aW9u cywgaXRlcmF0aW9ucyA+IDEgPyAiaXRlcmF0aW9ucyIgOiAiaXRlcmF0aW9uIik7Cj4gKwl9Cj4g Kwo+ICsJaWd0X2luZm8oIlRlc3RpbmcgY29ubmVjdG9yICVzIHVzaW5nIHBpcGUgJXMgd2l0aCAl ZCBwbGFuZXMgJXMgd2l0aCBzZWVkICVkXG4iLAo+ICsJCSBpZ3Rfb3V0cHV0X25hbWUoZGF0YS0+ b3V0cHV0KSwga21zdGVzdF9waXBlX25hbWUoZGF0YS0+cGlwZSksIG1heF9wbGFuZXMsCj4gKwkJ IGluZm8sIG9wdC5zZWVkKTsKPiArCj4gKwlpID0gMDsKPiArCXdoaWxlIChpIDwgaXRlcmF0aW9u cyB8fCBsb29wX2ZvcmV2ZXIpIHsKPiArCQlwcmVwYXJlX3BsYW5lcyhkYXRhLCAmYmx1ZSwgbWF4 X3BsYW5lcyk7Cj4gKwo+ICsJCWRpc3BsYXlfY29tbWl0X21vZGUoZGF0YSwgY3JjKTsKPiArCj4g KwkJaSsrOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgZHJtTW9kZUNvbm5lY3RvciAqCj4gK2dl dF9jb25uZWN0b3JfY29ubmVjdGVkKGludCBkcm1fZmQpCj4gK3sKPiArCWRybU1vZGVSZXMgKnJl c291cmNlcyA9IGRybU1vZGVHZXRSZXNvdXJjZXMoZHJtX2ZkKTsKPiArCWRybU1vZGVDb25uZWN0 b3IgKmNvbm5lY3RvcjsKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCByZXNvdXJj ZXMtPmNvdW50X2Nvbm5lY3RvcnM7IGkrKykgewo+ICsJCWNvbm5lY3RvciA9IGRybU1vZGVHZXRD b25uZWN0b3IoZHJtX2ZkLAo+ICsJCQkJCQlyZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV0pOwo+ICsK PiArCQlpZiAoY29ubmVjdG9yLT5jb25uZWN0aW9uID09IERSTV9NT0RFX0NPTk5FQ1RFRCkKPiAr CQkJYnJlYWs7Cj4gKwo+ICsJCWRybU1vZGVGcmVlQ29ubmVjdG9yKGNvbm5lY3Rvcik7Cj4gKwkJ Y29ubmVjdG9yID0gTlVMTDsKPiArCX0KPiArCj4gKwlkcm1Nb2RlRnJlZVJlc291cmNlcyhyZXNv dXJjZXMpOwo+ICsKPiArCXJldHVybiBjb25uZWN0b3I7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg Z2V0X2NydGNfZm9yX2VuY29kZXIoZHJtTW9kZVJlcyAqcmVzb3VyY2VzLAo+ICsJCQkJZHJtTW9k ZUVuY29kZXIgKmVuY29kZXIpCj4gK3sKPiArCWludCBtYXNrLCBpZDsKPiArCWludCBpOwo+ICsJ Ym9vbCBmb3VuZDsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgcmVzb3VyY2VzLT5jb3VudF9jcnRj czsgaSsrKSB7Cj4gKwkJbWFzayA9IDEgPDwgaTsKPiArCQlpZCA9IHJlc291cmNlcy0+Y3J0Y3Nb aV07Cj4gKwo+ICsJCWZvdW5kID0gZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgJiBtYXNrOwo+ICsJ CWlmIChmb3VuZCkKPiArCQkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFmb3VuZCkKPiArCQly ZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlyZXR1cm4gaWQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg Z2V0X2NydGNfZm9yX2Nvbm5lY3RvcihpbnQgZHJtX2ZkLCBkcm1Nb2RlUmVzICpyZXNvdXJjZXMs Cj4gKwkJCQkgIGRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3RvcikKPiArewo+ICsJZHJtTW9kZUVu Y29kZXIgKmVuY29kZXI7Cj4gKwlpbnQgZW5jb2Rlcl9pZDsKPiArCWludCBjcnRjX2lkOwo+ICsJ aW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGNvbm5lY3Rvci0+Y291bnRfZW5jb2RlcnM7 IGkrKykgewo+ICsJCWVuY29kZXJfaWQgPSBjb25uZWN0b3ItPmVuY29kZXJzW2ldOwo+ICsJCWVu Y29kZXIgPSBkcm1Nb2RlR2V0RW5jb2Rlcihkcm1fZmQsIGVuY29kZXJfaWQpOwo+ICsKPiArCQlp ZiAoZW5jb2Rlcikgewo+ICsJCQljcnRjX2lkID0gZ2V0X2NydGNfZm9yX2VuY29kZXIocmVzb3Vy Y2VzLCBlbmNvZGVyKTsKPiArCj4gKwkJCWRybU1vZGVGcmVlRW5jb2RlcihlbmNvZGVyKTsKPiAr Cj4gKwkJCWlmIChjcnRjX2lkICE9IDApCj4gKwkJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwo+ ICsJaWYgKGNydGNfaWQgPT0gMCkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlyZXR1cm4g Y3J0Y19pZDsKPiArfQo+ICsKPiArc3RhdGljIGludCBnZXRfY3J0YyhpbnQgZHJtX2ZkKQo+ICt7 Cj4gKwlkcm1Nb2RlUmVzICpyZXNvdXJjZXM7Cj4gKwlkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0 b3I7Cj4gKwlkcm1Nb2RlRW5jb2RlciAqZW5jb2RlcjsKPiArCWludCBpLCBpZDsKPiArCj4gKwly ZXNvdXJjZXMgPSBkcm1Nb2RlR2V0UmVzb3VyY2VzKGRybV9mZCk7Cj4gKwljb25uZWN0b3IgPSBn ZXRfY29ubmVjdG9yX2Nvbm5lY3RlZChkcm1fZmQpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBy ZXNvdXJjZXMtPmNvdW50X2VuY29kZXJzOyBpKyspIHsKPiArCQllbmNvZGVyID0gZHJtTW9kZUdl dEVuY29kZXIoZHJtX2ZkLCByZXNvdXJjZXMtPmVuY29kZXJzW2ldKTsKPiArCj4gKwkJaWYgKGVu Y29kZXItPmVuY29kZXJfaWQgPT0gY29ubmVjdG9yLT5lbmNvZGVyX2lkKQo+ICsJCQlicmVhazsK PiArCj4gKwkJZHJtTW9kZUZyZWVFbmNvZGVyKGVuY29kZXIpOwo+ICsJCWVuY29kZXIgPSBOVUxM Owo+ICsJfQo+ICsKPiArCWlmIChlbmNvZGVyKQo+ICsJCXJldHVybiBlbmNvZGVyLT5jcnRjX2lk Owo+ICsKPiArCWlkID0gZ2V0X2NydGNfZm9yX2Nvbm5lY3Rvcihkcm1fZmQsIHJlc291cmNlcywg Y29ubmVjdG9yKTsKPiArCWlndF9hc3NlcnQoaWQgIT0gMCk7Cj4gKwo+ICsJcmV0dXJuIGlkOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgZHJtTW9kZU1vZGVJbmZvICoKPiArZ2V0X2xvd3Jlc19tb2RlKGRh dGFfdCAqZGF0YSwgZHJtTW9kZU1vZGVJbmZvICptb2RlX2RlZmF1bHQpCj4gK3sKPiArCWRybU1v ZGVSZXMgKnJlc291cmNlcyA9IGRybU1vZGVHZXRSZXNvdXJjZXMoZGF0YS0+ZHJtX2ZkKTsKPiAr CWRybU1vZGVNb2RlSW5mbyBzdGRfMTAyNF9tb2RlID0gewo+ICsJCS5jbG9jayA9IDY1MDAwLAo+ ICsJCS5oZGlzcGxheSA9IDEwMjQsCj4gKwkJLmhzeW5jX3N0YXJ0ID0gMTA0OCwKPiArCQkuaHN5 bmNfZW5kID0gMTE4NCwKPiArCQkuaHRvdGFsID0gMTM0NCwKPiArCQkuaHNrZXcgPSAwLAo+ICsJ CS52ZGlzcGxheSA9IDc2OCwKPiArCQkudnN5bmNfc3RhcnQgPSA3NzEsCj4gKwkJLnZzeW5jX2Vu ZCA9IDc3NywKPiArCQkudnRvdGFsID0gODA2LAo+ICsJCS52c2NhbiA9IDAsCj4gKwkJLnZyZWZy ZXNoID0gNjAsCj4gKwkJLmZsYWdzID0gMHhBLAo+ICsJCS50eXBlID0gMHg0MCwKPiArCQkubmFt ZSA9ICJDdXN0b20gMTAyNHg3NjgiLAo+ICsJfTsKPiArCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsK PiArCWRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3RvcjsKPiArCWJvb2wgZm91bmQ7Cj4gKwlpbnQg bGltaXQgPSBtb2RlX2RlZmF1bHQtPnZkaXNwbGF5LVNJWkVfUExBTkU7Cj4gKwlpbnQgaSwgajsK PiArCj4gKwlpZiAoIXJlc291cmNlcykgewo+ICsJCWlndF93YXJuKCJkcm1Nb2RlR2V0UmVzb3Vy Y2VzIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Cj4gKwkJcmV0dXJuIG1vZGU7Cj4g Kwl9Cj4gKwo+ICsJZm91bmQgPSBmYWxzZTsKPiArCWZvciAoaSA9IDA7IGkgPCByZXNvdXJjZXMt PmNvdW50X2Nvbm5lY3RvcnM7IGkrKykgewo+ICsKPiArCQljb25uZWN0b3IgPSBkcm1Nb2RlR2V0 Q29ubmVjdG9yQ3VycmVudChkYXRhLT5kcm1fZmQsCj4gKwkJCQkJCSAgICAgICByZXNvdXJjZXMt PmNvbm5lY3RvcnNbaV0pOwo+ICsKPiArCQlpZiAoIWNvbm5lY3Rvcikgewo+ICsJCQlpZ3Rfd2Fy bigiY291bGQgbm90IGdldCBjb25uZWN0b3IgJWk6ICVzXG4iLAo+ICsJCQkJIHJlc291cmNlcy0+ Y29ubmVjdG9yc1tpXSwgc3RyZXJyb3IoZXJybm8pKTsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ ICsKPiArCQlpZiAoIWNvbm5lY3Rvci0+Y291bnRfbW9kZXMpCj4gKwkJCWNvbnRpbnVlOwo+ICsK PiArCQlmb3IgKGogPSAwOyBqIDwgY29ubmVjdG9yLT5jb3VudF9tb2RlczsgaisrKSB7Cj4gKwkJ CW1vZGUgPSAmY29ubmVjdG9yLT5tb2Rlc1tqXTsKPiArCj4gKwkJCWlmIChtb2RlLT52ZGlzcGxh eSA8IGxpbWl0KSB7Cj4gKwkJCQlmb3VuZCA9IHRydWU7Cj4gKwkJCQlicmVhazsKPiArCQkJfQo+ ICsJCX0KPiArCj4gKwkJZHJtTW9kZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yKTsKPiArCX0KPiAr Cj4gKwlkcm1Nb2RlRnJlZVJlc291cmNlcyhyZXNvdXJjZXMpOwo+ICsKPiArCWlmICghZm91bmQp Cj4gKwkJbW9kZSA9ICZzdGRfMTAyNF9tb2RlOwo+ICsKPiArCXJldHVybiBtb2RlOwo+ICt9CgpT dGlsbCBub3QgY29tcGxldGVseSBoYXBweSBhYm91dCB0aGlzIHBhcnQuCgpJIHdvdWxkIGxvb2sg YXQgZGF0YS0+b3V0cHV0LT5jb25maWcuY29ubmVjdG9yIGZvciBtb2RlcywgYW5kIHJldHVybiAx MDI0IG1vZGUgaWYgbm90aGluZydzIGZvdW5kLgoKU2F2ZXMgYSB3aG9sZSBsb3Qgb2YgZHJtIGNh bGxzLgoKPiArc3RhdGljIHZvaWQKPiArdGVzdF9yZXNvbHV0aW9uX3dpdGhfb3V0cHV0KGRhdGFf dCAqZGF0YSkKPiArewo+ICsJZHJtTW9kZU1vZGVJbmZvICptb2RlX2hpLCAqbW9kZV9sbzsKPiAr CWludCByZXQ7Cj4gKwlpbnQgaXRlcmF0aW9ucyA9IG9wdC5pdGVyYXRpb25zIDwgMSA/IDEgOiBv cHQuaXRlcmF0aW9uczsKPiArCWJvb2wgbG9vcF9mb3JldmVyOwo+ICsJaW50IGk7Cj4gKwo+ICsJ aWYgKG9wdC5pdGVyYXRpb25zID09IExPT1BfRk9SRVZFUikKPiArCQlsb29wX2ZvcmV2ZXIgPSB0 cnVlOwo+ICsJZWxzZQo+ICsJCWxvb3BfZm9yZXZlciA9IGZhbHNlOwo+ICsKPiArCWlndF9pbmZv KCJUZXN0aW5nIHJlc29sdXRpb24gd2l0aCBjb25uZWN0b3IgJXMgdXNpbmcgcGlwZSAlcyB3aXRo IHNlZWQgJWRcbiIsCj4gKwkJIGlndF9vdXRwdXRfbmFtZShkYXRhLT5vdXRwdXQpLCBrbXN0ZXN0 X3BpcGVfbmFtZShkYXRhLT5waXBlKSwgb3B0LnNlZWQpOwo+ICsKPiArCW1vZGVfaGkgPSBpZ3Rf b3V0cHV0X2dldF9tb2RlKGRhdGEtPm91dHB1dCk7Cj4gKwltb2RlX2xvID0gZ2V0X2xvd3Jlc19t b2RlKGRhdGEsIG1vZGVfaGkpOwo+ICsKPiArCWkgPSAwOwo+ICsJd2hpbGUgKGkgPCBpdGVyYXRp b25zIHx8IGxvb3BfZm9yZXZlcikgewo+ICsJCS8qIHN3aXRjaCB0byBsb3dlciByZXNvbHV0aW9u ICovCj4gKwkJcmV0ID0gZHJtTW9kZVNldENydGMoZGF0YS0+ZHJtX2ZkLCBkYXRhLT5jcnRjX2lk LCBkYXRhLT5mYi0+ZmJfaWQsIDAsIDAsCj4gKwkJCQkgICAgICZkYXRhLT5jb25uZWN0b3JfaWQs IDEsIG1vZGVfbG8pOwo+ICsJCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiArCj4gKwkJLyogc3dp dGNoIGJhY2sgdG8gaGlnaGVyIHJlc29sdXRpb24gKi8KPiArCQlyZXQgPSBkcm1Nb2RlU2V0Q3J0 YyhkYXRhLT5kcm1fZmQsIGRhdGEtPmNydGNfaWQsIGRhdGEtPmZiLT5mYl9pZCwgMCwgMCwKPiAr CQkJCSAgICAgJmRhdGEtPmNvbm5lY3Rvcl9pZCwgMSwgbW9kZV9oaSk7Cj4gKwkJaWd0X2Fzc2Vy dF9lcShyZXQsIDApOwo+ICsKPiArCQlpKys7Cj4gKwl9Cj4gK30KVXNlIGlndF9vdXRwdXRfb3Zl cnJpZGVfbW9kZSArIGlndF9kaXNwbGF5IGNhbGxzPyBXaXRoIHRoZSB0aHJlYWQgYmVpbmcgYSBm b3JrIG5vdywgeW91IGNhbiB1c2UgaWd0X2Rpc3BsYXkuIDopCj4gK3N0YXRpYyB2b2lkCj4gK3J1 bl90ZXN0KGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUpCj4gK3sKPiArCWNvbG9yX3QgYmx1 ZSAgPSB7IDAuMGYsIDAuMGYsIDEuMGYgfTsKPiArCXRlc3RfcG9zaXRpb25fdCB0ZXN0ID0geyAu ZGF0YSA9IGRhdGEgfTsKPiArCWludCBjb25uZWN0ZWRfb3V0czsKPiArCWludCBtYXhfcGxhbmVz ID0gZGF0YS0+ZGlzcGxheS5waXBlc1tkYXRhLT5waXBlXS5uX3BsYW5lczsKPiArCj4gKwlpZiAo IW9wdC51c2VyX3NlZWQpCj4gKwkJb3B0LnNlZWQgPSB0aW1lKE5VTEwpOwo+ICsKPiArCWNvbm5l Y3RlZF9vdXRzID0gMDsKPiArCWZvcl9lYWNoX3ZhbGlkX291dHB1dF9vbl9waXBlKCZkYXRhLT5k aXNwbGF5LCBwaXBlLCBkYXRhLT5vdXRwdXQpIHsKPiArCQlkYXRhLT5waXBlID0gcGlwZTsKPiAr Cj4gKwkJZGF0YS0+Y29ubmVjdG9yX2lkID0gZ2V0X2Nvbm5lY3Rvcl9jb25uZWN0ZWQoZGF0YS0+ ZHJtX2ZkKS0+Y29ubmVjdG9yX2lkOwpkYXRhLT5vdXRwdXQtPmNvbmZpZy5jb25uZWN0b3ItPmNv bm5lY3Rvcl9pZCA/IFRob3VnaCBJIGRvbid0IHRoaW5rIHdlIHN0aWxsIG5lZWQgaXQgaWYgeW91 IHVzZSB0aGUgaWd0IGRpc3BsYXkgY2FsbHMuCj4gKwkJaWd0X2Fzc2VydChkYXRhLT5jb25uZWN0 b3JfaWQgIT0gLUVJTlZBTCk7Cj4gKwo+ICsJCWRhdGEtPmNydGNfaWQgPSBnZXRfY3J0YyhkYXRh LT5kcm1fZmQpOwppZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZSk7CgpBZ2Fpbiwgc2hv dWxkbid0IG5lZWQgY3J0Y19pZCwgYnV0IGlmIHlvdSBkaWQgZGlzcGxheS0+cGlwZXNbcGlwZV0u Y3J0Y19pZAoKV2l0aCB0aG9zZSBmaXhlZCwgSSBkb24ndCB0aGluayB5b3UgbmVlZCByYXcgZHJt IGNhbGxzIGluIHRoaXMgdGVzdCBhdCBhbGwuIDopCgp+TWFhcnRlbgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK