From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH 7/9] drm/vc4: Add support for drawing 3D frames. Date: Tue, 1 Dec 2015 12:35:56 -0800 Message-ID: <1449002158-19156-7-git-send-email-eric@anholt.net> References: <1449002158-19156-1-git-send-email-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1449002158-19156-1-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: dri-devel@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org VGhlIHVzZXIgc3VibWlzc2lvbiBpcyBiYXNpY2FsbHkgYSBwb2ludGVyIHRvIGEgY29tbWFuZCBs aXN0IGFuZCBhCnBvaW50ZXIgdG8gdW5pZm9ybXMuICBXZSBjb3B5IHRob3NlIGluIHRvIHRoZSBr ZXJuZWwsIHZhbGlkYXRlIGFuZApyZWxvY2F0ZSB0aGVtLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBp biBhIEdQVSBCTyB3aGljaCB3ZSBxdWV1ZSBmb3IKZXhlY3V0aW9uLgoKU2lnbmVkLW9mZi1ieTog RXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vdmM0L01h a2VmaWxlICAgICAgICAgICB8ICAgNyArCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuYyAg ICAgICAgICB8ICAxNSArLQogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmggICAgICAgICAg fCAxOTIgKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZ2VtLmMgICAgICAgICAgfCA2 NDAgKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfaXJxLmMg ICAgICAgICAgfCAyMTAgKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3BhY2tldC5o ICAgICAgIHwgMzk5ICsrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9yZW5k ZXJfY2wuYyAgICB8IDYzMSArKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0v dmM0L3ZjNF90cmFjZS5oICAgICAgICB8ICA2MyArKysKIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0 X3RyYWNlX3BvaW50cy5jIHwgIDE0ICsKIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3YzZC5jICAg ICAgICAgIHwgIDM3ICsrCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF92YWxpZGF0ZS5jICAgICB8 IDk1NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvdWFwaS9kcm0v dmM0X2RybS5oICAgICAgICAgICAgIHwgMTQxICsrKysrCiAxMiBmaWxlcyBjaGFuZ2VkLCAzMzAz IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vdmM0L3ZjNF9nZW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS92YzQvdmM0X2lycS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZjNC92 YzRfcGFja2V0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9y ZW5kZXJfY2wuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3Ry YWNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF90cmFjZV9w b2ludHMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3ZhbGlk YXRlLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL3ZjNC9NYWtlZmlsZQppbmRleCBlODdhNmYyLi40YzZhOTlmIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vdmM0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQv TWFrZWZpbGUKQEAgLTgsMTIgKzgsMTkgQEAgdmM0LXkgOj0gXAogCXZjNF9jcnRjLm8gXAogCXZj NF9kcnYubyBcCiAJdmM0X2ttcy5vIFwKKwl2YzRfZ2VtLm8gXAogCXZjNF9oZG1pLm8gXAogCXZj NF9odnMubyBcCisJdmM0X2lycS5vIFwKIAl2YzRfcGxhbmUubyBcCisJdmM0X3JlbmRlcl9jbC5v IFwKKwl2YzRfdHJhY2VfcG9pbnRzLm8gXAogCXZjNF92M2QubyBcCisJdmM0X3ZhbGlkYXRlLm8g XAogCXZjNF92YWxpZGF0ZV9zaGFkZXJzLm8KIAogdmM0LSQoQ09ORklHX0RFQlVHX0ZTKSArPSB2 YzRfZGVidWdmcy5vCiAKIG9iai0kKENPTkZJR19EUk1fVkM0KSAgKz0gdmM0Lm8KKworQ0ZMQUdT X3ZjNF90cmFjZV9wb2ludHMubyA6PSAtSSQoc3JjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3ZjNC92YzRfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuYwppbmRleCBk YjU4ZDc0Li4yY2ZlZTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYu YworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuYwpAQCAtNzQsNiArNzQsOSBAQCBz dGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2YzRfZHJtX2ZvcHMgPSB7CiB9Owog CiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pb2N0bF9kZXNjIHZjNF9kcm1faW9jdGxzW10gPSB7 CisJRFJNX0lPQ1RMX0RFRl9EUlYoVkM0X1NVQk1JVF9DTCwgdmM0X3N1Ym1pdF9jbF9pb2N0bCwg MCksCisJRFJNX0lPQ1RMX0RFRl9EUlYoVkM0X1dBSVRfU0VRTk8sIHZjNF93YWl0X3NlcW5vX2lv Y3RsLCAwKSwKKwlEUk1fSU9DVExfREVGX0RSVihWQzRfV0FJVF9CTywgdmM0X3dhaXRfYm9faW9j dGwsIDApLAogCURSTV9JT0NUTF9ERUZfRFJWKFZDNF9DUkVBVEVfQk8sIHZjNF9jcmVhdGVfYm9f aW9jdGwsIDApLAogCURSTV9JT0NUTF9ERUZfRFJWKFZDNF9NTUFQX0JPLCB2YzRfbW1hcF9ib19p b2N0bCwgMCksCiAJRFJNX0lPQ1RMX0RFRl9EUlYoVkM0X0NSRUFURV9TSEFERVJfQk8sIHZjNF9j cmVhdGVfc2hhZGVyX2JvX2lvY3RsLCAwKSwKQEAgLTgzLDEwICs4NiwxNiBAQCBzdGF0aWMgc3Ry dWN0IGRybV9kcml2ZXIgdmM0X2RybV9kcml2ZXIgPSB7CiAJLmRyaXZlcl9mZWF0dXJlcyA9IChE UklWRVJfTU9ERVNFVCB8CiAJCQkgICAgRFJJVkVSX0FUT01JQyB8CiAJCQkgICAgRFJJVkVSX0dF TSB8CisJCQkgICAgRFJJVkVSX0hBVkVfSVJRIHwKIAkJCSAgICBEUklWRVJfUFJJTUUpLAogCS5s YXN0Y2xvc2UgPSB2YzRfbGFzdGNsb3NlLAogCS5wcmVjbG9zZSA9IHZjNF9kcm1fcHJlY2xvc2Us CiAKKwkuaXJxX2hhbmRsZXIgPSB2YzRfaXJxLAorCS5pcnFfcHJlaW5zdGFsbCA9IHZjNF9pcnFf cHJlaW5zdGFsbCwKKwkuaXJxX3Bvc3RpbnN0YWxsID0gdmM0X2lycV9wb3N0aW5zdGFsbCwKKwku aXJxX3VuaW5zdGFsbCA9IHZjNF9pcnFfdW5pbnN0YWxsLAorCiAJLmVuYWJsZV92YmxhbmsgPSB2 YzRfZW5hYmxlX3ZibGFuaywKIAkuZGlzYWJsZV92YmxhbmsgPSB2YzRfZGlzYWJsZV92Ymxhbmss CiAJLmdldF92YmxhbmtfY291bnRlciA9IGRybV92YmxhbmtfY291bnQsCkBAIC0xODEsOSArMTkw LDExIEBAIHN0YXRpYyBpbnQgdmM0X2RybV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIAlpZiAo cmV0KQogCQlnb3RvIHVucmVmOwogCisJdmM0X2dlbV9pbml0KGRybSk7CisKIAlyZXQgPSBjb21w b25lbnRfYmluZF9hbGwoZGV2LCBkcm0pOwogCWlmIChyZXQpCi0JCWdvdG8gdW5yZWY7CisJCWdv dG8gZ2VtX2Rlc3Ryb3k7CiAKIAlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7CiAJaWYg KHJldCA8IDApCkBAIC0yMDcsNiArMjE4LDggQEAgdW5yZWdpc3RlcjoKIAlkcm1fZGV2X3VucmVn aXN0ZXIoZHJtKTsKIHVuYmluZF9hbGw6CiAJY29tcG9uZW50X3VuYmluZF9hbGwoZGV2LCBkcm0p OworZ2VtX2Rlc3Ryb3k6CisJdmM0X2dlbV9kZXN0cm95KGRybSk7CiB1bnJlZjoKIAlkcm1fZGV2 X3VucmVmKGRybSk7CiAJdmM0X2JvX2NhY2hlX2Rlc3Ryb3koZHJtKTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2 LmgKaW5kZXggODk0NTQ2My4uYTNkYmZlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Zj NC92YzRfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgKQEAgLTQ5LDYg KzQ5LDQ4IEBAIHN0cnVjdCB2YzRfZGV2IHsKIAogCS8qIFByb3RlY3RzIGJvX2NhY2hlIGFuZCB0 aGUgQk8gc3RhdHMuICovCiAJc3RydWN0IG11dGV4IGJvX2xvY2s7CisKKwkvKiBTZXF1ZW5jZSBu dW1iZXIgZm9yIHRoZSBsYXN0IGpvYiBxdWV1ZWQgaW4gam9iX2xpc3QuCisJICogU3RhcnRzIGF0 IDAgKG5vIGpvYnMgZW1pdHRlZCkuCisJICovCisJdWludDY0X3QgZW1pdF9zZXFubzsKKworCS8q IFNlcXVlbmNlIG51bWJlciBmb3IgdGhlIGxhc3QgY29tcGxldGVkIGpvYiBvbiB0aGUgR1BVLgor CSAqIFN0YXJ0cyBhdCAwIChubyBqb2JzIGNvbXBsZXRlZCkuCisJICovCisJdWludDY0X3QgZmlu aXNoZWRfc2Vxbm87CisKKwkvKiBMaXN0IG9mIGFsbCBzdHJ1Y3QgdmM0X2V4ZWNfaW5mbyBmb3Ig am9icyB0byBiZSBleGVjdXRlZC4KKwkgKiBUaGUgZmlyc3Qgam9iIGluIHRoZSBsaXN0IGlzIHRo ZSBvbmUgY3VycmVudGx5IHByb2dyYW1tZWQKKwkgKiBpbnRvIGN0MGNhL2N0MWNhIGZvciBleGVj dXRpb24uCisJICovCisJc3RydWN0IGxpc3RfaGVhZCBqb2JfbGlzdDsKKwkvKiBMaXN0IG9mIHRo ZSBmaW5pc2hlZCB2YzRfZXhlY19pbmZvcyB3YWl0aW5nIHRvIGJlIGZyZWVkIGJ5CisJICogam9i X2RvbmVfd29yay4KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGpvYl9kb25lX2xpc3Q7CisJLyog U3BpbmxvY2sgdXNlZCB0byBzeW5jaHJvbml6ZSB0aGUgam9iX2xpc3QgYW5kIHNlcW5vCisJICog YWNjZXNzZXMgYmV0d2VlbiB0aGUgSVJRIGhhbmRsZXIgYW5kIEdFTSBpb2N0bHMuCisJICovCisJ c3BpbmxvY2tfdCBqb2JfbG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBqb2Jfd2FpdF9xdWV1ZTsK KwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgam9iX2RvbmVfd29yazsKKworCS8qIFRoZSBiaW5uZXIgb3Zl cmZsb3cgbWVtb3J5IHRoYXQncyBjdXJyZW50bHkgc2V0IHVwIGluCisJICogQlBPQS9CUE9TIHJl Z2lzdGVycy4gIFdoZW4gb3ZlcmZsb3cgb2NjdXJzIGFuZCBhIG5ldyBvbmUgaXMKKwkgKiBhbGxv Y2F0ZWQsIHRoZSBwcmV2aW91cyBvbmUgd2lsbCBiZSBtb3ZlZCB0bworCSAqIHZjNC0+Y3VycmVu dF9leGVjJ3MgZnJlZSBsaXN0LgorCSAqLworCXN0cnVjdCB2YzRfYm8gKm92ZXJmbG93X21lbTsK KwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgb3ZlcmZsb3dfbWVtX3dvcms7CisKKwlzdHJ1Y3QgeworCQl1 aW50MzJfdCBsYXN0X2N0MGNhLCBsYXN0X2N0MWNhOworCQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1l cjsKKwkJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3dvcms7CisJfSBoYW5nY2hlY2s7CisKKwlz dHJ1Y3Qgc2VtYXBob3JlIGFzeW5jX21vZGVzZXQ7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVj dCB2YzRfZGV2ICoKQEAgLTYwLDYgKzEwMiw5IEBAIHRvX3ZjNF9kZXYoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKIHN0cnVjdCB2YzRfYm8gewogCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgYmFz ZTsKIAorCS8qIHNlcW5vIG9mIHRoZSBsYXN0IGpvYiB0byByZW5kZXIgdG8gdGhpcyBCTy4gKi8K Kwl1aW50NjRfdCBzZXFubzsKKwogCS8qIExpc3QgZW50cnkgZm9yIHRoZSBCTydzIHBvc2l0aW9u IGluIGVpdGhlcgogCSAqIHZjNF9leGVjX2luZm8tPnVucmVmX2xpc3Qgb3IgdmM0X2Rldi0+Ym9f Y2FjaGUudGltZV9saXN0CiAJICovCkBAIC0xMzAsNiArMTc1LDEwOSBAQCB0b192YzRfZW5jb2Rl cihzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCiAjZGVmaW5lIEhWU19SRUFEKG9mZnNldCkg cmVhZGwodmM0LT5odnMtPnJlZ3MgKyBvZmZzZXQpCiAjZGVmaW5lIEhWU19XUklURShvZmZzZXQs IHZhbCkgd3JpdGVsKHZhbCwgdmM0LT5odnMtPnJlZ3MgKyBvZmZzZXQpCiAKK2VudW0gdmM0X2Jv X21vZGUgeworCVZDNF9NT0RFX1VOREVDSURFRCwKKwlWQzRfTU9ERV9SRU5ERVIsCisJVkM0X01P REVfU0hBREVSLAorfTsKKworc3RydWN0IHZjNF9ib19leGVjX3N0YXRlIHsKKwlzdHJ1Y3QgZHJt X2dlbV9jbWFfb2JqZWN0ICpibzsKKwllbnVtIHZjNF9ib19tb2RlIG1vZGU7Cit9OworCitzdHJ1 Y3QgdmM0X2V4ZWNfaW5mbyB7CisJLyogU2VxdWVuY2UgbnVtYmVyIGZvciB0aGlzIGJpbi9yZW5k ZXIgam9iLiAqLworCXVpbnQ2NF90IHNlcW5vOworCisJLyogS2VybmVsLXNwYWNlIGNvcHkgb2Yg dGhlIGlvY3RsIGFyZ3VtZW50cyAqLworCXN0cnVjdCBkcm1fdmM0X3N1Ym1pdF9jbCAqYXJnczsK KworCS8qIFRoaXMgaXMgdGhlIGFycmF5IG9mIEJPcyB0aGF0IHdlcmUgbG9va2VkIHVwIGF0IHRo ZSBzdGFydCBvZiBleGVjLgorCSAqIENvbW1hbmQgdmFsaWRhdGlvbiB3aWxsIHVzZSBpbmRpY2Vz IGludG8gdGhpcyBhcnJheS4KKwkgKi8KKwlzdHJ1Y3QgdmM0X2JvX2V4ZWNfc3RhdGUgKmJvOwor CXVpbnQzMl90IGJvX2NvdW50OworCisJLyogUG9pbnRlcnMgZm9yIG91ciBwb3NpdGlvbiBpbiB2 YzQtPmpvYl9saXN0ICovCisJc3RydWN0IGxpc3RfaGVhZCBoZWFkOworCisJLyogTGlzdCBvZiBv dGhlciBCT3MgdXNlZCBpbiB0aGUgam9iIHRoYXQgbmVlZCB0byBiZSByZWxlYXNlZAorCSAqIG9u Y2UgdGhlIGpvYiBpcyBjb21wbGV0ZS4KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHVucmVmX2xp c3Q7CisKKwkvKiBDdXJyZW50IHVudmFsaWRhdGVkIGluZGljZXMgaW50byBAYm8gbG9hZGVkIGJ5 IHRoZSBub24taGFyZHdhcmUKKwkgKiBWQzRfUEFDS0VUX0dFTV9IQU5ETEVTLgorCSAqLworCXVp bnQzMl90IGJvX2luZGV4WzJdOworCisJLyogVGhpcyBpcyB0aGUgQk8gd2hlcmUgd2Ugc3RvcmUg dGhlIHZhbGlkYXRlZCBjb21tYW5kIGxpc3RzLCBzaGFkZXIKKwkgKiByZWNvcmRzLCBhbmQgdW5p Zm9ybXMuCisJICovCisJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqZXhlY19ibzsKKworCS8q KgorCSAqIFRoaXMgdHJhY2tzIHRoZSBwZXItc2hhZGVyLXJlY29yZCBzdGF0ZSAocGFja2V0IDY0 KSB0aGF0CisJICogZGV0ZXJtaW5lcyB0aGUgbGVuZ3RoIG9mIHRoZSBzaGFkZXIgcmVjb3JkIGFu ZCB0aGUgb2Zmc2V0CisJICogaXQncyBleHBlY3RlZCB0byBiZSBmb3VuZCBhdC4gIEl0IGdldHMg cmVhZCBpbiBmcm9tIHRoZQorCSAqIGNvbW1hbmQgbGlzdHMuCisJICovCisJc3RydWN0IHZjNF9z aGFkZXJfc3RhdGUgeworCQl1aW50OF90IHBhY2tldDsKKwkJdWludDMyX3QgYWRkcjsKKwkJLyog TWF4aW11bSB2ZXJ0ZXggaW5kZXggcmVmZXJlbmNlZCBieSBhbnkgcHJpbWl0aXZlIHVzaW5nIHRo aXMKKwkJICogc2hhZGVyIHN0YXRlLgorCQkgKi8KKwkJdWludDMyX3QgbWF4X2luZGV4OworCX0g KnNoYWRlcl9zdGF0ZTsKKworCS8qKiBIb3cgbWFueSBzaGFkZXIgc3RhdGVzIHRoZSB1c2VyIGRl Y2xhcmVkIHRoZXkgd2VyZSB1c2luZy4gKi8KKwl1aW50MzJfdCBzaGFkZXJfc3RhdGVfc2l6ZTsK KwkvKiogSG93IG1hbnkgc2hhZGVyIHN0YXRlIHJlY29yZHMgdGhlIHZhbGlkYXRvciBoYXMgc2Vl bi4gKi8KKwl1aW50MzJfdCBzaGFkZXJfc3RhdGVfY291bnQ7CisKKwlib29sIGZvdW5kX3RpbGVf YmlubmluZ19tb2RlX2NvbmZpZ19wYWNrZXQ7CisJYm9vbCBmb3VuZF9zdGFydF90aWxlX2Jpbm5p bmdfcGFja2V0OworCWJvb2wgZm91bmRfaW5jcmVtZW50X3NlbWFwaG9yZV9wYWNrZXQ7CisJdWlu dDhfdCBiaW5fdGlsZXNfeCwgYmluX3RpbGVzX3k7CisJc3RydWN0IGRybV9nZW1fY21hX29iamVj dCAqdGlsZV9ibzsKKwl1aW50MzJfdCB0aWxlX2FsbG9jX29mZnNldDsKKworCS8qKgorCSAqIENv bXB1dGVkIGFkZHJlc3NlcyBwb2ludGluZyBpbnRvIGV4ZWNfYm8gd2hlcmUgd2Ugc3RhcnQgdGhl CisJICogYmluIHRocmVhZCAoY3QwKSBhbmQgcmVuZGVyIHRocmVhZCAoY3QxKS4KKwkgKi8KKwl1 aW50MzJfdCBjdDBjYSwgY3QwZWE7CisJdWludDMyX3QgY3QxY2EsIGN0MWVhOworCisJLyogUG9p bnRlcnMgdG8gdGhlIHNoYWRlciByZWNzLiAgVGhlc2UgcGFkZHIgZ2V0cyBpbmNyZW1lbnRlZCBh cyBDTAorCSAqIHBhY2tldHMgYXJlIHJlbG9jYXRlZCBpbiB2YWxpZGF0ZV9nbF9zaGFkZXJfc3Rh dGUsIGFuZCB0aGUgdmFkZHJzCisJICogKHUgYW5kIHYpIGdldCBpbmNyZW1lbnRlZCBhbmQgc2l6 ZSBkZWNyZW1lbnRlZCBhcyB0aGUgc2hhZGVyIHJlY3MKKwkgKiB0aGVtc2VsdmVzIGFyZSB2YWxp ZGF0ZWQuCisJICovCisJdm9pZCAqc2hhZGVyX3JlY191OworCXZvaWQgKnNoYWRlcl9yZWNfdjsK Kwl1aW50MzJfdCBzaGFkZXJfcmVjX3A7CisJdWludDMyX3Qgc2hhZGVyX3JlY19zaXplOworCisJ LyogUG9pbnRlcnMgdG8gdGhlIHVuaWZvcm0gZGF0YS4gIFRoZXNlIHBvaW50ZXJzIGFyZSBpbmNy ZW1lbnRlZCwgYW5kCisJICogc2l6ZSBkZWNyZW1lbnRlZCwgYXMgZWFjaCBiYXRjaCBvZiB1bmlm b3JtcyBpcyB1cGxvYWRlZC4KKwkgKi8KKwl2b2lkICp1bmlmb3Jtc191OworCXZvaWQgKnVuaWZv cm1zX3Y7CisJdWludDMyX3QgdW5pZm9ybXNfcDsKKwl1aW50MzJfdCB1bmlmb3Jtc19zaXplOwor fTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmM0X2V4ZWNfaW5mbyAqCit2YzRfZmlyc3Rfam9i KHN0cnVjdCB2YzRfZGV2ICp2YzQpCit7CisJaWYgKGxpc3RfZW1wdHkoJnZjNC0+am9iX2xpc3Qp KQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gbGlzdF9maXJzdF9lbnRyeSgmdmM0LT5qb2JfbGlz dCwgc3RydWN0IHZjNF9leGVjX2luZm8sIGhlYWQpOworfQorCiAvKioKICAqIHN0cnVjdCB2YzRf dGV4dHVyZV9zYW1wbGVfaW5mbyAtIHNhdmVzIHRoZSBvZmZzZXRzIGludG8gdGhlIFVCTyBmb3Ig dGV4dHVyZQogICogc2V0dXAgcGFyYW1ldGVycy4KQEAgLTIzMSwxMCArMzc5LDMxIEBAIHZvaWQg dmM0X2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CiAvKiB2YzRfZHJ2 LmMgKi8KIHZvaWQgX19pb21lbSAqdmM0X2lvcmVtYXBfcmVncyhzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpkZXYsIGludCBpbmRleCk7CiAKKy8qIHZjNF9nZW0uYyAqLwordm9pZCB2YzRfZ2VtX2lu aXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2b2lkIHZjNF9nZW1fZGVzdHJveShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KTsKK2ludCB2YzRfc3VibWl0X2NsX2lvY3RsKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Citp bnQgdmM0X3dhaXRfc2Vxbm9faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0 YSwKKwkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgdmM0X3dhaXRfYm9faW9j dGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgc3RydWN0IGRy bV9maWxlICpmaWxlX3ByaXYpOwordm9pZCB2YzRfc3VibWl0X25leHRfam9iKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpOworaW50IHZjNF93YWl0X2Zvcl9zZXFubyhzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB1aW50NjRfdCBzZXFubywKKwkJICAgICAgIHVpbnQ2NF90IHRpbWVvdXRfbnMsIGJvb2wg aW50ZXJydXB0aWJsZSk7Cit2b2lkIHZjNF9qb2JfaGFuZGxlX2NvbXBsZXRlZChzdHJ1Y3QgdmM0 X2RldiAqdmM0KTsKKwogLyogdmM0X2hkbWkuYyAqLwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9k cml2ZXIgdmM0X2hkbWlfZHJpdmVyOwogaW50IHZjNF9oZG1pX2RlYnVnZnNfcmVncyhzdHJ1Y3Qg c2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCk7CiAKKy8qIHZjNF9pcnEuYyAqLworaXJxcmV0dXJu X3QgdmM0X2lycShpbnQgaXJxLCB2b2lkICphcmcpOwordm9pZCB2YzRfaXJxX3ByZWluc3RhbGwo c3RydWN0IGRybV9kZXZpY2UgKmRldik7CitpbnQgdmM0X2lycV9wb3N0aW5zdGFsbChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQgdmM0X2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZp Y2UgKmRldik7Cit2b2lkIHZjNF9pcnFfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisK IC8qIHZjNF9odnMuYyAqLwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdmM0X2h2c19k cml2ZXI7CiB2b2lkIHZjNF9odnNfZHVtcF9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsK QEAgLTI1Myw2ICs0MjIsMjkgQEAgdTMyIHZjNF9wbGFuZV9kbGlzdF9zaXplKHN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgKnN0YXRlKTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZjNF92 M2RfZHJpdmVyOwogaW50IHZjNF92M2RfZGVidWdmc19pZGVudChzdHJ1Y3Qgc2VxX2ZpbGUgKm0s IHZvaWQgKnVudXNlZCk7CiBpbnQgdmM0X3YzZF9kZWJ1Z2ZzX3JlZ3Moc3RydWN0IHNlcV9maWxl ICptLCB2b2lkICp1bnVzZWQpOworaW50IHZjNF92M2Rfc2V0X3Bvd2VyKHN0cnVjdCB2YzRfZGV2 ICp2YzQsIGJvb2wgb24pOworCisvKiB2YzRfdmFsaWRhdGUuYyAqLworaW50Cit2YzRfdmFsaWRh dGVfYmluX2NsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSAgICB2b2lkICp2YWxpZGF0ZWQs CisJCSAgICB2b2lkICp1bnZhbGlkYXRlZCwKKwkJICAgIHN0cnVjdCB2YzRfZXhlY19pbmZvICpl eGVjKTsKKworaW50Cit2YzRfdmFsaWRhdGVfc2hhZGVyX3JlY3Moc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgc3RydWN0IHZjNF9leGVjX2luZm8gKmV4ZWMpOworCitib29sIHZjNF91c2VfYm8oc3Ry dWN0IHZjNF9leGVjX2luZm8gKmV4ZWMsCisJCXVpbnQzMl90IGhpbmRleCwKKwkJZW51bSB2YzRf Ym9fbW9kZSBtb2RlLAorCQlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICoqb2JqKTsKKworaW50 IHZjNF9nZXRfcmNsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCB2YzRfZXhlY19pbmZv ICpleGVjKTsKKworYm9vbCB2YzRfY2hlY2tfdGV4X3NpemUoc3RydWN0IHZjNF9leGVjX2luZm8g KmV4ZWMsCisJCQlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpmYm8sCisJCQl1aW50MzJfdCBv ZmZzZXQsIHVpbnQ4X3QgdGlsaW5nX2Zvcm1hdCwKKwkJCXVpbnQzMl90IHdpZHRoLCB1aW50MzJf dCBoZWlnaHQsIHVpbnQ4X3QgY3BwKTsKIAogLyogdmM0X3ZhbGlkYXRlX3NoYWRlci5jICovCiBz dHJ1Y3QgdmM0X3ZhbGlkYXRlZF9zaGFkZXJfaW5mbyAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vdmM0L3ZjNF9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2dlbS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkY2IwMTgKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9nZW0uYwpAQCAtMCwwICsxLDY0MCBAQAorLyoKKyAq IENvcHlyaWdodCDCqSAyMDE0IEJyb2FkY29tCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkg Z3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNv cHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0 aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwK KyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVy c29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0 CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3Rh bnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUg SVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVT UyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRI T1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VT IE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICog SU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNs dWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4K KyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSAidWFwaS9kcm0vdmM0X2RybS5oIgor I2luY2x1ZGUgInZjNF9kcnYuaCIKKyNpbmNsdWRlICJ2YzRfcmVncy5oIgorI2luY2x1ZGUgInZj NF90cmFjZS5oIgorCitzdGF0aWMgdm9pZAordmM0X3F1ZXVlX2hhbmdjaGVjayhzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7 CisKKwltb2RfdGltZXIoJnZjNC0+aGFuZ2NoZWNrLnRpbWVyLAorCQkgIHJvdW5kX2ppZmZpZXNf dXAoamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSkpOworfQorCitzdGF0aWMgdm9pZAor dmM0X3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHZjNF9kZXYgKnZj NCA9IHRvX3ZjNF9kZXYoZGV2KTsKKworCURSTV9JTkZPKCJSZXNldHRpbmcgR1BVLlxuIik7CisJ dmM0X3YzZF9zZXRfcG93ZXIodmM0LCBmYWxzZSk7CisJdmM0X3YzZF9zZXRfcG93ZXIodmM0LCB0 cnVlKTsKKworCXZjNF9pcnFfcmVzZXQoZGV2KTsKKworCS8qIFJlYXJtIHRoZSBoYW5nY2hlY2sg LS0gYW5vdGhlciBqb2IgbWlnaHQgaGF2ZSBiZWVuIHdhaXRpbmcKKwkgKiBmb3Igb3VyIGh1bmcg b25lIHRvIGdldCBraWNrZWQgb2ZmLCBhbmQgdmM0X2lycV9yZXNldCgpCisJICogd291bGQgaGF2 ZSBzdGFydGVkIGl0LgorCSAqLworCXZjNF9xdWV1ZV9oYW5nY2hlY2soZGV2KTsKK30KKworc3Rh dGljIHZvaWQKK3ZjNF9yZXNldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlz dHJ1Y3QgdmM0X2RldiAqdmM0ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2YzRfZGV2 LCBoYW5nY2hlY2sucmVzZXRfd29yayk7CisKKwl2YzRfcmVzZXQodmM0LT5kZXYpOworfQorCitz dGF0aWMgdm9pZAordmM0X2hhbmdjaGVja19lbGFwc2VkKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sK KwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gKHN0cnVjdCBkcm1fZGV2aWNlICopZGF0YTsKKwlz dHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOworCXVpbnQzMl90IGN0MGNhLCBj dDFjYTsKKworCS8qIElmIGlkbGUsIHdlIGNhbiBzdG9wIHdhdGNoaW5nIGZvciBoYW5ncy4gKi8K KwlpZiAobGlzdF9lbXB0eSgmdmM0LT5qb2JfbGlzdCkpCisJCXJldHVybjsKKworCWN0MGNhID0g VjNEX1JFQUQoVjNEX0NUTkNBKDApKTsKKwljdDFjYSA9IFYzRF9SRUFEKFYzRF9DVE5DQSgxKSk7 CisKKwkvKiBJZiB3ZSd2ZSBtYWRlIGFueSBwcm9ncmVzcyBpbiBleGVjdXRpb24sIHJlYXJtIHRo ZSB0aW1lcgorCSAqIGFuZCB3YWl0LgorCSAqLworCWlmIChjdDBjYSAhPSB2YzQtPmhhbmdjaGVj ay5sYXN0X2N0MGNhIHx8CisJICAgIGN0MWNhICE9IHZjNC0+aGFuZ2NoZWNrLmxhc3RfY3QxY2Ep IHsKKwkJdmM0LT5oYW5nY2hlY2subGFzdF9jdDBjYSA9IGN0MGNhOworCQl2YzQtPmhhbmdjaGVj ay5sYXN0X2N0MWNhID0gY3QxY2E7CisJCXZjNF9xdWV1ZV9oYW5nY2hlY2soZGV2KTsKKwkJcmV0 dXJuOworCX0KKworCS8qIFdlJ3ZlIGdvbmUgdG9vIGxvbmcgd2l0aCBubyBwcm9ncmVzcywgcmVz ZXQuICBUaGlzIGhhcyB0bworCSAqIGJlIGRvbmUgZnJvbSBhIHdvcmsgc3RydWN0LCBzaW5jZSBy ZXNldHRpbmcgY2FuIHNsZWVwIGFuZAorCSAqIHRoaXMgdGltZXIgaG9vayBpc24ndCBhbGxvd2Vk IHRvLgorCSAqLworCXNjaGVkdWxlX3dvcmsoJnZjNC0+aGFuZ2NoZWNrLnJlc2V0X3dvcmspOwor fQorCitzdGF0aWMgdm9pZAorc3VibWl0X2NsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQz Ml90IHRocmVhZCwgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGVuZCkKK3sKKwlzdHJ1Y3QgdmM0 X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOworCisJLyogU2V0IHRoZSBjdXJyZW50IGFuZCBl bmQgYWRkcmVzcyBvZiB0aGUgY29udHJvbCBsaXN0LgorCSAqIFdyaXRpbmcgdGhlIGVuZCByZWdp c3RlciBpcyB3aGF0IHN0YXJ0cyB0aGUgam9iLgorCSAqLworCVYzRF9XUklURShWM0RfQ1ROQ0Eo dGhyZWFkKSwgc3RhcnQpOworCVYzRF9XUklURShWM0RfQ1RORUEodGhyZWFkKSwgZW5kKTsKK30K KworaW50Cit2YzRfd2FpdF9mb3Jfc2Vxbm8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDY0 X3Qgc2Vxbm8sIHVpbnQ2NF90IHRpbWVvdXRfbnMsCisJCSAgIGJvb2wgaW50ZXJydXB0aWJsZSkK K3sKKwlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOworCWludCByZXQgPSAw OworCXVuc2lnbmVkIGxvbmcgdGltZW91dF9leHBpcmU7CisJREVGSU5FX1dBSVQod2FpdCk7CisK KwlpZiAodmM0LT5maW5pc2hlZF9zZXFubyA+PSBzZXFubykKKwkJcmV0dXJuIDA7CisKKwlpZiAo dGltZW91dF9ucyA9PSAwKQorCQlyZXR1cm4gLUVUSU1FOworCisJdGltZW91dF9leHBpcmUgPSBq aWZmaWVzICsgbnNlY3NfdG9famlmZmllcyh0aW1lb3V0X25zKTsKKworCXRyYWNlX3ZjNF93YWl0 X2Zvcl9zZXFub19iZWdpbihkZXYsIHNlcW5vLCB0aW1lb3V0X25zKTsKKwlmb3IgKDs7KSB7CisJ CXByZXBhcmVfdG9fd2FpdCgmdmM0LT5qb2Jfd2FpdF9xdWV1ZSwgJndhaXQsCisJCQkJaW50ZXJy dXB0aWJsZSA/IFRBU0tfSU5URVJSVVBUSUJMRSA6CisJCQkJVEFTS19VTklOVEVSUlVQVElCTEUp OworCisJCWlmIChpbnRlcnJ1cHRpYmxlICYmIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJ CQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh2YzQtPmZpbmlz aGVkX3NlcW5vID49IHNlcW5vKQorCQkJYnJlYWs7CisKKwkJaWYgKHRpbWVvdXRfbnMgIT0gfjB1 bGwpIHsKKwkJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRpbWVvdXRfZXhwaXJlKSkgewor CQkJCXJldCA9IC1FVElNRTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXNjaGVkdWxlX3RpbWVvdXQo dGltZW91dF9leHBpcmUgLSBqaWZmaWVzKTsKKwkJfSBlbHNlIHsKKwkJCXNjaGVkdWxlKCk7CisJ CX0KKwl9CisKKwlmaW5pc2hfd2FpdCgmdmM0LT5qb2Jfd2FpdF9xdWV1ZSwgJndhaXQpOworCXRy YWNlX3ZjNF93YWl0X2Zvcl9zZXFub19lbmQoZGV2LCBzZXFubyk7CisKKwlpZiAocmV0ICYmIHJl dCAhPSAtRVJFU1RBUlRTWVMpIHsKKwkJRFJNX0VSUk9SKCJ0aW1lb3V0IHdhaXRpbmcgZm9yIHJl bmRlciB0aHJlYWQgaWRsZVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkCit2YzRfZmx1c2hfY2FjaGVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Cit7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKKworCS8qIEZsdXNo IHRoZSBHUFUgTDIgY2FjaGVzLiAgVGhlc2UgY2FjaGVzIHNpdCBvbiB0b3Agb2Ygc3lzdGVtCisJ ICogTDMgKHRoZSAxMjhrYiBvciBzbyBzaGFyZWQgd2l0aCB0aGUgQ1BVKSwgYW5kIGFyZQorCSAq IG5vbi1hbGxvY2F0aW5nIGluIHRoZSBMMy4KKwkgKi8KKwlWM0RfV1JJVEUoVjNEX0wyQ0FDVEws CisJCSAgVjNEX0wyQ0FDVExfTDJDQ0xSKTsKKworCVYzRF9XUklURShWM0RfU0xDQUNUTCwKKwkJ ICBWQzRfU0VUX0ZJRUxEKDB4ZiwgVjNEX1NMQ0FDVExfVDFDQykgfAorCQkgIFZDNF9TRVRfRklF TEQoMHhmLCBWM0RfU0xDQUNUTF9UMENDKSB8CisJCSAgVkM0X1NFVF9GSUVMRCgweGYsIFYzRF9T TENBQ1RMX1VDQykgfAorCQkgIFZDNF9TRVRfRklFTEQoMHhmLCBWM0RfU0xDQUNUTF9JQ0MpKTsK K30KKworLyogU2V0cyB0aGUgcmVnaXN0ZXJzIGZvciB0aGUgbmV4dCBqb2IgdG8gYmUgYWN0dWFs bHkgYmUgZXhlY3V0ZWQgaW4KKyAqIHRoZSBoYXJkd2FyZS4KKyAqCisgKiBUaGUgam9iX2xvY2sg c2hvdWxkIGJlIGhlbGQgZHVyaW5nIHRoaXMuCisgKi8KK3ZvaWQKK3ZjNF9zdWJtaXRfbmV4dF9q b2Ioc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9f dmM0X2RldihkZXYpOworCXN0cnVjdCB2YzRfZXhlY19pbmZvICpleGVjID0gdmM0X2ZpcnN0X2pv Yih2YzQpOworCisJaWYgKCFleGVjKQorCQlyZXR1cm47CisKKwl2YzRfZmx1c2hfY2FjaGVzKGRl dik7CisKKwkvKiBEaXNhYmxlIHRoZSBiaW5uZXIncyBwcmUtbG9hZGVkIG92ZXJmbG93IG1lbW9y eSBhZGRyZXNzICovCisJVjNEX1dSSVRFKFYzRF9CUE9BLCAwKTsKKwlWM0RfV1JJVEUoVjNEX0JQ T1MsIDApOworCisJaWYgKGV4ZWMtPmN0MGNhICE9IGV4ZWMtPmN0MGVhKQorCQlzdWJtaXRfY2wo ZGV2LCAwLCBleGVjLT5jdDBjYSwgZXhlYy0+Y3QwZWEpOworCXN1Ym1pdF9jbChkZXYsIDEsIGV4 ZWMtPmN0MWNhLCBleGVjLT5jdDFlYSk7Cit9CisKK3N0YXRpYyB2b2lkCit2YzRfdXBkYXRlX2Jv X3NlcW5vcyhzdHJ1Y3QgdmM0X2V4ZWNfaW5mbyAqZXhlYywgdWludDY0X3Qgc2Vxbm8pCit7CisJ c3RydWN0IHZjNF9ibyAqYm87CisJdW5zaWduZWQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBleGVj LT5ib19jb3VudDsgaSsrKSB7CisJCWJvID0gdG9fdmM0X2JvKCZleGVjLT5ib1tpXS5iby0+YmFz ZSk7CisJCWJvLT5zZXFubyA9IHNlcW5vOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYm8s ICZleGVjLT51bnJlZl9saXN0LCB1bnJlZl9oZWFkKSB7CisJCWJvLT5zZXFubyA9IHNlcW5vOwor CX0KK30KKworLyogUXVldWVzIGEgc3RydWN0IHZjNF9leGVjX2luZm8gZm9yIGV4ZWN1dGlvbi4g IElmIG5vIGpvYiBpcworICogY3VycmVudGx5IGV4ZWN1dGluZywgdGhlbiBzdWJtaXRzIGl0Lgor ICoKKyAqIFVubGlrZSBtb3N0IEdQVXMsIG91ciBoYXJkd2FyZSBvbmx5IGhhbmRsZXMgb25lIGNv bW1hbmQgbGlzdCBhdCBhCisgKiB0aW1lLiAgVG8gcXVldWUgbXVsdGlwbGUgam9icyBhdCBvbmNl LCB3ZSdkIG5lZWQgdG8gZWRpdCB0aGUKKyAqIHByZXZpb3VzIGNvbW1hbmQgbGlzdCB0byBoYXZl IGEganVtcCB0byB0aGUgbmV3IG9uZSBhdCB0aGUgZW5kLCBhbmQKKyAqIHRoZW4gYnVtcCB0aGUg ZW5kIGFkZHJlc3MuICBUaGF0J3MgYSBjaGFuZ2UgZm9yIGEgbGF0ZXIgZGF0ZSwKKyAqIHRob3Vn aC4KKyAqLworc3RhdGljIHZvaWQKK3ZjNF9xdWV1ZV9zdWJtaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgc3RydWN0IHZjNF9leGVjX2luZm8gKmV4ZWMpCit7CisJc3RydWN0IHZjNF9kZXYgKnZj NCA9IHRvX3ZjNF9kZXYoZGV2KTsKKwl1aW50NjRfdCBzZXFubzsKKwl1bnNpZ25lZCBsb25nIGly cWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZjNC0+am9iX2xvY2ssIGlycWZsYWdzKTsK KworCXNlcW5vID0gKyt2YzQtPmVtaXRfc2Vxbm87CisJZXhlYy0+c2Vxbm8gPSBzZXFubzsKKwl2 YzRfdXBkYXRlX2JvX3NlcW5vcyhleGVjLCBzZXFubyk7CisKKwlsaXN0X2FkZF90YWlsKCZleGVj LT5oZWFkLCAmdmM0LT5qb2JfbGlzdCk7CisKKwkvKiBJZiBubyBqb2Igd2FzIGV4ZWN1dGluZywg a2ljayBvdXJzIG9mZi4gIE90aGVyd2lzZSwgaXQnbGwKKwkgKiBnZXQgc3RhcnRlZCB3aGVuIHRo ZSBwcmV2aW91cyBqb2IncyBmcmFtZSBkb25lIGludGVycnVwdAorCSAqIG9jY3Vycy4KKwkgKi8K KwlpZiAodmM0X2ZpcnN0X2pvYih2YzQpID09IGV4ZWMpIHsKKwkJdmM0X3N1Ym1pdF9uZXh0X2pv YihkZXYpOworCQl2YzRfcXVldWVfaGFuZ2NoZWNrKGRldik7CisJfQorCisJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmdmM0LT5qb2JfbG9jaywgaXJxZmxhZ3MpOworfQorCisvKioKKyAqIExvb2tz IHVwIGEgYnVuY2ggb2YgR0VNIGhhbmRsZXMgZm9yIEJPcyBhbmQgc3RvcmVzIHRoZSBhcnJheSBm b3IKKyAqIHVzZSBpbiB0aGUgY29tbWFuZCB2YWxpZGF0b3IgdGhhdCBhY3R1YWxseSB3cml0ZXMg cmVsb2NhdGVkCisgKiBhZGRyZXNzZXMgcG9pbnRpbmcgdG8gdGhlbS4KKyAqLworc3RhdGljIGlu dAordmM0X2NsX2xvb2t1cF9ib3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJICBzdHJ1Y3QgdmM0X2V4ZWNfaW5mbyAqZXhlYykKK3sK KwlzdHJ1Y3QgZHJtX3ZjNF9zdWJtaXRfY2wgKmFyZ3MgPSBleGVjLT5hcmdzOworCXVpbnQzMl90 ICpoYW5kbGVzOworCWludCByZXQgPSAwOworCWludCBpOworCisJZXhlYy0+Ym9fY291bnQgPSBh cmdzLT5ib19oYW5kbGVfY291bnQ7CisKKwlpZiAoIWV4ZWMtPmJvX2NvdW50KSB7CisJCS8qIFNl ZSBjb21tZW50IG9uIGJvX2luZGV4IGZvciB3aHkgd2UgaGF2ZSB0byBjaGVjaworCQkgKiB0aGlz LgorCQkgKi8KKwkJRFJNX0VSUk9SKCJSZW5kZXJpbmcgcmVxdWlyZXMgQk9zIHRvIHZhbGlkYXRl XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZXhlYy0+Ym8gPSBrY2FsbG9jKGV4ZWMt PmJvX2NvdW50LCBzaXplb2Yoc3RydWN0IHZjNF9ib19leGVjX3N0YXRlKSwKKwkJCSAgIEdGUF9L RVJORUwpOworCWlmICghZXhlYy0+Ym8pIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2Nh dGUgdmFsaWRhdGVkIEJPIHBvaW50ZXJzXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJ aGFuZGxlcyA9IGRybV9tYWxsb2NfYWIoZXhlYy0+Ym9fY291bnQsIHNpemVvZih1aW50MzJfdCkp OworCWlmICghaGFuZGxlcykgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBpbmNv bWluZyBHRU0gaGFuZGxlc1xuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlyZXQgPSBjb3B5X2Zy b21fdXNlcihoYW5kbGVzLAorCQkJICAgICAodm9pZCBfX3VzZXIgKikodWludHB0cl90KWFyZ3Mt PmJvX2hhbmRsZXMsCisJCQkgICAgIGV4ZWMtPmJvX2NvdW50ICogc2l6ZW9mKHVpbnQzMl90KSk7 CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBjb3B5IGluIEdFTSBoYW5kbGVz XG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCXNwaW5fbG9jaygmZmlsZV9wcml2LT50YWJsZV9s b2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgZXhlYy0+Ym9fY291bnQ7IGkrKykgeworCQlzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKmJvID0gaWRyX2ZpbmQoJmZpbGVfcHJpdi0+b2JqZWN0X2lkciwKKwkJ CQkJCSAgICAgaGFuZGxlc1tpXSk7CisJCWlmICghYm8pIHsKKwkJCURSTV9FUlJPUigiRmFpbGVk IHRvIGxvb2sgdXAgR0VNIEJPICVkOiAlZFxuIiwKKwkJCQkgIGksIGhhbmRsZXNbaV0pOworCQkJ cmV0ID0gLUVJTlZBTDsKKwkJCXNwaW5fdW5sb2NrKCZmaWxlX3ByaXYtPnRhYmxlX2xvY2spOwor CQkJZ290byBmYWlsOworCQl9CisJCWRybV9nZW1fb2JqZWN0X3JlZmVyZW5jZShibyk7CisJCWV4 ZWMtPmJvW2ldLmJvID0gKHN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKilibzsKKwl9CisJc3Bp bl91bmxvY2soJmZpbGVfcHJpdi0+dGFibGVfbG9jayk7CisKK2ZhaWw6CisJa2ZyZWUoaGFuZGxl cyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3ZjNF9nZXRfYmNsKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHN0cnVjdCB2YzRfZXhlY19pbmZvICpleGVjKQoreworCXN0cnVjdCBkcm1f dmM0X3N1Ym1pdF9jbCAqYXJncyA9IGV4ZWMtPmFyZ3M7CisJdm9pZCAqdGVtcCA9IE5VTEw7CisJ dm9pZCAqYmluOworCWludCByZXQgPSAwOworCXVpbnQzMl90IGJpbl9vZmZzZXQgPSAwOworCXVp bnQzMl90IHNoYWRlcl9yZWNfb2Zmc2V0ID0gcm91bmR1cChiaW5fb2Zmc2V0ICsgYXJncy0+Ymlu X2NsX3NpemUsCisJCQkJCSAgICAgMTYpOworCXVpbnQzMl90IHVuaWZvcm1zX29mZnNldCA9IHNo YWRlcl9yZWNfb2Zmc2V0ICsgYXJncy0+c2hhZGVyX3JlY19zaXplOworCXVpbnQzMl90IGV4ZWNf c2l6ZSA9IHVuaWZvcm1zX29mZnNldCArIGFyZ3MtPnVuaWZvcm1zX3NpemU7CisJdWludDMyX3Qg dGVtcF9zaXplID0gZXhlY19zaXplICsgKHNpemVvZihzdHJ1Y3QgdmM0X3NoYWRlcl9zdGF0ZSkg KgorCQkJCQkgIGFyZ3MtPnNoYWRlcl9yZWNfY291bnQpOworCXN0cnVjdCB2YzRfYm8gKmJvOwor CisJaWYgKHVuaWZvcm1zX29mZnNldCA8IHNoYWRlcl9yZWNfb2Zmc2V0IHx8CisJICAgIGV4ZWNf c2l6ZSA8IHVuaWZvcm1zX29mZnNldCB8fAorCSAgICBhcmdzLT5zaGFkZXJfcmVjX2NvdW50ID49 IChVSU5UX01BWCAvCisJCQkJCSAgc2l6ZW9mKHN0cnVjdCB2YzRfc2hhZGVyX3N0YXRlKSkgfHwK KwkgICAgdGVtcF9zaXplIDwgZXhlY19zaXplKSB7CisJCURSTV9FUlJPUigib3ZlcmZsb3cgaW4g ZXhlYyBhcmd1bWVudHNcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogQWxsb2NhdGUgc3Bh Y2Ugd2hlcmUgd2UnbGwgc3RvcmUgdGhlIGNvcGllZCBpbiB1c2VyIGNvbW1hbmQgbGlzdHMKKwkg KiBhbmQgc2hhZGVyIHJlY29yZHMuCisJICoKKwkgKiBXZSBkb24ndCBqdXN0IGNvcHkgZGlyZWN0 bHkgaW50byB0aGUgQk9zIGJlY2F1c2Ugd2UgbmVlZCB0bworCSAqIHJlYWQgdGhlIGNvbnRlbnRz IGJhY2sgZm9yIHZhbGlkYXRpb24sIGFuZCBJIHRoaW5rIHRoZQorCSAqIGJvLT52YWRkciBpcyB1 bmNhY2hlZCBhY2Nlc3MuCisJICovCisJdGVtcCA9IGttYWxsb2ModGVtcF9zaXplLCBHRlBfS0VS TkVMKTsKKwlpZiAoIXRlbXApIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgc3Rv cmFnZSBmb3IgY29weWluZyAiCisJCQkgICJpbiBiaW4vcmVuZGVyIENMcy5cbiIpOworCQlyZXQg PSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCWJpbiA9IHRlbXAgKyBiaW5fb2Zmc2V0Owor CWV4ZWMtPnNoYWRlcl9yZWNfdSA9IHRlbXAgKyBzaGFkZXJfcmVjX29mZnNldDsKKwlleGVjLT51 bmlmb3Jtc191ID0gdGVtcCArIHVuaWZvcm1zX29mZnNldDsKKwlleGVjLT5zaGFkZXJfc3RhdGUg PSB0ZW1wICsgZXhlY19zaXplOworCWV4ZWMtPnNoYWRlcl9zdGF0ZV9zaXplID0gYXJncy0+c2hh ZGVyX3JlY19jb3VudDsKKworCXJldCA9IGNvcHlfZnJvbV91c2VyKGJpbiwKKwkJCSAgICAgKHZv aWQgX191c2VyICopKHVpbnRwdHJfdClhcmdzLT5iaW5fY2wsCisJCQkgICAgIGFyZ3MtPmJpbl9j bF9zaXplKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGNvcHkgaW4gYmlu IGNsXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCXJldCA9IGNvcHlfZnJvbV91c2VyKGV4ZWMt PnNoYWRlcl9yZWNfdSwKKwkJCSAgICAgKHZvaWQgX191c2VyICopKHVpbnRwdHJfdClhcmdzLT5z aGFkZXJfcmVjLAorCQkJICAgICBhcmdzLT5zaGFkZXJfcmVjX3NpemUpOworCWlmIChyZXQpIHsK KwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY29weSBpbiBzaGFkZXIgcmVjc1xuIik7CisJCWdvdG8g ZmFpbDsKKwl9CisKKwlyZXQgPSBjb3B5X2Zyb21fdXNlcihleGVjLT51bmlmb3Jtc191LAorCQkJ ICAgICAodm9pZCBfX3VzZXIgKikodWludHB0cl90KWFyZ3MtPnVuaWZvcm1zLAorCQkJICAgICBh cmdzLT51bmlmb3Jtc19zaXplKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRv IGNvcHkgaW4gdW5pZm9ybXMgY2xcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJYm8gPSB2YzRf Ym9fY3JlYXRlKGRldiwgZXhlY19zaXplLCB0cnVlKTsKKwlpZiAoIWJvKSB7CisJCURSTV9FUlJP UigiQ291bGRuJ3QgYWxsb2NhdGUgQk8gZm9yIGJpbm5pbmdcbiIpOworCQlyZXQgPSBQVFJfRVJS KGV4ZWMtPmV4ZWNfYm8pOworCQlnb3RvIGZhaWw7CisJfQorCWV4ZWMtPmV4ZWNfYm8gPSAmYm8t PmJhc2U7CisKKwlsaXN0X2FkZF90YWlsKCZ0b192YzRfYm8oJmV4ZWMtPmV4ZWNfYm8tPmJhc2Up LT51bnJlZl9oZWFkLAorCQkgICAgICAmZXhlYy0+dW5yZWZfbGlzdCk7CisKKwlleGVjLT5jdDBj YSA9IGV4ZWMtPmV4ZWNfYm8tPnBhZGRyICsgYmluX29mZnNldDsKKworCWV4ZWMtPnNoYWRlcl9y ZWNfdiA9IGV4ZWMtPmV4ZWNfYm8tPnZhZGRyICsgc2hhZGVyX3JlY19vZmZzZXQ7CisJZXhlYy0+ c2hhZGVyX3JlY19wID0gZXhlYy0+ZXhlY19iby0+cGFkZHIgKyBzaGFkZXJfcmVjX29mZnNldDsK KwlleGVjLT5zaGFkZXJfcmVjX3NpemUgPSBhcmdzLT5zaGFkZXJfcmVjX3NpemU7CisKKwlleGVj LT51bmlmb3Jtc192ID0gZXhlYy0+ZXhlY19iby0+dmFkZHIgKyB1bmlmb3Jtc19vZmZzZXQ7CisJ ZXhlYy0+dW5pZm9ybXNfcCA9IGV4ZWMtPmV4ZWNfYm8tPnBhZGRyICsgdW5pZm9ybXNfb2Zmc2V0 OworCWV4ZWMtPnVuaWZvcm1zX3NpemUgPSBhcmdzLT51bmlmb3Jtc19zaXplOworCisJcmV0ID0g dmM0X3ZhbGlkYXRlX2Jpbl9jbChkZXYsCisJCQkJICBleGVjLT5leGVjX2JvLT52YWRkciArIGJp bl9vZmZzZXQsCisJCQkJICBiaW4sCisJCQkJICBleGVjKTsKKwlpZiAocmV0KQorCQlnb3RvIGZh aWw7CisKKwlyZXQgPSB2YzRfdmFsaWRhdGVfc2hhZGVyX3JlY3MoZGV2LCBleGVjKTsKKworZmFp bDoKKwlrZnJlZSh0ZW1wKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAordmM0X2Nv bXBsZXRlX2V4ZWMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IHZjNF9leGVjX2luZm8g KmV4ZWMpCit7CisJdW5zaWduZWQgaTsKKworCS8qIE5lZWQgdGhlIHN0cnVjdCBsb2NrIGZvciBk cm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgpLiAqLworCW11dGV4X2xvY2soJmRldi0+c3RydWN0 X211dGV4KTsKKwlpZiAoZXhlYy0+Ym8pIHsKKwkJZm9yIChpID0gMDsgaSA8IGV4ZWMtPmJvX2Nv dW50OyBpKyspCisJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmZXhlYy0+Ym9baV0uYm8t PmJhc2UpOworCQlrZnJlZShleGVjLT5ibyk7CisJfQorCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZl eGVjLT51bnJlZl9saXN0KSkgeworCQlzdHJ1Y3QgdmM0X2JvICpibyA9IGxpc3RfZmlyc3RfZW50 cnkoJmV4ZWMtPnVucmVmX2xpc3QsCisJCQkJCQkgICAgIHN0cnVjdCB2YzRfYm8sIHVucmVmX2hl YWQpOworCQlsaXN0X2RlbCgmYm8tPnVucmVmX2hlYWQpOworCQlkcm1fZ2VtX29iamVjdF91bnJl ZmVyZW5jZSgmYm8tPmJhc2UuYmFzZSk7CisJfQorCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3Rf bXV0ZXgpOworCisJa2ZyZWUoZXhlYyk7Cit9CisKK3ZvaWQKK3ZjNF9qb2JfaGFuZGxlX2NvbXBs ZXRlZChzdHJ1Y3QgdmM0X2RldiAqdmM0KQoreworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisK KwlzcGluX2xvY2tfaXJxc2F2ZSgmdmM0LT5qb2JfbG9jaywgaXJxZmxhZ3MpOworCXdoaWxlICgh bGlzdF9lbXB0eSgmdmM0LT5qb2JfZG9uZV9saXN0KSkgeworCQlzdHJ1Y3QgdmM0X2V4ZWNfaW5m byAqZXhlYyA9CisJCQlsaXN0X2ZpcnN0X2VudHJ5KCZ2YzQtPmpvYl9kb25lX2xpc3QsCisJCQkJ CSBzdHJ1Y3QgdmM0X2V4ZWNfaW5mbywgaGVhZCk7CisJCWxpc3RfZGVsKCZleGVjLT5oZWFkKTsK KworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2YzQtPmpvYl9sb2NrLCBpcnFmbGFncyk7CisJ CXZjNF9jb21wbGV0ZV9leGVjKHZjNC0+ZGV2LCBleGVjKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUo JnZjNC0+am9iX2xvY2ssIGlycWZsYWdzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm dmM0LT5qb2JfbG9jaywgaXJxZmxhZ3MpOworfQorCisvKiBTY2hlZHVsZWQgd2hlbiBhbnkgam9i IGhhcyBiZWVuIGNvbXBsZXRlZCwgdGhpcyB3YWxrcyB0aGUgbGlzdCBvZgorICogam9icyB0aGF0 IGhhZCBjb21wbGV0ZWQgYW5kIHVucmVmcyB0aGVpciBCT3MgYW5kIGZyZWVzIHRoZWlyIGV4ZWMK KyAqIHN0cnVjdHMuCisgKi8KK3N0YXRpYyB2b2lkCit2YzRfam9iX2RvbmVfd29yayhzdHJ1Y3Qg d29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9CisJCWNvbnRhaW5l cl9vZih3b3JrLCBzdHJ1Y3QgdmM0X2Rldiwgam9iX2RvbmVfd29yayk7CisKKwl2YzRfam9iX2hh bmRsZV9jb21wbGV0ZWQodmM0KTsKK30KKworc3RhdGljIGludAordmM0X3dhaXRfZm9yX3NlcW5v X2lvY3RsX2hlbHBlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCXVpbnQ2NF90IHNlcW5v LAorCQkJCXVpbnQ2NF90ICp0aW1lb3V0X25zKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBq aWZmaWVzOworCWludCByZXQgPSB2YzRfd2FpdF9mb3Jfc2Vxbm8oZGV2LCBzZXFubywgKnRpbWVv dXRfbnMsIHRydWUpOworCisJaWYgKChyZXQgPT0gLUVJTlRSIHx8IHJldCA9PSAtRVJFU1RBUlRT WVMpICYmICp0aW1lb3V0X25zICE9IH4wdWxsKSB7CisJCXVpbnQ2NF90IGRlbHRhID0gamlmZmll c190b19uc2VjcyhqaWZmaWVzIC0gc3RhcnQpOworCisJCWlmICgqdGltZW91dF9ucyA+PSBkZWx0 YSkKKwkJCSp0aW1lb3V0X25zIC09IGRlbHRhOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK2lu dAordmM0X3dhaXRfc2Vxbm9faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0 YSwKKwkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX3Zj NF93YWl0X3NlcW5vICphcmdzID0gZGF0YTsKKworCXJldHVybiB2YzRfd2FpdF9mb3Jfc2Vxbm9f aW9jdGxfaGVscGVyKGRldiwgYXJncy0+c2Vxbm8sCisJCQkJCSAgICAgICAmYXJncy0+dGltZW91 dF9ucyk7Cit9CisKK2ludAordmM0X3dhaXRfYm9faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdm9pZCAqZGF0YSwKKwkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlpbnQg cmV0OworCXN0cnVjdCBkcm1fdmM0X3dhaXRfYm8gKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1f Z2VtX29iamVjdCAqZ2VtX29iajsKKwlzdHJ1Y3QgdmM0X2JvICpibzsKKworCWdlbV9vYmogPSBk cm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYg KCFnZW1fb2JqKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGxvb2sgdXAgR0VNIEJPICVkXG4i LCBhcmdzLT5oYW5kbGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJYm8gPSB0b192YzRfYm8o Z2VtX29iaik7CisKKwlyZXQgPSB2YzRfd2FpdF9mb3Jfc2Vxbm9faW9jdGxfaGVscGVyKGRldiwg Ym8tPnNlcW5vLAorCQkJCQkgICAgICAmYXJncy0+dGltZW91dF9ucyk7CisKKwlkcm1fZ2VtX29i amVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnZW1fb2JqKTsKKwlyZXR1cm4gcmV0OworfQorCisv KioKKyAqIFN1Ym1pdHMgYSBjb21tYW5kIGxpc3QgdG8gdGhlIFZDNC4KKyAqCisgKiBUaGlzIGlz IHdoYXQgaXMgY2FsbGVkIGJhdGNoYnVmZmVyIGVtaXR0aW5nIG9uIG90aGVyIGhhcmR3YXJlLgor ICovCitpbnQKK3ZjNF9zdWJtaXRfY2xfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9p ZCAqZGF0YSwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCB2 YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7CisJc3RydWN0IGRybV92YzRfc3VibWl0X2Ns ICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgdmM0X2V4ZWNfaW5mbyAqZXhlYzsKKwlpbnQgcmV0Owor CisJaWYgKChhcmdzLT5mbGFncyAmIH5WQzRfU1VCTUlUX0NMX1VTRV9DTEVBUl9DT0xPUikgIT0g MCkgeworCQlEUk1fRVJST1IoIlVua25vd24gZmxhZ3M6IDB4JTAyeFxuIiwgYXJncy0+ZmxhZ3Mp OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlleGVjID0ga2NhbGxvYygxLCBzaXplb2YoKmV4 ZWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWV4ZWMpIHsKKwkJRFJNX0VSUk9SKCJtYWxsb2MgZmFp bHVyZSBvbiBleGVjIHN0cnVjdFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWV4ZWMt PmFyZ3MgPSBhcmdzOworCUlOSVRfTElTVF9IRUFEKCZleGVjLT51bnJlZl9saXN0KTsKKworCXJl dCA9IHZjNF9jbF9sb29rdXBfYm9zKGRldiwgZmlsZV9wcml2LCBleGVjKTsKKwlpZiAocmV0KQor CQlnb3RvIGZhaWw7CisKKwlpZiAoZXhlYy0+YXJncy0+YmluX2NsX3NpemUgIT0gMCkgeworCQly ZXQgPSB2YzRfZ2V0X2JjbChkZXYsIGV4ZWMpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsOwor CX0gZWxzZSB7CisJCWV4ZWMtPmN0MGNhID0gMDsKKwkJZXhlYy0+Y3QwZWEgPSAwOworCX0KKwor CXJldCA9IHZjNF9nZXRfcmNsKGRldiwgZXhlYyk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOwor CisJLyogQ2xlYXIgdGhpcyBvdXQgb2YgdGhlIHN0cnVjdCB3ZSdsbCBiZSBwdXR0aW5nIGluIHRo ZSBxdWV1ZSwKKwkgKiBzaW5jZSBpdCdzIHBhcnQgb2Ygb3VyIHN0YWNrLgorCSAqLworCWV4ZWMt PmFyZ3MgPSBOVUxMOworCisJdmM0X3F1ZXVlX3N1Ym1pdChkZXYsIGV4ZWMpOworCisJLyogUmV0 dXJuIHRoZSBzZXFubyBmb3Igb3VyIGpvYi4gKi8KKwlhcmdzLT5zZXFubyA9IHZjNC0+ZW1pdF9z ZXFubzsKKworCXJldHVybiAwOworCitmYWlsOgorCXZjNF9jb21wbGV0ZV9leGVjKHZjNC0+ZGV2 LCBleGVjKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQKK3ZjNF9nZW1faW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRl dik7CisKKwlJTklUX0xJU1RfSEVBRCgmdmM0LT5qb2JfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQo JnZjNC0+am9iX2RvbmVfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJnZjNC0+am9iX2xvY2spOwor CisJSU5JVF9XT1JLKCZ2YzQtPmhhbmdjaGVjay5yZXNldF93b3JrLCB2YzRfcmVzZXRfd29yayk7 CisJc2V0dXBfdGltZXIoJnZjNC0+aGFuZ2NoZWNrLnRpbWVyLAorCQkgICAgdmM0X2hhbmdjaGVj a19lbGFwc2VkLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpZGV2KTsKKworCUlOSVRfV09SSygmdmM0 LT5qb2JfZG9uZV93b3JrLCB2YzRfam9iX2RvbmVfd29yayk7Cit9CisKK3ZvaWQKK3ZjNF9nZW1f ZGVzdHJveShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2YzRfZGV2ICp2YzQg PSB0b192YzRfZGV2KGRldik7CisKKwkvKiBXYWl0aW5nIGZvciBleGVjIHRvIGZpbmlzaCB3b3Vs ZCBuZWVkIHRvIGJlIGRvbmUgYmVmb3JlCisJICogdW5yZWdpc3RlcmluZyBWM0QuCisJICovCisJ V0FSTl9PTih2YzQtPmVtaXRfc2Vxbm8gIT0gdmM0LT5maW5pc2hlZF9zZXFubyk7CisKKwkvKiBW M0Qgc2hvdWxkIGFscmVhZHkgaGF2ZSBkaXNhYmxlZCBpdHMgaW50ZXJydXB0IGFuZCBjbGVhcmVk CisJICogdGhlIG92ZXJmbG93IGFsbG9jYXRpb24gcmVnaXN0ZXJzLiAgTm93IGZyZWUgdGhlIG9i amVjdC4KKwkgKi8KKwlpZiAodmM0LT5vdmVyZmxvd19tZW0pIHsKKwkJZHJtX2dlbV9vYmplY3Rf dW5yZWZlcmVuY2VfdW5sb2NrZWQoJnZjNC0+b3ZlcmZsb3dfbWVtLT5iYXNlLmJhc2UpOworCQl2 YzQtPm92ZXJmbG93X21lbSA9IE5VTEw7CisJfQorCisJdmM0X2JvX2NhY2hlX2Rlc3Ryb3koZGV2 KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2lycS5jIGIvZHJpdmVy cy9ncHUvZHJtL3ZjNC92YzRfaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uYjY4MDYwZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2ly cS5jCkBAIC0wLDAgKzEsMjEwIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQgQnJvYWRjb20K KyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5j bHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNv ZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H CisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworLyoq IERPQzogSW50ZXJydXB0IG1hbmFnZW1lbnQgZm9yIHRoZSBWM0QgZW5naW5lLgorICoKKyAqIFdl IGhhdmUgYW4gaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAoVjNEX0lOVENUTCkgd2hpY2ggcmVw b3J0cworICogaW50ZXJydXB0cywgYW5kIHdoZXJlIHdyaXRpbmcgMSBiaXRzIGNsZWFycyB0aG9z ZSBpbnRlcnJ1cHRzLgorICogVGhlcmUgYXJlIGFsc28gYSBwYWlyIG9mIGludGVycnVwdCByZWdp c3RlcnMKKyAqIChWM0RfSU5URU5BL1YzRF9JTlRESVMpIHdoZXJlIHdyaXRpbmcgYSAxIHRvIHRo ZWlyIGJpdHMgZW5hYmxlcyBvcgorICogZGlzYWJsZXMgdGhhdCBzcGVjaWZpYyBpbnRlcnJ1cHQs IGFuZCAwcyB3cml0dGVuIGFyZSBpZ25vcmVkCisgKiAocmVhZGluZyBlaXRoZXIgb25lIHJldHVy bnMgdGhlIHNldCBvZiBlbmFibGVkIGludGVycnVwdHMpLgorICoKKyAqIFdoZW4gd2UgdGFrZSBh IHJlbmRlciBmcmFtZSBpbnRlcnJ1cHQsIHdlIG5lZWQgdG8gd2FrZSB0aGUKKyAqIHByb2Nlc3Nl cyB3YWl0aW5nIGZvciBzb21lIGZyYW1lIHRvIGJlIGRvbmUsIGFuZCBnZXQgdGhlIG5leHQgZnJh bWUKKyAqIHN1Ym1pdHRlZCBBU0FQIChzbyB0aGUgaGFyZHdhcmUgZG9lc24ndCBzaXQgaWRsZSB3 aGVuIHRoZXJlJ3Mgd29yaworICogdG8gZG8pLgorICoKKyAqIFdoZW4gd2UgdGFrZSB0aGUgYmlu bmVyIG91dCBvZiBtZW1vcnkgaW50ZXJydXB0LCB3ZSBuZWVkIHRvCisgKiBhbGxvY2F0ZSBzb21l IG5ldyBtZW1vcnkgYW5kIHBhc3MgaXQgdG8gdGhlIGJpbm5lciBzbyB0aGF0IHRoZQorICogY3Vy cmVudCBqb2IgY2FuIG1ha2UgcHJvZ3Jlc3MuCisgKi8KKworI2luY2x1ZGUgInZjNF9kcnYuaCIK KyNpbmNsdWRlICJ2YzRfcmVncy5oIgorCisjZGVmaW5lIFYzRF9EUklWRVJfSVJRUyAoVjNEX0lO VF9PVVRPTUVNIHwgXAorCQkJIFYzRF9JTlRfRlJET05FKQorCitERUNMQVJFX1dBSVRfUVVFVUVf SEVBRChyZW5kZXJfd2FpdCk7CisKK3N0YXRpYyB2b2lkCit2YzRfb3ZlcmZsb3dfbWVtX3dvcmso c3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPQorCQlj b250YWluZXJfb2Yod29yaywgc3RydWN0IHZjNF9kZXYsIG92ZXJmbG93X21lbV93b3JrKTsKKwlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gdmM0LT5kZXY7CisJc3RydWN0IHZjNF9ibyAqYm87CisK KwlibyA9IHZjNF9ib19jcmVhdGUoZGV2LCAyNTYgKiAxMDI0LCB0cnVlKTsKKwlpZiAoIWJvKSB7 CisJCURSTV9FUlJPUigiQ291bGRuJ3QgYWxsb2NhdGUgYmlubmVyIG92ZXJmbG93IG1lbVxuIik7 CisJCXJldHVybjsKKwl9CisKKwkvKiBJZiB0aGVyZSdzIGEgam9iIGV4ZWN1dGluZyBjdXJyZW50 bHksIHRoZW4gb3VyIHByZXZpb3VzCisJICogb3ZlcmZsb3cgYWxsb2NhdGlvbiBpcyBnZXR0aW5n IHVzZWQgaW4gdGhhdCBqb2IgYW5kIHdlIG5lZWQKKwkgKiB0byBxdWV1ZSBpdCB0byBiZSByZWxl YXNlZCB3aGVuIHRoZSBqb2IgaXMgZG9uZS4gIEJ1dCBpZiBubworCSAqIGpvYiBpcyBleGVjdXRp bmcgYXQgYWxsLCB0aGVuIHdlIGNhbiBmcmVlIHRoZSBvbGQgb3ZlcmZsb3cKKwkgKiBvYmplY3Qg ZGlyZWNjdGx5LgorCSAqCisJICogTm8gbG9jayBuZWNlc3NhcnkgZm9yIHRoaXMgcG9pbnRlciBz aW5jZSB3ZSdyZSB0aGUgb25seQorCSAqIG9uZXMgdGhhdCB1cGRhdGUgdGhlIHBvaW50ZXIsIGFu ZCBvdXIgd29ya3F1ZXVlIHdvbid0CisJICogcmVlbnRlci4KKwkgKi8KKwlpZiAodmM0LT5vdmVy Zmxvd19tZW0pIHsKKwkJc3RydWN0IHZjNF9leGVjX2luZm8gKmN1cnJlbnRfZXhlYzsKKwkJdW5z aWduZWQgbG9uZyBpcnFmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmM0LT5qb2JfbG9j aywgaXJxZmxhZ3MpOworCQljdXJyZW50X2V4ZWMgPSB2YzRfZmlyc3Rfam9iKHZjNCk7CisJCWlm IChjdXJyZW50X2V4ZWMpIHsKKwkJCXZjNC0+b3ZlcmZsb3dfbWVtLT5zZXFubyA9IHZjNC0+Zmlu aXNoZWRfc2Vxbm8gKyAxOworCQkJbGlzdF9hZGRfdGFpbCgmdmM0LT5vdmVyZmxvd19tZW0tPnVu cmVmX2hlYWQsCisJCQkJICAgICAgJmN1cnJlbnRfZXhlYy0+dW5yZWZfbGlzdCk7CisJCQl2YzQt Pm92ZXJmbG93X21lbSA9IE5VTEw7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmM0 LT5qb2JfbG9jaywgaXJxZmxhZ3MpOworCX0KKworCWlmICh2YzQtPm92ZXJmbG93X21lbSkKKwkJ ZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJnZjNC0+b3ZlcmZsb3dfbWVtLT5i YXNlLmJhc2UpOworCXZjNC0+b3ZlcmZsb3dfbWVtID0gYm87CisKKwlWM0RfV1JJVEUoVjNEX0JQ T0EsIGJvLT5iYXNlLnBhZGRyKTsKKwlWM0RfV1JJVEUoVjNEX0JQT1MsIGJvLT5iYXNlLmJhc2Uu c2l6ZSk7CisJVjNEX1dSSVRFKFYzRF9JTlRDVEwsIFYzRF9JTlRfT1VUT01FTSk7CisJVjNEX1dS SVRFKFYzRF9JTlRFTkEsIFYzRF9JTlRfT1VUT01FTSk7Cit9CisKK3N0YXRpYyB2b2lkCit2YzRf aXJxX2ZpbmlzaF9qb2Ioc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdmM0X2Rl diAqdmM0ID0gdG9fdmM0X2RldihkZXYpOworCXN0cnVjdCB2YzRfZXhlY19pbmZvICpleGVjID0g dmM0X2ZpcnN0X2pvYih2YzQpOworCisJaWYgKCFleGVjKQorCQlyZXR1cm47CisKKwl2YzQtPmZp bmlzaGVkX3NlcW5vKys7CisJbGlzdF9tb3ZlX3RhaWwoJmV4ZWMtPmhlYWQsICZ2YzQtPmpvYl9k b25lX2xpc3QpOworCXZjNF9zdWJtaXRfbmV4dF9qb2IoZGV2KTsKKworCXdha2VfdXBfYWxsKCZ2 YzQtPmpvYl93YWl0X3F1ZXVlKTsKKwlzY2hlZHVsZV93b3JrKCZ2YzQtPmpvYl9kb25lX3dvcmsp OworfQorCitpcnFyZXR1cm5fdAordmM0X2lycShpbnQgaXJxLCB2b2lkICphcmcpCit7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGFyZzsKKwlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0 X2RldihkZXYpOworCXVpbnQzMl90IGludGN0bDsKKwlpcnFyZXR1cm5fdCBzdGF0dXMgPSBJUlFf Tk9ORTsKKworCWJhcnJpZXIoKTsKKwlpbnRjdGwgPSBWM0RfUkVBRChWM0RfSU5UQ1RMKTsKKwor CS8qIEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHRzIHdlJ3JlIGhhbmRsaW5nIGhlcmUuIFRoZSBy ZW5kZXIKKwkgKiBmcmFtZSBkb25lIGludGVycnVwdCB3aWxsIGJlIGNsZWFyZWQsIHdoaWxlIE9V VE9NRU0gd2lsbAorCSAqIHN0YXkgaGlnaCB1bnRpbCB0aGUgdW5kZXJseWluZyBjYXVzZSBpcyBj bGVhcmVkLgorCSAqLworCVYzRF9XUklURShWM0RfSU5UQ1RMLCBpbnRjdGwpOworCisJaWYgKGlu dGN0bCAmIFYzRF9JTlRfT1VUT01FTSkgeworCQkvKiBEaXNhYmxlIE9VVE9NRU0gdW50aWwgdGhl IHdvcmsgaXMgZG9uZS4gKi8KKwkJVjNEX1dSSVRFKFYzRF9JTlRESVMsIFYzRF9JTlRfT1VUT01F TSk7CisJCXNjaGVkdWxlX3dvcmsoJnZjNC0+b3ZlcmZsb3dfbWVtX3dvcmspOworCQlzdGF0dXMg PSBJUlFfSEFORExFRDsKKwl9CisKKwlpZiAoaW50Y3RsICYgVjNEX0lOVF9GUkRPTkUpIHsKKwkJ c3Bpbl9sb2NrKCZ2YzQtPmpvYl9sb2NrKTsKKwkJdmM0X2lycV9maW5pc2hfam9iKGRldik7CisJ CXNwaW5fdW5sb2NrKCZ2YzQtPmpvYl9sb2NrKTsKKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJ fQorCisJcmV0dXJuIHN0YXR1czsKK30KKwordm9pZAordmM0X2lycV9wcmVpbnN0YWxsKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYo ZGV2KTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnZjNC0+am9iX3dhaXRfcXVldWUpOworCUlO SVRfV09SSygmdmM0LT5vdmVyZmxvd19tZW1fd29yaywgdmM0X292ZXJmbG93X21lbV93b3JrKTsK KworCS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMgc29tZW9uZSBtaWdodCBoYXZlIGxl ZnQgYXJvdW5kCisJICogZm9yIHVzLgorCSAqLworCVYzRF9XUklURShWM0RfSU5UQ1RMLCBWM0Rf RFJJVkVSX0lSUVMpOworfQorCitpbnQKK3ZjNF9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOwor CisJLyogRW5hYmxlIGJvdGggdGhlIHJlbmRlciBkb25lIGFuZCBvdXQgb2YgbWVtb3J5IGludGVy cnVwdHMuICovCisJVjNEX1dSSVRFKFYzRF9JTlRFTkEsIFYzRF9EUklWRVJfSVJRUyk7CisKKwly ZXR1cm4gMDsKK30KKwordm9pZAordmM0X2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKK3sKKwlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOworCisJLyog RGlzYWJsZSBzZW5kaW5nIGludGVycnVwdHMgZm9yIG91ciBkcml2ZXIncyBJUlFzLiAqLworCVYz RF9XUklURShWM0RfSU5URElTLCBWM0RfRFJJVkVSX0lSUVMpOworCisJLyogQ2xlYXIgYW55IHBl bmRpbmcgaW50ZXJydXB0cyB3ZSBtaWdodCBoYXZlIGxlZnQuICovCisJVjNEX1dSSVRFKFYzRF9J TlRDVEwsIFYzRF9EUklWRVJfSVJRUyk7CisKKwljYW5jZWxfd29ya19zeW5jKCZ2YzQtPm92ZXJm bG93X21lbV93b3JrKTsKK30KKworLyoqIFJlaW5pdGlhbGl6ZXMgaW50ZXJydXB0IHJlZ2lzdGVy cyB3aGVuIGEgR1BVIHJlc2V0IGlzIHBlcmZvcm1lZC4gKi8KK3ZvaWQgdmM0X2lycV9yZXNldChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRf ZGV2KGRldik7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCS8qIEFja25vd2xlZGdlIGFu eSBzdGFsZSBJUlFzLiAqLworCVYzRF9XUklURShWM0RfSU5UQ1RMLCBWM0RfRFJJVkVSX0lSUVMp OworCisJLyoKKwkgKiBUdXJuIGFsbCBvdXIgaW50ZXJydXB0cyBvbi4gIEJpbm5lciBvdXQgb2Yg bWVtb3J5IGlzIHRoZQorCSAqIG9ubHkgb25lIHdlIGV4cGVjdCB0byB0cmlnZ2VyIGF0IHRoaXMg cG9pbnQsIHNpbmNlIHdlJ3ZlCisJICoganVzdCBjb21lIGZyb20gcG93ZXJvbiBhbmQgaGF2ZW4n dCBzdXBwbGllZCBhbnkgb3ZlcmZsb3cKKwkgKiBtZW1vcnkgeWV0LgorCSAqLworCVYzRF9XUklU RShWM0RfSU5URU5BLCBWM0RfRFJJVkVSX0lSUVMpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZj NC0+am9iX2xvY2ssIGlycWZsYWdzKTsKKwl2YzRfaXJxX2ZpbmlzaF9qb2IoZGV2KTsKKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZ2YzQtPmpvYl9sb2NrLCBpcnFmbGFncyk7Cit9CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9wYWNrZXQuaCBiL2RyaXZlcnMvZ3B1L2RybS92 YzQvdmM0X3BhY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMzFj YzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9wYWNrZXQuaApA QCAtMCwwICsxLDM5OSBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE0IEJyb2FkY29tCisgKgor ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0 aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK KyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVk IGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2Fy ZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8g RVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJM RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICog RlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT RSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYg VkM0X1BBQ0tFVF9ICisjZGVmaW5lIFZDNF9QQUNLRVRfSAorCisjaW5jbHVkZSAidmM0X3JlZ3Mu aCIgLyogZm9yIFZDNF9NQVNLLCBWQzRfR0VUX0ZJRUxELCBWQzRfU0VUX0ZJRUxEICovCisKK2Vu dW0gdmM0X3BhY2tldCB7CisJVkM0X1BBQ0tFVF9IQUxUID0gMCwKKwlWQzRfUEFDS0VUX05PUCA9 IDEsCisKKwlWQzRfUEFDS0VUX0ZMVVNIID0gNCwKKwlWQzRfUEFDS0VUX0ZMVVNIX0FMTCA9IDUs CisJVkM0X1BBQ0tFVF9TVEFSVF9USUxFX0JJTk5JTkcgPSA2LAorCVZDNF9QQUNLRVRfSU5DUkVN RU5UX1NFTUFQSE9SRSA9IDcsCisJVkM0X1BBQ0tFVF9XQUlUX09OX1NFTUFQSE9SRSA9IDgsCisK KwlWQzRfUEFDS0VUX0JSQU5DSCA9IDE2LAorCVZDNF9QQUNLRVRfQlJBTkNIX1RPX1NVQl9MSVNU ID0gMTcsCisKKwlWQzRfUEFDS0VUX1NUT1JFX01TX1RJTEVfQlVGRkVSID0gMjQsCisJVkM0X1BB Q0tFVF9TVE9SRV9NU19USUxFX0JVRkZFUl9BTkRfRU9GID0gMjUsCisJVkM0X1BBQ0tFVF9TVE9S RV9GVUxMX1JFU19USUxFX0JVRkZFUiA9IDI2LAorCVZDNF9QQUNLRVRfTE9BRF9GVUxMX1JFU19U SUxFX0JVRkZFUiA9IDI3LAorCVZDNF9QQUNLRVRfU1RPUkVfVElMRV9CVUZGRVJfR0VORVJBTCA9 IDI4LAorCVZDNF9QQUNLRVRfTE9BRF9USUxFX0JVRkZFUl9HRU5FUkFMID0gMjksCisKKwlWQzRf UEFDS0VUX0dMX0lOREVYRURfUFJJTUlUSVZFID0gMzIsCisJVkM0X1BBQ0tFVF9HTF9BUlJBWV9Q UklNSVRJVkUgPSAzMywKKworCVZDNF9QQUNLRVRfQ09NUFJFU1NFRF9QUklNSVRJVkUgPSA0OCwK KwlWQzRfUEFDS0VUX0NMSVBQRURfQ09NUFJFU1NFRF9QUklNSVRJVkUgPSA0OSwKKworCVZDNF9Q QUNLRVRfUFJJTUlUSVZFX0xJU1RfRk9STUFUID0gNTYsCisKKwlWQzRfUEFDS0VUX0dMX1NIQURF Ul9TVEFURSA9IDY0LAorCVZDNF9QQUNLRVRfTlZfU0hBREVSX1NUQVRFID0gNjUsCisJVkM0X1BB Q0tFVF9WR19TSEFERVJfU1RBVEUgPSA2NiwKKworCVZDNF9QQUNLRVRfQ09ORklHVVJBVElPTl9C SVRTID0gOTYsCisJVkM0X1BBQ0tFVF9GTEFUX1NIQURFX0ZMQUdTID0gOTcsCisJVkM0X1BBQ0tF VF9QT0lOVF9TSVpFID0gOTgsCisJVkM0X1BBQ0tFVF9MSU5FX1dJRFRIID0gOTksCisJVkM0X1BB Q0tFVF9SSFRfWF9CT1VOREFSWSA9IDEwMCwKKwlWQzRfUEFDS0VUX0RFUFRIX09GRlNFVCA9IDEw MSwKKwlWQzRfUEFDS0VUX0NMSVBfV0lORE9XID0gMTAyLAorCVZDNF9QQUNLRVRfVklFV1BPUlRf T0ZGU0VUID0gMTAzLAorCVZDNF9QQUNLRVRfWl9DTElQUElORyA9IDEwNCwKKwlWQzRfUEFDS0VU X0NMSVBQRVJfWFlfU0NBTElORyA9IDEwNSwKKwlWQzRfUEFDS0VUX0NMSVBQRVJfWl9TQ0FMSU5H ID0gMTA2LAorCisJVkM0X1BBQ0tFVF9USUxFX0JJTk5JTkdfTU9ERV9DT05GSUcgPSAxMTIsCisJ VkM0X1BBQ0tFVF9USUxFX1JFTkRFUklOR19NT0RFX0NPTkZJRyA9IDExMywKKwlWQzRfUEFDS0VU X0NMRUFSX0NPTE9SUyA9IDExNCwKKwlWQzRfUEFDS0VUX1RJTEVfQ09PUkRJTkFURVMgPSAxMTUs CisKKwkvKiBOb3QgYW4gYWN0dWFsIGhhcmR3YXJlIHBhY2tldCAtLSB0aGlzIGlzIHdoYXQgd2Ug dXNlIHRvIHB1dAorCSAqIHJlZmVyZW5jZXMgdG8gR0VNIGJvcyBpbiB0aGUgY29tbWFuZCBzdHJl YW0sIHNpbmNlIHdlIG5lZWQgdGhlIHUzMgorCSAqIGludCB0aGUgYWN0dWFsIGFkZHJlc3MgcGFj a2V0IGluIG9yZGVyIHRvIHN0b3JlIHRoZSBvZmZzZXQgZnJvbSB0aGUKKwkgKiBzdGFydCBvZiB0 aGUgQk8uCisJICovCisJVkM0X1BBQ0tFVF9HRU1fSEFORExFUyA9IDI1NCwKK30gX19hdHRyaWJ1 dGVfXyAoKF9fcGFja2VkX18pKTsKKworI2RlZmluZSBWQzRfUEFDS0VUX0hBTFRfU0laRQkJCQkJ CTEKKyNkZWZpbmUgVkM0X1BBQ0tFVF9OT1BfU0laRQkJCQkJCTEKKyNkZWZpbmUgVkM0X1BBQ0tF VF9GTFVTSF9TSVpFCQkJCQkJMQorI2RlZmluZSBWQzRfUEFDS0VUX0ZMVVNIX0FMTF9TSVpFCQkJ CQkxCisjZGVmaW5lIFZDNF9QQUNLRVRfU1RBUlRfVElMRV9CSU5OSU5HX1NJWkUJCQkJMQorI2Rl ZmluZSBWQzRfUEFDS0VUX0lOQ1JFTUVOVF9TRU1BUEhPUkVfU0laRQkJCQkxCisjZGVmaW5lIFZD NF9QQUNLRVRfV0FJVF9PTl9TRU1BUEhPUkVfU0laRQkJCQkxCisjZGVmaW5lIFZDNF9QQUNLRVRf QlJBTkNIX1NJWkUJCQkJCQk1CisjZGVmaW5lIFZDNF9QQUNLRVRfQlJBTkNIX1RPX1NVQl9MSVNU X1NJWkUJCQkJNQorI2RlZmluZSBWQzRfUEFDS0VUX1NUT1JFX01TX1RJTEVfQlVGRkVSX1NJWkUJ CQkJMQorI2RlZmluZSBWQzRfUEFDS0VUX1NUT1JFX01TX1RJTEVfQlVGRkVSX0FORF9FT0ZfU0la RQkJCTEKKyNkZWZpbmUgVkM0X1BBQ0tFVF9TVE9SRV9GVUxMX1JFU19USUxFX0JVRkZFUl9TSVpF CQkJNQorI2RlZmluZSBWQzRfUEFDS0VUX0xPQURfRlVMTF9SRVNfVElMRV9CVUZGRVJfU0laRQkJ CTUKKyNkZWZpbmUgVkM0X1BBQ0tFVF9TVE9SRV9USUxFX0JVRkZFUl9HRU5FUkFMX1NJWkUJCQk3 CisjZGVmaW5lIFZDNF9QQUNLRVRfTE9BRF9USUxFX0JVRkZFUl9HRU5FUkFMX1NJWkUJCQk3Cisj ZGVmaW5lIFZDNF9QQUNLRVRfR0xfSU5ERVhFRF9QUklNSVRJVkVfU0laRQkJCQkxNAorI2RlZmlu ZSBWQzRfUEFDS0VUX0dMX0FSUkFZX1BSSU1JVElWRV9TSVpFCQkJCTEwCisjZGVmaW5lIFZDNF9Q QUNLRVRfQ09NUFJFU1NFRF9QUklNSVRJVkVfU0laRQkJCQkxCisjZGVmaW5lIFZDNF9QQUNLRVRf Q0xJUFBFRF9DT01QUkVTU0VEX1BSSU1JVElWRV9TSVpFCQkJMQorI2RlZmluZSBWQzRfUEFDS0VU X1BSSU1JVElWRV9MSVNUX0ZPUk1BVF9TSVpFCQkJCTIKKyNkZWZpbmUgVkM0X1BBQ0tFVF9HTF9T SEFERVJfU1RBVEVfU0laRQkJCQkJNQorI2RlZmluZSBWQzRfUEFDS0VUX05WX1NIQURFUl9TVEFU RV9TSVpFCQkJCQk1CisjZGVmaW5lIFZDNF9QQUNLRVRfVkdfU0hBREVSX1NUQVRFX1NJWkUJCQkJ CTUKKyNkZWZpbmUgVkM0X1BBQ0tFVF9DT05GSUdVUkFUSU9OX0JJVFNfU0laRQkJCQk0CisjZGVm aW5lIFZDNF9QQUNLRVRfRkxBVF9TSEFERV9GTEFHU19TSVpFCQkJCTUKKyNkZWZpbmUgVkM0X1BB Q0tFVF9QT0lOVF9TSVpFX1NJWkUJCQkJCTUKKyNkZWZpbmUgVkM0X1BBQ0tFVF9MSU5FX1dJRFRI X1NJWkUJCQkJCTUKKyNkZWZpbmUgVkM0X1BBQ0tFVF9SSFRfWF9CT1VOREFSWV9TSVpFCQkJCQkz CisjZGVmaW5lIFZDNF9QQUNLRVRfREVQVEhfT0ZGU0VUX1NJWkUJCQkJCTUKKyNkZWZpbmUgVkM0 X1BBQ0tFVF9DTElQX1dJTkRPV19TSVpFCQkJCQk5CisjZGVmaW5lIFZDNF9QQUNLRVRfVklFV1BP UlRfT0ZGU0VUX1NJWkUJCQkJCTUKKyNkZWZpbmUgVkM0X1BBQ0tFVF9aX0NMSVBQSU5HX1NJWkUJ CQkJCTkKKyNkZWZpbmUgVkM0X1BBQ0tFVF9DTElQUEVSX1hZX1NDQUxJTkdfU0laRQkJCQk5Cisj ZGVmaW5lIFZDNF9QQUNLRVRfQ0xJUFBFUl9aX1NDQUxJTkdfU0laRQkJCQk5CisjZGVmaW5lIFZD NF9QQUNLRVRfVElMRV9CSU5OSU5HX01PREVfQ09ORklHX1NJWkUJCQkxNgorI2RlZmluZSBWQzRf UEFDS0VUX1RJTEVfUkVOREVSSU5HX01PREVfQ09ORklHX1NJWkUJCQkxMQorI2RlZmluZSBWQzRf UEFDS0VUX0NMRUFSX0NPTE9SU19TSVpFCQkJCQkxNAorI2RlZmluZSBWQzRfUEFDS0VUX1RJTEVf Q09PUkRJTkFURVNfU0laRQkJCQkzCisjZGVmaW5lIFZDNF9QQUNLRVRfR0VNX0hBTkRMRVNfU0la RQkJCQkJOQorCisvKiBOdW1iZXIgb2YgbXVsdGlzYW1wbGVzIHN1cHBvcnRlZC4gKi8KKyNkZWZp bmUgVkM0X01BWF9TQU1QTEVTCQkJCQkJCTQKKy8qIFNpemUgb2YgYSBmdWxsIHJlc29sdXRpb24g Y29sb3Igb3IgWiB0aWxlIGJ1ZmZlciBsb2FkL3N0b3JlLiAqLworI2RlZmluZSBWQzRfVElMRV9C VUZGRVJfU0laRQkJCSg2NCAqIDY0ICogNCkKKworLyoqIEB7CisgKiBCaXRzIHVzZWQgYnkgcGFj a2V0cyBsaWtlIFZDNF9QQUNLRVRfU1RPUkVfVElMRV9CVUZGRVJfR0VORVJBTCBhbmQKKyAqIFZD NF9QQUNLRVRfVElMRV9SRU5ERVJJTkdfTU9ERV9DT05GSUcuCisqLworI2RlZmluZSBWQzRfVElM SU5HX0ZPUk1BVF9MSU5FQVIgICAgMAorI2RlZmluZSBWQzRfVElMSU5HX0ZPUk1BVF9UICAgICAg ICAgMQorI2RlZmluZSBWQzRfVElMSU5HX0ZPUk1BVF9MVCAgICAgICAgMgorLyoqIEB9ICovCisK Ky8qKiBAeworICoKKyAqIGxvdyBiaXRzIG9mIFZDNF9QQUNLRVRfU1RPUkVfRlVMTF9SRVNfVElM RV9CVUZGRVIgYW5kCisgKiBWQzRfUEFDS0VUX0xPQURfRlVMTF9SRVNfVElMRV9CVUZGRVIuCisg Ki8KKyNkZWZpbmUgVkM0X0xPQURTVE9SRV9GVUxMX1JFU19FT0YgICAgICAgICAgICAgICAgICAg ICBCSVQoMykKKyNkZWZpbmUgVkM0X0xPQURTVE9SRV9GVUxMX1JFU19ESVNBQkxFX0NMRUFSX0FM TCAgICAgICBCSVQoMikKKyNkZWZpbmUgVkM0X0xPQURTVE9SRV9GVUxMX1JFU19ESVNBQkxFX1pT ICAgICAgICAgICAgICBCSVQoMSkKKyNkZWZpbmUgVkM0X0xPQURTVE9SRV9GVUxMX1JFU19ESVNB QkxFX0NPTE9SICAgICAgICAgICBCSVQoMCkKKworLyoqIEB7CisgKgorICogbG93IGJpdHMgb2Yg VkM0X1BBQ0tFVF9TVE9SRV9GVUxMX1JFU19USUxFX0JVRkZFUiBhbmQKKyAqIFZDNF9QQUNLRVRf TE9BRF9GVUxMX1JFU19USUxFX0JVRkZFUi4KKyAqLworI2RlZmluZSBWQzRfTE9BRFNUT1JFX0ZV TExfUkVTX0VPRiAgICAgICAgICAgICAgICAgICAgIEJJVCgzKQorI2RlZmluZSBWQzRfTE9BRFNU T1JFX0ZVTExfUkVTX0RJU0FCTEVfQ0xFQVJfQUxMICAgICAgIEJJVCgyKQorI2RlZmluZSBWQzRf TE9BRFNUT1JFX0ZVTExfUkVTX0RJU0FCTEVfWlMgICAgICAgICAgICAgIEJJVCgxKQorI2RlZmlu ZSBWQzRfTE9BRFNUT1JFX0ZVTExfUkVTX0RJU0FCTEVfQ09MT1IgICAgICAgICAgIEJJVCgwKQor CisvKiogQHsKKyAqCisgKiBieXRlIDIgb2YgVkM0X1BBQ0tFVF9TVE9SRV9USUxFX0JVRkZFUl9H RU5FUkFMIGFuZAorICogVkM0X1BBQ0tFVF9MT0FEX1RJTEVfQlVGRkVSX0dFTkVSQUwgKGxvdyBi aXRzIG9mIHRoZSBhZGRyZXNzKQorICovCisKKyNkZWZpbmUgVkM0X0xPQURTVE9SRV9USUxFX0JV RkZFUl9FT0YgICAgICAgICAgICAgICAgICBCSVQoMykKKyNkZWZpbmUgVkM0X0xPQURTVE9SRV9U SUxFX0JVRkZFUl9ESVNBQkxFX0ZVTExfVkdfTUFTSyBCSVQoMikKKyNkZWZpbmUgVkM0X0xPQURT VE9SRV9USUxFX0JVRkZFUl9ESVNBQkxFX0ZVTExfWlMgICAgICBCSVQoMSkKKyNkZWZpbmUgVkM0 X0xPQURTVE9SRV9USUxFX0JVRkZFUl9ESVNBQkxFX0ZVTExfQ09MT1IgICBCSVQoMCkKKworLyoq IEB9ICovCisKKy8qKiBAeworICoKKyAqIGJ5dGUgMC0xIG9mIFZDNF9QQUNLRVRfU1RPUkVfVElM RV9CVUZGRVJfR0VORVJBTCBhbmQKKyAqIFZDNF9QQUNLRVRfTE9BRF9USUxFX0JVRkZFUl9HRU5F UkFMCisgKi8KKyNkZWZpbmUgVkM0X1NUT1JFX1RJTEVfQlVGRkVSX0RJU0FCTEVfVkdfTUFTS19D TEVBUiBCSVQoMTUpCisjZGVmaW5lIFZDNF9TVE9SRV9USUxFX0JVRkZFUl9ESVNBQkxFX1pTX0NM RUFSICAgICBCSVQoMTQpCisjZGVmaW5lIFZDNF9TVE9SRV9USUxFX0JVRkZFUl9ESVNBQkxFX0NP TE9SX0NMRUFSICBCSVQoMTMpCisjZGVmaW5lIFZDNF9TVE9SRV9USUxFX0JVRkZFUl9ESVNBQkxF X1NXQVAgICAgICAgICBCSVQoMTIpCisKKyNkZWZpbmUgVkM0X0xPQURTVE9SRV9USUxFX0JVRkZF Ul9GT1JNQVRfTUFTSyAgICAgIFZDNF9NQVNLKDksIDgpCisjZGVmaW5lIFZDNF9MT0FEU1RPUkVf VElMRV9CVUZGRVJfRk9STUFUX1NISUZUICAgICA4CisjZGVmaW5lIFZDNF9MT0FEU1RPUkVfVElM RV9CVUZGRVJfUkdCQTg4ODggICAgICAgICAwCisjZGVmaW5lIFZDNF9MT0FEU1RPUkVfVElMRV9C VUZGRVJfQkdSNTY1X0RJVEhFUiAgICAxCisjZGVmaW5lIFZDNF9MT0FEU1RPUkVfVElMRV9CVUZG RVJfQkdSNTY1ICAgICAgICAgICAyCisvKiogQH0gKi8KKworLyoqIEB7CisgKgorICogYnl0ZSAw IG9mIFZDNF9QQUNLRVRfU1RPUkVfVElMRV9CVUZGRVJfR0VORVJBTCBhbmQKKyAqIFZDNF9QQUNL RVRfTE9BRF9USUxFX0JVRkZFUl9HRU5FUkFMCisgKi8KKyNkZWZpbmUgVkM0X1NUT1JFX1RJTEVf QlVGRkVSX01PREVfTUFTSyAgICAgICAgICAgIFZDNF9NQVNLKDcsIDYpCisjZGVmaW5lIFZDNF9T VE9SRV9USUxFX0JVRkZFUl9NT0RFX1NISUZUICAgICAgICAgICA2CisjZGVmaW5lIFZDNF9TVE9S RV9USUxFX0JVRkZFUl9NT0RFX1NBTVBMRTAgICAgICAgICAoMCA8PCA2KQorI2RlZmluZSBWQzRf U1RPUkVfVElMRV9CVUZGRVJfTU9ERV9ERUNJTUFURV9YNCAgICAgKDEgPDwgNikKKyNkZWZpbmUg VkM0X1NUT1JFX1RJTEVfQlVGRkVSX01PREVfREVDSU1BVEVfWDE2ICAgICgyIDw8IDYpCisKKy8q KiBUaGUgdmFsdWVzIG9mIHRoZSBmaWVsZCBhcmUgVkM0X1RJTElOR19GT1JNQVRfKiAqLworI2Rl ZmluZSBWQzRfTE9BRFNUT1JFX1RJTEVfQlVGRkVSX1RJTElOR19NQVNLICAgICAgVkM0X01BU0so NSwgNCkKKyNkZWZpbmUgVkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9USUxJTkdfU0hJRlQgICAg IDQKKworI2RlZmluZSBWQzRfTE9BRFNUT1JFX1RJTEVfQlVGRkVSX0JVRkZFUl9NQVNLICAgICAg VkM0X01BU0soMiwgMCkKKyNkZWZpbmUgVkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9CVUZGRVJf U0hJRlQgICAgIDAKKyNkZWZpbmUgVkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9OT05FICAgICAg ICAgICAgIDAKKyNkZWZpbmUgVkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9DT0xPUiAgICAgICAg ICAgIDEKKyNkZWZpbmUgVkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9aUyAgICAgICAgICAgICAg IDIKKyNkZWZpbmUgVkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9aICAgICAgICAgICAgICAgIDMK KyNkZWZpbmUgVkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9WR19NQVNLICAgICAgICAgIDQKKyNk ZWZpbmUgVkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9GVUxMICAgICAgICAgICAgIDUKKy8qKiBA fSAqLworCisjZGVmaW5lIFZDNF9JTkRFWF9CVUZGRVJfVTggICAgICAgICAgICAgICAgICAgICAg ICAoMCA8PCA0KQorI2RlZmluZSBWQzRfSU5ERVhfQlVGRkVSX1UxNiAgICAgICAgICAgICAgICAg ICAgICAgKDEgPDwgNCkKKworLyogVGhpcyBmbGFnIGlzIG9ubHkgcHJlc2VudCBpbiBOViBzaGFk ZXIgc3RhdGUuICovCisjZGVmaW5lIFZDNF9TSEFERVJfRkxBR19TSEFERURfQ0xJUF9DT09SRFMg ICAgICAgICBCSVQoMykKKyNkZWZpbmUgVkM0X1NIQURFUl9GTEFHX0VOQUJMRV9DTElQUElORyAg ICAgICAgICAgIEJJVCgyKQorI2RlZmluZSBWQzRfU0hBREVSX0ZMQUdfVlNfUE9JTlRfU0laRSAg ICAgICAgICAgICAgQklUKDEpCisjZGVmaW5lIFZDNF9TSEFERVJfRkxBR19GU19TSU5HTEVfVEhS RUFEICAgICAgICAgICBCSVQoMCkKKworLyoqIEB7IGJ5dGUgMiBvZiBjb25maWcgYml0cy4gKi8K KyNkZWZpbmUgVkM0X0NPTkZJR19CSVRTX0VBUkxZX1pfVVBEQVRFICAgICAgICAgICAgIEJJVCgx KQorI2RlZmluZSBWQzRfQ09ORklHX0JJVFNfRUFSTFlfWiAgICAgICAgICAgICAgICAgICAgQklU KDApCisvKiogQH0gKi8KKworLyoqIEB7IGJ5dGUgMSBvZiBjb25maWcgYml0cy4gKi8KKyNkZWZp bmUgVkM0X0NPTkZJR19CSVRTX1pfVVBEQVRFICAgICAgICAgICAgICAgICAgIEJJVCg3KQorLyoq IHNhbWUgdmFsdWVzIGluIHRoaXMgMy1iaXQgZmllbGQgYXMgUElQRV9GVU5DXyogKi8KKyNkZWZp bmUgVkM0X0NPTkZJR19CSVRTX0RFUFRIX0ZVTkNfU0hJRlQgICAgICAgICAgIDQKKyNkZWZpbmUg VkM0X0NPTkZJR19CSVRTX0NPVkVSQUdFX1JFQURfTEVBVkUgICAgICAgIEJJVCgzKQorCisjZGVm aW5lIFZDNF9DT05GSUdfQklUU19DT1ZFUkFHRV9VUERBVEVfTk9OWkVSTyAgICAoMCA8PCAxKQor I2RlZmluZSBWQzRfQ09ORklHX0JJVFNfQ09WRVJBR0VfVVBEQVRFX09ERCAgICAgICAgKDEgPDwg MSkKKyNkZWZpbmUgVkM0X0NPTkZJR19CSVRTX0NPVkVSQUdFX1VQREFURV9PUiAgICAgICAgICgy IDw8IDEpCisjZGVmaW5lIFZDNF9DT05GSUdfQklUU19DT1ZFUkFHRV9VUERBVEVfWkVSTyAgICAg ICAoMyA8PCAxKQorCisjZGVmaW5lIFZDNF9DT05GSUdfQklUU19DT1ZFUkFHRV9QSVBFX1NFTEVD VCAgICAgICBCSVQoMCkKKy8qKiBAfSAqLworCisvKiogQHsgYnl0ZSAwIG9mIGNvbmZpZyBiaXRz LiAqLworI2RlZmluZSBWQzRfQ09ORklHX0JJVFNfUkFTVEVSSVpFUl9PVkVSU0FNUExFX05PTkUg KDAgPDwgNikKKyNkZWZpbmUgVkM0X0NPTkZJR19CSVRTX1JBU1RFUklaRVJfT1ZFUlNBTVBMRV80 WCAgICgxIDw8IDYpCisjZGVmaW5lIFZDNF9DT05GSUdfQklUU19SQVNURVJJWkVSX09WRVJTQU1Q TEVfMTZYICAoMiA8PCA2KQorCisjZGVmaW5lIFZDNF9DT05GSUdfQklUU19BQV9QT0lOVFNfQU5E X0xJTkVTICAgICAgICBCSVQoNCkKKyNkZWZpbmUgVkM0X0NPTkZJR19CSVRTX0VOQUJMRV9ERVBU SF9PRkZTRVQgICAgICAgIEJJVCgzKQorI2RlZmluZSBWQzRfQ09ORklHX0JJVFNfQ1dfUFJJTUlU SVZFUyAgICAgICAgICAgICAgQklUKDIpCisjZGVmaW5lIFZDNF9DT05GSUdfQklUU19FTkFCTEVf UFJJTV9CQUNLICAgICAgICAgICBCSVQoMSkKKyNkZWZpbmUgVkM0X0NPTkZJR19CSVRTX0VOQUJM RV9QUklNX0ZST05UICAgICAgICAgIEJJVCgwKQorLyoqIEB9ICovCisKKy8qKiBAeyBiaXRzIGlu IHRoZSBsYXN0IHU4IG9mIFZDNF9QQUNLRVRfVElMRV9CSU5OSU5HX01PREVfQ09ORklHICovCisj ZGVmaW5lIFZDNF9CSU5fQ09ORklHX0RCX05PTl9NUyAgICAgICAgICAgICAgICAgICBCSVQoNykK KworI2RlZmluZSBWQzRfQklOX0NPTkZJR19BTExPQ19CTE9DS19TSVpFX01BU0sgICAgICAgVkM0 X01BU0soNiwgNSkKKyNkZWZpbmUgVkM0X0JJTl9DT05GSUdfQUxMT0NfQkxPQ0tfU0laRV9TSElG VCAgICAgIDUKKyNkZWZpbmUgVkM0X0JJTl9DT05GSUdfQUxMT0NfQkxPQ0tfU0laRV8zMiAgICAg ICAgIDAKKyNkZWZpbmUgVkM0X0JJTl9DT05GSUdfQUxMT0NfQkxPQ0tfU0laRV82NCAgICAgICAg IDEKKyNkZWZpbmUgVkM0X0JJTl9DT05GSUdfQUxMT0NfQkxPQ0tfU0laRV8xMjggICAgICAgIDIK KyNkZWZpbmUgVkM0X0JJTl9DT05GSUdfQUxMT0NfQkxPQ0tfU0laRV8yNTYgICAgICAgIDMKKwor I2RlZmluZSBWQzRfQklOX0NPTkZJR19BTExPQ19JTklUX0JMT0NLX1NJWkVfTUFTSyAgVkM0X01B U0soNCwgMykKKyNkZWZpbmUgVkM0X0JJTl9DT05GSUdfQUxMT0NfSU5JVF9CTE9DS19TSVpFX1NI SUZUIDMKKyNkZWZpbmUgVkM0X0JJTl9DT05GSUdfQUxMT0NfSU5JVF9CTE9DS19TSVpFXzMyICAg IDAKKyNkZWZpbmUgVkM0X0JJTl9DT05GSUdfQUxMT0NfSU5JVF9CTE9DS19TSVpFXzY0ICAgIDEK KyNkZWZpbmUgVkM0X0JJTl9DT05GSUdfQUxMT0NfSU5JVF9CTE9DS19TSVpFXzEyOCAgIDIKKyNk ZWZpbmUgVkM0X0JJTl9DT05GSUdfQUxMT0NfSU5JVF9CTE9DS19TSVpFXzI1NiAgIDMKKworI2Rl ZmluZSBWQzRfQklOX0NPTkZJR19BVVRPX0lOSVRfVFNEQSAgICAgICAgICAgICAgQklUKDIpCisj ZGVmaW5lIFZDNF9CSU5fQ09ORklHX1RJTEVfQlVGRkVSXzY0QklUICAgICAgICAgICBCSVQoMSkK KyNkZWZpbmUgVkM0X0JJTl9DT05GSUdfTVNfTU9ERV80WCAgICAgICAgICAgICAgICAgIEJJVCgw KQorLyoqIEB9ICovCisKKy8qKiBAeyBiaXRzIGluIHRoZSBsYXN0IHUxNiBvZiBWQzRfUEFDS0VU X1RJTEVfUkVOREVSSU5HX01PREVfQ09ORklHICovCisjZGVmaW5lIFZDNF9SRU5ERVJfQ09ORklH X0RCX05PTl9NUyAgICAgICAgICAgICAgICBCSVQoMTIpCisjZGVmaW5lIFZDNF9SRU5ERVJfQ09O RklHX0VBUkxZX1pfQ09WRVJBR0VfRElTQUJMRSBCSVQoMTEpCisjZGVmaW5lIFZDNF9SRU5ERVJf Q09ORklHX0VBUkxZX1pfRElSRUNUSU9OX0cgICAgICBCSVQoMTApCisjZGVmaW5lIFZDNF9SRU5E RVJfQ09ORklHX0NPVkVSQUdFX01PREUgICAgICAgICAgICBCSVQoOSkKKyNkZWZpbmUgVkM0X1JF TkRFUl9DT05GSUdfRU5BQkxFX1ZHX01BU0sgICAgICAgICAgIEJJVCg4KQorCisvKiogVGhlIHZh bHVlcyBvZiB0aGUgZmllbGQgYXJlIFZDNF9USUxJTkdfRk9STUFUXyogKi8KKyNkZWZpbmUgVkM0 X1JFTkRFUl9DT05GSUdfTUVNT1JZX0ZPUk1BVF9NQVNLICAgICAgIFZDNF9NQVNLKDcsIDYpCisj ZGVmaW5lIFZDNF9SRU5ERVJfQ09ORklHX01FTU9SWV9GT1JNQVRfU0hJRlQgICAgICA2CisKKyNk ZWZpbmUgVkM0X1JFTkRFUl9DT05GSUdfREVDSU1BVEVfTU9ERV8xWCAgICAgICAgICgwIDw8IDQp CisjZGVmaW5lIFZDNF9SRU5ERVJfQ09ORklHX0RFQ0lNQVRFX01PREVfNFggICAgICAgICAoMSA8 PCA0KQorI2RlZmluZSBWQzRfUkVOREVSX0NPTkZJR19ERUNJTUFURV9NT0RFXzE2WCAgICAgICAg KDIgPDwgNCkKKworI2RlZmluZSBWQzRfUkVOREVSX0NPTkZJR19GT1JNQVRfTUFTSyAgICAgICAg ICAgICAgVkM0X01BU0soMywgMikKKyNkZWZpbmUgVkM0X1JFTkRFUl9DT05GSUdfRk9STUFUX1NI SUZUICAgICAgICAgICAgIDIKKyNkZWZpbmUgVkM0X1JFTkRFUl9DT05GSUdfRk9STUFUX0JHUjU2 NV9ESVRIRVJFRCAgIDAKKyNkZWZpbmUgVkM0X1JFTkRFUl9DT05GSUdfRk9STUFUX1JHQkE4ODg4 ICAgICAgICAgIDEKKyNkZWZpbmUgVkM0X1JFTkRFUl9DT05GSUdfRk9STUFUX0JHUjU2NSAgICAg ICAgICAgIDIKKworI2RlZmluZSBWQzRfUkVOREVSX0NPTkZJR19USUxFX0JVRkZFUl82NEJJVCAg ICAgICAgQklUKDEpCisjZGVmaW5lIFZDNF9SRU5ERVJfQ09ORklHX01TX01PREVfNFggICAgICAg ICAgICAgICBCSVQoMCkKKworI2RlZmluZSBWQzRfUFJJTUlUSVZFX0xJU1RfRk9STUFUXzE2X0lO REVYICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgVkM0X1BSSU1JVElWRV9MSVNUX0ZPUk1BVF8z Ml9YWSAgICAgICAgICAgICgzIDw8IDQpCisjZGVmaW5lIFZDNF9QUklNSVRJVkVfTElTVF9GT1JN QVRfVFlQRV9QT0lOVFMgICAgICAoMCA8PCAwKQorI2RlZmluZSBWQzRfUFJJTUlUSVZFX0xJU1Rf Rk9STUFUX1RZUEVfTElORVMgICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgVkM0X1BSSU1JVElWRV9M SVNUX0ZPUk1BVF9UWVBFX1RSSUFOR0xFUyAgICgyIDw8IDApCisjZGVmaW5lIFZDNF9QUklNSVRJ VkVfTElTVF9GT1JNQVRfVFlQRV9SSFQgICAgICAgICAoMyA8PCAwKQorCitlbnVtIHZjNF90ZXh0 dXJlX2RhdGFfdHlwZSB7CisJVkM0X1RFWFRVUkVfVFlQRV9SR0JBODg4OCA9IDAsCisJVkM0X1RF WFRVUkVfVFlQRV9SR0JYODg4OCA9IDEsCisJVkM0X1RFWFRVUkVfVFlQRV9SR0JBNDQ0NCA9IDIs CisJVkM0X1RFWFRVUkVfVFlQRV9SR0JBNTU1MSA9IDMsCisJVkM0X1RFWFRVUkVfVFlQRV9SR0I1 NjUgPSA0LAorCVZDNF9URVhUVVJFX1RZUEVfTFVNSU5BTkNFID0gNSwKKwlWQzRfVEVYVFVSRV9U WVBFX0FMUEhBID0gNiwKKwlWQzRfVEVYVFVSRV9UWVBFX0xVTUFMUEhBID0gNywKKwlWQzRfVEVY VFVSRV9UWVBFX0VUQzEgPSA4LAorCVZDNF9URVhUVVJFX1RZUEVfUzE2RiA9IDksCisJVkM0X1RF WFRVUkVfVFlQRV9TOCA9IDEwLAorCVZDNF9URVhUVVJFX1RZUEVfUzE2ID0gMTEsCisJVkM0X1RF WFRVUkVfVFlQRV9CVzEgPSAxMiwKKwlWQzRfVEVYVFVSRV9UWVBFX0E0ID0gMTMsCisJVkM0X1RF WFRVUkVfVFlQRV9BMSA9IDE0LAorCVZDNF9URVhUVVJFX1RZUEVfUkdCQTY0ID0gMTUsCisJVkM0 X1RFWFRVUkVfVFlQRV9SR0JBMzJSID0gMTYsCisJVkM0X1RFWFRVUkVfVFlQRV9ZVVY0MjJSID0g MTcsCit9OworCisjZGVmaW5lIFZDNF9URVhfUDBfT0ZGU0VUX01BU0sgICAgICAgICAgICAgICAg ICAgICBWQzRfTUFTSygzMSwgMTIpCisjZGVmaW5lIFZDNF9URVhfUDBfT0ZGU0VUX1NISUZUICAg ICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBWQzRfVEVYX1AwX0NTV0laX01BU0sgICAgICAg ICAgICAgICAgICAgICAgVkM0X01BU0soMTEsIDEwKQorI2RlZmluZSBWQzRfVEVYX1AwX0NTV0la X1NISUZUICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgVkM0X1RFWF9QMF9DTU1PREVf TUFTSyAgICAgICAgICAgICAgICAgICAgIFZDNF9NQVNLKDksIDkpCisjZGVmaW5lIFZDNF9URVhf UDBfQ01NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFZDNF9URVhfUDBf RkxJUFlfTUFTSyAgICAgICAgICAgICAgICAgICAgICBWQzRfTUFTSyg4LCA4KQorI2RlZmluZSBW QzRfVEVYX1AwX0ZMSVBZX1NISUZUICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBWQzRf VEVYX1AwX1RZUEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgVkM0X01BU0soNywgNCkKKyNk ZWZpbmUgVkM0X1RFWF9QMF9UWVBFX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZp bmUgVkM0X1RFWF9QMF9NSVBMVkxTX01BU0sgICAgICAgICAgICAgICAgICAgIFZDNF9NQVNLKDMs IDApCisjZGVmaW5lIFZDNF9URVhfUDBfTUlQTFZMU19TSElGVCAgICAgICAgICAgICAgICAgICAw CisKKyNkZWZpbmUgVkM0X1RFWF9QMV9UWVBFNF9NQVNLICAgICAgICAgICAgICAgICAgICAgIFZD NF9NQVNLKDMxLCAzMSkKKyNkZWZpbmUgVkM0X1RFWF9QMV9UWVBFNF9TSElGVCAgICAgICAgICAg ICAgICAgICAgIDMxCisjZGVmaW5lIFZDNF9URVhfUDFfSEVJR0hUX01BU0sgICAgICAgICAgICAg ICAgICAgICBWQzRfTUFTSygzMCwgMjApCisjZGVmaW5lIFZDNF9URVhfUDFfSEVJR0hUX1NISUZU ICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBWQzRfVEVYX1AxX0VUQ0ZMSVBfTUFTSyAg ICAgICAgICAgICAgICAgICAgVkM0X01BU0soMTksIDE5KQorI2RlZmluZSBWQzRfVEVYX1AxX0VU Q0ZMSVBfU0hJRlQgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgVkM0X1RFWF9QMV9XSURU SF9NQVNLICAgICAgICAgICAgICAgICAgICAgIFZDNF9NQVNLKDE4LCA4KQorI2RlZmluZSBWQzRf VEVYX1AxX1dJRFRIX1NISUZUICAgICAgICAgICAgICAgICAgICAgOAorCisjZGVmaW5lIFZDNF9U RVhfUDFfTUFHRklMVF9NQVNLICAgICAgICAgICAgICAgICAgICBWQzRfTUFTSyg3LCA3KQorI2Rl ZmluZSBWQzRfVEVYX1AxX01BR0ZJTFRfU0hJRlQgICAgICAgICAgICAgICAgICAgNworIyBkZWZp bmUgVkM0X1RFWF9QMV9NQUdGSUxUX0xJTkVBUiAgICAgICAgICAgICAgICAgMAorIyBkZWZpbmUg VkM0X1RFWF9QMV9NQUdGSUxUX05FQVJFU1QgICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIFZD NF9URVhfUDFfTUlORklMVF9NQVNLICAgICAgICAgICAgICAgICAgICBWQzRfTUFTSyg2LCA0KQor I2RlZmluZSBWQzRfVEVYX1AxX01JTkZJTFRfU0hJRlQgICAgICAgICAgICAgICAgICAgNAorIyBk ZWZpbmUgVkM0X1RFWF9QMV9NSU5GSUxUX0xJTkVBUiAgICAgICAgICAgICAgICAgMAorIyBkZWZp bmUgVkM0X1RFWF9QMV9NSU5GSUxUX05FQVJFU1QgICAgICAgICAgICAgICAgMQorIyBkZWZpbmUg VkM0X1RFWF9QMV9NSU5GSUxUX05FQVJfTUlQX05FQVIgICAgICAgICAgMgorIyBkZWZpbmUgVkM0 X1RFWF9QMV9NSU5GSUxUX05FQVJfTUlQX0xJTiAgICAgICAgICAgMworIyBkZWZpbmUgVkM0X1RF WF9QMV9NSU5GSUxUX0xJTl9NSVBfTkVBUiAgICAgICAgICAgNAorIyBkZWZpbmUgVkM0X1RFWF9Q MV9NSU5GSUxUX0xJTl9NSVBfTElOICAgICAgICAgICAgNQorCisjZGVmaW5lIFZDNF9URVhfUDFf V1JBUF9UX01BU0sgICAgICAgICAgICAgICAgICAgICBWQzRfTUFTSygzLCAyKQorI2RlZmluZSBW QzRfVEVYX1AxX1dSQVBfVF9TSElGVCAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBWQzRf VEVYX1AxX1dSQVBfU19NQVNLICAgICAgICAgICAgICAgICAgICAgVkM0X01BU0soMSwgMCkKKyNk ZWZpbmUgVkM0X1RFWF9QMV9XUkFQX1NfU0hJRlQgICAgICAgICAgICAgICAgICAgIDAKKyMgZGVm aW5lIFZDNF9URVhfUDFfV1JBUF9SRVBFQVQgICAgICAgICAgICAgICAgICAgIDAKKyMgZGVmaW5l IFZDNF9URVhfUDFfV1JBUF9DTEFNUCAgICAgICAgICAgICAgICAgICAgIDEKKyMgZGVmaW5lIFZD NF9URVhfUDFfV1JBUF9NSVJST1IgICAgICAgICAgICAgICAgICAgIDIKKyMgZGVmaW5lIFZDNF9U RVhfUDFfV1JBUF9CT1JERVIgICAgICAgICAgICAgICAgICAgIDMKKworI2RlZmluZSBWQzRfVEVY X1AyX1BUWVBFX01BU0sgICAgICAgICAgICAgICAgICAgICAgVkM0X01BU0soMzEsIDMwKQorI2Rl ZmluZSBWQzRfVEVYX1AyX1BUWVBFX1NISUZUICAgICAgICAgICAgICAgICAgICAgMzAKKyMgZGVm aW5lIFZDNF9URVhfUDJfUFRZUEVfSUdOT1JFRCAgICAgICAgICAgICAgICAgIDAKKyMgZGVmaW5l IFZDNF9URVhfUDJfUFRZUEVfQ1VCRV9NQVBfU1RSSURFICAgICAgICAgIDEKKyMgZGVmaW5lIFZD NF9URVhfUDJfUFRZUEVfQ0hJTERfSU1BR0VfRElNRU5TSU9OUyAgIDIKKyMgZGVmaW5lIFZDNF9U RVhfUDJfUFRZUEVfQ0hJTERfSU1BR0VfT0ZGU0VUUyAgICAgIDMKKworLyogVkM0X1RFWF9QMl9Q VFlQRV9DVUJFX01BUF9TVFJJREUgYml0cyAqLworI2RlZmluZSBWQzRfVEVYX1AyX0NNU1RfTUFT SyAgICAgICAgICAgICAgICAgICAgICAgVkM0X01BU0soMjksIDEyKQorI2RlZmluZSBWQzRfVEVY X1AyX0NNU1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgVkM0X1RFWF9Q Ml9CU0xPRF9NQVNLICAgICAgICAgICAgICAgICAgICAgIFZDNF9NQVNLKDAsIDApCisjZGVmaW5l IFZDNF9URVhfUDJfQlNMT0RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwCisKKy8qIFZDNF9U RVhfUDJfUFRZUEVfQ0hJTERfSU1BR0VfRElNRU5TSU9OUyAqLworI2RlZmluZSBWQzRfVEVYX1Ay X0NIRUlHSFRfTUFTSyAgICAgICAgICAgICAgICAgICAgVkM0X01BU0soMjIsIDEyKQorI2RlZmlu ZSBWQzRfVEVYX1AyX0NIRUlHSFRfU0hJRlQgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUg VkM0X1RFWF9QMl9DV0lEVEhfTUFTSyAgICAgICAgICAgICAgICAgICAgIFZDNF9NQVNLKDEwLCAw KQorI2RlZmluZSBWQzRfVEVYX1AyX0NXSURUSF9TSElGVCAgICAgICAgICAgICAgICAgICAgMAor CisvKiBWQzRfVEVYX1AyX1BUWVBFX0NISUxEX0lNQUdFX09GRlNFVFMgKi8KKyNkZWZpbmUgVkM0 X1RFWF9QMl9DWU9GRl9NQVNLICAgICAgICAgICAgICAgICAgICAgIFZDNF9NQVNLKDIyLCAxMikK KyNkZWZpbmUgVkM0X1RFWF9QMl9DWU9GRl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEyCisj ZGVmaW5lIFZDNF9URVhfUDJfQ1hPRkZfTUFTSyAgICAgICAgICAgICAgICAgICAgICBWQzRfTUFT SygxMCwgMCkKKyNkZWZpbmUgVkM0X1RFWF9QMl9DWE9GRl9TSElGVCAgICAgICAgICAgICAgICAg ICAgIDAKKworI2VuZGlmIC8qIFZDNF9QQUNLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3ZjNC92YzRfcmVuZGVyX2NsLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9yZW5k ZXJfY2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGMzOTk2Ci0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcmVuZGVyX2NsLmMKQEAgLTAs MCArMSw2MzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNC0yMDE1IEJyb2FkY29tCisgKgor ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0 aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK KyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVk IGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2Fy ZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8g RVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJM RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICog RlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT RSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKy8qKgorICog RE9DOiBSZW5kZXIgY29tbWFuZCBsaXN0IGdlbmVyYXRpb24KKyAqCisgKiBJbiB0aGUgVkM0IGRy aXZlciwgcmVuZGVyIGNvbW1hbmQgbGlzdCBnZW5lcmF0aW9uIGlzIHBlcmZvcm1lZCBieSB0aGUK KyAqIGtlcm5lbCBpbnN0ZWFkIG9mIHVzZXJzcGFjZS4gIFdlIGRvIHRoaXMgYmVjYXVzZSB2YWxp ZGF0aW5nIGEKKyAqIHVzZXItc3VibWl0dGVkIGNvbW1hbmQgbGlzdCBpcyBoYXJkIHRvIGdldCBy aWdodCBhbmQgaGFzIGhpZ2ggQ1BVIG92ZXJoZWFkLAorICogd2hpbGUgdGhlIG51bWJlciBvZiB2 YWxpZCBjb25maWd1cmF0aW9ucyBmb3IgcmVuZGVyIGNvbW1hbmQgbGlzdHMgaXMKKyAqIGFjdHVh bGx5IGZhaXJseSBsb3cuCisgKi8KKworI2luY2x1ZGUgInVhcGkvZHJtL3ZjNF9kcm0uaCIKKyNp bmNsdWRlICJ2YzRfZHJ2LmgiCisjaW5jbHVkZSAidmM0X3BhY2tldC5oIgorCitzdHJ1Y3QgdmM0 X3JjbF9zZXR1cCB7CisJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqY29sb3JfcmVhZDsKKwlz dHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpjb2xvcl93cml0ZTsKKwlzdHJ1Y3QgZHJtX2dlbV9j bWFfb2JqZWN0ICp6c19yZWFkOworCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKnpzX3dyaXRl OworCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKm1zYWFfY29sb3Jfd3JpdGU7CisJc3RydWN0 IGRybV9nZW1fY21hX29iamVjdCAqbXNhYV96c193cml0ZTsKKworCXN0cnVjdCBkcm1fZ2VtX2Nt YV9vYmplY3QgKnJjbDsKKwl1MzIgbmV4dF9vZmZzZXQ7Cit9OworCitzdGF0aWMgaW5saW5lIHZv aWQgcmNsX3U4KHN0cnVjdCB2YzRfcmNsX3NldHVwICpzZXR1cCwgdTggdmFsKQoreworCSoodTgg Kikoc2V0dXAtPnJjbC0+dmFkZHIgKyBzZXR1cC0+bmV4dF9vZmZzZXQpID0gdmFsOworCXNldHVw LT5uZXh0X29mZnNldCArPSAxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmNsX3UxNihzdHJ1 Y3QgdmM0X3JjbF9zZXR1cCAqc2V0dXAsIHUxNiB2YWwpCit7CisJKih1MTYgKikoc2V0dXAtPnJj bC0+dmFkZHIgKyBzZXR1cC0+bmV4dF9vZmZzZXQpID0gdmFsOworCXNldHVwLT5uZXh0X29mZnNl dCArPSAyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmNsX3UzMihzdHJ1Y3QgdmM0X3JjbF9z ZXR1cCAqc2V0dXAsIHUzMiB2YWwpCit7CisJKih1MzIgKikoc2V0dXAtPnJjbC0+dmFkZHIgKyBz ZXR1cC0+bmV4dF9vZmZzZXQpID0gdmFsOworCXNldHVwLT5uZXh0X29mZnNldCArPSA0OworfQor CisvKgorICogRW1pdHMgYSBuby1vcCBTVE9SRV9USUxFX0JVRkZFUl9HRU5FUkFMLgorICoKKyAq IElmIHdlIGVtaXQgYSBQQUNLRVRfVElMRV9DT09SRElOQVRFUywgaXQgbXVzdCBiZSBmb2xsb3dl ZCBieSBhIHN0b3JlIG9mCisgKiBzb21lIHNvcnQgYmVmb3JlIGFub3RoZXIgbG9hZCBpcyB0cmln Z2VyZWQuCisgKi8KK3N0YXRpYyB2b2lkIHZjNF9zdG9yZV9iZWZvcmVfbG9hZChzdHJ1Y3QgdmM0 X3JjbF9zZXR1cCAqc2V0dXApCit7CisJcmNsX3U4KHNldHVwLCBWQzRfUEFDS0VUX1NUT1JFX1RJ TEVfQlVGRkVSX0dFTkVSQUwpOworCXJjbF91MTYoc2V0dXAsCisJCVZDNF9TRVRfRklFTEQoVkM0 X0xPQURTVE9SRV9USUxFX0JVRkZFUl9OT05FLAorCQkJICAgICAgVkM0X0xPQURTVE9SRV9USUxF X0JVRkZFUl9CVUZGRVIpIHwKKwkJVkM0X1NUT1JFX1RJTEVfQlVGRkVSX0RJU0FCTEVfQ09MT1Jf Q0xFQVIgfAorCQlWQzRfU1RPUkVfVElMRV9CVUZGRVJfRElTQUJMRV9aU19DTEVBUiB8CisJCVZD NF9TVE9SRV9USUxFX0JVRkZFUl9ESVNBQkxFX1ZHX01BU0tfQ0xFQVIpOworCXJjbF91MzIoc2V0 dXAsIDApOyAvKiBubyBhZGRyZXNzLCBzaW5jZSB3ZSdyZSBpbiBOb25lIG1vZGUgKi8KK30KKwor LyoKKyAqIENhbGN1bGF0ZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIHN0YXJ0IG9mIGEg dGlsZSBpbiBhIFJDTCBzdXJmYWNlLgorICoKKyAqIFVubGlrZSB0aGUgb3RoZXIgbG9hZC9zdG9y ZSBwYWNrZXRzLAorICogVkM0X1BBQ0tFVF9MT0FEL1NUT1JFX0ZVTExfUkVTX1RJTEVfQlVGRkVS IGRvbid0IGxvb2sgYXQgdGhlIHRpbGUKKyAqIGNvb3JkaW5hdGVzIHBhY2tldCwgYW5kIGluc3Rl YWQganVzdCBzdG9yZSB0byB0aGUgYWRkcmVzcyBnaXZlbi4KKyAqLworc3RhdGljIHVpbnQzMl90 IHZjNF9mdWxsX3Jlc19vZmZzZXQoc3RydWN0IHZjNF9leGVjX2luZm8gKmV4ZWMsCisJCQkJICAg IHN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmJvLAorCQkJCSAgICBzdHJ1Y3QgZHJtX3ZjNF9z dWJtaXRfcmNsX3N1cmZhY2UgKnN1cmYsCisJCQkJICAgIHVpbnQ4X3QgeCwgdWludDhfdCB5KQor eworCXJldHVybiBiby0+cGFkZHIgKyBzdXJmLT5vZmZzZXQgKyBWQzRfVElMRV9CVUZGRVJfU0la RSAqCisJCShESVZfUk9VTkRfVVAoZXhlYy0+YXJncy0+d2lkdGgsIDMyKSAqIHkgKyB4KTsKK30K KworLyoKKyAqIEVtaXRzIGEgUEFDS0VUX1RJTEVfQ09PUkRJTkFURVMgaWYgb25lIGlzbid0IGFs cmVhZHkgcGVuZGluZy4KKyAqCisgKiBUaGUgdGlsZSBjb29yZGluYXRlcyBwYWNrZXQgdHJpZ2dl cnMgYSBwZW5kaW5nIGxvYWQgaWYgdGhlcmUgaXMgb25lLCBhcmUKKyAqIHVzZWQgZm9yIGNsaXBw aW5nIGR1cmluZyByZW5kZXJpbmcsIGFuZCBkZXRlcm1pbmUgd2hlcmUgbG9hZHMvc3RvcmVzIGhh cHBlbgorICogcmVsYXRpdmUgdG8gdGhlaXIgYmFzZSBhZGRyZXNzLgorICovCitzdGF0aWMgdm9p ZCB2YzRfdGlsZV9jb29yZGluYXRlcyhzdHJ1Y3QgdmM0X3JjbF9zZXR1cCAqc2V0dXAsCisJCQkJ IHVpbnQzMl90IHgsIHVpbnQzMl90IHkpCit7CisJcmNsX3U4KHNldHVwLCBWQzRfUEFDS0VUX1RJ TEVfQ09PUkRJTkFURVMpOworCXJjbF91OChzZXR1cCwgeCk7CisJcmNsX3U4KHNldHVwLCB5KTsK K30KKworc3RhdGljIHZvaWQgZW1pdF90aWxlKHN0cnVjdCB2YzRfZXhlY19pbmZvICpleGVjLAor CQkgICAgICBzdHJ1Y3QgdmM0X3JjbF9zZXR1cCAqc2V0dXAsCisJCSAgICAgIHVpbnQ4X3QgeCwg dWludDhfdCB5LCBib29sIGZpcnN0LCBib29sIGxhc3QpCit7CisJc3RydWN0IGRybV92YzRfc3Vi bWl0X2NsICphcmdzID0gZXhlYy0+YXJnczsKKwlib29sIGhhc19iaW4gPSBhcmdzLT5iaW5fY2xf c2l6ZSAhPSAwOworCisJLyogTm90ZSB0aGF0IHRoZSBsb2FkIGRvZXNuJ3QgYWN0dWFsbHkgb2Nj dXIgdW50aWwgdGhlCisJICogdGlsZSBjb29yZHMgcGFja2V0IGlzIHByb2Nlc3NlZCwgYW5kIG9u bHkgb25lIGxvYWQKKwkgKiBtYXkgYmUgb3V0c3RhbmRpbmcgYXQgYSB0aW1lLgorCSAqLworCWlm IChzZXR1cC0+Y29sb3JfcmVhZCkgeworCQlpZiAoYXJncy0+Y29sb3JfcmVhZC5mbGFncyAmCisJ CSAgICBWQzRfU1VCTUlUX1JDTF9TVVJGQUNFX1JFQURfSVNfRlVMTF9SRVMpIHsKKwkJCXJjbF91 OChzZXR1cCwgVkM0X1BBQ0tFVF9MT0FEX0ZVTExfUkVTX1RJTEVfQlVGRkVSKTsKKwkJCXJjbF91 MzIoc2V0dXAsCisJCQkJdmM0X2Z1bGxfcmVzX29mZnNldChleGVjLCBzZXR1cC0+Y29sb3JfcmVh ZCwKKwkJCQkJCSAgICAmYXJncy0+Y29sb3JfcmVhZCwgeCwgeSkgfAorCQkJCVZDNF9MT0FEU1RP UkVfRlVMTF9SRVNfRElTQUJMRV9aUyk7CisJCX0gZWxzZSB7CisJCQlyY2xfdTgoc2V0dXAsIFZD NF9QQUNLRVRfTE9BRF9USUxFX0JVRkZFUl9HRU5FUkFMKTsKKwkJCXJjbF91MTYoc2V0dXAsIGFy Z3MtPmNvbG9yX3JlYWQuYml0cyk7CisJCQlyY2xfdTMyKHNldHVwLCBzZXR1cC0+Y29sb3JfcmVh ZC0+cGFkZHIgKworCQkJCWFyZ3MtPmNvbG9yX3JlYWQub2Zmc2V0KTsKKwkJfQorCX0KKworCWlm IChzZXR1cC0+enNfcmVhZCkgeworCQlpZiAoYXJncy0+enNfcmVhZC5mbGFncyAmCisJCSAgICBW QzRfU1VCTUlUX1JDTF9TVVJGQUNFX1JFQURfSVNfRlVMTF9SRVMpIHsKKwkJCXJjbF91OChzZXR1 cCwgVkM0X1BBQ0tFVF9MT0FEX0ZVTExfUkVTX1RJTEVfQlVGRkVSKTsKKwkJCXJjbF91MzIoc2V0 dXAsCisJCQkJdmM0X2Z1bGxfcmVzX29mZnNldChleGVjLCBzZXR1cC0+enNfcmVhZCwKKwkJCQkJ CSAgICAmYXJncy0+enNfcmVhZCwgeCwgeSkgfAorCQkJCVZDNF9MT0FEU1RPUkVfRlVMTF9SRVNf RElTQUJMRV9DT0xPUik7CisJCX0gZWxzZSB7CisJCQlpZiAoc2V0dXAtPmNvbG9yX3JlYWQpIHsK KwkJCQkvKiBFeGVjIHByZXZpb3VzIGxvYWQuICovCisJCQkJdmM0X3RpbGVfY29vcmRpbmF0ZXMo c2V0dXAsIHgsIHkpOworCQkJCXZjNF9zdG9yZV9iZWZvcmVfbG9hZChzZXR1cCk7CisJCQl9CisK KwkJCXJjbF91OChzZXR1cCwgVkM0X1BBQ0tFVF9MT0FEX1RJTEVfQlVGRkVSX0dFTkVSQUwpOwor CQkJcmNsX3UxNihzZXR1cCwgYXJncy0+enNfcmVhZC5iaXRzKTsKKwkJCXJjbF91MzIoc2V0dXAs IHNldHVwLT56c19yZWFkLT5wYWRkciArCisJCQkJYXJncy0+enNfcmVhZC5vZmZzZXQpOworCQl9 CisJfQorCisJLyogQ2xpcHBpbmcgZGVwZW5kcyBvbiB0aWxlIGNvb3JkaW5hdGVzIGhhdmluZyBi ZWVuCisJICogZW1pdHRlZCwgc28gd2UgYWx3YXlzIG5lZWQgb25lIGhlcmUuCisJICovCisJdmM0 X3RpbGVfY29vcmRpbmF0ZXMoc2V0dXAsIHgsIHkpOworCisJLyogV2FpdCBmb3IgdGhlIGJpbm5l ciBiZWZvcmUganVtcGluZyB0byB0aGUgZmlyc3QKKwkgKiB0aWxlJ3MgbGlzdHMuCisJICovCisJ aWYgKGZpcnN0ICYmIGhhc19iaW4pCisJCXJjbF91OChzZXR1cCwgVkM0X1BBQ0tFVF9XQUlUX09O X1NFTUFQSE9SRSk7CisKKwlpZiAoaGFzX2JpbikgeworCQlyY2xfdTgoc2V0dXAsIFZDNF9QQUNL RVRfQlJBTkNIX1RPX1NVQl9MSVNUKTsKKwkJcmNsX3UzMihzZXR1cCwgKGV4ZWMtPnRpbGVfYm8t PnBhZGRyICsKKwkJCQlleGVjLT50aWxlX2FsbG9jX29mZnNldCArCisJCQkJKHkgKiBleGVjLT5i aW5fdGlsZXNfeCArIHgpICogMzIpKTsKKwl9CisKKwlpZiAoc2V0dXAtPm1zYWFfY29sb3Jfd3Jp dGUpIHsKKwkJYm9vbCBsYXN0X3RpbGVfd3JpdGUgPSAoIXNldHVwLT5tc2FhX3pzX3dyaXRlICYm CisJCQkJCSFzZXR1cC0+enNfd3JpdGUgJiYKKwkJCQkJIXNldHVwLT5jb2xvcl93cml0ZSk7CisJ CXVpbnQzMl90IGJpdHMgPSBWQzRfTE9BRFNUT1JFX0ZVTExfUkVTX0RJU0FCTEVfWlM7CisKKwkJ aWYgKCFsYXN0X3RpbGVfd3JpdGUpCisJCQliaXRzIHw9IFZDNF9MT0FEU1RPUkVfRlVMTF9SRVNf RElTQUJMRV9DTEVBUl9BTEw7CisJCWVsc2UgaWYgKGxhc3QpCisJCQliaXRzIHw9IFZDNF9MT0FE U1RPUkVfRlVMTF9SRVNfRU9GOworCQlyY2xfdTgoc2V0dXAsIFZDNF9QQUNLRVRfU1RPUkVfRlVM TF9SRVNfVElMRV9CVUZGRVIpOworCQlyY2xfdTMyKHNldHVwLAorCQkJdmM0X2Z1bGxfcmVzX29m ZnNldChleGVjLCBzZXR1cC0+bXNhYV9jb2xvcl93cml0ZSwKKwkJCQkJICAgICZhcmdzLT5tc2Fh X2NvbG9yX3dyaXRlLCB4LCB5KSB8CisJCQliaXRzKTsKKwl9CisKKwlpZiAoc2V0dXAtPm1zYWFf enNfd3JpdGUpIHsKKwkJYm9vbCBsYXN0X3RpbGVfd3JpdGUgPSAoIXNldHVwLT56c193cml0ZSAm JgorCQkJCQkhc2V0dXAtPmNvbG9yX3dyaXRlKTsKKwkJdWludDMyX3QgYml0cyA9IFZDNF9MT0FE U1RPUkVfRlVMTF9SRVNfRElTQUJMRV9DT0xPUjsKKworCQlpZiAoc2V0dXAtPm1zYWFfY29sb3Jf d3JpdGUpCisJCQl2YzRfdGlsZV9jb29yZGluYXRlcyhzZXR1cCwgeCwgeSk7CisJCWlmICghbGFz dF90aWxlX3dyaXRlKQorCQkJYml0cyB8PSBWQzRfTE9BRFNUT1JFX0ZVTExfUkVTX0RJU0FCTEVf Q0xFQVJfQUxMOworCQllbHNlIGlmIChsYXN0KQorCQkJYml0cyB8PSBWQzRfTE9BRFNUT1JFX0ZV TExfUkVTX0VPRjsKKwkJcmNsX3U4KHNldHVwLCBWQzRfUEFDS0VUX1NUT1JFX0ZVTExfUkVTX1RJ TEVfQlVGRkVSKTsKKwkJcmNsX3UzMihzZXR1cCwKKwkJCXZjNF9mdWxsX3Jlc19vZmZzZXQoZXhl Yywgc2V0dXAtPm1zYWFfenNfd3JpdGUsCisJCQkJCSAgICAmYXJncy0+bXNhYV96c193cml0ZSwg eCwgeSkgfAorCQkJYml0cyk7CisJfQorCisJaWYgKHNldHVwLT56c193cml0ZSkgeworCQlib29s IGxhc3RfdGlsZV93cml0ZSA9ICFzZXR1cC0+Y29sb3Jfd3JpdGU7CisKKwkJaWYgKHNldHVwLT5t c2FhX2NvbG9yX3dyaXRlIHx8IHNldHVwLT5tc2FhX3pzX3dyaXRlKQorCQkJdmM0X3RpbGVfY29v cmRpbmF0ZXMoc2V0dXAsIHgsIHkpOworCisJCXJjbF91OChzZXR1cCwgVkM0X1BBQ0tFVF9TVE9S RV9USUxFX0JVRkZFUl9HRU5FUkFMKTsKKwkJcmNsX3UxNihzZXR1cCwgYXJncy0+enNfd3JpdGUu Yml0cyB8CisJCQkobGFzdF90aWxlX3dyaXRlID8KKwkJCSAwIDogVkM0X1NUT1JFX1RJTEVfQlVG RkVSX0RJU0FCTEVfQ09MT1JfQ0xFQVIpKTsKKwkJcmNsX3UzMihzZXR1cCwKKwkJCShzZXR1cC0+ enNfd3JpdGUtPnBhZGRyICsgYXJncy0+enNfd3JpdGUub2Zmc2V0KSB8CisJCQkoKGxhc3QgJiYg bGFzdF90aWxlX3dyaXRlKSA/CisJCQkgVkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9FT0YgOiAw KSk7CisJfQorCisJaWYgKHNldHVwLT5jb2xvcl93cml0ZSkgeworCQlpZiAoc2V0dXAtPm1zYWFf Y29sb3Jfd3JpdGUgfHwgc2V0dXAtPm1zYWFfenNfd3JpdGUgfHwKKwkJICAgIHNldHVwLT56c193 cml0ZSkgeworCQkJdmM0X3RpbGVfY29vcmRpbmF0ZXMoc2V0dXAsIHgsIHkpOworCQl9CisKKwkJ aWYgKGxhc3QpCisJCQlyY2xfdTgoc2V0dXAsIFZDNF9QQUNLRVRfU1RPUkVfTVNfVElMRV9CVUZG RVJfQU5EX0VPRik7CisJCWVsc2UKKwkJCXJjbF91OChzZXR1cCwgVkM0X1BBQ0tFVF9TVE9SRV9N U19USUxFX0JVRkZFUik7CisJfQorfQorCitzdGF0aWMgaW50IHZjNF9jcmVhdGVfcmNsX2JvKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCB2YzRfZXhlY19pbmZvICpleGVjLAorCQkJICAg ICBzdHJ1Y3QgdmM0X3JjbF9zZXR1cCAqc2V0dXApCit7CisJc3RydWN0IGRybV92YzRfc3VibWl0 X2NsICphcmdzID0gZXhlYy0+YXJnczsKKwlib29sIGhhc19iaW4gPSBhcmdzLT5iaW5fY2xfc2l6 ZSAhPSAwOworCXVpbnQ4X3QgbWluX3hfdGlsZSA9IGFyZ3MtPm1pbl94X3RpbGU7CisJdWludDhf dCBtaW5feV90aWxlID0gYXJncy0+bWluX3lfdGlsZTsKKwl1aW50OF90IG1heF94X3RpbGUgPSBh cmdzLT5tYXhfeF90aWxlOworCXVpbnQ4X3QgbWF4X3lfdGlsZSA9IGFyZ3MtPm1heF95X3RpbGU7 CisJdWludDhfdCB4dGlsZXMgPSBtYXhfeF90aWxlIC0gbWluX3hfdGlsZSArIDE7CisJdWludDhf dCB5dGlsZXMgPSBtYXhfeV90aWxlIC0gbWluX3lfdGlsZSArIDE7CisJdWludDhfdCB4LCB5Owor CXVpbnQzMl90IHNpemUsIGxvb3BfYm9keV9zaXplOworCisJc2l6ZSA9IFZDNF9QQUNLRVRfVElM RV9SRU5ERVJJTkdfTU9ERV9DT05GSUdfU0laRTsKKwlsb29wX2JvZHlfc2l6ZSA9IFZDNF9QQUNL RVRfVElMRV9DT09SRElOQVRFU19TSVpFOworCisJaWYgKGFyZ3MtPmZsYWdzICYgVkM0X1NVQk1J VF9DTF9VU0VfQ0xFQVJfQ09MT1IpIHsKKwkJc2l6ZSArPSBWQzRfUEFDS0VUX0NMRUFSX0NPTE9S U19TSVpFICsKKwkJCVZDNF9QQUNLRVRfVElMRV9DT09SRElOQVRFU19TSVpFICsKKwkJCVZDNF9Q QUNLRVRfU1RPUkVfVElMRV9CVUZGRVJfR0VORVJBTF9TSVpFOworCX0KKworCWlmIChzZXR1cC0+ Y29sb3JfcmVhZCkgeworCQlpZiAoYXJncy0+Y29sb3JfcmVhZC5mbGFncyAmCisJCSAgICBWQzRf U1VCTUlUX1JDTF9TVVJGQUNFX1JFQURfSVNfRlVMTF9SRVMpIHsKKwkJCWxvb3BfYm9keV9zaXpl ICs9IFZDNF9QQUNLRVRfTE9BRF9GVUxMX1JFU19USUxFX0JVRkZFUl9TSVpFOworCQl9IGVsc2Ug eworCQkJbG9vcF9ib2R5X3NpemUgKz0gVkM0X1BBQ0tFVF9MT0FEX1RJTEVfQlVGRkVSX0dFTkVS QUxfU0laRTsKKwkJfQorCX0KKwlpZiAoc2V0dXAtPnpzX3JlYWQpIHsKKwkJaWYgKGFyZ3MtPnpz X3JlYWQuZmxhZ3MgJgorCQkgICAgVkM0X1NVQk1JVF9SQ0xfU1VSRkFDRV9SRUFEX0lTX0ZVTExf UkVTKSB7CisJCQlsb29wX2JvZHlfc2l6ZSArPSBWQzRfUEFDS0VUX0xPQURfRlVMTF9SRVNfVElM RV9CVUZGRVJfU0laRTsKKwkJfSBlbHNlIHsKKwkJCWlmIChzZXR1cC0+Y29sb3JfcmVhZCAmJgor CQkJICAgICEoYXJncy0+Y29sb3JfcmVhZC5mbGFncyAmCisJCQkgICAgICBWQzRfU1VCTUlUX1JD TF9TVVJGQUNFX1JFQURfSVNfRlVMTF9SRVMpKSB7CisJCQkJbG9vcF9ib2R5X3NpemUgKz0gVkM0 X1BBQ0tFVF9USUxFX0NPT1JESU5BVEVTX1NJWkU7CisJCQkJbG9vcF9ib2R5X3NpemUgKz0gVkM0 X1BBQ0tFVF9TVE9SRV9USUxFX0JVRkZFUl9HRU5FUkFMX1NJWkU7CisJCQl9CisJCQlsb29wX2Jv ZHlfc2l6ZSArPSBWQzRfUEFDS0VUX0xPQURfVElMRV9CVUZGRVJfR0VORVJBTF9TSVpFOworCQl9 CisJfQorCisJaWYgKGhhc19iaW4pIHsKKwkJc2l6ZSArPSBWQzRfUEFDS0VUX1dBSVRfT05fU0VN QVBIT1JFX1NJWkU7CisJCWxvb3BfYm9keV9zaXplICs9IFZDNF9QQUNLRVRfQlJBTkNIX1RPX1NV Ql9MSVNUX1NJWkU7CisJfQorCisJaWYgKHNldHVwLT5tc2FhX2NvbG9yX3dyaXRlKQorCQlsb29w X2JvZHlfc2l6ZSArPSBWQzRfUEFDS0VUX1NUT1JFX0ZVTExfUkVTX1RJTEVfQlVGRkVSX1NJWkU7 CisJaWYgKHNldHVwLT5tc2FhX3pzX3dyaXRlKQorCQlsb29wX2JvZHlfc2l6ZSArPSBWQzRfUEFD S0VUX1NUT1JFX0ZVTExfUkVTX1RJTEVfQlVGRkVSX1NJWkU7CisKKwlpZiAoc2V0dXAtPnpzX3dy aXRlKQorCQlsb29wX2JvZHlfc2l6ZSArPSBWQzRfUEFDS0VUX1NUT1JFX1RJTEVfQlVGRkVSX0dF TkVSQUxfU0laRTsKKwlpZiAoc2V0dXAtPmNvbG9yX3dyaXRlKQorCQlsb29wX2JvZHlfc2l6ZSAr PSBWQzRfUEFDS0VUX1NUT1JFX01TX1RJTEVfQlVGRkVSX1NJWkU7CisKKwkvKiBXZSBuZWVkIGEg VkM0X1BBQ0tFVF9USUxFX0NPT1JESU5BVEVTIGluIGJldHdlZW4gZWFjaCBzdG9yZS4gKi8KKwls b29wX2JvZHlfc2l6ZSArPSBWQzRfUEFDS0VUX1RJTEVfQ09PUkRJTkFURVNfU0laRSAqCisJCSgo c2V0dXAtPm1zYWFfY29sb3Jfd3JpdGUgIT0gTlVMTCkgKworCQkgKHNldHVwLT5tc2FhX3pzX3dy aXRlICE9IE5VTEwpICsKKwkJIChzZXR1cC0+Y29sb3Jfd3JpdGUgIT0gTlVMTCkgKworCQkgKHNl dHVwLT56c193cml0ZSAhPSBOVUxMKSAtIDEpOworCisJc2l6ZSArPSB4dGlsZXMgKiB5dGlsZXMg KiBsb29wX2JvZHlfc2l6ZTsKKworCXNldHVwLT5yY2wgPSAmdmM0X2JvX2NyZWF0ZShkZXYsIHNp emUsIHRydWUpLT5iYXNlOworCWlmICghc2V0dXAtPnJjbCkKKwkJcmV0dXJuIC1FTk9NRU07CisJ bGlzdF9hZGRfdGFpbCgmdG9fdmM0X2JvKCZzZXR1cC0+cmNsLT5iYXNlKS0+dW5yZWZfaGVhZCwK KwkJICAgICAgJmV4ZWMtPnVucmVmX2xpc3QpOworCisJcmNsX3U4KHNldHVwLCBWQzRfUEFDS0VU X1RJTEVfUkVOREVSSU5HX01PREVfQ09ORklHKTsKKwlyY2xfdTMyKHNldHVwLAorCQkoc2V0dXAt PmNvbG9yX3dyaXRlID8gKHNldHVwLT5jb2xvcl93cml0ZS0+cGFkZHIgKworCQkJCSAgICAgICBh cmdzLT5jb2xvcl93cml0ZS5vZmZzZXQpIDoKKwkJIDApKTsKKwlyY2xfdTE2KHNldHVwLCBhcmdz LT53aWR0aCk7CisJcmNsX3UxNihzZXR1cCwgYXJncy0+aGVpZ2h0KTsKKwlyY2xfdTE2KHNldHVw LCBhcmdzLT5jb2xvcl93cml0ZS5iaXRzKTsKKworCS8qIFRoZSB0aWxlIGJ1ZmZlciBnZXRzIGNs ZWFyZWQgd2hlbiB0aGUgcHJldmlvdXMgdGlsZSBpcyBzdG9yZWQuICBJZgorCSAqIHRoZSBjbGVh ciB2YWx1ZXMgY2hhbmdlZCBiZXR3ZWVuIGZyYW1lcywgdGhlbiB0aGUgdGlsZSBidWZmZXIgaGFz CisJICogc3RhbGUgY2xlYXIgdmFsdWVzIGluIGl0LCBzbyB3ZSBoYXZlIHRvIGRvIGEgc3RvcmUg aW4gTm9uZSBtb2RlIChubworCSAqIHdyaXRlcykgc28gdGhhdCB3ZSB0cmlnZ2VyIHRoZSB0aWxl IGJ1ZmZlciBjbGVhci4KKwkgKi8KKwlpZiAoYXJncy0+ZmxhZ3MgJiBWQzRfU1VCTUlUX0NMX1VT RV9DTEVBUl9DT0xPUikgeworCQlyY2xfdTgoc2V0dXAsIFZDNF9QQUNLRVRfQ0xFQVJfQ09MT1JT KTsKKwkJcmNsX3UzMihzZXR1cCwgYXJncy0+Y2xlYXJfY29sb3JbMF0pOworCQlyY2xfdTMyKHNl dHVwLCBhcmdzLT5jbGVhcl9jb2xvclsxXSk7CisJCXJjbF91MzIoc2V0dXAsIGFyZ3MtPmNsZWFy X3opOworCQlyY2xfdTgoc2V0dXAsIGFyZ3MtPmNsZWFyX3MpOworCisJCXZjNF90aWxlX2Nvb3Jk aW5hdGVzKHNldHVwLCAwLCAwKTsKKworCQlyY2xfdTgoc2V0dXAsIFZDNF9QQUNLRVRfU1RPUkVf VElMRV9CVUZGRVJfR0VORVJBTCk7CisJCXJjbF91MTYoc2V0dXAsIFZDNF9MT0FEU1RPUkVfVElM RV9CVUZGRVJfTk9ORSk7CisJCXJjbF91MzIoc2V0dXAsIDApOyAvKiBubyBhZGRyZXNzLCBzaW5j ZSB3ZSdyZSBpbiBOb25lIG1vZGUgKi8KKwl9CisKKwlmb3IgKHkgPSBtaW5feV90aWxlOyB5IDw9 IG1heF95X3RpbGU7IHkrKykgeworCQlmb3IgKHggPSBtaW5feF90aWxlOyB4IDw9IG1heF94X3Rp bGU7IHgrKykgeworCQkJYm9vbCBmaXJzdCA9ICh4ID09IG1pbl94X3RpbGUgJiYgeSA9PSBtaW5f eV90aWxlKTsKKwkJCWJvb2wgbGFzdCA9ICh4ID09IG1heF94X3RpbGUgJiYgeSA9PSBtYXhfeV90 aWxlKTsKKworCQkJZW1pdF90aWxlKGV4ZWMsIHNldHVwLCB4LCB5LCBmaXJzdCwgbGFzdCk7CisJ CX0KKwl9CisKKwlCVUdfT04oc2V0dXAtPm5leHRfb2Zmc2V0ICE9IHNpemUpOworCWV4ZWMtPmN0 MWNhID0gc2V0dXAtPnJjbC0+cGFkZHI7CisJZXhlYy0+Y3QxZWEgPSBzZXR1cC0+cmNsLT5wYWRk ciArIHNldHVwLT5uZXh0X29mZnNldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZj NF9mdWxsX3Jlc19ib3VuZHNfY2hlY2soc3RydWN0IHZjNF9leGVjX2luZm8gKmV4ZWMsCisJCQkJ ICAgICBzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpvYmosCisJCQkJICAgICBzdHJ1Y3QgZHJt X3ZjNF9zdWJtaXRfcmNsX3N1cmZhY2UgKnN1cmYpCit7CisJc3RydWN0IGRybV92YzRfc3VibWl0 X2NsICphcmdzID0gZXhlYy0+YXJnczsKKwl1MzIgcmVuZGVyX3RpbGVzX3N0cmlkZSA9IERJVl9S T1VORF9VUChleGVjLT5hcmdzLT53aWR0aCwgMzIpOworCisJaWYgKHN1cmYtPm9mZnNldCA+IG9i ai0+YmFzZS5zaXplKSB7CisJCURSTV9FUlJPUigic3VyZmFjZSBvZmZzZXQgJWQgPiBCTyBzaXpl ICV6ZFxuIiwKKwkJCSAgc3VyZi0+b2Zmc2V0LCBvYmotPmJhc2Uuc2l6ZSk7CisJCXJldHVybiAt RUlOVkFMOworCX0KKworCWlmICgob2JqLT5iYXNlLnNpemUgLSBzdXJmLT5vZmZzZXQpIC8gVkM0 X1RJTEVfQlVGRkVSX1NJWkUgPAorCSAgICByZW5kZXJfdGlsZXNfc3RyaWRlICogYXJncy0+bWF4 X3lfdGlsZSArIGFyZ3MtPm1heF94X3RpbGUpIHsKKwkJRFJNX0VSUk9SKCJNU0FBIHRpbGUgJWQs ICVkIG91dCBvZiBib3VuZHMgIgorCQkJICAiKGJvIHNpemUgJXpkLCBvZmZzZXQgJWQpLlxuIiwK KwkJCSAgYXJncy0+bWF4X3hfdGlsZSwgYXJncy0+bWF4X3lfdGlsZSwKKwkJCSAgb2JqLT5iYXNl LnNpemUsCisJCQkgIHN1cmYtPm9mZnNldCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IHZjNF9yY2xfbXNhYV9zdXJmYWNlX3NldHVwKHN0cnVj dCB2YzRfZXhlY19pbmZvICpleGVjLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fZ2VtX2NtYV9vYmpl Y3QgKipvYmosCisJCQkJICAgICAgc3RydWN0IGRybV92YzRfc3VibWl0X3JjbF9zdXJmYWNlICpz dXJmKQoreworCWlmIChzdXJmLT5mbGFncyAhPSAwIHx8IHN1cmYtPmJpdHMgIT0gMCkgeworCQlE Uk1fRVJST1IoIk1TQUEgc3VyZmFjZSBoYWQgbm9uemVybyBmbGFncy9iaXRzXG4iKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHN1cmYtPmhpbmRleCA9PSB+MCkKKwkJcmV0dXJuIDA7 CisKKwlpZiAoIXZjNF91c2VfYm8oZXhlYywgc3VyZi0+aGluZGV4LCBWQzRfTU9ERV9SRU5ERVIs IG9iaikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHN1cmYtPm9mZnNldCAmIDB4Zikgewor CQlEUk1fRVJST1IoIk1TQUEgd3JpdGUgbXVzdCBiZSAxNmIgYWxpZ25lZC5cbiIpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gdmM0X2Z1bGxfcmVzX2JvdW5kc19jaGVjayhleGVj LCAqb2JqLCBzdXJmKTsKK30KKworc3RhdGljIGludCB2YzRfcmNsX3N1cmZhY2Vfc2V0dXAoc3Ry dWN0IHZjNF9leGVjX2luZm8gKmV4ZWMsCisJCQkJIHN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3Qg KipvYmosCisJCQkJIHN0cnVjdCBkcm1fdmM0X3N1Ym1pdF9yY2xfc3VyZmFjZSAqc3VyZikKK3sK Kwl1aW50OF90IHRpbGluZyA9IFZDNF9HRVRfRklFTEQoc3VyZi0+Yml0cywKKwkJCQkgICAgICAg VkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9USUxJTkcpOworCXVpbnQ4X3QgYnVmZmVyID0gVkM0 X0dFVF9GSUVMRChzdXJmLT5iaXRzLAorCQkJCSAgICAgICBWQzRfTE9BRFNUT1JFX1RJTEVfQlVG RkVSX0JVRkZFUik7CisJdWludDhfdCBmb3JtYXQgPSBWQzRfR0VUX0ZJRUxEKHN1cmYtPmJpdHMs CisJCQkJICAgICAgIFZDNF9MT0FEU1RPUkVfVElMRV9CVUZGRVJfRk9STUFUKTsKKwlpbnQgY3Bw OworCWludCByZXQ7CisKKwlpZiAoc3VyZi0+ZmxhZ3MgJiB+VkM0X1NVQk1JVF9SQ0xfU1VSRkFD RV9SRUFEX0lTX0ZVTExfUkVTKSB7CisJCURSTV9FUlJPUigiRXh0cmEgZmxhZ3Mgc2V0XG4iKTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHN1cmYtPmhpbmRleCA9PSB+MCkKKwkJcmV0 dXJuIDA7CisKKwlpZiAoIXZjNF91c2VfYm8oZXhlYywgc3VyZi0+aGluZGV4LCBWQzRfTU9ERV9S RU5ERVIsIG9iaikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHN1cmYtPmZsYWdzICYgVkM0 X1NVQk1JVF9SQ0xfU1VSRkFDRV9SRUFEX0lTX0ZVTExfUkVTKSB7CisJCWlmIChzdXJmID09ICZl eGVjLT5hcmdzLT56c193cml0ZSkgeworCQkJRFJNX0VSUk9SKCJnZW5lcmFsIHpzIHdyaXRlIG1h eSBub3QgYmUgYSBmdWxsLXJlcy5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlp ZiAoc3VyZi0+Yml0cyAhPSAwKSB7CisJCQlEUk1fRVJST1IoImxvYWQvc3RvcmUgZ2VuZXJhbCBi aXRzIHNldCB3aXRoICIKKwkJCQkgICJmdWxsIHJlcyBsb2FkL3N0b3JlLlxuIik7CisJCQlyZXR1 cm4gLUVJTlZBTDsKKwkJfQorCisJCXJldCA9IHZjNF9mdWxsX3Jlc19ib3VuZHNfY2hlY2soZXhl YywgKm9iaiwgc3VyZik7CisJCWlmICghcmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXR1cm4g MDsKKwl9CisKKwlpZiAoc3VyZi0+Yml0cyAmIH4oVkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9U SUxJTkdfTUFTSyB8CisJCQkgICBWQzRfTE9BRFNUT1JFX1RJTEVfQlVGRkVSX0JVRkZFUl9NQVNL IHwKKwkJCSAgIFZDNF9MT0FEU1RPUkVfVElMRV9CVUZGRVJfRk9STUFUX01BU0spKSB7CisJCURS TV9FUlJPUigiVW5rbm93biBiaXRzIGluIGxvYWQvc3RvcmU6IDB4JTA0eFxuIiwKKwkJCSAgc3Vy Zi0+Yml0cyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh0aWxpbmcgPiBWQzRfVElM SU5HX0ZPUk1BVF9MVCkgeworCQlEUk1fRVJST1IoIkJhZCB0aWxpbmcgZm9ybWF0XG4iKTsKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGJ1ZmZlciA9PSBWQzRfTE9BRFNUT1JFX1RJTEVf QlVGRkVSX1pTKSB7CisJCWlmIChmb3JtYXQgIT0gMCkgeworCQkJRFJNX0VSUk9SKCJObyBjb2xv ciBmb3JtYXQgc2hvdWxkIGJlIHNldCBmb3IgWlNcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJ CX0KKwkJY3BwID0gNDsKKwl9IGVsc2UgaWYgKGJ1ZmZlciA9PSBWQzRfTE9BRFNUT1JFX1RJTEVf QlVGRkVSX0NPTE9SKSB7CisJCXN3aXRjaCAoZm9ybWF0KSB7CisJCWNhc2UgVkM0X0xPQURTVE9S RV9USUxFX0JVRkZFUl9CR1I1NjU6CisJCWNhc2UgVkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9C R1I1NjVfRElUSEVSOgorCQkJY3BwID0gMjsKKwkJCWJyZWFrOworCQljYXNlIFZDNF9MT0FEU1RP UkVfVElMRV9CVUZGRVJfUkdCQTg4ODg6CisJCQljcHAgPSA0OworCQkJYnJlYWs7CisJCWRlZmF1 bHQ6CisJCQlEUk1fRVJST1IoIkJhZCB0aWxlIGJ1ZmZlciBmb3JtYXRcbiIpOworCQkJcmV0dXJu IC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgeworCQlEUk1fRVJST1IoIkJhZCBsb2FkL3N0b3JlIGJ1 ZmZlciAlZC5cbiIsIGJ1ZmZlcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChzdXJm LT5vZmZzZXQgJiAweGYpIHsKKwkJRFJNX0VSUk9SKCJsb2FkL3N0b3JlIGJ1ZmZlciBtdXN0IGJl IDE2YiBhbGlnbmVkLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghdmM0X2No ZWNrX3RleF9zaXplKGV4ZWMsICpvYmosIHN1cmYtPm9mZnNldCwgdGlsaW5nLAorCQkJCWV4ZWMt PmFyZ3MtPndpZHRoLCBleGVjLT5hcmdzLT5oZWlnaHQsIGNwcCkpIHsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3ZjNF9yY2xfcmVuZGVyX2Nv bmZpZ19zdXJmYWNlX3NldHVwKHN0cnVjdCB2YzRfZXhlY19pbmZvICpleGVjLAorCQkJCSAgICBz dHJ1Y3QgdmM0X3JjbF9zZXR1cCAqc2V0dXAsCisJCQkJICAgIHN0cnVjdCBkcm1fZ2VtX2NtYV9v YmplY3QgKipvYmosCisJCQkJICAgIHN0cnVjdCBkcm1fdmM0X3N1Ym1pdF9yY2xfc3VyZmFjZSAq c3VyZikKK3sKKwl1aW50OF90IHRpbGluZyA9IFZDNF9HRVRfRklFTEQoc3VyZi0+Yml0cywKKwkJ CQkgICAgICAgVkM0X1JFTkRFUl9DT05GSUdfTUVNT1JZX0ZPUk1BVCk7CisJdWludDhfdCBmb3Jt YXQgPSBWQzRfR0VUX0ZJRUxEKHN1cmYtPmJpdHMsCisJCQkJICAgICAgIFZDNF9SRU5ERVJfQ09O RklHX0ZPUk1BVCk7CisJaW50IGNwcDsKKworCWlmIChzdXJmLT5mbGFncyAhPSAwKSB7CisJCURS TV9FUlJPUigiTm8gZmxhZ3Mgc3VwcG9ydGVkIG9uIHJlbmRlciBjb25maWcuXG4iKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHN1cmYtPmJpdHMgJiB+KFZDNF9SRU5ERVJfQ09ORklH X01FTU9SWV9GT1JNQVRfTUFTSyB8CisJCQkgICBWQzRfUkVOREVSX0NPTkZJR19GT1JNQVRfTUFT SyB8CisJCQkgICBWQzRfUkVOREVSX0NPTkZJR19NU19NT0RFXzRYIHwKKwkJCSAgIFZDNF9SRU5E RVJfQ09ORklHX0RFQ0lNQVRFX01PREVfNFgpKSB7CisJCURSTV9FUlJPUigiVW5rbm93biBiaXRz IGluIHJlbmRlciBjb25maWc6IDB4JTA0eFxuIiwKKwkJCSAgc3VyZi0+Yml0cyk7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCWlmIChzdXJmLT5oaW5kZXggPT0gfjApCisJCXJldHVybiAwOwor CisJaWYgKCF2YzRfdXNlX2JvKGV4ZWMsIHN1cmYtPmhpbmRleCwgVkM0X01PREVfUkVOREVSLCBv YmopKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh0aWxpbmcgPiBWQzRfVElMSU5HX0ZPUk1B VF9MVCkgeworCQlEUk1fRVJST1IoIkJhZCB0aWxpbmcgZm9ybWF0XG4iKTsKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCisJc3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIFZDNF9SRU5ERVJfQ09ORklH X0ZPUk1BVF9CR1I1NjVfRElUSEVSRUQ6CisJY2FzZSBWQzRfUkVOREVSX0NPTkZJR19GT1JNQVRf QkdSNTY1OgorCQljcHAgPSAyOworCQlicmVhazsKKwljYXNlIFZDNF9SRU5ERVJfQ09ORklHX0ZP Uk1BVF9SR0JBODg4ODoKKwkJY3BwID0gNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFJNX0VS Uk9SKCJCYWQgdGlsZSBidWZmZXIgZm9ybWF0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJaWYgKCF2YzRfY2hlY2tfdGV4X3NpemUoZXhlYywgKm9iaiwgc3VyZi0+b2Zmc2V0LCB0aWxp bmcsCisJCQkJZXhlYy0+YXJncy0+d2lkdGgsIGV4ZWMtPmFyZ3MtPmhlaWdodCwgY3BwKSkgewor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHZjNF9nZXRfcmNs KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCB2YzRfZXhlY19pbmZvICpleGVjKQorewor CXN0cnVjdCB2YzRfcmNsX3NldHVwIHNldHVwID0gezB9OworCXN0cnVjdCBkcm1fdmM0X3N1Ym1p dF9jbCAqYXJncyA9IGV4ZWMtPmFyZ3M7CisJYm9vbCBoYXNfYmluID0gYXJncy0+YmluX2NsX3Np emUgIT0gMDsKKwlpbnQgcmV0OworCisJaWYgKGFyZ3MtPm1pbl94X3RpbGUgPiBhcmdzLT5tYXhf eF90aWxlIHx8CisJICAgIGFyZ3MtPm1pbl95X3RpbGUgPiBhcmdzLT5tYXhfeV90aWxlKSB7CisJ CURSTV9FUlJPUigiQmFkIHJlbmRlciB0aWxlIHNldCAoJWQsJWQpLSglZCwlZClcbiIsCisJCQkg IGFyZ3MtPm1pbl94X3RpbGUsIGFyZ3MtPm1pbl95X3RpbGUsCisJCQkgIGFyZ3MtPm1heF94X3Rp bGUsIGFyZ3MtPm1heF95X3RpbGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoaGFz X2JpbiAmJgorCSAgICAoYXJncy0+bWF4X3hfdGlsZSA+IGV4ZWMtPmJpbl90aWxlc194IHx8CisJ ICAgICBhcmdzLT5tYXhfeV90aWxlID4gZXhlYy0+YmluX3RpbGVzX3kpKSB7CisJCURSTV9FUlJP UigiUmVuZGVyIHRpbGVzICglZCwlZCkgb3V0c2lkZSBvZiBiaW4gY29uZmlnICIKKwkJCSAgIigl ZCwlZClcbiIsCisJCQkgIGFyZ3MtPm1heF94X3RpbGUsIGFyZ3MtPm1heF95X3RpbGUsCisJCQkg IGV4ZWMtPmJpbl90aWxlc194LCBleGVjLT5iaW5fdGlsZXNfeSk7CisJCXJldHVybiAtRUlOVkFM OworCX0KKworCXJldCA9IHZjNF9yY2xfcmVuZGVyX2NvbmZpZ19zdXJmYWNlX3NldHVwKGV4ZWMs ICZzZXR1cCwKKwkJCQkJCSAgJnNldHVwLmNvbG9yX3dyaXRlLAorCQkJCQkJICAmYXJncy0+Y29s b3Jfd3JpdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB2YzRfcmNsX3N1 cmZhY2Vfc2V0dXAoZXhlYywgJnNldHVwLmNvbG9yX3JlYWQsICZhcmdzLT5jb2xvcl9yZWFkKTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdmM0X3JjbF9zdXJmYWNlX3NldHVw KGV4ZWMsICZzZXR1cC56c19yZWFkLCAmYXJncy0+enNfcmVhZCk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCXJldCA9IHZjNF9yY2xfc3VyZmFjZV9zZXR1cChleGVjLCAmc2V0dXAuenNf d3JpdGUsICZhcmdzLT56c193cml0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJl dCA9IHZjNF9yY2xfbXNhYV9zdXJmYWNlX3NldHVwKGV4ZWMsICZzZXR1cC5tc2FhX2NvbG9yX3dy aXRlLAorCQkJCQkgJmFyZ3MtPm1zYWFfY29sb3Jfd3JpdGUpOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKwlyZXQgPSB2YzRfcmNsX21zYWFfc3VyZmFjZV9zZXR1cChleGVjLCAmc2V0dXAu bXNhYV96c193cml0ZSwKKwkJCQkJICZhcmdzLT5tc2FhX3pzX3dyaXRlKTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OworCisJLyogV2Ugc2hvdWxkbid0IGV2ZW4gaGF2ZSB0aGUgam9iIHN1Ym1p dHRlZCB0byB1cyBpZiB0aGVyZSdzIG5vCisJICogc3VyZmFjZSB0byB3cml0ZSBvdXQuCisJICov CisJaWYgKCFzZXR1cC5jb2xvcl93cml0ZSAmJiAhc2V0dXAuenNfd3JpdGUgJiYKKwkgICAgIXNl dHVwLm1zYWFfY29sb3Jfd3JpdGUgJiYgIXNldHVwLm1zYWFfenNfd3JpdGUpIHsKKwkJRFJNX0VS Uk9SKCJSQ0wgcmVxdWlyZXMgY29sb3Igb3IgWi9TIHdyaXRlXG4iKTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJcmV0dXJuIHZjNF9jcmVhdGVfcmNsX2JvKGRldiwgZXhlYywgJnNldHVwKTsK K30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3RyYWNlLmggYi9kcml2ZXJz L2dwdS9kcm0vdmM0L3ZjNF90cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmFkN2IxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF90 cmFjZS5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQnJvYWRj b20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZiAhZGVmaW5lZChfVkM0X1RSQUNF X0hfKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKQorI2RlZmluZSBfVkM0X1RS QUNFX0hfCisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC90 eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworI3VuZGVmIFRSQUNFX1NZ U1RFTQorI2RlZmluZSBUUkFDRV9TWVNURU0gdmM0CisjZGVmaW5lIFRSQUNFX0lOQ0xVREVfRklM RSB2YzRfdHJhY2UKKworVFJBQ0VfRVZFTlQodmM0X3dhaXRfZm9yX3NlcW5vX2JlZ2luLAorCSAg ICBUUF9QUk9UTyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50NjRfdCBzZXFubywgdWludDY0 X3QgdGltZW91dCksCisJICAgIFRQX0FSR1MoZGV2LCBzZXFubywgdGltZW91dCksCisKKwkgICAg VFBfU1RSVUNUX19lbnRyeSgKKwkJCSAgICAgX19maWVsZCh1MzIsIGRldikKKwkJCSAgICAgX19m aWVsZCh1NjQsIHNlcW5vKQorCQkJICAgICBfX2ZpZWxkKHU2NCwgdGltZW91dCkKKwkJCSAgICAg KSwKKworCSAgICBUUF9mYXN0X2Fzc2lnbigKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJp bWFyeS0+aW5kZXg7CisJCQkgICBfX2VudHJ5LT5zZXFubyA9IHNlcW5vOworCQkJICAgX19lbnRy eS0+dGltZW91dCA9IHRpbWVvdXQ7CisJCQkgICApLAorCisJICAgIFRQX3ByaW50aygiZGV2PSV1 LCBzZXFubz0lbGx1LCB0aW1lb3V0PSVsbHUiLAorCQkgICAgICBfX2VudHJ5LT5kZXYsIF9fZW50 cnktPnNlcW5vLCBfX2VudHJ5LT50aW1lb3V0KQorKTsKKworVFJBQ0VfRVZFTlQodmM0X3dhaXRf Zm9yX3NlcW5vX2VuZCwKKwkgICAgVFBfUFJPVE8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWlu dDY0X3Qgc2Vxbm8pLAorCSAgICBUUF9BUkdTKGRldiwgc2Vxbm8pLAorCisJICAgIFRQX1NUUlVD VF9fZW50cnkoCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTY0 LCBzZXFubykKKwkJCSAgICAgKSwKKworCSAgICBUUF9mYXN0X2Fzc2lnbigKKwkJCSAgIF9fZW50 cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CisJCQkgICBfX2VudHJ5LT5zZXFubyA9IHNl cW5vOworCQkJICAgKSwKKworCSAgICBUUF9wcmludGsoImRldj0ldSwgc2Vxbm89JWxsdSIsCisJ CSAgICAgIF9fZW50cnktPmRldiwgX19lbnRyeS0+c2Vxbm8pCispOworCisjZW5kaWYgLyogX1ZD NF9UUkFDRV9IXyAqLworCisvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24g Ki8KKyN1bmRlZiBUUkFDRV9JTkNMVURFX1BBVEgKKyNkZWZpbmUgVFJBQ0VfSU5DTFVERV9QQVRI IC4KKyNpbmNsdWRlIDx0cmFjZS9kZWZpbmVfdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS92YzQvdmM0X3RyYWNlX3BvaW50cy5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRf dHJhY2VfcG9pbnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYyNzhm MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3RyYWNlX3BvaW50 cy5jCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQnJvYWRjb20K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJ2YzRfZHJ2LmgiCisKKyNp Zm5kZWYgX19DSEVDS0VSX18KKyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUg InZjNF90cmFjZS5oIgorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3Zj NF92M2QuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3YzZC5jCmluZGV4IDA0MGFkMGQuLjQy NGQ1MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3YzZC5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS92YzQvdmM0X3YzZC5jCkBAIC0xNDQsNiArMTQ0LDIxIEBAIGludCB2YzRf djNkX2RlYnVnZnNfaWRlbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCiB9CiAj ZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovCiAKKy8qCisgKiBBc2tzIHRoZSBmaXJtd2FyZSB0 byB0dXJuIG9uIHBvd2VyIHRvIHRoZSBWM0QgZW5naW5lLgorICoKKyAqIFRoaXMgbWF5IGJlIGRv YWJsZSB3aXRoIGp1c3QgdGhlIGNsb2NrcyBpbnRlcmZhY2UsIHRob3VnaCB0aGlzCisgKiBwYWNr ZXQgZG9lcyBzb21lIG90aGVyIHJlZ2lzdGVyIHNldHVwIGZyb20gdGhlIGZpcm13YXJlLCB0b28u CisgKi8KK2ludAordmM0X3YzZF9zZXRfcG93ZXIoc3RydWN0IHZjNF9kZXYgKnZjNCwgYm9vbCBv bikKK3sKKwlpZiAob24pCisJCXJldHVybiBwbV9nZW5lcmljX3Bvd2Vyb2ZmKCZ2YzQtPnYzZC0+ cGRldi0+ZGV2KTsKKwllbHNlCisJCXJldHVybiBwbV9nZW5lcmljX3Jlc3VtZSgmdmM0LT52M2Qt PnBkZXYtPmRldik7Cit9CisKIHN0YXRpYyB2b2lkIHZjNF92M2RfaW5pdF9odyhzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7 CkBAIC0xNjEsNiArMTc2LDcgQEAgc3RhdGljIGludCB2YzRfdjNkX2JpbmQoc3RydWN0IGRldmlj ZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCiAJc3RydWN0IGRybV9k ZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShtYXN0ZXIpOwogCXN0cnVjdCB2YzRfZGV2ICp2 YzQgPSB0b192YzRfZGV2KGRybSk7CiAJc3RydWN0IHZjNF92M2QgKnYzZCA9IE5VTEw7CisJaW50 IHJldDsKIAogCXYzZCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnYzZCksIEdG UF9LRVJORUwpOwogCWlmICghdjNkKQpAQCAtMTgwLDggKzE5NiwyMCBAQCBzdGF0aWMgaW50IHZj NF92M2RfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9p ZCAqZGF0YSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyogUmVzZXQgdGhlIGJpbm5lciBv dmVyZmxvdyBhZGRyZXNzL3NpemUgYXQgc2V0dXAsIHRvIGJlIHN1cmUKKwkgKiB3ZSBkb24ndCBy ZXVzZSBhbiBvbGQgb25lLgorCSAqLworCVYzRF9XUklURShWM0RfQlBPQSwgMCk7CisJVjNEX1dS SVRFKFYzRF9CUE9TLCAwKTsKKwogCXZjNF92M2RfaW5pdF9odyhkcm0pOwogCisJcmV0ID0gZHJt X2lycV9pbnN0YWxsKGRybSwgcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKSk7CisJaWYgKHJldCkg eworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbnN0YWxsIElSUSBoYW5kbGVyXG4iKTsKKwkJcmV0 dXJuIHJldDsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTkxLDYgKzIxOSwxNSBAQCBzdGF0 aWMgdm9pZCB2YzRfdjNkX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Ug Km1hc3RlciwKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGV2X2dldF9kcnZkYXRhKG1hc3Rl cik7CiAJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZHJtKTsKIAorCWRybV9pcnFf dW5pbnN0YWxsKGRybSk7CisKKwkvKiBEaXNhYmxlIHRoZSBiaW5uZXIncyBvdmVyZmxvdyBtZW1v cnkgYWRkcmVzcywgc28gdGhlIG5leHQKKwkgKiBkcml2ZXIgcHJvYmUgKGlmIGFueSkgZG9lc24n dCB0cnkgdG8gcmV1c2Ugb3VyIG9sZAorCSAqIGFsbG9jYXRpb24uCisJICovCisJVjNEX1dSSVRF KFYzRF9CUE9BLCAwKTsKKwlWM0RfV1JJVEUoVjNEX0JQT1MsIDApOworCiAJdmM0LT52M2QgPSBO VUxMOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF92YWxpZGF0ZS5j IGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfdmFsaWRhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi4yZjIyZjE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL3ZjNC92YzRfdmFsaWRhdGUuYwpAQCAtMCwwICsxLDk1NSBAQAorLyoKKyAqIENvcHlyaWdo dCDCqSAyMDE0IEJyb2FkY29tCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS CisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNP RlRXQVJFLgorICovCisKKy8qKgorICogQ29tbWFuZCBsaXN0IHZhbGlkYXRvciBmb3IgVkM0Lgor ICoKKyAqIFRoZSBWQzQgaGFzIG5vIElPTU1VIGJldHdlZW4gaXQgYW5kIHN5c3RlbSBtZW1vcnku ICBTbywgYSB1c2VyIHdpdGgKKyAqIGFjY2VzcyB0byBleGVjdXRlIGNvbW1hbmQgbGlzdHMgY291 bGQgZXNjYWxhdGUgcHJpdmlsZWdlIGJ5CisgKiBvdmVyd3JpdGluZyBzeXN0ZW0gbWVtb3J5IChk cmF3aW5nIHRvIGl0IGFzIGEgZnJhbWVidWZmZXIpIG9yCisgKiByZWFkaW5nIHN5c3RlbSBtZW1v cnkgaXQgc2hvdWxkbid0IChyZWFkaW5nIGl0IGFzIGEgdGV4dHVyZSwgb3IKKyAqIHVuaWZvcm0g ZGF0YSwgb3IgdmVydGV4IGRhdGEpLgorICoKKyAqIFRoaXMgdmFsaWRhdGVzIGNvbW1hbmQgbGlz dHMgdG8gZW5zdXJlIHRoYXQgYWxsIGFjY2Vzc2VzIGFyZSB3aXRoaW4KKyAqIHRoZSBib3VuZHMg b2YgdGhlIEdFTSBvYmplY3RzIHJlZmVyZW5jZWQuICBJdCBleHBsaWNpdGx5IHdoaXRlbGlzdHMK KyAqIHBhY2tldHMsIGFuZCBsb29rcyBhdCB0aGUgb2Zmc2V0cyBpbiBhbnkgYWRkcmVzcyBmaWVs ZHMgdG8gbWFrZQorICogc3VyZSB0aGV5J3JlIGNvbnN0cmFpbmVkIHdpdGhpbiB0aGUgQk9zIHRo ZXkgcmVmZXJlbmNlLgorICoKKyAqIE5vdGUgdGhhdCBiZWNhdXNlIG9mIHRoZSB2YWxpZGF0aW9u IHRoYXQncyBoYXBwZW5pbmcgYW55d2F5LCB0aGlzCisgKiBpcyB3aGVyZSBHRU0gcmVsb2NhdGlv biBwcm9jZXNzaW5nIGhhcHBlbnMuCisgKi8KKworI2luY2x1ZGUgInVhcGkvZHJtL3ZjNF9kcm0u aCIKKyNpbmNsdWRlICJ2YzRfZHJ2LmgiCisjaW5jbHVkZSAidmM0X3BhY2tldC5oIgorCisjZGVm aW5lIFZBTElEQVRFX0FSR1MgXAorCXN0cnVjdCB2YzRfZXhlY19pbmZvICpleGVjLAkJCVwKKwl2 b2lkICp2YWxpZGF0ZWQsCQkJCVwKKwl2b2lkICp1bnRydXN0ZWQKKworLyoqIFJldHVybiB0aGUg d2lkdGggaW4gcGl4ZWxzIG9mIGEgNjQtYnl0ZSBtaWNyb3RpbGUuICovCitzdGF0aWMgdWludDMy X3QKK3V0aWxlX3dpZHRoKGludCBjcHApCit7CisJc3dpdGNoIChjcHApIHsKKwljYXNlIDE6CisJ Y2FzZSAyOgorCQlyZXR1cm4gODsKKwljYXNlIDQ6CisJCXJldHVybiA0OworCWNhc2UgODoKKwkJ cmV0dXJuIDI7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJ1bmtub3duIGNwcDogJWRcbiIsIGNw cCk7CisJCXJldHVybiAxOworCX0KK30KKworLyoqIFJldHVybiB0aGUgaGVpZ2h0IGluIHBpeGVs cyBvZiBhIDY0LWJ5dGUgbWljcm90aWxlLiAqLworc3RhdGljIHVpbnQzMl90Cit1dGlsZV9oZWln aHQoaW50IGNwcCkKK3sKKwlzd2l0Y2ggKGNwcCkgeworCWNhc2UgMToKKwkJcmV0dXJuIDg7CisJ Y2FzZSAyOgorCWNhc2UgNDoKKwljYXNlIDg6CisJCXJldHVybiA0OworCWRlZmF1bHQ6CisJCURS TV9FUlJPUigidW5rbm93biBjcHA6ICVkXG4iLCBjcHApOworCQlyZXR1cm4gMTsKKwl9Cit9CisK Ky8qKgorICogVGhlIHRleHR1cmUgdW5pdCBkZWNpZGVzIHdoYXQgdGlsaW5nIGZvcm1hdCBhIHBh cnRpY3VsYXIgbWlwbGV2ZWwgaXMgdXNpbmcKKyAqIHRoaXMgZnVuY3Rpb24sIHNvIHdlIGxheSBv dXQgb3VyIG1pcHRyZWVzIGFjY29yZGluZ2x5LgorICovCitzdGF0aWMgYm9vbAorc2l6ZV9pc19s dCh1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LCBpbnQgY3BwKQoreworCXJldHVybiAo d2lkdGggPD0gNCAqIHV0aWxlX3dpZHRoKGNwcCkgfHwKKwkJaGVpZ2h0IDw9IDQgKiB1dGlsZV9o ZWlnaHQoY3BwKSk7Cit9CisKK2Jvb2wKK3ZjNF91c2VfYm8oc3RydWN0IHZjNF9leGVjX2luZm8g KmV4ZWMsCisJICAgdWludDMyX3QgaGluZGV4LAorCSAgIGVudW0gdmM0X2JvX21vZGUgbW9kZSwK KwkgICBzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICoqb2JqKQoreworCSpvYmogPSBOVUxMOwor CisJaWYgKGhpbmRleCA+PSBleGVjLT5ib19jb3VudCkgeworCQlEUk1fRVJST1IoIkJPIGluZGV4 ICVkIGdyZWF0ZXIgdGhhbiBCTyBjb3VudCAlZFxuIiwKKwkJCSAgaGluZGV4LCBleGVjLT5ib19j b3VudCk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoZXhlYy0+Ym9baGluZGV4XS5tb2Rl ICE9IG1vZGUpIHsKKwkJaWYgKGV4ZWMtPmJvW2hpbmRleF0ubW9kZSA9PSBWQzRfTU9ERV9VTkRF Q0lERUQpIHsKKwkJCWV4ZWMtPmJvW2hpbmRleF0ubW9kZSA9IG1vZGU7CisJCX0gZWxzZSB7CisJ CQlEUk1fRVJST1IoIkJPIGluZGV4ICVkIHJldXNlZCB3aXRoIG1vZGUgJWQgdnMgJWRcbiIsCisJ CQkJICBoaW5kZXgsIGV4ZWMtPmJvW2hpbmRleF0ubW9kZSwgbW9kZSk7CisJCQlyZXR1cm4gZmFs c2U7CisJCX0KKwl9CisKKwkqb2JqID0gZXhlYy0+Ym9baGluZGV4XS5ibzsKKwlyZXR1cm4gdHJ1 ZTsKK30KKworc3RhdGljIGJvb2wKK3ZjNF91c2VfaGFuZGxlKHN0cnVjdCB2YzRfZXhlY19pbmZv ICpleGVjLAorCSAgICAgICB1aW50MzJfdCBnZW1faGFuZGxlc19wYWNrZXRfaW5kZXgsCisJICAg ICAgIGVudW0gdmM0X2JvX21vZGUgbW9kZSwKKwkgICAgICAgc3RydWN0IGRybV9nZW1fY21hX29i amVjdCAqKm9iaikKK3sKKwlyZXR1cm4gdmM0X3VzZV9ibyhleGVjLCBleGVjLT5ib19pbmRleFtn ZW1faGFuZGxlc19wYWNrZXRfaW5kZXhdLAorCQkJICBtb2RlLCBvYmopOworfQorCitzdGF0aWMg dWludDMyX3QKK2dsX3NoYWRlcl9yZWNfc2l6ZSh1aW50MzJfdCBwb2ludGVyX2JpdHMpCit7CisJ dWludDMyX3QgYXR0cmlidXRlX2NvdW50ID0gcG9pbnRlcl9iaXRzICYgNzsKKwlib29sIGV4dGVu ZGVkID0gcG9pbnRlcl9iaXRzICYgODsKKworCWlmIChhdHRyaWJ1dGVfY291bnQgPT0gMCkKKwkJ YXR0cmlidXRlX2NvdW50ID0gODsKKworCWlmIChleHRlbmRlZCkKKwkJcmV0dXJuIDEwMCArIGF0 dHJpYnV0ZV9jb3VudCAqIDQ7CisJZWxzZQorCQlyZXR1cm4gMzYgKyBhdHRyaWJ1dGVfY291bnQg KiA4OworfQorCitib29sCit2YzRfY2hlY2tfdGV4X3NpemUoc3RydWN0IHZjNF9leGVjX2luZm8g KmV4ZWMsIHN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmZibywKKwkJICAgdWludDMyX3Qgb2Zm c2V0LCB1aW50OF90IHRpbGluZ19mb3JtYXQsCisJCSAgIHVpbnQzMl90IHdpZHRoLCB1aW50MzJf dCBoZWlnaHQsIHVpbnQ4X3QgY3BwKQoreworCXVpbnQzMl90IGFsaWduZWRfd2lkdGgsIGFsaWdu ZWRfaGVpZ2h0LCBzdHJpZGUsIHNpemU7CisJdWludDMyX3QgdXRpbGVfdyA9IHV0aWxlX3dpZHRo KGNwcCk7CisJdWludDMyX3QgdXRpbGVfaCA9IHV0aWxlX2hlaWdodChjcHApOworCisJLyogVGhl IHNoYWRlZCB2ZXJ0ZXggZm9ybWF0IHN0b3JlcyBzaWduZWQgMTIuNCBmaXhlZCBwb2ludAorCSAq ICgtMjA0OCwyMDQ3KSBvZmZzZXRzIGZyb20gdGhlIHZpZXdwb3J0IGNlbnRlciwgc28gd2Ugc2hv dWxkCisJICogbmV2ZXIgaGF2ZSBhIHJlbmRlciB0YXJnZXQgbGFyZ2VyIHRoYW4gNDA5Ni4gIFRo ZSB0ZXh0dXJlCisJICogdW5pdCBjYW4gb25seSBzYW1wbGUgZnJvbSAyMDQ4eDIwNDgsIHNvIGl0 J3MgZXZlbiBtb3JlCisJICogcmVzdHJpY3RlZC4gIFRoaXMgbGV0cyB1cyBhdm9pZCB3b3JyeWlu ZyBhYm91dCBvdmVyZmxvdyBpbgorCSAqIG91ciBtYXRoLgorCSAqLworCWlmICh3aWR0aCA+IDQw OTYgfHwgaGVpZ2h0ID4gNDA5NikgeworCQlEUk1fRVJST1IoIlN1cmZhY2UgZGltZXNpb25zICgl ZCwlZCkgdG9vIGxhcmdlIiwgd2lkdGgsIGhlaWdodCk7CisJCXJldHVybiBmYWxzZTsKKwl9CisK Kwlzd2l0Y2ggKHRpbGluZ19mb3JtYXQpIHsKKwljYXNlIFZDNF9USUxJTkdfRk9STUFUX0xJTkVB UjoKKwkJYWxpZ25lZF93aWR0aCA9IHJvdW5kX3VwKHdpZHRoLCB1dGlsZV93KTsKKwkJYWxpZ25l ZF9oZWlnaHQgPSBoZWlnaHQ7CisJCWJyZWFrOworCWNhc2UgVkM0X1RJTElOR19GT1JNQVRfVDoK KwkJYWxpZ25lZF93aWR0aCA9IHJvdW5kX3VwKHdpZHRoLCB1dGlsZV93ICogOCk7CisJCWFsaWdu ZWRfaGVpZ2h0ID0gcm91bmRfdXAoaGVpZ2h0LCB1dGlsZV9oICogOCk7CisJCWJyZWFrOworCWNh c2UgVkM0X1RJTElOR19GT1JNQVRfTFQ6CisJCWFsaWduZWRfd2lkdGggPSByb3VuZF91cCh3aWR0 aCwgdXRpbGVfdyk7CisJCWFsaWduZWRfaGVpZ2h0ID0gcm91bmRfdXAoaGVpZ2h0LCB1dGlsZV9o KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJidWZmZXIgdGlsaW5nICVkIHVu c3VwcG9ydGVkXG4iLCB0aWxpbmdfZm9ybWF0KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXN0 cmlkZSA9IGFsaWduZWRfd2lkdGggKiBjcHA7CisJc2l6ZSA9IHN0cmlkZSAqIGFsaWduZWRfaGVp Z2h0OworCisJaWYgKHNpemUgKyBvZmZzZXQgPCBzaXplIHx8CisJICAgIHNpemUgKyBvZmZzZXQg PiBmYm8tPmJhc2Uuc2l6ZSkgeworCQlEUk1fRVJST1IoIk92ZXJmbG93IGluICVkeCVkICglZHgl ZCkgZmJvIHNpemUgKCVkICsgJWQgPiAlemQpXG4iLAorCQkJICB3aWR0aCwgaGVpZ2h0LAorCQkJ ICBhbGlnbmVkX3dpZHRoLCBhbGlnbmVkX2hlaWdodCwKKwkJCSAgc2l6ZSwgb2Zmc2V0LCBmYm8t PmJhc2Uuc2l6ZSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwor c3RhdGljIGludAordmFsaWRhdGVfZmx1c2hfYWxsKFZBTElEQVRFX0FSR1MpCit7CisJaWYgKGV4 ZWMtPmZvdW5kX2luY3JlbWVudF9zZW1hcGhvcmVfcGFja2V0KSB7CisJCURSTV9FUlJPUigiVkM0 X1BBQ0tFVF9GTFVTSF9BTEwgYWZ0ZXIgIgorCQkJICAiVkM0X1BBQ0tFVF9JTkNSRU1FTlRfU0VN QVBIT1JFXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQKK3ZhbGlkYXRlX3N0YXJ0X3RpbGVfYmlubmluZyhWQUxJREFURV9BUkdTKQorewor CWlmIChleGVjLT5mb3VuZF9zdGFydF90aWxlX2Jpbm5pbmdfcGFja2V0KSB7CisJCURSTV9FUlJP UigiRHVwbGljYXRlIFZDNF9QQUNLRVRfU1RBUlRfVElMRV9CSU5OSU5HXG4iKTsKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCWV4ZWMtPmZvdW5kX3N0YXJ0X3RpbGVfYmlubmluZ19wYWNrZXQgPSB0 cnVlOworCisJaWYgKCFleGVjLT5mb3VuZF90aWxlX2Jpbm5pbmdfbW9kZV9jb25maWdfcGFja2V0 KSB7CisJCURSTV9FUlJPUigibWlzc2luZyBWQzRfUEFDS0VUX1RJTEVfQklOTklOR19NT0RFX0NP TkZJR1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50Cit2YWxpZGF0ZV9pbmNyZW1lbnRfc2VtYXBob3JlKFZBTElEQVRFX0FSR1MpCit7CisJ aWYgKGV4ZWMtPmZvdW5kX2luY3JlbWVudF9zZW1hcGhvcmVfcGFja2V0KSB7CisJCURSTV9FUlJP UigiRHVwbGljYXRlIFZDNF9QQUNLRVRfSU5DUkVNRU5UX1NFTUFQSE9SRVxuIik7CisJCXJldHVy biAtRUlOVkFMOworCX0KKwlleGVjLT5mb3VuZF9pbmNyZW1lbnRfc2VtYXBob3JlX3BhY2tldCA9 IHRydWU7CisKKwkvKiBPbmNlIHdlJ3ZlIGZvdW5kIHRoZSBzZW1hcGhvcmUgaW5jcmVtZW50LCB0 aGVyZSBzaG91bGQgYmUgb25lIEZMVVNICisJICogdGhlbiB0aGUgZW5kIG9mIHRoZSBjb21tYW5k IGxpc3QuICBUaGUgRkxVU0ggYWN0dWFsbHkgdHJpZ2dlcnMgdGhlCisJICogaW5jcmVtZW50LCBz byB3ZSBvbmx5IG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlCisJICovCisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludAordmFsaWRhdGVfaW5kZXhlZF9wcmltX2xpc3QoVkFMSURBVEVfQVJHUykK K3sKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICppYjsKKwl1aW50MzJfdCBsZW5ndGggPSAq KHVpbnQzMl90ICopKHVudHJ1c3RlZCArIDEpOworCXVpbnQzMl90IG9mZnNldCA9ICoodWludDMy X3QgKikodW50cnVzdGVkICsgNSk7CisJdWludDMyX3QgbWF4X2luZGV4ID0gKih1aW50MzJfdCAq KSh1bnRydXN0ZWQgKyA5KTsKKwl1aW50MzJfdCBpbmRleF9zaXplID0gKCoodWludDhfdCAqKSh1 bnRydXN0ZWQgKyAwKSA+PiA0KSA/IDIgOiAxOworCXN0cnVjdCB2YzRfc2hhZGVyX3N0YXRlICpz aGFkZXJfc3RhdGU7CisKKwlpZiAoZXhlYy0+Zm91bmRfaW5jcmVtZW50X3NlbWFwaG9yZV9wYWNr ZXQpIHsKKwkJRFJNX0VSUk9SKCJEcmF3aW5nIGFmdGVyIFZDNF9QQUNLRVRfSU5DUkVNRU5UX1NF TUFQSE9SRVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENoZWNrIG92ZXJmbG93 IGNvbmRpdGlvbiAqLworCWlmIChleGVjLT5zaGFkZXJfc3RhdGVfY291bnQgPT0gMCkgeworCQlE Uk1fRVJST1IoInNoYWRlciBzdGF0ZSBtdXN0IHByZWNlZGUgcHJpbWl0aXZlc1xuIik7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKwlzaGFkZXJfc3RhdGUgPSAmZXhlYy0+c2hhZGVyX3N0YXRlW2V4 ZWMtPnNoYWRlcl9zdGF0ZV9jb3VudCAtIDFdOworCisJaWYgKG1heF9pbmRleCA+IHNoYWRlcl9z dGF0ZS0+bWF4X2luZGV4KQorCQlzaGFkZXJfc3RhdGUtPm1heF9pbmRleCA9IG1heF9pbmRleDsK KworCWlmICghdmM0X3VzZV9oYW5kbGUoZXhlYywgMCwgVkM0X01PREVfUkVOREVSLCAmaWIpKQor CQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChvZmZzZXQgPiBpYi0+YmFzZS5zaXplIHx8CisJICAg IChpYi0+YmFzZS5zaXplIC0gb2Zmc2V0KSAvIGluZGV4X3NpemUgPCBsZW5ndGgpIHsKKwkJRFJN X0VSUk9SKCJJQiBhY2Nlc3Mgb3ZlcmZsb3cgKCVkICsgJWQqJWQgPiAlemQpXG4iLAorCQkJICBv ZmZzZXQsIGxlbmd0aCwgaW5kZXhfc2l6ZSwgaWItPmJhc2Uuc2l6ZSk7CisJCXJldHVybiAtRUlO VkFMOworCX0KKworCSoodWludDMyX3QgKikodmFsaWRhdGVkICsgNSkgPSBpYi0+cGFkZHIgKyBv ZmZzZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordmFsaWRhdGVfZ2xfYXJyYXlf cHJpbWl0aXZlKFZBTElEQVRFX0FSR1MpCit7CisJdWludDMyX3QgbGVuZ3RoID0gKih1aW50MzJf dCAqKSh1bnRydXN0ZWQgKyAxKTsKKwl1aW50MzJfdCBiYXNlX2luZGV4ID0gKih1aW50MzJfdCAq KSh1bnRydXN0ZWQgKyA1KTsKKwl1aW50MzJfdCBtYXhfaW5kZXg7CisJc3RydWN0IHZjNF9zaGFk ZXJfc3RhdGUgKnNoYWRlcl9zdGF0ZTsKKworCWlmIChleGVjLT5mb3VuZF9pbmNyZW1lbnRfc2Vt YXBob3JlX3BhY2tldCkgeworCQlEUk1fRVJST1IoIkRyYXdpbmcgYWZ0ZXIgVkM0X1BBQ0tFVF9J TkNSRU1FTlRfU0VNQVBIT1JFXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ2hl Y2sgb3ZlcmZsb3cgY29uZGl0aW9uICovCisJaWYgKGV4ZWMtPnNoYWRlcl9zdGF0ZV9jb3VudCA9 PSAwKSB7CisJCURSTV9FUlJPUigic2hhZGVyIHN0YXRlIG11c3QgcHJlY2VkZSBwcmltaXRpdmVz XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXNoYWRlcl9zdGF0ZSA9ICZleGVjLT5zaGFk ZXJfc3RhdGVbZXhlYy0+c2hhZGVyX3N0YXRlX2NvdW50IC0gMV07CisKKwlpZiAobGVuZ3RoICsg YmFzZV9pbmRleCA8IGxlbmd0aCkgeworCQlEUk1fRVJST1IoInByaW1pdGl2ZSB2ZXJ0ZXggY291 bnQgb3ZlcmZsb3dcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJbWF4X2luZGV4ID0gbGVu Z3RoICsgYmFzZV9pbmRleCAtIDE7CisKKwlpZiAobWF4X2luZGV4ID4gc2hhZGVyX3N0YXRlLT5t YXhfaW5kZXgpCisJCXNoYWRlcl9zdGF0ZS0+bWF4X2luZGV4ID0gbWF4X2luZGV4OworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3ZhbGlkYXRlX2dsX3NoYWRlcl9zdGF0ZShWQUxJREFU RV9BUkdTKQoreworCXVpbnQzMl90IGkgPSBleGVjLT5zaGFkZXJfc3RhdGVfY291bnQrKzsKKwor CWlmIChpID49IGV4ZWMtPnNoYWRlcl9zdGF0ZV9zaXplKSB7CisJCURSTV9FUlJPUigiTW9yZSBy ZXF1ZXN0cyBmb3Igc2hhZGVyIHN0YXRlcyB0aGFuIGRlY2xhcmVkXG4iKTsKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCisJZXhlYy0+c2hhZGVyX3N0YXRlW2ldLnBhY2tldCA9IFZDNF9QQUNLRVRf R0xfU0hBREVSX1NUQVRFOworCWV4ZWMtPnNoYWRlcl9zdGF0ZVtpXS5hZGRyID0gKih1aW50MzJf dCAqKXVudHJ1c3RlZDsKKwlleGVjLT5zaGFkZXJfc3RhdGVbaV0ubWF4X2luZGV4ID0gMDsKKwor CWlmIChleGVjLT5zaGFkZXJfc3RhdGVbaV0uYWRkciAmIH4weGYpIHsKKwkJRFJNX0VSUk9SKCJo aWdoIGJpdHMgc2V0IGluIEdMIHNoYWRlciByZWMgcmVmZXJlbmNlXG4iKTsKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCisJKih1aW50MzJfdCAqKXZhbGlkYXRlZCA9IChleGVjLT5zaGFkZXJfcmVj X3AgKworCQkJCSAgZXhlYy0+c2hhZGVyX3N0YXRlW2ldLmFkZHIpOworCisJZXhlYy0+c2hhZGVy X3JlY19wICs9CisJCXJvdW5kdXAoZ2xfc2hhZGVyX3JlY19zaXplKGV4ZWMtPnNoYWRlcl9zdGF0 ZVtpXS5hZGRyKSwgMTYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3ZhbGlkYXRl X252X3NoYWRlcl9zdGF0ZShWQUxJREFURV9BUkdTKQoreworCXVpbnQzMl90IGkgPSBleGVjLT5z aGFkZXJfc3RhdGVfY291bnQrKzsKKworCWlmIChpID49IGV4ZWMtPnNoYWRlcl9zdGF0ZV9zaXpl KSB7CisJCURSTV9FUlJPUigiTW9yZSByZXF1ZXN0cyBmb3Igc2hhZGVyIHN0YXRlcyB0aGFuIGRl Y2xhcmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZXhlYy0+c2hhZGVyX3N0YXRl W2ldLnBhY2tldCA9IFZDNF9QQUNLRVRfTlZfU0hBREVSX1NUQVRFOworCWV4ZWMtPnNoYWRlcl9z dGF0ZVtpXS5hZGRyID0gKih1aW50MzJfdCAqKXVudHJ1c3RlZDsKKworCWlmIChleGVjLT5zaGFk ZXJfc3RhdGVbaV0uYWRkciAmIDE1KSB7CisJCURSTV9FUlJPUigiTlYgc2hhZGVyIHN0YXRlIGFk ZHJlc3MgMHglMDh4IG1pc2FsaWduZWRcbiIsCisJCQkgIGV4ZWMtPnNoYWRlcl9zdGF0ZVtpXS5h ZGRyKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJKih1aW50MzJfdCAqKXZhbGlkYXRlZCA9 IChleGVjLT5zaGFkZXJfc3RhdGVbaV0uYWRkciArCisJCQkJICBleGVjLT5zaGFkZXJfcmVjX3Ap OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3ZhbGlkYXRlX3RpbGVfYmlubmluZ19j b25maWcoVkFMSURBVEVfQVJHUykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZXhlYy0+ ZXhlY19iby0+YmFzZS5kZXY7CisJc3RydWN0IHZjNF9ibyAqdGlsZV9ibzsKKwl1aW50OF90IGZs YWdzOworCXVpbnQzMl90IHRpbGVfc3RhdGVfc2l6ZSwgdGlsZV9hbGxvY19zaXplOworCXVpbnQz Ml90IHRpbGVfY291bnQ7CisKKwlpZiAoZXhlYy0+Zm91bmRfdGlsZV9iaW5uaW5nX21vZGVfY29u ZmlnX3BhY2tldCkgeworCQlEUk1fRVJST1IoIkR1cGxpY2F0ZSBWQzRfUEFDS0VUX1RJTEVfQklO TklOR19NT0RFX0NPTkZJR1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlleGVjLT5mb3Vu ZF90aWxlX2Jpbm5pbmdfbW9kZV9jb25maWdfcGFja2V0ID0gdHJ1ZTsKKworCWV4ZWMtPmJpbl90 aWxlc194ID0gKih1aW50OF90ICopKHVudHJ1c3RlZCArIDEyKTsKKwlleGVjLT5iaW5fdGlsZXNf eSA9ICoodWludDhfdCAqKSh1bnRydXN0ZWQgKyAxMyk7CisJdGlsZV9jb3VudCA9IGV4ZWMtPmJp bl90aWxlc194ICogZXhlYy0+YmluX3RpbGVzX3k7CisJZmxhZ3MgPSAqKHVpbnQ4X3QgKikodW50 cnVzdGVkICsgMTQpOworCisJaWYgKGV4ZWMtPmJpbl90aWxlc194ID09IDAgfHwKKwkgICAgZXhl Yy0+YmluX3RpbGVzX3kgPT0gMCkgeworCQlEUk1fRVJST1IoIlRpbGUgYmlubmluZyBjb25maWcg b2YgJWR4JWQgdG9vIHNtYWxsXG4iLAorCQkJICBleGVjLT5iaW5fdGlsZXNfeCwgZXhlYy0+Ymlu X3RpbGVzX3kpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZmxhZ3MgJiAoVkM0X0JJ Tl9DT05GSUdfREJfTk9OX01TIHwKKwkJICAgICBWQzRfQklOX0NPTkZJR19USUxFX0JVRkZFUl82 NEJJVCkpIHsKKwkJRFJNX0VSUk9SKCJ1bnN1cHBvcnRlZCBiaW5uaW5nIGNvbmZpZyBmbGFncyAw eCUwMnhcbiIsIGZsYWdzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVGhlIHRpbGUg c3RhdGUgZGF0YSBhcnJheSBpcyA0OCBieXRlcyBwZXIgdGlsZSwgYW5kIHdlIHB1dCBpdCBhdAor CSAqIHRoZSBzdGFydCBvZiBhIEJPIGNvbnRhaW5pbmcgYm90aCBpdCBhbmQgdGhlIHRpbGUgYWxs b2MuCisJICovCisJdGlsZV9zdGF0ZV9zaXplID0gNDggKiB0aWxlX2NvdW50OworCisJLyogU2lu Y2UgdGhlIHRpbGUgYWxsb2MgYXJyYXkgd2lsbCBmb2xsb3cgdXMsIGFsaWduLiAqLworCWV4ZWMt PnRpbGVfYWxsb2Nfb2Zmc2V0ID0gcm91bmR1cCh0aWxlX3N0YXRlX3NpemUsIDQwOTYpOworCisJ Kih1aW50OF90ICopKHZhbGlkYXRlZCArIDE0KSA9CisJCSgoZmxhZ3MgJiB+KFZDNF9CSU5fQ09O RklHX0FMTE9DX0lOSVRfQkxPQ0tfU0laRV9NQVNLIHwKKwkJCSAgICBWQzRfQklOX0NPTkZJR19B TExPQ19CTE9DS19TSVpFX01BU0spKSB8CisJCSBWQzRfQklOX0NPTkZJR19BVVRPX0lOSVRfVFNE QSB8CisJCSBWQzRfU0VUX0ZJRUxEKFZDNF9CSU5fQ09ORklHX0FMTE9DX0lOSVRfQkxPQ0tfU0la RV8zMiwKKwkJCSAgICAgICBWQzRfQklOX0NPTkZJR19BTExPQ19JTklUX0JMT0NLX1NJWkUpIHwK KwkJIFZDNF9TRVRfRklFTEQoVkM0X0JJTl9DT05GSUdfQUxMT0NfQkxPQ0tfU0laRV8xMjgsCisJ CQkgICAgICAgVkM0X0JJTl9DT05GSUdfQUxMT0NfQkxPQ0tfU0laRSkpOworCisJLyogSW5pdGlh bCBibG9jayBzaXplLiAqLworCXRpbGVfYWxsb2Nfc2l6ZSA9IDMyICogdGlsZV9jb3VudDsKKwor CS8qCisJICogVGhlIGluaXRpYWwgYWxsb2NhdGlvbiBnZXRzIHJvdW5kZWQgdG8gdGhlIG5leHQg MjU2IGJ5dGVzIGJlZm9yZQorCSAqIHRoZSBoYXJkd2FyZSBzdGFydHMgZnVsZmlsbGluZyBmdXJ0 aGVyIGFsbG9jYXRpb25zLgorCSAqLworCXRpbGVfYWxsb2Nfc2l6ZSA9IHJvdW5kdXAodGlsZV9h bGxvY19zaXplLCAyNTYpOworCisJLyogQWRkIHNwYWNlIGZvciB0aGUgZXh0cmEgYWxsb2NhdGlv bnMuICBUaGlzIGlzIHdoYXQgZ2V0cyB1c2VkIGZpcnN0LAorCSAqIGJlZm9yZSBvdmVyZmxvdyBt ZW1vcnkuICBJdCBtdXN0IGhhdmUgYXQgbGVhc3QgNDA5NiBieXRlcywgYnV0IHdlCisJICogd2Fu dCB0byBhdm9pZCBvdmVyZmxvdyBtZW1vcnkgdXNhZ2UgaWYgcG9zc2libGUuCisJICovCisJdGls ZV9hbGxvY19zaXplICs9IDEwMjQgKiAxMDI0OworCisJdGlsZV9ibyA9IHZjNF9ib19jcmVhdGUo ZGV2LCBleGVjLT50aWxlX2FsbG9jX29mZnNldCArIHRpbGVfYWxsb2Nfc2l6ZSwKKwkJCQl0cnVl KTsKKwlleGVjLT50aWxlX2JvID0gJnRpbGVfYm8tPmJhc2U7CisJaWYgKCFleGVjLT50aWxlX2Jv KQorCQlyZXR1cm4gLUVOT01FTTsKKwlsaXN0X2FkZF90YWlsKCZ0aWxlX2JvLT51bnJlZl9oZWFk LCAmZXhlYy0+dW5yZWZfbGlzdCk7CisKKwkvKiB0aWxlIGFsbG9jIGFkZHJlc3MuICovCisJKih1 aW50MzJfdCAqKSh2YWxpZGF0ZWQgKyAwKSA9IChleGVjLT50aWxlX2JvLT5wYWRkciArCisJCQkJ CWV4ZWMtPnRpbGVfYWxsb2Nfb2Zmc2V0KTsKKwkvKiB0aWxlIGFsbG9jIHNpemUuICovCisJKih1 aW50MzJfdCAqKSh2YWxpZGF0ZWQgKyA0KSA9IHRpbGVfYWxsb2Nfc2l6ZTsKKwkvKiB0aWxlIHN0 YXRlIGFkZHJlc3MuICovCisJKih1aW50MzJfdCAqKSh2YWxpZGF0ZWQgKyA4KSA9IGV4ZWMtPnRp bGVfYm8tPnBhZGRyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3ZhbGlkYXRlX2dl bV9oYW5kbGVzKFZBTElEQVRFX0FSR1MpCit7CisJbWVtY3B5KGV4ZWMtPmJvX2luZGV4LCB1bnRy dXN0ZWQsIHNpemVvZihleGVjLT5ib19pbmRleCkpOworCXJldHVybiAwOworfQorCisjZGVmaW5l IFZDNF9ERUZJTkVfUEFDS0VUKHBhY2tldCwgZnVuYykgXAorCVtwYWNrZXRdID0geyBwYWNrZXQg IyMgX1NJWkUsICNwYWNrZXQsIGZ1bmMgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNtZF9pbmZv IHsKKwl1aW50MTZfdCBsZW47CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgKCpmdW5jKShzdHJ1 Y3QgdmM0X2V4ZWNfaW5mbyAqZXhlYywgdm9pZCAqdmFsaWRhdGVkLAorCQkgICAgdm9pZCAqdW50 cnVzdGVkKTsKK30gY21kX2luZm9bXSA9IHsKKwlWQzRfREVGSU5FX1BBQ0tFVChWQzRfUEFDS0VU X0hBTFQsIE5VTEwpLAorCVZDNF9ERUZJTkVfUEFDS0VUKFZDNF9QQUNLRVRfTk9QLCBOVUxMKSwK KwlWQzRfREVGSU5FX1BBQ0tFVChWQzRfUEFDS0VUX0ZMVVNILCBOVUxMKSwKKwlWQzRfREVGSU5F X1BBQ0tFVChWQzRfUEFDS0VUX0ZMVVNIX0FMTCwgdmFsaWRhdGVfZmx1c2hfYWxsKSwKKwlWQzRf REVGSU5FX1BBQ0tFVChWQzRfUEFDS0VUX1NUQVJUX1RJTEVfQklOTklORywKKwkJCSAgdmFsaWRh dGVfc3RhcnRfdGlsZV9iaW5uaW5nKSwKKwlWQzRfREVGSU5FX1BBQ0tFVChWQzRfUEFDS0VUX0lO Q1JFTUVOVF9TRU1BUEhPUkUsCisJCQkgIHZhbGlkYXRlX2luY3JlbWVudF9zZW1hcGhvcmUpLAor CisJVkM0X0RFRklORV9QQUNLRVQoVkM0X1BBQ0tFVF9HTF9JTkRFWEVEX1BSSU1JVElWRSwKKwkJ CSAgdmFsaWRhdGVfaW5kZXhlZF9wcmltX2xpc3QpLAorCVZDNF9ERUZJTkVfUEFDS0VUKFZDNF9Q QUNLRVRfR0xfQVJSQVlfUFJJTUlUSVZFLAorCQkJICB2YWxpZGF0ZV9nbF9hcnJheV9wcmltaXRp dmUpLAorCisJVkM0X0RFRklORV9QQUNLRVQoVkM0X1BBQ0tFVF9QUklNSVRJVkVfTElTVF9GT1JN QVQsIE5VTEwpLAorCisJVkM0X0RFRklORV9QQUNLRVQoVkM0X1BBQ0tFVF9HTF9TSEFERVJfU1RB VEUsIHZhbGlkYXRlX2dsX3NoYWRlcl9zdGF0ZSksCisJVkM0X0RFRklORV9QQUNLRVQoVkM0X1BB Q0tFVF9OVl9TSEFERVJfU1RBVEUsIHZhbGlkYXRlX252X3NoYWRlcl9zdGF0ZSksCisKKwlWQzRf REVGSU5FX1BBQ0tFVChWQzRfUEFDS0VUX0NPTkZJR1VSQVRJT05fQklUUywgTlVMTCksCisJVkM0 X0RFRklORV9QQUNLRVQoVkM0X1BBQ0tFVF9GTEFUX1NIQURFX0ZMQUdTLCBOVUxMKSwKKwlWQzRf REVGSU5FX1BBQ0tFVChWQzRfUEFDS0VUX1BPSU5UX1NJWkUsIE5VTEwpLAorCVZDNF9ERUZJTkVf UEFDS0VUKFZDNF9QQUNLRVRfTElORV9XSURUSCwgTlVMTCksCisJVkM0X0RFRklORV9QQUNLRVQo VkM0X1BBQ0tFVF9SSFRfWF9CT1VOREFSWSwgTlVMTCksCisJVkM0X0RFRklORV9QQUNLRVQoVkM0 X1BBQ0tFVF9ERVBUSF9PRkZTRVQsIE5VTEwpLAorCVZDNF9ERUZJTkVfUEFDS0VUKFZDNF9QQUNL RVRfQ0xJUF9XSU5ET1csIE5VTEwpLAorCVZDNF9ERUZJTkVfUEFDS0VUKFZDNF9QQUNLRVRfVklF V1BPUlRfT0ZGU0VULCBOVUxMKSwKKwlWQzRfREVGSU5FX1BBQ0tFVChWQzRfUEFDS0VUX0NMSVBQ RVJfWFlfU0NBTElORywgTlVMTCksCisJLyogTm90ZTogVGhlIGRvY3Mgc2F5IHRoaXMgd2FzIGFs c28gMTA1LCBidXQgaXQgd2FzIDEwNiBpbiB0aGUKKwkgKiBpbml0aWFsIHVzZXJsYW5kIGNvZGUg ZHJvcC4KKwkgKi8KKwlWQzRfREVGSU5FX1BBQ0tFVChWQzRfUEFDS0VUX0NMSVBQRVJfWl9TQ0FM SU5HLCBOVUxMKSwKKworCVZDNF9ERUZJTkVfUEFDS0VUKFZDNF9QQUNLRVRfVElMRV9CSU5OSU5H X01PREVfQ09ORklHLAorCQkJICB2YWxpZGF0ZV90aWxlX2Jpbm5pbmdfY29uZmlnKSwKKworCVZD NF9ERUZJTkVfUEFDS0VUKFZDNF9QQUNLRVRfR0VNX0hBTkRMRVMsIHZhbGlkYXRlX2dlbV9oYW5k bGVzKSwKK307CisKK2ludAordmM0X3ZhbGlkYXRlX2Jpbl9jbChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAorCQkgICAgdm9pZCAqdmFsaWRhdGVkLAorCQkgICAgdm9pZCAqdW52YWxpZGF0ZWQsCisJ CSAgICBzdHJ1Y3QgdmM0X2V4ZWNfaW5mbyAqZXhlYykKK3sKKwl1aW50MzJfdCBsZW4gPSBleGVj LT5hcmdzLT5iaW5fY2xfc2l6ZTsKKwl1aW50MzJfdCBkc3Rfb2Zmc2V0ID0gMDsKKwl1aW50MzJf dCBzcmNfb2Zmc2V0ID0gMDsKKworCXdoaWxlIChzcmNfb2Zmc2V0IDwgbGVuKSB7CisJCXZvaWQg KmRzdF9wa3QgPSB2YWxpZGF0ZWQgKyBkc3Rfb2Zmc2V0OworCQl2b2lkICpzcmNfcGt0ID0gdW52 YWxpZGF0ZWQgKyBzcmNfb2Zmc2V0OworCQl1OCBjbWQgPSAqKHVpbnQ4X3QgKilzcmNfcGt0Owor CQljb25zdCBzdHJ1Y3QgY21kX2luZm8gKmluZm87CisKKwkJaWYgKGNtZCA+PSBBUlJBWV9TSVpF KGNtZF9pbmZvKSkgeworCQkJRFJNX0VSUk9SKCIweCUwOHg6IHBhY2tldCAlZCBvdXQgb2YgYm91 bmRzXG4iLAorCQkJCSAgc3JjX29mZnNldCwgY21kKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9 CisKKwkJaW5mbyA9ICZjbWRfaW5mb1tjbWRdOworCQlpZiAoIWluZm8tPm5hbWUpIHsKKwkJCURS TV9FUlJPUigiMHglMDh4OiBwYWNrZXQgJWQgaW52YWxpZFxuIiwKKwkJCQkgIHNyY19vZmZzZXQs IGNtZCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChzcmNfb2Zmc2V0ICsgaW5m by0+bGVuID4gbGVuKSB7CisJCQlEUk1fRVJST1IoIjB4JTA4eDogcGFja2V0ICVkICglcykgbGVu Z3RoIDB4JTA4eCAiCisJCQkJICAiZXhjZWVkcyBib3VuZHMgKDB4JTA4eClcbiIsCisJCQkJICBz cmNfb2Zmc2V0LCBjbWQsIGluZm8tPm5hbWUsIGluZm8tPmxlbiwKKwkJCQkgIHNyY19vZmZzZXQg KyBsZW4pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoY21kICE9IFZDNF9QQUNL RVRfR0VNX0hBTkRMRVMpCisJCQltZW1jcHkoZHN0X3BrdCwgc3JjX3BrdCwgaW5mby0+bGVuKTsK KworCQlpZiAoaW5mby0+ZnVuYyAmJiBpbmZvLT5mdW5jKGV4ZWMsCisJCQkJCSAgICAgZHN0X3Br dCArIDEsCisJCQkJCSAgICAgc3JjX3BrdCArIDEpKSB7CisJCQlEUk1fRVJST1IoIjB4JTA4eDog cGFja2V0ICVkICglcykgZmFpbGVkIHRvIHZhbGlkYXRlXG4iLAorCQkJCSAgc3JjX29mZnNldCwg Y21kLCBpbmZvLT5uYW1lKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJc3JjX29mZnNl dCArPSBpbmZvLT5sZW47CisJCS8qIEdFTSBoYW5kbGUgbG9hZGluZyBkb2Vzbid0IHByb2R1Y2Ug SFcgcGFja2V0cy4gKi8KKwkJaWYgKGNtZCAhPSBWQzRfUEFDS0VUX0dFTV9IQU5ETEVTKQorCQkJ ZHN0X29mZnNldCArPSBpbmZvLT5sZW47CisKKwkJLyogV2hlbiB0aGUgQ0wgaGl0cyBoYWx0LCBp dCdsbCBzdG9wIHJlYWRpbmcgYW55dGhpbmcgZWxzZS4gKi8KKwkJaWYgKGNtZCA9PSBWQzRfUEFD S0VUX0hBTFQpCisJCQlicmVhazsKKwl9CisKKwlleGVjLT5jdDBlYSA9IGV4ZWMtPmN0MGNhICsg ZHN0X29mZnNldDsKKworCWlmICghZXhlYy0+Zm91bmRfc3RhcnRfdGlsZV9iaW5uaW5nX3BhY2tl dCkgeworCQlEUk1fRVJST1IoIkJpbiBDTCBtaXNzaW5nIFZDNF9QQUNLRVRfU1RBUlRfVElMRV9C SU5OSU5HXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFleGVjLT5mb3VuZF9p bmNyZW1lbnRfc2VtYXBob3JlX3BhY2tldCkgeworCQlEUk1fRVJST1IoIkJpbiBDTCBtaXNzaW5n IFZDNF9QQUNLRVRfSU5DUkVNRU5UX1NFTUFQSE9SRVxuIik7CisJCXJldHVybiAtRUlOVkFMOwor CX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbAorcmVsb2NfdGV4KHN0cnVjdCB2YzRf ZXhlY19pbmZvICpleGVjLAorCSAgdm9pZCAqdW5pZm9ybV9kYXRhX3UsCisJICBzdHJ1Y3QgdmM0 X3RleHR1cmVfc2FtcGxlX2luZm8gKnNhbXBsZSwKKwkgIHVpbnQzMl90IHRleHR1cmVfaGFuZGxl X2luZGV4KQorCit7CisJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqdGV4OworCXVpbnQzMl90 IHAwID0gKih1aW50MzJfdCAqKSh1bmlmb3JtX2RhdGFfdSArIHNhbXBsZS0+cF9vZmZzZXRbMF0p OworCXVpbnQzMl90IHAxID0gKih1aW50MzJfdCAqKSh1bmlmb3JtX2RhdGFfdSArIHNhbXBsZS0+ cF9vZmZzZXRbMV0pOworCXVpbnQzMl90IHAyID0gKHNhbXBsZS0+cF9vZmZzZXRbMl0gIT0gfjAg PworCQkgICAgICAgKih1aW50MzJfdCAqKSh1bmlmb3JtX2RhdGFfdSArIHNhbXBsZS0+cF9vZmZz ZXRbMl0pIDogMCk7CisJdWludDMyX3QgcDMgPSAoc2FtcGxlLT5wX29mZnNldFszXSAhPSB+MCA/ CisJCSAgICAgICAqKHVpbnQzMl90ICopKHVuaWZvcm1fZGF0YV91ICsgc2FtcGxlLT5wX29mZnNl dFszXSkgOiAwKTsKKwl1aW50MzJfdCAqdmFsaWRhdGVkX3AwID0gZXhlYy0+dW5pZm9ybXNfdiAr IHNhbXBsZS0+cF9vZmZzZXRbMF07CisJdWludDMyX3Qgb2Zmc2V0ID0gcDAgJiBWQzRfVEVYX1Aw X09GRlNFVF9NQVNLOworCXVpbnQzMl90IG1pcGxldmVscyA9IFZDNF9HRVRfRklFTEQocDAsIFZD NF9URVhfUDBfTUlQTFZMUyk7CisJdWludDMyX3Qgd2lkdGggPSBWQzRfR0VUX0ZJRUxEKHAxLCBW QzRfVEVYX1AxX1dJRFRIKTsKKwl1aW50MzJfdCBoZWlnaHQgPSBWQzRfR0VUX0ZJRUxEKHAxLCBW QzRfVEVYX1AxX0hFSUdIVCk7CisJdWludDMyX3QgY3BwLCB0aWxpbmdfZm9ybWF0LCB1dGlsZV93 LCB1dGlsZV9oOworCXVpbnQzMl90IGk7CisJdWludDMyX3QgY3ViZV9tYXBfc3RyaWRlID0gMDsK KwllbnVtIHZjNF90ZXh0dXJlX2RhdGFfdHlwZSB0eXBlOworCisJaWYgKCF2YzRfdXNlX2JvKGV4 ZWMsIHRleHR1cmVfaGFuZGxlX2luZGV4LCBWQzRfTU9ERV9SRU5ERVIsICZ0ZXgpKQorCQlyZXR1 cm4gZmFsc2U7CisKKwlpZiAoc2FtcGxlLT5pc19kaXJlY3QpIHsKKwkJdWludDMyX3QgcmVtYWlu aW5nX3NpemUgPSB0ZXgtPmJhc2Uuc2l6ZSAtIHAwOworCisJCWlmIChwMCA+IHRleC0+YmFzZS5z aXplIC0gNCkgeworCQkJRFJNX0VSUk9SKCJVQk8gb2Zmc2V0IGdyZWF0ZXIgdGhhbiBVQk8gc2l6 ZVxuIik7CisJCQlnb3RvIGZhaWw7CisJCX0KKwkJaWYgKHAxID4gcmVtYWluaW5nX3NpemUgLSA0 KSB7CisJCQlEUk1fRVJST1IoIlVCTyBjbGFtcCB3b3VsZCBhbGxvdyByZWFkcyAiCisJCQkJICAi b3V0c2lkZSBvZiBVQk9cbiIpOworCQkJZ290byBmYWlsOworCQl9CisJCSp2YWxpZGF0ZWRfcDAg PSB0ZXgtPnBhZGRyICsgcDA7CisJCXJldHVybiB0cnVlOworCX0KKworCWlmICh3aWR0aCA9PSAw KQorCQl3aWR0aCA9IDIwNDg7CisJaWYgKGhlaWdodCA9PSAwKQorCQloZWlnaHQgPSAyMDQ4Owor CisJaWYgKHAwICYgVkM0X1RFWF9QMF9DTU1PREVfTUFTSykgeworCQlpZiAoVkM0X0dFVF9GSUVM RChwMiwgVkM0X1RFWF9QMl9QVFlQRSkgPT0KKwkJICAgIFZDNF9URVhfUDJfUFRZUEVfQ1VCRV9N QVBfU1RSSURFKQorCQkJY3ViZV9tYXBfc3RyaWRlID0gcDIgJiBWQzRfVEVYX1AyX0NNU1RfTUFT SzsKKwkJaWYgKFZDNF9HRVRfRklFTEQocDMsIFZDNF9URVhfUDJfUFRZUEUpID09CisJCSAgICBW QzRfVEVYX1AyX1BUWVBFX0NVQkVfTUFQX1NUUklERSkgeworCQkJaWYgKGN1YmVfbWFwX3N0cmlk ZSkgeworCQkJCURSTV9FUlJPUigiQ3ViZSBtYXAgc3RyaWRlIHNldCB0d2ljZVxuIik7CisJCQkJ Z290byBmYWlsOworCQkJfQorCisJCQljdWJlX21hcF9zdHJpZGUgPSBwMyAmIFZDNF9URVhfUDJf Q01TVF9NQVNLOworCQl9CisJCWlmICghY3ViZV9tYXBfc3RyaWRlKSB7CisJCQlEUk1fRVJST1Io IkN1YmUgbWFwIHN0cmlkZSBub3Qgc2V0XG4iKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCX0KKwor CXR5cGUgPSAoVkM0X0dFVF9GSUVMRChwMCwgVkM0X1RFWF9QMF9UWVBFKSB8CisJCShWQzRfR0VU X0ZJRUxEKHAxLCBWQzRfVEVYX1AxX1RZUEU0KSA8PCA0KSk7CisKKwlzd2l0Y2ggKHR5cGUpIHsK KwljYXNlIFZDNF9URVhUVVJFX1RZUEVfUkdCQTg4ODg6CisJY2FzZSBWQzRfVEVYVFVSRV9UWVBF X1JHQlg4ODg4OgorCWNhc2UgVkM0X1RFWFRVUkVfVFlQRV9SR0JBMzJSOgorCQljcHAgPSA0Owor CQlicmVhazsKKwljYXNlIFZDNF9URVhUVVJFX1RZUEVfUkdCQTQ0NDQ6CisJY2FzZSBWQzRfVEVY VFVSRV9UWVBFX1JHQkE1NTUxOgorCWNhc2UgVkM0X1RFWFRVUkVfVFlQRV9SR0I1NjU6CisJY2Fz ZSBWQzRfVEVYVFVSRV9UWVBFX0xVTUFMUEhBOgorCWNhc2UgVkM0X1RFWFRVUkVfVFlQRV9TMTZG OgorCWNhc2UgVkM0X1RFWFRVUkVfVFlQRV9TMTY6CisJCWNwcCA9IDI7CisJCWJyZWFrOworCWNh c2UgVkM0X1RFWFRVUkVfVFlQRV9MVU1JTkFOQ0U6CisJY2FzZSBWQzRfVEVYVFVSRV9UWVBFX0FM UEhBOgorCWNhc2UgVkM0X1RFWFRVUkVfVFlQRV9TODoKKwkJY3BwID0gMTsKKwkJYnJlYWs7CisJ Y2FzZSBWQzRfVEVYVFVSRV9UWVBFX0VUQzE6CisJY2FzZSBWQzRfVEVYVFVSRV9UWVBFX0JXMToK KwljYXNlIFZDNF9URVhUVVJFX1RZUEVfQTQ6CisJY2FzZSBWQzRfVEVYVFVSRV9UWVBFX0ExOgor CWNhc2UgVkM0X1RFWFRVUkVfVFlQRV9SR0JBNjQ6CisJY2FzZSBWQzRfVEVYVFVSRV9UWVBFX1lV VjQyMlI6CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJUZXh0dXJlIGZvcm1hdCAlZCB1bnN1cHBv cnRlZFxuIiwgdHlwZSk7CisJCWdvdG8gZmFpbDsKKwl9CisJdXRpbGVfdyA9IHV0aWxlX3dpZHRo KGNwcCk7CisJdXRpbGVfaCA9IHV0aWxlX2hlaWdodChjcHApOworCisJaWYgKHR5cGUgPT0gVkM0 X1RFWFRVUkVfVFlQRV9SR0JBMzJSKSB7CisJCXRpbGluZ19mb3JtYXQgPSBWQzRfVElMSU5HX0ZP Uk1BVF9MSU5FQVI7CisJfSBlbHNlIHsKKwkJaWYgKHNpemVfaXNfbHQod2lkdGgsIGhlaWdodCwg Y3BwKSkKKwkJCXRpbGluZ19mb3JtYXQgPSBWQzRfVElMSU5HX0ZPUk1BVF9MVDsKKwkJZWxzZQor CQkJdGlsaW5nX2Zvcm1hdCA9IFZDNF9USUxJTkdfRk9STUFUX1Q7CisJfQorCisJaWYgKCF2YzRf Y2hlY2tfdGV4X3NpemUoZXhlYywgdGV4LCBvZmZzZXQgKyBjdWJlX21hcF9zdHJpZGUgKiA1LAor CQkJCXRpbGluZ19mb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGNwcCkpIHsKKwkJZ290byBmYWlsOwor CX0KKworCS8qIFRoZSBtaXBtYXAgbGV2ZWxzIGFyZSBzdG9yZWQgYmVmb3JlIHRoZSBiYXNlIG9m IHRoZSB0ZXh0dXJlLiAgTWFrZQorCSAqIHN1cmUgdGhlcmUgaXMgYWN0dWFsbHkgc3BhY2UgaW4g dGhlIEJPLgorCSAqLworCWZvciAoaSA9IDE7IGkgPD0gbWlwbGV2ZWxzOyBpKyspIHsKKwkJdWlu dDMyX3QgbGV2ZWxfd2lkdGggPSBtYXgod2lkdGggPj4gaSwgMXUpOworCQl1aW50MzJfdCBsZXZl bF9oZWlnaHQgPSBtYXgoaGVpZ2h0ID4+IGksIDF1KTsKKwkJdWludDMyX3QgYWxpZ25lZF93aWR0 aCwgYWxpZ25lZF9oZWlnaHQ7CisJCXVpbnQzMl90IGxldmVsX3NpemU7CisKKwkJLyogT25jZSB0 aGUgbGV2ZWxzIGdldCBzbWFsbCBlbm91Z2gsIHRoZXkgZHJvcCBmcm9tIFQgdG8gTFQuICovCisJ CWlmICh0aWxpbmdfZm9ybWF0ID09IFZDNF9USUxJTkdfRk9STUFUX1QgJiYKKwkJICAgIHNpemVf aXNfbHQobGV2ZWxfd2lkdGgsIGxldmVsX2hlaWdodCwgY3BwKSkgeworCQkJdGlsaW5nX2Zvcm1h dCA9IFZDNF9USUxJTkdfRk9STUFUX0xUOworCQl9CisKKwkJc3dpdGNoICh0aWxpbmdfZm9ybWF0 KSB7CisJCWNhc2UgVkM0X1RJTElOR19GT1JNQVRfVDoKKwkJCWFsaWduZWRfd2lkdGggPSByb3Vu ZF91cChsZXZlbF93aWR0aCwgdXRpbGVfdyAqIDgpOworCQkJYWxpZ25lZF9oZWlnaHQgPSByb3Vu ZF91cChsZXZlbF9oZWlnaHQsIHV0aWxlX2ggKiA4KTsKKwkJCWJyZWFrOworCQljYXNlIFZDNF9U SUxJTkdfRk9STUFUX0xUOgorCQkJYWxpZ25lZF93aWR0aCA9IHJvdW5kX3VwKGxldmVsX3dpZHRo LCB1dGlsZV93KTsKKwkJCWFsaWduZWRfaGVpZ2h0ID0gcm91bmRfdXAobGV2ZWxfaGVpZ2h0LCB1 dGlsZV9oKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYWxpZ25lZF93aWR0aCA9IHJvdW5k X3VwKGxldmVsX3dpZHRoLCB1dGlsZV93KTsKKwkJCWFsaWduZWRfaGVpZ2h0ID0gbGV2ZWxfaGVp Z2h0OworCQkJYnJlYWs7CisJCX0KKworCQlsZXZlbF9zaXplID0gYWxpZ25lZF93aWR0aCAqIGNw cCAqIGFsaWduZWRfaGVpZ2h0OworCisJCWlmIChvZmZzZXQgPCBsZXZlbF9zaXplKSB7CisJCQlE Uk1fRVJST1IoIkxldmVsICVkICglZHglZCAtPiAlZHglZCkgc2l6ZSAlZGIgIgorCQkJCSAgIm92 ZXJmbG93ZWQgYnVmZmVyIGJvdW5kcyAob2Zmc2V0ICVkKVxuIiwKKwkJCQkgIGksIGxldmVsX3dp ZHRoLCBsZXZlbF9oZWlnaHQsCisJCQkJICBhbGlnbmVkX3dpZHRoLCBhbGlnbmVkX2hlaWdodCwK KwkJCQkgIGxldmVsX3NpemUsIG9mZnNldCk7CisJCQlnb3RvIGZhaWw7CisJCX0KKworCQlvZmZz ZXQgLT0gbGV2ZWxfc2l6ZTsKKwl9CisKKwkqdmFsaWRhdGVkX3AwID0gdGV4LT5wYWRkciArIHAw OworCisJcmV0dXJuIHRydWU7CisgZmFpbDoKKwlEUk1fSU5GTygiVGV4dHVyZSBwMCBhdCAlZDog MHglMDh4XG4iLCBzYW1wbGUtPnBfb2Zmc2V0WzBdLCBwMCk7CisJRFJNX0lORk8oIlRleHR1cmUg cDEgYXQgJWQ6IDB4JTA4eFxuIiwgc2FtcGxlLT5wX29mZnNldFsxXSwgcDEpOworCURSTV9JTkZP KCJUZXh0dXJlIHAyIGF0ICVkOiAweCUwOHhcbiIsIHNhbXBsZS0+cF9vZmZzZXRbMl0sIHAyKTsK KwlEUk1fSU5GTygiVGV4dHVyZSBwMyBhdCAlZDogMHglMDh4XG4iLCBzYW1wbGUtPnBfb2Zmc2V0 WzNdLCBwMyk7CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW50Cit2YWxpZGF0ZV9zaGFk ZXJfcmVjKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSAgICBzdHJ1Y3QgdmM0X2V4ZWNfaW5m byAqZXhlYywKKwkJICAgIHN0cnVjdCB2YzRfc2hhZGVyX3N0YXRlICpzdGF0ZSkKK3sKKwl1aW50 MzJfdCAqc3JjX2hhbmRsZXM7CisJdm9pZCAqcGt0X3UsICpwa3RfdjsKKwllbnVtIHNoYWRlcl9y ZWNfcmVsb2NfdHlwZSB7CisJCVJFTE9DX0NPREUsCisJCVJFTE9DX1ZCTywKKwl9OworCXN0cnVj dCBzaGFkZXJfcmVjX3JlbG9jIHsKKwkJZW51bSBzaGFkZXJfcmVjX3JlbG9jX3R5cGUgdHlwZTsK KwkJdWludDMyX3Qgb2Zmc2V0OworCX07CisJc3RhdGljIGNvbnN0IHN0cnVjdCBzaGFkZXJfcmVj X3JlbG9jIGdsX3JlbG9jc1tdID0geworCQl7IFJFTE9DX0NPREUsIDQgfSwgIC8qIGZzICovCisJ CXsgUkVMT0NfQ09ERSwgMTYgfSwgLyogdnMgKi8KKwkJeyBSRUxPQ19DT0RFLCAyOCB9LCAvKiBj cyAqLworCX07CisJc3RhdGljIGNvbnN0IHN0cnVjdCBzaGFkZXJfcmVjX3JlbG9jIG52X3JlbG9j c1tdID0geworCQl7IFJFTE9DX0NPREUsIDQgfSwgLyogZnMgKi8KKwkJeyBSRUxPQ19WQk8sIDEy IH0KKwl9OworCWNvbnN0IHN0cnVjdCBzaGFkZXJfcmVjX3JlbG9jICpyZWxvY3M7CisJc3RydWN0 IGRybV9nZW1fY21hX29iamVjdCAqYm9bQVJSQVlfU0laRShnbF9yZWxvY3MpICsgOF07CisJdWlu dDMyX3QgbnJfYXR0cmlidXRlcyA9IDAsIG5yX2ZpeGVkX3JlbG9jcywgbnJfcmVsb2NzLCBwYWNr ZXRfc2l6ZTsKKwlpbnQgaTsKKwlzdHJ1Y3QgdmM0X3ZhbGlkYXRlZF9zaGFkZXJfaW5mbyAqc2hh ZGVyOworCisJaWYgKHN0YXRlLT5wYWNrZXQgPT0gVkM0X1BBQ0tFVF9OVl9TSEFERVJfU1RBVEUp IHsKKwkJcmVsb2NzID0gbnZfcmVsb2NzOworCQlucl9maXhlZF9yZWxvY3MgPSBBUlJBWV9TSVpF KG52X3JlbG9jcyk7CisKKwkJcGFja2V0X3NpemUgPSAxNjsKKwl9IGVsc2UgeworCQlyZWxvY3Mg PSBnbF9yZWxvY3M7CisJCW5yX2ZpeGVkX3JlbG9jcyA9IEFSUkFZX1NJWkUoZ2xfcmVsb2NzKTsK KworCQlucl9hdHRyaWJ1dGVzID0gc3RhdGUtPmFkZHIgJiAweDc7CisJCWlmIChucl9hdHRyaWJ1 dGVzID09IDApCisJCQlucl9hdHRyaWJ1dGVzID0gODsKKwkJcGFja2V0X3NpemUgPSBnbF9zaGFk ZXJfcmVjX3NpemUoc3RhdGUtPmFkZHIpOworCX0KKwlucl9yZWxvY3MgPSBucl9maXhlZF9yZWxv Y3MgKyBucl9hdHRyaWJ1dGVzOworCisJaWYgKG5yX3JlbG9jcyAqIDQgPiBleGVjLT5zaGFkZXJf cmVjX3NpemUpIHsKKwkJRFJNX0VSUk9SKCJvdmVyZmxvd2VkIHNoYWRlciByZWNzIHJlYWRpbmcg JWQgaGFuZGxlcyAiCisJCQkgICJmcm9tICVkIGJ5dGVzIGxlZnRcbiIsCisJCQkgIG5yX3JlbG9j cywgZXhlYy0+c2hhZGVyX3JlY19zaXplKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXNyY19o YW5kbGVzID0gZXhlYy0+c2hhZGVyX3JlY191OworCWV4ZWMtPnNoYWRlcl9yZWNfdSArPSBucl9y ZWxvY3MgKiA0OworCWV4ZWMtPnNoYWRlcl9yZWNfc2l6ZSAtPSBucl9yZWxvY3MgKiA0OworCisJ aWYgKHBhY2tldF9zaXplID4gZXhlYy0+c2hhZGVyX3JlY19zaXplKSB7CisJCURSTV9FUlJPUigi b3ZlcmZsb3dlZCBzaGFkZXIgcmVjcyBjb3B5aW5nICVkYiBwYWNrZXQgIgorCQkJICAiZnJvbSAl ZCBieXRlcyBsZWZ0XG4iLAorCQkJICBwYWNrZXRfc2l6ZSwgZXhlYy0+c2hhZGVyX3JlY19zaXpl KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXBrdF91ID0gZXhlYy0+c2hhZGVyX3JlY191Owor CXBrdF92ID0gZXhlYy0+c2hhZGVyX3JlY192OworCW1lbWNweShwa3RfdiwgcGt0X3UsIHBhY2tl dF9zaXplKTsKKwlleGVjLT5zaGFkZXJfcmVjX3UgKz0gcGFja2V0X3NpemU7CisJLyogU2hhZGVy IHJlY3MgaGF2ZSB0byBiZSBhbGlnbmVkIHRvIDE2IGJ5dGVzIChkdWUgdG8gdGhlIGF0dHJpYnV0 ZQorCSAqIGZsYWdzIGJlaW5nIGluIHRoZSBsb3cgYnl0ZXMpLCBzbyByb3VuZCB0aGUgbmV4dCB2 YWxpZGF0ZWQgc2hhZGVyCisJICogcmVjIGFkZHJlc3MgdXAuICBUaGlzIHNob3VsZCBiZSBzYWZl LCBzaW5jZSB3ZSd2ZSBnb3Qgc28gbWFueQorCSAqIHJlbG9jYXRpb25zIGluIGEgc2hhZGVyIHJl YyBwYWNrZXQuCisJICovCisJQlVHX09OKHJvdW5kdXAocGFja2V0X3NpemUsIDE2KSAtIHBhY2tl dF9zaXplID4gbnJfcmVsb2NzICogNCk7CisJZXhlYy0+c2hhZGVyX3JlY192ICs9IHJvdW5kdXAo cGFja2V0X3NpemUsIDE2KTsKKwlleGVjLT5zaGFkZXJfcmVjX3NpemUgLT0gcGFja2V0X3NpemU7 CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmVsb2NzOyBpKyspIHsKKwkJZW51bSB2YzRfYm9fbW9k ZSBtb2RlOworCisJCWlmIChpIDwgbnJfZml4ZWRfcmVsb2NzICYmIHJlbG9jc1tpXS50eXBlID09 IFJFTE9DX0NPREUpCisJCQltb2RlID0gVkM0X01PREVfU0hBREVSOworCQllbHNlCisJCQltb2Rl ID0gVkM0X01PREVfUkVOREVSOworCisJCWlmICghdmM0X3VzZV9ibyhleGVjLCBzcmNfaGFuZGxl c1tpXSwgbW9kZSwgJmJvW2ldKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlmb3IgKGkgPSAw OyBpIDwgbnJfZml4ZWRfcmVsb2NzOyBpKyspIHsKKwkJc3RydWN0IHZjNF9ibyAqdmM0X2JvOwor CQl1aW50MzJfdCBvID0gcmVsb2NzW2ldLm9mZnNldDsKKwkJdWludDMyX3Qgc3JjX29mZnNldCA9 ICoodWludDMyX3QgKikocGt0X3UgKyBvKTsKKwkJdWludDMyX3QgKnRleHR1cmVfaGFuZGxlc191 OworCQl2b2lkICp1bmlmb3JtX2RhdGFfdTsKKwkJdWludDMyX3QgdGV4OworCisJCSoodWludDMy X3QgKikocGt0X3YgKyBvKSA9IGJvW2ldLT5wYWRkciArIHNyY19vZmZzZXQ7CisKKwkJc3dpdGNo IChyZWxvY3NbaV0udHlwZSkgeworCQljYXNlIFJFTE9DX0NPREU6CisJCQlpZiAoc3JjX29mZnNl dCAhPSAwKSB7CisJCQkJRFJNX0VSUk9SKCJTaGFkZXJzIG11c3QgYmUgYXQgb2Zmc2V0IDAgIgor CQkJCQkgICJvZiB0aGUgQk8uXG4iKTsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisKKwkJCXZjNF9i byA9IHRvX3ZjNF9ibygmYm9baV0tPmJhc2UpOworCQkJc2hhZGVyID0gdmM0X2JvLT52YWxpZGF0 ZWRfc2hhZGVyOworCQkJaWYgKCFzaGFkZXIpCisJCQkJZ290byBmYWlsOworCisJCQlpZiAoc2hh ZGVyLT51bmlmb3Jtc19zcmNfc2l6ZSA+IGV4ZWMtPnVuaWZvcm1zX3NpemUpIHsKKwkJCQlEUk1f RVJST1IoIlVuaWZvcm1zIHNyYyBidWZmZXIgb3ZlcmZsb3dcbiIpOworCQkJCWdvdG8gZmFpbDsK KwkJCX0KKworCQkJdGV4dHVyZV9oYW5kbGVzX3UgPSBleGVjLT51bmlmb3Jtc191OworCQkJdW5p Zm9ybV9kYXRhX3UgPSAodGV4dHVyZV9oYW5kbGVzX3UgKworCQkJCQkgIHNoYWRlci0+bnVtX3Rl eHR1cmVfc2FtcGxlcyk7CisKKwkJCW1lbWNweShleGVjLT51bmlmb3Jtc192LCB1bmlmb3JtX2Rh dGFfdSwKKwkJCSAgICAgICBzaGFkZXItPnVuaWZvcm1zX3NpemUpOworCisJCQlmb3IgKHRleCA9 IDA7CisJCQkgICAgIHRleCA8IHNoYWRlci0+bnVtX3RleHR1cmVfc2FtcGxlczsKKwkJCSAgICAg dGV4KyspIHsKKwkJCQlpZiAoIXJlbG9jX3RleChleGVjLAorCQkJCQkgICAgICAgdW5pZm9ybV9k YXRhX3UsCisJCQkJCSAgICAgICAmc2hhZGVyLT50ZXh0dXJlX3NhbXBsZXNbdGV4XSwKKwkJCQkJ ICAgICAgIHRleHR1cmVfaGFuZGxlc191W3RleF0pKSB7CisJCQkJCWdvdG8gZmFpbDsKKwkJCQl9 CisJCQl9CisKKwkJCSoodWludDMyX3QgKikocGt0X3YgKyBvICsgNCkgPSBleGVjLT51bmlmb3Jt c19wOworCisJCQlleGVjLT51bmlmb3Jtc191ICs9IHNoYWRlci0+dW5pZm9ybXNfc3JjX3NpemU7 CisJCQlleGVjLT51bmlmb3Jtc192ICs9IHNoYWRlci0+dW5pZm9ybXNfc2l6ZTsKKwkJCWV4ZWMt PnVuaWZvcm1zX3AgKz0gc2hhZGVyLT51bmlmb3Jtc19zaXplOworCisJCQlicmVhazsKKworCQlj YXNlIFJFTE9DX1ZCTzoKKwkJCWJyZWFrOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5y X2F0dHJpYnV0ZXM7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICp2Ym8gPSBi b1tucl9maXhlZF9yZWxvY3MgKyBpXTsKKwkJdWludDMyX3QgbyA9IDM2ICsgaSAqIDg7CisJCXVp bnQzMl90IG9mZnNldCA9ICoodWludDMyX3QgKikocGt0X3UgKyBvICsgMCk7CisJCXVpbnQzMl90 IGF0dHJfc2l6ZSA9ICoodWludDhfdCAqKShwa3RfdSArIG8gKyA0KSArIDE7CisJCXVpbnQzMl90 IHN0cmlkZSA9ICoodWludDhfdCAqKShwa3RfdSArIG8gKyA1KTsKKwkJdWludDMyX3QgbWF4X2lu ZGV4OworCisJCWlmIChzdGF0ZS0+YWRkciAmIDB4OCkKKwkJCXN0cmlkZSB8PSAoKih1aW50MzJf dCAqKShwa3RfdSArIDEwMCArIGkgKiA0KSkgJiB+MHhmZjsKKworCQlpZiAodmJvLT5iYXNlLnNp emUgPCBvZmZzZXQgfHwKKwkJICAgIHZiby0+YmFzZS5zaXplIC0gb2Zmc2V0IDwgYXR0cl9zaXpl KSB7CisJCQlEUk1fRVJST1IoIkJPIG9mZnNldCBvdmVyZmxvdyAoJWQgKyAlZCA+ICVkKVxuIiwK KwkJCQkgIG9mZnNldCwgYXR0cl9zaXplLCB2Ym8tPmJhc2Uuc2l6ZSk7CisJCQlyZXR1cm4gLUVJ TlZBTDsKKwkJfQorCisJCWlmIChzdHJpZGUgIT0gMCkgeworCQkJbWF4X2luZGV4ID0gKCh2Ym8t PmJhc2Uuc2l6ZSAtIG9mZnNldCAtIGF0dHJfc2l6ZSkgLworCQkJCSAgICAgc3RyaWRlKTsKKwkJ CWlmIChzdGF0ZS0+bWF4X2luZGV4ID4gbWF4X2luZGV4KSB7CisJCQkJRFJNX0VSUk9SKCJwcmlt aXRpdmVzIHVzZSBpbmRleCAlZCBvdXQgb2YgIgorCQkJCQkgICJzdXBwbGllZCAlZFxuIiwKKwkJ CQkJICBzdGF0ZS0+bWF4X2luZGV4LCBtYXhfaW5kZXgpOworCQkJCXJldHVybiAtRUlOVkFMOwor CQkJfQorCQl9CisKKwkJKih1aW50MzJfdCAqKShwa3RfdiArIG8pID0gdmJvLT5wYWRkciArIG9m ZnNldDsKKwl9CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlyZXR1cm4gLUVJTlZBTDsKK30KKwor aW50Cit2YzRfdmFsaWRhdGVfc2hhZGVyX3JlY3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJ CSBzdHJ1Y3QgdmM0X2V4ZWNfaW5mbyAqZXhlYykKK3sKKwl1aW50MzJfdCBpOworCWludCByZXQg PSAwOworCisJZm9yIChpID0gMDsgaSA8IGV4ZWMtPnNoYWRlcl9zdGF0ZV9jb3VudDsgaSsrKSB7 CisJCXJldCA9IHZhbGlkYXRlX3NoYWRlcl9yZWMoZGV2LCBleGVjLCAmZXhlYy0+c2hhZGVyX3N0 YXRlW2ldKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHJldDsK K30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vdmM0X2RybS5oIGIvaW5jbHVkZS91YXBp L2RybS92YzRfZHJtLmgKaW5kZXggMDcxNmI1MC4uZTcxMWVjMCAxMDA2NDQKLS0tIGEvaW5jbHVk ZS91YXBpL2RybS92YzRfZHJtLmgKKysrIGIvaW5jbHVkZS91YXBpL2RybS92YzRfZHJtLmgKQEAg LTI2LDE0ICsyNiwxNTUgQEAKIAogI2luY2x1ZGUgPGRybS9kcm0uaD4KIAorI2RlZmluZSBEUk1f VkM0X1NVQk1JVF9DTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIERSTV9W QzRfV0FJVF9TRVFOTyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgRFJNX1ZD NF9XQUlUX0JPICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMgogI2RlZmluZSBEUk1fVkM0 X0NSRUFURV9CTyAgICAgICAgICAgICAgICAgICAgICAgICAweDAzCiAjZGVmaW5lIERSTV9WQzRf TU1BUF9CTyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQKICNkZWZpbmUgRFJNX1ZDNF9D UkVBVEVfU0hBREVSX0JPICAgICAgICAgICAgICAgICAgMHgwNQogCisjZGVmaW5lIERSTV9JT0NU TF9WQzRfU1VCTUlUX0NMICAgICAgICAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJN X1ZDNF9TVUJNSVRfQ0wsIHN0cnVjdCBkcm1fdmM0X3N1Ym1pdF9jbCkKKyNkZWZpbmUgRFJNX0lP Q1RMX1ZDNF9XQUlUX1NFUU5PICAgICAgICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBE Uk1fVkM0X1dBSVRfU0VRTk8sIHN0cnVjdCBkcm1fdmM0X3dhaXRfc2Vxbm8pCisjZGVmaW5lIERS TV9JT0NUTF9WQzRfV0FJVF9CTyAgICAgICAgICAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNF ICsgRFJNX1ZDNF9XQUlUX0JPLCBzdHJ1Y3QgZHJtX3ZjNF93YWl0X2JvKQogI2RlZmluZSBEUk1f SU9DVExfVkM0X0NSRUFURV9CTyAgICAgICAgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSAr IERSTV9WQzRfQ1JFQVRFX0JPLCBzdHJ1Y3QgZHJtX3ZjNF9jcmVhdGVfYm8pCiAjZGVmaW5lIERS TV9JT0NUTF9WQzRfTU1BUF9CTyAgICAgICAgICAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNF ICsgRFJNX1ZDNF9NTUFQX0JPLCBzdHJ1Y3QgZHJtX3ZjNF9tbWFwX2JvKQogI2RlZmluZSBEUk1f SU9DVExfVkM0X0NSRUFURV9TSEFERVJfQk8gICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSAr IERSTV9WQzRfQ1JFQVRFX1NIQURFUl9CTywgc3RydWN0IGRybV92YzRfY3JlYXRlX3NoYWRlcl9i bykKIAorc3RydWN0IGRybV92YzRfc3VibWl0X3JjbF9zdXJmYWNlIHsKKwl1aW50MzJfdCBoaW5k ZXg7IC8qIEhhbmRsZSBpbmRleCwgb3IgfjAgaWYgbm90IHByZXNlbnQuICovCisJdWludDMyX3Qg b2Zmc2V0OyAvKiBPZmZzZXQgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLworCS8qCisJICogQml0cyBm b3IgZWl0aGVyIHJlbmRlciBjb25maWcgKGNvbG9yX3dyaXRlKSBvciBsb2FkL3N0b3JlIHBhY2tl dC4KKwkgKiBCaXRzIHNob3VsZCBhbGwgYmUgMCBmb3IgTVNBQSBsb2FkL3N0b3Jlcy4KKwkgKi8K Kwl1aW50MTZfdCBiaXRzOworCisjZGVmaW5lIFZDNF9TVUJNSVRfUkNMX1NVUkZBQ0VfUkVBRF9J U19GVUxMX1JFUwkJKDEgPDwgMCkKKwl1aW50MTZfdCBmbGFnczsKK307CisKKy8qKgorICogc3Ry dWN0IGRybV92YzRfc3VibWl0X2NsIC0gaW9jdGwgYXJndW1lbnQgZm9yIHN1Ym1pdHRpbmcgY29t bWFuZHMgdG8gdGhlIDNECisgKiBlbmdpbmUuCisgKgorICogRHJpdmVycyB0eXBpY2FsbHkgdXNl IEdQVSBCT3MgdG8gc3RvcmUgYmF0Y2hidWZmZXJzIC8gY29tbWFuZCBsaXN0cyBhbmQKKyAqIHRo ZWlyIGFzc29jaWF0ZWQgc3RhdGUuICBIb3dldmVyLCBiZWNhdXNlIHRoZSBWQzQgbGFja3MgYW4g TU1VLCB3ZSBoYXZlIHRvCisgKiBkbyB2YWxpZGF0aW9uIG9mIG1lbW9yeSBhY2Nlc3NlcyBieSB0 aGUgR1BVIGNvbW1hbmRzLiAgSWYgd2Ugd2VyZSB0byBzdG9yZQorICogb3VyIGNvbW1hbmRzIGlu IEJPcywgd2UnZCBuZWVkIHRvIGRvIHVuY2FjaGVkIHJlYWRiYWNrIGZyb20gdGhlbSB0byBkbyB0 aGUKKyAqIHZhbGlkYXRpb24gcHJvY2Vzcywgd2hpY2ggaXMgdG9vIGV4cGVuc2l2ZS4gIEluc3Rl YWQsIHVzZXJzcGFjZSBhY2N1bXVsYXRlcworICogY29tbWFuZHMgYW5kIGFzc29jaWF0ZWQgc3Rh dGUgaW4gcGxhaW4gbWVtb3J5LCB0aGVuIHRoZSBrZXJuZWwgY29waWVzIHRoZQorICogZGF0YSB0 byBpdHMgb3duIGFkZHJlc3Mgc3BhY2UsIGFuZCB0aGVuIHZhbGlkYXRlcyBhbmQgc3RvcmVzIGl0 IGluIGEgR1BVCisgKiBCTy4KKyAqLworc3RydWN0IGRybV92YzRfc3VibWl0X2NsIHsKKwkvKiBQ b2ludGVyIHRvIHRoZSBiaW5uZXIgY29tbWFuZCBsaXN0LgorCSAqCisJICogVGhpcyBpcyB0aGUg Zmlyc3Qgc2V0IG9mIGNvbW1hbmRzIGV4ZWN1dGVkLCB3aGljaCBydW5zIHRoZQorCSAqIGNvb3Jk aW5hdGUgc2hhZGVyIHRvIGRldGVybWluZSB3aGVyZSBwcmltaXRpdmVzIGxhbmQgb24gdGhlIHNj cmVlbiwKKwkgKiB0aGVuIHdyaXRlcyBvdXQgdGhlIHN0YXRlIHVwZGF0ZXMgYW5kIGRyYXcgY2Fs bHMgbmVjZXNzYXJ5IHBlciB0aWxlCisJICogdG8gdGhlIHRpbGUgYWxsb2NhdGlvbiBCTy4KKwkg Ki8KKwl1aW50NjRfdCBiaW5fY2w7CisKKwkvKiBQb2ludGVyIHRvIHRoZSBzaGFkZXIgcmVjb3Jk cy4KKwkgKgorCSAqIFNoYWRlciByZWNvcmRzIGFyZSB0aGUgc3RydWN0dXJlcyByZWFkIGJ5IHRo ZSBoYXJkd2FyZSB0aGF0IGNvbnRhaW4KKwkgKiBwb2ludGVycyB0byB1bmlmb3Jtcywgc2hhZGVy cywgYW5kIHZlcnRleCBhdHRyaWJ1dGVzLiAgVGhlCisJICogcmVmZXJlbmNlIHRvIHRoZSBzaGFk ZXIgcmVjb3JkIGhhcyBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZGV0ZXJtaW5lCisJICogaG93IG1h bnkgcG9pbnRlcnMgYXJlIG5lY2Vzc2FyeSAoZml4ZWQgbnVtYmVyIGZvciBzaGFkZXJzL3VuaWZv cm1zLAorCSAqIGFuZCBhbiBhdHRyaWJ1dGUgY291bnQpLCBzbyB0aG9zZSBCTyBpbmRpY2VzIGlu dG8gYm9faGFuZGxlcyBhcmUKKwkgKiBqdXN0IHN0b3JlZCBhcyB1aW50MzJfdHMgYmVmb3JlIGVh Y2ggc2hhZGVyIHJlY29yZCBwYXNzZWQgaW4uCisJICovCisJdWludDY0X3Qgc2hhZGVyX3JlYzsK KworCS8qIFBvaW50ZXIgdG8gdW5pZm9ybSBkYXRhIGFuZCB0ZXh0dXJlIGhhbmRsZXMgZm9yIHRo ZSB0ZXh0dXJlcworCSAqIHJlZmVyZW5jZWQgYnkgdGhlIHNoYWRlci4KKwkgKgorCSAqIEZvciBl YWNoIHNoYWRlciBzdGF0ZSByZWNvcmQsIHRoZXJlIGlzIGEgc2V0IG9mIHVuaWZvcm0gZGF0YSBp biB0aGUKKwkgKiBvcmRlciByZWZlcmVuY2VkIGJ5IHRoZSByZWNvcmQgKEZTLCBWUywgdGhlbiBD UykuICBFYWNoIHNldCBvZgorCSAqIHVuaWZvcm0gZGF0YSBoYXMgYSB1aW50MzJfdCBpbmRleCBp bnRvIGJvX2hhbmRsZXMgcGVyIHRleHR1cmUKKwkgKiBzYW1wbGUgb3BlcmF0aW9uLCBpbiB0aGUg b3JkZXIgdGhlIFFQVV9XX1RNVW5fUyB3cml0ZXMgYXBwZWFyIGluCisJICogdGhlIHByb2dyYW0u ICBGb2xsb3dpbmcgdGhlIHRleHR1cmUgQk8gaGFuZGxlIGluZGljZXMgaXMgdGhlIGFjdHVhbAor CSAqIHVuaWZvcm0gZGF0YS4KKwkgKgorCSAqIFRoZSBpbmRpdmlkdWFsIHVuaWZvcm0gc3RhdGUg YmxvY2tzIGRvbid0IGhhdmUgc2l6ZXMgcGFzc2VkIGluLAorCSAqIGJlY2F1c2UgdGhlIGtlcm5l bCBoYXMgdG8gZGV0ZXJtaW5lIHRoZSBzaXplcyBhbnl3YXkgZHVyaW5nIHNoYWRlcgorCSAqIGNv ZGUgdmFsaWRhdGlvbi4KKwkgKi8KKwl1aW50NjRfdCB1bmlmb3JtczsKKwl1aW50NjRfdCBib19o YW5kbGVzOworCisJLyogU2l6ZSBpbiBieXRlcyBvZiB0aGUgYmlubmVyIGNvbW1hbmQgbGlzdC4g Ki8KKwl1aW50MzJfdCBiaW5fY2xfc2l6ZTsKKwkvKiBTaXplIGluIGJ5dGVzIG9mIHRoZSBzZXQg b2Ygc2hhZGVyIHJlY29yZHMuICovCisJdWludDMyX3Qgc2hhZGVyX3JlY19zaXplOworCS8qIE51 bWJlciBvZiBzaGFkZXIgcmVjb3Jkcy4KKwkgKgorCSAqIFRoaXMgY291bGQganVzdCBiZSBjb21w dXRlZCBmcm9tIHRoZSBjb250ZW50cyBvZiBzaGFkZXJfcmVjb3JkcyBhbmQKKwkgKiB0aGUgYWRk cmVzcyBiaXRzIG9mIHJlZmVyZW5jZXMgdG8gdGhlbSBmcm9tIHRoZSBiaW4gQ0wsIGJ1dCBpdAor CSAqIGtlZXBzIHRoZSBrZXJuZWwgZnJvbSBoYXZpbmcgdG8gcmVzaXplIHNvbWUgYWxsb2NhdGlv bnMgaXQgbWFrZXMuCisJICovCisJdWludDMyX3Qgc2hhZGVyX3JlY19jb3VudDsKKwkvKiBTaXpl IGluIGJ5dGVzIG9mIHRoZSB1bmlmb3JtIHN0YXRlLiAqLworCXVpbnQzMl90IHVuaWZvcm1zX3Np emU7CisKKwkvKiBOdW1iZXIgb2YgQk8gaGFuZGxlcyBwYXNzZWQgaW4gKHNpemUgaXMgdGhhdCB0 aW1lcyA0KS4gKi8KKwl1aW50MzJfdCBib19oYW5kbGVfY291bnQ7CisKKwkvKiBSQ0wgc2V0dXA6 ICovCisJdWludDE2X3Qgd2lkdGg7CisJdWludDE2X3QgaGVpZ2h0OworCXVpbnQ4X3QgbWluX3hf dGlsZTsKKwl1aW50OF90IG1pbl95X3RpbGU7CisJdWludDhfdCBtYXhfeF90aWxlOworCXVpbnQ4 X3QgbWF4X3lfdGlsZTsKKwlzdHJ1Y3QgZHJtX3ZjNF9zdWJtaXRfcmNsX3N1cmZhY2UgY29sb3Jf cmVhZDsKKwlzdHJ1Y3QgZHJtX3ZjNF9zdWJtaXRfcmNsX3N1cmZhY2UgY29sb3Jfd3JpdGU7CisJ c3RydWN0IGRybV92YzRfc3VibWl0X3JjbF9zdXJmYWNlIHpzX3JlYWQ7CisJc3RydWN0IGRybV92 YzRfc3VibWl0X3JjbF9zdXJmYWNlIHpzX3dyaXRlOworCXN0cnVjdCBkcm1fdmM0X3N1Ym1pdF9y Y2xfc3VyZmFjZSBtc2FhX2NvbG9yX3dyaXRlOworCXN0cnVjdCBkcm1fdmM0X3N1Ym1pdF9yY2xf c3VyZmFjZSBtc2FhX3pzX3dyaXRlOworCXVpbnQzMl90IGNsZWFyX2NvbG9yWzJdOworCXVpbnQz Ml90IGNsZWFyX3o7CisJdWludDhfdCBjbGVhcl9zOworCisJdWludDMyX3QgcGFkOjI0OworCisj ZGVmaW5lIFZDNF9TVUJNSVRfQ0xfVVNFX0NMRUFSX0NPTE9SCQkJKDEgPDwgMCkKKwl1aW50MzJf dCBmbGFnczsKKworCS8qIFJldHVybmVkIHZhbHVlIG9mIHRoZSBzZXFubyBvZiB0aGlzIHJlbmRl ciBqb2IgKGZvciB0aGUKKwkgKiB3YWl0IGlvY3RsKS4KKwkgKi8KKwl1aW50NjRfdCBzZXFubzsK K307CisKKy8qKgorICogc3RydWN0IGRybV92YzRfd2FpdF9zZXFubyAtIGlvY3RsIGFyZ3VtZW50 IGZvciB3YWl0aW5nIGZvcgorICogRFJNX1ZDNF9TVUJNSVRfQ0wgY29tcGxldGlvbiB1c2luZyBp dHMgcmV0dXJuZWQgc2Vxbm8uCisgKgorICogdGltZW91dF9ucyBpcyB0aGUgdGltZW91dCBpbiBu YW5vc2Vjb25kcywgd2hlcmUgIjAiIG1lYW5zICJkb24ndAorICogYmxvY2ssIGp1c3QgcmV0dXJu IHRoZSBzdGF0dXMuIgorICovCitzdHJ1Y3QgZHJtX3ZjNF93YWl0X3NlcW5vIHsKKwl1aW50NjRf dCBzZXFubzsKKwl1aW50NjRfdCB0aW1lb3V0X25zOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHJt X3ZjNF93YWl0X2JvIC0gaW9jdGwgYXJndW1lbnQgZm9yIHdhaXRpbmcgZm9yCisgKiBjb21wbGV0 aW9uIG9mIHRoZSBsYXN0IERSTV9WQzRfU1VCTUlUX0NMIG9uIGEgQk8uCisgKgorICogVGhpcyBp cyB1c2VmdWwgZm9yIGNhc2VzIHdoZXJlIG11bHRpcGxlIHByb2Nlc3NlcyBtaWdodCBiZQorICog cmVuZGVyaW5nIHRvIGEgQk8gYW5kIHlvdSB3YW50IHRvIHdhaXQgZm9yIGFsbCByZW5kZXJpbmcg dG8gYmUKKyAqIGNvbXBsZXRlZC4KKyAqLworc3RydWN0IGRybV92YzRfd2FpdF9ibyB7CisJdWlu dDMyX3QgaGFuZGxlOworCXVpbnQzMl90IHBhZDsKKwl1aW50NjRfdCB0aW1lb3V0X25zOworfTsK KwogLyoqCiAgKiBzdHJ1Y3QgZHJtX3ZjNF9jcmVhdGVfYm8gLSBpb2N0bCBhcmd1bWVudCBmb3Ig Y3JlYXRpbmcgVkM0IEJPcy4KICAqCi0tIAoyLjYuMgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9kcmktZGV2ZWwK