From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH i-g-t] tests/gem_softpin: New tests for softpin feature Date: Mon, 30 Nov 2015 14:16:22 +0000 Message-ID: <565C5A36.9070500@linux.intel.com> References: <1448801030-17721-1-git-send-email-vinay.belgaumkar@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 2E0DE6E5D2 for ; Mon, 30 Nov 2015 06:16:25 -0800 (PST) In-Reply-To: <1448801030-17721-1-git-send-email-vinay.belgaumkar@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Vinay Belgaumkar , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org CkhpLAoKT24gMjkvMTEvMTUgMTI6NDMsIFZpbmF5IEJlbGdhdW1rYXIgd3JvdGU6Cj4gVGhlc2Ug dGVzdHMgZXhlcmNpc2UgdGhlIHVzZXJwdHIgaW9jdGwgdG8gY3JlYXRlIHNoYXJlZCBidWZmZXJz Cj4gYmV0d2VlbiBDUFUgYW5kIEdQVS4gVGhleSBjb250YWluIGVycm9yIGFuZCBub3JtYWwgdXNh Z2Ugc2NlbmFyaW9zLgo+IFRoZXkgYWxzbyBjb250YWluIGEgY291cGxlIG9mIHN0cmVzcyB0ZXN0 cyB3aGljaCBjb3B5IGJ1ZmZlcnMgYmV0d2Vlbgo+IENQVSBhbmQgR1BVLiBUaGVzZSB0ZXN0cyBy ZWx5IG9uIHRoZSBzb2Z0cGluIHBhdGNoIGluIG9yZGVyIHRvIHBpbiBidWZmZXJzCj4gdG8gYSBj ZXJ0YWluIFZBLgo+Cj4gQ2F2ZWF0OiBUaGVzZSB0ZXN0cyB3ZXJlIGRlc2lnbmVkIHRvIHJ1biBv biA2NC1iaXQgc3lzdGVtLiBGdXR1cmUgd29yawo+IGluY2x1ZGVzIGFkZGluZyBsb2dpYyB0byBl bnN1cmUgdGhlc2UgdGVzdHMgY2FuIHJ1biBvbiAzMi1iaXQgc3lzdGVtcyB3aXRoCj4gUFBHVFQg c3VwcG9ydC4gU29tZSB0ZXN0cyBhcmUgY3VycmVudGx5IGRpc2FibGVkIGZvciAzMi1iaXQgc3lz dGVtcyBmb3IgdGhhdAo+IHJlYXNvbi4KPgo+IHYyOiBBZGRlZCBjYyBhbmQgc2lnbmVkLW9mZi1i eSBmaWVsZHMKPgo+IHYzOiBGaXhlZCByZXZpZXcgY29tbWVudHMsIGFkZGVkIGhlbHBlciBmdW5j dGlvbnMuIFJlbW92ZWQgdXNlcnB0ciBlcnJvcgo+IHNjZW5hcmlvcyBjb3ZlcmVkIGJ5IGV4aXN0 aW5nIHVzZXJwdHIgdGVzdHMuIE1vZGlmaWVkIHN0cmVzcyB0ZXN0IHRvIGhhdmUKPiAxMDBLIGJ1 ZmZlcnMsIGl0IG5vdyBydW5zIGZvciB+MzAgbWlucywgY2hlY2tzIGV2ZXJ5IGVsZW1lbnQgaGFz IGJlZW4gd3JpdHRlbgo+IHRvIGNvcnJlY3RseSwgYW5kIHBpbnMgYnVmZmVycyBhdCBkaWZmZXJl bnQgVk1Bcy4KPgo+IHY0OiBDaGFuZ2VkIG5hbWUgdG8gZ2VtX3NvZnRwaW4KPgo+IHY1OiBNb3Jl IGZpeGVzLiBSZW1vdmVkIHRoZSBmaWxlIGJhc2VkIHRlc3RzLCB3aWxsIG1vdmUgdGhlbSB0byB1 c2VycHRyIHRlc3RzLgo+IEFkZGVkIGEgZnVuY3Rpb24gdGhhdCB2YWxpZGF0ZXMgYXBwcm9wcmlh dGUgUFBHVFQgc3VwcG9ydCBiZWZvcmUgcnVubmluZyB0ZXN0cy4KPiBPcHRpbWl6ZWQgc3RhY2sg c3BhY2UgYW5kIG1lbW9yeSBmb290cHJpbnQgaW4gc3RyZXNzIHRlc3QuIFJlbW92ZWQgdGhlIGV2 aWN0aW9uCj4gdGVzdCwgd2lsbCBhZGQgaXQgYmFjayBhZnRlciB2ZXJpZnlpbmcgcHJvcGVyIGZ1 bmN0aW9uYWxpdHkuCj4KPiB2NjogU3BsaXQgYmFzaWMgdGVzdCBpbnRvIHVzZXJwdHIgYW5kIGJv Cj4gRml4ZWQgc29tZSBjb2Rpbmcgc3R5bGUgaXNzdWVzLgo+Cj4gQ2M6IE1pY2hlbCBUaGllcnJ5 IDxtaWNoZWwudGhpZXJyeUBpbnRlbC5jb20+Cj4gQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28u dXJzdWxpbkBpbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogVmluYXkgQmVsZ2F1bWthciA8dmlu YXkuYmVsZ2F1bWthckBpbnRlbC5jb20+Cj4gLS0tCj4gICB0ZXN0cy8uZ2l0aWdub3JlICAgICAg IHwgICAgMSArCj4gICB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIHwgICAgMSArCj4gICB0ZXN0cy9n ZW1fc29mdHBpbi5jICAgIHwgMTAwMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKPiAgIDMgZmlsZXMgY2hhbmdlZCwgMTAwNSBpbnNlcnRpb25zKCspCj4g ICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvZ2VtX3NvZnRwaW4uYwo+Cj4gZGlmZiAtLWdpdCBh L3Rlc3RzLy5naXRpZ25vcmUgYi90ZXN0cy8uZ2l0aWdub3JlCj4gaW5kZXggODBhZjlhNy4uNDI0 ODcwYiAxMDA2NDQKPiAtLS0gYS90ZXN0cy8uZ2l0aWdub3JlCj4gKysrIGIvdGVzdHMvLmdpdGln bm9yZQo+IEBAIC0yMSw2ICsyMSw3IEBAIGdlbV9iYWRfYmxpdAo+ICAgZ2VtX2JhZF9sZW5ndGgK PiAgIGdlbV9iYWRfcmVsb2MKPiAgIGdlbV9iYXNpYwo+ICtnZW1fc29mdHBpbgo+ICAgZ2VtX2Nh Y2hpbmcKPiAgIGdlbV9jbG9zZV9yYWNlCj4gICBnZW1fY29uY3VycmVudF9hbGwKPiBkaWZmIC0t Z2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiBp bmRleCA4ZmIyZGU4Li4yMDA4ZDRhIDEwMDY0NAo+IC0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJj ZXMKPiArKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gQEAgLTExLDYgKzExLDcgQEAgVEVT VFNfcHJvZ3NfTSA9IFwKPiAgIAlkcnZfaGFuZ21hbiBcCj4gICAJZ2VtX2JhZF9yZWxvYyBcCj4g ICAJZ2VtX2Jhc2ljIFwKPiArCWdlbV9zb2Z0cGluIFwKPiAgIAlnZW1fY2FjaGluZyBcCj4gICAJ Z2VtX2Nsb3NlX3JhY2UgXAo+ICAgCWdlbV9jb25jdXJyZW50X2JsaXQgXAo+IGRpZmYgLS1naXQg YS90ZXN0cy9nZW1fc29mdHBpbi5jIGIvdGVzdHMvZ2VtX3NvZnRwaW4uYwo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uN2NlYzczMgo+IC0tLSAvZGV2L251bGwKPiArKysg Yi90ZXN0cy9nZW1fc29mdHBpbi5jCj4gQEAgLTAsMCArMSwxMDAzIEBACj4gKy8qCj4gKyAqIENv cHlyaWdodCDCqSAyMDE1IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsg Kgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVk ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29m dHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdB UkUuCj4gKyAqCj4gKyAqIEF1dGhvcnM6Cj4gKyAqICAgIFZpbmF5IEJlbGdhdW1rYXIgPHZpbmF5 LmJlbGdhdW1rYXJAaW50ZWwuY29tPgo+ICsgKiAgICBUaG9tYXMgRGFuaWVsIDx0aG9tYXMuZGFu aWVsQGludGVsLmNvbT4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8dW5pc3RkLmg+Cj4g KyNpbmNsdWRlIDxzdGRsaWIuaD4KPiArI2luY2x1ZGUgPHN0ZGludC5oPgo+ICsjaW5jbHVkZSA8 c3RkaW8uaD4KPiArI2luY2x1ZGUgPHN0cmluZy5oPgo+ICsjaW5jbHVkZSA8ZmNudGwuaD4KPiAr I2luY2x1ZGUgPGludHR5cGVzLmg+Cj4gKyNpbmNsdWRlIDxlcnJuby5oPgo+ICsjaW5jbHVkZSA8 c3lzL3N0YXQuaD4KPiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgo+ICsjaW5jbHVkZSA8c3lzL3Rp bWUuaD4KPiArI2luY2x1ZGUgPG1hbGxvYy5oPgo+ICsjaW5jbHVkZSAiZHJtLmgiCj4gKyNpbmNs dWRlICJpb2N0bF93cmFwcGVycy5oIgo+ICsjaW5jbHVkZSAiZHJtdGVzdC5oIgo+ICsjaW5jbHVk ZSAiaW50ZWxfY2hpcHNldC5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfaW8uaCIKPiArI2luY2x1ZGUg Imk5MTVfZHJtLmgiCj4gKyNpbmNsdWRlIDxhc3NlcnQuaD4KPiArI2luY2x1ZGUgPHN5cy93YWl0 Lmg+Cj4gKyNpbmNsdWRlIDxzeXMvaXBjLmg+Cj4gKyNpbmNsdWRlIDxzeXMvc2htLmg+Cj4gKyNp bmNsdWRlICJpZ3Rfa21zLmgiCj4gKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgo+ICsjaW5jbHVkZSA8 c3lzL3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgo+ICsKPiArI2RlZmluZSBCT19T SVpFIDQwOTYKPiArI2RlZmluZSBNVUxUSVBBR0VfQk9fU0laRSAyICogQk9fU0laRQo+ICsjZGVm aW5lIFNUT1JFX0JBVENIX0JVRkZFUl9TSVpFIDQKPiArI2RlZmluZSBFWEVDX09CSkVDVF9QSU5O RUQJKDE8PDQpCj4gKyNkZWZpbmUgRVhFQ19PQkpFQ1RfU1VQUE9SVFNfNDhCX0FERFJFU1MgKDE8 PDMpCj4gKyNkZWZpbmUgU0hBUkVEX0JVRkZFUl9TSVpFIDQwOTYKPiArCj4gK3R5cGVkZWYgc3Ry dWN0IGRybV9pOTE1X2dlbV91c2VycHRyIGk5MTVfZ2VtX3VzZXJwdHI7Cj4gKwo+ICtzdGF0aWMg dWludDMyX3QgaW5pdF91c2VycHRyKGludCBmZCwgaTkxNV9nZW1fdXNlcnB0ciAqLCB2b2lkICpw dHIsIHVpbnQ2NF90IHNpemUpOwo+ICtzdGF0aWMgdm9pZCAqY3JlYXRlX21lbV9idWZmZXIodWlu dDY0X3Qgc2l6ZSk7Cj4gK3N0YXRpYyBpbnQgZ2VtX2NhbGxfdXNlcnB0cl9pb2N0bChpbnQgZmQs IGk5MTVfZ2VtX3VzZXJwdHIgKnVzZXJwdHIpOwo+ICtzdGF0aWMgdm9pZCBnZW1fcGluX3VzZXJw dHJfdGVzdCh2b2lkKTsKPiArc3RhdGljIHZvaWQgZ2VtX3Bpbl9ib190ZXN0KHZvaWQpOwo+ICtz dGF0aWMgdm9pZCBnZW1fcGluX2ludmFsaWRfdm1hX3Rlc3Qodm9pZCk7Cj4gK3N0YXRpYyB2b2lk IGdlbV9waW5fb3ZlcmxhcF90ZXN0KHZvaWQpOwo+ICtzdGF0aWMgdm9pZCBnZW1fcGluX2hpZ2hf YWRkcmVzc190ZXN0KHZvaWQpOwo+ICsKPiArI2RlZmluZSBOT19QUEdUVCAwCj4gKyNkZWZpbmUg QUxJQVNJTkdfUFBHVFQgMQo+ICsjZGVmaW5lIEZVTExfMzJfQklUX1BQR1RUIDIKPiArI2RlZmlu ZSBGVUxMXzQ4X0JJVF9QUEdUVCAzCj4gKy8qIHVzZXNfZnVsbF9wcGd0dAo+ICsgKiBGaW5kcyBz dXBwb3J0ZWQgUFBHVFQgZGV0YWlscy4KPiArICogQGZkIERSTSBmZAo+ICsgKiBAbWluIGNhbiBi ZQo+ICsgKiAwIC0gTm8gUFBHVFQKPiArICogMSAtIEFsaWFzaW5nIFBQR1RUCj4gKyAqIDIgLSBG dWxsIFBQR1RUICgzMmIpCj4gKyAqIDMgLSBGdWxsIFBQR1RUICg0OGIpCj4gKyAqIFJFVFVSTlMg dHJ1ZS9mYWxzZSBpZiBtaW4gc3VwcG9ydCBpcyBwcmVzZW50Cj4gKyovCj4gK3N0YXRpYyBib29s IHVzZXNfZnVsbF9wcGd0dChpbnQgZmQsIGludCBtaW4pCj4gK3sKPiArCXN0cnVjdCBkcm1faTkx NV9nZXRwYXJhbSBncDsKPiArCWludCB2YWwgPSAwOwo+ICsKPiArCW1lbXNldCgmZ3AsIDAsIHNp emVvZihncCkpOwo+ICsJZ3AucGFyYW0gPSAxODsgLyogSEFTX0FMSUFTSU5HX1BQR1RUICovCj4g KwlncC52YWx1ZSA9ICZ2YWw7Cj4gKwo+ICsJaWYgKGRybUlvY3RsKGZkLCBEUk1fSU9DVExfSTkx NV9HRVRQQVJBTSwgJmdwKSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwllcnJubyA9IDA7Cj4gKwly ZXR1cm4gdmFsID49IG1pbjsKPiArfQo+ICsKPiArCj4gKy8qIGdlbV9jYWxsX3VzZXJwdHJfaW9j dGwKPiArICogSGVscGVyIHRvIGNhbGwgaW9jdGwgLSBUT0RPOiBtb3ZlIHRvIGxpYgo+ICsgKiBA ZmQgLSBkcm0gZmQKPiArICogQHVzZXJwdHIgLSBwb2ludGVyIHRvIGluaXRpYWxpc2VkIHVzZXJw dHIKPiArICogUkVUVVJOUyBzdGF0dXMgb2YgaW9jdGwgY2FsbAo+ICsqLwo+ICtzdGF0aWMgaW50 IGdlbV9jYWxsX3VzZXJwdHJfaW9jdGwoaW50IGZkLCBpOTE1X2dlbV91c2VycHRyICp1c2VycHRy KQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExf STkxNV9HRU1fVVNFUlBUUiwgdXNlcnB0cik7Cj4gKwo+ICsJaWYgKHJldCkKPiArCQlyZXQgPSBl cnJubzsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKiBpbml0X3VzZXJwdHIKPiAr ICogSGVscGVyIHRoYXQgaW5pdHMgdXNlcnB0ciBhbiByZXR1cm5zIGhhbmRsZQo+ICsgKiBAZmQg LSBkcm0gZmQKPiArICogQHVzZXJwdHIgLSBwb2ludGVyIHRvIGVtcHR5IHVzZXJwdHIKPiArICog QHB0ciAtIGJ1ZmZlciB0byBiZSBzaGFyZWQKPiArICogQHNpemUgLSBzaXplIG9mIGJ1ZmZlcgo+ ICsgKiBAcm8gLSByZWFkIG9ubHkgZmxhZwo+ICsgKiBSRVRVUk5TIGhhbmRsZSB0byBzaGFyZWQg YnVmZmVyCj4gKyovCj4gK3N0YXRpYyB1aW50MzJfdCBpbml0X3VzZXJwdHIoaW50IGZkLCBpOTE1 X2dlbV91c2VycHRyICp1c2VycHRyLCB2b2lkICpwdHIsCj4gKwkJCSAgICAgdWludDY0X3Qgc2l6 ZSkKPiArewo+ICsJaW50IHJldDsKPiArCj4gKwltZW1zZXQoKHZvaWQqKXVzZXJwdHIsIDAsIHNp emVvZihpOTE1X2dlbV91c2VycHRyKSk7Cj4gKwo+ICsJdXNlcnB0ci0+dXNlcl9wdHIgPSAodWlu dDY0X3QpcHRyOyAvKiBOZWVkIHRoZSBjYXN0IHRvIG92ZXJjb21lIGNvbXBpbGVyIHdhcm5pbmcg Ki8KPiArCXVzZXJwdHItPnVzZXJfc2l6ZSA9IHNpemU7Cj4gKwl1c2VycHRyLT5mbGFncyA9IEk5 MTVfVVNFUlBUUl9VTlNZTkNIUk9OSVpFRDsKClRvIGNvbnRpbnVlIG9uIHByZXZpb3VzIGl0ZXJh dGlvbiwgZmxhZ3MgPT0gMCBlcXVhbHMgdG8gdGhlIHN5bmNocm9uaXplZCAKdXNlcnB0ci4gTm9u LXJvb3QgdXNlcnMgY2FuJ3QgdXNlIEk5MTVfVVNFUlBUUl9VTlNZTkNIUk9OSVpFRCBzbyB0aGF0 IGlzIAp3aHkgSSBzdWdnZXN0ZWQgc3luY2hyb25pemVkIG1pZ2h0IGJlIGJldHRlciBmb3IgdGVz dCBjb3ZlcmFnZS4KCj4gKwo+ICsJcmV0ID0gZ2VtX2NhbGxfdXNlcnB0cl9pb2N0bChmZCwgdXNl cnB0cik7Cj4gKwlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Cj4gKwo+ICsJcmV0dXJuIHVzZXJwdHIt PmhhbmRsZTsKPiArfQo+ICsKPiArLyogY3JlYXRlX21lbV9idWZmZXIKPiArICogQ3JlYXRlcyBh IDRLIGFsaWduZWQgQ1BVIGJ1ZmZlcgo+ICsgKiBAc2l6ZSAtIHNpemUgb2YgYnVmZmVyCj4gKyAq IFJFVFVSTlMgcG9pbnRlciB0byBidWZmZXIgb2YgQHNpemUKPiArKi8KPiArc3RhdGljIHZvaWQg KmNyZWF0ZV9tZW1fYnVmZmVyKHVpbnQ2NF90IHNpemUpCj4gK3sKPiArCXZvaWQgKmFkZHI7Cj4g KwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IHBvc2l4X21lbWFsaWduKCZhZGRyLCA0MDk2LCBzaXpl KTsKPiArCWlndF9hc3NlcnQocmV0ID09IDApOwo+ICsKPiArCXJldHVybiBhZGRyOwo+ICt9Cj4g Kwo+ICsvKiBzZXR1cF9leGVjX29iago+ICsgKiBwb3B1bGF0ZSBleGVjIG9iamVjdAo+ICsgKiBA ZXhlYyAtIGV4ZWMgb2JqZWN0Cj4gKyAqIEBoYW5kbGUgLSBoYW5kbGUgdG8gZ2VtIGJ1ZmZlcgo+ ICsgKiBAZmxhZ3MgLSBhbnkgZmxhZ3MKPiArICogQG9mZnNldCAtIHJlcXVlc3RlZCBWTUEKPiAr Ki8KPiArc3RhdGljIHZvaWQgc2V0dXBfZXhlY19vYmooc3RydWN0IGRybV9pOTE1X2dlbV9leGVj X29iamVjdDIgKmV4ZWMsCj4gKwkJCSAgIHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3QgZmxhZ3Ms Cj4gKwkJCSAgIHVpbnQ2NF90IG9mZnNldCkKPiArewo+ICsJbWVtc2V0KGV4ZWMsIDAsIHNpemVv ZihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MikpOwo+ICsJZXhlYy0+aGFuZGxlID0g aGFuZGxlOwo+ICsJZXhlYy0+ZmxhZ3MgPSBmbGFnczsKPiArCWV4ZWMtPm9mZnNldCA9IG9mZnNl dDsKPiArfQo+ICsKPiArLyogZ2VtX3N0b3JlX2RhdGFfc3ZtCj4gKyAqIHBvcHVsYXRlIGJhdGNo IGJ1ZmZlciB3aXRoIE1JX1NUT1JFX0RXT1JEX0lNTSBjb21tYW5kCj4gKyAqIEBmZDogZHJtIGZp bGUgZGVzY3JpcHRvcgo+ICsgKiBAY21kX2J1ZjogYmF0Y2ggYnVmZmVyCj4gKyAqIEB2YWRkcjog ZGVzdGluYXRpb24gVmlydHVhbCBhZGRyZXNzCj4gKyAqIEBkYXRhOiBkYXRhIHRvIGJlIHN0b3Jl IGF0IGRlc3RpbmF0aW9uCj4gKyAqIEBlbmQ6IHdoZXRoZXIgdG8gZW5kIGJhdGNoIGJ1ZmZlciBv ciBub3QKPiArKi8KPiArc3RhdGljIGludCBnZW1fc3RvcmVfZGF0YV9zdm0oaW50IGZkLCB1aW50 MzJfdCAqY21kX2J1ZiwgdWludDY0X3QgdmFkZHIsCj4gKwkJCSAgICAgIHVpbnQzMl90IGRhdGEs IGJvb2wgZW5kKQo+ICt7Cj4gKwlpbnQgaSA9IDA7Cj4gKwo+ICsJY21kX2J1ZltpKytdID0gTUlf U1RPUkVfRFdPUkRfSU1NOwo+ICsJY21kX2J1ZltpKytdID0gdmFkZHIgJiAweEZGRkZGRkZDOwo+ ICsJY21kX2J1ZltpKytdID0gKHZhZGRyID4+IDMyKSAmIDB4RkZGRjsgLyogYml0cyAzMjo0NyAq Lwo+ICsKPiArCWNtZF9idWZbaSsrXSA9IGRhdGE7Cj4gKwlpZiAoZW5kKSB7Cj4gKwkJY21kX2J1 ZltpKytdID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKPiArCQljbWRfYnVmW2krK10gPSAwOwo+ICsJ fQo+ICsKPiArCXJldHVybihpICogc2l6ZW9mKHVpbnQzMl90KSk7Cj4gK30KPiArCj4gKy8qIGdl bV9zdG9yZV9kYXRhCj4gKyAqIHBvcHVsYXRlIGJhdGNoIGJ1ZmZlciB3aXRoIE1JX1NUT1JFX0RX T1JEX0lNTSBjb21tYW5kCj4gKyAqIFRoaXMgb25lIGZpbGxzIHVwIHJlbG9jIGJ1ZmZlciBhcyB3 ZWxsCj4gKyAqIEBmZDogZHJtIGZpbGUgZGVzY3JpcHRvcgo+ICsgKiBAY21kX2J1ZjogYmF0Y2gg YnVmZmVyCj4gKyAqIEBkYXRhOiBkYXRhIHRvIGJlIHN0b3JlIGF0IGRlc3RpbmF0aW9uCj4gKyAq IEByZWxvYyAtIHJlbG9jYXRpb24gZW50cnkKPiArICogQGVuZDogd2hldGhlciB0byBlbmQgYmF0 Y2ggYnVmZmVyIG9yIG5vdAo+ICsqLwo+ICtzdGF0aWMgaW50IGdlbV9zdG9yZV9kYXRhKGludCBm ZCwgdWludDMyX3QgKmNtZF9idWYsCj4gKwkJCSAgdWludDMyX3QgaGFuZGxlLCB1aW50MzJfdCBk YXRhLAo+ICsJCQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2Ms Cj4gKwkJCSAgYm9vbCBlbmQpCj4gK3sKPiArCWludCBpID0gMDsKPiArCj4gKwljbWRfYnVmW2kr K10gPSBNSV9TVE9SRV9EV09SRF9JTU07Cj4gKwljbWRfYnVmW2krK10gPSAwOyAvKiBsb3dlciAz MSBiaXRzIG9mIDQ4IGJpdCBhZGRyZXNzIC0gMCByZWxvYyBuZWVkZWQgKi8KPiArCWNtZF9idWZb aSsrXSA9IDA7IC8qIHVwcGVyIDE1IGJpdHMgb2YgNDggYml0IGFkZHJlc3MgLSAwIHJlbG9jIG5l ZWRlZCAqLwo+ICsJcmVsb2MtPm9mZnNldCA9IDEgKiBzaXplb2YodWludDMyX3QpOwo+ICsJcmVs b2MtPmRlbHRhID0gMDsKPiArCXJlbG9jLT50YXJnZXRfaGFuZGxlID0gaGFuZGxlOwo+ICsJcmVs b2MtPnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7Cj4gKwlyZWxvYy0+d3Jp dGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1JFTkRFUjsKPiArCXJlbG9jLT5wcmVzdW1lZF9v ZmZzZXQgPSAwOwo+ICsJY21kX2J1ZltpKytdID0gZGF0YTsKPiArCWlmIChlbmQpIHsKPiArCQlj bWRfYnVmW2krK10gPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICsJCWNtZF9idWZbaSsrXSA9IDA7 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIChpICogc2l6ZW9mKHVpbnQzMl90KSk7Cj4gK30KPiArCj4g Ky8qIHNldHVwX2V4ZWNidWZmZXIKPiArICogaGVscGVyIGZvciBidWZmZXIgZXhlY3V0aW9uCj4g KyAqIEBleGVjYnVmIC0gcG9pbnRlciB0byBleGVjYnVmZmVyCj4gKyAqIEBleGVjX29iamVjdCAt IHBvaW50ZXIgdG8gZXhlYyBvYmplY3QyIHN0cnVjdAo+ICsgKiBAcmluZyAtIHJpbmcgdG8gYmUg dXNlZAo+ICsgKiBAYnVmZmVyX2NvdW50IC0gaG93IG1hbnUgYnVmZmVycyB0byBzdWJtaXQKPiAr ICogQGJhdGNoX2xlbmd0aCAtIGxlbmd0aCBvZiBiYXRjaCBidWZmZXIKPiArKi8KPiArc3RhdGlj IHZvaWQgc2V0dXBfZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyICpl eGVjYnVmLAo+ICsJCQkgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpleGVj X29iamVjdCwKPiArCQkJICAgICBpbnQgcmluZywgaW50IGJ1ZmZlcl9jb3VudCwgaW50IGJhdGNo X2xlbmd0aCkKPiArewo+ICsJZXhlY2J1Zi0+YnVmZmVyc19wdHIgPSAodWludDY0X3QpZXhlY19v YmplY3Q7Cj4gKwlleGVjYnVmLT5idWZmZXJfY291bnQgPSBidWZmZXJfY291bnQ7Cj4gKwlleGVj YnVmLT5iYXRjaF9zdGFydF9vZmZzZXQgPSAwOwo+ICsJZXhlY2J1Zi0+YmF0Y2hfbGVuID0gYmF0 Y2hfbGVuZ3RoOwo+ICsJZXhlY2J1Zi0+Y2xpcHJlY3RzX3B0ciA9IDA7Cj4gKwlleGVjYnVmLT5u dW1fY2xpcHJlY3RzID0gMDsKPiArCWV4ZWNidWYtPkRSMSA9IDA7Cj4gKwlleGVjYnVmLT5EUjQg PSAwOwo+ICsJZXhlY2J1Zi0+ZmxhZ3MgPSByaW5nOwo+ICsJaTkxNV9leGVjYnVmZmVyMl9zZXRf Y29udGV4dF9pZCgqZXhlY2J1ZiwgMCk7Cj4gKwlleGVjYnVmLT5yc3ZkMiA9IDA7Cj4gK30KPiAr Cj4gKy8qIHN1Ym1pdF9hbmRfc3luYwo+ICsgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGV4ZWMgYW5k IHN5bmMgZnVuY3Rpb25zCj4gKyAqIEBmZCAtIGRybSBmZAo+ICsgKiBAZXhlY2J1ZiAtIHBvaW50 ZXIgdG8gZXhlY2J1ZmZlcgo+ICsgKiBAYmF0Y2hfYnVmX2hhbmRsZSAtIGJhdGNoIGJ1ZmZlciBo YW5kbGUKPiArKi8KPiArc3RhdGljIHZvaWQgc3VibWl0X2FuZF9zeW5jKGludCBmZCwgc3RydWN0 IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqZXhlY2J1ZiwKPiArCQkJICAgIHVpbnQzMl90IGJh dGNoX2J1Zl9oYW5kbGUpCj4gK3sKPiArCWdlbV9leGVjYnVmKGZkLCBleGVjYnVmKTsKPiArCWdl bV9zeW5jKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArfQo+ICsKPiArLyogZ2VtX3VzZXJwdHJf c3luYwo+ICsgKiBoZWxwZXIgZm9yIHN5bmNpbmcgdG8gQ1BVIGRvbWFpbiAtIGNvcHkvcGFzdGUg ZnJvbSB1c2VyYmxpdAo+ICsgKiBAZmQgLSBkcm0gZmQKPiArICogQGhhbmRsZSAtIGJ1ZmZlciBo YW5kbGUgdG8gc3luYwo+ICsqLwo+ICtzdGF0aWMgdm9pZCBnZW1fdXNlcnB0cl9zeW5jKGludCBm ZCwgdWludDMyX3QgaGFuZGxlKQo+ICt7Cj4gKwlnZW1fc2V0X2RvbWFpbihmZCwgaGFuZGxlLCBJ OTE1X0dFTV9ET01BSU5fQ1BVLCBJOTE1X0dFTV9ET01BSU5fQ1BVKTsKPiArfQo+ICsKPiArCj4g Ky8qIGdlbV9waW5fdXNlcnB0cl90ZXN0Cj4gKyAqIFRoaXMgdGVzdCB3aWxsIGNyZWF0ZSBhIHNo YXJlZCBidWZmZXIsIGFuZCBjcmVhdGUgYSBjb21tYW5kCj4gKyAqIGZvciBHUFUgdG8gd3JpdGUg ZGF0YSBpbiBpdAo+ICsgKiBDUFUgd2lsbCByZWFkIGFuZCBtYWtlIHN1cmUgZXhwZWN0ZWQgdmFs dWUgaXMgb2J0YWluZWQKPiArICogTWFsbG9jIGEgNEsgYnVmZmVyCj4gKyAqIFNoYXJlIGJ1ZmZl ciB3aXRoIHdpdGggR1BVIGJ5IHVzaW5nIHVzZXJwdHIgaW9jdGwKPiArICogQ3JlYXRlIGJhdGNo IGJ1ZmZlciB0byB3cml0ZSBEQVRBIHRvIGZpcnN0IGR3b3JkIG9mIGJ1ZmZlcgo+ICsgKiBVc2Ug MHgxMDAwIGFkZHJlc3MgYXMgZGVzdGluYXRpb24gYWRkcmVzcyBpbiBiYXRjaCBidWZmZXIKPiAr ICogU2V0IEVYRUNfT0JKRUNUX1BJTk5FRCBmbGFnIGluIGV4ZWMgb2JqZWN0Cj4gKyAqIFNldCAn b2Zmc2V0JyBpbiBleGVjIG9iamVjdCB0byAweDEwMDAKPiArICogU3VibWl0IGV4ZWNidWZmZXIK PiArICogVmVyaWZ5IHZhbHVlIG9mIGZpcnN0IERXT1JEIGluIHNoYXJlZCBidWZmZXIgbWF0Y2hl cyBEQVRBCj4gKyovCj4gK3N0YXRpYyB2b2lkIGdlbV9waW5fdXNlcnB0cl90ZXN0KHZvaWQpCj4g K3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsKPiArCWludCBmZDsKPiArCXVpbnQzMl90 ICpzaGFyZWRfYnVmZmVyOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVj YnVmOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19vYmplY3QyWzJd Owo+ICsJdWludDMyX3QgYmF0Y2hfYnVmZmVyW1NUT1JFX0JBVENIX0JVRkZFUl9TSVpFICsgMl07 Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlLCBzaGFyZWRfYnVmX2hhbmRsZTsKPiArCWlu dCByaW5nLCBsZW47Cj4gKwljb25zdCB1aW50MzJfdCBkYXRhID0gMHgxMjM0NTY3ODsKPiArCXVp bnQ2NF90IHBpbm5pbmdfb2Zmc2V0ID0gMHgxMDAwOwo+ICsKPiArCWZkID0gZHJtX29wZW5fZHJp dmVyKERSSVZFUl9JTlRFTCk7Cj4gKwlpZ3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEFM SUFTSU5HX1BQR1RUKSk7Cj4gKwliYXRjaF9idWZfaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9f U0laRSk7Cj4gKwo+ICsJLyogY3JlYXRlIGNwdSBidWZmZXIgKi8KPiArCXNoYXJlZF9idWZmZXIg PSBjcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpFKTsKPiArCQo+ICsJLyogc2hhcmUgd2l0aCBHUFUg Ki8KPiArCXNoYXJlZF9idWZfaGFuZGxlID0gaW5pdF91c2VycHRyKGZkLCAmdXNlcnB0ciwgc2hh cmVkX2J1ZmZlciwKPiArCQkJCQkgQk9fU0laRSk7Cj4gKwo+ICsJLyogY3JlYXRlIGNvbW1hbmQg YnVmZmVyIHdpdGggd3JpdGUgY29tbWFuZCAqLwo+ICsJbGVuID0gZ2VtX3N0b3JlX2RhdGFfc3Zt KGZkLCBiYXRjaF9idWZmZXIsIHBpbm5pbmdfb2Zmc2V0LCBkYXRhLCB0cnVlKTsKPiArCWdlbV93 cml0ZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgYmF0Y2hfYnVmZmVyLCBsZW4pOwo+ICsKPiAr CS8qIHN1Ym1pdCBjb21tYW5kIGJ1ZmZlciAqLwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2Jq ZWN0MlswXSwgc2hhcmVkX2J1Zl9oYW5kbGUsCj4gKwkJICAgICAgIEVYRUNfT0JKRUNUX1BJTk5F RCwgcGlubmluZ19vZmZzZXQpOwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlsxXSwg YmF0Y2hfYnVmX2hhbmRsZSwgMCwgMCk7Cj4gKwo+ICsJcmluZyA9IEk5MTVfRVhFQ19SRU5ERVI7 Cj4gKwo+ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLCAy LCBsZW4pOwo+ICsJc3VibWl0X2FuZF9zeW5jKGZkLCAmZXhlY2J1ZiwgYmF0Y2hfYnVmX2hhbmRs ZSk7Cj4gKwlnZW1fdXNlcnB0cl9zeW5jKGZkLCBzaGFyZWRfYnVmX2hhbmRsZSk7Cj4gKwo+ICsJ LyogQ2hlY2sgaWYgZHJpdmVyIHBpbm5lZCB0aGUgYnVmZmVyIGFzIHJlcXVlc3RlZCAqLwo+ICsJ aWd0X2ZhaWxfb25fZihleGVjX29iamVjdDJbMF0ub2Zmc2V0ICE9IHBpbm5pbmdfb2Zmc2V0LAo+ ICsJCQkiXG5GYWlsZWQgdG8gcGluIGF0IHJlcXVlc3RlZCBvZmZzZXQiKTsKPiArCS8qIGNoZWNr IG9uIENQVSB0byBzZWUgaWYgdmFsdWUgY2hhbmdlcyAqLwo+ICsJaWd0X2ZhaWxfb25fZihzaGFy ZWRfYnVmZmVyWzBdICE9IGRhdGEsCj4gKwkJICAgICAgIlxuQ1BVIHJlYWQgZG9lcyBub3QgbWF0 Y2ggR1BVIHdyaXRlLFwKPiArCQkJZXhwZWN0ZWQ6IDB4JXgsIGdvdDogMHgleFxuIiwKPiArCQkJ ZGF0YSwgc2hhcmVkX2J1ZmZlclswXSk7Cj4gKwo+ICsJZ2VtX2Nsb3NlKGZkLCBiYXRjaF9idWZf aGFuZGxlKTsKCkNvdWxkIGNsb3NlIHRoZSBzaGFyZWRfYnVmX2hhbmRsZSBhcyB3ZWxsLCBhbHRo b3VnaCBpdCBkb2VzIG5vdCBtYXR0ZXIgCmh1Z2VseSBzaW5jZSB5b3UgYXJlIGNsb3NpbmcgdGhl IGZkIGFueXdheS4gSnVzdCBiZXR0ZXIgZm9yIGNvbnNpc3RlbmN5IApvZiB0aGUgY29kZSBJIHN1 cHBvc2UuCgo+ICsJY2xvc2UoZmQpOwo+ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiArfQo+ICsK PiArLyogZ2VtX3Bpbl9ibwo+ICsgKiBUaGlzIHRlc3Qgd2lsbCB0ZXN0IHNvZnRwaW5uaW5nIG9m IGEgZ2VtIGJ1ZmZlciBvYmplY3QKPiArICogTWFsbG9jIGEgNEsgYnVmZmVyCj4gKyAqIENyZWF0 ZSBiYXRjaCBidWZmZXIgdG8gd3JpdGUgREFUQSB0byBmaXJzdCBkd29yZCBvZiBidWZmZXIKPiAr ICogVXNlIDB4MTAwMCBhZGRyZXNzIGFzIGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4gYmF0Y2ggYnVm ZmVyCj4gKyAqIFNldCBFWEVDX09CSkVDVF9QSU5ORUQgZmxhZyBpbiBleGVjIG9iamVjdAo+ICsg KiBTZXQgJ29mZnNldCcgaW4gZXhlYyBvYmplY3QgdG8gMHgxMDAwCj4gKyAqIFN1Ym1pdCBleGVj YnVmZmVyCj4gKyAqIFZlcmlmeSB2YWx1ZSBwaW5uZWQgb2Zmc2V0IG1hdGNoZXMgdGhlIHJlcXVl c3QKPiArKi8KPiArc3RhdGljIHZvaWQgZ2VtX3Bpbl9ib190ZXN0KHZvaWQpCj4gK3sKPiArCWlu dCBmZDsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiArCXN0 cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGV4ZWNfb2JqZWN0MlsyXTsKPiArCXVpbnQz Ml90IGJhdGNoX2J1ZmZlcltTVE9SRV9CQVRDSF9CVUZGRVJfU0laRSArIDJdOwo+ICsJdWludDMy X3QgYmF0Y2hfYnVmX2hhbmRsZSwgdW5zaGFyZWRfYnVmX2hhbmRsZTsKPiArCXN0cnVjdCBkcm1f aTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvY1s0XTsKPiArCWludCByaW5nLCBsZW47Cj4g Kwl1aW50MzJfdCB2YWx1ZTsKPiArCWNvbnN0IHVpbnQzMl90IGRhdGEgPSAweDEyMzQ1Njc4Owo+ ICsJdWludDY0X3QgcGlubmluZ19vZmZzZXQgPSAweDEwMDA7Cj4gKwo+ICsJZmQgPSBkcm1fb3Bl bl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCWlndF9yZXF1aXJlKHVzZXNfZnVsbF9wcGd0dChm ZCwgQUxJQVNJTkdfUFBHVFQpKTsKPiArCWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1fY3JlYXRlKGZk LCBCT19TSVpFKTsKPiArCj4gKwkvKiBjcmVhdGUgZ2VtIGJ1ZmZlciAqLwo+ICsJdW5zaGFyZWRf YnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsJCj4gKwkvKiBjcmVhdGUg Y29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kICovCj4gKwlsZW4gPSBnZW1fc3RvcmVf ZGF0YShmZCwgYmF0Y2hfYnVmZmVyLCB1bnNoYXJlZF9idWZfaGFuZGxlLCBkYXRhLAo+ICsJCQkJ cmVsb2MsIHRydWUpOwo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRj aF9idWZmZXIsIGxlbik7Cj4gKwo+ICsJLyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4gKwlz ZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCB1bnNoYXJlZF9idWZfaGFuZGxlLAo+ICsJ CSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQsIHBpbm5pbmdfb2Zmc2V0KTsKPiArCXNldHVwX2V4 ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIDApOwo+ICsJZXhl Y19vYmplY3QyWzFdLnJlbG9jYXRpb25fY291bnQgPSAxOwo+ICsJZXhlY19vYmplY3QyWzFdLnJl bG9jc19wdHIgPSAodWludDY0X3QpcmVsb2M7Cj4gKwo+ICsJcmluZyA9IEk5MTVfRVhFQ19SRU5E RVI7Cj4gKwo+ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5n LCAyLCBsZW4pOwo+ICsJc3VibWl0X2FuZF9zeW5jKGZkLCAmZXhlY2J1ZiwgYmF0Y2hfYnVmX2hh bmRsZSk7Cj4gKwo+ICsJLyogQ2hlY2sgaWYgZHJpdmVyIHBpbm5lZCB0aGUgYnVmZmVyIGFzIHJl cXVlc3RlZCAqLwo+ICsJaWd0X2ZhaWxfb25fZihleGVjX29iamVjdDJbMF0ub2Zmc2V0ICE9IHBp bm5pbmdfb2Zmc2V0LAo+ICsJCQkiXG5GYWlsZWQgdG8gcGluIGF0IHJlcXVlc3RlZCBvZmZzZXQi KTsKPiArCWdlbV9yZWFkKGZkLCB1bnNoYXJlZF9idWZfaGFuZGxlLCAwLCAodm9pZCopJnZhbHVl LCA0KTsKPiArCWlndF9hc3NlcnQodmFsdWUgPT0gZGF0YSk7Cj4gKwo+ICsJZ2VtX2Nsb3NlKGZk LCBiYXRjaF9idWZfaGFuZGxlKTsKClNhbWUgY29tbWVudCBhYm91dCBjbG9zaW5nIHRoZSBoYW5k bGUgYXMgYWJvdmUuCgo+ICsJY2xvc2UoZmQpOwo+ICt9Cj4gKwo+ICsKPiArLyogZ2VtX211bHRp cGxlX3Byb2Nlc3NfdGVzdAo+ICsgKiBSdW4gYmFzaWMgdGVzdCBzaW11bHRhbmVvdXNseSB3aXRo IG11bHRpcGxlIHByb2Nlc3Nlcwo+ICsgKiBUaGlzIHdpbGwgdGVzdCBwaW5uaW5nIHNhbWUgVkEg c2VwYXJhdGVseSBpbiBlYWNoIHByb2Nlc3MKPiArCj4gKyAqIGZvcmsoKTsKPiArICogRXhlY3V0 ZSBiYXNpYyB0ZXN0IGluIHBhcmVudC9jaGlsZCBwcm9jZXNzZXMKPiArKi8KPiArI2RlZmluZSBN QVhfTlVNX1BST0NFU1NFUyAxMAo+ICsKPiArc3RhdGljIHZvaWQgZ2VtX211bHRpcGxlX3Byb2Nl c3NfdGVzdCh2b2lkKQo+ICt7Cj4gKwlpZ3RfZm9yayhjaGlsZCwgTUFYX05VTV9QUk9DRVNTRVMp IHsKPiArCQlnZW1fcGluX3VzZXJwdHJfdGVzdCgpOwo+ICsJfQo+ICsJaWd0X3dhaXRjaGlsZHJl bigpOwo+ICt9Cj4gKwo+ICsKPiArLyogZ2VtX3JlcGluX3Rlc3QKPiArICogVGhpcyB0ZXN0IHRy aWVzIHRvIHJlcGluIGEgYnVmZmVyIGF0IGEgcHJldmlvdXNseSBwaW5uZWQgdm1hCj4gKyAqIGZy b20gYSBkaWZmZXJlbnQgZXhlY2J1Zi4KPiArICogTWFsbG9jIGEgNEsgYnVmZmVyCj4gKyAqIFNo YXJlIGJ1ZmZlciB3aXRoIHdpdGggR1BVIGJ5IHVzaW5nIHVzZXJwdHIgaW9jdGwKPiArICogQ3Jl YXRlIGJhdGNoIGJ1ZmZlciB0byB3cml0ZSBEQVRBIHRvIGZpcnN0IGR3b3JkIG9mIGJ1ZmZlcgo+ ICsgKiBVc2UgMHgxMDAwIGFkZHJlc3MgYXMgZGVzdGluYXRpb24gYWRkcmVzcyBpbiBiYXRjaCBi dWZmZXIKPiArICogU2V0IEVYRUNfT0JKRUNUX1BJTk5FRCBmbGFnIGluIGV4ZWMgb2JqZWN0Cj4g KyAqIFNldCAnb2Zmc2V0JyBpbiBleGVjIG9iamVjdCB0byAweDEwMDAgVk1BCj4gKyAqIFN1Ym1p dCBleGVjYnVmZmVyCj4gKyAqIFZlcmlmeSB2YWx1ZSBvZiBmaXJzdCBEV09SRCBpbiBzaGFyZWQg YnVmZmVyIG1hdGNoZXMgREFUQQo+ICsKPiArICogQ3JlYXRlIHNlY29uZCBzaGFyZWQgYnVmZmVy Cj4gKyAqIEZvbGxvdyBhbGwgc3RlcHMgYWJvdmUKPiArICogRXhlY3B0LCBmb3Igb2Zmc2V0LCB1 c2UgVk1BIG9mIGZpcnN0IGJ1ZmZlciBhYm92ZQo+ICsgKiBTdWJtaXQgZXhlY2J1ZmZlcgo+ICsg KiBWZXJpZnkgdmFsdWUgb2YgZmlyc3QgRFdPUkQgaW4gc2Vjb25kIHNoYXJlZCBidWZmZXIgbWF0 Y2hlcyBEQVRBCj4gKyovCj4gK3N0YXRpYyB2b2lkIGdlbV9yZXBpbl90ZXN0KHZvaWQpCj4gK3sK PiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0 cjE7Cj4gKwlpbnQgZmQ7Cj4gKwl1aW50MzJfdCAqc2hhcmVkX2J1ZmZlcjsKPiArCXVpbnQzMl90 ICpzaGFyZWRfYnVmZmVyMTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhl Y2J1ZjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGV4ZWNfb2JqZWN0Mlsy XTsKPiArCXVpbnQzMl90IGJhdGNoX2J1ZmZlcltTVE9SRV9CQVRDSF9CVUZGRVJfU0laRSArIDJd Owo+ICsJdWludDMyX3QgYmF0Y2hfYnVmX2hhbmRsZSwgc2hhcmVkX2J1Zl9oYW5kbGUsIHNoYXJl ZF9idWZfaGFuZGxlMTsKPiArCWludCByaW5nLCBsZW47Cj4gKwljb25zdCB1aW50MzJfdCBkYXRh ID0gMHgxMjM0NTY3ODsKPiArCXVpbnQ2NF90IHBpbm5pbmdfb2Zmc2V0ID0gMHgxMDAwOwo+ICsK PiArCS8qIENyZWF0ZSBnZW0gb2JqZWN0ICovCj4gKwlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklW RVJfSU5URUwpOwo+ICsJaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0KGZkLCBBTElBU0lOR19Q UEdUVCkpOwo+ICsKPiArCWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBCT19TSVpF KTsKPiArCj4gKwkvKiBjcmVhdGUgY3B1IGJ1ZmZlciwgc2V0IGZpcnN0IGVsZW1lbnRzIHRvIDB4 MCAqLwo+ICsJc2hhcmVkX2J1ZmZlciA9IGNyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUpOwo+ICsJ c2hhcmVkX2J1ZmZlcjEgPSBjcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpFKTsKPiArCXNoYXJlZF9i dWZmZXJbMF0gPSAweDA7Cj4gKwlzaGFyZWRfYnVmZmVyMVswXSA9IDB4MDsKPiArCj4gKwkvKiBz aGFyZSB3aXRoIEdQVSBhbmQgZ2V0IGhhbmRsZXMgKi8KPiArCXNoYXJlZF9idWZfaGFuZGxlID0g aW5pdF91c2VycHRyKGZkLCAmdXNlcnB0ciwgc2hhcmVkX2J1ZmZlciwKPiArCQkJCQkgQk9fU0la RSk7Cj4gKwlzaGFyZWRfYnVmX2hhbmRsZTEgPSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRyMSwg c2hhcmVkX2J1ZmZlcjEsCj4gKwkJCQkJICBCT19TSVpFKTsKPiArCj4gKwkvKiBjcmVhdGUgY29t bWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kICovCj4gKwlsZW4gPSBnZW1fc3RvcmVfZGF0 YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciwgcGlubmluZ19vZmZzZXQsIGRhdGEsIHRydWUpOwo+ICsJ Z2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4g Kwo+ICsJLyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4gKwlzZXR1cF9leGVjX29iaigmZXhl Y19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZSwKPiArCQkgICAgICAgRVhFQ19PQkpFQ1Rf UElOTkVELCBwaW5uaW5nX29mZnNldCk7Cj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3Qy WzFdLCBiYXRjaF9idWZfaGFuZGxlLCAwLCAwKTsKPiArCj4gKwlyaW5nID0gSTkxNV9FWEVDX1JF TkRFUjsKPiArCj4gKwlzZXR1cF9leGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJp bmcsIDIsIGxlbik7Cj4gKwlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVmLCBiYXRjaF9idWZf aGFuZGxlKTsKPiArCWdlbV91c2VycHRyX3N5bmMoZmQsIHNoYXJlZF9idWZfaGFuZGxlKTsKPiAr Cj4gKwlpZ3RfYXNzZXJ0KGV4ZWNfb2JqZWN0MlswXS5vZmZzZXQgPT0gcGlubmluZ19vZmZzZXQp Owo+ICsJaWd0X2Fzc2VydCgqc2hhcmVkX2J1ZmZlciA9PSBkYXRhKTsKPiArCj4gKwkvKiBTZWNv bmQgYnVmZmVyICovCj4gKwkvKiBjcmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21t YW5kICovCj4gKwlwaW5uaW5nX29mZnNldCA9IGV4ZWNfb2JqZWN0MlswXS5vZmZzZXQ7Cj4gKwls ZW4gPSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciwgcGlubmluZ19vZmZzZXQs IGRhdGEsIHRydWUpOwo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRj aF9idWZmZXIsIGxlbik7Cj4gKwo+ICsJLyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4gKwkv KiBQaW4gYXQgc2hhcmVkX2J1ZmZlciwgbm90IHNoYXJlZF9idWZmZXIxICovCj4gKwkvKiBXZSBh cmUgcmVxdWVzdGluZyBhZGRyZXNzIHdoZXJlIGFub3RoZXIgYnVmZmVyIHdhcyBwaW5uZWQgcHJl dmlvdXNseSAqLwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2J1 Zl9oYW5kbGUxLAo+ICsJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQsIHBpbm5pbmdfb2Zmc2V0 KTsKPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIGJhdGNoX2J1Zl9oYW5kbGUs IDAsIDApOwo+ICsKPiArCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+ICsKPiArCXNldHVwX2V4 ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywgMiwgbGVuKTsKPiArCXN1Ym1p dF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJZ2VtX3VzZXJw dHJfc3luYyhmZCwgc2hhcmVkX2J1Zl9oYW5kbGUxKTsKPiArCj4gKwlpZ3RfYXNzZXJ0KGV4ZWNf b2JqZWN0MlswXS5vZmZzZXQgPT0gcGlubmluZ19vZmZzZXQpOwo+ICsJaWd0X2Fzc2VydCgqc2hh cmVkX2J1ZmZlcjEgPT0gZGF0YSk7Cj4gKwo+ICsJZ2VtX2Nsb3NlKGZkLCBiYXRjaF9idWZfaGFu ZGxlKTsKPiArCWNsb3NlKGZkKTsKPiArCj4gKwlmcmVlKHNoYXJlZF9idWZmZXIpOwo+ICsJZnJl ZShzaGFyZWRfYnVmZmVyMSk7Cj4gK30KPiArCj4gKwo+ICsvKiBnZW1fcmVwaW5fb3ZlcmxhcF90 ZXN0Cj4gKyAqIFRoaXMgdGVzdCB3aWxsIGF0dGVtcHQgdG8gcGluIHR3byBidWZmZXJzIGF0IHRo ZSBzYW1lIFZNQSBhcyBwYXJ0IG9mIHRoZSBzYW1lCj4gKyAgIGV4ZWNidWZmZXIgb2JqZWN0Cj4g Kwo+ICsgKiBNYWxsb2MgYSA0SyBidWZmZXIKPiArICogU2hhcmUgYnVmZmVyIHdpdGggd2l0aCBH UFUgYnkgdXNpbmcgdXNlcnB0ciBpb2N0bAo+ICsgKiBDcmVhdGUgc2Vjb25kIHNoYXJlZCBidWZm ZXIKPiArICogQ3JlYXRlIGJhdGNoIGJ1ZmZlciB0byB3cml0ZSBEQVRBIHRvIGZpcnN0IGR3b3Jk IG9mIGVhY2ggYnVmZmVyCj4gKyAqIFVzZSBzYW1lIHZpcnR1YWwgYWRkcmVzcyBhcyBkZXN0aW5h dGlvbiBhZGRyZXNzZXMgaW4gYmF0Y2ggYnVmZmVyCj4gKyAqIFNldCBFWEVDX09CSkVDVF9QSU5O RUQgZmxhZyBpbiBib3RoIGV4ZWMgb2JqZWN0cwo+ICsgKiBTZXQgJ29mZnNldCcgaW4gYm90aCBl eGVjIG9iamVjdHMgdG8gc2FtZSBWTUEKPiArICogU3VibWl0IGV4ZWNidWZmZXIKPiArICogQ29t bWFuZCBzaG91bGQgcmV0dXJuIEVJTlZBTCwgc2luY2Ugd2UgYXJlIHRyeWluZyB0byBwaW4gdG8g c2FtZSBWTUEKPiArKi8KPiArc3RhdGljIHZvaWQgZ2VtX3Bpbl9vdmVybGFwX3Rlc3Qodm9pZCkK PiArewo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1 c2VycHRyMTsKPiArCWludCBmZCwgcmV0Owo+ICsJdWludDMyX3QgKnNoYXJlZF9idWZmZXI7Cj4g Kwl1aW50MzJfdCAqc2hhcmVkX2J1ZmZlcjE7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNi dWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBleGVj X29iamVjdDJbM107Cj4gKwl1aW50MzJfdCBzaGFyZWRfYnVmX2hhbmRsZSwgc2hhcmVkX2J1Zl9o YW5kbGUxOwo+ICsJaW50IHJpbmcsIGxlbjsKPiArCXVpbnQ2NF90IHBpbm5pbmdfb2Zmc2V0ID0g MHgxMDAwOwo+ICsKPiArCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gKwlp Z3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEFMSUFTSU5HX1BQR1RUKSk7Cj4gKwo+ICsJ c2hhcmVkX2J1ZmZlciA9IGNyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUpOwo+ICsJc2hhcmVkX2J1 ZmZlcjEgPSBjcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpFICogMik7Cj4gKwo+ICsJLyogc2hhcmUg d2l0aCBHUFUgKi8KPiArCXNoYXJlZF9idWZfaGFuZGxlID0gaW5pdF91c2VycHRyKGZkLCAmdXNl cnB0ciwgc2hhcmVkX2J1ZmZlciwKPiArCQkJCQkgQk9fU0laRSk7Cj4gKwlzaGFyZWRfYnVmX2hh bmRsZTEgPSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRyMSwgc2hhcmVkX2J1ZmZlcjEsCj4gKwkJ CQkJICBCT19TSVpFICogMik7Cj4gKwo+ICsJLyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4g KwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZSwKPiAr CQkgICAgICAgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29mZnNldCk7Cj4gKwlzZXR1cF9l eGVjX29iaigmZXhlY19vYmplY3QyWzFdLCBzaGFyZWRfYnVmX2hhbmRsZTEsCj4gKwkJICAgICAg IEVYRUNfT0JKRUNUX1BJTk5FRCwgcGlubmluZ19vZmZzZXQpOwo+ICsKPiArCXJpbmcgPSBJOTE1 X0VYRUNfUkVOREVSOwo+ICsKPiArCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2Jq ZWN0MiwgcmluZywgMiwgbGVuKTsKPiArCj4gKwlyZXQgPSBkcm1Jb2N0bChmZCwgRFJNX0lPQ1RM X0k5MTVfR0VNX0VYRUNCVUZGRVIyLCAmZXhlY2J1Zik7Cj4gKwo+ICsJLyogZXhwZWN0IHRvIGZh aWwgKi8KPiArCWlndF9hc3NlcnRfbmVxKHJldCwgMCk7Cj4gKwlpZ3RfYXNzZXJ0KGVycm5vID09 IEVJTlZBTCk7Cj4gKwo+ICsJY2xvc2UoZmQpOwo+ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiAr CWZyZWUoc2hhcmVkX2J1ZmZlcjEpOwo+ICt9Cj4gKwo+ICsvKiBnZW1fc29mdHBpbl9zdHJlc3Nf dGVzdAo+ICsgKiBTdHJlc3MgdGVzdCB3aGljaCBjcmVhdGVzIDEwSyBidWZmZXJzIGFuZCBzaGFy ZXMgd2l0aCBHUFUKPiArICogQ3JlYXRlIDEwMEsgdWludDMyIGJ1ZmZlcnMgb2Ygc2l6ZSA0SyBl YWNoCj4gKyAqIFNoYXJlIHdpdGggR1BVIHVzaW5nIHVzZXJwdHIgaW9jdGwKPiArICogQ3JlYXRl IGJhdGNoIGJ1ZmZlciB0byB3cml0ZSBEQVRBIGluIGZpcnN0IGVsZW1lbnQgb2YgZWFjaCBidWZm ZXIKPiArICogUGluIGVhY2ggYnVmZmVyIHRvIHZhcnlpbmcgYWRkcmVzc2VzIHN0YXJ0aW5nIGZy b20gMHg4MDAwMDAwMDAwMDAgZ29pbmcgYmVsb3cKPiArICogRXhlY3V0ZSBCYXRjaCBCdWZmZXIg b24gQmxpdCByaW5nIFNUUkVTU19OVU1fTE9PUFMgdGltZXMKPiArICogVmFsaWRhdGUgZXZlcnkg YnVmZmVyIGhhcyBEQVRBIGluIGZpcnN0IGVsZW1lbnQKPiArICogUmluc2UgYW5kIFJlcGVhdCBv biBSZW5kZXIgcmluZwo+ICsqLwo+ICsjZGVmaW5lIFNUUkVTU19OVU1fQlVGRkVSUyAxMDAwMDAK PiArI2RlZmluZSBTVFJFU1NfTlVNX0xPT1BTIDEwMAo+ICsjZGVmaW5lIFNUUkVTU19TVE9SRV9D T01NQU5EUyA0ICogU1RSRVNTX05VTV9CVUZGRVJTCj4gKwo+ICtzdGF0aWMgdm9pZCBnZW1fc29m dHBpbl9zdHJlc3NfdGVzdCh2b2lkKQo+ICt7Cj4gKwlpOTE1X2dlbV91c2VycHRyIHVzZXJwdHI7 Cj4gKwlpbnQgZmQ7Cj4gKwl1aW50MzJfdCAqKnNoYXJlZF9idWZmZXI7Cj4gKwl1aW50MzJfdCAq c2hhcmVkX2hhbmRsZTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1 ZjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpleGVjX29iamVjdDI7Cj4g Kwl1aW50MzJfdCAqYmF0Y2hfYnVmZmVyOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmX2hhbmRsZTsK PiArCWludCByaW5nLCBsZW47Cj4gKwlpbnQgYnVmLCBsb29wOwo+ICsJdWludDY0X3QgcGlubmlu Z19vZmZzZXQgPSAweDgwMDAwMDAwMDAwMDsKPiArCj4gKwlmZCA9IGRybV9vcGVuX2RyaXZlcihE UklWRVJfSU5URUwpOwo+ICsJaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0KGZkLCBGVUxMXzQ4 X0JJVF9QUEdUVCkpOwo+ICsKPiArCj4gKwkvKiBBbGxvY2F0ZSBibG9icyBmb3IgYWxsIGRhdGEg c3RydWN0dXJlcyAqLwo+ICsJc2hhcmVkX2hhbmRsZSA9IGNhbGxvYyhTVFJFU1NfTlVNX0JVRkZF UlMsIHNpemVvZih1aW50MzJfdCkpOwo+ICsJc2hhcmVkX2J1ZmZlciA9IGNhbGxvYyhTVFJFU1Nf TlVNX0JVRkZFUlMsIHNpemVvZih1aW50MzJfdCAqKSk7Cj4gKwlleGVjX29iamVjdDIgPSBjYWxs b2MoU1RSRVNTX05VTV9CVUZGRVJTICsgMSwKPiArCQkJCXNpemVvZihzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNfb2JqZWN0MikpOwo+ICsJLyogNCBkd29yZHMgcGVyIGJ1ZmZlciArIDIgZm9yIHRo ZSBlbmQgb2YgYmF0Y2hidWZmZXIgKi8KPiArCWJhdGNoX2J1ZmZlciA9IGNhbGxvYyhTVFJFU1Nf U1RPUkVfQ09NTUFORFMgKyAyLCBzaXplb2YodWludDMyX3QpKTsKPiArCWJhdGNoX2J1Zl9oYW5k bGUgPSBnZW1fY3JlYXRlKGZkLCAoU1RSRVNTX1NUT1JFX0NPTU1BTkRTICsgMikqNCk7Cj4gKwo+ ICsJLyogY3JlYXRlIGNvbW1hbmQgYnVmZmVyIHdpdGggd3JpdGUgY29tbWFuZHMgKi8KPiArCWxl biA9IDA7Cj4gKwlmb3IoYnVmID0gMDsgYnVmIDwgU1RSRVNTX05VTV9CVUZGRVJTOyBidWYrKykg ewo+ICsJCXNoYXJlZF9idWZmZXJbYnVmXSA9IGNyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUpOwo+ ICsJCSpzaGFyZWRfYnVmZmVyW2J1Zl0gPSAweEZGRkZGRkZGOwo+ICsKPiArCQkvKiBzaGFyZSB3 aXRoIEdQVSAqLwo+ICsJCXNoYXJlZF9oYW5kbGVbYnVmXSA9IGluaXRfdXNlcnB0cihmZCwgJnVz ZXJwdHIsCj4gKwkJCQkJCSAgc2hhcmVkX2J1ZmZlcltidWZdLAo+ICsJCQkJCQkgIEJPX1NJWkUp Owo+ICsKPiArCQlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyW2J1Zl0sIHNoYXJlZF9oYW5k bGVbYnVmXSwKPiArCQkJICAgICAgIEVYRUNfT0JKRUNUX1BJTk5FRCwgcGlubmluZ19vZmZzZXQp Owo+ICsJCWxlbiArPSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciArIChsZW4v NCksCj4gKwkJCQkJICBwaW5uaW5nX29mZnNldCwgYnVmLAo+ICsJCQkJCSAgKGJ1ZiA9PSBTVFJF U1NfTlVNX0JVRkZFUlMtMSk/IFwKPiArCQkJCQkgIHRydWU6ZmFsc2UpOwo+ICsJCQo+ICsJCS8q IGRlY3JlbWVudGFsIDRLIGFsaWduZWQgYWRkcmVzcyAqLwo+ICsJCXBpbm5pbmdfb2Zmc2V0IC09 IEFMSUdOKEJPX1NJWkUsIDQwOTYpOwo+ICsJfQo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZf aGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gKwo+ICsJLyogc3VibWl0IGNvbW1hbmQg YnVmZmVyICovCj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyW1NUUkVTU19OVU1fQlVG RkVSU10sIGJhdGNoX2J1Zl9oYW5kbGUsCj4gKwkJICAgICAgIDAsIDApOwo+ICsKPiArCS8qIFdl IHdhbnQgdG8gcnVuIHRoaXMgb24gQkxUIHJpbmcgaWYgcG9zc2libGUgKi8KPiArCWlmIChIQVNf QkxUX1JJTkcoaW50ZWxfZ2V0X2RybV9kZXZpZChmZCkpKSB7Cj4gKwkJcmluZyA9IEk5MTVfRVhF Q19CTFQ7Cj4gKwo+ICsJCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0Miwg cmluZywKPiArCQkJCSBTVFJFU1NfTlVNX0JVRkZFUlMgKyAxLCBsZW4pOwo+ICsKPiArCQlmb3Ig KGxvb3AgPSAwOyBsb29wIDwgU1RSRVNTX05VTV9MT09QUzsgbG9vcCsrKSB7Cj4gKwkJCXN1Ym1p dF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJCQlmb3IoYnVm ID0gMDsgYnVmIDwgU1RSRVNTX05VTV9CVUZGRVJTOyBidWYrKykgewo+ICsJCQkJZ2VtX3VzZXJw dHJfc3luYyhmZCwgc2hhcmVkX2hhbmRsZVtidWZdKTsKCkkgcmVjb21tZW5kIGFkZGluZyB0aGUg b2Zmc2V0IGFzc2VydCBoZXJlIGFzIHdlbGwuCgo+ICsJCQkJaWd0X2ZhaWxfb25fZigqc2hhcmVk X2J1ZmZlcltidWZdICE9IGJ1ZiwgXAo+ICsJCQkJIk1pc21hdGNoIGluIGJ1ZmZlciAlZCwgaXRl cmF0aW9uICVkOiAweCUwOFhcbiIsIFwKPiArCQkJCWJ1ZiwgbG9vcCwgKnNoYXJlZF9idWZmZXJb YnVmXSk7Cj4gKwkJCX0KPiArCQl9Cj4gKwl9Cj4gKwo+ICsJLyogTm93IFJlbmRlciBSaW5nICov Cj4gKwlyaW5nID0gSTkxNV9FWEVDX1JFTkRFUjsKPiArCWV4ZWNidWYuZmxhZ3MgPSByaW5nOwo+ ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLAo+ICsJCQkg U1RSRVNTX05VTV9CVUZGRVJTICsgMSwgbGVuKTsKPiArCWZvciAobG9vcCA9IDA7IGxvb3AgPCBT VFJFU1NfTlVNX0xPT1BTOyBsb29wKyspIHsKPiArCQlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVj YnVmLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCQlmb3IoYnVmID0gMDsgYnVmIDwgU1RSRVNTX05V TV9CVUZGRVJTOyBidWYrKykgewo+ICsJCQlnZW1fdXNlcnB0cl9zeW5jKGZkLCBzaGFyZWRfaGFu ZGxlW2J1Zl0pOwoKQW5kIGhlcmUuCgo+ICsJCQlpZ3RfZmFpbF9vbl9mKCpzaGFyZWRfYnVmZmVy W2J1Zl0gIT0gYnVmLCBcCj4gKwkJCSJNaXNtYXRjaCBpbiBidWZmZXIgJWQsIFwKPiArCQkJaXRl cmF0aW9uICVkOiAweCUwOFhcbiIsIGJ1ZiwgbG9vcCwgKnNoYXJlZF9idWZmZXJbYnVmXSk7Cj4g KwkJfQo+ICsJfQo+ICsKPiArCWdlbV9jbG9zZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwlj bG9zZShmZCk7Cj4gKwo+ICsJZm9yKGxvb3AgPSAwOyBsb29wIDwgU1RSRVNTX05VTV9CVUZGRVJT OyBsb29wKyspIHsKPiArCQlmcmVlKHNoYXJlZF9idWZmZXJbbG9vcF0pOwo+ICsJfQo+ICsKPiAr CWZyZWUoc2hhcmVkX2hhbmRsZSk7Cj4gKwlmcmVlKHNoYXJlZF9idWZmZXIpOwo+ICsJZnJlZShl eGVjX29iamVjdDIpOwo+ICsJZnJlZShiYXRjaF9idWZmZXIpOwo+ICt9Cj4gKwo+ICsvKiBnZW1f d3JpdGVfbXVsdGlwYWdlX2J1ZmZlcgo+ICsgKiBDcmVhdGUgYSBidWZmZXIgc3Bhbm5pbmcgbXVs dGlwbGUgcGFnZXMsIGFuZCBzaGFyZSB3aXRoIEdQVS4KPiArICogV3JpdGUgdG8gZXZlcnkgZWxl bWVudCBvZiB0aGUgYnVmZmVyCj4gKyAqIGFuZCB2ZXJpZnkgY29ycmVjdCBjb250ZW50cy4KPiAr Cj4gKyAqIENyZWF0ZSA4SyBidWZmZXIKPiArICogU2hhcmUgd2l0aCBHUFUgdXNpbmcgdXNlcnB0 ciBpb2N0bAo+ICsgKiBDcmVhdGUgYmF0Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgaW4gYWxsIGVs ZW1lbnRzIG9mIGJ1ZmZlcgo+ICsgKiBFeGVjdXRlIEJhdGNoIEJ1ZmZlcgo+ICsgKiBWYWxpZGF0 ZSBldmVyeSBlbGVtZW50IGhhcyBEQVRBCj4gKyovCj4gKwo+ICsjZGVmaW5lIERXT1JEX1NJWkUg c2l6ZW9mKHVpbnQzMl90KQo+ICsjZGVmaW5lIEJCX1NJWkUgKChNVUxUSVBBR0VfQk9fU0laRSAv IERXT1JEX1NJWkUpICogU1RPUkVfQkFUQ0hfQlVGRkVSX1NJWkUpICsgMgo+ICsjZGVmaW5lIE5V TV9EV09SRFMgKE1VTFRJUEFHRV9CT19TSVpFL3NpemVvZih1aW50MzJfdCkpCj4gK3N0YXRpYyB2 b2lkIGdlbV93cml0ZV9tdWx0aXBhZ2VfYnVmZmVyX3Rlc3Qodm9pZCkKPiArewo+ICsJaTkxNV9n ZW1fdXNlcnB0ciB1c2VycHRyOwo+ICsJaW50IGZkOwo+ICsJdWludDMyX3QgKnNoYXJlZF9idWZm ZXI7Cj4gKwl1aW50MzJfdCBzaGFyZWRfaGFuZGxlOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9l eGVjYnVmZmVyMiBleGVjYnVmOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIg ZXhlY19vYmplY3QyWzJdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmZmVyW0JCX1NJWkVdOwo+ICsJ dWludDMyX3QgYmF0Y2hfYnVmX2hhbmRsZTsKPiArCWludCByaW5nLCBsZW4sIGo7Cj4gKwl1aW50 NjRfdCBwaW5uaW5nX29mZnNldD0weDEwMDA7Cj4gKwl1aW50NjRfdCB2YWRkcjsKPiArCj4gKwlm ZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwo+ICsJaWd0X3JlcXVpcmUodXNlc19m dWxsX3BwZ3R0KGZkLCBBTElBU0lOR19QUEdUVCkpOwo+ICsKPiArCWJhdGNoX2J1Zl9oYW5kbGUg PSBnZW1fY3JlYXRlKGZkLCBzaXplb2YoYmF0Y2hfYnVmZmVyKSk7Cj4gKwlzaGFyZWRfYnVmZmVy ID0gY3JlYXRlX21lbV9idWZmZXIoTVVMVElQQUdFX0JPX1NJWkUpOwo+ICsKPiArCWxlbiA9IDA7 Cj4gKwltZW1zZXQoYmF0Y2hfYnVmZmVyLCAwLCBzaXplb2YoYmF0Y2hfYnVmZmVyKSk7Cj4gKwlt ZW1zZXQoc2hhcmVkX2J1ZmZlciwgMCwgTVVMVElQQUdFX0JPX1NJWkUpOwo+ICsKPiArCS8qIHNo YXJlIHdpdGggR1BVICovCj4gKwlzaGFyZWRfaGFuZGxlID0gaW5pdF91c2VycHRyKGZkLCAmdXNl cnB0ciwgc2hhcmVkX2J1ZmZlciwKPiArCQkJCSAgICAgTVVMVElQQUdFX0JPX1NJWkUpOwo+ICsJ c2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2hhbmRsZSwKPiArCQkgICAg ICAgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29mZnNldCk7Cj4gKwo+ICsJLyogY3JlYXRl IGNvbW1hbmQgYnVmZmVyIHdpdGggd3JpdGUgY29tbWFuZHMgKi8KPiArCXZhZGRyID0gcGlubmlu Z19vZmZzZXQ7Cj4gKwlmb3Ioaj0wOyBqPCBOVU1fRFdPUkRTOyBqKyspIHsKPiArCQlsZW4gKz0g Z2VtX3N0b3JlX2RhdGFfc3ZtKGZkLCBiYXRjaF9idWZmZXIgKyAobGVuLzQpLCB2YWRkciwKPiAr CQkJCQkgIGosCj4gKwkJCQkJICAoaiA9PSBOVU1fRFdPUkRTIC0gMSkgPyB0cnVlOmZhbHNlKTsK PiArCQl2YWRkciArPSBzaXplb2Yoc2hhcmVkX2J1ZmZlclswXSk7ICAvKiA0IGJ5dGVzICovCj4g Kwl9Cj4gKwo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRjaF9idWZm ZXIsIGxlbik7Cj4gKwo+ICsJLyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4gKwlzZXR1cF9l eGVjX29iaigmZXhlY19vYmplY3QyWzFdLCBiYXRjaF9idWZfaGFuZGxlLCAwLCAwKTsKPiArCj4g KwlyaW5nID0gSTkxNV9FWEVDX1JFTkRFUjsKPiArCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYs IGV4ZWNfb2JqZWN0MiwgcmluZywgMiwgbGVuKTsKPiArCXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4 ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJZ2VtX3VzZXJwdHJfc3luYyhmZCwgc2hhcmVk X2hhbmRsZSk7Cj4gKwoKQW5kIG9mZnNldCBhc3NlcnQgaGVyZS4KCj4gKwlmb3IoaiA9IDA7IGog PCAoTVVMVElQQUdFX0JPX1NJWkUvc2l6ZW9mKHVpbnQzMl90KSk7IGorKykgewo+ICsJCWlndF9m YWlsX29uX2Yoc2hhcmVkX2J1ZmZlcltqXSAhPSBqLAo+ICsJCSJNaXNtYXRjaCBpbiBpbmRleCAl ZDogMHglMDhYXG4iLCBqLCBzaGFyZWRfYnVmZmVyW2pdKTsKPiArCX0KPiArCj4gKwlnZW1fY2xv c2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJY2xvc2UoZmQpOwo+ICsKPiArCWZyZWUoc2hh cmVkX2J1ZmZlcik7Cj4gK30KPiArCj4gKy8qIGdlbV9waW5faW52YWxpZF92bWFfdGVzdAo+ICsg KiBUaGlzIHRlc3Qgd2lsbCByZXF1ZXN0IHRvIHBpbiBhIHNoYXJlZCBidWZmZXIgdG8gYW4gaW52 YWxpZAo+ICsgKiBWTUEgID4gNDgtYml0IGFkZHJlc3MKPiArICogQ3JlYXRlIHNoYXJlZCBidWZm ZXIgb2Ygc2l6ZSA0Swo+ICsgKiBUcnkgYW5kIFBpbiBvYmplY3QgdG8gYWRkcmVzcyAweDkwMDAw MDAwMDAwMDAKPiArKi8KPiArc3RhdGljIHZvaWQgZ2VtX3Bpbl9pbnZhbGlkX3ZtYV90ZXN0KHZv aWQpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsKPiArCWludCBmZCwgcmV0Owo+ ICsJdWludDMyX3QgKnNoYXJlZF9idWZmZXI7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNi dWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBleGVj X29iamVjdDJbMV07Cj4gKwl1aW50MzJfdCBzaGFyZWRfYnVmX2hhbmRsZTsKPiArCWludCByaW5n Owo+ICsJdWludDY0X3QgaW52YWxpZF9hZGRyZXNzID0gMHg5MDAwMDAwMDAwMDAwOyAvKiA1MiBi aXQgYWRkcmVzcyAqLwoKT2sgaWYgeW91IHNheSBFWEVDX09CSkVDVF9QSU5ORUQgdHVybnMgb24g NDgtYml0IHN1cHBvcnQgYXV0b21hdGljYWxseSAKdGhlbiBJIHRoaW5rIHR3byB0aGluZ3MuCgpG aXJzdCB0aGF0IG5lZWRzIHRvIGJlIHRlc3RlZCAtIGl0IGxvb2tzIGxpa2UgZ2VtX3Bpbl9oaWdo X2FkZHJlc3NfdGVzdCAKY291bGQgYmUgZXh0ZW5kZWQgb3IgZHVwbGljYXRlZCB0byB0cnkgaXRz IHRoaW5nIDJuZCB0aW1lIHdpdGhvdXQgCnNldHRpbmcgdGhlIEVYRUNfT0JKRUNUX1NVUFBPUlRT XzQ4Ql9BRERSRVNTIGZsYWcuCgpTZWNvbmQsIHdlIG5lZWQgYSBuZWdhdGl2ZSB0ZXN0IGNhc2Ug b24gcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IAo0OC1iaXQgUFBHVFQuIFNvID4zMi1i aXQgJiYgPDQ4LWJpdCBhdHRlbXB0ZWQgcGlubmluZyBhbmQgYXBwcm9wcmlhdGUgCmlndF9yZXF1 aXJlKHVzZXNfZnVsbF9wcGd0dCguLi4pKS4gVGhpcyBpcyBsaWtlIGludmFsaWRfdm1hIHRlc3Qg YnV0IGZvciAKMzItYml0IHBwZ3R0IHBsYXRmb3Jtcy4KCkkgdGhpbmsgd2UgbmVlZCB0aGVzZSB0 d28gaW4gdGhlIGZpcnN0IGdvLCB3aGlsZSB0aGUgYWRkaXRpb25hbCBvdmVybGFwIApzY2VuYXJp b3MgY2FuIGNvbWUgbGF0ZXIuCgo+ICsKPiArCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9J TlRFTCk7Cj4gKwlpZ3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEZVTExfNDhfQklUX1BQ R1RUKSk7Cj4gKwo+ICsJc2hhcmVkX2J1ZmZlciA9IGNyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUp Owo+ICsJKnNoYXJlZF9idWZmZXIgPSAweEZGRkZGRkZGOwo+ICsJCj4gKwkvKiBzaGFyZSB3aXRo IEdQVSAqLwo+ICsJc2hhcmVkX2J1Zl9oYW5kbGUgPSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRy LCBzaGFyZWRfYnVmZmVyLCBCT19TSVpFKTsKPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVj dDJbMF0sIHNoYXJlZF9idWZfaGFuZGxlLAo+ICsJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQs IGludmFsaWRfYWRkcmVzcyk7Cj4gKwo+ICsJcmluZyA9IEk5MTVfRVhFQ19SRU5ERVI7Cj4gKwo+ ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLCAxLCAwKTsK PiArCj4gKwkvKiBFeHBlY3QgZXhlY2J1ZiB0byBmYWlsICovCj4gKwlyZXQgPSBkcm1Jb2N0bChm ZCwKPiArCQkgICAgICAgRFJNX0lPQ1RMX0k5MTVfR0VNX0VYRUNCVUZGRVIyLAo+ICsJCSAgICAg ICAmZXhlY2J1Zik7Cj4gKwo+ICsJaWd0X2Fzc2VydChlcnJubyA9PSBFTk9TUEMpOwoKSG0ga2Vy bmVsIGlzIHJldHVybmluZyBFTk9TUEMgZm9yIHVuc3VwcG9ydGVkIG9mZnNldHM/IFN0cmFuZ2Ug Y2hvaWNlLiBJIApoYXZlIHRvIGZpbmQgdGhlIGtlcm5lbCBwYXRjaCBpbiB0aGUgbWFpbGluZyBs aXN0IGFuZCBjb21tZW50IHRoZXJlLiA6KQoKPiArCWlndF9hc3NlcnRfbmVxKHJldCwgMCk7Cj4g KwkKPiArCWNsb3NlKGZkKTsKPiArCWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4gK30KPiArCj4gKwo+ ICsvKiBnZW1fcGluX2hpZ2hfYWRkcmVzc190ZXN0Cj4gKyAqIFRoaXMgdGVzdCB3aWxsIGNyZWF0 ZSBhIHNoYXJlZCBidWZmZXIsIGFuZCBjcmVhdGUgYSBjb21tYW5kCj4gKyAqIGZvciBHUFUgdG8g d3JpdGUgZGF0YSBpbiBpdC4gSXQgd2lsbCBhdHRlbXB0IHRvIHBpbiB0aGUgYnVmZmVyIGF0IGFk ZHJlc3MgPiAzMiBiaXRzLgo+ICsgKiBDUFUgd2lsbCByZWFkIGFuZCBtYWtlIHN1cmUgZXhwZWN0 ZWQgdmFsdWUgaXMgb2J0YWluZWQKPiArCj4gKyAqIE1hbGxvYyBhIDRLIGJ1ZmZlcgo+ICsgKiBT aGFyZSBidWZmZXIgd2l0aCB3aXRoIEdQVSBieSB1c2luZyB1c2VycHRyIGlvY3RsCj4gKyAqIENy ZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3JpdGUgREFUQSB0byBmaXJzdCBkd29yZCBvZiBidWZmZXIK PiArICogVXNlIHZpcnR1YWwgYWRkcmVzcyBvZiBidWZmZXIgYXMgMHgxMTAwMDAwMDAwICg+IDMy IGJpdCkKPiArICogU2V0IEVYRUNfT0JKRUNUX1BJTk5FRCBmbGFnIGluIGV4ZWMgb2JqZWN0Cj4g KyAqIFNldCAnb2Zmc2V0JyBpbiBleGVjIG9iamVjdCB0byBzaGFyZWQgYnVmZmVyIFZNQQo+ICsg KiBTdWJtaXQgZXhlY2J1ZmZlcgo+ICsgKiBWZXJpZnkgdmFsdWUgb2YgZmlyc3QgRFdPUkQgaW4g c2hhcmVkIGJ1ZmZlciBtYXRjaGVzIERBVEEKPiArKi8KPiArCj4gK3N0YXRpYyB2b2lkIGdlbV9w aW5faGlnaF9hZGRyZXNzX3Rlc3Qodm9pZCkKPiArewo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1c2Vy cHRyOwo+ICsJaW50IGZkOwo+ICsJdWludDMyX3QgKnNoYXJlZF9idWZmZXI7Cj4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbMl07Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZmZXJb U1RPUkVfQkFUQ0hfQlVGRkVSX1NJWkUgKyAyXTsKPiArCXVpbnQzMl90IGJhdGNoX2J1Zl9oYW5k bGUsIHNoYXJlZF9idWZfaGFuZGxlOwo+ICsJaW50IHJpbmcsIGxlbjsKPiArCWNvbnN0IHVpbnQz Ml90IGRhdGEgPSAweDEyMzQ1Njc4Owo+ICsJdWludDY0X3QgaGlnaF9hZGRyZXNzID0gMHgxMTEx RkZGRjAwMDsgLyogNDQgYml0IGFkZHJlc3MgKi8KPiArCj4gKwlmZCA9IGRybV9vcGVuX2RyaXZl cihEUklWRVJfSU5URUwpOwo+ICsJaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0KGZkLCBGVUxM XzQ4X0JJVF9QUEdUVCkpOwo+ICsKPiArCWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1fY3JlYXRlKGZk LCBCT19TSVpFKTsKPiArCj4gKwkvKiBjcmVhdGUgY3B1IGJ1ZmZlciwgc2V0IHRvIGFsbCAweEYn cyAqLwo+ICsJc2hhcmVkX2J1ZmZlciA9IGNyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUpOwo+ICsJ KnNoYXJlZF9idWZmZXIgPSAweEZGRkZGRkZGOwo+ICsKPiArCS8qIHNoYXJlIHdpdGggR1BVICov Cj4gKwlzaGFyZWRfYnVmX2hhbmRsZSA9IGluaXRfdXNlcnB0cihmZCwgJnVzZXJwdHIsIHNoYXJl ZF9idWZmZXIsIEJPX1NJWkUpOwo+ICsKPiArCS8qIGNyZWF0ZSBjb21tYW5kIGJ1ZmZlciB3aXRo IHdyaXRlIGNvbW1hbmQgKi8KPiArCWxlbiA9IGdlbV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0Y2hf YnVmZmVyLCBoaWdoX2FkZHJlc3MsIGRhdGEsIHRydWUpOwo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRj aF9idWZfaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gKwo+ICsJLyogc3VibWl0IGNv bW1hbmQgYnVmZmVyICovCj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFy ZWRfYnVmX2hhbmRsZSwKPiArCQkgICAgICAgRVhFQ19PQkpFQ1RfUElOTkVEIHwgRVhFQ19PQkpF Q1RfU1VQUE9SVFNfNDhCX0FERFJFU1MsIGhpZ2hfYWRkcmVzcyk7Cj4gKwlzZXR1cF9leGVjX29i aigmZXhlY19vYmplY3QyWzFdLCBiYXRjaF9idWZfaGFuZGxlLCAwLCAwKTsKPiArCj4gKwlyaW5n ID0gSTkxNV9FWEVDX1JFTkRFUjsKPiArCj4gKwlzZXR1cF9leGVjYnVmZmVyKCZleGVjYnVmLCBl eGVjX29iamVjdDIsIHJpbmcsIDIsIGxlbik7Cj4gKwlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVj YnVmLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWdlbV91c2VycHRyX3N5bmMoZmQsIHNoYXJlZF9i dWZfaGFuZGxlKTsKPiArCgpPZmZzZXQgYXNzZXJ0IHBsZWFzZS4KCj4gKwkvKiBjaGVjayBvbiBD UFUgdG8gc2VlIGlmIHZhbHVlIGNoYW5nZXMgKi8KPiArCWlndF9mYWlsX29uX2Yoc2hhcmVkX2J1 ZmZlclswXSAhPSBkYXRhLAo+ICsJCSJcbkNQVSByZWFkIGRvZXMgbm90IG1hdGNoIEdQVSB3cml0 ZSwgXAo+ICsJCWV4cGVjdGVkOiAweCV4LCBnb3Q6IDB4JXhcbiIsIGRhdGEsIHNoYXJlZF9idWZm ZXJbMF0pOwo+ICsKPiArCWdlbV9jbG9zZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwljbG9z ZShmZCk7Cj4gKwlmcmVlKHNoYXJlZF9idWZmZXIpOwo+ICt9Cj4gKwo+ICsvKiBnZW1fcGluX25l YXJfNDhCaXRfdGVzdAo+ICsgKiBUaGlzIHRlc3Qgd2lsbCBjcmVhdGUgYSBzaGFyZWQgYnVmZmVy LAo+ICsgKiBhbmQgY3JlYXRlIGEgY29tbWFuZCBmb3IgR1BVIHRvIHdyaXRlIGRhdGEgaW4gaXQu IEl0IHdpbGwgYXR0ZW1wdAo+ICsgKiB0byBwaW4gdGhlIGJ1ZmZlciBhdCBhZGRyZXNzID4gNDcg Yml0cyA8PSA0OC1iaXQuCj4gKyAqIENQVSB3aWxsIHJlYWQgYW5kIG1ha2Ugc3VyZSBleHBlY3Rl ZCB2YWx1ZSBpcyBvYnRhaW5lZAo+ICsKPiArICogTWFsbG9jIGEgNEsgYnVmZmVyCj4gKyAqIFNo YXJlIGJ1ZmZlciB3aXRoIHdpdGggR1BVIGJ5IHVzaW5nIHVzZXJwdHIgaW9jdGwKPiArICogQ3Jl YXRlIGJhdGNoIGJ1ZmZlciB0byB3cml0ZSBEQVRBIHRvIGZpcnN0IGR3b3JkIG9mIGJ1ZmZlcgo+ ICsgKiBVc2UgdmlydHVhbCBhZGRyZXNzIG9mIGJ1ZmZlciBhcyByYW5nZSBiZXR3ZWVuIDQ3LWJp dCBhbmQgNDgtYml0Cj4gKyAqIFNldCBFWEVDX09CSkVDVF9QSU5ORUQgZmxhZyBpbiBleGVjIG9i amVjdAo+ICsgKiBTZXQgJ29mZnNldCcgaW4gZXhlYyBvYmplY3QgdG8gc2hhcmVkIGJ1ZmZlciBW TUEKPiArICogU3VibWl0IGV4ZWNidWZmZXIKPiArICogVmVyaWZ5IHZhbHVlIG9mIGZpcnN0IERX T1JEIGluIHNoYXJlZCBidWZmZXIgbWF0Y2hlcyBEQVRBCj4gKyovCj4gKyNkZWZpbmUgQkVHSU5f SElHSF9BRERSRVNTIDB4N0ZGRkZGRkZGMDAwCj4gKyNkZWZpbmUgRU5EX0hJR0hfQUREUkVTUyAw eEZGRkZGRkZGQzAwMAo+ICsjZGVmaW5lIEFERFJFU1NfSU5DUkVNRU5UIDB4MjAwMDAwMDAwMAo+ ICtzdGF0aWMgdm9pZCBnZW1fcGluX25lYXJfNDhCaXRfdGVzdCh2b2lkKQo+ICt7Cj4gKwlpOTE1 X2dlbV91c2VycHRyIHVzZXJwdHI7Cj4gKwlpbnQgZmQ7Cj4gKwl1aW50MzJfdCAqc2hhcmVkX2J1 ZmZlcjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiArCXN0 cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGV4ZWNfb2JqZWN0MlsyXTsKPiArCXVpbnQz Ml90IGJhdGNoX2J1ZmZlcltCT19TSVpFXTsKPiArCXVpbnQzMl90IGJhdGNoX2J1Zl9oYW5kbGUs IHNoYXJlZF9idWZfaGFuZGxlOwo+ICsJaW50IHJpbmcsIGxlbjsKPiArCWNvbnN0IHVpbnQzMl90 IGRhdGEgPSAweDEyMzQ1Njc4Owo+ICsJdWludDY0X3QgaGlnaF9hZGRyZXNzOwo+ICsKPiArCWZk ID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gKwlpZ3RfcmVxdWlyZSh1c2VzX2Z1 bGxfcHBndHQoZmQsIEZVTExfNDhfQklUX1BQR1RUKSk7Cj4gKwo+ICsJYmF0Y2hfYnVmX2hhbmRs ZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsKPiArCS8qIGNyZWF0ZSBjcHUgYnVmZmVy LCBzZXQgdG8gYWxsIDB4RidzICovCj4gKwlzaGFyZWRfYnVmZmVyID0gY3JlYXRlX21lbV9idWZm ZXIoQk9fU0laRSk7Cj4gKwkqc2hhcmVkX2J1ZmZlciA9IDB4RkZGRkZGRkY7Cj4gKwo+ICsJLyog c2hhcmUgd2l0aCBHUFUgKi8KPiArCXNoYXJlZF9idWZfaGFuZGxlID0gaW5pdF91c2VycHRyKGZk LCAmdXNlcnB0ciwgc2hhcmVkX2J1ZmZlciwgQk9fU0laRSk7Cj4gKwo+ICsJZm9yIChoaWdoX2Fk ZHJlc3MgPSBCRUdJTl9ISUdIX0FERFJFU1M7IGhpZ2hfYWRkcmVzcyA8PSBFTkRfSElHSF9BRERS RVNTOwo+ICsJCQkJCQloaWdoX2FkZHJlc3MrPUFERFJFU1NfSU5DUkVNRU5UKSB7Cj4gKwkJLyog Y3JlYXRlIGNvbW1hbmQgYnVmZmVyIHdpdGggd3JpdGUgY29tbWFuZCAqLwo+ICsJCWxlbiA9IGdl bV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0Y2hfYnVmZmVyLCBoaWdoX2FkZHJlc3MsCj4gKwkJCQkJ ZGF0YSwgdHJ1ZSk7Cj4gKwkJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRj aF9idWZmZXIsIGxlbik7Cj4gKwkJLyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4gKwkJc2V0 dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2J1Zl9oYW5kbGUsCj4gKwkJCSAg ICAgICBFWEVDX09CSkVDVF9QSU5ORUQgfCBFWEVDX09CSkVDVF9TVVBQT1JUU180OEJfQUREUkVT UywKPiArCQkJICAgICAgIGhpZ2hfYWRkcmVzcyk7Cj4gKwkJc2V0dXBfZXhlY19vYmooJmV4ZWNf b2JqZWN0MlsxXSwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgMCk7Cj4gKwo+ICsJCXJpbmcgPSBJOTE1 X0VYRUNfUkVOREVSOwo+ICsJCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0 MiwgcmluZywgMiwgbGVuKTsKPiArCQlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVmLCBiYXRj aF9idWZfaGFuZGxlKTsKPiArCQlnZW1fdXNlcnB0cl9zeW5jKGZkLCBzaGFyZWRfYnVmX2hhbmRs ZSk7Cj4gKwoKT2Zmc2V0IGFzc2VydCBoZXJlIGFzIHdlbGwuCgo+ICsJCS8qIGNoZWNrIG9uIENQ VSB0byBzZWUgaWYgdmFsdWUgY2hhbmdlcyAqLwo+ICsJCWlndF9mYWlsX29uX2Yoc2hhcmVkX2J1 ZmZlclswXSAhPSBkYXRhLAo+ICsJCSJcbkNQVSByZWFkIGRvZXMgbm90IG1hdGNoIEdQVSB3cml0 ZSwgZXhwZWN0ZWQ6IDB4JXgsIFwKPiArCQlnb3Q6IDB4JXhcbiwgMHglIlBSSXg2NCIiLCBkYXRh LCBzaGFyZWRfYnVmZmVyWzBdLCBoaWdoX2FkZHJlc3MpOwo+ICsJfQo+ICsKPiArCWdlbV9jbG9z ZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwljbG9zZShmZCk7Cj4gKwlmcmVlKHNoYXJlZF9i dWZmZXIpOwo+ICt9Cj4gKwo+ICsKPiAraW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkK PiArewo+ICsJaWd0X3N1YnRlc3RfaW5pdChhcmdjLCBhcmd2KTsKPiArCWlndF9za2lwX29uX3Np bXVsYXRpb24oKTsKPiArCj4gKwkvKiBBbGwgdGVzdHMgbmVlZCBQUEdUVCBzdXBwb3J0ICovCj4g KwlpZ3Rfc3VidGVzdCgiZ2VtX3Bpbl91c2VycHRyIikgewo+ICsJCWdlbV9waW5fdXNlcnB0cl90 ZXN0KCk7Cj4gKwl9Cj4gKwlpZ3Rfc3VidGVzdCgiZ2VtX3Bpbl9ibyIpIHsKPiArCQlnZW1fcGlu X2JvX3Rlc3QoKTsKPiArCX0KPiArCWlndF9zdWJ0ZXN0KCJnZW1fbXVsdGlwbGVfcHJvY2VzcyIp IHsKPiArCQlnZW1fbXVsdGlwbGVfcHJvY2Vzc190ZXN0KCk7Cj4gKwl9Cj4gKwlpZ3Rfc3VidGVz dCgiZ2VtX3JlcGluIikgewo+ICsJCWdlbV9yZXBpbl90ZXN0KCk7Cj4gKwl9Cj4gKwlpZ3Rfc3Vi dGVzdCgiZ2VtX3Bpbl9vdmVybGFwIikgewo+ICsJCWdlbV9waW5fb3ZlcmxhcF90ZXN0KCk7Cj4g Kwl9Cj4gKwlpZ3Rfc3VidGVzdCgiZ2VtX3dyaXRlX211bHRpcGFnZV9idWZmZXIiKSB7Cj4gKwkJ Z2VtX3dyaXRlX211bHRpcGFnZV9idWZmZXJfdGVzdCgpOwo+ICsJfQo+ICsKPiArCS8qIEZvbGxv d2luZyB0ZXN0cyBuZWVkIDQ4IEJpdCBQUEdUVCBzdXBwb3J0ICovCj4gKwlpZ3Rfc3VidGVzdCgi Z2VtX3Bpbl9pbnZhbGlkX3ZtYSIpIHsKPiArCQlnZW1fcGluX2ludmFsaWRfdm1hX3Rlc3QoKTsK PiArCX0KPiArCWlndF9zdWJ0ZXN0KCJnZW1fc29mdHBpbl9zdHJlc3MiKSB7Cj4gKwkJZ2VtX3Nv ZnRwaW5fc3RyZXNzX3Rlc3QoKTsKPiArCX0KPiArCWlndF9zdWJ0ZXN0KCJnZW1fcGluX2hpZ2hf YWRkcmVzcyIpIHsKPiArCQlnZW1fcGluX2hpZ2hfYWRkcmVzc190ZXN0KCk7Cj4gKwl9Cj4gKwlp Z3Rfc3VidGVzdCgiZ2VtX3Bpbl9uZWFyXzQ4Qml0Iikgewo+ICsJCWdlbV9waW5fbmVhcl80OEJp dF90ZXN0KCk7Cj4gKwl9Cj4gKwo+ICsJaWd0X2V4aXQoKTsKPiArfQo+CgpSZWdhcmRzLAoKVHZy dGtvCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==