From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kahola Subject: Re: [PATCH i-g-t v2] tests/kms_concurrent: Concurrent and interruptible subtests for atomic Date: Mon, 10 Apr 2017 15:11:04 +0300 Message-ID: <1491826264.9258.66.camel@intel.com> References: <1489567424-29474-1-git-send-email-mika.kahola@intel.com> Reply-To: mika.kahola@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 571246E059 for ; Mon, 10 Apr 2017 12:09:49 +0000 (UTC) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Maarten Lankhorst , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCAyMDE3LTAzLTI5IGF0IDExOjUzICswMjAwLCBNYWFydGVuIExhbmtob3JzdCB3cm90 ZToKPiBPcCAxNS0wMy0xNyBvbSAwOTo0MyBzY2hyZWVmIE1pa2EgS2Fob2xhOgo+ID4gCj4gPiBU aGlzIHRlc3QgY2FzZSBpbnRyb2R1Y2VzIGNvbmN1cnJlbnRseSBydW5uaW5nIHRlc3QgY2FzZXMg Zm9yCj4gPiBhdG9taWMKPiA+IG1vZGVzZXR0aW5nLgo+ID4gCj4gPiBUaGUgZmlyc3QgdGVzdCBv ciB0aHJlYWQgZHJhd3MgYmx1ZSBiYWNrcm91bmQgd2l0aCBibGFjayBob2xlcyBvbgo+ID4gaXQu Cj4gPiBUaGVzZSBob2xlcyBhcmUgY292ZXJlZCBieSByZWN0YW5ndWxhciwgYmx1ZSBwbGFuZXMg dGhhdCBhcmUgcGxhY2VkCj4gPiByYW5kb21seSBsaWtlIGluIHRlc3QgY2FzZSAna21zX3BsYW5l X211bHRpcGxlJy4KPiA+IAo+ID4gVGhlIHNlY29uZCB0aHJlYWQgY2hhbmdlcyByZXNvbHV0aW9u IGZyb20gaGlnaGVyIHRvIGxvd2VyIG9uZSBhbmQKPiA+IGJhY2suCj4gPiBUaGUgZGVsYXkgYmV0 d2VlbiByZXNvbHV0aW9uIGNoYW5nZXMgaXMgcmFuZG9tbHkgc2VsZWN0ZWQgYmV0d2Vlbgo+ID4g MjAgYW5kCj4gPiA1MCBtaWxsaXNlY29uZHMuCj4gPiAKPiA+IFRoZSB0ZXN0IHJ1bnMgYnkgZGVm YXVsdCAzMiBpdGVyYXRpb25zIHRvIGluY3JlYXNlIHRoZSBjb3ZlcmFnZS4KPiA+IAo+ID4gdjI6 IHVzZSBpZ3RfZm9yayBpbnN0ZWFkIG9mIHB0aHJlYWRzIHRvIGNyZWF0ZSBjb25jdXJyZW50IHRl c3QgcnVucwo+ID4gKE1hYXJ0ZW4pCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IE1pa2EgS2Fob2xh IDxtaWthLmthaG9sYUBpbnRlbC5jb20+Cj4gPiAtLS0KPiA+IMKgdGVzdHMvTWFrZWZpbGUuc291 cmNlcyB8wqDCoMKgMSArCj4gPiDCoHRlc3RzL2ttc19jb25jdXJyZW50LmMgfCA2MzAKPiA+ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+IMKgMiBm aWxlcyBjaGFuZ2VkLCA2MzEgaW5zZXJ0aW9ucygrKQo+ID4gwqBjcmVhdGUgbW9kZSAxMDA2NDQg dGVzdHMva21zX2NvbmN1cnJlbnQuYwo+ID4gCj4gPiA8c25pcD4KPiA+ICtzdGF0aWMgaW50Cj4g PiArZGlzcGxheV9jb21taXRfbW9kZShkYXRhX3QgKmRhdGEsIGlndF9jcmNfdCAqY3JjKQo+ID4g K3sKPiA+ICsJY2hhciBidWZbMjU2XTsKPiA+ICsJc3RydWN0IGRybV9ldmVudCAqZSA9ICh2b2lk ICopYnVmOwo+ID4gKwlpbnQgbiwgcmV0Owo+ID4gKwlpbnQgZmxhZ3MgPSBEUk1fTU9ERV9QQUdF X0ZMSVBfRVZFTlQgfAo+ID4gRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQgfCBEUk1fTU9E RV9BVE9NSUNfTk9OQkxPQ0s7Cj4gPiArCj4gPiArCXJldCA9IGlndF9kaXNwbGF5X3RyeV9jb21t aXRfYXRvbWljKCZkYXRhLT5kaXNwbGF5LAo+ID4gKwkJCQkJwqDCoMKgwqBmbGFncywKPiA+ICsJ CQkJCcKgwqDCoMKgTlVMTCk7Cj4gPiArCWlndF9za2lwX29uKHJldCAhPSAwKTsKPiA+ICsKPiA+ ICsJaWd0X3NldF90aW1lb3V0KDEsICJTdHVjayBvbiBwYWdlIGZsaXAiKTsKPiA+ICsJcmV0ID0g cmVhZChkYXRhLT5kaXNwbGF5LmRybV9mZCwgYnVmLCBzaXplb2YoYnVmKSk7Cj4gPiArCWlndF9h c3NlcnQocmV0ID49IDApOwo+ID4gKwo+ID4gKwlpZ3RfYXNzZXJ0X2VxKGUtPnR5cGUsIERSTV9F VkVOVF9GTElQX0NPTVBMRVRFKTsKPiA+ICsJaWd0X3Jlc2V0X3RpbWVvdXQoKTsKPiA+ICsKPiA+ ICsJcmV0dXJuIG47Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArdGVzdF9ncmFi X2NyYyhkYXRhX3QgKmRhdGEsIGNvbG9yX3QgKmNvbG9yLCBpZ3RfY3JjX3QgKmNyYyAvKiBvdXQK PiA+ICovKQo+ID4gK3sKPiA+ICsJZHJtTW9kZU1vZGVJbmZvICptb2RlOwo+ID4gKwlpZ3RfcGxh bmVfdCAqcHJpbWFyeTsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJaWd0X291dHB1dF9zZXRf cGlwZShkYXRhLT5vdXRwdXQsIGRhdGEtPnBpcGUpOwo+ID4gKwo+ID4gKwlwcmltYXJ5ID0gaWd0 X291dHB1dF9nZXRfcGxhbmVfdHlwZShkYXRhLT5vdXRwdXQsCj4gPiBEUk1fUExBTkVfVFlQRV9Q UklNQVJZKTsKPiA+ICsJZGF0YS0+cGxhbmVbcHJpbWFyeS0+aW5kZXhdID0gcHJpbWFyeTsKPiA+ ICsKPiA+ICsJbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUoZGF0YS0+b3V0cHV0KTsKPiA+ICsK PiA+ICsJaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5kcm1fZmQsIG1vZGUtPmhkaXNwbGF5LCBt b2RlLQo+ID4gPnZkaXNwbGF5LAo+ID4gKwkJCcKgwqDCoMKgRFJNX0ZPUk1BVF9YUkdCODg4OCwK PiA+ICsJCQnCoMKgwqDCoExPQ0FMX0k5MTVfRk9STUFUX01PRF9YX1RJTEVELAo+ID4gKwkJCcKg wqDCoMKgY29sb3ItPnJlZCwgY29sb3ItPmdyZWVuLCBjb2xvci0+Ymx1ZSwKPiA+ICsJCQnCoMKg wqDCoCZkYXRhLT5mYltwcmltYXJ5LT5pbmRleF0pOwo+ID4gKwo+ID4gKwlpZ3RfcGxhbmVfc2V0 X2ZiKGRhdGEtPnBsYW5lW3ByaW1hcnktPmluZGV4XSwgJmRhdGEtCj4gPiA+ZmJbcHJpbWFyeS0+ aW5kZXhdKTsKPiA+ICsKPiA+ICsJcmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIoJmRhdGEt PmRpc3BsYXksCj4gPiBDT01NSVRfQVRPTUlDKTsKPiA+ICsJaWd0X3NraXBfb24ocmV0ICE9IDAp Owo+ID4gK30KPiA+ICsKPiA+ICsvKgo+ID4gKyAqIE11bHRpcGxlIHBsYW5lIHBvc2l0aW9uIHRl c3QuCj4gPiArICrCoMKgwqAtIFdlIHN0YXJ0IGJ5IGdyYWJiaW5nIGEgcmVmZXJlbmNlIENSQyBv ZiBhIGZ1bGwgYmx1ZSBmYgo+ID4gYmVpbmcgc2Nhbm5lZAo+ID4gKyAqwqDCoMKgwqDCoG91dCBv biB0aGUgcHJpbWFyeSBwbGFuZQo+ID4gKyAqwqDCoMKgLSBUaGVuIHdlIHNjYW5ub3V0IG51bWJl ciBvZiBwbGFuZXM6Cj4gPiArICrCoMKgwqDCoMKgwqAqIHRoZSBwcmltYXJ5IHBsYW5lIHVzZXMg YSBibHVlIGZiIHdpdGggYSBibGFjayByZWN0YW5nbGUKPiA+IGhvbGUKPiA+ICsgKsKgwqDCoMKg wqDCoCogcGxhbmVzLCBvbiB0b3Agb2YgdGhlIHByaW1hcnkgcGxhbmUsIHdpdGggYSBibHVlIGZi IHRoYXQKPiA+IGlzIHNldC11cAo+ID4gKyAqwqDCoMKgwqDCoMKgwqDCoHRvIGNvdmVyIHRoZSBi bGFjayByZWN0YW5nbGVzIG9mIHRoZSBwcmltYXJ5IHBsYW5lIGZiCj4gPiArICrCoMKgwqDCoMKg VGhlIHJlc3VsdGluZyBDUkMgc2hvdWxkIGJlIGlkZW50aWNhbCB0byB0aGUgcmVmZXJlbmNlIENS Qwo+ID4gKyAqLwo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArY3JlYXRlX2ZiX2Zvcl9tb2Rl X3Bvc2l0aW9uKGRhdGFfdCAqZGF0YSwgZHJtTW9kZU1vZGVJbmZvICptb2RlLAo+ID4gKwkJCcKg wqDCoMKgY29sb3JfdCAqY29sb3IsIGludCAqcmVjdF94LCBpbnQKPiA+ICpyZWN0X3ksCj4gPiAr CQkJwqDCoMKgwqBpbnQgKnJlY3RfdywgaW50ICpyZWN0X2gsIHVpbnQ2NF90Cj4gPiB0aWxpbmcs Cj4gPiArCQkJwqDCoMKgwqBpbnQgbWF4X3BsYW5lcykKPiA+ICt7Cj4gPiArCXVuc2lnbmVkIGlu dCBmYl9pZDsKPiA+ICsJY2Fpcm9fdCAqY3I7Cj4gPiArCWlndF9wbGFuZV90ICpwcmltYXJ5Owo+ ID4gKwo+ID4gKwlwcmltYXJ5ID0gaWd0X291dHB1dF9nZXRfcGxhbmVfdHlwZShkYXRhLT5vdXRw dXQsCj4gPiBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKPiA+ICsKPiA+ICsJZmJfaWQgPSBpZ3Rf Y3JlYXRlX2ZiKGRhdGEtPmRybV9mZCwKPiA+ICsJCQnCoMKgwqDCoMKgwqBtb2RlLT5oZGlzcGxh eSwgbW9kZS0+dmRpc3BsYXksCj4gPiArCQkJwqDCoMKgwqDCoMKgRFJNX0ZPUk1BVF9YUkdCODg4 OCwKPiA+ICsJCQnCoMKgwqDCoMKgwqB0aWxpbmcsCj4gPiArCQkJwqDCoMKgwqDCoMKgJmRhdGEt PmZiW3ByaW1hcnktPmluZGV4XSk7Cj4gPiArCWlndF9hc3NlcnQoZmJfaWQpOwo+ID4gKwo+ID4g KwljciA9IGlndF9nZXRfY2Fpcm9fY3R4KGRhdGEtPmRybV9mZCwgJmRhdGEtPmZiW3ByaW1hcnkt Cj4gPiA+aW5kZXhdKTsKPiA+ICsJaWd0X3BhaW50X2NvbG9yKGNyLCByZWN0X3hbMF0sIHJlY3Rf eVswXSwKPiA+ICsJCQltb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4gPiArCQkJY29s b3ItPnJlZCwgY29sb3ItPmdyZWVuLCBjb2xvci0+Ymx1ZSk7Cj4gPiArCj4gPiArCWZvciAoaW50 IGkgPSAwOyBpIDwgbWF4X3BsYW5lczsgaSsrKSB7Cj4gPiArCQlpZiAoZGF0YS0+cGxhbmVbaV0t PnR5cGUgPT0KPiA+IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpCj4gPiArCQkJY29udGludWU7Cj4g PiArCQlpZ3RfcGFpbnRfY29sb3IoY3IsIHJlY3RfeFtpXSwgcmVjdF95W2ldLAo+ID4gKwkJCQly ZWN0X3dbaV0sIHJlY3RfaFtpXSwgMC4wLCAwLjAsCj4gPiAwLjApOwo+ID4gKwl9Cj4gPiArCj4g PiArCWlndF9hc3NlcnQoY2Fpcm9fc3RhdHVzKGNyKSA9PSAwKTsKPiA+ICsJY2Fpcm9fZGVzdHJv eShjcik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArcHJlcGFyZV9wbGFuZXMo ZGF0YV90ICpkYXRhLCBjb2xvcl90ICpjb2xvciwgaW50IG1heF9wbGFuZXMpCj4gPiArewo+ID4g Kwlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7Cj4gPiArCWlndF9waXBlX3QgKnBpcGU7Cj4gPiArCWln dF9wbGFuZV90ICpwcmltYXJ5Owo+ID4gKwlpbnQgKng7Cj4gPiArCWludCAqeTsKPiA+ICsJaW50 ICpzaXplOwo+ID4gKwlpbnQgaTsKPiA+ICsKPiA+ICsJaWd0X291dHB1dF9zZXRfcGlwZShkYXRh LT5vdXRwdXQsIGRhdGEtPnBpcGUpOwo+ID4gKwlwcmltYXJ5ID0gaWd0X291dHB1dF9nZXRfcGxh bmVfdHlwZShkYXRhLT5vdXRwdXQsCj4gPiBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKPiA+ICsJ cGlwZSA9IHByaW1hcnktPnBpcGU7Cj4gPiArCj4gPiArCXggPSBtYWxsb2MocGlwZS0+bl9wbGFu ZXMgKiBzaXplb2YoKngpKTsKPiA+ICsJaWd0X2Fzc2VydF9mKHgsICJGYWlsZWQgdG8gYWxsb2Nh dGUgJWxkIGJ5dGVzIGZvciB2YXJpYWJsZQo+ID4geFxuIiwgKGxvbmcgaW50KSAocGlwZS0+bl9w bGFuZXMgKiBzaXplb2YoKngpKSk7Cj4gPiArCXkgPSBtYWxsb2MocGlwZS0+bl9wbGFuZXMgKiBz aXplb2YoKnkpKTsKPiA+ICsJaWd0X2Fzc2VydF9mKHksICJGYWlsZWQgdG8gYWxsb2NhdGUgJWxk IGJ5dGVzIGZvciB2YXJpYWJsZQo+ID4geVxuIiwgKGxvbmcgaW50KSAocGlwZS0+bl9wbGFuZXMg KiBzaXplb2YoKnkpKSk7Cj4gPiArCXNpemUgPSBtYWxsb2MocGlwZS0+bl9wbGFuZXMgKiBzaXpl b2YoKnNpemUpKTsKPiA+ICsJaWd0X2Fzc2VydF9mKHNpemUsICJGYWlsZWQgdG8gYWxsb2NhdGUg JWxkIGJ5dGVzIGZvcgo+ID4gdmFyaWFibGUgc2l6ZVxuIiwgKGxvbmcgaW50KSAocGlwZS0+bl9w bGFuZXMgKiBzaXplb2YoKnNpemUpKSk7Cj4gPiArCj4gPiArCW1vZGUgPSBpZ3Rfb3V0cHV0X2dl dF9tb2RlKGRhdGEtPm91dHB1dCk7Cj4gPiArCj4gPiArCS8qIHBsYW5lcyB3aXRoIHJhbmRvbSBw b3NpdGlvbnMgKi8KPiA+ICsJeFtwcmltYXJ5LT5pbmRleF0gPSAwOwo+ID4gKwl5W3ByaW1hcnkt PmluZGV4XSA9IDA7Cj4gPiArCWZvciAoaSA9IDA7IGkgPCBtYXhfcGxhbmVzOyBpKyspIHsKPiA+ ICsJCWlndF9wbGFuZV90ICpwbGFuZSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKGRhdGEtCj4gPiA+ b3V0cHV0LCBpKTsKPiA+ICsKPiA+ICsJCWlmIChwbGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQ RV9QUklNQVJZKQo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwkJZWxzZSBpZiAocGxhbmUtPnR5cGUg PT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SKQo+ID4gKwkJCXNpemVbaV0gPSBTSVpFX0NVUlNPUjsK PiA+ICsJCWVsc2UKPiA+ICsJCQlzaXplW2ldID0gU0laRV9QTEFORTsKPiA+ICsKPiA+ICsJCXhb aV0gPSByYW5kKCkgJSAobW9kZS0+aGRpc3BsYXkgLSBzaXplW2ldKTsKPiA+ICsJCXlbaV0gPSBy YW5kKCkgJSAobW9kZS0+dmRpc3BsYXkgLSBzaXplW2ldKTsKPiA+ICsKPiA+ICsJCWRhdGEtPnBs YW5lW2ldID0gcGxhbmU7Cj4gPiArCj4gPiArCQlpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmRy bV9mZCwKPiA+ICsJCQkJwqDCoMKgwqBzaXplW2ldLCBzaXplW2ldLAo+ID4gKwkJCQnCoMKgwqDC oGRhdGEtPnBsYW5lW2ldLT50eXBlID09Cj4gPiBEUk1fUExBTkVfVFlQRV9DVVJTT1IgPyBEUk1f Rk9STUFUX0FSR0I4ODg4IDogRFJNX0ZPUk1BVF9YUkdCODg4OCwKPiA+ICsJCQkJwqDCoMKgwqBk YXRhLT5wbGFuZVtpXS0+dHlwZSA9PQo+ID4gRFJNX1BMQU5FX1RZUEVfQ1VSU09SID8gTE9DQUxf RFJNX0ZPUk1BVF9NT0RfTk9ORSA6Cj4gPiBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwK PiA+ICsJCQkJwqDCoMKgwqBjb2xvci0+cmVkLCBjb2xvci0+Z3JlZW4sCj4gPiBjb2xvci0+Ymx1 ZSwKPiA+ICsJCQkJwqDCoMKgwqAmZGF0YS0+ZmJbaV0pOwo+ID4gKwo+ID4gKwkJaWd0X3BsYW5l X3NldF9wb3NpdGlvbihkYXRhLT5wbGFuZVtpXSwgeFtpXSwKPiA+IHlbaV0pOwo+ID4gKwkJaWd0 X3BsYW5lX3NldF9mYihkYXRhLT5wbGFuZVtpXSwgJmRhdGEtPmZiW2ldKTsKPiA+ICsJfQo+ID4g Kwo+ID4gKwkvKiBwcmltYXJ5IHBsYW5lICovCj4gPiArCWRhdGEtPnBsYW5lW3ByaW1hcnktPmlu ZGV4XSA9IHByaW1hcnk7Cj4gPiArCWNyZWF0ZV9mYl9mb3JfbW9kZV9wb3NpdGlvbihkYXRhLCBt b2RlLCBjb2xvciwgeCwgeSwgc2l6ZSwKPiA+IHNpemUsCj4gPiArCQkJCcKgwqDCoMKgTE9DQUxf STkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCj4gPiBtYXhfcGxhbmVzKTsKPiA+ICsJaWd0X3BsYW5l X3NldF9mYihkYXRhLT5wbGFuZVtwcmltYXJ5LT5pbmRleF0sICZkYXRhLQo+ID4gPmZiW3ByaW1h cnktPmluZGV4XSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArdGVzdF9wbGFu ZV9wb3NpdGlvbl93aXRoX291dHB1dChkYXRhX3QgKmRhdGEpCj4gPiArewo+ID4gKwlpZ3RfY3Jj X3QgKmNyYzsKPiA+ICsJY29sb3JfdCBibHVlwqDCoD0geyAwLjBmLCAwLjBmLCAxLjBmIH07Cj4g PiArCWludCBpOwo+ID4gKwlpbnQgaXRlcmF0aW9ucyA9IG9wdC5pdGVyYXRpb25zIDwgMSA/IDEg OiBvcHQuaXRlcmF0aW9uczsKPiA+ICsJYm9vbCBsb29wX2ZvcmV2ZXI7Cj4gPiArCWNoYXIgaW5m b1syNTZdOwo+ID4gKwlpbnQgbWF4X3BsYW5lcyA9IGRhdGEtPmRpc3BsYXkucGlwZXNbZGF0YS0+ cGlwZV0ubl9wbGFuZXM7Cj4gPiArCj4gPiArCWlmIChvcHQuaXRlcmF0aW9ucyA9PSBMT09QX0ZP UkVWRVIpIHsKPiA+ICsJCWxvb3BfZm9yZXZlciA9IHRydWU7Cj4gPiArCQlzcHJpbnRmKGluZm8s ICJmb3JldmVyIik7Cj4gPiArCX0gZWxzZSB7Cj4gPiArCQlsb29wX2ZvcmV2ZXIgPSBmYWxzZTsK PiA+ICsJCXNwcmludGYoaW5mbywgImZvciAlZCAlcyIsCj4gPiArCQkJaXRlcmF0aW9ucywgaXRl cmF0aW9ucyA+IDEgPyAiaXRlcmF0aW9ucyIKPiA+IDogIml0ZXJhdGlvbiIpOwo+ID4gKwl9Cj4g PiArCj4gPiArCWlndF9pbmZvKCJUZXN0aW5nIGNvbm5lY3RvciAlcyB1c2luZyBwaXBlICVzIHdp dGggJWQKPiA+IHBsYW5lcyAlcyB3aXRoIHNlZWQgJWRcbiIsCj4gPiArCQnCoGlndF9vdXRwdXRf bmFtZShkYXRhLT5vdXRwdXQpLAo+ID4ga21zdGVzdF9waXBlX25hbWUoZGF0YS0+cGlwZSksIG1h eF9wbGFuZXMsCj4gPiArCQnCoGluZm8sIG9wdC5zZWVkKTsKPiA+ICsKPiA+ICsJaSA9IDA7Cj4g PiArCXdoaWxlIChpIDwgaXRlcmF0aW9ucyB8fCBsb29wX2ZvcmV2ZXIpIHsKPiA+ICsJCXByZXBh cmVfcGxhbmVzKGRhdGEsICZibHVlLCBtYXhfcGxhbmVzKTsKPiA+ICsKPiA+ICsJCWRpc3BsYXlf Y29tbWl0X21vZGUoZGF0YSwgY3JjKTsKPiA+ICsKPiA+ICsJCWkrKzsKPiA+ICsJfQo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgZHJtTW9kZUNvbm5lY3RvciAqCj4gPiArZ2V0X2Nvbm5lY3Rvcl9j b25uZWN0ZWQoaW50IGRybV9mZCkKPiA+ICt7Cj4gPiArCWRybU1vZGVSZXMgKnJlc291cmNlcyA9 IGRybU1vZGVHZXRSZXNvdXJjZXMoZHJtX2ZkKTsKPiA+ICsJZHJtTW9kZUNvbm5lY3RvciAqY29u bmVjdG9yOwo+ID4gKwlpbnQgaTsKPiA+ICsKPiA+ICsJZm9yIChpID0gMDsgaSA8IHJlc291cmNl cy0+Y291bnRfY29ubmVjdG9yczsgaSsrKSB7Cj4gPiArCQljb25uZWN0b3IgPSBkcm1Nb2RlR2V0 Q29ubmVjdG9yKGRybV9mZCwKPiA+ICsJCQkJCQlyZXNvdXJjZXMtCj4gPiA+Y29ubmVjdG9yc1tp XSk7Cj4gPiArCj4gPiArCQlpZiAoY29ubmVjdG9yLT5jb25uZWN0aW9uID09IERSTV9NT0RFX0NP Tk5FQ1RFRCkKPiA+ICsJCQlicmVhazsKPiA+ICsKPiA+ICsJCWRybU1vZGVGcmVlQ29ubmVjdG9y KGNvbm5lY3Rvcik7Cj4gPiArCQljb25uZWN0b3IgPSBOVUxMOwo+ID4gKwl9Cj4gPiArCj4gPiAr CWRybU1vZGVGcmVlUmVzb3VyY2VzKHJlc291cmNlcyk7Cj4gPiArCj4gPiArCXJldHVybiBjb25u ZWN0b3I7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZ2V0X2NydGNfZm9yX2VuY29kZXIo ZHJtTW9kZVJlcyAqcmVzb3VyY2VzLAo+ID4gKwkJCQlkcm1Nb2RlRW5jb2RlciAqZW5jb2RlcikK PiA+ICt7Cj4gPiArCWludCBtYXNrLCBpZDsKPiA+ICsJaW50IGk7Cj4gPiArCWJvb2wgZm91bmQ7 Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCByZXNvdXJjZXMtPmNvdW50X2NydGNzOyBpKysp IHsKPiA+ICsJCW1hc2sgPSAxIDw8IGk7Cj4gPiArCQlpZCA9IHJlc291cmNlcy0+Y3J0Y3NbaV07 Cj4gPiArCj4gPiArCQlmb3VuZCA9IGVuY29kZXItPnBvc3NpYmxlX2NydGNzICYgbWFzazsKPiA+ ICsJCWlmIChmb3VuZCkKPiA+ICsJCQlicmVhazsKPiA+ICsJfQo+ID4gKwo+ID4gKwlpZiAoIWZv dW5kKQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCj4gPiArCXJldHVybiBpZDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIGludCBnZXRfY3J0Y19mb3JfY29ubmVjdG9yKGludCBkcm1fZmQs IGRybU1vZGVSZXMKPiA+ICpyZXNvdXJjZXMsCj4gPiArCQkJCcKgwqBkcm1Nb2RlQ29ubmVjdG9y ICpjb25uZWN0b3IpCj4gPiArewo+ID4gKwlkcm1Nb2RlRW5jb2RlciAqZW5jb2RlcjsKPiA+ICsJ aW50IGVuY29kZXJfaWQ7Cj4gPiArCWludCBjcnRjX2lkOwo+ID4gKwlpbnQgaTsKPiA+ICsKPiA+ ICsJZm9yIChpID0gMDsgaSA8IGNvbm5lY3Rvci0+Y291bnRfZW5jb2RlcnM7IGkrKykgewo+ID4g KwkJZW5jb2Rlcl9pZCA9IGNvbm5lY3Rvci0+ZW5jb2RlcnNbaV07Cj4gPiArCQllbmNvZGVyID0g ZHJtTW9kZUdldEVuY29kZXIoZHJtX2ZkLCBlbmNvZGVyX2lkKTsKPiA+ICsKPiA+ICsJCWlmIChl bmNvZGVyKSB7Cj4gPiArCQkJY3J0Y19pZCA9IGdldF9jcnRjX2Zvcl9lbmNvZGVyKHJlc291cmNl cywKPiA+IGVuY29kZXIpOwo+ID4gKwo+ID4gKwkJCWRybU1vZGVGcmVlRW5jb2RlcihlbmNvZGVy KTsKPiA+ICsKPiA+ICsJCQlpZiAoY3J0Y19pZCAhPSAwKQo+ID4gKwkJCQlicmVhazsKPiA+ICsJ CX0KPiA+ICsJfQo+ID4gKwo+ID4gKwlpZiAoY3J0Y19pZCA9PSAwKQo+ID4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4gPiArCj4gPiArCXJldHVybiBjcnRjX2lkOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgaW50IGdldF9jcnRjKGludCBkcm1fZmQpCj4gPiArewo+ID4gKwlkcm1Nb2RlUmVzICpyZXNv dXJjZXM7Cj4gPiArCWRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3RvcjsKPiA+ICsJZHJtTW9kZUVu Y29kZXIgKmVuY29kZXI7Cj4gPiArCWludCBpLCBpZDsKPiA+ICsKPiA+ICsJcmVzb3VyY2VzID0g ZHJtTW9kZUdldFJlc291cmNlcyhkcm1fZmQpOwo+ID4gKwljb25uZWN0b3IgPSBnZXRfY29ubmVj dG9yX2Nvbm5lY3RlZChkcm1fZmQpOwo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgcmVzb3Vy Y2VzLT5jb3VudF9lbmNvZGVyczsgaSsrKSB7Cj4gPiArCQllbmNvZGVyID0gZHJtTW9kZUdldEVu Y29kZXIoZHJtX2ZkLCByZXNvdXJjZXMtCj4gPiA+ZW5jb2RlcnNbaV0pOwo+ID4gKwo+ID4gKwkJ aWYgKGVuY29kZXItPmVuY29kZXJfaWQgPT0gY29ubmVjdG9yLT5lbmNvZGVyX2lkKQo+ID4gKwkJ CWJyZWFrOwo+ID4gKwo+ID4gKwkJZHJtTW9kZUZyZWVFbmNvZGVyKGVuY29kZXIpOwo+ID4gKwkJ ZW5jb2RlciA9IE5VTEw7Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWYgKGVuY29kZXIpCj4gPiArCQly ZXR1cm4gZW5jb2Rlci0+Y3J0Y19pZDsKPiA+ICsKPiA+ICsJaWQgPSBnZXRfY3J0Y19mb3JfY29u bmVjdG9yKGRybV9mZCwgcmVzb3VyY2VzLCBjb25uZWN0b3IpOwo+ID4gKwlpZ3RfYXNzZXJ0KGlk ICE9IDApOwo+ID4gKwo+ID4gKwlyZXR1cm4gaWQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBk cm1Nb2RlTW9kZUluZm8gKgo+ID4gK2dldF9sb3dyZXNfbW9kZShkYXRhX3QgKmRhdGEsIGRybU1v ZGVNb2RlSW5mbyAqbW9kZV9kZWZhdWx0KQo+ID4gK3sKPiA+ICsJZHJtTW9kZVJlcyAqcmVzb3Vy Y2VzID0gZHJtTW9kZUdldFJlc291cmNlcyhkYXRhLT5kcm1fZmQpOwo+ID4gKwlkcm1Nb2RlTW9k ZUluZm8gc3RkXzEwMjRfbW9kZSA9IHsKPiA+ICsJCS5jbG9jayA9IDY1MDAwLAo+ID4gKwkJLmhk aXNwbGF5ID0gMTAyNCwKPiA+ICsJCS5oc3luY19zdGFydCA9IDEwNDgsCj4gPiArCQkuaHN5bmNf ZW5kID0gMTE4NCwKPiA+ICsJCS5odG90YWwgPSAxMzQ0LAo+ID4gKwkJLmhza2V3ID0gMCwKPiA+ ICsJCS52ZGlzcGxheSA9IDc2OCwKPiA+ICsJCS52c3luY19zdGFydCA9IDc3MSwKPiA+ICsJCS52 c3luY19lbmQgPSA3NzcsCj4gPiArCQkudnRvdGFsID0gODA2LAo+ID4gKwkJLnZzY2FuID0gMCwK PiA+ICsJCS52cmVmcmVzaCA9IDYwLAo+ID4gKwkJLmZsYWdzID0gMHhBLAo+ID4gKwkJLnR5cGUg PSAweDQwLAo+ID4gKwkJLm5hbWUgPSAiQ3VzdG9tIDEwMjR4NzY4IiwKPiA+ICsJfTsKPiA+ICsJ ZHJtTW9kZU1vZGVJbmZvICptb2RlOwo+ID4gKwlkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3I7 Cj4gPiArCWJvb2wgZm91bmQ7Cj4gPiArCWludCBsaW1pdCA9IG1vZGVfZGVmYXVsdC0+dmRpc3Bs YXktU0laRV9QTEFORTsKPiA+ICsJaW50IGksIGo7Cj4gPiArCj4gPiArCWlmICghcmVzb3VyY2Vz KSB7Cj4gPiArCQlpZ3Rfd2FybigiZHJtTW9kZUdldFJlc291cmNlcyBmYWlsZWQ6ICVzXG4iLAo+ ID4gc3RyZXJyb3IoZXJybm8pKTsKPiA+ICsJCXJldHVybiBtb2RlOwo+ID4gKwl9Cj4gPiArCj4g PiArCWZvdW5kID0gZmFsc2U7Cj4gPiArCWZvciAoaSA9IDA7IGkgPCByZXNvdXJjZXMtPmNvdW50 X2Nvbm5lY3RvcnM7IGkrKykgewo+ID4gKwo+ID4gKwkJY29ubmVjdG9yID0gZHJtTW9kZUdldENv bm5lY3RvckN1cnJlbnQoZGF0YS0KPiA+ID5kcm1fZmQsCj4gPiArCQkJCQkJwqDCoMKgwqDCoMKg wqByZXNvdXJjZXMtCj4gPiA+Y29ubmVjdG9yc1tpXSk7Cj4gPiArCj4gPiArCQlpZiAoIWNvbm5l Y3Rvcikgewo+ID4gKwkJCWlndF93YXJuKCJjb3VsZCBub3QgZ2V0IGNvbm5lY3RvciAlaToKPiA+ ICVzXG4iLAo+ID4gKwkJCQnCoHJlc291cmNlcy0+Y29ubmVjdG9yc1tpXSwKPiA+IHN0cmVycm9y KGVycm5vKSk7Cj4gPiArCQkJY29udGludWU7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlpZiAoIWNv bm5lY3Rvci0+Y291bnRfbW9kZXMpCj4gPiArCQkJY29udGludWU7Cj4gPiArCj4gPiArCQlmb3Ig KGogPSAwOyBqIDwgY29ubmVjdG9yLT5jb3VudF9tb2RlczsgaisrKSB7Cj4gPiArCQkJbW9kZSA9 ICZjb25uZWN0b3ItPm1vZGVzW2pdOwo+ID4gKwo+ID4gKwkJCWlmIChtb2RlLT52ZGlzcGxheSA8 IGxpbWl0KSB7Cj4gPiArCQkJCWZvdW5kID0gdHJ1ZTsKPiA+ICsJCQkJYnJlYWs7Cj4gPiArCQkJ fQo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJZHJtTW9kZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yKTsK PiA+ICsJfQo+ID4gKwo+ID4gKwlkcm1Nb2RlRnJlZVJlc291cmNlcyhyZXNvdXJjZXMpOwo+ID4g Kwo+ID4gKwlpZiAoIWZvdW5kKQo+ID4gKwkJbW9kZSA9ICZzdGRfMTAyNF9tb2RlOwo+ID4gKwo+ ID4gKwlyZXR1cm4gbW9kZTsKPiA+ICt9Cj4gU3RpbGwgbm90IGNvbXBsZXRlbHkgaGFwcHkgYWJv dXQgdGhpcyBwYXJ0Lgo+IAo+IEkgd291bGQgbG9vayBhdCBkYXRhLT5vdXRwdXQtPmNvbmZpZy5j b25uZWN0b3IgZm9yIG1vZGVzLCBhbmQgcmV0dXJuCj4gMTAyNCBtb2RlIGlmIG5vdGhpbmcncyBm b3VuZC4KPiAKPiBTYXZlcyBhIHdob2xlIGxvdCBvZiBkcm0gY2FsbHMuClRydWUuIEEgbG90IG9m IGxpbmVzIGNhbiBiZSBjbGVhbmVkIG91dC4KPiAKPiA+IAo+ID4gK3N0YXRpYyB2b2lkCj4gPiAr dGVzdF9yZXNvbHV0aW9uX3dpdGhfb3V0cHV0KGRhdGFfdCAqZGF0YSkKPiA+ICt7Cj4gPiArCWRy bU1vZGVNb2RlSW5mbyAqbW9kZV9oaSwgKm1vZGVfbG87Cj4gPiArCWludCByZXQ7Cj4gPiArCWlu dCBpdGVyYXRpb25zID0gb3B0Lml0ZXJhdGlvbnMgPCAxID8gMSA6IG9wdC5pdGVyYXRpb25zOwo+ ID4gKwlib29sIGxvb3BfZm9yZXZlcjsKPiA+ICsJaW50IGk7Cj4gPiArCj4gPiArCWlmIChvcHQu aXRlcmF0aW9ucyA9PSBMT09QX0ZPUkVWRVIpCj4gPiArCQlsb29wX2ZvcmV2ZXIgPSB0cnVlOwo+ ID4gKwllbHNlCj4gPiArCQlsb29wX2ZvcmV2ZXIgPSBmYWxzZTsKPiA+ICsKPiA+ICsJaWd0X2lu Zm8oIlRlc3RpbmcgcmVzb2x1dGlvbiB3aXRoIGNvbm5lY3RvciAlcyB1c2luZyBwaXBlCj4gPiAl cyB3aXRoIHNlZWQgJWRcbiIsCj4gPiArCQnCoGlndF9vdXRwdXRfbmFtZShkYXRhLT5vdXRwdXQp LAo+ID4ga21zdGVzdF9waXBlX25hbWUoZGF0YS0+cGlwZSksIG9wdC5zZWVkKTsKPiA+ICsKPiA+ ICsJbW9kZV9oaSA9IGlndF9vdXRwdXRfZ2V0X21vZGUoZGF0YS0+b3V0cHV0KTsKPiA+ICsJbW9k ZV9sbyA9IGdldF9sb3dyZXNfbW9kZShkYXRhLCBtb2RlX2hpKTsKPiA+ICsKPiA+ICsJaSA9IDA7 Cj4gPiArCXdoaWxlIChpIDwgaXRlcmF0aW9ucyB8fCBsb29wX2ZvcmV2ZXIpIHsKPiA+ICsJCS8q IHN3aXRjaCB0byBsb3dlciByZXNvbHV0aW9uICovCj4gPiArCQlyZXQgPSBkcm1Nb2RlU2V0Q3J0 YyhkYXRhLT5kcm1fZmQsIGRhdGEtPmNydGNfaWQsCj4gPiBkYXRhLT5mYi0+ZmJfaWQsIDAsIDAs Cj4gPiArCQkJCcKgwqDCoMKgwqAmZGF0YS0+Y29ubmVjdG9yX2lkLCAxLAo+ID4gbW9kZV9sbyk7 Cj4gPiArCQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Cj4gPiArCj4gPiArCQkvKiBzd2l0Y2ggYmFj ayB0byBoaWdoZXIgcmVzb2x1dGlvbiAqLwo+ID4gKwkJcmV0ID0gZHJtTW9kZVNldENydGMoZGF0 YS0+ZHJtX2ZkLCBkYXRhLT5jcnRjX2lkLAo+ID4gZGF0YS0+ZmItPmZiX2lkLCAwLCAwLAo+ID4g KwkJCQnCoMKgwqDCoMKgJmRhdGEtPmNvbm5lY3Rvcl9pZCwgMSwKPiA+IG1vZGVfaGkpOwo+ID4g KwkJaWd0X2Fzc2VydF9lcShyZXQsIDApOwo+ID4gKwo+ID4gKwkJaSsrOwo+ID4gKwl9Cj4gPiAr fQo+IFVzZSBpZ3Rfb3V0cHV0X292ZXJyaWRlX21vZGUgKyBpZ3RfZGlzcGxheSBjYWxscz8gV2l0 aCB0aGUgdGhyZWFkCj4gYmVpbmcgYSBmb3JrIG5vdywgeW91IGNhbiB1c2UgaWd0X2Rpc3BsYXku IDopCgpGb3Igc29tZSByZWFzb24gSSBrZWVwIHJlY2VpdmluZyBhbiBlcnJvciB3aGVuIHVzaW5n CmlndF9vdXRwdXRfb3ZlcnJpZGVfbW9kZSArIGlndF9kaXNwbGF5IGNhbGxzLiBUaGUgZXJyb3Ig aXMKCmlndC1rbXMtQ1JJVElDQUw6IEZhaWxlZCBhc3NlcnRpb246IGRybU1vZGVEZXN0cm95UHJv cGVydHlCbG9iKGRpc3BsYXktCj5kcm1fZmQsICpibG9iKSA9PSAwCmlndC1rbXMtQ1JJVElDQUw6 IExhc3QgZXJybm86IDEsIE9wZXJhdGlvbiBub3QgcGVybWl0dGVkCgpNYXliZSBib3RoIHRocmVh ZHMgdHJ5IHRvIGFjY2VzcyB0aGlzIGFuZCB0aGlzIHJlcXVlc3QgaXMgbm90IGdyYW50ZWQ/Cldp dGggZHJtTW9kZVNldENydGMoKSBjYWxsIEkgZG9uJ3Qgc2VlIHRoaXMgYmVoYXZpb3IuIE1heWJl IHN0aWNrIHdpdGgKcmF3IGNhbGxzIGluc3RlYWQ/Cgo+ID4gCj4gPiArc3RhdGljIHZvaWQKPiA+ ICtydW5fdGVzdChkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlKQo+ID4gK3sKPiA+ICsJY29s b3JfdCBibHVlwqDCoD0geyAwLjBmLCAwLjBmLCAxLjBmIH07Cj4gPiArCXRlc3RfcG9zaXRpb25f dCB0ZXN0ID0geyAuZGF0YSA9IGRhdGEgfTsKPiA+ICsJaW50IGNvbm5lY3RlZF9vdXRzOwo+ID4g KwlpbnQgbWF4X3BsYW5lcyA9IGRhdGEtPmRpc3BsYXkucGlwZXNbZGF0YS0+cGlwZV0ubl9wbGFu ZXM7Cj4gPiArCj4gPiArCWlmICghb3B0LnVzZXJfc2VlZCkKPiA+ICsJCW9wdC5zZWVkID0gdGlt ZShOVUxMKTsKPiA+ICsKPiA+ICsJY29ubmVjdGVkX291dHMgPSAwOwo+ID4gKwlmb3JfZWFjaF92 YWxpZF9vdXRwdXRfb25fcGlwZSgmZGF0YS0+ZGlzcGxheSwgcGlwZSwgZGF0YS0KPiA+ID5vdXRw dXQpIHsKPiA+ICsJCWRhdGEtPnBpcGUgPSBwaXBlOwo+ID4gKwo+ID4gKwkJZGF0YS0+Y29ubmVj dG9yX2lkID0gZ2V0X2Nvbm5lY3Rvcl9jb25uZWN0ZWQoZGF0YS0KPiA+ID5kcm1fZmQpLT5jb25u ZWN0b3JfaWQ7Cj4gZGF0YS0+b3V0cHV0LT5jb25maWcuY29ubmVjdG9yLT5jb25uZWN0b3JfaWQg PyBUaG91Z2ggSSBkb24ndCB0aGluawo+IHdlIHN0aWxsIG5lZWQgaXQgaWYgeW91IHVzZSB0aGUg aWd0IGRpc3BsYXkgY2FsbHMuCj4gPiAKPiA+ICsJCWlndF9hc3NlcnQoZGF0YS0+Y29ubmVjdG9y X2lkICE9IC1FSU5WQUwpOwo+ID4gKwo+ID4gKwkJZGF0YS0+Y3J0Y19pZCA9IGdldF9jcnRjKGRh dGEtPmRybV9mZCk7Cj4gaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOwo+IAo+IEFn YWluLCBzaG91bGRuJ3QgbmVlZCBjcnRjX2lkLCBidXQgaWYgeW91IGRpZCBkaXNwbGF5LQo+ID5w aXBlc1twaXBlXS5jcnRjX2lkCj4gCj4gV2l0aCB0aG9zZSBmaXhlZCwgSSBkb24ndCB0aGluayB5 b3UgbmVlZCByYXcgZHJtIGNhbGxzIGluIHRoaXMgdGVzdAo+IGF0IGFsbC4gOikKPiAKPiB+TWFh cnRlbgotLSAKTWlrYSBLYWhvbGEgLSBJbnRlbCBPVEMKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=