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: Mon, 10 Apr 2017 14:39:23 +0200 Message-ID: References: <1489567424-29474-1-git-send-email-mika.kahola@intel.com> <1491826264.9258.66.camel@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id CDCAB6E35F for ; Mon, 10 Apr 2017 12:39:25 +0000 (UTC) In-Reply-To: <1491826264.9258.66.camel@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.com, intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T3AgMTAtMDQtMTcgb20gMTQ6MTEgc2NocmVlZiBNaWthIEthaG9sYToKPiBPbiBXZWQsIDIwMTct MDMtMjkgYXQgMTE6NTMgKzAyMDAsIE1hYXJ0ZW4gTGFua2hvcnN0IHdyb3RlOgo+PiBPcCAxNS0w My0xNyBvbSAwOTo0MyBzY2hyZWVmIE1pa2EgS2Fob2xhOgo+Pj4gVGhpcyB0ZXN0IGNhc2UgaW50 cm9kdWNlcyBjb25jdXJyZW50bHkgcnVubmluZyB0ZXN0IGNhc2VzIGZvcgo+Pj4gYXRvbWljCj4+ PiBtb2Rlc2V0dGluZy4KPj4+Cj4+PiBUaGUgZmlyc3QgdGVzdCBvciB0aHJlYWQgZHJhd3MgYmx1 ZSBiYWNrcm91bmQgd2l0aCBibGFjayBob2xlcyBvbgo+Pj4gaXQuCj4+PiBUaGVzZSBob2xlcyBh cmUgY292ZXJlZCBieSByZWN0YW5ndWxhciwgYmx1ZSBwbGFuZXMgdGhhdCBhcmUgcGxhY2VkCj4+ PiByYW5kb21seSBsaWtlIGluIHRlc3QgY2FzZSAna21zX3BsYW5lX211bHRpcGxlJy4KPj4+Cj4+ PiBUaGUgc2Vjb25kIHRocmVhZCBjaGFuZ2VzIHJlc29sdXRpb24gZnJvbSBoaWdoZXIgdG8gbG93 ZXIgb25lIGFuZAo+Pj4gYmFjay4KPj4+IFRoZSBkZWxheSBiZXR3ZWVuIHJlc29sdXRpb24gY2hh bmdlcyBpcyByYW5kb21seSBzZWxlY3RlZCBiZXR3ZWVuCj4+PiAyMCBhbmQKPj4+IDUwIG1pbGxp c2Vjb25kcy4KPj4+Cj4+PiBUaGUgdGVzdCBydW5zIGJ5IGRlZmF1bHQgMzIgaXRlcmF0aW9ucyB0 byBpbmNyZWFzZSB0aGUgY292ZXJhZ2UuCj4+Pgo+Pj4gdjI6IHVzZSBpZ3RfZm9yayBpbnN0ZWFk IG9mIHB0aHJlYWRzIHRvIGNyZWF0ZSBjb25jdXJyZW50IHRlc3QgcnVucwo+Pj4gKE1hYXJ0ZW4p Cj4+Pgo+Pj4gU2lnbmVkLW9mZi1ieTogTWlrYSBLYWhvbGEgPG1pa2Eua2Fob2xhQGludGVsLmNv bT4KPj4+IC0tLQo+Pj4gIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgfCAgIDEgKwo+Pj4gIHRlc3Rz L2ttc19jb25jdXJyZW50LmMgfCA2MzAKPj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKPj4+ICAyIGZpbGVzIGNoYW5nZWQsIDYzMSBpbnNlcnRpb25z KCspCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ttc19jb25jdXJyZW50LmMKPj4+Cj4+ PiA8c25pcD4KPj4+ICtzdGF0aWMgaW50Cj4+PiArZGlzcGxheV9jb21taXRfbW9kZShkYXRhX3Qg KmRhdGEsIGlndF9jcmNfdCAqY3JjKQo+Pj4gK3sKPj4+ICsJY2hhciBidWZbMjU2XTsKPj4+ICsJ c3RydWN0IGRybV9ldmVudCAqZSA9ICh2b2lkICopYnVmOwo+Pj4gKwlpbnQgbiwgcmV0Owo+Pj4g KwlpbnQgZmxhZ3MgPSBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQgfAo+Pj4gRFJNX01PREVfQVRP TUlDX0FMTE9XX01PREVTRVQgfCBEUk1fTU9ERV9BVE9NSUNfTk9OQkxPQ0s7Cj4+PiArCj4+PiAr CXJldCA9IGlndF9kaXNwbGF5X3RyeV9jb21taXRfYXRvbWljKCZkYXRhLT5kaXNwbGF5LAo+Pj4g KwkJCQkJICAgIGZsYWdzLAo+Pj4gKwkJCQkJICAgIE5VTEwpOwo+Pj4gKwlpZ3Rfc2tpcF9vbihy ZXQgIT0gMCk7Cj4+PiArCj4+PiArCWlndF9zZXRfdGltZW91dCgxLCAiU3R1Y2sgb24gcGFnZSBm bGlwIik7Cj4+PiArCXJldCA9IHJlYWQoZGF0YS0+ZGlzcGxheS5kcm1fZmQsIGJ1Ziwgc2l6ZW9m KGJ1ZikpOwo+Pj4gKwlpZ3RfYXNzZXJ0KHJldCA+PSAwKTsKPj4+ICsKPj4+ICsJaWd0X2Fzc2Vy dF9lcShlLT50eXBlLCBEUk1fRVZFTlRfRkxJUF9DT01QTEVURSk7Cj4+PiArCWlndF9yZXNldF90 aW1lb3V0KCk7Cj4+PiArCj4+PiArCXJldHVybiBuOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMg dm9pZAo+Pj4gK3Rlc3RfZ3JhYl9jcmMoZGF0YV90ICpkYXRhLCBjb2xvcl90ICpjb2xvciwgaWd0 X2NyY190ICpjcmMgLyogb3V0Cj4+PiAqLykKPj4+ICt7Cj4+PiArCWRybU1vZGVNb2RlSW5mbyAq bW9kZTsKPj4+ICsJaWd0X3BsYW5lX3QgKnByaW1hcnk7Cj4+PiArCWludCByZXQ7Cj4+PiArCj4+ PiArCWlndF9vdXRwdXRfc2V0X3BpcGUoZGF0YS0+b3V0cHV0LCBkYXRhLT5waXBlKTsKPj4+ICsK Pj4+ICsJcHJpbWFyeSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lX3R5cGUoZGF0YS0+b3V0cHV0LAo+ Pj4gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7Cj4+PiArCWRhdGEtPnBsYW5lW3ByaW1hcnktPmlu ZGV4XSA9IHByaW1hcnk7Cj4+PiArCj4+PiArCW1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKGRh dGEtPm91dHB1dCk7Cj4+PiArCj4+PiArCWlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+ZHJtX2Zk LCBtb2RlLT5oZGlzcGxheSwgbW9kZS0KPj4+PiB2ZGlzcGxheSwKPj4+ICsJCQkgICAgRFJNX0ZP Uk1BVF9YUkdCODg4OCwKPj4+ICsJCQkgICAgTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQs Cj4+PiArCQkJICAgIGNvbG9yLT5yZWQsIGNvbG9yLT5ncmVlbiwgY29sb3ItPmJsdWUsCj4+PiAr CQkJICAgICZkYXRhLT5mYltwcmltYXJ5LT5pbmRleF0pOwo+Pj4gKwo+Pj4gKwlpZ3RfcGxhbmVf c2V0X2ZiKGRhdGEtPnBsYW5lW3ByaW1hcnktPmluZGV4XSwgJmRhdGEtCj4+Pj4gZmJbcHJpbWFy eS0+aW5kZXhdKTsKPj4+ICsKPj4+ICsJcmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIoJmRh dGEtPmRpc3BsYXksCj4+PiBDT01NSVRfQVRPTUlDKTsKPj4+ICsJaWd0X3NraXBfb24ocmV0ICE9 IDApOwo+Pj4gK30KPj4+ICsKPj4+ICsvKgo+Pj4gKyAqIE11bHRpcGxlIHBsYW5lIHBvc2l0aW9u IHRlc3QuCj4+PiArICogICAtIFdlIHN0YXJ0IGJ5IGdyYWJiaW5nIGEgcmVmZXJlbmNlIENSQyBv ZiBhIGZ1bGwgYmx1ZSBmYgo+Pj4gYmVpbmcgc2Nhbm5lZAo+Pj4gKyAqICAgICBvdXQgb24gdGhl IHByaW1hcnkgcGxhbmUKPj4+ICsgKiAgIC0gVGhlbiB3ZSBzY2Fubm91dCBudW1iZXIgb2YgcGxh bmVzOgo+Pj4gKyAqICAgICAgKiB0aGUgcHJpbWFyeSBwbGFuZSB1c2VzIGEgYmx1ZSBmYiB3aXRo IGEgYmxhY2sgcmVjdGFuZ2xlCj4+PiBob2xlCj4+PiArICogICAgICAqIHBsYW5lcywgb24gdG9w IG9mIHRoZSBwcmltYXJ5IHBsYW5lLCB3aXRoIGEgYmx1ZSBmYiB0aGF0Cj4+PiBpcyBzZXQtdXAK Pj4+ICsgKiAgICAgICAgdG8gY292ZXIgdGhlIGJsYWNrIHJlY3RhbmdsZXMgb2YgdGhlIHByaW1h cnkgcGxhbmUgZmIKPj4+ICsgKiAgICAgVGhlIHJlc3VsdGluZyBDUkMgc2hvdWxkIGJlIGlkZW50 aWNhbCB0byB0aGUgcmVmZXJlbmNlIENSQwo+Pj4gKyAqLwo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lk Cj4+PiArY3JlYXRlX2ZiX2Zvcl9tb2RlX3Bvc2l0aW9uKGRhdGFfdCAqZGF0YSwgZHJtTW9kZU1v ZGVJbmZvICptb2RlLAo+Pj4gKwkJCSAgICBjb2xvcl90ICpjb2xvciwgaW50ICpyZWN0X3gsIGlu dAo+Pj4gKnJlY3RfeSwKPj4+ICsJCQkgICAgaW50ICpyZWN0X3csIGludCAqcmVjdF9oLCB1aW50 NjRfdAo+Pj4gdGlsaW5nLAo+Pj4gKwkJCSAgICBpbnQgbWF4X3BsYW5lcykKPj4+ICt7Cj4+PiAr CXVuc2lnbmVkIGludCBmYl9pZDsKPj4+ICsJY2Fpcm9fdCAqY3I7Cj4+PiArCWlndF9wbGFuZV90 ICpwcmltYXJ5Owo+Pj4gKwo+Pj4gKwlwcmltYXJ5ID0gaWd0X291dHB1dF9nZXRfcGxhbmVfdHlw ZShkYXRhLT5vdXRwdXQsCj4+PiBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKPj4+ICsKPj4+ICsJ ZmJfaWQgPSBpZ3RfY3JlYXRlX2ZiKGRhdGEtPmRybV9mZCwKPj4+ICsJCQkgICAgICBtb2RlLT5o ZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4+PiArCQkJICAgICAgRFJNX0ZPUk1BVF9YUkdCODg4 OCwKPj4+ICsJCQkgICAgICB0aWxpbmcsCj4+PiArCQkJICAgICAgJmRhdGEtPmZiW3ByaW1hcnkt PmluZGV4XSk7Cj4+PiArCWlndF9hc3NlcnQoZmJfaWQpOwo+Pj4gKwo+Pj4gKwljciA9IGlndF9n ZXRfY2Fpcm9fY3R4KGRhdGEtPmRybV9mZCwgJmRhdGEtPmZiW3ByaW1hcnktCj4+Pj4gaW5kZXhd KTsKPj4+ICsJaWd0X3BhaW50X2NvbG9yKGNyLCByZWN0X3hbMF0sIHJlY3RfeVswXSwKPj4+ICsJ CQltb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4+PiArCQkJY29sb3ItPnJlZCwgY29s b3ItPmdyZWVuLCBjb2xvci0+Ymx1ZSk7Cj4+PiArCj4+PiArCWZvciAoaW50IGkgPSAwOyBpIDwg bWF4X3BsYW5lczsgaSsrKSB7Cj4+PiArCQlpZiAoZGF0YS0+cGxhbmVbaV0tPnR5cGUgPT0KPj4+ IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpCj4+PiArCQkJY29udGludWU7Cj4+PiArCQlpZ3RfcGFp bnRfY29sb3IoY3IsIHJlY3RfeFtpXSwgcmVjdF95W2ldLAo+Pj4gKwkJCQlyZWN0X3dbaV0sIHJl Y3RfaFtpXSwgMC4wLCAwLjAsCj4+PiAwLjApOwo+Pj4gKwl9Cj4+PiArCj4+PiArCWlndF9hc3Nl cnQoY2Fpcm9fc3RhdHVzKGNyKSA9PSAwKTsKPj4+ICsJY2Fpcm9fZGVzdHJveShjcik7Cj4+PiAr fQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkCj4+PiArcHJlcGFyZV9wbGFuZXMoZGF0YV90ICpkYXRh LCBjb2xvcl90ICpjb2xvciwgaW50IG1heF9wbGFuZXMpCj4+PiArewo+Pj4gKwlkcm1Nb2RlTW9k ZUluZm8gKm1vZGU7Cj4+PiArCWlndF9waXBlX3QgKnBpcGU7Cj4+PiArCWlndF9wbGFuZV90ICpw cmltYXJ5Owo+Pj4gKwlpbnQgKng7Cj4+PiArCWludCAqeTsKPj4+ICsJaW50ICpzaXplOwo+Pj4g KwlpbnQgaTsKPj4+ICsKPj4+ICsJaWd0X291dHB1dF9zZXRfcGlwZShkYXRhLT5vdXRwdXQsIGRh dGEtPnBpcGUpOwo+Pj4gKwlwcmltYXJ5ID0gaWd0X291dHB1dF9nZXRfcGxhbmVfdHlwZShkYXRh LT5vdXRwdXQsCj4+PiBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKPj4+ICsJcGlwZSA9IHByaW1h cnktPnBpcGU7Cj4+PiArCj4+PiArCXggPSBtYWxsb2MocGlwZS0+bl9wbGFuZXMgKiBzaXplb2Yo KngpKTsKPj4+ICsJaWd0X2Fzc2VydF9mKHgsICJGYWlsZWQgdG8gYWxsb2NhdGUgJWxkIGJ5dGVz IGZvciB2YXJpYWJsZQo+Pj4geFxuIiwgKGxvbmcgaW50KSAocGlwZS0+bl9wbGFuZXMgKiBzaXpl b2YoKngpKSk7Cj4+PiArCXkgPSBtYWxsb2MocGlwZS0+bl9wbGFuZXMgKiBzaXplb2YoKnkpKTsK Pj4+ICsJaWd0X2Fzc2VydF9mKHksICJGYWlsZWQgdG8gYWxsb2NhdGUgJWxkIGJ5dGVzIGZvciB2 YXJpYWJsZQo+Pj4geVxuIiwgKGxvbmcgaW50KSAocGlwZS0+bl9wbGFuZXMgKiBzaXplb2YoKnkp KSk7Cj4+PiArCXNpemUgPSBtYWxsb2MocGlwZS0+bl9wbGFuZXMgKiBzaXplb2YoKnNpemUpKTsK Pj4+ICsJaWd0X2Fzc2VydF9mKHNpemUsICJGYWlsZWQgdG8gYWxsb2NhdGUgJWxkIGJ5dGVzIGZv cgo+Pj4gdmFyaWFibGUgc2l6ZVxuIiwgKGxvbmcgaW50KSAocGlwZS0+bl9wbGFuZXMgKiBzaXpl b2YoKnNpemUpKSk7Cj4+PiArCj4+PiArCW1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKGRhdGEt Pm91dHB1dCk7Cj4+PiArCj4+PiArCS8qIHBsYW5lcyB3aXRoIHJhbmRvbSBwb3NpdGlvbnMgKi8K Pj4+ICsJeFtwcmltYXJ5LT5pbmRleF0gPSAwOwo+Pj4gKwl5W3ByaW1hcnktPmluZGV4XSA9IDA7 Cj4+PiArCWZvciAoaSA9IDA7IGkgPCBtYXhfcGxhbmVzOyBpKyspIHsKPj4+ICsJCWlndF9wbGFu ZV90ICpwbGFuZSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKGRhdGEtCj4+Pj4gb3V0cHV0LCBpKTsK Pj4+ICsKPj4+ICsJCWlmIChwbGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKQo+ Pj4gKwkJCWNvbnRpbnVlOwo+Pj4gKwkJZWxzZSBpZiAocGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5F X1RZUEVfQ1VSU09SKQo+Pj4gKwkJCXNpemVbaV0gPSBTSVpFX0NVUlNPUjsKPj4+ICsJCWVsc2UK Pj4+ICsJCQlzaXplW2ldID0gU0laRV9QTEFORTsKPj4+ICsKPj4+ICsJCXhbaV0gPSByYW5kKCkg JSAobW9kZS0+aGRpc3BsYXkgLSBzaXplW2ldKTsKPj4+ICsJCXlbaV0gPSByYW5kKCkgJSAobW9k ZS0+dmRpc3BsYXkgLSBzaXplW2ldKTsKPj4+ICsKPj4+ICsJCWRhdGEtPnBsYW5lW2ldID0gcGxh bmU7Cj4+PiArCj4+PiArCQlpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmRybV9mZCwKPj4+ICsJ CQkJICAgIHNpemVbaV0sIHNpemVbaV0sCj4+PiArCQkJCSAgICBkYXRhLT5wbGFuZVtpXS0+dHlw ZSA9PQo+Pj4gRFJNX1BMQU5FX1RZUEVfQ1VSU09SID8gRFJNX0ZPUk1BVF9BUkdCODg4OCA6IERS TV9GT1JNQVRfWFJHQjg4ODgsCj4+PiArCQkJCSAgICBkYXRhLT5wbGFuZVtpXS0+dHlwZSA9PQo+ Pj4gRFJNX1BMQU5FX1RZUEVfQ1VSU09SID8gTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSA6Cj4+ PiBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKPj4+ICsJCQkJICAgIGNvbG9yLT5yZWQs IGNvbG9yLT5ncmVlbiwKPj4+IGNvbG9yLT5ibHVlLAo+Pj4gKwkJCQkgICAgJmRhdGEtPmZiW2ld KTsKPj4+ICsKPj4+ICsJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24oZGF0YS0+cGxhbmVbaV0sIHhb aV0sCj4+PiB5W2ldKTsKPj4+ICsJCWlndF9wbGFuZV9zZXRfZmIoZGF0YS0+cGxhbmVbaV0sICZk YXRhLT5mYltpXSk7Cj4+PiArCX0KPj4+ICsKPj4+ICsJLyogcHJpbWFyeSBwbGFuZSAqLwo+Pj4g KwlkYXRhLT5wbGFuZVtwcmltYXJ5LT5pbmRleF0gPSBwcmltYXJ5Owo+Pj4gKwljcmVhdGVfZmJf Zm9yX21vZGVfcG9zaXRpb24oZGF0YSwgbW9kZSwgY29sb3IsIHgsIHksIHNpemUsCj4+PiBzaXpl LAo+Pj4gKwkJCQkgICAgTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCj4+PiBtYXhfcGxh bmVzKTsKPj4+ICsJaWd0X3BsYW5lX3NldF9mYihkYXRhLT5wbGFuZVtwcmltYXJ5LT5pbmRleF0s ICZkYXRhLQo+Pj4+IGZiW3ByaW1hcnktPmluZGV4XSk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRp YyB2b2lkCj4+PiArdGVzdF9wbGFuZV9wb3NpdGlvbl93aXRoX291dHB1dChkYXRhX3QgKmRhdGEp Cj4+PiArewo+Pj4gKwlpZ3RfY3JjX3QgKmNyYzsKPj4+ICsJY29sb3JfdCBibHVlICA9IHsgMC4w ZiwgMC4wZiwgMS4wZiB9Owo+Pj4gKwlpbnQgaTsKPj4+ICsJaW50IGl0ZXJhdGlvbnMgPSBvcHQu aXRlcmF0aW9ucyA8IDEgPyAxIDogb3B0Lml0ZXJhdGlvbnM7Cj4+PiArCWJvb2wgbG9vcF9mb3Jl dmVyOwo+Pj4gKwljaGFyIGluZm9bMjU2XTsKPj4+ICsJaW50IG1heF9wbGFuZXMgPSBkYXRhLT5k aXNwbGF5LnBpcGVzW2RhdGEtPnBpcGVdLm5fcGxhbmVzOwo+Pj4gKwo+Pj4gKwlpZiAob3B0Lml0 ZXJhdGlvbnMgPT0gTE9PUF9GT1JFVkVSKSB7Cj4+PiArCQlsb29wX2ZvcmV2ZXIgPSB0cnVlOwo+ Pj4gKwkJc3ByaW50ZihpbmZvLCAiZm9yZXZlciIpOwo+Pj4gKwl9IGVsc2Ugewo+Pj4gKwkJbG9v cF9mb3JldmVyID0gZmFsc2U7Cj4+PiArCQlzcHJpbnRmKGluZm8sICJmb3IgJWQgJXMiLAo+Pj4g KwkJCWl0ZXJhdGlvbnMsIGl0ZXJhdGlvbnMgPiAxID8gIml0ZXJhdGlvbnMiCj4+PiA6ICJpdGVy YXRpb24iKTsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlpZ3RfaW5mbygiVGVzdGluZyBjb25uZWN0b3Ig JXMgdXNpbmcgcGlwZSAlcyB3aXRoICVkCj4+PiBwbGFuZXMgJXMgd2l0aCBzZWVkICVkXG4iLAo+ Pj4gKwkJIGlndF9vdXRwdXRfbmFtZShkYXRhLT5vdXRwdXQpLAo+Pj4ga21zdGVzdF9waXBlX25h bWUoZGF0YS0+cGlwZSksIG1heF9wbGFuZXMsCj4+PiArCQkgaW5mbywgb3B0LnNlZWQpOwo+Pj4g Kwo+Pj4gKwlpID0gMDsKPj4+ICsJd2hpbGUgKGkgPCBpdGVyYXRpb25zIHx8IGxvb3BfZm9yZXZl cikgewo+Pj4gKwkJcHJlcGFyZV9wbGFuZXMoZGF0YSwgJmJsdWUsIG1heF9wbGFuZXMpOwo+Pj4g Kwo+Pj4gKwkJZGlzcGxheV9jb21taXRfbW9kZShkYXRhLCBjcmMpOwo+Pj4gKwo+Pj4gKwkJaSsr Owo+Pj4gKwl9Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBkcm1Nb2RlQ29ubmVjdG9yICoKPj4+ ICtnZXRfY29ubmVjdG9yX2Nvbm5lY3RlZChpbnQgZHJtX2ZkKQo+Pj4gK3sKPj4+ICsJZHJtTW9k ZVJlcyAqcmVzb3VyY2VzID0gZHJtTW9kZUdldFJlc291cmNlcyhkcm1fZmQpOwo+Pj4gKwlkcm1N b2RlQ29ubmVjdG9yICpjb25uZWN0b3I7Cj4+PiArCWludCBpOwo+Pj4gKwo+Pj4gKwlmb3IgKGkg PSAwOyBpIDwgcmVzb3VyY2VzLT5jb3VudF9jb25uZWN0b3JzOyBpKyspIHsKPj4+ICsJCWNvbm5l Y3RvciA9IGRybU1vZGVHZXRDb25uZWN0b3IoZHJtX2ZkLAo+Pj4gKwkJCQkJCXJlc291cmNlcy0K Pj4+PiBjb25uZWN0b3JzW2ldKTsKPj4+ICsKPj4+ICsJCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rp b24gPT0gRFJNX01PREVfQ09OTkVDVEVEKQo+Pj4gKwkJCWJyZWFrOwo+Pj4gKwo+Pj4gKwkJZHJt TW9kZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yKTsKPj4+ICsJCWNvbm5lY3RvciA9IE5VTEw7Cj4+ PiArCX0KPj4+ICsKPj4+ICsJZHJtTW9kZUZyZWVSZXNvdXJjZXMocmVzb3VyY2VzKTsKPj4+ICsK Pj4+ICsJcmV0dXJuIGNvbm5lY3RvcjsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBnZXRf Y3J0Y19mb3JfZW5jb2Rlcihkcm1Nb2RlUmVzICpyZXNvdXJjZXMsCj4+PiArCQkJCWRybU1vZGVF bmNvZGVyICplbmNvZGVyKQo+Pj4gK3sKPj4+ICsJaW50IG1hc2ssIGlkOwo+Pj4gKwlpbnQgaTsK Pj4+ICsJYm9vbCBmb3VuZDsKPj4+ICsKPj4+ICsJZm9yIChpID0gMDsgaSA8IHJlc291cmNlcy0+ Y291bnRfY3J0Y3M7IGkrKykgewo+Pj4gKwkJbWFzayA9IDEgPDwgaTsKPj4+ICsJCWlkID0gcmVz b3VyY2VzLT5jcnRjc1tpXTsKPj4+ICsKPj4+ICsJCWZvdW5kID0gZW5jb2Rlci0+cG9zc2libGVf Y3J0Y3MgJiBtYXNrOwo+Pj4gKwkJaWYgKGZvdW5kKQo+Pj4gKwkJCWJyZWFrOwo+Pj4gKwl9Cj4+ PiArCj4+PiArCWlmICghZm91bmQpCj4+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4+ICsKPj4+ICsJ cmV0dXJuIGlkOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IGdldF9jcnRjX2Zvcl9jb25u ZWN0b3IoaW50IGRybV9mZCwgZHJtTW9kZVJlcwo+Pj4gKnJlc291cmNlcywKPj4+ICsJCQkJICBk cm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3IpCj4+PiArewo+Pj4gKwlkcm1Nb2RlRW5jb2RlciAq ZW5jb2RlcjsKPj4+ICsJaW50IGVuY29kZXJfaWQ7Cj4+PiArCWludCBjcnRjX2lkOwo+Pj4gKwlp bnQgaTsKPj4+ICsKPj4+ICsJZm9yIChpID0gMDsgaSA8IGNvbm5lY3Rvci0+Y291bnRfZW5jb2Rl cnM7IGkrKykgewo+Pj4gKwkJZW5jb2Rlcl9pZCA9IGNvbm5lY3Rvci0+ZW5jb2RlcnNbaV07Cj4+ PiArCQllbmNvZGVyID0gZHJtTW9kZUdldEVuY29kZXIoZHJtX2ZkLCBlbmNvZGVyX2lkKTsKPj4+ ICsKPj4+ICsJCWlmIChlbmNvZGVyKSB7Cj4+PiArCQkJY3J0Y19pZCA9IGdldF9jcnRjX2Zvcl9l bmNvZGVyKHJlc291cmNlcywKPj4+IGVuY29kZXIpOwo+Pj4gKwo+Pj4gKwkJCWRybU1vZGVGcmVl RW5jb2RlcihlbmNvZGVyKTsKPj4+ICsKPj4+ICsJCQlpZiAoY3J0Y19pZCAhPSAwKQo+Pj4gKwkJ CQlicmVhazsKPj4+ICsJCX0KPj4+ICsJfQo+Pj4gKwo+Pj4gKwlpZiAoY3J0Y19pZCA9PSAwKQo+ Pj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+PiArCj4+PiArCXJldHVybiBjcnRjX2lkOwo+Pj4gK30K Pj4+ICsKPj4+ICtzdGF0aWMgaW50IGdldF9jcnRjKGludCBkcm1fZmQpCj4+PiArewo+Pj4gKwlk cm1Nb2RlUmVzICpyZXNvdXJjZXM7Cj4+PiArCWRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3RvcjsK Pj4+ICsJZHJtTW9kZUVuY29kZXIgKmVuY29kZXI7Cj4+PiArCWludCBpLCBpZDsKPj4+ICsKPj4+ ICsJcmVzb3VyY2VzID0gZHJtTW9kZUdldFJlc291cmNlcyhkcm1fZmQpOwo+Pj4gKwljb25uZWN0 b3IgPSBnZXRfY29ubmVjdG9yX2Nvbm5lY3RlZChkcm1fZmQpOwo+Pj4gKwo+Pj4gKwlmb3IgKGkg PSAwOyBpIDwgcmVzb3VyY2VzLT5jb3VudF9lbmNvZGVyczsgaSsrKSB7Cj4+PiArCQllbmNvZGVy ID0gZHJtTW9kZUdldEVuY29kZXIoZHJtX2ZkLCByZXNvdXJjZXMtCj4+Pj4gZW5jb2RlcnNbaV0p Owo+Pj4gKwo+Pj4gKwkJaWYgKGVuY29kZXItPmVuY29kZXJfaWQgPT0gY29ubmVjdG9yLT5lbmNv ZGVyX2lkKQo+Pj4gKwkJCWJyZWFrOwo+Pj4gKwo+Pj4gKwkJZHJtTW9kZUZyZWVFbmNvZGVyKGVu Y29kZXIpOwo+Pj4gKwkJZW5jb2RlciA9IE5VTEw7Cj4+PiArCX0KPj4+ICsKPj4+ICsJaWYgKGVu Y29kZXIpCj4+PiArCQlyZXR1cm4gZW5jb2Rlci0+Y3J0Y19pZDsKPj4+ICsKPj4+ICsJaWQgPSBn ZXRfY3J0Y19mb3JfY29ubmVjdG9yKGRybV9mZCwgcmVzb3VyY2VzLCBjb25uZWN0b3IpOwo+Pj4g KwlpZ3RfYXNzZXJ0KGlkICE9IDApOwo+Pj4gKwo+Pj4gKwlyZXR1cm4gaWQ7Cj4+PiArfQo+Pj4g Kwo+Pj4gK3N0YXRpYyBkcm1Nb2RlTW9kZUluZm8gKgo+Pj4gK2dldF9sb3dyZXNfbW9kZShkYXRh X3QgKmRhdGEsIGRybU1vZGVNb2RlSW5mbyAqbW9kZV9kZWZhdWx0KQo+Pj4gK3sKPj4+ICsJZHJt TW9kZVJlcyAqcmVzb3VyY2VzID0gZHJtTW9kZUdldFJlc291cmNlcyhkYXRhLT5kcm1fZmQpOwo+ Pj4gKwlkcm1Nb2RlTW9kZUluZm8gc3RkXzEwMjRfbW9kZSA9IHsKPj4+ICsJCS5jbG9jayA9IDY1 MDAwLAo+Pj4gKwkJLmhkaXNwbGF5ID0gMTAyNCwKPj4+ICsJCS5oc3luY19zdGFydCA9IDEwNDgs Cj4+PiArCQkuaHN5bmNfZW5kID0gMTE4NCwKPj4+ICsJCS5odG90YWwgPSAxMzQ0LAo+Pj4gKwkJ Lmhza2V3ID0gMCwKPj4+ICsJCS52ZGlzcGxheSA9IDc2OCwKPj4+ICsJCS52c3luY19zdGFydCA9 IDc3MSwKPj4+ICsJCS52c3luY19lbmQgPSA3NzcsCj4+PiArCQkudnRvdGFsID0gODA2LAo+Pj4g KwkJLnZzY2FuID0gMCwKPj4+ICsJCS52cmVmcmVzaCA9IDYwLAo+Pj4gKwkJLmZsYWdzID0gMHhB LAo+Pj4gKwkJLnR5cGUgPSAweDQwLAo+Pj4gKwkJLm5hbWUgPSAiQ3VzdG9tIDEwMjR4NzY4IiwK Pj4+ICsJfTsKPj4+ICsJZHJtTW9kZU1vZGVJbmZvICptb2RlOwo+Pj4gKwlkcm1Nb2RlQ29ubmVj dG9yICpjb25uZWN0b3I7Cj4+PiArCWJvb2wgZm91bmQ7Cj4+PiArCWludCBsaW1pdCA9IG1vZGVf ZGVmYXVsdC0+dmRpc3BsYXktU0laRV9QTEFORTsKPj4+ICsJaW50IGksIGo7Cj4+PiArCj4+PiAr CWlmICghcmVzb3VyY2VzKSB7Cj4+PiArCQlpZ3Rfd2FybigiZHJtTW9kZUdldFJlc291cmNlcyBm YWlsZWQ6ICVzXG4iLAo+Pj4gc3RyZXJyb3IoZXJybm8pKTsKPj4+ICsJCXJldHVybiBtb2RlOwo+ Pj4gKwl9Cj4+PiArCj4+PiArCWZvdW5kID0gZmFsc2U7Cj4+PiArCWZvciAoaSA9IDA7IGkgPCBy ZXNvdXJjZXMtPmNvdW50X2Nvbm5lY3RvcnM7IGkrKykgewo+Pj4gKwo+Pj4gKwkJY29ubmVjdG9y ID0gZHJtTW9kZUdldENvbm5lY3RvckN1cnJlbnQoZGF0YS0KPj4+PiBkcm1fZmQsCj4+PiArCQkJ CQkJICAgICAgIHJlc291cmNlcy0KPj4+PiBjb25uZWN0b3JzW2ldKTsKPj4+ICsKPj4+ICsJCWlm ICghY29ubmVjdG9yKSB7Cj4+PiArCQkJaWd0X3dhcm4oImNvdWxkIG5vdCBnZXQgY29ubmVjdG9y ICVpOgo+Pj4gJXNcbiIsCj4+PiArCQkJCSByZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV0sCj4+PiBz dHJlcnJvcihlcnJubykpOwo+Pj4gKwkJCWNvbnRpbnVlOwo+Pj4gKwkJfQo+Pj4gKwo+Pj4gKwkJ aWYgKCFjb25uZWN0b3ItPmNvdW50X21vZGVzKQo+Pj4gKwkJCWNvbnRpbnVlOwo+Pj4gKwo+Pj4g KwkJZm9yIChqID0gMDsgaiA8IGNvbm5lY3Rvci0+Y291bnRfbW9kZXM7IGorKykgewo+Pj4gKwkJ CW1vZGUgPSAmY29ubmVjdG9yLT5tb2Rlc1tqXTsKPj4+ICsKPj4+ICsJCQlpZiAobW9kZS0+dmRp c3BsYXkgPCBsaW1pdCkgewo+Pj4gKwkJCQlmb3VuZCA9IHRydWU7Cj4+PiArCQkJCWJyZWFrOwo+ Pj4gKwkJCX0KPj4+ICsJCX0KPj4+ICsKPj4+ICsJCWRybU1vZGVGcmVlQ29ubmVjdG9yKGNvbm5l Y3Rvcik7Cj4+PiArCX0KPj4+ICsKPj4+ICsJZHJtTW9kZUZyZWVSZXNvdXJjZXMocmVzb3VyY2Vz KTsKPj4+ICsKPj4+ICsJaWYgKCFmb3VuZCkKPj4+ICsJCW1vZGUgPSAmc3RkXzEwMjRfbW9kZTsK Pj4+ICsKPj4+ICsJcmV0dXJuIG1vZGU7Cj4+PiArfQo+PiBTdGlsbCBub3QgY29tcGxldGVseSBo YXBweSBhYm91dCB0aGlzIHBhcnQuCj4+Cj4+IEkgd291bGQgbG9vayBhdCBkYXRhLT5vdXRwdXQt PmNvbmZpZy5jb25uZWN0b3IgZm9yIG1vZGVzLCBhbmQgcmV0dXJuCj4+IDEwMjQgbW9kZSBpZiBu b3RoaW5nJ3MgZm91bmQuCj4+Cj4+IFNhdmVzIGEgd2hvbGUgbG90IG9mIGRybSBjYWxscy4KPiBU cnVlLiBBIGxvdCBvZiBsaW5lcyBjYW4gYmUgY2xlYW5lZCBvdXQuCj4+PiArc3RhdGljIHZvaWQK Pj4+ICt0ZXN0X3Jlc29sdXRpb25fd2l0aF9vdXRwdXQoZGF0YV90ICpkYXRhKQo+Pj4gK3sKPj4+ ICsJZHJtTW9kZU1vZGVJbmZvICptb2RlX2hpLCAqbW9kZV9sbzsKPj4+ICsJaW50IHJldDsKPj4+ ICsJaW50IGl0ZXJhdGlvbnMgPSBvcHQuaXRlcmF0aW9ucyA8IDEgPyAxIDogb3B0Lml0ZXJhdGlv bnM7Cj4+PiArCWJvb2wgbG9vcF9mb3JldmVyOwo+Pj4gKwlpbnQgaTsKPj4+ICsKPj4+ICsJaWYg KG9wdC5pdGVyYXRpb25zID09IExPT1BfRk9SRVZFUikKPj4+ICsJCWxvb3BfZm9yZXZlciA9IHRy dWU7Cj4+PiArCWVsc2UKPj4+ICsJCWxvb3BfZm9yZXZlciA9IGZhbHNlOwo+Pj4gKwo+Pj4gKwlp Z3RfaW5mbygiVGVzdGluZyByZXNvbHV0aW9uIHdpdGggY29ubmVjdG9yICVzIHVzaW5nIHBpcGUK Pj4+ICVzIHdpdGggc2VlZCAlZFxuIiwKPj4+ICsJCSBpZ3Rfb3V0cHV0X25hbWUoZGF0YS0+b3V0 cHV0KSwKPj4+IGttc3Rlc3RfcGlwZV9uYW1lKGRhdGEtPnBpcGUpLCBvcHQuc2VlZCk7Cj4+PiAr Cj4+PiArCW1vZGVfaGkgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKGRhdGEtPm91dHB1dCk7Cj4+PiAr CW1vZGVfbG8gPSBnZXRfbG93cmVzX21vZGUoZGF0YSwgbW9kZV9oaSk7Cj4+PiArCj4+PiArCWkg PSAwOwo+Pj4gKwl3aGlsZSAoaSA8IGl0ZXJhdGlvbnMgfHwgbG9vcF9mb3JldmVyKSB7Cj4+PiAr CQkvKiBzd2l0Y2ggdG8gbG93ZXIgcmVzb2x1dGlvbiAqLwo+Pj4gKwkJcmV0ID0gZHJtTW9kZVNl dENydGMoZGF0YS0+ZHJtX2ZkLCBkYXRhLT5jcnRjX2lkLAo+Pj4gZGF0YS0+ZmItPmZiX2lkLCAw LCAwLAo+Pj4gKwkJCQkgICAgICZkYXRhLT5jb25uZWN0b3JfaWQsIDEsCj4+PiBtb2RlX2xvKTsK Pj4+ICsJCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPj4+ICsKPj4+ICsJCS8qIHN3aXRjaCBiYWNr IHRvIGhpZ2hlciByZXNvbHV0aW9uICovCj4+PiArCQlyZXQgPSBkcm1Nb2RlU2V0Q3J0YyhkYXRh LT5kcm1fZmQsIGRhdGEtPmNydGNfaWQsCj4+PiBkYXRhLT5mYi0+ZmJfaWQsIDAsIDAsCj4+PiAr CQkJCSAgICAgJmRhdGEtPmNvbm5lY3Rvcl9pZCwgMSwKPj4+IG1vZGVfaGkpOwo+Pj4gKwkJaWd0 X2Fzc2VydF9lcShyZXQsIDApOwo+Pj4gKwo+Pj4gKwkJaSsrOwo+Pj4gKwl9Cj4+PiArfQo+PiBV c2UgaWd0X291dHB1dF9vdmVycmlkZV9tb2RlICsgaWd0X2Rpc3BsYXkgY2FsbHM/IFdpdGggdGhl IHRocmVhZAo+PiBiZWluZyBhIGZvcmsgbm93LCB5b3UgY2FuIHVzZSBpZ3RfZGlzcGxheS4gOikK PiBGb3Igc29tZSByZWFzb24gSSBrZWVwIHJlY2VpdmluZyBhbiBlcnJvciB3aGVuIHVzaW5nCj4g aWd0X291dHB1dF9vdmVycmlkZV9tb2RlICsgaWd0X2Rpc3BsYXkgY2FsbHMuIFRoZSBlcnJvciBp cwo+Cj4gaWd0LWttcy1DUklUSUNBTDogRmFpbGVkIGFzc2VydGlvbjogZHJtTW9kZURlc3Ryb3lQ cm9wZXJ0eUJsb2IoZGlzcGxheS0KPj4gZHJtX2ZkLCAqYmxvYikgPT0gMAo+IGlndC1rbXMtQ1JJ VElDQUw6IExhc3QgZXJybm86IDEsIE9wZXJhdGlvbiBub3QgcGVybWl0dGVkCj4KPiBNYXliZSBi b3RoIHRocmVhZHMgdHJ5IHRvIGFjY2VzcyB0aGlzIGFuZCB0aGlzIHJlcXVlc3QgaXMgbm90IGdy YW50ZWQ/Cj4gV2l0aCBkcm1Nb2RlU2V0Q3J0YygpIGNhbGwgSSBkb24ndCBzZWUgdGhpcyBiZWhh dmlvci4gTWF5YmUgc3RpY2sgd2l0aAo+IHJhdyBjYWxscyBpbnN0ZWFkPwoKZGF0YS0+ZGlzcGxh eS5waXBlc1twaXBlXS5tb2RlX2Jsb2IgPSAwOyBpbiBvbmUgb2YgdGhlIGZvcmtzIG9mIHRoZSB0 ZXN0IHNob3VsZCBmaXggaXQuCgotRVBFUk0gbWVhbnMgdGhhdCB0aGUgYmxvYiB3YXMgYWxyZWFk eSBkZXN0cm95ZWQgYnkgdGhpcyBmZCwgYnV0IHN0aWxsIHVzZWQgZ2xvYmFsbHkuCgprbXNfcm1m YiBkb2VzIHNpbWlsYXIsIG1heWJlIHdlIHNob3VsZCBpZ25vcmUgZmFpbHVyZXM/Cgp+TWFhcnRl bgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==