From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yao Cheng Subject: [RFC PATCH v3 2/4] drm/ipvr: drm driver for VED Date: Sat, 22 Nov 2014 03:06:58 +0800 Message-ID: <1416596818-5651-3-git-send-email-yao.cheng@intel.com> References: <1416596818-5651-1-git-send-email-yao.cheng@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1416596818-5651-1-git-send-email-yao.cheng@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, daniel.vetter@ffwll.ch, sean.v.kelley@intel.com, john.chehab@intel.com Cc: emil.l.velikov@gmail.com, fei.jiang@intel.com, dh.herrmann@gmail.com, daniel@fooishbar.org List-Id: dri-devel@lists.freedesktop.org UHJvYmVzIFZFRCBhbmQgY3JlYXRlcyBhIG5ldyBkcm0gZGV2aWNlIGZvciBoYXJkd2FyZSBhY2Nl bGVyYXRlZAp2aWRlbyBkZWNvZGluZy4KQ3VycmVudGx5IHN1cHBvcnQgVlA4IGRlY29kaW5nIG9u IHZhbGxleXZpZXcuCgp2MjoKdGFrZSBEYXZpZCdzIGNvbW1lbnRzCgktIGFkZCBtbWFwIHN1cHBv cnQgYW5kIHJlbW92ZSBtbWFwX2lvY3RsCgktIHJlbW92ZSBwb3N0Y2xvc2Ugc2luY2UgaXQncyBk ZXByZWNhdGVkCgktIE5VTEwgc2V0X2J1c2lkCgp2MzoKdGFrZSBEYXZpZCwgRGFuaWVsIGFuZCBK ZXNzZSdzIGNvbW1lbnRzIGFuZCBtYXNzaXZlIHJlZmluZQoJLSB1c2UgZHJtX2Rldl9hbGxvYytk cm1fZGV2X3JlZ2lzdGVyIHRvIHJlcGxhY2UgZHJtX3BsYXRmb3JtX2luaXQKCS0gc2FtZSBhcyBh Ym92ZSBpbiBleGl0IHNpZGUKCS0gcmVtb3ZlIGZkIGJhc2VkIGV4cGxpdCBmZW5jZQoJLSByZWZp bmUgaXB2cl9kcm0uaCwgdXNlIF9fdTMyIHNlcmllcyBhbmQgcmVmaW5lIHBhZGRpbmdzCgktIGFk ZCBkb2MgdG8gZGVzY3JpYmUgaXB2ci92ZWQgdGVybWlub2xvZ3kKCS0gaW9jdGwgcmVmaW5lOiBy ZW1vdmUgdW51c2VkIGNvZGUKCS0gdXNlIHVpbnRwdHJfdCBzZXJpZXMgZm9yIGFkZHJlc3MvbnVt YmVyIGNvbnZlcnNpb24KCS0gcnVudGltZSBwbSByZWZpbmU6IGd1YXJhbnRlZSBnZXQvcHV0IHBh cmluZwoJLSBhZGQgUFJJTUUgZmVhdHVyZSBhbmQgcmVtb3ZlIFVTRVJQVFIgaW9jdGwKCS0gaW1w bGVtZW50IHJlbG9jYXRpb24gZml4dXAgaW4gRVhFQyBpb2N0bAoJLSBjYWxsIGRybV9nZW1fZ2V0 X3BhZ2VzIHRvIHJlcGxhY2UgbXkgb3duIGltcGxlbWVudGF0aW9uCgktIGNvZGUgY2xlYW51cDog cmVtb3ZlIHVudXNlZCBjb2RlCgpTaWduZWQtb2ZmLWJ5OiBZYW8gQ2hlbmcgPHlhby5jaGVuZ0Bp bnRlbC5jb20+Ci0tLQogRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RybS50bXBsICAgIHwgICAzOSAr KwogZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgIHwgICAgMiArCiBkcml2ZXJzL2dw dS9kcm0vTWFrZWZpbGUgICAgICAgICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pcHZyL0tj b25maWcgICAgICB8ICAgIDkgKwogZHJpdmVycy9ncHUvZHJtL2lwdnIvTWFrZWZpbGUgICAgIHwg ICAxOCArCiBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2JvLmMgICAgfCAgNTQ2ICsrKysrKysr KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2JvLmggICAgfCAgIDgwICsrKwog ZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9kZWJ1Zy5jIHwgIDM0NyArKysrKysrKysrKwogZHJp dmVycy9ncHUvZHJtL2lwdnIvaXB2cl9kZWJ1Zy5oIHwgICA3NiArKysKIGRyaXZlcnMvZ3B1L2Ry bS9pcHZyL2lwdnJfZHJtLmggICB8ICAyNzggKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaXB2 ci9pcHZyX2Rydi5jICAgfCAgNjE0ICsrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2Ry bS9pcHZyL2lwdnJfZHJ2LmggICB8ICAyOTQgKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaXB2 ci9pcHZyX2V4ZWMuYyAgfCAgNjIzICsrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2Ry bS9pcHZyL2lwdnJfZXhlYy5oICB8ICAgNTcgKysKIGRyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJf ZmVuY2UuYyB8ICA0OTAgKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZy X2ZlbmNlLmggfCAgIDc0ICsrKwogZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9nZW0uYyAgIHwg IDM0MSArKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9nZW0uaCAgIHwgICA0 OCArKwogZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9tbXUuYyAgIHwgIDc1MiArKysrKysrKysr KysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9tbXUuaCAgIHwgIDExMSAr KysrCiBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX3RyYWNlLmMgfCAgIDExICsKIGRyaXZlcnMv Z3B1L2RybS9pcHZyL2lwdnJfdHJhY2UuaCB8ICAzMjYgKysrKysrKysrKwogZHJpdmVycy9ncHUv ZHJtL2lwdnIvdmVkX2NtZC5jICAgIHwgIDg4MiArKysrKysrKysrKysrKysrKysrKysrKysrKysK IGRyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9jbWQuaCAgICB8ICAgNzEgKysrCiBkcml2ZXJzL2dw dS9kcm0vaXB2ci92ZWRfZncuYyAgICAgfCAxMTk5ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9mdy5oICAgICB8ICAgODEgKysr CiBkcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfbXNnLmggICAgfCAgMjU2ICsrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vaXB2ci92ZWRfcG0uYyAgICAgfCAgMzMyICsrKysrKysrKysKIGRyaXZlcnMv Z3B1L2RybS9pcHZyL3ZlZF9wbS5oICAgICB8ICAgMzYgKysKIGRyaXZlcnMvZ3B1L2RybS9pcHZy L3ZlZF9yZWcuaCAgICB8ICA1NjEgKysrKysrKysrKysrKysrKysKIDMwIGZpbGVzIGNoYW5nZWQs IDg1NTUgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9p cHZyL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaXB2ci9NYWtl ZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfYm8uYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfYm8uaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZGVidWcuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZGVidWcuaAogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZHJtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2Rydi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2lwdnIvaXB2cl9kcnYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9pcHZyL2lwdnJfZXhlYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2lwdnIvaXB2cl9leGVjLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v aXB2ci9pcHZyX2ZlbmNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaXB2 ci9pcHZyX2ZlbmNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaXB2ci9p cHZyX2dlbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9n ZW0uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfbW11LmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX21tdS5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl90cmFjZS5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl90cmFjZS5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX2NtZC5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX2NtZC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2lwdnIvdmVkX2Z3LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vaXB2ci92ZWRfZncuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9p cHZyL3ZlZF9tc2cuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pcHZyL3Zl ZF9wbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX3BtLmgK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfcmVnLmgKCmRpZmYg LS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHJtLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0Rv Y0Jvb2svZHJtLnRtcGwKaW5kZXggYjJkMTA5Zi4uMDdiNWIxOSAxMDA2NDQKLS0tIGEvRG9jdW1l bnRhdGlvbi9Eb2NCb29rL2RybS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kcm0u dG1wbApAQCAtNDAwOCw1ICs0MDA4LDQ0IEBAIGludCBudW1faW9jdGxzOzwvc3lub3BzaXM+CiAg ICAgPC9zZWN0MT4KICAgPC9jaGFwdGVyPgogIUNkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2ly cS5jCisgIDxjaGFwdGVyIGlkPSJkcm1JcHZyIj4KKyAgICA8dGl0bGU+ZHJtL2lwdnIgSW50ZWwn cyBkcml2ZXIgZm9yIFBvd2VyVlIgdmlkZW8gY29yZTwvdGl0bGU+CisgICAgPHBhcmE+CisgICAg ICBUaGUgZHJtL2lwdnIgZHJpdmVyIGludGVuZHMgdG8gc3VwcG9ydCB0aGUgUG93ZXJWUiB2aWRl byBjb3JlcworCSAgaW50ZWdyYXRlZCBvbiBJbnRlbCdzIHBsYXRmb3Jtcy4gVGhlIHZpZGVvIGNv cmVzIGNhbiBiZSBjYXRlZ29yaXplZAorCSAgaW50byAzIHR5cGVzOgorICAgICAgICA8dmFyaWFi bGVsaXN0PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5WRUQ8 L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAg ICAgICAgICAgICAgIG11bHRpLWZvcm1hdCB2aWRlbyBkZWNvZGVyLCB2YXJpb3VzIHZpZGVvIGNv ZGVjcyBhcmUgc3VwcG9ydGVkLAorCQkJCWUuZy4gSC4yNjQsIFZQOCwgZXRjLi4KKyAgICAgICAg ICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxp c3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+VkVD PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT4KKyAg ICAgICAgICAgICAgICBtdWx0aS1mb3JtYXQgdmlkZW8gZW5jb2RlciwgdmFyaW91cyB2aWRlbyBj b2RlY3Mgc3VwcG9ydCBsaWtlCisJCQkJVkVELgorICAgICAgICAgICAgICA8L3BhcmE+CisgICAg ICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAg IDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5WU1A8L3Rlcm0+CisgICAgICAgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorCQkgICAgICAgIG11bHRpLWZ1bmN0 aW9uIHZpZGVvIHByb2Nlc3NpbmcuIHN1cHBvcnRzIHZhcmlvdXMgZmVhdHVyZXMgc3VjaAorCQkJ CWFzIGNvbG9yLXNwYWNlLWNvbnZlcnNpb24sIHNoYXJwZW5pbmcsIGRlYmxvY2tpbmcsIGV0Yy4u CisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAg ICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDwvdmFyaWFibGVsaXN0PgorCSAgTm93IGlwdnIg b25seSBzdXBwb3J0cyBWRUQgb24gVmFsbGV5dmlldyBwbGF0Zm9ybS4gVGhlIG5hbWVzICJWRUMi CisJICBhbmQgIlZTUCIgYXJlIHJlc2VydmVkIGZvciBwb3NzaWJsZSBmdXR1cmUgc3VwcG9ydC4K KyAgICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KIDwvcGFydD4KIDwvYm9vaz4KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXgg ZTNiNGIwZi4uYWQ3NTg1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysr IGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTE2NSw2ICsxNjUsOCBAQCBjb25maWcgRFJN X1NBVkFHRQogCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgU2F2YWdlM0QvNC9T dXBlclNhdmFnZS9Qcm8vVHdpc3RlcgogCSAgY2hpcHNldC4gSWYgTSBpcyBzZWxlY3RlZCB0aGUg bW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhdmFnZS4KIAorc291cmNlICJkcml2ZXJzL2dwdS9kcm0v aXB2ci9LY29uZmlnIgorCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9leHlub3MvS2NvbmZpZyIK IAogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L0tjb25maWciCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXgg YzNjZjY0Yy4uZjg3NzIwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtNDEsNiArNDEsNyBAQCBvYmotJChDT05G SUdfRFJNX1JBREVPTikrPSByYWRlb24vCiBvYmotJChDT05GSUdfRFJNX01HQSkJKz0gbWdhLwog b2JqLSQoQ09ORklHX0RSTV9JODEwKQkrPSBpODEwLwogb2JqLSQoQ09ORklHX0RSTV9JOTE1KSAg Kz0gaTkxNS8KK29iai0kKENPTkZJR19EUk1fSVBWUikgICs9IGlwdnIvCiBvYmotJChDT05GSUdf RFJNX01HQUcyMDApICs9IG1nYWcyMDAvCiBvYmotJChDT05GSUdfRFJNX0NJUlJVU19RRU1VKSAr PSBjaXJydXMvCiBvYmotJChDT05GSUdfRFJNX1NJUykgICArPSBzaXMvCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaXB2ci9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvS2NvbmZp ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjliYWQ0Ci0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvS2NvbmZpZwpAQCAtMCwwICsxLDkgQEAKK2Nv bmZpZyBEUk1fSVBWUgorICAgICAgIHRyaXN0YXRlICJJUFZSIHZpZGVvIGRlY29kZSBkcml2ZXIi CisgICAgICAgZGVwZW5kcyBvbiBEUk0KKyAgICAgICBzZWxlY3QgU0hNRU0KKyAgICAgICBzZWxl Y3QgVE1QRlMKKyAgICAgICBkZWZhdWx0IG0KKyAgICAgICBoZWxwCisgICAgICAgICBDaG9vc2Ug dGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gZW5hYmxlIGFjY2VsZXJhdGVkIHZpZGVvIGRlY29k ZSB3aXRoIFZFRCBoYXJkd2FyZS4KKwkJIEN1cnJlbnRseSBzdXBwb3J0IFZQOCBkZWNvZGluZyBv biB2YWxsZXl2aWV3LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lwdnIvTWFrZWZpbGUg Yi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi4yODA2NDdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lw dnIvTWFrZWZpbGUKQEAgLTAsMCArMSwxOCBAQAorY2NmbGFncy15IDo9IC1JaW5jbHVkZS9kcm0K KworaXB2ci15IDo9IFwKKyAgICAgICAgaXB2cl9kcnYubyBcCisgICAgICAgIGlwdnJfYm8ubyBc CisgICAgICAgIGlwdnJfZXhlYy5vIFwKKyAgICAgICAgaXB2cl9mZW5jZS5vIFwKKyAgICAgICAg aXB2cl9nZW0ubyBcCisgICAgICAgIGlwdnJfbW11Lm8gXAorICAgICAgICBpcHZyX2RlYnVnLm8g XAorICAgICAgICBpcHZyX3RyYWNlLm8gXAorICAgICAgICB2ZWRfcG0ubyBcCisgICAgICAgIHZl ZF9jbWQubyBcCisgICAgICAgIHZlZF9mdy5vCisKK29iai0kKENPTkZJR19EUk1fSVBWUikgKz0g aXB2ci5vCisKK0NGTEFHU19pcHZyX3RyYWNlLm8gOj0gLUkkKHNyYykKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfYm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJf Ym8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjMwY2VjCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9iby5jCkBAIC0wLDAgKzEsNTQ2 IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlwdnJfYm8uYzogSVBWUiBidWZmZXIgY3JlYXRp b24vZGVzdG9yeSwgaW1wb3J0L2V4cG9ydCwgbWFwIGV0YworICoKKyAqIENvcHlyaWdodCAoYykg MjAxNCBJbnRlbCBDb3Jwb3JhdGlvbiwgSGlsbHNib3JvLCBPUiwgVVNBCisgKiBBbGwgUmlnaHRz IFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5k IGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lv biAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2Vm dWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAq IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dy YW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwK KyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBV U0EuCisgKgorICogQXV0aG9yczoKKyAqICAgIFlhbyBDaGVuZyA8eWFvLmNoZW5nQGludGVsLmNv bT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJpcHZyX2JvLmgiCisjaW5j bHVkZSAiaXB2cl90cmFjZS5oIgorI2luY2x1ZGUgImlwdnJfZGVidWcuaCIKKyNpbmNsdWRlIDxk cm1QLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorCitzdGF0aWMgaW5saW5lIGJvb2wg Y3B1X2NhY2hlX2lzX2NvaGVyZW50KGVudW0gaXB2cl9jYWNoZV9sZXZlbCBsZXZlbCkKK3sKKwkv KiBvbiB2YWxsZXl2aWV3IG5vIGNhY2hlIHNub29waW5nICovCisJcmV0dXJuIChsZXZlbCAhPSBJ UFZSX0NBQ0hFX1dSSVRFQkFDSyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjbGZsdXNoX29i amVjdChzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqLCBib29sIGZvcmNlKQoreworCWlm IChvYmotPnNnX3RhYmxlID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKworCS8qIG5vIG5lZWQg dG8gZmx1c2ggaWYgY2FjaGUgaXMgY29oZXJlbnQgKi8KKwlpZiAoIWZvcmNlICYmIGNwdV9jYWNo ZV9pc19jb2hlcmVudChvYmotPmNhY2hlX2xldmVsKSkKKwkJcmV0dXJuIGZhbHNlOworCisJZHJt X2NsZmx1c2hfc2cob2JqLT5zZ190YWJsZSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGlj IHZvaWQKK2lwdnJfb2JqZWN0X2ZyZWUoc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iaikK K3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBvYmotPmJhc2UuZGV2LT5k ZXZfcHJpdmF0ZTsKKwlrbWVtX2NhY2hlX2ZyZWUoZGV2X3ByaXYtPmlwdnJfYm9fc2xhYiwgb2Jq KTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICoKK2lwdnJfb2JqZWN0 X2FsbG9jKHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiwgc2l6ZV90IHNpemUpCit7 CisJc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iajsKKworCW9iaiA9IGttZW1fY2FjaGVf YWxsb2MoZGV2X3ByaXYtPmlwdnJfYm9fc2xhYiwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwor CWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJbWVtc2V0KG9iaiwgMCwgc2l6ZW9m KCpvYmopKTsKKworCXJldHVybiBvYmo7Cit9CisKK3N0YXRpYyBpbnQgaXB2cl9nZW1fbW11X2Jp bmRfb2JqZWN0KHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRy bV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gb2JqLT5iYXNlLmRldi0+ZGV2X3ByaXZhdGU7CisJ dTMyIG1hc2sgPSAwOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgZW50cnkgPSBpcHZyX2dlbV9vYmpl Y3RfbW11X29mZnNldChvYmopOworCisJaWYgKElQVlJfSVNfRVJSKGVudHJ5KSkgeworCQlyZXR1 cm4gSVBWUl9PRkZTRVRfRVJSKGVudHJ5KTsKKwl9CisKKwlJUFZSX0RFQlVHX0dFTkVSQUwoImVu dHJ5IGlzIDB4JWx4LCBzaXplIGlzICV6dSwgbmVudHMgaXMgJWQuXG4iLAorCQkJZW50cnksIG9i ai0+YmFzZS5zaXplLCBvYmotPnNnX3RhYmxlLT5uZW50cyk7CisKKwkvKioKKwkgKiBmcm9tIHZ4 ZCBzcGVjIHdlIHNob3VsZCBiZSBhYmxlIHRvIHNldDoKKwkgKiAgIG1hc2sgfD0gSVBWUl9NTVVf Q0FDSEVEX01FTU9SWQorCSAqIGZvciB0aG9zZSBvYmplY3QgbWFya2VkIGFzIElQVlJfQ0FDSEVf Tk9BQ0NFU1MKKwkgKiBidXQgdGVzdCBmYWlsZWQuCisJICogc28gd2UgZm9yY2UgYWxsIHBhZ2Vz IGZsYWdlZCBhcyBub24tY2FjaGVkIGJ5IHZ4ZCBub3cKKwkgKi8KKwlyZXR1cm4gaXB2cl9tbXVf aW5zZXJ0X3BhZ2VzKGRldl9wcml2LT5tbXUtPmRlZmF1bHRfcGQsCisJCW9iai0+cGFnZXMsIGVu dHJ5LCBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZULAorCQkwLCAwLCBtYXNrKTsKK30KKwor c3RhdGljIHZvaWQgaXB2cl9nZW1fbW11X3VuYmluZF9vYmplY3Qoc3RydWN0IGRybV9pcHZyX2dl bV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBv YmotPmJhc2UuZGV2LT5kZXZfcHJpdmF0ZTsKKwljb25zdCB1bnNpZ25lZCBsb25nIGVudHJ5ID0g aXB2cl9nZW1fb2JqZWN0X21tdV9vZmZzZXQob2JqKTsKKwlJUFZSX0RFQlVHX0dFTkVSQUwoImVu dHJ5IGlzIDB4JWx4LCBzaXplIGlzICV6dS5cbiIsCisJCQllbnRyeSwgb2JqLT5iYXNlLnNpemUp OworCWlwdnJfbW11X3JlbW92ZV9wYWdlcyhkZXZfcHJpdi0+bW11LT5kZWZhdWx0X3BkLAorCQll bnRyeSwgb2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVCwgMCwgMCk7Cit9CisKK3N0YXRpYyB2 b2lkIGlwdnJfZ2VtX29iamVjdF9waW5fcGFnZXMoc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3Qg Km9iaikKK3sKKwlCVUdfT04ob2JqLT5zZ190YWJsZSA9PSBOVUxMKTsKKwlvYmotPnBhZ2VzX3Bp bl9jb3VudCsrOworfQorCitzdGF0aWMgdm9pZCBpcHZyX2dlbV9vYmplY3RfdW5waW5fcGFnZXMo c3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iaikKK3sKKwlCVUdfT04ob2JqLT5wYWdlc19w aW5fY291bnQgPT0gMCk7CisJb2JqLT5wYWdlc19waW5fY291bnQtLTsKK30KKworc3RhdGljIGlu dCBpcHZyX2dlbV9iaW5kX3RvX2RybV9tbShzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCogb2Jq LAorCQkJc3RydWN0IGlwdnJfYWRkcmVzc19zcGFjZSAqdm0pCit7CisJaW50IHJldDsKKwlzdHJ1 Y3QgZHJtX21tICptbTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CisJLyogYmluZCB0byBW UFUgYWRkcmVzcyBzcGFjZSAqLworCWlmIChvYmotPnRpbGluZykgeworCQltbSA9ICZ2bS0+dGls aW5nX21tOworCQlzdGFydCA9IHZtLT50aWxpbmdfc3RhcnQ7CisJCWVuZCA9IHZtLT50aWxpbmdf c3RhcnQgKyB2bS0+dGlsaW5nX3RvdGFsOworCX0gZWxzZSB7CisJCW1tID0gJnZtLT5saW5lYXJf bW07CisJCXN0YXJ0ID0gdm0tPmxpbmVhcl9zdGFydDsKKwkJZW5kID0gdm0tPmxpbmVhcl9zdGFy dCArIHZtLT5saW5lYXJfdG90YWw7CisJfQorCUlQVlJfREVCVUdfR0VORVJBTCgiY2FsbCBkcm1f bW1faW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2VuZXJpYy5cbiIpOworCXJldCA9IGRybV9tbV9pbnNl cnRfbm9kZV9pbl9yYW5nZV9nZW5lcmljKG1tLCAmb2JqLT5tbV9ub2RlLCBvYmotPmJhc2Uuc2l6 ZSwKKwkJCQkJCVBBR0VfU0laRSwgb2JqLT5jYWNoZV9sZXZlbCwKKwkJCQkJCXN0YXJ0LCBlbmQs CisJCQkJCQlEUk1fTU1fU0VBUkNIX0RFRkFVTFQsCisJCQkJCQlEUk1fTU1fQ1JFQVRFX0RFRkFV TFQpOworCWlmIChyZXQpIHsKKwkJLyogbm8gc2hyaW5rZXIgaW1wbGVtZW50ZWQgeWV0IHNvIHNp bXBseSByZXR1cm4gZXJyb3IgKi8KKwkJSVBWUl9FUlJPUigiZmFpbGVkIG9uIGRybV9tbV9pbnNl cnRfbm9kZV9pbl9yYW5nZV9nZW5lcmljOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwlJUFZSX0RFQlVHX0dFTkVSQUwoImRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZV9nZW5l cmljIHN1Y2Nlc3M6ICIKKwkJInN0YXJ0PTB4JWx4LCBzaXplPSVsdSwgY29sb3I9JWx1LlxuIiwK KwkJb2JqLT5tbV9ub2RlLnN0YXJ0LCBvYmotPm1tX25vZGUuc2l6ZSwgb2JqLT5tbV9ub2RlLmNv bG9yKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCogaXB2 cl9nZW1fY3JlYXRlKHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiwKKwkJCXNpemVf dCBzaXplLCB1MzIgdGlsaW5nLCB1MzIgY2FjaGVfbGV2ZWwpCit7CisJc3RydWN0IGRybV9pcHZy X2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgbnBhZ2VzOworCXN0cnVjdCBh ZGRyZXNzX3NwYWNlICptYXBwaW5nOworCWdmcF90IG1hc2s7CisKKwlCVUdfT04oc2l6ZSAmIChQ QUdFX1NJWkUgLSAxKSk7CisJbnBhZ2VzID0gc2l6ZSA+PiBQQUdFX1NISUZUOworCUlQVlJfREVC VUdfR0VORVJBTCgiY3JlYXRlIGJvIHNpemUgaXMgJXp1LCB0aWxpbmcgaXMgJXUsICIKKwkJCSJj YWNoZSBsZXZlbCBpcyAldS5cbiIsCXNpemUsIHRpbGluZywgY2FjaGVfbGV2ZWwpOworCisJLyog QWxsb2NhdGUgdGhlIG5ldyBvYmplY3QgKi8KKwlvYmogPSBpcHZyX29iamVjdF9hbGxvYyhkZXZf cHJpdiwgc2l6ZSk7CisJaWYgKCFvYmopCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJ LyogaW5pdGlhbGl6YXRpb24gKi8KKwlyZXQgPSBkcm1fZ2VtX29iamVjdF9pbml0KGRldl9wcml2 LT5kZXYsICZvYmotPmJhc2UsIHNpemUpOworCWlmIChyZXQpIHsKKwkJSVBWUl9FUlJPUigiZmFp bGVkIG9uIGRybV9nZW1fb2JqZWN0X2luaXQ6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9mcmVl X29iajsKKwl9CisJaW5pdF93YWl0cXVldWVfaGVhZCgmb2JqLT5ldmVudF9xdWV1ZSk7CisJLyog dG9kbzogbmVlZCBzZXQgY29ycmVjdCBtYXNrICovCisJbWFzayA9IEdGUF9ISUdIVVNFUiB8IF9f R0ZQX1JFQ0xBSU1BQkxFOworCisJLyogaXB2ciBjYW5ub3QgcmVsb2NhdGUgb2JqZWN0cyBhYm92 ZSA0R2lCLiAqLworCW1hc2sgJj0gfl9fR0ZQX0hJR0hNRU07CisJbWFzayB8PSBfX0dGUF9ETUEz MjsKKworCW1hcHBpbmcgPSBmaWxlX2lub2RlKG9iai0+YmFzZS5maWxwKS0+aV9tYXBwaW5nOwor CW1hcHBpbmdfc2V0X2dmcF9tYXNrKG1hcHBpbmcsIG1hc2spOworCisJb2JqLT5iYXNlLndyaXRl X2RvbWFpbiA9IElQVlJfR0VNX0RPTUFJTl9DUFU7CisJb2JqLT5iYXNlLnJlYWRfZG9tYWlucyA9 IElQVlJfR0VNX0RPTUFJTl9DUFU7CisJb2JqLT5kcnZfbmFtZSA9ICJpcHZyIjsKKwlvYmotPmZl bmNlID0gTlVMTDsKKwlvYmotPnRpbGluZyA9IHRpbGluZzsKKwlvYmotPmNhY2hlX2xldmVsID0g Y2FjaGVfbGV2ZWw7CisKKwkvKiBnZXQgcGh5c2ljYWwgcGFnZXMgKi8KKwlvYmotPnBhZ2VzID0g ZHJtX2dlbV9nZXRfcGFnZXMoJm9iai0+YmFzZSk7CisJaWYgKElTX0VSUihvYmotPnBhZ2VzKSkg eworCQlyZXQgPSBQVFJfRVJSKG9iai0+cGFnZXMpOworCQlJUFZSX0VSUk9SKCJmYWlsZWQgb24g ZHJtX2dlbV9nZXRfcGFnZXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9mcmVlX29iajsKKwl9 CisKKwlvYmotPnNnX3RhYmxlID0gZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKG9iai0+cGFnZXMsIG9i ai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQpOworCWlmIChJU19FUlIob2JqLT5zZ190YWJsZSkp IHsKKwkJcmV0ID0gUFRSX0VSUihvYmotPnNnX3RhYmxlKTsKKwkJSVBWUl9FUlJPUigiZmFpbGVk IG9uIGRybV9nZW1fZ2V0X3BhZ2VzOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcHV0X3BhZ2Vz OworCX0KKworCS8qIHNldCBjYWNoZWFiaWxpdHkgKi8KKwlzd2l0Y2ggKG9iai0+Y2FjaGVfbGV2 ZWwpIHsKKwljYXNlIElQVlJfQ0FDSEVfTk9BQ0NFU1M6CisJY2FzZSBJUFZSX0NBQ0hFX1VOQ0FD SEVEOgorCQlyZXQgPSBzZXRfcGFnZXNfYXJyYXlfdWMob2JqLT5wYWdlcywgbnBhZ2VzKTsKKwkJ YnJlYWs7CisJY2FzZSBJUFZSX0NBQ0hFX1dSSVRFQ09NQklORToKKwkJcmV0ID0gc2V0X3BhZ2Vz X2FycmF5X3djKG9iai0+cGFnZXMsIG5wYWdlcyk7CisJCWJyZWFrOworCWNhc2UgSVBWUl9DQUNI RV9XUklURUJBQ0s6CisJCXJldCA9IHNldF9wYWdlc19hcnJheV93YihvYmotPnBhZ2VzLCBucGFn ZXMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9 CisJaWYgKHJldCkgeworCQlJUFZSX0RFQlVHX1dBUk4oImZhaWxlZCB0byBzZXQgcGFnZSBjYWNo ZTogJWQuXG4iLCByZXQpOworCQlnb3RvIGVycl9wdXRfc2c7CisJfQorCisJaXB2cl9nZW1fb2Jq ZWN0X3Bpbl9wYWdlcyhvYmopOworCisJLyogYmluZCB0byBWUFUgYWRkcmVzcyBzcGFjZSAqLwor CXJldCA9IGlwdnJfZ2VtX2JpbmRfdG9fZHJtX21tKG9iaiwgJmRldl9wcml2LT5hZGRyX3NwYWNl KTsKKwlpZiAocmV0KSB7CisJCUlQVlJfRVJST1IoImZhaWxlZCB0byBjYWxsIGlwdnJfZ2VtX2Jp bmRfdG9fZHJtX21tOiAlZC5cbiIsIHJldCk7CisJCWdvdG8gZXJyX3B1dF9zZzsKKwl9CisKKwly ZXQgPSBpcHZyX2dlbV9tbXVfYmluZF9vYmplY3Qob2JqKTsKKwlpZiAocmV0KSB7CisJCUlQVlJf RVJST1IoImZhaWxlZCB0byBjYWxsIGlwdnJfZ2VtX21tdV9iaW5kX29iamVjdDogJWQuXG4iLCBy ZXQpOworCQlnb3RvIGVycl9yZW1vdmVfbm9kZTsKKwl9CisKKwlpcHZyX3N0YXRfYWRkX29iamVj dChkZXZfcHJpdiwgb2JqKTsKKwl0cmFjZV9pcHZyX2NyZWF0ZV9vYmplY3Qob2JqLCBpcHZyX2dl bV9vYmplY3RfbW11X29mZnNldChvYmopKTsKKwlyZXR1cm4gb2JqOworZXJyX3JlbW92ZV9ub2Rl OgorCWRybV9tbV9yZW1vdmVfbm9kZSgmb2JqLT5tbV9ub2RlKTsKK2Vycl9wdXRfc2c6CisJc2df ZnJlZV90YWJsZShvYmotPnNnX3RhYmxlKTsKKwlrZnJlZShvYmotPnNnX3RhYmxlKTsKK2Vycl9w dXRfcGFnZXM6CisJZHJtX2dlbV9wdXRfcGFnZXMoJm9iai0+YmFzZSwgb2JqLT5wYWdlcywgZmFs c2UsIGZhbHNlKTsKK2Vycl9mcmVlX29iajoKKwlpcHZyX29iamVjdF9mcmVlKG9iaik7CisJcmV0 dXJuIEVSUl9QVFIocmV0KTsKK30KKwordm9pZCAqaXB2cl9nZW1fb2JqZWN0X3ZtYXAoc3RydWN0 IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iaikKK3sKKwlwZ3Byb3RfdCBwZyA9IFBBR0VfS0VSTkVM OworCXN3aXRjaCAob2JqLT5jYWNoZV9sZXZlbCkgeworCWNhc2UgSVBWUl9DQUNIRV9XUklURUNP TUJJTkU6CisJCXBnID0gcGdwcm90X3dyaXRlY29tYmluZShwZyk7CisJCWJyZWFrOworCWNhc2Ug SVBWUl9DQUNIRV9OT0FDQ0VTUzoKKwljYXNlIElQVlJfQ0FDSEVfVU5DQUNIRUQ6CisJCXBnID0g cGdwcm90X25vbmNhY2hlZChwZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0K KwlyZXR1cm4gdm1hcChvYmotPnBhZ2VzLCBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZULCBW TV9NQVAsIHBnKTsKK30KKworLyoKKyAqIFdoZW4gdGhlIGxhc3QgcmVmZXJlbmNlIHRvIGEgR0VN IG9iamVjdCBpcyByZWxlYXNlZCB0aGUgR0VNIGNvcmUgY2FsbHMgdGhlCisgKiBkcm1fZHJpdmVy IC5nZW1fZnJlZV9vYmplY3QoKSBvcGVyYXRpb24uIFRoYXQgb3BlcmF0aW9uIGlzIG1hbmRhdG9y eSBmb3IKKyAqIEdFTS1lbmFibGVkIGRyaXZlcnMgYW5kIG11c3QgZnJlZSB0aGUgR0VNIG9iamVj dCBhbmQgYWxsIGFzc29jaWF0ZWQKKyAqIHJlc291cmNlcy4KKyovCit2b2lkIGlwdnJfZ2VtX2Zy ZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iaikKK3sKKwlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gZ2VtX29iai0+ZGV2OworCXN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0 ICpvYmogPSB0b19pcHZyX2JvKGdlbV9vYmopOworCWRybV9pcHZyX3ByaXZhdGVfdCAqZGV2X3By aXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBtbXVfb2Zm c2V0OworCWludCBucGFnZXMgPSBnZW1fb2JqLT5zaXplID4+IFBBR0VfU0hJRlQ7CisKKwkvKiBm aXhtZTogY29uc2lkZXIgdW5sb2NrZWQgY2FzZSAqLworCVdBUk5fT04oIW11dGV4X2lzX2xvY2tl ZCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKKworCW1tdV9vZmZzZXQgPSBpcHZyX2dlbV9vYmplY3Rf bW11X29mZnNldChvYmopOworCWlwdnJfZ2VtX21tdV91bmJpbmRfb2JqZWN0KG9iaik7CisKKwlp ZiAodW5saWtlbHkob2JqLT5mZW5jZSkpIHsKKwkJcmV0ID0gaXB2cl9mZW5jZV93YWl0KG9iai0+ ZmVuY2UsIHRydWUsIGZhbHNlKTsKKwkJaWYgKHJldCkKKwkJCUlQVlJfREVCVUdfV0FSTigiRmFp bGVkIHRvIHdhaXQgZmVuY2Ugc2lnbmFsZWQ6ICVkLlxuIiwgcmV0KTsKKwl9CisKKwlkcm1fbW1f cmVtb3ZlX25vZGUoJm9iai0+bW1fbm9kZSk7CisJaXB2cl9nZW1fb2JqZWN0X3VucGluX3BhZ2Vz KG9iaik7CisKKwlpZiAoV0FSTl9PTihvYmotPnBhZ2VzX3Bpbl9jb3VudCkpCisJCW9iai0+cGFn ZXNfcGluX2NvdW50ID0gMDsKKworCUJVR19PTighb2JqLT5wYWdlcyB8fCAhb2JqLT5zZ190YWJs ZSk7CisJLyogc2V0IGJhY2sgdG8gcGFnZV93YiAqLworCXNldF9wYWdlc19hcnJheV93YihvYmot PnBhZ2VzLCBucGFnZXMpOworCWlmIChvYmotPmJhc2UuaW1wb3J0X2F0dGFjaCkgeworCQlJUFZS X0RFQlVHX0dFTkVSQUwoImZyZWUgaW1wb3J0ZWQgb2JqZWN0IChtbXVfb2Zmc2V0IDB4JWx4KVxu IiwgbW11X29mZnNldCk7CisJCWRybV9wcmltZV9nZW1fZGVzdHJveSgmb2JqLT5iYXNlLCBvYmot PnNnX3RhYmxlKTsKKwkJZHJtX2ZyZWVfbGFyZ2Uob2JqLT5wYWdlcyk7CisJCWlwdnJfc3RhdF9y ZW1vdmVfaW1wb3J0ZWQoZGV2X3ByaXYsIG9iaik7CisJfQorCWVsc2UgeworCQlJUFZSX0RFQlVH X0dFTkVSQUwoImZyZWUgb2JqZWN0IChtbXVfb2Zmc2V0IDB4JWx4KVxuIiwgbW11X29mZnNldCk7 CisJCXNnX2ZyZWVfdGFibGUob2JqLT5zZ190YWJsZSk7CisJCWtmcmVlKG9iai0+c2dfdGFibGUp OworCQlkcm1fZ2VtX3B1dF9wYWdlcygmb2JqLT5iYXNlLCBvYmotPnBhZ2VzLCBvYmotPmRpcnR5 LCB0cnVlKTsKKwkJaXB2cl9zdGF0X3JlbW92ZV9vYmplY3QoZGV2X3ByaXYsIG9iaik7CisJfQor CisJLyogbW1hcCBvZmZzZXQgaXMgZnJlZWQgYnkgZHJtX2dlbV9vYmplY3RfcmVsZWFzZSAqLwor CWRybV9nZW1fb2JqZWN0X3JlbGVhc2UoJm9iai0+YmFzZSk7CisKKwl0cmFjZV9pcHZyX2ZyZWVf b2JqZWN0KG9iaik7CisKKwlpcHZyX29iamVjdF9mcmVlKG9iaik7Cit9CisKK3N0YXRpYyBpbmxp bmUgc3RydWN0IHBhZ2UgKmdldF9vYmplY3RfcGFnZShzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVj dCAqb2JqLCBpbnQgbikKK3sKKwlzdHJ1Y3Qgc2dfcGFnZV9pdGVyIHNnX2l0ZXI7CisKKwlmb3Jf ZWFjaF9zZ19wYWdlKG9iai0+c2dfdGFibGUtPnNnbCwgJnNnX2l0ZXIsIG9iai0+c2dfdGFibGUt Pm5lbnRzLCBuKQorCQlyZXR1cm4gc2dfcGFnZV9pdGVyX3BhZ2UoJnNnX2l0ZXIpOworCisJcmV0 dXJuIE5VTEw7Cit9CisKK2ludCBpcHZyX2dlbV9vYmplY3RfYXBwbHlfcmVsb2Moc3RydWN0IGRy bV9pcHZyX2dlbV9vYmplY3QgKm9iaiwKKwkJCQl1NjQgb2Zmc2V0X2luX2JvLCB1MzIgdmFsdWUp Cit7CisJdTY0IHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0X2luX2JvKTsKKwlj aGFyICp2YWRkcjsKKwlzdHJ1Y3QgcGFnZSAqdGFyZ2V0X3BhZ2U7CisKKwkvKiBzZXQgdG8gY3B1 IGRvbWFpbiAqLworCXRhcmdldF9wYWdlID0gZ2V0X29iamVjdF9wYWdlKG9iaiwJb2Zmc2V0X2lu X2JvID4+IFBBR0VfU0hJRlQpOworCWlmICghdGFyZ2V0X3BhZ2UpCisJCXJldHVybiAtRUlOVkFM OworCisJLyoqCisJICogZm9yIGVmZmljaWVuY3kgd2UnZCBiZXR0ZXIgcmVjb3JkIHRoZSBwYWdl IGluZGV4LAorCSAqIGFuZCBhdm9pZCBmcmVxdWVudCBtYXAvdW5tYXAgb24gdGhlIHNhbWUgcGFn ZQorCSAqLworCXZhZGRyID0ga21hcF9hdG9taWModGFyZ2V0X3BhZ2UpOworCWlmICghdmFkZHIp CisJCXJldHVybiAtRU5PTUVNOworCSoodTMyICopKHZhZGRyICsgcGFnZV9vZmZzZXQpID0gdmFs dWU7CisKKwlrdW5tYXBfYXRvbWljKHZhZGRyKTsKKworCXJldHVybiAwOworfQorCitpbnQgaXB2 cl9nZW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAq dm1mKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gdm1hLT52bV9wcml2YXRlX2Rh dGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCXVuc2lnbmVkIGxvbmcg cGZuOworCXBnb2ZmX3QgcGdvZmY7CisJaW50IHJldDsKKwlzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29i amVjdCAqaXB2cl9vYmogPSB0b19pcHZyX2JvKG9iaik7CisKKwkvKiBNYWtlIHN1cmUgd2UgZG9u J3QgcGFyYWxsZWwgdXBkYXRlIG9uIGEgZmF1bHQsIG5vciBtb3ZlIG9yIHJlbW92ZQorCSAqIHNv bWV0aGluZyBmcm9tIGJlbmVhdGggb3VyIGZlZXQKKwkgKi8KKwlyZXQgPSBtdXRleF9sb2NrX2lu dGVycnVwdGlibGUoJmRldi0+c3RydWN0X211dGV4KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsK KworCWlmICghaXB2cl9vYmotPnNnX3RhYmxlKSB7CisJCXJldCA9IC1FTk9EQVRBOworCQlnb3Rv IG91dF91bmxvY2s7CisJfQorCisJLyogV2UgZG9uJ3QgdXNlIHZtZi0+cGdvZmYgc2luY2UgdGhh dCBoYXMgdGhlIGZha2Ugb2Zmc2V0OiAqLworCXBnb2ZmID0gKCh1bnNpZ25lZCBsb25nKXZtZi0+ dmlydHVhbF9hZGRyZXNzIC0KKwkJCXZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQ7CisKKwlw Zm4gPSBwYWdlX3RvX3BmbihpcHZyX29iai0+cGFnZXNbcGdvZmZdKTsKKworCUlQVlJfREVCVUdf R0VORVJBTCgiSW5zZXJ0aW5nICVwIHBmbiAlbHgsIHBhICVseFxuIiwgdm1mLT52aXJ0dWFsX2Fk ZHJlc3MsCisJCQlwZm4sIHBmbiA8PCBQQUdFX1NISUZUKTsKKworCXJldCA9IHZtX2luc2VydF9w Zm4odm1hLCAodW5zaWduZWQgbG9uZyl2bWYtPnZpcnR1YWxfYWRkcmVzcywgcGZuKTsKKworb3V0 X3VubG9jazoKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKK291dDoKKwlzd2l0 Y2ggKHJldCkgeworCWNhc2UgLUVBR0FJTjoKKwljYXNlIDA6CisJY2FzZSAtRVJFU1RBUlRTWVM6 CisJY2FzZSAtRUlOVFI6CisJY2FzZSAtRUJVU1k6CisJCS8qCisJCSAqIEVCVVNZIGlzIG9rOiB0 aGlzIGp1c3QgbWVhbnMgdGhhdCBhbm90aGVyIHRocmVhZAorCQkgKiBhbHJlYWR5IGRpZCB0aGUg am9iLgorCQkgKi8KKwkJcmV0dXJuIFZNX0ZBVUxUX05PUEFHRTsKKwljYXNlIC1FTk9NRU06CisJ CXJldHVybiBWTV9GQVVMVF9PT007CisJZGVmYXVsdDoKKwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JV UzsKKwl9Cit9CisKK3N0cnVjdCBzZ190YWJsZSAqaXB2cl9nZW1fcHJpbWVfZ2V0X3NnX3RhYmxl KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1faXB2cl9nZW1fb2Jq ZWN0ICppcHZyX29iaiA9IHRvX2lwdnJfYm8ob2JqKTsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndCA9 IE5VTEw7CisJaW50IHJldDsKKworCWlmICghaXB2cl9vYmotPnNnX3RhYmxlKSB7CisJCXJldCA9 IC1FTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKworCXNndCA9IGRybV9wcmltZV9wYWdlc190b19z ZyhpcHZyX29iai0+cGFnZXMsIG9iai0+c2l6ZSA+PiBQQUdFX1NISUZUKTsKKwlpZiAoSVNfRVJS KHNndCkpIHsKKwkJZ290byBvdXQ7CisJfQorCisJSVBWUl9ERUJVR19HRU5FUkFMKCJleHBvcnRl ZCBzZ190YWJsZSBmb3Igb2JqIChtbXVfb2Zmc2V0IDB4JWx4KVxuIiwKKwkJaXB2cl9nZW1fb2Jq ZWN0X21tdV9vZmZzZXQoaXB2cl9vYmopKTsKK291dDoKKwlyZXR1cm4gc2d0OworfQorCitzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKmlwdnJfZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsIHN0 cnVjdCBzZ190YWJsZSAqc2cpCit7CisJc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iajsK KwlpbnQgcmV0ID0gMDsKKwlpbnQgaSwgbnBhZ2VzOworCXVuc2lnbmVkIGxvbmcgcGZuOworCXN0 cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlp ZiAoIXNnIHx8ICFhdHRhY2ggfHwgKGF0dGFjaC0+ZG1hYnVmLT5zaXplICYgKFBBR0VfU0laRSAt IDEpKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlJUFZSX0RFQlVHX0VOVFJZKCJl bnRlciwgc2l6ZT0weCV6eFxuIiwgYXR0YWNoLT5kbWFidWYtPnNpemUpOworCisJb2JqID0gaXB2 cl9vYmplY3RfYWxsb2MoZGV2X3ByaXYsIGF0dGFjaC0+ZG1hYnVmLT5zaXplKTsKKwlpZiAoIW9i aikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwltZW1zZXQob2JqLCAwLCBzaXplb2Yo Km9iaikpOworCisJZHJtX2dlbV9wcml2YXRlX29iamVjdF9pbml0KGRldiwgJm9iai0+YmFzZSwg YXR0YWNoLT5kbWFidWYtPnNpemUpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmb2JqLT5ldmVu dF9xdWV1ZSk7CisKKwlvYmotPmRydl9uYW1lID0gImlwdnIiOworCW9iai0+ZmVuY2UgPSBOVUxM OworCW9iai0+Y2FjaGVfbGV2ZWwgPSBJUFZSX0NBQ0hFX05PQUNDRVNTOworCW9iai0+dGlsaW5n ID0gMDsKKworCW5wYWdlcyA9IGF0dGFjaC0+ZG1hYnVmLT5zaXplID4+IFBBR0VfU0hJRlQ7CisK KwlvYmotPnNnX3RhYmxlID0gc2c7CisJb2JqLT5wYWdlcyA9IGRybV9tYWxsb2NfYWIobnBhZ2Vz LCBzaXplb2Yoc3RydWN0IHBhZ2UgKikpOworCWlmICghb2JqLT5wYWdlcykgeworCQlyZXQgPSAt RU5PTUVNOworCQlnb3RvIGVycl9mcmVlX29iajsKKwl9CisKKwlyZXQgPSBkcm1fcHJpbWVfc2df dG9fcGFnZV9hZGRyX2FycmF5cyhzZywgb2JqLT5wYWdlcywgTlVMTCwgbnBhZ2VzKTsKKwlpZiAo cmV0KQorCQlnb3RvIGVycl9wdXRfcGFnZXM7CisKKwkvKiB2YWxpZGF0ZSBzZ190YWJsZQorCSAq IHNob3VsZCBiZSB1bmRlciA0R2lCCisJICovCisJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgKytp KSB7CisJCXBmbiA9IHBhZ2VfdG9fcGZuKG9iai0+cGFnZXNbaV0pOworCQlpZiAocGZuID49IDB4 MDAxMDAwMDBVTCkgeworCQkJSVBWUl9FUlJPUigiY2Fubm90IHN1cHBvcnQgcGZuIDB4JWx4Llxu IiwgcGZuKTsKKwkJCXJldCA9IC1FSU5WQUw7IC8qIHdoYXQncyB0aGUgYmV0dGVyIGVyciBjb2Rl PyAqLworCQkJZ290byBlcnJfcHV0X3BhZ2VzOworCQl9CisJfQorCisJcmV0ID0gaXB2cl9nZW1f YmluZF90b19kcm1fbW0ob2JqLCAmZGV2X3ByaXYtPmFkZHJfc3BhY2UpOworCWlmIChyZXQpIHsK KwkJSVBWUl9FUlJPUigiZmFpbGVkIHRvIGNhbGwgaXB2cl9nZW1fYmluZF90b19kcm1fbW06ICVk LlxuIiwgcmV0KTsKKwkJZ290byBlcnJfcHV0X3BhZ2VzOworCX0KKworCS8qIGRvIHdlIHJlYWxs eSBoYXZlIHRvIHNldCB0aGUgZXh0ZXJuYWwgcGFnZXMgdW5jYWNoZWQ/CisJICogdGhpcyBtaWdo dCBjYXVzZXMgcGVyZiBpc3N1ZSBpbiBleHBvcnRlciBzaWRlICovCisJcmV0ID0gc2V0X3BhZ2Vz X2FycmF5X3VjKG9iai0+cGFnZXMsIG5wYWdlcyk7CisJaWYgKHJldCkKKwkJSVBWUl9ERUJVR19X QVJOKCJmYWlsZWQgdG8gc2V0IGltcG9ydGVkIHBhZ2VzIGFzIHVuY2FjaGVkOiAlZCwgaWdub3Jl XG4iLCByZXQpOworCisJcmV0ID0gaXB2cl9nZW1fbW11X2JpbmRfb2JqZWN0KG9iaik7CisJaWYg KHJldCkgeworCQlJUFZSX0VSUk9SKCJmYWlsZWQgdG8gY2FsbCBpcHZyX2dlbV9tbXVfYmluZF9v YmplY3Q6ICVkLlxuIiwgcmV0KTsKKwkJZ290byBlcnJfcmVtb3ZlX25vZGU7CisJfQorCUlQVlJf REVCVUdfR0VORVJBTCgiaW1wb3J0ZWQgc2dfdGFibGUsIG5ldyBibyBtbXUgb2Zmc2V0PTB4JWx4 LlxuIiwKKwkJaXB2cl9nZW1fb2JqZWN0X21tdV9vZmZzZXQob2JqKSk7CisJaXB2cl9zdGF0X2Fk ZF9pbXBvcnRlZChkZXZfcHJpdiwgb2JqKTsKKwlpcHZyX2dlbV9vYmplY3RfcGluX3BhZ2VzKG9i aik7CisJcmV0dXJuICZvYmotPmJhc2U7CitlcnJfcmVtb3ZlX25vZGU6CisJZHJtX21tX3JlbW92 ZV9ub2RlKCZvYmotPm1tX25vZGUpOworZXJyX3B1dF9wYWdlczoKKwlkcm1fZnJlZV9sYXJnZShv YmotPnBhZ2VzKTsKK2Vycl9mcmVlX29iajoKKwlpcHZyX29iamVjdF9mcmVlKG9iaik7CisJcmV0 dXJuIEVSUl9QVFIocmV0KTsKK30KKworaW50IGlwdnJfZ2VtX3ByaW1lX3BpbihzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYg PSBvYmotPmRldi0+ZGV2X3ByaXZhdGU7CisJSVBWUl9ERUJVR19FTlRSWSgibW11IG9mZnNldCAw eCVseFxuIiwgaXB2cl9nZW1fb2JqZWN0X21tdV9vZmZzZXQodG9faXB2cl9ibyhvYmopKSk7CisJ aXB2cl9zdGF0X2FkZF9leHBvcnRlZChkZXZfcHJpdiwgdG9faXB2cl9ibyhvYmopKTsKKwlyZXR1 cm4gMDsKK30KKwordm9pZCBpcHZyX2dlbV9wcmltZV91bnBpbihzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBvYmotPmRl di0+ZGV2X3ByaXZhdGU7CisJSVBWUl9ERUJVR19FTlRSWSgibW11IG9mZnNldCAweCVseFxuIiwg aXB2cl9nZW1fb2JqZWN0X21tdV9vZmZzZXQodG9faXB2cl9ibyhvYmopKSk7CisJaXB2cl9zdGF0 X3JlbW92ZV9leHBvcnRlZChkZXZfcHJpdiwgdG9faXB2cl9ibyhvYmopKTsKK30KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfYm8uaCBiL2RyaXZlcnMvZ3B1L2RybS9pcHZy L2lwdnJfYm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTgxNTg3Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9iby5oCkBAIC0wLDAg KzEsODAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXB2cl9iby5oOiBJUFZSIGJ1ZmZlciBj cmVhdGlvbi9kZXN0b3J5LCBpbXBvcnQvZXhwb3J0LCBtYXAgZXRjCisgKgorICogQ29weXJpZ2h0 IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uLCBIaWxsc2Jvcm8sIE9SLCBVU0EKKyAqIEFsbCBS aWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJt cyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2 ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJl IHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv cgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMg cHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0x MzAxIFVTQS4KKyAqCisgKiBBdXRob3JzOgorICogICAgWWFvIENoZW5nIDx5YW8uY2hlbmdAaW50 ZWwuY29tPgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9JUFZSX0JPX0hf CisjZGVmaW5lIF9JUFZSX0JPX0hfCisKKyNpbmNsdWRlICJpcHZyX2Rydi5oIgorI2luY2x1ZGUg ImlwdnJfZHJtLmgiCisjaW5jbHVkZSAiaXB2cl9mZW5jZS5oIgorI2luY2x1ZGUgPGRybVAuaD4K KyNpbmNsdWRlIDxkcm1fZ2VtLmg+CisKK3N0cnVjdCBpcHZyX2ZlbmNlOworCitzdHJ1Y3QgZHJt X2lwdnJfZ2VtX29iamVjdCB7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0IGJhc2U7CisKKwkvKiB1 c2VkIHRvIGRpc2luZ3Vpc2ggYmV0d2VlbiBpOTE1IGFuZCBpcHZyICovCisJY2hhciAqZHJ2X25h bWU7CisKKwkvKiogTU0gcmVsYXRlZCAqLworCXN0cnVjdCBkcm1fbW1fbm9kZSBtbV9ub2RlOwor CisJYm9vbCB0aWxpbmc7CisKKwllbnVtIGlwdnJfY2FjaGVfbGV2ZWwgY2FjaGVfbGV2ZWw7CisK Kwlib29sIGRpcnR5OworCisJc3RydWN0IHNnX3RhYmxlICpzZ190YWJsZTsKKwlzdHJ1Y3QgcGFn ZSAqKnBhZ2VzOworCWludCBwYWdlc19waW5fY291bnQ7CisKKwlzdHJ1Y3QgaXB2cl9mZW5jZSAq ZmVuY2U7CisJYXRvbWljX3QgcmVzZXJ2ZWQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZXZlbnRfcXVl dWU7Cit9OworCitzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCogaXB2cl9nZW1fY3JlYXRlKHN0 cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiwKKwkJCXNpemVfdCBzaXplLCB1MzIgdGls aW5nLCB1MzIgY2FjaGVfbGV2ZWwpOwordm9pZCBpcHZyX2dlbV9mcmVlX29iamVjdChzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaik7Cit2b2lkICppcHZyX2dlbV9vYmplY3Rfdm1hcChzdHJ1Y3Qg ZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKTsKK2ludCBpcHZyX2dlbV9mYXVsdChzdHJ1Y3Qgdm1f YXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpOworaW50IGlwdnJfZ2VtX29i amVjdF9hcHBseV9yZWxvYyhzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqLAorCQkJdTY0 IG9mZnNldF9pbl9ibywgdTMyIHZhbHVlKTsKK3N0cnVjdCBzZ190YWJsZSAqaXB2cl9nZW1fcHJp bWVfZ2V0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK3N0cnVjdCBkcm1f Z2VtX29iamVjdCAqaXB2cl9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCisJCQlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsIHN0cnVjdCBz Z190YWJsZSAqc2cpOworaW50IGlwdnJfZ2VtX3ByaW1lX3BpbihzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaik7Cit2b2lkIGlwdnJfZ2VtX3ByaW1lX3VucGluKHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitpcHZyX2dlbV9vYmplY3Rf bW11X29mZnNldChzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKQoreworCXJldHVybiBv YmotPm1tX25vZGUuc3RhcnQ7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2lwdnIvaXB2cl9kZWJ1Zy5jIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9kZWJ1Zy5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZTQwZmEKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2RlYnVnLmMKQEAgLTAsMCArMSwzNDcg QEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgorICogaXB2cl9kZWJ1Zy5jOiBJUFZSIGRlYnVnZnMgc3Vw cG9ydCB0byBhc3Npc3QgYnVnIHRyaWFnZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRl bCBDb3Jwb3JhdGlvbiwgSGlsbHNib3JvLCBPUiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVk LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlv bnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBX SVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0 YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5v dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZy YW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgor ICogQXV0aG9yczoKKyAqICAgIEZlaSBKaWFuZyA8ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqICAg IFlhbyBDaGVuZyA8eWFvLmNoZW5nQGludGVsLmNvbT4KKyAqCisgKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKKworI2luY2x1ZGUgImlwdnJfZGVidWcu aCIKKyNpbmNsdWRlICJpcHZyX2Rydi5oIgorI2luY2x1ZGUgInZlZF9yZWcuaCIKKyNpbmNsdWRl IDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKwordW5pb24g aXB2cl9kZWJ1Z2ZzX3ZhcnMgZGVidWdmc192YXJzOworCitzdGF0aWMgaW50IGlwdnJfZGVidWdf aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc2VxX3ByaW50ZihtLCAi aXB2ciBwbGF0Zm9ybVxuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qIHNvbWUgYm9va2tlZXBpbmcg Ki8KK3ZvaWQKK2lwdnJfc3RhdF9hZGRfb2JqZWN0KHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpk ZXZfcHJpdiwgc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzcGluX2xvY2so JmRldl9wcml2LT5pcHZyX3N0YXQub2JqZWN0X3N0YXRfbG9jayk7CisJaWYgKG9iai0+YmFzZS5p bXBvcnRfYXR0YWNoKSB7CisJCWRldl9wcml2LT5pcHZyX3N0YXQuaW1wb3J0ZWRfY291bnQrKzsK KwkJZGV2X3ByaXYtPmlwdnJfc3RhdC5pbXBvcnRlZF9tZW1vcnkgKz0gb2JqLT5iYXNlLnNpemU7 CisJfQorCWVsc2UgeworCQlkZXZfcHJpdi0+aXB2cl9zdGF0LmFsbG9jYXRlZF9jb3VudCsrOwor CQlkZXZfcHJpdi0+aXB2cl9zdGF0LmFsbG9jYXRlZF9tZW1vcnkgKz0gb2JqLT5iYXNlLnNpemU7 CisJfQorCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+aXB2cl9zdGF0Lm9iamVjdF9zdGF0X2xvY2sp OworfQorCit2b2lkCitpcHZyX3N0YXRfcmVtb3ZlX29iamVjdChzdHJ1Y3QgZHJtX2lwdnJfcHJp dmF0ZSAqZGV2X3ByaXYsIHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmopCit7CisJc3Bp bl9sb2NrKCZkZXZfcHJpdi0+aXB2cl9zdGF0Lm9iamVjdF9zdGF0X2xvY2spOworCWlmIChvYmot PmJhc2UuaW1wb3J0X2F0dGFjaCkgeworCQlkZXZfcHJpdi0+aXB2cl9zdGF0LmltcG9ydGVkX2Nv dW50LS07CisJCWRldl9wcml2LT5pcHZyX3N0YXQuaW1wb3J0ZWRfbWVtb3J5IC09IG9iai0+YmFz ZS5zaXplOworCX0KKwllbHNlIHsKKwkJZGV2X3ByaXYtPmlwdnJfc3RhdC5hbGxvY2F0ZWRfY291 bnQtLTsKKwkJZGV2X3ByaXYtPmlwdnJfc3RhdC5hbGxvY2F0ZWRfbWVtb3J5IC09IG9iai0+YmFz ZS5zaXplOworCX0KKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPmlwdnJfc3RhdC5vYmplY3Rfc3Rh dF9sb2NrKTsKK30KKwordm9pZAoraXB2cl9zdGF0X2FkZF9pbXBvcnRlZChzdHJ1Y3QgZHJtX2lw dnJfcHJpdmF0ZSAqZGV2X3ByaXYsIHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmopCit7 CisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+aXB2cl9zdGF0Lm9iamVjdF9zdGF0X2xvY2spOworCWRl dl9wcml2LT5pcHZyX3N0YXQuaW1wb3J0ZWRfY291bnQrKzsKKwlkZXZfcHJpdi0+aXB2cl9zdGF0 LmltcG9ydGVkX21lbW9yeSArPSBvYmotPmJhc2Uuc2l6ZTsKKwlzcGluX3VubG9jaygmZGV2X3By aXYtPmlwdnJfc3RhdC5vYmplY3Rfc3RhdF9sb2NrKTsKK30KKwordm9pZAoraXB2cl9zdGF0X3Jl bW92ZV9pbXBvcnRlZChzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYsIHN0cnVjdCBk cm1faXB2cl9nZW1fb2JqZWN0ICpvYmopCit7CisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+aXB2cl9z dGF0Lm9iamVjdF9zdGF0X2xvY2spOworCWRldl9wcml2LT5pcHZyX3N0YXQuaW1wb3J0ZWRfY291 bnQtLTsKKwlkZXZfcHJpdi0+aXB2cl9zdGF0LmltcG9ydGVkX21lbW9yeSAtPSBvYmotPmJhc2Uu c2l6ZTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPmlwdnJfc3RhdC5vYmplY3Rfc3RhdF9sb2Nr KTsKK30KKwordm9pZAoraXB2cl9zdGF0X2FkZF9leHBvcnRlZChzdHJ1Y3QgZHJtX2lwdnJfcHJp dmF0ZSAqZGV2X3ByaXYsIHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmopCit7CisJc3Bp bl9sb2NrKCZkZXZfcHJpdi0+aXB2cl9zdGF0Lm9iamVjdF9zdGF0X2xvY2spOworCWRldl9wcml2 LT5pcHZyX3N0YXQuZXhwb3J0ZWRfY291bnQrKzsKKwlkZXZfcHJpdi0+aXB2cl9zdGF0LmV4cG9y dGVkX21lbW9yeSArPSBvYmotPmJhc2Uuc2l6ZTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPmlw dnJfc3RhdC5vYmplY3Rfc3RhdF9sb2NrKTsKK30KKwordm9pZAoraXB2cl9zdGF0X3JlbW92ZV9l eHBvcnRlZChzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYsIHN0cnVjdCBkcm1faXB2 cl9nZW1fb2JqZWN0ICpvYmopCit7CisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+aXB2cl9zdGF0Lm9i amVjdF9zdGF0X2xvY2spOworCWRldl9wcml2LT5pcHZyX3N0YXQuZXhwb3J0ZWRfY291bnQtLTsK KwlkZXZfcHJpdi0+aXB2cl9zdGF0LmV4cG9ydGVkX21lbW9yeSAtPSBvYmotPmJhc2Uuc2l6ZTsK KwlzcGluX3VubG9jaygmZGV2X3ByaXYtPmlwdnJfc3RhdC5vYmplY3Rfc3RhdF9sb2NrKTsKK30K Kwordm9pZCBpcHZyX3N0YXRfYWRkX21tdV9iaW5kKHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpk ZXZfcHJpdiwgc2l6ZV90IHNpemUpCit7CisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+aXB2cl9zdGF0 Lm9iamVjdF9zdGF0X2xvY2spOworCWRldl9wcml2LT5pcHZyX3N0YXQubW11X3VzZWRfc2l6ZSAr PSBzaXplOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+aXB2cl9zdGF0Lm9iamVjdF9zdGF0X2xv Y2spOworfQorCit2b2lkIGlwdnJfc3RhdF9yZW1vdmVfbW11X2JpbmQoc3RydWN0IGRybV9pcHZy X3ByaXZhdGUgKmRldl9wcml2LCBzaXplX3Qgc2l6ZSkKK3sKKwlzcGluX2xvY2soJmRldl9wcml2 LT5pcHZyX3N0YXQub2JqZWN0X3N0YXRfbG9jayk7CisJZGV2X3ByaXYtPmlwdnJfc3RhdC5tbXVf dXNlZF9zaXplIC09IHNpemU7CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT5pcHZyX3N0YXQub2Jq ZWN0X3N0YXRfbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgaXB2cl9kZWJ1Z19nZW1fb2JqZWN0X2lu Zm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkKiBkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19u b2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJc3RydWN0IGRybV9pcHZyX3By aXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJcmV0ID0g bXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCXNlcV9wcmludGYobSwgInRvdGFsIGFsbG9jYXRlICV1IG9iamVj dHMsICV6dSBieXRlc1xuXG4iLAorCQkgICBkZXZfcHJpdi0+aXB2cl9zdGF0LmFsbG9jYXRlZF9j b3VudCwKKwkJICAgZGV2X3ByaXYtPmlwdnJfc3RhdC5hbGxvY2F0ZWRfbWVtb3J5KTsKKwlzZXFf cHJpbnRmKG0sICJ0b3RhbCBpbXBvcnRlZCAldSBvYmplY3RzLCAlenUgYnl0ZXNcblxuIiwKKwkJ ICAgZGV2X3ByaXYtPmlwdnJfc3RhdC5pbXBvcnRlZF9jb3VudCwKKwkJICAgZGV2X3ByaXYtPmlw dnJfc3RhdC5pbXBvcnRlZF9tZW1vcnkpOworCXNlcV9wcmludGYobSwgInRvdGFsIGV4cG9ydGVk ICV1IG9iamVjdHMsICV6dSBieXRlc1xuXG4iLAorCQkgICBkZXZfcHJpdi0+aXB2cl9zdGF0LmV4 cG9ydGVkX2NvdW50LAorCQkgICBkZXZfcHJpdi0+aXB2cl9zdGF0LmV4cG9ydGVkX21lbW9yeSk7 CisJc2VxX3ByaW50ZihtLCAidG90YWwgdXNlZCBNTVUgc2l6ZSAlenUgYnl0ZXNcblxuIiwKKwkJ ICAgZGV2X3ByaXYtPmlwdnJfc3RhdC5tbXVfdXNlZF9zaXplKTsKKworCW11dGV4X3VubG9jaygm ZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXB2cl9k ZWJ1Z19nZW1fc2Vxbm9faW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJ c3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+ cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlk cm1faXB2cl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0 OworCisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZXYtPnN0cnVjdF9tdXRleCk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNlcV9wcmludGYobSwgImxhc3Qgc2lnbmFs ZWQgc2VxIGlzICVkLCBsYXN0IGVtaXR0ZWQgc2VxIGlzICVkXG4iLAorCQlhdG9taWNfcmVhZCgm ZGV2X3ByaXYtPmZlbmNlX2Rydi5zaWduYWxlZF9zZXEpLAorCQlkZXZfcHJpdi0+ZmVuY2VfZHJ2 LnN5bmNfc2VxKTsKKworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGlwdnJfZGVidWdfdmVkX3JlZ19yZWFkKHN0cnVj dCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCQkJc2l6ZV90IG1heCwgbG9mZl90 ICpwcG9zKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7 CisJZHJtX2lwdnJfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJY2hh ciBidWZbMjAwXSwgb2Zmc2V0WzIwXSwgb3BlcmF0aW9uWzEwXSwgZm9ybWF0WzIwXSwgdmFsWzIw XTsKKwlpbnQgbGVuID0gMCwgcmV0LCBub19vZl90b2tlbnM7CisJdW5zaWduZWQgbG9uZyByZWdf b2Zmc2V0LCByZWdfdG9fd3JpdGU7CisKKwlpZiAoZGVidWdmc192YXJzLnJlZy5yZWdfaW5wdXQg PT0gMCkKKwkJcmV0dXJuIGxlbjsKKworCXNucHJpbnRmKGZvcm1hdCwgc2l6ZW9mKGZvcm1hdCks ICIlJSV6dXMgJSUlenVzICUlJXp1cyIsCisJCQlzaXplb2Yob3BlcmF0aW9uKSwgc2l6ZW9mKG9m ZnNldCksIHNpemVvZih2YWwpKTsKKworCW5vX29mX3Rva2VucyA9IHNzY2FuZihkZWJ1Z2ZzX3Zh cnMucmVnLnJlZ192YXJzLAorCQkJCQlmb3JtYXQsIG9wZXJhdGlvbiwgb2Zmc2V0LCB2YWwpOwor CisJaWYgKG5vX29mX3Rva2VucyA8IDMpCisJCXJldHVybiBsZW47CisKKwlsZW4gPSBzaXplb2Yo ZGVidWdmc192YXJzLnJlZy5yZWdfdmFycyk7CisKKwlpZiAoc3RyY21wKG9wZXJhdGlvbiwgSVBW Ul9SRUFEX1RPS0VOKSA9PSAwKSB7CisJCXJldCA9IGtzdHJ0b3VsKG9mZnNldCwgMTYsICZyZWdf b2Zmc2V0KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWxlbiA9IHNjbnBy aW50ZihidWYsIHNpemVvZihidWYpLCAiMHgleDogMHgleFxuIiwKKwkJCSh1MzIpcmVnX29mZnNl dCwKKwkJCUlQVlJfUkVHX1JFQUQzMigodTMyKXJlZ19vZmZzZXQpKTsKKwl9IGVsc2UgaWYgKHN0 cmNtcChvcGVyYXRpb24sIElQVlJfV1JJVEVfVE9LRU4pID09IDApIHsKKwkJcmV0ID0ga3N0cnRv dWwob2Zmc2V0LCAxNiwgJnJlZ19vZmZzZXQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIC1FSU5W QUw7CisKKwkJcmV0ID0ga3N0cnRvdWwodmFsLCAxNiwgJnJlZ190b193cml0ZSk7CisJCWlmIChy ZXQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlJUFZSX1JFR19XUklURTMyKHJlZ19vZmZzZXQs IHJlZ190b193cml0ZSk7CisJCWxlbiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLAorCQkJ CSIweCV4OiAweCV4XG4iLAorCQkJCSh1MzIpcmVnX29mZnNldCwKKwkJCQkodTMyKUlQVlJfUkVH X1JFQUQzMihyZWdfb2Zmc2V0KSk7CisJfSBlbHNlIHsKKwkJbGVuID0gc2NucHJpbnRmKGJ1Ziwg c2l6ZW9mKGJ1ZiksICJPcGVyYXRpb24gTm90IFN1cHBvcnRlZFxuIik7CisJfQorCisJZGVidWdm c192YXJzLnJlZy5yZWdfaW5wdXQgPSAwOworCisJc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1 ZiwgbWF4LCBwcG9zLCBidWYsIGxlbik7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3Np emVfdAoraXB2cl9kZWJ1Z192ZWRfcmVnX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLGNvbnN0IGNo YXIgX191c2VyICp1YnVmLAorCQkJc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQoreworCS8qIHJl c2V0IHRoZSBzdHJpbmcgKi8KKwltZW1zZXQoZGVidWdmc192YXJzLnJlZy5yZWdfdmFycywgMCwg SVBWUl9NQVhfQlVGRkVSX1NUUl9MRU4pOworCisJaWYgKGNudCA+IDApIHsKKwkJaWYgKGNudCA+ IHNpemVvZihkZWJ1Z2ZzX3ZhcnMucmVnLnJlZ192YXJzKSAtIDEpCisJCQlyZXR1cm4gLUVJTlZB TDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoZGVidWdmc192YXJzLnJlZy5yZWdfdmFycywgdWJ1 ZiwgY250KSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWRlYnVnZnNfdmFycy5yZWcucmVnX3Zh cnNbY250XSA9IDA7CisKKwkJLyogRW5hYmxlIFJlYWQgKi8KKwkJZGVidWdmc192YXJzLnJlZy5y ZWdfaW5wdXQgPSAxOworCX0KKworCXJldHVybiBjbnQ7Cit9CisKKy8qIEFzIHRoZSBkcm1fZGVi dWdmc19pbml0KCkgcm91dGluZXMgYXJlIGNhbGxlZCBiZWZvcmUgZGV2LT5kZXZfcHJpdmF0ZSBp cworICogYWxsb2NhdGVkIHdlIG5lZWQgdG8gaG9vayBpbnRvIHRoZSBtaW5vciBmb3IgcmVsZWFz ZS4gKi8KK3N0YXRpYyBpbnQgaXB2cl9hZGRfZmFrZV9pbmZvX25vZGUoc3RydWN0IGRybV9taW5v ciAqbWlub3IsCisJCQkJCXN0cnVjdCBkZW50cnkgKmVudCwgY29uc3Qgdm9pZCAqa2V5KQorewor CXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlOworCisJbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0 cnVjdCBkcm1faW5mb19ub2RlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG5vZGUgPT0gTlVMTCkgewor CQlkZWJ1Z2ZzX3JlbW92ZShlbnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlub2RlLT5t aW5vciA9IG1pbm9yOworCW5vZGUtPmRlbnQgPSBlbnQ7CisJbm9kZS0+aW5mb19lbnQgPSAodm9p ZCAqKSBrZXk7CisKKwltdXRleF9sb2NrKCZtaW5vci0+ZGVidWdmc19sb2NrKTsKKwlsaXN0X2Fk ZCgmbm9kZS0+bGlzdCwgJm1pbm9yLT5kZWJ1Z2ZzX2xpc3QpOworCW11dGV4X3VubG9jaygmbWlu b3ItPmRlYnVnZnNfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcHZyX2Rl YnVnZnNfY3JlYXRlKHN0cnVjdCBkZW50cnkgKnJvb3QsCisJCQkgICAgICAgc3RydWN0IGRybV9t aW5vciAqbWlub3IsCisJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgICBjb25z dCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBtaW5vci0+ZGV2OworCXN0cnVjdCBkZW50cnkgKmVudDsKKworCWVudCA9IGRlYnVnZnNf Y3JlYXRlX2ZpbGUobmFtZSwKKwkJCQkgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJCSAgcm9vdCwg ZGV2LAorCQkJCSAgZm9wcyk7CisJaWYgKElTX0VSUihlbnQpKQorCQlyZXR1cm4gUFRSX0VSUihl bnQpOworCisJcmV0dXJuIGlwdnJfYWRkX2Zha2VfaW5mb19ub2RlKG1pbm9yLCBlbnQsIGZvcHMp OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcHZyX3ZlZF9yZWdf Zm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHNpbXBsZV9vcGVuLAor CS5yZWFkID0gaXB2cl9kZWJ1Z192ZWRfcmVnX3JlYWQsCisJLndyaXRlID0gaXB2cl9kZWJ1Z192 ZWRfcmVnX3dyaXRlLAorCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKK307CisKK3N0YXRpYyBz dHJ1Y3QgZHJtX2luZm9fbGlzdCBpcHZyX2RlYnVnZnNfbGlzdFtdID0geworCXsiaXB2cl9jYXBh YmlsaXRpZXMiLCBpcHZyX2RlYnVnX2luZm8sIDB9LAorCXsiaXB2cl9nZW1fb2JqZWN0cyIsIGlw dnJfZGVidWdfZ2VtX29iamVjdF9pbmZvLCAwfSwKKwl7ImlwdnJfZ2VtX3NlcW5vIiwgaXB2cl9k ZWJ1Z19nZW1fc2Vxbm9faW5mbywgMH0sCisKK307CisjZGVmaW5lIElQVlJfREVCVUdGU19FTlRS SUVTIEFSUkFZX1NJWkUoaXB2cl9kZWJ1Z2ZzX2xpc3QpCisKK3N0YXRpYyBzdHJ1Y3QgaXB2cl9k ZWJ1Z2ZzX2ZpbGVzIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IHN0cnVjdCBmaWxlX29w ZXJhdGlvbnMgKmZvcHM7Cit9IGlwdnJfZGVidWdmc19maWxlc1tdID0geworCXsiaXB2cl92ZWRf cmVnX2FwaSIsICZpcHZyX3ZlZF9yZWdfZm9wc30sCit9OworCitpbnQgaXB2cl9kZWJ1Z2ZzX2lu aXQoc3RydWN0IGRybV9taW5vciAqbWlub3IpCit7CisJaW50IHJldCwgaTsKKworCWZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKGlwdnJfZGVidWdmc19maWxlcyk7IGkrKykgeworCQlyZXQgPSBp cHZyX2RlYnVnZnNfY3JlYXRlKG1pbm9yLT5kZWJ1Z2ZzX3Jvb3QsIG1pbm9yLAorCQkJCSAgIGlw dnJfZGVidWdmc19maWxlc1tpXS5uYW1lLAorCQkJCSAgIGlwdnJfZGVidWdmc19maWxlc1tpXS5m b3BzKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIGRybV9kZWJ1 Z2ZzX2NyZWF0ZV9maWxlcyhpcHZyX2RlYnVnZnNfbGlzdCwKKwkJCQkgSVBWUl9ERUJVR0ZTX0VO VFJJRVMsCisJCQkJIG1pbm9yLT5kZWJ1Z2ZzX3Jvb3QsIG1pbm9yKTsKK30KKwordm9pZCBpcHZy X2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlpbnQgaTsKKwor CWRybV9kZWJ1Z2ZzX3JlbW92ZV9maWxlcyhpcHZyX2RlYnVnZnNfbGlzdCwKKwkJCSAgSVBWUl9E RUJVR0ZTX0VOVFJJRVMsIG1pbm9yKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlw dnJfZGVidWdmc19maWxlcyk7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2luZm9fbGlzdCAqaW5mb19s aXN0ID0KKwkJCShzdHJ1Y3QgZHJtX2luZm9fbGlzdCAqKWlwdnJfZGVidWdmc19maWxlc1tpXS5m b3BzOworCisJCWRybV9kZWJ1Z2ZzX3JlbW92ZV9maWxlcyhpbmZvX2xpc3QsIDEsIG1pbm9yKTsK Kwl9Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pcHZyL2lwdnJfZGVidWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJf ZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODgzODJlCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9kZWJ1Zy5oCkBAIC0wLDAg KzEsNzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXB2cl9kZWJ1Zy5oOiBJUFZSIGRlYnVn ZnMgc3VwcG9ydCBoZWFkZXIgZmlsZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBD b3Jwb3JhdGlvbiwgSGlsbHNib3JvLCBPUiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRI T1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWls cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwg d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5r bGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICog QXV0aG9yczoKKyAqICAgIEZlaSBKaWFuZyA8ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqICAgIFlh byBDaGVuZyA8eWFvLmNoZW5nQGludGVsLmNvbT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisK KworI2lmbmRlZiBfSVBWUl9ERUJVR19IXworI2RlZmluZSBfSVBWUl9ERUJVR19IXworCisjaW5j bHVkZSAiaXB2cl9iby5oIgorI2luY2x1ZGUgImRybVAuaCIKKworLyogT3BlcmF0aW9ucyBzdXBw b3J0ZWQgKi8KKyNkZWZpbmUgSVBWUl9NQVhfQlVGRkVSX1NUUl9MRU4JCTIwMAorCisjZGVmaW5l IElQVlJfUkVBRF9UT0tFTgkJCSJSRUFEIgorI2RlZmluZSBJUFZSX1dSSVRFX1RPS0VOCQkiV1JJ VEUiCisKKy8qIERlYnVnRlMgVmFyaWFibGUgZGVjbGFyYXRpb24gKi8KK3N0cnVjdCBpcHZyX2Rl YnVnZnNfcmVnX3ZhcnMgeworCWNoYXIgcmVnX3ZhcnNbSVBWUl9NQVhfQlVGRkVSX1NUUl9MRU5d OworCXUzMiByZWdfaW5wdXQ7Cit9OworCit1bmlvbiBpcHZyX2RlYnVnZnNfdmFycyB7CisJc3Ry dWN0IGlwdnJfZGVidWdmc19yZWdfdmFycyByZWc7Cit9OworCitpbnQgaXB2cl9kZWJ1Z2ZzX2lu aXQoc3RydWN0IGRybV9taW5vciAqbWlub3IpOwordm9pZCBpcHZyX2RlYnVnZnNfY2xlYW51cChz dHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CisKK3ZvaWQgaXB2cl9zdGF0X2FkZF9vYmplY3Qoc3Ry dWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2LAorCQkJc3RydWN0IGRybV9pcHZyX2dlbV9v YmplY3QgKm9iaik7CisKK3ZvaWQgaXB2cl9zdGF0X3JlbW92ZV9vYmplY3Qoc3RydWN0IGRybV9p cHZyX3ByaXZhdGUgKmRldl9wcml2LAorCQkJc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9i aik7CisKK3ZvaWQgaXB2cl9zdGF0X2FkZF9pbXBvcnRlZChzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0 ZSAqZGV2X3ByaXYsCisJCQlzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKTsKKwordm9p ZCBpcHZyX3N0YXRfcmVtb3ZlX2ltcG9ydGVkKHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZf cHJpdiwKKwkJCXN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmopOworCit2b2lkIGlwdnJf c3RhdF9hZGRfZXhwb3J0ZWQoc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2LAorCQkJ c3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iaik7CisKK3ZvaWQgaXB2cl9zdGF0X3JlbW92 ZV9leHBvcnRlZChzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQlzdHJ1Y3Qg ZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKTsKKwordm9pZCBpcHZyX3N0YXRfYWRkX21tdV9iaW5k KHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiwKKwkJCXNpemVfdCBzaXplKTsKKwor dm9pZCBpcHZyX3N0YXRfcmVtb3ZlX21tdV9iaW5kKHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpk ZXZfcHJpdiwKKwkJCXNpemVfdCBzaXplKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaXB2ci9pcHZyX2RybS5oIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9kcm0u aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTkxNmZhCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9kcm0uaApAQCAtMCwwICsxLDI3OCBA QAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCisgKiBpcHZyX2RybS5oOiBJUFZSIGhlYWRlciBmaWxlIGV4 cG9ydGVkIHRvIHVzZXIgc3BhY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29y cG9yYXRpb24sIEhpbGxzYm9ybywgT1IsIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9V VAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Yg TUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMu CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xp biBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIEF1 dGhvcnM6CisgKiAgICBGZWkgSmlhbmcgPGZlaS5qaWFuZ0BpbnRlbC5jb20+CisgKiAgICBZYW8g Q2hlbmcgPHlhby5jaGVuZ0BpbnRlbC5jb20+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisK Ky8qIHRoaXMgZmlsZSBvbmx5IGRlZmluZSBzdHJ1Y3RzIGFuZCBtYWNybyB3aGljaCBuZWVkIGV4 cG9ydCB0byB1c2VyIHNwYWNlICovCisjaWZuZGVmIF9JUFZSX0RSTV9IXworI2RlZmluZSBfSVBW Ul9EUk1fSF8KKworI2luY2x1ZGUgPGRybS9kcm0uaD4KK3N0cnVjdCBkcm1faXB2cl9jb250ZXh0 X2NyZWF0ZSB7CisJLyogcGFzc2VkIGN0eF9pbmZvLCBpbmNsdWRpbmcgY29kZWMsIHByb2ZpbGUg aW5mbyAqLworI2RlZmluZSBJUFZSX0NPTlRFWFRfVFlQRV9WRUQgICAoMHgxKQorCV9fdTMyIGN0 eF90eXBlOworCS8qIHJldHVybmVkIGJhY2sgY3R4X2lkICovCisJX191MzIgY3R4X2lkOworCS8q CisJICogZm9sbG93aW5nIHRpbGluZyBzdHJpZGVzIGZvciBWRUQgYXJlIHN1cHBvcnRlZDoKKwkg KiBzdHJpZGUgMDogNTEyIGZvciBzY2hlbWUgMCwgMTAyNCBmb3Igc2NoZW1lIDEKKwkgKiBzdHJp ZGUgMTogMTAyNCBmb3Igc2NoZW1lIDAsIDIwNDggZm9yIHNjaGVtZSAxCisJICogc3RyaWRlIDI6 IDIwNDggZm9yIHNjaGVtZSAwLCA0MDk2IGZvciBzY2hlbWUgMQorCSAqIHN0cmlkZSAzOiA0MDk2 IGZvciBzY2hlbWUgMAorCSAqLworCV9fdTMyIHRpbGluZ19zdHJpZGU7CisJLyoKKwkgKiBzY2hl bWUgMDogdGlsZSBpcyAyNTZ4MTYsIHdoaWxlIG1pbmltYWwgdGlsZSBzdHJpZGUgaXMgNTEyCisJ ICogc2NoZW1lIDE6IHRpbGUgaXMgNTEyeDgsIHdoaWxlIG1pbmltYWwgdGlsZSBzdHJpZGUgaXMg MTAyNAorCSAqLworCV9fdTMyIHRpbGluZ19zY2hlbWU7Cit9OworCitzdHJ1Y3QgZHJtX2lwdnJf Y29udGV4dF9kZXN0cm95IHsKKwlfX3UzMiBjdHhfaWQ7CisJX191MzIgcGFkNjQ7Cit9OworCitl bnVtIGRybV9pcHZyX21pc2Nfa2V5IHsKKwlJUFZSX0RFVklDRV9JTkZPLAorCUlQVlJfVVBEQVRF X1RJTElORywKKwlJUFZSX1NFVF9ESVNQTEFZSU5HX0ZSQU1FLAorCUlQVlJfR0VUX0RJU1BMQVlJ TkdfRlJBTUUsCisJSVBWUl9RVUVSWV9FTlRSWQorfTsKKworLyoKKyAqIGRpZmZlcmVudCBjb250 ZXh0IG1heWJlIGhhcyBkaWZmZXJlbnQgdGlsaW5nIHN0cmlkZSwKKyAqIHRoZW4gdGlsaW5nIGlu Zm8gbmVlZCBiZSBib3VuZCB3aXRoIGN0eAorICovCitzdHJ1Y3QgZHJtX2lwdnJfdXBkYXRlX3Rp bGluZyB7CisJX191MzIgY3R4X2lkOworCV9fdTMyIHRpbGluZ19zdHJpZGU7CisJX191MzIgdGls aW5nX3NjaGVtZTsKKwlfX3UzMiBwYWQ2NDsKK307CisKKy8qIElvY3RsIHRvIHNldC9nZXQgbWlz YyBwYXJhbXM6CisgKi8KK3N0cnVjdCBkcm1faXB2cl9taXNjIHsKKwlfX3U2NCBrZXk7CisJX191 NjQgYXJnOwkJLyogYXJndW1lbnQgcG9pbnRlciAqLworCV9fdTY0IHZhbHVlOwkvKiBmZWVkIGJh Y2sgcG9pbnRlciAqLworfTsKKworc3RydWN0IGRybV9pcHZyX2dlbV9yZWxvY2F0aW9uX2VudHJ5 IHsKKwkvKioKKwkgKiBIYW5kbGUgb2YgdGhlIGJ1ZmZlciBiZWluZyBwb2ludGVkIHRvIGJ5IHRo aXMgcmVsb2NhdGlvbiBlbnRyeS4KKwkgKgorCSAqIEl0J3MgYXBwZWFsaW5nIHRvIG1ha2UgdGhp cyBiZSBhbiBpbmRleCBpbnRvIHRoZSBtbV92YWxpZGF0ZV9lbnRyeQorCSAqIGxpc3QgdG8gcmVm ZXIgdG8gdGhlIGJ1ZmZlciwgYnV0IHRoaXMgYWxsb3dzIHRoZSBkcml2ZXIgdG8gY3JlYXRlCisJ ICogYSByZWxvY2F0aW9uIGxpc3QgZm9yIHN0YXRlIGJ1ZmZlcnMgYW5kIG5vdCByZS13cml0ZSBp dCBwZXIKKwkgKiBleGVjIHVzaW5nIHRoZSBidWZmZXIuCisJICovCisJX191MzIgdGFyZ2V0X2hh bmRsZTsKKworCS8qKgorCSAqIFZhbHVlIHRvIGJlIGFkZGVkIHRvIHRoZSBvZmZzZXQgb2YgdGhl IHRhcmdldCBidWZmZXIgdG8gbWFrZSB1cAorCSAqIHRoZSByZWxvY2F0aW9uIGVudHJ5LgorCSAq LworCV9fdTMyIGRlbHRhOworCisJLyoqIE9mZnNldCBpbiB0aGUgYnVmZmVyIHRoZSByZWxvY2F0 aW9uIGVudHJ5IHdpbGwgYmUgd3JpdHRlbiBpbnRvICovCisJX191NjQgb2Zmc2V0OworCisJLyoq CisJICogT2Zmc2V0IHZhbHVlIG9mIHRoZSB0YXJnZXQgYnVmZmVyIHRoYXQgdGhlIHJlbG9jYXRp b24gZW50cnkgd2FzIGxhc3QKKwkgKiB3cml0dGVuIGFzLgorCSAqCisJICogSWYgdGhlIGJ1ZmZl ciBoYXMgdGhlIHNhbWUgb2Zmc2V0IGFzIGxhc3QgdGltZSwgd2UgY2FuIHNraXAgc3luY2luZwor CSAqIGFuZCB3cml0aW5nIHRoZSByZWxvY2F0aW9uLiAgVGhpcyB2YWx1ZSBpcyB3cml0dGVuIGJh Y2sgb3V0IGJ5CisJICogdGhlIGV4ZWNidWZmZXIgaW9jdGwgd2hlbiB0aGUgcmVsb2NhdGlvbiBp cyB3cml0dGVuLgorCSAqLworCV9fdTY0IHByZXN1bWVkX29mZnNldDsKKworCS8qKgorCSAqIFRh cmdldCBtZW1vcnkgZG9tYWlucyByZWFkIGJ5IHRoaXMgb3BlcmF0aW9uLgorCSAqLworCV9fdTMy IHJlYWRfZG9tYWluczsKKworCS8qKgorCSAqIFRhcmdldCBtZW1vcnkgZG9tYWlucyB3cml0dGVu IGJ5IHRoaXMgb3BlcmF0aW9uLgorCSAqCisJICogTm90ZSB0aGF0IG9ubHkgb25lIGRvbWFpbiBt YXkgYmUgd3JpdHRlbiBieSB0aGUgd2hvbGUKKwkgKiBleGVjYnVmZmVyIG9wZXJhdGlvbiwgc28g dGhhdCB3aGVyZSB0aGVyZSBhcmUgY29uZmxpY3RzLAorCSAqIHRoZSBhcHBsaWNhdGlvbiB3aWxs IGdldCAtRUlOVkFMIGJhY2suCisJICovCisJX191MzIgd3JpdGVfZG9tYWluOworfTsKKworc3Ry dWN0IGRybV9pcHZyX2dlbV9leGVjX29iamVjdCB7CisJLyoqCisJICogVXNlcidzIGhhbmRsZSBm b3IgYSBidWZmZXIgdG8gYmUgYm91bmQgaW50byB0aGUgTU1VIGZvciB0aGlzCisJICogb3BlcmF0 aW9uLgorCSAqLworCV9fdTMyIGhhbmRsZTsKKworCS8qKiBOdW1iZXIgb2YgcmVsb2NhdGlvbnMg dG8gYmUgcGVyZm9ybWVkIG9uIHRoaXMgYnVmZmVyICovCisJX191MzIgcmVsb2NhdGlvbl9jb3Vu dDsKKwkvKioKKwkgKiBQb2ludGVyIHRvIGFycmF5IG9mIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVs b2NhdGlvbl9lbnRyeSBjb250YWluaW5nCisJICogdGhlIHJlbG9jYXRpb25zIHRvIGJlIHBlcmZv cm1lZCBpbiB0aGlzIGJ1ZmZlci4KKwkgKi8KKwlfX3U2NCByZWxvY3NfcHRyOworCisJLyoqIFJl cXVpcmVkIGFsaWdubWVudCBpbiBncmFwaGljcyBhcGVydHVyZSAqLworCV9fdTY0IGFsaWdubWVu dDsKKworCS8qKgorCSAqIFJldHVybmVkIHZhbHVlIG9mIHRoZSB1cGRhdGVkIG9mZnNldCBvZiB0 aGUgb2JqZWN0LCBmb3IgZnV0dXJlCisJICogcHJlc3VtZWRfb2Zmc2V0IHdyaXRlcy4KKwkgKi8K KwlfX3U2NCBvZmZzZXQ7CisKKyNkZWZpbmUgSVBWUl9FWEVDX09CSkVDVF9ORUVEX0ZFTkNFICgx IDw8IDApCisjZGVmaW5lIElQVlJfRVhFQ19PQkpFQ1RfU1VCTUlUICAgICAoMSA8PCAxKQorCV9f dTY0IGZsYWdzOworCisJX191NjQgcnN2ZDE7CisJX191NjQgcnN2ZDI7Cit9OworCitzdHJ1Y3Qg ZHJtX2lwdnJfZ2VtX2V4ZWNidWZmZXIgeworCS8qKgorCSAqIExpc3Qgb2YgZ2VtX2V4ZWNfb2Jq ZWN0MiBzdHJ1Y3RzCisJICovCisJX191NjQgYnVmZmVyc19wdHI7CisJX191MzIgYnVmZmVyX2Nv dW50OworCisJLyoqIE9mZnNldCBpbiB0aGUgYmF0Y2hidWZmZXIgdG8gc3RhcnQgZXhlY3V0aW9u IGZyb20uICovCisJX191MzIgZXhlY19zdGFydF9vZmZzZXQ7CisJLyoqIEJ5dGVzIHVzZWQgaW4g YmF0Y2hidWZmZXIgZnJvbSBiYXRjaF9zdGFydF9vZmZzZXQgKi8KKwlfX3UzMiBleGVjX2xlbjsK KworCS8qKgorCSAqIElEIG9mIGhhcmR3YXJlIGNvbnRleHQuCisJICovCisJX191MzIgY3R4X2lk OworCisJX191NjQgZmxhZ3M7CisJX191NjQgcnN2ZDE7CisJX191NjQgcnN2ZDI7Cit9OworCitl bnVtIGlwdnJfY2FjaGVfbGV2ZWwKK3sKKwlJUFZSX0NBQ0hFX05PQUNDRVNTLAorCUlQVlJfQ0FD SEVfVU5DQUNIRUQsCisJSVBWUl9DQUNIRV9XUklURUJBQ0ssCisJSVBWUl9DQUNIRV9XUklURUNP TUJJTkUsCisJSVBWUl9DQUNIRV9NQVgsCit9OworCitzdHJ1Y3QgZHJtX2lwdnJfZ2VtX2NyZWF0 ZSB7CisJLyoKKwkgKiBSZXF1ZXN0ZWQgc2l6ZSBmb3IgdGhlIG9iamVjdC4KKwkgKiBUaGUgKHBh Z2UtYWxpZ25lZCkgYWxsb2NhdGVkIHNpemUgZm9yIHRoZSBvYmplY3Qgd2lsbCBiZSByZXR1cm5l ZC4KKwkgKi8KKwlfX3U2NCBzaXplOworCV9fdTY0IHJvdW5kZWRfc2l6ZTsKKwlfX3U2NCBtbXVf b2Zmc2V0OworCS8qCisJICogUmV0dXJuZWQgaGFuZGxlIGZvciB0aGUgb2JqZWN0LgorCSAqIE9i amVjdCBoYW5kbGVzIGFyZSBub256ZXJvLgorCSAqLworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiB0 aWxpbmc7CisKKwlfX3UzMiBjYWNoZV9sZXZlbDsKKwlfX3UzMiBwYWQ2NDsKKwkvKgorCSAqIEhh bmRsZSB1c2VkIGZvciB1c2VyIHRvIG1tYXAgQk8KKwkgKi8KKwlfX3U2NCBtYXBfb2Zmc2V0Owor fTsKKworc3RydWN0IGRybV9pcHZyX2dlbV9idXN5IHsKKwkvKiBIYW5kbGUgb2YgdGhlIGJ1ZmZl ciB0byBjaGVjayBmb3IgYnVzeSAqLworCV9fdTMyIGhhbmRsZTsKKworCS8qCisJICogUmV0dXJu IGJ1c3kgc3RhdHVzICgxIGlmIGJ1c3ksIDAgaWYgaWRsZSkuCisJICogVGhlIGhpZ2ggd29yZCBp cyB1c2VkIHRvIGluZGljYXRlIG9uIHdoaWNoIHJpbmdzIHRoZSBvYmplY3QKKwkgKiBjdXJyZW50 bHkgcmVzaWRlczoKKwkgKiAgMTY6MzEgLSBidXN5IChyIG9yIHIvdykgcmluZ3MgKDE2IHJlbmRl ciwgMTcgYnNkLCAxOCBibHQsIGV0YykKKwkgKi8KKwlfX3UzMiBidXN5OworfTsKKworc3RydWN0 IGRybV9pcHZyX2dlbV9tbWFwX29mZnNldCB7CisJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCBi ZWluZyBtYXBwZWQuICovCisJX191MzIgaGFuZGxlOworCV9fdTMyIHBhZDY0OworCS8qKgorCSAq IEZha2Ugb2Zmc2V0IHRvIHVzZSBmb3Igc3Vic2VxdWVudCBtbWFwIGNhbGwKKwkgKgorCSAqIFRo aXMgaXMgYSBmaXhlZC1zaXplIHR5cGUgZm9yIDMyLzY0IGNvbXBhdGliaWxpdHkuCisJICovCisJ X191NjQgb2Zmc2V0OworfTsKKworc3RydWN0IGRybV9pcHZyX2dlbV93YWl0IHsKKwkvKiBIYW5k bGUgb2YgQk8gd2Ugc2hhbGwgd2FpdCBvbiAqLworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBmbGFn czsKKwkvKiogTnVtYmVyIG9mIG5hbm9zZWNvbmRzIHRvIHdhaXQsIFJldHVybnMgdGltZSByZW1h aW5pbmcuICovCisJX19zNjQgdGltZW91dF9uczsKK307CisKKy8qCisgKiBJUFZSIEdFTSBzcGVj aWZpYyBpb2N0bHMKKyAqLworI2RlZmluZSBEUk1fSVBWUl9DT05URVhUX0NSRUFURSAgICAgMHgw MAorI2RlZmluZSBEUk1fSVBWUl9DT05URVhUX0RFU1RST1kgICAgMHgwMQorI2RlZmluZSBEUk1f SVBWUl9NSVNDICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBEUk1fSVBWUl9HRU1fRVhFQ0JV RkZFUiAgICAgMHgwMworI2RlZmluZSBEUk1fSVBWUl9HRU1fQlVTWSAgICAgICAgICAgMHgwNAor I2RlZmluZSBEUk1fSVBWUl9HRU1fQ1JFQVRFICAgICAgICAgMHgwNQorI2RlZmluZSBEUk1fSVBW Ul9HRU1fV0FJVCAgICAgICAgICAgMHgwNgorI2RlZmluZSBEUk1fSVBWUl9HRU1fTU1BUF9PRkZT RVQgICAgMHgwNworCisjZGVmaW5lIERSTV9JT0NUTF9JUFZSX0NPTlRFWFRfQ1JFQVRFCVwKKwlE Uk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0lQVlJfQ09OVEVYVF9DUkVBVEUsIHN0cnVj dCBkcm1faXB2cl9jb250ZXh0X2NyZWF0ZSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0lQVlJfQ09OVEVY VF9ERVNUUk9ZCVwKKwlEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSVBWUl9DT05URVhU X0RFU1RST1ksIHN0cnVjdCBkcm1faXB2cl9jb250ZXh0X2Rlc3Ryb3kpCisjZGVmaW5lIERSTV9J T0NUTF9JUFZSX01JU0MJCVwKKwlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0lQVlJf TUlTQywgc3RydWN0IGRybV9pcHZyX21pc2MpCisjZGVmaW5lIERSTV9JT0NUTF9JUFZSX0dFTV9F WEVDQlVGRkVSCVwKKwlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0lQVlJfR0VNX0VY RUNCVUZGRVIsIHN0cnVjdCBkcm1faXB2cl9nZW1fZXhlY2J1ZmZlcikKKyNkZWZpbmUgRFJNX0lP Q1RMX0lQVlJfR0VNX0JVU1kJCVwKKwlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0lQ VlJfR0VNX0JVU1ksIHN0cnVjdCBkcm1faXB2cl9nZW1fYnVzeSkKKyNkZWZpbmUgRFJNX0lPQ1RM X0lQVlJfR0VNX0NSRUFURQlcCisJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JUFZS X0dFTV9DUkVBVEUsIHN0cnVjdCBkcm1faXB2cl9nZW1fY3JlYXRlKQorI2RlZmluZSBEUk1fSU9D VExfSVBWUl9HRU1fV0FJVAkJXAorCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSVBW Ul9HRU1fV0FJVCwgc3RydWN0IGRybV9pcHZyX2dlbV93YWl0KQorI2RlZmluZSBEUk1fSU9DVExf SVBWUl9HRU1fTU1BUF9PRkZTRVQJXAorCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1f SVBWUl9HRU1fTU1BUF9PRkZTRVQsIHN0cnVjdCBkcm1faXB2cl9nZW1fbW1hcF9vZmZzZXQpCisK KyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9kcnYuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uOWY3MWZiZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZy L2lwdnJfZHJ2LmMKQEAgLTAsMCArMSw2MTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXB2 cl9kcnYuYzogSVBWUiBkcml2ZXIgY29tbW9uIGZpbGUgZm9yIGluaXRpYWxpemF0aW9uL2RlLWlu aXRpYWxpemF0aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9u LCBIaWxsc2Jvcm8sIE9SLCBVU0EKKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5U QUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBG aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKiBBdXRob3JzOgor ICogICAgRmVpIEppYW5nIDxmZWkuamlhbmdAaW50ZWwuY29tPgorICogICAgWWFvIENoZW5nIDx5 YW8uY2hlbmdAaW50ZWwuY29tPgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUg ImlwdnJfZHJ2LmgiCisjaW5jbHVkZSAiaXB2cl9nZW0uaCIKKyNpbmNsdWRlICJpcHZyX21tdS5o IgorI2luY2x1ZGUgImlwdnJfZXhlYy5oIgorI2luY2x1ZGUgImlwdnJfYm8uaCIKKyNpbmNsdWRl ICJpcHZyX2RlYnVnLmgiCisjaW5jbHVkZSAiaXB2cl90cmFjZS5oIgorI2luY2x1ZGUgInZlZF9m dy5oIgorI2luY2x1ZGUgInZlZF9wbS5oIgorI2luY2x1ZGUgInZlZF9yZWcuaCIKKyNpbmNsdWRl ICJ2ZWRfY21kLmgiCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgv dmVyc2lvbi5oPgorI2luY2x1ZGUgPHVhcGkvZHJtL2RybS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bt X3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworaW50IGRybV9pcHZyX2RlYnVn ID0gMHg4MDsKK2ludCBkcm1faXB2cl9mcmVxID0gMzIwOworCittb2R1bGVfcGFyYW1fbmFtZWQo ZGVidWcsIGRybV9pcHZyX2RlYnVnLCBpbnQsIDA2MDApOworbW9kdWxlX3BhcmFtX25hbWVkKGZy ZXEsIGRybV9pcHZyX2ZyZXEsIGludCwgMDYwMCk7CisKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcs CisJCSJjb250cm9sIGRlYnVnIGluZm8gb3V0cHV0IgorCQkiZGVmYXVsdDogMCIKKwkJIjB4MDE6 SVBWUl9EX0dFTkVSQUwsIDB4MDI6SVBWUl9EX0lOSVQsIDB4MDQ6SVBWUl9EX0lSUSwgMHgwODpJ UFZSX0RfRU5UUlkiCisJCSIweDEwOklQVlJfRF9QTSwgMHgyMDpJUFZSX0RfUkVHLCAweDQwOklQ VlJfRF9WRUQsIDB4ODA6SVBWUl9EX1dBUk4iKTsKK01PRFVMRV9QQVJNX0RFU0MoZnJlcSwKKwkJ InByZWZlcmVkIFZFRCBmcmVxdWVuY3kiCisJCSJkZWZhdWx0OiAzMjAgTUh6Iik7CisKK3N0YXRp YyBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgaXB2cl9nZW1faW9jdGxzW10gPSB7CisJRFJNX0lPQ1RM X0RFRl9EUlYoSVBWUl9DT05URVhUX0NSRUFURSwKKwkJCWlwdnJfY29udGV4dF9jcmVhdGVfaW9j dGwsIERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRl9EUlYoSVBWUl9DT05URVhUX0RFU1RS T1ksCisJCQlpcHZyX2NvbnRleHRfZGVzdHJveV9pb2N0bCwgRFJNX1VOTE9DS0VEKSwKKwlEUk1f SU9DVExfREVGX0RSVihJUFZSX01JU0MsCisJCQlpcHZyX21pc2NfaW9jdGwsIERSTV9BVVRIKSwK KwlEUk1fSU9DVExfREVGX0RSVihJUFZSX0dFTV9FWEVDQlVGRkVSLAorCQkJaXB2cl9nZW1fZXhl Y2J1ZmZlcl9pb2N0bCwgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGX0RS VihJUFZSX0dFTV9CVVNZLAorCQkJaXB2cl9nZW1fYnVzeV9pb2N0bCwgRFJNX0FVVEh8RFJNX1VO TE9DS0VEKSwKKwlEUk1fSU9DVExfREVGX0RSVihJUFZSX0dFTV9DUkVBVEUsCisJCQlpcHZyX2dl bV9jcmVhdGVfaW9jdGwsIERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRl9EUlYoSVBWUl9H RU1fV0FJVCwKKwkJCWlwdnJfZ2VtX3dhaXRfaW9jdGwsIERSTV9BVVRIfERSTV9VTkxPQ0tFRCks CisJRFJNX0lPQ1RMX0RFRl9EUlYoSVBWUl9HRU1fTU1BUF9PRkZTRVQsCisJCQlpcHZyX2dlbV9t bWFwX29mZnNldF9pb2N0bCwgRFJNX1VOTE9DS0VEKSwKK307CisKK3N0YXRpYyB2b2lkIGlwdnJf Z2VtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJp dmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJZGV2X3ByaXYtPmlwdnJfYm9f c2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKCJpcHZyX2dlbV9vYmplY3QiLAorCQkJCSAgc2l6ZW9m KHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0KSwgMCwKKwkJCQkgIFNMQUJfSFdDQUNIRV9BTElH TiwgTlVMTCk7CisKKwlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPmlwdnJfc3RhdC5vYmplY3Rf c3RhdF9sb2NrKTsKKwlkZXZfcHJpdi0+aXB2cl9zdGF0LmludGVycnVwdGlibGUgPSB0cnVlOwor fQorCitzdGF0aWMgdm9pZCBpcHZyX2dlbV9zZXR1cF9tbXUoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBsaW5lYXJfc3RhcnQsCisJCQkJICAgICAgIHVu c2lnbmVkIGxvbmcgbGluZWFyX2VuZCwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyB0aWxpbmdf c3RhcnQsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdGlsaW5nX2VuZCkKK3sKKwkvKiBMZXQg R0VNIE1hbmFnZSBhbGwgb2YgdGhlIGFwZXJ0dXJlLgorCSAqLworCXN0cnVjdCBkcm1faXB2cl9w cml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGlwdnJfYWRkcmVz c19zcGFjZSAqYWRkcl9zcGFjZSA9ICZkZXZfcHJpdi0+YWRkcl9zcGFjZTsKKworCWFkZHJfc3Bh Y2UtPmRldiA9IGRldl9wcml2LT5kZXY7CisKKwkvKiBTdWJ0cmFjdCB0aGUgZ3VhcmQgcGFnZSAu Li4gKi8KKwlkcm1fbW1faW5pdCgmYWRkcl9zcGFjZS0+bGluZWFyX21tLCBsaW5lYXJfc3RhcnQs CisJCSAgICBsaW5lYXJfZW5kIC0gbGluZWFyX3N0YXJ0IC0gUEFHRV9TSVpFKTsKKwlkZXZfcHJp di0+YWRkcl9zcGFjZS5saW5lYXJfc3RhcnQgPSBsaW5lYXJfc3RhcnQ7CisJZGV2X3ByaXYtPmFk ZHJfc3BhY2UubGluZWFyX3RvdGFsID0gbGluZWFyX2VuZCAtIGxpbmVhcl9zdGFydDsKKworCWRy bV9tbV9pbml0KCZhZGRyX3NwYWNlLT50aWxpbmdfbW0sIHRpbGluZ19zdGFydCwKKwkJICAgIHRp bGluZ19lbmQgLSB0aWxpbmdfc3RhcnQgLSBQQUdFX1NJWkUpOworCWRldl9wcml2LT5hZGRyX3Nw YWNlLnRpbGluZ19zdGFydCA9IHRpbGluZ19zdGFydDsKKwlkZXZfcHJpdi0+YWRkcl9zcGFjZS50 aWxpbmdfdG90YWwgPSB0aWxpbmdfZW5kIC0gdGlsaW5nX3N0YXJ0OworfQorCitpbnQgaXB2cl9y dW50aW1lX3BtX2dldChzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaW50 IHJldCA9IDA7CisJaW50IHBlbmRpbmc7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGRl diA9IGRldl9wcml2LT5kZXYtPnBsYXRmb3JtZGV2OworCUJVR19PTighcGxhdGRldik7CisJQlVH X09OKGF0b21pY19yZWFkKCZkZXZfcHJpdi0+cGVuZGluZ19ldmVudHMpIDwgMCk7CisJaWYgKChw ZW5kaW5nID0gYXRvbWljX2luY19yZXR1cm4oJmRldl9wcml2LT5wZW5kaW5nX2V2ZW50cykpID09 IDEpIHsKKwkJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYygmcGxhdGRldi0+ZGV2KTsKKwkJaWYg KHJldCA8IDApIHsKKwkJCUlQVlJfRVJST1IoInBtX3J1bnRpbWVfZ2V0X3N5bmMgcmV0dXJucyAl ZFxuIiwgcmV0KTsKKwkJCXBlbmRpbmcgPSBhdG9taWNfZGVjX3JldHVybigmZGV2X3ByaXYtPnBl bmRpbmdfZXZlbnRzKTsKKwkJfQorCX0KKwl0cmFjZV9pcHZyX2dldF9wb3dlcihhdG9taWNfcmVh ZCgmcGxhdGRldi0+ZGV2LnBvd2VyLnVzYWdlX2NvdW50KSwKKwkJcGVuZGluZyk7CisJcmV0dXJu IHJldDsKK30KKworaW50IGlwdnJfcnVudGltZV9wbV9wdXQoc3RydWN0IGRybV9pcHZyX3ByaXZh dGUgKmRldl9wcml2LCBib29sIGFzeW5jKQoreworCWludCByZXQgPSAwOworCWludCBwZW5kaW5n OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRkZXYgPSBkZXZfcHJpdi0+ZGV2LT5wbGF0 Zm9ybWRldjsKKwlCVUdfT04oIXBsYXRkZXYpOworCUJVR19PTihhdG9taWNfcmVhZCgmZGV2X3By aXYtPnBlbmRpbmdfZXZlbnRzKSA8PSAwKTsKKwlpZiAoKHBlbmRpbmcgPSBhdG9taWNfZGVjX3Jl dHVybigmZGV2X3ByaXYtPnBlbmRpbmdfZXZlbnRzKSkgPT0gMCkgeworCQlpZiAoYXN5bmMpCisJ CQlyZXQgPSBwbV9ydW50aW1lX3B1dCgmcGxhdGRldi0+ZGV2KTsKKwkJZWxzZQorCQkJcmV0ID0g cG1fcnVudGltZV9wdXRfc3luYygmcGxhdGRldi0+ZGV2KTsKKwkJaWYgKHJldCA8IDApCisJCQlJ UFZSX0VSUk9SKCJwbV9ydW50aW1lX3B1dCByZXR1cm5zICVkXG4iLCByZXQpOworCX0KKwl0cmFj ZV9pcHZyX3B1dF9wb3dlcihhdG9taWNfcmVhZCgmcGxhdGRldi0+ZGV2LnBvd2VyLnVzYWdlX2Nv dW50KSwKKwkJcGVuZGluZyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGlwdnJfcnVudGltZV9w bV9wdXRfYWxsKHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiwgYm9vbCBhc3luYykK K3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0ZGV2ID0gZGV2 X3ByaXYtPmRldi0+cGxhdGZvcm1kZXY7CisJQlVHX09OKCFwbGF0ZGV2KTsKKwlpZiAoYXRvbWlj X3JlYWQoJmRldl9wcml2LT5wZW5kaW5nX2V2ZW50cykgPiAwKSB7CisJCWF0b21pY19zZXQoJmRl dl9wcml2LT5wZW5kaW5nX2V2ZW50cywgMCk7CisJCWlmIChhc3luYykKKwkJCXJldCA9IHBtX3J1 bnRpbWVfcHV0KCZwbGF0ZGV2LT5kZXYpOworCQllbHNlCisJCQlyZXQgPSBwbV9ydW50aW1lX3B1 dF9zeW5jKCZwbGF0ZGV2LT5kZXYpOworCQlpZiAocmV0IDwgMCkKKwkJCUlQVlJfRVJST1IoInBt X3J1bnRpbWVfcHV0IHJldHVybnMgJWRcbiIsIHJldCk7CisJfQorCXRyYWNlX2lwdnJfcHV0X3Bv d2VyKGF0b21pY19yZWFkKCZwbGF0ZGV2LT5kZXYucG93ZXIudXNhZ2VfY291bnQpLAorCQkwKTsK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlwdnJfZHJtX3VubG9hZChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRl di0+ZGV2X3ByaXZhdGU7CisJSVBWUl9ERUJVR19FTlRSWSgiZW50ZXJlZC4iKTsKKwlCVUdfT04o IWRldi0+cGxhdGZvcm1kZXYpOworCisJaWYgKGRldl9wcml2KSB7CisJCWlmIChkZXZfcHJpdi0+ aXB2cl9ib19zbGFiKQorCQkJa21lbV9jYWNoZV9kZXN0cm95KGRldl9wcml2LT5pcHZyX2JvX3Ns YWIpOworCQlpcHZyX2ZlbmNlX2RyaXZlcl9maW5pKGRldl9wcml2KTsKKworCQlpZiAoV0FSTl9P TihpcHZyX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KSA8IDApKQorCQkJSVBWUl9ERUJVR19XQVJO KCJFcnJvciBnZXR0aW5nIGlwdnIgcG93ZXJcbiIpOworCQllbHNlIHsKKwkJCXZlZF9jb3JlX2Rl aW5pdChkZXZfcHJpdik7CisJCQlpZiAoV0FSTl9PTihpcHZyX3J1bnRpbWVfcG1fcHV0X2FsbChk ZXZfcHJpdiwgZmFsc2UpIDwgMCkpCisJCQkJSVBWUl9ERUJVR19XQVJOKCJFcnJvciBnZXR0aW5n IGlwdnIgcG93ZXJcbiIpOworCQl9CisJCWlmIChkZXZfcHJpdi0+dmFsaWRhdGVfY3R4LmJ1ZmZl cnMpCisJCQl2ZnJlZShkZXZfcHJpdi0+dmFsaWRhdGVfY3R4LmJ1ZmZlcnMpOworCisJCWlmIChk ZXZfcHJpdi0+bW11KSB7CisJCQlpcHZyX21tdV9kcml2ZXJfdGFrZWRvd24oZGV2X3ByaXYtPm1t dSk7CisJCQlkZXZfcHJpdi0+bW11ID0gTlVMTDsKKwkJfQorCisJCWlmIChkZXZfcHJpdi0+cmVn X2Jhc2UpIHsKKwkJCWlvdW5tYXAoZGV2X3ByaXYtPnJlZ19iYXNlKTsKKwkJCWRldl9wcml2LT5y ZWdfYmFzZSA9IE5VTEw7CisJCX0KKworCQlsaXN0X2RlbCgmZGV2X3ByaXYtPmRlZmF1bHRfY3R4 LmhlYWQpOworCQlpZHJfcmVtb3ZlKCZkZXZfcHJpdi0+aXB2cl9jdHhfaWRyLCBkZXZfcHJpdi0+ ZGVmYXVsdF9jdHguY3R4X2lkKTsKKwkJa2ZyZWUoZGV2X3ByaXYpOworCisJfQorCXBtX3J1bnRp bWVfZGlzYWJsZSgmZGV2LT5wbGF0Zm9ybWRldi0+ZGV2KTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IGlwdnJfZHJtX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQg bG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXY7CisJdTMy IGN0eF9pZDsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlc19tbWlvOworCXZv aWQgX19pb21lbSogbW1pb19zdGFydDsKKworCWlmICghZGV2LT5wbGF0Zm9ybWRldikKKwkJcmV0 dXJuIC1FTk9ERVY7CisKKwlkZXZfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXZfcHJpdiksIEdG UF9LRVJORUwpOworCWlmIChkZXZfcHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CWRldi0+ZGV2X3ByaXZhdGUgPSBkZXZfcHJpdjsKKwlkZXZfcHJpdi0+ZGV2ID0gZGV2OworCisJ SU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT52YWxpZGF0ZV9jdHgudmFsaWRhdGVfbGlzdCk7CisK KwlkZXZfcHJpdi0+cGNpX3Jvb3QgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdCgwLCBQQ0lfREVWRk4o MCwgMCkpOworCWlmICghZGV2X3ByaXYtPnBjaV9yb290KSB7CisJCWtmcmVlKGRldl9wcml2KTsK KwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGV2LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKGRl di0+cGxhdGZvcm1kZXYsIDApOworCWlmIChkZXYtPmlycSA8IDApIHsKKwkJa2ZyZWUoZGV2X3By aXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXNfbW1pbyA9IHBsYXRmb3JtX2dldF9y ZXNvdXJjZShkZXYtPnBsYXRmb3JtZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXNf bW1pbykgeworCQlrZnJlZShkZXZfcHJpdik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJbW1p b19zdGFydCA9IGlvcmVtYXBfbm9jYWNoZShyZXNfbW1pby0+c3RhcnQsCisJCQkJCXJlc19tbWlv LT5lbmQgLSByZXNfbW1pby0+c3RhcnQpOworCWlmICghbW1pb19zdGFydCkgeworCQlrZnJlZShk ZXZfcHJpdik7CisJCXJldHVybiAtRUFDQ0VTOworCX0KKworCWRldl9wcml2LT5yZWdfYmFzZSA9 IG1taW9fc3RhcnQ7CisJSVBWUl9ERUJVR19WRUQoInJlZ19iYXNlIGlzICVwIC0gMHglcC5cbiIs CisJCWRldl9wcml2LT5yZWdfYmFzZSwKKwkJZGV2X3ByaXYtPnJlZ19iYXNlICsgKHJlc19tbWlv LT5lbmQgLSByZXNfbW1pby0+c3RhcnQpKTsKKworCWF0b21pY19zZXQoJmRldl9wcml2LT5wZW5k aW5nX2V2ZW50cywgMCk7CisJcG1fcnVudGltZV9lbmFibGUoJmRldi0+cGxhdGZvcm1kZXYtPmRl dik7CisJaWYgKFdBUk5fT04oaXB2cl9ydW50aW1lX3BtX2dldChkZXZfcHJpdikgPCAwKSkgewor CQlJUFZSX0VSUk9SKCJFcnJvciBnZXR0aW5nIGlwdnIgcG93ZXJcbiIpOworCQlyZXQgPSAtRUJV U1k7CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwlJUFZSX0RFQlVHX0lOSVQoIk1TVkRYX0NPUkVf UkVWX09GRlNFVCBieSByZWFkbCBpcyAweCV4LlxuIiwKKwkJcmVhZGwoZGV2X3ByaXYtPnJlZ19i YXNlICsgMHg2NDApKTsKKwlJUFZSX0RFQlVHX0lOSVQoIk1TVkRYX0NPUkVfUkVWX09GRlNFVCBi eSBWRURfUkVHX1JFQUQzMiBpcyAweCV4LlxuIiwKKwkJSVBWUl9SRUdfUkVBRDMyKE1TVkRYX0NP UkVfUkVWX09GRlNFVCkpOworCisJLyogbW11IGluaXQgKi8KKwlkZXZfcHJpdi0+bW11ID0gaXB2 cl9tbXVfZHJpdmVyX2luaXQoTlVMTCwgMCwgZGV2X3ByaXYpOworCWlmICghZGV2X3ByaXYtPm1t dSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwlpcHZyX21tdV9z ZXRfcGRfY29udGV4dChpcHZyX21tdV9nZXRfZGVmYXVsdF9wZChkZXZfcHJpdi0+bW11KSwgMCk7 CisKKwkvKgorCSAqIEluaXRpYWxpemUgc2VxdWVuY2UgbnVtYmVycyBmb3IgdGhlIGRpZmZlcmVu dCBjb21tYW5kCisJICogc3VibWlzc2lvbiBtZWNoYW5pc21zLgorCSAqLworCWRldl9wcml2LT5s YXN0X3NlcSA9IDE7CisKKwlpcHZyX2dlbV9pbml0KGRldik7CisKKwlpcHZyX2dlbV9zZXR1cF9t bXUoZGV2LAorCQlJUFZSX01FTV9NTVVfTElORUFSX1NUQVJULAorCQlJUFZSX01FTV9NTVVfTElO RUFSX0VORCwKKwkJSVBWUl9NRU1fTU1VX1RJTElOR19TVEFSVCwKKwkJSVBWUl9NRU1fTU1VX1RJ TElOR19FTkQpOworCisJdmVkX2NvcmVfaW5pdChkZXZfcHJpdik7CisKKwlpZiAoV0FSTl9PTihp cHZyX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2LCBmYWxzZSkgPCAwKSkKKwkJSVBWUl9ERUJVR19X QVJOKCJFcnJvciBwdXR0aW5nIGlwdnIgcG93ZXJcbiIpOworCisJZGV2X3ByaXYtPnZlZF9wcml2 YXRlLT52ZWRfbmVlZHNfcmVzZXQgPSAxOworCisJaXB2cl9mZW5jZV9kcml2ZXJfaW5pdChkZXZf cHJpdik7CisKKwlkZXZfcHJpdi0+dmFsaWRhdGVfY3R4LmJ1ZmZlcnMgPQorCQl2bWFsbG9jKElQ VlJfTlVNX1ZBTElEQVRFX0JVRkZFUlMgKgorCQkJc2l6ZW9mKHN0cnVjdCBpcHZyX3ZhbGlkYXRl X2J1ZmZlcikpOworCWlmICghZGV2X3ByaXYtPnZhbGlkYXRlX2N0eC5idWZmZXJzKSB7CisJCXJl dCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwkvKiBpcHZyIGNvbnRleHQgaW5p dGlhbGl6YXRpb24gKi8KKwlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPmlwdnJfY3R4X2xpc3Qp OworCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+aXB2cl9jdHhfbG9jayk7CisJaWRyX2luaXQo JmRldl9wcml2LT5pcHZyX2N0eF9pZHIpOworCS8qIGRlZmF1bHQgaXB2ciBjb250ZXh0IGlzIHVz ZWQgZm9yIHNjYWxpbmcsIHJvdGF0aW9uIGNhc2UgKi8KKwljdHhfaWQgPSBpZHJfYWxsb2MoJmRl dl9wcml2LT5pcHZyX2N0eF9pZHIsICZkZXZfcHJpdi0+ZGVmYXVsdF9jdHgsCisJCQkgICBJUFZS X01JTl9DT05URVhUX0lELCBJUFZSX01BWF9DT05URVhUX0lELAorCQkJICAgR0ZQX0tFUk5FTCk7 CisJaWYgKGN0eF9pZCA8IDApIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJCWdvdG8gb3V0X2VycjsK Kwl9CisJZGV2X3ByaXYtPmRlZmF1bHRfY3R4LmN0eF9pZCA9IGN0eF9pZDsKKwlJTklUX0xJU1Rf SEVBRCgmZGV2X3ByaXYtPmRlZmF1bHRfY3R4LmhlYWQpOworCWRldl9wcml2LT5kZWZhdWx0X2N0 eC5jdHhfdHlwZSA9IDA7CisJZGV2X3ByaXYtPmRlZmF1bHRfY3R4LmlwdnJfZnByaXYgPSBOVUxM OworCisJLyogZG9uJ3QgbmVlZCBwcm90ZWN0IHdpdGggc3BpbmxvY2sgZHVyaW5nIG1vZHVsZSBs b2FkIHN0YWdlICovCisJbGlzdF9hZGQoJmRldl9wcml2LT5kZWZhdWx0X2N0eC5oZWFkLCAmZGV2 X3ByaXYtPmlwdnJfY3R4X2xpc3QpOworCWRldl9wcml2LT5kZWZhdWx0X2N0eC50aWxpbmdfc2No ZW1lID0gMDsKKwlkZXZfcHJpdi0+ZGVmYXVsdF9jdHgudGlsaW5nX3N0cmlkZSA9IDA7CisKKwly ZXR1cm4gMDsKK291dF9lcnI6CisJaXB2cl9kcm1fdW5sb2FkKGRldik7CisJcmV0dXJuIHJldDsK K30KKworLyoKKyAqIFRoZSAub3BlbigpIG1ldGhvZCBpcyBjYWxsZWQgZXZlcnkgdGltZSB0aGUg ZGV2aWNlIGlzIG9wZW5lZCBieSBhbgorICogYXBwbGljYXRpb24uIERyaXZlcnMgY2FuIGFsbG9j YXRlIHBlci1maWxlIHByaXZhdGUgZGF0YSBpbiB0aGlzIG1ldGhvZCBhbmQKKyAqIHN0b3JlIHRo ZW0gaW4gdGhlIHN0cnVjdCBkcm1fZmlsZTo6ZHJpdmVyX3ByaXYgZmllbGQuIE5vdGUgdGhhdCB0 aGUgLm9wZW4oKQorICogbWV0aG9kIGlzIGNhbGxlZCBiZWZvcmUgLmZpcnN0b3BlbigpLgorICov CitzdGF0aWMgaW50CitpcHZyX2RybV9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVj dCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faXB2cl9maWxlX3ByaXZhdGUg KmlwdnJfZnA7CisJSVBWUl9ERUJVR19FTlRSWSgiZW50ZXJcbiIpOworCisJaXB2cl9mcCA9IGt6 YWxsb2Moc2l6ZW9mKCppcHZyX2ZwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KGlwdnJf ZnAgPT0gTlVMTCkpCisJCXJldHVybiAtRU5PTUVNOworCisJZmlsZV9wcml2LT5kcml2ZXJfcHJp diA9IGlwdnJfZnA7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBjbG9zZSBvcGVyYXRp b24gaXMgc3BsaXQgaW50byAucHJlY2xvc2UoKSBhbmQgLnBvc3RjbG9zZSgpIG1ldGhvZHMuCisg KiBTaW5jZSAucG9zdGNsb3NlKCkgaXMgZGVwcmVjYXRlZCwgYWxsIHJlc291cmNlIGRlc3RydWN0 aW9uIHJlbGF0ZWQgdG8gZmlsZQorICogaGFuZGxlIGFyZSBub3cgZG9uZSBpbiAucHJlY2xvc2Uo KSBtZXRob2QuCisgKi8KK3N0YXRpYyB2b2lkCitpcHZyX2RybV9wcmVjbG9zZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwkvKiBpZiB1c2Vy IGRpZG4ndCBkZXN0b3J5IGN0eCBleHBsaWNpdGx5LCByZW1vdmUgY3R4IGhlcmUgKi8KKwlzdHJ1 Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXY7CisJc3RydWN0IGRybV9pcHZyX2ZpbGVfcHJp dmF0ZSAqaXB2cl9mcHJpdjsKKwlzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2OworCXN0cnVj dCBpcHZyX2NvbnRleHQgKmlwdnJfY3R4ICA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxh Z3M7CisKKwlJUFZSX0RFQlVHX0VOVFJZKCJlbnRlclxuIik7CisJZGV2X3ByaXYgPSBkZXYtPmRl dl9wcml2YXRlOworCWlwdnJfZnByaXYgPSBmaWxlX3ByaXYtPmRyaXZlcl9wcml2OworCXZlZF9w cml2ID0gZGV2X3ByaXYtPnZlZF9wcml2YXRlOworCisJaWYgKGlwdnJfZnByaXYtPmN0eF9pZCA9 PSBJUFZSX0NPTlRFWFRfSU5WQUxJRF9JRCkKKwkJcmV0dXJuOworCWlwdnJfY3R4ID0gKHN0cnVj dCBpcHZyX2NvbnRleHQgKikKKwkJCWlkcl9maW5kKCZkZXZfcHJpdi0+aXB2cl9jdHhfaWRyLCBp cHZyX2Zwcml2LT5jdHhfaWQpOworCWlmICghaXB2cl9jdHggIHx8IChpcHZyX2N0eC0+aXB2cl9m cHJpdiAhPSBpcHZyX2Zwcml2KSkgeworCQlJUFZSX0RFQlVHX0dFTkVSQUwoImN0eCBmb3IgaWQg JWQgaGFzIGFscmVhZHkgZGVzdHJveWVkXG4iLAorCQkJCWlwdnJfZnByaXYtPmN0eF9pZCk7CisJ CXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBmaXhtZTogcmVtb3ZlIHRoaXMgd29yay1hcm91bmQg KFdBIHRoZSBpc3N1ZSB0aGF0IGNhbGxpbmcKKwkgKiBjbG9zZSgpIHdpdGggcXVldWVkIGNtZCBt aWdodCBjYXVzZSBzdGF0ZSBtYWNoaW5lIGlzc3VlKS4KKwkgKiB3ZSBzaG91bGQgd2FpdCBmb3Ig b25seSB0aGUgY21kcyBzZW50IGZyb20gY29udGV4dHMgaW4gdGhpcyBmaWxlCisJICogaW5zdGVh ZCBvZiBhbGwgY21kcworCSAqLworCWlwdnJfZmVuY2Vfd2FpdF9lbXB0eV9sb2NrZWQoZGV2X3By aXYpOworCisJSVBWUl9ERUJVR19QTSgiVmlkZW86cmVtb3ZlIGNvbnRleHQgdHlwZSAweCV4XG4i LCBpcHZyX2N0eC0+Y3R4X3R5cGUpOworCW11dGV4X2xvY2soJnZlZF9wcml2LT52ZWRfbXV0ZXgp OworCWlmICh2ZWRfcHJpdi0+aXB2cl9jdHggPT0gaXB2cl9jdHggKQorCQl2ZWRfcHJpdi0+aXB2 cl9jdHggPSBOVUxMOworCW11dGV4X3VubG9jaygmdmVkX3ByaXYtPnZlZF9tdXRleCk7CisKKwlz cGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlwdnJfY3R4X2xvY2ssIGlycV9mbGFncyk7CisJ bGlzdF9kZWwoJmlwdnJfY3R4LT5oZWFkKTsKKwlpcHZyX2Zwcml2LT5jdHhfaWQgPSBJUFZSX0NP TlRFWFRfSU5WQUxJRF9JRDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+aXB2 cl9jdHhfbG9jaywgaXJxX2ZsYWdzKTsKKworCWlkcl9yZW1vdmUoJmRldl9wcml2LT5pcHZyX2N0 eF9pZHIsIGlwdnJfY3R4LT5jdHhfaWQpOworCisJa2ZyZWUoaXB2cl9jdHggKTsKKwlrZnJlZShp cHZyX2Zwcml2KTsKK30KKworc3RhdGljIGlycXJldHVybl90IGlwdnJfaXJxX2hhbmRsZXIoaW50 IGlycSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAoc3RydWN0IGRy bV9kZXZpY2UgKikgYXJnOworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRl di0+ZGV2X3ByaXZhdGU7CisJV0FSTl9PTih2ZWRfaXJxX2hhbmRsZXIoZGV2X3ByaXYtPnZlZF9w cml2YXRlKSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IGZpbGVfb3BlcmF0aW9ucyBpcHZyX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJ Lm9wZW4gPSBkcm1fb3BlbiwKKwkucmVsZWFzZSA9IGRybV9yZWxlYXNlLAorCS51bmxvY2tlZF9p b2N0bCA9IGRybV9pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCA9 IGRybV9pb2N0bCwKKyNlbmRpZgorCS5tbWFwID0gZHJtX2dlbV9tbWFwLAorfTsKKworc3RhdGlj IGludCBpcHZyX2RybV9mcmVlemUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0 OworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7 CisJSVBWUl9ERUJVR19FTlRSWSgiZW50ZXJcbiIpOworCisJcmV0ID0gdmVkX2NoZWNrX2lkbGUo ZGV2X3ByaXYtPnZlZF9wcml2YXRlKTsKKwlpZiAocmV0KSB7CisJCUlQVlJfREVCVUdfUE0oIlZF RCBjaGVjayBpZGxlIGZhaWw6ICVkLCBza2lwIGZyZWV6aW5nXG4iLCByZXQpOworCQkvKioKKwkJ ICogZml4bWU6IGJldHRlciB0byBzY2hlZHVsZSBhIHdvcmtxdWV1ZSBmb3IgZGVsYXllZCBwb3dl ci1vZmY/CisJCSAqLworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZGV2LT5pcnFfZW5hYmxlZCkg eworCQlyZXQgPSBkcm1faXJxX3VuaW5zdGFsbChkZXYpOworCQlpZiAocmV0KSB7CisJCQlJUFZS X0VSUk9SKCJGYWlsZWQgdG8gdW5pbnN0YWxsIGRybSBpcnEgaGFuZGxlcjogJWRcbiIsIHJldCk7 CisJCX0KKwl9CisKKwlpZiAoaXNfdmVkX29uKGRldl9wcml2KSkgeworCQlpZiAoIXZlZF9wb3dl cl9vZmYoZGV2X3ByaXYpKSB7CisJCQlJUFZSX0VSUk9SKCJGYWlsZWQgdG8gcG93ZXIgb2ZmIFZF RFxuIik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQlJUFZSX0RFQlVHX1BNKCJTdWNjZXNz ZnVsbHkgcG93ZXJlZCBvZmZcbiIpOworCX0gZWxzZSB7CisJCUlQVlJfREVCVUdfUE0oIlNraXBl ZCBwb3dlci1vZmYgc2luY2UgYWxyZWFkeSBwb3dlcmVkIG9mZlxuIik7CisJfQorCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgaXB2cl9kcm1fdGhhdyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQoreworCWludCByZXQ7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2 LT5kZXZfcHJpdmF0ZTsKKwlJUFZSX0RFQlVHX0VOVFJZKCJlbnRlclxuIik7CisJaWYgKCFpc192 ZWRfb24oZGV2X3ByaXYpKSB7CisJCWlmICghdmVkX3Bvd2VyX29uKGRldl9wcml2KSkgeworCQkJ SVBWUl9FUlJPUigiRmFpbGVkIHRvIHBvd2VyIG9uIFZFRFxuIik7CisJCQlyZXR1cm4gLUVGQVVM VDsKKwkJfQorCQlJUFZSX0RFQlVHX1BNKCJTdWNjZXNzZnVsbHkgcG93ZXJlZCBvblxuIik7CisJ fSBlbHNlIHsKKwkJSVBWUl9ERUJVR19QTSgiU2tpcGVkIHBvd2VyLW9uIHNpbmNlIGFscmVhZHkg cG93ZXJlZCBvblxuIik7CisJfQorCisJaWYgKCFkZXYtPmlycV9lbmFibGVkKSB7CisJCXJldCA9 IGRybV9pcnFfaW5zdGFsbChkZXYsIGRldi0+aXJxKTsKKwkJaWYgKHJldCkgeworCQkJSVBWUl9F UlJPUigiRmFpbGVkIHRvIGluc3RhbGwgZHJtIGlycSBoYW5kbGVyOiAlZFxuIiwgcmV0KTsKKwkJ fQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlwdnJfcG1fc3VzcGVuZChzdHJ1 Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1kZXYg PSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9 IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBsYXRmb3JtZGV2KTsKKwlJUFZSX0RFQlVHX1BNKCJQTSBz dXNwZW5kIGNhbGxlZFxuIik7CisJcmV0dXJuIGRybV9kZXY/IGlwdnJfZHJtX2ZyZWV6ZShkcm1f ZGV2KTogMDsKK30KK3N0YXRpYyBpbnQgaXB2cl9wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2 KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtZGV2ID0gdG9fcGxhdGZvcm1f ZGV2aWNlKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBwbGF0Zm9ybV9nZXRf ZHJ2ZGF0YShwbGF0Zm9ybWRldik7CisJSVBWUl9ERUJVR19QTSgiUE0gcmVzdW1lIGNhbGxlZFxu Iik7CisJcmV0dXJuIGRybV9kZXY/IGlwdnJfZHJtX3RoYXcoZHJtX2Rldik6IDA7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaXB2cl9nZW1fdm1fb3BzID0g eworCS5mYXVsdCA9IGlwdnJfZ2VtX2ZhdWx0LAorCS5vcGVuID0gZHJtX2dlbV92bV9vcGVuLAor CS5jbG9zZSA9IGRybV9nZW1fdm1fY2xvc2UsCit9OworCitzdGF0aWMgc3RydWN0IGRybV9kcml2 ZXIgaXB2cl9kcm1fZHJpdmVyID0geworCS5kcml2ZXJfZmVhdHVyZXMgPSBEUklWRVJfSEFWRV9J UlEgfCBEUklWRVJfR0VNIHwgRFJJVkVSX1BSSU1FLAorCS5sb2FkID0gaXB2cl9kcm1fbG9hZCwK KwkudW5sb2FkID0gaXB2cl9kcm1fdW5sb2FkLAorCS5vcGVuID0gaXB2cl9kcm1fb3BlbiwKKwku cHJlY2xvc2UgPSBpcHZyX2RybV9wcmVjbG9zZSwKKwkuaXJxX2hhbmRsZXIgPSBpcHZyX2lycV9o YW5kbGVyLAorCS5nZW1fZnJlZV9vYmplY3QgPSBpcHZyX2dlbV9mcmVlX29iamVjdCwKKwkucHJp bWVfaGFuZGxlX3RvX2ZkID0gZHJtX2dlbV9wcmltZV9oYW5kbGVfdG9fZmQsCisJLnByaW1lX2Zk X3RvX2hhbmRsZSA9IGRybV9nZW1fcHJpbWVfZmRfdG9faGFuZGxlLAorCS5nZW1fcHJpbWVfZXhw b3J0CT0gZHJtX2dlbV9wcmltZV9leHBvcnQsCisJLmdlbV9wcmltZV9pbXBvcnQJPSBkcm1fZ2Vt X3ByaW1lX2ltcG9ydCwKKwkuZ2VtX3ByaW1lX2dldF9zZ190YWJsZSA9IGlwdnJfZ2VtX3ByaW1l X2dldF9zZ190YWJsZSwKKwkuZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSA9IGlwdnJfZ2VtX3By aW1lX2ltcG9ydF9zZ190YWJsZSwKKwkuZ2VtX3ByaW1lX3BpbgkJPSBpcHZyX2dlbV9wcmltZV9w aW4sCisJLmdlbV9wcmltZV91bnBpbgk9IGlwdnJfZ2VtX3ByaW1lX3VucGluLAorI2lmZGVmIENP TkZJR19ERUJVR19GUworCS5kZWJ1Z2ZzX2luaXQgPSBpcHZyX2RlYnVnZnNfaW5pdCwKKwkuZGVi dWdmc19jbGVhbnVwID0gaXB2cl9kZWJ1Z2ZzX2NsZWFudXAsCisjZW5kaWYKKwkuZ2VtX3ZtX29w cyA9ICZpcHZyX2dlbV92bV9vcHMsCisJLmlvY3RscyA9IGlwdnJfZ2VtX2lvY3RscywKKwkubnVt X2lvY3RscyA9IEFSUkFZX1NJWkUoaXB2cl9nZW1faW9jdGxzKSwKKwkuZm9wcyA9ICZpcHZyX2Zv cHMsCisJLm5hbWUgPSBJUFZSX0RSSVZFUl9OQU1FLAorCS5kZXNjID0gSVBWUl9EUklWRVJfREVT QywKKwkuZGF0ZSA9IElQVlJfRFJJVkVSX0RBVEUsCisJLm1ham9yID0gSVBWUl9EUklWRVJfTUFK T1IsCisJLm1pbm9yID0gSVBWUl9EUklWRVJfTUlOT1IsCisJLnBhdGNobGV2ZWwgPSBJUFZSX0RS SVZFUl9QQVRDSExFVkVMLAorfTsKKworc3RhdGljIGludCBpcHZyX3BsYXRfcHJvYmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2 OworCWludCByZXQ7CisKKwlkcm1fZGV2ID0gZHJtX2Rldl9hbGxvYygmaXB2cl9kcm1fZHJpdmVy LCAmZGV2aWNlLT5kZXYpOworCWlmICghZHJtX2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlk cm1fZGV2LT5wbGF0Zm9ybWRldiA9IGRldmljZTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZp Y2UsIGRybV9kZXYpOworCXJldCA9IGRybV9kZXZfcmVnaXN0ZXIoZHJtX2RldiwgMCk7CisJaWYg KHJldCkKKwkJZ290byBlcnJfZnJlZTsKKworCURSTV9JTkZPKCJJbml0aWFsaXplZCBJUFZSIG9u IG1pbm9yICVkXG4iLCBkcm1fZGV2LT5wcmltYXJ5LT5pbmRleCk7CisKKwlyZXR1cm4gMDsKK2Vy cl9mcmVlOgorCWRybV9kZXZfdW5yZWYoZHJtX2Rldik7CisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGludCBpcHZyX3BsYXRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSkK K3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRl dmljZSk7CisJaWYgKGRybV9kZXYpIHsKKwkJZHJtX2Rldl91bnJlZ2lzdGVyKGRybV9kZXYpOwor CQlkcm1fZGV2X3VucmVmKGRybV9kZXYpOworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZpY2Us IE5VTEwpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIGlw dnJfcG1fb3BzID0geworCS5zdXNwZW5kID0gaXB2cl9wbV9zdXNwZW5kLAorCS5yZXN1bWUgPSBp cHZyX3BtX3Jlc3VtZSwKKwkuZnJlZXplID0gaXB2cl9wbV9zdXNwZW5kLAorCS50aGF3ID0gaXB2 cl9wbV9yZXN1bWUsCisJLnBvd2Vyb2ZmID0gaXB2cl9wbV9zdXNwZW5kLAorCS5yZXN0b3JlID0g aXB2cl9wbV9yZXN1bWUsCisjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKwkucnVudGltZV9zdXNw ZW5kID0gaXB2cl9wbV9zdXNwZW5kLAorCS5ydW50aW1lX3Jlc3VtZSA9IGlwdnJfcG1fcmVzdW1l LAorI2VuZGlmCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpcHZyX3Zsdl9w bGF0X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJpcHZyLXZlZC12bHYiLAor CQkub3duZXIgPSBUSElTX01PRFVMRSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtID0gJmlwdnJf cG1fb3BzLAorI2VuZGlmCisJfSwKKwkucHJvYmUgPSBpcHZyX3BsYXRfcHJvYmUsCisJLnJlbW92 ZSA9IGlwdnJfcGxhdF9yZW1vdmUsCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGlwdnJf dmx2X3BsYXRfZHJpdmVyKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZy X2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3Yzc4NzEKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2Rydi5oCkBAIC0wLDAgKzEs Mjk0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlwdnJfZHJ2Lmg6IElQVlIgZHJpdmVyIGNv bW1vbiBoZWFkZXIgZmlsZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3Jh dGlvbiwgSGlsbHNib3JvLCBPUiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisg KiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJD SEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAq CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUg dG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0 IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9y czoKKyAqICAgIEZlaSBKaWFuZyA8ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqICAgIFlhbyBDaGVu ZyA8eWFvLmNoZW5nQGludGVsLmNvbT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5k ZWYgX0lQVlJfRFJWX0hfCisjZGVmaW5lIF9JUFZSX0RSVl9IXworI2luY2x1ZGUgImRybVAuaCIK KyNpbmNsdWRlICJpcHZyX2RybS5oIgorI2luY2x1ZGUgImlwdnJfbW11LmgiCisjaW5jbHVkZSA8 bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLW1hcHBpbmcuaD4KKyNpbmNsdWRl IDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KKyNpbmNsdWRl IDxsaW51eC9iYWNrbGlnaHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlbC1pb21tdS5oPgorI2lu Y2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9xb3MuaD4KKyNpbmNsdWRl IDxsaW51eC9tbXVfbm90aWZpZXIuaD4KKworI2RlZmluZSBJUFZSX0RSSVZFUl9BVVRIT1IJCSJJ bnRlbCwgSW5jLiIKKyNkZWZpbmUgSVBWUl9EUklWRVJfTkFNRQkJImlwdnIiCisjZGVmaW5lIElQ VlJfRFJJVkVSX0RFU0MJCSJQb3dlclZSIHZpZGVvIGRybSBkcml2ZXIiCisjZGVmaW5lIElQVlJf RFJJVkVSX0RBVEUJCSIyMDE0MTExMyIKKyNkZWZpbmUgSVBWUl9EUklWRVJfTUFKT1IJCTAKKyNk ZWZpbmUgSVBWUl9EUklWRVJfTUlOT1IJCTEKKyNkZWZpbmUgSVBWUl9EUklWRVJfUEFUQ0hMRVZF TAkwCisKKy8qIHJlYWQvd3JpdGUgZG9tYWlucyAqLworI2RlZmluZSBJUFZSX0dFTV9ET01BSU5f Q1BVCQkweDAwMDAwMDAxCisjZGVmaW5lIElQVlJfR0VNX0RPTUFJTl9WUFUJCTB4MDAwMDAwMDIK KworLyogY29udGV4dCBJRCBhbmQgdHlwZSAqLworI2RlZmluZSBJUFZSX0NPTlRFWFRfSU5WQUxJ RF9JRCAwCisjZGVmaW5lIElQVlJfTUlOX0NPTlRFWFRfSUQgMQorI2RlZmluZSBJUFZSX01BWF9D T05URVhUX0lEIDB4ZmYKKworLyoKKyAqRGVidWcgcHJpbnQgYml0cyBzZXR0aW5nCisgKi8KKyNk ZWZpbmUgSVBWUl9EX0dFTkVSQUwgICAoMSA8PCAwKQorI2RlZmluZSBJUFZSX0RfSU5JVCAgICAg ICgxIDw8IDEpCisjZGVmaW5lIElQVlJfRF9JUlEgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgSVBW Ul9EX0VOVFJZICAgICAoMSA8PCAzKQorI2RlZmluZSBJUFZSX0RfUE0gICAgICAgICgxIDw8IDQp CisjZGVmaW5lIElQVlJfRF9SRUcgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgSVBWUl9EX1ZFRCAg ICAgICAoMSA8PCA2KQorI2RlZmluZSBJUFZSX0RfV0FSTiAgICAgICgxIDw8IDcpCisKKyNkZWZp bmUgSVBWUl9ERUJVR19HRU5FUkFMKF9mbXQsIF9hcmcuLi4pIFwKKwlJUFZSX0RFQlVHKElQVlJf RF9HRU5FUkFMLCBfZm10LCAjI19hcmcpCisjZGVmaW5lIElQVlJfREVCVUdfSU5JVChfZm10LCBf YXJnLi4uKSBcCisJSVBWUl9ERUJVRyhJUFZSX0RfSU5JVCwgX2ZtdCwgIyNfYXJnKQorI2RlZmlu ZSBJUFZSX0RFQlVHX0lSUShfZm10LCBfYXJnLi4uKSBcCisJSVBWUl9ERUJVRyhJUFZSX0RfSVJR LCBfZm10LCAjI19hcmcpCisjZGVmaW5lIElQVlJfREVCVUdfRU5UUlkoX2ZtdCwgX2FyZy4uLikg XAorCUlQVlJfREVCVUcoSVBWUl9EX0VOVFJZLCBfZm10LCAjI19hcmcpCisjZGVmaW5lIElQVlJf REVCVUdfUE0oX2ZtdCwgX2FyZy4uLikgXAorCUlQVlJfREVCVUcoSVBWUl9EX1BNLCBfZm10LCAj I19hcmcpCisjZGVmaW5lIElQVlJfREVCVUdfUkVHKF9mbXQsIF9hcmcuLi4pIFwKKwlJUFZSX0RF QlVHKElQVlJfRF9SRUcsIF9mbXQsICMjX2FyZykKKyNkZWZpbmUgSVBWUl9ERUJVR19WRUQoX2Zt dCwgX2FyZy4uLikgXAorCUlQVlJfREVCVUcoSVBWUl9EX1ZFRCwgX2ZtdCwgIyNfYXJnKQorI2Rl ZmluZSBJUFZSX0RFQlVHX1dBUk4oX2ZtdCwgX2FyZy4uLikgXAorCUlQVlJfREVCVUcoSVBWUl9E X1dBUk4sIF9mbXQsICMjX2FyZykKKworI2RlZmluZSBJUFZSX0RFQlVHKF9mbGFnLCBfZm10LCBf YXJnLi4uKSBcCisJZG8geyBcCisJCWlmICh1bmxpa2VseSgoX2ZsYWcpICYgZHJtX2lwdnJfZGVi dWcpKSBcCisJCQlwcmludGsoS0VSTl9JTkZPIFwKKwkJCSAgICAgICAiW2lwdnI6MHglMDJ4OiVz XSAiIF9mbXQgLCBfZmxhZywgXAorCQkJICAgICAgIF9fZnVuY19fICwgIyNfYXJnKTsgXAorCX0g d2hpbGUgKDApCisKKyNkZWZpbmUgSVBWUl9FUlJPUihfZm10LCBfYXJnLi4uKSBcCisJZG8geyBc CisJCQlwcmludGsoS0VSTl9FUlIgXAorCQkJICAgICAgICJbaXB2cjpFUlJPUjolc10gIiBfZm10 LCBcCisJCQkgICAgICAgX19mdW5jX18gLCAjI19hcmcpOyBcCisJfSB3aGlsZSAoMCkKKworI2Rl ZmluZSBJUFZSX1VERUxBWSh1c2VjKSBcCisJZG8geyBcCisJCWNwdV9yZWxheCgpOyBcCisJfSB3 aGlsZSAoMCkKKworI2RlZmluZSBJUFZSX1JFR19XUklURTMyKF92YWwsIF9vZmZzKSBcCisJaW93 cml0ZTMyKF92YWwsIGRldl9wcml2LT5yZWdfYmFzZSArIChfb2ZmcykpCisjZGVmaW5lIElQVlJf UkVHX1JFQUQzMihfb2ZmcykgXAorCWlvcmVhZDMyKGRldl9wcml2LT5yZWdfYmFzZSArIChfb2Zm cykpCisKK3R5cGVkZWYgc3RydWN0IGlwdnJfdmFsaWRhdGVfYnVmZmVyIGlwdnJfdmFsaWRhdGVf YnVmZmVyX3Q7CisKKyNkZWZpbmUgdG9faXB2cl9ibyh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0 IGRybV9pcHZyX2dlbV9vYmplY3QsIGJhc2UpCisKK2V4dGVybiBpbnQgZHJtX2lwdnJfZGVidWc7 CitleHRlcm4gaW50IGRybV9pcHZyX2ZyZXE7CisKK3N0cnVjdCBpcHZyX3ZhbGlkYXRlX2NvbnRl eHQgeworCWlwdnJfdmFsaWRhdGVfYnVmZmVyX3QgKmJ1ZmZlcnM7CisJaW50IHVzZWRfYnVmZmVy czsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHZhbGlkYXRlX2xpc3Q7Cit9OworCitzdHJ1Y3QgaXB2cl9t bXVfZHJpdmVyOworc3RydWN0IGlwdnJfbW11X3BkOworCitzdHJ1Y3QgaXB2cl9nZW1fc3RhdCB7 CisJLyoqCisJICogQXJlIHdlIGluIGEgbm9uLWludGVycnVwdGlibGUgc2VjdGlvbiBvZiBjb2Rl PworCSAqLworCWJvb2wgaW50ZXJydXB0aWJsZTsKKworCS8qIGFjY291bnRpbmcsIHVzZWZ1bCBm b3IgdXNlcmxhbmQgZGVidWdnaW5nICovCisJc3BpbmxvY2tfdCBvYmplY3Rfc3RhdF9sb2NrOwor CXNpemVfdCBhbGxvY2F0ZWRfbWVtb3J5OworCWludCBhbGxvY2F0ZWRfY291bnQ7CisJc2l6ZV90 IGltcG9ydGVkX21lbW9yeTsKKwlpbnQgaW1wb3J0ZWRfY291bnQ7CisJc2l6ZV90IGV4cG9ydGVk X21lbW9yeTsKKwlpbnQgZXhwb3J0ZWRfY291bnQ7CisJc2l6ZV90IG1tdV91c2VkX3NpemU7Cit9 OworCitzdHJ1Y3QgaXB2cl9hZGRyZXNzX3NwYWNlIHsKKwlzdHJ1Y3QgZHJtX21tIGxpbmVhcl9t bTsKKwlzdHJ1Y3QgZHJtX21tIHRpbGluZ19tbTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2Owor CXVuc2lnbmVkIGxvbmcgbGluZWFyX3N0YXJ0OworCXNpemVfdCBsaW5lYXJfdG90YWw7CisJdW5z aWduZWQgbG9uZyB0aWxpbmdfc3RhcnQ7CisJc2l6ZV90IHRpbGluZ190b3RhbDsKKworCS8qIG5l ZWQgaXQgZHVyaW5nIGNsZWFyX3JhbmdlICovCisJc3RydWN0IHsKKwkJZG1hX2FkZHJfdCBhZGRy OworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl9IHNjcmF0Y2g7Cit9OworCitzdHJ1Y3QgaXB2cl9m ZW5jZV9kcml2ZXIgeworCXUxNglzeW5jX3NlcTsKKwlhdG9taWNfdCBzaWduYWxlZF9zZXE7CisJ dW5zaWduZWQgbG9uZyBsYXN0X2FjdGl2aXR5OworCWJvb2wgaW5pdGlhbGl6ZWQ7CisJc3Bpbmxv Y2tfdCBmZW5jZV9sb2NrOworfTsKKworc3RydWN0IGlwdnJfY29udGV4dCB7CisJLyogdXNlZCB0 byBsaW5rIGludG8gaXB2cl9jdHhfbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKKwl1 MzIgY3R4X2lkOworCS8qIHVzZWQgdG8gZG91YmxlIGNoZWNrIGN0eCB3aGVuIGZpbmQgd2l0aCBp ZHIsIG1heSBiZSByZW1vdmVkICovCisJc3RydWN0IGRybV9pcHZyX2ZpbGVfcHJpdmF0ZSAqaXB2 cl9mcHJpdjsgLyogRFJNIGRldmljZSBmaWxlIHBvaW50ZXIgKi8KKwl1MzIgY3R4X3R5cGU7CisK Kwl1MTYgY3VyX3NlcTsKKworCS8qIGZvciBJTUcgRERLLCBvbmx5IHVzZSB0aWxpbmcgZm9yIDJr IGFuZCA0ayBidWZmZXIgc3RyaWRlICovCisJLyoKKwkgKiBmb2xsb3dpbmcgdGlsaW5nIHN0cmlk ZXMgZm9yIFZFRCBhcmUgc3VwcG9ydGVkOgorCSAqIHN0cmlkZSAwOiA1MTIgZm9yIHNjaGVtZSAw LCAxMDI0IGZvciBzY2hlbWUgMQorCSAqIHN0cmlkZSAxOiAxMDI0IGZvciBzY2hlbWUgMCwgMjA0 OCBmb3Igc2NoZW1lIDEKKwkgKiBzdHJpZGUgMjogMjA0OCBmb3Igc2NoZW1lIDAsIDQwOTYgZm9y IHNjaGVtZSAxCisJICogc3RyaWRlIDM6IDQwOTYgZm9yIHNjaGVtZSAwCisJICovCisJdTggdGls aW5nX3N0cmlkZTsKKwkvKgorCSAqIHNjaGVtZSAwOiB0aWxlIGlzIDI1NngxNiwgd2hpbGUgbWlu aW1hbCB0aWxlIHN0cmlkZSBpcyA1MTIKKwkgKiBzY2hlbWUgMTogdGlsZSBpcyA1MTJ4OCwgd2hp bGUgbWluaW1hbCB0aWxlIHN0cmlkZSBpcyAxMDI0CisJICovCisJdTggdGlsaW5nX3NjaGVtZTsK K307CisKK3R5cGVkZWYgc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgeworCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9yb290OworCisJLyogSU1HIHZpZGVvIGNv bnRleHQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGlwdnJfY3R4X2xpc3Q7CisJc3BpbmxvY2tfdCBp cHZyX2N0eF9sb2NrOworCXN0cnVjdCBpZHIgaXB2cl9jdHhfaWRyOworCXN0cnVjdCBpcHZyX2Nv bnRleHQgZGVmYXVsdF9jdHg7CisKKwkvKiBQTSByZWxhdGVkICovCisJYXRvbWljX3QgcGVuZGlu Z19ldmVudHM7CisKKwkvKiBleGVjIHJlbGF0ZWQgKi8KKwlzdHJ1Y3QgaXB2cl92YWxpZGF0ZV9j b250ZXh0IHZhbGlkYXRlX2N0eDsKKworCS8qIElNRyBNTVUgc3BlY2lmaWMgKi8KKwlzdHJ1Y3Qg aXB2cl9tbXVfZHJpdmVyICptbXU7CisJLypzdHJ1Y3QgaXB2cl9tbXVfcGQgKnBmX3BkOyovCisJ YXRvbWljX3QgaXB2cl9tbXVfaW52YWxkYzsKKworCS8qIEdFTSBtbSByZWxhdGVkICovCisJc3Ry dWN0IGlwdnJfZ2VtX3N0YXQgaXB2cl9zdGF0OworCXN0cnVjdCBrbWVtX2NhY2hlICppcHZyX2Jv X3NsYWI7CisJc3RydWN0IGlwdnJfYWRkcmVzc19zcGFjZSBhZGRyX3NwYWNlOworCisJLyogZmVu Y2UgcmVsYXRlZCAqLworCXUzMiBsYXN0X3NlcTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBmZW5jZV9x dWV1ZTsKKwlzdHJ1Y3QgaXB2cl9mZW5jZV9kcml2ZXIgZmVuY2VfZHJ2OworCisJLyogTU1JTyB3 aW5kb3cgc2hhcmVkIGZyb20gcGFyZW50IGRldmljZSAqLworCXU4IF9faW9tZW0qIHJlZ19iYXNl OworCisJLyoKKwkgKiBWRUQgc3BlY2lmaWMKKwkgKi8KKwlzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZl ZF9wcml2YXRlOworfWRybV9pcHZyX3ByaXZhdGVfdDsKKworc3RydWN0IGRybV9pcHZyX2dlbV9v YmplY3Q7CisKKy8qIFZFRCBwcml2YXRlIHN0cnVjdHVyZSAqLworc3RydWN0IHZlZF9wcml2YXRl IHsKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXY7CisKKwkvKiB1c2VkIHRvIHJl Y29yZCBzZXEgZ290IGZyb20gaXJxIGZ3LXRvLWhvc3QgbXNnICovCisJdTE2IHZlZF9jdXJfc2Vx OworCisJLyoKKwkgKiBWRUQgUmVuZGVjIE1lbW9yeQorCSAqLworCXN0cnVjdCBkcm1faXB2cl9n ZW1fb2JqZWN0ICpjY2IwOworCXUzMiBiYXNlX2FkZHIwOworCXN0cnVjdCBkcm1faXB2cl9nZW1f b2JqZWN0ICpjY2IxOworCXUzMiBiYXNlX2FkZHIxOworCWJvb2wgcmVuZGVjX2luaXRpYWxpemVk OworCisJLyogVkVEIGZpcm13YXJlIHJlbGF0ZWQgKi8KKwlzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29i amVjdCAgKmZ3X2JvOworCXUzMiBmd19vZmZzZXQ7CisJdTMyIG10eF9tZW1fc2l6ZTsKKwlib29s IGZ3X2xvYWRlZF90b19ibzsKKwlib29sIHZlZF9md19sb2FkZWQ7CisJdm9pZCAqdmVkX2Z3X3B0 cjsKKwlzaXplX3QgdmVkX2Z3X3NpemU7CisKKwkvKgorCSAqIHZlZCBjb21tYW5kIHF1ZXVlCisJ ICovCisJc3BpbmxvY2tfdCB2ZWRfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggdmVkX211dGV4OworCXN0 cnVjdCBsaXN0X2hlYWQgdmVkX3F1ZXVlOworCS8qIGJ1c3kgbWVhbnMgY21kIHN1Ym1pdHRlZCB0 byBmdywgd2hpbGUgaXJxIGhhc24ndCBiZWVuIHJlY2VpZXZlZCAqLworCWJvb2wgdmVkX2J1c3k7 CisJdTMyIHZlZF9kYXNoX2FjY2Vzc19jdHJsOworCisJLyogZXJyb3IgY29uY2VhbG1lbnQgcmVs YXRlZCAqLworCXN0cnVjdCBkcm1fZmlsZSAqdGZpbGU7IC8qIHByb3RlY3RlZCBieSBjbWRidWZf bXV0ZXggKi8KKwlpbnQgbnVtX2NtZDsKKworCS8qIHBtIHJlbGF0ZWQgKi8KKwlpbnQgdmVkX25l ZWRzX3Jlc2V0OworCisJLyogY3VycmVudCB2ZWQgZGVjb2RlIGNvbnRleHQgKi8KKwlzdHJ1Y3Qg aXB2cl9jb250ZXh0ICppcHZyX2N0eDsKKworCXN0cnVjdCBwYWdlICptbXVfcmVjb3Zlcl9wYWdl OworfTsKKworc3RydWN0IGRybV9pcHZyX2ZpbGVfcHJpdmF0ZSB7CisJdTMyIGN0eF9pZDsKK307 CisKKy8qIGhlbHBlcnMgZm9yIHJ1bnRpbWUgcG0gKi8KK2ludCBpcHZyX3J1bnRpbWVfcG1fZ2V0 KHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdik7CitpbnQgaXB2cl9ydW50aW1lX3Bt X3B1dChzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYsIGJvb2wgYXN5bmMpOworaW50 IGlwdnJfcnVudGltZV9wbV9wdXRfYWxsKHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJp diwgYm9vbCBhc3luYyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lw dnIvaXB2cl9leGVjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2V4ZWMuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODRjZjljCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9leGVjLmMKQEAgLTAsMCArMSw2MjMgQEAKKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgorICogaXB2cl9leGVjLmM6IElQVlIgY29tbWFuZCBidWZmZXIgZXhlY3V0 aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uLCBIaWxsc2Jv cm8sIE9SLCBVU0EKKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkg aXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBv cgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRmVp IEppYW5nIDxmZWkuamlhbmdAaW50ZWwuY29tPgorICogICAgWWFvIENoZW5nIDx5YW8uY2hlbmdA aW50ZWwuY29tPgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImlwdnJfZXhl Yy5oIgorI2luY2x1ZGUgImlwdnJfZ2VtLmgiCisjaW5jbHVkZSAiaXB2cl9tbXUuaCIKKyNpbmNs dWRlICJpcHZyX2JvLmgiCisjaW5jbHVkZSAiaXB2cl9mZW5jZS5oIgorI2luY2x1ZGUgImlwdnJf dHJhY2UuaCIKKyNpbmNsdWRlICJ2ZWRfZncuaCIKKyNpbmNsdWRlICJ2ZWRfbXNnLmgiCisjaW5j bHVkZSAidmVkX3JlZy5oIgorI2luY2x1ZGUgInZlZF9wbS5oIgorI2luY2x1ZGUgInZlZF9jbWQu aCIKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5j bHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCitzdGF0aWMgaW5saW5lIGJvb2wgaXB2cl9ib19p c19yZXNlcnZlZChzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKQoreworCXJldHVybiBh dG9taWNfcmVhZCgmb2JqLT5yZXNlcnZlZCk7Cit9CisKK3N0YXRpYyBpbnQKK2lwdnJfYm9fd2Fp dF91bnJlc2VydmVkKHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmosIGJvb2wgaW50ZXJy dXB0aWJsZSkKK3sKKwlpZiAoaW50ZXJydXB0aWJsZSkgeworCQlyZXR1cm4gd2FpdF9ldmVudF9p bnRlcnJ1cHRpYmxlKG9iai0+ZXZlbnRfcXVldWUsCisJCQkJCSAgICAgICAhaXB2cl9ib19pc19y ZXNlcnZlZChvYmopKTsKKwl9IGVsc2UgeworCQl3YWl0X2V2ZW50KG9iai0+ZXZlbnRfcXVldWUs ICFpcHZyX2JvX2lzX3Jlc2VydmVkKG9iaikpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qKgor ICogaXB2cl9ib19yZXNlcnZlIC0gcmVzZXJ2ZSB0aGUgZ2l2ZW4gYm8KKyAqCisgKiBAb2JqOiAg ICAgVGhlIGJ1ZmZlciBvYmplY3QgdG8gcmVzZXJ2ZS4KKyAqIEBpbnRlcnJ1cHRpYmxlOiAgICAg d2hldGhlciB0aGUgd2FpdGluZyBpcyBpbnRlcnJ1cHRpYmxlIG9yIG5vdC4KKyAqIEBub193YWl0 OiAgICBmbGFnIHRvIGluZGljYXRlIHJldHVybmluZyBpbW1lZGlhdGVseQorICoKKyAqIFJldHVy bnM6IDAgaWYgc3VjY2Vzc2Z1bCwgZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqLworaW50IGlwdnJf Ym9fcmVzZXJ2ZShzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqLAorCQkJYm9vbCBpbnRl cnJ1cHRpYmxlLCBib29sIG5vX3dhaXQpCit7CisJaW50IHJldDsKKworCXdoaWxlICh1bmxpa2Vs eShhdG9taWNfeGNoZygmb2JqLT5yZXNlcnZlZCwgMSkgIT0gMCkpIHsKKwkJaWYgKG5vX3dhaXQp CisJCQlyZXR1cm4gLUVCVVNZOworCQlJUFZSX0RFQlVHX0dFTkVSQUwoIndhaXQgYm8gdW5yZXNl cnZlZCwgYWRkIHRvIHdhaXQgcXVldWUuXG4iKTsKKwkJcmV0ID0gaXB2cl9ib193YWl0X3VucmVz ZXJ2ZWQob2JqLCBpbnRlcnJ1cHRpYmxlKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpCisJCQlyZXR1 cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGlwdnJfYm9fdW5yZXNlcnZl IC0gdW5yZXNlcnZlIHRoZSBnaXZlbiBibworICoKKyAqIEBvYmo6ICAgICBUaGUgYnVmZmVyIG9i amVjdCB0byByZXNlcnZlLgorICoKKyAqIE5vIHJldHVybiB2YWx1ZS4KKyAqLwordm9pZCBpcHZy X2JvX3VucmVzZXJ2ZShzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKQoreworCWF0b21p Y19zZXQoJm9iai0+cmVzZXJ2ZWQsIDApOworCXdha2VfdXBfYWxsKCZvYmotPmV2ZW50X3F1ZXVl KTsKK30KKworc3RhdGljIHZvaWQgaXB2cl9iYWNrb2ZmX3Jlc2VydmF0aW9uKHN0cnVjdCBsaXN0 X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IGlwdnJfdmFsaWRhdGVfYnVmZmVyICplbnRyeTsKKwor CWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIGxpc3QsIGhlYWQpIHsKKwkJc3RydWN0IGRybV9p cHZyX2dlbV9vYmplY3QgKm9iaiA9IGVudHJ5LT5pcHZyX2dlbV9ibzsKKwkJaWYgKCFhdG9taWNf cmVhZCgmb2JqLT5yZXNlcnZlZCkpCisJCQljb250aW51ZTsKKwkJYXRvbWljX3NldCgmb2JqLT5y ZXNlcnZlZCwgMCk7CisJCXdha2VfdXBfYWxsKCZvYmotPmV2ZW50X3F1ZXVlKTsKKwl9Cit9CisK Ky8qCisgKiBpcHZyX3Jlc2VydmVfYnVmZmVycyAtIFJlc2VydmUgYnVmZmVycyBmb3IgdmFsaWRh dGlvbi4KKyAqCisgKiBAbGlzdDogICAgIHBvaW50cyB0byBhIGJvIGxpc3QgdG8gYmUgYmFja29m ZmVkCisgKgorICogSWYgYSBidWZmZXIgaW4gdGhlIGxpc3QgaXMgbWFya2VkIGZvciBDUFUgYWNj ZXNzLCB3ZSBiYWNrIG9mZiBhbmQKKyAqIHdhaXQgZm9yIHRoYXQgYnVmZmVyIHRvIGJlY29tZSBm cmVlIGZvciBWUFUgYWNjZXNzLgorICoKKyAqIElmIGEgYnVmZmVyIGlzIHJlc2VydmVkIGZvciBh bm90aGVyIHZhbGlkYXRpb24sIHRoZSB2YWxpZGF0b3Igd2l0aAorICogdGhlIGhpZ2hlc3QgdmFs aWRhdGlvbiBzZXF1ZW5jZSBiYWNrcyBvZmYgYW5kIHdhaXRzIGZvciB0aGF0IGJ1ZmZlcgorICog dG8gYmVjb21lIHVucmVzZXJ2ZWQuIFRoaXMgcHJldmVudHMgZGVhZGxvY2tzIHdoZW4gdmFsaWRh dGluZyBtdWx0aXBsZQorICogYnVmZmVycyBpbiBkaWZmZXJlbnQgb3JkZXJzLgorICoKKyAqIFJl dHVybnM6CisgKiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50 IGlwdnJfcmVzZXJ2ZV9idWZmZXJzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0 IGlwdnJfdmFsaWRhdGVfYnVmZmVyICplbnRyeTsKKwlpbnQgcmV0OworCisJaWYgKGxpc3RfZW1w dHkobGlzdCkpCisJCXJldHVybiAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbGlz dCwgaGVhZCkgeworCQlzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqYm8gPSBlbnRyeS0+aXB2 cl9nZW1fYm87CisKKwkJcmV0ID0gaXB2cl9ib19yZXNlcnZlKGJvLCB0cnVlLCB0cnVlKTsKKwkJ c3dpdGNoIChyZXQpIHsKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisJCWNhc2UgLUVCVVNZOgorCQkJ cmV0ID0gaXB2cl9ib19yZXNlcnZlKGJvLCB0cnVlLCBmYWxzZSk7CisJCQlpZiAoIXJldCkKKwkJ CQlicmVhazsKKwkJCWVsc2UKKwkJCQlnb3RvIGVycjsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZXJy OworCQl9CisJfQorCisJcmV0dXJuIDA7CitlcnI6CisJaXB2cl9iYWNrb2ZmX3Jlc2VydmF0aW9u KGxpc3QpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXB2cl9zZXRfdGlsZSAtIGdsb2Jh bCBzZXR0aW5nIG9mIHRpbGluZyBpbmZvCisgKgorICogQGRldjogICAgIHRoZSBpcHZyIGRybSBk ZXZpY2UKKyAqIEB0aWxpbmdfc2NoZW1lOiAgICAgc2VlIGlwdnJfZHJtLmggZm9yIGRldGFpbHMK KyAqIEB0aWxpbmdfc3RyaWRlOiAgICAgc2VlIGlwdnJfZHJtLmggZm9yIGRldGFpbHMKKyAqCisg KiB2eGQzOTIgaGFyZHdhcmUgc3VwcG9ydHMgb25seSBvbmUgdGlsZSByZWdpb24gc28gdGhpcyBj b25maWd1cmF0aW9uCisgKiBpcyBnbG9iYWwuCisgKi8KK3ZvaWQgaXB2cl9zZXRfdGlsZShzdHJ1 Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCXU4IHRpbGluZ19zY2hlbWUsIHU4IHRp bGluZ19zdHJpZGUpCit7CisJdTMyIGNtZDsKKwl1MzIgc3RhcnQgPSBJUFZSX01FTV9NTVVfVElM SU5HX1NUQVJUOworCXUzMiBlbmQgPSBJUFZSX01FTV9NTVVfVElMSU5HX0VORDsKKworCS8qIEVu YWJsZSBtZW1vcnkgdGlsaW5nICovCisJY21kID0gKChzdGFydCA+PiAyMCkgKyAoKChlbmQgPj4g MjApIC0gMSkgPDwgMTIpICsKKwkJCQkoKDB4OCB8IHRpbGluZ19zdHJpZGUpIDw8IDI0KSk7CisJ SVBWUl9ERUJVR19HRU5FUkFMKCJWRUQ6IE1NVSBUaWxpbmcgcmVnaXN0ZXIwICUwOHguXG4iLCBj bWQpOworCUlQVlJfREVCVUdfR0VORVJBTCgiUmVnaW9uIDB4JTA4eC0weCUwOHguXG4iLCBzdGFy dCwgZW5kKTsKKwlJUFZSX1JFR19XUklURTMyKGNtZCwgTVNWRFhfTU1VX1RJTEVfQkFTRTBfT0ZG U0VUKTsKKworCS8qIHdlIG5lZWQgc2V0IHRpbGUgZm9ybWF0IGFzIDUxMng4IG9uIEJheXRyYWls LCB3aGljaCBpcyBzaGNlbWUgMSAqLworCUlQVlJfUkVHX1dSSVRFMzIodGlsaW5nX3NjaGVtZSA8 PCAzLCBNU1ZEWF9NTVVfQ09OVFJPTDJfT0ZGU0VUKTsKK30KKworLyoqCisgKiBpcHZyX2ZpbmRf Y3R4X3dpdGhfZmVuY2UgLSBsb29rdXAgdGhlIGNvbnRleHQgd2l0aCBnaXZlbiBmZW5jZSBzZXFu bworICoKKyAqIEBkZXZfcHJpdjogICAgIHRoZSBpcHZyIGRybSBkZXZpY2UKKyAqIEBmZW5jZTog ICAgIGZlbmNlIHNlcW5vIGdlbmVyYXRlZCBieSB0aGUgY29udGV4dAorICoKKyAqIFJldHVybnM6 CisgKiBjb250ZXh0IHBvaW50ZXIgaWYgZm91bmQuCisgKiBOVUxMIGlmIG5vdCBmb3VuZC4KKyAq Lworc3RydWN0IGlwdnJfY29udGV4dCoKK2lwdnJfZmluZF9jdHhfd2l0aF9mZW5jZShzdHJ1Y3Qg ZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYsIHUxNiBmZW5jZSkKK3sKKwlzdHJ1Y3QgaXB2cl9j b250ZXh0ICpwb3MgPSBOVUxMLCAqbiA9IE5VTEw7CisKKwlpZiAodW5saWtlbHkoZGV2X3ByaXYg PT0gTlVMTCkpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+ aXB2cl9jdHhfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgbiwgJmRldl9w cml2LT5pcHZyX2N0eF9saXN0LCBoZWFkKSB7CisJCWlmIChwb3MtPmN1cl9zZXEgPT0gZmVuY2Up IHsKKwkJCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+aXB2cl9jdHhfbG9jayk7CisJCQlyZXR1cm4g cG9zOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+aXB2cl9jdHhfbG9jayk7CisK KwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgaXB2cl91bnJlZmVyZW5jZV9idWZmZXJz KHN0cnVjdCBpcHZyX3ZhbGlkYXRlX2NvbnRleHQgKmNvbnRleHQpCit7CisJc3RydWN0IGlwdnJf dmFsaWRhdGVfYnVmZmVyICplbnRyeSwgKm5leHQ7CisJc3RydWN0IGRybV9pcHZyX2dlbV9vYmpl Y3QgKm9iajsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0ID0gJmNvbnRleHQtPnZhbGlkYXRlX2xp c3Q7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5leHQsIGxpc3QsIGhlYWQp IHsKKwkJb2JqID0gZW50cnktPmlwdnJfZ2VtX2JvOworCQlsaXN0X2RlbCgmZW50cnktPmhlYWQp OworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmb2JqLT5iYXNlKTsKKwkJ Y29udGV4dC0+dXNlZF9idWZmZXJzLS07CisJfQorfQorCitzdGF0aWMgaW50IGlwdnJfdXBkYXRl X2J1ZmZlcnMoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJCXN0cnVjdCBpcHZyX3Zh bGlkYXRlX2NvbnRleHQgKmNvbnRleHQsCisJCQkJCXU2NCBidWZmZXJfbGlzdCwKKwkJCQkJaW50 IGNvdW50KQoreworCXN0cnVjdCBpcHZyX3ZhbGlkYXRlX2J1ZmZlciAqZW50cnk7CisJc3RydWN0 IGRybV9pcHZyX2dlbV9leGVjX29iamVjdCBfX3VzZXIgKnZhbF9hcmcKKwkJPSAoc3RydWN0IGRy bV9pcHZyX2dlbV9leGVjX29iamVjdCBfX3VzZXIgKikodWludHB0cl90KWJ1ZmZlcl9saXN0Owor CisJaWYgKGxpc3RfZW1wdHkoJmNvbnRleHQtPnZhbGlkYXRlX2xpc3QpKQorCQlyZXR1cm4gMDsK KworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZjb250ZXh0LT52YWxpZGF0ZV9saXN0LCBo ZWFkKSB7CisJCWlmICghdmFsX2FyZykgeworCQkJSVBWUl9ERUJVR19XQVJOKCJ1bmV4cGVjdGVk IGVuZCBvZiB2YWxfYXJnIGxpc3QhISFcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJ aWYgKHVubGlrZWx5KGNvcHlfdG9fdXNlcih2YWxfYXJnLCAmZW50cnktPnZhbF9yZXEsCisJCQkJ CSAgICBzaXplb2YoZW50cnktPnZhbF9yZXEpKSkpIHsKKwkJCUlQVlJfRVJST1IoImNvcHlfdG9f dXNlciBmYXVsdC5cbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJdmFsX2FyZyArKzsK Kwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXB2cl9yZWZlcmVuY2VfYnVmZmVycyhz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCQkJc3RydWN0IGlwdnJfdmFsaWRhdGVfY29u dGV4dCAqY29udGV4dCwKKwkJCQkJdTY0IGJ1ZmZlcl9saXN0LAorCQkJCQlpbnQgY291bnQpCit7 CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZpbGVfcHJpdi0+bWlub3ItPmRldjsKKwlzdHJ1 Y3QgZHJtX2lwdnJfZ2VtX2V4ZWNfb2JqZWN0IF9fdXNlciAqdmFsX2FyZworCQk9IChzdHJ1Y3Qg ZHJtX2lwdnJfZ2VtX2V4ZWNfb2JqZWN0IF9fdXNlciAqKSh1aW50cHRyX3QpYnVmZmVyX2xpc3Q7 CisJc3RydWN0IGlwdnJfdmFsaWRhdGVfYnVmZmVyICppdGVtOworCXN0cnVjdCBkcm1faXB2cl9n ZW1fb2JqZWN0ICpvYmo7CisJaW50IHJldCA9IDA7CisJaW50IGkgPSAwOworCisJZm9yIChpID0g MDsgaSA8IGNvdW50OyArK2kpIHsKKwkJaWYgKHVubGlrZWx5KGNvbnRleHQtPnVzZWRfYnVmZmVy cyA+PSBJUFZSX05VTV9WQUxJREFURV9CVUZGRVJTKSkgeworCQkJSVBWUl9FUlJPUigiVG9vIG1h bnkgYnVmZmVycyBvbiB2YWxpZGF0ZSBsaXN0LlxuIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJ Z290byBvdXRfZXJyOworCQl9CisJCWl0ZW0gPSAmY29udGV4dC0+YnVmZmVyc1tjb250ZXh0LT51 c2VkX2J1ZmZlcnNdOworCQlpZiAodW5saWtlbHkoY29weV9mcm9tX3VzZXIoJml0ZW0tPnZhbF9y ZXEsIHZhbF9hcmcsCisJCQkJCSAgICBzaXplb2YoaXRlbS0+dmFsX3JlcSkpICE9IDApKSB7CisJ CQlJUFZSX0VSUk9SKCJjb3B5X2Zyb21fdXNlciBmYXVsdC5cbiIpOworCQkJcmV0ID0gLUVGQVVM VDsKKwkJCWdvdG8gb3V0X2VycjsKKwkJfQorCQlJTklUX0xJU1RfSEVBRCgmaXRlbS0+aGVhZCk7 CisJCW9iaiA9IHRvX2lwdnJfYm8oZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2 LAorCQkJCQkJaXRlbS0+dmFsX3JlcS5oYW5kbGUpKTsKKwkJaWYgKCZvYmotPmJhc2UgPT0gTlVM TCkgeworCQkJSVBWUl9FUlJPUigiY2Fubm90IGZpbmQgb2JqIGZvciBoYW5kbGUgJXUgYXQgcG9z aXRpb24gJWQuXG4iLAorCQkJCWl0ZW0tPnZhbF9yZXEuaGFuZGxlLCBpKTsKKwkJCXJldCA9IC1F Tk9FTlQ7CisJCQlnb3RvIG91dF9lcnI7CisJCX0KKwkJaXRlbS0+aXB2cl9nZW1fYm8gPSBvYmo7 CisKKwkJbGlzdF9hZGRfdGFpbCgmaXRlbS0+aGVhZCwgJmNvbnRleHQtPnZhbGlkYXRlX2xpc3Qp OworCQljb250ZXh0LT51c2VkX2J1ZmZlcnMrKzsKKworCQl2YWxfYXJnKys7CisJfQorCisJcmV0 dXJuIDA7CisKK291dF9lcnI6CisJaXB2cl91bnJlZmVyZW5jZV9idWZmZXJzKGNvbnRleHQpOwor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXB2cl9maXh1cF9yZWxvY19lbnRyaWVzKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlscCwKKwkJCQkJ c3RydWN0IGlwdnJfdmFsaWRhdGVfYnVmZmVyICp2YWxfb2JqKQoreworCWludCBpLCByZXQ7CisJ dTY0IG1tdV9vZmZzZXQ7CisJc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iaiwgKnRhcmdl dF9vYmo7CisJc3RydWN0IGRybV9pcHZyX2dlbV9leGVjX29iamVjdCAqZXhlY19vYmogPSAmdmFs X29iai0+dmFsX3JlcTsKKwlzdHJ1Y3QgZHJtX2lwdnJfZ2VtX3JlbG9jYXRpb25fZW50cnkgX191 c2VyICpyZWxvY19lbnRyaWVzCisJCT0gKHN0cnVjdCBkcm1faXB2cl9nZW1fcmVsb2NhdGlvbl9l bnRyeSBfX3VzZXIgKikodWludHB0cl90KWV4ZWNfb2JqLT5yZWxvY3NfcHRyOworCXN0cnVjdCBk cm1faXB2cl9nZW1fcmVsb2NhdGlvbl9lbnRyeSBsb2NhbF9yZWxvY19lbnRyeTsKKworCW9iaiA9 IHZhbF9vYmotPmlwdnJfZ2VtX2JvOworCWlmICghb2JqKQorCQlyZXR1cm4gLUVOT0VOVDsKKwor CS8qIHRvZG86IGNoZWNrIHdyaXRlIGFjY2VzcyAqLworCisJLyogb3ZlcndyaXRlIHVzZXIgY29u dGVudCBhbmQgdXBkYXRlIHJlbG9jYXRpb24gZW50cmllcyAqLworCW1tdV9vZmZzZXQgPSBpcHZy X2dlbV9vYmplY3RfbW11X29mZnNldChvYmopOworCWlmIChtbXVfb2Zmc2V0ICE9IGV4ZWNfb2Jq LT5vZmZzZXQpIHsKKwkJZXhlY19vYmotPm9mZnNldCA9IG1tdV9vZmZzZXQ7CisJCUlQVlJfREVC VUdfR0VORVJBTCgiRml4dXAgQk8gJXUgb2Zmc2V0IHRvIDB4JWxseFxuIiwKKwkJCWV4ZWNfb2Jq LT5oYW5kbGUsIGV4ZWNfb2JqLT5vZmZzZXQpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgZXhlY19v YmotPnJlbG9jYXRpb25fY291bnQ7ICsraSkgeworCQlpZiAodW5saWtlbHkoY29weV9mcm9tX3Vz ZXIoJmxvY2FsX3JlbG9jX2VudHJ5LCAmcmVsb2NfZW50cmllc1tpXSwKKwkJCQkJICAgIHNpemVv Zihsb2NhbF9yZWxvY19lbnRyeSkpICE9IDApKSB7CisJCQlJUFZSX0VSUk9SKCJjb3B5X2Zyb21f dXNlciBmYXVsdC5cbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJdGFyZ2V0X29iaiA9 IHRvX2lwdnJfYm8oZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlscCwKKwkJCQkJCWxvY2Fs X3JlbG9jX2VudHJ5LnRhcmdldF9oYW5kbGUpKTsKKwkJaWYgKCZ0YXJnZXRfb2JqLT5iYXNlID09 IE5VTEwpIHsKKwkJCUlQVlJfRVJST1IoImNhbm5vdCBmaW5kIG9iaiBmb3IgaGFuZGxlICV1IGF0 IHBvc2l0aW9uICVkLlxuIiwKKwkJCQlsb2NhbF9yZWxvY19lbnRyeS50YXJnZXRfaGFuZGxlLCBp KTsKKwkJCXJldHVybiAtRU5PRU5UOworCQl9CisJCXJldCA9IGlwdnJfZ2VtX29iamVjdF9hcHBs eV9yZWxvYyhvYmosCisJCQkJbG9jYWxfcmVsb2NfZW50cnkub2Zmc2V0LAorCQkJCWxvY2FsX3Jl bG9jX2VudHJ5LmRlbHRhICsgaXB2cl9nZW1fb2JqZWN0X21tdV9vZmZzZXQodGFyZ2V0X29iaikp OworCQlpZiAocmV0KSB7CisJCQlJUFZSX0VSUk9SKCJGYWlsZWQgYXBwbHlpbmcgcmVsb2M6ICVk XG4iLCByZXQpOworCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJnRhcmdl dF9vYmotPmJhc2UpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlpZiAodW5saWtlbHkoY29weV90 b191c2VyKCZyZWxvY19lbnRyaWVzW2ldLCAmbG9jYWxfcmVsb2NfZW50cnksCisJCQkJCQlzaXpl b2YobG9jYWxfcmVsb2NfZW50cnkpKSAhPSAwKSkgeworCQkJSVBWUl9ERUJVR19XQVJOKCJjb3B5 X3RvX3VzZXIgZmF1bHQuXG4iKTsKKwkJfQorCQlJUFZSX0RFQlVHX0dFTkVSQUwoIkZpeHVwIG9m ZnNldCAlbGx4IGluIEJPICV1IHRvIDB4JWx4XG4iLAorCQkJbG9jYWxfcmVsb2NfZW50cnkub2Zm c2V0LCBleGVjX29iai0+aGFuZGxlLAorCQkJbG9jYWxfcmVsb2NfZW50cnkuZGVsdGEgKyBpcHZy X2dlbV9vYmplY3RfbW11X29mZnNldCh0YXJnZXRfb2JqKSk7CisJCWRybV9nZW1fb2JqZWN0X3Vu cmVmZXJlbmNlX3VubG9ja2VkKCZ0YXJnZXRfb2JqLT5iYXNlKTsKKwl9CisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgaXB2cl9maXh1cF9yZWxvY3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwK KwkJCQkJc3RydWN0IGRybV9maWxlICpmaWxwLAorCQkJCQlzdHJ1Y3QgaXB2cl92YWxpZGF0ZV9j b250ZXh0ICpjb250ZXh0KQoreworCWludCByZXQ7CisJc3RydWN0IGlwdnJfdmFsaWRhdGVfYnVm ZmVyICplbnRyeTsKKworCWlmIChsaXN0X2VtcHR5KCZjb250ZXh0LT52YWxpZGF0ZV9saXN0KSkg eworCQlJUFZSX0RFQlVHX1dBUk4oIk5vIHJlbG9jcyByZXF1aXJlZCBpbiB2YWxpZGF0ZSBjb250 ZXgsIHNraXBcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVu dHJ5LCAmY29udGV4dC0+dmFsaWRhdGVfbGlzdCwgaGVhZCkgeworCQlJUFZSX0RFQlVHX0dFTkVS QUwoIkZpeGluZyB1cCByZWxvYyBmb3IgQk8gaGFuZGxlICV1XG4iLAorCQkJZW50cnktPnZhbF9y ZXEuaGFuZGxlKTsKKwkJcmV0ID0gaXB2cl9maXh1cF9yZWxvY19lbnRyaWVzKGRldiwgZmlscCwg ZW50cnkpOworCQlpZiAocmV0KSB7CisJCQlJUFZSX0VSUk9SKCJGYWlsZWQgdG8gZml4dXAgcmVs b2MgZm9yIEJPIGhhbmRsZSAldVxuIiwKKwkJCQllbnRyeS0+dmFsX3JlcS5oYW5kbGUpOworCQkJ cmV0dXJuIHJldDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcHZyX3Zh bGlkYXRlX2J1ZmZlcl9saXN0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCQlzdHJ1 Y3QgaXB2cl92YWxpZGF0ZV9jb250ZXh0ICpjb250ZXh0LAorCQkJCQlib29sICpuZWVkX2ZpeHVw X3JlbG9jcywKKwkJCQkJc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKipjbWRfYnVmZmVyKQor eworCXN0cnVjdCBpcHZyX3ZhbGlkYXRlX2J1ZmZlciAqZW50cnk7CisJc3RydWN0IGRybV9pcHZy X2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0ID0gJmNvbnRleHQtPnZh bGlkYXRlX2xpc3Q7CisJaW50IHJldCA9IDA7CisJdTY0IHJlYWxfbW11X29mZnNldDsKKworCWxp c3RfZm9yX2VhY2hfZW50cnkoZW50cnksIGxpc3QsIGhlYWQpIHsKKwkJb2JqID0gZW50cnktPmlw dnJfZ2VtX2JvOworCQkvKioKKwkJICogbmVlZCB2YWxpZGF0ZSBibyBsb2NhdGUgaW4gdGhlIG1t dSBzcGFjZQorCQkgKiBjaGVjayBpZiBwcmVzdW1lZCBvZmZzZXQgaXMgY29ycmVjdAorCQkgKiB3 aXRoIHZlZF9jaGVja19wcmVzdW1lZCwgaWYgcHJlc3VtZSBpcyBub3QgY29ycmVjdCwKKwkJICog Y2FsbCBmaXh1cCByZWxvY3Mgd2l0aCB2ZWRfZml4dXBfcmVsb2NzLgorCQkgKiBjdXJyZW50IGlt cGxlbWVudGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBzaHJpbmsvZXZpY3QsCisJCSAqIHNvIG5lZWRu J3QgdmFsaWRhdGUgbW11IG9mZnNldC4KKwkJICogbmVlZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUg ZnV0dXJlIGlmIHNocmluay9ldmljdAorCQkgKiBpcyBzdXBwb3J0ZWQuCisJCSAqLworCQlyZWFs X21tdV9vZmZzZXQgPSBpcHZyX2dlbV9vYmplY3RfbW11X29mZnNldChvYmopOworCQlpZiAoSVBW Ul9JU19FUlIocmVhbF9tbXVfb2Zmc2V0KSkKKwkJCXJldHVybiAtRU5PRU5UOworCQlpZiAoZW50 cnktPnZhbF9yZXEub2Zmc2V0ICE9IHJlYWxfbW11X29mZnNldCkgeworCQkJSVBWUl9ERUJVR19H RU5FUkFMKCJCTyAldSBvZmZzZXQgZG9lc24ndCBtYXRjaCBNTVUsIG5lZWQgZml4dXAgcmVsb2Nc biIsIGVudHJ5LT52YWxfcmVxLmhhbmRsZSk7CisJCQkqbmVlZF9maXh1cF9yZWxvY3MgPSB0cnVl OworCQl9CisJCWlmIChlbnRyeS0+dmFsX3JlcS5mbGFncyAmIElQVlJfRVhFQ19PQkpFQ1RfU1VC TUlUKSB7CisJCQlpZiAoKmNtZF9idWZmZXIgIT0gTlVMTCkgeworCQkJCUlQVlJfRVJST1IoIk9u bHkgb25lIEJPIGNhbiBiZSBzdWJtaXR0ZWQgaW4gb25lIGV4ZWMgaW9jdGxcbiIpOworCQkJCXJl dHVybiAtRUlOVkFMOworCQkJfQorCQkJKmNtZF9idWZmZXIgPSBvYmo7CisJCX0KKwl9CisKKwly ZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwdnJfZ2VtX2RvX2V4ZWNidWZmZXIgLSBsb29rdXAg dGhlIGNvbnRleHQgd2l0aCBnaXZlbiBmZW5jZSBzZXFubworICoKKyAqIEBkZXY6ICAgICB0aGUg aXB2ciBkcm0gZGV2aWNlCisgKiBAZmlsZV9wcml2OiAgICAgIHRoZSBpcHZyIGRybSBmaWxlIHBv aW50ZXIKKyAqIEBhcmdzOiAgICAgIGlucHV0IGFyZ3VtZW50IHBhc3NlZCBmcm9tIHVzZXJsYW5k CisgKiBAdm06ICAgICAgaXB2ciBhZGRyZXNzIHNwYWNlIGZvciBhbGwgdGhlIGJvIHRvIGJpbmQg dG8KKyAqCisgKiBSZXR1cm5zOgorICogLUVOT0VOVCBpZiBjb250ZXh0IG5vdCBmb3VuZCwgb3Ig Y21kYnVmIGJvIG5vdCBmb3VuZAorICogLUVJTlZBTCBpZiByZWZlcmVuY2luZyBidWZmZXIgZmFp bHMsIG9yIGV4ZWN1dGluZyBjbWRidWYgZmFpbHMKKyAqIC1FSU5UUiBpZiBmYWlscyB0byBsb2Nr IG11dGV4CisgKiAtRUJVU1kgaWYgZmFpbHMgdG8gZ2V0IHBvd2VyIHdlbGwsIG9yIGV4ZWN1dGlv biBmYWlscworICogLUVSRVNUQVJUU1lTIGlmIHJlc2VydmF0aW5nIGJ1ZmZlciBmYWlscworICog LUVOT01FTSBpZiBleGVjdXRpb24gZmFpbHMKKyAqIC1FRkFVTFQgaWYgZXhlY3V0aW9uIGZhaWxz CisgKiAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworc3RhdGljIGludCBpcHZyX2dlbV9kb19leGVjYnVm ZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w cml2LAorCQkJCQlzdHJ1Y3QgZHJtX2lwdnJfZ2VtX2V4ZWNidWZmZXIgKmFyZ3MsCisJCQkJCXN0 cnVjdCBpcHZyX2FkZHJlc3Nfc3BhY2UgKnZtKQoreworCWRybV9pcHZyX3ByaXZhdGVfdCAqZGV2 X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpcHZyX3ZhbGlkYXRlX2NvbnRleHQg KmNvbnRleHQgPSAmZGV2X3ByaXYtPnZhbGlkYXRlX2N0eDsKKwlzdHJ1Y3QgdmVkX3ByaXZhdGUg KnZlZF9wcml2ID0gZGV2X3ByaXYtPnZlZF9wcml2YXRlOworCXN0cnVjdCBkcm1faXB2cl9nZW1f b2JqZWN0ICpjbWRfYnVmZmVyID0gTlVMTDsKKwlzdHJ1Y3QgaXB2cl9jb250ZXh0ICppcHZyX2N0 eCAgPSBOVUxMOworCWludCByZXQsIGN0eF9pZDsKKwlib29sIG5lZWRfZml4dXBfcmVsb2NzID0g ZmFsc2U7CisKKwkvKiBpZiBub3QgcGFzcyAwLCB1c2UgZGVmYXVsdCBjb250ZXh0IGluc3RlYWQg Ki8KKwlpZiAoYXJncy0+Y3R4X2lkID09IDApCisJCWN0eF9pZCA9IGRldl9wcml2LT5kZWZhdWx0 X2N0eC5jdHhfaWQ7CisJZWxzZQorCQljdHhfaWQgPSBhcmdzLT5jdHhfaWQ7CisKKwlJUFZSX0RF QlVHX0dFTkVSQUwoInRyeSB0byBmaW5kIGN0eCBhY2NvcmRpbmcgY3R4X2lkICVkLlxuIiwgY3R4 X2lkKTsKKwlpcHZyX2N0eCA9IChzdHJ1Y3QgaXB2cl9jb250ZXh0ICopCisJCQlpZHJfZmluZCgm ZGV2X3ByaXYtPmlwdnJfY3R4X2lkciwgY3R4X2lkKTsKKwlpZiAoIWlwdnJfY3R4KSB7CisJCUlQ VlJfREVCVUdfV0FSTigidmlkZW8gY3R4IGlzIG5vdCBmb3VuZC5cbiIpOworCQlyZXR1cm4gLUVO T0VOVDsKKwl9CisKKwlJUFZSX0RFQlVHX0dFTkVSQUwoInJlZmVyZW5jZSBhbGwgYnVmZmVycyBw YXNzZWQgdGhyb3VnaCBidWZmZXJfbGlzdC5cbiIpOworCXJldCA9IGlwdnJfcmVmZXJlbmNlX2J1 ZmZlcnMoZmlsZV9wcml2LCBjb250ZXh0LAorCQkJCWFyZ3MtPmJ1ZmZlcnNfcHRyLCBhcmdzLT5i dWZmZXJfY291bnQpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCUlQVlJfREVCVUdfV0FSTigi cmVmZXJlbmNlIGJ1ZmZlciBmYWlsZWQ6ICVkLlxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwlJUFZSX0RFQlVHX0dFTkVSQUwoInJlc2VydmUgYWxsIGJ1ZmZlcnMgdG8gbWFrZSB0aGVt IG5vdCBhY2Nlc3NlZCAiCisJCQkiYnkgb3RoZXIgdGhyZWFkcy5cbiIpOworCXJldCA9IGlwdnJf cmVzZXJ2ZV9idWZmZXJzKCZjb250ZXh0LT52YWxpZGF0ZV9saXN0KTsKKwlpZiAodW5saWtlbHko cmV0KSkgeworCQlJUFZSX0VSUk9SKCJyZXNlcnZlIGJ1ZmZlcnMgZmFpbGVkLlxuIik7CisJCS8q IC1FQlVTWSBvciAtRVJFU1RBUlRTWVMgKi8KKwkJZ290byBvdXRfdW5yZWZfYnVmOworCX0KKwor CUlQVlJfREVCVUdfR0VORVJBTCgidmFsaWRhdGUgYnVmZmVyIGxpc3QsIG1haW5seSBjaGVjayAi CisJCQkidGhlIGJvIG1tdSBvZmZzZXQuXG4iKTsKKwlyZXQgPSBpcHZyX3ZhbGlkYXRlX2J1ZmZl cl9saXN0KGZpbGVfcHJpdiwgY29udGV4dCwgJm5lZWRfZml4dXBfcmVsb2NzLCAmY21kX2J1ZmZl cik7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJSVBWUl9FUlJPUigidmFsaWRhdGUgYnVmZmVy cyBmYWlsZWQ6ICVkLlxuIiwgcmV0KTsKKwkJZ290byBvdXRfYmFja29mZl9yZXNlcnY7CisJfQor CisJaWYgKHVubGlrZWx5KGNtZF9idWZmZXIgPT0gTlVMTCkpIHsKKwkJSVBWUl9FUlJPUigiTm8g Y21kIEJPIGZvdW5kLlxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2JhY2tvZmZf cmVzZXJ2OworCX0KKworCWlmICh1bmxpa2VseShuZWVkX2ZpeHVwX3JlbG9jcykpIHsKKwkJcmV0 ID0gaXB2cl9maXh1cF9yZWxvY3MoZGV2LCBmaWxlX3ByaXYsIGNvbnRleHQpOworCQlpZiAocmV0 KSB7CisJCQlJUFZSX0VSUk9SKCJmaXh1cCByZWxvY3MgZmFpbGVkLlxuIik7CisJCQlnb3RvIG91 dF9iYWNrb2ZmX3Jlc2VydjsKKwkJfQorCX0KKworI2lmIDAKKwlibyA9IGlkcl9maW5kKCZmaWxl X3ByaXYtPm9iamVjdF9pZHIsIGFyZ3MtPmNtZGJ1Zl9oYW5kbGUpOworCWlmICghYm8pIHsKKwkJ SVBWUl9ERUJVR19XQVJOKCJJbnZhbGlkIGNtZCBvYmplY3QgaGFuZGxlIDB4JXguXG4iLAorCQkJ YXJncy0+Y21kYnVmX2hhbmRsZSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2JhY2tv ZmZfcmVzZXJ2OworCX0KKworCWNtZF9idWZmZXIgPSB0b19pcHZyX2JvKGJvKTsKKyNlbmRpZgor CS8qKgorCSAqIGNoZWNrIGNvbnRleCBpZCBhbmQgdHlwZQorCSAqLworCS8qCisJICogb25seSBW RUQgaXMgc3VwcG9ydGVkIGN1cnJlbnRseQorCSAqLworCWlmIChpcHZyX2N0eC0+Y3R4X3R5cGUg PT0gSVBWUl9DT05URVhUX1RZUEVfVkVEKQorCXsKKwkJLyogZml4bWU6IHNob3VsZCBzdXBwb3J0 IG5vbi16ZXJvIHN0YXJ0X29mZnNldCAqLworCQlpZiAodW5saWtlbHkoYXJncy0+ZXhlY19zdGFy dF9vZmZzZXQgIT0gMCkpIHsKKwkJCUlQVlJfRVJST1IoIlVuc3VwcG9ydGVkIGV4ZWNfc3RhcnRf b2Zmc2V0ICV1XG4iLCBhcmdzLT5leGVjX3N0YXJ0X29mZnNldCk7CisJCQlyZXQgPSAtRUlOVkFM OworCQkJZ290byBvdXRfYmFja29mZl9yZXNlcnY7CisJCX0KKworCQlyZXQgPSBtdXRleF9sb2Nr X2ludGVycnVwdGlibGUoJnZlZF9wcml2LT52ZWRfbXV0ZXgpOworCQlpZiAodW5saWtlbHkocmV0 KSkgeworCQkJSVBWUl9FUlJPUigiRXJyb3IgZ2V0IFZFRCBtdXRleDogJWRcbiIsIHJldCk7CisJ CQkvKiAtRUlOVFIgKi8KKwkJCWdvdG8gb3V0X2JhY2tvZmZfcmVzZXJ2OworCQl9CisKKwkJSVBW Ul9ERUJVR19HRU5FUkFMKCJwYXJzZSBjbWQgYnVmZmVyIGFuZCBzZW5kIHRvIFZFRC5cbiIpOwor CQlyZXQgPSB2ZWRfY21kYnVmX3ZpZGVvKHZlZF9wcml2LCBjbWRfYnVmZmVyLAorCQkJCWFyZ3Mt PmV4ZWNfbGVuLCBpcHZyX2N0eCApOworCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJSVBWUl9F UlJPUigidmVkX2NtZGJ1Zl92aWRlbyByZXR1cm5zICVkLlxuIiwgcmV0KTsKKwkJCS8qIC1FSU5W QUwsIC1FTk9NRU0sIC1FRkFVTFQsIC1FQlVTWSAqLworCQkJbXV0ZXhfdW5sb2NrKCZ2ZWRfcHJp di0+dmVkX211dGV4KTsKKwkJCWdvdG8gb3V0X2JhY2tvZmZfcmVzZXJ2OworCQl9CisKKwkJbXV0 ZXhfdW5sb2NrKCZ2ZWRfcHJpdi0+dmVkX211dGV4KTsKKwl9CisKKwkvKioKKwkgKiB1cGRhdGUg bW11X29mZnNldHMgYW5kIGZlbmNlIGZkcyB0byB1c2VyCisJICovCisJcmV0ID0gaXB2cl91cGRh dGVfYnVmZmVycyhmaWxlX3ByaXYsIGNvbnRleHQsCisJCQkJYXJncy0+YnVmZmVyc19wdHIsIGFy Z3MtPmJ1ZmZlcl9jb3VudCk7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJSVBWUl9ERUJVR19X QVJOKCJpcHZyX3VwZGF0ZV9idWZmZXJzIHJldHVybnMgZXJyb3IgJWQuXG4iLCByZXQpOworCQly ZXQgPSAwOworCX0KKworb3V0X2JhY2tvZmZfcmVzZXJ2OgorCUlQVlJfREVCVUdfR0VORVJBTCgi dW5yZXNlcnZlIGJ1ZmZlciBsaXN0LlxuIik7CisJaXB2cl9iYWNrb2ZmX3Jlc2VydmF0aW9uKCZj b250ZXh0LT52YWxpZGF0ZV9saXN0KTsKK291dF91bnJlZl9idWY6CisJSVBWUl9ERUJVR19HRU5F UkFMKCJ1bnJlZiBidWZzIHdoaWNoIGFyZSByZWZlcmVkIGR1cmluZyBibyBsb29rdXAuXG4iKTsK KwlpcHZyX3VucmVmZXJlbmNlX2J1ZmZlcnMoY29udGV4dCk7CisJcmV0dXJuIHJldDsKK30KKwor LyoqCisgKiBpcHZyX2dlbV9kb19leGVjYnVmZmVyIC0gbG9va3VwIHRoZSBjb250ZXh0IHdpdGgg Z2l2ZW4gZmVuY2Ugc2Vxbm8KKyAqCisgKiBpb2N0bCBlbnRyeSBmb3IgRFJNX0lQVlJfR0VNX0VY RUNCVUZGRVIKKyAqCisgKiBSZXR1cm5zOgorICogLUVOT0VOVCBpZiBjb250ZXh0IG5vdCBmb3Vu ZCwgb3IgY21kYnVmIGJvIG5vdCBmb3VuZAorICogLUVJTlZBTCBpZiByZWZlcmVuY2luZyBidWZm ZXIgZmFpbHMsIG9yIGV4ZWN1dGluZyBjbWRidWYgZmFpbHMKKyAqIC1FSU5UUiBpZiBmYWlscyB0 byBsb2NrIG11dGV4CisgKiAtRUJVU1kgaWYgZmFpbHMgdG8gZ2V0IHBvd2VyIHdlbGwsIG9yIGV4 ZWN1dGlvbiBmYWlscworICogLUVSRVNUQVJUU1lTIGlmIHJlc2VydmF0aW5nIGJ1ZmZlciBmYWls cworICogLUVOT01FTSBpZiBleGVjdXRpb24gZmFpbHMKKyAqIC1FRkFVTFQgaWYgZXhlY3V0aW9u IGZhaWxzCisgKiAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IGlwdnJfZ2VtX2V4ZWNidWZmZXJf aW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQlzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faXB2cl9nZW1fZXhlY2J1ZmZlciAqYXJn cyA9IGRhdGE7CisJaW50IHJldDsKKwlzdHJ1Y3QgaXB2cl92YWxpZGF0ZV9jb250ZXh0ICpjb250 ZXh0ID0gJmRldl9wcml2LT52YWxpZGF0ZV9jdHg7CisKKwlpZiAoIWNvbnRleHQgfHwgIWNvbnRl eHQtPmJ1ZmZlcnMpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlj b250ZXh0LT51c2VkX2J1ZmZlcnMgPSAwOworCisJaWYgKGFyZ3MtPmJ1ZmZlcl9jb3VudCA8IDEg fHwKKwkJYXJncy0+YnVmZmVyX2NvdW50ID4KKwkJCShVSU5UX01BWCAvIHNpemVvZihzdHJ1Y3Qg aXB2cl92YWxpZGF0ZV9idWZmZXIpKSkgeworCQlJUFZSX0VSUk9SKCJ2YWxpZGF0ZSAlZCBidWZm ZXJzLlxuIiwgYXJncy0+YnVmZmVyX2NvdW50KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ dHJhY2VfaXB2cl9leGVjYnVmZmVyKGFyZ3MpOworCXJldCA9IGlwdnJfZ2VtX2RvX2V4ZWNidWZm ZXIoZGV2LCBmaWxlX3ByaXYsIGFyZ3MsCisJCQkJICAgICZkZXZfcHJpdi0+YWRkcl9zcGFjZSk7 CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJf ZXhlYy5oIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9leGVjLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uY2QxNzRhOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pcHZyL2lwdnJfZXhlYy5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgorICogaXB2cl9leGVjLmg6IElQVlIgaGVhZGVyIGZpbGUgZm9yIGNvbW1hbmQgYnVmZmVy IGV4ZWN1dGlvbgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbiwg SGlsbHNib3JvLCBPUiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFC SUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlm dGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczoKKyAq ICAgIEZlaSBKaWFuZyA8ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqICAgIFlhbyBDaGVuZyA8eWFv LmNoZW5nQGludGVsLmNvbT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0lQ VlJfRVhFQ19IXworI2RlZmluZSBfSVBWUl9FWEVDX0hfCisKKyNpbmNsdWRlICJpcHZyX2Rydi5o IgorI2luY2x1ZGUgImlwdnJfZHJtLmgiCisjaW5jbHVkZSAiaXB2cl9nZW0uaCIKKyNpbmNsdWRl ICJpcHZyX2ZlbmNlLmgiCisKK3N0cnVjdCBkcm1faXB2cl9wcml2YXRlOworCisjZGVmaW5lIElQ VlJfTlVNX1ZBTElEQVRFX0JVRkZFUlMgMjA0OAorI2RlZmluZSBJUFZSX01BWF9SRUxPQ19QQUdF UyAxMDI0CisKK3N0cnVjdCBpcHZyX3ZhbGlkYXRlX2J1ZmZlciB7CisJc3RydWN0IGRybV9pcHZy X2dlbV9leGVjX29iamVjdCB2YWxfcmVxOworCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKKwlzdHJ1 Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqaXB2cl9nZW1fYm87CisJc3RydWN0IGlwdnJfZmVuY2Ug Km9sZF9mZW5jZTsKK307CisKK2ludCBpcHZyX2JvX3Jlc2VydmUoc3RydWN0IGRybV9pcHZyX2dl bV9vYmplY3QgKm9iaiwKKwkJCWJvb2wgaW50ZXJydXB0aWJsZSwgYm9vbCBub193YWl0KTsKKwor dm9pZCBpcHZyX2JvX3VucmVzZXJ2ZShzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKTsK Kworc3RydWN0IGlwdnJfY29udGV4dCoKK2lwdnJfZmluZF9jdHhfd2l0aF9mZW5jZShzdHJ1Y3Qg ZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYsIHUxNiBmZW5jZSk7CisKK3ZvaWQgaXB2cl9zZXRf dGlsZShzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQl1OCB0aWxpbmdfc2No ZW1lLCB1OCB0aWxpbmdfc3RyaWRlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaXB2ci9pcHZyX2ZlbmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2ZlbmNl LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE4YTYwMgotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZmVuY2UuYwpAQCAtMCwwICsxLDQ5 MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpcHZyX2ZlbmNlLmM6IElQVlIgZmVuY2UgaGFu ZGxpbmcgdG8gdHJhY2sgY29tbWFuZCBleGVjdHVpb24gc3RhdHVzCisgKgorICogQ29weXJpZ2h0 IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uLCBIaWxsc2Jvcm8sIE9SLCBVU0EKKyAqIEFsbCBS aWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJt cyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2 ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJl IHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv cgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMg cHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0x MzAxIFVTQS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRmVpIEppYW5nIDxmZWkuamlhbmdAaW50 ZWwuY29tPgorICogICAgWWFvIENoZW5nIDx5YW8uY2hlbmdAaW50ZWwuY29tPgorICoKKyAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImlwdnJfZmVuY2UuaCIKKyNpbmNsdWRlICJpcHZy X2V4ZWMuaCIKKyNpbmNsdWRlICJpcHZyX2JvLmgiCisjaW5jbHVkZSAiaXB2cl90cmFjZS5oIgor I2luY2x1ZGUgInZlZF9yZWcuaCIKKyNpbmNsdWRlICJ2ZWRfZncuaCIKKyNpbmNsdWRlICJ2ZWRf Y21kLmgiCisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2V4cG9y dC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2lu Y2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRl IDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8 bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51 eC9hbm9uX2lub2Rlcy5oPgorCisvKioKKyAqIGlwdnJfZmVuY2VfY3JlYXRlIC0gY3JlYXRlIGFu ZCBpbml0IGEgZmVuY2UKKyAqCisgKiBAZGV2X3ByaXY6IGRybV9pcHZyX3ByaXZhdGUgcG9pbnRl cgorICogQGZlbmNlOiBpcHZyIGZlbmNlIG9iamVjdAorICogQGZlbmNlX2ZkOiBmaWxlIGRlc2Ny aXB0b3IgZm9yIGV4cG9ydGluZyBmZW5jZQorICoKKyAqIENyZWF0ZSBhIGZlbmNlLCBhY3R1YWxs eSB0aGUgZmVuY2UgaXMgd3JpdHRlbiB0byBpcHZyIHRocm91Z2ggbXNnLgorICogZXhwb3J0aW5n IGEgbmV3IGZpbGUgZGVzY3JpcHRvciB0byB1c2Vyc3BhY2UuCisgKiBSZXR1cm5zIDAgb24gc3Vj Y2VzcywgLUVOT01FTSBvbiBmYWlsdXJlLgorICovCitpbnQKK2lwdnJfZmVuY2VfY3JlYXRlKHN0 cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiwKKyAgICAgICAgICAgICAgICAgIHN0cnVj dCBpcHZyX2ZlbmNlICoqZmVuY2UpCit7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJdTE2 IG9sZF9zZXE7CisJc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdjsKKworCXZlZF9wcml2ID0g ZGV2X3ByaXYtPnZlZF9wcml2YXRlOworCisJKmZlbmNlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0 IGlwdnJfZmVuY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoKCpmZW5jZSkgPT0gTlVMTCkgeworCQly ZXR1cm4gLUVOT01FTTsKKwl9CisJaWYgKElTX0VSUigoKmZlbmNlKS0+ZmlsZSkpIHsKKwkJa2Zy ZWUoKmZlbmNlKTsKKwkJSVBWUl9FUlJPUigiQUxBUk0hISEgYW5vbl9pbm9kZV9nZXRmaWxlIGNh bGwgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJa3JlZl9pbml0KCYoKCpm ZW5jZSktPmtyZWYpKTsKKwkoKmZlbmNlKS0+ZGV2X3ByaXYgPSBkZXZfcHJpdjsKKworCXNwaW5f bG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+ZmVuY2VfZHJ2LmZlbmNlX2xvY2ssIGlycV9mbGFncyk7 CisJLyogY21kcyBpbiBvbmUgYmF0Y2ggdXNlIGRpZmZlcmVudCBmZW5jZSB2YWx1ZSAqLworCW9s ZF9zZXEgPSBkZXZfcHJpdi0+ZmVuY2VfZHJ2LnN5bmNfc2VxOworCWRldl9wcml2LT5mZW5jZV9k cnYuc3luY19zZXEgPSBkZXZfcHJpdi0+bGFzdF9zZXErKzsKKwlkZXZfcHJpdi0+ZmVuY2VfZHJ2 LnN5bmNfc2VxIDw8PSA0OworCWRldl9wcml2LT5mZW5jZV9kcnYuc3luY19zZXEgKz0gdmVkX3By aXYtPm51bV9jbWQ7CisJKCpmZW5jZSktPnNlcSA9IGRldl9wcml2LT5mZW5jZV9kcnYuc3luY19z ZXE7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+ZmVuY2VfZHJ2LmZlbmNl X2xvY2ssIGlycV9mbGFncyk7CisKKwlrcmVmX2dldCgmKCpmZW5jZSktPmtyZWYpOworCUlQVlJf REVCVUdfR0VORVJBTCgiZmVuY2UgaXMgY3JlYXRlZCBhbmQgaXRzIHNlcSBpcyAldSAoMHglMDR4 KS5cbiIsCisJCSgqZmVuY2UpLT5zZXEsICgqZmVuY2UpLT5zZXEpOworCXJldHVybiAwOworfQor CisvKioKKyAqIGlwdnJfZmVuY2VfZGVzdHJveSAtIGRlc3Ryb3kgYSBmZW5jZQorICoKKyAqIEBr cmVmOiBmZW5jZSBrcmVmCisgKgorICogRnJlZXMgdGhlIGZlbmNlIG9iamVjdCAoYWxsIGFzaWNz KS4KKyAqLworc3RhdGljIHZvaWQgaXB2cl9mZW5jZV9kZXN0cm95KHN0cnVjdCBrcmVmICprcmVm KQoreworCXN0cnVjdCBpcHZyX2ZlbmNlICpmZW5jZTsKKworCWZlbmNlID0gY29udGFpbmVyX29m KGtyZWYsIHN0cnVjdCBpcHZyX2ZlbmNlLCBrcmVmKTsKKwlrZnJlZShmZW5jZSk7Cit9CisKKy8q KgorICogaXB2cl9mZW5jZV9wcm9jZXNzIC0gcHJvY2VzcyBhIGZlbmNlCisgKgorICogQGRldl9w cml2OiBkcm1faXB2cl9wcml2YXRlIHBvaW50ZXIKKyAqIEBzZXE6IGluZGljYXRlIHRoZSBmZW5j ZSBzZXEgaGFzIGJlZW4gc2lnbmFsZWQKKyAqIEBlcnI6IGluZGljYXRlIGlmIGVyciBoYXBwZW5l ZCwgZm9yIGZ1dHVyZSB1c2UKKyAqCisgKiBDaGVja3MgdGhlIGN1cnJlbnQgZmVuY2UgdmFsdWUg YW5kIHdha2VzIHRoZSBmZW5jZSBxdWV1ZQorICogaWYgdGhlIHNlcXVlbmNlIG51bWJlciBoYXMg aW5jcmVhc2VkIChhbGwgYXNpY3MpLgorICovCit2b2lkIGlwdnJfZmVuY2VfcHJvY2VzcyhzdHJ1 Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYsIHUxNiBzZXEsIHU4IGVycikKK3sKKwlpbnQg c2lnbmFsZWRfc2VxX2ludDsKKwl1MTYgc2lnbmFsZWRfc2VxOworCXUxNiBsYXN0X2VtaXR0ZWQ7 CisKKwlzaWduYWxlZF9zZXFfaW50ID0gYXRvbWljX3JlYWQoJmRldl9wcml2LT5mZW5jZV9kcnYu c2lnbmFsZWRfc2VxKTsKKwlzaWduYWxlZF9zZXEgPSAodTE2KXNpZ25hbGVkX3NlcV9pbnQ7CisJ bGFzdF9lbWl0dGVkID0gZGV2X3ByaXYtPmZlbmNlX2Rydi5zeW5jX3NlcTsKKworCWlmIChpcHZy X3NlcV9hZnRlcihzZXEsIGxhc3RfZW1pdHRlZCkpIHsKKwkJSVBWUl9ERUJVR19XQVJOKCJzZXEg ZXJyb3IsIHNlcSBpcyAldSwgc2lnbmFsZWRfc2VxIGlzICV1LCAiCisJCQkJImxhc3RfZW1pdHRl ZCBpcyAldS5cbiIsCisJCQkJc2VxLCBzaWduYWxlZF9zZXEsIGxhc3RfZW1pdHRlZCk7CisJCXJl dHVybjsKKwl9CisJaWYgKGlwdnJfc2VxX2FmdGVyKHNlcSwgc2lnbmFsZWRfc2VxKSkgeworCQlh dG9taWNfeGNoZygmZGV2X3ByaXYtPmZlbmNlX2Rydi5zaWduYWxlZF9zZXEsIHNlcSk7CisJCWRl dl9wcml2LT5mZW5jZV9kcnYubGFzdF9hY3Rpdml0eSA9IGppZmZpZXM7CisJCUlQVlJfREVCVUdf R0VORVJBTCgibGFzdCBlbWl0dGVkIHNlcSAldSBpcyB1cGRhdGVkLlxuIiwgc2VxKTsKKwkJd2Fr ZV91cF9hbGwoJmRldl9wcml2LT5mZW5jZV9xdWV1ZSk7CisJfQorfQorCisvKioKKyAqIGlwdnJf ZmVuY2Vfc2lnbmFsZWQgLSBjaGVjayBpZiBhIGZlbmNlIHNlcXVldWNlIG51bWJlciBoYXMgc2ln bmFsZWQKKyAqCisgKiBAZGV2X3ByaXY6IGlwdnIgZGV2aWNlIHBvaW50ZXIKKyAqIEBzZXE6IHNl cXVlbmNlIG51bWJlcgorICoKKyAqIENoZWNrIGlmIHRoZSBsYXN0IHNpbmdsZWQgZmVuY2Ugc2Vx dW5jZSBudW1iZXIgaXMgPj0gdGhlIHJlcXVlc3RlZAorICogc2VxdWVuY2UgbnVtYmVyIChhbGwg YXNpY3MpLgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBmZW5jZSBoYXMgc2lnbmFsZWQgKGN1cnJl bnQgZmVuY2UgdmFsdWUKKyAqIGlzID49IHJlcXVlc3RlZCB2YWx1ZSkgb3IgZmFsc2UgaWYgaXQg aGFzIG5vdCAoY3VycmVudCBmZW5jZQorICogdmFsdWUgaXMgPCB0aGUgcmVxdWVzdGVkIHZhbHVl LgorICovCitzdGF0aWMgYm9vbCBpcHZyX2ZlbmNlX3NpZ25hbGVkKHN0cnVjdCBkcm1faXB2cl9w cml2YXRlICpkZXZfcHJpdiwgdTE2IHNlcSkKK3sKKwl1MTYgY3Vycl9zZXEsIHNpZ25hbGVkX3Nl cTsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3By aXYtPmZlbmNlX2Rydi5mZW5jZV9sb2NrLCBpcnFfZmxhZ3MpOworCWN1cnJfc2VxID0gZGV2X3By aXYtPnZlZF9wcml2YXRlLT52ZWRfY3VyX3NlcTsKKwlzaWduYWxlZF9zZXEgPSBhdG9taWNfcmVh ZCgmZGV2X3ByaXYtPmZlbmNlX2Rydi5zaWduYWxlZF9zZXEpOworCisJaWYgKGlwdnJfc2VxX2Fm dGVyKHNlcSwgc2lnbmFsZWRfc2VxKSkgeworCQkvKiBwb2xsIG5ldyBsYXN0IHNlcXVlbmNlIGF0 IGxlYXN0IG9uY2UgKi8KKwkJaXB2cl9mZW5jZV9wcm9jZXNzKGRldl9wcml2LCBjdXJyX3NlcSwg SVBWUl9DTURfU1VDQ0VTUyk7CisJCXNpZ25hbGVkX3NlcSA9IGF0b21pY19yZWFkKCZkZXZfcHJp di0+ZmVuY2VfZHJ2LnNpZ25hbGVkX3NlcSk7CisJCWlmIChpcHZyX3NlcV9hZnRlcihzZXEsIHNp Z25hbGVkX3NlcSkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5mZW5j ZV9kcnYuZmVuY2VfbG9jaywKKwkJCQkJCWlycV9mbGFncyk7CisJCQlyZXR1cm4gZmFsc2U7CisJ CX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmZlbmNlX2Rydi5mZW5j ZV9sb2NrLCBpcnFfZmxhZ3MpOworCXJldHVybiB0cnVlOworfQorCisvKioKKyAqIGlwdnJfZmVu Y2VfbG9ja3VwIC0gaXB2ciBsb2NrdXAgaXMgZGV0ZWN0ZWQKKyAqCisgKiBAZGV2X3ByaXY6IGlw dnIgZGV2aWNlIHBvaW50ZXIKKyAqIEBmZW5jZTogbG9ja3VwIGRldGVjdGVkIHdoZW4gd2FpdCB0 aGUgc3BlY2lmaWMgZmVuY2UKKyAqCisgKiBEdXJpbmcgdGhlIGNhbGxpbmcgb2YgaXB2cl9mZW5j ZV93YWl0LCBpZiB3YWl0IHRvIHRpbWVvdXQsCisgKiBpbmRpY2F0ZSBsb2NrdXAgaGFwcGVuZWQs IG5lZWQgZmx1c2ggY21kIHF1ZXVlIGFuZCByZXNldCB2ZWQKKyAqIElmIGlwdnJfZmVuY2Vfd2Fp dF9lbXB0eV9sb2NrZWQgZW5jb3VudGVyIGxvY2t1cCwgZmVuY2UgaXMgTlVMTAorICovCitzdGF0 aWMgdm9pZAoraXB2cl9mZW5jZV9sb2NrdXAoc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9w cml2LCBzdHJ1Y3QgaXB2cl9mZW5jZSAqZmVuY2UpCit7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxh Z3M7CisJc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdiA9IGRldl9wcml2LT52ZWRfcHJpdmF0 ZTsKKworCUlQVlJfREVCVUdfV0FSTigidGltZW91dCBkZXRlY3RlZCwgZmx1c2ggcXVldWVkIGNt ZCwgbWF5YmUgbG9ja3VwLlxuIik7CisJSVBWUl9ERUJVR19XQVJOKCJNU1ZEWF9DT01NU19GV19T VEFUVVMgcmVnIGlzIDB4JXguXG4iLAorCQkJSVBWUl9SRUdfUkVBRDMyKE1TVkRYX0NPTU1TX0ZX X1NUQVRVUykpOworCisJaWYgKGZlbmNlKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJp di0+ZmVuY2VfZHJ2LmZlbmNlX2xvY2ssIGlycV9mbGFncyk7CisJCWlwdnJfZmVuY2VfcHJvY2Vz cyhkZXZfcHJpdiwgZmVuY2UtPnNlcSwgSVBWUl9DTURfTE9DS1VQKTsKKwkJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmZGV2X3ByaXYtPmZlbmNlX2Rydi5mZW5jZV9sb2NrLCBpcnFfZmxhZ3MpOwor CX0KKworCS8qIHNob3VsZCBiZWhhdmUgYWNjb3JkaW5nIHRvIGN0eCB0eXBlIGluIHRoZSBmdXR1 cmUgKi8KKwl2ZWRfZmx1c2hfY21kX3F1ZXVlKGRldl9wcml2LT52ZWRfcHJpdmF0ZSk7CisKKwl2 ZWRfcHJpdi0+dmVkX25lZWRzX3Jlc2V0ID0gMTsKK30KKworLyoqCisgKiBpcHZyX2ZlbmNlX3dh aXRfc2VxIC0gd2FpdCBmb3IgYSBzcGVjaWZpYyBzZXF1ZW5jZSBudW1iZXIKKyAqCisgKiBAZGV2 X3ByaXY6IGlwdnIgZGV2aWNlIHBvaW50ZXIKKyAqIEB0YXJnZXRfc2VxOiBzZXF1ZW5jZSBudW1i ZXIgd2Ugd2FudCB0byB3YWl0IGZvcgorICogQGludHI6IHVzZSBpbnRlcnJ1cHRhYmxlIHNsZWVw CisgKgorICogV2FpdCBmb3IgdGhlIHJlcXVlc3RlZCBzZXF1ZW5jZSBudW1iZXIgdG8gYmUgd3Jp dHRlbi4KKyAqIEBpbnRyIHNlbGVjdHMgd2hldGhlciB0byB1c2UgaW50ZXJydXB0YWJsZSAodHJ1 ZSkgb3Igbm9uLWludGVycnVwdGFibGUKKyAqIChmYWxzZSkgc2xlZXAgd2hlbiB3YWl0aW5nIGZv ciB0aGUgc2VxdWVuY2UgbnVtYmVyLgorICogUmV0dXJucyAwIGlmIHRoZSBzZXF1ZW5jZSBudW1i ZXIgaGFzIHBhc3NlZCwgZXJyb3IgZm9yIGFsbCBvdGhlciBjYXNlcy4KKyAqIC1FREVBRExLIGlz IHJldHVybmVkIHdoZW4gYSBWUFUgbG9ja3VwIGhhcyBiZWVuIGRldGVjdGVkLgorICovCitzdGF0 aWMgaW50IGlwdnJfZmVuY2Vfd2FpdF9zZXEoc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9w cml2LAorCQkJCQl1MTYgdGFyZ2V0X3NlcSwgYm9vbCBpbnRyKQoreworCXN0cnVjdCBpcHZyX2Zl bmNlX2RyaXZlcgkqZmVuY2VfZHJ2ID0gJmRldl9wcml2LT5mZW5jZV9kcnY7CisJdW5zaWduZWQg bG9uZyB0aW1lb3V0LCBsYXN0X2FjdGl2aXR5OworCXUxNiBzaWduYWxlZF9zZXE7CisJaW50IHJl dDsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlib29sIHNpZ25hbGVkOworCXNwaW5fbG9j a19pcnFzYXZlKCZkZXZfcHJpdi0+ZmVuY2VfZHJ2LmZlbmNlX2xvY2ssIGlycV9mbGFncyk7CisK Kwl3aGlsZSAoaXB2cl9zZXFfYWZ0ZXIodGFyZ2V0X3NlcSwKKwkJCSh1MTYpYXRvbWljX3JlYWQo JmZlbmNlX2Rydi0+c2lnbmFsZWRfc2VxKSkpIHsKKwkJLyogc2VlbXMgdGhlIGZlbmNlX2Rydi0+ bGFzdF9hY3Rpdml0eSBpcyB1c2VsZXNzPyAqLworCQl0aW1lb3V0ID0gSVBWUl9GRU5DRV9KSUZG SUVTX1RJTUVPVVQ7CisJCXNpZ25hbGVkX3NlcSA9IGF0b21pY19yZWFkKCZmZW5jZV9kcnYtPnNp Z25hbGVkX3NlcSk7CisJCS8qIHNhdmUgbGFzdCBhY3Rpdml0eSB2YWx1ZWUsIHVzZWQgdG8gY2hl Y2sgZm9yIFZQVSBsb2NrdXBzICovCisJCWxhc3RfYWN0aXZpdHkgPSBmZW5jZV9kcnYtPmxhc3Rf YWN0aXZpdHk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmZlbmNlX2Ry di5mZW5jZV9sb2NrLCBpcnFfZmxhZ3MpOworCQlpZiAoaW50cikgeworCQkJcmV0ID0gd2FpdF9l dmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoCisJCQkJZGV2X3ByaXYtPmZlbmNlX3F1ZXVlLAor CQkJCShzaWduYWxlZCA9IGlwdnJfZmVuY2Vfc2lnbmFsZWQoZGV2X3ByaXYsIHRhcmdldF9zZXEp KSwKKwkJCQl0aW1lb3V0KTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IHdhaXRfZXZlbnRfdGltZW91 dCgKKwkJCQlkZXZfcHJpdi0+ZmVuY2VfcXVldWUsCisJCQkJKHNpZ25hbGVkID0gaXB2cl9mZW5j ZV9zaWduYWxlZChkZXZfcHJpdiwgdGFyZ2V0X3NlcSkpLAorCQkJCXRpbWVvdXQpOworCQl9CisJ CXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+ZmVuY2VfZHJ2LmZlbmNlX2xvY2ssIGlycV9m bGFncyk7CisKKwkJaWYgKHVubGlrZWx5KCFzaWduYWxlZCkpIHsKKwkJCS8qIHdlIHdlcmUgaW50 ZXJydXB0ZWQgZm9yIHNvbWUgcmVhc29uIGFuZCBmZW5jZQorCQkJICogaXNuJ3Qgc2lnbmFsZWQg eWV0LCByZXN1bWUgd2FpdGluZyB1bnRpbCB0aW1lb3V0ICAqLworCQkJaWYgKHVubGlrZWx5KHJl dCA8IDApKSB7CisJCQkJLyogc2hvdWxkIHJldHVybiAtRVJFU1RBUlRTWVMsCisJCQkJICogaW50 ZXJydXB0ZWQgYnkgYSBzaWduYWwgKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogY2hl Y2sgaWYgc2VxdWVuY2UgdmFsdWUgaGFzIGNoYW5nZWQgc2luY2UKKwkJCSAqIGxhc3RfYWN0aXZp dHkgKi8KKwkJCWlmIChzaWduYWxlZF9zZXEgIT0KKwkJCQlhdG9taWNfcmVhZCgmZmVuY2VfZHJ2 LT5zaWduYWxlZF9zZXEpKSB7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChsYXN0X2Fj dGl2aXR5ICE9IGZlbmNlX2Rydi0+bGFzdF9hY3Rpdml0eSkgeworCQkJCWNvbnRpbnVlOworCQkJ fQorCisJCQkvKiBsb2NrdXAgaGFwcGVuLCBpdCBpcyBiZXR0ZXIgaGF2ZSBzb21lIHJlZyB0byBj aGVjayAqLworCQkJSVBWUl9ERUJVR19XQVJOKCJWUFUgbG9ja3VwICh3YWl0aW5nIGZvciAweCUw eCBsYXN0ICIKKwkJCQkJInNpZ25hbGVkIGZlbmNlIGlkIDB4JXgpLlxuIiwKKwkJCQkJdGFyZ2V0 X3NlcSwgc2lnbmFsZWRfc2VxKTsKKworCQkJLyogY2hhbmdlIGxhc3QgYWN0aXZpdHkgc28gbm9i b2R5IGVsc2UKKwkJCSAqIHRoaW5rIHRoZXJlIGlzIGEgbG9ja3VwICovCisJCQlmZW5jZV9kcnYt Pmxhc3RfYWN0aXZpdHkgPSBqaWZmaWVzOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2 X3ByaXYtPmZlbmNlX2Rydi5mZW5jZV9sb2NrLAorCQkJCQlpcnFfZmxhZ3MpOworCQkJcmV0dXJu IC1FREVBRExLOworCisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYt PmZlbmNlX2Rydi5mZW5jZV9sb2NrLCBpcnFfZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKioK KyAqIGlwdnJfZmVuY2Vfd2FpdCAtIHdhaXQgZm9yIGEgZmVuY2UgdG8gc2lnbmFsCisgKgorICog QGZlbmNlOiBpcHZyIGZlbmNlIG9iamVjdAorICogQGludHI6IHVzZSBpbnRlcnJ1cHRhYmxlIHNs ZWVwCisgKiBAbm9fd2FpdDogbm90IHNpZ25hbGVkLCBpZiBuZWVkIGFkZCBpbnRvIHdhaXQgcXVl dWUKKyAqCisgKiBXYWl0IGZvciB0aGUgcmVxdWVzdGVkIGZlbmNlIHRvIHNpZ25hbCAoYWxsIGFz aWNzKS4KKyAqIEBpbnRyIHNlbGVjdHMgd2hldGhlciB0byB1c2UgaW50ZXJydXB0YWJsZSAodHJ1 ZSkgb3Igbm9uLWludGVycnVwdGFibGUKKyAqIChmYWxzZSkgc2xlZXAgd2hlbiB3YWl0aW5nIGZv ciB0aGUgZmVuY2UuCisgKiBSZXR1cm5zIDAgaWYgdGhlIGZlbmNlIGhhcyBwYXNzZWQsIGVycm9y IGZvciBhbGwgb3RoZXIgY2FzZXMuCisgKi8KK2ludCBpcHZyX2ZlbmNlX3dhaXQoc3RydWN0IGlw dnJfZmVuY2UgKmZlbmNlLCBib29sIGludHIsIGJvb2wgbm9fd2FpdCkKK3sKKwlpbnQgcmV0Owor CXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdjsKKworCWlmIChmZW5jZSA9PSBOVUxM IHx8IGZlbmNlLT5zZXEgPT0gSVBWUl9GRU5DRV9TSUdOQUxFRF9TRVEpIHsKKwkJSVBWUl9ERUJV R19HRU5FUkFMKCJmZW5jZSBpcyBOVUxMIG9yIGhhcyBiZWVuIHNpbmdhbGVkLlxuIik7CisJCXJl dHVybiAwOworCX0KKwlkZXZfcHJpdiA9IGZlbmNlLT5kZXZfcHJpdjsKKworCUlQVlJfREVCVUdf R0VORVJBTCgid2FpdCBmZW5jZSBzZXEgJXUsIGxhc3Qgc2lnbmFsZWQgc2VxIGlzICVkLCAiCisJ CQkibGFzdCBlbWl0dGVkIHNlcSBpcyAldS5cbiIsIGZlbmNlLT5zZXEsCisJCQlhdG9taWNfcmVh ZCgmZGV2X3ByaXYtPmZlbmNlX2Rydi5zaWduYWxlZF9zZXEpLAorCQkJZGV2X3ByaXYtPmZlbmNl X2Rydi5zeW5jX3NlcSk7CisJaWYgKCFub193YWl0KQorCQl0cmFjZV9pcHZyX2ZlbmNlX3dhaXRf YmVnaW4oZmVuY2UsCisJCQlhdG9taWNfcmVhZCgmZGV2X3ByaXYtPmZlbmNlX2Rydi5zaWduYWxl ZF9zZXEpLAorCQkJZGV2X3ByaXYtPmZlbmNlX2Rydi5zeW5jX3NlcSk7CisKKwlpZiAoaXB2cl9m ZW5jZV9zaWduYWxlZChkZXZfcHJpdiwgZmVuY2UtPnNlcSkpIHsKKwkJSVBWUl9ERUJVR19HRU5F UkFMKCJmZW5jZSBoYXMgYmVlbiBzaWduYWxlZC5cbiIpOworCQkvKgorCQkgKiBjb21wYXJlIHdp dGggdHRtX2JvX3dhaXQsIGRvbid0IG5lZWQgY3JlYXRlIGEgdG1wX29iagorCQkgKiBpdCBpcyBi ZXR0ZXIgd2UgYWxzbyBzZXQgYm8tPmZlbmNlID0gTlVMTAorCQkgKi8KKwkJaWYgKCFub193YWl0 KQorCQkJdHJhY2VfaXB2cl9mZW5jZV93YWl0X2VuZChmZW5jZSwKKwkJCQlhdG9taWNfcmVhZCgm ZGV2X3ByaXYtPmZlbmNlX2Rydi5zaWduYWxlZF9zZXEpLAorCQkJCWRldl9wcml2LT5mZW5jZV9k cnYuc3luY19zZXEpOworCQlmZW5jZS0+c2VxID0gSVBWUl9GRU5DRV9TSUdOQUxFRF9TRVE7CisJ CWlwdnJfZmVuY2VfdW5yZWYoJmZlbmNlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKG5vX3dh aXQpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXQgPSBpcHZyX2ZlbmNlX3dhaXRfc2VxKGRldl9w cml2LCBmZW5jZS0+c2VxLCBpbnRyKTsKKwlpZiAocmV0KSB7CisJCWlmIChyZXQgPT0gLUVERUFE TEspIHsKKwkJCXRyYWNlX2lwdnJfZmVuY2Vfd2FpdF9sb2NrdXAoZmVuY2UsCisJCQkJCWF0b21p Y19yZWFkKCZkZXZfcHJpdi0+ZmVuY2VfZHJ2LnNpZ25hbGVkX3NlcSksCisJCQkJCWRldl9wcml2 LT5mZW5jZV9kcnYuc3luY19zZXEpOworCQkJaXB2cl9mZW5jZV9sb2NrdXAoZGV2X3ByaXYsIGZl bmNlKTsKKwkJfQorCQlyZXR1cm4gcmV0OworCX0KKwl0cmFjZV9pcHZyX2ZlbmNlX3dhaXRfZW5k KGZlbmNlLAorCQkJYXRvbWljX3JlYWQoJmRldl9wcml2LT5mZW5jZV9kcnYuc2lnbmFsZWRfc2Vx KSwKKwkJCWRldl9wcml2LT5mZW5jZV9kcnYuc3luY19zZXEpOworCWZlbmNlLT5zZXEgPSBJUFZS X0ZFTkNFX1NJR05BTEVEX1NFUTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGlwdnJfZmVu Y2VfZHJpdmVyX2luaXQgLSBpbml0IHRoZSBmZW5jZSBkcml2ZXIKKyAqCisgKiBAZGV2X3ByaXY6 IGlwdnIgZGV2aWNlIHBvaW50ZXIKKyAqCisgKiBJbml0IHRoZSBmZW5jZSBkcml2ZXIsIHdpbGwg bm90IGZhaWwKKyAqLwordm9pZCBpcHZyX2ZlbmNlX2RyaXZlcl9pbml0KHN0cnVjdCBkcm1faXB2 cl9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPmZlbmNl X2Rydi5mZW5jZV9sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXZfcHJpdi0+ZmVuY2Vf cXVldWUpOworCWRldl9wcml2LT5mZW5jZV9kcnYuc3luY19zZXEgPSAwOworCWF0b21pY19zZXQo JmRldl9wcml2LT5mZW5jZV9kcnYuc2lnbmFsZWRfc2VxLCAwKTsKKwlkZXZfcHJpdi0+ZmVuY2Vf ZHJ2Lmxhc3RfYWN0aXZpdHkgPSBqaWZmaWVzOworCWRldl9wcml2LT5mZW5jZV9kcnYuaW5pdGlh bGl6ZWQgPSBmYWxzZTsKK30KKworLyoqCisgKiBpcHZyX2ZlbmNlX3dhaXRfZW1wdHlfbG9ja2Vk IC0gd2FpdCBmb3IgYWxsIGZlbmNlcyB0byBzaWduYWwKKyAqCisgKiBAZGV2X3ByaXY6IGlwdnIg ZGV2aWNlIHBvaW50ZXIKKyAqCisgKiBXYWl0IGZvciBhbGwgZmVuY2VzIHRvIGJlIHNpZ25hbGxl ZC4KKyAqLwordm9pZCBpcHZyX2ZlbmNlX3dhaXRfZW1wdHlfbG9ja2VkKHN0cnVjdCBkcm1faXB2 cl9wcml2YXRlICpkZXZfcHJpdikKK3sKKwl1MTYgc2VxOworCisJc2VxID0gZGV2X3ByaXYtPmZl bmNlX2Rydi5zeW5jX3NlcTsKKworCXdoaWxlKDEpIHsKKwkJaW50IHJldDsKKwkJcmV0ID0gaXB2 cl9mZW5jZV93YWl0X3NlcShkZXZfcHJpdiwgc2VxLCBmYWxzZSk7CisJCWlmIChyZXQgPT0gMCkg eworCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKHJldCA9PSAtRURFQURMSykgeworCQkJaXB2cl9m ZW5jZV9sb2NrdXAoZGV2X3ByaXYsIE5VTEwpOworCQkJSVBWUl9ERUJVR19XQVJOKCJMb2NrdXAg Zm91bmQgd2FpdGluZyBmb3Igc2VxICVkLlxuIiwKKwkJCQkJc2VxKTsKKwkJCXJldHVybjsKKwkJ fSBlbHNlIHsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorfQorCisvKioKKyAqIGlwdnJfZmVuY2Vf ZHJpdmVyX2ZpbmkgLSB0ZWFyIGRvd24gdGhlIGZlbmNlIGRyaXZlcgorICogZm9yIGFsbCBwb3Nz aWJsZSByaW5ncy4KKyAqCisgKiBAZGV2X3ByaXY6IGlwdnIgZGV2aWNlIHBvaW50ZXIKKyAqCisg KiBUZWFyIGRvd24gdGhlIGZlbmNlIGRyaXZlciBmb3IgYWxsIHBvc3NpYmxlIHJpbmdzIChhbGwg YXNpY3MpLgorICovCit2b2lkIGlwdnJfZmVuY2VfZHJpdmVyX2Zpbmkoc3RydWN0IGRybV9pcHZy X3ByaXZhdGUgKmRldl9wcml2KQoreworCWlmICghZGV2X3ByaXYtPmZlbmNlX2Rydi5pbml0aWFs aXplZCkKKwkJcmV0dXJuOworCWlwdnJfZmVuY2Vfd2FpdF9lbXB0eV9sb2NrZWQoZGV2X3ByaXYp OworCXdha2VfdXBfYWxsKCZkZXZfcHJpdi0+ZmVuY2VfcXVldWUpOworCWRldl9wcml2LT5mZW5j ZV9kcnYuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKK30KKworLyoqCisgKiBpcHZyX2ZlbmNlX3JlZiAt IHRha2UgYSByZWYgb24gYSBmZW5jZQorICoKKyAqIEBmZW5jZTogZmVuY2Ugb2JqZWN0CisgKgor ICogVGFrZSBhIHJlZmVyZW5jZSBvbiBhIGZlbmNlIChhbGwgYXNpY3MpLgorICogUmV0dXJucyB0 aGUgZmVuY2UuCisgKi8KK3N0cnVjdCBpcHZyX2ZlbmNlICppcHZyX2ZlbmNlX3JlZihzdHJ1Y3Qg aXB2cl9mZW5jZSAqZmVuY2UpCit7CisJa3JlZl9nZXQoJmZlbmNlLT5rcmVmKTsKKwlyZXR1cm4g ZmVuY2U7Cit9CisKKy8qKgorICogaXB2cl9mZW5jZV91bnJlZiAtIHJlbW92ZSBhIHJlZiBvbiBh IGZlbmNlCisgKgorICogQGZlbmNlOiBpcHZyIGZlbmNlIG9iamVjdAorICoKKyAqIFJlbW92ZSBh IHJlZmVyZW5jZSBvbiBhIGZlbmNlLCBpZiByZWYgPT0gMCwgZGVzdG9yeSB0aGUgZmVuY2UuCisg Ki8KK3ZvaWQgaXB2cl9mZW5jZV91bnJlZihzdHJ1Y3QgaXB2cl9mZW5jZSAqKmZlbmNlKQorewor CXN0cnVjdCBpcHZyX2ZlbmNlICp0bXAgPSAqZmVuY2U7CisKKwkqZmVuY2UgPSBOVUxMOworCWlm ICh0bXApIHsKKwkJa3JlZl9wdXQoJnRtcC0+a3JlZiwgJmlwdnJfZmVuY2VfZGVzdHJveSk7CisJ fQorfQorCisvKioKKyAqIGlwdnJfZmVuY2VfYnVmZmVyX29iamVjdHMgLSBiaW5kIGZlbmNlIHRv IGJ1ZmZlciBsaXN0CisgKgorICogQGxpc3Q6IHZhbGlkYXRpb24gYnVmZmVyIGxpc3QKKyAqIEBm ZW5jZTogaXB2ciBmZW5jZSBvYmplY3QKKyAqCisgKiBiaW5kIGEgZmVuY2UgdG8gYWxsIG9iaiBp biB0aGUgdmFsaWRhdGlvbiBsaXN0CisgKi8KK3ZvaWQKK2lwdnJfZmVuY2VfYnVmZmVyX29iamVj dHMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgc3RydWN0IGlwdnJfZmVuY2UgKmZlbmNlKQorewor CXN0cnVjdCBpcHZyX3ZhbGlkYXRlX2J1ZmZlciAqZW50cnk7CisJc3RydWN0IGRybV9pcHZyX2dl bV9vYmplY3QgKm9iajsKKworCWlmIChsaXN0X2VtcHR5KGxpc3QpKQorCQlyZXR1cm47CisKKwls aXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBsaXN0LCBoZWFkKSB7CisJCW9iaiA9IGVudHJ5LT5p cHZyX2dlbV9ibzsKKwkJLyoqCisJCSAqIGRvIG5vdCB1cGRhdGUgZmVuY2UgaWYgdmFsX2FyZ3Mg c3BlY2lmaWVzIHNvCisJCSAqLworCQlpZiAoZW50cnktPnZhbF9yZXEuZmxhZ3MgJiBJUFZSX0VY RUNfT0JKRUNUX05FRURfRkVOQ0UpIHsKKwkJCWVudHJ5LT5vbGRfZmVuY2UgPSBvYmotPmZlbmNl OworCQkJb2JqLT5mZW5jZSA9IGlwdnJfZmVuY2VfcmVmKGZlbmNlKTsKKwkJCWlmIChlbnRyeS0+ b2xkX2ZlbmNlKQorCQkJCWlwdnJfZmVuY2VfdW5yZWYoJmVudHJ5LT5vbGRfZmVuY2UpOworCQl9 CisJCWVsc2UgeworCQkJSVBWUl9ERUJVR19HRU5FUkFMKCJvYmogMHglbHggbWFya2VkIGFzIG5v bi1mZW5jZVxuIiwKKwkJCQlpcHZyX2dlbV9vYmplY3RfbW11X29mZnNldChvYmopKTsKKwkJfQor CQlpcHZyX2JvX3VucmVzZXJ2ZShvYmopOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pcHZyL2lwdnJfZmVuY2UuaCBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZmVuY2Uu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDFkNmI1NQotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZmVuY2UuaApAQCAtMCwwICsxLDc0 IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlwdnJfZmVuY2UuaDogSVBWUiBoZWFkZXIgZmls ZSBmb3IgZmVuY2UgaGFuZGxpbmcKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29y cG9yYXRpb24sIEhpbGxzYm9ybywgT1IsIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9V VAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Yg TUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMu CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xp biBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIEF1 dGhvcnM6CisgKiAgICBGZWkgSmlhbmcgPGZlaS5qaWFuZ0BpbnRlbC5jb20+CisgKiAgICBZYW8g Q2hlbmcgPHlhby5jaGVuZ0BpbnRlbC5jb20+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisj aWZuZGVmIF9JUFZSX0ZFTkNFX0hfCisjZGVmaW5lIF9JUFZSX0ZFTkNFX0hfCisKKyNpbmNsdWRl ICJpcHZyX2Rydi5oIgorCisvKiBzZXFfYWZ0ZXIoYSxiKSByZXR1cm5zIHRydWUgaWYgdGhlIHNl cSBhIGlzIGFmdGVyIHNlcSBiLiovCisjZGVmaW5lIGlwdnJfc2VxX2FmdGVyKGEsYikgXAorICAg ICh0eXBlY2hlY2sodTE2LCBhKSAmJiBcCisgICAgIHR5cGVjaGVjayh1MTYsIGIpICYmIFwKKyAg ICAgKChzMTYpKGEgLSBiKSA+IDApKQorCitlbnVtIGlwdnJfY21kX3N0YXR1cyB7CisgICBJUFZS X0NNRF9TVUNDRVNTLAorICAgSVBWUl9DTURfRkFJTEVELAorICAgSVBWUl9DTURfTE9DS1VQLAor ICAgSVBWUl9DTURfU0tJUAorfTsKKworI2RlZmluZSBJUFZSX0ZFTkNFX0pJRkZJRVNfVElNRU9V VAkJKEhaIC8gMikKKy8qIGZlbmNlIHNlcSBhcmUgc2V0IHRvIHRoaXMgbnVtYmVyIHdoZW4gc2ln bmFsZWQgKi8KKyNkZWZpbmUgSVBWUl9GRU5DRV9TSUdOQUxFRF9TRVEJCTBMTAorCitzdHJ1Y3Qg aXB2cl9mZW5jZSB7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2OworCXN0cnVj dCBrcmVmIGtyZWY7CisJLyogcHJvdGVjdGVkIGJ5IGRldl9wcml2LT5mZW5jZV9kcnYuZmVuY2Vf bG9jayAqLworCXUxNiBzZXE7CisJLyogZmllbGRzIGZvciB1c3JmZW5jZSAqLworCXN0cnVjdCBm aWxlICpmaWxlOworCWNoYXIgbmFtZVszMl07Cit9OworCitpbnQgaXB2cl9mZW5jZV93YWl0KHN0 cnVjdCBpcHZyX2ZlbmNlICpmZW5jZSwgYm9vbCBpbnRyLCBib29sIG5vX3dhaXQpOworCit2b2lk IGlwdnJfZmVuY2VfcHJvY2VzcyhzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYsIHUx NiBzZXEsIHU4IGVycik7CisKK3ZvaWQgaXB2cl9mZW5jZV9kcml2ZXJfaW5pdChzdHJ1Y3QgZHJt X2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYpOworCit2b2lkIGlwdnJfZmVuY2VfZHJpdmVyX2Zpbmko c3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2KTsKKworaW50IGlwdnJfZmVuY2VfY3Jl YXRlKHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiwgc3RydWN0IGlwdnJfZmVuY2Ug KipmZW5jZSk7CisKK3ZvaWQgaXB2cl9mZW5jZV9idWZmZXJfb2JqZWN0cyhzdHJ1Y3QgbGlzdF9o ZWFkICpsaXN0LCBzdHJ1Y3QgaXB2cl9mZW5jZSAqZmVuY2UpOworCit2b2lkIGlwdnJfZmVuY2Vf dW5yZWYoc3RydWN0IGlwdnJfZmVuY2UgKipmZW5jZSk7CisKK3ZvaWQgaXB2cl9mZW5jZV93YWl0 X2VtcHR5X2xvY2tlZChzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYpOworCisjZW5k aWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZ2VtLmMgYi9kcml2ZXJz L2dwdS9kcm0vaXB2ci9pcHZyX2dlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjQ1MzZkZDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZy X2dlbS5jCkBAIC0wLDAgKzEsMzQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlwdnJfZ2Vt LmM6IElQVlIgaG9vayBmaWxlIGZvciBnZW0gaW9jdGxzCisgKgorICogQ29weXJpZ2h0IChjKSAy MDE0IEludGVsIENvcnBvcmF0aW9uLCBIaWxsc2Jvcm8sIE9SLCBVU0EKKyAqIEFsbCBSaWdodHMg UmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQg Y29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9u IDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1 bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICog bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3Jh bTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAor ICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT QS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRmVpIEppYW5nIDxmZWkuamlhbmdAaW50ZWwuY29t PgorICogICAgWWFvIENoZW5nIDx5YW8uY2hlbmdAaW50ZWwuY29tPgorICoKKyAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKworI2luY2x1ZGUgImlwdnJfZ2VtLmgiCisjaW5jbHVkZSAiaXB2cl9iby5oIgor I2luY2x1ZGUgImlwdnJfZmVuY2UuaCIKKyNpbmNsdWRlICJpcHZyX2V4ZWMuaCIKKyNpbmNsdWRl ICJpcHZyX3RyYWNlLmgiCisjaW5jbHVkZSA8ZHJtX2dlbS5oPgorI2luY2x1ZGUgPGxpbnV4L3Ns YWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+Cisj aW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorCisjZGVmaW5lIFZMVl9JUFZSX0RFVl9JRCAoMHhm MzEpCisKK2ludAoraXB2cl9jb250ZXh0X2NyZWF0ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAorCQkJdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3Ry dWN0IGRybV9pcHZyX2NvbnRleHRfY3JlYXRlICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2lw dnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpcHZyX2Nv bnRleHQgKmlwdnJfY3R4ICA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJaW50 IGN0eF9pZCwgcmV0ID0gMDsKKworCUlQVlJfREVCVUdfRU5UUlkoImVudGVyXG4iKTsKKwkvKiBh ZGQgdmlkZW8gZGVjb2RlIGNvbnRleHQgKi8KKwlpcHZyX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKHN0 cnVjdCBpcHZyX2NvbnRleHQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoaXB2cl9jdHggID09IE5VTEwp CisJCXJldHVybiAtRU5PTUVNOworCisJY3R4X2lkID0gaWRyX2FsbG9jKCZkZXZfcHJpdi0+aXB2 cl9jdHhfaWRyLCBpcHZyX2N0eCAsCisJCQkgICBJUFZSX01JTl9DT05URVhUX0lELCBJUFZSX01B WF9DT05URVhUX0lELAorCQkJICAgR0ZQX0tFUk5FTCk7CisJaWYgKGN0eF9pZCA8IDApCisJCXJl dHVybiAtRU5PTUVNOworCWlwdnJfY3R4LT5jdHhfaWQgPSBjdHhfaWQ7CisKKwlJTklUX0xJU1Rf SEVBRCgmaXB2cl9jdHgtPmhlYWQpOworCWlwdnJfY3R4LT5jdHhfdHlwZSA9IGFyZ3MtPmN0eF90 eXBlOworCWlwdnJfY3R4LT5pcHZyX2Zwcml2ID0gZmlsZV9wcml2LT5kcml2ZXJfcHJpdjsKKwlz cGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlwdnJfY3R4X2xvY2ssIGlycV9mbGFncyk7CisJ bGlzdF9hZGQoJmlwdnJfY3R4IC0+aGVhZCwgJmRldl9wcml2LT5pcHZyX2N0eF9saXN0KTsKKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+aXB2cl9jdHhfbG9jaywgaXJxX2ZsYWdz KTsKKwlhcmdzLT5jdHhfaWQgPSBjdHhfaWQ7CisJSVBWUl9ERUJVR19JTklUKCJhZGQgY3R4IHR5 cGUgMHgleCwgY3R4X2lkIGlzICVkLlxuIiwKKwkJCWlwdnJfY3R4LT5jdHhfdHlwZSwgY3R4X2lk KTsKKwkvKgorCSAqIHRvZG86IG9ubHkgb25lIHRpbGluZyByZWdpb24gaXMgc3VwcG9ydGVkIG5v dywKKwkgKiBtYXliZSB3ZSBuZWVkIGNyZWF0ZSBhZGRpdGlvbmFsIHRpbGluZyByZWdpb24gZm9y IHJvdGF0aW9uIGNhc2UsCisJICogd2hpY2ggaGFzIGRpZmZlcmVudCB0aWxpbmcgc3RyaWRlCisJ ICovCisJaWYgKChhcmdzLT50aWxpbmdfc2NoZW1lID09IDAgJiYgYXJncy0+dGlsaW5nX3N0cmlk ZSA8PSAzKSB8fAorCQkoYXJncy0+dGlsaW5nX3NjaGVtZSA9PSAxICYmIGFyZ3MtPnRpbGluZ19z dHJpZGUgPD0gMikpIHsKKwkJaXB2cl9jdHgtPnRpbGluZ19zY2hlbWUgPSBhcmdzLT50aWxpbmdf c2NoZW1lOworCQlpcHZyX2N0eC0+dGlsaW5nX3N0cmlkZSA9IGFyZ3MtPnRpbGluZ19zdHJpZGU7 CisJfSBlbHNlIHsKKwkJSVBWUl9ERUJVR19XQVJOKCJ1bnN1cHBvcnRlZCB0aWxpbmcgc2NoZW1l ICVkIGFuZCBzdGlkZSAlZC5cbiIsCisJCQlhcmdzLT50aWxpbmdfc2NoZW1lLCBhcmdzLT50aWxp bmdfc3RyaWRlKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitp bnQKK2lwdnJfY29udGV4dF9kZXN0cm95X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJ CQl2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJt X2lwdnJfY29udGV4dF9kZXN0cm95ICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJp dmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faXB2cl9maWxl X3ByaXZhdGUgKmZwcml2ID0gZmlsZV9wcml2LT5kcml2ZXJfcHJpdjsKKwlzdHJ1Y3QgdmVkX3By aXZhdGUgKnZlZF9wcml2ID0gZGV2X3ByaXYtPnZlZF9wcml2YXRlOworCXN0cnVjdCBpcHZyX2Nv bnRleHQgKmlwdnJfY3R4ICA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwlJ UFZSX0RFQlVHX0VOVFJZKCJlbnRlclxuIik7CisJaXB2cl9jdHggPSAoc3RydWN0IGlwdnJfY29u dGV4dCAqKQorCQkJaWRyX2ZpbmQoJmRldl9wcml2LT5pcHZyX2N0eF9pZHIsIGFyZ3MtPmN0eF9p ZCk7CisJaWYgKCFpcHZyX2N0eCAgfHwgKGlwdnJfY3R4LT5pcHZyX2Zwcml2ICE9IGZpbGVfcHJp di0+ZHJpdmVyX3ByaXYpKSB7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCS8qKgorCSAqIGZp eG1lOiByZW1vdmUgdGhpcyB3b3JrLWFyb3VuZCAoV0EgdGhlIGlzc3VlIHRoYXQgY2FsbGluZwor CSAqIGN0eF9kZXN0cm95X2lvY3RsIHdpdGggcXVldWVkIGNtZCBtaWdodCBjYXVzZSBzdGF0ZSBt YWNoaW5lIGlzc3VlKS4KKwkgKiB3ZSBzaG91bGQgd2FpdCBmb3Igb25seSB0aGUgY21kcyBzZW50 IGZyb20gdGhpcyBjb250ZXh0IGluc3RlYWQgb2YKKwkgKiBhbGwgY21kcworCSAqLworCWlwdnJf ZmVuY2Vfd2FpdF9lbXB0eV9sb2NrZWQoZGV2X3ByaXYpOworCisJSVBWUl9ERUJVR19QTSgiVmlk ZW86cmVtb3ZlIGNvbnRleHQgdHlwZSAweCV4XG4iLCBpcHZyX2N0eC0+Y3R4X3R5cGUpOworCW11 dGV4X2xvY2soJnZlZF9wcml2LT52ZWRfbXV0ZXgpOworCWlmICh2ZWRfcHJpdi0+aXB2cl9jdHgg PT0gaXB2cl9jdHggKQorCQl2ZWRfcHJpdi0+aXB2cl9jdHggPSBOVUxMOworCW11dGV4X3VubG9j aygmdmVkX3ByaXYtPnZlZF9tdXRleCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYt PmlwdnJfY3R4X2xvY2ssIGlycV9mbGFncyk7CisJbGlzdF9kZWwoJmlwdnJfY3R4LT5oZWFkKTsK KwlmcHJpdi0+Y3R4X2lkID0gSVBWUl9DT05URVhUX0lOVkFMSURfSUQ7CisJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlwdnJfY3R4X2xvY2ssIGlycV9mbGFncyk7CisKKwlpZHJf cmVtb3ZlKCZkZXZfcHJpdi0+aXB2cl9jdHhfaWRyLCBpcHZyX2N0eC0+Y3R4X2lkKTsKKworCWtm cmVlKGlwdnJfY3R4KTsKKwlyZXR1cm4gMDsKK30KKworaW50CitpcHZyX21pc2NfaW9jdGwoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmls ZV9wcml2KQoreworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2 X3ByaXZhdGU7CisJc3RydWN0IGRybV9pcHZyX21pc2MgKmFyZ3MgPSBkYXRhOworCWludCByZXQg PSAwOworCXU2NCB2YWx1ZTsKKworCUlQVlJfREVCVUdfRU5UUlkoImVudGVyXG4iKTsKKwlpZiAo IWRldl9wcml2KSB7CisJCUlQVlJfREVCVUdfV0FSTigiY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6 YXRpb24uXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXN3aXRjaCAoYXJncy0+a2V5KSB7 CisJY2FzZSBJUFZSX0RFVklDRV9JTkZPOiB7CisJCS8qIG9ubHkgdmx2IHN1cHBvcnRlZCBub3cK KwkJICovCisJCXUzMiBkZXZpY2VfaW5mbyA9IFZMVl9JUFZSX0RFVl9JRCA8PCAxNjsKKwkJcmV0 ID0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSgodW5zaWduZWQgbG9uZylhcmdzLT52YWx1 ZSksCisJCQkmZGV2aWNlX2luZm8sIHNpemVvZihkZXZpY2VfaW5mbykpOworCQlicmVhazsKKwl9 CisJY2FzZSBJUFZSX1VQREFURV9USUxJTkc6IHsKKwkJc3RydWN0IGRybV9pcHZyX3VwZGF0ZV90 aWxpbmcgdGlsaW5nOworCQlzdHJ1Y3QgaXB2cl9jb250ZXh0ICppcHZyX2N0eCAgPSBOVUxMOwor CQlyZXQgPSBjb3B5X2Zyb21fdXNlcigmdGlsaW5nLAorCQkJCSh2b2lkIF9fdXNlciAqKSgodW5z aWduZWQgbG9uZylhcmdzLT5hcmcpLAorCQkJCXNpemVvZih0aWxpbmcpKTsKKwkJaWYgKHJldCkK KwkJCWJyZWFrOworCisJCWlwdnJfY3R4ICA9IChzdHJ1Y3QgaXB2cl9jb250ZXh0ICopCisJCQlp ZHJfZmluZCgmZGV2X3ByaXYtPmlwdnJfY3R4X2lkciwgdGlsaW5nLmN0eF9pZCk7CisJCWlmICgh aXB2cl9jdHggfHwKKwkJCShpcHZyX2N0eC0+aXB2cl9mcHJpdiAhPSBmaWxlX3ByaXYtPmRyaXZl cl9wcml2KSkgeworCQkJSVBWUl9ERUJVR19XQVJOKCJmYWlsIHRvIGZpbmQgY3R4ICVkIiwgdGls aW5nLmN0eF9pZCk7CisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJfQorCQlJUFZSX0RFQlVHX0dFTkVS QUwoIlZpZGVvOiB1cGRhdGUgdmlkZW8gdGlsaW5nIGZvciBjdHggJWQsICIKKwkJCSJvbGQgdGls aW5nIHNjaGVtZSBpcyAlZCwgb2xkIHRpbGluZyBzdHJpZGUgaXMgJWQsICIKKwkJCSJuZXcgdGls aW5nIHNjaGVtZSBpcyAlZCwgbmV3IHRpbGluZyBzdHJpZGUgaXMgJWQuXG4iLAorCQkJdGlsaW5n LmN0eF9pZCwKKwkJCWlwdnJfY3R4IC0+dGlsaW5nX3NjaGVtZSwgaXB2cl9jdHggLT50aWxpbmdf c3RyaWRlLAorCQkJdGlsaW5nLnRpbGluZ19zY2hlbWUsIHRpbGluZy50aWxpbmdfc3RyaWRlKTsK KwkJaWYgKCh0aWxpbmcudGlsaW5nX3NjaGVtZSA9PSAwICYmIHRpbGluZy50aWxpbmdfc3RyaWRl IDw9IDMpIHx8CisJCSh0aWxpbmcudGlsaW5nX3NjaGVtZSA9PSAxICYmIHRpbGluZy50aWxpbmdf c3RyaWRlIDw9IDIpKSB7CisJCQlpcHZyX2N0eCAtPnRpbGluZ19zY2hlbWUgPSB0aWxpbmcudGls aW5nX3NjaGVtZTsKKwkJCWlwdnJfY3R4IC0+dGlsaW5nX3N0cmlkZSA9IHRpbGluZy50aWxpbmdf c3RyaWRlOworCQl9IGVsc2UgeworCQkJSVBWUl9FUlJPUigidW5zdXBwb3J0ZWQgdGlsZSBzY2hl bWU6ICVkLCBzdGlkZTogJWQuXG4iLAorCQkJCXRpbGluZy50aWxpbmdfc2NoZW1lLCB0aWxpbmcu dGlsaW5nX3N0cmlkZSk7CisJCQlyZXQgPSAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCX0KKwlk ZWZhdWx0OgorCQlpZiAoY29weV9mcm9tX3VzZXIoJnZhbHVlLAorCQkJCSh2b2lkIF9fdXNlciAq KSgodW5zaWduZWQgbG9uZylhcmdzLT52YWx1ZSksCisJCQkJc2l6ZW9mKHZhbHVlKSkpIHsKKwkJ CUlQVlJfREVCVUdfV0FSTigiY29weV9mcm9tX3VzZXIgZmFpbGVkXG4iKTsKKwkJCXJldHVybiAt RUZBVUxUOworCQl9CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopKCh1bnNpZ25l ZCBsb25nKWFyZ3MtPnZhbHVlKSwKKwkJCQkmdmFsdWUsIHNpemVvZih2YWx1ZSkpKSB7CisJCQlJ UFZSX0RFQlVHX1dBUk4oImNvcHlfdG9fdXNlciBmYWlsZWRcbiIpOworCQkJcmV0dXJuIC1FRkFV TFQ7CisJCX0KKwkJcmV0ID0gLUVGQVVMVDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9 CisKK2ludCBpcHZyX2dlbV9jcmVhdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9p ZCAqZGF0YSwKKwkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlpbnQgcmV0Owor CXN0cnVjdCBkcm1faXB2cl9nZW1fY3JlYXRlICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2lw dnJfZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7CisJaWYgKGFyZ3MtPmNhY2hlX2xldmVsID49IElQVlJfQ0FDSEVf TUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoYXJncy0+c2l6ZSA9PSAwKQorCQlyZXR1cm4g LUVJTlZBTDsKKwlhcmdzLT5yb3VuZGVkX3NpemUgPSByb3VuZHVwKGFyZ3MtPnNpemUsIFBBR0Vf U0laRSk7CisJb2JqID0gaXB2cl9nZW1fY3JlYXRlKGRldl9wcml2LCBhcmdzLT5yb3VuZGVkX3Np emUsIGFyZ3MtPnRpbGluZywKKwkJCSAgICAgIGFyZ3MtPmNhY2hlX2xldmVsKTsKKwlpZiAoSVNf RVJSKG9iaikpIHsKKwkJcmV0ID0gUFRSX0VSUihvYmopOworCQlnb3RvIG91dDsKKwl9CisJYXJn cy0+bW11X29mZnNldCA9IGlwdnJfZ2VtX29iamVjdF9tbXVfb2Zmc2V0KG9iaik7CisJLyogY3Jl YXRlIGhhbmRsZSAqLworCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsICZv YmotPmJhc2UsICZhcmdzLT5oYW5kbGUpOworCWlmIChyZXQpIHsKKwkJSVBWUl9FUlJPUigiY291 bGQgbm90IGFsbG9jYXRlIG1tYXAgb2Zmc2V0OiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXRfZnJl ZTsKKwl9CisJLyogZHJvcCByZWZlcmVuY2UgZnJvbSBhbGxvY2F0ZSAtIGhhbmRsZSBob2xkcyBp dCBub3cgKi8KKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmb2JqLT5iYXNl KTsKKwkvKiBjcmVhdGUgbWFwIG9mZnNldCAqLworCXJldCA9IGRybV9nZW1fY3JlYXRlX21tYXBf b2Zmc2V0KCZvYmotPmJhc2UpOworCWlmIChyZXQpIHsKKwkJSVBWUl9FUlJPUigiY291bGQgbm90 IGFsbG9jYXRlIG1tYXAgb2Zmc2V0OiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXRfZnJlZTsKKwl9 CisJYXJncy0+bWFwX29mZnNldCA9IGRybV92bWFfbm9kZV9vZmZzZXRfYWRkcigmb2JqLT5iYXNl LnZtYV9ub2RlKTsKKwlJUFZSX0RFQlVHX0dFTkVSQUwoImJvIGNyZWF0ZSBkb25lLCBoYW5kbGU6 ICV1LCB2cHUgb2Zmc2V0OiAweCVsbHguXG4iLAorCQlhcmdzLT5oYW5kbGUsIGFyZ3MtPm1tdV9v ZmZzZXQpOworCXJldHVybiAwOworb3V0X2ZyZWU6CisJaXB2cl9nZW1fZnJlZV9vYmplY3QoJm9i ai0+YmFzZSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworaW50IGlwdnJfZ2VtX2J1c3lfaW9j dGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQlzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfZ2VtX2J1c3kgKmFyZ3MgPSBkYXRh OworCXN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmo7CisJaW50IHJldCA9IDA7CisKKwlv YmogPSB0b19pcHZyX2JvKGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJn cy0+aGFuZGxlKSk7CisJaWYgKCFvYmogfHwgJm9iai0+YmFzZSA9PSBOVUxMKSB7CisJCXJldHVy biAtRU5PRU5UOworCX0KKwlJUFZSX0RFQlVHX0dFTkVSQUwoIkNoZWNraW5nIGJvICVwIChmZW5j ZSAlcCBzZXEgJXUpIGJ1c3kgc3RhdHVzXG4iLAorICAgICAgICBvYmosIG9iai0+ZmVuY2UsICgo b2JqLT5mZW5jZSk/IG9iai0+ZmVuY2UtPnNlcTogMCkpOworCisJcmV0ID0gaXB2cl9ib19yZXNl cnZlKG9iaiwgdHJ1ZSwgZmFsc2UpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCWdvdG8g b3V0OworCXJldCA9IGlwdnJfZmVuY2Vfd2FpdChvYmotPmZlbmNlLCB0cnVlLCB0cnVlKTsKKwlp cHZyX2JvX3VucmVzZXJ2ZShvYmopOworCisgICAgYXJncy0+YnVzeSA9IHJldD8gMTogMDsKK291 dDoKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmb2JqLT5iYXNlKTsKKwly ZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwdnJfZ2VtX3dhaXRfaW9jdGwgLSBpbXBsZW1lbnRz IERSTV9JT0NUTF9JUFZSX0dFTV9XQUlUCisgKiBARFJNX0lPQ1RMX0FSR1M6IHN0YW5kYXJkIGlv Y3RsIGFyZ3VtZW50cworICoKKyAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBlbHNlIGFuIGVy cm9yIGlzIHJldHVybmVkIHdpdGggdGhlIHJlbWFpbmluZyB0aW1lIGluCisgKiB0aGUgdGltZW91 dCBwYXJhbWV0ZXIuCisgKiAgLUVUSU1FOiBvYmplY3QgaXMgc3RpbGwgYnVzeSBhZnRlciB0aW1l b3V0CisgKiAgLUVSRVNUQVJUU1lTOiBzaWduYWwgaW50ZXJydXB0ZWQgdGhlIHdhaXQKKyAqICAt RU5PTkVOVDogb2JqZWN0IGRvZXNuJ3QgZXhpc3QKKyAqIEFsc28gcG9zc2libGUsIGJ1dCByYXJl OgorICogIC1FQUdBSU46IFZQVSB3ZWRnZWQKKyAqICAtRU5PTUVNOiBkYW1uCisgKiAgLUVOT0RF VjogSW50ZXJuYWwgSVJRIGZhaWwKKyAqICAtRT86IFRoZSBhZGQgcmVxdWVzdCBmYWlsZWQKKyAq CisgKiBUaGUgd2FpdCBpb2N0bCB3aXRoIGEgdGltZW91dCBvZiAwIHJlaW1wbGVtZW50cyB0aGUg YnVzeSBpb2N0bC4gV2l0aCBhbnkKKyAqIG5vbi16ZXJvIHRpbWVvdXQgcGFyYW1ldGVyIHRoZSB3 YWl0IGlvY3RsIHdpbGwgd2FpdCBmb3IgdGhlIGdpdmVuIG51bWJlciBvZgorICogbmFub3NlY29u ZHMgb24gYW4gb2JqZWN0IGJlY29taW5nIHVuYnVzeS4gU2luY2UgdGhlIHdhaXQgaXRzZWxmIGRv ZXMgc28KKyAqIHdpdGhvdXQgaG9sZGluZyBzdHJ1Y3RfbXV0ZXggdGhlIG9iamVjdCBtYXkgYmVj b21lIHJlLWJ1c2llZCBiZWZvcmUgdGhpcworICogZnVuY3Rpb24gY29tcGxldGVzLiBBIHNpbWls YXIgYnV0IHNob3J0ZXIgKiByYWNlIGNvbmRpdGlvbiBleGlzdHMgaW4gdGhlIGJ1c3kKKyAqIGlv Y3RsCisgKi8KK2ludCBpcHZyX2dlbV93YWl0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs CisJCQkJdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0 IGRybV9pcHZyX2dlbV93YWl0ICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29i amVjdCAqb2JqOworCWludCByZXQgPSAwOworCisJSVBWUl9ERUJVR19FTlRSWSgid2FpdCAlZCBi dWZmZXIgdG8gZmluaXNoIGV4ZWN1dGlvbi5cbiIsIGFyZ3MtPmhhbmRsZSk7CisJb2JqID0gdG9f aXB2cl9ibyhkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRs ZSkpOworCWlmICgmb2JqLT5iYXNlID09IE5VTEwpIHsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQor CisJcmV0ID0gaXB2cl9ib19yZXNlcnZlKG9iaiwgdHJ1ZSwgZmFsc2UpOworCWlmICh1bmxpa2Vs eShyZXQgIT0gMCkpCisJCWdvdG8gb3V0OworCisJcmV0ID0gaXB2cl9mZW5jZV93YWl0KG9iai0+ ZmVuY2UsIHRydWUsIGZhbHNlKTsKKworCWlwdnJfYm9fdW5yZXNlcnZlKG9iaik7CisKK291dDoK Kwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmb2JqLT5iYXNlKTsKKwlyZXR1 cm4gcmV0OworfQorCitpbnQgaXB2cl9nZW1fbW1hcF9vZmZzZXRfaW9jdGwoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKKwkJCQl2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikK K3sKKwlpbnQgcmV0OworCXN0cnVjdCBkcm1faXB2cl9nZW1fbW1hcF9vZmZzZXQgKmFyZ3MgPSBk YXRhOworCXN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmo7CisKKwlJUFZSX0RFQlVHX0VO VFJZKCJnZXR0aW5nIG1tYXAgb2Zmc2V0IGZvciBCTyAldS5cbiIsIGFyZ3MtPmhhbmRsZSk7CisJ b2JqID0gdG9faXB2cl9ibyhkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFy Z3MtPmhhbmRsZSkpOworCisJLyogY3JlYXRlIG1hcCBvZmZzZXQgKi8KKwlyZXQgPSBkcm1fZ2Vt X2NyZWF0ZV9tbWFwX29mZnNldCgmb2JqLT5iYXNlKTsKKwlpZiAocmV0KSB7CisJCUlQVlJfRVJS T1IoImNvdWxkIG5vdCBhbGxvY2F0ZSBtbWFwIG9mZnNldDogJWRcbiIsIHJldCk7CisJCXJldHVy biByZXQ7CisJfQorCWFyZ3MtPm9mZnNldCA9IGRybV92bWFfbm9kZV9vZmZzZXRfYWRkcigmb2Jq LT5iYXNlLnZtYV9ub2RlKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pcHZyL2lwdnJfZ2VtLmggYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2dlbS5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxY2ExNzIKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2dlbS5oCkBAIC0wLDAgKzEsNDggQEAKKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgorICogaXB2cl9nZW0uaDogSVBWUiBoZWFkZXIgZmlsZSBmb3IgR0VN IGlvY3RscworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbiwgSGls bHNib3JvLCBPUiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJ VFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGgg Rmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczoKKyAqICAg IEZlaSBKaWFuZyA8ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqICAgIFlhbyBDaGVuZyA8eWFvLmNo ZW5nQGludGVsLmNvbT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0lQVlJf R0VNX0hfCisjZGVmaW5lIF9JUFZSX0dFTV9IXworCisjaW5jbHVkZSAiaXB2cl9kcnYuaCIKKwor aW50IGlwdnJfY29udGV4dF9jcmVhdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJ CXZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpcHZyX2NvbnRl eHRfZGVzdHJveV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJdm9pZCAqZGF0YSwg c3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGlwdnJfbWlzY19pb2N0bChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAorCQkJdm9pZCAqZGF0YSwJc3RydWN0IGRybV9maWxlICpmaWxlX3By aXYpOworaW50IGlwdnJfZ2VtX2V4ZWNidWZmZXJfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKKwkJCXZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpcHZy X2dlbV9idXN5X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQl2b2lkICpkYXRhLCBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaXB2cl9nZW1fY3JlYXRlX2lvY3RsKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQl2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGVfcHJpdik7CitpbnQgaXB2cl9nZW1fd2FpdF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAorCQkJdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGlwdnJf Z2VtX21tYXBfb2Zmc2V0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQl2b2lkICpk YXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9tbXUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lw dnJfbW11LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY4ZjM2NAotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfbW11LmMKQEAgLTAsMCAr MSw3NTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXB2cl9tbXUuYzogSVBWUiBNTVUgaGFu ZGxpbmcgdG8gc3VwcG9ydCBWRUQsIFZFQywgVlNQIGJ1ZmZlciBhY2Nlc3MKKyAqCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24sIEhpbGxzYm9ybywgT1IsIFVTQQorICog Q29weXJpZ2h0IChjKSBJbWFnaW5hdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZCwgVUsKKyAqIENv cHlyaWdodCAoYykgMjAwMyBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQ2VkYXIgUGFyaywgVGV4 YXMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1 bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3 aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3Rv biwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczoKKyAqICAgIEZlaSBKaWFuZyA8 ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqICAgIFlhbyBDaGVuZyA8eWFvLmNoZW5nQGludGVsLmNv bT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJpcHZyX21tdS5oIgorI2lu Y2x1ZGUgImlwdnJfZGVidWcuaCIKKworLyoKKyAqIENvZGUgZm9yIHRoZSBWRUQgTU1VCisgKiBB c3N1bWVzIHN5c3RlbSBwYWdlIHNpemUgaXMgc2FtZSB3aXRoIFZFRCAoNEtpQikuCisgKiBEb2Vz bid0IHdvcmsgZm9yIHRoZSBjYXNlIG9mIHBhZ2Ugc2l6ZSBtaXNtYXRjaC4KKyAqLworCisvKgor ICogY2xmbHVzaCBvbiBvbmUgcHJvY2Vzc29yIG9ubHk6CisgKiBjbGZsdXNoIHNob3VsZCBhcHBh cmVudGx5IGZsdXNoIHRoZSBjYWNoZSBsaW5lIG9uIGFsbCBwcm9jZXNzb3JzIGluIGFuCisgKiBT TVAgc3lzdGVtLgorICovCisKKy8qCisgKiBrbWFwIGF0b21pYzoKKyAqIFVzYWdlIG9mIHRoZSBz bG90cyBtdXN0IGJlIGNvbXBsZXRlbHkgZW5jYXBzdWxhdGVkIHdpdGhpbiBhIHNwaW5sb2NrLCBh bmQKKyAqIG5vIG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1heSBiZSB1c2luZyB0aGUgbG9ja3MgZm9y IG90aGVyIHB1cnBvc2VkIG1heSBiZQorICogY2FsbGVkIGZyb20gd2l0aGluIHRoZSBsb2NrZWQg cmVnaW9uLgorICogU2luY2UgdGhlIHNsb3RzIGFyZSBwZXIgcHJvY2Vzc29yLCB0aGlzIHdpbGwg Z3VhcmFudGVlIHRoYXQgd2UgYXJlIHRoZSBvbmx5CisgKiB1c2VyLgorICovCisKKy8qCisgKlBU RSdzIGFuZCBQREUncworICovCisjZGVmaW5lIElQVlJfUERFX01BU0sJCTB4MDAzRkZGRkYKKyNk ZWZpbmUgSVBWUl9QREVfU0hJRlQJCTIyCisjZGVmaW5lIElQVlJfUFRFX1NISUZUCQkxMgorI2Rl ZmluZSBJUFZSX1BURV9WQUxJRAkJMHgwMDAxCS8qIFBURSAvIFBERSB2YWxpZCAqLworI2RlZmlu ZSBJUFZSX1BURV9XTwkJCTB4MDAwMgkvKiBXcml0ZSBvbmx5ICovCisjZGVmaW5lIElQVlJfUFRF X1JPCQkJMHgwMDA0CS8qIFJlYWQgb25seSAqLworI2RlZmluZSBJUFZSX1BURV9DQUNIRUQJCTB4 MDAwOAkvKiBDUFUgY2FjaGUgY29oZXJlbnQgKi8KKworc3RydWN0IGlwdnJfbW11X3B0IHsKKwlz dHJ1Y3QgaXB2cl9tbXVfcGQgKnBkOworCXUzMiBpbmRleDsKKwl1MzIgY291bnQ7CisJc3RydWN0 IHBhZ2UgKnA7CisJdTMyICp2OworfTsKKworc3RydWN0IGlwdnJfbW11X3BkIHsKKwlzdHJ1Y3Qg aXB2cl9tbXVfZHJpdmVyICpkcml2ZXI7CisJdTMyIGh3X2NvbnRleHQ7CisJc3RydWN0IGlwdnJf bW11X3B0ICoqdGFibGVzOworCXN0cnVjdCBwYWdlICpwOworCXN0cnVjdCBwYWdlICpkdW1teV9w dDsKKwlzdHJ1Y3QgcGFnZSAqZHVtbXlfcGFnZTsKKwl1MzIgcGRfbWFzazsKKwl1MzIgaW52YWxp ZF9wZGU7CisJdTMyIGludmFsaWRfcHRlOworfTsKKworc3RhdGljIGlubGluZSB1MzIgaXB2cl9t bXVfcHRfaW5kZXgodTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gKG9mZnNldCA+PiBJUFZSX1BURV9T SElGVCkgJiAweDNGRjsKK30KKworc3RhdGljIGlubGluZSB1MzIgaXB2cl9tbXVfcGRfaW5kZXgo dTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gb2Zmc2V0ID4+IElQVlJfUERFX1NISUZUOworfQorCisj aWYgZGVmaW5lZChDT05GSUdfWDg2KQorc3RhdGljIGlubGluZSB2b2lkIGlwdnJfY2xmbHVzaCh2 b2lkICphZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJjbGZsdXNoICglMClcbiIgOiA6 ICJyIihhZGRyKSA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitpcHZyX21t dV9jbGZsdXNoKHN0cnVjdCBpcHZyX21tdV9kcml2ZXIgKmRyaXZlciwgdm9pZCAqYWRkcikKK3sK KwlpZiAoIWRyaXZlci0+aGFzX2NsZmx1c2gpCisJCXJldHVybjsKKworCW1iKCk7CisJaXB2cl9j bGZsdXNoKGFkZHIpOworCW1iKCk7Cit9CisKK3N0YXRpYyB2b2lkCitpcHZyX21tdV9wYWdlX2Ns Zmx1c2goc3RydWN0IGlwdnJfbW11X2RyaXZlciAqZHJpdmVyLCBzdHJ1Y3QgcGFnZSogcGFnZSkK K3sKKwl1MzIgY2xmbHVzaF9hZGQgPSBkcml2ZXItPmNsZmx1c2hfYWRkID4+IFBBR0VfU0hJRlQ7 CisJdTMyIGNsZmx1c2hfY291bnQgPSBQQUdFX1NJWkUgLyBjbGZsdXNoX2FkZDsKKwlpbnQgaTsK Kwl1OCAqY2xmOworCisJY2xmID0ga21hcF9hdG9taWMocGFnZSk7CisKKwltYigpOworCWZvciAo aSA9IDA7IGkgPCBjbGZsdXNoX2NvdW50OyArK2kpIHsKKwkJaXB2cl9jbGZsdXNoKGNsZik7CisJ CWNsZiArPSBjbGZsdXNoX2FkZDsKKwl9CisJbWIoKTsKKworCWt1bm1hcF9hdG9taWMoY2xmKTsK K30KKworc3RhdGljIHZvaWQgaXB2cl9tbXVfcGFnZXNfY2xmbHVzaChzdHJ1Y3QgaXB2cl9tbXVf ZHJpdmVyICpkcml2ZXIsCisJCQkJc3RydWN0IHBhZ2UgKnBhZ2VbXSwgaW50IG51bV9wYWdlcykK K3sKKwlpbnQgaTsKKworCWlmICghZHJpdmVyLT5oYXNfY2xmbHVzaCkKKwkJcmV0dXJuIDsKKwor CWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykKKwkJaXB2cl9tbXVfcGFnZV9jbGZsdXNo KGRyaXZlciwgKnBhZ2UrKyk7Cit9CisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2lwdnJf bW11X2NsZmx1c2goc3RydWN0IGlwdnJfbW11X2RyaXZlciAqZHJpdmVyLCB2b2lkICphZGRyKQor eworCTsKK30KKworc3RhdGljIHZvaWQgaXB2cl9tbXVfcGFnZXNfY2xmbHVzaChzdHJ1Y3QgaXB2 cl9tbXVfZHJpdmVyICpkcml2ZXIsCisJCQkJc3RydWN0IHBhZ2UgKnBhZ2VbXSwgaW50IG51bV9w YWdlcykKK3sKKwlJUFZSX0RFQlVHX0dFTkVSQUwoIkR1bXkgaXB2cl9tbXVfcGFnZXNfY2xmbHVz aFxuIik7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgdm9pZAoraXB2cl9tbXVfZmx1c2hfcGRfbG9j a2VkKHN0cnVjdCBpcHZyX21tdV9kcml2ZXIgKmRyaXZlciwgYm9vbCBmb3JjZSkKK3sKKwlpZiAo YXRvbWljX3JlYWQoJmRyaXZlci0+bmVlZHNfdGxiZmx1c2gpIHx8IGZvcmNlKSB7CisJCWlmICgh ZHJpdmVyLT5kZXZfcHJpdikKKwkJCWdvdG8gb3V0OworCisJCWF0b21pY19zZXQoJmRyaXZlci0+ ZGV2X3ByaXYtPmlwdnJfbW11X2ludmFsZGMsIDEpOworCX0KK291dDoKKwlhdG9taWNfc2V0KCZk cml2ZXItPm5lZWRzX3RsYmZsdXNoLCAwKTsKK30KKworc3RhdGljIHZvaWQgaXB2cl9tbXVfZmx1 c2goc3RydWN0IGlwdnJfbW11X2RyaXZlciAqZHJpdmVyLCBib29sIHJjX3Byb3QpCit7CisJaWYg KHJjX3Byb3QpCisJCWRvd25fd3JpdGUoJmRyaXZlci0+c2VtKTsKKworCWlmICghZHJpdmVyLT5k ZXZfcHJpdikKKwkJZ290byBvdXQ7CisKKwlhdG9taWNfc2V0KCZkcml2ZXItPmRldl9wcml2LT5p cHZyX21tdV9pbnZhbGRjLCAxKTsKKworb3V0OgorCWlmIChyY19wcm90KQorCQl1cF93cml0ZSgm ZHJpdmVyLT5zZW0pOworfQorCit2b2lkIGlwdnJfbW11X3NldF9wZF9jb250ZXh0KHN0cnVjdCBp cHZyX21tdV9wZCAqcGQsIHUzMiBod19jb250ZXh0KQoreworCWlwdnJfbW11X3BhZ2VzX2NsZmx1 c2gocGQtPmRyaXZlciwgJnBkLT5wLCAxKTsKKwlkb3duX3dyaXRlKCZwZC0+ZHJpdmVyLT5zZW0p OworCXdtYigpOworCWlwdnJfbW11X2ZsdXNoX3BkX2xvY2tlZChwZC0+ZHJpdmVyLCAxKTsKKwlw ZC0+aHdfY29udGV4dCA9IGh3X2NvbnRleHQ7CisJdXBfd3JpdGUoJnBkLT5kcml2ZXItPnNlbSk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworaXB2cl9wZF9hZGRyX2VuZCh1bnNp Z25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCisJYWRkciA9IChhZGRyICsg SVBWUl9QREVfTUFTSyArIDEpICYgfklQVlJfUERFX01BU0s7CisJcmV0dXJuIChhZGRyIDwgZW5k KSA/IGFkZHIgOiBlbmQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGlwdnJfbW11X21hc2tfcHRl KHUzMiBwZm4sIHUzMiB0eXBlKQoreworCXUzMiBtYXNrID0gSVBWUl9QVEVfVkFMSUQ7CisKKwlp ZiAodHlwZSAmIElQVlJfTU1VX0NBQ0hFRF9NRU1PUlkpCisJCW1hc2sgfD0gSVBWUl9QVEVfQ0FD SEVEOworCWlmICh0eXBlICYgSVBWUl9NTVVfUk9fTUVNT1JZKQorCQltYXNrIHw9IElQVlJfUFRF X1JPOworCWlmICh0eXBlICYgSVBWUl9NTVVfV09fTUVNT1JZKQorCQltYXNrIHw9IElQVlJfUFRF X1dPOworCisJcmV0dXJuIChwZm4gPDwgUEFHRV9TSElGVCkgfCBtYXNrOworfQorCitzdGF0aWMg c3RydWN0IGlwdnJfbW11X3BkKiBfX211c3RfY2hlY2sKK2lwdnJfbW11X2FsbG9jX3BkKHN0cnVj dCBpcHZyX21tdV9kcml2ZXIgKmRyaXZlciwgdTMyIGludmFsaWRfdHlwZSkKK3sKKwlzdHJ1Y3Qg aXB2cl9tbXVfcGQgKnBkID0ga21hbGxvYyhzaXplb2YoKnBkKSwgR0ZQX0tFUk5FTCk7CisJdTMy ICp2OworCWludCBpOworCisJaWYgKCFwZCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwZC0+cCA9IGFs bG9jX3BhZ2UoR0ZQX0RNQTMyKTsKKwlpZiAoIXBkLT5wKQorCQlnb3RvIG91dF9lcnIxOworCXBk LT5kdW1teV9wdCA9IGFsbG9jX3BhZ2UoR0ZQX0RNQTMyKTsKKwlpZiAoIXBkLT5kdW1teV9wdCkK KwkJZ290byBvdXRfZXJyMjsKKwlwZC0+ZHVtbXlfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0RNQTMy KTsKKwlpZiAoIXBkLT5kdW1teV9wYWdlKQorCQlnb3RvIG91dF9lcnIzOworCisJcGQtPmludmFs aWRfcGRlID0KKwkJaXB2cl9tbXVfbWFza19wdGUocGFnZV90b19wZm4ocGQtPmR1bW15X3B0KSwg aW52YWxpZF90eXBlKTsKKwlwZC0+aW52YWxpZF9wdGUgPQorCQlpcHZyX21tdV9tYXNrX3B0ZShw YWdlX3RvX3BmbihwZC0+ZHVtbXlfcGFnZSksIGludmFsaWRfdHlwZSk7CisKKwl2ID0ga21hcChw ZC0+ZHVtbXlfcHQpOworCWlmICghdikKKwkJZ290byBvdXRfZXJyNDsKKwlmb3IgKGkgPSAwOyBp IDwgKFBBR0VfU0laRSAvIHNpemVvZih1MzIpKTsgKytpKQorCQl2W2ldID0gcGQtPmludmFsaWRf cHRlOworCisJa3VubWFwKHBkLT5kdW1teV9wdCk7CisKKwl2ID0ga21hcChwZC0+cCk7CisJaWYg KCF2KQorCQlnb3RvIG91dF9lcnI0OworCWZvciAoaSA9IDA7IGkgPCAoUEFHRV9TSVpFIC8gc2l6 ZW9mKHUzMikpOyArK2kpCisJCXZbaV0gPSBwZC0+aW52YWxpZF9wZGU7CisKKwlrdW5tYXAocGQt PnApOworCisJdiA9IGttYXAocGQtPmR1bW15X3BhZ2UpOworCWlmICghdikKKwkJZ290byBvdXRf ZXJyNDsKKwljbGVhcl9wYWdlKHYpOworCWt1bm1hcChwZC0+ZHVtbXlfcGFnZSk7CisKKwlwZC0+ dGFibGVzID0gdm1hbGxvY191c2VyKHNpemVvZihzdHJ1Y3QgaXB2cl9tbXVfcHQgKikgKiAxMDI0 KTsKKwlpZiAoIXBkLT50YWJsZXMpCisJCWdvdG8gb3V0X2VycjQ7CisKKwlwZC0+aHdfY29udGV4 dCA9IC0xOworCXBkLT5wZF9tYXNrID0gSVBWUl9QVEVfVkFMSUQ7CisJcGQtPmRyaXZlciA9IGRy aXZlcjsKKworCXJldHVybiBwZDsKKworb3V0X2VycjQ6CisJX19mcmVlX3BhZ2UocGQtPmR1bW15 X3BhZ2UpOworb3V0X2VycjM6CisJX19mcmVlX3BhZ2UocGQtPmR1bW15X3B0KTsKK291dF9lcnIy OgorCV9fZnJlZV9wYWdlKHBkLT5wKTsKK291dF9lcnIxOgorCWtmcmVlKHBkKTsKKwlyZXR1cm4g TlVMTDsKK30KKworc3RhdGljIHZvaWQgaXB2cl9tbXVfZnJlZV9wdChzdHJ1Y3QgaXB2cl9tbXVf cHQgKnB0KQoreworCV9fZnJlZV9wYWdlKHB0LT5wKTsKKwlrZnJlZShwdCk7Cit9CisKK3N0YXRp YyB2b2lkIGlwdnJfbW11X2ZyZWVfcGFnZWRpcihzdHJ1Y3QgaXB2cl9tbXVfcGQgKnBkKQorewor CXN0cnVjdCBpcHZyX21tdV9kcml2ZXIgKmRyaXZlciA9IHBkLT5kcml2ZXI7CisJc3RydWN0IGlw dnJfbW11X3B0ICpwdDsKKwlpbnQgaTsKKworCWRvd25fd3JpdGUoJmRyaXZlci0+c2VtKTsKKwlp ZiAocGQtPmh3X2NvbnRleHQgIT0gLTEpCisJCWlwdnJfbW11X2ZsdXNoX3BkX2xvY2tlZChkcml2 ZXIsIDEpOworCisJLyogU2hvdWxkIHRha2UgdGhlIHNwaW5sb2NrIGhlcmUsIGJ1dCB3ZSBkb24n dCBuZWVkIHRvIGRvIHRoYXQKKwkgICBzaW5jZSB3ZSBoYXZlIHRoZSBzZW1hcGhvcmUgaW4gd3Jp dGUgbW9kZS4gKi8KKworCWZvciAoaSA9IDA7IGkgPCAxMDI0OyArK2kpIHsKKwkJcHQgPSBwZC0+ dGFibGVzW2ldOworCQlpZiAocHQpCisJCQlpcHZyX21tdV9mcmVlX3B0KHB0KTsKKwl9CisKKwl2 ZnJlZShwZC0+dGFibGVzKTsKKwlfX2ZyZWVfcGFnZShwZC0+ZHVtbXlfcGFnZSk7CisJX19mcmVl X3BhZ2UocGQtPmR1bW15X3B0KTsKKwlfX2ZyZWVfcGFnZShwZC0+cCk7CisJa2ZyZWUocGQpOwor CXVwX3dyaXRlKCZkcml2ZXItPnNlbSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXB2cl9tbXVfcHQg KmlwdnJfbW11X2FsbG9jX3B0KHN0cnVjdCBpcHZyX21tdV9wZCAqcGQpCit7CisJc3RydWN0IGlw dnJfbW11X3B0ICpwdCA9IGttYWxsb2Moc2l6ZW9mKCpwdCksIEdGUF9LRVJORUwpOworCXZvaWQg KnY7CisJdTMyIGNsZmx1c2hfYWRkID0gcGQtPmRyaXZlci0+Y2xmbHVzaF9hZGQgPj4gUEFHRV9T SElGVDsKKwl1MzIgY2xmbHVzaF9jb3VudCA9IFBBR0VfU0laRSAvIGNsZmx1c2hfYWRkOworCXNw aW5sb2NrX3QgKmxvY2sgPSAmcGQtPmRyaXZlci0+bG9jazsKKwl1OCAqY2xmOworCXUzMiAqcHRl czsKKwlpbnQgaTsKKworCWlmICghcHQpCisJCXJldHVybiBOVUxMOworCisJcHQtPnAgPSBhbGxv Y19wYWdlKEdGUF9ETUEzMik7CisJaWYgKCFwdC0+cCkgeworCQlrZnJlZShwdCk7CisJCXJldHVy biBOVUxMOworCX0KKworCXNwaW5fbG9jayhsb2NrKTsKKworCXYgPSBrbWFwX2F0b21pYyhwdC0+ cCk7CisKKwljbGYgPSAodTggKikgdjsKKwlwdGVzID0gKHUzMiAqKSB2OworCWZvciAoaSA9IDA7 IGkgPCAoUEFHRV9TSVpFIC8gc2l6ZW9mKHUzMikpOyArK2kpCisJCSpwdGVzKysgPSBwZC0+aW52 YWxpZF9wdGU7CisKKworI2lmIGRlZmluZWQoQ09ORklHX1g4NikKKwlpZiAocGQtPmRyaXZlci0+ aGFzX2NsZmx1c2ggJiYgcGQtPmh3X2NvbnRleHQgIT0gLTEpIHsKKwkJbWIoKTsKKwkJZm9yIChp ID0gMDsgaSA8IGNsZmx1c2hfY291bnQ7ICsraSkgeworCQkJaXB2cl9jbGZsdXNoKGNsZik7CisJ CQljbGYgKz0gY2xmbHVzaF9hZGQ7CisJCX0KKwkJbWIoKTsKKwl9CisjZW5kaWYKKwlrdW5tYXBf YXRvbWljKHYpOworCisJc3Bpbl91bmxvY2sobG9jayk7CisKKwlwdC0+Y291bnQgPSAwOworCXB0 LT5wZCA9IHBkOworCXB0LT5pbmRleCA9IDA7CisKKwlyZXR1cm4gcHQ7Cit9CisKK3N0YXRpYyBz dHJ1Y3QgaXB2cl9tbXVfcHQgKgoraXB2cl9tbXVfcHRfYWxsb2NfbWFwX2xvY2soc3RydWN0IGlw dnJfbW11X3BkICpwZCwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXUzMiBpbmRleCA9IGlwdnJf bW11X3BkX2luZGV4KGFkZHIpOworCXN0cnVjdCBpcHZyX21tdV9wdCAqcHQ7CisJdTMyICp2Owor CXNwaW5sb2NrX3QgKmxvY2sgPSAmcGQtPmRyaXZlci0+bG9jazsKKworCXNwaW5fbG9jayhsb2Nr KTsKKwlwdCA9IHBkLT50YWJsZXNbaW5kZXhdOworCXdoaWxlICghcHQpIHsKKwkJc3Bpbl91bmxv Y2sobG9jayk7CisJCXB0ID0gaXB2cl9tbXVfYWxsb2NfcHQocGQpOworCQlpZiAoIXB0KQorCQkJ cmV0dXJuIE5VTEw7CisJCXNwaW5fbG9jayhsb2NrKTsKKworCQlpZiAocGQtPnRhYmxlc1tpbmRl eF0pIHsKKwkJCXNwaW5fdW5sb2NrKGxvY2spOworCQkJaXB2cl9tbXVfZnJlZV9wdChwdCk7CisJ CQlzcGluX2xvY2sobG9jayk7CisJCQlwdCA9IHBkLT50YWJsZXNbaW5kZXhdOworCQkJY29udGlu dWU7CisJCX0KKworCQl2ID0ga21hcF9hdG9taWMocGQtPnApOworCisJCXBkLT50YWJsZXNbaW5k ZXhdID0gcHQ7CisJCXZbaW5kZXhdID0gKHBhZ2VfdG9fcGZuKHB0LT5wKSA8PCAxMikgfAorCQkJ cGQtPnBkX21hc2s7CisKKworCQlwdC0+aW5kZXggPSBpbmRleDsKKworCQlrdW5tYXBfYXRvbWlj KCh2b2lkICopIHYpOworCisJCWlmIChwZC0+aHdfY29udGV4dCAhPSAtMSkgeworCQkJaXB2cl9t bXVfY2xmbHVzaChwZC0+ZHJpdmVyLCAodm9pZCAqKSAmdltpbmRleF0pOworCQkJYXRvbWljX3Nl dCgmcGQtPmRyaXZlci0+bmVlZHNfdGxiZmx1c2gsIDEpOworCQl9CisJfQorCisJcHQtPnYgPSBr bWFwX2F0b21pYyhwdC0+cCk7CisKKwlyZXR1cm4gcHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXB2 cl9tbXVfcHQgKgoraXB2cl9tbXVfcHRfbWFwX2xvY2soc3RydWN0IGlwdnJfbW11X3BkICpwZCwg dW5zaWduZWQgbG9uZyBhZGRyKQoreworCXUzMiBpbmRleCA9IGlwdnJfbW11X3BkX2luZGV4KGFk ZHIpOworCXN0cnVjdCBpcHZyX21tdV9wdCAqcHQ7CisJc3BpbmxvY2tfdCAqbG9jayA9ICZwZC0+ ZHJpdmVyLT5sb2NrOworCisJc3Bpbl9sb2NrKGxvY2spOworCXB0ID0gcGQtPnRhYmxlc1tpbmRl eF07CisJaWYgKCFwdCkgeworCQlzcGluX3VubG9jayhsb2NrKTsKKwkJcmV0dXJuIE5VTEw7CisJ fQorCisJcHQtPnYgPSBrbWFwX2F0b21pYyhwdC0+cCk7CisKKwlyZXR1cm4gcHQ7Cit9CisKK3N0 YXRpYyB2b2lkIGlwdnJfbW11X3B0X3VubWFwX3VubG9jayhzdHJ1Y3QgaXB2cl9tbXVfcHQgKnB0 KQoreworCXN0cnVjdCBpcHZyX21tdV9wZCAqcGQgPSBwdC0+cGQ7CisJdTMyICp2OworCisJa3Vu bWFwX2F0b21pYyhwdC0+dik7CisKKwlpZiAocHQtPmNvdW50ID09IDApIHsKKwkJdiA9IGttYXBf YXRvbWljKHBkLT5wKTsKKworCQl2W3B0LT5pbmRleF0gPSBwZC0+aW52YWxpZF9wZGU7CisJCXBk LT50YWJsZXNbcHQtPmluZGV4XSA9IE5VTEw7CisKKwkJaWYgKHBkLT5od19jb250ZXh0ICE9IC0x KSB7CisJCQlpcHZyX21tdV9jbGZsdXNoKHBkLT5kcml2ZXIsCisJCQkJCSh2b2lkICopICZ2W3B0 LT5pbmRleF0pOworCQkJYXRvbWljX3NldCgmcGQtPmRyaXZlci0+bmVlZHNfdGxiZmx1c2gsIDEp OworCQl9CisKKwkJa3VubWFwX2F0b21pYyhwdC0+dik7CisKKwkJc3Bpbl91bmxvY2soJnBkLT5k cml2ZXItPmxvY2spOworCQlpcHZyX21tdV9mcmVlX3B0KHB0KTsKKwkJcmV0dXJuOworCX0KKwlz cGluX3VubG9jaygmcGQtPmRyaXZlci0+bG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAor aXB2cl9tbXVfc2V0X3B0ZShzdHJ1Y3QgaXB2cl9tbXVfcHQgKnB0LCB1bnNpZ25lZCBsb25nIGFk ZHIsIHUzMiBwdGUpCit7CisJcHQtPnZbaXB2cl9tbXVfcHRfaW5kZXgoYWRkcildID0gcHRlOwor fQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2lwdnJfbW11X2ludmFsaWRhdGVfcHRlKHN0cnVjdCBp cHZyX21tdV9wdCAqcHQsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlwdC0+dltpcHZyX21tdV9w dF9pbmRleChhZGRyKV0gPSBwdC0+cGQtPmludmFsaWRfcHRlOworfQorCitzdHJ1Y3QgaXB2cl9t bXVfcGQgKmlwdnJfbW11X2dldF9kZWZhdWx0X3BkKHN0cnVjdCBpcHZyX21tdV9kcml2ZXIgKmRy aXZlcikKK3sKKwlzdHJ1Y3QgaXB2cl9tbXVfcGQgKnBkOworCisJLyogZG93bl9yZWFkKCZkcml2 ZXItPnNlbSk7ICovCisJcGQgPSBkcml2ZXItPmRlZmF1bHRfcGQ7CisJLyogdXBfcmVhZCgmZHJp dmVyLT5zZW0pOyAqLworCisJcmV0dXJuIHBkOworfQorCisvKiBSZXR1cm5zIHRoZSBwaHlzaWNh bCBhZGRyZXNzIG9mIHRoZSBQRCBzaGFyZWQgYnkgc2d4L21zdmR4ICovCit1MzIgX19tdXN0X2No ZWNrIGlwdnJfZ2V0X2RlZmF1bHRfcGRfYWRkcjMyKHN0cnVjdCBpcHZyX21tdV9kcml2ZXIgKmRy aXZlcikKK3sKKwlzdHJ1Y3QgaXB2cl9tbXVfcGQgKnBkOworCXVuc2lnbmVkIGxvbmcgcGZuOwor CXBkID0gaXB2cl9tbXVfZ2V0X2RlZmF1bHRfcGQoZHJpdmVyKTsKKwlwZm4gPSBwYWdlX3RvX3Bm bihwZC0+cCk7CisJaWYgKHBmbiA+PSAweDAwMTAwMDAwVUwpCisJCXJldHVybiAwOworCXJldHVy biBwZm4gPDwgUEFHRV9TSElGVDsKK30KKwordm9pZCBpcHZyX21tdV9kcml2ZXJfdGFrZWRvd24o c3RydWN0IGlwdnJfbW11X2RyaXZlciAqZHJpdmVyKQoreworCWlwdnJfbW11X2ZyZWVfcGFnZWRp cihkcml2ZXItPmRlZmF1bHRfcGQpOworCWtmcmVlKGRyaXZlcik7Cit9CisKK3N0cnVjdCBpcHZy X21tdV9kcml2ZXIgKiBfX211c3RfY2hlY2sKK2lwdnJfbW11X2RyaXZlcl9pbml0KHU4IF9faW9t ZW0gKiByZWdpc3RlcnMsIHUzMiBpbnZhbGlkX3R5cGUsCisJCQlzdHJ1Y3QgZHJtX2lwdnJfcHJp dmF0ZSAqZGV2X3ByaXYpCit7CisJc3RydWN0IGlwdnJfbW11X2RyaXZlciAqZHJpdmVyOworCisJ ZHJpdmVyID0ga21hbGxvYyhzaXplb2YoKmRyaXZlciksIEdGUF9LRVJORUwpOworCWlmICghZHJp dmVyKQorCQlyZXR1cm4gTlVMTDsKKworCWRyaXZlci0+ZGV2X3ByaXYgPSBkZXZfcHJpdjsKKwor CWRyaXZlci0+ZGVmYXVsdF9wZCA9CisJCWlwdnJfbW11X2FsbG9jX3BkKGRyaXZlciwgaW52YWxp ZF90eXBlKTsKKwlpZiAoIWRyaXZlci0+ZGVmYXVsdF9wZCkKKwkJZ290byBvdXRfZXJyMTsKKwor CXNwaW5fbG9ja19pbml0KCZkcml2ZXItPmxvY2spOworCWluaXRfcndzZW0oJmRyaXZlci0+c2Vt KTsKKwlkb3duX3dyaXRlKCZkcml2ZXItPnNlbSk7CisJZHJpdmVyLT5yZWdpc3Rlcl9tYXAgPSBy ZWdpc3RlcnM7CisJYXRvbWljX3NldCgmZHJpdmVyLT5uZWVkc190bGJmbHVzaCwgMSk7CisKKwlk cml2ZXItPmhhc19jbGZsdXNoID0gZmFsc2U7CisKKyNpZiBkZWZpbmVkKENPTkZJR19YODYpCisJ aWYgKGNwdV9oYXNfY2xmbHVzaCkgeworCQl1MzIgdGZtcywgbWlzYywgY2FwMCwgY2FwNCwgY2xm bHVzaF9zaXplOworCisJCS8qCisJCSAqIGNsZmx1c2ggc2l6ZSBpcyBkZXRlcm1pbmVkIGF0IGtl cm5lbCBzZXR1cCBmb3IgeDg2XzY0CisJCSAqICBidXQgbm90IGZvciBpMzg2LiBXZSBoYXZlIHRv IGRvIGl0IGhlcmUuCisJCSAqLworCisJCWNwdWlkKDB4MDAwMDAwMDEsICZ0Zm1zLCAmbWlzYywg JmNhcDAsICZjYXA0KTsKKwkJY2xmbHVzaF9zaXplID0gKChtaXNjID4+IDgpICYgMHhmZikgKiA4 OworCQlkcml2ZXItPmhhc19jbGZsdXNoID0gdHJ1ZTsKKwkJZHJpdmVyLT5jbGZsdXNoX2FkZCA9 CisJCQlQQUdFX1NJWkUgKiBjbGZsdXNoX3NpemUgLyBzaXplb2YodTMyKTsKKwkJZHJpdmVyLT5j bGZsdXNoX21hc2sgPSBkcml2ZXItPmNsZmx1c2hfYWRkIC0gMTsKKwkJZHJpdmVyLT5jbGZsdXNo X21hc2sgPSB+ZHJpdmVyLT5jbGZsdXNoX21hc2s7CisJfQorI2VuZGlmCisKKwl1cF93cml0ZSgm ZHJpdmVyLT5zZW0pOworCXJldHVybiBkcml2ZXI7CisKK291dF9lcnIxOgorCWtmcmVlKGRyaXZl cik7CisJcmV0dXJuIE5VTEw7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19YODYpCitzdGF0aWMg dm9pZCBpcHZyX21tdV9mbHVzaF9wdGVzKHN0cnVjdCBpcHZyX21tdV9wZCAqcGQsCisJCQl1bnNp Z25lZCBsb25nIGFkZHJlc3MsCisJCQlpbnQgbnVtX3BhZ2VzLAorCQkJdTMyIGRlc2lyZWRfdGls ZV9zdHJpZGUsCisJCQl1MzIgaHdfdGlsZV9zdHJpZGUpCit7CisJc3RydWN0IGlwdnJfbW11X3B0 ICpwdDsKKwlpbnQgcm93cyA9IDE7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVu c2lnbmVkIGxvbmcgZW5kOworCXVuc2lnbmVkIGxvbmcgbmV4dDsKKwl1bnNpZ25lZCBsb25nIGFk ZDsKKwl1bnNpZ25lZCBsb25nIHJvd19hZGQ7CisJdW5zaWduZWQgbG9uZyBjbGZsdXNoX2FkZCA9 IHBkLT5kcml2ZXItPmNsZmx1c2hfYWRkOworCXVuc2lnbmVkIGxvbmcgY2xmbHVzaF9tYXNrID0g cGQtPmRyaXZlci0+Y2xmbHVzaF9tYXNrOworCUlQVlJfREVCVUdfR0VORVJBTCgiY2FsbCB4ODYg aXB2cl9tbXVfZmx1c2hfcHRlcywgYWRkcmVzcyBpcyAweCVseCwgIgorCQkJIm51bSBwYWdlcyBp cyAlZC5cbiIsIGFkZHJlc3MsIG51bV9wYWdlcyk7CisJaWYgKCFwZC0+ZHJpdmVyLT5oYXNfY2xm bHVzaCkgeworCQlJUFZSX0RFQlVHX0dFTkVSQUwoImNhbGwgaXB2cl9tbXVfcGFnZXNfY2xmbHVz aC5cbiIpOworCQlpcHZyX21tdV9wYWdlc19jbGZsdXNoKHBkLT5kcml2ZXIsICZwZC0+cCwgbnVt X3BhZ2VzKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChod190aWxlX3N0cmlkZSkKKwkJcm93cyA9 IG51bV9wYWdlcyAvIGRlc2lyZWRfdGlsZV9zdHJpZGU7CisJZWxzZQorCQlkZXNpcmVkX3RpbGVf c3RyaWRlID0gbnVtX3BhZ2VzOworCisJYWRkID0gZGVzaXJlZF90aWxlX3N0cmlkZSA8PCBQQUdF X1NISUZUOworCXJvd19hZGQgPSBod190aWxlX3N0cmlkZSA8PCBQQUdFX1NISUZUOworCW1iKCk7 CisJZm9yIChpID0gMDsgaSA8IHJvd3M7ICsraSkgeworCQlhZGRyID0gYWRkcmVzczsKKwkJZW5k ID0gYWRkciArIGFkZDsKKworCQlkbyB7CisJCQluZXh0ID0gaXB2cl9wZF9hZGRyX2VuZChhZGRy LCBlbmQpOworCQkJcHQgPSBpcHZyX21tdV9wdF9tYXBfbG9jayhwZCwgYWRkcik7CisJCQlpZiAo IXB0KQorCQkJCWNvbnRpbnVlOworCQkJZG8geworCQkJCWlwdnJfY2xmbHVzaCgmcHQtPnZbaXB2 cl9tbXVfcHRfaW5kZXgoYWRkcildKTsKKwkJCX0gd2hpbGUgKGFkZHIgKz0KKwkJCQkJIGNsZmx1 c2hfYWRkLAorCQkJCSAoYWRkciAmIGNsZmx1c2hfbWFzaykgPCBuZXh0KTsKKworCQkJaXB2cl9t bXVfcHRfdW5tYXBfdW5sb2NrKHB0KTsKKwkJfSB3aGlsZSAoYWRkciA9IG5leHQsIG5leHQgIT0g ZW5kKTsKKwkJYWRkcmVzcyArPSByb3dfYWRkOworCX0KKwltYigpOworfQorI2Vsc2UKKworc3Rh dGljIHZvaWQgaXB2cl9tbXVfZmx1c2hfcHRlcyhzdHJ1Y3QgaXB2cl9tbXVfcGQgKnBkLAorCQkJ CQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCQkJCWludCBudW1fcGFnZXMsCisJCQkJCXUzMiBk ZXNpcmVkX3RpbGVfc3RyaWRlLAorCQkJCQl1MzIgaHdfdGlsZV9zdHJpZGUpCit7CisJSVBWUl9E RUJVR19HRU5FUkFMKCJjYWxsIG5vbi14ODYgaXB2cl9tbXVfZmx1c2hfcHRlcy5cbiIpOworfQor I2VuZGlmCisKK3ZvaWQgaXB2cl9tbXVfcmVtb3ZlX3BhZ2VzKHN0cnVjdCBpcHZyX21tdV9wZCAq cGQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCWludCBudW1fcGFnZXMsIHUzMiBkZXNpcmVk X3RpbGVfc3RyaWRlLAorCQkJdTMyIGh3X3RpbGVfc3RyaWRlKQoreworCXN0cnVjdCBpcHZyX21t dV9wdCAqcHQ7CisJaW50IHJvd3MgPSAxOworCWludCBpOworCXVuc2lnbmVkIGxvbmcgYWRkcjsK Kwl1bnNpZ25lZCBsb25nIGVuZDsKKwl1bnNpZ25lZCBsb25nIG5leHQ7CisJdW5zaWduZWQgbG9u ZyBhZGQ7CisJdW5zaWduZWQgbG9uZyByb3dfYWRkOworCXVuc2lnbmVkIGxvbmcgZl9hZGRyZXNz ID0gYWRkcmVzczsKKworCWlmIChod190aWxlX3N0cmlkZSkKKwkJcm93cyA9IG51bV9wYWdlcyAv IGRlc2lyZWRfdGlsZV9zdHJpZGU7CisJZWxzZQorCQlkZXNpcmVkX3RpbGVfc3RyaWRlID0gbnVt X3BhZ2VzOworCisJYWRkID0gZGVzaXJlZF90aWxlX3N0cmlkZSA8PCBQQUdFX1NISUZUOworCXJv d19hZGQgPSBod190aWxlX3N0cmlkZSA8PCBQQUdFX1NISUZUOworCisJLyogZG93bl9yZWFkKCZw ZC0+ZHJpdmVyLT5zZW0pOyAqLworCisJLyogTWFrZSBzdXJlIHdlIG9ubHkgbmVlZCB0byBmbHVz aCB0aGlzIHByb2Nlc3NvcidzIGNhY2hlICovCisKKwlmb3IgKGkgPSAwOyBpIDwgcm93czsgKytp KSB7CisKKwkJYWRkciA9IGFkZHJlc3M7CisJCWVuZCA9IGFkZHIgKyBhZGQ7CisKKwkJZG8gewor CQkJbmV4dCA9IGlwdnJfcGRfYWRkcl9lbmQoYWRkciwgZW5kKTsKKwkJCXB0ID0gaXB2cl9tbXVf cHRfbWFwX2xvY2socGQsIGFkZHIpOworCQkJaWYgKCFwdCkKKwkJCQljb250aW51ZTsKKwkJCWRv IHsKKwkJCQlpcHZyX21tdV9pbnZhbGlkYXRlX3B0ZShwdCwgYWRkcik7CisJCQkJLS1wdC0+Y291 bnQ7CisKKwkJCX0gd2hpbGUgKGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyIDwgbmV4dCk7CisJCQlp cHZyX21tdV9wdF91bm1hcF91bmxvY2socHQpOworCisJCX0gd2hpbGUgKGFkZHIgPSBuZXh0LCBu ZXh0ICE9IGVuZCk7CisJCWFkZHJlc3MgKz0gcm93X2FkZDsKKwl9CisJaWYgKHBkLT5od19jb250 ZXh0ICE9IC0xKQorCQlpcHZyX21tdV9mbHVzaF9wdGVzKHBkLCBmX2FkZHJlc3MsIG51bV9wYWdl cywKKwkJCQkgICBkZXNpcmVkX3RpbGVfc3RyaWRlLCBod190aWxlX3N0cmlkZSk7CisKKwkvKiB1 cF9yZWFkKCZwZC0+ZHJpdmVyLT5zZW0pOyAqLworCisJaWYgKHBkLT5od19jb250ZXh0ICE9IC0x KQorCQlpcHZyX21tdV9mbHVzaChwZC0+ZHJpdmVyLCAwKTsKKwlpcHZyX3N0YXRfcmVtb3ZlX21t dV9iaW5kKHBkLT5kcml2ZXItPmRldl9wcml2LCBudW1fcGFnZXMgPDwgUEFHRV9TSElGVCk7Cit9 CisKK2ludCBpcHZyX21tdV9pbnNlcnRfcGFnZXMoc3RydWN0IGlwdnJfbW11X3BkICpwZCwgc3Ry dWN0IHBhZ2UgKipwYWdlcywKKwkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IG51bV9wYWdl cywKKwkJCXUzMiBkZXNpcmVkX3RpbGVfc3RyaWRlLAorCQkJdTMyIGh3X3RpbGVfc3RyaWRlLCB1 MzIgdHlwZSkKK3sKKwlzdHJ1Y3QgaXB2cl9tbXVfcHQgKnB0OworCWludCByb3dzID0gMTsKKwlp bnQgaTsKKwl1MzIgcHRlOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBsb25nIGVu ZDsKKwl1bnNpZ25lZCBsb25nIG5leHQ7CisJdW5zaWduZWQgbG9uZyBhZGQ7CisJdW5zaWduZWQg bG9uZyByb3dfYWRkOworCXVuc2lnbmVkIGxvbmcgZl9hZGRyZXNzID0gYWRkcmVzczsKKwl1bnNp Z25lZCBsb25nIHBmbjsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChod190aWxlX3N0cmlkZSkgewor CQlpZiAobnVtX3BhZ2VzICUgZGVzaXJlZF90aWxlX3N0cmlkZSAhPSAwKQorCQkJcmV0dXJuIC1F SU5WQUw7CisJCXJvd3MgPSBudW1fcGFnZXMgLyBkZXNpcmVkX3RpbGVfc3RyaWRlOworCX0gZWxz ZSB7CisJCWRlc2lyZWRfdGlsZV9zdHJpZGUgPSBudW1fcGFnZXM7CisJfQorCisJYWRkID0gZGVz aXJlZF90aWxlX3N0cmlkZSA8PCBQQUdFX1NISUZUOworCXJvd19hZGQgPSBod190aWxlX3N0cmlk ZSA8PCBQQUdFX1NISUZUOworCisJZG93bl9yZWFkKCZwZC0+ZHJpdmVyLT5zZW0pOworCisJZm9y IChpID0gMDsgaSA8IHJvd3M7ICsraSkgeworCisJCWFkZHIgPSBhZGRyZXNzOworCQllbmQgPSBh ZGRyICsgYWRkOworCisJCWRvIHsKKwkJCW5leHQgPSBpcHZyX3BkX2FkZHJfZW5kKGFkZHIsIGVu ZCk7CisJCQlwdCA9IGlwdnJfbW11X3B0X2FsbG9jX21hcF9sb2NrKHBkLCBhZGRyKTsKKwkJCWlm ICghcHQpIHsKKwkJCQlyZXQgPSAtRU5PTUVNOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJZG8g eworCQkJCXBmbiA9IHBhZ2VfdG9fcGZuKCpwYWdlcysrKTsKKwkJCQkvKiBzaG91bGQgYmUgdW5k ZXIgNEdpQiAqLworCQkJCWlmIChwZm4gPj0gMHgwMDEwMDAwMFVMKSB7CisJCQkJCUlQVlJfRVJS T1IoImNhbm5vdCBzdXBwb3J0IHBmbiAweCVseFxuIiwgcGZuKTsKKwkJCQkJcmV0ID0gLUVJTlZB TDsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJCXB0ZSA9IGlwdnJfbW11X21hc2tfcHRlKHBm biwgdHlwZSk7CisJCQkJaXB2cl9tbXVfc2V0X3B0ZShwdCwgYWRkciwgcHRlKTsKKwkJCQlwdC0+ Y291bnQrKzsKKwkJCX0gd2hpbGUgKGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyIDwgbmV4dCk7CisJ CQlpcHZyX21tdV9wdF91bm1hcF91bmxvY2socHQpOworCisJCX0gd2hpbGUgKGFkZHIgPSBuZXh0 LCBuZXh0ICE9IGVuZCk7CisKKwkJYWRkcmVzcyArPSByb3dfYWRkOworCX0KK291dDoKKwlpZiAo cGQtPmh3X2NvbnRleHQgIT0gLTEpCisJCWlwdnJfbW11X2ZsdXNoX3B0ZXMocGQsIGZfYWRkcmVz cywgbnVtX3BhZ2VzLAorCQkJCSAgIGRlc2lyZWRfdGlsZV9zdHJpZGUsIGh3X3RpbGVfc3RyaWRl KTsKKworCXVwX3JlYWQoJnBkLT5kcml2ZXItPnNlbSk7CisKKwlpZiAocGQtPmh3X2NvbnRleHQg IT0gLTEpCisJCWlwdnJfbW11X2ZsdXNoKHBkLT5kcml2ZXIsIDEpOworCisJaXB2cl9zdGF0X2Fk ZF9tbXVfYmluZChwZC0+ZHJpdmVyLT5kZXZfcHJpdiwgbnVtX3BhZ2VzIDw8IFBBR0VfU0hJRlQp OworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZy X21tdS5oIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9tbXUuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi4xZjUyNGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL2lwdnIvaXB2cl9tbXUuaApAQCAtMCwwICsxLDExMSBAQAorLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCisgKiBpcHZyX21tdS5oOiBJUFZSIGhlYWRlciBmaWxlIGZvciBWRUQvVkVDL1ZTUCBNTVUg aGFuZGxpbmcKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24sIEhp bGxzYm9ybywgT1IsIFVTQQorICogQ29weXJpZ2h0IChjKSBJbWFnaW5hdGlvbiBUZWNobm9sb2dp ZXMgTGltaXRlZCwgVUsKKyAqIENvcHlyaWdodCAoYykgMjAwMyBUdW5nc3RlbiBHcmFwaGljcywg SW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisg KiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJD SEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAq CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUg dG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0 IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9y czoKKyAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CisgKiAgICBGZWkgSmlhbmcg PGZlaS5qaWFuZ0BpbnRlbC5jb20+CisgKiAgICBZYW8gQ2hlbmcgPHlhby5jaGVuZ0BpbnRlbC5j b20+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9JUFZSX01NVV9IXworI2Rl ZmluZSBfSVBWUl9NTVVfSF8KKworI2luY2x1ZGUgImlwdnJfZHJ2LmgiCisKK3N0YXRpYyBpbmxp bmUgYm9vbCBfX211c3RfY2hlY2sgSVBWUl9JU19FUlIoX19mb3JjZSBjb25zdCB1bnNpZ25lZCBs b25nIG9mZnNldCkKK3sKKwlyZXR1cm4gdW5saWtlbHkoKG9mZnNldCkgPj0gKHVuc2lnbmVkIGxv bmcpLU1BWF9FUlJOTyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBfX211c3RfY2hlY2sgSVBW Ul9PRkZTRVRfRVJSKF9fZm9yY2UgY29uc3QgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJcmV0 dXJuIChsb25nKW9mZnNldDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fbXVz dF9jaGVjayBJUFZSX0VSUl9PRkZTRVQoX19mb3JjZSBjb25zdCBsb25nIGVycikKK3sKKwlyZXR1 cm4gKHVuc2lnbmVkIGxvbmcpZXJyOworfQorCisvKioKKyAqIG1lbW9yeSBhY2Nlc3MgY29udHJv bCBmb3IgVlBVCisgKi8KKyNkZWZpbmUgSVBWUl9NTVVfQ0FDSEVEX01FTU9SWQkgICgxIDw8IDAp CS8qIEJpbmQgdG8gTU1VIG9ubHkgKi8KKyNkZWZpbmUgSVBWUl9NTVVfUk9fTUVNT1JZCSAgCSAg KDEgPDwgMSkJLyogTU1VIFJPIG1lbW9yeSAqLworI2RlZmluZSBJUFZSX01NVV9XT19NRU1PUlkJ ICAgICAgKDEgPDwgMikJLyogTU1VIFdPIG1lbW9yeSAqLworCisvKgorICogbGluZWFyIE1NVSBz aXplIGlzIDUxMk0gOiAwIC0gNTEyTQorICogdGlsaW5nIE1NVSBzaXplIGlzIDUxMk0gOiA1MTJN IC0gMTAyNE0KKyAqLworI2RlZmluZSBJUFZSX01FTV9NTVVfTElORUFSX1NUQVJUCTB4MDAwMDAw MDAKKyNkZWZpbmUgSVBWUl9NRU1fTU1VX0xJTkVBUl9FTkQJCTB4MjAwMDAwMDAKKyNkZWZpbmUg SVBWUl9NRU1fTU1VX1RJTElOR19TVEFSVAkweDIwMDAwMDAwCisjZGVmaW5lIElQVlJfTUVNX01N VV9USUxJTkdfRU5ECQkweDQwMDAwMDAwCisKK3N0cnVjdCBpcHZyX21tdV9wZDsKK3N0cnVjdCBp cHZyX21tdV9wdDsKKworc3RydWN0IGlwdnJfbW11X2RyaXZlciB7CisJLyogcHJvdGVjdHMgZHJp dmVyLSBhbmQgcGQgc3RydWN0dXJlcy4gQWx3YXlzIHRha2UgaW4gcmVhZCBtb2RlCisJICogYmVm b3JlIHRha2luZyB0aGUgcGFnZSB0YWJsZSBzcGlubG9jay4KKwkgKi8KKwlzdHJ1Y3Qgcndfc2Vt YXBob3JlIHNlbTsKKworCS8qIHByb3RlY3RzIHBhZ2UgdGFibGVzLCBkaXJlY3RvcnkgdGFibGVz IGFuZCBwdCB0YWJsZXMuCisJICogYW5kIHB0IHN0cnVjdHVyZXMuCisJICovCisJc3BpbmxvY2tf dCBsb2NrOworCisJYXRvbWljX3QgbmVlZHNfdGxiZmx1c2g7CisKKwl1OCBfX2lvbWVtICpyZWdp c3Rlcl9tYXA7CisJc3RydWN0IGlwdnJfbW11X3BkICpkZWZhdWx0X3BkOworCisJYm9vbCBoYXNf Y2xmbHVzaDsKKwl1MzIgY2xmbHVzaF9hZGQ7CisJdW5zaWduZWQgbG9uZyBjbGZsdXNoX21hc2s7 CisKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXY7Cit9OworCitzdHJ1Y3QgaXB2 cl9tbXVfZHJpdmVyICpfX211c3RfY2hlY2sgaXB2cl9tbXVfZHJpdmVyX2luaXQodTggX19pb21l bSAqcmVnaXN0ZXJzLAorCQkJdTMyIGludmFsaWRfdHlwZSwgc3RydWN0IGRybV9pcHZyX3ByaXZh dGUgKmRldl9wcml2KTsKKwordm9pZCBpcHZyX21tdV9kcml2ZXJfdGFrZWRvd24oc3RydWN0IGlw dnJfbW11X2RyaXZlciAqZHJpdmVyKTsKKworc3RydWN0IGlwdnJfbW11X3BkICoKK2lwdnJfbW11 X2dldF9kZWZhdWx0X3BkKHN0cnVjdCBpcHZyX21tdV9kcml2ZXIgKmRyaXZlcik7CisKK3ZvaWQg aXB2cl9tbXVfc2V0X3BkX2NvbnRleHQoc3RydWN0IGlwdnJfbW11X3BkICpwZCwgdTMyIGh3X2Nv bnRleHQpOworCit1MzIgX19tdXN0X2NoZWNrIGlwdnJfZ2V0X2RlZmF1bHRfcGRfYWRkcjMyKHN0 cnVjdCBpcHZyX21tdV9kcml2ZXIgKmRyaXZlcik7CisKK2ludCBpcHZyX21tdV9pbnNlcnRfcGFn ZXMoc3RydWN0IGlwdnJfbW11X3BkICpwZCwgc3RydWN0IHBhZ2UgKipwYWdlcywKKwkJCXVuc2ln bmVkIGxvbmcgYWRkcmVzcywgaW50IG51bV9wYWdlcywKKwkJCXUzMiBkZXNpcmVkX3RpbGVfc3Ry aWRlLCB1MzIgaHdfdGlsZV9zdHJpZGUsIHUzMiB0eXBlKTsKKwordm9pZCBpcHZyX21tdV9yZW1v dmVfcGFnZXMoc3RydWN0IGlwdnJfbW11X3BkICpwZCwKKwkJCXVuc2lnbmVkIGxvbmcgYWRkcmVz cywgaW50IG51bV9wYWdlcywKKwkJCXUzMiBkZXNpcmVkX3RpbGVfc3RyaWRlLCB1MzIgaHdfdGls ZV9zdHJpZGUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lw dnJfdHJhY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfdHJhY2UuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWMwYmRhCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL2lwdnIvaXB2cl90cmFjZS5jCkBAIC0wLDAgKzEsMTEgQEAKKy8qCisgKiBD b3B5cmlnaHQgwqkgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcnM6CisgKiAg ICBZYW8gQ2hlbmcgPHlhby5jaGVuZ0BpbnRlbC5jb20+PgorICovCisKKyNpZm5kZWYgX19DSEVD S0VSX18KKyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUgImlwdnJfdHJhY2Uu aCIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl90cmFjZS5o IGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl90cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmRiMDhjODIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vaXB2ci9pcHZyX3RyYWNlLmgKQEAgLTAsMCArMSwzMjYgQEAKKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorICogaXB2cl90cmFjZS5oOiBJUFZSIGhlYWRlciBmaWxlIGZvciB0cmFjZSBzdXBwb3J0Cisg KgorICogQ29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uLCBIaWxsc2Jvcm8sIE9S LCBVU0EKKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAq IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25n IHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9z dG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRmVpIEppYW5n IDxmZWkuamlhbmdAaW50ZWwuY29tPgorICogICAgWWFvIENoZW5nIDx5YW8uY2hlbmdAaW50ZWwu Y29tPgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmICFkZWZpbmVkKF9JUFZSX1RSQUNF X0hfKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKQorI2RlZmluZSBfSVBWUl9U UkFDRV9IXworCisjaW5jbHVkZSAiaXB2cl9iby5oIgorI2luY2x1ZGUgImlwdnJfZmVuY2UuaCIK KyNpbmNsdWRlICJ2ZWRfbXNnLmgiCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxs aW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxp bnV4L3RyYWNlcG9pbnQuaD4KKworI3VuZGVmIFRSQUNFX1NZU1RFTQorI2RlZmluZSBUUkFDRV9T WVNURU0gaXB2cgorI2RlZmluZSBUUkFDRV9TWVNURU1fU1RSSU5HIF9fc3RyaW5naWZ5KFRSQUNF X1NZU1RFTSkKKyNkZWZpbmUgVFJBQ0VfSU5DTFVERV9GSUxFIGlwdnJfdHJhY2UKKworLyogb2Jq ZWN0IHRyYWNraW5nICovCisKK1RSQUNFX0VWRU5UKGlwdnJfY3JlYXRlX29iamVjdCwKKwlUUF9Q Uk9UTyhzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqLCB1NjQgbW11X29mZnNldCksCisJ VFBfQVJHUyhvYmosIG1tdV9vZmZzZXQpLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQo c3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKiwgb2JqKQorCQlfX2ZpZWxkKHUzMiwgc2l6ZSkK KwkJX19maWVsZChib29sLCB0aWxpbmcpCisJCV9fZmllbGQodTMyLCBjYWNoZV9sZXZlbCkKKwkJ X19maWVsZCh1NjQsIG1tdV9vZmZzZXQpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRy eS0+b2JqID0gb2JqOworCQlfX2VudHJ5LT5zaXplID0gb2JqLT5iYXNlLnNpemU7CisJCV9fZW50 cnktPnRpbGluZyA9IG9iai0+dGlsaW5nOworCQlfX2VudHJ5LT5jYWNoZV9sZXZlbCA9IG9iai0+ Y2FjaGVfbGV2ZWw7CisJCV9fZW50cnktPm1tdV9vZmZzZXQgPSBtbXVfb2Zmc2V0OworCSksCisJ VFBfcHJpbnRrKCJvYmo9MHglcCwgc2l6ZT0ldSwgdGlsaW5nPSV1LCBjYWNoZT0ldSwgbW11X29m ZnNldD0weCVsbHgiLAorCQlfX2VudHJ5LT5vYmosIF9fZW50cnktPnNpemUsIF9fZW50cnktPnRp bGluZywKKwkJX19lbnRyeS0+Y2FjaGVfbGV2ZWwsIF9fZW50cnktPm1tdV9vZmZzZXQpCispOwor CitUUkFDRV9FVkVOVChpcHZyX2ZyZWVfb2JqZWN0LAorCVRQX1BST1RPKHN0cnVjdCBkcm1faXB2 cl9nZW1fb2JqZWN0ICpvYmopLAorCVRQX0FSR1Mob2JqKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAor CQlfX2ZpZWxkKHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICosIG9iaikKKwkpLAorCVRQX2Zh c3RfYXNzaWduKAorCQlfX2VudHJ5LT5vYmogPSBvYmo7CisJKSwKKwlUUF9wcmludGsoIm9iaj0w eCVwIiwgX19lbnRyeS0+b2JqKQorKTsKKworVFJBQ0VfRVZFTlQoaXB2cl9mZW5jZV93YWl0X2Jl Z2luLAorCVRQX1BST1RPKHN0cnVjdCBpcHZyX2ZlbmNlICpmZW5jZSwKKwkJdTMyIHNpZ25hbGVk X3NlcSwKKwkJdTE2IHN5bmNfc2VxKSwKKwlUUF9BUkdTKGZlbmNlLCBzaWduYWxlZF9zZXEsIHN5 bmNfc2VxKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKHN0cnVjdCBpcHZyX2ZlbmNl ICosIGZlbmNlKQorCQlfX2ZpZWxkKHUxNiwgZmVuY2Vfc2VxKQorCQlfX2ZpZWxkKHUzMiwgc2ln bmFsZWRfc2VxKQorCQlfX2ZpZWxkKHUxNiwgc3luY19zZXEpCisJKSwKKwlUUF9mYXN0X2Fzc2ln bigKKwkJX19lbnRyeS0+ZmVuY2UgPSBmZW5jZTsKKwkJX19lbnRyeS0+ZmVuY2Vfc2VxID0gZmVu Y2UtPnNlcTsKKwkJX19lbnRyeS0+c2lnbmFsZWRfc2VxID0gc2lnbmFsZWRfc2VxOworCQlfX2Vu dHJ5LT5zeW5jX3NlcSA9IHN5bmNfc2VxOworCSksCisJVFBfcHJpbnRrKCJmZW5jZT0lcCwgZmVu Y2Vfc2VxPSVkLCBzaWduYWxlZF9zZXE9JWQsIHN5bmNfc2VxPSVkIiwKKwkJX19lbnRyeS0+ZmVu Y2UsIF9fZW50cnktPmZlbmNlX3NlcSwKKwkJX19lbnRyeS0+c2lnbmFsZWRfc2VxLCBfX2VudHJ5 LT5zeW5jX3NlcSkKKyk7CisKK1RSQUNFX0VWRU5UKGlwdnJfZmVuY2Vfd2FpdF9lbmQsCisJVFBf UFJPVE8oc3RydWN0IGlwdnJfZmVuY2UgKmZlbmNlLAorCQl1MzIgc2lnbmFsZWRfc2VxLAorCQl1 MTYgc3luY19zZXEpLAorCVRQX0FSR1MoZmVuY2UsIHNpZ25hbGVkX3NlcSwgc3luY19zZXEpLAor CVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoc3RydWN0IGlwdnJfZmVuY2UgKiwgZmVuY2Up CisJCV9fZmllbGQodTE2LCBmZW5jZV9zZXEpCisJCV9fZmllbGQodTMyLCBzaWduYWxlZF9zZXEp CisJCV9fZmllbGQodTE2LCBzeW5jX3NlcSkKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2Vu dHJ5LT5mZW5jZSA9IGZlbmNlOworCQlfX2VudHJ5LT5mZW5jZV9zZXEgPSBmZW5jZS0+c2VxOwor CQlfX2VudHJ5LT5zaWduYWxlZF9zZXEgPSBzaWduYWxlZF9zZXE7CisJCV9fZW50cnktPnN5bmNf c2VxID0gc3luY19zZXE7CisJKSwKKwlUUF9wcmludGsoImZlbmNlPSVwLCBmZW5jZV9zZXE9JWQs IHNpZ25hbGVkX3NlcT0lZCwgc3luY19zZXE9JWQiLAorCQlfX2VudHJ5LT5mZW5jZSwgX19lbnRy eS0+ZmVuY2Vfc2VxLAorCQlfX2VudHJ5LT5zaWduYWxlZF9zZXEsIF9fZW50cnktPnN5bmNfc2Vx KQorKTsKKworCitUUkFDRV9FVkVOVChpcHZyX2ZlbmNlX3dhaXRfbG9ja3VwLAorCVRQX1BST1RP KHN0cnVjdCBpcHZyX2ZlbmNlICpmZW5jZSwKKwkJdTMyIHNpZ25hbGVkX3NlcSwKKwkJdTE2IHN5 bmNfc2VxKSwKKwlUUF9BUkdTKGZlbmNlLCBzaWduYWxlZF9zZXEsIHN5bmNfc2VxKSwKKwlUUF9T VFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKHN0cnVjdCBpcHZyX2ZlbmNlICosIGZlbmNlKQorCQlf X2ZpZWxkKHUxNiwgZmVuY2Vfc2VxKQorCQlfX2ZpZWxkKHUzMiwgc2lnbmFsZWRfc2VxKQorCQlf X2ZpZWxkKHUxNiwgc3luY19zZXEpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ ZmVuY2UgPSBmZW5jZTsKKwkJX19lbnRyeS0+ZmVuY2Vfc2VxID0gZmVuY2UtPnNlcTsKKwkJX19l bnRyeS0+c2lnbmFsZWRfc2VxID0gc2lnbmFsZWRfc2VxOworCQlfX2VudHJ5LT5zeW5jX3NlcSA9 IHN5bmNfc2VxOworCSksCisJVFBfcHJpbnRrKCJmZW5jZT0lcCwgZmVuY2Vfc2VxPSVkLCBzaWdu YWxlZF9zZXE9JWQsIHN5bmNfc2VxPSVkIiwKKwkJX19lbnRyeS0+ZmVuY2UsIF9fZW50cnktPmZl bmNlX3NlcSwKKwkJX19lbnRyeS0+c2lnbmFsZWRfc2VxLCBfX2VudHJ5LT5zeW5jX3NlcSkKKyk7 CisKK1RSQUNFX0VWRU5UKGlwdnJfZXhlY2J1ZmZlciwKKwlUUF9QUk9UTyhzdHJ1Y3QgZHJtX2lw dnJfZ2VtX2V4ZWNidWZmZXIgKmV4ZWMpLAorCVRQX0FSR1MoZXhlYyksCisJVFBfU1RSVUNUX19l bnRyeSgKKwkJX19maWVsZCh1NjQsIGJ1ZmZlcnNfcHRyKQorCQlfX2ZpZWxkKHUzMiwgYnVmZmVy X2NvdW50KQorCQlfX2ZpZWxkKHUzMiwgZXhlY19zdGFydF9vZmZzZXQpCisJCV9fZmllbGQodTMy LCBleGVjX2xlbikKKwkJX19maWVsZCh1MzIsIGN0eF9pZCkKKwkpLAorCVRQX2Zhc3RfYXNzaWdu KAorCQlfX2VudHJ5LT5idWZmZXJzX3B0ciA9IGV4ZWMtPmJ1ZmZlcnNfcHRyOworCQlfX2VudHJ5 LT5idWZmZXJfY291bnQgPSBleGVjLT5idWZmZXJfY291bnQ7CisJCV9fZW50cnktPmV4ZWNfc3Rh cnRfb2Zmc2V0ID0gZXhlYy0+ZXhlY19zdGFydF9vZmZzZXQ7CisJCV9fZW50cnktPmV4ZWNfbGVu ID0gZXhlYy0+ZXhlY19sZW47CisJCV9fZW50cnktPmN0eF9pZCA9IGV4ZWMtPmN0eF9pZDsKKwkp LAorCVRQX3ByaW50aygiYnVmZmVyc19wdHI9MHglbGx4LCBidWZmZXJfY291bnQ9MHglZCwgIgor CQkiZXhlY19zdGFydF9vZmZzZXQ9MHgleCwgZXhlY19sZW49JXUsIGN0eF9pZD0lZCIsCisJCV9f ZW50cnktPmJ1ZmZlcnNfcHRyLCBfX2VudHJ5LT5idWZmZXJfY291bnQsCisJCV9fZW50cnktPmV4 ZWNfc3RhcnRfb2Zmc2V0LCBfX2VudHJ5LT5leGVjX2xlbiwKKwkJX19lbnRyeS0+Y3R4X2lkKQor KTsKKworVFJBQ0VfRVZFTlQodmVkX2NtZF9zZW5kLAorCVRQX1BST1RPKHUzMiBjbWRfaWQsIHUz MiBzZXEpLAorCVRQX0FSR1MoY21kX2lkLCBzZXEpLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9f ZmllbGQodTMyLCBjbWRfaWQpCisJCV9fZmllbGQodTMyLCBzZXEpCisJKSwKKwlUUF9mYXN0X2Fz c2lnbigKKwkJX19lbnRyeS0+Y21kX2lkID0gY21kX2lkOworCQlfX2VudHJ5LT5zZXEgPSBzZXE7 CisJKSwKKwlUUF9wcmludGsoImNtZF9pZD0weCUwOHgsIHNlcT0weCUwOHgiLAorCQlfX2VudHJ5 LT5jbWRfaWQsIF9fZW50cnktPnNlcSkKKyk7CisKK1RSQUNFX0VWRU5UKHZlZF9jbWRfY29weSwK KwlUUF9QUk9UTyh1MzIgY21kX2lkLCB1MzIgc2VxKSwKKwlUUF9BUkdTKGNtZF9pZCwgc2VxKSwK KwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKHUzMiwgY21kX2lkKQorCQlfX2ZpZWxkKHUz Miwgc2VxKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmNtZF9pZCA9IGNtZF9p ZDsKKwkJX19lbnRyeS0+c2VxID0gc2VxOworCSksCisJVFBfcHJpbnRrKCJjbWRfaWQ9MHglMDh4 LCBzZXE9MHglMDh4IiwKKwkJX19lbnRyeS0+Y21kX2lkLCBfX2VudHJ5LT5zZXEpCispOworCitU UkFDRV9FVkVOVChpcHZyX2dldF9wb3dlciwKKwlUUF9QUk9UTyhpbnQgdXNhZ2UsIGludCBwZW5k aW5nKSwKKwlUUF9BUkdTKHVzYWdlLCBwZW5kaW5nKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlf X2ZpZWxkKGludCwgdXNhZ2UpCisJCV9fZmllbGQoaW50LCBwZW5kaW5nKQorCSksCisJVFBfZmFz dF9hc3NpZ24oCisJCV9fZW50cnktPnVzYWdlID0gdXNhZ2U7CisJCV9fZW50cnktPnBlbmRpbmcg PSBwZW5kaW5nOworCSksCisJVFBfcHJpbnRrKCJwb3dlciB1c2FnZSAlZCwgcGVuZGluZyBldmVu dHMgJWQiLAorCQlfX2VudHJ5LT51c2FnZSwKKwkJX19lbnRyeS0+cGVuZGluZykKKyk7CisKK1RS QUNFX0VWRU5UKGlwdnJfcHV0X3Bvd2VyLAorCVRQX1BST1RPKGludCB1c2FnZSwgaW50IHBlbmRp bmcpLAorCVRQX0FSR1ModXNhZ2UsIHBlbmRpbmcpLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9f ZmllbGQoaW50LCB1c2FnZSkKKwkJX19maWVsZChpbnQsIHBlbmRpbmcpCisJKSwKKwlUUF9mYXN0 X2Fzc2lnbigKKwkJX19lbnRyeS0+dXNhZ2UgPSB1c2FnZTsKKwkJX19lbnRyeS0+cGVuZGluZyA9 IHBlbmRpbmc7CisJKSwKKwlUUF9wcmludGsoInBvd2VyIHVzYWdlICVkLCBwZW5kaW5nIGV2ZW50 cyAlZCIsCisJCV9fZW50cnktPnVzYWdlLAorCQlfX2VudHJ5LT5wZW5kaW5nKQorKTsKKworVFJB Q0VfRVZFTlQodmVkX3Bvd2VyX29uLAorCVRQX1BST1RPKGludCBmcmVxKSwKKwlUUF9BUkdTKGZy ZXEpLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoaW50LCBmcmVxKQorCSksCisJVFBf ZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmZyZXEgPSBmcmVxOworCSksCisJVFBfcHJpbnRrKCJm cmVxdWVuY3kgJWQgTUh6IiwgX19lbnRyeS0+ZnJlcSkKKyk7CisKK1RSQUNFX0VWRU5UKHZlZF9w b3dlcl9vZmYsCisJVFBfUFJPVE8oaW50IGZyZXEpLAorCVRQX0FSR1MoZnJlcSksCisJVFBfU1RS VUNUX19lbnRyeSgKKwkJX19maWVsZChpbnQsIGZyZXEpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigK KwkJX19lbnRyeS0+ZnJlcSA9IGZyZXE7CisJKSwKKwlUUF9wcmludGsoImZyZXF1ZW5jeSAlZCBN SHoiLCBfX2VudHJ5LT5mcmVxKQorKTsKKworVFJBQ0VfRVZFTlQodmVkX2lycV9jb21wbGV0ZWQs CisJVFBfUFJPVE8oc3RydWN0IGZ3X2NvbXBsZXRlZF9tc2cgKmNvbXBsZXRlZF9tc2cpLAorCVRQ X0FSR1MoY29tcGxldGVkX21zZyksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCh1MTYs IHNlcW5vKQorCQlfX2ZpZWxkKHUzMiwgZmxhZ3MpCisJCV9fZmllbGQodTMyLCB2ZGViY3IpCisJ CV9fZmllbGQodTE2LCBzdGFydF9tYikKKwkJX19maWVsZCh1MTYsIGxhc3RfbWIpCisJKSwKKwlU UF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+c2Vxbm8gPSBjb21wbGV0ZWRfbXNnLT5oZWFkZXIu Yml0cy5tc2dfZmVuY2U7CisJCV9fZW50cnktPmZsYWdzID0gY29tcGxldGVkX21zZy0+ZmxhZ3M7 CisJCV9fZW50cnktPnZkZWJjciA9IGNvbXBsZXRlZF9tc2ctPnZkZWJjcjsKKwkJX19lbnRyeS0+ c3RhcnRfbWIgPSBjb21wbGV0ZWRfbXNnLT5tYi5iaXRzLnN0YXJ0X21iOworCQlfX2VudHJ5LT5s YXN0X21iID0gY29tcGxldGVkX21zZy0+bWIuYml0cy5sYXN0X21iOworCSksCisJVFBfcHJpbnRr KCJzZXE9MHglMDR4LCBmbGFncz0weCUwOHgsIHZkZWJjcj0weCUwOHgsIG1iPVsldSwgJXVdIiwK KwkJX19lbnRyeS0+c2Vxbm8sCisJCV9fZW50cnktPmZsYWdzLAorCQlfX2VudHJ5LT52ZGViY3Is CisJCV9fZW50cnktPnN0YXJ0X21iLAorCQlfX2VudHJ5LT5sYXN0X21iKQorKTsKKworVFJBQ0Vf RVZFTlQodmVkX2lycV9wYW5pYywKKwlUUF9QUk9UTyhzdHJ1Y3QgZndfcGFuaWNfbXNnICpwYW5p Y19tc2csIHUzMiBlcnJfdHJpZywKKwkJdTMyIGlycV9zdGF0dXMsIHUzMiBtbXVfc3RhdHVzLCB1 MzIgZG1hY19zdGF0dXMpLAorCVRQX0FSR1MocGFuaWNfbXNnLCBlcnJfdHJpZywgaXJxX3N0YXR1 cywgbW11X3N0YXR1cywgZG1hY19zdGF0dXMpLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmll bGQodTE2LCBzZXFubykKKwkJX19maWVsZCh1MzIsIGZlX3N0YXR1cykKKwkJX19maWVsZCh1MzIs IGJlX3N0YXR1cykKKwkJX19maWVsZCh1MTYsIHJzdmQpCisJCV9fZmllbGQodTE2LCBsYXN0X21i KQorCQlfX2ZpZWxkKHUzMiwgZXJyX3RyaWcpCisJCV9fZmllbGQodTMyLCBpcnFfc3RhdHVzKQor CQlfX2ZpZWxkKHUzMiwgbW11X3N0YXR1cykKKwkJX19maWVsZCh1MzIsIGRtYWNfc3RhdHVzKQor CisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+c2Vxbm8gPSBwYW5pY19tc2ctPmhl YWRlci5iaXRzLm1zZ19mZW5jZTsKKwkJX19lbnRyeS0+ZmVfc3RhdHVzID0gcGFuaWNfbXNnLT5m ZV9zdGF0dXM7CisJCV9fZW50cnktPmJlX3N0YXR1cyA9IHBhbmljX21zZy0+YmVfc3RhdHVzOwor CQlfX2VudHJ5LT5yc3ZkID0gcGFuaWNfbXNnLT5tYi5iaXRzLnJlc2VydmVkMjsKKwkJX19lbnRy eS0+bGFzdF9tYiA9IHBhbmljX21zZy0+bWIuYml0cy5sYXN0X21iOworCQlfX2VudHJ5LT5lcnJf dHJpZyA9IGVycl90cmlnOworCQlfX2VudHJ5LT5pcnFfc3RhdHVzID0gaXJxX3N0YXR1czsKKwkJ X19lbnRyeS0+bW11X3N0YXR1cyA9IG1tdV9zdGF0dXM7CisJCV9fZW50cnktPmRtYWNfc3RhdHVz ID0gZG1hY19zdGF0dXM7CisJKSwKKwlUUF9wcmludGsoInNlcT0weCUwNHgsIHN0YXR1cz1bZmUg MHglMDh4IGJlIDB4JTA4eF0sIHJzdmQ9MHglMDR4LCAiCisJCSJsYXN0X21iPSV1LCBlcnJfdHJp Zz0weCUwOHgsIGlycV9zdGF0dXM9MHglMDh4LCAiCisJCSJtbXVfc3RhdHVzPTB4JTA4eCwgZG1h Y19zdGF0dXM9MHglMDh4IiwKKwkJX19lbnRyeS0+c2Vxbm8sCisJCV9fZW50cnktPmZlX3N0YXR1 cywKKwkJX19lbnRyeS0+YmVfc3RhdHVzLAorCQlfX2VudHJ5LT5yc3ZkLAorCQlfX2VudHJ5LT5s YXN0X21iLAorCQlfX2VudHJ5LT5lcnJfdHJpZywKKwkJX19lbnRyeS0+aXJxX3N0YXR1cywKKwkJ X19lbnRyeS0+bW11X3N0YXR1cywKKwkJX19lbnRyeS0+ZG1hY19zdGF0dXMpCispOworCisjZW5k aWYgLyogX0lQVlJfVFJBQ0VfSF8gKi8KKworIC8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUg cHJvdGVjdGlvbiAqLworI3VuZGVmIFRSQUNFX0lOQ0xVREVfUEFUSAorI2RlZmluZSBUUkFDRV9J TkNMVURFX1BBVEggLgorI2luY2x1ZGUgPHRyYWNlL2RlZmluZV90cmFjZS5oPgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX2NtZC5jIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIv dmVkX2NtZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YzFmMWUKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfY21kLmMKQEAgLTAsMCAr MSw4ODIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogdmVkX2NtZC5jOiBWRUQgY29tbWFuZCBo YW5kbGluZyBiZXR3ZWVuIGhvc3QgZHJpdmVyIGFuZCBWRUQgZmlybXdhcmUKKyAqCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24sIEhpbGxzYm9ybywgT1IsIFVTQQorICog Q29weXJpZ2h0IChjKSBJbWFnaW5hdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZCwgVUsKKyAqIENv cHlyaWdodCAoYykgMjAwMyBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQ2VkYXIgUGFyaywgVGV4 YXMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1 bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3 aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3Rv biwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczoKKyAqICAgIEZlaSBKaWFuZyA8 ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqICAgIFlhbyBDaGVuZyA8eWFvLmNoZW5nQGludGVsLmNv bT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJpcHZyX2dlbS5oIgorI2lu Y2x1ZGUgImlwdnJfbW11LmgiCisjaW5jbHVkZSAiaXB2cl9iby5oIgorI2luY2x1ZGUgImlwdnJf dHJhY2UuaCIKKyNpbmNsdWRlICJpcHZyX2ZlbmNlLmgiCisjaW5jbHVkZSAidmVkX2NtZC5oIgor I2luY2x1ZGUgInZlZF9mdy5oIgorI2luY2x1ZGUgInZlZF9tc2cuaCIKKyNpbmNsdWRlICJ2ZWRf cmVnLmgiCisjaW5jbHVkZSAidmVkX3BtLmgiCisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5o PgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2lm bmRlZiBsaXN0X2ZpcnN0X2VudHJ5CisjZGVmaW5lIGxpc3RfZmlyc3RfZW50cnkocHRyLCB0eXBl LCBtZW1iZXIpIFwKKwlsaXN0X2VudHJ5KChwdHIpLT5uZXh0LCB0eXBlLCBtZW1iZXIpCisjZW5k aWYKKworaW50IHZlZF9tdHhfc2VuZChzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2LCBjb25z dCB2b2lkICptc2cpCit7CisJc3RhdGljIHN0cnVjdCBmd19wYWRkaW5nX21zZyBwYWRfbXNnOwor CWNvbnN0IHUzMiAqcF9tc2cgPSAodTMyICopbXNnOworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRl ICpkZXZfcHJpdiA9IHZlZF9wcml2LT5kZXZfcHJpdjsKKwl1MzIgbXNnX251bSwgd29yZHNfZnJl ZSwgcmlkeCwgd2lkeCwgYnVmX3NpemUsIGJ1Zl9vZmZzZXQ7CisJaW50IHJldCA9IDA7CisJaW50 IGk7CisJdW5pb24gbXNnX2hlYWRlciAqaGVhZGVyOworCWhlYWRlciA9ICh1bmlvbiBtc2dfaGVh ZGVyICopbXNnOworCisJSVBWUl9ERUJVR19FTlRSWSgiZW50ZXIuXG4iKTsKKworCS8qIHdlIG5l ZWQgY2xvY2tzIGVuYWJsZWQgYmVmb3JlIHdlIHRvdWNoIFZFQyBsb2NhbCByYW0sCisJICogYnV0 IGZ3IHdpbGwgdGFrZSBjYXJlIG9mIHRoZSBjbG9jayBhZnRlciBmdyBpcyBsb2FkZWQKKwkgKi8K KworCW1zZ19udW0gPSAoaGVhZGVyLT5iaXRzLm1zZ19zaXplICsgMykgLyA0OworCisJLyogZGVi dWcgY29kZSBmb3IgbXNnIGR1bXAgKi8KKwlJUFZSX0RFQlVHX1ZFRCgiTVNWRFg6IHZlZF9tdHhf c2VuZCBpcyAlZERXXG4iLCBtc2dfbnVtKTsKKworCWZvciAoaSA9IDA7IGkgPCBtc2dfbnVtOyBp KyspCisJCUlQVlJfREVCVUdfVkVEKCIgICAweCUwOHhcbiIsIHBfbXNnW2ldKTsKKworCWJ1Zl9z aXplID0gSVBWUl9SRUdfUkVBRDMyKE1TVkRYX0NPTU1TX1RPX01UWF9CVUZfU0laRSkgJgorCQkg ICAoKDEgPDwgMTYpIC0gMSk7CisKKwlpZiAobXNnX251bSA+IGJ1Zl9zaXplKSB7CisJCXJldCA9 IC1FSU5WQUw7CisJCUlQVlJfRVJST1IoIlZFRDogbWVzc2FnZSBleGNlZWQgbWF4aW11bSwgcmV0 OiVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyaWR4ID0gSVBWUl9SRUdfUkVBRDMy KE1TVkRYX0NPTU1TX1RPX01UWF9SRF9JTkRFWCk7CisJd2lkeCA9IElQVlJfUkVHX1JFQUQzMihN U1ZEWF9DT01NU19UT19NVFhfV1JUX0lOREVYKTsKKworCisJYnVmX3NpemUgPSBJUFZSX1JFR19S RUFEMzIoTVNWRFhfQ09NTVNfVE9fTVRYX0JVRl9TSVpFKSAmCisJCSAgICgoMSA8PCAxNikgLSAx KTsKKwkvKjB4MjAwMCBpcyBWRUMgTG9jYWwgUmFtIG9mZnNldCovCisJYnVmX29mZnNldCA9CisJ CShJUFZSX1JFR19SRUFEMzIoTVNWRFhfQ09NTVNfVE9fTVRYX0JVRl9TSVpFKSA+PiAxNikgKyAw eDIwMDA7CisKKwkvKiBtZXNzYWdlIHdvdWxkIHdyYXAsIG5lZWQgdG8gc2VuZCBhIHBhZCBtZXNz YWdlICovCisJaWYgKHdpZHggKyBtc2dfbnVtID4gYnVmX3NpemUpIHsKKwkJLyogU2hvdWxkbid0 IGhhcHBlbiBmb3IgYSBQQUQgbWVzc2FnZSBpdHNlbGYgKi8KKwkJaWYgKGhlYWRlci0+Yml0cy5t c2dfdHlwZSA9PSBNVFhfTVNHSURfUEFERElORykKKwkJCUlQVlJfREVCVUdfV0FSTigiVkVEOiBz aG91bGQgbm90IHdyYXAgcGFkIG1zZywgIgorCQkJCSJidWZfc2l6ZSBpcyAlZCwgd2lkeCBpcyAl ZCwgbXNnX251bSBpcyAlZC5cbiIsCisJCQkJYnVmX3NpemUsIHdpZHgsIG1zZ19udW0pOworCisJ CS8qIGlmIHRoZSByZWFkIHBvaW50ZXIgaXMgYXQgemVybyB0aGVuIHdlIG11c3Qgd2FpdCBmb3Ig aXQgdG8KKwkJICogY2hhbmdlIG90aGVyd2lzZSB0aGUgd3JpdGUgcG9pbnRlciB3aWxsIGVxdWFs IHRoZSByZWFkCisJCSAqIHBvaW50ZXIsd2hpY2ggc2hvdWxkIG9ubHkgaGFwcGVuIHdoZW4gdGhl IGJ1ZmZlciBpcyBlbXB0eQorCQkgKgorCQkgKiBUaGlzIHdpbGwgb25seSBoYXBwZW5zIGlmIHdl IHRyeSB0byBvdmVyZmlsbCB0aGUgcXVldWUsCisJCSAqIHF1ZXVlIG1hbmFnZW1lbnQgc2hvdWxk IG1ha2UKKwkJICogc3VyZSB0aGlzIG5ldmVyIGhhcHBlbnMgaW4gdGhlIGZpcnN0IHBsYWNlLgor CQkgKi8KKwkJaWYgKDAgPT0gcmlkeCkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCUlQVlJfRVJS T1IoIk1TVkRYOiBSSW5kZXg9MCwgcmV0OiVkXG4iLCByZXQpOworCQkJZ290byBvdXQ7CisJCX0K KworCQkvKiBTZW5kIGEgcGFkIG1lc3NhZ2UgKi8KKwkJcGFkX21zZy5oZWFkZXIuYml0cy5tc2df c2l6ZSA9IChidWZfc2l6ZSAtIHdpZHgpIDw8IDI7CisJCXBhZF9tc2cuaGVhZGVyLmJpdHMubXNn X3R5cGUgPSBNVFhfTVNHSURfUEFERElORzsKKwkJdmVkX210eF9zZW5kKHZlZF9wcml2LCAodm9p ZCAqKSZwYWRfbXNnKTsKKwkJd2lkeCA9IElQVlJfUkVHX1JFQUQzMihNU1ZEWF9DT01NU19UT19N VFhfV1JUX0lOREVYKTsKKwl9CisKKwlpZiAod2lkeCA+PSByaWR4KQorCQl3b3Jkc19mcmVlID0g YnVmX3NpemUgLSAod2lkeCAtIHJpZHgpIC0gMTsKKwllbHNlCisJCXdvcmRzX2ZyZWUgPSByaWR4 IC0gd2lkeCAtIDE7CisKKwlpZiAobXNnX251bSA+IHdvcmRzX2ZyZWUpIHsKKwkJcmV0ID0gLUVJ TlZBTDsKKwkJSVBWUl9FUlJPUigiTVNWRFg6IG1zZ19udW0gPiB3b3Jkc19mcmVlLCByZXQ6JWRc biIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKwl3aGlsZSAobXNnX251bSA+IDApIHsKKwkJSVBW Ul9SRUdfV1JJVEUzMigqcF9tc2crKywgYnVmX29mZnNldCArICh3aWR4IDw8IDIpKTsKKwkJbXNn X251bS0tOworCQl3aWR4Kys7CisJCWlmIChidWZfc2l6ZSA9PSB3aWR4KQorCQkJd2lkeCA9IDA7 CisJfQorCisJSVBWUl9SRUdfV1JJVEUzMih3aWR4LCBNU1ZEWF9DT01NU19UT19NVFhfV1JUX0lO REVYKTsKKworCS8qIE1ha2Ugc3VyZSBjbG9ja3MgYXJlIGVuYWJsZWQgYmVmb3JlIHdlIGtpY2sK KwkgKiBidXQgZncgd2lsbCB0YWtlIGNhcmUgb2YgdGhlIGNsb2NrIGFmdGVyIGZ3IGlzIGxvYWRl ZAorCSAqLworCisJLyogc2lnbmFsIGFuIGludGVycnVwdCB0byBsZXQgdGhlIG10eCBrbm93IHRo ZXJlIGlzIGEgbmV3IG1lc3NhZ2UgKi8KKwlJUFZSX1JFR19XUklURTMyKDEsIE1UWF9LSUNLX0lO UFVUX09GRlNFVCk7CisKKwkvKiBSZWFkIE1TVkRYIFJlZ2lzdGVyIHNldmVyYWwgdGltZXMgaW4g Y2FzZSBJZGxlIHNpZ25hbCBhc3NlcnQgKi8KKwlJUFZSX1JFR19SRUFEMzIoTVNWRFhfSU5URVJS VVBUX1NUQVRVU19PRkZTRVQpOworCUlQVlJfUkVHX1JFQUQzMihNU1ZEWF9JTlRFUlJVUFRfU1RB VFVTX09GRlNFVCk7CisJSVBWUl9SRUdfUkVBRDMyKE1TVkRYX0lOVEVSUlVQVF9TVEFUVVNfT0ZG U0VUKTsKKwlJUFZSX1JFR19SRUFEMzIoTVNWRFhfSU5URVJSVVBUX1NUQVRVU19PRkZTRVQpOwor CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2ZWRfY21kX3NlbmQoc3RydWN0 IHZlZF9wcml2YXRlICp2ZWRfcHJpdiwgdm9pZCAqY21kLAorCQkJdTMyIGNtZF9zaXplLCBzdHJ1 Y3QgaXB2cl9jb250ZXh0ICppcHZyX2N0eCkKK3sKKwlpbnQgcmV0ID0gMDsKKwl1bmlvbiBtc2df aGVhZGVyICpoZWFkZXI7CisJdTMyIGN1cl9zZXEgPSAweGZmZmZmZmZmOworCisJd2hpbGUgKGNt ZF9zaXplID4gMCkgeworCQl1MzIgY3VyX2NtZF9zaXplLCBjdXJfY21kX2lkOworCQloZWFkZXIg PSAodW5pb24gbXNnX2hlYWRlciAqKWNtZDsKKwkJY3VyX2NtZF9zaXplID0gaGVhZGVyLT5iaXRz Lm1zZ19zaXplOworCQljdXJfY21kX2lkID0gaGVhZGVyLT5iaXRzLm1zZ190eXBlOworCisJCWN1 cl9zZXEgPSAoKHN0cnVjdCBmd19tc2dfaGVhZGVyICopY21kKS0+aGVhZGVyLmJpdHMubXNnX2Zl bmNlOworCisJCWlmIChjdXJfc2VxICE9IDB4ZmZmZmZmZmYpIHsKKwkJCWlwdnJfY3R4LT5jdXJf c2VxID0gY3VyX3NlcTsKKwkJfQorCisJCWlmIChjdXJfY21kX3NpemUgPiBjbWRfc2l6ZSkgewor CQkJcmV0ID0gLUVJTlZBTDsKKwkJCUlQVlJfRVJST1IoIlZFRDogY21kX3NpemUgJXUgY3VyX2Nt ZF9zaXplICV1LlxuIiwKKwkJCQkgIGNtZF9zaXplLCBjdXJfY21kX3NpemUpOworCQkJZ290byBv dXQ7CisJCX0KKworCQkvKiBTZW5kIHRoZSBtZXNzYWdlIHRvIGgvdyAqLworCQl0cmFjZV92ZWRf Y21kX3NlbmQoY3VyX2NtZF9pZCwgY3VyX3NlcSk7CisJCXJldCA9IHZlZF9tdHhfc2VuZCh2ZWRf cHJpdiwgY21kKTsKKwkJaWYgKHJldCkgeworCQkJSVBWUl9ERUJVR19XQVJOKCJWRUQ6IHJldDol ZFxuIiwgcmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWNtZCArPSBjdXJfY21kX3NpemU7CisJ CWNtZF9zaXplIC09IGN1cl9jbWRfc2l6ZTsKKwkJaWYgKGN1cl9jbWRfaWQgPT0gTVRYX01TR0lE X0hPU1RfQkVfT1BQIHx8CisJCQljdXJfY21kX2lkID09IE1UWF9NU0dJRF9ERUJMT0NLIHx8CisJ CQljdXJfY21kX2lkID09IE1UWF9NU0dJRF9JTlRSQV9PT0xEKSB7CisJCQljbWQgKz0gKHNpemVv ZihzdHJ1Y3QgZndfZGVibG9ja19tc2cpIC0gY3VyX2NtZF9zaXplKTsKKwkJCWNtZF9zaXplIC09 CisJCQkJKHNpemVvZihzdHJ1Y3QgZndfZGVibG9ja19tc2cpIC0gY3VyX2NtZF9zaXplKTsKKwkJ fQorCX0KK291dDoKKwlJUFZSX0RFQlVHX1ZFRCgiVkVEOiByZXQ6JWRcbiIsIHJldCk7CisJcmV0 dXJuIHJldDsKK30KKworaW50IHZlZF9jbWRfZGVxdWV1ZV9zZW5kKHN0cnVjdCB2ZWRfcHJpdmF0 ZSAqdmVkX3ByaXYpCit7CisJc3RydWN0IHZlZF9jbWRfcXVldWUgKnZlZF9jbWQgPSBOVUxMOwor CWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisJc3Bpbl9sb2NrX2ly cXNhdmUoJnZlZF9wcml2LT52ZWRfbG9jaywgaXJxX2ZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgm dmVkX3ByaXYtPnZlZF9xdWV1ZSkpIHsKKwkJSVBWUl9ERUJVR19WRUQoIlZFRDogdmVkIGNtZCBx dWV1ZSBlbXB0eS5cbiIpOworCQl2ZWRfcHJpdi0+dmVkX2J1c3kgPSBmYWxzZTsKKwkJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmdmVkX3ByaXYtPnZlZF9sb2NrLCBpcnFfZmxhZ3MpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwl2ZWRfY21kID0gbGlzdF9maXJzdF9lbnRyeSgmdmVkX3ByaXYt PnZlZF9xdWV1ZSwKKwkJCQkgICAgIHN0cnVjdCB2ZWRfY21kX3F1ZXVlLCBoZWFkKTsKKwlsaXN0 X2RlbCgmdmVkX2NtZC0+aGVhZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVkX3ByaXYt PnZlZF9sb2NrLCBpcnFfZmxhZ3MpOworCisJSVBWUl9ERUJVR19WRUQoIlZFRDogY21kIHF1ZXVl IHNlcSBpcyAlMDh4LlxuIiwgdmVkX2NtZC0+Y21kX3NlcSk7CisKKwlpcHZyX3NldF90aWxlKHZl ZF9wcml2LT5kZXZfcHJpdiwgdmVkX2NtZC0+dGlsaW5nX3NjaGVtZSwKKwkJCQkgICB2ZWRfY21k LT50aWxpbmdfc3RyaWRlKTsKKworCXJldCA9IHZlZF9jbWRfc2VuZCh2ZWRfcHJpdiwgdmVkX2Nt ZC0+Y21kLAorCQkJICAgdmVkX2NtZC0+Y21kX3NpemUsIHZlZF9jbWQtPmlwdnJfY3R4KTsKKwlp ZiAocmV0KSB7CisJCUlQVlJfRVJST1IoIlZFRDogdmVkX2NtZF9zZW5kIGZhaWxlZC5cbiIpOwor CQlyZXQgPSAtRUlOVkFMOworCX0KKworCWtmcmVlKHZlZF9jbWQtPmNtZCk7CisJa2ZyZWUodmVk X2NtZCk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHZlZF9mbHVzaF9jbWRfcXVldWUoc3Ry dWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdikKK3sKKwlzdHJ1Y3QgdmVkX2NtZF9xdWV1ZSAqdmVk X2NtZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCAqbmV4dDsKKwl1bnNpZ25lZCBsb25nIGly cV9mbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmVkX3ByaXYtPnZlZF9sb2NrLCBpcnFfZmxh Z3MpOworCS8qIEZsdXNoIHRoZSBWRUQgY21kIHF1ZXVlIGFuZCBzaWduYWwgYWxsIGZlbmNlcyBp biB0aGUgcXVldWUgKi8KKwlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdCwgbmV4dCwgJnZlZF9wcml2 LT52ZWRfcXVldWUpIHsKKwkJdmVkX2NtZCA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IHZlZF9j bWRfcXVldWUsIGhlYWQpOworCQlsaXN0X2RlbChsaXN0KTsKKwkJSVBWUl9ERUJVR19WRUQoIlZF RDogZmx1c2hpbmcgc2VxdWVuY2U6MHglMDh4LlxuIiwKKwkJCQkgIHZlZF9jbWQtPmNtZF9zZXEp OworCQl2ZWRfcHJpdi0+dmVkX2N1cl9zZXEgPSB2ZWRfY21kLT5jbWRfc2VxOworCisJCWlwdnJf ZmVuY2VfcHJvY2Vzcyh2ZWRfcHJpdi0+ZGV2X3ByaXYsIHZlZF9jbWQtPmNtZF9zZXEsIElQVlJf Q01EX1NLSVApOworCQlrZnJlZSh2ZWRfY21kLT5jbWQpOworCQlrZnJlZSh2ZWRfY21kKTsKKwl9 CisJdmVkX3ByaXYtPnZlZF9idXN5ID0gZmFsc2U7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm dmVkX3ByaXYtPnZlZF9sb2NrLCBpcnFfZmxhZ3MpOworfQorCitzdGF0aWMgaW50Cit2ZWRfbWFw X2NvbW1hbmQoc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdiwKKwkJCQlzdHJ1Y3QgZHJtX2lw dnJfZ2VtX29iamVjdCAqY21kX2J1ZmZlciwKKwkJCQl1MzIgY21kX3NpemUsIHZvaWQgKip2ZWRf Y21kLAorCQkJCXUxNiBzZXF1ZW5jZSwgczMyIGNvcHlfY21kLAorCQkJCXN0cnVjdCBpcHZyX2Nv bnRleHQgKmlwdnJfY3R4KQoreworCWludCByZXQgPSAwOworCXUzMiBjbWRfc2l6ZV9yZW1haW47 CisJdm9pZCAqY21kLCAqY21kX2NvcHksICpjbWRfc3RhcnQ7CisJdW5pb24gbXNnX2hlYWRlciAq aGVhZGVyOworCXN0cnVjdCBpcHZyX2ZlbmNlICpmZW5jZSA9IE5VTEw7CisKKwkvKiBjb21tYW5k IGJ1ZmZlcnMgbWF5IG5vdCBleGNlZWQgcGFnZSBib3VuZGFyeSAqLworCWlmIChjbWRfc2l6ZSA+ IFBBR0VfU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljbWRfc3RhcnQgPSBrbWFwKHNnX3Bh Z2UoY21kX2J1ZmZlci0+c2dfdGFibGUtPnNnbCkpOworCWlmICghY21kX3N0YXJ0KSB7CisJCUlQ VlJfRVJST1IoIlZFRDoga21hcCBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQor CisJY21kID0gY21kX3N0YXJ0OworCWNtZF9zaXplX3JlbWFpbiA9IGNtZF9zaXplOworCisJd2hp bGUgKGNtZF9zaXplX3JlbWFpbiA+IDApIHsKKwkJdTMyIGN1cl9jbWRfc2l6ZSwgY3VyX2NtZF9p ZCwgbW11X3B0ZCwgbXN2ZHhfbW11X2ludmFsaWQ7CisJCWlmIChjbWRfc2l6ZV9yZW1haW4gPCBN VFhfR0VOTVNHX0hFQURFUl9TSVpFKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7 CisJCX0KKwkJaGVhZGVyID0gKHVuaW9uIG1zZ19oZWFkZXIgKiljbWQ7CisJCWN1cl9jbWRfc2l6 ZSA9IGhlYWRlci0+Yml0cy5tc2dfc2l6ZTsKKwkJY3VyX2NtZF9pZCA9IGhlYWRlci0+Yml0cy5t c2dfdHlwZTsKKwkJbW11X3B0ZCA9IDA7CisJCW1zdmR4X21tdV9pbnZhbGlkID0gMDsKKworCQlJ UFZSX0RFQlVHX1ZFRCgiY21kIHN0YXJ0IGF0ICVseCBjdXJfY21kX3NpemUgPSAlZCIKKwkJCSAg ICAgICAiIGN1cl9jbWRfaWQgPSAlMDJ4IGZlbmNlID0gJTA4eFxuIiwKKwkJCSAgICAgICAodW5z aWduZWQgbG9uZyljbWQsIGN1cl9jbWRfc2l6ZSwKKwkJCSAgICAgICBjdXJfY21kX2lkLCBzZXF1 ZW5jZSk7CisJCWlmICgoY3VyX2NtZF9zaXplICUgc2l6ZW9mKHUzMikpCisJCSAgICB8fCAoY3Vy X2NtZF9zaXplID4gY21kX3NpemVfcmVtYWluKSkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCUlQ VlJfRVJST1IoIlZFRDogY21kIHNpemUgZXJyLCByZXQ6JWQuXG4iLCByZXQpOworCQkJZ290byBv dXQ7CisJCX0KKworCQlzd2l0Y2ggKGN1cl9jbWRfaWQpIHsKKwkJY2FzZSBNVFhfTVNHSURfREVD T0RFX0ZFOiB7CisJCQlzdHJ1Y3QgZndfZGVjb2RlX21zZyAqZGVjb2RlX21zZzsKKwkJCWlmIChz aXplb2Yoc3RydWN0IGZ3X2RlY29kZV9tc2cpID4gY21kX3NpemVfcmVtYWluKSB7CisJCQkJLyog TXNnIHNpemUgaXMgbm90IGNvcnJlY3QgKi8KKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCUlQVlJf REVCVUdfV0FSTigiTVNWRFg6IHdyb25nIG1zZyBzaXplLlxuIik7CisJCQkJZ290byBvdXQ7CisJ CQl9CisJCQlkZWNvZGVfbXNnID0gKHN0cnVjdCBmd19kZWNvZGVfbXNnICopY21kOworCQkJZGVj b2RlX21zZy0+aGVhZGVyLmJpdHMubXNnX2ZlbmNlID0gc2VxdWVuY2U7CisKKwkJCW1tdV9wdGQg PSBpcHZyX2dldF9kZWZhdWx0X3BkX2FkZHIzMih2ZWRfcHJpdi0+ZGV2X3ByaXYtPm1tdSk7CisJ CQlpZiAobW11X3B0ZCA9PSAwKSB7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQlJUFZSX0RFQlVH X1dBUk4oIk1TVkRYOiBpbnZhbGlkIFBEIGFkZHIzMi5cbiIpOworCQkJCWdvdG8gb3V0OworCQkJ fQorCQkJbXN2ZHhfbW11X2ludmFsaWQgPSBhdG9taWNfY21weGNoZygmdmVkX3ByaXYtPmRldl9w cml2LT5pcHZyX21tdV9pbnZhbGRjLCAxLCAwKTsKKwkJCWlmIChtc3ZkeF9tbXVfaW52YWxpZCA9 PSAxKSB7CisJCQkJZGVjb2RlX21zZy0+ZmxhZ19zaXplLmJpdHMuZmxhZ3MgfD0gRldfSU5WQUxJ REFURV9NTVU7CisJCQkJSVBWUl9ERUJVR19WRUQoIlZFRDogU2V0IE1NVSBpbnZhbGlkYXRlXG4i KTsKKwkJCX0KKwkJCS8qIGlmIGN0eF9pZCBpcyBub3QgcGFzc2VkLCB1c2UgZGVmYXVsdCBpZCAq LworCQkJaWYgKGRlY29kZV9tc2ctPm1tdV9jb250ZXh0LmJpdHMuY29udGV4dCA9PSAwKQorCQkJ CWRlY29kZV9tc2ctPm1tdV9jb250ZXh0LmJpdHMuY29udGV4dCA9CisJCQkJCXZlZF9wcml2LT5k ZXZfcHJpdi0+ZGVmYXVsdF9jdHguY3R4X2lkOworCisJCQlkZWNvZGVfbXNnLT5tbXVfY29udGV4 dC5iaXRzLm1tdV9wdGQgPSBtbXVfcHRkID4+IDg7CisJCQlJUFZSX0RFQlVHX1ZFRCgiVkVEOiBN U0dJRF9ERUNPREVfRkU6IgorCQkJCQkiIC0gZmVuY2U6ICUwOHgiCisJCQkJCSIgLSBmbGFnczog JTA4eCAtIGJ1ZmZlcl9zaXplOiAlMDh4IgorCQkJCQkiIC0gY3J0bF9hbGxvY19hZGRyOiAlMDh4 IgorCQkJCQkiIC0gY29udGV4dDogJTA4eCAtIG1tdV9wdGQ6ICUwOHgiCisJCQkJCSIgLSBvcGVy YXRpbmdfbW9kZTogJTA4eC5cbiIsCisJCQkJCWRlY29kZV9tc2ctPmhlYWRlci5iaXRzLm1zZ19m ZW5jZSwKKwkJCQkJZGVjb2RlX21zZy0+ZmxhZ19zaXplLmJpdHMuZmxhZ3MsCisJCQkJCWRlY29k ZV9tc2ctPmZsYWdfc2l6ZS5iaXRzLmJ1ZmZlcl9zaXplLAorCQkJCQlkZWNvZGVfbXNnLT5jcnRs X2FsbG9jX2FkZHIsCisJCQkJCWRlY29kZV9tc2ctPm1tdV9jb250ZXh0LmJpdHMuY29udGV4dCwK KwkJCQkJZGVjb2RlX21zZy0+bW11X2NvbnRleHQuYml0cy5tbXVfcHRkLAorCQkJCQlkZWNvZGVf bXNnLT5vcGVyYXRpbmdfbW9kZSk7CisJCQlicmVhazsKKwkJfQorCQlkZWZhdWx0OgorCQkJLyog TXNnIG5vdCBzdXBwb3J0ZWQgKi8KKwkJCXJldCA9IC1FSU5WQUw7CisJCQlJUFZSX0RFQlVHX1dB Uk4oIlZFRDogbXNnIG5vdCBzdXBwb3J0ZWQuXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJ Y21kICs9IGN1cl9jbWRfc2l6ZTsKKwkJY21kX3NpemVfcmVtYWluIC09IGN1cl9jbWRfc2l6ZTsK KwkJaWYgKCgoc2VxdWVuY2UrKykgJiAweGYpID09IDB4ZikgeworCQkJcmV0ID0gLUVJTlZBTDsK KwkJCUlQVlJfREVCVUdfV0FSTigiVkVEOiB0b28gbWFueSBjbWRzLCBhYm9ydC5cbiIpOworCQkJ Z290byBvdXQ7CisJCX0KKwl9CisKKwl2ZWRfcHJpdi0+bnVtX2NtZCA9ICgoLS1zZXF1ZW5jZSkg JiAweGYpOworCisJaXB2cl9mZW5jZV9jcmVhdGUodmVkX3ByaXYtPmRldl9wcml2LCAmZmVuY2Up OworCisJaXB2cl9mZW5jZV9idWZmZXJfb2JqZWN0cygmdmVkX3ByaXYtPmRldl9wcml2LT52YWxp ZGF0ZV9jdHgudmFsaWRhdGVfbGlzdCwKKwkJCQlmZW5jZSk7CisKKwlpZiAoY29weV9jbWQpIHsK KwkJSVBWUl9ERUJVR19WRUQoIlZFRDogY29weWluZyBjb21tYW5kLlxuIik7CisKKwkJY21kX2Nv cHkgPSBremFsbG9jKGNtZF9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGNtZF9jb3B5ID09IE5V TEwpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlJUFZSX0VSUk9SKCJWRUQ6IGZhaWwgdG8gY2Fs bGMsIHJldD06JWRcbiIsIHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCQltZW1jcHkoY21kX2Nv cHksIGNtZF9zdGFydCwgY21kX3NpemUpOworCQkqdmVkX2NtZCA9IGNtZF9jb3B5OworCX0gZWxz ZSB7CisJCUlQVlJfREVCVUdfVkVEKCJWRUQ6IGRpZCBOT1QgY29weSBjb21tYW5kLlxuIik7CisJ CWlwdnJfc2V0X3RpbGUodmVkX3ByaXYtPmRldl9wcml2LCB2ZWRfcHJpdi0+aXB2cl9jdHgtPnRp bGluZ19zY2hlbWUsCisJCQkJCXZlZF9wcml2LT5pcHZyX2N0eC0+dGlsaW5nX3N0cmlkZSk7CisK KwkJcmV0ID0gdmVkX2NtZF9zZW5kKHZlZF9wcml2LCBjbWRfc3RhcnQsIGNtZF9zaXplLCBpcHZy X2N0eCk7CisJCWlmIChyZXQpIHsKKwkJCUlQVlJfRVJST1IoIlZFRDogdmVkX2NtZF9zZW5kIGZh aWxlZFxuIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQl9CisJfQorCitvdXQ6CisJa3VubWFwKHNn X3BhZ2UoY21kX2J1ZmZlci0+c2dfdGFibGUtPnNnbCkpOworCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGludAordmVkX3N1Ym1pdF9jbWRidWZfY29weShzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZl ZF9wcml2LAorCQkJCXN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpjbWRfYnVmZmVyLAorCQkJ CXUzMiBjbWRfc2l6ZSwKKwkJCQlzdHJ1Y3QgaXB2cl9jb250ZXh0ICppcHZyX2N0eCwKKwkJCQl1 MzIgZmVuY2VfZmxhZykKK3sKKwlzdHJ1Y3QgdmVkX2NtZF9xdWV1ZSAqdmVkX2NtZDsKKwl1MTYg c2VxdWVuY2UgPSAgKHZlZF9wcml2LT5kZXZfcHJpdi0+bGFzdF9zZXEgPDwgNCk7CisJdW5zaWdu ZWQgbG9uZyBpcnFfZmxhZ3M7CisJdm9pZCAqY21kID0gTlVMTDsKKwlpbnQgcmV0OworCXVuaW9u IG1zZ19oZWFkZXIgKmhlYWRlcjsKKworCS8qIHF1ZXVlIHRoZSBjb21tYW5kIHRvIGJlIHNlbnQg d2hlbiB0aGUgaC93IGlzIHJlYWR5ICovCisJSVBWUl9ERUJVR19WRUQoIlZFRDogcXVldWVpbmcg c2VxdWVuY2U6JTA4eC5cbiIsCisJCQkgIHNlcXVlbmNlKTsKKwl2ZWRfY21kID0ga3phbGxvYyhz aXplb2Yoc3RydWN0IHZlZF9jbWRfcXVldWUpLAorCQkJICAgIEdGUF9LRVJORUwpOworCWlmICh2 ZWRfY21kID09IE5VTEwpIHsKKwkJSVBWUl9FUlJPUigiTVNWRFhRVUU6IE91dCBvZiBtZW1vcnku Li5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXQgPSB2ZWRfbWFwX2NvbW1hbmQo dmVkX3ByaXYsIGNtZF9idWZmZXIsIGNtZF9zaXplLAorCQkJCSZjbWQsIHNlcXVlbmNlLCAxLCBp cHZyX2N0eCk7CisJaWYgKHJldCkgeworCQlJUFZSX0VSUk9SKCJWRUQ6IEZhaWxlZCB0byBleHRy YWN0IGNtZFxuIik7CisJCWtmcmVlKHZlZF9jbWQpOworCQkvKiAtRUlOVkFMIG9yIC1FRkFVTFQg b3IgLUVOT01FTSAqLworCQlyZXR1cm4gcmV0OworCX0KKwloZWFkZXIgPSAodW5pb24gbXNnX2hl YWRlciAqKWNtZDsKKwl2ZWRfY21kLT5jbWQgPSBjbWQ7CisJdmVkX2NtZC0+Y21kX3NpemUgPSBj bWRfc2l6ZTsKKwl2ZWRfY21kLT5jbWRfc2VxID0gc2VxdWVuY2U7CisKKwl2ZWRfY21kLT50aWxp bmdfc2NoZW1lID0gdmVkX3ByaXYtPmlwdnJfY3R4LT50aWxpbmdfc2NoZW1lOworCXZlZF9jbWQt PnRpbGluZ19zdHJpZGUgPSB2ZWRfcHJpdi0+aXB2cl9jdHgtPnRpbGluZ19zdHJpZGU7CisJdmVk X2NtZC0+dGZpbGUgPQorCQl2ZWRfcHJpdi0+dGZpbGU7CisJdmVkX2NtZC0+aXB2cl9jdHggPSBp cHZyX2N0eDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmVkX3ByaXYtPnZlZF9sb2NrLCBpcnFfZmxh Z3MpOworCWxpc3RfYWRkX3RhaWwoJnZlZF9jbWQtPmhlYWQsICZ2ZWRfcHJpdi0+dmVkX3F1ZXVl KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWRfcHJpdi0+dmVkX2xvY2ssIGlycV9mbGFn cyk7CisJaWYgKCF2ZWRfcHJpdi0+dmVkX2J1c3kpIHsKKwkJdmVkX3ByaXYtPnZlZF9idXN5ID0g dHJ1ZTsKKwkJSVBWUl9ERUJVR19WRUQoIlZFRDogTmVlZCBpbW1lZGlhdGUgZGVxdWV1ZS5cbiIp OworCQl2ZWRfY21kX2RlcXVldWVfc2VuZCh2ZWRfcHJpdik7CisJfQorCXRyYWNlX3ZlZF9jbWRf Y29weShoZWFkZXItPmJpdHMubXNnX3R5cGUsIHNlcXVlbmNlKTsKKworCXJldHVybiByZXQ7Cit9 CisKK2ludAorCit2ZWRfc3VibWl0X3ZpZGVvX2NtZGJ1ZihzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZl ZF9wcml2LAorCQkJCXN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpjbWRfYnVmZmVyLAorCQkJ CXUzMiBjbWRfc2l6ZSwKKwkJCQlzdHJ1Y3QgaXB2cl9jb250ZXh0ICppcHZyX2N0eCwKKwkJCQl1 MzIgZmVuY2VfZmxhZykKK3sKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlzdHJ1Y3QgZHJt X2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2ZWRfcHJpdi0+ZGV2X3ByaXY7CisJdTE2IHNlcXVl bmNlID0gIChkZXZfcHJpdi0+bGFzdF9zZXEgPDwgNCkgJiAweGZmZmY7CisJaW50IHJldCA9IDA7 CisKKwlpZiAoc2VxdWVuY2UgPT0gSVBWUl9GRU5DRV9TSUdOQUxFRF9TRVEpIHsKKwkJc2VxdWVu Y2UgPSAgKCsrdmVkX3ByaXYtPmRldl9wcml2LT5sYXN0X3NlcSA8PCA0KSAmIDB4ZmZmZjsKKwl9 CisKKwlpZiAoIWlwdnJfY3R4KSB7CisJCUlQVlJfRVJST1IoIlZFRDogbnVsbCBjdHhcbiIpOwor CQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmVkX3ByaXYtPnZl ZF9sb2NrLCBpcnFfZmxhZ3MpOworCisJdmVkX3ByaXYtPmlwdnJfY3R4ID0gaXB2cl9jdHg7CisK KwlJUFZSX0RFQlVHX1ZFRCgic2VxdWVuY2UgaXMgMHgleCwgbmVlZHNfcmVzZXQgaXMgMHgleC5c biIsCisJCQlzZXF1ZW5jZSwgdmVkX3ByaXYtPnZlZF9uZWVkc19yZXNldCk7CisKKwlpZiAoV0FS Tl9PTihpcHZyX3J1bnRpbWVfcG1fZ2V0KHZlZF9wcml2LT5kZXZfcHJpdikgPCAwKSkgeworCQlJ UFZSX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IGlwdnIgcG93ZXJcbiIpOworCQlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZ2ZWRfcHJpdi0+dmVkX2xvY2ssIGlycV9mbGFncyk7CisJCXJldHVybiAtRUJV U1k7CisJfQorCisJaWYgKHZlZF9wcml2LT52ZWRfYnVzeSkgeworCQlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZ2ZWRfcHJpdi0+dmVkX2xvY2ssIGlycV9mbGFncyk7CisJCXJldCA9IHZlZF9zdWJt aXRfY21kYnVmX2NvcHkodmVkX3ByaXYsIGNtZF9idWZmZXIsCisJCQkgICAgY21kX3NpemUsIGlw dnJfY3R4LCBmZW5jZV9mbGFnKTsKKworCQlyZXR1cm4gcmV0OworCX0KKworCWlmICh2ZWRfcHJp di0+dmVkX25lZWRzX3Jlc2V0KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlZF9wcml2 LT52ZWRfbG9jaywgaXJxX2ZsYWdzKTsKKwkJSVBWUl9ERUJVR19WRUQoIlZFRDogd2lsbCByZXNl dCBtc3ZkeC5cbiIpOworCisJCWlmICh2ZWRfY29yZV9yZXNldCh2ZWRfcHJpdikpIHsKKwkJCXJl dCA9IC1FQlVTWTsKKwkJCUlQVlJfRVJST1IoIlZFRDogUmVzZXQgZmFpbGVkLlxuIik7CisJCQln b3RvIG91dF9wb3dlcl9wdXQ7CisJCX0KKworCQl2ZWRfcHJpdi0+dmVkX25lZWRzX3Jlc2V0ID0g MDsKKwkJdmVkX3ByaXYtPnZlZF9idXN5ID0gZmFsc2U7CisKKwkJaWYgKHZlZF9jb3JlX2luaXQo dmVkX3ByaXYtPmRldl9wcml2KSkgeworCQkJcmV0ID0gLUVCVVNZOworCQkJSVBWUl9ERUJVR19X QVJOKCJWRUQ6IHZlZF9jb3JlX2luaXQgZmFpbC5cbiIpOworCQkJZ290byBvdXRfcG93ZXJfcHV0 OworCQl9CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnZlZF9wcml2LT52ZWRfbG9jaywgaXJxX2Zs YWdzKTsKKwl9CisKKwlpZiAoIXZlZF9wcml2LT52ZWRfZndfbG9hZGVkKSB7CisJCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJnZlZF9wcml2LT52ZWRfbG9jaywgaXJxX2ZsYWdzKTsKKwkJSVBWUl9E RUJVR19WRUQoIlZFRDogcmVsb2FkIEZXIHRvIE1UWFxuIik7CisJCXJldCA9IHZlZF9zZXR1cF9m dyh2ZWRfcHJpdik7CisJCWlmIChyZXQpIHsKKwkJCUlQVlJfRVJST1IoIlZFRDogZmFpbCB0byBs b2FkIEZXXG4iKTsKKwkJCS8qIEZJWE1FOiBmaW5kIGEgcHJvcGVyIHJldHVybiB2YWx1ZSAqLwor CQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0X3Bvd2VyX3B1dDsKKwkJfQorCQl2ZWRfcHJp di0+dmVkX2Z3X2xvYWRlZCA9IHRydWU7CisKKwkJSVBWUl9ERUJVR19WRUQoIlZFRDogbG9hZCBm aXJtd2FyZSBzdWNjZXNzZnVsbHlcbiIpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmVkX3ByaXYt PnZlZF9sb2NrLCBpcnFfZmxhZ3MpOworCX0KKworCXZlZF9wcml2LT52ZWRfYnVzeSA9IHRydWU7 CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVkX3ByaXYtPnZlZF9sb2NrLCBpcnFfZmxhZ3Mp OworCUlQVlJfREVCVUdfVkVEKCJWRUQ6IGNvbW1pdCBjb21tYW5kIHRvIEhXLHNlcT0weCUwOHhc biIsCisJCQkgIHNlcXVlbmNlKTsKKwlyZXQgPSB2ZWRfbWFwX2NvbW1hbmQodmVkX3ByaXYsIGNt ZF9idWZmZXIsIGNtZF9zaXplLAorCQkJCU5VTEwsIHNlcXVlbmNlLCAwLCBpcHZyX2N0eCk7CisJ aWYgKHJldCkgeworCQlJUFZSX0VSUk9SKCJWRUQ6IEZhaWxlZCB0byBleHRyYWN0IGNtZC5cbiIp OworCQlnb3RvIG91dF9wb3dlcl9wdXQ7CisJfQorCisJcmV0dXJuIDA7CitvdXRfcG93ZXJfcHV0 OgorCWlmIChXQVJOX09OKGlwdnJfcnVudGltZV9wbV9wdXQodmVkX3ByaXYtPmRldl9wcml2LCBm YWxzZSkgPCAwKSkKKwkJSVBWUl9FUlJPUigiRmFpbGVkIHRvIHB1dCBpcHZyIHBvd2VyXG4iKTsK KwlyZXR1cm4gcmV0OworfQorCitpbnQgdmVkX2NtZGJ1Zl92aWRlbyhzdHJ1Y3QgdmVkX3ByaXZh dGUgKnZlZF9wcml2LAorCQkJCQkJc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKmNtZF9idWZm ZXIsCisJCQkJCQl1MzIgY21kYnVmX3NpemUsCisJCQkJCQlzdHJ1Y3QgaXB2cl9jb250ZXh0ICpp cHZyX2N0eCkKK3sKKwlyZXR1cm4gdmVkX3N1Ym1pdF92aWRlb19jbWRidWYodmVkX3ByaXYsIGNt ZF9idWZmZXIsIGNtZGJ1Zl9zaXplLCBpcHZyX2N0eCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgdmVk X2hhbmRsZV9wYW5pY19tc2coc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdiwKKwkJCQkJc3Ry dWN0IGZ3X3BhbmljX21zZyAqcGFuaWNfbXNnKQoreworCS8qIEZvciBWWEQzODUgZmlybXdhcmUs IGZlbmNlIHZhbHVlIGlzIG5vdCB2YWxpZGF0ZSBoZXJlICovCisJdTMyIGRpZmYgPSAwOworCXUx NiBmZW5jZTsKKwl1MzIgZXJyX3RyaWcsIGlycV9zdHMsIG1tdV9zdHMsIGRtYWNfc3RzOworCXN0 cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IHZlZF9wcml2LT5kZXZfcHJpdjsKKwlJ UFZSX0RFQlVHX1dBUk4oIk1TVkRYOiBNU0dJRF9DTURfSFdfUEFOSUM6IgorCQkgICJGYXVsdCBk ZXRlY3RlZCIKKwkJICAiIC0gRmVuY2U6ICUwOHgiCisJCSAgIiAtIGZlX3N0YXR1cyBtYjogJTA4 eCIKKwkJICAiIC0gYmVfc3RhdHVzIG1iOiAlMDh4IgorCQkgICIgLSByZXNlcnZlZDI6ICUwOHgi CisJCSAgIiAtIGxhc3QgbWI6ICUwOHgiCisJCSAgIiAtIHJlc2V0dGluZyBhbmQgaWdub3Jpbmcg ZXJyb3JcbiIsCisJCSAgcGFuaWNfbXNnLT5oZWFkZXIuYml0cy5tc2dfZmVuY2UsCisJCSAgcGFu aWNfbXNnLT5mZV9zdGF0dXMsCisJCSAgcGFuaWNfbXNnLT5iZV9zdGF0dXMsCisJCSAgcGFuaWNf bXNnLT5tYi5iaXRzLnJlc2VydmVkMiwKKwkJICBwYW5pY19tc2ctPm1iLmJpdHMubGFzdF9tYik7 CisJLyoKKwkgKiBJZiBiaXQgOCBvZiBNU1ZEWF9JTlRFUlJVUFRfU1RBVFVTIGlzIHNldCB0aGUg ZmF1bHQKKwkgKiB3YXMgY2F1c2VkIGluIHRoZSBETUFDLiBJbiB0aGlzIGNhc2UgeW91IHNob3Vs ZAorCSAqIGNoZWNrIGJpdHMgMjA6MjIgb2YgTVNWRFhfSU5URVJSVVBUX1NUQVRVUy4KKwkgKiBJ ZiBiaXQgMjAgaXMgc2V0IHRoZXJlIHdhcyBhIHByb2JsZW0gRE1BaW5nIHRoZSBidWZmZXIKKwkg KiBiYWNrIHRvIGhvc3QuIElmIGJpdCAyMiBpcyBzZXQgeW91J2xsIG5lZWQgdG8gZ2V0IHRoZQor CSAqIHZhbHVlIG9mIE1TVkRYX0RNQUNfU1RSRUFNX1NUQVRVUyAoMHg2NDgpLgorCSAqIElmIGJp dCAxIGlzIHNldCB0aGVuIHRoZXJlIHdhcyBhbiBpc3N1ZSBETUFpbmcKKwkgKiB0aGUgYml0c3Ry ZWFtIG9yIHRlcm1pbmF0aW9uIGNvZGUgZm9yIHBhcnNpbmcuCisJICovCisJZXJyX3RyaWcgPSBJ UFZSX1JFR19SRUFEMzIoTVNWRFhfQ09NTVNfRVJST1JfVFJJRyk7CisJaXJxX3N0cyA9IElQVlJf UkVHX1JFQUQzMihNU1ZEWF9JTlRFUlJVUFRfU1RBVFVTX09GRlNFVCk7CisJbW11X3N0cyA9IElQ VlJfUkVHX1JFQUQzMihNU1ZEWF9NTVVfU1RBVFVTX09GRlNFVCk7CisJZG1hY19zdHMgPSBJUFZS X1JFR19SRUFEMzIoTVNWRFhfRE1BQ19TVFJFQU1fU1RBVFVTX09GRlNFVCk7CisJSVBWUl9ERUJV R19WRUQoIk1TVkRYOiBNU1ZEWF9DT01NU19FUlJPUl9UUklHIGlzIDB4JXgsIgorCQkiTVNWRFhf SU5URVJSVVBUX1NUQVRVUyBpcyAweCV4LCIKKwkJIk1TVkRYX01NVV9TVEFUVVMgaXMgMHgleCwi CisJCSJNU1ZEWF9ETUFDX1NUUkVBTV9TVEFUVVMgaXMgMHgleC5cbiIsCisJCWVycl90cmlnLCBp cnFfc3RzLCBtbXVfc3RzLCBkbWFjX3N0cyk7CisKKwl0cmFjZV92ZWRfaXJxX3BhbmljKHBhbmlj X21zZywgZXJyX3RyaWcsIGlycV9zdHMsIG1tdV9zdHMsIGRtYWNfc3RzKTsKKworCWZlbmNlID0g cGFuaWNfbXNnLT5oZWFkZXIuYml0cy5tc2dfZmVuY2U7CisKKwl2ZWRfcHJpdi0+dmVkX25lZWRz X3Jlc2V0ID0gMTsKKworCWRpZmYgPSB2ZWRfcHJpdi0+dmVkX2N1cl9zZXEgLSBkZXZfcHJpdi0+ bGFzdF9zZXE7CisJaWYgKGRpZmYgPiAweDBGRkZGRkZGKQorCQl2ZWRfcHJpdi0+dmVkX2N1cl9z ZXErKzsKKworCUlQVlJfREVCVUdfV0FSTigiVkVEOiBGZW5jZSBJRCBtaXNzaW5nLCBhc3N1bWlu ZyAlMDh4XG4iLAorCQkJdmVkX3ByaXYtPnZlZF9jdXJfc2VxKTsKKworCWlwdnJfZmVuY2VfcHJv Y2VzcyhkZXZfcHJpdiwgdmVkX3ByaXYtPnZlZF9jdXJfc2VxLCBJUFZSX0NNRF9GQUlMRUQpOwor CisJLyogRmx1c2ggdGhlIGNvbW1hbmQgcXVldWUgKi8KKwl2ZWRfZmx1c2hfY21kX3F1ZXVlKHZl ZF9wcml2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordmVkX2hhbmRsZV9jb21wbGV0 ZWRfbXNnKHN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYsCisJCQkJc3RydWN0IGZ3X2NvbXBs ZXRlZF9tc2cgKmNvbXBsZXRlZF9tc2cpCit7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRl dl9wcml2ID0gdmVkX3ByaXYtPmRldl9wcml2OworCXUxNiBmZW5jZSwgZmxhZ3M7CisJc3RydWN0 IGlwdnJfY29udGV4dCAqaXB2cl9jdHg7CisKKwlJUFZSX0RFQlVHX1ZFRCgiVkVEOiBNU0dJRF9D TURfQ09NUExFVEVEOiIKKwkJIiAtIEZlbmNlOiAlMDh4IC0gZmxhZ3M6ICUwOHggLSB2ZGViY3I6 ICUwOHgiCisJCSIgLSBmaXJzdF9tYiA6ICVkIC0gbGFzdF9tYjogJWRcbiIsCisJCWNvbXBsZXRl ZF9tc2ctPmhlYWRlci5iaXRzLm1zZ19mZW5jZSwKKwkJY29tcGxldGVkX21zZy0+ZmxhZ3MsIGNv bXBsZXRlZF9tc2ctPnZkZWJjciwKKwkJY29tcGxldGVkX21zZy0+bWIuYml0cy5zdGFydF9tYiwK KwkJY29tcGxldGVkX21zZy0+bWIuYml0cy5sYXN0X21iKTsKKworCXRyYWNlX3ZlZF9pcnFfY29t cGxldGVkKGNvbXBsZXRlZF9tc2cpOworCisJZmxhZ3MgPSBjb21wbGV0ZWRfbXNnLT5mbGFnczsK KwlmZW5jZSA9IGNvbXBsZXRlZF9tc2ctPmhlYWRlci5iaXRzLm1zZ19mZW5jZTsKKworCXZlZF9w cml2LT52ZWRfY3VyX3NlcSA9IGZlbmNlOworCisJaXB2cl9mZW5jZV9wcm9jZXNzKGRldl9wcml2 LCBmZW5jZSwgSVBWUl9DTURfU1VDQ0VTUyk7CisKKwlpcHZyX2N0eCA9IGlwdnJfZmluZF9jdHhf d2l0aF9mZW5jZShkZXZfcHJpdiwgZmVuY2UpOworCWlmICh1bmxpa2VseShpcHZyX2N0eCA9PSBO VUxMKSkgeworCQlJUFZSX0RFQlVHX1dBUk4oImFibm9ybWFsIGNvbXBsZXRlIG1zZy5cbiIpOwor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZmxhZ3MgJiBGV19WQV9SRU5ERVJfSE9TVF9J TlQpIHsKKwkJLyogTm93IHNlbmQgdGhlIG5leHQgY29tbWFuZCBmcm9tIHRoZSBtc3ZkeCBjbWQg cXVldWUgKi8KKwkJdmVkX2NtZF9kZXF1ZXVlX3NlbmQodmVkX3ByaXYpOworCX0KKwlyZXR1cm4g MDsKK30KKworLyoKKyAqIE1TVkRYIE1UWCBpbnRlcnJ1cHQKKyAqLworc3RhdGljIHZvaWQgdmVk X210eF9pbnRlcnJ1cHQoc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdikKK3sKKwlzdGF0aWMg dTMyIGJ1ZlsxMjhdOyAvKiBtZXNzYWdlIGJ1ZmZlciAqLworCXUzMiByaWR4LCB3aWR4LCBidWZf c2l6ZSwgYnVmX29mZnNldDsKKwl1MzIgbnVtLCBvZnM7IC8qIG1lc3NhZ2UgbnVtIGFuZCBvZmZz ZXQgKi8KKwl1bmlvbiBtc2dfaGVhZGVyICpoZWFkZXI7CisJaW50IGNtZF9jb21wbGV0ZSA9IDA7 CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gdmVkX3ByaXYtPmRldl9wcml2 OworCUlQVlJfREVCVUdfVkVEKCJWRUQ6IEdvdCBhIFZFRCBNVFggaW50ZXJydXB0LlxuIik7CisK KwkvKiB3ZSBuZWVkIGNsb2NrcyBlbmFibGVkIGJlZm9yZSB3ZSB0b3VjaCBWRUMgbG9jYWwgcmFt LAorCSAqIGJ1dCBmdyB3aWxsIHRha2UgY2FyZSBvZiB0aGUgY2xvY2sgYWZ0ZXIgZncgaXMgbG9h ZGVkCisJICovCisKK2xvb3A6IC8qIGp1c3QgZm9yIGNvZGluZyBzdHlsZSBjaGVjayAqLworCXJp ZHggPSBJUFZSX1JFR19SRUFEMzIoTVNWRFhfQ09NTVNfVE9fSE9TVF9SRF9JTkRFWCk7CisJd2lk eCA9IElQVlJfUkVHX1JFQUQzMihNU1ZEWF9DT01NU19UT19IT1NUX1dSVF9JTkRFWCk7CisKKwkv KiBHZXQgb3V0IG9mIGhlcmUgaWYgbm90aGluZyAqLworCWlmIChyaWR4ID09IHdpZHgpCisJCWdv dG8gZG9uZTsKKworCWJ1Zl9zaXplID0gSVBWUl9SRUdfUkVBRDMyKE1TVkRYX0NPTU1TX1RPX0hP U1RfQlVGX1NJWkUpICYKKwkJKCgxIDw8IDE2KSAtIDEpOworCS8qMHgyMDAwIGlzIFZFQyBMb2Nh bCBSYW0gb2Zmc2V0Ki8KKwlidWZfb2Zmc2V0ID0gKElQVlJfUkVHX1JFQUQzMihNU1ZEWF9DT01N U19UT19IT1NUX0JVRl9TSVpFKSA+PiAxNikKKwkJKyAweDIwMDA7CisKKwlvZnMgPSAwOworCWJ1 ZltvZnNdID0gSVBWUl9SRUdfUkVBRDMyKGJ1Zl9vZmZzZXQgKyAocmlkeCA8PCAyKSk7CisJaGVh ZGVyID0gKHVuaW9uIG1zZ19oZWFkZXIgKilidWY7CisKKwkvKiByb3VuZCB0byBuZWFyZXN0IHdv cmQgKi8KKwludW0gPSAoaGVhZGVyLT5iaXRzLm1zZ19zaXplICsgMykgLyA0OworCisJLyogQVNT RVJUKG51bSA8PSBzaXplb2YoYnVmKSAvIHNpemVvZih1MzIpKTsgKi8KKworCWlmICgrK3JpZHgg Pj0gYnVmX3NpemUpCisJCXJpZHggPSAwOworCisJZm9yIChvZnMrKzsgb2ZzIDwgbnVtOyBvZnMr KykgeworCQlidWZbb2ZzXSA9IElQVlJfUkVHX1JFQUQzMihidWZfb2Zmc2V0ICsgKHJpZHggPDwg MikpOworCisJCWlmICgrK3JpZHggPj0gYnVmX3NpemUpCisJCQlyaWR4ID0gMDsKKwl9CisKKwkv KiBVcGRhdGUgdGhlIFJlYWQgaW5kZXggKi8KKwlJUFZSX1JFR19XUklURTMyKHJpZHgsIE1TVkRY X0NPTU1TX1RPX0hPU1RfUkRfSU5ERVgpOworCisJaWYgKHZlZF9wcml2LT52ZWRfbmVlZHNfcmVz ZXQpCisJCWdvdG8gbG9vcDsKKworCXN3aXRjaCAoaGVhZGVyLT5iaXRzLm1zZ190eXBlKSB7CisJ Y2FzZSBNVFhfTVNHSURfSFdfUEFOSUM6IHsKKwkJc3RydWN0IGZ3X3BhbmljX21zZyAqcGFuaWNf bXNnID0gKHN0cnVjdCBmd19wYW5pY19tc2cgKilidWY7CisJCWNtZF9jb21wbGV0ZSA9IDE7CisJ CXZlZF9oYW5kbGVfcGFuaWNfbXNnKHZlZF9wcml2LCBwYW5pY19tc2cpOworCQkvKioKKwkJICog cGFuaWMgbXNnIGNsZWFycyBhbGwgcGVuZGluZyBjbWRzIGFuZCBicmVha3MgdGhlIGNtZDwtPmly cSBwYWlyaW5nCisJCSAqLworCQlpZiAoV0FSTl9PTihpcHZyX3J1bnRpbWVfcG1fcHV0X2FsbCh2 ZWRfcHJpdi0+ZGV2X3ByaXYsIHRydWUpIDwgMCkpIHsKKwkJCUlQVlJfRVJST1IoIkVycm9yIGNs ZWFyaW5nIHBlbmRpbmcgZXZlbnRzIGFuZCBwdXQgcG93ZXJcbiIpOworCQl9CisJCWdvdG8gZG9u ZTsKKwl9CisKKwljYXNlIE1UWF9NU0dJRF9DT01QTEVURUQ6IHsKKwkJc3RydWN0IGZ3X2NvbXBs ZXRlZF9tc2cgKmNvbXBsZXRlZF9tc2cgPQorCQkJCQkoc3RydWN0IGZ3X2NvbXBsZXRlZF9tc2cg KilidWY7CisJCWNtZF9jb21wbGV0ZSA9IDE7CisJCWlmICh2ZWRfaGFuZGxlX2NvbXBsZXRlZF9t c2codmVkX3ByaXYsIGNvbXBsZXRlZF9tc2cpKQorCQkJY21kX2NvbXBsZXRlID0gMDsKKwkJLyoq CisJCSAqIGZvciBWUDgsIGNtZCBhbmQgQ09NUExFVEVEIG1zZyBhcmUgcGFpcmVkLiB3ZSBjYW4g c2FmZWx5IGNhbGwKKwkJICogZ2V0IGluIGV4ZWNidWZfaW9jdGwgYW5kIGNhbGwgcHV0IGhlcmUK KwkJICovCisJCWlmIChXQVJOX09OKGlwdnJfcnVudGltZV9wbV9wdXQodmVkX3ByaXYtPmRldl9w cml2LCB0cnVlKSA8IDApKSB7CisJCQlJUFZSX0VSUk9SKCJFcnJvciBwdXQgcG93ZXJcbiIpOwor CQl9CisJCWJyZWFrOworCX0KKworCWRlZmF1bHQ6CisJCUlQVlJfRVJST1IoIlZFRDogdW5rbm93 biBtZXNzYWdlIGZyb20gTVRYLCBJRDoweCUwOHguXG4iLAorCQkJaGVhZGVyLT5iaXRzLm1zZ190 eXBlKTsKKwkJZ290byBkb25lOworCX0KKworZG9uZToKKwlJUFZSX0RFQlVHX1ZFRCgiVkVEIElu dGVycnVwdDogZmluaXNoIHByb2Nlc3MgYSBtZXNzYWdlLlxuIik7CisJaWYgKHJpZHggIT0gd2lk eCkgeworCQlJUFZSX0RFQlVHX1ZFRCgiVkVEOiB0aGVyZSBhcmUgbW9yZSBtZXNzYWdlIHRvIGJl IHJlYWQuXG4iKTsKKwkJZ290byBsb29wOworCX0KKworCW1iKCk7CS8qIFRCRCBjaGVjayB0aGlz Li4uICovCit9CisKKy8qCisgKiBNU1ZEWCBpbnRlcnJ1cHQuCisgKi8KK2ludCB2ZWRfaXJxX2hh bmRsZXIoc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdikKK3sKKwl1MzIgbXN2ZHhfc3RhdDsK KwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2ZWRfcHJpdi0+ZGV2X3ByaXY7 CisJbXN2ZHhfc3RhdCA9IElQVlJfUkVHX1JFQUQzMihNU1ZEWF9JTlRFUlJVUFRfU1RBVFVTX09G RlNFVCk7CisKKwkvKiBkcml2ZXIgb25seSBuZWVkcyB0byBoYW5kbGUgbXR4IGlycQorCSAqIEZv ciBNTVUgZmF1bHQgaXJxLCB0aGVyZSdzIGFsd2F5cyBhIEhXIFBBTklDIGdlbmVyYXRlZAorCSAq IGlmIEhXL0ZXIGlzIHRvdGFsbHkgaGFuZywgdGhlIGxvY2t1cCBmdW5jdGlvbiB3aWxsIGhhbmRs ZQorCSAqIHRoZSByZXNldGluZworCSAqLworCWlmIChtc3ZkeF9zdGF0ICYgTVNWRFhfSU5URVJS VVBUX1NUQVRVU19NTVVfRkFVTFRfSVJRX01BU0spIHsKKwkJLypJZGVhbGx5IHdlIHNob3VsZCB3 ZSBzaG91bGQgbmV2ZXIgZ2V0IHRvIHRoaXMgKi8KKwkJSVBWUl9ERUJVR19JUlEoIlZFRDogTU1V IEZhdWx0OjB4JXhcbiIsIG1zdmR4X3N0YXQpOworCisJCS8qIFBhdXNlIE1NVSAqLworCQlJUFZS X1JFR19XUklURTMyKE1TVkRYX01NVV9DT05UUk9MMF9NTVVfUEFVU0VfTUFTSywKKwkJCSAgICAg TVNWRFhfTU1VX0NPTlRST0wwX09GRlNFVCk7CisJCXdtYigpOworCisJCS8qIENsZWFyIHRoaXMg aW50ZXJ1cHQgYml0IG9ubHkgKi8KKwkJSVBWUl9SRUdfV1JJVEUzMihNU1ZEWF9JTlRFUlJVUFRf U1RBVFVTX01NVV9GQVVMVF9JUlFfTUFTSywKKwkJCSAgICAgTVNWRFhfSU5URVJSVVBUX0NMRUFS X09GRlNFVCk7CisJCUlQVlJfUkVHX1JFQUQzMihNU1ZEWF9JTlRFUlJVUFRfQ0xFQVJfT0ZGU0VU KTsKKwkJcm1iKCk7CisKKwkJdmVkX3ByaXYtPnZlZF9uZWVkc19yZXNldCA9IDE7CisJfSBlbHNl IGlmIChtc3ZkeF9zdGF0ICYgTVNWRFhfSU5URVJSVVBUX1NUQVRVU19NVFhfSVJRX01BU0spIHsK KwkJSVBWUl9ERUJVR19JUlEoIlZFRDogbXN2ZHhfc3RhdDogMHgleChNVFgpXG4iLCBtc3ZkeF9z dGF0KTsKKworCQkvKiBDbGVhciBhbGwgaW50ZXJ1cHQgYml0cyAqLworCQlJUFZSX1JFR19XUklU RTMyKDB4ZmZmZiwgTVNWRFhfSU5URVJSVVBUX0NMRUFSX09GRlNFVCk7CisKKwkJSVBWUl9SRUdf UkVBRDMyKE1TVkRYX0lOVEVSUlVQVF9DTEVBUl9PRkZTRVQpOworCQlybWIoKTsKKworCQl2ZWRf bXR4X2ludGVycnVwdCh2ZWRfcHJpdik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCB2ZWRf Y2hlY2tfaWRsZShzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2KQoreworCWludCBsb29wLCBy ZXQ7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2OworCWlmICghdmVkX3ByaXYp CisJCXJldHVybiAwOworCisJZGV2X3ByaXYgPSB2ZWRfcHJpdi0+ZGV2X3ByaXY7CisJaWYgKCF2 ZWRfcHJpdi0+dmVkX2Z3X2xvYWRlZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAodmVkX3ByaXYtPnZl ZF9idXN5KSB7CisJCUlQVlJfREVCVUdfUE0oIlZFRDogdmVkX2J1c3kgd2FzIHNldCwgcmV0dXJu IGJ1c3kuXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBvbiBzb21lIGNvcmVzIGJl bG93IDUwNTAyLCB0aGVyZSBpcyBvbmUgaW5zdGFuY2UgdGhhdAorCSAqIHJlYWQgcmVxdWVzdHMg bWF5IG5vdCBnbyB0byB6ZXJvIGlzIGluIHRoZSBjYXNlIG9mIGEgcGFnZSBmYXVsdCwKKwkgKiBj aGVjayBjb3JlIHJldmlzaW9uIGJ5IHJlZyBNU1ZEWF9DT1JFX1JFViwgMzg1IGNvcmUgaXMgMHgy MDAwMQorCSAqIGNoZWNrIGlmIG1tdSBwYWdlIGZhdWx0IGhhcHBlbmQgYnkgcmVnIE1TVkRYX0lO VEVSUlVQVF9TVEFUVVMsCisJICogY2hlY2sgd2FzIGl0IGEgcGFnZSB0YWJsZSByYXRoZXIgdGhh biBhIHByb3RlY3Rpb24gZmF1bHQKKwkgKiBieSByZWcgTVNWRFhfTU1VX1NUQVRVUywgZm9yIHN1 Y2ggY2FzZSwKKwkgKiBuZWVkIGNhbGwgdmVkX2NvcmVfcmVzZXQgYXMgdGhlIHdvcmsgYXJvdW5k ICovCisJaWYgKChJUFZSX1JFR19SRUFEMzIoTVNWRFhfQ09SRV9SRVZfT0ZGU0VUKSA8IDB4MDAw NTA1MDIpICYmCisJCShJUFZSX1JFR19SRUFEMzIoTVNWRFhfSU5URVJSVVBUX1NUQVRVU19PRkZT RVQpCisJCQkmIE1TVkRYX0lOVEVSUlVQVF9TVEFUVVNfTU1VX0ZBVUxUX0lSUV9NQVNLKSAmJgor CQkoSVBWUl9SRUdfUkVBRDMyKE1TVkRYX01NVV9TVEFUVVNfT0ZGU0VUKSAmIDEpKSB7CisJCUlQ VlJfREVCVUdfV0FSTigibW11IHBhZ2UgZmF1bHQsIHJlY292ZXIgYnkgY29yZV9yZXNldC5cbiIp OworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBjaGVjayBNU1ZEWF9NTVVfTUVNX1JFUSB0byBjb25m aXJtIHRoZXJlJ3Mgbm8gbWVtb3J5IHJlcXVlc3RzICovCisJZm9yIChsb29wID0gMDsgbG9vcCA8 IDEwOyBsb29wKyspCisJCXJldCA9IHZlZF93YWl0X2Zvcl9yZWdpc3Rlcih2ZWRfcHJpdiwKKwkJ CQkJTVNWRFhfTU1VX01FTV9SRVFfT0ZGU0VULAorCQkJCQkwLCAweGZmLCAxMDAsIDEpOworCWlm IChyZXQpIHsKKwkJSVBWUl9ERUJVR19XQVJOKCJNU1ZEWDogTVNWRFhfTU1VX01FTV9SRVEgcmVn IGlzIDB4JXgsXG4iCisJCQkJImluZGljYXRlIG1lbSBidXN5LCBwcmV2ZW50IHBvd2VyIG9mZiB2 ZWQsIgorCQkJCSJNU1ZEWF9DT01NU19GV19TVEFUVVMgcmVnIGlzIDB4JXgsIgorCQkJCSJNU1ZE WF9DT01NU19FUlJPUl9UUklHIHJlZyBpcyAweCV4LCIsCisJCQkJSVBWUl9SRUdfUkVBRDMyKE1T VkRYX01NVV9NRU1fUkVRX09GRlNFVCksCisJCQkJSVBWUl9SRUdfUkVBRDMyKE1TVkRYX0NPTU1T X0ZXX1NUQVRVUyksCisJCQkJSVBWUl9SRUdfUkVBRDMyKE1TVkRYX0NPTU1TX0VSUk9SX1RSSUcp KTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCB2ZWRfY2hl Y2tfcmVzZXRfZncoc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdikKK3sKKwl1bnNpZ25lZCBs b25nIGlycV9mbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWRfcHJpdi0+dmVkX2xvY2ss IGlycV9mbGFncyk7CisKKwkvKiBoYW5kbGluZyBmdyB1cGxvYWQgaGVyZSBpZiByZXF1aXJlZCAq LworCS8qIHBvd2VyIG9mZiBmaXJzdCwgdGhlbiBod19iZWdpbiB3aWxsIHBvd2VyIHVwL3VwbG9h ZCBGVyBjb3JyZWN0bHkgKi8KKwlpZiAodmVkX3ByaXYtPnZlZF9uZWVkc19yZXNldCAmIE1TVkRY X1JFU0VUX05FRURTX1JFVVBMT0FEX0ZXKSB7CisJCXZlZF9wcml2LT52ZWRfbmVlZHNfcmVzZXQg Jj0gfk1TVkRYX1JFU0VUX05FRURTX1JFVVBMT0FEX0ZXOworCQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZ2ZWRfcHJpdi0+dmVkX2xvY2ssIGlycV9mbGFncyk7CisJCUlQVlJfREVCVUdfVkVEKCJW RUQ6IGZvcmNlIHBvd2VyIG9mZiBWRUQgZHVlIHRvIGRlY29kZSBlcnJcbiIpOworCQlzcGluX2xv Y2tfaXJxc2F2ZSgmdmVkX3ByaXYtPnZlZF9sb2NrLCBpcnFfZmxhZ3MpOworCX0KKwlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZ2ZWRfcHJpdi0+dmVkX2xvY2ssIGlycV9mbGFncyk7Cit9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfY21kLmggYi9kcml2ZXJzL2dwdS9kcm0v aXB2ci92ZWRfY21kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y5MzJl ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9jbWQuaApAQCAt MCwwICsxLDcxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHZlZF9jbWQuaDogVkVEIGhlYWRl ciBmaWxlIHRvIHN1cHBvcnQgY29tbWFuZCBidWZmZXIgaGFuZGxpbmcKKyAqCisgKiBDb3B5cmln aHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24sIEhpbGxzYm9ybywgT1IsIFVTQQorICogQ29w eXJpZ2h0IChjKSBJbWFnaW5hdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZCwgVUsKKyAqIENvcHly aWdodCAoYykgMjAwMyBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMu CisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRl ciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg aXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRo CisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3Rvbiwg TUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczoKKyAqICAgIEZlaSBKaWFuZyA8ZmVp LmppYW5nQGludGVsLmNvbT4KKyAqICAgIFlhbyBDaGVuZyA8eWFvLmNoZW5nQGludGVsLmNvbT4K KyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1ZFRF9DTURfSF8KKyNkZWZpbmUg X1ZFRF9DTURfSF8KKworI2luY2x1ZGUgImlwdnJfZHJ2LmgiCisjaW5jbHVkZSAiaXB2cl9kcm0u aCIKKyNpbmNsdWRlICJpcHZyX2dlbS5oIgorI2luY2x1ZGUgImlwdnJfZmVuY2UuaCIKKyNpbmNs dWRlICJpcHZyX2V4ZWMuaCIKKyNpbmNsdWRlICJ2ZWRfcmVnLmgiCisjaW5jbHVkZSAidmVkX3Bt LmgiCisKK3N0cnVjdCB2ZWRfY21kX3F1ZXVlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CisJ dm9pZCAqY21kOworCXUzMiBjbWRfc2l6ZTsKKwl1MTYgY21kX3NlcTsKKwl1MzIgZmVuY2VfZmxh ZzsKKwl1OCB0aWxpbmdfc2NoZW1lOworCXU4IHRpbGluZ19zdHJpZGU7CisJc3RydWN0IGRybV9m aWxlICp0ZmlsZTsKKwlzdHJ1Y3QgaXB2cl9jb250ZXh0ICppcHZyX2N0eDsKK307CisKK2ludCB2 ZWRfaXJxX2hhbmRsZXIoc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdik7CisKK2ludCB2ZWRf bXR4X3NlbmQoc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdiwgY29uc3Qgdm9pZCAqbXNnKTsK KworaW50IHZlZF9jaGVja19pZGxlKHN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYpOworCit2 b2lkIHZlZF9jaGVja19yZXNldF9mdyhzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2KTsKKwor dm9pZCB2ZWRfZmx1c2hfY21kX3F1ZXVlKHN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYpOwor CitpbnQgdmVkX2NtZGJ1Zl92aWRlbyhzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2LAorCQkJ c3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKmNtZF9idWZmZXIsCisJCQl1MzIgY21kYnVmX3Np emUsIHN0cnVjdCBpcHZyX2NvbnRleHQgKmlwdnJfY3R4KTsKKworaW50IHZlZF9zdWJtaXRfdmlk ZW9fY21kYnVmKHN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYsCisJCQlzdHJ1Y3QgZHJtX2lw dnJfZ2VtX29iamVjdCAqY21kX2J1ZmZlciwgdTMyIGNtZF9zaXplLAorCQkJc3RydWN0IGlwdnJf Y29udGV4dCAqaXB2cl9jdHgsIHUzMiBmZW5jZV9mbGFnKTsKKworaW50IHZlZF9jbWRfZGVxdWV1 ZV9zZW5kKHN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYpOworCisjZW5kaWYKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9mdy5jIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIv dmVkX2Z3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM2ODJkYQotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9mdy5jCkBAIC0wLDAgKzEs MTE5OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiB2ZWRfZncuYzogVkVEIGluaXRpYWxpemF0 aW9uIGFuZCBtdHgtZmlybXdhcmUgdXBsb2FkCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IElu dGVsIENvcnBvcmF0aW9uLCBIaWxsc2Jvcm8sIE9SLCBVU0EKKyAqIENvcHlyaWdodCAoYykgSW1h Z2luYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQsIFVLCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMg VHVuZ3N0ZW4gR3JhcGhpY3MsIEluYy4sIENlZGFyIFBhcmssIFRleGFzLgorICogQWxsIFJpZ2h0 cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFu ZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNp b24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNl ZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisg KiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9n cmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s CisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEg VVNBLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBGZWkgSmlhbmcgPGZlaS5qaWFuZ0BpbnRlbC5j b20+CisgKiAgICBZYW8gQ2hlbmcgPHlhby5jaGVuZ0BpbnRlbC5jb20+CisgKgorICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLworCisjaW5jbHVkZSAiaXB2cl9iby5oIgorI2luY2x1ZGUgImlwdnJfbW11Lmgi CisjaW5jbHVkZSAiaXB2cl9nZW0uaCIKKyNpbmNsdWRlICJ2ZWRfZncuaCIKKyNpbmNsdWRlICJ2 ZWRfY21kLmgiCisjaW5jbHVkZSAidmVkX21zZy5oIgorI2luY2x1ZGUgInZlZF9yZWcuaCIKKyNp bmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2lu Y2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisKKyNkZWZpbmUgU1RBQ0tHVUFSRFdPUkQJCQkweDEw MTAxMDEwCisjZGVmaW5lIE1TVkRYX01UWF9EQVRBX0xPQ0FUSU9OCQkweDgyODgwMDAwCisjZGVm aW5lIFVOSU5JVElMSVNFX01FTQkJCTB4Y2RjZGNkY2QKKyNkZWZpbmUgRklSTVdBUkVfTkFNRSAi bXN2ZHhfZndfbWZsZF9ERTIuMC5iaW4iCisKKy8qIFZFRCBGVyBoZWFkZXIgKi8KK3N0cnVjdCB2 ZWRfZncgeworCXUzMiB2ZXI7CisJdTMyIHRleHRfc2l6ZTsKKwl1MzIgZGF0YV9zaXplOworCXUz MiBkYXRhX2xvY2F0aW9uOworfTsKKworCit2b2lkIHZlZF9jbGVhcl9pcnEoc3RydWN0IHZlZF9w cml2YXRlICp2ZWRfcHJpdikKK3sKKwl1MzIgbXR4X2ludCA9IDA7CisJc3RydWN0IGRybV9pcHZy X3ByaXZhdGUgKmRldl9wcml2ID0gdmVkX3ByaXYtPmRldl9wcml2OworCS8qIENsZWFyIE1UWCBp bnRlcnJ1cHQgKi8KKwlSRUdJT19XUklURV9GSUVMRF9MSVRFKG10eF9pbnQsIE1TVkRYX0lOVEVS UlVQVF9TVEFUVVMsIE1UWF9JUlEsIDEpOworCUlQVlJfUkVHX1dSSVRFMzIobXR4X2ludCwgTVNW RFhfSU5URVJSVVBUX0NMRUFSX09GRlNFVCk7Cit9CisKKy8qIGZvbGxvd2luZyB0d28gZnVuY3Rp b25zIGFsc28gd29ya3MgZm9yIENMViBhbmQgTUZMRCAqLworLyogSVBWUl9JTlRfRU5BQkxFX1Ig aXMgc2V0IGluIGlwdnJfaXJxXyh1bilpbnN0YWxsX2lzbGFuZHMgKi8KK3ZvaWQgdmVkX2Rpc2Fi bGVfaXJxKHN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYpCit7CisJdTMyIGVuYWJsZXMgPSAw OworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IHZlZF9wcml2LT5kZXZfcHJp djsKKwlSRUdJT19XUklURV9GSUVMRF9MSVRFKGVuYWJsZXMsIE1TVkRYX0lOVEVSUlVQVF9TVEFU VVMsIE1UWF9JUlEsIDApOworCUlQVlJfUkVHX1dSSVRFMzIoZW5hYmxlcywgTVNWRFhfSE9TVF9J TlRFUlJVUFRfRU5BQkxFX09GRlNFVCk7Cit9CisKK3ZvaWQgdmVkX2VuYWJsZV9pcnEoc3RydWN0 IHZlZF9wcml2YXRlICp2ZWRfcHJpdikKK3sKKwl1MzIgZW5hYmxlcyA9IDA7CisJc3RydWN0IGRy bV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gdmVkX3ByaXYtPmRldl9wcml2OworCS8qIE9ubHkg ZW5hYmxlIHRoZSBtYXN0ZXIgY29yZSBJUlEqLworCVJFR0lPX1dSSVRFX0ZJRUxEX0xJVEUoZW5h YmxlcywgTVNWRFhfSU5URVJSVVBUX1NUQVRVUywgTVRYX0lSUSwKKwkJCSAgICAgICAxKTsKKwlJ UFZSX1JFR19XUklURTMyKGVuYWJsZXMsIE1TVkRYX0hPU1RfSU5URVJSVVBUX0VOQUJMRV9PRkZT RVQpOworfQorCisvKgorICogdGhlIG9yaWdpbmFsIDEwMDAgb2YgdWRlbGF5IGlzIGRlcml2ZSBm cm9tIHJlZmVyZW5jZSBkcml2ZXIKKyAqIEZyb20gTGl1LCBIYWl5YW5nLCBjaGFuZ2VkIHRoZSBv cmlnaW5pYWwgdWRlbGF5IHZhbHVlIGZyb20gMTAwMCB0byA1CisgKiBjYW4gc2F2ZSAzJSBDMCBy ZXNpZGVuY2UKKyAqLworaW50Cit2ZWRfd2FpdF9mb3JfcmVnaXN0ZXIoc3RydWN0IHZlZF9wcml2 YXRlICp2ZWRfcHJpdiwKKwkJCSAgICB1MzIgb2Zmc2V0LCB1MzIgdmFsdWUsIHUzMiBlbmFibGUs CisJCQkgICAgdTMyIHBvbGxfY250LCB1MzIgdGltZW91dCkKK3sKKwl1MzIgcmVnX3ZhbHVlID0g MDsKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2ZWRfcHJpdi0+ZGV2X3By aXY7CisJd2hpbGUgKHBvbGxfY250KSB7CisJCXJlZ192YWx1ZSA9IElQVlJfUkVHX1JFQUQzMihv ZmZzZXQpOworCQlpZiAodmFsdWUgPT0gKHJlZ192YWx1ZSAmIGVuYWJsZSkpCisJCQlyZXR1cm4g MDsKKworCQkvKiBXYWl0IGEgYml0ICovCisJCUlQVlJfVURFTEFZKHRpbWVvdXQpOworCQlwb2xs X2NudC0tOworCX0KKwlJUFZSX0RFQlVHX1JFRygiTVNWRFg6IFRpbWVvdXQgd2hpbGUgd2FpdGlu ZyBmb3IgcmVnaXN0ZXIgJTA4eDoiCisJCSAgICAgICAiIGV4cGVjdGluZyAlMDh4IChtYXNrICUw OHgpLCBnb3QgJTA4eFxuIiwKKwkJICAgICAgIG9mZnNldCwgdmFsdWUsIGVuYWJsZSwgcmVnX3Zh bHVlKTsKKworCXJldHVybiAtRUZBVUxUOworfQorCit2b2lkCit2ZWRfc2V0X2Nsb2NrcyhzdHJ1 Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2LCB1MzIgY2xvY2tfc3RhdGUpCit7CisJdTMyIG9sZF9j bG9ja19zdGF0ZSA9IDA7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gdmVk X3ByaXYtPmRldl9wcml2OworCS8qIElQVlJfREVCVUdfVkVEKCJTZXRDbG9ja3MgdG8gJXguXG4i LCBjbG9ja19zdGF0ZSk7ICovCisJb2xkX2Nsb2NrX3N0YXRlID0gSVBWUl9SRUdfUkVBRDMyKE1T VkRYX01BTl9DTEtfRU5BQkxFX09GRlNFVCk7CisJaWYgKG9sZF9jbG9ja19zdGF0ZSA9PSBjbG9j a19zdGF0ZSkKKwkJcmV0dXJuOworCisJaWYgKGNsb2NrX3N0YXRlID09IDApIHsKKwkJLyogVHVy biBvZmYgY2xvY2tzIHByb2NlZHVyZSAqLworCQlpZiAob2xkX2Nsb2NrX3N0YXRlKSB7CisJCQkv KiBUdXJuIG9mZiBhbGwgdGhlIGNsb2NrcyBleGNlcHQgY29yZSAqLworCQkJSVBWUl9SRUdfV1JJ VEUzMigKKwkJCQlNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9DT1JFX01BTl9DTEtfRU5BQkxFX01BU0ss CisJCQkJTVNWRFhfTUFOX0NMS19FTkFCTEVfT0ZGU0VUKTsKKworCQkJLyogTWFrZSBzdXJlIGFs bCB0aGUgY2xvY2tzIGFyZSBvZmYgZXhjZXB0IGNvcmUgKi8KKwkJCXZlZF93YWl0X2Zvcl9yZWdp c3Rlcih2ZWRfcHJpdiwKKwkJCQlNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9PRkZTRVQsCisJCQkJTVNW RFhfTUFOX0NMS19FTkFCTEVfQ09SRV9NQU5fQ0xLX0VOQUJMRV9NQVNLLAorCQkJCTB4ZmZmZmZm ZmYsIDIwMDAwMDAsIDUpOworCisJCQkvKiBUdXJuIG9mZiBjb3JlIGNsb2NrICovCisJCQlJUFZS X1JFR19XUklURTMyKDAsIE1TVkRYX01BTl9DTEtfRU5BQkxFX09GRlNFVCk7CisJCX0KKwl9IGVs c2UgeworCQl1MzIgY2xvY2tzX2VuID0gY2xvY2tfc3RhdGU7CisKKwkJLypNYWtlIHN1cmUgdGhh dCBjb3JlIGNsb2NrIGlzIG5vdCBhY2NpZGVudGFsbHkgdHVybmVkIG9mZiAqLworCQljbG9ja3Nf ZW4gfD0gTVNWRFhfTUFOX0NMS19FTkFCTEVfQ09SRV9NQU5fQ0xLX0VOQUJMRV9NQVNLOworCisJ CS8qIElmIGFsbCBjbG9ja3Mgd2VyZSBkaXNhYmxlIGRvIHRoZSBicmluZyB1cCBwcm9jZWR1cmUg Ki8KKwkJaWYgKG9sZF9jbG9ja19zdGF0ZSA9PSAwKSB7CisJCQkvKiB0dXJuIG9uIGNvcmUgY2xv Y2sgKi8KKwkJCUlQVlJfUkVHX1dSSVRFMzIoCisJCQkJTVNWRFhfTUFOX0NMS19FTkFCTEVfQ09S RV9NQU5fQ0xLX0VOQUJMRV9NQVNLLAorCQkJCU1TVkRYX01BTl9DTEtfRU5BQkxFX09GRlNFVCk7 CisKKwkJCS8qIE1ha2Ugc3VyZSBjb3JlIGNsb2NrIGlzIG9uICovCisJCQl2ZWRfd2FpdF9mb3Jf cmVnaXN0ZXIodmVkX3ByaXYsCisJCQkJTVNWRFhfTUFOX0NMS19FTkFCTEVfT0ZGU0VULAorCQkJ CU1TVkRYX01BTl9DTEtfRU5BQkxFX0NPUkVfTUFOX0NMS19FTkFCTEVfTUFTSywKKwkJCQkweGZm ZmZmZmZmLCAyMDAwMDAwLCA1KTsKKworCQkJLyogdHVybiBvbiB0aGUgb3RoZXIgY2xvY2tzIGFz IHdlbGwgKi8KKwkJCUlQVlJfUkVHX1dSSVRFMzIoY2xvY2tzX2VuLCBNU1ZEWF9NQU5fQ0xLX0VO QUJMRV9PRkZTRVQpOworCisJCQkvKiBNYWtlIHN1cmUgdGhhdCBhbGwgdGhleSBhcmUgb24gKi8K KwkJCXZlZF93YWl0X2Zvcl9yZWdpc3Rlcih2ZWRfcHJpdiwKKwkJCQkJTVNWRFhfTUFOX0NMS19F TkFCTEVfT0ZGU0VULAorCQkJCQljbG9ja3NfZW4sIDB4ZmZmZmZmZmYsIDIwMDAwMDAsIDUpOwor CQl9IGVsc2UgeworCQkJSVBWUl9SRUdfV1JJVEUzMihjbG9ja3NfZW4sIE1TVkRYX01BTl9DTEtf RU5BQkxFX09GRlNFVCk7CisKKwkJCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZXkgYXJlIG9uICovCisJ CQl2ZWRfd2FpdF9mb3JfcmVnaXN0ZXIodmVkX3ByaXYsCisJCQkJCU1TVkRYX01BTl9DTEtfRU5B QkxFX09GRlNFVCwKKwkJCQkJY2xvY2tzX2VuLCAweGZmZmZmZmZmLCAyMDAwMDAwLCA1KTsKKwkJ fQorCX0KK30KKworaW50IHZlZF9jb3JlX3Jlc2V0KHN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3By aXYpCit7CisJaW50IHJldCA9IDA7CisJaW50IGxvb3A7CisJdTMyIGNtZDsKKwlzdHJ1Y3QgZHJt X2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2ZWRfcHJpdi0+ZGV2X3ByaXY7CisJLyogRW5hYmxl IENsb2NrcyAqLworCUlQVlJfREVCVUdfR0VORVJBTCgiRW5hYmxpbmcgY2xvY2tzLlxuIik7CisJ dmVkX3NldF9jbG9ja3ModmVkX3ByaXYsIGNsa19lbmFibGVfYWxsKTsKKworCS8qIEFsd2F5cyBw YXVzZSB0aGUgTU1VIGFzIHRoZSBjb3JlIG1heSBiZSBzdGlsbCBhY3RpdmUKKwkgKiB3aGVuIHJl c2V0dGluZy4gIEl0IGlzIHZlcnkgYmFkIHRvIGhhdmUgbWVtb3J5CisJICogYWN0aXZpdHkgYXQg dGhlIHNhbWUgdGltZSBhcyBhIHJlc2V0IC0gVmVyeSBWZXJ5IGJhZAorCSAqLworCUlQVlJfUkVH X1dSSVRFMzIoMiwgTVNWRFhfTU1VX0NPTlRST0wwX09GRlNFVCk7CisKKwkvKiBCUk4yNjEwNiwg QlJOMjM5NDQsIEJSTjMzNjcxICovCisJLyogVGhpcyBpcyBuZWNjZXNzYXJ5IGZvciBhbGwgY29y ZXMgdXAgdG8gVG91cm1hbGluZSAqLworCWlmICgoSVBWUl9SRUdfUkVBRDMyKE1TVkRYX0NPUkVf UkVWX09GRlNFVCkgPCAweDAwMDUwNTAyKSAmJgorCQkoSVBWUl9SRUdfUkVBRDMyKE1TVkRYX0lO VEVSUlVQVF9TVEFUVVNfT0ZGU0VUKQorCQkJJiBNU1ZEWF9JTlRFUlJVUFRfU1RBVFVTX01NVV9G QVVMVF9JUlFfTUFTSykgJiYKKwkJKElQVlJfUkVHX1JFQUQzMihNU1ZEWF9NTVVfU1RBVFVTX09G RlNFVCkgJiAxKSkgeworCQl1MzIgKnBwdGQ7CisJCWludCBsb29wOworCQl1bnNpZ25lZCBsb25n IHB0ZF9hZGRyOworCisJCS8qIGRvIHdvcmsgYXJvdW5kICovCisJCXB0ZF9hZGRyID0gcGFnZV90 b19wZm4odmVkX3ByaXYtPm1tdV9yZWNvdmVyX3BhZ2UpIDw8IFBBR0VfU0hJRlQ7CisJCS8qIGZp eG1lOiBjaGVjayBwdGRfYWRkciBiaXQgbGVuZ3RoICovCisJCXBwdGQgPSBrbWFwKHZlZF9wcml2 LT5tbXVfcmVjb3Zlcl9wYWdlKTsKKwkJaWYgKCFwcHRkKSB7CisJCQlJUFZSX0VSUk9SKCJmYWls ZWQgdG8ga21hcCBtbXUgcmVjb3ZlciBwYWdlLlxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJ fQorCQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgMTAyNDsgbG9vcCsrKQorCQkJcHB0ZFtsb29wXSA9 IHB0ZF9hZGRyIHwgMHgwMDAwMDAwMzsKKwkJSVBWUl9SRUdfV1JJVEUzMihwdGRfYWRkciwgTVNW RFhfTU1VX0RJUl9MSVNUX0JBU0VfT0ZGU0VUICsgIDApOworCQlJUFZSX1JFR19XUklURTMyKHB0 ZF9hZGRyLCBNU1ZEWF9NTVVfRElSX0xJU1RfQkFTRV9PRkZTRVQgKyAgNCk7CisJCUlQVlJfUkVH X1dSSVRFMzIocHRkX2FkZHIsIE1TVkRYX01NVV9ESVJfTElTVF9CQVNFX09GRlNFVCArICA4KTsK KwkJSVBWUl9SRUdfV1JJVEUzMihwdGRfYWRkciwgTVNWRFhfTU1VX0RJUl9MSVNUX0JBU0VfT0ZG U0VUICsgMTIpOworCisJCUlQVlJfUkVHX1dSSVRFMzIoNiwgTVNWRFhfTU1VX0NPTlRST0wwX09G RlNFVCk7CisJCUlQVlJfUkVHX1dSSVRFMzIoTVNWRFhfSU5URVJSVVBUX1NUQVRVU19NTVVfRkFV TFRfSVJRX01BU0ssCisJCQkJCU1TVkRYX0lOVEVSUlVQVF9TVEFUVVNfT0ZGU0VUKTsKKwkJa3Vu bWFwKHZlZF9wcml2LT5tbXVfcmVjb3Zlcl9wYWdlKTsKKwl9CisKKwkvKiBtYWtlIHN1cmUgKkFM TCogb3V0c3RhbmRpbmcgcmVhZHMgaGF2ZSBnb25lIGF3YXkgKi8KKwlmb3IgKGxvb3AgPSAwOyBs b29wIDwgMTA7IGxvb3ArKykKKwkJcmV0ID0gdmVkX3dhaXRfZm9yX3JlZ2lzdGVyKHZlZF9wcml2 LCBNU1ZEWF9NTVVfTUVNX1JFUV9PRkZTRVQsCisJCQkJCSAgICAwLCAweGZmLCAxMDAsIDEpOwor CWlmIChyZXQpIHsKKwkJSVBWUl9ERUJVR19XQVJOKCJNU1ZEWF9NTVVfTUVNX1JFUSBpcyAlZCxc biIKKwkJCSJpbmRpY2F0ZSBvdXRzdGFuZGluZyByZWFkIHJlcXVlc3QgMC5cbiIsCisJCQlJUFZS X1JFR19SRUFEMzIoTVNWRFhfTU1VX01FTV9SRVFfT0ZGU0VUKSk7CisJCXJldCA9IC0xOworCQly ZXR1cm4gcmV0OworCX0KKwkvKiBkaXNjb25uZWN0IFJFTkRFQyBkZWNvZGVycyBmcm9tIG1lbW9y eSAqLworCWNtZCA9IElQVlJfUkVHX1JFQUQzMihNU1ZEWF9SRU5ERUNfQ09OVFJPTDFfT0ZGU0VU KTsKKwlSRUdJT19XUklURV9GSUVMRChjbWQsIE1TVkRYX1JFTkRFQ19DT05UUk9MMSwgUkVOREVD X0RFQ19ESVNBQkxFLCAxKTsKKwlJUFZSX1JFR19XUklURTMyKGNtZCwgTVNWRFhfUkVOREVDX0NP TlRST0wxX09GRlNFVCk7CisKKwkvKiBJc3N1ZSBzb2Z0d2FyZSByZXNldCBmb3IgYWxsIGJ1dCBj b3JlICovCisJSVBWUl9SRUdfV1JJVEUzMigodW5zaWduZWQgaW50KX5NU1ZEWF9DT05UUk9MX01T VkRYX1NPRlRfUkVTRVRfTUFTSywKKwkJCU1TVkRYX0NPTlRST0xfT0ZGU0VUKTsKKwlJUFZSX1JF R19SRUFEMzIoTVNWRFhfQ09OVFJPTF9PRkZTRVQpOworCS8qIGJpdCBmb3JtYXQgaXMgc2V0IGFz IGxpdHRsZSBlbmRpYW4gKi8KKwlJUFZSX1JFR19XUklURTMyKDAsIE1TVkRYX0NPTlRST0xfT0ZG U0VUKTsKKwkvKiBtYWtlIHN1cmUgcmVhZCByZXF1ZXN0cyBhcmUgemVybyAqLworCXJldCA9IHZl ZF93YWl0X2Zvcl9yZWdpc3Rlcih2ZWRfcHJpdiwgTVNWRFhfTU1VX01FTV9SRVFfT0ZGU0VULAor CQkJCSAgICAwLCAweGZmLCAxMDAsIDEwMCk7CisJaWYgKCFyZXQpIHsKKwkJLyogSXNzdWUgc29m dHdhcmUgcmVzZXQgKi8KKwkJSVBWUl9SRUdfV1JJVEUzMihNU1ZEWF9DT05UUk9MX01TVkRYX1NP RlRfUkVTRVRfTUFTSywKKwkJCQlNU1ZEWF9DT05UUk9MX09GRlNFVCk7CisKKwkJcmV0ID0gdmVk X3dhaXRfZm9yX3JlZ2lzdGVyKHZlZF9wcml2LCBNU1ZEWF9DT05UUk9MX09GRlNFVCwgMCwKKwkJ CQkJTVNWRFhfQ09OVFJPTF9NU1ZEWF9TT0ZUX1JFU0VUX01BU0ssCisJCQkJCTIwMDAwMDAsIDUp OworCQlpZiAoIXJldCkgeworCQkJLyogQ2xlYXIgaW50ZXJydXB0IGVuYWJsZWQgZmxhZyAqLwor CQkJSVBWUl9SRUdfV1JJVEUzMigwLCBNU1ZEWF9IT1NUX0lOVEVSUlVQVF9FTkFCTEVfT0ZGU0VU KTsKKworCQkJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0IGZsYWdzICovCisJCQlJUFZS X1JFR19XUklURTMyKDB4RkZGRkZGRkYsIE1TVkRYX0lOVEVSUlVQVF9DTEVBUl9PRkZTRVQpOwor CQl9IGVsc2UgeworCQkJSVBWUl9ERUJVR19XQVJOKCJNU1ZEWF9DT05UUk9MX09GRlNFVCBpcyAl ZCxcbiIKKwkJCQkiaW5kaWNhdGUgc29mdHdhcmUgcmVzZXQgZmFpbGVkLlxuIiwKKwkJCQlJUFZS X1JFR19SRUFEMzIoTVNWRFhfQ09OVFJPTF9PRkZTRVQpKTsKKwkJfQorCX0gZWxzZSB7CisJCUlQ VlJfREVCVUdfV0FSTigiTVNWRFhfTU1VX01FTV9SRVEgaXMgJWQsXG4iCisJCQkiaW5kaWNhdGUg b3V0c3RhbmRpbmcgcmVhZCByZXF1ZXN0IDEuXG4iLAorCQkJSVBWUl9SRUdfUkVBRDMyKE1TVkRY X01NVV9NRU1fUkVRX09GRlNFVCkpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmVz ZXQgY2hpcCBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzLgorICogUmV0dXJuIDAgc3VjY2VzcywgMSBm YWlsdXJlCisgKiB1c2UgdmVkX2NvcmVfcmVzZXQgaW5zdGVhZCBvZiB2ZWRfcmVzZXQKKyAqLwor aW50IHZlZF9yZXNldChzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2KQoreworCWludCByZXQg PSAwOworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IHZlZF9wcml2LT5kZXZf cHJpdjsKKwkvKiBJc3N1ZSBzb2Z0d2FyZSByZXNldCAqLworCS8qIElQVlJfUkVHX1dSSVRFMzIo bXN2ZHhfc3dfcmVzZXRfYWxsLCBNU1ZEWF9DT05UUk9MKTsgKi8KKwlJUFZSX1JFR19XUklURTMy KE1TVkRYX0NPTlRST0xfTVNWRFhfU09GVF9SRVNFVF9NQVNLLAorCQkJTVNWRFhfQ09OVFJPTF9P RkZTRVQpOworCisJcmV0ID0gdmVkX3dhaXRfZm9yX3JlZ2lzdGVyKHZlZF9wcml2LCBNU1ZEWF9D T05UUk9MX09GRlNFVCwgMCwKKwkJCU1TVkRYX0NPTlRST0xfTVNWRFhfU09GVF9SRVNFVF9NQVNL LCAyMDAwMDAwLCA1KTsKKwlpZiAoIXJldCkgeworCQkvKiBDbGVhciBpbnRlcnJ1cHQgZW5hYmxl ZCBmbGFnICovCisJCUlQVlJfUkVHX1dSSVRFMzIoMCwgTVNWRFhfSE9TVF9JTlRFUlJVUFRfRU5B QkxFX09GRlNFVCk7CisKKwkJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0IGZsYWdzICov CisJCUlQVlJfUkVHX1dSSVRFMzIoMHhGRkZGRkZGRiwgTVNWRFhfSU5URVJSVVBUX0NMRUFSX09G RlNFVCk7CisJfSBlbHNlIHsKKwkJSVBWUl9ERUJVR19XQVJOKCJNU1ZEWF9DT05UUk9MX09GRlNF VCBpcyAlZCxcbiIKKwkJCSJpbmRpY2F0ZSBzb2Z0d2FyZSByZXNldCBmYWlsZWQuXG4iLAorCQkJ SVBWUl9SRUdfUkVBRDMyKE1TVkRYX0NPTlRST0xfT0ZGU0VUKSk7CisJfQorCisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIGludCB2ZWRfYWxsb2NfY2NiX2Zvcl9yZW5kZWMoc3RydWN0IHZlZF9w cml2YXRlICp2ZWRfcHJpdiwKKwkJCQkJCQkJCQlpbnQzMl90IGNjYjBfc2l6ZSwKKwkJCQkJCQkJ CQlpbnQzMl90IGNjYjFfc2l6ZSkKK3sKKwlpbnQgcmV0OworCXNpemVfdCBzaXplOworCXU4ICpj Y2IwX2FkZHIgPSBOVUxMOworCXU4ICpjY2IxX2FkZHIgPSBOVUxMOworCisJSVBWUl9ERUJVR19J TklUKCJWRUQ6IHNldHRpbmcgdXAgUkVOREVDLCBhbGxvY2F0ZSBDQ0IgMC8xXG4iKTsKKworCS8q aGFuZGxpbmcgZm9yIGNjYjAqLworCWlmICh2ZWRfcHJpdi0+Y2NiMCA9PSBOVUxMKSB7CisJCXNp emUgPSByb3VuZHVwKGNjYjBfc2l6ZSwgUEFHRV9TSVpFKTsKKwkJaWYgKHNpemUgPT0gMCkKKwkJ CXJldHVybiAtRUlOVkFMOworCisJCS8qIEFsbG9jYXRlIHRoZSBuZXcgb2JqZWN0ICovCisJCXZl ZF9wcml2LT5jY2IwID0gaXB2cl9nZW1fY3JlYXRlKHZlZF9wcml2LT5kZXZfcHJpdiwgc2l6ZSwg MCwgMCk7CisJCWlmIChJU19FUlIodmVkX3ByaXYtPmNjYjApKSB7CisJCQlyZXQgPSBQVFJfRVJS KHZlZF9wcml2LT5jY2IwKTsKKwkJCUlQVlJfRVJST1IoIlZFRDogZmFpbGVkIHRvIGFsbG9jYXRl IGNjYjAgYnVmZmVyOiAlZC5cbiIsIHJldCk7CisJCQl2ZWRfcHJpdi0+Y2NiMCA9IE5VTEw7CisJ CQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCXZlZF9wcml2LT5iYXNlX2FkZHIwID0gaXB2cl9n ZW1fb2JqZWN0X21tdV9vZmZzZXQodmVkX3ByaXYtPmNjYjApOworCisJCWNjYjBfYWRkciA9IGlw dnJfZ2VtX29iamVjdF92bWFwKHZlZF9wcml2LT5jY2IwKTsKKwkJaWYgKCFjY2IwX2FkZHIpIHsK KwkJCXJldCA9IC1FTk9NRU07CisJCQlJUFZSX0VSUk9SKCJWRUQ6IGttYXAgZmFpbGVkIGZvciBj Y2IwIGJ1ZmZlcjogJWQuXG4iLCByZXQpOworCQkJZ290byBlcnJfZnJlZV9jY2IwOworCQl9CisK KwkJbWVtc2V0KGNjYjBfYWRkciwgMCwgc2l6ZSk7CisJCXZ1bm1hcChjY2IwX2FkZHIpOworCX0K KworCS8qaGFuZGxpbmcgZm9yIGNjYjEqLworCWlmICh2ZWRfcHJpdi0+Y2NiMSA9PSBOVUxMKSB7 CisJCXNpemUgPSByb3VuZHVwKGNjYjFfc2l6ZSwgUEFHRV9TSVpFKTsKKwkJaWYgKHNpemUgPT0g MCkgeworCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlnb3RvIGVycl9mcmVlX2NjYjA7CisJCX0KKwor CQkvKiBBbGxvY2F0ZSB0aGUgbmV3IG9iamVjdCAqLworCQl2ZWRfcHJpdi0+Y2NiMSA9IGlwdnJf Z2VtX2NyZWF0ZSh2ZWRfcHJpdi0+ZGV2X3ByaXYsIHNpemUsIDAsIDApOworCQlpZiAoSVNfRVJS KHZlZF9wcml2LT5jY2IxKSkgeworCQkJcmV0ID0gUFRSX0VSUih2ZWRfcHJpdi0+Y2NiMSk7CisJ CQlJUFZSX0VSUk9SKCJWRUQ6IGZhaWxlZCB0byBhbGxvY2F0ZSBjY2IxIGJ1ZmZlcjogJWQuXG4i LCByZXQpOworCQkJZ290byBlcnJfZnJlZV9jY2IwOworCQl9CisKKwkJdmVkX3ByaXYtPmJhc2Vf YWRkcjEgPSBpcHZyX2dlbV9vYmplY3RfbW11X29mZnNldCh2ZWRfcHJpdi0+Y2NiMSk7CisKKwkJ Y2NiMV9hZGRyID0gaXB2cl9nZW1fb2JqZWN0X3ZtYXAodmVkX3ByaXYtPmNjYjEpOworCQlpZiAo IWNjYjFfYWRkcikgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCUlQVlJfRVJST1IoIlZFRDoga21h cCBmYWlsZWQgZm9yIGNjYjEgYnVmZmVyOiAlZC5cbiIsIHJldCk7CisJCQlnb3RvIGVycl9mcmVl X2NjYjE7CisJCX0KKworCQltZW1zZXQoY2NiMV9hZGRyLCAwLCBzaXplKTsKKwkJdnVubWFwKGNj YjFfYWRkcik7CisJfQorCisJSVBWUl9ERUJVR19JTklUKCJWRUQ6IFJFTkRFQyBBOiAlMDh4IFJF TkRFQyBCOiAlMDh4XG4iLAorCQkJdmVkX3ByaXYtPmJhc2VfYWRkcjAsIHZlZF9wcml2LT5iYXNl X2FkZHIxKTsKKworCXJldHVybiAwOworZXJyX2ZyZWVfY2NiMToKKwlkcm1fZ2VtX29iamVjdF91 bnJlZmVyZW5jZV91bmxvY2tlZCgmdmVkX3ByaXYtPmNjYjEtPmJhc2UpOworCXZlZF9wcml2LT5j Y2IxID0gTlVMTDsKK2Vycl9mcmVlX2NjYjA6CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Vf dW5sb2NrZWQoJnZlZF9wcml2LT5jY2IwLT5iYXNlKTsKKwl2ZWRfcHJpdi0+Y2NiMCA9IE5VTEw7 CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdmVkX2ZyZWVfY2NiKHN0cnVjdCB2ZWRf cHJpdmF0ZSAqdmVkX3ByaXYpCit7CisJaWYgKHZlZF9wcml2LT5jY2IwKSB7CisJCWRybV9nZW1f b2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKCZ2ZWRfcHJpdi0+Y2NiMC0+YmFzZSk7CisJCXZl ZF9wcml2LT5jY2IwID0gTlVMTDsKKwl9CisJaWYgKHZlZF9wcml2LT5jY2IxKSB7CisJCWRybV9n ZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKCZ2ZWRfcHJpdi0+Y2NiMS0+YmFzZSk7CisJ CXZlZF9wcml2LT5jY2IxID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZlZF9yZW5kZWNf aW5pdF9ieV9yZWcoc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdikKK3sKKwl1MzIgY21kOwor CXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IHZlZF9wcml2LT5kZXZfcHJpdjsK KworCUlQVlJfUkVHX1dSSVRFMzIodmVkX3ByaXYtPmJhc2VfYWRkcjAsIE1TVkRYX1JFTkRFQ19C QVNFX0FERFIwX09GRlNFVCk7CisJSVBWUl9SRUdfV1JJVEUzMih2ZWRfcHJpdi0+YmFzZV9hZGRy MSwgTVNWRFhfUkVOREVDX0JBU0VfQUREUjFfT0ZGU0VUKTsKKworCWNtZCA9IDA7CisJUkVHSU9f V1JJVEVfRklFTEQoY21kLCBNU1ZEWF9SRU5ERUNfQlVGRkVSX1NJWkUsCisJCQlSRU5ERUNfQlVG RkVSX1NJWkUwLCBSRU5ERUNfQV9TSVpFIC8gNDA5Nik7CisJUkVHSU9fV1JJVEVfRklFTEQoY21k LCBNU1ZEWF9SRU5ERUNfQlVGRkVSX1NJWkUsCisJCQlSRU5ERUNfQlVGRkVSX1NJWkUxLCBSRU5E RUNfQl9TSVpFIC8gNDA5Nik7CisJSVBWUl9SRUdfV1JJVEUzMihjbWQsIE1TVkRYX1JFTkRFQ19C VUZGRVJfU0laRV9PRkZTRVQpOworCisJY21kID0gMDsKKwlSRUdJT19XUklURV9GSUVMRChjbWQs IE1TVkRYX1JFTkRFQ19DT05UUk9MMSwKKwkJCVJFTkRFQ19ERUNPREVfU1RBUlRfU0laRSwgMCk7 CisJUkVHSU9fV1JJVEVfRklFTEQoY21kLCBNU1ZEWF9SRU5ERUNfQ09OVFJPTDEsCisJCQlSRU5E RUNfQlVSU1RfU0laRV9XLCAxKTsKKwlSRUdJT19XUklURV9GSUVMRChjbWQsIE1TVkRYX1JFTkRF Q19DT05UUk9MMSwKKwkJCVJFTkRFQ19CVVJTVF9TSVpFX1IsIDEpOworCVJFR0lPX1dSSVRFX0ZJ RUxEKGNtZCwgTVNWRFhfUkVOREVDX0NPTlRST0wxLAorCQkJUkVOREVDX0VYVEVSTkFMX01FTU9S WSwgMSk7CisJSVBWUl9SRUdfV1JJVEUzMihjbWQsIE1TVkRYX1JFTkRFQ19DT05UUk9MMV9PRkZT RVQpOworCisJY21kID0gMHgwMDEwMTAxMDsKKwlJUFZSX1JFR19XUklURTMyKGNtZCwgTVNWRFhf UkVOREVDX0NPTlRFWFQwX09GRlNFVCk7CisJSVBWUl9SRUdfV1JJVEUzMihjbWQsIE1TVkRYX1JF TkRFQ19DT05URVhUMV9PRkZTRVQpOworCUlQVlJfUkVHX1dSSVRFMzIoY21kLCBNU1ZEWF9SRU5E RUNfQ09OVEVYVDJfT0ZGU0VUKTsKKwlJUFZSX1JFR19XUklURTMyKGNtZCwgTVNWRFhfUkVOREVD X0NPTlRFWFQzX09GRlNFVCk7CisJSVBWUl9SRUdfV1JJVEUzMihjbWQsIE1TVkRYX1JFTkRFQ19D T05URVhUNF9PRkZTRVQpOworCUlQVlJfUkVHX1dSSVRFMzIoY21kLCBNU1ZEWF9SRU5ERUNfQ09O VEVYVDVfT0ZGU0VUKTsKKworCWNtZCA9IDA7CisJUkVHSU9fV1JJVEVfRklFTEQoY21kLCBNU1ZE WF9SRU5ERUNfQ09OVFJPTDAsIFJFTkRFQ19JTklUSUFMSVNFLCAxKTsKKwlJUFZSX1JFR19XUklU RTMyKGNtZCwgTVNWRFhfUkVOREVDX0NPTlRST0wwX09GRlNFVCk7Cit9CisKK2ludCB2ZWRfcmVu ZGVjX2luaXRfYnlfbXNnKHN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYpCit7CisJLyogYXQg dGhpcyBzdGFnZSwgRlcgaXMgdXBsYW9kZWQgc3VjY2Vzc2Z1bGx5LAorCSAqIGNhbiBzZW5kIFJF TkRFQyBpbml0IG1lc3NhZ2UgKi8KKwlzdHJ1Y3QgZndfaW5pdF9tc2cgaW5pdF9tc2c7CisJaW5p dF9tc2cuaGVhZGVyLmJpdHMubXNnX3NpemUgPSBzaXplb2Yoc3RydWN0IGZ3X2luaXRfbXNnKTsK Kwlpbml0X21zZy5oZWFkZXIuYml0cy5tc2dfdHlwZSA9IE1UWF9NU0dJRF9JTklUOworCWluaXRf bXNnLnJlbmRlY19hZGRyMCA9IHZlZF9wcml2LT5iYXNlX2FkZHIwOworCWluaXRfbXNnLnJlbmRl Y19hZGRyMSA9IHZlZF9wcml2LT5iYXNlX2FkZHIxOworCWluaXRfbXNnLnJlbmRlY19zaXplLmJp dHMucmVuZGVjX3NpemUwID0gUkVOREVDX0FfU0laRSAvICg0ICogMTAyNCk7CisJaW5pdF9tc2cu cmVuZGVjX3NpemUuYml0cy5yZW5kZWNfc2l6ZTEgPSBSRU5ERUNfQl9TSVpFIC8gKDQgKiAxMDI0 KTsKKwlyZXR1cm4gdmVkX210eF9zZW5kKHZlZF9wcml2LCAodm9pZCAqKSZpbml0X21zZyk7Cit9 CisKK3N0YXRpYyB2b2lkIHZlZF9nZXRfbXR4X2NvbnRyb2xfZnJvbV9kYXNoKHN0cnVjdCB2ZWRf cHJpdmF0ZSAqdmVkX3ByaXYpCit7CisJaW50IGNvdW50ID0gMDsKKwl1MzIgcmVnX3ZhbCA9IDA7 CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gdmVkX3ByaXYtPmRldl9wcml2 OworCisJUkVHSU9fV1JJVEVfRklFTEQocmVnX3ZhbCwgTVNWRFhfTVRYX0RFQlVHLCBNVFhfREJH X0lTX1NMQVZFLCAxKTsKKwlSRUdJT19XUklURV9GSUVMRChyZWdfdmFsLCBNU1ZEWF9NVFhfREVC VUcsIE1UWF9EQkdfR1BJT19JTiwgMHgwMik7CisJSVBWUl9SRUdfV1JJVEUzMihyZWdfdmFsLCBN U1ZEWF9NVFhfREVCVUdfT0ZGU0VUKTsKKworCWRvIHsKKwkJcmVnX3ZhbCA9IElQVlJfUkVHX1JF QUQzMihNU1ZEWF9NVFhfREVCVUdfT0ZGU0VUKTsKKwkJY291bnQrKzsKKwl9IHdoaWxlICgoKHJl Z192YWwgJiAweDE4KSAhPSAwKSAmJiBjb3VudCA8IDUwMDAwKTsKKworCWlmIChjb3VudCA+PSA1 MDAwMCkKKwkJSVBWUl9ERUJVR19WRUQoIlZFRDogdGltZW91dCBpbiBnZXRfbXR4X2NvbnRyb2xf ZnJvbV9kYXNoLlxuIik7CisKKwkvKiBTYXZlIHRoZSBhY2Nlc3MgY29udHJvbCByZWdpc3Rlci4u LiovCisJdmVkX3ByaXYtPnZlZF9kYXNoX2FjY2Vzc19jdHJsID0gSVBWUl9SRUdfUkVBRDMyKE1U WF9SQU1fQUNDRVNTX0NPTlRST0xfT0ZGU0VUKTsKK30KKworc3RhdGljIHZvaWQKK3ZlZF9yZWxl YXNlX210eF9jb250cm9sX2Zyb21fZGFzaChzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2KQor eworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IHZlZF9wcml2LT5kZXZfcHJp djsKKwkvKiByZXN0b3JlIGFjY2VzcyBjb250cm9sICovCisJSVBWUl9SRUdfV1JJVEUzMih2ZWRf cHJpdi0+dmVkX2Rhc2hfYWNjZXNzX2N0cmwsIE1UWF9SQU1fQUNDRVNTX0NPTlRST0xfT0ZGU0VU KTsKKwkvKiByZWxlYXNlIGJ1cyAqLworCUlQVlJfUkVHX1dSSVRFMzIoMHg0LCBNU1ZEWF9NVFhf REVCVUdfT0ZGU0VUKTsKK30KKworLyogZm9yIGZ1dHVyZSBkZWJ1ZyBpbmZvIG9mIG1zdmR4IHJl bGF0ZWQgcmVnaXN0ZXJzICovCitzdGF0aWMgdm9pZAordmVkX3NldHVwX2Z3X2R1bXAoc3RydWN0 IHZlZF9wcml2YXRlICp2ZWRfcHJpdiwgdTMyIGRtYV9jaGFubmVsKQoreworCXN0cnVjdCBkcm1f aXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IHZlZF9wcml2LT5kZXZfcHJpdjsKKwlJUFZSX0RFQlVH X1JFRygiZHVtcCByZWdpc3RlcnMgZHVyaW5nIGZ3IHVwbG9hZCBmb3IgZGVidWc6XG4iKTsKKwkv KiBmb3IgRE1BQyBSRUdJU1RFUiAqLworCUlQVlJfREVCVUdfUkVHKCJNVFhfU1lTQ19DRE1BQSBp cyAweCV4XG4iLAorCQkJSVBWUl9SRUdfUkVBRDMyKE1UWF9TWVNDX0NETUFBX09GRlNFVCkpOwor CUlQVlJfREVCVUdfUkVHKCJNVFhfU1lTQ19DRE1BQyB2YWx1ZSBpcyAweCV4XG4iLAorCQkJSVBW Ul9SRUdfUkVBRDMyKE1UWF9TWVNDX0NETUFDX09GRlNFVCkpOworCUlQVlJfREVCVUdfUkVHKCJE TUFDX1NFVFVQIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlJUFZSX1JFR19SRUFEMzIoRE1BQ19ETUFD X1NFVFVQX09GRlNFVCArIGRtYV9jaGFubmVsKSk7CisJSVBWUl9ERUJVR19SRUcoIkRNQUNfRE1B Q19DT1VOVCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJSVBWUl9SRUdfUkVBRDMyKERNQUNfRE1BQ19D T1VOVF9PRkZTRVQgKyBkbWFfY2hhbm5lbCkpOworCUlQVlJfREVCVUdfUkVHKCJETUFDX0RNQUNf UEVSSVBIX09GRlNFVCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJSVBWUl9SRUdfUkVBRDMyKERNQUNf RE1BQ19QRVJJUEhfT0ZGU0VUICsgZG1hX2NoYW5uZWwpKTsKKwlJUFZSX0RFQlVHX1JFRygiRE1B Q19ETUFDX1BFUklQSEVSQUxfQUREUiB2YWx1ZSBpcyAweCV4XG4iLAorCQkJSVBWUl9SRUdfUkVB RDMyKERNQUNfRE1BQ19QRVJJUEhFUkFMX0FERFJfT0ZGU0VUICsKKwkJCQkgICAgICAgZG1hX2No YW5uZWwpKTsKKwlJUFZSX0RFQlVHX1JFRygiTVNWRFhfQ09OVFJPTCB2YWx1ZSBpcyAweCV4XG4i LAorCQkJSVBWUl9SRUdfUkVBRDMyKE1TVkRYX0NPTlRST0xfT0ZGU0VUKSk7CisJSVBWUl9ERUJV R19SRUcoIkRNQUNfRE1BQ19JUlFfU1RBVCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJSVBWUl9SRUdf UkVBRDMyKERNQUNfRE1BQ19JUlFfU1RBVF9PRkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiTVNW RFhfTU1VX0NPTlRST0wwIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlJUFZSX1JFR19SRUFEMzIoTVNW RFhfTU1VX0NPTlRST0wwX09GRlNFVCkpOworCUlQVlJfREVCVUdfUkVHKCJETUFDX0RNQUNfQ09V TlQgMjIyMiB2YWx1ZSBpcyAweCV4XG4iLAorCQkJSVBWUl9SRUdfUkVBRDMyKERNQUNfRE1BQ19D T1VOVF9PRkZTRVQgKyBkbWFfY2hhbm5lbCkpOworCisJLyogZm9yIE1UWCBSRUdJU1RFUiAqLwor CUlQVlJfREVCVUdfUkVHKCJNVFhfRU5BQkxFX09GRlNFVCBpcyAweCV4XG4iLAorCQkJSVBWUl9S RUdfUkVBRDMyKE1UWF9FTkFCTEVfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIk1UWF9LSUNL X0lOUFVUX09GRlNFVCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJSVBWUl9SRUdfUkVBRDMyKE1UWF9L SUNLX0lOUFVUX09GRlNFVCkpOworCUlQVlJfREVCVUdfUkVHKCJNVFhfUkVHX1JFQURfV1JJVEVf UkVRVUVTVF9PRkZTRVQgdmFsdWUgaXMgMHgleFxuIiwKKwkJSVBWUl9SRUdfUkVBRDMyKE1UWF9S RUdJU1RFUl9SRUFEX1dSSVRFX1JFUVVFU1RfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIk1U WF9SQU1fQUNDRVNTX0NPTlRST0xfT0ZGU0VUIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlJUFZSX1JF R19SRUFEMzIoTVRYX1JBTV9BQ0NFU1NfQ09OVFJPTF9PRkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JF RygiTVRYX1JBTV9BQ0NFU1NfU1RBVFVTX09GRlNFVCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJSVBW Ul9SRUdfUkVBRDMyKE1UWF9SQU1fQUNDRVNTX1NUQVRVU19PRkZTRVQpKTsKKwlJUFZSX0RFQlVH X1JFRygiTVRYX1NZU0NfVElNRVJESVZfT0ZGU0VUIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlJUFZS X1JFR19SRUFEMzIoTVRYX1NZU0NfVElNRVJESVZfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUco Ik1UWF9TWVNDX0NETUFDX09GRlNFVCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJSVBWUl9SRUdfUkVB RDMyKE1UWF9TWVNDX0NETUFDX09GRlNFVCkpOworCUlQVlJfREVCVUdfUkVHKCJNVFhfU1lTQ19D RE1BQV9PRkZTRVQgdmFsdWUgaXMgMHgleFxuIiwKKwkJCUlQVlJfUkVHX1JFQUQzMihNVFhfU1lT Q19DRE1BQV9PRkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiTVRYX1NZU0NfQ0RNQVMwX09GRlNF VCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJSVBWUl9SRUdfUkVBRDMyKE1UWF9TWVNDX0NETUFTMF9P RkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiTVRYX1NZU0NfQ0RNQVRfT0ZGU0VUIHZhbHVlIGlz IDB4JXhcbiIsCisJCQlJUFZSX1JFR19SRUFEMzIoTVRYX1NZU0NfQ0RNQVRfT0ZGU0VUKSk7CisK KwkvKiBmb3IgTVNWRFggQ09SRSBSRUdJU1RFUiAqLworCUlQVlJfREVCVUdfUkVHKCJNU1ZEWF9D T05UUk9MX09GRlNFVCBpcyAweCV4XG4iLAorCQkJSVBWUl9SRUdfUkVBRDMyKE1TVkRYX0NPTlRS T0xfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIk1TVkRYX0lOVEVSUlVQVF9DTEVBUl9PRkZT RVQgdmFsdWUgaXMgMHgleFxuIiwKKwkJCUlQVlJfUkVHX1JFQUQzMihNU1ZEWF9JTlRFUlJVUFRf Q0xFQVJfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIk1TVkRYX0lOVEVSUlVQVF9TVEFUVVNf T0ZGU0VUIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlJUFZSX1JFR19SRUFEMzIoTVNWRFhfSU5URVJS VVBUX1NUQVRVU19PRkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiTU1TVkRYX0hPU1RfSU5URVJS VVBUX0VOQUJMRV9PRkZTRVQgdmFsdWUgaXMgMHgleFxuIiwKKwkJCUlQVlJfUkVHX1JFQUQzMihN U1ZEWF9IT1NUX0lOVEVSUlVQVF9FTkFCTEVfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIk1T VkRYX01BTl9DTEtfRU5BQkxFX09GRlNFVCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJSVBWUl9SRUdf UkVBRDMyKE1TVkRYX01BTl9DTEtfRU5BQkxFX09GRlNFVCkpOworCUlQVlJfREVCVUdfUkVHKCJN U1ZEWF9DT1JFX0lEX09GRlNFVCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJSVBWUl9SRUdfUkVBRDMy KE1TVkRYX0NPUkVfSURfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIk1TVkRYX01NVV9TVEFU VVNfT0ZGU0VUIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlJUFZSX1JFR19SRUFEMzIoTVNWRFhfTU1V X1NUQVRVU19PRkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiRkVfTVNWRFhfV0RUX0NPTlRST0xf T0ZGU0VUIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlJUFZSX1JFR19SRUFEMzIoRkVfTVNWRFhfV0RU X0NPTlRST0xfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIkZFX01TVkRYX1dEVElNRVJfT0ZG U0VUIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlJUFZSX1JFR19SRUFEMzIoRkVfTVNWRFhfV0RUSU1F Ul9PRkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiQkVfTVNWRFhfV0RUX0NPTlRST0xfT0ZGU0VU IHZhbHVlIGlzIDB4JXhcbiIsCisJCQlJUFZSX1JFR19SRUFEMzIoQkVfTVNWRFhfV0RUX0NPTlRS T0xfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIkJFX01TVkRYX1dEVElNRVJfT0ZGU0VUIHZh bHVlIGlzIDB4JXhcbiIsCisJCQlJUFZSX1JFR19SRUFEMzIoQkVfTVNWRFhfV0RUSU1FUl9PRkZT RVQpKTsKKworCS8qIGZvciBNU1ZEWCBSRU5ERUMgUkVHSVNURVIgKi8KKwlJUFZSX0RFQlVHX1JF RygiVkVDX1NISUZUUkVHX0NPTlRST0xfT0ZGU0VUIGlzIDB4JXhcbiIsCisJCQlJUFZSX1JFR19S RUFEMzIoVkVDX1NISUZUUkVHX0NPTlRST0xfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIk1T VkRYX1JFTkRFQ19DT05UUk9MMF9PRkZTRVQgdmFsdWUgaXMgMHgleFxuIiwKKwkJCUlQVlJfUkVH X1JFQUQzMihNU1ZEWF9SRU5ERUNfQ09OVFJPTDBfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUco Ik1TVkRYX1JFTkRFQ19CVUZGRVJfU0laRV9PRkZTRVQgdmFsdWUgaXMgMHgleFxuIiwKKwkJCUlQ VlJfUkVHX1JFQUQzMihNU1ZEWF9SRU5ERUNfQlVGRkVSX1NJWkVfT0ZGU0VUKSk7CisJSVBWUl9E RUJVR19SRUcoIk1TVkRYX1JFTkRFQ19CQVNFX0FERFIwX09GRlNFVCB2YWx1ZSBpcyAweCV4XG4i LAorCQkJSVBWUl9SRUdfUkVBRDMyKE1TVkRYX1JFTkRFQ19CQVNFX0FERFIwX09GRlNFVCkpOwor CUlQVlJfREVCVUdfUkVHKCJNTVNWRFhfUkVOREVDX0JBU0VfQUREUjFfT0ZGU0VUIHZhbHVlIGlz IDB4JXhcbiIsCisJCQlJUFZSX1JFR19SRUFEMzIoTVNWRFhfUkVOREVDX0JBU0VfQUREUjFfT0ZG U0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIk1TVkRYX1JFTkRFQ19SRUFEX0RBVEFfT0ZGU0VUIHZh bHVlIGlzIDB4JXhcbiIsCisJCQlJUFZSX1JFR19SRUFEMzIoTVNWRFhfUkVOREVDX1JFQURfREFU QV9PRkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiTVNWRFhfUkVOREVDX0NPTlRFWFQwX09GRlNF VCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJSVBWUl9SRUdfUkVBRDMyKE1TVkRYX1JFTkRFQ19DT05U RVhUMF9PRkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiTVNWRFhfUkVOREVDX0NPTlRFWFQxX09G RlNFVCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJSVBWUl9SRUdfUkVBRDMyKE1TVkRYX1JFTkRFQ19D T05URVhUMV9PRkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiTVNWRFhfQ01EU19FTkRfU0xJQ0Vf UElDVFVSRV9PRkZTRVQgdmFsdWUgaXMgMHgleFxuIiwKKwkJCUlQVlJfUkVHX1JFQUQzMihNU1ZE WF9DTURTX0VORF9TTElDRV9QSUNUVVJFX09GRlNFVCkpOworCisJSVBWUl9ERUJVR19SRUcoIk1T VkRYX01NVV9NRU1fUkVRIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlJUFZSX1JFR19SRUFEMzIoTVNW RFhfTU1VX01FTV9SRVFfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIk1TVkRYX1NZU19NRU1P UllfREVCVUcyIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlJUFZSX1JFR19SRUFEMzIoMHg2ZmMpKTsK K30KKworc3RhdGljIHZvaWQgdmVkX3VwbG9hZF9mdyhzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9w cml2LAorCQkJCXUzMiBhZGRyZXNzLCBjb25zdCB1MzIgd29yZHMpCit7CisJdTMyIHJlZ192YWwg PSAwOworCXUzMiBjbWQ7CisJdTMyIHVDb3VudFJlZywgb2Zmc2V0LCBtbXVfcHRkOworCXUzMiBz aXplID0gd29yZHMgKiA0OyAvKiBieXRlIGNvdW50ICovCisJdTMyIGRtYV9jaGFubmVsID0gMDsg LyogU2V0dXAgYSBTaW1wbGUgRE1BIGZvciBDaDAgKi8KKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB2ZWRfcHJpdi0+ZGV2X3ByaXY7CisKKwlJUFZSX0RFQlVHX1ZFRCgiVkVE OiBVcGxvYWQgZmlybXdhcmUgYnkgRE1BLlxuIik7CisJdmVkX2dldF9tdHhfY29udHJvbF9mcm9t X2Rhc2godmVkX3ByaXYpOworCisJLyoKKwkgKiBkbWEgdHJhbnNmZXJzIHRvL2Zyb20gdGhlIG10 eCBoYXZlIHRvIGJlIDMyLWJpdCBhbGlnbmVkIGFuZAorCSAqIGluIG11bHRpcGxlcyBvZiAzMiBi aXRzCisJICovCisJSVBWUl9SRUdfV1JJVEUzMihhZGRyZXNzLCBNVFhfU1lTQ19DRE1BQV9PRkZT RVQpOworCisJLyogYnVyc3Qgc2l6ZSBpbiBtdWx0aXBsZXMgb2YgNjQgYml0cyAoYWxsb3dlZCB2 YWx1ZXMgYXJlIDIgb3IgNCkgKi8KKwlSRUdJT19XUklURV9GSUVMRF9MSVRFKHJlZ192YWwsIE1U WF9TWVNDX0NETUFDLCBCVVJTVFNJWkUsIDQpOworCS8qIGZhbHNlIG1lYW5zIHdyaXRlIHRvIG10 eCBtZW0sIHRydWUgbWVhbnMgcmVhZCBmcm9tIG10eCBtZW0gKi8KKwlSRUdJT19XUklURV9GSUVM RF9MSVRFKHJlZ192YWwsIE1UWF9TWVNDX0NETUFDLCBSTlcsIDApOworCS8qIGJlZ2luIHRyYW5z ZmVyICovCisJUkVHSU9fV1JJVEVfRklFTERfTElURShyZWdfdmFsLCBNVFhfU1lTQ19DRE1BQywg RU5BQkxFLAkxKTsKKwkvKiBzcGVjaWZpZXMgdHJhbnNmZXIgc2l6ZSBvZiB0aGUgRE1BIG9wZXJh dGlvbiBieSAzMi1iaXQgd29yZHMgKi8KKwlSRUdJT19XUklURV9GSUVMRF9MSVRFKHJlZ192YWws IE1UWF9TWVNDX0NETUFDLCBMRU5HVEgsCXdvcmRzKTsKKwlJUFZSX1JFR19XUklURTMyKHJlZ192 YWwsIE1UWF9TWVNDX0NETUFDX09GRlNFVCk7CisKKwkvKiB0b2dnbGUgY2hhbm5lbCAwIHVzYWdl IGJldHdlZW4gbXR4IGFuZCBvdGhlciBtc3ZkeCBwZXJpcGhlcmFscyAqLworCXsKKwkJcmVnX3Zh bCA9IElQVlJfUkVHX1JFQUQzMihNU1ZEWF9DT05UUk9MX09GRlNFVCk7CisJCVJFR0lPX1dSSVRF X0ZJRUxEKHJlZ192YWwsIE1TVkRYX0NPTlRST0wsIERNQUNfQ0gwX1NFTEVDVCwgIDApOworCQlJ UFZSX1JFR19XUklURTMyKHJlZ192YWwsIE1TVkRYX0NPTlRST0xfT0ZGU0VUKTsKKwl9CisKKwkv KiBDbGVhciB0aGUgRE1BQyBTdGF0cyAqLworCUlQVlJfUkVHX1dSSVRFMzIoMCAsIERNQUNfRE1B Q19JUlFfU1RBVF9PRkZTRVQgKyBkbWFfY2hhbm5lbCk7CisKKwlvZmZzZXQgPSB2ZWRfcHJpdi0+ Zndfb2Zmc2V0OworCUlQVlJfREVCVUdfVkVEKCJmdyBtbXUgb2Zmc2V0IGlzIDB4JXguXG4iLCBv ZmZzZXQpOworCisJLyogdXNlIGJhbmsgMCAqLworCWNtZCA9IDA7CisJSVBWUl9SRUdfV1JJVEUz MihjbWQsIE1TVkRYX01NVV9CQU5LX0lOREVYX09GRlNFVCk7CisKKwkvKiBXcml0ZSBQVEQgdG8g bW11IGJhc2UgMCovCisJbW11X3B0ZCA9IGlwdnJfZ2V0X2RlZmF1bHRfcGRfYWRkcjMyKHZlZF9w cml2LT5kZXZfcHJpdi0+bW11KTsKKwlCVUdfT04obW11X3B0ZCA9PSAwKTsKKwlJUFZSX1JFR19X UklURTMyKG1tdV9wdGQsIE1TVkRYX01NVV9ESVJfTElTVF9CQVNFX09GRlNFVCArIDApOworCUlQ VlJfREVCVUdfVkVEKCJtbXVfcHRkIGlzICVkLlxuIiwgbW11X3B0ZCk7CisKKwkvKiBJbnZhbGlk YXRlICovCisJcmVnX3ZhbCA9IElQVlJfUkVHX1JFQUQzMihNU1ZEWF9NTVVfQ09OVFJPTDBfT0ZG U0VUKTsKKwlyZWdfdmFsICY9IH4weGY7CisJUkVHSU9fV1JJVEVfRklFTEQocmVnX3ZhbCwgTVNW RFhfTU1VX0NPTlRST0wwLCBNTVVfSU5WQUxEQywgMSk7CisJSVBWUl9SRUdfV1JJVEUzMihyZWdf dmFsLCBNU1ZEWF9NTVVfQ09OVFJPTDBfT0ZGU0VUKTsKKworCUlQVlJfUkVHX1dSSVRFMzIob2Zm c2V0LCBETUFDX0RNQUNfU0VUVVBfT0ZGU0VUICsgZG1hX2NoYW5uZWwpOworCisJLyogT25seSB1 c2UgYSBzaW5nbGUgZG1hIC0gYXNzZXJ0IHRoYXQgdGhpcyBpcyB2YWxpZCAqLworCWlmICgoc2l6 ZSA+PiAyKSA+PSAoMSA8PCAxNSkpIHsKKwkJSVBWUl9FUlJPUigiRE1BIHNpemUgYmV5b25kIGxp bWl0LCBhYm9ydCBmaXJtd2FyZSB1cGxvYWQuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXVDb3Vu dFJlZyA9IElQVlJfRE1BQ19WQUxVRV9DT1VOVChJUFZSX0RNQUNfQlNXQVBfTk9fU1dBUCwgMCwK KwkJCQkJIElQVlJfRE1BQ19ESVJfTUVNX1RPX1BFUklQSCwgMCwgKHNpemUgPj4gMikpOworCS8q IFNldCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGRtYSovCisJSVBWUl9SRUdfV1JJVEUzMih1Q291 bnRSZWcsIERNQUNfRE1BQ19DT1VOVF9PRkZTRVQgKyBkbWFfY2hhbm5lbCk7CisKKwljbWQgPSBJ UFZSX0RNQUNfVkFMVUVfUEVSSVBIX1BBUkFNKElQVlJfRE1BQ19BQ0NfREVMXzAsCisJCQkJCSAg SVBWUl9ETUFDX0lOQ1JfT0ZGLAorCQkJCQkgIElQVlJfRE1BQ19CVVJTVF8yKTsKKwlJUFZSX1JF R19XUklURTMyKGNtZCwgRE1BQ19ETUFDX1BFUklQSF9PRkZTRVQgKyBkbWFfY2hhbm5lbCk7CisK KwkvKiBTZXQgZGVzdGluYXRpb24gcG9ydCBmb3IgZG1hICovCisJY21kID0gMDsKKwlSRUdJT19X UklURV9GSUVMRChjbWQsIERNQUNfRE1BQ19QRVJJUEhFUkFMX0FERFIsIEFERFIsCisJCQkgIE1U WF9TWVNDX0NETUFUX09GRlNFVCk7CisJSVBWUl9SRUdfV1JJVEUzMihjbWQsIERNQUNfRE1BQ19Q RVJJUEhFUkFMX0FERFJfT0ZGU0VUICsgZG1hX2NoYW5uZWwpOworCisKKwkvKiBGaW5hbGx5LCBy ZXdyaXRlIHRoZSBjb3VudCByZWdpc3RlciB3aXRoIHRoZSBlbmFibGUgYml0IHNldCAqLworCUlQ VlJfUkVHX1dSSVRFMzIodUNvdW50UmVnIHwgRE1BQ19ETUFDX0NPVU5UX0VOX01BU0ssCisJCQlE TUFDX0RNQUNfQ09VTlRfT0ZGU0VUICsgZG1hX2NoYW5uZWwpOworCisJLyogV2FpdCBmb3IgYWxs IHRvIGJlIGRvbmUgKi8KKwlpZiAodmVkX3dhaXRfZm9yX3JlZ2lzdGVyKHZlZF9wcml2LAorCQkJ CSAgRE1BQ19ETUFDX0lSUV9TVEFUX09GRlNFVCArIGRtYV9jaGFubmVsLAorCQkJCSAgRE1BQ19E TUFDX0lSUV9TVEFUX1RSQU5TRkVSX0ZJTl9NQVNLLAorCQkJCSAgRE1BQ19ETUFDX0lSUV9TVEFU X1RSQU5TRkVSX0ZJTl9NQVNLLAorCQkJCSAgMjAwMDAwMCwgNSkpIHsKKwkJdmVkX3NldHVwX2Z3 X2R1bXAodmVkX3ByaXYsIGRtYV9jaGFubmVsKTsKKwkJdmVkX3JlbGVhc2VfbXR4X2NvbnRyb2xf ZnJvbV9kYXNoKHZlZF9wcml2KTsKKwkJcmV0dXJuOworCX0KKworCS8qIEFzc2VydCB0aGF0IHRo ZSBNVFggRE1BIHBvcnQgaXMgYWxsIGRvbmUgYXN3ZWxsICovCisJaWYgKHZlZF93YWl0X2Zvcl9y ZWdpc3Rlcih2ZWRfcHJpdiwKKwkJCU1UWF9TWVNDX0NETUFTMF9PRkZTRVQsCisJCQkxLCAxLCAy MDAwMDAwLCA1KSkgeworCQl2ZWRfcmVsZWFzZV9tdHhfY29udHJvbF9mcm9tX2Rhc2godmVkX3By aXYpOworCQlyZXR1cm47CisJfQorCisJdmVkX3JlbGVhc2VfbXR4X2NvbnRyb2xfZnJvbV9kYXNo KHZlZF9wcml2KTsKKworCUlQVlJfREVCVUdfVkVEKCJWRUQ6IFVwbG9hZCBkb25lXG4iKTsKK30K Kworc3RhdGljIGludCB2ZWRfZ2V0X2Z3X2JvKHN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYs CisJCQkJICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICoqcmF3LCBjaGFyICpuYW1lKQoreworCWlu dCByYyA9IDA7CisJc2l6ZV90IGZ3X3NpemU7CisJdm9pZCAqcHRyID0gTlVMTDsKKwl2b2lkICpm d19ib19hZGRyID0gTlVMTDsKKwl1MzIgKmxhc3Rfd29yZDsKKwlzdHJ1Y3QgdmVkX2Z3ICpmdzsK KworCXJjID0gcmVxdWVzdF9maXJtd2FyZShyYXcsIG5hbWUsICZ2ZWRfcHJpdi0+ZGV2X3ByaXYt PmRldi0+cGxhdGZvcm1kZXYtPmRldik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlpZiAo ISpyYXcpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlJUFZSX0VSUk9SKCJWRUQ6ICVzIHJlcXVlc3Rf ZmlybXdhcmUgZmFpbGVkOiBSZWFzb24gJWQuXG4iLCBuYW1lLCByYyk7CisJCWdvdG8gb3V0Owor CX0KKworCWlmICgoKnJhdyktPnNpemUgPCBzaXplb2Yoc3RydWN0IHZlZF9mdykpIHsKKwkJcmMg PSAtRU5PTUVNOworCQlJUFZSX0VSUk9SKCJWRUQ6ICVzIGlzIGlzIG5vdCBjb3JyZWN0IHNpemUo JXpkKS5cbiIsIG5hbWUsICgqcmF3KS0+c2l6ZSk7CisJCWdvdG8gb3V0OworCX0KKworCXB0ciA9 ICh2b2lkICopKCgqcmF3KSktPmRhdGE7CisJaWYgKCFwdHIpIHsKKwkJcmMgPSAtRU5PTUVNOwor CQlJUFZSX0VSUk9SKCJWRUQ6IEZhaWxlZCB0byBsb2FkICVzLlxuIiwgbmFtZSk7CisJCWdvdG8g b3V0OworCX0KKworCS8qIGFub3RoZXIgc2FuaXR5IGNoZWNrLi4uICovCisJZndfc2l6ZSA9IHNp emVvZihzdHJ1Y3QgdmVkX2Z3KSArCisJCSAgc2l6ZW9mKHUzMikgKiAoKHN0cnVjdCB2ZWRfZncg KikgcHRyKS0+dGV4dF9zaXplICsKKwkJICBzaXplb2YodTMyKSAqICgoc3RydWN0IHZlZF9mdyAq KSBwdHIpLT5kYXRhX3NpemU7CisJaWYgKCgqcmF3KS0+c2l6ZSA8IGZ3X3NpemUpIHsKKwkJcmMg PSAtRU5PTUVNOworCQlJUFZSX0VSUk9SKCJWRUQ6ICVzIGlzIGlzIG5vdCBjb3JyZWN0IHNpemUo JXpkKS5cbiIsCisJCQkgIG5hbWUsICgqcmF3KS0+c2l6ZSk7CisJCWdvdG8gb3V0OworCX0KKwor CWZ3X2JvX2FkZHIgPSBpcHZyX2dlbV9vYmplY3Rfdm1hcCh2ZWRfcHJpdi0+ZndfYm8pOworCWlm ICghZndfYm9fYWRkcikgeworCQlyYyA9IC1FTk9NRU07CisJCUlQVlJfRVJST1IoIlZFRDoga21h cCBmYWlsZWQgZm9yIGZ3IGJ1ZmZlci5cbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlmdyA9IChz dHJ1Y3QgdmVkX2Z3ICopcHRyOworCW1lbXNldChmd19ib19hZGRyLCBVTklOSVRJTElTRV9NRU0s IHZlZF9wcml2LT5tdHhfbWVtX3NpemUpOworCW1lbWNweShmd19ib19hZGRyLCBwdHIgKyBzaXpl b2Yoc3RydWN0IHZlZF9mdyksCisJICAgICAgIHNpemVvZih1MzIpICogZnctPnRleHRfc2l6ZSk7 CisJbWVtY3B5KGZ3X2JvX2FkZHIgKyAoZnctPmRhdGFfbG9jYXRpb24gLSBNU1ZEWF9NVFhfREFU QV9MT0NBVElPTiksCisJICAgICAgICh2b2lkICopcHRyICsgc2l6ZW9mKHN0cnVjdCB2ZWRfZncp ICsgc2l6ZW9mKHUzMikgKiBmdy0+dGV4dF9zaXplLAorCSAgICAgICBzaXplb2YodTMyKSAqIGZ3 LT5kYXRhX3NpemUpOworCWxhc3Rfd29yZCA9ICh1MzIgKikoZndfYm9fYWRkciArIHZlZF9wcml2 LT5tdHhfbWVtX3NpemUgLSA0KTsKKwkvKgorCSAqIFdyaXRlIGEga25vdyB2YWx1ZSB0byBsYXN0 IHdvcmQgaW4gbXR4IG1lbW9yeQorCSAqIFVzZWZ1bGwgZm9yIGRldGVjdGlvbiBvZiBzdGFjayBv dmVycnVuCisJICovCisJKmxhc3Rfd29yZCA9IFNUQUNLR1VBUkRXT1JEOworCisJdnVubWFwKGZ3 X2JvX2FkZHIpOworCUlQVlJfREVCVUdfVkVEKCJWRUQ6IHJlbGVhc2luZyBmaXJtd2FyZSByZXNv dWNlcy5cbiIpOworCUlQVlJfREVCVUdfVkVEKCJWRUQ6IExvYWQgZmlybXdhcmUgaW50byBCTyBz dWNjZXNzZnVsbHkuXG4iKTsKK291dDoKKwlyZWxlYXNlX2Zpcm13YXJlKCpyYXcpOworCXJldHVy biByYzsKK30KKworc3RhdGljIHUzMiAqCit2ZWRfZ2V0X2Z3KHN0cnVjdCB2ZWRfcHJpdmF0ZSAq dmVkX3ByaXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKnJhdywgY2hhciAqbmFtZSkKK3sKKwlp bnQgcmMgPSAwOworCXNpemVfdCBmd19zaXplOworCXZvaWQgKnB0ciA9IE5VTEw7CisJc3RydWN0 IHZlZF9mdyAqZnc7CisJdmVkX3ByaXYtPnZlZF9md19wdHIgPSBOVUxMOworCisJcmMgPSByZXF1 ZXN0X2Zpcm13YXJlKHJhdywgbmFtZSwgJnZlZF9wcml2LT5kZXZfcHJpdi0+ZGV2LT5wbGF0Zm9y bWRldi0+ZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiBOVUxMOworCisJaWYgKCEqcmF3KSB7CisJ CUlQVlJfRVJST1IoIlZFRDogJXMgcmVxdWVzdF9maXJtd2FyZSBmYWlsZWQ6IFJlYXNvbiAlZFxu IiwKKwkJCSAgbmFtZSwgcmMpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoKCpyYXcpLT5zaXpl IDwgc2l6ZW9mKHN0cnVjdCB2ZWRfZncpKSB7CisJCUlQVlJfRVJST1IoIlZFRDogJXMgaXMgaXMg bm90IGNvcnJlY3Qgc2l6ZSglemQpXG4iLAorCQkJICBuYW1lLCAoKnJhdyktPnNpemUpOworCQln b3RvIG91dDsKKwl9CisKKwlwdHIgPSAoaW50ICopKCgqcmF3KSktPmRhdGE7CisJaWYgKCFwdHIp IHsKKwkJSVBWUl9FUlJPUigiVkVEOiBGYWlsZWQgdG8gbG9hZCAlcy5cbiIsIG5hbWUpOworCQln b3RvIG91dDsKKwl9CisJZncgPSAoc3RydWN0IHZlZF9mdyAqKXB0cjsKKworCS8qIGFub3RoZXIg c2FuaXR5IGNoZWNrLi4uICovCisJZndfc2l6ZSA9IHNpemVvZihmdykgKworCQkgIHNpemVvZih1 MzIpICogZnctPnRleHRfc2l6ZSArCisJCSAgc2l6ZW9mKHUzMikgKiBmdy0+ZGF0YV9zaXplOwor CWlmICgoKnJhdyktPnNpemUgPCBmd19zaXplKSB7CisJCUlQVlJfRVJST1IoIlZFRDogJXMgaXMg aXMgbm90IGNvcnJlY3Qgc2l6ZSglemQpLlxuIiwKKwkJCSAgIG5hbWUsICgqcmF3KS0+c2l6ZSk7 CisJCWdvdG8gb3V0OworCX0KKworCXZlZF9wcml2LT52ZWRfZndfcHRyID0ga3phbGxvYyhmd19z aXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZlZF9wcml2LT52ZWRfZndfcHRyKQorCQlJUFZSX0VS Uk9SKCJWRUQ6IGFsbG9jYXRlIEZXIGJ1ZmZlciBmYWlsZWQuXG4iKTsKKwllbHNlIHsKKwkJbWVt Y3B5KHZlZF9wcml2LT52ZWRfZndfcHRyLCBwdHIsIGZ3X3NpemUpOworCQl2ZWRfcHJpdi0+dmVk X2Z3X3NpemUgPSBmd19zaXplOworCX0KKworb3V0OgorCUlQVlJfREVCVUdfVkVEKCJWRUQ6IHJl bGVhc2luZyBmaXJtd2FyZSByZXNvdWNlcy5cbiIpOworCXJlbGVhc2VfZmlybXdhcmUoKnJhdyk7 CisJcmV0dXJuIHZlZF9wcml2LT52ZWRfZndfcHRyOworfQorCitzdGF0aWMgdm9pZAordmVkX3dy aXRlX210eF9jb3JlX3JlZyhzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2LAorCQkJICAgICAg IGNvbnN0IHUzMiBjb3JlX3JlZywgY29uc3QgdTMyIHZhbCkKK3sKKwl1MzIgcmVnID0gMDsKKwlz dHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2ZWRfcHJpdi0+ZGV2X3ByaXY7CisK KwkvKiBQdXQgZGF0YSBpbiBNVFhfUldfREFUQSAqLworCUlQVlJfUkVHX1dSSVRFMzIodmFsLCBN VFhfUkVHSVNURVJfUkVBRF9XUklURV9EQVRBX09GRlNFVCk7CisKKwkvKiBEUkVBRFkgaXMgc2V0 IHRvIDAgYW5kIHJlcXVlc3QgYSB3cml0ZSAqLworCXJlZyA9IGNvcmVfcmVnOworCVJFR0lPX1dS SVRFX0ZJRUxEX0xJVEUocmVnLCBNVFhfUkVHSVNURVJfUkVBRF9XUklURV9SRVFVRVNULAorCQkJ ICAgICAgIE1UWF9STlcsIDApOworCVJFR0lPX1dSSVRFX0ZJRUxEX0xJVEUocmVnLCBNVFhfUkVH SVNURVJfUkVBRF9XUklURV9SRVFVRVNULAorCQkJICAgICAgIE1UWF9EUkVBRFksIDApOworCUlQ VlJfUkVHX1dSSVRFMzIocmVnLCBNVFhfUkVHSVNURVJfUkVBRF9XUklURV9SRVFVRVNUX09GRlNF VCk7CisKKwl2ZWRfd2FpdF9mb3JfcmVnaXN0ZXIodmVkX3ByaXYsCisJCQkgICAgICBNVFhfUkVH SVNURVJfUkVBRF9XUklURV9SRVFVRVNUX09GRlNFVCwKKwkJCSAgICAgIE1UWF9SRUdJU1RFUl9S RUFEX1dSSVRFX1JFUVVFU1RfTVRYX0RSRUFEWV9NQVNLLAorCQkJICAgICAgTVRYX1JFR0lTVEVS X1JFQURfV1JJVEVfUkVRVUVTVF9NVFhfRFJFQURZX01BU0ssCisJCQkgICAgICAyMDAwMDAwLCA1 KTsKK30KKworaW50IHZlZF9hbGxvY19md19ibyhzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2 KQoreworCXUzMiBjb3JlX3JldjsKKwlpbnQgcmV0OworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRl ICpkZXZfcHJpdiA9IHZlZF9wcml2LT5kZXZfcHJpdjsKKworCWNvcmVfcmV2ID0gSVBWUl9SRUdf UkVBRDMyKE1TVkRYX0NPUkVfUkVWX09GRlNFVCk7CisKKwlpZiAoKGNvcmVfcmV2ICYgMHhmZmZm ZmYpIDwgMHgwMjAwMDApCisJCXZlZF9wcml2LT5tdHhfbWVtX3NpemUgPSAxNiAqIDEwMjQ7CisJ ZWxzZQorCQl2ZWRfcHJpdi0+bXR4X21lbV9zaXplID0gNTYgKiAxMDI0OworCisJSVBWUl9ERUJV R19JTklUKCJWRUQ6IE1UWCBtZW0gc2l6ZSBpcyAweCUwOHggYnl0ZXMsIgorCQkJImFsbG9jYXRl IGZpcm13YXJlIEJPIHNpemUgMHglMDh4LlxuIiwKKwkJCXZlZF9wcml2LT5tdHhfbWVtX3NpemUs CisJCQl2ZWRfcHJpdi0+bXR4X21lbV9zaXplICsgNDA5Nik7CisKKwkvKiBBbGxvY2F0ZSB0aGUg bmV3IG9iamVjdCAqLworCXZlZF9wcml2LT5md19ibyA9IGlwdnJfZ2VtX2NyZWF0ZSh2ZWRfcHJp di0+ZGV2X3ByaXYsCisJCQkJCQl2ZWRfcHJpdi0+bXR4X21lbV9zaXplICsgNDA5NiwgMCwgMCk7 CisJaWYgKElTX0VSUih2ZWRfcHJpdi0+ZndfYm8pKSB7CisJCUlQVlJfRVJST1IoIlZFRDogZmFp bGVkIHRvIGFsbG9jYXRlIGZ3IGJ1ZmZlcjogJWxkLlxuIiwKKwkJCVBUUl9FUlIodmVkX3ByaXYt PmZ3X2JvKSk7CisJCXZlZF9wcml2LT5md19ibyA9IE5VTEw7CisJCXJldHVybiAtRU5PTUVNOwor CX0KKwl2ZWRfcHJpdi0+Zndfb2Zmc2V0ID0gaXB2cl9nZW1fb2JqZWN0X21tdV9vZmZzZXQodmVk X3ByaXYtPmZ3X2JvKTsKKwlpZiAoSVBWUl9JU19FUlIodmVkX3ByaXYtPmZ3X29mZnNldCkpIHsK KwkJdmVkX3ByaXYtPmZ3X2JvID0gTlVMTDsKKwkJZ290byBlcnJfZnJlZV9md19ibzsKKwl9CisJ cmV0dXJuIDA7CitlcnJfZnJlZV9md19ibzoKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91 bmxvY2tlZCgmdmVkX3ByaXYtPmZ3X2JvLT5iYXNlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQg dmVkX3NldHVwX2Z3KHN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYpCit7CisJdTMyIHJhbV9i YW5rX3NpemU7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gdmVkX3ByaXYt PmRldl9wcml2OworCWludCByZXQgPSAwOworCXN0cnVjdCB2ZWRfZncgKmZ3OworCXUzMiAqZndf cHRyID0gTlVMTDsKKwl1MzIgKnRleHRfcHRyID0gTlVMTDsKKwl1MzIgKmRhdGFfcHRyID0gTlVM TDsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnJhdyA9IE5VTEw7CisKKwkvKiB0b2RvIDogQXNz ZXJ0IHRoZSBjbG9jayBpcyBvbiAtIGlmIG5vdCB0dXJuIGl0IG9uIHRvIHVwbG9hZCBjb2RlICov CisJSVBWUl9ERUJVR19WRUQoIlZFRDogdmVkX3NldHVwX2Z3LlxuIik7CisKKwl2ZWRfc2V0X2Ns b2Nrcyh2ZWRfcHJpdiwgY2xrX2VuYWJsZV9hbGwpOworCisJLyogUmVzZXQgTVRYICovCisJSVBW Ul9SRUdfV1JJVEUzMihNVFhfU09GVF9SRVNFVF9NVFhfUkVTRVRfTUFTSywKKwkJCU1UWF9TT0ZU X1JFU0VUX09GRlNFVCk7CisKKwlJUFZSX1JFR19XUklURTMyKEZJUk1XQVJFSUQsIE1TVkRYX0NP TU1TX0ZJUk1XQVJFX0lEKTsKKworCUlQVlJfUkVHX1dSSVRFMzIoMCwgTVNWRFhfQ09NTVNfRVJS T1JfVFJJRyk7CisJSVBWUl9SRUdfV1JJVEUzMigxOTksIE1UWF9TWVNDX1RJTUVSRElWX09GRlNF VCk7IC8qIE1UWF9TWVNDX1RJTUVSRElWICovCisJSVBWUl9SRUdfV1JJVEUzMigwLCBNU1ZEWF9F WFRfRldfRVJST1JfU1RBVEUpOyAvKiBFWFRfRldfRVJST1JfU1RBVEUgKi8KKwlJUFZSX1JFR19X UklURTMyKDAsIE1TVkRYX0NPTU1TX01TR19DT1VOVEVSKTsKKwlJUFZSX1JFR19XUklURTMyKDAs IE1TVkRYX0NPTU1TX1NJR05BVFVSRSk7CisJSVBWUl9SRUdfV1JJVEUzMigwLCBNU1ZEWF9DT01N U19UT19IT1NUX1JEX0lOREVYKTsKKwlJUFZSX1JFR19XUklURTMyKDAsIE1TVkRYX0NPTU1TX1RP X0hPU1RfV1JUX0lOREVYKTsKKwlJUFZSX1JFR19XUklURTMyKDAsIE1TVkRYX0NPTU1TX1RPX01U WF9SRF9JTkRFWCk7CisJSVBWUl9SRUdfV1JJVEUzMigwLCBNU1ZEWF9DT01NU19UT19NVFhfV1JU X0lOREVYKTsKKwlJUFZSX1JFR19XUklURTMyKDAsIE1TVkRYX0NPTU1TX0ZXX1NUQVRVUyk7CisJ SVBWUl9SRUdfV1JJVEUzMihEU0lBQkxFX0lETEVfR1BJT19TSUcgfAorCQkJRFNJQUJMRV9BdXRv X0NMT0NLX0dBVElORyB8CisJCQlSRVRVUk5fVkRFQl9EQVRBX0lOX0NPTVBMRVRJT04gfAorCQkJ Tk9UX0VOQUJMRV9PTl9IT1NUX0NPTkNFQUxNRU5ULAorCQkJTVNWRFhfQ09NTVNfT0ZGU0VUX0ZM QUdTKTsKKwlJUFZSX1JFR19XUklURTMyKDAsIE1TVkRYX0NPTU1TX1NJR05BVFVSRSk7CisKKwkv KiByZWFkIHJlZ2lzdGVyIGJhbmsgc2l6ZSAqLworCXsKKwkJdTMyIGJhbmtfc2l6ZSwgcmVnOwor CQlyZWcgPSBJUFZSX1JFR19SRUFEMzIoTVNWRFhfTVRYX1JBTV9CQU5LX09GRlNFVCk7CisJCWJh bmtfc2l6ZSA9CisJCQlSRUdJT19SRUFEX0ZJRUxEKHJlZywgTVNWRFhfTVRYX1JBTV9CQU5LLAor CQkJCQkgTVRYX1JBTV9CQU5LX1NJWkUpOworCQlyYW1fYmFua19zaXplID0gKHUzMikoMSA8PCAo YmFua19zaXplICsgMikpOworCX0KKworCUlQVlJfREVCVUdfVkVEKCJWRUQ6IFJBTSBiYW5rIHNp emUgPSAlZCBieXRlc1xuIiwgcmFtX2Jhbmtfc2l6ZSk7CisKKwkvKiBpZiBGVyBhbHJlYWR5IGxv YWRlZCBmcm9tIHN0b3JhZ2UgKi8KKwlpZiAodmVkX3ByaXYtPnZlZF9md19wdHIpIHsKKwkJZndf cHRyID0gdmVkX3ByaXYtPnZlZF9md19wdHI7CisJfSBlbHNlIHsKKwkJZndfcHRyID0gdmVkX2dl dF9mdyh2ZWRfcHJpdiwgJnJhdywgRklSTVdBUkVfTkFNRSk7CisJCUlQVlJfREVCVUdfVkVEKCJW RUQ6bG9hZCBtc3ZkeF9md19tZmxkX0RFMi4wLmJpbiBieSB1ZGV2ZFxuIik7CisJfQorCWlmICgh ZndfcHRyKSB7CisJCUlQVlJfRVJST1IoIlZFRDpsb2FkIHZlZF9mdy5iaW4gZmFpbGVkLGlzIHVk ZXZkIHJ1bm5pbmc/XG4iKTsKKwkJcmV0ID0gMTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCF2 ZWRfcHJpdi0+ZndfbG9hZGVkX3RvX2JvKSB7IC8qIExvYWQgZmlybXdhcmUgaW50byBCTyAqLwor CQlJUFZSX0RFQlVHX1ZFRCgiTVNWRFg6bG9hZCB2ZWRfZncuYmluIGJ5IHVkZXZkIGludG8gQk9c biIpOworCQlyZXQgPSB2ZWRfZ2V0X2Z3X2JvKHZlZF9wcml2LCAmcmF3LCBGSVJNV0FSRV9OQU1F KTsKKwkJaWYgKHJldCkgeworCQkJSVBWUl9FUlJPUigiVkVEOiBmYWlsZWQgdG8gY2FsbCB2ZWRf Z2V0X2Z3X2JvOiAlZC5cbiIsIHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCQl2ZWRfcHJpdi0+ ZndfbG9hZGVkX3RvX2JvID0gdHJ1ZTsKKwl9CisKKwlmdyA9IChzdHJ1Y3QgdmVkX2Z3ICopIGZ3 X3B0cjsKKworCS8qIG5lZWQgY2hlY2sgZnctPnZlcj8gKi8KKwl0ZXh0X3B0ciA9ICh1MzIgKiko KHU4ICopIGZ3X3B0ciArIHNpemVvZihzdHJ1Y3QgdmVkX2Z3KSk7CisJZGF0YV9wdHIgPSB0ZXh0 X3B0ciArIGZ3LT50ZXh0X3NpemU7CisKKwkvKiBtYXliZSB3ZSBjYW4ganVkZ2UgZncgdmVyc2lv biBhY2NvcmRpbmcgdG8gZncgdGV4dCBzaXplICovCisKKwlJUFZSX0RFQlVHX1ZFRCgiVkVEOiBS ZXRyaWV2ZWQgcG9pbnRlcnMgZm9yIGZpcm13YXJlXG4iKTsKKwlJUFZSX0RFQlVHX1ZFRCgiVkVE OiB0ZXh0X3NpemU6ICVkXG4iLCBmdy0+dGV4dF9zaXplKTsKKwlJUFZSX0RFQlVHX1ZFRCgiVkVE OiBkYXRhX3NpemU6ICVkXG4iLCBmdy0+ZGF0YV9zaXplKTsKKwlJUFZSX0RFQlVHX1ZFRCgiVkVE OiBkYXRhX2xvY2F0aW9uOiAweCV4XG4iLCBmdy0+ZGF0YV9sb2NhdGlvbik7CisJSVBWUl9ERUJV R19WRUQoIlZFRDogRmlyc3QgNCBieXRlcyBvZiB0ZXh0OiAweCV4XG4iLCAqdGV4dF9wdHIpOwor CUlQVlJfREVCVUdfVkVEKCJWRUQ6IEZpcnN0IDQgYnl0ZXMgb2YgZGF0YTogMHgleFxuIiwgKmRh dGFfcHRyKTsKKwlJUFZSX0RFQlVHX1ZFRCgiVkVEOiBVcGxvYWRpbmcgZmlybXdhcmVcbiIpOwor CisJdmVkX3VwbG9hZF9mdyh2ZWRfcHJpdiwgMCwgdmVkX3ByaXYtPm10eF9tZW1fc2l6ZSAvIDQp OworCisJLyoJLS0gU2V0IHN0YXJ0aW5nIFBDIGFkZHJlc3MJKi8KKwl2ZWRfd3JpdGVfbXR4X2Nv cmVfcmVnKHZlZF9wcml2LCBNVFhfUEMsIFBDX1NUQVJUX0FERFJFU1MpOworCisJLyoJLS0gVHVy biBvbiB0aGUgdGhyZWFkCSovCisJSVBWUl9SRUdfV1JJVEUzMihNVFhfRU5BQkxFX01UWF9FTkFC TEVfTUFTSywgTVRYX0VOQUJMRV9PRkZTRVQpOworCisJLyogV2FpdCBmb3IgdGhlIHNpZ25hdHVy ZSB2YWx1ZSB0byBiZSB3cml0dGVuIGJhY2sgKi8KKwlyZXQgPSB2ZWRfd2FpdF9mb3JfcmVnaXN0 ZXIodmVkX3ByaXYsIE1TVkRYX0NPTU1TX1NJR05BVFVSRSwKKwkJCQkgICAgTVNWRFhfQ09NTVNf U0lHTkFUVVJFX1ZBTFVFLAorCQkJCSAgICAweGZmZmZmZmZmLCAvKiBFbmFibGVkIGJpdHMgKi8K KwkJCQkgICAgMjAwMDAwMCwgNSk7CisJaWYgKHJldCkgeworCQlJUFZSX0VSUk9SKCJWRUQ6IGZp cm13YXJlIGZhaWxzIHRvIGluaXRpYWxpemUuXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJSVBW Ul9ERUJVR19WRUQoIlZFRDogTVRYIEluaXRpYWwgaW5kaWNhdGlvbnMgT0suXG4iKTsKKwlJUFZS X0RFQlVHX1ZFRCgiVkVEOiBNU1ZEWF9DT01NU19BUkVBX0FERFIgPSAlMDh4LlxuIiwKKwkJICAg ICAgIE1TVkRYX0NPTU1TX0FSRUFfQUREUik7CitvdXQ6CisJLyogbm8gbmVlZCB0byBwdXQgZncg Ym8sIHdlIHdpbGwgZG8gaXQgYXQgZHJpdmVyIHVubG9hZCAqLworCXJldHVybiByZXQ7Cit9CisK KworLyogVGhpcyB2YWx1ZSBpcyBoYXJkY29kZWQgaW4gRlcgKi8KKyNkZWZpbmUgV0RUX0NMT0NL X0RJVklERVIgMTI4CitpbnQgdmVkX3Bvc3RfYm9vdF9pbml0KHN0cnVjdCB2ZWRfcHJpdmF0ZSAq dmVkX3ByaXYpCit7CisJdTMyIGRldmljZV9ub2RlX2ZsYWdzID0KKwkJCURTSUFCTEVfSURMRV9H UElPX1NJRyB8IERTSUFCTEVfQXV0b19DTE9DS19HQVRJTkcgfAorCQkJUkVUVVJOX1ZERUJfREFU QV9JTl9DT01QTEVUSU9OIHwKKwkJCU5PVF9FTkFCTEVfT05fSE9TVF9DT05DRUFMTUVOVDsKKwlp bnQgcmVnX3ZhbCA9IDA7CisKKwkvKiBEREsgc2V0IGZlX3dkdF9jbGtzIGFzIDB4ODIwIGFuZCBi ZV93ZHRfY2xrcyBhcyAweDgyMDAgKi8KKwl1MzIgZmVfd2R0X2Nsa3MgPSAweDMzNCAqIFdEVF9D TE9DS19ESVZJREVSOworCXUzMiBiZV93ZHRfY2xrcyA9IDB4MjAwOCAqIFdEVF9DTE9DS19ESVZJ REVSOworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IHZlZF9wcml2LT5kZXZf cHJpdjsKKworCUlQVlJfUkVHX1dSSVRFMzIoRklSTVdBUkVJRCwgTVNWRFhfQ09NTVNfRklSTVdB UkVfSUQpOworCUlQVlJfUkVHX1dSSVRFMzIoZGV2aWNlX25vZGVfZmxhZ3MsIE1TVkRYX0NPTU1T X09GRlNFVF9GTEFHUyk7CisKKwkvKiByZWFkIHJlZ2lzdGVyIGJhbmsgc2l6ZSAqLworCXsKKwkJ dTMyIHJhbV9iYW5rX3NpemU7CisJCXUzMiBiYW5rX3NpemUsIHJlZzsKKwkJcmVnID0gSVBWUl9S RUdfUkVBRDMyKE1TVkRYX01UWF9SQU1fQkFOS19PRkZTRVQpOworCQliYW5rX3NpemUgPQorCQkJ UkVHSU9fUkVBRF9GSUVMRChyZWcsIE1TVkRYX01UWF9SQU1fQkFOSywKKwkJCQkJIE1UWF9SQU1f QkFOS19TSVpFKTsKKwkJcmFtX2Jhbmtfc2l6ZSA9ICh1MzIpKDEgPDwgKGJhbmtfc2l6ZSArIDIp KTsKKwkJSVBWUl9ERUJVR19JTklUKCJWRUQ6IFJBTSBiYW5rIHNpemUgPSAlZCBieXRlc1xuIiwK KwkJCQlyYW1fYmFua19zaXplKTsKKwl9CisJLyogaG9zdCBlbmQgKi8KKworCS8qIERESyBzZXR1 cCB0aWxpbmcgcmVnaW9uIGhlcmUgKi8KKwkvKiBEREsgc2V0IE1NVV9DT05UUk9MMiByZWdpc3Rl ciAqLworCisJLyogc2V0IHdhdGNoZG9nIHRpbWVyIGhlcmUgKi8KKwlSRUdJT19XUklURV9GSUVM RChyZWdfdmFsLCBGRV9NU1ZEWF9XRFRfQ09OVFJPTCwKKwkJCSAgRkVfV0RUX0NOVF9DVFJMLCAw eDMpOworCVJFR0lPX1dSSVRFX0ZJRUxEKHJlZ192YWwsIEZFX01TVkRYX1dEVF9DT05UUk9MLAor CQkJICBGRV9XRFRfRU5BQkxFLCAwKTsKKwlSRUdJT19XUklURV9GSUVMRChyZWdfdmFsLCBGRV9N U1ZEWF9XRFRfQ09OVFJPTCwKKwkJCSAgRkVfV0RUX0FDVElPTjAsIDEpOworCVJFR0lPX1dSSVRF X0ZJRUxEKHJlZ192YWwsIEZFX01TVkRYX1dEVF9DT05UUk9MLAorCQkJICBGRV9XRFRfQ0xFQVJf U0VMRUNULCAxKTsKKwlSRUdJT19XUklURV9GSUVMRChyZWdfdmFsLCBGRV9NU1ZEWF9XRFRfQ09O VFJPTCwKKwkJCSAgRkVfV0RUX0NMS0RJVl9TRUxFQ1QsIDcpOworCUlQVlJfUkVHX1dSSVRFMzIo ZmVfd2R0X2Nsa3MgLyBXRFRfQ0xPQ0tfRElWSURFUiwKKwkJCUZFX01TVkRYX1dEVF9DT01QQVJF TUFUQ0hfT0ZGU0VUKTsKKwlJUFZSX1JFR19XUklURTMyKHJlZ192YWwsIEZFX01TVkRYX1dEVF9D T05UUk9MX09GRlNFVCk7CisKKwlyZWdfdmFsID0gMDsKKwkvKiBEREsgc2V0IEJFX1dEVF9DTlRf Q1RSTCBhcyAweDUgYW5kIEJFX1dEVF9DTEVBUl9TRUxFQ1QgYXMgMHgxICovCisJUkVHSU9fV1JJ VEVfRklFTEQocmVnX3ZhbCwgQkVfTVNWRFhfV0RUX0NPTlRST0wsCisJCQkgIEJFX1dEVF9DTlRf Q1RSTCwgMHg3KTsKKwlSRUdJT19XUklURV9GSUVMRChyZWdfdmFsLCBCRV9NU1ZEWF9XRFRfQ09O VFJPTCwKKwkJCSAgQkVfV0RUX0VOQUJMRSwgMCk7CisJUkVHSU9fV1JJVEVfRklFTEQocmVnX3Zh bCwgQkVfTVNWRFhfV0RUX0NPTlRST0wsCisJCQkgIEJFX1dEVF9BQ1RJT04wLCAxKTsKKwlSRUdJ T19XUklURV9GSUVMRChyZWdfdmFsLCBCRV9NU1ZEWF9XRFRfQ09OVFJPTCwKKwkJCSAgQkVfV0RU X0NMRUFSX1NFTEVDVCwgMHhkKTsKKwlSRUdJT19XUklURV9GSUVMRChyZWdfdmFsLCBCRV9NU1ZE WF9XRFRfQ09OVFJPTCwKKwkJCSAgQkVfV0RUX0NMS0RJVl9TRUxFQ1QsIDcpOworCisJSVBWUl9S RUdfV1JJVEUzMihiZV93ZHRfY2xrcyAvIFdEVF9DTE9DS19ESVZJREVSLAorCQkJQkVfTVNWRFhf V0RUX0NPTVBBUkVNQVRDSF9PRkZTRVQpOworCUlQVlJfUkVHX1dSSVRFMzIocmVnX3ZhbCwgQkVf TVNWRFhfV0RUX0NPTlRST0xfT0ZGU0VUKTsKKworCXJldHVybiB2ZWRfcmVuZGVjX2luaXRfYnlf bXNnKHZlZF9wcml2KTsKK30KKworaW50IHZlZF9wb3N0X2luaXQoc3RydWN0IHZlZF9wcml2YXRl ICp2ZWRfcHJpdikKK3sKKwl1MzIgY21kOworCWludCByZXQ7CisJc3RydWN0IGRybV9pcHZyX3By aXZhdGUgKmRldl9wcml2OworCisJaWYgKCF2ZWRfcHJpdikKKwkJcmV0dXJuIC1FSU5WQUw7CisK Kwl2ZWRfcHJpdi0+dmVkX2J1c3kgPSBmYWxzZTsKKwlkZXZfcHJpdiA9IHZlZF9wcml2LT5kZXZf cHJpdjsKKworCS8qIEVuYWJsZSBNTVUgYnkgcmVtb3ZpbmcgYWxsIGJ5cGFzcyBiaXRzICovCisJ SVBWUl9SRUdfV1JJVEUzMigwLCBNU1ZEWF9NTVVfQ09OVFJPTDBfT0ZGU0VUKTsKKworCXZlZF9y ZW5kZWNfaW5pdF9ieV9yZWcodmVkX3ByaXYpOworCWlmICghdmVkX3ByaXYtPmZ3X2JvKSB7CisJ CXJldCA9IHZlZF9hbGxvY19md19ibyh2ZWRfcHJpdik7CisJCWlmIChyZXQpIHsKKwkJCUlQVlJf RVJST1IoIlZFRDogdmVkX2FsbG9jX2Z3X2JvIGZhaWxlZDogJWQuXG4iLCByZXQpOworCQkJcmV0 dXJuIHJldDsKKwkJfQorCX0KKwkvKiBtb3ZlIGZ3IGxvYWRpbmcgdG8gdGhlIHBsYWNlIHJlY2Vp dmluZyBmaXJzdCBjbWQgYnVmZmVyICovCisJdmVkX3ByaXYtPnZlZF9md19sb2FkZWQgPSBmYWxz ZTsgLyogbmVlZCB0byBsb2FkIGZpcndhcmUgKi8KKwkvKiBpdCBzaG91bGQgYmUgc2V0IGF0IHB1 bml0IHBvc3QgYm9vdCBpbml0IHBoYXNlICovCisJSVBWUl9SRUdfV1JJVEUzMig4MjAsIEZFX01T VkRYX1dEVF9DT01QQVJFTUFUQ0hfT0ZGU0VUKTsKKwlJUFZSX1JFR19XUklURTMyKDgyMDAsIEJF X01TVkRYX1dEVF9DT01QQVJFTUFUQ0hfT0ZGU0VUKTsKKworCUlQVlJfUkVHX1dSSVRFMzIoODIw LCBGRV9NU1ZEWF9XRFRfQ09NUEFSRU1BVENIX09GRlNFVCk7CisJSVBWUl9SRUdfV1JJVEUzMig4 MjAwLCBCRV9NU1ZEWF9XRFRfQ09NUEFSRU1BVENIX09GRlNFVCk7CisKKwl2ZWRfY2xlYXJfaXJx KHZlZF9wcml2KTsKKwl2ZWRfZW5hYmxlX2lycSh2ZWRfcHJpdik7CisKKwljbWQgPSAwOworCWNt ZCA9IElQVlJfUkVHX1JFQUQzMihWRUNfU0hJRlRSRUdfQ09OVFJPTF9PRkZTRVQpOworCVJFR0lP X1dSSVRFX0ZJRUxEKGNtZCwgVkVDX1NISUZUUkVHX0NPTlRST0wsCisJICBTUl9NQVNURVJfU0VM RUNULCAxKTsgIC8qIEhvc3QgKi8KKwlJUFZSX1JFR19XUklURTMyKGNtZCwgVkVDX1NISUZUUkVH X0NPTlRST0xfT0ZGU0VUKTsKKworCXJldHVybiAwOworfQorCitpbnQgX19tdXN0X2NoZWNrIHZl ZF9jb3JlX2luaXQoc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2KQoreworCWludCBy ZXQ7CisJc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdjsKKwlpZiAoIWRldl9wcml2LT52ZWRf cHJpdmF0ZSkgeworCQl2ZWRfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2ZWRfcHJpdmF0 ZSksIEdGUF9LRVJORUwpOworCQlpZiAoIXZlZF9wcml2KSB7CisJCQlJUFZSX0VSUk9SKCJWRUQ6 IGFsbG9jIHZlZF9wcml2YXRlIGZhaWxlZC5cbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0K KworCQlkZXZfcHJpdi0+dmVkX3ByaXZhdGUgPSB2ZWRfcHJpdjsKKwkJdmVkX3ByaXYtPmRldl9w cml2ID0gZGV2X3ByaXY7CisKKwkJLyogSW5pdGlhbGl6ZSBjb21hbmQgdmVkIHF1ZXVlaW5nICov CisJCUlOSVRfTElTVF9IRUFEKCZ2ZWRfcHJpdi0+dmVkX3F1ZXVlKTsKKwkJbXV0ZXhfaW5pdCgm dmVkX3ByaXYtPnZlZF9tdXRleCk7CisJCXNwaW5fbG9ja19pbml0KCZ2ZWRfcHJpdi0+dmVkX2xv Y2spOworCQl2ZWRfcHJpdi0+bW11X3JlY292ZXJfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0RNQTMy KTsKKwkJaWYgKCF2ZWRfcHJpdi0+bW11X3JlY292ZXJfcGFnZSkgeworCQkJcmV0ID0gLUVOT01F TTsKKwkJCUlQVlJfRVJST1IoIlZFRDogYWxsb2MgbW11X3JlY292ZXJfcGFnZSBmYWlsZWQ6ICVk LlxuIiwgcmV0KTsKKwkJCWdvdG8gZXJyX2ZyZWVfdmVkX3ByaXY7CisJCX0KKwkJSVBWUl9ERUJV R19JTklUKCJWRUQ6IHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCB2ZWRfcHJpdmF0ZS5cbiIpOwor CQlkZXZfcHJpdi0+dmVkX3ByaXZhdGU9IHZlZF9wcml2OworCX0KKwl2ZWRfcHJpdiA9IGRldl9w cml2LT52ZWRfcHJpdmF0ZTsKKworCXJldCA9IHZlZF9hbGxvY19jY2JfZm9yX3JlbmRlYyhkZXZf cHJpdi0+dmVkX3ByaXZhdGUsCisJCQlSRU5ERUNfQV9TSVpFLCBSRU5ERUNfQl9TSVpFKTsKKwlp ZiAodW5saWtlbHkocmV0KSkgeworCQlJUFZSX0VSUk9SKCJWRUQ6IG1zdmR4X2FsbG9jX2NjYl9m b3JfcmVuZGVjIGZhaWxlZDogJWQuXG4iLCByZXQpOworCQlnb3RvIGVycl9mcmVlX21tdV9yZWNv dmVyX3BhZ2U7CisJfQorCisJcmV0ID0gdmVkX3Bvc3RfaW5pdCh2ZWRfcHJpdik7CisJaWYgKHVu bGlrZWx5KHJldCkpIHsKKwkJSVBWUl9FUlJPUigiVkVEOiB2ZWRfcG9zdF9pbml0IGZhaWxlZDog JWQuXG4iLCByZXQpOworCQlnb3RvIGVycl9mcmVlX2NjYjsKKwl9CisKKwlyZXR1cm4gMDsKK2Vy cl9mcmVlX2NjYjoKKwl2ZWRfZnJlZV9jY2IodmVkX3ByaXYpOworZXJyX2ZyZWVfbW11X3JlY292 ZXJfcGFnZToKKwlfX2ZyZWVfcGFnZSh2ZWRfcHJpdi0+bW11X3JlY292ZXJfcGFnZSk7CitlcnJf ZnJlZV92ZWRfcHJpdjoKKwlrZnJlZSh2ZWRfcHJpdik7CisJZGV2X3ByaXYtPnZlZF9wcml2YXRl ID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdmVkX2NvcmVfZGVpbml0KHN0cnVjdCBk cm1faXB2cl9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9w cml2ID0gZGV2X3ByaXYtPnZlZF9wcml2YXRlOworCWlmIChOVUxMID09IHZlZF9wcml2KSB7CisJ CUlQVlJfRVJST1IoIlZFRDogdmVkX3ByaXYgaXMgTlVMTCFcbiIpOworCQlyZXR1cm4gLTE7CisJ fQorCisJSVBWUl9ERUJVR19JTklUKCJWRUQ6IHNldCB0aGUgVkVEIGNsb2NrIHRvIDAuXG4iKTsK Kwl2ZWRfc2V0X2Nsb2Nrcyh2ZWRfcHJpdiwgMCk7CisKKwlpZiAodmVkX3ByaXYtPmNjYjAgfHwg dmVkX3ByaXYtPmNjYjEpCisJCXZlZF9mcmVlX2NjYih2ZWRfcHJpdik7CisKKwlpZiAodmVkX3By aXYtPmZ3X2JvKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKCZ2ZWRf cHJpdi0+ZndfYm8tPmJhc2UpOworCQl2ZWRfcHJpdi0+ZndfYm8gPSBOVUxMOworCX0KKworCWlm ICh2ZWRfcHJpdi0+dmVkX2Z3X3B0cikKKwkJa2ZyZWUodmVkX3ByaXYtPnZlZF9md19wdHIpOwor CisJaWYgKHZlZF9wcml2LT5tbXVfcmVjb3Zlcl9wYWdlKQorCQlfX2ZyZWVfcGFnZSh2ZWRfcHJp di0+bW11X3JlY292ZXJfcGFnZSk7CisKKwlrZnJlZSh2ZWRfcHJpdik7CisJZGV2X3ByaXYtPnZl ZF9wcml2YXRlID0gTlVMTDsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2lwdnIvdmVkX2Z3LmggYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfZncuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2VkNDY2Ci0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX2Z3LmgKQEAgLTAsMCArMSw4MSBAQAorLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCisgKiB2ZWRfZncuaDogVkVEIGZpcm13YXJlIHN1cHBvcnQgaGVhZGVyIGZp bGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24sIEhpbGxzYm9y bywgT1IsIFVTQQorICogQ29weXJpZ2h0IChjKSBJbWFnaW5hdGlvbiBUZWNobm9sb2dpZXMgTGlt aXRlZCwgVUsKKyAqIENvcHlyaWdodCAoYykgMjAwMyBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwg Q2VkYXIgUGFyaywgVGV4YXMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFC SUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlm dGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczoKKyAq ICAgIEZlaSBKaWFuZyA8ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqICAgIFlhbyBDaGVuZyA8eWFv LmNoZW5nQGludGVsLmNvbT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBf VkVEX0ZXX0hfCisjZGVmaW5lIF9WRURfRldfSF8KKworI2luY2x1ZGUgImlwdnJfZHJ2LmgiCisK KyNkZWZpbmUgRklSTVdBUkVJRAkJMHgwMTRkNDJhYgorCisvKiAgTm9uLU9wdGltYWwgSW52YWxp ZGF0aW9uIGlzIG5vdCBkZWZhdWx0ICovCisjZGVmaW5lIE1TVkRYX0RFVklDRV9OT0RFX0ZMQUdT X01NVV9OT05PUFRfSU5WCTIKKworI2RlZmluZSBGV19WQV9SRU5ERVJfSE9TVF9JTlQJCTB4MDAw MDQwMDAKKyNkZWZpbmUgTVNWRFhfREVWSUNFX05PREVfRkxBR1NfTU1VX0hXX0lOVkFMSURBVElP TgkweDAwMDAwMDIwCisjZGVmaW5lIEZXX0RFVkFfRVJST1JfREVURUNURUQgMHgwODAwMDAwMAor CisvKiBUaGVyZSBpcyBubyB3b3JrIGN1cnJlbnRseSB1bmRlcndheSBvbiB0aGUgaGFyZHdhcmUg Ki8KKyNkZWZpbmUgTVNWRFhfRldfU1RBVFVTX0hXX0lETEUJMHgwMDAwMDAwMQorI2RlZmluZSBN U1ZEWF9ERVZJQ0VfTk9ERV9GTEFHX0JSTjIzMTU0X0JMT0NLX09OX0ZFCTB4MDAwMDAyMDAKKyNk ZWZpbmUgTVNWRFhfREVWSUNFX05PREVfRkxBR1NfREVGQVVMVF9EMAkJCQlcCisJKE1TVkRYX0RF VklDRV9OT0RFX0ZMQUdTX01NVV9OT05PUFRfSU5WIHwJCQlcCisJCU1TVkRYX0RFVklDRV9OT0RF X0ZMQUdTX01NVV9IV19JTlZBTElEQVRJT04gfAkJXAorCQlNU1ZEWF9ERVZJQ0VfTk9ERV9GTEFH X0JSTjIzMTU0X0JMT0NLX09OX0ZFKQorCisjZGVmaW5lIE1TVkRYX0RFVklDRV9OT0RFX0ZMQUdT X0RFRkFVTFRfRDEJCQkJXAorCShNU1ZEWF9ERVZJQ0VfTk9ERV9GTEFHU19NTVVfSFdfSU5WQUxJ REFUSU9OIHwJCQlcCisJCU1TVkRYX0RFVklDRV9OT0RFX0ZMQUdfQlJOMjMxNTRfQkxPQ0tfT05f RkUpCisKKyNkZWZpbmUgTVRYX0NPREVfQkFTRQkJKDB4ODA5MDAwMDApCisjZGVmaW5lIE1UWF9E QVRBX0JBU0UJCSgweDgyODgwMDAwKQorI2RlZmluZSBQQ19TVEFSVF9BRERSRVNTCSgweDgwOTAw MDAwKQorCisjZGVmaW5lIE1UWF9DT1JFX0NPREVfTUVNCSgweDEwKQorI2RlZmluZSBNVFhfQ09S RV9EQVRBX01FTQkoMHgxOCkKKworI2RlZmluZSBSRU5ERUNfQV9TSVpFCSg0ICogMTAyNCAqIDEw MjQpCisjZGVmaW5lIFJFTkRFQ19CX1NJWkUJKDEwMjQgKiAxMDI0KQorCisjZGVmaW5lIFRFUk1J TkFUSU9OX1NJWkUJNDgKKworI2RlZmluZSBNU1ZEWF9SRVNFVF9ORUVEU19SRVVQTE9BRF9GVwkJ KDB4MikKKyNkZWZpbmUgTVNWRFhfUkVTRVRfTkVFRFNfSU5JVF9GVwkJKDB4MSkKKworLyogaW5p dC9kZWluaXQgYWxsIHZlZF9wcml2YXRlIHJlbGF0ZWQgKi8KK2ludCBfX211c3RfY2hlY2sgdmVk X2NvcmVfaW5pdChzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYpOworaW50IHZlZF9j b3JlX2RlaW5pdChzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYpOworCisvKiB1c2Vk IGZvciByZXNldHRpbmcgVkVEIGFmdGVyIHBvd2VyIHNhdmluZyAqLworaW50IHZlZF9zZXR1cF9m dyhzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2KTsKK2ludCB2ZWRfY29yZV9yZXNldChzdHJ1 Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2KTsKK2ludCB2ZWRfd2FpdF9mb3JfcmVnaXN0ZXIoc3Ry dWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdiwKKwkJCXUzMiBvZmZzZXQsIHUzMiB2YWx1ZSwgdTMy IGVuYWJsZSwKKwkJCXUzMiBwb2xsX2NudCwgdTMyIHRpbWVvdXQpOworCisjZW5kaWYKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9tc2cuaCBiL2RyaXZlcnMvZ3B1L2RybS9p cHZyL3ZlZF9tc2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTFlODlk Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX21zZy5oCkBAIC0w LDAgKzEsMjU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHZlZF9tc2cuaDogVkVEIG1lc3Nh Z2UgZGVmaW5pdGlvbgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlv biwgSGlsbHNib3JvLCBPUiwgVVNBCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgSW1hZ2luYXRpb24g VGVjaG5vbG9naWVzIExpbWl0ZWQsIFVLCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisg KiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJD SEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAq CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUg dG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0 IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9y czoKKyAqICAgIEZlaSBKaWFuZyA8ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqICAgIExpIFplbmcg PGxpLnplbmdAaW50ZWwuY29tPgorICogICAgWWFvIENoZW5nIDx5YW8uY2hlbmdAaW50ZWwuY29t PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfVkVEX01TR19IXworI2RlZmlu ZSBfVkVEX01TR19IXworCisvKiBTdGFydCBvZiBwYXJzZXIgc3BlY2lmaWMgSG9zdC0+TVRYIG1l c3NhZ2VzLiAqLworI2RlZmluZQlGV1JLX01TR0lEX1NUQVJUX1BTUl9IT1NUTVRYX01TRwkoMHg4 MCkKKworLyogU3RhcnQgb2YgcGFyc2VyIHNwZWNpZmljIE1UWC0+SG9zdCBtZXNzYWdlcy4gKi8K KyNkZWZpbmUJRldSS19NU0dJRF9TVEFSVF9QU1JfTVRYSE9TVF9NU0cJKDB4QzApCisKKy8qIEhv c3QgZGVmaW5lZCBtc2csIGp1c3QgZm9yIGhvc3QgdXNlLCBNVFggbm90IHJlY2duaXplICovCisj ZGVmaW5lCUZXUktfTVNHSURfSE9TVF9FTVVMQVRFRAkJKDB4NDApCisKKy8qIFRoaXMgdHlwZSBk ZWZpbmVzIHRoZSBmcmFtZXdvcmsgc3BlY2lmaWVkIG1lc3NhZ2UgaWRzICovCitlbnVtIHsKKwkv KiAhIFNlbnQgYnkgdGhlIFZBIGRyaXZlciBvbiB0aGUgaG9zdCB0byB0aGUgbXR4IGZpcm13YXJl LgorCSAqLworCU1UWF9NU0dJRF9QQURESU5HID0gMCwKKwlNVFhfTVNHSURfSU5JVCA9IEZXUktf TVNHSURfU1RBUlRfUFNSX0hPU1RNVFhfTVNHLAorCU1UWF9NU0dJRF9ERUNPREVfRkUsCisJTVRY X01TR0lEX0RFQkxPQ0ssCisJTVRYX01TR0lEX0lOVFJBX09PTEQsCisJTVRYX01TR0lEX0RFQ09E RV9CRSwKKwlNVFhfTVNHSURfSE9TVF9CRV9PUFAsCisKKwkvKiEgU2VudCBieSB0aGUgbXR4IGZp cm13YXJlIHRvIGl0c2VsZi4KKwkgKi8KKwlNVFhfTVNHSURfUkVOREVSX01DX0lOVEVSUlVQVCwK KworCS8qIHVzZWQgdG8gZGl0aW5ndWlzaCBtcnN0IGFuZCBtZmxkICovCisJTVRYX01TR0lEX0RF QkxPQ0tfTUZMRCA9IEZXUktfTVNHSURfSE9TVF9FTVVMQVRFRCwKKwlNVFhfTVNHSURfSU5UUkFf T09MRF9NRkxELAorCU1UWF9NU0dJRF9ERUNPREVfQkVfTUZMRCwKKwlNVFhfTVNHSURfSE9TVF9C RV9PUFBfTUZMRCwKKworCS8qISBTZW50IGJ5IHRoZSBEWFZBIGZpcm13YXJlIG9uIHRoZSBNVFgg dG8gdGhlIGhvc3QuCisJICovCisJTVRYX01TR0lEX0NPTVBMRVRFRCA9IEZXUktfTVNHSURfU1RB UlRfUFNSX01UWEhPU1RfTVNHLAorCU1UWF9NU0dJRF9DT01QTEVURURfQkFUQ0gsCisJTVRYX01T R0lEX0RFQkxPQ0tfUkVRVUlSRUQsCisJTVRYX01TR0lEX1RFU1RfUkVTUE9OQ0UsCisJTVRYX01T R0lEX0FDSywKKwlNVFhfTVNHSURfRkFJTEVELAorCU1UWF9NU0dJRF9DT05USUdVSVRZX1dBUk5J TkcsCisJTVRYX01TR0lEX0hXX1BBTklDLAorfTsKKworI2RlZmluZSBNVFhfR0VOTVNHX1NJWkVf VFlQRQkJdTgKKyNkZWZpbmUgTVRYX0dFTk1TR19TSVpFX01BU0sJCSgweEZGKQorI2RlZmluZSBN VFhfR0VOTVNHX1NJWkVfU0hJRlQJCSgwKQorI2RlZmluZSBNVFhfR0VOTVNHX1NJWkVfT0ZGU0VU CQkoMHgwMDAwKQorCisjZGVmaW5lIE1UWF9HRU5NU0dfSURfVFlQRQkJdTgKKyNkZWZpbmUgTVRY X0dFTk1TR19JRF9NQVNLCQkoMHhGRikKKyNkZWZpbmUgTVRYX0dFTk1TR19JRF9TSElGVAkJKDAp CisjZGVmaW5lIE1UWF9HRU5NU0dfSURfT0ZGU0VUCQkoMHgwMDAxKQorCisjZGVmaW5lIE1UWF9H RU5NU0dfSEVBREVSX1NJWkUJCTIKKworI2RlZmluZSBNVFhfR0VOTVNHX0ZFTkNFX1RZUEUJCXUx NgorI2RlZmluZSBNVFhfR0VOTVNHX0ZFTkNFX01BU0sJCSgweEZGRkYpCisjZGVmaW5lIE1UWF9H RU5NU0dfRkVOQ0VfT0ZGU0VUCQkoMHgwMDAyKQorI2RlZmluZSBNVFhfR0VOTVNHX0ZFTkNFX1NI SUZUCQkoMCkKKworI2RlZmluZSBGV19JTlZBTElEQVRFX01NVQkJKDB4MDAxMCkKKwordW5pb24g bXNnX2hlYWRlciB7CisJc3RydWN0IHsKKwkJdTMyIG1zZ19zaXplOjg7CisJCXUzMiBtc2dfdHlw ZTo4OworCQl1MzIgbXNnX2ZlbmNlOjE2OworCX0gYml0czsKKwl1MzIgdmFsdWU7Cit9OworCitz dHJ1Y3QgZndfaW5pdF9tc2cgeworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXUzMiBtc2dfc2l6 ZTo4OworCQkJdTMyIG1zZ190eXBlOjg7CisJCQl1MzIgcmVzZXJ2ZWQ6MTY7CisJCX0gYml0czsK KwkJdTMyIHZhbHVlOworCX0gaGVhZGVyOworCXUzMiByZW5kZWNfYWRkcjA7CisJdTMyIHJlbmRl Y19hZGRyMTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1MzIgcmVuZGVjX3NpemUwOjE2Owor CQkJdTMyIHJlbmRlY19zaXplMToxNjsKKwkJfSBiaXRzOworCQl1MzIgdmFsdWU7CisJfSByZW5k ZWNfc2l6ZTsKK307CisKK3N0cnVjdCBmd19kZWNvZGVfbXNnIHsKKwl1bmlvbiB7CisJCXN0cnVj dCB7CisJCQl1MzIgbXNnX3NpemU6ODsKKwkJCXUzMiBtc2dfdHlwZTo4OworCQkJdTMyIG1zZ19m ZW5jZToxNjsKKwkJfSBiaXRzOworCQl1MzIgdmFsdWU7CisJfSBoZWFkZXI7CisJdW5pb24gewor CQlzdHJ1Y3QgeworCQkJdTMyIGZsYWdzOjE2OworCQkJdTMyIGJ1ZmZlcl9zaXplOjE2OworCQl9 IGJpdHM7CisJCXUzMiB2YWx1ZTsKKwl9IGZsYWdfc2l6ZTsKKwl1MzIgY3J0bF9hbGxvY19hZGRy OworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXUzMiBjb250ZXh0Ojg7CisJCQl1MzIgbW11X3B0 ZDoyNDsKKwkJfSBiaXRzOworCQl1MzIgdmFsdWU7CisJfSBtbXVfY29udGV4dDsKKwl1MzIgb3Bl cmF0aW5nX21vZGU7Cit9OworCitzdHJ1Y3QgZndfZGVibG9ja19tc2cgeworCXVuaW9uIHsKKwkJ c3RydWN0IHsKKwkJCXUzMiBtc2dfc2l6ZTo4OworCQkJdTMyIG1zZ190eXBlOjg7CisJCQl1MzIg bXNnX2ZlbmNlOjE2OworCQl9IGJpdHM7CisJCXUzMiB2YWx1ZTsKKwl9IGhlYWRlcjsKKwl1bmlv biB7CisJCXN0cnVjdCB7CisJCQl1MzIgZmxhZ3M6MTY7CisJCQl1MzIgc2xpY2VfZmllbGRfdHlw ZToyOworCQkJdTMyIHJlc2VydmVkOjE0OworCQl9IGJpdHM7CisJCXUzMiB2YWx1ZTsKKwl9IGZs YWdfdHlwZTsKKwl1MzIgb3BlcmF0aW5nX21vZGU7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJ dTMyIGNvbnRleHQ6ODsKKwkJCXUzMiBtbXVfcHRkOjI0OworCQl9IGJpdHM7CisJCXUzMiB2YWx1 ZTsKKwl9IG1tdV9jb250ZXh0OworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXUzMiBmcmFtZV9o ZWlnaHRfbWI6MTY7CisJCQl1MzIgcGljX3dpZHRoX21iOjE2OworCQl9IGJpdHM7CisJCXUzMiB2 YWx1ZTsKKwl9IHBpY19zaXplOworCXUzMiBhZGRyZXNzX2EwOworCXUzMiBhZGRyZXNzX2ExOwor CXUzMiBtYl9wYXJhbV9hZGRyZXNzOworCXUzMiBleHRfc3RyaWRlX2E7CisJdTMyIGFkZHJlc3Nf YjA7CisJdTMyIGFkZHJlc3NfYjE7CisJdTMyIGFsdF9vdXRwdXRfZmxhZ3NfYjsKKwkvKiBhZGRp dGlvbmFsIG1zZyBvdXRzaWRlIG9mIElNRyBtc2cgKi8KKwl1MzIgYWRkcmVzc19jMDsKKwl1MzIg YWRkcmVzc19jMTsKK307CisKKyNkZWZpbmUgTVRYX1BBRE1TR19TSVpFIDIKK3N0cnVjdCBmd19w YWRkaW5nX21zZyB7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTMyIG1zZ19zaXplOjg7CisJ CQl1MzIgbXNnX3R5cGU6ODsKKwkJfSBiaXRzOworCQl1MTYgdmFsdWU7CisJfSBoZWFkZXI7Cit9 OworCitzdHJ1Y3QgZndfbXNnX2hlYWRlciB7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTMy IG1zZ19zaXplOjg7CisJCQl1MzIgbXNnX3R5cGU6ODsKKwkJCXUzMiBtc2dfZmVuY2U6MTY7CisJ CX0gYml0czsKKwkJdTMyIHZhbHVlOworCX0gaGVhZGVyOworfTsKKworc3RydWN0IGZ3X2NvbXBs ZXRlZF9tc2cgeworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXUzMiBtc2dfc2l6ZTo4OworCQkJ dTMyIG1zZ190eXBlOjg7CisJCQl1MzIgbXNnX2ZlbmNlOjE2OworCQl9IGJpdHM7CisJCXUzMiB2 YWx1ZTsKKwl9IGhlYWRlcjsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1MzIgc3RhcnRfbWI6 MTY7CisJCQl1MzIgbGFzdF9tYjoxNjsKKwkJfSBiaXRzOworCQl1MzIgdmFsdWU7CisJfSBtYjsK Kwl1MzIgZmxhZ3M7CisJdTMyIHZkZWJjcjsKK307CisKK3N0cnVjdCBmd19wYW5pY19tc2cgewor CXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXUzMiBtc2dfc2l6ZTo4OworCQkJdTMyIG1zZ190eXBl Ojg7CisJCQl1MzIgbXNnX2ZlbmNlOjE2OworCQl9IGJpdHM7CisJCXUzMiB2YWx1ZTsKKwl9IGhl YWRlcjsKKwl1MzIgZmVfc3RhdHVzOworCXUzMiBiZV9zdGF0dXM7CisJdW5pb24geworCQlzdHJ1 Y3QgeworCQkJdTMyIGxhc3RfbWI6MTY7CisJCQl1MzIgcmVzZXJ2ZWQyOjE2OworCQl9IGJpdHM7 CisJCXUzMiB2YWx1ZTsKKwl9IG1iOworfTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pcHZyL3ZlZF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX3BtLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQwMmY1NgotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9wbS5jCkBAIC0wLDAgKzEsMzMyIEBACisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKKyAqIHZlZF9wbS5jOiBWRUQgcG93ZXIgbWFuYWdlbWVudCBzdXBw b3J0CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uLCBIaWxsc2Jv cm8sIE9SLCBVU0EKKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkg aXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBv cgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKiBBdXRob3JzOgorICogICAgWWFv IENoZW5nIDx5YW8uY2hlbmdAaW50ZWwuY29tPgorICoKKyAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwor CisjaW5jbHVkZSAiaXB2cl90cmFjZS5oIgorI2luY2x1ZGUgInZlZF9wbS5oIgorI2luY2x1ZGUg InZlZF9yZWcuaCIKKyNpbmNsdWRlICJ2ZWRfY21kLmgiCisjaW5jbHVkZSAidmVkX2Z3LmgiCisj aWZkZWYgQ09ORklHX0lOVEVMX1NPQ19QTUMKKyNpbmNsdWRlIDxsaW51eC9pbnRlbF9taWRfcG0u aD4KKyNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bt X3J1bnRpbWUuaD4KKworZXh0ZXJuIGludCBkcm1faXB2cl9mcmVxOworCisjZGVmaW5lIFBDSV9S T09UX01TR0JVU19DVFJMX1JFRyAgICAgIDB4RDAKKyNkZWZpbmUgUENJX1JPT1RfTVNHQlVTX0RB VEFfUkVHICAgICAgMHhENAorI2RlZmluZSBQQ0lfUk9PVF9NU0dCVVNfQ1RSTF9FWFRfUkVHICAw eEQ4CisjZGVmaW5lIFBDSV9ST09UX01TR0JVU19SRUFEICAgICAgICAgIDB4MTAKKyNkZWZpbmUg UENJX1JPT1RfTVNHQlVTX1dSSVRFICAgICAgICAgMHgxMQorI2RlZmluZSBQQ0lfUk9PVF9NU0dC VVNfRFdPUkRfRU5BQkxFICAweGYwCisKKy8qIFZFRCBwb3dlciBzdGF0ZSBzZXQvZ2V0ICovCisj ZGVmaW5lIFBVTklUX1BPUlQJCQkweDA0CisjZGVmaW5lIFZFRFNTUE0wIAkJCTB4MzIKKyNkZWZp bmUgVkVEU1NQTTEgCQkJMHgzMworI2RlZmluZSBWRURTU0MJCQkJMHgxCisKKy8qIFZFRCBmcmVx dWVuY3kgc2V0L2dldCAqLworI2RlZmluZSBJUF9GUkVRX1ZBTElEICAgICAweDgwICAgICAvKiBG cmVxIGlzIHZhbGlkIGJpdCAqLworCisjZGVmaW5lIElQX0ZSRVFfU0laRSAgICAgICAgIDUgICAg IC8qIG51bWJlciBvZiBiaXRzIGluIGZyZXEgZmllbGRzICovCisjZGVmaW5lIElQX0ZSRVFfTUFT SyAgICAgIDB4MWYgICAgIC8qIEJpdCBtYXNrIGZvciBmcmVxIGZpZWxkICovCisKKy8qICBQb3Np dGlvbnMgb2YgdmFyaW91cyBmcmVxdWVuY3kgZmllbGRzICovCisjZGVmaW5lIElQX0ZSRVFfUE9T ICAgICAgICAgIDAgICAgIC8qIEZyZXEgY29udHJvbCBbNDowXSAqLworI2RlZmluZSBJUF9GUkVR X0dVQVJfUE9TICAgICA4ICAgICAvKiBGcmVxIGd1YXIgICBbMTI6OF0gKi8KKyNkZWZpbmUgSVBf RlJFUV9TVEFUX1BPUyAgICAyNCAgICAgLyogRnJlcSBzdGF0dXMgWzI4OjI0XSAqLworCitlbnVt IEFQTV9WRURfU1RBVFVTIHsKKwlWRURfQVBNX1NUU19EMCA9IDAsCisJVkVEX0FQTV9TVFNfRDEs CisJVkVEX0FQTV9TVFNfRDIsCisJVkVEX0FQTV9TVFNfRDMKK307CisKKyNkZWZpbmUgR0VUX0ZS RVFfTlVNQkVSKGZyZXFfY29kZSkJKCgxNjAwICogMikvKChmcmVxX2NvZGUpICsgMSkpCisvKiB2 YWxpZCBmcmVxIGNvZGU6IDB4OSwgMHhiLCAweGQsIDB4ZiwgMHgxMSwgMHgxMyAqLworI2RlZmlu ZSBGUkVRX0NPREVfQ0xBTVAoY29kZSkgKChjb2RlIDwgMHg5KT8gMHg5OiAoKGNvZGUgPiAweDEz KT8gMHgxMzogY29kZSkpCisjZGVmaW5lIEdFVF9GUkVRX0NPREUoZnJlcV9udW0pCUZSRVFfQ09E RV9DTEFNUCgoKCgxNjAwICogMi9mcmVxX251bSArIDEpID4+IDEpIDw8IDEpIC0gMSkKKworI2lm ZGVmIENPTkZJR19JTlRFTF9TT0NfUE1DCitleHRlcm4gaW50IHBtY19uY19zZXRfcG93ZXJfc3Rh dGUoaW50IGlzbGFuZHMsIGludCBzdGF0ZV90eXBlLCBpbnQgcmVnKTsKK2V4dGVybiBpbnQgcG1j X25jX2dldF9wb3dlcl9zdGF0ZShpbnQgaXNsYW5kcywgaW50IHJlZyk7CisjZW5kaWYKKworc3Rh dGljIGludCB2ZWRfc2F2ZV9jb250ZXh0KHN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYpCit7 CisJaW50IG9mZnNldDsKKwlpbnQgcmV0OworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZf cHJpdiA9IHZlZF9wcml2LT5kZXZfcHJpdjsKKworCXZlZF9wcml2LT52ZWRfbmVlZHNfcmVzZXQg PSAxOworCS8qIFJlc2V0IE1UWCAqLworCUlQVlJfUkVHX1dSSVRFMzIoTVRYX1NPRlRfUkVTRVRf TVRYUkVTRVQsIE1UWF9TT0ZUX1JFU0VUX09GRlNFVCk7CisKKwkvKiB3aHkgbmVlZCByZXNldCBt c3ZkeCBiZWZvcmUgcG93ZXIgb2ZmIGl0LCBuZWVkIGNoZWNrIElNRyAqLworCXJldCA9IHZlZF9j b3JlX3Jlc2V0KHZlZF9wcml2KTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJSVBWUl9ERUJVR19X QVJOKCJmYWlsZWQgdG8gY2FsbCB2ZWRfY29yZV9yZXNldDogJWRcbiIsIHJldCk7CisKKwkvKiBJ bml0aWFsaXplIFZFQyBMb2NhbCBSQU0gKi8KKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IFZF Q19MT0NBTF9NRU1fQllURV9TSVpFIC8gNDsgKytvZmZzZXQpCisJCUlQVlJfUkVHX1dSSVRFMzIo MCwgVkVDX0xPQ0FMX01FTV9PRkZTRVQgKyBvZmZzZXQgKiA0KTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgdTMyIGlwdnJfbXNnYnVzX3JlYWQzMihzdHJ1Y3QgcGNpX2RldiAqcGNpX3Jvb3Qs IHU4IHBvcnQsIHUzMiBhZGRyKQoreworICAgIHUzMiBkYXRhOworICAgIHUzMiBjbWQ7CisgICAg dTMyIGNtZGV4dDsKKworICAgIGNtZCA9IChQQ0lfUk9PVF9NU0dCVVNfUkVBRCA8PCAyNCkgfCAo cG9ydCA8PCAxNikgfAorICAgICAgICAoKGFkZHIgJiAweGZmKSA8PCA4KSB8IFBDSV9ST09UX01T R0JVU19EV09SRF9FTkFCTEU7CisgICAgY21kZXh0ID0gYWRkciAmIDB4ZmZmZmZmMDA7CisKKyAg ICBpZiAoY21kZXh0KSB7CisgICAgICAgIC8qIFRoaXMgcmVzZXRzIHRvIDAgYXV0b21hdGljYWxs eSwgbm8gbmVlZCB0byB3cml0ZSAwICovCisgICAgICAgIHBjaV93cml0ZV9jb25maWdfZHdvcmQo cGNpX3Jvb3QsIFBDSV9ST09UX01TR0JVU19DVFJMX0VYVF9SRUcsCisgICAgICAgICAgICAgICAg ICAgIGNtZGV4dCk7CisgICAgfQorCisgICAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwY2lfcm9v dCwgUENJX1JPT1RfTVNHQlVTX0NUUkxfUkVHLCBjbWQpOworICAgIHBjaV9yZWFkX2NvbmZpZ19k d29yZChwY2lfcm9vdCwgUENJX1JPT1RfTVNHQlVTX0RBVEFfUkVHLCAmZGF0YSk7CisKKyAgICBy ZXR1cm4gZGF0YTsKK30KKworc3RhdGljIHZvaWQgaXB2cl9tc2didXNfd3JpdGUzMihzdHJ1Y3Qg cGNpX2RldiAqcGNpX3Jvb3QsIHU4IHBvcnQsIHUzMiBhZGRyLCB1MzIgZGF0YSkKK3sKKyAgICB1 MzIgY21kOworICAgIHUzMiBjbWRleHQ7CisKKyAgICBjbWQgPSAoUENJX1JPT1RfTVNHQlVTX1dS SVRFIDw8IDI0KSB8IChwb3J0IDw8IDE2KSB8CisgICAgICAgICgoYWRkciAmIDB4RkYpIDw8IDgp IHwgUENJX1JPT1RfTVNHQlVTX0RXT1JEX0VOQUJMRTsKKyAgICBjbWRleHQgPSBhZGRyICYgMHhm ZmZmZmYwMDsKKworICAgIHBjaV93cml0ZV9jb25maWdfZHdvcmQocGNpX3Jvb3QsIFBDSV9ST09U X01TR0JVU19EQVRBX1JFRywgZGF0YSk7CisKKyAgICBpZiAoY21kZXh0KSB7CisgICAgICAgIC8q IFRoaXMgcmVzZXRzIHRvIDAgYXV0b21hdGljYWxseSwgbm8gbmVlZCB0byB3cml0ZSAwICovCisg ICAgICAgIHBjaV93cml0ZV9jb25maWdfZHdvcmQocGNpX3Jvb3QsIFBDSV9ST09UX01TR0JVU19D VFJMX0VYVF9SRUcsCisgICAgICAgICAgICBjbWRleHQpOworICAgIH0KKworICAgIHBjaV93cml0 ZV9jb25maWdfZHdvcmQocGNpX3Jvb3QsIFBDSV9ST09UX01TR0JVU19DVFJMX1JFRywgY21kKTsK K30KKworc3RhdGljIGludCBpcHZyX3BtX2NtZF9mcmVxX3dhaXQoc3RydWN0IHBjaV9kZXYgKnBj aV9yb290LCB1MzIgcmVnX2ZyZXEsIHUzMiAqZnJlcV9jb2RlX3JsemQpCit7CisJaW50IHRjb3Vu dDsKKwl1MzIgZnJlcV92YWw7CisKKwlmb3IgKHRjb3VudCA9IDA7IDsgdGNvdW50KyspIHsKKwkJ ZnJlcV92YWwgPSBpcHZyX21zZ2J1c19yZWFkMzIocGNpX3Jvb3QsIFBVTklUX1BPUlQsIHJlZ19m cmVxKTsKKwkJaWYgKChmcmVxX3ZhbCAmIElQX0ZSRVFfVkFMSUQpID09IDApCisJCQlicmVhazsK KwkJaWYgKHRjb3VudCA+IDUwMCkgeworCQkJSVBWUl9FUlJPUigiUC1Vbml0IGZyZXEgcmVxdWVz dCB3YWl0IHRpbWVvdXQgJXgiLAorCQkJCWZyZXFfdmFsKTsKKwkJCXJldHVybiAtRUJVU1k7CisJ CX0KKwkJdWRlbGF5KDEpOworCX0KKworCWlmIChmcmVxX2NvZGVfcmx6ZCkgeworCQkqZnJlcV9j b2RlX3JsemQgPSAoKGZyZXFfdmFsID4+IElQX0ZSRVFfU1RBVF9QT1MpICYKKwkJCUlQX0ZSRVFf TUFTSyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXB2cl9wbV9jbWRfZnJl cV9nZXQoc3RydWN0IHBjaV9kZXYgKnBjaV9yb290LCB1MzIgcmVnX2ZyZXEpCit7CisJdTMyIGZy ZXFfdmFsOworCWludCBmcmVxX2NvZGUgPSAwOworCisJaXB2cl9wbV9jbWRfZnJlcV93YWl0KHBj aV9yb290LCByZWdfZnJlcSwgTlVMTCk7CisKKwlmcmVxX3ZhbCA9IGlwdnJfbXNnYnVzX3JlYWQz MihwY2lfcm9vdCwgUFVOSVRfUE9SVCwgcmVnX2ZyZXEpOworCWZyZXFfY29kZSA9KGludCkoKGZy ZXFfdmFsPj5JUF9GUkVRX1NUQVRfUE9TKSAmIH5JUF9GUkVRX1ZBTElEKTsKKwlyZXR1cm4gZnJl cV9jb2RlOworfQorCitzdGF0aWMgaW50IGlwdnJfcG1fY21kX2ZyZXFfc2V0KHN0cnVjdCBwY2lf ZGV2ICpwY2lfcm9vdCwgdTMyIHJlZ19mcmVxLCB1MzIgZnJlcV9jb2RlLCB1MzIgKnBfZnJlcV9j b2RlX3JsemQpCit7CisJdTMyIGZyZXFfdmFsOworCXUzMiBmcmVxX2NvZGVfcmVhbGl6ZWQ7CisJ aW50IHJ2YTsKKworCXJ2YSA9IGlwdnJfcG1fY21kX2ZyZXFfd2FpdChwY2lfcm9vdCwgcmVnX2Zy ZXEsIE5VTEwpOworCWlmIChydmEgPCAwKSB7CisJCUlQVlJfRVJST1IoInBtX2NtZF9mcmVxX3dh aXQgMSBmYWlsZWQ6ICVkXG4iLCBydmEpOworCQlyZXR1cm4gcnZhOworCX0KKworCWZyZXFfdmFs ID0gSVBfRlJFUV9WQUxJRCB8IGZyZXFfY29kZTsKKwlpcHZyX21zZ2J1c193cml0ZTMyKHBjaV9y b290LCBQVU5JVF9QT1JULCByZWdfZnJlcSwgZnJlcV92YWwpOworCisJcnZhID0gaXB2cl9wbV9j bWRfZnJlcV93YWl0KHBjaV9yb290LCByZWdfZnJlcSwgJmZyZXFfY29kZV9yZWFsaXplZCk7CisJ aWYgKHJ2YSA8IDApIHsKKwkJSVBWUl9FUlJPUigicG1fY21kX2ZyZXFfd2FpdCAyIGZhaWxlZDog JWRcbiIsIHJ2YSk7CisJCXJldHVybiBydmE7CisJfQorCisJaWYgKHBfZnJlcV9jb2RlX3JsemQp CisJCSpwX2ZyZXFfY29kZV9ybHpkID0gZnJlcV9jb2RlX3JlYWxpemVkOworCisJcmV0dXJuIHJ2 YTsKK30KKworc3RhdGljIGludCB2ZWRfc2V0X2ZyZXEoc3RydWN0IGRybV9pcHZyX3ByaXZhdGUg KmRldl9wcml2LCB1MzIgZnJlcV9jb2RlKQoreworCXUzMiBmcmVxX2NvZGVfcmx6ZCA9IDA7CisJ aW50IHJldDsKKworCXJldCA9IGlwdnJfcG1fY21kX2ZyZXFfc2V0KGRldl9wcml2LT5wY2lfcm9v dCwKKwkJVkVEU1NQTTEsIGZyZXFfY29kZSwgJmZyZXFfY29kZV9ybHpkKTsKKwlpZiAocmV0IDwg MCkgeworCQlJUFZSX0VSUk9SKCJmYWlsZWQgdG8gc2V0IGZyZXFlbmN5LCBjdXJyZW50IGlzICV4 XG4iLAorCQkJZnJlcV9jb2RlX3JsemQpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyBpbnQgdmVkX2dldF9mcmVxKHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdikKK3sK KwlyZXR1cm4gaXB2cl9wbV9jbWRfZnJlcV9nZXQoZGV2X3ByaXYtPnBjaV9yb290LCBWRURTU1BN MSk7Cit9CisKKyNpZmRlZiBDT05GSUdfSU5URUxfU09DX1BNQworc3RhdGljIGlubGluZSBib29s IGRvX3Bvd2VyX29uKHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlpZiAo cG1jX25jX3NldF9wb3dlcl9zdGF0ZShWRURTU0MsIDAsIFZFRFNTUE0wKSkgeworCQlJUFZSX0VS Uk9SKCJWRUQ6IHBtdV9uY19zZXRfcG93ZXJfc3RhdGUgT04gZmFpbCFcbiIpOworCQlyZXR1cm4g ZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQorc3RhdGljIGlubGluZSBib29sIGRvX3Bvd2Vy X29mZihzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaWYgKHBtY19uY19z ZXRfcG93ZXJfc3RhdGUoVkVEU1NDLCAxLCBWRURTU1BNMCkpIHsKKwkJSVBWUl9FUlJPUigiVkVE OiBwbXVfbmNfc2V0X3Bvd2VyX3N0YXRlIE9GRiBmYWlsIVxuIik7CisJCXJldHVybiBmYWxzZTsK Kwl9CisJcmV0dXJuIHRydWU7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBib29sIGRvX3Bvd2Vy X29uKHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdikKK3sKKwl1MzIgcHdyX3N0czsK KwlkbyB7CisJCWlwdnJfbXNnYnVzX3dyaXRlMzIoZGV2X3ByaXYtPnBjaV9yb290LCBQVU5JVF9Q T1JULCBWRURTU1BNMCwgVkVEX0FQTV9TVFNfRDApOworCQl1ZGVsYXkoMTApOworCQlwd3Jfc3Rz ID0gaXB2cl9tc2didXNfcmVhZDMyKGRldl9wcml2LT5wY2lfcm9vdCwgUFVOSVRfUE9SVCwgVkVE U1NQTTApOworCX0gd2hpbGUgKHB3cl9zdHMgIT0gMHgwKTsKKwlkbyB7CisJCWlwdnJfbXNnYnVz X3dyaXRlMzIoZGV2X3ByaXYtPnBjaV9yb290LCBQVU5JVF9QT1JULCBWRURTU1BNMCwgVkVEX0FQ TV9TVFNfRDMpOworCQl1ZGVsYXkoMTApOworCQlwd3Jfc3RzID0gaXB2cl9tc2didXNfcmVhZDMy KGRldl9wcml2LT5wY2lfcm9vdCwgUFVOSVRfUE9SVCwgVkVEU1NQTTApOworCX0gd2hpbGUgKHB3 cl9zdHMgIT0gMHgwMzAwMDAwMyk7CisJZG8geworCQlpcHZyX21zZ2J1c193cml0ZTMyKGRldl9w cml2LT5wY2lfcm9vdCwgUFVOSVRfUE9SVCwgVkVEU1NQTTAsIFZFRF9BUE1fU1RTX0QwKTsKKwkJ dWRlbGF5KDEwKTsKKwkJcHdyX3N0cyA9IGlwdnJfbXNnYnVzX3JlYWQzMihkZXZfcHJpdi0+cGNp X3Jvb3QsIFBVTklUX1BPUlQsIFZFRFNTUE0wKTsKKwl9IHdoaWxlIChwd3Jfc3RzICE9IDB4MCk7 CisJcmV0dXJuIHRydWU7Cit9CitzdGF0aWMgaW5saW5lIGJvb2wgZG9fcG93ZXJfb2ZmKHN0cnVj dCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdikKK3sKKwl1MzIgcHdyX3N0czsKKwlkbyB7CisJ CWlwdnJfbXNnYnVzX3dyaXRlMzIoZGV2X3ByaXYtPnBjaV9yb290LCBQVU5JVF9QT1JULCBWRURT U1BNMCwgVkVEX0FQTV9TVFNfRDMpOworCQl1ZGVsYXkoMTApOworCQlwd3Jfc3RzID0gaXB2cl9t c2didXNfcmVhZDMyKGRldl9wcml2LT5wY2lfcm9vdCwgUFVOSVRfUE9SVCwgVkVEU1NQTTApOwor CX0gd2hpbGUgKHB3cl9zdHMgIT0gMHgwMzAwMDAwMyk7CisJcmV0dXJuIHRydWU7Cit9CisjZW5k aWYKKworYm9vbCB2ZWRfcG93ZXJfb24oc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2 KQoreworCWludCB2ZWRfZnJlcV9jb2RlX2JlZm9yZSwgdmVkX2ZyZXFfY29kZV9yZXF1ZXN0ZWQs IHZlZF9mcmVxX2NvZGVfYWZ0ZXI7CisJSVBWUl9ERUJVR19QTSgiVkVEOiBwb3dlciBvbiBtc3Zk eC5cbiIpOworCisJaWYgKCFkb19wb3dlcl9vbihkZXZfcHJpdikpCisJCXJldHVybiBmYWxzZTsK KworCXZlZF9mcmVxX2NvZGVfYmVmb3JlID0gdmVkX2dldF9mcmVxKGRldl9wcml2KTsKKwl2ZWRf ZnJlcV9jb2RlX3JlcXVlc3RlZCA9IEdFVF9GUkVRX0NPREUoZHJtX2lwdnJfZnJlcSk7CisJaWYg KHZlZF9zZXRfZnJlcShkZXZfcHJpdiwgdmVkX2ZyZXFfY29kZV9yZXF1ZXN0ZWQpKSB7CisJCUlQ VlJfRVJST1IoIkZhaWxlZCB0byBzZXQgVkVEIGZyZXF1ZW5jeVxuIik7CisJfQorCisJdmVkX2Zy ZXFfY29kZV9hZnRlciA9IHZlZF9nZXRfZnJlcShkZXZfcHJpdik7CisJSVBWUl9ERUJVR19QTSgi VkVEIGZyZXFlbmN5IHJlcXVlc3RlZCAlZE1IejogYWN0dWFsICVkTUh6ID0+ICVkTUh6XG4iLAor CQlkcm1faXB2cl9mcmVxLCBHRVRfRlJFUV9OVU1CRVIodmVkX2ZyZXFfY29kZV9iZWZvcmUpLAor CQlHRVRfRlJFUV9OVU1CRVIodmVkX2ZyZXFfY29kZV9hZnRlcikpOworCWRybV9pcHZyX2ZyZXEg PSBHRVRfRlJFUV9OVU1CRVIodmVkX2ZyZXFfY29kZV9hZnRlcik7CisKKwl0cmFjZV92ZWRfcG93 ZXJfb24oZHJtX2lwdnJfZnJlcSk7CisJcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgdmVkX3Bvd2Vy X29mZihzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaW50IHZlZF9mcmVx X2NvZGU7CisJaW50IHJldDsKKwlJUFZSX0RFQlVHX1BNKCJWRUQ6IHBvd2VyIG9mZiBtc3ZkeC5c biIpOworCisJaWYgKGRldl9wcml2LT52ZWRfcHJpdmF0ZSkgeworCQlyZXQgPSB2ZWRfc2F2ZV9j b250ZXh0KGRldl9wcml2LT52ZWRfcHJpdmF0ZSk7CisJCWlmICh1bmxpa2VseShyZXQpKSB7CisJ CQlJUFZSX0VSUk9SKCJGYWlsZWQgdG8gc2F2ZSBWRUQgY29udGV4dDogJWQsIHN0b3AgcG93ZXJp bmcgb2ZmXG4iLCByZXQpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJdmVkX2ZyZXFf Y29kZSA9IHZlZF9nZXRfZnJlcShkZXZfcHJpdik7CisJZHJtX2lwdnJfZnJlcSA9IEdFVF9GUkVR X05VTUJFUih2ZWRfZnJlcV9jb2RlKTsKKwlJUFZSX0RFQlVHX1BNKCJWRUQgZnJlcWVuY3k6IGNv ZGUgJWQgKCVkTUh6KVxuIiwgdmVkX2ZyZXFfY29kZSwgZHJtX2lwdnJfZnJlcSk7CisKKwlpZiAo IWRvX3Bvd2VyX29mZihkZXZfcHJpdikpCisJCXJldHVybiBmYWxzZTsKKworCXRyYWNlX3ZlZF9w b3dlcl9vZmYoZHJtX2lwdnJfZnJlcSk7CisJcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgaXNfdmVk X29uKHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdikKK3sKKwl1MzIgcHdyX3N0czsK Kwlwd3Jfc3RzID0gaXB2cl9tc2didXNfcmVhZDMyKGRldl9wcml2LT5wY2lfcm9vdCwgUFVOSVRf UE9SVCwgVkVEU1NQTTApOworCXJldHVybiAocHdyX3N0cyA9PSBWRURfQVBNX1NUU19EMCk7Cit9 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfcG0uaCBiL2RyaXZlcnMvZ3B1 L2RybS9pcHZyL3ZlZF9wbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRl ZDE0ODUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfcG0uaApA QCAtMCwwICsxLDM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHZlZF9wbS5oOiBWRUQgcG93 ZXIgbWFuYWdlbWVudCBoZWFkZXIgZmlsZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRl bCBDb3Jwb3JhdGlvbiwgSGlsbHNib3JvLCBPUiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVk LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlv bnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBX SVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0 YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5v dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZy YW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgor ICogQXV0aG9yczoKKyAqICAgIFlhbyBDaGVuZyA8eWFvLmNoZW5nQGludGVsLmNvbT4KKyAqCisg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1ZFRF9QTV9IXworI2RlZmluZSBfVkVEX1BN X0hfCisKKyNpbmNsdWRlICJpcHZyX2Rydi5oIgorCitib29sIGlzX3ZlZF9vbihzdHJ1Y3QgZHJt X2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYpOworCitib29sIF9fbXVzdF9jaGVjayB2ZWRfcG93ZXJf b24oc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2KTsKKworYm9vbCB2ZWRfcG93ZXJf b2ZmKHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdik7CisKKyNlbmRpZgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2lw dnIvdmVkX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YzY5Y2YK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfcmVnLmgKQEAgLTAs MCArMSw1NjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogdmVkX3JlZy5oOiBWRUQgcmVnaXN0 ZXIgZGVmaW5pdGlvbgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlv biwgSGlsbHNib3JvLCBPUiwgVVNBCisgKiBDb3B5cmlnaHQgKGMpIEltYWdpbmF0aW9uIFRlY2hu b2xvZ2llcyBMaW1pdGVkLCBVSworICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRB QklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZp ZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIEF1dGhvcnM6Cisg KiAgICBGZWkgSmlhbmcgPGZlaS5qaWFuZ0BpbnRlbC5jb20+CisgKiAgICBZYW8gQ2hlbmcgPHlh by5jaGVuZ0BpbnRlbC5jb20+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9W RURfUkVHX0hfCisjZGVmaW5lIF9WRURfUkVHX0hfCisKKyNpbmNsdWRlICJpcHZyX2Rydi5oIgor CisjZGVmaW5lIFJFR0lTVEVSKF9fZ3JvdXBfXywgX19yZWdfXykgKF9fZ3JvdXBfXyMjXyMjX19y ZWdfXyMjX09GRlNFVCkKKworI2RlZmluZSBNVFhfSU5URVJOQUxfUkVHKFJfU1BFQ0lGSUVSICwg VV9TUEVDSUZJRVIpCVwKKwkoKChSX1NQRUNJRklFUik8PDQpIHwgKFVfU1BFQ0lGSUVSKSkKKyNk ZWZpbmUgTVRYX1BDCQlNVFhfSU5URVJOQUxfUkVHKDAsIDUpCisKKyNkZWZpbmUgTUVNSU9fUkVB RF9GSUVMRCh2cE1lbSwgZmllbGQpCQkJCQkJXAorCSgodTMyKSgoKCooKGZpZWxkIyNfVFlQRSop KCgodTMyKXZwTWVtKSArIGZpZWxkIyNfT0ZGU0VUKSkpIFwKKwkJCSYgZmllbGQjI19NQVNLKSA+ PiBmaWVsZCMjX1NISUZUKSkJCQlcCisKKyNkZWZpbmUgTUVNSU9fV1JJVEVfRklFTEQodnBNZW0s IGZpZWxkLCB2YWx1ZSkJCQkJCVwKK2RvIHsgCQkJCQkJCQkJCVwKKwkoKCooKGZpZWxkIyNfVFlQ RSopKCgodTMyKXZwTWVtKSArIGZpZWxkIyNfT0ZGU0VUKSkpID0JXAorCQkoKCooKGZpZWxkIyNf VFlQRSopKCgodTMyKXZwTWVtKSArIGZpZWxkIyNfT0ZGU0VUKSkpCVwKKwkJCSYgKGZpZWxkIyNf VFlQRSl+ZmllbGQjI19NQVNLKSB8CQkJXAorCShmaWVsZCMjX1RZUEUpKCgodTMyKSh2YWx1ZSkg PDwgZmllbGQjI19TSElGVCkgJiBmaWVsZCMjX01BU0spKTsgXAorfSB3aGlsZSAoMCkKKworI2Rl ZmluZSBNRU1JT19XUklURV9GSUVMRF9MSVRFKHZwTWVtLCBmaWVsZCwgdmFsdWUpCQkJCVwKK2Rv IHsJCQkJCQkJCQkJXAorCSAoKigoZmllbGQjI19UWVBFKikoKCh1MzIpdnBNZW0pICsgZmllbGQj I19PRkZTRVQpKSkgPQkJXAorCSgoKigoZmllbGQjI19UWVBFKikoKCh1MzIpdnBNZW0pICsgZmll bGQjI19PRkZTRVQpKSkgfAkJXAorCQkoZmllbGQjI19UWVBFKSgoKHUzMikodmFsdWUpIDw8IGZp ZWxkIyNfU0hJRlQpKSk7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgUkVHSU9fUkVBRF9GSUVM RChyZWdfdmFsLCByZWcsIGZpZWxkKQkJCQkJXAorCSgocmVnX3ZhbCAmIHJlZyMjXyMjZmllbGQj I19NQVNLKSA+PiByZWcjI18jI2ZpZWxkIyNfU0hJRlQpCisKKyNkZWZpbmUgUkVHSU9fV1JJVEVf RklFTEQocmVnX3ZhbCwgcmVnLCBmaWVsZCwgdmFsdWUpCQkJCVwKK2RvIHsJCQkJCQkJCQkJXAor CShyZWdfdmFsKSA9CQkJCQkJCQlcCisJKChyZWdfdmFsKSAmIH4ocmVnIyNfIyNmaWVsZCMjX01B U0spKSB8CQkJCVwKKwkoKCh2YWx1ZSkgPDwgKHJlZyMjXyMjZmllbGQjI19TSElGVCkpICYgKHJl ZyMjXyMjZmllbGQjI19NQVNLKSk7CVwKK30gd2hpbGUgKDApCisKKworI2RlZmluZSBSRUdJT19X UklURV9GSUVMRF9MSVRFKHJlZ192YWwsIHJlZywgZmllbGQsIHZhbHVlKQkJCVwKK2RvIHsJCQkJ CQkJCQkJXAorCShyZWdfdmFsKSA9ICgocmVnX3ZhbCkgfCAoKHZhbHVlKSA8PCAocmVnIyNfIyNm aWVsZCMjX1NISUZUKSkpOwlcCit9IHdoaWxlICgwKQorCisvKioqKioqIE1TVkRYLlRlY2huaWNh bCBSZWZlcmVuY2UgTWFudWFsLjIuMC4yLjQuRXh0ZXJuYWwgVlhEMzh4ICoqKioqKioqKioqKioq CitPZmZzZXQgYWRkcmVzcyAJCQlOYW1lIAkJCUlkZW50aWZpZXIKKzB4MDAwMCAtIDB4MDNGRiAo MTAyNEIpCQlNVFggUmVnaXN0ZXIJCVJFR19NU1ZEWF9NVFgKKzB4MDQwMCAtIDB4MDQ3RiAoMTI4 QikJCVZETUMgUmVnaXN0ZXIJCVJFR19NU1ZEWCBfVkRNQworMHgwNDgwIC0gMHgwNEZGICgxMjhC KQkJVkRFQiBSZWdpc3RlcgkJUkVHX01TVkRYIF9WREVCCisweDA1MDAgLSAweDA1RkYgKDI1NkIp CQlETUFDIFJlZ2lzdGVyCQlSRUdfTVNWRFggX0RNQUMKKzB4MDYwMCAtIDB4MDZGRiAoMjU2QikJ CU1TVkRYIENvcmUgUmVnaXN0ZXIJUkVHX01TVkRYIF9TWVMKKzB4MDcwMCAtIDB4MDdGRiAoMjU2 QikJCVZFQyBpUSBNYXRyaXggUkFNIAlSRUdfTVNWRFhfVkVDX0lRUkFNCisweDA4MDAgLSAweDBG RkYgKDIwNDhCKQkJVkVDIFJlZ2lzdGVycwkJUkVHX01TVkRYIF9WRUMKKzB4MTAwMCAtIDB4MUZG RiAoNGtCKQkJQ29tbWFuZCBSZWdpc3RlcglSRUdfTVNWRFggX0NNRAorMHgyMDAwIC0gMHgyRkZG ICg0a0IpCQlWRUMgTG9jYWwgUkFNCQlSRUdfTVNWRFggX1ZFQ19SQU0KKzB4MzAwMCAtIDB4NEZG RiAoOGtCKQkJVkVDIFZMQyBUYWJsZQkJUkFNIFJFR19NU1ZEWCBfVkVDX1ZMQworMHg1MDAwIC0g MHg1RkZGICg0a0IpCQlBWEkgUmVnaXN0ZXIJCVJFR19NU1ZEWCBfQVhJCisqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisKKy8qKioqKioqKioqKioqKiogTVRYIHJlZ2lzdGVycyBzdGFydDogMHgwMDAw IC0gMHgwM0ZGICgxMDI0QikgKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTVRYX0VOQUJMRV9P RkZTRVQJCQkJKDB4MDAwMCkKKyNkZWZpbmUgTVRYX0VOQUJMRV9NVFhfRU5BQkxFX01BU0sJCQkJ KDB4MDAwMDAwMDEpCisjZGVmaW5lIE1UWF9FTkFCTEVfTVRYX0VOQUJMRV9TSElGVAkJCQkoMCkK KworI2RlZmluZSBNVFhfS0lDS19JTlBVVF9PRkZTRVQJCQkJKDB4MDA4MCkKKworI2RlZmluZSBN VFhfUkVHSVNURVJfUkVBRF9XUklURV9SRVFVRVNUX09GRlNFVAkJKDB4MDBGQykKKyNkZWZpbmUg TVRYX1JFR0lTVEVSX1JFQURfV1JJVEVfUkVRVUVTVF9NVFhfRFJFQURZX01BU0sJKDB4ODAwMDAw MDApCisjZGVmaW5lIE1UWF9SRUdJU1RFUl9SRUFEX1dSSVRFX1JFUVVFU1RfTVRYX0RSRUFEWV9T SElGVAkoMzEpCisjZGVmaW5lIE1UWF9SRUdJU1RFUl9SRUFEX1dSSVRFX1JFUVVFU1RfTVRYX1JO V19NQVNLCQkoMHgwMDAxMDAwMCkKKyNkZWZpbmUgTVRYX1JFR0lTVEVSX1JFQURfV1JJVEVfUkVR VUVTVF9NVFhfUk5XX1NISUZUCQkoMTYpCisKKyNkZWZpbmUgTVRYX1JFR0lTVEVSX1JFQURfV1JJ VEVfREFUQV9PRkZTRVQJCSgweDAwRjgpCisKKyNkZWZpbmUgTVRYX1JBTV9BQ0NFU1NfREFUQV9U UkFOU0ZFUl9PRkZTRVQJCSgweDAxMDQpCisKKyNkZWZpbmUgTVRYX1JBTV9BQ0NFU1NfQ09OVFJP TF9PRkZTRVQJCQkoMHgwMTA4KQorI2RlZmluZSBNVFhfUkFNX0FDQ0VTU19DT05UUk9MX01UWF9N Q01JRF9NQVNLCQkJKDB4MEZGMDAwMDApCisjZGVmaW5lIE1UWF9SQU1fQUNDRVNTX0NPTlRST0xf TVRYX01DTUlEX1NISUZUCQkJKDIwKQorI2RlZmluZSBNVFhfUkFNX0FDQ0VTU19DT05UUk9MX01U WF9NQ01fQUREUl9NQVNLCQkoMHgwMDBGRkZGQykKKyNkZWZpbmUgTVRYX1JBTV9BQ0NFU1NfQ09O VFJPTF9NVFhfTUNNX0FERFJfU0hJRlQJCSgyKQorI2RlZmluZSBNVFhfUkFNX0FDQ0VTU19DT05U Uk9MX01UWF9NQ01BSV9NQVNLCQkJKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1UWF9SQU1fQUNDRVNT X0NPTlRST0xfTVRYX01DTUFJX1NISUZUCQkJKDEpCisjZGVmaW5lIE1UWF9SQU1fQUNDRVNTX0NP TlRST0xfTVRYX01DTVJfTUFTSwkJCSgweDAwMDAwMDAxKQorI2RlZmluZSBNVFhfUkFNX0FDQ0VT U19DT05UUk9MX01UWF9NQ01SX1NISUZUCQkJKDApCisKKyNkZWZpbmUgTVRYX1JBTV9BQ0NFU1Nf U1RBVFVTX09GRlNFVAkJCSgweDAxMEMpCisKKyNkZWZpbmUgTVRYX1NPRlRfUkVTRVRfT0ZGU0VU CQkJCSgweDAyMDApCisjZGVmaW5lIE1UWF9TT0ZUX1JFU0VUX01UWF9SRVNFVF9NQVNLCQkJCSgw eDAwMDAwMDAxKQorI2RlZmluZSBNVFhfU09GVF9SRVNFVF9NVFhfUkVTRVRfU0hJRlQJCQkJKDAp CisjZGVmaW5lCU1UWF9TT0ZUX1JFU0VUX01UWFJFU0VUCQkJCSgweDAwMDAwMDAxKQorCisjZGVm aW5lIE1UWF9TWVNDX1RJTUVSRElWX09GRlNFVAkJCSgweDAyMDgpCisKKyNkZWZpbmUgTVRYX1NZ U0NfQ0RNQUNfT0ZGU0VUCQkJCSgweDAzNDApCisjZGVmaW5lIE1UWF9TWVNDX0NETUFDX0JVUlNU U0laRV9NQVNLCQkJCSgweDA3MDAwMDAwKQorI2RlZmluZSBNVFhfU1lTQ19DRE1BQ19CVVJTVFNJ WkVfU0hJRlQJCQkJKDI0KQorI2RlZmluZSBNVFhfU1lTQ19DRE1BQ19STldfTUFTSwkJCQkoMHgw MDAyMDAwMCkKKyNkZWZpbmUgTVRYX1NZU0NfQ0RNQUNfUk5XX1NISUZUCQkJCSgxNykKKyNkZWZp bmUgTVRYX1NZU0NfQ0RNQUNfRU5BQkxFX01BU0sJCQkJKDB4MDAwMTAwMDApCisjZGVmaW5lIE1U WF9TWVNDX0NETUFDX0VOQUJMRV9TSElGVAkJCQkoMTYpCisjZGVmaW5lIE1UWF9TWVNDX0NETUFD X0xFTkdUSF9NQVNLCQkJCSgweDAwMDBGRkZGKQorI2RlZmluZSBNVFhfU1lTQ19DRE1BQ19MRU5H VEhfU0hJRlQJCQkJKDApCisKKyNkZWZpbmUgTVRYX1NZU0NfQ0RNQUFfT0ZGU0VUCQkJCSgweDAz NDQpCisKKyNkZWZpbmUgTVRYX1NZU0NfQ0RNQVMwX09GRlNFVCAgICAgIAkJCSgweDAzNDgpCisK KyNkZWZpbmUgTVRYX1NZU0NfQ0RNQVRfT0ZGU0VUCQkJCSgweDAzNTApCisvKioqKioqKioqKioq KioqKioqKioqKioqKiogTVRYIHJlZ2lzdGVycyBlbmQgKioqKioqKioqKioqKioqKioqKioqKioq KiovCisKKy8qKioqKioqKioqKioqKioqIERNQUMgUmVnaXN0ZXJzOiAweDA1MDAgLSAweDA1RkYg KDI1NkIpICoqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRE1BQ19ETUFDX0NPVU5UX0VOX01BU0sg ICAgICAgICAJCSgweDAwMDEwMDAwKQorI2RlZmluZSBETUFDX0RNQUNfSVJRX1NUQVRfVFJBTlNG RVJfRklOX01BU0sgICAgICAgICAgICAoMHgwMDAyMDAwMCkKKworI2RlZmluZSBETUFDX0RNQUNf U0VUVVBfT0ZGU0VUCQkJCSgweDA1MDApCisKKyNkZWZpbmUgRE1BQ19ETUFDX0NPVU5UX09GRlNF VAkJCQkoMHgwNTA0KQorI2RlZmluZSBETUFDX0RNQUNfQ09VTlRfQlNXQVBfTFNCTUFTSyAgICAg ICAgICAgCQkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgRE1BQ19ETUFDX0NPVU5UX0JTV0FQX1NISUZU ICAgICAgICAgICAgCQkoMzApCisjZGVmaW5lIERNQUNfRE1BQ19DT1VOVF9QV19MU0JNQVNLCQkJ CSgweDAwMDAwMDAzKQorI2RlZmluZSBETUFDX0RNQUNfQ09VTlRfUFdfU0hJRlQgICAgICAgICAg ICAgICAgCQkoMjcpCisjZGVmaW5lIERNQUNfRE1BQ19DT1VOVF9ESVJfTFNCTUFTSwkJCQkoMHgw MDAwMDAwMSkKKyNkZWZpbmUgRE1BQ19ETUFDX0NPVU5UX0RJUl9TSElGVAkJCQkoMjYpCisjZGVm aW5lIERNQUNfRE1BQ19DT1VOVF9QSV9MU0JNQVNLCQkJCSgweDAwMDAwMDAzKQorI2RlZmluZSBE TUFDX0RNQUNfQ09VTlRfUElfU0hJRlQJCQkJKDI0KQorI2RlZmluZSBETUFDX0RNQUNfQ09VTlRf Q05UX0xTQk1BU0sJCQkJKDB4MDAwMEZGRkYpCisjZGVmaW5lIERNQUNfRE1BQ19DT1VOVF9DTlRf U0hJRlQJCQkJKDApCisjZGVmaW5lIERNQUNfRE1BQ19DT1VOVF9FTl9NQVNLCQkJCSgweDAwMDEw MDAwKQorI2RlZmluZSBETUFDX0RNQUNfQ09VTlRfRU5fU0hJRlQJCQkJKDE2KQorCisjZGVmaW5l IERNQUNfRE1BQ19QRVJJUEhfT0ZGU0VUCQkJCSgweDA1MDgpCisjZGVmaW5lIERNQUNfRE1BQ19Q RVJJUEhfQUNDX0RFTF9MU0JNQVNLCQkJKDB4MDAwMDAwMDcpCisjZGVmaW5lIERNQUNfRE1BQ19Q RVJJUEhfQUNDX0RFTF9TSElGVAkJCQkoMjkpCisjZGVmaW5lIERNQUNfRE1BQ19QRVJJUEhfSU5D Ul9MU0JNQVNLCQkJCSgweDAwMDAwMDAxKQorI2RlZmluZSBETUFDX0RNQUNfUEVSSVBIX0lOQ1Jf U0hJRlQJCQkJKDI3KQorI2RlZmluZSBETUFDX0RNQUNfUEVSSVBIX0JVUlNUX0xTQk1BU0sJCQkJ KDB4MDAwMDAwMDcpCisjZGVmaW5lIERNQUNfRE1BQ19QRVJJUEhfQlVSU1RfU0hJRlQJCQkJKDI0 KQorCisjZGVmaW5lIERNQUNfRE1BQ19JUlFfU1RBVF9PRkZTRVQJCQkoMHgwNTBDKQorI2RlZmlu ZSBETUFDX0RNQUNfSVJRX1NUQVRfVFJBTlNGRVJfRklOX01BU0sJCQkoMHgwMDAyMDAwMCkKKwor I2RlZmluZSBETUFDX0RNQUNfUEVSSVBIRVJBTF9BRERSX09GRlNFVAkJKDB4MDUxNCkKKyNkZWZp bmUgRE1BQ19ETUFDX1BFUklQSEVSQUxfQUREUl9BRERSX01BU0sJCQkoMHgwMDdGRkZGRikKKyNk ZWZpbmUgRE1BQ19ETUFDX1BFUklQSEVSQUxfQUREUl9BRERSX0xTQk1BU0sJCQkoMHgwMDdGRkZG RikKKyNkZWZpbmUgRE1BQ19ETUFDX1BFUklQSEVSQUxfQUREUl9BRERSX1NISUZUCQkJKDApCisK Ky8qIERNQUMgY29udHJvbCAqLworI2RlZmluZSBJUFZSX0RNQUNfVkFMVUVfQ09VTlQoQlNXQVAs IFBXLCBESVIsIFBFUklQSF9JTkNSLCBDT1VOVCkgCVwKKwkJKCgoKEJTV0FQKSAmIERNQUNfRE1B Q19DT1VOVF9CU1dBUF9MU0JNQVNLKSA8PAlcCisJCQlETUFDX0RNQUNfQ09VTlRfQlNXQVBfU0hJ RlQpIHwgCQlcCisJCSgoKFBXKSAmIERNQUNfRE1BQ19DT1VOVF9QV19MU0JNQVNLKSA8PAkJXAor CQkJRE1BQ19ETUFDX0NPVU5UX1BXX1NISUZUKSB8IAkJCVwKKwkJKCgoRElSKSAmIERNQUNfRE1B Q19DT1VOVF9ESVJfTFNCTUFTSykgPDwJCVwKKwkJCURNQUNfRE1BQ19DT1VOVF9ESVJfU0hJRlQp IHwJCQlcCisJCSgoKFBFUklQSF9JTkNSKSAmIERNQUNfRE1BQ19DT1VOVF9QSV9MU0JNQVNLKSA8 PAlcCisJCQlETUFDX0RNQUNfQ09VTlRfUElfU0hJRlQpIHwJCQlcCisJCSgoKENPVU5UKSAmIERN QUNfRE1BQ19DT1VOVF9DTlRfTFNCTUFTSykgPDwJCVwKKwkJCURNQUNfRE1BQ19DT1VOVF9DTlRf U0hJRlQpKQorCisjZGVmaW5lIElQVlJfRE1BQ19WQUxVRV9QRVJJUEhfUEFSQU0oQUNDX0RFTCwg SU5DUiwgQlVSU1QpCQlcCisJCSgoKChBQ0NfREVMKSAmIERNQUNfRE1BQ19QRVJJUEhfQUNDX0RF TF9MU0JNQVNLKSA8PAlcCisJCQlETUFDX0RNQUNfUEVSSVBIX0FDQ19ERUxfU0hJRlQpIHwgCQlc CisJCSgoKElOQ1IpICYgRE1BQ19ETUFDX1BFUklQSF9JTkNSX0xTQk1BU0spIDw8CQlcCisJCQlE TUFDX0RNQUNfUEVSSVBIX0lOQ1JfU0hJRlQpIHwgCQlcCisJCSgoKEJVUlNUKSAmIERNQUNfRE1B Q19QRVJJUEhfQlVSU1RfTFNCTUFTSykgPDwJCVwKKwkJCURNQUNfRE1BQ19QRVJJUEhfQlVSU1Rf U0hJRlQpKQorCit0eXBlZGVmIGVudW0geworCS8qICE8IE5vIGJ5dGUgc3dhcHBpbmcgd2lsbCBi ZSBwZXJmb3JtZWQuICovCisJSVBWUl9ETUFDX0JTV0FQX05PX1NXQVAgPSAweDAsCisJLyogITwg Qnl0ZSBvcmRlciB3aWxsIGJlIHJldmVyc2VkLiAqLworCUlQVlJfRE1BQ19CU1dBUF9SRVZFUlNF ID0gMHgxLAorfSBETUFDX2VCU3dhcDsKKwordHlwZWRlZiBlbnVtIHsKKwkvKiAhPCBEYXRhIGZy b20gbWVtb3J5IHRvIHBlcmlwaGVyYWwuICovCisJSVBWUl9ETUFDX0RJUl9NRU1fVE9fUEVSSVBI ID0gMHgwLAorCS8qICE8IERhdGEgZnJvbSBwZXJpcGhlcmFsIHRvIG1lbW9yeS4gKi8KKwlJUFZS X0RNQUNfRElSX1BFUklQSF9UT19NRU0gPSAweDEsCit9IERNQUNfZURpcjsKKwordHlwZWRlZiBl bnVtIHsKKwlJUFZSX0RNQUNfQUNDX0RFTF8wCT0gMHgwLAkvKiAhPCBBY2Nlc3MgZGVsYXkgemVy byBjbG9jayBjeWNsZXMgKi8KKwlJUFZSX0RNQUNfQUNDX0RFTF8yNTYgICAgPSAweDEsCS8qICE8 IEFjY2VzcyBkZWxheSAyNTYgY2xvY2sgY3ljbGVzICovCisJSVBWUl9ETUFDX0FDQ19ERUxfNTEy ICAgID0gMHgyLAkvKiAhPCBBY2Nlc3MgZGVsYXkgNTEyIGNsb2NrIGN5Y2xlcyAqLworCUlQVlJf RE1BQ19BQ0NfREVMXzc2OCAgICA9IDB4MywJLyogITwgQWNjZXNzIGRlbGF5IDc2OCBjbG9jayBj eWNsZXMgKi8KKwlJUFZSX0RNQUNfQUNDX0RFTF8xMDI0ICAgPSAweDQsCS8qICE8IEFjY2VzcyBk ZWxheSAxMDI0IGNsb2NrIGN5Y2xlcyAqLworCUlQVlJfRE1BQ19BQ0NfREVMXzEyODAgICA9IDB4 NSwJLyogITwgQWNjZXNzIGRlbGF5IDEyODAgY2xvY2sgY3ljbGVzICovCisJSVBWUl9ETUFDX0FD Q19ERUxfMTUzNiAgID0gMHg2LAkvKiAhPCBBY2Nlc3MgZGVsYXkgMTUzNiBjbG9jayBjeWNsZXMg Ki8KKwlJUFZSX0RNQUNfQUNDX0RFTF8xNzkyICAgPSAweDcsCS8qICE8IEFjY2VzcyBkZWxheSAx NzkyIGNsb2NrIGN5Y2xlcyAqLworfSBETUFDX2VBY2NEZWw7CisKK3R5cGVkZWYgZW51bSB7CisJ SVBWUl9ETUFDX0lOQ1JfT0ZGCT0gMCwJLyogITwgU3RhdGljIHBlcmlwaGVyYWwgYWRkcmVzcy4g Ki8KKwlJUFZSX0RNQUNfSU5DUl9PTgk9IDEsCS8qICE8IEluY3JlbWVudGluZyBwZXJpcGhlcmFs IGFkZHJlc3MuICovCit9IERNQUNfZUluY3I7CisKK3R5cGVkZWYgZW51bSB7CisJSVBWUl9ETUFD X0JVUlNUXzAJPSAweDAsCS8qICE8IGJ1cnN0IHNpemUgb2YgMCAqLworCUlQVlJfRE1BQ19CVVJT VF8xICAgICAgICA9IDB4MSwJLyogITwgYnVyc3Qgc2l6ZSBvZiAxICovCisJSVBWUl9ETUFDX0JV UlNUXzIgICAgICAgID0gMHgyLAkvKiAhPCBidXJzdCBzaXplIG9mIDIgKi8KKwlJUFZSX0RNQUNf QlVSU1RfMyAgICAgICAgPSAweDMsCS8qICE8IGJ1cnN0IHNpemUgb2YgMyAqLworCUlQVlJfRE1B Q19CVVJTVF80ICAgICAgICA9IDB4NCwJLyogITwgYnVyc3Qgc2l6ZSBvZiA0ICovCisJSVBWUl9E TUFDX0JVUlNUXzUgICAgICAgID0gMHg1LAkvKiAhPCBidXJzdCBzaXplIG9mIDUgKi8KKwlJUFZS X0RNQUNfQlVSU1RfNiAgICAgICAgPSAweDYsCS8qICE8IGJ1cnN0IHNpemUgb2YgNiAqLworCUlQ VlJfRE1BQ19CVVJTVF83ICAgICAgICA9IDB4NywJLyogITwgYnVyc3Qgc2l6ZSBvZiA3ICovCit9 IERNQUNfZUJ1cnN0OworLyoqKioqKioqKioqKioqKioqKioqKioqKioqIERNQUMgUmVnaXN0ZXJz IGVuZCAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKiogTVNW RFggQ29yZSBSZWdpc3RlcnM6IDB4MDYwMCAtIDB4MDZGRiAoMjU2QikgKioqKioqKioqKioqKioq LworI2RlZmluZSBNU1ZEWF9DT05UUk9MX09GRlNFVAkJCQkJKDB4MDYwMCkKKyNkZWZpbmUgTVNW RFhfQ09OVFJPTF9NU1ZEWF9TT0ZUX1JFU0VUX01BU0sJCQkoMHgwMDAwMDEwMCkKKyNkZWZpbmUg TVNWRFhfQ09OVFJPTF9NU1ZEWF9TT0ZUX1JFU0VUX1NISUZUCQkJKDgpCisjZGVmaW5lIE1TVkRY X0NPTlRST0xfRE1BQ19DSDBfU0VMRUNUX01BU0sJCQkoMHgwMDAwMTAwMCkKKyNkZWZpbmUgTVNW RFhfQ09OVFJPTF9ETUFDX0NIMF9TRUxFQ1RfU0hJRlQJCQkoMTIpCisjZGVmaW5lIE1TVkRYX0NP TlRST0xfTVNWRFhfU09GVF9SRVNFVF9NQVNLCQkJKDB4MDAwMDAxMDApCisjZGVmaW5lIE1TVkRY X0NPTlRST0xfTVNWRFhfU09GVF9SRVNFVF9TSElGVAkJCSg4KQorI2RlZmluZSBNU1ZEWF9DT05U Uk9MX01TVkRYX0ZFX1NPRlRfUkVTRVRfTUFTSwkJCSgweDAwMDEwMDAwKQorI2RlZmluZSBNU1ZE WF9DT05UUk9MX01TVkRYX0JFX1NPRlRfUkVTRVRfTUFTSwkJCSgweDAwMTAwMDAwKQorI2RlZmlu ZSBNU1ZEWF9DT05UUk9MX01TVkRYX1ZFQ19NRU1JRl9TT0ZUX1JFU0VUX01BU0sJCSgweDAxMDAw MDAwKQorI2RlZmluZSBNU1ZEWF9DT05UUk9MX01TVkRYX1ZFQ19SRU5ERUNfREVDX1NPRlRfUkVT RVRfTUFTSyAJKDB4MTAwMDAwMDApCisjZGVmaW5lIG1zdmR4X3N3X3Jlc2V0X2FsbCBcCisJKE1T VkRYX0NPTlRST0xfTVNWRFhfU09GVF9SRVNFVF9NQVNLIHwJICAJCVwKKwlNU1ZEWF9DT05UUk9M X01TVkRYX0ZFX1NPRlRfUkVTRVRfTUFTSyB8CQlcCisJTVNWRFhfQ09OVFJPTF9NU1ZEWF9CRV9T T0ZUX1JFU0VUX01BU0sJfAkJXAorCU1TVkRYX0NPTlRST0xfTVNWRFhfVkVDX01FTUlGX1NPRlRf UkVTRVRfTUFTSyB8CVwKKwlNU1ZEWF9DT05UUk9MX01TVkRYX1ZFQ19SRU5ERUNfREVDX1NPRlRf UkVTRVRfTUFTSykKKworI2RlZmluZSBNU1ZEWF9JTlRFUlJVUFRfQ0xFQVJfT0ZGU0VUCQkJKDB4 MDYwQykKKworI2RlZmluZSBNU1ZEWF9JTlRFUlJVUFRfU1RBVFVTX09GRlNFVAkJCSgweDA2MDgp CisjZGVmaW5lIE1TVkRYX0lOVEVSUlVQVF9TVEFUVVNfTU1VX0ZBVUxUX0lSUV9NQVNLCQkoMHgw MDAwMEYwMCkKKyNkZWZpbmUgTVNWRFhfSU5URVJSVVBUX1NUQVRVU19NTVVfRkFVTFRfSVJRX1NI SUZUCQkoOCkKKyNkZWZpbmUgTVNWRFhfSU5URVJSVVBUX1NUQVRVU19NVFhfSVJRX01BU0sJCQko MHgwMDAwNDAwMCkKKyNkZWZpbmUgTVNWRFhfSU5URVJSVVBUX1NUQVRVU19NVFhfSVJRX1NISUZU CQkJKDE0KQorCisjZGVmaW5lIE1TVkRYX0hPU1RfSU5URVJSVVBUX0VOQUJMRV9PRkZTRVQJCSgw eDA2MTApCisKKyNkZWZpbmUgTVNWRFhfTUFOX0NMS19FTkFCTEVfT0ZGU0VUCQkJKDB4MDYyMCkK KyNkZWZpbmUgTVNWRFhfTUFOX0NMS19FTkFCTEVfQ09SRV9NQU5fQ0xLX0VOQUJMRV9NQVNLCQko MHgwMDAwMDAwMSkKKyNkZWZpbmUgTVNWRFhfTUFOX0NMS19FTkFCTEVfVkRFQl9QUk9DRVNTX01B Tl9DTEtfRU5BQkxFX01BU0sgCSgweDAwMDAwMDAyKQorI2RlZmluZSBNU1ZEWF9NQU5fQ0xLX0VO QUJMRV9WREVCX0FDQ0VTU19NQU5fQ0xLX0VOQUJMRV9NQVNLIAkoMHgwMDAwMDAwNCkKKyNkZWZp bmUgTVNWRFhfTUFOX0NMS19FTkFCTEVfVkRNQ19NQU5fQ0xLX0VOQUJMRV9NQVNLIAkJKDB4MDAw MDAwMDgpCisjZGVmaW5lIE1TVkRYX01BTl9DTEtfRU5BQkxFX1ZFQ19FTlRERUNfTUFOX0NMS19F TkFCTEVfTUFTSyAJKDB4MDAwMDAwMTApCisjZGVmaW5lIE1TVkRYX01BTl9DTEtfRU5BQkxFX1ZF Q19JVFJBTlNfTUFOX0NMS19FTkFCTEVfTUFTSyAJKDB4MDAwMDAwMjApCisjZGVmaW5lIE1TVkRY X01BTl9DTEtfRU5BQkxFX01UWF9NQU5fQ0xLX0VOQUJMRV9NQVNLCQkoMHgwMDAwMDA0MCkKKyNk ZWZpbmUgTVNWRFhfTUFOX0NMS19FTkFCTEVfVkRFQl9QUk9DRVNTX0FVVE9fQ0xLX0VOQUJMRV9N QVNLICgweDAwMDIwMDAwKQorI2RlZmluZSBNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9WREVCX0FDQ0VT U19BVVRPX0NMS19FTkFCTEVfTUFTSwkoMHgwMDA0MDAwMCkKKyNkZWZpbmUgTVNWRFhfTUFOX0NM S19FTkFCTEVfVkRNQ19BVVRPX0NMS19FTkFCTEVfTUFTSyAJKDB4MDAwODAwMDApCisjZGVmaW5l IE1TVkRYX01BTl9DTEtfRU5BQkxFX1ZFQ19FTlRERUNfQVVUT19DTEtfRU5BQkxFX01BU0sgCSgw eDAwMTAwMDAwKQorI2RlZmluZSBNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9WRUNfSVRSQU5TX0FVVE9f Q0xLX0VOQUJMRV9NQVNLIAkoMHgwMDIwMDAwMCkKKworI2RlZmluZSBjbGtfZW5hYmxlX2FsbAlc CisJKE1TVkRYX01BTl9DTEtfRU5BQkxFX0NPUkVfTUFOX0NMS19FTkFCTEVfTUFTSwkJCXwgXAor CU1TVkRYX01BTl9DTEtfRU5BQkxFX1ZERUJfUFJPQ0VTU19NQU5fQ0xLX0VOQUJMRV9NQVNLIAkJ fCBcCisJTVNWRFhfTUFOX0NMS19FTkFCTEVfVkRFQl9BQ0NFU1NfTUFOX0NMS19FTkFCTEVfTUFT SyAJCXwgXAorCU1TVkRYX01BTl9DTEtfRU5BQkxFX1ZETUNfTUFOX0NMS19FTkFCTEVfTUFTSwkg CQl8IFwKKwlNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9WRUNfRU5UREVDX01BTl9DTEtfRU5BQkxFX01B U0sgCQl8IFwKKwlNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9WRUNfSVRSQU5TX01BTl9DTEtfRU5BQkxF X01BU0sgCQl8IFwKKwlNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9NVFhfTUFOX0NMS19FTkFCTEVfTUFT SykKKworI2RlZmluZSBjbGtfZW5hYmxlX21pbmltYWwgXAorCShNU1ZEWF9NQU5fQ0xLX0VOQUJM RV9DT1JFX01BTl9DTEtfRU5BQkxFX01BU0sgfCBcCisJTVNWRFhfTUFOX0NMS19FTkFCTEVfTVRY X01BTl9DTEtfRU5BQkxFX01BU0spCisKKyNkZWZpbmUgY2xrX2VuYWJsZV9hdXRvCVwKKwkoTVNW RFhfTUFOX0NMS19FTkFCTEVfVkRFQl9QUk9DRVNTX0FVVE9fQ0xLX0VOQUJMRV9NQVNLCXwgXAor CU1TVkRYX01BTl9DTEtfRU5BQkxFX1ZERUJfQUNDRVNTX0FVVE9fQ0xLX0VOQUJMRV9NQVNLCQl8 IFwKKwlNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9WRE1DX0FVVE9fQ0xLX0VOQUJMRV9NQVNLCQkJfCBc CisJTVNWRFhfTUFOX0NMS19FTkFCTEVfVkVDX0VOVERFQ19BVVRPX0NMS19FTkFCTEVfTUFTSwkJ fCBcCisJTVNWRFhfTUFOX0NMS19FTkFCTEVfVkVDX0lUUkFOU19BVVRPX0NMS19FTkFCTEVfTUFT SwkJfCBcCisJTVNWRFhfTUFOX0NMS19FTkFCTEVfQ09SRV9NQU5fQ0xLX0VOQUJMRV9NQVNLCQkJ fCBcCisJTVNWRFhfTUFOX0NMS19FTkFCTEVfTVRYX01BTl9DTEtfRU5BQkxFX01BU0spCisKKyNk ZWZpbmUgTVNWRFhfQ09SRV9JRF9PRkZTRVQJCQkJKDB4MDYzMCkKKyNkZWZpbmUgTVNWRFhfQ09S RV9SRVZfT0ZGU0VUCQkJCSgweDA2NDApCisKKyNkZWZpbmUgTVNWRFhfRE1BQ19TVFJFQU1fU1RB VFVTX09GRlNFVAkJCSgweDA2NDgpCisKKyNkZWZpbmUgTVNWRFhfTU1VX0NPTlRST0wwX09GRlNF VAkJCSgweDA2ODApCisjZGVmaW5lIE1TVkRYX01NVV9DT05UUk9MMF9NTVVfUEFVU0VfTUFTSwkJ CSgweDAwMDAwMDAyKQorI2RlZmluZSBNU1ZEWF9NTVVfQ09OVFJPTDBfTU1VX1BBVVNFX1NISUZU CQkJKDEpCisjZGVmaW5lIE1TVkRYX01NVV9DT05UUk9MMF9NTVVfSU5WQUxEQ19NQVNLICAgICAg ICAgIAkJKDB4MDAwMDAwMDgpCisjZGVmaW5lIE1TVkRYX01NVV9DT05UUk9MMF9NTVVfSU5WQUxE Q19TSElGVCAgICAgICAgIAkJKDMpCisKKyNkZWZpbmUgTVNWRFhfTU1VX0JBTktfSU5ERVhfT0ZG U0VUCQkJKDB4MDY4OCkKKworI2RlZmluZSBNU1ZEWF9NTVVfU1RBVFVTX09GRlNFVAkJCQkoMHgw NjhDKQorCisjZGVmaW5lIE1TVkRYX01NVV9DT05UUk9MMl9PRkZTRVQJCQkoMHgwNjkwKQorCisj ZGVmaW5lIE1TVkRYX01NVV9ESVJfTElTVF9CQVNFX09GRlNFVAkJCSgweDA2OTQpCisKKyNkZWZp bmUgTVNWRFhfTU1VX01FTV9SRVFfT0ZGU0VUCQkJKDB4MDZEMCkKKworI2RlZmluZSBNU1ZEWF9N TVVfVElMRV9CQVNFMF9PRkZTRVQJCQkoMHgwNkQ0KQorCisjZGVmaW5lIE1TVkRYX01NVV9USUxF X0JBU0UxX09GRlNFVAkJCSgweDA2RDgpCisKKyNkZWZpbmUgTVNWRFhfTVRYX1JBTV9CQU5LX09G RlNFVAkJCSgweDA2RjApCisjZGVmaW5lIE1TVkRYX01UWF9SQU1fQkFOS19NVFhfUkFNX0JBTktf U0laRV9NQVNLCQkoMHgwMDBGMDAwMCkKKyNkZWZpbmUgTVNWRFhfTVRYX1JBTV9CQU5LX01UWF9S QU1fQkFOS19TSVpFX1NISUZUCQkoMTYpCisKKyNkZWZpbmUgTVNWRFhfTVRYX0RFQlVHX09GRlNF VAkJCQlNU1ZEWF9NVFhfUkFNX0JBTktfT0ZGU0VUCisjZGVmaW5lIE1TVkRYX01UWF9ERUJVR19N VFhfREJHX0lTX1NMQVZFX01BU0sJCQkoMHgwMDAwMDAwNCkKKyNkZWZpbmUgTVNWRFhfTVRYX0RF QlVHX01UWF9EQkdfSVNfU0xBVkVfTFNCTUFTSwkJKDB4MDAwMDAwMDEpCisjZGVmaW5lIE1TVkRY X01UWF9ERUJVR19NVFhfREJHX0lTX1NMQVZFX1NISUZUCQkJKDIpCisjZGVmaW5lIE1TVkRYX01U WF9ERUJVR19NVFhfREJHX0dQSU9fSU5fTUFTSwkJCSgweDAwMDAwMDAzKQorI2RlZmluZSBNU1ZE WF9NVFhfREVCVUdfTVRYX0RCR19HUElPX0lOX0xTQk1BU0sJCSgweDAwMDAwMDAzKQorI2RlZmlu ZSBNU1ZEWF9NVFhfREVCVUdfTVRYX0RCR19HUElPX0lOX1NISUZUCQkJKDApCisKKy8qd2F0Y2gg ZG9nIGZvciBGRSBhbmQgQkUqLworI2RlZmluZSBGRV9NU1ZEWF9XRFRfQ09OVFJPTF9PRkZTRVQJ CQkoMHgwNjY0KQorLyogTVNWRFhfQ09SRSwgQ1JfRkVfTVNWRFhfV0RUX0NPTlRST0wsIEZFX1dE VF9DTlRfQ1RSTCAqLworI2RlZmluZSBGRV9NU1ZEWF9XRFRfQ09OVFJPTF9GRV9XRFRfQ05UX0NU UkxfTUFTSwkJKDB4MDAwNjAwMDApCisjZGVmaW5lIEZFX01TVkRYX1dEVF9DT05UUk9MX0ZFX1dE VF9DTlRfQ1RSTF9MU0JNQVNLCQkoMHgwMDAwMDAwMykKKyNkZWZpbmUgRkVfTVNWRFhfV0RUX0NP TlRST0xfRkVfV0RUX0NOVF9DVFJMX1NISUZUCQkoMTcpCisvKiBNU1ZEWF9DT1JFLCBDUl9GRV9N U1ZEWF9XRFRfQ09OVFJPTCwgRkVfV0RUX0VOQUJMRSAqLworI2RlZmluZSBGRV9NU1ZEWF9XRFRf Q09OVFJPTF9GRV9XRFRfRU5BQkxFX01BU0sJCSgweDAwMDEwMDAwKQorI2RlZmluZSBGRV9NU1ZE WF9XRFRfQ09OVFJPTF9GRV9XRFRfRU5BQkxFX0xTQk1BU0sJCSgweDAwMDAwMDAxKQorI2RlZmlu ZSBGRV9NU1ZEWF9XRFRfQ09OVFJPTF9GRV9XRFRfRU5BQkxFX1NISUZUCQkoMTYpCisvKiBNU1ZE WF9DT1JFLCBDUl9GRV9NU1ZEWF9XRFRfQ09OVFJPTCwgRkVfV0RUX0FDVElPTjEgKi8KKyNkZWZp bmUgRkVfTVNWRFhfV0RUX0NPTlRST0xfRkVfV0RUX0FDVElPTjFfTUFTSwkJKDB4MDAwMDMwMDAp CisjZGVmaW5lIEZFX01TVkRYX1dEVF9DT05UUk9MX0ZFX1dEVF9BQ1RJT04xX0xTQk1BU0sJCSgw eDAwMDAwMDAzKQorI2RlZmluZSBGRV9NU1ZEWF9XRFRfQ09OVFJPTF9GRV9XRFRfQUNUSU9OMV9T SElGVAkJKDEyKQorLyogTVNWRFhfQ09SRSwgQ1JfRkVfTVNWRFhfV0RUX0NPTlRST0wsIEZFX1dE VF9BQ1RJT04wICovCisjZGVmaW5lIEZFX01TVkRYX1dEVF9DT05UUk9MX0ZFX1dEVF9BQ1RJT04w X01BU0sJCSgweDAwMDAwMTAwKQorI2RlZmluZSBGRV9NU1ZEWF9XRFRfQ09OVFJPTF9GRV9XRFRf QUNUSU9OMF9MU0JNQVNLCQkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgRkVfTVNWRFhfV0RUX0NPTlRS T0xfRkVfV0RUX0FDVElPTjBfU0hJRlQJCSg4KQorLyogTVNWRFhfQ09SRSwgQ1JfRkVfTVNWRFhf V0RUX0NPTlRST0wsIEZFX1dEVF9DTEVBUl9TRUxFQ1QgKi8KKyNkZWZpbmUgRkVfTVNWRFhfV0RU X0NPTlRST0xfRkVfV0RUX0NMRUFSX1NFTEVDVF9NQVNLCQkoMHgwMDAwMDAzMCkKKyNkZWZpbmUg RkVfTVNWRFhfV0RUX0NPTlRST0xfRkVfV0RUX0NMRUFSX1NFTEVDVF9MU0JNQVNLCSgweDAwMDAw MDAzKQorI2RlZmluZSBGRV9NU1ZEWF9XRFRfQ09OVFJPTF9GRV9XRFRfQ0xFQVJfU0VMRUNUX1NI SUZUCQkoNCkKKy8qIE1TVkRYX0NPUkUsIENSX0ZFX01TVkRYX1dEVF9DT05UUk9MLCBGRV9XRFRf Q0xLRElWX1NFTEVDVCAqLworI2RlZmluZSBGRV9NU1ZEWF9XRFRfQ09OVFJPTF9GRV9XRFRfQ0xL RElWX1NFTEVDVF9NQVNLCQkoMHgwMDAwMDAwNykKKyNkZWZpbmUgRkVfTVNWRFhfV0RUX0NPTlRS T0xfRkVfV0RUX0NMS0RJVl9TRUxFQ1RfTFNCTUFTSwkoMHgwMDAwMDAwNykKKyNkZWZpbmUgRkVf TVNWRFhfV0RUX0NPTlRST0xfRkVfV0RUX0NMS0RJVl9TRUxFQ1RfU0hJRlQJKDApCisKKyNkZWZp bmUgRkVfTVNWRFhfV0RUSU1FUl9PRkZTRVQJCQkJKDB4MDY2OCkKKy8qIE1TVkRYX0NPUkUsIENS X0ZFX01TVkRYX1dEVElNRVIsIEZFX1dEVF9DT1VOVEVSICovCisjZGVmaW5lIEZFX01TVkRYX1dE VElNRVJfRkVfV0RUX0NPVU5URVJfTUFTSwkJCSgweDAwMDBGRkZGKQorI2RlZmluZSBGRV9NU1ZE WF9XRFRJTUVSX0ZFX1dEVF9DT1VOVEVSX0xTQk1BU0sJCSgweDAwMDBGRkZGKQorI2RlZmluZSBG RV9NU1ZEWF9XRFRJTUVSX0ZFX1dEVF9DT1VOVEVSX1NISUZUCQkJKDApCisKKyNkZWZpbmUgRkVf TVNWRFhfV0RUX0NPTVBBUkVNQVRDSF9PRkZTRVQJCSgweDA2NmMpCisvKiBNU1ZEWF9DT1JFLCBD Ul9GRV9NU1ZEWF9XRFRfQ09NUEFSRU1BVENILCBGRV9XRFRfQ00xICovCisjZGVmaW5lIEZFX01T VkRYX1dEVF9DT01QQVJFTUFUQ0hfRkVfV0RUX0NNMV9NQVNLCQkoMHhGRkZGMDAwMCkKKyNkZWZp bmUgRkVfTVNWRFhfV0RUX0NPTVBBUkVNQVRDSF9GRV9XRFRfQ00xX0xTQk1BU0sJCSgweDAwMDBG RkZGKQorI2RlZmluZSBGRV9NU1ZEWF9XRFRfQ09NUEFSRU1BVENIX0ZFX1dEVF9DTTFfU0hJRlQJ CSgxNikKKy8qIE1TVkRYX0NPUkUsIENSX0ZFX01TVkRYX1dEVF9DT01QQVJFTUFUQ0gsIEZFX1dE VF9DTTAgKi8KKyNkZWZpbmUgRkVfTVNWRFhfV0RUX0NPTVBBUkVNQVRDSF9GRV9XRFRfQ00wX01B U0sJCSgweDAwMDBGRkZGKQorI2RlZmluZSBGRV9NU1ZEWF9XRFRfQ09NUEFSRU1BVENIX0ZFX1dE VF9DTTBfTFNCTUFTSwkJKDB4MDAwMEZGRkYpCisjZGVmaW5lIEZFX01TVkRYX1dEVF9DT01QQVJF TUFUQ0hfRkVfV0RUX0NNMF9TSElGVAkJKDApCisKKyNkZWZpbmUgQkVfTVNWRFhfV0RUX0NPTlRS T0xfT0ZGU0VUCQkJKDB4MDY3MCkKKy8qIE1TVkRYX0NPUkUsIENSX0JFX01TVkRYX1dEVF9DT05U Uk9MLCBCRV9XRFRfQ05UX0NUUkwgKi8KKyNkZWZpbmUgQkVfTVNWRFhfV0RUX0NPTlRST0xfQkVf V0RUX0NOVF9DVFJMX01BU0sJCSgweDAwMUUwMDAwKQorI2RlZmluZSBCRV9NU1ZEWF9XRFRfQ09O VFJPTF9CRV9XRFRfQ05UX0NUUkxfTFNCTUFTSwkJKDB4MDAwMDAwMEYpCisjZGVmaW5lIEJFX01T VkRYX1dEVF9DT05UUk9MX0JFX1dEVF9DTlRfQ1RSTF9TSElGVAkJKDE3KQorLyogTVNWRFhfQ09S RSwgQ1JfQkVfTVNWRFhfV0RUX0NPTlRST0wsIEJFX1dEVF9FTkFCTEUgKi8KKyNkZWZpbmUgQkVf TVNWRFhfV0RUX0NPTlRST0xfQkVfV0RUX0VOQUJMRV9NQVNLCQkoMHgwMDAxMDAwMCkKKyNkZWZp bmUgQkVfTVNWRFhfV0RUX0NPTlRST0xfQkVfV0RUX0VOQUJMRV9MU0JNQVNLCQkoMHgwMDAwMDAw MSkKKyNkZWZpbmUgQkVfTVNWRFhfV0RUX0NPTlRST0xfQkVfV0RUX0VOQUJMRV9TSElGVAkJKDE2 KQorLyogTVNWRFhfQ09SRSwgQ1JfQkVfTVNWRFhfV0RUX0NPTlRST0wsIEJFX1dEVF9BQ1RJT04w ICovCisjZGVmaW5lIEJFX01TVkRYX1dEVF9DT05UUk9MX0JFX1dEVF9BQ1RJT04wX01BU0sJCSgw eDAwMDAwMTAwKQorI2RlZmluZSBCRV9NU1ZEWF9XRFRfQ09OVFJPTF9CRV9XRFRfQUNUSU9OMF9M U0JNQVNLCQkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgQkVfTVNWRFhfV0RUX0NPTlRST0xfQkVfV0RU X0FDVElPTjBfU0hJRlQJCSg4KQorLyogTVNWRFhfQ09SRSwgQ1JfQkVfTVNWRFhfV0RUX0NPTlRS T0wsIEJFX1dEVF9DTEVBUl9TRUxFQ1QgKi8KKyNkZWZpbmUgQkVfTVNWRFhfV0RUX0NPTlRST0xf QkVfV0RUX0NMRUFSX1NFTEVDVF9NQVNLCQkoMHgwMDAwMDBGMCkKKyNkZWZpbmUgQkVfTVNWRFhf V0RUX0NPTlRST0xfQkVfV0RUX0NMRUFSX1NFTEVDVF9MU0JNQVNLCSgweDAwMDAwMDBGKQorI2Rl ZmluZSBCRV9NU1ZEWF9XRFRfQ09OVFJPTF9CRV9XRFRfQ0xFQVJfU0VMRUNUX1NISUZUCQkoNCkK Ky8qIE1TVkRYX0NPUkUsIENSX0JFX01TVkRYX1dEVF9DT05UUk9MLCBCRV9XRFRfQ0xLRElWX1NF TEVDVCAqLworI2RlZmluZSBCRV9NU1ZEWF9XRFRfQ09OVFJPTF9CRV9XRFRfQ0xLRElWX1NFTEVD VF9NQVNLCQkoMHgwMDAwMDAwNykKKyNkZWZpbmUgQkVfTVNWRFhfV0RUX0NPTlRST0xfQkVfV0RU X0NMS0RJVl9TRUxFQ1RfTFNCTUFTSwkoMHgwMDAwMDAwNykKKyNkZWZpbmUgQkVfTVNWRFhfV0RU X0NPTlRST0xfQkVfV0RUX0NMS0RJVl9TRUxFQ1RfU0hJRlQJKDApCisKKyNkZWZpbmUgQkVfTVNW RFhfV0RUSU1FUl9PRkZTRVQJCQkJKDB4MDY3NCkKKy8qIE1TVkRYX0NPUkUsIENSX0JFX01TVkRY X1dEVElNRVIsIEJFX1dEVF9DT1VOVEVSICovCisjZGVmaW5lIEJFX01TVkRYX1dEVElNRVJfQkVf V0RUX0NPVU5URVJfTUFTSwkJCSgweDAwMDBGRkZGKQorI2RlZmluZSBCRV9NU1ZEWF9XRFRJTUVS X0JFX1dEVF9DT1VOVEVSX0xTQk1BU0sJCSgweDAwMDBGRkZGKQorI2RlZmluZSBCRV9NU1ZEWF9X RFRJTUVSX0JFX1dEVF9DT1VOVEVSX1NISUZUCQkJKDApCisKKyNkZWZpbmUgQkVfTVNWRFhfV0RU X0NPTVBBUkVNQVRDSF9PRkZTRVQJCSgweDY3OCkKKy8qIE1TVkRYX0NPUkUsIENSX0JFX01TVkRY X1dEVF9DT01QQVJFTUFUQ0gsIEJFX1dEVF9DTTAgKi8KKyNkZWZpbmUgQkVfTVNWRFhfV0RUX0NP TVBBUkVNQVRDSF9CRV9XRFRfQ00wX01BU0sJCSgweDAwMDBGRkZGKQorI2RlZmluZSBCRV9NU1ZE WF9XRFRfQ09NUEFSRU1BVENIX0JFX1dEVF9DTTBfTFNCTUFTSwkJKDB4MDAwMEZGRkYpCisjZGVm aW5lIEJFX01TVkRYX1dEVF9DT01QQVJFTUFUQ0hfQkVfV0RUX0NNMF9TSElGVAkJKDApCisKKy8q d2F0Y2ggZG9nIGVuZCovCisvKioqKioqKioqKioqKioqKioqKioqKioqKiogTVNWRFggQ29yZSBS ZWdpc3RlcnMgZW5kICoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioq KioqKioqIFZFQyBSZWdpc3RlcnM6IDB4MDgwMCAtIDB4MEZGRiAoMjA0OEIpICoqKioqKioqKioq KioqKioqKi8KKyNkZWZpbmUgVkVDX1NISUZUUkVHX0NPTlRST0xfT0ZGU0VUCQkJKDB4MDgxOCkK KyNkZWZpbmUgVkVDX1NISUZUUkVHX0NPTlRST0xfU1JfTUFTVEVSX1NFTEVDVF9NQVNLCQkoMHgw MDAwMDMwMCkKKyNkZWZpbmUgVkVDX1NISUZUUkVHX0NPTlRST0xfU1JfTUFTVEVSX1NFTEVDVF9T SElGVAkJKDgpCisvKioqKioqKioqKioqKioqKioqKioqKioqKiogVkVDIFJlZ2lzdGVycyBlbmQg KioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioq KiBSRU5ERUMgUmVnaXN0ZXJzICoqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBN U1ZEWF9SRU5ERUNfQ09OVFJPTDBfT0ZGU0VUCQkJKDB4MDg2OCkKKyNkZWZpbmUgTVNWRFhfUkVO REVDX0NPTlRST0wwX1JFTkRFQ19JTklUSUFMSVNFX01BU0sJCSgweDAwMDAwMDAxKQorI2RlZmlu ZSBNU1ZEWF9SRU5ERUNfQ09OVFJPTDBfUkVOREVDX0lOSVRJQUxJU0VfU0hJRlQJCSgwKQorCisj ZGVmaW5lIE1TVkRYX1JFTkRFQ19DT05UUk9MMV9PRkZTRVQJCQkoMHgwODZDKQorI2RlZmluZSBN U1ZEWF9SRU5ERUNfQ09OVFJPTDFfUkVOREVDX0RFQ09ERV9TVEFSVF9TSVpFX01BU0sJKDB4MDAw MDAwRkYpCisjZGVmaW5lIE1TVkRYX1JFTkRFQ19DT05UUk9MMV9SRU5ERUNfREVDT0RFX1NUQVJU X1NJWkVfU0hJRlQJKDApCisjZGVmaW5lIE1TVkRYX1JFTkRFQ19DT05UUk9MMV9SRU5ERUNfQlVS U1RfU0laRV9XX01BU0sJCSgweDAwMEMwMDAwKQorI2RlZmluZSBNU1ZEWF9SRU5ERUNfQ09OVFJP TDFfUkVOREVDX0JVUlNUX1NJWkVfV19TSElGVAkJKDE4KQorI2RlZmluZSBNU1ZEWF9SRU5ERUNf Q09OVFJPTDFfUkVOREVDX0JVUlNUX1NJWkVfUl9NQVNLCQkoMHgwMDAzMDAwMCkKKyNkZWZpbmUg TVNWRFhfUkVOREVDX0NPTlRST0wxX1JFTkRFQ19CVVJTVF9TSVpFX1JfU0hJRlQJCSgxNikKKyNk ZWZpbmUgTVNWRFhfUkVOREVDX0NPTlRST0wxX1JFTkRFQ19FWFRFUk5BTF9NRU1PUllfTUFTSwko MHgwMTAwMDAwMCkKKyNkZWZpbmUgTVNWRFhfUkVOREVDX0NPTlRST0wxX1JFTkRFQ19FWFRFUk5B TF9NRU1PUllfU0hJRlQJKDI0KQorI2RlZmluZSBNU1ZEWF9SRU5ERUNfQ09OVFJPTDFfUkVOREVD X0RFQ19ESVNBQkxFX01BU0sJCSgweDA4MDAwMDAwKQorI2RlZmluZSBNU1ZEWF9SRU5ERUNfQ09O VFJPTDFfUkVOREVDX0RFQ19ESVNBQkxFX1NISUZUCQkoMjcpCisKKyNkZWZpbmUgTVNWRFhfUkVO REVDX0JVRkZFUl9TSVpFX09GRlNFVAkJCSgweDA4NzApCisjZGVmaW5lIE1TVkRYX1JFTkRFQ19C VUZGRVJfU0laRV9SRU5ERUNfQlVGRkVSX1NJWkUwX01BU0sJKDB4MDAwMEZGRkYpCisjZGVmaW5l IE1TVkRYX1JFTkRFQ19CVUZGRVJfU0laRV9SRU5ERUNfQlVGRkVSX1NJWkUwX1NISUZUCSgwKQor I2RlZmluZSBNU1ZEWF9SRU5ERUNfQlVGRkVSX1NJWkVfUkVOREVDX0JVRkZFUl9TSVpFMV9NQVNL CSgweEZGRkYwMDAwKQorI2RlZmluZSBNU1ZEWF9SRU5ERUNfQlVGRkVSX1NJWkVfUkVOREVDX0JV RkZFUl9TSVpFMV9TSElGVAkoMTYpCisKKyNkZWZpbmUgTVNWRFhfUkVOREVDX0JBU0VfQUREUjBf T0ZGU0VUCQkJKDB4MDg3NCkKKworI2RlZmluZSBNU1ZEWF9SRU5ERUNfQkFTRV9BRERSMV9PRkZT RVQJCQkoMHgwODc4KQorCisjZGVmaW5lIE1TVkRYX1JFTkRFQ19SRUFEX0RBVEFfT0ZGU0VUCQkJ KDB4MDg5OCkKKworI2RlZmluZSBNU1ZEWF9SRU5ERUNfQ09OVEVYVDBfT0ZGU0VUCQkJKDB4MDk1 MCkKKworI2RlZmluZSBNU1ZEWF9SRU5ERUNfQ09OVEVYVDFfT0ZGU0VUCQkJKDB4MDk1NCkKKwor I2RlZmluZSBNU1ZEWF9SRU5ERUNfQ09OVEVYVDJfT0ZGU0VUCQkJKDB4MDk1OCkKKworI2RlZmlu ZSBNU1ZEWF9SRU5ERUNfQ09OVEVYVDNfT0ZGU0VUCQkJKDB4MDk1QykKKworI2RlZmluZSBNU1ZE WF9SRU5ERUNfQ09OVEVYVDRfT0ZGU0VUCQkJKDB4MDk2MCkKKworI2RlZmluZSBNU1ZEWF9SRU5E RUNfQ09OVEVYVDVfT0ZGU0VUCQkJKDB4MDk2NCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioq KiogUkVOREVDIHJlZ2lzdGVycyBlbmQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwor LyoqKioqKioqKioqKioqKioqKioqIENNRCBSZWdpc3RlcjogMHgxMDAwIC0gMHgxRkZGICg0a0Ip ICoqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBNU1ZEWF9DTURTX0VORF9TTElDRV9QSUNU VVJFX09GRlNFVAkJKDB4MTQwNCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogQ01E IFJlZ2lzdGVyIGVuZCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioq KioqKioqKioqKioqIFZFQyBMb2NhbCBSQU06IDB4MjAwMCAtIDB4MkZGRiAoNGtCKSAqKioqKioq KioqKioqKioqKioqLworLyogdmVjIGxvY2FsIE1FTSBzYXZlL3Jlc3RvcmUgKi8KKyNkZWZpbmUg VkVDX0xPQ0FMX01FTV9CWVRFX1NJWkUgKDQgKiAxMDI0KQorI2RlZmluZSBWRUNfTE9DQUxfTUVN X09GRlNFVCAweDIwMDAKKworI2RlZmluZSBNU1ZEWF9FWFRfRldfRVJST1JfU1RBVEUgCQkoMHgy Q0M0KQorLyogRGVjb2RlIG9wZXJhdGlvbnMgaW4gcHJvZ3Jlc3Mgb3Igbm90IGNvbXBsZXRlICov CisjZGVmaW5lIE1TVkRYX0ZXX1NUQVRVU19JTl9QUk9HUkVTUwkJCTB4MDAwMDAwMDAKKy8qIHRo ZXJlJ3Mgbm8gd29yayB1bmRlcndheSBvbiB0aGUgaGFyZHdhcmUsIGlkbGUsIGNhbiBiZSBwb3dl cmVkIGRvd24gKi8KKyNkZWZpbmUgTVNWRFhfRldfU1RBVFVTX0hXX0lETEUJCQkJMHgwMDAwMDAw MQorLyogUGFuaWMsIHdhaXRpbmcgdG8gYmUgcmVsb2FkZWQgKi8KKyNkZWZpbmUgTVNWRFhfRldf U1RBVFVTX0hXX1BBTklDCQkJMHgwMDAwMDAwMworCisvKgorICogVGhpcyBkZWZpbmVzIHRoZSBN U1ZEWCBjb21tdW5pY2F0aW9uIGJ1ZmZlcgorICovCisjZGVmaW5lIE1TVkRYX0NPTU1TX1NJR05B VFVSRV9WQUxVRQkoMHhBNUE1QTVBNSkJLyohPCBTaWduYXR1cmUgdmFsdWUgKi8KKy8qITwgSG9z dCBidWZmZXIgc2l6ZSAoaW4gMzItYml0IHdvcmRzKSAqLworI2RlZmluZSBOVU1fV09SRFNfSE9T VF9CVUYJCSgxMDApCisvKiE8IE1UWCBidWZmZXIgc2l6ZSAoaW4gMzItYml0IHdvcmRzKSAqLwor I2RlZmluZSBOVU1fV09SRFNfTVRYX0JVRgkJKDEwMCkKKworI2RlZmluZSBNU1ZEWF9DT01NU19B UkVBX0FERFIJCQkoMHgwMmZlMCkKKyNkZWZpbmUgTVNWRFhfQ09NTVNfQ09SRV9XVEQJCQkoTVNW RFhfQ09NTVNfQVJFQV9BRERSIC0gMHgwOCkKKyNkZWZpbmUgTVNWRFhfQ09NTVNfRVJST1JfVFJJ RwkJCShNU1ZEWF9DT01NU19BUkVBX0FERFIgLSAweDA4KQorI2RlZmluZSBNU1ZEWF9DT01NU19G SVJNV0FSRV9JRAkJCShNU1ZEWF9DT01NU19BUkVBX0FERFIgLSAweDBDKQorI2RlZmluZSBNU1ZE WF9DT01NU19PRkZTRVRfRkxBR1MJCShNU1ZEWF9DT01NU19BUkVBX0FERFIgKyAweDE4KQorI2Rl ZmluZQlNU1ZEWF9DT01NU19NU0dfQ09VTlRFUgkJCShNU1ZEWF9DT01NU19BUkVBX0FERFIgLSAw eDA0KQorI2RlZmluZSBNU1ZEWF9DT01NU19GV19TVEFUVVMJCQkoTVNWRFhfQ09NTVNfQVJFQV9B RERSIC0gMHgxMCkKKyNkZWZpbmUJTVNWRFhfQ09NTVNfU0lHTkFUVVJFCQkJKE1TVkRYX0NPTU1T X0FSRUFfQUREUiArIDB4MDApCisjZGVmaW5lCU1TVkRYX0NPTU1TX1RPX0hPU1RfQlVGX1NJWkUJ CShNU1ZEWF9DT01NU19BUkVBX0FERFIgKyAweDA0KQorI2RlZmluZSBNU1ZEWF9DT01NU19UT19I T1NUX1JEX0lOREVYCQkoTVNWRFhfQ09NTVNfQVJFQV9BRERSICsgMHgwOCkKKyNkZWZpbmUgTVNW RFhfQ09NTVNfVE9fSE9TVF9XUlRfSU5ERVgJCShNU1ZEWF9DT01NU19BUkVBX0FERFIgKyAweDBD KQorI2RlZmluZSBNU1ZEWF9DT01NU19UT19NVFhfQlVGX1NJWkUJCShNU1ZEWF9DT01NU19BUkVB X0FERFIgKyAweDEwKQorI2RlZmluZSBNU1ZEWF9DT01NU19UT19NVFhfUkRfSU5ERVgJCShNU1ZE WF9DT01NU19BUkVBX0FERFIgKyAweDE0KQorI2RlZmluZSBNU1ZEWF9DT01NU19UT19NVFhfQ0Jf UkRfSU5ERVgJCShNU1ZEWF9DT01NU19BUkVBX0FERFIgKyAweDE4KQorI2RlZmluZSBNU1ZEWF9D T01NU19UT19NVFhfV1JUX0lOREVYCQkoTVNWRFhfQ09NTVNfQVJFQV9BRERSICsgMHgxQykKKyNk ZWZpbmUgTVNWRFhfQ09NTVNfVE9fSE9TVF9CVUYJCQkoTVNWRFhfQ09NTVNfQVJFQV9BRERSICsg MHgyMCkKKyNkZWZpbmUgTVNWRFhfQ09NTVNfVE9fTVRYX0JVRglcCisJCQkoTVNWRFhfQ09NTVNf VE9fSE9TVF9CVUYgKyAoTlVNX1dPUkRTX0hPU1RfQlVGIDw8IDIpKQorCisvKgorICogRlcgRkxB R3M6IGl0IHNoYWxsIGJlIHdyaXR0ZW4gYnkgdGhlIGhvc3QgcHJpb3IgdG8gc3RhcnRpbmcgdGhl IEZpcm13YXJlLgorICovCisvKiBEaXNhYmxlIEZpcm13YXJlIGJhc2VkIFdhdGNoIGRvZyB0aW1l cnMuICovCisjZGVmaW5lIERTSUFCTEVfRldfV0RUCQkJCTB4MDAwOAorCS8qIEFib3J0IEltbWVk aWF0ZWx5IG9uIGVycm9ycyAqLworI2RlZmluZSBBQk9SVF9PTl9FUlJPUlNfSU1NRURJQVRFCQkw eDAwMTAKKwkvKiBBYm9ydHMgZmF1bHRlZCBzbGljZXMgYXMgc29vbiBhcyBwb3NzaWJsZS4gQWxs b3dzIG5vbiBmYXVsdGVkIHNsaWNlcworCSAqIHRvIHJlYWNoIGJhY2tlbmQgYnV0IGZhdWx0ZWQg c2xpY2Ugd2lsbCBub3QgYmUgYWxsb3dlZCB0byBzdGFydC4gKi8KKyNkZWZpbmUgQUJPUlRfRkFV TFRFRF9TTElDRV9JTU1FRElBVEUJCTB4MDAyMAorCS8qIEZsdXNoIGZhdWx0ZWQgc2xpY2VzIC0g RGVidWcgb3B0aW9uICovCisjZGVmaW5lIEZMVVNIX0ZBVUxURURfU0xJQ0VTCQkJMHgwMDgwCisJ LyogRG9uJ3QgaW50ZXJydXB0IGhvc3Qgd2hlbiB0byBob3N0IGJ1ZmZlciBiZWNvbWVzIGZ1bGwu CisJICogU3RhbGwgdW50aWwgc3BhY2UgaXMgZnJlZWQgdXAgYnkgaG9zdCBvbiBpdCdzIG93bi4g Ki8KKyNkZWZpbmUgTk9UX0lOVEVSUlVQVF9XSEVOX0hPU1RfSVNfRlVMTAkJMHgwMjAwCisJLyog Q29udGlndWl0eSB3YXJuaW5nIG1zZyB3aWxsIGJlIHNlbmQgdG8gaG9zdCBmb3Igc3RyZWFtIHdp dGgKKyAgICAgICAgICogRldfRVJST1JfREVURUNUSU9OX0FORF9SRUNPVkVSWSBmbGFnIHNldCBp ZiBub24tY29udGlndW91cworCSAqIG1hY3JvYmxvY2tzIGFyZSBkZXRlY3RlZC4gKi8KKyNkZWZp bmUgTk9UX0VOQUJMRV9PTl9IT1NUX0NPTkNFQUxNRU5UCQkweDA0MDAKKwkvKiBSZXR1cm4gVkRF QiBTaWduYXR1cmUgVmFsdWUgaW4gQ29tcGxldGlvbiBtZXNzYWdlLgorCSAqIFRoaXMgcmVxdWly ZXMgYSBWREVCIGRhdGEgZmx1c2ggZXZlcnkgc2xpY2UgZm9yIGNvbnN0YW50IHJlc3VsdHMuKi8K KyNkZWZpbmUgUkVUVVJOX1ZERUJfREFUQV9JTl9DT01QTEVUSU9OCQkweDA4MDAKKwkvKiBEaXNh YmxlIEF1dG8gQ2xvY2sgR2F0aW5nLiAqLworI2RlZmluZSBEU0lBQkxFX0F1dG9fQ0xPQ0tfR0FU SU5HCQkweDEwMDAKKwkvKiBEaXNhYmxlIElkbGUgR1BJTyBzaWduYWwuICovCisjZGVmaW5lIERT SUFCTEVfSURMRV9HUElPX1NJRwkJCTB4MjAwMAorCS8qIEVuYWJsZSBTZXR1cCwgRkUgYW5kIEJF IFRpbWUgc3RhbXBzIGluIGNvbXBsZXRpb24gbWVzc2FnZS4KKwkgKiBVc2VkIGJ5IElNRyBvbmx5 IGZvciBmaXJtd2FyZSBwcm9maWxpbmcuICovCisjZGVmaW5lIEVOQUJMRV9USU1FU1RBTVBTX0lO X0NPTVBMRVRFX01TRwkweDQwMDAKKwkvKiBEaXNhYmxlIG9mZi1ob3N0IDJuZCBwYXNzIERlYmxv Y2tpbmcgaW4gRmlybXdhcmUuICAqLworI2RlZmluZSBEU0lBQkxFX09GRkhPU1RfU0VDT05EX0RF QkxPQ0sJCTB4MjAwMDAKKwkvKiBTdW0gYWRkcmVzcyBzaWduYXR1cmUgdG8gZGF0YSBzaWduYXR1 cmUKKwkgKiB3aGVuIHJldHVybmluZyBWREVCIHNpZ25hdHVyZSB2YWx1ZXMuICovCisjZGVmaW5l IFNVTV9BRERfU0lHX1RPX0RBVEFfU0lHTkFUVVJFCQkweDgwMDAwCisKKy8qCisjZGVmaW5lIE1T VkRYX0NPTU1TX0FSRUFfRU5ECVwKKyAgKE1TVkRYX0NPTU1TX1RPX01UWF9CVUYgKyAoTlVNX1dP UkRTX0hPU1RfQlVGIDw8IDIpKQorKi8KKyNkZWZpbmUgTVNWRFhfQ09NTVNfQVJFQV9FTkQgMHgw MzAwMAorCisjaWYgKE1TVkRYX0NPTU1TX0FSRUFfRU5EICE9IDB4MDMwMDApCisjZXJyb3IKKyNl bmRpZgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFZFQyBMb2NhbCBSQU0gZW5kICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZW5kaWYKLS0gCjIuMS4wCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=