From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id EFAC7891AC for ; Wed, 12 Jun 2019 20:18:24 +0000 (UTC) References: <20190513165347.29108-1-maarten.lankhorst@linux.intel.com> From: Juha-Pekka Heikkila Message-ID: <97cd03dc-387c-e646-2915-9e42829d4bcc@gmail.com> Date: Wed, 12 Jun 2019 23:18:20 +0300 MIME-Version: 1.0 In-Reply-To: <20190513165347.29108-1-maarten.lankhorst@linux.intel.com> Content-Language: en-US Subject: Re: [igt-dev] [PATCH i-g-t] tests/kms_yuv: Add yuv specific tests, v6. List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: juhapekka.heikkila@gmail.com Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Maarten Lankhorst , igt-dev@lists.freedesktop.org List-ID: U29ycnkgZm9yIGRlbGF5IE1hYXJ0ZW4sIEkndmUgYmVlbiByZWFkaW5nIHRoaXMgb24gc2V2ZXJh bCBldmVuaW5ncyBidXQgCmFsd2F5cyB3YXMgaW50ZXJydXB0ZWQuIEkgdGhpbmsgdGhpcyBsb29r IGFsbCBnb29kLgoKUmV2aWV3ZWQtYnk6IEp1aGEtUGVra2EgSGVpa2tpbGEgPGp1aGFwZWtrYS5o ZWlra2lsYUBnbWFpbC5jb20+CgpPbiAxMy41LjIwMTkgMTkuNTMsIE1hYXJ0ZW4gTGFua2hvcnN0 IHdyb3RlOgo+IEFkZCB0ZXN0cyBleGNlcmNpc2luZyBzd2l0Y2hpbmcgYmV0d2VlbiB2YXJpb3Vz IHNjYWxlZC91bnNjYWxlZAo+IHRyYW5zaXRpb25zIHRvIGFuZCBmcm9tIHZhcmlvdXMgbnYxMiBm b3JtYXRzLCBzaW5jZSBzb21lIG9mIHRoZQo+IHdvcmthcm91bmRzIG1lbnRpb24gdGhpcyBtYXkg ZmFpbC4KPiAKPiBXZSBhbHNvIGFkZCBOVjEyIHNwZWNpZmljIGNsaXBwaW5nL3NjYWxpbmcgdGVz dHMsIHRvIG1ha2Ugc3VyZQo+IHRoYXQgWVVWIHNyYyBjb29yZGluYXRlcyBhcmUgYWx3YXlzIHBy b2dyYW1tZWQgYXMgYSBtdWx0aXBsZSBvZiAyCj4gY29ycmVjdGx5LCBhbmQgdmVyaWZ5IHNjYWxp bmcvY2xpcHBpbmcgd29ya3Mgd2l0aCBDUkMgdGVzdHMuCj4gCj4gY3JvcC1zY2FsZS1idWcgc2hv d3MgYSBjb3JydXB0aW9uIHdoZW4gc2NhbGluZyBhbmQgY3JvcHBpbmcgYXQgdGhlCj4gc2FtZSB0 aW1lLgo+IAo+IFRoZSBzdWJwaXhlbCBjbGlwIHRlc3Qgcm90YXRlcyBhbmQgY2xpcHMgYSByZWN0 YW5nbGUgb24gZWFjaCBzaWRlLAo+IHdoaWNoIHNob3VsZCBwcm9kdWNlIHRoZSBzYW1lIENSQyBh cyB3aGVuIHRoYXQgcGFydCBvZiB0aGUgcmVjdGFuZ2xlCj4gaXMgaGlkZGVuIGJ5IGEgY3Vyc29y IGFuZCBhIHdob2xlIDJ4MiBwaXhlbCBpcyBoaWRkZW4uCj4gCj4gQ2hhbmdlcyBzaW5jZSB2MToK PiAtIFJlc2V0IHBsYW5lIHBvc2l0aW9uIHRvIDAsMCBhdCB0aGUgc3RhcnQgb2YgeXV2X3ZhbGlk X3dpZHRoX3BsYW5lKCkuCj4gLSBIYW5kbGUgU3dhdGkncyBmZWVkYmFjay4KPiBDaGFuZ2VzIHNp bmNlIHYyOgo+IC0gU2tpcCA5MMKwLzI3MMKwIHJvdGF0aW9uIGluIHRlc3RzIHdoZW4gZm9ybWF0 cyBkb24ndCBzdXBwb3J0IGl0Lgo+IC0gQWRkIGFsbCBuZXcgSERSIGZvcm1hdHMgdG8gdGVzdC4K PiAtIFVzZSBpZ3RfcGxhbmVfaGFzX2Zvcm1hdF9tb2QuCj4gLSBTdXBwb3J0IHRlc3RzIG9uICFp OTE1IGJ5IGNoZWNraW5nIGlmIFgvWSB0aWxpbmcgbW9kaWZpZXJzIGFyZSBzdXBwb3J0ZWQuCj4g LSBEbyBub3QgZW5hYmxlIHVudGVzdGVkIHBsYW5lcyB0byBwcmV2ZW50IGV4aGF1c2luZyBtZW1v cnkgYmFuZHdpZHRoCj4gICAgYW5kIGF2YWlsYWJsZSBOVjEyIFkgcGxhbmVzIGluIHRoZSByZ2It c3dpdGNoLXNjYWxlZCB0ZXN0Lgo+IENoYW5nZXMgc2luY2UgdjM6Cj4gLSBBZGQgYSBzYW5pdHkg dGVzdCB0byBzYW5pdHkgdGVzdCBZVVYgY29udmVyc2lvbiBwYXRocywgb24gYWxsIHBsYW5lcyBh bmQgcGlwZXMuCj4gLSBEeW5hbWljYWxseSBnZW5lcmF0ZSBsaXN0IG9mIFlVViB0ZXN0cyB0aHJv dWdoIGlndF9mb3JtYXRfYXJyYXlfZmlsbC4KPiBDaGFuZ2VzIHNpbmNlIHY0Ogo+IC0gRGVjcmVh c2Ugc2l6ZSB0byA2NHg2NCB0byByZWR1Y2UgdGVzdCBleGVjdXRpb24gdGltZSBldmVuIG1vcmUs Cj4gICAgc29tZSBZVVYgY29udmVyc2lvbiByb3V0aW5lcyBhcmUgc2xvdy4KPiAtIERvbid0IGNs ZWFyIGRlZ2FtbWEvY3RtLCB0aGlzIGlzIGRvbmUgaW4gY29yZSBub3cuCj4gQ2hhbmdlcyBzaW5j ZSB2NToKPiAtIEZpeCBtaW5vciBjb21waWxlIGVycm9yLgo+IC0gQWRkIG1pc3NpbmcgaWd0X3N1 YnRlc3RfZ3JvdXAKPiAKPiBTaWduZWQtb2ZmLWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRl bi5sYW5raG9yc3RAbGludXguaW50ZWwuY29tPgo+IC0tLQo+ICAgdGVzdHMvTWFrZWZpbGUuc291 cmNlcyB8ICAgMSArCj4gICB0ZXN0cy9rbXNfeXV2LmMgICAgICAgIHwgOTM3ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gICB0ZXN0cy9tZXNvbi5idWlsZCAgICAg IHwgICAxICsKPiAgIDMgZmlsZXMgY2hhbmdlZCwgOTM5IGluc2VydGlvbnMoKykKPiAgIGNyZWF0 ZSBtb2RlIDEwMDY0NCB0ZXN0cy9rbXNfeXV2LmMKPiAKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFr ZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiBpbmRleCA3ZjkyMWY2YzU5 ODguLjU3NDg2MWIyZTMwZiAxMDA2NDQKPiAtLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4g KysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+IEBAIC03NSw2ICs3NSw3IEBAIFRFU1RTX3By b2dzID0gXAo+ICAgCWttc191bml2ZXJzYWxfcGxhbmUgXAo+ICAgCWttc192YmxhbmsgXAo+ICAg CWttc192cnIgXAo+ICsJa21zX3l1diBcCj4gICAJbWV0YV90ZXN0IFwKPiAgIAlwZXJmIFwKPiAg IAlwZXJmX3BtdSBcCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc195dXYuYyBiL3Rlc3RzL2ttc195 dXYuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi42Y2Y2OWIw NTA0ZjgKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvdGVzdHMva21zX3l1di5jCj4gQEAgLTAsMCAr MSw5MzcgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24K PiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2Us IHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl Cj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCj4gKyAqIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgo+ICsgKgo+ ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZF TlQgU0hBTEwgVEhFCj4gKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiAr ICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqCj4gKyAq IEF1dGhvcnM6Cj4gKyAqICAgIE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBs aW51eC5pbnRlbC5jb20+Cj4gKyAqLwo+ICsjaW5jbHVkZSAiY29uZmlnLmgiCj4gKwo+ICsjaW5j bHVkZSAiaWd0LmgiCj4gKyNpbmNsdWRlIDxjYWlyby5oPgo+ICsjaW5jbHVkZSA8ZXJybm8uaD4K PiArI2luY2x1ZGUgPHN0ZGludC5oPgo+ICsjaW5jbHVkZSA8dW5pc3RkLmg+Cj4gKyNpbmNsdWRl IDxzeXMvdGltZS5oPgo+ICsKPiArdHlwZWRlZiBzdHJ1Y3Qgewo+ICsJaWd0X2Rpc3BsYXlfdCBk aXNwbGF5Owo+ICsKPiArCWlndF9waXBlX2NyY190ICpwaXBlX2NyYzsKPiArCXN0cnVjdCBpZ3Rf ZmIgZmJbNl07Cj4gK30gZGF0YV90Owo+ICsKPiArc3RhdGljIHVpbnQ2NF90IHhfbW9kaWZpZXIg PSBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FOwo+ICtzdGF0aWMgdWludDY0X3QgeV9tb2RpZmll ciA9IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkU7Cj4gK3N0YXRpYyB1aW50MzJfdCAqZm9ybWF0 cywgY291bnRfZm9ybWF0czsKPiArCj4gK3N0YXRpYyBib29sIHBpcGVfc3VwcG9ydHNfZm9ybWF0 KGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGVudW0gcGlwZSBwaXBlLAo+ICsJCQkJIHVpbnQzMl90 IGZvcm1hdCwgdWludDY0X3QgdGlsaW5nKQo+ICt7Cj4gKwlpZ3RfcGxhbmVfdCAqcGxhbmU7Cj4g Kwo+ICsJZm9yX2VhY2hfcGxhbmVfb25fcGlwZShkaXNwbGF5LCBwaXBlLCBwbGFuZSkKPiArCQlp ZiAoaWd0X3BsYW5lX2hhc19mb3JtYXRfbW9kKHBsYW5lLCBmb3JtYXQsIHRpbGluZykpCj4gKwkJ CXJldHVybiB0cnVlOwo+ICsKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArCj4gK3N0YXRp YyB2b2lkIHJlbW92ZV9mYnMoZGF0YV90ICpkYXRhKQo+ICt7Cj4gKwlpbnQgaTsKPiArCj4gKwlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRhLT5mYik7IGkrKykKPiArCQlpZ3RfcmVtb3Zl X2ZiKGRhdGEtPmRpc3BsYXkuZHJtX2ZkLCAmZGF0YS0+ZmJbaV0pOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBwcmVwYXJlX2NydGMoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwgaWd0X291 dHB1dF90ICpvdXRwdXQpCj4gK3sKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ ZGlzcGxheTsKPiArCj4gKwlyZW1vdmVfZmJzKGRhdGEpOwo+ICsJaWd0X2Rpc3BsYXlfcmVzZXQo ZGlzcGxheSk7Cj4gKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZSk7Cj4gKwlpZ3Rf ZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwo+ICsKPiArCWlndF9waXBl X2NyY19mcmVlKGRhdGEtPnBpcGVfY3JjKTsKPiArCWRhdGEtPnBpcGVfY3JjID0gaWd0X3BpcGVf Y3JjX25ldyhkaXNwbGF5LT5kcm1fZmQsIHBpcGUsCj4gKwkJCQkJICBJTlRFTF9QSVBFX0NSQ19T T1VSQ0VfQVVUTyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGZ1ZGdlX2x1dChkYXRhX3QgKmRh dGEsIGVudW0gcGlwZSBwaXBlLCB1aW50MTZfdCBtYXNrKQo+ICt7Cj4gKwlpZ3RfcGlwZV90ICpw aXBlX29iaiA9ICZkYXRhLT5kaXNwbGF5LnBpcGVzW3BpcGVdOwo+ICsJdWludDE2X3QgKmx1dDsK PiArCWludCBpLCBsdXRfc2l6ZTsKPiArCj4gKwlpZiAoIWlndF9waXBlX29ial9oYXNfcHJvcChw aXBlX29iaiwgSUdUX0NSVENfR0FNTUFfTFVUX1NJWkUpKQo+ICsJCXJldHVybjsKPiArCj4gKwls dXRfc2l6ZSA9IGlndF9waXBlX29ial9nZXRfcHJvcChwaXBlX29iaiwgSUdUX0NSVENfR0FNTUFf TFVUX1NJWkUpOwo+ICsKPiArCWx1dCA9IG1hbGxvYyhzaXplb2YodWludDE2X3QpICogbHV0X3Np emUpOwo+ICsJZm9yIChpID0gMDsgaSA8IGx1dF9zaXplOyBpKyspCj4gKwkJbHV0W2ldID0gKGkg KiAweGZmZmYgLyAobHV0X3NpemUgLSAxKSkgJiBtYXNrOwo+ICsKPiArCWlndF9waXBlX29ial9y ZXBsYWNlX3Byb3BfYmxvYihwaXBlX29iaiwgSUdUX0NSVENfR0FNTUFfTFVULCBsdXQsIGx1dF9z aXplICogc2l6ZW9mKHVpbnQxNl90KSk7Cj4gKwlmcmVlKGx1dCk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIHVuZnVkZ2VfbHV0KGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUpCj4gK3sKPiAr CWlndF9waXBlX3QgKnBpcGVfb2JqID0gJmRhdGEtPmRpc3BsYXkucGlwZXNbcGlwZV07Cj4gKwo+ ICsJaWYgKGlndF9waXBlX29ial9oYXNfcHJvcChwaXBlX29iaiwgSUdUX0NSVENfR0FNTUFfTFVU KSkKPiArCQlpZ3RfcGlwZV9vYmpfcmVwbGFjZV9wcm9wX2Jsb2IocGlwZV9vYmosIElHVF9DUlRD X0dBTU1BX0xVVCwgTlVMTCwgMCk7Cj4gK30KPiArCj4gKy8qCj4gKyAqIFRlc3QgdGhhdCB3ZSBp bml0aWFsaXplIGEgWVVWIGZiIGFzIGJsYWNrIGNvcnJlY3RseSwKPiArICogdGhhdCB3aGVuIHdl IHdyaXRlIGEgYmxhY2sgRkIgaXQgd2lsbCBnZXQgdGhlIHNhbWUgQ1JDLCBhbmQgdGhhdAo+ICsg KiBhbGwgY29sb3JzIHdlIHRlc3Qgd2lsbCBnaXZlIHRoZSBzYW1lIENSQyBvbiBhbGwgZm9ybWF0 cy4KPiArICovCj4gK3N0YXRpYyB2b2lkIHl1dl9zYW5pdHkoZGF0YV90ICpkYXRhLCBlbnVtIHBp cGUgcGlwZSwgaWd0X291dHB1dF90ICpvdXRwdXQpCj4gK3sKPiArCWlndF9kaXNwbGF5X3QgKmRp c3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPiArCWlndF9wbGFuZV90ICpwbGFuZTsKPiArCWlndF9j cmNfdCBibGFja19jcmMsIGNvbG9yX2NyYywgY3JjOwo+ICsJYm9vbCBmaXJzdCA9IHRydWU7Cj4g Kwo+ICsJcHJlcGFyZV9jcnRjKGRhdGEsIHBpcGUsIG91dHB1dCk7Cj4gKwo+ICsJZm9yX2VhY2hf cGxhbmVfb25fcGlwZShkaXNwbGF5LCBwaXBlLCBwbGFuZSkgewo+ICsJCWZvciAoaW50IGkgPSAw OyBpIDwgY291bnRfZm9ybWF0czsgaSsrKSB7Cj4gKwkJCXN0cnVjdCBpZ3RfZmIgKmZiID0gJmRh dGEtPmZiWzBdOwo+ICsJCQljYWlyb190ICpjcjsKPiArCj4gKwkJCWlmICghaWd0X2Zvcm1hdF9p c195dXYoZm9ybWF0c1tpXSkgfHwKPiArCQkJICAgICFpZ3RfcGxhbmVfaGFzX2Zvcm1hdF9tb2Qo cGxhbmUsIGZvcm1hdHNbaV0sIHhfbW9kaWZpZXIpKQo+ICsJCQkJY29udGludWU7Cj4gKwo+ICsJ CQlpZ3RfZGVidWcoIlRlc3RpbmcgZm9ybWF0ICUuNHMgb24gcGxhbmUgJWlcbiIsCj4gKwkJCQkg KGNoYXIgKikmZm9ybWF0c1tpXSwgcGxhbmUtPmluZGV4KTsKPiArCQkJaWd0X2NyZWF0ZV9mYihk aXNwbGF5LT5kcm1fZmQsIDY0LCA2NCwgZm9ybWF0c1tpXSwKPiArCQkJCSAgICAgIHhfbW9kaWZp ZXIsIGZiKTsKPiArCj4gKwkJCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIGZiKTsKPiArCQkJaWd0 X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKPiArCQkJaWYgKCFmaXJz dCkgewo+ICsJCQkJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmY3Jj KTsKPiArCQkJCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZibGFja19jcmMsICZjcmMpOwo+ICsJCQl9 IGVsc2Ugewo+ICsJCQkJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAm YmxhY2tfY3JjKTsKPiArCQkJfQo+ICsKPiArCQkJLyogQ29tcGFyZSBpbml0aWFsIGJsYWNrIGZi IHdpdGggcmVmZXJlbmNlIHBhaW50ZWQgYmxhY2sgY29sb3IgKi8KPiArCQkJY3IgPSBpZ3RfZ2V0 X2NhaXJvX2N0eChkaXNwbGF5LT5kcm1fZmQsIGZiKTsKPiArCQkJaWd0X3BhaW50X2NvbG9yKGNy LCAwLCAwLCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQsIDAuLCAwLiwgMC4pOwo+ICsJCQlpZ3RfcHV0 X2NhaXJvX2N0eChkaXNwbGF5LT5kcm1fZmQsIGZiLCBjcik7Cj4gKwkJCWlndF9kaXJ0eV9mYihk aXNwbGF5LT5kcm1fZmQsIGZiKTsKPiArCQkJaWd0X3dhaXRfZm9yX3ZibGFuayhkaXNwbGF5LT5k cm1fZmQsIHBpcGUpOwo+ICsJCQlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9j cmMsICZjcmMpOwo+ICsJCQlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgmYmxhY2tfY3JjLCAmY3JjKTsK PiArCj4gKwo+ICsJCQkvKiBXcml0ZSBhIGNvbG9yIGZiICovCj4gKwkJCWNyID0gaWd0X2dldF9j YWlyb19jdHgoZGlzcGxheS0+ZHJtX2ZkLCBmYik7Cj4gKwkJCWlndF9wYWludF9jb2xvcihjciwg MCwgMCwgZmItPndpZHRoLCBmYi0+aGVpZ2h0LCAxLiwgMS4sIDAuKTsKPiArCQkJaWd0X3B1dF9j YWlyb19jdHgoZGlzcGxheS0+ZHJtX2ZkLCBmYiwgY3IpOwo+ICsJCQlmdWRnZV9sdXQoZGF0YSwg cGlwZSwgMHhmYzAwKTsKPiArCQkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgZmIpOwo+ICsJCQlp Z3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwo+ICsKPiArCQkJaWYg KCFmaXJzdCkgewo+ICsJCQkJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3Jj LCAmY3JjKTsKPiArCQkJCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZjb2xvcl9jcmMsICZjcmMpOwo+ ICsJCQl9IGVsc2Ugewo+ICsJCQkJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVf Y3JjLCAmY29sb3JfY3JjKTsKPiArCQkJCWZpcnN0ID0gZmFsc2U7Cj4gKwkJCX0KPiArCj4gKwkJ CS8qIENvbnZlcnQgZnJvbSBZVVYsIGJhY2sgdG8gWVVWLCB0byBleHBvc2UgYnVncyBpbiBjb252 ZXJzaW9uIHJvdXRpbmVzICovCj4gKwkJCWNyID0gaWd0X2dldF9jYWlyb19jdHgoZGlzcGxheS0+ ZHJtX2ZkLCBmYik7Cj4gKwkJCWlndF9wdXRfY2Fpcm9fY3R4KGRpc3BsYXktPmRybV9mZCwgZmIs IGNyKTsKPiArCQkJaWd0X2RpcnR5X2ZiKGRpc3BsYXktPmRybV9mZCwgZmIpOwo+ICsJCQlpZ3Rf d2FpdF9mb3JfdmJsYW5rKGRpc3BsYXktPmRybV9mZCwgcGlwZSk7Cj4gKwkJCWlndF9waXBlX2Ny Y19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJmNyYyk7Cj4gKwkJCWlndF9hc3NlcnRfY3Jj X2VxdWFsKCZjb2xvcl9jcmMsICZjcmMpOwo+ICsKPiArCQkJdW5mdWRnZV9sdXQoZGF0YSwgcGlw ZSk7Cj4gKwkJCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIE5VTEwpOwo+ICsJCQlpZ3RfcmVtb3Zl X2ZiKGRpc3BsYXktPmRybV9mZCwgJmRhdGEtPmZiWzBdKTsKPiArCQl9Cj4gKwl9Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIHNldF9mYihpZ3RfcGxhbmVfdCAqcGxhbmUsIHN0cnVjdCBpZ3RfZmIg KmZiLAo+ICsJCSAgIGJvb2wgc2NhbGVkLCBpZ3Rfcm90YXRpb25fdCByb3QpCj4gK3sKPiArCWln dF9wbGFuZV9zZXRfZmIocGxhbmUsIGZiKTsKPiArCj4gKwlpZiAoc2NhbGVkICYmIGZiKQo+ICsJ CWlndF9mYl9zZXRfc2l6ZShmYiwgcGxhbmUsIGZiLT53aWR0aCwgMTYpOwo+ICsKPiArCWlndF9w bGFuZV9zZXRfcm90YXRpb24ocGxhbmUsIHJvdCk7Cj4gKwlpZiAoZmIgJiYgKHJvdCA9PSBJR1Rf Uk9UQVRJT05fOTAgfHwgcm90ID09IElHVF9ST1RBVElPTl8yNzApKQo+ICsJCWlndF9wbGFuZV9z ZXRfc2l6ZShwbGFuZSwgZmItPmhlaWdodCwgZmItPndpZHRoKTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgeXV2X3JnYl9zd2l0Y2goZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwKPiArCQkJ ICAgaWd0X291dHB1dF90ICpvdXRwdXQsIGJvb2wgc2NhbGVkLCB1bnNpZ25lZCBmb3JtYXQpCj4g K3sKPiArCWRybU1vZGVNb2RlSW5mbyAqbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0 KTsKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPiArCWlndF9w bGFuZV90ICpwbGFuZTsKPiArCWludCBpOwo+ICsJaWd0X2NyY190IHJlZl9jcmNbNF0sIGNyYzsK PiArCWJvb2wgdmFsaWRbNF0gPSB7fTsKPiArCj4gKwlwcmVwYXJlX2NydGMoZGF0YSwgcGlwZSwg b3V0cHV0KTsKPiArCj4gKwlpZ3RfY3JlYXRlX3BhdHRlcm5fZmIoZGlzcGxheS0+ZHJtX2ZkLCBt b2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4gKwkJCSAgICAgIGZvcm1hdCwgeF9tb2Rp ZmllciwgJmRhdGEtPmZiWzBdKTsKPiArCj4gKwlpZ3RfY3JlYXRlX3BhdHRlcm5fZmIoZGlzcGxh eS0+ZHJtX2ZkLCBtb2RlLT52ZGlzcGxheSwgbW9kZS0+aGRpc3BsYXksCj4gKwkJCSAgICAgIGZv cm1hdCwgeV9tb2RpZmllciwgJmRhdGEtPmZiWzFdKTsKPiArCj4gKwlpZ3RfY3JlYXRlX3BhdHRl cm5fZmIoZGlzcGxheS0+ZHJtX2ZkLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4g KwkJCSAgICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsIHhfbW9kaWZpZXIsICZkYXRhLT5mYlsyXSk7 Cj4gKwo+ICsJaWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKGRpc3BsYXktPmRybV9mZCwgbW9kZS0+dmRp c3BsYXksIG1vZGUtPmhkaXNwbGF5LAo+ICsJCQkgICAgICBEUk1fRk9STUFUX1hSR0I4ODg4LCB5 X21vZGlmaWVyLCAmZGF0YS0+ZmJbM10pOwo+ICsKPiArCWZvcl9lYWNoX3BsYW5lX29uX3BpcGUo ZGlzcGxheSwgcGlwZSwgcGxhbmUpIHsKPiArCQljb25zdCBpbnQgc2VxW10gPSB7Cj4gKwkJCTIs IDAsIDIsIDEsIDMsIDEsIDMKPiArCQl9Owo+ICsKPiArCQlpZiAoIWlndF9wbGFuZV9oYXNfZm9y bWF0X21vZChwbGFuZSwgZm9ybWF0LCBkYXRhLT5mYlswXS5tb2RpZmllcikpCj4gKwkJCWNvbnRp bnVlOwo+ICsKPiArCQkvKiBDb2xsZWN0IHJlZmVyZW5jZSBjcmMgd2l0aCB0b2dnbGUgaW4gYmV0 d2Vlbi4gKi8KPiArCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWZfY3JjKTsgaSsrKSB7 Cj4gKwkJCWlndF9yb3RhdGlvbl90IHJvdCA9IChpID09IDEgfHwgaSA9PSAzKSA/Cj4gKwkJCQlJ R1RfUk9UQVRJT05fOTAgOiBJR1RfUk9UQVRJT05fMDsKPiArCj4gKwkJCXNldF9mYihwbGFuZSwg JmRhdGEtPmZiW2ldLCBzY2FsZWQsIHJvdCk7Cj4gKwo+ICsJCQlpZ3RfZGlzcGxheV9jb21taXQy KGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwo+ICsJCQlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMo ZGF0YS0+cGlwZV9jcmMsICZyZWZfY3JjW2ldKTsKPiArCQkJdmFsaWRbaV0gPSB0cnVlOwo+ICsK PiArCQkJc2V0X2ZiKHBsYW5lLCBOVUxMLCBzY2FsZWQsIHJvdCk7Cj4gKwkJCWlndF9kaXNwbGF5 X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7Cj4gKwkJfQo+ICsKPiArCQlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShzZXEpOyBpKyspIHsKPiArCQkJaW50IGogPSBzZXFbaV07Cj4g KwkJCWlndF9yb3RhdGlvbl90IHJvdCA9IChqID09IDEgfHwgaiA9PSAzKSA/Cj4gKwkJCQlJR1Rf Uk9UQVRJT05fOTAgOiBJR1RfUk9UQVRJT05fMDsKPiArCj4gKwkJCWlmICghdmFsaWRbal0pCj4g KwkJCQljb250aW51ZTsKPiArCj4gKwkJCXNldF9mYihwbGFuZSwgJmRhdGEtPmZiW2pdLCBzY2Fs ZWQsIHJvdCk7Cj4gKwkJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01J Qyk7Cj4gKwo+ICsJCQlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZj cmMpOwo+ICsJCQlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgmcmVmX2NyY1tqXSwgJmNyYyk7Cj4gKwkJ fQo+ICsKPiArCQkvKiBXZSBvbmx5IGhhdmUgZmV3IHNjYWxlcnMsIGRvbid0IHVzZSAxIGZvciB1 bnVzZWQgcGxhbmVzICovCj4gKwkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgTlVMTCk7Cj4gKwl9 Cj4gK30KPiArCj4gKyNkZWZpbmUgYXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwocGlwZV9jcmMs IGNyYywgcmVmX2NyYykgXAo+ICsJZG8geyBcCj4gKwkJaWd0X3BpcGVfY3JjX2dldF9jdXJyZW50 KGRpc3BsYXktPmRybV9mZCwgcGlwZV9jcmMsIGNyYyk7CVwKPiArCQlpZ3RfYXNzZXJ0X2NyY19l cXVhbChyZWZfY3JjLCBjcmMpOwlcCj4gKwl9IHdoaWxlICgwKQo+ICsKPiArc3RhdGljIHZvaWQg c2V0X3NyY19jb29yZHMoaWd0X3BsYW5lX3QgKnBsYW5lLCBzdHJ1Y3QgaWd0X2ZiICpmYiwKPiAr CQkJICAgaWd0X3JvdGF0aW9uX3Qgcm90LCBpbnQgdmlzLCBpbnQgaGlkZGVuKQo+ICt7Cj4gKwlz d2l0Y2ggKHJvdCkgewo+ICsJY2FzZSBJR1RfUk9UQVRJT05fMDoKPiArCQlpZ3RfZmJfc2V0X3Bv c2l0aW9uKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gMiAtIHZpcywgZmItPmhlaWdodCAvIDIgLSB2 aXMpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJR1RfUk9UQVRJT05fOTA6Cj4gKwkJaWd0X2ZiX3Nl dF9wb3NpdGlvbihmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDIgLSBoaWRkZW4sIGZiLT5oZWlnaHQg LyAyIC0gdmlzKTsKPiArCQlicmVhazsKPiArCWNhc2UgSUdUX1JPVEFUSU9OXzE4MDoKPiArCQlp Z3RfZmJfc2V0X3Bvc2l0aW9uKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gMiAtIGhpZGRlbiwgZmIt PmhlaWdodCAvIDIgLSBoaWRkZW4pOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJR1RfUk9UQVRJT05f MjcwOgo+ICsJCWlndF9mYl9zZXRfcG9zaXRpb24oZmIsIHBsYW5lLCBmYi0+d2lkdGggLyAyIC0g dmlzLCBmYi0+aGVpZ2h0IC8gMiAtIGhpZGRlbik7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0OiBp Z3RfYXNzZXJ0KDApOwpeXgpUaGlzIHdhcyB0aGUgb25seSBuaXQgSSBub3RpY2VkLgoKPiArCX0K PiArCWlndF9mYl9zZXRfc2l6ZShmYiwgcGxhbmUsIHZpcyArIGhpZGRlbiwgdmlzICsgaGlkZGVu KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgeXV2X3ZhbGlkX3dpZHRoX3BsYW5lKGRhdGFfdCAq ZGF0YSwgZHJtTW9kZU1vZGVJbmZvICptb2RlLAo+ICsJCQkJICBpZ3RfcGxhbmVfdCAqcGxhbmUs IGlndF9yb3RhdGlvbl90IHJvdCwKPiArCQkJCSAgaWd0X2NyY190ICpyZWZfY3JjKQo+ICt7Cj4g KwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7Cj4gKwlpZ3RfY3JjX3Qg Y3JjOwo+ICsJc3RydWN0IGlndF9mYiAqY2xpcF9mYiA9ICZkYXRhLT5mYlsyXTsKPiArCWludCBp LCByZXQ7Cj4gKwo+ICsJLyogSnVzdCBjbGlwcGluZy4uICovCj4gKwlpZ3RfcGxhbmVfc2V0X2Zi KHBsYW5lLCBjbGlwX2ZiKTsKPiArCWlndF9wbGFuZV9zZXRfcm90YXRpb24ocGxhbmUsIHJvdCk7 Cj4gKwlpZiAocm90ICYgKElHVF9ST1RBVElPTl85MCB8IElHVF9ST1RBVElPTl8yNzApKQo+ICsJ CWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgY2xpcF9mYi0+aGVpZ2h0LCBjbGlwX2ZiLT53aWR0 aCk7Cj4gKwlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCBtb2RlLT5oZGlzcGxheSAtIGNs aXBfZmItPndpZHRoIC8gMiwgbW9kZS0+dmRpc3BsYXkgLSBjbGlwX2ZiLT5oZWlnaHQgLyAyKTsK PiArCWlmICgocm90ID09IElHVF9ST1RBVElPTl85MCB8fCByb3QgPT0gSUdUX1JPVEFUSU9OXzI3 MCkgJiYKPiArCSAgICBpZ3RfZGlzcGxheV90cnlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRP TUlDKSA8IDApIHsKPiArCQlpZ3RfZGVidWcoIlRoaXMgcm90YXRpb24gbm90IGF2YWlsYWJsZSBm b3IgdGhpcyBmb3JtYXQuXG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJaWd0X2Rpc3Bs YXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKPiArCWFzc2VydF9jb2xsZWN0ZWRf Y3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKPiArCj4gKwkvKiBDbGlw cGluZyBhbmQgc2NhbGluZy4gKi8KPiArCWlndF9mYl9zZXRfcG9zaXRpb24oY2xpcF9mYiwgcGxh bmUsIGNsaXBfZmItPndpZHRoIC8gMiAtIDE2LCBjbGlwX2ZiLT5oZWlnaHQgLyAyIC0gMTYpOwo+ ICsJaWd0X2ZiX3NldF9zaXplKGNsaXBfZmIsIHBsYW5lLCAzMiwgMzIpOwo+ICsJaWd0X2Rpc3Bs YXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKPiArCWFzc2VydF9jb2xsZWN0ZWRf Y3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKPiArCj4gKwkvKiBUcnkg bnZhbGlkIDwgOCBzcmMgdmlzaWJsZS4gKi8KPiArCXNldF9zcmNfY29vcmRzKHBsYW5lLCBjbGlw X2ZiLCByb3QsIDQsIDQpOwo+ICsJaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIoZGlzcGxheSwgQ09N TUlUX0FUT01JQyk7Cj4gKwo+ICsJLyogVHJ5IGRpZmZlcmVudCBhbGlnbm1lbnRzIGZvciB4L3kg dG8gc2VlIGlmIGFueSBoaXQgdW5kZXJydW5zICovCj4gKwlmb3IgKGkgPSAxOyBpIDwgNDsgaSsr KSB7Cj4gKwkJc2V0X3NyY19jb29yZHMocGxhbmUsIGNsaXBfZmIsIHJvdCwgMTYgKyAyICogaSwg MTYgLSAyICogaSk7Cj4gKwkJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRP TUlDKTsKPiArCQlhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNy YywgcmVmX2NyYyk7Cj4gKwo+ICsJCS8qIEFuZCBhbHNvIHNob3cgbW9yZSBvZiB0aGUgc2NyZWVu ICovCj4gKwkJc2V0X3NyY19jb29yZHMocGxhbmUsIGNsaXBfZmIsIHJvdCwgMTYgKyBpLCAxNiAr IGkpOwo+ICsJCXJldCA9IGlndF9kaXNwbGF5X3RyeV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9B VE9NSUMpOwo+ICsKPiArCQlpZiAocmV0ID09IC1FSU5WQUwpIHsKPiArCQkJaWd0X2Fzc2VydChp ICUgMiB8fCByb3QgPT0gSUdUX1JPVEFUSU9OXzI3MCB8fCByb3QgPT0gKElHVF9ST1RBVElPTl85 MCB8IElHVF9SRUZMRUNUX1gpKTsKPiArCQkJY29udGludWU7Cj4gKwkJfSBlbHNlCj4gKwkJCWln dF9hc3NlcnRfZXEocmV0LCAwKTsKPiArCQlhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRh LT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAqIEFzIGEg ZmluYWwgdGVzdCwgdHJ5IHdpdGggMTYgc3JjIHZpc2libGUsIGFuZCB2YXJpb3VzIGludmlzaWJs ZQo+ICsJICogY29tcG9uZW50cyB0byBjaGVjayBjbGlwcGluZyBkb2Vzbid0IGRyb3AgdGhlIHZp c2libGUgc3JjIGJlbG93IDE2Lgo+ICsJICovCj4gKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkgKz0g NCkgewo+ICsJCXNldF9zcmNfY29vcmRzKHBsYW5lLCBjbGlwX2ZiLCByb3QsIDE2LCBpKTsKPiAr CQlpZiAocm90ICYgKElHVF9ST1RBVElPTl85MCB8IElHVF9ST1RBVElPTl8yNzApKQo+ICsJCQlp Z3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIChjbGlwX2ZiLT5oZWlnaHQgLyAzMikgKiAoMTYgKyBp KSwKPiArCQkJCQkgICAoY2xpcF9mYi0+d2lkdGggLyAzMikgKiAoMTYgKyBpKSk7Cj4gKwkJZWxz ZQo+ICsJCQlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIChjbGlwX2ZiLT53aWR0aCAvIDMyKSAq ICgxNiArIGkpLAo+ICsJCQkJCSAgIChjbGlwX2ZiLT5oZWlnaHQgLyAzMikgKiAoMTYgKyBpKSk7 Cj4gKwkJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKPiArCQlh c3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7 Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHl1dl92YWxpZF93aWR0aChkYXRhX3QgKmRh dGEsIGVudW0gcGlwZSBwaXBlLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgdW5zaWduZWQgZm9ybWF0 KQo+ICt7Cj4gKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKG91 dHB1dCk7Cj4gKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7Cj4gKwlp Z3RfcGxhbmVfdCAqcGxhbmU7Cj4gKwlzdHJ1Y3QgaWd0X2ZiICpjbGlwX2ZiID0gJmRhdGEtPmZi WzJdOwo+ICsJc3RydWN0IGlndF9mYiAqcmVmX2ZiID0gJmRhdGEtPmZiWzNdOwo+ICsKPiArCXBy ZXBhcmVfY3J0YyhkYXRhLCBwaXBlLCBvdXRwdXQpOwo+ICsKPiArCWlndF9jcmVhdGVfZmIoZGlz cGxheS0+ZHJtX2ZkLCA2NCwgNjQsIGZvcm1hdCwgeV9tb2RpZmllciwgcmVmX2ZiKTsKPiArCj4g KwlpZ3RfY3JlYXRlX2ZiKGRpc3BsYXktPmRybV9mZCwgMiAqIHJlZl9mYi0+d2lkdGgsCj4gKwkJ ICAgICAgMiAqIHJlZl9mYi0+aGVpZ2h0LCBmb3JtYXQsIHlfbW9kaWZpZXIsIGNsaXBfZmIpOwo+ ICsKPiArCWlndF9waXBlX2NyY19zdGFydChkYXRhLT5waXBlX2NyYyk7Cj4gKwo+ICsJZm9yX2Vh Y2hfcGxhbmVfb25fcGlwZShkaXNwbGF5LCBwaXBlLCBwbGFuZSkgewo+ICsJCWlndF9jcmNfdCBy ZWZfY3JjWzRdOwo+ICsJCWNhaXJvX3QgKmNyOwo+ICsJCXN0YXRpYyBjb25zdCBkb3VibGUgY29s b3JzWzRdWzNdID0gewo+ICsJCQl7IDEuLCAwLiwgMC4gfSwKPiArCQkJeyAwLiwgMS4sIDAuIH0s Cj4gKwkJCXsgMC4sIDAuLCAxLiB9LAo+ICsJCQl7IDEuLCAxLiwgMS4gfQo+ICsJCX07Cj4gKwkJ aW50IGk7Cj4gKwo+ICsJCWlmICghaWd0X3BsYW5lX2hhc19mb3JtYXRfbW9kKHBsYW5lLCBmb3Jt YXQsIGRhdGEtPmZiWzBdLm1vZGlmaWVyKSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCS8qIERy YXcgdGhlIEZCIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBjbGlwcGluZyB0ZXN0cy4gKi8KPiArCQlj ciA9IGlndF9nZXRfY2Fpcm9fY3R4KGRpc3BsYXktPmRybV9mZCwgY2xpcF9mYik7Cj4gKwkJaWd0 X3BhaW50X2NvbG9yKGNyLCAwLCAwLCBjbGlwX2ZiLT53aWR0aCAvIDIsIGNsaXBfZmItPmhlaWdo dCAvIDIsCj4gKwkJCQljb2xvcnNbMF1bMF0sIGNvbG9yc1swXVsxXSwgY29sb3JzWzBdWzJdKTsK PiArCj4gKwkJaWd0X3BhaW50X2NvbG9yKGNyLCBjbGlwX2ZiLT53aWR0aCAvIDIsIDAsCj4gKwkJ CQljbGlwX2ZiLT53aWR0aCAvIDIsIGNsaXBfZmItPmhlaWdodCAvIDIsCj4gKwkJCQljb2xvcnNb MV1bMF0sIGNvbG9yc1sxXVsxXSwgY29sb3JzWzFdWzJdKTsKPiArCj4gKwkJaWd0X3BhaW50X2Nv bG9yKGNyLCBjbGlwX2ZiLT53aWR0aCAvIDIsIGNsaXBfZmItPmhlaWdodCAvIDIsCj4gKwkJCQlj bGlwX2ZiLT53aWR0aCAvIDIsIGNsaXBfZmItPmhlaWdodCAvIDIsCj4gKwkJCQljb2xvcnNbMl1b MF0sIGNvbG9yc1syXVsxXSwgY29sb3JzWzJdWzJdKTsKPiArCj4gKwkJaWd0X3BhaW50X2NvbG9y KGNyLCAwLCBjbGlwX2ZiLT5oZWlnaHQgLyAyLAo+ICsJCQkJY2xpcF9mYi0+d2lkdGggLyAyLCBj bGlwX2ZiLT5oZWlnaHQgLyAyLAo+ICsJCQkJY29sb3JzWzNdWzBdLCBjb2xvcnNbM11bMV0sIGNv bG9yc1szXVsyXSk7Cj4gKwo+ICsJCWlndF9wdXRfY2Fpcm9fY3R4KGRpc3BsYXktPmRybV9mZCwg Y2xpcF9mYiwgY3IpOwo+ICsKPiArCQkvKiBEcmF3IGFsbCByZWZlcmVuY2UgRkIncyB0byBjb2xs ZWN0IHRoZSBDUkMuICovCj4gKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewo+ICsJCQljciA9 IGlndF9nZXRfY2Fpcm9fY3R4KGRpc3BsYXktPmRybV9mZCwgcmVmX2ZiKTsKPiArCQkJaWd0X3Bh aW50X2NvbG9yKGNyLCAwLCAwLCByZWZfZmItPndpZHRoLCByZWZfZmItPmhlaWdodCwKPiArCQkJ CQljb2xvcnNbaV1bMF0sIGNvbG9yc1tpXVsxXSwgY29sb3JzW2ldWzJdKTsKPiArCQkJaWd0X3B1 dF9jYWlyb19jdHgoZGlzcGxheS0+ZHJtX2ZkLCAmZGF0YS0+ZmJbM10sIGNyKTsKPiArCj4gKwkJ CWlmICghaSkgewo+ICsJCQkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgcmVmX2ZiKTsKPiArCQkJ CWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIG1vZGUtPmhkaXNwbGF5IC0gcmVmX2ZiLT53 aWR0aCwgbW9kZS0+dmRpc3BsYXkgLSByZWZfZmItPmhlaWdodCk7Cj4gKwkJCQlpZ3RfZGlzcGxh eV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwo+ICsJCQl9IGVsc2Ugewo+ICsJCQkJ aWd0X2RpcnR5X2ZiKGRpc3BsYXktPmRybV9mZCwgcmVmX2ZiKTsKPiArCQkJCWlndF93YWl0X2Zv cl92YmxhbmsoZGlzcGxheS0+ZHJtX2ZkLCBwaXBlKTsKPiArCQkJfQo+ICsKPiArCQkJaWd0X3Bp cGVfY3JjX2RyYWluKGRhdGEtPnBpcGVfY3JjKTsKPiArCQkJaWd0X3BpcGVfY3JjX2dldF9zaW5n bGUoZGF0YS0+cGlwZV9jcmMsICZyZWZfY3JjW2ldKTsKPiArCQl9Cj4gKwo+ICsJCWlndF9wbGFu ZV9zZXRfZmIocGxhbmUsIE5VTEwpOwo+ICsJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUs IDAsIDApOwo+ICsKPiArCQl5dXZfdmFsaWRfd2lkdGhfcGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUs IElHVF9ST1RBVElPTl8wLCAmcmVmX2NyY1swXSk7Cj4gKwkJeXV2X3ZhbGlkX3dpZHRoX3BsYW5l KGRhdGEsIG1vZGUsIHBsYW5lLCBJR1RfUk9UQVRJT05fOTAsICZyZWZfY3JjWzFdKTsKPiArCQl5 dXZfdmFsaWRfd2lkdGhfcGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUsIElHVF9ST1RBVElPTl8xODAs ICZyZWZfY3JjWzJdKTsKPiArCQl5dXZfdmFsaWRfd2lkdGhfcGxhbmUoZGF0YSwgbW9kZSwgcGxh bmUsIElHVF9ST1RBVElPTl8yNzAsICZyZWZfY3JjWzNdKTsKPiArCj4gKwkJaWd0X3BsYW5lX3Nl dF9mYihwbGFuZSwgTlVMTCk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIHl1dl9jb21t aXRfcm90YXRlZChpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpZ3Rfcm90YXRpb25fdCByb3QpCj4g K3sKPiArCWlmIChpZ3RfZGlzcGxheV90cnlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlD KSA8IDApIHsKPiArCQlpZ3RfZGVidWcoIlNraXBwaW5nIHJvdGF0ZWQgdGVzdCwgYWxpZ25tZW50 IGlzIHdyb25nLlxuIik7Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsKPiArCXJldHVybiB0 cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB5dXZfY3JvcF9zY2FsZV9idWdfcGxhbmUoZGF0 YV90ICpkYXRhLCBkcm1Nb2RlTW9kZUluZm8gKm1vZGUsCj4gKwkJCQkgICAgICBpZ3RfcGxhbmVf dCAqcGxhbmUsIHN0cnVjdCBpZ3RfZmIgKmZiLAo+ICsJCQkJICAgICAgaWd0X3JvdGF0aW9uX3Qg cm90LCBpZ3RfY3JjX3QgKnJlZl9jcmMpCj4gK3sKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkg PSAmZGF0YS0+ZGlzcGxheTsKPiArCWlndF9jcmNfdCBjcmM7Cj4gKwlpbnQgb2ZzW10gPSB7IDAs IDEsIC0xLCAyLCAtMiB9Owo+ICsJaW50IGksIGo7Cj4gKwo+ICsJaWd0X3BsYW5lX3NldF9mYihw bGFuZSwgZmIpOwo+ICsJaWd0X3BsYW5lX3NldF9yb3RhdGlvbihwbGFuZSwgcm90KTsKPiArCWln dF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDY0LCA2NCk7Cj4gKwlpZ3RfcGxhbmVfc2V0X3Np emUocGxhbmUsIDI1NiwgMjU2KTsKPiArCj4gKwlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGZiLCBwbGFu ZSwgZmItPndpZHRoIC8gNCwgZmItPmhlaWdodCAvIDQpOwo+ICsJaWd0X2ZiX3NldF9zaXplKGZi LCBwbGFuZSwgZmItPndpZHRoIC8gMiwgZmItPmhlaWdodCAvIDIpOwo+ICsJaWYgKChyb3QgPT0g SUdUX1JPVEFUSU9OXzkwIHx8IHJvdCA9PSBJR1RfUk9UQVRJT05fMjcwKSAmJgo+ICsJICAgIGln dF9kaXNwbGF5X3RyeV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpIDwgMCkgewo+ICsJ CWlndF9kZWJ1ZygiVGhpcyByb3RhdGlvbiBub3QgYXZhaWxhYmxlIGZvciB0aGlzIGZvcm1hdC5c biIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3Bs YXksIENPTU1JVF9BVE9NSUMpOwo+ICsJYXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwoZGF0YS0+ cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMpOwo+ICsKPiArCS8qIE1ha2Ugc3VyZSBib3VuZGFyaWVz IG1hdGNoICovCj4gKwlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGZiLCBwbGFuZSwgZmItPndpZHRoIC8g NCAtIDIsIGZiLT5oZWlnaHQgLyA0IC0gMik7Cj4gKwlpZ3RfZmJfc2V0X3NpemUoZmIsIHBsYW5l LCBmYi0+d2lkdGggLyAyICsgNCwgZmItPmhlaWdodCAvIDIgKyA0KTsKPiArCWlndF9kaXNwbGF5 X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7Cj4gKwlhc3NlcnRfY29sbGVjdGVkX2Ny Y19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7Cj4gKwo+ICsJZm9yIChpID0g MTsgaSA8IEFSUkFZX1NJWkUob2ZzKTsgaSsrKSB7Cj4gKwkJaWd0X2RlYnVnKCJUZXN0aW5nIHdp dGggcm90ICV4IGFuZCBleHRyYSAlaSBvbiB0aGUgbGVmdCBzaWRlXG4iLCByb3QsIG9mc1tpXSk7 Cj4gKwkJaWd0X2ZiX3NldF9wb3NpdGlvbihmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDQgKyBvZnNb aV0sIGZiLT5oZWlnaHQgLyA0IC0gMik7Cj4gKwkJaWd0X2ZiX3NldF9zaXplKGZiLCBwbGFuZSwg ZmItPndpZHRoIC8gMiArIDIgLSBvZnNbaV0sIGZiLT5oZWlnaHQgLyAyICsgNCk7Cj4gKwkJaWYg KHl1dl9jb21taXRfcm90YXRlZChkaXNwbGF5LCByb3QpKQo+ICsJCQlhc3NlcnRfY29sbGVjdGVk X2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7Cj4gKwo+ICsJCWlndF9k ZWJ1ZygiVGVzdGluZyB3aXRoIHJvdCAleCBhbmQgZXh0cmEgJWkgb24gdGhlIHRvcCBzaWRlXG4i LCByb3QsIG9mc1tpXSk7Cj4gKwkJaWd0X2ZiX3NldF9wb3NpdGlvbihmYiwgcGxhbmUsIGZiLT53 aWR0aCAvIDQgLSAyLCBmYi0+aGVpZ2h0IC8gNCArIG9mc1tpXSk7Cj4gKwkJaWd0X2ZiX3NldF9z aXplKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gMiArIDQsIGZiLT5oZWlnaHQgLyAyICsgMiAtIG9m c1tpXSk7Cj4gKwkJaWYgKHl1dl9jb21taXRfcm90YXRlZChkaXNwbGF5LCByb3QpKQo+ICsJCQlh c3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7 Cj4gKwo+ICsJCWlndF9kZWJ1ZygiVGVzdGluZyB3aXRoIHJvdCAleCBhbmQgZXh0cmEgJWkgb24g dGhlIHJpZ2h0IHNpZGVcbiIsIHJvdCwgb2ZzW2ldKTsKPiArCQlpZ3RfZmJfc2V0X3Bvc2l0aW9u KGZiLCBwbGFuZSwgZmItPndpZHRoIC8gNCAtIDIsIGZiLT5oZWlnaHQgLyA0KTsKPiArCQlpZ3Rf ZmJfc2V0X3NpemUoZmIsIHBsYW5lLCBmYi0+d2lkdGggLyAyICsgMiArIG9mc1tpXSwgZmItPmhl aWdodCAvIDIpOwo+ICsJCWlmICh5dXZfY29tbWl0X3JvdGF0ZWQoZGlzcGxheSwgcm90KSkKPiAr CQkJYXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwoZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9j cmMpOwo+ICsKPiArCQlpZ3RfZGVidWcoIlRlc3Rpbmcgd2l0aCByb3QgJXggYW5kIGV4dHJhICVp IG9uIHRoZSBib3R0b20gc2lkZVxuIiwgcm90LCBvZnNbaV0pOwo+ICsJCWlndF9mYl9zZXRfcG9z aXRpb24oZmIsIHBsYW5lLCBmYi0+d2lkdGggLyA0IC0gMiwgZmItPmhlaWdodCAvIDQgLSAyKTsK PiArCQlpZ3RfZmJfc2V0X3NpemUoZmIsIHBsYW5lLCBmYi0+d2lkdGggLyAyICsgNCwgZmItPmhl aWdodCAvIDIgKyAyICsgb2ZzW2ldKTsKPiArCQlpZiAoeXV2X2NvbW1pdF9yb3RhdGVkKGRpc3Bs YXksIHJvdCkpCj4gKwkJCWFzc2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3Jj LCAmY3JjLCByZWZfY3JjKTsKPiArCj4gKwl9Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUob2ZzKTsgaSsrKQo+ICsJCWZvciAoaiA9ICFpOyBqIDwgQVJSQVlfU0laRShvZnMpOyBq KyspIHsKPiArCQkJaWd0X2RlYnVnKCJUZXN0aW5nIHdpdGggcm90ICV4IGFuZCBleHRyYSAoJWks ICVpKSBhdCB0aGUgZWRnZXNcbiIsIHJvdCwgb2ZzW2ldLCBvZnNbal0pOwo+ICsKPiArCQkJaWd0 X2ZiX3NldF9wb3NpdGlvbihmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDQgKyBvZnNbaV0sIGZiLT5o ZWlnaHQgLyA0ICsgb2ZzW2pdKTsKPiArCQkJaWd0X2ZiX3NldF9zaXplKGZiLCBwbGFuZSwgZmIt PndpZHRoIC8gMiAtIDIgKiBvZnNbaV0sIGZiLT5oZWlnaHQgLyAyIC0gMiAqIG9mc1tqXSk7Cj4g Kwo+ICsJCQlpZiAoeXV2X2NvbW1pdF9yb3RhdGVkKGRpc3BsYXksIHJvdCkpCj4gKwkJCQlhc3Nl cnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7Cj4g KwkJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcmF3X2NsaXBfZmIoaWd0X2Rpc3BsYXlfdCAq ZGlzcGxheSwgc3RydWN0IGlndF9mYiAqY2xpcF9mYikKPiArewo+ICsJY2Fpcm9fdCAqY3IgPSBp Z3RfZ2V0X2NhaXJvX2N0eChkaXNwbGF5LT5kcm1fZmQsIGNsaXBfZmIpOwo+ICsKPiArCWlndF9w YWludF9jb2xvcihjciwgMCwgMCwgY2xpcF9mYi0+d2lkdGgsIGNsaXBfZmItPmhlaWdodCwgLjAs IC4wLCAuNSk7Cj4gKwlpZ3RfcGFpbnRfY29sb3IoY3IsIGNsaXBfZmItPndpZHRoIC8gNCAtIDIs IGNsaXBfZmItPmhlaWdodCAvIDQgLSAyLAo+ICsJCQljbGlwX2ZiLT53aWR0aCAvIDIgKyA0LCBj bGlwX2ZiLT5oZWlnaHQgLyAyICsgNCwgMS4sIDEuLCAxLik7Cj4gKwo+ICsJaWd0X3B1dF9jYWly b19jdHgoZGlzcGxheS0+ZHJtX2ZkLCBjbGlwX2ZiLCBjcik7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIHl1dl9jcm9wX3NjYWxlX2J1ZyhkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlLCBpZ3Rf b3V0cHV0X3QgKm91dHB1dCwgdW5zaWduZWQgZm9ybWF0KQo+ICt7Cj4gKwlkcm1Nb2RlTW9kZUlu Zm8gKm1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKG91dHB1dCk7Cj4gKwlpZ3RfZGlzcGxheV90 ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7Cj4gKwlpZ3RfcGxhbmVfdCAqcGxhbmUsICpwcmlt YXJ5ID0gaWd0X3BpcGVfZ2V0X3BsYW5lX3R5cGUoJmRpc3BsYXktPnBpcGVzW3BpcGVdLCBEUk1f UExBTkVfVFlQRV9QUklNQVJZKTsKPiArCXN0cnVjdCBpZ3RfZmIgKnJlZl9mYiA9ICZkYXRhLT5m YlsyXTsKPiArCXN0cnVjdCBpZ3RfZmIgKmNsaXBfZmIgPSAmZGF0YS0+ZmJbM107Cj4gKwlzdHJ1 Y3QgaWd0X2ZiICpjbGlwX2ZiX3h0aWxlZCA9ICZkYXRhLT5mYls0XTsKPiArCXN0cnVjdCBpZ3Rf ZmIgKmNsaXBfZmJfeXRpbGVkID0gJmRhdGEtPmZiWzVdOwo+ICsKPiArCXByZXBhcmVfY3J0Yyhk YXRhLCBwaXBlLCBvdXRwdXQpOwo+ICsKPiArCWlndF9jcmVhdGVfY29sb3JfZmIoZGlzcGxheS0+ ZHJtX2ZkLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4gKwkJCSAgICBmb3JtYXQs IHhfbW9kaWZpZXIsIC41LCAuNSwgLjUsICZkYXRhLT5mYlswXSk7Cj4gKwo+ICsJaWd0X2NyZWF0 ZV9jb2xvcl9mYihkaXNwbGF5LT5kcm1fZmQsIDI1NiwgMjU2LCBmb3JtYXQsCj4gKwkJCSAgICB4 X21vZGlmaWVyLCAxLiwgMS4sIDEuLCByZWZfZmIpOwo+ICsKPiArCWlndF9jcmVhdGVfZmIoZGlz cGxheS0+ZHJtX2ZkLCA4MCwgMTI4LCBmb3JtYXQsCj4gKwkJICAgICAgTE9DQUxfRFJNX0ZPUk1B VF9NT0RfTk9ORSwgY2xpcF9mYik7Cj4gKwo+ICsJaWd0X2NyZWF0ZV9mYihkaXNwbGF5LT5kcm1f ZmQsIDgwLCAxMjgsIGZvcm1hdCwKPiArCQkgICAgICB4X21vZGlmaWVyLCBjbGlwX2ZiX3h0aWxl ZCk7Cj4gKwlpZ3RfY3JlYXRlX2ZiKGRpc3BsYXktPmRybV9mZCwgODAsIDEyOCwgZm9ybWF0LAo+ ICsJCSAgICAgIHlfbW9kaWZpZXIsIGNsaXBfZmJfeXRpbGVkKTsKPiArCj4gKwlkcmF3X2NsaXBf ZmIoZGlzcGxheSwgY2xpcF9mYik7Cj4gKwlkcmF3X2NsaXBfZmIoZGlzcGxheSwgY2xpcF9mYl94 dGlsZWQpOwo+ICsJZHJhd19jbGlwX2ZiKGRpc3BsYXksIGNsaXBfZmJfeXRpbGVkKTsKPiArCj4g KwlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksICZkYXRhLT5mYlswXSk7Cj4gKwo+ICsJZm9yX2Vh Y2hfcGxhbmVfb25fcGlwZShkaXNwbGF5LCBwaXBlLCBwbGFuZSkgewo+ICsJCWlndF9jcmNfdCBy ZWZfY3JjOwo+ICsKPiArCQlpZiAoIWlndF9wbGFuZV9oYXNfZm9ybWF0X21vZChwbGFuZSwgZm9y bWF0LCBkYXRhLT5mYlswXS5tb2RpZmllcikpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlpZ3Rf cGxhbmVfc2V0X2ZiKHBsYW5lLCByZWZfZmIpOwo+ICsJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24o cGxhbmUsIDY0LCA2NCk7Cj4gKwkJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRf QVRPTUlDKTsKPiArCj4gKwkJaWd0X3BpcGVfY3JjX3N0YXJ0KGRhdGEtPnBpcGVfY3JjKTsKPiAr CQlpZ3RfcGlwZV9jcmNfZ2V0X3NpbmdsZShkYXRhLT5waXBlX2NyYywgJnJlZl9jcmMpOwo+ICsK PiArCQl5dXZfY3JvcF9zY2FsZV9idWdfcGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUsIGNsaXBfZmIs IElHVF9ST1RBVElPTl8wLCAmcmVmX2NyYyk7Cj4gKwkJeXV2X2Nyb3Bfc2NhbGVfYnVnX3BsYW5l KGRhdGEsIG1vZGUsIHBsYW5lLCBjbGlwX2ZiX3h0aWxlZCwgSUdUX1JPVEFUSU9OXzAsICZyZWZf Y3JjKTsKPiArCQl5dXZfY3JvcF9zY2FsZV9idWdfcGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUsIGNs aXBfZmJfeXRpbGVkLCBJR1RfUk9UQVRJT05fMCwgJnJlZl9jcmMpOwo+ICsJCXl1dl9jcm9wX3Nj YWxlX2J1Z19wbGFuZShkYXRhLCBtb2RlLCBwbGFuZSwgY2xpcF9mYl95dGlsZWQsIElHVF9ST1RB VElPTl85MCwgJnJlZl9jcmMpOwo+ICsJCXl1dl9jcm9wX3NjYWxlX2J1Z19wbGFuZShkYXRhLCBt b2RlLCBwbGFuZSwgY2xpcF9mYiwgSUdUX1JPVEFUSU9OXzE4MCwgJnJlZl9jcmMpOwo+ICsJCXl1 dl9jcm9wX3NjYWxlX2J1Z19wbGFuZShkYXRhLCBtb2RlLCBwbGFuZSwgY2xpcF9mYl94dGlsZWQs IElHVF9ST1RBVElPTl8xODAsICZyZWZfY3JjKTsKPiArCQl5dXZfY3JvcF9zY2FsZV9idWdfcGxh bmUoZGF0YSwgbW9kZSwgcGxhbmUsIGNsaXBfZmJfeXRpbGVkLCBJR1RfUk9UQVRJT05fMTgwLCAm cmVmX2NyYyk7Cj4gKwkJeXV2X2Nyb3Bfc2NhbGVfYnVnX3BsYW5lKGRhdGEsIG1vZGUsIHBsYW5l LCBjbGlwX2ZiX3l0aWxlZCwgSUdUX1JPVEFUSU9OXzI3MCwgJnJlZl9jcmMpOwo+ICsKPiArCQlp Z3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBwbGFuZSAhPSBwcmltYXJ5ID8gTlVMTCA6ICZkYXRhLT5m YlswXSk7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHl1dl9jaHJv bWFfc3VicGl4ZWxfY2xpcF9wbGFuZV93aXRoX2N1cnNvcihkYXRhX3QgKmRhdGEsCj4gKwkJCQkJ CQlpZ3RfcGxhbmVfdCAqcGxhbmUsCj4gKwkJCQkJCQlzdHJ1Y3QgaWd0X2ZiICpjbGlwX2ZiLAo+ ICsJCQkJCQkJaWd0X3BsYW5lX3QgKmN1cnNvciwKPiArCQkJCQkJCXN0cnVjdCBpZ3RfZmIgKmN1 cnNvcl9mYiwKPiArCQkJCQkJCWlndF9jcmNfdCAqcmVmX2NyYywKPiArCQkJCQkJCWludCBjdXJz b3JfeCwgaW50IGN1cnNvcl95KQo+ICt7Cj4gKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRh dGEtPmRpc3BsYXk7Cj4gKwo+ICsJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgY2xpcF9mYik7Cj4g KwlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCA2NCwgNjQpOwo+ICsJaWd0X3BsYW5lX3Nl dF9yb3RhdGlvbihwbGFuZSwgSUdUX1JPVEFUSU9OXzApOwo+ICsKPiArCWlndF9wbGFuZV9zZXRf ZmIoY3Vyc29yLCBjdXJzb3JfZmIpOwo+ICsJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihjdXJzb3Is IGN1cnNvcl94LCBjdXJzb3JfeSk7Cj4gKwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENP TU1JVF9BVE9NSUMpOwo+ICsKPiArCWlndF9waXBlX2NyY19kcmFpbihkYXRhLT5waXBlX2NyYyk7 Cj4gKwlpZ3RfcGlwZV9jcmNfZ2V0X3NpbmdsZShkYXRhLT5waXBlX2NyYywgcmVmX2NyYyk7Cj4g Kwo+ICsJaWd0X3BsYW5lX3NldF9mYihjdXJzb3IsIE5VTEwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg Ym9vbCB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfcmlnaHQoZGF0YV90ICpkYXRhLAo+ ICsJCQkJCQkgaWd0X3JvdGF0aW9uX3Qgcm90YXRpb24sCj4gKwkJCQkJCSBpZ3RfcGxhbmVfdCAq cGxhbmUsCj4gKwkJCQkJCSBzdHJ1Y3QgaWd0X2ZiICpjbGlwX2ZiLAo+ICsJCQkJCQkgaWd0X2Ny Y190ICpyZWZfY3JjKQo+ICt7Cj4gKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRp c3BsYXk7Cj4gKwlpZ3RfY3JjX3QgY3JjID0ge307Cj4gKwo+ICsJaWd0X3BsYW5lX3NldF9mYihw bGFuZSwgY2xpcF9mYik7Cj4gKwlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCA2NCwgNjQp Owo+ICsJaWd0X3BsYW5lX3NldF9yb3RhdGlvbihwbGFuZSwgcm90YXRpb24pOwo+ICsJaWd0X3Bs YW5lX3NldF9zaXplKHBsYW5lLCBjbGlwX2ZiLT53aWR0aCAtIDEsIGNsaXBfZmItPmhlaWdodCk7 Cj4gKwo+ICsJc3dpdGNoIChyb3RhdGlvbikgewo+ICsJY2FzZSBJR1RfUk9UQVRJT05fMTgwOgo+ ICsJCWlndF9mYl9zZXRfcG9zaXRpb24oY2xpcF9mYiwgcGxhbmUsIDEsIDApOwo+ICsJY2FzZSBJ R1RfUk9UQVRJT05fMDoKPiArCQlpZ3RfZmJfc2V0X3NpemUoY2xpcF9mYiwgcGxhbmUsIGNsaXBf ZmItPndpZHRoIC0gMSwgY2xpcF9mYi0+aGVpZ2h0KTsKPiArCQlicmVhazsKPiArCj4gKwljYXNl IElHVF9ST1RBVElPTl8yNzA6Cj4gKwkJaWd0X2ZiX3NldF9wb3NpdGlvbihjbGlwX2ZiLCBwbGFu ZSwgMCwgMSk7Cj4gKwljYXNlIElHVF9ST1RBVElPTl85MDoKPiArCQlpZ3RfZmJfc2V0X3NpemUo Y2xpcF9mYiwgcGxhbmUsIGNsaXBfZmItPndpZHRoLCBjbGlwX2ZiLT5oZWlnaHQgLSAxKTsKPiAr CQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJaWd0X2Fzc2VydF9mKDAsICJVbmhhbmRsZWQgcm90 YXRpb24gJXhcbiIsIHJvdGF0aW9uKTsKPiArCX0KPiArCj4gKwlpZiAoaWd0X2Rpc3BsYXlfdHJ5 X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQykgPCAwKQo+ICsJCXJldHVybiBmYWxzZTsK PiArCj4gKwlhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNyYywg cmVmX2NyYyk7Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgeXV2X2No cm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX2JvdHRvbShkYXRhX3QgKmRhdGEsCj4gKwkJCQkJCSAg aWd0X3JvdGF0aW9uX3Qgcm90YXRpb24sCj4gKwkJCQkJCSAgaWd0X3BsYW5lX3QgKnBsYW5lLAo+ ICsJCQkJCQkgIHN0cnVjdCBpZ3RfZmIgKmNsaXBfZmIsCj4gKwkJCQkJCSAgaWd0X2NyY190ICpy ZWZfY3JjKQo+ICt7Cj4gKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7 Cj4gKwlpZ3RfY3JjX3QgY3JjID0ge307Cj4gKwo+ICsJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwg Y2xpcF9mYik7Cj4gKwlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCA2NCwgNjQpOwo+ICsJ aWd0X3BsYW5lX3NldF9yb3RhdGlvbihwbGFuZSwgcm90YXRpb24pOwo+ICsJaWd0X3BsYW5lX3Nl dF9zaXplKHBsYW5lLCBjbGlwX2ZiLT53aWR0aCwgY2xpcF9mYi0+aGVpZ2h0IC0gMSk7Cj4gKwo+ ICsJc3dpdGNoIChyb3RhdGlvbikgewo+ICsJY2FzZSBJR1RfUk9UQVRJT05fMTgwOgo+ICsJCWln dF9mYl9zZXRfcG9zaXRpb24oY2xpcF9mYiwgcGxhbmUsIDAsIDEpOwo+ICsJY2FzZSBJR1RfUk9U QVRJT05fMDoKPiArCQlpZ3RfZmJfc2V0X3NpemUoY2xpcF9mYiwgcGxhbmUsIGNsaXBfZmItPndp ZHRoLCBjbGlwX2ZiLT5oZWlnaHQgLSAxKTsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIElHVF9S T1RBVElPTl85MDoKPiArCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGNsaXBfZmIsIHBsYW5lLCAxLCAw KTsKPiArCWNhc2UgSUdUX1JPVEFUSU9OXzI3MDoKPiArCQlpZ3RfZmJfc2V0X3NpemUoY2xpcF9m YiwgcGxhbmUsIGNsaXBfZmItPndpZHRoIC0gMSwgY2xpcF9mYi0+aGVpZ2h0KTsKPiArCQlicmVh azsKPiArCWRlZmF1bHQ6Cj4gKwkJaWd0X2Fzc2VydF9mKDAsICJVbmhhbmRsZWQgcm90YXRpb24g JXhcbiIsIHJvdGF0aW9uKTsKPiArCX0KPiArCj4gKwlpZiAoaWd0X2Rpc3BsYXlfdHJ5X2NvbW1p dDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQykgPCAwKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4g Kwlhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2Ny Yyk7Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgeXV2X2Nocm9tYV9z dWJwaXhlbF9jbGlwX3BsYW5lX2xlZnQoZGF0YV90ICpkYXRhLAo+ICsJCQkJCQlpZ3Rfcm90YXRp b25fdCByb3RhdGlvbiwKPiArCQkJCQkJaWd0X3BsYW5lX3QgKnBsYW5lLAo+ICsJCQkJCQlzdHJ1 Y3QgaWd0X2ZiICpjbGlwX2ZiLAo+ICsJCQkJCQlpZ3RfY3JjX3QgKnJlZl9jcmMpCj4gK3sKPiAr CWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPiArCWlndF9jcmNfdCBj cmMgPSB7fTsKPiArCj4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBjbGlwX2ZiKTsKPiArCWln dF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDY1LCA2NCk7Cj4gKwlpZ3RfcGxhbmVfc2V0X3Jv dGF0aW9uKHBsYW5lLCByb3RhdGlvbik7Cj4gKwlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIGNs aXBfZmItPndpZHRoIC0gMSwgY2xpcF9mYi0+aGVpZ2h0KTsKPiArCj4gKwlzd2l0Y2ggKHJvdGF0 aW9uKSB7Cj4gKwljYXNlIElHVF9ST1RBVElPTl8wOgo+ICsJCWlndF9mYl9zZXRfcG9zaXRpb24o Y2xpcF9mYiwgcGxhbmUsIDEsIDApOwo+ICsJY2FzZSBJR1RfUk9UQVRJT05fMTgwOgo+ICsJCWln dF9mYl9zZXRfc2l6ZShjbGlwX2ZiLCBwbGFuZSwgY2xpcF9mYi0+d2lkdGggLSAxLCBjbGlwX2Zi LT5oZWlnaHQpOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgSUdUX1JPVEFUSU9OXzkwOgo+ICsJ CWlndF9mYl9zZXRfcG9zaXRpb24oY2xpcF9mYiwgcGxhbmUsIDAsIDEpOwo+ICsJY2FzZSBJR1Rf Uk9UQVRJT05fMjcwOgo+ICsJCWlndF9mYl9zZXRfc2l6ZShjbGlwX2ZiLCBwbGFuZSwgY2xpcF9m Yi0+d2lkdGgsIGNsaXBfZmItPmhlaWdodCAtIDEpOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoK PiArCQlpZ3RfYXNzZXJ0X2YoMCwgIlVuaGFuZGxlZCByb3RhdGlvbiAleFxuIiwgcm90YXRpb24p Owo+ICsJfQo+ICsKPiArCWlmIChpZ3RfZGlzcGxheV90cnlfY29tbWl0MihkaXNwbGF5LCBDT01N SVRfQVRPTUlDKSA8IDApCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWFzc2VydF9jb2xsZWN0 ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKPiArCXJldHVybiB0 cnVlOwo+ICt9Cj4gKwo+ICsKPiArc3RhdGljIGJvb2wgeXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlw X3BsYW5lX3RvcChkYXRhX3QgKmRhdGEsCj4gKwkJCQkJICAgICAgaWd0X3JvdGF0aW9uX3Qgcm90 YXRpb24sCj4gKwkJCQkJICAgICAgaWd0X3BsYW5lX3QgKnBsYW5lLAo+ICsJCQkJCSAgICAgIHN0 cnVjdCBpZ3RfZmIgKmNsaXBfZmIsCj4gKwkJCQkJICAgICAgaWd0X2NyY190ICpyZWZfY3JjKQo+ ICt7Cj4gKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7Cj4gKwlpZ3Rf Y3JjX3QgY3JjID0ge307Cj4gKwo+ICsJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgY2xpcF9mYik7 Cj4gKwlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCA2NCwgNjUpOwo+ICsJaWd0X3BsYW5l X3NldF9yb3RhdGlvbihwbGFuZSwgcm90YXRpb24pOwo+ICsJaWd0X3BsYW5lX3NldF9zaXplKHBs YW5lLCBjbGlwX2ZiLT53aWR0aCwgY2xpcF9mYi0+aGVpZ2h0IC0gMSk7Cj4gKwo+ICsJc3dpdGNo IChyb3RhdGlvbikgewo+ICsJY2FzZSBJR1RfUk9UQVRJT05fMDoKPiArCQlpZ3RfZmJfc2V0X3Bv c2l0aW9uKGNsaXBfZmIsIHBsYW5lLCAwLCAxKTsKPiArCWNhc2UgSUdUX1JPVEFUSU9OXzE4MDoK PiArCQlpZ3RfZmJfc2V0X3NpemUoY2xpcF9mYiwgcGxhbmUsIGNsaXBfZmItPndpZHRoLCBjbGlw X2ZiLT5oZWlnaHQgLSAxKTsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIElHVF9ST1RBVElPTl8y NzA6Cj4gKwkJaWd0X2ZiX3NldF9wb3NpdGlvbihjbGlwX2ZiLCBwbGFuZSwgMSwgMCk7Cj4gKwlj YXNlIElHVF9ST1RBVElPTl85MDoKPiArCQlpZ3RfZmJfc2V0X3NpemUoY2xpcF9mYiwgcGxhbmUs IGNsaXBfZmItPndpZHRoIC0gMSwgY2xpcF9mYi0+aGVpZ2h0KTsKPiArCQlicmVhazsKPiArCWRl ZmF1bHQ6Cj4gKwkJaWd0X2Fzc2VydF9mKDAsICJVbmhhbmRsZWQgcm90YXRpb24gJXhcbiIsIHJv dGF0aW9uKTsKPiArCX0KPiArCj4gKwlpZiAoaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIoZGlzcGxh eSwgQ09NTUlUX0FUT01JQykgPCAwKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlhc3NlcnRf Y29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7Cj4gKwly ZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgeXV2X2Nocm9tYV9zdWJwaXhlbF9j bGlwKGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUsIGlndF9vdXRwdXRfdCAqb3V0cHV0LCB1 bnNpZ25lZCBmb3JtYXQpCj4gK3sKPiArCWRybU1vZGVNb2RlSW5mbyAqbW9kZSA9IGlndF9vdXRw dXRfZ2V0X21vZGUob3V0cHV0KTsKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ ZGlzcGxheTsKPiArCWlndF9waXBlX3QgKnBpcGVfb2JqID0gJmRpc3BsYXktPnBpcGVzW3BpcGVd Owo+ICsJc3RydWN0IGlndF9mYiAqYmdfZmIgPSAmZGF0YS0+ZmJbMF07Cj4gKwlzdHJ1Y3QgaWd0 X2ZiICpiZ19jdXJzb3JfZmIgPSAmZGF0YS0+ZmJbMV07Cj4gKwlzdHJ1Y3QgaWd0X2ZiICpibGFj a19jdXJzb3JfZmIgPSAmZGF0YS0+ZmJbMl07Cj4gKwlzdHJ1Y3QgaWd0X2ZiICpjbGlwX2ZiID0g JmRhdGEtPmZiWzNdOwo+ICsJaWd0X3BsYW5lX3QgKnByaW1hcnkgPSBpZ3RfcGlwZV9nZXRfcGxh bmVfdHlwZShwaXBlX29iaiwgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7Cj4gKwlpZ3RfcGxhbmVf dCAqY3Vyc29yID0gaWd0X3BpcGVfZ2V0X3BsYW5lX3R5cGUocGlwZV9vYmosIERSTV9QTEFORV9U WVBFX0NVUlNPUik7Cj4gKwlpZ3RfcGxhbmVfdCAqcGxhbmU7Cj4gKwljYWlyb190ICpjcjsKPiAr CWJvb2wgcmV0ID0gZmFsc2U7Cj4gKwo+ICsJcHJlcGFyZV9jcnRjKGRhdGEsIHBpcGUsIG91dHB1 dCk7Cj4gKwo+ICsJaWd0X2NyZWF0ZV9jb2xvcl9mYihkaXNwbGF5LT5kcm1fZmQsIG1vZGUtPmhk aXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKPiArCQkJICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsIHhf bW9kaWZpZXIsCj4gKwkJCSAgICAuMCwgLjAsIDEuLCBiZ19mYik7Cj4gKwo+ICsJaWd0X2NyZWF0 ZV9jb2xvcl9mYihkaXNwbGF5LT5kcm1fZmQsIDI1NiwgMjU2LAo+ICsJCSAgICAgICAgICAgIERS TV9GT1JNQVRfQVJHQjg4ODgsIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4gKwkJCSAgICAu MCwgLjAsIDEuLCBiZ19jdXJzb3JfZmIpOwo+ICsKPiArCWlndF9jcmVhdGVfY29sb3JfZmIoZGlz cGxheS0+ZHJtX2ZkLCAyNTYsIDI1NiwKPiArCQkgICAgICAgICAgICBEUk1fRk9STUFUX0FSR0I4 ODg4LCBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAo+ICsJCQkgICAgLjAsIC4wLCAuMCwgYmxh Y2tfY3Vyc29yX2ZiKTsKPiArCj4gKwlpZ3RfY3JlYXRlX2ZiKGRpc3BsYXktPmRybV9mZCwgMjU2 LCAyNTYsCj4gKwkJICAgICAgZm9ybWF0LCB5X21vZGlmaWVyLCBjbGlwX2ZiKTsKPiArCj4gKwkv KiBEcmF3IHRoZSBGQiB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgY2xpcHBpbmcgdGhlIGNocm9tYSBz dWJwaXhlbCB0ZXN0LiAqLwo+ICsJY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChkaXNwbGF5LT5kcm1f ZmQsIGNsaXBfZmIpOwo+ICsKPiArCWlndF9wYWludF9jb2xvcihjciwgMCwgMCwgY2xpcF9mYi0+ d2lkdGgsIGNsaXBfZmItPmhlaWdodCwgMS4sIDAuLCAwLik7Cj4gKwlpZ3RfcGFpbnRfY29sb3Io Y3IsIDIsIDIsIGNsaXBfZmItPndpZHRoIC0gNCwgY2xpcF9mYi0+aGVpZ2h0IC0gNCwgMC4sIDEu LCAxLik7Cj4gKwlpZ3RfcGFpbnRfY29sb3IoY3IsIDQsIDQsIGNsaXBfZmItPndpZHRoIC0gOCwg Y2xpcF9mYi0+aGVpZ2h0IC0gOCwgLjc1LCAuNzUsIDEuKTsKPiArCj4gKwkvKiBXaGl0ZSBkb3Rz IGluIHRoZSBjb3JuZXJzLiAqLwo+ICsJaWd0X3BhaW50X2NvbG9yKGNyLCAwLCAwLCA2LCA2LCAx LiwgMS4sIDEuKTsKPiArCWlndF9wYWludF9jb2xvcihjciwgY2xpcF9mYi0+d2lkdGggLSA2LCAw LCA2LCA2LCAxLiwgMS4sIDEuKTsKPiArCWlndF9wYWludF9jb2xvcihjciwgMCwgY2xpcF9mYi0+ aGVpZ2h0IC0gNiwgNiwgNiwgMS4sIDEuLCAxLik7Cj4gKwlpZ3RfcGFpbnRfY29sb3IoY3IsIGNs aXBfZmItPndpZHRoIC0gNiwgY2xpcF9mYi0+aGVpZ2h0IC0gNiwgNiwgNiwgMS4sIDEuLCAxLik7 Cj4gKwo+ICsJaWd0X3B1dF9jYWlyb19jdHgoZGlzcGxheS0+ZHJtX2ZkLCBjbGlwX2ZiLCBjcik7 Cj4gKwo+ICsJaWd0X3BpcGVfY3JjX3N0YXJ0KGRhdGEtPnBpcGVfY3JjKTsKPiArCj4gKwlpZ3Rf cGxhbmVfc2V0X2ZiKHByaW1hcnksIGJnX2ZiKTsKPiArCWZvcl9lYWNoX3BsYW5lX29uX3BpcGUo ZGlzcGxheSwgcGlwZSwgcGxhbmUpIHsKPiArCQlzdHJ1Y3QgaWd0X2ZiICpjdXJzb3JfZmIgPSBw bGFuZSA9PSBwcmltYXJ5ID8gYmxhY2tfY3Vyc29yX2ZiIDogYmdfY3Vyc29yX2ZiOwo+ICsJCWln dF9jcmNfdCByZWZfY3JjOwo+ICsKPiArCQlpZiAoIWlndF9wbGFuZV9oYXNfZm9ybWF0X21vZChw bGFuZSwgZm9ybWF0LCBjbGlwX2ZiLT5tb2RpZmllcikgfHwgcGxhbmUgPT0gY3Vyc29yKQo+ICsJ CQljb250aW51ZTsKPiArCj4gKwkJeXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3dpdGhf Y3Vyc29yKGRhdGEsIHBsYW5lLCBjbGlwX2ZiLCBjdXJzb3IsIGN1cnNvcl9mYiwgJnJlZl9jcmMs IDYzICsgY2xpcF9mYi0+d2lkdGgsIDY0KTsKPiArCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhl bF9jbGlwX3BsYW5lX3JpZ2h0KGRhdGEsIElHVF9ST1RBVElPTl8wLCBwbGFuZSwgY2xpcF9mYiwg JnJlZl9jcmMpOwo+ICsJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfcmln aHQoZGF0YSwgSUdUX1JPVEFUSU9OXzkwLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMpOwo+ICsJ CXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfcmlnaHQoZGF0YSwgSUdUX1JP VEFUSU9OXzE4MCwgcGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKPiArCQlyZXQgfD0geXV2X2No cm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3JpZ2h0KGRhdGEsIElHVF9ST1RBVElPTl8yNzAsIHBs YW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7Cj4gKwo+ICsJCXl1dl9jaHJvbWFfc3VicGl4ZWxfY2xp cF9wbGFuZV93aXRoX2N1cnNvcihkYXRhLCBwbGFuZSwgY2xpcF9mYiwgY3Vyc29yLCBjdXJzb3Jf ZmIsICZyZWZfY3JjLCA2NCwgNjMgKyBjbGlwX2ZiLT5oZWlnaHQpOwo+ICsJCXJldCB8PSB5dXZf Y2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfYm90dG9tKGRhdGEsIElHVF9ST1RBVElPTl8wLCBw bGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMpOwo+ICsJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVs X2NsaXBfcGxhbmVfYm90dG9tKGRhdGEsIElHVF9ST1RBVElPTl85MCwgcGxhbmUsIGNsaXBfZmIs ICZyZWZfY3JjKTsKPiArCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX2Jv dHRvbShkYXRhLCBJR1RfUk9UQVRJT05fMTgwLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMpOwo+ ICsJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfYm90dG9tKGRhdGEsIElH VF9ST1RBVElPTl8yNzAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7Cj4gKwo+ICsJCXl1dl9j aHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV93aXRoX2N1cnNvcihkYXRhLCBwbGFuZSwgY2xpcF9m YiwgY3Vyc29yLCBjdXJzb3JfZmIsICZyZWZfY3JjLCA2NSAtIGN1cnNvcl9mYi0+d2lkdGgsIDY0 KTsKPiArCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX2xlZnQoZGF0YSwg SUdUX1JPVEFUSU9OXzAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7Cj4gKwkJcmV0IHw9IHl1 dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV9sZWZ0KGRhdGEsIElHVF9ST1RBVElPTl85MCwg cGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKPiArCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhl bF9jbGlwX3BsYW5lX2xlZnQoZGF0YSwgSUdUX1JPVEFUSU9OXzE4MCwgcGxhbmUsIGNsaXBfZmIs ICZyZWZfY3JjKTsKPiArCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX2xl ZnQoZGF0YSwgSUdUX1JPVEFUSU9OXzI3MCwgcGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKPiAr Cj4gKwkJeXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3dpdGhfY3Vyc29yKGRhdGEsIHBs YW5lLCBjbGlwX2ZiLCBjdXJzb3IsIGN1cnNvcl9mYiwgJnJlZl9jcmMsIDY0LCA2NSAtIGN1cnNv cl9mYi0+aGVpZ2h0KTsKPiArCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5l X3RvcChkYXRhLCBJR1RfUk9UQVRJT05fMCwgcGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKPiAr CQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3RvcChkYXRhLCBJR1RfUk9U QVRJT05fOTAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7Cj4gKwkJcmV0IHw9IHl1dl9jaHJv bWFfc3VicGl4ZWxfY2xpcF9wbGFuZV90b3AoZGF0YSwgSUdUX1JPVEFUSU9OXzE4MCwgcGxhbmUs IGNsaXBfZmIsICZyZWZfY3JjKTsKPiArCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlw X3BsYW5lX3RvcChkYXRhLCBJR1RfUk9UQVRJT05fMjcwLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9j cmMpOwo+ICsKPiArCQkvKiBSZXNldCB0byBkZWZhdWx0cyAqLwo+ICsJCWlndF9wbGFuZV9zZXRf cG9zaXRpb24ocGxhbmUsIDAsIDApOwo+ICsJCWlndF9wbGFuZV9zZXRfcm90YXRpb24ocGxhbmUs IElHVF9ST1RBVElPTl8wKTsKPiArCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBwbGFuZSA9PSBw cmltYXJ5ID8gYmdfZmIgOiBOVUxMKTsKPiArCX0KPiArCj4gKwlpZ3RfcmVxdWlyZV9mKHJldCwg IkNvdWxkIG5vdCB0ZXN0IHN1YnBpeGVsIGNsaXBwaW5nIGluIGFueSBjb3JuZXJcbiIpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciAqcHJldHRpZnkodWludDMyX3QgZm91cmNjKQo+ICt7 Cj4gKwlzdGF0aWMgY2hhciBzdHJbNV07Cj4gKwo+ICsJbWVtY3B5KHN0ciwgJmZvdXJjYywgNCk7 Cj4gKwlzdHJbNF0gPSAwOwo+ICsJcmV0dXJuIHN0cjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg cnVuX3Rlc3RzX2Zvcl9mb3JtYXQoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwgaWd0X291 dHB1dF90ICpvdXRwdXQsIHVuc2lnbmVkIGludCBmb3JtYXQpCj4gK3sKPiArCWlndF9kaXNwbGF5 X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPiArCWNvbnN0IGNoYXIgKmZzdHIgPSBwcmV0 dGlmeShmb3JtYXQpOwo+ICsKPiArCWlndF9maXh0dXJlCj4gKwkJaWd0X3JlcXVpcmUocGlwZV9z dXBwb3J0c19mb3JtYXQoZGlzcGxheSwgcGlwZSwgZm9ybWF0LCB4X21vZGlmaWVyKSk7Cj4gKwo+ ICsJaWd0X3N1YnRlc3RfZigicGlwZS0lcy0lcy1yZ2Itc3dpdGNoIiwga21zdGVzdF9waXBlX25h bWUocGlwZSksIGZzdHIpCj4gKwkJeXV2X3JnYl9zd2l0Y2goZGF0YSwgcGlwZSwgb3V0cHV0LCBm YWxzZSwgZm9ybWF0KTsKPiArCj4gKwlpZ3Rfc3VidGVzdF9mKCJwaXBlLSVzLSVzLXJnYi1zY2Fs ZWQtc3dpdGNoIiwga21zdGVzdF9waXBlX25hbWUocGlwZSksIGZzdHIpCj4gKwkJeXV2X3JnYl9z d2l0Y2goZGF0YSwgcGlwZSwgb3V0cHV0LCB0cnVlLCBmb3JtYXQpOwo+ICsKPiArCWlndF9zdWJ0 ZXN0X2YoInBpcGUtJXMtJXMtdmFsaWQtd2lkdGgiLCBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSwg ZnN0cikKPiArCQl5dXZfdmFsaWRfd2lkdGgoZGF0YSwgcGlwZSwgb3V0cHV0LCBmb3JtYXQpOwo+ ICsKPiArCWlndF9zdWJ0ZXN0X2YoInBpcGUtJXMtJXMtY3JvcC1zY2FsZS1idWciLCBrbXN0ZXN0 X3BpcGVfbmFtZShwaXBlKSwgZnN0cikKPiArCQl5dXZfY3JvcF9zY2FsZV9idWcoZGF0YSwgcGlw ZSwgb3V0cHV0LCBmb3JtYXQpOwo+ICsKPiArCWlndF9zdWJ0ZXN0X2YoInBpcGUtJXMtJXMtY2hy b21hLXN1YnBpeGVsLWNsaXAiLCBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSwgZnN0cikKPiArCQl5 dXZfY2hyb21hX3N1YnBpeGVsX2NsaXAoZGF0YSwgcGlwZSwgb3V0cHV0LCBmb3JtYXQpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBydW5fdGVzdHNfZm9yX3BpcGUoZGF0YV90ICpkYXRhLCBlbnVt IHBpcGUgcGlwZSkKPiArewo+ICsJaWd0X291dHB1dF90ICpvdXRwdXQgPSBOVUxMOwo+ICsKPiAr CWlndF9maXh0dXJlCj4gKwkJaWd0X3JlcXVpcmUoKG91dHB1dCA9IGlndF9nZXRfc2luZ2xlX291 dHB1dF9mb3JfcGlwZSgmZGF0YS0+ZGlzcGxheSwgcGlwZSkpKTsKPiArCj4gKwlpZ3Rfc3VidGVz dF9mKCJwaXBlLSVzLXl1di1zYW5pdHktY3JjIiwga21zdGVzdF9waXBlX25hbWUocGlwZSkpCj4g KwkJeXV2X3Nhbml0eShkYXRhLCBwaXBlLCBvdXRwdXQpOwo+ICsKPiArCWZvciAoaW50IGkgPSAw OyBpIDwgY291bnRfZm9ybWF0czsgaSsrKQo+ICsJCWlmIChpZ3RfZm9ybWF0X2lzX3l1dihmb3Jt YXRzW2ldKSkKPiArCQkJaWd0X3N1YnRlc3RfZ3JvdXAKPiArCQkJCXJ1bl90ZXN0c19mb3JfZm9y bWF0KGRhdGEsIHBpcGUsIG91dHB1dCwgZm9ybWF0c1tpXSk7Cj4gK30KPiArCj4gK2lndF9tYWlu Cj4gK3sKPiArCWRhdGFfdCBkYXRhID0ge307Cj4gKwllbnVtIHBpcGUgcGlwZTsKPiArCj4gKwlp Z3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7Cj4gKwo+ICsJaWd0X2ZpeHR1cmUgewo+ICsJCWRhdGEu ZGlzcGxheS5kcm1fZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9BTlkpOwo+ICsK PiArCQlrbXN0ZXN0X3NldF92dF9ncmFwaGljc19tb2RlKCk7Cj4gKwkJaWd0X2Rpc3BsYXlfcmVx dWlyZSgmZGF0YS5kaXNwbGF5LCBkYXRhLmRpc3BsYXkuZHJtX2ZkKTsKPiArCQlpZ3RfcmVxdWly ZShkYXRhLmRpc3BsYXkuaXNfYXRvbWljKTsKPiArCQlpZ3RfcmVxdWlyZV9waXBlX2NyYyhkYXRh LmRpc3BsYXkuZHJtX2ZkKTsKPiArCj4gKwkJaWYgKGlndF9kaXNwbGF5X2hhc19mb3JtYXRfbW9k KCZkYXRhLmRpc3BsYXksIERSTV9GT1JNQVRfWFJHQjg4ODgsIExPQ0FMX0k5MTVfRk9STUFUX01P RF9YX1RJTEVEKSkKPiArCQkJeF9tb2RpZmllciA9IExPQ0FMX0k5MTVfRk9STUFUX01PRF9YX1RJ TEVEOwo+ICsKPiArCQlpZiAoaWd0X2Rpc3BsYXlfaGFzX2Zvcm1hdF9tb2QoJmRhdGEuZGlzcGxh eSwgRFJNX0ZPUk1BVF9YUkdCODg4OCwgTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQpKQo+ ICsJCQl5X21vZGlmaWVyID0gTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ7Cj4gKwl9Cj4g Kwo+ICsJaWd0X2Zvcm1hdF9hcnJheV9maWxsKCZmb3JtYXRzLCAmY291bnRfZm9ybWF0cywgdHJ1 ZSk7Cj4gKwo+ICsJZm9yX2VhY2hfcGlwZV9zdGF0aWMocGlwZSkKPiArCQlpZ3Rfc3VidGVzdF9n cm91cAo+ICsJCQlydW5fdGVzdHNfZm9yX3BpcGUoJmRhdGEsIHBpcGUpOwo+ICsKPiArCWlndF9m aXh0dXJlIHsKPiArCQlpZ3RfZGlzcGxheV9maW5pKCZkYXRhLmRpc3BsYXkpOwo+ICsJCWNsb3Nl KGRhdGEuZGlzcGxheS5kcm1fZmQpOwo+ICsJfQo+ICt9Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL21l c29uLmJ1aWxkIGIvdGVzdHMvbWVzb24uYnVpbGQKPiBpbmRleCAzNTE1OTRmYTcyZjAuLmZjNjll YzY3N2U0NyAxMDA2NDQKPiAtLS0gYS90ZXN0cy9tZXNvbi5idWlsZAo+ICsrKyBiL3Rlc3RzL21l c29uLmJ1aWxkCj4gQEAgLTYyLDYgKzYyLDcgQEAgdGVzdF9wcm9ncyA9IFsKPiAgIAkna21zX3Vu aXZlcnNhbF9wbGFuZScsCj4gICAJJ2ttc192YmxhbmsnLAo+ICAgCSdrbXNfdnJyJywKPiArCSdr bXNfeXV2JywKPiAgIAknbWV0YV90ZXN0JywKPiAgIAkncGFuZnJvc3RfZ2V0X3BhcmFtJywKPiAg IAkncGFuZnJvc3RfZ2VtX25ldycsCj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2lndC1kZXY=