From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi. Date: Thu, 13 Aug 2015 09:51:41 +0200 Message-ID: <20150813075141.GX17734@phenom.ffwll.local> References: <1439427380-2436-1-git-send-email-eric@anholt.net> <1439427380-2436-4-git-send-email-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1439427380-2436-4-git-send-email-eric@anholt.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Eric Anholt Cc: devicetree@vger.kernel.org, Stephen Warren , Lee Jones , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org T24gV2VkLCBBdWcgMTIsIDIwMTUgYXQgMDU6NTY6MTZQTSAtMDcwMCwgRXJpYyBBbmhvbHQgd3Jv dGU6Cj4gVGhpcyBpcyB0aGUgc3RhcnQgb2YgYSBmdWxsIFZDNCBkcml2ZXIuICBSaWdodCBub3cg dGhpcyBqdXN0IHN1cHBvcnRzCj4gY29uZmlndXJpbmcgdGhlIGRpc3BsYXkgdXNpbmcgYSBwcmUt ZXhpc3RpbmcgdmlkZW8gbW9kZSAoYmVjYXVzZQo+IGNoYW5naW5nIHRoZSBwaXhlbCBjbG9jayBp c24ndCBhdmFpbGFibGUgeWV0LCBhbmQgZG9lc24ndCB3b3JrIHdoZW4gaXQKPiBpcykuICBIb3dl dmVyLCB0aGlzIGlzIGVub3VnaCBmb3IgZmJjb24gYW5kIGJyaW5naW5nIHVwIFggdXNpbmcKPiB4 Zjg2LXZpZGVvLW1vZGVzZXR0aW5nLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEVyaWMgQW5ob2x0IDxl cmljQGFuaG9sdC5uZXQ+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAg ICB8ICAgMiArCj4gIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICB8ICAgMSArCj4g IGRyaXZlcnMvZ3B1L2RybS92YzQvS2NvbmZpZyAgICAgICB8ICAxNCArCj4gIGRyaXZlcnMvZ3B1 L2RybS92YzQvTWFrZWZpbGUgICAgICB8ICAxOCArKwo+ICBkcml2ZXJzL2dwdS9kcm0vdmM0L3Zj NF9iby5jICAgICAgfCAgNTQgKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9jcnRjLmMg ICAgfCA1ODMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dw dS9kcm0vdmM0L3ZjNF9kZWJ1Z2ZzLmMgfCAgMzggKysrCj4gIGRyaXZlcnMvZ3B1L2RybS92YzQv dmM0X2Rydi5jICAgICB8IDI0OSArKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL3Zj NC92YzRfZHJ2LmggICAgIHwgMTIzICsrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRf aGRtaS5jICAgIHwgNjUxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4g IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2h2cy5jICAgICB8IDE3MiArKysrKysrKysrCj4gIGRy aXZlcnMvZ3B1L2RybS92YzQvdmM0X2ttcy5jICAgICB8ICA4NCArKysrKwo+ICBkcml2ZXJzL2dw dS9kcm0vdmM0L3ZjNF9wbGFuZS5jICAgfCAzMjAgKysrKysrKysrKysrKysrKysrKwo+ICBkcml2 ZXJzL2dwdS9kcm0vdmM0L3ZjNF9yZWdzLmggICAgfCA1NjIgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKPiAgMTQgZmlsZXMgY2hhbmdlZCwgMjg3MSBpbnNlcnRpb25zKCspCj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0L0tjb25maWcKPiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQvTWFrZWZpbGUKPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2JvLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS92YzQvdmM0X2NydGMuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL3ZjNC92YzRfZGVidWdmcy5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vdmM0L3ZjNF9kcnYuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL3ZjNC92YzRfZHJ2LmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92 YzQvdmM0X2hkbWkuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZjNC92 YzRfaHZzLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2tt cy5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9wbGFuZS5j Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9yZWdzLmgKCk1h ZGUgYSBxdWljayBwYXNzIGFuZCBmb3VuZCBhIGZldyB0aGluZ3MgdG8gdXBkYXRlIHRvIGxhdGVz dCBkcm0KZGV2ZWxvcG1lbnRzLiBPZiBjb3Vyc2UgZGlkbid0IGxvb2sgYXQgdGhlIGhhcmR3YXJl IGRldGFpbHMgc2luY2Ugbm8gY2x1ZSwKYnV0IGxvb2tzIHJlYWxseSBuaWNlIG92ZXJhbGwuCi1E YW5pZWwKCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVy cy9ncHUvZHJtL0tjb25maWcKPiBpbmRleCBjNDZjYTMxLi4xNzMwYTc2IDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcK PiBAQCAtMjQwLDMgKzI0MCw1IEBAIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3N0aS9LY29uZmln Igo+ICBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL0tjb25maWciCj4gIAo+ICBz b3VyY2UgImRyaXZlcnMvZ3B1L2RybS9pbXgvS2NvbmZpZyIKPiArCj4gK3NvdXJjZSAiZHJpdmVy cy9ncHUvZHJtL3ZjNC9LY29uZmlnIgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFr ZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiBpbmRleCA1NzEzZDA1Li5iOTkxYWM1 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9NYWtlZmlsZQo+IEBAIC00Miw2ICs0Miw3IEBAIG9iai0kKENPTkZJR19EUk1fTUdB KQkrPSBtZ2EvCj4gIG9iai0kKENPTkZJR19EUk1fSTgxMCkJKz0gaTgxMC8KPiAgb2JqLSQoQ09O RklHX0RSTV9JOTE1KSAgKz0gaTkxNS8KPiAgb2JqLSQoQ09ORklHX0RSTV9NR0FHMjAwKSArPSBt Z2FnMjAwLwo+ICtvYmotJChDT05GSUdfRFJNX1ZDNCkgICs9IHZjNC8KPiAgb2JqLSQoQ09ORklH X0RSTV9DSVJSVVNfUUVNVSkgKz0gY2lycnVzLwo+ICBvYmotJChDT05GSUdfRFJNX1NJUykgICAr PSBzaXMvCj4gIG9iai0kKENPTkZJR19EUk1fU0FWQUdFKSs9IHNhdmFnZS8KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC9LY29u ZmlnCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4xMzBjYzk0Cj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvS2NvbmZpZwo+IEBAIC0wLDAg KzEsMTQgQEAKPiArY29uZmlnIERSTV9WQzQKPiArCXRyaXN0YXRlICJCcm9hZGNvbSBWQzQgR3Jh cGhpY3MiCj4gKwlkZXBlbmRzIG9uIEFSQ0hfQkNNMjgzNQo+ICsJZGVwZW5kcyBvbiBEUk0KPiAr CXNlbGVjdCBEUk1fS01TX0hFTFBFUgo+ICsJc2VsZWN0IERSTV9LTVNfRkJfSEVMUEVSCj4gKwlz ZWxlY3QgRFJNX0tNU19DTUFfSEVMUEVSCgpkcm0tbWlzYy9saW51eC1uZXh0IGFscmVhZHkgaGFz IEFyY2hpdCdzIHBhdGNoZXMgdG8gZW5hYmxlL2Rpc2FibGUgZmJkZXYKaW4gdGhlIGNvcmUgY29k ZSwgc28geW91IGRvbid0IG5lZWQgdG8gYm90aGVyIGFib3V0IHRoZXNlIHNlbGVjdHMgaGVyZSBh bnkKbW9yZSwgaXQnbGwgbm8tb3Agb3V0IGlmIGRybSBmYmRldiBlbXVsYXRpb24gaXNuJ3QgZW5h YmxlZC4gU2luY2UgeW91J3JlCnJldXNpbmcgY21hIGZiZGV2IGhlbHBlcnMgSSBkb24ndCB0aGlu ayB0aGVyZSdzIGFueSBuZWVkIGZvciBvdGhlciBjaGFuZ2VzCmJlY2F1c2Ugb2YgdGhpcy4KCj4g KwloZWxwCj4gKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIHN5c3RlbSB0aGF0 IGhhcyBhIEJyb2FkY29tCj4gKwkgIFZDNCBHUFUsIHN1Y2ggYXMgdGhlIFJhc3BiZXJyeSBQaSBv ciBvdGhlciBCQ00yNzA4L0JDTTI4MzUuCj4gKwo+ICsJICBUaGlzIGRyaXZlciByZXF1aXJlcyB0 aGF0ICJhdm9pZF93YXJuaW5ncz0yIiBiZSBwcmVzZW50IGluCj4gKwkgIHRoZSBjb25maWcudHh0 IGZvciB0aGUgZmlybXdhcmUsIHRvIGtlZXAgaXQgZnJvbSBzbWFzaGluZwo+ICsJICBvdXIgZGlz cGxheSBzZXR1cC4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC9NYWtlZmlsZSBi L2RyaXZlcnMvZ3B1L2RybS92YzQvTWFrZWZpbGUKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAuLjRhYTA3Y2EKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL3ZjNC9NYWtlZmlsZQo+IEBAIC0wLDAgKzEsMTggQEAKPiArY2NmbGFncy15IDo9IC1JaW5j bHVkZS9kcm0KPiArCj4gKyMgUGxlYXNlIGtlZXAgdGhlc2UgYnVpbGQgbGlzdHMgc29ydGVkIQo+ ICsKPiArIyBjb3JlIGRyaXZlciBjb2RlCj4gK3ZjNC15IDo9IFwKPiArCXZjNF9iby5vIFwKPiAr CXZjNF9jcnRjLm8gXAo+ICsJdmM0X2Rydi5vIFwKPiArCXZjNF9rbXMubyBcCj4gKwl2YzRfaGRt aS5vIFwKPiArCXZjNF9odnMubyBcCj4gKwl2YzRfcGxhbmUubyBcCj4gKwkkKCkKPiArCj4gK3Zj NC0kKENPTkZJR19ERUJVR19GUykgKz0gdmM0X2RlYnVnZnMubwo+ICsKPiArb2JqLSQoQ09ORklH X0RSTV9WQzQpICArPSB2YzQubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3Zj NF9iby5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfYm8uYwo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMC4uZmVlOGNhYwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jCj4gQEAgLTAsMCArMSw1NCBAQAo+ICsvKgo+ICsgKiAg Q29weXJpZ2h0IMKpIDIwMTUgQnJvYWRjb20KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICog aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz aW9uIDIgYXMKPiArICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u Cj4gKyAqLwo+ICsKPiArLyogRE9DOiBWQzQgR0VNIEJPIG1hbmFnZW1lbnQgc3VwcG9ydC4KPiAr ICoKPiArICogVGhlIFZDNCBHUFUgYXJjaGl0ZWN0dXJlIChib3RoIHNjYW5vdXQgYW5kIHJlbmRl cmluZykgaGFzIGRpcmVjdAo+ICsgKiBhY2Nlc3MgdG8gc3lzdGVtIG1lbW9yeSB3aXRoIG5vIE1N VSBpbiBiZXR3ZWVuLiAgVG8gc3VwcG9ydCBpdCwgd2UKPiArICogdXNlIHRoZSBHRU0gQ01BIGhl bHBlciBmdW5jdGlvbnMgdG8gYWxsb2NhdGUgY29udGlndW91cyByYW5nZXMgb2YKPiArICogcGh5 c2ljYWwgbWVtb3J5IGZvciBvdXIgQk9zLgo+ICsgKi8KClNpbmNlIHlvdSdyZSBkb2luZyBrZXJu ZWxkb2MgY29uc2lkZXJlZCBwdWxsaW5nIGl0IGFsbCBpbnRvIGEgbmV3IHZjNApzZWN0aW9uIGlu IHRoZSBkcm0gZG9jYm9vayB0ZW1wbGF0ZT8KCj4gKwo+ICsjaW5jbHVkZSAidmM0X2Rydi5oIgo+ ICsKPiArc3RydWN0IHZjNF9ibyAqdmM0X2JvX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCBzaXplX3Qgc2l6ZSkKPiArewo+ICsJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqY21hX29i ajsKPiArCj4gKwljbWFfb2JqID0gZHJtX2dlbV9jbWFfY3JlYXRlKGRldiwgc2l6ZSk7Cj4gKwlp ZiAoSVNfRVJSKGNtYV9vYmopKQo+ICsJCXJldHVybiBOVUxMOwo+ICsJZWxzZQo+ICsJCXJldHVy biB0b192YzRfYm8oJmNtYV9vYmotPmJhc2UpOwo+ICt9Cj4gKwo+ICtpbnQgdmM0X2R1bWJfY3Jl YXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAo+ICsJCSAgICBzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAo+ICsJCSAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpCj4gK3sK PiArCWludCBtaW5fcGl0Y2ggPSBESVZfUk9VTkRfVVAoYXJncy0+d2lkdGggKiBhcmdzLT5icHAs IDgpOwo+ICsJc3RydWN0IHZjNF9ibyAqYm8gPSBOVUxMOwo+ICsJaW50IHJldDsKPiArCj4gKwlp ZiAoYXJncy0+cGl0Y2ggPCBtaW5fcGl0Y2gpCj4gKwkJYXJncy0+cGl0Y2ggPSBtaW5fcGl0Y2g7 Cj4gKwo+ICsJaWYgKGFyZ3MtPnNpemUgPCBhcmdzLT5waXRjaCAqIGFyZ3MtPmhlaWdodCkKPiAr CQlhcmdzLT5zaXplID0gYXJncy0+cGl0Y2ggKiBhcmdzLT5oZWlnaHQ7Cj4gKwo+ICsJbXV0ZXhf bG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICsJYm8gPSB2YzRfYm9fY3JlYXRlKGRldiwgcm91 bmR1cChhcmdzLT5zaXplLCBQQUdFX1NJWkUpKTsKPiArCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1 Y3RfbXV0ZXgpOwoKSSdtIG9uIGEgc3RydWN0X211dGV4IGNydXNhZGUgKHRyeWluZyB0byBnZXQg cmlkIG9mIGl0IGluIGNvcmUgYW5kIGFsbG93CmRyaXZlcnMgdG8gbGl2ZSB3aXRob3V0IGl0KS4g T24gYSBxdWljayBsb29rIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZQphbnl0aGluZyB0aGF0IG5l ZWRzIHN0cnVjdF9tdXRleCBoZXJlLCBzbyBwbGVhc2UganVzdCByZW1vdmUgaXQuIElmIHRoZXJl CmlzIGluZGVlZCBzb21ldGhpbmcgdmM0LWludGVybmFsIHlvdSB3YW50IHRvIHByb3RlY3QsIHBs ZWFzZSB1c2UgeW91ciBvd24KZHJpdmVyLWludGVybmFsIG11dGV4IChlLmcuIGZvciBkcm1fbW0g b3IgY29tbWFuZCBzdWJtaXNzaW9uIG9yIHdoYXRldmVyKS4KCmJ0dyB0aGUgbGFzdCBiaXQgaW4g dGhlIGRybSBjb3JlIGZvciBtb2Rlcm4gZHJpdmVycyB0aGF0IG5lZWRzCnN0cnVjdF9tdXRleCBp cyBtbWFwX29mZnNldCBnZW0gb2JqZWN0IGxvb2t1cC4gSSBwbGFuIHRvIHJlcGxhY2UgdGhhdCB3 aXRoCmtyZWZfZ2V0X3VubGVzc196ZXJvIHRyaWNrZXJ5LCB3aGljaCB3b3VsZCBtYWtlIHRoZSBj b3JlIGFuZCBhIGxvdCBvZgpkcml2ZXJzIHN0cnVjdF9tdXRleCBmcmVlIGFuZCBzbyByZWxlZ2F0 ZSBpdCBtb3N0bHkgdG8gYSBsZWdhY3kgcm9sZSAoYW5kCmNhbiBiZSBmb3Jnb3R0ZW4pLgoKPiAr CWlmICghYm8pCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJcmV0ID0gZHJtX2dlbV9oYW5k bGVfY3JlYXRlKGZpbGVfcHJpdiwgJmJvLT5iYXNlLmJhc2UsICZhcmdzLT5oYW5kbGUpOwo+ICsJ ZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJmJvLT5iYXNlLmJhc2UpOwo+ICsK PiArCXJldHVybiByZXQ7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92 YzRfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfY3J0Yy5jCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi42ZjEyN2YwCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2NydGMuYwo+IEBAIC0wLDAgKzEsNTgzIEBACj4gKy8q Cj4gKyAqIENvcHlyaWdodCAoQykgMjAxNSBCcm9hZGNvbQo+ICsgKgo+ICsgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIHZlcnNpb24gMiBhcwo+ICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KPiArICovCj4gKwo+ICsvKioKPiArICogRE9DOiBWQzQgQ1JUQyBtb2R1bGUKPiAr ICoKPiArICogSW4gVkM0LCB0aGUgUGl4ZWwgVmFsdmUgaXMgd2hhdCBtb3N0IGNsb3NlbHkgY29y cmVzcG9uZHMgdG8gdGhlCj4gKyAqIERSTSdzIGNvbmNlcHQgb2YgYSBDUlRDLiAgVGhlIFBWIGdl bmVyYXRlcyB2aWRlbyB0aW1pbmdzIGZyb20gdGhlCj4gKyAqIHBpeGVsIGNsb2NrIGFuZCBpdHMg Y29uZmlndXJhdGlvbi4KPiArICoKPiArICogSG93ZXZlciwgdGhlIERSTSBDUlRDIGFsc28gY29s bGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYWxsIHRoZQo+ICsgKiBEUk0gcGxhbmVzIGF0dGFj aGVkIHRvIGl0LiAgQXMgYSByZXN1bHQsIHRoaXMgZmlsZSBhbHNvIG1hbmFnZXMKPiArICogc2V0 dXAgb2YgdGhlIFZDNCBIVlMncyBkaXNwbGF5IGVsZW1lbnRzIG9uIHRoZSBDUlRDLgo+ICsgKi8K PiArCj4gKyNpbmNsdWRlICJkcm1fYXRvbWljX2hlbHBlci5oIgo+ICsjaW5jbHVkZSAiZHJtX2Ny dGNfaGVscGVyLmgiCj4gKyNpbmNsdWRlICJsaW51eC9jbGsuaCIKPiArI2luY2x1ZGUgImxpbnV4 L2NvbXBvbmVudC5oIgo+ICsjaW5jbHVkZSAidmM0X2Rydi5oIgo+ICsjaW5jbHVkZSAidmM0X3Jl Z3MuaCIKPiArCj4gKyNkZWZpbmUgQ1JUQ19XUklURShvZmZzZXQsIHZhbCkgd3JpdGVsKHZhbCwg dmM0X2NydGMtPnJlZ3MgKyAob2Zmc2V0KSkKPiArI2RlZmluZSBDUlRDX1JFQUQob2Zmc2V0KSBy ZWFkbCh2YzRfY3J0Yy0+cmVncyArIChvZmZzZXQpKQo+ICsKPiArI2RlZmluZSBDUlRDX1JFRyhy ZWcpIHsgcmVnLCAjcmVnIH0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCB7Cj4gKwl1MzIgcmVnOwo+ ICsJY29uc3QgY2hhciAqbmFtZTsKPiArfSBjcnRjX3JlZ3NbXSA9IHsKPiArCUNSVENfUkVHKFBW X0NPTlRST0wpLAo+ICsJQ1JUQ19SRUcoUFZfVl9DT05UUk9MKSwKPiArCUNSVENfUkVHKFBWX1ZT WU5DRCksCj4gKwlDUlRDX1JFRyhQVl9IT1JaQSksCj4gKwlDUlRDX1JFRyhQVl9IT1JaQiksCj4g KwlDUlRDX1JFRyhQVl9WRVJUQSksCj4gKwlDUlRDX1JFRyhQVl9WRVJUQiksCj4gKwlDUlRDX1JF RyhQVl9WRVJUQV9FVkVOKSwKPiArCUNSVENfUkVHKFBWX1ZFUlRCX0VWRU4pLAo+ICsJQ1JUQ19S RUcoUFZfSU5URU4pLAo+ICsJQ1JUQ19SRUcoUFZfSU5UU1RBVCksCj4gKwlDUlRDX1JFRyhQVl9T VEFUKSwKPiArCUNSVENfUkVHKFBWX0hBQ1RfQUNUKSwKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lk IHZjNF9jcnRjX2R1bXBfcmVncyhzdHJ1Y3QgdmM0X2NydGMgKnZjNF9jcnRjKQo+ICt7Cj4gKwlp bnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjcnRjX3JlZ3MpOyBpKysp IHsKPiArCQlEUk1fSU5GTygiMHglMDR4ICglcyk6IDB4JTA4eFxuIiwKPiArCQkJIGNydGNfcmVn c1tpXS5yZWcsIGNydGNfcmVnc1tpXS5uYW1lLAo+ICsJCQkgQ1JUQ19SRUFEKGNydGNfcmVnc1tp XS5yZWcpKTsKPiArCX0KPiArfQo+ICsKPiArI2lmZGVmIENPTkZJR19ERUJVR19GUwo+ICtpbnQg dmM0X2NydGNfZGVidWdmc19yZWdzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQo+ ICt7Cj4gKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9k ZSAqKSBtLT5wcml2YXRlOwo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9y LT5kZXY7Cj4gKwlpbnQgY3J0Y19pbmRleCA9ICh1aW50cHRyX3Qpbm9kZS0+aW5mb19lbnQtPmRh dGE7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gKwlzdHJ1Y3QgdmM0X2NydGMgKnZjNF9j cnRjOwo+ICsJaW50IGk7Cj4gKwo+ICsJaSA9IDA7Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNy dGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewo+ICsJCWlmIChpID09IGNy dGNfaW5kZXgpCj4gKwkJCWJyZWFrOwo+ICsJCWkrKzsKPiArCX0KPiArCWlmICghY3J0YykKPiAr CQlyZXR1cm4gMDsKPiArCXZjNF9jcnRjID0gdG9fdmM0X2NydGMoY3J0Yyk7Cj4gKwo+ICsJZm9y IChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3J0Y19yZWdzKTsgaSsrKSB7Cj4gKwkJc2VxX3ByaW50 ZihtLCAiJXMgKDB4JTA0eCk6IDB4JTA4eFxuIiwKPiArCQkJICAgY3J0Y19yZWdzW2ldLm5hbWUs IGNydGNfcmVnc1tpXS5yZWcsCj4gKwkJCSAgIENSVENfUkVBRChjcnRjX3JlZ3NbaV0ucmVnKSk7 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArI2VuZGlmCj4gKwo+ICtzdGF0aWMgdm9p ZCB2YzRfY3J0Y19kZXN0cm95KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJZHJtX2Ny dGNfY2xlYW51cChjcnRjKTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgdmM0X2NydGNfbW9kZV9m aXh1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gKwkJCQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZSwKPiArCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9t b2RlKQo+ICt7Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQoKbW9kZV9maXh1cCBvbiBjcnRjcyBpcyBv cHRpb25hbCBzaW5jZSA4NDBiZmU5NTMzODRhIGFuZCBJIGp1c3QgbWVyZ2VkIGEKcGF0Y2ggdG8g bWFrZSBpdCBvcHRpb25hbCBmb3IgZW5jb2RlcnMgdG9vICh3aGVuIHVzaW5nIGF0b21pYyBoZWxw ZXJzCndoaWNoIHlvdSBkbykuIFlvdSBjYW4gcmVtb3ZlIHRoZW0gYm90aC4KCj4gKwo+ICtzdGF0 aWMgdTMyIHZjNF9nZXRfZmlmb19mdWxsX2xldmVsKHUzMiBmb3JtYXQpCj4gK3sKPiArCXN0YXRp YyBjb25zdCB1MzIgZmlmb19sZW5fYnl0ZXMgPSA2NDsKPiArCXN0YXRpYyBjb25zdCB1MzIgaHZz X2xhdGVuY3lfcGl4ID0gNjsKPiArCj4gKwlzd2l0Y2ggKGZvcm1hdCkgewo+ICsJY2FzZSBQVl9D T05UUk9MX0ZPUk1BVF9EU0lWXzE2Ogo+ICsJY2FzZSBQVl9DT05UUk9MX0ZPUk1BVF9EU0lDXzE2 Ogo+ICsJCXJldHVybiBmaWZvX2xlbl9ieXRlcyAtIDIgKiBodnNfbGF0ZW5jeV9waXg7Cj4gKwlj YXNlIFBWX0NPTlRST0xfRk9STUFUX0RTSVZfMTg6Cj4gKwkJcmV0dXJuIGZpZm9fbGVuX2J5dGVz IC0gMTQ7Cj4gKwljYXNlIFBWX0NPTlRST0xfRk9STUFUXzI0Ogo+ICsJY2FzZSBQVl9DT05UUk9M X0ZPUk1BVF9EU0lWXzI0Ogo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gZmlmb19sZW5fYnl0ZXMg LSAzICogaHZzX2xhdGVuY3lfcGl4Owo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2YzRf Y3J0Y19tb2RlX3NldF9ub2ZiKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJc3RydWN0 IHZjNF9jcnRjICp2YzRfY3J0YyA9IHRvX3ZjNF9jcnRjKGNydGMpOwo+ICsJc3RydWN0IGRybV9j cnRjX3N0YXRlICpzdGF0ZSA9IGNydGMtPnN0YXRlOwo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGUgPSAmc3RhdGUtPmFkanVzdGVkX21vZGU7Cj4gKwl1MzIgdmFjdGl2ZSA9IChtb2Rl LT52ZGlzcGxheSA+Pgo+ICsJCSAgICAgICAoKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19J TlRFUkxBQ0UpID8gMSA6IDApKTsKPiArCXUzMiBmb3JtYXQgPSBQVl9DT05UUk9MX0ZPUk1BVF8y NDsKPiArCWJvb2wgZGVidWdfZHVtcF9yZWdzID0gZmFsc2U7Cj4gKwo+ICsJaWYgKGRlYnVnX2R1 bXBfcmVncykgewo+ICsJCURSTV9JTkZPKCJDUlRDICVkIHJlZ3MgYmVmb3JlOlxuIiwgZHJtX2Ny dGNfaW5kZXgoY3J0YykpOwo+ICsJCXZjNF9jcnRjX2R1bXBfcmVncyh2YzRfY3J0Yyk7Cj4gKwl9 Cj4gKwo+ICsJLyogVGhpcyBpcyB3aGVyZSB3ZSB3b3VsZCBzZXQgdGhlIHBpeGVsIGNsb2NrLiAq Lwo+ICsKPiArCS8qIFJlc2V0IHRoZSBQViBmaWZvLiAqLwo+ICsJQ1JUQ19XUklURShQVl9DT05U Uk9MLCAwKTsKPiArCUNSVENfV1JJVEUoUFZfQ09OVFJPTCwgUFZfQ09OVFJPTF9GSUZPX0NMUiB8 IFBWX0NPTlRST0xfRU4pOwo+ICsJQ1JUQ19XUklURShQVl9DT05UUk9MLCAwKTsKPiArCj4gKwlD UlRDX1dSSVRFKFBWX0hPUlpBLAo+ICsJCSAgIFZDNF9TRVRfRklFTEQobW9kZS0+aHRvdGFsIC0g bW9kZS0+aHN5bmNfZW5kLAo+ICsJCQkJIFBWX0hPUlpBX0hCUCkgfAo+ICsJCSAgIFZDNF9TRVRf RklFTEQobW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQsCj4gKwkJCQkgUFZfSE9S WkFfSFNZTkMpKTsKPiArCUNSVENfV1JJVEUoUFZfSE9SWkIsCj4gKwkJICAgVkM0X1NFVF9GSUVM RChtb2RlLT5oc3luY19zdGFydCAtIG1vZGUtPmhkaXNwbGF5LAo+ICsJCQkJIFBWX0hPUlpCX0hG UCkgfAo+ICsJCSAgIFZDNF9TRVRfRklFTEQobW9kZS0+aGRpc3BsYXksIFBWX0hPUlpCX0hBQ1RJ VkUpKTsKPiArCj4gKwlDUlRDX1dSSVRFKFBWX1ZFUlRBLAo+ICsJCSAgIFZDNF9TRVRfRklFTEQo bW9kZS0+dnRvdGFsIC0gbW9kZS0+dnN5bmNfZW5kLAo+ICsJCQkJIFBWX1ZFUlRBX1ZCUCkgfAo+ ICsJCSAgIFZDNF9TRVRfRklFTEQobW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQs Cj4gKwkJCQkgUFZfVkVSVEFfVlNZTkMpKTsKPiArCUNSVENfV1JJVEUoUFZfVkVSVEIsCj4gKwkJ ICAgVkM0X1NFVF9GSUVMRChtb2RlLT52c3luY19zdGFydCAtIG1vZGUtPnZkaXNwbGF5LAo+ICsJ CQkJIFBWX1ZFUlRCX1ZGUCkgfAo+ICsJCSAgIFZDNF9TRVRfRklFTEQodmFjdGl2ZSwgUFZfVkVS VEJfVkFDVElWRSkpOwo+ICsJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxB Q0UpIHsKPiArCQkvKiBXcml0ZSBQVl9WRVJUQV9FVkVOL1ZFUlRCX0VWRU4gKi8KPiArCX0KPiAr Cj4gKwlDUlRDX1dSSVRFKFBWX0hBQ1RfQUNULCBtb2RlLT5oZGlzcGxheSk7Cj4gKwo+ICsJQ1JU Q19XUklURShQVl9WX0NPTlRST0wsCj4gKwkJICAgUFZfVkNPTlRST0xfQ09OVElOVU9VUyk7Cj4g Kwo+ICsJQ1JUQ19XUklURShQVl9DT05UUk9MLAo+ICsJCSAgIFZDNF9TRVRfRklFTEQoZm9ybWF0 LCBQVl9DT05UUk9MX0ZPUk1BVCkgfAo+ICsJCSAgIFZDNF9TRVRfRklFTEQodmM0X2dldF9maWZv X2Z1bGxfbGV2ZWwoZm9ybWF0KSwKPiArCQkJCSBQVl9DT05UUk9MX0ZJRk9fTEVWRUwpIHwKPiAr CQkgICBQVl9DT05UUk9MX0NMUl9BVF9TVEFSVCB8Cj4gKwkJICAgUFZfQ09OVFJPTF9UUklHR0VS X1VOREVSRkxPVyB8Cj4gKwkJICAgUFZfQ09OVFJPTF9XQUlUX0hTVEFSVCB8Cj4gKwkJICAgVkM0 X1NFVF9GSUVMRChQVl9DT05UUk9MX0NMS19TRUxFQ1RfRFBJX1NNSV9IRE1JLAo+ICsJCQkJIFBW X0NPTlRST0xfQ0xLX1NFTEVDVCkgfAo+ICsJCSAgIFBWX0NPTlRST0xfRklGT19DTFIgfAo+ICsJ CSAgIFBWX0NPTlRST0xfRU4pOwo+ICsKPiArCWlmIChkZWJ1Z19kdW1wX3JlZ3MpIHsKPiArCQlE Uk1fSU5GTygiQ1JUQyAlZCByZWdzIGFmdGVyOlxuIiwgZHJtX2NydGNfaW5kZXgoY3J0YykpOwo+ ICsJCXZjNF9jcnRjX2R1bXBfcmVncyh2YzRfY3J0Yyk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkCj4gK3JlcXVpcmVfaHZzX2VuYWJsZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAr ewo+ICsJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKPiArCj4gKwlXQVJO X09OX09OQ0UoKEhWU19SRUFEKFNDQUxFUl9ESVNQQ1RSTCkgJiBTQ0FMRVJfRElTUENUUkxfRU5B QkxFKSAhPQo+ICsJCSAgICAgU0NBTEVSX0RJU1BDVFJMX0VOQUJMRSk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIHZjNF9jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owo+ICsJc3RydWN0IHZjNF9kZXYg KnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKPiArCXN0cnVjdCB2YzRfY3J0YyAqdmM0X2NydGMgPSB0 b192YzRfY3J0YyhjcnRjKTsKPiArCj4gKwlyZXF1aXJlX2h2c19lbmFibGVkKGRldik7Cj4gKwo+ ICsJQ1JUQ19XUklURShQVl9WX0NPTlRST0wsCj4gKwkJICAgQ1JUQ19SRUFEKFBWX1ZfQ09OVFJP TCkgJiB+UFZfVkNPTlRST0xfVklERU4pOwo+ICsJd2hpbGUgKENSVENfUkVBRChQVl9WX0NPTlRS T0wpICYgUFZfVkNPTlRST0xfVklERU4pCj4gKwkJY3B1X3JlbGF4KCk7Cj4gKwo+ICsJLyogV2l0 aG91dCBhIHdhaXQgaGVyZSwgd2UgZW5kIHVwIHdpdGggYSBibGFjayBzY3JlZW4uICovCj4gKwlt c2xlZXAoMzApOwo+ICsKPiArCWlmIChIVlNfUkVBRChTQ0FMRVJfRElTUENUUkxYKHZjNF9jcnRj LT5jaGFubmVsKSkgJgo+ICsJICAgIFNDQUxFUl9ESVNQQ1RSTFhfRU5BQkxFKSB7Cj4gKwkJSFZT X1dSSVRFKFNDQUxFUl9ESVNQQ1RSTFgodmM0X2NydGMtPmNoYW5uZWwpLAo+ICsJCQkgIFNDQUxF Ul9ESVNQQ1RSTFhfUkVTRVQpOwo+ICsKPiArCQkvKiBXaGlsZSB0aGUgZG9jcyBzYXkgdGhhdCBy ZXNldCBpcyBzZWxmLWNsZWFyaW5nLCBpdAo+ICsJCSAqIHNlZW1zIGl0IGRvZXNuJ3QgYWN0dWFs bHkuCj4gKwkJICovCj4gKwkJSFZTX1dSSVRFKFNDQUxFUl9ESVNQQ1RSTFgodmM0X2NydGMtPmNo YW5uZWwpLCAwKTsKPiArCX0KPiArCj4gKwkvKiBPbmNlIHdlIGxlYXZlLCB0aGUgc2NhbGVyIHNo b3VsZCBiZSBkaXNhYmxlZCBhbmQgaXRzIGZpZm8gZW1wdHkuICovCj4gKwo+ICsJV0FSTl9PTl9P TkNFKEhWU19SRUFEKFNDQUxFUl9ESVNQQ1RSTFgodmM0X2NydGMtPmNoYW5uZWwpKSAmCj4gKwkJ ICAgICBTQ0FMRVJfRElTUENUUkxYX1JFU0VUKTsKPiArCj4gKwlXQVJOX09OX09OQ0UoVkM0X0dF VF9GSUVMRChIVlNfUkVBRChTQ0FMRVJfRElTUFNUQVRYKHZjNF9jcnRjLT5jaGFubmVsKSksCj4g KwkJCQkgICBTQ0FMRVJfRElTUFNUQVRYX01PREUpICE9Cj4gKwkJICAgICBTQ0FMRVJfRElTUFNU QVRYX01PREVfRElTQUJMRUQpOwo+ICsKPiArCVdBUk5fT05fT05DRSgoSFZTX1JFQUQoU0NBTEVS X0RJU1BTVEFUWCh2YzRfY3J0Yy0+Y2hhbm5lbCkpICYKPiArCQkgICAgICAoU0NBTEVSX0RJU1BT VEFUWF9GVUxMIHwgU0NBTEVSX0RJU1BTVEFUWF9FTVBUWSkpICE9Cj4gKwkJICAgICBTQ0FMRVJf RElTUFNUQVRYX0VNUFRZKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmM0X2NydGNfZW5hYmxl KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGNydGMtPmRldjsKPiArCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7Cj4g KwlzdHJ1Y3QgdmM0X2NydGMgKnZjNF9jcnRjID0gdG9fdmM0X2NydGMoY3J0Yyk7Cj4gKwlzdHJ1 Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlID0gY3J0Yy0+c3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbW9kZSA9ICZzdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKPiArCj4gKwlyZXF1aXJl X2h2c19lbmFibGVkKGRldik7Cj4gKwo+ICsJLyogVHVybiBvbiB0aGUgc2NhbGVyLCB3aGljaCB3 aWxsIHdhaXQgZm9yIHZzdGFydCB0byBzdGFydAo+ICsJICogY29tcG9zaXRpbmcuCj4gKwkgKi8K PiArCUhWU19XUklURShTQ0FMRVJfRElTUENUUkxYKHZjNF9jcnRjLT5jaGFubmVsKSwKPiArCQkg IFZDNF9TRVRfRklFTEQobW9kZS0+aGRpc3BsYXksIFNDQUxFUl9ESVNQQ1RSTFhfV0lEVEgpIHwK PiArCQkgIFZDNF9TRVRfRklFTEQobW9kZS0+dmRpc3BsYXksIFNDQUxFUl9ESVNQQ1RSTFhfSEVJ R0hUKSB8Cj4gKwkJICBTQ0FMRVJfRElTUENUUkxYX0VOQUJMRSk7Cj4gKwo+ICsJLyogVHVybiBv biB0aGUgcGl4ZWwgdmFsdmUsIHdoaWNoIHdpbGwgZW1pdCB0aGUgdnN0YXJ0IHNpZ25hbC4gKi8K PiArCUNSVENfV1JJVEUoUFZfVl9DT05UUk9MLAo+ICsJCSAgIENSVENfUkVBRChQVl9WX0NPTlRS T0wpIHwgUFZfVkNPTlRST0xfVklERU4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZjNF9jcnRj X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gKwkJCQkgc3RydWN0IGRybV9j cnRjX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMt PmRldjsKPiArCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7Cj4gKwlzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZTsKPiArCXN0cnVjdCB2YzRfY3J0YyAqdmM0X2NydGMgPSB0b192 YzRfY3J0YyhjcnRjKTsKPiArCXUzMiBkbGlzdF9jb3VudCA9IDA7Cj4gKwo+ICsJZHJtX2F0b21p Y19jcnRjX3N0YXRlX2Zvcl9lYWNoX3BsYW5lKHBsYW5lLCBzdGF0ZSkgewo+ICsJCXN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlID0KPiArCQkJc3RhdGUtPnN0YXRlLT5wbGFuZV9z dGF0ZXNbZHJtX3BsYW5lX2luZGV4KHBsYW5lKV07Cj4gKwo+ICsJCS8qIHBsYW5lIG1pZ2h0IG5v dCBoYXZlIGNoYW5nZWQsIGluIHdoaWNoIGNhc2UgdGFrZQo+ICsJCSAqIGN1cnJlbnQgc3RhdGU6 Cj4gKwkJICovCj4gKwkJaWYgKCFwbGFuZV9zdGF0ZSkKPiArCQkJcGxhbmVfc3RhdGUgPSBwbGFu ZS0+c3RhdGU7Cj4gKwo+ICsJCWRsaXN0X2NvdW50ICs9IHZjNF9wbGFuZV9kbGlzdF9zaXplKHBs YW5lX3N0YXRlKTsKPiArCX0KPiArCj4gKwlkbGlzdF9jb3VudCsrOyAvKiBBY2NvdW50IGZvciBT Q0FMRVJfQ1RMMF9FTkQuICovCj4gKwo+ICsJaWYgKCF2YzRfY3J0Yy0+ZGxpc3QgfHwgZGxpc3Rf Y291bnQgPiB2YzRfY3J0Yy0+ZGxpc3Rfc2l6ZSkgewo+ICsJCXZjNF9jcnRjLT5kbGlzdCA9ICgo dTMyIF9faW9tZW0gKil2YzQtPmh2cy0+ZGxpc3QgKwo+ICsJCQkJICAgSFZTX0JPT1RMT0FERVJf RExJU1RfRU5EKTsKPiArCQl2YzRfY3J0Yy0+ZGxpc3Rfc2l6ZSA9ICgoU0NBTEVSX0RMSVNUX1NJ WkUgPj4gMikgLQo+ICsJCQkJCUhWU19CT09UTE9BREVSX0RMSVNUX0VORCk7Cj4gKwo+ICsJCWlm IChkbGlzdF9jb3VudCA+IHZjNF9jcnRjLT5kbGlzdF9zaXplKSB7Cj4gKwkJCURSTV9ERUJVR19L TVMoImRsaXN0IHRvbyBsYXJnZSBmb3IgQ1JUQyAoJWQgPiAlZCkuXG4iLAo+ICsJCQkJICAgICAg ZGxpc3RfY291bnQsIHZjNF9jcnRjLT5kbGlzdF9zaXplKTsKPiArCQkJcmV0dXJuIC1FSU5WQUw7 Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2 YzRfY3J0Y19hdG9taWNfYmVnaW4oc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIHZjNF9jcnRjX2F0b21pY19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gKwlzdHJ1 Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOwo+ICsJc3RydWN0IHZjNF9jcnRjICp2 YzRfY3J0YyA9IHRvX3ZjNF9jcnRjKGNydGMpOwo+ICsJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7 Cj4gKwlib29sIGRlYnVnX2R1bXBfcmVncyA9IGZhbHNlOwo+ICsJdTMyIF9faW9tZW0gKmRsaXN0 X25leHQgPSB2YzRfY3J0Yy0+ZGxpc3Q7Cj4gKwo+ICsJaWYgKGRlYnVnX2R1bXBfcmVncykgewo+ ICsJCURSTV9JTkZPKCJDUlRDICVkIEhWUyBiZWZvcmU6XG4iLCBkcm1fY3J0Y19pbmRleChjcnRj KSk7Cj4gKwkJdmM0X2h2c19kdW1wX3N0YXRlKGRldik7Cj4gKwl9Cj4gKwo+ICsJLyogQ29weSBh bGwgdGhlIGFjdGl2ZSBwbGFuZXMnIGRsaXN0IGNvbnRlbnRzIHRvIHRoZSBoYXJkd2FyZSBkbGlz dC4KPiArCSAqCj4gKwkgKiBYWFg6IElmIHRoZSBuZXcgZGlzcGxheSBsaXN0IHdhcyBsYXJnZSBl bm91Z2ggdGhhdCBpdAo+ICsJICogb3ZlcmxhcHBlZCBhIGN1cnJlbnRseS1yZWFkIGRpc3BsYXkg bGlzdCwgd2UgbmVlZCB0byBkbwo+ICsJICogc29tZXRoaW5nIGxpa2UgZGlzYWJsZSBzY2Fub3V0 IGJlZm9yZSBwdXR0aW5nIGluIHRoZSBuZXcKPiArCSAqIGxpc3QuICBGb3Igbm93LCB3ZSdyZSBz YWZlIGJlY2F1c2Ugd2Ugb25seSBoYXZlIHRoZSB0d28KPiArCSAqIHBsYW5lcy4KPiArCSAqLwo+ ICsJZHJtX2F0b21pY19jcnRjX2Zvcl9lYWNoX3BsYW5lKHBsYW5lLCBjcnRjKSB7Cj4gKwkJZGxp c3RfbmV4dCArPSB2YzRfcGxhbmVfd3JpdGVfZGxpc3QocGxhbmUsIGRsaXN0X25leHQpOwo+ICsJ fQo+ICsKPiArCWlmIChkbGlzdF9uZXh0ID09IHZjNF9jcnRjLT5kbGlzdCkgewo+ICsJCS8qIElm IG5vIHBsYW5lcyB3ZXJlIGVuYWJsZWQsIHVzZSB0aGUgU0NBTEVSX0NUTDBfRU5ECj4gKwkJICog YXQgdGhlIHN0YXJ0IG9mIHRoZSBkaXNwbGF5IGxpc3QgbWVtb3J5IChpbiB0aGUKPiArCQkgKiBi b290bG9hZGVyIHNlY3Rpb24pLiAgV2UnbGwgcmV3cml0ZSB0aGF0Cj4gKwkJICogU0NBTEVSX0NU TDBfRU5ELCBqdXN0IGluIGNhc2UsIHRob3VnaC4KPiArCQkgKi8KPiArCQl3cml0ZWwoU0NBTEVS X0NUTDBfRU5ELCB2YzQtPmh2cy0+ZGxpc3QpOwo+ICsJCUhWU19XUklURShTQ0FMRVJfRElTUExJ U1RYKHZjNF9jcnRjLT5jaGFubmVsKSwgMCk7Cj4gKwl9IGVsc2Ugewo+ICsJCXdyaXRlbChTQ0FM RVJfQ1RMMF9FTkQsIGRsaXN0X25leHQpOwo+ICsJCWRsaXN0X25leHQrKzsKPiArCj4gKwkJSFZT X1dSSVRFKFNDQUxFUl9ESVNQTElTVFgodmM0X2NydGMtPmNoYW5uZWwpLAo+ICsJCQkgICh1MzIg Kil2YzRfY3J0Yy0+ZGxpc3QgLSAodTMyICopdmM0LT5odnMtPmRsaXN0KTsKPiArCj4gKwkJLyog TWFrZSB0aGUgbmV4dCBkaXNwbGF5IGxpc3Qgc3RhcnQgYWZ0ZXIgb3Vycy4gKi8KPiArCQl2YzRf Y3J0Yy0+ZGxpc3Rfc2l6ZSAtPSAoZGxpc3RfbmV4dCAtIHZjNF9jcnRjLT5kbGlzdCk7Cj4gKwkJ dmM0X2NydGMtPmRsaXN0ID0gZGxpc3RfbmV4dDsKPiArCX0KPiArCj4gKwlpZiAoZGVidWdfZHVt cF9yZWdzKSB7Cj4gKwkJRFJNX0lORk8oIkNSVEMgJWQgSFZTIGFmdGVyOlxuIiwgZHJtX2NydGNf aW5kZXgoY3J0YykpOwo+ICsJCXZjNF9odnNfZHVtcF9zdGF0ZShkZXYpOwo+ICsJfQo+ICsKPiAr CWlmIChjcnRjLT5zdGF0ZS0+ZXZlbnQpIHsKPiArCQl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsK PiArCQljcnRjLT5zdGF0ZS0+ZXZlbnQtPnBpcGUgPSBkcm1fY3J0Y19pbmRleChjcnRjKTsKPiAr Cj4gKwkJV0FSTl9PTihkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpICE9IDApOwo+ICsKPiArCQlz cGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Cj4gKwkJdmM0X2NydGMt PmV2ZW50ID0gY3J0Yy0+c3RhdGUtPmV2ZW50Owo+ICsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwo+ICsJCWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7 Cj4gKwl9Cj4gK30KPiArCj4gK2ludCB2YzRfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCBpbnQgY3J0Y19pZCkKPiArewo+ICsJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3Zj NF9kZXYoZGV2KTsKPiArCXN0cnVjdCB2YzRfY3J0YyAqdmM0X2NydGMgPSB2YzQtPmNydGNbY3J0 Y19pZF07Cj4gKwo+ICsJQ1JUQ19XUklURShQVl9JTlRFTiwgUFZfSU5UX1ZGUF9TVEFSVCk7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3ZvaWQgdmM0X2Rpc2FibGVfdmJsYW5rKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjX2lkKQo+ICt7Cj4gKwlzdHJ1Y3QgdmM0X2RldiAq dmM0ID0gdG9fdmM0X2RldihkZXYpOwo+ICsJc3RydWN0IHZjNF9jcnRjICp2YzRfY3J0YyA9IHZj NC0+Y3J0Y1tjcnRjX2lkXTsKPiArCj4gKwlDUlRDX1dSSVRFKFBWX0lOVEVOLCAwKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQKPiArdmM0X2NydGNfaGFuZGxlX3BhZ2VfZmxpcChzdHJ1Y3QgdmM0 X2NydGMgKnZjNF9jcnRjKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmdmM0X2Ny dGMtPmJhc2U7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owo+ICsJdW5z aWduZWQgbG9uZyBmbGFnczsKPiArCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ldmVudF9s b2NrLCBmbGFncyk7Cj4gKwlpZiAodmM0X2NydGMtPmV2ZW50KSB7Cj4gKwkJZHJtX2NydGNfc2Vu ZF92YmxhbmtfZXZlbnQoY3J0YywgdmM0X2NydGMtPmV2ZW50KTsKPiArCQl2YzRfY3J0Yy0+ZXZl bnQgPSBOVUxMOwo+ICsJfQo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9s b2NrLCBmbGFncyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCB2YzRfY3J0Y19pcnFf aGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgdmM0X2NydGMgKnZj NF9jcnRjID0gZGF0YTsKPiArCXUzMiBzdGF0ID0gQ1JUQ19SRUFEKFBWX0lOVFNUQVQpOwo+ICsJ aXJxcmV0dXJuX3QgcmV0ID0gSVJRX05PTkU7Cj4gKwo+ICsJaWYgKHN0YXQgJiBQVl9JTlRfVkZQ X1NUQVJUKSB7Cj4gKwkJQ1JUQ19XUklURShQVl9JTlRTVEFULCBQVl9JTlRfVkZQX1NUQVJUKTsK PiArCQlkcm1fY3J0Y19oYW5kbGVfdmJsYW5rKCZ2YzRfY3J0Yy0+YmFzZSk7Cj4gKwkJdmM0X2Ny dGNfaGFuZGxlX3BhZ2VfZmxpcCh2YzRfY3J0Yyk7Cj4gKwkJcmV0ID0gSVJRX0hBTkRMRUQ7Cj4g Kwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fY3J0Y19mdW5jcyB2YzRfY3J0Y19mdW5jcyA9IHsKPiArCS5zZXRfY29uZmlnID0gZHJtX2F0 b21pY19oZWxwZXJfc2V0X2NvbmZpZywKPiArCS5kZXN0cm95ID0gdmM0X2NydGNfZGVzdHJveSwK PiArCS5wYWdlX2ZsaXAgPSBkcm1fYXRvbWljX2hlbHBlcl9wYWdlX2ZsaXAsCj4gKwkuc2V0X3By b3BlcnR5ID0gTlVMTCwKPiArCS5jdXJzb3Jfc2V0ID0gTlVMTCwgLyogaGFuZGxlZCBieSBkcm1f bW9kZV9jdXJzb3JfdW5pdmVyc2FsICovCj4gKwkuY3Vyc29yX21vdmUgPSBOVUxMLCAvKiBoYW5k bGVkIGJ5IGRybV9tb2RlX2N1cnNvcl91bml2ZXJzYWwgKi8KPiArCS5yZXNldCA9IGRybV9hdG9t aWNfaGVscGVyX2NydGNfcmVzZXQsCj4gKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9h dG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlLAo+ICsJLmF0b21pY19kZXN0cm95X3N0 YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0cm95X3N0YXRlLAo+ICt9Owo+ICsKPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgdmM0X2NydGNfaGVscGVy X2Z1bmNzID0gewo+ICsJLm1vZGVfZml4dXAgPSB2YzRfY3J0Y19tb2RlX2ZpeHVwLAo+ICsJLm1v ZGVfc2V0X25vZmIgPSB2YzRfY3J0Y19tb2RlX3NldF9ub2ZiLAo+ICsJLmRpc2FibGUgPSB2YzRf Y3J0Y19kaXNhYmxlLAo+ICsJLmVuYWJsZSA9IHZjNF9jcnRjX2VuYWJsZSwKPiArCS5hdG9taWNf Y2hlY2sgPSB2YzRfY3J0Y19hdG9taWNfY2hlY2ssCj4gKwkuYXRvbWljX2JlZ2luID0gdmM0X2Ny dGNfYXRvbWljX2JlZ2luLAo+ICsJLmF0b21pY19mbHVzaCA9IHZjNF9jcnRjX2F0b21pY19mbHVz aCwKPiArfTsKPiArCj4gKy8qIEZyZWVzIHRoZSBwYWdlIGZsaXAgZXZlbnQgd2hlbiB0aGUgRFJN IGRldmljZSBpcyBjbG9zZWQgd2l0aCB0aGUKPiArICogZXZlbnQgc3RpbGwgb3V0c3RhbmRpbmcu Cj4gKyAqLwo+ICt2b2lkIHZjNF9jYW5jZWxfcGFnZV9mbGlwKHN0cnVjdCBkcm1fY3J0YyAqY3J0 Yywgc3RydWN0IGRybV9maWxlICpmaWxlKQo+ICt7Cj4gKwlzdHJ1Y3QgdmM0X2NydGMgKnZjNF9j cnRjID0gdG9fdmM0X2NydGMoY3J0Yyk7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0 Yy0+ZGV2Owo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4gKwlzcGluX2xvY2tfaXJxc2F2 ZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Cj4gKwo+ICsJaWYgKHZjNF9jcnRjLT5ldmVudCAm JiB2YzRfY3J0Yy0+ZXZlbnQtPmJhc2UuZmlsZV9wcml2ID09IGZpbGUpIHsKPiArCQl2YzRfY3J0 Yy0+ZXZlbnQtPmJhc2UuZGVzdHJveSgmdmM0X2NydGMtPmV2ZW50LT5iYXNlKTsKPiArCQlkcm1f Y3J0Y192YmxhbmtfcHV0KGNydGMpOwo+ICsJCXZjNF9jcnRjLT5ldmVudCA9IE5VTEw7Cj4gKwl9 Cj4gKwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmM0X2NydGNfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYs IHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKPiArewo+ICsJc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwo+ICsJc3RydWN0IGRy bV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShtYXN0ZXIpOwo+ICsJc3RydWN0IHZjNF9k ZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZHJtKTsKPiArCXN0cnVjdCB2YzRfY3J0YyAqdmM0X2NydGM7 Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5 X3BsYW5lLCAqY3Vyc29yX3BsYW5lOwo+ICsJaW50IHJldDsKPiArCj4gKwlwcmltYXJ5X3BsYW5l ID0gdmM0X3BsYW5lX2luaXQoZHJtLCBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKPiArCWlmICgh cHJpbWFyeV9wbGFuZSkgewo+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGNvbnN0cnVjdCBw cmltYXJ5IHBsYW5lXG4iKTsKPiArCQlyZXQgPSBQVFJfRVJSKHByaW1hcnlfcGxhbmUpOwo+ICsJ CWdvdG8gZmFpbDsKPiArCX0KPiArCj4gKwljdXJzb3JfcGxhbmUgPSB2YzRfcGxhbmVfaW5pdChk cm0sIERSTV9QTEFORV9UWVBFX0NVUlNPUik7Cj4gKwlpZiAoIWN1cnNvcl9wbGFuZSkgewo+ICsJ CWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGNvbnN0cnVjdCBjdXJzb3IgcGxhbmVcbiIpOwo+ICsJ CXJldCA9IFBUUl9FUlIoY3Vyc29yX3BsYW5lKTsKPiArCQlnb3RvIGZhaWw7Cj4gKwl9Cj4gKwo+ ICsJdmM0X2NydGMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnZjNF9jcnRjKSwgR0ZQX0tF Uk5FTCk7Cj4gKwlpZiAoIXZjNF9jcnRjKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJY3J0YyA9 ICZ2YzRfY3J0Yy0+YmFzZTsKPiArCj4gKwl2YzRfY3J0Yy0+cmVncyA9IHZjNF9pb3JlbWFwX3Jl Z3MocGRldiwgMCk7Cj4gKwlpZiAoSVNfRVJSKHZjNF9jcnRjLT5yZWdzKSkKPiArCQlyZXR1cm4g UFRSX0VSUih2YzRfY3J0Yy0+cmVncyk7Cj4gKwo+ICsJZHJtX2NydGNfaW5pdF93aXRoX3BsYW5l cyhkcm0sIGNydGMsIHByaW1hcnlfcGxhbmUsIGN1cnNvcl9wbGFuZSwKPiArCQkJCSAgJnZjNF9j cnRjX2Z1bmNzKTsKPiArCWRybV9jcnRjX2hlbHBlcl9hZGQoY3J0YywgJnZjNF9jcnRjX2hlbHBl cl9mdW5jcyk7Cj4gKwlwcmltYXJ5X3BsYW5lLT5jcnRjID0gY3J0YzsKPiArCWN1cnNvcl9wbGFu ZS0+Y3J0YyA9IGNydGM7Cj4gKwl2YzQtPmNydGNbZHJtX2NydGNfaW5kZXgoY3J0YyldID0gdmM0 X2NydGM7Cj4gKwo+ICsJLyogVW50aWwgd2UgaGF2ZSBmdWxsIHNjYW5vdXQgc2V0dXAgdG8gcm91 dGUgdGhpbmdzIHRocm91Z2ggdG8KPiArCSAqIGVuY29kZXJzLCBsaW5lIHRoaW5ncyB1cCBsaWtl IHRoZSBmaXJtd2FyZSBkaWQuCj4gKwkgKi8KPiArCXN3aXRjaCAoZHJtX2NydGNfaW5kZXgoY3J0 YykpIHsKPiArCWNhc2UgMDoKPiArCQl2YzRfY3J0Yy0+Y2hhbm5lbCA9IDA7Cj4gKwkJYnJlYWs7 Cj4gKwljYXNlIDE6Cj4gKwkJdmM0X2NydGMtPmNoYW5uZWwgPSAyOwo+ICsJCWJyZWFrOwo+ICsJ ZGVmYXVsdDoKPiArCWNhc2UgMjoKPiArCQl2YzRfY3J0Yy0+Y2hhbm5lbCA9IDE7Cj4gKwkJYnJl YWs7Cj4gKwl9Cj4gKwo+ICsJQ1JUQ19XUklURShQVl9JTlRFTiwgMCk7Cj4gKwlDUlRDX1dSSVRF KFBWX0lOVFNUQVQsIFBWX0lOVF9WRlBfU1RBUlQpOwo+ICsJcmV0ID0gZGV2bV9yZXF1ZXN0X2ly cShkZXYsIHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCksCj4gKwkJCSAgICAgICB2YzRfY3J0Y19p cnFfaGFuZGxlciwgMCwgInZjNCBjcnRjIiwgdmM0X2NydGMpOwo+ICsKPiArCXBsYXRmb3JtX3Nl dF9kcnZkYXRhKHBkZXYsIHZjNF9jcnRjKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2ZhaWw6 Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2YzRfY3J0Y191bmJpbmQo c3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCj4gKwkJCSAgICB2b2lk ICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZv cm1fZGV2aWNlKGRldik7Cj4gKwlzdHJ1Y3QgdmM0X2NydGMgKnZjNF9jcnRjID0gZGV2X2dldF9k cnZkYXRhKGRldik7Cj4gKwo+ICsJdmM0X2NydGNfZGVzdHJveSgmdmM0X2NydGMtPmJhc2UpOwo+ ICsKPiArCUNSVENfV1JJVEUoUFZfSU5URU4sIDApOwo+ICsKPiArCXBsYXRmb3JtX3NldF9kcnZk YXRhKHBkZXYsIE5VTEwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVu dF9vcHMgdmM0X2NydGNfb3BzID0gewo+ICsJLmJpbmQgICA9IHZjNF9jcnRjX2JpbmQsCj4gKwku dW5iaW5kID0gdmM0X2NydGNfdW5iaW5kLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCB2YzRfY3J0 Y19kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJcmV0dXJu IGNvbXBvbmVudF9hZGQoJnBkZXYtPmRldiwgJnZjNF9jcnRjX29wcyk7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgdmM0X2NydGNfZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQo+ICt7Cj4gKwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZ2YzRfY3J0Y19vcHMpOwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHZj NF9jcnRjX2R0X21hdGNoW10gPSB7Cj4gKwl7IC5jb21wYXRpYmxlID0gImJyY20sdmM0LXBpeGVs dmFsdmUiIH0sCj4gKwl7fQo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgdmM0X2NydGNfZHJpdmVyID0gewo+ICsJLnByb2JlID0gdmM0X2NydGNfZGV2X3Byb2JlLAo+ ICsJLnJlbW92ZSA9IHZjNF9jcnRjX2Rldl9yZW1vdmUsCj4gKwkuZHJpdmVyID0gewo+ICsJCS5u YW1lID0gInZjNF9jcnRjIiwKPiArCQkub2ZfbWF0Y2hfdGFibGUgPSB2YzRfY3J0Y19kdF9tYXRj aCwKPiArCX0sCj4gK307Cj4gKwo+ICt2b2lkIF9faW5pdCB2YzRfY3J0Y19yZWdpc3Rlcih2b2lk KQo+ICt7Cj4gKwlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnZjNF9jcnRjX2RyaXZlcik7Cj4g K30KPiArCj4gK3ZvaWQgX19leGl0IHZjNF9jcnRjX3VucmVnaXN0ZXIodm9pZCkKPiArewo+ICsJ cGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnZjNF9jcnRjX2RyaXZlcik7Cj4gK30KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZGVidWdmcy5jIGIvZHJpdmVycy9ncHUv ZHJtL3ZjNC92YzRfZGVidWdmcy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAw MDAwLi5jNTU3MDM5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQv dmM0X2RlYnVnZnMuYwo+IEBAIC0wLDAgKzEsMzggQEAKPiArLyoKPiArICogIENvcHlyaWdodCDC qSAyMDE0IEJyb2FkY29tCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4g KyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKi8KPiAr Cj4gKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvY2lyY19i dWYuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kZWJ1 Z2ZzLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsKPiArI2luY2x1ZGUgInZjNF9kcnYu aCIKPiArI2luY2x1ZGUgInZjNF9yZWdzLmgiCj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9pbmZvX2xpc3QgdmM0X2RlYnVnZnNfbGlzdFtdID0gewo+ICsJeyJoZG1pX3JlZ3MiLCB2YzRf aGRtaV9kZWJ1Z2ZzX3JlZ3MsIDB9LAo+ICsJeyJodnNfcmVncyIsIHZjNF9odnNfZGVidWdmc19y ZWdzLCAwfSwKPiArCXsiY3J0YzBfcmVncyIsIHZjNF9jcnRjX2RlYnVnZnNfcmVncywgMCwgKHZv aWQgKikodWludHB0cl90KTB9LAo+ICsJeyJjcnRjMV9yZWdzIiwgdmM0X2NydGNfZGVidWdmc19y ZWdzLCAwLCAodm9pZCAqKSh1aW50cHRyX3QpMX0sCj4gKwl7ImNydGMyX3JlZ3MiLCB2YzRfY3J0 Y19kZWJ1Z2ZzX3JlZ3MsIDAsICh2b2lkICopKHVpbnRwdHJfdCkyfSwKPiArfTsKPiArI2RlZmlu ZSBWQzRfREVCVUdGU19FTlRSSUVTIEFSUkFZX1NJWkUodmM0X2RlYnVnZnNfbGlzdCkKPiArCj4g K2ludAo+ICt2YzRfZGVidWdmc19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQo+ICt7Cj4g KwlyZXR1cm4gZHJtX2RlYnVnZnNfY3JlYXRlX2ZpbGVzKHZjNF9kZWJ1Z2ZzX2xpc3QsIFZDNF9E RUJVR0ZTX0VOVFJJRVMsCj4gKwkJCQkJbWlub3ItPmRlYnVnZnNfcm9vdCwgbWlub3IpOwo+ICt9 Cj4gKwo+ICt2b2lkCj4gK3ZjNF9kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IGRybV9taW5vciAqbWlu b3IpCj4gK3sKPiArCWRybV9kZWJ1Z2ZzX3JlbW92ZV9maWxlcyh2YzRfZGVidWdmc19saXN0LCBW QzRfREVCVUdGU19FTlRSSUVTLCBtaW5vcik7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3ZjNC92YzRfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuYwo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uOWVjZjRiOGIKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmMKPiBAQCAtMCwwICsxLDI0 OSBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBCcm9hZGNvbQo+ICsgKiBD b3B5cmlnaHQgKEMpIDIwMTMgUmVkIEhhdAo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp b24gMiBhcwo+ICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K PiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9j b21wb25lbnQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvaW8uaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgv b2ZfcGxhdGZvcm0uaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ICsK PiArI2luY2x1ZGUgInZjNF9kcnYuaCIKPiArI2luY2x1ZGUgInZjNF9yZWdzLmgiCj4gKwo+ICsj ZGVmaW5lIERSSVZFUl9OQU1FICJ2YzQiCj4gKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkJyb2FkY29t IFZDNCBncmFwaGljcyIKPiArI2RlZmluZSBEUklWRVJfREFURSAiMjAxNDA2MTYiCj4gKyNkZWZp bmUgRFJJVkVSX01BSk9SIDAKPiArI2RlZmluZSBEUklWRVJfTUlOT1IgMAo+ICsjZGVmaW5lIERS SVZFUl9QQVRDSExFVkVMIDAKPiArCj4gKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgbWFwcGluZyB0 aGUgcmVncyBvbiBhIHBsYXRmb3JtIGRldmljZS4KPiArICoKPiArICogV2UgYXNzdW1lIG9ubHkg b25lIHJlZ2lzdGVyIHJhbmdlIHBlciBkZXZpY2UsIHNvIHdlIHVzZSBpbmRleCAwLgo+ICsgKi8K PiArdm9pZCBfX2lvbWVtICp2YzRfaW9yZW1hcF9yZWdzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KmRldiwgaW50IGluZGV4KQo+ICt7Cj4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKPiArCXZvaWQg X19pb21lbSAqbWFwOwo+ICsKPiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElP UkVTT1VSQ0VfTUVNLCBpbmRleCk7Cj4gKwltYXAgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJmRl di0+ZGV2LCByZXMpOwo+ICsJaWYgKElTX0VSUihtYXApKSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWls ZWQgdG8gbWFwIHJlZ2lzdGVyczogJWxkXG4iLCBQVFJfRVJSKG1hcCkpOwo+ICsJCXJldHVybiBt YXA7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIG1hcDsKPiArfQo+ICsKPiArc3RhdGljIGludCB2YzRf ZHJtX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKPiAr ewo+ICsJc3RydWN0IHZjNF9kZXYgKnZjNDsKPiArCWludCByZXQ7Cj4gKwo+ICsJdmM0ID0gZGV2 bV9remFsbG9jKGRldi0+ZGV2LCBzaXplb2YoKnZjNCksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCF2 YzQpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJZGV2X3NldF9kcnZkYXRhKGRldi0+ZGV2 LCBkZXYpOwo+ICsJdmM0LT5kZXYgPSBkZXY7Cj4gKwlkZXYtPmRldl9wcml2YXRlID0gdmM0Owo+ ICsKPiArCWRybV9tb2RlX2NvbmZpZ19pbml0KGRldik7Cj4gKwo+ICsJcmV0ID0gY29tcG9uZW50 X2JpbmRfYWxsKGRldi0+ZGV2LCBkZXYpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ ICsKPiArCXZjNF9rbXNfbG9hZChkZXYpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9CgotPmxvYWQg aGFzIGJhY2t3YXJkcyBpbml0IG9yZGVyaW5nICh3ZSByZWdpc3RlciBwdWJsaWMgaW50ZXJmYWNl cyBiZWZvcmUKY2FsbGluZyBpdCwgeWF5KSBiZWNhdXNlIGJhY2t3YXJkcyBjb21wYXQuIEhlbmNl IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UKZHJtX2Rldl9hbGxvYygpOyAuLi4gZHJpdmVyIGluaXQg aW5jbHVkaW5nIGRybV9kZXZfc2V0X3VuaXF1ZSgpOwpkcm1fZGV2X3JlZ2lzdGVyKCk7IGluc3Rl YWQgYW5kIGRyb3AgLT5sb2FkLgoKPiArCj4gK3N0YXRpYyBpbnQgdmM0X2RybV91bmxvYWQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldikKPiArewo+ICsJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZGV2 KTsKPiArCj4gKwljb21wb25lbnRfdW5iaW5kX2FsbChkZXYtPmRldiwgZGV2KTsKPiArCj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmM0X2RybV9wcmVjbG9zZShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gK3sKPiArCXN0cnVjdCBk cm1fY3J0YyAqY3J0YzsKPiArCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1v ZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkKPiArCQl2YzRfY2FuY2VsX3BhZ2VfZmxpcChjcnRj LCBmaWxlKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMg dmM0X2RybV9mb3BzID0gewo+ICsJLm93bmVyID0gVEhJU19NT0RVTEUsCj4gKwkub3BlbiA9IGRy bV9vcGVuLAo+ICsJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKPiArCS51bmxvY2tlZF9pb2N0bCA9 IGRybV9pb2N0bCwKPiArCS5tbWFwID0gZHJtX2dlbV9jbWFfbW1hcCwKPiArCS5wb2xsID0gZHJt X3BvbGwsCj4gKwkucmVhZCA9IGRybV9yZWFkLAo+ICsjaWZkZWYgQ09ORklHX0NPTVBBVAo+ICsJ LmNvbXBhdF9pb2N0bCA9IGRybV9jb21wYXRfaW9jdGwsCj4gKyNlbmRpZgo+ICsJLmxsc2VlayA9 IG5vb3BfbGxzZWVrLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faW9jdGxf ZGVzYyB2YzRfZHJtX2lvY3Rsc1tdID0gewo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1f ZHJpdmVyIHZjNF9kcm1fZHJpdmVyID0gewo+ICsJLmRyaXZlcl9mZWF0dXJlcyA9IChEUklWRVJf TU9ERVNFVCB8Cj4gKwkJCSAgICBEUklWRVJfQVRPTUlDIHwKPiArCQkJICAgIERSSVZFUl9HRU0g fAo+ICsJCQkgICAgRFJJVkVSX1BSSU1FKSwKPiArCS5sb2FkID0gdmM0X2RybV9sb2FkLAo+ICsJ LnVubG9hZCA9IHZjNF9kcm1fdW5sb2FkLAo+ICsJLnNldF9idXNpZCA9IGRybV9wbGF0Zm9ybV9z ZXRfYnVzaWQsCgp3aXRoIC0+bG9hZCBkcm9wcCBhbmQgc2V0X3VuaXF1ZSBjYWxsZWQgZGlyZWN0 bHkgeW91IGNhbiBkcm9wIHRoaXMgb25lCnRvby4gdGVncmEgaXMgYSBuaWNlIGV4YW1wbGUgZm9y IHRoZSBuZXcgc2VxdWVuY2UuCgo+ICsJLnByZWNsb3NlID0gdmM0X2RybV9wcmVjbG9zZSwKPiAr Cj4gKwkuZW5hYmxlX3ZibGFuayA9IHZjNF9lbmFibGVfdmJsYW5rLAo+ICsJLmRpc2FibGVfdmJs YW5rID0gdmM0X2Rpc2FibGVfdmJsYW5rLAo+ICsJLmdldF92YmxhbmtfY291bnRlciA9IGRybV92 YmxhbmtfY291bnQsCj4gKwo+ICsjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCj4gKwkuZGVi dWdmc19pbml0ID0gdmM0X2RlYnVnZnNfaW5pdCwKPiArCS5kZWJ1Z2ZzX2NsZWFudXAgPSB2YzRf ZGVidWdmc19jbGVhbnVwLAo+ICsjZW5kaWYKPiArCj4gKwkuZ2VtX2ZyZWVfb2JqZWN0ID0gZHJt X2dlbV9jbWFfZnJlZV9vYmplY3QsCj4gKwkuZ2VtX3ZtX29wcyA9ICZkcm1fZ2VtX2NtYV92bV9v cHMsCj4gKwo+ICsJLnByaW1lX2hhbmRsZV90b19mZCA9IGRybV9nZW1fcHJpbWVfaGFuZGxlX3Rv X2ZkLAo+ICsJLnByaW1lX2ZkX3RvX2hhbmRsZSA9IGRybV9nZW1fcHJpbWVfZmRfdG9faGFuZGxl LAo+ICsJLmdlbV9wcmltZV9pbXBvcnQgPSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKPiArCS5nZW1f cHJpbWVfZXhwb3J0ID0gZHJtX2dlbV9wcmltZV9leHBvcnQsCj4gKwkuZ2VtX3ByaW1lX2dldF9z Z190YWJsZQk9IGRybV9nZW1fY21hX3ByaW1lX2dldF9zZ190YWJsZSwKPiArCS5nZW1fcHJpbWVf aW1wb3J0X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJpbWVfaW1wb3J0X3NnX3RhYmxlLAo+ICsJ LmdlbV9wcmltZV92bWFwCQk9IGRybV9nZW1fY21hX3ByaW1lX3ZtYXAsCj4gKwkuZ2VtX3ByaW1l X3Z1bm1hcAk9IGRybV9nZW1fY21hX3ByaW1lX3Z1bm1hcCwKPiArCS5nZW1fcHJpbWVfbW1hcAkJ PSBkcm1fZ2VtX2NtYV9wcmltZV9tbWFwLAo+ICsKPiArCS5kdW1iX2NyZWF0ZSA9IHZjNF9kdW1i X2NyZWF0ZSwKPiArCS5kdW1iX21hcF9vZmZzZXQgPSBkcm1fZ2VtX2NtYV9kdW1iX21hcF9vZmZz ZXQsCj4gKwkuZHVtYl9kZXN0cm95ID0gZHJtX2dlbV9kdW1iX2Rlc3Ryb3ksCj4gKwo+ICsJLmlv Y3RscyA9IHZjNF9kcm1faW9jdGxzLAo+ICsJLm51bV9pb2N0bHMgPSBBUlJBWV9TSVpFKHZjNF9k cm1faW9jdGxzKSwKPiArCS5mb3BzID0gJnZjNF9kcm1fZm9wcywKPiArCj4gKwkubmFtZSA9IERS SVZFUl9OQU1FLAo+ICsJLmRlc2MgPSBEUklWRVJfREVTQywKPiArCS5kYXRlID0gRFJJVkVSX0RB VEUsCj4gKwkubWFqb3IgPSBEUklWRVJfTUFKT1IsCj4gKwkubWlub3IgPSBEUklWRVJfTUlOT1Is Cj4gKwkucGF0Y2hsZXZlbCA9IERSSVZFUl9QQVRDSExFVkVMLAo+ICt9Owo+ICsKPiArc3RhdGlj IGludCB2YzRfZHJtX2JpbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlyZXR1cm4gZHJt X3BsYXRmb3JtX2luaXQoJnZjNF9kcm1fZHJpdmVyLCB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZjNF9kcm1fdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRl dikKPiArewo+ICsJZHJtX3B1dF9kZXYocGxhdGZvcm1fZ2V0X2RydmRhdGEodG9fcGxhdGZvcm1f ZGV2aWNlKGRldikpKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRf bWFzdGVyX29wcyB2YzRfZHJtX29wcyA9IHsKPiArCS5iaW5kID0gdmM0X2RybV9iaW5kLAo+ICsJ LnVuYmluZCA9IHZjNF9kcm1fdW5iaW5kLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBjb21wYXJl X29mKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKPiArewo+ICsJcmV0dXJuIGRldi0+ b2Zfbm9kZSA9PSBkYXRhOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFkZF9jb21wb25lbnRzKHN0 cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGNvbXBvbmVudF9tYXRjaCAqKm1hdGNocHRyLAo+ICsJ CQkgIGNvbnN0IGNoYXIgKm5hbWUpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBk ZXYtPm9mX25vZGU7Cj4gKwl1bnNpZ25lZCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IDsgaSsrKSB7 Cj4gKwkJc3RydWN0IGRldmljZV9ub2RlICpub2RlOwo+ICsKPiArCQlub2RlID0gb2ZfcGFyc2Vf cGhhbmRsZShucCwgbmFtZSwgaSk7Cj4gKwkJaWYgKCFub2RlKQo+ICsJCQlicmVhazsKPiArCj4g KwkJY29tcG9uZW50X21hdGNoX2FkZChkZXYsIG1hdGNocHRyLCBjb21wYXJlX29mLCBub2RlKTsK PiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB2YzRfcGxhdGZv cm1fZHJtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVj dCBjb21wb25lbnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsKPiArCj4gKwlhZGRfY29tcG9uZW50cygm cGRldi0+ZGV2LCAmbWF0Y2gsICJjcnRjcyIpOwo+ICsJYWRkX2NvbXBvbmVudHMoJnBkZXYtPmRl diwgJm1hdGNoLCAiZW5jb2RlcnMiKTsKPiArCWFkZF9jb21wb25lbnRzKCZwZGV2LT5kZXYsICZt YXRjaCwgImh2c3MiKTsKPiArCj4gKwlwZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2sgPSBETUFf QklUX01BU0soMzIpOwo+ICsJcmV0dXJuIGNvbXBvbmVudF9tYXN0ZXJfYWRkX3dpdGhfbWF0Y2go JnBkZXYtPmRldiwgJnZjNF9kcm1fb3BzLCBtYXRjaCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg dmM0X3BsYXRmb3JtX2RybV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiAr ewo+ICsJZHJtX3B1dF9kZXYocGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldikpOwo+ICsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB2YzRf b2ZfbWF0Y2hbXSA9IHsKPiArCXsgLmNvbXBhdGlibGUgPSAiYnJjbSx2YzQiLCB9LAo+ICsJe30s Cj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHZjNF9vZl9tYXRjaCk7Cj4gKwo+ICtz dGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2YzRfcGxhdGZvcm1fZHJpdmVyID0gewo+ICsJ LnByb2JlCQk9IHZjNF9wbGF0Zm9ybV9kcm1fcHJvYmUsCj4gKwkucmVtb3ZlCQk9IHZjNF9wbGF0 Zm9ybV9kcm1fcmVtb3ZlLAo+ICsJLmRyaXZlcgkJPSB7Cj4gKwkJLm5hbWUJPSAidmM0LWRybSIs Cj4gKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCj4gKwkJLm9mX21hdGNoX3RhYmxlID0gdmM0X29m X21hdGNoLAo+ICsJfSwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgX19pbml0IHZjNF9kcm1fcmVn aXN0ZXIodm9pZCkKPiArewo+ICsJdmM0X2hkbWlfcmVnaXN0ZXIoKTsKPiArCXZjNF9jcnRjX3Jl Z2lzdGVyKCk7Cj4gKwl2YzRfaHZzX3JlZ2lzdGVyKCk7Cj4gKwlyZXR1cm4gcGxhdGZvcm1fZHJp dmVyX3JlZ2lzdGVyKCZ2YzRfcGxhdGZvcm1fZHJpdmVyKTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgX19leGl0IHZjNF9kcm1fdW5yZWdpc3Rlcih2b2lkKQo+ICt7Cj4gKwlwbGF0Zm9ybV9kcml2 ZXJfdW5yZWdpc3RlcigmdmM0X3BsYXRmb3JtX2RyaXZlcik7Cj4gKwl2YzRfaHZzX3VucmVnaXN0 ZXIoKTsKPiArCXZjNF9jcnRjX3VucmVnaXN0ZXIoKTsKPiArCXZjNF9oZG1pX3VucmVnaXN0ZXIo KTsKPiArfQo+ICsKPiArbW9kdWxlX2luaXQodmM0X2RybV9yZWdpc3Rlcik7Cj4gK21vZHVsZV9l eGl0KHZjNF9kcm1fdW5yZWdpc3Rlcik7Cj4gKwo+ICtNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnZj NC1kcm0iKTsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJCcm9hZGNvbSBWQzQgRFJNIERyaXZlciIp Owo+ICtNT0RVTEVfQVVUSE9SKCJFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PiIpOwo+ICtN T0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92 YzQvdmM0X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgKPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjFiMGEwYjAKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgKPiBAQCAtMCwwICsxLDEyMyBAQAo+ICsv Kgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQnJvYWRjb20KPiArICoKPiArICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYXMKPiArICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImRybVAuaCIKPiArI2luY2x1ZGUgImRy bV9nZW1fY21hX2hlbHBlci5oIgo+ICsKPiArc3RydWN0IHZjNF9kZXYgewo+ICsJc3RydWN0IGRy bV9kZXZpY2UgKmRldjsKPiArCj4gKwlzdHJ1Y3QgdmM0X2hkbWkgKmhkbWk7Cj4gKwlzdHJ1Y3Qg dmM0X2h2cyAqaHZzOwo+ICsJc3RydWN0IHZjNF9jcnRjICpjcnRjWzNdOwo+ICt9Owo+ICsKPiAr c3RhdGljIGlubGluZSBzdHJ1Y3QgdmM0X2RldiAqCj4gK3RvX3ZjNF9kZXYoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKPiArewo+ICsJcmV0dXJuIChzdHJ1Y3QgdmM0X2RldiAqKWRldi0+ZGV2X3By aXZhdGU7Cj4gK30KPiArCj4gK3N0cnVjdCB2YzRfYm8gewo+ICsJc3RydWN0IGRybV9nZW1fY21h X29iamVjdCBiYXNlOwo+ICt9Owo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgdmM0X2JvICoK PiArdG9fdmM0X2JvKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqYm8pCj4gK3sKPiArCXJldHVybiAo c3RydWN0IHZjNF9ibyAqKWJvOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgdmM0X2h2cyB7Cj4gKwlzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Owo+ICsJdm9pZCBfX2lvbWVtICpyZWdzOwo+ICsJdm9p ZCBfX2lvbWVtICpkbGlzdDsKPiArfTsKPiArCj4gK3N0cnVjdCB2YzRfY3J0YyB7Cj4gKwlzdHJ1 Y3QgZHJtX2NydGMgYmFzZTsKPiArCXZvaWQgX19pb21lbSAqcmVnczsKPiArCj4gKwkvKiBXaGlj aCBIVlMgY2hhbm5lbCB3ZSdyZSB1c2luZyBmb3Igb3VyIENSVEMuICovCj4gKwlpbnQgY2hhbm5l bDsKPiArCj4gKwkvKiBQb2ludGVyIHRvIHRoZSBhY3R1YWwgaGFyZHdhcmUgZGlzcGxheSBsaXN0 IG1lbW9yeSBmb3IgdGhlCj4gKwkgKiBjcnRjLgo+ICsJICovCj4gKwl1MzIgX19pb21lbSAqZGxp c3Q7Cj4gKwo+ICsJdTMyIGRsaXN0X3NpemU7IC8qIGluIGR3b3JkcyAqLwo+ICsKPiArCXN0cnVj dCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50Owo+ICt9Owo+ICsKPiArc3RhdGljIGlu bGluZSBzdHJ1Y3QgdmM0X2NydGMgKgo+ICt0b192YzRfY3J0YyhzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCj4gK3sKPiArCXJldHVybiAoc3RydWN0IHZjNF9jcnRjICopY3J0YzsKPiArfQo+ICsKPiAr c3RydWN0IHZjNF9wbGFuZSB7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lIGJhc2U7Cj4gK307Cj4gKwo+ ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB2YzRfcGxhbmUgKgo+ICt0b192YzRfcGxhbmUoc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUpCj4gK3sKPiArCXJldHVybiAoc3RydWN0IHZjNF9wbGFuZSAqKXBs YW5lOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIEhWU19SRUFEKG9mZnNldCkgcmVhZGwodmM0LT5odnMt PnJlZ3MgKyBvZmZzZXQpCj4gKyNkZWZpbmUgSFZTX1dSSVRFKG9mZnNldCwgdmFsKSB3cml0ZWwo dmFsLCB2YzQtPmh2cy0+cmVncyArIG9mZnNldCkKPiArCj4gKy8qIHZjNF9iby5jICovCj4gK3Zv aWQgdmM0X2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iaik7Cj4gK3N0 cnVjdCB2YzRfYm8gKnZjNF9ib19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90 IHNpemUpOwo+ICtpbnQgdmM0X2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 LAo+ICsJCSAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCSAgICBzdHJ1Y3QgZHJtX21v ZGVfY3JlYXRlX2R1bWIgKmFyZ3MpOwo+ICtzdHJ1Y3QgZG1hX2J1ZiAqdmM0X3ByaW1lX2V4cG9y dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkJIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq b2JqLCBpbnQgZmxhZ3MpOwo+ICsKPiArLyogdmM0X2NydGMuYyAqLwo+ICt2b2lkIHZjNF9jcnRj X3JlZ2lzdGVyKHZvaWQpOwo+ICt2b2lkIHZjNF9jcnRjX3VucmVnaXN0ZXIodm9pZCk7Cj4gK2lu dCB2YzRfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Y19pZCk7 Cj4gK3ZvaWQgdmM0X2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBj cnRjX2lkKTsKPiArdm9pZCB2YzRfY2FuY2VsX3BhZ2VfZmxpcChzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7Cj4gK2ludCB2YzRfY3J0Y19kZWJ1Z2ZzX3JlZ3Mo c3RydWN0IHNlcV9maWxlICptLCB2b2lkICphcmcpOwo+ICsKPiArLyogdmM0X2RlYnVnZnMuYyAq Lwo+ICtpbnQgdmM0X2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7Cj4gK3Zv aWQgdmM0X2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7Cj4gKwo+ICsv KiB2YzRfZHJ2LmMgKi8KPiArdm9pZCBfX2lvbWVtICp2YzRfaW9yZW1hcF9yZWdzKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKmRldiwgaW50IGluZGV4KTsKPiArCj4gKy8qIHZjNF9oZG1pLmMgKi8K PiArdm9pZCB2YzRfaGRtaV9yZWdpc3Rlcih2b2lkKTsKPiArdm9pZCB2YzRfaGRtaV91bnJlZ2lz dGVyKHZvaWQpOwo+ICtzdHJ1Y3QgZHJtX2VuY29kZXIgKnZjNF9oZG1pX2VuY29kZXJfaW5pdChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiArc3RydWN0IGRybV9jb25uZWN0b3IgKnZjNF9oZG1p X2Nvbm5lY3Rvcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCQkJICAgICAgc3Ry dWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKPiAraW50IHZjNF9oZG1pX2RlYnVnZnNfcmVncyhz dHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCk7Cj4gKwo+ICsvKiB2YzRfaHZzLmMgKi8K PiArdm9pZCB2YzRfaHZzX3JlZ2lzdGVyKHZvaWQpOwo+ICt2b2lkIHZjNF9odnNfdW5yZWdpc3Rl cih2b2lkKTsKPiArdm9pZCB2YzRfaHZzX2R1bXBfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRl dik7Cj4gK2ludCB2YzRfaHZzX2RlYnVnZnNfcmVncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQg KnVudXNlZCk7Cj4gKwo+ICsvKiB2YzRfa21zLmMgKi8KPiAraW50IHZjNF9rbXNfbG9hZChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KTsKPiArCj4gKy8qIHZjNF9wbGFuZS5jICovCj4gK3N0cnVjdCBk cm1fcGxhbmUgKnZjNF9wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCQkg ZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlKTsKPiArdTMyIHZjNF9wbGFuZV93cml0ZV9kbGlzdChz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwgdTMyIF9faW9tZW0gKmRsaXN0KTsKPiArdTMyIHZjNF9w bGFuZV9kbGlzdF9zaXplKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKTsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL3Zj NC92YzRfaGRtaS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5jMWFj OTZlCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2hkbWku Ywo+IEBAIC0wLDAgKzEsNjUxIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNCBUaGUg TGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICogQ29weXJpZ2h0IChD KSAyMDEzIFJlZCBIYXQKPiArICogQXV0aG9yOiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5j b20+Cj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cj4gKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQo+ ICsgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0 IFdJVEhPVVQKPiArICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKPiArICog bW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCj4gKyAqIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KPiAr ICovCj4gKwo+ICsjaW5jbHVkZSAiZHJtX2F0b21pY19oZWxwZXIuaCIKPiArI2luY2x1ZGUgImRy bV9jcnRjX2hlbHBlci5oIgo+ICsjaW5jbHVkZSAiZHJtX2VkaWQuaCIKPiArI2luY2x1ZGUgImxp bnV4L2Nsay5oIgo+ICsjaW5jbHVkZSAibGludXgvY29tcG9uZW50LmgiCj4gKyNpbmNsdWRlICJs aW51eC9vZl9ncGlvLmgiCj4gKyNpbmNsdWRlICJsaW51eC9vZl9wbGF0Zm9ybS5oIgo+ICsjaW5j bHVkZSAidmM0X2Rydi5oIgo+ICsjaW5jbHVkZSAidmM0X3JlZ3MuaCIKPiArCj4gKy8qIEdlbmVy YWwgSERNSSBoYXJkd2FyZSBzdGF0ZS4gKi8KPiArc3RydWN0IHZjNF9oZG1pIHsKPiArCXN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Cj4gKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRkYzsKPiAr CXZvaWQgX19pb21lbSAqaGRtaWNvcmVfcmVnczsKPiArCXZvaWQgX19pb21lbSAqaGRfcmVnczsK PiArCWludCBocGRfZ3BpbzsKPiArCj4gKwkvKiBQcm9iZWQgdmlkZW8gbW9kZSBhdCBib290IHRp bWUsIHVzZWQgdG8gZmlsdGVyIGRpc3BsYXkKPiArCSAqIG1vZGVzIHRvIG9ubHkgYWxsb3cgZXF1 aXZhbGVudCBvbmVzIChzaW5jZSB3ZSBjYW4ndCBzZXQgdGhlCj4gKwkgKiBwaXhlbCBjbG9jayB5 ZXQpLgo+ICsJICovCj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBib290X21vZGU7Cj4gK307 Cj4gKyNkZWZpbmUgSERNSV9SRUFEKG9mZnNldCkgcmVhZGwodmM0LT5oZG1pLT5oZG1pY29yZV9y ZWdzICsgb2Zmc2V0KQo+ICsjZGVmaW5lIEhETUlfV1JJVEUob2Zmc2V0LCB2YWwpIHdyaXRlbCh2 YWwsIHZjNC0+aGRtaS0+aGRtaWNvcmVfcmVncyArIG9mZnNldCkKPiArI2RlZmluZSBIRF9SRUFE KG9mZnNldCkgcmVhZGwodmM0LT5oZG1pLT5oZF9yZWdzICsgb2Zmc2V0KQo+ICsjZGVmaW5lIEhE X1dSSVRFKG9mZnNldCwgdmFsKSB3cml0ZWwodmFsLCB2YzQtPmhkbWktPmhkX3JlZ3MgKyBvZmZz ZXQpCj4gKwo+ICsvKiBWQzQgSERNSSBlbmNvZGVyIEtNUyBzdHJ1Y3QgKi8KPiArc3RydWN0IHZj NF9oZG1pX2VuY29kZXIgewo+ICsJc3RydWN0IGRybV9lbmNvZGVyIGJhc2U7Cj4gKwlib29sIGhk bWlfbW9uaXRvcjsKPiArfTsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgdmM0X2hkbWlfZW5jb2Rl ciAqCj4gK3RvX3ZjNF9oZG1pX2VuY29kZXIoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQo+ ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGVuY29kZXIsIHN0cnVjdCB2YzRfaGRtaV9lbmNv ZGVyLCBiYXNlKTsKPiArfQo+ICsKPiArLyogVkM0IEhETUkgY29ubmVjdG9yIEtNUyBzdHJ1Y3Qg Ki8KPiArc3RydWN0IHZjNF9oZG1pX2Nvbm5lY3RvciB7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciBiYXNlOwo+ICsKPiArCS8qIFNpbmNlIHRoZSBjb25uZWN0b3IgaXMgYXR0YWNoZWQgdG8ganVz dCB0aGUgb25lIGVuY29kZXIsCj4gKwkgKiB0aGlzIGlzIHRoZSByZWZlcmVuY2UgdG8gaXQgc28g d2UgY2FuIGRvIHRoZSBiZXN0X2VuY29kZXIoKQo+ICsJICogaG9vay4KPiArCSAqLwo+ICsJc3Ry dWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwo+ICt9Owo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB2 YzRfaGRtaV9jb25uZWN0b3IgKgo+ICt0b192YzRfaGRtaV9jb25uZWN0b3Ioc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvcikKPiArewo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihjb25uZWN0 b3IsIHN0cnVjdCB2YzRfaGRtaV9jb25uZWN0b3IsIGJhc2UpOwo+ICt9Cj4gKwo+ICsjZGVmaW5l IEhETUlfUkVHKHJlZykgeyByZWcsICNyZWcgfQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHsKPiAr CXUzMiByZWc7Cj4gKwljb25zdCBjaGFyICpuYW1lOwo+ICt9IGhkbWlfcmVnc1tdID0gewo+ICsJ SERNSV9SRUcoVkM0X0hETUlfQ09SRV9SRVYpLAo+ICsJSERNSV9SRUcoVkM0X0hETUlfU1dfUkVT RVRfQ09OVFJPTCksCj4gKwlIRE1JX1JFRyhWQzRfSERNSV9IT1RQTFVHX0lOVCksCj4gKwlIRE1J X1JFRyhWQzRfSERNSV9IT1RQTFVHKSwKPiArCUhETUlfUkVHKFZDNF9IRE1JX0hPUlpBKSwKPiAr CUhETUlfUkVHKFZDNF9IRE1JX0hPUlpCKSwKPiArCUhETUlfUkVHKFZDNF9IRE1JX0ZJRk9fQ1RM KSwKPiArCUhETUlfUkVHKFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MKSwKPiArCUhETUlfUkVH KFZDNF9IRE1JX1ZFUlRBMCksCj4gKwlIRE1JX1JFRyhWQzRfSERNSV9WRVJUQTEpLAo+ICsJSERN SV9SRUcoVkM0X0hETUlfVkVSVEIwKSwKPiArCUhETUlfUkVHKFZDNF9IRE1JX1ZFUlRCMSksCj4g KwlIRE1JX1JFRyhWQzRfSERNSV9UWF9QSFlfUkVTRVRfQ1RMKSwKPiArfTsKPiArc3RhdGljIGNv bnN0IHN0cnVjdCB7Cj4gKwl1MzIgcmVnOwo+ICsJY29uc3QgY2hhciAqbmFtZTsKPiArfSBoZF9y ZWdzW10gPSB7Cj4gKwlIRE1JX1JFRyhWQzRfSERfTV9DVEwpLAo+ICsJSERNSV9SRUcoVkM0X0hE X01BSV9DVEwpLAo+ICsJSERNSV9SRUcoVkM0X0hEX1ZJRF9DVEwpLAo+ICsJSERNSV9SRUcoVkM0 X0hEX0NTQ19DVEwpLAo+ICsJSERNSV9SRUcoVkM0X0hEX0ZSQU1FX0NPVU5UKSwKPiArfTsKPiAr Cj4gKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKPiAraW50IHZjNF9oZG1pX2RlYnVnZnNfcmVncyhz dHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKPiArewo+ICsJc3RydWN0IGRybV9pbmZv X25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKPiArCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2Owo+ICsJc3RydWN0IHZjNF9k ZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKGhkbWlfcmVncyk7IGkrKykgewo+ICsJCXNlcV9wcmludGYobSwgIiVz ICgweCUwNHgpOiAweCUwOHhcbiIsCj4gKwkJCSAgIGhkbWlfcmVnc1tpXS5uYW1lLCBoZG1pX3Jl Z3NbaV0ucmVnLAo+ICsJCQkgICBIRE1JX1JFQUQoaGRtaV9yZWdzW2ldLnJlZykpOwo+ICsJfQo+ ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhkX3JlZ3MpOyBpKyspIHsKPiArCQlz ZXFfcHJpbnRmKG0sICIlcyAoMHglMDR4KTogMHglMDh4XG4iLAo+ICsJCQkgICBoZF9yZWdzW2ld Lm5hbWUsIGhkX3JlZ3NbaV0ucmVnLAo+ICsJCQkgICBIRF9SRUFEKGhkX3JlZ3NbaV0ucmVnKSk7 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArI2VuZGlmIC8qIENPTkZJR19ERUJVR19G UyAqLwo+ICsKPiArc3RhdGljIHZvaWQgdmM0X2hkbWlfZHVtcF9yZWdzKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7 Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShoZG1pX3JlZ3Mp OyBpKyspIHsKPiArCQlEUk1fSU5GTygiMHglMDR4ICglcyk6IDB4JTA4eFxuIiwKPiArCQkJIGhk bWlfcmVnc1tpXS5yZWcsIGhkbWlfcmVnc1tpXS5uYW1lLAo+ICsJCQkgSERNSV9SRUFEKGhkbWlf cmVnc1tpXS5yZWcpKTsKPiArCX0KPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhkX3Jl Z3MpOyBpKyspIHsKPiArCQlEUk1fSU5GTygiMHglMDR4ICglcyk6IDB4JTA4eFxuIiwKPiArCQkJ IGhkX3JlZ3NbaV0ucmVnLCBoZF9yZWdzW2ldLm5hbWUsCj4gKwkJCSBIRF9SRUFEKGhkX3JlZ3Nb aV0ucmVnKSk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3Rh dHVzCj4gK3ZjNF9oZG1pX2Nvbm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciwgYm9vbCBmb3JjZSkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNv bm5lY3Rvci0+ZGV2Owo+ICsJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsK PiArCj4gKwlpZiAodmM0LT5oZG1pLT5ocGRfZ3Bpbykgewo+ICsJCWlmIChncGlvX2dldF92YWx1 ZSh2YzQtPmhkbWktPmhwZF9ncGlvKSkKPiArCQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29u bmVjdGVkOwo+ICsJCWVsc2UKPiArCQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVj dGVkOwo+ICsJfQo+ICsKPiArCWlmIChIRE1JX1JFQUQoVkM0X0hETUlfSE9UUExVRykgJiBWQzRf SERNSV9IT1RQTFVHX0NPTk5FQ1RFRCkKPiArCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25u ZWN0ZWQ7Cj4gKwllbHNlCj4gKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVk Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2YzRfaGRtaV9jb25uZWN0b3JfZGVzdHJveShzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICt7Cj4gKwlkcm1fY29ubmVjdG9yX3VucmVn aXN0ZXIoY29ubmVjdG9yKTsKPiArCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZjNF9oZG1pX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiArewo+ICsJc3RydWN0IHZjNF9oZG1pX2Nvbm5l Y3RvciAqdmM0X2Nvbm5lY3RvciA9Cj4gKwkJdG9fdmM0X2hkbWlfY29ubmVjdG9yKGNvbm5lY3Rv cik7Cj4gKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSB2YzRfY29ubmVjdG9yLT5lbmNv ZGVyOwo+ICsJc3RydWN0IHZjNF9oZG1pX2VuY29kZXIgKnZjNF9lbmNvZGVyID0gdG9fdmM0X2hk bWlfZW5jb2RlcihlbmNvZGVyKTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0 b3ItPmRldjsKPiArCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7Cj4gKwlp bnQgcmV0ID0gMDsKPiArCXN0cnVjdCBlZGlkICplZGlkOwo+ICsKPiArCWVkaWQgPSBkcm1fZ2V0 X2VkaWQoY29ubmVjdG9yLCB2YzQtPmhkbWktPmRkYyk7Cj4gKwlpZiAoIWVkaWQpCj4gKwkJcmV0 dXJuIC1FTk9ERVY7Cj4gKwo+ICsJdmM0X2VuY29kZXItPmhkbWlfbW9uaXRvciA9IGRybV9kZXRl Y3RfaGRtaV9tb25pdG9yKGVkaWQpOwo+ICsJZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlk X3Byb3BlcnR5KGNvbm5lY3RvciwgZWRpZCk7Cj4gKwlyZXQgPSBkcm1fYWRkX2VkaWRfbW9kZXMo Y29ubmVjdG9yLCBlZGlkKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKiBTaW5j ZSB3ZSBjYW4ndCBzZXQgdGhlIHBpeGVsIGNsb2NrIHlldCwgZmlsdGVyIG91dCBhbGwgdGhlIEVE SUQKPiArICogbW9kZXMgdGhhdCBkb24ndCBtYXRjaCB3aGF0IHdhcyBzZXQgdXAgYnkgdGhlIGZp cm13YXJlLgo+ICsgKi8KPiAraW50IHZjNF9oZG1pX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvciwKPiArCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCj4g K3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKPiArCXN0cnVj dCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7Cj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqYm9vdF9tb2RlID0gJnZjNC0+aGRtaS0+Ym9vdF9tb2RlOwo+ICsKPiArCWlmIChtb2Rl LT5oZGlzcGxheSAhPSBib290X21vZGUtPmhkaXNwbGF5IHx8Cj4gKwkgICAgbW9kZS0+aHN5bmNf c3RhcnQgIT0gYm9vdF9tb2RlLT5oc3luY19zdGFydCB8fAo+ICsJICAgIG1vZGUtPmhzeW5jX2Vu ZCAhPSBib290X21vZGUtPmhzeW5jX2VuZCB8fAo+ICsJICAgIG1vZGUtPmh0b3RhbCAhPSBib290 X21vZGUtPmh0b3RhbCkgewo+ICsJCXJldHVybiBNT0RFX0VSUk9SOwo+ICsJfQo+ICsKPiArCXJl dHVybiBNT0RFX09LOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyICoKPiAr dmM0X2hkbWlfY29ubmVjdG9yX2Jlc3RfZW5jb2RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yKQo+ICt7Cj4gKwlzdHJ1Y3QgdmM0X2hkbWlfY29ubmVjdG9yICpoZG1pX2Nvbm5lY3Rv ciA9Cj4gKwkJdG9fdmM0X2hkbWlfY29ubmVjdG9yKGNvbm5lY3Rvcik7Cj4gKwlyZXR1cm4gaGRt aV9jb25uZWN0b3ItPmVuY29kZXI7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9mdW5jcyB2YzRfaGRtaV9jb25uZWN0b3JfZnVuY3MgPSB7Cj4gKwkuZHBtcyA9 IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAo+ICsJLmRldGVjdCA9IHZjNF9oZG1p X2Nvbm5lY3Rvcl9kZXRlY3QsCj4gKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2lu Z2xlX2Nvbm5lY3Rvcl9tb2RlcywKPiArCS5kZXN0cm95ID0gdmM0X2hkbWlfY29ubmVjdG9yX2Rl c3Ryb3ksCj4gKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCj4g KwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9k dXBsaWNhdGVfc3RhdGUsCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hl bHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgdmM0X2hkbWlfY29ubmVjdG9yX2hlbHBl cl9mdW5jcyA9IHsKPiArCS5nZXRfbW9kZXMgPSB2YzRfaGRtaV9jb25uZWN0b3JfZ2V0X21vZGVz LAo+ICsJLm1vZGVfdmFsaWQgPSB2YzRfaGRtaV9tb2RlX3ZhbGlkLAo+ICsJLmJlc3RfZW5jb2Rl ciA9IHZjNF9oZG1pX2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIsCj4gK307Cj4gKwo+ICtzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqdmM0X2hkbWlfY29ubmVjdG9yX2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKPiArCQkJCQkgICAgICBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCj4gK3sKPiAr CXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBOVUxMOwo+ICsJc3RydWN0IHZjNF9o ZG1pX2Nvbm5lY3RvciAqaGRtaV9jb25uZWN0b3I7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlo ZG1pX2Nvbm5lY3RvciA9IGRldm1fa3phbGxvYyhkZXYtPmRldiwgc2l6ZW9mKCpoZG1pX2Nvbm5l Y3RvciksCj4gKwkJCQkgICAgICBHRlBfS0VSTkVMKTsKPiArCWlmICghaGRtaV9jb25uZWN0b3Ip IHsKPiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJCWdvdG8gZmFpbDsKPiArCX0KPiArCWNvbm5lY3Rv ciA9ICZoZG1pX2Nvbm5lY3Rvci0+YmFzZTsKPiArCj4gKwloZG1pX2Nvbm5lY3Rvci0+ZW5jb2Rl ciA9IGVuY29kZXI7Cj4gKwo+ICsJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgY29ubmVjdG9yLCAm dmM0X2hkbWlfY29ubmVjdG9yX2Z1bmNzLAo+ICsJCQkgICBEUk1fTU9ERV9DT05ORUNUT1JfSERN SUEpOwo+ICsJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJnZjNF9oZG1pX2Nv bm5lY3Rvcl9oZWxwZXJfZnVuY3MpOwo+ICsKPiArCWNvbm5lY3Rvci0+cG9sbGVkID0gKERSTV9D T05ORUNUT1JfUE9MTF9DT05ORUNUIHwKPiArCQkJICAgICBEUk1fQ09OTkVDVE9SX1BPTExfRElT Q09OTkVDVCk7Cj4gKwo+ICsJY29ubmVjdG9yLT5pbnRlcmxhY2VfYWxsb3dlZCA9IDA7Cj4gKwlj b25uZWN0b3ItPmRvdWJsZXNjYW5fYWxsb3dlZCA9IDA7Cj4gKwo+ICsJZHJtX2Nvbm5lY3Rvcl9y ZWdpc3Rlcihjb25uZWN0b3IpOwo+ICsKPiArCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5j b2Rlcihjb25uZWN0b3IsIGVuY29kZXIpOwo+ICsKPiArCXJldHVybiBjb25uZWN0b3I7Cj4gKwo+ ICsgZmFpbDoKPiArCWlmIChjb25uZWN0b3IpCj4gKwkJdmM0X2hkbWlfY29ubmVjdG9yX2Rlc3Ry b3koY29ubmVjdG9yKTsKPiArCj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCB2YzRfZW5jb2Rlcl9kZXN0cm95KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cikKPiArewo+ICsJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKPiArfQo+ICsKPiArc3Rh dGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyB2YzRfaGRtaV9lbmNvZGVyX2Z1bmNz ID0gewo+ICsJLmRlc3Ryb3kgPSB2YzRfZW5jb2Rlcl9kZXN0cm95LAo+ICt9Owo+ICsKPiArc3Rh dGljIGJvb2wgdmM0X2hkbWlfZW5jb2Rlcl9tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fZW5jb2RlciAq ZW5jb2RlciwKPiArCQkJCQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKPiAr CQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKPiArewo+ICsJcmV0 dXJuIHRydWU7Cj4gK30KCkFzIG1lbnRpb25lZCBhYm92ZSwgeW91IGNhbiBkcm9wIHRoaXMgb25l IGhlcmUuCgo+ICsKPiArc3RhdGljIHZvaWQgdmM0X2hkbWlfZW5jb2Rlcl9tb2RlX3NldChzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCj4gKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqdW5hZGp1c3RlZF9tb2RlLAo+ICsJCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7 Cj4gKwlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOwo+ICsJYm9vbCBkZWJ1 Z19kdW1wX3JlZ3MgPSBmYWxzZTsKPiArCWJvb2wgaHN5bmNfcG9zID0gIShtb2RlLT5mbGFncyAm IERSTV9NT0RFX0ZMQUdfTkhTWU5DKTsKPiArCWJvb2wgdnN5bmNfcG9zID0gIShtb2RlLT5mbGFn cyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKTsKPiArCXUzMiB2YWN0aXZlID0gKG1vZGUtPnZkaXNw bGF5ID4+Cj4gKwkJICAgICAgICgobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFD RSkgPyAxIDogMCkpOwo+ICsJdTMyIHZlcnRhID0gKFZDNF9TRVRfRklFTEQobW9kZS0+dnN5bmNf ZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQsCj4gKwkJCQkgICBWQzRfSERNSV9WRVJUQV9WU1ApIHwK PiArCQkgICAgIFZDNF9TRVRfRklFTEQobW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxh eSwKPiArCQkJCSAgIFZDNF9IRE1JX1ZFUlRBX1ZGUCkgfAo+ICsJCSAgICAgVkM0X1NFVF9GSUVM RCh2YWN0aXZlLCBWQzRfSERNSV9WRVJUQV9WQUwpKTsKPiArCXUzMiB2ZXJ0YiA9IChWQzRfU0VU X0ZJRUxEKDAsIFZDNF9IRE1JX1ZFUlRCX1ZTUE8pIHwKPiArCQkgICAgIFZDNF9TRVRfRklFTEQo bW9kZS0+dnRvdGFsIC0gbW9kZS0+dnN5bmNfZW5kLAo+ICsJCQkJICAgVkM0X0hETUlfVkVSVEJf VkJQKSk7Cj4gKwo+ICsJaWYgKGRlYnVnX2R1bXBfcmVncykgewo+ICsJCURSTV9JTkZPKCJIRE1J IHJlZ3MgYmVmb3JlOlxuIik7Cj4gKwkJdmM0X2hkbWlfZHVtcF9yZWdzKGRldik7Cj4gKwl9Cj4g Kwo+ICsJSERfV1JJVEUoVkM0X0hEX1ZJRF9DVEwsIDApOwo+ICsKPiArCS8qIFhYWDogVGhpcyBp cyB3aGVyZSB3ZSB3b3VsZCBzZXQgdGhlIEhETUkgc3RhdGUgbWFjaGluZQo+ICsJICogY2xvY2ss IGlmIHdlIGhhZCBhbiBpbnRlcmZhY2UgZm9yIGl0Lgo+ICsJICovCj4gKwo+ICsJSERNSV9XUklU RShWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTCwKPiArCQkgICBIRE1JX1JFQUQoVkM0X0hETUlf U0NIRURVTEVSX0NPTlRST0wpIHwKPiArCQkgICBWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTF9N QU5VQUxfRk9STUFUIHwKPiArCQkgICBWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTF9JR05PUkVf VlNZTkNfUFJFRElDVFMpOwo+ICsKPiArCUhETUlfV1JJVEUoVkM0X0hETUlfSE9SWkEsCj4gKwkJ ICAgKHZzeW5jX3BvcyA/IFZDNF9IRE1JX0hPUlpBX1ZQT1MgOiAwKSB8Cj4gKwkJICAgKGhzeW5j X3BvcyA/IFZDNF9IRE1JX0hPUlpBX0hQT1MgOiAwKSB8Cj4gKwkJICAgVkM0X1NFVF9GSUVMRCht b2RlLT5oZGlzcGxheSwgVkM0X0hETUlfSE9SWkFfSEFQKSk7Cj4gKwo+ICsJSERNSV9XUklURShW QzRfSERNSV9IT1JaQiwKPiArCQkgICBWQzRfU0VUX0ZJRUxEKG1vZGUtPmh0b3RhbCAtIG1vZGUt PmhzeW5jX2VuZCwKPiArCQkJCSBWQzRfSERNSV9IT1JaQl9IQlApIHwKPiArCQkgICBWQzRfU0VU X0ZJRUxEKG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0LAo+ICsJCQkJIFZDNF9I RE1JX0hPUlpCX0hTUCkgfAo+ICsJCSAgIFZDNF9TRVRfRklFTEQobW9kZS0+aHN5bmNfc3RhcnQg LSBtb2RlLT5oZGlzcGxheSwKPiArCQkJCSBWQzRfSERNSV9IT1JaQl9IRlApKTsKPiArCj4gKwlI RE1JX1dSSVRFKFZDNF9IRE1JX1ZFUlRBMCwgdmVydGEpOwo+ICsJSERNSV9XUklURShWQzRfSERN SV9WRVJUQTEsIHZlcnRhKTsKPiArCj4gKwlIRE1JX1dSSVRFKFZDNF9IRE1JX1ZFUlRCMCwgdmVy dGIpOwo+ICsJSERNSV9XUklURShWQzRfSERNSV9WRVJUQjEsIHZlcnRiKTsKPiArCj4gKwlIRF9X UklURShWQzRfSERfVklEX0NUTCwKPiArCQkgKHZzeW5jX3BvcyA/IDAgOiBWQzRfSERfVklEX0NU TF9WU1lOQ19MT1cpIHwKPiArCQkgKGhzeW5jX3BvcyA/IDAgOiBWQzRfSERfVklEX0NUTF9IU1lO Q19MT1cpKTsKPiArCj4gKwkvKiBUaGUgUkdCIG9yZGVyIGFwcGxpZXMgZXZlbiB3aGVuIENTQyBp cyBkaXNhYmxlZC4gKi8KPiArCUhEX1dSSVRFKFZDNF9IRF9DU0NfQ1RMLCBWQzRfU0VUX0ZJRUxE KFZDNF9IRF9DU0NfQ1RMX09SREVSX0JHUiwKPiArCQkJCQkgICAgICAgVkM0X0hEX0NTQ19DVExf T1JERVIpKTsKPiArCj4gKwlIRE1JX1dSSVRFKFZDNF9IRE1JX0ZJRk9fQ1RMLCBWQzRfSERNSV9G SUZPX0NUTF9NQVNURVJfU0xBVkVfTik7Cj4gKwo+ICsJaWYgKGRlYnVnX2R1bXBfcmVncykgewo+ ICsJCURSTV9JTkZPKCJIRE1JIHJlZ3MgYWZ0ZXI6XG4iKTsKPiArCQl2YzRfaGRtaV9kdW1wX3Jl Z3MoZGV2KTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmM0X2hkbWlfZW5jb2Rlcl9k aXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKPiArewo+ICsJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKPiArCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192 YzRfZGV2KGRldik7Cj4gKwo+ICsJSERNSV9XUklURShWQzRfSERNSV9UWF9QSFlfUkVTRVRfQ1RM LCAweGYgPDwgMTYpOwo+ICsJSERfV1JJVEUoVkM0X0hEX1ZJRF9DVEwsCj4gKwkJIEhEX1JFQUQo VkM0X0hEX1ZJRF9DVEwpICYgflZDNF9IRF9WSURfQ1RMX0VOQUJMRSk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIHZjNF9oZG1pX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5j b2RlcikKPiArewo+ICsJc3RydWN0IHZjNF9oZG1pX2VuY29kZXIgKnZjNF9lbmNvZGVyID0gdG9f dmM0X2hkbWlfZW5jb2RlcihlbmNvZGVyKTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBl bmNvZGVyLT5kZXY7Cj4gKwlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOwo+ ICsKPiArCUhETUlfV1JJVEUoVkM0X0hETUlfVFhfUEhZX1JFU0VUX0NUTCwgMCk7Cj4gKwo+ICsJ SERfV1JJVEUoVkM0X0hEX1ZJRF9DVEwsCj4gKwkJIEhEX1JFQUQoVkM0X0hEX1ZJRF9DVEwpIHwK PiArCQkgVkM0X0hEX1ZJRF9DVExfRU5BQkxFIHwKPiArCQkgVkM0X0hEX1ZJRF9DVExfVU5ERVJG TE9XX0VOQUJMRSB8Cj4gKwkJIFZDNF9IRF9WSURfQ1RMX0ZSQU1FX0NPVU5URVJfUkVTRVQpOwo+ ICsKPiArCWlmICh2YzRfZW5jb2Rlci0+aGRtaV9tb25pdG9yKSB7Cj4gKwkJSERNSV9XUklURShW QzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTCwKPiArCQkJICAgSERNSV9SRUFEKFZDNF9IRE1JX1ND SEVEVUxFUl9DT05UUk9MKSB8Cj4gKwkJCSAgIFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MX01P REVfSERNSSk7Cj4gKwo+ICsJCXdoaWxlICghKEhETUlfUkVBRChWQzRfSERNSV9TQ0hFRFVMRVJf Q09OVFJPTCkgJgo+ICsJCQkgVkM0X0hETUlfU0NIRURVTEVSX0NPTlRST0xfSERNSV9BQ1RJVkUp KSB7Cj4gKwkJCWNwdV9yZWxheCgpOwo+ICsJCX0KPiArCX0gZWxzZSB7Cj4gKwkJSERNSV9XUklU RShWQzRfSERNSV9SQU1fUEFDS0VUX0NPTkZJRywKPiArCQkJICAgSERNSV9SRUFEKFZDNF9IRE1J X1JBTV9QQUNLRVRfQ09ORklHKSAmCj4gKwkJCSAgIH4oVkM0X0hETUlfUkFNX1BBQ0tFVF9FTkFC TEUpKTsKPiArCQlIRE1JX1dSSVRFKFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MLAo+ICsJCQkg ICBIRE1JX1JFQUQoVkM0X0hETUlfU0NIRURVTEVSX0NPTlRST0wpICYKPiArCQkJICAgflZDNF9I RE1JX1NDSEVEVUxFUl9DT05UUk9MX01PREVfSERNSSk7Cj4gKwo+ICsJCXdoaWxlIChIRE1JX1JF QUQoVkM0X0hETUlfU0NIRURVTEVSX0NPTlRST0wpICYKPiArCQkgICAgICAgVkM0X0hETUlfU0NI RURVTEVSX0NPTlRST0xfSERNSV9BQ1RJVkUpIHsKPiArCQkJY3B1X3JlbGF4KCk7Cj4gKwkJfQo+ ICsJfQo+ICsKPiArCWlmICh2YzRfZW5jb2Rlci0+aGRtaV9tb25pdG9yKSB7Cj4gKwkJdTMyIGRy aWZ0Owo+ICsKPiArCQlXQVJOX09OKCEoSERNSV9SRUFEKFZDNF9IRE1JX1NDSEVEVUxFUl9DT05U Uk9MKSAmCj4gKwkJCSAgVkM0X0hETUlfU0NIRURVTEVSX0NPTlRST0xfSERNSV9BQ1RJVkUpKTsK PiArCQlIRE1JX1dSSVRFKFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MLAo+ICsJCQkgICBIRE1J X1JFQUQoVkM0X0hETUlfU0NIRURVTEVSX0NPTlRST0wpIHwKPiArCQkJICAgVkM0X0hETUlfU0NI RURVTEVSX0NPTlRST0xfVkVSVF9BTFdBWVNfS0VFUE9VVCk7Cj4gKwo+ICsJCS8qIFhYWDogU2V0 IEhETUlfUkFNX1BBQ0tFVF9DT05GSUcgKDEgPDwgMTYpIGFuZCBzZXQKPiArCQkgKiB1cCB0aGUg aW5mb2ZyYW1lLgo+ICsJCSAqLwo+ICsKPiArCQlkcmlmdCA9IEhETUlfUkVBRChWQzRfSERNSV9G SUZPX0NUTCk7Cj4gKwkJZHJpZnQgJj0gVkM0X0hETUlfRklGT19WQUxJRF9XUklURV9NQVNLOwo+ ICsKPiArCQlIRE1JX1dSSVRFKFZDNF9IRE1JX0ZJRk9fQ1RMLAo+ICsJCQkgICBkcmlmdCAmIH5W QzRfSERNSV9GSUZPX0NUTF9SRUNFTlRFUik7Cj4gKwkJSERNSV9XUklURShWQzRfSERNSV9GSUZP X0NUTCwKPiArCQkJICAgZHJpZnQgfCBWQzRfSERNSV9GSUZPX0NUTF9SRUNFTlRFUik7Cj4gKwkJ dWRlbGF5KDEwMDApOwo+ICsJCUhETUlfV1JJVEUoVkM0X0hETUlfRklGT19DVEwsCj4gKwkJCSAg IGRyaWZ0ICYgflZDNF9IRE1JX0ZJRk9fQ1RMX1JFQ0VOVEVSKTsKPiArCQlIRE1JX1dSSVRFKFZD NF9IRE1JX0ZJRk9fQ1RMLAo+ICsJCQkgICBkcmlmdCB8IFZDNF9IRE1JX0ZJRk9fQ1RMX1JFQ0VO VEVSKTsKPiArCj4gKwkJd2hpbGUgKChIRE1JX1JFQUQoVkM0X0hETUlfRklGT19DVEwpICYKPiAr CQkJVkM0X0hETUlfRklGT19DVExfUkVDRU5URVJfRE9ORSkgPT0gMCkgewo+ICsJCQljcHVfcmVs YXgoKTsKPiArCQl9Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Vu Y29kZXJfaGVscGVyX2Z1bmNzIHZjNF9oZG1pX2VuY29kZXJfaGVscGVyX2Z1bmNzID0gewo+ICsJ Lm1vZGVfZml4dXAgPSB2YzRfaGRtaV9lbmNvZGVyX21vZGVfZml4dXAsCj4gKwkubW9kZV9zZXQg PSB2YzRfaGRtaV9lbmNvZGVyX21vZGVfc2V0LAo+ICsJLmRpc2FibGUgPSB2YzRfaGRtaV9lbmNv ZGVyX2Rpc2FibGUsCj4gKwkuZW5hYmxlID0gdmM0X2hkbWlfZW5jb2Rlcl9lbmFibGUsCj4gK307 Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9jcnRjICoKPiArdmM0X2dldF9jcnRjX25vZGUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IGRldmljZV9ub2RlICpj cnRjX25vZGU7Cj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjcnRjX3BkZXY7Cj4gKwo+ICsJ Y3J0Y19ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShwZGV2LT5kZXYub2Zfbm9kZSwgImNydGMiLCAw KTsKPiArCWlmICghY3J0Y19ub2RlKSB7Cj4gKwkJRFJNX0VSUk9SKCJObyBDUlRDIGZvciBoZG1p IGluIERUXG4iKTsKPiArCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiArCX0KPiArCj4gKwlj cnRjX3BkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKGNydGNfbm9kZSk7Cj4gKwlpZiAoIWNy dGNfcGRldikgewo+ICsJCURSTV9FUlJPUigiTm8gQ1JUQyBkZXZpY2UgYXR0YWNoZWQgdG8gT0Yg bm9kZVxuIik7Cj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gKwl9Cj4gKwo+ICsJcmV0 dXJuIHBsYXRmb3JtX2dldF9kcnZkYXRhKGNydGNfcGRldik7Cj4gK30KPiArCj4gK3N0cnVjdCBk cm1fZW5jb2RlciAqdmM0X2hkbWlfZW5jb2Rlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Cj4gK3sKPiArCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7Cj4gKwlzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSBOVUxMOwo+ICsJc3RydWN0IHZjNF9oZG1pX2VuY29k ZXIgKnZjNF9oZG1pX2VuY29kZXI7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gKwlpbnQg cmV0Owo+ICsKPiArCXZjNF9oZG1pX2VuY29kZXIgPSBkZXZtX2t6YWxsb2MoZGV2LT5kZXYsIHNp emVvZigqdmM0X2hkbWlfZW5jb2RlciksCj4gKwkJCQkJR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXZj NF9oZG1pX2VuY29kZXIpIHsKPiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJCWdvdG8gZmFpbDsKPiAr CX0KPiArCWVuY29kZXIgPSAmdmM0X2hkbWlfZW5jb2Rlci0+YmFzZTsKPiArCj4gKwljcnRjID0g dmM0X2dldF9jcnRjX25vZGUodmM0LT5oZG1pLT5wZGV2KTsKPiArCWlmIChJU19FUlIoY3J0Yykp IHsKPiArCQlyZXQgPSBQVFJfRVJSKGNydGMpOwo+ICsJCWdvdG8gZmFpbDsKPiArCX0KPiArCj4g Kwlkcm1fZW5jb2Rlcl9pbml0KGRldiwgZW5jb2RlciwgJnZjNF9oZG1pX2VuY29kZXJfZnVuY3Ms Cj4gKwkJCSBEUk1fTU9ERV9FTkNPREVSX1RNRFMpOwo+ICsJZHJtX2VuY29kZXJfaGVscGVyX2Fk ZChlbmNvZGVyLCAmdmM0X2hkbWlfZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOwo+ICsKPiArCWVuY29k ZXItPnBvc3NpYmxlX2NydGNzID0gZHJtX2NydGNfbWFzayhjcnRjKTsKPiArCj4gKwlyZXR1cm4g ZW5jb2RlcjsKPiArCj4gK2ZhaWw6Cj4gKwlpZiAoZW5jb2RlcikKPiArCQl2YzRfZW5jb2Rlcl9k ZXN0cm95KGVuY29kZXIpOwo+ICsKPiArCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gK30KPiArCj4g Ky8qIFJlYWRzIG91dCB0aGUgY3VycmVudCBIRE1JIG1vZGUgcHJvZ3JlYW1taW5nIGF0IGRyaXZl ciBsb2FkIHRpbWUuCj4gKyAqCj4gKyAqIFRoaXMgaXMgY3VycmVudGx5IHVzZWQgZm9yIGxhdGVy IGZpbHRlcmluZyBvdXQgb2YgdGhlIEREQy1wcm9iZWQKPiArICogdmlkZW8gbW9kZXMsIHNpbmNl IHdlIGNhbid0IGFjdHVhbGx5IGNoYW5nZSBtb2RlcyBkdWUgdG8gbm90IGhhdmluZwo+ICsgKiBj b250cm9sIG9mIHRoZSBuZWNlc3NhcnkgY2xvY2tzLiAgTGF0ZXIgb24sIHdlIG1heSBlbmQgdXAg cmV1c2luZwo+ICsgKiB0aGlzIGZvciBza2lwcGluZyBtb2Rlc2V0cyBhdCBib290IHRpbWUuCj4g KyAqLwo+ICtzdGF0aWMgdm9pZAo+ICt2YzRfaGRtaV9nZXRfYm9vdF9kaXNwbGF5X21vZGUoc3Ry dWN0IHZjNF9kZXYgKnZjNCkKPiArewo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUg PSAmdmM0LT5oZG1pLT5ib290X21vZGU7Cj4gKwl1MzIgaG9yemEgPSBIRE1JX1JFQUQoVkM0X0hE TUlfSE9SWkEpOwo+ICsJdTMyIGhvcnpiID0gSERNSV9SRUFEKFZDNF9IRE1JX0hPUlpCKTsKPiAr CXUzMiB2ZXJ0YSA9IEhETUlfUkVBRChWQzRfSERNSV9WRVJUQTApOwo+ICsJdTMyIHZlcnRiID0g SERNSV9SRUFEKFZDNF9IRE1JX1ZFUlRCMCk7Cj4gKwo+ICsJbWVtc2V0KG1vZGUsIDAsIHNpemVv ZigqbW9kZSkpOwo+ICsKPiArCWlmICghKGhvcnphICYgVkM0X0hETUlfSE9SWkFfVlBPUykpCj4g KwkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19OVlNZTkM7Cj4gKwlpZiAoIShob3J6YSAm IFZDNF9IRE1JX0hPUlpBX0hQT1MpKQo+ICsJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdf TkhTWU5DOwo+ICsJbW9kZS0+aGRpc3BsYXkgPSBWQzRfR0VUX0ZJRUxEKGhvcnphLCBWQzRfSERN SV9IT1JaQV9IQVApOwo+ICsJbW9kZS0+aHN5bmNfc3RhcnQgPSAobW9kZS0+aGRpc3BsYXkgKwo+ ICsJCQkgICAgIFZDNF9HRVRfRklFTEQoaG9yemIsIFZDNF9IRE1JX0hPUlpCX0hGUCkpOwo+ICsJ bW9kZS0+aHN5bmNfZW5kID0gKG1vZGUtPmhzeW5jX3N0YXJ0ICsKPiArCQkJICAgVkM0X0dFVF9G SUVMRChob3J6YiwgVkM0X0hETUlfSE9SWkJfSFNQKSk7Cj4gKwltb2RlLT5odG90YWwgPSAobW9k ZS0+aHN5bmNfZW5kICsKPiArCQkJVkM0X0dFVF9GSUVMRChob3J6YiwgVkM0X0hETUlfSE9SWkJf SEJQKSk7Cj4gKwo+ICsJbW9kZS0+dmRpc3BsYXkgPSBWQzRfR0VUX0ZJRUxEKHZlcnRhLCBWQzRf SERNSV9WRVJUQV9WQUwpOwo+ICsJbW9kZS0+dnN5bmNfc3RhcnQgPSAobW9kZS0+dmRpc3BsYXkg Kwo+ICsJCQkgICAgIFZDNF9HRVRfRklFTEQodmVydGEsIFZDNF9IRE1JX1ZFUlRBX1ZGUCkpOwo+ ICsJbW9kZS0+dnN5bmNfZW5kID0gKG1vZGUtPnZzeW5jX3N0YXJ0ICsKPiArCQkJICAgVkM0X0dF VF9GSUVMRCh2ZXJ0YSwgVkM0X0hETUlfVkVSVEFfVlNQKSk7Cj4gKwltb2RlLT52dG90YWwgPSAo bW9kZS0+dnN5bmNfZW5kICsKPiArCQkJVkM0X0dFVF9GSUVMRCh2ZXJ0YiwgVkM0X0hETUlfVkVS VEJfVkJQKSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmM0X2hkbWlfYmluZChzdHJ1Y3QgZGV2 aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKPiArewo+ICsJc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwo+ICsJ c3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShtYXN0ZXIpOwo+ICsJc3Ry dWN0IHZjNF9kZXYgKnZjNCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgdmM0X2hkbWkg KmhkbWk7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRkY19ub2RlOwo+ICsJdTMyIHZhbHVlOwo+ ICsKPiArCWhkbWkgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmhkbWkpLCBHRlBfS0VSTkVM KTsKPiArCWlmICghaGRtaSkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwloZG1pLT5wZGV2 ID0gcGRldjsKPiArCWhkbWktPmhkbWljb3JlX3JlZ3MgPSB2YzRfaW9yZW1hcF9yZWdzKHBkZXYs IDApOwo+ICsJaWYgKElTX0VSUihoZG1pLT5oZG1pY29yZV9yZWdzKSkKPiArCQlyZXR1cm4gUFRS X0VSUihoZG1pLT5oZG1pY29yZV9yZWdzKTsKPiArCj4gKwloZG1pLT5oZF9yZWdzID0gdmM0X2lv cmVtYXBfcmVncyhwZGV2LCAxKTsKPiArCWlmIChJU19FUlIoaGRtaS0+aGRfcmVncykpCj4gKwkJ cmV0dXJuIFBUUl9FUlIoaGRtaS0+aGRfcmVncyk7Cj4gKwo+ICsJLyogRERDIGkyYyBkcml2ZXIg Ki8KPiArCWRkY19ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShkZXYtPm9mX25vZGUsICJkZGMiLCAw KTsKPiArCWlmICghZGRjX25vZGUpIHsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBmaW5kIGRk YyBub2RlIGluIGRldmljZSB0cmVlXG4iKTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiAr Cj4gKwloZG1pLT5kZGMgPSBvZl9maW5kX2kyY19hZGFwdGVyX2J5X25vZGUoZGRjX25vZGUpOwo+ ICsJaWYgKCFoZG1pLT5kZGMpIHsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBnZXQgZGRjIGky YyBhZGFwdGVyIGJ5IG5vZGVcbiIpOwo+ICsJCXJldHVybiAtRVBST0JFX0RFRkVSOwo+ICsJfQo+ ICsKPiArCS8qIE9ubHkgdXNlIHRoZSBHUElPIEhQRCBwaW4gaWYgcHJlc2VudCBpbiB0aGUgRFQs IG90aGVyd2lzZQo+ICsJICogd2UnbGwgdXNlIHRoZSBIRE1JIGNvcmUncyByZWdpc3Rlci4KPiAr CSAqLwo+ICsJaWYgKG9mX2ZpbmRfcHJvcGVydHkoZGV2LT5vZl9ub2RlLCAiaHBkLWdwaW8iLCAm dmFsdWUpKSB7Cj4gKwkJaGRtaS0+aHBkX2dwaW8gPSBvZl9nZXRfbmFtZWRfZ3BpbyhkZXYtPm9m X25vZGUsICJocGQtZ3BpbyIsIDApOwo+ICsJCWlmIChoZG1pLT5ocGRfZ3BpbyA8IDApCj4gKwkJ CXJldHVybiBoZG1pLT5ocGRfZ3BpbzsKPiArCX0KPiArCj4gKwl2YzQtPmhkbWkgPSBoZG1pOwo+ ICsKPiArCS8qIEhETUkgY29yZSBtdXN0IGJlIGVuYWJsZWQuICovCj4gKwlXQVJOX09OX09OQ0Uo KEhEX1JFQUQoVkM0X0hEX01fQ1RMKSAmIFZDNF9IRF9NX0VOQUJMRSkgPT0gMCk7Cj4gKwo+ICsJ dmM0X2hkbWlfZ2V0X2Jvb3RfZGlzcGxheV9tb2RlKHZjNCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIHZjNF9oZG1pX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYs IHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKPiArCQkJICAgIHZvaWQgKmRhdGEpCj4gK3sKPiArCXN0 cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkZXZfZ2V0X2RydmRhdGEobWFzdGVyKTsKPiArCXN0cnVj dCB2YzRfZGV2ICp2YzQgPSBkcm0tPmRldl9wcml2YXRlOwo+ICsKPiArCXB1dF9kZXZpY2UoJnZj NC0+aGRtaS0+ZGRjLT5kZXYpOwo+ICsKPiArCXZjNC0+aGRtaSA9IE5VTEw7Cj4gK30KPiArCj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyB2YzRfaGRtaV9vcHMgPSB7Cj4gKwku YmluZCAgID0gdmM0X2hkbWlfYmluZCwKPiArCS51bmJpbmQgPSB2YzRfaGRtaV91bmJpbmQsCj4g K307Cj4gKwo+ICtzdGF0aWMgaW50IHZjNF9oZG1pX2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlyZXR1cm4gY29tcG9uZW50X2FkZCgmcGRldi0+ZGV2LCAm dmM0X2hkbWlfb3BzKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB2YzRfaGRtaV9kZXZfcmVtb3Zl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCWNvbXBvbmVudF9kZWwoJnBk ZXYtPmRldiwgJnZjNF9oZG1pX29wcyk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdmM0X2hkbWlfZHRfbWF0Y2hbXSA9IHsKPiArCXsg LmNvbXBhdGlibGUgPSAiYnJjbSx2YzQtaGRtaSIgfSwKPiArCXt9Cj4gK307Cj4gKwo+ICtzdGF0 aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2YzRfaGRtaV9kcml2ZXIgPSB7Cj4gKwkucHJvYmUg PSB2YzRfaGRtaV9kZXZfcHJvYmUsCj4gKwkucmVtb3ZlID0gdmM0X2hkbWlfZGV2X3JlbW92ZSwK PiArCS5kcml2ZXIgPSB7Cj4gKwkJLm5hbWUgPSAidmM0X2hkbWkiLAo+ICsJCS5vZl9tYXRjaF90 YWJsZSA9IHZjNF9oZG1pX2R0X21hdGNoLAo+ICsJfSwKPiArfTsKPiArCj4gK3ZvaWQgX19pbml0 IHZjNF9oZG1pX3JlZ2lzdGVyKHZvaWQpCj4gK3sKPiArCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rl cigmdmM0X2hkbWlfZHJpdmVyKTsKPiArfQo+ICsKPiArdm9pZCBfX2V4aXQgdmM0X2hkbWlfdW5y ZWdpc3Rlcih2b2lkKQo+ICt7Cj4gKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdmM0X2hk bWlfZHJpdmVyKTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9o dnMuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2h2cy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwLi5kY2Y0Zjc4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS92YzQvdmM0X2h2cy5jCj4gQEAgLTAsMCArMSwxNzIgQEAKPiArLyoKPiArICog Q29weXJpZ2h0IChDKSAyMDE1IEJyb2FkY29tCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyIGFzCj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u Lgo+ICsgKi8KPiArCj4gKy8qKgo+ICsgKiBET0M6IFZDNCBIVlMgbW9kdWxlLgo+ICsgKgo+ICsg KiBUaGUgSFZTIGlzIHRoZSBwaWVjZSBvZiBoYXJkd2FyZSB0aGF0IGRvZXMgdHJhbnNsYXRpb24s IHNjYWxpbmcsCj4gKyAqIGNvbG9yc3BhY2UgY29udmVyc2lvbiwgYW5kIGNvbXBvc2l0aW5nIG9m IHBpeGVscyBzdG9yZWQgaW4KPiArICogZnJhbWVidWZmZXJzIGludG8gYSBGSUZPIG9mIHBpeGVs cyBnb2luZyBvdXQgdG8gdGhlIFBpeGVsIFZhbHZlCj4gKyAqIChDUlRDKS4KPiArICoKPiArICog VGhlcmUgaXMgYSBzaW5nbGUgZ2xvYmFsIEhWUywgd2l0aCBtdWx0aXBsZSBvdXRwdXQgRklGT3Mg dGhhdCBjYW4KPiArICogYmUgY29uc3VtZWQgYnkgdGhlIFBWcy4gIFRoaXMgZmlsZSBqdXN0IG1h bmFnZXMgdGhlIHJlc291cmNlcyBmb3IKPiArICogdGhlIEhWUywgd2hpbGUgdGhlIHZjNF9jcnRj LmMgY29kZSBhY3R1YWxseSBkcml2ZXMgSFZTIHNldHVwIGZvcgo+ICsgKiBlYWNoIENSVEMuCj4g KyAqLwo+ICsKPiArI2luY2x1ZGUgImxpbnV4L2NvbXBvbmVudC5oIgo+ICsjaW5jbHVkZSAidmM0 X2Rydi5oIgo+ICsjaW5jbHVkZSAidmM0X3JlZ3MuaCIKPiArCj4gKyNkZWZpbmUgSFZTX1JFRyhy ZWcpIHsgcmVnLCAjcmVnIH0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCB7Cj4gKwl1MzIgcmVnOwo+ ICsJY29uc3QgY2hhciAqbmFtZTsKPiArfSBodnNfcmVnc1tdID0gewo+ICsJSFZTX1JFRyhTQ0FM RVJfRElTUENUUkwpLAo+ICsJSFZTX1JFRyhTQ0FMRVJfRElTUFNUQVQpLAo+ICsJSFZTX1JFRyhT Q0FMRVJfRElTUElEKSwKPiArCUhWU19SRUcoU0NBTEVSX0RJU1BFQ1RSTCksCj4gKwlIVlNfUkVH KFNDQUxFUl9ESVNQUFJPRiksCj4gKwlIVlNfUkVHKFNDQUxFUl9ESVNQRElUSEVSKSwKPiArCUhW U19SRUcoU0NBTEVSX0RJU1BFT0xOKSwKPiArCUhWU19SRUcoU0NBTEVSX0RJU1BMSVNUMCksCj4g KwlIVlNfUkVHKFNDQUxFUl9ESVNQTElTVDEpLAo+ICsJSFZTX1JFRyhTQ0FMRVJfRElTUExJU1Qy KSwKPiArCUhWU19SRUcoU0NBTEVSX0RJU1BMU1RBVCksCj4gKwlIVlNfUkVHKFNDQUxFUl9ESVNQ TEFDVDApLAo+ICsJSFZTX1JFRyhTQ0FMRVJfRElTUExBQ1QxKSwKPiArCUhWU19SRUcoU0NBTEVS X0RJU1BMQUNUMiksCj4gKwlIVlNfUkVHKFNDQUxFUl9ESVNQQ1RSTDApLAo+ICsJSFZTX1JFRyhT Q0FMRVJfRElTUEJLR05EMCksCj4gKwlIVlNfUkVHKFNDQUxFUl9ESVNQU1RBVDApLAo+ICsJSFZT X1JFRyhTQ0FMRVJfRElTUEJBU0UwKSwKPiArCUhWU19SRUcoU0NBTEVSX0RJU1BDVFJMMSksCj4g KwlIVlNfUkVHKFNDQUxFUl9ESVNQQktHTkQxKSwKPiArCUhWU19SRUcoU0NBTEVSX0RJU1BTVEFU MSksCj4gKwlIVlNfUkVHKFNDQUxFUl9ESVNQQkFTRTEpLAo+ICsJSFZTX1JFRyhTQ0FMRVJfRElT UENUUkwyKSwKPiArCUhWU19SRUcoU0NBTEVSX0RJU1BCS0dORDIpLAo+ICsJSFZTX1JFRyhTQ0FM RVJfRElTUFNUQVQyKSwKPiArCUhWU19SRUcoU0NBTEVSX0RJU1BCQVNFMiksCj4gKwlIVlNfUkVH KFNDQUxFUl9ESVNQQUxQSEEyKSwKPiArfTsKPiArCj4gK3ZvaWQKPiArdmM0X2h2c19kdW1wX3N0 YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCB2YzRfZGV2ICp2YzQg PSB0b192YzRfZGV2KGRldik7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShodnNfcmVncyk7IGkrKykgewo+ICsJCURSTV9JTkZPKCIweCUwNHggKCVzKTogMHgl MDh4XG4iLAo+ICsJCQkgaHZzX3JlZ3NbaV0ucmVnLCBodnNfcmVnc1tpXS5uYW1lLAo+ICsJCQkg SFZTX1JFQUQoaHZzX3JlZ3NbaV0ucmVnKSk7Cj4gKwl9Cj4gKwo+ICsJRFJNX0lORk8oIkhWUyBj dHg6XG4iKTsKPiArCWZvciAoaSA9IDA7IGkgPCA2NDsgaSArPSA0KSB7Cj4gKwkJRFJNX0lORk8o IjB4JTA4eCAoJXMpOiAweCUwOHggMHglMDh4IDB4JTA4eCAweCUwOHhcbiIsCj4gKwkJCSBpICog NCwgaSA8IEhWU19CT09UTE9BREVSX0RMSVNUX0VORCA/ICJCIiA6ICJEIiwKPiArCQkJICgodWlu dDMyX3QgKil2YzQtPmh2cy0+ZGxpc3QpW2kgKyAwXSwKPiArCQkJICgodWludDMyX3QgKil2YzQt Pmh2cy0+ZGxpc3QpW2kgKyAxXSwKPiArCQkJICgodWludDMyX3QgKil2YzQtPmh2cy0+ZGxpc3Qp W2kgKyAyXSwKPiArCQkJICgodWludDMyX3QgKil2YzQtPmh2cy0+ZGxpc3QpW2kgKyAzXSk7Cj4g Kwl9Cj4gK30KPiArCj4gKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKPiAraW50IHZjNF9odnNfZGVi dWdmc19yZWdzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2 YXRlOwo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7Cj4gKwlz dHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOwo+ICsJaW50IGk7Cj4gKwo+ICsJ Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHZzX3JlZ3MpOyBpKyspIHsKPiArCQlzZXFfcHJp bnRmKG0sICIlcyAoMHglMDR4KTogMHglMDh4XG4iLAo+ICsJCQkgICBodnNfcmVnc1tpXS5uYW1l LCBodnNfcmVnc1tpXS5yZWcsCj4gKwkJCSAgIEhWU19SRUFEKGh2c19yZWdzW2ldLnJlZykpOwo+ ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKyNlbmRpZgo+ICsKPiArc3RhdGljIGludCB2 YzRfaHZzX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZv aWQgKmRhdGEpCj4gK3sKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0 Zm9ybV9kZXZpY2UoZGV2KTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkZXZfZ2V0X2Ry dmRhdGEobWFzdGVyKTsKPiArCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSBkcm0tPmRldl9wcml2YXRl Owo+ICsJc3RydWN0IHZjNF9odnMgKmh2cyA9IE5VTEw7Cj4gKwo+ICsJaHZzID0gZGV2bV9remFs bG9jKCZwZGV2LT5kZXYsIHNpemVvZigqaHZzKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWh2cykK PiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlodnMtPnBkZXYgPSBwZGV2Owo+ICsKPiArCWh2 cy0+cmVncyA9IHZjNF9pb3JlbWFwX3JlZ3MocGRldiwgMCk7Cj4gKwlpZiAoSVNfRVJSKGh2cy0+ cmVncykpCj4gKwkJcmV0dXJuIFBUUl9FUlIoaHZzLT5yZWdzKTsKPiArCj4gKwlodnMtPmRsaXN0 ID0gaHZzLT5yZWdzICsgU0NBTEVSX0RMSVNUX1NUQVJUOwo+ICsKPiArCXZjNC0+aHZzID0gaHZz Owo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZjNF9odnNfdW5iaW5kKHN0 cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAo+ICsJCQkgICB2b2lkICpk YXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGV2X2dldF9kcnZkYXRhKG1h c3Rlcik7Cj4gKwlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCj4g Kwl2YzQtPmh2cyA9IE5VTEw7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9u ZW50X29wcyB2YzRfaHZzX29wcyA9IHsKPiArCS5iaW5kICAgPSB2YzRfaHZzX2JpbmQsCj4gKwku dW5iaW5kID0gdmM0X2h2c191bmJpbmQsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHZjNF9odnNf ZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXJldHVybiBj b21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZ2YzRfaHZzX29wcyk7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgdmM0X2h2c19kZXZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4g K3sKPiArCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJnZjNF9odnNfb3BzKTsKPiArCXJldHVy biAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB2YzRfaHZz X2R0X21hdGNoW10gPSB7Cj4gKwl7IC5jb21wYXRpYmxlID0gImJyY20sdmM0LWh2cyIgfSwKPiAr CXt9Cj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2YzRfaHZzX2Ry aXZlciA9IHsKPiArCS5wcm9iZSA9IHZjNF9odnNfZGV2X3Byb2JlLAo+ICsJLnJlbW92ZSA9IHZj NF9odnNfZGV2X3JlbW92ZSwKPiArCS5kcml2ZXIgPSB7Cj4gKwkJLm5hbWUgPSAidmM0X2h2cyIs Cj4gKwkJLm9mX21hdGNoX3RhYmxlID0gdmM0X2h2c19kdF9tYXRjaCwKPiArCX0sCj4gK307Cj4g Kwo+ICt2b2lkIF9faW5pdCB2YzRfaHZzX3JlZ2lzdGVyKHZvaWQpCj4gK3sKPiArCXBsYXRmb3Jt X2RyaXZlcl9yZWdpc3RlcigmdmM0X2h2c19kcml2ZXIpOwo+ICt9Cj4gKwo+ICt2b2lkIF9fZXhp dCB2YzRfaHZzX3VucmVnaXN0ZXIodm9pZCkKPiArewo+ICsJcGxhdGZvcm1fZHJpdmVyX3VucmVn aXN0ZXIoJnZjNF9odnNfZHJpdmVyKTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vdmM0L3ZjNF9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2ttcy5jCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5lNWU5NmJjCj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2ttcy5jCj4gQEAgLTAsMCArMSw4NCBAQAo+ ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQnJvYWRjb20KPiArICoKPiArICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIgYXMKPiArICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCj4gKyAqLwo+ICsKPiArLyoqCj4gKyAqIERPQzogVkM0IEtNUwo+ICsgKgo+ ICsgKiBUaGlzIGlzIHRoZSBnZW5lcmFsIGNvZGUgZm9yIGltcGxlbWVudGluZyBLTVMgbW9kZSBz ZXR0aW5nIHRoYXQKPiArICogZG9lc24ndCBjbGVhcmx5IGFzc29jaWF0ZSB3aXRoIGFueSBvZiB0 aGUgb3RoZXIgb2JqZWN0cyAocGxhbmUsCj4gKyAqIGNydGMsIEhETUkgZW5jb2RlcikuCj4gKyAq Lwo+ICsKPiArI2luY2x1ZGUgImRybV9jcnRjLmgiCj4gKyNpbmNsdWRlICJkcm1fYXRvbWljX2hl bHBlci5oIgo+ICsjaW5jbHVkZSAiZHJtX2NydGNfaGVscGVyLmgiCj4gKyNpbmNsdWRlICJkcm1f cGxhbmVfaGVscGVyLmgiCj4gKyNpbmNsdWRlICJkcm1fZmJfY21hX2hlbHBlci5oIgo+ICsjaW5j bHVkZSAidmM0X2Rydi5oIgo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25m aWdfZnVuY3MgdmM0X21vZGVfZnVuY3MgPSB7Cj4gKwkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21p Y19oZWxwZXJfY2hlY2ssCj4gKwkuYXRvbWljX2NvbW1pdCA9IGRybV9hdG9taWNfaGVscGVyX2Nv bW1pdCwKPiArCS5mYl9jcmVhdGUgPSBkcm1fZmJfY21hX2NyZWF0ZSwKPiArfTsKPiArCj4gKy8q IENhbGxzIG91dCB0byBpbml0aWFsaXplIGFsbCBvZiB0aGUgVkM0IEtNUyBvYmplY3RzLiAqLwo+ ICtzdGF0aWMgaW50IHZjNF9pbml0X21vZGVzZXRfb2JqZWN0cyhzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7Cj4gKwlzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJZW5jb2RlciA9 IHZjNF9oZG1pX2VuY29kZXJfaW5pdChkZXYpOwo+ICsJaWYgKElTX0VSUihlbmNvZGVyKSkgewo+ ICsJCWRldl9lcnIoZGV2LT5kZXYsICJmYWlsZWQgdG8gY29uc3RydWN0IEhETUkgZW5jb2Rlclxu Iik7Cj4gKwkJcmV0ID0gUFRSX0VSUihlbmNvZGVyKTsKPiArCQlnb3RvIGZhaWw7Cj4gKwl9Cj4g Kwo+ICsJY29ubmVjdG9yID0gdmM0X2hkbWlfY29ubmVjdG9yX2luaXQoZGV2LCBlbmNvZGVyKTsK PiArCWlmIChJU19FUlIoY29ubmVjdG9yKSkgewo+ICsJCXJldCA9IFBUUl9FUlIoY29ubmVjdG9y KTsKPiArCQlkZXZfZXJyKGRldi0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgSERNSSBjb25u ZWN0b3JcbiIpOwo+ICsJCWdvdG8gZmFpbDsKPiArCX0KPiArCj4gK2ZhaWw6Cj4gKwlyZXR1cm4g cmV0Owo+ICt9Cj4gKwo+ICtpbnQgdmM0X2ttc19sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Cj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gZHJtX3ZibGFua19pbml0KGRldiwgZGV2 LT5tb2RlX2NvbmZpZy5udW1fY3J0Yyk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIo ZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB2YmxhbmtcbiIpOwo+ICsJCXJldHVybiBy ZXQ7Cj4gKwl9Cj4gKwo+ICsJZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSAyMDQ4Owo+ICsJ ZGV2LT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gMjA0ODsKPiArCWRldi0+bW9kZV9jb25maWcu ZnVuY3MgPSAmdmM0X21vZGVfZnVuY3M7Cj4gKwlkZXYtPm1vZGVfY29uZmlnLnByZWZlcnJlZF9k ZXB0aCA9IDI0Owo+ICsKPiArCXJldCA9IHZjNF9pbml0X21vZGVzZXRfb2JqZWN0cyhkZXYpOwo+ ICsJaWYgKHJldCkKPiArCQlnb3RvIGZhaWw7Cj4gKwo+ICsJZHJtX21vZGVfY29uZmlnX3Jlc2V0 KGRldik7Cj4gKwo+ICsJZHJtX2ZiZGV2X2NtYV9pbml0KGRldiwgMzIsCj4gKwkJCSAgIGRldi0+ bW9kZV9jb25maWcubnVtX2NydGMsCj4gKwkJCSAgIGRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5l Y3Rvcik7Cj4gKwo+ICsJZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0KGRldik7Cj4gKwo+ICtmYWls Ogo+ICsJcmV0dXJuIHJldDsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0 L3ZjNF9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcGxhbmUuYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uY2RkOGIxMAo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9wbGFuZS5jCj4gQEAgLTAsMCArMSwzMjAgQEAK PiArLyoKPiArICogQ29weXJpZ2h0IChDKSAyMDE1IEJyb2FkY29tCj4gKyAqCj4gKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgo+ICsgKi8KPiArCj4gKy8qKgo+ICsgKiBET0M6IFZDNCBwbGFuZSBtb2R1 bGUKPiArICoKPiArICogRWFjaCBEUk0gcGxhbmUgaXMgYSBsYXllciBvZiBwaXhlbHMgYmVpbmcg c2Nhbm5lZCBvdXQgYnkgdGhlIEhWUy4KPiArICoKPiArICogQXQgYXRvbWljIG1vZGVzZXQgY2hl Y2sgdGltZSwgd2UgY29tcHV0ZSB0aGUgSFZTIGRpc3BsYXkgZWxlbWVudAo+ICsgKiBzdGF0ZSB0 aGF0IHdvdWxkIGJlIG5lY2Vzc2FyeSBmb3IgZGlzcGxheWluZyB0aGUgcGxhbmUgKGdpdmluZyB1 cyBhCj4gKyAqIGNoYW5jZSB0byBmaWd1cmUgb3V0IGlmIGEgcGxhbmUgY29uZmlndXJhdGlvbiBp cyBpbnZhbGlkKSwgdGhlbiBhdAo+ICsgKiBhdG9taWMgZmx1c2ggdGltZSB0aGUgQ1JUQyB3aWxs IGFzayB1cyB0byB3cml0ZSBvdXIgZWxlbWVudCBzdGF0ZQo+ICsgKiBpbnRvIHRoZSByZWdpb24g b2YgdGhlIEhWUyB0aGF0IGl0IGhhcyBhbGxvY2F0ZWQgZm9yIHVzLgo+ICsgKi8KPiArCj4gKyNp bmNsdWRlICJ2YzRfZHJ2LmgiCj4gKyNpbmNsdWRlICJ2YzRfcmVncy5oIgo+ICsjaW5jbHVkZSAi ZHJtX2F0b21pY19oZWxwZXIuaCIKPiArI2luY2x1ZGUgImRybV9mYl9jbWFfaGVscGVyLmgiCj4g KyNpbmNsdWRlICJkcm1fcGxhbmVfaGVscGVyLmgiCj4gKwo+ICtzdHJ1Y3QgdmM0X3BsYW5lX3N0 YXRlIHsKPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgYmFzZTsKPiArCXUzMiAqZGxpc3Q7Cj4g Kwl1MzIgZGxpc3Rfc2l6ZTsgLyogTnVtYmVyIG9mIGR3b3JkcyBpbiBhbGxvY2F0ZWQgZm9yIHRo ZSBkaXNwbGF5IGxpc3QgKi8KPiArCXUzMiBkbGlzdF9jb3VudDsgLyogTnVtYmVyIG9mIHVzZWQg ZHdvcmRzIGluIHRoZSBkaXNwbGF5IGxpc3QuICovCj4gK307Cj4gKwo+ICtzdGF0aWMgaW5saW5l IHN0cnVjdCB2YzRfcGxhbmVfc3RhdGUgKgo+ICt0b192YzRfcGxhbmVfc3RhdGUoc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqc3RhdGUpCj4gK3sKPiArCXJldHVybiAoc3RydWN0IHZjNF9wbGFuZV9z dGF0ZSAqKXN0YXRlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGh2c19mb3JtYXQg ewo+ICsJdTMyIGRybTsgLyogRFJNX0ZPUk1BVF8qICovCj4gKwl1MzIgaHZzOyAvKiBIVlNfRk9S TUFUXyogKi8KPiArCXUzMiBwaXhlbF9vcmRlcjsKPiArCWJvb2wgaGFzX2FscGhhOwo+ICt9IGh2 c19mb3JtYXRzW10gPSB7Cj4gKwl7Cj4gKwkJLmRybSA9IERSTV9GT1JNQVRfWFJHQjg4ODgsIC5o dnMgPSBIVlNfUElYRUxfRk9STUFUX1JHQkE4ODg4LAo+ICsJCS5waXhlbF9vcmRlciA9IEhWU19Q SVhFTF9PUkRFUl9BQkdSLCAuaGFzX2FscGhhID0gZmFsc2UsCj4gKwl9LAo+ICsJewo+ICsJCS5k cm0gPSBEUk1fRk9STUFUX0FSR0I4ODg4LCAuaHZzID0gSFZTX1BJWEVMX0ZPUk1BVF9SR0JBODg4 OCwKPiArCQkucGl4ZWxfb3JkZXIgPSBIVlNfUElYRUxfT1JERVJfQUJHUiwgLmhhc19hbHBoYSA9 IHRydWUsCj4gKwl9LAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBodnNfZm9ybWF0 ICp2YzRfZ2V0X2h2c19mb3JtYXQodTMyIGRybV9mb3JtYXQpCj4gK3sKPiArCXVuc2lnbmVkIGk7 Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHZzX2Zvcm1hdHMpOyBpKyspIHsK PiArCQlpZiAoaHZzX2Zvcm1hdHNbaV0uZHJtID09IGRybV9mb3JtYXQpCj4gKwkJCXJldHVybiAm aHZzX2Zvcm1hdHNbaV07Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gK3N0 YXRpYyBib29sIHBsYW5lX2VuYWJsZWQoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCj4g K3sKPiArCXJldHVybiBzdGF0ZS0+ZmIgJiYgc3RhdGUtPmNydGM7Cj4gK30KPiArCj4gK3N0cnVj dCBkcm1fcGxhbmVfc3RhdGUgKnZjNF9wbGFuZV9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9w bGFuZSAqcGxhbmUpCj4gK3sKPiArCXN0cnVjdCB2YzRfcGxhbmVfc3RhdGUgKnZjNF9zdGF0ZTsK PiArCj4gKwlpZiAoV0FSTl9PTighcGxhbmUtPnN0YXRlKSkKPiArCQlyZXR1cm4gTlVMTDsKPiAr Cj4gKwl2YzRfc3RhdGUgPSBrbWVtZHVwKHBsYW5lLT5zdGF0ZSwgc2l6ZW9mKCp2YzRfc3RhdGUp LCBHRlBfS0VSTkVMKTsKPiArCWlmICghdmM0X3N0YXRlKQo+ICsJCXJldHVybiBOVUxMOwo+ICsK PiArCV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHBsYW5lLCAmdmM0 X3N0YXRlLT5iYXNlKTsKPiArCj4gKwlpZiAodmM0X3N0YXRlLT5kbGlzdCkgewo+ICsJCXZjNF9z dGF0ZS0+ZGxpc3QgPSBrbWVtZHVwKHZjNF9zdGF0ZS0+ZGxpc3QsCj4gKwkJCQkJICAgdmM0X3N0 YXRlLT5kbGlzdF9jb3VudCAqIDQsCj4gKwkJCQkJICAgR0ZQX0tFUk5FTCk7Cj4gKwkJaWYgKCF2 YzRfc3RhdGUtPmRsaXN0KSB7Cj4gKwkJCWtmcmVlKHZjNF9zdGF0ZSk7Cj4gKwkJCXJldHVybiBO VUxMOwo+ICsJCX0KPiArCQl2YzRfc3RhdGUtPmRsaXN0X3NpemUgPSB2YzRfc3RhdGUtPmRsaXN0 X2NvdW50Owo+ICsJfQo+ICsKPiArCXJldHVybiAmdmM0X3N0YXRlLT5iYXNlOwo+ICt9Cj4gKwo+ ICt2b2lkIHZjNF9wbGFuZV9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ ICsJCQkgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3Qg dmM0X3BsYW5lX3N0YXRlICp2YzRfc3RhdGUgPSB0b192YzRfcGxhbmVfc3RhdGUoc3RhdGUpOwo+ ICsKPiArCWtmcmVlKHZjNF9zdGF0ZS0+ZGxpc3QpOwo+ICsJX19kcm1fYXRvbWljX2hlbHBlcl9w bGFuZV9kZXN0cm95X3N0YXRlKHBsYW5lLCAmdmM0X3N0YXRlLT5iYXNlKTsKPiArCWtmcmVlKHN0 YXRlKTsKPiArfQo+ICsKPiArLyogQ2FsbGVkIGR1cmluZyBpbml0IHRvIGFsbG9jYXRlIHRoZSBw bGFuZSdzIGF0b21pYyBzdGF0ZS4gKi8KPiArdm9pZCB2YzRfcGxhbmVfcmVzZXQoc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUpCj4gK3sKPiArCXN0cnVjdCB2YzRfcGxhbmVfc3RhdGUgKnZjNF9zdGF0 ZTsKPiArCj4gKwlXQVJOX09OKHBsYW5lLT5zdGF0ZSk7Cj4gKwo+ICsJdmM0X3N0YXRlID0ga3ph bGxvYyhzaXplb2YoKnZjNF9zdGF0ZSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCF2YzRfc3RhdGUp Cj4gKwkJcmV0dXJuOwo+ICsKPiArCXBsYW5lLT5zdGF0ZSA9ICZ2YzRfc3RhdGUtPmJhc2U7Cj4g Kwl2YzRfc3RhdGUtPmJhc2UucGxhbmUgPSBwbGFuZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg dmM0X2RsaXN0X3dyaXRlKHN0cnVjdCB2YzRfcGxhbmVfc3RhdGUgKnZjNF9zdGF0ZSwgdTMyIHZh bCkKPiArewo+ICsJaWYgKHZjNF9zdGF0ZS0+ZGxpc3RfY291bnQgPT0gdmM0X3N0YXRlLT5kbGlz dF9zaXplKSB7Cj4gKwkJdTMyIG5ld19zaXplID0gbWF4KDR1LCB2YzRfc3RhdGUtPmRsaXN0X2Nv dW50ICogMik7Cj4gKwkJdTMyICpuZXdfZGxpc3QgPSBrbWFsbG9jKG5ld19zaXplICogNCwgR0ZQ X0tFUk5FTCk7Cj4gKwo+ICsJCWlmICghbmV3X2RsaXN0KQo+ICsJCQlyZXR1cm47Cj4gKwkJbWVt Y3B5KG5ld19kbGlzdCwgdmM0X3N0YXRlLT5kbGlzdCwgdmM0X3N0YXRlLT5kbGlzdF9jb3VudCAq IDQpOwo+ICsKPiArCQlrZnJlZSh2YzRfc3RhdGUtPmRsaXN0KTsKPiArCQl2YzRfc3RhdGUtPmRs aXN0ID0gbmV3X2RsaXN0Owo+ICsJCXZjNF9zdGF0ZS0+ZGxpc3Rfc2l6ZSA9IG5ld19zaXplOwo+ ICsJfQo+ICsKPiArCXZjNF9zdGF0ZS0+ZGxpc3RbdmM0X3N0YXRlLT5kbGlzdF9jb3VudCsrXSA9 IHZhbDsKPiArfQo+ICsKPiArLyogV3JpdGVzIG91dCBhIGZ1bGwgZGlzcGxheSBsaXN0IGZvciBh biBhY3RpdmUgcGxhbmUgdG8gdGhlIHBsYW5lJ3MKPiArICogcHJpdmF0ZSBkbGlzdCBzdGF0ZS4K PiArICovCj4gK3N0YXRpYyBpbnQgdmM0X3BsYW5lX21vZGVfc2V0KHN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lLAo+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiArewo+ ICsJc3RydWN0IHZjNF9wbGFuZV9zdGF0ZSAqdmM0X3N0YXRlID0gdG9fdmM0X3BsYW5lX3N0YXRl KHN0YXRlKTsKPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gc3RhdGUtPmZiOwo+ICsJ c3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqYm8gPSBkcm1fZmJfY21hX2dldF9nZW1fb2JqKGZi LCAwKTsKPiArCXUzMiBjdGwwX29mZnNldCA9IHZjNF9zdGF0ZS0+ZGxpc3RfY291bnQ7Cj4gKwlj b25zdCBzdHJ1Y3QgaHZzX2Zvcm1hdCAqZm9ybWF0ID0gdmM0X2dldF9odnNfZm9ybWF0KGZiLT5w aXhlbF9mb3JtYXQpOwo+ICsJdWludDMyX3Qgb2Zmc2V0ID0gZmItPm9mZnNldHNbMF07Cj4gKwlp bnQgY3J0Y194ID0gc3RhdGUtPmNydGNfeDsKPiArCWludCBjcnRjX3kgPSBzdGF0ZS0+Y3J0Y195 Owo+ICsJaW50IGNydGNfdyA9IHN0YXRlLT5jcnRjX3c7Cj4gKwlpbnQgY3J0Y19oID0gc3RhdGUt PmNydGNfaDsKPiArCj4gKwlpZiAoY3J0Y194IDwgMCkgewo+ICsJCW9mZnNldCArPSBkcm1fZm9y bWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAwKSAqIC1jcnRjX3g7Cj4gKwkJY3J0Y193 ICs9IGNydGNfeDsKPiArCQljcnRjX3ggPSAwOwo+ICsJfQo+ICsKPiArCWlmIChjcnRjX3kgPCAw KSB7Cj4gKwkJb2Zmc2V0ICs9IGZiLT5waXRjaGVzWzBdICogLWNydGNfeTsKPiArCQljcnRjX2gg Kz0gY3J0Y195Owo+ICsJCWNydGNfeSA9IDA7Cj4gKwl9Cj4gKwo+ICsJdmM0X2RsaXN0X3dyaXRl KHZjNF9zdGF0ZSwKPiArCQkJU0NBTEVSX0NUTDBfVkFMSUQgfAo+ICsJCQkoZm9ybWF0LT5waXhl bF9vcmRlciA8PCBTQ0FMRVJfQ1RMMF9PUkRFUl9TSElGVCkgfAo+ICsJCQkoZm9ybWF0LT5odnMg PDwgU0NBTEVSX0NUTDBfUElYRUxfRk9STUFUX1NISUZUKSB8Cj4gKwkJCVNDQUxFUl9DVEwwX1VO SVRZKTsKPiArCj4gKwkvKiBQb3NpdGlvbiBXb3JkIDA6IEltYWdlIFBvc2l0aW9ucyBhbmQgQWxw aGEgVmFsdWUgKi8KPiArCXZjNF9kbGlzdF93cml0ZSh2YzRfc3RhdGUsCj4gKwkJCVZDNF9TRVRf RklFTEQoMHhmZiwgU0NBTEVSX1BPUzBfRklYRURfQUxQSEEpIHwKPiArCQkJVkM0X1NFVF9GSUVM RChjcnRjX3gsIFNDQUxFUl9QT1MwX1NUQVJUX1gpIHwKPiArCQkJVkM0X1NFVF9GSUVMRChjcnRj X3ksIFNDQUxFUl9QT1MwX1NUQVJUX1kpKTsKPiArCj4gKwkvKiBQb3NpdGlvbiBXb3JkIDE6IFNj YWxlZCBJbWFnZSBEaW1lbnNpb25zLgo+ICsJICogU2tpcHBlZCBkdWUgdG8gU0NBTEVSX0NUTDBf VU5JVFkgc2NhbGluZy4KPiArCSAqLwo+ICsKPiArCS8qIFBvc2l0aW9uIFdvcmQgMjogU291cmNl IEltYWdlIFNpemUsIEFscGhhIE1vZGUgKi8KPiArCXZjNF9kbGlzdF93cml0ZSh2YzRfc3RhdGUs Cj4gKwkJCVZDNF9TRVRfRklFTEQoZm9ybWF0LT5oYXNfYWxwaGEgPwo+ICsJCQkJICAgICAgU0NB TEVSX1BPUzJfQUxQSEFfTU9ERV9QSVBFTElORSA6Cj4gKwkJCQkgICAgICBTQ0FMRVJfUE9TMl9B TFBIQV9NT0RFX0ZJWEVELAo+ICsJCQkJICAgICAgU0NBTEVSX1BPUzJfQUxQSEFfTU9ERSkgfAo+ ICsJCQlWQzRfU0VUX0ZJRUxEKGNydGNfdywgU0NBTEVSX1BPUzJfV0lEVEgpIHwKPiArCQkJVkM0 X1NFVF9GSUVMRChjcnRjX2gsIFNDQUxFUl9QT1MyX0hFSUdIVCkpOwo+ICsKPiArCS8qIFBvc2l0 aW9uIFdvcmQgMzogQ29udGV4dC4gIFdyaXR0ZW4gYnkgdGhlIEhWUy4gKi8KPiArCXZjNF9kbGlz dF93cml0ZSh2YzRfc3RhdGUsIDB4YzBjMGMwYzApOwo+ICsKPiArCS8qIFBvaW50ZXIgV29yZCAw OiBSR0IgLyBZIFBvaW50ZXIgKi8KPiArCXZjNF9kbGlzdF93cml0ZSh2YzRfc3RhdGUsIGJvLT5w YWRkciArIG9mZnNldCk7Cj4gKwo+ICsJLyogUG9pbnRlciBDb250ZXh0IFdvcmQgMDogV3JpdHRl biBieSB0aGUgSFZTICovCj4gKwl2YzRfZGxpc3Rfd3JpdGUodmM0X3N0YXRlLCAweGMwYzBjMGMw KTsKPiArCj4gKwkvKiBQaXRjaCB3b3JkIDA6IFBvaW50ZXIgMCBQaXRjaCAqLwo+ICsJdmM0X2Rs aXN0X3dyaXRlKHZjNF9zdGF0ZSwKPiArCQkJVkM0X1NFVF9GSUVMRChmYi0+cGl0Y2hlc1swXSwg U0NBTEVSX1NSQ19QSVRDSCkpOwo+ICsKPiArCXZjNF9zdGF0ZS0+ZGxpc3RbY3RsMF9vZmZzZXRd IHw9Cj4gKwkJVkM0X1NFVF9GSUVMRCh2YzRfc3RhdGUtPmRsaXN0X2NvdW50LCBTQ0FMRVJfQ1RM MF9TSVpFKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArLyogSWYgYSBtb2Rlc2V0IGlu dm9sdmVzIGNoYW5naW5nIHRoZSBzZXR1cCBvZiBhIHBsYW5lLCB0aGUgYXRvbWljCj4gKyAqIGlu ZnJhc3RydWN0dXJlIHdpbGwgY2FsbCB0aGlzIHRvIHZhbGlkYXRlIGEgcHJvcG9zZWQgcGxhbmUg c2V0dXAuCj4gKyAqIEhvd2V2ZXIsIGlmIGEgcGxhbmUgaXNuJ3QgZ2V0dGluZyB1cGRhdGVkLCB0 aGlzIChhbmQgdGhlCj4gKyAqIGNvcnJlc3BvbmRpbmcgdmM0X3BsYW5lX2F0b21pY191cGRhdGUp IHdvbid0IGdldCBjYWxsZWQuICBUaHVzLCB3ZQo+ICsgKiBjb21wdXRlIHRoZSBkbGlzdCBoZXJl IGFuZCBoYXZlIGFsbCBhY3RpdmUgcGxhbmUgZGxpc3RzIGdldCB1cGRhdGVkCj4gKyAqIGluIHRo ZSBDUlRDJ3MgZmx1c2guCj4gKyAqLwo+ICtzdGF0aWMgaW50IHZjNF9wbGFuZV9hdG9taWNfY2hl Y2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gKwkJCQkgIHN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgKnN0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgdmM0X3BsYW5lX3N0YXRlICp2YzRfc3RhdGUgPSB0 b192YzRfcGxhbmVfc3RhdGUoc3RhdGUpOwo+ICsKPiArCXZjNF9zdGF0ZS0+ZGxpc3RfY291bnQg PSAwOwo+ICsKPiArCWlmIChwbGFuZV9lbmFibGVkKHN0YXRlKSkKPiArCQlyZXR1cm4gdmM0X3Bs YW5lX21vZGVfc2V0KHBsYW5lLCBzdGF0ZSk7Cj4gKwllbHNlCj4gKwkJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIHZjNF9wbGFuZV9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lLAo+ICsJCQkJICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkK PiArewo+ICsJLyogTm8gY29udGVudHMgaGVyZS4gIFNpbmNlIHdlIGRvbid0IGtub3cgd2hlcmUg aW4gdGhlIENSVEMncwo+ICsJICogZGxpc3Qgd2Ugc2hvdWxkIGJlIHN0b3JlZCwgb3VyIGRsaXN0 IGlzIHVwbG9hZGVkIHRvIHRoZQo+ICsJICogaGFyZHdhcmUgd2l0aCB2YzRfcGxhbmVfd3JpdGVf ZGxpc3QoKSBhdCBDUlRDIGF0b21pY19mbHVzaAo+ICsJICogdGltZS4KPiArCSAqLwo+ICt9Cj4g Kwo+ICt1MzIgdmM0X3BsYW5lX3dyaXRlX2RsaXN0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLCB1 MzIgX19pb21lbSAqZGxpc3QpCj4gK3sKPiArCXN0cnVjdCB2YzRfcGxhbmVfc3RhdGUgKnZjNF9z dGF0ZSA9IHRvX3ZjNF9wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOwo+ICsJaW50IGk7Cj4gKwo+ ICsJLyogQ2FuJ3QgbWVtY3B5X3RvaW8oKSBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlIDMyLWJpdCB3 cml0ZXMuICovCj4gKwlmb3IgKGkgPSAwOyBpIDwgdmM0X3N0YXRlLT5kbGlzdF9jb3VudDsgaSsr KQo+ICsJCXdyaXRlbCh2YzRfc3RhdGUtPmRsaXN0W2ldLCAmZGxpc3RbaV0pOwo+ICsKPiArCXJl dHVybiB2YzRfc3RhdGUtPmRsaXN0X2NvdW50Owo+ICt9Cj4gKwo+ICt1MzIgdmM0X3BsYW5lX2Rs aXN0X3NpemUoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCj4gK3sKPiArCXN0cnVjdCB2 YzRfcGxhbmVfc3RhdGUgKnZjNF9zdGF0ZSA9IHRvX3ZjNF9wbGFuZV9zdGF0ZShzdGF0ZSk7Cj4g Kwo+ICsJcmV0dXJuIHZjNF9zdGF0ZS0+ZGxpc3RfY291bnQ7Cj4gK30KPiArCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyB2YzRfcGxhbmVfaGVscGVyX2Z1bmNz ID0gewo+ICsJLnByZXBhcmVfZmIgPSBOVUxMLAo+ICsJLmNsZWFudXBfZmIgPSBOVUxMLAo+ICsJ LmF0b21pY19jaGVjayA9IHZjNF9wbGFuZV9hdG9taWNfY2hlY2ssCj4gKwkuYXRvbWljX3VwZGF0 ZSA9IHZjNF9wbGFuZV9hdG9taWNfdXBkYXRlLAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgdmM0 X3BsYW5lX2Rlc3Ryb3koc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCj4gK3sKPiArCWRybV9wbGFu ZV9oZWxwZXJfZGlzYWJsZShwbGFuZSk7Cj4gKwlkcm1fcGxhbmVfY2xlYW51cChwbGFuZSk7Cj4g K30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIHZjNF9wbGFuZV9m dW5jcyA9IHsKPiArCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxh bmUsCj4gKwkuZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUs Cj4gKwkuZGVzdHJveSA9IHZjNF9wbGFuZV9kZXN0cm95LAo+ICsJLnNldF9wcm9wZXJ0eSA9IE5V TEwsCj4gKwkucmVzZXQgPSB2YzRfcGxhbmVfcmVzZXQsCj4gKwkuYXRvbWljX2R1cGxpY2F0ZV9z dGF0ZSA9IHZjNF9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3Rh dGUgPSB2YzRfcGxhbmVfZGVzdHJveV9zdGF0ZSwKPiArfTsKPiArCj4gK3N0cnVjdCBkcm1fcGxh bmUgKnZjNF9wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCQkgZW51bSBk cm1fcGxhbmVfdHlwZSB0eXBlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9IE5V TEw7Cj4gKwlzdHJ1Y3QgdmM0X3BsYW5lICp2YzRfcGxhbmU7Cj4gKwl1MzIgZm9ybWF0c1tBUlJB WV9TSVpFKGh2c19mb3JtYXRzKV07Cj4gKwlpbnQgcmV0ID0gMDsKPiArCXVuc2lnbmVkIGk7Cj4g Kwo+ICsJdmM0X3BsYW5lID0gZGV2bV9remFsbG9jKGRldi0+ZGV2LCBzaXplb2YoKnZjNF9wbGFu ZSksCj4gKwkJCQkgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXZjNF9wbGFuZSkgewo+ICsJCXJldCA9 IC1FTk9NRU07Cj4gKwkJZ290byBmYWlsOwo+ICsJfQo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBB UlJBWV9TSVpFKGh2c19mb3JtYXRzKTsgaSsrKQo+ICsJCWZvcm1hdHNbaV0gPSBodnNfZm9ybWF0 c1tpXS5kcm07Cj4gKwlwbGFuZSA9ICZ2YzRfcGxhbmUtPmJhc2U7Cj4gKwlyZXQgPSBkcm1fdW5p dmVyc2FsX3BsYW5lX2luaXQoZGV2LCBwbGFuZSwgMHhmZiwKPiArCQkJCSAgICAgICAmdmM0X3Bs YW5lX2Z1bmNzLAo+ICsJCQkJICAgICAgIGZvcm1hdHMsIEFSUkFZX1NJWkUoZm9ybWF0cyksCj4g KwkJCQkgICAgICAgdHlwZSk7Cj4gKwo+ICsJZHJtX3BsYW5lX2hlbHBlcl9hZGQocGxhbmUsICZ2 YzRfcGxhbmVfaGVscGVyX2Z1bmNzKTsKPiArCj4gKwlyZXR1cm4gcGxhbmU7Cj4gK2ZhaWw6Cj4g KwlpZiAocGxhbmUpCj4gKwkJdmM0X3BsYW5lX2Rlc3Ryb3kocGxhbmUpOwo+ICsKPiArCXJldHVy biBFUlJfUFRSKHJldCk7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92 YzRfcmVncy5oIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcmVncy5oCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4wZWZmNjMxCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3JlZ3MuaAo+IEBAIC0wLDAgKzEsNTYyIEBACj4gKy8q Cj4gKyAqICBDb3B5cmlnaHQgwqkgMjAxNC0yMDE1IEJyb2FkY29tCj4gKyAqCj4gKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgo+ICsgKi8KPiArCj4gKyNkZWZpbmUgVkM0X01BU0soaGlnaCwgbG93KSAo KCgxIDw8ICgoaGlnaCkgLSAobG93KSArIDEpKSAtIDEpIDw8IChsb3cpKQo+ICsvKiBVc2luZyB0 aGUgR05VIHN0YXRlbWVudCBleHByZXNzaW9uIGV4dGVuc2lvbiAqLwo+ICsjZGVmaW5lIFZDNF9T RVRfRklFTEQodmFsdWUsIGZpZWxkKQkJCQkJXAo+ICsJKHsJCQkJCQkJCVwKPiArCQl1aW50MzJf dCBmaWVsZHZhbCA9ICh2YWx1ZSkgPDwgZmllbGQjI19TSElGVDsJCVwKPiArCQlXQVJOX09OKChm aWVsZHZhbCAmIH5maWVsZCMjX01BU0spICE9IDApOwkJXAo+ICsJCWZpZWxkdmFsICYgZmllbGQj I19NQVNLOwkJCQlcCj4gKwkgfSkKPiArCj4gKyNkZWZpbmUgVkM0X0dFVF9GSUVMRCh3b3JkLCBm aWVsZCkgKCgod29yZCkgJiBmaWVsZCMjX01BU0spID4+CQlcCj4gKwkJCQkgICAgZmllbGQjI19T SElGVCkKPiArCj4gKyNkZWZpbmUgVjNEX0lERU5UMCAgIDB4MDAwMDAKPiArIyBkZWZpbmUgVjNE X0VYUEVDVEVEX0lERU5UMCBcCj4gKwkoKDIgPDwgMjQpIHwgXAo+ICsJKCdWJyA8PCAwKSB8IFwK PiArCSgnMycgPDwgOCkgfCBcCj4gKwkgKCdEJyA8PCAxNikpCj4gKwo+ICsjZGVmaW5lIFYzRF9J REVOVDEgICAweDAwMDA0Cj4gKy8qIE11bHRpcGxlcyBvZiAxa2IgKi8KPiArIyBkZWZpbmUgVjNE X0lERU5UMV9WUE1fU0laRV9NQVNLICAgICAgICAgICAgICAgICAgICAgIFZDNF9NQVNLKDMxLCAy OCkKPiArIyBkZWZpbmUgVjNEX0lERU5UMV9WUE1fU0laRV9TSElGVCAgICAgICAgICAgICAgICAg ICAgIDI4Cj4gKyMgZGVmaW5lIFYzRF9JREVOVDFfTlNFTV9NQVNLICAgICAgICAgICAgICAgICAg ICAgICAgICBWQzRfTUFTSygyMywgMTYpCj4gKyMgZGVmaW5lIFYzRF9JREVOVDFfTlNFTV9TSElG VCAgICAgICAgICAgICAgICAgICAgICAgICAxNgo+ICsjIGRlZmluZSBWM0RfSURFTlQxX1RVUFNf TUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgVkM0X01BU0soMTUsIDEyKQo+ICsjIGRlZmlu ZSBWM0RfSURFTlQxX1RVUFNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTIKPiArIyBk ZWZpbmUgVjNEX0lERU5UMV9RVVBTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIFZDNF9N QVNLKDExLCA4KQo+ICsjIGRlZmluZSBWM0RfSURFTlQxX1FVUFNfU0hJRlQgICAgICAgICAgICAg ICAgICAgICAgICAgOAo+ICsjIGRlZmluZSBWM0RfSURFTlQxX05TTENfTUFTSyAgICAgICAgICAg ICAgICAgICAgICAgICAgVkM0X01BU0soNywgNCkKPiArIyBkZWZpbmUgVjNEX0lERU5UMV9OU0xD X1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDQKPiArIyBkZWZpbmUgVjNEX0lERU5UMV9S RVZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZDNF9NQVNLKDMsIDApCj4gKyMgZGVm aW5lIFYzRF9JREVOVDFfUkVWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwCj4gKwo+ ICsjZGVmaW5lIFYzRF9JREVOVDIgICAweDAwMDA4Cj4gKyNkZWZpbmUgVjNEX1NDUkFUQ0ggIDB4 MDAwMTAKPiArI2RlZmluZSBWM0RfTDJDQUNUTCAgMHgwMDAyMAo+ICsjIGRlZmluZSBWM0RfTDJD QUNUTF9MMkNDTFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKPiArIyBkZWZp bmUgVjNEX0wyQ0FDVExfTDJDRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEp Cj4gKyMgZGVmaW5lIFYzRF9MMkNBQ1RMX0wyQ0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoMSA8PCAwKQo+ICsKPiArI2RlZmluZSBWM0RfU0xDQUNUTCAgMHgwMDAyNAo+ICsjIGRlZmlu ZSBWM0RfU0xDQUNUTF9UMUNDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgVkM0X01BU0so MjcsIDI0KQo+ICsjIGRlZmluZSBWM0RfU0xDQUNUTF9UMUNDX1NISUZUICAgICAgICAgICAgICAg ICAgICAgICAgMjQKPiArIyBkZWZpbmUgVjNEX1NMQ0FDVExfVDBDQ19NQVNLICAgICAgICAgICAg ICAgICAgICAgICAgIFZDNF9NQVNLKDE5LCAxNikKPiArIyBkZWZpbmUgVjNEX1NMQ0FDVExfVDBD Q19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE2Cj4gKyMgZGVmaW5lIFYzRF9TTENBQ1RM X1VDQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICBWQzRfTUFTSygxMSwgOCkKPiArIyBk ZWZpbmUgVjNEX1NMQ0FDVExfVUNDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDgKPiAr IyBkZWZpbmUgVjNEX1NMQ0FDVExfSUNDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIFZD NF9NQVNLKDMsIDApCj4gKyMgZGVmaW5lIFYzRF9TTENBQ1RMX0lDQ19TSElGVCAgICAgICAgICAg ICAgICAgICAgICAgICAwCj4gKwo+ICsjZGVmaW5lIFYzRF9JTlRDVEwgICAweDAwMDMwCj4gKyNk ZWZpbmUgVjNEX0lOVEVOQSAgIDB4MDAwMzQKPiArI2RlZmluZSBWM0RfSU5URElTICAgMHgwMDAz OAo+ICsjIGRlZmluZSBWM0RfSU5UX1NQSUxMVVNFICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKDEgPDwgMykKPiArIyBkZWZpbmUgVjNEX0lOVF9PVVRPTUVNICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgxIDw8IDIpCj4gKyMgZGVmaW5lIFYzRF9JTlRfRkxET05FICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQo+ICsjIGRlZmluZSBWM0RfSU5UX0ZSRE9O RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKPiArCj4gKyNkZWZpbmUg VjNEX0NUMENTICAgIDB4MDAxMDAKPiArI2RlZmluZSBWM0RfQ1QxQ1MgICAgMHgwMDEwNAo+ICsj ZGVmaW5lIFYzRF9DVE5DUyhuKSAoVjNEX0NUMENTICsgNCAqIG4pCj4gKyMgZGVmaW5lIFYzRF9D VFJTVEEgICAgICAoMSA8PCAxNSkKPiArIyBkZWZpbmUgVjNEX0NUU0VNQSAgICAgICgxIDw8IDEy KQo+ICsjIGRlZmluZSBWM0RfQ1RSVFNEICAgICAgKDEgPDwgOCkKPiArIyBkZWZpbmUgVjNEX0NU UlVOICAgICAgICgxIDw8IDUpCj4gKyMgZGVmaW5lIFYzRF9DVFNVQlMgICAgICAoMSA8PCA0KQo+ ICsjIGRlZmluZSBWM0RfQ1RFUlIgICAgICAgKDEgPDwgMykKPiArIyBkZWZpbmUgVjNEX0NUTU9E RSAgICAgICgxIDw8IDApCj4gKwo+ICsjZGVmaW5lIFYzRF9DVDBFQSAgICAweDAwMTA4Cj4gKyNk ZWZpbmUgVjNEX0NUMUVBICAgIDB4MDAxMGMKPiArI2RlZmluZSBWM0RfQ1RORUEobikgKFYzRF9D VDBFQSArIDQgKiAobikpCj4gKyNkZWZpbmUgVjNEX0NUMENBICAgIDB4MDAxMTAKPiArI2RlZmlu ZSBWM0RfQ1QxQ0EgICAgMHgwMDExNAo+ICsjZGVmaW5lIFYzRF9DVE5DQShuKSAoVjNEX0NUMENB ICsgNCAqIChuKSkKPiArI2RlZmluZSBWM0RfQ1QwMFJBMCAgMHgwMDExOAo+ICsjZGVmaW5lIFYz RF9DVDAxUkEwICAweDAwMTFjCj4gKyNkZWZpbmUgVjNEX0NUTlJBMChuKSAoVjNEX0NUMDBSQTAg KyA0ICogKG4pKQo+ICsjZGVmaW5lIFYzRF9DVDBMQyAgICAweDAwMTIwCj4gKyNkZWZpbmUgVjNE X0NUMUxDICAgIDB4MDAxMjQKPiArI2RlZmluZSBWM0RfQ1ROTEMobikgKFYzRF9DVDBMQyArIDQg KiAobikpCj4gKyNkZWZpbmUgVjNEX0NUMFBDICAgIDB4MDAxMjgKPiArI2RlZmluZSBWM0RfQ1Qx UEMgICAgMHgwMDEyYwo+ICsjZGVmaW5lIFYzRF9DVE5QQyhuKSAoVjNEX0NUMFBDICsgNCAqIChu KSkKPiArCj4gKyNkZWZpbmUgVjNEX1BDUyAgICAgIDB4MDAxMzAKPiArIyBkZWZpbmUgVjNEX0JN T09NICAgICAgICgxIDw8IDgpCj4gKyMgZGVmaW5lIFYzRF9STUJVU1kgICAgICAoMSA8PCAzKQo+ ICsjIGRlZmluZSBWM0RfUk1BQ1RJVkUgICAgKDEgPDwgMikKPiArIyBkZWZpbmUgVjNEX0JNQlVT WSAgICAgICgxIDw8IDEpCj4gKyMgZGVmaW5lIFYzRF9CTUFDVElWRSAgICAoMSA8PCAwKQo+ICsK PiArI2RlZmluZSBWM0RfQkZDICAgICAgMHgwMDEzNAo+ICsjZGVmaW5lIFYzRF9SRkMgICAgICAw eDAwMTM4Cj4gKyNkZWZpbmUgVjNEX0JQQ0EgICAgIDB4MDAzMDAKPiArI2RlZmluZSBWM0RfQlBD UyAgICAgMHgwMDMwNAo+ICsjZGVmaW5lIFYzRF9CUE9BICAgICAweDAwMzA4Cj4gKyNkZWZpbmUg VjNEX0JQT1MgICAgIDB4MDAzMGMKPiArI2RlZmluZSBWM0RfQlhDRiAgICAgMHgwMDMxMAo+ICsj ZGVmaW5lIFYzRF9TUVJTVjAgICAweDAwNDEwCj4gKyNkZWZpbmUgVjNEX1NRUlNWMSAgIDB4MDA0 MTQKPiArI2RlZmluZSBWM0RfU1FDTlRMICAgMHgwMDQxOAo+ICsjZGVmaW5lIFYzRF9TUlFQQyAg ICAweDAwNDMwCj4gKyNkZWZpbmUgVjNEX1NSUVVBICAgIDB4MDA0MzQKPiArI2RlZmluZSBWM0Rf U1JRVUwgICAgMHgwMDQzOAo+ICsjZGVmaW5lIFYzRF9TUlFDUyAgICAweDAwNDNjCj4gKyNkZWZp bmUgVjNEX1ZQQUNOVEwgIDB4MDA1MDAKPiArI2RlZmluZSBWM0RfVlBNQkFTRSAgMHgwMDUwNAo+ ICsjZGVmaW5lIFYzRF9QQ1RSQyAgICAweDAwNjcwCj4gKyNkZWZpbmUgVjNEX1BDVFJFICAgIDB4 MDA2NzQKPiArI2RlZmluZSBWM0RfUENUUjAgICAgMHgwMDY4MAo+ICsjZGVmaW5lIFYzRF9QQ1RS UzAgICAweDAwNjg0Cj4gKyNkZWZpbmUgVjNEX1BDVFIxICAgIDB4MDA2ODgKPiArI2RlZmluZSBW M0RfUENUUlMxICAgMHgwMDY4Ywo+ICsjZGVmaW5lIFYzRF9QQ1RSMiAgICAweDAwNjkwCj4gKyNk ZWZpbmUgVjNEX1BDVFJTMiAgIDB4MDA2OTQKPiArI2RlZmluZSBWM0RfUENUUjMgICAgMHgwMDY5 OAo+ICsjZGVmaW5lIFYzRF9QQ1RSUzMgICAweDAwNjljCj4gKyNkZWZpbmUgVjNEX1BDVFI0ICAg IDB4MDA2YTAKPiArI2RlZmluZSBWM0RfUENUUlM0ICAgMHgwMDZhNAo+ICsjZGVmaW5lIFYzRF9Q Q1RSNSAgICAweDAwNmE4Cj4gKyNkZWZpbmUgVjNEX1BDVFJTNSAgIDB4MDA2YWMKPiArI2RlZmlu ZSBWM0RfUENUUjYgICAgMHgwMDZiMAo+ICsjZGVmaW5lIFYzRF9QQ1RSUzYgICAweDAwNmI0Cj4g KyNkZWZpbmUgVjNEX1BDVFI3ICAgIDB4MDA2YjgKPiArI2RlZmluZSBWM0RfUENUUlM3ICAgMHgw MDZiYwo+ICsjZGVmaW5lIFYzRF9QQ1RSOCAgICAweDAwNmMwCj4gKyNkZWZpbmUgVjNEX1BDVFJT OCAgIDB4MDA2YzQKPiArI2RlZmluZSBWM0RfUENUUjkgICAgMHgwMDZjOAo+ICsjZGVmaW5lIFYz RF9QQ1RSUzkgICAweDAwNmNjCj4gKyNkZWZpbmUgVjNEX1BDVFIxMCAgIDB4MDA2ZDAKPiArI2Rl ZmluZSBWM0RfUENUUlMxMCAgMHgwMDZkNAo+ICsjZGVmaW5lIFYzRF9QQ1RSMTEgICAweDAwNmQ4 Cj4gKyNkZWZpbmUgVjNEX1BDVFJTMTEgIDB4MDA2ZGMKPiArI2RlZmluZSBWM0RfUENUUjEyICAg MHgwMDZlMAo+ICsjZGVmaW5lIFYzRF9QQ1RSUzEyICAweDAwNmU0Cj4gKyNkZWZpbmUgVjNEX1BD VFIxMyAgIDB4MDA2ZTgKPiArI2RlZmluZSBWM0RfUENUUlMxMyAgMHgwMDZlYwo+ICsjZGVmaW5l IFYzRF9QQ1RSMTQgICAweDAwNmYwCj4gKyNkZWZpbmUgVjNEX1BDVFJTMTQgIDB4MDA2ZjQKPiAr I2RlZmluZSBWM0RfUENUUjE1ICAgMHgwMDZmOAo+ICsjZGVmaW5lIFYzRF9QQ1RSUzE1ICAweDAw NmZjCj4gKyNkZWZpbmUgVjNEX0JHRSAgICAgIDB4MDBmMDAKPiArI2RlZmluZSBWM0RfRkRCR08g ICAgMHgwMGYwNAo+ICsjZGVmaW5lIFYzRF9GREJHQiAgICAweDAwZjA4Cj4gKyNkZWZpbmUgVjNE X0ZEQkdSICAgIDB4MDBmMGMKPiArI2RlZmluZSBWM0RfRkRCR1MgICAgMHgwMGYxMAo+ICsjZGVm aW5lIFYzRF9FUlJTVEFUICAweDAwZjIwCj4gKwo+ICsjZGVmaW5lIFBWX0NPTlRST0wJCQkJMHgw MAo+ICsjIGRlZmluZSBQVl9DT05UUk9MX0ZPUk1BVF9NQVNLCQkJVkM0X01BU0soMjMsIDIxKQo+ ICsjIGRlZmluZSBQVl9DT05UUk9MX0ZPUk1BVF9TSElGVAkJMjEKPiArIyBkZWZpbmUgUFZfQ09O VFJPTF9GT1JNQVRfMjQJCQkwCj4gKyMgZGVmaW5lIFBWX0NPTlRST0xfRk9STUFUX0RTSVZfMTYJ CTEKPiArIyBkZWZpbmUgUFZfQ09OVFJPTF9GT1JNQVRfRFNJQ18xNgkJMgo+ICsjIGRlZmluZSBQ Vl9DT05UUk9MX0ZPUk1BVF9EU0lWXzE4CQkzCj4gKyMgZGVmaW5lIFBWX0NPTlRST0xfRk9STUFU X0RTSVZfMjQJCTQKPiArCj4gKyMgZGVmaW5lIFBWX0NPTlRST0xfRklGT19MRVZFTF9NQVNLCQlW QzRfTUFTSygyMCwgMTUpCj4gKyMgZGVmaW5lIFBWX0NPTlRST0xfRklGT19MRVZFTF9TSElGVAkJ MTUKPiArIyBkZWZpbmUgUFZfQ09OVFJPTF9DTFJfQVRfU1RBUlQJCSgxIDw8IDE0KQo+ICsjIGRl ZmluZSBQVl9DT05UUk9MX1RSSUdHRVJfVU5ERVJGTE9XCQkoMSA8PCAxMykKPiArIyBkZWZpbmUg UFZfQ09OVFJPTF9XQUlUX0hTVEFSVAkJCSgxIDw8IDEyKQo+ICsjIGRlZmluZSBQVl9DT05UUk9M X0NMS19TRUxFQ1RfRFNJCQkwCj4gKyMgZGVmaW5lIFBWX0NPTlRST0xfQ0xLX1NFTEVDVF9EUElf U01JX0hETUkJMQo+ICsjIGRlZmluZSBQVl9DT05UUk9MX0NMS19TRUxFQ1RfTUFTSwkJVkM0X01B U0soMywgMikKPiArIyBkZWZpbmUgUFZfQ09OVFJPTF9DTEtfU0VMRUNUX1NISUZUCQkyCj4gKyMg ZGVmaW5lIFBWX0NPTlRST0xfRklGT19DTFIJCQkoMSA8PCAxKQo+ICsjIGRlZmluZSBQVl9DT05U Uk9MX0VOCQkJCSgxIDw8IDApCj4gKwo+ICsjZGVmaW5lIFBWX1ZfQ09OVFJPTAkJCQkweDA0Cj4g KyMgZGVmaW5lIFBWX1ZDT05UUk9MX0NPTlRJTlVPVVMJCQkoMSA8PCAxKQo+ICsjIGRlZmluZSBQ Vl9WQ09OVFJPTF9WSURFTgkJCSgxIDw8IDApCj4gKwo+ICsjZGVmaW5lIFBWX1ZTWU5DRAkJCQkw eDA4Cj4gKwo+ICsjZGVmaW5lIFBWX0hPUlpBCQkJCTB4MGMKPiArIyBkZWZpbmUgUFZfSE9SWkFf SEJQX01BU0sJCQlWQzRfTUFTSygzMSwgMTYpCj4gKyMgZGVmaW5lIFBWX0hPUlpBX0hCUF9TSElG VAkJCTE2Cj4gKyMgZGVmaW5lIFBWX0hPUlpBX0hTWU5DX01BU0sJCQlWQzRfTUFTSygxNSwgMCkK PiArIyBkZWZpbmUgUFZfSE9SWkFfSFNZTkNfU0hJRlQJCQkwCj4gKwo+ICsjZGVmaW5lIFBWX0hP UlpCCQkJCTB4MTAKPiArIyBkZWZpbmUgUFZfSE9SWkJfSEZQX01BU0sJCQlWQzRfTUFTSygzMSwg MTYpCj4gKyMgZGVmaW5lIFBWX0hPUlpCX0hGUF9TSElGVAkJCTE2Cj4gKyMgZGVmaW5lIFBWX0hP UlpCX0hBQ1RJVkVfTUFTSwkJCVZDNF9NQVNLKDE1LCAwKQo+ICsjIGRlZmluZSBQVl9IT1JaQl9I QUNUSVZFX1NISUZUCQkJMAo+ICsKPiArI2RlZmluZSBQVl9WRVJUQQkJCQkweDE0Cj4gKyMgZGVm aW5lIFBWX1ZFUlRBX1ZCUF9NQVNLCQkJVkM0X01BU0soMzEsIDE2KQo+ICsjIGRlZmluZSBQVl9W RVJUQV9WQlBfU0hJRlQJCQkxNgo+ICsjIGRlZmluZSBQVl9WRVJUQV9WU1lOQ19NQVNLCQkJVkM0 X01BU0soMTUsIDApCj4gKyMgZGVmaW5lIFBWX1ZFUlRBX1ZTWU5DX1NISUZUCQkJMAo+ICsKPiAr I2RlZmluZSBQVl9WRVJUQgkJCQkweDE4Cj4gKyMgZGVmaW5lIFBWX1ZFUlRCX1ZGUF9NQVNLCQkJ VkM0X01BU0soMzEsIDE2KQo+ICsjIGRlZmluZSBQVl9WRVJUQl9WRlBfU0hJRlQJCQkxNgo+ICsj IGRlZmluZSBQVl9WRVJUQl9WQUNUSVZFX01BU0sJCQlWQzRfTUFTSygxNSwgMCkKPiArIyBkZWZp bmUgUFZfVkVSVEJfVkFDVElWRV9TSElGVAkJCTAKPiArCj4gKyNkZWZpbmUgUFZfVkVSVEFfRVZF TgkJCQkweDFjCj4gKyNkZWZpbmUgUFZfVkVSVEJfRVZFTgkJCQkweDIwCj4gKwo+ICsjZGVmaW5l IFBWX0lOVEVOCQkJCTB4MjQKPiArI2RlZmluZSBQVl9JTlRTVEFUCQkJCTB4MjgKPiArIyBkZWZp bmUgUFZfSU5UX1ZJRF9JRExFCQkJKDEgPDwgOSkKPiArIyBkZWZpbmUgUFZfSU5UX1ZGUF9FTkQJ CQkJKDEgPDwgOCkKPiArIyBkZWZpbmUgUFZfSU5UX1ZGUF9TVEFSVAkJCSgxIDw8IDcpCj4gKyMg ZGVmaW5lIFBWX0lOVF9WQUNUX1NUQVJUCQkJKDEgPDwgNikKPiArIyBkZWZpbmUgUFZfSU5UX1ZC UF9TVEFSVAkJCSgxIDw8IDUpCj4gKyMgZGVmaW5lIFBWX0lOVF9WU1lOQ19TVEFSVAkJCSgxIDw8 IDQpCj4gKyMgZGVmaW5lIFBWX0lOVF9IRlBfU1RBUlQJCQkoMSA8PCAzKQo+ICsjIGRlZmluZSBQ Vl9JTlRfSEFDVF9TVEFSVAkJCSgxIDw8IDIpCj4gKyMgZGVmaW5lIFBWX0lOVF9IQlBfU1RBUlQJ CQkoMSA8PCAxKQo+ICsjIGRlZmluZSBQVl9JTlRfSFNZTkNfU1RBUlQJCQkoMSA8PCAwKQo+ICsK PiArI2RlZmluZSBQVl9TVEFUCQkJCQkweDJjCj4gKwo+ICsjZGVmaW5lIFBWX0hBQ1RfQUNUCQkJ CTB4MzAKPiArCj4gKyNkZWZpbmUgU0NBTEVSX0RJU1BDVFJMICAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDAwMDAwMDAKPiArLyogR2xvYmFsIHJlZ2lzdGVyIGZvciBjbG9jayBnYXRpbmcgdGhl IEhWUyAqLwo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUENUUkxfRU5BQkxFCQkJKDEgPDwgMzEpCj4g KyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTF9EU1AyRUlTTFVSCQkoMSA8PCAxNSkKPiArIyBkZWZp bmUgU0NBTEVSX0RJU1BDVFJMX0RTUDFFSVNMVVIJCSgxIDw8IDE0KQo+ICsvKiBFbmFibGVzIERp c3BsYXkgMCBzaG9ydCBsaW5lIGFuZCB1bmRlcnJ1biBjb250cmlidXRpb24gdG8KPiArICogU0NB TEVSX0RJU1BTVEFUX0lSUURJU1AwLiAgTm90ZSB0aGF0IHNob3J0IGZyYW1lIGNvbnRyaWJ1dGlv bnMgYXJlCj4gKyAqIGFsd2F5cyBlbmFibGVkLgo+ICsgKi8KPiArIyBkZWZpbmUgU0NBTEVSX0RJ U1BDVFJMX0RTUDBFSVNMVVIJCSgxIDw8IDEzKQo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUENUUkxf RFNQMkVJRU9MTgkJKDEgPDwgMTIpCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTF9EU1AyRUlF T0YJCSgxIDw8IDExKQo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUENUUkxfRFNQMUVJRU9MTgkJKDEg PDwgMTApCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTF9EU1AxRUlFT0YJCSgxIDw8IDkpCj4g Ky8qIEVuYWJsZXMgRGlzcGxheSAwIGVuZC1vZi1saW5lLU4gY29udHJpYnV0aW9uIHRvCj4gKyAq IFNDQUxFUl9ESVNQU1RBVF9JUlFESVNQMAo+ICsgKi8KPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BD VFJMX0RTUDBFSUVPTE4JCSgxIDw8IDgpCj4gKy8qIEVuYWJsZXMgRGlzcGxheSAwIEVPRiBjb250 cmlidXRpb24gdG8gU0NBTEVSX0RJU1BTVEFUX0lSUURJU1AwICovCj4gKyMgZGVmaW5lIFNDQUxF Ul9ESVNQQ1RSTF9EU1AwRUlFT0YJCSgxIDw8IDcpCj4gKwo+ICsjIGRlZmluZSBTQ0FMRVJfRElT UENUUkxfU0xWUkRFSVJRCQkoMSA8PCA2KQo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUENUUkxfU0xW V1JFSVJRCQkoMSA8PCA1KQo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUENUUkxfRE1BRUlSUQkJKDEg PDwgNCkKPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BDVFJMX0RJU1AyRUlSUQkJKDEgPDwgMykKPiAr IyBkZWZpbmUgU0NBTEVSX0RJU1BDVFJMX0RJU1AxRUlSUQkJKDEgPDwgMikKPiArLyogRW5hYmxl cyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBvbiB0aGUgZW5hYmxlZCBFT0YvRU9MTi9FSVNMVVIKPiAr ICogYml0cyBhbmQgc2hvcnQgZnJhbWVzLi4KPiArICovCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQ Q1RSTF9ESVNQMEVJUlEJCSgxIDw8IDEpCj4gKy8qIEVuYWJsZXMgaW50ZXJydXB0IGdlbmVyYXRp b24gb24gc2NhbGVyIHByb2ZpbGVyIGludGVycnVwdC4gKi8KPiArIyBkZWZpbmUgU0NBTEVSX0RJ U1BDVFJMX1NDTEVJUlEJCSgxIDw8IDApCj4gKwo+ICsjZGVmaW5lIFNDQUxFUl9ESVNQU1RBVCAg ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Cj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQ U1RBVF9DT0JMT1cyCQkoMSA8PCAyOSkKPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VPTE4y CQkJKDEgPDwgMjgpCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9FU0ZSQU1FMgkJKDEgPDwg MjcpCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9FU0xJTkUyCQkoMSA8PCAyNikKPiArIyBk ZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VVRkxPVzIJCSgxIDw8IDI1KQo+ICsjIGRlZmluZSBTQ0FM RVJfRElTUFNUQVRfRU9GMgkJCSgxIDw8IDI0KQo+ICsKPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BT VEFUX0NPQkxPVzEJCSgxIDw8IDIxKQo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfRU9MTjEJ CQkoMSA8PCAyMCkKPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VTRlJBTUUxCQkoMSA8PCAx OSkKPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VTTElORTEJCSgxIDw8IDE4KQo+ICsjIGRl ZmluZSBTQ0FMRVJfRElTUFNUQVRfRVVGTE9XMQkJKDEgPDwgMTcpCj4gKyMgZGVmaW5lIFNDQUxF Ul9ESVNQU1RBVF9FT0YxCQkJKDEgPDwgMTYpCj4gKwo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUFNU QVRfUkVTUF9NQVNLCQlWQzRfTUFTSygxNSwgMTQpCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RB VF9SRVNQX1NISUZUCQkxNAo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfUkVTUF9PS0FZCQkw Cj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9SRVNQX0VYT0tBWQkJMQo+ICsjIGRlZmluZSBT Q0FMRVJfRElTUFNUQVRfUkVTUF9TTFZFUlIJCTIKPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFU X1JFU1BfREVDRVJSCQkzCj4gKwo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfQ09CTE9XMAkJ KDEgPDwgMTMpCj4gKy8qIFNldCB3aGVuIHRoZSBESVNQRU9MTiBsaW5lIGlzIGRvbmUgY29tcG9z aXRpbmcuICovCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9FT0xOMAkJCSgxIDw8IDEyKQo+ ICsvKiBTZXQgd2hlbiBWU1RBUlQgaXMgc2VlbiBidXQgdGhlcmUgYXJlIHN0aWxsIHBpeGVscyBp biB0aGUgY3VycmVudAo+ICsgKiBvdXRwdXQgbGluZS4KPiArICovCj4gKyMgZGVmaW5lIFNDQUxF Ul9ESVNQU1RBVF9FU0ZSQU1FMAkJKDEgPDwgMTEpCj4gKy8qIFNldCB3aGVuIEhTVEFSVCBpcyBz ZWVuIGJ1dCB0aGVyZSBhcmUgc3RpbGwgcGl4ZWxzIGluIHRoZSBjdXJyZW50Cj4gKyAqIG91dHB1 dCBsaW5lLgo+ICsgKi8KPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VTTElORTAJCSgxIDw8 IDEwKQo+ICsvKiBTZXQgd2hlbiB0aGUgdGhlIGRvd25zdHJlYW0gdHJpZXMgdG8gcmVhZCBmcm9t IHRoZSBkaXNwbGF5IEZJRk8KPiArICogd2hpbGUgaXQncyBlbXB0eS4KPiArICovCj4gKyMgZGVm aW5lIFNDQUxFUl9ESVNQU1RBVF9FVUZMT1cwCQkoMSA8PCA5KQo+ICsvKiBTZXQgd2hlbiB0aGUg ZGlzcGxheSBtb2RlIGNoYW5nZXMgZnJvbSBSVU4gdG8gRU9GICovCj4gKyMgZGVmaW5lIFNDQUxF Ul9ESVNQU1RBVF9FT0YwCQkJKDEgPDwgOCkKPiArCj4gKy8qIFNldCBvbiBBWEkgaW52YWxpZCBE TUEgSUQgZXJyb3IuICovCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9ETUFfRVJST1IJCSgx IDw8IDcpCj4gKy8qIFNldCBvbiBBWEkgc2xhdmUgcmVhZCBkZWNvZGUgZXJyb3IgKi8KPiArIyBk ZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0lSUVNMVlJECQkoMSA8PCA2KQo+ICsvKiBTZXQgb24gQVhJ IHNsYXZlIHdyaXRlIGRlY29kZSBlcnJvciAqLwo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRf SVJRU0xWV1IJCSgxIDw8IDUpCj4gKy8qIFNldCB3aGVuIFNDQUxFUl9ESVNQU1RBVF9ETUFfRVJS T1IgaXMgc2V0LCBvcgo+ICsgKiBTQ0FMRVJfRElTUFNUQVRfUkVTUF9FUlJPUiBpcyBub3QgU0NB TEVSX0RJU1BTVEFUX1JFU1BfT0tBWS4KPiArICovCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RB VF9JUlFETUEJCQkoMSA8PCA0KQo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfSVJRRElTUDIJ CSgxIDw8IDMpCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9JUlFESVNQMQkJKDEgPDwgMikK PiArLyogU2V0IHdoZW4gYW55IG9mIHRoZSBFT0YvRU9MTi9FU0ZSQU1FL0VTTElORSBiaXRzIGFy ZSBzZXQgYW5kIHRoZWlyCj4gKyAqIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IGJpdCBpcyBlbmFi bGVkIGluIERJU1BDVFJMLgo+ICsgKi8KPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0lSUURJ U1AwCQkoMSA8PCAxKQo+ICsvKiBPbiByZWFkLCB0aGUgcHJvZmlsZXIgaW50ZXJydXB0LiAgT24g d3JpdGUsIGNsZWFyICphbGwqIGludGVycnVwdCBiaXRzLiAqLwo+ICsjIGRlZmluZSBTQ0FMRVJf RElTUFNUQVRfSVJRU0NMCQkJKDEgPDwgMCkKPiArCj4gKyNkZWZpbmUgU0NBTEVSX0RJU1BJRCAg ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKPiArI2RlZmluZSBTQ0FMRVJfRElT UEVDVFJMICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYwo+ICsjZGVmaW5lIFNDQUxF Ul9ESVNQUFJPRiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCj4gKyNkZWZpbmUg U0NBTEVSX0RJU1BESVRIRVIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKPiArI2Rl ZmluZSBTQ0FMRVJfRElTUEVPTE4gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAo+ ICsjZGVmaW5lIFNDQUxFUl9ESVNQTElTVDAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAw MDIwCj4gKyNkZWZpbmUgU0NBTEVSX0RJU1BMSVNUMSAgICAgICAgICAgICAgICAgICAgICAgIDB4 MDAwMDAwMjQKPiArI2RlZmluZSBTQ0FMRVJfRElTUExJU1QyICAgICAgICAgICAgICAgICAgICAg ICAgMHgwMDAwMDAyOAo+ICsjZGVmaW5lIFNDQUxFUl9ESVNQTFNUQVQgICAgICAgICAgICAgICAg ICAgICAgICAweDAwMDAwMDJjCj4gKyNkZWZpbmUgU0NBTEVSX0RJU1BMSVNUWCh4KQkJCShTQ0FM RVJfRElTUExJU1QwICsJXAo+ICsJCQkJCQkgKHgpICogKFNDQUxFUl9ESVNQTElTVDEgLSBcCj4g KwkJCQkJCQlTQ0FMRVJfRElTUExJU1QwKSkKPiArCj4gKyNkZWZpbmUgU0NBTEVSX0RJU1BMQUNU MCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKPiArI2RlZmluZSBTQ0FMRVJfRElT UExBQ1QxICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAo+ICsjZGVmaW5lIFNDQUxF Ul9ESVNQTEFDVDIgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4Cj4gKyNkZWZpbmUg U0NBTEVSX0RJU1BDVFJMMCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKPiArIyBk ZWZpbmUgU0NBTEVSX0RJU1BDVFJMWF9FTkFCTEUJCSgxIDw8IDMxKQo+ICsjIGRlZmluZSBTQ0FM RVJfRElTUENUUkxYX1JFU0VUCQkJKDEgPDwgMzApCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RS TFhfV0lEVEhfTUFTSwkJVkM0X01BU0soMjMsIDEyKQo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUENU UkxYX1dJRFRIX1NISUZUCQkxMgo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUENUUkxYX0hFSUdIVF9N QVNLCQlWQzRfTUFTSygxMSwgMCkKPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BDVFJMWF9IRUlHSFRf U0hJRlQJCTAKPiArCj4gKyNkZWZpbmUgU0NBTEVSX0RJU1BCS0dORDAgICAgICAgICAgICAgICAg ICAgICAgIDB4MDAwMDAwNDQKPiArI2RlZmluZSBTQ0FMRVJfRElTUFNUQVQwICAgICAgICAgICAg ICAgICAgICAgICAgMHgwMDAwMDA0OAo+ICsjZGVmaW5lIFNDQUxFUl9ESVNQQkFTRTAgICAgICAg ICAgICAgICAgICAgICAgICAweDAwMDAwMDRjCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVFhf TU9ERV9NQVNLCQlWQzRfTUFTSygzMSwgMzApCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVFhf TU9ERV9TSElGVAkJMzAKPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUWF9NT0RFX0RJU0FCTEVE CQkwCj4gKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVFhfTU9ERV9JTklUCQkxCj4gKyMgZGVmaW5l IFNDQUxFUl9ESVNQU1RBVFhfTU9ERV9SVU4JCTIKPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFU WF9NT0RFX0VPRgkJMwo+ICsjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRYX0ZVTEwJCQkoMSA8PCAy OSkKPiArIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUWF9FTVBUWQkJCSgxIDw8IDI4KQo+ICsjZGVm aW5lIFNDQUxFUl9ESVNQQ1RSTDEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUwCj4g KyNkZWZpbmUgU0NBTEVSX0RJU1BCS0dORDEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAw NTQKPiArI2RlZmluZSBTQ0FMRVJfRElTUFNUQVQxICAgICAgICAgICAgICAgICAgICAgICAgMHgw MDAwMDA1OAo+ICsjZGVmaW5lIFNDQUxFUl9ESVNQU1RBVFgoeCkJCQkoU0NBTEVSX0RJU1BTVEFU MCArICAgICAgICBcCj4gKwkJCQkJCSAoeCkgKiAoU0NBTEVSX0RJU1BTVEFUMSAtIFwKPiArCQkJ CQkJCVNDQUxFUl9ESVNQU1RBVDApKQo+ICsjZGVmaW5lIFNDQUxFUl9ESVNQQkFTRTEgICAgICAg ICAgICAgICAgICAgICAgICAweDAwMDAwMDVjCj4gKyNkZWZpbmUgU0NBTEVSX0RJU1BDVFJMMiAg ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKPiArI2RlZmluZSBTQ0FMRVJfRElTUENU UkxYKHgpCQkJKFNDQUxFUl9ESVNQQ1RSTDAgKyAgICAgICAgXAo+ICsJCQkJCQkgKHgpICogKFND QUxFUl9ESVNQQ1RSTDEgLSBcCj4gKwkJCQkJCQlTQ0FMRVJfRElTUENUUkwwKSkKPiArI2RlZmlu ZSBTQ0FMRVJfRElTUEJLR05EMiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NAo+ICsj ZGVmaW5lIFNDQUxFUl9ESVNQU1RBVDIgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY4 Cj4gKyNkZWZpbmUgU0NBTEVSX0RJU1BCQVNFMiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAw MDAwNmMKPiArI2RlZmluZSBTQ0FMRVJfRElTUEFMUEhBMiAgICAgICAgICAgICAgICAgICAgICAg MHgwMDAwMDA3MAo+ICsjZGVmaW5lIFNDQUxFUl9HQU1BRERSICAgICAgICAgICAgICAgICAgICAg ICAgICAweDAwMDAwMDc4Cj4gKyNkZWZpbmUgU0NBTEVSX0dBTURBVEEgICAgICAgICAgICAgICAg ICAgICAgICAgIDB4MDAwMDAwZTAKPiArI2RlZmluZSBTQ0FMRVJfRExJU1RfU1RBUlQgICAgICAg ICAgICAgICAgICAgICAgMHgwMDAwMjAwMAo+ICsjZGVmaW5lIFNDQUxFUl9ETElTVF9TSVpFICAg ICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCj4gKwo+ICsjZGVmaW5lIFZDNF9IRE1JX0NP UkVfUkVWCQkJMHgwMDAKPiArCj4gKyNkZWZpbmUgVkM0X0hETUlfU1dfUkVTRVRfQ09OVFJPTAkJ MHgwMDQKPiArIyBkZWZpbmUgVkM0X0hETUlfU1dfUkVTRVRfRk9STUFUX0RFVEVDVAkoMSA8PCAx KQo+ICsjIGRlZmluZSBWQzRfSERNSV9TV19SRVNFVF9IRE1JCQkJKDEgPDwgMCkKPiArCj4gKyNk ZWZpbmUgVkM0X0hETUlfSE9UUExVR19JTlQJCQkweDAwOAo+ICsKPiArI2RlZmluZSBWQzRfSERN SV9IT1RQTFVHCQkJMHgwMGMKPiArIyBkZWZpbmUgVkM0X0hETUlfSE9UUExVR19DT05ORUNURUQJ CSgxIDw8IDApCj4gKwo+ICsjZGVmaW5lIFZDNF9IRE1JX1JBTV9QQUNLRVRfQ09ORklHCQkweDBh MAo+ICsjIGRlZmluZSBWQzRfSERNSV9SQU1fUEFDS0VUX0VOQUJMRQkJKDEgPDwgMTYpCj4gKwo+ ICsjZGVmaW5lIFZDNF9IRE1JX0hPUlpBCQkJCTB4MGM0Cj4gKyMgZGVmaW5lIFZDNF9IRE1JX0hP UlpBX1ZQT1MJCQkoMSA8PCAxNCkKPiArIyBkZWZpbmUgVkM0X0hETUlfSE9SWkFfSFBPUwkJCSgx IDw8IDEzKQo+ICsvKiBIb3Jpem9udGFsIGFjdGl2ZSBwaXhlbHMgKGhkaXNwbGF5KS4gKi8KPiAr IyBkZWZpbmUgVkM0X0hETUlfSE9SWkFfSEFQX01BU0sJCVZDNF9NQVNLKDEyLCAwKQo+ICsjIGRl ZmluZSBWQzRfSERNSV9IT1JaQV9IQVBfU0hJRlQJCTAKPiArCj4gKyNkZWZpbmUgVkM0X0hETUlf SE9SWkIJCQkJMHgwYzgKPiArLyogSG9yaXpvbnRhbCBwYWNrIHBvcmNoIChodG90YWwgLSBoc3lu Y19lbmQpLiAqLwo+ICsjIGRlZmluZSBWQzRfSERNSV9IT1JaQl9IQlBfTUFTSwkJVkM0X01BU0so MjksIDIwKQo+ICsjIGRlZmluZSBWQzRfSERNSV9IT1JaQl9IQlBfU0hJRlQJCTIwCj4gKy8qIEhv cml6b250YWwgc3luYyBwdWxzZSAoaHN5bmNfZW5kIC0gaHN5bmNfc3RhcnQpLiAqLwo+ICsjIGRl ZmluZSBWQzRfSERNSV9IT1JaQl9IU1BfTUFTSwkJVkM0X01BU0soMTksIDEwKQo+ICsjIGRlZmlu ZSBWQzRfSERNSV9IT1JaQl9IU1BfU0hJRlQJCTEwCj4gKy8qIEhvcml6b250YWwgZnJvbnQgcG9y Y2ggKGhzeW5jX3N0YXJ0IC0gaGRpc3BsYXkpLiAqLwo+ICsjIGRlZmluZSBWQzRfSERNSV9IT1Ja Ql9IRlBfTUFTSwkJVkM0X01BU0soOSwgMCkKPiArIyBkZWZpbmUgVkM0X0hETUlfSE9SWkJfSEZQ X1NISUZUCQkwCj4gKwo+ICsjZGVmaW5lIFZDNF9IRE1JX0ZJRk9fQ1RMCQkJMHgwNWMKPiArIyBk ZWZpbmUgVkM0X0hETUlfRklGT19DVExfUkVDRU5URVJfRE9ORQkoMSA8PCAxNCkKPiArIyBkZWZp bmUgVkM0X0hETUlfRklGT19DVExfVVNFX0VNUFRZCQkoMSA8PCAxMykKPiArIyBkZWZpbmUgVkM0 X0hETUlfRklGT19DVExfT05fVkIJCSgxIDw8IDcpCj4gKyMgZGVmaW5lIFZDNF9IRE1JX0ZJRk9f Q1RMX1JFQ0VOVEVSCQkoMSA8PCA2KQo+ICsjIGRlZmluZSBWQzRfSERNSV9GSUZPX0NUTF9GSUZP X1JFU0VUCQkoMSA8PCA1KQo+ICsjIGRlZmluZSBWQzRfSERNSV9GSUZPX0NUTF9VU0VfUExMX0xP Q0sJCSgxIDw8IDQpCj4gKyMgZGVmaW5lIFZDNF9IRE1JX0ZJRk9fQ1RMX0lOVl9DTEtfWEZSCQko MSA8PCAzKQo+ICsjIGRlZmluZSBWQzRfSERNSV9GSUZPX0NUTF9DQVBUVVJFX1BUUgkJKDEgPDwg MikKPiArIyBkZWZpbmUgVkM0X0hETUlfRklGT19DVExfVVNFX0ZVTEwJCSgxIDw8IDEpCj4gKyMg ZGVmaW5lIFZDNF9IRE1JX0ZJRk9fQ1RMX01BU1RFUl9TTEFWRV9OCSgxIDw8IDApCj4gKyMgZGVm aW5lIFZDNF9IRE1JX0ZJRk9fVkFMSURfV1JJVEVfTUFTSwkJMHhlZmZmCj4gKwo+ICsjZGVmaW5l IFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MCQkweDBjMAo+ICsjIGRlZmluZSBWQzRfSERNSV9T Q0hFRFVMRVJfQ09OVFJPTF9NQU5VQUxfRk9STUFUICgxIDw8IDE1KQo+ICsjIGRlZmluZSBWQzRf SERNSV9TQ0hFRFVMRVJfQ09OVFJPTF9JR05PUkVfVlNZTkNfUFJFRElDVFMgKDEgPDwgNSkKPiAr IyBkZWZpbmUgVkM0X0hETUlfU0NIRURVTEVSX0NPTlRST0xfVkVSVF9BTFdBWVNfS0VFUE9VVAko MSA8PCAzKQo+ICsjIGRlZmluZSBWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTF9IRE1JX0FDVElW RQkoMSA8PCAxKQo+ICsjIGRlZmluZSBWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTF9NT0RFX0hE TUkJKDEgPDwgMCkKPiArCj4gKyNkZWZpbmUgVkM0X0hETUlfVkVSVEEwCQkJCTB4MGNjCj4gKyNk ZWZpbmUgVkM0X0hETUlfVkVSVEExCQkJCTB4MGQ0Cj4gKy8qIFZlcnRpY2FsIHN5bmMgcHVsc2Ug KHZzeW5jX2VuZCAtIHZzeW5jX3N0YXJ0KS4gKi8KPiArIyBkZWZpbmUgVkM0X0hETUlfVkVSVEFf VlNQX01BU0sJCVZDNF9NQVNLKDI0LCAyMCkKPiArIyBkZWZpbmUgVkM0X0hETUlfVkVSVEFfVlNQ X1NISUZUCQkyMAo+ICsvKiBWZXJ0aWNhbCBmcm9udCBwb3JjaCAodnN5bmNfc3RhcnQgLSB2ZGlz cGxheSkuICovCj4gKyMgZGVmaW5lIFZDNF9IRE1JX1ZFUlRBX1ZGUF9NQVNLCQlWQzRfTUFTSygx OSwgMTMpCj4gKyMgZGVmaW5lIFZDNF9IRE1JX1ZFUlRBX1ZGUF9TSElGVAkJMTMKPiArLyogVmVy dGljYWwgYWN0aXZlIGxpbmVzICh2ZGlzcGxheSkuICovCj4gKyMgZGVmaW5lIFZDNF9IRE1JX1ZF UlRBX1ZBTF9NQVNLCQlWQzRfTUFTSygxMiwgMCkKPiArIyBkZWZpbmUgVkM0X0hETUlfVkVSVEFf VkFMX1NISUZUCQkwCj4gKwo+ICsjZGVmaW5lIFZDNF9IRE1JX1ZFUlRCMAkJCQkweDBkMAo+ICsj ZGVmaW5lIFZDNF9IRE1JX1ZFUlRCMQkJCQkweDBkOAo+ICsvKiBWZXJ0aWNhbCBzeW5jIHB1bHNl IG9mZnNldCAoZm9yIGludGVybGFjZWQpICovCj4gKyMgZGVmaW5lIFZDNF9IRE1JX1ZFUlRCX1ZT UE9fTUFTSwkJVkM0X01BU0soMjEsIDkpCj4gKyMgZGVmaW5lIFZDNF9IRE1JX1ZFUlRCX1ZTUE9f U0hJRlQJCTkKPiArLyogVmVydGljYWwgcGFjayBwb3JjaCAodnRvdGFsIC0gdnN5bmNfZW5kKS4g Ki8KPiArIyBkZWZpbmUgVkM0X0hETUlfVkVSVEJfVkJQX01BU0sJCVZDNF9NQVNLKDgsIDApCj4g KyMgZGVmaW5lIFZDNF9IRE1JX1ZFUlRCX1ZCUF9TSElGVAkJMAo+ICsKPiArI2RlZmluZSBWQzRf SERNSV9UWF9QSFlfUkVTRVRfQ1RMCQkweDJjMAo+ICsKPiArI2RlZmluZSBWQzRfSERfTV9DVEwJ CQkJMHgwMGMKPiArIyBkZWZpbmUgVkM0X0hEX01fU1dfUlNUCQkJKDEgPDwgMikKPiArIyBkZWZp bmUgVkM0X0hEX01fRU5BQkxFCQkJKDEgPDwgMCkKPiArCj4gKyNkZWZpbmUgVkM0X0hEX01BSV9D VEwJCQkJMHgwMTQKPiArCj4gKyNkZWZpbmUgVkM0X0hEX1ZJRF9DVEwJCQkJMHgwMzgKPiArIyBk ZWZpbmUgVkM0X0hEX1ZJRF9DVExfRU5BQkxFCQkJKDEgPDwgMzEpCj4gKyMgZGVmaW5lIFZDNF9I RF9WSURfQ1RMX1VOREVSRkxPV19FTkFCTEUJKDEgPDwgMzApCj4gKyMgZGVmaW5lIFZDNF9IRF9W SURfQ1RMX0ZSQU1FX0NPVU5URVJfUkVTRVQJKDEgPDwgMjkpCj4gKyMgZGVmaW5lIFZDNF9IRF9W SURfQ1RMX1ZTWU5DX0xPVwkJKDEgPDwgMjgpCj4gKyMgZGVmaW5lIFZDNF9IRF9WSURfQ1RMX0hT WU5DX0xPVwkJKDEgPDwgMjcpCj4gKwo+ICsjZGVmaW5lIFZDNF9IRF9DU0NfQ1RMCQkJCTB4MDQw Cj4gKyMgZGVmaW5lIFZDNF9IRF9DU0NfQ1RMX09SREVSX01BU0sJCVZDNF9NQVNLKDcsIDUpCj4g KyMgZGVmaW5lIFZDNF9IRF9DU0NfQ1RMX09SREVSX1NISUZUCQk1Cj4gKyMgZGVmaW5lIFZDNF9I RF9DU0NfQ1RMX09SREVSX1JHQgkJMAo+ICsjIGRlZmluZSBWQzRfSERfQ1NDX0NUTF9PUkRFUl9C R1IJCTEKPiArIyBkZWZpbmUgVkM0X0hEX0NTQ19DVExfT1JERVJfQlJHCQkyCj4gKyMgZGVmaW5l IFZDNF9IRF9DU0NfQ1RMX09SREVSX0dSQgkJMwo+ICsjIGRlZmluZSBWQzRfSERfQ1NDX0NUTF9P UkRFUl9HQlIJCTQKPiArIyBkZWZpbmUgVkM0X0hEX0NTQ19DVExfT1JERVJfUkJHCQk1Cj4gKyMg ZGVmaW5lIFZDNF9IRF9DU0NfQ1RMX1BBRE1TQgkJCSgxIDw8IDQpCj4gKyMgZGVmaW5lIFZDNF9I RF9DU0NfQ1RMX01PREVfTUFTSwkJVkM0X01BU0soMywgMikKPiArIyBkZWZpbmUgVkM0X0hEX0NT Q19DVExfTU9ERV9TSElGVAkJMgo+ICsjIGRlZmluZSBWQzRfSERfQ1NDX0NUTF9NT0RFX1JHQl9U T19TRF9ZUFJQQgkwCj4gKyMgZGVmaW5lIFZDNF9IRF9DU0NfQ1RMX01PREVfUkdCX1RPX0hEX1lQ UlBCCTEKPiArIyBkZWZpbmUgVkM0X0hEX0NTQ19DVExfTU9ERV9DVVNUT00JCTIKPiArIyBkZWZp bmUgVkM0X0hEX0NTQ19DVExfUkdCMllDQwkJCSgxIDw8IDEpCj4gKyMgZGVmaW5lIFZDNF9IRF9D U0NfQ1RMX0VOQUJMRQkJCSgxIDw8IDApCj4gKwo+ICsjZGVmaW5lIFZDNF9IRF9GUkFNRV9DT1VO VAkJCTB4MDY4Cj4gKwo+ICsvKiBIVlMgZGlzcGxheSBsaXN0IGluZm9ybWF0aW9uLiAqLwo+ICsj ZGVmaW5lIEhWU19CT09UTE9BREVSX0RMSVNUX0VORCAgICAgICAgICAgICAgICAzMgo+ICsKPiAr ZW51bSBodnNfcGl4ZWxfZm9ybWF0IHsKPiArCS8qIDhicHAgKi8KPiArCUhWU19QSVhFTF9GT1JN QVRfUkdCMzMyID0gMCwKPiArCS8qIDE2YnBwICovCj4gKwlIVlNfUElYRUxfRk9STUFUX1JHQkE0 NDQ0ID0gMSwKPiArCUhWU19QSVhFTF9GT1JNQVRfUkdCNTU1ID0gMiwKPiArCUhWU19QSVhFTF9G T1JNQVRfUkdCQTU1NTEgPSAzLAo+ICsJSFZTX1BJWEVMX0ZPUk1BVF9SR0I1NjUgPSA0LAo+ICsJ LyogMjRicHAgKi8KPiArCUhWU19QSVhFTF9GT1JNQVRfUkdCODg4ID0gNSwKPiArCUhWU19QSVhF TF9GT1JNQVRfUkdCQTY2NjYgPSA2LAo+ICsJLyogMzJicHAgKi8KPiArCUhWU19QSVhFTF9GT1JN QVRfUkdCQTg4ODggPSA3Cj4gK307Cj4gKwo+ICsvKiBOb3RlOiB0aGUgTFNCIGlzIHRoZSByaWdo dG1vc3QgY2hhcmFjdGVyIHNob3duLiAgT25seSB2YWxpZCBmb3IKPiArICogSFZTX1BJWEVMX0ZP Uk1BVF9SR0I4ODg4LCBub3QgUkdCODg4Lgo+ICsgKi8KPiArI2RlZmluZSBIVlNfUElYRUxfT1JE RVJfUkdCQQkJCTAKPiArI2RlZmluZSBIVlNfUElYRUxfT1JERVJfQkdSQQkJCTEKPiArI2RlZmlu ZSBIVlNfUElYRUxfT1JERVJfQVJHQgkJCTIKPiArI2RlZmluZSBIVlNfUElYRUxfT1JERVJfQUJH UgkJCTMKPiArCj4gKyNkZWZpbmUgSFZTX1BJWEVMX09SREVSX1hCUkcJCQkwCj4gKyNkZWZpbmUg SFZTX1BJWEVMX09SREVSX1hSQkcJCQkxCj4gKyNkZWZpbmUgSFZTX1BJWEVMX09SREVSX1hSR0IJ CQkyCj4gKyNkZWZpbmUgSFZTX1BJWEVMX09SREVSX1hCR1IJCQkzCj4gKwo+ICsjZGVmaW5lIEhW U19QSVhFTF9PUkRFUl9YWUNCQ1IJCQkwCj4gKyNkZWZpbmUgSFZTX1BJWEVMX09SREVSX1hZQ1JD QgkJCTEKPiArI2RlZmluZSBIVlNfUElYRUxfT1JERVJfWVhDQkNSCQkJMgo+ICsjZGVmaW5lIEhW U19QSVhFTF9PUkRFUl9ZWENSQ0IJCQkzCj4gKwo+ICsjZGVmaW5lIFNDQUxFUl9DVEwwX0VORAkJ CQkoMSA8PCAzMSkKPiArI2RlZmluZSBTQ0FMRVJfQ1RMMF9WQUxJRAkJCSgxIDw8IDMwKQo+ICsK PiArI2RlZmluZSBTQ0FMRVJfQ1RMMF9TSVpFX01BU0sJCQlWQzRfTUFTSygyOSwgMjQpCj4gKyNk ZWZpbmUgU0NBTEVSX0NUTDBfU0laRV9TSElGVAkJCTI0Cj4gKwo+ICsjZGVmaW5lIFNDQUxFUl9D VEwwX0hGTElQICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNikKPiArI2RlZmluZSBTQ0FM RVJfQ1RMMF9WRkxJUCAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCj4gKwo+ICsjZGVm aW5lIFNDQUxFUl9DVEwwX09SREVSX01BU0sJCQlWQzRfTUFTSygxNCwgMTMpCj4gKyNkZWZpbmUg U0NBTEVSX0NUTDBfT1JERVJfU0hJRlQJCQkxMwo+ICsKPiArLyogU2V0IHRvIGluZGljYXRlIG5v IHNjYWxpbmcuICovCj4gKyNkZWZpbmUgU0NBTEVSX0NUTDBfVU5JVFkJCQkoMSA8PCA0KQo+ICsK PiArI2RlZmluZSBTQ0FMRVJfQ1RMMF9QSVhFTF9GT1JNQVRfTUFTSwkJVkM0X01BU0soMywgMCkK PiArI2RlZmluZSBTQ0FMRVJfQ1RMMF9QSVhFTF9GT1JNQVRfU0hJRlQJCTAKPiArCj4gKyNkZWZp bmUgU0NBTEVSX1BPUzBfRklYRURfQUxQSEFfTUFTSwkJVkM0X01BU0soMzEsIDI0KQo+ICsjZGVm aW5lIFNDQUxFUl9QT1MwX0ZJWEVEX0FMUEhBX1NISUZUCQkyNAo+ICsKPiArI2RlZmluZSBTQ0FM RVJfUE9TMF9TVEFSVF9ZX01BU0sJCVZDNF9NQVNLKDIzLCAxMikKPiArI2RlZmluZSBTQ0FMRVJf UE9TMF9TVEFSVF9ZX1NISUZUCQkxMgo+ICsKPiArI2RlZmluZSBTQ0FMRVJfUE9TMF9TVEFSVF9Y X01BU0sJCVZDNF9NQVNLKDExLCAwKQo+ICsjZGVmaW5lIFNDQUxFUl9QT1MwX1NUQVJUX1hfU0hJ RlQJCTAKPiArCj4gKyNkZWZpbmUgU0NBTEVSX1BPUzJfQUxQSEFfTU9ERV9NQVNLCQlWQzRfTUFT SygzMSwgMzApCj4gKyNkZWZpbmUgU0NBTEVSX1BPUzJfQUxQSEFfTU9ERV9TSElGVAkJMzAKPiAr I2RlZmluZSBTQ0FMRVJfUE9TMl9BTFBIQV9NT0RFX1BJUEVMSU5FCQkwCj4gKyNkZWZpbmUgU0NB TEVSX1BPUzJfQUxQSEFfTU9ERV9GSVhFRAkJMQo+ICsjZGVmaW5lIFNDQUxFUl9QT1MyX0FMUEhB X01PREVfRklYRURfTk9OWkVSTwkyCj4gKyNkZWZpbmUgU0NBTEVSX1BPUzJfQUxQSEFfTU9ERV9G SVhFRF9PVkVSXzB4MDcJMwo+ICsKPiArI2RlZmluZSBTQ0FMRVJfUE9TMl9IRUlHSFRfTUFTSwkJ CVZDNF9NQVNLKDI3LCAxNikKPiArI2RlZmluZSBTQ0FMRVJfUE9TMl9IRUlHSFRfU0hJRlQJCTE2 Cj4gKwo+ICsjZGVmaW5lIFNDQUxFUl9QT1MyX1dJRFRIX01BU0sJCQlWQzRfTUFTSygxMSwgMCkK PiArI2RlZmluZSBTQ0FMRVJfUE9TMl9XSURUSF9TSElGVAkJCTAKPiArCj4gKyNkZWZpbmUgU0NB TEVSX1NSQ19QSVRDSF9NQVNLCQkJVkM0X01BU0soMTUsIDApCj4gKyNkZWZpbmUgU0NBTEVSX1NS Q19QSVRDSF9TSElGVAkJCTAKPiAtLSAKPiAyLjEuNAo+IAo+IF9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+IGRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2Fy ZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxp bmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK