From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 320E36E0E9 for ; Wed, 4 Dec 2019 11:59:19 +0000 (UTC) References: <20191204093840.3649-1-stanislav.lisovskiy@intel.com> From: =?UTF-8?Q?Juha-Pekka_Heikkil=c3=a4?= Message-ID: <9b900d0b-7e14-cae5-dbb1-eed93d0bb4ec@intel.com> Date: Wed, 4 Dec 2019 13:59:13 +0200 MIME-Version: 1.0 In-Reply-To: <20191204093840.3649-1-stanislav.lisovskiy@intel.com> Content-Language: en-US Subject: Re: [igt-dev] [PATCH i-g-t v13] igt/tests: kms_plane_stress: Add plane stress test List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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: Stanislav Lisovskiy , igt-dev@lists.freedesktop.org Cc: martin.peres@intel.com List-ID: CgpPbiA0LjEyLjIwMTkgMTEuMzgsIFN0YW5pc2xhdiBMaXNvdnNraXkgd3JvdGU6Cj4gVGhpcyB0 ZXN0IGF0dGVtcHRzIHRvIHV0aWxpemUgYWxsIGNvbm5lY3RlZAo+IG91dHB1dHMgYXQgdGhlIHNh bWUgdGltZSwgdXNpbmcgbWF4aW11bSBwb3NzaWJsZQo+IHJlc29sdXRpb24gYW5kIGFtb3VudCBv ZiBwbGFuZXMsIHRvIGNoZWNrIHdoZXRoZXIKPiB3ZSBhcmUgaGl0aW5nIGFueSBraW5kIG9mIGJh bmR3aWR0aCwgd2F0ZXJtYXJrIG9yCj4gb3RoZXIgbGltaXRhdGlvbnMuCj4gCj4gdjI6IEFkZGVk IGNwdSBhbmQgZ3B1IGxvYWQgdGhyZWFkcywgd2hpY2ggY29uc3VtZQo+ICAgICAgYWRkaXRpb25h bCBiYW5kd2lkdGguCj4gCj4gdjM6IFJlbW92ZWQgYmluYXJ5IHBpY3R1cmUgZmlsZSwgdXNpbmcg cGF0dGVybiBmYgo+ICAgICAgaW5zdGVhZC4KPiAKPiB2NDogTW92ZWQgRkIgY3JlYXRpb24vcmVt b3ZhbCB0byBiZXR0ZXIgcGxhY2UuCj4gCj4gdjU6IEZpeGVkIHJlYmFzZSBjb25mbGljdCBhbmQg Y2hhbmdlZCAiZmItPnRpbGluZyIKPiAgICAgIHRvICJmYi0+bW9kaWZpZXIiLgo+IAo+IHY2OiBS ZW1vdmVkIHVubmVjZXNzYXJ5IG5ldyBtYWNybyBmb3IgaXRlcmF0aW5nIG9uCj4gICAgICBwaXBl cy4gVGFrZW4gaW50byB1c2UgaWd0X2dldHRpbWUgaW5zdGVhZCBvZgo+ICAgICAgY2xvY2tfZ2V0 dGltZS4KPiAKPiB2NzogUHV0IGZiIHJlaW5pdCBpbnRvIGlndF9maXh0dXJlIHRvIGF2b2lkIHBy b2JsZW1zLgo+ICAgICAgTW92ZSBzdHJlc3MgZnVuY3Rpb24gdW5kZXIgaWd0X3N1YnRlc3QuIFJl bGVhc2UgcGxhbmVzLAo+ICAgICAgcmVtb3ZlIHJlZHVuZGFudCBjb21taXQsIGFzc2VydCBpZiBu byBwbGFuZXMgY2FuIGJlIHVzZWQuCj4gCj4gdjg6IC0gQWRkIGJsaXR0aW5nIGFsc28sIHRvIGhh dmUgbW9yZSBmdW4KPiAgICAgIC0gTm93IHVzaW5nIHNlcGFyYXRlIGZyYW1lYnVmZmVyIHBlciBl YWNoIHBsYW5lLgo+ICAgICAgLSBGaXhlZCBtYWdpYyBudW1iZXIgZm9yIGJwcCB2YWx1ZShub3cg YmFzZWQgb24gZm9ybWF0KQo+ICAgICAgLSBTb21lIG9wdGltaXphdGlvbnMsIGxpa2Ugbm90IGFw cGx5aW5nIHNhbWUgbW9kZSBpZiBpdAo+ICAgICAgICBoYXNuJ3QgY2hhbmdlLCBhbHNvIGRvbid0 IGRvIGhpZ2hlc3QgbW9kZSBzZWFyY2ggb24KPiAgICAgICAgZWFjaCBpdGVyYXRpb24sIGp1c3Qg Y2FsY3VsYXRlIG9uY2UgYW5kIHVzZSBpdC4KPiAgICAgIC0gU29tZSBjb2RlIHJlZmFjdG9yaW5n OiBleHRyYWN0ZWQgc29tZSBsZW5ndGh5IGNvZGUKPiAgICAgICAgdG8gc2VwYXJhdGUgZnVuY3Rp b25zLgo+ICAgICAgLSBGaXhlZCB3cm9uZyBpbmRleCBmb3IgY3Vyc29yIEZCKGN1cnNvciBGQiBp cyBvbmUgcGVyIHBpcGUpCj4gCj4gdjk6Cj4gICAgICAtIE1vcmUgaGVscGVyIGZ1bmN0aW9ucyhz dGFydC9zdG9wIHRocmVhZHMsIHRlc3QgaW5pdCkKPiAgICAgIC0gTm93IGRvaW5nIEdQVSB3b3Jr IGluIHB0aHJlYWRzIGFsc28KPiAgICAgIC0gRG8gR1BVIHdvcmsgaW4gYSBzZXBhcmF0ZSBmcmFt ZWJ1ZmZlcihub3QgZGlzcGxheWVkKQo+IAo+IHYxMDoKPiAgICAgIC0gRml4IGlzc3VlIGluIG1h aW4gdGVzdGluZyBjeWNsZSwgY29kZSByZWZhY3RvcmluZwo+ICAgICAgLSBSZWJhc2VkCj4gCj4g djExOgo+ICAgICAgLSBGaXhlZCBpc3N1ZSB3aXRoIHN1c3BlbmRpbmcvcmVzdW1pbmcgR1BVIHRo cmVhZHMKPiAgICAgICAgdG8gZ2V0IGNyYy4gQWRkZWQgbnVtX3JlY3RhbmdsZXMgdG8gYmUgYWJs ZSB0byBjdXN0b21pemUKPiAgICAgICAgbnVtYmVyIG9mIGdwZ3B1X2ZpbGwgY2FsbHMuCj4gCj4g djEyOgo+ICAgICAgLSBSZW1vdmVkIHVubmVlZGVkIHNoYXJlZCBmYiBmdW5jdGlvbmFsaXR5IGFu ZCBncHUgdGhyZWFkCj4gICAgICAgIHBhdXNlL3Jlc3VtZS4KPiAgICAgIC0gTm93IGFsc28gdXNp bmcgZGlmZmVyZW50IGZvcm1hdHMgZm9yIGN1cnNvciBmYi4KPiAgICAgIC0gUmVtb3ZlZCB1bm5l Y2Vzc2FyeSBwYXJhbWV0ZXJzIGZvciBzdHJlc3MgZnVuY3Rpb24uCj4gICAgICAtIENoYW5nZWQg cGxhbmVfc3RyZXNzIGZ1bmN0aW9uIG5hbWUgdG8gcGlwZV9zdHJlc3MobWFrZXMgc2Vuc2UpCj4g ICAgICAtIFB1dCBncGdwdV93YWxrIHggYW5kIHkgYnVnIGZpeCBpbnRvIHNlcGFyYXRlIHBhdGNo Lgo+IAo+IHYxMzoKPiAgICAgIC0gQWRkZWQgdGVzdHMgZG9jdW1lbnRhdGlvbi4KPiAKPiBDaGFu Z2UtSWQ6IEk3OWFkNzU2Njg1ODAxYWJkYzg2ZWRkOWE4M2EwMzgxNjM5OWQ0YThkCj4gU2lnbmVk LW9mZi1ieTogU3RhbmlzbGF2IExpc292c2tpeSA8c3RhbmlzbGF2Lmxpc292c2tpeUBpbnRlbC5j b20+Cj4gLS0tCj4gICB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzICAgfCAgIDEgKwo+ICAgdGVzdHMv a21zX3BsYW5lX3N0cmVzcy5jIHwgODY2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwo+ICAgdGVzdHMvbWVzb24uYnVpbGQgICAgICAgIHwgICAxICsKPiAgIDMgZmlsZXMg Y2hhbmdlZCwgODY4IGluc2VydGlvbnMoKykKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9r bXNfcGxhbmVfc3RyZXNzLmMKPiAKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNl cyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiBpbmRleCAxNzk4MGVkNi4uZGQyZTQzNDEgMTAw NjQ0Cj4gLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ICsrKyBiL3Rlc3RzL01ha2VmaWxl LnNvdXJjZXMKPiBAQCAtNjgsNiArNjgsNyBAQCBURVNUU19wcm9ncyA9IFwKPiAgIAlrbXNfcGxh bmVfbXVsdGlwbGUgXAo+ICAgCWttc19wbGFuZV9zY2FsaW5nIFwKPiAgIAlrbXNfcHJpbWUgXAo+ ICsJa21zX3BsYW5lX3N0cmVzcyBcCj4gICAJa21zX3Byb3BfYmxvYiBcCj4gICAJa21zX3Byb3Bl cnRpZXMgXAo+ICAgCWttc19wc3IgXAo+IGRpZmYgLS1naXQgYS90ZXN0cy9rbXNfcGxhbmVfc3Ry ZXNzLmMgYi90ZXN0cy9rbXNfcGxhbmVfc3RyZXNzLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAwLi5kZDg4MWNkNwo+IC0tLSAvZGV2L251bGwKPiArKysgYi90ZXN0cy9r bXNfcGxhbmVfc3RyZXNzLmMKPiBAQCAtMCwwICsxLDg2NiBAQAo+ICsvKgo+ICsgKiBDb3B5cmln aHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiAr ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug KGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGlu IGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJl Lgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBX QVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiAr ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJT IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBB UklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ ICsgKi8KPiArCj4gKyNpbmNsdWRlICJpZ3QuaCIKPiArI2luY2x1ZGUgImlndF9yYW5kLmgiCj4g KyNpbmNsdWRlICJncGdwdV9maWxsLmgiCj4gKyNpbmNsdWRlICJkcm10ZXN0LmgiCj4gKyNpbmNs dWRlICJzd19zeW5jLmgiCj4gKyNpbmNsdWRlIDxlcnJuby5oPgo+ICsjaW5jbHVkZSA8cHRocmVh ZC5oPgo+ICsjaW5jbHVkZSA8c3RkYm9vbC5oPgo+ICsjaW5jbHVkZSA8c3RkaW8uaD4KPiArI2lu Y2x1ZGUgPHN0cmluZy5oPgo+ICsjaW5jbHVkZSA8dGltZS5oPgo+ICsjaW5jbHVkZSA8cG9sbC5o Pgo+ICsjaW5jbHVkZSA8cHRocmVhZC5oPgo+ICsjaW5jbHVkZSA8c2VtYXBob3JlLmg+Cj4gKwo+ ICsKPiArSUdUX1RFU1RfREVTQ1JJUFRJT04oIlN0cmVzcyB0ZXN0IGhvdyBncHUgYW5kIGNwdSBi ZWhhdmVzIGlmIG1heGltdW0gYW1vdW50IG9mIHBsYW5lcywgIgo+ICsgICAgICAgICAgICAgICAg ICAgICAiY3B1IGFuZCBncHUgdXRpbGl6YXRpb24gaXMgYWNoaWV2ZWQgaW4gb3JkZXIgdG8gcmV2 ZWFsIHBvc3NpYmxlICIKPiArICAgICAgICAgICAgICAgICAgICAgImJhbmR3aWR0aC93YXRlcm1h cmsgYW5kIHNpbWlsYXIgcHJvYmxlbXMgIik7Cj4gKwo+ICsjaWZuZGVmIERSTV9DQVBfQ1VSU09S X1dJRFRICj4gKyNkZWZpbmUgRFJNX0NBUF9DVVJTT1JfV0lEVEggMHg4Cj4gKyNlbmRpZgo+ICsj aWZuZGVmIERSTV9DQVBfQ1VSU09SX0hFSUdIVAo+ICsjZGVmaW5lIERSTV9DQVBfQ1VSU09SX0hF SUdIVCAweDkKPiArI2VuZGlmCj4gKwo+ICsjZGVmaW5lIE5fQkxJVFMgMwo+ICsKPiArI2RlZmlu ZSBOX0ZPUk1BVFMgMQo+ICtzdGF0aWMgY29uc3QgdWludDMyX3QgZm9ybWF0c1tOX0ZPUk1BVFNd ID0gewo+ICsJRFJNX0ZPUk1BVF9YUkdCODg4OCwKPiArCS8qCj4gKwkgKiBXaXRoIHRob3NlIGVu YWJsZWQgd2lsbCB0YWtlIHNpZ25pZmljYW50bHkgbW9yZSB0aW1lLgo+ICsJICovCj4gKy8vCURS TV9GT1JNQVRfUkdCNTY1LAo+ICsvLwlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAo+ICt9Owo+ICsK PiArI2RlZmluZSBOX1RJTElOR19NRVRIT0RTIDEKPiArc3RhdGljIGNvbnN0IHVpbnQ2NF90IHRp bGluZ3NbTl9USUxJTkdfTUVUSE9EU10gPSB7Cj4gKwlEUk1fRk9STUFUX01PRF9MSU5FQVIsCj4g KwlJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKPiArCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVELAo+ ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIgKmZvcm1hdF9zdHIoaW50IGZvcm1hdF9pbmRl eCkKPiArewo+ICsJc3dpdGNoIChmb3JtYXRzW2Zvcm1hdF9pbmRleF0pIHsKPiArCWNhc2UgRFJN X0ZPUk1BVF9SR0I1NjU6Cj4gKwkJcmV0dXJuICJyZ2I1NjUiOwo+ICsJY2FzZSBEUk1fRk9STUFU X1hSR0I4ODg4Ogo+ICsJCXJldHVybiAieHJnYjg4ODgiOwo+ICsJY2FzZSBEUk1fRk9STUFUX1hS R0IyMTAxMDEwOgo+ICsJCXJldHVybiAieHJnYjIxMDEwMTAiOwo+ICsJZGVmYXVsdDoKPiArCQlp Z3RfYXNzZXJ0KGZhbHNlKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIgKnRp bGluZ19zdHIoaW50IHRpbGluZ19pbmRleCkKPiArewo+ICsJc3dpdGNoICh0aWxpbmdzW3RpbGlu Z19pbmRleF0pIHsKPiArCWNhc2UgRFJNX0ZPUk1BVF9NT0RfTElORUFSOgo+ICsJCXJldHVybiAi dW50aWxlZCI7Cj4gKwljYXNlIEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOgo+ICsJCXJldHVybiAi eHRpbGVkIjsKPiArCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6Cj4gKwkJcmV0dXJuICJ5 dGlsZWQiOwo+ICsJZGVmYXVsdDoKPiArCQlpZ3RfYXNzZXJ0KGZhbHNlKTsKPiArCX0KPiArfQo+ ICsKPiArCj4gKyNkZWZpbmUgTUFYX0NPUkVTIDgKPiArI2RlZmluZSBNQVhfUExBTkVTIDE2Cj4g Kwo+ICtzdHJ1Y3QgZGF0YTsKPiArCj4gK3N0cnVjdCB0aHJlYWRfY29udGV4dCB7Cj4gKwlzdHJ1 Y3QgZGF0YSAqZGF0YTsKPiArCWludCBpZDsKPiArCXZvaWQgKmJ1ZjE7Cj4gKwl2b2lkICpidWYy Owo+ICt9Owo+ICsKPiArc3RydWN0IHJlY3Qgewo+ICsJaW50IHg7Cj4gKwlpbnQgeTsKPiArCWlu dCB3Owo+ICsJaW50IGg7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZ3B1X2NvbnRleHQgewo+ICsJc3Ry dWN0IGRhdGEgKmRhdGE7Cj4gKwlpbnQgcGlwZTsKPiArCWludCBjb2xvcjsKPiArCWludCBudW1f cmVjdGFuZ2xlczsKPiArCXN0cnVjdCBpZ3RfZmIgKmZiX3B0cjsKPiArCXN0cnVjdCByZWN0IGJs dF9yZWN0Owo+ICsJc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsKPiArfTsKPiArCj4g K2VudW0gewo+ICsJUlVOTklORywKPiArCVNUT1BQRUQsCj4gKwlQQVVTRUQsCj4gKwlMQVNUX1NU QVRFID0gUEFVU0VECj4gK30gdGhyZWFkX3N0YXRlOwo+ICsKPiArc3RydWN0IGRhdGEgewo+ICsJ aW50IGRybV9mZDsKPiArCWlndF9kaXNwbGF5X3QgZGlzcGxheTsKPiArCWludCBudW1fcGxhbmVz W0lHVF9NQVhfUElQRVNdOwo+ICsJdWludDMyX3QgZm9ybWF0Owo+ICsJdWludDY0X3QgbW9kaWZp ZXI7Cj4gKwl1aW50MzJfdCBkZXZpZDsKPiArCWRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1ncjsKPiAr CWRybU1vZGVNb2RlSW5mbyAqbGFzdF9tb2RlW0lHVF9NQVhfUElQRVNdOwo+ICsJc3RydWN0IGln dF9mYiBmYltJR1RfTUFYX1BJUEVTICogTUFYX1BMQU5FU107Cj4gKwlzdHJ1Y3QgaWd0X2ZiIGN1 cnNvcl9mYltJR1RfTUFYX1BJUEVTXTsKPiArCXB0aHJlYWRfdCBjcHVfdGhyZWFkW01BWF9DT1JF U107Cj4gKwlwdGhyZWFkX3QgZ3B1X3RocmVhZFtJR1RfTUFYX1BJUEVTXTsKPiArCWJvb2wgY3B1 X3RocmVhZF9zdG9wW01BWF9DT1JFU107Cj4gKwlpbnQgZ3B1X3RocmVhZF9zdGF0ZVtJR1RfTUFY X1BJUEVTXTsKPiArCXNlbV90IGdwdV90aHJlYWRfcGF1c2VfYWNrW0lHVF9NQVhfUElQRVNdOwo+ ICsJc3RydWN0IHRocmVhZF9jb250ZXh0IGNwdV9jb250ZXh0W01BWF9DT1JFU107Cj4gKwlzdHJ1 Y3QgZ3B1X2NvbnRleHQgZ3B1X2NvbnRleHRbSUdUX01BWF9QSVBFU107Cj4gKwlkcm1Nb2RlTW9k ZUluZm8gKmhpZ2hlc3RfbW9kZVtJR1RfTUFYX1BJUEVTXTsKPiArCWRybU1vZGVDb25uZWN0b3JQ dHIgKmNvbm5lY3RvcnM7Cj4gKwlkcm1Nb2RlUmVzICptb2RlX3Jlc291cmNlczsKPiArCWludCBu dW1iZXJfb2ZfY29yZXM7Cj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBzdG9wX2dwdV90aHJlYWRz KHN0cnVjdCBkYXRhICpkYXRhKTsKPiArc3RhdGljIHZvaWQgc3RhcnRfZ3B1X3RocmVhZHMoc3Ry dWN0IGRhdGEgKmRhdGEpOwo+ICsKPiArc3RydWN0IGJhc2VfY3JjIHsKPiArCWJvb2wgc2V0Owo+ ICsJaWd0X2NyY190IGNyYzsKPiArfTsKPiArCj4gK2lndF9waXBlX2NyY190ICpwaXBlX2NyYzsK PiArCj4gKyNkZWZpbmUgQlVGX1NJWkUgMTI4KjEwMjQqMTAyNAo+ICsKPiArc3RhdGljIHZvaWQg KmNwdV9sb2FkKHZvaWQgKmQpCj4gK3sKPiArCWNoYXIgKmJ1ZjEsICpidWYyOwo+ICsJc3RydWN0 IHRocmVhZF9jb250ZXh0ICpjb250ZXh0ID0gKHN0cnVjdCB0aHJlYWRfY29udGV4dCAqKWQ7Cj4g KwlzdHJ1Y3QgZGF0YSAqZGF0YSA9IGNvbnRleHQtPmRhdGE7Cj4gKwo+ICsJYnVmMSA9IGNvbnRl eHQtPmJ1ZjE7Cj4gKwlidWYyID0gY29udGV4dC0+YnVmMjsKPiArCj4gKwlkYXRhLT5jcHVfdGhy ZWFkX3N0b3BbY29udGV4dC0+aWRdID0gZmFsc2U7Cj4gKwo+ICsJaWd0X2luZm8oIkNQVSB0aHJl YWQgY3B1IGlkICVkIHN0YXJ0XG4iLCBjb250ZXh0LT5pZCk7Cj4gKwo+ICsJLyogSnVzdCB0byBt YWtlIENQVSBidXN5Li4uICovCj4gKwl3aGlsZSghZGF0YS0+Y3B1X3RocmVhZF9zdG9wW2NvbnRl eHQtPmlkXSkgewo+ICsJCW1lbWNweShidWYxLCBidWYyLCBCVUZfU0laRSk7Cj4gKwkJbWVtY3B5 KGJ1ZjIsIGJ1ZjEsIEJVRl9TSVpFKTsKPiArCX0KPiArCj4gKwlpZ3RfaW5mbygiQ1BVIHRocmVh ZCBjcHUgaWQgJWQgc3RvcFxuIiwgY29udGV4dC0+aWQpOwo+ICsKPiArCXJldHVybiBOVUxMOwo+ ICt9Cj4gKwo+ICsKPiArc3RhdGljIHZvaWQgc2NyYXRjaF9idWZfaW5pdChzdHJ1Y3QgaWd0X2J1 ZiAqYnVmLAo+ICsJCQkgICAgIGRybV9pbnRlbF9ibyAqYm8sIGludCB3aWR0aCwKPiArCQkJICAg ICBpbnQgaGVpZ2h0LCBpbnQgc3RyaWRlLCBpbnQgdGlsaW5nLCBpbnQgYnBwKQo+ICt7Cj4gKwli dWYtPmJvID0gYm87Cj4gKwlidWYtPnN0cmlkZSA9IHN0cmlkZTsKPiArCWJ1Zi0+dGlsaW5nID0g dGlsaW5nOwo+ICsJYnVmLT5zaXplID0gd2lkdGggKiBoZWlnaHQgKiBicHAgLyA4Owo+ICsJYnVm LT5icHAgPSBicHA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkICpncHVfbG9hZCh2b2lkICpwdHIp Cj4gK3sKPiArCXN0cnVjdCBncHVfY29udGV4dCAqY29udGV4dCA9IChzdHJ1Y3QgZ3B1X2NvbnRl eHQgKilwdHI7Cj4gKwlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoID0gTlVMTDsKPiAr CXN0cnVjdCBpZ3RfYnVmIGRzdDsKPiArCXN0cnVjdCBkYXRhICpkYXRhID0gY29udGV4dC0+ZGF0 YTsKPiArCWludCBwaXBlID0gY29udGV4dC0+cGlwZTsKPiArCWlndF9maWxsZnVuY190IGdwZ3B1 X2ZpbGwgPSBOVUxMOwo+ICsJZHJtX2ludGVsX2JvICpibyA9IE5VTEw7Cj4gKwlzdHJ1Y3QgaWd0 X2ZiIGZiLCAqZmJfcHRyID0gTlVMTCwgKmxhc3RfZmJfcHRyID0gTlVMTDsKPiArCWludCByZWN0 X2Rpdmlzb3I7Cj4gKwlpbnQgcmVjdF93aWR0aDsKPiArCWludCByZWN0X2hlaWdodDsKPiArCWlu dCBmcmFtZV93aWR0aDsKPiArCWludCBmcmFtZV9oZWlnaHQ7Cj4gKwlpbnQgYnl0ZXNfcGVyX3Bp eGVsOwo+ICsJZHJtTW9kZU1vZGVJbmZvICptb2RlOwo+ICsJaW50IGZyYW1lID0gMDsKPiArCWlu dCB4LCB5Owo+ICsJaW50IGxhc3Rfc3RhdGUgPSAtMTsKPiArCWludCByZWN0Owo+ICsKPiArCWdw Z3B1X2ZpbGwgPSBpZ3RfZ2V0X2dwZ3B1X2ZpbGxmdW5jKGRhdGEtPmRldmlkKTsKPiArCj4gKwlp Z3RfcmVxdWlyZV9mKGdwZ3B1X2ZpbGwsCj4gKwkgICAgICAgICAgICAgICJubyBncGdwdS1maWxs IGZ1bmN0aW9uXG4iKTsKPiArCj4gKwliYXRjaCA9IGNvbnRleHQtPmJhdGNoOwo+ICsJaWd0X2Fz c2VydChiYXRjaCk7Cj4gKwo+ICsJbW9kZSA9IGRhdGEtPmhpZ2hlc3RfbW9kZVtwaXBlXTsKPiAr CWlmICghbW9kZSkKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlpZ3RfY3JlYXRlX2NvbG9yX3Bh dHRlcm5fZmIoZGF0YS0+ZHJtX2ZkLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4g KwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+Zm9ybWF0LAo+ICsJICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRhdGEtPm1vZGlmaWVyLAo+ICsJICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDAuMCwgMS4wLCAwLjAsICZmYik7Cj4gKwo+ICsJaWd0X2luZm8oIkdQVSB0aHJl YWQgcGlwZSAlZCBzdGFydFxuIiwgcGlwZSk7Cj4gKwl3aGlsZSAoZGF0YS0+Z3B1X3RocmVhZF9z dGF0ZVtwaXBlXSAhPSBTVE9QUEVEKSB7Cj4gKwkJaWYgKGxhc3Rfc3RhdGUgIT0gZGF0YS0+Z3B1 X3RocmVhZF9zdGF0ZVtwaXBlXSkgewo+ICsJCQlsYXN0X3N0YXRlID0gZGF0YS0+Z3B1X3RocmVh ZF9zdGF0ZVtwaXBlXTsKPiArCQkJc2VtX3Bvc3QoJmRhdGEtPmdwdV90aHJlYWRfcGF1c2VfYWNr W3BpcGVdKTsKPiArCQl9Cj4gKwkJaWYgKGRhdGEtPmdwdV90aHJlYWRfc3RhdGVbcGlwZV0gPT0g UEFVU0VEKSB7Cj4gKwkJCXNsZWVwKDApOwo+ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwo+ICsJ CWlmICghY29udGV4dC0+ZmJfcHRyKSB7Cj4gKwkJCWZiX3B0ciA9ICZmYjsKPiArCQl9IGVsc2Ug ewo+ICsJCQlmYl9wdHIgPSBjb250ZXh0LT5mYl9wdHI7Cj4gKwkJfQo+ICsKPiArCQlpZiAobGFz dF9mYl9wdHIgIT0gZmJfcHRyKSB7Cj4gKwkJCWZyYW1lX3dpZHRoID0gZmJfcHRyLT53aWR0aDsK PiArCQkJZnJhbWVfaGVpZ2h0ID0gZmJfcHRyLT5oZWlnaHQ7Cj4gKwkJCWJ5dGVzX3Blcl9waXhl bCA9IGZiX3B0ci0+cGxhbmVfYnBwWzBdIC8gODsKPiArCQkJYm8gPSBnZW1faGFuZGxlX3RvX2xp YmRybV9ibyhkYXRhLT5idWZtZ3IsIGRhdGEtPmRybV9mZCwgIiIsCj4gKwkJCQkJCSAgICAgZmJf cHRyLT5nZW1faGFuZGxlKTsKPiArCQkJaWd0X2Fzc2VydChibyk7Cj4gKwo+ICsJCQlzY3JhdGNo X2J1Zl9pbml0KCZkc3QsIGJvLCBmcmFtZV93aWR0aCwgZnJhbWVfaGVpZ2h0LAo+ICsJCQkJCSBm Yl9wdHItPnN0cmlkZXNbMF0sIGZiX3B0ci0+bW9kaWZpZXIsCj4gKwkJCQkJIGZiX3B0ci0+cGxh bmVfYnBwWzBdKTsKPiArCQl9Cj4gKwkJbGFzdF9mYl9wdHIgPSBmYl9wdHI7Cj4gKwo+ICsJCS8q IEZpbGwgdGhlIGZyYW1lYnVmZmVyIHVzaW5nIHNoYWRlciAqLwo+ICsJCXggPSAwOwo+ICsJCXkg PSBmcmFtZV9oZWlnaHQgLyA0Owo+ICsKPiArCQlncGdwdV9maWxsKGJhdGNoLAo+ICsJCQkgICAm ZHN0LCB4LCB5LCAoZnJhbWVfd2lkdGggKiBieXRlc19wZXJfcGl4ZWwpLAo+ICsJCQkgICBmcmFt ZV9oZWlnaHQgLyAyLAo+ICsJCQkgICBjb250ZXh0LT5jb2xvcik7Cj4gKwo+ICsJCXJlY3QgPSAw Owo+ICsKPiArCQl3aGlsZSAocmVjdCA8IGNvbnRleHQtPm51bV9yZWN0YW5nbGVzKSB7Cj4gKwkJ CS8qIGRpdmlkZSBhdCBsZWFzdCBieSAyIGFuZCB1cCB0byA4ICovCj4gKwkJCWludCB4X3JhbmQs IHlfcmFuZDsKPiArCQkJcmVjdF9kaXZpc29yID0gMSA8PCAoaGFyc19wZXRydXNrYV9mNTRfMV9y YW5kb21fdW5zYWZlX21heCgzKSArIDEpOwo+ICsKPiArCQkJcmVjdF93aWR0aCA9IGZyYW1lX3dp ZHRoIC8gcmVjdF9kaXZpc29yOwo+ICsJCQlyZWN0X2hlaWdodCA9IGZyYW1lX2hlaWdodCAvIHJl Y3RfZGl2aXNvcjsKPiArCj4gKwkJCXhfcmFuZCA9IGhhcnNfcGV0cnVza2FfZjU0XzFfcmFuZG9t X3Vuc2FmZV9tYXgoZnJhbWVfd2lkdGggLSByZWN0X3dpZHRoKTsKPiArCQkJeV9yYW5kID0gaGFy c19wZXRydXNrYV9mNTRfMV9yYW5kb21fdW5zYWZlX21heChmcmFtZV9oZWlnaHQvMiAtIHJlY3Rf aGVpZ2h0KTsKPiArCj4gKwkJCWNvbnRleHQtPmJsdF9yZWN0LnggPSB4ICsgeF9yYW5kOwo+ICsJ CQljb250ZXh0LT5ibHRfcmVjdC55ID0geSArIHlfcmFuZDsKPiArCj4gKwkJCS8qIEZpbGwgcmFu ZG9tbHkgc2l6ZWQgYW5kIHBvc2l0aW9uZWQgcmVjdGFuZ2xlcyAqLwo+ICsJCQlncGdwdV9maWxs KGJhdGNoLAo+ICsJCQkJICAgJmRzdCwgY29udGV4dC0+Ymx0X3JlY3QueCwgY29udGV4dC0+Ymx0 X3JlY3QueSwKPiArCQkJCSAgICgoY29udGV4dC0+Ymx0X3JlY3QueCArIHJlY3Rfd2lkdGgpICog Ynl0ZXNfcGVyX3BpeGVsKSwKPiArCQkJCSAgIGNvbnRleHQtPmJsdF9yZWN0LnkgKyByZWN0X2hl aWdodCwKPiArCQkJCSAgIGNvbnRleHQtPmNvbG9yICsgMHg4MCk7Cj4gKwo+ICsJCQljb250ZXh0 LT5jb2xvciArPSA0Owo+ICsKPiArCQkJKytyZWN0Owo+ICsJCX0KPiArCQlmcmFtZSsrOwo+ICsJ fQo+ICsKPiArCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShibyk7Cj4gKwo+ICsJaWd0X3JlbW92 ZV9mYihkYXRhLT5kaXNwbGF5LmRybV9mZCwgJmZiKTsKPiArCj4gKwlpZ3RfaW5mbygiR1BVIHRo cmVhZCBwaXBlICVkIHN0b3AuIEZyYW1lcyByZW5kZXJlZDogJWRcbiIsIHBpcGUsIGZyYW1lKTsK PiArCj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB1aW50MzJfdCBw aXBlX3NlbGVjdChlbnVtIHBpcGUgcGlwZSkKPiArewo+ICsJaWYgKHBpcGUgPiAxKQo+ICsJCXJl dHVybiBwaXBlIDw8IERSTV9WQkxBTktfSElHSF9DUlRDX1NISUZUOwo+ICsJZWxzZSBpZiAocGlw ZSA+IDApCj4gKwkJcmV0dXJuIERSTV9WQkxBTktfU0VDT05EQVJZOwo+ICsJZWxzZQo+ICsJCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdW5zaWduZWQgZ2V0X3ZibGFuayhpbnQgZmQsIGVu dW0gcGlwZSBwaXBlLCB1bnNpZ25lZCBmbGFncykKPiArewo+ICsJdW5pb24gZHJtX3dhaXRfdmJs YW5rIHZibDsKPiArCj4gKwltZW1zZXQoJnZibCwgMCwgc2l6ZW9mKHZibCkpOwo+ICsJdmJsLnJl cXVlc3QudHlwZSA9IERSTV9WQkxBTktfUkVMQVRJVkUgfCBwaXBlX3NlbGVjdChwaXBlKSB8IGZs YWdzOwo+ICsJaWYgKGRybUlvY3RsKGZkLCBEUk1fSU9DVExfV0FJVF9WQkxBTkssICZ2YmwpKQo+ ICsJCXJldHVybiAwOwo+ICsKPiArCXJldHVybiB2YmwucmVwbHkuc2VxdWVuY2U7Cj4gK30KPiAr Cj4gKwo+ICtzdGF0aWMgaW50IHBpcGVfc3RyZXNzKHN0cnVjdCBkYXRhICpkYXRhLCBpZ3Rfb3V0 cHV0X3QgKm91dHB1dCwKPiArCQkgICAgICAgZW51bSBwaXBlIHBpcGUsIGRybU1vZGVNb2RlSW5m byAqbW9kZSkKPiArewo+ICsJaWd0X3BsYW5lX3QgKnBsYW5lOwo+ICsJaW50IGk7Cj4gKwlpbnQg cmV0Owo+ICsJYm9vbCBuZXdfbW9kZSA9IGZhbHNlOwo+ICsJdWludDY0X3QgY3Vyc29yX3dpZHRo LCBjdXJzb3JfaGVpZ2h0Owo+ICsKPiArCWRvX29yX2RpZShkcm1HZXRDYXAoZGF0YS0+ZHJtX2Zk LCBEUk1fQ0FQX0NVUlNPUl9XSURUSCwgJmN1cnNvcl93aWR0aCkpOwo+ICsJZG9fb3JfZGllKGRy bUdldENhcChkYXRhLT5kcm1fZmQsIERSTV9DQVBfQ1VSU09SX0hFSUdIVCwgJmN1cnNvcl9oZWln aHQpKTsKPiArCj4gKwlpZiAoZGF0YS0+bGFzdF9tb2RlW3BpcGVdICE9IG1vZGUpIHsKPiArCQlp Z3Rfb3V0cHV0X292ZXJyaWRlX21vZGUob3V0cHV0LCBtb2RlKTsKPiArCQlpZ3Rfb3V0cHV0X3Nl dF9waXBlKG91dHB1dCwgcGlwZSk7Cj4gKwo+ICsJCXJldCA9IGlndF9kaXNwbGF5X3RyeV9jb21t aXRfYXRvbWljKCZkYXRhLT5kaXNwbGF5LAo+ICsJCQkJCQkgICAgRFJNX01PREVfQVRPTUlDX1RF U1RfT05MWSB8Cj4gKwkJCQkJCSAgICBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgTlVM TCk7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlpZ3Rfd2FybigiQ291bGQgbm90IGNvbW1pdCBtb2Rl OiBcbiIpOwo+ICsJCQlrbXN0ZXN0X2R1bXBfbW9kZShtb2RlKTsKPiArCQkJcmV0dXJuIHJldDsK PiArCQl9Cj4gKwo+ICsJCWlndF9kaXNwbGF5X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIENPTU1J VF9BVE9NSUMpOwo+ICsJCWRhdGEtPmxhc3RfbW9kZVtwaXBlXSA9IG1vZGU7Cj4gKwkJbmV3X21v ZGUgPSB0cnVlOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBMb29rcyBsaWtlIHdlIGNhbid0IGhh dmUgcGxhbmVzIG9uIHRoYXQgcGlwZSBhdCBhbGwKPiArCSAqLwo+ICsJaWYgKCFkYXRhLT5udW1f cGxhbmVzW3BpcGVdKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCW1vZGUgPSBpZ3Rfb3V0cHV0X2dl dF9tb2RlKG91dHB1dCk7Cj4gKwo+ICsJaWYgKG5ld19tb2RlKSB7Cj4gKwkJaSA9IDA7Cj4gKwkJ Zm9yX2VhY2hfcGxhbmVfb25fcGlwZSgmZGF0YS0+ZGlzcGxheSwgcGlwZSwgcGxhbmUpIHsKPiAr CQkJaW50IHBsYW5lX3dpZHRoLCBwbGFuZV9oZWlnaHQ7Cj4gKwkJCWlmIChwbGFuZS0+dHlwZSA9 PSBEUk1fUExBTkVfVFlQRV9DVVJTT1IpIHsKPiArCQkJCWlndF9wbGFuZV9zZXRfZmIocGxhbmUs ICZkYXRhLT5jdXJzb3JfZmJbcGlwZV0pOwo+ICsKPiArCQkJCWlndF9mYl9zZXRfc2l6ZSgmZGF0 YS0+Y3Vyc29yX2ZiW3BpcGVdLAo+ICsJCQkJCQlwbGFuZSwgY3Vyc29yX3dpZHRoLCBjdXJzb3Jf aGVpZ2h0KTsKPiArCj4gKwkJCQlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIGN1cnNvcl93aWR0 aCwgY3Vyc29yX2hlaWdodCk7Cj4gKwkJCQlwbGFuZV93aWR0aCA9IGN1cnNvcl93aWR0aDsKPiAr CQkJCXBsYW5lX2hlaWdodCA9IGN1cnNvcl9oZWlnaHQ7Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlp Z3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+ZmJbcGlwZSAqIE1BWF9QTEFORVMgKyBpXSk7 Cj4gKwkJCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCAwLCAwKTsKPiArCj4gKwkJCQlp Z3RfZmJfc2V0X3NpemUoJmRhdGEtPmZiW3BpcGUgKiBNQVhfUExBTkVTICsgaV0sCj4gKwkJCQkJ CXBsYW5lLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXkpOwo+ICsKPiArCQkJCWlndF9w bGFuZV9zZXRfc2l6ZShwbGFuZSwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5KTsKPiAr CQkJCXBsYW5lX3dpZHRoID0gbW9kZS0+aGRpc3BsYXk7Cj4gKwkJCQlwbGFuZV9oZWlnaHQgPSBt b2RlLT52ZGlzcGxheTsKPiArCQkJfQo+ICsKPiArCQkJcmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2Nv bW1pdF9hdG9taWMoJmRhdGEtPmRpc3BsYXksCj4gKwkJCQkJCQkgICAgRFJNX01PREVfQVRPTUlD X1RFU1RfT05MWSB8Cj4gKwkJCQkJCQkgICAgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQs Cj4gKwkJCQkJCQkgICAgTlVMTCk7Cj4gKwo+ICsJCQl3aGlsZSAocmV0KSB7Cj4gKwkJCQlpZiAo cGxhbmVfd2lkdGggPD0gY3Vyc29yX3dpZHRoIHx8IHBsYW5lX2hlaWdodCA8PSBjdXJzb3JfaGVp Z2h0KQo+ICsJCQkJCWJyZWFrOwo+ICsJCQkJcGxhbmVfd2lkdGggLz0gMjsKPiArCQkJCXBsYW5l X2hlaWdodCAvPSAyOwo+ICsJCQkJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCBwbGFuZV93aWR0 aCwgcGxhbmVfaGVpZ2h0KTsKPiArCj4gKwkJCQlpZ3RfaW5mbygiUmVkdWNlZCBwbGFuZSAlZCBz aXplIHRvICVkeCVkXG4iLAo+ICsJCQkJICAgICAgICAgcGxhbmUtPmluZGV4LCBwbGFuZV93aWR0 aCwgcGxhbmVfaGVpZ2h0KTsKPiArCj4gKwkJCQlyZXQgPSBpZ3RfZGlzcGxheV90cnlfY29tbWl0 X2F0b21pYygmZGF0YS0+ZGlzcGxheSwKPiArCQkJCQkJCQkgICAgRFJNX01PREVfQVRPTUlDX1RF U1RfT05MWSB8Cj4gKwkJCQkJCQkJICAgIERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VULCBO VUxMKTsKPiArCQkJfQo+ICsJCQlpZiAocmV0KSB7Cj4gKwkJCQlpZ3RfaW5mbygiUGxhbmUgJWQg cGlwZSAlZCB0cnkgY29tbWl0IGZhaWxlZCwgZXhpdGluZ1xuIiwgaSwgcGlwZSk7Cj4gKwkJCQlk YXRhLT5udW1fcGxhbmVzW3BpcGVdID0gaTsKPiArCQkJCWlndF9pbmZvKCJNYXggbnVtIHBsYW5l cyBmb3IgcGlwZSAlZCBzZXQgdG8gJWRcbiIsIHBpcGUsIGkpOwo+ICsJCQkJLyoKPiArCQkJCSAq IFdlIGhhdmUgbm93IGRldGVybWluZWQgbWF4IGFtb3VudCBvZiBmdWxsIHNpemVkIHBsYW5lcywg d2Ugd2lsbCBqdXN0Cj4gKwkJCQkgKiBrZWVwIGl0IGluIG1pbmQgYW5kIGJlIHNtYXJ0ZXIgbmV4 dCB0aW1lLiBBbHNvIGxldHMgcmVtb3ZlIHVubmVlZGVkIGZicy4KPiArCQkJCSAqIERvbid0IGRl c3Ryb3kgY3Vyc29yX2ZiIGFzIHdpbGwgdGFrZSBjYXJlIGFib3V0IGl0IGF0IHRoZSBlbmQuCj4g KwkJCQkgKi8KPiArCQkJCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIE5VTEwpOwo+ICsJCQkJd2hp bGUgKGkgPCBNQVhfUExBTkVTKSB7Cj4gKwkJCQkJaWd0X3JlbW92ZV9mYihkYXRhLT5kaXNwbGF5 LmRybV9mZCwKPiArCQkJCQkJICAgICAgJmRhdGEtPmZiW3BpcGUgKiBNQVhfUExBTkVTICsgaV0p Owo+ICsJCQkJCWRhdGEtPmZiW3BpcGUgKiBNQVhfUExBTkVTICsgaV0uZmJfaWQgPSAwOwo+ICsJ CQkJCWkrKzsKPiArCQkJCX0KPiArCQkJCWkgPSBkYXRhLT5udW1fcGxhbmVzW3BpcGVdOwo+ICsJ CQl9Cj4gKwkJCWlmICgrK2kgPj0gZGF0YS0+bnVtX3BsYW5lc1twaXBlXSkKPiArCQkJCWJyZWFr Owo+ICsJCX0KPiArCQlpZ3RfZGlzcGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LCBDT01NSVRf QVRPTUlDKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArCj4gK3N0YXRpYyBk cm1Nb2RlTW9kZUluZm8gKiBmaW5kX2hpZ2hlc3RfbW9kZShkcm1Nb2RlQ29ubmVjdG9yICpjb25u ZWN0b3IpCj4gK3sKPiArCWRybU1vZGVNb2RlSW5mbyAqaGlnaGVzdF9tb2RlID0gTlVMTDsKPiAr CWludCBqOwo+ICsKPiArCWZvciAoaiA9IDA7IGogPCBjb25uZWN0b3ItPmNvdW50X21vZGVzOyBq KyspIHsKPiArCQlpZiAoIWhpZ2hlc3RfbW9kZSkgewo+ICsJCQloaWdoZXN0X21vZGUgPSAmY29u bmVjdG9yLT5tb2Rlc1tqXTsKPiArCQl9IGVsc2UgaWYgKGNvbm5lY3Rvci0+bW9kZXNbal0udmRp c3BsYXkgJiYgY29ubmVjdG9yLT5tb2Rlc1tqXS5oZGlzcGxheSkgewo+ICsJCQlpZiAoaGlnaGVz dF9tb2RlLT5oZGlzcGxheSA8IGNvbm5lY3Rvci0+bW9kZXNbal0uaGRpc3BsYXkpCj4gKwkJCQlo aWdoZXN0X21vZGUgPSAmY29ubmVjdG9yLT5tb2Rlc1tqXTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJ cmV0dXJuIGhpZ2hlc3RfbW9kZTsKPiArfQo+ICsKPiArdHlwZWRlZiBkcm1Nb2RlQ29ubmVjdG9y ICogZHJtTW9kZUNvbm5lY3RvclB0cjsKPiArCj4gK3N0YXRpYyB2b2lkIGZpbGxfY29ubmVjdG9y X3RvX3BpcGVfYXJyYXkoc3RydWN0IGRhdGEgKmRhdGEsCj4gKwkJCQkJIGRybU1vZGVSZXMgKm1v ZGVfcmVzb3VyY2VzLAo+ICsJCQkJCSBkcm1Nb2RlQ29ubmVjdG9yUHRyICpjb25uZWN0b3JzKQo+ ICt7Cj4gKwlpbnQgcGlwZSA9IDA7Cj4gKwlpbnQgaTsKPiArCj4gKwltZW1zZXQoY29ubmVjdG9y cywgMCwgc2l6ZW9mKGRybU1vZGVDb25uZWN0b3JQdHIpICoKPiArCSAgICAgICBtb2RlX3Jlc291 cmNlcy0+Y291bnRfY29ubmVjdG9ycyk7Cj4gKwo+ICsJaWd0X2luZm8oIkdvdCAlZCBjb25uZWN0 b3JzXG4iLCBtb2RlX3Jlc291cmNlcy0+Y291bnRfY29ubmVjdG9ycyk7Cj4gKwo+ICsJZm9yIChp ID0gMDsgaSA8IG1vZGVfcmVzb3VyY2VzLT5jb3VudF9jb25uZWN0b3JzOyBpKyspIHsKPiArCQlk cm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3I7Cj4gKwo+ICsJCWNvbm5lY3RvciA9IGRybU1vZGVH ZXRDb25uZWN0b3IoZGF0YS0+ZHJtX2ZkLAo+ICsJCSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbW9kZV9yZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV0pOwo+ICsKPiArCQlpZiAoIWNvbm5l Y3Rvcikgewo+ICsJCQlpZ3Rfd2FybigiY291bGQgbm90IGdldCBjb25uZWN0b3IgJWk6ICVzXG4i LAo+ICsJCQkgICAgICAgICBtb2RlX3Jlc291cmNlcy0+Y29ubmVjdG9yc1tpXSwgc3RyZXJyb3Io ZXJybm8pKTsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQlpZiAoY29ubmVjdG9yLT5j b25uZWN0aW9uID09IERSTV9NT0RFX0NPTk5FQ1RFRCkgewo+ICsJCQlpZ3RfaW5mbygiQ29ubmVj dG9yICVkIGNvbm5lY3RlZCB0byBwaXBlICVkXG4iLCBpLCBwaXBlKTsKPiArCQkJY29ubmVjdG9y c1twaXBlXSA9IChkcm1Nb2RlQ29ubmVjdG9yUHRyKWNvbm5lY3RvcjsKPiArCQkJKytwaXBlOwo+ ICsJCQlpZiAocGlwZSA9PSBJR1RfTUFYX1BJUEVTKQo+ICsJCQkJYnJlYWs7Cj4gKwkJfSBlbHNl IHsKPiArCQkJaWd0X2luZm8oIkNvbm5lY3RvciAlZCBjb25uZWN0aW9uIHN0YXR1cyAlZFxuIiwK PiArCQkJICAgICAgICAgaSwgY29ubmVjdG9yLT5jb25uZWN0aW9uKTsKPiArCQkJZHJtTW9kZUZy ZWVDb25uZWN0b3IoY29ubmVjdG9yKTsKPiArCQl9Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIHJlbGVhc2VfY29ubmVjdG9ycyhkcm1Nb2RlQ29ubmVjdG9yUHRyICpjb25uZWN0b3JzKQo+ ICt7Cj4gKwlpbnQgaTsKPiArCWZvciAoaSA9IDA7IGkgPCBJR1RfTUFYX1BJUEVTOyBpKyspIHsK PiArCQlpZiAoY29ubmVjdG9yc1tpXSkKPiArCQkJZHJtTW9kZUZyZWVDb25uZWN0b3IoY29ubmVj dG9yc1tpXSk7Cj4gKwl9Cj4gKwlmcmVlKGNvbm5lY3RvcnMpOwo+ICt9Cj4gKwo+ICsjZGVmaW5l IE1JTl9EVVJBVElPTl9TRUMgMTAKPiArI2RlZmluZSBNSU5fSVRFUkFUSU9OUyAyMAo+ICsKPiAr c3RhdGljIHZvaWQgc3RyZXNzX3BpcGVzKHN0cnVjdCBkYXRhICpkYXRhLCBzdHJ1Y3QgdGltZXNw ZWMgKnN0YXJ0LAo+ICsJCQkgc3RydWN0IHRpbWVzcGVjICplbmQpCj4gK3sKPiArCWludCBwaXBl Owo+ICsJaW50IHJldDsKPiArCWlndF9vdXRwdXRfdCAqb3V0cHV0Owo+ICsJaW50IHRpbWVfZWxh cHNlZDsKPiArCWlndF9jcmNfdCBjcmMsIGNyYzI7Cj4gKwo+ICsJLyoKPiArCSAqIEluY3JlbWVu dCBwaXBlIG9ubHkgZm9yIGNvbm5lY3RlZCBvdXRwdXRzLAo+ICsJICogZm9yIGVhY2ggY29ubmVj dGVkIG91dHB1dCB3ZSBzaG91bGQgYXNzaWduIGEKPiArCSAqIGRpZmZlcmVudCBwaXBlLgo+ICsJ ICovCj4gKwlmb3IgKHBpcGUgPSAwOyBwaXBlIDwgSUdUX01BWF9QSVBFUzsgcGlwZSsrKSB7Cj4g Kwo+ICsJCWlmICghZGF0YS0+aGlnaGVzdF9tb2RlW3BpcGVdKQo+ICsJCQljb250aW51ZTsKPiAr Cj4gKwkJaWd0X2Fzc2VydF9mKGRhdGEtPmRpc3BsYXkucGlwZXNbcGlwZV0ubl9wbGFuZXMgPCBN QVhfUExBTkVTLAo+ICsJCQkgICAgIkN1cnJlbnRseSB3ZSBkb24ndCBzdXBwb3J0IG1vcmUgdGhh biAlZCBwbGFuZXMhIiwKPiArCQkJICAgICBNQVhfUExBTkVTKTsKPiArCj4gKwkJcGlwZV9jcmMg PSBpZ3RfcGlwZV9jcmNfbmV3KGRhdGEtPmRybV9mZCwgcGlwZSwKPiArCQkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSU5URUxfUElQRV9DUkNfU09VUkNFX0FVVE8pOwoKSSdtIHRoaW5raW5n IHRoaXMgbGluZSBzdHJlc3NlcyBvdGhlciB0aGluZ3MgdGhhbiBpbnRlbmRlZD8gTWF5YmUgbW92 ZSAKYWxsb2NhdGluZyB0aGVzZSBwaXBlIGNyY3Mgb3V0c2lkZSBvZiB5b3VyIHdoaWxlIGxvb3A/ Cgo+ICsKPiArCQlvdXRwdXQgPSBpZ3Rfb3V0cHV0X2Zyb21fY29ubmVjdG9yKCZkYXRhLT5kaXNw bGF5LAo+ICsJCQkJCQkgICBkYXRhLT5jb25uZWN0b3JzW3BpcGVdKTsKPiArCj4gKwkJaWYgKG91 dHB1dCkKPiArCQkJcmV0ID0gcGlwZV9zdHJlc3MoZGF0YSwgb3V0cHV0LCBwaXBlLAo+ICsJCQkJ CSBkYXRhLT5oaWdoZXN0X21vZGVbcGlwZV0pOwo+ICsKPiArCQl0aW1lX2VsYXBzZWQgPSAoaW50 KWlndF90aW1lX2VsYXBzZWQoc3RhcnQsIGVuZCk7Cj4gKwo+ICsJCWlmICghKHRpbWVfZWxhcHNl ZCAlIChNSU5fRFVSQVRJT05fU0VDLzQpKSkgewo+ICsKPiArCQkJZ2V0X3ZibGFuayhkYXRhLT5k aXNwbGF5LmRybV9mZCwgcGlwZSwKPiArCQkJCSAgIERSTV9WQkxBTktfTkVYVE9OTUlTUyk7Cj4g Kwo+ICsJCQlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMocGlwZV9jcmMsICZjcmMpOwoKSSdkIHN3 aXRjaCBjcmNfY29sbGVjdCB0byBpZ3RfcGlwZV9jcmNfc3RhcnQoKSAuLiB3aGlsZSgpIHsgLi4g CmlndF9waXBlX2NyY19nZXRfY3VycmVudCgpIC4uIH0gLi4gaWd0X3BpcGVfY3JjX3N0b3AoKQoK aWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKCkgaXMgcmVhbGx5IHNsb3cgd2hlbiBpdCBzdGFydCBj cmMsIGdldCBvbmUgY3JjIAphbmQgc3RvcCBjcmMgYW5kIGV2ZW4gd29yc2Ugb24gcHNyIHBhbmVs cyBjYXVzZSB0d28gbW9kZXNldHMuCgo+ICsKPiArCQkJZ2V0X3ZibGFuayhkYXRhLT5kaXNwbGF5 LmRybV9mZCwgcGlwZSwKPiArCQkJCSAgIERSTV9WQkxBTktfTkVYVE9OTUlTUyk7Cj4gKwo+ICsJ CQlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMocGlwZV9jcmMsICZjcmMyKTsKPiArCj4gKwkJCWln dF9hc3NlcnRfY3JjX2VxdWFsKCZjcmMsICZjcmMyKTsKPiArCQl9Cj4gKwo+ICsJCWlndF9waXBl X2NyY19mcmVlKHBpcGVfY3JjKTsKPiArCj4gKwkJaWYgKHJldCkKPiArCQkJYnJlYWs7Cj4gKwl9 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHN0cmVzcyhzdHJ1Y3QgZGF0YSAqZGF0YSkKPiArewo+ ICsJc3RydWN0IHRpbWVzcGVjIHN0YXJ0LCBlbmQ7Cj4gKwlpbnQgaXRlcmF0aW9ucyA9IDA7Cj4g Kwlib29sIG5lZWRfY29udGludWU7Cj4gKwo+ICsJaWd0X2dldHRpbWUoJnN0YXJ0KTsKPiArCj4g KwlkbyB7Cj4gKwkJaWd0X2dldHRpbWUoJmVuZCk7Cj4gKwkJc3RyZXNzX3BpcGVzKGRhdGEsICZz dGFydCwgJmVuZCk7Cj4gKwkJaXRlcmF0aW9ucysrOwo+ICsJCW5lZWRfY29udGludWUgPQo+ICsJ CQkoaW50KWlndF90aW1lX2VsYXBzZWQoJnN0YXJ0LCAmZW5kKSA8IE1JTl9EVVJBVElPTl9TRUM7 Cj4gKwl9IHdoaWxlICgobmVlZF9jb250aW51ZSB8fCBpdGVyYXRpb25zIDwgTUlOX0lURVJBVElP TlMpKTsKPiArCj4gKwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzdGFydF9ncHVfdGhyZWFkcyhz dHJ1Y3QgZGF0YSAqZGF0YSkKPiArewo+ICsJaW50IGk7Cj4gKwo+ICsJaWYgKCFkYXRhLT5kZXZp ZCkgewo+ICsJCWRhdGEtPmRldmlkID0gaW50ZWxfZ2V0X2RybV9kZXZpZChkYXRhLT5kcm1fZmQp Owo+ICsJCWlndF9yZXF1aXJlX2dlbShkYXRhLT5kcm1fZmQpOwo+ICsKPiArCQlkYXRhLT5idWZt Z3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KGRhdGEtPmRybV9mZCwgNDA5Nik7Cj4gKwkJ aWd0X2Fzc2VydChkYXRhLT5idWZtZ3IpOwo+ICsJfQo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBJ R1RfTUFYX1BJUEVTOyBpKyspIHsKPiArCQlpZiAoIWRhdGEtPmhpZ2hlc3RfbW9kZVtpXSkKPiAr CQkJY29udGludWU7Cj4gKwkJZGF0YS0+Z3B1X2NvbnRleHRbaV0uZGF0YSA9IGRhdGE7Cj4gKwkJ ZGF0YS0+Z3B1X2NvbnRleHRbaV0ucGlwZSA9IGk7Cj4gKwkJZGF0YS0+Z3B1X2NvbnRleHRbaV0u ZmJfcHRyID0gTlVMTDsKPiArCQlkYXRhLT5ncHVfY29udGV4dFtpXS5ibHRfcmVjdC54ID0gMDsK PiArCQlkYXRhLT5ncHVfY29udGV4dFtpXS5ibHRfcmVjdC55ID0gMDsKPiArCQlkYXRhLT5ncHVf Y29udGV4dFtpXS5ibHRfcmVjdC53ID0gMDsKPiArCQlkYXRhLT5ncHVfY29udGV4dFtpXS5ibHRf cmVjdC5oID0gMDsKPiArCQlkYXRhLT5ncHVfY29udGV4dFtpXS5udW1fcmVjdGFuZ2xlcyA9IE5f QkxJVFM7Cj4gKwkJZGF0YS0+Z3B1X3RocmVhZF9zdGF0ZVtpXSA9IFJVTk5JTkc7Cj4gKwkJaWd0 X2luZm8oIlN0YXJ0aW5nIEdQVSB0aHJlYWQgJWRcbiIsIGkpOwo+ICsKPiArCQlkYXRhLT5ncHVf Y29udGV4dFtpXS5iYXRjaCA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9jKGRhdGEtPmJ1Zm1nciwK PiArCQkJCQkJCQkgICAgIGRhdGEtPmRldmlkKTsKPiArCj4gKwkJcHRocmVhZF9jcmVhdGUoJmRh dGEtPmdwdV90aHJlYWRbaV0sIE5VTEwsIGdwdV9sb2FkLAo+ICsJCQkgICAgICAgKHZvaWQqKSZk YXRhLT5ncHVfY29udGV4dFtpXSk7Cj4gKwo+ICsJCXNlbV93YWl0KCZkYXRhLT5ncHVfdGhyZWFk X3BhdXNlX2Fja1tpXSk7Cj4gKwkJaWd0X2luZm8oIkdQVSB0aHJlYWQgJWQgc3RhcnRlZFxuIiwg aSk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHN0b3BfZ3B1X3RocmVhZHMoc3RydWN0 IGRhdGEgKmRhdGEpCj4gK3sKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBJR1Rf TUFYX1BJUEVTOyBpKyspIHsKPiArCQlpZiAoIWRhdGEtPmhpZ2hlc3RfbW9kZVtpXSkKPiArCQkJ Y29udGludWU7Cj4gKwkJaWd0X2luZm8oIlN0b3BpbmcgR1BVIHRocmVhZCAlZFxuIiwgaSk7Cj4g KwkJZGF0YS0+Z3B1X3RocmVhZF9zdGF0ZVtpXSA9IFNUT1BQRUQ7Cj4gKwkJcHRocmVhZF9qb2lu KGRhdGEtPmdwdV90aHJlYWRbaV0sIE5VTEwpOwo+ICsJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmZi X3B0ciA9IE5VTEw7Cj4gKwkJaW50ZWxfYmF0Y2hidWZmZXJfZnJlZShkYXRhLT5ncHVfY29udGV4 dFtpXS5iYXRjaCk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHN0YXJ0X2NwdV90aHJl YWRzKHN0cnVjdCBkYXRhICpkYXRhKQo+ICt7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAw OyBpIDwgZGF0YS0+bnVtYmVyX29mX2NvcmVzOyBpKyspIHsKPiArCQlkYXRhLT5jcHVfY29udGV4 dFtpXS5idWYxID0gbWFsbG9jKEJVRl9TSVpFKTsKPiArCQlkYXRhLT5jcHVfY29udGV4dFtpXS5i dWYyID0gbWFsbG9jKEJVRl9TSVpFKTsKPiArCQlkYXRhLT5jcHVfY29udGV4dFtpXS5pZCA9IGk7 Cj4gKwkJZGF0YS0+Y3B1X2NvbnRleHRbaV0uZGF0YSA9IGRhdGE7Cj4gKwkJcHRocmVhZF9jcmVh dGUoJmRhdGEtPmNwdV90aHJlYWRbaV0sIE5VTEwsIGNwdV9sb2FkLAo+ICsJCQkgICAgICAgKHZv aWQqKSZkYXRhLT5jcHVfY29udGV4dFtpXSk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHN0b3BfY3B1X3RocmVhZHMoc3RydWN0IGRhdGEgKmRhdGEpCj4gK3sKPiArCWludCBpOwo+ICsK PiArCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5udW1iZXJfb2ZfY29yZXM7IGkrKykgewo+ICsJCWRh dGEtPmNwdV90aHJlYWRfc3RvcFtpXSA9IHRydWU7Cj4gKwkJcHRocmVhZF9qb2luKGRhdGEtPmNw dV90aHJlYWRbaV0sIE5VTEwpOwo+ICsJCWZyZWUoZGF0YS0+Y3B1X2NvbnRleHRbaV0uYnVmMSk7 Cj4gKwkJZnJlZShkYXRhLT5jcHVfY29udGV4dFtpXS5idWYyKTsKPiArCX0KPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgY3JlYXRlX2ZyYW1lYnVmZmVycyhzdHJ1Y3QgZGF0YSAqZGF0YSkKPiArewo+ ICsJaW50IGksIGo7Cj4gKwl1aW50NjRfdCBjdXJzb3Jfd2lkdGgsIGN1cnNvcl9oZWlnaHQ7Cj4g Kwo+ICsJZG9fb3JfZGllKGRybUdldENhcChkYXRhLT5kcm1fZmQsIERSTV9DQVBfQ1VSU09SX1dJ RFRILCAmY3Vyc29yX3dpZHRoKSk7Cj4gKwlkb19vcl9kaWUoZHJtR2V0Q2FwKGRhdGEtPmRybV9m ZCwgRFJNX0NBUF9DVVJTT1JfSEVJR0hULCAmY3Vyc29yX2hlaWdodCkpOwo+ICsKPiArCWZvciAo aSA9IDA7IGkgPCBJR1RfTUFYX1BJUEVTOyBpKyspIHsKPiArCQlpZiAoIWRhdGEtPmhpZ2hlc3Rf bW9kZVtpXSkKPiArCQkJY29udGludWU7Cj4gKwkJaWYgKCFkYXRhLT5jdXJzb3JfZmJbaV0uZmJf aWQpIHsKPiArCQkJaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5kcm1fZmQsCj4gKwkJCQkJICAg IGN1cnNvcl93aWR0aCwgY3Vyc29yX2hlaWdodCwKPiArCQkJCQkgICAgZGF0YS0+Zm9ybWF0LAo+ ICsJCQkJCSAgICBkYXRhLT5tb2RpZmllciwKPiArCQkJCQkgICAgMS4wLDAuMCwwLjAsCj4gKwkJ CQkJICAgICZkYXRhLT5jdXJzb3JfZmJbaV0pOwo+ICsJCX0KPiArCQlmb3IgKGogPSAwOyBqIDwg ZGF0YS0+bnVtX3BsYW5lc1tpXTsgaisrKSB7Cj4gKwkJCWlmICghZGF0YS0+ZmJbaSAqIE1BWF9Q TEFORVMgKyBqXS5mYl9pZCkgewo+ICsJCQkJaWd0X2NyZWF0ZV9jb2xvcl9wYXR0ZXJuX2ZiKGRh dGEtPmRybV9mZCwKPiArCQkJCQkJCSAgICBkYXRhLT5oaWdoZXN0X21vZGVbaV0tPmhkaXNwbGF5 LAo+ICsJCQkJCQkJICAgIGRhdGEtPmhpZ2hlc3RfbW9kZVtpXS0+dmRpc3BsYXksCj4gKwkJCQkJ CQkgICAgZGF0YS0+Zm9ybWF0LAo+ICsJCQkJCQkJICAgIGRhdGEtPm1vZGlmaWVyLAo+ICsJCQkJ CQkJICAgIDAuMCwgMS4wLCAwLjAsICZkYXRhLT5mYltpICogTUFYX1BMQU5FUyArIGpdKTsKPiAr CQkJfQo+ICsJCX0KPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZGVzdHJveV9mcmFtZWJ1 ZmZlcnMoc3RydWN0IGRhdGEgKmRhdGEpCj4gK3sKPiArCWludCBpLCBqOwo+ICsKPiArCWZvciAo aSA9IDA7IGkgPCBJR1RfTUFYX1BJUEVTOyBpKyspIHsKPiArCQlpZiAoIWRhdGEtPmhpZ2hlc3Rf bW9kZVtpXSkKPiArCQkJY29udGludWU7Cj4gKwkJZm9yIChqID0gMDsgaiA8IE1BWF9QTEFORVM7 IGorKykgewo+ICsJCQlpZiAoZGF0YS0+ZmJbaSAqIE1BWF9QTEFORVMgKyBqXS5mYl9pZCkgewo+ ICsJCQkJaWd0X3BsYW5lX3NldF9mYigmZGF0YS0+ZGlzcGxheS5waXBlc1tpXS5wbGFuZXNbal0s IE5VTEwpOwo+ICsJCQkJaWd0X3JlbW92ZV9mYihkYXRhLT5kaXNwbGF5LmRybV9mZCwgJmRhdGEt PmZiW2kgKiBNQVhfUExBTkVTICsgal0pOwo+ICsJCQkJZGF0YS0+ZmJbaSAqIE1BWF9QTEFORVMg KyBqXS5mYl9pZCA9IDA7Cj4gKwkJCX0KPiArCQl9Cj4gKwkJaWYgKGRhdGEtPmN1cnNvcl9mYltp XS5mYl9pZCkgewo+ICsJCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRpc3BsYXkuZHJtX2ZkLCAmZGF0 YS0+Y3Vyc29yX2ZiW2ldKTsKPiArCQkJZGF0YS0+Y3Vyc29yX2ZiW2ldLmZiX2lkID0gMDsKPiAr CQl9Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHByZXBhcmVfdGVzdChzdHJ1Y3QgZGF0 YSAqZGF0YSkKPiArewo+ICsJaW50IGksajsKPiArCWludCBudW1fY29ubmVjdG9yczsKPiArCj4g KwlkYXRhLT5udW1iZXJfb2ZfY29yZXMgPSBtaW4oc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05M TiksIE1BWF9DT1JFUyk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IElHVF9NQVhfUElQRVM7IGkr Kykgewo+ICsJCWZvciAoaiA9IDA7IGogPCBNQVhfUExBTkVTOyBqKyspCj4gKwkJCWRhdGEtPmZi W2kgKiBNQVhfUExBTkVTICsgal0uZmJfaWQgPSAwOwo+ICsJCWRhdGEtPmN1cnNvcl9mYltpXS5m Yl9pZCA9IDA7Cj4gKwkJZGF0YS0+bnVtX3BsYW5lc1tpXSA9IC0xOwo+ICsJCWRhdGEtPmxhc3Rf bW9kZVtpXSA9IE5VTEw7Cj4gKwkJc2VtX2luaXQoJmRhdGEtPmdwdV90aHJlYWRfcGF1c2VfYWNr W2ldLCAwLCAwKTsKPiArCX0KPiArCj4gKwlzdGFydF9jcHVfdGhyZWFkcyhkYXRhKTsKPiArCj4g KwlkYXRhLT5tb2RlX3Jlc291cmNlcyA9IGRybU1vZGVHZXRSZXNvdXJjZXMoZGF0YS0+ZHJtX2Zk KTsKPiArCWlmICghZGF0YS0+bW9kZV9yZXNvdXJjZXMpIHsKPiArCQlpZ3Rfd2FybigiZHJtTW9k ZUdldFJlc291cmNlcyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwo+ICsJCXJldHVy bjsKPiArCX0KPiArCj4gKwludW1fY29ubmVjdG9ycyA9IGRhdGEtPm1vZGVfcmVzb3VyY2VzLT5j b3VudF9jb25uZWN0b3JzOwo+ICsKPiArCW1lbXNldChkYXRhLT5oaWdoZXN0X21vZGUsIDAsIHNp emVvZihkcm1Nb2RlTW9kZUluZm8gKikgKiBJR1RfTUFYX1BJUEVTKTsKPiArCj4gKwlkYXRhLT5j b25uZWN0b3JzID0KPiArCQkoZHJtTW9kZUNvbm5lY3RvclB0ciAqKW1hbGxvYyhzaXplb2YoZHJt TW9kZUNvbm5lY3RvclB0cikgKiBudW1fY29ubmVjdG9ycyk7Cj4gKwo+ICsJZmlsbF9jb25uZWN0 b3JfdG9fcGlwZV9hcnJheShkYXRhLCBkYXRhLT5tb2RlX3Jlc291cmNlcywgZGF0YS0+Y29ubmVj dG9ycyk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IElHVF9NQVhfUElQRVM7IGkrKykgewo+ICsJ CWRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3RvciA9IChkcm1Nb2RlQ29ubmVjdG9yICopZGF0YS0+ Y29ubmVjdG9yc1tpXTsKPiArCQlpZiAoIWNvbm5lY3RvcikKPiArCQkJY29udGludWU7Cj4gKwkJ aWYgKCFkYXRhLT5oaWdoZXN0X21vZGVbaV0pIHsKPiArCQkJaWYgKGNvbm5lY3Rvci0+Y291bnRf bW9kZXMpCj4gKwkJCQlkYXRhLT5oaWdoZXN0X21vZGVbaV0gPSBmaW5kX2hpZ2hlc3RfbW9kZShj b25uZWN0b3IpOwo+ICsJCX0KPiArCQlpZ3RfYXNzZXJ0KGRhdGEtPmhpZ2hlc3RfbW9kZVtpXSk7 Cj4gKwo+ICsJCWlmIChkYXRhLT5oaWdoZXN0X21vZGVbaV0pIHsKPiArCQkJaWd0X2luZm8oIlVz aW5nIG1vZGU6IFxuIik7Cj4gKwkJCWttc3Rlc3RfZHVtcF9tb2RlKGRhdGEtPmhpZ2hlc3RfbW9k ZVtpXSk7Cj4gKwkJfQo+ICsKPiArCQlpZiAoZGF0YS0+bnVtX3BsYW5lc1tpXSA9PSAtMSkKPiAr CQkJZGF0YS0+bnVtX3BsYW5lc1tpXSA9IGRhdGEtPmRpc3BsYXkucGlwZXNbaV0ubl9wbGFuZXM7 Cj4gKwo+ICsJCWlndF9pbmZvKCJNYXggbnVtYmVyIG9mIHBsYW5lcyBpcyAlZCBmb3IgcGlwZSAl ZFxuIiwKPiArCQkJIGRhdGEtPm51bV9wbGFuZXNbaV0sIGkpOwo+ICsJfQo+ICsKPiArCWNyZWF0 ZV9mcmFtZWJ1ZmZlcnMoZGF0YSk7Cj4gKwo+ICsJc3RhcnRfZ3B1X3RocmVhZHMoZGF0YSk7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIGZpbmlzaF90ZXN0KHN0cnVjdCBkYXRhICpkYXRhKQo+ICt7 Cj4gKwlpbnQgaTsKPiArCj4gKwlzdG9wX2dwdV90aHJlYWRzKGRhdGEpOwo+ICsKPiArCS8qCj4g KwkgKiBBcyB3ZSBjaGFuZ2UgdGlsaW5nL2Zvcm1hdCB3ZSBuZWVkIGEgbmV3IEZCCj4gKwkgKi8K PiArCWRlc3Ryb3lfZnJhbWVidWZmZXJzKGRhdGEpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBJ R1RfTUFYX1BJUEVTOyBpKyspIHsKPiArCQlkYXRhLT5udW1fcGxhbmVzW2ldID0gLTE7Cj4gKwkJ ZGF0YS0+bGFzdF9tb2RlW2ldID0gTlVMTDsKPiArCX0KPiArCj4gKwlzdG9wX2NwdV90aHJlYWRz KGRhdGEpOwo+ICsKPiArCXJlbGVhc2VfY29ubmVjdG9ycyhkYXRhLT5jb25uZWN0b3JzKTsKPiAr Cj4gKwlkcm1Nb2RlRnJlZVJlc291cmNlcyhkYXRhLT5tb2RlX3Jlc291cmNlcyk7Cj4gK30KPiAr Cj4gK3N0cnVjdCBkYXRhIGRhdGEgPSB7Cj4gKwkuZm9ybWF0ID0gRFJNX0ZPUk1BVF9YUkdCODg4 OCwKPiArCS5tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX0xJTkVBUiwKPiArCS5kZXZpZCA9IDAs Cj4gK307Cj4gKwo+ICtpZ3RfbWFpbiB7Cj4gKwl1aW50OF90IGZvcm1hdF9pZHggPSAwLCB0aWxp bmdfaWR4ID0gMDsKPiArCj4gKwlpZ3RfZml4dHVyZSB7Cj4gKwkJZGF0YS5kcm1fZmQgPSBkYXRh LmRpc3BsYXkuZHJtX2ZkID0gZHJtX29wZW5fZHJpdmVyX21hc3RlcihEUklWRVJfQU5ZKTsKPiAr Cj4gKwkJa21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOwo+ICsKPiArCQlpZ3RfZGlzcGxh eV9yZXF1aXJlKCZkYXRhLmRpc3BsYXksIGRhdGEuZGlzcGxheS5kcm1fZmQpOwo+ICsJCWlndF9y ZXF1aXJlKGRhdGEuZGlzcGxheS5pc19hdG9taWMpOwo+ICsJCWlndF9kaXNwbGF5X3JlcXVpcmVf b3V0cHV0KCZkYXRhLmRpc3BsYXkpOwo+ICsJfQo+ICsKPiArCWZvciAoZm9ybWF0X2lkeCA9IDA7 IGZvcm1hdF9pZHggPCBOX0ZPUk1BVFM7IGZvcm1hdF9pZHgrKykKPiArCQlmb3IgKHRpbGluZ19p ZHggPSAwOyB0aWxpbmdfaWR4IDwgTl9USUxJTkdfTUVUSE9EUzsgdGlsaW5nX2lkeCsrKQo+ICsJ CXsKPiArCQkJZGF0YS5mb3JtYXQgPSBmb3JtYXRzW2Zvcm1hdF9pZHhdOwo+ICsJCQlkYXRhLm1v ZGlmaWVyID0gdGlsaW5nc1t0aWxpbmdfaWR4XTsKPiArCj4gKwkJCWlndF9maXh0dXJlIHsKPiAr CQkJCXByZXBhcmVfdGVzdCgmZGF0YSk7Cj4gKwkJCX0KPiArCj4gKwkJCWlndF9kZXNjcmliZSgi U3RhcnQgcGlwZSBzdHJlc3MgdGVzdCwgdXRpbGl6aW5nIGNwdSBhbmQgZ3B1ICIKPiArCQkJICAg ICAgICAgICAgICJzaW11bHRhbmVvdXNseSB3aXRoIG1heGltdW0gYW1vdW50IG9mIHBsYW5lcyAi Cj4gKwkJCSAgICAgICAgICAgICAiYW5kIHJlc29sdXRpb24gIik7Cj4gKwkJCWlndF9zdWJ0ZXN0 X2YoInN0cmVzcy0lcy0lcyIsCj4gKwkJCSAgICAgICAgICAgICAgZm9ybWF0X3N0cihmb3JtYXRf aWR4KSwKPiArCQkJICAgICAgICAgICAgICB0aWxpbmdfc3RyKHRpbGluZ19pZHgpKSB7Cj4gKwo+ ICsJCQkJc3RyZXNzKCZkYXRhKTsKPiArCj4gKwkJCX0KPiArCj4gKwkJCWlndF9maXh0dXJlIHsK PiArCQkJCWZpbmlzaF90ZXN0KCZkYXRhKTsKPiArCQkJfQo+ICsJCX0KPiArCj4gKwlpZ3RfZml4 dHVyZSB7Cj4gKwkJaWd0X2Rpc3BsYXlfZmluaSgmZGF0YS5kaXNwbGF5KTsKPiArCX0KPiArfQo+ IGRpZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkCj4gaW5k ZXggMGIxNTYwOWMuLjc5NDZkNDRhIDEwMDY0NAo+IC0tLSBhL3Rlc3RzL21lc29uLmJ1aWxkCj4g KysrIGIvdGVzdHMvbWVzb24uYnVpbGQKPiBAQCAtNTIsNiArNTIsNyBAQCB0ZXN0X3Byb2dzID0g Wwo+ICAgCSdrbXNfcGxhbmVfbXVsdGlwbGUnLAo+ICAgCSdrbXNfcGxhbmVfc2NhbGluZycsCj4g ICAJJ2ttc19wcmltZScsCj4gKwkna21zX3BsYW5lX3N0cmVzcycsCj4gICAJJ2ttc19wcm9wX2Js b2InLAo+ICAgCSdrbXNfcHJvcGVydGllcycsCj4gICAJJ2ttc19wc3InLAo+IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KSW50ZWwgRmlubGFuZCBPeQpSZWdpc3RlcmVkIEFkZHJlc3M6IFBMIDI4MSwgMDAxODEgSGVs c2lua2kgCkJ1c2luZXNzIElkZW50aXR5IENvZGU6IDAzNTc2MDYgLSA0IApEb21pY2lsZWQgaW4g SGVsc2lua2kgCgpUaGlzIGUtbWFpbCBhbmQgYW55IGF0dGFjaG1lbnRzIG1heSBjb250YWluIGNv bmZpZGVudGlhbCBtYXRlcmlhbCBmb3IKdGhlIHNvbGUgdXNlIG9mIHRoZSBpbnRlbmRlZCByZWNp cGllbnQocykuIEFueSByZXZpZXcgb3IgZGlzdHJpYnV0aW9uCmJ5IG90aGVycyBpcyBzdHJpY3Rs eSBwcm9oaWJpdGVkLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQKcmVjaXBpZW50LCBwbGVh c2UgY29udGFjdCB0aGUgc2VuZGVyIGFuZCBkZWxldGUgYWxsIGNvcGllcy4KX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QK aWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2