From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bruno =?UTF-8?B?UHLDqW1vbnQ=?= Subject: [RFC Patch 2/4] mfd: AXP20x: Add power supply sub-driver Date: Mon, 20 Oct 2014 22:33:20 +0200 Message-ID: <20141020223320.2b4ecba9@neptune.home> References: <20141020215954.7f1d5502@neptune.home> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20141020215954.7f1d5502@neptune.home> References: <20141020221959.2f312906@neptune.home> In-Reply-To: <20141020221959.2f312906@neptune.home> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: linux-sunxi@googlegroups.com, maxime.ripard@free-electrons.com, linux-arm-kernel@lists.infradead.org, lee.jones@linaro.org, Sebastian Reichel , Dmitry Eremin-Solenikov , David Woodhouse , linux-pm@vger.kernel.org Cc: Olliver Schinagl List-Id: linux-pm@vger.kernel.org QWRkIGRyaXZlciBmb3IgdGhlIHBvd2VyIHN1cHBseSBmZWF0dXJlcyBvZiBBWFAyMHggUE1JQy4K CkNvdmVyZWQgZmVhdHVyZXM6CiAtIGJhY2t1cCAvIFJUQyBiYXR0ZXJ5CiAtIFZCVVMvT1RHIHBv d2VyIGlucHV0CiAtIEFDIHBvd2VyIGlucHV0CiAtIExJb24gYmF0dGVyeSBjaGFyZ2VyCi0tLQog ZHJpdmVycy9tZmQvYXhwMjB4LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEwNiAr LQogZHJpdmVycy9wb3dlci9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg OSArCiBkcml2ZXJzL3Bvd2VyL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg ICAxICsKIGRyaXZlcnMvcG93ZXIvYXhwMjB4X3Bvd2VyLmMgICAgICAgICAgICAgICAgICAgICB8 IDE1MzAgKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS9saW51eC9tZmQvYXhwMjB4Lmgg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArCiA1IGZpbGVzIGNoYW5nZWQsIDE2NTAgaW5z ZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvcG93 ZXIvYXhwMjB4X3Bvd2VyLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9heHAyMHguYyBiL2Ry aXZlcnMvbWZkL2F4cDIweC5jCmluZGV4IGRlZTY1MzkuLjEzMjI0ODkgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvbWZkL2F4cDIweC5jCisrKyBiL2RyaXZlcnMvbWZkL2F4cDIweC5jCkBAIC0zMSwxMCAr MzEsMTYgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlIGF4cDIweF93cml0ZWFi bGVfcmFuZ2VzW10gPSB7CiAJcmVnbWFwX3JlZ19yYW5nZShBWFAyMFhfREFUQUNBQ0hFKDApLCBB WFAyMFhfSVJRNV9TVEFURSksCiAJcmVnbWFwX3JlZ19yYW5nZShBWFAyMFhfRENEQ19NT0RFLCBB WFAyMFhfRkdfUkVTKSwKKwlyZWdtYXBfcmVnX3JhbmdlKEFYUDIwWF9PQ1YoMCksIEFYUDIwWF9P Q1YoMTUpKSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlIGF4cDIweF92 b2xhdGlsZV9yYW5nZXNbXSA9IHsKKwlyZWdtYXBfcmVnX3JhbmdlKEFYUDIwWF9QV1JfSU5QVVRf U1RBVFVTLCBBWFAyMFhfVVNCX09UR19TVEFUVVMpLAorCXJlZ21hcF9yZWdfcmFuZ2UoQVhQMjBY X0NIUkdfQ1RSTDEsIEFYUDIwWF9DSFJHX0NUUkwyKSwKIAlyZWdtYXBfcmVnX3JhbmdlKEFYUDIw WF9JUlExX0VOLCBBWFAyMFhfSVJRNV9TVEFURSksCisJcmVnbWFwX3JlZ19yYW5nZShBWFAyMFhf QUNJTl9WX0FEQ19ILCBBWFAyMFhfSVBTT1VUX1ZfSElHSF9MKSwKKwlyZWdtYXBfcmVnX3Jhbmdl KEFYUDIwWF9HUElPMjBfU1MsIEFYUDIwWF9HUElPM19DVFJMKSwKKwlyZWdtYXBfcmVnX3Jhbmdl KEFYUDIwWF9GR19SRVMsIEFYUDIwWF9SRENfTCksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0 IHJlZ21hcF9hY2Nlc3NfdGFibGUgYXhwMjB4X3dyaXRlYWJsZV90YWJsZSA9IHsKQEAgLTYxLDEy ICs2NywxMDYgQEAgc3RhdGljIHN0cnVjdCByZXNvdXJjZSBheHAyMHhfcGVrX3Jlc291cmNlc1td ID0gewogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGF4cDIweF9wb3dlcl9yZXNv dXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gIkFDSU5fT1ZFUl9WIiwKKwkJLnN0YXJ0CT0gQVhQ MjBYX0lSUV9BQ0lOX09WRVJfViwKKwkJLmVuZAk9IEFYUDIwWF9JUlFfQUNJTl9PVkVSX1YsCisJ CS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sIHsKKwkJLm5hbWUJPSAiQUNJTl9QTFVHSU4i LAorCQkuc3RhcnQJPSBBWFAyMFhfSVJRX0FDSU5fUExVR0lOLAorCQkuZW5kCT0gQVhQMjBYX0lS UV9BQ0lOX1BMVUdJTiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwgeworCQkubmFt ZQk9ICJBQ0lOX1JFTU9WQUwiLAorCQkuc3RhcnQJPSBBWFAyMFhfSVJRX0FDSU5fUkVNT1ZBTCwK KwkJLmVuZAk9IEFYUDIwWF9JUlFfQUNJTl9SRU1PVkFMLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNF X0lSUSwKKwl9LCB7CisJCS5uYW1lCT0gIlZCVVNfT1ZFUl9WIiwKKwkJLnN0YXJ0CT0gQVhQMjBY X0lSUV9WQlVTX09WRVJfViwKKwkJLmVuZAk9IEFYUDIwWF9JUlFfVkJVU19PVkVSX1YsCisJCS5m bGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sIHsKKwkJLm5hbWUJPSAiVkJVU19QTFVHSU4iLAor CQkuc3RhcnQJPSBBWFAyMFhfSVJRX1ZCVVNfUExVR0lOLAorCQkuZW5kCT0gQVhQMjBYX0lSUV9W QlVTX1BMVUdJTiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwgeworCQkubmFtZQk9 ICJWQlVTX1JFTU9WQUwiLAorCQkuc3RhcnQJPSBBWFAyMFhfSVJRX1ZCVVNfUkVNT1ZBTCwKKwkJ LmVuZAk9IEFYUDIwWF9JUlFfVkJVU19SRU1PVkFMLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lS USwKKwl9LCB7CisJCS5uYW1lCT0gIlZCVVNfVl9MT1ciLAorCQkuc3RhcnQJPSBBWFAyMFhfSVJR X1ZCVVNfVl9MT1csCisJCS5lbmQJPSBBWFAyMFhfSVJRX1ZCVVNfVl9MT1csCisJCS5mbGFncwk9 IElPUkVTT1VSQ0VfSVJRLAorCX0sIHsKKwkJLm5hbWUJPSAiQkFUVF9QTFVHSU4iLAorCQkuc3Rh cnQJPSBBWFAyMFhfSVJRX0JBVFRfUExVR0lOLAorCQkuZW5kCT0gQVhQMjBYX0lSUV9CQVRUX1BM VUdJTiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwgeworCQkubmFtZQk9ICJCQVRU X1JFTU9WQUwiLAorCQkuc3RhcnQJPSBBWFAyMFhfSVJRX0JBVFRfUkVNT1ZBTCwKKwkJLmVuZAk9 IEFYUDIwWF9JUlFfQkFUVF9SRU1PVkFMLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9 LCB7CisJCS5uYW1lCT0gIkJBVFRfQUNUSVZBVEUiLAorCQkuc3RhcnQJPSBBWFAyMFhfSVJRX0JB VFRfRU5UX0FDVF9NT0RFLAorCQkuZW5kCT0gQVhQMjBYX0lSUV9CQVRUX0VOVF9BQ1RfTU9ERSwK KwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwgeworCQkubmFtZQk9ICJCQVRUX0FDVElW QVRFRCIsCisJCS5zdGFydAk9IEFYUDIwWF9JUlFfQkFUVF9FWElUX0FDVF9NT0RFLAorCQkuZW5k CT0gQVhQMjBYX0lSUV9CQVRUX0VYSVRfQUNUX01PREUsCisJCS5mbGFncwk9IElPUkVTT1VSQ0Vf SVJRLAorCX0sIHsKKwkJLm5hbWUJPSAiQkFUVF9DSEFSR0lORyIsCisJCS5zdGFydAk9IEFYUDIw WF9JUlFfQ0hBUkcsCisJCS5lbmQJPSBBWFAyMFhfSVJRX0NIQVJHLAorCQkuZmxhZ3MJPSBJT1JF U09VUkNFX0lSUSwKKwl9LCB7CisJCS5uYW1lCT0gIkJBVFRfQ0hBUkdFRCIsCisJCS5zdGFydAk9 IEFYUDIwWF9JUlFfQ0hBUkdfRE9ORSwKKwkJLmVuZAk9IEFYUDIwWF9JUlFfQ0hBUkdfRE9ORSwK KwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwgeworCQkubmFtZQk9ICJCQVRUX0hPVCIs CisJCS5zdGFydAk9IEFYUDIwWF9JUlFfQkFUVF9URU1QX0hJR0gsCisJCS5lbmQJPSBBWFAyMFhf SVJRX0JBVFRfVEVNUF9ISUdILAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LCB7CisJ CS5uYW1lCT0gIkJBVFRfQ09MRCIsCisJCS5zdGFydAk9IEFYUDIwWF9JUlFfQkFUVF9URU1QX0xP VywKKwkJLmVuZAk9IEFYUDIwWF9JUlFfQkFUVF9URU1QX0xPVywKKwkJLmZsYWdzCT0gSU9SRVNP VVJDRV9JUlEsCisJfSwgeworCQkubmFtZQk9ICJCQVRUX0NIR19DVVJSX0xPVyIsCisJCS5zdGFy dAk9IEFYUDIwWF9JUlFfQ0hBUkdfSV9MT1csCisJCS5lbmQJPSBBWFAyMFhfSVJRX0NIQVJHX0lf TE9XLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LCB7CisJCS5uYW1lCT0gIlBPV0VS X0xPV19XQVJOIiwKKwkJLnN0YXJ0CT0gQVhQMjBYX0lSUV9MT1dfUFdSX0xWTDEsCisJCS5lbmQJ PSBBWFAyMFhfSVJRX0xPV19QV1JfTFZMMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJ fSwgeworCQkubmFtZQk9ICJQT1dFUl9MT1dfQ1JJVCIsCisJCS5zdGFydAk9IEFYUDIwWF9JUlFf TE9XX1BXUl9MVkwyLAorCQkuZW5kCT0gQVhQMjBYX0lSUV9MT1dfUFdSX0xWTDIsCisJCS5mbGFn cwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21h cF9jb25maWcgYXhwMjB4X3JlZ21hcF9jb25maWcgPSB7CiAJLnJlZ19iaXRzCT0gOCwKIAkudmFs X2JpdHMJPSA4LAogCS53cl90YWJsZQk9ICZheHAyMHhfd3JpdGVhYmxlX3RhYmxlLAogCS52b2xh dGlsZV90YWJsZQk9ICZheHAyMHhfdm9sYXRpbGVfdGFibGUsCi0JLm1heF9yZWdpc3Rlcgk9IEFY UDIwWF9GR19SRVMsCisJLm1heF9yZWdpc3Rlcgk9IEFYUDIwWF9PQ1YoMTUpLAogCS5jYWNoZV90 eXBlCT0gUkVHQ0FDSEVfUkJUUkVFLAogfTsKIApAQCAtMTU4LDYgKzI1OCwxMCBAQCBzdGF0aWMg c3RydWN0IG1mZF9jZWxsIGF4cDIweF9jZWxsc1tdID0gewogCQkubmFtZQkJCT0gImF4cDIweC1y ZWd1bGF0b3IiLAogCQkucGFyZW50X3N1cHBsaWVzCT0gYXhwMjB4X3N1cHBsaWVzLAogCQkubnVt X3BhcmVudF9zdXBwbGllcwk9IEFSUkFZX1NJWkUoYXhwMjB4X3N1cHBsaWVzKSwKKwl9LCB7CisJ CS5uYW1lCQkJPSAiYXhwMjB4LXBvd2VyIiwKKwkJLm51bV9yZXNvdXJjZXMJCT0gQVJSQVlfU0la RShheHAyMHhfcG93ZXJfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcwkJPSBheHAyMHhfcG93ZXJf cmVzb3VyY2VzLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL0tjb25maWcg Yi9kcml2ZXJzL3Bvd2VyL0tjb25maWcKaW5kZXggNzNjZmNkZi4uMjA5ZDY3NyAxMDA2NDQKLS0t IGEvZHJpdmVycy9wb3dlci9LY29uZmlnCisrKyBiL2RyaXZlcnMvcG93ZXIvS2NvbmZpZwpAQCAt Mzk2LDYgKzM5NiwxNSBAQCBjb25maWcgQkFUVEVSWV9HT0xERklTSAogCSAgU2F5IFkgdG8gZW5h YmxlIHN1cHBvcnQgZm9yIHRoZSBiYXR0ZXJ5IGFuZCBBQyBwb3dlciBpbiB0aGUKIAkgIEdvbGRm aXNoIGVtdWxhdG9yLgogCitjb25maWcgQVhQMjBYX1BPV0VSCisJdHJpc3RhdGUgIkFYUDIweCBw b3dlciBzdXBwbHkgZHJpdmVyIgorCWRlcGVuZHMgb24gTUZEX0FYUDIwWAorCWhlbHAKKwkgIFRo aXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBwb3dlciBzdXBwbHkgZmVhdHVyZXMg b2YKKwkgIEFYUDIweCBQTUlDLgorCSAgSW5jbHVkZWQgZmVhdHVyZXMgYXJlOiBBQy1wb3dlciwg VVNCLXBvd2VyLCBCYXR0ZXJ5IGNoYXJnZXIKKwkgIChSVEMgYmFja3VwLWJhdHRlcnkgYW5kIExp dGhpdW0gbWFpbiBiZXR0ZXJ5KS4KKwogc291cmNlICJkcml2ZXJzL3Bvd2VyL3Jlc2V0L0tjb25m aWciCiAKIGVuZGlmICMgUE9XRVJfU1VQUExZCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL01h a2VmaWxlIGIvZHJpdmVycy9wb3dlci9NYWtlZmlsZQppbmRleCBkZmE4OTQyLi5hYjIzMjRmIDEw MDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcG93ZXIvTWFr ZWZpbGUKQEAgLTksNiArOSw3IEBAIG9iai0kKENPTkZJR19HRU5FUklDX0FEQ19CQVRURVJZKQkr PSBnZW5lcmljLWFkYy1iYXR0ZXJ5Lm8KIAogb2JqLSQoQ09ORklHX1BEQV9QT1dFUikJCSs9IHBk YV9wb3dlci5vCiBvYmotJChDT05GSUdfQVBNX1BPV0VSKQkJKz0gYXBtX3Bvd2VyLm8KK29iai0k KENPTkZJR19BWFAyMFhfUE9XRVIpCSs9IGF4cDIweF9wb3dlci5vCiBvYmotJChDT05GSUdfTUFY ODkyNV9QT1dFUikJKz0gbWF4ODkyNV9wb3dlci5vCiBvYmotJChDT05GSUdfV004MzFYX0JBQ0tV UCkJKz0gd204MzF4X2JhY2t1cC5vCiBvYmotJChDT05GSUdfV004MzFYX1BPV0VSKQkrPSB3bTgz MXhfcG93ZXIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9heHAyMHhfcG93ZXIuYyBiL2Ry aXZlcnMvcG93ZXIvYXhwMjB4X3Bvd2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uOWQ2YjhiYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcG93ZXIvYXhwMjB4X3Bv d2VyLmMKQEAgLTAsMCArMSwxNTMwIEBACisvKgorICogQUMgcG93ZXIgaW5wdXQgZHJpdmVyIGZv ciBYLVBvd2VycyBBWFAyMHggUE1JQ3MKKyAqCisgKiBDb3B5cmlnaHQgMjAxNCBCcnVubyBQcsOp bW9udCA8Ym9uYm9uc0BsaW51eC12c2VydmVyLm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3Vi amVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQ dWJsaWMgTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rv cnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgv aW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2Uu aD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9w b3dlcl9zdXBwbHkuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51 eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9h eHAyMHguaD4KKworc3RydWN0IGF4cDIweF9wb3dlciB7CisJc3RydWN0IGF4cDIweF9kZXYgKmF4 cDIweDsKKwkvKiBSVEMgLyBCYWNrdXAgYmF0dGVyeSAqLworCXN0cnVjdCBwb3dlcl9zdXBwbHkg YmFja3VwOworCWNoYXIgYmFja3VwX25hbWVbMjRdOworCS8qIEFDSU4gcG93ZXIgc3VwcGx5ICov CisJc3RydWN0IHBvd2VyX3N1cHBseSBhYzsKKwljaGFyIGFjX25hbWVbMjRdOworCS8qIFZCVVMv T1RHIHBvd2VyIHN1cHBseSAqLworCXN0cnVjdCBwb3dlcl9zdXBwbHkgdmJ1czsKKwljaGFyIHZi dXNfbmFtZVsyNF07CisJLyogQmF0dGVyeSBjaGFyZ2VyICovCisJc3RydWN0IHBvd2VyX3N1cHBs eSBiYXR0ZXJ5OworCWNoYXIgYmF0dGVyeV9uYW1lWzI0XTsKKwljaGFyICpiYXR0ZXJ5X3N1cHBs aWVzWzJdOworCS8qIEFYUCBzdGF0ZSB0cmFja2luZyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB3 b3JrOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgdGltZXNwZWMgbmV4dF9jaGVjazsKKwl1 aW50OF90IHN0YXR1czE7CisJdWludDhfdCBzdGF0dXMyOworCXVpbnQ4X3QgdmJ1c21ndDsKKwlp bnQgdnZidXM7CisJaW50IGl2YnVzOworCWludCB2YWM7CisJaW50IGlhYzsKKwlpbnQgdmJhdHQ7 CisJaW50IGliYXR0OworCWludCBwYmF0dDsKKwlpbnQgdGJhdHQ7CisJaW50IHRiYXR0X21pbjsK KwlpbnQgdGJhdHRfbWF4OworCWludCBiYXR0X3BlcmNlbnQ7CisJaW50IGJhdHRfY2FwYWNpdHk7 CisJaW50IGJhdHRfaGVhbHRoOworCWludCBiYXR0X3VzZXJfaW1heDsKK307CisKKy8qIEZpZWxk cyBvZiBBWFAyMFhfUFdSX0lOUFVUX1NUQVRVUyAqLworI2RlZmluZSBBWFAyMFhfUFdSX1NUQVRV U19BQ19QUkVTRU5UICAgICAoMSA8PCA3KQorI2RlZmluZSBBWFAyMFhfUFdSX1NUQVRVU19BQ19B VkFJTEFCTEUgICAoMSA8PCA2KQorI2RlZmluZSBBWFAyMFhfUFdSX1NUQVRVU19WQlVTX1BSRVNF TlQgICAoMSA8PCA1KQorI2RlZmluZSBBWFAyMFhfUFdSX1NUQVRVU19WQlVTX0FWQUlMQUJMRSAo MSA8PCA0KQorI2RlZmluZSBBWFAyMFhfUFdSX1NUQVRVU19WQlVTX1ZIT0xEICAgICAoMSA8PCAz KQorI2RlZmluZSBBWFAyMFhfUFdSX1NUQVRVU19CQVRfQ0hBUkdJTkcgICAoMSA8PCAyKQorI2Rl ZmluZSBBWFAyMFhfUFdSX1NUQVRVU19BQ19WQlVTX1NIT1JUICAoMSA8PCAxKQorI2RlZmluZSBB WFAyMFhfUFdSX1NUQVRVU19BQ19WQlVTX1NFTCAgICAoMSA8PCAwKQorCisvKiBGaWVsZHMgb2Yg QVhQMjBYX1BXUl9PUF9NT0RFICovCisjZGVmaW5lIEFYUDIwWF9QV1JfT1BfT1ZFUlRFTVAgICAg ICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgQVhQMjBYX1BXUl9PUF9DSEFSR0lORyAgICAgICAg ICAgICAoMSA8PCA2KQorI2RlZmluZSBBWFAyMFhfUFdSX09QX0JBVFRfUFJFU0VOVCAgICAgICAg ICgxIDw8IDUpCisjZGVmaW5lIEFYUDIwWF9QV1JfT1BfQkFUVF9BQ1RJVkFURUQgICAgICAgKDEg PDwgMykKKyNkZWZpbmUgQVhQMjBYX1BXUl9PUF9CQVRUX0NIR19DVVJSRU5UX0xPVyAoMSA8PCAy KQorCisvKiBGaWVsZHMgb2YgQVhQMjBYX0FEQ19FTjEgKi8KKyNkZWZpbmUgQVhQMjBYX0FEQ19F TjFfQkFUVF9WICgxIDw8IDcpCisjZGVmaW5lIEFYUDIwWF9BRENfRU4xX0JBVFRfQyAoMSA8PCA2 KQorI2RlZmluZSBBWFAyMFhfQURDX0VOMV9BQ0lOX1YgKDEgPDwgNSkKKyNkZWZpbmUgQVhQMjBY X0FEQ19FTjFfQUNJTl9DICgxIDw8IDQpCisjZGVmaW5lIEFYUDIwWF9BRENfRU4xX1ZCVVNfViAo MSA8PCAzKQorI2RlZmluZSBBWFAyMFhfQURDX0VOMV9WQlVTX0MgKDEgPDwgMikKKyNkZWZpbmUg QVhQMjBYX0FEQ19FTjFfQVBTX1YgICgxIDw8IDEpCisjZGVmaW5lIEFYUDIwWF9BRENfRU4xX1RF TVAgICAoMSA8PCAwKQorCisvKiBGaWVsZHMgb2YgQVhQMjBYX0FEQ19SQVRFICovCisjZGVmaW5l IEFYUDIwWF9BRFJfUkFURV9NQVNLICAgICgzIDw8IDYpCisjZGVmaW5lIEFYUDIwWF9BRFJfUkFU RV8yNUh6ICAgICgwIDw8IDYpCisjZGVmaW5lIEFYUDIwWF9BRFJfUkFURV81MEh6ICAgICgxIDw8 IDYpCisjZGVmaW5lIEFYUDIwWF9BRFJfUkFURV8xMDBIeiAgICgyIDw8IDYpCisjZGVmaW5lIEFY UDIwWF9BRFJfUkFURV8yMDBIeiAgICgzIDw8IDYpCisjZGVmaW5lIEFYUDIwWF9BRFJfVFNfQ1VS Ul9NQVNLICgzIDw8IDQpCisjZGVmaW5lIEFYUDIwWF9BRFJfVFNfQ1VSUl8yMHVBICgwIDw8IDQp CisjZGVmaW5lIEFYUDIwWF9BRFJfVFNfQ1VSUl80MHVBICgxIDw8IDQpCisjZGVmaW5lIEFYUDIw WF9BRFJfVFNfQ1VSUl82MHVBICgyIDw8IDQpCisjZGVmaW5lIEFYUDIwWF9BRFJfVFNfQ1VSUl84 MHVBICgzIDw8IDQpCisjZGVmaW5lIEFYUDIwWF9BRFJfVFNfVU5SRUxBVEVEICgxIDw8IDIpCisj ZGVmaW5lIEFYUDIwWF9BRFJfVFNfV0hFTl9NQVNLICgzIDw8IDApCisjZGVmaW5lIEFYUDIwWF9B RFJfVFNfV0hFTl9PRkYgICgwIDw8IDApCisjZGVmaW5lIEFYUDIwWF9BRFJfVFNfV0hFTl9DSEcg ICgxIDw8IDApCisjZGVmaW5lIEFYUDIwWF9BRFJfVFNfV0hFTl9BREMgICgyIDw8IDApCisjZGVm aW5lIEFYUDIwWF9BRFJfVFNfV0hFTl9PTiAgICgzIDw8IDApCisKKy8qIEZpZWxkcyBvZiBBWFAy MFhfVkJVU19JUFNPVVRfTUdNVCAqLworI2RlZmluZSBBWFAyMFhfVkJVU19WSE9MRF9NQVNLICAg KDcgPDwgMykKKyNkZWZpbmUgQVhQMjBYX1ZCVVNfVkhPTERfbVYoYikgICg0MDAwMDAwICsgKCgo YikgPj4gMykgJiA3KSAqIDEwMDAwMCkKKyNkZWZpbmUgQVhQMjBYX1ZCVVNfQ0xJTUlUX01BU0sg ICgzKQorI2RlZmluZSBBWFAyMFhfVkJVQ19DTElNSVRfOTAwbUEgKDApCisjZGVmaW5lIEFYUDIw WF9WQlVDX0NMSU1JVF81MDBtQSAoMSkKKyNkZWZpbmUgQVhQMjBYX1ZCVUNfQ0xJTUlUXzEwMG1B ICgyKQorI2RlZmluZSBBWFAyMFhfVkJVQ19DTElNSVRfTk9ORSAgKDMpCisKKy8qIEZpZWxkcyBv ZiBBWFAyMFhfT0ZGX0NUUkwgKi8KKyNkZWZpbmUgQVhQMjBYX09GRl9DVFJMX0JBVFRfTU9OICAg ICgxIDw8IDYpCisjZGVmaW5lIEFYUDIwWF9PRkZfQ1RSTF9DSEdMRURfTUFTSyAoMyA8PCA0KQor I2RlZmluZSBBWFAyMFhfT0ZGX0NUUkxfQ0hHTEVEX0hSICAgKDAgPDwgNCkKKyNkZWZpbmUgQVhQ MjBYX09GRl9DVFJMX0NIR0xFRF8xSHogICgxIDw8IDQpCisjZGVmaW5lIEFYUDIwWF9PRkZfQ1RS TF9DSEdMRURfNEh6ICAoMiA8PCA0KQorI2RlZmluZSBBWFAyMFhfT0ZGX0NUUkxfQ0hHTEVEX0xP VyAgKDMgPDwgNCkKKyNkZWZpbmUgQVhQMjBYX09GRl9DVFJMX0NIR0xFRF9GSVggICgxIDw8IDMp CisvKiBGaWVsZHMgb2YgQVhQMjBYX0NIUkdfQ1RSTDEgKi8KKyNkZWZpbmUgQVhQMjBYX0NIUkdf Q1RSTDFfRU5BQkxFICAgICgxIDw8IDcpCisjZGVmaW5lIEFYUDIwWF9DSFJHX0NUUkwxX1RHVF9W T0xUICAoMyA8PCA1KQorI2RlZmluZSBBWFAyMFhfQ0hSR19DVFJMMV9UR1RfNF8xViAgKDAgPDwg NSkKKyNkZWZpbmUgQVhQMjBYX0NIUkdfQ1RSTDFfVEdUXzRfMTVWICgxIDw8IDUpCisjZGVmaW5l IEFYUDIwWF9DSFJHX0NUUkwxX1RHVF80XzJWICAoMiA8PCA1KQorI2RlZmluZSBBWFAyMFhfQ0hS R19DVFJMMV9UR1RfNF8zNlYgKDMgPDwgNSkKKyNkZWZpbmUgQVhQMjBYX0NIUkdfQ1RSTDFfRU5E X0NVUlIgICgxIDw8IDQpCisjZGVmaW5lIEFYUDIwWF9DSFJHX0NUUkwxX1RHVF9DVVJSICAweDBm CisvKiBGaWVsZHMgb2YgQVhQMjBYX0NIUkdfQ1RSTDIgKi8KKyNkZWZpbmUgQVhQMjBYX0NIUkdf Q1RSTDJfUFJFX01BU0sgICgzIDw8IDYpCisjZGVmaW5lIEFYUDIwWF9DSFJHX0NUUkwyX1BSRV80 ME1JTiAoMCA8PCA2KQorI2RlZmluZSBBWFAyMFhfQ0hSR19DVFJMMl9QUkVfNTBNSU4gKDEgPDwg NikKKyNkZWZpbmUgQVhQMjBYX0NIUkdfQ1RSTDJfUFJFXzYwTUlOICgyIDw8IDYpCisjZGVmaW5l IEFYUDIwWF9DSFJHX0NUUkwyX1BSRV83ME1JTiAoMyA8PCA2KQorI2RlZmluZSBBWFAyMFhfQ0hS R19DVFJMMl9DSEdMRURfRkwgKDEgPDwgNCkKKyNkZWZpbmUgQVhQMjBYX0NIUkdfQ1RSTDJfQ0hH X01BU0sgICgwIDw8IDYpCisjZGVmaW5lIEFYUDIwWF9DSFJHX0NUUkwyX0NIR182SCAgICAoMCA8 PCAwKQorI2RlZmluZSBBWFAyMFhfQ0hSR19DVFJMMl9DSEdfOEggICAgKDEgPDwgMCkKKyNkZWZp bmUgQVhQMjBYX0NIUkdfQ1RSTDJfQ0hHXzEwSCAgICgyIDw8IDYpCisjZGVmaW5lIEFYUDIwWF9D SFJHX0NUUkwyX0NIR18xMkggICAoMyA8PCAwKQorLyogRmllbGRzIG9mIEFYUDIwWF9GR19SRVMg Ki8KKyNkZWZpbmUgQVhQMjBYX0ZHX0VOQUJMRSAgICgxIDw8IDcpCisjZGVmaW5lIEFYUDIwWF9G R19QRVJDRU5UICAoMHg3ZikKKworc3RhdGljIGludCBheHAyMHhfcG93ZXJfcG9sbChzdHJ1Y3Qg YXhwMjB4X3Bvd2VyICpkZXZkYXRhLCBpbnQgaW5pdCkKK3sKKwlzdHJ1Y3QgYXhwMjB4X2RldiAq YXhwMjB4ID0gZGV2ZGF0YS0+YXhwMjB4OworCXN0cnVjdCB0aW1lc3BlYyB0czsKKwlpbnQgcmV0 LCBzdGF0dXMxLCBzdGF0dXMyLCB2YnVzbWd0LCBhZGNfY2ZnLCBicGVyY2VudDsKKwl1aW50OF90 IGFkY1sxOV07CisKKwlnZXRuc3RpbWVvZmRheSgmdHMpOworCS8qIG9ubHkgcXVlcnkgaGFyZHdh cmUgaWYgb3VyIGRhdGEgaXMgc3RhbGUgKi8KKwlzcGluX2xvY2soJmRldmRhdGEtPmxvY2spOwor CWlmICghaW5pdCAmJiAhKHRzLnR2X3NlYyA+IGRldmRhdGEtPm5leHRfY2hlY2sudHZfc2VjIHx8 CisJICAgICAgICAgICAgICAgdHMudHZfbnNlYyA+IGRldmRhdGEtPm5leHRfY2hlY2sudHZfc2Vj KSkgeworCQlzcGluX3VubG9jaygmZGV2ZGF0YS0+bG9jayk7CisJCXJldHVybiAwOworCX0KKwlz cGluX3VubG9jaygmZGV2ZGF0YS0+bG9jayk7CisKKwlyZXQgPSByZWdtYXBfcmVhZChheHAyMHgt PnJlZ21hcCwgQVhQMjBYX1BXUl9JTlBVVF9TVEFUVVMsICZzdGF0dXMxKTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OworCXJldCA9IHJlZ21hcF9yZWFkKGF4cDIweC0+cmVnbWFwLCBBWFAyMFhf UFdSX09QX01PREUsICZzdGF0dXMyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0 ID0gcmVnbWFwX3JlYWQoYXhwMjB4LT5yZWdtYXAsIEFYUDIwWF9BRENfUkFURSwgJmFkY19jZmcp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoaW5pdCA9PSAyKSB7CisJCWludCBy ZWcgPSBBWFAyMFhfQURDX0VOMV9WQlVTX1YgfCBBWFAyMFhfQURDX0VOMV9WQlVTX0M7CisKKwkJ aWYgKCEoc3RhdHVzMSAmIEFYUDIwWF9QV1JfU1RBVFVTX0FDX1ZCVVNfU0hPUlQpKQorCQkJcmVn IHw9IEFYUDIwWF9BRENfRU4xX0FDSU5fViB8IEFYUDIwWF9BRENfRU4xX0FDSU5fQzsKKwkJaWYg KGRldmRhdGEtPmJhdHRlcnlfbmFtZVswXSkKKwkJCXJlZyB8PSBBWFAyMFhfQURDX0VOMV9CQVRU X1YgfCBBWFAyMFhfQURDX0VOMV9CQVRUX0M7CisJCWlmIChkZXZkYXRhLT5iYXR0ZXJ5X25hbWVb MF0gJiYKKwkJICAgICEoYWRjX2NmZyAmIEFYUDIwWF9BRFJfVFNfVU5SRUxBVEVEKSkKKwkJCXJl ZyB8PSBBWFAyMFhfQURDX0VOMV9URU1QOworCisJCXJlZ21hcF91cGRhdGVfYml0cyhheHAyMHgt PnJlZ21hcCwgQVhQMjBYX0FEQ19FTjEsCisJCQlBWFAyMFhfQURDX0VOMV9BQ0lOX1YgfCBBWFAy MFhfQURDX0VOMV9BQ0lOX0MgfAorCQkJQVhQMjBYX0FEQ19FTjFfVkJVU19WIHwgQVhQMjBYX0FE Q19FTjFfVkJVU19DIHwKKwkJCUFYUDIwWF9BRENfRU4xX0JBVFRfViB8IEFYUDIwWF9BRENfRU4x X0JBVFRfQyB8CisJCQlBWFAyMFhfQURDX0VOMV9URU1QLCByZWcpOworCX0KKworCXJldCA9IHJl Z21hcF9yZWFkKGF4cDIweC0+cmVnbWFwLCBBWFAyMFhfVkJVU19JUFNPVVRfTUdNVCwgJnZidXNt Z3QpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSByZWdtYXBfYnVsa19yZWFk KGF4cDIweC0+cmVnbWFwLCBBWFAyMFhfQUNJTl9WX0FEQ19ILCBhZGMsIDgpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisJaWYgKGRldmRhdGEtPmJhdHRlcnlfbmFtZVswXSAmJiAhKGFkY19j ZmcgJiBBWFAyMFhfQURSX1RTX1VOUkVMQVRFRCkpIHsKKwkJcmV0ID0gcmVnbWFwX2J1bGtfcmVh ZChheHAyMHgtPnJlZ21hcCwgQVhQMjBYX1RTX0lOX0gsIGFkYys4LCAyKTsKKwkJaWYgKHJldCkK KwkJCXJldHVybiByZXQ7CisJfQorCWlmIChkZXZkYXRhLT5iYXR0ZXJ5X25hbWVbMF0pIHsKKwkJ cmV0ID0gcmVnbWFwX2J1bGtfcmVhZChheHAyMHgtPnJlZ21hcCwgQVhQMjBYX1BXUl9CQVRUX0gs IGFkYysxMCwgMyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlyZXQgPSByZWdtYXBf YnVsa19yZWFkKGF4cDIweC0+cmVnbWFwLCBBWFAyMFhfQkFUVF9WX0gsIGFkYysxMywgNik7CisJ CWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlyZXQgPSByZWdtYXBfcmVhZChheHAyMHgtPnJl Z21hcCwgQVhQMjBYX0ZHX1JFUywgJmJwZXJjZW50KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiBy ZXQ7CisJfQorCisJc3dpdGNoIChhZGNfY2ZnICYgQVhQMjBYX0FEUl9SQVRFX01BU0spIHsKKwlj YXNlIEFYUDIwWF9BRFJfUkFURV8yMDBIejoKKwkJdGltZXNwZWNfYWRkX25zKCZ0cywgIDUwMDAw MDApOyBicmVhazsKKwljYXNlIEFYUDIwWF9BRFJfUkFURV8xMDBIejoKKwkJdGltZXNwZWNfYWRk X25zKCZ0cywgMTAwMDAwMDApOyBicmVhazsKKwljYXNlIEFYUDIwWF9BRFJfUkFURV81MEh6Ogor CQl0aW1lc3BlY19hZGRfbnMoJnRzLCAyMDAwMDAwMCk7IGJyZWFrOworCWNhc2UgQVhQMjBYX0FE Ul9SQVRFXzI1SHo6CisJZGVmYXVsdDoKKwkJdGltZXNwZWNfYWRkX25zKCZ0cywgNDAwMDAwMDAp OworCX0KKworCXJldCA9IGRldmRhdGEtPnN0YXR1czEgfCAoZGV2ZGF0YS0+c3RhdHVzMiA8PCA4 KSB8CisJICAgICAgKChkZXZkYXRhLT5iYXR0X3BlcmNlbnQgJiAweDdmKSA8PCAxNik7CisJaWYg KGluaXQgPT0gMikKKwkJdGltZXNwZWNfYWRkX25zKCZ0cywgMjAwMDAwMDAwKTsKKwlzcGluX2xv Y2soJmRldmRhdGEtPmxvY2spOworCWRldmRhdGEtPnZhYyAgICAgICAgPSAoKGFkY1swXSA8PCA0 KSB8IChhZGNbMV0gJiAweDBmKSkgKiAxNzAwOworCWRldmRhdGEtPmlhYyAgICAgICAgPSAoKGFk Y1syXSA8PCA0KSB8IChhZGNbM10gJiAweDBmKSkgKiA2MjU7CisJZGV2ZGF0YS0+dnZidXMgICAg ICA9ICgoYWRjWzRdIDw8IDQpIHwgKGFkY1s1XSAmIDB4MGYpKSAqIDE3MDA7CisJZGV2ZGF0YS0+ aXZidXMgICAgICA9ICgoYWRjWzZdIDw8IDQpIHwgKGFkY1s3XSAmIDB4MGYpKSAqIDM3NTsKKwlk ZXZkYXRhLT5uZXh0X2NoZWNrID0gdHM7CisJZGV2ZGF0YS0+dmJ1c21ndCAgICA9IHZidXNtZ3Q7 CisJZGV2ZGF0YS0+c3RhdHVzMSAgICA9IHN0YXR1czE7CisJZGV2ZGF0YS0+c3RhdHVzMiAgICA9 IHN0YXR1czI7CisJaWYgKGRldmRhdGEtPmJhdHRlcnlfbmFtZVswXSAmJiAhKGFkY19jZmcgJiBB WFAyMFhfQURSX1RTX1VOUkVMQVRFRCkpCisJCWRldmRhdGEtPnRiYXR0ID0gKChhZGNbOF0gPDwg NCkgfCAoYWRjWzldICYgMHgwZikpICogODAwOworCWlmIChkZXZkYXRhLT5iYXR0ZXJ5X25hbWVb MF0pIHsKKwkJZGV2ZGF0YS0+dmJhdHQgPSAoKGFkY1sxM10gPDwgNCkgfCAoYWRjWzE0XSAmIDB4 MGYpKSAqIDExMDA7CisJCWlmIChzdGF0dXMxICYgQVhQMjBYX1BXUl9TVEFUVVNfQkFUX0NIQVJH SU5HKQorCQkJZGV2ZGF0YS0+aWJhdHQgPSAoKGFkY1sxNV0gPDwgNCkgfCAoYWRjWzE2XSAmIDB4 MGYpKTsKKwkJZWxzZQorCQkJZGV2ZGF0YS0+aWJhdHQgPSAoKGFkY1sxN10gPDwgNCkgfCAoYWRj WzE4XSAmIDB4MGYpKTsKKwkJZGV2ZGF0YS0+aWJhdHQgKj0gNTAwOworCQlkZXZkYXRhLT5wYmF0 dCA9ICgoYWRjWzEwXSA8PCAxNikgfCAoYWRjWzExXSA8PCA4KSB8IGFkY1sxMl0pICoKKwkJCQkg NTUgLyAxMDA7CisJCWRldmRhdGEtPmJhdHRfcGVyY2VudCA9IGJwZXJjZW50ICYgMHg3ZjsKKwl9 CisJc3Bpbl91bmxvY2soJmRldmRhdGEtPmxvY2spOworCisJaWYgKGluaXQgPT0gMiB8fCBpbml0 ID09IDApCisJCXJldHVybiAwOworCisJaWYgKChyZXQgXiBzdGF0dXMxKSAmIChBWFAyMFhfUFdS X1NUQVRVU19WQlVTX1BSRVNFTlQgfAorCQkJICAgICAgIEFYUDIwWF9QV1JfU1RBVFVTX1ZCVVNf QVZBSUxBQkxFKSkKKwkJcG93ZXJfc3VwcGx5X2NoYW5nZWQoJmRldmRhdGEtPnZidXMpOworCWlm IChkZXZkYXRhLT5hY19uYW1lWzBdKSB7CisJfSBlbHNlIGlmICgocmV0IF4gc3RhdHVzMSkgJiAo QVhQMjBYX1BXUl9TVEFUVVNfQUNfUFJFU0VOVCB8CisJCQkJICAgICBBWFAyMFhfUFdSX1NUQVRV U19BQ19BVkFJTEFCTEUpKQorCQlwb3dlcl9zdXBwbHlfY2hhbmdlZCgmZGV2ZGF0YS0+YWMpOwor CWlmICghZGV2ZGF0YS0+YmF0dGVyeV9uYW1lWzBdKSB7CisJfSBlbHNlIGlmICgocmV0IF4gc3Rh dHVzMSkgJiBBWFAyMFhfUFdSX1NUQVRVU19CQVRfQ0hBUkdJTkcpIHsKKwkJcG93ZXJfc3VwcGx5 X2NoYW5nZWQoJmRldmRhdGEtPmJhdHRlcnkpOworCX0gZWxzZSBpZiAoKChyZXQgPj4gOCkgXiBz dGF0dXMyKSAmIChBWFAyMFhfUFdSX09QX0NIQVJHSU5HIHwKKwkJICAgQVhQMjBYX1BXUl9PUF9C QVRUX1BSRVNFTlQgfCBBWFAyMFhfUFdSX09QX0JBVFRfQUNUSVZBVEVEIHwKKwkJICAgQVhQMjBY X1BXUl9PUF9CQVRUX0NIR19DVVJSRU5UX0xPVykpIHsKKwkJcG93ZXJfc3VwcGx5X2NoYW5nZWQo JmRldmRhdGEtPmJhdHRlcnkpOworCX0gZWxzZSBpZiAoKChyZXQgPj4gMTYpICYgMHg3ZikgIT0g KGJwZXJjZW50ICYgMHg3ZikpIHsKKwkJcG93ZXJfc3VwcGx5X2NoYW5nZWQoJmRldmRhdGEtPmJh dHRlcnkpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXhwMjB4X3Bvd2VyX21v bml0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBheHAyMHhfcG93ZXIg KmRldmRhdGEgPSBjb250YWluZXJfb2Yod29yaywKKwkJCQkJc3RydWN0IGF4cDIweF9wb3dlciwg d29yayk7CisKKwlheHAyMHhfcG93ZXJfcG9sbChkZXZkYXRhLCAxKTsKKworCS8qIFRPRE86IGNo ZWNrIHN0YXR1cyBmb3IgY29uc2l0ZW5jeQorCSAqICAgICAgIGFkanVzdCBiYXR0ZXJ5IGNoYXJn aW5nIHBhcmFtZXRlcnMgYXMgbmVlZGVkCisJICovCit9CisKKy8qICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKgorICogKioqICBSVEMgLyBCYWNrdXAgYmF0 dGVyeSBjaGFyZ2VyICAgICAgICAgICoqKiAqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqICovCisKKy8qIEZpZWxkcyBvZiBBWFAyMFhfQ0hSR19CQUtf Q1RSTCAqLworI2RlZmluZSBBWFAyMFhfQkFDS1VQX0VOQUJMRSAgICAgICAgICgweDAxIDw8IDcp CisjZGVmaW5lIEFYUDIwWF9CQUNLVVBfVk9MVEFHRV9NQVNLICAgKDB4MDMgPDwgNSkKKyNkZWZp bmUgQVhQMjBYX0JBQ0tVUF9WT0xUQUdFXzNfMVYgICAoMHgwMCA8PCA1KQorI2RlZmluZSBBWFAy MFhfQkFDS1VQX1ZPTFRBR0VfM18wViAgICgweDAxIDw8IDUpCisjZGVmaW5lIEFYUDIwWF9CQUNL VVBfVk9MVEFHRV8zXzZWICAgKDB4MDIgPDwgNSkKKyNkZWZpbmUgQVhQMjBYX0JBQ0tVUF9WT0xU QUdFXzJfNVYgICAoMHgwMyA8PCA1KQorI2RlZmluZSBBWFAyMFhfQkFDS1VQX0NVUlJFTlRfTUFT SyAgIDB4MDMKKyNkZWZpbmUgQVhQMjBYX0JBQ0tVUF9DVVJSRU5UXzUwdUEgICAweDAwCisjZGVm aW5lIEFYUDIwWF9CQUNLVVBfQ1VSUkVOVF8xMDB1QSAgMHgwMQorI2RlZmluZSBBWFAyMFhfQkFD S1VQX0NVUlJFTlRfMjAwdUEgIDB4MDIKKyNkZWZpbmUgQVhQMjBYX0JBQ0tVUF9DVVJSRU5UXzQw MHVBICAweDAzCisKK3N0YXRpYyBpbnQgYXhwMjB4X2JhY2t1cF9jb25maWcoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldiwKKwkJCQlzdHJ1Y3QgYXhwMjB4X2RldiAqYXhwMjB4KQoreworCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJaW50IHJldCA9IDAsIHJlZywgbmV3X3JlZyA9IDA7CisJ dTMyIGxpbVsyXTsKKworCXJldCA9IHJlZ21hcF9yZWFkKGF4cDIweC0+cmVnbWFwLCBBWFAyMFhf Q0hSR19CQUtfQ1RSTCwgJnJlZyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW5wID0g b2Zfbm9kZV9nZXQoYXhwMjB4LT5kZXYtPm9mX25vZGUpOworCWlmICghbnApCisJCXJldHVybiAt RU5PREVWOworCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkobnAsICJiYWNrdXAi LCBsaW0sIDIpOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBlcnI7CisKKwlzd2l0Y2ggKGxpbVsw XSkgeworCWNhc2UgMjUwMDAwMDoKKwkJbmV3X3JlZyB8PSBBWFAyMFhfQkFDS1VQX1ZPTFRBR0Vf Ml81VjsKKwkJYnJlYWs7CisJY2FzZSAzMDAwMDAwOgorCQluZXdfcmVnIHw9IEFYUDIwWF9CQUNL VVBfVk9MVEFHRV8zXzBWOworCQlicmVhazsKKwljYXNlIDMxMDAwMDA6CisJCW5ld19yZWcgfD0g QVhQMjBYX0JBQ0tVUF9WT0xUQUdFXzNfMVY7CisJCWJyZWFrOworCWNhc2UgMzYwMDAwMDoKKwkJ bmV3X3JlZyB8PSBBWFAyMFhfQkFDS1VQX1ZPTFRBR0VfM182VjsKKwkJYnJlYWs7CisJZGVmYXVs dDoKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIkludmFsaWQgYmFja3VwIERUIHZvbHRhZ2UgbGlt aXQgJXVcbiIsIGxpbVswXSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKwlz d2l0Y2ggKGxpbVsxXSkgeworCWNhc2UgNTA6CisJCW5ld19yZWcgfD0gQVhQMjBYX0JBQ0tVUF9D VVJSRU5UXzUwdUE7CisJCWJyZWFrOworCWNhc2UgMTAwOgorCQluZXdfcmVnIHw9IEFYUDIwWF9C QUNLVVBfQ1VSUkVOVF8xMDB1QTsKKwkJYnJlYWs7CisJY2FzZSAyMDA6CisJCW5ld19yZWcgfD0g QVhQMjBYX0JBQ0tVUF9DVVJSRU5UXzIwMHVBOworCQlicmVhazsKKwljYXNlIDQwMDoKKwkJbmV3 X3JlZyB8PSBBWFAyMFhfQkFDS1VQX0NVUlJFTlRfNDAwdUE7CisJCWJyZWFrOworCWRlZmF1bHQ6 CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJJbnZhbGlkIGJhY2t1cCBEVCBjdXJyZW50IGxpbWl0 ICV1XG4iLCBsaW1bMV0pOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisJbmV3 X3JlZyB8PSBBWFAyMFhfQkFDS1VQX0VOQUJMRTsKKworCXJldCA9IHJlZ21hcF91cGRhdGVfYml0 cyhheHAyMHgtPnJlZ21hcCwgQVhQMjBYX0NIUkdfQkFLX0NUUkwsCisJCQlBWFAyMFhfQkFDS1VQ X0VOQUJMRSB8IEFYUDIwWF9CQUNLVVBfVk9MVEFHRV9NQVNLIHwKKwkJCUFYUDIwWF9CQUNLVVBf Q1VSUkVOVF9NQVNLLCBuZXdfcmVnKTsKKwlpZiAocmV0KQorCQlkZXZfd2FybigmcGRldi0+ZGV2 LCAiRmFpbGVkIHRvIGFkanVzdCBiYWNrdXAgYmF0dGVyeSBzZXR0aW5nczogJWRcbiIsIHJldCk7 CisKK2VycjoKKwlvZl9ub2RlX3B1dChucCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu dCBheHAyMHhfYmFja3VwX2dldF9wcm9wKHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwKKwkJCQkg IGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHBzcCwKKwkJCQkgIHVuaW9uIHBvd2VyX3N1cHBs eV9wcm9wdmFsICp2YWwpCit7CisJc3RydWN0IGF4cDIweF9wb3dlciAqZGV2ZGF0YSA9IGRldl9n ZXRfZHJ2ZGF0YShwc3ktPmRldi0+cGFyZW50KTsKKwlpbnQgcmV0ID0gMCwgcmVnOworCisJcmV0 ID0gcmVnbWFwX3JlYWQoZGV2ZGF0YS0+YXhwMjB4LT5yZWdtYXAsIEFYUDIwWF9DSFJHX0JBS19D VFJMLCAmcmVnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXN3aXRjaCAocHNw KSAgeworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfU1RBVFVTOgorCQlpZiAoKHJlZyAmIEFYUDIw WF9CQUNLVVBfRU5BQkxFKSkKKwkJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQUExZX1NUQVRVU19D SEFSR0lORzsKKwkJZWxzZQorCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX05P VF9DSEFSR0lORzsKKwkJYnJlYWs7CisKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NPTlNUQU5U X0NIQVJHRV9WT0xUQUdFOgorCQlzd2l0Y2ggKChyZWcgJiBBWFAyMFhfQkFDS1VQX1ZPTFRBR0Vf TUFTSykpIHsKKwkJY2FzZSBBWFAyMFhfQkFDS1VQX1ZPTFRBR0VfMl81VjoKKwkJCXZhbC0+aW50 dmFsID0gMjUwMDAwMDsgYnJlYWs7CisJCWNhc2UgQVhQMjBYX0JBQ0tVUF9WT0xUQUdFXzNfMFY6 CisJCQl2YWwtPmludHZhbCA9IDMwMDAwMDA7IGJyZWFrOworCQljYXNlIEFYUDIwWF9CQUNLVVBf Vk9MVEFHRV8zXzFWOgorCQkJdmFsLT5pbnR2YWwgPSAzMTAwMDAwOyBicmVhazsKKwkJY2FzZSBB WFAyMFhfQkFDS1VQX1ZPTFRBR0VfM182VjoKKwkJCXZhbC0+aW50dmFsID0gMzYwMDAwMDsgYnJl YWs7CisJCWRlZmF1bHQ6CisJCQl2YWwtPmludHZhbCA9IDA7CisJCX0KKwkJYnJlYWs7CisKKwlj YXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NPTlNUQU5UX0NIQVJHRV9DVVJSRU5UOgorCQlzd2l0Y2gg KChyZWcgJiBBWFAyMFhfQkFDS1VQX0NVUlJFTlRfTUFTSykpIHsKKwkJY2FzZSBBWFAyMFhfQkFD S1VQX0NVUlJFTlRfNTB1QToKKwkJCXZhbC0+aW50dmFsID0gNTA7IGJyZWFrOworCQljYXNlIEFY UDIwWF9CQUNLVVBfQ1VSUkVOVF8xMDB1QToKKwkJCXZhbC0+aW50dmFsID0gMTAwOyBicmVhazsK KwkJY2FzZSBBWFAyMFhfQkFDS1VQX0NVUlJFTlRfMjAwdUE6CisJCQl2YWwtPmludHZhbCA9IDIw MDsgYnJlYWs7CisJCWNhc2UgQVhQMjBYX0JBQ0tVUF9DVVJSRU5UXzQwMHVBOgorCQkJdmFsLT5p bnR2YWwgPSA0MDA7IGJyZWFrOworCQlkZWZhdWx0OgorCQkJdmFsLT5pbnR2YWwgPSAwOworCQl9 CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQor CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBheHAyMHhfYmFja3VwX3NldF9wcm9wKHN0 cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwKKwkJCQkgIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5 IHBzcCwKKwkJCQkgIGNvbnN0IHVuaW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsICp2YWwpCit7CisJ c3RydWN0IGF4cDIweF9wb3dlciAqZGV2ZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShwc3ktPmRldi0+ cGFyZW50KTsKKwlpbnQgcmV0OworCisJc3dpdGNoIChwc3ApIHsKKwljYXNlIFBPV0VSX1NVUFBM WV9QUk9QX1NUQVRVUzoKKwkJaWYgKHZhbC0+aW50dmFsID09IFBPV0VSX1NVUFBMWV9TVEFUVVNf Q0hBUkdJTkcpCisJCQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMoZGV2ZGF0YS0+YXhwMjB4LT5y ZWdtYXAsCisJCQkJCQkgQVhQMjBYX0NIUkdfQkFLX0NUUkwsCisJCQkJCQkgQVhQMjBYX0JBQ0tV UF9FTkFCTEUsCisJCQkJCQkgQVhQMjBYX0JBQ0tVUF9FTkFCTEUpOworCQllbHNlIGlmICh2YWwt PmludHZhbCA9PSBQT1dFUl9TVVBQTFlfU1RBVFVTX05PVF9DSEFSR0lORykKKwkJCXJldCA9IHJl Z21hcF91cGRhdGVfYml0cyhkZXZkYXRhLT5heHAyMHgtPnJlZ21hcCwKKwkJCQkJCSBBWFAyMFhf Q0hSR19CQUtfQ1RSTCwKKwkJCQkJCSBBWFAyMFhfQkFDS1VQX0VOQUJMRSwgMCk7CisJCWVsc2UK KwkJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZB TDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBheHAyMHhfYmFja3VwX3Byb3Bf d3JpdGVhYmxlKHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwKKwkJCQkJZW51bSBwb3dlcl9zdXBw bHlfcHJvcGVydHkgcHNwKQoreworCXJldHVybiBwc3AgPT0gUE9XRVJfU1VQUExZX1BST1BfU1RB VFVTOworfQorCitzdGF0aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgYXhwMjB4X2JhY2t1 cF9wcm9wc1tdID0geworCVBPV0VSX1NVUFBMWV9QUk9QX1NUQVRVUywKKwlQT1dFUl9TVVBQTFlf UFJPUF9DT05TVEFOVF9DSEFSR0VfVk9MVEFHRSwKKwlQT1dFUl9TVVBQTFlfUFJPUF9DT05TVEFO VF9DSEFSR0VfQ1VSUkVOVCwKK307CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKgorICogKioqICBBQ0lOIHBvd2VyIHN1cHBseSAgICAgICAgICAg ICAgICAgICAgICoqKiAqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqICovCisKK3N0YXRpYyBpbnQgYXhwMjB4X2FjX2dldF9wcm9wKHN0cnVjdCBwb3dl cl9zdXBwbHkgKnBzeSwKKwkJCSAgICAgIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHBzcCwK KwkJCSAgICAgIHVuaW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsICp2YWwpCit7CisJc3RydWN0IGF4 cDIweF9wb3dlciAqZGV2ZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShwc3ktPmRldi0+cGFyZW50KTsK KwlpbnQgcmV0OworCisJcmV0ID0gYXhwMjB4X3Bvd2VyX3BvbGwoZGV2ZGF0YSwgMCk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNwaW5fbG9jaygmZGV2ZGF0YS0+bG9jayk7CisJc3dp dGNoIChwc3ApICB7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9QUkVTRU5UOgorCQl2YWwtPmlu dHZhbCA9ICEhKGRldmRhdGEtPnN0YXR1czEgJiBBWFAyMFhfUFdSX1NUQVRVU19BQ19QUkVTRU5U KTsKKwkJYnJlYWs7CisKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX09OTElORToKKwkJdmFsLT5p bnR2YWwgPSAhIShkZXZkYXRhLT5zdGF0dXMxICYgQVhQMjBYX1BXUl9TVEFUVVNfQUNfQVZBSUxB QkxFKTsKKwkJYnJlYWs7CisKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XOgor CQl2YWwtPmludHZhbCA9IGRldmRhdGEtPnZhYzsKKwkJYnJlYWs7CisKKwljYXNlIFBPV0VSX1NV UFBMWV9QUk9QX0NVUlJFTlRfTk9XOgorCQl2YWwtPmludHZhbCA9IGRldmRhdGEtPmlhYzsKKwkJ YnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCX0KKwlzcGluX3VubG9jaygm ZGV2ZGF0YS0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgZW51bSBwb3dlcl9z dXBwbHlfcHJvcGVydHkgYXhwMjB4X2FjX3Byb3BzW10gPSB7CisJUE9XRVJfU1VQUExZX1BST1Bf UFJFU0VOVCwKKwlQT1dFUl9TVVBQTFlfUFJPUF9PTkxJTkUsCisJUE9XRVJfU1VQUExZX1BST1Bf Vk9MVEFHRV9OT1csCisJUE9XRVJfU1VQUExZX1BST1BfQ1VSUkVOVF9OT1csCit9OworCisvKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICoKKyAqICoqKiAg VkJVUyBwb3dlciBzdXBwbHkgICAgICAgICAgICAgICAgICAgICAqKiogKgorICogKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCitzdGF0aWMgaW50IGF4 cDIweF92YnVzX2dldF9wcm9wKHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwKKwkJCQllbnVtIHBv d2VyX3N1cHBseV9wcm9wZXJ0eSBwc3AsCisJCQkJdW5pb24gcG93ZXJfc3VwcGx5X3Byb3B2YWwg KnZhbCkKK3sKKwlzdHJ1Y3QgYXhwMjB4X3Bvd2VyICpkZXZkYXRhID0gZGV2X2dldF9kcnZkYXRh KHBzeS0+ZGV2LT5wYXJlbnQpOworCWludCByZXQ7CisKKwlyZXQgPSBheHAyMHhfcG93ZXJfcG9s bChkZXZkYXRhLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc3Bpbl9sb2NrKCZk ZXZkYXRhLT5sb2NrKTsKKwlzd2l0Y2ggKHBzcCkgIHsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9Q X1BSRVNFTlQ6CisJCXZhbC0+aW50dmFsID0gISEoZGV2ZGF0YS0+c3RhdHVzMSAmIEFYUDIwWF9Q V1JfU1RBVFVTX1ZCVVNfUFJFU0VOVCk7CisJCWJyZWFrOworCisJY2FzZSBQT1dFUl9TVVBQTFlf UFJPUF9PTkxJTkU6CisJCXZhbC0+aW50dmFsID0gISEoZGV2ZGF0YS0+c3RhdHVzMSAmIEFYUDIw WF9QV1JfU1RBVFVTX1ZCVVNfQVZBSUxBQkxFKTsKKwkJYnJlYWs7CisKKwljYXNlIFBPV0VSX1NV UFBMWV9QUk9QX1ZPTFRBR0VfTk9XOgorCQl2YWwtPmludHZhbCA9IGRldmRhdGEtPnZ2YnVzOwor CQlicmVhazsKKworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ1VSUkVOVF9OT1c6CisJCXZhbC0+ aW50dmFsID0gZGV2ZGF0YS0+aXZidXM7CisJCWJyZWFrOworCisJY2FzZSBQT1dFUl9TVVBQTFlf UFJPUF9DVVJSRU5UX01BWDoKKwkJc3dpdGNoIChkZXZkYXRhLT52YnVzbWd0ICYgQVhQMjBYX1ZC VVNfQ0xJTUlUX01BU0spIHsKKwkJY2FzZSBBWFAyMFhfVkJVQ19DTElNSVRfMTAwbUE6CisJCQl2 YWwtPmludHZhbCA9IDEwMDAwMDsgYnJlYWs7CisJCWNhc2UgQVhQMjBYX1ZCVUNfQ0xJTUlUXzUw MG1BOgorCQkJdmFsLT5pbnR2YWwgPSA1MDAwMDA7IGJyZWFrOworCQljYXNlIEFYUDIwWF9WQlVD X0NMSU1JVF85MDBtQToKKwkJCXZhbC0+aW50dmFsID0gOTAwMDAwOyBicmVhazsKKwkJY2FzZSBB WFAyMFhfVkJVQ19DTElNSVRfTk9ORToKKwkJZGVmYXVsdDoKKwkJCXZhbC0+aW50dmFsID0gLTE7 CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTUlOOgor CQl2YWwtPmludHZhbCA9IEFYUDIwWF9WQlVTX1ZIT0xEX21WKGRldmRhdGEtPnZidXNtZ3QpOwor CQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorCXNwaW5fdW5sb2Nr KCZkZXZkYXRhLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXhwMjB4 X3ZidXNfc2V0X3Byb3Aoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5LAorCQkJCWVudW0gcG93ZXJf c3VwcGx5X3Byb3BlcnR5IHBzcCwKKwkJCQljb25zdCB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZh bCAqdmFsKQoreworCXN0cnVjdCBheHAyMHhfcG93ZXIgKmRldmRhdGEgPSBkZXZfZ2V0X2RydmRh dGEocHN5LT5kZXYtPnBhcmVudCk7CisJaW50IHJldCwgcmVnOworCisJc3dpdGNoIChwc3ApIHsK KwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfTUFYOgorCQlpZiAodmFsLT5pbnR2YWwg PT0gMTAwMDAwKQorCQkJcmVnID0gQVhQMjBYX1ZCVUNfQ0xJTUlUXzEwMG1BOworCQllbHNlIGlm ICh2YWwtPmludHZhbCA9PSA1MDAwMDApCisJCQlyZWcgPSBBWFAyMFhfVkJVQ19DTElNSVRfNTAw bUE7CisJCWVsc2UgaWYgKHZhbC0+aW50dmFsID09IDkwMDAwMCkKKwkJCXJlZyA9IEFYUDIwWF9W QlVDX0NMSU1JVF85MDBtQTsKKwkJZWxzZSBpZiAodmFsLT5pbnR2YWwgPT0gLTEpCisJCQlyZWcg PSBBWFAyMFhfVkJVQ19DTElNSVRfTk9ORTsKKwkJZWxzZSB7CisJCQlyZXQgPSAtRUlOVkFMOwor CQkJYnJlYWs7CisJCX0KKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGRldmRhdGEtPmF4cDIweC0+cmVn bWFwLAorCQkJCSAgIEFYUDIwWF9WQlVTX0lQU09VVF9NR01ULAorCQkJCSAgIEFYUDIwWF9WQlVT X0NMSU1JVF9NQVNLLCByZWcpOworCQlzcGluX2xvY2soJmRldmRhdGEtPmxvY2spOworCQlkZXZk YXRhLT52YnVzbWd0ID0gKGRldmRhdGEtPnZidXNtZ3QgJiB+QVhQMjBYX1ZCVVNfQ0xJTUlUX01B U0spIHwKKwkJCQkgICAocmVnICYgQVhQMjBYX1ZCVVNfQ0xJTUlUX01BU0spOworCQlzcGluX3Vu bG9jaygmZGV2ZGF0YS0+bG9jayk7CisJCXJldCA9IDA7CisJCWJyZWFrOworCisJY2FzZSBQT1dF Ul9TVVBQTFlfUFJPUF9WT0xUQUdFX01JTjoKKwkJaWYgKHZhbC0+aW50dmFsIDwgNDAwMDAwMCkg eworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCXJlZyA9IHZhbC0+ aW50dmFsIC8gMTAwMDAwOworCQlpZiAoKHJlZyAmIDcpICE9IHJlZykgeworCQkJcmV0ID0gLUVJ TlZBTDsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCXJlZyA9IHJlZyA8PCAzOworCQlyZWdtYXBf dXBkYXRlX2JpdHMoZGV2ZGF0YS0+YXhwMjB4LT5yZWdtYXAsCisJCQkJICAgQVhQMjBYX1ZCVVNf SVBTT1VUX01HTVQsCisJCQkJICAgQVhQMjBYX1ZCVVNfVkhPTERfTUFTSywgcmVnKTsKKwkJc3Bp bl9sb2NrKCZkZXZkYXRhLT5sb2NrKTsKKwkJZGV2ZGF0YS0+dmJ1c21ndCA9IChkZXZkYXRhLT52 YnVzbWd0ICYgfkFYUDIwWF9WQlVTX1ZIT0xEX01BU0spIHwKKwkJCQkgICAocmVnICYgQVhQMjBY X1ZCVVNfVkhPTERfTUFTSyk7CisJCXNwaW5fdW5sb2NrKCZkZXZkYXRhLT5sb2NrKTsKKwkJcmV0 ID0gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCX0KKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgYXhwMjB4X3Zi dXNfcHJvcHNbXSA9IHsKKwlQT1dFUl9TVVBQTFlfUFJPUF9QUkVTRU5ULAorCVBPV0VSX1NVUFBM WV9QUk9QX09OTElORSwKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVywKKwlQT1dFUl9T VVBQTFlfUFJPUF9DVVJSRU5UX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX01JTiwK KwlQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX01BWCwKK307CisKK3N0YXRpYyBpbnQgYXhwMjB4 X3ZidXNfcHJvcF93cml0ZWFibGUoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5LAorCQkJCSAgICAg IGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHBzcCkKK3sKKwlyZXR1cm4gcHNwID09IFBPV0VS X1NVUFBMWV9QUk9QX1ZPTFRBR0VfTUlOIHx8CisJICAgICAgIHBzcCA9PSBQT1dFUl9TVVBQTFlf UFJPUF9DVVJSRU5UX01BWDsKK30KKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqICoKKyAqICoqKiAgbWFpbiBiYXR0ZXJ5IGNoYXJnZXIgICAgICAg ICAgICAgICAgICAqKiogKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiAqLworCitzdGF0aWMgdm9pZCBheHAyMHhfYmF0dGVyeV9jaGdfcmVjb25maWco c3RydWN0IHBvd2VyX3N1cHBseSAqcHN5KTsKKworc3RhdGljIGludCBheHAyMHhfYmF0dGVyeV9j b25maWcoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCQkgc3RydWN0IGF4cDIweF9w b3dlciAqZGV2ZGF0YSwKKwkJCQkgc3RydWN0IGF4cDIweF9kZXYgKmF4cDIweCkKK3sKKwlzdHJ1 Y3QgZGV2aWNlX25vZGUgKm5wOworCWludCBpLCByZXQgPSAwLCByZWcsIG5ld19yZWcgPSAwOwor CXUzMiBvY3ZbMTZdLCB0ZW1wWzNdLCByZGMsIGNhcGE7CisKKwlyZXQgPSByZWdtYXBfcmVhZChh eHAyMHgtPnJlZ21hcCwgQVhQMjBYX1BXUl9PUF9NT0RFLCAmcmVnKTsKKwlpZiAocmV0KQorCQly ZXR1cm4gcmV0OworCisJbnAgPSBvZl9ub2RlX2dldChheHAyMHgtPmRldi0+b2Zfbm9kZSk7CisJ aWYgKCFucCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3Uz Ml9hcnJheShucCwgImJhdHRlcnkub2N2Iiwgb2N2LCAxNik7CisJZm9yIChpID0gMDsgcmV0ID09 IDAgJiYgaSA8IEFSUkFZX1NJWkUob2N2KTsgaSsrKQorCQlpZiAob2N2W2ldID4gMTAwKSB7CisJ CQlkZXZfd2FybigmcGRldi0+ZGV2LCAiT0NWWyVkXSAldSA+IDEwMFxuIiwgaSwgb2N2W2ldKTsK KwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGVycjsKKwkJfQorCisJcmV0ID0gb2ZfcHJvcGVy dHlfcmVhZF91MzJfYXJyYXkobnAsICJiYXR0ZXJ5LnJlc2lzdGFuY2UiLCAmcmRjLCAxKTsKKwlp ZiAocmV0ICE9IDApCisJCXJkYyA9IDEwMDsKKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMy X2FycmF5KG5wLCAiYmF0dGVyeS5jYXBhY2l0eSIsICZjYXBhLCAxKTsKKwlpZiAocmV0ICE9IDAp CisJCWNhcGEgPSAwOworCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkobnAsICJi YXR0ZXJ5LnRlbXBfc2Vuc29yIiwgdGVtcCwgMyk7CisJaWYgKHJldCAhPSAwKQorCQltZW1zZXQo dGVtcCwgMCwgc2l6ZW9mKHRlbXApKTsKKwllbHNlIGlmICh0ZW1wWzBdICE9IDIwICYmIHRlbXBb MF0gIT0gNDAgJiYgdGVtcFswXSAhPSA2MCAmJgorCQkgdGVtcFswXSAhPSA4MCkgeworCQlkZXZf d2FybigmcGRldi0+ZGV2LCAiSW52YWxpZCBiYXR0ZXJ5IHRlbXBlcmF0dXJlIHNlbnNvciBjdXJy ZW50IHNldHRpbmdcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQltZW1zZXQodGVtcCwgMCwgc2l6 ZW9mKHRlbXApKTsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiRkRUIHNldHRpbmdzOiBj YXBhY2l0eT0lZCwgcmVzaXN0YW5jZT0lZCwgdGVtcF9zZW5zb3I9PCVkICVkICVkPlxuIiwgY2Fw YSwgcmRjLCB0ZW1wWzBdLCB0ZW1wWzFdLCB0ZW1wWzJdKTsKKwkvKiBhcHBseSBzZXR0aW5ncyAq LworCWRldmRhdGEtPmJhdHRfaGVhbHRoID0gUE9XRVJfU1VQUExZX0hFQUxUSF9VTktOT1dOOwor CXJlZ21hcF91cGRhdGVfYml0cyhheHAyMHgtPnJlZ21hcCwgQVhQMjBYX0ZHX1JFUywgQVhQMjBY X0ZHX0VOQUJMRSwgMHgwMCk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGF4cDIweC0+cmVnbWFwLCBB WFAyMFhfUkRDX0gsIDB4ODAsIDB4MDApOworCXJlZ21hcF91cGRhdGVfYml0cyhheHAyMHgtPnJl Z21hcCwgQVhQMjBYX1JEQ19MLCAweGZmLCAocmRjICogMTAwMDAgKyA1MzcxKSAvIDEwNzQyKTsK KwlyZWdtYXBfdXBkYXRlX2JpdHMoYXhwMjB4LT5yZWdtYXAsIEFYUDIwWF9SRENfSCwgMHgxZiwg KChyZGMgKiAxMDAwMCArIDUzNzEpIC8gMTA3NDIpID4+IDgpOworCWlmIChvZl9maW5kX3Byb3Bl cnR5KG5wLCAiYmF0dGVyeS5vY3YiLCBOVUxMKSkKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUob2N2KTsgaSsrKSB7CisJCQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMoYXhwMjB4LT5yZWdt YXAsIEFYUDIwWF9PQ1YoaSksCisJCQkJCQkgMHhmZiwgb2N2W2ldKTsKKwkJCWlmIChyZXQpCisJ CQkJZGV2X3dhcm4oJnBkZXYtPmRldiwKKwkJCQkJICJGYWlsZWQgdG8gc3RvcmUgT0NWWyVkXSBz ZXR0aW5nOiAlZFxuIiwKKwkJCQkJIGksIHJldCk7CisJCX0KKwlyZWdtYXBfdXBkYXRlX2JpdHMo YXhwMjB4LT5yZWdtYXAsIEFYUDIwWF9GR19SRVMsIEFYUDIwWF9GR19FTkFCTEUsIEFYUDIwWF9G R19FTkFCTEUpOworCisJaWYgKGNhcGEgPT0gMCAmJiAhKHJlZyAmIEFYUDIwWF9QV1JfT1BfQkFU VF9QUkVTRU5UKSkgeworCQkvKiBObyBiYXR0ZXJ5IHByZXNlbnQgb3IgY29uZmlndXJlZCAtPiBk aXNhYmxlICovCisJCXJlZ21hcF91cGRhdGVfYml0cyhheHAyMHgtPnJlZ21hcCwgQVhQMjBYX0NI UkdfQ1RSTDEsIEFYUDIwWF9DSFJHX0NUUkwxX0VOQUJMRSwgMHgwMCk7CisJCXJlZ21hcF91cGRh dGVfYml0cyhheHAyMHgtPnJlZ21hcCwgQVhQMjBYX09GRl9DVFJMLCBBWFAyMFhfT0ZGX0NUUkxf QkFUVF9NT04sIDB4MDApOworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiTm8gYmF0dGVyeSwgZGlz YWJsaW5nIGNoYXJnZXJcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycjsKKwl9CisK KwlpZiAodGVtcFswXSA9PSAwKSB7CisJCXJlZ21hcF91cGRhdGVfYml0cyhheHAyMHgtPnJlZ21h cCwgQVhQMjBYX0FEQ19SQVRFLAorCQkJCSAgIEFYUDIwWF9BRFJfVFNfV0hFTl9NQVNLIHwKKwkJ CQkgICBBWFAyMFhfQURSX1RTX1VOUkVMQVRFRCwKKwkJCQkgICBBWFAyMFhfQURSX1RTX1VOUkVM QVRFRCB8CisJCQkJICAgQVhQMjBYX0FEUl9UU19XSEVOX09GRik7CisJfSBlbHNlIHsKKwkJZGV2 ZGF0YS0+dGJhdHRfbWluID0gdGVtcFsxXTsKKwkJZGV2ZGF0YS0+dGJhdHRfbWF4ID0gdGVtcFsy XTsKKwkJc3dpdGNoICh0ZW1wWzBdKSB7CisJCWNhc2UgMjA6CisJCQlyZWdtYXBfdXBkYXRlX2Jp dHMoYXhwMjB4LT5yZWdtYXAsIEFYUDIwWF9BRENfUkFURSwKKwkJCQkJICAgQVhQMjBYX0FEUl9U U19DVVJSX01BU0sgfAorCQkJCQkgICBBWFAyMFhfQURSX1RTX1dIRU5fTUFTSyB8CisJCQkJCSAg IEFYUDIwWF9BRFJfVFNfVU5SRUxBVEVELAorCQkJCQkgICBBWFAyMFhfQURSX1RTX0NVUlJfMjB1 QSB8CisJCQkJCSAgIEFYUDIwWF9BRFJfVFNfV0hFTl9BREMpOworCQkJYnJlYWs7CisJCWNhc2Ug NDA6CisJCQlyZWdtYXBfdXBkYXRlX2JpdHMoYXhwMjB4LT5yZWdtYXAsIEFYUDIwWF9BRENfUkFU RSwKKwkJCQkJICAgQVhQMjBYX0FEUl9UU19DVVJSX01BU0sgfAorCQkJCQkgICBBWFAyMFhfQURS X1RTX1dIRU5fTUFTSyB8CisJCQkJCSAgIEFYUDIwWF9BRFJfVFNfVU5SRUxBVEVELAorCQkJCQkg ICBBWFAyMFhfQURSX1RTX0NVUlJfNDB1QSB8CisJCQkJCSAgIEFYUDIwWF9BRFJfVFNfV0hFTl9B REMpOworCQkJYnJlYWs7CisJCWNhc2UgNjA6CisJCQlyZWdtYXBfdXBkYXRlX2JpdHMoYXhwMjB4 LT5yZWdtYXAsIEFYUDIwWF9BRENfUkFURSwKKwkJCQkJICAgQVhQMjBYX0FEUl9UU19DVVJSX01B U0sgfAorCQkJCQkgICBBWFAyMFhfQURSX1RTX1dIRU5fTUFTSyB8CisJCQkJCSAgIEFYUDIwWF9B RFJfVFNfVU5SRUxBVEVELAorCQkJCQkgICBBWFAyMFhfQURSX1RTX0NVUlJfNjB1QSB8CisJCQkJ CSAgIEFYUDIwWF9BRFJfVFNfV0hFTl9BREMpOworCQkJYnJlYWs7CisJCWNhc2UgODA6CisJCQly ZWdtYXBfdXBkYXRlX2JpdHMoYXhwMjB4LT5yZWdtYXAsIEFYUDIwWF9BRENfUkFURSwKKwkJCQkJ ICAgQVhQMjBYX0FEUl9UU19DVVJSX01BU0sgfAorCQkJCQkgICBBWFAyMFhfQURSX1RTX1dIRU5f TUFTSyB8CisJCQkJCSAgIEFYUDIwWF9BRFJfVFNfVU5SRUxBVEVELAorCQkJCQkgICBBWFAyMFhf QURSX1RTX0NVUlJfODB1QSB8CisJCQkJCSAgIEFYUDIwWF9BRFJfVFNfV0hFTl9BREMpOworCQkJ YnJlYWs7CisJCX0KKwkJbmV3X3JlZyA9IHRlbXBbMV0gLyAoMHgxMCAqIDgwMCk7CisJCXJlZ21h cF91cGRhdGVfYml0cyhheHAyMHgtPnJlZ21hcCwgQVhQMjBYX1ZfSFRGX0NIUkcsIDB4ZmYsCisJ CQkJICAgbmV3X3JlZyk7CisJCXJlZ21hcF91cGRhdGVfYml0cyhheHAyMHgtPnJlZ21hcCwgQVhQ MjBYX1ZfSFRGX0RJU0NIUkcsIDB4ZmYsCisJCQkJICAgbmV3X3JlZyk7CisJCW5ld19yZWcgPSB0 ZW1wWzJdIC8gKDB4MTAgKiA4MDApOworCQlyZWdtYXBfdXBkYXRlX2JpdHMoYXhwMjB4LT5yZWdt YXAsIEFYUDIwWF9WX0xURl9DSFJHLCAweGZmLAorCQkJCSAgIG5ld19yZWcpOworCQlyZWdtYXBf dXBkYXRlX2JpdHMoYXhwMjB4LT5yZWdtYXAsIEFYUDIwWF9WX0xURl9ESVNDSFJHLCAweGZmLAor CQkJCSAgIG5ld19yZWcpOworCX0KKwlkZXZkYXRhLT5iYXR0X2NhcGFjaXR5ICA9IGNhcGEgKiAx MDAwOworCWRldmRhdGEtPmJhdHRfdXNlcl9pbWF4ID0gKGNhcGEgPCAzMDAgPyAzMDAgOiBjYXBh KSAqIDEwMDA7CisJLyogUHJlZmVyIGxvbmdlciBiYXR0ZXJ5IGxpZmUgb3ZlciBsb25nZXIgcnVu dGltZS4gKi8KKwlyZWdtYXBfdXBkYXRlX2JpdHMoZGV2ZGF0YS0+YXhwMjB4LT5yZWdtYXAsIEFY UDIwWF9DSFJHX0NUUkwxLAorCQkJICAgQVhQMjBYX0NIUkdfQ1RSTDFfVEdUX1ZPTFQsCisJCQkg ICBBWFAyMFhfQ0hSR19DVFJMMV9UR1RfNF8xNVYpOworCisJLyogVE9ETzogY29uZmlndXJlIENI R0xFRD8gKi8KKworCS8qIERlZmF1bHQgdG8gYWJvdXQgNSUgY2FwYWNpdHksIGFib3V0IDMuNVYg Ki8KKwlyZWdtYXBfdXBkYXRlX2JpdHMoYXhwMjB4LT5yZWdtYXAsIEFYUDIwWF9BUFNfV0FSTl9M MSwgMHhmZiwKKwkJCSAgICgzNTAwMDAwIC0gMjg2NzIwMCkgLyA0IC8gMTQwMCk7CisJcmVnbWFw X3VwZGF0ZV9iaXRzKGF4cDIweC0+cmVnbWFwLCBBWFAyMFhfQVBTX1dBUk5fTDIsIDB4ZmYsCisJ CQkgICAoMzMwNDAwMCAtIDI4NjcyMDApIC8gNCAvIDE0MDApOworCS8qIFJEQyAtIGRpc2FibGUg Y2FwYWNpdHkgbW9uaXRvciwgcmVjb25maWd1cmUsIHJlLWVuYWJsZSAqLworCXJlZ21hcF91cGRh dGVfYml0cyhheHAyMHgtPnJlZ21hcCwgQVhQMjBYX0ZHX1JFUywgMHg4MCwgMHg4MCk7CisJcmVn bWFwX3VwZGF0ZV9iaXRzKGF4cDIweC0+cmVnbWFwLCBBWFAyMFhfUkRDX0gsIDB4ODAsIDB4MDAp OworCXJlZ21hcF91cGRhdGVfYml0cyhheHAyMHgtPnJlZ21hcCwgQVhQMjBYX1JEQ19ILCAweDFm LCAoKHJkYyAqIDEwMDAwICsgNTM3MSkgLyAxMDc0MikgPj4gOCk7CisJcmVnbWFwX3VwZGF0ZV9i aXRzKGF4cDIweC0+cmVnbWFwLCBBWFAyMFhfUkRDX0wsIDB4ZmYsIChyZGMgKiAxMDAwMCArIDUz NzEpIC8gMTA3NDIpOworCXJlZ21hcF91cGRhdGVfYml0cyhheHAyMHgtPnJlZ21hcCwgQVhQMjBY X0ZHX1JFUywgMHg4MCwgMHgwMCk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGF4cDIweC0+cmVnbWFw LCBBWFAyMFhfT0ZGX0NUUkwsIEFYUDIwWF9PRkZfQ1RSTF9CQVRUX01PTiwgQVhQMjBYX09GRl9D VFJMX0JBVFRfTU9OKTsKKwlheHAyMHhfYmF0dGVyeV9jaGdfcmVjb25maWcoJmRldmRhdGEtPmJh dHRlcnkpOworCXJldCA9IDA7CisKK2VycjoKKwlvZl9ub2RlX3B1dChucCk7CisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIGludCBheHAyMHhfYmF0dGVyeV91dl90b190ZW1wKHN0cnVjdCBheHAy MHhfcG93ZXIgKmRldmRhdGEsIGludCB1dikKK3sKKwkvKiBUT0RPOiBjb252ZXJ0IMK1ViB0byDC sEMgKi8KKwlyZXR1cm4gdXY7Cit9CisKK3N0YXRpYyBpbnQgYXhwMjB4X2JhdHRlcnlfZ2V0X3By b3Aoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5LAorCQkJCSAgIGVudW0gcG93ZXJfc3VwcGx5X3By b3BlcnR5IHBzcCwKKwkJCQkgICB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQorewor CXN0cnVjdCBheHAyMHhfcG93ZXIgKmRldmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEocHN5LT5kZXYt PnBhcmVudCk7CisJaW50IHJldCwgcmVnOworCisJc3dpdGNoIChwc3ApIHsKKwljYXNlIFBPV0VS X1NVUFBMWV9QUk9QX0NVUlJFTlRfTUFYOgorCQlyZXQgPSByZWdtYXBfcmVhZChkZXZkYXRhLT5h eHAyMHgtPnJlZ21hcCwgQVhQMjBYX0NIUkdfQ1RSTDEsCisJCQkJICAmcmVnKTsKKwkJaWYgKHJl dCkKKwkJCXJldHVybiByZXQ7CisJCXZhbC0+aW50dmFsID0gKHJlZyAmIEFYUDIwWF9DSFJHX0NU UkwxX1RHVF9DVVJSKSAqIDEwMDAwMCArCisJCQkgICAgICAzMDAwMDA7CisJCXJldHVybiAwOwor CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX01BWF9ERVNJR046CisJCXJldCA9IHJl Z21hcF9yZWFkKGRldmRhdGEtPmF4cDIweC0+cmVnbWFwLCBBWFAyMFhfQ0hSR19DVFJMMSwKKwkJ CQkgICZyZWcpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJc3dpdGNoIChyZWcgJiBB WFAyMFhfQ0hSR19DVFJMMV9UR1RfVk9MVCkgeworCQljYXNlIEFYUDIwWF9DSFJHX0NUUkwxX1RH VF80XzFWOgorCQkJdmFsLT5pbnR2YWwgPSA0MTAwMDAwOworCQkJYnJlYWs7CisJCWNhc2UgQVhQ MjBYX0NIUkdfQ1RSTDFfVEdUXzRfMTVWOgorCQkJdmFsLT5pbnR2YWwgPSA0MTUwMDAwOworCQkJ YnJlYWs7CisJCWNhc2UgQVhQMjBYX0NIUkdfQ1RSTDFfVEdUXzRfMlY6CisJCQl2YWwtPmludHZh bCA9IDQyMDAwMDA7CisJCQlicmVhazsKKwkJY2FzZSBBWFAyMFhfQ0hSR19DVFJMMV9UR1RfNF8z NlY6CisJCQl2YWwtPmludHZhbCA9IDQzNjAwMDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ CXJldCA9IC1FSU5WQUw7CisJCX0KKwkJcmV0dXJuIDA7CisKKwljYXNlIFBPV0VSX1NVUFBMWV9Q Uk9QX1ZPTFRBR0VfTUlOX0RFU0lHTjoKKwkJcmV0ID0gcmVnbWFwX3JlYWQoZGV2ZGF0YS0+YXhw MjB4LT5yZWdtYXAsIEFYUDIwWF9BUFNfV0FSTl9MMiwKKwkJCQkgICZyZWcpOworCQlpZiAocmV0 KQorCQkJcmV0dXJuIHJldDsKKwkJdmFsLT5pbnR2YWwgPSAyODY3MjAwICsgMTQwMCAqIHJlZyAq IDQ7CisJCXJldHVybiAwOworCisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9URUNITk9MT0dZOgor CQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9URUNITk9MT0dZX0xJT047CisJCXJldHVybiAw OworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0ID0gYXhwMjB4X3Bvd2VyX3BvbGwo ZGV2ZGF0YSwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNwaW5fbG9jaygmZGV2 ZGF0YS0+bG9jayk7CisJc3dpdGNoIChwc3ApICB7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9Q UkVTRU5UOgorCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfT05MSU5FOgorCQl2YWwtPmludHZhbCA9 ICEhKGRldmRhdGEtPnN0YXR1czIgJiBBWFAyMFhfUFdSX09QX0JBVFRfUFJFU0VOVCk7CisJCWJy ZWFrOworCisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVM6CisJCWlmIChkZXZkYXRhLT5z dGF0dXMxICYgQVhQMjBYX1BXUl9TVEFUVVNfQkFUX0NIQVJHSU5HKQorCQkJdmFsLT5pbnR2YWwg PSBQT1dFUl9TVVBQTFlfU1RBVFVTX0NIQVJHSU5HOworCQllbHNlIGlmIChkZXZkYXRhLT5pYmF0 dCA9PSAwICYmIGRldmRhdGEtPmJhdHRfcGVyY2VudCA9PSAxMDApCisJCQl2YWwtPmludHZhbCA9 IFBPV0VSX1NVUFBMWV9TVEFUVVNfRlVMTDsKKwkJZWxzZSBpZiAoZGV2ZGF0YS0+aWJhdHQgPT0g MCkKKwkJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQUExZX1NUQVRVU19OT1RfQ0hBUkdJTkc7CisJ CWVsc2UKKwkJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQUExZX1NUQVRVU19ESVNDSEFSR0lORzsK KwkJYnJlYWs7CisKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfTk9XOgorCQl2YWwt PmludHZhbCA9IGRldmRhdGEtPmliYXR0OworCQlicmVhazsKKworCWNhc2UgUE9XRVJfU1VQUExZ X1BST1BfSEVBTFRIOgorCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9IRUFMVEhfVU5LTk9X TjsKKwkJLy8gUE9XRVJfU1VQUExZX0hFQUxUSF9HT09ELCBQT1dFUl9TVVBQTFlfSEVBTFRIX09W RVJIRUFULCBQT1dFUl9TVVBQTFlfSEVBTFRIX0RFQUQsIFBPV0VSX1NVUFBMWV9IRUFMVEhfT1ZF UlZPTFRBR0UsIFBPV0VSX1NVUFBMWV9IRUFMVEhfVU5TUEVDX0ZBSUxVUkUsIFBPV0VSX1NVUFBM WV9IRUFMVEhfQ09MRCwgUE9XRVJfU1VQUExZX0hFQUxUSF9TQUZFVFlfVElNRVJfRVhQSVJFCisJ CWJyZWFrOworCisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVzoKKwkJdmFsLT5p bnR2YWwgPSBkZXZkYXRhLT52YmF0dDsKKwkJYnJlYWs7CisKKwljYXNlIFBPV0VSX1NVUFBMWV9Q Uk9QX1BPV0VSX05PVzoKKwkJdmFsLT5pbnR2YWwgPSBkZXZkYXRhLT5wYmF0dDsKKwkJYnJlYWs7 CisKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9GVUxMX0RFU0lHTjoKKwkJdmFsLT5p bnR2YWwgPSBkZXZkYXRhLT5iYXR0X2NhcGFjaXR5OworCQlicmVhazsKKworCWNhc2UgUE9XRVJf U1VQUExZX1BST1BfQ0hBUkdFX05PVzoKKwkJLyogVE9ETyAqLworCQl2YWwtPmludHZhbCA9IDEy MzQ1OworCQlicmVhazsKKworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ0FQQUNJVFk6CisJCXZh bC0+aW50dmFsID0gZGV2ZGF0YS0+YmF0dF9wZXJjZW50OworCQlicmVhazsKKworCWNhc2UgUE9X RVJfU1VQUExZX1BST1BfVEVNUDoKKwkJdmFsLT5pbnR2YWwgPSBheHAyMHhfYmF0dGVyeV91dl90 b190ZW1wKGRldmRhdGEsCisJCQkJCQkJZGV2ZGF0YS0+dGJhdHQpOworCQlicmVhazsKKworCWNh c2UgUE9XRVJfU1VQUExZX1BST1BfVEVNUF9BTEVSVF9NSU46CisJCXZhbC0+aW50dmFsID0gYXhw MjB4X2JhdHRlcnlfdXZfdG9fdGVtcChkZXZkYXRhLAorCQkJCQkJCWRldmRhdGEtPnRiYXR0X21p bik7CisJCWJyZWFrOworCisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9URU1QX0FMRVJUX01BWDoK KwkJdmFsLT5pbnR2YWwgPSBheHAyMHhfYmF0dGVyeV91dl90b190ZW1wKGRldmRhdGEsCisJCQkJ CQkJZGV2ZGF0YS0+dGJhdHRfbWF4KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXQgPSAt RUlOVkFMOworCX0KKwlzcGluX3VubG9jaygmZGV2ZGF0YS0+bG9jayk7CisKKwlyZXR1cm4gcmV0 OworfQorCitzdGF0aWMgaW50IGF4cDIweF9iYXR0ZXJ5X21heF9jaGdfY3VycmVudChzdHJ1Y3Qg YXhwMjB4X3Bvd2VyICpkZXZkYXRhKQoreworCWlmICgoZGV2ZGF0YS0+c3RhdHVzMSAmIEFYUDIw WF9QV1JfU1RBVFVTX0FDX1BSRVNFTlQpICYmCisJICAgIChkZXZkYXRhLT5zdGF0dXMxICYgQVhQ MjBYX1BXUl9TVEFUVVNfQUNfQVZBSUxBQkxFKSkgeworCQkvKiBBQyBhdmFpbGFibGUgLSB1bnJl c3RyaWN0ZWQgcG93ZXIgKi8KKwkJcmV0dXJuIGRldmRhdGEtPmJhdHRfY2FwYWNpdHkgLyAyOwor CX0gZWxzZSBpZiAoKGRldmRhdGEtPnN0YXR1czEgJiBBWFAyMFhfUFdSX1NUQVRVU19WQlVTX1BS RVNFTlQpICYmCisJCSAgIChkZXZkYXRhLT5zdGF0dXMxICYgQVhQMjBYX1BXUl9TVEFUVVNfVkJV U19BVkFJTEFCTEUpKSB7CisJCS8qIFZCVVMgYXZhaWxhYmxlIC0gbGltaXRlZCBwb3dlciAqLwor CQlzd2l0Y2ggKGRldmRhdGEtPnZidXNtZ3QgJiBBWFAyMFhfVkJVU19DTElNSVRfTUFTSykgewor CQljYXNlIEFYUDIwWF9WQlVDX0NMSU1JVF8xMDBtQToKKwkJCXJldHVybiAwOworCQljYXNlIEFY UDIwWF9WQlVDX0NMSU1JVF81MDBtQToKKwkJCXJldHVybiAzMDAwMDA7CisJCWNhc2UgQVhQMjBY X1ZCVUNfQ0xJTUlUXzkwMG1BOgorCQkJcmV0dXJuIDYwMDAwMDsKKwkJY2FzZSBBWFAyMFhfVkJV Q19DTElNSVRfTk9ORToKKwkJCXJldHVybiBkZXZkYXRhLT5iYXR0X2NhcGFjaXR5IC8gMjsKKwkJ ZGVmYXVsdDoKKwkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIHsKKwkJLyogb24tYmF0dGVyeSAq LworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXhwMjB4X2JhdHRlcnlfc2V0X3By b3Aoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5LAorCQkJCSAgIGVudW0gcG93ZXJfc3VwcGx5X3By b3BlcnR5IHBzcCwKKwkJCQkgICBjb25zdCB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFs KQoreworCXN0cnVjdCBheHAyMHhfcG93ZXIgKmRldmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEocHN5 LT5kZXYtPnBhcmVudCk7CisJaW50IHJldDsKKworCXN3aXRjaCAocHNwKSB7CisJY2FzZSBQT1dF Ul9TVVBQTFlfUFJPUF9TVEFUVVM6CisJCWlmICh2YWwtPmludHZhbCA9PSBQT1dFUl9TVVBQTFlf U1RBVFVTX0NIQVJHSU5HKSB7CisJCQlyZXQgPSBheHAyMHhfYmF0dGVyeV9tYXhfY2hnX2N1cnJl bnQoZGV2ZGF0YSk7CisJCQlpZiAocmV0ID09IDApIHsKKwkJCQlyZXQgPSAtRUJVU1k7CisJCQkJ YnJlYWs7CisJCQl9CisJCQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMoZGV2ZGF0YS0+YXhwMjB4 LT5yZWdtYXAsCisJCQkJCQkgQVhQMjBYX1BXUl9PUF9NT0RFLAorCQkJCQkJIEFYUDIwWF9QV1Jf T1BfQ0hBUkdJTkcsCisJCQkJCQkgQVhQMjBYX1BXUl9PUF9DSEFSR0lORyk7CisJCQlpZiAocmV0 ID09IDApCisJCQkJYXhwMjB4X2JhdHRlcnlfY2hnX3JlY29uZmlnKCZkZXZkYXRhLT5iYXR0ZXJ5 KTsKKwkJfSBlbHNlIGlmICh2YWwtPmludHZhbCA9PSBQT1dFUl9TVVBQTFlfU1RBVFVTX05PVF9D SEFSR0lORykgeworCQkJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKGRldmRhdGEtPmF4cDIweC0+ cmVnbWFwLAorCQkJCQkJIEFYUDIwWF9QV1JfT1BfTU9ERSwKKwkJCQkJCSBBWFAyMFhfUFdSX09Q X0NIQVJHSU5HLCAwKTsKKwkJfSBlbHNlCisJCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwor CWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9NSU5fREVTSUdOOgorCQkvKiBUT0RPOiBh ZGp1c3QgQVhQMjBYX0FQU19XQVJOX0wxIGFuZCBBWFAyMFhfQVBTX1dBUk5fTDIgYWNjb3JkaW5n bHkgKi8KKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisKKwljYXNlIFBPV0VSX1NVUFBMWV9Q Uk9QX1ZPTFRBR0VfTUFYX0RFU0lHTjoKKwkJc3dpdGNoICh2YWwtPmludHZhbCkgeworCQljYXNl IDQxMDAwMDA6CisJCQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMoZGV2ZGF0YS0+YXhwMjB4LT5y ZWdtYXAsCisJCQkJCQkgQVhQMjBYX0NIUkdfQ1RSTDEsCisJCQkJCQkgQVhQMjBYX0NIUkdfQ1RS TDFfVEdUX1ZPTFQsCisJCQkJCQkgQVhQMjBYX0NIUkdfQ1RSTDFfVEdUXzRfMVYpOworCQkJYnJl YWs7CisJCWNhc2UgNDE1MDAwMDoKKwkJCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhkZXZkYXRh LT5heHAyMHgtPnJlZ21hcCwKKwkJCQkJCSBBWFAyMFhfQ0hSR19DVFJMMSwKKwkJCQkJCSBBWFAy MFhfQ0hSR19DVFJMMV9UR1RfVk9MVCwKKwkJCQkJCSBBWFAyMFhfQ0hSR19DVFJMMV9UR1RfNF8x NVYpOworCQkJYnJlYWs7CisJCWNhc2UgNDIwMDAwMDoKKwkJCXJldCA9IHJlZ21hcF91cGRhdGVf Yml0cyhkZXZkYXRhLT5heHAyMHgtPnJlZ21hcCwKKwkJCQkJCSBBWFAyMFhfQ0hSR19DVFJMMSwK KwkJCQkJCSBBWFAyMFhfQ0hSR19DVFJMMV9UR1RfVk9MVCwKKwkJCQkJCSBBWFAyMFhfQ0hSR19D VFJMMV9UR1RfNF8yVik7CisJCQlicmVhazsKKwkJY2FzZSA0MzYwMDAwOgorCQkJLyogcmVmdXNl IHRoaXMgYXMgaXQncyB0b28gbXVjaCBmb3IgTGktaW9uISAqLworCQlkZWZhdWx0OgorCQkJcmV0 ID0gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NVUlJF TlRfTUFYOgorCQlpZiAoKCh2YWwtPmludHZhbCAtIDMwMDAwMCkgLyAxMDAwMDApID4gMHgwZikK KwkJCXJldCA9IC1FSU5WQUw7CisJCWVsc2UgaWYgKHZhbC0+aW50dmFsIDwgMzAwMDAwKQorCQkJ cmV0ID0gLUVJTlZBTDsKKwkJZWxzZSB7CisJCQlkZXZkYXRhLT5iYXR0X3VzZXJfaW1heCA9IHZh bC0+aW50dmFsOworCQkJYXhwMjB4X2JhdHRlcnlfY2hnX3JlY29uZmlnKCZkZXZkYXRhLT5iYXR0 ZXJ5KTsKKwkJCXJldCA9IDA7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXQgPSAt RUlOVkFMOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgZW51bSBwb3dlcl9zdXBwbHlf cHJvcGVydHkgYXhwMjB4X2JhdHRlcnlfcHJvcHNbXSA9IHsKKwlQT1dFUl9TVVBQTFlfUFJPUF9Q UkVTRU5ULAorCVBPV0VSX1NVUFBMWV9QUk9QX09OTElORSwKKwlQT1dFUl9TVVBQTFlfUFJPUF9T VEFUVVMsCisJUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1csCisJUE9XRVJfU1VQUExZX1BS T1BfQ1VSUkVOVF9OT1csCisJUE9XRVJfU1VQUExZX1BST1BfQ1VSUkVOVF9NQVgsCisJUE9XRVJf U1VQUExZX1BST1BfSEVBTFRILAorCVBPV0VSX1NVUFBMWV9QUk9QX1RFQ0hOT0xPR1ksCisJUE9X RVJfU1VQUExZX1BST1BfVk9MVEFHRV9NQVhfREVTSUdOLAorCVBPV0VSX1NVUFBMWV9QUk9QX1ZP TFRBR0VfTUlOX0RFU0lHTiwKKwlQT1dFUl9TVVBQTFlfUFJPUF9QT1dFUl9OT1csCisJUE9XRVJf U1VQUExZX1BST1BfQ0hBUkdFX0ZVTExfREVTSUdOLAorCS8qIFBPV0VSX1NVUFBMWV9QUk9QX0NI QVJHRV9OT1csICovCisJUE9XRVJfU1VQUExZX1BST1BfQ0FQQUNJVFksCisJUE9XRVJfU1VQUExZ X1BST1BfVEVNUCwKKwlQT1dFUl9TVVBQTFlfUFJPUF9URU1QX0FMRVJUX01JTiwKKwlQT1dFUl9T VVBQTFlfUFJPUF9URU1QX0FMRVJUX01BWCwKK307CisKK3N0YXRpYyBpbnQgYXhwMjB4X2JhdHRl cnlfcHJvcF93cml0ZWFibGUoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5LAorCQkJCSAgICAgIGVu dW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHBzcCkKK3sKKwlyZXR1cm4gcHNwID09IFBPV0VSX1NV UFBMWV9QUk9QX1ZPTFRBR0VfTUlOX0RFU0lHTiB8fAorCSAgICAgICBwc3AgPT0gUE9XRVJfU1VQ UExZX1BST1BfVk9MVEFHRV9NQVhfREVTSUdOIHx8CisJICAgICAgIHBzcCA9PSBQT1dFUl9TVVBQ TFlfUFJPUF9DVVJSRU5UX01BWCB8fAorCSAgICAgICBwc3AgPT0gUE9XRVJfU1VQUExZX1BST1Bf U1RBVFVTOworfQorCitzdGF0aWMgdm9pZCBheHAyMHhfYmF0dGVyeV9jaGdfcmVjb25maWcoc3Ry dWN0IHBvd2VyX3N1cHBseSAqcHN5KQoreworCXN0cnVjdCBheHAyMHhfcG93ZXIgKmRldmRhdGEg PSBjb250YWluZXJfb2YocHN5LAorCQkJCSAgICAgICBzdHJ1Y3QgYXhwMjB4X3Bvd2VyLCBiYXR0 ZXJ5KTsKKwlpbnQgY2hhcmdlX21heCwgcmV0OworCisJcmV0ID0gYXhwMjB4X3Bvd2VyX3BvbGwo ZGV2ZGF0YSwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuOworCisJY2hhcmdlX21heCA9IGF4cDIw eF9iYXR0ZXJ5X21heF9jaGdfY3VycmVudChkZXZkYXRhKTsKKworCWlmIChjaGFyZ2VfbWF4ID09 IDApIHsKKwkJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKGRldmRhdGEtPmF4cDIweC0+cmVnbWFw LAorCQkJCQkgQVhQMjBYX1BXUl9PUF9NT0RFLAorCQkJCQkgQVhQMjBYX1BXUl9PUF9DSEFSR0lO RywgMCk7CisJfSBlbHNlIHsKKwkJaWYgKGRldmRhdGEtPmJhdHRfdXNlcl9pbWF4IDwgY2hhcmdl X21heCkKKwkJCWNoYXJnZV9tYXggPSBkZXZkYXRhLT5iYXR0X3VzZXJfaW1heDsKKwkJaWYgKCgo Y2hhcmdlX21heCAtIDMwMDAwMCkgLyAxMDAwMDApID4gMHgwZikKKwkJCWNoYXJnZV9tYXggPSAz MDAwMDAgKyAweDBmICogMTAwMDAwOworCQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMoZGV2ZGF0 YS0+YXhwMjB4LT5yZWdtYXAsCisJCQkJCSBBWFAyMFhfQ0hSR19DVFJMMSwKKwkJCQkJIEFYUDIw WF9DSFJHX0NUUkwxX1RHVF9DVVJSLAorCQkJCQkoY2hhcmdlX21heCAtIDMwMDAwMCkgLyAxMDAw MDApOworCQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMoZGV2ZGF0YS0+YXhwMjB4LT5yZWdtYXAs CisJCQkJCSBBWFAyMFhfUFdSX09QX01PREUsCisJCQkJCSBBWFAyMFhfUFdSX09QX0NIQVJHSU5H LAorCQkJCQkgQVhQMjBYX1BXUl9PUF9DSEFSR0lORyk7CisJfQorfQorCisKKworLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqCisgKiAqKiogIElSUSBo YW5kbGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKioqICoKKyAqICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworc3RhdGljIGlycXJldHVybl90 IGF4cDIweF9pcnFfYWNfb3Zlcl92KGludCBpcnEsIHZvaWQgKnB3cikKK3sKKwlzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2ID0gcHdyOworCXN0cnVjdCBheHAyMHhfcG93ZXIgKmRldmRhdGEg PSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWRldl93YXJuKCZwZGV2LT5kZXYsICJJ UlEjJWQgQUMgb3ZlciB2b2x0YWdlXG4iLCBpcnEpOworCXNjaGVkdWxlX3dvcmsoJmRldmRhdGEt PndvcmspOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGF4 cDIweF9pcnFfYWNfcGx1Z2luKGludCBpcnEsIHZvaWQgKnB3cikKK3sKKwlzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2ID0gcHdyOworCXN0cnVjdCBheHAyMHhfcG93ZXIgKmRldmRhdGEgPSBw bGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJJUlEj JWQgQUMgY29ubmVjdGVkXG4iLCBpcnEpOworCXNjaGVkdWxlX3dvcmsoJmRldmRhdGEtPndvcmsp OworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGF4cDIweF9p cnFfYWNfcmVtb3ZhbChpbnQgaXJxLCB2b2lkICpwd3IpCit7CisJc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldiA9IHB3cjsKKwlzdHJ1Y3QgYXhwMjB4X3Bvd2VyICpkZXZkYXRhID0gcGxhdGZv cm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiSVJRIyVkIEFD IGRpc2Nvbm5lY3RlZFxuIiwgaXJxKTsKKwlzY2hlZHVsZV93b3JrKCZkZXZkYXRhLT53b3JrKTsK KwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBheHAyMHhfaXJx X3ZidXNfb3Zlcl92KGludCBpcnEsIHZvaWQgKnB3cikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2ID0gcHdyOworCXN0cnVjdCBheHAyMHhfcG93ZXIgKmRldmRhdGEgPSBwbGF0Zm9y bV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWRldl93YXJuKCZwZGV2LT5kZXYsICJJUlEjJWQgVkJV UyBvdmVyIHZvbHRhZ2VcbiIsIGlycSk7CisJc2NoZWR1bGVfd29yaygmZGV2ZGF0YS0+d29yayk7 CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYXhwMjB4X2ly cV92YnVzX3BsdWdpbihpbnQgaXJxLCB2b2lkICpwd3IpCit7CisJc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldiA9IHB3cjsKKwlzdHJ1Y3QgYXhwMjB4X3Bvd2VyICpkZXZkYXRhID0gcGxhdGZv cm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiSVJRIyVkIFZC VVMgY29ubmVjdGVkXG4iLCBpcnEpOworCXNjaGVkdWxlX3dvcmsoJmRldmRhdGEtPndvcmspOwor CXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGF4cDIweF9pcnFf dmJ1c19yZW1vdmFsKGludCBpcnEsIHZvaWQgKnB3cikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2ID0gcHdyOworCXN0cnVjdCBheHAyMHhfcG93ZXIgKmRldmRhdGEgPSBwbGF0Zm9y bV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJJUlEjJWQgVkJV UyBkaXNjb25uZWN0ZWRcbiIsIGlycSk7CisJc2NoZWR1bGVfd29yaygmZGV2ZGF0YS0+d29yayk7 CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYXhwMjB4X2ly cV92YnVzX3ZfbG93KGludCBpcnEsIHZvaWQgKnB3cikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2ID0gcHdyOworCXN0cnVjdCBheHAyMHhfcG93ZXIgKmRldmRhdGEgPSBwbGF0Zm9y bV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWRldl93YXJuKCZwZGV2LT5kZXYsICJJUlEjJWQgVkJV UyBsb3cgdm9sdGFnZVxuIiwgaXJxKTsKKwlzY2hlZHVsZV93b3JrKCZkZXZkYXRhLT53b3JrKTsK KwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBheHAyMHhfaXJx X2JhdHRfcGx1Z2luKGludCBpcnEsIHZvaWQgKnB3cikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2ID0gcHdyOworCXN0cnVjdCBheHAyMHhfcG93ZXIgKmRldmRhdGEgPSBwbGF0Zm9y bV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJJUlEjJWQgQmF0 dGVyeSBjb25uZWN0ZWRcbiIsIGlycSk7CisJc2NoZWR1bGVfd29yaygmZGV2ZGF0YS0+d29yayk7 CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorc3RhdGljIGlycXJldHVybl90IGF4cDIweF9pcnFf YmF0dF9yZW1vdmFsKGludCBpcnEsIHZvaWQgKnB3cikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2ID0gcHdyOworCXN0cnVjdCBheHAyMHhfcG93ZXIgKmRldmRhdGEgPSBwbGF0Zm9y bV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJJUlEjJWQgQmF0 dGVyeSBkaXNjb25uZWN0ZWRcbiIsIGlycSk7CisJc2NoZWR1bGVfd29yaygmZGV2ZGF0YS0+d29y ayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorc3RhdGljIGlycXJldHVybl90IGF4cDIweF9p cnFfYmF0dF9hY3RpdmF0aW9uKGludCBpcnEsIHZvaWQgKnB3cikKK3sKKwlzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2ID0gcHdyOworCXN0cnVjdCBheHAyMHhfcG93ZXIgKmRldmRhdGEgPSBw bGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJJUlEj JWQgQmF0dGVyeSBhY3RpdmF0aW9uIHN0YXJ0ZWRcbiIsIGlycSk7CisJc2NoZWR1bGVfd29yaygm ZGV2ZGF0YS0+d29yayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorc3RhdGljIGlycXJldHVy bl90IGF4cDIweF9pcnFfYmF0dF9hY3RpdmF0ZWQoaW50IGlycSwgdm9pZCAqcHdyKQoreworCXN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBwd3I7CisJc3RydWN0IGF4cDIweF9wb3dlciAq ZGV2ZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZGV2X2luZm8oJnBkZXYt PmRldiwgIklSUSMlZCBCYXR0ZXJ5IGFjdGl2YXRpb24gY29tcGxldGVkXG4iLCBpcnEpOworCXNj aGVkdWxlX3dvcmsoJmRldmRhdGEtPndvcmspOworCXJldHVybiBJUlFfSEFORExFRDsKK30KK3N0 YXRpYyBpcnFyZXR1cm5fdCBheHAyMHhfaXJxX2JhdHRfY2hhcmdpbmcoaW50IGlycSwgdm9pZCAq cHdyKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBwd3I7CisJc3RydWN0IGF4 cDIweF9wb3dlciAqZGV2ZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZGV2 X2luZm8oJnBkZXYtPmRldiwgIklSUSMlZCBCYXR0ZXJ5IGNoYXJnaW5nXG4iLCBpcnEpOworCXNj aGVkdWxlX3dvcmsoJmRldmRhdGEtPndvcmspOworCXJldHVybiBJUlFfSEFORExFRDsKK30KK3N0 YXRpYyBpcnFyZXR1cm5fdCBheHAyMHhfaXJxX2JhdHRfY2hhcmdlZChpbnQgaXJxLCB2b2lkICpw d3IpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHB3cjsKKwlzdHJ1Y3QgYXhw MjB4X3Bvd2VyICpkZXZkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkZXZf aW5mbygmcGRldi0+ZGV2LCAiSVJRIyVkIEJhdHRlcnkgY2hhcmdlZFxuIiwgaXJxKTsKKwlzY2hl ZHVsZV93b3JrKCZkZXZkYXRhLT53b3JrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CitzdGF0 aWMgaXJxcmV0dXJuX3QgYXhwMjB4X2lycV9iYXR0X2hpZ2hfdGVtcChpbnQgaXJxLCB2b2lkICpw d3IpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHB3cjsKKwlzdHJ1Y3QgYXhw MjB4X3Bvd2VyICpkZXZkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkZXZf d2FybigmcGRldi0+ZGV2LCAiSVJRIyVkIEJhdHRlcnkgdGVtcGVyYXR1cmUgaGlnaFxuIiwgaXJx KTsKKwlzY2hlZHVsZV93b3JrKCZkZXZkYXRhLT53b3JrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7 Cit9CitzdGF0aWMgaXJxcmV0dXJuX3QgYXhwMjB4X2lycV9iYXR0X2xvd190ZW1wKGludCBpcnEs IHZvaWQgKnB3cikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gcHdyOworCXN0 cnVjdCBheHAyMHhfcG93ZXIgKmRldmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsK KworCWRldl93YXJuKCZwZGV2LT5kZXYsICJJUlEjJWQgQmF0dGVyeSB0ZW1wZXJhdHVyZSBsb3dc biIsIGlycSk7CisJc2NoZWR1bGVfd29yaygmZGV2ZGF0YS0+d29yayk7CisJcmV0dXJuIElSUV9I QU5ETEVEOworfQorc3RhdGljIGlycXJldHVybl90IGF4cDIweF9pcnFfYmF0dF9jaGdfY3Vycl9s b3coaW50IGlycSwgdm9pZCAqcHdyKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYg PSBwd3I7CisJc3RydWN0IGF4cDIweF9wb3dlciAqZGV2ZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZk YXRhKHBkZXYpOworCisJZGV2X3dhcm4oJnBkZXYtPmRldiwgIklSUSMlZCBFeHRlcm5hbCBwb3dl ciB0b28gd2VhayBmb3IgdGFyZ2V0IGNoYXJnaW5nIGN1cnJlbnQhXG4iLCBpcnEpOworCXNjaGVk dWxlX3dvcmsoJmRldmRhdGEtPndvcmspOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3Rh dGljIGlycXJldHVybl90IGF4cDIweF9pcnFfcG93ZXJfbG93KGludCBpcnEsIHZvaWQgKnB3cikK K3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gcHdyOworCXN0cnVjdCBheHAyMHhf cG93ZXIgKmRldmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWRldl93YXJu KCZwZGV2LT5kZXYsICJJUlEjJWQgU3lzdGVtIHBvd2VyIHJ1bm5pbmcgb3V0IHNvb25cbiIsIGly cSk7CisJc2NoZWR1bGVfd29yaygmZGV2ZGF0YS0+d29yayk7CisJcmV0dXJuIElSUV9IQU5ETEVE OworfQorc3RhdGljIGlycXJldHVybl90IGF4cDIweF9pcnFfcG93ZXJfbG93X2NyaXQoaW50IGly cSwgdm9pZCAqcHdyKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBwd3I7CisJ c3RydWN0IGF4cDIweF9wb3dlciAqZGV2ZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYp OworCisJZGV2X2NyaXQoJnBkZXYtPmRldiwgIklSUSMlZCBTeXN0ZW0gcG93ZXIgcnVubmluZyBv dXQgbm93IVxuIiwgaXJxKTsKKwlzY2hlZHVsZV93b3JrKCZkZXZkYXRhLT53b3JrKTsKKwlyZXR1 cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiogKgorICogKioqICBQbGF0Zm9ybSBkcml2ZXIgY29kZSAgICAgICAgICAg ICAgICAgICoqKiAqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqICovCisKK3N0YXRpYyBpbnQgYXhwMjB4X2luaXRfaXJxKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYsCisJc3RydWN0IGF4cDIweF9kZXYgKmF4cDIweCwgY29uc3QgY2hhciAqaXJx X25hbWUsCisJY29uc3QgY2hhciAqZGV2X25hbWUsIGlycV9oYW5kbGVyX3QgaGFuZGxlcikKK3sK KwlpbnQgaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgaXJxX25hbWUpOworCWlu dCByZXQ7CisKKwlpZiAoaXJxIDwgMCkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiTm8gSVJR IGZvciAlczogJWRcbiIsIGlycV9uYW1lLCBpcnEpOworCQlyZXR1cm4gaXJxOworCX0KKwlpcnEg PSByZWdtYXBfaXJxX2dldF92aXJxKGF4cDIweC0+cmVnbWFwX2lycWMsIGlycSk7CisKKwlyZXQg PSBkZXZtX3JlcXVlc3RfYW55X2NvbnRleHRfaXJxKCZwZGV2LT5kZXYsIGlycSwgaGFuZGxlciwg MCwKKwkJCQkJZGV2X25hbWUsIHBkZXYpOworCWlmIChyZXQgPCAwKQorCQlkZXZfd2FybigmcGRl di0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgJXMgSVJRIyVkOiAlZFxuIiwgaXJxX25hbWUsIGly cSwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF4cDIweF9wb3dlcl9zdXNw ZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sK KwlzdHJ1Y3QgYXhwMjB4X3Bvd2VyICpkZXZkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRl dik7CisKKwljYW5jZWxfd29ya19zeW5jKCZkZXZkYXRhLT53b3JrKTsKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBheHAyMHhfcG93ZXJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCit7CisJc3RydWN0IGF4cDIweF9wb3dlciAqZGV2ZGF0YSA9IHBsYXRmb3JtX2dldF9k cnZkYXRhKHBkZXYpOworCisJYXhwMjB4X3Bvd2VyX3BvbGwoZGV2ZGF0YSwgMSk7CisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyB2b2lkIGF4cDIweF9wb3dlcl9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBheHAyMHhfcG93ZXIgKmRldmRhdGEgPSBwbGF0 Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWNhbmNlbF93b3JrX3N5bmMoJmRldmRhdGEtPndv cmspOworfQorCitzdGF0aWMgaW50IGF4cDIweF9wb3dlcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBheHAyMHhfZGV2ICpheHAyMHggPSBkZXZfZ2V0X2Ry dmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IGF4cDIweF9wb3dlciAqZGV2ZGF0YTsK KwlzdHJ1Y3QgcG93ZXJfc3VwcGx5ICphYywgKnZidXMsICpiYWNrdXAsICpiYXR0ZXJ5OworCWlu dCByZXQ7CisKKwlkZXZkYXRhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1 Y3QgYXhwMjB4X3Bvd2VyKSwKKwkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoZGV2ZGF0YSA9PSBOVUxM KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9ja19pbml0KCZkZXZkYXRhLT5sb2NrKTsK KwlkZXZkYXRhLT5heHAyMHggPSBheHAyMHg7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwg ZGV2ZGF0YSk7CisKKwliYWNrdXAgPSAmZGV2ZGF0YS0+YmFja3VwOworCXNucHJpbnRmKGRldmRh dGEtPmJhY2t1cF9uYW1lLCBzaXplb2YoZGV2ZGF0YS0+YmFja3VwX25hbWUpLCAiYXhwMjB4LWJh Y2t1cCIpOworCWJhY2t1cC0+bmFtZSAgICAgICAgICAgICAgICAgID0gZGV2ZGF0YS0+YmFja3Vw X25hbWU7CisJYmFja3VwLT50eXBlICAgICAgICAgICAgICAgICAgPSBQT1dFUl9TVVBQTFlfVFlQ RV9CQVRURVJZOworCWJhY2t1cC0+cHJvcGVydGllcyAgICAgICAgICAgID0gYXhwMjB4X2JhY2t1 cF9wcm9wczsKKwliYWNrdXAtPm51bV9wcm9wZXJ0aWVzICAgICAgICA9IEFSUkFZX1NJWkUoYXhw MjB4X2JhY2t1cF9wcm9wcyk7CisJYmFja3VwLT5wcm9wZXJ0eV9pc193cml0ZWFibGUgPSBheHAy MHhfYmFja3VwX3Byb3Bfd3JpdGVhYmxlOworCWJhY2t1cC0+Z2V0X3Byb3BlcnR5ICAgICAgICAg ID0gYXhwMjB4X2JhY2t1cF9nZXRfcHJvcDsKKwliYWNrdXAtPnNldF9wcm9wZXJ0eSAgICAgICAg ICA9IGF4cDIweF9iYWNrdXBfc2V0X3Byb3A7CisKKwlhYyA9ICZkZXZkYXRhLT5hYzsKKwlzbnBy aW50ZihkZXZkYXRhLT5hY19uYW1lLCBzaXplb2YoZGV2ZGF0YS0+YWNfbmFtZSksICJheHAyMHgt YWMiKTsKKwlhYy0+bmFtZSAgICAgICAgICAgPSBkZXZkYXRhLT5hY19uYW1lOworCWFjLT50eXBl ICAgICAgICAgICA9IFBPV0VSX1NVUFBMWV9UWVBFX01BSU5TOworCWFjLT5wcm9wZXJ0aWVzICAg ICA9IGF4cDIweF9hY19wcm9wczsKKwlhYy0+bnVtX3Byb3BlcnRpZXMgPSBBUlJBWV9TSVpFKGF4 cDIweF9hY19wcm9wcyk7CisJYWMtPmdldF9wcm9wZXJ0eSAgID0gYXhwMjB4X2FjX2dldF9wcm9w OworCisJdmJ1cyA9ICZkZXZkYXRhLT52YnVzOworCXNucHJpbnRmKGRldmRhdGEtPnZidXNfbmFt ZSwgc2l6ZW9mKGRldmRhdGEtPnZidXNfbmFtZSksICJheHAyMHgtdXNiIik7CisJdmJ1cy0+bmFt ZSAgICAgICAgICAgICAgICAgID0gZGV2ZGF0YS0+dmJ1c19uYW1lOworCXZidXMtPnR5cGUgICAg ICAgICAgICAgICAgICA9IFBPV0VSX1NVUFBMWV9UWVBFX1VTQjsKKwl2YnVzLT5wcm9wZXJ0aWVz ICAgICAgICAgICAgPSBheHAyMHhfdmJ1c19wcm9wczsKKwl2YnVzLT5udW1fcHJvcGVydGllcyAg ICAgICAgPSBBUlJBWV9TSVpFKGF4cDIweF92YnVzX3Byb3BzKTsKKwl2YnVzLT5wcm9wZXJ0eV9p c193cml0ZWFibGUgPSBheHAyMHhfdmJ1c19wcm9wX3dyaXRlYWJsZTsKKwl2YnVzLT5nZXRfcHJv cGVydHkgICAgICAgICAgPSBheHAyMHhfdmJ1c19nZXRfcHJvcDsKKwl2YnVzLT5zZXRfcHJvcGVy dHkgICAgICAgICAgPSBheHAyMHhfdmJ1c19zZXRfcHJvcDsKKworCWRldmRhdGEtPmJhdHRlcnlf c3VwcGxpZXNbMF0gPSBkZXZkYXRhLT52YnVzX25hbWU7CisJZGV2ZGF0YS0+YmF0dGVyeV9zdXBw bGllc1sxXSA9IGRldmRhdGEtPmFjX25hbWU7CisJYmF0dGVyeSA9ICZkZXZkYXRhLT5iYXR0ZXJ5 OworCXNucHJpbnRmKGRldmRhdGEtPmJhdHRlcnlfbmFtZSwgc2l6ZW9mKGRldmRhdGEtPmJhdHRl cnlfbmFtZSksICJheHAyMHgtYmF0dGVyeSIpOworCWJhdHRlcnktPm5hbWUgICAgICAgICAgICAg ICAgICAgPSBkZXZkYXRhLT5iYXR0ZXJ5X25hbWU7CisJYmF0dGVyeS0+dHlwZSAgICAgICAgICAg ICAgICAgICA9IFBPV0VSX1NVUFBMWV9UWVBFX0JBVFRFUlk7CisJYmF0dGVyeS0+cHJvcGVydGll cyAgICAgICAgICAgICA9IGF4cDIweF9iYXR0ZXJ5X3Byb3BzOworCWJhdHRlcnktPm51bV9wcm9w ZXJ0aWVzICAgICAgICAgPSBBUlJBWV9TSVpFKGF4cDIweF9iYXR0ZXJ5X3Byb3BzKTsKKwliYXR0 ZXJ5LT5wcm9wZXJ0eV9pc193cml0ZWFibGUgID0gYXhwMjB4X2JhdHRlcnlfcHJvcF93cml0ZWFi bGU7CisJYmF0dGVyeS0+Z2V0X3Byb3BlcnR5ICAgICAgICAgICA9IGF4cDIweF9iYXR0ZXJ5X2dl dF9wcm9wOworCWJhdHRlcnktPnNldF9wcm9wZXJ0eSAgICAgICAgICAgPSBheHAyMHhfYmF0dGVy eV9zZXRfcHJvcDsKKwliYXR0ZXJ5LT5zdXBwbGllZF9mcm9tICAgICAgICAgID0gZGV2ZGF0YS0+ YmF0dGVyeV9zdXBwbGllczsKKwliYXR0ZXJ5LT5udW1fc3VwcGxpZXMgICAgICAgICAgID0gMTsK KwliYXR0ZXJ5LT5leHRlcm5hbF9wb3dlcl9jaGFuZ2VkID0gYXhwMjB4X2JhdHRlcnlfY2hnX3Jl Y29uZmlnOworCisJLyogY29uZmlndXJlIGhhcmR3YXJlIGFuZCBjaGVjayBGRFQgcGFyYW1zICov CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGF4cDIweC0+cmVnbWFwLCBBWFAyMFhfQURDX1JBVEUsCisJ CQkgICBBWFAyMFhfQURSX1JBVEVfTUFTSywgQVhQMjBYX0FEUl9SQVRFXzUwSHopOworCisJcmV0 ID0gYXhwMjB4X2JhY2t1cF9jb25maWcocGRldiwgYXhwMjB4KTsKKwlpZiAocmV0KQorCQlkZXZk YXRhLT5iYWNrdXBfbmFtZVswXSA9ICdcMCc7CisKKwlyZXQgPSBheHAyMHhfYmF0dGVyeV9jb25m aWcocGRldiwgZGV2ZGF0YSwgYXhwMjB4KTsKKwlpZiAocmV0KQorCQlkZXZkYXRhLT5iYXR0ZXJ5 X25hbWVbMF0gPSAnXDAnOworCWVsc2UgaWYgKGRldmRhdGEtPnRiYXR0X21pbiA9PSAwICYmIGRl dmRhdGEtPnRiYXR0X21heCA9PSAwKQorCQliYXR0ZXJ5LT5udW1fcHJvcGVydGllcyAtPSAzOwor CisJcmV0ID0gYXhwMjB4X3Bvd2VyX3BvbGwoZGV2ZGF0YSwgMik7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCWlmIChkZXZkYXRhLT5zdGF0dXMxICYgQVhQMjBYX1BXUl9TVEFUVVNfQUNf VkJVU19TSE9SVCkKKwkJZGV2ZGF0YS0+YWNfbmFtZVswXSA9ICdcMCc7CisJZWxzZQorCQliYXR0 ZXJ5LT5udW1fc3VwcGxpZXMgPSAyOworCisJLyogcmVnaXN0ZXIgcHJlc2VudCBzdXBwbGllcyAq LworCXJldCA9IHBvd2VyX3N1cHBseV9yZWdpc3RlcigmcGRldi0+ZGV2LCBiYWNrdXApOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBwb3dlcl9zdXBwbHlfcmVnaXN0ZXIoJnBk ZXYtPmRldiwgdmJ1cyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfdW5yZWdfYmFja3VwOworCXBv d2VyX3N1cHBseV9jaGFuZ2VkKCZkZXZkYXRhLT52YnVzKTsKKworCWlmIChkZXZkYXRhLT5hY19u YW1lWzBdKSB7CisJCXJldCA9IHBvd2VyX3N1cHBseV9yZWdpc3RlcigmcGRldi0+ZGV2LCBhYyk7 CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl91bnJlZ192YnVzOworCQlwb3dlcl9zdXBwbHlfY2hh bmdlZCgmZGV2ZGF0YS0+YWMpOworCX0KKworCWlmIChkZXZkYXRhLT5iYXR0ZXJ5X25hbWVbMF0p IHsKKwkJcmV0ID0gcG93ZXJfc3VwcGx5X3JlZ2lzdGVyKCZwZGV2LT5kZXYsIGJhdHRlcnkpOwor CQlpZiAocmV0KQorCQkJZ290byBlcnJfdW5yZWdfYWM7CisJCXBvd2VyX3N1cHBseV9jaGFuZ2Vk KCZkZXZkYXRhLT5iYXR0ZXJ5KTsKKwl9CisKKwlJTklUX1dPUksoJmRldmRhdGEtPndvcmssIGF4 cDIweF9wb3dlcl9tb25pdG9yKTsKKworCS8qIGNvbmZpZ3VyZSBpbnRlcnJ1cHRzICovCisJYXhw MjB4X2luaXRfaXJxKHBkZXYsIGF4cDIweCwgIlZCVVNfT1ZFUl9WIiwgdmJ1cy0+bmFtZSwgYXhw MjB4X2lycV92YnVzX292ZXJfdik7CisJYXhwMjB4X2luaXRfaXJxKHBkZXYsIGF4cDIweCwgIlZC VVNfUExVR0lOIiwgdmJ1cy0+bmFtZSwgYXhwMjB4X2lycV92YnVzX3BsdWdpbik7CisJYXhwMjB4 X2luaXRfaXJxKHBkZXYsIGF4cDIweCwgIlZCVVNfUkVNT1ZBTCIsIHZidXMtPm5hbWUsIGF4cDIw eF9pcnFfdmJ1c19yZW1vdmFsKTsKKwlheHAyMHhfaW5pdF9pcnEocGRldiwgYXhwMjB4LCAiVkJV U19WX0xPVyIsIHZidXMtPm5hbWUsIGF4cDIweF9pcnFfdmJ1c192X2xvdyk7CisKKwlpZiAoZGV2 ZGF0YS0+YWNfbmFtZVswXSkgeworCQlheHAyMHhfaW5pdF9pcnEocGRldiwgYXhwMjB4LCAiQUNJ Tl9PVkVSX1YiLCBhYy0+bmFtZSwgYXhwMjB4X2lycV9hY19vdmVyX3YpOworCQlheHAyMHhfaW5p dF9pcnEocGRldiwgYXhwMjB4LCAiQUNJTl9QTFVHSU4iLCBhYy0+bmFtZSwgYXhwMjB4X2lycV9h Y19wbHVnaW4pOworCQlheHAyMHhfaW5pdF9pcnEocGRldiwgYXhwMjB4LCAiQUNJTl9SRU1PVkFM IiwgYWMtPm5hbWUsIGF4cDIweF9pcnFfYWNfcmVtb3ZhbCk7CisJfQorCWlmIChkZXZkYXRhLT5i YXR0ZXJ5X25hbWVbMF0pIHsKKwkJYXhwMjB4X2luaXRfaXJxKHBkZXYsIGF4cDIweCwgIkJBVFRf UExVR0lOIiwgYmF0dGVyeS0+bmFtZSwgYXhwMjB4X2lycV9iYXR0X3BsdWdpbik7CisJCWF4cDIw eF9pbml0X2lycShwZGV2LCBheHAyMHgsICJCQVRUX1JFTU9WQUwiLCBiYXR0ZXJ5LT5uYW1lLCBh eHAyMHhfaXJxX2JhdHRfcmVtb3ZhbCk7CisJCWF4cDIweF9pbml0X2lycShwZGV2LCBheHAyMHgs ICJCQVRUX0FDVElWQVRFIiwgYmF0dGVyeS0+bmFtZSwgYXhwMjB4X2lycV9iYXR0X2FjdGl2YXRp b24pOworCQlheHAyMHhfaW5pdF9pcnEocGRldiwgYXhwMjB4LCAiQkFUVF9BQ1RJVkFURUQiLCBi YXR0ZXJ5LT5uYW1lLCBheHAyMHhfaXJxX2JhdHRfYWN0aXZhdGVkKTsKKwkJYXhwMjB4X2luaXRf aXJxKHBkZXYsIGF4cDIweCwgIkJBVFRfQ0hBUkdJTkciLCBiYXR0ZXJ5LT5uYW1lLCBheHAyMHhf aXJxX2JhdHRfY2hhcmdpbmcpOworCQlheHAyMHhfaW5pdF9pcnEocGRldiwgYXhwMjB4LCAiQkFU VF9DSEFSR0VEIiwgYmF0dGVyeS0+bmFtZSwgYXhwMjB4X2lycV9iYXR0X2NoYXJnZWQpOworCQlp ZiAoZGV2ZGF0YS0+dGJhdHRfbWluICE9IDAgfHwgZGV2ZGF0YS0+dGJhdHRfbWF4ICE9IDApIHsK KwkJCWF4cDIweF9pbml0X2lycShwZGV2LCBheHAyMHgsICJCQVRUX0hPVCIsIGJhdHRlcnktPm5h bWUsIGF4cDIweF9pcnFfYmF0dF9oaWdoX3RlbXApOworCQkJYXhwMjB4X2luaXRfaXJxKHBkZXYs IGF4cDIweCwgIkJBVFRfQ09MRCIsIGJhdHRlcnktPm5hbWUsIGF4cDIweF9pcnFfYmF0dF9sb3df dGVtcCk7CisJCX0KKwkJYXhwMjB4X2luaXRfaXJxKHBkZXYsIGF4cDIweCwgIkJBVFRfQ0hHX0NV UlJfTE9XIiwgYmF0dGVyeS0+bmFtZSwgYXhwMjB4X2lycV9iYXR0X2NoZ19jdXJyX2xvdyk7CisK KwkJYXhwMjB4X2luaXRfaXJxKHBkZXYsIGF4cDIweCwgIlBPV0VSX0xPV19XQVJOIiwgYmF0dGVy eS0+bmFtZSwgYXhwMjB4X2lycV9wb3dlcl9sb3cpOworCQlheHAyMHhfaW5pdF9pcnEocGRldiwg YXhwMjB4LCAiUE9XRVJfTE9XX0NSSVQiLCBiYXR0ZXJ5LT5uYW1lLCBheHAyMHhfaXJxX3Bvd2Vy X2xvd19jcml0KTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX3VucmVnX2FjOgorCWlmIChkZXZk YXRhLT5hY19uYW1lWzBdKQorCQlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmZGV2ZGF0YS0+YWMp OworZXJyX3VucmVnX3ZidXM6CisJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJmRldmRhdGEtPnZi dXMpOworZXJyX3VucmVnX2JhY2t1cDoKKwlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmZGV2ZGF0 YS0+YmFja3VwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXhwMjB4X3Bvd2Vy X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBheHAyMHhf cG93ZXIgKmRldmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWNhbmNlbF93 b3JrX3N5bmMoJmRldmRhdGEtPndvcmspOworCWlmIChkZXZkYXRhLT5iYXR0ZXJ5X25hbWVbMF0p CisJCXBvd2VyX3N1cHBseV91bnJlZ2lzdGVyKCZkZXZkYXRhLT5iYXR0ZXJ5KTsKKwlpZiAoZGV2 ZGF0YS0+YWNfbmFtZVswXSkKKwkJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJmRldmRhdGEtPmFj KTsKKwlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmZGV2ZGF0YS0+dmJ1cyk7CisJaWYgKGRldmRh dGEtPmJhY2t1cF9uYW1lWzBdKQorCQlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmZGV2ZGF0YS0+ YmFja3VwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZl ciBheHAyMHhfcG93ZXJfZHJpdmVyID0geworCS5wcm9iZSAgICA9IGF4cDIweF9wb3dlcl9wcm9i ZSwKKwkucmVtb3ZlICAgPSBheHAyMHhfcG93ZXJfcmVtb3ZlLAorCS5zdXNwZW5kICA9IGF4cDIw eF9wb3dlcl9zdXNwZW5kLAorCS5yZXN1bWUgICA9IGF4cDIweF9wb3dlcl9yZXN1bWUsCisJLnNo dXRkb3duID0gYXhwMjB4X3Bvd2VyX3NodXRkb3duLAorCS5kcml2ZXIgICA9IHsKKwkJLm5hbWUg ID0gImF4cDIweC1wb3dlciIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitt b2R1bGVfcGxhdGZvcm1fZHJpdmVyKGF4cDIweF9wb3dlcl9kcml2ZXIpOworCitNT0RVTEVfREVT Q1JJUFRJT04oIlBvd2VyIHN1cHBseSBkcml2ZXIgZm9yIEFYUDIweCBQTUlDcyIpOworTU9EVUxF X0FVVEhPUigiQnJ1bm8gUHLDqW1vbnQgPGJvbmJvbnNAbGludXgtdnNlcnZlci5vcmc+Iik7CitN T0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmF4cDIweC1wb3dl ciIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvYXhwMjB4LmggYi9pbmNsdWRlL2xp bnV4L21mZC9heHAyMHguaAppbmRleCBkMGUzMWEyLi5lYWYxZjdiIDEwMDY0NAotLS0gYS9pbmNs dWRlL2xpbnV4L21mZC9heHAyMHguaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9heHAyMHguaApA QCAtMTE2LDYgKzExNiwxMSBAQCBlbnVtIHsKICNkZWZpbmUgQVhQMjBYX0NDX0NUUkwJCQkweGI4 CiAjZGVmaW5lIEFYUDIwWF9GR19SRVMJCQkweGI5CiAKKy8qIE9DViAqLworI2RlZmluZSBBWFAy MFhfUkRDX0gJCQkweGJhCisjZGVmaW5lIEFYUDIwWF9SRENfTAkJCTB4YmIKKyNkZWZpbmUgQVhQ MjBYX09DVihtKQkJCSgweGMwICsgKG0pKQorCiAvKiBSZWd1bGF0b3JzIElEcyAqLwogZW51bSB7 CiAJQVhQMjBYX0xETzEgPSAwLAotLSAKMi4wLjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51 eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5v cmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==