From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: Re: [PATCH v3 4/7] drm/i915/perf: Add OA unit support for Gen 8+ Date: Thu, 6 Apr 2017 17:56:22 +0100 Message-ID: References: <20170405162320.30094-1-robert@sixbynine.org> <20170405162320.30094-5-robert@sixbynine.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 590896E9D4 for ; Thu, 6 Apr 2017 16:56:25 +0000 (UTC) In-Reply-To: <20170405162320.30094-5-robert@sixbynine.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Robert Bragg , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMDUvMDQvMTcgMTc6MjMsIFJvYmVydCBCcmFnZyB3cm90ZToKPiBFbmFibGVzIGFjY2VzcyB0 byBPQSB1bml0IG1ldHJpY3MgZm9yIEJEVywgQ0hWLCBTS0wgYW5kIEJYVCB3aGljaCBhbGwKPiBz aGFyZSAobW9yZS1vci1sZXNzKSB0aGUgc2FtZSBPQSB1bml0IGRlc2lnbi4KPgo+IE9mIHBhcnRp Y3VsYXIgbm90ZSBpbiBjb21wYXJpc29uIHRvIEhhc3dlbGw6IHNvbWUgT0EgdW5pdCBIVyBjb25m aWcKPiBzdGF0ZSBoYXMgYmVjb21lIHBlci1jb250ZXh0IHN0YXRlIGFuZCBhcyBhIGNvbnNlcXVl bmNlIGl0IGlzIHNvbWV3aGF0Cj4gbW9yZSBjb21wbGljYXRlZCB0byBtYW5hZ2Ugc3luY2hyb25v dXMgc3RhdGUgY2hhbmdlcyBmcm9tIHRoZSBjcHUgd2hpbGUKPiB0aGVyZSdzIG5vIGd1YXJhbnRl ZSBvZiB3aGF0IGNvbnRleHQgKGlmIGFueSkgaXMgY3VycmVudGx5IGFjdGl2ZWx5Cj4gcnVubmlu ZyBvbiB0aGUgZ3B1Lgo+Cj4gVGhlIHBlcmlvZGljIHNhbXBsaW5nIGZyZXF1ZW5jeSB3aGljaCBj YW4gYmUgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IKPiBzeXN0ZW0td2lkZSBhbmFseXNpcyAoYXMg b3Bwb3NlZCB0byBjb21tYW5kIHN0cmVhbSBzeW5jaHJvbmlzZWQKPiBNSV9SRVBPUlRfUEVSRl9D T1VOVCBjb21tYW5kcykgaXMgcGVyaGFwcyB0aGUgbW9zdCBzdXJwcmlzaW5nIHN0YXRlIHRvCj4g aGF2ZSBiZWNvbWUgcGVyLWNvbnRleHQgc2F2ZSBhbmQgcmVzdG9yZWQgKHdoaWxlIHRoZSBPQUJV RkZFUgo+IGRlc3RpbmF0aW9uIGlzIHN0aWxsIGEgc2hhcmVkLCBzeXN0ZW0td2lkZSByZXNvdXJj ZSkuCj4KPiBUaGlzIHN1cHBvcnQgZm9yIGdlbjgrIHRha2VzIGNhcmUgdG8gY29uc2lkZXIgYSBu dW1iZXIgb2YgdGltaW5nCj4gY2hhbGxlbmdlcyBpbnZvbHZlZCBpbiBzeW5jaHJvbm91c2x5IHVw ZGF0aW5nIHBlci1jb250ZXh0IHN0YXRlCj4gcHJpbWFyaWx5IGJ5IHByb2dyYW1taW5nIGFsbCBj b25maWcgc3RhdGUgZnJvbSB0aGUgY3B1IGFuZCB1cGRhdGluZyBhbGwKPiBjdXJyZW50IGFuZCBz YXZlZCBjb250ZXh0cyBzeW5jaHJvbm91c2x5IHdoaWxlIHRoZSBPQSB1bml0IGlzIHN0aWxsCj4g ZGlzYWJsZWQuCj4KPiBUaGUgZHJpdmVyIGludGVudGlvbmFsbHkgYXZvaWRzIGRlcGVuZGluZyBv biBjb21tYW5kIHN0cmVhbWVyCj4gcHJvZ3JhbW1pbmcgdG8gdXBkYXRlIE9BIHN0YXRlIGNvbnNp ZGVyaW5nIHRoZSBsYWNrIG9mIHN5bmNocm9uaXphdGlvbgo+IGJldHdlZW4gdGhlIGF1dG9tYXRp YyBsb2FkaW5nIG9mIE9BQ1RYQ09OVFJPTCBzdGF0ZSAodGhhdCBpbmNsdWRlcyB0aGUKPiBwZXJp b2RpYyBzYW1wbGluZyBzdGF0ZSBhbmQgZW5hYmxlIHN0YXRlKSBvbiBjb250ZXh0IHJlc3RvcmUg YW5kIHRoZQo+IHBhcnNpbmcgb2YgYW55IGdlbmVyYWwgcHVycG9zZSBCQiB0aGUgZHJpdmVyIGNh biBjb250cm9sLiBJLmUuIHRoaXMKPiBpbXBsZW1lbnRhdGlvbiBpcyBjYXJlZnVsIHRvIGF2b2lk IHRoZSBwb3NzaWJpbGl0eSBvZiBhIGNvbnRleHQgcmVzdG9yZQo+IHRlbXBvcmFyaWx5IGVuYWJs aW5nIGFueSBvdXQtb2YtZGF0ZSBwZXJpb2RpYyBzYW1wbGluZyBzdGF0ZS4gSW4KPiBhZGRpdGlv biB0byB0aGUgcmlzayBvZiB0cmFuc2llbnRseS1vdXQtb2YtZGF0ZSBzdGF0ZSBiZWluZyBsb2Fk ZWQKPiBhdXRvbWF0aWNhbGx5OyB0aGVyZSBhcmUgYWxzbyBpbnRlcm5hbCBIVyBsYXRlbmNpZXMg aW52b2x2ZWQgaW4gdGhlCj4gbG9hZGluZyBvZiBNVVggY29uZmlndXJhdGlvbnMgd2hpY2ggd291 bGQgYmUgZGlmZmljdWx0IHRvIGFjY291bnQgZm9yCj4gZnJvbSB0aGUgY29tbWFuZCBzdHJlYW1l ciAoYW5kIHdlIG9ubHkgd2FudCB0byBlbmFibGUgdGhlIHVuaXQgd2hlbiBvbmNlCj4gdGhlIE1V WCBjb25maWd1cmF0aW9uIGlzIGNvbXBsZXRlKS4KPgo+IFNpbmNlIHRoZSBHZW44KyBPQSB1bml0 IGRlc2lnbiBubyBsb25nZXIgc3VwcG9ydHMgY2xvY2sgZ2F0aW5nIHRoZSB1bml0Cj4gb2ZmIGZv ciBhIHNpbmdsZSBnaXZlbiBjb250ZXh0ICh3aGljaCBlZmZlY3RpdmVseSBzdG9wcGVkIGFueSBw cm9ncmVzcwo+IG9mIGNvdW50ZXJzIHdoaWxlIGFueSBvdGhlciBjb250ZXh0IHdhcyBydW5uaW5n KSBhbmQgaW5zdGVhZCBzdXBwb3J0cwo+IHRhZ2dpbmcgT0EgcmVwb3J0cyB3aXRoIGEgY29udGV4 dCBJRCBmb3IgZmlsdGVyaW5nIG9uIHRoZSBDUFUsIGl0IG1lYW5zCj4gd2UgY2FuIG5vIGxvbmdl ciBoaWRlIHRoZSBzeXN0ZW0td2lkZSBwcm9ncmVzcyBvZiBjb3VudGVycyBmcm9tIGEKPiBub24t cHJpdmlsZWdlZCBhcHBsaWNhdGlvbiBvbmx5IGludGVyZXN0ZWQgaW4gbWV0cmljcyBmb3IgaXRz IG93bgo+IGNvbnRleHQuIEFsdGhvdWdoIHdlIGNvdWxkIHRoZW9yZXRpY2FsbHkgdHJ5IGFuZCBz dWJ0cmFjdCB0aGUgcHJvZ3Jlc3MKPiBvZiBvdGhlciBjb250ZXh0cyBiZWZvcmUgZm9yd2FyZGlu ZyByZXBvcnRzIHZpYSByZWFkKCkgd2UgYXJlbid0IGluIGEKPiBwb3NpdGlvbiB0byBmaWx0ZXIg cmVwb3J0cyBjYXB0dXJlZCB2aWEgTUlfUkVQT1JUX1BFUkZfQ09VTlQgY29tbWFuZHMuCj4gQXMg YSByZXN1bHQsIGZvciBHZW44Kywgd2UgYWx3YXlzIHJlcXVpcmUgdGhlCj4gZGV2Lmk5MTUucGVy Zl9zdHJlYW1fcGFyYW5vaWQgdG8gYmUgdW5zZXQgZm9yIGFueSBhY2Nlc3MgdG8gT0EgbWV0cmlj cwo+IGlmIG5vdCByb290Lgo+Cj4gU2lnbmVkLW9mZi1ieTogUm9iZXJ0IEJyYWdnIDxyb2JlcnRA c2l4YnluaW5lLm9yZz4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2Lmgg ICAgICAgICB8ICA0NSArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4 dC5oIHwgICAxICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jICAgICAgICB8 IDkzOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQo+ICAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9yZWcuaCAgICAgICAgIHwgIDIyICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2xyYy5jICAgICAgICB8ICAgNSArCj4gICBpbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJt LmggICAgICAgICAgICAgfCAgMTkgKy0KPiAgIDYgZmlsZXMgY2hhbmdlZCwgOTM3IGluc2VydGlv bnMoKyksIDkzIGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXgg OWMzN2I3M2FjN2FjLi4zYTIyYjZmZDBlZTYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgK PiBAQCAtMjA2Nyw5ICsyMDY3LDE3IEBAIHN0cnVjdCBpOTE1X29hX29wcyB7Cj4gICAJdm9pZCAo KmluaXRfb2FfYnVmZmVyKShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICAg Cj4gICAJLyoqCj4gLQkgKiBAZW5hYmxlX21ldHJpY19zZXQ6IEFwcGxpZXMgYW55IE1VWCBjb25m aWd1cmF0aW9uIHRvIHNldCB1cCB0aGUKPiAtCSAqIEJvb2xlYW4gYW5kIEN1c3RvbSAoQi9DKSBj b3VudGVycyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBjb3VudGVyCj4gLQkgKiByZXBvcnRzIGJlaW5n IHNhbXBsZWQuIE1heSBhcHBseSBzeXN0ZW0gY29uc3RyYWludHMgc3VjaCBhcwo+ICsJICogQHNl bGVjdF9tZXRyaWNfc2V0OiBUaGUgYXV0byBnZW5lcmF0ZWQgY29kZSB0aGF0IGNoZWNrcyB3aGV0 aGVyIGEKPiArCSAqIHJlcXVlc3RlZCBPQSBjb25maWcgaXMgYXBwbGljYWJsZSB0byB0aGUgc3lz dGVtIGFuZCBpZiBzbyBzZXRzIHVwCj4gKwkgKiB0aGUgbXV4LCBvYSBhbmQgZmxleCBldSByZWdp c3RlciBjb25maWcgcG9pbnRlcnMgYWNjb3JkaW5nIHRvIHRoZQo+ICsJICogY3VycmVudCBkZXZf cHJpdi0+cGVyZi5vYS5tZXRyaWNzX3NldC4KPiArCSAqLwo+ICsJaW50ICgqc2VsZWN0X21ldHJp Y19zZXQpKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gKwo+ICsJLyoqCj4g KwkgKiBAZW5hYmxlX21ldHJpY19zZXQ6IFNlbGVjdHMgYW5kIGFwcGxpZXMgYW55IE1VWCBjb25m aWd1cmF0aW9uIHRvIHNldAo+ICsJICogdXAgdGhlIEJvb2xlYW4gYW5kIEN1c3RvbSAoQi9DKSBj b3VudGVycyB0aGF0IGFyZSBwYXJ0IG9mIHRoZQo+ICsJICogY291bnRlciByZXBvcnRzIGJlaW5n IHNhbXBsZWQuIE1heSBhcHBseSBzeXN0ZW0gY29uc3RyYWludHMgc3VjaCBhcwo+ICAgCSAqIGRp c2FibGluZyBFVSBjbG9jayBnYXRpbmcgYXMgcmVxdWlyZWQuCj4gICAJICovCj4gICAJaW50ICgq ZW5hYmxlX21ldHJpY19zZXQpKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4g QEAgLTIxMDAsMjAgKzIxMDgsMTMgQEAgc3RydWN0IGk5MTVfb2Ffb3BzIHsKPiAgIAkJICAgIHNp emVfdCAqb2Zmc2V0KTsKPiAgIAo+ICAgCS8qKgo+IC0JICogQG9hX2J1ZmZlcl9jaGVjazogQ2hl Y2sgZm9yIE9BIGJ1ZmZlciBkYXRhICsgdXBkYXRlIHRhaWwKPiAtCSAqCj4gLQkgKiBUaGlzIGlz IGVpdGhlciBjYWxsZWQgdmlhIGZvcHMgb3IgdGhlIHBvbGwgY2hlY2sgaHJ0aW1lciAoYXRvbWlj Cj4gLQkgKiBjdHgpIHdpdGhvdXQgYW55IGxvY2tzIHRha2VuLgo+ICsJICogQG9hX2h3X3RhaWxf cmVhZDogcmVhZCB0aGUgT0EgdGFpbCBwb2ludGVyIHJlZ2lzdGVyCj4gICAJICoKPiAtCSAqIEl0 J3Mgc2FmZSB0byByZWFkIE9BIGNvbmZpZyBzdGF0ZSBoZXJlIHVubG9ja2VkLCBhc3N1bWluZyB0 aGF0IHRoaXMKPiAtCSAqIGlzIG9ubHkgY2FsbGVkIHdoaWxlIHRoZSBzdHJlYW0gaXMgZW5hYmxl ZCwgd2hpbGUgdGhlIGdsb2JhbCBPQQo+IC0JICogY29uZmlndXJhdGlvbiBjYW4ndCBiZSBtb2Rp ZmllZC4KPiAtCSAqCj4gLQkgKiBFZmZpY2llbmN5IGlzIG1vcmUgaW1wb3J0YW50IHRoYW4gYXZv aWRpbmcgc29tZSBmYWxzZSBwb3NpdGl2ZXMKPiAtCSAqIGhlcmUsIHdoaWNoIHdpbGwgYmUgaGFu ZGxlZCBncmFjZWZ1bGx5IC0gbGlrZWx5IHJlc3VsdGluZyBpbiBhbgo+IC0JICogJUVBR0FJTiBl cnJvciBmb3IgdXNlcnNwYWNlLgo+ICsJICogSW4gcGFydGljdWxhciB0aGlzIGVuYWJsZXMgdXMg dG8gc2hhcmUgYWxsIHRoZSBmaWRkbHkgY29kZSBmb3IKPiArCSAqIGhhbmRsaW5nIHRoZSBPQSB1 bml0IHRhaWwgcG9pbnRlciByYWNlIHRoYXQgYWZmZWN0cyBtdWx0aXBsZQo+ICsJICogZ2VuZXJh dGlvbnMuCj4gICAJICovCj4gLQlib29sICgqb2FfYnVmZmVyX2NoZWNrKShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICsJdTMyICgqb2FfaHdfdGFpbF9yZWFkKShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICAgfTsKPiAgIAo+ICAgc3RydWN0IGludGVs X2NkY2xrX3N0YXRlIHsKPiBAQCAtMjQ3NSw2ICsyNDc2LDcgQEAgc3RydWN0IGRybV9pOTE1X3By aXZhdGUgewo+ICAgCQkJc3RydWN0IHsKPiAgIAkJCQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiAg IAkJCQl1OCAqdmFkZHI7Cj4gKwkJCQl1MzIgbGFzdF9jdHhfaWQ7Cj4gICAJCQkJaW50IGZvcm1h dDsKPiAgIAkJCQlpbnQgZm9ybWF0X3NpemU7Cj4gICAKPiBAQCAtMjU0NCw2ICsyNTQ2LDE0IEBA IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKPiAgIAkJCX0gb2FfYnVmZmVyOwo+ICAgCj4gICAJ CQl1MzIgZ2VuN19sYXRjaGVkX29hc3RhdHVzMTsKPiArCQkJdTMyIGN0eF9vYWN0eGN0cmxfb2Zm c2V0Owo+ICsJCQl1MzIgY3R4X2ZsZXhldTBfb2Zmc2V0Owo+ICsKPiArCQkJLyogVGhlIFJQVF9J RC9yZWFzb24gZmllbGQgZm9yIEdlbjgrIGluY2x1ZGVzIGEgYml0Cj4gKwkJCSAqIHRvIGRldGVy bWluZSBpZiB0aGUgQ1RYIElEIGluIHRoZSByZXBvcnQgaXMgdmFsaWQKPiArCQkJICogYnV0IHRo ZSBzcGVjaWZpYyBiaXQgZGlmZmVycyBiZXR3ZWVuIEdlbiA4IGFuZCA5Cj4gKwkJCSAqLwo+ICsJ CQl1MzIgZ2VuOF92YWxpZF9jdHhfYml0Owo+ICAgCj4gICAJCQlzdHJ1Y3QgaTkxNV9vYV9vcHMg b3BzOwo+ICAgCQkJY29uc3Qgc3RydWN0IGk5MTVfb2FfZm9ybWF0ICpvYV9mb3JtYXRzOwo+IEBA IC0yODU0LDYgKzI4NjQsOCBAQCBpbnRlbF9pbmZvKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKPiAgICNkZWZpbmUgSVNfS0JMX1VMWChkZXZfcHJpdikJKElOVEVMX0RF VklEKGRldl9wcml2KSA9PSAweDU5MEUgfHwgXAo+ICAgCQkJCSBJTlRFTF9ERVZJRChkZXZfcHJp dikgPT0gMHg1OTE1IHx8IFwKPiAgIAkJCQkgSU5URUxfREVWSUQoZGV2X3ByaXYpID09IDB4NTkx RSkKPiArI2RlZmluZSBJU19TS0xfR1QyKGRldl9wcml2KQkoSVNfU0tZTEFLRShkZXZfcHJpdikg JiYgXAo+ICsJCQkJIChJTlRFTF9ERVZJRChkZXZfcHJpdikgJiAweDAwRjApID09IDB4MDAxMCkK PiAgICNkZWZpbmUgSVNfU0tMX0dUMyhkZXZfcHJpdikJKElTX1NLWUxBS0UoZGV2X3ByaXYpICYm IFwKPiAgIAkJCQkgKElOVEVMX0RFVklEKGRldl9wcml2KSAmIDB4MDBGMCkgPT0gMHgwMDIwKQo+ ICAgI2RlZmluZSBJU19TS0xfR1Q0KGRldl9wcml2KQkoSVNfU0tZTEFLRShkZXZfcHJpdikgJiYg XAo+IEBAIC0zNjA1LDYgKzM2MTcsOSBAQCBpOTE1X2dlbV9jb250ZXh0X2xvb2t1cF90aW1lbGlu ZShzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+ICAgCj4gICBpbnQgaTkxNV9wZXJmX29w ZW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgIAkJCSBzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGUpOwo+ICt2b2lkIGk5MTVfb2FfdXBkYXRlX3JlZ19zdGF0ZShzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkJCSAgICAgIHN0cnVjdCBpOTE1X2dlbV9j b250ZXh0ICpjdHgsCj4gKwkJCSAgICAgIHVpbnQzMl90ICpyZWdfc3RhdGUpOwo+ICAgCj4gICAv KiBpOTE1X2dlbV9ldmljdC5jICovCj4gICBpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX2V2aWN0 X3NvbWV0aGluZyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5oIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fY29udGV4dC5oCj4gaW5kZXggNGFmMmFiOTQ1NThiLi4zZjRjZTczYmVh NDMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5o Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5oCj4gQEAgLTE1 MSw2ICsxNTEsNyBAQCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCB7Cj4gICAJCXU2NCBscmNfZGVz YzsKPiAgIAkJaW50IHBpbl9jb3VudDsKPiAgIAkJYm9vbCBpbml0aWFsaXNlZDsKPiArCQlhdG9t aWNfdCBvYV9zdGF0ZV9kaXJ0eTsKPiAgIAl9IGVuZ2luZVtJOTE1X05VTV9FTkdJTkVTXTsKPiAg IAo+ICAgCS8qKiByaW5nX3NpemU6IHNpemUgZm9yIGFsbG9jYXRpbmcgdGhlIHBlci1lbmdpbmUg cmluZyBidWZmZXIgKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9w ZXJmLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYwo+IGluZGV4IDMyNzdhNTJj ZTk4ZS4uOThlYjY0MTViNjNhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcGVyZi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMKPiBAQCAt MTk2LDYgKzE5NiwxMiBAQAo+ICAgCj4gICAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiAgICNpbmNs dWRlICJpOTE1X29hX2hzdy5oIgo+ICsjaW5jbHVkZSAiaTkxNV9vYV9iZHcuaCIKPiArI2luY2x1 ZGUgImk5MTVfb2FfY2h2LmgiCj4gKyNpbmNsdWRlICJpOTE1X29hX3NrbGd0Mi5oIgo+ICsjaW5j bHVkZSAiaTkxNV9vYV9za2xndDMuaCIKPiArI2luY2x1ZGUgImk5MTVfb2Ffc2tsZ3Q0LmgiCj4g KyNpbmNsdWRlICJpOTE1X29hX2J4dC5oIgo+ICAgCj4gICAvKiBIVyByZXF1aXJlcyB0aGlzIHRv IGJlIGEgcG93ZXIgb2YgdHdvLCBiZXR3ZWVuIDEyOGsgYW5kIDE2TSwgdGhvdWdoIGRyaXZlcgo+ ICAgICogaXMgY3VycmVudGx5IGdlbmVyYWxseSBkZXNpZ25lZCBhc3N1bWluZyB0aGUgbGFyZ2Vz dCAxNk0gc2l6ZSBpcyB1c2VkIHN1Y2gKPiBAQCAtMjE1LDcgKzIyMSw3IEBACj4gICAgKgo+ICAg ICogQWx0aG91Z2ggdGhpcyBjYW4gYmUgb2JzZXJ2ZWQgZXhwbGljaXRseSB3aGlsZSBjb3B5aW5n IHJlcG9ydHMgdG8gdXNlcnNwYWNlCj4gICAgKiBieSBjaGVja2luZyBmb3IgYSB6ZXJvZWQgcmVw b3J0LWlkIGZpZWxkIGluIHRhaWwgcmVwb3J0cywgd2Ugd2FudCB0byBhY2NvdW50Cj4gLSAqIGZv ciB0aGlzIGVhcmxpZXIsIGFzIHBhcnQgb2YgdGhlIF9vYV9idWZmZXJfY2hlY2sgdG8gYXZvaWQg bG90cyBvZiByZWR1bmRhbnQKPiArICogZm9yIHRoaXMgZWFybGllciwgYXMgcGFydCBvZiB0aGUg b2FfYnVmZmVyX2NoZWNrIHRvIGF2b2lkIGxvdHMgb2YgcmVkdW5kYW50Cj4gICAgKiByZWFkKCkg YXR0ZW1wdHMuCj4gICAgKgo+ICAgICogSW4gZWZmZWN0IHdlIGRlZmluZSBhIHRhaWwgcG9pbnRl ciBmb3IgcmVhZGluZyB0aGF0IGxhZ3MgdGhlIHJlYWwgdGFpbAo+IEBAIC0yMzcsNyArMjQzLDcg QEAKPiAgICAqIGluZGljYXRlcyB0aGF0IGFuIHVwZGF0ZWQgdGFpbCBwb2ludGVyIGlzIG5lZWRl ZC4KPiAgICAqCj4gICAgKiBNb3N0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciB0 aGlzIHdvcmthcm91bmQgYXJlIGluCj4gLSAqIGdlbjdfb2FfYnVmZmVyX2NoZWNrX3VubG9ja2Vk KCkgYW5kIGdlbjdfYXBwYW5kX29hX3JlcG9ydHMoKQo+ICsgKiBvYV9idWZmZXJfY2hlY2tfdW5s b2NrZWQoKSBhbmQgX2FwcGVuZF9vYV9yZXBvcnRzKCkKPiAgICAqCj4gICAgKiBOb3RlIGZvciBw b3N0ZXJpdHk6IHByZXZpb3VzbHkgdGhlIGRyaXZlciB1c2VkIHRvIGRlZmluZSBhbiBlZmZlY3Rp dmUgdGFpbAo+ICAgICogcG9pbnRlciB0aGF0IGxhZ2dlZCB0aGUgcmVhbCBwb2ludGVyIGJ5IGEg J3RhaWwgbWFyZ2luJyBtZWFzdXJlZCBpbiBieXRlcwo+IEBAIC0yNzIsNiArMjc4LDEzIEBAIHN0 YXRpYyB1MzIgaTkxNV9wZXJmX3N0cmVhbV9wYXJhbm9pZCA9IHRydWU7Cj4gICAKPiAgICNkZWZp bmUgSU5WQUxJRF9DVFhfSUQgMHhmZmZmZmZmZgo+ICAgCj4gKy8qIE9uIEdlbjgrIGF1dG9tYXRp Y2FsbHkgdHJpZ2dlcmVkIE9BIHJlcG9ydHMgaW5jbHVkZSBhICdyZWFzb24nIGZpZWxkLi4uICov Cj4gKyNkZWZpbmUgT0FSRVBPUlRfUkVBU09OX01BU0sgICAgICAgICAgIDB4M2YKPiArI2RlZmlu ZSBPQVJFUE9SVF9SRUFTT05fU0hJRlQgICAgICAgICAgMTkKPiArI2RlZmluZSBPQVJFUE9SVF9S RUFTT05fVElNRVIgICAgICAgICAgKDE8PDApCj4gKyNkZWZpbmUgT0FSRVBPUlRfUkVBU09OX0NU WF9TV0lUQ0ggICAgICgxPDwzKQo+ICsjZGVmaW5lIE9BUkVQT1JUX1JFQVNPTl9DTEtfUkFUSU8g ICAgICAoMTw8NSkKPiArCj4gICAKPiAgIC8qIEZvciBzeXNjdGwgcHJvY19kb2ludHZlY19taW5t YXggb2YgaTkxNV9vYV9tYXhfc2FtcGxlX3JhdGUKPiAgICAqCj4gQEAgLTMwMyw2ICszMTYsMTMg QEAgc3RhdGljIHN0cnVjdCBpOTE1X29hX2Zvcm1hdCBoc3dfb2FfZm9ybWF0c1tJOTE1X09BX0ZP Uk1BVF9NQVhdID0gewo+ICAgCVtJOTE1X09BX0ZPUk1BVF9DNF9COF0JICAgID0geyA3LCA2NCB9 LAo+ICAgfTsKPiAgIAo+ICtzdGF0aWMgc3RydWN0IGk5MTVfb2FfZm9ybWF0IGdlbjhfcGx1c19v YV9mb3JtYXRzW0k5MTVfT0FfRk9STUFUX01BWF0gPSB7Cj4gKwlbSTkxNV9PQV9GT1JNQVRfQTEy XQkJICAgID0geyAwLCA2NCB9LAo+ICsJW0k5MTVfT0FfRk9STUFUX0ExMl9COF9DOF0JICAgID0g eyAyLCAxMjggfSwKPiArCVtJOTE1X09BX0ZPUk1BVF9BMzJ1NDBfQTR1MzJfQjhfQzhdID0geyA1 LCAyNTYgfSwKPiArCVtJOTE1X09BX0ZPUk1BVF9DNF9COF0JCSAgICA9IHsgNywgNjQgfSwKPiAr fTsKPiArCj4gICAjZGVmaW5lIFNBTVBMRV9PQV9SRVBPUlQgICAgICAoMTw8MCkKPiAgIAo+ICAg LyoqCj4gQEAgLTMzMiw4ICszNTIsMjAgQEAgc3RydWN0IHBlcmZfb3Blbl9wcm9wZXJ0aWVzIHsK PiAgIAlpbnQgb2FfcGVyaW9kX2V4cG9uZW50Owo+ICAgfTsKPiAgIAo+ICtzdGF0aWMgdTMyIGdl bjhfb2FfaHdfdGFpbF9yZWFkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAr ewo+ICsJcmV0dXJuIEk5MTVfUkVBRChHRU44X09BVEFJTFBUUikgJiBHRU44X09BVEFJTFBUUl9N QVNLOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTMyIGdlbjdfb2FfaHdfdGFpbF9yZWFkKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJdTMyIG9hc3RhdHVzMSA9IEk5MTVf UkVBRChHRU43X09BU1RBVFVTMSk7Cj4gKwo+ICsJcmV0dXJuIG9hc3RhdHVzMSAmIEdFTjdfT0FT VEFUVVMxX1RBSUxfTUFTSzsKPiArfQo+ICsKPiAgIC8qKgo+IC0gKiBnZW43X29hX2J1ZmZlcl9j aGVja191bmxvY2tlZCAtIGNoZWNrIGZvciBkYXRhIGFuZCB1cGRhdGUgdGFpbCBwdHIgc3RhdGUK PiArICogb2FfYnVmZmVyX2NoZWNrX3VubG9ja2VkIC0gY2hlY2sgZm9yIGRhdGEgYW5kIHVwZGF0 ZSB0YWlsIHB0ciBzdGF0ZQo+ICAgICogQGRldl9wcml2OiBpOTE1IGRldmljZSBpbnN0YW5jZQo+ ICAgICoKPiAgICAqIFRoaXMgaXMgZWl0aGVyIGNhbGxlZCB2aWEgZm9wcyAoZm9yIGJsb2NraW5n IHJlYWRzIGluIHVzZXIgY3R4KSBvciB0aGUgcG9sbAo+IEBAIC0zNTYsMTIgKzM4OCwxMSBAQCBz dHJ1Y3QgcGVyZl9vcGVuX3Byb3BlcnRpZXMgewo+ICAgICoKPiAgICAqIFJldHVybnM6ICV0cnVl IGlmIHRoZSBPQSBidWZmZXIgY29udGFpbnMgZGF0YSwgZWxzZSAlZmFsc2UKPiAgICAqLwo+IC1z dGF0aWMgYm9vbCBnZW43X29hX2J1ZmZlcl9jaGVja191bmxvY2tlZChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3N0YXRpYyBib29sIG9hX2J1ZmZlcl9jaGVja191bmxvY2tl ZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gICB7Cj4gICAJaW50IHJlcG9y dF9zaXplID0gZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmZvcm1hdF9zaXplOwo+ICAgCXVu c2lnbmVkIGxvbmcgZmxhZ3M7Cj4gICAJdW5zaWduZWQgaW50IGFnZWRfaWR4Owo+IC0JdTMyIG9h c3RhdHVzMTsKPiAgIAl1MzIgaGVhZCwgaHdfdGFpbCwgYWdlZF90YWlsLCBhZ2luZ190YWlsOwo+ ICAgCXU2NCBub3c7Cj4gICAKPiBAQCAtMzgxLDggKzQxMiw3IEBAIHN0YXRpYyBib29sIGdlbjdf b2FfYnVmZmVyX2NoZWNrX3VubG9ja2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKPiAgIAlhZ2VkX3RhaWwgPSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIudGFpbHNbYWdl ZF9pZHhdLm9mZnNldDsKPiAgIAlhZ2luZ190YWlsID0gZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVm ZmVyLnRhaWxzWyFhZ2VkX2lkeF0ub2Zmc2V0Owo+ICAgCj4gLQlvYXN0YXR1czEgPSBJOTE1X1JF QUQoR0VON19PQVNUQVRVUzEpOwo+IC0JaHdfdGFpbCA9IG9hc3RhdHVzMSAmIEdFTjdfT0FTVEFU VVMxX1RBSUxfTUFTSzsKPiArCWh3X3RhaWwgPSBkZXZfcHJpdi0+cGVyZi5vYS5vcHMub2FfaHdf dGFpbF9yZWFkKGRldl9wcml2KTsKPiAgIAo+ICAgCS8qIFRoZSB0YWlsIHBvaW50ZXIgaW5jcmVh c2VzIGluIDY0IGJ5dGUgaW5jcmVtZW50cywKPiAgIAkgKiBub3QgaW4gcmVwb3J0X3NpemUgc3Rl cHMuLi4KPiBAQCAtNDA0LDYgKzQzNCw3IEBAIHN0YXRpYyBib29sIGdlbjdfb2FfYnVmZmVyX2No ZWNrX3VubG9ja2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgIAlpZiAo YWdpbmdfdGFpbCAhPSBJTlZBTElEX1RBSUxfUFRSICYmCj4gICAJICAgICgobm93IC0gZGV2X3By aXYtPnBlcmYub2Eub2FfYnVmZmVyLmFnaW5nX3RpbWVzdGFtcCkgPgo+ICAgCSAgICAgT0FfVEFJ TF9NQVJHSU5fTlNFQykpIHsKPiArCj4gICAJCWFnZWRfaWR4IF49IDE7Cj4gICAJCWRldl9wcml2 LT5wZXJmLm9hLm9hX2J1ZmZlci5hZ2VkX3RhaWxfaWR4ID0gYWdlZF9pZHg7Cj4gICAKPiBAQCAt NTUzLDYgKzU4NCwyODQgQEAgc3RhdGljIGludCBhcHBlbmRfb2Ffc2FtcGxlKHN0cnVjdCBpOTE1 X3BlcmZfc3RyZWFtICpzdHJlYW0sCj4gICAgKgo+ICAgICogUmV0dXJuczogMCBvbiBzdWNjZXNz LCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gICAgKi8KPiArc3RhdGljIGludCBn ZW44X2FwcGVuZF9vYV9yZXBvcnRzKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCj4g KwkJCQkgIGNoYXIgX191c2VyICpidWYsCj4gKwkJCQkgIHNpemVfdCBjb3VudCwKPiArCQkJCSAg c2l6ZV90ICpvZmZzZXQpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHN0cmVhbS0+ZGV2X3ByaXY7Cj4gKwlpbnQgcmVwb3J0X3NpemUgPSBkZXZfcHJpdi0+cGVy Zi5vYS5vYV9idWZmZXIuZm9ybWF0X3NpemU7Cj4gKwl1OCAqb2FfYnVmX2Jhc2UgPSBkZXZfcHJp di0+cGVyZi5vYS5vYV9idWZmZXIudmFkZHI7Cj4gKwl1MzIgZ3R0X29mZnNldCA9IGk5MTVfZ2d0 dF9vZmZzZXQoZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLnZtYSk7Cj4gKwl1MzIgbWFzayA9 IChPQV9CVUZGRVJfU0laRSAtIDEpOwo+ICsJc2l6ZV90IHN0YXJ0X29mZnNldCA9ICpvZmZzZXQ7 Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsJdW5zaWduZWQgaW50IGFnZWRfdGFpbF9pZHg7 Cj4gKwl1MzIgaGVhZCwgdGFpbDsKPiArCXUzMiB0YWtlbjsKPiArCWludCByZXQgPSAwOwo+ICsK PiArCWlmIChXQVJOX09OKCFzdHJlYW0tPmVuYWJsZWQpKQo+ICsJCXJldHVybiAtRUlPOwo+ICsK PiArCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIucHRyX2xv Y2ssIGZsYWdzKTsKPiArCj4gKwloZWFkID0gZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmhl YWQ7Cj4gKwlhZ2VkX3RhaWxfaWR4ID0gZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmFnZWRf dGFpbF9pZHg7Cj4gKwl0YWlsID0gZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLnRhaWxzW2Fn ZWRfdGFpbF9pZHhdLm9mZnNldDsKPiArCj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZf cHJpdi0+cGVyZi5vYS5vYV9idWZmZXIucHRyX2xvY2ssIGZsYWdzKTsKPiArCj4gKwkvKiBBbiBp bnZhbGlkIHRhaWwgcG9pbnRlciBoZXJlIG1lYW5zIHdlJ3JlIHN0aWxsIHdhaXRpbmcgZm9yIHRo ZSBwb2xsCj4gKwkgKiBocnRpbWVyIGNhbGxiYWNrIHRvIGdpdmUgdXMgYSBwb2ludGVyCj4gKwkg Ki8KPiArCWlmICh0YWlsID09IElOVkFMSURfVEFJTF9QVFIpCj4gKwkJcmV0dXJuIC1FQUdBSU47 Cj4gKwo+ICsJLyogTkI6IG9hX2J1ZmZlci5oZWFkL3RhaWwgaW5jbHVkZSB0aGUgZ3R0X29mZnNl dCB3aGljaCB3ZSBkb24ndCB3YW50Cj4gKwkgKiB3aGlsZSBpbmRleGluZyByZWxhdGl2ZSB0byBv YV9idWZfYmFzZS4KPiArCSAqLwo+ICsJaGVhZCAtPSBndHRfb2Zmc2V0Owo+ICsJdGFpbCAtPSBn dHRfb2Zmc2V0Owo+ICsKPiArCS8qIEFuIG91dCBvZiBib3VuZHMgb3IgbWlzYWxpZ25lZCBoZWFk IG9yIHRhaWwgcG9pbnRlciBpbXBsaWVzIGEgZHJpdmVyCj4gKwkgKiBidWcgc2luY2Ugd2UgdmFs aWRhdGUgKyBhbGlnbiB0aGUgdGFpbCBwb2ludGVycyB3ZSByZWFkIGZyb20gdGhlCj4gKwkgKiBo YXJkd2FyZSBhbmQgd2UgYXJlIGluIGZ1bGwgY29udHJvbCBvZiB0aGUgaGVhZCBwb2ludGVyIHdo aWNoIHNob3VsZAo+ICsJICogb25seSBiZSBpbmNyZW1lbnRlZCBieSBtdWx0aXBsZXMgb2YgdGhl IHJlcG9ydCBzaXplIChub3RhYmx5IGFsc28KPiArCSAqIGFsbCBhIHBvd2VyIG9mIHR3bykuCj4g KwkgKi8KPiArCWlmIChXQVJOX09OQ0UoaGVhZCA+IE9BX0JVRkZFUl9TSVpFIHx8IGhlYWQgJSBy ZXBvcnRfc2l6ZSB8fAo+ICsJCSAgICAgIHRhaWwgPiBPQV9CVUZGRVJfU0laRSB8fCB0YWlsICUg cmVwb3J0X3NpemUsCj4gKwkJICAgICAgIkluY29uc2lzdGVudCBPQSBidWZmZXIgcG9pbnRlcnM6 IGhlYWQgPSAldSwgdGFpbCA9ICV1XG4iLAo+ICsJCSAgICAgIGhlYWQsIHRhaWwpKQo+ICsJCXJl dHVybiAtRUlPOwo+ICsKPiArCj4gKwlmb3IgKC8qIG5vbmUgKi87Cj4gKwkgICAgICh0YWtlbiA9 IE9BX1RBS0VOKHRhaWwsIGhlYWQpKTsKPiArCSAgICAgaGVhZCA9IChoZWFkICsgcmVwb3J0X3Np emUpICYgbWFzaykgewo+ICsJCXU4ICpyZXBvcnQgPSBvYV9idWZfYmFzZSArIGhlYWQ7Cj4gKwkJ dTMyICpyZXBvcnQzMiA9ICh2b2lkICopcmVwb3J0Owo+ICsJCXUzMiBjdHhfaWQ7Cj4gKwkJdTMy IHJlYXNvbjsKPiArCj4gKwkJLyogQWxsIHRoZSByZXBvcnQgc2l6ZXMgZmFjdG9yIG5lYXRseSBp bnRvIHRoZSBidWZmZXIKPiArCQkgKiBzaXplIHNvIHdlIG5ldmVyIGV4cGVjdCB0byBzZWUgYSBy ZXBvcnQgc3BsaXQKPiArCQkgKiBiZXR3ZWVuIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUg YnVmZmVyLgo+ICsJCSAqCj4gKwkJICogR2l2ZW4gdGhlIGluaXRpYWwgYWxpZ25tZW50IGNoZWNr IGEgbWlzYWxpZ25tZW50Cj4gKwkJICogaGVyZSB3b3VsZCBpbXBseSBhIGRyaXZlciBidWcgdGhh dCB3b3VsZCByZXN1bHQKPiArCQkgKiBpbiBhbiBvdmVycnVuLgo+ICsJCSAqLwo+ICsJCWlmIChX QVJOX09OKChPQV9CVUZGRVJfU0laRSAtIGhlYWQpIDwgcmVwb3J0X3NpemUpKSB7Cj4gKwkJCURS TV9FUlJPUigiU3B1cmlvdXMgT0EgaGVhZCBwdHI6IG5vbi1pbnRlZ3JhbCByZXBvcnQgb2Zmc2V0 XG4iKTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsKPiArCQkvKiBUaGUgcmVhc29uIGZpZWxkIGlu Y2x1ZGVzIGZsYWdzIGlkZW50aWZ5aW5nIHdoYXQKPiArCQkgKiB0cmlnZ2VyZWQgdGhpcyBzcGVj aWZpYyByZXBvcnQgKG1vc3RseSB0aW1lcgo+ICsJCSAqIHRyaWdnZXJlZCBvciBlLmcuIGR1ZSB0 byBhIGNvbnRleHQgc3dpdGNoKS4KPiArCQkgKgo+ICsJCSAqIFRoaXMgZmllbGQgaXMgbmV2ZXIg ZXhwZWN0ZWQgdG8gYmUgemVybyBzbyB3ZSBjYW4KPiArCQkgKiBjaGVjayB0aGF0IHRoZSByZXBv cnQgaXNuJ3QgaW52YWxpZCBiZWZvcmUgY29weWluZwo+ICsJCSAqIGl0IHRvIHVzZXJzcGFjZS4u Lgo+ICsJCSAqLwo+ICsJCXJlYXNvbiA9ICgocmVwb3J0MzJbMF0gPj4gT0FSRVBPUlRfUkVBU09O X1NISUZUKSAmCj4gKwkJCSAgT0FSRVBPUlRfUkVBU09OX01BU0spOwo+ICsJCWlmIChyZWFzb24g PT0gMCkgewo+ICsJCQlpZiAoX19yYXRlbGltaXQoJmRldl9wcml2LT5wZXJmLm9hLnNwdXJpb3Vz X3JlcG9ydF9ycykpCj4gKwkJCQlEUk1fTk9URSgiU2tpcHBpbmcgc3B1cmlvdXMsIGludmFsaWQg T0EgcmVwb3J0XG4iKTsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQkvKiBYWFg6IEp1 c3Qga2VlcCB0aGUgbG93ZXIgMjEgYml0cyBmb3Igbm93IHNpbmNlIEknbSBub3QKPiArCQkgKiBl bnRpcmVseSBzdXJlIGlmIHRoZSBIVyB0b3VjaGVzIGFueSBvZiB0aGUgaGlnaGVyIGJpdHMgaW4K PiArCQkgKiB0aGlzIGZpZWxkCj4gKwkJICovCj4gKwkJY3R4X2lkID0gcmVwb3J0MzJbMl0gJiAw eDFmZmZmZjsKPiArCj4gKwkJLyogU3F1YXNoIHdoYXRldmVyIGlzIGluIHRoZSBDVFhfSUQgZmll bGQgaWYgaXQncwo+ICsJCSAqIG1hcmtlZCBhcyBpbnZhbGlkIHRvIGJlIHN1cmUgd2UgYXZvaWQK PiArCQkgKiBmYWxzZS1wb3NpdGl2ZSwgc2luZ2xlLWNvbnRleHQgZmlsdGVyaW5nIGJlbG93Li4u Cj4gKwkJICovCj4gKwkJaWYgKCEocmVwb3J0MzJbMF0gJiBkZXZfcHJpdi0+cGVyZi5vYS5nZW44 X3ZhbGlkX2N0eF9iaXQpKQo+ICsJCQljdHhfaWQgPSByZXBvcnQzMlsyXSA9IElOVkFMSURfQ1RY X0lEOwo+ICsKPiArCQkvKiBOQjogRm9yIEdlbiA4IHRoZSBPQSB1bml0IG5vIGxvbmdlciBzdXBw b3J0cyBjbG9jayBnYXRpbmcKPiArCQkgKiBvZmYgZm9yIGEgc3BlY2lmaWMgY29udGV4dCBhbmQg dGhlIGtlcm5lbCBjYW4ndCBzZWN1cmVseQo+ICsJCSAqIHN0b3AgdGhlIGNvdW50ZXJzIGZyb20g dXBkYXRpbmcgYXMgc3lzdGVtLXdpZGUgLyBnbG9iYWwKPiArCQkgKiB2YWx1ZXMuCj4gKwkJICoK PiArCQkgKiBBdXRvbWF0aWMgcmVwb3J0cyBub3cgaW5jbHVkZSBhIGNvbnRleHQgSUQgc28gcmVw b3J0cyBjYW4gYmUKPiArCQkgKiBmaWx0ZXJlZCBvbiB0aGUgY3B1IGJ1dCBpdCdzIG5vdCB3b3J0 aCB0cnlpbmcgdG8KPiArCQkgKiBhdXRvbWF0aWNhbGx5IHN1YnRyYWN0L2hpZGUgY291bnRlciBw cm9ncmVzcyBmb3Igb3RoZXIKPiArCQkgKiBjb250ZXh0cyB3aGlsZSBmaWx0ZXJpbmcgc2luY2Ug d2UgY2FuJ3Qgc3RvcCB1c2Vyc3BhY2UKPiArCQkgKiBpc3N1aW5nIE1JX1JFUE9SVF9QRVJGX0NP VU5UIGNvbW1hbmRzIHdoaWNoIHdvdWxkIHN0aWxsCj4gKwkJICogcHJvdmlkZSBhIHNpZGUtYmFu ZCB2aWV3IG9mIHRoZSByZWFsIHZhbHVlcy4KPiArCQkgKgo+ICsJCSAqIFRvIGFsbG93IHVzZXJz cGFjZSAoc3VjaCBhcyBNZXNhL0dMX0lOVEVMX3BlcmZvcm1hbmNlX3F1ZXJ5KQo+ICsJCSAqIHRv IG5vcm1hbGl6ZSBjb3VudGVycyBmb3IgYSBzaW5nbGUgZmlsdGVyZWQgY29udGV4dCB0aGVuIGl0 Cj4gKwkJICogbmVlZHMgYmUgZm9yd2FyZGVkIGJvb2tlbmQgY29udGV4dC1zd2l0Y2ggcmVwb3J0 cyBzbyB0aGF0IGl0Cj4gKwkJICogY2FuIHRyYWNrIHN3aXRjaGVzIGluIGJldHdlZW4gTUlfUkVQ T1JUX1BFUkZfQ09VTlQgY29tbWFuZHMKPiArCQkgKiBhbmQgY2FuIGl0c2VsZiBzdWJ0cmFjdC9p Z25vcmUgdGhlIHByb2dyZXNzIG9mIGNvdW50ZXJzCj4gKwkJICogYXNzb2NpYXRlZCB3aXRoIG90 aGVyIGNvbnRleHRzLiBOb3RlIHRoYXQgdGhlIGhhcmR3YXJlCj4gKwkJICogYXV0b21hdGljYWxs eSB0cmlnZ2VycyByZXBvcnRzIHdoZW4gc3dpdGNoaW5nIHRvIGEgbmV3Cj4gKwkJICogY29udGV4 dCB3aGljaCBhcmUgdGFnZ2VkIHdpdGggdGhlIElEIG9mIHRoZSBuZXdseSBhY3RpdmUKPiArCQkg KiBjb250ZXh0LiBUbyBhdm9pZCB0aGUgY29tcGxleGl0eSAoYW5kIGxpa2VseSBmcmFnaWxpdHkp IG9mCj4gKwkJICogcmVhZGluZyBhaGVhZCB3aGlsZSBwYXJzaW5nIHJlcG9ydHMgdG8gdHJ5IGFu ZCBtaW5pbWl6ZQo+ICsJCSAqIGZvcndhcmRpbmcgcmVkdW5kYW50IGNvbnRleHQgc3dpdGNoIHJl cG9ydHMgKGkuZS4gYmV0d2Vlbgo+ICsJCSAqIG90aGVyLCB1bnJlbGF0ZWQgY29udGV4dHMpIHdl IHNpbXBseSBlbGVjdCB0byBmb3J3YXJkIHRoZW0KPiArCQkgKiBhbGwuCj4gKwkJICoKPiArCQkg KiBXZSBkb24ndCByZWx5IHNvbGVseSBvbiB0aGUgcmVhc29uIGZpZWxkIHRvIGlkZW50aWZ5IGNv bnRleHQKPiArCQkgKiBzd2l0Y2hlcyBzaW5jZSBpdCdzIG5vdC11bmNvbW1vbiBmb3IgcGVyaW9k aWMgc2FtcGxlcyB0bwo+ICsJCSAqIGlkZW50aWZ5IGEgc3dpdGNoIGJlZm9yZSBhbnkgJ2NvbnRl eHQgc3dpdGNoJyByZXBvcnQuCj4gKwkJICovCj4gKwkJaWYgKCFkZXZfcHJpdi0+cGVyZi5vYS5l eGNsdXNpdmVfc3RyZWFtLT5jdHggfHwKPiArCQkgICAgZGV2X3ByaXYtPnBlcmYub2Euc3BlY2lm aWNfY3R4X2lkID09IGN0eF9pZCB8fAo+ICsJCSAgICAoZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVm ZmVyLmxhc3RfY3R4X2lkID09Cj4gKwkJICAgICBkZXZfcHJpdi0+cGVyZi5vYS5zcGVjaWZpY19j dHhfaWQpIHx8CgpJIHRoaW5rIHdlIG1pZ2h0IHdhbnQgdG8gcmVzZXQgdGhlIGxhc3RfY3R4X2lk IGZpeCBpbiBpbml0X29hX2J1ZmZlcigpIAp0byBlaXRoZXIgdG8gMCBvciBpbnZhbGlkLgoKV2l0 aCB0aGF0IHRoaXMgc2VyaWVzIGlzIDoKCkFja2VkLWJ5OiBMaW9uZWwgTGFuZHdlcmxpbiA8bGlv bmVsLmcubGFuZHdlcmxpbkBpbnRlbC5jb20+Cgo+ICsJCSAgICByZWFzb24gJiBPQVJFUE9SVF9S RUFTT05fQ1RYX1NXSVRDSCkgewo+ICsKPiArCQkJLyogV2hpbGUgZmlsdGVyaW5nIGZvciBhIHNp bmdsZSBjb250ZXh0IHdlIGF2b2lkCj4gKwkJCSAqIGxlYWtpbmcgdGhlIElEcyBvZiBvdGhlciBj b250ZXh0cy4KPiArCQkJICovCj4gKwkJCWlmIChkZXZfcHJpdi0+cGVyZi5vYS5leGNsdXNpdmVf c3RyZWFtLT5jdHggJiYKPiArCQkJICAgIGRldl9wcml2LT5wZXJmLm9hLnNwZWNpZmljX2N0eF9p ZCAhPSBjdHhfaWQpIHsKPiArCQkJCXJlcG9ydDMyWzJdID0gSU5WQUxJRF9DVFhfSUQ7Cj4gKwkJ CX0KPiArCj4gKwkJCXJldCA9IGFwcGVuZF9vYV9zYW1wbGUoc3RyZWFtLCBidWYsIGNvdW50LCBv ZmZzZXQsCj4gKwkJCQkJICAgICAgIHJlcG9ydCk7Cj4gKwkJCWlmIChyZXQpCj4gKwkJCQlicmVh azsKPiArCj4gKwkJCWRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5sYXN0X2N0eF9pZCA9IGN0 eF9pZDsKPiArCQl9Cj4gKwo+ICsJCS8qIFRoZSBhYm92ZSByZWFzb24gZmllbGQgc2FuaXR5IGNo ZWNrIGlzIGJhc2VkIG9uCj4gKwkJICogdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgT0EgYnVmZmVy IGlzIGluaXRpYWxseQo+ICsJCSAqIHplcm9lZCBhbmQgd2UgcmVzZXQgdGhlIGZpZWxkIGFmdGVy IGNvcHlpbmcgc28gdGhlCj4gKwkJICogY2hlY2sgaXMgc3RpbGwgbWVhbmluZ2Z1bCBvbmNlIG9s ZCByZXBvcnRzIHN0YXJ0Cj4gKwkJICogYmVpbmcgb3ZlcndyaXR0ZW4uCj4gKwkJICovCj4gKwkJ cmVwb3J0MzJbMF0gPSAwOwo+ICsJfQo+ICsKPiArCWlmIChzdGFydF9vZmZzZXQgIT0gKm9mZnNl dCkgewo+ICsJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIu cHRyX2xvY2ssIGZsYWdzKTsKPiArCj4gKwkJLyogV2UgcmVtb3ZlZCB0aGUgZ3R0X29mZnNldCBm b3IgdGhlIGNvcHkgbG9vcCBhYm92ZSwgaW5kZXhpbmcKPiArCQkgKiByZWxhdGl2ZSB0byBvYV9i dWZfYmFzZSBzbyBwdXQgYmFjayBoZXJlLi4uCj4gKwkJICovCj4gKwkJaGVhZCArPSBndHRfb2Zm c2V0Owo+ICsKPiArCQlJOTE1X1dSSVRFKEdFTjhfT0FIRUFEUFRSLCBoZWFkICYgR0VOOF9PQUhF QURQVFJfTUFTSyk7Cj4gKwkJZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmhlYWQgPSBoZWFk Owo+ICsKPiArCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+cGVyZi5vYS5vYV9i dWZmZXIucHRyX2xvY2ssIGZsYWdzKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4g Kwo+ICsvKioKPiArICogZ2VuOF9vYV9yZWFkIC0gY29weSBzdGF0dXMgcmVjb3JkcyB0aGVuIGJ1 ZmZlcmVkIE9BIHJlcG9ydHMKPiArICogQHN0cmVhbTogQW4gaTkxNS1wZXJmIHN0cmVhbSBvcGVu ZWQgZm9yIE9BIG1ldHJpY3MKPiArICogQGJ1ZjogZGVzdGluYXRpb24gYnVmZmVyIGdpdmVuIGJ5 IHVzZXJzcGFjZQo+ICsgKiBAY291bnQ6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdXNlcnNwYWNlIHdh bnRzIHRvIHJlYWQKPiArICogQG9mZnNldDogKGlub3V0KTogdGhlIGN1cnJlbnQgcG9zaXRpb24g Zm9yIHdyaXRpbmcgaW50byBAYnVmCj4gKyAqCj4gKyAqIENoZWNrcyBPQSB1bml0IHN0YXR1cyBy ZWdpc3RlcnMgYW5kIGlmIG5lY2Vzc2FyeSBhcHBlbmRzIGNvcnJlc3BvbmRpbmcKPiArICogc3Rh dHVzIHJlY29yZHMgZm9yIHVzZXJzcGFjZSAoc3VjaCBhcyBmb3IgYSBidWZmZXIgZnVsbCBjb25k aXRpb24pIGFuZCB0aGVuCj4gKyAqIGluaXRpYXRlIGFwcGVuZGluZyBhbnkgYnVmZmVyZWQgT0Eg cmVwb3J0cy4KPiArICoKPiArICogVXBkYXRlcyBAb2Zmc2V0IGFjY29yZGluZyB0byB0aGUgbnVt YmVyIG9mIGJ5dGVzIHN1Y2Nlc3NmdWxseSBjb3BpZWQgaW50bwo+ICsgKiB0aGUgdXNlcnNwYWNl IGJ1ZmZlci4KPiArICoKPiArICogTkI6IHNvbWUgZGF0YSBtYXkgYmUgc3VjY2Vzc2Z1bGx5IGNv cGllZCB0byB0aGUgdXNlcnNwYWNlIGJ1ZmZlcgo+ICsgKiBldmVuIGlmIGFuIGVycm9yIGlzIHJl dHVybmVkLCBhbmQgdGhpcyBpcyByZWZsZWN0ZWQgaW4gdGhlCj4gKyAqIHVwZGF0ZWQgQG9mZnNl dC4KPiArICoKPiArICogUmV0dXJuczogemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJy b3IgY29kZQo+ICsgKi8KPiArc3RhdGljIGludCBnZW44X29hX3JlYWQoc3RydWN0IGk5MTVfcGVy Zl9zdHJlYW0gKnN0cmVhbSwKPiArCQkJY2hhciBfX3VzZXIgKmJ1ZiwKPiArCQkJc2l6ZV90IGNv dW50LAo+ICsJCQlzaXplX3QgKm9mZnNldCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKPiArCXUzMiBvYXN0YXR1czsKPiArCWlu dCByZXQ7Cj4gKwo+ICsJaWYgKFdBUk5fT04oIWRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci52 YWRkcikpCj4gKwkJcmV0dXJuIC1FSU87Cj4gKwo+ICsJb2FzdGF0dXMgPSBJOTE1X1JFQUQoR0VO OF9PQVNUQVRVUyk7Cj4gKwo+ICsJLyogV2UgdHJlYXQgT0FCVUZGRVJfT1ZFUkZMT1cgYXMgYSBz aWduaWZpY2FudCBlcnJvcjoKPiArCSAqCj4gKwkgKiBBbHRob3VnaCB0aGVvcmV0aWNhbGx5IHdl IGNvdWxkIGhhbmRsZSB0aGlzIG1vcmUgZ3JhY2VmdWxseQo+ICsJICogc29tZXRpbWVzLCBzb21l IEdlbnMgZG9uJ3QgY29ycmVjdGx5IHN1cHByZXNzIGNlcnRhaW4KPiArCSAqIGF1dG9tYXRpY2Fs bHkgdHJpZ2dlcmVkIHJlcG9ydHMgaW4gdGhpcyBjb25kaXRpb24gYW5kIHNvIHdlCj4gKwkgKiBo YXZlIHRvIGFzc3VtZSB0aGF0IG9sZCByZXBvcnRzIGFyZSBub3cgYmVpbmcgdHJhbXBsZWQKPiAr CSAqIG92ZXIuCj4gKwkgKgo+ICsJICogQ29uc2lkZXJpbmcgaG93IHdlIGRvbid0IGN1cnJlbnRs eSBnaXZlIHVzZXJzcGFjZSBjb250cm9sCj4gKwkgKiBvdmVyIHRoZSBPQSBidWZmZXIgc2l6ZSBh bmQgYWx3YXlzIGNvbmZpZ3VyZSBhIGxhcmdlIDE2TUIKPiArCSAqIGJ1ZmZlciwgdGhlbiBhIGJ1 ZmZlciBvdmVyZmxvdyBkb2VzIGFueXdheSBsaWtlbHkgaW5kaWNhdGUKPiArCSAqIHRoYXQgc29t ZXRoaW5nIGhhcyBnb25lIHF1aXRlIGJhZGx5IHdyb25nLgo+ICsJICovCj4gKwlpZiAob2FzdGF0 dXMgJiBHRU44X09BU1RBVFVTX09BQlVGRkVSX09WRVJGTE9XKSB7Cj4gKwkJcmV0ID0gYXBwZW5k X29hX3N0YXR1cyhzdHJlYW0sIGJ1ZiwgY291bnQsIG9mZnNldCwKPiArCQkJCSAgICAgICBEUk1f STkxNV9QRVJGX1JFQ09SRF9PQV9CVUZGRVJfTE9TVCk7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0 dXJuIHJldDsKPiArCj4gKwkJRFJNX0RFQlVHKCJPQSBidWZmZXIgb3ZlcmZsb3cgKGV4cG9uZW50 ID0gJWQpOiBmb3JjZSByZXN0YXJ0XG4iLAo+ICsJCQkgIGRldl9wcml2LT5wZXJmLm9hLnBlcmlv ZF9leHBvbmVudCk7Cj4gKwo+ICsJCWRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9kaXNhYmxlKGRl dl9wcml2KTsKPiArCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMub2FfZW5hYmxlKGRldl9wcml2KTsK PiArCj4gKwkJLyogTm90ZTogLm9hX2VuYWJsZSgpIGlzIGV4cGVjdGVkIHRvIHJlLWluaXQgdGhl IG9hYnVmZmVyCj4gKwkJICogYW5kIHJlc2V0IEdFTjhfT0FTVEFUVVMgZm9yIHVzCj4gKwkJICov Cj4gKwkJb2FzdGF0dXMgPSBJOTE1X1JFQUQoR0VOOF9PQVNUQVRVUyk7Cj4gKwl9Cj4gKwo+ICsJ aWYgKG9hc3RhdHVzICYgR0VOOF9PQVNUQVRVU19SRVBPUlRfTE9TVCkgewo+ICsJCXJldCA9IGFw cGVuZF9vYV9zdGF0dXMoc3RyZWFtLCBidWYsIGNvdW50LCBvZmZzZXQsCj4gKwkJCQkgICAgICAg RFJNX0k5MTVfUEVSRl9SRUNPUkRfT0FfUkVQT1JUX0xPU1QpOwo+ICsJCWlmIChyZXQgPT0gMCkg ewo+ICsJCQlJOTE1X1dSSVRFKEdFTjhfT0FTVEFUVVMsCj4gKwkJCQkgICBvYXN0YXR1cyAmIH5H RU44X09BU1RBVFVTX1JFUE9SVF9MT1NUKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGdl bjhfYXBwZW5kX29hX3JlcG9ydHMoc3RyZWFtLCBidWYsIGNvdW50LCBvZmZzZXQpOwo+ICt9Cj4g Kwo+ICsvKioKPiArICogQ29waWVzIGFsbCBidWZmZXJlZCBPQSByZXBvcnRzIGludG8gdXNlcnNw YWNlIHJlYWQoKSBidWZmZXIuCj4gKyAqIEBzdHJlYW06IEFuIGk5MTUtcGVyZiBzdHJlYW0gb3Bl bmVkIGZvciBPQSBtZXRyaWNzCj4gKyAqIEBidWY6IGRlc3RpbmF0aW9uIGJ1ZmZlciBnaXZlbiBi eSB1c2Vyc3BhY2UKPiArICogQGNvdW50OiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHVzZXJzcGFjZSB3 YW50cyB0byByZWFkCj4gKyAqIEBvZmZzZXQ6IChpbm91dCk6IHRoZSBjdXJyZW50IHBvc2l0aW9u IGZvciB3cml0aW5nIGludG8gQGJ1Zgo+ICsgKgo+ICsgKiBOb3RhYmx5IGFueSBlcnJvciBjb25k aXRpb24gcmVzdWx0aW5nIGluIGEgc2hvcnQgcmVhZCAoLSVFTk9TUEMgb3IKPiArICogLSVFRkFV TFQpIHdpbGwgYmUgcmV0dXJuZWQgZXZlbiB0aG91Z2ggb25lIG9yIG1vcmUgcmVjb3JkcyBtYXkK PiArICogaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBjb3BpZWQuIEluIHRoaXMgY2FzZSBpdCdzIHVw IHRvIHRoZSBjYWxsZXIKPiArICogdG8gZGVjaWRlIGlmIHRoZSBlcnJvciBzaG91bGQgYmUgc3F1 YXNoZWQgYmVmb3JlIHJldHVybmluZyB0bwo+ICsgKiB1c2Vyc3BhY2UuCj4gKyAqCj4gKyAqIE5v dGU6IHJlcG9ydHMgYXJlIGNvbnN1bWVkIGZyb20gdGhlIGhlYWQsIGFuZCBhcHBlbmRlZCB0byB0 aGUKPiArICogdGFpbCwgc28gdGhlIHRhaWwgY2hhc2VzIHRoZSBoZWFkPy4uLiBJZiB5b3UgdGhp bmsgdGhhdCdzIG1hZAo+ICsgKiBhbmQgYmFjay10by1mcm9udCB5b3UncmUgbm90IGFsb25lLCBi dXQgdGhpcyBmb2xsb3dzIHRoZQo+ICsgKiBHZW4gUFJNIG5hbWluZyBjb252ZW50aW9uLgo+ICsg Kgo+ICsgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFp bHVyZS4KPiArICovCj4gICBzdGF0aWMgaW50IGdlbjdfYXBwZW5kX29hX3JlcG9ydHMoc3RydWN0 IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKPiAgIAkJCQkgIGNoYXIgX191c2VyICpidWYsCj4g ICAJCQkJICBzaXplX3QgY291bnQsCj4gQEAgLTczMyw3ICsxMDQyLDggQEAgc3RhdGljIGludCBn ZW43X29hX3JlYWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKPiAgIAkJaWYgKHJl dCkKPiAgIAkJCXJldHVybiByZXQ7Cj4gICAKPiAtCQlEUk1fREVCVUcoIk9BIGJ1ZmZlciBvdmVy ZmxvdzogZm9yY2UgcmVzdGFydFxuIik7Cj4gKwkJRFJNX0RFQlVHKCJPQSBidWZmZXIgb3ZlcmZs b3cgKGV4cG9uZW50ID0gJWQpOiBmb3JjZSByZXN0YXJ0XG4iLAo+ICsJCQkgIGRldl9wcml2LT5w ZXJmLm9hLnBlcmlvZF9leHBvbmVudCk7Cj4gICAKPiAgIAkJZGV2X3ByaXYtPnBlcmYub2Eub3Bz Lm9hX2Rpc2FibGUoZGV2X3ByaXYpOwo+ICAgCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMub2FfZW5h YmxlKGRldl9wcml2KTsKPiBAQCAtNzc2LDcgKzEwODYsNyBAQCBzdGF0aWMgaW50IGk5MTVfb2Ff d2FpdF91bmxvY2tlZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQo+ICAgCQlyZXR1 cm4gLUVJTzsKPiAgIAo+ICAgCXJldHVybiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGV2X3By aXYtPnBlcmYub2EucG9sbF93cSwKPiAtCQkJCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMub2FfYnVm ZmVyX2NoZWNrKGRldl9wcml2KSk7Cj4gKwkJCQkJb2FfYnVmZmVyX2NoZWNrX3VubG9ja2VkKGRl dl9wcml2KSk7Cj4gICB9Cj4gICAKPiAgIC8qKgo+IEBAIC04MzMsMzMgKzExNDMsMzcgQEAgc3Rh dGljIGludCBpOTE1X29hX3JlYWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKPiAg IHN0YXRpYyBpbnQgb2FfZ2V0X3JlbmRlcl9jdHhfaWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0g KnN0cmVhbSkKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBz dHJlYW0tPmRldl9wcml2Owo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gZGV2 X3ByaXYtPmVuZ2luZVtSQ1NdOwo+IC0JaW50IHJldDsKPiAgIAo+IC0JcmV0ID0gaTkxNV9tdXRl eF9sb2NrX2ludGVycnVwdGlibGUoJmRldl9wcml2LT5kcm0pOwo+IC0JaWYgKHJldCkKPiAtCQly ZXR1cm4gcmV0Owo+ICsJaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cykKPiArCQlkZXZfcHJpdi0+ cGVyZi5vYS5zcGVjaWZpY19jdHhfaWQgPSBzdHJlYW0tPmN0eC0+aHdfaWQ7Cj4gKwllbHNlIHsK PiArCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSBkZXZfcHJpdi0+ZW5naW5lW1JD U107Cj4gKwkJaW50IHJldDsKPiAgIAo+IC0JLyogQXMgdGhlIElEIGlzIHRoZSBndHQgb2Zmc2V0 IG9mIHRoZSBjb250ZXh0J3Mgdm1hIHdlIHBpbgo+IC0JICogdGhlIHZtYSB0byBlbnN1cmUgdGhl IElEIHJlbWFpbnMgZml4ZWQuCj4gLQkgKgo+IC0JICogTkI6IGltcGxpZWQgUkNTIGVuZ2luZS4u Lgo+IC0JICovCj4gLQlyZXQgPSBlbmdpbmUtPmNvbnRleHRfcGluKGVuZ2luZSwgc3RyZWFtLT5j dHgpOwo+IC0JaWYgKHJldCkKPiAtCQlnb3RvIHVubG9jazsKPiArCQlyZXQgPSBpOTE1X211dGV4 X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2X3ByaXYtPmRybSk7Cj4gKwkJaWYgKHJldCkKPiArCQkJ cmV0dXJuIHJldDsKPiAgIAo+IC0JLyogRXhwbGljaXRseSB0cmFjayB0aGUgSUQgKGluc3RlYWQg b2YgY2FsbGluZyBpOTE1X2dndHRfb2Zmc2V0KCkKPiAtCSAqIG9uIHRoZSBmbHkpIGNvbnNpZGVy aW5nIHRoZSBkaWZmZXJlbmNlIHdpdGggZ2VuOCsgYW5kCj4gLQkgKiBleGVjbGlzdHMKPiAtCSAq Lwo+IC0JZGV2X3ByaXYtPnBlcmYub2Euc3BlY2lmaWNfY3R4X2lkID0KPiAtCQlpOTE1X2dndHRf b2Zmc2V0KHN0cmVhbS0+Y3R4LT5lbmdpbmVbZW5naW5lLT5pZF0uc3RhdGUpOwo+ICsJCS8qIEFz IHRoZSBJRCBpcyB0aGUgZ3R0IG9mZnNldCBvZiB0aGUgY29udGV4dCdzIHZtYSB3ZSBwaW4KPiAr CQkgKiB0aGUgdm1hIHRvIGVuc3VyZSB0aGUgSUQgcmVtYWlucyBmaXhlZC4KPiArCQkgKi8KPiAr CQlyZXQgPSBlbmdpbmUtPmNvbnRleHRfcGluKGVuZ2luZSwgc3RyZWFtLT5jdHgpOwo+ICsJCWlm IChyZXQpIHsKPiArCQkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7 Cj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJfQo+ICAgCj4gLXVubG9jazoKPiAtCW11dGV4X3VubG9j aygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJCS8qIEV4cGxpY2l0bHkgdHJhY2sg dGhlIElEIChpbnN0ZWFkIG9mIGNhbGxpbmcKPiArCQkgKiBpOTE1X2dndHRfb2Zmc2V0KCkgb24g dGhlIGZseSkgY29uc2lkZXJpbmcgdGhlIGRpZmZlcmVuY2UKPiArCQkgKiB3aXRoIGdlbjgrIGFu ZCBleGVjbGlzdHMKPiArCQkgKi8KPiArCQlkZXZfcHJpdi0+cGVyZi5vYS5zcGVjaWZpY19jdHhf aWQgPQo+ICsJCQlpOTE1X2dndHRfb2Zmc2V0KHN0cmVhbS0+Y3R4LT5lbmdpbmVbZW5naW5lLT5p ZF0uc3RhdGUpOwo+ICAgCj4gLQlyZXR1cm4gcmV0Owo+ICsJCW11dGV4X3VubG9jaygmZGV2X3By aXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICAgfQo+ICAg Cj4gICAvKioKPiBAQCAtODc0LDEyICsxMTg4LDE2IEBAIHN0YXRpYyB2b2lkIG9hX3B1dF9yZW5k ZXJfY3R4X2lkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCj4gICAJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKPiAgIAlzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSBkZXZfcHJpdi0+ZW5naW5lW1JDU107Cj4gICAKPiAt CW11dGV4X2xvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKPiArCWlmIChpOTE1LmVu YWJsZV9leGVjbGlzdHMpIHsKPiArCQlkZXZfcHJpdi0+cGVyZi5vYS5zcGVjaWZpY19jdHhfaWQg PSBJTlZBTElEX0NUWF9JRDsKPiArCX0gZWxzZSB7Cj4gKwkJbXV0ZXhfbG9jaygmZGV2X3ByaXYt PmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCj4gLQlkZXZfcHJpdi0+cGVyZi5vYS5zcGVjaWZpY19j dHhfaWQgPSBJTlZBTElEX0NUWF9JRDsKPiAtCWVuZ2luZS0+Y29udGV4dF91bnBpbihlbmdpbmUs IHN0cmVhbS0+Y3R4KTsKPiArCQlkZXZfcHJpdi0+cGVyZi5vYS5zcGVjaWZpY19jdHhfaWQgPSBJ TlZBTElEX0NUWF9JRDsKPiArCQllbmdpbmUtPmNvbnRleHRfdW5waW4oZW5naW5lLCBzdHJlYW0t PmN0eCk7Cj4gICAKPiAtCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgp Owo+ICsJCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJfQo+ ICAgfQo+ICAgCj4gICBzdGF0aWMgdm9pZAo+IEBAIC05NjksNiArMTI4Nyw1NiBAQCBzdGF0aWMg dm9pZCBnZW43X2luaXRfb2FfYnVmZmVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKPiAgIAlkZXZfcHJpdi0+cGVyZi5vYS5wb2xsaW4gPSBmYWxzZTsKPiAgIH0KPiAgIAo+ICtz dGF0aWMgdm9pZCBnZW44X2luaXRfb2FfYnVmZmVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKPiArewo+ICsJdTMyIGd0dF9vZmZzZXQgPSBpOTE1X2dndHRfb2Zmc2V0KGRldl9w cml2LT5wZXJmLm9hLm9hX2J1ZmZlci52bWEpOwo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiAr Cj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLnB0cl9s b2NrLCBmbGFncyk7Cj4gKwo+ICsJSTkxNV9XUklURShHRU44X09BU1RBVFVTLCAwKTsKPiArCUk5 MTVfV1JJVEUoR0VOOF9PQUhFQURQVFIsIGd0dF9vZmZzZXQpOwo+ICsJZGV2X3ByaXYtPnBlcmYu b2Eub2FfYnVmZmVyLmhlYWQgPSBndHRfb2Zmc2V0Owo+ICsKPiArCUk5MTVfV1JJVEUoR0VOOF9P QUJVRkZFUl9VRFcsIDApOwo+ICsKPiArCS8qIFBSTSBzYXlzOgo+ICsJICoKPiArCSAqICAiVGhp cyBNTUlPIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgT0FUQUlMUFRSCj4gKwkgKiAgcmVnaXN0ZXIg YW5kIGFmdGVyIHRoZSBPQUhFQURQVFIgcmVnaXN0ZXIuIFRoaXMgaXMKPiArCSAqICB0byBlbmFi bGUgcHJvcGVyIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIG92ZXJmbG93Cj4gKwkgKiAgYml0LiIKPiAr CSAqLwo+ICsJSTkxNV9XUklURShHRU44X09BQlVGRkVSLCBndHRfb2Zmc2V0IHwKPiArCQkgICBP QUJVRkZFUl9TSVpFXzE2TSB8IE9BX01FTV9TRUxFQ1RfR0dUVCk7Cj4gKwlJOTE1X1dSSVRFKEdF TjhfT0FUQUlMUFRSLCBndHRfb2Zmc2V0ICYgR0VOOF9PQVRBSUxQVFJfTUFTSyk7Cj4gKwo+ICsJ LyogTWFyayB0aGF0IHdlIG5lZWQgdXBkYXRlZCB0YWlsIHBvaW50ZXJzIHRvIHJlYWQgZnJvbS4u LiAqLwo+ICsJZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLnRhaWxzWzBdLm9mZnNldCA9IElO VkFMSURfVEFJTF9QVFI7Cj4gKwlkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIudGFpbHNbMV0u b2Zmc2V0ID0gSU5WQUxJRF9UQUlMX1BUUjsKPiArCj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIucHRyX2xvY2ssIGZsYWdzKTsKPiArCj4gKwo+ ICsJLyogTkI6IGFsdGhvdWdoIHRoZSBPQSBidWZmZXIgd2lsbCBpbml0aWFsbHkgYmUgYWxsb2Nh dGVkCj4gKwkgKiB6ZXJvZWQgdmlhIHNobWZzIChhbmQgc28gdGhpcyBtZW1zZXQgaXMgcmVkdW5k YW50IHdoZW4KPiArCSAqIGZpcnN0IGFsbG9jYXRpbmcpLCB3ZSBtYXkgcmUtaW5pdCB0aGUgT0Eg YnVmZmVyLCBlaXRoZXIKPiArCSAqIHdoZW4gcmUtZW5hYmxpbmcgYSBzdHJlYW0gb3IgaW4gZXJy b3IvcmVzZXQgcGF0aHMuCj4gKwkgKgo+ICsJICogVGhlIHJlYXNvbiB3ZSBjbGVhciB0aGUgYnVm ZmVyIGZvciBlYWNoIHJlLWluaXQgaXMgZm9yIHRoZQo+ICsJICogc2FuaXR5IGNoZWNrIGluIGdl bjhfYXBwZW5kX29hX3JlcG9ydHMoKSB0aGF0IGxvb2tzIGF0IHRoZQo+ICsJICogcmVhc29uIGZp ZWxkIHRvIG1ha2Ugc3VyZSBpdCdzIG5vbi16ZXJvIHdoaWNoIHJlbGllcyBvbgo+ICsJICogdGhl IGFzc3VtcHRpb24gdGhhdCBuZXcgcmVwb3J0cyBhcmUgYmVpbmcgd3JpdHRlbiB0byB6ZXJvZWQK PiArCSAqIG1lbW9yeS4uLgo+ICsJICovCj4gKwltZW1zZXQoZGV2X3ByaXYtPnBlcmYub2Eub2Ff YnVmZmVyLnZhZGRyLCAwLCBPQV9CVUZGRVJfU0laRSk7Cj4gKwo+ICsJLyogTWF5YmUgbWFrZSAt PnBvbGxpbiBwZXItc3RyZWFtIHN0YXRlIGlmIHdlIHN1cHBvcnQgbXVsdGlwbGUKPiArCSAqIGNv bmN1cnJlbnQgc3RyZWFtcyBpbiB0aGUgZnV0dXJlLgo+ICsJICovCj4gKwlkZXZfcHJpdi0+cGVy Zi5vYS5wb2xsaW4gPSBmYWxzZTsKPiArfQo+ICsKPiAgIHN0YXRpYyBpbnQgYWxsb2Nfb2FfYnVm ZmVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgIHsKPiAgIAlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqYm87Cj4gQEAgLTExMTMsNiArMTQ4MSwyMDIgQEAgc3RhdGlj IHZvaWQgaHN3X2Rpc2FibGVfbWV0cmljX3NldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4gICAJCQkJICAgICAgfkdUX05PQV9FTkFCTEUpKTsKPiAgIH0KPiAgIAo+ICsvKgo+ ICsgKiBGcm9tIEJyb2Fkd2VsbCBQUk0sIDNELU1lZGlhLUdQR1BVIC0+IFJlZ2lzdGVyIFN0YXRl IENvbnRleHQKPiArICoKPiArICogTU1JTyByZWFkcyBvciB3cml0ZXMgdG8gYW55IG9mIHRoZSBy ZWdpc3RlcnMgbGlzdGVkIGluIHRoZQo+ICsgKiDigJxSZWdpc3RlciBTdGF0ZSBDb250ZXh0IGlt YWdl4oCdIHN1YnNlY3Rpb25zIHRocm91Z2ggSE9TVC9JQQo+ICsgKiBNTUlPIGludGVyZmFjZSBm b3IgZGVidWcgcHVycG9zZXMgbXVzdCBmb2xsb3cgdGhlIHN0ZXBzIGJlbG93Ogo+ICsgKgo+ICsg KiAtIFNXIHNob3VsZCBzZXQgdGhlIEZvcmNlIFdha2V1cCBiaXQgdG8gcHJldmVudCBHVCBmcm9t IGVudGVyaW5nIEM2Lgo+ICsgKiAtIFdyaXRlIDB4MjA1MFszMTowXSA9IDB4MDAwMTAwMDEgKGRp c2FibGUgc2VxdWVuY2UpLgo+ICsgKiAtIERpc2FibGUgSURMRSBtZXNzYWdpbmcgaW4gQ1MgKFdy aXRlIDB4MjA1MFszMTowXSA9IDB4MDAwMTAwMDEpLgo+ICsgKiAtIEJEVzogIFBvbGwvV2FpdCBm b3IgcmVnaXN0ZXIgYml0cyBvZiAweDIyQUNbNjowXSB0dXJuIHRvIDB4MzAgdmFsdWUuCj4gKyAq IC0gU0tMKzogUG9sbC9XYWl0IGZvciByZWdpc3RlciBiaXRzIG9mIDB4MjJBNFs2OjBdIHR1cm4g dG8gMHgzMCB2YWx1ZS4KPiArICogLSBSZWFkL1dyaXRlIHRvIGRlc2lyZWQgTU1JTyByZWdpc3Rl cnMuCj4gKyAqIC0gRW5hYmxlIElETEUgbWVzc2FnaW5nIGluIENTIChXcml0ZSAweDIwNTBbMzE6 MF0gPSAweDAwMDEwMDAwKS4KPiArICogLSBGb3JjZSBXYWtldXAgYml0IHNob3VsZCBiZSByZXNl dCB0byBlbmFibGUgQzYgZW50cnkuCj4gKyAqCj4gKyAqIFhYWDogZG9uJ3QgbmVzdCBvciBvdmVy bGFwIGNhbGxzIHRvIHRoaXMgQVBJLCBpdCBoYXMgbm8gcmVmCj4gKyAqIGNvdW50aW5nIHRvIHRy YWNrIGhvdyBtYW55IGVudGl0aWVzIHJlcXVpcmUgdGhlIFJDUyB0byBiZQo+ICsgKiBibG9ja2Vk IGZyb20gYmVpbmcgaWRsZS4KPiArICovCj4gK3N0YXRpYyBpbnQgZ2VuOF9iZWdpbl9jdHhfbW1p byhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCWk5MTVfcmVnX3Qg ZnNtX3JlZyA9IGRldl9wcml2LT5pbmZvLmdlbiA+IDggPwo+ICsJCUdFTjlfUkNTX0ZFX0ZTTTIg OiBHRU42X1JDU19QV1JfRlNNOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJLyogVGhlcmUncyBv bmx5IG5vIGFjdGl2ZSBjb250ZXh0IHdoaWxlIGlkbGUgaW4gZXhlY2xpc3QgbW9kZQo+ICsJICog KHRob3VnaCB3ZSBzaG91bGRuJ3QgYmUgdXNpbmcgdGhpcyBpbiBhbnkgb3RoZXIgY2FzZSkKPiAr CSAqLwo+ICsJaWYgKFdBUk5fT04oIWk5MTUuZW5hYmxlX2V4ZWNsaXN0cykpCj4gKwkJcmV0dXJu IC1FSU5WQUw7Cj4gKwo+ICsJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoZGV2X3ByaXYsIEZP UkNFV0FLRV9SRU5ERVIpOwo+ICsKPiArCUk5MTVfV1JJVEUoR0VONl9SQ19TTEVFUF9QU01JX0NP TlRST0wsCj4gKwkJICAgX01BU0tFRF9CSVRfRU5BQkxFKEdFTjZfUFNNSV9TTEVFUF9NU0dfRElT QUJMRSkpOwo+ICsKPiArCS8qIE5vdGU6IHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgZ29vZCBo YW5kbGUgb24gdGhlIG1heGltdW0KPiArCSAqIGxhdGVuY3kgZm9yIHRoaXMgd2FrZSB1cCBzbyB3 aGlsZSB3ZSBvbmx5IG5lZWQgdG8gaG9sZCByY3MKPiArCSAqIGJ1c3kgZnJvbSBwcm9jZXNzIGNv bnRleHQgd2UgYXQgbGVhc3Qga2VlcCB0aGUgd2FpdGluZwo+ICsJICogaW50ZXJydXB0aWJsZS4u Lgo+ICsJICovCj4gKwlyZXQgPSB3YWl0X2ZvcigoSTkxNV9SRUFEKGZzbV9yZWcpICYgMHgzZikg PT0gMHgzMCwgNTApOwo+ICsJaWYgKHJldCkKPiArCSAgICBpbnRlbF91bmNvcmVfZm9yY2V3YWtl X3B1dChkZXZfcHJpdiwgRk9SQ0VXQUtFX1JFTkRFUik7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgZ2VuOF9lbmRfY3R4X21taW8oc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlpZiAoV0FSTl9PTighaTkxNS5lbmFibGVfZXhlY2xp c3RzKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJSTkxNV9XUklURShHRU42X1JDX1NMRUVQX1BTTUlf Q09OVFJPTCwKPiArCQkgICBfTUFTS0VEX0JJVF9ESVNBQkxFKEdFTjZfUFNNSV9TTEVFUF9NU0df RElTQUJMRSkpOwo+ICsJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoZGV2X3ByaXYsIEZPUkNF V0FLRV9SRU5ERVIpOwo+ICt9Cj4gKwo+ICsvKiBNYW5hZ2VzIHVwZGF0aW5nIHRoZSBwZXItY29u dGV4dCBhc3BlY3RzIG9mIHRoZSBPQSBzdHJlYW0KPiArICogY29uZmlndXJhdGlvbiBhY3Jvc3Mg YWxsIGNvbnRleHRzLgo+ICsgKgo+ICsgKiBUaGUgYXdrd2FyZCBjb25zaWRlcmF0aW9uIGhlcmUg aXMgdGhhdCBPQUNUWENPTlRST0wgY29udHJvbHMgdGhlCj4gKyAqIGV4cG9uZW50IGZvciBwZXJp b2RpYyBzYW1wbGluZyB3aGljaCBpcyBwcmltYXJpbHkgdXNlZCBmb3Igc3lzdGVtCj4gKyAqIHdp ZGUgcHJvZmlsaW5nIHdoZXJlIHdlJ2QgbGlrZSBhIGNvbnNpc3RlbnQgc2FtcGxpbmcgcGVyaW9k IGV2ZW4gaW4KPiArICogdGhlIGZhY2Ugb2YgY29udGV4dCBzd2l0Y2hlcy4KPiArICoKPiArICog T3VyIGFwcHJvYWNoIG9mIHVwZGF0aW5nIHRoZSByZWdpc3RlciBzdGF0ZSBjb250ZXh0IChhcyBv cHBvc2VkIHRvCj4gKyAqIHNheSB1c2luZyBhIHdvcmthcm91bmQgYmF0Y2ggYnVmZmVyKSBlbnN1 cmVzIHRoYXQgdGhlIGhhcmR3YXJlCj4gKyAqIHdvbid0IGF1dG9tYXRpY2FsbHkgcmVsb2FkIGFu IG91dC1vZi1kYXRlIHRpbWVyIGV4cG9uZW50IGV2ZW4KPiArICogdHJhbnNpZW50bHkgYmVmb3Jl IGEgV0EgQkIgY291bGQgYmUgcGFyc2VkLgo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIG5lZWRz IHRvOgo+ICsgKiAtIEVuc3VyZSB0aGUgY3VycmVudGx5IHJ1bm5pbmcgY29udGV4dCdzIHBlci1j b250ZXh0IE9BIHN0YXRlIGlzCj4gKyAqICAgdXBkYXRlZAo+ICsgKiAtIEVuc3VyZSB0aGF0IGFs bCBleGlzdGluZyBjb250ZXh0cyB3aWxsIGhhdmUgdGhlIGNvcnJlY3QgcGVyLWNvbnRleHQKPiAr ICogICBPQSBzdGF0ZSBpZiB0aGV5IGFyZSBzY2hlZHVsZWQgZm9yIHVzZS4KPiArICogLSBFbnN1 cmUgYW55IG5ldyBjb250ZXh0cyB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggdGhlIGNvcnJlY3QK PiArICogICBwZXItY29udGV4dCBPQSBzdGF0ZS4KPiArICoKPiArICogTm90ZTogaXQncyBvbmx5 IHRoZSBSQ1MvUmVuZGVyIGNvbnRleHQgdGhhdCBoYXMgYW55IE9BIHN0YXRlLgo+ICsgKi8KPiAr c3RhdGljIGludCBnZW44X2NvbmZpZ3VyZV9hbGxfY29udGV4dHMoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4Owo+ ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBpOTE1X211dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgm ZGV2X3ByaXYtPmRybSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJLyog U2luY2UgZXhlY2xpc3Qgc3VibWlzc2lvbiBtYXkgYmUgaGFwcGVuaW5nIGFzeW5jaHJvbm91c2x5 IGhlcmUgdGhlbgo+ICsJICogd2UgZmlyc3QgbWFyayBleGlzdGluZyBjb250ZXh0cyBkaXJ0eSBi ZWZvcmUgd2UgdXBkYXRlIHRoZSBjdXJyZW50Cj4gKwkgKiBjb250ZXh0IHNvIGlmIGFueSBzd2l0 Y2hlcyBoYXBwZW4gaW4gdGhlIG1pZGRsZSB3ZSBjYW4gZXhwZWN0Cj4gKwkgKiB0aGF0IHRoZSBh Y3Qgb2Ygc2NoZWR1bGluZyB3aWxsIGhhdmUgaXRzZWxmIGVuc3VyZWQgYSBjb25zaXN0ZW50Cj4g KwkgKiBPQSBzdGF0ZSB1cGRhdGUuCj4gKwkgKi8KPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoY3R4 LCAmZGV2X3ByaXYtPmNvbnRleHRfbGlzdCwgbGluaykgewo+ICsJCS8qIFRoZSBhY3R1YWwgdXBk YXRlIG9mIHRoZSByZWdpc3RlciBzdGF0ZSBjb250ZXh0IHdpbGwgaGFwcGVuCj4gKwkJICogdGhl IG5leHQgdGltZSB0aGlzIGxvZ2ljYWwgcmluZyBpcyBzdWJtaXR0ZWQuIChTZWUKPiArCQkgKiBp OTE1X29hX3VwZGF0ZV9yZWdfc3RhdGUoKSB3aGljaCBob29rcyBpbnRvCj4gKwkJICogZXhlY2xp c3RzX3VwZGF0ZV9jb250ZXh0KCkpCj4gKwkJICovCj4gKwkJYXRvbWljX3NldCgmY3R4LT5lbmdp bmVbUkNTXS5vYV9zdGF0ZV9kaXJ0eSwgMSk7Cj4gKwl9Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZk ZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwo+ICsJLyogTm93IHVwZGF0ZSB0aGUgY3Vy cmVudCBjb250ZXh0Lgo+ICsJICoKPiArCSAqIE5vdGU6IFVzaW5nIE1NSU8gdG8gdXBkYXRlIHBl ci1jb250ZXh0IHJlZ2lzdGVycyByZXF1aXJlcwo+ICsJICogc29tZSBleHRyYSBjYXJlLi4uCj4g KwkgKi8KPiArCXJldCA9IGdlbjhfYmVnaW5fY3R4X21taW8oZGV2X3ByaXYpOwo+ICsJaWYgKHJl dCkgewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGJyaW5nIFJDUyBvdXQgb2YgaWRsZSB0byB1 cGRhdGUgY3VycmVudCBjdHggT0Egc3RhdGVcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4g Kwo+ICsJSTkxNV9XUklURShHRU44X09BQ1RYQ09OVFJPTCwgKChkZXZfcHJpdi0+cGVyZi5vYS5w ZXJpb2RfZXhwb25lbnQgPDwKPiArCQkJCQlHRU44X09BX1RJTUVSX1BFUklPRF9TSElGVCkgfAo+ ICsJCQkJICAgICAgKGRldl9wcml2LT5wZXJmLm9hLnBlcmlvZGljID8KPiArCQkJCSAgICAgICBH RU44X09BX1RJTUVSX0VOQUJMRSA6IDApIHwKPiArCQkJCSAgICAgIEdFTjhfT0FfQ09VTlRFUl9S RVNVTUUpKTsKPiArCj4gKwljb25maWdfb2FfcmVncyhkZXZfcHJpdiwgZGV2X3ByaXYtPnBlcmYu b2EuZmxleF9yZWdzLAo+ICsJCQlkZXZfcHJpdi0+cGVyZi5vYS5mbGV4X3JlZ3NfbGVuKTsKPiAr Cj4gKwlnZW44X2VuZF9jdHhfbW1pbyhkZXZfcHJpdik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgZ2VuOF9lbmFibGVfbWV0cmljX3NldChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCWludCByZXQgPSBkZXZfcHJpdi0+cGVyZi5vYS5v cHMuc2VsZWN0X21ldHJpY19zZXQoZGV2X3ByaXYpOwo+ICsKPiArCWlmIChyZXQpCj4gKwkJcmV0 dXJuIHJldDsKPiArCj4gKwkvKiBXZSBkaXNhYmxlIHNsaWNlL3Vuc2xpY2UgY2xvY2sgcmF0aW8g Y2hhbmdlIHJlcG9ydHMgb24gU0tMIHNpbmNlCj4gKwkgKiB0aGV5IGFyZSB0b28gbm9pc3kuIFRo ZSBIVyBnZW5lcmF0ZXMgYSBsb3Qgb2YgcmVkdW5kYW50IHJlcG9ydHMKPiArCSAqIHdoZXJlIHRo ZSByYXRpbyBoYXNuJ3QgcmVhbGx5IGNoYW5nZWQgY2F1c2luZyBhIGxvdCBvZiByZWR1bmRhbnQK PiArCSAqIHdvcmsgdG8gcHJvY2Vzc2VzIGFuZCBpbmNyZWFzaW5nIHRoZSBjaGFuY2VzIHdlJ2xs IGhpdCBidWZmZXIKPiArCSAqIG92ZXJydW5zLgo+ICsJICoKPiArCSAqIEFsdGhvdWdoIHdlIGRv bid0IGN1cnJlbnRseSB1c2UgdGhlICdkaXNhYmxlIG92ZXJydW4nIE9BQlVGRkVSCj4gKwkgKiBm ZWF0dXJlIGl0J3Mgd29ydGggbm90aW5nIHRoYXQgY2xvY2sgcmF0aW8gcmVwb3J0cyBoYXZlIHRv IGJlCj4gKwkgKiBkaXNhYmxlZCBiZWZvcmUgY29uc2lkZXJpbmcgdG8gdXNlIHRoYXQgZmVhdHVy ZSBzaW5jZSB0aGUgSFcgZG9lc24ndAo+ICsJICogY29ycmVjdGx5IGJsb2NrIHRoZXNlIHJlcG9y dHMuCj4gKwkgKgo+ICsJICogQ3VycmVudGx5IG5vbmUgb2YgdGhlIGhpZ2gtbGV2ZWwgbWV0cmlj cyB3ZSBoYXZlIGRlcGVuZCBvbiBrbm93aW5nCj4gKwkgKiB0aGlzIHJhdGlvIHRvIG5vcm1hbGl6 ZS4KPiArCSAqCj4gKwkgKiBOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIG5vdCBwb3dlciBjb250ZXh0 IHNhdmVkIGFuZCByZXN0b3JlZCwgYnV0Cj4gKwkgKiB0aGF0J3MgT0sgY29uc2lkZXJpbmcgdGhh dCB3ZSBkaXNhYmxlIFJDNiB3aGlsZSB0aGUgT0EgdW5pdCBpcwo+ICsJICogZW5hYmxlZC4KPiAr CSAqCj4gKwkgKiBUaGUgX0lOQ0xVREVfQ0xLX1JBVElPIGJpdCBhbGxvd3MgdGhlIHNsaWNlL3Vu c2xpY2UgZnJlcXVlbmN5IHRvCj4gKwkgKiBiZSByZWFkIGJhY2sgZnJvbSBhdXRvbWF0aWNhbGx5 IHRyaWdnZXJlZCByZXBvcnRzLCBhcyBwYXJ0IG9mIHRoZQo+ICsJICogUlBUX0lEIGZpZWxkLgo+ ICsJICovCj4gKwlpZiAoSVNfU0tZTEFLRShkZXZfcHJpdikgfHwgSVNfQlJPWFRPTihkZXZfcHJp dikpIHsKPiArCQlJOTE1X1dSSVRFKEdFTjhfT0FfREVCVUcsCj4gKwkJCSAgIF9NQVNLRURfQklU X0VOQUJMRShHRU45X09BX0RFQlVHX0RJU0FCTEVfQ0xLX1JBVElPX1JFUE9SVFMgfAo+ICsJCQkJ CSAgICAgIEdFTjlfT0FfREVCVUdfSU5DTFVERV9DTEtfUkFUSU8pKTsKPiArCX0KPiArCj4gKwlJ OTE1X1dSSVRFKEdEVF9DSElDS0VOX0JJVFMsIDB4QTApOwo+ICsJY29uZmlnX29hX3JlZ3MoZGV2 X3ByaXYsIGRldl9wcml2LT5wZXJmLm9hLm11eF9yZWdzLAo+ICsJCSAgICAgICBkZXZfcHJpdi0+ cGVyZi5vYS5tdXhfcmVnc19sZW4pOwo+ICsJSTkxNV9XUklURShHRFRfQ0hJQ0tFTl9CSVRTLCAw eDgwKTsKPiArCj4gKwkvKiBJdCB0YWtlcyBhIGZhaXJseSBsb25nIHRpbWUgZm9yIGEgbmV3IE1V WCBjb25maWd1cmF0aW9uIHRvCj4gKwkgKiBiZSBiZSBhcHBsaWVkIGFmdGVyIHRoZXNlIHJlZ2lz dGVyIHdyaXRlcy4gVGhpcyBkZWxheQo+ICsJICogZHVyYXRpb24gaXMgdGFrZSBmcm9tIEhhc3dl bGwgKGRlcml2ZWQgZW1waXJpY2FsbHkgYmFzZWQgb24KPiArCSAqIHRoZSByZW5kZXJfYmFzaWMg Y29uZmlnKSBidXQgaG9wZWZ1bGx5IGl0IGNvdmVycyB0aGUKPiArCSAqIG1heGltdW0gY29uZmln dXJhdGlvbiBsYXRlbmN5IGZvciBHZW44KyB0b28uLi4KPiArCSAqLwo+ICsJdXNsZWVwX3Jhbmdl KDE1MDAwLCAyMDAwMCk7Cj4gKwo+ICsJY29uZmlnX29hX3JlZ3MoZGV2X3ByaXYsIGRldl9wcml2 LT5wZXJmLm9hLmJfY291bnRlcl9yZWdzLAo+ICsJCSAgICAgICBkZXZfcHJpdi0+cGVyZi5vYS5i X2NvdW50ZXJfcmVnc19sZW4pOwo+ICsKPiArCXJldCA9IGdlbjhfY29uZmlndXJlX2FsbF9jb250 ZXh0cyhkZXZfcHJpdik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGdlbjhfZGlzYWJsZV9tZXRyaWNfc2V0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJLyogTk9QICovCj4gK30K PiArCj4gICBzdGF0aWMgdm9pZCBnZW43X3VwZGF0ZV9vYWNvbnRyb2xfbG9ja2VkKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgIHsKPiAgIAlsb2NrZGVwX2Fzc2VydF9oZWxk KCZkZXZfcHJpdi0+cGVyZi5ob29rX2xvY2spOwo+IEBAIC0xMTU3LDYgKzE3MjEsMjkgQEAgc3Rh dGljIHZvaWQgZ2VuN19vYV9lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+ICAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5wZXJmLmhvb2tfbG9jaywg ZmxhZ3MpOwo+ICAgfQo+ICAgCj4gK3N0YXRpYyB2b2lkIGdlbjhfb2FfZW5hYmxlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJdTMyIHJlcG9ydF9mb3JtYXQgPSBk ZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuZm9ybWF0Owo+ICsKPiArCS8qIFJlc2V0IGJ1ZiBw b2ludGVycyBzbyB3ZSBkb24ndCBmb3J3YXJkIHJlcG9ydHMgZnJvbSBiZWZvcmUgbm93Lgo+ICsJ ICoKPiArCSAqIFRoaW5rIGNhcmVmdWxseSBpZiBjb25zaWRlcmluZyB0cnlpbmcgdG8gYXZvaWQg dGhpcywgc2luY2UgaXQKPiArCSAqIGFsc28gZW5zdXJlcyBzdGF0dXMgZmxhZ3MgYW5kIHRoZSBi dWZmZXIgaXRzZWxmIGFyZSBjbGVhcmVkCj4gKwkgKiBpbiBlcnJvciBwYXRocywgYW5kIHdlIGhh dmUgY2hlY2tzIGZvciBpbnZhbGlkIHJlcG9ydHMgYmFzZWQKPiArCSAqIG9uIHRoZSBhc3N1bXB0 aW9uIHRoYXQgY2VydGFpbiBmaWVsZHMgYXJlIHdyaXR0ZW4gdG8gemVyb2VkCj4gKwkgKiBtZW1v cnkgd2hpY2ggdGhpcyBoZWxwcyBtYWludGFpbnMuCj4gKwkgKi8KPiArCWdlbjhfaW5pdF9vYV9i dWZmZXIoZGV2X3ByaXYpOwo+ICsKPiArCS8qIE5vdGU6IHdlIGRvbid0IHJlbHkgb24gdGhlIGhh cmR3YXJlIHRvIHBlcmZvcm0gc2luZ2xlIGNvbnRleHQKPiArCSAqIGZpbHRlcmluZyBhbmQgaW5z dGVhZCBmaWx0ZXIgb24gdGhlIGNwdSBiYXNlZCBvbiB0aGUgY29udGV4dC1pZAo+ICsJICogZmll bGQgb2YgcmVwb3J0cwo+ICsJICovCj4gKwlJOTE1X1dSSVRFKEdFTjhfT0FDT05UUk9MLCAocmVw b3J0X2Zvcm1hdCA8PAo+ICsJCQkJICAgIEdFTjhfT0FfUkVQT1JUX0ZPUk1BVF9TSElGVCkgfAo+ ICsJCQkJICAgR0VOOF9PQV9DT1VOVEVSX0VOQUJMRSk7Cj4gK30KPiArCj4gICAvKioKPiAgICAq IGk5MTVfb2Ffc3RyZWFtX2VuYWJsZSAtIGhhbmRsZSBgSTkxNV9QRVJGX0lPQ1RMX0VOQUJMRWAg Zm9yIE9BIHN0cmVhbQo+ICAgICogQHN0cmVhbTogQW4gaTkxNSBwZXJmIHN0cmVhbSBvcGVuZWQg Zm9yIE9BIG1ldHJpY3MKPiBAQCAtMTE4Myw2ICsxNzcwLDExIEBAIHN0YXRpYyB2b2lkIGdlbjdf b2FfZGlzYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gICAJSTkxNV9X UklURShHRU43X09BQ09OVFJPTCwgMCk7Cj4gICB9Cj4gICAKPiArc3RhdGljIHZvaWQgZ2VuOF9v YV9kaXNhYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJSTkx NV9XUklURShHRU44X09BQ09OVFJPTCwgMCk7Cj4gK30KPiArCj4gICAvKioKPiAgICAqIGk5MTVf b2Ffc3RyZWFtX2Rpc2FibGUgLSBoYW5kbGUgYEk5MTVfUEVSRl9JT0NUTF9ESVNBQkxFYCBmb3Ig T0Egc3RyZWFtCj4gICAgKiBAc3RyZWFtOiBBbiBpOTE1IHBlcmYgc3RyZWFtIG9wZW5lZCBmb3Ig T0EgbWV0cmljcwo+IEBAIC0xMzYxLDYgKzE5NTMsODggQEAgc3RhdGljIGludCBpOTE1X29hX3N0 cmVhbV9pbml0KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCj4gICAJcmV0dXJuIHJl dDsKPiAgIH0KPiAgIAo+ICsvKiBOQjogSXQgbXVzdCBhbHdheXMgcmVtYWluIHBvaW50ZXIgc2Fm ZSB0byBydW4gdGhpcyBldmVuIGlmIHRoZSBPQSB1bml0Cj4gKyAqIGhhcyBiZWVuIGRpc2FibGVk Lgo+ICsgKgo+ICsgKiBJdCdzIGZpbmUgdG8gcHV0IG91dC1vZi1kYXRlIHZhbHVlcyBpbnRvIHRo ZXNlIHBlci1jb250ZXh0IHJlZ2lzdGVycwo+ICsgKiBpbiB0aGUgY2FzZSB0aGF0IHRoZSBPQSB1 bml0IGhhcyBiZWVuIGRpc2FibGVkLgo+ICsgKi8KPiArc3RhdGljIHZvaWQgZ2VuOF91cGRhdGVf cmVnX3N0YXRlX3VubG9ja2VkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiArCQkJ CQkgICBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+ICsJCQkJCSAgIHUzMiAqcmVnX3N0 YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmk5 MTU7Cj4gKwljb25zdCBzdHJ1Y3QgaTkxNV9vYV9yZWcgKmZsZXhfcmVncyA9IGRldl9wcml2LT5w ZXJmLm9hLmZsZXhfcmVnczsKPiArCWludCBuX2ZsZXhfcmVncyA9IGRldl9wcml2LT5wZXJmLm9h LmZsZXhfcmVnc19sZW47Cj4gKwl1MzIgY3R4X29hY3R4Y3RybCA9IGRldl9wcml2LT5wZXJmLm9h LmN0eF9vYWN0eGN0cmxfb2Zmc2V0Owo+ICsJdTMyIGN0eF9mbGV4ZXUwID0gZGV2X3ByaXYtPnBl cmYub2EuY3R4X2ZsZXhldTBfb2Zmc2V0Owo+ICsJLyogVGhlIE1NSU8gb2Zmc2V0cyBmb3IgRmxl eCBFVSByZWdpc3RlcnMgYXJlbid0IGNvbnRpZ3VvdXMgKi8KPiArCXUzMiBmbGV4X21taW9bXSA9 IHsKPiArCQlpOTE1X21taW9fcmVnX29mZnNldChFVV9QRVJGX0NOVEwwKSwKPiArCQlpOTE1X21t aW9fcmVnX29mZnNldChFVV9QRVJGX0NOVEwxKSwKPiArCQlpOTE1X21taW9fcmVnX29mZnNldChF VV9QRVJGX0NOVEwyKSwKPiArCQlpOTE1X21taW9fcmVnX29mZnNldChFVV9QRVJGX0NOVEwzKSwK PiArCQlpOTE1X21taW9fcmVnX29mZnNldChFVV9QRVJGX0NOVEw0KSwKPiArCQlpOTE1X21taW9f cmVnX29mZnNldChFVV9QRVJGX0NOVEw1KSwKPiArCQlpOTE1X21taW9fcmVnX29mZnNldChFVV9Q RVJGX0NOVEw2KSwKPiArCX07Cj4gKwlpbnQgaTsKPiArCj4gKwlyZWdfc3RhdGVbY3R4X29hY3R4 Y3RybF0gPSBpOTE1X21taW9fcmVnX29mZnNldChHRU44X09BQ1RYQ09OVFJPTCk7Cj4gKwlyZWdf c3RhdGVbY3R4X29hY3R4Y3RybCsxXSA9IChkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2RfZXhwb25l bnQgPDwKPiArCQkJCSAgICAgIEdFTjhfT0FfVElNRVJfUEVSSU9EX1NISUZUKSB8Cj4gKwkJCQkg ICAgIChkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2RpYyA/Cj4gKwkJCQkgICAgICBHRU44X09BX1RJ TUVSX0VOQUJMRSA6IDApIHwKPiArCQkJCSAgICAgR0VOOF9PQV9DT1VOVEVSX1JFU1VNRTsKPiAr Cj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmbGV4X21taW8pOyBpKyspIHsKPiArCQl1 MzIgc3RhdGVfb2Zmc2V0ID0gY3R4X2ZsZXhldTAgKyBpICogMjsKPiArCQl1MzIgbW1pbyA9IGZs ZXhfbW1pb1tpXTsKPiArCj4gKwkJLyogVGhpcyBhcmJpdHJhcnkgZGVmYXVsdCB3aWxsIHNlbGVj dCB0aGUgJ0VVIEZQVTAgUGlwZWxpbmUKPiArCQkgKiBBY3RpdmUnIGV2ZW50LiBJbiB0aGUgZnV0 dXJlIGl0J3MgYW50aWNpcGF0ZWQgdGhhdCB0aGVyZQo+ICsJCSAqIHdpbGwgYmUgYW4gZXhwbGlj aXQgJ05vIEV2ZW50JyB3ZSBjYW4gc2VsZWN0LCBidXQgbm90IHlldC4uLgo+ICsJCSAqLwo+ICsJ CXUzMiB2YWx1ZSA9IDA7Cj4gKwkJaW50IGo7Cj4gKwo+ICsJCWZvciAoaiA9IDA7IGogPCBuX2Zs ZXhfcmVnczsgaisrKSB7Cj4gKwkJCWlmIChpOTE1X21taW9fcmVnX29mZnNldChmbGV4X3JlZ3Nb al0uYWRkcikgPT0gbW1pbykgewo+ICsJCQkJdmFsdWUgPSBmbGV4X3JlZ3Nbal0udmFsdWU7Cj4g KwkJCQlicmVhazsKPiArCQkJfQo+ICsJCX0KPiArCj4gKwkJcmVnX3N0YXRlW3N0YXRlX29mZnNl dF0gPSBtbWlvOwo+ICsJCXJlZ19zdGF0ZVtzdGF0ZV9vZmZzZXQrMV0gPSB2YWx1ZTsKPiArCX0K PiArfQo+ICsKPiArdm9pZCBpOTE1X29hX3VwZGF0ZV9yZWdfc3RhdGUoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lLAo+ICsJCQkgICAgICBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4 LAo+ICsJCQkgICAgICB1MzIgKnJlZ19zdGF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1Owo+ICsKPiArCWlmIChlbmdpbmUtPmlkICE9 IFJDUykKPiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKCFkZXZfcHJpdi0+cGVyZi5pbml0aWFsaXpl ZCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJLyogWFhYOiBXZSBkb24ndCB0YWtlIGEgbG9jayBoZXJl IGFuZCB0aGlzIG1heSBydW4gYXN5bmMgd2l0aAo+ICsJICogcmVzcGVjdCB0byBzdHJlYW0gbWV0 aG9kcy4gTm90YWJseSB3ZSBkb24ndCB3YW50IHRvIGJsb2NrCj4gKwkgKiBjb250ZXh0IHN3aXRj aGVzIGJ5IGxvbmcgaTkxNSBwZXJmIHJlYWQoKSBvcGVyYXRpb25zLgo+ICsJICoKPiArCSAqIEl0 J3MgZXhwZWN0ZWQgdG8gYWx3YXlzIGJlIHNhZmUgdG8gcmVhZCB0aGUgZGV2X3ByaXYtPnBlcmYK PiArCSAqIHN0YXRlIG5lZWRlZCBoZXJlLCBhbmQgZXhwZWN0ZWQgdG8gYmUgYmVuaWduIHRvIHJl ZHVuZGFudGx5Cj4gKwkgKiB1cGRhdGUgdGhlIHN0YXRlIGlmIHRoZSBPQSB1bml0IGhhcyBiZWVu IGRpc2FibGVkIHNpbmNlCj4gKwkgKiBvYV9zdGF0ZV9kaXJ0eSB3YXMgbGFzdCBzZXQuCj4gKwkg Ki8KPiArCWlmIChhdG9taWNfY21weGNoZygmY3R4LT5lbmdpbmVbZW5naW5lLT5pZF0ub2Ffc3Rh dGVfZGlydHksIDEsIDApKQo+ICsJCWdlbjhfdXBkYXRlX3JlZ19zdGF0ZV91bmxvY2tlZChlbmdp bmUsIGN0eCwgcmVnX3N0YXRlKTsKPiArfQo+ICsKPiAgIC8qKgo+ICAgICogaTkxNV9wZXJmX3Jl YWRfbG9ja2VkIC0gJmk5MTVfcGVyZl9zdHJlYW1fb3BzLT5yZWFkIHdpdGggZXJyb3Igbm9ybWFs aXNhdGlvbgo+ICAgICogQHN0cmVhbTogQW4gaTkxNSBwZXJmIHN0cmVhbQo+IEBAIC0xNDg2LDcg KzIxNjAsNyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgb2FfcG9sbF9jaGVja190aW1l cl9jYihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikKPiAgIAkJY29udGFpbmVyX29mKGhydGltZXIs IHR5cGVvZigqZGV2X3ByaXYpLAo+ICAgCQkJICAgICBwZXJmLm9hLnBvbGxfY2hlY2tfdGltZXIp Owo+ICAgCj4gLQlpZiAoZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2J1ZmZlcl9jaGVjayhkZXZf cHJpdikpIHsKPiArCWlmIChvYV9idWZmZXJfY2hlY2tfdW5sb2NrZWQoZGV2X3ByaXYpKSB7Cj4g ICAJCWRldl9wcml2LT5wZXJmLm9hLnBvbGxpbiA9IHRydWU7Cj4gICAJCXdha2VfdXAoJmRldl9w cml2LT5wZXJmLm9hLnBvbGxfd3EpOwo+ICAgCX0KPiBAQCAtMTc3NSw2ICsyNDQ5LDcgQEAgaTkx NV9wZXJmX29wZW5faW9jdGxfbG9ja2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKPiAgIAlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqc3BlY2lmaWNfY3R4ID0gTlVMTDsKPiAg IAlzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtID0gTlVMTDsKPiAgIAl1bnNpZ25lZCBs b25nIGZfZmxhZ3MgPSAwOwo+ICsJYm9vbCBwcml2aWxlZ2VkX29wID0gdHJ1ZTsKPiAgIAlpbnQg c3RyZWFtX2ZkOwo+ICAgCWludCByZXQ7Cj4gICAKPiBAQCAtMTc5MiwxMiArMjQ2NywyOCBAQCBp OTE1X3BlcmZfb3Blbl9pb2N0bF9sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAo+ICAgCQl9Cj4gICAJfQo+ICAgCj4gKwkvKiBPbiBIYXN3ZWxsIHRoZSBPQSB1bml0IHN1 cHBvcnRzIGNsb2NrIGdhdGluZyBvZmYgZm9yIGEgc3BlY2lmaWMKPiArCSAqIGNvbnRleHQgYW5k IGluIHRoaXMgbW9kZSB0aGVyZSdzIG5vIHZpc2liaWxpdHkgb2YgbWV0cmljcyBmb3IgdGhlCj4g KwkgKiByZXN0IG9mIHRoZSBzeXN0ZW0sIHdoaWNoIHdlIGNvbnNpZGVyIGFjY2VwdGFibGUgZm9y IGEKPiArCSAqIG5vbi1wcml2aWxlZ2VkIGNsaWVudC4KPiArCSAqCj4gKwkgKiBGb3IgR2VuOCsg dGhlIE9BIHVuaXQgbm8gbG9uZ2VyIHN1cHBvcnRzIGNsb2NrIGdhdGluZyBvZmYgZm9yIGEKPiAr CSAqIHNwZWNpZmljIGNvbnRleHQgYW5kIHRoZSBrZXJuZWwgY2FuJ3Qgc2VjdXJlbHkgc3RvcCB0 aGUgY291bnRlcnMKPiArCSAqIGZyb20gdXBkYXRpbmcgYXMgc3lzdGVtLXdpZGUgLyBnbG9iYWwg dmFsdWVzLiBFdmVuIHRob3VnaCB3ZSBjYW4KPiArCSAqIGZpbHRlciByZXBvcnRzIGJhc2VkIG9u IHRoZSBpbmNsdWRlZCBjb250ZXh0IElEIHdlIGNhbid0IGJsb2NrCj4gKwkgKiBjbGllbnRzIGZy b20gc2VlaW5nIHRoZSByYXcgLyBnbG9iYWwgY291bnRlciB2YWx1ZXMgdmlhCj4gKwkgKiBNSV9S RVBPUlRfUEVSRl9DT1VOVCBjb21tYW5kcyBhbmQgc28gY29uc2lkZXIgaXQgYSBwcml2aWxlZ2Vk IG9wIHRvCj4gKwkgKiBlbmFibGUgdGhlIE9BIHVuaXQgYnkgZGVmYXVsdC4KPiArCSAqLwo+ICsJ aWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpICYmIHNwZWNpZmljX2N0eCkKPiArCQlwcml2aWxlZ2Vk X29wID0gZmFsc2U7Cj4gKwo+ICAgCS8qIFNpbWlsYXIgdG8gcGVyZidzIGtlcm5lbC5wZXJmX3Bh cmFub2lkX2NwdSBzeXNjdGwgb3B0aW9uCj4gICAJICogd2UgY2hlY2sgYSBkZXYuaTkxNS5wZXJm X3N0cmVhbV9wYXJhbm9pZCBzeXNjdGwgb3B0aW9uCj4gICAJICogdG8gZGV0ZXJtaW5lIGlmIGl0 J3Mgb2sgdG8gYWNjZXNzIHN5c3RlbSB3aWRlIE9BIGNvdW50ZXJzCj4gICAJICogd2l0aG91dCBD QVBfU1lTX0FETUlOIHByaXZpbGVnZXMuCj4gICAJICovCj4gLQlpZiAoIXNwZWNpZmljX2N0eCAm Jgo+ICsJaWYgKHByaXZpbGVnZWRfb3AgJiYKPiAgIAkgICAgaTkxNV9wZXJmX3N0cmVhbV9wYXJh bm9pZCAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgewo+ICAgCQlEUk1fREVCVUcoIkluc3Vm ZmljaWVudCBwcml2aWxlZ2VzIHRvIG9wZW4gc3lzdGVtLXdpZGUgaTkxNSBwZXJmIHN0cmVhbVxu Iik7Cj4gICAJCXJldCA9IC1FQUNDRVM7Cj4gQEAgLTIwNjksOSArMjc2MCw2IEBAIGludCBpOTE1 X3BlcmZfb3Blbl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAg ICovCj4gICB2b2lkIGk5MTVfcGVyZl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCj4gICB7Cj4gLQlpZiAoIUlTX0hBU1dFTEwoZGV2X3ByaXYpKQo+IC0JCXJldHVy bjsKPiAtCj4gICAJaWYgKCFkZXZfcHJpdi0+cGVyZi5pbml0aWFsaXplZCkKPiAgIAkJcmV0dXJu Owo+ICAgCj4gQEAgLTIwODcsMTEgKzI3NzUsMzggQEAgdm9pZCBpOTE1X3BlcmZfcmVnaXN0ZXIo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAgCWlmICghZGV2X3ByaXYtPnBl cmYubWV0cmljc19rb2JqKQo+ICAgCQlnb3RvIGV4aXQ7Cj4gICAKPiAtCWlmIChpOTE1X3BlcmZf cmVnaXN0ZXJfc3lzZnNfaHN3KGRldl9wcml2KSkgewo+IC0JCWtvYmplY3RfcHV0KGRldl9wcml2 LT5wZXJmLm1ldHJpY3Nfa29iaik7Cj4gLQkJZGV2X3ByaXYtPnBlcmYubWV0cmljc19rb2JqID0g TlVMTDsKPiArCWlmIChJU19IQVNXRUxMKGRldl9wcml2KSkgewo+ICsJCWlmIChpOTE1X3BlcmZf cmVnaXN0ZXJfc3lzZnNfaHN3KGRldl9wcml2KSkKPiArCQkJZ290byBzeXNmc19lcnJvcjsKPiAr CX0gZWxzZSBpZiAoSVNfQlJPQURXRUxMKGRldl9wcml2KSkgewo+ICsJCWlmIChpOTE1X3BlcmZf cmVnaXN0ZXJfc3lzZnNfYmR3KGRldl9wcml2KSkKPiArCQkJZ290byBzeXNmc19lcnJvcjsKPiAr CX0gZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpIHsKPiArCQlpZiAoaTkxNV9wZXJm X3JlZ2lzdGVyX3N5c2ZzX2NodihkZXZfcHJpdikpCj4gKwkJCWdvdG8gc3lzZnNfZXJyb3I7Cj4g Kwl9IGVsc2UgaWYgKElTX1NLWUxBS0UoZGV2X3ByaXYpKSB7Cj4gKwkJaWYgKElTX1NLTF9HVDIo ZGV2X3ByaXYpKSB7Cj4gKwkJCWlmIChpOTE1X3BlcmZfcmVnaXN0ZXJfc3lzZnNfc2tsZ3QyKGRl dl9wcml2KSkKPiArCQkJCWdvdG8gc3lzZnNfZXJyb3I7Cj4gKwkJfSBlbHNlIGlmIChJU19TS0xf R1QzKGRldl9wcml2KSkgewo+ICsJCQlpZiAoaTkxNV9wZXJmX3JlZ2lzdGVyX3N5c2ZzX3NrbGd0 MyhkZXZfcHJpdikpCj4gKwkJCQlnb3RvIHN5c2ZzX2Vycm9yOwo+ICsJCX0gZWxzZSBpZiAoSVNf U0tMX0dUNChkZXZfcHJpdikpIHsKPiArCQkJaWYgKGk5MTVfcGVyZl9yZWdpc3Rlcl9zeXNmc19z a2xndDQoZGV2X3ByaXYpKQo+ICsJCQkJZ290byBzeXNmc19lcnJvcjsKPiArCQl9IGVsc2UKPiAr CQkJZ290byBzeXNmc19lcnJvcjsKPiArCX0gZWxzZSBpZiAoSVNfQlJPWFRPTihkZXZfcHJpdikp IHsKPiArCQlpZiAoaTkxNV9wZXJmX3JlZ2lzdGVyX3N5c2ZzX2J4dChkZXZfcHJpdikpCj4gKwkJ CWdvdG8gc3lzZnNfZXJyb3I7Cj4gICAJfQo+ICAgCj4gKwlnb3RvIGV4aXQ7Cj4gKwo+ICtzeXNm c19lcnJvcjoKPiArCWtvYmplY3RfcHV0KGRldl9wcml2LT5wZXJmLm1ldHJpY3Nfa29iaik7Cj4g KwlkZXZfcHJpdi0+cGVyZi5tZXRyaWNzX2tvYmogPSBOVUxMOwo+ICsKPiAgIGV4aXQ6Cj4gICAJ bXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5sb2NrKTsKPiAgIH0KPiBAQCAtMjEwNywxMyAr MjgyMiwyNCBAQCB2b2lkIGk5MTVfcGVyZl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCj4gICAgKi8KPiAgIHZvaWQgaTkxNV9wZXJmX3VucmVnaXN0ZXIoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAgewo+IC0JaWYgKCFJU19IQVNXRUxMKGRl dl9wcml2KSkKPiAtCQlyZXR1cm47Cj4gLQo+ICAgCWlmICghZGV2X3ByaXYtPnBlcmYubWV0cmlj c19rb2JqKQo+ICAgCQlyZXR1cm47Cj4gICAKPiAtCWk5MTVfcGVyZl91bnJlZ2lzdGVyX3N5c2Zz X2hzdyhkZXZfcHJpdik7Cj4gKyAgICAgICAgaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpKQo+ICsg ICAgICAgICAgICAgICAgaTkxNV9wZXJmX3VucmVnaXN0ZXJfc3lzZnNfaHN3KGRldl9wcml2KTsK PiArICAgICAgICBlbHNlIGlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYpKQo+ICsgICAgICAgICAg ICAgICAgaTkxNV9wZXJmX3VucmVnaXN0ZXJfc3lzZnNfYmR3KGRldl9wcml2KTsKPiArICAgICAg ICBlbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKPiArICAgICAgICAgICAgICAgIGk5 MTVfcGVyZl91bnJlZ2lzdGVyX3N5c2ZzX2NodihkZXZfcHJpdik7Cj4gKyAgICAgICAgZWxzZSBp ZiAoSVNfU0tZTEFLRShkZXZfcHJpdikpIHsKPiArCQlpZiAoSVNfU0tMX0dUMihkZXZfcHJpdikp Cj4gKwkJCWk5MTVfcGVyZl91bnJlZ2lzdGVyX3N5c2ZzX3NrbGd0MihkZXZfcHJpdik7Cj4gKwkJ ZWxzZSBpZiAoSVNfU0tMX0dUMyhkZXZfcHJpdikpCj4gKwkJCWk5MTVfcGVyZl91bnJlZ2lzdGVy X3N5c2ZzX3NrbGd0MyhkZXZfcHJpdik7Cj4gKwkJZWxzZSBpZiAoSVNfU0tMX0dUNChkZXZfcHJp dikpCj4gKwkJCWk5MTVfcGVyZl91bnJlZ2lzdGVyX3N5c2ZzX3NrbGd0NChkZXZfcHJpdik7Cj4g Kwl9IGVsc2UgaWYgKElTX0JST1hUT04oZGV2X3ByaXYpKQo+ICsgICAgICAgICAgICAgICAgaTkx NV9wZXJmX3VucmVnaXN0ZXJfc3lzZnNfYnh0KGRldl9wcml2KTsKPiAgIAo+ICAgCWtvYmplY3Rf cHV0KGRldl9wcml2LT5wZXJmLm1ldHJpY3Nfa29iaik7Cj4gICAJZGV2X3ByaXYtPnBlcmYubWV0 cmljc19rb2JqID0gTlVMTDsKPiBAQCAtMjE3MiwzNiArMjg5OCwxMDUgQEAgc3RhdGljIHN0cnVj dCBjdGxfdGFibGUgZGV2X3Jvb3RbXSA9IHsKPiAgICAqLwo+ICAgdm9pZCBpOTE1X3BlcmZfaW5p dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gICB7Cj4gLQlpZiAoIUlTX0hB U1dFTEwoZGV2X3ByaXYpKQo+IC0JCXJldHVybjsKPiAtCj4gLQlocnRpbWVyX2luaXQoJmRldl9w cml2LT5wZXJmLm9hLnBvbGxfY2hlY2tfdGltZXIsCj4gLQkJICAgICBDTE9DS19NT05PVE9OSUMs IEhSVElNRVJfTU9ERV9SRUwpOwo+IC0JZGV2X3ByaXYtPnBlcmYub2EucG9sbF9jaGVja190aW1l ci5mdW5jdGlvbiA9IG9hX3BvbGxfY2hlY2tfdGltZXJfY2I7Cj4gLQlpbml0X3dhaXRxdWV1ZV9o ZWFkKCZkZXZfcHJpdi0+cGVyZi5vYS5wb2xsX3dxKTsKPiArCWRldl9wcml2LT5wZXJmLm9hLm5f YnVpbHRpbl9zZXRzID0gMDsKPiArCj4gKwlpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikpIHsKPiAr CQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMuaW5pdF9vYV9idWZmZXIgPSBnZW43X2luaXRfb2FfYnVm ZmVyOwo+ICsJCWRldl9wcml2LT5wZXJmLm9hLm9wcy5lbmFibGVfbWV0cmljX3NldCA9IGhzd19l bmFibGVfbWV0cmljX3NldDsKPiArCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMuZGlzYWJsZV9tZXRy aWNfc2V0ID0gaHN3X2Rpc2FibGVfbWV0cmljX3NldDsKPiArCQlkZXZfcHJpdi0+cGVyZi5vYS5v cHMub2FfZW5hYmxlID0gZ2VuN19vYV9lbmFibGU7Cj4gKwkJZGV2X3ByaXYtPnBlcmYub2Eub3Bz Lm9hX2Rpc2FibGUgPSBnZW43X29hX2Rpc2FibGU7Cj4gKwkJZGV2X3ByaXYtPnBlcmYub2Eub3Bz LnJlYWQgPSBnZW43X29hX3JlYWQ7Cj4gKwkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2h3X3Rh aWxfcmVhZCA9Cj4gKwkJCWdlbjdfb2FfaHdfdGFpbF9yZWFkOwo+ICsKPiArCQlkZXZfcHJpdi0+ cGVyZi5vYS5vYV9mb3JtYXRzID0gaHN3X29hX2Zvcm1hdHM7Cj4gKwo+ICsJCWRldl9wcml2LT5w ZXJmLm9hLm5fYnVpbHRpbl9zZXRzID0KPiArCQkJaTkxNV9vYV9uX2J1aWx0aW5fbWV0cmljX3Nl dHNfaHN3Owo+ICsJfSBlbHNlIGlmIChpOTE1LmVuYWJsZV9leGVjbGlzdHMpIHsKPiArCQkvKiBO b3RlOiB0aGF0IGFsdGhvdWdoIHdlIGNvdWxkIHRoZW9yZXRpY2FsbHkgYWxzbyBzdXBwb3J0IHRo ZQo+ICsJCSAqIGxlZ2FjeSByaW5nYnVmZmVyIG1vZGUgb24gQkRXIChhbmQgZWFybGllciBpdGVy YXRpb25zIG9mCj4gKwkJICogdGhpcyBkcml2ZXIsIGJlZm9yZSB1cHN0cmVhbWluZyBkaWQgdGhp cykgaXQgZGlkbid0IHNlZW0KPiArCQkgKiB3b3J0aCB0aGUgY29tcGxleGl0eSB0byBtYWludGFp biBub3cgdGhhdCBCRFcrIGVuYWJsZQo+ICsJCSAqIGV4ZWNsaXN0IG1vZGUgYnkgZGVmYXVsdC4K PiArCQkgKi8KPiAgIAo+IC0JSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5wZXJmLnN0cmVhbXMp Owo+IC0JbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPnBlcmYubG9jayk7Cj4gLQlzcGluX2xvY2tfaW5p dCgmZGV2X3ByaXYtPnBlcmYuaG9va19sb2NrKTsKPiAtCXNwaW5fbG9ja19pbml0KCZkZXZfcHJp di0+cGVyZi5vYS5vYV9idWZmZXIucHRyX2xvY2spOwo+ICsJCWlmIChJU19HRU44KGRldl9wcml2 KSkgewo+ICsJCQlkZXZfcHJpdi0+cGVyZi5vYS5jdHhfb2FjdHhjdHJsX29mZnNldCA9IDB4MTIw Owo+ICsJCQlkZXZfcHJpdi0+cGVyZi5vYS5jdHhfZmxleGV1MF9vZmZzZXQgPSAweDJjZTsKPiAr CQkJZGV2X3ByaXYtPnBlcmYub2EuZ2VuOF92YWxpZF9jdHhfYml0ID0gKDE8PDI1KTsKPiArCj4g KwkJCWlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYpKSB7Cj4gKwkJCQlkZXZfcHJpdi0+cGVyZi5v YS5uX2J1aWx0aW5fc2V0cyA9Cj4gKwkJCQkJaTkxNV9vYV9uX2J1aWx0aW5fbWV0cmljX3NldHNf YmR3Owo+ICsJCQkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLnNlbGVjdF9tZXRyaWNfc2V0ID0KPiAr CQkJCQlpOTE1X29hX3NlbGVjdF9tZXRyaWNfc2V0X2JkdzsKPiArCQkJfSBlbHNlIGlmIChJU19D SEVSUllWSUVXKGRldl9wcml2KSkgewo+ICsJCQkJZGV2X3ByaXYtPnBlcmYub2Eubl9idWlsdGlu X3NldHMgPQo+ICsJCQkJCWk5MTVfb2Ffbl9idWlsdGluX21ldHJpY19zZXRzX2NodjsKPiArCQkJ CWRldl9wcml2LT5wZXJmLm9hLm9wcy5zZWxlY3RfbWV0cmljX3NldCA9Cj4gKwkJCQkJaTkxNV9v YV9zZWxlY3RfbWV0cmljX3NldF9jaHY7Cj4gKwkJCX0KPiArCQl9IGVsc2UgaWYgKElTX0dFTjko ZGV2X3ByaXYpKSB7Cj4gKwkJCWRldl9wcml2LT5wZXJmLm9hLmN0eF9vYWN0eGN0cmxfb2Zmc2V0 ID0gMHgxMjg7Cj4gKwkJCWRldl9wcml2LT5wZXJmLm9hLmN0eF9mbGV4ZXUwX29mZnNldCA9IDB4 M2RlOwo+ICsJCQlkZXZfcHJpdi0+cGVyZi5vYS5nZW44X3ZhbGlkX2N0eF9iaXQgPSAoMTw8MTYp Owo+ICsKPiArCQkJaWYgKElTX1NLTF9HVDIoZGV2X3ByaXYpKSB7Cj4gKwkJCQlkZXZfcHJpdi0+ cGVyZi5vYS5uX2J1aWx0aW5fc2V0cyA9Cj4gKwkJCQkJaTkxNV9vYV9uX2J1aWx0aW5fbWV0cmlj X3NldHNfc2tsZ3QyOwo+ICsJCQkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLnNlbGVjdF9tZXRyaWNf c2V0ID0KPiArCQkJCQlpOTE1X29hX3NlbGVjdF9tZXRyaWNfc2V0X3NrbGd0MjsKPiArCQkJfSBl bHNlIGlmIChJU19TS0xfR1QzKGRldl9wcml2KSkgewo+ICsJCQkJZGV2X3ByaXYtPnBlcmYub2Eu bl9idWlsdGluX3NldHMgPQo+ICsJCQkJCWk5MTVfb2Ffbl9idWlsdGluX21ldHJpY19zZXRzX3Nr bGd0MzsKPiArCQkJCWRldl9wcml2LT5wZXJmLm9hLm9wcy5zZWxlY3RfbWV0cmljX3NldCA9Cj4g KwkJCQkJaTkxNV9vYV9zZWxlY3RfbWV0cmljX3NldF9za2xndDM7Cj4gKwkJCX0gZWxzZSBpZiAo SVNfU0tMX0dUNChkZXZfcHJpdikpIHsKPiArCQkJCWRldl9wcml2LT5wZXJmLm9hLm5fYnVpbHRp bl9zZXRzID0KPiArCQkJCQlpOTE1X29hX25fYnVpbHRpbl9tZXRyaWNfc2V0c19za2xndDQ7Cj4g KwkJCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMuc2VsZWN0X21ldHJpY19zZXQgPQo+ICsJCQkJCWk5 MTVfb2Ffc2VsZWN0X21ldHJpY19zZXRfc2tsZ3Q0Owo+ICsJCQl9IGVsc2UgaWYgKElTX0JST1hU T04oZGV2X3ByaXYpKSB7Cj4gKwkJCQlkZXZfcHJpdi0+cGVyZi5vYS5uX2J1aWx0aW5fc2V0cyA9 Cj4gKwkJCQkJaTkxNV9vYV9uX2J1aWx0aW5fbWV0cmljX3NldHNfYnh0Owo+ICsJCQkJZGV2X3By aXYtPnBlcmYub2Eub3BzLnNlbGVjdF9tZXRyaWNfc2V0ID0KPiArCQkJCQlpOTE1X29hX3NlbGVj dF9tZXRyaWNfc2V0X2J4dDsKPiArCQkJfQo+ICsJCX0KPiAgIAo+IC0JZGV2X3ByaXYtPnBlcmYu b2Eub3BzLmluaXRfb2FfYnVmZmVyID0gZ2VuN19pbml0X29hX2J1ZmZlcjsKPiAtCWRldl9wcml2 LT5wZXJmLm9hLm9wcy5lbmFibGVfbWV0cmljX3NldCA9IGhzd19lbmFibGVfbWV0cmljX3NldDsK PiAtCWRldl9wcml2LT5wZXJmLm9hLm9wcy5kaXNhYmxlX21ldHJpY19zZXQgPSBoc3dfZGlzYWJs ZV9tZXRyaWNfc2V0Owo+IC0JZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2VuYWJsZSA9IGdlbjdf b2FfZW5hYmxlOwo+IC0JZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2Rpc2FibGUgPSBnZW43X29h X2Rpc2FibGU7Cj4gLQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMucmVhZCA9IGdlbjdfb2FfcmVhZDsK PiAtCWRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9idWZmZXJfY2hlY2sgPQo+IC0JCWdlbjdfb2Ff YnVmZmVyX2NoZWNrX3VubG9ja2VkOwo+ICsJCWlmIChkZXZfcHJpdi0+cGVyZi5vYS5uX2J1aWx0 aW5fc2V0cykgewo+ICsJCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMuaW5pdF9vYV9idWZmZXIgPSBn ZW44X2luaXRfb2FfYnVmZmVyOwo+ICsJCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMuZW5hYmxlX21l dHJpY19zZXQgPQo+ICsJCQkJZ2VuOF9lbmFibGVfbWV0cmljX3NldDsKPiArCQkJZGV2X3ByaXYt PnBlcmYub2Eub3BzLmRpc2FibGVfbWV0cmljX3NldCA9Cj4gKwkJCQlnZW44X2Rpc2FibGVfbWV0 cmljX3NldDsKPiArCQkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2VuYWJsZSA9IGdlbjhfb2Ff ZW5hYmxlOwo+ICsJCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMub2FfZGlzYWJsZSA9IGdlbjhfb2Ff ZGlzYWJsZTsKPiArCQkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLnJlYWQgPSBnZW44X29hX3JlYWQ7 Cj4gKwkJCWRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9od190YWlsX3JlYWQgPQo+ICsJCQkJZ2Vu OF9vYV9od190YWlsX3JlYWQ7Cj4gKwo+ICsJCQlkZXZfcHJpdi0+cGVyZi5vYS5vYV9mb3JtYXRz ID0gZ2VuOF9wbHVzX29hX2Zvcm1hdHM7Cj4gKwkJfQo+ICsJfQo+ICAgCj4gLQlkZXZfcHJpdi0+ cGVyZi5vYS5vYV9mb3JtYXRzID0gaHN3X29hX2Zvcm1hdHM7Cj4gKwlpZiAoZGV2X3ByaXYtPnBl cmYub2Eubl9idWlsdGluX3NldHMpIHsKPiArCQlocnRpbWVyX2luaXQoJmRldl9wcml2LT5wZXJm Lm9hLnBvbGxfY2hlY2tfdGltZXIsCj4gKwkJCQlDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9E RV9SRUwpOwo+ICsJCWRldl9wcml2LT5wZXJmLm9hLnBvbGxfY2hlY2tfdGltZXIuZnVuY3Rpb24g PSBvYV9wb2xsX2NoZWNrX3RpbWVyX2NiOwo+ICsJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldl9w cml2LT5wZXJmLm9hLnBvbGxfd3EpOwo+ICAgCj4gLQlkZXZfcHJpdi0+cGVyZi5vYS5uX2J1aWx0 aW5fc2V0cyA9Cj4gLQkJaTkxNV9vYV9uX2J1aWx0aW5fbWV0cmljX3NldHNfaHN3Owo+ICsJCUlO SVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+cGVyZi5zdHJlYW1zKTsKPiArCQltdXRleF9pbml0KCZk ZXZfcHJpdi0+cGVyZi5sb2NrKTsKPiArCQlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPnBlcmYu aG9va19sb2NrKTsKPiArCQlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVm ZmVyLnB0cl9sb2NrKTsKPiAgIAo+IC0JZGV2X3ByaXYtPnBlcmYuc3lzY3RsX2hlYWRlciA9IHJl Z2lzdGVyX3N5c2N0bF90YWJsZShkZXZfcm9vdCk7Cj4gKwkJZGV2X3ByaXYtPnBlcmYuc3lzY3Rs X2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShkZXZfcm9vdCk7Cj4gICAKPiAtCWRldl9w cml2LT5wZXJmLmluaXRpYWxpemVkID0gdHJ1ZTsKPiArCQlkZXZfcHJpdi0+cGVyZi5pbml0aWFs aXplZCA9IHRydWU7Cj4gKwl9Cj4gICB9Cj4gICAKPiAgIC8qKgo+IEBAIC0yMjE2LDUgKzMwMTEs NiBAQCB2b2lkIGk5MTVfcGVyZl9maW5pKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKPiAgIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShkZXZfcHJpdi0+cGVyZi5zeXNjdGxfaGVh ZGVyKTsKPiAgIAo+ICAgCW1lbXNldCgmZGV2X3ByaXYtPnBlcmYub2Eub3BzLCAwLCBzaXplb2Yo ZGV2X3ByaXYtPnBlcmYub2Eub3BzKSk7Cj4gKwo+ICAgCWRldl9wcml2LT5wZXJmLmluaXRpYWxp emVkID0gZmFsc2U7Cj4gICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gaW5kZXggMTFiMTJm NDEyNDkyLi44Mjc3ZWE4MTQ5MDYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9yZWcuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiBAQCAt NjQ1LDYgKzY0NSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV9tbWlvX3JlZ192YWxpZChp OTE1X3JlZ190IHJlZykKPiAgIAo+ICAgI2RlZmluZSBHRU44X09BQ1RYSUQgX01NSU8oMHgyMzY0 KQo+ICAgCj4gKyNkZWZpbmUgR0VOOF9PQV9ERUJVRyBfTU1JTygweDJCMDQpCj4gKyNkZWZpbmUg IEdFTjlfT0FfREVCVUdfRElTQUJMRV9DTEtfUkFUSU9fUkVQT1JUUyAgICAoMTw8NSkKPiArI2Rl ZmluZSAgR0VOOV9PQV9ERUJVR19JTkNMVURFX0NMS19SQVRJTwkgICAgKDE8PDYpCj4gKyNkZWZp bmUgIEdFTjlfT0FfREVCVUdfRElTQUJMRV9HT18xXzBfUkVQT1JUUwkgICAgKDE8PDIpCj4gKyNk ZWZpbmUgIEdFTjlfT0FfREVCVUdfRElTQUJMRV9DVFhfU1dJVENIX1JFUE9SVFMgICAoMTw8MSkK PiArCj4gICAjZGVmaW5lIEdFTjhfT0FDT05UUk9MIF9NTUlPKDB4MkIwMCkKPiAgICNkZWZpbmUg IEdFTjhfT0FfUkVQT1JUX0ZPUk1BVF9BMTIJICAgICgwPDwyKQo+ICAgI2RlZmluZSAgR0VOOF9P QV9SRVBPUlRfRk9STUFUX0ExMl9COF9DOCAgICAoMjw8MikKPiBAQCAtNjY2LDYgKzY3Miw3IEBA IHN0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X21taW9fcmVnX3ZhbGlkKGk5MTVfcmVnX3QgcmVnKQo+ ICAgI2RlZmluZSAgR0VON19PQUJVRkZFUl9TVE9QX1JFU1VNRV9FTkFCTEUgICAoMTw8MSkKPiAg ICNkZWZpbmUgIEdFTjdfT0FCVUZGRVJfUkVTVU1FCQkgICAgKDE8PDApCj4gICAKPiArI2RlZmlu ZSBHRU44X09BQlVGRkVSX1VEVyBfTU1JTygweDIzYjQpCj4gICAjZGVmaW5lIEdFTjhfT0FCVUZG RVIgX01NSU8oMHgyYjE0KQo+ICAgCj4gICAjZGVmaW5lIEdFTjdfT0FTVEFUVVMxIF9NTUlPKDB4 MjM2NCkKPiBAQCAtNjg0LDcgKzY5MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X21taW9f cmVnX3ZhbGlkKGk5MTVfcmVnX3QgcmVnKQo+ICAgI2RlZmluZSAgR0VOOF9PQVNUQVRVU19SRVBP UlRfTE9TVAkgICAgKDE8PDApCj4gICAKPiAgICNkZWZpbmUgR0VOOF9PQUhFQURQVFIgX01NSU8o MHgyQjBDKQo+ICsjZGVmaW5lIEdFTjhfT0FIRUFEUFRSX01BU0sgICAgMHhmZmZmZmZjMAo+ICAg I2RlZmluZSBHRU44X09BVEFJTFBUUiBfTU1JTygweDJCMTApCj4gKyNkZWZpbmUgR0VOOF9PQVRB SUxQVFJfTUFTSyAgICAweGZmZmZmZmMwCj4gICAKPiAgICNkZWZpbmUgT0FCVUZGRVJfU0laRV8x MjhLICAoMDw8MykKPiAgICNkZWZpbmUgT0FCVUZGRVJfU0laRV8yNTZLICAoMTw8MykKPiBAQCAt Njk3LDcgKzcwNiwxNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV9tbWlvX3JlZ192YWxpZChp OTE1X3JlZ190IHJlZykKPiAgIAo+ICAgI2RlZmluZSBPQV9NRU1fU0VMRUNUX0dHVFQgICgxPDww KQo+ICAgCj4gKy8qCj4gKyAqIEZsZXhpYmxlLCBBZ2dyZWdhdGUgRVUgQ291bnRlciBSZWdpc3Rl cnMuCj4gKyAqIE5vdGU6IHRoZXNlIGFyZW4ndCBjb250aWd1b3VzCj4gKyAqLwo+ICAgI2RlZmlu ZSBFVV9QRVJGX0NOVEwwCSAgICBfTU1JTygweGU0NTgpCj4gKyNkZWZpbmUgRVVfUEVSRl9DTlRM MQkgICAgX01NSU8oMHhlNTU4KQo+ICsjZGVmaW5lIEVVX1BFUkZfQ05UTDIJICAgIF9NTUlPKDB4 ZTY1OCkKPiArI2RlZmluZSBFVV9QRVJGX0NOVEwzCSAgICBfTU1JTygweGU3NTgpCj4gKyNkZWZp bmUgRVVfUEVSRl9DTlRMNAkgICAgX01NSU8oMHhlNDVjKQo+ICsjZGVmaW5lIEVVX1BFUkZfQ05U TDUJICAgIF9NTUlPKDB4ZTU1YykKPiArI2RlZmluZSBFVV9QRVJGX0NOVEw2CSAgICBfTU1JTygw eGU2NWMpCj4gICAKPiAgICNkZWZpbmUgR0RUX0NISUNLRU5fQklUUyAgICBfTU1JTygweDk4NDAp Cj4gICAjZGVmaW5lIEdUX05PQV9FTkFCTEUJICAgIDB4MDAwMDAwODAKPiBAQCAtMjMxNyw2ICsy MzM2LDkgQEAgZW51bSBza2xfZGlzcF9wb3dlcl93ZWxscyB7Cj4gICAjZGVmaW5lICAgR0VOOF9S Q19TRU1BX0lETEVfTVNHX0RJU0FCTEUJKDEgPDwgMTIpCj4gICAjZGVmaW5lICAgR0VOOF9GRl9E T1BfQ0xPQ0tfR0FURV9ESVNBQkxFCSgxPDwxMCkKPiAgIAo+ICsjZGVmaW5lIEdFTjZfUkNTX1BX Ul9GU00gX01NSU8oMHgyMmFjKQo+ICsjZGVmaW5lIEdFTjlfUkNTX0ZFX0ZTTTIgX01NSU8oMHgy MmE0KQo+ICsKPiAgIC8qIEZ1c2UgcmVhZG91dCByZWdpc3RlcnMgZm9yIEdUICovCj4gICAjZGVm aW5lIENIVl9GVVNFX0dUCQkJX01NSU8oVkxWX0RJU1BMQVlfQkFTRSArIDB4MjE2OCkKPiAgICNk ZWZpbmUgICBDSFZfRkdUX0RJU0FCTEVfU1MwCQkoMSA8PCAxMCkKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9scmMuYwo+IGluZGV4IDBkYzFjYzRhZDZlNy4uZThmNjQ5YjJiYWZmIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfbHJjLmMKPiBAQCAtMzM3LDYgKzMzNyw4IEBAIHN0YXRpYyB1NjQgZXhlY2xp c3RzX3VwZGF0ZV9jb250ZXh0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnEpCj4gICAJ aWYgKHBwZ3R0ICYmICFpOTE1X3ZtX2lzXzQ4Yml0KCZwcGd0dC0+YmFzZSkpCj4gICAJCWV4ZWNs aXN0c191cGRhdGVfY29udGV4dF9wZHBzKHBwZ3R0LCByZWdfc3RhdGUpOwo+ICAgCj4gKwlpOTE1 X29hX3VwZGF0ZV9yZWdfc3RhdGUocnEtPmVuZ2luZSwgcnEtPmN0eCwgcmVnX3N0YXRlKTsKPiAr Cj4gICAJcmV0dXJuIGNlLT5scmNfZGVzYzsKPiAgIH0KPiAgIAo+IEBAIC0xODcwLDYgKzE4NzIs OSBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfaW5pdF9yZWdfc3RhdGUodTMyICpyZWdzLAo+ICAg CQlyZWdzW0NUWF9MUklfSEVBREVSXzJdID0gTUlfTE9BRF9SRUdJU1RFUl9JTU0oMSk7Cj4gICAJ CUNUWF9SRUcocmVncywgQ1RYX1JfUFdSX0NMS19TVEFURSwgR0VOOF9SX1BXUl9DTEtfU1RBVEUs Cj4gICAJCQltYWtlX3JwY3MoZGV2X3ByaXYpKTsKPiArCj4gKwkJYXRvbWljX3NldCgmY3R4LT5l bmdpbmVbUkNTXS5vYV9zdGF0ZV9kaXJ0eSwgMSk7Cj4gKwkJaTkxNV9vYV91cGRhdGVfcmVnX3N0 YXRlKGVuZ2luZSwgY3R4LCByZWdzKTsKPiAgIAl9Cj4gICB9Cj4gICAKPiBkaWZmIC0tZ2l0IGEv aW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5o Cj4gaW5kZXggZTA1OTllNzI5ZTY4Li4wM2I4MzM4NDk5MTkgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVk ZS91YXBpL2RybS9pOTE1X2RybS5oCj4gKysrIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5o Cj4gQEAgLTEyOTUsMTMgKzEyOTUsMTggQEAgc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3Bh cmFtIHsKPiAgIH07Cj4gICAKPiAgIGVudW0gZHJtX2k5MTVfb2FfZm9ybWF0IHsKPiAtCUk5MTVf T0FfRk9STUFUX0ExMyA9IDEsCj4gLQlJOTE1X09BX0ZPUk1BVF9BMjksCj4gLQlJOTE1X09BX0ZP Uk1BVF9BMTNfQjhfQzgsCj4gLQlJOTE1X09BX0ZPUk1BVF9CNF9DOCwKPiAtCUk5MTVfT0FfRk9S TUFUX0E0NV9COF9DOCwKPiAtCUk5MTVfT0FfRk9STUFUX0I0X0M4X0ExNiwKPiAtCUk5MTVfT0Ff Rk9STUFUX0M0X0I4LAo+ICsJSTkxNV9PQV9GT1JNQVRfQTEzID0gMSwJICAgIC8qIEhTVyBvbmx5 ICovCj4gKwlJOTE1X09BX0ZPUk1BVF9BMjksCSAgICAvKiBIU1cgb25seSAqLwo+ICsJSTkxNV9P QV9GT1JNQVRfQTEzX0I4X0M4LCAgIC8qIEhTVyBvbmx5ICovCj4gKwlJOTE1X09BX0ZPUk1BVF9C NF9DOCwJICAgIC8qIEhTVyBvbmx5ICovCj4gKwlJOTE1X09BX0ZPUk1BVF9BNDVfQjhfQzgsICAg LyogSFNXIG9ubHkgKi8KPiArCUk5MTVfT0FfRk9STUFUX0I0X0M4X0ExNiwgICAvKiBIU1cgb25s eSAqLwo+ICsJSTkxNV9PQV9GT1JNQVRfQzRfQjgsCSAgICAvKiBIU1crICovCj4gKwo+ICsJLyog R2VuOCsgKi8KPiArCUk5MTVfT0FfRk9STUFUX0ExMiwKPiArCUk5MTVfT0FfRk9STUFUX0ExMl9C OF9DOCwKPiArCUk5MTVfT0FfRk9STUFUX0EzMnU0MF9BNHUzMl9COF9DOCwKPiAgIAo+ICAgCUk5 MTVfT0FfRk9STUFUX01BWAkgICAgLyogbm9uLUFCSSAqLwo+ICAgfTsKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK