From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kahola Subject: Re: [PATCH i-g-t v2 03/14] lib/igt_kms: Rework pipe properties to be more atomic, v7. Date: Thu, 19 Oct 2017 13:28:02 +0300 Message-ID: <1508408882.3274.121.camel@intel.com> References: <20171012115435.18880-1-maarten.lankhorst@linux.intel.com> <20171012115435.18880-4-maarten.lankhorst@linux.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 4CB526EA39 for ; Thu, 19 Oct 2017 10:32:27 +0000 (UTC) In-Reply-To: <20171012115435.18880-4-maarten.lankhorst@linux.intel.com> 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 UmV2aWV3ZWQtYnk6IE1pa2EgS2Fob2xhIDxtaWthLmthaG9sYUBpbnRlbC5jb20+CgpPbiBUaHUs IDIwMTctMTAtMTIgYXQgMTM6NTQgKzAyMDAsIE1hYXJ0ZW4gTGFua2hvcnN0IHdyb3RlOgo+IElu IHRoZSBmdXR1cmUgSSB3YW50IHRvIGFsbG93IHRlc3RzIHRvIGNvbW1pdCBtb3JlIHByb3BlcnRp ZXMsCj4gYnV0IGZvciB0aGlzIHRvIHdvcmsgSSBoYXZlIHRvIGZpeCBhbGwgcHJvcGVydGllcyB0 byB3b3JrIGJldHRlcgo+IHdpdGggYXRvbWljIGNvbW1pdC4gSW5zdGVhZCBvZiBzcGVjaWFsIGNh c2luZyBlYWNoCj4gcHJvcGVydHkgbWFrZSBhIGJpdG1hc2sgZm9yIGFsbCBwcm9wZXJ0eSBjaGFu Z2VkIGZsYWdzLCBhbmQgdHJ5IHRvCj4gY29tbWl0IGFsbCBwcm9wZXJ0aWVzLgo+IAo+IFRoaXMg aGFzIGJlZW4gdGhlIG1vc3QgaW52b2x2ZWQgb25lLCBzaW5jZSBsZWdhY3kgcGlwZSBjb21taXQg c3RpbGwKPiBoYW5kbGVzIGEgbG90IG9mIHRoZSBwcm9wZXJ0aWVzIGRpZmZlcmVudGx5IGZyb20g dGhlIHJlc3QuCj4gCj4gQ2hhbmdlcyBzaW5jZSB2MToKPiAtIER1bXAgYWxsIGNoYW5nZWQgcHJv cGVydGllcyBvbiBjb21taXQuCj4gLSBGaXggYnVnIGluIGlndF9waXBlX3JlZnJlc2goKS4KPiBD aGFuZ2VzIHNpbmNlIHYyOgo+IC0gU2V0IHBpcGUgQUNUSVZFIHByb3BlcnR5IGNoYW5nZWQgZmxh ZyBvbiBpbml0Lgo+IENoYW5nZXMgc2luY2UgdjM6Cj4gLSBBZGQgYSBtaXNzaW5nIGlndF9waXBl X3JlZnJlc2goKSB0byBrbXNfYXRvbWljX2ludGVycnVwdGlibGUuCj4gQ2hhbmdlcyBzaW5jZSB2 NDoKPiAtIFBlcmZvcm0gZXJyb3IgaGFuZGxpbmcgd2hlbiBzZXR0aW5nIGN1c3RvbSBjcnRjIHBy b3BlcnRpZXMuCj4gQ2hhbmdlcyBzaW5jZSB2NToKPiAtIE9ubHkgYXR0ZW1wdCB0byBjb21taXQg Y2hhbmdlcyBwcm9wZXJ0aWVzLgo+IENoYW5nZXMgc2luY2UgdjY6Cj4gLSBDbGVhciBPVVRfRkVO Q0VfUFRSIG9uIHN1Y2Nlc2Z1bCBjb21taXQuCj4gCj4gU2lnbmVkLW9mZi1ieTogTWFhcnRlbiBM YW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4LmludGVsLmNvbT4KPiAtLS0KPiDCoGxp Yi9pZ3Rfa21zLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8IDIz MSArKysrKysrKysrKysrKysrKysrKy0tLS0tLQo+IC0tLS0tLS0tLS0tLQo+IMKgbGliL2lndF9r bXMuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgNzcgKysr KystLS0tLS0tLQo+IMKgdGVzdHMva21zX2F0b21pY19pbnRlcnJ1cHRpYmxlLmPCoMKgfMKgwqDC oDggKy0KPiDCoHRlc3RzL2ttc19hdG9taWNfdHJhbnNpdGlvbi5jwqDCoMKgwqDCoHzCoMKgwqAy ICstCj4gwqB0ZXN0cy9rbXNfY3J0Y19iYWNrZ3JvdW5kX2NvbG9yLmMgfMKgwqDCoDIgKy0KPiDC oDUgZmlsZXMgY2hhbmdlZCwgMTU5IGluc2VydGlvbnMoKyksIDE2MSBkZWxldGlvbnMoLSkKPiAK PiBkaWZmIC0tZ2l0IGEvbGliL2lndF9rbXMuYyBiL2xpYi9pZ3Rfa21zLmMKPiBpbmRleCBlNzdh ZTVkNjk2ZGEuLjAyZGUzOWI4ZmM3ZiAxMDA2NDQKPiAtLS0gYS9saWIvaWd0X2ttcy5jCj4gKysr IGIvbGliL2lndF9rbXMuYwo+IEBAIC0yNTksOCArMjU5LDggQEAgaWd0X2F0b21pY19maWxsX2Nv bm5lY3Rvcl9wcm9wcyhpZ3RfZGlzcGxheV90Cj4gKmRpc3BsYXksIGlndF9vdXRwdXRfdCAqb3V0 cHV0LAo+IMKgfQo+IMKgCj4gwqBzdGF0aWMgdm9pZAo+IC1pZ3RfYXRvbWljX2ZpbGxfcGlwZV9w cm9wcyhpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpZ3RfcGlwZV90ICpwaXBlLAo+IC0JCQlpbnQg bnVtX2NydGNfcHJvcHMsIGNvbnN0IGNoYXIKPiAqKmNydGNfcHJvcF9uYW1lcykKPiAraWd0X2Zp bGxfcGlwZV9wcm9wcyhpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpZ3RfcGlwZV90ICpwaXBlLAo+ ICsJCcKgwqDCoMKgaW50IG51bV9jcnRjX3Byb3BzLCBjb25zdCBjaGFyCj4gKipjcnRjX3Byb3Bf bmFtZXMpCj4gwqB7Cj4gwqAJZHJtTW9kZU9iamVjdFByb3BlcnRpZXNQdHIgcHJvcHM7Cj4gwqAJ aW50IGksIGosIGZkOwo+IEBAIC0yNzgsNyArMjc4LDcgQEAgaWd0X2F0b21pY19maWxsX3BpcGVf cHJvcHMoaWd0X2Rpc3BsYXlfdAo+ICpkaXNwbGF5LCBpZ3RfcGlwZV90ICpwaXBlLAo+IMKgCQkJ aWYgKHN0cmNtcChwcm9wLT5uYW1lLCBjcnRjX3Byb3BfbmFtZXNbal0pCj4gIT0gMCkKPiDCoAkJ CQljb250aW51ZTsKPiDCoAo+IC0JCQlwaXBlLT5hdG9taWNfcHJvcHNfY3J0Y1tqXSA9IHByb3Bz LQo+ID5wcm9wc1tpXTsKPiArCQkJcGlwZS0+cHJvcHNbal0gPSBwcm9wcy0+cHJvcHNbaV07Cj4g wqAJCQlicmVhazsKPiDCoAkJfQo+IMKgCj4gQEAgLTE2MjAsMTMgKzE2MjAsNiBAQCBnZXRfY3J0 Y19wcm9wZXJ0eShpbnQgZHJtX2ZkLCB1aW50MzJfdAo+IGNydGNfaWQsIGNvbnN0IGNoYXIgKm5h bWUsCj4gwqAJCQkJwqDCoMKgwqBuYW1lLCBwcm9wX2lkLCB2YWx1ZSwgcHJvcCk7Cj4gwqB9Cj4g wqAKPiAtc3RhdGljIHZvaWQKPiAtaWd0X2NydGNfc2V0X3Byb3BlcnR5KGlndF9waXBlX3QgKnBp cGUsIHVpbnQzMl90IHByb3BfaWQsIHVpbnQ2NF90Cj4gdmFsdWUpCj4gLXsKPiAtCWRybU1vZGVP YmplY3RTZXRQcm9wZXJ0eShwaXBlLT5kaXNwbGF5LT5kcm1fZmQsCj4gLQkJcGlwZS0+Y3J0Y19p ZCwgRFJNX01PREVfT0JKRUNUX0NSVEMsIHByb3BfaWQsCj4gdmFsdWUpOwo+IC19Cj4gLQo+IMKg LyoKPiDCoCAqIFdhbGsgYSBwbGFuZSdzIHByb3BlcnR5IGxpc3QgdG8gZGV0ZXJtaW5lIGl0cyB0 eXBlLsKgwqBJZiB3ZSBkb24ndAo+IMKgICogZmluZCBhIHR5cGUgcHJvcGVydHksIHRoZW4gdGhl IGtlcm5lbCBkb2Vzbid0IHN1cHBvcnQgdW5pdmVyc2FsCj4gQEAgLTE2OTAsNyArMTY4Myw2IEBA IHZvaWQgaWd0X2Rpc3BsYXlfaW5pdChpZ3RfZGlzcGxheV90ICpkaXNwbGF5LAo+IGludCBkcm1f ZmQpCj4gwqAJCWludCBwID0gMTsKPiDCoAkJaW50IGosIHR5cGU7Cj4gwqAJCXVpbnQ4X3QgbGFz dF9wbGFuZSA9IDAsIG5fcGxhbmVzID0gMDsKPiAtCQl1aW50NjRfdCBwcm9wX3ZhbHVlOwo+IMKg Cj4gwqAJCXBpcGUtPmNydGNfaWQgPSByZXNvdXJjZXMtPmNydGNzW2ldOwo+IMKgCQlwaXBlLT5k aXNwbGF5ID0gZGlzcGxheTsKPiBAQCAtMTcwMCwyOSArMTY5MiwxNiBAQCB2b2lkIGlndF9kaXNw bGF5X2luaXQoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwKPiBpbnQgZHJtX2ZkKQo+IMKgCQlwaXBl LT5wbGFuZXMgPSBOVUxMOwo+IMKgCQlwaXBlLT5vdXRfZmVuY2VfZmQgPSAtMTsKPiDCoAo+ICsJ CWlndF9maWxsX3BpcGVfcHJvcHMoZGlzcGxheSwgcGlwZSwKPiBJR1RfTlVNX0NSVENfUFJPUFMs IGlndF9jcnRjX3Byb3BfbmFtZXMpOwo+ICsKPiArCQkvKiBGb3JjZSBtb2Rlc2V0IGRpc2FibGUg b24gZmlyc3QgY29tbWl0ICovCj4gKwkJaWd0X3BpcGVfb2JqX3NldF9wcm9wX2NoYW5nZWQocGlw ZSwKPiBJR1RfQ1JUQ19NT0RFX0lEKTsKPiArCQlpZ3RfcGlwZV9vYmpfc2V0X3Byb3BfY2hhbmdl ZChwaXBlLAo+IElHVF9DUlRDX0FDVElWRSk7Cj4gKwo+IMKgCQlnZXRfY3J0Y19wcm9wZXJ0eShk aXNwbGF5LT5kcm1fZmQsIHBpcGUtPmNydGNfaWQsCj4gLQkJCQnCoMKgwqDCoCJiYWNrZ3JvdW5k X2NvbG9yIiwKPiAtCQkJCcKgwqDCoMKgJnBpcGUtPmJhY2tncm91bmRfcHJvcGVydHksCj4gLQkJ CQnCoMKgwqDCoCZwcm9wX3ZhbHVlLAo+ICsJCQkJwqDCoMKgwqAiYmFja2dyb3VuZF9jb2xvciIs IE5VTEwsCj4gKwkJCQnCoMKgwqDCoCZwaXBlLQo+ID52YWx1ZXNbSUdUX0NSVENfQkFDS0dST1VO RF0sCj4gwqAJCQkJwqDCoMKgwqBOVUxMKTsKPiAtCQlwaXBlLT5iYWNrZ3JvdW5kID0gKHVpbnQz Ml90KXByb3BfdmFsdWU7Cj4gLQkJZ2V0X2NydGNfcHJvcGVydHkoZGlzcGxheS0+ZHJtX2ZkLCBw aXBlLT5jcnRjX2lkLAo+IC0JCQkJwqDCoCJERUdBTU1BX0xVVCIsCj4gLQkJCQnCoMKgJnBpcGUt PmRlZ2FtbWFfcHJvcGVydHksCj4gLQkJCQnCoMKgTlVMTCwKPiAtCQkJCcKgwqBOVUxMKTsKPiAt CQlnZXRfY3J0Y19wcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIHBpcGUtPmNydGNfaWQsCj4gLQkJ CQnCoMKgIkNUTSIsCj4gLQkJCQnCoMKgJnBpcGUtPmN0bV9wcm9wZXJ0eSwKPiAtCQkJCcKgwqBO VUxMLAo+IC0JCQkJwqDCoE5VTEwpOwo+IC0JCWdldF9jcnRjX3Byb3BlcnR5KGRpc3BsYXktPmRy bV9mZCwgcGlwZS0+Y3J0Y19pZCwKPiAtCQkJCcKgwqAiR0FNTUFfTFVUIiwKPiAtCQkJCcKgwqAm cGlwZS0+Z2FtbWFfcHJvcGVydHksCj4gLQkJCQnCoMKgTlVMTCwKPiAtCQkJCcKgwqBOVUxMKTsK PiAtCj4gLQkJaWd0X2F0b21pY19maWxsX3BpcGVfcHJvcHMoZGlzcGxheSwgcGlwZSwKPiBJR1Rf TlVNX0NSVENfUFJPUFMsIGlndF9jcnRjX3Byb3BfbmFtZXMpOwo+IMKgCj4gwqAJCS8qIGNvdW50 IG51bWJlciBvZiB2YWxpZCBwbGFuZXMgKi8KPiDCoAkJZm9yIChqID0gMDsgaiA8IHBsYW5lX3Jl c291cmNlcy0+Y291bnRfcGxhbmVzOyBqKyspCj4gewo+IEBAIC0xODEzLDggKzE3OTIsNiBAQCB2 b2lkIGlndF9kaXNwbGF5X2luaXQoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwKPiBpbnQgZHJtX2Zk KQo+IMKgCQkJaWd0X2Fzc2VydF9lcShwLCBuX3BsYW5lcyk7Cj4gwqAKPiDCoAkJcGlwZS0+bl9w bGFuZXMgPSBuX3BsYW5lczsKPiAtCj4gLQkJcGlwZS0+bW9kZV9jaGFuZ2VkID0gdHJ1ZTsKPiDC oAl9Cj4gwqAKPiDCoAkvKgo+IEBAIC0yMjkxLDcgKzIyNjgsNyBAQCBzdGF0aWMgaW50Cj4gaWd0 X3ByaW1hcnlfcGxhbmVfY29tbWl0X2xlZ2FjeShpZ3RfcGxhbmVfdCAqcHJpbWFyeSwKPiDCoAo+ IMKgCWlmICghaWd0X3BsYW5lX2lzX3Byb3BfY2hhbmdlZChwcmltYXJ5LCBJR1RfUExBTkVfRkJf SUQpICYmCj4gwqAJwqDCoMKgwqAhKHByaW1hcnktPmNoYW5nZWQgJiBJR1RfUExBTkVfQ09PUkRf Q0hBTkdFRF9NQVNLKSAmJgo+IC0JwqDCoMKgwqAhcHJpbWFyeS0+cGlwZS0+bW9kZV9jaGFuZ2Vk KQo+ICsJwqDCoMKgwqAhaWd0X3BpcGVfb2JqX2lzX3Byb3BfY2hhbmdlZChwcmltYXJ5LT5waXBl LAo+IElHVF9DUlRDX01PREVfSUQpKQo+IMKgCQlyZXR1cm4gMDsKPiDCoAo+IMKgCWNydGNfaWQg PSBwaXBlLT5jcnRjX2lkOwo+IEBAIC0yMzYwLDYgKzIzMzcsMTYgQEAgc3RhdGljIGludCBpZ3Rf cGxhbmVfY29tbWl0KGlndF9wbGFuZV90Cj4gKnBsYW5lLAo+IMKgCX0KPiDCoH0KPiDCoAo+ICtz dGF0aWMgYm9vbCBpc19hdG9taWNfcHJvcChlbnVtIGlndF9hdG9taWNfY3J0Y19wcm9wZXJ0aWVz IHByb3ApCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBpZiAocHJvcCA9PSBJR1RfQ1JUQ19NT0RFX0lE IHx8Cj4gKwnCoMKgwqBwcm9wID09IElHVF9DUlRDX0FDVElWRSB8fAo+ICsJwqDCoMKgcHJvcCA9 PSBJR1RfQ1JUQ19PVVRfRkVOQ0VfUFRSKQo+ICsJCXJldHVybiB0cnVlOwo+ICsKPiArCXJldHVy biBmYWxzZTsKPiArfQo+ICsKPiDCoC8qCj4gwqAgKiBDb21taXQgYWxsIHBsYW5lIGNoYW5nZXMg dG8gYW4gb3V0cHV0LsKgwqBOb3RlIHRoYXQgaWYgQHMgaXMKPiBDT01NSVRfTEVHQUNZLAo+IMKg ICogZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBwcmltYXJ5IHBsYW5lIHdpbGwgYWxzbyBlbmFibGUv ZGlzYWJsZSB0aGUKPiBDUlRDLgo+IEBAIC0yMzc3LDE5ICsyMzY0LDE3IEBAIHN0YXRpYyBpbnQg aWd0X3BpcGVfY29tbWl0KGlndF9waXBlX3QgKnBpcGUsCj4gwqAJaW50IGk7Cj4gwqAJaW50IHJl dDsKPiDCoAo+IC0JaWYgKHBpcGUtPmJhY2tncm91bmRfY2hhbmdlZCkgewo+IC0JCWlndF9jcnRj X3NldF9wcm9wZXJ0eShwaXBlLCBwaXBlLQo+ID5iYWNrZ3JvdW5kX3Byb3BlcnR5LAo+IC0JCQlw aXBlLT5iYWNrZ3JvdW5kKTsKPiAtCX0KPiArCWZvciAoaSA9IDA7IGkgPCBJR1RfTlVNX0NSVENf UFJPUFM7IGkrKykKPiArCQlpZiAoaWd0X3BpcGVfb2JqX2lzX3Byb3BfY2hhbmdlZChwaXBlLCBp KSAmJgo+ICsJCcKgwqDCoMKgIWlzX2F0b21pY19wcm9wKGkpKSB7Cj4gKwkJCWlndF9hc3NlcnQo cGlwZS0+cHJvcHNbaV0pOwo+IMKgCj4gLQlpZiAocGlwZS0+Y29sb3JfbWdtdF9jaGFuZ2VkKSB7 Cj4gLQkJaWd0X2NydGNfc2V0X3Byb3BlcnR5KHBpcGUsIHBpcGUtPmRlZ2FtbWFfcHJvcGVydHks Cj4gLQkJCQnCoMKgwqDCoMKgwqBwaXBlLT5kZWdhbW1hX2Jsb2IpOwo+IC0JCWlndF9jcnRjX3Nl dF9wcm9wZXJ0eShwaXBlLCBwaXBlLT5jdG1fcHJvcGVydHksCj4gLQkJCQnCoMKgwqDCoMKgwqBw aXBlLT5jdG1fYmxvYik7Cj4gLQkJaWd0X2NydGNfc2V0X3Byb3BlcnR5KHBpcGUsIHBpcGUtPmdh bW1hX3Byb3BlcnR5LAo+IC0JCQkJwqDCoMKgwqDCoMKgcGlwZS0+Z2FtbWFfYmxvYik7Cj4gLQl9 Cj4gKwkJCXJldCA9IGRybU1vZGVPYmplY3RTZXRQcm9wZXJ0eShwaXBlLQo+ID5kaXNwbGF5LT5k cm1fZmQsCj4gKwkJCQlwaXBlLT5jcnRjX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQ1JUQywKPiArCQkJ CXBpcGUtPnByb3BzW2ldLCBwaXBlLT52YWx1ZXNbaV0pOwo+ICsKPiArCQkJQ0hFQ0tfUkVUVVJO KHJldCwgZmFpbF9vbl9lcnJvcik7Cj4gKwkJfQo+IMKgCj4gwqAJZm9yIChpID0gMDsgaSA8IHBp cGUtPm5fcGxhbmVzOyBpKyspIHsKPiDCoAkJaWd0X3BsYW5lX3QgKnBsYW5lID0gJnBpcGUtPnBs YW5lc1tpXTsKPiBAQCAtMjQwMiw5ICsyMzg3LDEwIEBAIHN0YXRpYyBpbnQgaWd0X3BpcGVfY29t bWl0KGlndF9waXBlX3QgKnBpcGUsCj4gwqB9Cj4gwqAKPiDCoHN0YXRpYyB2b2lkCj4gLWlndF9w aXBlX3JlcGxhY2VfYmxvYihpZ3RfcGlwZV90ICpwaXBlLCB1aW50NjRfdCAqYmxvYiwgdm9pZCAq cHRyLAo+IHNpemVfdCBsZW5ndGgpCj4gK2lndF9waXBlX3JlcGxhY2VfYmxvYihpZ3RfcGlwZV90 ICpwaXBlLCBlbnVtCj4gaWd0X2F0b21pY19jcnRjX3Byb3BlcnRpZXMgcHJvcCwgdm9pZCAqcHRy LCBzaXplX3QgbGVuZ3RoKQo+IMKgewo+IMKgCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSBwaXBl LT5kaXNwbGF5Owo+ICsJdWludDY0X3QgKmJsb2IgPSAmcGlwZS0+dmFsdWVzW3Byb3BdOwo+IMKg CXVpbnQzMl90IGJsb2JfaWQgPSAwOwo+IMKgCj4gwqAJaWYgKCpibG9iICE9IDApCj4gQEAgLTI0 MTYsNiArMjQwMiw3IEBAIGlndF9waXBlX3JlcGxhY2VfYmxvYihpZ3RfcGlwZV90ICpwaXBlLAo+ IHVpbnQ2NF90ICpibG9iLCB2b2lkICpwdHIsIHNpemVfdCBsZW5ndGgKPiDCoAkJCQkJCcKgwqDC oMKgwqBwdHIsIGxlbmd0aCwKPiAmYmxvYl9pZCkgPT0gMCk7Cj4gwqAKPiDCoAkqYmxvYiA9IGJs b2JfaWQ7Cj4gKwlpZ3RfcGlwZV9vYmpfc2V0X3Byb3BfY2hhbmdlZChwaXBlLCBwcm9wKTsKPiDC oH0KPiDCoAo+IMKgLyoKPiBAQCAtMjQyMyw1MSArMjQxMCwyMyBAQCBpZ3RfcGlwZV9yZXBsYWNl X2Jsb2IoaWd0X3BpcGVfdCAqcGlwZSwKPiB1aW50NjRfdCAqYmxvYiwgdm9pZCAqcHRyLCBzaXpl X3QgbGVuZ3RoCj4gwqAgKi8KPiDCoHN0YXRpYyB2b2lkIGlndF9hdG9taWNfcHJlcGFyZV9jcnRj X2NvbW1pdChpZ3RfcGlwZV90ICpwaXBlX29iaiwKPiBkcm1Nb2RlQXRvbWljUmVxICpyZXEpCj4g wqB7Cj4gLQlpZiAocGlwZV9vYmotPmJhY2tncm91bmRfY2hhbmdlZCkKPiAtCQlpZ3RfYXRvbWlj X3BvcHVsYXRlX2NydGNfcmVxKHJlcSwgcGlwZV9vYmosCj4gSUdUX0NSVENfQkFDS0dST1VORCwg cGlwZV9vYmotPmJhY2tncm91bmQpOwo+IC0KPiAtCWlmIChwaXBlX29iai0+Y29sb3JfbWdtdF9j aGFuZ2VkKSB7Cj4gLQkJaWd0X2F0b21pY19wb3B1bGF0ZV9jcnRjX3JlcShyZXEsIHBpcGVfb2Jq LAo+IElHVF9DUlRDX0RFR0FNTUFfTFVULCBwaXBlX29iai0+ZGVnYW1tYV9ibG9iKTsKPiAtCQlp Z3RfYXRvbWljX3BvcHVsYXRlX2NydGNfcmVxKHJlcSwgcGlwZV9vYmosCj4gSUdUX0NSVENfQ1RN LCBwaXBlX29iai0+Y3RtX2Jsb2IpOwo+IC0JCWlndF9hdG9taWNfcG9wdWxhdGVfY3J0Y19yZXEo cmVxLCBwaXBlX29iaiwKPiBJR1RfQ1JUQ19HQU1NQV9MVVQsIHBpcGVfb2JqLT5nYW1tYV9ibG9i KTsKPiAtCX0KPiAtCj4gLQlpZiAocGlwZV9vYmotPm1vZGVfY2hhbmdlZCkgewo+IC0JCWlndF9v dXRwdXRfdCAqb3V0cHV0ID0KPiBpZ3RfcGlwZV9nZXRfb3V0cHV0KHBpcGVfb2JqKTsKPiAtCj4g LQkJaWYgKCFvdXRwdXQpIHsKPiAtCQkJaWd0X3BpcGVfcmVwbGFjZV9ibG9iKHBpcGVfb2JqLCAm cGlwZV9vYmotCj4gPm1vZGVfYmxvYiwgTlVMTCwgMCk7Cj4gLQo+IC0JCQlMT0cocGlwZV9vYmot PmRpc3BsYXksICIlczogU2V0dGluZyBOVUxMCj4gbW9kZVxuIiwKPiAtCQkJwqDCoMKgwqBrbXN0 ZXN0X3BpcGVfbmFtZShwaXBlX29iai0+cGlwZSkpOwo+IC0JCX0gZWxzZSB7Cj4gLQkJCWRybU1v ZGVNb2RlSW5mbyAqbW9kZSA9Cj4gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOwo+ICsJaW50 IGk7Cj4gwqAKPiAtCQkJaWd0X3BpcGVfcmVwbGFjZV9ibG9iKHBpcGVfb2JqLCAmcGlwZV9vYmot Cj4gPm1vZGVfYmxvYiwgbW9kZSwgc2l6ZW9mKCptb2RlKSk7Cj4gKwlmb3IgKGkgPSAwOyBpIDwg SUdUX05VTV9DUlRDX1BST1BTOyBpKyspIHsKPiArCQlpZiAoIWlndF9waXBlX29ial9pc19wcm9w X2NoYW5nZWQocGlwZV9vYmosIGkpKQo+ICsJCQljb250aW51ZTsKPiDCoAo+IC0JCQlMT0cocGlw ZV9vYmotPmRpc3BsYXksICIlczogU2V0dGluZyBtb2RlICVzCj4gZnJvbSAlc1xuIiwKPiAtCQkJ wqDCoMKgwqBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlX29iai0+cGlwZSksCj4gLQkJCcKgwqDCoMKg bW9kZS0+bmFtZSwgaWd0X291dHB1dF9uYW1lKG91dHB1dCkpOwo+IC0JCX0KPiArCQlpZ3RfZGVi dWcoIlBpcGUgJXM6IFNldHRpbmcgcHJvcGVydHkgXCIlc1wiIHRvCj4gMHglIlBSSXg2NCIvJSJQ UklpNjQiXG4iLAo+ICsJCQlrbXN0ZXN0X3BpcGVfbmFtZShwaXBlX29iai0+cGlwZSksCj4gaWd0 X2NydGNfcHJvcF9uYW1lc1tpXSwKPiArCQkJcGlwZV9vYmotPnZhbHVlc1tpXSwgcGlwZV9vYmot PnZhbHVlc1tpXSk7Cj4gwqAKPiAtCQlpZ3RfYXRvbWljX3BvcHVsYXRlX2NydGNfcmVxKHJlcSwg cGlwZV9vYmosCj4gSUdUX0NSVENfTU9ERV9JRCwgcGlwZV9vYmotPm1vZGVfYmxvYik7Cj4gLQkJ aWd0X2F0b21pY19wb3B1bGF0ZV9jcnRjX3JlcShyZXEsIHBpcGVfb2JqLAo+IElHVF9DUlRDX0FD VElWRSwgISFvdXRwdXQpOwo+ICsJCWlndF9hc3NlcnRfbHQoMCwgZHJtTW9kZUF0b21pY0FkZFBy b3BlcnR5KHJlcSwKPiBwaXBlX29iai0+Y3J0Y19pZCwgcGlwZV9vYmotPnByb3BzW2ldLCBwaXBl X29iai0+dmFsdWVzW2ldKSk7Cj4gwqAJfQo+IMKgCj4gwqAJaWYgKHBpcGVfb2JqLT5vdXRfZmVu Y2VfZmQgIT0gLTEpIHsKPiDCoAkJY2xvc2UocGlwZV9vYmotPm91dF9mZW5jZV9mZCk7Cj4gwqAJ CXBpcGVfb2JqLT5vdXRfZmVuY2VfZmQgPSAtMTsKPiDCoAl9Cj4gLQo+IC0JaWYgKHBpcGVfb2Jq LT5vdXRfZmVuY2VfcmVxdWVzdGVkKQo+IC0Jewo+IC0JCWlndF9hdG9taWNfcG9wdWxhdGVfY3J0 Y19yZXEocmVxLCBwaXBlX29iaiwKPiBJR1RfQ1JUQ19PVVRfRkVOQ0VfUFRSLAo+IC0JCcKgwqDC oMKgKHVpbnQ2NF90KSh1aW50cHRyX3QpICZwaXBlX29iai0+b3V0X2ZlbmNlX2ZkKTsKPiAtCX0K PiAtCj4gLQkvKgo+IC0JwqAqCVRPRE86IEFkZCBhbGwgY3J0YyBsZXZlbCBwcm9wZXJ0aWVzIGhl cmUKPiAtCcKgKi8KPiDCoH0KPiDCoAo+IMKgLyoKPiBAQCAtMjU1OCwxNSArMjUxNywyMiBAQCBk aXNwbGF5X2NvbW1pdF9jaGFuZ2VkKGlndF9kaXNwbGF5X3QKPiAqZGlzcGxheSwgZW51bSBpZ3Rf Y29tbWl0X3N0eWxlIHMpCj4gwqAJCWlndF9waXBlX3QgKnBpcGVfb2JqID0gJmRpc3BsYXktPnBp cGVzW3BpcGVdOwo+IMKgCQlpZ3RfcGxhbmVfdCAqcGxhbmU7Cj4gwqAKPiAtCQlwaXBlX29iai0+ Y29sb3JfbWdtdF9jaGFuZ2VkID0gZmFsc2U7Cj4gLQkJcGlwZV9vYmotPmJhY2tncm91bmRfY2hh bmdlZCA9IGZhbHNlOwo+ICsJCWlmIChzID09IENPTU1JVF9BVE9NSUMpIHsKPiArCQkJaWYgKGln dF9waXBlX29ial9pc19wcm9wX2NoYW5nZWQocGlwZV9vYmosCj4gSUdUX0NSVENfT1VUX0ZFTkNF X1BUUikpCj4gKwkJCQlpZ3RfYXNzZXJ0KHBpcGVfb2JqLT5vdXRfZmVuY2VfZmQgPj0KPiAwKTsK PiDCoAo+IC0JCWlmIChzICE9IENPTU1JVF9VTklWRVJTQUwpCj4gLQkJCXBpcGVfb2JqLT5tb2Rl X2NoYW5nZWQgPSBmYWxzZTsKPiAtCj4gLQkJaWYgKHMgPT0gQ09NTUlUX0FUT01JQyAmJiBwaXBl X29iai0KPiA+b3V0X2ZlbmNlX3JlcXVlc3RlZCkgewo+IC0JCQlwaXBlX29iai0+b3V0X2ZlbmNl X3JlcXVlc3RlZCA9IGZhbHNlOwo+IC0JCQlpZ3RfYXNzZXJ0KHBpcGVfb2JqLT5vdXRfZmVuY2Vf ZmQgPj0gMCk7Cj4gKwkJCXBpcGVfb2JqLT52YWx1ZXNbSUdUX0NSVENfT1VUX0ZFTkNFX1BUUl0g PQo+IDA7Cj4gKwkJCXBpcGVfb2JqLT5jaGFuZ2VkID0gMDsKPiArCQl9IGVsc2Ugewo+ICsJCQlp Z3RfcGlwZV9vYmpfY2xlYXJfcHJvcF9jaGFuZ2VkKHBpcGVfb2JqLAo+IElHVF9DUlRDX0JBQ0tH Uk9VTkQpOwo+ICsJCQlpZ3RfcGlwZV9vYmpfY2xlYXJfcHJvcF9jaGFuZ2VkKHBpcGVfb2JqLAo+ IElHVF9DUlRDX0NUTSk7Cj4gKwkJCWlndF9waXBlX29ial9jbGVhcl9wcm9wX2NoYW5nZWQocGlw ZV9vYmosCj4gSUdUX0NSVENfREVHQU1NQV9MVVQpOwo+ICsJCQlpZ3RfcGlwZV9vYmpfY2xlYXJf cHJvcF9jaGFuZ2VkKHBpcGVfb2JqLAo+IElHVF9DUlRDX0dBTU1BX0xVVCk7Cj4gKwo+ICsJCQlp ZiAocyAhPSBDT01NSVRfVU5JVkVSU0FMKSB7Cj4gKwkJCQlpZ3RfcGlwZV9vYmpfY2xlYXJfcHJv cF9jaGFuZ2VkKHBpcGUKPiBfb2JqLCBJR1RfQ1JUQ19NT0RFX0lEKTsKPiArCQkJCWlndF9waXBl X29ial9jbGVhcl9wcm9wX2NoYW5nZWQocGlwZQo+IF9vYmosIElHVF9DUlRDX0FDVElWRSk7Cj4g KwkJCX0KPiDCoAkJfQo+IMKgCj4gwqAJCWZvcl9lYWNoX3BsYW5lX29uX3BpcGUoZGlzcGxheSwg cGlwZSwgcGxhbmUpIHsKPiBAQCAtMjgyMCwzMyArMjc4Niw4MyBAQCB2b2lkIGlndF9vdXRwdXRf b3ZlcnJpZGVfbW9kZShpZ3Rfb3V0cHV0X3QKPiAqb3V0cHV0LCBkcm1Nb2RlTW9kZUluZm8gKm1v ZGUpCj4gwqAKPiDCoAlvdXRwdXQtPnVzZV9vdmVycmlkZV9tb2RlID0gISFtb2RlOwo+IMKgCj4g LQlpZiAocGlwZSkKPiAtCQlwaXBlLT5tb2RlX2NoYW5nZWQgPSB0cnVlOwo+ICsJaWYgKHBpcGUp IHsKPiArCQlpZiAob3V0cHV0LT5kaXNwbGF5LT5pc19hdG9taWMpCj4gKwkJCWlndF9waXBlX3Jl cGxhY2VfYmxvYihwaXBlLAo+IElHVF9DUlRDX01PREVfSUQsIGlndF9vdXRwdXRfZ2V0X21vZGUo b3V0cHV0KSwgc2l6ZW9mKCptb2RlKSk7Cj4gKwkJZWxzZQo+ICsJCQlpZ3RfcGlwZV9vYmpfc2V0 X3Byb3BfY2hhbmdlZChwaXBlLAo+IElHVF9DUlRDX01PREVfSUQpOwo+ICsJfQo+IMKgfQo+IMKg Cj4gwqB2b2lkIGlndF9vdXRwdXRfc2V0X3BpcGUoaWd0X291dHB1dF90ICpvdXRwdXQsIGVudW0g cGlwZSBwaXBlKQo+IMKgewo+IMKgCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSBvdXRwdXQtPmRp c3BsYXk7Cj4gLQlpZ3RfcGlwZV90ICpvbGRfcGlwZTsKPiArCWlndF9waXBlX3QgKm9sZF9waXBl ID0gTlVMTCwgKnBpcGVfb2JqID0gTlVMTDs7Cj4gwqAKPiDCoAlpZ3RfYXNzZXJ0KG91dHB1dC0+ bmFtZSk7Cj4gwqAKPiAtCWlmIChvdXRwdXQtPnBlbmRpbmdfcGlwZSAhPSBQSVBFX05PTkUpIHsK PiArCWlmIChvdXRwdXQtPnBlbmRpbmdfcGlwZSAhPSBQSVBFX05PTkUpCj4gwqAJCW9sZF9waXBl ID0gaWd0X291dHB1dF9nZXRfZHJpdmluZ19waXBlKG91dHB1dCk7Cj4gwqAKPiAtCQlvbGRfcGlw ZS0+bW9kZV9jaGFuZ2VkID0gdHJ1ZTsKPiAtCX0KPiArCWlmIChwaXBlICE9IFBJUEVfTk9ORSkK PiArCQlwaXBlX29iaiA9ICZkaXNwbGF5LT5waXBlc1twaXBlXTsKPiDCoAo+IMKgCUxPRyhkaXNw bGF5LCAiJXM6IHNldF9waXBlKCVzKVxuIiwgaWd0X291dHB1dF9uYW1lKG91dHB1dCksCj4gwqAJ wqDCoMKgwqBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSk7Cj4gwqAJb3V0cHV0LT5wZW5kaW5nX3Bp cGUgPSBwaXBlOwo+IMKgCj4gLQlpZiAocGlwZSAhPSBQSVBFX05PTkUpCj4gLQkJZGlzcGxheS0+ cGlwZXNbcGlwZV0ubW9kZV9jaGFuZ2VkID0gdHJ1ZTsKPiArCWlmIChvbGRfcGlwZSkgewo+ICsJ CWlndF9vdXRwdXRfdCAqb2xkX291dHB1dDsKPiArCj4gKwkJb2xkX291dHB1dCA9IGlndF9waXBl X2dldF9vdXRwdXQob2xkX3BpcGUpOwo+ICsJCWlmICghb2xkX291dHB1dCkgewo+ICsJCQlpZiAo ZGlzcGxheS0+aXNfYXRvbWljKQo+ICsJCQkJaWd0X3BpcGVfcmVwbGFjZV9ibG9iKG9sZF9waXBl LAo+IElHVF9DUlRDX01PREVfSUQsIE5VTEwsIDApOwo+ICsJCQllbHNlCj4gKwkJCQlpZ3RfcGlw ZV9vYmpfc2V0X3Byb3BfY2hhbmdlZChvbGRfcGkKPiBwZSwgSUdUX0NSVENfTU9ERV9JRCk7Cj4g Kwo+ICsJCQlpZ3RfcGlwZV9vYmpfc2V0X3Byb3BfdmFsdWUob2xkX3BpcGUsCj4gSUdUX0NSVENf QUNUSVZFLCAwKTsKPiArCQl9Cj4gKwl9Cj4gwqAKPiDCoAlpZ3Rfb3V0cHV0X3NldF9wcm9wX3Zh bHVlKG91dHB1dCwgSUdUX0NPTk5FQ1RPUl9DUlRDX0lELAo+IHBpcGUgPT0gUElQRV9OT05FID8g MCA6IGRpc3BsYXktPnBpcGVzW3BpcGVdLmNydGNfaWQpOwo+IMKgCj4gwqAJaWd0X291dHB1dF9y ZWZyZXNoKG91dHB1dCk7Cj4gKwo+ICsJaWYgKHBpcGVfb2JqKSB7Cj4gKwkJaWYgKGRpc3BsYXkt PmlzX2F0b21pYykKPiArCQkJaWd0X3BpcGVfcmVwbGFjZV9ibG9iKHBpcGVfb2JqLAo+IElHVF9D UlRDX01PREVfSUQsIGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KSwKPiBzaXplb2YoZHJtTW9k ZU1vZGVJbmZvKSk7Cj4gKwkJZWxzZQo+ICsJCQlpZ3RfcGlwZV9vYmpfc2V0X3Byb3BfY2hhbmdl ZChwaXBlX29iaiwKPiBJR1RfQ1JUQ19NT0RFX0lEKTsKPiArCj4gKwkJaWd0X3BpcGVfb2JqX3Nl dF9wcm9wX3ZhbHVlKHBpcGVfb2JqLAo+IElHVF9DUlRDX0FDVElWRSwgMSk7Cj4gKwl9Cj4gK30K PiArCj4gKy8qCj4gKyAqIGlndF9waXBlX3JlZnJlc2g6Cj4gKyAqIEBkaXNwbGF5OiBhIHBvaW50 ZXIgdG8gYW4gI2lndF9kaXNwbGF5X3Qgc3RydWN0dXJlCj4gKyAqIEBwaXBlOiBQaXBlIHRvIHJl ZnJlc2gKPiArICogQGZvcmNlOiBTaG91bGQgYmUgc2V0IHRvIHRydWUgaWYgbW9kZV9ibG9iIGlz IG5vIGxvbmdlcgo+IGNvbnNpZGVyZWQKPiArICogdG8gYmUgdmFsaWQsIGZvciBleGFtcGxlIGFm dGVyIGRvaW5nIGFuIGF0b21pYyBjb21taXQgZHVyaW5nIGZvcmsKPiBvciBjbG9zaW5nIGRpc3Bs YXkgZmQuCj4gKyAqCj4gKyAqIFJlcXVlc3RzIHRoZSBwaXBlIHRvIGJlIHBhcnQgb2YgdGhlIHN0 YXRlIG9uIG5leHQgdXBkYXRlLgo+ICsgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHN0YXRlIG1heSBo YXZlIGJlZW4gb3V0IG9mIHN5bmMgYWZ0ZXIKPiArICogYSBmb3JrLCBvciB3ZSBqdXN0IHdhbnQg dG8gYmUgc3VyZSB0aGUgcGlwZSBpcyBpbmNsdWRlZAo+ICsgKiBpbiB0aGUgbmV4dCBjb21taXQu Cj4gKyAqLwo+ICt2b2lkIGlndF9waXBlX3JlZnJlc2goaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwg ZW51bSBwaXBlIHBpcGUsIGJvb2wKPiBmb3JjZSkKPiArewo+ICsJaWd0X3BpcGVfdCAqcGlwZV9v YmogPSAmZGlzcGxheS0+cGlwZXNbcGlwZV07Cj4gKwo+ICsJaWYgKGZvcmNlICYmIGRpc3BsYXkt PmlzX2F0b21pYykgewo+ICsJCWlndF9vdXRwdXRfdCAqb3V0cHV0ID0KPiBpZ3RfcGlwZV9nZXRf b3V0cHV0KHBpcGVfb2JqKTsKPiArCj4gKwkJcGlwZV9vYmotPnZhbHVlc1tJR1RfQ1JUQ19NT0RF X0lEXSA9IDA7Cj4gKwkJaWYgKG91dHB1dCkKPiArCQkJaWd0X3BpcGVfcmVwbGFjZV9ibG9iKHBp cGVfb2JqLAo+IElHVF9DUlRDX01PREVfSUQsIGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KSwK PiBzaXplb2YoZHJtTW9kZU1vZGVJbmZvKSk7Cj4gKwl9IGVsc2UKPiArCQlpZ3RfcGlwZV9vYmpf c2V0X3Byb3BfY2hhbmdlZChwaXBlX29iaiwKPiBJR1RfQ1JUQ19NT0RFX0lEKTsKPiDCoH0KPiDC oAo+IMKgdm9pZCBpZ3Rfb3V0cHV0X3NldF9zY2FsaW5nX21vZGUoaWd0X291dHB1dF90ICpvdXRw dXQsIHVpbnQ2NF90Cj4gc2NhbGluZ19tb2RlKQo+IEBAIC0zMDUyLDI4ICszMDY4LDI1IEBAIHZv aWQgaWd0X3BsYW5lX3NldF9yb3RhdGlvbihpZ3RfcGxhbmVfdAo+ICpwbGFuZSwgaWd0X3JvdGF0 aW9uX3Qgcm90YXRpb24pCj4gwqAgKi8KPiDCoHZvaWQgaWd0X3BpcGVfcmVxdWVzdF9vdXRfZmVu Y2UoaWd0X3BpcGVfdCAqcGlwZSkKPiDCoHsKPiAtCXBpcGUtPm91dF9mZW5jZV9yZXF1ZXN0ZWQg PSB0cnVlOwo+ICsJaWd0X3BpcGVfb2JqX3NldF9wcm9wX3ZhbHVlKHBpcGUsIElHVF9DUlRDX09V VF9GRU5DRV9QVFIsCj4gKHB0cmRpZmZfdCkmcGlwZS0+b3V0X2ZlbmNlX2ZkKTsKPiDCoH0KPiDC oAo+IMKgdm9pZAo+IMKgaWd0X3BpcGVfc2V0X2RlZ2FtbWFfbHV0KGlndF9waXBlX3QgKnBpcGUs IHZvaWQgKnB0ciwgc2l6ZV90IGxlbmd0aCkKPiDCoHsKPiAtCWlndF9waXBlX3JlcGxhY2VfYmxv YihwaXBlLCAmcGlwZS0+ZGVnYW1tYV9ibG9iLCBwdHIsCj4gbGVuZ3RoKTsKPiAtCXBpcGUtPmNv bG9yX21nbXRfY2hhbmdlZCA9IDE7Cj4gKwlpZ3RfcGlwZV9yZXBsYWNlX2Jsb2IocGlwZSwgSUdU X0NSVENfREVHQU1NQV9MVVQsIHB0ciwKPiBsZW5ndGgpOwo+IMKgfQo+IMKgCj4gwqB2b2lkCj4g wqBpZ3RfcGlwZV9zZXRfY3RtX21hdHJpeChpZ3RfcGlwZV90ICpwaXBlLCB2b2lkICpwdHIsIHNp emVfdCBsZW5ndGgpCj4gwqB7Cj4gLQlpZ3RfcGlwZV9yZXBsYWNlX2Jsb2IocGlwZSwgJnBpcGUt PmN0bV9ibG9iLCBwdHIsIGxlbmd0aCk7Cj4gLQlwaXBlLT5jb2xvcl9tZ210X2NoYW5nZWQgPSAx Owo+ICsJaWd0X3BpcGVfcmVwbGFjZV9ibG9iKHBpcGUsIElHVF9DUlRDX0NUTSwgcHRyLCBsZW5n dGgpOwo+IMKgfQo+IMKgCj4gwqB2b2lkCj4gwqBpZ3RfcGlwZV9zZXRfZ2FtbWFfbHV0KGlndF9w aXBlX3QgKnBpcGUsIHZvaWQgKnB0ciwgc2l6ZV90IGxlbmd0aCkKPiDCoHsKPiAtCWlndF9waXBl X3JlcGxhY2VfYmxvYihwaXBlLCAmcGlwZS0+Z2FtbWFfYmxvYiwgcHRyLCBsZW5ndGgpOwo+IC0J cGlwZS0+Y29sb3JfbWdtdF9jaGFuZ2VkID0gMTsKPiArCWlndF9waXBlX3JlcGxhY2VfYmxvYihw aXBlLCBJR1RfQ1JUQ19HQU1NQV9MVVQsIHB0ciwKPiBsZW5ndGgpOwo+IMKgfQo+IMKgCj4gwqAv KioKPiBAQCAtMzA5NCw5ICszMTA3LDcgQEAgdm9pZCBpZ3RfY3J0Y19zZXRfYmFja2dyb3VuZChp Z3RfcGlwZV90ICpwaXBlLAo+IHVpbnQ2NF90IGJhY2tncm91bmQpCj4gwqAJwqDCoMKgwqBrbXN0 ZXN0X3BpcGVfbmFtZShwaXBlLT5waXBlKSwKPiDCoAnCoMKgwqDCoHBpcGUtPnBpcGUsIGJhY2tn cm91bmQpOwo+IMKgCj4gLQlwaXBlLT5iYWNrZ3JvdW5kID0gYmFja2dyb3VuZDsKPiAtCj4gLQlw aXBlLT5iYWNrZ3JvdW5kX2NoYW5nZWQgPSB0cnVlOwo+ICsJaWd0X3BpcGVfb2JqX3NldF9wcm9w X3ZhbHVlKHBpcGUsIElHVF9DUlRDX0JBQ0tHUk9VTkQsCj4gYmFja2dyb3VuZCk7Cj4gwqB9Cj4g wqAKPiDCoHZvaWQgaWd0X3dhaXRfZm9yX3ZibGFua19jb3VudChpbnQgZHJtX2ZkLCBlbnVtIHBp cGUgcGlwZSwgaW50Cj4gY291bnQpCj4gZGlmZiAtLWdpdCBhL2xpYi9pZ3Rfa21zLmggYi9saWIv aWd0X2ttcy5oCj4gaW5kZXggZjg3ZjhiZTMxNDIxLi5iNTMxMjdmZmVmNWYgMTAwNjQ0Cj4gLS0t IGEvbGliL2lndF9rbXMuaAo+ICsrKyBiL2xpYi9pZ3Rfa21zLmgKPiBAQCAtMzEzLDI3ICszMTMs MTMgQEAgc3RydWN0IGlndF9waXBlIHsKPiDCoAlpbnQgcGxhbmVfcHJpbWFyeTsKPiDCoAlpZ3Rf cGxhbmVfdCAqcGxhbmVzOwo+IMKgCj4gLQl1aW50MzJfdCBhdG9taWNfcHJvcHNfY3J0Y1tJR1Rf TlVNX0NSVENfUFJPUFNdOwo+IC0KPiAtCXVpbnQ2NF90IGJhY2tncm91bmQ7IC8qIEJhY2tncm91 bmQgY29sb3IgTVNCIEJHUiAxNmJwYyBMU0IKPiAqLwo+IC0JdWludDMyX3QgYmFja2dyb3VuZF9j aGFuZ2VkIDogMTsKPiAtCXVpbnQzMl90IGJhY2tncm91bmRfcHJvcGVydHk7Cj4gLQo+IC0JdWlu dDY0X3QgZGVnYW1tYV9ibG9iOwo+IC0JdWludDMyX3QgZGVnYW1tYV9wcm9wZXJ0eTsKPiAtCXVp bnQ2NF90IGN0bV9ibG9iOwo+IC0JdWludDMyX3QgY3RtX3Byb3BlcnR5Owo+IC0JdWludDY0X3Qg Z2FtbWFfYmxvYjsKPiAtCXVpbnQzMl90IGdhbW1hX3Byb3BlcnR5Owo+IC0JdWludDMyX3QgY29s b3JfbWdtdF9jaGFuZ2VkIDogMTsKPiArCXVpbnQ2NF90IGNoYW5nZWQ7Cj4gKwl1aW50MzJfdCBw cm9wc1tJR1RfTlVNX0NSVENfUFJPUFNdOwo+ICsJdWludDY0X3QgdmFsdWVzW0lHVF9OVU1fQ1JU Q19QUk9QU107Cj4gwqAKPiDCoAl1aW50MzJfdCBjcnRjX2lkOwo+IMKgCj4gLQl1aW50NjRfdCBt b2RlX2Jsb2I7Cj4gLQlib29sIG1vZGVfY2hhbmdlZDsKPiAtCj4gwqAJaW50MzJfdCBvdXRfZmVu Y2VfZmQ7Cj4gLQlib29sIG91dF9mZW5jZV9yZXF1ZXN0ZWQ7Cj4gwqB9Owo+IMKgCj4gwqB0eXBl ZGVmIHN0cnVjdCB7Cj4gQEAgLTUyNywxNyArNTEzLDYgQEAgc3RhdGljIGlubGluZSBib29sCj4g aWd0X291dHB1dF9pc19jb25uZWN0ZWQoaWd0X291dHB1dF90ICpvdXRwdXQpCj4gwqAJCWlndF9w bGFuZV9zZXRfcHJvcF9jaGFuZ2VkKHBsYW5lLCBwcm9wKTsgXAo+IMKgCX0gd2hpbGUgKDApCj4g wqAKPiAtLyoqCj4gLSAqIGlndF9hdG9taWNfcG9wdWxhdGVfY3J0Y19yZXE6Cj4gLSAqIEByZXE6 IEEgcG9pbnRlciB0byBkcm1Nb2RlQXRvbWljUmVxCj4gLSAqIEBwaXBlOiBBIHBvaW50ZXIgaWd0 X3BpcGVfdAo+IC0gKiBAcHJvcDogb25lIG9mIGlndF9hdG9taWNfY3J0Y19wcm9wZXJ0aWVzCj4g LSAqIEB2YWx1ZTogdGhlIHZhbHVlIHRvIGFkZAo+IC0gKi8KPiAtI2RlZmluZSBpZ3RfYXRvbWlj X3BvcHVsYXRlX2NydGNfcmVxKHJlcSwgcGlwZSwgcHJvcCwgdmFsdWUpIFwKPiAtCWlndF9hc3Nl cnRfbHQoMCwgZHJtTW9kZUF0b21pY0FkZFByb3BlcnR5KHJlcSwgcGlwZS0KPiA+Y3J0Y19pZCxc Cj4gLQkJCQkJCcKgwqBwaXBlLQo+ID5hdG9taWNfcHJvcHNfY3J0Y1twcm9wXSwgdmFsdWUpKQo+ IC0KPiDCoCNkZWZpbmUgaWd0X291dHB1dF9pc19wcm9wX2NoYW5nZWQob3V0cHV0LCBwcm9wKSBc Cj4gwqAJKCEhKChvdXRwdXQpLT5jaGFuZ2VkICYgKDEgPDwgKHByb3ApKSkpCj4gwqAjZGVmaW5l IGlndF9vdXRwdXRfc2V0X3Byb3BfY2hhbmdlZChvdXRwdXQsIHByb3ApIFwKPiBAQCAtNTUyLDI2 ICs1MjcsMzQgQEAgc3RhdGljIGlubGluZSBib29sCj4gaWd0X291dHB1dF9pc19jb25uZWN0ZWQo aWd0X291dHB1dF90ICpvdXRwdXQpCj4gwqAJCWlndF9vdXRwdXRfc2V0X3Byb3BfY2hhbmdlZChv dXRwdXQsIHByb3ApOyBcCj4gwqAJfSB3aGlsZSAoMCkKPiDCoAo+IC0vKgo+IC0gKiBpZ3RfcGlw ZV9yZWZyZXNoOgo+IC0gKiBAZGlzcGxheTogYSBwb2ludGVyIHRvIGFuICNpZ3RfZGlzcGxheV90 IHN0cnVjdHVyZQo+IC0gKiBAcGlwZTogUGlwZSB0byByZWZyZXNoCj4gLSAqIEBmb3JjZTogU2hv dWxkIGJlIHNldCB0byB0cnVlIGlmIG1vZGVfYmxvYiBpcyBubyBsb25nZXIKPiBjb25zaWRlcmVk Cj4gLSAqIHRvIGJlIHZhbGlkLCBmb3IgZXhhbXBsZSBhZnRlciBkb2luZyBhbiBhdG9taWMgY29t bWl0IGR1cmluZyBmb3JrCj4gb3IgY2xvc2luZyBkaXNwbGF5IGZkLgo+IC0gKgo+IC0gKiBSZXF1 ZXN0cyB0aGUgcGlwZSB0byBiZSBwYXJ0IG9mIHRoZSBzdGF0ZSBvbiBuZXh0IHVwZGF0ZS4KPiAt ICogVGhpcyBpcyB1c2VmdWwgd2hlbiBzdGF0ZSBtYXkgaGF2ZSBiZWVuIG91dCBvZiBzeW5jIGFm dGVyCj4gLSAqIGEgZm9yaywgb3Igd2UganVzdCB3YW50IHRvIGJlIHN1cmUgdGhlIHBpcGUgaXMg aW5jbHVkZWQKPiAtICogaW4gdGhlIG5leHQgY29tbWl0Lgo+IC0gKi8KPiAtc3RhdGljIGlubGlu ZSB2b2lkCj4gLWlndF9waXBlX3JlZnJlc2goaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgZW51bSBw aXBlIHBpcGUsIGJvb2wgZm9yY2UpCj4gLXsKPiAtCWlmIChmb3JjZSkKPiAtCQlkaXNwbGF5LT5w aXBlc1twaXBlXS5tb2RlX2Jsb2IgPSAwOwo+ICsjZGVmaW5lIGlndF9waXBlX29ial9pc19wcm9w X2NoYW5nZWQocGlwZV9vYmosIHByb3ApIFwKPiArCSghISgocGlwZV9vYmopLT5jaGFuZ2VkICYg KDEgPDwgKHByb3ApKSkpCj4gwqAKPiAtCWRpc3BsYXktPnBpcGVzW3BpcGVdLm1vZGVfY2hhbmdl ZCA9IHRydWU7Cj4gLX0KPiArI2RlZmluZSBpZ3RfcGlwZV9pc19wcm9wX2NoYW5nZWQoZGlzcGxh eSwgcGlwZSwgcHJvcCkgXAo+ICsJaWd0X3BpcGVfb2JqX2lzX3Byb3BfY2hhbmdlZCgmKGRpc3Bs YXkpLT5waXBlc1socGlwZSldLAo+IHByb3ApCj4gKwo+ICsjZGVmaW5lIGlndF9waXBlX29ial9z ZXRfcHJvcF9jaGFuZ2VkKHBpcGVfb2JqLCBwcm9wKSBcCj4gKwkocGlwZV9vYmopLT5jaGFuZ2Vk IHw9IDEgPDwgKHByb3ApCj4gKwo+ICsjZGVmaW5lIGlndF9waXBlX3NldF9wcm9wX2NoYW5nZWQo ZGlzcGxheSwgcGlwZSwgcHJvcCkgXAo+ICsJaWd0X3BpcGVfb2JqX3NldF9wcm9wX2NoYW5nZWQo JihkaXNwbGF5KS0+cGlwZXNbKHBpcGUpXSwKPiBwcm9wKQo+ICsKPiArI2RlZmluZSBpZ3RfcGlw ZV9vYmpfY2xlYXJfcHJvcF9jaGFuZ2VkKHBpcGVfb2JqLCBwcm9wKSBcCj4gKwkocGlwZV9vYmop LT5jaGFuZ2VkICY9IH4oMSA8PCAocHJvcCkpCj4gKwo+ICsjZGVmaW5lIGlndF9waXBlX2NsZWFy X3Byb3BfY2hhbmdlZChkaXNwbGF5LCBwaXBlLCBwcm9wKSBcCj4gKwlpZ3RfcGlwZV9vYmpfY2xl YXJfcHJvcF9jaGFuZ2VkKCYoZGlzcGxheSktPnBpcGVzWyhwaXBlKV0sCj4gcHJvcCkKPiArCj4g KyNkZWZpbmUgaWd0X3BpcGVfb2JqX3NldF9wcm9wX3ZhbHVlKHBpcGVfb2JqLCBwcm9wLCB2YWx1 ZSkgXAo+ICsJZG8geyBcCj4gKwkJKHBpcGVfb2JqKS0+dmFsdWVzW3Byb3BdID0gKHZhbHVlKTsg XAo+ICsJCWlndF9waXBlX29ial9zZXRfcHJvcF9jaGFuZ2VkKHBpcGVfb2JqLCBwcm9wKTsgXAo+ ICsJfSB3aGlsZSAoMCkKPiArCj4gKyNkZWZpbmUgaWd0X3BpcGVfc2V0X3Byb3BfdmFsdWUoZGlz cGxheSwgcGlwZSwgcHJvcCwgdmFsdWUpIFwKPiArCWlndF9waXBlX29ial9zZXRfcHJvcF92YWx1 ZSgmKGRpc3BsYXkpLT5waXBlc1socGlwZSldLCBwcm9wLAo+IHZhbHVlKQo+ICsKPiArdm9pZCBp Z3RfcGlwZV9yZWZyZXNoKGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGVudW0gcGlwZSBwaXBlLCBi b29sCj4gZm9yY2UpOwo+IMKgCj4gwqB2b2lkIGlndF9lbmFibGVfY29ubmVjdG9ycyh2b2lkKTsK PiDCoHZvaWQgaWd0X3Jlc2V0X2Nvbm5lY3RvcnModm9pZCk7Cj4gZGlmZiAtLWdpdCBhL3Rlc3Rz L2ttc19hdG9taWNfaW50ZXJydXB0aWJsZS5jCj4gYi90ZXN0cy9rbXNfYXRvbWljX2ludGVycnVw dGlibGUuYwo+IGluZGV4IDRhMmE1Nzc0MTJjYy4uNjRhMDA1NTk3YTIxIDEwMDY0NAo+IC0tLSBh L3Rlc3RzL2ttc19hdG9taWNfaW50ZXJydXB0aWJsZS5jCj4gKysrIGIvdGVzdHMva21zX2F0b21p Y19pbnRlcnJ1cHRpYmxlLmMKPiBAQCAtMTU4LDggKzE1OCw4IEBAIHN0YXRpYyB2b2lkIHJ1bl9w bGFuZV90ZXN0KGlndF9kaXNwbGF5X3QKPiAqZGlzcGxheSwgZW51bSBwaXBlIHBpcGUsIGlndF9v dXRwdXRfdAo+IMKgCQkJCXVpbnQzMl90IGNvdW50X3Byb3BzWzNdID0geyAyLCAxLCA2Cj4gfTsK PiDCoAkJCQl1aW50MzJfdCBwcm9wc1tdID0gewo+IMKgCQkJCQkvKiBjcnRjOiAyIHByb3BzICov Cj4gLQkJCQkJcGxhbmUtPnBpcGUtCj4gPmF0b21pY19wcm9wc19jcnRjW0lHVF9DUlRDX01PREVf SURdLAo+IC0JCQkJCXBsYW5lLT5waXBlLQo+ID5hdG9taWNfcHJvcHNfY3J0Y1tJR1RfQ1JUQ19B Q1RJVkVdLAo+ICsJCQkJCXBsYW5lLT5waXBlLQo+ID5wcm9wc1tJR1RfQ1JUQ19NT0RFX0lEXSwK PiArCQkJCQlwbGFuZS0+cGlwZS0KPiA+cHJvcHNbSUdUX0NSVENfQUNUSVZFXSwKPiDCoAkJCQkJ LyogY29ubmVjdG9yOiAxIHByb3AgKi8KPiDCoAkJCQkJb3V0cHV0LQo+ID5wcm9wc1tJR1RfQ09O TkVDVE9SX0NSVENfSURdLAo+IMKgCQkJCQkvKiBwbGFuZTogcmVtYWluZGVyIHByb3BzICovCj4g QEAgLTI1NSw2ICsyNTUsMTAgQEAgc3RhdGljIHZvaWQgcnVuX3BsYW5lX3Rlc3QoaWd0X2Rpc3Bs YXlfdAo+ICpkaXNwbGF5LCBlbnVtIHBpcGUgcGlwZSwgaWd0X291dHB1dF90Cj4gwqAKPiDCoAlp Z3Rfd2FpdGNoaWxkcmVuKCk7Cj4gwqAKPiArCS8qIFRoZSBtb2RlIGlzIHVuc2V0IGJ5IHRoZSBm b3JrZWQgaGVscGVyLCBmb3JjZSBhIHJlZnJlc2gKPiBoZXJlICovCj4gKwlpZiAodGVzdF90eXBl ID09IHRlc3RfbGVnYWN5X21vZGVzZXQgfHwgdGVzdF90eXBlID09Cj4gdGVzdF9hdG9taWNfbW9k ZXNldCkKPiArCQlpZ3RfcGlwZV9yZWZyZXNoKGRpc3BsYXksIHBpcGUsIHRydWUpOwo+ICsKPiDC oAlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKPiDCoAlpZ3RfcGxhbmVfc2V0X2ZiKHBy aW1hcnksIE5VTEwpOwo+IMKgCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBQSVBFX05PTkUp Owo+IGRpZmYgLS1naXQgYS90ZXN0cy9rbXNfYXRvbWljX3RyYW5zaXRpb24uYwo+IGIvdGVzdHMv a21zX2F0b21pY190cmFuc2l0aW9uLmMKPiBpbmRleCAyYWU3NWYyZDY2MzAuLjdkZGI2NWNlYTE4 MyAxMDA2NDQKPiAtLS0gYS90ZXN0cy9rbXNfYXRvbWljX3RyYW5zaXRpb24uYwo+ICsrKyBiL3Rl c3RzL2ttc19hdG9taWNfdHJhbnNpdGlvbi5jCj4gQEAgLTYzMyw3ICs2MzMsNyBAQCBzdGF0aWMg dW5zaWduZWQgc2V0X2NvbWJpbmF0aW9ucyhpZ3RfZGlzcGxheV90Cj4gKmRpc3BsYXksIHVuc2ln bmVkIG1hc2ssIHN0cnVjdCBpCj4gwqAJCWRybU1vZGVNb2RlSW5mbyAqbW9kZSA9IE5VTEw7Cj4g wqAKPiDCoAkJaWYgKCEobWFzayAmICgxIDw8IHBpcGUpKSkgewo+IC0JCQlpZiAoZGlzcGxheS0+ cGlwZXNbcGlwZV0ubW9kZV9ibG9iKSB7Cj4gKwkJCWlmIChpZ3RfcGlwZV9pc19wcm9wX2NoYW5n ZWQoZGlzcGxheSwgcGlwZSwKPiBJR1RfQ1JUQ19BQ1RJVkUpKSB7Cj4gwqAJCQkJZXZlbnRfbWFz ayB8PSAxIDw8IHBpcGU7Cj4gwqAJCQkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgTlVMTCk7Cj4g wqAJCQl9Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc19jcnRjX2JhY2tncm91bmRfY29sb3IuYwo+ IGIvdGVzdHMva21zX2NydGNfYmFja2dyb3VuZF9jb2xvci5jCj4gaW5kZXggZTEyZTE2MzQ0OWY4 Li42NTlhMzBiOTAyMTkgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMva21zX2NydGNfYmFja2dyb3VuZF9j b2xvci5jCj4gKysrIGIvdGVzdHMva21zX2NydGNfYmFja2dyb3VuZF9jb2xvci5jCj4gQEAgLTEz Nyw3ICsxMzcsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NydGNfYmFja2dyb3VuZChkYXRhX3QgKmRh dGEpCj4gwqAJCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBwaXBlKTsKPiDCoAo+IMKgCQlw bGFuZSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lX3R5cGUob3V0cHV0LAo+IERSTV9QTEFORV9UWVBF X1BSSU1BUlkpOwo+IC0JCWlndF9yZXF1aXJlKHBsYW5lLT5waXBlLT5iYWNrZ3JvdW5kX3Byb3Bl cnR5KTsKPiArCQlpZ3RfcmVxdWlyZShwbGFuZS0+cGlwZS0KPiA+cHJvcHNbSUdUX0NSVENfQkFD S0dST1VORF0pOwo+IMKgCj4gwqAJCXByZXBhcmVfY3J0YyhkYXRhLCBvdXRwdXQsIHBpcGUsIHBs YW5lLCAxLCBQVVJQTEUsCj4gQkxBQ0s2NCk7Cj4gwqAKLS0gCk1pa2EgS2Fob2xhIC0gSW50ZWwg T1RDCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRl bC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK