From: Jordan Crouse Subject: [PATCH 07/11] drm/msm/a6xx: Add a6xx gpu state Date: Wed, 17 Oct 2018 10:28:14 -0600 Message-ID: <20181017162818.8498-8-jcrouse@codeaurora.org> References: <20181017162818.8498-1-jcrouse@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181017162818.8498-1-jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: dri-devel@lists.freedesktop.org QWRkIHN1cHBvcnQgZm9yIGdhdGhlcmluZyBhbmQgZHVtcGluZyB0aGUgYTZ4eCBHUFUgc3RhdGUg aW5jbHVkaW5nCnJlZ2lzdGVycywgR01VIHJlZ2lzdGVycywgaW5kZXhlZCByZWdpc3RlcnMsIHNo YWRlciBibG9ja3MsCmNvbnRleHQgY2x1c3RlcnMgYW5kIGRlYnVnYnVzLgoKU2lnbmVkLW9mZi1i eTogSm9yZGFuIENyb3VzZSA8amNyb3VzZUBjb2RlYXVyb3JhLm9yZz4KLS0tCiBkcml2ZXJzL2dw dS9kcm0vbXNtL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL2dwdS9k cm0vbXNtL2FkcmVuby9hNnh4X2dtdS5jICAgICAgIHwgICAyNSArLQogZHJpdmVycy9ncHUvZHJt L21zbS9hZHJlbm8vYTZ4eF9nbXUuaCAgICAgICB8ICAgIDMgKwogZHJpdmVycy9ncHUvZHJtL21z bS9hZHJlbm8vYTZ4eF9ncHUuYyAgICAgICB8ICAgMzkgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20v YWRyZW5vL2E2eHhfZ3B1LmggICAgICAgfCAgICA4ICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vYWRy ZW5vL2E2eHhfZ3B1X3N0YXRlLmMgfCAxMTU5ICsrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMv Z3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1X3N0YXRlLmggfCAgNDMwICsrKysrKysKIDcgZmls ZXMgY2hhbmdlZCwgMTYyNyBpbnNlcnRpb25zKCspLCAzOCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdV9zdGF0ZS5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHVfc3Rh dGUuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL01ha2VmaWxlCmluZGV4IDE5YWI1MjFkNGMzYS4uMzM2NDVjNjUzOWVlIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vTWFrZWZpbGUKQEAgLTE0LDYgKzE0LDcgQEAgbXNtLXkgOj0gXAogCWFkcmVuby9h Nnh4X2dwdS5vIFwKIAlhZHJlbm8vYTZ4eF9nbXUubyBcCiAJYWRyZW5vL2E2eHhfaGZpLm8gXAor CWFkcmVuby9hNnh4X2dwdV9zdGF0ZS5vIFwKIAloZG1pL2hkbWkubyBcCiAJaGRtaS9oZG1pX2F1 ZGlvLm8gXAogCWhkbWkvaGRtaV9icmlkZ2UubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2FkcmVuby9hNnh4X2dtdS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4 eF9nbXUuYwppbmRleCBkNGU5OGU1ODc2YmMuLjA4OWIwMTNkN2JiOSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9nbXUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2FkcmVuby9hNnh4X2dtdS5jCkBAIC01MSwxMCArNTEsMzEgQEAgc3RhdGljIGlycXJldHVy bl90IGE2eHhfaGZpX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQogCXJldHVybiBJUlFfSEFORExF RDsKIH0KIAorYm9vbCBhNnh4X2dtdV9zcHRwcmFjX2lzX29uKHN0cnVjdCBhNnh4X2dtdSAqZ211 KQoreworCXUzMiB2YWw7CisKKwkvKiBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSBncHUgc3RhdGUg Y29kZSBzbyBtYWtlIHN1cmUgR01VIGlzIHZhbGlkICovCisJaWYgKElTX0VSUl9PUl9OVUxMKGdt dS0+bW1pbykpCisJCXJldHVybiBmYWxzZTsKKworCXZhbCA9IGdtdV9yZWFkKGdtdSwgUkVHX0E2 WFhfR01VX1NQVFBSQUNfUFdSX0NMS19TVEFUVVMpOworCisJcmV0dXJuICEodmFsICYKKwkJKEE2 WFhfR01VX1NQVFBSQUNfUFdSX0NMS19TVEFUVVNfU1BUUFJBQ19HRFNDX1BPV0VSX09GRiB8CisJ CUE2WFhfR01VX1NQVFBSQUNfUFdSX0NMS19TVEFUVVNfU1BfQ0xPQ0tfT0ZGKSk7Cit9CisKIC8q IENoZWNrIHRvIHNlZSBpZiB0aGUgR1ggcmFpbCBpcyBzdGlsbCBwb3dlcmVkICovCi1zdGF0aWMg Ym9vbCBhNnh4X2dtdV9neF9pc19vbihzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSkKK2Jvb2wgYTZ4eF9n bXVfZ3hfaXNfb24oc3RydWN0IGE2eHhfZ211ICpnbXUpCiB7Ci0JdTMyIHZhbCA9IGdtdV9yZWFk KGdtdSwgUkVHX0E2WFhfR01VX1NQVFBSQUNfUFdSX0NMS19TVEFUVVMpOworCXUzMiB2YWw7CisK KwkvKiBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSBncHUgc3RhdGUgY29kZSBzbyBtYWtlIHN1cmUg R01VIGlzIHZhbGlkICovCisJaWYgKElTX0VSUl9PUl9OVUxMKGdtdS0+bW1pbykpCisJCXJldHVy biBmYWxzZTsKKworCXZhbCA9IGdtdV9yZWFkKGdtdSwgUkVHX0E2WFhfR01VX1NQVFBSQUNfUFdS X0NMS19TVEFUVVMpOwogCiAJcmV0dXJuICEodmFsICYKIAkJKEE2WFhfR01VX1NQVFBSQUNfUFdS X0NMS19TVEFUVVNfR1hfSE1fR0RTQ19QT1dFUl9PRkYgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9nbXUuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5v L2E2eHhfZ211LmgKaW5kZXggMzVmNzY1YWZhZTQ1Li5jNzIxZDkxNjVkOGUgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ211LmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9hZHJlbm8vYTZ4eF9nbXUuaApAQCAtMTY0LDQgKzE2NCw3IEBAIHZvaWQgYTZ4eF9o ZmlfaW5pdChzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSk7CiBpbnQgYTZ4eF9oZmlfc3RhcnQoc3RydWN0 IGE2eHhfZ211ICpnbXUsIGludCBib290X3N0YXRlKTsKIHZvaWQgYTZ4eF9oZmlfc3RvcChzdHJ1 Y3QgYTZ4eF9nbXUgKmdtdSk7CiAKK2Jvb2wgYTZ4eF9nbXVfZ3hfaXNfb24oc3RydWN0IGE2eHhf Z211ICpnbXUpOworYm9vbCBhNnh4X2dtdV9zcHRwcmFjX2lzX29uKHN0cnVjdCBhNnh4X2dtdSAq Z211KTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9h Nnh4X2dwdS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHUuYwppbmRleCA2 MzEyNTdjMjk3ZmQuLjNhZmQ0ZGYyZTI1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21z bS9hZHJlbm8vYTZ4eF9ncHUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4 X2dwdS5jCkBAIC02NDUsMzMgKzY0NSw2IEBAIHN0YXRpYyBjb25zdCB1MzIgYTZ4eF9yZWdpc3Rl cl9vZmZzZXRzW1JFR19BRFJFTk9fUkVHSVNURVJfTUFYXSA9IHsKIAlSRUdfQURSRU5PX0RFRklO RShSRUdfQURSRU5PX0NQX1JCX0NOVEwsIFJFR19BNlhYX0NQX1JCX0NOVEwpLAogfTsKIAotc3Rh dGljIGNvbnN0IHUzMiBhNnh4X3JlZ2lzdGVyc1tdID0gewotCTB4MDAwMCwgMHgwMDAyLCAweDAw MTAsIDB4MDAxMCwgMHgwMDEyLCAweDAwMTIsIDB4MDAxOCwgMHgwMDFiLAotCTB4MDAxZSwgMHgw MDMyLCAweDAwMzgsIDB4MDAzYywgMHgwMDQyLCAweDAwNDIsIDB4MDA0NCwgMHgwMDQ0LAotCTB4 MDA0NywgMHgwMDQ3LCAweDAwNTYsIDB4MDA1NiwgMHgwMGFkLCAweDAwYWUsIDB4MDBiMCwgMHgw MGZiLAotCTB4MDEwMCwgMHgwMTFkLCAweDAyMDAsIDB4MDIwZCwgMHgwMjEwLCAweDAyMTMsIDB4 MDIxOCwgMHgwMjNkLAotCTB4MDQwMCwgMHgwNGY5LCAweDA1MDAsIDB4MDUwMCwgMHgwNTA1LCAw eDA1MGIsIDB4MDUwZSwgMHgwNTExLAotCTB4MDUzMywgMHgwNTMzLCAweDA1NDAsIDB4MDU1NSwg MHgwODAwLCAweDA4MDgsIDB4MDgxMCwgMHgwODEzLAotCTB4MDgyMCwgMHgwODIxLCAweDA4MjMs IDB4MDgyNywgMHgwODMwLCAweDA4MzMsIDB4MDg0MCwgMHgwODQzLAotCTB4MDg0ZiwgMHgwODZm LCAweDA4ODAsIDB4MDg4YSwgMHgwOGEwLCAweDA4YWIsIDB4MDhjMCwgMHgwOGM0LAotCTB4MDhk MCwgMHgwOGRkLCAweDA4ZjAsIDB4MDhmMywgMHgwOTAwLCAweDA5MDMsIDB4MDkwOCwgMHgwOTEx LAotCTB4MDkyOCwgMHgwOTNlLCAweDA5NDIsIDB4MDk0ZCwgMHgwOTgwLCAweDA5ODQsIDB4MDk4 ZCwgMHgwOTk2LAotCTB4MDk5OCwgMHgwOTllLCAweDA5YTAsIDB4MDlhNiwgMHgwOWE4LCAweDA5 YWUsIDB4MDliMCwgMHgwOWIxLAotCTB4MDljMiwgMHgwOWM4LCAweDBhMDAsIDB4MGEwMywgMHgw YzAwLCAweDBjMDQsIDB4MGMwNiwgMHgwYzA2LAotCTB4MGMxMCwgMHgwY2Q5LCAweDBlMDAsIDB4 MGUwZSwgMHgwZTEwLCAweDBlMTMsIDB4MGUxNywgMHgwZTE5LAotCTB4MGUxYywgMHgwZTJiLCAw eDBlMzAsIDB4MGUzMiwgMHgwZTM4LCAweDBlMzksIDB4ODYwMCwgMHg4NjAxLAotCTB4ODYxMCwg MHg4NjFiLCAweDg2MjAsIDB4ODYyMCwgMHg4NjI4LCAweDg2MmIsIDB4ODYzMCwgMHg4NjM3LAot CTB4OGUwMSwgMHg4ZTAxLCAweDhlMDQsIDB4OGUwNSwgMHg4ZTA3LCAweDhlMDgsIDB4OGUwYywg MHg4ZTBjLAotCTB4OGUxMCwgMHg4ZTFjLCAweDhlMjAsIDB4OGUyNSwgMHg4ZTI4LCAweDhlMjgs IDB4OGUyYywgMHg4ZTJmLAotCTB4OGUzYiwgMHg4ZTNlLCAweDhlNDAsIDB4OGU0MywgMHg4ZTUw LCAweDhlNWUsIDB4OGU3MCwgMHg4ZTc3LAotCTB4OTYwMCwgMHg5NjA0LCAweDk2MjQsIDB4OTYz NywgMHg5ZTAwLCAweDllMDEsIDB4OWUwMywgMHg5ZTBlLAotCTB4OWUxMSwgMHg5ZTE2LCAweDll MTksIDB4OWUxOSwgMHg5ZTFjLCAweDllMWMsIDB4OWUyMCwgMHg5ZTIzLAotCTB4OWUzMCwgMHg5 ZTMxLCAweDllMzQsIDB4OWUzNCwgMHg5ZTcwLCAweDllNzIsIDB4OWU3OCwgMHg5ZTc5LAotCTB4 OWU4MCwgMHg5ZmZmLCAweGE2MDAsIDB4YTYwMSwgMHhhNjAzLCAweGE2MDMsIDB4YTYwYSwgMHhh NjBhLAotCTB4YTYxMCwgMHhhNjE3LCAweGE2MzAsIDB4YTYzMCwKLQl+MAotfTsKLQogc3RhdGlj IGludCBhNnh4X3BtX3Jlc3VtZShzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQogewogCXN0cnVjdCBhZHJl bm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9fYWRyZW5vX2dwdShncHUpOwpAQCAtNzI0LDE0ICs2OTcs NiBAQCBzdGF0aWMgaW50IGE2eHhfZ2V0X3RpbWVzdGFtcChzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCB1 aW50NjRfdCAqdmFsdWUpCiAJcmV0dXJuIDA7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19ERUJV R19GUykgfHwgZGVmaW5lZChDT05GSUdfREVWX0NPUkVEVU1QKQotc3RhdGljIHZvaWQgYTZ4eF9z aG93KHN0cnVjdCBtc21fZ3B1ICpncHUsIHN0cnVjdCBtc21fZ3B1X3N0YXRlICpzdGF0ZSwKLQkJ c3RydWN0IGRybV9wcmludGVyICpwKQotewotCWFkcmVub19zaG93KGdwdSwgc3RhdGUsIHApOwot fQotI2VuZGlmCi0KIHN0YXRpYyBzdHJ1Y3QgbXNtX3JpbmdidWZmZXIgKmE2eHhfYWN0aXZlX3Jp bmcoc3RydWN0IG1zbV9ncHUgKmdwdSkKIHsKIAlzdHJ1Y3QgYWRyZW5vX2dwdSAqYWRyZW5vX2dw dSA9IHRvX2FkcmVub19ncHUoZ3B1KTsKQEAgLTc5Niw2ICs3NjEsOCBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IGFkcmVub19ncHVfZnVuY3MgZnVuY3MgPSB7CiAJCS5ncHVfYnVzeSA9IGE2eHhfZ3B1 X2J1c3ksCiAJCS5ncHVfZ2V0X2ZyZXEgPSBhNnh4X2dtdV9nZXRfZnJlcSwKIAkJLmdwdV9zZXRf ZnJlcSA9IGE2eHhfZ211X3NldF9mcmVxLAorCQkuZ3B1X3N0YXRlX2dldCA9IGE2eHhfZ3B1X3N0 YXRlX2dldCwKKwkJLmdwdV9zdGF0ZV9wdXQgPSBhNnh4X2dwdV9zdGF0ZV9wdXQsCiAJfSwKIAku Z2V0X3RpbWVzdGFtcCA9IGE2eHhfZ2V0X3RpbWVzdGFtcCwKIH07CkBAIC04MTcsNyArNzg0LDcg QEAgc3RydWN0IG1zbV9ncHUgKmE2eHhfZ3B1X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikK IAlhZHJlbm9fZ3B1ID0gJmE2eHhfZ3B1LT5iYXNlOwogCWdwdSA9ICZhZHJlbm9fZ3B1LT5iYXNl OwogCi0JYWRyZW5vX2dwdS0+cmVnaXN0ZXJzID0gYTZ4eF9yZWdpc3RlcnM7CisJYWRyZW5vX2dw dS0+cmVnaXN0ZXJzID0gTlVMTDsKIAlhZHJlbm9fZ3B1LT5yZWdfb2Zmc2V0cyA9IGE2eHhfcmVn aXN0ZXJfb2Zmc2V0czsKIAogCXJldCA9IGFkcmVub19ncHVfaW5pdChkZXYsIHBkZXYsIGFkcmVu b19ncHUsICZmdW5jcywgMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVu by9hNnh4X2dwdS5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHUuaAppbmRl eCA0MTI3ZGNlYmMyMDIuLjUyOGE0Y2ZlMDdjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L21zbS9hZHJlbm8vYTZ4eF9ncHUuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9h Nnh4X2dwdS5oCkBAIC01Niw2ICs1NiwxNCBAQCB2b2lkIGE2eHhfZ211X2NsZWFyX29vYihzdHJ1 Y3QgYTZ4eF9nbXUgKmdtdSwgZW51bSBhNnh4X2dtdV9vb2Jfc3RhdGUgc3RhdGUpOwogCiBpbnQg YTZ4eF9nbXVfcHJvYmUoc3RydWN0IGE2eHhfZ3B1ICphNnh4X2dwdSwgc3RydWN0IGRldmljZV9u b2RlICpub2RlKTsKIHZvaWQgYTZ4eF9nbXVfcmVtb3ZlKHN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9n cHUpOworCiB2b2lkIGE2eHhfZ211X3NldF9mcmVxKHN0cnVjdCBtc21fZ3B1ICpncHUsIHVuc2ln bmVkIGxvbmcgZnJlcSk7CiB1bnNpZ25lZCBsb25nIGE2eHhfZ211X2dldF9mcmVxKHN0cnVjdCBt c21fZ3B1ICpncHUpOworCit2b2lkIGE2eHhfc2hvdyhzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCBzdHJ1 Y3QgbXNtX2dwdV9zdGF0ZSAqc3RhdGUsCisJCXN0cnVjdCBkcm1fcHJpbnRlciAqcCk7CisKK3N0 cnVjdCBtc21fZ3B1X3N0YXRlICphNnh4X2dwdV9zdGF0ZV9nZXQoc3RydWN0IG1zbV9ncHUgKmdw dSk7CitpbnQgYTZ4eF9ncHVfc3RhdGVfcHV0KHN0cnVjdCBtc21fZ3B1X3N0YXRlICpzdGF0ZSk7 CisKICNlbmRpZiAvKiBfX0E2WFhfR1BVX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHVfc3RhdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRy ZW5vL2E2eHhfZ3B1X3N0YXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi5kNDZiOTQ0NjJiYjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2FkcmVuby9hNnh4X2dwdV9zdGF0ZS5jCkBAIC0wLDAgKzEsMTE1OSBAQAorLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qIENvcHlyaWdodCAoYykgMjAxOCBUaGUgTGludXgg Rm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi8KKworI2luY2x1ZGUgPGxpbnV4L2Fz Y2lpODUuaD4KKyNpbmNsdWRlICJtc21fZ2VtLmgiCisjaW5jbHVkZSAiYTZ4eF9ncHUuaCIKKyNp bmNsdWRlICJhNnh4X2dtdS5oIgorI2luY2x1ZGUgImE2eHhfZ3B1X3N0YXRlLmgiCisjaW5jbHVk ZSAiYTZ4eF9nbXUueG1sLmgiCisKK3N0cnVjdCBhNnh4X2dwdV9zdGF0ZV9vYmogeworCWNvbnN0 IHZvaWQgKmhhbmRsZTsKKwl1MzIgKmRhdGE7Cit9OworCitzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGUg eworCXN0cnVjdCBtc21fZ3B1X3N0YXRlIGJhc2U7CisKKwlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGVf b2JqICpnbXVfcmVnaXN0ZXJzOworCWludCBucl9nbXVfcmVnaXN0ZXJzOworCisJc3RydWN0IGE2 eHhfZ3B1X3N0YXRlX29iaiAqcmVnaXN0ZXJzOworCWludCBucl9yZWdpc3RlcnM7CisKKwlzdHJ1 Y3QgYTZ4eF9ncHVfc3RhdGVfb2JqICpzaGFkZXJzOworCWludCBucl9zaGFkZXJzOworCisJc3Ry dWN0IGE2eHhfZ3B1X3N0YXRlX29iaiAqY2x1c3RlcnM7CisJaW50IG5yX2NsdXN0ZXJzOworCisJ c3RydWN0IGE2eHhfZ3B1X3N0YXRlX29iaiAqZGJnYWhiX2NsdXN0ZXJzOworCWludCBucl9kYmdh aGJfY2x1c3RlcnM7CisKKwlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGVfb2JqICppbmRleGVkX3JlZ3M7 CisJaW50IG5yX2luZGV4ZWRfcmVnczsKKworCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZV9vYmogKmRl YnVnYnVzOworCWludCBucl9kZWJ1Z2J1czsKKworCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZV9vYmog KnZiaWZfZGVidWdidXM7CisKKwlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGVfb2JqICpjeF9kZWJ1Z2J1 czsKKwlpbnQgbnJfY3hfZGVidWdidXM7Cit9OworCitzdGF0aWMgaW5saW5lIGludCBDUkFTSERV TVBfV1JJVEUodTY0ICppbiwgdTMyIHJlZywgdTMyIHZhbCkKK3sKKwlpblswXSA9IHZhbDsKKwlp blsxXSA9ICgoKHU2NCkgcmVnKSA8PCA0NCB8ICgxIDw8IDIxKSB8IDEpOworCisJcmV0dXJuIDI7 Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IENSQVNIRFVNUF9SRUFEKHU2NCAqaW4sIHUzMiByZWcs IHUzMiBkd29yZHMsIHU2NCB0YXJnZXQpCit7CisJaW5bMF0gPSB0YXJnZXQ7CisJaW5bMV0gPSAo KCh1NjQpIHJlZykgPDwgNDQgfCBkd29yZHMpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBp bmxpbmUgaW50IENSQVNIRFVNUF9GSU5JKHU2NCAqaW4pCit7CisJaW5bMF0gPSAwOworCWluWzFd ID0gMDsKKworCXJldHVybiAyOworfQorCitzdHJ1Y3QgYTZ4eF9jcmFzaGR1bXBlciB7CisJdm9p ZCAqcHRyOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqYm87CisJdTY0IGlvdmE7Cit9OworCisv KgorICogQWxsb2NhdGUgMU1CIGZvciB0aGUgY3Jhc2hkdW1wZXIgc2NyYXRjaCByZWdpb24gLSA4 ayBmb3IgdGhlIHNjcmlwdCBhbmQKKyAqIHRoZSByZXN0IGZvciB0aGUgZGF0YQorICovCisjZGVm aW5lIEE2WFhfQ0RfREFUQV9PRkZTRVQgODE5MgorI2RlZmluZSBBNlhYX0NEX0RBVEFfU0laRSAg KFNaXzFNIC0gODE5MikKKworc3RhdGljIGludCBhNnh4X2NyYXNoZHVtcGVyX2luaXQoc3RydWN0 IG1zbV9ncHUgKmdwdSwKKwkJc3RydWN0IGE2eHhfY3Jhc2hkdW1wZXIgKmR1bXBlcikKK3sKKwlk dW1wZXItPnB0ciA9IG1zbV9nZW1fa2VybmVsX25ld19sb2NrZWQoZ3B1LT5kZXYsCisJCVNaXzFN LCBNU01fQk9fVU5DQUNIRUQsIGdwdS0+YXNwYWNlLAorCQkmZHVtcGVyLT5ibywgJmR1bXBlci0+ aW92YSk7CisKKwlyZXR1cm4gSVNfRVJSKGR1bXBlci0+cHRyKSA/IFBUUl9FUlIoZHVtcGVyLT5w dHIpIDogMDsKK30KKworc3RhdGljIGludCBhNnh4X2NyYXNoZHVtcGVyX3J1bihzdHJ1Y3QgbXNt X2dwdSAqZ3B1LAorCQlzdHJ1Y3QgYTZ4eF9jcmFzaGR1bXBlciAqZHVtcGVyKQoreworCXN0cnVj dCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9fYWRyZW5vX2dwdShncHUpOworCXN0cnVjdCBh Nnh4X2dwdSAqYTZ4eF9ncHUgPSB0b19hNnh4X2dwdShhZHJlbm9fZ3B1KTsKKwl1MzIgdmFsOwor CWludCByZXQ7CisKKwlpZiAoSVNfRVJSX09SX05VTEwoZHVtcGVyLT5wdHIpKQorCQlyZXR1cm4g LUVJTlZBTDsKKworCWlmICghYTZ4eF9nbXVfc3B0cHJhY19pc19vbigmYTZ4eF9ncHUtPmdtdSkp CisJCXJldHVybiAtRUlOVkFMOworCisJLyogTWFrZSBzdXJlIGFsbCBwZW5kaW5nIG1lbW9yeSB3 cml0ZXMgYXJlIHBvc3RlZCAqLworCXdtYigpOworCisJZ3B1X3dyaXRlNjQoZ3B1LCBSRUdfQTZY WF9DUF9DUkFTSF9TQ1JJUFRfQkFTRV9MTywKKwkJUkVHX0E2WFhfQ1BfQ1JBU0hfU0NSSVBUX0JB U0VfSEksIGR1bXBlci0+aW92YSk7CisKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9DUkFT SF9EVU1QX0NOVEwsIDEpOworCisJcmV0ID0gZ3B1X3BvbGxfdGltZW91dChncHUsIFJFR19BNlhY X0NQX0NSQVNIX0RVTVBfU1RBVFVTLCB2YWwsCisJCXZhbCAmIDB4MDIsIDEwMCwgMTAwMDApOwor CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfQ1JBU0hfRFVNUF9DTlRMLCAwKTsKKworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhfY3Jhc2hkdW1wZXJfZnJlZShzdHJ1Y3Qg bXNtX2dwdSAqZ3B1LAorCQlzdHJ1Y3QgYTZ4eF9jcmFzaGR1bXBlciAqZHVtcGVyKQoreworCW1z bV9nZW1fcHV0X2lvdmEoZHVtcGVyLT5ibywgZ3B1LT5hc3BhY2UpOworCW1zbV9nZW1fcHV0X3Zh ZGRyKGR1bXBlci0+Ym8pOworCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoZHVtcGVyLT5i byk7Cit9CisKKy8qIHJlYWQgYSB2YWx1ZSBmcm9tIHRoZSBHWCBkZWJ1ZyBidXMgKi8KK3N0YXRp YyBpbnQgZGVidWdidXNfcmVhZChzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCB1MzIgYmxvY2ssIHUzMiBv ZmZzZXQsCisJCXUzMiAqZGF0YSkKK3sKKwl1MzIgcmVnID0gQTZYWF9EQkdDX0NGR19EQkdCVVNf U0VMX0RfUElOR19JTkRFWChvZmZzZXQpIHwKKwkJQTZYWF9EQkdDX0NGR19EQkdCVVNfU0VMX0Rf UElOR19CTEtfU0VMKGJsb2NrKTsKKworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0RCR0NfQ0ZH X0RCR0JVU19TRUxfQSwgcmVnKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9EQkdDX0NGR19E QkdCVVNfU0VMX0IsIHJlZyk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfREJHQ19DRkdfREJH QlVTX1NFTF9DLCByZWcpOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JV U19TRUxfRCwgcmVnKTsKKworCS8qIFdhaXQgMSB1cyB0byBtYWtlIHN1cmUgdGhlIGRhdGEgaXMg Zmxvd2luZyAqLworCXVkZWxheSgxKTsKKworCWRhdGFbMF0gPSBncHVfcmVhZChncHUsIFJFR19B NlhYX0RCR0NfQ0ZHX0RCR0JVU19UUkFDRV9CVUYyKTsKKwlkYXRhWzFdID0gZ3B1X3JlYWQoZ3B1 LCBSRUdfQTZYWF9EQkdDX0NGR19EQkdCVVNfVFJBQ0VfQlVGMSk7CisKKwlyZXR1cm4gMjsKK30K KworI2RlZmluZSBjeGRiZ193cml0ZShwdHIsIG9mZnNldCwgdmFsKSBcCisJbXNtX3dyaXRlbCgo dmFsKSwgKHB0cikgKyAoKG9mZnNldCkgPDwgMikpCisKKyNkZWZpbmUgY3hkYmdfcmVhZChwdHIs IG9mZnNldCkgXAorCW1zbV9yZWFkbCgocHRyKSArICgob2Zmc2V0KSA8PCAyKSkKKworLyogcmVh ZCBhIHZhbHVlIGZyb20gdGhlIENYIGRlYnVnIGJ1cyAqLworc3RhdGljIGludCBjeF9kZWJ1Z2J1 c19yZWFkKHZvaWQgKl9faW9tZW0gY3hkYmcsIHUzMiBibG9jaywgdTMyIG9mZnNldCwKKwkJdTMy ICpkYXRhKQoreworCXUzMiByZWcgPSBBNlhYX0NYX0RCR0NfQ0ZHX0RCR0JVU19TRUxfQV9QSU5H X0lOREVYKG9mZnNldCkgfAorCQlBNlhYX0NYX0RCR0NfQ0ZHX0RCR0JVU19TRUxfQV9QSU5HX0JM S19TRUwoYmxvY2spOworCisJY3hkYmdfd3JpdGUoY3hkYmcsIFJFR19BNlhYX0NYX0RCR0NfQ0ZH X0RCR0JVU19TRUxfQSwgcmVnKTsKKwljeGRiZ193cml0ZShjeGRiZywgUkVHX0E2WFhfQ1hfREJH Q19DRkdfREJHQlVTX1NFTF9CLCByZWcpOworCWN4ZGJnX3dyaXRlKGN4ZGJnLCBSRUdfQTZYWF9D WF9EQkdDX0NGR19EQkdCVVNfU0VMX0MsIHJlZyk7CisJY3hkYmdfd3JpdGUoY3hkYmcsIFJFR19B NlhYX0NYX0RCR0NfQ0ZHX0RCR0JVU19TRUxfRCwgcmVnKTsKKworCS8qIFdhaXQgMSB1cyB0byBt YWtlIHN1cmUgdGhlIGRhdGEgaXMgZmxvd2luZyAqLworCXVkZWxheSgxKTsKKworCWRhdGFbMF0g PSBjeGRiZ19yZWFkKGN4ZGJnLCBSRUdfQTZYWF9DWF9EQkdDX0NGR19EQkdCVVNfVFJBQ0VfQlVG Mik7CisJZGF0YVsxXSA9IGN4ZGJnX3JlYWQoY3hkYmcsIFJFR19BNlhYX0NYX0RCR0NfQ0ZHX0RC R0JVU19UUkFDRV9CVUYxKTsKKworCXJldHVybiAyOworfQorCisvKiBSZWFkIGEgY2h1bmsgb2Yg ZGF0YSBmcm9tIHRoZSBWQklGIGRlYnVnIGJ1cyAqLworc3RhdGljIGludCB2YmlmX2RlYnVnYnVz X3JlYWQoc3RydWN0IG1zbV9ncHUgKmdwdSwgdTMyIGN0cmwwLCB1MzIgY3RybDEsCisJCXUzMiBy ZWcsIGludCBjb3VudCwgdTMyICpkYXRhKQoreworCWludCBpOworCisJZ3B1X3dyaXRlKGdwdSwg Y3RybDAsIHJlZyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlncHVfd3Jp dGUoZ3B1LCBjdHJsMSwgaSk7CisJCWRhdGFbaV0gPSBncHVfcmVhZChncHUsIFJFR19BNlhYX1ZC SUZfVEVTVF9CVVNfT1VUKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKyNkZWZpbmUgQVhJ X0FSQl9CTE9DS1MgMgorI2RlZmluZSBYSU5fQVhJX0JMT0NLUyA1CisjZGVmaW5lIFhJTl9DT1JF X0JMT0NLUyA0CisKKyNkZWZpbmUgVkJJRl9ERUJVR0JVU19CTE9DS19TSVpFIFwKKwkoKDE2ICog QVhJX0FSQl9CTE9DS1MpICsgXAorCSAoMTggKiBYSU5fQVhJX0JMT0NLUykgKyBcCisJICgxMiAq IFhJTl9DT1JFX0JMT0NLUykpCisKK3N0YXRpYyB2b2lkIGE2eHhfZ2V0X3ZiaWZfZGVidWdidXNf YmxvY2soc3RydWN0IG1zbV9ncHUgKmdwdSwKKwkJc3RydWN0IGE2eHhfZ3B1X3N0YXRlX29iaiAq b2JqKQoreworCXUzMiBjbGssICpwdHI7CisJaW50IGk7CisKKwlvYmotPmRhdGEgPSBrY2FsbG9j KFZCSUZfREVCVUdCVVNfQkxPQ0tfU0laRSwgc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOworCW9i ai0+aGFuZGxlID0gTlVMTDsKKworCS8qIEdldCB0aGUgY3VycmVudCBjbG9jayBzZXR0aW5nICov CisJY2xrID0gZ3B1X3JlYWQoZ3B1LCBSRUdfQTZYWF9WQklGX0NMS09OKTsKKworCS8qIEZvcmNl IG9uIHRoZSBidXMgc28gd2UgY2FuIHJlYWQgaXQgKi8KKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZY WF9WQklGX0NMS09OLAorCQljbGsgfCBBNlhYX1ZCSUZfQ0xLT05fRk9SQ0VfT05fVEVTVEJVUyk7 CisKKwkvKiBXZSB3aWxsIHJlYWQgZnJvbSBCVVMyIGZpcnN0LCBzbyBkaXNhYmxlIEJVUzEgKi8K KwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9WQklGX1RFU1RfQlVTMV9DVFJMMCwgMCk7CisKKwkv KiBFbmFibGUgdGhlIFZCSUYgYnVzIGZvciByZWFkaW5nICovCisJZ3B1X3dyaXRlKGdwdSwgUkVH X0E2WFhfVkJJRl9URVNUX0JVU19PVVRfQ1RSTCwgMSk7CisKKwlwdHIgPSBvYmotPmRhdGE7CisK Kwlmb3IgKGkgPSAwOyBpIDwgQVhJX0FSQl9CTE9DS1M7IGkrKykKKwkJcHRyICs9IHZiaWZfZGVi dWdidXNfcmVhZChncHUsCisJCQlSRUdfQTZYWF9WQklGX1RFU1RfQlVTMl9DVFJMMCwKKwkJCVJF R19BNlhYX1ZCSUZfVEVTVF9CVVMyX0NUUkwxLAorCQkJMSA8PCAoaSArIDE2KSwgMTYsIHB0cik7 CisKKwlmb3IgKGkgPSAwOyBpIDwgWElOX0FYSV9CTE9DS1M7IGkrKykKKwkJcHRyICs9IHZiaWZf ZGVidWdidXNfcmVhZChncHUsCisJCQlSRUdfQTZYWF9WQklGX1RFU1RfQlVTMl9DVFJMMCwKKwkJ CVJFR19BNlhYX1ZCSUZfVEVTVF9CVVMyX0NUUkwxLAorCQkJMSA8PCBpLCAxOCwgcHRyKTsKKwor CS8qIFN0b3AgQlVTMiBzbyB3ZSBjYW4gdHVybiBvbiBCVVMxICovCisJZ3B1X3dyaXRlKGdwdSwg UkVHX0E2WFhfVkJJRl9URVNUX0JVUzJfQ1RSTDAsIDApOworCisJZm9yIChpID0gMDsgaSA8IFhJ Tl9DT1JFX0JMT0NLUzsgaSsrKQorCQlwdHIgKz0gdmJpZl9kZWJ1Z2J1c19yZWFkKGdwdSwKKwkJ CVJFR19BNlhYX1ZCSUZfVEVTVF9CVVMxX0NUUkwwLAorCQkJUkVHX0E2WFhfVkJJRl9URVNUX0JV UzFfQ1RSTDEsCisJCQkxIDw8IGksIDEyLCBwdHIpOworCisJLyogUmVzdG9yZSB0aGUgVkJJRiBj bG9jayBzZXR0aW5nICovCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfVkJJRl9DTEtPTiwgY2xr KTsKK30KKworc3RhdGljIHZvaWQgYTZ4eF9nZXRfZGVidWdidXNfYmxvY2soc3RydWN0IG1zbV9n cHUgKmdwdSwKKwkJY29uc3Qgc3RydWN0IGE2eHhfZGVidWdidXNfYmxvY2sgKmJsb2NrLAorCQlz dHJ1Y3QgYTZ4eF9ncHVfc3RhdGVfb2JqICpvYmopCit7CisJaW50IGk7CisJdTMyICpwdHI7CisK KwlvYmotPmRhdGEgPSBrY2FsbG9jKGJsb2NrLT5jb3VudCwgc2l6ZW9mKHU2NCksIEdGUF9LRVJO RUwpOworCWlmICghb2JqLT5kYXRhKQorCQlyZXR1cm47CisKKwlvYmotPmhhbmRsZSA9IGJsb2Nr OworCisJZm9yIChwdHIgPSBvYmotPmRhdGEsIGkgPSAwOyBpIDwgYmxvY2stPmNvdW50OyBpKysp CisJCXB0ciArPSBkZWJ1Z2J1c19yZWFkKGdwdSwgYmxvY2stPmlkLCBpLCBwdHIpOworfQorCitz dGF0aWMgdm9pZCBhNnh4X2dldF9jeF9kZWJ1Z2J1c19ibG9jayh2b2lkIF9faW9tZW0gKmN4ZGJn LAorCQljb25zdCBzdHJ1Y3QgYTZ4eF9kZWJ1Z2J1c19ibG9jayAqYmxvY2ssCisJCXN0cnVjdCBh Nnh4X2dwdV9zdGF0ZV9vYmogKm9iaikKK3sKKwlpbnQgaTsKKwl1MzIgKnB0cjsKKworCW9iai0+ ZGF0YSA9IGtjYWxsb2MoYmxvY2stPmNvdW50LCBzaXplb2YodTY0KSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFvYmotPmRhdGEpCisJCXJldHVybjsKKworCW9iai0+aGFuZGxlID0gYmxvY2s7CisKKwlm b3IgKHB0ciA9IG9iai0+ZGF0YSwgaSA9IDA7IGkgPCBibG9jay0+Y291bnQ7IGkrKykKKwkJcHRy ICs9IGN4X2RlYnVnYnVzX3JlYWQoY3hkYmcsIGJsb2NrLT5pZCwgaSwgcHRyKTsKK30KKworc3Rh dGljIHZvaWQgYTZ4eF9nZXRfZGVidWdidXMoc3RydWN0IG1zbV9ncHUgKmdwdSwKKwkJc3RydWN0 IGE2eHhfZ3B1X3N0YXRlICphNnh4X3N0YXRlKQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwor CXZvaWQgX19pb21lbSAqY3hkYmcgPSBOVUxMOworCisJLyogU2V0IHVwIHRoZSBHWCBkZWJ1ZyBi dXMgKi8KKworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JVU19DTlRMVCwK KwkJQTZYWF9EQkdDX0NGR19EQkdCVVNfQ05UTFRfU0VHVCgweGYpKTsKKworCWdwdV93cml0ZShn cHUsIFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JVU19DTlRMTSwKKwkJQTZYWF9EQkdDX0NGR19EQkdC VVNfQ05UTE1fRU5BQkxFKDB4ZikpOworCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfREJHQ19D RkdfREJHQlVTX0lWVExfMCwgMCk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfREJHQ19DRkdf REJHQlVTX0lWVExfMSwgMCk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfREJHQ19DRkdfREJH QlVTX0lWVExfMiwgMCk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfREJHQ19DRkdfREJHQlVT X0lWVExfMywgMCk7CisKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9EQkdDX0NGR19EQkdCVVNf QllURUxfMCwgMHg3NjU0MzIxMCk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfREJHQ19DRkdf REJHQlVTX0JZVEVMXzEsIDB4RkVEQ0JBOTgpOworCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhf REJHQ19DRkdfREJHQlVTX01BU0tMXzAsIDApOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0RC R0NfQ0ZHX0RCR0JVU19NQVNLTF8xLCAwKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9EQkdD X0NGR19EQkdCVVNfTUFTS0xfMiwgMCk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfREJHQ19D RkdfREJHQlVTX01BU0tMXzMsIDApOworCisJLyogU2V0IHVwIHRoZSBDWCBkZWJ1ZyBidXMgLSBp dCBsaXZlcyBlbHNld2hlcmUgaW4gdGhlIHN5c3RlbSBzbyBkbyBhCisJICogdGVtcG9yYXJ5IGlv cmVtYXAgZm9yIHRoZSByZWdpc3RlcnMKKwkgKi8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3Vy Y2VfYnluYW1lKGdwdS0+cGRldiwgSU9SRVNPVVJDRV9NRU0sCisJCQkiY3hfZGJnYyIpOworCisJ aWYgKHJlcykKKwkJY3hkYmcgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVz KSk7CisKKwlpZiAoY3hkYmcpIHsKKwkJY3hkYmdfd3JpdGUoY3hkYmcsIFJFR19BNlhYX0RCR0Nf Q0ZHX0RCR0JVU19DTlRMVCwKKwkJCUE2WFhfREJHQ19DRkdfREJHQlVTX0NOVExUX1NFR1QoMHhm KSk7CisKKwkJY3hkYmdfd3JpdGUoY3hkYmcsIFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JVU19DTlRM TSwKKwkJCUE2WFhfREJHQ19DRkdfREJHQlVTX0NOVExNX0VOQUJMRSgweGYpKTsKKworCQljeGRi Z193cml0ZShjeGRiZywgUkVHX0E2WFhfREJHQ19DRkdfREJHQlVTX0lWVExfMCwgMCk7CisJCWN4 ZGJnX3dyaXRlKGN4ZGJnLCBSRUdfQTZYWF9EQkdDX0NGR19EQkdCVVNfSVZUTF8xLCAwKTsKKwkJ Y3hkYmdfd3JpdGUoY3hkYmcsIFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JVU19JVlRMXzIsIDApOwor CQljeGRiZ193cml0ZShjeGRiZywgUkVHX0E2WFhfREJHQ19DRkdfREJHQlVTX0lWVExfMywgMCk7 CisKKwkJY3hkYmdfd3JpdGUoY3hkYmcsIFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JVU19CWVRFTF8w LAorCQkJMHg3NjU0MzIxMCk7CisJCWN4ZGJnX3dyaXRlKGN4ZGJnLCBSRUdfQTZYWF9EQkdDX0NG R19EQkdCVVNfQllURUxfMSwKKwkJCTB4RkVEQ0JBOTgpOworCisJCWN4ZGJnX3dyaXRlKGN4ZGJn LCBSRUdfQTZYWF9EQkdDX0NGR19EQkdCVVNfTUFTS0xfMCwgMCk7CisJCWN4ZGJnX3dyaXRlKGN4 ZGJnLCBSRUdfQTZYWF9EQkdDX0NGR19EQkdCVVNfTUFTS0xfMSwgMCk7CisJCWN4ZGJnX3dyaXRl KGN4ZGJnLCBSRUdfQTZYWF9EQkdDX0NGR19EQkdCVVNfTUFTS0xfMiwgMCk7CisJCWN4ZGJnX3dy aXRlKGN4ZGJnLCBSRUdfQTZYWF9EQkdDX0NGR19EQkdCVVNfTUFTS0xfMywgMCk7CisJfQorCisJ YTZ4eF9zdGF0ZS0+ZGVidWdidXMgPSBrY2FsbG9jKEFSUkFZX1NJWkUoYTZ4eF9kZWJ1Z2J1c19i bG9ja3MpLAorCQlzaXplb2YoKmE2eHhfc3RhdGUtPmRlYnVnYnVzKSwgR0ZQX0tFUk5FTCk7CisK KwlpZiAoYTZ4eF9zdGF0ZS0+ZGVidWdidXMpIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUoYTZ4eF9kZWJ1Z2J1c19ibG9ja3MpOyBpKyspCisJCQlhNnh4X2dldF9k ZWJ1Z2J1c19ibG9jayhncHUsCisJCQkJJmE2eHhfZGVidWdidXNfYmxvY2tzW2ldLAorCQkJCSZh Nnh4X3N0YXRlLT5kZWJ1Z2J1c1tpXSk7CisKKwkJYTZ4eF9zdGF0ZS0+bnJfZGVidWdidXMgPSBB UlJBWV9TSVpFKGE2eHhfZGVidWdidXNfYmxvY2tzKTsKKwl9CisKKwlhNnh4X3N0YXRlLT52Ymlm X2RlYnVnYnVzID0ga3phbGxvYyhzaXplb2YoKmE2eHhfc3RhdGUtPnZiaWZfZGVidWdidXMpLAor CQlHRlBfS0VSTkVMKTsKKworCWlmIChhNnh4X3N0YXRlLT52YmlmX2RlYnVnYnVzKQorCQlhNnh4 X2dldF92YmlmX2RlYnVnYnVzX2Jsb2NrKGdwdSwgYTZ4eF9zdGF0ZS0+dmJpZl9kZWJ1Z2J1cyk7 CisKKwlpZiAoY3hkYmcpIHsKKwkJYTZ4eF9zdGF0ZS0+Y3hfZGVidWdidXMgPQorCQkJa2NhbGxv YyhBUlJBWV9TSVpFKGE2eHhfY3hfZGVidWdidXNfYmxvY2tzKSwKKwkJCXNpemVvZigqYTZ4eF9z dGF0ZS0+Y3hfZGVidWdidXMpLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoYTZ4eF9zdGF0ZS0+Y3hf ZGVidWdidXMpIHsKKwkJCWludCBpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShh Nnh4X2N4X2RlYnVnYnVzX2Jsb2Nrcyk7IGkrKykKKwkJCQlhNnh4X2dldF9jeF9kZWJ1Z2J1c19i bG9jayhjeGRiZywKKwkJCQkJJmE2eHhfY3hfZGVidWdidXNfYmxvY2tzW2ldLAorCQkJCQkmYTZ4 eF9zdGF0ZS0+Y3hfZGVidWdidXNbaV0pOworCisJCQlhNnh4X3N0YXRlLT5ucl9jeF9kZWJ1Z2J1 cyA9CisJCQkJQVJSQVlfU0laRShhNnh4X2N4X2RlYnVnYnVzX2Jsb2Nrcyk7CisJCX0KKworCQlp b3VubWFwKGN4ZGJnKTsKKwl9Cit9CisKKyNkZWZpbmUgUkFOR0UocmVnLCBhKSAoKHJlZylbKGEp ICsgMV0gLSAocmVnKVsoYSldICsgMSkKKworLyogUmVhZCBhIGRhdGEgY2x1c3RlciBmcm9tIGJl aGluZCB0aGUgQUhCIGFwZXJ0dXJlICovCitzdGF0aWMgdm9pZCBhNnh4X2dldF9kYmdhaGJfY2x1 c3RlcihzdHJ1Y3QgbXNtX2dwdSAqZ3B1LAorCQljb25zdCBzdHJ1Y3QgYTZ4eF9kYmdhaGJfY2x1 c3RlciAqZGJnYWhiLAorCQlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGVfb2JqICpvYmosCisJCXN0cnVj dCBhNnh4X2NyYXNoZHVtcGVyICpkdW1wZXIpCit7CisJdTY0ICppbiA9IGR1bXBlci0+cHRyOwor CXU2NCBvdXQgPSBkdW1wZXItPmlvdmEgKyBBNlhYX0NEX0RBVEFfT0ZGU0VUOworCXNpemVfdCBk YXRhc2l6ZTsKKwlpbnQgaSwgcmVnY291bnQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IEE2WFhf TlVNX0NPTlRFWFRTOyBpKyspIHsKKwkJaW50IGo7CisKKwkJaW4gKz0gQ1JBU0hEVU1QX1dSSVRF KGluLCBSRUdfQTZYWF9ITFNRX0RCR19SRUFEX1NFTCwKKwkJCShkYmdhaGItPnN0YXRldHlwZSAr IGkgKiAyKSA8PCA4KTsKKworCQlmb3IgKGogPSAwOyBqIDwgZGJnYWhiLT5jb3VudDsgaiArPSAy KSB7CisJCQlpbnQgY291bnQgPSBSQU5HRShkYmdhaGItPnJlZ2lzdGVycywgaik7CisJCQl1MzIg b2Zmc2V0ID0gUkVHX0E2WFhfSExTUV9EQkdfQUhCX1JFQURfQVBFUlRVUkUgKworCQkJCWRiZ2Fo Yi0+cmVnaXN0ZXJzW2pdIC0gKGRiZ2FoYi0+YmFzZSA+PiAyKTsKKworCQkJaW4gKz0gQ1JBU0hE VU1QX1JFQUQoaW4sIG9mZnNldCwgY291bnQsIG91dCk7CisKKwkJCW91dCArPSBjb3VudCAqIHNp emVvZih1MzIpOworCisJCQlpZiAoaSA9PSAwKQorCQkJCXJlZ2NvdW50ICs9IGNvdW50OworCQl9 CisJfQorCisJQ1JBU0hEVU1QX0ZJTkkoaW4pOworCisJZGF0YXNpemUgPSByZWdjb3VudCAqIEE2 WFhfTlVNX0NPTlRFWFRTICogc2l6ZW9mKHUzMik7CisKKwlpZiAoV0FSTl9PTihkYXRhc2l6ZSA+ IEE2WFhfQ0RfREFUQV9TSVpFKSkKKwkJcmV0dXJuOworCisJaWYgKGE2eHhfY3Jhc2hkdW1wZXJf cnVuKGdwdSwgZHVtcGVyKSkKKwkJcmV0dXJuOworCisJb2JqLT5oYW5kbGUgPSBkYmdhaGI7CisJ b2JqLT5kYXRhID0ga21lbWR1cChkdW1wZXItPnB0ciArIEE2WFhfQ0RfREFUQV9PRkZTRVQsCisJ CWRhdGFzaXplLCBHRlBfS0VSTkVMKTsKK30KKworc3RhdGljIHZvaWQgYTZ4eF9nZXRfZGJnYWhi X2NsdXN0ZXJzKHN0cnVjdCBtc21fZ3B1ICpncHUsCisJCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZSAq YTZ4eF9zdGF0ZSwKKwkJc3RydWN0IGE2eHhfY3Jhc2hkdW1wZXIgKmR1bXBlcikKK3sKKwlpbnQg aTsKKworCWE2eHhfc3RhdGUtPmRiZ2FoYl9jbHVzdGVycyA9IGtjYWxsb2MoQVJSQVlfU0laRShh Nnh4X2RiZ2FoYl9jbHVzdGVycyksCisJCXNpemVvZigqYTZ4eF9zdGF0ZS0+ZGJnYWhiX2NsdXN0 ZXJzKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWE2eHhfc3RhdGUtPmRiZ2FoYl9jbHVzdGVycykK KwkJcmV0dXJuOworCisJYTZ4eF9zdGF0ZS0+bnJfZGJnYWhiX2NsdXN0ZXJzID0gQVJSQVlfU0la RShhNnh4X2RiZ2FoYl9jbHVzdGVycyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShh Nnh4X2RiZ2FoYl9jbHVzdGVycyk7IGkrKykKKwkJYTZ4eF9nZXRfZGJnYWhiX2NsdXN0ZXIoZ3B1 LCAmYTZ4eF9kYmdhaGJfY2x1c3RlcnNbaV0sCisJCQkmYTZ4eF9zdGF0ZS0+ZGJnYWhiX2NsdXN0 ZXJzW2ldLCBkdW1wZXIpOworfQorCisvKiBSZWFkIGEgZGF0YSBjbHVzdGVyIGZyb20gdGhlIENQ IGFwZXJ0dXJlIHdpdGggdGhlIGNyYXNoZHVtcGVyICovCitzdGF0aWMgdm9pZCBhNnh4X2dldF9j bHVzdGVyKHN0cnVjdCBtc21fZ3B1ICpncHUsCisJCWNvbnN0IHN0cnVjdCBhNnh4X2NsdXN0ZXIg KmNsdXN0ZXIsCisJCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZV9vYmogKm9iaiwKKwkJc3RydWN0IGE2 eHhfY3Jhc2hkdW1wZXIgKmR1bXBlcikKK3sKKwl1NjQgKmluID0gZHVtcGVyLT5wdHI7CisJdTY0 IG91dCA9IGR1bXBlci0+aW92YSArIEE2WFhfQ0RfREFUQV9PRkZTRVQ7CisJc2l6ZV90IGRhdGFz aXplOworCWludCBpLCByZWdjb3VudCA9IDA7CisKKwkvKiBTb21lIGNsdXN0ZXJzIG5lZWQgYSBz ZWxlY3RvciByZWdpc3RlciB0byBiZSBwcm9ncmFtbWVkIHRvbyAqLworCWlmIChjbHVzdGVyLT5z ZWxfcmVnKQorCQlpbiArPSBDUkFTSERVTVBfV1JJVEUoaW4sIGNsdXN0ZXItPnNlbF9yZWcsIGNs dXN0ZXItPnNlbF92YWwpOworCisJZm9yIChpID0gMDsgaSA8IEE2WFhfTlVNX0NPTlRFWFRTOyBp KyspIHsKKwkJaW50IGo7CisKKwkJaW4gKz0gQ1JBU0hEVU1QX1dSSVRFKGluLCBSRUdfQTZYWF9D UF9BUEVSVFVSRV9DTlRMX0NELAorCQkJKGNsdXN0ZXItPmlkIDw8IDgpIHwgKGkgPDwgNCkgfCBp KTsKKworCQlmb3IgKGogPSAwOyBqIDwgY2x1c3Rlci0+Y291bnQ7IGogKz0gMikgeworCQkJaW50 IGNvdW50ID0gUkFOR0UoY2x1c3Rlci0+cmVnaXN0ZXJzLCBqKTsKKworCQkJaW4gKz0gQ1JBU0hE VU1QX1JFQUQoaW4sIGNsdXN0ZXItPnJlZ2lzdGVyc1tqXSwKKwkJCQljb3VudCwgb3V0KTsKKwor CQkJb3V0ICs9IGNvdW50ICogc2l6ZW9mKHUzMik7CisKKwkJCWlmIChpID09IDApCisJCQkJcmVn Y291bnQgKz0gY291bnQ7CisJCX0KKwl9CisKKwlDUkFTSERVTVBfRklOSShpbik7CisKKwlkYXRh c2l6ZSA9IHJlZ2NvdW50ICogQTZYWF9OVU1fQ09OVEVYVFMgKiBzaXplb2YodTMyKTsKKworCWlm IChXQVJOX09OKGRhdGFzaXplID4gQTZYWF9DRF9EQVRBX1NJWkUpKQorCQlyZXR1cm47CisKKwlp ZiAoYTZ4eF9jcmFzaGR1bXBlcl9ydW4oZ3B1LCBkdW1wZXIpKQorCQlyZXR1cm47CisKKwlvYmot PmhhbmRsZSA9IGNsdXN0ZXI7CisJb2JqLT5kYXRhID0ga21lbWR1cChkdW1wZXItPnB0ciArIEE2 WFhfQ0RfREFUQV9PRkZTRVQsCisJCWRhdGFzaXplLCBHRlBfS0VSTkVMKTsKK30KKworc3RhdGlj IHZvaWQgYTZ4eF9nZXRfY2x1c3RlcnMoc3RydWN0IG1zbV9ncHUgKmdwdSwKKwkJc3RydWN0IGE2 eHhfZ3B1X3N0YXRlICphNnh4X3N0YXRlLAorCQlzdHJ1Y3QgYTZ4eF9jcmFzaGR1bXBlciAqZHVt cGVyKQoreworCWludCBpOworCisJYTZ4eF9zdGF0ZS0+Y2x1c3RlcnMgPSBrY2FsbG9jKEFSUkFZ X1NJWkUoYTZ4eF9jbHVzdGVycyksCisJCXNpemVvZigqYTZ4eF9zdGF0ZS0+Y2x1c3RlcnMpLCBH RlBfS0VSTkVMKTsKKworCWlmICghYTZ4eF9zdGF0ZS0+Y2x1c3RlcnMpCisJCXJldHVybjsKKwor CWE2eHhfc3RhdGUtPm5yX2NsdXN0ZXJzID0gQVJSQVlfU0laRShhNnh4X2NsdXN0ZXJzKTsKKwor CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGE2eHhfY2x1c3RlcnMpOyBpKyspCisJCWE2eHhf Z2V0X2NsdXN0ZXIoZ3B1LCAmYTZ4eF9jbHVzdGVyc1tpXSwKKwkJCSZhNnh4X3N0YXRlLT5jbHVz dGVyc1tpXSwgZHVtcGVyKTsKK30KKworLyogUmVhZCBhIHNoYWRlciAvIGRlYnVnIGJsb2NrIGZy b20gdGhlIEhMU1EgYXBlcnR1cmUgd2l0aCB0aGUgY3Jhc2hkdW1wZXIgKi8KK3N0YXRpYyB2b2lk IGE2eHhfZ2V0X3NoYWRlcl9ibG9jayhzdHJ1Y3QgbXNtX2dwdSAqZ3B1LAorCQljb25zdCBzdHJ1 Y3QgYTZ4eF9zaGFkZXJfYmxvY2sgKmJsb2NrLAorCQlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGVfb2Jq ICpvYmosCisJCXN0cnVjdCBhNnh4X2NyYXNoZHVtcGVyICpkdW1wZXIpCit7CisJdTY0ICppbiA9 IGR1bXBlci0+cHRyOworCXNpemVfdCBkYXRhc2l6ZSA9IGJsb2NrLT5zaXplICogQTZYWF9OVU1f U0hBREVSX0JBTktTICogc2l6ZW9mKHUzMik7CisJaW50IGk7CisKKwlpZiAoV0FSTl9PTihkYXRh c2l6ZSA+IEE2WFhfQ0RfREFUQV9TSVpFKSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8 IEE2WFhfTlVNX1NIQURFUl9CQU5LUzsgaSsrKSB7CisJCWluICs9IENSQVNIRFVNUF9XUklURShp biwgUkVHX0E2WFhfSExTUV9EQkdfUkVBRF9TRUwsCisJCQkoYmxvY2stPnR5cGUgPDwgOCkgfCBp KTsKKworCQlpbiArPSBDUkFTSERVTVBfUkVBRChpbiwgUkVHX0E2WFhfSExTUV9EQkdfQUhCX1JF QURfQVBFUlRVUkUsCisJCQlibG9jay0+c2l6ZSwgZHVtcGVyLT5pb3ZhICsgQTZYWF9DRF9EQVRB X09GRlNFVCk7CisJfQorCisJQ1JBU0hEVU1QX0ZJTkkoaW4pOworCisJaWYgKGE2eHhfY3Jhc2hk dW1wZXJfcnVuKGdwdSwgZHVtcGVyKSkKKwkJcmV0dXJuOworCisJb2JqLT5oYW5kbGUgPSBibG9j azsKKwlvYmotPmRhdGEgPSBrbWVtZHVwKGR1bXBlci0+cHRyICsgQTZYWF9DRF9EQVRBX09GRlNF VCwKKwkJZGF0YXNpemUsIEdGUF9LRVJORUwpOworfQorCitzdGF0aWMgdm9pZCBhNnh4X2dldF9z aGFkZXJzKHN0cnVjdCBtc21fZ3B1ICpncHUsCisJCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZSAqYTZ4 eF9zdGF0ZSwKKwkJc3RydWN0IGE2eHhfY3Jhc2hkdW1wZXIgKmR1bXBlcikKK3sKKwlpbnQgaTsK KworCWE2eHhfc3RhdGUtPnNoYWRlcnMgPSBrY2FsbG9jKEFSUkFZX1NJWkUoYTZ4eF9zaGFkZXJf YmxvY2tzKSwKKwkJc2l6ZW9mKCphNnh4X3N0YXRlLT5zaGFkZXJzKSwgR0ZQX0tFUk5FTCk7CisK KwlpZiAoIWE2eHhfc3RhdGUtPnNoYWRlcnMpCisJCXJldHVybjsKKworCWE2eHhfc3RhdGUtPm5y X3NoYWRlcnMgPSBBUlJBWV9TSVpFKGE2eHhfc2hhZGVyX2Jsb2Nrcyk7CisKKwlmb3IgKGkgPSAw OyBpIDwgQVJSQVlfU0laRShhNnh4X3NoYWRlcl9ibG9ja3MpOyBpKyspCisJCWE2eHhfZ2V0X3No YWRlcl9ibG9jayhncHUsICZhNnh4X3NoYWRlcl9ibG9ja3NbaV0sCisJCQkmYTZ4eF9zdGF0ZS0+ c2hhZGVyc1tpXSwgZHVtcGVyKTsKK30KKworLyogUmVhZCByZWdpc3RlcnMgZnJvbSBiZWhpbmQg dGhlIEhMU1EgYXBlcnR1cmUgd2l0aCB0aGUgY3Jhc2hkdW1wZXIgKi8KK3N0YXRpYyB2b2lkIGE2 eHhfZ2V0X2NyYXNoZHVtcGVyX2hsc3FfcmVnaXN0ZXJzKHN0cnVjdCBtc21fZ3B1ICpncHUsCisJ CWNvbnN0IHN0cnVjdCBhNnh4X3JlZ2lzdGVycyAqcmVncywKKwkJc3RydWN0IGE2eHhfZ3B1X3N0 YXRlX29iaiAqb2JqLAorCQlzdHJ1Y3QgYTZ4eF9jcmFzaGR1bXBlciAqZHVtcGVyKQorCit7CisJ dTY0ICppbiA9IGR1bXBlci0+cHRyOworCXU2NCBvdXQgPSBkdW1wZXItPmlvdmEgKyBBNlhYX0NE X0RBVEFfT0ZGU0VUOworCWludCBpLCByZWdjb3VudCA9IDA7CisKKwlpbiArPSBDUkFTSERVTVBf V1JJVEUoaW4sIFJFR19BNlhYX0hMU1FfREJHX1JFQURfU0VMLCByZWdzLT52YWwxKTsKKworCWZv ciAoaSA9IDA7IGkgPCByZWdzLT5jb3VudDsgaSArPSAyKSB7CisJCXUzMiBjb3VudCA9IFJBTkdF KHJlZ3MtPnJlZ2lzdGVycywgaSk7CisJCXUzMiBvZmZzZXQgPSBSRUdfQTZYWF9ITFNRX0RCR19B SEJfUkVBRF9BUEVSVFVSRSArCisJCQlyZWdzLT5yZWdpc3RlcnNbaV0gLSAocmVncy0+dmFsMCA+ PiAyKTsKKworCQlpbiArPSBDUkFTSERVTVBfUkVBRChpbiwgb2Zmc2V0LCBjb3VudCwgb3V0KTsK KworCQlvdXQgKz0gY291bnQgKiBzaXplb2YodTMyKTsKKwkJcmVnY291bnQgKz0gY291bnQ7CisJ fQorCisJQ1JBU0hEVU1QX0ZJTkkoaW4pOworCisJaWYgKFdBUk5fT04oKHJlZ2NvdW50ICogc2l6 ZW9mKHUzMikpID4gQTZYWF9DRF9EQVRBX1NJWkUpKQorCQlyZXR1cm47CisKKwlpZiAoYTZ4eF9j cmFzaGR1bXBlcl9ydW4oZ3B1LCBkdW1wZXIpKQorCQlyZXR1cm47CisKKwlvYmotPmhhbmRsZSA9 IHJlZ3M7CisJb2JqLT5kYXRhID0ga21lbWR1cChkdW1wZXItPnB0ciArIEE2WFhfQ0RfREFUQV9P RkZTRVQsCisJCXJlZ2NvdW50ICogc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOworfQorCisvKiBS ZWFkIGEgYmxvY2sgb2YgcmVnaXN0ZXJzIHVzaW5nIHRoZSBjcmFzaGR1bXBlciAqLworc3RhdGlj IHZvaWQgYTZ4eF9nZXRfY3Jhc2hkdW1wZXJfcmVnaXN0ZXJzKHN0cnVjdCBtc21fZ3B1ICpncHUs CisJCWNvbnN0IHN0cnVjdCBhNnh4X3JlZ2lzdGVycyAqcmVncywKKwkJc3RydWN0IGE2eHhfZ3B1 X3N0YXRlX29iaiAqb2JqLAorCQlzdHJ1Y3QgYTZ4eF9jcmFzaGR1bXBlciAqZHVtcGVyKQorCit7 CisJdTY0ICppbiA9IGR1bXBlci0+cHRyOworCXU2NCBvdXQgPSBkdW1wZXItPmlvdmEgKyBBNlhY X0NEX0RBVEFfT0ZGU0VUOworCWludCBpLCByZWdjb3VudCA9IDA7CisKKwkvKiBTb21lIGJsb2Nr cyBtaWdodCBuZWVkIHRvIHByb2dyYW0gYSBzZWxlY3RvciByZWdpc3RlciBmaXJzdCAqLworCWlm IChyZWdzLT52YWwwKQorCQlpbiArPSBDUkFTSERVTVBfV1JJVEUoaW4sIHJlZ3MtPnZhbDAsIHJl Z3MtPnZhbDEpOworCisJZm9yIChpID0gMDsgaSA8IHJlZ3MtPmNvdW50OyBpICs9IDIpIHsKKwkJ dTMyIGNvdW50ID0gUkFOR0UocmVncy0+cmVnaXN0ZXJzLCBpKTsKKworCQlpbiArPSBDUkFTSERV TVBfUkVBRChpbiwgcmVncy0+cmVnaXN0ZXJzW2ldLCBjb3VudCwgb3V0KTsKKworCQlvdXQgKz0g Y291bnQgKiBzaXplb2YodTMyKTsKKwkJcmVnY291bnQgKz0gY291bnQ7CisJfQorCisJQ1JBU0hE VU1QX0ZJTkkoaW4pOworCisJaWYgKFdBUk5fT04oKHJlZ2NvdW50ICogc2l6ZW9mKHUzMikpID4g QTZYWF9DRF9EQVRBX1NJWkUpKQorCQlyZXR1cm47CisKKwlpZiAoYTZ4eF9jcmFzaGR1bXBlcl9y dW4oZ3B1LCBkdW1wZXIpKQorCQlyZXR1cm47CisKKwlvYmotPmhhbmRsZSA9IHJlZ3M7CisJb2Jq LT5kYXRhID0ga21lbWR1cChkdW1wZXItPnB0ciArIEE2WFhfQ0RfREFUQV9PRkZTRVQsCisJCXJl Z2NvdW50ICogc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOworfQorCisvKiBSZWFkIGEgYmxvY2sg b2YgcmVnaXN0ZXJzIHZpYSBBSEIgKi8KK3N0YXRpYyB2b2lkIGE2eHhfZ2V0X2FoYl9ncHVfcmVn aXN0ZXJzKHN0cnVjdCBtc21fZ3B1ICpncHUsCisJCWNvbnN0IHN0cnVjdCBhNnh4X3JlZ2lzdGVy cyAqcmVncywKKwkJc3RydWN0IGE2eHhfZ3B1X3N0YXRlX29iaiAqb2JqKQoreworCWludCBpLCBy ZWdjb3VudCA9IDAsIGluZGV4ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCByZWdzLT5jb3VudDsg aSArPSAyKQorCQlyZWdjb3VudCArPSBSQU5HRShyZWdzLT5yZWdpc3RlcnMsIGkpOworCisJb2Jq LT5oYW5kbGUgPSAoY29uc3Qgdm9pZCAqKSByZWdzOworCW9iai0+ZGF0YSA9IGtjYWxsb2MocmVn Y291bnQsIHNpemVvZih1MzIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9iai0+ZGF0YSkKKwkJcmV0 dXJuOworCisJZm9yIChpID0gMDsgaSA8IHJlZ3MtPmNvdW50OyBpICs9IDIpIHsKKwkJdTMyIGNv dW50ID0gUkFOR0UocmVncy0+cmVnaXN0ZXJzLCBpKTsKKwkJaW50IGo7CisKKwkJZm9yIChqID0g MDsgaiA8IGNvdW50OyBqKyspCisJCQlvYmotPmRhdGFbaW5kZXgrK10gPSBncHVfcmVhZChncHUs CisJCQkJcmVncy0+cmVnaXN0ZXJzW2ldICsgaik7CisJfQorfQorCisvKiBSZWFkIGEgYmxvY2sg b2YgR01VIHJlZ2lzdGVycyAqLworc3RhdGljIHZvaWQgX2E2eHhfZ2V0X2dtdV9yZWdpc3RlcnMo c3RydWN0IG1zbV9ncHUgKmdwdSwKKwkJY29uc3Qgc3RydWN0IGE2eHhfcmVnaXN0ZXJzICpyZWdz LAorCQlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGVfb2JqICpvYmopCit7CisJc3RydWN0IGFkcmVub19n cHUgKmFkcmVub19ncHUgPSB0b19hZHJlbm9fZ3B1KGdwdSk7CisJc3RydWN0IGE2eHhfZ3B1ICph Nnh4X2dwdSA9IHRvX2E2eHhfZ3B1KGFkcmVub19ncHUpOworCXN0cnVjdCBhNnh4X2dtdSAqZ211 ID0gJmE2eHhfZ3B1LT5nbXU7CisJaW50IGksIHJlZ2NvdW50ID0gMCwgaW5kZXggPSAwOworCisJ Zm9yIChpID0gMDsgaSA8IHJlZ3MtPmNvdW50OyBpICs9IDIpCisJCXJlZ2NvdW50ICs9IFJBTkdF KHJlZ3MtPnJlZ2lzdGVycywgaSk7CisKKwlvYmotPmhhbmRsZSA9IChjb25zdCB2b2lkICopIHJl Z3M7CisJb2JqLT5kYXRhID0ga2NhbGxvYyhyZWdjb3VudCwgc2l6ZW9mKHUzMiksIEdGUF9LRVJO RUwpOworCWlmICghb2JqLT5kYXRhKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVn cy0+Y291bnQ7IGkgKz0gMikgeworCQl1MzIgY291bnQgPSBSQU5HRShyZWdzLT5yZWdpc3RlcnMs IGkpOworCQlpbnQgajsKKworCQlmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykKKwkJCW9iai0+ ZGF0YVtpbmRleCsrXSA9IGdtdV9yZWFkKGdtdSwKKwkJCQlyZWdzLT5yZWdpc3RlcnNbaV0gKyBq KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhfZ2V0X2dtdV9yZWdpc3RlcnMoc3RydWN0IG1z bV9ncHUgKmdwdSwKKwkJc3RydWN0IGE2eHhfZ3B1X3N0YXRlICphNnh4X3N0YXRlKQoreworCXN0 cnVjdCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9fYWRyZW5vX2dwdShncHUpOworCXN0cnVj dCBhNnh4X2dwdSAqYTZ4eF9ncHUgPSB0b19hNnh4X2dwdShhZHJlbm9fZ3B1KTsKKworCWE2eHhf c3RhdGUtPmdtdV9yZWdpc3RlcnMgPSBrY2FsbG9jKDIsCisJCXNpemVvZigqYTZ4eF9zdGF0ZS0+ Z211X3JlZ2lzdGVycyksIEdGUF9LRVJORUwpOworCisJaWYgKCFhNnh4X3N0YXRlLT5nbXVfcmVn aXN0ZXJzKQorCQlyZXR1cm47CisKKwlhNnh4X3N0YXRlLT5ucl9nbXVfcmVnaXN0ZXJzID0gMjsK KworCS8qIEdldCB0aGUgQ1ggR01VIHJlZ2lzdGVycyBmcm9tIEFIQiAqLworCV9hNnh4X2dldF9n bXVfcmVnaXN0ZXJzKGdwdSwgJmE2eHhfZ211X3JlZ2xpc3RbMF0sCisJCSZhNnh4X3N0YXRlLT5n bXVfcmVnaXN0ZXJzWzBdKTsKKworCWlmICghYTZ4eF9nbXVfZ3hfaXNfb24oJmE2eHhfZ3B1LT5n bXUpKQorCQlyZXR1cm47CisKKwkvKiBTZXQgdGhlIGZlbmNlIHRvIEFMTE9XIG1vZGUgc28gd2Ug Y2FuIGFjY2VzcyB0aGUgcmVnaXN0ZXJzICovCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfR01V X0FPX0FIQl9GRU5DRV9DVFJMLCAwKTsKKworCV9hNnh4X2dldF9nbXVfcmVnaXN0ZXJzKGdwdSwg JmE2eHhfZ211X3JlZ2xpc3RbMV0sCisJCSZhNnh4X3N0YXRlLT5nbXVfcmVnaXN0ZXJzWzFdKTsK K30KKworc3RhdGljIHZvaWQgYTZ4eF9nZXRfcmVnaXN0ZXJzKHN0cnVjdCBtc21fZ3B1ICpncHUs CisJCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZSAqYTZ4eF9zdGF0ZSwKKwkJc3RydWN0IGE2eHhfY3Jh c2hkdW1wZXIgKmR1bXBlcikKK3sKKwlpbnQgaSwgY291bnQgPSBBUlJBWV9TSVpFKGE2eHhfYWhi X3JlZ2xpc3QpICsKKwkJQVJSQVlfU0laRShhNnh4X3JlZ2xpc3QpICsKKwkJQVJSQVlfU0laRShh Nnh4X2hsc3FfcmVnbGlzdCk7CisJaW50IGluZGV4ID0gMDsKKworCWE2eHhfc3RhdGUtPnJlZ2lz dGVycyA9IGtjYWxsb2MoY291bnQsIHNpemVvZigqYTZ4eF9zdGF0ZS0+cmVnaXN0ZXJzKSwKKwkJ R0ZQX0tFUk5FTCk7CisKKwlpZiAoIWE2eHhfc3RhdGUtPnJlZ2lzdGVycykKKwkJcmV0dXJuOwor CisJYTZ4eF9zdGF0ZS0+bnJfcmVnaXN0ZXJzID0gY291bnQ7CisKKwlmb3IgKGkgPSAwOyBpIDwg QVJSQVlfU0laRShhNnh4X2FoYl9yZWdsaXN0KTsgaSsrKQorCQlhNnh4X2dldF9haGJfZ3B1X3Jl Z2lzdGVycyhncHUsCisJCQkmYTZ4eF9haGJfcmVnbGlzdFtpXSwKKwkJCSZhNnh4X3N0YXRlLT5y ZWdpc3RlcnNbaW5kZXgrK10pOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYTZ4eF9y ZWdsaXN0KTsgaSsrKQorCQlhNnh4X2dldF9jcmFzaGR1bXBlcl9yZWdpc3RlcnMoZ3B1LAorCQkJ JmE2eHhfcmVnbGlzdFtpXSwKKwkJCSZhNnh4X3N0YXRlLT5yZWdpc3RlcnNbaW5kZXgrK10sCisJ CQlkdW1wZXIpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYTZ4eF9obHNxX3JlZ2xp c3QpOyBpKyspCisJCWE2eHhfZ2V0X2NyYXNoZHVtcGVyX2hsc3FfcmVnaXN0ZXJzKGdwdSwKKwkJ CSZhNnh4X2hsc3FfcmVnbGlzdFtpXSwKKwkJCSZhNnh4X3N0YXRlLT5yZWdpc3RlcnNbaW5kZXgr K10sCisJCQlkdW1wZXIpOworfQorCisvKiBSZWFkIGEgYmxvY2sgb2YgZGF0YSBmcm9tIGFuIGlu ZGV4ZWQgcmVnaXN0ZXIgcGFpciAqLworc3RhdGljIHZvaWQgYTZ4eF9nZXRfaW5kZXhlZF9yZWdz KHN0cnVjdCBtc21fZ3B1ICpncHUsCisJCWNvbnN0IHN0cnVjdCBhNnh4X2luZGV4ZWRfcmVnaXN0 ZXJzICppbmRleGVkLAorCQlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGVfb2JqICpvYmopCit7CisJaW50 IGk7CisKKwlvYmotPmhhbmRsZSA9IChjb25zdCB2b2lkICopIGluZGV4ZWQ7CisJb2JqLT5kYXRh ID0ga2NhbGxvYyhpbmRleGVkLT5jb3VudCwgc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOworCWlm ICghb2JqLT5kYXRhKQorCQlyZXR1cm47CisKKwkvKiBBbGwgdGhlIGluZGV4ZWQgYmFua3Mgc3Rh cnQgYXQgYWRkcmVzcyAwICovCisJZ3B1X3dyaXRlKGdwdSwgaW5kZXhlZC0+YWRkciwgMCk7CisK KwkvKiBSZWFkIHRoZSBkYXRhIC0gZWFjaCByZWFkIGluY3JlbWVudHMgdGhlIGludGVybmFsIGFk ZHJlc3MgYnkgMSAqLworCWZvciAoaSA9IDA7IGkgPCBpbmRleGVkLT5jb3VudDsgaSsrKQorCQlv YmotPmRhdGFbaV0gPSBncHVfcmVhZChncHUsIGluZGV4ZWQtPmRhdGEpOworfQorCitzdGF0aWMg dm9pZCBhNnh4X2dldF9pbmRleGVkX3JlZ2lzdGVycyhzdHJ1Y3QgbXNtX2dwdSAqZ3B1LAorCQlz dHJ1Y3QgYTZ4eF9ncHVfc3RhdGUgKmE2eHhfc3RhdGUpCit7CisJdTMyIG1lbXBvb2xfc2l6ZTsK KwlpbnQgY291bnQgPSBBUlJBWV9TSVpFKGE2eHhfaW5kZXhlZF9yZWdsaXN0KSArIDE7CisJaW50 IGk7CisKKwlhNnh4X3N0YXRlLT5pbmRleGVkX3JlZ3MgPSBrY2FsbG9jKGNvdW50LAorCQlzaXpl b2YoYTZ4eF9zdGF0ZS0+aW5kZXhlZF9yZWdzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhNnh4X3N0 YXRlLT5pbmRleGVkX3JlZ3MpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGE2eHhfaW5kZXhlZF9yZWdsaXN0KTsgaSsrKQorCQlhNnh4X2dldF9pbmRleGVkX3JlZ3Mo Z3B1LCAmYTZ4eF9pbmRleGVkX3JlZ2xpc3RbaV0sCisJCQkmYTZ4eF9zdGF0ZS0+aW5kZXhlZF9y ZWdzW2ldKTsKKworCS8qIFNldCB0aGUgQ1AgbWVtcG9vbCBzaXplIHRvIDAgdG8gc3RhYmlsaXpl IGl0IHdoaWxlIGR1bXBpbmcgKi8KKwltZW1wb29sX3NpemUgPSBncHVfcmVhZChncHUsIFJFR19B NlhYX0NQX01FTV9QT09MX1NJWkUpOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0NQX01FTV9Q T09MX1NJWkUsIDApOworCisJLyogR2V0IHRoZSBjb250ZW50cyBvZiB0aGUgQ1AgbWVtcG9vbCAq LworCWE2eHhfZ2V0X2luZGV4ZWRfcmVncyhncHUsICZhNnh4X2NwX21lbXBvb2xfaW5kZXhlZCwK KwkJJmE2eHhfc3RhdGUtPmluZGV4ZWRfcmVnc1tpXSk7CisKKwkvKgorCSAqIE9mZnNldCAweDIw MDAgaW4gdGhlIG1lbXBvb2wgaXMgdGhlIHNpemUgLSBjb3B5IHRoZSBzYXZlZCBzaXplIG92ZXIK KwkgKiBzbyB0aGUgZGF0YSBpcyBjb25zaXN0ZW50CisJICovCisJYTZ4eF9zdGF0ZS0+aW5kZXhl ZF9yZWdzW2ldLmRhdGFbMHgyMDAwXSA9IG1lbXBvb2xfc2l6ZTsKKworCS8qIFJlc3RvcmUgdGhl IHNpemUgaW4gdGhlIGhhcmR3YXJlICovCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfTUVN X1BPT0xfU0laRSwgbWVtcG9vbF9zaXplKTsKKworCWE2eHhfc3RhdGUtPm5yX2luZGV4ZWRfcmVn cyA9IGNvdW50OworfQorCitzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqYTZ4eF9ncHVfc3RhdGVfZ2V0 KHN0cnVjdCBtc21fZ3B1ICpncHUpCit7CisJc3RydWN0IGE2eHhfY3Jhc2hkdW1wZXIgZHVtcGVy ID0geyAwIH07CisJc3RydWN0IGFkcmVub19ncHUgKmFkcmVub19ncHUgPSB0b19hZHJlbm9fZ3B1 KGdwdSk7CisJc3RydWN0IGE2eHhfZ3B1ICphNnh4X2dwdSA9IHRvX2E2eHhfZ3B1KGFkcmVub19n cHUpOworCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZSAqYTZ4eF9zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9m KCphNnh4X3N0YXRlKSwKKwkJR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWE2eHhfc3RhdGUpCisJCXJl dHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJLyogR2V0IHRoZSBnZW5lcmljIHN0YXRlIGZyb20g dGhlIGFkcmVubyBjb3JlICovCisJYWRyZW5vX2dwdV9zdGF0ZV9nZXQoZ3B1LCAmYTZ4eF9zdGF0 ZS0+YmFzZSk7CisKKwlhNnh4X2dldF9nbXVfcmVnaXN0ZXJzKGdwdSwgYTZ4eF9zdGF0ZSk7CisK KwkvKiBJZiBHWCBpc24ndCBvbiB0aGUgcmVzdCBvZiB0aGUgZGF0YSBpc24ndCBnb2luZyB0byBi ZSBhY2Nlc3NpYmxlICovCisJaWYgKCFhNnh4X2dtdV9neF9pc19vbigmYTZ4eF9ncHUtPmdtdSkp CisJCXJldHVybiAmYTZ4eF9zdGF0ZS0+YmFzZTsKKworCS8qIEdldCB0aGUgYmFua3Mgb2YgaW5k ZXhlZCByZWdpc3RlcnMgKi8KKwlhNnh4X2dldF9pbmRleGVkX3JlZ2lzdGVycyhncHUsIGE2eHhf c3RhdGUpOworCisJLyogVHJ5IHRvIGluaXRpYWxpemUgdGhlIGNyYXNoZHVtcGVyICovCisJaWYg KCFhNnh4X2NyYXNoZHVtcGVyX2luaXQoZ3B1LCAmZHVtcGVyKSkgeworCQlhNnh4X2dldF9yZWdp c3RlcnMoZ3B1LCBhNnh4X3N0YXRlLCAmZHVtcGVyKTsKKwkJYTZ4eF9nZXRfc2hhZGVycyhncHUs IGE2eHhfc3RhdGUsICZkdW1wZXIpOworCQlhNnh4X2dldF9jbHVzdGVycyhncHUsIGE2eHhfc3Rh dGUsICZkdW1wZXIpOworCQlhNnh4X2dldF9kYmdhaGJfY2x1c3RlcnMoZ3B1LCBhNnh4X3N0YXRl LCAmZHVtcGVyKTsKKworCQlhNnh4X2NyYXNoZHVtcGVyX2ZyZWUoZ3B1LCAmZHVtcGVyKTsKKwl9 CisKKwlhNnh4X2dldF9kZWJ1Z2J1cyhncHUsIGE2eHhfc3RhdGUpOworCisJcmV0dXJuICAmYTZ4 eF9zdGF0ZS0+YmFzZTsKK30KKwordm9pZCBhNnh4X2dwdV9zdGF0ZV9kZXN0cm95KHN0cnVjdCBr cmVmICprcmVmKQoreworCXN0cnVjdCBtc21fZ3B1X3N0YXRlICpzdGF0ZSA9IGNvbnRhaW5lcl9v ZihrcmVmLAorCQkJc3RydWN0IG1zbV9ncHVfc3RhdGUsIHJlZik7CisJc3RydWN0IGE2eHhfZ3B1 X3N0YXRlICphNnh4X3N0YXRlID0gY29udGFpbmVyX29mKHN0YXRlLAorCQkJc3RydWN0IGE2eHhf Z3B1X3N0YXRlLCBiYXNlKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhNnh4X3N0YXRl LT5ucl9nbXVfcmVnaXN0ZXJzOyBpKyspCisJCWtmcmVlKGE2eHhfc3RhdGUtPmdtdV9yZWdpc3Rl cnNbaV0uZGF0YSk7CisKKwlrZnJlZShhNnh4X3N0YXRlLT5nbXVfcmVnaXN0ZXJzKTsKKworCWZv ciAoaSA9IDA7IGkgPCBhNnh4X3N0YXRlLT5ucl9yZWdpc3RlcnM7IGkrKykKKwkJa2ZyZWUoYTZ4 eF9zdGF0ZS0+cmVnaXN0ZXJzW2ldLmRhdGEpOworCisJa2ZyZWUoYTZ4eF9zdGF0ZS0+cmVnaXN0 ZXJzKTsKKworCWZvciAoaSA9IDA7IGkgPCBhNnh4X3N0YXRlLT5ucl9zaGFkZXJzOyBpKyspCisJ CWtmcmVlKGE2eHhfc3RhdGUtPnNoYWRlcnNbaV0uZGF0YSk7CisKKwlrZnJlZShhNnh4X3N0YXRl LT5zaGFkZXJzKTsKKworCWZvciAoaSA9IDA7IGkgPCBhNnh4X3N0YXRlLT5ucl9jbHVzdGVyczsg aSsrKQorCQlrZnJlZShhNnh4X3N0YXRlLT5jbHVzdGVyc1tpXS5kYXRhKTsKKworCWtmcmVlKGE2 eHhfc3RhdGUtPmNsdXN0ZXJzKTsKKworCWZvciAoaSA9IDA7IGkgPCBhNnh4X3N0YXRlLT5ucl9k YmdhaGJfY2x1c3RlcnM7IGkrKykKKwkJa2ZyZWUoYTZ4eF9zdGF0ZS0+ZGJnYWhiX2NsdXN0ZXJz W2ldLmRhdGEpOworCisJa2ZyZWUoYTZ4eF9zdGF0ZS0+ZGJnYWhiX2NsdXN0ZXJzKTsKKworCWZv ciAoaSA9IDA7IGkgPCBhNnh4X3N0YXRlLT5ucl9pbmRleGVkX3JlZ3M7IGkrKykKKwkJa2ZyZWUo YTZ4eF9zdGF0ZS0+aW5kZXhlZF9yZWdzW2ldLmRhdGEpOworCisJa2ZyZWUoYTZ4eF9zdGF0ZS0+ aW5kZXhlZF9yZWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCBhNnh4X3N0YXRlLT5ucl9kZWJ1Z2J1 czsgaSsrKQorCQlrZnJlZShhNnh4X3N0YXRlLT5kZWJ1Z2J1c1tpXS5kYXRhKTsKKworCWtmcmVl KGE2eHhfc3RhdGUtPmRlYnVnYnVzKTsKKworCWlmIChhNnh4X3N0YXRlLT52YmlmX2RlYnVnYnVz KQorCQlrZnJlZShhNnh4X3N0YXRlLT52YmlmX2RlYnVnYnVzLT5kYXRhKTsKKworCWtmcmVlKGE2 eHhfc3RhdGUtPnZiaWZfZGVidWdidXMpOworCisJZm9yIChpID0gMDsgaSA8IGE2eHhfc3RhdGUt Pm5yX2N4X2RlYnVnYnVzOyBpKyspCisJCWtmcmVlKGE2eHhfc3RhdGUtPmN4X2RlYnVnYnVzW2ld LmRhdGEpOworCisJa2ZyZWUoYTZ4eF9zdGF0ZS0+Y3hfZGVidWdidXMpOworCisKKwlrZnJlZShh Nnh4X3N0YXRlKTsKK30KKworaW50IGE2eHhfZ3B1X3N0YXRlX3B1dChzdHJ1Y3QgbXNtX2dwdV9z dGF0ZSAqc3RhdGUpCit7CisJaWYgKElTX0VSUl9PUl9OVUxMKHN0YXRlKSkKKwkJcmV0dXJuIDE7 CisKKwlyZXR1cm4ga3JlZl9wdXQoJnN0YXRlLT5yZWYsIGE2eHhfZ3B1X3N0YXRlX2Rlc3Ryb3kp OworfQorCitzdGF0aWMgdm9pZCBhNnh4X3Nob3dfcmVnaXN0ZXJzKGNvbnN0IHUzMiAqcmVnaXN0 ZXJzLCB1MzIgKmRhdGEsIHNpemVfdCBjb3VudCwKKwkJc3RydWN0IGRybV9wcmludGVyICpwKQor eworCWludCBpLCBpbmRleCA9IDA7CisKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCWZvciAo aSA9IDA7IGkgPCBjb3VudDsgaSArPSAyKSB7CisJCXUzMiBjb3VudCA9IFJBTkdFKHJlZ2lzdGVy cywgaSk7CisJCXUzMiBvZmZzZXQgPSByZWdpc3RlcnNbaV07CisJCWludCBqOworCisJCWZvciAo aiA9IDA7IGogPCBjb3VudDsgaW5kZXgrKywgb2Zmc2V0KyssIGorKykgeworCQkJaWYgKGRhdGFb aW5kZXhdID09IDB4ZGVhZmJlYWQpCisJCQkJY29udGludWU7CisKKwkJCWRybV9wcmludGYocCwg IiAgLSB7IG9mZnNldDogMHglMDZ4LCB2YWx1ZTogMHglMDh4IH1cbiIsCisJCQkJb2Zmc2V0IDw8 IDIsIGRhdGFbaW5kZXhdKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcHJpbnRfYXNjaWk4 NShzdHJ1Y3QgZHJtX3ByaW50ZXIgKnAsIHNpemVfdCBsZW4sIHUzMiAqZGF0YSkKK3sKKwljaGFy IG91dFtBU0NJSTg1X0JVRlNaXTsKKwlsb25nIGksIGwsIGRhdGFsZW4gPSAwOworCisJZm9yIChp ID0gMDsgaSA8IGxlbiA+PiAyOyBpKyspIHsKKwkJaWYgKGRhdGFbaV0pCisJCQlkYXRhbGVuID0g KGkgPDwgMikgKyAxOworCX0KKworCWlmIChkYXRhbGVuID09IDApCisJCXJldHVybjsKKworCWRy bV9wdXRzKHAsICIgICAgZGF0YTogISFhc2NpaTg1IHxcbiIpOworCWRybV9wdXRzKHAsICIgICAg ICAiKTsKKworCisJbCA9IGFzY2lpODVfZW5jb2RlX2xlbihkYXRhbGVuKTsKKworCWZvciAoaSA9 IDA7IGkgPCBsOyBpKyspCisJCWRybV9wdXRzKHAsIGFzY2lpODVfZW5jb2RlKGRhdGFbaV0sIG91 dCkpOworCisJZHJtX3B1dHMocCwgIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X25hbWUo c3RydWN0IGRybV9wcmludGVyICpwLCBjb25zdCBjaGFyICpmbXQsIGNvbnN0IGNoYXIgKm5hbWUp Cit7CisJZHJtX3B1dHMocCwgZm10KTsKKwlkcm1fcHV0cyhwLCBuYW1lKTsKKwlkcm1fcHV0cyhw LCAiXG4iKTsKK30KKworc3RhdGljIHZvaWQgYTZ4eF9zaG93X3NoYWRlcihzdHJ1Y3QgYTZ4eF9n cHVfc3RhdGVfb2JqICpvYmosCisJCXN0cnVjdCBkcm1fcHJpbnRlciAqcCkKK3sKKwljb25zdCBz dHJ1Y3QgYTZ4eF9zaGFkZXJfYmxvY2sgKmJsb2NrID0gb2JqLT5oYW5kbGU7CisJaW50IGk7CisK KwlpZiAoIW9iai0+aGFuZGxlKQorCQlyZXR1cm47CisKKwlwcmludF9uYW1lKHAsICIgIC0gdHlw ZTogIiwgYmxvY2stPm5hbWUpOworCisJZm9yIChpID0gMDsgaSA8IEE2WFhfTlVNX1NIQURFUl9C QU5LUzsgaSsrKSB7CisJCWRybV9wcmludGYocCwgIiAgICAtIGJhbms6ICVkXG4iLCBpKTsKKwkJ ZHJtX3ByaW50ZihwLCAiICAgICAgc2l6ZTogJWRcbiIsIGJsb2NrLT5zaXplKTsKKworCQlpZiAo IW9iai0+ZGF0YSkKKwkJCWNvbnRpbnVlOworCisJCXByaW50X2FzY2lpODUocCwgYmxvY2stPnNp emUgPDwgMiwKKwkJCW9iai0+ZGF0YSArIChibG9jay0+c2l6ZSAqIGkpKTsKKwl9Cit9CisKK3N0 YXRpYyB2b2lkIGE2eHhfc2hvd19jbHVzdGVyX2RhdGEoY29uc3QgdTMyICpyZWdpc3RlcnMsIGlu dCBzaXplLCB1MzIgKmRhdGEsCisJCXN0cnVjdCBkcm1fcHJpbnRlciAqcCkKK3sKKwlpbnQgY3R4 LCBpbmRleCA9IDA7CisKKwlmb3IgKGN0eCA9IDA7IGN0eCA8IEE2WFhfTlVNX0NPTlRFWFRTOyBj dHgrKykgeworCQlpbnQgajsKKworCQlkcm1fcHJpbnRmKHAsICIgICAgLSBjb250ZXh0OiAlZFxu IiwgY3R4KTsKKworCQlmb3IgKGogPSAwOyBqIDwgc2l6ZTsgaiArPSAyKSB7CisJCQl1MzIgY291 bnQgPSBSQU5HRShyZWdpc3RlcnMsIGopOworCQkJdTMyIG9mZnNldCA9IHJlZ2lzdGVyc1tqXTsK KwkJCWludCBrOworCisJCQlmb3IgKGsgPSAwOyBrIDwgY291bnQ7IGluZGV4KyssIG9mZnNldCsr LCBrKyspIHsKKwkJCQlpZiAoZGF0YVtpbmRleF0gPT0gMHhkZWFmYmVhZCkKKwkJCQkJY29udGlu dWU7CisKKwkJCQlkcm1fcHJpbnRmKHAsICIgICAgICAtIHsgb2Zmc2V0OiAweCUwNngsIHZhbHVl OiAweCUwOHggfVxuIiwKKwkJCQkJb2Zmc2V0IDw8IDIsIGRhdGFbaW5kZXhdKTsKKwkJCX0KKwkJ fQorCX0KK30KKworc3RhdGljIHZvaWQgYTZ4eF9zaG93X2RiZ2FoYl9jbHVzdGVyKHN0cnVjdCBh Nnh4X2dwdV9zdGF0ZV9vYmogKm9iaiwKKwkJc3RydWN0IGRybV9wcmludGVyICpwKQoreworCWNv bnN0IHN0cnVjdCBhNnh4X2RiZ2FoYl9jbHVzdGVyICpkYmdhaGIgPSBvYmotPmhhbmRsZTsKKwor CWlmIChkYmdhaGIpIHsKKwkJcHJpbnRfbmFtZShwLCAiICAtIGNsdXN0ZXItbmFtZTogIiwgZGJn YWhiLT5uYW1lKTsKKwkJYTZ4eF9zaG93X2NsdXN0ZXJfZGF0YShkYmdhaGItPnJlZ2lzdGVycywg ZGJnYWhiLT5jb3VudCwKKwkJCW9iai0+ZGF0YSwgcCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBh Nnh4X3Nob3dfY2x1c3RlcihzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGVfb2JqICpvYmosCisJCXN0cnVj dCBkcm1fcHJpbnRlciAqcCkKK3sKKwljb25zdCBzdHJ1Y3QgYTZ4eF9jbHVzdGVyICpjbHVzdGVy ID0gb2JqLT5oYW5kbGU7CisKKwlpZiAoY2x1c3RlcikgeworCQlwcmludF9uYW1lKHAsICIgIC0g Y2x1c3Rlci1uYW1lOiAiLCBjbHVzdGVyLT5uYW1lKTsKKwkJYTZ4eF9zaG93X2NsdXN0ZXJfZGF0 YShjbHVzdGVyLT5yZWdpc3RlcnMsIGNsdXN0ZXItPmNvdW50LAorCQkJb2JqLT5kYXRhLCBwKTsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhfc2hvd19pbmRleGVkX3JlZ3Moc3RydWN0IGE2eHhf Z3B1X3N0YXRlX29iaiAqb2JqLAorCQlzdHJ1Y3QgZHJtX3ByaW50ZXIgKnApCit7CisJY29uc3Qg c3RydWN0IGE2eHhfaW5kZXhlZF9yZWdpc3RlcnMgKmluZGV4ZWQgPSBvYmotPmhhbmRsZTsKKwor CWlmICghaW5kZXhlZCkKKwkJcmV0dXJuOworCisJcHJpbnRfbmFtZShwLCAiICAtIHJlZ3MtbmFt ZTogIiwgaW5kZXhlZC0+bmFtZSk7CisJZHJtX3ByaW50ZihwLCAiICAgIGR3b3JkczogJWRcbiIs IGluZGV4ZWQtPmNvdW50KTsKKworCXByaW50X2FzY2lpODUocCwgaW5kZXhlZC0+Y291bnQgPDwg Miwgb2JqLT5kYXRhKTsKK30KKworc3RhdGljIHZvaWQgYTZ4eF9zaG93X2RlYnVnYnVzX2Jsb2Nr KGNvbnN0IHN0cnVjdCBhNnh4X2RlYnVnYnVzX2Jsb2NrICpibG9jaywKKwkJdTMyICpkYXRhLCBz dHJ1Y3QgZHJtX3ByaW50ZXIgKnApCit7CisJaWYgKGJsb2NrKSB7CisJCXByaW50X25hbWUocCwg IiAgLSBkZWJ1Z2J1cy1ibG9jazogIiwgYmxvY2stPm5hbWUpOworCisJCS8qCisJCSAqIGNvdW50 IGZvciByZWd1bGFyIGRlYnVnYnVzIGRhdGEgaXMgaW4gcXVhZHdvcmRzLAorCQkgKiBidXQgcHJp bnQgdGhlIHNpemUgaW4gZHdvcmRzIGZvciBjb25zaXN0ZW5jeQorCQkgKi8KKwkJZHJtX3ByaW50 ZihwLCAiICAgIGNvdW50OiAlZFxuIiwgYmxvY2stPmNvdW50IDw8IDEpOworCisJCXByaW50X2Fz Y2lpODUocCwgYmxvY2stPmNvdW50IDw8IDMsIGRhdGEpOworCX0KK30KKworc3RhdGljIHZvaWQg YTZ4eF9zaG93X2RlYnVnYnVzKHN0cnVjdCBhNnh4X2dwdV9zdGF0ZSAqYTZ4eF9zdGF0ZSwKKwkJ c3RydWN0IGRybV9wcmludGVyICpwKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGE2 eHhfc3RhdGUtPm5yX2RlYnVnYnVzOyBpKyspIHsKKwkJc3RydWN0IGE2eHhfZ3B1X3N0YXRlX29i aiAqb2JqID0gJmE2eHhfc3RhdGUtPmRlYnVnYnVzW2ldOworCisJCWE2eHhfc2hvd19kZWJ1Z2J1 c19ibG9jayhvYmotPmhhbmRsZSwgb2JqLT5kYXRhLCBwKTsKKwl9CisKKwlpZiAoYTZ4eF9zdGF0 ZS0+dmJpZl9kZWJ1Z2J1cykgeworCQlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGVfb2JqICpvYmogPSBh Nnh4X3N0YXRlLT52YmlmX2RlYnVnYnVzOworCisJCWRybV9wdXRzKHAsICIgIC0gZGVidWdidXMt YmxvY2s6IEE2WFhfREJHQlVTX1ZCSUZcbiIpOworCQlkcm1fcHJpbnRmKHAsICIgICAgY291bnQ6 ICVkXG4iLCBWQklGX0RFQlVHQlVTX0JMT0NLX1NJWkUpOworCisJCS8qIHZiaWYgZGVidWdidXMg ZGF0YSBpcyBpbiBkd29yZHMuICBDb25mdXNpbmcsIGh1aD8gKi8KKwkJcHJpbnRfYXNjaWk4NShw LCBWQklGX0RFQlVHQlVTX0JMT0NLX1NJWkUgPDwgMiwgb2JqLT5kYXRhKTsKKwl9CisKKwlmb3Ig KGkgPSAwOyBpIDwgYTZ4eF9zdGF0ZS0+bnJfY3hfZGVidWdidXM7IGkrKykgeworCQlzdHJ1Y3Qg YTZ4eF9ncHVfc3RhdGVfb2JqICpvYmogPSAmYTZ4eF9zdGF0ZS0+Y3hfZGVidWdidXNbaV07CisK KwkJYTZ4eF9zaG93X2RlYnVnYnVzX2Jsb2NrKG9iai0+aGFuZGxlLCBvYmotPmRhdGEsIHApOwor CX0KK30KKwordm9pZCBhNnh4X3Nob3coc3RydWN0IG1zbV9ncHUgKmdwdSwgc3RydWN0IG1zbV9n cHVfc3RhdGUgKnN0YXRlLAorCQlzdHJ1Y3QgZHJtX3ByaW50ZXIgKnApCit7CisJc3RydWN0IGE2 eHhfZ3B1X3N0YXRlICphNnh4X3N0YXRlID0gY29udGFpbmVyX29mKHN0YXRlLAorCQkJc3RydWN0 IGE2eHhfZ3B1X3N0YXRlLCBiYXNlKTsKKwlpbnQgaTsKKworCWlmIChJU19FUlJfT1JfTlVMTChz dGF0ZSkpCisJCXJldHVybjsKKworCWFkcmVub19zaG93KGdwdSwgc3RhdGUsIHApOworCisJZHJt X3B1dHMocCwgInJlZ2lzdGVyczpcbiIpOworCWZvciAoaSA9IDA7IGkgPCBhNnh4X3N0YXRlLT5u cl9yZWdpc3RlcnM7IGkrKykgeworCQlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGVfb2JqICpvYmogPSAm YTZ4eF9zdGF0ZS0+cmVnaXN0ZXJzW2ldOworCQljb25zdCBzdHJ1Y3QgYTZ4eF9yZWdpc3RlcnMg KnJlZ3MgPSBvYmotPmhhbmRsZTsKKworCQlpZiAoIW9iai0+aGFuZGxlKQorCQkJY29udGludWU7 CisKKwkJYTZ4eF9zaG93X3JlZ2lzdGVycyhyZWdzLT5yZWdpc3RlcnMsIG9iai0+ZGF0YSwgcmVn cy0+Y291bnQsIHApOworCX0KKworCWRybV9wdXRzKHAsICJyZWdpc3RlcnMtZ211OlxuIik7CisJ Zm9yIChpID0gMDsgaSA8IGE2eHhfc3RhdGUtPm5yX2dtdV9yZWdpc3RlcnM7IGkrKykgeworCQlz dHJ1Y3QgYTZ4eF9ncHVfc3RhdGVfb2JqICpvYmogPSAmYTZ4eF9zdGF0ZS0+Z211X3JlZ2lzdGVy c1tpXTsKKwkJY29uc3Qgc3RydWN0IGE2eHhfcmVnaXN0ZXJzICpyZWdzID0gb2JqLT5oYW5kbGU7 CisKKwkJaWYgKCFvYmotPmhhbmRsZSkKKwkJCWNvbnRpbnVlOworCisJCWE2eHhfc2hvd19yZWdp c3RlcnMocmVncy0+cmVnaXN0ZXJzLCBvYmotPmRhdGEsIHJlZ3MtPmNvdW50LCBwKTsKKwl9CisK Kwlkcm1fcHV0cyhwLCAiaW5kZXhlZC1yZWdpc3RlcnM6XG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwg YTZ4eF9zdGF0ZS0+bnJfaW5kZXhlZF9yZWdzOyBpKyspCisJCWE2eHhfc2hvd19pbmRleGVkX3Jl Z3MoJmE2eHhfc3RhdGUtPmluZGV4ZWRfcmVnc1tpXSwgcCk7CisKKwlkcm1fcHV0cyhwLCAic2hh ZGVyLWJsb2NrczpcbiIpOworCWZvciAoaSA9IDA7IGkgPCBhNnh4X3N0YXRlLT5ucl9zaGFkZXJz OyBpKyspCisJCWE2eHhfc2hvd19zaGFkZXIoJmE2eHhfc3RhdGUtPnNoYWRlcnNbaV0sIHApOwor CisJZHJtX3B1dHMocCwgImNsdXN0ZXJzOlxuIik7CisJZm9yIChpID0gMDsgaSA8IGE2eHhfc3Rh dGUtPm5yX2NsdXN0ZXJzOyBpKyspCisJCWE2eHhfc2hvd19jbHVzdGVyKCZhNnh4X3N0YXRlLT5j bHVzdGVyc1tpXSwgcCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYTZ4eF9zdGF0ZS0+bnJfZGJnYWhi X2NsdXN0ZXJzOyBpKyspCisJCWE2eHhfc2hvd19kYmdhaGJfY2x1c3RlcigmYTZ4eF9zdGF0ZS0+ ZGJnYWhiX2NsdXN0ZXJzW2ldLCBwKTsKKworCWRybV9wdXRzKHAsICJkZWJ1Z2J1czpcbiIpOwor CWE2eHhfc2hvd19kZWJ1Z2J1cyhhNnh4X3N0YXRlLCBwKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1X3N0YXRlLmggYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2FkcmVuby9hNnh4X2dwdV9zdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMC4uNjhjY2NmYTI4NzBhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHVfc3RhdGUuaApAQCAtMCwwICsxLDQzMCBAQAorLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qIENvcHlyaWdodCAoYykgMjAxOCBUaGUg TGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi8KKworI2lmbmRlZiBfQTZY WF9DUkFTSF9EVU1QX0hfCisjZGVmaW5lIF9BNlhYX0NSQVNIX0RVTVBfSF8KKworI2luY2x1ZGUg ImE2eHgueG1sLmgiCisKKyNkZWZpbmUgQTZYWF9OVU1fQ09OVEVYVFMgMgorI2RlZmluZSBBNlhY X05VTV9TSEFERVJfQkFOS1MgMworCitzdGF0aWMgY29uc3QgdTMyIGE2eHhfZ3Jhc19jbHVzdGVy W10gPSB7CisJMHg4MDAwLCAweDgwMDYsIDB4ODAxMCwgMHg4MDkyLCAweDgwOTQsIDB4ODA5ZCwg MHg4MGEwLCAweDgwYTYsCisJMHg4MGFmLCAweDgwZjEsIDB4ODEwMCwgMHg4MTA3LCAweDgxMDks IDB4ODEwOSwgMHg4MTEwLCAweDgxMTAsCisJMHg4NDAwLCAweDg0MGIsCit9OworCitzdGF0aWMg Y29uc3QgdTMyIGE2eHhfcHNfY2x1c3Rlcl9yYWNbXSA9IHsKKwkweDg4MDAsIDB4ODgwNiwgMHg4 ODA5LCAweDg4MTEsIDB4ODgxOCwgMHg4ODFlLCAweDg4MjAsIDB4ODg2NSwKKwkweDg4NzAsIDB4 ODg3OSwgMHg4ODgwLCAweDg4ODksIDB4ODg5MCwgMHg4ODkxLCAweDg4OTgsIDB4ODg5OCwKKwkw eDg4YzAsIDB4ODhjMSwgMHg4OGQwLCAweDg4ZTMsIDB4ODkwMCwgMHg4OTBjLCAweDg5MGYsIDB4 ODkxYSwKKwkweDhjMDAsIDB4OGMwMSwgMHg4YzA4LCAweDhjMTAsIDB4OGMxNywgMHg4YzFmLCAw eDhjMjYsIDB4OGMzMywKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYTZ4eF9wc19jbHVzdGVyX3Ji cFtdID0geworCTB4ODhmMCwgMHg4OGYzLCAweDg5MGQsIDB4ODkwZSwgMHg4OTI3LCAweDg5Mjgs IDB4OGJmMCwgMHg4YmYxLAorCTB4OGMwMiwgMHg4YzA3LCAweDhjMTEsIDB4OGMxNiwgMHg4YzIw LCAweDhjMjUsCit9OworCitzdGF0aWMgY29uc3QgdTMyIGE2eHhfcHNfY2x1c3RlcltdID0gewor CTB4OTIwMCwgMHg5MjE2LCAweDkyMTgsIDB4OTIzNiwgMHg5MzAwLCAweDkzMDYsCit9OworCitz dGF0aWMgY29uc3QgdTMyIGE2eHhfZmVfY2x1c3RlcltdID0geworCTB4OTMwMCwgMHg5MzA2LCAw eDk4MDAsIDB4OTgwNiwgMHg5YjAwLCAweDliMDcsIDB4YTAwMCwgMHhhMDA5LAorCTB4YTAwZSwg MHhhMGVmLCAweGEwZjgsIDB4YTBmOCwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYTZ4eF9wY192 c19jbHVzdGVyW10gPSB7CisJMHg5MTAwLCAweDkxMDgsIDB4OTMwMCwgMHg5MzA2LCAweDk5ODAs IDB4OTk4MSwgMHg5YjAwLCAweDliMDcsCit9OworCisjZGVmaW5lIENMVVNURVJfRkUgICAgMAor I2RlZmluZSBDTFVTVEVSX1NQX1ZTIDEKKyNkZWZpbmUgQ0xVU1RFUl9QQ19WUyAyCisjZGVmaW5l IENMVVNURVJfR1JBUyAgMworI2RlZmluZSBDTFVTVEVSX1NQX1BTIDQKKyNkZWZpbmUgQ0xVU1RF Ul9QUyAgICA1CisKKyNkZWZpbmUgQ0xVU1RFUihfaWQsIF9yZWcsIF9zZWxfcmVnLCBfc2VsX3Zh bCkgXAorCXsgLmlkID0gX2lkLCAubmFtZSA9ICNfaWQsXAorCQkucmVnaXN0ZXJzID0gX3JlZywg XAorCQkuY291bnQgPSBBUlJBWV9TSVpFKF9yZWcpLCBcCisJCS5zZWxfcmVnID0gX3NlbF9yZWcs IC5zZWxfdmFsID0gX3NlbF92YWwgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGE2eHhfY2x1c3Rl ciB7CisJdTMyIGlkOworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgdTMyICpyZWdpc3RlcnM7 CisJc2l6ZV90IGNvdW50OworCXUzMiBzZWxfcmVnOworCXUzMiBzZWxfdmFsOworfSBhNnh4X2Ns dXN0ZXJzW10gPSB7CisJQ0xVU1RFUihDTFVTVEVSX0dSQVMsIGE2eHhfZ3Jhc19jbHVzdGVyLCAw LCAwKSwKKwlDTFVTVEVSKENMVVNURVJfUFMsIGE2eHhfcHNfY2x1c3Rlcl9yYWMsIFJFR19BNlhY X1JCX1JCX1NVQl9CTE9DS19TRUxfQ05UTF9DRCwgMHgwKSwKKwlDTFVTVEVSKENMVVNURVJfUFMs IGE2eHhfcHNfY2x1c3Rlcl9yYnAsIFJFR19BNlhYX1JCX1JCX1NVQl9CTE9DS19TRUxfQ05UTF9D RCwgMHg5KSwKKwlDTFVTVEVSKENMVVNURVJfUFMsIGE2eHhfcHNfY2x1c3RlciwgMCwgMCksCisJ Q0xVU1RFUihDTFVTVEVSX0ZFLCBhNnh4X2ZlX2NsdXN0ZXIsIDAsIDApLAorCUNMVVNURVIoQ0xV U1RFUl9QQ19WUywgYTZ4eF9wY192c19jbHVzdGVyLCAwLCAwKSwKK307CisKK3N0YXRpYyBjb25z dCB1MzIgYTZ4eF9zcF92c19obHNxX2NsdXN0ZXJbXSA9IHsKKwkweGI4MDAsIDB4YjgwMywgMHhi ODIwLCAweGI4MjIsCit9OworCitzdGF0aWMgY29uc3QgdTMyIGE2eHhfc3BfdnNfc3BfY2x1c3Rl cltdID0geworCTB4YTgwMCwgMHhhODI0LCAweGE4MzAsIDB4YTgzYywgMHhhODQwLCAweGE4NjQs IDB4YTg3MCwgMHhhODk1LAorCTB4YThhMCwgMHhhOGFmLCAweGE4YzAsIDB4YThjMywKK307CisK K3N0YXRpYyBjb25zdCB1MzIgYTZ4eF9obHNxX2R1cGxpY2F0ZV9jbHVzdGVyW10gPSB7CisJMHhi YjEwLCAweGJiMTEsIDB4YmIyMCwgMHhiYjI5LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhNnh4 X2hsc3FfMmRfZHVwbGljYXRlX2NsdXN0ZXJbXSA9IHsKKwkweGJkODAsIDB4YmQ4MCwKK307CisK K3N0YXRpYyBjb25zdCB1MzIgYTZ4eF9zcF9kdXBsaWNhdGVfY2x1c3RlcltdID0geworCTB4YWIw MCwgMHhhYjAwLCAweGFiMDQsIDB4YWIwNSwgMHhhYjEwLCAweGFiMWIsIDB4YWIyMCwgMHhhYjIw LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhNnh4X3RwX2R1cGxpY2F0ZV9jbHVzdGVyW10gPSB7 CisJMHhiMzAwLCAweGIzMDcsIDB4YjMwOSwgMHhiMzA5LCAweGIzODAsIDB4YjM4MiwKK307CisK K3N0YXRpYyBjb25zdCB1MzIgYTZ4eF9zcF9wc19obHNxX2NsdXN0ZXJbXSA9IHsKKwkweGI5ODAs IDB4Yjk4MCwgMHhiOTgyLCAweGI5ODcsIDB4Yjk5MCwgMHhiOTliLCAweGI5YTAsIDB4YjlhMiwK KwkweGI5YzAsIDB4YjljOSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYTZ4eF9zcF9wc19obHNx XzJkX2NsdXN0ZXJbXSA9IHsKKwkweGJkODAsIDB4YmQ4MCwKK307CisKK3N0YXRpYyBjb25zdCB1 MzIgYTZ4eF9zcF9wc19zcF9jbHVzdGVyW10gPSB7CisJMHhhOTgwLCAweGE5YTgsIDB4YTliMCwg MHhhOWJjLCAweGE5ZDAsIDB4YTlkMywgMHhhOWUwLCAweGE5ZjMsCisJMHhhYTAwLCAweGFhMDAs IDB4YWEzMCwgMHhhYTMxLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhNnh4X3NwX3BzX3NwXzJk X2NsdXN0ZXJbXSA9IHsKKwkweGFjYzAsIDB4YWNjMCwKK307CisKK3N0YXRpYyBjb25zdCB1MzIg YTZ4eF9zcF9wc190cF9jbHVzdGVyW10gPSB7CisJMHhiMTgwLCAweGIxODMsIDB4YjE5MCwgMHhi MTkxLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhNnh4X3NwX3BzX3RwXzJkX2NsdXN0ZXJbXSA9 IHsKKwkweGI0YzAsIDB4YjRkMSwKK307CisKKyNkZWZpbmUgQ0xVU1RFUl9EQkdBSEIoX2lkLCBf YmFzZSwgX3R5cGUsIF9yZWcpIFwKKwl7IC5uYW1lID0gI19pZCwgLnN0YXRldHlwZSA9IF90eXBl LCAuYmFzZSA9IF9iYXNlLCBcCisJCS5yZWdpc3RlcnMgPSBfcmVnLCAuY291bnQgPSBBUlJBWV9T SVpFKF9yZWcpIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhNnh4X2RiZ2FoYl9jbHVzdGVyIHsK Kwljb25zdCBjaGFyICpuYW1lOworCXUzMiBzdGF0ZXR5cGU7CisJdTMyIGJhc2U7CisJY29uc3Qg dTMyICpyZWdpc3RlcnM7CisJc2l6ZV90IGNvdW50OworfSBhNnh4X2RiZ2FoYl9jbHVzdGVyc1td ID0geworCUNMVVNURVJfREJHQUhCKENMVVNURVJfU1BfVlMsIDB4MDAwMmUwMDAsIDB4NDEsIGE2 eHhfc3BfdnNfaGxzcV9jbHVzdGVyKSwKKwlDTFVTVEVSX0RCR0FIQihDTFVTVEVSX1NQX1ZTLCAw eDAwMDJhMDAwLCAweDIxLCBhNnh4X3NwX3ZzX3NwX2NsdXN0ZXIpLAorCUNMVVNURVJfREJHQUhC KENMVVNURVJfU1BfVlMsIDB4MDAwMmUwMDAsIDB4NDEsIGE2eHhfaGxzcV9kdXBsaWNhdGVfY2x1 c3RlciksCisJQ0xVU1RFUl9EQkdBSEIoQ0xVU1RFUl9TUF9WUywgMHgwMDAyZjAwMCwgMHg0NSwg YTZ4eF9obHNxXzJkX2R1cGxpY2F0ZV9jbHVzdGVyKSwKKwlDTFVTVEVSX0RCR0FIQihDTFVTVEVS X1NQX1ZTLCAweDAwMDJhMDAwLCAweDIxLCBhNnh4X3NwX2R1cGxpY2F0ZV9jbHVzdGVyKSwKKwlD TFVTVEVSX0RCR0FIQihDTFVTVEVSX1NQX1ZTLCAweDAwMDJjMDAwLCAweDEsIGE2eHhfdHBfZHVw bGljYXRlX2NsdXN0ZXIpLAorCUNMVVNURVJfREJHQUhCKENMVVNURVJfU1BfUFMsIDB4MDAwMmUw MDAsIDB4NDIsIGE2eHhfc3BfcHNfaGxzcV9jbHVzdGVyKSwKKwlDTFVTVEVSX0RCR0FIQihDTFVT VEVSX1NQX1BTLCAweDAwMDJmMDAwLCAweDQ2LCBhNnh4X3NwX3BzX2hsc3FfMmRfY2x1c3Rlciks CisJQ0xVU1RFUl9EQkdBSEIoQ0xVU1RFUl9TUF9QUywgMHgwMDAyYTAwMCwgMHgyMiwgYTZ4eF9z cF9wc19zcF9jbHVzdGVyKSwKKwlDTFVTVEVSX0RCR0FIQihDTFVTVEVSX1NQX1BTLCAweDAwMDJi MDAwLCAweDI2LCBhNnh4X3NwX3BzX3NwXzJkX2NsdXN0ZXIpLAorCUNMVVNURVJfREJHQUhCKENM VVNURVJfU1BfUFMsIDB4MDAwMmMwMDAsIDB4MiwgYTZ4eF9zcF9wc190cF9jbHVzdGVyKSwKKwlD TFVTVEVSX0RCR0FIQihDTFVTVEVSX1NQX1BTLCAweDAwMDJkMDAwLCAweDYsIGE2eHhfc3BfcHNf dHBfMmRfY2x1c3RlciksCisJQ0xVU1RFUl9EQkdBSEIoQ0xVU1RFUl9TUF9QUywgMHgwMDAyZTAw MCwgMHg0MiwgYTZ4eF9obHNxX2R1cGxpY2F0ZV9jbHVzdGVyKSwKKwlDTFVTVEVSX0RCR0FIQihD TFVTVEVSX1NQX1BTLCAweDAwMDJhMDAwLCAweDIyLCBhNnh4X3NwX2R1cGxpY2F0ZV9jbHVzdGVy KSwKKwlDTFVTVEVSX0RCR0FIQihDTFVTVEVSX1NQX1BTLCAweDAwMDJjMDAwLCAweDIsIGE2eHhf dHBfZHVwbGljYXRlX2NsdXN0ZXIpLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhNnh4X2hsc3Ff cmVnaXN0ZXJzW10gPSB7CisJMHhiZTAwLCAweGJlMDEsIDB4YmUwNCwgMHhiZTA1LCAweGJlMDgs IDB4YmUwOSwgMHhiZTEwLCAweGJlMTUsCisJMHhiZTIwLCAweGJlMjMsCit9OworCitzdGF0aWMg Y29uc3QgdTMyIGE2eHhfc3BfcmVnaXN0ZXJzW10gPSB7CisJMHhhZTAwLCAweGFlMDQsIDB4YWUw YywgMHhhZTBjLCAweGFlMGYsIDB4YWUyYiwgMHhhZTMwLCAweGFlMzIsCisJMHhhZTM1LCAweGFl MzUsIDB4YWUzYSwgMHhhZTNmLCAweGFlNTAsIDB4YWU1MiwKK307CisKK3N0YXRpYyBjb25zdCB1 MzIgYTZ4eF90cF9yZWdpc3RlcnNbXSA9IHsKKwkweGI2MDAsIDB4YjYwMSwgMHhiNjA0LCAweGI2 MDUsIDB4YjYxMCwgMHhiNjFiLCAweGI2MjAsIDB4YjYyMywKK307CisKK3N0cnVjdCBhNnh4X3Jl Z2lzdGVycyB7CisJY29uc3QgdTMyICpyZWdpc3RlcnM7CisJc2l6ZV90IGNvdW50OworCXUzMiB2 YWwwOworCXUzMiB2YWwxOworfTsKKworI2RlZmluZSBITFNRX0RCR19SRUdTKF9iYXNlLCBfdHlw ZSwgX2FycmF5KSBcCisJeyAudmFsMCA9IF9iYXNlLCAudmFsMSA9IF90eXBlLCAucmVnaXN0ZXJz ID0gX2FycmF5LCBcCisJCS5jb3VudCA9IEFSUkFZX1NJWkUoX2FycmF5KSwgfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGE2eHhfcmVnaXN0ZXJzIGE2eHhfaGxzcV9yZWdsaXN0W10gPSB7CisJSExT UV9EQkdfUkVHUygweDAwMDJGODAwLCAweDQwLCBhNnh4X2hsc3FfcmVnaXN0ZXJzKSwKKwlITFNR X0RCR19SRUdTKDB4MDAwMkI4MDAsIDB4MjAsIGE2eHhfc3BfcmVnaXN0ZXJzKSwKKwlITFNRX0RC R19SRUdTKDB4MDAwMkQ4MDAsIDB4MCwgYTZ4eF90cF9yZWdpc3RlcnMpLAorfTsKKworI2RlZmlu ZSBTSEFERVIoX3R5cGUsIF9zaXplKSBcCisJeyAudHlwZSA9IF90eXBlLCAubmFtZSA9ICNfdHlw ZSwgLnNpemUgPSBfc2l6ZSB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYTZ4eF9zaGFkZXJfYmxv Y2sgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdTMyIHR5cGU7CisJdTMyIHNpemU7Cit9IGE2eHhf c2hhZGVyX2Jsb2Nrc1tdID0geworCVNIQURFUihBNlhYX1RQMF9UTU9fREFUQSwgMHgyMDApLAor CVNIQURFUihBNlhYX1RQMF9TTU9fREFUQSwgMHg4MCksCisJU0hBREVSKEE2WFhfVFAwX01JUE1B UF9CQVNFX0RBVEEsIDB4M2MwKSwKKwlTSEFERVIoQTZYWF9UUDFfVE1PX0RBVEEsIDB4MjAwKSwK KwlTSEFERVIoQTZYWF9UUDFfU01PX0RBVEEsIDB4ODApLAorCVNIQURFUihBNlhYX1RQMV9NSVBN QVBfQkFTRV9EQVRBLCAweDNjMCksCisJU0hBREVSKEE2WFhfU1BfSU5TVF9EQVRBLCAweDgwMCks CisJU0hBREVSKEE2WFhfU1BfTEJfMF9EQVRBLCAweDgwMCksCisJU0hBREVSKEE2WFhfU1BfTEJf MV9EQVRBLCAweDgwMCksCisJU0hBREVSKEE2WFhfU1BfTEJfMl9EQVRBLCAweDgwMCksCisJU0hB REVSKEE2WFhfU1BfTEJfM19EQVRBLCAweDgwMCksCisJU0hBREVSKEE2WFhfU1BfTEJfNF9EQVRB LCAweDgwMCksCisJU0hBREVSKEE2WFhfU1BfTEJfNV9EQVRBLCAweDIwMCksCisJU0hBREVSKEE2 WFhfU1BfQ0JfQklORExFU1NfREFUQSwgMHgyMDAwKSwKKwlTSEFERVIoQTZYWF9TUF9DQl9MRUdB Q1lfREFUQSwgMHgyODApLAorCVNIQURFUihBNlhYX1NQX1VBVl9EQVRBLCAweDgwKSwKKwlTSEFE RVIoQTZYWF9TUF9JTlNUX1RBRywgMHg4MCksCisJU0hBREVSKEE2WFhfU1BfQ0JfQklORExFU1Nf VEFHLCAweDgwKSwKKwlTSEFERVIoQTZYWF9TUF9UTU9fVU1PX1RBRywgMHg4MCksCisJU0hBREVS KEE2WFhfU1BfU01PX1RBRywgMHg4MCksCisJU0hBREVSKEE2WFhfU1BfU1RBVEVfREFUQSwgMHgz ZiksCisJU0hBREVSKEE2WFhfSExTUV9DSFVOS19DVlNfUkFNLCAweDFjMCksCisJU0hBREVSKEE2 WFhfSExTUV9DSFVOS19DUFNfUkFNLCAweDI4MCksCisJU0hBREVSKEE2WFhfSExTUV9DSFVOS19D VlNfUkFNX1RBRywgMHg0MCksCisJU0hBREVSKEE2WFhfSExTUV9DSFVOS19DUFNfUkFNX1RBRywg MHg0MCksCisJU0hBREVSKEE2WFhfSExTUV9JQ0JfQ1ZTX0NCX0JBU0VfVEFHLCAweDQpLAorCVNI QURFUihBNlhYX0hMU1FfSUNCX0NQU19DQl9CQVNFX1RBRywgMHg0KSwKKwlTSEFERVIoQTZYWF9I TFNRX0NWU19NSVNDX1JBTSwgMHgxYzApLAorCVNIQURFUihBNlhYX0hMU1FfQ1BTX01JU0NfUkFN LCAweDU4MCksCisJU0hBREVSKEE2WFhfSExTUV9JTlNUX1JBTSwgMHg4MDApLAorCVNIQURFUihB NlhYX0hMU1FfR0ZYX0NWU19DT05TVF9SQU0sIDB4ODAwKSwKKwlTSEFERVIoQTZYWF9ITFNRX0dG WF9DUFNfQ09OU1RfUkFNLCAweDgwMCksCisJU0hBREVSKEE2WFhfSExTUV9DVlNfTUlTQ19SQU1f VEFHLCAweDgpLAorCVNIQURFUihBNlhYX0hMU1FfQ1BTX01JU0NfUkFNX1RBRywgMHg0KSwKKwlT SEFERVIoQTZYWF9ITFNRX0lOU1RfUkFNX1RBRywgMHg4MCksCisJU0hBREVSKEE2WFhfSExTUV9H RlhfQ1ZTX0NPTlNUX1JBTV9UQUcsIDB4YyksCisJU0hBREVSKEE2WFhfSExTUV9HRlhfQ1BTX0NP TlNUX1JBTV9UQUcsIDB4MTApLAorCVNIQURFUihBNlhYX0hMU1FfUFdSX1JFU1RfUkFNLCAweDI4 KSwKKwlTSEFERVIoQTZYWF9ITFNRX1BXUl9SRVNUX1RBRywgMHgxNCksCisJU0hBREVSKEE2WFhf SExTUV9EQVRBUEFUSF9NRVRBLCAweDQwKSwKKwlTSEFERVIoQTZYWF9ITFNRX0ZST05URU5EX01F VEEsIDB4NDApLAorCVNIQURFUihBNlhYX0hMU1FfSU5ESVJFQ1RfTUVUQSwgMHg0MCksCit9Owor CitzdGF0aWMgY29uc3QgdTMyIGE2eHhfcmJfcmFjX3JlZ2lzdGVyc1tdID0geworCTB4OGUwNCwg MHg4ZTA1LCAweDhlMDcsIDB4OGUwOCwgMHg4ZTEwLCAweDhlMWMsIDB4OGUyMCwgMHg4ZTI1LAor CTB4OGUyOCwgMHg4ZTI4LCAweDhlMmMsIDB4OGUyZiwgMHg4ZTUwLCAweDhlNTIsCit9OworCitz dGF0aWMgY29uc3QgdTMyIGE2eHhfcmJfcmJwX3JlZ2lzdGVyc1tdID0geworCTB4OGUwMSwgMHg4 ZTAxLCAweDhlMGMsIDB4OGUwYywgMHg4ZTNiLCAweDhlM2UsIDB4OGU0MCwgMHg4ZTQzLAorCTB4 OGU1MywgMHg4ZTVmLCAweDhlNzAsIDB4OGU3NywKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYTZ4 eF9yZWdpc3RlcnNbXSA9IHsKKwkvKiBSQkJNICovCisJMHgwMDAwLCAweDAwMDIsIDB4MDAxMCwg MHgwMDEwLCAweDAwMTIsIDB4MDAxMiwgMHgwMDE4LCAweDAwMWIsCisJMHgwMDFlLCAweDAwMzIs IDB4MDAzOCwgMHgwMDNjLCAweDAwNDIsIDB4MDA0MiwgMHgwMDQ0LCAweDAwNDQsCisJMHgwMDQ3 LCAweDAwNDcsIDB4MDA1NiwgMHgwMDU2LCAweDAwYWQsIDB4MDBhZSwgMHgwMGIwLCAweDAwZmIs CisJMHgwMTAwLCAweDAxMWQsIDB4MDIwMCwgMHgwMjBkLCAweDAyMTgsIDB4MDIzZCwgMHgwNDAw LCAweDA0ZjksCisJMHgwNTAwLCAweDA1MDAsIDB4MDUwNSwgMHgwNTBiLCAweDA1MGUsIDB4MDUx MSwgMHgwNTMzLCAweDA1MzMsCisJMHgwNTQwLCAweDA1NTUsCisJLyogQ1AgKi8KKwkweDA4MDAs IDB4MDgwOCwgMHgwODEwLCAweDA4MTMsIDB4MDgyMCwgMHgwODIxLCAweDA4MjMsIDB4MDgyNCwK KwkweDA4MjYsIDB4MDgyNywgMHgwODMwLCAweDA4MzMsIDB4MDg0MCwgMHgwODQzLCAweDA4NGYs IDB4MDg2ZiwKKwkweDA4ODAsIDB4MDg4YSwgMHgwOGEwLCAweDA4YWIsIDB4MDhjMCwgMHgwOGM0 LCAweDA4ZDAsIDB4MDhkZCwKKwkweDA4ZjAsIDB4MDhmMywgMHgwOTAwLCAweDA5MDMsIDB4MDkw OCwgMHgwOTExLCAweDA5MjgsIDB4MDkzZSwKKwkweDA5NDIsIDB4MDk0ZCwgMHgwOTgwLCAweDA5 ODQsIDB4MDk4ZCwgMHgwOTk2LCAweDA5OTgsIDB4MDk5ZSwKKwkweDA5YTAsIDB4MDlhNiwgMHgw OWE4LCAweDA5YWUsIDB4MDliMCwgMHgwOWIxLCAweDA5YzIsIDB4MDljOCwKKwkweDBhMDAsIDB4 MGEwMywKKwkvKiBWU0MgKi8KKwkweDBjMDAsIDB4MGMwNCwgMHgwYzA2LCAweDBjMDYsIDB4MGMx MCwgMHgwY2Q5LCAweDBlMDAsIDB4MGUwZSwKKwkvKiBVQ0hFICovCisJMHgwZTEwLCAweDBlMTMs IDB4MGUxNywgMHgwZTE5LCAweDBlMWMsIDB4MGUyYiwgMHgwZTMwLCAweDBlMzIsCisJMHgwZTM4 LCAweDBlMzksCisJLyogR1JBUyAqLworCTB4ODYwMCwgMHg4NjAxLCAweDg2MTAsIDB4ODYxYiwg MHg4NjIwLCAweDg2MjAsIDB4ODYyOCwgMHg4NjJiLAorCTB4ODYzMCwgMHg4NjM3LAorCS8qIFZQ QyAqLworCTB4OTYwMCwgMHg5NjA0LCAweDk2MjQsIDB4OTYzNywKKwkvKiBQQyAqLworCTB4OWUw MCwgMHg5ZTAxLCAweDllMDMsIDB4OWUwZSwgMHg5ZTExLCAweDllMTYsIDB4OWUxOSwgMHg5ZTE5 LAorCTB4OWUxYywgMHg5ZTFjLCAweDllMjAsIDB4OWUyMywgMHg5ZTMwLCAweDllMzEsIDB4OWUz NCwgMHg5ZTM0LAorCTB4OWU3MCwgMHg5ZTcyLCAweDllNzgsIDB4OWU3OSwgMHg5ZTgwLCAweDlm ZmYsCisJLyogVkZEICovCisJMHhhNjAwLCAweGE2MDEsIDB4YTYwMywgMHhhNjAzLCAweGE2MGEs IDB4YTYwYSwgMHhhNjEwLCAweGE2MTcsCisJMHhhNjMwLCAweGE2MzAsCit9OworCisjZGVmaW5l IFJFR1MoX2FycmF5LCBfc2VsX3JlZywgX3NlbF92YWwpIFwKKwl7IC5yZWdpc3RlcnMgPSBfYXJy YXksIC5jb3VudCA9IEFSUkFZX1NJWkUoX2FycmF5KSwgXAorCQkudmFsMCA9IF9zZWxfcmVnLCAu dmFsMSA9IF9zZWxfdmFsIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhNnh4X3JlZ2lzdGVycyBh Nnh4X3JlZ2xpc3RbXSA9IHsKKwlSRUdTKGE2eHhfcmVnaXN0ZXJzLCAwLCAwKSwKKwlSRUdTKGE2 eHhfcmJfcmFjX3JlZ2lzdGVycywgUkVHX0E2WFhfUkJfUkJfU1VCX0JMT0NLX1NFTF9DTlRMX0NE LCAwKSwKKwlSRUdTKGE2eHhfcmJfcmJwX3JlZ2lzdGVycywgUkVHX0E2WFhfUkJfUkJfU1VCX0JM T0NLX1NFTF9DTlRMX0NELCA5KSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYTZ4eF9haGJfcmVn aXN0ZXJzW10gPSB7CisJLyogUkJCTV9TVEFUVVMgLSBSQkJNX1NUQVRVUzMgKi8KKwkweDIxMCwg MHgyMTMsCisJLyogQ1BfU1RBVFVTXzEgKi8KKwkweDgyNSwgMHg4MjUsCit9OworCitzdGF0aWMg Y29uc3QgdTMyIGE2eHhfdmJpZl9yZWdpc3RlcnNbXSA9IHsKKwkweDMwMDAsIDB4MzAwNywgMHgz MDBjLCAweDMwMTQsIDB4MzAxOCwgMHgzMDJkLCAweDMwMzAsIDB4MzAzMSwKKwkweDMwMzQsIDB4 MzAzNiwgMHgzMDNjLCAweDMwM2QsIDB4MzA0MCwgMHgzMDQwLCAweDMwNDIsIDB4MzA0MiwKKwkw eDMwNDksIDB4MzA0OSwgMHgzMDU4LCAweDMwNTgsIDB4MzA1YSwgMHgzMDYxLCAweDMwNjQsIDB4 MzA2OCwKKwkweDMwNmMsIDB4MzA2ZCwgMHgzMDgwLCAweDMwODgsIDB4MzA4YiwgMHgzMDhjLCAw eDMwOTAsIDB4MzA5NCwKKwkweDMwOTgsIDB4MzA5OCwgMHgzMDljLCAweDMwOWMsIDB4MzBjMCwg MHgzMGMwLCAweDMwYzgsIDB4MzBjOCwKKwkweDMwZDAsIDB4MzBkMCwgMHgzMGQ4LCAweDMwZDgs IDB4MzBlMCwgMHgzMGUwLCAweDMxMDAsIDB4MzEwMCwKKwkweDMxMDgsIDB4MzEwOCwgMHgzMTEw LCAweDMxMTAsIDB4MzExOCwgMHgzMTE4LCAweDMxMjAsIDB4MzEyMCwKKwkweDMxMjQsIDB4MzEy NSwgMHgzMTI5LCAweDMxMjksIDB4MzEzMSwgMHgzMTMxLCAweDMxNTQsIDB4MzE1NCwKKwkweDMx NTYsIDB4MzE1NiwgMHgzMTU4LCAweDMxNTgsIDB4MzE1YSwgMHgzMTVhLCAweDMxNWMsIDB4MzE1 YywKKwkweDMxNWUsIDB4MzE1ZSwgMHgzMTYwLCAweDMxNjAsIDB4MzE2MiwgMHgzMTYyLCAweDM0 MGMsIDB4MzQwYywKKwkweDM0MTAsIDB4MzQxMCwgMHgzODAwLCAweDM4MDEsCit9OworCitzdGF0 aWMgY29uc3Qgc3RydWN0IGE2eHhfcmVnaXN0ZXJzIGE2eHhfYWhiX3JlZ2xpc3RbXSA9IHsKKwlS RUdTKGE2eHhfYWhiX3JlZ2lzdGVycywgMCwgMCksCisJUkVHUyhhNnh4X3ZiaWZfcmVnaXN0ZXJz LCAwLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYTZ4eF9nbXVfZ3hfcmVnaXN0ZXJzW10g PSB7CisJLyogR01VIEdYICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAxMCwgMHgwMDEzLCAweDAw MTYsIDB4MDAxNiwgMHgwMDE4LCAweDAwMWIsCisJMHgwMDFlLCAweDAwMWUsIDB4MDAyMCwgMHgw MDIzLCAweDAwMjYsIDB4MDAyNiwgMHgwMDI4LCAweDAwMmIsCisJMHgwMDJlLCAweDAwMmUsIDB4 MDAzMCwgMHgwMDMzLCAweDAwMzYsIDB4MDAzNiwgMHgwMDM4LCAweDAwM2IsCisJMHgwMDNlLCAw eDAwM2UsIDB4MDA0MCwgMHgwMDQzLCAweDAwNDYsIDB4MDA0NiwgMHgwMDgwLCAweDAwODQsCisJ MHgwMTAwLCAweDAxMmIsIDB4MDE0MCwgMHgwMTQwLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBh Nnh4X2dtdV9jeF9yZWdpc3RlcnNbXSA9IHsKKwkvKiBHTVUgQ1ggKi8KKwkweDRjMDAsIDB4NGMw NywgMHg0YzEwLCAweDRjMTIsIDB4NGQwMCwgMHg0ZDAwLCAweDRkMDcsIDB4NGQwYSwKKwkweDUw MDAsIDB4NTAwNCwgMHg1MDA3LCAweDUwMDgsIDB4NTAwYiwgMHg1MDBjLCAweDUwMGYsIDB4NTAx YywKKwkweDUwMjQsIDB4NTAyYSwgMHg1MDJkLCAweDUwMzAsIDB4NTA0MCwgMHg1MDUzLCAweDUw ODcsIDB4NTA4OSwKKwkweDUwYTAsIDB4NTBhMiwgMHg1MGE0LCAweDUwYWYsIDB4NTBjMCwgMHg1 MGMzLCAweDUwZDAsIDB4NTBkMCwKKwkweDUwZTQsIDB4NTBlNCwgMHg1MGU4LCAweDUwZWMsIDB4 NTEwMCwgMHg1MTAzLCAweDUxNDAsIDB4NTE0MCwKKwkweDUxNDIsIDB4NTE0NCwgMHg1MTRjLCAw eDUxNGQsIDB4NTE0ZiwgMHg1MTUxLCAweDUxNTQsIDB4NTE1NCwKKwkweDUxNTcsIDB4NTE1OCwg MHg1MTVkLCAweDUxNWQsIDB4NTE2MiwgMHg1MTYyLCAweDUxNjQsIDB4NTE2NSwKKwkweDUxODAs IDB4NTE4NiwgMHg1MTkwLCAweDUxOWUsIDB4NTFjMCwgMHg1MWMwLCAweDUxYzUsIDB4NTFjYywK KwkweDUxZTAsIDB4NTFlMiwgMHg1MWYwLCAweDUxZjAsIDB4NTIwMCwgMHg1MjAxLAorCS8qIEdQ VSBSU0NDICovCisJMHg4YzhjLCAweDhjOGMsIDB4OGQwMSwgMHg4ZDAyLCAweDhmNDAsIDB4OGY0 MiwgMHg4ZjQ0LCAweDhmNDcsCisJMHg4ZjRjLCAweDhmODcsIDB4OGZlYywgMHg4ZmVmLCAweDhm ZjQsIDB4OTAyZiwgMHg5MDk0LCAweDkwOTcsCisJMHg5MDljLCAweDkwZDcsIDB4OTEzYywgMHg5 MTNmLCAweDkxNDQsIDB4OTE3ZiwKKwkvKiBHTVUgQU8gKi8KKwkweDkzMDAsIDB4OTMxNiwgMHg5 NDAwLCAweDk0MDAsCisJLyogR1BVIENDICovCisJMHg5ODAwLCAweDk4MTIsIDB4OTg0MCwgMHg5 ODUyLCAweDljMDAsIDB4OWMwNCwgMHg5YzA3LCAweDljMGIsCisJMHg5YzE1LCAweDljMWMsIDB4 OWMxZSwgMHg5YzJkLCAweDljM2MsIDB4OWMzZCwgMHg5YzNmLCAweDljNDAsCisJMHg5YzQyLCAw eDljNDksIDB4OWM1OCwgMHg5YzVhLCAweDlkNDAsIDB4OWQ1ZSwgMHhhMDAwLCAweGEwMDIsCisJ MHhhNDAwLCAweGE0MDIsIDB4YWMwMCwgMHhhYzAyLCAweGIwMDAsIDB4YjAwMiwgMHhiNDAwLCAw eGI0MDIsCisJMHhiODAwLCAweGI4MDIsCisJLyogR1BVIENDIEFDRCAqLworCTB4YmMwMCwgMHhi YzE2LCAweGJjMjAsIDB4YmMyNywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYTZ4eF9yZWdp c3RlcnMgYTZ4eF9nbXVfcmVnbGlzdFtdID0geworCVJFR1MoYTZ4eF9nbXVfY3hfcmVnaXN0ZXJz LCAwLCAwKSwKKwlSRUdTKGE2eHhfZ211X2d4X3JlZ2lzdGVycywgMCwgMCksCit9OworCitzdGF0 aWMgY29uc3Qgc3RydWN0IGE2eHhfaW5kZXhlZF9yZWdpc3RlcnMgeworCWNvbnN0IGNoYXIgKm5h bWU7CisJdTMyIGFkZHI7CisJdTMyIGRhdGE7CisJdTMyIGNvdW50OworfSBhNnh4X2luZGV4ZWRf cmVnbGlzdFtdID0geworCXsgIkNQX1NFUV9TVEFUIiwgUkVHX0E2WFhfQ1BfU1FFX1NUQVRfQURE UiwKKwkJUkVHX0E2WFhfQ1BfU1FFX1NUQVRfREFUQSwgMHgzMyB9LAorCXsgIkNQX0RSQVdfU1RB VEUiLCBSRUdfQTZYWF9DUF9EUkFXX1NUQVRFX0FERFIsCisJCVJFR19BNlhYX0NQX0RSQVdfU1RB VEVfREFUQSwgMHgxMDAgfSwKKwl7ICJDUF9VQ09ERV9EQkdfREFUQSIsIFJFR19BNlhYX0NQX1NR RV9VQ09ERV9EQkdfQUREUiwKKwkJUkVHX0E2WFhfQ1BfU1FFX1VDT0RFX0RCR19EQVRBLCAweDYw MDAgfSwKKwl7ICJDUF9ST1EiLCBSRUdfQTZYWF9DUF9ST1FfREJHX0FERFIsCisJCVJFR19BNlhY X0NQX1JPUV9EQkdfREFUQSwgMHg0MDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYTZ4 eF9pbmRleGVkX3JlZ2lzdGVycyBhNnh4X2NwX21lbXBvb2xfaW5kZXhlZCA9IHsKKwkiQ1BfTUVN UE9PT0wiLCBSRUdfQTZYWF9DUF9NRU1fUE9PTF9EQkdfQUREUiwKKwkJUkVHX0E2WFhfQ1BfTUVN X1BPT0xfREJHX0RBVEEsIDB4MjA2MCwKK307CisKKyNkZWZpbmUgREVCVUdCVVMoX2lkLCBfY291 bnQpIHsgLmlkID0gX2lkLCAubmFtZSA9ICNfaWQsIC5jb3VudCA9IF9jb3VudCB9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgYTZ4eF9kZWJ1Z2J1c19ibG9jayB7CisJY29uc3QgY2hhciAqbmFtZTsK Kwl1MzIgaWQ7CisJdTMyIGNvdW50OworfSBhNnh4X2RlYnVnYnVzX2Jsb2Nrc1tdID0geworCURF QlVHQlVTKEE2WFhfREJHQlVTX0NQLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfUkJC TSwgMHgxMDApLAorCURFQlVHQlVTKEE2WFhfREJHQlVTX0hMU1EsIDB4MTAwKSwKKwlERUJVR0JV UyhBNlhYX0RCR0JVU19VQ0hFLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfRFBNLCAw eDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfVEVTUywgMHgxMDApLAorCURFQlVHQlVTKEE2 WFhfREJHQlVTX1BDLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfVkZEUCwgMHgxMDAp LAorCURFQlVHQlVTKEE2WFhfREJHQlVTX1ZQQywgMHgxMDApLAorCURFQlVHQlVTKEE2WFhfREJH QlVTX1RTRSwgMHgxMDApLAorCURFQlVHQlVTKEE2WFhfREJHQlVTX1JBUywgMHgxMDApLAorCURF QlVHQlVTKEE2WFhfREJHQlVTX1ZTQywgMHgxMDApLAorCURFQlVHQlVTKEE2WFhfREJHQlVTX0NP TSwgMHgxMDApLAorCURFQlVHQlVTKEE2WFhfREJHQlVTX0xSWiwgMHgxMDApLAorCURFQlVHQlVT KEE2WFhfREJHQlVTX0EyRCwgMHgxMDApLAorCURFQlVHQlVTKEE2WFhfREJHQlVTX0NDVUZDSEUs IDB4MTAwKSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19SQlAsIDB4MTAwKSwKKwlERUJVR0JVUyhB NlhYX0RCR0JVU19EQ1MsIDB4MTAwKSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19EQkdDLCAweDEw MCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfR01VX0dYLCAweDEwMCksCisJREVCVUdCVVMoQTZY WF9EQkdCVVNfVFBGQ0hFLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfR1BDLCAweDEw MCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfTEFSQywgMHgxMDApLAorCURFQlVHQlVTKEE2WFhf REJHQlVTX0hMU1FfU1BUUCwgMHgxMDApLAorCURFQlVHQlVTKEE2WFhfREJHQlVTX1JCXzAsIDB4 MTAwKSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19SQl8xLCAweDEwMCksCisJREVCVUdCVVMoQTZY WF9EQkdCVVNfVUNIRV9XUkFQUEVSLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfQ0NV XzAsIDB4MTAwKSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19DQ1VfMSwgMHgxMDApLAorCURFQlVH QlVTKEE2WFhfREJHQlVTX1ZGRF8wLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfVkZE XzEsIDB4MTAwKSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19WRkRfMiwgMHgxMDApLAorCURFQlVH QlVTKEE2WFhfREJHQlVTX1ZGRF8zLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfU1Bf MCwgMHgxMDApLAorCURFQlVHQlVTKEE2WFhfREJHQlVTX1NQXzEsIDB4MTAwKSwKKwlERUJVR0JV UyhBNlhYX0RCR0JVU19UUEwxXzAsIDB4MTAwKSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19UUEwx XzEsIDB4MTAwKSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19UUEwxXzIsIDB4MTAwKSwKKwlERUJV R0JVUyhBNlhYX0RCR0JVU19UUEwxXzMsIDB4MTAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgYTZ4eF9kZWJ1Z2J1c19ibG9jayBhNnh4X2N4X2RlYnVnYnVzX2Jsb2Nrc1tdID0geworCURF QlVHQlVTKEE2WFhfREJHQlVTX0dNVV9DWCwgMHgxMDApLAorCURFQlVHQlVTKEE2WFhfREJHQlVT X0NYLCAweDEwMCksCit9OworCisjZW5kaWYKLS0gCjIuMTguMAoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApGcmVl ZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vZnJlZWRyZW5vCg==