From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [DPU PATCH v4 6/6] drm/msm: remove dsi-staging driver Date: Fri, 1 Jun 2018 10:45:53 -0700 Message-ID: <1527875153-27446-7-git-send-email-jsanka@codeaurora.org> References: <1527875153-27446-1-git-send-email-jsanka@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1527875153-27446-1-git-send-email-jsanka-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: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, Jeykumar Sankaran , seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, Rajesh Yadav List-Id: linux-arm-msm@vger.kernel.org U0RNODQ1IGhhcyBzd2l0Y2hlZCBmcm9tIGRzaS1zdGFnaW5nIHRvIGRzaSBkcml2ZXIuIFJlbW92 aW5nCnN0YWxlIGNvZGUuCgpjaGFuZ2VzIGluIHYyOgoJLSByZW1vdmUgZmlsZSBjaGFuZ2VzIHVu cmVsYXRlZCB1cHN0cmVhbQpjaGFuZ2VzIGluIHYzOgoJLSByZW1vdmUgTWFrZWZpbGUgY2hhbmdl cwpjaGFuZ2VzIGluIHY0OgoJLSBub25lCgpTaWduZWQtb2ZmLWJ5OiBKZXlrdW1hciBTYW5rYXJh biA8anNhbmthQGNvZGVhdXJvcmEub3JnPgpTaWduZWQtb2ZmLWJ5OiBTZWFuIFBhdWwgPHNlYW5w YXVsQGNocm9taXVtLm9yZz4KU2lnbmVkLW9mZi1ieTogUmFqZXNoIFlhZGF2IDxyeWFkYXZAY29k ZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9LY29uZmlnICAgICAgICAgICAg ICAgICAgICAgICAgfCAgIDEyIC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNp X2NhdGFsb2cuYyAgICAgIHwgIDI0MSAtLQogZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2lu Zy9kc2lfY2F0YWxvZy5oICAgICAgfCAgMjAxIC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0 YWdpbmcvZHNpX2Nsay5oICAgICAgICAgIHwgIDI3NiAtLQogZHJpdmVycy9ncHUvZHJtL21zbS9k c2ktc3RhZ2luZy9kc2lfY2xrX21hbmFnZXIuYyAgfCAxMjM1IC0tLS0tLQogZHJpdmVycy9ncHUv ZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybC5jICAgICAgICAgfCAyODQ2IC0tLS0tLS0tLS0t LS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmwuaCAgICAgICAgIHwg IDYyMyAtLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmxfaHcuaCAg ICAgIHwgIDc1MiAtLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJs X2h3XzFfNC5jICB8ICA0ODAgLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2Rz aV9jdHJsX2h3XzJfMC5jICB8ICAyMzQgLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdp bmcvZHNpX2N0cmxfaHdfMl8yLmMgIHwgICA0MiAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1z dGFnaW5nL2RzaV9jdHJsX2h3X2Ntbi5jICB8IDEzMTIgLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0v bXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsX3JlZy5oICAgICB8ICAxOTYgLQogZHJpdmVycy9ncHUv ZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGVmcy5oICAgICAgICAgfCAgNTc5IC0tLQogZHJpdmVy cy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGlzcGxheS5jICAgICAgfCA0MjIxIC0tLS0t LS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kaXNw bGF5LmggICAgICB8ICA1NTYgLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2Rz aV9kaXNwbGF5X3Rlc3QuYyB8ICAxMTQgLQogZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2lu Zy9kc2lfZGlzcGxheV90ZXN0LmggfCAgIDMxIC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0 YWdpbmcvZHNpX2RybS5jICAgICAgICAgIHwgIDY4MSAtLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNt L2RzaS1zdGFnaW5nL2RzaV9kcm0uaCAgICAgICAgICB8ICAxMjcgLQogZHJpdmVycy9ncHUvZHJt L21zbS9kc2ktc3RhZ2luZy9kc2lfaHcuaCAgICAgICAgICAgfCAgIDQ4IC0KIGRyaXZlcnMvZ3B1 L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BhbmVsLmMgICAgICAgIHwgMzMyMSAtLS0tLS0tLS0t LS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BhbmVsLmggICAgICAg IHwgIDI1NyAtLQogZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5LmMgICAg ICAgICAgfCAgOTM3IC0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9w aHkuaCAgICAgICAgICB8ICAyMzUgLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcv ZHNpX3BoeV9ody5oICAgICAgIHwgIDI2MCAtLQogZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3Rh Z2luZy9kc2lfcGh5X2h3X3YyXzAuYyAgfCAgMjUyIC0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rz aS1zdGFnaW5nL2RzaV9waHlfaHdfdjNfMC5jICB8ICA0NDcgLS0tCiAuLi4vZ3B1L2RybS9tc20v ZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfY2FsYy5jICB8ICA2NzYgLS0tLQogLi4uL2dwdS9k cm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfdGltaW5nX2NhbGMuaCAgfCAgMTQ0IC0KIC4uLi9n cHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5X3RpbWluZ192Ml8wLmMgIHwgIDEyNiAtCiAu Li4vZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfdjNfMC5jICB8ICAxMDcg LQogZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcHdyLmMgICAgICAgICAgfCAg MzY1IC0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9wd3IuaCAgICAgICAg ICB8ICAgOTMgLQogMzQgZmlsZXMgY2hhbmdlZCwgMjIwMjcgZGVsZXRpb25zKC0pCiBkZWxldGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY2F0YWxvZy5j CiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lf Y2F0YWxvZy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3Rh Z2luZy9kc2lfY2xrLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rz aS1zdGFnaW5nL2RzaV9jbGtfbWFuYWdlci5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybC5oCiBkZWxldGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9ody5oCiBkZWxldGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9od18x XzQuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcv ZHNpX2N0cmxfaHdfMl8wLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNt L2RzaS1zdGFnaW5nL2RzaV9jdHJsX2h3XzJfMi5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9od19jbW4uYwogZGVsZXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmxfcmVnLmgKIGRl bGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kZWZz LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2Rz aV9kaXNwbGF5LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1z dGFnaW5nL2RzaV9kaXNwbGF5LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v bXNtL2RzaS1zdGFnaW5nL2RzaV9kaXNwbGF5X3Rlc3QuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Rpc3BsYXlfdGVzdC5oCiBkZWxldGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZHJtLmMKIGRl bGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kcm0u aAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNp X2h3LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5n L2RzaV9wYW5lbC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2kt c3RhZ2luZy9kc2lfcGFuZWwuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9t c20vZHNpLXN0YWdpbmcvZHNpX3BoeS5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfaHcuaAogZGVsZXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV9od192Ml8wLmMKIGRlbGV0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfaHdf djNfMC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2lu Zy9kc2lfcGh5X3RpbWluZ19jYWxjLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfdGltaW5nX2NhbGMuaAogZGVsZXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfdjJfMC5j CiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lf cGh5X3RpbWluZ192M18wLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNt L2RzaS1zdGFnaW5nL2RzaV9wd3IuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9tc20vZHNpLXN0YWdpbmcvZHNpX3B3ci5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL21zbS9LY29uZmlnCmluZGV4IGEzODMzZTcu LmFkYjg4YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vS2NvbmZpZworKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL0tjb25maWcKQEAgLTcxLDE4ICs3MSw2IEBAIGNvbmZpZyBEUk1f TVNNX0RTSQogCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgbmVlZCBmb3IgTUlQ SSBEU0kgY29ubmVjdG9yCiAJICBzdXBwb3J0LgogCi1jb25maWcgRFJNX01TTV9EU0lfU1RBR0lO RwotCWJvb2wgIkVuYWJsZSBuZXcgRFNJIGRyaXZlciBzdXBwb3J0IGluIE1TTSBEUk0gZHJpdmVy IgotCWRlcGVuZHMgb24gRFJNX01TTQotCXNlbGVjdCBEUk1fUEFORUwKLQlzZWxlY3QgRFJNX01J UElfRFNJCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBu ZWVkIE1JUEkgRFNJIGNvbm5lY3RvciBzdXBwb3J0IG9uIE1TTQotCSAgd2hpY2ggY29uZm9ybXMg dG8gRFJNLiBNSVBJIHN0YW5kcyBmb3IgTW9iaWxlIEluZHVzdHJ5IFByb2Nlc3NvcgotCSAgSW50 ZXJmYWNlIGFuZCBEU0kgc3RhbmRzIGZvciBEaXNwbGF5IFNlcmlhbCBJbnRlcmZhY2Ugd2hpY2gg cG93ZXJzCi0JICB0aGUgcHJpbWFyeSBkaXNwbGF5IG9mIHlvdXIgbW9iaWxlIGRldmljZS4KLQog Y29uZmlnIERSTV9NU01fRFNJX1BMTAogCWJvb2wgIkVuYWJsZSBEU0kgUExMIGRyaXZlciBpbiBN U00gRFJNIgogCWRlcGVuZHMgb24gRFJNX01TTV9EU0kgJiYgQ09NTU9OX0NMSwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY2F0YWxvZy5jIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY2F0YWxvZy5jCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAzY2I2NTlhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHNpLXN0YWdpbmcvZHNpX2NhdGFsb2cuYworKysgL2Rldi9udWxsCkBAIC0xLDI0MSArMCwwIEBA Ci0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAq IG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNkZWZpbmUgcHJfZm10 KGZtdCkgIm1zbS1kc2ktY2F0YWxvZzpbJXNdICIgZm10LCBfX2Z1bmNfXwotI2luY2x1ZGUgPGxp bnV4L2Vycm5vLmg+Ci0KLSNpbmNsdWRlICJkc2lfY2F0YWxvZy5oIgotCi0vKioKLSAqIGRzaV9j YXRhbG9nX2Ntbl9pbml0KCkgLSBjYXRhbG9nIGluaXQgZm9yIGRzaSBjb250cm9sbGVyIHYxLjQK LSAqLwotc3RhdGljIHZvaWQgZHNpX2NhdGFsb2dfY21uX2luaXQoc3RydWN0IGRzaV9jdHJsX2h3 ICpjdHJsLAotCQllbnVtIGRzaV9jdHJsX3ZlcnNpb24gdmVyc2lvbikKLXsKLQkvKiBjb21tb24g ZnVuY3Rpb25zICovCi0JY3RybC0+b3BzLmhvc3Rfc2V0dXAgICAgICAgICAgICAgPSBkc2lfY3Ry bF9od19jbW5faG9zdF9zZXR1cDsKLQljdHJsLT5vcHMudmlkZW9fZW5naW5lX2VuICAgICAgICA9 IGRzaV9jdHJsX2h3X2Ntbl92aWRlb19lbmdpbmVfZW47Ci0JY3RybC0+b3BzLnZpZGVvX2VuZ2lu ZV9zZXR1cCAgICAgPSBkc2lfY3RybF9od19jbW5fdmlkZW9fZW5naW5lX3NldHVwOwotCWN0cmwt Pm9wcy5zZXRfdmlkZW9fdGltaW5nICAgICAgID0gZHNpX2N0cmxfaHdfY21uX3NldF92aWRlb190 aW1pbmc7Ci0JY3RybC0+b3BzLnNldF90aW1pbmdfZGIgICAgICAgICAgPSBkc2lfY3RybF9od19j bW5fc2V0X3RpbWluZ19kYjsKLQljdHJsLT5vcHMuY21kX2VuZ2luZV9zZXR1cCAgICAgICA9IGRz aV9jdHJsX2h3X2Ntbl9jbWRfZW5naW5lX3NldHVwOwotCWN0cmwtPm9wcy5zZXR1cF9jbWRfc3Ry ZWFtICAgICAgID0gZHNpX2N0cmxfaHdfY21uX3NldHVwX2NtZF9zdHJlYW07Ci0JY3RybC0+b3Bz LmN0cmxfZW4gICAgICAgICAgICAgICAgPSBkc2lfY3RybF9od19jbW5fY3RybF9lbjsKLQljdHJs LT5vcHMuY21kX2VuZ2luZV9lbiAgICAgICAgICA9IGRzaV9jdHJsX2h3X2Ntbl9jbWRfZW5naW5l X2VuOwotCWN0cmwtPm9wcy5waHlfc3dfcmVzZXQgICAgICAgICAgID0gZHNpX2N0cmxfaHdfY21u X3BoeV9zd19yZXNldDsKLQljdHJsLT5vcHMuc29mdF9yZXNldCAgICAgICAgICAgICA9IGRzaV9j dHJsX2h3X2Ntbl9zb2Z0X3Jlc2V0OwotCWN0cmwtPm9wcy5raWNrb2ZmX2NvbW1hbmQgICAgICAg ID0gZHNpX2N0cmxfaHdfY21uX2tpY2tvZmZfY29tbWFuZDsKLQljdHJsLT5vcHMua2lja29mZl9m aWZvX2NvbW1hbmQgICA9IGRzaV9jdHJsX2h3X2Ntbl9raWNrb2ZmX2ZpZm9fY29tbWFuZDsKLQlj dHJsLT5vcHMucmVzZXRfY21kX2ZpZm8gICAgICAgICA9IGRzaV9jdHJsX2h3X2Ntbl9yZXNldF9j bWRfZmlmbzsKLQljdHJsLT5vcHMudHJpZ2dlcl9jb21tYW5kX2RtYSAgICA9IGRzaV9jdHJsX2h3 X2Ntbl90cmlnZ2VyX2NvbW1hbmRfZG1hOwotCWN0cmwtPm9wcy5nZXRfaW50ZXJydXB0X3N0YXR1 cyAgID0gZHNpX2N0cmxfaHdfY21uX2dldF9pbnRlcnJ1cHRfc3RhdHVzOwotCWN0cmwtPm9wcy5n ZXRfZXJyb3Jfc3RhdHVzICAgICAgID0gZHNpX2N0cmxfaHdfY21uX2dldF9lcnJvcl9zdGF0dXM7 Ci0JY3RybC0+b3BzLmNsZWFyX2Vycm9yX3N0YXR1cyAgICAgPSBkc2lfY3RybF9od19jbW5fY2xl YXJfZXJyb3Jfc3RhdHVzOwotCWN0cmwtPm9wcy5jbGVhcl9pbnRlcnJ1cHRfc3RhdHVzID0KLQkJ ZHNpX2N0cmxfaHdfY21uX2NsZWFyX2ludGVycnVwdF9zdGF0dXM7Ci0JY3RybC0+b3BzLmVuYWJs ZV9zdGF0dXNfaW50ZXJydXB0cyA9Ci0JCWRzaV9jdHJsX2h3X2Ntbl9lbmFibGVfc3RhdHVzX2lu dGVycnVwdHM7Ci0JY3RybC0+b3BzLmVuYWJsZV9lcnJvcl9pbnRlcnJ1cHRzID0KLQkJZHNpX2N0 cmxfaHdfY21uX2VuYWJsZV9lcnJvcl9pbnRlcnJ1cHRzOwotCWN0cmwtPm9wcy52aWRlb190ZXN0 X3BhdHRlcm5fc2V0dXAgPQotCQlkc2lfY3RybF9od19jbW5fdmlkZW9fdGVzdF9wYXR0ZXJuX3Nl dHVwOwotCWN0cmwtPm9wcy5jbWRfdGVzdF9wYXR0ZXJuX3NldHVwID0KLQkJZHNpX2N0cmxfaHdf Y21uX2NtZF90ZXN0X3BhdHRlcm5fc2V0dXA7Ci0JY3RybC0+b3BzLnRlc3RfcGF0dGVybl9lbmFi bGUgICAgPSBkc2lfY3RybF9od19jbW5fdGVzdF9wYXR0ZXJuX2VuYWJsZTsKLQljdHJsLT5vcHMu dHJpZ2dlcl9jbWRfdGVzdF9wYXR0ZXJuID0KLQkJZHNpX2N0cmxfaHdfY21uX3RyaWdnZXJfY21k X3Rlc3RfcGF0dGVybjsKLQljdHJsLT5vcHMuY2xlYXJfcGh5MF9sbl9lcnIgPSBkc2lfY3RybF9o d19kbG4wX3BoeV9lcnI7Ci0JY3RybC0+b3BzLnBoeV9yZXNldF9jb25maWcgPSBkc2lfY3RybF9o d19jbW5fcGh5X3Jlc2V0X2NvbmZpZzsKLQljdHJsLT5vcHMuc2V0dXBfbWlzciA9IGRzaV9jdHJs X2h3X2Ntbl9zZXR1cF9taXNyOwotCWN0cmwtPm9wcy5jb2xsZWN0X21pc3IgPSBkc2lfY3RybF9o d19jbW5fY29sbGVjdF9taXNyOwotCWN0cmwtPm9wcy5kZWJ1Z19idXMgPSBkc2lfY3RybF9od19j bW5fZGVidWdfYnVzOwotCi0Jc3dpdGNoICh2ZXJzaW9uKSB7Ci0JY2FzZSBEU0lfQ1RSTF9WRVJT SU9OXzFfNDoKLQkJY3RybC0+b3BzLnNldHVwX2xhbmVfbWFwID0gZHNpX2N0cmxfaHdfMTRfc2V0 dXBfbGFuZV9tYXA7Ci0JCWN0cmwtPm9wcy51bHBzX29wcy51bHBzX3JlcXVlc3QgPSBkc2lfY3Ry bF9od18xNF91bHBzX3JlcXVlc3Q7Ci0JCWN0cmwtPm9wcy51bHBzX29wcy51bHBzX2V4aXQgPSBk c2lfY3RybF9od18xNF91bHBzX2V4aXQ7Ci0JCWN0cmwtPm9wcy53YWl0X2Zvcl9sYW5lX2lkbGUg PQotCQkJZHNpX2N0cmxfaHdfMTRfd2FpdF9mb3JfbGFuZV9pZGxlOwotCQljdHJsLT5vcHMudWxw c19vcHMuZ2V0X2xhbmVzX2luX3VscHMgPQotCQkJZHNpX2N0cmxfaHdfMTRfZ2V0X2xhbmVzX2lu X3VscHM7Ci0JCWN0cmwtPm9wcy5jbGFtcF9lbmFibGUgPSBkc2lfY3RybF9od18xNF9jbGFtcF9l bmFibGU7Ci0JCWN0cmwtPm9wcy5jbGFtcF9kaXNhYmxlID0gZHNpX2N0cmxfaHdfMTRfY2xhbXBf ZGlzYWJsZTsKLQkJY3RybC0+b3BzLnJlZ19kdW1wX3RvX2J1ZmZlciA9Ci0JCQlkc2lfY3RybF9o d18xNF9yZWdfZHVtcF90b19idWZmZXI7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX0NUUkxfVkVSU0lP Tl8yXzA6Ci0JCWN0cmwtPm9wcy5zZXR1cF9sYW5lX21hcCA9IGRzaV9jdHJsX2h3XzIwX3NldHVw X2xhbmVfbWFwOwotCQljdHJsLT5vcHMud2FpdF9mb3JfbGFuZV9pZGxlID0KLQkJCWRzaV9jdHJs X2h3XzIwX3dhaXRfZm9yX2xhbmVfaWRsZTsKLQkJY3RybC0+b3BzLnJlZ19kdW1wX3RvX2J1ZmZl ciA9Ci0JCQlkc2lfY3RybF9od18yMF9yZWdfZHVtcF90b19idWZmZXI7Ci0JCWN0cmwtPm9wcy51 bHBzX29wcy51bHBzX3JlcXVlc3QgPSBOVUxMOwotCQljdHJsLT5vcHMudWxwc19vcHMudWxwc19l eGl0ID0gTlVMTDsKLQkJY3RybC0+b3BzLnVscHNfb3BzLmdldF9sYW5lc19pbl91bHBzID0gTlVM TDsKLQkJY3RybC0+b3BzLmNsYW1wX2VuYWJsZSA9IE5VTEw7Ci0JCWN0cmwtPm9wcy5jbGFtcF9k aXNhYmxlID0gTlVMTDsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQ1RSTF9WRVJTSU9OXzJfMjoKLQkJ Y3RybC0+b3BzLnBoeV9yZXNldF9jb25maWcgPSBkc2lfY3RybF9od18yMl9waHlfcmVzZXRfY29u ZmlnOwotCQljdHJsLT5vcHMuc2V0dXBfbGFuZV9tYXAgPSBkc2lfY3RybF9od18yMF9zZXR1cF9s YW5lX21hcDsKLQkJY3RybC0+b3BzLndhaXRfZm9yX2xhbmVfaWRsZSA9Ci0JCQlkc2lfY3RybF9o d18yMF93YWl0X2Zvcl9sYW5lX2lkbGU7Ci0JCWN0cmwtPm9wcy5yZWdfZHVtcF90b19idWZmZXIg PQotCQkJZHNpX2N0cmxfaHdfMjBfcmVnX2R1bXBfdG9fYnVmZmVyOwotCQljdHJsLT5vcHMudWxw c19vcHMudWxwc19yZXF1ZXN0ID0gTlVMTDsKLQkJY3RybC0+b3BzLnVscHNfb3BzLnVscHNfZXhp dCA9IE5VTEw7Ci0JCWN0cmwtPm9wcy51bHBzX29wcy5nZXRfbGFuZXNfaW5fdWxwcyA9IE5VTEw7 Ci0JCWN0cmwtPm9wcy5jbGFtcF9lbmFibGUgPSBOVUxMOwotCQljdHJsLT5vcHMuY2xhbXBfZGlz YWJsZSA9IE5VTEw7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQotLyoq Ci0gKiBkc2lfY2F0YWxvZ19jdHJsX3NldHVwKCkgLSByZXR1cm4gY2F0YWxvZyBpbmZvIGZvciBk c2kgY29udHJvbGxlcgotICogQGN0cmw6ICAgICAgICBQb2ludGVyIHRvIERTSSBjb250cm9sbGVy IGh3IG9iamVjdC4KLSAqIEB2ZXJzaW9uOiAgICAgRFNJIGNvbnRyb2xsZXIgdmVyc2lvbi4KLSAq IEBpbmRleDogICAgICAgRFNJIGNvbnRyb2xsZXIgaW5zdGFuY2UgSUQuCi0gKiBAcGh5X2lzb2xh dGlvbl9lbmFibGVkOiAgICAgICBEU0kgY29udHJvbGxlciB3b3JrcyBpc29sYXRlZCBmcm9tIHBo eS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNldHVwcyB0aGUgY2F0YWxvZyBpbmZvcm1hdGlvbiBp biB0aGUgZHNpX2N0cmxfaHcgb2JqZWN0LgotICoKLSAqIHJldHVybjogZXJyb3IgY29kZSBmb3Ig ZmFpbHVyZSBhbmQgMCBmb3Igc3VjY2Vzcy4KLSAqLwotaW50IGRzaV9jYXRhbG9nX2N0cmxfc2V0 dXAoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkgICBlbnVtIGRzaV9jdHJsX3ZlcnNpb24g dmVyc2lvbiwgdTMyIGluZGV4LAotCQkgICBib29sIHBoeV9pc29sYXRpb25fZW5hYmxlZCkKLXsK LQlpbnQgcmMgPSAwOwotCi0JaWYgKHZlcnNpb24gPT0gRFNJX0NUUkxfVkVSU0lPTl9VTktOT1dO IHx8Ci0JICAgIHZlcnNpb24gPj0gRFNJX0NUUkxfVkVSU0lPTl9NQVgpIHsKLQkJcHJfZXJyKCJV bnN1cHBvcnRlZCB2ZXJzaW9uOiAlZFxuIiwgdmVyc2lvbik7Ci0JCXJldHVybiAtRU5PVFNVUFA7 Ci0JfQotCi0JY3RybC0+aW5kZXggPSBpbmRleDsKLQlzZXRfYml0KERTSV9DVFJMX1ZJREVPX1RQ RywgY3RybC0+ZmVhdHVyZV9tYXApOwotCXNldF9iaXQoRFNJX0NUUkxfQ01EX1RQRywgY3RybC0+ ZmVhdHVyZV9tYXApOwotCXNldF9iaXQoRFNJX0NUUkxfVkFSSUFCTEVfUkVGUkVTSF9SQVRFLCBj dHJsLT5mZWF0dXJlX21hcCk7Ci0Jc2V0X2JpdChEU0lfQ1RSTF9EWU5BTUlDX1JFRlJFU0gsIGN0 cmwtPmZlYXR1cmVfbWFwKTsKLQlzZXRfYml0KERTSV9DVFJMX0RFU0tFV19DQUxJQiwgY3RybC0+ ZmVhdHVyZV9tYXApOwotCXNldF9iaXQoRFNJX0NUUkxfRFBIWSwgY3RybC0+ZmVhdHVyZV9tYXAp OwotCi0Jc3dpdGNoICh2ZXJzaW9uKSB7Ci0JY2FzZSBEU0lfQ1RSTF9WRVJTSU9OXzFfNDoKLQkJ ZHNpX2NhdGFsb2dfY21uX2luaXQoY3RybCwgdmVyc2lvbik7Ci0JCWJyZWFrOwotCWNhc2UgRFNJ X0NUUkxfVkVSU0lPTl8yXzA6Ci0JY2FzZSBEU0lfQ1RSTF9WRVJTSU9OXzJfMjoKLQkJY3RybC0+ cGh5X2lzb2xhdGlvbl9lbmFibGVkID0gcGh5X2lzb2xhdGlvbl9lbmFibGVkOwotCQlkc2lfY2F0 YWxvZ19jbW5faW5pdChjdHJsLCB2ZXJzaW9uKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0 dXJuIC1FTk9UU1VQUDsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogZHNpX2NhdGFs b2dfcGh5XzJfMF9pbml0KCkgLSBjYXRhbG9nIGluaXQgZm9yIERTSSBQSFkgMTRubQotICovCi1z dGF0aWMgdm9pZCBkc2lfY2F0YWxvZ19waHlfMl8wX2luaXQoc3RydWN0IGRzaV9waHlfaHcgKnBo eSkKLXsKLQlwaHktPm9wcy5yZWd1bGF0b3JfZW5hYmxlID0gZHNpX3BoeV9od192Ml8wX3JlZ3Vs YXRvcl9lbmFibGU7Ci0JcGh5LT5vcHMucmVndWxhdG9yX2Rpc2FibGUgPSBkc2lfcGh5X2h3X3Yy XzBfcmVndWxhdG9yX2Rpc2FibGU7Ci0JcGh5LT5vcHMuZW5hYmxlID0gZHNpX3BoeV9od192Ml8w X2VuYWJsZTsKLQlwaHktPm9wcy5kaXNhYmxlID0gZHNpX3BoeV9od192Ml8wX2Rpc2FibGU7Ci0J cGh5LT5vcHMuY2FsY3VsYXRlX3RpbWluZ19wYXJhbXMgPQotCQlkc2lfcGh5X2h3X2NhbGN1bGF0 ZV90aW1pbmdfcGFyYW1zOwotCXBoeS0+b3BzLnBoeV9pZGxlX29uID0gZHNpX3BoeV9od192Ml8w X2lkbGVfb247Ci0JcGh5LT5vcHMucGh5X2lkbGVfb2ZmID0gZHNpX3BoeV9od192Ml8wX2lkbGVf b2ZmOwotCXBoeS0+b3BzLmNhbGN1bGF0ZV90aW1pbmdfcGFyYW1zID0KLQkJZHNpX3BoeV9od19j YWxjdWxhdGVfdGltaW5nX3BhcmFtczsKLQlwaHktPm9wcy5waHlfdGltaW5nX3ZhbCA9IGRzaV9w aHlfaHdfdGltaW5nX3ZhbF92Ml8wOwotfQotCi0vKioKLSAqIGRzaV9jYXRhbG9nX3BoeV8zXzBf aW5pdCgpIC0gY2F0YWxvZyBpbml0IGZvciBEU0kgUEhZIDEwbm0KLSAqLwotc3RhdGljIHZvaWQg ZHNpX2NhdGFsb2dfcGh5XzNfMF9pbml0KHN0cnVjdCBkc2lfcGh5X2h3ICpwaHkpCi17Ci0JcGh5 LT5vcHMucmVndWxhdG9yX2VuYWJsZSA9IGRzaV9waHlfaHdfdjNfMF9yZWd1bGF0b3JfZW5hYmxl OwotCXBoeS0+b3BzLnJlZ3VsYXRvcl9kaXNhYmxlID0gZHNpX3BoeV9od192M18wX3JlZ3VsYXRv cl9kaXNhYmxlOwotCXBoeS0+b3BzLmVuYWJsZSA9IGRzaV9waHlfaHdfdjNfMF9lbmFibGU7Ci0J cGh5LT5vcHMuZGlzYWJsZSA9IGRzaV9waHlfaHdfdjNfMF9kaXNhYmxlOwotCXBoeS0+b3BzLmNh bGN1bGF0ZV90aW1pbmdfcGFyYW1zID0KLQkJZHNpX3BoeV9od19jYWxjdWxhdGVfdGltaW5nX3Bh cmFtczsKLQlwaHktPm9wcy51bHBzX29wcy53YWl0X2Zvcl9sYW5lX2lkbGUgPQotCQlkc2lfcGh5 X2h3X3YzXzBfd2FpdF9mb3JfbGFuZV9pZGxlOwotCXBoeS0+b3BzLnVscHNfb3BzLnVscHNfcmVx dWVzdCA9Ci0JCWRzaV9waHlfaHdfdjNfMF91bHBzX3JlcXVlc3Q7Ci0JcGh5LT5vcHMudWxwc19v cHMudWxwc19leGl0ID0KLQkJZHNpX3BoeV9od192M18wX3VscHNfZXhpdDsKLQlwaHktPm9wcy51 bHBzX29wcy5nZXRfbGFuZXNfaW5fdWxwcyA9Ci0JCWRzaV9waHlfaHdfdjNfMF9nZXRfbGFuZXNf aW5fdWxwczsKLQlwaHktPm9wcy51bHBzX29wcy5pc19sYW5lc19pbl91bHBzID0KLQkJZHNpX3Bo eV9od192M18wX2lzX2xhbmVzX2luX3VscHM7Ci0JcGh5LT5vcHMucGh5X3RpbWluZ192YWwgPSBk c2lfcGh5X2h3X3RpbWluZ192YWxfdjNfMDsKLX0KLQotLyoqCi0gKiBkc2lfY2F0YWxvZ19waHlf c2V0dXAoKSAtIHJldHVybiBjYXRhbG9nIGluZm8gZm9yIGRzaSBwaHkgaGFyZHdhcmUKLSAqIEBj dHJsOiAgICAgICAgUG9pbnRlciB0byBEU0kgUEhZIGh3IG9iamVjdC4KLSAqIEB2ZXJzaW9uOiAg ICAgRFNJIFBIWSB2ZXJzaW9uLgotICogQGluZGV4OiAgICAgICBEU0kgUEhZIGluc3RhbmNlIElE LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2V0dXBzIHRoZSBjYXRhbG9nIGluZm9ybWF0aW9uIGlu IHRoZSBkc2lfcGh5X2h3IG9iamVjdC4KLSAqCi0gKiByZXR1cm46IGVycm9yIGNvZGUgZm9yIGZh aWx1cmUgYW5kIDAgZm9yIHN1Y2Nlc3MuCi0gKi8KLWludCBkc2lfY2F0YWxvZ19waHlfc2V0dXAo c3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCSAgZW51bSBkc2lfcGh5X3ZlcnNpb24gdmVyc2lv biwKLQkJCSAgdTMyIGluZGV4KQotewotCWludCByYyA9IDA7Ci0KLQlpZiAodmVyc2lvbiA9PSBE U0lfUEhZX1ZFUlNJT05fVU5LTk9XTiB8fAotCSAgICB2ZXJzaW9uID49IERTSV9QSFlfVkVSU0lP Tl9NQVgpIHsKLQkJcHJfZXJyKCJVbnN1cHBvcnRlZCB2ZXJzaW9uOiAlZFxuIiwgdmVyc2lvbik7 Ci0JCXJldHVybiAtRU5PVFNVUFA7Ci0JfQotCi0JcGh5LT5pbmRleCA9IGluZGV4OwotCXNldF9i aXQoRFNJX1BIWV9EUEhZLCBwaHktPmZlYXR1cmVfbWFwKTsKLQotCWRzaV9waHlfdGltaW5nX2Nh bGNfaW5pdChwaHksIHZlcnNpb24pOwotCi0Jc3dpdGNoICh2ZXJzaW9uKSB7Ci0JY2FzZSBEU0lf UEhZX1ZFUlNJT05fMl8wOgotCQlkc2lfY2F0YWxvZ19waHlfMl8wX2luaXQocGh5KTsKLQkJYnJl YWs7Ci0JY2FzZSBEU0lfUEhZX1ZFUlNJT05fM18wOgotCQlkc2lfY2F0YWxvZ19waHlfM18wX2lu aXQocGh5KTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfUEhZX1ZFUlNJT05fMF8wX0hQTToKLQljYXNl IERTSV9QSFlfVkVSU0lPTl8wXzBfTFBNOgotCWNhc2UgRFNJX1BIWV9WRVJTSU9OXzFfMDoKLQlk ZWZhdWx0OgotCQlyZXR1cm4gLUVOT1RTVVBQOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jYXRhbG9nLmgg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jYXRhbG9nLmgKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhNDZhZTAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY2F0YWxvZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAx ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwgVGhlIExpbnV4IEZvdW5k YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy IGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2lmbmRl ZiBfRFNJX0NBVEFMT0dfSF8KLSNkZWZpbmUgX0RTSV9DQVRBTE9HX0hfCi0KLSNpbmNsdWRlICJk c2lfY3RybF9ody5oIgotI2luY2x1ZGUgImRzaV9waHlfaHcuaCIKLQotLyoqCi0gKiBkc2lfY2F0 YWxvZ19jdHJsX3NldHVwKCkgLSByZXR1cm4gY2F0YWxvZyBpbmZvIGZvciBkc2kgY29udHJvbGxl cgotICogQGN0cmw6ICAgICAgICBQb2ludGVyIHRvIERTSSBjb250cm9sbGVyIGh3IG9iamVjdC4K LSAqIEB2ZXJzaW9uOiAgICAgRFNJIGNvbnRyb2xsZXIgdmVyc2lvbi4KLSAqIEBpbmRleDogICAg ICAgRFNJIGNvbnRyb2xsZXIgaW5zdGFuY2UgSUQuCi0gKiBAcGh5X2lzb2xhdGlvbl9lbmFibGVk OiAgICAgICBEU0kgY29udHJvbGxlciB3b3JrcyBpc29sYXRlZCBmcm9tIHBoeS4KLSAqCi0gKiBU aGlzIGZ1bmN0aW9uIHNldHVwcyB0aGUgY2F0YWxvZyBpbmZvcm1hdGlvbiBpbiB0aGUgZHNpX2N0 cmxfaHcgb2JqZWN0LgotICoKLSAqIHJldHVybjogZXJyb3IgY29kZSBmb3IgZmFpbHVyZSBhbmQg MCBmb3Igc3VjY2Vzcy4KLSAqLwotaW50IGRzaV9jYXRhbG9nX2N0cmxfc2V0dXAoc3RydWN0IGRz aV9jdHJsX2h3ICpjdHJsLAotCQkgICBlbnVtIGRzaV9jdHJsX3ZlcnNpb24gdmVyc2lvbiwgdTMy IGluZGV4LAotCQkgICBib29sIHBoeV9pc29sYXRpb25fZW5hYmxlZCk7Ci0KLS8qKgotICogZHNp X2NhdGFsb2dfcGh5X3NldHVwKCkgLSByZXR1cm4gY2F0YWxvZyBpbmZvIGZvciBkc2kgcGh5IGhh cmR3YXJlCi0gKiBAcGh5OiAgICAgICAgUG9pbnRlciB0byBEU0kgUEhZIGh3IG9iamVjdC4KLSAq IEB2ZXJzaW9uOiAgICAgRFNJIFBIWSB2ZXJzaW9uLgotICogQGluZGV4OiAgICAgICBEU0kgUEhZ IGluc3RhbmNlIElELgotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2V0dXBzIHRoZSBjYXRhbG9nIGlu Zm9ybWF0aW9uIGluIHRoZSBkc2lfcGh5X2h3IG9iamVjdC4KLSAqCi0gKiByZXR1cm46IGVycm9y IGNvZGUgZm9yIGZhaWx1cmUgYW5kIDAgZm9yIHN1Y2Nlc3MuCi0gKi8KLWludCBkc2lfY2F0YWxv Z19waHlfc2V0dXAoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCSAgZW51bSBkc2lfcGh5X3Zl cnNpb24gdmVyc2lvbiwKLQkJCSAgdTMyIGluZGV4KTsKLQotLyoqCi0gKiBkc2lfcGh5X3RpbWlu Z19jYWxjX2luaXQoKSAtIGluaXRpYWxpemUgaW5mbyBmb3IgRFNJIFBIWSB0aW1pbmcgY2FsY3Vs YXRpb25zCi0gKiBAcGh5OiAgICAgICAgUG9pbnRlciB0byBEU0kgUEhZIGh3IG9iamVjdC4KLSAq IEB2ZXJzaW9uOiAgICAgRFNJIFBIWSB2ZXJzaW9uLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2V0 dXBzIHRoZSBjYXRhbG9nIGluZm9ybWF0aW9uIGluIHRoZSBkc2lfcGh5X2h3IG9iamVjdC4KLSAq Ci0gKiByZXR1cm46IGVycm9yIGNvZGUgZm9yIGZhaWx1cmUgYW5kIDAgZm9yIHN1Y2Nlc3MuCi0g Ki8KLWludCBkc2lfcGh5X3RpbWluZ19jYWxjX2luaXQoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwK LQllbnVtIGRzaV9waHlfdmVyc2lvbiB2ZXJzaW9uKTsKLQotLyoqCi0gKiBkc2lfcGh5X2h3X2Nh bGN1bGF0ZV90aW1pbmdfcGFyYW1zKCkgLSBEU0kgUEhZIHRpbWluZyBwYXJhbWV0ZXIgY2FsY3Vs YXRpb25zCi0gKiBAcGh5OiAgICAgICAgUG9pbnRlciB0byBEU0kgUEhZIGh3IG9iamVjdC4KLSAq IEBtb2RlOiAgICAgICBEU0kgbW9kZSBpbmZvcm1hdGlvbi4KLSAqIEBob3N0OiAgICAgICBEU0kg aG9zdCBjb25maWd1cmF0aW9uLgotICogQHRpbWluZzogICAgIERTSSBwaHkgbGFuZSBjb25maWd1 cmF0aW9ucy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNldHVwcyB0aGUgY2F0YWxvZyBpbmZvcm1h dGlvbiBpbiB0aGUgZHNpX3BoeV9odyBvYmplY3QuCi0gKgotICogcmV0dXJuOiBlcnJvciBjb2Rl IGZvciBmYWlsdXJlIGFuZCAwIGZvciBzdWNjZXNzLgotICovCi1pbnQgZHNpX3BoeV9od19jYWxj dWxhdGVfdGltaW5nX3BhcmFtcyhzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJCQkgICAgc3Ry dWN0IGRzaV9tb2RlX2luZm8gKm1vZGUsCi0Jc3RydWN0IGRzaV9ob3N0X2NvbW1vbl9jZmcgKmhv c3QsCi0Jc3RydWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyAqdGltaW5nKTsKLQotLyogRGVmaW5p dGlvbnMgZm9yIDE0bm0gUEhZIGhhcmR3YXJlIGRyaXZlciAqLwotdm9pZCBkc2lfcGh5X2h3X3Yy XzBfcmVndWxhdG9yX2VuYWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJCSAgICAgIHN0 cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKmNmZyk7Ci12b2lkIGRzaV9waHlfaHdfdjJfMF9y ZWd1bGF0b3JfZGlzYWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5KTsKLXZvaWQgZHNpX3BoeV9o d192Ml8wX2VuYWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LCBzdHJ1Y3QgZHNpX3BoeV9jZmcg KmNmZyk7Ci12b2lkIGRzaV9waHlfaHdfdjJfMF9kaXNhYmxlKHN0cnVjdCBkc2lfcGh5X2h3ICpw aHksIHN0cnVjdCBkc2lfcGh5X2NmZyAqY2ZnKTsKLXZvaWQgZHNpX3BoeV9od192Ml8wX2lkbGVf b24oc3RydWN0IGRzaV9waHlfaHcgKnBoeSwgc3RydWN0IGRzaV9waHlfY2ZnICpjZmcpOwotdm9p ZCBkc2lfcGh5X2h3X3YyXzBfaWRsZV9vZmYoc3RydWN0IGRzaV9waHlfaHcgKnBoeSk7Ci1pbnQg ZHNpX3BoeV9od190aW1pbmdfdmFsX3YyXzAoc3RydWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyAq dGltaW5nX2NmZywKLQkJdTMyICp0aW1pbmdfdmFsLCB1MzIgc2l6ZSk7Ci0KLS8qIERlZmluaXRp b25zIGZvciAxMG5tIFBIWSBoYXJkd2FyZSBkcml2ZXIgKi8KLXZvaWQgZHNpX3BoeV9od192M18w X3JlZ3VsYXRvcl9lbmFibGUoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCQkgICAgICBzdHJ1 Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzICpjZmcpOwotdm9pZCBkc2lfcGh5X2h3X3YzXzBfcmVn dWxhdG9yX2Rpc2FibGUoc3RydWN0IGRzaV9waHlfaHcgKnBoeSk7Ci12b2lkIGRzaV9waHlfaHdf djNfMF9lbmFibGUoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwgc3RydWN0IGRzaV9waHlfY2ZnICpj ZmcpOwotdm9pZCBkc2lfcGh5X2h3X3YzXzBfZGlzYWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5 LCBzdHJ1Y3QgZHNpX3BoeV9jZmcgKmNmZyk7Ci1pbnQgZHNpX3BoeV9od192M18wX3dhaXRfZm9y X2xhbmVfaWRsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LCB1MzIgbGFuZXMpOwotdm9pZCBkc2lf cGh5X2h3X3YzXzBfdWxwc19yZXF1ZXN0KHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0JCXN0cnVj dCBkc2lfcGh5X2NmZyAqY2ZnLCB1MzIgbGFuZXMpOwotdm9pZCBkc2lfcGh5X2h3X3YzXzBfdWxw c19leGl0KHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0JCQlzdHJ1Y3QgZHNpX3BoeV9jZmcgKmNm ZywgdTMyIGxhbmVzKTsKLXUzMiBkc2lfcGh5X2h3X3YzXzBfZ2V0X2xhbmVzX2luX3VscHMoc3Ry dWN0IGRzaV9waHlfaHcgKnBoeSk7Ci1ib29sIGRzaV9waHlfaHdfdjNfMF9pc19sYW5lc19pbl91 bHBzKHUzMiBsYW5lcywgdTMyIHVscHNfbGFuZXMpOwotaW50IGRzaV9waHlfaHdfdGltaW5nX3Zh bF92M18wKHN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnRpbWluZ19jZmcsCi0JCXUzMiAq dGltaW5nX3ZhbCwgdTMyIHNpemUpOwotCi0vKiBEU0kgY29udHJvbGxlciBjb21tb24gb3BzICov Ci11MzIgZHNpX2N0cmxfaHdfY21uX2dldF9pbnRlcnJ1cHRfc3RhdHVzKHN0cnVjdCBkc2lfY3Ry bF9odyAqY3RybCk7Ci12b2lkIGRzaV9jdHJsX2h3X2Ntbl9kZWJ1Z19idXMoc3RydWN0IGRzaV9j dHJsX2h3ICpjdHJsKTsKLXZvaWQgZHNpX2N0cmxfaHdfY21uX2NsZWFyX2ludGVycnVwdF9zdGF0 dXMoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCB1MzIgaW50cyk7Ci12b2lkIGRzaV9jdHJsX2h3 X2Ntbl9lbmFibGVfc3RhdHVzX2ludGVycnVwdHMoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAot CQkJCQkgICAgIHUzMiBpbnRzKTsKLQotdTY0IGRzaV9jdHJsX2h3X2Ntbl9nZXRfZXJyb3Jfc3Rh dHVzKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCk7Ci12b2lkIGRzaV9jdHJsX2h3X2Ntbl9jbGVh cl9lcnJvcl9zdGF0dXMoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCB1NjQgZXJyb3JzKTsKLXZv aWQgZHNpX2N0cmxfaHdfY21uX2VuYWJsZV9lcnJvcl9pbnRlcnJ1cHRzKHN0cnVjdCBkc2lfY3Ry bF9odyAqY3RybCwKLQkJCQkJICAgIHU2NCBlcnJvcnMpOwotCi12b2lkIGRzaV9jdHJsX2h3X2Nt bl92aWRlb190ZXN0X3BhdHRlcm5fc2V0dXAoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJ CSBlbnVtIGRzaV90ZXN0X3BhdHRlcm4gdHlwZSwKLQkJCQkgdTMyIGluaXRfdmFsKTsKLXZvaWQg ZHNpX2N0cmxfaHdfY21uX2NtZF90ZXN0X3BhdHRlcm5fc2V0dXAoc3RydWN0IGRzaV9jdHJsX2h3 ICpjdHJsLAotCQkJICAgICAgIGVudW0gZHNpX3Rlc3RfcGF0dGVybiAgdHlwZSwKLQkJCSAgICAg ICB1MzIgaW5pdF92YWwsCi0JCQkgICAgICAgdTMyIHN0cmVhbV9pZCk7Ci12b2lkIGRzaV9jdHJs X2h3X2Ntbl90ZXN0X3BhdHRlcm5fZW5hYmxlKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwgYm9v bCBlbmFibGUpOwotdm9pZCBkc2lfY3RybF9od19jbW5fdHJpZ2dlcl9jbWRfdGVzdF9wYXR0ZXJu KHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkgdTMyIHN0cmVhbV9pZCk7Ci0KLXZvaWQg ZHNpX2N0cmxfaHdfY21uX2hvc3Rfc2V0dXAoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJ ICAgICAgIHN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnICpjb25maWcpOwotdm9pZCBkc2lfY3Ry bF9od19jbW5fdmlkZW9fZW5naW5lX2VuKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwgYm9vbCBv bik7Ci12b2lkIGRzaV9jdHJsX2h3X2Ntbl92aWRlb19lbmdpbmVfc2V0dXAoc3RydWN0IGRzaV9j dHJsX2h3ICpjdHJsLAotCQkJCSAgICAgICBzdHJ1Y3QgZHNpX2hvc3RfY29tbW9uX2NmZyAqY29t bW9uX2NmZywKLQkJCQkgICAgICAgc3RydWN0IGRzaV92aWRlb19lbmdpbmVfY2ZnICpjZmcpOwot dm9pZCBkc2lfY3RybF9od19jbW5fc2V0X3ZpZGVvX3RpbWluZyhzdHJ1Y3QgZHNpX2N0cmxfaHcg KmN0cmwsCi0JCQkgc3RydWN0IGRzaV9tb2RlX2luZm8gKm1vZGUpOwotdm9pZCBkc2lfY3RybF9o d19jbW5fc2V0X3RpbWluZ19kYihzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJICAgICBi b29sIGVuYWJsZSk7Ci12b2lkIGRzaV9jdHJsX2h3X2Ntbl9jbWRfZW5naW5lX3NldHVwKHN0cnVj dCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkgICAgIHN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2Zn ICpjb21tb25fY2ZnLAotCQkJCSAgICAgc3RydWN0IGRzaV9jbWRfZW5naW5lX2NmZyAqY2ZnKTsK LQotdm9pZCBkc2lfY3RybF9od19jbW5fY3RybF9lbihzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmws IGJvb2wgb24pOwotdm9pZCBkc2lfY3RybF9od19jbW5fY21kX2VuZ2luZV9lbihzdHJ1Y3QgZHNp X2N0cmxfaHcgKmN0cmwsIGJvb2wgb24pOwotCi12b2lkIGRzaV9jdHJsX2h3X2Ntbl9zZXR1cF9j bWRfc3RyZWFtKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkgICAgIHN0cnVjdCBkc2lf bW9kZV9pbmZvICptb2RlLAotCQkJCSAgICAgdTMyIGhfc3RyaWRlLAotCQkJCSAgICAgdTMyIHZj X2lkLAotCQkJCSAgICAgc3RydWN0IGRzaV9yZWN0ICpyb2kpOwotdm9pZCBkc2lfY3RybF9od19j bW5fcGh5X3N3X3Jlc2V0KHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCk7Ci12b2lkIGRzaV9jdHJs X2h3X2Ntbl9zb2Z0X3Jlc2V0KHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCk7Ci0KLXZvaWQgZHNp X2N0cmxfaHdfY21uX3NldHVwX21pc3Ioc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJZW51 bSBkc2lfb3BfbW9kZSBwYW5lbF9tb2RlLAotCQkJYm9vbCBlbmFibGUsIHUzMiBmcmFtZV9jb3Vu dCk7Ci11MzIgZHNpX2N0cmxfaHdfY21uX2NvbGxlY3RfbWlzcihzdHJ1Y3QgZHNpX2N0cmxfaHcg KmN0cmwsCi0JCQllbnVtIGRzaV9vcF9tb2RlIHBhbmVsX21vZGUpOwotCi12b2lkIGRzaV9jdHJs X2h3X2Ntbl9raWNrb2ZmX2NvbW1hbmQoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJc3Ry dWN0IGRzaV9jdHJsX2NtZF9kbWFfaW5mbyAqY21kLAotCQkJdTMyIGZsYWdzKTsKLQotdm9pZCBk c2lfY3RybF9od19jbW5fa2lja29mZl9maWZvX2NvbW1hbmQoc3RydWN0IGRzaV9jdHJsX2h3ICpj dHJsLAotCQkJICAgICBzdHJ1Y3QgZHNpX2N0cmxfY21kX2RtYV9maWZvX2luZm8gKmNtZCwKLQkJ CSAgICAgdTMyIGZsYWdzKTsKLXZvaWQgZHNpX2N0cmxfaHdfY21uX3Jlc2V0X2NtZF9maWZvKHN0 cnVjdCBkc2lfY3RybF9odyAqY3RybCk7Ci12b2lkIGRzaV9jdHJsX2h3X2Ntbl90cmlnZ2VyX2Nv bW1hbmRfZG1hKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCk7Ci12b2lkIGRzaV9jdHJsX2h3X2Rs bjBfcGh5X2VycihzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwpOwotdm9pZCBkc2lfY3RybF9od19j bW5fcGh5X3Jlc2V0X2NvbmZpZyhzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQlib29sIGVu YWJsZSk7Ci12b2lkIGRzaV9jdHJsX2h3XzIyX3BoeV9yZXNldF9jb25maWcoc3RydWN0IGRzaV9j dHJsX2h3ICpjdHJsLAotCQkJYm9vbCBlbmFibGUpOwotCi0vKiBEZWZpbml0aW9ucyBzcGVjaWZp YyB0byAxLjQgRFNJIGNvbnRyb2xsZXIgaGFyZHdhcmUgKi8KLWludCBkc2lfY3RybF9od18xNF93 YWl0X2Zvcl9sYW5lX2lkbGUoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCB1MzIgbGFuZXMpOwot dm9pZCBkc2lfY3RybF9od18xNF9zZXR1cF9sYW5lX21hcChzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0 cmwsCi0JCSAgICAgICBzdHJ1Y3QgZHNpX2xhbmVfbWFwICpsYW5lX21hcCk7Ci12b2lkIGRzaV9j dHJsX2h3XzE0X3VscHNfcmVxdWVzdChzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIHUzMiBsYW5l cyk7Ci12b2lkIGRzaV9jdHJsX2h3XzE0X3VscHNfZXhpdChzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0 cmwsIHUzMiBsYW5lcyk7Ci11MzIgZHNpX2N0cmxfaHdfMTRfZ2V0X2xhbmVzX2luX3VscHMoc3Ry dWN0IGRzaV9jdHJsX2h3ICpjdHJsKTsKLQotdm9pZCBkc2lfY3RybF9od18xNF9jbGFtcF9lbmFi bGUoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCSB1MzIgbGFuZXMsCi0JCQkJIGJvb2wg ZW5hYmxlX3VscHMpOwotCi12b2lkIGRzaV9jdHJsX2h3XzE0X2NsYW1wX2Rpc2FibGUoc3RydWN0 IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCSAgdTMyIGxhbmVzLAotCQkJCSAgYm9vbCBkaXNhYmxl X3VscHMpOwotc3NpemVfdCBkc2lfY3RybF9od18xNF9yZWdfZHVtcF90b19idWZmZXIoc3RydWN0 IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCQkgIGNoYXIgKmJ1ZiwKLQkJCQkJICB1MzIgc2l6ZSk7 Ci0KLS8qIERlZmluaXRpb25zIHNwZWNpZmljIHRvIDIuMCBEU0kgY29udHJvbGxlciBoYXJkd2Fy ZSAqLwotdm9pZCBkc2lfY3RybF9od18yMF9zZXR1cF9sYW5lX21hcChzdHJ1Y3QgZHNpX2N0cmxf aHcgKmN0cmwsCi0JCSAgICAgICBzdHJ1Y3QgZHNpX2xhbmVfbWFwICpsYW5lX21hcCk7Ci1pbnQg ZHNpX2N0cmxfaHdfMjBfd2FpdF9mb3JfbGFuZV9pZGxlKHN0cnVjdCBkc2lfY3RybF9odyAqY3Ry bCwgdTMyIGxhbmVzKTsKLXNzaXplX3QgZHNpX2N0cmxfaHdfMjBfcmVnX2R1bXBfdG9fYnVmZmVy KHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkJICBjaGFyICpidWYsCi0JCQkJCSAgdTMy IHNpemUpOwotCi0jZW5kaWYgLyogX0RTSV9DQVRBTE9HX0hfICovCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jbGsuaCBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZHNpLXN0YWdpbmcvZHNpX2Nsay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAz OGZjYTA0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNp X2Nsay5oCisrKyAvZGV2L251bGwKQEAgLTEsMjc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg KGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2lmbmRlZiBfRFNJX0NMS19IXwotI2RlZmluZSBfRFNJ X0NMS19IXwotCi0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxh dGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51 eC9jbGsuaD4KLSNpbmNsdWRlICJkcHVfcG93ZXJfaGFuZGxlLmgiCi0KLSNkZWZpbmUgTUFYX1NU UklOR19MRU4gMzIKLSNkZWZpbmUgTUFYX0RTSV9DVFJMIDIKLQotZW51bSBkc2lfY2xrX3N0YXRl IHsKLQlEU0lfQ0xLX09GRiwKLQlEU0lfQ0xLX09OLAotCURTSV9DTEtfRUFSTFlfR0FURSwKLX07 Ci0KLWVudW0gY2xrX3JlcV9jbGllbnQgewotCURTSV9DTEtfUkVRX01EUF9DTElFTlQgPSAwLAot CURTSV9DTEtfUkVRX0RTSV9DTElFTlQsCi19OwotCi1lbnVtIGRzaV9saW5rX2Nsa190eXBlIHsK LQlEU0lfTElOS19FU0NfQ0xLLAotCURTSV9MSU5LX0JZVEVfQ0xLLAotCURTSV9MSU5LX1BJWF9D TEssCi0JRFNJX0xJTktfQllURV9JTlRGX0NMSywKLQlEU0lfTElOS19DTEtfTUFYLAotfTsKLQot ZW51bSBkc2lfY2xrX3R5cGUgewotCURTSV9DT1JFX0NMSyA9IEJJVCgwKSwKLQlEU0lfTElOS19D TEsgPSBCSVQoMSksCi0JRFNJX0FMTF9DTEtTID0gKEJJVCgwKSB8IEJJVCgxKSksCi0JRFNJX0NM S1NfTUFYID0gQklUKDIpLAotfTsKLQotc3RydWN0IGRzaV9jbGtfY3RybF9pbmZvIHsKLQllbnVt IGRzaV9jbGtfdHlwZSBjbGtfdHlwZTsKLQllbnVtIGRzaV9jbGtfc3RhdGUgY2xrX3N0YXRlOwot CWVudW0gY2xrX3JlcV9jbGllbnQgY2xpZW50OwotfTsKLQotc3RydWN0IGNsa19jdHJsX2NiIHsK LQl2b2lkICpwcml2OwotCWludCAoKmRzaV9jbGtfY2IpKHZvaWQgKnByaXYsIHN0cnVjdCBkc2lf Y2xrX2N0cmxfaW5mbyBjbGtfY3RybF9pbmZvKTsKLX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9j b3JlX2Nsa19pbmZvIC0gQ29yZSBjbG9jayBpbmZvcm1hdGlvbiBmb3IgRFNJIGhhcmR3YXJlCi0g KiBAbWRwX2NvcmVfY2xrOiAgICAgICAgSGFuZGxlIHRvIE1EUCBjb3JlIGNsb2NrLgotICogQGlm YWNlX2NsazogICAgICAgICAgIEhhbmRsZSB0byBNRFAgaW50ZXJmYWNlIGNsb2NrLgotICogQGNv cmVfbW1zc19jbGs6ICAgICAgIEhhbmRsZSB0byBNTVNTIGNvcmUgY2xvY2suCi0gKiBAYnVzX2Ns azogICAgICAgICAgICAgSGFuZGxlIHRvIGJ1cyBjbG9jay4KLSAqIEBtbm9jX2NsazogICAgICAg ICAgICBIYW5kbGUgdG8gTU1TUyBOT0MgY2xvY2suCi0gKiBAZHNpX2NvcmVfY2xpZW50OgkgUG9p bnRlciB0byBEUFUgcG93ZXIgY2xpZW50Ci0gKiBAcGhhbmRsZTogICAgICAgICAgICAgUG9pbnRl ciB0byBEUFUgcG93ZXIgaGFuZGxlCi0gKi8KLXN0cnVjdCBkc2lfY29yZV9jbGtfaW5mbyB7Ci0J c3RydWN0IGNsayAqbWRwX2NvcmVfY2xrOwotCXN0cnVjdCBjbGsgKmlmYWNlX2NsazsKLQlzdHJ1 Y3QgY2xrICpjb3JlX21tc3NfY2xrOwotCXN0cnVjdCBjbGsgKmJ1c19jbGs7Ci0Jc3RydWN0IGNs ayAqbW5vY19jbGs7Ci0Jc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKmRzaV9jb3JlX2NsaWVudDsK LQlzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZTsKLX07Ci0KLS8qKgotICogc3RydWN0 IGRzaV9saW5rX2Nsa19pbmZvIC0gTGluayBjbG9jayBpbmZvcm1hdGlvbiBmb3IgRFNJIGhhcmR3 YXJlLgotICogQGJ5dGVfY2xrOiAgICAgICAgSGFuZGxlIHRvIERTSSBieXRlIGNsb2NrLgotICog QHBpeGVsX2NsazogICAgICAgSGFuZGxlIHRvIERTSSBwaXhlbCBjbG9jay4KLSAqIEBlc2NfY2xr OiAgICAgICAgIEhhbmRsZSB0byBEU0kgZXNjYXBlIGNsb2NrLgotICogQGJ5dGVfaW50Zl9jbGs6 ICAgSGFuZGxlIHRvIERTSSBieXRlIGludGYuIGNsb2NrLgotICovCi1zdHJ1Y3QgZHNpX2xpbmtf Y2xrX2luZm8gewotCXN0cnVjdCBjbGsgKmJ5dGVfY2xrOwotCXN0cnVjdCBjbGsgKnBpeGVsX2Ns azsKLQlzdHJ1Y3QgY2xrICplc2NfY2xrOwotCXN0cnVjdCBjbGsgKmJ5dGVfaW50Zl9jbGs7Ci19 OwotCi0vKioKLSAqIHN0cnVjdCBsaW5rX2Nsa19mcmVxIC0gQ2xvY2sgZnJlcXVlbmN5IGluZm9y bWF0aW9uIGZvciBMaW5rIGNsb2NrcwotICogQGJ5dGVfY2xrX3JhdGU6ICAgRnJlcXVlbmN5IG9m IERTSSBieXRlIGNsb2NrIGluIEtIei4KLSAqIEBwaXhlbF9jbGtfcmF0ZTogIEZyZXF1ZW5jeSBv ZiBEU0kgcGl4ZWwgY2xvY2sgaW4gS0h6LgotICogQGVzY19jbGtfcmF0ZTogICAgRnJlcXVlbmN5 IG9mIERTSSBlc2NhcGUgY2xvY2sgaW4gS0h6LgotICovCi1zdHJ1Y3QgbGlua19jbGtfZnJlcSB7 Ci0JdTMyIGJ5dGVfY2xrX3JhdGU7Ci0JdTMyIHBpeF9jbGtfcmF0ZTsKLQl1MzIgZXNjX2Nsa19y YXRlOwotfTsKLQotLyoqCi0gKiB0eXBlZGVmICpwcmVfY2xvY2tvZmZfY2IoKSAtIENhbGxiYWNr IGJlZm9yZSBjbG9jayBpcyB0dXJuZWQgb2ZmCi0gKiBAcHJpdjogcHJpdmF0ZSBkYXRhIHBvaW50 ZXIuCi0gKiBAY2xrX3R5cGU6IGNsb2NrIHdoaWNoIGlzIGJlaW5nIHR1cm5lZCBvZmYuCi0gKiBA bmV3X3N0YXRlOiBuZXh0IHN0YXRlIGZvciB0aGUgY2xvY2suCi0gKgotICogQHJldHVybjogZXJy b3IgY29kZS4KLSAqLwotdHlwZWRlZiBpbnQgKCpwcmVfY2xvY2tvZmZfY2IpKHZvaWQgKnByaXYs Ci0JCQkgICAgICAgZW51bSBkc2lfY2xrX3R5cGUgY2xrX3R5cGUsCi0JCQkgICAgICAgZW51bSBk c2lfY2xrX3N0YXRlIG5ld19zdGF0ZSk7Ci0KLS8qKgotICogdHlwZWRlZiAqcG9zdF9jbG9ja29m Zl9jYigpIC0gQ2FsbGJhY2sgYWZ0ZXIgY2xvY2sgaXMgdHVybmVkIG9mZgotICogQHByaXY6IHBy aXZhdGUgZGF0YSBwb2ludGVyLgotICogQGNsa190eXBlOiBjbG9jayB3aGljaCB3YXMgdHVybmVk IG9mZi4KLSAqIEBjdXJyX3N0YXRlOiBjdXJyZW50IHN0YXRlIGZvciB0aGUgY2xvY2suCi0gKgot ICogQHJldHVybjogZXJyb3IgY29kZS4KLSAqLwotdHlwZWRlZiBpbnQgKCpwb3N0X2Nsb2Nrb2Zm X2NiKSh2b2lkICpwcml2LAotCQkJCWVudW0gZHNpX2Nsa190eXBlIGNsa190eXBlLAotCQkJCWVu dW0gZHNpX2Nsa19zdGF0ZSBjdXJyX3N0YXRlKTsKLQotLyoqCi0gKiB0eXBlZGVmICpwb3N0X2Ns b2Nrb25fY2IoKSAtIENhbGxiYWNrIGFmdGVyIGNsb2NrIGlzIHR1cm5lZCBvbgotICogQHByaXY6 IHByaXZhdGUgZGF0YSBwb2ludGVyLgotICogQGNsa190eXBlOiBjbG9jayB3aGljaCB3YXMgdHVy bmVkIG9uLgotICogQGN1cnJfc3RhdGU6IGN1cnJlbnQgc3RhdGUgZm9yIHRoZSBjbG9jay4KLSAq Ci0gKiBAcmV0dXJuOiBlcnJvciBjb2RlLgotICovCi10eXBlZGVmIGludCAoKnBvc3RfY2xvY2tv bl9jYikodm9pZCAqcHJpdiwKLQkJCSAgICAgICBlbnVtIGRzaV9jbGtfdHlwZSBjbGtfdHlwZSwK LQkJCSAgICAgICBlbnVtIGRzaV9jbGtfc3RhdGUgY3Vycl9zdGF0ZSk7Ci0KLS8qKgotICogdHlw ZWRlZiAqcHJlX2Nsb2Nrb25fY2IoKSAtIENhbGxiYWNrIGJlZm9yZSBjbG9jayBpcyB0dXJuZWQg b24KLSAqIEBwcml2OiBwcml2YXRlIGRhdGEgcG9pbnRlci4KLSAqIEBjbGtfdHlwZTogY2xvY2sg d2hpY2ggaXMgYmVpbmcgdHVybmVkIG9uLgotICogQG5ld19zdGF0ZTogbmV4dCBzdGF0ZSBmb3Ig dGhlIGNsb2NrLgotICoKLSAqIEByZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLXR5cGVkZWYgaW50 ICgqcHJlX2Nsb2Nrb25fY2IpKHZvaWQgKnByaXYsCi0JCQkgICAgICBlbnVtIGRzaV9jbGtfdHlw ZSBjbGtfdHlwZSwKLQkJCSAgICAgIGVudW0gZHNpX2Nsa19zdGF0ZSBuZXdfc3RhdGUpOwotCi0K LS8qKgotICogc3RydWN0IGRzaV9jbGtfaW5mbyAtIGNsb2NrIGluZm9ybWF0aW9uIGZvciBEU0kg aGFyZHdhcmUuCi0gKiBAbmFtZTogICAgICAgICAgICAgICAgICAgIGNsaWVudCBuYW1lLgotICog QGNfY2xrc1tNQVhfRFNJX0NUUkxdICAgICBhcnJheSBvZiBjb3JlIGNsb2NrIGNvbmZpZ3VyYXRp b25zCi0gKiBAbF9jbGtzW01BWF9EU0lfQ1RSTF0gICAgIGFycmF5IG9mIGxpbmsgY2xvY2sgY29u ZmlndXJhdGlvbnMKLSAqIEBidXNfaGFuZGxlW01BWF9EU0lfQ1RSTF0gYXJyYXkgb2YgYnVzIGhh bmRsZXMKLSAqIEBjdHJsX2luZGV4W01BWF9EU0lfQ1RSTF0gYXJyYXkgb2YgRFNJIGNvbnRyb2xs ZXIgaW5kZXhlcyBtYXBwZWQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gY29yZSBh bmQgbGluayBjbG9jayBjb25maWd1cmF0aW9ucwotICogQHByZV9jbGtvZmZfY2IgICAgICAgICAg ICBjYWxsYmFjayBiZWZvcmUgY2xvY2sgaXMgdHVybmVkIG9mZgotICogQHBvc3RfY2xrb2ZmX2Ni ICAgICAgICAgICBjYWxsYmFjayBhZnRlciBjbG9jayBpcyB0dXJuZWQgb2ZmCi0gKiBAcG9zdF9j bGtvbl9jYiAgICAgICAgICAgIGNhbGxiYWNrIGFmdGVyIGNsb2NrIGlzIHR1cm5lZCBvbgotICog QHByZV9jbGtvbl9jYiAgICAgICAgICAgICBjYWxsYmFjayBiZWZvcmUgY2xvY2sgaXMgdHVybmVk IG9uCi0gKiBAcHJpdl9kYXRhICAgICAgICAgICAgICAgIHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRh Ci0gKiBAbWFzdGVyX25keCAgICAgICAgICAgICAgIG1hc3RlciBEU0kgY29udHJvbGxlciBpbmRl eAotICogQGRzaV9jdHJsX2NvdW50ICAgICAgICAgICBudW1iZXIgb2YgRFNJIGNvbnRyb2xsZXJz Ci0gKi8KLXN0cnVjdCBkc2lfY2xrX2luZm8gewotCWNoYXIgbmFtZVtNQVhfU1RSSU5HX0xFTl07 Ci0Jc3RydWN0IGRzaV9jb3JlX2Nsa19pbmZvIGNfY2xrc1tNQVhfRFNJX0NUUkxdOwotCXN0cnVj dCBkc2lfbGlua19jbGtfaW5mbyBsX2Nsa3NbTUFYX0RTSV9DVFJMXTsKLQl1MzIgYnVzX2hhbmRs ZVtNQVhfRFNJX0NUUkxdOwotCXUzMiBjdHJsX2luZGV4W01BWF9EU0lfQ1RSTF07Ci0JcHJlX2Ns b2Nrb2ZmX2NiIHByZV9jbGtvZmZfY2I7Ci0JcG9zdF9jbG9ja29mZl9jYiBwb3N0X2Nsa29mZl9j YjsKLQlwb3N0X2Nsb2Nrb25fY2IgcG9zdF9jbGtvbl9jYjsKLQlwcmVfY2xvY2tvbl9jYiBwcmVf Y2xrb25fY2I7Ci0Jdm9pZCAqcHJpdl9kYXRhOwotCXUzMiBtYXN0ZXJfbmR4OwotCXUzMiBkc2lf Y3RybF9jb3VudDsKLX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9jbGtfbGlua19zZXQgLSBQYWly IG9mIGNsb2NrIGhhbmRsZXMgdG8gZGVzY3JpYmUgbGluayBjbG9ja3MKLSAqIEBieXRlX2Nsazog ICAgIEhhbmRsZSB0byBEU2kgYnl0ZSBjbG9jay4KLSAqIEBwaXhlbF9jbGs6ICAgIEhhbmRsZSB0 byBEU0kgcGl4ZWwgY2xvY2suCi0gKi8KLXN0cnVjdCBkc2lfY2xrX2xpbmtfc2V0IHsKLQlzdHJ1 Y3QgY2xrICpieXRlX2NsazsKLQlzdHJ1Y3QgY2xrICpwaXhlbF9jbGs7Ci19OwotCi0vKioKLSAq IGRzaV9kaXNwbGF5X2Nsa19tZ3JfcmVnaXN0ZXIoKSAtIFJlZ2lzdGVyIERTSSBjbG9jayBtYW5h Z2VyCi0gKiBAaW5mbzogICAgIFN0cnVjdHVyZSBjb250YWluaW5nIERTSSBjbG9jayBpbmZvcm1h dGlvbgotICovCi12b2lkICpkc2lfZGlzcGxheV9jbGtfbW5ncl9yZWdpc3RlcihzdHJ1Y3QgZHNp X2Nsa19pbmZvICppbmZvKTsKLQotLyoqCi0gKiBkc2lfZGlzcGxheV9jbGtfbW5ncl9kZXJlZ2lz dGVyKCkgLSBEZXJlZ2lzdGVyIERTSSBjbG9jayBtYW5hZ2VyCi0gKiBAY2xrX21uZ3I6ICBEU0kg Y2xvY2sgbWFuYWdlciBwb2ludGVyCi0gKi8KLWludCBkc2lfZGlzcGxheV9jbGtfbW5ncl9kZXJl Z2lzdGVyKHZvaWQgKmNsa19tbmdyKTsKLQotLyoqCi0gKiBkc2lfcmVnaXN0ZXJfY2xrX2hhbmRs ZSgpIC0gUmVnaXN0ZXIgY2xvY2sgaGFuZGxlIHdpdGggRFNJIGNsb2NrIG1hbmFnZXIKLSAqIEBj bGtfbW5ncjogIERTSSBjbG9jayBtYW5hZ2VyIHBvaW50ZXIKLSAqIEBjbGllbnQ6ICAgICBEU0kg Y2xvY2sgY2xpZW50IHBvaW50ZXIuCi0gKi8KLXZvaWQgKmRzaV9yZWdpc3Rlcl9jbGtfaGFuZGxl KHZvaWQgKmNsa19tbmdyLCBjaGFyICpjbGllbnQpOwotCi0vKioKLSAqIGRzaV9kZXJlZ2lzdGVy X2Nsa19oYW5kbGUoKSAtIERlcmVnaXN0ZXIgY2xvY2sgaGFuZGxlIGZyb20gRFNJIGNsb2NrIG1h bmFnZXIKLSAqIEBjbGllbnQ6ICAgICBEU0kgY2xvY2sgY2xpZW50IHBvaW50ZXIuCi0gKgotICog cmV0dXJuOiBlcnJvciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZSBvciAwIGZvciBzdWNjZXNzLgot ICovCi1pbnQgZHNpX2RlcmVnaXN0ZXJfY2xrX2hhbmRsZSh2b2lkICpjbGllbnQpOwotCi0vKioK LSAqIGRzaV9kaXNwbGF5X2Nsa19jdHJsKCkgLSBzZXQgZnJlcXVlbmNpZXMgZm9yIGxpbmsgY2xr cwotICogQGhhbmRsZTogICAgIEhhbmRsZSBvZiBkZXNpcmVkIERTSSBjbG9jayBjbGllbnQuCi0g KiBAY2xrX3R5cGU6ICAgQ2xvY2sgd2hpY2ggaXMgYmVpbmcgY29udHJvbGxlZC4KLSAqIEBjbGtf c3RhdGU6ICBEZXNpcmVkIHN0YXRlIG9mIGNsb2NrCi0gKgotICogcmV0dXJuOiBlcnJvciBjb2Rl IGluIGNhc2Ugb2YgZmFpbHVyZSBvciAwIGZvciBzdWNjZXNzLgotICovCi1pbnQgZHNpX2Rpc3Bs YXlfY2xrX2N0cmwodm9pZCAqaGFuZGxlLAotCWVudW0gZHNpX2Nsa190eXBlIGNsa190eXBlLCBl bnVtIGRzaV9jbGtfc3RhdGUgY2xrX3N0YXRlKTsKLQotLyoqCi0gKiBkc2lfY2xrX3NldF9saW5r X2ZyZXF1ZW5jaWVzKCkgLSBzZXQgZnJlcXVlbmNpZXMgZm9yIGxpbmsgY2xrcwotICogQGNsaWVu dDogICAgIERTSSBjbG9jayBjbGllbnQgcG9pbnRlci4KLSAqIEBmcmVxOiAgICAgICBTdHJ1Y3R1 cmUgY29udGFpbmluZyBsaW5rIGNsb2NrIGZyZXF1ZW5jaWVzLgotICogQGluZGV4OiAgICAgIElu ZGV4IG9mIHRoZSBEU0kgY29udHJvbGxlci4KLSAqCi0gKiByZXR1cm46IGVycm9yIGNvZGUgaW4g Y2FzZSBvZiBmYWlsdXJlIG9yIDAgZm9yIHN1Y2Nlc3MuCi0gKi8KLWludCBkc2lfY2xrX3NldF9s aW5rX2ZyZXF1ZW5jaWVzKHZvaWQgKmNsaWVudCwgc3RydWN0IGxpbmtfY2xrX2ZyZXEgZnJlcSwK LQkJCQkJdTMyIGluZGV4KTsKLQotCi0vKioKLSAqIGRzaV9jbGtfc2V0X3BpeGVsX2Nsa19yYXRl KCkgLSBzZXQgZnJlcXVlbmN5IGZvciBwaXhlbCBjbG9jawotICogQGNsaWVudDogICAgICAgRFNJ IGNsb2NrIGNsaWVudCBwb2ludGVyLgotICogQHBpeGVsX2NsazogUGl4ZWwgY2xvY2sgcmF0ZSBp biBIei4KLSAqIEBpbmRleDogICAgICBJbmRleCBvZiB0aGUgRFNJIGNvbnRyb2xsZXIuCi0gKiBy ZXR1cm46IGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlIG9yIDAgZm9yIHN1Y2Nlc3MuCi0g Ki8KLWludCBkc2lfY2xrX3NldF9waXhlbF9jbGtfcmF0ZSh2b2lkICpjbGllbnQsIHU2NCBwaXhl bF9jbGssIHUzMiBpbmRleCk7Ci0KLQotLyoqCi0gKiBkc2lfY2xrX3NldF9ieXRlX2Nsa19yYXRl KCkgLSBzZXQgZnJlcXVlbmN5IGZvciBieXRlIGNsb2NrCi0gKiBAY2xpZW50OiAgICAgICBEU0kg Y2xvY2sgY2xpZW50IHBvaW50ZXIuCi0gKiBAYnl0ZV9jbGs6IFBpeGVsIGNsb2NrIHJhdGUgaW4g SHouCi0gKiBAaW5kZXg6ICAgICAgSW5kZXggb2YgdGhlIERTSSBjb250cm9sbGVyLgotICogcmV0 dXJuOiBlcnJvciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZSBvciAwIGZvciBzdWNjZXNzLgotICov Ci1pbnQgZHNpX2Nsa19zZXRfYnl0ZV9jbGtfcmF0ZSh2b2lkICpjbGllbnQsIHU2NCBieXRlX2Ns aywgdTMyIGluZGV4KTsKLQotLyoqCi0gKiBkc2lfY2xrX3VwZGF0ZV9wYXJlbnQoKSAtIHVwZGF0 ZSBwYXJlbnQgY2xvY2tzIGZvciBzcGVjaWZpZWQgY2xvY2sKLSAqIEBwYXJlbnQ6ICAgICAgIGxp bmsgY2xvY2sgcGFpciB3aGljaCBhcmUgc2V0IGFzIHBhcmVudC4KLSAqIEBjaGlsZDogICAgICAg IGxpbmsgY2xvY2sgcGFpciB3aG9zZSBwYXJlbnQgaGFzIHRvIGJlIHNldC4KLSAqLwotaW50IGRz aV9jbGtfdXBkYXRlX3BhcmVudChzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCAqcGFyZW50LAotCQkJ ICBzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCAqY2hpbGQpOwotI2VuZGlmIC8qIF9EU0lfQ0xLX0hf ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jbGtf bWFuYWdlci5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY2xrX21hbmFn ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJkZDAyYS4uMDAwMDAwMAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jbGtfbWFuYWdlci5jCisrKyAv ZGV2L251bGwKQEAgLTEsMTIzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIw MTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu Ci0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9vZi5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5 Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgImRzaV9jbGsuaCIKLQotI2lm ZGVmIENPTkZJR19DSFJPTUVfQlVTX1NDQUxFCi0jaW5jbHVkZSA8bGludXgvbXNtLWJ1cy5oPgot I2VuZGlmCi0KLXN0cnVjdCBkc2lfY29yZV9jbGtzIHsKLQlzdHJ1Y3QgZHNpX2NvcmVfY2xrX2lu Zm8gY2xrczsKLQl1MzIgYnVzX2hhbmRsZTsKLX07Ci0KLXN0cnVjdCBkc2lfbGlua19jbGtzIHsK LQlzdHJ1Y3QgZHNpX2xpbmtfY2xrX2luZm8gY2xrczsKLQlzdHJ1Y3QgbGlua19jbGtfZnJlcSBm cmVxOwotfTsKLQotc3RydWN0IGRzaV9jbGtfbW5nciB7Ci0JY2hhciBuYW1lW01BWF9TVFJJTkdf TEVOXTsKLQlzdHJ1Y3QgbXV0ZXggY2xrX211dGV4OwotCXN0cnVjdCBsaXN0X2hlYWQgY2xpZW50 X2xpc3Q7Ci0KLQl1MzIgZHNpX2N0cmxfY291bnQ7Ci0JdTMyIG1hc3Rlcl9uZHg7Ci0Jc3RydWN0 IGRzaV9jb3JlX2Nsa3MgY29yZV9jbGtzW01BWF9EU0lfQ1RSTF07Ci0Jc3RydWN0IGRzaV9saW5r X2Nsa3MgbGlua19jbGtzW01BWF9EU0lfQ1RSTF07Ci0JdTMyIGN0cmxfaW5kZXhbTUFYX0RTSV9D VFJMXTsKLQl1MzIgY29yZV9jbGtfc3RhdGU7Ci0JdTMyIGxpbmtfY2xrX3N0YXRlOwotCi0JcHJl X2Nsb2Nrb2ZmX2NiIHByZV9jbGtvZmZfY2I7Ci0JcG9zdF9jbG9ja29mZl9jYiBwb3N0X2Nsa29m Zl9jYjsKLQlwb3N0X2Nsb2Nrb25fY2IgcG9zdF9jbGtvbl9jYjsKLQlwcmVfY2xvY2tvbl9jYiBw cmVfY2xrb25fY2I7Ci0KLQl2b2lkICpwcml2X2RhdGE7Ci19OwotCi1zdHJ1Y3QgZHNpX2Nsa19j bGllbnRfaW5mbyB7Ci0JY2hhciBuYW1lW01BWF9TVFJJTkdfTEVOXTsKLQl1MzIgY29yZV9yZWZj b3VudDsKLQl1MzIgbGlua19yZWZjb3VudDsKLQl1MzIgY29yZV9jbGtfc3RhdGU7Ci0JdTMyIGxp bmtfY2xrX3N0YXRlOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgZHNpX2Nsa19t bmdyICptbmdyOwotfTsKLQotc3RhdGljIGludCBfZ2V0X2Nsa19tbmdyX2luZGV4KHN0cnVjdCBk c2lfY2xrX21uZ3IgKm1uZ3IsCi0JCQkJdTMyIGRzaV9jdHJsX2luZGV4LAotCQkJCXUzMiAqY2xr X21uZ3JfaW5kZXgpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbW5nci0+ZHNpX2N0 cmxfY291bnQ7IGkrKykgewotCQlpZiAobW5nci0+Y3RybF9pbmRleFtpXSA9PSBkc2lfY3RybF9p bmRleCkgewotCQkJKmNsa19tbmdyX2luZGV4ID0gaTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQot Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLS8qKgotICogZHNpX2Nsa19zZXRfbGlua19mcmVxdWVu Y2llcygpIC0gc2V0IGZyZXF1ZW5jaWVzIGZvciBsaW5rIGNsa3MKLSAqIEBjbGtzOiAgICAgICAg IExpbmsgY2xvY2sgaW5mb3JtYXRpb24KLSAqIEBwaXhlbF9jbGs6ICAgIHBpeGVsIGNsb2NrIGZy ZXF1ZW5jeSBpbiBLSHouCi0gKiBAYnl0ZV9jbGs6ICAgICBCeXRlIGNsb2NrIGZyZXF1ZW5jeSBp biBLSHouCi0gKiBAZXNjX2NsazogICAgICBFc2NhcGUgY2xvY2sgZnJlcXVlbmN5IGluIEtIei4K LSAqCi0gKiByZXR1cm46IGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlIG9yIDAgZm9yIHN1 Y2Nlc3MuCi0gKi8KLWludCBkc2lfY2xrX3NldF9saW5rX2ZyZXF1ZW5jaWVzKHZvaWQgKmNsaWVu dCwgc3RydWN0IGxpbmtfY2xrX2ZyZXEgZnJlcSwKLQkJCQl1MzIgaW5kZXgpCi17Ci0JaW50IHJj ID0gMCwgY2xrX21uZ3JfaW5kZXggPSAwOwotCXN0cnVjdCBkc2lfY2xrX2NsaWVudF9pbmZvICpj ID0gY2xpZW50OwotCXN0cnVjdCBkc2lfY2xrX21uZ3IgKm1uZ3I7Ci0KLQlpZiAoIWNsaWVudCkg ewotCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JbW5nciA9IGMtPm1uZ3I7Ci0JcmMgPSBfZ2V0X2Nsa19tbmdyX2luZGV4KG1uZ3IsIGluZGV4 LCAmY2xrX21uZ3JfaW5kZXgpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBtYXAg Y29udHJvbCBpbmRleCAlZFxuIiwgaW5kZXgpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlt ZW1jcHkoJm1uZ3ItPmxpbmtfY2xrc1tjbGtfbW5ncl9pbmRleF0uZnJlcSwgJmZyZXEsCi0JCXNp emVvZihzdHJ1Y3QgbGlua19jbGtfZnJlcSkpOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAq IGRzaV9jbGtfc2V0X3BpeGVsX2Nsa19yYXRlKCkgLSBzZXQgZnJlcXVlbmN5IGZvciBwaXhlbCBj bG9jawotICogQGNsa3M6ICAgICAgRFNJIGxpbmsgY2xvY2sgaW5mb3JtYXRpb24uCi0gKiBAcGl4 ZWxfY2xrOiBQaXhlbCBjbG9jayByYXRlIGluIEtIei4KLSAqCi0gKiByZXR1cm46IGVycm9yIGNv ZGUgaW4gY2FzZSBvZiBmYWlsdXJlIG9yIDAgZm9yIHN1Y2Nlc3MuCi0gKi8KLWludCBkc2lfY2xr X3NldF9waXhlbF9jbGtfcmF0ZSh2b2lkICpjbGllbnQsIHU2NCBwaXhlbF9jbGssIHUzMiBpbmRl eCkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfY2xrX2NsaWVudF9pbmZvICpjID0gY2xp ZW50OwotCXN0cnVjdCBkc2lfY2xrX21uZ3IgKm1uZ3I7Ci0KLQltbmdyID0gYy0+bW5ncjsKLQly YyA9IGNsa19zZXRfcmF0ZShtbmdyLT5saW5rX2Nsa3NbaW5kZXhdLmNsa3MucGl4ZWxfY2xrLCBw aXhlbF9jbGspOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWlsZWQgdG8gc2V0IGNsayByYXRlIGZv ciBwaXhlbCBjbGssIHJjPSVkXG4iLCByYyk7Ci0JZWxzZQotCQltbmdyLT5saW5rX2Nsa3NbaW5k ZXhdLmZyZXEucGl4X2Nsa19yYXRlID0gcGl4ZWxfY2xrOwotCi0JcmV0dXJuIHJjOwotfQotCi0v KioKLSAqIGRzaV9jbGtfc2V0X2J5dGVfY2xrX3JhdGUoKSAtIHNldCBmcmVxdWVuY3kgZm9yIGJ5 dGUgY2xvY2sKLSAqIEBjbGllbnQ6ICAgICAgIERTSSBjbG9jayBjbGllbnQgcG9pbnRlci4KLSAq IEBieXRlX2NsazogUGl4ZWwgY2xvY2sgcmF0ZSBpbiBIei4KLSAqIEBpbmRleDogICAgICBJbmRl eCBvZiB0aGUgRFNJIGNvbnRyb2xsZXIuCi0gKiByZXR1cm46IGVycm9yIGNvZGUgaW4gY2FzZSBv ZiBmYWlsdXJlIG9yIDAgZm9yIHN1Y2Nlc3MuCi0gKi8KLWludCBkc2lfY2xrX3NldF9ieXRlX2Ns a19yYXRlKHZvaWQgKmNsaWVudCwgdTY0IGJ5dGVfY2xrLCB1MzIgaW5kZXgpCi17Ci0JaW50IHJj ID0gMDsKLQlzdHJ1Y3QgZHNpX2Nsa19jbGllbnRfaW5mbyAqYyA9IGNsaWVudDsKLQlzdHJ1Y3Qg ZHNpX2Nsa19tbmdyICptbmdyOwotCi0JbW5nciA9IGMtPm1uZ3I7Ci0JcmMgPSBjbGtfc2V0X3Jh dGUobW5nci0+bGlua19jbGtzW2luZGV4XS5jbGtzLmJ5dGVfY2xrLCBieXRlX2Nsayk7Ci0JaWYg KHJjKQotCQlwcl9lcnIoImZhaWxlZCB0byBzZXQgY2xrIHJhdGUgZm9yIGJ5dGUgY2xrLCByYz0l ZFxuIiwgcmMpOwotCWVsc2UKLQkJbW5nci0+bGlua19jbGtzW2luZGV4XS5mcmVxLmJ5dGVfY2xr X3JhdGUgPSBieXRlX2NsazsKLQotCXJldHVybiByYzsKLQotfQotCi0vKioKLSAqIGRzaV9jbGtf dXBkYXRlX3BhcmVudCgpIC0gdXBkYXRlIHBhcmVudCBjbG9ja3MgZm9yIHNwZWNpZmllZCBjbG9j awotICogQHBhcmVudDogICAgICAgbGluayBjbG9jayBwYWlyIHdoaWNoIGFyZSBzZXQgYXMgcGFy ZW50LgotICogQGNoaWxkOiAgICAgICAgbGluayBjbG9jayBwYWlyIHdob3NlIHBhcmVudCBoYXMg dG8gYmUgc2V0LgotICovCi1pbnQgZHNpX2Nsa191cGRhdGVfcGFyZW50KHN0cnVjdCBkc2lfY2xr X2xpbmtfc2V0ICpwYXJlbnQsCi0JCQkgIHN0cnVjdCBkc2lfY2xrX2xpbmtfc2V0ICpjaGlsZCkK LXsKLQlpbnQgcmMgPSAwOwotCi0JcmMgPSBjbGtfc2V0X3BhcmVudChjaGlsZC0+Ynl0ZV9jbGss IHBhcmVudC0+Ynl0ZV9jbGspOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBzZXQg Ynl0ZSBjbGsgcGFyZW50XG4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGNsa19zZXRf cGFyZW50KGNoaWxkLT5waXhlbF9jbGssIHBhcmVudC0+cGl4ZWxfY2xrKTsKLQlpZiAocmMpIHsK LQkJcHJfZXJyKCJmYWlsZWQgdG8gc2V0IHBpeGVsIGNsayBwYXJlbnRcbiIpOwotCQlnb3RvIGVy cm9yOwotCX0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9jb3JlX2Nsa19zdGFy dChzdHJ1Y3QgZHNpX2NvcmVfY2xrcyAqY19jbGtzKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAo Y19jbGtzLT5jbGtzLm1kcF9jb3JlX2NsaykgewotCQlyYyA9IGNsa19wcmVwYXJlX2VuYWJsZShj X2Nsa3MtPmNsa3MubWRwX2NvcmVfY2xrKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxl ZCB0byBlbmFibGUgbWRwX2NvcmVfY2xrLCByYz0lZFxuIiwgcmMpOwotCQkJZ290byBlcnJvcjsK LQkJfQotCX0KLQotCWlmIChjX2Nsa3MtPmNsa3MubW5vY19jbGspIHsKLQkJcmMgPSBjbGtfcHJl cGFyZV9lbmFibGUoY19jbGtzLT5jbGtzLm1ub2NfY2xrKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9l cnIoImZhaWxlZCB0byBlbmFibGUgbW5vY19jbGssIHJjPSVkXG4iLCByYyk7Ci0JCQlnb3RvIGVy cm9yX2Rpc2FibGVfY29yZV9jbGs7Ci0JCX0KLQl9Ci0KLQlpZiAoY19jbGtzLT5jbGtzLmlmYWNl X2NsaykgewotCQlyYyA9IGNsa19wcmVwYXJlX2VuYWJsZShjX2Nsa3MtPmNsa3MuaWZhY2VfY2xr KTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBlbmFibGUgaWZhY2VfY2xrLCBy Yz0lZFxuIiwgcmMpOwotCQkJZ290byBlcnJvcl9kaXNhYmxlX21ub2NfY2xrOwotCQl9Ci0JfQot Ci0JaWYgKGNfY2xrcy0+Y2xrcy5idXNfY2xrKSB7Ci0JCXJjID0gY2xrX3ByZXBhcmVfZW5hYmxl KGNfY2xrcy0+Y2xrcy5idXNfY2xrKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0 byBlbmFibGUgYnVzX2NsaywgcmM9JWRcbiIsIHJjKTsKLQkJCWdvdG8gZXJyb3JfZGlzYWJsZV9p ZmFjZV9jbGs7Ci0JCX0KLQl9Ci0KLQlpZiAoY19jbGtzLT5jbGtzLmNvcmVfbW1zc19jbGspIHsK LQkJcmMgPSBjbGtfcHJlcGFyZV9lbmFibGUoY19jbGtzLT5jbGtzLmNvcmVfbW1zc19jbGspOwot CQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSBjb3JlX21tc3NfY2xrLCBy Yz0lZFxuIiwgcmMpOwotCQkJZ290byBlcnJvcl9kaXNhYmxlX2J1c19jbGs7Ci0JCX0KLQl9Ci0K LSNpZmRlZiBDT05GSUdfQ0hST01FX0JVU19TQ0FMRQotCWlmIChjX2Nsa3MtPmJ1c19oYW5kbGUp IHsKLQkJcmMgPSBtc21fYnVzX3NjYWxlX2NsaWVudF91cGRhdGVfcmVxdWVzdChjX2Nsa3MtPmJ1 c19oYW5kbGUsIDEpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiYnVzIHNjYWxlIGNsaWVudCBl bmFibGUgZmFpbGVkLCByYz0lZFxuIiwgcmMpOwotCQkJZ290byBlcnJvcl9kaXNhYmxlX21tc3Nf Y2xrOwotCQl9Ci0JfQotI2VuZGlmCi0JcmV0dXJuIHJjOwotCi0jaWZkZWYgQ09ORklHX0NIUk9N RV9CVVNfU0NBTEUKLWVycm9yX2Rpc2FibGVfbW1zc19jbGs6Ci0JaWYgKGNfY2xrcy0+Y2xrcy5j b3JlX21tc3NfY2xrKQotCQljbGtfZGlzYWJsZV91bnByZXBhcmUoY19jbGtzLT5jbGtzLmNvcmVf bW1zc19jbGspOwotI2VuZGlmCi0KLWVycm9yX2Rpc2FibGVfYnVzX2NsazoKLQlpZiAoY19jbGtz LT5jbGtzLmJ1c19jbGspCi0JCWNsa19kaXNhYmxlX3VucHJlcGFyZShjX2Nsa3MtPmNsa3MuYnVz X2Nsayk7Ci1lcnJvcl9kaXNhYmxlX2lmYWNlX2NsazoKLQlpZiAoY19jbGtzLT5jbGtzLmlmYWNl X2NsaykKLQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNfY2xrcy0+Y2xrcy5pZmFjZV9jbGspOwot ZXJyb3JfZGlzYWJsZV9tbm9jX2NsazoKLQlpZiAoY19jbGtzLT5jbGtzLm1ub2NfY2xrKQotCQlj bGtfZGlzYWJsZV91bnByZXBhcmUoY19jbGtzLT5jbGtzLm1ub2NfY2xrKTsKLWVycm9yX2Rpc2Fi bGVfY29yZV9jbGs6Ci0JaWYgKGNfY2xrcy0+Y2xrcy5tZHBfY29yZV9jbGspCi0JCWNsa19kaXNh YmxlX3VucHJlcGFyZShjX2Nsa3MtPmNsa3MubWRwX2NvcmVfY2xrKTsKLWVycm9yOgotCXJldHVy biByYzsKLX0KLQotaW50IGRzaV9jb3JlX2Nsa19zdG9wKHN0cnVjdCBkc2lfY29yZV9jbGtzICpj X2Nsa3MpCi17Ci0JaW50IHJjID0gMDsKLQotI2lmZGVmIENPTkZJR19DSFJPTUVfQlVTX1NDQUxF Ci0JaWYgKGNfY2xrcy0+YnVzX2hhbmRsZSkgewotCQlyYyA9IG1zbV9idXNfc2NhbGVfY2xpZW50 X3VwZGF0ZV9yZXF1ZXN0KGNfY2xrcy0+YnVzX2hhbmRsZSwgMCk7Ci0JCWlmIChyYykgewotCQkJ cHJfZXJyKCJidXMgc2NhbGUgY2xpZW50IGRpc2FibGUgZmFpbGVkLCByYz0lZFxuIiwgcmMpOwot CQkJcmV0dXJuIHJjOwotCQl9Ci0JfQotI2VuZGlmCi0KLQlpZiAoY19jbGtzLT5jbGtzLmNvcmVf bW1zc19jbGspCi0JCWNsa19kaXNhYmxlX3VucHJlcGFyZShjX2Nsa3MtPmNsa3MuY29yZV9tbXNz X2Nsayk7Ci0KLQlpZiAoY19jbGtzLT5jbGtzLmJ1c19jbGspCi0JCWNsa19kaXNhYmxlX3VucHJl cGFyZShjX2Nsa3MtPmNsa3MuYnVzX2Nsayk7Ci0KLQlpZiAoY19jbGtzLT5jbGtzLmlmYWNlX2Ns aykKLQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNfY2xrcy0+Y2xrcy5pZmFjZV9jbGspOwotCi0J aWYgKGNfY2xrcy0+Y2xrcy5tbm9jX2NsaykKLQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNfY2xr cy0+Y2xrcy5tbm9jX2Nsayk7Ci0KLQlpZiAoY19jbGtzLT5jbGtzLm1kcF9jb3JlX2NsaykKLQkJ Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNfY2xrcy0+Y2xrcy5tZHBfY29yZV9jbGspOwotCi0JcmV0 dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9saW5rX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgZHNp X2xpbmtfY2xrcyAqbF9jbGtzKQotewotCWludCByYyA9IDA7Ci0KLQlyYyA9IGNsa19zZXRfcmF0 ZShsX2Nsa3MtPmNsa3MuZXNjX2NsaywgbF9jbGtzLT5mcmVxLmVzY19jbGtfcmF0ZSk7Ci0JaWYg KHJjKSB7Ci0JCXByX2VycigiY2xrX3NldF9yYXRlIGZhaWxlZCBmb3IgZXNjX2NsayByYyA9ICVk XG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBjbGtfc2V0X3JhdGUobF9jbGtz LT5jbGtzLmJ5dGVfY2xrLCBsX2Nsa3MtPmZyZXEuYnl0ZV9jbGtfcmF0ZSk7Ci0JaWYgKHJjKSB7 Ci0JCXByX2VycigiY2xrX3NldF9yYXRlIGZhaWxlZCBmb3IgYnl0ZV9jbGsgcmMgPSAlZFxuIiwg cmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gY2xrX3NldF9yYXRlKGxfY2xrcy0+Y2xr cy5waXhlbF9jbGssIGxfY2xrcy0+ZnJlcS5waXhfY2xrX3JhdGUpOwotCWlmIChyYykgewotCQlw cl9lcnIoImNsa19zZXRfcmF0ZSBmYWlsZWQgZm9yIHBpeGVsX2NsayByYyA9ICVkXG4iLCByYyk7 Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JLyoKLQkgKiBJZiBieXRlX2ludGZfY2xrIGlzIHByZXNl bnQsIHNldCByYXRlIGZvciB0aGF0IHRvby4KLQkgKiBGb3IgRFBIWTogYnl0ZV9pbnRmX2Nsa19y YXRlID0gYnl0ZV9jbGtfcmF0ZSAvIDIKLQkgKiB0b2RvOiB0aGlzIG5lZWRzIHRvIGJlIHJldmlz aXRlZCB3aGVuIHN1cHBvcnQgZm9yIENQSFkgaXMgYWRkZWQKLQkgKi8KLQlpZiAobF9jbGtzLT5j bGtzLmJ5dGVfaW50Zl9jbGspIHsKLQkJcmMgPSBjbGtfc2V0X3JhdGUobF9jbGtzLT5jbGtzLmJ5 dGVfaW50Zl9jbGssCi0JCQkobF9jbGtzLT5mcmVxLmJ5dGVfY2xrX3JhdGUgLyAyKSk7Ci0JCWlm IChyYykgewotCQkJcHJfZXJyKCJzZXRfcmF0ZSBmYWlsZWQgZm9yIGJ5dGVfaW50Zl9jbGsgcmMg PSAlZFxuIiwKLQkJCQlyYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotZXJyb3I6Ci0JcmV0 dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9saW5rX2Nsa19wcmVwYXJlKHN0cnVjdCBkc2lf bGlua19jbGtzICpsX2Nsa3MpCi17Ci0JaW50IHJjID0gMDsKLQotCXJjID0gY2xrX3ByZXBhcmUo bF9jbGtzLT5jbGtzLmVzY19jbGspOwotCWlmIChyYykgewotCQlwcl9lcnIoIkZhaWxlZCB0byBw cmVwYXJlIGRzaSBlc2MgY2xrLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVzY19jbGtfZXJyOwot CX0KLQotCXJjID0gY2xrX3ByZXBhcmUobF9jbGtzLT5jbGtzLmJ5dGVfY2xrKTsKLQlpZiAocmMp IHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gcHJlcGFyZSBkc2kgYnl0ZSBjbGssIHJjPSVkXG4iLCBy Yyk7Ci0JCWdvdG8gYnl0ZV9jbGtfZXJyOwotCX0KLQotCXJjID0gY2xrX3ByZXBhcmUobF9jbGtz LT5jbGtzLnBpeGVsX2Nsayk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIHByZXBh cmUgZHNpIHBpeGVsIGNsaywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBwaXhlbF9jbGtfZXJyOwot CX0KLQotCWlmIChsX2Nsa3MtPmNsa3MuYnl0ZV9pbnRmX2NsaykgewotCQlyYyA9IGNsa19wcmVw YXJlKGxfY2xrcy0+Y2xrcy5ieXRlX2ludGZfY2xrKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIo IkZhaWxlZCB0byBwcmVwYXJlIGRzaSBieXRlIGludGYgY2xrLCByYz0lZFxuIiwKLQkJCQlyYyk7 Ci0JCQlnb3RvIGJ5dGVfaW50Zl9jbGtfZXJyOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJjOwotCi1i eXRlX2ludGZfY2xrX2VycjoKLQljbGtfdW5wcmVwYXJlKGxfY2xrcy0+Y2xrcy5waXhlbF9jbGsp OwotcGl4ZWxfY2xrX2VycjoKLQljbGtfdW5wcmVwYXJlKGxfY2xrcy0+Y2xrcy5ieXRlX2Nsayk7 Ci1ieXRlX2Nsa19lcnI6Ci0JY2xrX3VucHJlcGFyZShsX2Nsa3MtPmNsa3MuZXNjX2Nsayk7Ci1l c2NfY2xrX2VycjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzaV9saW5rX2Nsa191 bnByZXBhcmUoc3RydWN0IGRzaV9saW5rX2Nsa3MgKmxfY2xrcykKLXsKLQlpZiAobF9jbGtzLT5j bGtzLmJ5dGVfaW50Zl9jbGspCi0JCWNsa191bnByZXBhcmUobF9jbGtzLT5jbGtzLmJ5dGVfaW50 Zl9jbGspOwotCWNsa191bnByZXBhcmUobF9jbGtzLT5jbGtzLnBpeGVsX2Nsayk7Ci0JY2xrX3Vu cHJlcGFyZShsX2Nsa3MtPmNsa3MuYnl0ZV9jbGspOwotCWNsa191bnByZXBhcmUobF9jbGtzLT5j bGtzLmVzY19jbGspOwotfQotCi1zdGF0aWMgaW50IGRzaV9saW5rX2Nsa19lbmFibGUoc3RydWN0 IGRzaV9saW5rX2Nsa3MgKmxfY2xrcykKLXsKLQlpbnQgcmMgPSAwOwotCi0JcmMgPSBjbGtfZW5h YmxlKGxfY2xrcy0+Y2xrcy5lc2NfY2xrKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJGYWlsZWQg dG8gZW5hYmxlIGRzaSBlc2MgY2xrLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVzY19jbGtfZXJy OwotCX0KLQotCXJjID0gY2xrX2VuYWJsZShsX2Nsa3MtPmNsa3MuYnl0ZV9jbGspOwotCWlmIChy YykgewotCQlwcl9lcnIoIkZhaWxlZCB0byBlbmFibGUgZHNpIGJ5dGUgY2xrLCByYz0lZFxuIiwg cmMpOwotCQlnb3RvIGJ5dGVfY2xrX2VycjsKLQl9Ci0KLQlyYyA9IGNsa19lbmFibGUobF9jbGtz LT5jbGtzLnBpeGVsX2Nsayk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIGVuYWJs ZSBkc2kgcGl4ZWwgY2xrLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIHBpeGVsX2Nsa19lcnI7Ci0J fQotCi0JaWYgKGxfY2xrcy0+Y2xrcy5ieXRlX2ludGZfY2xrKSB7Ci0JCXJjID0gY2xrX2VuYWJs ZShsX2Nsa3MtPmNsa3MuYnl0ZV9pbnRmX2Nsayk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJG YWlsZWQgdG8gZW5hYmxlIGRzaSBieXRlIGludGYgY2xrLCByYz0lZFxuIiwKLQkJCQlyYyk7Ci0J CQlnb3RvIGJ5dGVfaW50Zl9jbGtfZXJyOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJjOwotCi1ieXRl X2ludGZfY2xrX2VycjoKLQljbGtfZGlzYWJsZShsX2Nsa3MtPmNsa3MucGl4ZWxfY2xrKTsKLXBp eGVsX2Nsa19lcnI6Ci0JY2xrX2Rpc2FibGUobF9jbGtzLT5jbGtzLmJ5dGVfY2xrKTsKLWJ5dGVf Y2xrX2VycjoKLQljbGtfZGlzYWJsZShsX2Nsa3MtPmNsa3MuZXNjX2Nsayk7Ci1lc2NfY2xrX2Vy cjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzaV9saW5rX2Nsa19kaXNhYmxlKHN0 cnVjdCBkc2lfbGlua19jbGtzICpsX2Nsa3MpCi17Ci0JaWYgKGxfY2xrcy0+Y2xrcy5ieXRlX2lu dGZfY2xrKQotCQljbGtfZGlzYWJsZShsX2Nsa3MtPmNsa3MuYnl0ZV9pbnRmX2Nsayk7Ci0JY2xr X2Rpc2FibGUobF9jbGtzLT5jbGtzLmVzY19jbGspOwotCWNsa19kaXNhYmxlKGxfY2xrcy0+Y2xr cy5waXhlbF9jbGspOwotCWNsa19kaXNhYmxlKGxfY2xrcy0+Y2xrcy5ieXRlX2Nsayk7Ci19Ci0K LS8qKgotICogZHNpX2xpbmtfY2xrX3N0YXJ0KCkgLSBlbmFibGUgZHNpIGxpbmsgY2xvY2tzCi0g Ki8KLWludCBkc2lfbGlua19jbGtfc3RhcnQoc3RydWN0IGRzaV9saW5rX2Nsa3MgKmNsa3MpCi17 Ci0JaW50IHJjID0gMDsKLQotCXJjID0gZHNpX2xpbmtfY2xrX3NldF9yYXRlKGNsa3MpOwotCWlm IChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBzZXQgY2xrIHJhdGVzLCByYyA9ICVkXG4iLCBy Yyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBkc2lfbGlua19jbGtfcHJlcGFyZShjbGtz KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcHJlcGFyZSBsaW5rIGNsa3MsIHJj ID0gJWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9saW5rX2Nsa19l bmFibGUoY2xrcyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSBsaW5r IGNsa3MsIHJjID0gJWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcl91bnByZXBhcmU7Ci0JfQotCi0J cHJfZGVidWcoIkxpbmsgY2xvY2tzIGFyZSBlbmFibGVkXG4iKTsKLQlyZXR1cm4gcmM7Ci1lcnJv cl91bnByZXBhcmU6Ci0JZHNpX2xpbmtfY2xrX3VucHJlcGFyZShjbGtzKTsKLWVycm9yOgotCXJl dHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfbGlua19jbGtfc3RvcCgpIC0gU3RvcCBEU0kgbGlu ayBjbG9ja3MuCi0gKi8KLWludCBkc2lfbGlua19jbGtfc3RvcChzdHJ1Y3QgZHNpX2xpbmtfY2xr cyAqY2xrcykKLXsKLQlkc2lfbGlua19jbGtfZGlzYWJsZShjbGtzKTsKLQlkc2lfbGlua19jbGtf dW5wcmVwYXJlKGNsa3MpOwotCi0JcHJfZGVidWcoIkxpbmsgY2xvY2tzIGRpc2FibGVkXG4iKTsK LQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X2NvcmVfY2xrX2VuYWJs ZShzdHJ1Y3QgZHNpX2NvcmVfY2xrcyAqY2xrcywKLQl1MzIgY3RybF9jb3VudCwgdTMyIG1hc3Rl cl9uZHgpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX2NvcmVfY2xrcyAq Y2xrLCAqbV9jbGtzOwotCi0JLyoKLQkgKiBJbiBjYXNlIG9mIHNwbGl0IERTSSB1c2VjYXNlcywg dGhlIGNsb2NrIGZvciBtYXN0ZXIgY29udHJvbGxlciBzaG91bGQKLQkgKiBiZSBlbmFibGVkIGJl Zm9yZSB0aGUgb3RoZXIgY29udHJvbGxlci4gTWFzdGVyIGNvbnRyb2xsZXIgaW4gdGhlCi0JICog Y2xvY2sgY29udGV4dCByZWZlcnMgdG8gdGhlIGNvbnRyb2xsZXIgdGhhdCBzb3VyY2VzIHRoZSBj bG9jay4KLQkgKi8KLQotCW1fY2xrcyA9ICZjbGtzW21hc3Rlcl9uZHhdOwotCXJjID0gZHB1X3Bv d2VyX3Jlc291cmNlX2VuYWJsZShtX2Nsa3MtPmNsa3MucGhhbmRsZSwKLQkJCW1fY2xrcy0+Y2xr cy5kc2lfY29yZV9jbGllbnQsIHRydWUpOwotCi0JaWYgKHJjKSB7Ci0JCXByX2VycigiUG93ZXIg cmVzb3VyY2UgZW5hYmxlIGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9 Ci0KLQlyYyA9IGRzaV9jb3JlX2Nsa19zdGFydChtX2Nsa3MpOwotCWlmIChyYykgewotCQlwcl9l cnIoImZhaWxlZCB0byB0dXJuIG9uIG1hc3RlciBjbG9ja3MsIHJjPSVkXG4iLCByYyk7Ci0JCWdv dG8gZXJyb3JfZGlzYWJsZV9tYXN0ZXJfcmVzb3VyY2U7Ci0JfQotCi0JLyogVHVybiBvbiByZXN0 IG9mIHRoZSBjb3JlIGNsb2NrcyAqLwotCWZvciAoaSA9IDA7IGkgPCBjdHJsX2NvdW50OyBpKysp IHsKLQkJY2xrID0gJmNsa3NbaV07Ci0JCWlmICghY2xrIHx8IChjbGsgPT0gbV9jbGtzKSkKLQkJ CWNvbnRpbnVlOwotCi0JCXJjID0gZHB1X3Bvd2VyX3Jlc291cmNlX2VuYWJsZShjbGstPmNsa3Mu cGhhbmRsZSwKLQkJCQljbGstPmNsa3MuZHNpX2NvcmVfY2xpZW50LCB0cnVlKTsKLQkJaWYgKHJj KSB7Ci0JCQlwcl9lcnIoIlBvd2VyIHJlc291cmNlIGVuYWJsZSBmYWlsZWQsIHJjPSVkXG4iLCBy Yyk7Ci0JCQlnb3RvIGVycm9yX2Rpc2FibGVfbWFzdGVyOwotCQl9Ci0KLQkJcmMgPSBkc2lfY29y ZV9jbGtfc3RhcnQoY2xrKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byB0dXJu IG9uIGNsb2NrcywgcmM9JWRcbiIsIHJjKTsKLQkJCSh2b2lkKWRwdV9wb3dlcl9yZXNvdXJjZV9l bmFibGUoY2xrLT5jbGtzLnBoYW5kbGUsCi0JCQkJCWNsay0+Y2xrcy5kc2lfY29yZV9jbGllbnQs IGZhbHNlKTsKLQkJCWdvdG8gZXJyb3JfZGlzYWJsZV9tYXN0ZXI7Ci0JCX0KLQl9Ci0JcmV0dXJu IHJjOwotZXJyb3JfZGlzYWJsZV9tYXN0ZXI6Ci0JKHZvaWQpZHNpX2NvcmVfY2xrX3N0b3AobV9j bGtzKTsKLQotZXJyb3JfZGlzYWJsZV9tYXN0ZXJfcmVzb3VyY2U6Ci0JKHZvaWQpZHB1X3Bvd2Vy X3Jlc291cmNlX2VuYWJsZShtX2Nsa3MtPmNsa3MucGhhbmRsZSwKLQkJCQltX2Nsa3MtPmNsa3Mu ZHNpX2NvcmVfY2xpZW50LCBmYWxzZSk7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRp YyBpbnQgZHNpX2Rpc3BsYXlfbGlua19jbGtfZW5hYmxlKHN0cnVjdCBkc2lfbGlua19jbGtzICpj bGtzLAotCXUzMiBjdHJsX2NvdW50LCB1MzIgbWFzdGVyX25keCkKLXsKLQlpbnQgcmMgPSAwOwot CWludCBpOwotCXN0cnVjdCBkc2lfbGlua19jbGtzICpjbGssICptX2Nsa3M7Ci0KLQkvKgotCSAq IEluIGNhc2Ugb2Ygc3BsaXQgRFNJIHVzZWNhc2VzLCB0aGUgY2xvY2sgZm9yIG1hc3RlciBjb250 cm9sbGVyIHNob3VsZAotCSAqIGJlIGVuYWJsZWQgYmVmb3JlIHRoZSBvdGhlciBjb250cm9sbGVy LiBNYXN0ZXIgY29udHJvbGxlciBpbiB0aGUKLQkgKiBjbG9jayBjb250ZXh0IHJlZmVycyB0byB0 aGUgY29udHJvbGxlciB0aGF0IHNvdXJjZXMgdGhlIGNsb2NrLgotCSAqLwotCi0JbV9jbGtzID0g JmNsa3NbbWFzdGVyX25keF07Ci0KLQlyYyA9IGRzaV9saW5rX2Nsa19zdGFydChtX2Nsa3MpOwot CWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byB0dXJuIG9uIG1hc3RlciBjbG9ja3MsIHJj PSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JLyogVHVybiBvbiByZXN0IG9mIHRo ZSBjb3JlIGNsb2NrcyAqLwotCWZvciAoaSA9IDA7IGkgPCBjdHJsX2NvdW50OyBpKyspIHsKLQkJ Y2xrID0gJmNsa3NbaV07Ci0JCWlmICghY2xrIHx8IChjbGsgPT0gbV9jbGtzKSkKLQkJCWNvbnRp bnVlOwotCi0JCXJjID0gZHNpX2xpbmtfY2xrX3N0YXJ0KGNsayk7Ci0JCWlmIChyYykgewotCQkJ cHJfZXJyKCJmYWlsZWQgdG8gdHVybiBvbiBjbG9ja3MsIHJjPSVkXG4iLCByYyk7Ci0JCQlnb3Rv IGVycm9yX2Rpc2FibGVfbWFzdGVyOwotCQl9Ci0JfQotCXJldHVybiByYzsKLWVycm9yX2Rpc2Fi bGVfbWFzdGVyOgotCSh2b2lkKWRzaV9saW5rX2Nsa19zdG9wKG1fY2xrcyk7Ci1lcnJvcjoKLQly ZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfY29yZV9jbGtfZGlzYWJsZShz dHJ1Y3QgZHNpX2NvcmVfY2xrcyAqY2xrcywKLQl1MzIgY3RybF9jb3VudCwgdTMyIG1hc3Rlcl9u ZHgpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX2NvcmVfY2xrcyAqY2xr LCAqbV9jbGtzOwotCi0JLyoKLQkgKiBJbiBjYXNlIG9mIHNwbGl0IERTSSB1c2VjYXNlcywgY2xv Y2sgZm9yIHNsYXZlIERTSSBjb250cm9sbGVycyBzaG91bGQKLQkgKiBiZSBkaXNhYmxlZCBmaXJz dCBiZWZvcmUgZGlzYWJsaW5nIGNsb2NrIGZvciBtYXN0ZXIgY29udHJvbGxlci4gU2xhdmUKLQkg KiBjb250cm9sbGVycyBpbiB0aGUgY2xvY2sgY29udGV4dCByZWZlciB0byBjb250cm9sbGVyIHdo aWNoIHNvdXJjZQotCSAqIGNsb2NrIGZyb20gYW5vdGhlciBjb250cm9sbGVyLgotCSAqLwotCi0J bV9jbGtzID0gJmNsa3NbbWFzdGVyX25keF07Ci0KLQkvKiBUdXJuIG9mZiBub24tbWFzdGVyIGNv cmUgY2xvY2tzICovCi0JZm9yIChpID0gMDsgaSA8IGN0cmxfY291bnQ7IGkrKykgewotCQljbGsg PSAmY2xrc1tpXTsKLQkJaWYgKCFjbGsgfHwgKGNsayA9PSBtX2Nsa3MpKQotCQkJY29udGludWU7 Ci0KLQkJcmMgPSBkc2lfY29yZV9jbGtfc3RvcChjbGspOwotCQlpZiAocmMpIHsKLQkJCXByX2Rl YnVnKCJmYWlsZWQgdG8gdHVybiBvZmYgY2xvY2tzLCByYz0lZFxuIiwgcmMpOwotCQkJZ290byBl cnJvcjsKLQkJfQotCi0JCXJjID0gZHB1X3Bvd2VyX3Jlc291cmNlX2VuYWJsZShjbGstPmNsa3Mu cGhhbmRsZSwKLQkJCQljbGstPmNsa3MuZHNpX2NvcmVfY2xpZW50LCBmYWxzZSk7Ci0JCWlmIChy YykgewotCQkJcHJfZXJyKCJQb3dlciByZXNvdXJjZSBkaXNhYmxlIGZhaWxlZDogJWRcbiIsIHJj KTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLQlyYyA9IGRzaV9jb3JlX2Nsa19zdG9wKG1f Y2xrcyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHR1cm4gb2ZmIG1hc3RlciBj bG9ja3MsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBkcHVfcG93 ZXJfcmVzb3VyY2VfZW5hYmxlKG1fY2xrcy0+Y2xrcy5waGFuZGxlLAotCQkJCW1fY2xrcy0+Y2xr cy5kc2lfY29yZV9jbGllbnQsIGZhbHNlKTsKLQlpZiAocmMpCi0JCXByX2VycigiUG93ZXIgcmVz b3VyY2UgZGlzYWJsZSBmYWlsZWQ6ICVkXG4iLCByYyk7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19 Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfbGlua19jbGtfZGlzYWJsZShzdHJ1Y3QgZHNpX2xp bmtfY2xrcyAqY2xrcywKLQl1MzIgY3RybF9jb3VudCwgdTMyIG1hc3Rlcl9uZHgpCi17Ci0JaW50 IHJjID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX2xpbmtfY2xrcyAqY2xrLCAqbV9jbGtzOwot Ci0JLyoKLQkgKiBJbiBjYXNlIG9mIHNwbGl0IERTSSB1c2VjYXNlcywgY2xvY2sgZm9yIHNsYXZl IERTSSBjb250cm9sbGVycyBzaG91bGQKLQkgKiBiZSBkaXNhYmxlZCBmaXJzdCBiZWZvcmUgZGlz YWJsaW5nIGNsb2NrIGZvciBtYXN0ZXIgY29udHJvbGxlci4gU2xhdmUKLQkgKiBjb250cm9sbGVy cyBpbiB0aGUgY2xvY2sgY29udGV4dCByZWZlciB0byBjb250cm9sbGVyIHdoaWNoIHNvdXJjZQot CSAqIGNsb2NrIGZyb20gYW5vdGhlciBjb250cm9sbGVyLgotCSAqLwotCi0JbV9jbGtzID0gJmNs a3NbbWFzdGVyX25keF07Ci0KLQkvKiBUdXJuIG9mZiBub24tbWFzdGVyIGxpbmsgY2xvY2tzICov Ci0JZm9yIChpID0gMDsgaSA8IGN0cmxfY291bnQ7IGkrKykgewotCQljbGsgPSAmY2xrc1tpXTsK LQkJaWYgKCFjbGsgfHwgKGNsayA9PSBtX2Nsa3MpKQotCQkJY29udGludWU7Ci0KLQkJcmMgPSBk c2lfbGlua19jbGtfc3RvcChjbGspOwotCQlpZiAocmMpCi0JCQlwcl9lcnIoImZhaWxlZCB0byB0 dXJuIG9mZiBjbG9ja3MsIHJjPSVkXG4iLCByYyk7Ci0JfQotCi0JcmMgPSBkc2lfbGlua19jbGtf c3RvcChtX2Nsa3MpOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWlsZWQgdG8gdHVybiBvZmYgbWFz dGVyIGNsb2NrcywgcmM9JWRcbiIsIHJjKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGlu dCBkc2lfdXBkYXRlX2Nsa19zdGF0ZShzdHJ1Y3QgZHNpX2NvcmVfY2xrcyAqY19jbGtzLCB1MzIg Y19zdGF0ZSwKLQkJCQlzdHJ1Y3QgZHNpX2xpbmtfY2xrcyAqbF9jbGtzLCB1MzIgbF9zdGF0ZSkK LXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfY2xrX21uZ3IgKm1uZ3I7Ci0JYm9vbCBsX2Nf b24gPSBmYWxzZTsKLQotCWlmIChjX2Nsa3MpIHsKLQkJbW5nciA9Ci0JCWNvbnRhaW5lcl9vZihj X2Nsa3MsIHN0cnVjdCBkc2lfY2xrX21uZ3IsIGNvcmVfY2xrc1swXSk7Ci0JfSBlbHNlIGlmIChs X2Nsa3MpIHsKLQkJbW5nciA9Ci0JCWNvbnRhaW5lcl9vZihsX2Nsa3MsIHN0cnVjdCBkc2lfY2xr X21uZ3IsIGxpbmtfY2xrc1swXSk7Ci0JfSBlbHNlIHsKLQkJbW5nciA9IE5VTEw7Ci0JfQotCi0J aWYgKCFtbmdyKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXByX2RlYnVnKCJjX3N0YXRlID0gJWQs IGxfc3RhdGUgPSAlZFxuIiwKLQkJIGNfY2xrcyA/IGNfc3RhdGUgOiAtMSwgbF9jbGtzID8gbF9z dGF0ZSA6IC0xKTsKLQkvKgotCSAqIEJlbG93IGlzIHRoZSBzZXF1ZW5jZSB0byB0b2dnbGUgRFNJ IGNsb2NrczoKLQkgKgkxLiBGb3IgT04gc2VxdWVuY2UsIENvcmUgY2xvY2tzIGJlZm9yZSBsaW5r IGNsb2NrcwotCSAqCTIuIEZvciBPRkYgc2VxdWVuY2UsIExpbmsgY2xvY2tzIGJlZm9yZSBjb3Jl IGNsb2Nrcy4KLQkgKi8KLQlpZiAoY19jbGtzICYmIChjX3N0YXRlID09IERTSV9DTEtfT04pKSB7 Ci0JCWlmIChtbmdyLT5jb3JlX2Nsa19zdGF0ZSA9PSBEU0lfQ0xLX09GRikgewotCQkJcmMgPSBt bmdyLT5wcmVfY2xrb25fY2IobW5nci0+cHJpdl9kYXRhLAotCQkJCQkJRFNJX0NPUkVfQ0xLLAot CQkJCQkJRFNJX0NMS19PTik7Ci0JCQlpZiAocmMpIHsKLQkJCQlwcl9lcnIoImZhaWxlZCB0byB0 dXJuIG9uIE1EUCBGUyByYz0gJWRcbiIsIHJjKTsKLQkJCQlnb3RvIGVycm9yOwotCQkJfQotCQl9 Ci0JCXJjID0gZHNpX2Rpc3BsYXlfY29yZV9jbGtfZW5hYmxlKGNfY2xrcywgbW5nci0+ZHNpX2N0 cmxfY291bnQsCi0JCQkJbW5nci0+bWFzdGVyX25keCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJy KCJmYWlsZWQgdG8gdHVybiBvbiBjb3JlIGNsa3MgcmMgPSAlZFxuIiwgcmMpOwotCQkJZ290byBl cnJvcjsKLQkJfQotCi0JCWlmIChtbmdyLT5wb3N0X2Nsa29uX2NiKSB7Ci0JCQlyYyA9IG1uZ3It PnBvc3RfY2xrb25fY2IobW5nci0+cHJpdl9kYXRhLAotCQkJCQkJIERTSV9DT1JFX0NMSywKLQkJ CQkJCSBEU0lfQ0xLX09OKTsKLQkJCWlmIChyYykKLQkJCQlwcl9lcnIoInBvc3QgY2xrIG9uIGNi IGZhaWxlZCwgcmMgPSAlZFxuIiwgcmMpOwotCQl9Ci0JCW1uZ3ItPmNvcmVfY2xrX3N0YXRlID0g RFNJX0NMS19PTjsKLQl9Ci0KLQlpZiAobF9jbGtzKSB7Ci0JCWlmIChsX3N0YXRlID09IERTSV9D TEtfT04pIHsKLQkJCWlmIChtbmdyLT5wcmVfY2xrb25fY2IpIHsKLQkJCQlyYyA9IG1uZ3ItPnBy ZV9jbGtvbl9jYihtbmdyLT5wcml2X2RhdGEsCi0JCQkJCURTSV9MSU5LX0NMSywgbF9zdGF0ZSk7 Ci0JCQkJaWYgKHJjKQotCQkJCQlwcl9lcnIoInByZSBsaW5rIGNsayBvbiBjYiBmYWlsZWRcbiIp OwotCQkJfQotCQkJcmMgPSBkc2lfZGlzcGxheV9saW5rX2Nsa19lbmFibGUobF9jbGtzLAotCQkJ CQltbmdyLT5kc2lfY3RybF9jb3VudCwgbW5nci0+bWFzdGVyX25keCk7Ci0JCQlpZiAocmMpIHsK LQkJCQlwcl9lcnIoImZhaWxlZCB0byBzdGFydCBsaW5rIGNsayByYz0gJWRcbiIsIHJjKTsKLQkJ CQlnb3RvIGVycm9yOwotCQkJfQotCQkJaWYgKG1uZ3ItPnBvc3RfY2xrb25fY2IpIHsKLQkJCQly YyA9IG1uZ3ItPnBvc3RfY2xrb25fY2IobW5nci0+cHJpdl9kYXRhLAotCQkJCQkJCURTSV9MSU5L X0NMSywKLQkJCQkJCQlsX3N0YXRlKTsKLQkJCQlpZiAocmMpCi0JCQkJCXByX2VycigicG9zdCBs aW5rIGNsayBvbiBjYiBmYWlsZWRcbiIpOwotCQkJfQotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAq IFR3byBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBjaGVja2VkIGZvciBMaW5rCi0JCQkgKiBj bG9ja3M6Ci0JCQkgKiAxLiBMaW5rIGNsb2NrcyBuZWVkIGNvcmUgY2xvY2tzIHRvIGJlIG9uIHdo ZW4KLQkJCSAqICAgIHRyYW5zaXRpb25pbmcgZnJvbSBFQVJMWV9HQVRFIHRvIE9GRiBzdGF0ZS4K LQkJCSAqIDIuIFVMUFMgbW9kZSBtaWdodCBoYXZlIHRvIGJlIGVuYWJsZWQgaW4gY2FzZSBvZiBP RkYKLQkJCSAqICAgIHN0YXRlLiBGb3IgVUxQUywgTGluayBjbG9ja3Mgc2hvdWxkIGJlIHR1cm5l ZCBPTgotCQkJICogICAgZmlyc3QgYmVmb3JlIHRoZXkgYXJlIHR1cm5lZCBvZmYgYWdhaW4uCi0J CQkgKgotCQkJICogSWYgTGluayBpcyBnb2luZyBmcm9tIEVBUkxZX0dBVEUgdG8gT0ZGIHN0YXRl IEFORAotCQkJICogQ29yZSBjbG9jayBpcyBhbHJlYWR5IGluIEVBUkxZX0dBVEUgb3IgT0ZGIHN0 YXRlLAotCQkJICogdHVybiBvbiBDb3JlIGNsb2NrcyBhbmQgbGluayBjbG9ja3MuCi0JCQkgKgot CQkJICogVUxQUyBzdGF0ZSBpcyBtYW5hZ2VkIGFzIHBhcnQgb2YgdGhlIHByZV9jbGtvZmZfY2Iu Ci0JCQkgKi8KLQkJCWlmICgobF9zdGF0ZSA9PSBEU0lfQ0xLX09GRikgJiYKLQkJCSAgICAobW5n ci0+bGlua19jbGtfc3RhdGUgPT0KLQkJCSAgICBEU0lfQ0xLX0VBUkxZX0dBVEUpICYmCi0JCQkg ICAgKG1uZ3ItPmNvcmVfY2xrX3N0YXRlICE9Ci0JCQkgICAgRFNJX0NMS19PTikpIHsKLQkJCQly YyA9IGRzaV9kaXNwbGF5X2NvcmVfY2xrX2VuYWJsZSgKLQkJCQkJbW5nci0+Y29yZV9jbGtzLCBt bmdyLT5kc2lfY3RybF9jb3VudCwKLQkJCQkJbW5nci0+bWFzdGVyX25keCk7Ci0JCQkJaWYgKHJj KSB7Ci0JCQkJCXByX2VycigiY29yZSBjbGtzIGRpZCBub3Qgc3RhcnRcbiIpOwotCQkJCQlnb3Rv IGVycm9yOwotCQkJCX0KLQotCQkJCXJjID0gZHNpX2Rpc3BsYXlfbGlua19jbGtfZW5hYmxlKGxf Y2xrcywKLQkJCQkJbW5nci0+ZHNpX2N0cmxfY291bnQsIG1uZ3ItPm1hc3Rlcl9uZHgpOwotCQkJ CWlmIChyYykgewotCQkJCQlwcl9lcnIoIkxpbmsgY2xrcyBkaWQgbm90IHN0YXJ0XG4iKTsKLQkJ CQkJZ290byBlcnJvcjsKLQkJCQl9Ci0JCQkJbF9jX29uID0gdHJ1ZTsKLQkJCQlwcl9kZWJ1Zygi RUNHOiBjb3JlIGFuZCBMaW5rX29uXG4iKTsKLQkJCX0KLQotCQkJaWYgKG1uZ3ItPnByZV9jbGtv ZmZfY2IpIHsKLQkJCQlyYyA9IG1uZ3ItPnByZV9jbGtvZmZfY2IobW5nci0+cHJpdl9kYXRhLAot CQkJCQlEU0lfTElOS19DTEssIGxfc3RhdGUpOwotCQkJCWlmIChyYykKLQkJCQkJcHJfZXJyKCJw cmUgbGluayBjbGsgb2ZmIGNiIGZhaWxlZFxuIik7Ci0JCQl9Ci0KLQkJCXJjID0gZHNpX2Rpc3Bs YXlfbGlua19jbGtfZGlzYWJsZShsX2Nsa3MsCi0JCQkJbW5nci0+ZHNpX2N0cmxfY291bnQsIG1u Z3ItPm1hc3Rlcl9uZHgpOwotCQkJaWYgKHJjKSB7Ci0JCQkJcHJfZXJyKCJmYWlsZWQgdG8gc3Rv cCBsaW5rIGNsaywgcmMgPSAlZFxuIiwKLQkJCQkgICAgICAgcmMpOwotCQkJCWdvdG8gZXJyb3I7 Ci0JCQl9Ci0KLQkJCWlmIChtbmdyLT5wb3N0X2Nsa29mZl9jYikgewotCQkJCXJjID0gbW5nci0+ cG9zdF9jbGtvZmZfY2IobW5nci0+cHJpdl9kYXRhLAotCQkJCQlEU0lfTElOS19DTEssIGxfc3Rh dGUpOwotCQkJCWlmIChyYykKLQkJCQkJcHJfZXJyKCJwb3N0IGxpbmsgY2xrIG9mZiBjYiBmYWls ZWRcbiIpOwotCQkJfQotCQkJLyoKLQkJCSAqIFRoaXMgY2hlY2sgaXMgdG8gc2F2ZSB1bm5lY2Vz c2FyeSBjbG9jayBzdGF0ZQotCQkJICogY2hhbmdlIHdoZW4gZ29pbmcgZnJvbSBFQVJMWV9HQVRF IHRvIE9GRi4gSW4gdGhlCi0JCQkgKiBjYXNlIHdoZXJlIHRoZSByZXF1ZXN0IGhhcHBlbnMgZm9y IGJvdGggQ29yZSBhbmQgTGluawotCQkJICogY2xvY2tzIGluIHRoZSBzYW1lIGNhbGwsIGNvcmUg Y2xvY2tzIG5lZWQgdG8gYmUKLQkJCSAqIHR1cm5lZCBvbiBmaXJzdCBiZWZvcmUgT0ZGIHN0YXRl IGNhbiBiZSBlbnRlcmVkLgotCQkJICoKLQkJCSAqIENvcmUgY2xvY2tzIGFyZSB0dXJuZWQgb24g aGVyZSBmb3IgTGluayBjbG9ja3MgdG8gZ28KLQkJCSAqIHRvIE9GRiBzdGF0ZS4gSWYgY29yZSBj bG9jayByZXF1ZXN0IGlzIGFsc28gcHJlc2VudCwKLQkJCSAqIHRoZW4gY29yZSBjbG9ja3MgY2Fu IGJlIHR1cm5lZCBvZmYgQ29yZSBjbG9ja3MgYXJlCi0JCQkgKiB0cmFuc2l0aW9uZWQgdG8gT0ZG IHN0YXRlLgotCQkJICovCi0JCQlpZiAobF9jX29uICYmICghKGNfY2xrcyAmJiAoY19zdGF0ZSA9 PSBEU0lfQ0xLX09GRikKLQkJCQkJICYmIChtbmdyLT5jb3JlX2Nsa19zdGF0ZSA9PQotCQkJCQkg ICAgIERTSV9DTEtfRUFSTFlfR0FURSkpKSkgewotCQkJCXJjID0gZHNpX2Rpc3BsYXlfY29yZV9j bGtfZGlzYWJsZSgKLQkJCQkJbW5nci0+Y29yZV9jbGtzLCBtbmdyLT5kc2lfY3RybF9jb3VudCwK LQkJCQkJbW5nci0+bWFzdGVyX25keCk7Ci0JCQkJaWYgKHJjKSB7Ci0JCQkJCXByX2VycigiY29y ZSBjbGtzIGRpZCBub3Qgc3RvcFxuIik7Ci0JCQkJCWdvdG8gZXJyb3I7Ci0JCQkJfQotCi0JCQkJ bF9jX29uID0gZmFsc2U7Ci0JCQkJcHJfZGVidWcoIkVDRzogY29yZSBvZmZcbiIpOwotCQkJfSBl bHNlCi0JCQkJcHJfZGVidWcoIkVDRzogY29yZSBvZmYgc2tpcFxuIik7Ci0JCX0KLQotCQltbmdy LT5saW5rX2Nsa19zdGF0ZSA9IGxfc3RhdGU7Ci0JfQotCi0JaWYgKGNfY2xrcyAmJiAoY19zdGF0 ZSAhPSBEU0lfQ0xLX09OKSkgewotCQkvKgotCQkgKiBXaGVuIGdvaW5nIHRvIE9GRiBzdGF0ZSBm cm9tIEVBUkxZIEdBVEUgc3RhdGUsIENvcmUgY2xvY2tzCi0JCSAqIHNob3VsZCBiZSB0dXJuZWQg b24gZmlyc3Qgc28gdGhhdCB0aGUgSU9zIGNhbiBiZSBjbGFtcGVkLgotCQkgKiBsX2Nfb24gZmxh ZyBpcyBzZXQsIHRoZW4gdGhlIGNvcmUgY2xvY2tzIHdlcmUgdHVybmVkIGJlZm9yZQotCQkgKiB0 byB0aGUgTGluayBjbG9ja3MgZ28gdG8gT0ZGIHN0YXRlLiBTbyBDb3JlIGNsb2NrcyBhcmUKLQkJ ICogYWxyZWFkeSBPTiBhbmQgdGhpcyBzdGVwIGNhbiBiZSBza2lwcGVkLgotCQkgKgotCQkgKiBJ T3MgYXJlIGNsYW1wZWQgaW4gcHJlX2Nsa29mZl9jYiBjYWxsYmFjay4KLQkJICovCi0JCWlmICgo Y19zdGF0ZSA9PSBEU0lfQ0xLX09GRikgJiYKLQkJICAgIChtbmdyLT5jb3JlX2Nsa19zdGF0ZSA9 PQotCQkgICAgRFNJX0NMS19FQVJMWV9HQVRFKSAmJiAhbF9jX29uKSB7Ci0JCQlyYyA9IGRzaV9k aXNwbGF5X2NvcmVfY2xrX2VuYWJsZShtbmdyLT5jb3JlX2Nsa3MsCi0JCQkJbW5nci0+ZHNpX2N0 cmxfY291bnQsIG1uZ3ItPm1hc3Rlcl9uZHgpOwotCQkJaWYgKHJjKSB7Ci0JCQkJcHJfZXJyKCJj b3JlIGNsa3MgZGlkIG5vdCBzdGFydFxuIik7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJCXBy X2RlYnVnKCJFQ0c6IGNvcmUgb25cbiIpOwotCQl9IGVsc2UKLQkJCXByX2RlYnVnKCJFQ0c6IGNv cmUgb24gc2tpcFxuIik7Ci0KLQkJaWYgKG1uZ3ItPnByZV9jbGtvZmZfY2IpIHsKLQkJCXJjID0g bW5nci0+cHJlX2Nsa29mZl9jYihtbmdyLT5wcml2X2RhdGEsCi0JCQkJCQkgRFNJX0NPUkVfQ0xL LAotCQkJCQkJIGNfc3RhdGUpOwotCQkJaWYgKHJjKQotCQkJCXByX2VycigicHJlIGNvcmUgY2xr IG9mZiBjYiBmYWlsZWRcbiIpOwotCQl9Ci0KLQkJcmMgPSBkc2lfZGlzcGxheV9jb3JlX2Nsa19k aXNhYmxlKGNfY2xrcywgbW5nci0+ZHNpX2N0cmxfY291bnQsCi0JCQltbmdyLT5tYXN0ZXJfbmR4 KTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byB0dXJuIG9mZiBjb3JlIGNsa3Mg cmMgPSAlZFxuIiwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCi0JCWlmIChjX3N0YXRlID09 IERTSV9DTEtfT0ZGKSB7Ci0JCQlpZiAobW5nci0+cG9zdF9jbGtvZmZfY2IpIHsKLQkJCQlyYyA9 IG1uZ3ItPnBvc3RfY2xrb2ZmX2NiKG1uZ3ItPnByaXZfZGF0YSwKLQkJCQkJCURTSV9DT1JFX0NM SywKLQkJCQkJCURTSV9DTEtfT0ZGKTsKLQkJCQlpZiAocmMpCi0JCQkJCXByX2VycigicG9zdCBj bGtvZmYgY2IgZmFpbCwgcmMgPSAlZFxuIiwKLQkJCQkJICAgICAgIHJjKTsKLQkJCX0KLQkJfQot CQltbmdyLT5jb3JlX2Nsa19zdGF0ZSA9IGNfc3RhdGU7Ci0JfQotCi1lcnJvcjoKLQlyZXR1cm4g cmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3JlY2hlY2tfY2xrX3N0YXRlKHN0cnVjdCBkc2lfY2xr X21uZ3IgKm1uZ3IpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MgPSBO VUxMOwotCXN0cnVjdCBkc2lfY2xrX2NsaWVudF9pbmZvICpjOwotCXUzMiBuZXdfY29yZV9jbGtf c3RhdGUgPSBEU0lfQ0xLX09GRjsKLQl1MzIgbmV3X2xpbmtfY2xrX3N0YXRlID0gRFNJX0NMS19P RkY7Ci0JdTMyIG9sZF9jX2Nsa19zdGF0ZSA9IERTSV9DTEtfT0ZGOwotCXUzMiBvbGRfbF9jbGtf c3RhdGUgPSBEU0lfQ0xLX09GRjsKLQlzdHJ1Y3QgZHNpX2NvcmVfY2xrcyAqY19jbGtzID0gTlVM TDsKLQlzdHJ1Y3QgZHNpX2xpbmtfY2xrcyAqbF9jbGtzID0gTlVMTDsKLQotCS8qCi0JICogQ29u ZGl0aW9ucyB0byBtYWludGFpbiBEU0kgbWFuYWdlciBjbG9jayBzdGF0ZSBiYXNlZCBvbgotCSAq CQljbG9jayBzdGF0ZXMgb2YgdmFyaW91cyBjbGllbnRzOgotCSAqCTEuIElmIGFueSBjbGllbnQg aGFzIGNsb2NrIGluIE9OIHN0YXRlLCBEU0kgbWFuYWdlciBjbG9jayBzdGF0ZQotCSAqCQlzaG91 bGQgYmUgT04uCi0JICoJMi4gSWYgYW55IGNsaWVudCBpcyBpbiBFQ0cgc3RhdGUgd2l0aCByZXN0 IG9mIHRoZW0gdHVybmVkIE9GRiwKLQkgKgkgICBnbyB0byBFYXJseSBnYXRlIHN0YXRlLgotCSAq CTMuIElmIGFsbCBjbGllbnRzIGhhdmUgY2xvY2tzIGFzIE9GRiwgdGhlbiBnbyB0byBPRkYgc3Rh dGUuCi0JICovCi0JbGlzdF9mb3JfZWFjaChwb3MsICZtbmdyLT5jbGllbnRfbGlzdCkgewotCQlj ID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBkc2lfY2xrX2NsaWVudF9pbmZvLCBsaXN0KTsKLQkJ aWYgKGMtPmNvcmVfY2xrX3N0YXRlID09IERTSV9DTEtfT04pIHsKLQkJCW5ld19jb3JlX2Nsa19z dGF0ZSA9IERTSV9DTEtfT047Ci0JCQlicmVhazsKLQkJfSBlbHNlIGlmIChjLT5jb3JlX2Nsa19z dGF0ZSA9PSBEU0lfQ0xLX0VBUkxZX0dBVEUpIHsKLQkJCW5ld19jb3JlX2Nsa19zdGF0ZSA9IERT SV9DTEtfRUFSTFlfR0FURTsKLQkJfQotCX0KLQotCWxpc3RfZm9yX2VhY2gocG9zLCAmbW5nci0+ Y2xpZW50X2xpc3QpIHsKLQkJYyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgZHNpX2Nsa19jbGll bnRfaW5mbywgbGlzdCk7Ci0JCWlmIChjLT5saW5rX2Nsa19zdGF0ZSA9PSBEU0lfQ0xLX09OKSB7 Ci0JCQluZXdfbGlua19jbGtfc3RhdGUgPSBEU0lfQ0xLX09OOwotCQkJYnJlYWs7Ci0JCX0gZWxz ZSBpZiAoYy0+bGlua19jbGtfc3RhdGUgPT0gRFNJX0NMS19FQVJMWV9HQVRFKSB7Ci0JCQluZXdf bGlua19jbGtfc3RhdGUgPSBEU0lfQ0xLX0VBUkxZX0dBVEU7Ci0JCX0KLQl9Ci0KLQlpZiAobmV3 X2NvcmVfY2xrX3N0YXRlICE9IG1uZ3ItPmNvcmVfY2xrX3N0YXRlKQotCQljX2Nsa3MgPSBtbmdy LT5jb3JlX2Nsa3M7Ci0KLQlpZiAobmV3X2xpbmtfY2xrX3N0YXRlICE9IG1uZ3ItPmxpbmtfY2xr X3N0YXRlKQotCQlsX2Nsa3MgPSBtbmdyLT5saW5rX2Nsa3M7Ci0KLQlvbGRfY19jbGtfc3RhdGUg PSBtbmdyLT5jb3JlX2Nsa19zdGF0ZTsKLQlvbGRfbF9jbGtfc3RhdGUgPSBtbmdyLT5saW5rX2Ns a19zdGF0ZTsKLQotCXByX2RlYnVnKCJjX2Nsa19zdGF0ZSAoJWQgLT4gJWQpXG4iLAotCQlvbGRf Y19jbGtfc3RhdGUsIG5ld19jb3JlX2Nsa19zdGF0ZSk7Ci0JcHJfZGVidWcoImxfY2xrX3N0YXRl ICglZCAtPiAlZClcbiIsCi0JCW9sZF9sX2Nsa19zdGF0ZSwgbmV3X2xpbmtfY2xrX3N0YXRlKTsK LQotCWlmIChjX2Nsa3MgfHwgbF9jbGtzKSB7Ci0JCXJjID0gZHNpX3VwZGF0ZV9jbGtfc3RhdGUo Y19jbGtzLCBuZXdfY29yZV9jbGtfc3RhdGUsCi0JCQkJCSAgbF9jbGtzLCBuZXdfbGlua19jbGtf c3RhdGUpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHVwZGF0ZSBjbG9jayBz dGF0ZSwgcmMgPSAlZFxuIiwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0KLQotZXJyb3I6 Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX2Nsa19yZXFfc3RhdGUodm9pZCAqY2xpZW50LCBl bnVtIGRzaV9jbGtfdHlwZSBjbGssCi0JZW51bSBkc2lfY2xrX3N0YXRlIHN0YXRlKQotewotCWlu dCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9jbGtfY2xpZW50X2luZm8gKmMgPSBjbGllbnQ7Ci0Jc3Ry dWN0IGRzaV9jbGtfbW5nciAqbW5ncjsKLQlib29sIGNoYW5nZWQgPSBmYWxzZTsKLQotCWlmICgh Y2xpZW50IHx8ICFjbGsgfHwgY2xrID4gKERTSV9DT1JFX0NMSyB8IERTSV9MSU5LX0NMSykgfHwK LQkgICAgc3RhdGUgPiBEU0lfQ0xLX0VBUkxZX0dBVEUpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBh cmFtcywgY2xpZW50ID0gJXBLLCBjbGsgPSAweCV4LCBzdGF0ZSA9ICVkXG4iLAotCQkgICAgICAg Y2xpZW50LCBjbGssIHN0YXRlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbW5nciA9IGMt Pm1uZ3I7Ci0JbXV0ZXhfbG9jaygmbW5nci0+Y2xrX211dGV4KTsKLQotCXByX2RlYnVnKCJbJXNd JXM6IENMSz0lZCwgbmV3X3N0YXRlPSVkLCBjb3JlPSVkLCBsaW5rbD0lZFxuIiwKLQkgICAgICAg bW5nci0+bmFtZSwgYy0+bmFtZSwgY2xrLCBzdGF0ZSwgYy0+Y29yZV9jbGtfc3RhdGUsCi0JICAg ICAgIGMtPmxpbmtfY2xrX3N0YXRlKTsKLQotCS8qCi0JICogQ2xvY2sgcmVmY291bnQgaGFuZGxp bmcgYXMgYmVsb3c6Ci0JICoJaS4gSW5jcmVtZW50IHJlZmNvdW50IHdoZW5ldmVyIE9OIGlzIGNh bGxlZC4KLQkgKglpaS4gRGVjcmVtZW50IHJlZmNvdW50IHdoZW4gdHJhbnNpdGlvbmluZyBmcm9t IE9OIHN0YXRlIHRvCi0JICoJCWVpdGhlciBPRkYgb3IgRUFSTFlfR0FURS4KLQkgKglpaWkuIERv IG5vdCBkZWNyZW1lbnQgcmVmY291bnQgd2hlbiBjaGFuZ2luZyBmcm9tCi0JICoJCUVBUkxZX0dB VEUgdG8gT0ZGLgotCSAqLwotCWlmIChzdGF0ZSA9PSBEU0lfQ0xLX09OKSB7Ci0JCWlmIChjbGsg JiBEU0lfQ09SRV9DTEspIHsKLQkJCWMtPmNvcmVfcmVmY291bnQrKzsKLQkJCWlmIChjLT5jb3Jl X2Nsa19zdGF0ZSAhPSBEU0lfQ0xLX09OKSB7Ci0JCQkJYy0+Y29yZV9jbGtfc3RhdGUgPSBEU0lf Q0xLX09OOwotCQkJCWNoYW5nZWQgPSB0cnVlOwotCQkJfQotCQl9Ci0JCWlmIChjbGsgJiBEU0lf TElOS19DTEspIHsKLQkJCWMtPmxpbmtfcmVmY291bnQrKzsKLQkJCWlmIChjLT5saW5rX2Nsa19z dGF0ZSAhPSBEU0lfQ0xLX09OKSB7Ci0JCQkJYy0+bGlua19jbGtfc3RhdGUgPSBEU0lfQ0xLX09O OwotCQkJCWNoYW5nZWQgPSB0cnVlOwotCQkJfQotCQl9Ci0JfSBlbHNlIGlmICgoc3RhdGUgPT0g RFNJX0NMS19FQVJMWV9HQVRFKSB8fAotCQkgICAoc3RhdGUgPT0gRFNJX0NMS19PRkYpKSB7Ci0J CWlmIChjbGsgJiBEU0lfQ09SRV9DTEspIHsKLQkJCWlmIChjLT5jb3JlX3JlZmNvdW50ID09IDAp IHsKLQkJCQlpZiAoKGMtPmNvcmVfY2xrX3N0YXRlID09Ci0JCQkJICAgIERTSV9DTEtfRUFSTFlf R0FURSkgJiYKLQkJCQkgICAgKHN0YXRlID09IERTSV9DTEtfT0ZGKSkgewotCQkJCQljaGFuZ2Vk ID0gdHJ1ZTsKLQkJCQkJYy0+Y29yZV9jbGtfc3RhdGUgPSBEU0lfQ0xLX09GRjsKLQkJCQl9IGVs c2UgewotCQkJCQlwcl93YXJuKCJDb3JlIHJlZmNvdW50IGlzIHplcm8gZm9yICVzIiwKLQkJCQkJ CWMtPm5hbWUpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJYy0+Y29yZV9yZWZjb3VudC0tOwot CQkJCWlmIChjLT5jb3JlX3JlZmNvdW50ID09IDApIHsKLQkJCQkJYy0+Y29yZV9jbGtfc3RhdGUg PSBzdGF0ZTsKLQkJCQkJY2hhbmdlZCA9IHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWlmIChj bGsgJiBEU0lfTElOS19DTEspIHsKLQkJCWlmIChjLT5saW5rX3JlZmNvdW50ID09IDApIHsKLQkJ CQlpZiAoKGMtPmxpbmtfY2xrX3N0YXRlID09Ci0JCQkJICAgIERTSV9DTEtfRUFSTFlfR0FURSkg JiYKLQkJCQkgICAgKHN0YXRlID09IERTSV9DTEtfT0ZGKSkgewotCQkJCQljaGFuZ2VkID0gdHJ1 ZTsKLQkJCQkJYy0+bGlua19jbGtfc3RhdGUgPSBEU0lfQ0xLX09GRjsKLQkJCQl9IGVsc2Ugewot CQkJCQlwcl93YXJuKCJMaW5rIHJlZmNvdW50IGlzIHplcm8gZm9yICVzIiwKLQkJCQkJCWMtPm5h bWUpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJYy0+bGlua19yZWZjb3VudC0tOwotCQkJCWlm IChjLT5saW5rX3JlZmNvdW50ID09IDApIHsKLQkJCQkJYy0+bGlua19jbGtfc3RhdGUgPSBzdGF0 ZTsKLQkJCQkJY2hhbmdlZCA9IHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCXByX2RlYnVn KCJbJXNdJXM6IGNoYW5nZT0lZCwgQ29yZSAocmVmPSVkLCBzdGF0ZT0lZCksIExpbmsgKHJlZj0l ZCwgc3RhdGU9JWQpXG4iLAotCQkgbW5nci0+bmFtZSwgYy0+bmFtZSwgY2hhbmdlZCwgYy0+Y29y ZV9yZWZjb3VudCwKLQkJIGMtPmNvcmVfY2xrX3N0YXRlLCBjLT5saW5rX3JlZmNvdW50LCBjLT5s aW5rX2Nsa19zdGF0ZSk7Ci0KLQlpZiAoY2hhbmdlZCkgewotCQlyYyA9IGRzaV9yZWNoZWNrX2Ns a19zdGF0ZShtbmdyKTsKLQkJaWYgKHJjKQotCQkJcHJfZXJyKCJGYWlsZWQgdG8gYWRqdXN0IGNs b2NrIHN0YXRlIHJjID0gJWRcbiIsIHJjKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJm1uZ3ItPmNs a19tdXRleCk7Ci0JcmV0dXJuIHJjOwotfQotCi1ERUZJTkVfTVVURVgoZHNpX21uZ3JfY2xrX211 dGV4KTsKLQotaW50IGRzaV9kaXNwbGF5X2Nsa19jdHJsKHZvaWQgKmhhbmRsZSwKLQllbnVtIGRz aV9jbGtfdHlwZSBjbGtfdHlwZSwgZW51bSBkc2lfY2xrX3N0YXRlIGNsa19zdGF0ZSkKLXsKLQlp bnQgcmMgPSAwOwotCi0JaWYgKCFoYW5kbGUpIHsKLQkJcHJfZXJyKCIlczogSW52YWxpZCBhcmdc biIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZHNp X21uZ3JfY2xrX211dGV4KTsKLQlyYyA9IGRzaV9jbGtfcmVxX3N0YXRlKGhhbmRsZSwgY2xrX3R5 cGUsIGNsa19zdGF0ZSk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIiVzOiBmYWlsZWQgc2V0IGNsayBz dGF0ZSwgcmMgPSAlZFxuIiwgX19mdW5jX18sIHJjKTsKLQltdXRleF91bmxvY2soJmRzaV9tbmdy X2Nsa19tdXRleCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXZvaWQgKmRzaV9yZWdpc3Rlcl9jbGtf aGFuZGxlKHZvaWQgKmNsa19tbmdyLCBjaGFyICpjbGllbnQpCi17Ci0Jdm9pZCAqaGFuZGxlID0g TlVMTDsKLQlzdHJ1Y3QgZHNpX2Nsa19tbmdyICptbmdyID0gY2xrX21uZ3I7Ci0Jc3RydWN0IGRz aV9jbGtfY2xpZW50X2luZm8gKmM7Ci0KLQlpZiAoIW1uZ3IpIHsKLQkJcHJfZXJyKCJiYWQgcGFy YW1zXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JfQotCi0JbXV0ZXhfbG9jaygm bW5nci0+Y2xrX211dGV4KTsKLQotCWMgPSBremFsbG9jKHNpemVvZigqYyksIEdGUF9LRVJORUwp OwotCWlmICghYykgewotCQloYW5kbGUgPSBFUlJfUFRSKC1FTk9NRU0pOwotCQlnb3RvIGVycm9y OwotCX0KLQotCXN0cmxjcHkoYy0+bmFtZSwgY2xpZW50LCBNQVhfU1RSSU5HX0xFTik7Ci0JYy0+ bW5nciA9IG1uZ3I7Ci0KLQlsaXN0X2FkZCgmYy0+bGlzdCwgJm1uZ3ItPmNsaWVudF9saXN0KTsK LQotCXByX2RlYnVnKCJbJXNdOiBBZGRlZCBuZXcgY2xpZW50ICglcylcbiIsIG1uZ3ItPm5hbWUs IGMtPm5hbWUpOwotCWhhbmRsZSA9IGM7Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJm1uZ3ItPmNs a19tdXRleCk7Ci0JcmV0dXJuIGhhbmRsZTsKLX0KLQotaW50IGRzaV9kZXJlZ2lzdGVyX2Nsa19o YW5kbGUodm9pZCAqY2xpZW50KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9jbGtfY2xp ZW50X2luZm8gKmMgPSBjbGllbnQ7Ci0Jc3RydWN0IGRzaV9jbGtfbW5nciAqbW5ncjsKLQlzdHJ1 Y3QgbGlzdF9oZWFkICpwb3MgPSBOVUxMOwotCXN0cnVjdCBsaXN0X2hlYWQgKnRtcCA9IE5VTEw7 Ci0Jc3RydWN0IGRzaV9jbGtfY2xpZW50X2luZm8gKm5vZGUgPSBOVUxMOwotCi0JaWYgKCFjbGll bnQpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwot CX0KLQotCW1uZ3IgPSBjLT5tbmdyOwotCXByX2RlYnVnKCIlczogRU5URVJcbiIsIG1uZ3ItPm5h bWUpOwotCW11dGV4X2xvY2soJm1uZ3ItPmNsa19tdXRleCk7Ci0JYy0+Y29yZV9jbGtfc3RhdGUg PSBEU0lfQ0xLX09GRjsKLQljLT5saW5rX2Nsa19zdGF0ZSA9IERTSV9DTEtfT0ZGOwotCi0JcmMg PSBkc2lfcmVjaGVja19jbGtfc3RhdGUobW5ncik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiY2xv Y2sgc3RhdGUgcmVjaGVjayBmYWlsZWQgcmMgPSAlZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwot CX0KLQotCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJm1uZ3ItPmNsaWVudF9saXN0KSB7 Ci0JCW5vZGUgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGRzaV9jbGtfY2xpZW50X2luZm8sCi0J CQkgIGxpc3QpOwotCQlpZiAobm9kZSA9PSBjKSB7Ci0JCQlsaXN0X2RlbCgmbm9kZS0+bGlzdCk7 Ci0JCQlwcl9kZWJ1ZygiUmVtb3ZlZCBkZXZpY2UgKCVzKVxuIiwgbm9kZS0+bmFtZSk7Ci0JCQlr ZnJlZShub2RlKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi1lcnJvcjoKLQltdXRleF91bmxvY2so Jm1uZ3ItPmNsa19tdXRleCk7Ci0JcHJfZGVidWcoIiVzOiBFWElULCByYyA9ICVkXG4iLCBtbmdy LT5uYW1lLCByYyk7Ci0JcmV0dXJuIHJjOwotfQotCi12b2lkICpkc2lfZGlzcGxheV9jbGtfbW5n cl9yZWdpc3RlcihzdHJ1Y3QgZHNpX2Nsa19pbmZvICppbmZvKQotewotCXN0cnVjdCBkc2lfY2xr X21uZ3IgKm1uZ3I7Ci0JaW50IGkgPSAwOwotCi0JaWYgKCFpbmZvKSB7Ci0JCXByX2VycigiSW52 YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9Ci0KLQltbmdy ID0ga3phbGxvYyhzaXplb2YoKm1uZ3IpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1uZ3IpIHsKLQkJ bW5nciA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JbXV0ZXhfaW5p dCgmbW5nci0+Y2xrX211dGV4KTsKLQltbmdyLT5kc2lfY3RybF9jb3VudCA9IGluZm8tPmRzaV9j dHJsX2NvdW50OwotCW1uZ3ItPm1hc3Rlcl9uZHggPSBpbmZvLT5tYXN0ZXJfbmR4OwotCi0JaWYg KG1uZ3ItPmRzaV9jdHJsX2NvdW50ID4gTUFYX0RTSV9DVFJMKSB7Ci0JCWtmcmVlKG1uZ3IpOwot CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbW5nci0+ ZHNpX2N0cmxfY291bnQ7IGkrKykgewotCQltZW1jcHkoJm1uZ3ItPmNvcmVfY2xrc1tpXS5jbGtz LCAmaW5mby0+Y19jbGtzW2ldLAotCQkJc2l6ZW9mKHN0cnVjdCBkc2lfY29yZV9jbGtfaW5mbykp OwotCQltZW1jcHkoJm1uZ3ItPmxpbmtfY2xrc1tpXS5jbGtzLCAmaW5mby0+bF9jbGtzW2ldLAot CQkJc2l6ZW9mKHN0cnVjdCBkc2lfbGlua19jbGtfaW5mbykpOwotCQltbmdyLT5jb3JlX2Nsa3Nb aV0uYnVzX2hhbmRsZSA9IGluZm8tPmJ1c19oYW5kbGVbaV07Ci0JCW1uZ3ItPmN0cmxfaW5kZXhb aV0gPSBpbmZvLT5jdHJsX2luZGV4W2ldOwotCX0KLQotCUlOSVRfTElTVF9IRUFEKCZtbmdyLT5j bGllbnRfbGlzdCk7Ci0JbW5nci0+cHJlX2Nsa29uX2NiID0gaW5mby0+cHJlX2Nsa29uX2NiOwot CW1uZ3ItPnBvc3RfY2xrb25fY2IgPSBpbmZvLT5wb3N0X2Nsa29uX2NiOwotCW1uZ3ItPnByZV9j bGtvZmZfY2IgPSBpbmZvLT5wcmVfY2xrb2ZmX2NiOwotCW1uZ3ItPnBvc3RfY2xrb2ZmX2NiID0g aW5mby0+cG9zdF9jbGtvZmZfY2I7Ci0JbW5nci0+cHJpdl9kYXRhID0gaW5mby0+cHJpdl9kYXRh OwotCW1lbWNweShtbmdyLT5uYW1lLCBpbmZvLT5uYW1lLCBNQVhfU1RSSU5HX0xFTik7Ci0KLWVy cm9yOgotCXByX2RlYnVnKCJFWElULCByYyA9ICVsZFxuIiwgUFRSX0VSUihtbmdyKSk7Ci0JcmV0 dXJuIG1uZ3I7Ci19Ci0KLWludCBkc2lfZGlzcGxheV9jbGtfbW5ncl9kZXJlZ2lzdGVyKHZvaWQg KmNsa19tbmdyKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9jbGtfbW5nciAqbW5nciA9 IGNsa19tbmdyOwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvc2l0aW9uID0gTlVMTDsKLQlzdHJ1Y3Qg bGlzdF9oZWFkICp0bXAgPSBOVUxMOwotCXN0cnVjdCBkc2lfY2xrX2NsaWVudF9pbmZvICpub2Rl ID0gTlVMTDsKLQotCWlmICghbW5ncikgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcHJfZGVidWcoIiVzOiBFTlRFUlxuIiwgbW5nci0+ bmFtZSk7Ci0JbXV0ZXhfbG9jaygmbW5nci0+Y2xrX211dGV4KTsKLQotCWxpc3RfZm9yX2VhY2hf c2FmZShwb3NpdGlvbiwgdG1wLCAmbW5nci0+Y2xpZW50X2xpc3QpIHsKLQkJbm9kZSA9IGxpc3Rf ZW50cnkocG9zaXRpb24sIHN0cnVjdCBkc2lfY2xrX2NsaWVudF9pbmZvLAotCQkJICBsaXN0KTsK LQkJbGlzdF9kZWwoJm5vZGUtPmxpc3QpOwotCQlwcl9kZWJ1ZygiUmVtb3ZlZCBkZXZpY2UgKCVz KVxuIiwgbm9kZS0+bmFtZSk7Ci0JCWtmcmVlKG5vZGUpOwotCX0KLQotCXJjID0gZHNpX3JlY2hl Y2tfY2xrX3N0YXRlKG1uZ3IpOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZGlzYWJs ZSBhbGwgY2xvY2tzXG4iKTsKLQotCW11dGV4X3VubG9jaygmbW5nci0+Y2xrX211dGV4KTsKLQlw cl9kZWJ1ZygiJXM6IEVYSVQsIHJjID0gJWRcbiIsIG1uZ3ItPm5hbWUsIHJjKTsKLQlrZnJlZSht bmdyKTsKLQlyZXR1cm4gcmM7Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHNpLXN0YWdpbmcvZHNpX2N0cmwuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcv ZHNpX2N0cmwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc5OGY0NC4uMDAwMDAw MAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsLmMKKysrIC9k ZXYvbnVsbApAQCAtMSwyODQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAx OCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K LSAqLwotCi0jZGVmaW5lIHByX2ZtdChmbXQpCSJkc2ktY3RybDpbJXNdICIgZm10LCBfX2Z1bmNf XwotCi0jaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+ Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Ci0jaW5jbHVkZSA8bGludXgv Y2xrLmg+Ci0jaWZkZWYgQ09ORklHX0NIUk9NRV9CVVNfU0NBTEUKLSNpbmNsdWRlIDxsaW51eC9t c20tYnVzLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KLSNpbmNsdWRlIDx2 aWRlby9taXBpX2Rpc3BsYXkuaD4KLQotI2luY2x1ZGUgIm1zbV9kcnYuaCIKLSNpbmNsdWRlICJt c21fa21zLmgiCi0jaW5jbHVkZSAibXNtX2dwdS5oIgotI2luY2x1ZGUgIm1zbV9tbXUuaCIKLSNp bmNsdWRlICJkc2lfY3RybC5oIgotI2luY2x1ZGUgImRzaV9jdHJsX2h3LmgiCi0jaW5jbHVkZSAi ZHNpX2Nsay5oIgotI2luY2x1ZGUgImRzaV9wd3IuaCIKLSNpbmNsdWRlICJkc2lfY2F0YWxvZy5o IgotCi0jaW5jbHVkZSAiZHB1X2RiZy5oIgotCi0jZGVmaW5lIERTSV9DVFJMX0RFRkFVTFRfTEFC RUwgIk1EU1MgRFNJIENUUkwiCi0KLSNkZWZpbmUgRFNJX0NUUkxfVFhfVE9fTVMgICAgIDIwMAot Ci0jZGVmaW5lIFRPX09OX09GRih4KSAoKHgpID8gIk9OIiA6ICJPRkYiKQotCi0jZGVmaW5lIENF SUwoeCwgeSkgICAgICAgICAgICAgICgoKHgpICsgKCh5KS0xKSkgLyAoeSkpCi0vKioKLSAqIGVu dW0gZHNpX2N0cmxfZHJpdmVyX29wcyAtIGNvbnRyb2xsZXIgZHJpdmVyIG9wcwotICovCi1lbnVt IGRzaV9jdHJsX2RyaXZlcl9vcHMgewotCURTSV9DVFJMX09QX1BPV0VSX1NUQVRFX0NIQU5HRSwK LQlEU0lfQ1RSTF9PUF9DTURfRU5HSU5FLAotCURTSV9DVFJMX09QX1ZJRF9FTkdJTkUsCi0JRFNJ X0NUUkxfT1BfSE9TVF9FTkdJTkUsCi0JRFNJX0NUUkxfT1BfQ01EX1RYLAotCURTSV9DVFJMX09Q X0hPU1RfSU5JVCwKLQlEU0lfQ1RSTF9PUF9UUEcsCi0JRFNJX0NUUkxfT1BfUEhZX1NXX1JFU0VU LAotCURTSV9DVFJMX09QX0FTWU5DX1RJTUlORywKLQlEU0lfQ1RSTF9PUF9NQVgKLX07Ci0KLXN0 cnVjdCBkc2lfY3RybF9saXN0X2l0ZW0gewotCXN0cnVjdCBkc2lfY3RybCAqY3RybDsKLQlzdHJ1 Y3QgbGlzdF9oZWFkIGxpc3Q7Ci19OwotCi1zdGF0aWMgTElTVF9IRUFEKGRzaV9jdHJsX2xpc3Qp Owotc3RhdGljIERFRklORV9NVVRFWChkc2lfY3RybF9saXN0X2xvY2spOwotCi1zdGF0aWMgY29u c3QgZW51bSBkc2lfY3RybF92ZXJzaW9uIGRzaV9jdHJsX3YxXzQgPSBEU0lfQ1RSTF9WRVJTSU9O XzFfNDsKLXN0YXRpYyBjb25zdCBlbnVtIGRzaV9jdHJsX3ZlcnNpb24gZHNpX2N0cmxfdjJfMCA9 IERTSV9DVFJMX1ZFUlNJT05fMl8wOwotc3RhdGljIGNvbnN0IGVudW0gZHNpX2N0cmxfdmVyc2lv biBkc2lfY3RybF92Ml8yID0gRFNJX0NUUkxfVkVSU0lPTl8yXzI7Ci0KLXN0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1zbV9kc2lfb2ZfbWF0Y2hbXSA9IHsKLQl7Ci0JCS5jb21wYXRp YmxlID0gInFjb20sZHNpLWN0cmwtaHctdjEuNCIsCi0JCS5kYXRhID0gJmRzaV9jdHJsX3YxXzQs Ci0JfSwKLQl7Ci0JCS5jb21wYXRpYmxlID0gInFjb20sZHNpLWN0cmwtaHctdjIuMCIsCi0JCS5k YXRhID0gJmRzaV9jdHJsX3YyXzAsCi0JfSwKLQl7Ci0JCS5jb21wYXRpYmxlID0gInFjb20sZHNp LWN0cmwtaHctdjIuMiIsCi0JCS5kYXRhID0gJmRzaV9jdHJsX3YyXzIsCi0JfSwKLQl7fQotfTsK LQotc3RhdGljIHNzaXplX3QgZGVidWdmc19zdGF0ZV9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZp bGUsCi0JCQkJICAgICAgIGNoYXIgX191c2VyICpidWZmLAotCQkJCSAgICAgICBzaXplX3QgY291 bnQsCi0JCQkJICAgICAgIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9j dHJsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgKmJ1ZjsKLQl1MzIgbGVuID0gMDsKLQot CWlmICghZHNpX2N0cmwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKCpwcG9zKQotCQlyZXR1 cm4gMDsKLQotCWJ1ZiA9IGt6YWxsb2MoU1pfNEssIEdGUF9LRVJORUwpOwotCWlmICghYnVmKQot CQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIER1bXAgY3VycmVudCBzdGF0ZSAqLwotCWxlbiArPSBz bnByaW50ZigoYnVmICsgbGVuKSwgKFNaXzRLIC0gbGVuKSwgIkN1cnJlbnQgU3RhdGU6XG4iKTsK LQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChTWl80SyAtIGxlbiksCi0JCQkiXHRDVFJM X0VOR0lORSA9ICVzXG4iLAotCQkJVE9fT05fT0ZGKGRzaV9jdHJsLT5jdXJyZW50X3N0YXRlLmNv bnRyb2xsZXJfc3RhdGUpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChTWl80SyAt IGxlbiksCi0JCQkiXHRWSURFT19FTkdJTkUgPSAlc1xuXHRDT01NQU5EX0VOR0lORSA9ICVzXG4i LAotCQkJVE9fT05fT0ZGKGRzaV9jdHJsLT5jdXJyZW50X3N0YXRlLnZpZF9lbmdpbmVfc3RhdGUp LAotCQkJVE9fT05fT0ZGKGRzaV9jdHJsLT5jdXJyZW50X3N0YXRlLmNtZF9lbmdpbmVfc3RhdGUp KTsKLQotCS8qIER1bXAgY2xvY2sgaW5mb3JtYXRpb24gKi8KLQlsZW4gKz0gc25wcmludGYoKGJ1 ZiArIGxlbiksIChTWl80SyAtIGxlbiksICJcbkNsb2NrIEluZm86XG4iKTsKLQlsZW4gKz0gc25w cmludGYoKGJ1ZiArIGxlbiksIChTWl80SyAtIGxlbiksCi0JCQkiXHRCWVRFX0NMSyA9ICV1LCBQ SVhFTF9DTEsgPSAldSwgRVNDX0NMSyA9ICV1XG4iLAotCQkJZHNpX2N0cmwtPmNsa19mcmVxLmJ5 dGVfY2xrX3JhdGUsCi0JCQlkc2lfY3RybC0+Y2xrX2ZyZXEucGl4X2Nsa19yYXRlLAotCQkJZHNp X2N0cmwtPmNsa19mcmVxLmVzY19jbGtfcmF0ZSk7Ci0KLQkvKiBUT0RPOiBtYWtlIHN1cmUgdGhh dCB0aGlzIGRvZXMgbm90IGV4Y2VlZCA0SyAqLwotCWlmIChjb3B5X3RvX3VzZXIoYnVmZiwgYnVm LCBsZW4pKSB7Ci0JCWtmcmVlKGJ1Zik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCSpwcG9z ICs9IGxlbjsKLQlrZnJlZShidWYpOwotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBzc2l6ZV90 IGRlYnVnZnNfcmVnX2R1bXBfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkgICAgIGNoYXIg X191c2VyICpidWZmLAotCQkJCSAgICAgc2l6ZV90IGNvdW50LAotCQkJCSAgICAgbG9mZl90ICpw cG9zKQotewotCXN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwgPSBmaWxlLT5wcml2YXRlX2RhdGE7 Ci0JY2hhciAqYnVmOwotCXUzMiBsZW4gPSAwOwotCXN0cnVjdCBkc2lfY2xrX2N0cmxfaW5mbyBj bGtfaW5mbzsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkc2lfY3RybCkKLQkJcmV0dXJuIC1FTk9E RVY7Ci0KLQlpZiAoKnBwb3MpCi0JCXJldHVybiAwOwotCi0JYnVmID0ga3phbGxvYyhTWl80Sywg R0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JY2xrX2luZm8u Y2xpZW50ID0gRFNJX0NMS19SRVFfRFNJX0NMSUVOVDsKLQljbGtfaW5mby5jbGtfdHlwZSA9IERT SV9DT1JFX0NMSzsKLQljbGtfaW5mby5jbGtfc3RhdGUgPSBEU0lfQ0xLX09OOwotCi0JcmMgPSBk c2lfY3RybC0+Y2xrX2NiLmRzaV9jbGtfY2IoZHNpX2N0cmwtPmNsa19jYi5wcml2LCBjbGtfaW5m byk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSBEU0kgY29yZSBjbG9j a3NcbiIpOwotCQlrZnJlZShidWYpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JaWYgKGRzaV9jdHJs LT5ody5vcHMucmVnX2R1bXBfdG9fYnVmZmVyKQotCQlsZW4gPSBkc2lfY3RybC0+aHcub3BzLnJl Z19kdW1wX3RvX2J1ZmZlcigmZHNpX2N0cmwtPmh3LAotCQkJCWJ1ZiwgU1pfNEspOwotCi0JY2xr X2luZm8uY2xrX3N0YXRlID0gRFNJX0NMS19PRkY7Ci0JcmMgPSBkc2lfY3RybC0+Y2xrX2NiLmRz aV9jbGtfY2IoZHNpX2N0cmwtPmNsa19jYi5wcml2LCBjbGtfaW5mbyk7Ci0JaWYgKHJjKSB7Ci0J CXByX2VycigiZmFpbGVkIHRvIGRpc2FibGUgRFNJIGNvcmUgY2xvY2tzXG4iKTsKLQkJa2ZyZWUo YnVmKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCi0JLyogVE9ETzogbWFrZSBzdXJlIHRoYXQgdGhp cyBkb2VzIG5vdCBleGNlZWQgNEsgKi8KLQlpZiAoY29weV90b191c2VyKGJ1ZmYsIGJ1ZiwgbGVu KSkgewotCQlrZnJlZShidWYpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQkqcHBvcyArPSBs ZW47Ci0Ja2ZyZWUoYnVmKTsKLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0 IGZpbGVfb3BlcmF0aW9ucyBzdGF0ZV9pbmZvX2ZvcHMgPSB7Ci0JLm9wZW4gPSBzaW1wbGVfb3Bl biwKLQkucmVhZCA9IGRlYnVnZnNfc3RhdGVfaW5mb19yZWFkLAotfTsKLQotc3RhdGljIGNvbnN0 IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVnX2R1bXBfZm9wcyA9IHsKLQkub3BlbiA9IHNpbXBs ZV9vcGVuLAotCS5yZWFkID0gZGVidWdmc19yZWdfZHVtcF9yZWFkLAotfTsKLQotc3RhdGljIGlu dCBkc2lfY3RybF9kZWJ1Z2ZzX2luaXQoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJCQkg c3RydWN0IGRlbnRyeSAqcGFyZW50KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRlbnRyeSAq ZGlyLCAqc3RhdGVfZmlsZSwgKnJlZ19kdW1wOwotCWNoYXIgZGJnX25hbWVbRFNJX0RFQlVHX05B TUVfTEVOXTsKLQotCWRpciA9IGRlYnVnZnNfY3JlYXRlX2Rpcihkc2lfY3RybC0+bmFtZSwgcGFy ZW50KTsKLQlpZiAoSVNfRVJSX09SX05VTEwoZGlyKSkgewotCQlyYyA9IFBUUl9FUlIoZGlyKTsK LQkJcHJfZXJyKCJbRFNJXyVkXSBkZWJ1Z2ZzIGNyZWF0ZSBkaXIgZmFpbGVkLCByYz0lZFxuIiwK LQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQot Ci0Jc3RhdGVfZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInN0YXRlX2luZm8iLAotCQkJCQkg MDQ0NCwKLQkJCQkJIGRpciwKLQkJCQkJIGRzaV9jdHJsLAotCQkJCQkgJnN0YXRlX2luZm9fZm9w cyk7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKHN0YXRlX2ZpbGUpKSB7Ci0JCXJjID0gUFRSX0VSUihz dGF0ZV9maWxlKTsKLQkJcHJfZXJyKCJbRFNJXyVkXSBzdGF0ZSBmaWxlIGZhaWxlZCwgcmM9JWRc biIsCi0JCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwgcmMpOwotCQlnb3RvIGVycm9yX3Jl bW92ZV9kaXI7Ci0JfQotCi0JcmVnX2R1bXAgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWdfZHVt cCIsCi0JCQkJICAgICAgIDA0NDQsCi0JCQkJICAgICAgIGRpciwKLQkJCQkgICAgICAgZHNpX2N0 cmwsCi0JCQkJICAgICAgICZyZWdfZHVtcF9mb3BzKTsKLQlpZiAoSVNfRVJSX09SX05VTEwocmVn X2R1bXApKSB7Ci0JCXJjID0gUFRSX0VSUihyZWdfZHVtcCk7Ci0JCXByX2VycigiW0RTSV8lZF0g cmVnIGR1bXAgZmlsZSBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAgICAgZHNpX2N0cmwtPmNlbGxf aW5kZXgsIHJjKTsKLQkJZ290byBlcnJvcl9yZW1vdmVfZGlyOwotCX0KLQotCWRzaV9jdHJsLT5k ZWJ1Z2ZzX3Jvb3QgPSBkaXI7Ci0KLQlzbnByaW50ZihkYmdfbmFtZSwgRFNJX0RFQlVHX05BTUVf TEVOLCAiZHNpJWRfY3RybCIsCi0JCQkJCQlkc2lfY3RybC0+Y2VsbF9pbmRleCk7Ci0JZHB1X2Ri Z19yZWdfcmVnaXN0ZXJfYmFzZShkYmdfbmFtZSwgZHNpX2N0cmwtPmh3LmJhc2UsCi0JCQkJbXNt X2lvbWFwX3NpemUoZHNpX2N0cmwtPnBkZXYsICJkc2lfY3RybCIpKTsKLWVycm9yX3JlbW92ZV9k aXI6Ci0JZGVidWdmc19yZW1vdmUoZGlyKTsKLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3Rh dGljIGludCBkc2lfY3RybF9kZWJ1Z2ZzX2RlaW5pdChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJs KQotewotCWRlYnVnZnNfcmVtb3ZlKGRzaV9jdHJsLT5kZWJ1Z2ZzX3Jvb3QpOwotCXJldHVybiAw OwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UqCi1kc2lf Y3RybF9nZXRfYXNwYWNlKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCWludCBkb21haW4p Ci17Ci0JaWYgKCFkc2lfY3RybCB8fCAhZHNpX2N0cmwtPmRybV9kZXYpCi0JCXJldHVybiBOVUxM OwotCi0JcmV0dXJuIG1zbV9nZW1fc21tdV9hZGRyZXNzX3NwYWNlX2dldChkc2lfY3RybC0+ZHJt X2RldiwgZG9tYWluKTsKLX0KLQotc3RhdGljIGludCBkc2lfY3RybF9jaGVja19zdGF0ZShzdHJ1 Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJCWVudW0gZHNpX2N0cmxfZHJpdmVyX29wcyBvcCwK LQkJCQl1MzIgb3Bfc3RhdGUpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2N0cmxfc3Rh dGVfaW5mbyAqc3RhdGUgPSAmZHNpX2N0cmwtPmN1cnJlbnRfc3RhdGU7Ci0KLQlzd2l0Y2ggKG9w KSB7Ci0JY2FzZSBEU0lfQ1RSTF9PUF9QT1dFUl9TVEFURV9DSEFOR0U6Ci0JCWlmIChzdGF0ZS0+ cG93ZXJfc3RhdGUgPT0gb3Bfc3RhdGUpIHsKLQkJCXByX2RlYnVnKCJbJWRdIE5vIGNoYW5nZSBp biBzdGF0ZSwgcHdyX3N0YXRlPSVkXG4iLAotCQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4 LCBvcF9zdGF0ZSk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCX0gZWxzZSBpZiAoc3RhdGUtPnBvd2Vy X3N0YXRlID09IERTSV9DVFJMX1BPV0VSX1ZSRUdfT04pIHsKLQkJCWlmIChzdGF0ZS0+dmlkX2Vu Z2luZV9zdGF0ZSA9PSBEU0lfQ1RSTF9FTkdJTkVfT04pIHsKLQkJCQlwcl9kZWJ1ZygiWyVkXVN0 YXRlIGVycm9yOiBvcD0lZDogJWRcbiIsCi0JCQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4 LAotCQkJCSAgICAgICBvcF9zdGF0ZSwKLQkJCQkgICAgICAgc3RhdGUtPnZpZF9lbmdpbmVfc3Rh dGUpOwotCQkJCXJjID0gLUVJTlZBTDsKLQkJCX0KLQkJfQotCQlicmVhazsKLQljYXNlIERTSV9D VFJMX09QX0NNRF9FTkdJTkU6Ci0JCWlmIChzdGF0ZS0+Y21kX2VuZ2luZV9zdGF0ZSA9PSBvcF9z dGF0ZSkgewotCQkJcHJfZGVidWcoIlslZF0gTm8gY2hhbmdlIGluIHN0YXRlLCBjbWRfc3RhdGU9 JWRcbiIsCi0JCQkgICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIG9wX3N0YXRlKTsKLQkJCXJj ID0gLUVJTlZBTDsKLQkJfSBlbHNlIGlmICgoc3RhdGUtPnBvd2VyX3N0YXRlICE9IERTSV9DVFJM X1BPV0VSX1ZSRUdfT04pIHx8Ci0JCQkgICAoc3RhdGUtPmNvbnRyb2xsZXJfc3RhdGUgIT0gRFNJ X0NUUkxfRU5HSU5FX09OKSkgewotCQkJcHJfZGVidWcoIlslZF1TdGF0ZSBlcnJvcjogb3A9JWQ6 ICVkLCAlZFxuIiwKLQkJCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwKLQkJCSAgICAgICBv cCwKLQkJCSAgICAgICBzdGF0ZS0+cG93ZXJfc3RhdGUsCi0JCQkgICAgICAgc3RhdGUtPmNvbnRy b2xsZXJfc3RhdGUpOwotCQkJcmMgPSAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgRFNJ X0NUUkxfT1BfVklEX0VOR0lORToKLQkJaWYgKHN0YXRlLT52aWRfZW5naW5lX3N0YXRlID09IG9w X3N0YXRlKSB7Ci0JCQlwcl9kZWJ1ZygiWyVkXSBObyBjaGFuZ2UgaW4gc3RhdGUsIGNtZF9zdGF0 ZT0lZFxuIiwKLQkJCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwgb3Bfc3RhdGUpOwotCQkJ cmMgPSAtRUlOVkFMOwotCQl9IGVsc2UgaWYgKChzdGF0ZS0+cG93ZXJfc3RhdGUgIT0gRFNJX0NU UkxfUE9XRVJfVlJFR19PTikgfHwKLQkJCSAgIChzdGF0ZS0+Y29udHJvbGxlcl9zdGF0ZSAhPSBE U0lfQ1RSTF9FTkdJTkVfT04pKSB7Ci0JCQlwcl9kZWJ1ZygiWyVkXVN0YXRlIGVycm9yOiBvcD0l ZDogJWQsICVkXG4iLAotCQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LAotCQkJICAgICAg IG9wLAotCQkJICAgICAgIHN0YXRlLT5wb3dlcl9zdGF0ZSwKLQkJCSAgICAgICBzdGF0ZS0+Y29u dHJvbGxlcl9zdGF0ZSk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBE U0lfQ1RSTF9PUF9IT1NUX0VOR0lORToKLQkJaWYgKHN0YXRlLT5jb250cm9sbGVyX3N0YXRlID09 IG9wX3N0YXRlKSB7Ci0JCQlwcl9kZWJ1ZygiWyVkXSBObyBjaGFuZ2UgaW4gc3RhdGUsIGN0cmxf c3RhdGU9JWRcbiIsCi0JCQkgICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIG9wX3N0YXRlKTsK LQkJCXJjID0gLUVJTlZBTDsKLQkJfSBlbHNlIGlmIChzdGF0ZS0+cG93ZXJfc3RhdGUgIT0gRFNJ X0NUUkxfUE9XRVJfVlJFR19PTikgewotCQkJcHJfZGVidWcoIlslZF1TdGF0ZSBlcnJvciAobGlu ayBpcyBvZmYpOiBvcD0lZDosICVkXG4iLAotCQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4 LAotCQkJICAgICAgIG9wX3N0YXRlLAotCQkJICAgICAgIHN0YXRlLT5wb3dlcl9zdGF0ZSk7Ci0J CQlyYyA9IC1FSU5WQUw7Ci0JCX0gZWxzZSBpZiAoKG9wX3N0YXRlID09IERTSV9DVFJMX0VOR0lO RV9PRkYpICYmCi0JCQkgICAoKHN0YXRlLT5jbWRfZW5naW5lX3N0YXRlICE9IERTSV9DVFJMX0VO R0lORV9PRkYpIHx8Ci0JCQkgICAgKHN0YXRlLT52aWRfZW5naW5lX3N0YXRlICE9IERTSV9DVFJM X0VOR0lORV9PRkYpKSkgewotCQkJcHJfZGVidWcoIlslZF1TdGF0ZSBlcnJvciAoZW5nIG9uKTog b3A9JWQ6ICVkLCAlZFxuIiwKLQkJCQkgIGRzaV9jdHJsLT5jZWxsX2luZGV4LAotCQkJCSAgb3Bf c3RhdGUsCi0JCQkJICBzdGF0ZS0+Y21kX2VuZ2luZV9zdGF0ZSwKLQkJCQkgIHN0YXRlLT52aWRf ZW5naW5lX3N0YXRlKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQljYXNlIERT SV9DVFJMX09QX0NNRF9UWDoKLQkJaWYgKChzdGF0ZS0+cG93ZXJfc3RhdGUgIT0gRFNJX0NUUkxf UE9XRVJfVlJFR19PTikgfHwKLQkJICAgIChzdGF0ZS0+aG9zdF9pbml0aWFsaXplZCAhPSB0cnVl KSB8fAotCQkgICAgKHN0YXRlLT5jbWRfZW5naW5lX3N0YXRlICE9IERTSV9DVFJMX0VOR0lORV9P TikpIHsKLQkJCXByX2RlYnVnKCJbJWRdU3RhdGUgZXJyb3I6IG9wPSVkOiAlZCwgJWQsICVkXG4i LAotCQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LAotCQkJICAgICAgIG9wLAotCQkJICAg ICAgIHN0YXRlLT5wb3dlcl9zdGF0ZSwKLQkJCSAgICAgICBzdGF0ZS0+aG9zdF9pbml0aWFsaXpl ZCwKLQkJCSAgICAgICBzdGF0ZS0+Y21kX2VuZ2luZV9zdGF0ZSk7Ci0JCQlyYyA9IC1FSU5WQUw7 Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQ1RSTF9PUF9IT1NUX0lOSVQ6Ci0JCWlmIChzdGF0 ZS0+aG9zdF9pbml0aWFsaXplZCA9PSBvcF9zdGF0ZSkgewotCQkJcHJfZGVidWcoIlslZF0gTm8g Y2hhbmdlIGluIHN0YXRlLCBob3N0X2luaXQ9JWRcbiIsCi0JCQkgICAgICAgZHNpX2N0cmwtPmNl bGxfaW5kZXgsIG9wX3N0YXRlKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJfSBlbHNlIGlmIChzdGF0 ZS0+cG93ZXJfc3RhdGUgIT0gRFNJX0NUUkxfUE9XRVJfVlJFR19PTikgewotCQkJcHJfZGVidWco IlslZF1TdGF0ZSBlcnJvcjogb3A9JWQ6ICVkXG4iLAotCQkJICAgICAgIGRzaV9jdHJsLT5jZWxs X2luZGV4LCBvcCwgc3RhdGUtPnBvd2VyX3N0YXRlKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJfQot CQlicmVhazsKLQljYXNlIERTSV9DVFJMX09QX1RQRzoKLQkJaWYgKHN0YXRlLT50cGdfZW5hYmxl ZCA9PSBvcF9zdGF0ZSkgewotCQkJcHJfZGVidWcoIlslZF0gTm8gY2hhbmdlIGluIHN0YXRlLCB0 cGdfZW5hYmxlZD0lZFxuIiwKLQkJCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwgb3Bfc3Rh dGUpOwotCQkJcmMgPSAtRUlOVkFMOwotCQl9IGVsc2UgaWYgKChzdGF0ZS0+cG93ZXJfc3RhdGUg IT0gRFNJX0NUUkxfUE9XRVJfVlJFR19PTikgfHwKLQkJCSAgIChzdGF0ZS0+Y29udHJvbGxlcl9z dGF0ZSAhPSBEU0lfQ1RSTF9FTkdJTkVfT04pKSB7Ci0JCQlwcl9kZWJ1ZygiWyVkXVN0YXRlIGVy cm9yOiBvcD0lZDogJWQsICVkXG4iLAotCQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LAot CQkJICAgICAgIG9wLAotCQkJICAgICAgIHN0YXRlLT5wb3dlcl9zdGF0ZSwKLQkJCSAgICAgICBz dGF0ZS0+Y29udHJvbGxlcl9zdGF0ZSk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7 Ci0JY2FzZSBEU0lfQ1RSTF9PUF9QSFlfU1dfUkVTRVQ6Ci0JCWlmIChzdGF0ZS0+cG93ZXJfc3Rh dGUgIT0gRFNJX0NUUkxfUE9XRVJfVlJFR19PTikgewotCQkJcHJfZGVidWcoIlslZF1TdGF0ZSBl cnJvcjogb3A9JWQ6ICVkXG4iLAotCQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCBvcCwg c3RhdGUtPnBvd2VyX3N0YXRlKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQlj YXNlIERTSV9DVFJMX09QX0FTWU5DX1RJTUlORzoKLQkJaWYgKHN0YXRlLT52aWRfZW5naW5lX3N0 YXRlICE9IG9wX3N0YXRlKSB7Ci0JCQlwcl9lcnIoIlslZF0gVW5leHBlY3RlZCBlbmdpbmUgc3Rh dGUgdmlkX3N0YXRlPSVkXG4iLAotCQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCBvcF9z dGF0ZSk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmMg PSAtRU5PVFNVUFA7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZv aWQgZHNpX2N0cmxfdXBkYXRlX3N0YXRlKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCQkJ ICBlbnVtIGRzaV9jdHJsX2RyaXZlcl9vcHMgb3AsCi0JCQkJICB1MzIgb3Bfc3RhdGUpCi17Ci0J c3RydWN0IGRzaV9jdHJsX3N0YXRlX2luZm8gKnN0YXRlID0gJmRzaV9jdHJsLT5jdXJyZW50X3N0 YXRlOwotCi0Jc3dpdGNoIChvcCkgewotCWNhc2UgRFNJX0NUUkxfT1BfUE9XRVJfU1RBVEVfQ0hB TkdFOgotCQlzdGF0ZS0+cG93ZXJfc3RhdGUgPSBvcF9zdGF0ZTsKLQkJYnJlYWs7Ci0JY2FzZSBE U0lfQ1RSTF9PUF9DTURfRU5HSU5FOgotCQlzdGF0ZS0+Y21kX2VuZ2luZV9zdGF0ZSA9IG9wX3N0 YXRlOwotCQlicmVhazsKLQljYXNlIERTSV9DVFJMX09QX1ZJRF9FTkdJTkU6Ci0JCXN0YXRlLT52 aWRfZW5naW5lX3N0YXRlID0gb3Bfc3RhdGU7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX0NUUkxfT1Bf SE9TVF9FTkdJTkU6Ci0JCXN0YXRlLT5jb250cm9sbGVyX3N0YXRlID0gb3Bfc3RhdGU7Ci0JCWJy ZWFrOwotCWNhc2UgRFNJX0NUUkxfT1BfSE9TVF9JTklUOgotCQlzdGF0ZS0+aG9zdF9pbml0aWFs aXplZCA9IChvcF9zdGF0ZSA9PSAxKSA/IHRydWUgOiBmYWxzZTsKLQkJYnJlYWs7Ci0JY2FzZSBE U0lfQ1RSTF9PUF9UUEc6Ci0JCXN0YXRlLT50cGdfZW5hYmxlZCA9IChvcF9zdGF0ZSA9PSAxKSA/ IHRydWUgOiBmYWxzZTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQ1RSTF9PUF9DTURfVFg6Ci0JY2Fz ZSBEU0lfQ1RSTF9PUF9QSFlfU1dfUkVTRVQ6Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotfQot Ci1zdGF0aWMgaW50IGRzaV9jdHJsX2luaXRfcmVnbWFwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYsCi0JCQkJc3RydWN0IGRzaV9jdHJsICpjdHJsKQotewotCWludCByYyA9IDA7Ci0Jdm9p ZCBfX2lvbWVtICpwdHI7Ci0KLQlwdHIgPSBtc21faW9yZW1hcChwZGV2LCAiZHNpX2N0cmwiLCBj dHJsLT5uYW1lKTsKLQlpZiAoSVNfRVJSKHB0cikpIHsKLQkJcmMgPSBQVFJfRVJSKHB0cik7Ci0J CXJldHVybiByYzsKLQl9Ci0KLQljdHJsLT5ody5iYXNlID0gcHRyOwotCXByX2RlYnVnKCJbJXNd IG1hcCBkc2lfY3RybCByZWdpc3RlcnMgdG8gJXBcbiIsIGN0cmwtPm5hbWUsCi0JCSBjdHJsLT5o dy5iYXNlKTsKLQotCXN3aXRjaCAoY3RybC0+dmVyc2lvbikgewotCWNhc2UgRFNJX0NUUkxfVkVS U0lPTl8xXzQ6Ci0JY2FzZSBEU0lfQ1RSTF9WRVJTSU9OXzJfMDoKLQkJcHRyID0gbXNtX2lvcmVt YXAocGRldiwgIm1tc3NfbWlzYyIsIGN0cmwtPm5hbWUpOwotCQlpZiAoSVNfRVJSKHB0cikpIHsK LQkJCXByX2VycigibW1zc19taXNjIGJhc2UgYWRkcmVzcyBub3QgZm91bmQgZm9yIFslc11cbiIs Ci0JCQkJCWN0cmwtPm5hbWUpOwotCQkJcmMgPSBQVFJfRVJSKHB0cik7Ci0JCQlyZXR1cm4gcmM7 Ci0JCX0KLQkJY3RybC0+aHcubW1zc19taXNjX2Jhc2UgPSBwdHI7Ci0JCWN0cmwtPmh3LmRpc3Bf Y2NfYmFzZSA9IE5VTEw7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX0NUUkxfVkVSU0lPTl8yXzI6Ci0J CXB0ciA9IG1zbV9pb3JlbWFwKHBkZXYsICJkaXNwX2NjX2Jhc2UiLCBjdHJsLT5uYW1lKTsKLQkJ aWYgKElTX0VSUihwdHIpKSB7Ci0JCQlwcl9lcnIoImRpc3BfY2MgYmFzZSBhZGRyZXNzIG5vdCBm b3VuZCBmb3IgWyVzXVxuIiwKLQkJCQkJY3RybC0+bmFtZSk7Ci0JCQlyYyA9IFBUUl9FUlIocHRy KTsKLQkJCXJldHVybiByYzsKLQkJfQotCQljdHJsLT5ody5kaXNwX2NjX2Jhc2UgPSBwdHI7Ci0J CWN0cmwtPmh3Lm1tc3NfbWlzY19iYXNlID0gTlVMTDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJ YnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9jdHJsX2Nsb2Nr c19kZWluaXQoc3RydWN0IGRzaV9jdHJsICpjdHJsKQotewotCXN0cnVjdCBkc2lfY29yZV9jbGtf aW5mbyAqY29yZSA9ICZjdHJsLT5jbGtfaW5mby5jb3JlX2Nsa3M7Ci0Jc3RydWN0IGRzaV9saW5r X2Nsa19pbmZvICpsaW5rID0gJmN0cmwtPmNsa19pbmZvLmxpbmtfY2xrczsKLQlzdHJ1Y3QgZHNp X2Nsa19saW5rX3NldCAqcmNnID0gJmN0cmwtPmNsa19pbmZvLnJjZ19jbGtzOwotCi0JaWYgKGNv cmUtPm1kcF9jb3JlX2NsaykKLQkJZGV2bV9jbGtfcHV0KCZjdHJsLT5wZGV2LT5kZXYsIGNvcmUt Pm1kcF9jb3JlX2Nsayk7Ci0JaWYgKGNvcmUtPmlmYWNlX2NsaykKLQkJZGV2bV9jbGtfcHV0KCZj dHJsLT5wZGV2LT5kZXYsIGNvcmUtPmlmYWNlX2Nsayk7Ci0JaWYgKGNvcmUtPmNvcmVfbW1zc19j bGspCi0JCWRldm1fY2xrX3B1dCgmY3RybC0+cGRldi0+ZGV2LCBjb3JlLT5jb3JlX21tc3NfY2xr KTsKLQlpZiAoY29yZS0+YnVzX2NsaykKLQkJZGV2bV9jbGtfcHV0KCZjdHJsLT5wZGV2LT5kZXYs IGNvcmUtPmJ1c19jbGspOwotCWlmIChjb3JlLT5tbm9jX2NsaykKLQkJZGV2bV9jbGtfcHV0KCZj dHJsLT5wZGV2LT5kZXYsIGNvcmUtPm1ub2NfY2xrKTsKLQotCW1lbXNldChjb3JlLCAweDAsIHNp emVvZigqY29yZSkpOwotCi0JaWYgKGxpbmstPmJ5dGVfY2xrKQotCQlkZXZtX2Nsa19wdXQoJmN0 cmwtPnBkZXYtPmRldiwgbGluay0+Ynl0ZV9jbGspOwotCWlmIChsaW5rLT5waXhlbF9jbGspCi0J CWRldm1fY2xrX3B1dCgmY3RybC0+cGRldi0+ZGV2LCBsaW5rLT5waXhlbF9jbGspOwotCWlmIChs aW5rLT5lc2NfY2xrKQotCQlkZXZtX2Nsa19wdXQoJmN0cmwtPnBkZXYtPmRldiwgbGluay0+ZXNj X2Nsayk7Ci0JaWYgKGxpbmstPmJ5dGVfaW50Zl9jbGspCi0JCWRldm1fY2xrX3B1dCgmY3RybC0+ cGRldi0+ZGV2LCBsaW5rLT5ieXRlX2ludGZfY2xrKTsKLQotCW1lbXNldChsaW5rLCAweDAsIHNp emVvZigqbGluaykpOwotCi0JaWYgKHJjZy0+Ynl0ZV9jbGspCi0JCWRldm1fY2xrX3B1dCgmY3Ry bC0+cGRldi0+ZGV2LCByY2ctPmJ5dGVfY2xrKTsKLQlpZiAocmNnLT5waXhlbF9jbGspCi0JCWRl dm1fY2xrX3B1dCgmY3RybC0+cGRldi0+ZGV2LCByY2ctPnBpeGVsX2Nsayk7Ci0KLQltZW1zZXQo cmNnLCAweDAsIHNpemVvZigqcmNnKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBk c2lfY3RybF9jbG9ja3NfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCXN0 cnVjdCBkc2lfY3RybCAqY3RybCkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfY29yZV9j bGtfaW5mbyAqY29yZSA9ICZjdHJsLT5jbGtfaW5mby5jb3JlX2Nsa3M7Ci0Jc3RydWN0IGRzaV9s aW5rX2Nsa19pbmZvICpsaW5rID0gJmN0cmwtPmNsa19pbmZvLmxpbmtfY2xrczsKLQlzdHJ1Y3Qg ZHNpX2Nsa19saW5rX3NldCAqcmNnID0gJmN0cmwtPmNsa19pbmZvLnJjZ19jbGtzOwotCi0JY29y ZS0+bWRwX2NvcmVfY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJtZHBfY29yZV9jbGsi KTsKLQlpZiAoSVNfRVJSKGNvcmUtPm1kcF9jb3JlX2NsaykpIHsKLQkJY29yZS0+bWRwX2NvcmVf Y2xrID0gTlVMTDsKLQkJcHJfZGVidWcoImZhaWxlZCB0byBnZXQgbWRwX2NvcmVfY2xrLCByYz0l ZFxuIiwgcmMpOwotCX0KLQotCWNvcmUtPmlmYWNlX2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ ZGV2LCAiaWZhY2VfY2xrIik7Ci0JaWYgKElTX0VSUihjb3JlLT5pZmFjZV9jbGspKSB7Ci0JCWNv cmUtPmlmYWNlX2NsayA9IE5VTEw7Ci0JCXByX2RlYnVnKCJmYWlsZWQgdG8gZ2V0IGlmYWNlX2Ns aywgcmM9JWRcbiIsIHJjKTsKLQl9Ci0KLQljb3JlLT5jb3JlX21tc3NfY2xrID0gZGV2bV9jbGtf Z2V0KCZwZGV2LT5kZXYsICJjb3JlX21tc3NfY2xrIik7Ci0JaWYgKElTX0VSUihjb3JlLT5jb3Jl X21tc3NfY2xrKSkgewotCQljb3JlLT5jb3JlX21tc3NfY2xrID0gTlVMTDsKLQkJcHJfZGVidWco ImZhaWxlZCB0byBnZXQgY29yZV9tbXNzX2NsaywgcmM9JWRcbiIsIHJjKTsKLQl9Ci0KLQljb3Jl LT5idXNfY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJidXNfY2xrIik7Ci0JaWYgKElT X0VSUihjb3JlLT5idXNfY2xrKSkgewotCQljb3JlLT5idXNfY2xrID0gTlVMTDsKLQkJcHJfZGVi dWcoImZhaWxlZCB0byBnZXQgYnVzX2NsaywgcmM9JWRcbiIsIHJjKTsKLQl9Ci0KLQljb3JlLT5t bm9jX2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAibW5vY19jbGsiKTsKLQlpZiAoSVNf RVJSKGNvcmUtPm1ub2NfY2xrKSkgewotCQljb3JlLT5tbm9jX2NsayA9IE5VTEw7Ci0JCXByX2Rl YnVnKCJjYW4ndCBnZXQgbW5vYyBjbG9jaywgcmM9JWRcbiIsIHJjKTsKLQl9Ci0KLQlsaW5rLT5i eXRlX2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAiYnl0ZV9jbGsiKTsKLQlpZiAoSVNf RVJSKGxpbmstPmJ5dGVfY2xrKSkgewotCQlyYyA9IFBUUl9FUlIobGluay0+Ynl0ZV9jbGspOwot CQlwcl9lcnIoImZhaWxlZCB0byBnZXQgYnl0ZV9jbGssIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8g ZmFpbDsKLQl9Ci0KLQlsaW5rLT5waXhlbF9jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwg InBpeGVsX2NsayIpOwotCWlmIChJU19FUlIobGluay0+cGl4ZWxfY2xrKSkgewotCQlyYyA9IFBU Ul9FUlIobGluay0+cGl4ZWxfY2xrKTsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IHBpeGVsX2Ns aywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBmYWlsOwotCX0KLQotCWxpbmstPmVzY19jbGsgPSBk ZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgImVzY19jbGsiKTsKLQlpZiAoSVNfRVJSKGxpbmstPmVz Y19jbGspKSB7Ci0JCXJjID0gUFRSX0VSUihsaW5rLT5lc2NfY2xrKTsKLQkJcHJfZXJyKCJmYWls ZWQgdG8gZ2V0IGVzY19jbGssIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQls aW5rLT5ieXRlX2ludGZfY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJieXRlX2ludGZf Y2xrIik7Ci0JaWYgKElTX0VSUihsaW5rLT5ieXRlX2ludGZfY2xrKSkgewotCQlsaW5rLT5ieXRl X2ludGZfY2xrID0gTlVMTDsKLQkJcHJfZGVidWcoImNhbid0IGZpbmQgYnl0ZSBpbnRmIGNsaywg cmM9JWRcbiIsIHJjKTsKLQl9Ci0KLQlyY2ctPmJ5dGVfY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2 LT5kZXYsICJieXRlX2Nsa19yY2ciKTsKLQlpZiAoSVNfRVJSKHJjZy0+Ynl0ZV9jbGspKSB7Ci0J CXJjID0gUFRSX0VSUihyY2ctPmJ5dGVfY2xrKTsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IGJ5 dGVfY2xrX3JjZywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBmYWlsOwotCX0KLQotCXJjZy0+cGl4 ZWxfY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJwaXhlbF9jbGtfcmNnIik7Ci0JaWYg KElTX0VSUihyY2ctPnBpeGVsX2NsaykpIHsKLQkJcmMgPSBQVFJfRVJSKHJjZy0+cGl4ZWxfY2xr KTsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IHBpeGVsX2Nsa19yY2csIHJjPSVkXG4iLCByYyk7 Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQlyZXR1cm4gMDsKLWZhaWw6Ci0JZHNpX2N0cmxfY2xvY2tz X2RlaW5pdChjdHJsKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2N0cmxfc3Vw cGxpZXNfZGVpbml0KHN0cnVjdCBkc2lfY3RybCAqY3RybCkKLXsKLQlpbnQgaSA9IDA7Ci0JaW50 IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvICpyZWdzOwotCi0JcmVncyA9ICZj dHJsLT5wd3JfaW5mby5kaWdpdGFsOwotCWZvciAoaSA9IDA7IGkgPCByZWdzLT5jb3VudDsgaSsr KSB7Ci0JCWlmICghcmVncy0+dnJlZ3NbaV0udnJlZykKLQkJCXByX2VycigidnJlZyBpcyBOVUxM LCBzaG91bGQgbm90IHJlYWNoIGhlcmVcbiIpOwotCQllbHNlCi0JCQlkZXZtX3JlZ3VsYXRvcl9w dXQocmVncy0+dnJlZ3NbaV0udnJlZyk7Ci0JfQotCi0JcmVncyA9ICZjdHJsLT5wd3JfaW5mby5o b3N0X3B3cjsKLQlmb3IgKGkgPSAwOyBpIDwgcmVncy0+Y291bnQ7IGkrKykgewotCQlpZiAoIXJl Z3MtPnZyZWdzW2ldLnZyZWcpCi0JCQlwcl9lcnIoInZyZWcgaXMgTlVMTCwgc2hvdWxkIG5vdCBy ZWFjaCBoZXJlXG4iKTsKLQkJZWxzZQotCQkJZGV2bV9yZWd1bGF0b3JfcHV0KHJlZ3MtPnZyZWdz W2ldLnZyZWcpOwotCX0KLQotCWlmICghY3RybC0+cHdyX2luZm8uaG9zdF9wd3IudnJlZ3MpIHsK LQkJZGV2bV9rZnJlZSgmY3RybC0+cGRldi0+ZGV2LCBjdHJsLT5wd3JfaW5mby5ob3N0X3B3ci52 cmVncyk7Ci0JCWN0cmwtPnB3cl9pbmZvLmhvc3RfcHdyLnZyZWdzID0gTlVMTDsKLQkJY3RybC0+ cHdyX2luZm8uaG9zdF9wd3IuY291bnQgPSAwOwotCX0KLQotCWlmICghY3RybC0+cHdyX2luZm8u ZGlnaXRhbC52cmVncykgewotCQlkZXZtX2tmcmVlKCZjdHJsLT5wZGV2LT5kZXYsIGN0cmwtPnB3 cl9pbmZvLmRpZ2l0YWwudnJlZ3MpOwotCQljdHJsLT5wd3JfaW5mby5kaWdpdGFsLnZyZWdzID0g TlVMTDsKLQkJY3RybC0+cHdyX2luZm8uZGlnaXRhbC5jb3VudCA9IDA7Ci0JfQotCi0JcmV0dXJu IHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9jdHJsX3N1cHBsaWVzX2luaXQoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldiwKLQkJCQkgIHN0cnVjdCBkc2lfY3RybCAqY3RybCkKLXsKLQlpbnQg cmMgPSAwOwotCWludCBpID0gMDsKLQlzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvICpyZWdzOwot CXN0cnVjdCByZWd1bGF0b3IgKnZyZWcgPSBOVUxMOwotCi0JcmMgPSBkc2lfcHdyX2dldF9kdF92 cmVnX2RhdGEoJnBkZXYtPmRldiwKLQkJCQkJICAmY3RybC0+cHdyX2luZm8uZGlnaXRhbCwKLQkJ CQkJICAicWNvbSxjb3JlLXN1cHBseS1lbnRyaWVzIik7Ci0JaWYgKHJjKQotCQlwcl9kZWJ1Zygi ZmFpbGVkIHRvIGdldCBkaWdpdGFsIHN1cHBseSwgcmMgPSAlZFxuIiwgcmMpOwotCi0JcmMgPSBk c2lfcHdyX2dldF9kdF92cmVnX2RhdGEoJnBkZXYtPmRldiwKLQkJCQkJICAmY3RybC0+cHdyX2lu Zm8uaG9zdF9wd3IsCi0JCQkJCSAgInFjb20sY3RybC1zdXBwbHktZW50cmllcyIpOwotCWlmIChy YykgewotCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgaG9zdCBwb3dlciBzdXBwbGllcywgcmMgPSAl ZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yX2RpZ2l0YWw7Ci0JfQotCi0JcmVncyA9ICZjdHJsLT5w d3JfaW5mby5kaWdpdGFsOwotCWZvciAoaSA9IDA7IGkgPCByZWdzLT5jb3VudDsgaSsrKSB7Ci0J CXZyZWcgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoJnBkZXYtPmRldiwgcmVncy0+dnJlZ3NbaV0udnJl Z19uYW1lKTsKLQkJaWYgKElTX0VSUih2cmVnKSkgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0 ICVzIHJlZ3VsYXRvclxuIiwKLQkJCSAgICAgICByZWdzLT52cmVnc1tpXS52cmVnX25hbWUpOwot CQkJcmMgPSBQVFJfRVJSKHZyZWcpOwotCQkJZ290byBlcnJvcl9ob3N0X3B3cjsKLQkJfQotCQly ZWdzLT52cmVnc1tpXS52cmVnID0gdnJlZzsKLQl9Ci0KLQlyZWdzID0gJmN0cmwtPnB3cl9pbmZv Lmhvc3RfcHdyOwotCWZvciAoaSA9IDA7IGkgPCByZWdzLT5jb3VudDsgaSsrKSB7Ci0JCXZyZWcg PSBkZXZtX3JlZ3VsYXRvcl9nZXQoJnBkZXYtPmRldiwgcmVncy0+dnJlZ3NbaV0udnJlZ19uYW1l KTsKLQkJaWYgKElTX0VSUih2cmVnKSkgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0ICVzIHJl Z3VsYXRvclxuIiwKLQkJCSAgICAgICByZWdzLT52cmVnc1tpXS52cmVnX25hbWUpOwotCQkJZm9y ICgtLWk7IGkgPj0gMDsgaS0tKQotCQkJCWRldm1fcmVndWxhdG9yX3B1dChyZWdzLT52cmVnc1tp XS52cmVnKTsKLQkJCXJjID0gUFRSX0VSUih2cmVnKTsKLQkJCWdvdG8gZXJyb3JfZGlnaXRhbF9w dXQ7Ci0JCX0KLQkJcmVncy0+dnJlZ3NbaV0udnJlZyA9IHZyZWc7Ci0JfQotCi0JcmV0dXJuIHJj OwotCi1lcnJvcl9kaWdpdGFsX3B1dDoKLQlyZWdzID0gJmN0cmwtPnB3cl9pbmZvLmRpZ2l0YWw7 Ci0JZm9yIChpID0gMDsgaSA8IHJlZ3MtPmNvdW50OyBpKyspCi0JCWRldm1fcmVndWxhdG9yX3B1 dChyZWdzLT52cmVnc1tpXS52cmVnKTsKLWVycm9yX2hvc3RfcHdyOgotCWRldm1fa2ZyZWUoJnBk ZXYtPmRldiwgY3RybC0+cHdyX2luZm8uaG9zdF9wd3IudnJlZ3MpOwotCWN0cmwtPnB3cl9pbmZv Lmhvc3RfcHdyLnZyZWdzID0gTlVMTDsKLQljdHJsLT5wd3JfaW5mby5ob3N0X3B3ci5jb3VudCA9 IDA7Ci1lcnJvcl9kaWdpdGFsOgotCWlmIChjdHJsLT5wd3JfaW5mby5kaWdpdGFsLnZyZWdzKQot CQlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIGN0cmwtPnB3cl9pbmZvLmRpZ2l0YWwudnJlZ3MpOwot CWN0cmwtPnB3cl9pbmZvLmRpZ2l0YWwudnJlZ3MgPSBOVUxMOwotCWN0cmwtPnB3cl9pbmZvLmRp Z2l0YWwuY291bnQgPSAwOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfY3RybF9h eGlfYnVzX2NsaWVudF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkJCXN0 cnVjdCBkc2lfY3RybCAqY3RybCkKLXsKLQlpbnQgcmMgPSAwOwotI2lmZGVmIENPTkZJR19DSFJP TUVfQlVTX1NDQUxFCi0Jc3RydWN0IGRzaV9jdHJsX2J1c19zY2FsZV9pbmZvICpidXMgPSAmY3Ry bC0+YXhpX2J1c19pbmZvOwotCi0JYnVzLT5idXNfc2NhbGVfdGFibGUgPSBtc21fYnVzX2NsX2dl dF9wZGF0YShwZGV2KTsKLQlpZiAoSVNfRVJSX09SX05VTEwoYnVzLT5idXNfc2NhbGVfdGFibGUp KSB7Ci0JCXJjID0gUFRSX0VSUihidXMtPmJ1c19zY2FsZV90YWJsZSk7Ci0JCXByX2RlYnVnKCJt c21fYnVzX2NsX2dldF9wZGF0YSgpIGZhaWxlZCwgcmMgPSAlZFxuIiwgcmMpOwotCQlidXMtPmJ1 c19zY2FsZV90YWJsZSA9IE5VTEw7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlidXMtPmJ1c19oYW5k bGUgPSBtc21fYnVzX3NjYWxlX3JlZ2lzdGVyX2NsaWVudChidXMtPmJ1c19zY2FsZV90YWJsZSk7 Ci0JaWYgKCFidXMtPmJ1c19oYW5kbGUpIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlwcl9lcnIoImZh aWxlZCB0byByZWdpc3RlciBheGkgYnVzIGNsaWVudFxuIik7Ci0JfQotI2VuZGlmCi0JcmV0dXJu IHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9jdHJsX2F4aV9idXNfY2xpZW50X2RlaW5pdChzdHJ1 Y3QgZHNpX2N0cmwgKmN0cmwpCi17Ci0jaWZkZWYgQ09ORklHX0NIUk9NRV9CVVNfU0NBTEUKLQlz dHJ1Y3QgZHNpX2N0cmxfYnVzX3NjYWxlX2luZm8gKmJ1cyA9ICZjdHJsLT5heGlfYnVzX2luZm87 Ci0KLQlpZiAoYnVzLT5idXNfaGFuZGxlKSB7Ci0JCW1zbV9idXNfc2NhbGVfdW5yZWdpc3Rlcl9j bGllbnQoYnVzLT5idXNfaGFuZGxlKTsKLQotCQlidXMtPmJ1c19oYW5kbGUgPSAwOwotCX0KLSNl bmRpZgotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzaV9jdHJsX3ZhbGlkYXRlX3BhbmVs X2luZm8oc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJCQkJc3RydWN0IGRzaV9ob3N0X2Nv bmZpZyAqY29uZmlnKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9ob3N0X2NvbW1vbl9j ZmcgKmhvc3RfY2ZnID0gJmNvbmZpZy0+Y29tbW9uX2NvbmZpZzsKLQotCWlmIChjb25maWctPnBh bmVsX21vZGUgPj0gRFNJX09QX01PREVfTUFYKSB7Ci0JCXByX2VycigiSW52YWxpZCBkc2kgb3Bl cmF0aW9uIG1vZGUgKCVkKVxuIiwgY29uZmlnLT5wYW5lbF9tb2RlKTsKLQkJcmMgPSAtRUlOVkFM OwotCQlnb3RvIGVycjsKLQl9Ci0KLQlpZiAoKGhvc3RfY2ZnLT5kYXRhX2xhbmVzICYgKERTSV9D TE9DS19MQU5FIC0gMSkpID09IDApIHsKLQkJcHJfZXJyKCJObyBkYXRhIGxhbmVzIGFyZSBlbmFi bGVkXG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycjsKLQl9Ci1lcnI6Ci0JcmV0dXJu IHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9jdHJsX3VwZGF0ZV9saW5rX2ZyZXFzKHN0cnVjdCBk c2lfY3RybCAqZHNpX2N0cmwsCi0Jc3RydWN0IGRzaV9ob3N0X2NvbmZpZyAqY29uZmlnLCB2b2lk ICpjbGtfaGFuZGxlKQotewotCWludCByYyA9IDA7Ci0JdTMyIG51bV9vZl9sYW5lcyA9IDA7Ci0J dTMyIGJwcCA9IDM7Ci0JdTY0IGhfcGVyaW9kLCB2X3BlcmlvZCwgYml0X3JhdGUsIHBjbGtfcmF0 ZSwgYml0X3JhdGVfcGVyX2xhbmUsCi0JICAgIGJ5dGVfY2xrX3JhdGU7Ci0Jc3RydWN0IGRzaV9o b3N0X2NvbW1vbl9jZmcgKmhvc3RfY2ZnID0gJmNvbmZpZy0+Y29tbW9uX2NvbmZpZzsKLQlzdHJ1 Y3QgZHNpX21vZGVfaW5mbyAqdGltaW5nID0gJmNvbmZpZy0+dmlkZW9fdGltaW5nOwotCi0JaWYg KGhvc3RfY2ZnLT5kYXRhX2xhbmVzICYgRFNJX0RBVEFfTEFORV8wKQotCQludW1fb2ZfbGFuZXMr KzsKLQlpZiAoaG9zdF9jZmctPmRhdGFfbGFuZXMgJiBEU0lfREFUQV9MQU5FXzEpCi0JCW51bV9v Zl9sYW5lcysrOwotCWlmIChob3N0X2NmZy0+ZGF0YV9sYW5lcyAmIERTSV9EQVRBX0xBTkVfMikK LQkJbnVtX29mX2xhbmVzKys7Ci0JaWYgKGhvc3RfY2ZnLT5kYXRhX2xhbmVzICYgRFNJX0RBVEFf TEFORV8zKQotCQludW1fb2ZfbGFuZXMrKzsKLQotCWhfcGVyaW9kID0gRFNJX0hfVE9UQUxfRFND KHRpbWluZyk7Ci0Jdl9wZXJpb2QgPSBEU0lfVl9UT1RBTCh0aW1pbmcpOwotCi0JYml0X3JhdGUg PSBoX3BlcmlvZCAqIHZfcGVyaW9kICogdGltaW5nLT5yZWZyZXNoX3JhdGUgKiBicHAgKiA4Owot CWJpdF9yYXRlX3Blcl9sYW5lID0gYml0X3JhdGU7Ci0JZG9fZGl2KGJpdF9yYXRlX3Blcl9sYW5l LCBudW1fb2ZfbGFuZXMpOwotCXBjbGtfcmF0ZSA9IGJpdF9yYXRlOwotCWRvX2RpdihwY2xrX3Jh dGUsICg4ICogYnBwKSk7Ci0JYnl0ZV9jbGtfcmF0ZSA9IGJpdF9yYXRlX3Blcl9sYW5lOwotCWRv X2RpdihieXRlX2Nsa19yYXRlLCA4KTsKLQlwcl9kZWJ1ZygiYml0X2Nsa19yYXRlID0gJWxsdSwg Yml0X2Nsa19yYXRlX3Blcl9sYW5lID0gJWxsdVxuIiwKLQkJIGJpdF9yYXRlLCBiaXRfcmF0ZV9w ZXJfbGFuZSk7Ci0JcHJfZGVidWcoImJ5dGVfY2xrX3JhdGUgPSAlbGx1LCBwY2xrX3JhdGUgPSAl bGx1XG4iLAotCQkgIGJ5dGVfY2xrX3JhdGUsIHBjbGtfcmF0ZSk7Ci0KLQlkc2lfY3RybC0+Y2xr X2ZyZXEuYnl0ZV9jbGtfcmF0ZSA9IGJ5dGVfY2xrX3JhdGU7Ci0JZHNpX2N0cmwtPmNsa19mcmVx LnBpeF9jbGtfcmF0ZSA9IHBjbGtfcmF0ZTsKLQlkc2lfY3RybC0+Y2xrX2ZyZXEuZXNjX2Nsa19y YXRlID0gY29uZmlnLT5lc2NfY2xrX3JhdGVfaHo7Ci0KLQlyYyA9IGRzaV9jbGtfc2V0X2xpbmtf ZnJlcXVlbmNpZXMoY2xrX2hhbmRsZSwgZHNpX2N0cmwtPmNsa19mcmVxLAotCQkJCQlkc2lfY3Ry bC0+Y2VsbF9pbmRleCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIkZhaWxlZCB0byB1cGRhdGUgbGlu ayBmcmVxdWVuY2llc1xuIik7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2N0 cmxfZW5hYmxlX3N1cHBsaWVzKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsIGJvb2wgZW5hYmxl KQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoZW5hYmxlKSB7Ci0JCWlmICghZHNpX2N0cmwtPmN1 cnJlbnRfc3RhdGUuaG9zdF9pbml0aWFsaXplZCkgewotCQkJcmMgPSBkc2lfcHdyX2VuYWJsZV9y ZWd1bGF0b3IoCi0JCQkJJmRzaV9jdHJsLT5wd3JfaW5mby5ob3N0X3B3ciwgdHJ1ZSk7Ci0JCQlp ZiAocmMpIHsKLQkJCQlwcl9lcnIoImZhaWxlZCB0byBlbmFibGUgaG9zdCBwb3dlciByZWdzXG4i KTsKLQkJCQlnb3RvIGVycm9yOwotCQkJfQotCQl9Ci0KLQkJcmMgPSBkc2lfcHdyX2VuYWJsZV9y ZWd1bGF0b3IoJmRzaV9jdHJsLT5wd3JfaW5mby5kaWdpdGFsLAotCQkJCQkgICAgICB0cnVlKTsK LQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBlbmFibGUgZ2RzYywgcmM9JWRcbiIs IHJjKTsKLQkJCSh2b2lkKWRzaV9wd3JfZW5hYmxlX3JlZ3VsYXRvcigKLQkJCQkJCSZkc2lfY3Ry bC0+cHdyX2luZm8uaG9zdF9wd3IsCi0JCQkJCQlmYWxzZQotCQkJCQkJKTsKLQkJCWdvdG8gZXJy b3I7Ci0JCX0KLQl9IGVsc2UgewotCQlyYyA9IGRzaV9wd3JfZW5hYmxlX3JlZ3VsYXRvcigmZHNp X2N0cmwtPnB3cl9pbmZvLmRpZ2l0YWwsCi0JCQkJCSAgICAgIGZhbHNlKTsKLQkJaWYgKHJjKSB7 Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBkaXNhYmxlIGdkc2MsIHJjPSVkXG4iLCByYyk7Ci0JCQln b3RvIGVycm9yOwotCQl9Ci0KLQkJaWYgKCFkc2lfY3RybC0+Y3VycmVudF9zdGF0ZS5ob3N0X2lu aXRpYWxpemVkKSB7Ci0JCQlyYyA9IGRzaV9wd3JfZW5hYmxlX3JlZ3VsYXRvcigKLQkJCQkmZHNp X2N0cmwtPnB3cl9pbmZvLmhvc3RfcHdyLCBmYWxzZSk7Ci0JCQlpZiAocmMpIHsKLQkJCQlwcl9l cnIoImZhaWxlZCB0byBkaXNhYmxlIGhvc3QgcG93ZXIgcmVnc1xuIik7Ci0JCQkJZ290byBlcnJv cjsKLQkJCX0KLQkJfQotCX0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBk c2lfY3RybF9jb3B5X2FuZF9wYWRfY21kKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCQkJ ICAgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfcGFja2V0ICpwYWNrZXQsCi0JCQkJICAgICB1OCAq KmJ1ZmZlciwKLQkJCQkgICAgIHUzMiAqc2l6ZSkKLXsKLQlpbnQgcmMgPSAwOwotCXU4ICpidWYg PSBOVUxMOwotCXUzMiBsZW47Ci0KLQlsZW4gPSBwYWNrZXQtPnNpemU7Ci0JbGVuICs9IDB4Mzsg bGVuICY9IH4weDAzOyAvKiBBbGlnbiB0byAzMiBiaXRzICovCi0KLQlidWYgPSBkZXZtX2t6YWxs b2MoJmRzaV9jdHJsLT5wZGV2LT5kZXYsIGxlbiAqIHNpemVvZih1OCksIEdGUF9LRVJORUwpOwot CWlmICghYnVmKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIE1TTSBzcGVjaWZpYyBjb21tYW5k IGZvcm1hdCBpbiBtZW1vcnkgKi8KLQlidWZbMF0gPSBwYWNrZXQtPmhlYWRlclsxXTsKLQlidWZb MV0gPSBwYWNrZXQtPmhlYWRlclsyXTsKLQlidWZbMl0gPSBwYWNrZXQtPmhlYWRlclswXTsKLQli dWZbM10gPSBCSVQoNyk7Ci0JaWYgKHBhY2tldC0+cGF5bG9hZF9sZW5ndGggPiAwKQotCQlidWZb M10gfD0gQklUKDYpOwotCi0JLyogTG9uZyBwYWNrZXQgKi8KLQlpZiAocGFja2V0LT5wYXlsb2Fk ICYmIHBhY2tldC0+cGF5bG9hZF9sZW5ndGgpCi0JCW1lbWNweShidWYgKyA0LCBwYWNrZXQtPnBh eWxvYWQsIHBhY2tldC0+cGF5bG9hZF9sZW5ndGgpOwotCi0JLyogQXBwZW5kIDB4ZmYgdG8gdGhl IGVuZCAqLwotCWlmIChwYWNrZXQtPnNpemUgPCBsZW4pCi0JCW1lbXNldChidWYgKyBwYWNrZXQt PnNpemUsIDB4ZmYsIGxlbiAtIHBhY2tldC0+c2l6ZSk7Ci0KLQkqYnVmZmVyID0gYnVmOwotCSpz aXplID0gbGVuOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBkc2lfY3RybF93YWl0 X2Zvcl92aWRlb19kb25lKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpCi17Ci0JdTMyIHZfdG90 YWwgPSAwLCB2X2JsYW5rID0gMCwgc2xlZXBfbXMgPSAwLCBmcHMgPSAwLCByZXQ7Ci0Jc3RydWN0 IGRzaV9tb2RlX2luZm8gKnRpbWluZzsKLQotCWlmIChkc2lfY3RybC0+aG9zdF9jb25maWcucGFu ZWxfbW9kZSAhPSBEU0lfT1BfVklERU9fTU9ERSkKLQkJcmV0dXJuOwotCi0JZHNpX2N0cmwtPmh3 Lm9wcy5jbGVhcl9pbnRlcnJ1cHRfc3RhdHVzKCZkc2lfY3RybC0+aHcsCi0JCQkJRFNJX1ZJREVP X01PREVfRlJBTUVfRE9ORSk7Ci0KLQlkc2lfY3RybF9lbmFibGVfc3RhdHVzX2ludGVycnVwdChk c2lfY3RybCwKLQkJCQlEU0lfU0lOVF9WSURFT19NT0RFX0ZSQU1FX0RPTkUsIE5VTEwpOwotCXJl aW5pdF9jb21wbGV0aW9uKCZkc2lfY3RybC0+aXJxX2luZm8udmlkX2ZyYW1lX2RvbmUpOwotCXJl dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgKLQkJCSZkc2lfY3RybC0+aXJxX2luZm8u dmlkX2ZyYW1lX2RvbmUsCi0JCQltc2Vjc190b19qaWZmaWVzKERTSV9DVFJMX1RYX1RPX01TKSk7 Ci0JaWYgKHJldCA8PSAwKQotCQlwcl9kZWJ1Zygid2FpdCBmb3IgdmlkZW8gZG9uZSBmYWlsZWRc biIpOwotCWRzaV9jdHJsX2Rpc2FibGVfc3RhdHVzX2ludGVycnVwdChkc2lfY3RybCwKLQkJCQlE U0lfU0lOVF9WSURFT19NT0RFX0ZSQU1FX0RPTkUpOwotCi0JdGltaW5nID0gJihkc2lfY3RybC0+ aG9zdF9jb25maWcudmlkZW9fdGltaW5nKTsKLQl2X3RvdGFsID0gdGltaW5nLT52X3N5bmNfd2lk dGggKyB0aW1pbmctPnZfYmFja19wb3JjaCArCi0JCQl0aW1pbmctPnZfZnJvbnRfcG9yY2ggKyB0 aW1pbmctPnZfYWN0aXZlOwotCXZfYmxhbmsgPSB0aW1pbmctPnZfc3luY193aWR0aCArIHRpbWlu Zy0+dl9iYWNrX3BvcmNoOwotCWZwcyA9IHRpbWluZy0+cmVmcmVzaF9yYXRlOwotCi0Jc2xlZXBf bXMgPSBDRUlMKCh2X2JsYW5rICogMTAwMCksICh2X3RvdGFsICogZnBzKSkgKyAxOwotCXVkZWxh eShzbGVlcF9tcyAqIDEwMDApOwotfQotCi1zdGF0aWMgaW50IGRzaV9tZXNzYWdlX3R4KHN0cnVj dCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCQkgIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1z ZywKLQkJCSAgdTMyIGZsYWdzKQotewotCWludCByYyA9IDAsIHJldCA9IDA7Ci0Jc3RydWN0IG1p cGlfZHNpX3BhY2tldCBwYWNrZXQ7Ci0Jc3RydWN0IGRzaV9jdHJsX2NtZF9kbWFfZmlmb19pbmZv IGNtZDsKLQlzdHJ1Y3QgZHNpX2N0cmxfY21kX2RtYV9pbmZvIGNtZF9tZW07Ci0JdTMyIGh3X2Zs YWdzID0gMDsKLQl1MzIgbGVuZ3RoID0gMDsKLQl1OCAqYnVmZmVyID0gTlVMTDsKLQl1MzIgY250 ID0gMDsKLQl1OCAqY21kYnVmOwotCi0JcmMgPSBtaXBpX2RzaV9jcmVhdGVfcGFja2V0KCZwYWNr ZXQsIG1zZyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIGNyZWF0ZSBtZXNzYWdl IHBhY2tldCwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAoZmxhZ3Mg JiBEU0lfQ1RSTF9DTURfRkVUQ0hfTUVNT1JZKSB7Ci0JCXJjID0gZHNpX2N0cmxfY29weV9hbmRf cGFkX2NtZChkc2lfY3RybCwKLQkJCQkmcGFja2V0LAotCQkJCSZidWZmZXIsCi0JCQkJJmxlbmd0 aCk7Ci0KLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGNvcHkgbWVzc2Fn ZSwgcmM9JWRcbiIsCi0JCQkJCWRzaV9jdHJsLT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yOwot CQl9Ci0KLQkJY21kX21lbS5vZmZzZXQgPSBkc2lfY3RybC0+Y21kX2J1ZmZlcl9pb3ZhOwotCQlj bWRfbWVtLmxlbmd0aCA9IGxlbmd0aDsKLQkJY21kX21lbS5lbl9icm9hZGNhc3QgPSAoZmxhZ3Mg JiBEU0lfQ1RSTF9DTURfQlJPQURDQVNUKSA/Ci0JCQl0cnVlIDogZmFsc2U7Ci0JCWNtZF9tZW0u aXNfbWFzdGVyID0gKGZsYWdzICYgRFNJX0NUUkxfQ01EX0JST0FEQ0FTVF9NQVNURVIpID8KLQkJ CXRydWUgOiBmYWxzZTsKLQkJY21kX21lbS51c2VfbHBtID0gKG1zZy0+ZmxhZ3MgJiBNSVBJX0RT SV9NU0dfVVNFX0xQTSkgPwotCQkJdHJ1ZSA6IGZhbHNlOwotCi0JCWNtZGJ1ZiA9ICh1OCAqKShk c2lfY3RybC0+dmFkZHIpOwotCQlmb3IgKGNudCA9IDA7IGNudCA8IGxlbmd0aDsgY250KyspCi0J CQljbWRidWZbY250XSA9IGJ1ZmZlcltjbnRdOwotCi0JfSBlbHNlIGlmIChmbGFncyAmIERTSV9D VFJMX0NNRF9GSUZPX1NUT1JFKSB7Ci0JCXJjID0gZHNpX2N0cmxfY29weV9hbmRfcGFkX2NtZChk c2lfY3RybCwKLQkJCQkJICAgICAgICZwYWNrZXQsCi0JCQkJCSAgICAgICAmYnVmZmVyLAotCQkJ CQkgICAgICAgJmxlbmd0aCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0 byBjb3B5IG1lc3NhZ2UsIHJjPSVkXG4iLAotCQkJICAgICAgIGRzaV9jdHJsLT5uYW1lLCByYyk7 Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JCWNtZC5jb21tYW5kID0gICh1MzIgKilidWZmZXI7Ci0J CWNtZC5zaXplID0gbGVuZ3RoOwotCQljbWQuZW5fYnJvYWRjYXN0ID0gKGZsYWdzICYgRFNJX0NU UkxfQ01EX0JST0FEQ0FTVCkgPwotCQkJCSAgICAgdHJ1ZSA6IGZhbHNlOwotCQljbWQuaXNfbWFz dGVyID0gKGZsYWdzICYgRFNJX0NUUkxfQ01EX0JST0FEQ0FTVF9NQVNURVIpID8KLQkJCQkgIHRy dWUgOiBmYWxzZTsKLQkJY21kLnVzZV9scG0gPSAobXNnLT5mbGFncyAmIE1JUElfRFNJX01TR19V U0VfTFBNKSA/Ci0JCQkJICB0cnVlIDogZmFsc2U7Ci0JfQotCi0JaHdfZmxhZ3MgfD0gKGZsYWdz ICYgRFNJX0NUUkxfQ01EX0RFRkVSX1RSSUdHRVIpID8KLQkJCURTSV9DVFJMX0hXX0NNRF9XQUlU X0ZPUl9UUklHR0VSIDogMDsKLQotCWlmIChmbGFncyAmIERTSV9DVFJMX0NNRF9ERUZFUl9UUklH R0VSKSB7Ci0JCWlmIChmbGFncyAmIERTSV9DVFJMX0NNRF9GRVRDSF9NRU1PUlkpIHsKLQkJCWRz aV9jdHJsLT5ody5vcHMua2lja29mZl9jb21tYW5kKCZkc2lfY3RybC0+aHcsCi0JCQkJCQkJJmNt ZF9tZW0sCi0JCQkJCQkJaHdfZmxhZ3MpOwotCQl9IGVsc2UgaWYgKGZsYWdzICYgRFNJX0NUUkxf Q01EX0ZJRk9fU1RPUkUpIHsKLQkJCWRzaV9jdHJsLT5ody5vcHMua2lja29mZl9maWZvX2NvbW1h bmQoJmRzaV9jdHJsLT5odywKLQkJCQkJCQkgICAgICAmY21kLAotCQkJCQkJCSAgICAgIGh3X2Zs YWdzKTsKLQkJfQotCX0KLQotCWlmICghKGZsYWdzICYgRFNJX0NUUkxfQ01EX0RFRkVSX1RSSUdH RVIpKSB7Ci0JCWRzaV9jdHJsX3dhaXRfZm9yX3ZpZGVvX2RvbmUoZHNpX2N0cmwpOwotCQlkc2lf Y3RybF9lbmFibGVfc3RhdHVzX2ludGVycnVwdChkc2lfY3RybCwKLQkJCQkJRFNJX1NJTlRfQ01E X01PREVfRE1BX0RPTkUsIE5VTEwpOwotCQlyZWluaXRfY29tcGxldGlvbigmZHNpX2N0cmwtPmly cV9pbmZvLmNtZF9kbWFfZG9uZSk7Ci0KLQkJaWYgKGZsYWdzICYgRFNJX0NUUkxfQ01EX0ZFVENI X01FTU9SWSkgewotCQkJZHNpX2N0cmwtPmh3Lm9wcy5raWNrb2ZmX2NvbW1hbmQoJmRzaV9jdHJs LT5odywKLQkJCQkJCSAgICAgICZjbWRfbWVtLAotCQkJCQkJICAgICAgaHdfZmxhZ3MpOwotCQl9 IGVsc2UgaWYgKGZsYWdzICYgRFNJX0NUUkxfQ01EX0ZJRk9fU1RPUkUpIHsKLQkJCWRzaV9jdHJs LT5ody5vcHMua2lja29mZl9maWZvX2NvbW1hbmQoJmRzaV9jdHJsLT5odywKLQkJCQkJCQkgICAg ICAmY21kLAotCQkJCQkJCSAgICAgIGh3X2ZsYWdzKTsKLQkJfQotCi0JCXJldCA9IHdhaXRfZm9y X2NvbXBsZXRpb25fdGltZW91dCgKLQkJCQkmZHNpX2N0cmwtPmlycV9pbmZvLmNtZF9kbWFfZG9u ZSwKLQkJCQltc2Vjc190b19qaWZmaWVzKERTSV9DVFJMX1RYX1RPX01TKSk7Ci0KLQkJaWYgKHJl dCA9PSAwKSB7Ci0JCQl1MzIgc3RhdHVzID0gMDsKLQkJCXUzMiBtYXNrID0gRFNJX0NNRF9NT0RF X0RNQV9ET05FOwotCi0JCQlpZiAoc3RhdHVzICYgbWFzaykgewotCQkJCXN0YXR1cyB8PSAoRFNJ X0NNRF9NT0RFX0RNQV9ET05FIHwKLQkJCQkJCURTSV9CVEFfRE9ORSk7Ci0JCQkJZHNpX2N0cmwt Pmh3Lm9wcy5jbGVhcl9pbnRlcnJ1cHRfc3RhdHVzKAotCQkJCQkJCQkmZHNpX2N0cmwtPmh3LAot CQkJCQkJCQlzdGF0dXMpOwotCQkJCWRzaV9jdHJsX2Rpc2FibGVfc3RhdHVzX2ludGVycnVwdChk c2lfY3RybCwKLQkJCQkJCURTSV9TSU5UX0NNRF9NT0RFX0RNQV9ET05FKTsKLQkJCQljb21wbGV0 ZV9hbGwoJmRzaV9jdHJsLT5pcnFfaW5mby5jbWRfZG1hX2RvbmUpOwotCQkJCXByX3dhcm4oImRt YV90eCBkb25lIGJ1dCBpcnEgbm90IHRyaWdnZXJlZFxuIik7Ci0JCQl9IGVsc2UgewotCQkJCXJj ID0gLUVUSU1FRE9VVDsKLQkJCQlkc2lfY3RybF9kaXNhYmxlX3N0YXR1c19pbnRlcnJ1cHQoZHNp X2N0cmwsCi0JCQkJCQlEU0lfU0lOVF9DTURfTU9ERV9ETUFfRE9ORSk7Ci0JCQkJcHJfZXJyKCJb RFNJXyVkXUNvbW1hbmQgdHJhbnNmZXIgZmFpbGVkXG4iLAotCQkJCQkJZHNpX2N0cmwtPmNlbGxf aW5kZXgpOwotCQkJfQotCQl9Ci0KLQkJZHNpX2N0cmwtPmh3Lm9wcy5yZXNldF9jbWRfZmlmbygm ZHNpX2N0cmwtPmh3KTsKLQl9Ci1lcnJvcjoKLQlpZiAoYnVmZmVyKQotCQlkZXZtX2tmcmVlKCZk c2lfY3RybC0+cGRldi0+ZGV2LCBidWZmZXIpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGlu dCBkc2lfc2V0X21heF9yZXR1cm5fc2l6ZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJ CSAgIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKnJ4X21zZywKLQkJCQkgICB1MzIgc2l6ZSkK LXsKLQlpbnQgcmMgPSAwOwotCXU4IHR4WzJdID0geyAodTgpKHNpemUgJiAweEZGKSwgKHU4KShz aXplID4+IDgpIH07Ci0Jc3RydWN0IG1pcGlfZHNpX21zZyBtc2cgPSB7Ci0JCS5jaGFubmVsID0g cnhfbXNnLT5jaGFubmVsLAotCQkudHlwZSA9IE1JUElfRFNJX1NFVF9NQVhJTVVNX1JFVFVSTl9Q QUNLRVRfU0laRSwKLQkJLnR4X2xlbiA9IDIsCi0JCS50eF9idWYgPSB0eCwKLQl9OwotCi0JcmMg PSBkc2lfbWVzc2FnZV90eChkc2lfY3RybCwgJm1zZywgMHgwKTsKLQlpZiAocmMpCi0JCXByX2Vy cigiZmFpbGVkIHRvIHNlbmQgbWF4IHJldHVybiBzaXplIHBhY2tldCwgcmM9JWRcbiIsIHJjKTsK LQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfbWVzc2FnZV9yeChzdHJ1Y3QgZHNp X2N0cmwgKmRzaV9jdHJsLAotCQkJICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2csCi0J CQkgIHUzMiBmbGFncykKLXsKLQlpbnQgcmMgPSAwOwotCXUzMiByZF9wa3Rfc2l6ZTsKLQl1MzIg dG90YWxfcmVhZF9sZW47Ci0JdTMyIGJ5dGVzX3JlYWQgPSAwLCB0b3RfYnl0ZXNfcmVhZCA9IDA7 Ci0JdTMyIGN1cnJlbnRfcmVhZF9sZW47Ci0JYm9vbCBzaG9ydF9yZXNwID0gZmFsc2U7Ci0JYm9v bCByZWFkX2RvbmUgPSBmYWxzZTsKLQotCWlmIChtc2ctPnJ4X2xlbiA8PSAyKSB7Ci0JCXNob3J0 X3Jlc3AgPSB0cnVlOwotCQlyZF9wa3Rfc2l6ZSA9IG1zZy0+cnhfbGVuOwotCQl0b3RhbF9yZWFk X2xlbiA9IDQ7Ci0JfSBlbHNlIHsKLQkJc2hvcnRfcmVzcCA9IGZhbHNlOwotCQljdXJyZW50X3Jl YWRfbGVuID0gMTA7Ci0JCWlmIChtc2ctPnJ4X2xlbiA8IGN1cnJlbnRfcmVhZF9sZW4pCi0JCQly ZF9wa3Rfc2l6ZSA9IG1zZy0+cnhfbGVuOwotCQllbHNlCi0JCQlyZF9wa3Rfc2l6ZSA9IGN1cnJl bnRfcmVhZF9sZW47Ci0KLQkJdG90YWxfcmVhZF9sZW4gPSBjdXJyZW50X3JlYWRfbGVuICsgNjsK LQl9Ci0KLQl3aGlsZSAoIXJlYWRfZG9uZSkgewotCQlyYyA9IGRzaV9zZXRfbWF4X3JldHVybl9z aXplKGRzaV9jdHJsLCBtc2csIHJkX3BrdF9zaXplKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIo IkZhaWxlZCB0byBzZXQgbWF4IHJldHVybiBwYWNrZXQgc2l6ZSwgcmM9JWRcbiIsCi0JCQkgICAg ICAgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCi0JCXJjID0gZHNpX21lc3NhZ2VfdHgoZHNp X2N0cmwsIG1zZywgZmxhZ3MpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiTWVzc2FnZSB0cmFu c21pc3Npb24gZmFpbGVkLCByYz0lZFxuIiwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCi0K LQkJdG90X2J5dGVzX3JlYWQgKz0gYnl0ZXNfcmVhZDsKLQkJaWYgKHNob3J0X3Jlc3ApCi0JCQly ZWFkX2RvbmUgPSB0cnVlOwotCQllbHNlIGlmIChtc2ctPnJ4X2xlbiA8PSB0b3RfYnl0ZXNfcmVh ZCkKLQkJCXJlYWRfZG9uZSA9IHRydWU7Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi0K LXN0YXRpYyBpbnQgZHNpX2VuYWJsZV91bHBzKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpCi17 Ci0JaW50IHJjID0gMDsKLQl1MzIgbGFuZXMgPSAwOwotCXUzMiB1bHBzX2xhbmVzOwotCi0JaWYg KGRzaV9jdHJsLT5ob3N0X2NvbmZpZy5wYW5lbF9tb2RlID09IERTSV9PUF9DTURfTU9ERSkKLQkJ bGFuZXMgPSBkc2lfY3RybC0+aG9zdF9jb25maWcuY29tbW9uX2NvbmZpZy5kYXRhX2xhbmVzOwot Ci0JcmMgPSBkc2lfY3RybC0+aHcub3BzLndhaXRfZm9yX2xhbmVfaWRsZSgmZHNpX2N0cmwtPmh3 LCBsYW5lcyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigibGFuZXMgbm90IGVudGVyaW5nIGlkbGUs IHNraXAgVUxQU1xuIik7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlpZiAoIWRzaV9jdHJsLT5ody5v cHMudWxwc19vcHMudWxwc19yZXF1ZXN0IHx8Ci0JCQkhZHNpX2N0cmwtPmh3Lm9wcy51bHBzX29w cy51bHBzX2V4aXQpIHsKLQkJcHJfZGVidWcoIkRTSSBjb250cm9sbGVyIFVMUFMgb3BzIG5vdCBw cmVzZW50XG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbGFuZXMgfD0gRFNJX0NMT0NLX0xBTkU7 Ci0JZHNpX2N0cmwtPmh3Lm9wcy51bHBzX29wcy51bHBzX3JlcXVlc3QoJmRzaV9jdHJsLT5odywg bGFuZXMpOwotCi0JdWxwc19sYW5lcyA9IGRzaV9jdHJsLT5ody5vcHMudWxwc19vcHMuZ2V0X2xh bmVzX2luX3VscHMoJmRzaV9jdHJsLT5odyk7Ci0KLQlpZiAoKGxhbmVzICYgdWxwc19sYW5lcykg IT0gbGFuZXMpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gZW50ZXIgVUxQUywgcmVxdWVzdD0weCV4 LCBhY3R1YWw9MHgleFxuIiwKLQkJICAgICAgIGxhbmVzLCB1bHBzX2xhbmVzKTsKLQkJcmMgPSAt RUlPOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzYWJsZV91bHBz KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpCi17Ci0JaW50IHJjID0gMDsKLQl1MzIgdWxwc19s YW5lcywgbGFuZXMgPSAwOwotCi0JZHNpX2N0cmwtPmh3Lm9wcy5jbGVhcl9waHkwX2xuX2Vycigm ZHNpX2N0cmwtPmh3KTsKLQotCWlmICghZHNpX2N0cmwtPmh3Lm9wcy51bHBzX29wcy51bHBzX3Jl cXVlc3QgfHwKLQkJCSFkc2lfY3RybC0+aHcub3BzLnVscHNfb3BzLnVscHNfZXhpdCkgewotCQlw cl9kZWJ1ZygiRFNJIGNvbnRyb2xsZXIgVUxQUyBvcHMgbm90IHByZXNlbnRcbiIpOwotCQlyZXR1 cm4gMDsKLQl9Ci0KLQlpZiAoZHNpX2N0cmwtPmhvc3RfY29uZmlnLnBhbmVsX21vZGUgPT0gRFNJ X09QX0NNRF9NT0RFKQotCQlsYW5lcyA9IGRzaV9jdHJsLT5ob3N0X2NvbmZpZy5jb21tb25fY29u ZmlnLmRhdGFfbGFuZXM7Ci0KLQlsYW5lcyB8PSBEU0lfQ0xPQ0tfTEFORTsKLQotCXVscHNfbGFu ZXMgPSBkc2lfY3RybC0+aHcub3BzLnVscHNfb3BzLmdldF9sYW5lc19pbl91bHBzKCZkc2lfY3Ry bC0+aHcpOwotCi0JaWYgKChsYW5lcyAmIHVscHNfbGFuZXMpICE9IGxhbmVzKQotCQlwcl9lcnIo Ik1pc21hdGNoIGJldHdlZW4gbGFuZXMgaW4gVUxQU1xuIik7Ci0KLQlsYW5lcyAmPSB1bHBzX2xh bmVzOwotCi0JZHNpX2N0cmwtPmh3Lm9wcy51bHBzX29wcy51bHBzX2V4aXQoJmRzaV9jdHJsLT5o dywgbGFuZXMpOwotCi0JdWxwc19sYW5lcyA9IGRzaV9jdHJsLT5ody5vcHMudWxwc19vcHMuZ2V0 X2xhbmVzX2luX3VscHMoJmRzaV9jdHJsLT5odyk7Ci0JaWYgKHVscHNfbGFuZXMgJiBsYW5lcykg ewotCQlwcl9lcnIoIkxhbmVzICgweCV4KSBzdHVjayBpbiBVTFBTXG4iLCB1bHBzX2xhbmVzKTsK LQkJcmMgPSAtRUlPOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfY3Ry bF9kcnZfc3RhdGVfaW5pdChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsKQotewotCWludCByYyA9 IDA7Ci0JYm9vbCBzcGxhc2hfZW5hYmxlZCA9IGZhbHNlOwotCXN0cnVjdCBkc2lfY3RybF9zdGF0 ZV9pbmZvICpzdGF0ZSA9ICZkc2lfY3RybC0+Y3VycmVudF9zdGF0ZTsKLQotCWlmICghc3BsYXNo X2VuYWJsZWQpIHsKLQkJc3RhdGUtPnBvd2VyX3N0YXRlID0gRFNJX0NUUkxfUE9XRVJfVlJFR19P RkY7Ci0JCXN0YXRlLT5jbWRfZW5naW5lX3N0YXRlID0gRFNJX0NUUkxfRU5HSU5FX09GRjsKLQkJ c3RhdGUtPnZpZF9lbmdpbmVfc3RhdGUgPSBEU0lfQ1RSTF9FTkdJTkVfT0ZGOwotCX0KLQotCXJl dHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfY3RybF9idWZmZXJfZGVpbml0KHN0cnVjdCBk c2lfY3RybCAqZHNpX2N0cmwpCi17Ci0Jc3RydWN0IG1zbV9nZW1fYWRkcmVzc19zcGFjZSAqYXNw YWNlID0gTlVMTDsKLQotCWlmIChkc2lfY3RybC0+dHhfY21kX2J1ZikgewotCQlhc3BhY2UgPSBk c2lfY3RybF9nZXRfYXNwYWNlKGRzaV9jdHJsLAotCQkJCU1TTV9TTU1VX0RPTUFJTl9VTlNFQ1VS RSk7Ci0JCWlmICghYXNwYWNlKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgYWRkcmVzcyBz cGFjZVxuIik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCi0JCW1zbV9nZW1fcHV0X2lvdmEo ZHNpX2N0cmwtPnR4X2NtZF9idWYsIGFzcGFjZSk7Ci0KLQkJbXV0ZXhfbG9jaygmZHNpX2N0cmwt PmRybV9kZXYtPnN0cnVjdF9tdXRleCk7Ci0JCW1zbV9nZW1fZnJlZV9vYmplY3QoZHNpX2N0cmwt PnR4X2NtZF9idWYpOwotCQltdXRleF91bmxvY2soJmRzaV9jdHJsLT5kcm1fZGV2LT5zdHJ1Y3Rf bXV0ZXgpOwotCQlkc2lfY3RybC0+dHhfY21kX2J1ZiA9IE5VTEw7Ci0JfQotCi0JcmV0dXJuIDA7 Ci19Ci0KLWludCBkc2lfY3RybF9idWZmZXJfaW5pdChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJs KQotewotCWludCByYyA9IDA7Ci0JdTY0IGlvdmEgPSAwOwotCXN0cnVjdCBtc21fZ2VtX2FkZHJl c3Nfc3BhY2UgKmFzcGFjZSA9IE5VTEw7Ci0KLQlhc3BhY2UgPSBkc2lfY3RybF9nZXRfYXNwYWNl KGRzaV9jdHJsLCBNU01fU01NVV9ET01BSU5fVU5TRUNVUkUpOwotCWlmICghYXNwYWNlKSB7Ci0J CXByX2VycigiZmFpbGVkIHRvIGdldCBhZGRyZXNzIHNwYWNlXG4iKTsKLQkJcmV0dXJuIC1FTk9N RU07Ci0JfQotCi0JZHNpX2N0cmwtPnR4X2NtZF9idWYgPSBtc21fZ2VtX25ldyhkc2lfY3RybC0+ ZHJtX2RldiwKLQkJCQkJICAgU1pfNEssCi0JCQkJCSAgIE1TTV9CT19VTkNBQ0hFRCk7Ci0KLQlp ZiAoSVNfRVJSKGRzaV9jdHJsLT50eF9jbWRfYnVmKSkgewotCQlyYyA9IFBUUl9FUlIoZHNpX2N0 cmwtPnR4X2NtZF9idWYpOwotCQlwcl9lcnIoImZhaWxlZCB0byBhbGxvY2F0ZSBnZW0sIHJjPSVk XG4iLCByYyk7Ci0JCWRzaV9jdHJsLT50eF9jbWRfYnVmID0gTlVMTDsKLQkJZ290byBlcnJvcjsK LQl9Ci0KLQlkc2lfY3RybC0+Y21kX2J1ZmZlcl9zaXplID0gU1pfNEs7Ci0KLQlyYyA9IG1zbV9n ZW1fZ2V0X2lvdmEoZHNpX2N0cmwtPnR4X2NtZF9idWYsIGFzcGFjZSwgJmlvdmEpOwotCWlmIChy YykgewotCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgaW92YSwgcmM9JWRcbiIsIHJjKTsKLQkJKHZv aWQpZHNpX2N0cmxfYnVmZmVyX2RlaW5pdChkc2lfY3RybCk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQot Ci0JaWYgKGlvdmEgJiAweDA3KSB7Ci0JCXByX2VycigiVHggY29tbWFuZCBidWZmZXIgaXMgbm90 IDggYnl0ZSBhbGlnbmVkXG4iKTsKLQkJcmMgPSAtRU5PVFNVUFA7Ci0JCSh2b2lkKWRzaV9jdHJs X2J1ZmZlcl9kZWluaXQoZHNpX2N0cmwpOwotCQlnb3RvIGVycm9yOwotCX0KLWVycm9yOgotCXJl dHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfZW5hYmxlX2lvX2NsYW1wKHN0cnVjdCBkc2lf Y3RybCAqZHNpX2N0cmwsCi0JCWJvb2wgZW5hYmxlLCBib29sIHVscHNfZW5hYmxlZCkKLXsKLQl1 MzIgbGFuZXMgPSAwOwotCi0JaWYgKGRzaV9jdHJsLT5ob3N0X2NvbmZpZy5wYW5lbF9tb2RlID09 IERTSV9PUF9DTURfTU9ERSkKLQkJbGFuZXMgPSBkc2lfY3RybC0+aG9zdF9jb25maWcuY29tbW9u X2NvbmZpZy5kYXRhX2xhbmVzOwotCi0JbGFuZXMgfD0gRFNJX0NMT0NLX0xBTkU7Ci0KLQlpZiAo ZW5hYmxlKQotCQlkc2lfY3RybC0+aHcub3BzLmNsYW1wX2VuYWJsZSgmZHNpX2N0cmwtPmh3LAot CQkJbGFuZXMsIHVscHNfZW5hYmxlZCk7Ci0JZWxzZQotCQlkc2lfY3RybC0+aHcub3BzLmNsYW1w X2Rpc2FibGUoJmRzaV9jdHJsLT5odywKLQkJCWxhbmVzLCB1bHBzX2VuYWJsZWQpOwotCi0JcmV0 dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2N0cmxfZHRzX3BhcnNlKHN0cnVjdCBkc2lfY3Ry bCAqZHNpX2N0cmwsCi0JCQkJICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpCi17Ci0JdTMy IGluZGV4ID0gMDsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkc2lfY3RybCB8fCAhb2Zfbm9kZSkg ewotCQlwcl9lcnIoImludmFsaWQgZHNpX2N0cmw6JWQgb3Igb2Zfbm9kZTolZFxuIiwKLQkJCQkJ ZHNpX2N0cmwgIT0gTlVMTCwgb2Zfbm9kZSAhPSBOVUxMKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAiY2VsbC1pbmRleCIsICZp bmRleCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2RlYnVnKCJjZWxsIGluZGV4IG5vdCBzZXQsIGRlZmF1 bHQgdG8gMFxuIik7Ci0JCWluZGV4ID0gMDsKLQl9Ci0KLQlkc2lfY3RybC0+Y2VsbF9pbmRleCA9 IGluZGV4OwotCWRzaV9jdHJsLT5uYW1lID0gb2ZfZ2V0X3Byb3BlcnR5KG9mX25vZGUsICJsYWJl bCIsIE5VTEwpOwotCWlmICghZHNpX2N0cmwtPm5hbWUpCi0JCWRzaV9jdHJsLT5uYW1lID0gRFNJ X0NUUkxfREVGQVVMVF9MQUJFTDsKLQotCWRzaV9jdHJsLT5waHlfaXNvbGF0aW9uX2VuYWJsZWQg PSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJCQkgICAgInFjb20sZHNpLXBoeS1p c29sYXRpb24tZW5hYmxlZCIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2N0 cmxfZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IGRz aV9jdHJsICpkc2lfY3RybDsKLQlzdHJ1Y3QgZHNpX2N0cmxfbGlzdF9pdGVtICppdGVtOwotCWNv bnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKmlkOwotCWVudW0gZHNpX2N0cmxfdmVyc2lvbiB2ZXJz aW9uOwotCWludCByYyA9IDA7Ci0KLQlpZCA9IG9mX21hdGNoX25vZGUobXNtX2RzaV9vZl9tYXRj aCwgcGRldi0+ZGV2Lm9mX25vZGUpOwotCWlmICghaWQpCi0JCXJldHVybiAtRU5PREVWOwotCi0J dmVyc2lvbiA9ICooZW51bSBkc2lfY3RybF92ZXJzaW9uICopaWQtPmRhdGE7Ci0KLQlpdGVtID0g ZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqaXRlbSksIEdGUF9LRVJORUwpOwotCWlm ICghaXRlbSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlkc2lfY3RybCA9IGRldm1fa3phbGxvYygm cGRldi0+ZGV2LCBzaXplb2YoKmRzaV9jdHJsKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkc2lfY3Ry bCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlkc2lfY3RybC0+dmVyc2lvbiA9IHZlcnNpb247Ci0J ZHNpX2N0cmwtPmlycV9pbmZvLmlycV9udW0gPSAtMTsKLQlkc2lfY3RybC0+aXJxX2luZm8uaXJx X3N0YXRfbWFzayA9IDB4MDsKLQotCXNwaW5fbG9ja19pbml0KCZkc2lfY3RybC0+aXJxX2luZm8u aXJxX2xvY2spOwotCi0JcmMgPSBkc2lfY3RybF9kdHNfcGFyc2UoZHNpX2N0cmwsIHBkZXYtPmRl di5vZl9ub2RlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJjdHJsOiVkIGR0cyBwYXJzZSBmYWls ZWQsIHJjID0gJWRcbiIsCi0JCQkJCQlkc2lfY3RybC0+Y2VsbF9pbmRleCwgcmMpOwotCQlnb3Rv IGZhaWw7Ci0JfQotCi0JcmMgPSBkc2lfY3RybF9pbml0X3JlZ21hcChwZGV2LCBkc2lfY3RybCk7 Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIHBhcnNlIHJlZ2lzdGVyIGluZm9ybWF0 aW9uLCByYyA9ICVkXG4iLCByYyk7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQlyYyA9IGRzaV9jdHJs X2Nsb2Nrc19pbml0KHBkZXYsIGRzaV9jdHJsKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJGYWls ZWQgdG8gcGFyc2UgY2xvY2sgaW5mb3JtYXRpb24sIHJjID0gJWRcbiIsIHJjKTsKLQkJZ290byBm YWlsOwotCX0KLQotCXJjID0gZHNpX2N0cmxfc3VwcGxpZXNfaW5pdChwZGV2LCBkc2lfY3RybCk7 Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIHBhcnNlIHZvbHRhZ2Ugc3VwcGxpZXMs IHJjID0gJWRcbiIsIHJjKTsKLQkJZ290byBmYWlsX2Nsa3M7Ci0JfQotCi0JcmMgPSBkc2lfY2F0 YWxvZ19jdHJsX3NldHVwKCZkc2lfY3RybC0+aHcsIGRzaV9jdHJsLT52ZXJzaW9uLAotCQkgICAg ZHNpX2N0cmwtPmNlbGxfaW5kZXgsIGRzaV9jdHJsLT5waHlfaXNvbGF0aW9uX2VuYWJsZWQpOwot CWlmIChyYykgewotCQlwcl9lcnIoIkNhdGFsb2cgZG9lcyBub3Qgc3VwcG9ydCB2ZXJzaW9uICgl ZClcbiIsCi0JCSAgICAgICBkc2lfY3RybC0+dmVyc2lvbik7Ci0JCWdvdG8gZmFpbF9zdXBwbGll czsKLQl9Ci0KLQlyYyA9IGRzaV9jdHJsX2F4aV9idXNfY2xpZW50X2luaXQocGRldiwgZHNpX2N0 cmwpOwotCWlmIChyYykKLQkJcHJfZGVidWcoImZhaWxlZCB0byBpbml0IGF4aSBidXMgY2xpZW50 LCByYyA9ICVkXG4iLCByYyk7Ci0KLQlpdGVtLT5jdHJsID0gZHNpX2N0cmw7Ci0KLQltdXRleF9s b2NrKCZkc2lfY3RybF9saXN0X2xvY2spOwotCWxpc3RfYWRkKCZpdGVtLT5saXN0LCAmZHNpX2N0 cmxfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfY3RybF9saXN0X2xvY2spOwotCi0JbXV0ZXhf aW5pdCgmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0KLQlkc2lfY3RybC0+cGRldiA9IHBkZXY7Ci0J cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHNpX2N0cmwpOwotCXByX2luZm8oIlByb2JlIHN1 Y2Nlc3NmdWwgZm9yICVzXG4iLCBkc2lfY3RybC0+bmFtZSk7Ci0KLQlyZXR1cm4gMDsKLQotZmFp bF9zdXBwbGllczoKLQkodm9pZClkc2lfY3RybF9zdXBwbGllc19kZWluaXQoZHNpX2N0cmwpOwot ZmFpbF9jbGtzOgotCSh2b2lkKWRzaV9jdHJsX2Nsb2Nrc19kZWluaXQoZHNpX2N0cmwpOwotZmFp bDoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2N0cmxfZGV2X3JlbW92ZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9j dHJsICpkc2lfY3RybDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0bXA7Ci0KLQlkc2lfY3Ry bCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCi0JbXV0ZXhfbG9jaygmZHNpX2N0cmxf bGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0bXAsICZkc2lfY3RybF9saXN0 KSB7Ci0JCXN0cnVjdCBkc2lfY3RybF9saXN0X2l0ZW0gKm4gPSBsaXN0X2VudHJ5KHBvcywKLQkJ CQkJCSAgc3RydWN0IGRzaV9jdHJsX2xpc3RfaXRlbSwKLQkJCQkJCSAgbGlzdCk7Ci0JCWlmIChu LT5jdHJsID09IGRzaV9jdHJsKSB7Ci0JCQlsaXN0X2RlbCgmbi0+bGlzdCk7Ci0JCQlicmVhazsK LQkJfQotCX0KLQltdXRleF91bmxvY2soJmRzaV9jdHJsX2xpc3RfbG9jayk7Ci0KLQltdXRleF9s b2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQlyYyA9IGRzaV9jdHJsX2F4aV9idXNfY2xpZW50 X2RlaW5pdChkc2lfY3RybCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoImZhaWxlZCB0byBkZWluaXRp YWxpemUgYXhpIGJ1cyBjbGllbnQsIHJjID0gJWRcbiIsIHJjKTsKLQotCXJjID0gZHNpX2N0cmxf c3VwcGxpZXNfZGVpbml0KGRzaV9jdHJsKTsKLQlpZiAocmMpCi0JCXByX2VycigiZmFpbGVkIHRv IGRlaW5pdGlhbGl6ZSB2b2x0YWdlIHN1cHBsaWVzLCByYz0lZFxuIiwgcmMpOwotCi0JcmMgPSBk c2lfY3RybF9jbG9ja3NfZGVpbml0KGRzaV9jdHJsKTsKLQlpZiAocmMpCi0JCXByX2VycigiZmFp bGVkIHRvIGRlaW5pdGlhbGl6ZSBjbG9ja3MsIHJjPSVkXG4iLCByYyk7Ci0KLQltdXRleF91bmxv Y2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCi0JbXV0ZXhfZGVzdHJveSgmZHNpX2N0cmwtPmN0 cmxfbG9jayk7Ci0JZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBkc2lfY3RybCk7Ci0KLQlwbGF0Zm9y bV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVj dCBwbGF0Zm9ybV9kcml2ZXIgZHNpX2N0cmxfZHJpdmVyID0gewotCS5wcm9iZSA9IGRzaV9jdHJs X2Rldl9wcm9iZSwKLQkucmVtb3ZlID0gZHNpX2N0cmxfZGV2X3JlbW92ZSwKLQkuZHJpdmVyID0g ewotCQkubmFtZSA9ICJkcm1fZHNpX2N0cmwiLAotCQkub2ZfbWF0Y2hfdGFibGUgPSBtc21fZHNp X29mX21hdGNoLAotCX0sCi19OwotCi0jaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCi0KLXZv aWQgZHNpX2N0cmxfZGVidWdfZHVtcCh2b2lkKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywg KnRtcDsKLQlzdHJ1Y3QgZHNpX2N0cmwgKmN0cmwgPSBOVUxMOwotCi0JbXV0ZXhfbG9jaygmZHNp X2N0cmxfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0bXAsICZkc2lfY3Ry bF9saXN0KSB7Ci0JCXN0cnVjdCBkc2lfY3RybF9saXN0X2l0ZW0gKm47Ci0KLQkJbiA9IGxpc3Rf ZW50cnkocG9zLCBzdHJ1Y3QgZHNpX2N0cmxfbGlzdF9pdGVtLCBsaXN0KTsKLQkJY3RybCA9IG4t PmN0cmw7Ci0JCXByX2VycigiZHNpIGN0cmw6JWRcbiIsIGN0cmwtPmNlbGxfaW5kZXgpOwotCQlj dHJsLT5ody5vcHMuZGVidWdfYnVzKCZjdHJsLT5odyk7Ci0JfQotCW11dGV4X3VubG9jaygmZHNp X2N0cmxfbGlzdF9sb2NrKTsKLX0KLQotI2VuZGlmCi0vKioKLSAqIGRzaV9jdHJsX2dldCgpIC0g Z2V0IGEgZHNpX2N0cmwgaGFuZGxlIGZyb20gYW4gb2Zfbm9kZQotICogQG9mX25vZGU6ICAgIG9m X25vZGUgb2YgdGhlIERTSSBjb250cm9sbGVyLgotICoKLSAqIEdldHMgdGhlIERTSSBjb250cm9s bGVyIGhhbmRsZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgb2Zfbm9kZS4gVGhlIHJlZiBjb3VudAot ICogaXMgaW5jcmVtZW50ZWQgdG8gb25lIGFuZCBhbGwgc3Vic2VxdWVudCBnZXRzIHdpbGwgZmFp bCB1bnRpbCB0aGUgb3JpZ2luYWwKLSAqIGNsaWVudHMgY2FsbHMgYSBwdXQuCi0gKgotICogUmV0 dXJuOiBEU0kgQ29udHJvbGxlciBoYW5kbGUuCi0gKi8KLXN0cnVjdCBkc2lfY3RybCAqZHNpX2N0 cmxfZ2V0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFk ICpwb3MsICp0bXA7Ci0Jc3RydWN0IGRzaV9jdHJsICpjdHJsID0gTlVMTDsKLQotCW11dGV4X2xv Y2soJmRzaV9jdHJsX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdG1wLCAm ZHNpX2N0cmxfbGlzdCkgewotCQlzdHJ1Y3QgZHNpX2N0cmxfbGlzdF9pdGVtICpuOwotCi0JCW4g PSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGRzaV9jdHJsX2xpc3RfaXRlbSwgbGlzdCk7Ci0JCWlm IChuLT5jdHJsLT5wZGV2LT5kZXYub2Zfbm9kZSA9PSBvZl9ub2RlKSB7Ci0JCQljdHJsID0gbi0+ Y3RybDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmZHNpX2N0cmxfbGlzdF9s b2NrKTsKLQotCWlmICghY3RybCkgewotCQlwcl9lcnIoIkRldmljZSB3aXRoIG9mIG5vZGUgbm90 IGZvdW5kXG4iKTsKLQkJY3RybCA9IEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7Ci0JCXJldHVybiBj dHJsOwotCX0KLQotCW11dGV4X2xvY2soJmN0cmwtPmN0cmxfbG9jayk7Ci0JaWYgKGN0cmwtPnJl ZmNvdW50ID09IDEpIHsKLQkJcHJfZXJyKCJbJXNdIERldmljZSBpbiB1c2VcbiIsIGN0cmwtPm5h bWUpOwotCQljdHJsID0gRVJSX1BUUigtRUJVU1kpOwotCX0gZWxzZSB7Ci0JCWN0cmwtPnJlZmNv dW50Kys7Ci0JfQotCW11dGV4X3VubG9jaygmY3RybC0+Y3RybF9sb2NrKTsKLQlyZXR1cm4gY3Ry bDsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9wdXQoKSAtIHJlbGVhc2VzIGEgZHNpIGNvbnRyb2xs ZXIgaGFuZGxlLgotICogQGRzaV9jdHJsOiAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0g KgotICogUmVsZWFzZXMgdGhlIERTSSBjb250cm9sbGVyLiBEcml2ZXIgd2lsbCBjbGVhbiB1cCBh bGwgcmVzb3VyY2VzIGFuZCBwdXRzIGJhY2sKLSAqIHRoZSBEU0kgY29udHJvbGxlciBpbnRvIHJl c2V0IHN0YXRlLgotICovCi12b2lkIGRzaV9jdHJsX3B1dChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9j dHJsKQotewotCW11dGV4X2xvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCi0JaWYgKGRzaV9j dHJsLT5yZWZjb3VudCA9PSAwKQotCQlwcl9lcnIoIlVuYmFsYW5jZWQgJXMgY2FsbFxuIiwgX19m dW5jX18pOwotCWVsc2UKLQkJZHNpX2N0cmwtPnJlZmNvdW50LS07Ci0KLQltdXRleF91bmxvY2so JmRzaV9jdHJsLT5jdHJsX2xvY2spOwotfQotCi0vKioKLSAqIGRzaV9jdHJsX2Rydl9pbml0KCkg LSBpbml0aWFsaXplIGRzaSBjb250cm9sbGVyIGRyaXZlci4KLSAqIEBkc2lfY3RybDogICAgICBE U0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAcGFyZW50OiAgICAgICAgUGFyZW50IGRpcmVjdG9y eSBmb3IgZGVidWcgZnMuCi0gKgotICogSW5pdGlhbGl6ZXMgRFNJIGNvbnRyb2xsZXIgZHJpdmVy LiBEcml2ZXIgc2hvdWxkIGJlIGluaXRpYWxpemVkIGFmdGVyCi0gKiBkc2lfY3RybF9nZXQoKSBz dWNjZWVkcy4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9k cnZfaW5pdChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQp Ci17Ci0JaW50IHJjID0gMDsKLQotCWlmICghZHNpX2N0cmwgfHwgIXBhcmVudCkgewotCQlwcl9l cnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhf bG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0JcmMgPSBkc2lfY3RybF9kcnZfc3RhdGVfaW5p dChkc2lfY3RybCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIGluaXRpYWxpemUg ZHJpdmVyIHN0YXRlLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0g ZHNpX2N0cmxfZGVidWdmc19pbml0KGRzaV9jdHJsLCBwYXJlbnQpOwotCWlmIChyYykgewotCQlw cl9lcnIoIltEU0lfJWRdIGZhaWxlZCB0byBpbml0IGRlYnVnIGZzLCByYz0lZFxuIiwKLQkJICAg ICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi1lcnJv cjoKLQltdXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCXJldHVybiByYzsKLX0K LQotLyoqCi0gKiBkc2lfY3RybF9kcnZfZGVpbml0KCkgLSBkZS1pbml0aWFsaXplcyBkc2kgY29u dHJvbGxlciBkcml2ZXIKLSAqIEBkc2lfY3RybDogICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUu Ci0gKgotICogUmVsZWFzZXMgYWxsIHJlc291cmNlcyBhY3F1aXJlZCBieSBkc2lfY3RybF9kcnZf aW5pdCgpLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJsX2Ry dl9kZWluaXQoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCkKLXsKLQlpbnQgcmMgPSAwOwotCi0J aWYgKCFkc2lfY3RybCkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJu IC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0KLQly YyA9IGRzaV9jdHJsX2RlYnVnZnNfZGVpbml0KGRzaV9jdHJsKTsKLQlpZiAocmMpCi0JCXByX2Vy cigiZmFpbGVkIHRvIHJlbGVhc2UgZGVidWdmcyByb290LCByYz0lZFxuIiwgcmMpOwotCi0JcmMg PSBkc2lfY3RybF9idWZmZXJfZGVpbml0KGRzaV9jdHJsKTsKLQlpZiAocmMpCi0JCXByX2Vycigi RmFpbGVkIHRvIGZyZWUgY21kIGJ1ZmZlcnMsIHJjPSVkXG4iLCByYyk7Ci0KLQltdXRleF91bmxv Y2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9jdHJs X2Nsa19jYl9yZWdpc3RlcihzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCXN0cnVjdCBjbGtf Y3RybF9jYiAqY2xrX2NiKQotewotCWlmICghZHNpX2N0cmwgfHwgIWNsa19jYikgewotCQlwcl9l cnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZHNpX2N0 cmwtPmNsa19jYi5wcml2ID0gY2xrX2NiLT5wcml2OwotCWRzaV9jdHJsLT5jbGtfY2IuZHNpX2Ns a19jYiA9IGNsa19jYi0+ZHNpX2Nsa19jYjsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBkc2lf Y3RybF9waHlfc3dfcmVzZXQoKSAtIHBlcmZvcm0gYSBQSFkgc29mdHdhcmUgcmVzZXQKLSAqIEBk c2lfY3RybDogICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKgotICogUGVyZm9ybXMg YSBQSFkgc29mdHdhcmUgcmVzZXQgb24gdGhlIERTSSBjb250cm9sbGVyLiBSZXNldCBzaG91bGQg YmUgZG9uZQotICogd2hlbiB0aGUgY29udHJvbGxlciBwb3dlciBzdGF0ZSBpcyBEU0lfQ1RSTF9Q T1dFUl9DT1JFX0NMS19PTiBhbmQgdGhlIFBIWSBpcwotICogbm90IGVuYWJsZWQuCi0gKgotICog VGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgZHJpdmVyIGlzIGluIGFueSBvdGhlciBzdGF0ZS4K LSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9waHlfc3dfcmVz ZXQoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFk c2lfY3RybCkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0JcmMgPSBkc2lf Y3RybF9jaGVja19zdGF0ZShkc2lfY3RybCwgRFNJX0NUUkxfT1BfUEhZX1NXX1JFU0VULCAweDAp OwotCWlmIChyYykgewotCQlwcl9lcnIoIltEU0lfJWRdIENvbnRyb2xsZXIgc3RhdGUgY2hlY2sg ZmFpbGVkLCByYz0lZFxuIiwKLQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0J CWdvdG8gZXJyb3I7Ci0JfQotCi0JZHNpX2N0cmwtPmh3Lm9wcy5waHlfc3dfcmVzZXQoJmRzaV9j dHJsLT5odyk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gUEhZIHNvZnQgcmVzZXQgZG9uZVxuIiwg ZHNpX2N0cmwtPmNlbGxfaW5kZXgpOwotCWRzaV9jdHJsX3VwZGF0ZV9zdGF0ZShkc2lfY3RybCwg RFNJX0NUUkxfT1BfUEhZX1NXX1JFU0VULCAweDApOwotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZk c2lfY3RybC0+Y3RybF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogZHNpX2N0cmxf c2VhbWxlc3NfdGltaW5nX3VwZGF0ZSgpIC0gdXBkYXRlIG9ubHkgY29udHJvbGxlciB0aW1pbmcK LSAqIEBkc2lfY3RybDogICAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICogQHRpbWlu ZzogICAgICAgICAgICBOZXcgRFNJIHRpbWluZyBpbmZvCi0gKgotICogVXBkYXRlcyBob3N0IHRp bWluZyB2YWx1ZXMgdG8gY29uZHVjdCBhIHNlYW1sZXNzIHRyYW5zaXRpb24gdG8gbmV3IHRpbWlu ZwotICogRm9yIGV4YW1wbGUsIHRvIHVwZGF0ZSB0aGUgcG9yY2ggdmFsdWVzIGluIGEgZHluYW1p YyBmcHMgc3dpdGNoLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9j dHJsX2FzeW5jX3RpbWluZ191cGRhdGUoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJc3Ry dWN0IGRzaV9tb2RlX2luZm8gKnRpbWluZykKLXsKLQlzdHJ1Y3QgZHNpX21vZGVfaW5mbyAqaG9z dF9tb2RlOwotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRzaV9jdHJsIHx8ICF0aW1pbmcpIHsKLQkJ cHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11 dGV4X2xvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCi0JcmMgPSBkc2lfY3RybF9jaGVja19z dGF0ZShkc2lfY3RybCwgRFNJX0NUUkxfT1BfQVNZTkNfVElNSU5HLAotCQkJRFNJX0NUUkxfRU5H SU5FX09OKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbRFNJXyVkXSBDb250cm9sbGVyIHN0YXRl IGNoZWNrIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwg cmMpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaG9zdF9tb2RlID0gJmRzaV9jdHJsLT5ob3N0X2Nv bmZpZy52aWRlb190aW1pbmc7Ci0JbWVtY3B5KGhvc3RfbW9kZSwgdGltaW5nLCBzaXplb2YoKmhv c3RfbW9kZSkpOwotCWRzaV9jdHJsLT5ody5vcHMuc2V0X3RpbWluZ19kYigmZHNpX2N0cmwtPmh3 LCB0cnVlKTsKLQlkc2lfY3RybC0+aHcub3BzLnNldF92aWRlb190aW1pbmcoJmRzaV9jdHJsLT5o dywgaG9zdF9tb2RlKTsKLQotZXhpdDoKLQltdXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xv Y2spOwotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF90aW1pbmdfZGJfdXBkYXRl KCkgLSB1cGRhdGUgb25seSBjb250cm9sbGVyIFRpbWluZyBEQgotICogQGRzaV9jdHJsOiAgICAg ICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAZW5hYmxlOiAgICAgICAgICAgIEVuYWJs ZS9kaXNhYmxlIFRpbWluZyBEQiByZWdpc3RlcgotICoKLSAqICBVcGRhdGUgdGltaW5nIGRiIHJl Z2lzdGVyIHZhbHVlIGR1cmluZyBkZnBzIHVzZWNhc2VzCi0gKgotICogUmV0dXJuOiBlcnJvciBj b2RlLgotICovCi1pbnQgZHNpX2N0cmxfdGltaW5nX2RiX3VwZGF0ZShzdHJ1Y3QgZHNpX2N0cmwg KmRzaV9jdHJsLAotCQlib29sIGVuYWJsZSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkc2lf Y3RybCkgewotCQlwcl9lcnIoIkludmFsaWQgZHNpX2N0cmxcbiIpOwotCQlyZXR1cm4gLUVJTlZB TDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQotCXJjID0gZHNp X2N0cmxfY2hlY2tfc3RhdGUoZHNpX2N0cmwsIERTSV9DVFJMX09QX0FTWU5DX1RJTUlORywKLQkJ CURTSV9DVFJMX0VOR0lORV9PTik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiW0RTSV8lZF0gQ29u dHJvbGxlciBzdGF0ZSBjaGVjayBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAgICAgZHNpX2N0cmwt PmNlbGxfaW5kZXgsIHJjKTsKLQkJZ290byBleGl0OwotCX0KLQotCS8qCi0JICogQWRkIEhXIHJl Y29tbWVuZGVkIGRlbGF5IGZvciBkZnBzIGZlYXR1cmUuCi0JICogV2hlbiBwcmVmZXRjaCBpcyBl bmFibGVkLCBNRFNTIEhXIHdvcmtzIG9uIDIgdnN5bmMKLQkgKiBib3VuZGFyaWVzIGkuZS4gbWRw X3ZzeW5jIGFuZCBwYW5lbF92c3luYy4KLQkgKiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlv biB3ZSBhcmUgb25seSB3YWl0aW5nCi0JICogZm9yIG1kcF92c3luYy4gV2UgbmVlZCB0byBtYWtl IHN1cmUgdGhhdCBpbnRlcmZhY2UKLQkgKiBmbHVzaCBpcyBhZnRlciBwYW5lbF92c3luYy4gU28s IGFkZGVkIHRoZSByZWNvbW1lbmRlZAotCSAqIGRlbGF5cyBhZnRlciBkZnBzIHVwZGF0ZS4KLQkg Ki8KLQl1c2xlZXBfcmFuZ2UoMjAwMCwgMjAxMCk7Ci0KLQlkc2lfY3RybC0+aHcub3BzLnNldF90 aW1pbmdfZGIoJmRzaV9jdHJsLT5odywgZW5hYmxlKTsKLQotZXhpdDoKLQltdXRleF91bmxvY2so JmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9jdHJsX3Nl dHVwKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICgh ZHNpX2N0cmwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlO VkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCi0JZHNpX2N0 cmwtPmh3Lm9wcy5zZXR1cF9sYW5lX21hcCgmZHNpX2N0cmwtPmh3LAotCQkJCQkmZHNpX2N0cmwt Pmhvc3RfY29uZmlnLmxhbmVfbWFwKTsKLQotCWRzaV9jdHJsLT5ody5vcHMuaG9zdF9zZXR1cCgm ZHNpX2N0cmwtPmh3LAotCQkJCSAgICAmZHNpX2N0cmwtPmhvc3RfY29uZmlnLmNvbW1vbl9jb25m aWcpOwotCi0JaWYgKGRzaV9jdHJsLT5ob3N0X2NvbmZpZy5wYW5lbF9tb2RlID09IERTSV9PUF9D TURfTU9ERSkgewotCQlkc2lfY3RybC0+aHcub3BzLmNtZF9lbmdpbmVfc2V0dXAoJmRzaV9jdHJs LT5odywKLQkJCQkJJmRzaV9jdHJsLT5ob3N0X2NvbmZpZy5jb21tb25fY29uZmlnLAotCQkJCQkm ZHNpX2N0cmwtPmhvc3RfY29uZmlnLnUuY21kX2VuZ2luZSk7Ci0KLQkJZHNpX2N0cmwtPmh3Lm9w cy5zZXR1cF9jbWRfc3RyZWFtKCZkc2lfY3RybC0+aHcsCi0JCQkJJmRzaV9jdHJsLT5ob3N0X2Nv bmZpZy52aWRlb190aW1pbmcsCi0JCQkJZHNpX2N0cmwtPmhvc3RfY29uZmlnLnZpZGVvX3RpbWlu Zy5oX2FjdGl2ZSAqIDMsCi0JCQkJMHgwLAotCQkJCSZkc2lfY3RybC0+cm9pKTsKLQkJZHNpX2N0 cmwtPmh3Lm9wcy5jbWRfZW5naW5lX2VuKCZkc2lfY3RybC0+aHcsIHRydWUpOwotCX0gZWxzZSB7 Ci0JCWRzaV9jdHJsLT5ody5vcHMudmlkZW9fZW5naW5lX3NldHVwKCZkc2lfY3RybC0+aHcsCi0J CQkJCSZkc2lfY3RybC0+aG9zdF9jb25maWcuY29tbW9uX2NvbmZpZywKLQkJCQkJJmRzaV9jdHJs LT5ob3N0X2NvbmZpZy51LnZpZGVvX2VuZ2luZSk7Ci0JCWRzaV9jdHJsLT5ody5vcHMuc2V0X3Zp ZGVvX3RpbWluZygmZHNpX2N0cmwtPmh3LAotCQkJCQkgICZkc2lfY3RybC0+aG9zdF9jb25maWcu dmlkZW9fdGltaW5nKTsKLQkJZHNpX2N0cmwtPmh3Lm9wcy52aWRlb19lbmdpbmVfZW4oJmRzaV9j dHJsLT5odywgdHJ1ZSk7Ci0JfQotCi0JZHNpX2N0cmwtPmh3Lm9wcy5lbmFibGVfc3RhdHVzX2lu dGVycnVwdHMoJmRzaV9jdHJsLT5odywgMHgwKTsKLQlkc2lfY3RybC0+aHcub3BzLmVuYWJsZV9l cnJvcl9pbnRlcnJ1cHRzKCZkc2lfY3RybC0+aHcsIDB4MCk7Ci0JZHNpX2N0cmwtPmh3Lm9wcy5j dHJsX2VuKCZkc2lfY3RybC0+aHcsIHRydWUpOwotCi0JbXV0ZXhfdW5sb2NrKCZkc2lfY3RybC0+ Y3RybF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogZHNpX2N0cmxfcGh5X3Jlc2V0 X2NvbmZpZygpIC0gTWFzay91bm1hc2sgcHJvcGFnYXRpb24gb2YgYWhiIHJlc2V0IHNpZ25hbAot ICoJdG8gRFNJIFBIWSBoYXJkd2FyZS4KLSAqIEBkc2lfY3RybDogICAgICAgIERTSSBjb250cm9s bGVyIGhhbmRsZS4KLSAqIEBlbmFibGU6CQkJTWFzay91bm1hc2sgdGhlIFBIWSByZXNldCBzaWdu YWwuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfcGh5X3Jl c2V0X2NvbmZpZyhzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLCBib29sIGVuYWJsZSkKLXsKLQlp ZiAoIWRzaV9jdHJsKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4g LUVJTlZBTDsKLQl9Ci0KLQlpZiAoZHNpX2N0cmwtPmh3Lm9wcy5waHlfcmVzZXRfY29uZmlnKQot CQlkc2lfY3RybC0+aHcub3BzLnBoeV9yZXNldF9jb25maWcoJmRzaV9jdHJsLT5odywgZW5hYmxl KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBkc2lfY3RybF9oYW5kbGVfZXJyb3Jf c3RhdHVzKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCQkJdW5zaWduZWQgbG9uZyBpbnQg ZXJyb3IpCi17Ci0JcHJfZXJyKCIlczogJWx1XG4iLCBfX2Z1bmNfXywgZXJyb3IpOwotCi0JLyog RFRMTiBQSFkgZXJyb3IgKi8KLQlpZiAoZXJyb3IgJiAweDMwMDBlMDApCi0JCWlmIChkc2lfY3Ry bC0+aHcub3BzLmNsZWFyX2Vycm9yX3N0YXR1cykKLQkJCWRzaV9jdHJsLT5ody5vcHMuY2xlYXJf ZXJyb3Jfc3RhdHVzKCZkc2lfY3RybC0+aHcsCi0JCQkJCTB4MzAwMGUwMCk7Ci0KLQkvKiBEU0kg RklGTyBPVkVSRkxPVyBlcnJvciAqLwotCWlmIChlcnJvciAmIDB4ZjAwMDApIHsKLQkJaWYgKGRz aV9jdHJsLT5ody5vcHMuY2xlYXJfZXJyb3Jfc3RhdHVzKQotCQkJZHNpX2N0cmwtPmh3Lm9wcy5j bGVhcl9lcnJvcl9zdGF0dXMoJmRzaV9jdHJsLT5odywKLQkJCQkJMHhmMDAwMCk7Ci0JfQotCi0J LyogRFNJIEZJRk8gVU5ERVJGTE9XIGVycm9yICovCi0JaWYgKGVycm9yICYgMHhmMDAwMDApIHsK LQkJaWYgKGRzaV9jdHJsLT5ody5vcHMuY2xlYXJfZXJyb3Jfc3RhdHVzKQotCQkJZHNpX2N0cmwt Pmh3Lm9wcy5jbGVhcl9lcnJvcl9zdGF0dXMoJmRzaV9jdHJsLT5odywKLQkJCQkJMHhmMDAwMDAp OwotCX0KLQotCS8qIERTSSBQTEwgVU5MT0NLIGVycm9yICovCi0JaWYgKGVycm9yICYgQklUKDgp KQotCQlpZiAoZHNpX2N0cmwtPmh3Lm9wcy5jbGVhcl9lcnJvcl9zdGF0dXMpCi0JCQlkc2lfY3Ry bC0+aHcub3BzLmNsZWFyX2Vycm9yX3N0YXR1cygmZHNpX2N0cmwtPmh3LAotCQkJCQlCSVQoOCkp OwotfQotCi0vKioKLSAqIGRzaV9jdHJsX2lzciAtIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUg Zm9yIERTSSBDVFJMIGNvbXBvbmVudAotICogQGlycTogSW5jb21pbmcgSVJRIG51bWJlcgotICog QHB0cjogUG9pbnRlciB0byB1c2VyIGRhdGEgc3RydWN0dXJlIChzdHJ1Y3QgZHNpX2N0cmwpCi0g KiBSZXR1cm5zOiBJUlFfSEFORExFRCBpZiBubyBmdXJ0aGVyIGFjdGlvbiByZXF1aXJlZAotICov Ci1zdGF0aWMgaXJxcmV0dXJuX3QgZHNpX2N0cmxfaXNyKGludCBpcnEsIHZvaWQgKnB0cikKLXsK LQlzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsOwotCXN0cnVjdCBkc2lfZXZlbnRfY2JfaW5mbyBj Yl9pbmZvOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdWludDMyX3QgY2VsbF9pbmRleCwgc3Rh dHVzLCBpOwotCXVpbnQ2NF90IGVycm9yczsKLQotCWlmICghcHRyKQotCQlyZXR1cm4gSVJRX05P TkU7Ci0JZHNpX2N0cmwgPSBwdHI7Ci0KLQkvKiBjbGVhciBzdGF0dXMgaW50ZXJydXB0cyAqLwot CWlmIChkc2lfY3RybC0+aHcub3BzLmdldF9pbnRlcnJ1cHRfc3RhdHVzKQotCQlzdGF0dXMgPSBk c2lfY3RybC0+aHcub3BzLmdldF9pbnRlcnJ1cHRfc3RhdHVzKCZkc2lfY3RybC0+aHcpOwotCWVs c2UKLQkJc3RhdHVzID0gMHgwOwotCi0JaWYgKGRzaV9jdHJsLT5ody5vcHMuY2xlYXJfaW50ZXJy dXB0X3N0YXR1cykKLQkJZHNpX2N0cmwtPmh3Lm9wcy5jbGVhcl9pbnRlcnJ1cHRfc3RhdHVzKCZk c2lfY3RybC0+aHcsIHN0YXR1cyk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZHNpX2N0cmwtPmly cV9pbmZvLmlycV9sb2NrLCBmbGFncyk7Ci0JY2VsbF9pbmRleCA9IGRzaV9jdHJsLT5jZWxsX2lu ZGV4OwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRzaV9jdHJsLT5pcnFfaW5mby5pcnFfbG9j aywgZmxhZ3MpOwotCi0JLyogY2xlYXIgZXJyb3IgaW50ZXJydXB0cyAqLwotCWlmIChkc2lfY3Ry bC0+aHcub3BzLmdldF9lcnJvcl9zdGF0dXMpCi0JCWVycm9ycyA9IGRzaV9jdHJsLT5ody5vcHMu Z2V0X2Vycm9yX3N0YXR1cygmZHNpX2N0cmwtPmh3KTsKLQllbHNlCi0JCWVycm9ycyA9IDB4MDsK LQotCWlmIChlcnJvcnMpIHsKLQkJLyogaGFuZGxlIERTSSBlcnJvciByZWNvdmVyeSAqLwotCQlk c2lfY3RybF9oYW5kbGVfZXJyb3Jfc3RhdHVzKGRzaV9jdHJsLCBlcnJvcnMpOwotCQlpZiAoZHNp X2N0cmwtPmh3Lm9wcy5jbGVhcl9lcnJvcl9zdGF0dXMpCi0JCQlkc2lfY3RybC0+aHcub3BzLmNs ZWFyX2Vycm9yX3N0YXR1cygmZHNpX2N0cmwtPmh3LAotCQkJCQkJCWVycm9ycyk7Ci0JfQotCi0J aWYgKHN0YXR1cyAmIERTSV9DTURfTU9ERV9ETUFfRE9ORSkgewotCQlkc2lfY3RybF9kaXNhYmxl X3N0YXR1c19pbnRlcnJ1cHQoZHNpX2N0cmwsCi0JCQkJCURTSV9TSU5UX0NNRF9NT0RFX0RNQV9E T05FKTsKLQkJY29tcGxldGVfYWxsKCZkc2lfY3RybC0+aXJxX2luZm8uY21kX2RtYV9kb25lKTsK LQl9Ci0KLQlpZiAoc3RhdHVzICYgRFNJX0NNRF9GUkFNRV9ET05FKSB7Ci0JCWRzaV9jdHJsX2Rp c2FibGVfc3RhdHVzX2ludGVycnVwdChkc2lfY3RybCwKLQkJCQkJRFNJX1NJTlRfQ01EX0ZSQU1F X0RPTkUpOwotCQljb21wbGV0ZV9hbGwoJmRzaV9jdHJsLT5pcnFfaW5mby5jbWRfZnJhbWVfZG9u ZSk7Ci0JfQotCi0JaWYgKHN0YXR1cyAmIERTSV9WSURFT19NT0RFX0ZSQU1FX0RPTkUpIHsKLQkJ ZHNpX2N0cmxfZGlzYWJsZV9zdGF0dXNfaW50ZXJydXB0KGRzaV9jdHJsLAotCQkJCQlEU0lfU0lO VF9WSURFT19NT0RFX0ZSQU1FX0RPTkUpOwotCQljb21wbGV0ZV9hbGwoJmRzaV9jdHJsLT5pcnFf aW5mby52aWRfZnJhbWVfZG9uZSk7Ci0JfQotCi0JaWYgKHN0YXR1cyAmIERTSV9CVEFfRE9ORSkg ewotCQlkc2lfY3RybF9kaXNhYmxlX3N0YXR1c19pbnRlcnJ1cHQoZHNpX2N0cmwsCi0JCQkJCURT SV9TSU5UX0JUQV9ET05FKTsKLQkJY29tcGxldGVfYWxsKCZkc2lfY3RybC0+aXJxX2luZm8uYnRh X2RvbmUpOwotCX0KLQotCWZvciAoaSA9IDA7IHN0YXR1cyAmJiBpIDwgRFNJX1NUQVRVU19JTlRF UlJVUFRfQ09VTlQ7ICsraSkgewotCQlpZiAoc3RhdHVzICYgMHgxKSB7Ci0JCQlzcGluX2xvY2tf aXJxc2F2ZSgmZHNpX2N0cmwtPmlycV9pbmZvLmlycV9sb2NrLCBmbGFncyk7Ci0JCQljYl9pbmZv ID0gZHNpX2N0cmwtPmlycV9pbmZvLmlycV9zdGF0X2NiW2ldOwotCQkJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgKLQkJCQkJJmRzaV9jdHJsLT5pcnFfaW5mby5pcnFfbG9jaywgZmxhZ3MpOwotCi0J CQlpZiAoY2JfaW5mby5ldmVudF9jYikKLQkJCQkodm9pZCljYl9pbmZvLmV2ZW50X2NiKGNiX2lu Zm8uZXZlbnRfdXNyX3B0ciwKLQkJCQkJCWNiX2luZm8uZXZlbnRfaWR4LAotCQkJCQkJY2VsbF9p bmRleCwgaXJxLCAwLCAwLCAwKTsKLQkJfQotCQlzdGF0dXMgPj49IDE7Ci0JfQotCi0JcmV0dXJu IElSUV9IQU5ETEVEOwotfQotCi0vKioKLSAqIF9kc2lfY3RybF9zZXR1cF9pc3IgLSByZWdpc3Rl ciBJU1IgaGFuZGxlcgotICogQGRzaV9jdHJsOiBQb2ludGVyIHRvIGFzc29jaWF0ZWQgZHNpX2N0 cmwgc3RydWN0dXJlCi0gKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLSAqLwotc3RhdGljIGlu dCBkc2lfY3RybF9zZXR1cF9pc3Ioc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCkKLXsKLQlpbnQg aXJxX251bSwgcmM7Ci0KLQlpZiAoIWRzaV9jdHJsKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAo ZHNpX2N0cmwtPmlycV9pbmZvLmlycV9udW0gIT0gLTEpCi0JCXJldHVybiAwOwotCi0JaW5pdF9j b21wbGV0aW9uKCZkc2lfY3RybC0+aXJxX2luZm8uY21kX2RtYV9kb25lKTsKLQlpbml0X2NvbXBs ZXRpb24oJmRzaV9jdHJsLT5pcnFfaW5mby52aWRfZnJhbWVfZG9uZSk7Ci0JaW5pdF9jb21wbGV0 aW9uKCZkc2lfY3RybC0+aXJxX2luZm8uY21kX2ZyYW1lX2RvbmUpOwotCWluaXRfY29tcGxldGlv bigmZHNpX2N0cmwtPmlycV9pbmZvLmJ0YV9kb25lKTsKLQotCWlycV9udW0gPSBwbGF0Zm9ybV9n ZXRfaXJxKGRzaV9jdHJsLT5wZGV2LCAwKTsKLQlpZiAoaXJxX251bSA8IDApIHsKLQkJcHJfZXJy KCJbRFNJXyVkXSBGYWlsZWQgdG8gZ2V0IElSUSBudW1iZXIsICVkXG4iLAotCQkJCWRzaV9jdHJs LT5jZWxsX2luZGV4LCBpcnFfbnVtKTsKLQkJcmMgPSBpcnFfbnVtOwotCX0gZWxzZSB7Ci0JCXJj ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycSgmZHNpX2N0cmwtPnBkZXYtPmRldiwgaXJxX251 bSwKLQkJCQlkc2lfY3RybF9pc3IsIE5VTEwsIDAsICJkc2lfY3RybCIsIGRzaV9jdHJsKTsKLQkJ aWYgKHJjKSB7Ci0JCQlwcl9lcnIoIltEU0lfJWRdIEZhaWxlZCB0byByZXF1ZXN0IElSUSwgJWRc biIsCi0JCQkJCWRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0JCX0gZWxzZSB7Ci0JCQlkc2lf Y3RybC0+aXJxX2luZm8uaXJxX251bSA9IGlycV9udW07Ci0JCQlkaXNhYmxlX2lycV9ub3N5bmMo aXJxX251bSk7Ci0KLQkJCXByX2RlYnVnKCJbRFNJXyVkXSBJUlEgJWQgcmVnaXN0ZXJlZFxuIiwK LQkJCQkJZHNpX2N0cmwtPmNlbGxfaW5kZXgsIGlycV9udW0pOwotCQl9Ci0JfQotCXJldHVybiBy YzsKLX0KLQotLyoqCi0gKiBfZHNpX2N0cmxfZGVzdHJveV9pc3IgLSB1bnJlZ2lzdGVyIElTUiBo YW5kbGVyCi0gKiBAZHNpX2N0cmw6IFBvaW50ZXIgdG8gYXNzb2NpYXRlZCBkc2lfY3RybCBzdHJ1 Y3R1cmUKLSAqLwotc3RhdGljIHZvaWQgX2RzaV9jdHJsX2Rlc3Ryb3lfaXNyKHN0cnVjdCBkc2lf Y3RybCAqZHNpX2N0cmwpCi17Ci0JaWYgKCFkc2lfY3RybCB8fCAhZHNpX2N0cmwtPnBkZXYgfHwg ZHNpX2N0cmwtPmlycV9pbmZvLmlycV9udW0gPCAwKQotCQlyZXR1cm47Ci0KLQlpZiAoZHNpX2N0 cmwtPmlycV9pbmZvLmlycV9udW0gIT0gLTEpIHsKLQkJZGV2bV9mcmVlX2lycSgmZHNpX2N0cmwt PnBkZXYtPmRldiwKLQkJCQlkc2lfY3RybC0+aXJxX2luZm8uaXJxX251bSwgZHNpX2N0cmwpOwot CQlkc2lfY3RybC0+aXJxX2luZm8uaXJxX251bSA9IC0xOwotCX0KLX0KLQotdm9pZCBkc2lfY3Ry bF9lbmFibGVfc3RhdHVzX2ludGVycnVwdChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQl1 aW50MzJfdCBpbnRyX2lkeCwgc3RydWN0IGRzaV9ldmVudF9jYl9pbmZvICpldmVudF9pbmZvKQot ewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIWRzaV9jdHJsIHx8IGRzaV9jdHJsLT5p cnFfaW5mby5pcnFfbnVtID09IC0xIHx8Ci0JCQlpbnRyX2lkeCA+PSBEU0lfU1RBVFVTX0lOVEVS UlVQVF9DT1VOVCkKLQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRzaV9jdHJsLT5p cnFfaW5mby5pcnFfbG9jaywgZmxhZ3MpOwotCi0JaWYgKGRzaV9jdHJsLT5pcnFfaW5mby5pcnFf c3RhdF9yZWZjb3VudFtpbnRyX2lkeF0gPT0gMCkgewotCQkvKiBlbmFibGUgaXJxIG9uIGZpcnN0 IHJlcXVlc3QgKi8KLQkJaWYgKGRzaV9jdHJsLT5pcnFfaW5mby5pcnFfc3RhdF9tYXNrID09IDAp Ci0JCQllbmFibGVfaXJxKGRzaV9jdHJsLT5pcnFfaW5mby5pcnFfbnVtKTsKLQotCQkvKiB1cGRh dGUgaGFyZHdhcmUgbWFzayAqLwotCQlkc2lfY3RybC0+aXJxX2luZm8uaXJxX3N0YXRfbWFzayB8 PSBCSVQoaW50cl9pZHgpOwotCQlkc2lfY3RybC0+aHcub3BzLmVuYWJsZV9zdGF0dXNfaW50ZXJy dXB0cygmZHNpX2N0cmwtPmh3LAotCQkJCWRzaV9jdHJsLT5pcnFfaW5mby5pcnFfc3RhdF9tYXNr KTsKLQl9Ci0JKysoZHNpX2N0cmwtPmlycV9pbmZvLmlycV9zdGF0X3JlZmNvdW50W2ludHJfaWR4 XSk7Ci0KLQlpZiAoZXZlbnRfaW5mbykKLQkJZHNpX2N0cmwtPmlycV9pbmZvLmlycV9zdGF0X2Ni W2ludHJfaWR4XSA9ICpldmVudF9pbmZvOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHNp X2N0cmwtPmlycV9pbmZvLmlycV9sb2NrLCBmbGFncyk7Ci19Ci0KLXZvaWQgZHNpX2N0cmxfZGlz YWJsZV9zdGF0dXNfaW50ZXJydXB0KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCXVpbnQz Ml90IGludHJfaWR4KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIWRzaV9jdHJs IHx8IGRzaV9jdHJsLT5pcnFfaW5mby5pcnFfbnVtID09IC0xIHx8Ci0JCQlpbnRyX2lkeCA+PSBE U0lfU1RBVFVTX0lOVEVSUlVQVF9DT1VOVCkKLQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrX2lycXNh dmUoJmRzaV9jdHJsLT5pcnFfaW5mby5pcnFfbG9jaywgZmxhZ3MpOwotCi0JaWYgKGRzaV9jdHJs LT5pcnFfaW5mby5pcnFfc3RhdF9yZWZjb3VudFtpbnRyX2lkeF0pCi0JCWlmICgtLShkc2lfY3Ry bC0+aXJxX2luZm8uaXJxX3N0YXRfcmVmY291bnRbaW50cl9pZHhdKSA9PSAwKSB7Ci0JCQlkc2lf Y3RybC0+aXJxX2luZm8uaXJxX3N0YXRfbWFzayAmPSB+QklUKGludHJfaWR4KTsKLQkJCWRzaV9j dHJsLT5ody5vcHMuZW5hYmxlX3N0YXR1c19pbnRlcnJ1cHRzKCZkc2lfY3RybC0+aHcsCi0JCQkJ CWRzaV9jdHJsLT5pcnFfaW5mby5pcnFfc3RhdF9tYXNrKTsKLQotCQkJLyogZG9uJ3QgbmVlZCBp cnEgaWYgbm8gbGluZXMgYXJlIGVuYWJsZWQgKi8KLQkJCWlmIChkc2lfY3RybC0+aXJxX2luZm8u aXJxX3N0YXRfbWFzayA9PSAwKQotCQkJCWRpc2FibGVfaXJxX25vc3luYyhkc2lfY3RybC0+aXJx X2luZm8uaXJxX251bSk7Ci0JCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRzaV9jdHJs LT5pcnFfaW5mby5pcnFfbG9jaywgZmxhZ3MpOwotfQotCi1pbnQgZHNpX2N0cmxfaG9zdF90aW1p bmdfdXBkYXRlKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpCi17Ci0JaWYgKCFkc2lfY3RybCkg ewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JaWYgKGRzaV9jdHJsLT5ody5vcHMuaG9zdF9zZXR1cCkKLQkJZHNpX2N0cmwtPmh3Lm9wcy5o b3N0X3NldHVwKCZkc2lfY3RybC0+aHcsCi0JCQkJJmRzaV9jdHJsLT5ob3N0X2NvbmZpZy5jb21t b25fY29uZmlnKTsKLQotCWlmIChkc2lfY3RybC0+aG9zdF9jb25maWcucGFuZWxfbW9kZSA9PSBE U0lfT1BfQ01EX01PREUpIHsKLQkJaWYgKGRzaV9jdHJsLT5ody5vcHMuY21kX2VuZ2luZV9zZXR1 cCkKLQkJCWRzaV9jdHJsLT5ody5vcHMuY21kX2VuZ2luZV9zZXR1cCgmZHNpX2N0cmwtPmh3LAot CQkJCQkmZHNpX2N0cmwtPmhvc3RfY29uZmlnLmNvbW1vbl9jb25maWcsCi0JCQkJCSZkc2lfY3Ry bC0+aG9zdF9jb25maWcudS5jbWRfZW5naW5lKTsKLQotCQlpZiAoZHNpX2N0cmwtPmh3Lm9wcy5z ZXR1cF9jbWRfc3RyZWFtKQotCQkJZHNpX2N0cmwtPmh3Lm9wcy5zZXR1cF9jbWRfc3RyZWFtKCZk c2lfY3RybC0+aHcsCi0JCQkJJmRzaV9jdHJsLT5ob3N0X2NvbmZpZy52aWRlb190aW1pbmcsCi0J CQkJZHNpX2N0cmwtPmhvc3RfY29uZmlnLnZpZGVvX3RpbWluZy5oX2FjdGl2ZSAqIDMsCi0JCQkJ MHgwLCBOVUxMKTsKLQl9IGVsc2UgewotCQlwcl9lcnIoImludmFsaWQgcGFuZWwgbW9kZSBmb3Ig cmVzb2x1dGlvbiBzd2l0Y2hcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4g MDsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9ob3N0X2luaXQoKSAtIEluaXRpYWxpemUgRFNJIGhv c3QgaGFyZHdhcmUuCi0gKiBAZHNpX2N0cmw6ICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUu Ci0gKgotICogSW5pdGlhbGl6ZXMgRFNJIGNvbnRyb2xsZXIgaGFyZHdhcmUgd2l0aCBob3N0IGNv bmZpZ3VyYXRpb24gcHJvdmlkZWQgYnkKLSAqIGRzaV9jdHJsX3VwZGF0ZV9ob3N0X2NvbmZpZygp LiBJbml0aWFsaXphdGlvbiBjYW4gYmUgcGVyZm9ybWVkIG9ubHkgZHVyaW5nCi0gKiBEU0lfQ1RS TF9QT1dFUl9DT1JFX0NMS19PTiBzdGF0ZSBhbmQgYWZ0ZXIgdGhlIFBIWSBTVyByZXNldCBoYXMg YmVlbgotICogcGVyZm9ybWVkLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50 IGRzaV9jdHJsX2hvc3RfaW5pdChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsKQotewotCWludCBy YyA9IDA7Ci0KLQlpZiAoIWRzaV9jdHJsKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIp OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkc2lfY3RybC0+Y3RybF9s b2NrKTsKLQlyYyA9IGRzaV9jdHJsX2NoZWNrX3N0YXRlKGRzaV9jdHJsLCBEU0lfQ1RSTF9PUF9I T1NUX0lOSVQsIDB4MSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiW0RTSV8lZF0gQ29udHJvbGxl ciBzdGF0ZSBjaGVjayBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAgICAgZHNpX2N0cmwtPmNlbGxf aW5kZXgsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlkc2lfY3RybC0+aHcub3BzLnNldHVw X2xhbmVfbWFwKCZkc2lfY3RybC0+aHcsCi0JCQkJCSZkc2lfY3RybC0+aG9zdF9jb25maWcubGFu ZV9tYXApOwotCi0JZHNpX2N0cmwtPmh3Lm9wcy5ob3N0X3NldHVwKCZkc2lfY3RybC0+aHcsCi0J CQkJICAgICZkc2lfY3RybC0+aG9zdF9jb25maWcuY29tbW9uX2NvbmZpZyk7Ci0KLQlpZiAoZHNp X2N0cmwtPmhvc3RfY29uZmlnLnBhbmVsX21vZGUgPT0gRFNJX09QX0NNRF9NT0RFKSB7Ci0JCWRz aV9jdHJsLT5ody5vcHMuY21kX2VuZ2luZV9zZXR1cCgmZHNpX2N0cmwtPmh3LAotCQkJCQkmZHNp X2N0cmwtPmhvc3RfY29uZmlnLmNvbW1vbl9jb25maWcsCi0JCQkJCSZkc2lfY3RybC0+aG9zdF9j b25maWcudS5jbWRfZW5naW5lKTsKLQotCQlkc2lfY3RybC0+aHcub3BzLnNldHVwX2NtZF9zdHJl YW0oJmRzaV9jdHJsLT5odywKLQkJCQkmZHNpX2N0cmwtPmhvc3RfY29uZmlnLnZpZGVvX3RpbWlu ZywKLQkJCQlkc2lfY3RybC0+aG9zdF9jb25maWcudmlkZW9fdGltaW5nLmhfYWN0aXZlICogMywK LQkJCQkweDAsCi0JCQkJTlVMTCk7Ci0JfSBlbHNlIHsKLQkJZHNpX2N0cmwtPmh3Lm9wcy52aWRl b19lbmdpbmVfc2V0dXAoJmRzaV9jdHJsLT5odywKLQkJCQkJJmRzaV9jdHJsLT5ob3N0X2NvbmZp Zy5jb21tb25fY29uZmlnLAotCQkJCQkmZHNpX2N0cmwtPmhvc3RfY29uZmlnLnUudmlkZW9fZW5n aW5lKTsKLQkJZHNpX2N0cmwtPmh3Lm9wcy5zZXRfdmlkZW9fdGltaW5nKCZkc2lfY3RybC0+aHcs Ci0JCQkJCSAgJmRzaV9jdHJsLT5ob3N0X2NvbmZpZy52aWRlb190aW1pbmcpOwotCX0KLQotCWRz aV9jdHJsX3NldHVwX2lzcihkc2lfY3RybCk7Ci0KLQlkc2lfY3RybC0+aHcub3BzLmVuYWJsZV9z dGF0dXNfaW50ZXJydXB0cygmZHNpX2N0cmwtPmh3LCAweDApOwotCWRzaV9jdHJsLT5ody5vcHMu ZW5hYmxlX2Vycm9yX2ludGVycnVwdHMoJmRzaV9jdHJsLT5odywgMHgwKTsKLQotCXByX2RlYnVn KCJbRFNJXyVkXUhvc3QgaW5pdGlhbGl6YXRpb24gY29tcGxldGVcbiIsCi0JCWRzaV9jdHJsLT5j ZWxsX2luZGV4KTsKLQlkc2lfY3RybF91cGRhdGVfc3RhdGUoZHNpX2N0cmwsIERTSV9DVFJMX09Q X0hPU1RfSU5JVCwgMHgxKTsKLWVycm9yOgotCW11dGV4X3VubG9jaygmZHNpX2N0cmwtPmN0cmxf bG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX2N0cmxfc29mdF9yZXNldChzdHJ1Y3Qg ZHNpX2N0cmwgKmRzaV9jdHJsKQotewotCWlmICghZHNpX2N0cmwpCi0JCXJldHVybiAtRUlOVkFM OwotCi0JbXV0ZXhfbG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0JZHNpX2N0cmwtPmh3Lm9w cy5zb2Z0X3Jlc2V0KCZkc2lfY3RybC0+aHcpOwotCW11dGV4X3VubG9jaygmZHNpX2N0cmwtPmN0 cmxfbG9jayk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF1Tb2Z0IHJlc2V0IGNvbXBsZXRlXG4iLCBk c2lfY3RybC0+Y2VsbF9pbmRleCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZHNpX2N0cmxf aG9zdF9kZWluaXQoKSAtIERlLUluaXRpYWxpemUgRFNJIGhvc3QgaGFyZHdhcmUuCi0gKiBAZHNp X2N0cmw6ICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKgotICogRGUtaW5pdGlhbGl6 ZXMgRFNJIGNvbnRyb2xsZXIgaGFyZHdhcmUuIEl0IGNhbiBiZSBwZXJmb3JtZWQgb25seSBkdXJp bmcKLSAqIERTSV9DVFJMX1BPV0VSX0NPUkVfQ0xLX09OIHN0YXRlIGFmdGVyIExJTksgY2xvY2tz IGhhdmUgYmVlbiB0dXJuZWQgb2ZmLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwot aW50IGRzaV9jdHJsX2hvc3RfZGVpbml0KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpCi17Ci0J aW50IHJjID0gMDsKLQotCWlmICghZHNpX2N0cmwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFt c1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRzaV9jdHJsLT5j dHJsX2xvY2spOwotCi0JX2RzaV9jdHJsX2Rlc3Ryb3lfaXNyKGRzaV9jdHJsKTsKLQotCXJjID0g ZHNpX2N0cmxfY2hlY2tfc3RhdGUoZHNpX2N0cmwsIERTSV9DVFJMX09QX0hPU1RfSU5JVCwgMHgw KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbRFNJXyVkXSBDb250cm9sbGVyIHN0YXRlIGNoZWNr IGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwgcmMpOwot CQlwcl9lcnIoImRyaXZlciBzdGF0ZSBjaGVjayBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Ci0JCWdv dG8gZXJyb3I7Ci0JfQotCi0JcHJfZGVidWcoIltEU0lfJWRdIEhvc3QgZGVpbml0aXphdGlvbiBj b21wbGV0ZVxuIiwKLQkJZHNpX2N0cmwtPmNlbGxfaW5kZXgpOwotCWRzaV9jdHJsX3VwZGF0ZV9z dGF0ZShkc2lfY3RybCwgRFNJX0NUUkxfT1BfSE9TVF9JTklULCAweDApOwotZXJyb3I6Ci0JbXV0 ZXhfdW5sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgot ICogZHNpX2N0cmxfdXBkYXRlX2hvc3RfY29uZmlnKCkgLSB1cGRhdGUgZHNpIGhvc3QgY29uZmln dXJhdGlvbgotICogQGRzaV9jdHJsOiAgICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0g KiBAY29uZmlnOiAgICAgICAgICAgIERTSSBob3N0IGNvbmZpZ3VyYXRpb24uCi0gKiBAZmxhZ3M6 ICAgICAgICAgICAgIGRzaV9tb2RlX2ZsYWdzIG1vZGlmeWluZyB0aGUgYmVoYXZpb3IKLSAqCi0g KiBVcGRhdGVzIGRyaXZlciB3aXRoIG5ldyBIb3N0IGNvbmZpZ3VyYXRpb24gdG8gdXNlIGZvciBo b3N0IGluaXRpYWxpemF0aW9uLgotICogVGhpcyBmdW5jdGlvbiBjYWxsIHdpbGwgb25seSB1cGRh dGUgdGhlIHNvZnR3YXJlIGNvbnRleHQuIFRoZSBzdG9yZWQKLSAqIGNvbmZpZ3VyYXRpb24gaW5m b3JtYXRpb24gd2lsbCBiZSB1c2VkIHdoZW4gdGhlIGhvc3QgaXMgaW5pdGlhbGl6ZWQuCi0gKgot ICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfdXBkYXRlX2hvc3RfY29u ZmlnKHN0cnVjdCBkc2lfY3RybCAqY3RybCwKLQkJCQlzdHJ1Y3QgZHNpX2hvc3RfY29uZmlnICpj b25maWcsCi0JCQkJaW50IGZsYWdzLCB2b2lkICpjbGtfaGFuZGxlKQotewotCWludCByYyA9IDA7 Ci0KLQlpZiAoIWN0cmwgfHwgIWNvbmZpZykgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4i KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmY3RybC0+Y3RybF9sb2Nr KTsKLQotCXJjID0gZHNpX2N0cmxfdmFsaWRhdGVfcGFuZWxfaW5mbyhjdHJsLCBjb25maWcpOwot CWlmIChyYykgewotCQlwcl9lcnIoInBhbmVsIHZhbGlkYXRpb24gZmFpbGVkLCByYz0lZFxuIiwg cmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmICghKGZsYWdzICYgKERTSV9NT0RFX0ZMQUdf U0VBTUxFU1MgfCBEU0lfTU9ERV9GTEFHX1ZSUikpKSB7Ci0JCXJjID0gZHNpX2N0cmxfdXBkYXRl X2xpbmtfZnJlcXMoY3RybCwgY29uZmlnLCBjbGtfaGFuZGxlKTsKLQkJaWYgKHJjKSB7Ci0JCQlw cl9lcnIoIlslc10gZmFpbGVkIHRvIHVwZGF0ZSBsaW5rIGZyZXF1ZW5jaWVzLCByYz0lZFxuIiwK LQkJCSAgICAgICBjdHJsLT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi0J cHJfZGVidWcoIltEU0lfJWRdSG9zdCBjb25maWcgdXBkYXRlZFxuIiwgY3RybC0+Y2VsbF9pbmRl eCk7Ci0JbWVtY3B5KCZjdHJsLT5ob3N0X2NvbmZpZywgY29uZmlnLCBzaXplb2YoY3RybC0+aG9z dF9jb25maWcpKTsKLQljdHJsLT5tb2RlX2JvdW5kcy54ID0gY3RybC0+aG9zdF9jb25maWcudmlk ZW9fdGltaW5nLmhfYWN0aXZlICoKLQkJCWN0cmwtPmhvcml6X2luZGV4OwotCWN0cmwtPm1vZGVf Ym91bmRzLnkgPSAwOwotCWN0cmwtPm1vZGVfYm91bmRzLncgPSBjdHJsLT5ob3N0X2NvbmZpZy52 aWRlb190aW1pbmcuaF9hY3RpdmU7Ci0JY3RybC0+bW9kZV9ib3VuZHMuaCA9IGN0cmwtPmhvc3Rf Y29uZmlnLnZpZGVvX3RpbWluZy52X2FjdGl2ZTsKLQltZW1jcHkoJmN0cmwtPnJvaSwgJmN0cmwt Pm1vZGVfYm91bmRzLCBzaXplb2YoY3RybC0+bW9kZV9ib3VuZHMpKTsKLQljdHJsLT5yb2kueCA9 IDA7Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJmN0cmwtPmN0cmxfbG9jayk7Ci0JcmV0dXJuIHJj OwotfQotCi0vKioKLSAqIGRzaV9jdHJsX3ZhbGlkYXRlX3RpbWluZygpIC0gdmFsaWRhdGUgYSB2 aWRlbyB0aW1pbmcgY29uZmlndXJhdGlvbgotICogQGRzaV9jdHJsOiAgICAgICBEU0kgY29udHJv bGxlciBoYW5kbGUuCi0gKiBAdGltaW5nOiAgICAgICAgIFBvaW50ZXIgdG8gdGltaW5nIGRhdGEu Ci0gKgotICogRHJpdmVyIHdpbGwgdmFsaWRhdGUgaWYgdGhlIHRpbWluZyBjb25maWd1cmF0aW9u IGlzIHN1cHBvcnRlZCBvbiB0aGUKLSAqIGNvbnRyb2xsZXIgaGFyZHdhcmUuCi0gKgotICogUmV0 dXJuOiBlcnJvciBjb2RlIGlmIHRpbWluZyBpcyBub3Qgc3VwcG9ydGVkLgotICovCi1pbnQgZHNp X2N0cmxfdmFsaWRhdGVfdGltaW5nKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCQkgICAg IHN0cnVjdCBkc2lfbW9kZV9pbmZvICptb2RlKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRz aV9jdHJsIHx8ICFtb2RlKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1 cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQlt dXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCi0JcmV0dXJuIHJjOwotfQotCi0v KioKLSAqIGRzaV9jdHJsX2NtZF90cmFuc2ZlcigpIC0gVHJhbnNmZXIgY29tbWFuZHMgb24gRFNJ IGxpbmsKLSAqIEBkc2lfY3RybDogICAgICAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgot ICogQG1zZzogICAgICAgICAgICAgICAgICBNZXNzYWdlIHRvIHRyYW5zZmVyIG9uIERTSSBsaW5r LgotICogQGZsYWdzOiAgICAgICAgICAgICAgICBNb2RpZmllcnMgZm9yIG1lc3NhZ2UgdHJhbnNm ZXIuCi0gKgotICogQ29tbWFuZCB0cmFuc2ZlciBjYW4gYmUgZG9uZSBvbmx5IHdoZW4gY29tbWFu ZCBlbmdpbmUgaXMgZW5hYmxlZC4gVGhlCi0gKiB0cmFuc2ZlciBBUEkgd2lsbCBibG9jayB1bnRp bCBlaXRoZXIgdGhlIGNvbW1hbmQgdHJhbnNmZXIgZmluaXNoZXMgb3IKLSAqIHRoZSB0aW1lb3V0 IHZhbHVlIGlzIHJlYWNoZWQuIElmIHRoZSB0cmlnZ2VyIGlzIGRlZmVycmVkLCBpdCB3aWxsIHJl dHVybgotICogd2l0aG91dCB0cmlnZ2VyaW5nIHRoZSB0cmFuc2Zlci4gQ29tbWFuZCBwYXJhbWV0 ZXJzIGFyZSBwcm9ncmFtbWVkIHRvCi0gKiBoYXJkd2FyZS4KLSAqCi0gKiBSZXR1cm46IGVycm9y IGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9jbWRfdHJhbnNmZXIoc3RydWN0IGRzaV9jdHJsICpk c2lfY3RybCwKLQkJCSAgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnLAotCQkJICB1MzIg ZmxhZ3MpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghZHNpX2N0cmwgfHwgIW1zZykgewotCQlw cl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0 ZXhfbG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0KLQlyYyA9IGRzaV9jdHJsX2NoZWNrX3N0 YXRlKGRzaV9jdHJsLCBEU0lfQ1RSTF9PUF9DTURfVFgsIDB4MCk7Ci0JaWYgKHJjKSB7Ci0JCXBy X2VycigiW0RTSV8lZF0gQ29udHJvbGxlciBzdGF0ZSBjaGVjayBmYWlsZWQsIHJjPSVkXG4iLAot CQkgICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0K LQlpZiAoZmxhZ3MgJiBEU0lfQ1RSTF9DTURfUkVBRCkgewotCQlyYyA9IGRzaV9tZXNzYWdlX3J4 KGRzaV9jdHJsLCBtc2csIGZsYWdzKTsKLQkJaWYgKHJjKQotCQkJcHJfZXJyKCJyZWFkIG1lc3Nh Z2UgZmFpbGVkLCByYz0lZFxuIiwgcmMpOwotCX0gZWxzZSB7Ci0JCXJjID0gZHNpX21lc3NhZ2Vf dHgoZHNpX2N0cmwsIG1zZywgZmxhZ3MpOwotCQlpZiAocmMpCi0JCQlwcl9lcnIoImNvbW1hbmQg bXNnIHRyYW5zZmVyIGZhaWxlZCwgcmMgPSAlZFxuIiwgcmMpOwotCX0KLQotCWRzaV9jdHJsX3Vw ZGF0ZV9zdGF0ZShkc2lfY3RybCwgRFNJX0NUUkxfT1BfQ01EX1RYLCAweDApOwotCi1lcnJvcjoK LQltdXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQot LyoqCi0gKiBkc2lfY3RybF9jbWRfdHhfdHJpZ2dlcigpIC0gVHJpZ2dlciBhIGRlZmVycmVkIGNv bW1hbmQuCi0gKiBAZHNpX2N0cmw6ICAgICAgICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUu Ci0gKiBAZmxhZ3M6ICAgICAgICAgICAgICAgICBNb2RpZmllcnMuCi0gKgotICogUmV0dXJuOiBl cnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfY21kX3R4X3RyaWdnZXIoc3RydWN0IGRzaV9j dHJsICpkc2lfY3RybCwgdTMyIGZsYWdzKQotewotCWludCByYyA9IDAsIHJldCA9IDA7Ci0JdTMy IHN0YXR1cyA9IDA7Ci0JdTMyIG1hc2sgPSAoRFNJX0NNRF9NT0RFX0RNQV9ET05FKTsKLQotCWlm ICghZHNpX2N0cmwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCi0JaWYg KCEoZmxhZ3MgJiBEU0lfQ1RSTF9DTURfQlJPQURDQVNUX01BU1RFUikpCi0JCWRzaV9jdHJsLT5o dy5vcHMudHJpZ2dlcl9jb21tYW5kX2RtYSgmZHNpX2N0cmwtPmh3KTsKLQotCWlmICgoZmxhZ3Mg JiBEU0lfQ1RSTF9DTURfQlJPQURDQVNUKSAmJgotCQkoZmxhZ3MgJiBEU0lfQ1RSTF9DTURfQlJP QURDQVNUX01BU1RFUikpIHsKLQkJZHNpX2N0cmxfZW5hYmxlX3N0YXR1c19pbnRlcnJ1cHQoZHNp X2N0cmwsCi0JCQkJCURTSV9TSU5UX0NNRF9NT0RFX0RNQV9ET05FLCBOVUxMKTsKLQkJcmVpbml0 X2NvbXBsZXRpb24oJmRzaV9jdHJsLT5pcnFfaW5mby5jbWRfZG1hX2RvbmUpOwotCi0JCS8qIHRy aWdnZXIgY29tbWFuZCAqLwotCQlkc2lfY3RybC0+aHcub3BzLnRyaWdnZXJfY29tbWFuZF9kbWEo JmRzaV9jdHJsLT5odyk7Ci0KLQkJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KAot CQkJCSZkc2lfY3RybC0+aXJxX2luZm8uY21kX2RtYV9kb25lLAotCQkJCW1zZWNzX3RvX2ppZmZp ZXMoRFNJX0NUUkxfVFhfVE9fTVMpKTsKLQotCQlpZiAocmV0ID09IDApIHsKLQkJCXN0YXR1cyA9 IGRzaV9jdHJsLT5ody5vcHMuZ2V0X2ludGVycnVwdF9zdGF0dXMoCi0JCQkJCQkJCSZkc2lfY3Ry bC0+aHcpOwotCQkJaWYgKHN0YXR1cyAmIG1hc2spIHsKLQkJCQlzdGF0dXMgfD0gKERTSV9DTURf TU9ERV9ETUFfRE9ORSB8Ci0JCQkJCQlEU0lfQlRBX0RPTkUpOwotCQkJCWRzaV9jdHJsLT5ody5v cHMuY2xlYXJfaW50ZXJydXB0X3N0YXR1cygKLQkJCQkJCQkJJmRzaV9jdHJsLT5odywKLQkJCQkJ CQkJc3RhdHVzKTsKLQkJCQlkc2lfY3RybF9kaXNhYmxlX3N0YXR1c19pbnRlcnJ1cHQoZHNpX2N0 cmwsCi0JCQkJCQlEU0lfU0lOVF9DTURfTU9ERV9ETUFfRE9ORSk7Ci0JCQkJY29tcGxldGVfYWxs KCZkc2lfY3RybC0+aXJxX2luZm8uY21kX2RtYV9kb25lKTsKLQkJCQlwcl93YXJuKCJkbWFfdHgg ZG9uZSBidXQgaXJxIG5vdCB0cmlnZ2VyZWRcbiIpOwotCQkJfSBlbHNlIHsKLQkJCQlyYyA9IC1F VElNRURPVVQ7Ci0JCQkJZHNpX2N0cmxfZGlzYWJsZV9zdGF0dXNfaW50ZXJydXB0KGRzaV9jdHJs LAotCQkJCQkJRFNJX1NJTlRfQ01EX01PREVfRE1BX0RPTkUpOwotCQkJCXByX2VycigiW0RTSV8l ZF1Db21tYW5kIHRyYW5zZmVyIGZhaWxlZFxuIiwKLQkJCQkJCWRzaV9jdHJsLT5jZWxsX2luZGV4 KTsKLQkJCX0KLQkJfQotCX0KLQotCW11dGV4X3VubG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7 Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIF9kc2lfY3RybF9jYWNoZV9taXNyIC0gQ2FjaGUg ZnJhbWUgTUlTUiB2YWx1ZQotICogQGRzaV9jdHJsOiBQb2ludGVyIHRvIGFzc29jaWF0ZWQgZHNp X2N0cmwgc3RydWN0dXJlCi0gKi8KLXN0YXRpYyB2b2lkIF9kc2lfY3RybF9jYWNoZV9taXNyKHN0 cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpCi17Ci0JdTMyIG1pc3I7Ci0KLQlpZiAoIWRzaV9jdHJs IHx8ICFkc2lfY3RybC0+aHcub3BzLmNvbGxlY3RfbWlzcikKLQkJcmV0dXJuOwotCi0JbWlzciA9 IGRzaV9jdHJsLT5ody5vcHMuY29sbGVjdF9taXNyKCZkc2lfY3RybC0+aHcsCi0JCQkJZHNpX2N0 cmwtPmhvc3RfY29uZmlnLnBhbmVsX21vZGUpOwotCi0JaWYgKG1pc3IpCi0JCWRzaV9jdHJsLT5t aXNyX2NhY2hlID0gbWlzcjsKLQotCXByX2RlYnVnKCJEU0lfJWQgbWlzcl9jYWNoZSA9ICV4XG4i LCBkc2lfY3RybC0+Y2VsbF9pbmRleCwKLQkJZHNpX2N0cmwtPm1pc3JfY2FjaGUpOwotCi19Ci0K LS8qKgotICogZHNpX2N0cmxfc2V0X3Bvd2VyX3N0YXRlKCkgLSBzZXQgcG93ZXIgc3RhdGUgZm9y IGRzaSBjb250cm9sbGVyCi0gKiBAZHNpX2N0cmw6ICAgICAgICAgIERTSSBjb250cm9sbGVyIGhh bmRsZS4KLSAqIEBzdGF0ZTogICAgICAgICAgICAgUG93ZXIgc3RhdGUuCi0gKgotICogU2V0IHBv d2VyIHN0YXRlIGZvciBEU0kgY29udHJvbGxlci4gUG93ZXIgc3RhdGUgY2FuIGJlIGNoYW5nZWQg b25seSB3aGVuCi0gKiBDb250cm9sbGVyLCBWaWRlbyBhbmQgQ29tbWFuZCBlbmdpbmVzIGFyZSB0 dXJuZWQgb2ZmLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJs X3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJICAgICBlbnVt IGRzaV9wb3dlcl9zdGF0ZSBzdGF0ZSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkc2lfY3Ry bCB8fCAoc3RhdGUgPj0gRFNJX0NUUkxfUE9XRVJfTUFYKSkgewotCQlwcl9lcnIoIkludmFsaWQg UGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZHNpX2N0 cmwtPmN0cmxfbG9jayk7Ci0KLQlyYyA9IGRzaV9jdHJsX2NoZWNrX3N0YXRlKGRzaV9jdHJsLCBE U0lfQ1RSTF9PUF9QT1dFUl9TVEFURV9DSEFOR0UsCi0JCQkJICBzdGF0ZSk7Ci0JaWYgKHJjKSB7 Ci0JCXByX2VycigiW0RTSV8lZF0gQ29udHJvbGxlciBzdGF0ZSBjaGVjayBmYWlsZWQsIHJjPSVk XG4iLAotCQkgICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIHJjKTsKLQkJZ290byBlcnJvcjsK LQl9Ci0KLQlpZiAoc3RhdGUgPT0gRFNJX0NUUkxfUE9XRVJfVlJFR19PTikgewotCQlyYyA9IGRz aV9jdHJsX2VuYWJsZV9zdXBwbGllcyhkc2lfY3RybCwgdHJ1ZSk7Ci0JCWlmIChyYykgewotCQkJ cHJfZXJyKCJbJWRdZmFpbGVkIHRvIGVuYWJsZSB2b2x0YWdlIHN1cHBsaWVzLCByYz0lZFxuIiwK LQkJCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJ fQotCX0gZWxzZSBpZiAoc3RhdGUgPT0gRFNJX0NUUkxfUE9XRVJfVlJFR19PRkYpIHsKLQkJaWYg KGRzaV9jdHJsLT5taXNyX2VuYWJsZSkKLQkJCV9kc2lfY3RybF9jYWNoZV9taXNyKGRzaV9jdHJs KTsKLQotCQlyYyA9IGRzaV9jdHJsX2VuYWJsZV9zdXBwbGllcyhkc2lfY3RybCwgZmFsc2UpOwot CQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVkXWZhaWxlZCB0byBkaXNhYmxlIHZyZWcgc3VwcGxp ZXMsIHJjPSVkXG4iLAotCQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0JCQln b3RvIGVycm9yOwotCQl9Ci0JfQotCi0JcHJfZGVidWcoIltEU0lfJWRdIFBvd2VyIHN0YXRlIHVw ZGF0ZWQgdG8gJWRcbiIsIGRzaV9jdHJsLT5jZWxsX2luZGV4LAotCQkgc3RhdGUpOwotCWRzaV9j dHJsX3VwZGF0ZV9zdGF0ZShkc2lfY3RybCwgRFNJX0NUUkxfT1BfUE9XRVJfU1RBVEVfQ0hBTkdF LCBzdGF0ZSk7Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwot CXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9zZXRfdHBnX3N0YXRlKCkgLSBlbmFi bGUvZGlzYWJsZSB0ZXN0IHBhdHRlcm4gb24gdGhlIGNvbnRyb2xsZXIKLSAqIEBkc2lfY3RybDog ICAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICogQG9uOiAgICAgICAgICAgICAgICBl bmFibGUvZGlzYWJsZSB0ZXN0IHBhdHRlcm4uCi0gKgotICogVGVzdCBwYXR0ZXJuIGNhbiBiZSBl bmFibGVkIG9ubHkgYWZ0ZXIgVmlkZW8gZW5naW5lIChmb3IgdmlkZW8gbW9kZSBwYW5lbHMpCi0g KiBvciBjb21tYW5kIGVuZ2luZSAoZm9yIGNtZCBtb2RlIHBhbmVscykgaXMgZW5hYmxlZC4KLSAq Ci0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9zZXRfdHBnX3N0YXRl KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsIGJvb2wgb24pCi17Ci0JaW50IHJjID0gMDsKLQot CWlmICghZHNpX2N0cmwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVy biAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCi0J cmMgPSBkc2lfY3RybF9jaGVja19zdGF0ZShkc2lfY3RybCwgRFNJX0NUUkxfT1BfVFBHLCBvbik7 Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiW0RTSV8lZF0gQ29udHJvbGxlciBzdGF0ZSBjaGVjayBm YWlsZWQsIHJjPSVkXG4iLAotCQkgICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIHJjKTsKLQkJ Z290byBlcnJvcjsKLQl9Ci0KLQlpZiAob24pIHsKLQkJaWYgKGRzaV9jdHJsLT5ob3N0X2NvbmZp Zy5wYW5lbF9tb2RlID09IERTSV9PUF9WSURFT19NT0RFKSB7Ci0JCQlkc2lfY3RybC0+aHcub3Bz LnZpZGVvX3Rlc3RfcGF0dGVybl9zZXR1cCgmZHNpX2N0cmwtPmh3LAotCQkJCQkJCSAgRFNJX1RF U1RfUEFUVEVSTl9JTkMsCi0JCQkJCQkJICAweEZGRkYpOwotCQl9IGVsc2UgewotCQkJZHNpX2N0 cmwtPmh3Lm9wcy5jbWRfdGVzdF9wYXR0ZXJuX3NldHVwKAotCQkJCQkJCSZkc2lfY3RybC0+aHcs Ci0JCQkJCQkJRFNJX1RFU1RfUEFUVEVSTl9JTkMsCi0JCQkJCQkJMHhGRkZGLAotCQkJCQkJCTB4 MCk7Ci0JCX0KLQl9Ci0JZHNpX2N0cmwtPmh3Lm9wcy50ZXN0X3BhdHRlcm5fZW5hYmxlKCZkc2lf Y3RybC0+aHcsIG9uKTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXVNldCB0ZXN0IHBhdHRlcm4gc3Rh dGU9JWRcbiIsCi0JCWRzaV9jdHJsLT5jZWxsX2luZGV4LCBvbik7Ci0JZHNpX2N0cmxfdXBkYXRl X3N0YXRlKGRzaV9jdHJsLCBEU0lfQ1RSTF9PUF9UUEcsIG9uKTsKLWVycm9yOgotCW11dGV4X3Vu bG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGRz aV9jdHJsX3NldF9ob3N0X2VuZ2luZV9zdGF0ZSgpIC0gc2V0IGhvc3QgZW5naW5lIHN0YXRlCi0g KiBAZHNpX2N0cmw6ICAgICAgICAgICAgRFNJIENvbnRyb2xsZXIgaGFuZGxlLgotICogQHN0YXRl OiAgICAgICAgICAgICAgIEVuZ2luZSBzdGF0ZS4KLSAqCi0gKiBIb3N0IGVuZ2luZSBzdGF0ZSBj YW4gYmUgbW9kaWZpZWQgb25seSB3aGVuIERTSSBjb250cm9sbGVyIHBvd2VyIHN0YXRlIGlzCi0g KiBzZXQgdG8gRFNJX0NUUkxfUE9XRVJfTElOS19DTEtfT04gYW5kIGNtZCwgdmlkZW8gZW5naW5l cyBhcmUgZGlzYWJsZWQuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNp X2N0cmxfc2V0X2hvc3RfZW5naW5lX3N0YXRlKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0J CQkJICAgZW51bSBkc2lfZW5naW5lX3N0YXRlIHN0YXRlKQotewotCWludCByYyA9IDA7Ci0KLQlp ZiAoIWRzaV9jdHJsIHx8IChzdGF0ZSA+PSBEU0lfQ1RSTF9FTkdJTkVfTUFYKSkgewotCQlwcl9l cnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhf bG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0KLQlyYyA9IGRzaV9jdHJsX2NoZWNrX3N0YXRl KGRzaV9jdHJsLCBEU0lfQ1RSTF9PUF9IT1NUX0VOR0lORSwgc3RhdGUpOwotCWlmIChyYykgewot CQlwcl9lcnIoIltEU0lfJWRdIENvbnRyb2xsZXIgc3RhdGUgY2hlY2sgZmFpbGVkLCByYz0lZFxu IiwKLQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0J fQotCi0JaWYgKHN0YXRlID09IERTSV9DVFJMX0VOR0lORV9PTikKLQkJZHNpX2N0cmwtPmh3Lm9w cy5jdHJsX2VuKCZkc2lfY3RybC0+aHcsIHRydWUpOwotCWVsc2UKLQkJZHNpX2N0cmwtPmh3Lm9w cy5jdHJsX2VuKCZkc2lfY3RybC0+aHcsIGZhbHNlKTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXSBT ZXQgaG9zdCBlbmdpbmUgc3RhdGUgPSAlZFxuIiwgZHNpX2N0cmwtPmNlbGxfaW5kZXgsCi0JCSBz dGF0ZSk7Ci0JZHNpX2N0cmxfdXBkYXRlX3N0YXRlKGRzaV9jdHJsLCBEU0lfQ1RSTF9PUF9IT1NU X0VOR0lORSwgc3RhdGUpOwotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfY3RybC0+Y3RybF9s b2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogZHNpX2N0cmxfc2V0X2NtZF9lbmdpbmVf c3RhdGUoKSAtIHNldCBjb21tYW5kIGVuZ2luZSBzdGF0ZQotICogQGRzaV9jdHJsOiAgICAgICAg ICAgIERTSSBDb250cm9sbGVyIGhhbmRsZS4KLSAqIEBzdGF0ZTogICAgICAgICAgICAgICBFbmdp bmUgc3RhdGUuCi0gKgotICogQ29tbWFuZCBlbmdpbmUgc3RhdGUgY2FuIGJlIG1vZGlmaWVkIG9u bHkgd2hlbiBEU0kgY29udHJvbGxlciBwb3dlciBzdGF0ZSBpcwotICogc2V0IHRvIERTSV9DVFJM X1BPV0VSX0xJTktfQ0xLX09OLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50 IGRzaV9jdHJsX3NldF9jbWRfZW5naW5lX3N0YXRlKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmws Ci0JCQkJICBlbnVtIGRzaV9lbmdpbmVfc3RhdGUgc3RhdGUpCi17Ci0JaW50IHJjID0gMDsKLQot CWlmICghZHNpX2N0cmwgfHwgKHN0YXRlID49IERTSV9DVFJMX0VOR0lORV9NQVgpKSB7Ci0JCXBy X2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRl eF9sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQotCXJjID0gZHNpX2N0cmxfY2hlY2tfc3Rh dGUoZHNpX2N0cmwsIERTSV9DVFJMX09QX0NNRF9FTkdJTkUsIHN0YXRlKTsKLQlpZiAocmMpIHsK LQkJcHJfZXJyKCJbRFNJXyVkXSBDb250cm9sbGVyIHN0YXRlIGNoZWNrIGZhaWxlZCwgcmM9JWRc biIsCi0JCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwgcmMpOwotCQlnb3RvIGVycm9yOwot CX0KLQotCWlmIChzdGF0ZSA9PSBEU0lfQ1RSTF9FTkdJTkVfT04pCi0JCWRzaV9jdHJsLT5ody5v cHMuY21kX2VuZ2luZV9lbigmZHNpX2N0cmwtPmh3LCB0cnVlKTsKLQllbHNlCi0JCWRzaV9jdHJs LT5ody5vcHMuY21kX2VuZ2luZV9lbigmZHNpX2N0cmwtPmh3LCBmYWxzZSk7Ci0KLQlwcl9kZWJ1 ZygiW0RTSV8lZF0gU2V0IGNtZCBlbmdpbmUgc3RhdGUgPSAlZFxuIiwgZHNpX2N0cmwtPmNlbGxf aW5kZXgsCi0JCSBzdGF0ZSk7Ci0JZHNpX2N0cmxfdXBkYXRlX3N0YXRlKGRzaV9jdHJsLCBEU0lf Q1RSTF9PUF9DTURfRU5HSU5FLCBzdGF0ZSk7Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJmRzaV9j dHJsLT5jdHJsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9zZXRf dmlkX2VuZ2luZV9zdGF0ZSgpIC0gc2V0IHZpZGVvIGVuZ2luZSBzdGF0ZQotICogQGRzaV9jdHJs OiAgICAgICAgICAgIERTSSBDb250cm9sbGVyIGhhbmRsZS4KLSAqIEBzdGF0ZTogICAgICAgICAg ICAgICBFbmdpbmUgc3RhdGUuCi0gKgotICogVmlkZW8gZW5naW5lIHN0YXRlIGNhbiBiZSBtb2Rp ZmllZCBvbmx5IHdoZW4gRFNJIGNvbnRyb2xsZXIgcG93ZXIgc3RhdGUgaXMKLSAqIHNldCB0byBE U0lfQ1RSTF9QT1dFUl9MSU5LX0NMS19PTi4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0g Ki8KLWludCBkc2lfY3RybF9zZXRfdmlkX2VuZ2luZV9zdGF0ZShzdHJ1Y3QgZHNpX2N0cmwgKmRz aV9jdHJsLAotCQkJCSAgZW51bSBkc2lfZW5naW5lX3N0YXRlIHN0YXRlKQotewotCWludCByYyA9 IDA7Ci0JYm9vbCBvbjsKLQotCWlmICghZHNpX2N0cmwgfHwgKHN0YXRlID49IERTSV9DVFJMX0VO R0lORV9NQVgpKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQotCXJjID0g ZHNpX2N0cmxfY2hlY2tfc3RhdGUoZHNpX2N0cmwsIERTSV9DVFJMX09QX1ZJRF9FTkdJTkUsIHN0 YXRlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbRFNJXyVkXSBDb250cm9sbGVyIHN0YXRlIGNo ZWNrIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwgcmMp OwotCQlnb3RvIGVycm9yOwotCX0KLQotCW9uID0gKHN0YXRlID09IERTSV9DVFJMX0VOR0lORV9P TikgPyB0cnVlIDogZmFsc2U7Ci0JZHNpX2N0cmwtPmh3Lm9wcy52aWRlb19lbmdpbmVfZW4oJmRz aV9jdHJsLT5odywgb24pOwotCi0JLyogcGVyZm9ybSBhIHJlc2V0IHdoZW4gdHVybmluZyBvZmYg dmlkZW8gZW5naW5lICovCi0JaWYgKCFvbikKLQkJZHNpX2N0cmwtPmh3Lm9wcy5zb2Z0X3Jlc2V0 KCZkc2lfY3RybC0+aHcpOwotCi0JcHJfZGVidWcoIltEU0lfJWRdIFNldCB2aWRlbyBlbmdpbmUg c3RhdGUgPSAlZFxuIiwgZHNpX2N0cmwtPmNlbGxfaW5kZXgsCi0JCSBzdGF0ZSk7Ci0JZHNpX2N0 cmxfdXBkYXRlX3N0YXRlKGRzaV9jdHJsLCBEU0lfQ1RSTF9PUF9WSURfRU5HSU5FLCBzdGF0ZSk7 Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCXJldHVybiBy YzsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9zZXRfdWxwcygpIC0gc2V0IFVMUFMgc3RhdGUgZm9y IERTSSBsYW5lcy4KLSAqIEBkc2lfY3RybDoJCURTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqIEBl bmFibGU6CQllbmFibGUvZGlzYWJsZSBVTFBTLgotICoKLSAqIFVMUFMgY2FuIGJlIGVuYWJsZWQv ZGlzYWJsZWQgYWZ0ZXIgRFNJIGhvc3QgZW5naW5lIGlzIHR1cm5lZCBvbi4KLSAqCi0gKiBSZXR1 cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9zZXRfdWxwcyhzdHJ1Y3QgZHNpX2N0 cmwgKmRzaV9jdHJsLCBib29sIGVuYWJsZSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkc2lf Y3RybCkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0JfQotCi0JbXV0ZXhfbG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0KLQlpZiAoZW5hYmxl KQotCQlyYyA9IGRzaV9lbmFibGVfdWxwcyhkc2lfY3RybCk7Ci0JZWxzZQotCQlyYyA9IGRzaV9k aXNhYmxlX3VscHMoZHNpX2N0cmwpOwotCi0JaWYgKHJjKSB7Ci0JCXByX2VycigiW0RTSV8lZF0g VWxwcyBzdGF0ZSBjaGFuZ2UoJWQpIGZhaWxlZCwgcmM9JWRcbiIsCi0JCQlkc2lfY3RybC0+Y2Vs bF9pbmRleCwgZW5hYmxlLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCXByX2RlYnVnKCJbRFNJ XyVkXSBVTFBTIHN0YXRlID0gJWRcbiIsIGRzaV9jdHJsLT5jZWxsX2luZGV4LCBlbmFibGUpOwot Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCXJldHVybiBy YzsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9zZXRfY2xhbXBfc3RhdGUoKSAtIHNldCBjbGFtcCBz dGF0ZSBmb3IgRFNJIHBoeQotICogQGRzaV9jdHJsOiAgICAgICAgICAgICBEU0kgY29udHJvbGxl ciBoYW5kbGUuCi0gKiBAZW5hYmxlOiAgICAgICAgICAgICAgIGVuYWJsZS9kaXNhYmxlIGNsYW1w aW5nLgotICoKLSAqIENsYW1wcyBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCB3aGlsZSBEU0kgY29u dHJvbGxlciBpcyBzdGlsbCB0dXJuZWQgb24uCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgot ICovCi1pbnQgZHNpX2N0cmxfc2V0X2NsYW1wX3N0YXRlKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0 cmwsCi0JCWJvb2wgZW5hYmxlLCBib29sIHVscHNfZW5hYmxlZCkKLXsKLQlpbnQgcmMgPSAwOwot Ci0JaWYgKCFkc2lfY3RybCkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0 dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFkc2lfY3RybC0+aHcub3BzLmNsYW1wX2VuYWJsZSB8 fAotCQkJIWRzaV9jdHJsLT5ody5vcHMuY2xhbXBfZGlzYWJsZSkgewotCQlwcl9kZWJ1ZygiTm8g Y2xhbXAgY29udHJvbCBmb3IgRFNJIGNvbnRyb2xsZXJcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0K LQltdXRleF9sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQotCXJjID0gZHNpX2VuYWJsZV9p b19jbGFtcChkc2lfY3RybCwgZW5hYmxlLCB1bHBzX2VuYWJsZWQpOwotCWlmIChyYykgewotCQlw cl9lcnIoIltEU0lfJWRdIEZhaWxlZCB0byBlbmFibGUgSU8gY2xhbXBcbiIsCi0JCQlkc2lfY3Ry bC0+Y2VsbF9pbmRleCk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcHJfZGVidWcoIltEU0lfJWRd IENsYW1wIHN0YXRlID0gJWRcbiIsIGRzaV9jdHJsLT5jZWxsX2luZGV4LCBlbmFibGUpOwotZXJy b3I6Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19 Ci0KLS8qKgotICogZHNpX2N0cmxfc2V0X2Nsb2NrX3NvdXJjZSgpIC0gc2V0IGNsb2NrIHNvdXJj ZSBmcHIgZHNpIGxpbmsgY2xvY2tzCi0gKiBAZHNpX2N0cmw6ICAgICAgICBEU0kgY29udHJvbGxl ciBoYW5kbGUuCi0gKiBAc291cmNlX2Nsa3M6ICAgICBTb3VyY2UgY2xvY2tzIGZvciBEU0kgbGlu ayBjbG9ja3MuCi0gKgotICogQ2xvY2sgc291cmNlIHNob3VsZCBiZSBjaGFuZ2VkIHdoaWxlIGxp bmsgY2xvY2tzIGFyZSBkaXNhYmxlZC4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8K LWludCBkc2lfY3RybF9zZXRfY2xvY2tfc291cmNlKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmws Ci0JCQkgICAgICBzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCAqc291cmNlX2Nsa3MpCi17Ci0JaW50 IHJjID0gMDsKLQotCWlmICghZHNpX2N0cmwgfHwgIXNvdXJjZV9jbGtzKSB7Ci0JCXByX2Vycigi SW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2Nr KCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQotCXJjID0gZHNpX2Nsa191cGRhdGVfcGFyZW50KHNv dXJjZV9jbGtzLCAmZHNpX2N0cmwtPmNsa19pbmZvLnJjZ19jbGtzKTsKLQlpZiAocmMpIHsKLQkJ cHJfZXJyKCJbRFNJXyVkXUZhaWxlZCB0byB1cGRhdGUgbGluayBjbGsgcGFyZW50LCByYz0lZFxu IiwKLQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0JCSh2b2lkKWRzaV9jbGtf dXBkYXRlX3BhcmVudCgmZHNpX2N0cmwtPmNsa19pbmZvLnBsbF9vcF9jbGtzLAotCQkJCQkgICAg JmRzaV9jdHJsLT5jbGtfaW5mby5yY2dfY2xrcyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZHNp X2N0cmwtPmNsa19pbmZvLnBsbF9vcF9jbGtzLmJ5dGVfY2xrID0gc291cmNlX2Nsa3MtPmJ5dGVf Y2xrOwotCWRzaV9jdHJsLT5jbGtfaW5mby5wbGxfb3BfY2xrcy5waXhlbF9jbGsgPSBzb3VyY2Vf Y2xrcy0+cGl4ZWxfY2xrOwotCi0JcHJfZGVidWcoIltEU0lfJWRdIFNvdXJjZSBjbG9ja3MgYXJl IHVwZGF0ZWRcbiIsIGRzaV9jdHJsLT5jZWxsX2luZGV4KTsKLQotZXJyb3I6Ci0JbXV0ZXhfdW5s b2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogZHNp X2N0cmxfc2V0dXBfbWlzcigpIC0gU2V0dXAgZnJhbWUgTUlTUgotICogQGRzaV9jdHJsOiAgICAg ICAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICogQGVuYWJsZTogICAgICAgICAgICAg ICAgZW5hYmxlL2Rpc2FibGUgTUlTUi4KLSAqIEBmcmFtZV9jb3VudDogICAgICAgICAgIE51bWJl ciBvZiBmcmFtZXMgdG8gYWNjdW11bGF0ZSBNSVNSLgotICoKLSAqIFJldHVybjogZXJyb3IgY29k ZS4KLSAqLwotaW50IGRzaV9jdHJsX3NldHVwX21pc3Ioc3RydWN0IGRzaV9jdHJsICpkc2lfY3Ry bCwKLQkJCWJvb2wgZW5hYmxlLAotCQkJdTMyIGZyYW1lX2NvdW50KQotewotCWlmICghZHNpX2N0 cmwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwot CX0KLQotCWlmICghZHNpX2N0cmwtPmh3Lm9wcy5zZXR1cF9taXNyKQotCQlyZXR1cm4gMDsKLQot CW11dGV4X2xvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCWRzaV9jdHJsLT5taXNyX2VuYWJs ZSA9IGVuYWJsZTsKLQlkc2lfY3RybC0+aHcub3BzLnNldHVwX21pc3IoJmRzaV9jdHJsLT5odywK LQkJCWRzaV9jdHJsLT5ob3N0X2NvbmZpZy5wYW5lbF9tb2RlLAotCQkJZW5hYmxlLCBmcmFtZV9j b3VudCk7Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQlyZXR1cm4gMDsK LX0KLQotLyoqCi0gKiBkc2lfY3RybF9jb2xsZWN0X21pc3IoKSAtIFJlYWQgZnJhbWUgTUlTUgot ICogQGRzaV9jdHJsOiAgICAgICAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICoKLSAq IFJldHVybjogTUlTUiB2YWx1ZS4KLSAqLwotdTMyIGRzaV9jdHJsX2NvbGxlY3RfbWlzcihzdHJ1 Y3QgZHNpX2N0cmwgKmRzaV9jdHJsKQotewotCXUzMiBtaXNyOwotCi0JaWYgKCFkc2lfY3RybCB8 fCAhZHNpX2N0cmwtPmh3Lm9wcy5jb2xsZWN0X21pc3IpCi0JCXJldHVybiAwOwotCi0JbWlzciA9 IGRzaV9jdHJsLT5ody5vcHMuY29sbGVjdF9taXNyKCZkc2lfY3RybC0+aHcsCi0JCQkJZHNpX2N0 cmwtPmhvc3RfY29uZmlnLnBhbmVsX21vZGUpOwotCWlmICghbWlzcikKLQkJbWlzciA9IGRzaV9j dHJsLT5taXNyX2NhY2hlOwotCi0JcHJfZGVidWcoIkRTSV8lZCBjYWNoZWQgbWlzciA9ICV4LCBm aW5hbCA9ICV4XG4iLAotCQlkc2lfY3RybC0+Y2VsbF9pbmRleCwgZHNpX2N0cmwtPm1pc3JfY2Fj aGUsIG1pc3IpOwotCi0JcmV0dXJuIG1pc3I7Ci19Ci0KLS8qKgotICogZHNpX2N0cmxfZHJ2X3Jl Z2lzdGVyKCkgLSByZWdpc3RlciBwbGF0Zm9ybSBkcml2ZXIgZm9yIGRzaSBjb250cm9sbGVyCi0g Ki8KLXZvaWQgZHNpX2N0cmxfZHJ2X3JlZ2lzdGVyKHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVy X3JlZ2lzdGVyKCZkc2lfY3RybF9kcml2ZXIpOwotfQotCi0vKioKLSAqIGRzaV9jdHJsX2Rydl91 bnJlZ2lzdGVyKCkgLSB1bnJlZ2lzdGVyIHBsYXRmb3JtIGRyaXZlcgotICovCi12b2lkIGRzaV9j dHJsX2Rydl91bnJlZ2lzdGVyKHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIo JmRzaV9jdHJsX2RyaXZlcik7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rz aS1zdGFnaW5nL2RzaV9jdHJsLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2Rz aV9jdHJsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MjYzNzIuLjAwMDAwMDAK LS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybC5oCisrKyAvZGV2 L251bGwKQEAgLTEsNjIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwg VGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq Ci0gKi8KLQotI2lmbmRlZiBfRFNJX0NUUkxfSF8KLSNkZWZpbmUgX0RTSV9DVFJMX0hfCi0KLSNp bmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0KLSNpbmNsdWRlICJkc2lfZGVmcy5oIgotI2luY2x1 ZGUgImRzaV9jdHJsX2h3LmgiCi0jaW5jbHVkZSAiZHNpX2Nsay5oIgotI2luY2x1ZGUgImRzaV9w d3IuaCIKLSNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+Ci0KLS8qCi0gKiBEU0kgQ29tbWFu ZCB0cmFuc2ZlciBtb2RpZmllcnMKLSAqIEBEU0lfQ1RSTF9DTURfUkVBRDogICAgICAgICAgICAg VGhlIGN1cnJlbnQgdHJhbnNmZXIgaW52b2x2ZXMgcmVhZGluZyBkYXRhLgotICogQERTSV9DVFJM X0NNRF9CUk9BRENBU1Q6ICAgICAgICBUaGUgY3VycmVudCB0cmFuc2ZlciBuZWVkcyB0byBiZSBk b25lIGluCi0gKgkJCQkgICBicm9hZGNhc3QgbW9kZSB0byBtdWx0aXBsZSBzbGF2ZXMuCi0gKiBA RFNJX0NUUkxfQ01EX0JST0FEQ0FTVF9NQVNURVI6IFRoaXMgY29udHJvbGxlciBpcyB0aGUgbWFz dGVyIGFuZCB0aGUgc2xhdmVzCi0gKgkJCQkgICBzeW5jIHRvIHRoaXMgdHJpZ2dlci4KLSAqIEBE U0lfQ1RSTF9DTURfREVGRVJfVFJJR0dFUjogICAgRGVmZXIgdGhlIGNvbW1hbmQgdHJpZ2dlciB0 byBsYXRlci4KLSAqIEBEU0lfQ1RSTF9DTURfRklGT19TVE9SRTogICAgICAgVXNlIEZJRk8gZm9y IGNvbW1hbmQgdHJhbnNmZXIgaW4gcGxhY2Ugb2YKLSAqCQkJCSAgIHJlYWRpbmcgZGF0YSBmcm9t IG1lbW9yeS4KLSAqIEBEU0lfQ1RSTF9DTURfRkVUQ0hfTUVNT1JZOiAgICAgRmV0Y2ggY29tbWFu ZCBmcm9tIG1lbW9yeSB0aHJvdWdoIEFYSSBidXMKLSAqCQkJCSAgIGFuZCB0cmFuc2ZlciBpdC4K LSAqLwotI2RlZmluZSBEU0lfQ1RSTF9DTURfUkVBRCAgICAgICAgICAgICAweDEKLSNkZWZpbmUg RFNJX0NUUkxfQ01EX0JST0FEQ0FTVCAgICAgICAgMHgyCi0jZGVmaW5lIERTSV9DVFJMX0NNRF9C Uk9BRENBU1RfTUFTVEVSIDB4NAotI2RlZmluZSBEU0lfQ1RSTF9DTURfREVGRVJfVFJJR0dFUiAg ICAweDgKLSNkZWZpbmUgRFNJX0NUUkxfQ01EX0ZJRk9fU1RPUkUgICAgICAgMHgxMAotI2RlZmlu ZSBEU0lfQ1RSTF9DTURfRkVUQ0hfTUVNT1JZICAgICAweDIwCi0KLS8qKgotICogZW51bSBkc2lf cG93ZXJfc3RhdGUgLSBkZWZpbmVzIHBvd2VyIHN0YXRlcyBmb3IgZHNpIGNvbnRyb2xsZXIuCi0g KiBARFNJX0NUUkxfUE9XRVJfVlJFR19PRkY6ICAgIERpZ2l0YWwgYW5kIGFuYWxvZyBzdXBwbGll cyBmb3IgRFNJIGNvbnRyb2xsZXIKLQkJCQl0dXJuZWQgb2ZmCi0gKiBARFNJX0NUUkxfUE9XRVJf VlJFR19PTjogICAgIERpZ2l0YWwgYW5kIGFuYWxvZyBzdXBwbGllcyBmb3IgRFNJIGNvbnRyb2xs ZXIKLSAqIEBEU0lfQ1RSTF9QT1dFUl9NQVg6ICAgICAgICAgTWF4aW11bSB2YWx1ZS4KLSAqLwot ZW51bSBkc2lfcG93ZXJfc3RhdGUgewotCURTSV9DVFJMX1BPV0VSX1ZSRUdfT0ZGID0gMCwKLQlE U0lfQ1RSTF9QT1dFUl9WUkVHX09OLAotCURTSV9DVFJMX1BPV0VSX01BWCwKLX07Ci0KLS8qKgot ICogZW51bSBkc2lfZW5naW5lX3N0YXRlIC0gZGVmaW5lIGVuZ2luZSBzdGF0dXMgZm9yIGRzaSBj b250cm9sbGVyLgotICogQERTSV9DVFJMX0VOR0lORV9PRkY6ICBFbmdpbmUgaXMgdHVybmVkIG9m Zi4KLSAqIEBEU0lfQ1RSTF9FTkdJTkVfT046ICAgRW5naW5lIGlzIHR1cm5lZCBvbi4KLSAqIEBE U0lfQ1RSTF9FTkdJTkVfTUFYOiAgTWF4aW11bSB2YWx1ZS4KLSAqLwotZW51bSBkc2lfZW5naW5l X3N0YXRlIHsKLQlEU0lfQ1RSTF9FTkdJTkVfT0ZGID0gMCwKLQlEU0lfQ1RSTF9FTkdJTkVfT04s Ci0JRFNJX0NUUkxfRU5HSU5FX01BWCwKLX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9jdHJsX3Bv d2VyX2luZm8gLSBkaWdpdGFsIGFuZCBhbmFsb2cgcG93ZXIgc3VwcGxpZXMgZm9yIGRzaSBob3N0 Ci0gKiBAZGlnaXRhbDogIERpZ2l0YWwgcG93ZXIgc3VwcGx5IHJlcXVpcmVkIHRvIHR1cm4gb24g RFNJIGNvbnRyb2xsZXIgaGFyZHdhcmUuCi0gKiBAaG9zdF9wd3I6IEFuYWxvZyBwb3dlciBzdXBw bGllcyByZXF1aXJlZCB0byB0dXJuIG9uIERTSSBjb250cm9sbGVyIGhhcmR3YXJlLgotICogICAg ICAgICAgICBFdmVuIHRob3VnaCBEU0kgY29udHJvbGxlciBpdCBzZWxmIGRvZXMgbm90IHJlcXVp cmUgYW4gYW5hbG9nCi0gKiAgICAgICAgICAgIHBvd2VyIHN1cHBseSwgc3VwcGxpZXMgcmVxdWly ZWQgZm9yIFBMTCBjYW4gYmUgZGVmaW5lZCBoZXJlIHRvCi0gKiAgICAgICAgICAgIGFsbG93IHBy b3BlciBjb250cm9sIG92ZXIgdGhlc2Ugc3VwcGxpZXMuCi0gKi8KLXN0cnVjdCBkc2lfY3RybF9w b3dlcl9pbmZvIHsKLQlzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvIGRpZ2l0YWw7Ci0Jc3RydWN0 IGRzaV9yZWd1bGF0b3JfaW5mbyBob3N0X3B3cjsKLX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9j dHJsX2Nsa19pbmZvIC0gY2xvY2sgaW5mb3JtYXRpb24gZm9yIERTSSBjb250cm9sbGVyCi0gKiBA Y29yZV9jbGtzOiAgICAgICAgICBDb3JlIGNsb2NrcyBuZWVkZWQgdG8gYWNjZXNzIERTSSBjb250 cm9sbGVyIHJlZ2lzdGVycy4KLSAqIEBsaW5rX2Nsa3M6ICAgICAgICAgIExpbmsgY2xvY2tzIHJl cXVpcmVkIHRvIHRyYW5zbWl0IGRhdGEgb3ZlciBEU0kgbGluay4KLSAqIEByY2dfY2xrczogICAg ICAgICAgIFJvb3QgY2xvY2sgZ2VuZXJhdGlvbiBjbG9ja3MgZ2VuZXJhdGVkIGluIE1NU1NfQ0Mu IFRoZQotICoJCQlvdXRwdXQgb2YgdGhlIFBMTCBpcyBzZXQgYXMgcGFyZW50IGZvciB0aGVzZSBy b290Ci0gKgkJCWNsb2Nrcy4gVGhlc2UgY2xvY2tzIGFyZSBzcGVjaWZpYyB0byBjb250cm9sbGVy Ci0gKgkJCWluc3RhbmNlLgotICogQG11eF9jbGtzOiAgICAgICAgICAgTXV4IGNsb2NrcyB1c2Vk IGZvciBEeW5hbWljIHJlZnJlc2ggZmVhdHVyZS4KLSAqIEBleHRfY2xrczogICAgICAgICAgIEV4 dGVybmFsIGJ5dGUvcGl4ZWwgY2xvY2tzIGZyb20gdGhlIE1NU1MgYmxvY2suIFRoZXNlCi0gKgkJ CWNsb2NrcyBhcmUgc2V0IGFzIHBhcmVudCB0byByY2cgY2xvY2tzLgotICogQHBsbF9vcF9jbGtz OiAgICAgICAgVE9ETzoKLSAqIEBzaGFkb3dfY2xrczogICAgICAgIFRPRE86Ci0gKi8KLXN0cnVj dCBkc2lfY3RybF9jbGtfaW5mbyB7Ci0JLyogQ2xvY2tzIHBhcnNlZCBmcm9tIERUICovCi0Jc3Ry dWN0IGRzaV9jb3JlX2Nsa19pbmZvIGNvcmVfY2xrczsKLQlzdHJ1Y3QgZHNpX2xpbmtfY2xrX2lu Zm8gbGlua19jbGtzOwotCXN0cnVjdCBkc2lfY2xrX2xpbmtfc2V0IHJjZ19jbGtzOwotCi0JLyog Q2xvY2tzIHNldCBieSBEU0kgTWFuYWdlciAqLwotCXN0cnVjdCBkc2lfY2xrX2xpbmtfc2V0IG11 eF9jbGtzOwotCXN0cnVjdCBkc2lfY2xrX2xpbmtfc2V0IGV4dF9jbGtzOwotCXN0cnVjdCBkc2lf Y2xrX2xpbmtfc2V0IHBsbF9vcF9jbGtzOwotCXN0cnVjdCBkc2lfY2xrX2xpbmtfc2V0IHNoYWRv d19jbGtzOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX2N0cmxfYnVzX3NjYWxlX2luZm8gLSBC dXMgc2NhbGUgaW5mbyBmb3IgbXNtLWJ1cyBiYW5kd2lkdGggdm90aW5nCi0gKiBAYnVzX3NjYWxl X3RhYmxlOiAgICAgICAgQnVzIHNjYWxlIHZvdGluZyB1c2VjYXNlcy4KLSAqIEBidXNfaGFuZGxl OiAgICAgICAgICAgICBIYW5kbGUgdXNlZCBmb3Igdm90aW5nIGJhbmR3aWR0aC4KLSAqLwotc3Ry dWN0IGRzaV9jdHJsX2J1c19zY2FsZV9pbmZvIHsKLQlzdHJ1Y3QgbXNtX2J1c19zY2FsZV9wZGF0 YSAqYnVzX3NjYWxlX3RhYmxlOwotCXUzMiBidXNfaGFuZGxlOwotfTsKLQotLyoqCi0gKiBzdHJ1 Y3QgZHNpX2N0cmxfc3RhdGVfaW5mbyAtIGN1cnJlbnQgZHJpdmVyIHN0YXRlIGluZm9ybWF0aW9u Ci0gKiBAcG93ZXJfc3RhdGU6ICAgICAgICBTdGF0dXMgb2YgcG93ZXIgc3RhdGVzIG9uIERTSSBj b250cm9sbGVyLgotICogQGNtZF9lbmdpbmVfc3RhdGU6ICAgU3RhdHVzIG9mIERTSSBjb21tYW5k IGVuZ2luZS4KLSAqIEB2aWRfZW5naW5lX3N0YXRlOiAgIFN0YXR1cyBvZiBEU0kgdmlkZW8gZW5n aW5lLgotICogQGNvbnRyb2xsZXJfc3RhdGU6ICAgU3RhdHVzIG9mIERTSSBDb250cm9sbGVyIGVu Z2luZS4KLSAqIEBob3N0X2luaXRpYWxpemVkOglCb29sZWFuIHRvIGluZGljYXRlIHN0YXR1cyBv ZiBEU2kgaG9zdCBJbml0aWFsaXphdGlvbgotICogQHRwZ19lbmFibGVkOiAgICAgICAgQm9vbGVh biB0byBpbmRpY2F0ZSB3aGV0aGVyIHRwZyBpcyBlbmFibGVkLgotICovCi1zdHJ1Y3QgZHNpX2N0 cmxfc3RhdGVfaW5mbyB7Ci0JZW51bSBkc2lfcG93ZXJfc3RhdGUgcG93ZXJfc3RhdGU7Ci0JZW51 bSBkc2lfZW5naW5lX3N0YXRlIGNtZF9lbmdpbmVfc3RhdGU7Ci0JZW51bSBkc2lfZW5naW5lX3N0 YXRlIHZpZF9lbmdpbmVfc3RhdGU7Ci0JZW51bSBkc2lfZW5naW5lX3N0YXRlIGNvbnRyb2xsZXJf c3RhdGU7Ci0JYm9vbCBob3N0X2luaXRpYWxpemVkOwotCWJvb2wgdHBnX2VuYWJsZWQ7Ci19Owot Ci0vKioKLSAqIHN0cnVjdCBkc2lfY3RybF9pbnRlcnJ1cHRzIC0gZGVmaW5lIGludGVycnVwdCBp bmZvcm1hdGlvbgotICogQGlycV9sb2NrOiAgICAgICAgICAgIFNwaW5sb2NrIGZvciBJU1IgaGFu ZGxlci4KLSAqIEBpcnFfbnVtOiAgICAgICAgICAgICBMaW51eCBpbnRlcnJ1cHQgbnVtYmVyIGFz c29jaWF0ZWQgd2l0aCBkZXZpY2UuCi0gKiBAaXJxX3N0YXRfbWFzazogICAgICAgSGFyZHdhcmUg bWFzayBvZiBjdXJyZW50bHkgZW5hYmxlZCBpbnRlcnJ1cHRzLgotICogQGlycV9zdGF0X3JlZmNv dW50OiAgIE51bWJlciBvZiB0aW1lcyBlYWNoIGludGVycnVwdCBoYXMgYmVlbiByZXF1ZXN0ZWQu Ci0gKiBAaXJxX3N0YXRfY2I6ICAgICAgICAgU3RhdHVzIElSUSBjYWxsYmFjayBkZWZpbml0aW9u cy4KLSAqIEBjbWRfZG1hX2RvbmU6ICAgICAgICAgIENvbXBsZXRpb24gc2lnbmFsIGZvciBEU0lf Q01EX01PREVfRE1BX0RPTkUgaW50ZXJydXB0Ci0gKiBAdmlkX2ZyYW1lX2RvbmU6ICAgICAgICBD b21wbGV0aW9uIHNpZ25hbCBmb3IgRFNJX1ZJREVPX01PREVfRlJBTUVfRE9ORSBpbnQuCi0gKiBA Y21kX2ZyYW1lX2RvbmU6ICAgICAgICBDb21wbGV0aW9uIHNpZ25hbCBmb3IgRFNJX0NNRF9GUkFN RV9ET05FIGludGVycnVwdC4KLSAqLwotc3RydWN0IGRzaV9jdHJsX2ludGVycnVwdHMgewotCXNw aW5sb2NrX3QgaXJxX2xvY2s7Ci0JaW50IGlycV9udW07Ci0JdWludDMyX3QgaXJxX3N0YXRfbWFz azsKLQlpbnQgaXJxX3N0YXRfcmVmY291bnRbRFNJX1NUQVRVU19JTlRFUlJVUFRfQ09VTlRdOwot CXN0cnVjdCBkc2lfZXZlbnRfY2JfaW5mbyBpcnFfc3RhdF9jYltEU0lfU1RBVFVTX0lOVEVSUlVQ VF9DT1VOVF07Ci0KLQlzdHJ1Y3QgY29tcGxldGlvbiBjbWRfZG1hX2RvbmU7Ci0Jc3RydWN0IGNv bXBsZXRpb24gdmlkX2ZyYW1lX2RvbmU7Ci0Jc3RydWN0IGNvbXBsZXRpb24gY21kX2ZyYW1lX2Rv bmU7Ci0Jc3RydWN0IGNvbXBsZXRpb24gYnRhX2RvbmU7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBk c2lfY3RybCAtIERTSSBjb250cm9sbGVyIG9iamVjdAotICogQHBkZXY6ICAgICAgICAgICAgICAg IFBvaW50ZXIgdG8gcGxhdGZvcm0gZGV2aWNlLgotICogQGNlbGxfaW5kZXg6ICAgICAgICAgIElu c3RhbmNlIGNlbGwgaWQuCi0gKiBAaG9yaXpfaW5kZXg6ICAgICAgICAgSW5kZXggaW4gcGh5c2lj YWwgaG9yaXpvbnRhbCBDVFJMIGxheW91dCwgMCA9IGxlZnRtb3N0Ci0gKiBAbmFtZTogICAgICAg ICAgICAgICAgTmFtZSBvZiB0aGUgY29udHJvbGxlciBpbnN0YW5jZS4KLSAqIEByZWZjb3VudDog ICAgICAgICAgICByZWYgY291bnRlci4KLSAqIEBjdHJsX2xvY2s6ICAgICAgICAgICBNdXRleCBm b3IgaGFyZHdhcmUgYW5kIG9iamVjdCBhY2Nlc3MuCi0gKiBAZHJtX2RldjogICAgICAgICAgICAg UG9pbnRlciB0byBEUk0gZGV2aWNlLgotICogQHZlcnNpb246ICAgICAgICAgICAgIERTSSBjb250 cm9sbGVyIHZlcnNpb24uCi0gKiBAaHc6ICAgICAgICAgICAgICAgICAgRFNJIGNvbnRyb2xsZXIg aGFyZHdhcmUgb2JqZWN0LgotICogQGN1cnJlbnRfc3RhdGU6ICAgICAgIEN1cnJlbnQgZHJpdmVy IGFuZCBoYXJkd2FyZSBzdGF0ZS4KLSAqIEBjbGtfY2I6CQkgQ2FsbGJhY2sgZm9yIERTSSBjbG9j ayBjb250cm9sLgotICogQGlycV9pbmZvOiAgICAgICAgICAgIEludGVycnVwdCBpbmZvcm1hdGlv bi4KLSAqIEBjbGtfaW5mbzogICAgICAgICAgICBDbG9jayBpbmZvcm1hdGlvbi4KLSAqIEBjbGtf ZnJlcTogICAgICAgICAgICBEU2kgTGluayBjbG9jayBmcmVxdWVuY3kgaW5mb3JtYXRpb24uCi0g KiBAcHdyX2luZm86ICAgICAgICAgICAgUG93ZXIgaW5mb3JtYXRpb24uCi0gKiBAYXhpX2J1c19p bmZvOiAgICAgICAgQVhJIGJ1cyBpbmZvcm1hdGlvbi4KLSAqIEBob3N0X2NvbmZpZzogICAgICAg ICBDdXJyZW50IGhvc3QgY29uZmlndXJhdGlvbi4KLSAqIEBtb2RlX2JvdW5kczogICAgICAgICBC b3VuZGFyaWVzIG9mIHRoZSBkZWZhdWx0IG1vZGUgUk9JLgotICogICAgICAgICAgICAgICAgICAg ICAgIE9yaWdpbiBpcyBhdCB0b3AgbGVmdCBvZiBhbGwgQ1RSTHMuCi0gKiBAcm9pOiAgICAgICAg ICAgICAgICAgUGFydGlhbCB1cGRhdGUgcmVnaW9uIG9mIGludGVyZXN0LgotICogICAgICAgICAg ICAgICAgICAgICAgIE9yaWdpbiBpcyB0b3AgbGVmdCBvZiB0aGlzIENUUkwuCi0gKiBAdHhfY21k X2J1ZjogICAgICAgICAgVHggY29tbWFuZCBidWZmZXIuCi0gKiBAY21kX2J1ZmZlcl9pb3ZhOiAg ICAgY21kIGJ1ZmZlciBtYXBwZWQgYWRkcmVzcy4KLSAqIEB2YWRkcjoJCSBDUFUgdmlydHVhbCBh ZGRyZXNzIG9mIGNtZCBidWZmZXIuCi0gKiBAY21kX2J1ZmZlcl9zaXplOiAgICAgU2l6ZSBvZiBj b21tYW5kIGJ1ZmZlci4KLSAqIEBkZWJ1Z2ZzX3Jvb3Q6ICAgICAgICBSb290IGZvciBkZWJ1Z2Zz IGVudHJpZXMuCi0gKiBAbWlzcl9lbmFibGU6ICAgICAgICAgRnJhbWUgTUlTUiBlbmFibGUvZGlz YWJsZQotICogQG1pc3JfY2FjaGU6ICAgICAgICAgIENhY2hlZCBGcmFtZSBNSVNSIHZhbHVlCi0g KiBAcGh5X2lzb2xhdGlvbl9lbmFibGVkOiAgICBBIGJvb2xlYW4gcHJvcGVydHkgYWxsb3dzIHRv IGlzb2xhdGUgdGhlIHBoeSBmcm9tCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgZHNpIGNv bnRyb2xsZXIgYW5kIHJ1biBvbmx5IGRzaSBjb250cm9sbGVyLgotICovCi1zdHJ1Y3QgZHNpX2N0 cmwgewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0JdTMyIGNlbGxfaW5kZXg7Ci0J dTMyIGhvcml6X2luZGV4OwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JdTMyIHJlZmNvdW50OwotCXN0 cnVjdCBtdXRleCBjdHJsX2xvY2s7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXY7Ci0KLQll bnVtIGRzaV9jdHJsX3ZlcnNpb24gdmVyc2lvbjsKLQlzdHJ1Y3QgZHNpX2N0cmxfaHcgaHc7Ci0K LQkvKiBDdXJyZW50IHN0YXRlICovCi0Jc3RydWN0IGRzaV9jdHJsX3N0YXRlX2luZm8gY3VycmVu dF9zdGF0ZTsKLQlzdHJ1Y3QgY2xrX2N0cmxfY2IgY2xrX2NiOwotCi0Jc3RydWN0IGRzaV9jdHJs X2ludGVycnVwdHMgaXJxX2luZm87Ci0KLQkvKiBDbG9jayBhbmQgcG93ZXIgc3RhdGVzICovCi0J c3RydWN0IGRzaV9jdHJsX2Nsa19pbmZvIGNsa19pbmZvOwotCXN0cnVjdCBsaW5rX2Nsa19mcmVx IGNsa19mcmVxOwotCXN0cnVjdCBkc2lfY3RybF9wb3dlcl9pbmZvIHB3cl9pbmZvOwotCXN0cnVj dCBkc2lfY3RybF9idXNfc2NhbGVfaW5mbyBheGlfYnVzX2luZm87Ci0KLQlzdHJ1Y3QgZHNpX2hv c3RfY29uZmlnIGhvc3RfY29uZmlnOwotCXN0cnVjdCBkc2lfcmVjdCBtb2RlX2JvdW5kczsKLQlz dHJ1Y3QgZHNpX3JlY3Qgcm9pOwotCi0JLyogQ29tbWFuZCB0eCBhbmQgcnggKi8KLQlzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKnR4X2NtZF9idWY7Ci0JdTMyIGNtZF9idWZmZXJfc2l6ZTsKLQl1MzIg Y21kX2J1ZmZlcl9pb3ZhOwotCXZvaWQgKnZhZGRyOwotCi0JLyogRGVidWcgSW5mb3JtYXRpb24g Ki8KLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jvb3Q7Ci0KLQkvKiBNSVNSICovCi0JYm9vbCBt aXNyX2VuYWJsZTsKLQl1MzIgbWlzcl9jYWNoZTsKLQotCWJvb2wgcGh5X2lzb2xhdGlvbl9lbmFi bGVkOwotfTsKLQotLyoqCi0gKiBkc2lfY3RybF9nZXQoKSAtIGdldCBhIGRzaV9jdHJsIGhhbmRs ZSBmcm9tIGFuIG9mX25vZGUKLSAqIEBvZl9ub2RlOiAgICBvZl9ub2RlIG9mIHRoZSBEU0kgY29u dHJvbGxlci4KLSAqCi0gKiBHZXRzIHRoZSBEU0kgY29udHJvbGxlciBoYW5kbGUgZm9yIHRoZSBj b3JyZXNwb25kaW5nIG9mX25vZGUuIFRoZSByZWYgY291bnQKLSAqIGlzIGluY3JlbWVudGVkIHRv IG9uZSBhbmQgYWxsIHN1YnNlcXVlbnQgZ2V0cyB3aWxsIGZhaWwgdW50aWwgdGhlIG9yaWdpbmFs Ci0gKiBjbGllbnRzIGNhbGxzIGEgcHV0LgotICoKLSAqIFJldHVybjogRFNJIENvbnRyb2xsZXIg aGFuZGxlLgotICovCi1zdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsX2dldChzdHJ1Y3QgZGV2aWNl X25vZGUgKm9mX25vZGUpOwotCi0vKioKLSAqIGRzaV9jdHJsX3B1dCgpIC0gcmVsZWFzZXMgYSBk c2kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAZHNpX2N0cmw6ICAgICAgIERTSSBjb250cm9sbGVy IGhhbmRsZS4KLSAqCi0gKiBSZWxlYXNlcyB0aGUgRFNJIGNvbnRyb2xsZXIuIERyaXZlciB3aWxs IGNsZWFuIHVwIGFsbCByZXNvdXJjZXMgYW5kIHB1dHMgYmFjawotICogdGhlIERTSSBjb250cm9s bGVyIGludG8gcmVzZXQgc3RhdGUuCi0gKi8KLXZvaWQgZHNpX2N0cmxfcHV0KHN0cnVjdCBkc2lf Y3RybCAqZHNpX2N0cmwpOwotCi0vKioKLSAqIGRzaV9jdHJsX2Rydl9pbml0KCkgLSBpbml0aWFs aXplIGRzaSBjb250cm9sbGVyIGRyaXZlci4KLSAqIEBkc2lfY3RybDogICAgICBEU0kgY29udHJv bGxlciBoYW5kbGUuCi0gKiBAcGFyZW50OiAgICAgICAgUGFyZW50IGRpcmVjdG9yeSBmb3IgZGVi dWcgZnMuCi0gKgotICogSW5pdGlhbGl6ZXMgRFNJIGNvbnRyb2xsZXIgZHJpdmVyLiBEcml2ZXIg c2hvdWxkIGJlIGluaXRpYWxpemVkIGFmdGVyCi0gKiBkc2lfY3RybF9nZXQoKSBzdWNjZWVkcy4K LSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9kcnZfaW5pdChz dHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQpOwotCi0vKioK LSAqIGRzaV9jdHJsX2Rydl9kZWluaXQoKSAtIGRlLWluaXRpYWxpemVzIGRzaSBjb250cm9sbGVy IGRyaXZlcgotICogQGRzaV9jdHJsOiAgICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqCi0g KiBSZWxlYXNlcyBhbGwgcmVzb3VyY2VzIGFjcXVpcmVkIGJ5IGRzaV9jdHJsX2Rydl9pbml0KCku Ci0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfZHJ2X2RlaW5p dChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsKTsKLQotLyoqCi0gKiBkc2lfY3RybF92YWxpZGF0 ZV90aW1pbmcoKSAtIHZhbGlkYXRlIGEgdmlkZW8gdGltaW5nIGNvbmZpZ3VyYXRpb24KLSAqIEBk c2lfY3RybDogICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICogQHRpbWluZzogICAgICAg ICBQb2ludGVyIHRvIHRpbWluZyBkYXRhLgotICoKLSAqIERyaXZlciB3aWxsIHZhbGlkYXRlIGlm IHRoZSB0aW1pbmcgY29uZmlndXJhdGlvbiBpcyBzdXBwb3J0ZWQgb24gdGhlCi0gKiBjb250cm9s bGVyIGhhcmR3YXJlLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZSBpZiB0aW1pbmcgaXMgbm90 IHN1cHBvcnRlZC4KLSAqLwotaW50IGRzaV9jdHJsX3ZhbGlkYXRlX3RpbWluZyhzdHJ1Y3QgZHNp X2N0cmwgKmRzaV9jdHJsLAotCQkJICAgICBzdHJ1Y3QgZHNpX21vZGVfaW5mbyAqdGltaW5nKTsK LQotLyoqCi0gKiBkc2lfY3RybF91cGRhdGVfaG9zdF9jb25maWcoKSAtIHVwZGF0ZSBkc2kgaG9z dCBjb25maWd1cmF0aW9uCi0gKiBAZHNpX2N0cmw6ICAgICAgICAgIERTSSBjb250cm9sbGVyIGhh bmRsZS4KLSAqIEBjb25maWc6ICAgICAgICAgICAgRFNJIGhvc3QgY29uZmlndXJhdGlvbi4KLSAq IEBmbGFnczogICAgICAgICAgICAgZHNpX21vZGVfZmxhZ3MgbW9kaWZ5aW5nIHRoZSBiZWhhdmlv cgotICogQGNsa19oYW5kbGU6ICAgICAgICBDbG9jayBoYW5kbGUgZm9yIERTSSBjbG9ja3MKLSAq Ci0gKiBVcGRhdGVzIGRyaXZlciB3aXRoIG5ldyBIb3N0IGNvbmZpZ3VyYXRpb24gdG8gdXNlIGZv ciBob3N0IGluaXRpYWxpemF0aW9uLgotICogVGhpcyBmdW5jdGlvbiBjYWxsIHdpbGwgb25seSB1 cGRhdGUgdGhlIHNvZnR3YXJlIGNvbnRleHQuIFRoZSBzdG9yZWQKLSAqIGNvbmZpZ3VyYXRpb24g aW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIHdoZW4gdGhlIGhvc3QgaXMgaW5pdGlhbGl6ZWQuCi0g KgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfdXBkYXRlX2hvc3Rf Y29uZmlnKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCQkJc3RydWN0IGRzaV9ob3N0X2Nv bmZpZyAqY29uZmlnLAotCQkJCWludCBmbGFncywgdm9pZCAqY2xrX2hhbmRsZSk7Ci0KLS8qKgot ICogZHNpX2N0cmxfdGltaW5nX2RiX3VwZGF0ZSgpIC0gdXBkYXRlIG9ubHkgY29udHJvbGxlciBU aW1pbmcgREIKLSAqIEBkc2lfY3RybDogICAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgot ICogQGVuYWJsZTogICAgICAgICAgICBFbmFibGUvZGlzYWJsZSBUaW1pbmcgREIgcmVnaXN0ZXIK LSAqCi0gKiBVcGRhdGUgdGltaW5nIGRiIHJlZ2lzdGVyIHZhbHVlIGR1cmluZyBkZnBzIHVzZWNh c2VzCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfdGltaW5n X2RiX3VwZGF0ZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQlib29sIGVuYWJsZSk7Ci0K LS8qKgotICogZHNpX2N0cmxfYXN5bmNfdGltaW5nX3VwZGF0ZSgpIC0gdXBkYXRlIG9ubHkgY29u dHJvbGxlciB0aW1pbmcKLSAqIEBkc2lfY3RybDogICAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFu ZGxlLgotICogQHRpbWluZzogICAgICAgICAgICBOZXcgRFNJIHRpbWluZyBpbmZvCi0gKgotICog VXBkYXRlcyBob3N0IHRpbWluZyB2YWx1ZXMgdG8gYXN5bmNocm9ub3VzbHkgdHJhbnNpdGlvbiB0 byBuZXcgdGltaW5nCi0gKiBGb3IgZXhhbXBsZSwgdG8gdXBkYXRlIHRoZSBwb3JjaCB2YWx1ZXMg aW4gYSBzZWFtbGVzcy9keW5hbWljIGZwcyBzd2l0Y2guCi0gKgotICogUmV0dXJuOiBlcnJvciBj b2RlLgotICovCi1pbnQgZHNpX2N0cmxfYXN5bmNfdGltaW5nX3VwZGF0ZShzdHJ1Y3QgZHNpX2N0 cmwgKmRzaV9jdHJsLAotCQlzdHJ1Y3QgZHNpX21vZGVfaW5mbyAqdGltaW5nKTsKLQotLyoqCi0g KiBkc2lfY3RybF9waHlfc3dfcmVzZXQoKSAtIHBlcmZvcm0gYSBQSFkgc29mdHdhcmUgcmVzZXQK LSAqIEBkc2lfY3RybDogICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKgotICogUGVy Zm9ybXMgYSBQSFkgc29mdHdhcmUgcmVzZXQgb24gdGhlIERTSSBjb250cm9sbGVyLiBSZXNldCBz aG91bGQgYmUgZG9uZQotICogd2hlbiB0aGUgY29udHJvbGxlciBwb3dlciBzdGF0ZSBpcyBEU0lf Q1RSTF9QT1dFUl9DT1JFX0NMS19PTiBhbmQgdGhlIFBIWSBpcwotICogbm90IGVuYWJsZWQuCi0g KgotICogVGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgZHJpdmVyIGlzIGluIGFueSBvdGhlciBz dGF0ZS4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9waHlf c3dfcmVzZXQoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCk7Ci0KLS8qKgotICogZHNpX2N0cmxf cGh5X3Jlc2V0X2NvbmZpZygpIC0gTWFzay91bm1hc2sgcHJvcGFnYXRpb24gb2YgYWhiIHJlc2V0 IHNpZ25hbAotICoJdG8gRFNJIFBIWSBoYXJkd2FyZS4KLSAqIEBkc2lfY3RybDogICAgICAgIERT SSBjb250cm9sbGVyIGhhbmRsZS4KLSAqIEBlbmFibGU6CQkJTWFzay91bm1hc2sgdGhlIFBIWSBy ZXNldCBzaWduYWwuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0 cmxfcGh5X3Jlc2V0X2NvbmZpZyhzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLCBib29sIGVuYWJs ZSk7Ci0KLS8qKgotICogZHNpX2N0cmxfc29mdF9yZXNldCgpIC0gcGVyZm9ybSBhIHNvZnQgcmVz ZXQgb24gRFNJIGNvbnRyb2xsZXIKLSAqIEBkc2lfY3RybDogICAgICAgICBEU0kgY29udHJvbGxl ciBoYW5kbGUuCi0gKgotICogVGhlIHZpZGVvLCBjb21tYW5kIGFuZCBjb250cm9sbGVyIGVuZ2lu ZXMgd2lsbCBiZSBkaXNhYmxlZCBiZWZvcmUgdGhlCi0gKiByZXNldCBpcyB0cmlnZ2VyZWQuIEFm dGVyLCB0aGUgZW5naW5lcyB3aWxsIGJlIHJlLWVuYWJsZWQgdG8gdGhlIHNhbWUgc3RhdGUKLSAq IGFzIGJlZm9yZSB0aGUgcmVzZXQuCi0gKgotICogSWYgdGhlIHJlc2V0IGlzIGRvbmUgd2hpbGUg TURQIHRpbWluZyBlbmdpbmUgaXMgdHVybmVkIG9uLCB0aGUgdmlkZW8KLSAqIGVuZ2luZSBzaG91 bGQgYmUgcmUtZW5hYmxlZCBvbmx5IGR1cmluZyB0aGUgdmVydGljYWwgYmxhbmtpbmcgdGltZS4K LSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUKLSAqLwotaW50IGRzaV9jdHJsX3NvZnRfcmVzZXQo c3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCk7Ci0KLS8qKgotICogZHNpX2N0cmxfaG9zdF90aW1p bmdfdXBkYXRlIC0gcmVpbml0aWFsaXplIGhvc3Qgd2l0aCBuZXcgdGltaW5nIHZhbHVlcwotICog QGRzaV9jdHJsOiAgICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqCi0gKiBSZWluaXRp YWxpemUgRFNJIGNvbnRyb2xsZXIgaGFyZHdhcmUgd2l0aCBuZXcgZGlzcGxheSB0aW1pbmcgdmFs dWVzCi0gKiB3aGVuIHJlc29sdXRpb24gaXMgc3dpdGNoZWQgZHluYW1pY2FsbHkuCi0gKgotICog UmV0dXJuOiBlcnJvciBjb2RlCi0gKi8KLWludCBkc2lfY3RybF9ob3N0X3RpbWluZ191cGRhdGUo c3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCk7Ci0KLS8qKgotICogZHNpX2N0cmxfaG9zdF9pbml0 KCkgLSBJbml0aWFsaXplIERTSSBob3N0IGhhcmR3YXJlLgotICogQGRzaV9jdHJsOiAgICAgICAg RFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICoKLSAqIEluaXRpYWxpemVzIERTSSBjb250cm9sbGVy IGhhcmR3YXJlIHdpdGggaG9zdCBjb25maWd1cmF0aW9uIHByb3ZpZGVkIGJ5Ci0gKiBkc2lfY3Ry bF91cGRhdGVfaG9zdF9jb25maWcoKS4gSW5pdGlhbGl6YXRpb24gY2FuIGJlIHBlcmZvcm1lZCBv bmx5IGR1cmluZwotICogRFNJX0NUUkxfUE9XRVJfQ09SRV9DTEtfT04gc3RhdGUgYW5kIGFmdGVy IHRoZSBQSFkgU1cgcmVzZXQgaGFzIGJlZW4KLSAqIHBlcmZvcm1lZC4KLSAqCi0gKiBSZXR1cm46 IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9ob3N0X2luaXQoc3RydWN0IGRzaV9jdHJs ICpkc2lfY3RybCk7Ci0KLS8qKgotICogZHNpX2N0cmxfaG9zdF9kZWluaXQoKSAtIERlLUluaXRp YWxpemUgRFNJIGhvc3QgaGFyZHdhcmUuCi0gKiBAZHNpX2N0cmw6ICAgICAgICBEU0kgY29udHJv bGxlciBoYW5kbGUuCi0gKgotICogRGUtaW5pdGlhbGl6ZXMgRFNJIGNvbnRyb2xsZXIgaGFyZHdh cmUuIEl0IGNhbiBiZSBwZXJmb3JtZWQgb25seSBkdXJpbmcKLSAqIERTSV9DVFJMX1BPV0VSX0NP UkVfQ0xLX09OIHN0YXRlIGFmdGVyIExJTksgY2xvY2tzIGhhdmUgYmVlbiB0dXJuZWQgb2ZmLgot ICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJsX2hvc3RfZGVpbml0 KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpOwotCi0vKioKLSAqIGRzaV9jdHJsX3NldF91bHBz KCkgLSBzZXQgVUxQUyBzdGF0ZSBmb3IgRFNJIGxhbmVzLgotICogQGRzaV9jdHJsOgkJRFNJIGNv bnRyb2xsZXIgaGFuZGxlLgotICogQGVuYWJsZToJCWVuYWJsZS9kaXNhYmxlIFVMUFMuCi0gKgot ICogVUxQUyBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCBhZnRlciBEU0kgaG9zdCBlbmdpbmUgaXMg dHVybmVkIG9uLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJs X3NldF91bHBzKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsIGJvb2wgZW5hYmxlKTsKLQotLyoq Ci0gKiBkc2lfY3RybF9zZXR1cCgpIC0gU2V0dXAgRFNJIGhvc3QgaGFyZHdhcmUgd2hpbGUgY29t aW5nIG91dCBvZiBpZGxlIHNjcmVlbi4KLSAqIEBkc2lfY3RybDogICAgICAgIERTSSBjb250cm9s bGVyIGhhbmRsZS4KLSAqCi0gKiBJbml0aWFsaXplcyBEU0kgY29udHJvbGxlciBoYXJkd2FyZSB3 aXRoIGhvc3QgY29uZmlndXJhdGlvbiBwcm92aWRlZCBieQotICogZHNpX2N0cmxfdXBkYXRlX2hv c3RfY29uZmlnKCkuIEluaXRpYWxpemF0aW9uIGNhbiBiZSBwZXJmb3JtZWQgb25seSBkdXJpbmcK LSAqIERTSV9DVFJMX1BPV0VSX0NPUkVfQ0xLX09OIHN0YXRlIGFuZCBhZnRlciB0aGUgUEhZIFNX IHJlc2V0IGhhcyBiZWVuCi0gKiBwZXJmb3JtZWQuCi0gKgotICogQWxzbyB1c2VkIHRvIHByb2dy YW0gdGhlIHZpZGVvIG1vZGUgdGltaW5nIHZhbHVlcy4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNv ZGUuCi0gKi8KLWludCBkc2lfY3RybF9zZXR1cChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsKTsK LQotLyoqCi0gKiBkc2lfY3RybF9zZXRfdHBnX3N0YXRlKCkgLSBlbmFibGUvZGlzYWJsZSB0ZXN0 IHBhdHRlcm4gb24gdGhlIGNvbnRyb2xsZXIKLSAqIEBkc2lfY3RybDogICAgICAgICAgRFNJIGNv bnRyb2xsZXIgaGFuZGxlLgotICogQG9uOiAgICAgICAgICAgICAgICBlbmFibGUvZGlzYWJsZSB0 ZXN0IHBhdHRlcm4uCi0gKgotICogVGVzdCBwYXR0ZXJuIGNhbiBiZSBlbmFibGVkIG9ubHkgYWZ0 ZXIgVmlkZW8gZW5naW5lIChmb3IgdmlkZW8gbW9kZSBwYW5lbHMpCi0gKiBvciBjb21tYW5kIGVu Z2luZSAoZm9yIGNtZCBtb2RlIHBhbmVscykgaXMgZW5hYmxlZC4KLSAqCi0gKiBSZXR1cm46IGVy cm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9zZXRfdHBnX3N0YXRlKHN0cnVjdCBkc2lfY3Ry bCAqZHNpX2N0cmwsIGJvb2wgb24pOwotCi0vKioKLSAqIGRzaV9jdHJsX2NtZF90cmFuc2Zlcigp IC0gVHJhbnNmZXIgY29tbWFuZHMgb24gRFNJIGxpbmsKLSAqIEBkc2lfY3RybDogICAgICAgICAg ICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICogQG1zZzogICAgICAgICAgICAgICAgICBNZXNz YWdlIHRvIHRyYW5zZmVyIG9uIERTSSBsaW5rLgotICogQGZsYWdzOiAgICAgICAgICAgICAgICBN b2RpZmllcnMgZm9yIG1lc3NhZ2UgdHJhbnNmZXIuCi0gKgotICogQ29tbWFuZCB0cmFuc2ZlciBj YW4gYmUgZG9uZSBvbmx5IHdoZW4gY29tbWFuZCBlbmdpbmUgaXMgZW5hYmxlZC4gVGhlCi0gKiB0 cmFuc2ZlciBBUEkgd2lsbCB1bnRpbCBlaXRoZXIgdGhlIGNvbW1hbmQgdHJhbnNmZXIgZmluaXNo ZXMgb3IgdGhlIHRpbWVvdXQKLSAqIHZhbHVlIGlzIHJlYWNoZWQuIElmIHRoZSB0cmlnZ2VyIGlz IGRlZmVycmVkLCBpdCB3aWxsIHJldHVybiB3aXRob3V0Ci0gKiB0cmlnZ2VyaW5nIHRoZSB0cmFu c2Zlci4gQ29tbWFuZCBwYXJhbWV0ZXJzIGFyZSBwcm9ncmFtbWVkIHRvIGhhcmR3YXJlLgotICoK LSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJsX2NtZF90cmFuc2Zlcihz dHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNn ICptc2csCi0JCQkgIHUzMiBmbGFncyk7Ci0KLS8qKgotICogZHNpX2N0cmxfY21kX3R4X3RyaWdn ZXIoKSAtIFRyaWdnZXIgYSBkZWZlcnJlZCBjb21tYW5kLgotICogQGRzaV9jdHJsOiAgICAgICAg ICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICogQGZsYWdzOiAgICAgICAgICAgICAgICAg TW9kaWZpZXJzLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJs X2NtZF90eF90cmlnZ2VyKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsIHUzMiBmbGFncyk7Ci0K LS8qKgotICogZHNpX2N0cmxfc2V0X3Bvd2VyX3N0YXRlKCkgLSBzZXQgcG93ZXIgc3RhdGUgZm9y IGRzaSBjb250cm9sbGVyCi0gKiBAZHNpX2N0cmw6ICAgICAgICAgIERTSSBjb250cm9sbGVyIGhh bmRsZS4KLSAqIEBzdGF0ZTogICAgICAgICAgICAgUG93ZXIgc3RhdGUuCi0gKgotICogU2V0IHBv d2VyIHN0YXRlIGZvciBEU0kgY29udHJvbGxlci4gUG93ZXIgc3RhdGUgY2FuIGJlIGNoYW5nZWQg b25seSB3aGVuCi0gKiBDb250cm9sbGVyLCBWaWRlbyBhbmQgQ29tbWFuZCBlbmdpbmVzIGFyZSB0 dXJuZWQgb2ZmLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJs X3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJICAgICBlbnVt IGRzaV9wb3dlcl9zdGF0ZSBzdGF0ZSk7Ci0KLS8qKgotICogZHNpX2N0cmxfc2V0X2NtZF9lbmdp bmVfc3RhdGUoKSAtIHNldCBjb21tYW5kIGVuZ2luZSBzdGF0ZQotICogQGRzaV9jdHJsOiAgICAg ICAgICAgIERTSSBDb250cm9sbGVyIGhhbmRsZS4KLSAqIEBzdGF0ZTogICAgICAgICAgICAgICBF bmdpbmUgc3RhdGUuCi0gKgotICogQ29tbWFuZCBlbmdpbmUgc3RhdGUgY2FuIGJlIG1vZGlmaWVk IG9ubHkgd2hlbiBEU0kgY29udHJvbGxlciBwb3dlciBzdGF0ZSBpcwotICogc2V0IHRvIERTSV9D VFJMX1BPV0VSX0xJTktfQ0xLX09OLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwot aW50IGRzaV9jdHJsX3NldF9jbWRfZW5naW5lX3N0YXRlKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0 cmwsCi0JCQkJICBlbnVtIGRzaV9lbmdpbmVfc3RhdGUgc3RhdGUpOwotCi0vKioKLSAqIGRzaV9j dHJsX3NldF92aWRfZW5naW5lX3N0YXRlKCkgLSBzZXQgdmlkZW8gZW5naW5lIHN0YXRlCi0gKiBA ZHNpX2N0cmw6ICAgICAgICAgICAgRFNJIENvbnRyb2xsZXIgaGFuZGxlLgotICogQHN0YXRlOiAg ICAgICAgICAgICAgIEVuZ2luZSBzdGF0ZS4KLSAqCi0gKiBWaWRlbyBlbmdpbmUgc3RhdGUgY2Fu IGJlIG1vZGlmaWVkIG9ubHkgd2hlbiBEU0kgY29udHJvbGxlciBwb3dlciBzdGF0ZSBpcwotICog c2V0IHRvIERTSV9DVFJMX1BPV0VSX0xJTktfQ0xLX09OLgotICoKLSAqIFJldHVybjogZXJyb3Ig Y29kZS4KLSAqLwotaW50IGRzaV9jdHJsX3NldF92aWRfZW5naW5lX3N0YXRlKHN0cnVjdCBkc2lf Y3RybCAqZHNpX2N0cmwsCi0JCQkJICBlbnVtIGRzaV9lbmdpbmVfc3RhdGUgc3RhdGUpOwotCi0v KioKLSAqIGRzaV9jdHJsX3NldF9ob3N0X2VuZ2luZV9zdGF0ZSgpIC0gc2V0IGhvc3QgZW5naW5l IHN0YXRlCi0gKiBAZHNpX2N0cmw6ICAgICAgICAgICAgRFNJIENvbnRyb2xsZXIgaGFuZGxlLgot ICogQHN0YXRlOiAgICAgICAgICAgICAgIEVuZ2luZSBzdGF0ZS4KLSAqCi0gKiBIb3N0IGVuZ2lu ZSBzdGF0ZSBjYW4gYmUgbW9kaWZpZWQgb25seSB3aGVuIERTSSBjb250cm9sbGVyIHBvd2VyIHN0 YXRlIGlzCi0gKiBzZXQgdG8gRFNJX0NUUkxfUE9XRVJfTElOS19DTEtfT04gYW5kIGNtZCwgdmlk ZW8gZW5naW5lcyBhcmUgZGlzYWJsZWQuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICov Ci1pbnQgZHNpX2N0cmxfc2V0X2hvc3RfZW5naW5lX3N0YXRlKHN0cnVjdCBkc2lfY3RybCAqZHNp X2N0cmwsCi0JCQkJICAgZW51bSBkc2lfZW5naW5lX3N0YXRlIHN0YXRlKTsKLQotLyoqCi0gKiBk c2lfY3RybF9zZXRfdWxwcygpIC0gc2V0IFVMUFMgc3RhdGUgZm9yIERTSSBsYW5lcy4KLSAqIEBk c2lfY3RybDogICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAZW5hYmxlOiAgICAg ICAgICAgZW5hYmxlL2Rpc2FibGUgVUxQUy4KLSAqCi0gKiBVTFBTIGNhbiBiZSBlbmFibGVkL2Rp c2FibGVkIGFmdGVyIERTSSBob3N0IGVuZ2luZSBpcyB0dXJuZWQgb24uCi0gKgotICogUmV0dXJu OiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfc2V0X3VscHMoc3RydWN0IGRzaV9jdHJs ICpkc2lfY3RybCwgYm9vbCBlbmFibGUpOwotCi0vKioKLSAqIGRzaV9jdHJsX2Nsa19jYl9yZWdp c3RlcigpIC0gUmVnaXN0ZXIgRFNJIGNvbnRyb2xsZXIgY2xrIGNvbnRyb2wgY2FsbGJhY2sKLSAq IEBkc2lfY3RybDogICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAY2xrX19jYjog ICAgICBTdHJ1Y3R1cmUgY29udGFpbmluZyBjYWxsYmFjayBmb3IgY2xvY2sgY29udHJvbC4KLSAq Ci0gKiBSZWdpc3RlciBjYWxsIGZvciBEU0kgY2xvY2sgY29udHJvbAotICoKLSAqIFJldHVybjog ZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJsX2Nsa19jYl9yZWdpc3RlcihzdHJ1Y3QgZHNp X2N0cmwgKmRzaV9jdHJsLAotCXN0cnVjdCBjbGtfY3RybF9jYiAqY2xrX2NiKTsKLQotLyoqCi0g KiBkc2lfY3RybF9zZXRfY2xhbXBfc3RhdGUoKSAtIHNldCBjbGFtcCBzdGF0ZSBmb3IgRFNJIHBo eQotICogQGRzaV9jdHJsOiAgICAgICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBA ZW5hYmxlOiAgICAgICAgICAgICAgIGVuYWJsZS9kaXNhYmxlIGNsYW1waW5nLgotICogQHVscHNf ZW5hYmxlZDogICAgICAgICB1bHBzIHN0YXRlLgotICoKLSAqIENsYW1wcyBjYW4gYmUgZW5hYmxl ZC9kaXNhYmxlZCB3aGlsZSBEU0kgY29udHJvbGxlciBpcyBzdGlsbCB0dXJuZWQgb24uCi0gKgot ICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfc2V0X2NsYW1wX3N0YXRl KHN0cnVjdCBkc2lfY3RybCAqZHNpX0N0cmwsCi0JCWJvb2wgZW5hYmxlLCBib29sIHVscHNfZW5h YmxlZCk7Ci0KLS8qKgotICogZHNpX2N0cmxfc2V0X2Nsb2NrX3NvdXJjZSgpIC0gc2V0IGNsb2Nr IHNvdXJjZSBmcHIgZHNpIGxpbmsgY2xvY2tzCi0gKiBAZHNpX2N0cmw6ICAgICAgICBEU0kgY29u dHJvbGxlciBoYW5kbGUuCi0gKiBAc291cmNlX2Nsa3M6ICAgICBTb3VyY2UgY2xvY2tzIGZvciBE U0kgbGluayBjbG9ja3MuCi0gKgotICogQ2xvY2sgc291cmNlIHNob3VsZCBiZSBjaGFuZ2VkIHdo aWxlIGxpbmsgY2xvY2tzIGFyZSBkaXNhYmxlZC4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUu Ci0gKi8KLWludCBkc2lfY3RybF9zZXRfY2xvY2tfc291cmNlKHN0cnVjdCBkc2lfY3RybCAqZHNp X2N0cmwsCi0JCQkgICAgICBzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCAqc291cmNlX2Nsa3MpOwot Ci0vKioKLSAqIGRzaV9jdHJsX2VuYWJsZV9zdGF0dXNfaW50ZXJydXB0KCkgLSBlbmFibGUgc3Rh dHVzIGludGVycnVwdHMKLSAqIEBkc2lfY3RybDogICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRs ZS4KLSAqIEBpbnRyX2lkeDogICAgICAgIEluZGV4IGludGVycnVwdCB0byBkaXNhYmxlLgotICog QGV2ZW50X2luZm86ICAgICAgUG9pbnRlciB0byBldmVudCBjYWxsYmFjayBkZWZpbml0aW9uCi0g Ki8KLXZvaWQgZHNpX2N0cmxfZW5hYmxlX3N0YXR1c19pbnRlcnJ1cHQoc3RydWN0IGRzaV9jdHJs ICpkc2lfY3RybCwKLQkJdWludDMyX3QgaW50cl9pZHgsIHN0cnVjdCBkc2lfZXZlbnRfY2JfaW5m byAqZXZlbnRfaW5mbyk7Ci0KLS8qKgotICogZHNpX2N0cmxfZGlzYWJsZV9zdGF0dXNfaW50ZXJy dXB0KCkgLSBkaXNhYmxlIHN0YXR1cyBpbnRlcnJ1cHRzCi0gKiBAZHNpX2N0cmw6ICAgICAgICBE U0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAaW50cl9pZHg6ICAgICAgICBJbmRleCBpbnRlcnJ1 cHQgdG8gZGlzYWJsZS4KLSAqLwotdm9pZCBkc2lfY3RybF9kaXNhYmxlX3N0YXR1c19pbnRlcnJ1 cHQoCi0JCXN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsIHVpbnQzMl90IGludHJfaWR4KTsKLQot LyoqCi0gKiBkc2lfY3RybF9zZXR1cF9taXNyKCkgLSBTZXR1cCBmcmFtZSBNSVNSCi0gKiBAZHNp X2N0cmw6ICAgICAgICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAZW5hYmxlOiAg ICAgICAgICAgICAgICBlbmFibGUvZGlzYWJsZSBNSVNSLgotICogQGZyYW1lX2NvdW50OiAgICAg ICAgICAgTnVtYmVyIG9mIGZyYW1lcyB0byBhY2N1bXVsYXRlIE1JU1IuCi0gKgotICogUmV0dXJu OiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfc2V0dXBfbWlzcihzdHJ1Y3QgZHNpX2N0 cmwgKmRzaV9jdHJsLAotCQkJYm9vbCBlbmFibGUsCi0JCQl1MzIgZnJhbWVfY291bnQpOwotCi0v KioKLSAqIGRzaV9jdHJsX2NvbGxlY3RfbWlzcigpIC0gUmVhZCBmcmFtZSBNSVNSCi0gKiBAZHNp X2N0cmw6ICAgICAgICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKgotICogUmV0dXJu OiBNSVNSIHZhbHVlLgotICovCi11MzIgZHNpX2N0cmxfY29sbGVjdF9taXNyKHN0cnVjdCBkc2lf Y3RybCAqZHNpX2N0cmwpOwotCi0vKioKLSAqIGRzaV9jdHJsX2Rydl9yZWdpc3RlcigpIC0gcmVn aXN0ZXIgcGxhdGZvcm0gZHJpdmVyIGZvciBkc2kgY29udHJvbGxlcgotICovCi12b2lkIGRzaV9j dHJsX2Rydl9yZWdpc3Rlcih2b2lkKTsKLQotLyoqCi0gKiBkc2lfY3RybF9kcnZfdW5yZWdpc3Rl cigpIC0gdW5yZWdpc3RlciBwbGF0Zm9ybSBkcml2ZXIKLSAqLwotdm9pZCBkc2lfY3RybF9kcnZf dW5yZWdpc3Rlcih2b2lkKTsKLQotI2VuZGlmIC8qIF9EU0lfQ1RSTF9IXyAqLwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9ody5oIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9ody5oCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCA1M2IyMGY0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHNpLXN0YWdpbmcvZHNpX2N0cmxfaHcuaAorKysgL2Rldi9udWxsCkBAIC0xLDc1MiArMCwwIEBA Ci0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAq IG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2lmbmRlZiBfRFNJX0NUUkxf SFdfSF8KLSNkZWZpbmUgX0RTSV9DVFJMX0hXX0hfCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwu aD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgot I2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgotCi0jaW5jbHVkZSAiZHNpX2RlZnMuaCIKLQotLyoq Ci0gKiBNb2RpZmllciBmbGFnIGZvciBjb21tYW5kIHRyYW5zbWlzc2lvbi4gSWYgdGhpcyBmbGFn IGlzIHNldCwgY29tbWFuZAotICogaW5mb3JtYXRpb24gaXMgcHJvZ3JhbW1lZCB0byBoYXJkd2Fy ZSBhbmQgdHJhbnNtaXNzaW9uIGlzIG5vdCB0cmlnZ2VyZWQuCi0gKiBDYWxsZXIgc2hvdWxkIGNh bGwgdGhlIHRyaWdnZXJfY29tbWFuZF9kbWEoKSB0byBzdGFydCB0aGUgdHJhbnNtaXNzaW9uLiBU aGlzCi0gKiBmbGFnIGlzIHZhbGVkIGZvciBraWNrb2ZmX2NvbW1hbmQoKSBhbmQga2lja29mZl9m aWZvX2NvbW1hbmQoKSBvcGVyYXRpb25zLgotICovCi0jZGVmaW5lIERTSV9DVFJMX0hXX0NNRF9X QUlUX0ZPUl9UUklHR0VSICAgICAgICAgICAgMHgxCi0KLS8qKgotICogZW51bSBkc2lfY3RybF92 ZXJzaW9uIC0gdmVyc2lvbiBvZiB0aGUgZHNpIGhvc3QgY29udHJvbGxlcgotICogQERTSV9DVFJM X1ZFUlNJT05fVU5LTk9XTjogVW5rbm93biBjb250cm9sbGVyIHZlcnNpb24KLSAqIEBEU0lfQ1RS TF9WRVJTSU9OXzFfNDogICAgIERTSSBob3N0IHYxLjQgY29udHJvbGxlcgotICogQERTSV9DVFJM X1ZFUlNJT05fMl8wOiAgICAgRFNJIGhvc3QgdjIuMCBjb250cm9sbGVyCi0gKiBARFNJX0NUUkxf VkVSU0lPTl9NQVg6ICAgICBtYXggdmVyc2lvbgotICovCi1lbnVtIGRzaV9jdHJsX3ZlcnNpb24g ewotCURTSV9DVFJMX1ZFUlNJT05fVU5LTk9XTiwKLQlEU0lfQ1RSTF9WRVJTSU9OXzFfNCwKLQlE U0lfQ1RSTF9WRVJTSU9OXzJfMCwKLQlEU0lfQ1RSTF9WRVJTSU9OXzJfMiwKLQlEU0lfQ1RSTF9W RVJTSU9OX01BWAotfTsKLQotLyoqCi0gKiBlbnVtIGRzaV9jdHJsX2h3X2ZlYXR1cmVzIC0gZmVh dHVyZXMgc3VwcG9ydGVkIGJ5IGRzaSBob3N0IGNvbnRyb2xsZXIKLSAqIEBEU0lfQ1RSTF9WSURF T19UUEc6ICAgICAgICAgICAgICAgVGVzdCBwYXR0ZXJuIHN1cHBvcnQgZm9yIHZpZGVvIG1vZGUu Ci0gKiBARFNJX0NUUkxfQ01EX1RQRzogICAgICAgICAgICAgICAgIFRlc3QgcGF0dGVybiBzdXBw b3J0IGZvciBjb21tYW5kIG1vZGUuCi0gKiBARFNJX0NUUkxfVkFSSUFCTEVfUkVGUkVTSF9SQVRF OiAgIHZhcmlhYmxlIHBhbmVsIHRpbWluZwotICogQERTSV9DVFJMX0RZTkFNSUNfUkVGUkVTSDog ICAgICAgICB2YXJpYWJsZSBwaXhlbCBjbG9jayByYXRlCi0gKiBARFNJX0NUUkxfTlVMTF9QQUNL RVRfSU5TRVJUSU9OOiAgIE5VTEwgcGFja2V0IGluc2VydGlvbgotICogQERTSV9DVFJMX0RFU0tF V19DQUxJQjogICAgICAgICAgICBEZXNrZXcgY2FsaWJyYXRpb24gc3VwcG9ydAotICogQERTSV9D VFJMX0RQSFk6ICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVyIHN1cHBvcnQgZm9yIERQSFkK LSAqIEBEU0lfQ1RSTF9DUEhZOiAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlciBzdXBwb3J0 IGZvciBDUEhZCi0gKiBARFNJX0NUUkxfTUFYX0ZFQVRVUkVTOgotICovCi1lbnVtIGRzaV9jdHJs X2h3X2ZlYXR1cmVzIHsKLQlEU0lfQ1RSTF9WSURFT19UUEcsCi0JRFNJX0NUUkxfQ01EX1RQRywK LQlEU0lfQ1RSTF9WQVJJQUJMRV9SRUZSRVNIX1JBVEUsCi0JRFNJX0NUUkxfRFlOQU1JQ19SRUZS RVNILAotCURTSV9DVFJMX05VTExfUEFDS0VUX0lOU0VSVElPTiwKLQlEU0lfQ1RSTF9ERVNLRVdf Q0FMSUIsCi0JRFNJX0NUUkxfRFBIWSwKLQlEU0lfQ1RSTF9DUEhZLAotCURTSV9DVFJMX01BWF9G RUFUVVJFUwotfTsKLQotLyoqCi0gKiBlbnVtIGRzaV90ZXN0X3BhdHRlcm4gLSB0ZXN0IHBhdHRl cm4gdHlwZQotICogQERTSV9URVNUX1BBVFRFUk5fRklYRUQ6ICAgICBUZXN0IHBhdHRlcm4gaXMg Zml4ZWQsIGJhc2VkIG9uIGluaXQgdmFsdWUuCi0gKiBARFNJX1RFU1RfUEFUVEVSTl9JTkM6ICAg ICAgIEluY3JlbWVudGFsIHRlc3QgcGF0dGVybiwgYmFzZSBvbiBpbml0IHZhbHVlLgotICogQERT SV9URVNUX1BBVFRFUk5fUE9MWTogICAgICBQYXR0ZXJuIGdlbmVyYXRlZCBmcm9tIHBvbHlub21p YWwgYW5kIGluaXQgdmFsLgotICogQERTSV9URVNUX1BBVFRFUk5fTUFYOgotICovCi1lbnVtIGRz aV90ZXN0X3BhdHRlcm4gewotCURTSV9URVNUX1BBVFRFUk5fRklYRUQgPSAwLAotCURTSV9URVNU X1BBVFRFUk5fSU5DLAotCURTSV9URVNUX1BBVFRFUk5fUE9MWSwKLQlEU0lfVEVTVF9QQVRURVJO X01BWAotfTsKLQotLyoqCi0gKiBlbnVtIGRzaV9zdGF0dXNfaW50X2luZGV4IC0gaW5kZXggb2Yg aW50ZXJydXB0cyBnZW5lcmF0ZWQgYnkgRFNJIGNvbnRyb2xsZXIKLSAqIEBEU0lfU0lOVF9DTURf TU9ERV9ETUFfRE9ORTogICAgICAgIENvbW1hbmQgbW9kZSBETUEgcGFja2V0cyBhcmUgc2VudCBv dXQuCi0gKiBARFNJX1NJTlRfQ01EX1NUUkVBTTBfRlJBTUVfRE9ORTogICBBIGZyYW1lIG9mIGNt ZCBtb2RlIHN0cmVhbTAgaXMgc2VudCBvdXQuCi0gKiBARFNJX1NJTlRfQ01EX1NUUkVBTTFfRlJB TUVfRE9ORTogICBBIGZyYW1lIG9mIGNtZCBtb2RlIHN0cmVhbTEgaXMgc2VudCBvdXQuCi0gKiBA RFNJX1NJTlRfQ01EX1NUUkVBTTJfRlJBTUVfRE9ORTogICBBIGZyYW1lIG9mIGNtZCBtb2RlIHN0 cmVhbTIgaXMgc2VudCBvdXQuCi0gKiBARFNJX1NJTlRfVklERU9fTU9ERV9GUkFNRV9ET05FOiAg ICBBIGZyYW1lIG9mIHZpZGVvIG1vZGUgc3RyZWFtIGlzIHNlbnQgb3V0LgotICogQERTSV9TSU5U X0JUQV9ET05FOiAgICAgICAgICAgICAgICAgQSBCVEEgaXMgY29tcGxldGVkLgotICogQERTSV9T SU5UX0NNRF9GUkFNRV9ET05FOiAgICAgICAgICAgQSBmcmFtZSBvZiBzZWxlY3RlZCBjbWQgbW9k ZSBzdHJlYW0gaXMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbnQg b3V0IGJ5IE1EUC4KLSAqIEBEU0lfU0lOVF9EWU5fUkVGUkVTSF9ET05FOiAgICAgICAgIFRoZSBk eW5hbWljIHJlZnJlc2ggb3BlcmF0aW9uIGNvbXBsZXRlZC4KLSAqIEBEU0lfU0lOVF9ERVNLRVdf RE9ORTogICAgICAgICAgICAgIFRoZSBkZXNrZXcgY2FsaWJyYXRpb24gb3BlcmF0aW9uIGRvbmUu Ci0gKiBARFNJX1NJTlRfRFlOX0JMQU5LX0RNQV9ET05FOiAgICAgICBUaGUgZHluYW1pYyBibGFu a2luIERNQSBvcGVyYXRpb24gaGFzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb21wbGV0ZWQuCi0gKi8KLWVudW0gZHNpX3N0YXR1c19pbnRfaW5kZXggewotCURTSV9T SU5UX0NNRF9NT0RFX0RNQV9ET05FID0gMCwKLQlEU0lfU0lOVF9DTURfU1RSRUFNMF9GUkFNRV9E T05FID0gMSwKLQlEU0lfU0lOVF9DTURfU1RSRUFNMV9GUkFNRV9ET05FID0gMiwKLQlEU0lfU0lO VF9DTURfU1RSRUFNMl9GUkFNRV9ET05FID0gMywKLQlEU0lfU0lOVF9WSURFT19NT0RFX0ZSQU1F X0RPTkUgPSA0LAotCURTSV9TSU5UX0JUQV9ET05FID0gNSwKLQlEU0lfU0lOVF9DTURfRlJBTUVf RE9ORSA9IDYsCi0JRFNJX1NJTlRfRFlOX1JFRlJFU0hfRE9ORSA9IDcsCi0JRFNJX1NJTlRfREVT S0VXX0RPTkUgPSA4LAotCURTSV9TSU5UX0RZTl9CTEFOS19ETUFfRE9ORSA9IDksCi0KLQlEU0lf U1RBVFVTX0lOVEVSUlVQVF9DT1VOVAotfTsKLQotLyoqCi0gKiBlbnVtIGRzaV9zdGF0dXNfaW50 X3R5cGUgLSBzdGF0dXMgaW50ZXJydXB0cyBnZW5lcmF0ZWQgYnkgRFNJIGNvbnRyb2xsZXIKLSAq IEBEU0lfQ01EX01PREVfRE1BX0RPTkU6ICAgICAgICBDb21tYW5kIG1vZGUgRE1BIHBhY2tldHMg YXJlIHNlbnQgb3V0LgotICogQERTSV9DTURfU1RSRUFNMF9GUkFNRV9ET05FOiAgIEEgZnJhbWUg b2YgY29tbWFuZCBtb2RlIHN0cmVhbTAgaXMgc2VudCBvdXQuCi0gKiBARFNJX0NNRF9TVFJFQU0x X0ZSQU1FX0RPTkU6ICAgQSBmcmFtZSBvZiBjb21tYW5kIG1vZGUgc3RyZWFtMSBpcyBzZW50IG91 dC4KLSAqIEBEU0lfQ01EX1NUUkVBTTJfRlJBTUVfRE9ORTogICBBIGZyYW1lIG9mIGNvbW1hbmQg bW9kZSBzdHJlYW0yIGlzIHNlbnQgb3V0LgotICogQERTSV9WSURFT19NT0RFX0ZSQU1FX0RPTkU6 ICAgIEEgZnJhbWUgb2YgdmlkZW8gbW9kZSBzdHJlYW0gaXMgc2VudCBvdXQuCi0gKiBARFNJX0JU QV9ET05FOiAgICAgICAgICAgICAgICAgQSBCVEEgaXMgY29tcGxldGVkLgotICogQERTSV9DTURf RlJBTUVfRE9ORTogICAgICAgICAgIEEgZnJhbWUgb2Ygc2VsZWN0ZWQgY29tbWFuZCBtb2RlIHN0 cmVhbSBpcwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbnQgb3V0IGJ5IE1E UC4KLSAqIEBEU0lfRFlOX1JFRlJFU0hfRE9ORTogICAgICAgICBUaGUgZHluYW1pYyByZWZyZXNo IG9wZXJhdGlvbiBoYXMgY29tcGxldGVkLgotICogQERTSV9ERVNLRVdfRE9ORTogICAgICAgICAg ICAgIFRoZSBkZXNrZXcgY2FsaWJyYXRpb24gb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQKLSAqIEBE U0lfRFlOX0JMQU5LX0RNQV9ET05FOiAgICAgICBUaGUgZHluYW1pYyBibGFua2luIERNQSBvcGVy YXRpb24gaGFzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkLgot ICovCi1lbnVtIGRzaV9zdGF0dXNfaW50X3R5cGUgewotCURTSV9DTURfTU9ERV9ETUFfRE9ORSA9 IEJJVChEU0lfU0lOVF9DTURfTU9ERV9ETUFfRE9ORSksCi0JRFNJX0NNRF9TVFJFQU0wX0ZSQU1F X0RPTkUgPSBCSVQoRFNJX1NJTlRfQ01EX1NUUkVBTTBfRlJBTUVfRE9ORSksCi0JRFNJX0NNRF9T VFJFQU0xX0ZSQU1FX0RPTkUgPSBCSVQoRFNJX1NJTlRfQ01EX1NUUkVBTTFfRlJBTUVfRE9ORSks Ci0JRFNJX0NNRF9TVFJFQU0yX0ZSQU1FX0RPTkUgPSBCSVQoRFNJX1NJTlRfQ01EX1NUUkVBTTJf RlJBTUVfRE9ORSksCi0JRFNJX1ZJREVPX01PREVfRlJBTUVfRE9ORSA9IEJJVChEU0lfU0lOVF9W SURFT19NT0RFX0ZSQU1FX0RPTkUpLAotCURTSV9CVEFfRE9ORSA9IEJJVChEU0lfU0lOVF9CVEFf RE9ORSksCi0JRFNJX0NNRF9GUkFNRV9ET05FID0gQklUKERTSV9TSU5UX0NNRF9GUkFNRV9ET05F KSwKLQlEU0lfRFlOX1JFRlJFU0hfRE9ORSA9IEJJVChEU0lfU0lOVF9EWU5fUkVGUkVTSF9ET05F KSwKLQlEU0lfREVTS0VXX0RPTkUgPSBCSVQoRFNJX1NJTlRfREVTS0VXX0RPTkUpLAotCURTSV9E WU5fQkxBTktfRE1BX0RPTkUgPSBCSVQoRFNJX1NJTlRfRFlOX0JMQU5LX0RNQV9ET05FKQotfTsK LQotLyoqCi0gKiBlbnVtIGRzaV9lcnJvcl9pbnRfaW5kZXggLSBpbmRleCBvZiBlcnJvciBpbnRl cnJ1cHRzIGZyb20gRFNJIGNvbnRyb2xsZXIKLSAqIEBEU0lfRUlOVF9SREJLX1NJTkdMRV9FQ0Nf RVJSOiAgICAgICAgU2luZ2xlIGJpdCBFQ0MgZXJyb3IgaW4gcmVhZCBwYWNrZXQuCi0gKiBARFNJ X0VJTlRfUkRCS19NVUxUSV9FQ0NfRVJSOiAgICAgICAgIE11bHRpIGJpdCBFQ0MgZXJyb3IgaW4g cmVhZCBwYWNrZXQuCi0gKiBARFNJX0VJTlRfUkRCS19DUkNfRVJSOiAgICAgICAgICAgICAgIENS QyBlcnJvciBpbiByZWFkIHBhY2tldC4KLSAqIEBEU0lfRUlOVF9SREJLX0lOQ09NUExFVEVfUEtU OiAgICAgICAgSW5jb21wbGV0ZSByZWFkIHBhY2tldC4KLSAqIEBEU0lfRUlOVF9QRVJJUEhfRVJS T1JfUEtUOiAgICAgICAgICAgRXJyb3IgcGFja2V0IHJldHVybmVkIGZyb20gcGVyaXBoZXJhbCwK LSAqIEBEU0lfRUlOVF9MUF9SWF9USU1FT1VUOiAgICAgICAgICAgICAgTG93IHBvd2VyIHJldmVy c2UgdHJhbnNtaXNzaW9uIHRpbWVvdXQuCi0gKiBARFNJX0VJTlRfSFNfVFhfVElNRU9VVDogICAg ICAgICAgICAgIEhpZ2ggc3BlZWQgZndkIHRyYW5zbWlzc2lvbiB0aW1lb3V0LgotICogQERTSV9F SU5UX0JUQV9USU1FT1VUOiAgICAgICAgICAgICAgICBCVEEgdGltZW91dC4KLSAqIEBEU0lfRUlO VF9QTExfVU5MT0NLOiAgICAgICAgICAgICAgICAgUExMIGhhcyB1bmxvY2tlZC4KLSAqIEBEU0lf RUlOVF9ETE4wX0VTQ19FTlRSWV9FUlI6ICAgICAgICAgSW5jb3JyZWN0IExQIFJ4IGVzY2FwZSBl bnRyeS4KLSAqIEBEU0lfRUlOVF9ETE4wX0VTQ19TWU5DX0VSUjogICAgICAgICAgTFAgUnggZGF0 YSBpcyBub3QgYnl0ZSBhbGlnbmVkLgotICogQERTSV9FSU5UX0RMTjBfTFBfQ09OVFJPTF9FUlI6 ICAgICAgICBJbmNvcnJlY3QgTFAgUnggc3RhdGUgc2VxdWVuY2UuCi0gKiBARFNJX0VJTlRfUEVO RElOR19IU19UWF9USU1FT1VUOiAgICAgIFBlbmRpbmcgSGlnaC1zcGVlZCB0cmFuc2ZlciB0aW1l b3V0LgotICogQERTSV9FSU5UX0lOVEVSTEVBVkVfT1BfQ09OVEVOVElPTjogICBJbnRlcmxlYXZl IG9wZXJhdGlvbiBjb250ZW50aW9uLgotICogQERTSV9FSU5UX0NNRF9ETUFfRklGT19VTkRFUkZM T1c6ICAgICBDb21tYW5kIG1vZGUgRE1BIEZJRk8gdW5kZXJmbG93LgotICogQERTSV9FSU5UX0NN RF9NRFBfRklGT19VTkRFUkZMT1c6ICAgICBDb21tYW5kIE1EUCBGSUZPIHVuZGVyZmxvdyAoZmFp bGVkIHRvCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmUg b25lIGNvbXBsZXRlIGxpbmUgZnJvbSBNRFApLgotICogQERTSV9FSU5UX0RMTjBfSFNfRklGT19P VkVSRkxPVzogICAgICBIaWdoIHNwZWVkIEZJRk8gZGF0YSBsYW5lIDAgb3ZlcmZsb3dzLgotICog QERTSV9FSU5UX0RMTjFfSFNfRklGT19PVkVSRkxPVzogICAgICBIaWdoIHNwZWVkIEZJRk8gZGF0 YSBsYW5lIDEgb3ZlcmZsb3dzLgotICogQERTSV9FSU5UX0RMTjJfSFNfRklGT19PVkVSRkxPVzog ICAgICBIaWdoIHNwZWVkIEZJRk8gZGF0YSBsYW5lIDIgb3ZlcmZsb3dzLgotICogQERTSV9FSU5U X0RMTjNfSFNfRklGT19PVkVSRkxPVzogICAgICBIaWdoIHNwZWVkIEZJRk8gZGF0YSBsYW5lIDMg b3ZlcmZsb3dzLgotICogQERTSV9FSU5UX0RMTjBfSFNfRklGT19VTkRFUkZMT1c6ICAgICBIaWdo IHNwZWVkIEZJRk8gZGF0YSBsYW5lIDAgdW5kZXJmbG93cy4KLSAqIEBEU0lfRUlOVF9ETE4xX0hT X0ZJRk9fVU5ERVJGTE9XOiAgICAgSGlnaCBzcGVlZCBGSUZPIGRhdGEgbGFuZSAxIHVuZGVyZmxv d3MuCi0gKiBARFNJX0VJTlRfRExOMl9IU19GSUZPX1VOREVSRkxPVzogICAgIEhpZ2ggc3BlZWQg RklGTyBkYXRhIGxhbmUgMiB1bmRlcmZsb3dzLgotICogQERTSV9FSU5UX0RMTjNfSFNfRklGT19V TkRFUkZMT1c6ICAgICBIaWdoIHNwZWVkIEZJRk8gZGF0YSBsYW5lIDMgdW5kZWZsb3dzLgotICog QERTSV9FSU5UX0RMTjBfTFAwX0NPTlRFTlRJT046ICAgICAgICBQSFkgbGV2ZWwgY29udGVudGlv biB3aGlsZSBsYW5lIDAgbG93LgotICogQERTSV9FSU5UX0RMTjFfTFAwX0NPTlRFTlRJT046ICAg ICAgICBQSFkgbGV2ZWwgY29udGVudGlvbiB3aGlsZSBsYW5lIDEgbG93LgotICogQERTSV9FSU5U X0RMTjJfTFAwX0NPTlRFTlRJT046ICAgICAgICBQSFkgbGV2ZWwgY29udGVudGlvbiB3aGlsZSBs YW5lIDIgbG93LgotICogQERTSV9FSU5UX0RMTjNfTFAwX0NPTlRFTlRJT046ICAgICAgICBQSFkg bGV2ZWwgY29udGVudGlvbiB3aGlsZSBsYW5lIDMgbG93LgotICogQERTSV9FSU5UX0RMTjBfTFAx X0NPTlRFTlRJT046ICAgICAgICBQSFkgbGV2ZWwgY29udGVudGlvbiB3aGlsZSBsYW5lIDAgaGln aC4KLSAqIEBEU0lfRUlOVF9ETE4xX0xQMV9DT05URU5USU9OOiAgICAgICAgUEhZIGxldmVsIGNv bnRlbnRpb24gd2hpbGUgbGFuZSAxIGhpZ2guCi0gKiBARFNJX0VJTlRfRExOMl9MUDFfQ09OVEVO VElPTjogICAgICAgIFBIWSBsZXZlbCBjb250ZW50aW9uIHdoaWxlIGxhbmUgMiBoaWdoLgotICog QERTSV9FSU5UX0RMTjNfTFAxX0NPTlRFTlRJT046ICAgICAgICBQSFkgbGV2ZWwgY29udGVudGlv biB3aGlsZSBsYW5lIDMgaGlnaC4KLSAqLwotZW51bSBkc2lfZXJyb3JfaW50X2luZGV4IHsKLQlE U0lfRUlOVF9SREJLX1NJTkdMRV9FQ0NfRVJSID0gMCwKLQlEU0lfRUlOVF9SREJLX01VTFRJX0VD Q19FUlIgPSAxLAotCURTSV9FSU5UX1JEQktfQ1JDX0VSUiA9IDIsCi0JRFNJX0VJTlRfUkRCS19J TkNPTVBMRVRFX1BLVCA9IDMsCi0JRFNJX0VJTlRfUEVSSVBIX0VSUk9SX1BLVCA9IDQsCi0JRFNJ X0VJTlRfTFBfUlhfVElNRU9VVCA9IDUsCi0JRFNJX0VJTlRfSFNfVFhfVElNRU9VVCA9IDYsCi0J RFNJX0VJTlRfQlRBX1RJTUVPVVQgPSA3LAotCURTSV9FSU5UX1BMTF9VTkxPQ0sgPSA4LAotCURT SV9FSU5UX0RMTjBfRVNDX0VOVFJZX0VSUiA9IDksCi0JRFNJX0VJTlRfRExOMF9FU0NfU1lOQ19F UlIgPSAxMCwKLQlEU0lfRUlOVF9ETE4wX0xQX0NPTlRST0xfRVJSID0gMTEsCi0JRFNJX0VJTlRf UEVORElOR19IU19UWF9USU1FT1VUID0gMTIsCi0JRFNJX0VJTlRfSU5URVJMRUFWRV9PUF9DT05U RU5USU9OID0gMTMsCi0JRFNJX0VJTlRfQ01EX0RNQV9GSUZPX1VOREVSRkxPVyA9IDE0LAotCURT SV9FSU5UX0NNRF9NRFBfRklGT19VTkRFUkZMT1cgPSAxNSwKLQlEU0lfRUlOVF9ETE4wX0hTX0ZJ Rk9fT1ZFUkZMT1cgPSAxNiwKLQlEU0lfRUlOVF9ETE4xX0hTX0ZJRk9fT1ZFUkZMT1cgPSAxNywK LQlEU0lfRUlOVF9ETE4yX0hTX0ZJRk9fT1ZFUkZMT1cgPSAxOCwKLQlEU0lfRUlOVF9ETE4zX0hT X0ZJRk9fT1ZFUkZMT1cgPSAxOSwKLQlEU0lfRUlOVF9ETE4wX0hTX0ZJRk9fVU5ERVJGTE9XID0g MjAsCi0JRFNJX0VJTlRfRExOMV9IU19GSUZPX1VOREVSRkxPVyA9IDIxLAotCURTSV9FSU5UX0RM TjJfSFNfRklGT19VTkRFUkZMT1cgPSAyMiwKLQlEU0lfRUlOVF9ETE4zX0hTX0ZJRk9fVU5ERVJG TE9XID0gMjMsCi0JRFNJX0VJTlRfRExOMF9MUDBfQ09OVEVOVElPTiA9IDI0LAotCURTSV9FSU5U X0RMTjFfTFAwX0NPTlRFTlRJT04gPSAyNSwKLQlEU0lfRUlOVF9ETE4yX0xQMF9DT05URU5USU9O ID0gMjYsCi0JRFNJX0VJTlRfRExOM19MUDBfQ09OVEVOVElPTiA9IDI3LAotCURTSV9FSU5UX0RM TjBfTFAxX0NPTlRFTlRJT04gPSAyOCwKLQlEU0lfRUlOVF9ETE4xX0xQMV9DT05URU5USU9OID0g MjksCi0JRFNJX0VJTlRfRExOMl9MUDFfQ09OVEVOVElPTiA9IDMwLAotCURTSV9FSU5UX0RMTjNf TFAxX0NPTlRFTlRJT04gPSAzMSwKLQotCURTSV9FUlJPUl9JTlRFUlJVUFRfQ09VTlQKLX07Ci0K LS8qKgotICogZW51bSBkc2lfZXJyb3JfaW50X3R5cGUgLSBlcnJvciBpbnRlcnJ1cHRzIGdlbmVy YXRlZCBieSBEU0kgY29udHJvbGxlcgotICogQERTSV9SREJLX1NJTkdMRV9FQ0NfRVJSOiAgICAg ICAgU2luZ2xlIGJpdCBFQ0MgZXJyb3IgaW4gcmVhZCBwYWNrZXQuCi0gKiBARFNJX1JEQktfTVVM VElfRUNDX0VSUjogICAgICAgICBNdWx0aSBiaXQgRUNDIGVycm9yIGluIHJlYWQgcGFja2V0Lgot ICogQERTSV9SREJLX0NSQ19FUlI6ICAgICAgICAgICAgICAgQ1JDIGVycm9yIGluIHJlYWQgcGFj a2V0LgotICogQERTSV9SREJLX0lOQ09NUExFVEVfUEtUOiAgICAgICAgSW5jb21wbGV0ZSByZWFk IHBhY2tldC4KLSAqIEBEU0lfUEVSSVBIX0VSUk9SX1BLVDogICAgICAgICAgIEVycm9yIHBhY2tl dCByZXR1cm5lZCBmcm9tIHBlcmlwaGVyYWwsCi0gKiBARFNJX0xQX1JYX1RJTUVPVVQ6ICAgICAg ICAgICAgICBMb3cgcG93ZXIgcmV2ZXJzZSB0cmFuc21pc3Npb24gdGltZW91dC4KLSAqIEBEU0lf SFNfVFhfVElNRU9VVDogICAgICAgICAgICAgIEhpZ2ggc3BlZWQgZm9yd2FyZCB0cmFuc21pc3Np b24gdGltZW91dC4KLSAqIEBEU0lfQlRBX1RJTUVPVVQ6ICAgICAgICAgICAgICAgIEJUQSB0aW1l b3V0LgotICogQERTSV9QTExfVU5MT0NLOiAgICAgICAgICAgICAgICAgUExMIGhhcyB1bmxvY2tl ZC4KLSAqIEBEU0lfRExOMF9FU0NfRU5UUllfRVJSOiAgICAgICAgIEluY29ycmVjdCBMUCBSeCBl c2NhcGUgZW50cnkuCi0gKiBARFNJX0RMTjBfRVNDX1NZTkNfRVJSOiAgICAgICAgICBMUCBSeCBk YXRhIGlzIG5vdCBieXRlIGFsaWduZWQuCi0gKiBARFNJX0RMTjBfTFBfQ09OVFJPTF9FUlI6ICAg ICAgICBJbmNvcnJlY3QgTFAgUnggc3RhdGUgc2VxdWVuY2UuCi0gKiBARFNJX1BFTkRJTkdfSFNf VFhfVElNRU9VVDogICAgICBQZW5kaW5nIEhpZ2gtc3BlZWQgdHJhbnNmZXIgdGltZW91dC4KLSAq IEBEU0lfSU5URVJMRUFWRV9PUF9DT05URU5USU9OOiAgIEludGVybGVhdmUgb3BlcmF0aW9uIGNv bnRlbnRpb24uCi0gKiBARFNJX0NNRF9ETUFfRklGT19VTkRFUkZMT1c6ICAgICBDb21tYW5kIG1v ZGUgRE1BIEZJRk8gdW5kZXJmbG93LgotICogQERTSV9DTURfTURQX0ZJRk9fVU5ERVJGTE9XOiAg ICAgQ29tbWFuZCBNRFAgRklGTyB1bmRlcmZsb3cgKGZhaWxlZCB0bwotICogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZSBvbmUgY29tcGxldGUgbGluZSBmcm9tIE1EUCku Ci0gKiBARFNJX0RMTjBfSFNfRklGT19PVkVSRkxPVzogICAgICBIaWdoIHNwZWVkIEZJRk8gZm9y IGRhdGEgbGFuZSAwIG92ZXJmbG93cy4KLSAqIEBEU0lfRExOMV9IU19GSUZPX09WRVJGTE9XOiAg ICAgIEhpZ2ggc3BlZWQgRklGTyBmb3IgZGF0YSBsYW5lIDEgb3ZlcmZsb3dzLgotICogQERTSV9E TE4yX0hTX0ZJRk9fT1ZFUkZMT1c6ICAgICAgSGlnaCBzcGVlZCBGSUZPIGZvciBkYXRhIGxhbmUg MiBvdmVyZmxvd3MuCi0gKiBARFNJX0RMTjNfSFNfRklGT19PVkVSRkxPVzogICAgICBIaWdoIHNw ZWVkIEZJRk8gZm9yIGRhdGEgbGFuZSAzIG92ZXJmbG93cy4KLSAqIEBEU0lfRExOMF9IU19GSUZP X1VOREVSRkxPVzogICAgIEhpZ2ggc3BlZWQgRklGTyBmb3IgZGF0YSBsYW5lIDAgdW5kZXJmbG93 cy4KLSAqIEBEU0lfRExOMV9IU19GSUZPX1VOREVSRkxPVzogICAgIEhpZ2ggc3BlZWQgRklGTyBm b3IgZGF0YSBsYW5lIDEgdW5kZXJmbG93cy4KLSAqIEBEU0lfRExOMl9IU19GSUZPX1VOREVSRkxP VzogICAgIEhpZ2ggc3BlZWQgRklGTyBmb3IgZGF0YSBsYW5lIDIgdW5kZXJmbG93cy4KLSAqIEBE U0lfRExOM19IU19GSUZPX1VOREVSRkxPVzogICAgIEhpZ2ggc3BlZWQgRklGTyBmb3IgZGF0YSBs YW5lIDMgdW5kZWZsb3dzLgotICogQERTSV9ETE4wX0xQMF9DT05URU5USU9OOiAgICAgICAgUEhZ IGxldmVsIGNvbnRlbnRpb24gd2hpbGUgbGFuZSAwIGlzIGxvdy4KLSAqIEBEU0lfRExOMV9MUDBf Q09OVEVOVElPTjogICAgICAgIFBIWSBsZXZlbCBjb250ZW50aW9uIHdoaWxlIGxhbmUgMSBpcyBs b3cuCi0gKiBARFNJX0RMTjJfTFAwX0NPTlRFTlRJT046ICAgICAgICBQSFkgbGV2ZWwgY29udGVu dGlvbiB3aGlsZSBsYW5lIDIgaXMgbG93LgotICogQERTSV9ETE4zX0xQMF9DT05URU5USU9OOiAg ICAgICAgUEhZIGxldmVsIGNvbnRlbnRpb24gd2hpbGUgbGFuZSAzIGlzIGxvdy4KLSAqIEBEU0lf RExOMF9MUDFfQ09OVEVOVElPTjogICAgICAgIFBIWSBsZXZlbCBjb250ZW50aW9uIHdoaWxlIGxh bmUgMCBpcyBoaWdoLgotICogQERTSV9ETE4xX0xQMV9DT05URU5USU9OOiAgICAgICAgUEhZIGxl dmVsIGNvbnRlbnRpb24gd2hpbGUgbGFuZSAxIGlzIGhpZ2guCi0gKiBARFNJX0RMTjJfTFAxX0NP TlRFTlRJT046ICAgICAgICBQSFkgbGV2ZWwgY29udGVudGlvbiB3aGlsZSBsYW5lIDIgaXMgaGln aC4KLSAqIEBEU0lfRExOM19MUDFfQ09OVEVOVElPTjogICAgICAgIFBIWSBsZXZlbCBjb250ZW50 aW9uIHdoaWxlIGxhbmUgMyBpcyBoaWdoLgotICovCi1lbnVtIGRzaV9lcnJvcl9pbnRfdHlwZSB7 Ci0JRFNJX1JEQktfU0lOR0xFX0VDQ19FUlIgPSBCSVQoRFNJX0VJTlRfUkRCS19TSU5HTEVfRUND X0VSUiksCi0JRFNJX1JEQktfTVVMVElfRUNDX0VSUiA9IEJJVChEU0lfRUlOVF9SREJLX01VTFRJ X0VDQ19FUlIpLAotCURTSV9SREJLX0NSQ19FUlIgPSBCSVQoRFNJX0VJTlRfUkRCS19DUkNfRVJS KSwKLQlEU0lfUkRCS19JTkNPTVBMRVRFX1BLVCA9IEJJVChEU0lfRUlOVF9SREJLX0lOQ09NUExF VEVfUEtUKSwKLQlEU0lfUEVSSVBIX0VSUk9SX1BLVCA9IEJJVChEU0lfRUlOVF9QRVJJUEhfRVJS T1JfUEtUKSwKLQlEU0lfTFBfUlhfVElNRU9VVCA9IEJJVChEU0lfRUlOVF9MUF9SWF9USU1FT1VU KSwKLQlEU0lfSFNfVFhfVElNRU9VVCA9IEJJVChEU0lfRUlOVF9IU19UWF9USU1FT1VUKSwKLQlE U0lfQlRBX1RJTUVPVVQgPSBCSVQoRFNJX0VJTlRfQlRBX1RJTUVPVVQpLAotCURTSV9QTExfVU5M T0NLID0gQklUKERTSV9FSU5UX1BMTF9VTkxPQ0spLAotCURTSV9ETE4wX0VTQ19FTlRSWV9FUlIg PSBCSVQoRFNJX0VJTlRfRExOMF9FU0NfRU5UUllfRVJSKSwKLQlEU0lfRExOMF9FU0NfU1lOQ19F UlIgPSBCSVQoRFNJX0VJTlRfRExOMF9FU0NfU1lOQ19FUlIpLAotCURTSV9ETE4wX0xQX0NPTlRS T0xfRVJSID0gQklUKERTSV9FSU5UX0RMTjBfTFBfQ09OVFJPTF9FUlIpLAotCURTSV9QRU5ESU5H X0hTX1RYX1RJTUVPVVQgPSBCSVQoRFNJX0VJTlRfUEVORElOR19IU19UWF9USU1FT1VUKSwKLQlE U0lfSU5URVJMRUFWRV9PUF9DT05URU5USU9OID0gQklUKERTSV9FSU5UX0lOVEVSTEVBVkVfT1Bf Q09OVEVOVElPTiksCi0JRFNJX0NNRF9ETUFfRklGT19VTkRFUkZMT1cgPSBCSVQoRFNJX0VJTlRf Q01EX0RNQV9GSUZPX1VOREVSRkxPVyksCi0JRFNJX0NNRF9NRFBfRklGT19VTkRFUkZMT1cgPSBC SVQoRFNJX0VJTlRfQ01EX01EUF9GSUZPX1VOREVSRkxPVyksCi0JRFNJX0RMTjBfSFNfRklGT19P VkVSRkxPVyA9IEJJVChEU0lfRUlOVF9ETE4wX0hTX0ZJRk9fT1ZFUkZMT1cpLAotCURTSV9ETE4x X0hTX0ZJRk9fT1ZFUkZMT1cgPSBCSVQoRFNJX0VJTlRfRExOMV9IU19GSUZPX09WRVJGTE9XKSwK LQlEU0lfRExOMl9IU19GSUZPX09WRVJGTE9XID0gQklUKERTSV9FSU5UX0RMTjJfSFNfRklGT19P VkVSRkxPVyksCi0JRFNJX0RMTjNfSFNfRklGT19PVkVSRkxPVyA9IEJJVChEU0lfRUlOVF9ETE4z X0hTX0ZJRk9fT1ZFUkZMT1cpLAotCURTSV9ETE4wX0hTX0ZJRk9fVU5ERVJGTE9XID0gQklUKERT SV9FSU5UX0RMTjBfSFNfRklGT19VTkRFUkZMT1cpLAotCURTSV9ETE4xX0hTX0ZJRk9fVU5ERVJG TE9XID0gQklUKERTSV9FSU5UX0RMTjFfSFNfRklGT19VTkRFUkZMT1cpLAotCURTSV9ETE4yX0hT X0ZJRk9fVU5ERVJGTE9XID0gQklUKERTSV9FSU5UX0RMTjJfSFNfRklGT19VTkRFUkZMT1cpLAot CURTSV9ETE4zX0hTX0ZJRk9fVU5ERVJGTE9XID0gQklUKERTSV9FSU5UX0RMTjNfSFNfRklGT19V TkRFUkZMT1cpLAotCURTSV9ETE4wX0xQMF9DT05URU5USU9OID0gQklUKERTSV9FSU5UX0RMTjBf TFAwX0NPTlRFTlRJT04pLAotCURTSV9ETE4xX0xQMF9DT05URU5USU9OID0gQklUKERTSV9FSU5U X0RMTjFfTFAwX0NPTlRFTlRJT04pLAotCURTSV9ETE4yX0xQMF9DT05URU5USU9OID0gQklUKERT SV9FSU5UX0RMTjJfTFAwX0NPTlRFTlRJT04pLAotCURTSV9ETE4zX0xQMF9DT05URU5USU9OID0g QklUKERTSV9FSU5UX0RMTjNfTFAwX0NPTlRFTlRJT04pLAotCURTSV9ETE4wX0xQMV9DT05URU5U SU9OID0gQklUKERTSV9FSU5UX0RMTjBfTFAxX0NPTlRFTlRJT04pLAotCURTSV9ETE4xX0xQMV9D T05URU5USU9OID0gQklUKERTSV9FSU5UX0RMTjFfTFAxX0NPTlRFTlRJT04pLAotCURTSV9ETE4y X0xQMV9DT05URU5USU9OID0gQklUKERTSV9FSU5UX0RMTjJfTFAxX0NPTlRFTlRJT04pLAotCURT SV9ETE4zX0xQMV9DT05URU5USU9OID0gQklUKERTSV9FSU5UX0RMTjNfTFAxX0NPTlRFTlRJT04p LAotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX2N0cmxfY21kX2RtYV9pbmZvIC0gY29tbWFuZCBi dWZmZXIgaW5mb3JtYXRpb24KLSAqIEBvZmZzZXQ6ICAgICAgICBJT01NVSBWQSBmb3IgY29tbWFu ZCBidWZmZXIgYWRkcmVzcy4KLSAqIEBsZW5ndGg6ICAgICAgICBMZW5ndGggb2YgdGhlIGNvbW1h bmQgYnVmZmVyLgotICogQGVuX2Jyb2FkY2FzdDogIEVuYWJsZSBicm9hZGNhc3QgbW9kZSBpZiBz ZXQgdG8gdHJ1ZS4KLSAqIEBpc19tYXN0ZXI6ICAgICBJcyBtYXN0ZXIgaW4gYnJvYWRjYXN0IG1v ZGUuCi0gKiBAdXNlX2xwbTogICAgICAgVXNlIGxvdyBwb3dlciBtb2RlIGZvciBjb21tYW5kIHRy YW5zbWlzc2lvbi4KLSAqLwotc3RydWN0IGRzaV9jdHJsX2NtZF9kbWFfaW5mbyB7Ci0JdTMyIG9m ZnNldDsKLQl1MzIgbGVuZ3RoOwotCWJvb2wgZW5fYnJvYWRjYXN0OwotCWJvb2wgaXNfbWFzdGVy OwotCWJvb2wgdXNlX2xwbTsKLX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9jdHJsX2NtZF9kbWFf Zmlmb19pbmZvIC0gY29tbWFuZCBwYXlsb2FkIHRwIGJlIHNlbnQgdXNpbmcgRklGTwotICogQGNv bW1hbmQ6ICAgICAgICBWQSBmb3IgY29tbWFuZCBidWZmZXIuCi0gKiBAc2l6ZTogICAgICAgICAg IFNpemUgb2YgdGhlIGNvbW1hbmQgYnVmZmVyLgotICogQGVuX2Jyb2FkY2FzdDogICBFbmFibGUg YnJvYWRjYXN0IG1vZGUgaWYgc2V0IHRvIHRydWUuCi0gKiBAaXNfbWFzdGVyOiAgICAgIElzIG1h c3RlciBpbiBicm9hZGNhc3QgbW9kZS4KLSAqIEB1c2VfbHBtOiAgICAgICAgVXNlIGxvdyBwb3dl ciBtb2RlIGZvciBjb21tYW5kIHRyYW5zbWlzc2lvbi4KLSAqLwotc3RydWN0IGRzaV9jdHJsX2Nt ZF9kbWFfZmlmb19pbmZvIHsKLQl1MzIgKmNvbW1hbmQ7Ci0JdTMyIHNpemU7Ci0JYm9vbCBlbl9i cm9hZGNhc3Q7Ci0JYm9vbCBpc19tYXN0ZXI7Ci0JYm9vbCB1c2VfbHBtOwotfTsKLQotc3RydWN0 IGRzaV9jdHJsX2h3OwotCi1zdHJ1Y3QgY3RybF91bHBzX2NvbmZpZ19vcHMgewotCS8qKgotCSAq IHVscHNfcmVxdWVzdCgpIC0gcmVxdWVzdCB1bHBzIGVudHJ5IGZvciBzcGVjaWZpZWQgbGFuZXMK LQkgKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3 YXJlLgotCSAqIEBsYW5lczogICAgICAgICBPUmVkIGxpc3Qgb2YgbGFuZXMgKGVudW0gZHNpX2Rh dGFfbGFuZXMpIHdoaWNoIG5lZWQKLQkgKiAgICAgICAgICAgICAgICAgdG8gZW50ZXIgVUxQUy4K LQkgKgotCSAqIENhbGxlciBzaG91bGQgY2hlY2sgaWYgbGFuZXMgYXJlIGluIFVMUFMgbW9kZSBi eSBjYWxsaW5nCi0JICogZ2V0X2xhbmVzX2luX3VscHMoKSBvcGVyYXRpb24uCi0JICovCi0Jdm9p ZCAoKnVscHNfcmVxdWVzdCkoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCB1MzIgbGFuZXMpOwot Ci0JLyoqCi0JICogdWxwc19leGl0KCkgLSBleGl0IFVMUFMgb24gc3BlY2lmaWVkIGxhbmVzCi0J ICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2Fy ZS4KLQkgKiBAbGFuZXM6ICAgICAgICAgT1JlZCBsaXN0IG9mIGxhbmVzIChlbnVtIGRzaV9kYXRh X2xhbmVzKSB3aGljaCBuZWVkCi0JICogICAgICAgICAgICAgICAgIHRvIGV4aXQgVUxQUy4KLQkg KgotCSAqIENhbGxlciBzaG91bGQgY2hlY2sgaWYgbGFuZXMgYXJlIGluIGFjdGl2ZSBtb2RlIGJ5 IGNhbGxpbmcKLQkgKiBnZXRfbGFuZXNfaW5fdWxwcygpIG9wZXJhdGlvbi4KLQkgKi8KLQl2b2lk ICgqdWxwc19leGl0KShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIHUzMiBsYW5lcyk7Ci0KLQkv KioKLQkgKiBnZXRfbGFuZXNfaW5fdWxwcygpIC0gcmV0dXJucyB0aGUgbGlzdCBvZiBsYW5lcyBp biBVTFBTIG1vZGUKLQkgKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxl ciBob3N0IGhhcmR3YXJlLgotCSAqCi0JICogUmV0dXJucyBhbiBPUmVkIGxpc3Qgb2YgbGFuZXMg KGVudW0gZHNpX2RhdGFfbGFuZXMpIHRoYXQgYXJlIGluIFVMUFMKLQkgKiBzdGF0ZS4gSWYgMCBp cyByZXR1cm5lZCwgYWxsIHRoZSBsYW5lcyBhcmUgYWN0aXZlLgotCSAqCi0JICogUmV0dXJuOiBM aXN0IG9mIGxhbmVzIGluIFVMUFMgc3RhdGUuCi0JICovCi0JdTMyICgqZ2V0X2xhbmVzX2luX3Vs cHMpKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCk7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkc2lf Y3RybF9od19vcHMgLSBvcGVyYXRpb25zIHN1cHBvcnRlZCBieSBkc2kgaG9zdCBoYXJkd2FyZQot ICovCi1zdHJ1Y3QgZHNpX2N0cmxfaHdfb3BzIHsKLQotCS8qKgotCSAqIGhvc3Rfc2V0dXAoKSAt IFNldHVwIERTSSBob3N0IGNvbmZpZ3VyYXRpb24KLQkgKiBAY3RybDogICAgICAgICAgUG9pbnRl ciB0byBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQGNvbmZpZzogICAgICAgIENvbmZp Z3VyYXRpb24gZm9yIERTSSBob3N0IGNvbnRyb2xsZXIKLQkgKi8KLQl2b2lkICgqaG9zdF9zZXR1 cCkoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJICAgc3RydWN0IGRzaV9ob3N0X2NvbW1v bl9jZmcgKmNvbmZpZyk7Ci0KLQkvKioKLQkgKiB2aWRlb19lbmdpbmVfZW4oKSAtIGVuYWJsZSBE U0kgdmlkZW8gZW5naW5lCi0JICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gY29udHJvbGxl ciBob3N0IGhhcmR3YXJlLgotCSAqIEBvbjogICAgICAgICAgICBFbmFibGUvZGlzYWJlbCB2aWRl byBlbmdpbmUuCi0JICovCi0Jdm9pZCAoKnZpZGVvX2VuZ2luZV9lbikoc3RydWN0IGRzaV9jdHJs X2h3ICpjdHJsLCBib29sIG9uKTsKLQotCS8qKgotCSAqIHZpZGVvX2VuZ2luZV9zZXR1cCgpIC0g U2V0dXAgZHNpIGhvc3QgY29udHJvbGxlciBmb3IgdmlkZW8gbW9kZQotCSAqIEBjdHJsOiAgICAg ICAgICBQb2ludGVyIHRvIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAY29tbW9uX2Nm ZzogICAgQ29tbW9uIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KLQkgKiBAY2ZnOiAgICAgICAg ICAgVmlkZW8gbW9kZSBjb25maWd1cmF0aW9uLgotCSAqCi0JICogU2V0IHVwIERTSSB2aWRlbyBl bmdpbmUgd2l0aCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uIENvbnRyb2xsZXIgYW5kCi0JICog dmlkZW8gZW5naW5lIGFyZSBub3QgZW5hYmxlZCBhcyBwYXJ0IG9mIHRoaXMgZnVuY3Rpb24uCi0J ICovCi0Jdm9pZCAoKnZpZGVvX2VuZ2luZV9zZXR1cCkoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJs LAotCQkJCSAgIHN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnICpjb21tb25fY2ZnLAotCQkJCSAg IHN0cnVjdCBkc2lfdmlkZW9fZW5naW5lX2NmZyAqY2ZnKTsKLQotCS8qKgotCSAqIHNldF92aWRl b190aW1pbmcoKSAtIHNldCB1cCB0aGUgdGltaW5nIGZvciB2aWRlbyBmcmFtZQotCSAqIEBjdHJs OiAgICAgICAgICBQb2ludGVyIHRvIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAbW9k ZTogICAgICAgICAgVmlkZW8gbW9kZSBpbmZvcm1hdGlvbi4KLQkgKgotCSAqIFNldCB1cCB0aGUg dmlkZW8gdGltaW5nIHBhcmFtZXRlcnMgZm9yIHRoZSBEU0kgdmlkZW8gbW9kZSBvcGVyYXRpb24u Ci0JICovCi0Jdm9pZCAoKnNldF92aWRlb190aW1pbmcpKHN0cnVjdCBkc2lfY3RybF9odyAqY3Ry bCwKLQkJCQkgc3RydWN0IGRzaV9tb2RlX2luZm8gKm1vZGUpOwotCi0JLyoqCi0JICogY21kX2Vu Z2luZV9zZXR1cCgpIC0gc2V0dXAgZHNpIGhvc3QgY29udHJvbGxlciBmb3IgY29tbWFuZCBtb2Rl Ci0JICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJk d2FyZS4KLQkgKiBAY29tbW9uX2NmZzogICAgQ29tbW9uIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVy cy4KLQkgKiBAY2ZnOiAgICAgICAgICAgQ29tbWFuZCBtb2RlIGNvbmZpZ3VyYXRpb24uCi0JICoK LQkgKiBTZXR1cCBEU0kgQ01EIGVuZ2luZSB3aXRoIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4g Q29udHJvbGxlciBhbmQKLQkgKiBjb21tYW5kIGVuZ2luZSBhcmUgbm90IGVuYWJsZWQgYXMgcGFy dCBvZiB0aGlzIGZ1bmN0aW9uLgotCSAqLwotCXZvaWQgKCpjbWRfZW5naW5lX3NldHVwKShzdHJ1 Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJIHN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnICpj b21tb25fY2ZnLAotCQkJCSBzdHJ1Y3QgZHNpX2NtZF9lbmdpbmVfY2ZnICpjZmcpOwotCi0JLyoq Ci0JICogc2V0dXBfY21kX3N0cmVhbSgpIC0gc2V0IHVwIHBhcmFtZXRlcnMgZm9yIGNvbW1hbmQg cGl4ZWwgc3RyZWFtcwotCSAqIEBjdHJsOiAgICAgICAgICAgICAgUG9pbnRlciB0byBjb250cm9s bGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQG1vZGU6ICAgICAgICAgICAgICBQb2ludGVyIHRvIG1v ZGUgaW5mb3JtYXRpb24uCi0JICogQGhfc3RyaWRlOiAgICAgICAgICBIb3Jpem9udGFsIHN0cmlk ZSBpbiBieXRlcy4KLQkgKiBAdmNfaWQ6ICAgICAgICAgICAgIHN0cmVhbV9pZC4KLQkgKgotCSAq IFNldHVwIHBhcmFtZXRlcnMgZm9yIGNvbW1hbmQgbW9kZSBwaXhlbCBzdHJlYW0gc2l6ZS4KLQkg Ki8KLQl2b2lkICgqc2V0dXBfY21kX3N0cmVhbSkoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAot CQkJCSBzdHJ1Y3QgZHNpX21vZGVfaW5mbyAqbW9kZSwKLQkJCQkgdTMyIGhfc3RyaWRlLAotCQkJ CSB1MzIgdmNfaWQsCi0JCQkJIHN0cnVjdCBkc2lfcmVjdCAqcm9pKTsKLQotCS8qKgotCSAqIGN0 cmxfZW4oKSAtIGVuYWJsZSBEU0kgY29udHJvbGxlciBlbmdpbmUKLQkgKiBAY3RybDogICAgICAg ICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAqIEBvbjogICAg ICAgICAgICB0dXJuIG9uL29mZiB0aGUgRFNJIGNvbnRyb2xsZXIgZW5naW5lLgotCSAqLwotCXZv aWQgKCpjdHJsX2VuKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIGJvb2wgb24pOwotCi0JLyoq Ci0JICogY21kX2VuZ2luZV9lbigpIC0gZW5hYmxlIERTSSBjb250cm9sbGVyIGNvbW1hbmQgZW5n aW5lCi0JICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBo YXJkd2FyZS4KLQkgKiBAb246ICAgICAgICAgICAgVHVybiBvbi9vZmYgdGhlIERTSSBjb21tYW5k IGVuZ2luZS4KLQkgKi8KLQl2b2lkICgqY21kX2VuZ2luZV9lbikoc3RydWN0IGRzaV9jdHJsX2h3 ICpjdHJsLCBib29sIG9uKTsKLQotCS8qKgotCSAqIHBoeV9zd19yZXNldCgpIC0gcGVyZm9ybSBh IHNvZnQgcmVzZXQgb24gdGhlIFBIWS4KLQkgKiBAY3RybDogICAgICAgIFBvaW50ZXIgdG8gdGhl IGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKi8KLQl2b2lkICgqcGh5X3N3X3Jlc2V0KShz dHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwpOwotCi0JLyoqCi0JICogZGVidWdfYnVzKCkgLSBnZXQg ZHNpIGRlYnVnIGJ1cyBzdGF0dXMuCi0JICogQGN0cmw6ICAgICAgICBQb2ludGVyIHRvIHRoZSBj b250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICovCi0Jdm9pZCAoKmRlYnVnX2J1cykoc3RydWN0 IGRzaV9jdHJsX2h3ICpjdHJsKTsKLQotCS8qKgotCSAqIHNvZnRfcmVzZXQoKSAtIHBlcmZvcm0g YSBzb2Z0IHJlc2V0IG9uIERTSSBjb250cm9sbGVyCi0JICogQGN0cmw6ICAgICAgICAgIFBvaW50 ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKgotCSAqIFRoZSB2aWRlbywg Y29tbWFuZCBhbmQgY29udHJvbGxlciBlbmdpbmVzIHdpbGwgYmUgZGlzYWJsZWQgYmVmb3JlIHRo ZQotCSAqIHJlc2V0IGlzIHRyaWdnZXJlZC4gQWZ0ZXIsIHRoZSBlbmdpbmVzIHdpbGwgYmUgcmUt ZW5hYmxlZCB0byB0aGUgc2FtZQotCSAqIHN0YXRlIGFzIGJlZm9yZSB0aGUgcmVzZXQuCi0JICoK LQkgKiBJZiB0aGUgcmVzZXQgaXMgZG9uZSB3aGlsZSBNRFAgdGltaW5nIGVuZ2luZSBpcyB0dXJu ZWQgb24sIHRoZSB2aWRlbwotCSAqIGVuZ2luZSBzaG91bGQgYmUgcmUtZW5hYmxlZCBvbmx5IGR1 cmluZyB0aGUgdmVydGljYWwgYmxhbmtpbmcgdGltZS4KLQkgKi8KLQl2b2lkICgqc29mdF9yZXNl dCkoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsKTsKLQotCS8qKgotCSAqIHNldHVwX2xhbmVfbWFw KCkgLSBzZXR1cCBtYXBwaW5nIGJldHdlZW4gbG9naWNhbCBhbmQgcGh5c2ljYWwgbGFuZXMKLQkg KiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJl LgotCSAqIEBsYW5lX21hcDogICAgICBTdHJ1Y3R1cmUgZGVmaW5pbmcgdGhlIG1hcHBpbmcgYmV0 d2VlbiBEU0kgbG9naWNhbAotCSAqICAgICAgICAgICAgICAgICBsYW5lcyBhbmQgcGh5c2ljYWwg bGFuZXMuCi0JICovCi0Jdm9pZCAoKnNldHVwX2xhbmVfbWFwKShzdHJ1Y3QgZHNpX2N0cmxfaHcg KmN0cmwsCi0JCQkgICAgICAgc3RydWN0IGRzaV9sYW5lX21hcCAqbGFuZV9tYXApOwotCi0JLyoq Ci0JICoga2lja29mZl9jb21tYW5kKCkgLSB0cmFuc21pdHMgY29tbWFuZHMgc3RvcmVkIGluIG1l bW9yeQotCSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3Qg aGFyZHdhcmUuCi0JICogQGNtZDogICAgICAgICAgIENvbW1hbmQgaW5mb3JtYXRpb24uCi0JICog QGZsYWdzOiAgICAgICAgIE1vZGlmaWVycyBmb3IgY29tbWFuZCB0cmFuc21pc3Npb24uCi0JICoK LQkgKiBUaGUgY29udHJvbGxlciBoYXJkd2FyZSBpcyBwcm9ncmFtbWVkIHdpdGggYWRkcmVzcyBh bmQgc2l6ZSBvZiB0aGUKLQkgKiBjb21tYW5kIGJ1ZmZlci4gVGhlIHRyYW5zbWlzc2lvbiBpcyBr aWNrZWQgb2ZmIGlmCi0JICogRFNJX0NUUkxfSFdfQ01EX1dBSVRfRk9SX1RSSUdHRVIgZmxhZyBp cyBub3Qgc2V0LiBJZiB0aGlzIGZsYWcgaXMKLQkgKiBzZXQsIGNhbGxlciBzaG91bGQgbWFrZSBh IHNlcGFyYXRlIGNhbGwgdG8gdHJpZ2dlcl9jb21tYW5kX2RtYSgpIHRvCi0JICogdHJhbnNtaXQg dGhlIGNvbW1hbmQuCi0JICovCi0Jdm9pZCAoKmtpY2tvZmZfY29tbWFuZCkoc3RydWN0IGRzaV9j dHJsX2h3ICpjdHJsLAotCQkJCXN0cnVjdCBkc2lfY3RybF9jbWRfZG1hX2luZm8gKmNtZCwKLQkJ CQl1MzIgZmxhZ3MpOwotCi0JLyoqCi0JICoga2lja29mZl9maWZvX2NvbW1hbmQoKSAtIHRyYW5z bWl0cyBhIGNvbW1hbmQgdXNpbmcgRklGTyBpbiBkc2kKLQkgKiAgICAgICAgICAgICAgICAgICAg ICAgICAgaGFyZHdhcmUuCi0JICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRy b2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAY21kOiAgICAgICAgICAgQ29tbWFuZCBpbmZvcm1h dGlvbi4KLQkgKiBAZmxhZ3M6ICAgICAgICAgTW9kaWZpZXJzIGZvciBjb21tYW5kIHRyYW5zbWlz c2lvbi4KLQkgKgotCSAqIFRoZSBjb250cm9sbGVyIGhhcmR3YXJlIEZJRk8gaXMgcHJvZ3JhbW1l ZCB3aXRoIGNvbW1hbmQgaGVhZGVyIGFuZAotCSAqIHBheWxvYWQuIFRoZSB0cmFuc21pc3Npb24g aXMga2lja2VkIG9mZiBpZgotCSAqIERTSV9DVFJMX0hXX0NNRF9XQUlUX0ZPUl9UUklHR0VSIGZs YWcgaXMgbm90IHNldC4gSWYgdGhpcyBmbGFnIGlzCi0JICogc2V0LCBjYWxsZXIgc2hvdWxkIG1h a2UgYSBzZXBhcmF0ZSBjYWxsIHRvIHRyaWdnZXJfY29tbWFuZF9kbWEoKSB0bwotCSAqIHRyYW5z bWl0IHRoZSBjb21tYW5kLgotCSAqLwotCXZvaWQgKCpraWNrb2ZmX2ZpZm9fY29tbWFuZCkoc3Ry dWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCSAgICAgc3RydWN0IGRzaV9jdHJsX2NtZF9kbWFf Zmlmb19pbmZvICpjbWQsCi0JCQkJICAgICB1MzIgZmxhZ3MpOwotCi0Jdm9pZCAoKnJlc2V0X2Nt ZF9maWZvKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwpOwotCS8qKgotCSAqIHRyaWdnZXJfY29t bWFuZF9kbWEoKSAtIHRyaWdnZXIgdHJhbnNtaXNzaW9uIG9mIGNvbW1hbmQgYnVmZmVyLgotCSAq IEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUu Ci0JICoKLQkgKiBUaGlzIHRyaWdnZXIgY2FuIGJlIG9ubHkgdXNlZCBpZiB0aGVyZSB3YXMgYSBw cmlvciBjYWxsIHRvCi0JICoga2lja29mZl9jb21tYW5kKCkgb2Yga2lja29mZl9maWZvX2NvbW1h bmQoKSB3aXRoCi0JICogRFNJX0NUUkxfSFdfQ01EX1dBSVRfRk9SX1RSSUdHRVIgZmxhZy4KLQkg Ki8KLQl2b2lkICgqdHJpZ2dlcl9jb21tYW5kX2RtYSkoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJs KTsKLQotCS8qKgotCSAqIGdldF9jbWRfcmVhZF9kYXRhKCkgLSBnZXQgZGF0YSByZWFkIGZyb20g dGhlIHBlcmlwaGVyYWwKLQkgKiBAY3RybDogICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRy b2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAcmRfYnVmOiAgICAgICAgIEJ1ZmZlciB3aGVyZSBk YXRhIHdpbGwgYmUgcmVhZCBpbnRvLgotCSAqIEB0b3RhbF9yZWFkX2xlbjogTnVtYmVyIG9mIGJ5 dGVzIHRvIHJlYWQuCi0JICovCi0JdTMyICgqZ2V0X2NtZF9yZWFkX2RhdGEpKHN0cnVjdCBkc2lf Y3RybF9odyAqY3RybCwKLQkJCQkgdTggKnJkX2J1ZiwKLQkJCQkgdTMyIHRvdGFsX3JlYWRfbGVu KTsKLQotCS8qKgotCSAqIHdhaXRfZm9yX2xhbmVfaWRsZSgpIC0gd2FpdCBmb3IgRFNJIGxhbmVz IHRvIGdvIHRvIGlkbGUgc3RhdGUKLQkgKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUg Y29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAqIEBsYW5lczogICAgICAgICBPUmVkIGxpc3Qg b2YgbGFuZXMgKGVudW0gZHNpX2RhdGFfbGFuZXMpIHdoaWNoIG5lZWQKLQkgKiAgICAgICAgICAg ICAgICAgdG8gYmUgY2hlY2tlZCB0byBiZSBpbiBpZGxlIHN0YXRlLgotCSAqLwotCWludCAoKndh aXRfZm9yX2xhbmVfaWRsZSkoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCB1MzIgbGFuZXMpOwot Ci0Jc3RydWN0IGN0cmxfdWxwc19jb25maWdfb3BzIHVscHNfb3BzOwotCi0JLyoqCi0JICogY2xh bXBfZW5hYmxlKCkgLSBlbmFibGUgRFNJIGNsYW1wcwotCSAqIEBjdHJsOiAgICAgICAgIFBvaW50 ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAbGFuZXM6ICAgICAgICBP UmVkIGxpc3Qgb2YgbGFuZXMgd2hpY2ggbmVlZCB0byBoYXZlIGNsYW1wcyByZWxlYXNlZC4KLQkg KiBAZW5hYmxlX3VscHM6IHVscHMgc3RhdGUuCi0JICovCi0KLQkvKioKLQkgKiBjbGFtcF9lbmFi bGUoKSAtIGVuYWJsZSBEU0kgY2xhbXBzIHRvIGtlZXAgUEhZIGRyaXZpbmcgYSBzdGFibGUgbGlu awotCSAqIEBjdHJsOiAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJk d2FyZS4KLQkgKiBAbGFuZXM6ICAgICAgICBPUmVkIGxpc3Qgb2YgbGFuZXMgd2hpY2ggbmVlZCB0 byBoYXZlIGNsYW1wcyByZWxlYXNlZC4KLQkgKiBAZW5hYmxlX3VscHM6IFRPRE86Pz8KLQkgKi8K LQl2b2lkICgqY2xhbXBfZW5hYmxlKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkgICAg IHUzMiBsYW5lcywKLQkJCSAgICAgYm9vbCBlbmFibGVfdWxwcyk7Ci0KLQkvKioKLQkgKiBjbGFt cF9kaXNhYmxlKCkgLSBkaXNhYmxlIERTSSBjbGFtcHMKLQkgKiBAY3RybDogICAgICAgICBQb2lu dGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQGxhbmVzOiAgICAgICAg T1JlZCBsaXN0IG9mIGxhbmVzIHdoaWNoIG5lZWQgdG8gaGF2ZSBjbGFtcHMgcmVsZWFzZWQuCi0J ICogQGRpc2FibGVfdWxwczogdWxwcyBzdGF0ZS4KLQkgKi8KLQl2b2lkICgqY2xhbXBfZGlzYWJs ZSkoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJICAgICAgdTMyIGxhbmVzLAotCQkJICAg ICAgYm9vbCBkaXNhYmxlX3VscHMpOwotCi0JLyoqCi0JICogcGh5X3Jlc2V0X2NvbmZpZygpIC0g RGlzYWJsZS9lbmFibGUgcHJvcGFnYXRpb24gb2YgIHJlc2V0IHNpZ25hbAotCSAqCWZyb20gYWhi IGRvbWFpbiB0byBEU0kgUEhZCi0JICogQGN0cmw6ICAgICAgICAgUG9pbnRlciB0byB0aGUgY29u dHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAqIEBlbmFibGU6CVRydWUgdG8gbWFzayB0aGUgcmVz ZXQgc2lnbmFsLCBmYWxzZSB0byB1bm1hc2sKLQkgKi8KLQl2b2lkICgqcGh5X3Jlc2V0X2NvbmZp Zykoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJICAgICBib29sIGVuYWJsZSk7Ci0KLQkv KioKLQkgKiBnZXRfaW50ZXJydXB0X3N0YXR1cygpIC0gcmV0dXJucyB0aGUgaW50ZXJydXB0IHN0 YXR1cwotCSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3Qg aGFyZHdhcmUuCi0JICoKLQkgKiBSZXR1cm5zIHRoZSBPUmVkIGxpc3Qgb2YgaW50ZXJydXB0cyhl bnVtIGRzaV9zdGF0dXNfaW50X3R5cGUpIHRoYXQKLQkgKiBhcmUgYWN0aXZlLiBUaGlzIGxpc3Qg ZG9lcyBub3QgaW5jbHVkZSBhbnkgZXJyb3IgaW50ZXJydXB0cy4gQ2FsbGVyCi0JICogc2hvdWxk IGNhbGwgZ2V0X2Vycm9yX3N0YXR1cyBmb3IgZXJyb3IgaW50ZXJydXB0cy4KLQkgKgotCSAqIFJl dHVybjogTGlzdCBvZiBhY3RpdmUgaW50ZXJydXB0cy4KLQkgKi8KLQl1MzIgKCpnZXRfaW50ZXJy dXB0X3N0YXR1cykoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsKTsKLQotCS8qKgotCSAqIGNsZWFy X2ludGVycnVwdF9zdGF0dXMoKSAtIGNsZWFycyB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMKLQkg KiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJl LgotCSAqIEBpbnRzOiAgICAgICAgICBMaXN0IG9mIGludGVycnVwdHMgdG8gYmUgY2xlYXJlZC4K LQkgKi8KLQl2b2lkICgqY2xlYXJfaW50ZXJydXB0X3N0YXR1cykoc3RydWN0IGRzaV9jdHJsX2h3 ICpjdHJsLCB1MzIgaW50cyk7Ci0KLQkvKioKLQkgKiBlbmFibGVfc3RhdHVzX2ludGVycnVwdHMo KSAtIGVuYWJsZSB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMKLQkgKiBAY3RybDogICAgICAgICAg UG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAqIEBpbnRzOiAgICAg ICAgICBMaXN0IG9mIGludGVycnVwdHMgdG8gYmUgZW5hYmxlZC4KLQkgKgotCSAqIEVuYWJsZXMg dGhlIHNwZWNpZmllZCBpbnRlcnJ1cHRzLiBUaGlzIGxpc3Qgd2lsbCBvdmVycmlkZSB0aGUKLQkg KiBwcmV2aW91cyBpbnRlcnJ1cHRzIGVuYWJsZWQgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uLiBDYWxs ZXIgaGFzIHRvCi0JICogbWFpbnRhaW4gdGhlIHN0YXRlIG9mIHRoZSBpbnRlcnJ1cHRzIGVuYWJs ZWQuIFRvIGRpc2FibGUgYWxsCi0JICogaW50ZXJydXB0cywgc2V0IGludHMgdG8gMC4KLQkgKi8K LQl2b2lkICgqZW5hYmxlX3N0YXR1c19pbnRlcnJ1cHRzKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0 cmwsIHUzMiBpbnRzKTsKLQotCS8qKgotCSAqIGdldF9lcnJvcl9zdGF0dXMoKSAtIHJldHVybnMg dGhlIGVycm9yIHN0YXR1cwotCSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250 cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICoKLQkgKiBSZXR1cm5zIHRoZSBPUmVkIGxpc3Qgb2Yg ZXJyb3JzKGVudW0gZHNpX2Vycm9yX2ludF90eXBlKSB0aGF0IGFyZQotCSAqIGFjdGl2ZS4gVGhp cyBsaXN0IGRvZXMgbm90IGluY2x1ZGUgYW55IHN0YXR1cyBpbnRlcnJ1cHRzLiBDYWxsZXIKLQkg KiBzaG91bGQgY2FsbCBnZXRfaW50ZXJydXB0X3N0YXR1cyBmb3Igc3RhdHVzIGludGVycnVwdHMu Ci0JICoKLQkgKiBSZXR1cm46IExpc3Qgb2YgYWN0aXZlIGVycm9yIGludGVycnVwdHMuCi0JICov Ci0JdTY0ICgqZ2V0X2Vycm9yX3N0YXR1cykoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsKTsKLQot CS8qKgotCSAqIGNsZWFyX2Vycm9yX3N0YXR1cygpIC0gY2xlYXJzIHRoZSBzcGVjaWZpZWQgZXJy b3JzCi0JICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBo YXJkd2FyZS4KLQkgKiBAZXJyb3JzOiAgICAgICAgICBMaXN0IG9mIGVycm9ycyB0byBiZSBjbGVh cmVkLgotCSAqLwotCXZvaWQgKCpjbGVhcl9lcnJvcl9zdGF0dXMpKHN0cnVjdCBkc2lfY3RybF9o dyAqY3RybCwgdTY0IGVycm9ycyk7Ci0KLQkvKioKLQkgKiBlbmFibGVfZXJyb3JfaW50ZXJydXB0 cygpIC0gZW5hYmxlIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cwotCSAqIEBjdHJsOiAgICAgICAg ICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQGVycm9yczog ICAgICAgIExpc3Qgb2YgZXJyb3JzIHRvIGJlIGVuYWJsZWQuCi0JICoKLQkgKiBFbmFibGVzIHRo ZSBzcGVjaWZpZWQgaW50ZXJydXB0cy4gVGhpcyBsaXN0IHdpbGwgb3ZlcnJpZGUgdGhlCi0JICog cHJldmlvdXMgaW50ZXJydXB0cyBlbmFibGVkIHRocm91Z2ggdGhpcyBmdW5jdGlvbi4gQ2FsbGVy IGhhcyB0bwotCSAqIG1haW50YWluIHRoZSBzdGF0ZSBvZiB0aGUgaW50ZXJydXB0cyBlbmFibGVk LiBUbyBkaXNhYmxlIGFsbAotCSAqIGludGVycnVwdHMsIHNldCBlcnJvcnMgdG8gMC4KLQkgKi8K LQl2b2lkICgqZW5hYmxlX2Vycm9yX2ludGVycnVwdHMpKHN0cnVjdCBkc2lfY3RybF9odyAqY3Ry bCwgdTY0IGVycm9ycyk7Ci0KLQkvKioKLQkgKiB2aWRlb190ZXN0X3BhdHRlcm5fc2V0dXAoKSAt IHNldHVwIHRlc3QgcGF0dGVybiBlbmdpbmUgZm9yIHZpZGVvIG1vZGUKLQkgKiBAY3RybDogICAg ICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAqIEB0eXBl OiAgICAgICAgICBUeXBlIG9mIHRlc3QgcGF0dGVybi4KLQkgKiBAaW5pdF92YWw6ICAgICAgSW5p dGlhbCB2YWx1ZSB0byB1c2UgZm9yIGdlbmVyYXRpbmcgdGVzdCBwYXR0ZXJuLgotCSAqLwotCXZv aWQgKCp2aWRlb190ZXN0X3BhdHRlcm5fc2V0dXApKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwK LQkJCQkJIGVudW0gZHNpX3Rlc3RfcGF0dGVybiB0eXBlLAotCQkJCQkgdTMyIGluaXRfdmFsKTsK LQotCS8qKgotCSAqIGNtZF90ZXN0X3BhdHRlcm5fc2V0dXAoKSAtIHNldHVwIHRlc3QgcGF0dHRl cm4gZW5naW5lIGZvciBjbWQgbW9kZQotCSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRo ZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQHR5cGU6ICAgICAgICAgIFR5cGUgb2Yg dGVzdCBwYXR0ZXJuLgotCSAqIEBpbml0X3ZhbDogICAgICBJbml0aWFsIHZhbHVlIHRvIHVzZSBm b3IgZ2VuZXJhdGluZyB0ZXN0IHBhdHRlcm4uCi0JICogQHN0cmVhbV9pZDogICAgIFN0cmVhbSBJ ZCBvbiB3aGljaCBwYWNrZXRzIGFyZSBnZW5lcmF0ZWQuCi0JICovCi0Jdm9pZCAoKmNtZF90ZXN0 X3BhdHRlcm5fc2V0dXApKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkgICAgICAgZW51 bSBkc2lfdGVzdF9wYXR0ZXJuICB0eXBlLAotCQkJCSAgICAgICB1MzIgaW5pdF92YWwsCi0JCQkJ ICAgICAgIHUzMiBzdHJlYW1faWQpOwotCi0JLyoqCi0JICogdGVzdF9wYXR0ZXJuX2VuYWJsZSgp IC0gZW5hYmxlIHRlc3QgcGF0dGVybiBlbmdpbmUKLQkgKiBAY3RybDogICAgICAgICAgUG9pbnRl ciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAqIEBlbmFibGU6ICAgICAgICBF bmFibGUvRGlzYWJsZSB0ZXN0IHBhdHRlcm4gZW5naW5lLgotCSAqLwotCXZvaWQgKCp0ZXN0X3Bh dHRlcm5fZW5hYmxlKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIGJvb2wgZW5hYmxlKTsKLQot CS8qKgotCSAqIGNsZWFyX3BoeTBfbG5fZXJyKCkgLSBjbGVhciBEU0kgUEhZIGxhbmUtMCBlcnJv cnMKLQkgKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhh cmR3YXJlLgotCSAqLwotCXZvaWQgKCpjbGVhcl9waHkwX2xuX2Vycikoc3RydWN0IGRzaV9jdHJs X2h3ICpjdHJsKTsKLQotCS8qKgotCSAqIHRyaWdnZXJfY21kX3Rlc3RfcGF0dGVybigpIC0gdHJp Z2dlciBhIGNvbW1hbmQgbW9kZSBmcmFtZSB1cGRhdGUgd2l0aAotCSAqICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGVzdCBwYXR0ZXJuCi0JICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIg dG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAc3RyZWFtX2lkOiAgICAgU3Ry ZWFtIG9uIHdoaWNoIGZyYW1lIHVwZGF0ZSBpcyBzZW50LgotCSAqLwotCXZvaWQgKCp0cmlnZ2Vy X2NtZF90ZXN0X3BhdHRlcm4pKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkJIHUzMiBz dHJlYW1faWQpOwotCi0Jc3NpemVfdCAoKnJlZ19kdW1wX3RvX2J1ZmZlcikoc3RydWN0IGRzaV9j dHJsX2h3ICpjdHJsLAotCQkJCSAgICAgIGNoYXIgKmJ1ZiwKLQkJCQkgICAgICB1MzIgc2l6ZSk7 Ci0KLQkvKioKLQkgKiBzZXR1cF9taXNyKCkgLSBTZXR1cCBmcmFtZSBNSVNSCi0JICogQGN0cmw6 ICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAqIEBw YW5lbF9tb2RlOiAgIENNRCBvciBWSURFTyBtb2RlIGluZGljYXRvcgotCSAqIEBlbmFibGU6ICAg ICAgIEVuYWJsZS9kaXNhYmxlIE1JU1IuCi0JICogQGZyYW1lX2NvdW50OiAgTnVtYmVyIG9mIGZy YW1lcyB0byBhY2N1bXVsYXRlIE1JU1IuCi0JICovCi0Jdm9pZCAoKnNldHVwX21pc3IpKHN0cnVj dCBkc2lfY3RybF9odyAqY3RybCwKLQkJCSAgIGVudW0gZHNpX29wX21vZGUgcGFuZWxfbW9kZSwK LQkJCSAgIGJvb2wgZW5hYmxlLCB1MzIgZnJhbWVfY291bnQpOwotCi0JLyoqCi0JICogY29sbGVj dF9taXNyKCkgLSBSZWFkIGZyYW1lIE1JU1IKLQkgKiBAY3RybDogICAgICAgICBQb2ludGVyIHRv IHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQHBhbmVsX21vZGU6ICAgQ01EIG9y IFZJREVPIG1vZGUgaW5kaWNhdG9yCi0JICovCi0JdTMyICgqY29sbGVjdF9taXNyKShzdHJ1Y3Qg ZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkgICAgZW51bSBkc2lfb3BfbW9kZSBwYW5lbF9tb2RlKTsK LQotCS8qKgotCSAqIHNldF90aW1pbmdfZGIoKSAtIGVuYWJsZS9kaXNhYmxlIFRpbWluZyBEQiBy ZWdpc3RlcgotCSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIGNvbnRyb2xsZXIgaG9zdCBo YXJkd2FyZS4KLQkgKiBAZW5hYmxlOiAgICAgICAgRW5hYmxlL0Rpc2FibGUgZmxhZy4KLQkgKgot CSAqIEVuYWJsZSBvciBEaXNhYmUgdGhlIFRpbWluZyBEQiByZWdpc3Rlci4KLQkgKi8KLQl2b2lk ICgqc2V0X3RpbWluZ19kYikoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCSBib29sIGVu YWJsZSk7Ci19OwotCi0vKgotICogc3RydWN0IGRzaV9jdHJsX2h3IC0gRFNJIGNvbnRyb2xsZXIg aGFyZHdhcmUgb2JqZWN0IHNwZWNpZmljIHRvIGFuIGluc3RhbmNlCi0gKiBAYmFzZTogICAgICAg ICAgICAgICAgICAgVkEgZm9yIHRoZSBEU0kgY29udHJvbGxlciBiYXNlIGFkZHJlc3MuCi0gKiBA bGVuZ3RoOiAgICAgICAgICAgICAgICAgTGVuZ3RoIG9mIHRoZSBEU0kgY29udHJvbGxlciByZWdp c3RlciBtYXAuCi0gKiBAbW1zc19taXNjX2Jhc2U6ICAgICAgICAgQmFzZSBhZGRyZXNzIG9mIG1t c3NfbWlzYyByZWdpc3RlciBtYXAuCi0gKiBAbW1zc19taXNjX2xlbmd0aDogICAgICAgTGVuZ3Ro IG9mIG1tc3NfbWlzYyByZWdpc3RlciBtYXAuCi0gKiBAZGlzcF9jY19iYXNlOiAgICAgICAgICAg QmFzZSBhZGRyZXNzIG9mIGRpc3BfY2MgcmVnaXN0ZXIgbWFwLgotICogQGRpc3BfY2NfbGVuZ3Ro OiAgICAgICAgIExlbmd0aCBvZiBkaXNwX2NjIHJlZ2lzdGVyIG1hcC4KLSAqIEBpbmRleDogICAg ICAgICAgICAgICAgICBJbnN0YW5jZSBJRCBvZiB0aGUgY29udHJvbGxlci4KLSAqIEBmZWF0dXJl X21hcDogICAgICAgICAgICBGZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlIERTSSBjb250cm9sbGVy LgotICogQG9wczogICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIHBvaW50ZXJzIHRvIHRoZSBv cGVyYXRpb25zIHN1cHBvcnRlZCBieSB0aGUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBj b250cm9sbGVyLgotICogQHN1cHBvcnRlZF9pbnRlcnJ1cHRzOiAgIE51bWJlciBvZiBzdXBwb3J0 ZWQgaW50ZXJydXB0cy4KLSAqIEBzdXBwb3J0ZWRfZXJyb3JzOiAgICAgICBOdW1iZXIgb2Ygc3Vw cG9ydGVkIGVycm9ycy4KLSAqIEBwaHlfaXNvbGF0aW9uX2VuYWJsZWQ6ICAgIEEgYm9vbGVhbiBw cm9wZXJ0eSBhbGxvd3MgdG8gaXNvbGF0ZSB0aGUgcGh5IGZyb20KLSAqICAgICAgICAgICAgICAg ICAgICAgICAgICBkc2kgY29udHJvbGxlciBhbmQgcnVuIG9ubHkgZHNpIGNvbnRyb2xsZXIuCi0g Ki8KLXN0cnVjdCBkc2lfY3RybF9odyB7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlOwotCXUzMiBsZW5n dGg7Ci0Jdm9pZCBfX2lvbWVtICptbXNzX21pc2NfYmFzZTsKLQl1MzIgbW1zc19taXNjX2xlbmd0 aDsKLQl2b2lkIF9faW9tZW0gKmRpc3BfY2NfYmFzZTsKLQl1MzIgZGlzcF9jY19sZW5ndGg7Ci0J dTMyIGluZGV4OwotCi0JLyogZmVhdHVyZXMgKi8KLQlERUNMQVJFX0JJVE1BUChmZWF0dXJlX21h cCwgRFNJX0NUUkxfTUFYX0ZFQVRVUkVTKTsKLQlzdHJ1Y3QgZHNpX2N0cmxfaHdfb3BzIG9wczsK LQotCS8qIGNhcGFiaWxpdGllcyAqLwotCXUzMiBzdXBwb3J0ZWRfaW50ZXJydXB0czsKLQl1NjQg c3VwcG9ydGVkX2Vycm9yczsKLQotCWJvb2wgcGh5X2lzb2xhdGlvbl9lbmFibGVkOwotfTsKLQot I2VuZGlmIC8qIF9EU0lfQ1RSTF9IV19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9od18xXzQuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHNpLXN0YWdpbmcvZHNpX2N0cmxfaHdfMV80LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDE0MjEwNWYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2lu Zy9kc2lfY3RybF9od18xXzQuYworKysgL2Rldi9udWxsCkBAIC0xLDQ4MCArMCwwIEBACi0vKgot ICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkg dmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgot ICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNkZWZpbmUgcHJfZm10KGZtdCkg ImRzaS1odzoiIGZtdAotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgv aW9wb2xsLmg+Ci0KLSNpbmNsdWRlICJkc2lfY3RybF9ody5oIgotI2luY2x1ZGUgImRzaV9jdHJs X3JlZy5oIgotI2luY2x1ZGUgImRzaV9ody5oIgotCi0jZGVmaW5lIE1NU1NfTUlTQ19DTEFNUF9S RUdfT0ZGICAgICAgICAgICAweDAwMTQKLQotLyoqCi0gKiBkc2lfY3RybF9od18xNF9zZXR1cF9s YW5lX21hcCgpIC0gc2V0dXAgbWFwcGluZyBiZXR3ZWVuCi0gKglsb2dpY2FsIGFuZCBwaHlzaWNh bCBsYW5lcwotICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9z dCBoYXJkd2FyZS4KLSAqIEBsYW5lX21hcDogICAgICBTdHJ1Y3R1cmUgZGVmaW5pbmcgdGhlIG1h cHBpbmcgYmV0d2VlbiBEU0kgbG9naWNhbAotICogICAgICAgICAgICAgICAgIGxhbmVzIGFuZCBw aHlzaWNhbCBsYW5lcy4KLSAqLwotdm9pZCBkc2lfY3RybF9od18xNF9zZXR1cF9sYW5lX21hcChz dHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkgICAgICAgc3RydWN0IGRzaV9sYW5lX21hcCAq bGFuZV9tYXApCi17Ci0JRFNJX1czMihjdHJsLCBEU0lfTEFORV9TV0FQX0NUUkwsIGxhbmVfbWFw LT5sYW5lX21hcF92MSk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gTGFuZSBzd2FwIHNldHVwIGNv bXBsZXRlXG4iLCBjdHJsLT5pbmRleCk7Ci19Ci0KLS8qKgotICogZHNpX2N0cmxfaHdfMTRfd2Fp dF9mb3JfbGFuZV9pZGxlKCkKLSAqIFRoaXMgZnVuY3Rpb24gd2FpdHMgZm9yIGFsbCB0aGUgYWN0 aXZlIERTSSBsYW5lcyB0byBiZSBpZGxlIGJ5IHBvbGxpbmcgYWxsCi0gKiB0aGUgRklGT19FTVBU WSBiaXRzIGFuZCBwb2xsaW5nIGhlIGxhbmUgc3RhdHVzIHRvIGVuc3VyZSB0aGF0IGFsbCB0aGUg bGFuZXMKLSAqIGFyZSBpbiBzdG9wIHN0YXRlLiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0 aGUgYnVzIGNsb2NrcyByZXF1aXJlZCB0bwotICogYWNjZXNzIHRoZSByZWdpc3RlcnMgYXJlIGFs cmVhZHkgdHVybmVkIG9uLgotICoKLSAqIEBjdHJsOiAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRy b2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBsYW5lczogICAgIE9SZWQgbGlzdCBvZiBsYW5lcyAo ZW51bSBkc2lfZGF0YV9sYW5lcykgd2hpY2ggbmVlZAotICogICAgICAgICAgICAgdG8gYmUgc3Rv cHBlZC4KLSAqCi0gKiByZXR1cm46IEVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9od18x NF93YWl0X2Zvcl9sYW5lX2lkbGUoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCB1MzIgbGFuZXMp Ci17Ci0JaW50IHJjID0gMCwgdmFsID0gMDsKLQl1MzIgc3RvcF9zdGF0ZV9tYXNrID0gMCwgZmlm b19lbXB0eV9tYXNrID0gMDsKLQl1MzIgY29uc3Qgc2xlZXBfdXMgPSAxMDsKLQl1MzIgY29uc3Qg dGltZW91dF91cyA9IDEwMDsKLQotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMCkgewotCQlz dG9wX3N0YXRlX21hc2sgfD0gQklUKDApOwotCQlmaWZvX2VtcHR5X21hc2sgfD0gKEJJVCgxMikg fCBCSVQoMTYpKTsKLQl9Ci0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8xKSB7Ci0JCXN0b3Bf c3RhdGVfbWFzayB8PSBCSVQoMSk7Ci0JCQlmaWZvX2VtcHR5X21hc2sgfD0gQklUKDIwKTsKLQl9 Ci0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8yKSB7Ci0JCXN0b3Bfc3RhdGVfbWFzayB8PSBC SVQoMik7Ci0JCWZpZm9fZW1wdHlfbWFzayB8PSBCSVQoMjQpOwotCX0KLQlpZiAobGFuZXMgJiBE U0lfREFUQV9MQU5FXzMpIHsKLQkJc3RvcF9zdGF0ZV9tYXNrIHw9IEJJVCgzKTsKLQkJZmlmb19l bXB0eV9tYXNrIHw9IEJJVCgyOCk7Ci0JfQotCi0JcHJfZGVidWcoIiVzOiBwb2xsaW5nIGZvciBm aWZvIGVtcHR5LCBtYXNrPTB4JTA4eFxuIiwgX19mdW5jX18sCi0JCWZpZm9fZW1wdHlfbWFzayk7 Ci0JcmMgPSByZWFkbF9wb2xsX3RpbWVvdXQoY3RybC0+YmFzZSArIERTSV9GSUZPX1NUQVRVUywg dmFsLAotCQkJKHZhbCAmIGZpZm9fZW1wdHlfbWFzayksIHNsZWVwX3VzLCB0aW1lb3V0X3VzKTsK LQlpZiAocmMpIHsKLQkJcHJfZXJyKCIlczogZmlmbyBub3QgZW1wdHksIEZJRk9fU1RBVFVTPTB4 JTA4eFxuIiwKLQkJCQlfX2Z1bmNfXywgdmFsKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlwcl9k ZWJ1ZygiJXM6IHBvbGxpbmcgZm9yIGxhbmVzIHRvIGJlIGluIHN0b3Agc3RhdGUsIG1hc2s9MHgl MDh4XG4iLAotCQlfX2Z1bmNfXywgc3RvcF9zdGF0ZV9tYXNrKTsKLQlyYyA9IHJlYWRsX3BvbGxf dGltZW91dChjdHJsLT5iYXNlICsgRFNJX0xBTkVfU1RBVFVTLCB2YWwsCi0JCQkodmFsICYgc3Rv cF9zdGF0ZV9tYXNrKSwgc2xlZXBfdXMsIHRpbWVvdXRfdXMpOwotCWlmIChyYykgewotCQlwcl9l cnIoIiVzOiBsYW5lcyBub3QgaW4gc3RvcCBzdGF0ZSwgTEFORV9TVEFUVVM9MHglMDh4XG4iLAot CQkJX19mdW5jX18sIHZhbCk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi1lcnJvcjoKLQlyZXR1cm4g cmM7Ci0KLX0KLQotLyoqCi0gKiB1bHBzX3JlcXVlc3QoKSAtIHJlcXVlc3QgdWxwcyBlbnRyeSBm b3Igc3BlY2lmaWVkIGxhbmVzCi0gKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29u dHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQGxhbmVzOiAgICAgICAgIE9SZWQgbGlzdCBvZiBs YW5lcyAoZW51bSBkc2lfZGF0YV9sYW5lcykgd2hpY2ggbmVlZAotICogICAgICAgICAgICAgICAg IHRvIGVudGVyIFVMUFMuCi0gKgotICogQ2FsbGVyIHNob3VsZCBjaGVjayBpZiBsYW5lcyBhcmUg aW4gVUxQUyBtb2RlIGJ5IGNhbGxpbmcKLSAqIGdldF9sYW5lc19pbl91bHBzKCkgb3BlcmF0aW9u LgotICovCi12b2lkIGRzaV9jdHJsX2h3XzE0X3VscHNfcmVxdWVzdChzdHJ1Y3QgZHNpX2N0cmxf aHcgKmN0cmwsIHUzMiBsYW5lcykKLXsKLQl1MzIgcmVnID0gMDsKLQotCWlmIChsYW5lcyAmIERT SV9DTE9DS19MQU5FKQotCQlyZWcgPSBCSVQoNCk7Ci0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFO RV8wKQotCQlyZWcgfD0gQklUKDApOwotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMSkKLQkJ cmVnIHw9IEJJVCgxKTsKLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzIpCi0JCXJlZyB8PSBC SVQoMik7Ci0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8zKQotCQlyZWcgfD0gQklUKDMpOwot Ci0JLyoKLQkgKiBVTFBTIGVudHJ5IHJlcXVlc3QuIFdhaXQgZm9yIHNob3J0IHRpbWUgdG8gbWFr ZSBzdXJlCi0JICogdGhhdCB0aGUgbGFuZXMgZW50ZXIgVUxQUy4gUmVjb21tZW5kZWQgYXMgcGVy IEhQRy4KLQkgKi8KLQlEU0lfVzMyKGN0cmwsIERTSV9MQU5FX0NUUkwsIHJlZyk7Ci0JdXNsZWVw X3JhbmdlKDEwMCwgMTEwKTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXSBVTFBTIHJlcXVlc3RlZCBm b3IgbGFuZXMgMHgleFxuIiwgY3RybC0+aW5kZXgsCi0JCSBsYW5lcyk7Ci19Ci0KLS8qKgotICog dWxwc19leGl0KCkgLSBleGl0IFVMUFMgb24gc3BlY2lmaWVkIGxhbmVzCi0gKiBAY3RybDogICAg ICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQGxhbmVz OiAgICAgICAgIE9SZWQgbGlzdCBvZiBsYW5lcyAoZW51bSBkc2lfZGF0YV9sYW5lcykgd2hpY2gg bmVlZAotICogICAgICAgICAgICAgICAgIHRvIGV4aXQgVUxQUy4KLSAqCi0gKiBDYWxsZXIgc2hv dWxkIGNoZWNrIGlmIGxhbmVzIGFyZSBpbiBhY3RpdmUgbW9kZSBieSBjYWxsaW5nCi0gKiBnZXRf bGFuZXNfaW5fdWxwcygpIG9wZXJhdGlvbi4KLSAqLwotdm9pZCBkc2lfY3RybF9od18xNF91bHBz X2V4aXQoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCB1MzIgbGFuZXMpCi17Ci0JdTMyIHJlZyA9 IDA7Ci0KLQlpZiAobGFuZXMgJiBEU0lfQ0xPQ0tfTEFORSkKLQkJcmVnID0gQklUKDEyKTsKLQlp ZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzApCi0JCXJlZyB8PSBCSVQoOCk7Ci0JaWYgKGxhbmVz ICYgRFNJX0RBVEFfTEFORV8xKQotCQlyZWcgfD0gQklUKDkpOwotCWlmIChsYW5lcyAmIERTSV9E QVRBX0xBTkVfMikKLQkJcmVnIHw9IEJJVCgxMCk7Ci0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFO RV8zKQotCQlyZWcgfD0gQklUKDExKTsKLQotCS8qCi0JICogVUxQUyBFeGl0IFJlcXVlc3QKLQkg KiBIYXJkd2FyZSByZXF1aXJlbWVudCBpcyB0byB3YWl0IGZvciBhdCBsZWFzdCAxbXMKLQkgKi8K LQlEU0lfVzMyKGN0cmwsIERTSV9MQU5FX0NUUkwsIHJlZyk7Ci0JdXNsZWVwX3JhbmdlKDEwMDAs IDEwMTApOwotCS8qCi0JICogU29tZXRpbWVzIHdoZW4gZXhpdGluZyBVTFBTLCBpdCBpcyBwb3Nz aWJsZSB0aGF0IHNvbWUgRFNJCi0JICogbGFuZXMgYXJlIG5vdCBpbiB0aGUgc3RvcCBzdGF0ZSB3 aGljaCBjb3VsZCBsZWFkIHRvIERTSQotCSAqIGNvbW1hbmRzIG5vdCBnb2luZyB0aHJvdWdoLiBU byBhdm9pZCB0aGlzLCBmb3JjZSB0aGUgbGFuZXMKLQkgKiB0byBiZSBpbiBzdG9wIHN0YXRlLgot CSAqLwotCURTSV9XMzIoY3RybCwgRFNJX0xBTkVfQ1RSTCwgcmVnIDw8IDgpOwotCURTSV9XMzIo Y3RybCwgRFNJX0xBTkVfQ1RSTCwgMHgwKTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXSBVTFBTIGV4 aXQgcmVxdWVzdCBmb3IgbGFuZXM9MHgleFxuIiwKLQkJIGN0cmwtPmluZGV4LCBsYW5lcyk7Ci19 Ci0KLS8qKgotICogZ2V0X2xhbmVzX2luX3VscHMoKSAtIHJldHVybnMgdGhlIGxpc3Qgb2YgbGFu ZXMgaW4gVUxQUyBtb2RlCi0gKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJv bGxlciBob3N0IGhhcmR3YXJlLgotICoKLSAqIFJldHVybnMgYW4gT1JlZCBsaXN0IG9mIGxhbmVz IChlbnVtIGRzaV9kYXRhX2xhbmVzKSB0aGF0IGFyZSBpbiBVTFBTCi0gKiBzdGF0ZS4gSWYgMCBp cyByZXR1cm5lZCwgYWxsIHRoZSBsYW5lcyBhcmUgYWN0aXZlLgotICoKLSAqIFJldHVybjogTGlz dCBvZiBsYW5lcyBpbiBVTFBTIHN0YXRlLgotICovCi11MzIgZHNpX2N0cmxfaHdfMTRfZ2V0X2xh bmVzX2luX3VscHMoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsKQotewotCXUzMiByZWcgPSAwOwot CXUzMiBsYW5lcyA9IDA7Ci0KLQlyZWcgPSBEU0lfUjMyKGN0cmwsIERTSV9MQU5FX1NUQVRVUyk7 Ci0JaWYgKCEocmVnICYgQklUKDgpKSkKLQkJbGFuZXMgfD0gRFNJX0RBVEFfTEFORV8wOwotCWlm ICghKHJlZyAmIEJJVCg5KSkpCi0JCWxhbmVzIHw9IERTSV9EQVRBX0xBTkVfMTsKLQlpZiAoIShy ZWcgJiBCSVQoMTApKSkKLQkJbGFuZXMgfD0gRFNJX0RBVEFfTEFORV8yOwotCWlmICghKHJlZyAm IEJJVCgxMSkpKQotCQlsYW5lcyB8PSBEU0lfREFUQV9MQU5FXzM7Ci0JaWYgKCEocmVnICYgQklU KDEyKSkpCi0JCWxhbmVzIHw9IERTSV9DTE9DS19MQU5FOwotCi0JcHJfZGVidWcoIltEU0lfJWRd IGxhbmVzIGluIHVscHMgPSAweCV4XG4iLCBjdHJsLT5pbmRleCwgbGFuZXMpOwotCXJldHVybiBs YW5lczsKLX0KLQotLyoqCi0gKiBjbGFtcF9lbmFibGUoKSAtIGVuYWJsZSBEU0kgY2xhbXBzIHRv IGtlZXAgUEhZIGRyaXZpbmcgYSBzdGFibGUgbGluawotICogQGN0cmw6ICAgICAgICAgIFBvaW50 ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBsYW5lczogICAgICAgICBP UmVkIGxpc3Qgb2YgbGFuZXMgd2hpY2ggbmVlZCB0byBiZSBjbGFtcGVkLgotICogQGVuYWJsZV91 bHBzOiAgIEJvb2xlYW4gdG8gc3BlY2lmeSBpZiBVTFBTIGlzIGVuYWJsZWQgaW4gRFNJIGNvbnRy b2xsZXIKLSAqLwotdm9pZCBkc2lfY3RybF9od18xNF9jbGFtcF9lbmFibGUoc3RydWN0IGRzaV9j dHJsX2h3ICpjdHJsLAotCQkJCSB1MzIgbGFuZXMsCi0JCQkJIGJvb2wgZW5hYmxlX3VscHMpCi17 Ci0JdTMyIGNsYW1wX3JlZyA9IDA7Ci0JdTMyIGJpdF9zaGlmdCA9IDA7Ci0JdTMyIHJlZyA9IDA7 Ci0KLQlpZiAoY3RybC0+aW5kZXggPT0gMSkKLQkJYml0X3NoaWZ0ID0gMTY7Ci0KLQlpZiAobGFu ZXMgJiBEU0lfQ0xPQ0tfTEFORSkgewotCQljbGFtcF9yZWcgfD0gQklUKDkpOwotCQlpZiAoZW5h YmxlX3VscHMpCi0JCQljbGFtcF9yZWcgfD0gQklUKDgpOwotCX0KLQotCWlmIChsYW5lcyAmIERT SV9EQVRBX0xBTkVfMCkgewotCQljbGFtcF9yZWcgfD0gQklUKDcpOwotCQlpZiAoZW5hYmxlX3Vs cHMpCi0JCQljbGFtcF9yZWcgfD0gQklUKDYpOwotCX0KLQotCWlmIChsYW5lcyAmIERTSV9EQVRB X0xBTkVfMSkgewotCQljbGFtcF9yZWcgfD0gQklUKDUpOwotCQlpZiAoZW5hYmxlX3VscHMpCi0J CQljbGFtcF9yZWcgfD0gQklUKDQpOwotCX0KLQotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVf MikgewotCQljbGFtcF9yZWcgfD0gQklUKDMpOwotCQlpZiAoZW5hYmxlX3VscHMpCi0JCQljbGFt cF9yZWcgfD0gQklUKDIpOwotCX0KLQotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMykgewot CQljbGFtcF9yZWcgfD0gQklUKDEpOwotCQlpZiAoZW5hYmxlX3VscHMpCi0JCQljbGFtcF9yZWcg fD0gQklUKDApOwotCX0KLQotCXJlZyA9IERTSV9NTVNTX01JU0NfUjMyKGN0cmwsIE1NU1NfTUlT Q19DTEFNUF9SRUdfT0ZGKTsKLQlyZWcgfD0gKGNsYW1wX3JlZyA8PCBiaXRfc2hpZnQpOwotCURT SV9NTVNTX01JU0NfVzMyKGN0cmwsIE1NU1NfTUlTQ19DTEFNUF9SRUdfT0ZGLCByZWcpOwotCi0J cmVnID0gRFNJX01NU1NfTUlTQ19SMzIoY3RybCwgTU1TU19NSVNDX0NMQU1QX1JFR19PRkYpOwot CXJlZyB8PSAoQklUKDE1KSA8PCBiaXRfc2hpZnQpOwkvKiBFbmFibGUgY2xhbXAgKi8KLQlEU0lf TU1TU19NSVNDX1czMihjdHJsLCBNTVNTX01JU0NfQ0xBTVBfUkVHX09GRiwgcmVnKTsKLQotCXBy X2RlYnVnKCJbRFNJXyVkXSBDbGFtcHMgZW5hYmxlZCBmb3IgbGFuZXM9MHgleFxuIiwgY3RybC0+ aW5kZXgsCi0JCSBsYW5lcyk7Ci19Ci0KLS8qKgotICogY2xhbXBfZGlzYWJsZSgpIC0gZGlzYWJs ZSBEU0kgY2xhbXBzCi0gKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxl ciBob3N0IGhhcmR3YXJlLgotICogQGxhbmVzOiAgICAgICAgIE9SZWQgbGlzdCBvZiBsYW5lcyB3 aGljaCBuZWVkIHRvIGhhdmUgY2xhbXBzIHJlbGVhc2VkLgotICogQGRpc2FibGVfdWxwczogICBC b29sZWFuIHRvIHNwZWNpZnkgaWYgVUxQUyBpcyBlbmFibGVkIGluIERTSSBjb250cm9sbGVyCi0g Ki8KLXZvaWQgZHNpX2N0cmxfaHdfMTRfY2xhbXBfZGlzYWJsZShzdHJ1Y3QgZHNpX2N0cmxfaHcg KmN0cmwsCi0JCQkJICB1MzIgbGFuZXMsCi0JCQkJICBib29sIGRpc2FibGVfdWxwcykKLXsKLQl1 MzIgY2xhbXBfcmVnID0gMDsKLQl1MzIgYml0X3NoaWZ0ID0gMDsKLQl1MzIgcmVnID0gMDsKLQot CWlmIChjdHJsLT5pbmRleCA9PSAxKQotCQliaXRfc2hpZnQgPSAxNjsKLQotCWlmIChsYW5lcyAm IERTSV9DTE9DS19MQU5FKSB7Ci0JCWNsYW1wX3JlZyB8PSBCSVQoOSk7Ci0JCWlmIChkaXNhYmxl X3VscHMpCi0JCQljbGFtcF9yZWcgfD0gQklUKDgpOwotCX0KLQotCWlmIChsYW5lcyAmIERTSV9E QVRBX0xBTkVfMCkgewotCQljbGFtcF9yZWcgfD0gQklUKDcpOwotCQlpZiAoZGlzYWJsZV91bHBz KQotCQkJY2xhbXBfcmVnIHw9IEJJVCg2KTsKLQl9Ci0KLQlpZiAobGFuZXMgJiBEU0lfREFUQV9M QU5FXzEpIHsKLQkJY2xhbXBfcmVnIHw9IEJJVCg1KTsKLQkJaWYgKGRpc2FibGVfdWxwcykKLQkJ CWNsYW1wX3JlZyB8PSBCSVQoNCk7Ci0JfQotCi0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8y KSB7Ci0JCWNsYW1wX3JlZyB8PSBCSVQoMyk7Ci0JCWlmIChkaXNhYmxlX3VscHMpCi0JCQljbGFt cF9yZWcgfD0gQklUKDIpOwotCX0KLQotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMykgewot CQljbGFtcF9yZWcgfD0gQklUKDEpOwotCQlpZiAoZGlzYWJsZV91bHBzKQotCQkJY2xhbXBfcmVn IHw9IEJJVCgwKTsKLQl9Ci0KLQljbGFtcF9yZWcgfD0gQklUKDE1KTsgLyogRW5hYmxlIGNsYW1w ICovCi0JY2xhbXBfcmVnIDw8PSBiaXRfc2hpZnQ7Ci0KLQlyZWcgPSBEU0lfTU1TU19NSVNDX1Iz MihjdHJsLCBNTVNTX01JU0NfQ0xBTVBfUkVHX09GRik7Ci0JcmVnICY9IH4oY2xhbXBfcmVnKTsK LQlEU0lfTU1TU19NSVNDX1czMihjdHJsLCBNTVNTX01JU0NfQ0xBTVBfUkVHX09GRiwgcmVnKTsK LQotCXByX2RlYnVnKCJbRFNJXyVkXSBEaXNhYmxlIGNsYW1wcyBmb3IgbGFuZXM9JWRcbiIsIGN0 cmwtPmluZGV4LCBsYW5lcyk7Ci19Ci0KLSNkZWZpbmUgRFVNUF9SRUdfVkFMVUUob2ZmKSAiXHQl LTMwczogMHglMDh4XG4iLCAjb2ZmLCBEU0lfUjMyKGN0cmwsIG9mZikKLXNzaXplX3QgZHNpX2N0 cmxfaHdfMTRfcmVnX2R1bXBfdG9fYnVmZmVyKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJ CQkJICBjaGFyICpidWYsCi0JCQkJCSAgdTMyIHNpemUpCi17Ci0JdTMyIGxlbiA9IDA7Ci0KLQls ZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwgIkNPTkZJR1VSQVRJT04g UkVHUzpcbiIpOwotCi0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiks Ci0JCQlEVU1QX1JFR19WQUxVRShEU0lfSFdfVkVSU0lPTikpOwotCWxlbiArPSBzbnByaW50Zigo YnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NUUkwpKTsK LQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVH X1ZBTFVFKERTSV9TVEFUVVMpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXpl IC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9GSUZPX1NUQVRVUykpOwotCWxlbiArPSBz bnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJ X1ZJREVPX01PREVfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUg LSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1ZJREVPX01PREVfU1lOQ19EQVRBVFlQRSkp OwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9S RUdfVkFMVUUoRFNJX1ZJREVPX01PREVfUElYRUxfREFUQVRZUEUpKTsKLQlsZW4gKz0gc25wcmlu dGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9WSURF T19NT0RFX0JMQU5LSU5HX0RBVEFUWVBFKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4p LCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVklERU9fTU9ERV9EQVRBX0NU UkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURV TVBfUkVHX1ZBTFVFKERTSV9WSURFT19NT0RFX0FDVElWRV9IKSk7Ci0JbGVuICs9IHNucHJpbnRm KChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVklERU9f TU9ERV9BQ1RJVkVfVikpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBs ZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1ZJREVPX01PREVfVE9UQUwpKTsKLQlsZW4gKz0g c25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERT SV9WSURFT19NT0RFX0hTWU5DKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6 ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVklERU9fTU9ERV9WU1lOQykpOwotCWxl biArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFM VUUoRFNJX1ZJREVPX01PREVfVlNZTkNfVlBPUykpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsg bGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NPTU1BTkRfTU9ERV9E TUFfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAot CQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NPTU1BTkRfTU9ERV9NRFBfQ1RSTCkpOwotCWxlbiArPSBz bnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJ X0NPTU1BTkRfTU9ERV9NRFBfRENTX0NNRF9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYg KyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfRE1BX0NNRF9PRkZT RVQpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURV TVBfUkVHX1ZBTFVFKERTSV9ETUFfQ01EX0xFTkdUSCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVm ICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0RNQV9GSUZPX0NU UkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURV TVBfUkVHX1ZBTFVFKERTSV9ETUFfTlVMTF9QQUNLRVRfREFUQSkpOwotCWxlbiArPSBzbnByaW50 ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NPTU1B TkRfTU9ERV9NRFBfU1RSRUFNMF9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4p LCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ09NTUFORF9NT0RFX01EUF9T VFJFQU0wX1RPVEFMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxl biksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ09NTUFORF9NT0RFX01EUF9TVFJFQU0xX0NUUkwp KTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBf UkVHX1ZBTFVFKERTSV9DT01NQU5EX01PREVfTURQX1NUUkVBTTFfVE9UQUwpKTsKLQlsZW4gKz0g c25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERT SV9BQ0tfRVJSX1NUQVRVUykpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUg LSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1JEQktfREFUQTApKTsKLQlsZW4gKz0gc25w cmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9S REJLX0RBVEExKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiks Ci0JCQlEVU1QX1JFR19WQUxVRShEU0lfUkRCS19EQVRBMikpOwotCWxlbiArPSBzbnByaW50Zigo YnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1JEQktfREFU QTMpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURV TVBfUkVHX1ZBTFVFKERTSV9SREJLX0RBVEFUWVBFMCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVm ICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1JEQktfREFUQVRZ UEUxKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlE VU1QX1JFR19WQUxVRShEU0lfVFJJR19DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBs ZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfRVhUX01VWCkpOwotCWxl biArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFM VUUoRFNJX0VYVF9NVVhfVEVfUFVMU0VfREVURUNUX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYo KGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9DTURfTU9E RV9ETUFfU1dfVFJJR0dFUikpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUg LSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NNRF9NT0RFX01EUF9TV19UUklHR0VSKSk7 Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JF R19WQUxVRShEU0lfQ01EX01PREVfQlRBX1NXX1RSSUdHRVIpKTsKLQlsZW4gKz0gc25wcmludGYo KGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9SRVNFVF9T V19UUklHR0VSKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiks Ci0JCQlEVU1QX1JFR19WQUxVRShEU0lfTEFORV9TVEFUVVMpKTsKLQlsZW4gKz0gc25wcmludGYo KGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9MQU5FX0NU UkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURV TVBfUkVHX1ZBTFVFKERTSV9MQU5FX1NXQVBfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVm ICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0RMTjBfUEhZX0VS UikpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVN UF9SRUdfVkFMVUUoRFNJX0xQX1RJTUVSX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiAr IGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9IU19USU1FUl9DVFJM KSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1Q X1JFR19WQUxVRShEU0lfVElNRU9VVF9TVEFUVVMpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiAr IGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9DTEtPVVRfVElNSU5H X0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJ CURVTVBfUkVHX1ZBTFVFKERTSV9FT1RfUEFDS0VUKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYg KyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfRU9UX1BBQ0tFVF9D VFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlE VU1QX1JFR19WQUxVRShEU0lfR0VORVJJQ19FU0NfVFhfVFJJR0dFUikpOwotCWxlbiArPSBzbnBy aW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0VS Ul9JTlRfTUFTSzApKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVu KSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9JTlRfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50Zigo YnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1NPRlRfUkVT RVQpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURV TVBfUkVHX1ZBTFVFKERTSV9DTEtfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVu KSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NMS19TVEFUVVMpKTsKLQls ZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZB TFVFKERTSV9QSFlfU1dfUkVTRVQpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChz aXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9BWEkyQUhCX0NUUkwpKTsKLQlsZW4g Kz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVF KERTSV9DT01NQU5EX01PREVfTURQX0NUUkwyKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBs ZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ09NTUFORF9NT0RFX01E UF9TVFJFQU0yX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0g bGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9DT01NQU5EX01PREVfTURQX1NUUkVBTTJfVE9U QUwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURV TVBfUkVHX1ZBTFVFKERTSV9WQklGX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxl biksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9BRVNfQ1RSTCkpOwotCWxl biArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFM VUUoRFNJX1JEQktfREFUQV9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAo c2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVEVTVF9QQVRURVJOX0dFTl9DTURf RE1BX0lOSVRfVkFMMikpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBs ZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1RQR19ETUFfRklGT19TVEFUVVMpKTsKLQlsZW4g Kz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVF KERTSV9UUEdfRE1BX0ZJRk9fV1JJVEVfVFJJR0dFUikpOwotCWxlbiArPSBzbnByaW50ZigoYnVm ICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0RTSV9USU1JTkdf RkxVU0gpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJ CURVTVBfUkVHX1ZBTFVFKERTSV9EU0lfVElNSU5HX0RCX01PREUpKTsKLQlsZW4gKz0gc25wcmlu dGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9UUEdf RE1BX0ZJRk9fUkVTRVQpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0g bGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9WRVJTSU9OKSk7Ci0KLQlwcl9lcnIoIkxMRU5H VEggPSAlZFxuIiwgbGVuKTsKLQlyZXR1cm4gbGVuOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9od18yXzAuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmxfaHdfMl8wLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGJmZDYzNzguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kt c3RhZ2luZy9kc2lfY3RybF9od18yXzAuYworKysgL2Rldi9udWxsCkBAIC0xLDIzNCArMCwwIEBA Ci0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAq IG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNkZWZpbmUgcHJfZm10 KGZtdCkgImRzaS1odzoiIGZtdAotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8 bGludXgvaW9wb2xsLmg+Ci0KLSNpbmNsdWRlICJkc2lfY3RybF9ody5oIgotI2luY2x1ZGUgImRz aV9jdHJsX3JlZy5oIgotI2luY2x1ZGUgImRzaV9ody5oIgotCi12b2lkIGRzaV9jdHJsX2h3XzIw X3NldHVwX2xhbmVfbWFwKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJICAgICAgIHN0cnVj dCBkc2lfbGFuZV9tYXAgKmxhbmVfbWFwKQotewotCXUzMiByZWdfdmFsdWUgPSBsYW5lX21hcC0+ bGFuZV9tYXBfdjJbRFNJX0xPR0lDQUxfTEFORV8wXSB8Ci0JCQkobGFuZV9tYXAtPmxhbmVfbWFw X3YyW0RTSV9MT0dJQ0FMX0xBTkVfMV0gPDwgNCkgfAotCQkJKGxhbmVfbWFwLT5sYW5lX21hcF92 MltEU0lfTE9HSUNBTF9MQU5FXzJdIDw8IDgpIHwKLQkJCShsYW5lX21hcC0+bGFuZV9tYXBfdjJb RFNJX0xPR0lDQUxfTEFORV8zXSA8PCAxMik7Ci0KLQlEU0lfVzMyKGN0cmwsIERTSV9MQU5FX1NX QVBfQ1RSTCwgcmVnX3ZhbHVlKTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXSBMYW5lIHN3YXAgc2V0 dXAgY29tcGxldGVcbiIsIGN0cmwtPmluZGV4KTsKLX0KLQotaW50IGRzaV9jdHJsX2h3XzIwX3dh aXRfZm9yX2xhbmVfaWRsZShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCXUzMiBsYW5lcykK LXsKLQlpbnQgcmMgPSAwLCB2YWwgPSAwOwotCXUzMiBmaWZvX2VtcHR5X21hc2sgPSAwOwotCXUz MiBjb25zdCBzbGVlcF91cyA9IDEwOwotCXUzMiBjb25zdCB0aW1lb3V0X3VzID0gMTAwOwotCi0J aWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8wKQotCQlmaWZvX2VtcHR5X21hc2sgfD0gKEJJVCgx MikgfCBCSVQoMTYpKTsKLQotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMSkKLQkJZmlmb19l bXB0eV9tYXNrIHw9IEJJVCgyMCk7Ci0KLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzIpCi0J CWZpZm9fZW1wdHlfbWFzayB8PSBCSVQoMjQpOwotCi0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFO RV8zKQotCQlmaWZvX2VtcHR5X21hc2sgfD0gQklUKDI4KTsKLQotCXByX2RlYnVnKCIlczogcG9s bGluZyBmb3IgZmlmbyBlbXB0eSwgbWFzaz0weCUwOHhcbiIsIF9fZnVuY19fLAotCQlmaWZvX2Vt cHR5X21hc2spOwotCXJjID0gcmVhZGxfcG9sbF90aW1lb3V0KGN0cmwtPmJhc2UgKyBEU0lfRklG T19TVEFUVVMsIHZhbCwKLQkJCSh2YWwgJiBmaWZvX2VtcHR5X21hc2spLCBzbGVlcF91cywgdGlt ZW91dF91cyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiJXM6IGZpZm8gbm90IGVtcHR5LCBGSUZP X1NUQVRVUz0weCUwOHhcbiIsCi0JCQkJX19mdW5jX18sIHZhbCk7Ci0JCWdvdG8gZXJyb3I7Ci0J fQotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLSNkZWZpbmUgRFVNUF9SRUdfVkFMVUUob2Zm KSAiXHQlLTMwczogMHglMDh4XG4iLCAjb2ZmLCBEU0lfUjMyKGN0cmwsIG9mZikKLXNzaXplX3Qg ZHNpX2N0cmxfaHdfMjBfcmVnX2R1bXBfdG9fYnVmZmVyKHN0cnVjdCBkc2lfY3RybF9odyAqY3Ry bCwKLQkJCQkJICBjaGFyICpidWYsCi0JCQkJCSAgdTMyIHNpemUpCi17Ci0JdTMyIGxlbiA9IDA7 Ci0KLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwgIkNPTkZJR1VS QVRJT04gUkVHUzpcbiIpOwotCi0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAt IGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfSFdfVkVSU0lPTikpOwotCWxlbiArPSBzbnBy aW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NU UkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURV TVBfUkVHX1ZBTFVFKERTSV9TVEFUVVMpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiks IChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9GSUZPX1NUQVRVUykpOwotCWxl biArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFM VUUoRFNJX1ZJREVPX01PREVfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwg KHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1ZJREVPX01PREVfU1lOQ19EQVRB VFlQRSkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJ RFVNUF9SRUdfVkFMVUUoRFNJX1ZJREVPX01PREVfUElYRUxfREFUQVRZUEUpKTsKLQlsZW4gKz0g c25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERT SV9WSURFT19NT0RFX0JMQU5LSU5HX0RBVEFUWVBFKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYg KyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVklERU9fTU9ERV9E QVRBX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwK LQkJCURVTVBfUkVHX1ZBTFVFKERTSV9WSURFT19NT0RFX0FDVElWRV9IKSk7Ci0JbGVuICs9IHNu cHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lf VklERU9fTU9ERV9BQ1RJVkVfVikpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNp emUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1ZJREVPX01PREVfVE9UQUwpKTsKLQls ZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZB TFVFKERTSV9WSURFT19NT0RFX0hTWU5DKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4p LCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVklERU9fTU9ERV9WU1lOQykp OwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9S RUdfVkFMVUUoRFNJX1ZJREVPX01PREVfVlNZTkNfVlBPUykpOwotCWxlbiArPSBzbnByaW50Zigo YnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NPTU1BTkRf TU9ERV9ETUFfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBs ZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NPTU1BTkRfTU9ERV9NRFBfQ1RSTCkpOwotCWxl biArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFM VUUoRFNJX0NPTU1BTkRfTU9ERV9NRFBfRENTX0NNRF9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRm KChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfRE1BX0NN RF9PRkZTRVQpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwK LQkJCURVTVBfUkVHX1ZBTFVFKERTSV9ETUFfQ01EX0xFTkdUSCkpOwotCWxlbiArPSBzbnByaW50 ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0RNQV9G SUZPX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwK LQkJCURVTVBfUkVHX1ZBTFVFKERTSV9ETUFfTlVMTF9QQUNLRVRfREFUQSkpOwotCWxlbiArPSBz bnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJ X0NPTU1BTkRfTU9ERV9NRFBfU1RSRUFNMF9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYg KyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ09NTUFORF9NT0RF X01EUF9TVFJFQU0wX1RPVEFMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6 ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ09NTUFORF9NT0RFX01EUF9TVFJFQU0x X0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJ CURVTVBfUkVHX1ZBTFVFKERTSV9DT01NQU5EX01PREVfTURQX1NUUkVBTTFfVE9UQUwpKTsKLQls ZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZB TFVFKERTSV9BQ0tfRVJSX1NUQVRVUykpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwg KHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1JEQktfREFUQTApKTsKLQlsZW4g Kz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVF KERTSV9SREJLX0RBVEExKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAt IGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfUkRCS19EQVRBMikpOwotCWxlbiArPSBzbnBy aW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1JE QktfREFUQTMpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwK LQkJCURVTVBfUkVHX1ZBTFVFKERTSV9SREJLX0RBVEFUWVBFMCkpOwotCWxlbiArPSBzbnByaW50 ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1JEQktf REFUQVRZUEUxKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiks Ci0JCQlEVU1QX1JFR19WQUxVRShEU0lfVFJJR19DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChi dWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfRVhUX01VWCkp OwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9S RUdfVkFMVUUoRFNJX0VYVF9NVVhfVEVfUFVMU0VfREVURUNUX0NUUkwpKTsKLQlsZW4gKz0gc25w cmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9D TURfTU9ERV9ETUFfU1dfVFJJR0dFUikpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwg KHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NNRF9NT0RFX01EUF9TV19UUklH R0VSKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlE VU1QX1JFR19WQUxVRShEU0lfQ01EX01PREVfQlRBX1NXX1RSSUdHRVIpKTsKLQlsZW4gKz0gc25w cmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9S RVNFVF9TV19UUklHR0VSKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAt IGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfTUlTUl9DTURfQ1RSTCkpOwotCWxlbiArPSBz bnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJ X01JU1JfVklERU9fQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUg LSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0xBTkVfU1RBVFVTKSk7Ci0JbGVuICs9IHNu cHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lf TEFORV9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiks Ci0JCQlEVU1QX1JFR19WQUxVRShEU0lfTEFORV9TV0FQX0NUUkwpKTsKLQlsZW4gKz0gc25wcmlu dGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9ETE4w X1BIWV9FUlIpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwK LQkJCURVTVBfUkVHX1ZBTFVFKERTSV9MUF9USU1FUl9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRm KChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfSFNfVElN RVJfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAot CQkJRFVNUF9SRUdfVkFMVUUoRFNJX1RJTUVPVVRfU1RBVFVTKSk7Ci0JbGVuICs9IHNucHJpbnRm KChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ0xLT1VU X1RJTUlOR19DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxl biksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfRU9UX1BBQ0tFVCkpOwotCWxlbiArPSBzbnByaW50 ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0VPVF9Q QUNLRVRfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4p LAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0dFTkVSSUNfRVNDX1RYX1RSSUdHRVIpKTsKLQlsZW4g Kz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVF KERTSV9FUlJfSU5UX01BU0swKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6 ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfSU5UX0NUUkwpKTsKLQlsZW4gKz0gc25w cmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9T T0ZUX1JFU0VUKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiks Ci0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ0xLX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1 ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9DTEtfU1RBVFVT KSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1Q X1JFR19WQUxVRShEU0lfUEhZX1NXX1JFU0VUKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBs ZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQVhJMkFIQl9DVFJMKSk7 Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JF R19WQUxVRShEU0lfTUlTUl9DTURfTURQMF8zMkJJVCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVm ICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX01JU1JfQ01EX01E UDFfMzJCSVQpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwK LQkJCURVTVBfUkVHX1ZBTFVFKERTSV9NSVNSX1ZJREVPXzMyQklUKSk7Ci0JbGVuICs9IHNucHJp bnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ09N TUFORF9NT0RFX01EUF9DVFJMMikpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNp emUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NPTU1BTkRfTU9ERV9NRFBfU1RSRUFN Ml9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0J CQlEVU1QX1JFR19WQUxVRShEU0lfQ09NTUFORF9NT0RFX01EUF9TVFJFQU0yX1RPVEFMKSk7Ci0J bGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19W QUxVRShEU0lfVkJJRl9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6 ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQUVTX0NUUkwpKTsKLQlsZW4gKz0gc25w cmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9S REJLX0RBVEFfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBs ZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX0RNQV9JTklU X1ZBTDIpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJ CURVTVBfUkVHX1ZBTFVFKERTSV9UUEdfRE1BX0ZJRk9fU1RBVFVTKSk7Ci0JbGVuICs9IHNucHJp bnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVFBH X0RNQV9GSUZPX1dSSVRFX1RSSUdHRVIpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiks IChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9EU0lfVElNSU5HX0ZMVVNIKSk7 Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JF R19WQUxVRShEU0lfRFNJX1RJTUlOR19EQl9NT0RFKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYg KyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVFBHX0RNQV9GSUZP X1JFU0VUKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0J CQlEVU1QX1JFR19WQUxVRShEU0lfVkVSU0lPTikpOwotCi0JcHJfZXJyKCJMTEVOR1RIID0gJWRc biIsIGxlbik7Ci0JcmV0dXJuIGxlbjsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZHNpLXN0YWdpbmcvZHNpX2N0cmxfaHdfMl8yLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rz aS1zdGFnaW5nL2RzaV9jdHJsX2h3XzJfMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAyYzE5MTNmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcv ZHNpX2N0cmxfaHdfMl8yLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICog Q29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVy c2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoK LSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNkZWZpbmUgcHJfZm10KGZtdCkgImRz aS1odzoiIGZtdAotCi0jaW5jbHVkZSAiZHNpX2N0cmxfaHcuaCIKLSNpbmNsdWRlICJkc2lfY3Ry bF9yZWcuaCIKLSNpbmNsdWRlICJkc2lfaHcuaCIKLQotLyogRXF1aXZhbGVudCB0byByZWdpc3Rl ciBESVNQX0NDX01JU0NfQ01EICovCi0jZGVmaW5lIERJU1BfQ0NfQ0xBTVBfUkVHX09GRiAweDAw Ci0KLS8qKgotICogZHNpX2N0cmxfaHdfMjJfcGh5X3Jlc2V0X2NvbmZpZygpIC0gdG8gY29uZmln dXJlIGNsYW1wIGNvbnRyb2wgZHVyaW5nIHVscHMKLSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVy IHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBAZW5hYmxlOiAgICAgIGJvb2xl YW4gdG8gc3BlY2lmeSBlbmFibGUvZGlzYWJsZS4KLSAqLwotdm9pZCBkc2lfY3RybF9od18yMl9w aHlfcmVzZXRfY29uZmlnKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJYm9vbCBlbmFibGUp Ci17Ci0JdTMyIHJlZyA9IDA7Ci0KLQlyZWcgPSBEU0lfRElTUF9DQ19SMzIoY3RybCwgRElTUF9D Q19DTEFNUF9SRUdfT0ZGKTsKLQotCS8qIE1hc2svdW5tYXNrIGRpc2FibGUgUEhZIHJlc2V0IGJp dCAqLwotCWlmIChlbmFibGUpCi0JCXJlZyAmPSB+QklUKGN0cmwtPmluZGV4KTsKLQllbHNlCi0J CXJlZyB8PSBCSVQoY3RybC0+aW5kZXgpOwotCURTSV9ESVNQX0NDX1czMihjdHJsLCBESVNQX0ND X0NMQU1QX1JFR19PRkYsIHJlZyk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2RzaS1zdGFnaW5nL2RzaV9jdHJsX2h3X2Ntbi5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kt c3RhZ2luZy9kc2lfY3RybF9od19jbW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg YWY3ODQyZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2Rz aV9jdHJsX2h3X2Ntbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMxMiArMCwwIEBACi0vKgotICog Q29weXJpZ2h0IChjKSAyMDE1LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVy c2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoK LSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNkZWZpbmUgcHJfZm10KGZtdCkgImRz aS1odzoiIGZtdAotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9w b2xsLmg+Ci0KLSNpbmNsdWRlICJkc2lfY3RybF9ody5oIgotI2luY2x1ZGUgImRzaV9jdHJsX3Jl Zy5oIgotI2luY2x1ZGUgImRzaV9ody5oIgotI2luY2x1ZGUgImRzaV9wYW5lbC5oIgotI2luY2x1 ZGUgImRzaV9jYXRhbG9nLmgiCi0jaW5jbHVkZSAiZHB1X2RiZy5oIgotCi0jZGVmaW5lIE1NU1Nf TUlTQ19DTEFNUF9SRUdfT0ZGICAgICAgICAgICAweDAwMTQKLSNkZWZpbmUgRFNJX0NUUkxfRFlO QU1JQ19GT1JDRV9PTiAgICAgICAgICgweDIzRnxCSVQoOCl8QklUKDkpfEJJVCgxMSl8QklUKDIx KSkKLSNkZWZpbmUgRFNJX0NUUkxfQ01EX01JU1JfRU5BQkxFICAgICAgICAgIEJJVCgyOCkKLSNk ZWZpbmUgRFNJX0NUUkxfVklERU9fTUlTUl9FTkFCTEUgICAgICAgIEJJVCgxNikKLQotLyogVW5z dXBwb3J0ZWQgZm9ybWF0cyBkZWZhdWx0IHRvIFJHQjg4OCAqLwotc3RhdGljIGNvbnN0IHU4IGNt ZF9tb2RlX2Zvcm1hdF9tYXBbRFNJX1BJWEVMX0ZPUk1BVF9NQVhdID0gewotCTB4NiwgMHg3LCAw eDgsIDB4OCwgMHgwLCAweDMsIDB4NCB9Owotc3RhdGljIGNvbnN0IHU4IHZpZGVvX21vZGVfZm9y bWF0X21hcFtEU0lfUElYRUxfRk9STUFUX01BWF0gPSB7Ci0JMHgwLCAweDEsIDB4MiwgMHgzLCAw eDMsIDB4MywgMHgzIH07Ci0KLS8qKgotICogZHNpX3NldHVwX3RyaWdnZXJfY29udHJvbHMoKSAt IHNldHVwIGRzaSB0cmlnZ2VyIGNvbmZpZ3VyYXRpb25zCi0gKiBAY3RybDogICAgICAgICAgICAg UG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQGNmZzogICAgICAg ICAgICAgIERTSSBob3N0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBjb21tb24gdG8gYm90aCB2aWRl byBhbmQKLSAqICAgICAgICAgICAgICAgICAgICBjb21tYW5kIG1vZGVzLgotICovCi1zdGF0aWMg dm9pZCBkc2lfc2V0dXBfdHJpZ2dlcl9jb250cm9scyhzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmws Ci0JCQkJICAgICAgIHN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnICpjZmcpCi17Ci0JdTMyIHJl ZyA9IDA7Ci0JY29uc3QgdTggdHJpZ2dlcl9tYXBbRFNJX1RSSUdHRVJfTUFYXSA9IHsKLQkJMHgw LCAweDIsIDB4MSwgMHg0LCAweDUsIDB4NiB9OwotCi0JcmVnIHw9IChjZmctPnRlX21vZGUgPT0g RFNJX1RFX09OX0VYVF9QSU4pID8gQklUKDMxKSA6IDA7Ci0JcmVnIHw9ICh0cmlnZ2VyX21hcFtj ZmctPmRtYV9jbWRfdHJpZ2dlcl0gJiAweDcpOwotCXJlZyB8PSAodHJpZ2dlcl9tYXBbY2ZnLT5t ZHBfY21kX3RyaWdnZXJdICYgMHg3KSA8PCA0OwotCURTSV9XMzIoY3RybCwgRFNJX1RSSUdfQ1RS TCwgcmVnKTsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9od19jbW5faG9zdF9zZXR1cCgpIC0gc2V0 dXAgZHNpIGhvc3QgY29uZmlndXJhdGlvbgotICogQGN0cmw6ICAgICAgICAgICAgIFBvaW50ZXIg dG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBjZmc6ICAgICAgICAgICAgICBE U0kgaG9zdCBjb25maWd1cmF0aW9uIHRoYXQgaXMgY29tbW9uIHRvIGJvdGggdmlkZW8gYW5kCi0g KiAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBtb2Rlcy4KLSAqLwotdm9pZCBkc2lfY3RybF9o d19jbW5faG9zdF9zZXR1cChzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkgICAgICAgc3Ry dWN0IGRzaV9ob3N0X2NvbW1vbl9jZmcgKmNmZykKLXsKLQl1MzIgcmVnX3ZhbHVlID0gMDsKLQot CWRzaV9zZXR1cF90cmlnZ2VyX2NvbnRyb2xzKGN0cmwsIGNmZyk7Ci0KLQkvKiBTZXR1cCBjbG9j a2luZyB0aW1pbmcgY29udHJvbHMgKi8KLQlyZWdfdmFsdWUgPSAoKGNmZy0+dF9jbGtfcG9zdCAm IDB4M0YpIDw8IDgpOwotCXJlZ192YWx1ZSB8PSAoY2ZnLT50X2Nsa19wcmUgJiAweDNGKTsKLQlE U0lfVzMyKGN0cmwsIERTSV9DTEtPVVRfVElNSU5HX0NUUkwsIHJlZ192YWx1ZSk7Ci0KLQkvKiBF T1QgcGFja2V0IGNvbnRyb2wgKi8KLQlyZWdfdmFsdWUgPSBjZmctPmFwcGVuZF90eF9lb3QgPyAx IDogMDsKLQlyZWdfdmFsdWUgfD0gKGNmZy0+aWdub3JlX3J4X2VvdCA/ICgxIDw8IDQpIDogMCk7 Ci0JRFNJX1czMihjdHJsLCBEU0lfRU9UX1BBQ0tFVF9DVFJMLCByZWdfdmFsdWUpOwotCi0JLyog VHVybiBvbiBkc2kgY2xvY2tzICovCi0JRFNJX1czMihjdHJsLCBEU0lfQ0xLX0NUUkwsIDB4MjNG KTsKLQotCS8qIFNldHVwIERTSSBjb250cm9sIHJlZ2lzdGVyICovCi0JcmVnX3ZhbHVlID0gRFNJ X1IzMihjdHJsLCBEU0lfQ1RSTCk7Ci0JcmVnX3ZhbHVlIHw9IChjZmctPmVuX2NyY19jaGVjayA/ IEJJVCgyNCkgOiAwKTsKLQlyZWdfdmFsdWUgfD0gKGNmZy0+ZW5fZWNjX2NoZWNrID8gQklUKDIw KSA6IDApOwotCXJlZ192YWx1ZSB8PSBCSVQoOCk7IC8qIENsb2NrIGxhbmUgKi8KLQlyZWdfdmFs dWUgfD0gKChjZmctPmRhdGFfbGFuZXMgJiBEU0lfREFUQV9MQU5FXzMpID8gQklUKDcpIDogMCk7 Ci0JcmVnX3ZhbHVlIHw9ICgoY2ZnLT5kYXRhX2xhbmVzICYgRFNJX0RBVEFfTEFORV8yKSA/IEJJ VCg2KSA6IDApOwotCXJlZ192YWx1ZSB8PSAoKGNmZy0+ZGF0YV9sYW5lcyAmIERTSV9EQVRBX0xB TkVfMSkgPyBCSVQoNSkgOiAwKTsKLQlyZWdfdmFsdWUgfD0gKChjZmctPmRhdGFfbGFuZXMgJiBE U0lfREFUQV9MQU5FXzApID8gQklUKDQpIDogMCk7Ci0KLQlEU0lfVzMyKGN0cmwsIERTSV9DVFJM LCByZWdfdmFsdWUpOwotCi0JaWYgKGN0cmwtPnBoeV9pc29sYXRpb25fZW5hYmxlZCkKLQkJRFNJ X1czMihjdHJsLCBEU0lfREVCVUdfQ1RSTCwgQklUKDI4KSk7Ci0JcHJfZGVidWcoIltEU0lfJWRd SG9zdCBjb25maWd1cmF0aW9uIGNvbXBsZXRlXG4iLCBjdHJsLT5pbmRleCk7Ci19Ci0KLS8qKgot ICogcGh5X3N3X3Jlc2V0KCkgLSBwZXJmb3JtIGEgc29mdCByZXNldCBvbiB0aGUgUEhZLgotICog QGN0cmw6ICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0g Ki8KLXZvaWQgZHNpX2N0cmxfaHdfY21uX3BoeV9zd19yZXNldChzdHJ1Y3QgZHNpX2N0cmxfaHcg KmN0cmwpCi17Ci0JRFNJX1czMihjdHJsLCBEU0lfUEhZX1NXX1JFU0VULCBCSVQoMjQpfEJJVCgw KSk7Ci0Jd21iKCk7IC8qIG1ha2Ugc3VyZSByZXNldCBpcyBhc3NlcnRlZCAqLwotCXVkZWxheSgx MDAwKTsKLQlEU0lfVzMyKGN0cmwsIERTSV9QSFlfU1dfUkVTRVQsIDB4MCk7Ci0Jd21iKCk7IC8q IGVuc3VyZSByZXNldCBpcyBjbGVhcmVkIGJlZm9yZSB3YWl0aW5nICovCi0JdWRlbGF5KDEwMCk7 Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gcGh5IHN3IHJlc2V0IGRvbmVcbiIsIGN0cmwtPmluZGV4 KTsKLX0KLQotLyoqCi0gKiBzb2Z0X3Jlc2V0KCkgLSBwZXJmb3JtIGEgc29mdCByZXNldCBvbiBE U0kgY29udHJvbGxlcgotICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xs ZXIgaG9zdCBoYXJkd2FyZS4KLSAqCi0gKiBUaGUgdmlkZW8sIGNvbW1hbmQgYW5kIGNvbnRyb2xs ZXIgZW5naW5lcyB3aWxsIGJlIGRpc2FibGVkIGJlZm9yZSB0aGUKLSAqIHJlc2V0IGlzIHRyaWdn ZXJlZCBhbmQgcmUtZW5hYmxlZCBhZnRlciB0aGUgcmVzZXQgaXMgY29tcGxldGUuCi0gKgotICog SWYgdGhlIHJlc2V0IGlzIGRvbmUgd2hpbGUgTURQIHRpbWluZyBlbmdpbmUgaXMgdHVybmVkIG9u LCB0aGUgdmlkZW8KLSAqIGVuaWduZSBzaG91bGQgYmUgcmUtZW5hYmxlZCBvbmx5IGR1cmluZyB0 aGUgdmVydGljYWwgYmxhbmtpbmcgdGltZS4KLSAqLwotdm9pZCBkc2lfY3RybF9od19jbW5fc29m dF9yZXNldChzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwpCi17Ci0JdTMyIHJlZyA9IDA7Ci0JdTMy IHJlZ19jdHJsID0gMDsKLQotCS8qIENsZWFyIERTSV9FTiwgVklERU9fTU9ERV9FTiwgQ01EX01P REVfRU4gKi8KLQlyZWdfY3RybCA9IERTSV9SMzIoY3RybCwgRFNJX0NUUkwpOwotCURTSV9XMzIo Y3RybCwgRFNJX0NUUkwsIHJlZ19jdHJsICYgfjB4Nyk7Ci0Jd21iKCk7IC8qIHdhaXQgY29udHJv bGxlciB0byBiZSBkaXNhYmxlZCBiZWZvcmUgcmVzZXQgKi8KLQotCS8qIEZvcmNlIGVuYWJsZSBQ Q0xLLCBCWVRFQ0xLLCBBSEJNX0hDTEsgKi8KLQlyZWcgPSBEU0lfUjMyKGN0cmwsIERTSV9DTEtf Q1RSTCk7Ci0JRFNJX1czMihjdHJsLCBEU0lfQ0xLX0NUUkwsIHJlZyB8IERTSV9DVFJMX0RZTkFN SUNfRk9SQ0VfT04pOwotCXdtYigpOyAvKiB3YWl0IGZvciBjbG9ja3MgdG8gYmUgZW5hYmxlZCAq LwotCi0JLyogVHJpZ2dlciBzb2Z0IHJlc2V0ICovCi0JRFNJX1czMihjdHJsLCBEU0lfU09GVF9S RVNFVCwgMHgxKTsKLQl3bWIoKTsgLyogd2FpdCBmb3IgcmVzZXQgdG8gYXNzZXJ0IGJlZm9yZSB3 YWl0aW5nICovCi0JdWRlbGF5KDEpOwotCURTSV9XMzIoY3RybCwgRFNJX1NPRlRfUkVTRVQsIDB4 MCk7Ci0Jd21iKCk7IC8qIGVuc3VyZSByZXNldCBpcyBjbGVhcmVkICovCi0KLQkvKiBEaXNhYmxl IGZvcmNlIGNsb2NrIG9uICovCi0JRFNJX1czMihjdHJsLCBEU0lfQ0xLX0NUUkwsIHJlZyk7Ci0J d21iKCk7IC8qIG1ha2Ugc3VyZSBjbG9ja3MgYXJlIHJlc3RvcmVkICovCi0KLQkvKiBSZS1lbmFi bGUgRFNJIGNvbnRyb2xsZXIgKi8KLQlEU0lfVzMyKGN0cmwsIERTSV9DVFJMLCByZWdfY3RybCk7 Ci0Jd21iKCk7IC8qIG1ha2Ugc3VyZSBEU0kgY29udHJvbGxlciBpcyBlbmFibGVkIGFnYWluICov Ci0JcHJfZGVidWcoIltEU0lfJWRdIGN0cmwgc29mdCByZXNldCBkb25lXG4iLCBjdHJsLT5pbmRl eCk7Ci19Ci0KLS8qKgotICogc2V0dXBfbWlzcigpIC0gU2V0dXAgZnJhbWUgTUlTUgotICogQGN0 cmw6CSAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQHBhbmVs X21vZGU6ICAgQ01EIG9yIFZJREVPIG1vZGUgaW5kaWNhdG9yCi0gKiBAZW5hYmxlOgkgIEVuYWJs ZS9kaXNhYmxlIE1JU1IuCi0gKiBAZnJhbWVfY291bnQ6ICBOdW1iZXIgb2YgZnJhbWVzIHRvIGFj Y3VtdWxhdGUgTUlTUi4KLSAqLwotdm9pZCBkc2lfY3RybF9od19jbW5fc2V0dXBfbWlzcihzdHJ1 Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQllbnVtIGRzaV9vcF9tb2RlIHBhbmVsX21vZGUsCi0J CQlib29sIGVuYWJsZSwKLQkJCXUzMiBmcmFtZV9jb3VudCkKLXsKLQl1MzIgYWRkcjsKLQl1MzIg Y29uZmlnID0gMDsKLQotCWlmIChwYW5lbF9tb2RlID09IERTSV9PUF9DTURfTU9ERSkgewotCQlh ZGRyID0gRFNJX01JU1JfQ01EX0NUUkw7Ci0JCWlmIChlbmFibGUpCi0JCQljb25maWcgPSBEU0lf Q1RSTF9DTURfTUlTUl9FTkFCTEU7Ci0JfSBlbHNlIHsKLQkJYWRkciA9IERTSV9NSVNSX1ZJREVP X0NUUkw7Ci0JCWlmIChlbmFibGUpCi0JCQljb25maWcgPSBEU0lfQ1RSTF9WSURFT19NSVNSX0VO QUJMRTsKLQkJaWYgKGZyYW1lX2NvdW50ID4gMjU1KQotCQkJZnJhbWVfY291bnQgPSAyNTU7Ci0J CWNvbmZpZyB8PSBmcmFtZV9jb3VudCA8PCA4OwotCX0KLQotCXByX2RlYnVnKCJbRFNJXyVkXSBN SVNSIGN0cmw6IDB4JXhcbiIsIGN0cmwtPmluZGV4LAotCQkJY29uZmlnKTsKLQlEU0lfVzMyKGN0 cmwsIGFkZHIsIGNvbmZpZyk7Ci0Jd21iKCk7IC8qIG1ha2Ugc3VyZSBNSVNSIGlzIGNvbmZpZ3Vy ZWQgKi8KLX0KLQotLyoqCi0gKiBjb2xsZWN0X21pc3IoKSAtIFJlYWQgZnJhbWUgTUlTUgotICog QGN0cmw6CSAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQHBh bmVsX21vZGU6ICAgQ01EIG9yIFZJREVPIG1vZGUgaW5kaWNhdG9yCi0gKi8KLXUzMiBkc2lfY3Ry bF9od19jbW5fY29sbGVjdF9taXNyKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCWVudW0g ZHNpX29wX21vZGUgcGFuZWxfbW9kZSkKLXsKLQl1MzIgYWRkcjsKLQl1MzIgZW5hYmxlZDsKLQl1 MzIgbWlzciA9IDA7Ci0KLQlpZiAocGFuZWxfbW9kZSA9PSBEU0lfT1BfQ01EX01PREUpIHsKLQkJ YWRkciA9IERTSV9NSVNSX0NNRF9NRFAwXzMyQklUOwotCQllbmFibGVkID0gRFNJX1IzMihjdHJs LCBEU0lfTUlTUl9DTURfQ1RSTCkgJgotCQkJCURTSV9DVFJMX0NNRF9NSVNSX0VOQUJMRTsKLQl9 IGVsc2UgewotCQlhZGRyID0gRFNJX01JU1JfVklERU9fMzJCSVQ7Ci0JCWVuYWJsZWQgPSBEU0lf UjMyKGN0cmwsIERTSV9NSVNSX1ZJREVPX0NUUkwpICYKLQkJCQlEU0lfQ1RSTF9WSURFT19NSVNS X0VOQUJMRTsKLQl9Ci0KLQlpZiAoZW5hYmxlZCkKLQkJbWlzciA9IERTSV9SMzIoY3RybCwgYWRk cik7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gTUlTUiBlbmFibGVkICV4IHZhbHVlOiAweCV4XG4i LCBjdHJsLT5pbmRleCwKLQkJCWVuYWJsZWQsIG1pc3IpOwotCXJldHVybiBtaXNyOwotfQotCi0v KioKLSAqIHNldF90aW1pbmdfZGIoKSAtIGVuYWJsZS9kaXNhYmxlIFRpbWluZyBEQiByZWdpc3Rl cgotICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gY29udHJvbGxlciBob3N0IGhhcmR3YXJl LgotICogQGVuYWJsZTogICAgICAgIEVuYWJsZS9EaXNhYmxlIGZsYWcuCi0gKgotICogRW5hYmxl IG9yIERpc2FiZSB0aGUgVGltaW5nIERCIHJlZ2lzdGVyLgotICovCi12b2lkIGRzaV9jdHJsX2h3 X2Ntbl9zZXRfdGltaW5nX2RiKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkgICAgIGJv b2wgZW5hYmxlKQotewotCWlmIChlbmFibGUpCi0JCURTSV9XMzIoY3RybCwgRFNJX0RTSV9USU1J TkdfREJfTU9ERSwgMHgxKTsKLQllbHNlCi0JCURTSV9XMzIoY3RybCwgRFNJX0RTSV9USU1JTkdf REJfTU9ERSwgMHgwKTsKLQotCXdtYigpOyAvKiBtYWtlIHN1cmUgdGltaW5nIGRiIHJlZ2lzdGVy cyBhcmUgc2V0ICovCi0JcHJfZGVidWcoIltEU0lfJWRdIGN0cmwgdGltaW5nIERCIHNldDolZFxu IiwgY3RybC0+aW5kZXgsCi0JCQkJZW5hYmxlKTsKLQlEUFVfRVZUMzIoY3RybC0+aW5kZXgsIGVu YWJsZSk7Ci19Ci0KLS8qKgotICogc2V0X3ZpZGVvX3RpbWluZygpIC0gc2V0IHVwIHRoZSB0aW1p bmcgZm9yIHZpZGVvIGZyYW1lCi0gKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byBjb250cm9s bGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBAbW9kZTogICAgICAgICAgVmlkZW8gbW9kZSBpbmZvcm1h dGlvbi4KLSAqCi0gKiBTZXQgdXAgdGhlIHZpZGVvIHRpbWluZyBwYXJhbWV0ZXJzIGZvciB0aGUg RFNJIHZpZGVvIG1vZGUgb3BlcmF0aW9uLgotICovCi12b2lkIGRzaV9jdHJsX2h3X2Ntbl9zZXRf dmlkZW9fdGltaW5nKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkgICAgIHN0cnVjdCBk c2lfbW9kZV9pbmZvICptb2RlKQotewotCXUzMiByZWcgPSAwOwotCXUzMiBoc19zdGFydCA9IDA7 Ci0JdTMyIGhzX2VuZCwgYWN0aXZlX2hfc3RhcnQsIGFjdGl2ZV9oX2VuZCwgaF90b3RhbCwgd2lk dGggPSAwOwotCXUzMiB2c19zdGFydCA9IDAsIHZzX2VuZCA9IDA7Ci0JdTMyIHZwb3Nfc3RhcnQg PSAwLCB2cG9zX2VuZCwgYWN0aXZlX3Zfc3RhcnQsIGFjdGl2ZV92X2VuZCwgdl90b3RhbDsKLQot CWlmIChtb2RlLT5kc2NfZW5hYmxlZCAmJiBtb2RlLT5kc2MpIHsKLQkJd2lkdGggPSBtb2RlLT5k c2MtPnBjbGtfcGVyX2xpbmU7Ci0JCXJlZyA9IG1vZGUtPmRzYy0+Ynl0ZXNfcGVyX3BrdCA8PCAx NjsKLQkJcmVnIHw9ICgweDBiIDw8IDgpOyAgICAvKiBkdHlwZSBvZiBjb21wcmVzc2VkIGltYWdl ICovCi0JCS8qCi0JCSAqIHBrdF9wZXJfbGluZToKLQkJICogMCA9PSAxIHBrdAotCQkgKiAxID09 IDIgcGt0Ci0JCSAqIDIgPT0gNCBwa3QKLQkJICogMyBwa3QgaXMgbm90IHN1cHBvcnQKLQkJICov Ci0JCWlmIChtb2RlLT5kc2MtPnBrdF9wZXJfbGluZSA9PSA0KQotCQkJcmVnIHw9IChtb2RlLT5k c2MtPnBrdF9wZXJfbGluZSAtIDIpIDw8IDY7Ci0JCWVsc2UKLQkJCXJlZyB8PSAobW9kZS0+ZHNj LT5wa3RfcGVyX2xpbmUgLSAxKSA8PCA2OwotCQlyZWcgfD0gbW9kZS0+ZHNjLT5lb2xfYnl0ZV9u dW0gPDwgNDsKLQkJcmVnIHw9IDE7Ci0JCURTSV9XMzIoY3RybCwgRFNJX1ZJREVPX0NPTVBSRVNT SU9OX01PREVfQ1RSTCwgcmVnKTsKLQl9IGVsc2UgewotCQl3aWR0aCA9IG1vZGUtPmhfYWN0aXZl OwotCX0KLQotCWhzX2VuZCA9IG1vZGUtPmhfc3luY193aWR0aDsKLQlhY3RpdmVfaF9zdGFydCA9 IG1vZGUtPmhfc3luY193aWR0aCArIG1vZGUtPmhfYmFja19wb3JjaDsKLQlhY3RpdmVfaF9lbmQg PSBhY3RpdmVfaF9zdGFydCArIHdpZHRoOwotCWhfdG90YWwgPSAobW9kZS0+aF9zeW5jX3dpZHRo ICsgbW9kZS0+aF9iYWNrX3BvcmNoICsgd2lkdGggKwotCQkgICBtb2RlLT5oX2Zyb250X3BvcmNo KSAtIDE7Ci0KLQl2cG9zX2VuZCA9IG1vZGUtPnZfc3luY193aWR0aDsKLQlhY3RpdmVfdl9zdGFy dCA9IG1vZGUtPnZfc3luY193aWR0aCArIG1vZGUtPnZfYmFja19wb3JjaDsKLQlhY3RpdmVfdl9l bmQgPSBhY3RpdmVfdl9zdGFydCArIG1vZGUtPnZfYWN0aXZlOwotCXZfdG90YWwgPSAobW9kZS0+ dl9zeW5jX3dpZHRoICsgbW9kZS0+dl9iYWNrX3BvcmNoICsgbW9kZS0+dl9hY3RpdmUgKwotCQkg ICBtb2RlLT52X2Zyb250X3BvcmNoKSAtIDE7Ci0KLQlyZWcgPSAoKGFjdGl2ZV9oX2VuZCAmIDB4 RkZGRikgPDwgMTYpIHwgKGFjdGl2ZV9oX3N0YXJ0ICYgMHhGRkZGKTsKLQlEU0lfVzMyKGN0cmws IERTSV9WSURFT19NT0RFX0FDVElWRV9ILCByZWcpOwotCi0JcmVnID0gKChhY3RpdmVfdl9lbmQg JiAweEZGRkYpIDw8IDE2KSB8IChhY3RpdmVfdl9zdGFydCAmIDB4RkZGRik7Ci0JRFNJX1czMihj dHJsLCBEU0lfVklERU9fTU9ERV9BQ1RJVkVfViwgcmVnKTsKLQotCXJlZyA9ICgodl90b3RhbCAm IDB4RkZGRikgPDwgMTYpIHwgKGhfdG90YWwgJiAweEZGRkYpOwotCURTSV9XMzIoY3RybCwgRFNJ X1ZJREVPX01PREVfVE9UQUwsIHJlZyk7Ci0KLQlyZWcgPSAoKGhzX2VuZCAmIDB4RkZGRikgPDwg MTYpIHwgKGhzX3N0YXJ0ICYgMHhGRkZGKTsKLQlEU0lfVzMyKGN0cmwsIERTSV9WSURFT19NT0RF X0hTWU5DLCByZWcpOwotCi0JcmVnID0gKCh2c19lbmQgJiAweEZGRkYpIDw8IDE2KSB8ICh2c19z dGFydCAmIDB4RkZGRik7Ci0JRFNJX1czMihjdHJsLCBEU0lfVklERU9fTU9ERV9WU1lOQywgcmVn KTsKLQotCXJlZyA9ICgodnBvc19lbmQgJiAweEZGRkYpIDw8IDE2KSB8ICh2cG9zX3N0YXJ0ICYg MHhGRkZGKTsKLQlEU0lfVzMyKGN0cmwsIERTSV9WSURFT19NT0RFX1ZTWU5DX1ZQT1MsIHJlZyk7 Ci0KLQkvKiBUT0RPOiBIUyBUSU1FUiB2YWx1ZT8gKi8KLQlEU0lfVzMyKGN0cmwsIERTSV9IU19U SU1FUl9DVFJMLCAweDNGRDA4KTsKLQlEU0lfVzMyKGN0cmwsIERTSV9NSVNSX1ZJREVPX0NUUkws IDB4MTAxMDApOwotCURTSV9XMzIoY3RybCwgRFNJX0RTSV9USU1JTkdfRkxVU0gsIDB4MSk7Ci0J cHJfZGVidWcoIltEU0lfJWRdIGN0cmwgdmlkZW8gcGFyYW1ldGVycyB1cGRhdGVkXG4iLCBjdHJs LT5pbmRleCk7Ci0JRFBVX0VWVDMyKHZfdG90YWwsIGhfdG90YWwpOwotfQotCi0vKioKLSAqIHNl dHVwX2NtZF9zdHJlYW0oKSAtIHNldCB1cCBwYXJhbWV0ZXJzIGZvciBjb21tYW5kIHBpeGVsIHN0 cmVhbXMKLSAqIEBjdHJsOiAgICAgICAgICAgICAgUG9pbnRlciB0byBjb250cm9sbGVyIGhvc3Qg aGFyZHdhcmUuCi0gKiBAbW9kZTogICAgICAgICAgICAgIFBvaW50ZXIgdG8gbW9kZSBpbmZvcm1h dGlvbi4KLSAqIEBoX3N0cmlkZTogICAgICAgICAgSG9yaXpvbnRhbCBzdHJpZGUgaW4gYnl0ZXMu Ci0gKiBAdmNfaWQ6ICAgICAgICAgICAgIHN0cmVhbV9pZAotICoKLSAqIFNldHVwIHBhcmFtZXRl cnMgZm9yIGNvbW1hbmQgbW9kZSBwaXhlbCBzdHJlYW0gc2l6ZS4KLSAqLwotdm9pZCBkc2lfY3Ry bF9od19jbW5fc2V0dXBfY21kX3N0cmVhbShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJ ICAgICBzdHJ1Y3QgZHNpX21vZGVfaW5mbyAqbW9kZSwKLQkJCQkgICAgIHUzMiBoX3N0cmlkZSwK LQkJCQkgICAgIHUzMiB2Y19pZCwKLQkJCQkgICAgIHN0cnVjdCBkc2lfcmVjdCAqcm9pKQotewot CXUzMiB3aWR0aF9maW5hbCwgc3RyaWRlX2ZpbmFsOwotCXUzMiBoZWlnaHRfZmluYWw7Ci0JdTMy IHN0cmVhbV90b3RhbCA9IDAsIHN0cmVhbV9jdHJsID0gMDsKLQl1MzIgcmVnX2N0cmwgPSAwLCBy ZWdfY3RybDIgPSAwOwotCi0JaWYgKHJvaSAmJiAoIXJvaS0+dyB8fCAhcm9pLT5oKSkKLQkJcmV0 dXJuOwotCi0JaWYgKG1vZGUtPmRzY19lbmFibGVkICYmIG1vZGUtPmRzYykgewotCQl1MzIgcmVn ID0gMDsKLQkJdTMyIG9mZnNldCA9IDA7Ci0JCWludCBwaWNfd2lkdGgsIHRoaXNfZnJhbWVfc2xp Y2VzLCBpbnRmX2lwX3c7Ci0JCXN0cnVjdCBtc21fZGlzcGxheV9kc2NfaW5mbyBkc2M7Ci0KLQkJ bWVtY3B5KCZkc2MsIG1vZGUtPmRzYywgc2l6ZW9mKGRzYykpOwotCQlwaWNfd2lkdGggPSByb2kg PyByb2ktPncgOiBtb2RlLT5oX2FjdGl2ZTsKLQkJdGhpc19mcmFtZV9zbGljZXMgPSBwaWNfd2lk dGggLyBkc2Muc2xpY2Vfd2lkdGg7Ci0JCWludGZfaXBfdyA9IHRoaXNfZnJhbWVfc2xpY2VzICog ZHNjLnNsaWNlX3dpZHRoOwotCQlkc2lfZHNjX3BjbGtfcGFyYW1fY2FsYygmZHNjLCBpbnRmX2lw X3cpOwotCi0JCWlmICh2Y19pZCAhPSAwKQotCQkJb2Zmc2V0ID0gMTY7Ci0JCXJlZ19jdHJsID0g RFNJX1IzMihjdHJsLCBEU0lfQ09NTUFORF9DT01QUkVTU0lPTl9NT0RFX0NUUkwpOwotCQlyZWdf Y3RybDIgPSBEU0lfUjMyKGN0cmwsIERTSV9DT01NQU5EX0NPTVBSRVNTSU9OX01PREVfQ1RSTDIp OwotCQl3aWR0aF9maW5hbCA9IGRzYy5wY2xrX3Blcl9saW5lOwotCQlzdHJpZGVfZmluYWwgPSBk c2MuYnl0ZXNfcGVyX3BrdDsKLQkJaGVpZ2h0X2ZpbmFsID0gcm9pID8gcm9pLT5oIDogbW9kZS0+ dl9hY3RpdmU7Ci0KLQkJcmVnID0gMHgzOSA8PCA4OwotCQkvKgotCQkgKiBwa3RfcGVyX2xpbmU6 Ci0JCSAqIDAgPT0gMSBwa3QKLQkJICogMSA9PSAyIHBrdAotCQkgKiAyID09IDQgcGt0Ci0JCSAq IDMgcGt0IGlzIG5vdCBzdXBwb3J0Ci0JCSAqLwotCQlpZiAoZHNjLnBrdF9wZXJfbGluZSA9PSA0 KQotCQkJcmVnIHw9IChkc2MucGt0X3Blcl9saW5lIC0gMikgPDwgNjsKLQkJZWxzZQotCQkJcmVn IHw9IChkc2MucGt0X3Blcl9saW5lIC0gMSkgPDwgNjsKLQkJcmVnIHw9IGRzYy5lb2xfYnl0ZV9u dW0gPDwgNDsKLQkJcmVnIHw9IDE7Ci0KLQkJcmVnX2N0cmwgJj0gfigweEZGRkYgPDwgb2Zmc2V0 KTsKLQkJcmVnX2N0cmwgfD0gKHJlZyA8PCBvZmZzZXQpOwotCQlyZWdfY3RybDIgJj0gfigweEZG RkYgPDwgb2Zmc2V0KTsKLQkJcmVnX2N0cmwyIHw9IChkc2MuYnl0ZXNfaW5fc2xpY2UgPDwgb2Zm c2V0KTsKLQotCQlwcl9kZWJ1ZygiY3RybCAlZCByZWdfY3RybCAweCV4IHJlZ19jdHJsMiAweCV4 XG4iLCBjdHJsLT5pbmRleCwKLQkJCQlyZWdfY3RybCwgcmVnX2N0cmwyKTsKLQl9IGVsc2UgaWYg KHJvaSkgewotCQl3aWR0aF9maW5hbCA9IHJvaS0+dzsKLQkJc3RyaWRlX2ZpbmFsID0gcm9pLT53 ICogMzsKLQkJaGVpZ2h0X2ZpbmFsID0gcm9pLT5oOwotCX0gZWxzZSB7Ci0JCXdpZHRoX2ZpbmFs ID0gbW9kZS0+aF9hY3RpdmU7Ci0JCXN0cmlkZV9maW5hbCA9IGhfc3RyaWRlOwotCQloZWlnaHRf ZmluYWwgPSBtb2RlLT52X2FjdGl2ZTsKLQl9Ci0KLQlzdHJlYW1fY3RybCA9IChzdHJpZGVfZmlu YWwgKyAxKSA8PCAxNjsKLQlzdHJlYW1fY3RybCB8PSAodmNfaWQgJiAweDMpIDw8IDg7Ci0Jc3Ry ZWFtX2N0cmwgfD0gMHgzOTsgLyogcGFja2V0IGRhdGEgdHlwZSAqLwotCi0JRFNJX1czMihjdHJs LCBEU0lfQ09NTUFORF9DT01QUkVTU0lPTl9NT0RFX0NUUkwsIHJlZ19jdHJsKTsKLQlEU0lfVzMy KGN0cmwsIERTSV9DT01NQU5EX0NPTVBSRVNTSU9OX01PREVfQ1RSTDIsIHJlZ19jdHJsMik7Ci0K LQlEU0lfVzMyKGN0cmwsIERTSV9DT01NQU5EX01PREVfTURQX1NUUkVBTTBfQ1RSTCwgc3RyZWFt X2N0cmwpOwotCURTSV9XMzIoY3RybCwgRFNJX0NPTU1BTkRfTU9ERV9NRFBfU1RSRUFNMV9DVFJM LCBzdHJlYW1fY3RybCk7Ci0KLQlzdHJlYW1fdG90YWwgPSAoaGVpZ2h0X2ZpbmFsIDw8IDE2KSB8 IHdpZHRoX2ZpbmFsOwotCURTSV9XMzIoY3RybCwgRFNJX0NPTU1BTkRfTU9ERV9NRFBfU1RSRUFN MF9UT1RBTCwgc3RyZWFtX3RvdGFsKTsKLQlEU0lfVzMyKGN0cmwsIERTSV9DT01NQU5EX01PREVf TURQX1NUUkVBTTFfVE9UQUwsIHN0cmVhbV90b3RhbCk7Ci0KLQlwcl9kZWJ1ZygiY3RybCAlZCBz dHJlYW1fY3RybCAweCV4IHN0cmVhbV90b3RhbCAweCV4XG4iLCBjdHJsLT5pbmRleCwKLQkJCXN0 cmVhbV9jdHJsLCBzdHJlYW1fdG90YWwpOwotfQotCi0vKioKLSAqIHZpZGVvX2VuZ2luZV9zZXR1 cCgpIC0gU2V0dXAgZHNpIGhvc3QgY29udHJvbGxlciBmb3IgdmlkZW8gbW9kZQotICogQGN0cmw6 ICAgICAgICAgIFBvaW50ZXIgdG8gY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQGNvbW1v bl9jZmc6ICAgIENvbW1vbiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCi0gKiBAY2ZnOiAgICAg ICAgICAgVmlkZW8gbW9kZSBjb25maWd1cmF0aW9uLgotICoKLSAqIFNldCB1cCBEU0kgdmlkZW8g ZW5naW5lIHdpdGggYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiBDb250cm9sbGVyIGFuZAotICog dmlkZW8gZW5naW5lIGFyZSBub3QgZW5hYmxlZCBhcyBwYXJ0IG9mIHRoaXMgZnVuY3Rpb24uCi0g Ki8KLXZvaWQgZHNpX2N0cmxfaHdfY21uX3ZpZGVvX2VuZ2luZV9zZXR1cChzdHJ1Y3QgZHNpX2N0 cmxfaHcgKmN0cmwsCi0JCQkJICAgICAgIHN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnICpjb21t b25fY2ZnLAotCQkJCSAgICAgICBzdHJ1Y3QgZHNpX3ZpZGVvX2VuZ2luZV9jZmcgKmNmZykKLXsK LQl1MzIgcmVnID0gMDsKLQotCXJlZyB8PSAoY2ZnLT5sYXN0X2xpbmVfaW50ZXJsZWF2ZV9lbiA/ IEJJVCgzMSkgOiAwKTsKLQlyZWcgfD0gKGNmZy0+cHVsc2VfbW9kZV9oc2FfaGUgPyBCSVQoMjgp IDogMCk7Ci0JcmVnIHw9IChjZmctPmhmcF9scDExX2VuID8gQklUKDI0KSA6IDApOwotCXJlZyB8 PSAoY2ZnLT5oYnBfbHAxMV9lbiA/IEJJVCgyMCkgOiAwKTsKLQlyZWcgfD0gKGNmZy0+aHNhX2xw MTFfZW4gPyBCSVQoMTYpIDogMCk7Ci0JcmVnIHw9IChjZmctPmVvZl9ibGxwX2xwMTFfZW4gPyBC SVQoMTUpIDogMCk7Ci0JcmVnIHw9IChjZmctPmJsbHBfbHAxMV9lbiA/IEJJVCgxMikgOiAwKTsK LQlyZWcgfD0gKGNmZy0+dHJhZmZpY19tb2RlICYgMHgzKSA8PCA4OwotCXJlZyB8PSAoY2ZnLT52 Y19pZCAmIDB4Myk7Ci0JcmVnIHw9ICh2aWRlb19tb2RlX2Zvcm1hdF9tYXBbY29tbW9uX2NmZy0+ ZHN0X2Zvcm1hdF0gJiAweDMpIDw8IDQ7Ci0JRFNJX1czMihjdHJsLCBEU0lfVklERU9fTU9ERV9D VFJMLCByZWcpOwotCi0JcmVnID0gKGNvbW1vbl9jZmctPnN3YXBfbW9kZSAmIDB4NykgPDwgMTI7 Ci0JcmVnIHw9IChjb21tb25fY2ZnLT5iaXRfc3dhcF9yZWQgPyBCSVQoMCkgOiAwKTsKLQlyZWcg fD0gKGNvbW1vbl9jZmctPmJpdF9zd2FwX2dyZWVuID8gQklUKDQpIDogMCk7Ci0JcmVnIHw9IChj b21tb25fY2ZnLT5iaXRfc3dhcF9ibHVlID8gQklUKDgpIDogMCk7Ci0JRFNJX1czMihjdHJsLCBE U0lfVklERU9fTU9ERV9EQVRBX0NUUkwsIHJlZyk7Ci0JLyogRGlzYWJsZSBUaW1pbmcgZG91Ymxl IGJ1ZmZlcmluZyAqLwotCURTSV9XMzIoY3RybCwgRFNJX0RTSV9USU1JTkdfREJfTU9ERSwgMHgw KTsKLQotCi0JcHJfZGVidWcoIltEU0lfJWRdIFZpZGVvIGVuZ2luZSBzZXR1cCBkb25lXG4iLCBj dHJsLT5pbmRleCk7Ci19Ci0KLXZvaWQgZHNpX2N0cmxfaHdfY21uX2RlYnVnX2J1cyhzdHJ1Y3Qg ZHNpX2N0cmxfaHcgKmN0cmwpCi17Ci0JdTMyIHJlZyA9IDA7Ci0KLQlEU0lfVzMyKGN0cmwsIERT SV9ERUJVR19CVVNfQ1RMLCAweDE4MSk7Ci0KLQkvKiBtYWtlIHN1cmUgdGhhdCBkZWJ1ZyB0ZXN0 IHBvaW50IGlzIGVuYWJsZWQgKi8KLQl3bWIoKTsKLQlyZWcgPSBEU0lfUjMyKGN0cmwsIERTSV9E RUJVR19CVVNfU1RBVFVTKTsKLQotCXByX2VycigiW0RTSV8lZF0gZGVidWcgYnVzIHN0YXR1czow eCV4XG4iLCBjdHJsLT5pbmRleCwgcmVnKTsKLX0KLS8qKgotICogY21kX2VuZ2luZV9zZXR1cCgp IC0gc2V0dXAgZHNpIGhvc3QgY29udHJvbGxlciBmb3IgY29tbWFuZCBtb2RlCi0gKiBAY3RybDog ICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQGNv bW1vbl9jZmc6ICAgIENvbW1vbiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCi0gKiBAY2ZnOiAg ICAgICAgICAgQ29tbWFuZCBtb2RlIGNvbmZpZ3VyYXRpb24uCi0gKgotICogU2V0dXAgRFNJIENN RCBlbmdpbmUgd2l0aCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uIENvbnRyb2xsZXIgYW5kCi0g KiBjb21tYW5kIGVuZ2luZSBhcmUgbm90IGVuYWJsZWQgYXMgcGFydCBvZiB0aGlzIGZ1bmN0aW9u LgotICovCi12b2lkIGRzaV9jdHJsX2h3X2Ntbl9jbWRfZW5naW5lX3NldHVwKHN0cnVjdCBkc2lf Y3RybF9odyAqY3RybCwKLQkJCQkgICAgIHN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnICpjb21t b25fY2ZnLAotCQkJCSAgICAgc3RydWN0IGRzaV9jbWRfZW5naW5lX2NmZyAqY2ZnKQotewotCXUz MiByZWcgPSAwOwotCi0JcmVnID0gKGNmZy0+bWF4X2NtZF9wYWNrZXRzX2ludGVybGVhdmUgJiAw eEYpIDw8IDIwOwotCXJlZyB8PSAoY29tbW9uX2NmZy0+Yml0X3N3YXBfcmVkID8gQklUKDQpIDog MCk7Ci0JcmVnIHw9IChjb21tb25fY2ZnLT5iaXRfc3dhcF9ncmVlbiA/IEJJVCg4KSA6IDApOwot CXJlZyB8PSAoY29tbW9uX2NmZy0+Yml0X3N3YXBfYmx1ZSA/IEJJVCgxMikgOiAwKTsKLQlyZWcg fD0gY21kX21vZGVfZm9ybWF0X21hcFtjb21tb25fY2ZnLT5kc3RfZm9ybWF0XTsKLQlEU0lfVzMy KGN0cmwsIERTSV9DT01NQU5EX01PREVfTURQX0NUUkwsIHJlZyk7Ci0KLQlyZWcgPSBEU0lfUjMy KGN0cmwsIERTSV9DT01NQU5EX01PREVfTURQX0NUUkwyKTsKLQlyZWcgfD0gQklUKDE2KTsKLQlE U0lfVzMyKGN0cmwsIERTSV9DT01NQU5EX01PREVfTURQX0NUUkwyLCByZWcpOwotCi0JcmVnID0g Y2ZnLT53cl9tZW1fc3RhcnQgJiAweEZGOwotCXJlZyB8PSAoY2ZnLT53cl9tZW1fY29udGludWUg JiAweEZGKSA8PCA4OwotCXJlZyB8PSAoY2ZnLT5pbnNlcnRfZGNzX2NvbW1hbmQgPyBCSVQoMTYp IDogMCk7Ci0JRFNJX1czMihjdHJsLCBEU0lfQ09NTUFORF9NT0RFX01EUF9EQ1NfQ01EX0NUUkws IHJlZyk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gQ21kIGVuZ2luZSBzZXR1cCBkb25lXG4iLCBj dHJsLT5pbmRleCk7Ci19Ci0KLS8qKgotICogdmlkZW9fZW5naW5lX2VuKCkgLSBlbmFibGUgRFNJ IHZpZGVvIGVuZ2luZQotICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gY29udHJvbGxlciBo b3N0IGhhcmR3YXJlLgotICogQG9uOiAgICAgICAgICAgIEVuYWJsZS9kaXNhYmVsIHZpZGVvIGVu Z2luZS4KLSAqLwotdm9pZCBkc2lfY3RybF9od19jbW5fdmlkZW9fZW5naW5lX2VuKHN0cnVjdCBk c2lfY3RybF9odyAqY3RybCwgYm9vbCBvbikKLXsKLQl1MzIgcmVnID0gMDsKLQotCS8qIFNldC9D bGVhciBWSURFT19NT0RFX0VOIGJpdCAqLwotCXJlZyA9IERTSV9SMzIoY3RybCwgRFNJX0NUUkwp OwotCWlmIChvbikKLQkJcmVnIHw9IEJJVCgxKTsKLQllbHNlCi0JCXJlZyAmPSB+QklUKDEpOwot Ci0JRFNJX1czMihjdHJsLCBEU0lfQ1RSTCwgcmVnKTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXSBW aWRlbyBlbmdpbmUgPSAlZFxuIiwgY3RybC0+aW5kZXgsIG9uKTsKLX0KLQotLyoqCi0gKiBjdHJs X2VuKCkgLSBlbmFibGUgRFNJIGNvbnRyb2xsZXIgZW5naW5lCi0gKiBAY3RybDogICAgICAgICAg UG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQG9uOiAgICAgICAg ICAgIHR1cm4gb24vb2ZmIHRoZSBEU0kgY29udHJvbGxlciBlbmdpbmUuCi0gKi8KLXZvaWQgZHNp X2N0cmxfaHdfY21uX2N0cmxfZW4oc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCBib29sIG9uKQot ewotCXUzMiByZWcgPSAwOwotCXUzMiBjbGtfY3RybDsKLQotCWNsa19jdHJsID0gRFNJX1IzMihj dHJsLCBEU0lfQ0xLX0NUUkwpOwotCURTSV9XMzIoY3RybCwgRFNJX0NMS19DVFJMLCBjbGtfY3Ry bCB8IERTSV9DVFJMX0RZTkFNSUNfRk9SQ0VfT04pOwotCXdtYigpOyAvKiB3YWl0IGZvciBjbG9j a3MgdG8gZW5hYmxlICovCi0KLQkvKiBTZXQvQ2xlYXIgRFNJX0VOIGJpdCAqLwotCXJlZyA9IERT SV9SMzIoY3RybCwgRFNJX0NUUkwpOwotCWlmIChvbikKLQkJcmVnIHw9IEJJVCgwKTsKLQllbHNl Ci0JCXJlZyAmPSB+QklUKDApOwotCi0JRFNJX1czMihjdHJsLCBEU0lfQ1RSTCwgcmVnKTsKLQl3 bWIoKTsgLyogd2FpdCBmb3IgRFNJX0VOIHVwZGF0ZSBiZWZvcmUgZGlzYWJsaW5nIGNsb2NrcyAq LwotCi0JRFNJX1czMihjdHJsLCBEU0lfQ0xLX0NUUkwsIGNsa19jdHJsKTsKLQl3bWIoKTsgLyog bWFrZSBzdXJlIGNsb2NrcyBhcmUgcmVzdG9yZWQgKi8KLQotCXByX2RlYnVnKCJbRFNJXyVkXSBD b250cm9sbGVyIGVuZ2luZSA9ICVkXG4iLCBjdHJsLT5pbmRleCwgb24pOwotfQotCi0vKioKLSAq IGNtZF9lbmdpbmVfZW4oKSAtIGVuYWJsZSBEU0kgY29udHJvbGxlciBjb21tYW5kIGVuZ2luZQot ICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2Fy ZS4KLSAqIEBvbjogICAgICAgICAgICBUdXJuIG9uL29mZiB0aGUgRFNJIGNvbW1hbmQgZW5naW5l LgotICovCi12b2lkIGRzaV9jdHJsX2h3X2Ntbl9jbWRfZW5naW5lX2VuKHN0cnVjdCBkc2lfY3Ry bF9odyAqY3RybCwgYm9vbCBvbikKLXsKLQl1MzIgcmVnID0gMDsKLQotCS8qIFNldC9DbGVhciBD TURfTU9ERV9FTiBiaXQgKi8KLQlyZWcgPSBEU0lfUjMyKGN0cmwsIERTSV9DVFJMKTsKLQlpZiAo b24pCi0JCXJlZyB8PSBCSVQoMik7Ci0JZWxzZQotCQlyZWcgJj0gfkJJVCgyKTsKLQotCURTSV9X MzIoY3RybCwgRFNJX0NUUkwsIHJlZyk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gY29tbWFuZCBl bmdpbmUgPSAlZFxuIiwgY3RybC0+aW5kZXgsIG9uKTsKLX0KLQotLyoqCi0gKiBraWNrb2ZmX2Nv bW1hbmQoKSAtIHRyYW5zbWl0cyBjb21tYW5kcyBzdG9yZWQgaW4gbWVtb3J5Ci0gKiBAY3RybDog ICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQGNt ZDogICAgICAgICAgIENvbW1hbmQgaW5mb3JtYXRpb24uCi0gKiBAZmxhZ3M6ICAgICAgICAgTW9k aWZpZXJzIGZvciBjb21tYW5kIHRyYW5zbWlzc2lvbi4KLSAqCi0gKiBUaGUgY29udHJvbGxlciBo YXJkd2FyZSBpcyBwcm9ncmFtbWVkIHdpdGggYWRkcmVzcyBhbmQgc2l6ZSBvZiB0aGUKLSAqIGNv bW1hbmQgYnVmZmVyLiBUaGUgdHJhbnNtaXNzaW9uIGlzIGtpY2tlZCBvZmYgaWYKLSAqIERTSV9D VFJMX0hXX0NNRF9XQUlUX0ZPUl9UUklHR0VSIGZsYWcgaXMgbm90IHNldC4gSWYgdGhpcyBmbGFn IGlzCi0gKiBzZXQsIGNhbGxlciBzaG91bGQgbWFrZSBhIHNlcGFyYXRlIGNhbGwgdG8gdHJpZ2dl cl9jb21tYW5kX2RtYSgpIHRvCi0gKiB0cmFuc21pdCB0aGUgY29tbWFuZC4KLSAqLwotdm9pZCBk c2lfY3RybF9od19jbW5fa2lja29mZl9jb21tYW5kKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwK LQkJCQkgICAgc3RydWN0IGRzaV9jdHJsX2NtZF9kbWFfaW5mbyAqY21kLAotCQkJCSAgICB1MzIg ZmxhZ3MpCi17Ci0JdTMyIHJlZyA9IDA7Ci0KLQkvKlNldCBCUk9BRENBU1RfRU4gYW5kIEVNQkVE REVEX01PREUgKi8KLQlyZWcgPSBEU0lfUjMyKGN0cmwsIERTSV9DT01NQU5EX01PREVfRE1BX0NU UkwpOwotCWlmIChjbWQtPmVuX2Jyb2FkY2FzdCkKLQkJcmVnIHw9IEJJVCgzMSk7Ci0JZWxzZQot CQlyZWcgJj0gfkJJVCgzMSk7Ci0KLQlpZiAoY21kLT5pc19tYXN0ZXIpCi0JCXJlZyB8PSBCSVQo MzApOwotCWVsc2UKLQkJcmVnICY9IH5CSVQoMzApOwotCi0JaWYgKGNtZC0+dXNlX2xwbSkKLQkJ cmVnIHw9IEJJVCgyNik7Ci0JZWxzZQotCQlyZWcgJj0gfkJJVCgyNik7Ci0KLQlyZWcgfD0gQklU KDI4KTsKLQlEU0lfVzMyKGN0cmwsIERTSV9DT01NQU5EX01PREVfRE1BX0NUUkwsIHJlZyk7Ci0K LQlEU0lfVzMyKGN0cmwsIERTSV9ETUFfQ01EX09GRlNFVCwgY21kLT5vZmZzZXQpOwotCURTSV9X MzIoY3RybCwgRFNJX0RNQV9DTURfTEVOR1RILCAoY21kLT5sZW5ndGggJiAweEZGRkZGRikpOwot Ci0JLyogd2FpdCBmb3Igd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSBraWNrIG9mZiAqLwotCXdt YigpOwotCi0JaWYgKCEoZmxhZ3MgJiBEU0lfQ1RSTF9IV19DTURfV0FJVF9GT1JfVFJJR0dFUikp Ci0JCURTSV9XMzIoY3RybCwgRFNJX0NNRF9NT0RFX0RNQV9TV19UUklHR0VSLCAweDEpOwotfQot Ci0vKioKLSAqIGtpY2tvZmZfZmlmb19jb21tYW5kKCkgLSB0cmFuc21pdHMgYSBjb21tYW5kIHVz aW5nIEZJRk8gaW4gZHNpCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUuCi0g KiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJl LgotICogQGNtZDogICAgICAgICAgIENvbW1hbmQgaW5mb3JtYXRpb24uCi0gKiBAZmxhZ3M6ICAg ICAgICAgTW9kaWZpZXJzIGZvciBjb21tYW5kIHRyYW5zbWlzc2lvbi4KLSAqCi0gKiBUaGUgY29u dHJvbGxlciBoYXJkd2FyZSBGSUZPIGlzIHByb2dyYW1tZWQgd2l0aCBjb21tYW5kIGhlYWRlciBh bmQKLSAqIHBheWxvYWQuIFRoZSB0cmFuc21pc3Npb24gaXMga2lja2VkIG9mZiBpZgotICogRFNJ X0NUUkxfSFdfQ01EX1dBSVRfRk9SX1RSSUdHRVIgZmxhZyBpcyBub3Qgc2V0LiBJZiB0aGlzIGZs YWcgaXMKLSAqIHNldCwgY2FsbGVyIHNob3VsZCBtYWtlIGEgc2VwYXJhdGUgY2FsbCB0byB0cmln Z2VyX2NvbW1hbmRfZG1hKCkgdG8KLSAqIHRyYW5zbWl0IHRoZSBjb21tYW5kLgotICovCi12b2lk IGRzaV9jdHJsX2h3X2Ntbl9raWNrb2ZmX2ZpZm9fY29tbWFuZChzdHJ1Y3QgZHNpX2N0cmxfaHcg KmN0cmwsCi0JCQkJCSBzdHJ1Y3QgZHNpX2N0cmxfY21kX2RtYV9maWZvX2luZm8gKmNtZCwKLQkJ CQkJIHUzMiBmbGFncykKLXsKLQl1MzIgcmVnID0gMCwgaSA9IDA7Ci0JdTMyICpwdHIgPSBjbWQt PmNvbW1hbmQ7Ci0JLyoKLQkgKiBTZXQgQ01EX0RNQV9UUEdfRU4sIFRQR19ETUFfRklGT19NT0RF IGFuZAotCSAqIENNRF9ETUFfUEFUVEVSTl9TRUwgPSBjdXN0b20gcGF0dGVybiBzdG9yZWQgaW4g VFBHIERNQSBGSUZPCi0JICovCi0JcmVnID0gKEJJVCgxKSB8IEJJVCgyKSB8ICgweDMgPDwgMTYp KTsKLQlEU0lfVzMyKGN0cmwsIERTSV9URVNUX1BBVFRFUk5fR0VOX0NUUkwsIHJlZyk7Ci0KLQkv KgotCSAqIFByb2dyYW0gdGhlIEZJRk8gd2l0aCBjb21tYW5kIGJ1ZmZlci4gSGFyZHdhcmUgcmVx dWlyZXMgYW4gZXh0cmEKLQkgKiBEV09SRCAoc2V0IHRvIHplcm8pIGlmIHRoZSBsZW5ndGggb2Yg Y29tbWFuZCBidWZmZXIgaXMgb2RkIERXT1JEUy4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY21k LT5zaXplOyBpICs9IDQpIHsKLQkJRFNJX1czMihjdHJsLCBEU0lfVEVTVF9QQVRURVJOX0dFTl9D TURfRE1BX0lOSVRfVkFMLCAqcHRyKTsKLQkJcHRyKys7Ci0JfQotCi0JaWYgKChjbWQtPnNpemUg LyA0KSAmIDB4MSkKLQkJRFNJX1czMihjdHJsLCBEU0lfVEVTVF9QQVRURVJOX0dFTl9DTURfRE1B X0lOSVRfVkFMLCAwKTsKLQotCS8qU2V0IEJST0FEQ0FTVF9FTiBhbmQgRU1CRURERURfTU9ERSAq LwotCXJlZyA9IERTSV9SMzIoY3RybCwgRFNJX0NPTU1BTkRfTU9ERV9ETUFfQ1RSTCk7Ci0JaWYg KGNtZC0+ZW5fYnJvYWRjYXN0KQotCQlyZWcgfD0gQklUKDMxKTsKLQllbHNlCi0JCXJlZyAmPSB+ QklUKDMxKTsKLQotCWlmIChjbWQtPmlzX21hc3RlcikKLQkJcmVnIHw9IEJJVCgzMCk7Ci0JZWxz ZQotCQlyZWcgJj0gfkJJVCgzMCk7Ci0KLQlpZiAoY21kLT51c2VfbHBtKQotCQlyZWcgfD0gQklU KDI2KTsKLQllbHNlCi0JCXJlZyAmPSB+QklUKDI2KTsKLQotCXJlZyB8PSBCSVQoMjgpOwotCi0J RFNJX1czMihjdHJsLCBEU0lfQ09NTUFORF9NT0RFX0RNQV9DVFJMLCByZWcpOwotCi0JRFNJX1cz MihjdHJsLCBEU0lfRE1BX0NNRF9MRU5HVEgsIChjbWQtPnNpemUgJiAweEZGRkZGRkZGKSk7Ci0J LyogRmluaXNoIHdyaXRlcyBiZWZvcmUgY29tbWFuZCB0cmlnZ2VyICovCi0Jd21iKCk7Ci0KLQlp ZiAoIShmbGFncyAmIERTSV9DVFJMX0hXX0NNRF9XQUlUX0ZPUl9UUklHR0VSKSkKLQkJRFNJX1cz MihjdHJsLCBEU0lfQ01EX01PREVfRE1BX1NXX1RSSUdHRVIsIDB4MSk7Ci0KLQlwcl9kZWJ1Zygi W0RTSV8lZF1zaXplPSVkLCB0cmlnZ2VyID0gJWRcbiIsCi0JCSBjdHJsLT5pbmRleCwgY21kLT5z aXplLAotCQkgKGZsYWdzICYgRFNJX0NUUkxfSFdfQ01EX1dBSVRfRk9SX1RSSUdHRVIpID8gZmFs c2UgOiB0cnVlKTsKLX0KLQotdm9pZCBkc2lfY3RybF9od19jbW5fcmVzZXRfY21kX2ZpZm8oc3Ry dWN0IGRzaV9jdHJsX2h3ICpjdHJsKQotewotCS8qIGRpc2FibGUgY21kIGRtYSB0cGcgKi8KLQlE U0lfVzMyKGN0cmwsIERTSV9URVNUX1BBVFRFUk5fR0VOX0NUUkwsIDB4MCk7Ci0KLQlEU0lfVzMy KGN0cmwsIERTSV9UUEdfRE1BX0ZJRk9fUkVTRVQsIDB4MSk7Ci0JdWRlbGF5KDEpOwotCURTSV9X MzIoY3RybCwgRFNJX1RQR19ETUFfRklGT19SRVNFVCwgMHgwKTsKLX0KLQotLyoqCi0gKiB0cmln Z2VyX2NvbW1hbmRfZG1hKCkgLSB0cmlnZ2VyIHRyYW5zbWlzc2lvbiBvZiBjb21tYW5kIGJ1ZmZl ci4KLSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFy ZHdhcmUuCi0gKgotICogVGhpcyB0cmlnZ2VyIGNhbiBiZSBvbmx5IHVzZWQgaWYgdGhlcmUgd2Fz IGEgcHJpb3IgY2FsbCB0bwotICoga2lja29mZl9jb21tYW5kKCkgb2Yga2lja29mZl9maWZvX2Nv bW1hbmQoKSB3aXRoCi0gKiBEU0lfQ1RSTF9IV19DTURfV0FJVF9GT1JfVFJJR0dFUiBmbGFnLgot ICovCi12b2lkIGRzaV9jdHJsX2h3X2Ntbl90cmlnZ2VyX2NvbW1hbmRfZG1hKHN0cnVjdCBkc2lf Y3RybF9odyAqY3RybCkKLXsKLQlEU0lfVzMyKGN0cmwsIERTSV9DTURfTU9ERV9ETUFfU1dfVFJJ R0dFUiwgMHgxKTsKLQlwcl9kZWJ1ZygiW0RTSV8lZF0gQ01EIERNQSB0cmlnZ2VyZWRcbiIsIGN0 cmwtPmluZGV4KTsKLX0KLQotLyoqCi0gKiBnZXRfY21kX3JlYWRfZGF0YSgpIC0gZ2V0IGRhdGEg cmVhZCBmcm9tIHRoZSBwZXJpcGhlcmFsCi0gKiBAY3RybDogICAgICAgICAgIFBvaW50ZXIgdG8g dGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEByZF9idWY6ICAgICAgICAgQnVmZmVy IHdoZXJlIGRhdGEgd2lsbCBiZSByZWFkIGludG8uCi0gKiBAdG90YWxfcmVhZF9sZW46IE51bWJl ciBvZiBieXRlcyB0byByZWFkLgotICoKLSAqIHJldHVybjogbnVtYmVyIG9mIGJ5dGVzIHJlYWQu Ci0gKi8KLXUzMiBkc2lfY3RybF9od19jbW5fZ2V0X2NtZF9yZWFkX2RhdGEoc3RydWN0IGRzaV9j dHJsX2h3ICpjdHJsLAotCQkJCSAgICAgdTggKnJkX2J1ZiwKLQkJCQkgICAgIHUzMiByZWFkX29m ZnNldCwKLQkJCQkgICAgIHUzMiB0b3RhbF9yZWFkX2xlbikKLXsKLQl1MzIgKmxwLCAqdGVtcCwg ZGF0YTsKLQlpbnQgaSwgaiA9IDAsIGNudDsKLQl1MzIgcmVhZF9jbnQ7Ci0JdTMyIHJ4X2J5dGUg PSAwOwotCXUzMiByZXBlYXRlZF9ieXRlcyA9IDA7Ci0JdTggcmVnWzE2XSA9IHswfTsKLQl1MzIg cGt0X3NpemUgPSAwOwotCWludCBidWZfb2Zmc2V0ID0gcmVhZF9vZmZzZXQ7Ci0KLQlscCA9ICh1 MzIgKilyZF9idWY7Ci0JdGVtcCA9ICh1MzIgKilyZWc7Ci0JY250ID0gKHJ4X2J5dGUgKyAzKSA+ PiAyOwotCi0JaWYgKGNudCA+IDQpCi0JCWNudCA9IDQ7Ci0KLQlpZiAocnhfYnl0ZSA9PSA0KQot CQlyZWFkX2NudCA9IDQ7Ci0JZWxzZQotCQlyZWFkX2NudCA9IHBrdF9zaXplICsgNjsKLQotCWlm IChyZWFkX2NudCA+IDE2KSB7Ci0JCWludCBieXRlc19zaGlmdGVkOwotCi0JCWJ5dGVzX3NoaWZ0 ZWQgPSByZWFkX2NudCAtIDE2OwotCQlyZXBlYXRlZF9ieXRlcyA9IGJ1Zl9vZmZzZXQgLSBieXRl c19zaGlmdGVkOwotCX0KLQotCWZvciAoaSA9IGNudCAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCWRh dGEgPSBEU0lfUjMyKGN0cmwsIERTSV9SREJLX0RBVEEwICsgaSo0KTsKLQkJKnRlbXArKyA9IG50 b2hsKGRhdGEpOwotCX0KLQotCWZvciAoaSA9IHJlcGVhdGVkX2J5dGVzOyBpIDwgMTY7IGkrKykK LQkJcmRfYnVmW2orK10gPSByZWdbaV07Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gUmVhZCAlZCBi eXRlc1xuIiwgY3RybC0+aW5kZXgsIGopOwotCXJldHVybiBqOwotfQotCi0vKioKLSAqIGdldF9p bnRlcnJ1cHRfc3RhdHVzKCkgLSByZXR1cm5zIHRoZSBpbnRlcnJ1cHQgc3RhdHVzCi0gKiBAY3Ry bDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICoK LSAqIFJldHVybnMgdGhlIE9SZWQgbGlzdCBvZiBpbnRlcnJ1cHRzKGVudW0gZHNpX3N0YXR1c19p bnRfdHlwZSkgdGhhdAotICogYXJlIGFjdGl2ZS4gVGhpcyBsaXN0IGRvZXMgbm90IGluY2x1ZGUg YW55IGVycm9yIGludGVycnVwdHMuIENhbGxlcgotICogc2hvdWxkIGNhbGwgZ2V0X2Vycm9yX3N0 YXR1cyBmb3IgZXJyb3IgaW50ZXJydXB0cy4KLSAqCi0gKiBSZXR1cm46IExpc3Qgb2YgYWN0aXZl IGludGVycnVwdHMuCi0gKi8KLXUzMiBkc2lfY3RybF9od19jbW5fZ2V0X2ludGVycnVwdF9zdGF0 dXMoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsKQotewotCXUzMiByZWcgPSAwOwotCXUzMiBpbnRz ID0gMDsKLQotCXJlZyA9IERTSV9SMzIoY3RybCwgRFNJX0lOVF9DVFJMKTsKLQotCWlmIChyZWcg JiBCSVQoMCkpCi0JCWludHMgfD0gRFNJX0NNRF9NT0RFX0RNQV9ET05FOwotCWlmIChyZWcgJiBC SVQoOCkpCi0JCWludHMgfD0gRFNJX0NNRF9GUkFNRV9ET05FOwotCWlmIChyZWcgJiBCSVQoMTAp KQotCQlpbnRzIHw9IERTSV9DTURfU1RSRUFNMF9GUkFNRV9ET05FOwotCWlmIChyZWcgJiBCSVQo MTIpKQotCQlpbnRzIHw9IERTSV9DTURfU1RSRUFNMV9GUkFNRV9ET05FOwotCWlmIChyZWcgJiBC SVQoMTQpKQotCQlpbnRzIHw9IERTSV9DTURfU1RSRUFNMl9GUkFNRV9ET05FOwotCWlmIChyZWcg JiBCSVQoMTYpKQotCQlpbnRzIHw9IERTSV9WSURFT19NT0RFX0ZSQU1FX0RPTkU7Ci0JaWYgKHJl ZyAmIEJJVCgyMCkpCi0JCWludHMgfD0gRFNJX0JUQV9ET05FOwotCWlmIChyZWcgJiBCSVQoMjgp KQotCQlpbnRzIHw9IERTSV9EWU5fUkVGUkVTSF9ET05FOwotCWlmIChyZWcgJiBCSVQoMzApKQot CQlpbnRzIHw9IERTSV9ERVNLRVdfRE9ORTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXSBJbnRlcnJ1 cHQgc3RhdHVzID0gMHgleCwgSU5UX0NUUkw9MHgleFxuIiwKLQkJIGN0cmwtPmluZGV4LCBpbnRz LCByZWcpOwotCXJldHVybiBpbnRzOwotfQotCi0vKioKLSAqIGNsZWFyX2ludGVycnVwdF9zdGF0 dXMoKSAtIGNsZWFycyB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMKLSAqIEBjdHJsOiAgICAgICAg ICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBAaW50czogICAg ICAgICAgTGlzdCBvZiBpbnRlcnJ1cHRzIHRvIGJlIGNsZWFyZWQuCi0gKi8KLXZvaWQgZHNpX2N0 cmxfaHdfY21uX2NsZWFyX2ludGVycnVwdF9zdGF0dXMoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJs LCB1MzIgaW50cykKLXsKLQl1MzIgcmVnID0gMDsKLQotCXJlZyA9IERTSV9SMzIoY3RybCwgRFNJ X0lOVF9DVFJMKTsKLQotCWlmIChpbnRzICYgRFNJX0NNRF9NT0RFX0RNQV9ET05FKQotCQlyZWcg fD0gQklUKDApOwotCWlmIChpbnRzICYgRFNJX0NNRF9GUkFNRV9ET05FKQotCQlyZWcgfD0gQklU KDgpOwotCWlmIChpbnRzICYgRFNJX0NNRF9TVFJFQU0wX0ZSQU1FX0RPTkUpCi0JCXJlZyB8PSBC SVQoMTApOwotCWlmIChpbnRzICYgRFNJX0NNRF9TVFJFQU0xX0ZSQU1FX0RPTkUpCi0JCXJlZyB8 PSBCSVQoMTIpOwotCWlmIChpbnRzICYgRFNJX0NNRF9TVFJFQU0yX0ZSQU1FX0RPTkUpCi0JCXJl ZyB8PSBCSVQoMTQpOwotCWlmIChpbnRzICYgRFNJX1ZJREVPX01PREVfRlJBTUVfRE9ORSkKLQkJ cmVnIHw9IEJJVCgxNik7Ci0JaWYgKGludHMgJiBEU0lfQlRBX0RPTkUpCi0JCXJlZyB8PSBCSVQo MjApOwotCWlmIChpbnRzICYgRFNJX0RZTl9SRUZSRVNIX0RPTkUpCi0JCXJlZyB8PSBCSVQoMjgp OwotCWlmIChpbnRzICYgRFNJX0RFU0tFV19ET05FKQotCQlyZWcgfD0gQklUKDMwKTsKLQotCURT SV9XMzIoY3RybCwgRFNJX0lOVF9DVFJMLCByZWcpOwotCi0JcHJfZGVidWcoIltEU0lfJWRdIENs ZWFyIGludGVycnVwdHMsIGludHMgPSAweCV4LCBJTlRfQ1RSTD0weCV4XG4iLAotCQkgY3RybC0+ aW5kZXgsIGludHMsIHJlZyk7Ci19Ci0KLS8qKgotICogZW5hYmxlX3N0YXR1c19pbnRlcnJ1cHRz KCkgLSBlbmFibGUgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHRzCi0gKiBAY3RybDogICAgICAgICAg UG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQGludHM6ICAgICAg ICAgIExpc3Qgb2YgaW50ZXJydXB0cyB0byBiZSBlbmFibGVkLgotICoKLSAqIEVuYWJsZXMgdGhl IHNwZWNpZmllZCBpbnRlcnJ1cHRzLiBUaGlzIGxpc3Qgd2lsbCBvdmVycmlkZSB0aGUKLSAqIHBy ZXZpb3VzIGludGVycnVwdHMgZW5hYmxlZCB0aHJvdWdoIHRoaXMgZnVuY3Rpb24uIENhbGxlciBo YXMgdG8KLSAqIG1haW50YWluIHRoZSBzdGF0ZSBvZiB0aGUgaW50ZXJydXB0cyBlbmFibGVkLiBU byBkaXNhYmxlIGFsbAotICogaW50ZXJydXB0cywgc2V0IGludHMgdG8gMC4KLSAqLwotdm9pZCBk c2lfY3RybF9od19jbW5fZW5hYmxlX3N0YXR1c19pbnRlcnJ1cHRzKAotCQlzdHJ1Y3QgZHNpX2N0 cmxfaHcgKmN0cmwsIHUzMiBpbnRzKQotewotCXUzMiByZWcgPSAwOwotCi0JLyogRG8gbm90IGNo YW5nZSB2YWx1ZSBvZiBEU0lfRVJST1JfTUFTSyBiaXQgKi8KLQlyZWcgfD0gKERTSV9SMzIoY3Ry bCwgRFNJX0lOVF9DVFJMKSAmIEJJVCgyNSkpOwotCWlmIChpbnRzICYgRFNJX0NNRF9NT0RFX0RN QV9ET05FKQotCQlyZWcgfD0gQklUKDEpOwotCWlmIChpbnRzICYgRFNJX0NNRF9GUkFNRV9ET05F KQotCQlyZWcgfD0gQklUKDkpOwotCWlmIChpbnRzICYgRFNJX0NNRF9TVFJFQU0wX0ZSQU1FX0RP TkUpCi0JCXJlZyB8PSBCSVQoMTEpOwotCWlmIChpbnRzICYgRFNJX0NNRF9TVFJFQU0xX0ZSQU1F X0RPTkUpCi0JCXJlZyB8PSBCSVQoMTMpOwotCWlmIChpbnRzICYgRFNJX0NNRF9TVFJFQU0yX0ZS QU1FX0RPTkUpCi0JCXJlZyB8PSBCSVQoMTUpOwotCWlmIChpbnRzICYgRFNJX1ZJREVPX01PREVf RlJBTUVfRE9ORSkKLQkJcmVnIHw9IEJJVCgxNyk7Ci0JaWYgKGludHMgJiBEU0lfQlRBX0RPTkUp Ci0JCXJlZyB8PSBCSVQoMjEpOwotCWlmIChpbnRzICYgRFNJX0RZTl9SRUZSRVNIX0RPTkUpCi0J CXJlZyB8PSBCSVQoMjkpOwotCWlmIChpbnRzICYgRFNJX0RFU0tFV19ET05FKQotCQlyZWcgfD0g QklUKDMxKTsKLQotCURTSV9XMzIoY3RybCwgRFNJX0lOVF9DVFJMLCByZWcpOwotCi0JcHJfZGVi dWcoIltEU0lfJWRdIEVuYWJsZSBpbnRlcnJ1cHRzIDB4JXgsIElOVF9DVFJMPTB4JXhcbiIsCi0J CSBjdHJsLT5pbmRleCwgaW50cywgcmVnKTsKLX0KLQotLyoqCi0gKiBnZXRfZXJyb3Jfc3RhdHVz KCkgLSByZXR1cm5zIHRoZSBlcnJvciBzdGF0dXMKLSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVy IHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKgotICogUmV0dXJucyB0aGUgT1Jl ZCBsaXN0IG9mIGVycm9ycyhlbnVtIGRzaV9lcnJvcl9pbnRfdHlwZSkgdGhhdCBhcmUKLSAqIGFj dGl2ZS4gVGhpcyBsaXN0IGRvZXMgbm90IGluY2x1ZGUgYW55IHN0YXR1cyBpbnRlcnJ1cHRzLiBD YWxsZXIKLSAqIHNob3VsZCBjYWxsIGdldF9pbnRlcnJ1cHRfc3RhdHVzIGZvciBzdGF0dXMgaW50 ZXJydXB0cy4KLSAqCi0gKiBSZXR1cm46IExpc3Qgb2YgYWN0aXZlIGVycm9yIGludGVycnVwdHMu Ci0gKi8KLXU2NCBkc2lfY3RybF9od19jbW5fZ2V0X2Vycm9yX3N0YXR1cyhzdHJ1Y3QgZHNpX2N0 cmxfaHcgKmN0cmwpCi17Ci0JdTMyIGRsbjBfcGh5X2VycjsKLQl1MzIgZmlmb19zdGF0dXM7Ci0J dTMyIGFja19lcnJvcjsKLQl1MzIgdGltZW91dF9lcnJvcnM7Ci0JdTMyIGNsa19lcnJvcjsKLQl1 MzIgZHNpX3N0YXR1czsKLQl1NjQgZXJyb3JzID0gMDsKLQotCWRsbjBfcGh5X2VyciA9IERTSV9S MzIoY3RybCwgRFNJX0RMTjBfUEhZX0VSUik7Ci0JaWYgKGRsbjBfcGh5X2VyciAmIEJJVCgwKSkK LQkJZXJyb3JzIHw9IERTSV9ETE4wX0VTQ19FTlRSWV9FUlI7Ci0JaWYgKGRsbjBfcGh5X2VyciAm IEJJVCg0KSkKLQkJZXJyb3JzIHw9IERTSV9ETE4wX0VTQ19TWU5DX0VSUjsKLQlpZiAoZGxuMF9w aHlfZXJyICYgQklUKDgpKQotCQllcnJvcnMgfD0gRFNJX0RMTjBfTFBfQ09OVFJPTF9FUlI7Ci0J aWYgKGRsbjBfcGh5X2VyciAmIEJJVCgxMikpCi0JCWVycm9ycyB8PSBEU0lfRExOMF9MUDBfQ09O VEVOVElPTjsKLQlpZiAoZGxuMF9waHlfZXJyICYgQklUKDE2KSkKLQkJZXJyb3JzIHw9IERTSV9E TE4wX0xQMV9DT05URU5USU9OOwotCi0JZmlmb19zdGF0dXMgPSBEU0lfUjMyKGN0cmwsIERTSV9G SUZPX1NUQVRVUyk7Ci0JaWYgKGZpZm9fc3RhdHVzICYgQklUKDcpKQotCQllcnJvcnMgfD0gRFNJ X0NNRF9NRFBfRklGT19VTkRFUkZMT1c7Ci0JaWYgKGZpZm9fc3RhdHVzICYgQklUKDEwKSkKLQkJ ZXJyb3JzIHw9IERTSV9DTURfRE1BX0ZJRk9fVU5ERVJGTE9XOwotCWlmIChmaWZvX3N0YXR1cyAm IEJJVCgxOCkpCi0JCWVycm9ycyB8PSBEU0lfRExOMF9IU19GSUZPX09WRVJGTE9XOwotCWlmIChm aWZvX3N0YXR1cyAmIEJJVCgxOSkpCi0JCWVycm9ycyB8PSBEU0lfRExOMF9IU19GSUZPX1VOREVS RkxPVzsKLQlpZiAoZmlmb19zdGF0dXMgJiBCSVQoMjIpKQotCQllcnJvcnMgfD0gRFNJX0RMTjFf SFNfRklGT19PVkVSRkxPVzsKLQlpZiAoZmlmb19zdGF0dXMgJiBCSVQoMjMpKQotCQllcnJvcnMg fD0gRFNJX0RMTjFfSFNfRklGT19VTkRFUkZMT1c7Ci0JaWYgKGZpZm9fc3RhdHVzICYgQklUKDI2 KSkKLQkJZXJyb3JzIHw9IERTSV9ETE4yX0hTX0ZJRk9fT1ZFUkZMT1c7Ci0JaWYgKGZpZm9fc3Rh dHVzICYgQklUKDI3KSkKLQkJZXJyb3JzIHw9IERTSV9ETE4yX0hTX0ZJRk9fVU5ERVJGTE9XOwot CWlmIChmaWZvX3N0YXR1cyAmIEJJVCgzMCkpCi0JCWVycm9ycyB8PSBEU0lfRExOM19IU19GSUZP X09WRVJGTE9XOwotCWlmIChmaWZvX3N0YXR1cyAmIEJJVCgzMSkpCi0JCWVycm9ycyB8PSBEU0lf RExOM19IU19GSUZPX1VOREVSRkxPVzsKLQotCWFja19lcnJvciA9IERTSV9SMzIoY3RybCwgRFNJ X0FDS19FUlJfU1RBVFVTKTsKLQlpZiAoYWNrX2Vycm9yICYgQklUKDE2KSkKLQkJZXJyb3JzIHw9 IERTSV9SREJLX1NJTkdMRV9FQ0NfRVJSOwotCWlmIChhY2tfZXJyb3IgJiBCSVQoMTcpKQotCQll cnJvcnMgfD0gRFNJX1JEQktfTVVMVElfRUNDX0VSUjsKLQlpZiAoYWNrX2Vycm9yICYgQklUKDIw KSkKLQkJZXJyb3JzIHw9IERTSV9SREJLX0NSQ19FUlI7Ci0JaWYgKGFja19lcnJvciAmIEJJVCgy MykpCi0JCWVycm9ycyB8PSBEU0lfUkRCS19JTkNPTVBMRVRFX1BLVDsKLQlpZiAoYWNrX2Vycm9y ICYgQklUKDI0KSkKLQkJZXJyb3JzIHw9IERTSV9QRVJJUEhfRVJST1JfUEtUOwotCi0JdGltZW91 dF9lcnJvcnMgPSBEU0lfUjMyKGN0cmwsIERTSV9USU1FT1VUX1NUQVRVUyk7Ci0JaWYgKHRpbWVv dXRfZXJyb3JzICYgQklUKDApKQotCQllcnJvcnMgfD0gRFNJX0hTX1RYX1RJTUVPVVQ7Ci0JaWYg KHRpbWVvdXRfZXJyb3JzICYgQklUKDQpKQotCQllcnJvcnMgfD0gRFNJX0xQX1JYX1RJTUVPVVQ7 Ci0JaWYgKHRpbWVvdXRfZXJyb3JzICYgQklUKDgpKQotCQllcnJvcnMgfD0gRFNJX0JUQV9USU1F T1VUOwotCi0JY2xrX2Vycm9yID0gRFNJX1IzMihjdHJsLCBEU0lfQ0xLX1NUQVRVUyk7Ci0JaWYg KGNsa19lcnJvciAmIEJJVCgxNikpCi0JCWVycm9ycyB8PSBEU0lfUExMX1VOTE9DSzsKLQotCWRz aV9zdGF0dXMgPSBEU0lfUjMyKGN0cmwsIERTSV9TVEFUVVMpOwotCWlmIChkc2lfc3RhdHVzICYg QklUKDMxKSkKLQkJZXJyb3JzIHw9IERTSV9JTlRFUkxFQVZFX09QX0NPTlRFTlRJT047Ci0KLQlw cl9kZWJ1ZygiW0RTSV8lZF0gRXJyb3Igc3RhdHVzID0gMHglbGx4LCBwaHk9MHgleCwgZmlmbz0w eCV4IiwKLQkJIGN0cmwtPmluZGV4LCBlcnJvcnMsIGRsbjBfcGh5X2VyciwgZmlmb19zdGF0dXMp OwotCXByX2RlYnVnKCJbRFNJXyVkXSBhY2s9MHgleCwgdGltZW91dD0weCV4LCBjbGs9MHgleCwg ZHNpPTB4JXhcbiIsCi0JCSBjdHJsLT5pbmRleCwgYWNrX2Vycm9yLCB0aW1lb3V0X2Vycm9ycywg Y2xrX2Vycm9yLCBkc2lfc3RhdHVzKTsKLQlyZXR1cm4gZXJyb3JzOwotfQotCi0vKioKLSAqIGNs ZWFyX2Vycm9yX3N0YXR1cygpIC0gY2xlYXJzIHRoZSBzcGVjaWZpZWQgZXJyb3JzCi0gKiBAY3Ry bDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICog QGVycm9yczogICAgICAgICAgTGlzdCBvZiBlcnJvcnMgdG8gYmUgY2xlYXJlZC4KLSAqLwotdm9p ZCBkc2lfY3RybF9od19jbW5fY2xlYXJfZXJyb3Jfc3RhdHVzKHN0cnVjdCBkc2lfY3RybF9odyAq Y3RybCwgdTY0IGVycm9ycykKLXsKLQl1MzIgZGxuMF9waHlfZXJyID0gMDsKLQl1MzIgZmlmb19z dGF0dXMgPSAwOwotCXUzMiBhY2tfZXJyb3IgPSAwOwotCXUzMiB0aW1lb3V0X2Vycm9yID0gMDsK LQl1MzIgY2xrX2Vycm9yID0gMDsKLQl1MzIgZHNpX3N0YXR1cyA9IDA7Ci0JdTMyIGludF9jdHJs ID0gMDsKLQotCWlmIChlcnJvcnMgJiBEU0lfUkRCS19TSU5HTEVfRUNDX0VSUikKLQkJYWNrX2Vy cm9yIHw9IEJJVCgxNik7Ci0JaWYgKGVycm9ycyAmIERTSV9SREJLX01VTFRJX0VDQ19FUlIpCi0J CWFja19lcnJvciB8PSBCSVQoMTcpOwotCWlmIChlcnJvcnMgJiBEU0lfUkRCS19DUkNfRVJSKQot CQlhY2tfZXJyb3IgfD0gQklUKDIwKTsKLQlpZiAoZXJyb3JzICYgRFNJX1JEQktfSU5DT01QTEVU RV9QS1QpCi0JCWFja19lcnJvciB8PSBCSVQoMjMpOwotCWlmIChlcnJvcnMgJiBEU0lfUEVSSVBI X0VSUk9SX1BLVCkKLQkJYWNrX2Vycm9yIHw9IEJJVCgyNCk7Ci0KLQlpZiAoZXJyb3JzICYgRFNJ X0xQX1JYX1RJTUVPVVQpCi0JCXRpbWVvdXRfZXJyb3IgfD0gQklUKDQpOwotCWlmIChlcnJvcnMg JiBEU0lfSFNfVFhfVElNRU9VVCkKLQkJdGltZW91dF9lcnJvciB8PSBCSVQoMCk7Ci0JaWYgKGVy cm9ycyAmIERTSV9CVEFfVElNRU9VVCkKLQkJdGltZW91dF9lcnJvciB8PSBCSVQoOCk7Ci0KLQlp ZiAoZXJyb3JzICYgRFNJX1BMTF9VTkxPQ0spCi0JCWNsa19lcnJvciB8PSBCSVQoMTYpOwotCi0J aWYgKGVycm9ycyAmIERTSV9ETE4wX0xQMF9DT05URU5USU9OKQotCQlkbG4wX3BoeV9lcnIgfD0g QklUKDEyKTsKLQlpZiAoZXJyb3JzICYgRFNJX0RMTjBfTFAxX0NPTlRFTlRJT04pCi0JCWRsbjBf cGh5X2VyciB8PSBCSVQoMTYpOwotCWlmIChlcnJvcnMgJiBEU0lfRExOMF9FU0NfRU5UUllfRVJS KQotCQlkbG4wX3BoeV9lcnIgfD0gQklUKDApOwotCWlmIChlcnJvcnMgJiBEU0lfRExOMF9FU0Nf U1lOQ19FUlIpCi0JCWRsbjBfcGh5X2VyciB8PSBCSVQoNCk7Ci0JaWYgKGVycm9ycyAmIERTSV9E TE4wX0xQX0NPTlRST0xfRVJSKQotCQlkbG4wX3BoeV9lcnIgfD0gQklUKDgpOwotCi0JaWYgKGVy cm9ycyAmIERTSV9DTURfRE1BX0ZJRk9fVU5ERVJGTE9XKQotCQlmaWZvX3N0YXR1cyB8PSBCSVQo MTApOwotCWlmIChlcnJvcnMgJiBEU0lfQ01EX01EUF9GSUZPX1VOREVSRkxPVykKLQkJZmlmb19z dGF0dXMgfD0gQklUKDcpOwotCWlmIChlcnJvcnMgJiBEU0lfRExOMF9IU19GSUZPX09WRVJGTE9X KQotCQlmaWZvX3N0YXR1cyB8PSBCSVQoMTgpOwotCWlmIChlcnJvcnMgJiBEU0lfRExOMV9IU19G SUZPX09WRVJGTE9XKQotCQlmaWZvX3N0YXR1cyB8PSBCSVQoMjIpOwotCWlmIChlcnJvcnMgJiBE U0lfRExOMl9IU19GSUZPX09WRVJGTE9XKQotCQlmaWZvX3N0YXR1cyB8PSBCSVQoMjYpOwotCWlm IChlcnJvcnMgJiBEU0lfRExOM19IU19GSUZPX09WRVJGTE9XKQotCQlmaWZvX3N0YXR1cyB8PSBC SVQoMzApOwotCWlmIChlcnJvcnMgJiBEU0lfRExOMF9IU19GSUZPX1VOREVSRkxPVykKLQkJZmlm b19zdGF0dXMgfD0gQklUKDE5KTsKLQlpZiAoZXJyb3JzICYgRFNJX0RMTjFfSFNfRklGT19VTkRF UkZMT1cpCi0JCWZpZm9fc3RhdHVzIHw9IEJJVCgyMyk7Ci0JaWYgKGVycm9ycyAmIERTSV9ETE4y X0hTX0ZJRk9fVU5ERVJGTE9XKQotCQlmaWZvX3N0YXR1cyB8PSBCSVQoMjcpOwotCWlmIChlcnJv cnMgJiBEU0lfRExOM19IU19GSUZPX1VOREVSRkxPVykKLQkJZmlmb19zdGF0dXMgfD0gQklUKDMx KTsKLQotCWlmIChlcnJvcnMgJiBEU0lfSU5URVJMRUFWRV9PUF9DT05URU5USU9OKQotCQlkc2lf c3RhdHVzIHw9IEJJVCgzMSk7Ci0KLQlEU0lfVzMyKGN0cmwsIERTSV9ETE4wX1BIWV9FUlIsIGRs bjBfcGh5X2Vycik7Ci0JRFNJX1czMihjdHJsLCBEU0lfRklGT19TVEFUVVMsIGZpZm9fc3RhdHVz KTsKLQlEU0lfVzMyKGN0cmwsIERTSV9BQ0tfRVJSX1NUQVRVUywgYWNrX2Vycm9yKTsKLQlEU0lf VzMyKGN0cmwsIERTSV9USU1FT1VUX1NUQVRVUywgdGltZW91dF9lcnJvcik7Ci0JRFNJX1czMihj dHJsLCBEU0lfQ0xLX1NUQVRVUywgY2xrX2Vycm9yKTsKLQlEU0lfVzMyKGN0cmwsIERTSV9TVEFU VVMsIGRzaV9zdGF0dXMpOwotCi0JaW50X2N0cmwgPSBEU0lfUjMyKGN0cmwsIERTSV9JTlRfQ1RS TCk7Ci0JaW50X2N0cmwgfD0gQklUKDI0KTsKLQlEU0lfVzMyKGN0cmwsIERTSV9JTlRfQ1RSTCwg aW50X2N0cmwpOwotCXByX2RlYnVnKCJbRFNJXyVkXSBjbGVhciBlcnJvcnMgPSAweCVsbHgsIHBo eT0weCV4LCBmaWZvPTB4JXgiLAotCQkgY3RybC0+aW5kZXgsIGVycm9ycywgZGxuMF9waHlfZXJy LCBmaWZvX3N0YXR1cyk7Ci0JcHJfZGVidWcoIltEU0lfJWRdIGFjaz0weCV4LCB0aW1lb3V0PTB4 JXgsIGNsaz0weCV4LCBkc2k9MHgleFxuIiwKLQkJIGN0cmwtPmluZGV4LCBhY2tfZXJyb3IsIHRp bWVvdXRfZXJyb3IsIGNsa19lcnJvciwgZHNpX3N0YXR1cyk7Ci19Ci0KLS8qKgotICogZW5hYmxl X2Vycm9yX2ludGVycnVwdHMoKSAtIGVuYWJsZSB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMKLSAq IEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUu Ci0gKiBAZXJyb3JzOiAgICAgICAgTGlzdCBvZiBlcnJvcnMgdG8gYmUgZW5hYmxlZC4KLSAqCi0g KiBFbmFibGVzIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cy4gVGhpcyBsaXN0IHdpbGwgb3ZlcnJp ZGUgdGhlCi0gKiBwcmV2aW91cyBpbnRlcnJ1cHRzIGVuYWJsZWQgdGhyb3VnaCB0aGlzIGZ1bmN0 aW9uLiBDYWxsZXIgaGFzIHRvCi0gKiBtYWludGFpbiB0aGUgc3RhdGUgb2YgdGhlIGludGVycnVw dHMgZW5hYmxlZC4gVG8gZGlzYWJsZSBhbGwKLSAqIGludGVycnVwdHMsIHNldCBlcnJvcnMgdG8g MC4KLSAqLwotdm9pZCBkc2lfY3RybF9od19jbW5fZW5hYmxlX2Vycm9yX2ludGVycnVwdHMoc3Ry dWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCQkgICAgdTY0IGVycm9ycykKLXsKLQl1MzIgaW50 X2N0cmwgPSAwOwotCXUzMiBpbnRfbWFzazAgPSAweDdGRkYzQkZGOwotCi0JaW50X2N0cmwgPSBE U0lfUjMyKGN0cmwsIERTSV9JTlRfQ1RSTCk7Ci0JaWYgKGVycm9ycykKLQkJaW50X2N0cmwgfD0g QklUKDI1KTsKLQllbHNlCi0JCWludF9jdHJsICY9IH5CSVQoMjUpOwotCi0JaWYgKGVycm9ycyAm IERTSV9SREJLX1NJTkdMRV9FQ0NfRVJSKQotCQlpbnRfbWFzazAgJj0gfkJJVCgwKTsKLQlpZiAo ZXJyb3JzICYgRFNJX1JEQktfTVVMVElfRUNDX0VSUikKLQkJaW50X21hc2swICY9IH5CSVQoMSk7 Ci0JaWYgKGVycm9ycyAmIERTSV9SREJLX0NSQ19FUlIpCi0JCWludF9tYXNrMCAmPSB+QklUKDIp OwotCWlmIChlcnJvcnMgJiBEU0lfUkRCS19JTkNPTVBMRVRFX1BLVCkKLQkJaW50X21hc2swICY9 IH5CSVQoMyk7Ci0JaWYgKGVycm9ycyAmIERTSV9QRVJJUEhfRVJST1JfUEtUKQotCQlpbnRfbWFz azAgJj0gfkJJVCg0KTsKLQotCWlmIChlcnJvcnMgJiBEU0lfTFBfUlhfVElNRU9VVCkKLQkJaW50 X21hc2swICY9IH5CSVQoNSk7Ci0JaWYgKGVycm9ycyAmIERTSV9IU19UWF9USU1FT1VUKQotCQlp bnRfbWFzazAgJj0gfkJJVCg2KTsKLQlpZiAoZXJyb3JzICYgRFNJX0JUQV9USU1FT1VUKQotCQlp bnRfbWFzazAgJj0gfkJJVCg3KTsKLQotCWlmIChlcnJvcnMgJiBEU0lfUExMX1VOTE9DSykKLQkJ aW50X21hc2swICY9IH5CSVQoMjgpOwotCi0JaWYgKGVycm9ycyAmIERTSV9ETE4wX0xQMF9DT05U RU5USU9OKQotCQlpbnRfbWFzazAgJj0gfkJJVCgyNCk7Ci0JaWYgKGVycm9ycyAmIERTSV9ETE4w X0xQMV9DT05URU5USU9OKQotCQlpbnRfbWFzazAgJj0gfkJJVCgyNSk7Ci0JaWYgKGVycm9ycyAm IERTSV9ETE4wX0VTQ19FTlRSWV9FUlIpCi0JCWludF9tYXNrMCAmPSB+QklUKDIxKTsKLQlpZiAo ZXJyb3JzICYgRFNJX0RMTjBfRVNDX1NZTkNfRVJSKQotCQlpbnRfbWFzazAgJj0gfkJJVCgyMik7 Ci0JaWYgKGVycm9ycyAmIERTSV9ETE4wX0xQX0NPTlRST0xfRVJSKQotCQlpbnRfbWFzazAgJj0g fkJJVCgyMyk7Ci0KLQlpZiAoZXJyb3JzICYgRFNJX0NNRF9ETUFfRklGT19VTkRFUkZMT1cpCi0J CWludF9tYXNrMCAmPSB+QklUKDkpOwotCWlmIChlcnJvcnMgJiBEU0lfQ01EX01EUF9GSUZPX1VO REVSRkxPVykKLQkJaW50X21hc2swICY9IH5CSVQoMTEpOwotCWlmIChlcnJvcnMgJiBEU0lfRExO MF9IU19GSUZPX09WRVJGTE9XKQotCQlpbnRfbWFzazAgJj0gfkJJVCgxNik7Ci0JaWYgKGVycm9y cyAmIERTSV9ETE4xX0hTX0ZJRk9fT1ZFUkZMT1cpCi0JCWludF9tYXNrMCAmPSB+QklUKDE3KTsK LQlpZiAoZXJyb3JzICYgRFNJX0RMTjJfSFNfRklGT19PVkVSRkxPVykKLQkJaW50X21hc2swICY9 IH5CSVQoMTgpOwotCWlmIChlcnJvcnMgJiBEU0lfRExOM19IU19GSUZPX09WRVJGTE9XKQotCQlp bnRfbWFzazAgJj0gfkJJVCgxOSk7Ci0JaWYgKGVycm9ycyAmIERTSV9ETE4wX0hTX0ZJRk9fVU5E RVJGTE9XKQotCQlpbnRfbWFzazAgJj0gfkJJVCgyNik7Ci0JaWYgKGVycm9ycyAmIERTSV9ETE4x X0hTX0ZJRk9fVU5ERVJGTE9XKQotCQlpbnRfbWFzazAgJj0gfkJJVCgyNyk7Ci0JaWYgKGVycm9y cyAmIERTSV9ETE4yX0hTX0ZJRk9fVU5ERVJGTE9XKQotCQlpbnRfbWFzazAgJj0gfkJJVCgyOSk7 Ci0JaWYgKGVycm9ycyAmIERTSV9ETE4zX0hTX0ZJRk9fVU5ERVJGTE9XKQotCQlpbnRfbWFzazAg Jj0gfkJJVCgzMCk7Ci0KLQlpZiAoZXJyb3JzICYgRFNJX0lOVEVSTEVBVkVfT1BfQ09OVEVOVElP TikKLQkJaW50X21hc2swICY9IH5CSVQoOCk7Ci0KLQlEU0lfVzMyKGN0cmwsIERTSV9JTlRfQ1RS TCwgaW50X2N0cmwpOwotCURTSV9XMzIoY3RybCwgRFNJX0VSUl9JTlRfTUFTSzAsIGludF9tYXNr MCk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gZW5hYmxlIGVycm9ycyA9IDB4JWxseCwgaW50X21h c2swPTB4JXhcbiIsCi0JCSBjdHJsLT5pbmRleCwgZXJyb3JzLCBpbnRfbWFzazApOwotfQotCi0v KioKLSAqIHZpZGVvX3Rlc3RfcGF0dGVybl9zZXR1cCgpIC0gc2V0dXAgdGVzdCBwYXR0ZXJuIGVu Z2luZSBmb3IgdmlkZW8gbW9kZQotICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNv bnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEB0eXBlOiAgICAgICAgICBUeXBlIG9mIHRlc3Qg cGF0dGVybi4KLSAqIEBpbml0X3ZhbDogICAgICBJbml0aWFsIHZhbHVlIHRvIHVzZSBmb3IgZ2Vu ZXJhdGluZyB0ZXN0IHBhdHRlcm4uCi0gKi8KLXZvaWQgZHNpX2N0cmxfaHdfY21uX3ZpZGVvX3Rl c3RfcGF0dGVybl9zZXR1cChzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJCSAgICAgZW51 bSBkc2lfdGVzdF9wYXR0ZXJuIHR5cGUsCi0JCQkJCSAgICAgdTMyIGluaXRfdmFsKQotewotCXUz MiByZWcgPSAwOwotCi0JRFNJX1czMihjdHJsLCBEU0lfVEVTVF9QQVRURVJOX0dFTl9WSURFT19J TklUX1ZBTCwgaW5pdF92YWwpOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBEU0lfVEVTVF9Q QVRURVJOX0ZJWEVEOgotCQlyZWcgfD0gKDB4MiA8PCA0KTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lf VEVTVF9QQVRURVJOX0lOQzoKLQkJcmVnIHw9ICgweDEgPDwgNCk7Ci0JCWJyZWFrOwotCWNhc2Ug RFNJX1RFU1RfUEFUVEVSTl9QT0xZOgotCQlEU0lfVzMyKGN0cmwsIERTSV9URVNUX1BBVFRFUk5f R0VOX1ZJREVPX1BPTFksIDB4RjBGMEYpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsK LQl9Ci0KLQlEU0lfVzMyKGN0cmwsIERTSV9UUEdfTUFJTl9DT05UUk9MLCAweDEwMCk7Ci0JRFNJ X1czMihjdHJsLCBEU0lfVFBHX1ZJREVPX0NPTkZJRywgMHg1KTsKLQlEU0lfVzMyKGN0cmwsIERT SV9URVNUX1BBVFRFUk5fR0VOX0NUUkwsIHJlZyk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gVmlk ZW8gdGVzdCBwYXR0ZXJuIHNldHVwIGRvbmVcbiIsIGN0cmwtPmluZGV4KTsKLX0KLQotLyoqCi0g KiBjbWRfdGVzdF9wYXR0ZXJuX3NldHVwKCkgLSBzZXR1cCB0ZXN0IHBhdHR0ZXJuIGVuZ2luZSBm b3IgY21kIG1vZGUKLSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVy IGhvc3QgaGFyZHdhcmUuCi0gKiBAdHlwZTogICAgICAgICAgVHlwZSBvZiB0ZXN0IHBhdHRlcm4u Ci0gKiBAaW5pdF92YWw6ICAgICAgSW5pdGlhbCB2YWx1ZSB0byB1c2UgZm9yIGdlbmVyYXRpbmcg dGVzdCBwYXR0ZXJuLgotICogQHN0cmVhbV9pZDogICAgIFN0cmVhbSBJZCBvbiB3aGljaCBwYWNr ZXRzIGFyZSBnZW5lcmF0ZWQuCi0gKi8KLXZvaWQgZHNpX2N0cmxfaHdfY21uX2NtZF90ZXN0X3Bh dHRlcm5fc2V0dXAoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCQkgICBlbnVtIGRzaV90 ZXN0X3BhdHRlcm4gdHlwZSwKLQkJCQkJICAgdTMyIGluaXRfdmFsLAotCQkJCQkgICB1MzIgc3Ry ZWFtX2lkKQotewotCXUzMiByZWcgPSAwOwotCXUzMiBpbml0X29mZnNldDsKLQl1MzIgcG9seV9v ZmZzZXQ7Ci0JdTMyIHBhdHRlcm5fc2VsX3NoaWZ0OwotCi0Jc3dpdGNoIChzdHJlYW1faWQpIHsK LQljYXNlIDA6Ci0JCWluaXRfb2Zmc2V0ID0gRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX01EUF9J TklUX1ZBTDA7Ci0JCXBvbHlfb2Zmc2V0ID0gRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX01EUF9T VFJFQU0wX1BPTFk7Ci0JCXBhdHRlcm5fc2VsX3NoaWZ0ID0gODsKLQkJYnJlYWs7Ci0JY2FzZSAx OgotCQlpbml0X29mZnNldCA9IERTSV9URVNUX1BBVFRFUk5fR0VOX0NNRF9NRFBfSU5JVF9WQUwx OwotCQlwb2x5X29mZnNldCA9IERTSV9URVNUX1BBVFRFUk5fR0VOX0NNRF9NRFBfU1RSRUFNMV9Q T0xZOwotCQlwYXR0ZXJuX3NlbF9zaGlmdCA9IDEyOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCWlu aXRfb2Zmc2V0ID0gRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX01EUF9JTklUX1ZBTDI7Ci0JCXBv bHlfb2Zmc2V0ID0gRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX01EUF9TVFJFQU0yX1BPTFk7Ci0J CXBhdHRlcm5fc2VsX3NoaWZ0ID0gMjA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybjsK LQl9Ci0KLQlEU0lfVzMyKGN0cmwsIGluaXRfb2Zmc2V0LCBpbml0X3ZhbCk7Ci0KLQlzd2l0Y2gg KHR5cGUpIHsKLQljYXNlIERTSV9URVNUX1BBVFRFUk5fRklYRUQ6Ci0JCXJlZyB8PSAoMHgyIDw8 IHBhdHRlcm5fc2VsX3NoaWZ0KTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfVEVTVF9QQVRURVJOX0lO QzoKLQkJcmVnIHw9ICgweDEgPDwgcGF0dGVybl9zZWxfc2hpZnQpOwotCQlicmVhazsKLQljYXNl IERTSV9URVNUX1BBVFRFUk5fUE9MWToKLQkJRFNJX1czMihjdHJsLCBwb2x5X29mZnNldCwgMHhG MEYwRik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCURTSV9XMzIoY3Ry bCwgRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ1RSTCwgcmVnKTsKLQlwcl9kZWJ1ZygiW0RTSV8lZF0g Q21kIHRlc3QgcGF0dGVybiBzZXR1cCBkb25lXG4iLCBjdHJsLT5pbmRleCk7Ci19Ci0KLS8qKgot ICogdGVzdF9wYXR0ZXJuX2VuYWJsZSgpIC0gZW5hYmxlIHRlc3QgcGF0dGVybiBlbmdpbmUKLSAq IEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUu Ci0gKiBAZW5hYmxlOiAgICAgICAgRW5hYmxlL0Rpc2FibGUgdGVzdCBwYXR0ZXJuIGVuZ2luZS4K LSAqLwotdm9pZCBkc2lfY3RybF9od19jbW5fdGVzdF9wYXR0ZXJuX2VuYWJsZShzdHJ1Y3QgZHNp X2N0cmxfaHcgKmN0cmwsCi0JCQkJCWJvb2wgZW5hYmxlKQotewotCXUzMiByZWcgPSBEU0lfUjMy KGN0cmwsIERTSV9URVNUX1BBVFRFUk5fR0VOX0NUUkwpOwotCi0JaWYgKGVuYWJsZSkKLQkJcmVn IHw9IEJJVCgwKTsKLQllbHNlCi0JCXJlZyAmPSB+QklUKDApOwotCi0JRFNJX1czMihjdHJsLCBE U0lfVEVTVF9QQVRURVJOX0dFTl9DVFJMLCByZWcpOwotCi0JcHJfZGVidWcoIltEU0lfJWRdIFRl c3QgcGF0dGVybiBlbmFibGU9JWRcbiIsIGN0cmwtPmluZGV4LCBlbmFibGUpOwotfQotCi0vKioK LSAqIHRyaWdnZXJfY21kX3Rlc3RfcGF0dGVybigpIC0gdHJpZ2dlciBhIGNvbW1hbmQgbW9kZSBm cmFtZSB1cGRhdGUgd2l0aAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0IHBh dHRlcm4KLSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3Qg aGFyZHdhcmUuCi0gKiBAc3RyZWFtX2lkOiAgICAgU3RyZWFtIG9uIHdoaWNoIGZyYW1lIHVwZGF0 ZSBpcyBzZW50LgotICovCi12b2lkIGRzaV9jdHJsX2h3X2Ntbl90cmlnZ2VyX2NtZF90ZXN0X3Bh dHRlcm4oc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCQkgICAgIHUzMiBzdHJlYW1faWQp Ci17Ci0Jc3dpdGNoIChzdHJlYW1faWQpIHsKLQljYXNlIDA6Ci0JCURTSV9XMzIoY3RybCwgRFNJ X1RFU1RfUEFUVEVSTl9HRU5fQ01EX1NUUkVBTTBfVFJJR0dFUiwgMHgxKTsKLQkJYnJlYWs7Ci0J Y2FzZSAxOgotCQlEU0lfVzMyKGN0cmwsIERTSV9URVNUX1BBVFRFUk5fR0VOX0NNRF9TVFJFQU0x X1RSSUdHRVIsIDB4MSk7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJRFNJX1czMihjdHJsLCBEU0lf VEVTVF9QQVRURVJOX0dFTl9DTURfU1RSRUFNMl9UUklHR0VSLCAweDEpOwotCQlicmVhazsKLQlk ZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gQ21kIFRlc3QgcGF0 dGVybiB0cmlnZ2VyXG4iLCBjdHJsLT5pbmRleCk7Ci19Ci0KLXZvaWQgZHNpX2N0cmxfaHdfZGxu MF9waHlfZXJyKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCkKLXsKLQl1MzIgc3RhdHVzID0gMDsK LQkvKgotCSAqIENsZWFyIG91dCBhbnkgcGh5IGVycm9ycyBwcmlvciB0byBleGl0aW5nIFVMUFMK LQkgKiBUaGlzIGZpeGVzIGNlcnRhaW4gaW5zdGFuY2VzIHdoZXJlIHBoeSBkb2VzIG5vdCBleGl0 Ci0JICogVUxQUyBjbGVhbmx5LiBBbHNvLCBkbyBub3QgcHJpbnQgZXJyb3IgZHVyaW5nIHN1Y2gg Y2FzZXMuCi0JICovCi0Jc3RhdHVzID0gRFNJX1IzMihjdHJsLCBEU0lfRExOMF9QSFlfRVJSKTsK LQlpZiAoc3RhdHVzICYgMHgwMTExMTEpIHsKLQkJRFNJX1czMihjdHJsLCBEU0lfRExOMF9QSFlf RVJSLCBzdGF0dXMpOwotCQlwcl9lcnIoIiVzOiBwaHlfZXJyX3N0YXR1cyA9ICV4XG4iLCBfX2Z1 bmNfXywgc3RhdHVzKTsKLQl9Ci19Ci0KLXZvaWQgZHNpX2N0cmxfaHdfY21uX3BoeV9yZXNldF9j b25maWcoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQlib29sIGVuYWJsZSkKLXsKLQl1MzIg cmVnID0gMDsKLQotCXJlZyA9IERTSV9NTVNTX01JU0NfUjMyKGN0cmwsIE1NU1NfTUlTQ19DTEFN UF9SRUdfT0ZGKTsKLQotCS8qIE1hc2svdW5tYXNrIGRpc2FibGUgUEhZIHJlc2V0IGJpdCAqLwot CWlmIChlbmFibGUpCi0JCXJlZyB8PSBCSVQoMzApOwotCWVsc2UKLQkJcmVnICY9IH5CSVQoMzAp OwotCi0JRFNJX01NU1NfTUlTQ19XMzIoY3RybCwgTU1TU19NSVNDX0NMQU1QX1JFR19PRkYsIHJl Zyk7Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNp X2N0cmxfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsX3Jl Zy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTRkNTc1MC4uMDAwMDAwMAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsX3JlZy5oCisrKyAvZGV2 L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwg VGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq Ci0gKi8KLQotI2lmbmRlZiBfRFNJX0NUUkxfUkVHX0hfCi0jZGVmaW5lIF9EU0lfQ1RSTF9SRUdf SF8KLQotI2RlZmluZSBEU0lfSFdfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KDB4MDAwMCkKLSNkZWZpbmUgRFNJX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICgweDAwMDQpCi0jZGVmaW5lIERTSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoMHgwMDA4KQotI2RlZmluZSBEU0lfRklGT19TVEFUVVMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKDB4MDAwQykKLSNkZWZpbmUgRFNJX1ZJREVPX01PREVfQ1RSTCAgICAgICAg ICAgICAgICAgICAgICAgICgweDAwMTApCi0jZGVmaW5lIERTSV9WSURFT19NT0RFX1NZTkNfREFU QVRZUEUgICAgICAgICAgICAgICAoMHgwMDE0KQotI2RlZmluZSBEU0lfVklERU9fTU9ERV9QSVhF TF9EQVRBVFlQRSAgICAgICAgICAgICAgKDB4MDAxOCkKLSNkZWZpbmUgRFNJX1ZJREVPX01PREVf QkxBTktJTkdfREFUQVRZUEUgICAgICAgICAgICgweDAwMUMpCi0jZGVmaW5lIERTSV9WSURFT19N T0RFX0RBVEFfQ1RSTCAgICAgICAgICAgICAgICAgICAoMHgwMDIwKQotI2RlZmluZSBEU0lfVklE RU9fTU9ERV9BQ1RJVkVfSCAgICAgICAgICAgICAgICAgICAgKDB4MDAyNCkKLSNkZWZpbmUgRFNJ X1ZJREVPX01PREVfQUNUSVZFX1YgICAgICAgICAgICAgICAgICAgICgweDAwMjgpCi0jZGVmaW5l IERTSV9WSURFT19NT0RFX1RPVEFMICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDJDKQotI2Rl ZmluZSBEU0lfVklERU9fTU9ERV9IU1lOQyAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAzMCkK LSNkZWZpbmUgRFNJX1ZJREVPX01PREVfVlNZTkMgICAgICAgICAgICAgICAgICAgICAgICgweDAw MzQpCi0jZGVmaW5lIERTSV9WSURFT19NT0RFX1ZTWU5DX1ZQT1MgICAgICAgICAgICAgICAgICAo MHgwMDM4KQotI2RlZmluZSBEU0lfQ09NTUFORF9NT0RFX0RNQV9DVFJMICAgICAgICAgICAgICAg ICAgKDB4MDAzQykKLSNkZWZpbmUgRFNJX0NPTU1BTkRfTU9ERV9NRFBfQ1RSTCAgICAgICAgICAg ICAgICAgICgweDAwNDApCi0jZGVmaW5lIERTSV9DT01NQU5EX01PREVfTURQX0RDU19DTURfQ1RS TCAgICAgICAgICAoMHgwMDQ0KQotI2RlZmluZSBEU0lfRE1BX0NNRF9PRkZTRVQgICAgICAgICAg ICAgICAgICAgICAgICAgKDB4MDA0OCkKLSNkZWZpbmUgRFNJX0RNQV9DTURfTEVOR1RIICAgICAg ICAgICAgICAgICAgICAgICAgICgweDAwNEMpCi0jZGVmaW5lIERTSV9ETUFfRklGT19DVFJMICAg ICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDUwKQotI2RlZmluZSBEU0lfRE1BX05VTExfUEFD S0VUX0RBVEEgICAgICAgICAgICAgICAgICAgKDB4MDA1NCkKLSNkZWZpbmUgRFNJX0NPTU1BTkRf TU9ERV9NRFBfU1RSRUFNMF9DVFJMICAgICAgICAgICgweDAwNTgpCi0jZGVmaW5lIERTSV9DT01N QU5EX01PREVfTURQX1NUUkVBTTBfVE9UQUwgICAgICAgICAoMHgwMDVDKQotI2RlZmluZSBEU0lf Q09NTUFORF9NT0RFX01EUF9TVFJFQU0xX0NUUkwgICAgICAgICAgKDB4MDA2MCkKLSNkZWZpbmUg RFNJX0NPTU1BTkRfTU9ERV9NRFBfU1RSRUFNMV9UT1RBTCAgICAgICAgICgweDAwNjQpCi0jZGVm aW5lIERTSV9BQ0tfRVJSX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDY4KQot I2RlZmluZSBEU0lfUkRCS19EQVRBMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDA2 QykKLSNkZWZpbmUgRFNJX1JEQktfREFUQTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgw eDAwNzApCi0jZGVmaW5lIERTSV9SREJLX0RBVEEyICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoMHgwMDc0KQotI2RlZmluZSBEU0lfUkRCS19EQVRBMyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKDB4MDA3OCkKLSNkZWZpbmUgRFNJX1JEQktfREFUQVRZUEUwICAgICAgICAgICAgICAg ICAgICAgICAgICgweDAwN0MpCi0jZGVmaW5lIERTSV9SREJLX0RBVEFUWVBFMSAgICAgICAgICAg ICAgICAgICAgICAgICAoMHgwMDgwKQotI2RlZmluZSBEU0lfVFJJR19DVFJMICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKDB4MDA4NCkKLSNkZWZpbmUgRFNJX0VYVF9NVVggICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICgweDAwODgpCi0jZGVmaW5lIERTSV9FWFRfTVVYX1RFX1BV TFNFX0RFVEVDVF9DVFJMICAgICAgICAgICAoMHgwMDhDKQotI2RlZmluZSBEU0lfQ01EX01PREVf RE1BX1NXX1RSSUdHRVIgICAgICAgICAgICAgICAgKDB4MDA5MCkKLSNkZWZpbmUgRFNJX0NNRF9N T0RFX01EUF9TV19UUklHR0VSICAgICAgICAgICAgICAgICgweDAwOTQpCi0jZGVmaW5lIERTSV9D TURfTU9ERV9CVEFfU1dfVFJJR0dFUiAgICAgICAgICAgICAgICAoMHgwMDk4KQotI2RlZmluZSBE U0lfUkVTRVRfU1dfVFJJR0dFUiAgICAgICAgICAgICAgICAgICAgICAgKDB4MDA5QykKLSNkZWZp bmUgRFNJX01JU1JfQ01EX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwQTApCi0j ZGVmaW5lIERTSV9NSVNSX1ZJREVPX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMEE0 KQotI2RlZmluZSBEU0lfTEFORV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4 MDBBOCkKLSNkZWZpbmUgRFNJX0xBTkVfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICgweDAwQUMpCi0jZGVmaW5lIERTSV9MQU5FX1NXQVBfQ1RSTCAgICAgICAgICAgICAgICAgICAg ICAgICAoMHgwMEIwKQotI2RlZmluZSBEU0lfRExOMF9QSFlfRVJSICAgICAgICAgICAgICAgICAg ICAgICAgICAgKDB4MDBCNCkKLSNkZWZpbmUgRFNJX0xQX1RJTUVSX0NUUkwgICAgICAgICAgICAg ICAgICAgICAgICAgICgweDAwQjgpCi0jZGVmaW5lIERTSV9IU19USU1FUl9DVFJMICAgICAgICAg ICAgICAgICAgICAgICAgICAoMHgwMEJDKQotI2RlZmluZSBEU0lfVElNRU9VVF9TVEFUVVMgICAg ICAgICAgICAgICAgICAgICAgICAgKDB4MDBDMCkKLSNkZWZpbmUgRFNJX0NMS09VVF9USU1JTkdf Q1RSTCAgICAgICAgICAgICAgICAgICAgICgweDAwQzQpCi0jZGVmaW5lIERTSV9FT1RfUEFDS0VU ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMEM4KQotI2RlZmluZSBEU0lfRU9UX1BB Q0tFVF9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDBDQykKLSNkZWZpbmUgRFNJX0dF TkVSSUNfRVNDX1RYX1RSSUdHRVIgICAgICAgICAgICAgICAgICgweDAwRDApCi0jZGVmaW5lIERT SV9DQU1fQklTVF9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMEQ0KQotI2RlZmlu ZSBEU0lfQ0FNX0JJU1RfRlJBTUVfU0laRSAgICAgICAgICAgICAgICAgICAgKDB4MDBEOCkKLSNk ZWZpbmUgRFNJX0NBTV9CSVNUX0JMT0NLX1NJWkUgICAgICAgICAgICAgICAgICAgICgweDAwREMp Ci0jZGVmaW5lIERTSV9DQU1fQklTVF9GUkFNRV9DT05GSUcgICAgICAgICAgICAgICAgICAoMHgw MEUwKQotI2RlZmluZSBEU0lfQ0FNX0JJU1RfTFNGUl9DVFJMICAgICAgICAgICAgICAgICAgICAg KDB4MDBFNCkKLSNkZWZpbmUgRFNJX0NBTV9CSVNUX0xTRlJfSU5JVCAgICAgICAgICAgICAgICAg ICAgICgweDAwRTgpCi0jZGVmaW5lIERTSV9DQU1fQklTVF9TVEFSVCAgICAgICAgICAgICAgICAg ICAgICAgICAoMHgwMEVDKQotI2RlZmluZSBEU0lfQ0FNX0JJU1RfU1RBVFVTICAgICAgICAgICAg ICAgICAgICAgICAgKDB4MDBGMCkKLSNkZWZpbmUgRFNJX0VSUl9JTlRfTUFTSzAgICAgICAgICAg ICAgICAgICAgICAgICAgICgweDAxMEMpCi0jZGVmaW5lIERTSV9JTlRfQ1RSTCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoMHgwMTEwKQotI2RlZmluZSBEU0lfSU9CSVNUX0NUUkwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDExNCkKLSNkZWZpbmUgRFNJX1NPRlRfUkVTRVQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAxMTgpCi0jZGVmaW5lIERTSV9DTEtfQ1RS TCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMTFDKQotI2RlZmluZSBEU0lfQ0xL X1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDEyMCkKLSNkZWZpbmUgRFNJ X0RFQlVHX0JVU19DVEwgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAxMjQpCi0jZGVmaW5l IERTSV9ERUJVR19CVVNfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAoMHgwMTI4KQotI2Rl ZmluZSBEU0lfUEhZX1NXX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDEyQykK LSNkZWZpbmUgRFNJX0FYSTJBSEJfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAx MzApCi0jZGVmaW5lIERTSV9NSVNSX0NNRF9NRFAwXzMyQklUICAgICAgICAgICAgICAgICAgICAo MHgwMTM0KQotI2RlZmluZSBEU0lfTUlTUl9DTURfTURQMV8zMkJJVCAgICAgICAgICAgICAgICAg ICAgKDB4MDEzOCkKLSNkZWZpbmUgRFNJX01JU1JfQ01EX0RNQV8zMkJJVCAgICAgICAgICAgICAg ICAgICAgICgweDAxM0MpCi0jZGVmaW5lIERTSV9NSVNSX1ZJREVPXzMyQklUICAgICAgICAgICAg ICAgICAgICAgICAoMHgwMTQwKQotI2RlZmluZSBEU0lfTEFORV9NSVNSX0NUUkwgICAgICAgICAg ICAgICAgICAgICAgICAgKDB4MDE0NCkKLSNkZWZpbmUgRFNJX0xBTkUwX01JU1IgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgweDAxNDgpCi0jZGVmaW5lIERTSV9MQU5FMV9NSVNSICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoMHgwMTRDKQotI2RlZmluZSBEU0lfTEFORTJfTUlTUiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDE1MCkKLSNkZWZpbmUgRFNJX0xBTkUzX01J U1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAxNTQpCi0jZGVmaW5lIERTSV9URVNU X1BBVFRFUk5fR0VOX0NUUkwgICAgICAgICAgICAgICAgICAoMHgwMTVDKQotI2RlZmluZSBEU0lf VEVTVF9QQVRURVJOX0dFTl9WSURFT19QT0xZICAgICAgICAgICAgKDB4MDE2MCkKLSNkZWZpbmUg RFNJX1RFU1RfUEFUVEVSTl9HRU5fVklERU9fSU5JVF9WQUwgICAgICAgICgweDAxNjQpCi0jZGVm aW5lIERTSV9URVNUX1BBVFRFUk5fR0VOX0NNRF9NRFBfU1RSRUFNMF9QT0xZICAoMHgwMTY4KQot I2RlZmluZSBEU0lfVEVTVF9QQVRURVJOX0dFTl9DTURfTURQX0lOSVRfVkFMMCAgICAgKDB4MDE2 QykKLSNkZWZpbmUgRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX01EUF9TVFJFQU0xX1BPTFkgICgw eDAxNzApCi0jZGVmaW5lIERTSV9URVNUX1BBVFRFUk5fR0VOX0NNRF9NRFBfSU5JVF9WQUwxICAg ICAoMHgwMTc0KQotI2RlZmluZSBEU0lfVEVTVF9QQVRURVJOX0dFTl9DTURfRE1BX1BPTFkgICAg ICAgICAgKDB4MDE3OCkKLSNkZWZpbmUgRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX0RNQV9JTklU X1ZBTCAgICAgICgweDAxN0MpCi0jZGVmaW5lIERTSV9URVNUX1BBVFRFUk5fR0VOX1ZJREVPX0VO QUJMRSAgICAgICAgICAoMHgwMTgwKQotI2RlZmluZSBEU0lfVEVTVF9QQVRURVJOX0dFTl9DTURf U1RSRUFNMF9UUklHR0VSICAgKDB4MDE4NCkKLSNkZWZpbmUgRFNJX1RFU1RfUEFUVEVSTl9HRU5f Q01EX1NUUkVBTTFfVFJJR0dFUiAgICgweDAxODgpCi0jZGVmaW5lIERTSV9URVNUX1BBVFRFUk5f R0VOX0NNRF9NRFBfSU5JVF9WQUwyICAgICAoMHgwMThDKQotI2RlZmluZSBEU0lfVEVTVF9QQVRU RVJOX0dFTl9DTURfTURQX1NUUkVBTTJfUE9MWSAgKDB4MDE5MCkKLSNkZWZpbmUgRFNJX1RFU1Rf UEFUVEVSTl9HRU5fQ01EX01EUF9TVFJFQU0yX1BPTFkgICgweDAxOTApCi0jZGVmaW5lIERTSV9D T01NQU5EX01PREVfTURQX0lETEVfQ1RSTCAgICAgICAgICAgICAoMHgwMTk0KQotI2RlZmluZSBE U0lfVEVTVF9QQVRURVJOX0dFTl9DTURfU1RSRUFNMl9UUklHR0VSICAgKDB4MDE5OCkKLSNkZWZp bmUgRFNJX1RQR19NQUlOX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICgweDAxOUMpCi0j ZGVmaW5lIERTSV9UUEdfTUFJTl9DT05UUk9MMiAgICAgICAgICAgICAgICAgICAgICAoMHgwMUEw KQotI2RlZmluZSBEU0lfVFBHX1ZJREVPX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgKDB4 MDFBNCkKLSNkZWZpbmUgRFNJX1RQR19DT01QT05FTlRfTElNSVRTICAgICAgICAgICAgICAgICAg ICgweDAxQTgpCi0jZGVmaW5lIERTSV9UUEdfUkVDVEFOR0xFICAgICAgICAgICAgICAgICAgICAg ICAgICAoMHgwMUFDKQotI2RlZmluZSBEU0lfVFBHX0JMQUNLX1dISVRFX1BBVFRFUk5fRlJBTUVT ICAgICAgICAgKDB4MDFCMCkKLSNkZWZpbmUgRFNJX1RQR19SR0JfTUFQUElORyAgICAgICAgICAg ICAgICAgICAgICAgICgweDAxQjQpCi0jZGVmaW5lIERTSV9DT01NQU5EX01PREVfTURQX0NUUkwy ICAgICAgICAgICAgICAgICAoMHgwMUI4KQotI2RlZmluZSBEU0lfQ09NTUFORF9NT0RFX01EUF9T VFJFQU0yX0NUUkwgICAgICAgICAgKDB4MDFCQykKLSNkZWZpbmUgRFNJX0NPTU1BTkRfTU9ERV9N RFBfU1RSRUFNMl9UT1RBTCAgICAgICAgICgweDAxQzApCi0jZGVmaW5lIERTSV9NSVNSX0NNRF9N RFAyXzhCSVQgICAgICAgICAgICAgICAgICAgICAoMHgwMUM0KQotI2RlZmluZSBEU0lfTUlTUl9D TURfTURQMl8zMkJJVCAgICAgICAgICAgICAgICAgICAgKDB4MDFDOCkKLSNkZWZpbmUgRFNJX1ZC SUZfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAxQ0MpCi0jZGVmaW5lIERT SV9BRVNfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMUQwKQotI2RlZmlu ZSBEU0lfUkRCS19EQVRBX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDFENCkKLSNk ZWZpbmUgRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX0RNQV9JTklUX1ZBTDIgICAgICgweDAxRDgp Ci0jZGVmaW5lIERTSV9UUEdfRE1BX0ZJRk9fU1RBVFVTICAgICAgICAgICAgICAgICAgICAoMHgw MURDKQotI2RlZmluZSBEU0lfVFBHX0RNQV9GSUZPX1dSSVRFX1RSSUdHRVIgICAgICAgICAgICAg KDB4MDFFMCkKLSNkZWZpbmUgRFNJX0RTSV9USU1JTkdfRkxVU0ggICAgICAgICAgICAgICAgICAg ICAgICgweDAxRTQpCi0jZGVmaW5lIERTSV9EU0lfVElNSU5HX0RCX01PREUgICAgICAgICAgICAg ICAgICAgICAoMHgwMUU4KQotI2RlZmluZSBEU0lfVFBHX0RNQV9GSUZPX1JFU0VUICAgICAgICAg ICAgICAgICAgICAgKDB4MDFFQykKLSNkZWZpbmUgRFNJX1NDUkFUQ0hfUkVHSVNURVJfMCAgICAg ICAgICAgICAgICAgICAgICgweDAxRjApCi0jZGVmaW5lIERTSV9WRVJTSU9OICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoMHgwMUY0KQotI2RlZmluZSBEU0lfU0NSQVRDSF9SRUdJU1RF Ul8xICAgICAgICAgICAgICAgICAgICAgKDB4MDFGOCkKLSNkZWZpbmUgRFNJX1NDUkFUQ0hfUkVH SVNURVJfMiAgICAgICAgICAgICAgICAgICAgICgweDAxRkMpCi0jZGVmaW5lIERTSV9EWU5BTUlD X1JFRlJFU0hfQ1RSTCAgICAgICAgICAgICAgICAgICAoMHgwMjAwKQotI2RlZmluZSBEU0lfRFlO QU1JQ19SRUZSRVNIX1BJUEVfREVMQVkgICAgICAgICAgICAgKDB4MDIwNCkKLSNkZWZpbmUgRFNJ X0RZTkFNSUNfUkVGUkVTSF9QSVBFX0RFTEFZMiAgICAgICAgICAgICgweDAyMDgpCi0jZGVmaW5l IERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0RFTEFZICAgICAgICAgICAgICAoMHgwMjBDKQotI2Rl ZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1NUQVRVUyAgICAgICAgICAgICAgICAgKDB4MDIxMCkK LSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDAgICAgICAgICAgICAgICgweDAy MTQpCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkwxICAgICAgICAgICAgICAo MHgwMjE4KQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMMiAgICAgICAgICAg ICAgKDB4MDIxQykKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDMgICAgICAg ICAgICAgICgweDAyMjApCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkw0ICAg ICAgICAgICAgICAoMHgwMjI0KQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJM NSAgICAgICAgICAgICAgKDB4MDIyOCkKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExf Q1RSTDYgICAgICAgICAgICAgICgweDAyMkMpCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hf UExMX0NUUkw3ICAgICAgICAgICAgICAoMHgwMjMwKQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZS RVNIX1BMTF9DVFJMOCAgICAgICAgICAgICAgKDB4MDIzNCkKLSNkZWZpbmUgRFNJX0RZTkFNSUNf UkVGUkVTSF9QTExfQ1RSTDkgICAgICAgICAgICAgICgweDAyMzgpCi0jZGVmaW5lIERTSV9EWU5B TUlDX1JFRlJFU0hfUExMX0NUUkwxMCAgICAgICAgICAgICAoMHgwMjNDKQotI2RlZmluZSBEU0lf RFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMMTEgICAgICAgICAgICAgKDB4MDI0MCkKLSNkZWZpbmUg RFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDEyICAgICAgICAgICAgICgweDAyNDQpCi0jZGVm aW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkwxMyAgICAgICAgICAgICAoMHgwMjQ4KQot I2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMMTQgICAgICAgICAgICAgKDB4MDI0 QykKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDE1ICAgICAgICAgICAgICgw eDAyNTApCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkwxNiAgICAgICAgICAg ICAoMHgwMjU0KQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMMTcgICAgICAg ICAgICAgKDB4MDI1OCkKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDE4ICAg ICAgICAgICAgICgweDAyNUMpCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkwx OSAgICAgICAgICAgICAoMHgwMjYwKQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9D VFJMMjAgICAgICAgICAgICAgKDB4MDI2NCkKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9Q TExfQ1RSTDIxICAgICAgICAgICAgICgweDAyNjgpCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJF U0hfUExMX0NUUkwyMiAgICAgICAgICAgICAoMHgwMjZDKQotI2RlZmluZSBEU0lfRFlOQU1JQ19S RUZSRVNIX1BMTF9DVFJMMjMgICAgICAgICAgICAgKDB4MDI3MCkKLSNkZWZpbmUgRFNJX0RZTkFN SUNfUkVGUkVTSF9QTExfQ1RSTDI0ICAgICAgICAgICAgICgweDAyNzQpCi0jZGVmaW5lIERTSV9E WU5BTUlDX1JFRlJFU0hfUExMX0NUUkwyNSAgICAgICAgICAgICAoMHgwMjc4KQotI2RlZmluZSBE U0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMMjYgICAgICAgICAgICAgKDB4MDI3QykKLSNkZWZp bmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDI3ICAgICAgICAgICAgICgweDAyODApCi0j ZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkwyOCAgICAgICAgICAgICAoMHgwMjg0 KQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMMjkgICAgICAgICAgICAgKDB4 MDI4OCkKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDMwICAgICAgICAgICAg ICgweDAyOEMpCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkwzMSAgICAgICAg ICAgICAoMHgwMjkwKQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9VUFBFUl9BRERS ICAgICAgICAgKDB4MDI5NCkKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfVVBQRVJf QUREUjIgICAgICAgICgweDAyOTgpCi0jZGVmaW5lIERTSV9WSURFT19DT01QUkVTU0lPTl9NT0RF X0NUUkwgICAgICAgICAgICAoMHgwMkEwKQotI2RlZmluZSBEU0lfVklERU9fQ09NUFJFU1NJT05f TU9ERV9DVFJMMiAgICAgICAgICAgKDB4MDJBNCkKLSNkZWZpbmUgRFNJX0NPTU1BTkRfQ09NUFJF U1NJT05fTU9ERV9DVFJMICAgICAgICAgICgweDAyQTgpCi0jZGVmaW5lIERTSV9DT01NQU5EX0NP TVBSRVNTSU9OX01PREVfQ1RSTDIgICAgICAgICAoMHgwMkFDKQotI2RlZmluZSBEU0lfQ09NTUFO RF9DT01QUkVTU0lPTl9NT0RFX0NUUkwzICAgICAgICAgKDB4MDJCMCkKLSNkZWZpbmUgRFNJX0NP TU1BTkRfTU9ERV9OVUxMX0lOU0VSVElPTl9DVFJMICAgICAgICgweDAyQjQpCi0jZGVmaW5lIERT SV9SRUFEX0JBQ0tfRElTQUJMRV9TVEFUVVMgICAgICAgICAgICAgICAoMHgwMkI4KQotI2RlZmlu ZSBEU0lfREVTS0VXX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDJCQykKLSNk ZWZpbmUgRFNJX0RFU0tFV19ERUxBWV9DVFJMICAgICAgICAgICAgICAgICAgICAgICgweDAyQzAp Ci0jZGVmaW5lIERTSV9ERVNLRVdfU1dfVFJJR0dFUiAgICAgICAgICAgICAgICAgICAgICAoMHgw MkM0KQotI2RlZmluZSBEU0lfREVCVUdfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KDB4MDJDOCkKLSNkZWZpbmUgRFNJX1NFQ1VSRV9ESVNQTEFZX1NUQVRVUyAgICAgICAgICAgICAg ICAgICgweDAyQ0MpCi0jZGVmaW5lIERTSV9TRUNVUkVfRElTUExBWV9CTE9DS19DT01NQU5EX0NP TE9SICAgICAoMHgwMkQwKQotI2RlZmluZSBEU0lfU0VDVVJFX0RJU1BMQVlfQkxPQ0tfVklERU9f Q09MT1IgICAgICAgKDB4MDJENCkKLSNkZWZpbmUgRFNJX0xPR0lDQUxfTEFORV9TV0FQX0NUUkwg ICAgICAgICAgICAgICAgICgweDAzMTApCi0KLQotI2VuZGlmIC8qIF9EU0lfQ1RSTF9SRUdfSF8g Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2RlZnMu aCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2RlZnMuaApkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDJjOGQ3Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kZWZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NzkgKzAs MCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5k Ci0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpZm5kZWYgX0RTSV9E RUZTX0hfCi0jZGVmaW5lIF9EU0lfREVGU19IXwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4K LSNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+Ci0jaW5jbHVkZSAibXNtX2Rydi5oIgotCi0j ZGVmaW5lIERTSV9IX1RPVEFMKHQpICgoKHQpLT5oX2FjdGl2ZSkgKyAoKHQpLT5oX2JhY2tfcG9y Y2gpICsgXAotCQkJKCh0KS0+aF9zeW5jX3dpZHRoKSArICgodCktPmhfZnJvbnRfcG9yY2gpKQot Ci0jZGVmaW5lIERTSV9WX1RPVEFMKHQpICgoKHQpLT52X2FjdGl2ZSkgKyAoKHQpLT52X2JhY2tf cG9yY2gpICsgXAotCQkJKCh0KS0+dl9zeW5jX3dpZHRoKSArICgodCktPnZfZnJvbnRfcG9yY2gp KQotCi0jZGVmaW5lIERTSV9IX1RPVEFMX0RTQyh0KSBcCi0JKHtcCi0JCXU2NCB2YWx1ZTtcCi0J CWlmICgodCktPmRzY19lbmFibGVkICYmICh0KS0+ZHNjKVwKLQkJCXZhbHVlID0gKHQpLT5kc2Mt PnBjbGtfcGVyX2xpbmU7XAotCQllbHNlXAotCQkJdmFsdWUgPSAodCktPmhfYWN0aXZlO1wKLQkJ dmFsdWUgPSB2YWx1ZSArICh0KS0+aF9iYWNrX3BvcmNoICsgKHQpLT5oX3N5bmNfd2lkdGggK1wK LQkJCSh0KS0+aF9mcm9udF9wb3JjaDtcCi0JCXZhbHVlO1wKLQl9KQotCi0jZGVmaW5lIERTSV9E RUJVR19OQU1FX0xFTgkJMzIKLS8qKgotICogZW51bSBkc2lfcGl4ZWxfZm9ybWF0IC0gRFNJIHBp eGVsIGZvcm1hdHMKLSAqIEBEU0lfUElYRUxfRk9STUFUX1JHQjU2NToKLSAqIEBEU0lfUElYRUxf Rk9STUFUX1JHQjY2NjoKLSAqIEBEU0lfUElYRUxfRk9STUFUX1JHQjY2Nl9MT09TRToKLSAqIEBE U0lfUElYRUxfRk9STUFUX1JHQjg4ODoKLSAqIEBEU0lfUElYRUxfRk9STUFUX1JHQjExMToKLSAq IEBEU0lfUElYRUxfRk9STUFUX1JHQjMzMjoKLSAqIEBEU0lfUElYRUxfRk9STUFUX1JHQjQ0NDoK LSAqIEBEU0lfUElYRUxfRk9STUFUX01BWDoKLSAqLwotZW51bSBkc2lfcGl4ZWxfZm9ybWF0IHsK LQlEU0lfUElYRUxfRk9STUFUX1JHQjU2NSA9IDAsCi0JRFNJX1BJWEVMX0ZPUk1BVF9SR0I2NjYs Ci0JRFNJX1BJWEVMX0ZPUk1BVF9SR0I2NjZfTE9PU0UsCi0JRFNJX1BJWEVMX0ZPUk1BVF9SR0I4 ODgsCi0JRFNJX1BJWEVMX0ZPUk1BVF9SR0IxMTEsCi0JRFNJX1BJWEVMX0ZPUk1BVF9SR0IzMzIs Ci0JRFNJX1BJWEVMX0ZPUk1BVF9SR0I0NDQsCi0JRFNJX1BJWEVMX0ZPUk1BVF9NQVgKLX07Ci0K LS8qKgotICogZW51bSBkc2lfb3BfbW9kZSAtIGRzaSBvcGVyYXRpb24gbW9kZQotICogQERTSV9P UF9WSURFT19NT0RFOiBEU0kgdmlkZW8gbW9kZSBvcGVyYXRpb24KLSAqIEBEU0lfT1BfQ01EX01P REU6ICAgRFNJIENvbW1hbmQgbW9kZSBvcGVyYXRpb24KLSAqIEBEU0lfT1BfTU9ERV9NQVg6Ci0g Ki8KLWVudW0gZHNpX29wX21vZGUgewotCURTSV9PUF9WSURFT19NT0RFID0gMCwKLQlEU0lfT1Bf Q01EX01PREUsCi0JRFNJX09QX01PREVfTUFYCi19OwotCi0vKioKLSAqIGVudW0gZHNpX21vZGVf ZmxhZ3MgLSBmbGFncyB0byBzaWduYWwgb3RoZXIgZHJtIGNvbXBvbmVudHMgdmlhIHByaXZhdGUg ZmxhZ3MKLSAqIEBEU0lfTU9ERV9GTEFHX1NFQU1MRVNTOglTZWFtbGVzcyB0cmFuc2l0aW9uIHJl cXVlc3RlZCBieSB1c2VyCi0gKiBARFNJX01PREVfRkxBR19ERlBTOgkJU2VhbWxlc3MgdHJhbnNp dGlvbiBpcyBEeW5hbWljRlBTCi0gKiBARFNJX01PREVfRkxBR19WQkxBTktfUFJFX01PREVTRVQ6 CVRyYW5zaXRpb24gbmVlZHMgVkJMQU5LIGJlZm9yZSBNb2Rlc2V0Ci0gKiBARFNJX01PREVfRkxB R19ETVM6IFNlYW1sZXNzIHRyYW5zaXRpb24gaXMgZHluYW1pYyBtb2RlIHN3aXRjaAotICogQERT SV9NT0RFX0ZMQUdfVlJSOiBTZWFtbGVzcyB0cmFuc2l0aW9uIGlzIER5bmFtaWNGUFMuCi0gKiAg ICAgICAgICAgICAgICAgICAgIE5ldyB0aW1pbmcgdmFsdWVzIGFyZSBzZW50IGZyb20gREFMLgot ICovCi1lbnVtIGRzaV9tb2RlX2ZsYWdzIHsKLQlEU0lfTU9ERV9GTEFHX1NFQU1MRVNTCQkJPSBC SVQoMCksCi0JRFNJX01PREVfRkxBR19ERlBTCQkJPSBCSVQoMSksCi0JRFNJX01PREVfRkxBR19W QkxBTktfUFJFX01PREVTRVQJPSBCSVQoMiksCi0JRFNJX01PREVfRkxBR19ETVMJCQk9IEJJVCgz KSwKLQlEU0lfTU9ERV9GTEFHX1ZSUgkJCT0gQklUKDQpLAotfTsKLQotLyoqCi0gKiBlbnVtIGRz aV9sb2dpY2FsX2xhbmUgLSBkc2kgbG9naWNhbCBsYW5lcwotICogQERTSV9MT0dJQ0FMX0xBTkVf MDogICAgIExvZ2ljYWwgbGFuZSAwCi0gKiBARFNJX0xPR0lDQUxfTEFORV8xOiAgICAgTG9naWNh bCBsYW5lIDEKLSAqIEBEU0lfTE9HSUNBTF9MQU5FXzI6ICAgICBMb2dpY2FsIGxhbmUgMgotICog QERTSV9MT0dJQ0FMX0xBTkVfMzogICAgIExvZ2ljYWwgbGFuZSAzCi0gKiBARFNJX0xPR0lDQUxf Q0xPQ0tfTEFORTogQ2xvY2sgbGFuZQotICogQERTSV9MQU5FX01BWDogICAgICAgICAgIE1heGlt dW0gbGFuZXMgc3VwcG9ydGVkCi0gKi8KLWVudW0gZHNpX2xvZ2ljYWxfbGFuZSB7Ci0JRFNJX0xP R0lDQUxfTEFORV8wID0gMCwKLQlEU0lfTE9HSUNBTF9MQU5FXzEsCi0JRFNJX0xPR0lDQUxfTEFO RV8yLAotCURTSV9MT0dJQ0FMX0xBTkVfMywKLQlEU0lfTE9HSUNBTF9DTE9DS19MQU5FLAotCURT SV9MQU5FX01BWAotfTsKLQotLyoqCi0gKiBlbnVtIGRzaV9kYXRhX2xhbmVzIC0gQklUIG1hcCBm b3IgRFNJIGRhdGEgbGFuZXMKLSAqIFRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgYWN0aXZl IERTSSBkYXRhIGxhbmVzIGZvcgotICogdmFyaW91cyBvcGVyYXRpb25zIGxpa2UgRFNJIGRhdGEg bGFuZSBlbmFibGUvVUxQUy9jbGFtcAotICogY29uZmlndXJhdGlvbnMuCi0gKiBARFNJX0RBVEFf TEFORV8wOiBCSVQoRFNJX0xPR0lDQUxfTEFORV8wKQotICogQERTSV9EQVRBX0xBTkVfMTogQklU KERTSV9MT0dJQ0FMX0xBTkVfMSkKLSAqIEBEU0lfREFUQV9MQU5FXzI6IEJJVChEU0lfTE9HSUNB TF9MQU5FXzIpCi0gKiBARFNJX0RBVEFfTEFORV8zOiBCSVQoRFNJX0xPR0lDQUxfTEFORV8zKQot ICogQERTSV9DTE9DS19MQU5FOiAgQklUKERTSV9MT0dJQ0FMX0NMT0NLX0xBTkUpCi0gKi8KLWVu dW0gZHNpX2RhdGFfbGFuZXMgewotCURTSV9EQVRBX0xBTkVfMCA9IEJJVChEU0lfTE9HSUNBTF9M QU5FXzApLAotCURTSV9EQVRBX0xBTkVfMSA9IEJJVChEU0lfTE9HSUNBTF9MQU5FXzEpLAotCURT SV9EQVRBX0xBTkVfMiA9IEJJVChEU0lfTE9HSUNBTF9MQU5FXzIpLAotCURTSV9EQVRBX0xBTkVf MyA9IEJJVChEU0lfTE9HSUNBTF9MQU5FXzMpLAotCURTSV9DTE9DS19MQU5FICA9IEJJVChEU0lf TE9HSUNBTF9DTE9DS19MQU5FKQotfTsKLQotLyoqCi0gKiBlbnVtIGRzaV9waHlfZGF0YV9sYW5l cyAtIGRzaSBwaHlzaWNhbCBsYW5lcwotICogdXNlZCBmb3IgRFNJIGxvZ2ljYWwgdG8gcGh5c2lj YWwgbGFuZSBtYXBwaW5nCi0gKiBARFNJX1BIWVNJQ0FMX0xBTkVfSU5WQUxJRDogUGh5c2ljYWwg bGFuZSB2YWxpZC9pbnZhbGlkCi0gKiBARFNJX1BIWVNJQ0FMX0xBTkVfMDogUGh5c2ljYWwgbGFu ZSAwCi0gKiBARFNJX1BIWVNJQ0FMX0xBTkVfMTogUGh5c2ljYWwgbGFuZSAxCi0gKiBARFNJX1BI WVNJQ0FMX0xBTkVfMjogUGh5c2ljYWwgbGFuZSAyCi0gKiBARFNJX1BIWVNJQ0FMX0xBTkVfMzog UGh5c2ljYWwgbGFuZSAzCi0gKi8KLWVudW0gZHNpX3BoeV9kYXRhX2xhbmVzIHsKLQlEU0lfUEhZ U0lDQUxfTEFORV9JTlZBTElEID0gMCwKLQlEU0lfUEhZU0lDQUxfTEFORV8wID0gQklUKDApLAot CURTSV9QSFlTSUNBTF9MQU5FXzEgPSBCSVQoMSksCi0JRFNJX1BIWVNJQ0FMX0xBTkVfMiA9IEJJ VCgyKSwKLQlEU0lfUEhZU0lDQUxfTEFORV8zICA9IEJJVCgzKQotfTsKLQotZW51bSBkc2lfbGFu ZV9tYXBfdHlwZV92MSB7Ci0JRFNJX0xBTkVfTUFQXzAxMjMsCi0JRFNJX0xBTkVfTUFQXzMwMTIs Ci0JRFNJX0xBTkVfTUFQXzIzMDEsCi0JRFNJX0xBTkVfTUFQXzEyMzAsCi0JRFNJX0xBTkVfTUFQ XzAzMjEsCi0JRFNJX0xBTkVfTUFQXzEwMzIsCi0JRFNJX0xBTkVfTUFQXzIxMDMsCi0JRFNJX0xB TkVfTUFQXzMyMTAsCi19OwotCi0vKioKLSAqIGxhbmVfbWFwOiBEU0kgbG9naWNhbCA8LT4gcGh5 c2ljYWwgbGFuZSBtYXBwaW5nCi0gKiBsYW5lX21hcF92MTogTGFuZSBtYXBwaW5nIGZvciBEU0kg Y29udHJvbGxlcnMgPCB2Mi4wCi0gKiBsYW5lX21hcF92MjogTGFuZSBtYXBwaW5nIGZvciBEU0kg Y29udHJvbGxlcnMgPj0gMi4wCi0gKi8KLXN0cnVjdCBkc2lfbGFuZV9tYXAgewotCWVudW0gZHNp X2xhbmVfbWFwX3R5cGVfdjEgbGFuZV9tYXBfdjE7Ci0JdTggbGFuZV9tYXBfdjJbRFNJX0xBTkVf TUFYIC0gMV07Ci19OwotCi0vKioKLSAqIGVudW0gZHNpX3RyaWdnZXJfdHlwZSAtIGRzaSB0cmln Z2VyIHR5cGUKLSAqIEBEU0lfVFJJR0dFUl9OT05FOiAgICAgTm8gdHJpZ2dlci4KLSAqIEBEU0lf VFJJR0dFUl9URTogICAgICAgVEUgdHJpZ2dlci4KLSAqIEBEU0lfVFJJR0dFUl9TRU9GOiAgICAg U3RhcnQgb3IgRW5kIG9mIGZyYW1lLgotICogQERTSV9UUklHR0VSX1NXOiAgICAgICBTb2Z0d2Fy ZSB0cmlnZ2VyLgotICogQERTSV9UUklHR0VSX1NXX1NFT0Y6ICBTb2Z0d2FyZSB0cmlnZ2VyIGFu ZCBzdGFydC9lbmQgb2YgZnJhbWUuCi0gKiBARFNJX1RSSUdHRVJfU1dfVEU6ICAgIFNvZnR3YXJl IGFuZCBURSB0cmlnZ2Vycy4KLSAqIEBEU0lfVFJJR0dFUl9NQVg6ICAgICAgTWF4IHRyaWdnZXIg dmFsdWVzLgotICovCi1lbnVtIGRzaV90cmlnZ2VyX3R5cGUgewotCURTSV9UUklHR0VSX05PTkUg PSAwLAotCURTSV9UUklHR0VSX1RFLAotCURTSV9UUklHR0VSX1NFT0YsCi0JRFNJX1RSSUdHRVJf U1csCi0JRFNJX1RSSUdHRVJfU1dfU0VPRiwKLQlEU0lfVFJJR0dFUl9TV19URSwKLQlEU0lfVFJJ R0dFUl9NQVgKLX07Ci0KLS8qKgotICogZW51bSBkc2lfY29sb3Jfc3dhcF9tb2RlIC0gY29sb3Ig c3dhcCBtb2RlCi0gKiBARFNJX0NPTE9SX1NXQVBfUkdCOgotICogQERTSV9DT0xPUl9TV0FQX1JC RzoKLSAqIEBEU0lfQ09MT1JfU1dBUF9CR1I6Ci0gKiBARFNJX0NPTE9SX1NXQVBfQlJHOgotICog QERTSV9DT0xPUl9TV0FQX0dSQjoKLSAqIEBEU0lfQ09MT1JfU1dBUF9HQlI6Ci0gKi8KLWVudW0g ZHNpX2NvbG9yX3N3YXBfbW9kZSB7Ci0JRFNJX0NPTE9SX1NXQVBfUkdCID0gMCwKLQlEU0lfQ09M T1JfU1dBUF9SQkcsCi0JRFNJX0NPTE9SX1NXQVBfQkdSLAotCURTSV9DT0xPUl9TV0FQX0JSRywK LQlEU0lfQ09MT1JfU1dBUF9HUkIsCi0JRFNJX0NPTE9SX1NXQVBfR0JSCi19OwotCi0vKioKLSAq IGVudW0gZHNpX2RmcHNfdHlwZSAtIER5bmFtaWMgRlBTIHN1cHBvcnQgdHlwZQotICogQERTSV9E RlBTX05PTkU6ICAgICAgICAgICBEeW5hbWljIEZQUyBpcyBub3Qgc3VwcG9ydGVkLgotICogQERT SV9ERlBTX1NVU1BFTkRfUkVTVU1FOgotICogQERTSV9ERlBTX0lNTUVESUFURV9DTEs6Ci0gKiBA RFNJX0RGUFNfSU1NRURJQVRFX0hGUDoKLSAqIEBEU0lfREZQU19JTU1FRElBVEVfVkZQOgotICog QERTSV9EUEZTX01BWDoKLSAqLwotZW51bSBkc2lfZGZwc190eXBlIHsKLQlEU0lfREZQU19OT05F ID0gMCwKLQlEU0lfREZQU19TVVNQRU5EX1JFU1VNRSwKLQlEU0lfREZQU19JTU1FRElBVEVfQ0xL LAotCURTSV9ERlBTX0lNTUVESUFURV9IRlAsCi0JRFNJX0RGUFNfSU1NRURJQVRFX1ZGUCwKLQlE U0lfREZQU19NQVgKLX07Ci0KLS8qKgotICogZW51bSBkc2lfY21kX3NldF90eXBlICAtIERTSSBj b21tYW5kIHNldCB0eXBlCi0gKiBARFNJX0NNRF9TRVRfUFJFX09OOgkgICAgICAgICAgICAgICAg ICAgUGFuZWwgcHJlIG9uCi0gKiBARFNJX0NNRF9TRVRfT046ICAgICAgICAgICAgICAgICAgICAg ICAgUGFuZWwgb24KLSAqIEBEU0lfQ01EX1NFVF9QT1NUX09OOiAgICAgICAgICAgICAgICAgICBQ YW5lbCBwb3N0IG9uCi0gKiBARFNJX0NNRF9TRVRfUFJFX09GRjogICAgICAgICAgICAgICAgICAg UGFuZWwgcHJlIG9mZgotICogQERTSV9DTURfU0VUX09GRjogICAgICAgICAgICAgICAgICAgICAg IFBhbmVsIG9mZgotICogQERTSV9DTURfU0VUX1BPU1RfT0ZGOiAgICAgICAgICAgICAgICAgIFBh bmVsIHBvc3Qgb2ZmCi0gKiBARFNJX0NNRF9TRVRfUFJFX1JFU19TV0lUQ0g6ICAgICAgICAgICAg UHJlIHJlc29sdXRpb24gc3dpdGNoCi0gKiBARFNJX0NNRF9TRVRfUkVTX1NXSVRDSDogICAgICAg ICAgICAgICAgUmVzb2x1dGlvbiBzd2l0Y2gKLSAqIEBEU0lfQ01EX1NFVF9QT1NUX1JFU19TV0lU Q0g6ICAgICAgICAgICBQb3N0IHJlc29sdXRpb24gc3dpdGNoCi0gKiBARFNJX0NNRF9TRVRfQ01E X1RPX1ZJRF9TV0lUQ0g6ICAgICAgICAgQ21kIHRvIHZpZGVvIG1vZGUgc3dpdGNoCi0gKiBARFNJ X0NNRF9TRVRfUE9TVF9DTURfVE9fVklEX1NXSVRDSDogICAgUG9zdCBjbWQgdG8gdmlkIHN3aXRj aAotICogQERTSV9DTURfU0VUX1ZJRF9UT19DTURfU1dJVENIOiAgICAgICAgIFZpZGVvIHRvIGNt ZCBtb2RlIHN3aXRjaAotICogQERTSV9DTURfU0VUX1BPU1RfVklEX1RPX0NNRF9TV0lUQ0g6ICAg IFBvc3QgdmlkIHRvIGNtZCBzd2l0Y2gKLSAqIEBEU0lfQ01EX1NFVF9QQU5FTF9TVEFUVVM6ICAg ICAgICAgICAgICBQYW5lbCBzdGF0dXMKLSAqIEBEU0lfQ01EX1NFVF9MUDE6ICAgICAgICAgICAg ICAgICAgICAgICBMb3cgcG93ZXIgbW9kZSAxCi0gKiBARFNJX0NNRF9TRVRfTFAyOiAgICAgICAg ICAgICAgICAgICAgICAgTG93IHBvd2VyIG1vZGUgMgotICogQERTSV9DTURfU0VUX05PTFA6ICAg ICAgICAgICAgICAgICAgICAgIExvdyBwb3dlciBtb2RlIGRpc2FibGUKLSAqIEBEU0lfQ01EX1NF VF9QUFM6ICAgICAgICAgICAgICAgICAgICAgICBEU0MgUFBTIGNvbW1hbmQKLSAqIEBEU0lfQ01E X1NFVF9USU1JTkdfU1dJVENIOiAgICAgICAgICAgICBUaW1pbmcgc3dpdGNoCi0gKiBARFNJX0NN RF9TRVRfUE9TVF9USU1JTkdfU1dJVENIOiAgICAgICAgUG9zdCB0aW1pbmcgc3dpdGNoCi0gKiBA RFNJX0NNRF9TRVRfTUFYCi0gKi8KLWVudW0gZHNpX2NtZF9zZXRfdHlwZSB7Ci0JRFNJX0NNRF9T RVRfUFJFX09OID0gMCwKLQlEU0lfQ01EX1NFVF9PTiwKLQlEU0lfQ01EX1NFVF9QT1NUX09OLAot CURTSV9DTURfU0VUX1BSRV9PRkYsCi0JRFNJX0NNRF9TRVRfT0ZGLAotCURTSV9DTURfU0VUX1BP U1RfT0ZGLAotCURTSV9DTURfU0VUX1BSRV9SRVNfU1dJVENILAotCURTSV9DTURfU0VUX1JFU19T V0lUQ0gsCi0JRFNJX0NNRF9TRVRfUE9TVF9SRVNfU1dJVENILAotCURTSV9DTURfU0VUX0NNRF9U T19WSURfU1dJVENILAotCURTSV9DTURfU0VUX1BPU1RfQ01EX1RPX1ZJRF9TV0lUQ0gsCi0JRFNJ X0NNRF9TRVRfVklEX1RPX0NNRF9TV0lUQ0gsCi0JRFNJX0NNRF9TRVRfUE9TVF9WSURfVE9fQ01E X1NXSVRDSCwKLQlEU0lfQ01EX1NFVF9QQU5FTF9TVEFUVVMsCi0JRFNJX0NNRF9TRVRfTFAxLAot CURTSV9DTURfU0VUX0xQMiwKLQlEU0lfQ01EX1NFVF9OT0xQLAotCURTSV9DTURfU0VUX1BQUywK LQlEU0lfQ01EX1NFVF9USU1JTkdfU1dJVENILAotCURTSV9DTURfU0VUX1BPU1RfVElNSU5HX1NX SVRDSCwKLQlEU0lfQ01EX1NFVF9NQVgKLX07Ci0KLS8qKgotICogZW51bSBkc2lfY21kX3NldF9z dGF0ZSAtIGNvbW1hbmQgc2V0IHN0YXRlCi0gKiBARFNJX0NNRF9TRVRfU1RBVEVfTFA6ICAgZHNp IGxvdyBwb3dlciBtb2RlCi0gKiBARFNJX0NNRF9TRVRfU1RBVEVfSFM6ICAgZHNpIGhpZ2ggc3Bl ZWQgbW9kZQotICogQERTSV9DTURfU0VUX1NUQVRFX01BWAotICovCi1lbnVtIGRzaV9jbWRfc2V0 X3N0YXRlIHsKLQlEU0lfQ01EX1NFVF9TVEFURV9MUCA9IDAsCi0JRFNJX0NNRF9TRVRfU1RBVEVf SFMsCi0JRFNJX0NNRF9TRVRfU1RBVEVfTUFYCi19OwotCi0vKioKLSAqIGVudW0gZHNpX3BoeV90 eXBlIC0gRFNJIHBoeSB0eXBlcwotICogQERTSV9QSFlfVFlQRV9EUEhZOgotICogQERTSV9QSFlf VFlQRV9DUEhZOgotICovCi1lbnVtIGRzaV9waHlfdHlwZSB7Ci0JRFNJX1BIWV9UWVBFX0RQSFks Ci0JRFNJX1BIWV9UWVBFX0NQSFkKLX07Ci0KLS8qKgotICogZW51bSBkc2lfdGVfbW9kZSAtIGRz aSB0ZSBzb3VyY2UKLSAqIEBEU0lfVEVfT05fREFUQV9MSU5LOiAgICBURSByZWFkIGZyb20gRFNJ IGxpbmsKLSAqIEBEU0lfVEVfT05fRVhUX1BJTjogICAgICBURSBzaWduYWwgb24gYW4gZXh0ZXJu YWwgR1BJTwotICovCi1lbnVtIGRzaV90ZV9tb2RlIHsKLQlEU0lfVEVfT05fREFUQV9MSU5LID0g MCwKLQlEU0lfVEVfT05fRVhUX1BJTiwKLX07Ci0KLS8qKgotICogZW51bSBkc2lfdmlkZW9fdHJh ZmZpY19tb2RlIC0gdmlkZW8gbW9kZSBwaXhlbCB0cmFuc21pc3Npb24gdHlwZQotICogQERTSV9W SURFT19UUkFGRklDX1NZTkNfUFVMU0VTOiAgICAgICBOb24tYnVyc3QgbW9kZSB3aXRoIHN5bmMg cHVsc2VzLgotICogQERTSV9WSURFT19UUkFGRklDX1NZTkNfU1RBUlRfRVZFTlRTOiBOb24tYnVy c3QgbW9kZSB3aXRoIHN5bmMgc3RhcnQgZXZlbnRzLgotICogQERTSV9WSURFT19UUkFGRklDX0JV UlNUX01PREU6ICAgICAgICBCdXJzdCBtb2RlIHVzaW5nIHN5bmMgc3RhcnQgZXZlbnRzLgotICov Ci1lbnVtIGRzaV92aWRlb190cmFmZmljX21vZGUgewotCURTSV9WSURFT19UUkFGRklDX1NZTkNf UFVMU0VTID0gMCwKLQlEU0lfVklERU9fVFJBRkZJQ19TWU5DX1NUQVJUX0VWRU5UUywKLQlEU0lf VklERU9fVFJBRkZJQ19CVVJTVF9NT0RFLAotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX2NtZF9k ZXNjIC0gZGVzY3JpcHRpb24gb2YgYSBkc2kgY29tbWFuZAotICogQG1zZzoJCWRzaSBtaXBpIG1z ZyBwYWNrZXQKLSAqIEBsYXN0X2NvbW1hbmQ6ICAgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNtZCBp cyB0aGUgbGFzdCBvbmUgdG8gc2VuZAotICogQHBvc3Rfd2FpdF9tczogICBwb3N0IHdhaXQgZHVy YXRpb24KLSAqLwotc3RydWN0IGRzaV9jbWRfZGVzYyB7Ci0Jc3RydWN0IG1pcGlfZHNpX21zZyBt c2c7Ci0JYm9vbCBsYXN0X2NvbW1hbmQ7Ci0JdTMyICBwb3N0X3dhaXRfbXM7Ci19OwotCi0vKioK LSAqIHN0cnVjdCBkc2lfcGFuZWxfY21kX3NldCAtIGNvbW1hbmQgc2V0IG9mIHRoZSBwYW5lbAot ICogQHR5cGU6ICAgICAgdHlwZSBvZiB0aGUgY29tbWFuZAotICogQHN0YXRlOiAgICAgc3RhdGUg b2YgdGhlIGNvbW1hbmQKLSAqIEBjb3VudDogICAgIG51bWJlciBvZiBjbWRzCi0gKiBAY3RybF9p ZHg6ICBpbmRleCBvZiB0aGUgZHNpIGNvbnRyb2wKLSAqIEBjbWRzOiAgICAgIGFycnkgb2YgY21k cwotICovCi1zdHJ1Y3QgZHNpX3BhbmVsX2NtZF9zZXQgewotCWVudW0gZHNpX2NtZF9zZXRfdHlw ZSB0eXBlOwotCWVudW0gZHNpX2NtZF9zZXRfc3RhdGUgc3RhdGU7Ci0JdTMyIGNvdW50OwotCXUz MiBjdHJsX2lkeDsKLQlzdHJ1Y3QgZHNpX2NtZF9kZXNjICpjbWRzOwotfTsKLQotLyoqCi0gKiBz dHJ1Y3QgZHNpX21vZGVfaW5mbyAtIHZpZGVvIG1vZGUgaW5mb3JtYXRpb24gZHNpIGZyYW1lCi0g KiBAaF9hY3RpdmU6ICAgICAgICAgQWN0aXZlIHdpZHRoIG9mIG9uZSBmcmFtZSBpbiBwaXhlbHMu Ci0gKiBAaF9iYWNrX3BvcmNoOiAgICAgSG9yaXpvbnRhbCBiYWNrIHBvcmNoIGluIHBpeGVscy4K LSAqIEBoX3N5bmNfd2lkdGg6ICAgICBIU1lOQyB3aWR0aCBpbiBwaXhlbHMuCi0gKiBAaF9mcm9u dF9wb3JjaDogICAgSG9yaXpvbnRhbCBmcm9uIHBvcmNoIGluIHBpeGVscy4KLSAqIEBoX3NrZXc6 Ci0gKiBAaF9zeW5jX3BvbGFyaXR5OiAgUG9sYXJpdHkgb2YgSFNZTkMgKGZhbHNlIGlzIGFjdGl2 ZSBsb3cpLgotICogQHZfYWN0aXZlOiAgICAgICAgIEFjdGl2ZSBoZWlnaHQgb2Ygb25lIGZyYW1l IGluIGxpbmVzLgotICogQHZfYmFja19wb3JjaDogICAgIFZlcnRpY2FsIGJhY2sgcG9yY2ggaW4g bGluZXMuCi0gKiBAdl9zeW5jX3dpZHRoOiAgICAgVlNZTkMgd2lkdGggaW4gbGluZXMuCi0gKiBA dl9mcm9udF9wb3JjaDogICAgVmVydGljYWwgZnJvbnQgcG9yY2ggaW4gbGluZXMuCi0gKiBAdl9z eW5jX3BvbGFyaXR5OiAgUG9sYXJpdHkgb2YgVlNZTkMgKGZhbHNlIGlzIGFjdGl2ZSBsb3cpLgot ICogQHJlZnJlc2hfcmF0ZTogICAgIFJlZnJlc2ggcmF0ZSBpbiBIei4KLSAqIEBkc2NfZW5hYmxl ZDogICAgICBEU0MgY29tcHJlc3Npb24gZW5hYmxlZC4KLSAqIEBkc2M6ICAgICAgICAgICAgICBE U0MgY29tcHJlc3Npb24gY29uZmlndXJhdGlvbi4KLSAqLwotc3RydWN0IGRzaV9tb2RlX2luZm8g ewotCXUzMiBoX2FjdGl2ZTsKLQl1MzIgaF9iYWNrX3BvcmNoOwotCXUzMiBoX3N5bmNfd2lkdGg7 Ci0JdTMyIGhfZnJvbnRfcG9yY2g7Ci0JdTMyIGhfc2tldzsKLQlib29sIGhfc3luY19wb2xhcml0 eTsKLQotCXUzMiB2X2FjdGl2ZTsKLQl1MzIgdl9iYWNrX3BvcmNoOwotCXUzMiB2X3N5bmNfd2lk dGg7Ci0JdTMyIHZfZnJvbnRfcG9yY2g7Ci0JYm9vbCB2X3N5bmNfcG9sYXJpdHk7Ci0KLQl1MzIg cmVmcmVzaF9yYXRlOwotCi0JYm9vbCBkc2NfZW5hYmxlZDsKLQlzdHJ1Y3QgbXNtX2Rpc3BsYXlf ZHNjX2luZm8gKmRzYzsKLX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9ob3N0X2NvbW1vbl9jZmcg LSBIb3N0IGNvbmZpZ3VyYXRpb24gY29tbW9uIHRvIHZpZGVvIGFuZCBjbWQgbW9kZQotICogQGRz dF9mb3JtYXQ6ICAgICAgICAgIERlc3RpbmF0aW9uIHBpeGVsIGZvcm1hdC4KLSAqIEBkYXRhX2xh bmVzOiAgICAgICAgICBQaHlzaWNhbCBkYXRhIGxhbmVzIHRvIGJlIGVuYWJsZWQuCi0gKiBAZW5f Y3JjX2NoZWNrOiAgICAgICAgRW5hYmxlIENSQyBjaGVja3MuCi0gKiBAZW5fZWNjX2NoZWNrOiAg ICAgICAgRW5hYmxlIEVDQyBjaGVja3MuCi0gKiBAdGVfbW9kZTogICAgICAgICAgICAgU291cmNl IGZvciBURSBzaWduYWxsaW5nLgotICogQG1kcF9jbWRfdHJpZ2dlcjogICAgIE1EUCBmcmFtZSB1 cGRhdGUgdHJpZ2dlciBmb3IgY29tbWFuZCBtb2RlLgotICogQGRtYV9jbWRfdHJpZ2dlcjogICAg IENvbW1hbmQgRE1BIHRyaWdnZXIuCi0gKiBAY21kX3RyaWdnZXJfc3RyZWFtOiAgQ29tbWFuZCBt b2RlIHN0cmVhbSB0byB0cmlnZ2VyLgotICogQHN3YXBfbW9kZTogICAgICAgICAgIERTSSBjb2xv ciBzd2FwIG1vZGUuCi0gKiBAYml0X3N3YXBfcmVhZDogICAgICAgSXMgcmVkIGNvbG9yIGJpdCBz d2FwcGVkLgotICogQGJpdF9zd2FwX2dyZWVuOiAgICAgIElzIGdyZWVuIGNvbG9yIGJpdCBzd2Fw cGVkLgotICogQGJpdF9zd2FwX2JsdWU6ICAgICAgIElzIGJsdWUgY29sb3IgYml0IHN3YXBwZWQu Ci0gKiBAdF9jbGtfcG9zdDogICAgICAgICAgTnVtYmVyIG9mIGJ5dGUgY2xvY2sgY3ljbGVzIHRo YXQgdGhlIHRyYW5zbWl0dGVyIHNoYWxsCi0gKiAgICAgICAgICAgICAgICAgICAgICAgY29udGlu dWUgc2VuZGluZyBhZnRlciBsYXN0IGRhdGEgbGFuZSBoYXMgdHJhbnNpdGlvbmVkCi0gKiAgICAg ICAgICAgICAgICAgICAgICAgdG8gTFAgbW9kZS4KLSAqIEB0X2Nsa19wcmU6ICAgICAgICAgICBO dW1iZXIgb2YgYnl0ZSBjbG9jayBjeWNsZXMgdGhhdCB0aGUgaGlnaCBzcHBlZCBjbG9jawotICog ICAgICAgICAgICAgICAgICAgICAgIHNoYWxsIGJlIGRyaXZlbiBwcmlvciB0byBkYXRhIGxhbmUg dHJhbnNpdGlvbnMgZnJvbSBMUAotICogICAgICAgICAgICAgICAgICAgICAgIHRvIEhTIG1vZGUu Ci0gKiBAaWdub3JlX3J4X2VvdDogICAgICAgSWdub3JlIFJ4IEVPVCBwYWNrZXRzIGlmIHNldCB0 byB0cnVlLgotICogQGFwcGVuZF90eF9lb3Q6ICAgICAgIEFwcGVuZCBFT1QgcGFja2V0cyBmb3Ig Zm9yd2FyZCB0cmFuc21pc3Npb25zIGlmIHNldCB0bwotICogICAgICAgICAgICAgICAgICAgICAg IHRydWUuCi0gKi8KLXN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnIHsKLQllbnVtIGRzaV9waXhl bF9mb3JtYXQgZHN0X2Zvcm1hdDsKLQllbnVtIGRzaV9kYXRhX2xhbmVzIGRhdGFfbGFuZXM7Ci0J Ym9vbCBlbl9jcmNfY2hlY2s7Ci0JYm9vbCBlbl9lY2NfY2hlY2s7Ci0JZW51bSBkc2lfdGVfbW9k ZSB0ZV9tb2RlOwotCWVudW0gZHNpX3RyaWdnZXJfdHlwZSBtZHBfY21kX3RyaWdnZXI7Ci0JZW51 bSBkc2lfdHJpZ2dlcl90eXBlIGRtYV9jbWRfdHJpZ2dlcjsKLQl1MzIgY21kX3RyaWdnZXJfc3Ry ZWFtOwotCWVudW0gZHNpX2NvbG9yX3N3YXBfbW9kZSBzd2FwX21vZGU7Ci0JYm9vbCBiaXRfc3dh cF9yZWQ7Ci0JYm9vbCBiaXRfc3dhcF9ncmVlbjsKLQlib29sIGJpdF9zd2FwX2JsdWU7Ci0JdTMy IHRfY2xrX3Bvc3Q7Ci0JdTMyIHRfY2xrX3ByZTsKLQlib29sIGlnbm9yZV9yeF9lb3Q7Ci0JYm9v bCBhcHBlbmRfdHhfZW90OwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX3ZpZGVvX2VuZ2luZV9j ZmcgLSBEU0kgdmlkZW8gZW5naW5lIGNvbmZpZ3VyYXRpb24KLSAqIEBsYXN0X2xpbmVfaW50ZXJs ZWF2ZV9lbjogICBBbGxvdyBjb21tYW5kIG1vZGUgb3AgaW50ZXJsZWF2ZWQgb24gbGFzdCBsaW5l IG9mCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW8gc3RyZWFtLgotICogQHB1 bHNlX21vZGVfaHNhX2hlOiAgICAgICAgIFNlbmQgSFNBIGFuZCBIRSBmb2xsb3dpbmcgVlMvVkUg cGFja2V0IGlmIHNldCB0bwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUuCi0g KiBAaGZwX2xwMTFfZW46ICAgICAgICAgICAgICAgRW50ZXIgbG93IHBvd2VyIHN0b3AgbW9kZSAo TFAtMTEpIGR1cmluZyBIRlAuCi0gKiBAaGJwX2xwMTFfZW46ICAgICAgICAgICAgICAgRW50ZXIg bG93IHBvd2VyIHN0b3AgbW9kZSAoTFAtMTEpIGR1cmluZyBIQlAuCi0gKiBAaHNhX2xwMTFfZW46 ICAgICAgICAgICAgICAgRW50ZXIgbG93IHBvd2VyIHN0b3AgbW9kZSAoTFAtMTEpIGR1cmluZyBI U0EuCi0gKiBAZW9mX2JsbHBfbHAxMV9lbjogICAgICAgICAgRW50ZXIgbG93IHBvd2VyIHN0b3Ag bW9kZSAoTFAtMTEpIGR1cmluZyBCTExQIG9mCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGFzdCBsaW5lIG9mIGEgZnJhbWUuCi0gKiBAYmxscF9scDExX2VuOiAgICAgICAgICAgICAg RW50ZXIgbG93IHBvd2VyIHN0b3AgbW9kZSAoTFAtMTEpIGR1cmluZyBCTExQLgotICogQHRyYWZm aWNfbW9kZTogICAgICAgICAgICAgIFRyYWZmaWMgbW9kZSBmb3IgdmlkZW8gc3RyZWFtLgotICog QHZjX2lkOiAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWwgY2hhbm5lbCBpZGVudGlmaWVyLgot ICovCi1zdHJ1Y3QgZHNpX3ZpZGVvX2VuZ2luZV9jZmcgewotCWJvb2wgbGFzdF9saW5lX2ludGVy bGVhdmVfZW47Ci0JYm9vbCBwdWxzZV9tb2RlX2hzYV9oZTsKLQlib29sIGhmcF9scDExX2VuOwot CWJvb2wgaGJwX2xwMTFfZW47Ci0JYm9vbCBoc2FfbHAxMV9lbjsKLQlib29sIGVvZl9ibGxwX2xw MTFfZW47Ci0JYm9vbCBibGxwX2xwMTFfZW47Ci0JZW51bSBkc2lfdmlkZW9fdHJhZmZpY19tb2Rl IHRyYWZmaWNfbW9kZTsKLQl1MzIgdmNfaWQ7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkc2lfY21k X2VuZ2luZV9jZmcgLSBEU0kgY29tbWFuZCBlbmdpbmUgY29uZmlndXJhdGlvbgotICogQG1heF9j bWRfcGFja2V0c19pbnRlcmxlYXZlICAgICBNYXhpbXVtIG51bWJlciBvZiBjb21tYW5kIG1vZGUg UkdCIHBhY2tldHMgdG8KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZCB3 aXRoIGluIG9uZSBob3Jpem9udGFsIGJsYW5raW5nIHBlcmlvZAotICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBvZiB0aGUgdmlkZW8gbW9kZSBmcmFtZS4KLSAqIEB3cl9tZW1fc3Rh cnQ6ICAgICAgICAgICAgICAgICAgRENTIGNvbW1hbmQgZm9yIHdyaXRlX21lbW9yeV9zdGFydC4K LSAqIEB3cl9tZW1fY29udGludWU6ICAgICAgICAgICAgICAgRENTIGNvbW1hbmQgZm9yIHdyaXRl X21lbW9yeV9jb250aW51ZS4KLSAqIEBpbnNlcnRfZGNzX2NvbW1hbmQ6ICAgICAgICAgICAgSW5z ZXJ0IERDUyBjb21tYW5kIGFzIGZpcnN0IGJ5dGUgb2YgcGF5bG9hZAotICogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcGl4ZWwgZGF0YS4KLSAqIEBtZHBfdHJhbnNmZXJf dGltZV91cyAgIFNwZWNpZmllcyB0aGUgbWRwIHRyYW5zZmVyIHRpbWUgZm9yIGNvbW1hbmQgbW9k ZQotICogICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxzIGluIG1pY3Jvc2Vjb25kcwotICov Ci1zdHJ1Y3QgZHNpX2NtZF9lbmdpbmVfY2ZnIHsKLQl1MzIgbWF4X2NtZF9wYWNrZXRzX2ludGVy bGVhdmU7Ci0JdTMyIHdyX21lbV9zdGFydDsKLQl1MzIgd3JfbWVtX2NvbnRpbnVlOwotCWJvb2wg aW5zZXJ0X2Rjc19jb21tYW5kOwotCXUzMiBtZHBfdHJhbnNmZXJfdGltZV91czsKLX07Ci0KLS8q KgotICogc3RydWN0IGRzaV9ob3N0X2NvbmZpZyAtIERTSSBob3N0IGNvbmZpZ3VyYXRpb24gcGFy YW1ldGVycy4KLSAqIEBwYW5lbF9tb2RlOiAgICAgICAgICAgIE9wZXJhdGlvbiBtb2RlIGZvciBw YW5lbCAodmlkZW8gb3IgY21kIG1vZGUpLgotICogQGNvbW1vbl9jb25maWc6ICAgICAgICAgSG9z dCBjb25maWd1cmF0aW9uIGNvbW1vbiB0byBib3RoIFZpZGVvIGFuZCBDbWQgbW9kZS4KLSAqIEB2 aWRlb19lbmdpbmU6ICAgICAgICAgIFZpZGVvIGVuZ2luZSBjb25maWd1cmF0aW9uIGlmIHBhbmVs IGlzIGluIHZpZGVvIG1vZGUuCi0gKiBAY21kX2VuZ2luZTogICAgICAgICAgICBDbWQgZW5naW5l IGNvbmZpZ3VyYXRpb24gaWYgcGFuZWwgaXMgaW4gY21kIG1vZGUuCi0gKiBAZXNjX2Nsa19yYXRl X2toejogICAgICBFc2MgY2xvY2sgZnJlcXVlbmN5IGluIEh6LgotICogQGJpdF9jbGtfcmF0ZV9o ejogICAgICAgQml0IGNsb2NrIGZyZXF1ZW5jeSBpbiBIei4KLSAqIEB2aWRlb190aW1pbmc6ICAg ICAgICAgIFZpZGVvIHRpbWluZyBpbmZvcm1hdGlvbiBvZiBhIGZyYW1lLgotICogQGxhbmVfbWFw OiAgICAgICAgICAgICAgTWFwcGluZyBiZXR3ZWVuIGxvZ2ljYWwgYW5kIHBoeXNpY2FsIGxhbmVz LgotICovCi1zdHJ1Y3QgZHNpX2hvc3RfY29uZmlnIHsKLQllbnVtIGRzaV9vcF9tb2RlIHBhbmVs X21vZGU7Ci0Jc3RydWN0IGRzaV9ob3N0X2NvbW1vbl9jZmcgY29tbW9uX2NvbmZpZzsKLQl1bmlv biB7Ci0JCXN0cnVjdCBkc2lfdmlkZW9fZW5naW5lX2NmZyB2aWRlb19lbmdpbmU7Ci0JCXN0cnVj dCBkc2lfY21kX2VuZ2luZV9jZmcgY21kX2VuZ2luZTsKLQl9IHU7Ci0JdTY0IGVzY19jbGtfcmF0 ZV9oejsKLQl1NjQgYml0X2Nsa19yYXRlX2h6OwotCXN0cnVjdCBkc2lfbW9kZV9pbmZvIHZpZGVv X3RpbWluZzsKLQlzdHJ1Y3QgZHNpX2xhbmVfbWFwIGxhbmVfbWFwOwotfTsKLQotLyoqCi0gKiBz dHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZV9wcml2X2luZm8gLSBwcml2YXRlIG1vZGUgaW5mbyB0aGF0 IHdpbGwgYmUgYXR0YWNoZWQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGVh Y2ggZHJtIG1vZGUKLSAqIEBjbWRfc2V0czoJCSAgQ29tbWFuZCBzZXRzIG9mIHRoZSBtb2RlCi0g KiBAcGh5X3RpbWluZ192YWw6ICAgICAgIFBoeSB0aW1pbmcgdmFsdWVzCi0gKiBAcGh5X3RpbWlu Z19sZW46ICAgICAgIFBoeSB0aW1pbmcgYXJyYXkgbGVuZ3RoCi0gKiBAcGFuZWxfaml0dGVyOiAg ICAgICAgIFBhbmVsIGppdHRlciBmb3IgUlNDIGJhY2tvZmYKLSAqIEBwYW5lbF9wcmVmaWxsX2xp bmVzOiAgUGFuZWwgcHJlZmlsbCBsaW5lcyBmb3IgUlNDCi0gKiBAdG9wb2xvZ3k6ICAgICAgICAg ICAgIFRvcG9sb2d5IHNlbGVjdGVkIGZvciB0aGUgcGFuZWwKLSAqIEBkc2M6ICAgICAgICAgICAg ICAgICAgRFNDIGNvbXByZXNzaW9uIGluZm8KLSAqIEBkc2NfZW5hYmxlZDogICAgICAgICAgRFND IGNvbXByZXNzaW9uIGVuYWJsZWQKLSAqLwotc3RydWN0IGRzaV9kaXNwbGF5X21vZGVfcHJpdl9p bmZvIHsKLQlzdHJ1Y3QgZHNpX3BhbmVsX2NtZF9zZXQgY21kX3NldHNbRFNJX0NNRF9TRVRfTUFY XTsKLQotCXUzMiAqcGh5X3RpbWluZ192YWw7Ci0JdTMyIHBoeV90aW1pbmdfbGVuOwotCi0JdTMy IHBhbmVsX2ppdHRlcl9udW1lcjsKLQl1MzIgcGFuZWxfaml0dGVyX2Rlbm9tOwotCXUzMiBwYW5l bF9wcmVmaWxsX2xpbmVzOwotCi0Jc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5IHRvcG9sb2d5 OwotCXN0cnVjdCBtc21fZGlzcGxheV9kc2NfaW5mbyBkc2M7Ci0JYm9vbCBkc2NfZW5hYmxlZDsK LX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgLSBzcGVjaWZpZXMgbW9kZSBm b3IgZHNpIGRpc3BsYXkKLSAqIEB0aW1pbmc6ICAgICAgICAgVGltaW5nIHBhcmFtZXRlcnMgZm9y IHRoZSBwYW5lbC4KLSAqIEBwaXhlbF9jbGtfa2h6OiAgUGl4ZWwgY2xvY2sgaW4gS2h6LgotICog QGRzaV9tb2RlX2ZsYWdzOiBGbGFncyB0byBzaWduYWwgb3RoZXIgZHJtIGNvbXBvbmVudHMgdmlh IHByaXZhdGUgZmxhZ3MKLSAqIEBwcml2X2luZm86ICAgICAgTW9kZSBwcml2YXRlIGluZm8KLSAq Lwotc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgewotCXN0cnVjdCBkc2lfbW9kZV9pbmZvIHRpbWlu ZzsKLQl1MzIgcGl4ZWxfY2xrX2toejsKLQl1MzIgZHNpX21vZGVfZmxhZ3M7Ci0Jc3RydWN0IGRz aV9kaXNwbGF5X21vZGVfcHJpdl9pbmZvICpwcml2X2luZm87Ci19OwotCi0vKioKLSAqIHN0cnVj dCBkc2lfcmVjdCAtIGRzaSByZWN0YW5nbGUgcmVwcmVzZW50YXRpb24KLSAqIE5vdGU6IGRwdV9y ZWN0IGlzIGFsc28gdXNpbmcgdTE2LCB0aGlzIG11c3QgYmUgbWFpbnRhaW5lZCBmb3IgbWVtY3B5 Ci0gKi8KLXN0cnVjdCBkc2lfcmVjdCB7Ci0JdTE2IHg7Ci0JdTE2IHk7Ci0JdTE2IHc7Ci0JdTE2 IGg7Ci19OwotCi0vKioKLSAqIGRzaV9yZWN0X2ludGVyc2VjdCAtIGludGVyc2VjdCB0d28gcmVj dGFuZ2xlcwotICogQHIxOiBmaXJzdCByZWN0YW5nbGUKLSAqIEByMjogc2Npc3NvciByZWN0YW5n bGUKLSAqIEByZXN1bHQ6IHJlc3VsdCByZWN0YW5nbGUsIGFsbCAwJ3Mgb24gbm8gaW50ZXJzZWN0 aW9uIGZvdW5kCi0gKi8KLXZvaWQgZHNpX3JlY3RfaW50ZXJzZWN0KGNvbnN0IHN0cnVjdCBkc2lf cmVjdCAqcjEsCi0JCWNvbnN0IHN0cnVjdCBkc2lfcmVjdCAqcjIsCi0JCXN0cnVjdCBkc2lfcmVj dCAqcmVzdWx0KTsKLQotLyoqCi0gKiBkc2lfcmVjdF9pc19lcXVhbCAtIGNvbXBhcmVzIHR3byBy ZWN0cwotICogQHIxOiByZWN0IHZhbHVlIHRvIGNvbXBhcmUKLSAqIEByMjogcmVjdCB2YWx1ZSB0 byBjb21wYXJlCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSByZWN0cyBhcmUgc2FtZQotICov Ci1zdGF0aWMgaW5saW5lIGJvb2wgZHNpX3JlY3RfaXNfZXF1YWwoc3RydWN0IGRzaV9yZWN0ICpy MSwKLQkJc3RydWN0IGRzaV9yZWN0ICpyMikKLXsKLQlyZXR1cm4gcjEtPnggPT0gcjItPnggJiYg cjEtPnkgPT0gcjItPnkgJiYgcjEtPncgPT0gcjItPncgJiYKLQkJCXIxLT5oID09IHIyLT5oOwot fQotCi1zdHJ1Y3QgZHNpX2V2ZW50X2NiX2luZm8gewotCXVpbnQzMl90IGV2ZW50X2lkeDsKLQl2 b2lkICpldmVudF91c3JfcHRyOwotCi0JaW50ICgqZXZlbnRfY2IpKHZvaWQgKmV2ZW50X3Vzcl9w dHIsCi0JCXVpbnQzMl90IGV2ZW50X2lkeCwgdWludDMyX3QgaW5zdGFuY2VfaWR4LAotCQl1aW50 MzJfdCBkYXRhMCwgdWludDMyX3QgZGF0YTEsCi0JCXVpbnQzMl90IGRhdGEyLCB1aW50MzJfdCBk YXRhMyk7Ci19OwotCi0jZW5kaWYgLyogX0RTSV9ERUZTX0hfICovCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kaXNwbGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDMxYjdkN2UuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3Rh Z2luZy9kc2lfZGlzcGxheS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDIyMSArMCwwIEBACi0vKgot ICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkg dmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgot ICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNkZWZpbmUgcHJfZm10KGZtdCkJ Im1zbS1kc2ktZGlzcGxheTpbJXNdICIgZm10LCBfX2Z1bmNfXwotCi0jaW5jbHVkZSA8bGludXgv bGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L29mLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0K LSNpbmNsdWRlICJtc21fZHJ2LmgiCi0jaW5jbHVkZSAiZHB1X2Nvbm5lY3Rvci5oIgotI2luY2x1 ZGUgIm1zbV9tbXUuaCIKLSNpbmNsdWRlICJkc2lfZGlzcGxheS5oIgotI2luY2x1ZGUgImRzaV9w YW5lbC5oIgotI2luY2x1ZGUgImRzaV9jdHJsLmgiCi0jaW5jbHVkZSAiZHNpX2N0cmxfaHcuaCIK LSNpbmNsdWRlICJkc2lfZHJtLmgiCi0jaW5jbHVkZSAiZHNpX2Nsay5oIgotI2luY2x1ZGUgImRz aV9wd3IuaCIKLSNpbmNsdWRlICJkcHVfZGJnLmgiCi0KLSNkZWZpbmUgdG9fZHNpX2Rpc3BsYXko eCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBkc2lfZGlzcGxheSwgaG9zdCkKLSNkZWZpbmUgSU5U X0JBU0VfMTAgMTAKLSNkZWZpbmUgTk9fT1ZFUlJJREUgLTEKLQotI2RlZmluZSBNSVNSX0JVRkZf U0laRQkyNTYKLQotc3RhdGljIERFRklORV9NVVRFWChkc2lfZGlzcGxheV9saXN0X2xvY2spOwot c3RhdGljIExJU1RfSEVBRChkc2lfZGlzcGxheV9saXN0KTsKLXN0YXRpYyBjaGFyIGRzaV9kaXNw bGF5X3ByaW1hcnlbTUFYX0NNRExJTkVfUEFSQU1fTEVOXTsKLXN0YXRpYyBjaGFyIGRzaV9kaXNw bGF5X3NlY29uZGFyeVtNQVhfQ01ETElORV9QQVJBTV9MRU5dOwotc3RhdGljIHN0cnVjdCBkc2lf ZGlzcGxheV9ib290X3BhcmFtIGJvb3RfZGlzcGxheXNbTUFYX0RTSV9BQ1RJVkVfRElTUExBWV07 Ci1zdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpkZWZhdWx0X2FjdGl2ZV9ub2RlOwotc3RhdGlj IGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZHNpX2Rpc3BsYXlfZHRfbWF0Y2hbXSA9IHsKLQl7 LmNvbXBhdGlibGUgPSAicWNvbSxkc2ktZGlzcGxheSJ9LAotCXt9Ci19OwotCi1zdGF0aWMgc3Ry dWN0IGRzaV9kaXNwbGF5ICptYWluX2Rpc3BsYXk7Ci0KLXZvaWQgZHNpX3JlY3RfaW50ZXJzZWN0 KGNvbnN0IHN0cnVjdCBkc2lfcmVjdCAqcjEsCi0JCWNvbnN0IHN0cnVjdCBkc2lfcmVjdCAqcjIs Ci0JCXN0cnVjdCBkc2lfcmVjdCAqcmVzdWx0KQotewotCWludCBsLCB0LCByLCBiOwotCi0JaWYg KCFyMSB8fCAhcjIgfHwgIXJlc3VsdCkKLQkJcmV0dXJuOwotCi0JbCA9IG1heChyMS0+eCwgcjIt PngpOwotCXQgPSBtYXgocjEtPnksIHIyLT55KTsKLQlyID0gbWluKChyMS0+eCArIHIxLT53KSwg KHIyLT54ICsgcjItPncpKTsKLQliID0gbWluKChyMS0+eSArIHIxLT5oKSwgKHIyLT55ICsgcjIt PmgpKTsKLQotCWlmIChyIDw9IGwgfHwgYiA8PSB0KSB7Ci0JCW1lbXNldChyZXN1bHQsIDAsIHNp emVvZigqcmVzdWx0KSk7Ci0JfSBlbHNlIHsKLQkJcmVzdWx0LT54ID0gbDsKLQkJcmVzdWx0LT55 ID0gdDsKLQkJcmVzdWx0LT53ID0gciAtIGw7Ci0JCXJlc3VsdC0+aCA9IGIgLSB0OwotCX0KLX0K LQotaW50IGRzaV9kaXNwbGF5X3NldF9iYWNrbGlnaHQodm9pZCAqZGlzcGxheSwgdTMyIGJsX2x2 bCkKLXsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRzaV9kaXNwbGF5ID0gZGlzcGxheTsKLQlzdHJ1 Y3QgZHNpX3BhbmVsICpwYW5lbDsKLQl1MzIgYmxfc2NhbGUsIGJsX3NjYWxlX2FkOwotCXU2NCBi bF90ZW1wOwotCWludCByYyA9IDA7Ci0KLQlpZiAoZHNpX2Rpc3BsYXkgPT0gTlVMTCB8fCBkc2lf ZGlzcGxheS0+cGFuZWwgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwYW5lbCA9IGRz aV9kaXNwbGF5LT5wYW5lbDsKLQotCWlmICghZHNpX3BhbmVsX2luaXRpYWxpemVkKHBhbmVsKSkK LQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwYW5lbC0+YmxfY29uZmlnLmJsX2xldmVsID0gYmxfbHZs OwotCi0JLyogc2NhbGUgYmFja2xpZ2h0ICovCi0JYmxfc2NhbGUgPSBwYW5lbC0+YmxfY29uZmln LmJsX3NjYWxlOwotCWJsX3RlbXAgPSBibF9sdmwgKiBibF9zY2FsZSAvIE1BWF9CTF9TQ0FMRV9M RVZFTDsKLQotCWJsX3NjYWxlX2FkID0gcGFuZWwtPmJsX2NvbmZpZy5ibF9zY2FsZV9hZDsKLQli bF90ZW1wID0gKHUzMilibF90ZW1wICogYmxfc2NhbGVfYWQgLyBNQVhfQURfQkxfU0NBTEVfTEVW RUw7Ci0KLQlwcl9kZWJ1ZygiYmxfc2NhbGUgPSAldSwgYmxfc2NhbGVfYWQgPSAldSwgYmxfbHZs ID0gJXVcbiIsCi0JCWJsX3NjYWxlLCBibF9zY2FsZV9hZCwgKHUzMilibF90ZW1wKTsKLQotCXJj ID0gZHNpX2Rpc3BsYXlfY2xrX2N0cmwoZHNpX2Rpc3BsYXktPmRzaV9jbGtfaGFuZGxlLAotCQkJ RFNJX0NPUkVfQ0xLLCBEU0lfQ0xLX09OKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZh aWxlZCB0byBlbmFibGUgRFNJIGNvcmUgY2xvY2tzLCByYz0lZFxuIiwKLQkJICAgICAgIGRzaV9k aXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBkc2lfcGFuZWxf c2V0X2JhY2tsaWdodChwYW5lbCwgKHUzMilibF90ZW1wKTsKLQlpZiAocmMpCi0JCXByX2Vycigi dW5hYmxlIHRvIHNldCBiYWNrbGlnaHRcbiIpOwotCi0JcmMgPSBkc2lfZGlzcGxheV9jbGtfY3Ry bChkc2lfZGlzcGxheS0+ZHNpX2Nsa19oYW5kbGUsCi0JCQlEU0lfQ09SRV9DTEssIERTSV9DTEtf T0ZGKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBkaXNhYmxlIERTSSBj b3JlIGNsb2NrcywgcmM9JWRcbiIsCi0JCSAgICAgICBkc2lfZGlzcGxheS0+bmFtZSwgcmMpOwot CQlnb3RvIGVycm9yOwotCX0KLQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX2Rp c3BsYXlfc29mdF9yZXNldCh2b2lkICpkaXNwbGF5KQotewotCXN0cnVjdCBkc2lfZGlzcGxheSAq ZHNpX2Rpc3BsYXk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKmN0cmw7Ci0JaW50IHJjID0g MDsKLQlpbnQgaTsKLQotCWlmICghZGlzcGxheSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkc2lf ZGlzcGxheSA9IGRpc3BsYXk7Ci0KLQlmb3IgKGkgPSAwIDsgaSA8IGRzaV9kaXNwbGF5LT5jdHJs X2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZkc2lfZGlzcGxheS0+Y3RybFtpXTsKLQkJcmMgPSBk c2lfY3RybF9zb2Z0X3Jlc2V0KGN0cmwtPmN0cmwpOwotCQlpZiAocmMpIHsKLQkJCXByX2Vycigi WyVzXSBmYWlsZWQgdG8gc29mdCByZXNldCBob3N0XyVkLCByYz0lZFxuIiwKLQkJCQkJZHNpX2Rp c3BsYXktPm5hbWUsIGksIHJjKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJjOwot fQotCi1lbnVtIGRzaV9waXhlbF9mb3JtYXQgZHNpX2Rpc3BsYXlfZ2V0X2RzdF9mb3JtYXQodm9p ZCAqZGlzcGxheSkKLXsKLQllbnVtIGRzaV9waXhlbF9mb3JtYXQgZm9ybWF0ID0gRFNJX1BJWEVM X0ZPUk1BVF9NQVg7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkc2lfZGlzcGxheSA9IChzdHJ1Y3Qg ZHNpX2Rpc3BsYXkgKilkaXNwbGF5OwotCi0JaWYgKCFkc2lfZGlzcGxheSB8fCAhZHNpX2Rpc3Bs YXktPnBhbmVsKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXMocykgZHNpX2Rpc3BsYXkgJXBL LCBwYW5lbCAlcEtcbiIsCi0JCQlkc2lfZGlzcGxheSwKLQkJCSgoZHNpX2Rpc3BsYXkpID8gZHNp X2Rpc3BsYXktPnBhbmVsIDogTlVMTCkpOwotCQlyZXR1cm4gZm9ybWF0OwotCX0KLQotCWZvcm1h dCA9IGRzaV9kaXNwbGF5LT5wYW5lbC0+aG9zdF9jb25maWcuZHN0X2Zvcm1hdDsKLQlyZXR1cm4g Zm9ybWF0OwotfQotCi1zdGF0aWMgdm9pZCBfZHNpX2Rpc3BsYXlfc2V0dXBfbWlzcihzdHJ1Y3Qg ZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGlz cGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWRzaV9jdHJsX3NldHVwX21pc3IoZGlzcGxheS0+ Y3RybFtpXS5jdHJsLAotCQkJCWRpc3BsYXktPm1pc3JfZW5hYmxlLAotCQkJCWRpc3BsYXktPm1p c3JfZnJhbWVfY291bnQpOwotCX0KLX0KLQotaW50IGRzaV9kaXNwbGF5X3NldF9wb3dlcihzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQlpbnQgcG93ZXJfbW9kZSwgdm9pZCAqZGlz cCkKLXsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkgPSBkaXNwOwotCWludCByYyA9IDA7 Ci0KLQlpZiAoIWRpc3BsYXkgfHwgIWRpc3BsYXktPnBhbmVsKSB7Ci0JCXByX2VycigiaW52YWxp ZCBkaXNwbGF5L3BhbmVsXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3dpdGNoIChw b3dlcl9tb2RlKSB7Ci0JY2FzZSBEUFVfTU9ERV9EUE1TX0xQMToKLQkJcmMgPSBkc2lfcGFuZWxf c2V0X2xwMShkaXNwbGF5LT5wYW5lbCk7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX01PREVfRFBNU19M UDI6Ci0JCXJjID0gZHNpX3BhbmVsX3NldF9scDIoZGlzcGxheS0+cGFuZWwpOwotCQlicmVhazsK LQlkZWZhdWx0OgotCQlyYyA9IGRzaV9wYW5lbF9zZXRfbm9scChkaXNwbGF5LT5wYW5lbCk7Ci0J CWJyZWFrOwotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGRlYnVnZnNfZHVt cF9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJICAgICAgY2hhciBfX3VzZXIgKnVz ZXJfYnVmLAotCQkJCSAgICAgIHNpemVfdCB1c2VyX2xlbiwKLQkJCQkgICAgICBsb2ZmX3QgKnBw b3MpCi17Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5ID0gZmlsZS0+cHJpdmF0ZV9kYXRh OwotCWNoYXIgKmJ1ZjsKLQl1MzIgbGVuID0gMDsKLQlpbnQgaTsKLQotCWlmICghZGlzcGxheSkK LQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoKnBwb3MpCi0JCXJldHVybiAwOwotCi0JYnVmID0g a3phbGxvYyhTWl80SywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpCi0JCXJldHVybiAtRU5PTUVN OwotCi0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgKFNaXzRLIC0gbGVuKSwgIm5hbWUgPSAl c1xuIiwgZGlzcGxheS0+bmFtZSk7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgKFNaXzRL IC0gbGVuKSwKLQkJCSJcdFJlc29sdXRpb24gPSAlZHglZFxuIiwKLQkJCWRpc3BsYXktPmNvbmZp Zy52aWRlb190aW1pbmcuaF9hY3RpdmUsCi0JCQlkaXNwbGF5LT5jb25maWcudmlkZW9fdGltaW5n LnZfYWN0aXZlKTsKLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKysp IHsKLQkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgKFNaXzRLIC0gbGVuKSwKLQkJCQkiXHRD VFJMXyVkOlxuXHRcdGN0cmwgPSAlc1xuXHRcdHBoeSA9ICVzXG4iLAotCQkJCWksIGRpc3BsYXkt PmN0cmxbaV0uY3RybC0+bmFtZSwKLQkJCQlkaXNwbGF5LT5jdHJsW2ldLnBoeS0+bmFtZSk7Ci0J fQotCi0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgKFNaXzRLIC0gbGVuKSwKLQkJCSJcdFBh bmVsID0gJXNcbiIsIGRpc3BsYXktPnBhbmVsLT5uYW1lKTsKLQotCWxlbiArPSBzbnByaW50Zihi dWYgKyBsZW4sIChTWl80SyAtIGxlbiksCi0JCQkiXHRDbG9jayBtYXN0ZXIgPSAlc1xuIiwKLQkJ CWRpc3BsYXktPmN0cmxbZGlzcGxheS0+Y2xrX21hc3Rlcl9pZHhdLmN0cmwtPm5hbWUpOwotCi0J aWYgKGNvcHlfdG9fdXNlcih1c2VyX2J1ZiwgYnVmLCBsZW4pKSB7Ci0JCWtmcmVlKGJ1Zik7Ci0J CXJldHVybiAtRUZBVUxUOwotCX0KLQotCSpwcG9zICs9IGxlbjsKLQotCWtmcmVlKGJ1Zik7Ci0J cmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIHNzaXplX3QgZGVidWdmc19taXNyX3NldHVwKHN0cnVj dCBmaWxlICpmaWxlLAotCQkJCSAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkJCSAg c2l6ZV90IHVzZXJfbGVuLAotCQkJCSAgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBkc2lfZGlz cGxheSAqZGlzcGxheSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQljaGFyICpidWY7Ci0JaW50IHJj ID0gMDsKLQlzaXplX3QgbGVuOwotCXUzMiBlbmFibGUsIGZyYW1lX2NvdW50OwotCi0JaWYgKCFk aXNwbGF5KQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmICgqcHBvcykKLQkJcmV0dXJuIDA7Ci0K LQlidWYgPSBremFsbG9jKE1JU1JfQlVGRl9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikK LQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBsZWF2ZSByb29tIGZvciB0ZXJtaW5hdGlvbiBjaGFy ICovCi0JbGVuID0gbWluX3Qoc2l6ZV90LCB1c2VyX2xlbiwgTUlTUl9CVUZGX1NJWkUgLSAxKTsK LQlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSkgewotCQlyYyA9IC1FSU5W QUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JYnVmW2xlbl0gPSAnXDAnOyAvKiB0ZXJtaW5hdGUg dGhlIHN0cmluZyAqLwotCi0JaWYgKHNzY2FuZihidWYsICIldSAldSIsICZlbmFibGUsICZmcmFt ZV9jb3VudCkgIT0gMikgewotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0J ZGlzcGxheS0+bWlzcl9lbmFibGUgPSBlbmFibGU7Ci0JZGlzcGxheS0+bWlzcl9mcmFtZV9jb3Vu dCA9IGZyYW1lX2NvdW50OwotCi0JbXV0ZXhfbG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsK LQlyYyA9IGRzaV9kaXNwbGF5X2Nsa19jdHJsKGRpc3BsYXktPmRzaV9jbGtfaGFuZGxlLAotCQkJ RFNJX0NPUkVfQ0xLLCBEU0lfQ0xLX09OKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZh aWxlZCB0byBlbmFibGUgRFNJIGNvcmUgY2xvY2tzLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3Bs YXktPm5hbWUsIHJjKTsKLQkJZ290byB1bmxvY2s7Ci0JfQotCi0JX2RzaV9kaXNwbGF5X3NldHVw X21pc3IoZGlzcGxheSk7Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2Nsa19jdHJsKGRpc3BsYXktPmRz aV9jbGtfaGFuZGxlLAotCQkJRFNJX0NPUkVfQ0xLLCBEU0lfQ0xLX09GRik7Ci0JaWYgKHJjKSB7 Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGlzYWJsZSBEU0kgY29yZSBjbG9ja3MsIHJjPSVk XG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIHVubG9jazsKLQl9Ci0K LQlyYyA9IHVzZXJfbGVuOwotdW5sb2NrOgotCW11dGV4X3VubG9jaygmZGlzcGxheS0+ZGlzcGxh eV9sb2NrKTsKLWVycm9yOgotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMg c3NpemVfdCBkZWJ1Z2ZzX21pc3JfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkgY2hhciBf X3VzZXIgKnVzZXJfYnVmLAotCQkJCSBzaXplX3QgdXNlcl9sZW4sCi0JCQkJIGxvZmZfdCAqcHBv cykKLXsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkgPSBmaWxlLT5wcml2YXRlX2RhdGE7 Ci0JY2hhciAqYnVmOwotCXUzMiBsZW4gPSAwOwotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9j dHJsICpkc2lfY3RybDsKLQlpbnQgaTsKLQl1MzIgbWlzcjsKLQlzaXplX3QgbWF4X2xlbiA9IG1p bl90KHNpemVfdCwgdXNlcl9sZW4sIE1JU1JfQlVGRl9TSVpFKTsKLQotCWlmICghZGlzcGxheSkK LQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoKnBwb3MpCi0JCXJldHVybiAwOwotCi0JYnVmID0g a3phbGxvYyhtYXhfbGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikKLQkJcmV0dXJuIC1FTk9N RU07Ci0KLQltdXRleF9sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCXJjID0gZHNpX2Rp c3BsYXlfY2xrX2N0cmwoZGlzcGxheS0+ZHNpX2Nsa19oYW5kbGUsCi0JCQlEU0lfQ09SRV9DTEss IERTSV9DTEtfT04pOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJs ZSBEU0kgY29yZSBjbG9ja3MsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMp OwotCQlnb3RvIGVycm9yOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2Nv dW50OyBpKyspIHsKLQkJZHNpX2N0cmwgPSBkaXNwbGF5LT5jdHJsW2ldLmN0cmw7Ci0JCW1pc3Ig PSBkc2lfY3RybF9jb2xsZWN0X21pc3IoZGlzcGxheS0+Y3RybFtpXS5jdHJsKTsKLQotCQlsZW4g Kz0gc25wcmludGYoKGJ1ZiArIGxlbiksIG1heF9sZW4gLSBsZW4sCi0JCQkiRFNJXyVkIE1JU1I6 IDB4JXhcbiIsIGRzaV9jdHJsLT5jZWxsX2luZGV4LCBtaXNyKTsKLQotCQlpZiAobGVuID49IG1h eF9sZW4pCi0JCQlicmVhazsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2Nsa19jdHJsKGRpc3Bs YXktPmRzaV9jbGtfaGFuZGxlLAotCQkJRFNJX0NPUkVfQ0xLLCBEU0lfQ0xLX09GRik7Ci0JaWYg KHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGlzYWJsZSBEU0kgY29yZSBjbG9ja3Ms IHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwot CX0KLQotCWlmIChjb3B5X3RvX3VzZXIodXNlcl9idWYsIGJ1ZiwgbGVuKSkgewotCQlyYyA9IC1F RkFVTFQ7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JKnBwb3MgKz0gbGVuOwotCi1lcnJvcjoKLQlt dXRleF91bmxvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0Ja2ZyZWUoYnVmKTsKLQlyZXR1 cm4gbGVuOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdW1wX2lu Zm9fZm9wcyA9IHsKLQkub3BlbiA9IHNpbXBsZV9vcGVuLAotCS5yZWFkID0gZGVidWdmc19kdW1w X2luZm9fcmVhZCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1p c3JfZGF0YV9mb3BzID0gewotCS5vcGVuID0gc2ltcGxlX29wZW4sCi0JLnJlYWQgPSBkZWJ1Z2Zz X21pc3JfcmVhZCwKLQkud3JpdGUgPSBkZWJ1Z2ZzX21pc3Jfc2V0dXAsCi19OwotCi1zdGF0aWMg aW50IGRzaV9kaXNwbGF5X2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkp Ci17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZGVudHJ5ICpkaXIsICpkdW1wX2ZpbGUsICptaXNy X2RhdGE7Ci0KLQlkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGlzcGxheS0+bmFtZSwgTlVMTCk7 Ci0JaWYgKElTX0VSUl9PUl9OVUxMKGRpcikpIHsKLQkJcmMgPSBQVFJfRVJSKGRpcik7Ci0JCXBy X2VycigiWyVzXSBkZWJ1Z2ZzIGNyZWF0ZSBkaXIgZmFpbGVkLCByYyA9ICVkXG4iLAotCQkgICAg ICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWR1bXBfZmlsZSA9 IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImR1bXBfaW5mbyIsCi0JCQkJCTA0MDAsCi0JCQkJCWRpciwK LQkJCQkJZGlzcGxheSwKLQkJCQkJJmR1bXBfaW5mb19mb3BzKTsKLQlpZiAoSVNfRVJSX09SX05V TEwoZHVtcF9maWxlKSkgewotCQlyYyA9IFBUUl9FUlIoZHVtcF9maWxlKTsKLQkJcHJfZXJyKCJb JXNdIGRlYnVnZnMgY3JlYXRlIGR1bXAgaW5mbyBmaWxlIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAg ICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3JfcmVtb3ZlX2RpcjsKLQl9Ci0K LQltaXNyX2RhdGEgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJtaXNyX2RhdGEiLAotCQkJCQkwNjAw LAotCQkJCQlkaXIsCi0JCQkJCWRpc3BsYXksCi0JCQkJCSZtaXNyX2RhdGFfZm9wcyk7Ci0JaWYg KElTX0VSUl9PUl9OVUxMKG1pc3JfZGF0YSkpIHsKLQkJcmMgPSBQVFJfRVJSKG1pc3JfZGF0YSk7 Ci0JCXByX2VycigiWyVzXSBkZWJ1Z2ZzIGNyZWF0ZSBtaXNyIGRhdGFmaWxlIGZhaWxlZCwgcmM9 JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3JfcmVtb3Zl X2RpcjsKLQl9Ci0KLQlkaXNwbGF5LT5yb290ID0gZGlyOwotCXJldHVybiByYzsKLWVycm9yX3Jl bW92ZV9kaXI6Ci0JZGVidWdmc19yZW1vdmUoZGlyKTsKLWVycm9yOgotCXJldHVybiByYzsKLX0K LQotc3RhdGljIGludCBkc2lfZGlzcGxheV9kZWJ1Z2ZzX2RlaW5pdChzdHJ1Y3QgZHNpX2Rpc3Bs YXkgKmRpc3BsYXkpCi17Ci0JZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRpc3BsYXktPnJvb3Qp OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGFkanVzdF90aW1pbmdfYnlfY3RybF9j b3VudChjb25zdCBzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCQkJCXN0cnVjdCBkc2lf ZGlzcGxheV9tb2RlICptb2RlKQotewotCWlmIChkaXNwbGF5LT5jdHJsX2NvdW50ID4gMSkgewot CQltb2RlLT50aW1pbmcuaF9hY3RpdmUgLz0gZGlzcGxheS0+Y3RybF9jb3VudDsKLQkJbW9kZS0+ dGltaW5nLmhfZnJvbnRfcG9yY2ggLz0gZGlzcGxheS0+Y3RybF9jb3VudDsKLQkJbW9kZS0+dGlt aW5nLmhfc3luY193aWR0aCAvPSBkaXNwbGF5LT5jdHJsX2NvdW50OwotCQltb2RlLT50aW1pbmcu aF9iYWNrX3BvcmNoIC89IGRpc3BsYXktPmN0cmxfY291bnQ7Ci0JCW1vZGUtPnRpbWluZy5oX3Nr ZXcgLz0gZGlzcGxheS0+Y3RybF9jb3VudDsKLQkJbW9kZS0+cGl4ZWxfY2xrX2toeiAvPSBkaXNw bGF5LT5jdHJsX2NvdW50OwotCX0KLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9pc191bHBz X3JlcV92YWxpZChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCWJvb2wgZW5hYmxlKQot ewotCS8qIFRPRE86IG1ha2UgY2hlY2tzIGJhc2VkIG9uIGNvbnQuIHNwbGFzaCAqLwotCWludCBz cGxhc2hfZW5hYmxlZCA9IGZhbHNlOwotCi0JcHJfZGVidWcoImNoZWNraW5nIHVscHMgcmVxIHZh bGlkaXR5XG4iKTsKLQotCWlmICghZHNpX3BhbmVsX3VscHNfZmVhdHVyZV9lbmFibGVkKGRpc3Bs YXktPnBhbmVsKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JLyogVE9ETzogVUxQUyBkdXJpbmcgc3Vz cGVuZCAqLwotCWlmICghZHNpX3BhbmVsX2luaXRpYWxpemVkKGRpc3BsYXktPnBhbmVsKSkKLQkJ cmV0dXJuIGZhbHNlOwotCi0JaWYgKGVuYWJsZSAmJiBkaXNwbGF5LT51bHBzX2VuYWJsZWQpIHsK LQkJcHJfZGVidWcoIlVMUFMgYWxyZWFkeSBlbmFibGVkXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwot CX0gZWxzZSBpZiAoIWVuYWJsZSAmJiAhZGlzcGxheS0+dWxwc19lbmFibGVkKSB7Ci0JCXByX2Rl YnVnKCJVTFBTIGFscmVhZHkgZGlzYWJsZWRcbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0J LyoKLQkgKiBObyBuZWVkIHRvIGVudGVyIFVMUFMgd2hlbiB0cmFuc2l0aW9uaW5nIGZyb20gc3Bs YXNoIHNjcmVlbiB0bwotCSAqIGJvb3QgYW5pbWF0aW9uIHNpbmNlIGl0IGlzIGV4cGVjdGVkIHRo YXQgdGhlIGNsb2NrcyB3b3VsZCBiZSB0dXJuZWQKLQkgKiByaWdodCBiYWNrIG9uLgotCSAqLwot CWlmIChlbmFibGUgJiYgc3BsYXNoX2VuYWJsZWQpCi0JCXJldHVybiBmYWxzZTsKLQotCXJldHVy biB0cnVlOwotfQotCi0KLS8qKgotICogZHNpX2Rpc3BsYXlfc2V0X3VscHMoKSAtIHNldCBVTFBT IHN0YXRlIGZvciBEU0kgbGFuZXMuCi0gKiBAZHNpX2Rpc3BsYXk6ICAgICAgICAgRFNJIGRpc3Bs YXkgaGFuZGxlLgotICogQGVuYWJsZTogICAgICAgICAgIGVuYWJsZS9kaXNhYmxlIFVMUFMuCi0g KgotICogVUxQUyBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCBhZnRlciBEU0kgaG9zdCBlbmdpbmUg aXMgdHVybmVkIG9uLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotc3RhdGljIGlu dCBkc2lfZGlzcGxheV9zZXRfdWxwcyhzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksIGJvb2wg ZW5hYmxlKQotewotCWludCByYyA9IDA7Ci0JaW50IGkgPSAwOwotCXN0cnVjdCBkc2lfZGlzcGxh eV9jdHJsICptX2N0cmwsICpjdHJsOwotCi0KLQlpZiAoIWRpc3BsYXkpIHsKLQkJcHJfZXJyKCJJ bnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICghZHNpX2Rp c3BsYXlfaXNfdWxwc19yZXFfdmFsaWQoZGlzcGxheSwgZW5hYmxlKSkgewotCQlwcl9kZWJ1Zygi JXM6IHNraXBwaW5nIFVMUFMgY29uZmlnLCBlbmFibGU9JWRcbiIsCi0JCQlfX2Z1bmNfXywgZW5h YmxlKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbV9jdHJsID0gJmRpc3BsYXktPmN0cmxbZGlzcGxh eS0+Y21kX21hc3Rlcl9pZHhdOwotCi0JcmMgPSBkc2lfY3RybF9zZXRfdWxwcyhtX2N0cmwtPmN0 cmwsIGVuYWJsZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiVWxwcyBjb250cm9sbGVyIHN0YXRl IGNoYW5nZSglZCkgZmFpbGVkXG4iLCBlbmFibGUpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JcmMg PSBkc2lfcGh5X3NldF91bHBzKG1fY3RybC0+cGh5LCAmZGlzcGxheS0+Y29uZmlnLCBlbmFibGUs Ci0JCQkJZGlzcGxheS0+Y2xhbXBfZW5hYmxlZCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiVWxw cyBQSFkgc3RhdGUgY2hhbmdlKCVkKSBmYWlsZWRcbiIsIGVuYWJsZSk7Ci0JCXJldHVybiByYzsK LQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0 cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJaWYgKCFjdHJsLT5jdHJsIHx8IChjdHJsID09IG1f Y3RybCkpCi0JCQljb250aW51ZTsKLQotCQlyYyA9IGRzaV9jdHJsX3NldF91bHBzKGN0cmwtPmN0 cmwsIGVuYWJsZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJVbHBzIGNvbnRyb2xsZXIgc3Rh dGUgY2hhbmdlKCVkKSBmYWlsZWRcbiIsCi0JCQkJZW5hYmxlKTsKLQkJCXJldHVybiByYzsKLQkJ fQotCi0JCXJjID0gZHNpX3BoeV9zZXRfdWxwcyhjdHJsLT5waHksICZkaXNwbGF5LT5jb25maWcs IGVuYWJsZSwKLQkJCQkJZGlzcGxheS0+Y2xhbXBfZW5hYmxlZCk7Ci0JCWlmIChyYykgewotCQkJ cHJfZXJyKCJVbHBzIFBIWSBzdGF0ZSBjaGFuZ2UoJWQpIGZhaWxlZFxuIiwgZW5hYmxlKTsKLQkJ CXJldHVybiByYzsKLQkJfQotCi0JfQotCWRpc3BsYXktPnVscHNfZW5hYmxlZCA9IGVuYWJsZTsK LQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBkc2lfZGlzcGxheV9zZXRfY2xhbXAoKSAtIHNldCBj bGFtcCBzdGF0ZSBmb3IgRFNJIElPLgotICogQGRzaV9kaXNwbGF5OiAgICAgICAgIERTSSBkaXNw bGF5IGhhbmRsZS4KLSAqIEBlbmFibGU6ICAgICAgICAgICBlbmFibGUvZGlzYWJsZSBjbGFtcGlu Zy4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLXN0YXRpYyBpbnQgZHNpX2Rpc3Bs YXlfc2V0X2NsYW1wKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwgYm9vbCBlbmFibGUpCi17 Ci0JaW50IHJjID0gMDsKLQlpbnQgaSA9IDA7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKm1f Y3RybCwgKmN0cmw7Ci0JYm9vbCB1bHBzX2VuYWJsZWQgPSBmYWxzZTsKLQotCi0JaWYgKCFkaXNw bGF5KSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsK LQl9Ci0KLQltX2N0cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNwbGF5LT5jbWRfbWFzdGVyX2lkeF07 Ci0JdWxwc19lbmFibGVkID0gZGlzcGxheS0+dWxwc19lbmFibGVkOwotCi0JcmMgPSBkc2lfY3Ry bF9zZXRfY2xhbXBfc3RhdGUobV9jdHJsLT5jdHJsLCBlbmFibGUsIHVscHNfZW5hYmxlZCk7Ci0J aWYgKHJjKSB7Ci0JCXByX2VycigiRFNJIENsYW1wIHN0YXRlIGNoYW5nZSglZCkgZmFpbGVkXG4i LCBlbmFibGUpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXkt PmN0cmxfY291bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCWlmICgh Y3RybC0+Y3RybCB8fCAoY3RybCA9PSBtX2N0cmwpKQotCQkJY29udGludWU7Ci0KLQkJcmMgPSBk c2lfY3RybF9zZXRfY2xhbXBfc3RhdGUoY3RybC0+Y3RybCwgZW5hYmxlLCB1bHBzX2VuYWJsZWQp OwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiRFNJIENsYW1wIHN0YXRlIGNoYW5nZSglZCkgZmFp bGVkXG4iLCBlbmFibGUpOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0JfQotCWRpc3BsYXktPmNsYW1w X2VuYWJsZWQgPSBlbmFibGU7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlf c2V0dXBfY3RybCgpIC0gc2V0dXAgRFNJIGNvbnRyb2xsZXIuCi0gKiBAZHNpX2Rpc3BsYXk6ICAg ICAgICAgRFNJIGRpc3BsYXkgaGFuZGxlLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAq Lwotc3RhdGljIGludCBkc2lfZGlzcGxheV9jdHJsX3NldHVwKHN0cnVjdCBkc2lfZGlzcGxheSAq ZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpID0gMDsKLQlzdHJ1Y3QgZHNpX2Rpc3Bs YXlfY3RybCAqY3RybCwgKm1fY3RybDsKLQotCi0JaWYgKCFkaXNwbGF5KSB7Ci0JCXByX2Vycigi SW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltX2N0cmwgPSAm ZGlzcGxheS0+Y3RybFtkaXNwbGF5LT5jbWRfbWFzdGVyX2lkeF07Ci0JcmMgPSBkc2lfY3RybF9z ZXR1cChtX2N0cmwtPmN0cmwpOwotCWlmIChyYykgewotCQlwcl9lcnIoIkRTSSBjb250cm9sbGVy IHNldHVwIGZhaWxlZFxuIik7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwg ZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsK LQkJaWYgKCFjdHJsLT5jdHJsIHx8IChjdHJsID09IG1fY3RybCkpCi0JCQljb250aW51ZTsKLQot CQlyYyA9IGRzaV9jdHJsX3NldHVwKGN0cmwtPmN0cmwpOwotCQlpZiAocmMpIHsKLQkJCXByX2Vy cigiRFNJIGNvbnRyb2xsZXIgc2V0dXAgZmFpbGVkXG4iKTsKLQkJCXJldHVybiByYzsKLQkJfQot CX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9waHlfZW5hYmxlKHN0 cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSk7Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfcGh5X2lk bGVfb24oKSAtIGVuYWJsZSBEU0kgUEhZIHdoaWxlIGNvbWluZyBvdXQgb2YgaWRsZSBzY3JlZW4u Ci0gKiBAZHNpX2Rpc3BsYXk6ICAgICAgICAgRFNJIGRpc3BsYXkgaGFuZGxlLgotICogQGVuYWJs ZTogICAgICAgICAgIGVuYWJsZS9kaXNhYmxlIERTSSBQSFkuCi0gKgotICogUmV0dXJuOiBlcnJv ciBjb2RlLgotICovCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3BoeV9pZGxlX29uKHN0cnVjdCBk c2lfZGlzcGxheSAqZGlzcGxheSwKLQkJYm9vbCBtbXNzX2NsYW1wKQotewotCWludCByYyA9IDA7 Ci0JaW50IGkgPSAwOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICptX2N0cmwsICpjdHJsOwot Ci0KLQlpZiAoIWRpc3BsYXkpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChtbXNzX2NsYW1wICYmICFkaXNwbGF5LT5waHlfaWRs ZV9wb3dlcl9vZmYpIHsKLQkJZHNpX2Rpc3BsYXlfcGh5X2VuYWJsZShkaXNwbGF5KTsKLQkJcmV0 dXJuIDA7Ci0JfQotCi0JbV9jdHJsID0gJmRpc3BsYXktPmN0cmxbZGlzcGxheS0+Y21kX21hc3Rl cl9pZHhdOwotCXJjID0gZHNpX3BoeV9pZGxlX2N0cmwobV9jdHJsLT5waHksIHRydWUpOwotCWlm IChyYykgewotCQlwcl9lcnIoIkRTSSBjb250cm9sbGVyIHNldHVwIGZhaWxlZFxuIik7Ci0JCXJl dHVybiByYzsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsr KSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJaWYgKCFjdHJsLT5jdHJsIHx8IChj dHJsID09IG1fY3RybCkpCi0JCQljb250aW51ZTsKLQotCQlyYyA9IGRzaV9waHlfaWRsZV9jdHJs KGN0cmwtPnBoeSwgdHJ1ZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJEU0kgY29udHJvbGxl ciBzZXR1cCBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0JfQotCWRpc3BsYXktPnBo eV9pZGxlX3Bvd2VyX29mZiA9IGZhbHNlOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGRzaV9k aXNwbGF5X3BoeV9pZGxlX29mZigpIC0gZGlzYWJsZSBEU0kgUEhZIHdoaWxlIGdvaW5nIHRvIGlk bGUgc2NyZWVuLgotICogQGRzaV9kaXNwbGF5OiAgICAgICAgIERTSSBkaXNwbGF5IGhhbmRsZS4K LSAqIEBlbmFibGU6ICAgICAgICAgICBlbmFibGUvZGlzYWJsZSBEU0kgUEhZLgotICoKLSAqIFJl dHVybjogZXJyb3IgY29kZS4KLSAqLwotc3RhdGljIGludCBkc2lfZGlzcGxheV9waHlfaWRsZV9v ZmYoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0JaW50IGkg PSAwOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICptX2N0cmwsICpjdHJsOwotCi0JaWYgKCFk aXNwbGF5KSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZB TDsKLQl9Ci0KLQlpZiAoIWRpc3BsYXktPnBhbmVsLT5hbGxvd19waHlfcG93ZXJfb2ZmKSB7Ci0J CXByX2RlYnVnKCJwYW5lbCBkb2Vzbid0IHN1cHBvcnQgdGhpcyBmZWF0dXJlXG4iKTsKLQkJcmV0 dXJuIDA7Ci0JfQotCi0JbV9jdHJsID0gJmRpc3BsYXktPmN0cmxbZGlzcGxheS0+Y21kX21hc3Rl cl9pZHhdOwotCi0JcmMgPSBkc2lfcGh5X2lkbGVfY3RybChtX2N0cmwtPnBoeSwgZmFsc2UpOwot CWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJsZSBjbWQgZW5naW5lLCBy Yz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJcmV0dXJuIHJjOwotCX0K LQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9 ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlpZiAoIWN0cmwtPmN0cmwgfHwgKGN0cmwgPT0gbV9jdHJs KSkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX3BoeV9pZGxlX2N0cmwoY3RybC0+cGh5LCBm YWxzZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJEU0kgY29udHJvbGxlciBzZXR1cCBmYWls ZWRcbiIpOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0JfQotCWRpc3BsYXktPnBoeV9pZGxlX3Bvd2Vy X29mZiA9IHRydWU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZHNpX2Rpc3BsYXlfZW5hYmxlX2V2 ZW50KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwKLQkJdWludDMyX3QgZXZlbnRfaWR4LCBz dHJ1Y3QgZHNpX2V2ZW50X2NiX2luZm8gKmV2ZW50X2luZm8sCi0JCWJvb2wgZW5hYmxlKQotewot CXVpbnQzMl90IGlycV9zdGF0dXNfaWR4ID0gRFNJX1NUQVRVU19JTlRFUlJVUFRfQ09VTlQ7Ci0J aW50IGk7Ci0KLQlpZiAoIWRpc3BsYXkpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGRpc3BsYXlcbiIp OwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGV2ZW50X2luZm8pCi0JCWV2ZW50X2luZm8tPmV2ZW50 X2lkeCA9IGV2ZW50X2lkeDsKLQotCXN3aXRjaCAoZXZlbnRfaWR4KSB7Ci0JY2FzZSBEUFVfQ09O Tl9FVkVOVF9WSURfRE9ORToKLQkJaXJxX3N0YXR1c19pZHggPSBEU0lfU0lOVF9WSURFT19NT0RF X0ZSQU1FX0RPTkU7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX0NPTk5fRVZFTlRfQ01EX0RPTkU6Ci0J CWlycV9zdGF0dXNfaWR4ID0gRFNJX1NJTlRfQ01EX0ZSQU1FX0RPTkU7Ci0JCWJyZWFrOwotCWRl ZmF1bHQ6Ci0JCS8qIG5vdGhpbmcgdG8gZG8gKi8KLQkJcHJfZGVidWcoIlslc10gdW5oYW5kbGVk IGV2ZW50ICVkXG4iLCBkaXNwbGF5LT5uYW1lLCBldmVudF9pZHgpOwotCQlyZXR1cm47Ci0JfQot Ci0JaWYgKGVuYWJsZSkgewotCQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsg aSsrKQotCQkJZHNpX2N0cmxfZW5hYmxlX3N0YXR1c19pbnRlcnJ1cHQoCi0JCQkJCWRpc3BsYXkt PmN0cmxbaV0uY3RybCwgaXJxX3N0YXR1c19pZHgsCi0JCQkJCWV2ZW50X2luZm8pOwotCX0gZWxz ZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKyspCi0JCQlkc2lf Y3RybF9kaXNhYmxlX3N0YXR1c19pbnRlcnJ1cHQoCi0JCQkJCWRpc3BsYXktPmN0cmxbaV0uY3Ry bCwgaXJxX3N0YXR1c19pZHgpOwotCX0KLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9jdHJs X3Bvd2VyX29uKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwot CWludCBpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICpjdHJsOwotCi0JLyogU2VxdWVuY2Ug ZG9lcyBub3QgbWF0dGVyIGZvciBzcGxpdCBkc2kgdXNlY2FzZXMgKi8KLQlmb3IgKGkgPSAwOyBp IDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtp XTsKLQkJaWYgKCFjdHJsLT5jdHJsKQotCQkJY29udGludWU7Ci0KLQkJcmMgPSBkc2lfY3RybF9z ZXRfcG93ZXJfc3RhdGUoY3RybC0+Y3RybCwKLQkJCQkJICAgICAgRFNJX0NUUkxfUE9XRVJfVlJF R19PTik7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIEZhaWxlZCB0byBzZXQgcG93ZXIg c3RhdGUsIHJjPSVkXG4iLAotCQkJICAgICAgIGN0cmwtPmN0cmwtPm5hbWUsIHJjKTsKLQkJCWdv dG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmM7Ci1lcnJvcjoKLQlmb3IgKGkgPSBpIC0g MTsgaSA+PSAwOyBpLS0pIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlpZiAoIWN0 cmwtPmN0cmwpCi0JCQljb250aW51ZTsKLQkJKHZvaWQpZHNpX2N0cmxfc2V0X3Bvd2VyX3N0YXRl KGN0cmwtPmN0cmwsCi0JCQlEU0lfQ1RSTF9QT1dFUl9WUkVHX09GRik7Ci0JfQotCXJldHVybiBy YzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9jdHJsX3Bvd2VyX29mZihzdHJ1Y3QgZHNp X2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNp X2Rpc3BsYXlfY3RybCAqY3RybDsKLQotCS8qIFNlcXVlbmNlIGRvZXMgbm90IG1hdHRlciBmb3Ig c3BsaXQgZHNpIHVzZWNhc2VzICovCi0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291 bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCWlmICghY3RybC0+Y3Ry bCkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX2N0cmxfc2V0X3Bvd2VyX3N0YXRlKGN0cmwt PmN0cmwsCi0JCQlEU0lfQ1RSTF9QT1dFUl9WUkVHX09GRik7Ci0JCWlmIChyYykgewotCQkJcHJf ZXJyKCJbJXNdIEZhaWxlZCB0byBwb3dlciBvZmYsIHJjPSVkXG4iLAotCQkJICAgICAgIGN0cmwt PmN0cmwtPm5hbWUsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci1lcnJvcjoKLQlyZXR1 cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzaV9kaXNwbGF5X3BhcnNlX2NtZGxpbmVfdG9wb2xv Z3koc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAotCQkJCQl1bnNpZ25lZCBpbnQgZGlzcGxh eV90eXBlKQotewotCWNoYXIgKmJvb3Rfc3RyID0gTlVMTDsKLQljaGFyICpzdHIgPSBOVUxMOwot CXVuc2lnbmVkIGxvbmcgdmFsdWU7Ci0KLQlpZiAoZGlzcGxheV90eXBlID49IE1BWF9EU0lfQUNU SVZFX0RJU1BMQVkpIHsKLQkJcHJfZXJyKCJkaXNwbGF5X3R5cGU9JWQgbm90IHN1cHBvcnRlZFxu IiwgZGlzcGxheV90eXBlKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChkaXNwbGF5X3R5cGUgPT0g RFNJX1BSSU1BUlkpCi0JCWJvb3Rfc3RyID0gZHNpX2Rpc3BsYXlfcHJpbWFyeTsKLQllbHNlCi0J CWJvb3Rfc3RyID0gZHNpX2Rpc3BsYXlfc2Vjb25kYXJ5OwotCi0Jc3RyID0gc3RybnN0cihib290 X3N0ciwgIjpjb25maWciLCBzdHJsZW4oYm9vdF9zdHIpKTsKLQlpZiAoIXN0cikKLQkJcmV0dXJu OwotCi0JaWYgKGtzdHJ0b2woc3RyICsgc3RybGVuKCI6Y29uZmlnIiksIElOVF9CQVNFXzEwLAot CQkJCSh1bnNpZ25lZCBsb25nICopJnZhbHVlKSkgewotCQlwcl9lcnIoImludmFsaWQgY29uZmln IGluZGV4IG92ZXJyaWRlOiAlc1xuIiwgYm9vdF9zdHIpOwotCQlyZXR1cm47Ci0JfQotCWRpc3Bs YXktPmNtZGxpbmVfdG9wb2xvZ3kgPSB2YWx1ZTsKLQotCXN0ciA9IHN0cm5zdHIoYm9vdF9zdHIs ICI6dGltaW5nIiwgc3RybGVuKGJvb3Rfc3RyKSk7Ci0JaWYgKCFzdHIpCi0JCXJldHVybjsKLQot CWlmIChrc3RydG9sKHN0ciArIHN0cmxlbigiOnRpbWluZyIpLCBJTlRfQkFTRV8xMCwKLQkJCQko dW5zaWduZWQgbG9uZyAqKSZ2YWx1ZSkpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHRpbWluZyBpbmRl eCBvdmVycmlkZTogJXMuIHJlc2V0dGluZyBib3RoIHRpbWluZyBhbmQgY29uZmlnXG4iLAotCQkJ Ym9vdF9zdHIpOwotCQlkaXNwbGF5LT5jbWRsaW5lX3RvcG9sb2d5ID0gTk9fT1ZFUlJJREU7Ci0J CXJldHVybjsKLQl9Ci0JZGlzcGxheS0+Y21kbGluZV90aW1pbmcgPSB2YWx1ZTsKLX0KLQotLyoq Ci0gKiBkc2lfZGlzcGxheV9uYW1lX2NvbXBhcmUoKS0gY29tcGFyZSB3aGV0aGVyIERTSSBkaXNw bGF5IG5hbWUgbWF0Y2hlcy4KLSAqIEBub2RlOglQb2ludGVyIHRvIGRldmljZSBub2RlIHN0cnVj dHVyZQotICogQGRpc3BsYXlfbmFtZTogTmFtZSBvZiBkaXNwbGF5IHRvIHZhbGlkYXRlCi0gKgot ICogUmV0dXJuOglyZXR1cm5zIGEgYm9vbCBzcGVjaWZ5aW5nIHdoZXRoZXIgZ2l2ZW4gZGlzcGxh eSBpcyBhY3RpdmUKLSAqLwotc3RhdGljIGJvb2wgZHNpX2Rpc3BsYXlfbmFtZV9jb21wYXJlKHN0 cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKLQkJCWNvbnN0IGNoYXIgKmRpc3BsYXlfbmFtZSwgaW50 IGluZGV4KQotewotCWlmIChpbmRleCA+PSBNQVhfRFNJX0FDVElWRV9ESVNQTEFZKSB7Ci0JCXBy X2VycigiSW52YWxpZCBJbmRleFxuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoYm9v dF9kaXNwbGF5c1tpbmRleF0uYm9vdF9kaXNwX2VuKSB7Ci0JCWlmICghKHN0cmNtcCgmYm9vdF9k aXNwbGF5c1tpbmRleF0ubmFtZVswXSwgZGlzcGxheV9uYW1lKSkpIHsKLQkJCWJvb3RfZGlzcGxh eXNbaW5kZXhdLm5vZGUgPSBub2RlOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQl9Ci0JcmV0dXJu IGZhbHNlOwotfQotCi0vKioKLSAqIGRzaV9kaXNwbGF5X3BhcnNlX2Jvb3RfZGlzcGxheV9zZWxl Y3Rpb24oKS0gUGFyc2UgRFNJIGJvb3QgZGlzcGxheSBuYW1lCi0gKgotICogUmV0dXJuOglyZXR1 cm5zIGVycm9yIHN0YXR1cwotICovCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3BhcnNlX2Jvb3Rf ZGlzcGxheV9zZWxlY3Rpb24odm9pZCkKLXsKLQljaGFyICpwb3MgPSBOVUxMOwotCWNoYXIgZGlz cF9idWZbTUFYX0NNRExJTkVfUEFSQU1fTEVOXSA9IHsnXDAnfTsKLQlpbnQgaSwgaiwgbnVtX2Rp c3BsYXlzOwotCi0JaWYgKHN0cmxlbihkc2lfZGlzcGxheV9wcmltYXJ5KSA9PSAwKQotCQlyZXR1 cm4gLUVJTlZBTDsKLQotCWlmICgoc3RybGVuKGRzaV9kaXNwbGF5X3NlY29uZGFyeSkgPiAwKSkK LQkJbnVtX2Rpc3BsYXlzID0gTUFYX0RTSV9BQ1RJVkVfRElTUExBWTsKLQllbHNlIHsKLQkJLyoK LQkJICogSW5pdGlhbGl6ZSBzZWNvbmRhcnkgZHNpIHZhcmlhYmxlcwotCQkgKiBmb3IgdGhlIHNl bmFyaW8gd2hlcmUgZHNpX2Rpc3BsYXkxCi0JCSAqIGlzIG51bGwgYnV0IGRzaV9kaXNwbGF5MCBp cyB2YWxpZAotCQkgKi8KLQotCQkvKiBNYXggbnVtYmVyIG9mIGRpc3BsYXlzIHdpbGwgYmUgb25l LT5vbmx5IFByaW1hcnkgKi8KLQkJbnVtX2Rpc3BsYXlzID0gMTsKLQkJYm9vdF9kaXNwbGF5c1tE U0lfU0VDT05EQVJZXS5pc19wcmltYXJ5ID0gZmFsc2U7Ci0JCWJvb3RfZGlzcGxheXNbRFNJX1NF Q09OREFSWV0ubmFtZVswXSA9ICdcMCc7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG51bV9kaXNw bGF5czsgaSsrKSB7Ci0JCWJvb3RfZGlzcGxheXNbaV0uaXNfcHJpbWFyeSA9IGZhbHNlOwotCQlp ZiAoaSA9PSBEU0lfUFJJTUFSWSkgewotCQkJc3RybGNweShkaXNwX2J1ZiwgJmRzaV9kaXNwbGF5 X3ByaW1hcnlbMF0sCi0JCQkJc2l6ZW9mKGRzaV9kaXNwbGF5X3ByaW1hcnkpKTsKLQkJCXBvcyA9 IHN0cm5zdHIoZGlzcF9idWYsICI6IiwKLQkJCQlzaXplb2YoZHNpX2Rpc3BsYXlfcHJpbWFyeSkp OwotCQl9IGVsc2UgewotCQkJc3RybGNweShkaXNwX2J1ZiwgJmRzaV9kaXNwbGF5X3NlY29uZGFy eVswXSwKLQkJCQlzaXplb2YoZHNpX2Rpc3BsYXlfc2Vjb25kYXJ5KSk7Ci0JCQlwb3MgPSBzdHJu c3RyKGRpc3BfYnVmLCAiOiIsCi0JCQkJc2l6ZW9mKGRzaV9kaXNwbGF5X3NlY29uZGFyeSkpOwot CQl9Ci0JCS8qIFVzZSAnOicgYXMgYSBkZWxpbWl0ZXIgdG8gcmV0cmlldmUgdGhlIGRpc3BsYXkg bmFtZSAqLwotCQlpZiAoIXBvcykgewotCQkJcHJfZGVidWcoImRpc3BsYXkgbmFtZVslc11pcyBu b3QgdmFsaWRcbiIsIGRpc3BfYnVmKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJZm9yIChqID0g MDsgKGRpc3BfYnVmICsgaikgPCBwb3M7IGorKykKLQkJCWJvb3RfZGlzcGxheXNbaV0ubmFtZVtq XSA9ICooZGlzcF9idWYgKyBqKTsKLQkJYm9vdF9kaXNwbGF5c1tpXS5uYW1lW2pdID0gJ1wwJzsK LQotCQlpZiAoaSA9PSBEU0lfUFJJTUFSWSkgewotCQkJYm9vdF9kaXNwbGF5c1tpXS5pc19wcmlt YXJ5ID0gdHJ1ZTsKLQkJCS8qIEN1cnJlbnRseSwgc2Vjb25kYXJ5IERTSSBkaXNwbGF5IGlzIG5v dCBzdXBwb3J0ZWQgKi8KLQkJCWJvb3RfZGlzcGxheXNbaV0uYm9vdF9kaXNwX2VuID0gdHJ1ZTsK LQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiB2YWxpZGF0ZV9kc2lfZGlzcGxheV9z ZWxlY3Rpb24oKS0gdmFsaWRhdGUgYm9vdCBEU0kgZGlzcGxheSBzZWxlY3Rpb24KLSAqCi0gKiBS ZXR1cm46CXJldHVybnMgdHJ1ZSB3aGVuIGJvdGggZGlzcGxheXMgaGF2ZSB1bmlxdWUgY29uZmln dXJhdGlvbnMKLSAqLwotc3RhdGljIGJvb2wgdmFsaWRhdGVfZHNpX2Rpc3BsYXlfc2VsZWN0aW9u KHZvaWQpCi17Ci0JaW50IGksIGo7Ci0JaW50IHJjID0gMDsKLQlpbnQgcGh5X2NvdW50ID0gMDsK LQlpbnQgY3RybF9jb3VudCA9IDA7Ci0JaW50IGluZGV4ID0gMDsKLQlib29sIGN0cmxfZmxhZ3Nb TUFYX0RTSV9BQ1RJVkVfRElTUExBWV0gPSB7ZmFsc2UsIGZhbHNlfTsKLQlib29sIHBoeV9mbGFn c1tNQVhfRFNJX0FDVElWRV9ESVNQTEFZXSA9IHtmYWxzZSwgZmFsc2V9OwotCXN0cnVjdCBkZXZp Y2Vfbm9kZSAqbm9kZSwgKmN0cmxfbm9kZSwgKnBoeV9ub2RlOwotCi0JZm9yIChpID0gMDsgaSA8 IE1BWF9EU0lfQUNUSVZFX0RJU1BMQVk7IGkrKykgewotCQlub2RlID0gYm9vdF9kaXNwbGF5c1tp XS5ub2RlOwotCQljdHJsX2NvdW50ID0gb2ZfY291bnRfcGhhbmRsZV93aXRoX2FyZ3Mobm9kZSwg InFjb20sZHNpLWN0cmwiLAotCQkJCQkJCQlOVUxMKTsKLQotCQlmb3IgKGogPSAwOyBqIDwgY3Ry bF9jb3VudDsgaisrKSB7Ci0JCQljdHJsX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKG5vZGUsICJx Y29tLGRzaS1jdHJsIiwgaik7Ci0JCQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGN0cmxfbm9k ZSwgImNlbGwtaW5kZXgiLAotCQkJCQkmaW5kZXgpOwotCQkJb2Zfbm9kZV9wdXQoY3RybF9ub2Rl KTsKLQkJCWlmIChyYykgewotCQkJCXByX2VycigiY2VsbCBpbmRleCBub3Qgc2V0IGZvciBjdHJs X25vZGVzXG4iKTsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCQlpZiAoY3RybF9mbGFnc1tp bmRleF0pCi0JCQkJcmV0dXJuIGZhbHNlOwotCQkJY3RybF9mbGFnc1tpbmRleF0gPSB0cnVlOwot CQl9Ci0KLQkJcGh5X2NvdW50ID0gb2ZfY291bnRfcGhhbmRsZV93aXRoX2FyZ3Mobm9kZSwgInFj b20sZHNpLXBoeSIsCi0JCQkJCQkJCU5VTEwpOwotCQlmb3IgKGogPSAwOyBqIDwgcGh5X2NvdW50 OyBqKyspIHsKLQkJCXBoeV9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShub2RlLCAicWNvbSxkc2kt cGh5Iiwgaik7Ci0JCQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBoeV9ub2RlLCAiY2VsbC1p bmRleCIsCi0JCQkJCSZpbmRleCk7Ci0JCQlvZl9ub2RlX3B1dChwaHlfbm9kZSk7Ci0JCQlpZiAo cmMpIHsKLQkJCQlwcl9lcnIoImNlbGwgaW5kZXggbm90IHNldCBwaHlfbm9kZXNcbiIpOwotCQkJ CXJldHVybiBmYWxzZTsKLQkJCX0KLQkJCWlmIChwaHlfZmxhZ3NbaW5kZXhdKQotCQkJCXJldHVy biBmYWxzZTsKLQkJCXBoeV9mbGFnc1tpbmRleF0gPSB0cnVlOwotCQl9Ci0JfQotCXJldHVybiB0 cnVlOwotfQotCi1zdHJ1Y3QgZGV2aWNlX25vZGUgKmRzaV9kaXNwbGF5X2dldF9ib290X2Rpc3Bs YXkoaW50IGluZGV4KQotewotCi0JcHJfZXJyKCJpbmRleCA9ICVkXG4iLCBpbmRleCk7Ci0KLQlp ZiAoYm9vdF9kaXNwbGF5c1tpbmRleF0ubm9kZSkKLQkJcmV0dXJuIGJvb3RfZGlzcGxheXNbaW5k ZXhdLm5vZGU7Ci0JZWxzZSBpZiAoKGluZGV4ID09IChNQVhfRFNJX0FDVElWRV9ESVNQTEFZIC0g MSkpCi0JCQkmJiAoZGVmYXVsdF9hY3RpdmVfbm9kZSkpCi0JCXJldHVybiBkZWZhdWx0X2FjdGl2 ZV9ub2RlOwotCWVsc2UKLQkJcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3Bs YXlfcGh5X3Bvd2VyX29uKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMg PSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICpjdHJsOwotCi0JLyogU2Vx dWVuY2UgZG9lcyBub3QgbWF0dGVyIGZvciBzcGxpdCBkc2kgdXNlY2FzZXMgKi8KLQlmb3IgKGkg PSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+ Y3RybFtpXTsKLQkJaWYgKCFjdHJsLT5jdHJsKQotCQkJY29udGludWU7Ci0KLQkJcmMgPSBkc2lf cGh5X3NldF9wb3dlcl9zdGF0ZShjdHJsLT5waHksIHRydWUpOwotCQlpZiAocmMpIHsKLQkJCXBy X2VycigiWyVzXSBGYWlsZWQgdG8gc2V0IHBvd2VyIHN0YXRlLCByYz0lZFxuIiwKLQkJCSAgICAg ICBjdHJsLT5waHktPm5hbWUsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLQlyZXR1 cm4gcmM7Ci1lcnJvcjoKLQlmb3IgKGkgPSBpIC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJY3RybCA9 ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlpZiAoIWN0cmwtPnBoeSkKLQkJCWNvbnRpbnVlOwotCQko dm9pZClkc2lfcGh5X3NldF9wb3dlcl9zdGF0ZShjdHJsLT5waHksIGZhbHNlKTsKLQl9Ci0JcmV0 dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3BoeV9wb3dlcl9vZmYoc3RydWN0 IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0 IGRzaV9kaXNwbGF5X2N0cmwgKmN0cmw7Ci0KLQkvKiBTZXF1ZW5jZSBkb2VzIG5vdCBtYXR0ZXIg Zm9yIHNwbGl0IGRzaSB1c2VjYXNlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJs X2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlpZiAoIWN0cmwt PnBoeSkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX3BoeV9zZXRfcG93ZXJfc3RhdGUoY3Ry bC0+cGh5LCBmYWxzZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIEZhaWxlZCB0byBw b3dlciBvZmYsIHJjPSVkXG4iLAotCQkJICAgICAgIGN0cmwtPmN0cmwtPm5hbWUsIHJjKTsKLQkJ CWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBp bnQgZHNpX2Rpc3BsYXlfc2V0X2Nsa19zcmMoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQot ewotCWludCByYyA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKm1fY3Ry bCwgKmN0cmw7Ci0KLQkvKgotCSAqIEluIGNhc2Ugb2Ygc3BsaXQgRFNJIHVzZWNhc2VzLCB0aGUg Y2xvY2sgZm9yIG1hc3RlciBjb250cm9sbGVyIHNob3VsZAotCSAqIGJlIGVuYWJsZWQgYmVmb3Jl IHRoZSBvdGhlciBjb250cm9sbGVyLiBNYXN0ZXIgY29udHJvbGxlciBpbiB0aGUKLQkgKiBjbG9j ayBjb250ZXh0IHJlZmVycyB0byB0aGUgY29udHJvbGxlciB0aGF0IHNvdXJjZXMgdGhlIGNsb2Nr LgotCSAqLwotCW1fY3RybCA9ICZkaXNwbGF5LT5jdHJsW2Rpc3BsYXktPmNsa19tYXN0ZXJfaWR4 XTsKLQotCXJjID0gZHNpX2N0cmxfc2V0X2Nsb2NrX3NvdXJjZShtX2N0cmwtPmN0cmwsCi0JCSAg ICZkaXNwbGF5LT5jbG9ja19pbmZvLnNyY19jbGtzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJb JXNdIGZhaWxlZCB0byBzZXQgc291cmNlIGNsb2NrcyBmb3IgbWFzdGVyLCByYz0lZFxuIiwKLQkJ CSAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCS8qIFR1cm4gb24g cmVzdCBvZiB0aGUgY29udHJvbGxlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+Y3Ry bF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJaWYgKCFjdHJs LT5jdHJsIHx8IChjdHJsID09IG1fY3RybCkpCi0JCQljb250aW51ZTsKLQotCQlyYyA9IGRzaV9j dHJsX3NldF9jbG9ja19zb3VyY2UoY3RybC0+Y3RybCwKLQkJCSAgICZkaXNwbGF5LT5jbG9ja19p bmZvLnNyY19jbGtzKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHNl dCBzb3VyY2UgY2xvY2tzLCByYz0lZFxuIiwKLQkJCQkgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0J CQlyZXR1cm4gcmM7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rp c3BsYXlfcGh5X3Jlc2V0X2NvbmZpZyhzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCWJv b2wgZW5hYmxlKQotewotCWludCByYyA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5 X2N0cmwgKmN0cmw7Ci0KLQlmb3IgKGkgPSAwIDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkr KykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCXJjID0gZHNpX2N0cmxfcGh5X3Jl c2V0X2NvbmZpZyhjdHJsLT5jdHJsLCBlbmFibGUpOwotCQlpZiAocmMpIHsKLQkJCXByX2Vycigi WyVzXSBmYWlsZWQgdG8gJXMgcGh5IHJlc2V0LCByYz0lZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5 LT5uYW1lLCBlbmFibGUgPyAibWFzayIgOiAidW5tYXNrIiwgcmMpOwotCQkJcmV0dXJuIHJjOwot CQl9Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X2N0cmxfdXBk YXRlKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBp OwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICpjdHJsOwotCi0JZm9yIChpID0gMCA7IGkgPCBk aXNwbGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwot CQlyYyA9IGRzaV9jdHJsX2hvc3RfdGltaW5nX3VwZGF0ZShjdHJsLT5jdHJsKTsKLQkJaWYgKHJj KSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHVwZGF0ZSBob3N0XyVkLCByYz0lZFxuIiwK LQkJCQkgICBkaXNwbGF5LT5uYW1lLCBpLCByYyk7Ci0JCQlnb3RvIGVycm9yX2hvc3RfZGVpbml0 OwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci1lcnJvcl9ob3N0X2RlaW5pdDoKLQlmb3IgKGkgPSBp IC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQkodm9p ZClkc2lfY3RybF9ob3N0X2RlaW5pdChjdHJsLT5jdHJsKTsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19 Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfY3RybF9pbml0KHN0cnVjdCBkc2lfZGlzcGxheSAq ZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9j dHJsICpjdHJsOwotCi0JZm9yIChpID0gMCA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKysp IHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlyYyA9IGRzaV9jdHJsX2hvc3RfaW5p dChjdHJsLT5jdHJsKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGlu aXQgaG9zdF8lZCwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgaSwgcmMpOwot CQkJZ290byBlcnJvcl9ob3N0X2RlaW5pdDsKLQkJfQotCX0KLQotCXJldHVybiAwOwotZXJyb3Jf aG9zdF9kZWluaXQ6Ci0JZm9yIChpID0gaSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCWN0cmwgPSAm ZGlzcGxheS0+Y3RybFtpXTsKLQkJKHZvaWQpZHNpX2N0cmxfaG9zdF9kZWluaXQoY3RybC0+Y3Ry bCk7Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9jdHJsX2Rl aW5pdChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQg aTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqY3RybDsKLQotCWZvciAoaSA9IDAgOyBpIDwg ZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsK LQkJcmMgPSBkc2lfY3RybF9ob3N0X2RlaW5pdChjdHJsLT5jdHJsKTsKLQkJaWYgKHJjKSB7Ci0J CQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGRlaW5pdCBob3N0XyVkLCByYz0lZFxuIiwKLQkJCSAg ICAgICBkaXNwbGF5LT5uYW1lLCBpLCByYyk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0K LXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfY21kX2VuZ2luZV9lbmFibGUoc3RydWN0IGRzaV9kaXNw bGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IGRzaV9kaXNw bGF5X2N0cmwgKm1fY3RybCwgKmN0cmw7Ci0KLQlpZiAoZGlzcGxheS0+Y21kX2VuZ2luZV9yZWZj b3VudCA+IDApIHsKLQkJZGlzcGxheS0+Y21kX2VuZ2luZV9yZWZjb3VudCsrOwotCQlyZXR1cm4g MDsKLQl9Ci0KLQltX2N0cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNwbGF5LT5jbWRfbWFzdGVyX2lk eF07Ci0KLQlyYyA9IGRzaV9jdHJsX3NldF9jbWRfZW5naW5lX3N0YXRlKG1fY3RybC0+Y3RybCwg RFNJX0NUUkxfRU5HSU5FX09OKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0 byBlbmFibGUgY21kIGVuZ2luZSwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCBy Yyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxf Y291bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCWlmICghY3RybC0+ Y3RybCB8fCAoY3RybCA9PSBtX2N0cmwpKQotCQkJY29udGludWU7Ci0KLQkJcmMgPSBkc2lfY3Ry bF9zZXRfY21kX2VuZ2luZV9zdGF0ZShjdHJsLT5jdHJsLAotCQkJCQkJICAgRFNJX0NUUkxfRU5H SU5FX09OKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJsZSBj bWQgZW5naW5lLCByYz0lZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCQln b3RvIGVycm9yX2Rpc2FibGVfbWFzdGVyOwotCQl9Ci0JfQotCi0JZGlzcGxheS0+Y21kX2VuZ2lu ZV9yZWZjb3VudCsrOwotCXJldHVybiByYzsKLWVycm9yX2Rpc2FibGVfbWFzdGVyOgotCSh2b2lk KWRzaV9jdHJsX3NldF9jbWRfZW5naW5lX3N0YXRlKG1fY3RybC0+Y3RybCwgRFNJX0NUUkxfRU5H SU5FX09GRik7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3Bs YXlfY21kX2VuZ2luZV9kaXNhYmxlKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlp bnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICptX2N0cmwsICpj dHJsOwotCi0JaWYgKGRpc3BsYXktPmNtZF9lbmdpbmVfcmVmY291bnQgPT0gMCkgewotCQlwcl9l cnIoIlslc10gSW52YWxpZCByZWZjb3VudFxuIiwgZGlzcGxheS0+bmFtZSk7Ci0JCXJldHVybiAw OwotCX0gZWxzZSBpZiAoZGlzcGxheS0+Y21kX2VuZ2luZV9yZWZjb3VudCA+IDEpIHsKLQkJZGlz cGxheS0+Y21kX2VuZ2luZV9yZWZjb3VudC0tOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQltX2N0cmwg PSAmZGlzcGxheS0+Y3RybFtkaXNwbGF5LT5jbWRfbWFzdGVyX2lkeF07Ci0JZm9yIChpID0gMDsg aSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxb aV07Ci0JCWlmICghY3RybC0+Y3RybCB8fCAoY3RybCA9PSBtX2N0cmwpKQotCQkJY29udGludWU7 Ci0KLQkJcmMgPSBkc2lfY3RybF9zZXRfY21kX2VuZ2luZV9zdGF0ZShjdHJsLT5jdHJsLAotCQkJ CQkJICAgRFNJX0NUUkxfRU5HSU5FX09GRik7Ci0JCWlmIChyYykKLQkJCXByX2VycigiWyVzXSBm YWlsZWQgdG8gZW5hYmxlIGNtZCBlbmdpbmUsIHJjPSVkXG4iLAotCQkJICAgICAgIGRpc3BsYXkt Pm5hbWUsIHJjKTsKLQl9Ci0KLQlyYyA9IGRzaV9jdHJsX3NldF9jbWRfZW5naW5lX3N0YXRlKG1f Y3RybC0+Y3RybCwgRFNJX0NUUkxfRU5HSU5FX09GRik7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vycigi WyVzXSBmYWlsZWQgdG8gZW5hYmxlIGNtZCBlbmdpbmUsIHJjPSVkXG4iLAotCQkgICAgICAgZGlz cGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotZXJyb3I6Ci0JZGlzcGxheS0+ Y21kX2VuZ2luZV9yZWZjb3VudCA9IDA7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRz aV9kaXNwbGF5X2N0cmxfaG9zdF9lbmFibGUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQot ewotCWludCByYyA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKm1fY3Ry bCwgKmN0cmw7Ci0KLQltX2N0cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNwbGF5LT5jbWRfbWFzdGVy X2lkeF07Ci0KLQlyYyA9IGRzaV9jdHJsX3NldF9ob3N0X2VuZ2luZV9zdGF0ZShtX2N0cmwtPmN0 cmwsIERTSV9DVFJMX0VOR0lORV9PTik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWls ZWQgdG8gZW5hYmxlIGhvc3QgZW5naW5lLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5h bWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+ Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJaWYgKCFj dHJsLT5jdHJsIHx8IChjdHJsID09IG1fY3RybCkpCi0JCQljb250aW51ZTsKLQotCQlyYyA9IGRz aV9jdHJsX3NldF9ob3N0X2VuZ2luZV9zdGF0ZShjdHJsLT5jdHJsLAotCQkJCQkJICAgIERTSV9D VFJMX0VOR0lORV9PTik7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBl bmFibGUgc2wgaG9zdCBlbmdpbmUsIHJjPSVkXG4iLAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUs IHJjKTsKLQkJCWdvdG8gZXJyb3JfZGlzYWJsZV9tYXN0ZXI7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4g cmM7Ci1lcnJvcl9kaXNhYmxlX21hc3RlcjoKLQkodm9pZClkc2lfY3RybF9zZXRfaG9zdF9lbmdp bmVfc3RhdGUobV9jdHJsLT5jdHJsLCBEU0lfQ1RSTF9FTkdJTkVfT0ZGKTsKLWVycm9yOgotCXJl dHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9jdHJsX2hvc3RfZGlzYWJsZShz dHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlz dHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqbV9jdHJsLCAqY3RybDsKLQotCW1fY3RybCA9ICZkaXNw bGF5LT5jdHJsW2Rpc3BsYXktPmNtZF9tYXN0ZXJfaWR4XTsKLQlmb3IgKGkgPSAwOyBpIDwgZGlz cGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJ aWYgKCFjdHJsLT5jdHJsIHx8IChjdHJsID09IG1fY3RybCkpCi0JCQljb250aW51ZTsKLQotCQly YyA9IGRzaV9jdHJsX3NldF9ob3N0X2VuZ2luZV9zdGF0ZShjdHJsLT5jdHJsLAotCQkJCQkJICAg IERTSV9DVFJMX0VOR0lORV9PRkYpOwotCQlpZiAocmMpCi0JCQlwcl9lcnIoIlslc10gZmFpbGVk IHRvIGRpc2FibGUgaG9zdCBlbmdpbmUsIHJjPSVkXG4iLAotCQkJICAgICAgIGRpc3BsYXktPm5h bWUsIHJjKTsKLQl9Ci0KLQlyYyA9IGRzaV9jdHJsX3NldF9ob3N0X2VuZ2luZV9zdGF0ZShtX2N0 cmwtPmN0cmwsIERTSV9DVFJMX0VOR0lORV9PRkYpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlsl c10gZmFpbGVkIHRvIGRpc2FibGUgaG9zdCBlbmdpbmUsIHJjPSVkXG4iLAotCQkgICAgICAgZGlz cGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotZXJyb3I6Ci0JcmV0dXJuIHJj OwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3ZpZF9lbmdpbmVfZW5hYmxlKHN0cnVjdCBk c2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBk c2lfZGlzcGxheV9jdHJsICptX2N0cmwsICpjdHJsOwotCi0JbV9jdHJsID0gJmRpc3BsYXktPmN0 cmxbZGlzcGxheS0+dmlkZW9fbWFzdGVyX2lkeF07Ci0KLQlyYyA9IGRzaV9jdHJsX3NldF92aWRf ZW5naW5lX3N0YXRlKG1fY3RybC0+Y3RybCwgRFNJX0NUUkxfRU5HSU5FX09OKTsKLQlpZiAocmMp IHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBlbmFibGUgdmlkIGVuZ2luZSwgcmM9JWRcbiIs Ci0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZm9y IChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3Bs YXktPmN0cmxbaV07Ci0JCWlmICghY3RybC0+Y3RybCB8fCAoY3RybCA9PSBtX2N0cmwpKQotCQkJ Y29udGludWU7Ci0KLQkJcmMgPSBkc2lfY3RybF9zZXRfdmlkX2VuZ2luZV9zdGF0ZShjdHJsLT5j dHJsLAotCQkJCQkJICAgRFNJX0NUUkxfRU5HSU5FX09OKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9l cnIoIlslc10gZmFpbGVkIHRvIGVuYWJsZSB2aWQgZW5naW5lLCByYz0lZFxuIiwKLQkJCSAgICAg ICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yX2Rpc2FibGVfbWFzdGVyOwotCQl9 Ci0JfQotCi0JcmV0dXJuIHJjOwotZXJyb3JfZGlzYWJsZV9tYXN0ZXI6Ci0JKHZvaWQpZHNpX2N0 cmxfc2V0X3ZpZF9lbmdpbmVfc3RhdGUobV9jdHJsLT5jdHJsLCBEU0lfQ1RSTF9FTkdJTkVfT0ZG KTsKLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV92aWRf ZW5naW5lX2Rpc2FibGUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9 IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKm1fY3RybCwgKmN0cmw7Ci0K LQltX2N0cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNwbGF5LT52aWRlb19tYXN0ZXJfaWR4XTsKLQot CWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZk aXNwbGF5LT5jdHJsW2ldOwotCQlpZiAoIWN0cmwtPmN0cmwgfHwgKGN0cmwgPT0gbV9jdHJsKSkK LQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX2N0cmxfc2V0X3ZpZF9lbmdpbmVfc3RhdGUoY3Ry bC0+Y3RybCwKLQkJCQkJCSAgIERTSV9DVFJMX0VOR0lORV9PRkYpOwotCQlpZiAocmMpCi0JCQlw cl9lcnIoIlslc10gZmFpbGVkIHRvIGRpc2FibGUgdmlkIGVuZ2luZSwgcmM9JWRcbiIsCi0JCQkg ICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCX0KLQotCXJjID0gZHNpX2N0cmxfc2V0X3ZpZF9l bmdpbmVfc3RhdGUobV9jdHJsLT5jdHJsLCBEU0lfQ1RSTF9FTkdJTkVfT0ZGKTsKLQlpZiAocmMp Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGlzYWJsZSBtdmlkIGVuZ2luZSwgcmM9JWRcbiIs Ci0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRp YyBpbnQgZHNpX2Rpc3BsYXlfcGh5X2VuYWJsZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkp Ci17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqbV9j dHJsLCAqY3RybDsKLQllbnVtIGRzaV9waHlfcGxsX3NvdXJjZSBtX3NyYyA9IERTSV9QTExfU09V UkNFX1NUQU5EQUxPTkU7Ci0KLQltX2N0cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNwbGF5LT5jbGtf bWFzdGVyX2lkeF07Ci0JaWYgKGRpc3BsYXktPmN0cmxfY291bnQgPiAxKQotCQltX3NyYyA9IERT SV9QTExfU09VUkNFX05BVElWRTsKLQotCXJjID0gZHNpX3BoeV9lbmFibGUobV9jdHJsLT5waHks Ci0JCQkgICAgJmRpc3BsYXktPmNvbmZpZywKLQkJCSAgICBtX3NyYywKLQkJCSAgICB0cnVlKTsK LQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBlbmFibGUgRFNJIFBIWSwgcmM9 JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQot Ci0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQljdHJsID0g JmRpc3BsYXktPmN0cmxbaV07Ci0JCWlmICghY3RybC0+Y3RybCB8fCAoY3RybCA9PSBtX2N0cmwp KQotCQkJY29udGludWU7Ci0KLQkJcmMgPSBkc2lfcGh5X2VuYWJsZShjdHJsLT5waHksCi0JCQkJ ICAgICZkaXNwbGF5LT5jb25maWcsCi0JCQkJICAgIERTSV9QTExfU09VUkNFX05PTl9OQVRJVkUs Ci0JCQkJICAgIHRydWUpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8g ZW5hYmxlIERTSSBQSFksIHJjPSVkXG4iLAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsK LQkJCWdvdG8gZXJyb3JfZGlzYWJsZV9tYXN0ZXI7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmM7Ci0K LWVycm9yX2Rpc2FibGVfbWFzdGVyOgotCSh2b2lkKWRzaV9waHlfZGlzYWJsZShtX2N0cmwtPnBo eSk7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfcGh5 X2Rpc2FibGUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0J aW50IGk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKm1fY3RybCwgKmN0cmw7Ci0KLQltX2N0 cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNwbGF5LT5jbGtfbWFzdGVyX2lkeF07Ci0KLQlmb3IgKGkg PSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+ Y3RybFtpXTsKLQkJaWYgKCFjdHJsLT5jdHJsIHx8IChjdHJsID09IG1fY3RybCkpCi0JCQljb250 aW51ZTsKLQotCQlyYyA9IGRzaV9waHlfZGlzYWJsZShjdHJsLT5waHkpOwotCQlpZiAocmMpCi0J CQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGRpc2FibGUgRFNJIFBIWSwgcmM9JWRcbiIsCi0JCQkg ICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCX0KLQotCXJjID0gZHNpX3BoeV9kaXNhYmxlKG1f Y3RybC0+cGh5KTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGlzYWJsZSBE U0kgUEhZLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQotCXJldHVy biByYzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV93YWtlX3VwKHN0cnVjdCBkc2lfZGlz cGxheSAqZGlzcGxheSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxh eV9icm9hZGNhc3RfY21kKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwKLQkJCQkgICAgIGNv bnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykKLXsKLQlpbnQgcmMgPSAwOwotCXUzMiBmbGFn cywgbV9mbGFnczsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqY3RybCwgKm1fY3RybDsKLQlp bnQgaTsKLQotCW1fZmxhZ3MgPSAoRFNJX0NUUkxfQ01EX0JST0FEQ0FTVCB8IERTSV9DVFJMX0NN RF9CUk9BRENBU1RfTUFTVEVSIHwKLQkJICAgRFNJX0NUUkxfQ01EX0RFRkVSX1RSSUdHRVIgfCBE U0lfQ1RSTF9DTURfRkVUQ0hfTUVNT1JZKTsKLQlmbGFncyA9IChEU0lfQ1RSTF9DTURfQlJPQURD QVNUIHwgRFNJX0NUUkxfQ01EX0RFRkVSX1RSSUdHRVIgfAotCQkgRFNJX0NUUkxfQ01EX0ZFVENI X01FTU9SWSk7Ci0KLQkvKgotCSAqIDEuIFNldHVwIGNvbW1hbmRzIGluIEZJRk8KLQkgKiAyLiBU cmlnZ2VyIGNvbW1hbmRzCi0JICovCi0JbV9jdHJsID0gJmRpc3BsYXktPmN0cmxbZGlzcGxheS0+ Y21kX21hc3Rlcl9pZHhdOwotCXJjID0gZHNpX2N0cmxfY21kX3RyYW5zZmVyKG1fY3RybC0+Y3Ry bCwgbXNnLCBtX2ZsYWdzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGNtZCB0cmFuc2Zl ciBmYWlsZWQgb24gbWFzdGVyLHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMp OwotCQlnb3RvIGVycm9yOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2Nv dW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlpZiAoY3RybCA9PSBt X2N0cmwpCi0JCQljb250aW51ZTsKLQotCQlyYyA9IGRzaV9jdHJsX2NtZF90cmFuc2ZlcihjdHJs LT5jdHJsLCBtc2csIGZsYWdzKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gY21kIHRy YW5zZmVyIGZhaWxlZCwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwot CQkJZ290byBlcnJvcjsKLQkJfQotCi0JCXJjID0gZHNpX2N0cmxfY21kX3R4X3RyaWdnZXIoY3Ry bC0+Y3RybCwgZmxhZ3MpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBjbWQgdHJpZ2dl ciBmYWlsZWQsIHJjPSVkXG4iLAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJCWdv dG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLQlyYyA9IGRzaV9jdHJsX2NtZF90eF90cmlnZ2VyKG1fY3Ry bC0+Y3RybCwgbV9mbGFncyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBjbWQgdHJpZ2dl ciBmYWlsZWQgZm9yIG1hc3RlciwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCBy Yyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRp YyBpbnQgZHNpX2Rpc3BsYXlfcGh5X3N3X3Jlc2V0KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxh eSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICpt X2N0cmwsICpjdHJsOwotCi0JbV9jdHJsID0gJmRpc3BsYXktPmN0cmxbZGlzcGxheS0+Y21kX21h c3Rlcl9pZHhdOwotCi0JcmMgPSBkc2lfY3RybF9waHlfc3dfcmVzZXQobV9jdHJsLT5jdHJsKTsK LQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byByZXNldCBwaHksIHJjPSVkXG4i LCBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZm9yIChpID0gMDsg aSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxb aV07Ci0JCWlmICghY3RybC0+Y3RybCB8fCAoY3RybCA9PSBtX2N0cmwpKQotCQkJY29udGludWU7 Ci0KLQkJcmMgPSBkc2lfY3RybF9waHlfc3dfcmVzZXQoY3RybC0+Y3RybCk7Ci0JCWlmIChyYykg ewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byByZXNldCBwaHksIHJjPSVkXG4iLAotCQkJICAg ICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLWVycm9y OgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfaG9zdF9hdHRhY2goc3RydWN0IG1p cGlfZHNpX2hvc3QgKmhvc3QsCi0JCQkgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kpCi17 Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2hvc3RfZGV0YWNoKHN0cnVjdCBtaXBp X2RzaV9ob3N0ICpob3N0LAotCQkJICAgc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQotewot CXJldHVybiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCBkc2lfaG9zdF90cmFuc2ZlcihzdHJ1Y3Qg bWlwaV9kc2lfaG9zdCAqaG9zdCwKLQkJCQkgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNn KQotewotCXN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSA9IHRvX2RzaV9kaXNwbGF5KGhvc3Qp OwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICpkaXNwbGF5X2N0cmw7Ci0Jc3RydWN0IG1zbV9n ZW1fYWRkcmVzc19zcGFjZSAqYXNwYWNlID0gTlVMTDsKLQlpbnQgcmMgPSAwLCBjbnQgPSAwOwot Ci0JaWYgKCFob3N0IHx8ICFtc2cpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0J CXJldHVybiAwOwotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlfY2xrX2N0cmwoZGlzcGxheS0+ZHNp X2Nsa19oYW5kbGUsCi0JCQlEU0lfQUxMX0NMS1MsIERTSV9DTEtfT04pOwotCWlmIChyYykgewot CQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJsZSBhbGwgRFNJIGNsb2NrcywgcmM9JWRcbiIs Ci0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMg PSBkc2lfZGlzcGxheV93YWtlX3VwKGRpc3BsYXkpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlsl c10gZmFpbGVkIHRvIHdha2UgdXAgZGlzcGxheSwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5 LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3JfZGlzYWJsZV9jbGtzOwotCX0KLQotCXJjID0gZHNp X2Rpc3BsYXlfY21kX2VuZ2luZV9lbmFibGUoZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vy cigiWyVzXSBmYWlsZWQgdG8gZW5hYmxlIGNtZCBlbmdpbmUsIHJjPSVkXG4iLAotCQkgICAgICAg ZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yX2Rpc2FibGVfY2xrczsKLQl9Ci0KLQlp ZiAoZGlzcGxheS0+dHhfY21kX2J1ZiA9PSBOVUxMKSB7Ci0JCWRpc3BsYXktPnR4X2NtZF9idWYg PSBtc21fZ2VtX25ldyhkaXNwbGF5LT5kcm1fZGV2LAotCQkJCVNaXzRLLAotCQkJCU1TTV9CT19V TkNBQ0hFRCk7Ci0KLQkJZGlzcGxheS0+Y21kX2J1ZmZlcl9zaXplID0gU1pfNEs7Ci0KLQkJaWYg KChkaXNwbGF5LT50eF9jbWRfYnVmKSA9PSBOVUxMKSB7Ci0JCQlwcl9lcnIoInZhbHVlIG9mIGRp c3BsYXktPnR4X2NtZF9idWYgaXMgTlVMTCIpOwotCQkJZ290byBlcnJvcl9kaXNhYmxlX2NtZF9l bmdpbmU7Ci0JCX0KLQotCQlhc3BhY2UgPSBtc21fZ2VtX3NtbXVfYWRkcmVzc19zcGFjZV9nZXQo ZGlzcGxheS0+ZHJtX2RldiwKLQkJCQlNU01fU01NVV9ET01BSU5fVU5TRUNVUkUpOwotCQlpZiAo IWFzcGFjZSkgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IGFzcGFjZVxuIik7Ci0JCQlyYyA9 IC1FSU5WQUw7Ci0JCQlnb3RvIGZyZWVfZ2VtOwotCQl9Ci0KLQkJcmMgPSBtc21fZ2VtX2dldF9p b3ZhKGRpc3BsYXktPnR4X2NtZF9idWYsIGFzcGFjZSwKLQkJCQkJJihkaXNwbGF5LT5jbWRfYnVm ZmVyX2lvdmEpKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgdGhlIGlv dmEgcmMgJWRcbiIsIHJjKTsKLQkJCWdvdG8gZnJlZV9nZW07Ci0JCX0KLQotCQlkaXNwbGF5LT52 YWRkciA9Ci0JCQkodm9pZCAqKSBtc21fZ2VtX2dldF92YWRkcihkaXNwbGF5LT50eF9jbWRfYnVm KTsKLQotCQlpZiAoSVNfRVJSX09SX05VTEwoZGlzcGxheS0+dmFkZHIpKSB7Ci0JCQlwcl9lcnIo ImZhaWxlZCB0byBnZXQgdmEgcmMgJWRcbiIsIHJjKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJCWdv dG8gcHV0X2lvdmE7Ci0JCX0KLQotCQlmb3IgKGNudCA9IDA7IGNudCA8IGRpc3BsYXktPmN0cmxf Y291bnQ7IGNudCsrKSB7Ci0JCQlkaXNwbGF5X2N0cmwgPSAmZGlzcGxheS0+Y3RybFtjbnRdOwot CQkJZGlzcGxheV9jdHJsLT5jdHJsLT5jbWRfYnVmZmVyX3NpemUgPSBTWl80SzsKLQkJCWRpc3Bs YXlfY3RybC0+Y3RybC0+Y21kX2J1ZmZlcl9pb3ZhID0KLQkJCQkJCWRpc3BsYXktPmNtZF9idWZm ZXJfaW92YTsKLQkJCWRpc3BsYXlfY3RybC0+Y3RybC0+dmFkZHIgPSBkaXNwbGF5LT52YWRkcjsK LQkJfQotCX0KLQotCWlmIChkaXNwbGF5LT5jdHJsX2NvdW50ID4gMSAmJiAhKG1zZy0+ZmxhZ3Mg JiBNSVBJX0RTSV9NU0dfVU5JQ0FTVCkpIHsKLQkJcmMgPSBkc2lfZGlzcGxheV9icm9hZGNhc3Rf Y21kKGRpc3BsYXksIG1zZyk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGNtZCBicm9h ZGNhc3QgZmFpbGVkLCByYz0lZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0J CQlnb3RvIGVycm9yX2Rpc2FibGVfY21kX2VuZ2luZTsKLQkJfQotCX0gZWxzZSB7Ci0JCWludCBj dHJsX2lkeCA9IChtc2ctPmZsYWdzICYgTUlQSV9EU0lfTVNHX1VOSUNBU1QpID8KLQkJCQltc2ct PmN0cmwgOiAwOwotCi0JCXJjID0gZHNpX2N0cmxfY21kX3RyYW5zZmVyKGRpc3BsYXktPmN0cmxb Y3RybF9pZHhdLmN0cmwsIG1zZywKLQkJCQkJICBEU0lfQ1RSTF9DTURfRkVUQ0hfTUVNT1JZKTsK LQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gY21kIHRyYW5zZmVyIGZhaWxlZCwgcmM9JWRc biIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcl9kaXNhYmxl X2NtZF9lbmdpbmU7Ci0JCX0KLQl9Ci0KLWVycm9yX2Rpc2FibGVfY21kX2VuZ2luZToKLQkodm9p ZClkc2lfZGlzcGxheV9jbWRfZW5naW5lX2Rpc2FibGUoZGlzcGxheSk7Ci1lcnJvcl9kaXNhYmxl X2Nsa3M6Ci0JcmMgPSBkc2lfZGlzcGxheV9jbGtfY3RybChkaXNwbGF5LT5kc2lfY2xrX2hhbmRs ZSwKLQkJCURTSV9BTExfQ0xLUywgRFNJX0NMS19PRkYpOwotCWlmIChyYykgewotCQlwcl9lcnIo Ilslc10gZmFpbGVkIHRvIGRpc2FibGUgYWxsIERTSSBjbG9ja3MsIHJjPSVkXG4iLAotCQkgICAg ICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCX0KLQlyZXR1cm4gcmM7Ci1wdXRfaW92YToKLQltc21f Z2VtX3B1dF9pb3ZhKGRpc3BsYXktPnR4X2NtZF9idWYsIGFzcGFjZSk7Ci1mcmVlX2dlbToKLQlt dXRleF9sb2NrKCZkaXNwbGF5LT5kcm1fZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCW1zbV9nZW1fZnJl ZV9vYmplY3QoZGlzcGxheS0+dHhfY21kX2J1Zik7Ci0JbXV0ZXhfdW5sb2NrKCZkaXNwbGF5LT5k cm1fZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi0KLXN0YXRp YyBzdHJ1Y3QgbWlwaV9kc2lfaG9zdF9vcHMgZHNpX2hvc3Rfb3BzID0gewotCS5hdHRhY2ggPSBk c2lfaG9zdF9hdHRhY2gsCi0JLmRldGFjaCA9IGRzaV9ob3N0X2RldGFjaCwKLQkudHJhbnNmZXIg PSBkc2lfaG9zdF90cmFuc2ZlciwKLX07Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfbWlwaV9o b3N0X2luaXQoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0J c3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QgPSAmZGlzcGxheS0+aG9zdDsKLQotCWhvc3QtPmRl diA9ICZkaXNwbGF5LT5wZGV2LT5kZXY7Ci0JaG9zdC0+b3BzID0gJmRzaV9ob3N0X29wczsKLQot CXJjID0gbWlwaV9kc2lfaG9zdF9yZWdpc3Rlcihob3N0KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJy KCJbJXNdIGZhaWxlZCB0byByZWdpc3RlciBtaXBpIGRzaSBob3N0LCByYz0lZFxuIiwKLQkJICAg ICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVycm9yOgotCXJl dHVybiByYzsKLX0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfbWlwaV9ob3N0X2RlaW5pdChzdHJ1 Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgbWlwaV9k c2lfaG9zdCAqaG9zdCA9ICZkaXNwbGF5LT5ob3N0OwotCi0JbWlwaV9kc2lfaG9zdF91bnJlZ2lz dGVyKGhvc3QpOwotCi0JaG9zdC0+ZGV2ID0gTlVMTDsKLQlob3N0LT5vcHMgPSBOVUxMOwotCi0J cmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X2Nsb2Nrc19kZWluaXQoc3Ry dWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9j bGtfbGlua19zZXQgKnNyYyA9ICZkaXNwbGF5LT5jbG9ja19pbmZvLnNyY19jbGtzOwotCXN0cnVj dCBkc2lfY2xrX2xpbmtfc2V0ICptdXggPSAmZGlzcGxheS0+Y2xvY2tfaW5mby5tdXhfY2xrczsK LQlzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCAqc2hhZG93ID0gJmRpc3BsYXktPmNsb2NrX2luZm8u c2hhZG93X2Nsa3M7Ci0KLQlpZiAoc3JjLT5ieXRlX2NsaykgewotCQlkZXZtX2Nsa19wdXQoJmRp c3BsYXktPnBkZXYtPmRldiwgc3JjLT5ieXRlX2Nsayk7Ci0JCXNyYy0+Ynl0ZV9jbGsgPSBOVUxM OwotCX0KLQotCWlmIChzcmMtPnBpeGVsX2NsaykgewotCQlkZXZtX2Nsa19wdXQoJmRpc3BsYXkt PnBkZXYtPmRldiwgc3JjLT5waXhlbF9jbGspOwotCQlzcmMtPnBpeGVsX2NsayA9IE5VTEw7Ci0J fQotCi0JaWYgKG11eC0+Ynl0ZV9jbGspIHsKLQkJZGV2bV9jbGtfcHV0KCZkaXNwbGF5LT5wZGV2 LT5kZXYsIG11eC0+Ynl0ZV9jbGspOwotCQltdXgtPmJ5dGVfY2xrID0gTlVMTDsKLQl9Ci0KLQlp ZiAobXV4LT5waXhlbF9jbGspIHsKLQkJZGV2bV9jbGtfcHV0KCZkaXNwbGF5LT5wZGV2LT5kZXYs IG11eC0+cGl4ZWxfY2xrKTsKLQkJbXV4LT5waXhlbF9jbGsgPSBOVUxMOwotCX0KLQotCWlmIChz aGFkb3ctPmJ5dGVfY2xrKSB7Ci0JCWRldm1fY2xrX3B1dCgmZGlzcGxheS0+cGRldi0+ZGV2LCBz aGFkb3ctPmJ5dGVfY2xrKTsKLQkJc2hhZG93LT5ieXRlX2NsayA9IE5VTEw7Ci0JfQotCi0JaWYg KHNoYWRvdy0+cGl4ZWxfY2xrKSB7Ci0JCWRldm1fY2xrX3B1dCgmZGlzcGxheS0+cGRldi0+ZGV2 LCBzaGFkb3ctPnBpeGVsX2Nsayk7Ci0JCXNoYWRvdy0+cGl4ZWxfY2xrID0gTlVMTDsKLQl9Ci0K LQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfY2xvY2tzX2luaXQoc3Ry dWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9j bGtfbGlua19zZXQgKnNyYyA9ICZkaXNwbGF5LT5jbG9ja19pbmZvLnNyY19jbGtzOwotCXN0cnVj dCBkc2lfY2xrX2xpbmtfc2V0ICptdXggPSAmZGlzcGxheS0+Y2xvY2tfaW5mby5tdXhfY2xrczsK LQlzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCAqc2hhZG93ID0gJmRpc3BsYXktPmNsb2NrX2luZm8u c2hhZG93X2Nsa3M7Ci0KLQlzcmMtPmJ5dGVfY2xrID0gZGV2bV9jbGtfZ2V0KCZkaXNwbGF5LT5w ZGV2LT5kZXYsICJzcmNfYnl0ZV9jbGsiKTsKLQlpZiAoSVNfRVJSX09SX05VTEwoc3JjLT5ieXRl X2NsaykpIHsKLQkJcmMgPSBQVFJfRVJSKHNyYy0+Ynl0ZV9jbGspOwotCQlzcmMtPmJ5dGVfY2xr ID0gTlVMTDsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IHNyY19ieXRlX2NsaywgcmM9JWRcbiIs IHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlzcmMtPnBpeGVsX2NsayA9IGRldm1fY2xrX2dl dCgmZGlzcGxheS0+cGRldi0+ZGV2LCAic3JjX3BpeGVsX2NsayIpOwotCWlmIChJU19FUlJfT1Jf TlVMTChzcmMtPnBpeGVsX2NsaykpIHsKLQkJcmMgPSBQVFJfRVJSKHNyYy0+cGl4ZWxfY2xrKTsK LQkJc3JjLT5waXhlbF9jbGsgPSBOVUxMOwotCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgc3JjX3Bp eGVsX2NsaywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQltdXgtPmJ5dGVf Y2xrID0gZGV2bV9jbGtfZ2V0KCZkaXNwbGF5LT5wZGV2LT5kZXYsICJtdXhfYnl0ZV9jbGsiKTsK LQlpZiAoSVNfRVJSX09SX05VTEwobXV4LT5ieXRlX2NsaykpIHsKLQkJcmMgPSBQVFJfRVJSKG11 eC0+Ynl0ZV9jbGspOwotCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIGdldCBtdXhfYnl0ZV9jbGssIHJj PSVkXG4iLCByYyk7Ci0JCW11eC0+Ynl0ZV9jbGsgPSBOVUxMOwotCQkvKgotCQkgKiBTa2lwIGdl dHRpbmcgcmVzdCBvZiBjbG9ja3Mgc2luY2Ugb25lIGZhaWxlZC4gVGhpcyBpcyBhCi0JCSAqIG5v bi1jcml0aWNhbCBmYWlsdXJlIHNpbmNlIHRoZXNlIGNsb2NrcyBhcmUgcmVxdWllZCBvbmx5IGZv cgotCQkgKiBkeW5hbWljIHJlZnJlc2ggdXNlIGNhc2VzLgotCQkgKi8KLQkJcmMgPSAwOwotCQln b3RvIGRvbmU7Ci0JfTsKLQotCW11eC0+cGl4ZWxfY2xrID0gZGV2bV9jbGtfZ2V0KCZkaXNwbGF5 LT5wZGV2LT5kZXYsICJtdXhfcGl4ZWxfY2xrIik7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKG11eC0+ cGl4ZWxfY2xrKSkgewotCQlyYyA9IFBUUl9FUlIobXV4LT5waXhlbF9jbGspOwotCQltdXgtPnBp eGVsX2NsayA9IE5VTEw7Ci0JCXByX2RlYnVnKCJmYWlsZWQgdG8gZ2V0IG11eF9waXhlbF9jbGss IHJjPSVkXG4iLCByYyk7Ci0JCS8qCi0JCSAqIFNraXAgZ2V0dGluZyByZXN0IG9mIGNsb2NrcyBz aW5jZSBvbmUgZmFpbGVkLiBUaGlzIGlzIGEKLQkJICogbm9uLWNyaXRpY2FsIGZhaWx1cmUgc2lu Y2UgdGhlc2UgY2xvY2tzIGFyZSByZXF1aWVkIG9ubHkgZm9yCi0JCSAqIGR5bmFtaWMgcmVmcmVz aCB1c2UgY2FzZXMuCi0JCSAqLwotCQlyYyA9IDA7Ci0JCWdvdG8gZG9uZTsKLQl9OwotCi0Jc2hh ZG93LT5ieXRlX2NsayA9IGRldm1fY2xrX2dldCgmZGlzcGxheS0+cGRldi0+ZGV2LCAic2hhZG93 X2J5dGVfY2xrIik7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKHNoYWRvdy0+Ynl0ZV9jbGspKSB7Ci0J CXJjID0gUFRSX0VSUihzaGFkb3ctPmJ5dGVfY2xrKTsKLQkJc2hhZG93LT5ieXRlX2NsayA9IE5V TEw7Ci0JCXByX2VycigiZmFpbGVkIHRvIGdldCBzaGFkb3dfYnl0ZV9jbGssIHJjPSVkXG4iLCBy Yyk7Ci0JCS8qCi0JCSAqIFNraXAgZ2V0dGluZyByZXN0IG9mIGNsb2NrcyBzaW5jZSBvbmUgZmFp bGVkLiBUaGlzIGlzIGEKLQkJICogbm9uLWNyaXRpY2FsIGZhaWx1cmUgc2luY2UgdGhlc2UgY2xv Y2tzIGFyZSByZXF1aWVkIG9ubHkgZm9yCi0JCSAqIGR5bmFtaWMgcmVmcmVzaCB1c2UgY2FzZXMu Ci0JCSAqLwotCQlyYyA9IDA7Ci0JCWdvdG8gZG9uZTsKLQl9OwotCi0Jc2hhZG93LT5waXhlbF9j bGsgPSBkZXZtX2Nsa19nZXQoJmRpc3BsYXktPnBkZXYtPmRldiwKLQkJCQkJICJzaGFkb3dfcGl4 ZWxfY2xrIik7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKHNoYWRvdy0+cGl4ZWxfY2xrKSkgewotCQly YyA9IFBUUl9FUlIoc2hhZG93LT5waXhlbF9jbGspOwotCQlzaGFkb3ctPnBpeGVsX2NsayA9IE5V TEw7Ci0JCXByX2VycigiZmFpbGVkIHRvIGdldCBzaGFkb3dfcGl4ZWxfY2xrLCByYz0lZFxuIiwg cmMpOwotCQkvKgotCQkgKiBTa2lwIGdldHRpbmcgcmVzdCBvZiBjbG9ja3Mgc2luY2Ugb25lIGZh aWxlZC4gVGhpcyBpcyBhCi0JCSAqIG5vbi1jcml0aWNhbCBmYWlsdXJlIHNpbmNlIHRoZXNlIGNs b2NrcyBhcmUgcmVxdWllZCBvbmx5IGZvcgotCQkgKiBkeW5hbWljIHJlZnJlc2ggdXNlIGNhc2Vz LgotCQkgKi8KLQkJcmMgPSAwOwotCQlnb3RvIGRvbmU7Ci0JfTsKLQotZG9uZToKLQlyZXR1cm4g MDsKLWVycm9yOgotCSh2b2lkKWRzaV9kaXNwbGF5X2Nsb2Nrc19kZWluaXQoZGlzcGxheSk7Ci0J cmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X2Nsa19jdHJsX2NiKHZvaWQg KnByaXYsCi0Jc3RydWN0IGRzaV9jbGtfY3RybF9pbmZvIGNsa19zdGF0ZV9pbmZvKQotewotCWlu dCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5ID0gTlVMTDsKLQl2b2lkICpj bGtfaGFuZGxlID0gTlVMTDsKLQotCWlmICghcHJpdikgewotCQlwcl9lcnIoIkludmFsaWQgcGFy YW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZGlzcGxheSA9IHByaXY7Ci0KLQlp ZiAoY2xrX3N0YXRlX2luZm8uY2xpZW50ID09IERTSV9DTEtfUkVRX01EUF9DTElFTlQpIHsKLQkJ Y2xrX2hhbmRsZSA9IGRpc3BsYXktPm1kcF9jbGtfaGFuZGxlOwotCX0gZWxzZSBpZiAoY2xrX3N0 YXRlX2luZm8uY2xpZW50ID09IERTSV9DTEtfUkVRX0RTSV9DTElFTlQpIHsKLQkJY2xrX2hhbmRs ZSA9IGRpc3BsYXktPmRzaV9jbGtfaGFuZGxlOwotCX0gZWxzZSB7Ci0JCXByX2VycigiaW52YWxp ZCBjbGsgaGFuZGxlLCByZXR1cm4gZXJyb3JcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0K LQkvKgotCSAqIFRPRE86IFdhaXQgZm9yIENNRF9NRFBfRE9ORSBpbnRlcnJ1cHQgaWYgTURQIGNs aWVudCB0cmllcwotCSAqIHRvIHR1cm4gb2ZmIERTSSBjbG9ja3MuCi0JICovCi0JcmMgPSBkc2lf ZGlzcGxheV9jbGtfY3RybChjbGtfaGFuZGxlLAotCQljbGtfc3RhdGVfaW5mby5jbGtfdHlwZSwg Y2xrX3N0YXRlX2luZm8uY2xrX3N0YXRlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZh aWxlZCB0byAlZCBEU0kgJWQgY2xvY2tzLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5h bWUsIGNsa19zdGF0ZV9pbmZvLmNsa19zdGF0ZSwKLQkJICAgICAgIGNsa19zdGF0ZV9pbmZvLmNs a190eXBlLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBkc2lf cHJlX2Nsa29mZl9jYih2b2lkICpwcml2LAotCQkJICAgZW51bSBkc2lfY2xrX3R5cGUgY2xrLAot CQkJICAgZW51bSBkc2lfY2xrX3N0YXRlIG5ld19zdGF0ZSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0 cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSA9IHByaXY7Ci0KLQlpZiAoKGNsayAmIERTSV9MSU5L X0NMSykgJiYgKG5ld19zdGF0ZSA9PSBEU0lfQ0xLX09GRikpIHsKLQkJLyoKLQkJICogSWYgVUxQ UyBmZWF0dXJlIGlzIGVuYWJsZWQsIGVudGVyIFVMUFMgZmlyc3QuCi0JCSAqLwotCQlpZiAoZHNp X3BhbmVsX2luaXRpYWxpemVkKGRpc3BsYXktPnBhbmVsKSAmJgotCQkJZHNpX3BhbmVsX3VscHNf ZmVhdHVyZV9lbmFibGVkKGRpc3BsYXktPnBhbmVsKSkgewotCQkJcmMgPSBkc2lfZGlzcGxheV9z ZXRfdWxwcyhkaXNwbGF5LCB0cnVlKTsKLQkJCWlmIChyYykgewotCQkJCXByX2VycigiJXM6IGZh aWxlZCBlbmFibGUgdWxwcywgcmMgPSAlZFxuIiwKLQkJCSAgICAgICBfX2Z1bmNfXywgcmMpOwot CQkJfQotCQl9Ci0JfQotCi0JaWYgKChjbGsgJiBEU0lfQ09SRV9DTEspICYmIChuZXdfc3RhdGUg PT0gRFNJX0NMS19PRkYpKSB7Ci0JCS8qCi0JCSAqIEVuYWJsZSBEU0kgY2xhbXBzIG9ubHkgaWYg ZW50ZXJpbmcgaWRsZSBwb3dlciBjb2xsYXBzZS4KLQkJICovCi0JCWlmIChkc2lfcGFuZWxfaW5p dGlhbGl6ZWQoZGlzcGxheS0+cGFuZWwpKSB7Ci0JCQlkc2lfZGlzcGxheV9waHlfaWRsZV9vZmYo ZGlzcGxheSk7Ci0JCQlyYyA9IGRzaV9kaXNwbGF5X3NldF9jbGFtcChkaXNwbGF5LCB0cnVlKTsK LQkJCWlmIChyYykKLQkJCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gZW5hYmxlIGRzaSBjbGFtcHMu IHJjPSVkXG4iLAotCQkJCQlfX2Z1bmNfXywgcmMpOwotCi0JCQlyYyA9IGRzaV9kaXNwbGF5X3Bo eV9yZXNldF9jb25maWcoZGlzcGxheSwgZmFsc2UpOwotCQkJaWYgKHJjKQotCQkJCXByX2Vycigi JXM6IEZhaWxlZCB0byByZXNldCBwaHksIHJjPSVkXG4iLAotCQkJCQkJX19mdW5jX18sIHJjKTsK LQkJfSBlbHNlIHsKLQkJCS8qIE1ha2Ugc3VyZSB0aGF0IGNvbnRyb2xsZXIgaXMgbm90IGluIFVM UFMgc3RhdGUgd2hlbgotCQkJICogdGhlIERTSSBsaW5rIGlzIG5vdCBhY3RpdmUuCi0JCQkgKi8K LQkJCXJjID0gZHNpX2Rpc3BsYXlfc2V0X3VscHMoZGlzcGxheSwgZmFsc2UpOwotCQkJaWYgKHJj KQotCQkJCXByX2VycigiJXM6IGZhaWxlZCB0byBkaXNhYmxlIHVscHMuIHJjPSVkXG4iLAotCQkJ CQlfX2Z1bmNfXywgcmMpOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX3Bv c3RfY2xrb25fY2Iodm9pZCAqcHJpdiwKLQkJCSAgIGVudW0gZHNpX2Nsa190eXBlIGNsaywKLQkJ CSAgIGVudW0gZHNpX2Nsa19zdGF0ZSBjdXJyX3N0YXRlKQotewotCWludCByYyA9IDA7Ci0Jc3Ry dWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5ID0gcHJpdjsKLQlib29sIG1tc3NfY2xhbXAgPSBmYWxz ZTsKLQotCWlmIChjbGsgJiBEU0lfQ09SRV9DTEspIHsKLQkJbW1zc19jbGFtcCA9IGRpc3BsYXkt PmNsYW1wX2VuYWJsZWQ7Ci0JCS8qCi0JCSAqIGNvbnRyb2xsZXIgc2V0dXAgaXMgbmVlZGVkIGlm IGNvbWluZyBvdXQgb2YgaWRsZQotCQkgKiBwb3dlciBjb2xsYXBzZSB3aXRoIGNsYW1wcyBlbmFi bGVkLgotCQkgKi8KLQkJaWYgKG1tc3NfY2xhbXApCi0JCQlkc2lfZGlzcGxheV9jdHJsX3NldHVw KGRpc3BsYXkpOwotCi0JCWlmIChkaXNwbGF5LT51bHBzX2VuYWJsZWQgJiYgbW1zc19jbGFtcCkg ewotCQkJLyoKLQkJCSAqIFVMUFMgRW50cnkgUmVxdWVzdC4gVGhpcyBpcyBuZWVkZWQgaWYgdGhl IGxhbmVzIHdlcmUKLQkJCSAqIGluIFVMUFMgcHJpb3IgdG8gcG93ZXIgY29sbGFwc2UsIHNpbmNl IGFmdGVyCi0JCQkgKiBwb3dlciBjb2xsYXBzZSBhbmQgcmVzZXQsIHRoZSBEU0kgY29udHJvbGxl ciByZXNldHMKLQkJCSAqIGJhY2sgdG8gaWRsZSBzdGF0ZSBhbmQgbm90IFVMUFMuIFRoaXMgdWxw cyBlbnRyeQotCQkJICogcmVxdWVzdCB3aWxsIHRyYW5zaXRpb24gdGhlIHN0YXRlIG9mIHRoZSBE U0kKLQkJCSAqIGNvbnRyb2xsZXIgdG8gVUxQUyB3aGljaCB3aWxsIG1hdGNoIHRoZSBzdGF0ZSBv ZiB0aGUKLQkJCSAqIERTSSBwaHkuIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBwcmlvciB0byBkaXNh YmxpbmcKLQkJCSAqIHRoZSBEU0kgY2xhbXBzLgotCQkJICoKLQkJCSAqIEFsc28sIHJlc2V0IHRo ZSB1bHBzIGZsYWcgc28gdGhhdCB1bHBzX2NvbmZpZwotCQkJICogZnVuY3Rpb24gd291bGQgcmVj b25maWd1cmUgdGhlIGNvbnRyb2xsZXIgc3RhdGUgdG8KLQkJCSAqIFVMUFMuCi0JCQkgKi8KLQkJ CWRpc3BsYXktPnVscHNfZW5hYmxlZCA9IGZhbHNlOwotCQkJcmMgPSBkc2lfZGlzcGxheV9zZXRf dWxwcyhkaXNwbGF5LCB0cnVlKTsKLQkJCWlmIChyYykgewotCQkJCXByX2VycigiJXM6IEZhaWxl ZCB0byBlbnRlciBVTFBTLiByYz0lZFxuIiwKLQkJCQkJX19mdW5jX18sIHJjKTsKLQkJCQlnb3Rv IGVycm9yOwotCQkJfQotCQl9Ci0KLQkJcmMgPSBkc2lfZGlzcGxheV9waHlfcmVzZXRfY29uZmln KGRpc3BsYXksIHRydWUpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiJXM6IEZhaWxlZCB0byBy ZXNldCBwaHksIHJjPSVkXG4iLAotCQkJCQkJX19mdW5jX18sIHJjKTsKLQkJCWdvdG8gZXJyb3I7 Ci0JCX0KLQotCQlyYyA9IGRzaV9kaXNwbGF5X3NldF9jbGFtcChkaXNwbGF5LCBmYWxzZSk7Ci0J CWlmIChyYykgewotCQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGRpc2FibGUgZHNpIGNsYW1wcy4g cmM9JWRcbiIsCi0JCQkJX19mdW5jX18sIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQotCQkv KgotCQkgKiBQaHkgc2V0dXAgaXMgbmVlZGVkIGlmIGNvbWluZyBvdXQgb2YgaWRsZQotCQkgKiBw b3dlciBjb2xsYXBzZSB3aXRoIGNsYW1wcyBlbmFibGVkLgotCQkgKi8KLQkJaWYgKGRpc3BsYXkt PnBoeV9pZGxlX3Bvd2VyX29mZiB8fCBtbXNzX2NsYW1wKQotCQkJZHNpX2Rpc3BsYXlfcGh5X2lk bGVfb24oZGlzcGxheSwgbW1zc19jbGFtcCk7Ci0JfQotCWlmIChjbGsgJiBEU0lfTElOS19DTEsp IHsKLQkJaWYgKGRpc3BsYXktPnVscHNfZW5hYmxlZCkgewotCQkJcmMgPSBkc2lfZGlzcGxheV9z ZXRfdWxwcyhkaXNwbGF5LCBmYWxzZSk7Ci0JCQlpZiAocmMpIHsKLQkJCQlwcl9lcnIoIiVzOiBm YWlsZWQgdG8gZGlzYWJsZSB1bHBzLCByYz0gJWRcbiIsCi0JCQkJICAgICAgIF9fZnVuY19fLCBy Yyk7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJfQotCX0KLWVycm9yOgotCXJldHVybiByYzsK LX0KLQotaW50IGRzaV9wb3N0X2Nsa29mZl9jYih2b2lkICpwcml2LAotCQkJICAgIGVudW0gZHNp X2Nsa190eXBlIGNsa190eXBlLAotCQkJICAgIGVudW0gZHNpX2Nsa19zdGF0ZSBjdXJyX3N0YXRl KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5ID0gcHJpdjsK LQotCWlmICghZGlzcGxheSkgewotCQlwcl9lcnIoIiVzOiBJbnZhbGlkIGFyZ1xuIiwgX19mdW5j X18pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoKGNsa190eXBlICYgRFNJX0NPUkVf Q0xLKSAmJgotCSAgICAoY3Vycl9zdGF0ZSA9PSBEU0lfQ0xLX09GRikpIHsKLQotCQlyYyA9IGRz aV9kaXNwbGF5X3BoeV9wb3dlcl9vZmYoZGlzcGxheSk7Ci0JCWlmIChyYykKLQkJCXByX2Vycigi WyVzXSBmYWlsZWQgdG8gcG93ZXIgb2ZmIFBIWSwgcmM9JWRcbiIsCi0JCQkJICAgZGlzcGxheS0+ bmFtZSwgcmMpOwotCi0JCXJjID0gZHNpX2Rpc3BsYXlfY3RybF9wb3dlcl9vZmYoZGlzcGxheSk7 Ci0JCWlmIChyYykKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gcG93ZXIgRFNJIHZyZWdzLCBy Yz0lZFxuIiwKLQkJCQkgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JfQotCXJldHVybiByYzsKLX0K LQotaW50IGRzaV9wcmVfY2xrb25fY2Iodm9pZCAqcHJpdiwKLQkJCSAgZW51bSBkc2lfY2xrX3R5 cGUgY2xrX3R5cGUsCi0JCQkgIGVudW0gZHNpX2Nsa19zdGF0ZSBuZXdfc3RhdGUpCi17Ci0JaW50 IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkgPSBwcml2OwotCi0JaWYgKCFk aXNwbGF5KSB7Ci0JCXByX2VycigiJXM6IGludmFsaWQgaW5wdXRcbiIsIF9fZnVuY19fKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKChjbGtfdHlwZSAmIERTSV9DT1JFX0NMSykgJiYg KG5ld19zdGF0ZSA9PSBEU0lfQ0xLX09OKSkgewotCQkvKgotCQkgKiBFbmFibGUgRFNJIGNvcmUg cG93ZXIKLQkJICogMS4+IFBBTkVMX1BNIGFyZSBjb250cm9sbGVkIGFzIHBhcnQgb2YKLQkJICog ICAgIHBhbmVsX3Bvd2VyX2N0cmwuIE5lZWRlZCBub3QgYmUgaGFuZGxlZCBoZXJlLgotCQkgKiAy Lj4gQ09SRV9QTSBhcmUgY29udHJvbGxlZCBieSBkc2kgY2xrIG1hbmFnZXIuCi0JCSAqIDMuPiBD VFJMX1BNIG5lZWQgdG8gYmUgZW5hYmxlZC9kaXNhYmxlZAotCQkgKiAgICAgb25seSBkdXJpbmcg dW5ibGFuay9ibGFuay4gVGhlaXIgc3RhdGUgc2hvdWxkCi0JCSAqICAgICBub3QgYmUgY2hhbmdl ZCBkdXJpbmcgc3RhdGljIHNjcmVlbi4KLQkJICovCi0KLQkJcmMgPSBkc2lfZGlzcGxheV9jdHJs X3Bvd2VyX29uKGRpc3BsYXkpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBmYWlsZWQg dG8gcG93ZXIgb24gZHNpIGNvbnRyb2xsZXJzLCByYz0lZFxuIiwKLQkJCQkgICBkaXNwbGF5LT5u YW1lLCByYyk7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQotCQlyYyA9IGRzaV9kaXNwbGF5X3BoeV9w b3dlcl9vbihkaXNwbGF5KTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRv IHBvd2VyIG9uIGRzaSBwaHksIHJjID0gJWRcbiIsCi0JCQkJICAgZGlzcGxheS0+bmFtZSwgcmMp OwotCQkJcmV0dXJuIHJjOwotCQl9Ci0KLQkJcHJfZGVidWcoIiVzOiBFbmFibGUgRFNJIGNvcmUg cG93ZXJcbiIsIF9fZnVuY19fKTsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lk IF9fc2V0X2xhbmVfbWFwX3YyKHU4ICpsYW5lX21hcF92MiwKLQllbnVtIGRzaV9waHlfZGF0YV9s YW5lcyBsYW5lMCwKLQllbnVtIGRzaV9waHlfZGF0YV9sYW5lcyBsYW5lMSwKLQllbnVtIGRzaV9w aHlfZGF0YV9sYW5lcyBsYW5lMiwKLQllbnVtIGRzaV9waHlfZGF0YV9sYW5lcyBsYW5lMykKLXsK LQlsYW5lX21hcF92MltEU0lfTE9HSUNBTF9MQU5FXzBdID0gbGFuZTA7Ci0JbGFuZV9tYXBfdjJb RFNJX0xPR0lDQUxfTEFORV8xXSA9IGxhbmUxOwotCWxhbmVfbWFwX3YyW0RTSV9MT0dJQ0FMX0xB TkVfMl0gPSBsYW5lMjsKLQlsYW5lX21hcF92MltEU0lfTE9HSUNBTF9MQU5FXzNdID0gbGFuZTM7 Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfcGFyc2VfbGFuZV9tYXAoc3RydWN0IGRzaV9k aXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDAsIGkgPSAwOwotCWNvbnN0IGNoYXIgKmRh dGE7Ci0JdTggdGVtcFtEU0lfTEFORV9NQVggLSAxXTsKLQotCWlmICghZGlzcGxheSkgewotCQlw cl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyog bGFuZS1tYXAtdjIgc3VwZXJzZWRlcyBsYW5lLW1hcC12MSBzZXR0aW5nICovCi0JcmMgPSBvZl9w cm9wZXJ0eV9yZWFkX3U4X2FycmF5KGRpc3BsYXktPnBkZXYtPmRldi5vZl9ub2RlLAotCQkicWNv bSxsYW5lLW1hcC12MiIsIHRlbXAsIChEU0lfTEFORV9NQVggLSAxKSk7Ci0JaWYgKCFyYykgewot CQlmb3IgKGkgPSBEU0lfTE9HSUNBTF9MQU5FXzA7IGkgPCAoRFNJX0xBTkVfTUFYIC0gMSk7IGkr KykKLQkJCWRpc3BsYXktPmxhbmVfbWFwLmxhbmVfbWFwX3YyW2ldID0gQklUKHRlbXBbaV0pOwot CQlyZXR1cm4gMDsKLQl9IGVsc2UgaWYgKHJjICE9IEVJTlZBTCkgewotCQlwcl9kZWJ1ZygiSW5j b3JyZWN0IG1hcHBpbmcsIGNvbmZpZ3VyZSBkZWZhdWx0XG4iKTsKLQkJZ290byBzZXRfZGVmYXVs dDsKLQl9Ci0KLQkvKiBsYW5lLW1hcCBvbGRlciB2ZXJzaW9uLCBmb3IgRFNJIGNvbnRyb2xsZXIg dmVyc2lvbiA8IDIuMCAqLwotCWRhdGEgPSBvZl9nZXRfcHJvcGVydHkoZGlzcGxheS0+cGRldi0+ ZGV2Lm9mX25vZGUsCi0JCSJxY29tLGxhbmUtbWFwIiwgTlVMTCk7Ci0JaWYgKCFkYXRhKQotCQln b3RvIHNldF9kZWZhdWx0OwotCi0JaWYgKCFzdHJjbXAoZGF0YSwgImxhbmVfbWFwXzMwMTIiKSkg ewotCQlkaXNwbGF5LT5sYW5lX21hcC5sYW5lX21hcF92MSA9IERTSV9MQU5FX01BUF8zMDEyOwot CQlfX3NldF9sYW5lX21hcF92MihkaXNwbGF5LT5sYW5lX21hcC5sYW5lX21hcF92MiwKLQkJCURT SV9QSFlTSUNBTF9MQU5FXzEsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8yLAotCQkJRFNJX1BIWVNJ Q0FMX0xBTkVfMywKLQkJCURTSV9QSFlTSUNBTF9MQU5FXzApOwotCX0gZWxzZSBpZiAoIXN0cmNt cChkYXRhLCAibGFuZV9tYXBfMjMwMSIpKSB7Ci0JCWRpc3BsYXktPmxhbmVfbWFwLmxhbmVfbWFw X3YxID0gRFNJX0xBTkVfTUFQXzIzMDE7Ci0JCV9fc2V0X2xhbmVfbWFwX3YyKGRpc3BsYXktPmxh bmVfbWFwLmxhbmVfbWFwX3YyLAotCQkJRFNJX1BIWVNJQ0FMX0xBTkVfMiwKLQkJCURTSV9QSFlT SUNBTF9MQU5FXzMsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8wLAotCQkJRFNJX1BIWVNJQ0FMX0xB TkVfMSk7Ci0JfSBlbHNlIGlmICghc3RyY21wKGRhdGEsICJsYW5lX21hcF8xMjMwIikpIHsKLQkJ ZGlzcGxheS0+bGFuZV9tYXAubGFuZV9tYXBfdjEgPSBEU0lfTEFORV9NQVBfMTIzMDsKLQkJX19z ZXRfbGFuZV9tYXBfdjIoZGlzcGxheS0+bGFuZV9tYXAubGFuZV9tYXBfdjIsCi0JCQlEU0lfUEhZ U0lDQUxfTEFORV8zLAotCQkJRFNJX1BIWVNJQ0FMX0xBTkVfMCwKLQkJCURTSV9QSFlTSUNBTF9M QU5FXzEsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8yKTsKLQl9IGVsc2UgaWYgKCFzdHJjbXAoZGF0 YSwgImxhbmVfbWFwXzAzMjEiKSkgewotCQlkaXNwbGF5LT5sYW5lX21hcC5sYW5lX21hcF92MSA9 IERTSV9MQU5FX01BUF8wMzIxOwotCQlfX3NldF9sYW5lX21hcF92MihkaXNwbGF5LT5sYW5lX21h cC5sYW5lX21hcF92MiwKLQkJCURTSV9QSFlTSUNBTF9MQU5FXzAsCi0JCQlEU0lfUEhZU0lDQUxf TEFORV8zLAotCQkJRFNJX1BIWVNJQ0FMX0xBTkVfMiwKLQkJCURTSV9QSFlTSUNBTF9MQU5FXzEp OwotCX0gZWxzZSBpZiAoIXN0cmNtcChkYXRhLCAibGFuZV9tYXBfMTAzMiIpKSB7Ci0JCWRpc3Bs YXktPmxhbmVfbWFwLmxhbmVfbWFwX3YxID0gRFNJX0xBTkVfTUFQXzEwMzI7Ci0JCV9fc2V0X2xh bmVfbWFwX3YyKGRpc3BsYXktPmxhbmVfbWFwLmxhbmVfbWFwX3YyLAotCQkJRFNJX1BIWVNJQ0FM X0xBTkVfMSwKLQkJCURTSV9QSFlTSUNBTF9MQU5FXzAsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8z LAotCQkJRFNJX1BIWVNJQ0FMX0xBTkVfMik7Ci0JfSBlbHNlIGlmICghc3RyY21wKGRhdGEsICJs YW5lX21hcF8yMTAzIikpIHsKLQkJZGlzcGxheS0+bGFuZV9tYXAubGFuZV9tYXBfdjEgPSBEU0lf TEFORV9NQVBfMjEwMzsKLQkJX19zZXRfbGFuZV9tYXBfdjIoZGlzcGxheS0+bGFuZV9tYXAubGFu ZV9tYXBfdjIsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8yLAotCQkJRFNJX1BIWVNJQ0FMX0xBTkVf MSwKLQkJCURTSV9QSFlTSUNBTF9MQU5FXzAsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8zKTsKLQl9 IGVsc2UgaWYgKCFzdHJjbXAoZGF0YSwgImxhbmVfbWFwXzMyMTAiKSkgewotCQlkaXNwbGF5LT5s YW5lX21hcC5sYW5lX21hcF92MSA9IERTSV9MQU5FX01BUF8zMjEwOwotCQlfX3NldF9sYW5lX21h cF92MihkaXNwbGF5LT5sYW5lX21hcC5sYW5lX21hcF92MiwKLQkJCURTSV9QSFlTSUNBTF9MQU5F XzMsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8yLAotCQkJRFNJX1BIWVNJQ0FMX0xBTkVfMSwKLQkJ CURTSV9QSFlTSUNBTF9MQU5FXzApOwotCX0gZWxzZSB7Ci0JCXByX3dhcm4oIiVzOiBpbnZhbGlk IGxhbmUgbWFwICVzIHNwZWNpZmllZC4gZGVmYXVsdGluZyB0byBsYW5lX21hcDAxMjNcbiIsCi0J CQlfX2Z1bmNfXywgZGF0YSk7Ci0JCWdvdG8gc2V0X2RlZmF1bHQ7Ci0JfQotCXJldHVybiAwOwot Ci1zZXRfZGVmYXVsdDoKLQkvKiBkZWZhdWx0IGxhbmUgbWFwcGluZyAqLwotCV9fc2V0X2xhbmVf bWFwX3YyKGRpc3BsYXktPmxhbmVfbWFwLmxhbmVfbWFwX3YyLCBEU0lfUEhZU0lDQUxfTEFORV8w LAotCQlEU0lfUEhZU0lDQUxfTEFORV8xLCBEU0lfUEhZU0lDQUxfTEFORV8yLCBEU0lfUEhZU0lD QUxfTEFORV8zKTsKLQlkaXNwbGF5LT5sYW5lX21hcC5sYW5lX21hcF92MSA9IERTSV9MQU5FX01B UF8wMTIzOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3BhcnNlX2R0 KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwot CXUzMiBwaHlfY291bnQgPSAwOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZTsKLQotCS8q IFBhcnNlIGNvbnRyb2xsZXJzICovCi0JZm9yIChpID0gMDsgaSA8IE1BWF9EU0lfQ1RSTFNfUEVS X0RJU1BMQVk7IGkrKykgewotCQlvZl9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShkaXNwbGF5LT5w ZGV2LT5kZXYub2Zfbm9kZSwKLQkJCQkJICAgInFjb20sZHNpLWN0cmwiLCBpKTsKLQkJaWYgKCFv Zl9ub2RlKSB7Ci0JCQlpZiAoIWkpIHsKLQkJCQlwcl9lcnIoIk5vIGNvbnRyb2xsZXJzIHByZXNl bnRcbiIpOwotCQkJCXJldHVybiAtRU5PREVWOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQotCQlk aXNwbGF5LT5jdHJsW2ldLmN0cmxfb2Zfbm9kZSA9IG9mX25vZGU7Ci0JCWRpc3BsYXktPmN0cmxf Y291bnQrKzsKLQl9Ci0KLQkvKiBQYXJzZSBQaHlzICovCi0JZm9yIChpID0gMDsgaSA8IE1BWF9E U0lfQ1RSTFNfUEVSX0RJU1BMQVk7IGkrKykgewotCQlvZl9ub2RlID0gb2ZfcGFyc2VfcGhhbmRs ZShkaXNwbGF5LT5wZGV2LT5kZXYub2Zfbm9kZSwKLQkJCQkJICAgInFjb20sZHNpLXBoeSIsIGkp OwotCQlpZiAoIW9mX25vZGUpIHsKLQkJCWlmICghaSkgewotCQkJCXByX2VycigiTm8gUEhZIGRl dmljZXMgcHJlc2VudFxuIik7Ci0JCQkJcmMgPSAtRU5PREVWOwotCQkJCWdvdG8gZXJyb3I7Ci0J CQl9Ci0JCQlicmVhazsKLQkJfQotCi0JCWRpc3BsYXktPmN0cmxbaV0ucGh5X29mX25vZGUgPSBv Zl9ub2RlOwotCQlwaHlfY291bnQrKzsKLQl9Ci0KLQlpZiAocGh5X2NvdW50ICE9IGRpc3BsYXkt PmN0cmxfY291bnQpIHsKLQkJcHJfZXJyKCJOdW1iZXIgb2YgY29udHJvbGxlcnMgZG9lcyBub3Qg bWF0Y2ggUEhZc1xuIik7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlv Zl9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShkaXNwbGF5LT5wZGV2LT5kZXYub2Zfbm9kZSwKLQkJ CQkgICAicWNvbSxkc2ktcGFuZWwiLCAwKTsKLQlpZiAoIW9mX25vZGUpIHsKLQkJcHJfZXJyKCJO byBQYW5lbCBkZXZpY2UgcHJlc2VudFxuIik7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290byBlcnJv cjsKLQl9IGVsc2UgewotCQlkaXNwbGF5LT5wYW5lbF9vZiA9IG9mX25vZGU7Ci0JfQotCi1lcnJv cjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfcmVzX2luaXQoc3Ry dWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0JaW50IGk7Ci0Jc3Ry dWN0IGRzaV9kaXNwbGF5X2N0cmwgKmN0cmw7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+ Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJY3RybC0+ Y3RybCA9IGRzaV9jdHJsX2dldChjdHJsLT5jdHJsX29mX25vZGUpOwotCQlpZiAoSVNfRVJSX09S X05VTEwoY3RybC0+Y3RybCkpIHsKLQkJCXJjID0gUFRSX0VSUihjdHJsLT5jdHJsKTsKLQkJCXBy X2VycigiZmFpbGVkIHRvIGdldCBkc2kgY29udHJvbGxlciwgcmM9JWRcbiIsIHJjKTsKLQkJCWN0 cmwtPmN0cmwgPSBOVUxMOwotCQkJZ290byBlcnJvcl9jdHJsX3B1dDsKLQkJfQotCi0JCWN0cmwt PnBoeSA9IGRzaV9waHlfZ2V0KGN0cmwtPnBoeV9vZl9ub2RlKTsKLQkJaWYgKElTX0VSUl9PUl9O VUxMKGN0cmwtPnBoeSkpIHsKLQkJCXJjID0gUFRSX0VSUihjdHJsLT5waHkpOwotCQkJcHJfZXJy KCJmYWlsZWQgdG8gZ2V0IHBoeSBjb250cm9sbGVyLCByYz0lZFxuIiwgcmMpOwotCQkJZHNpX2N0 cmxfcHV0KGN0cmwtPmN0cmwpOwotCQkJY3RybC0+cGh5ID0gTlVMTDsKLQkJCWdvdG8gZXJyb3Jf Y3RybF9wdXQ7Ci0JCX0KLQl9Ci0KLQlkaXNwbGF5LT5wYW5lbCA9IGRzaV9wYW5lbF9nZXQoJmRp c3BsYXktPnBkZXYtPmRldiwgZGlzcGxheS0+cGFuZWxfb2YsCi0JCQkJCQlkaXNwbGF5LT5jbWRs aW5lX3RvcG9sb2d5KTsKLQlpZiAoSVNfRVJSX09SX05VTEwoZGlzcGxheS0+cGFuZWwpKSB7Ci0J CXJjID0gUFRSX0VSUihkaXNwbGF5LT5wYW5lbCk7Ci0JCXByX2VycigiZmFpbGVkIHRvIGdldCBw YW5lbCwgcmM9JWRcbiIsIHJjKTsKLQkJZGlzcGxheS0+cGFuZWwgPSBOVUxMOwotCQlnb3RvIGVy cm9yX2N0cmxfcHV0OwotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlfcGFyc2VfbGFuZV9tYXAoZGlz cGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiTGFuZSBtYXAgbm90IGZvdW5kLCByYz0lZFxu IiwgcmMpOwotCQlnb3RvIGVycm9yX2N0cmxfcHV0OwotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlf Y2xvY2tzX2luaXQoZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIHBh cnNlIGNsb2NrIGRhdGEsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3JfY3RybF9wdXQ7Ci0J fQotCi0JcmV0dXJuIDA7Ci1lcnJvcl9jdHJsX3B1dDoKLQlmb3IgKGkgPSBpIC0gMTsgaSA+PSAw OyBpLS0pIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlkc2lfY3RybF9wdXQoY3Ry bC0+Y3RybCk7Ci0JCWRzaV9waHlfcHV0KGN0cmwtPnBoeSk7Ci0JfQotCXJldHVybiByYzsKLX0K LQotc3RhdGljIGludCBkc2lfZGlzcGxheV9yZXNfZGVpbml0KHN0cnVjdCBkc2lfZGlzcGxheSAq ZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9j dHJsICpjdHJsOwotCi0JcmMgPSBkc2lfZGlzcGxheV9jbG9ja3NfZGVpbml0KGRpc3BsYXkpOwot CWlmIChyYykKLQkJcHJfZXJyKCJjbG9ja3MgZGVpbml0IGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsK LQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9 ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlkc2lfcGh5X3B1dChjdHJsLT5waHkpOwotCQlkc2lfY3Ry bF9wdXQoY3RybC0+Y3RybCk7Ci0JfQotCi0JaWYgKGRpc3BsYXktPnBhbmVsKQotCQlkc2lfcGFu ZWxfcHV0KGRpc3BsYXktPnBhbmVsKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBk c2lfZGlzcGxheV92YWxpZGF0ZV9tb2RlX3NldChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXks Ci0JCQkJCSBzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqbW9kZSwKLQkJCQkJIHUzMiBmbGFncykK LXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICpjdHJs OwotCi0JLyoKLQkgKiBUbyBzZXQgYSBtb2RlOgotCSAqIDEuIENvbnRyb2xsZXJzIHNob3VsZCBi ZSB0dXJuZWQgb2ZmLgotCSAqIDIuIExpbmsgY2xvY2tzIHNob3VsZCBiZSBvZmYuCi0JICogMy4g UGh5IHNob3VsZCBiZSBkaXNhYmxlZC4KLQkgKi8KLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5 LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlpZiAo KGN0cmwtPnBvd2VyX3N0YXRlID4gRFNJX0NUUkxfUE9XRVJfVlJFR19PTikgfHwKLQkJICAgIChj dHJsLT5waHlfZW5hYmxlZCkpIHsKLQkJCXJjID0gLUVJTlZBTDsKLQkJCWdvdG8gZXJyb3I7Ci0J CX0KLQl9Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGJvb2wgZHNpX2Rpc3Bs YXlfaXNfc2VhbWxlc3NfZGZwc19wb3NzaWJsZSgKLQkJY29uc3Qgc3RydWN0IGRzaV9kaXNwbGF5 ICpkaXNwbGF5LAotCQljb25zdCBzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqdGd0LAotCQljb25z dCBlbnVtIGRzaV9kZnBzX3R5cGUgZGZwc190eXBlKQotewotCXN0cnVjdCBkc2lfZGlzcGxheV9t b2RlICpjdXI7Ci0KLQlpZiAoIWRpc3BsYXkgfHwgIXRndCB8fCAhZGlzcGxheS0+cGFuZWwpIHsK LQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlj dXIgPSBkaXNwbGF5LT5wYW5lbC0+Y3VyX21vZGU7Ci0KLQlpZiAoY3VyLT50aW1pbmcuaF9hY3Rp dmUgIT0gdGd0LT50aW1pbmcuaF9hY3RpdmUpIHsKLQkJcHJfZGVidWcoInRpbWluZy5oX2FjdGl2 ZSBkaWZmZXJzICVkICVkXG4iLAotCQkJCWN1ci0+dGltaW5nLmhfYWN0aXZlLCB0Z3QtPnRpbWlu Zy5oX2FjdGl2ZSk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoY3VyLT50aW1pbmcuaF9i YWNrX3BvcmNoICE9IHRndC0+dGltaW5nLmhfYmFja19wb3JjaCkgewotCQlwcl9kZWJ1ZygidGlt aW5nLmhfYmFja19wb3JjaCBkaWZmZXJzICVkICVkXG4iLAotCQkJCWN1ci0+dGltaW5nLmhfYmFj a19wb3JjaCwKLQkJCQl0Z3QtPnRpbWluZy5oX2JhY2tfcG9yY2gpOwotCQlyZXR1cm4gZmFsc2U7 Ci0JfQotCi0JaWYgKGN1ci0+dGltaW5nLmhfc3luY193aWR0aCAhPSB0Z3QtPnRpbWluZy5oX3N5 bmNfd2lkdGgpIHsKLQkJcHJfZGVidWcoInRpbWluZy5oX3N5bmNfd2lkdGggZGlmZmVycyAlZCAl ZFxuIiwKLQkJCQljdXItPnRpbWluZy5oX3N5bmNfd2lkdGgsCi0JCQkJdGd0LT50aW1pbmcuaF9z eW5jX3dpZHRoKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChjdXItPnRpbWluZy5oX2Zy b250X3BvcmNoICE9IHRndC0+dGltaW5nLmhfZnJvbnRfcG9yY2gpIHsKLQkJcHJfZGVidWcoInRp bWluZy5oX2Zyb250X3BvcmNoIGRpZmZlcnMgJWQgJWRcbiIsCi0JCQkJY3VyLT50aW1pbmcuaF9m cm9udF9wb3JjaCwKLQkJCQl0Z3QtPnRpbWluZy5oX2Zyb250X3BvcmNoKTsKLQkJaWYgKGRmcHNf dHlwZSAhPSBEU0lfREZQU19JTU1FRElBVEVfSEZQKQotCQkJcmV0dXJuIGZhbHNlOwotCX0KLQot CWlmIChjdXItPnRpbWluZy5oX3NrZXcgIT0gdGd0LT50aW1pbmcuaF9za2V3KSB7Ci0JCXByX2Rl YnVnKCJ0aW1pbmcuaF9za2V3IGRpZmZlcnMgJWQgJWRcbiIsCi0JCQkJY3VyLT50aW1pbmcuaF9z a2V3LAotCQkJCXRndC0+dGltaW5nLmhfc2tldyk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkv KiBza2lwIHBvbGFyaXR5IGNvbXBhcmlzb24gKi8KLQotCWlmIChjdXItPnRpbWluZy52X2FjdGl2 ZSAhPSB0Z3QtPnRpbWluZy52X2FjdGl2ZSkgewotCQlwcl9kZWJ1ZygidGltaW5nLnZfYWN0aXZl IGRpZmZlcnMgJWQgJWRcbiIsCi0JCQkJY3VyLT50aW1pbmcudl9hY3RpdmUsCi0JCQkJdGd0LT50 aW1pbmcudl9hY3RpdmUpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKGN1ci0+dGltaW5n LnZfYmFja19wb3JjaCAhPSB0Z3QtPnRpbWluZy52X2JhY2tfcG9yY2gpIHsKLQkJcHJfZGVidWco InRpbWluZy52X2JhY2tfcG9yY2ggZGlmZmVycyAlZCAlZFxuIiwKLQkJCQljdXItPnRpbWluZy52 X2JhY2tfcG9yY2gsCi0JCQkJdGd0LT50aW1pbmcudl9iYWNrX3BvcmNoKTsKLQkJcmV0dXJuIGZh bHNlOwotCX0KLQotCWlmIChjdXItPnRpbWluZy52X3N5bmNfd2lkdGggIT0gdGd0LT50aW1pbmcu dl9zeW5jX3dpZHRoKSB7Ci0JCXByX2RlYnVnKCJ0aW1pbmcudl9zeW5jX3dpZHRoIGRpZmZlcnMg JWQgJWRcbiIsCi0JCQkJY3VyLT50aW1pbmcudl9zeW5jX3dpZHRoLAotCQkJCXRndC0+dGltaW5n LnZfc3luY193aWR0aCk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoY3VyLT50aW1pbmcu dl9mcm9udF9wb3JjaCAhPSB0Z3QtPnRpbWluZy52X2Zyb250X3BvcmNoKSB7Ci0JCXByX2RlYnVn KCJ0aW1pbmcudl9mcm9udF9wb3JjaCBkaWZmZXJzICVkICVkXG4iLAotCQkJCWN1ci0+dGltaW5n LnZfZnJvbnRfcG9yY2gsCi0JCQkJdGd0LT50aW1pbmcudl9mcm9udF9wb3JjaCk7Ci0JCWlmIChk ZnBzX3R5cGUgIT0gRFNJX0RGUFNfSU1NRURJQVRFX1ZGUCkKLQkJCXJldHVybiBmYWxzZTsKLQl9 Ci0KLQkvKiBza2lwIHBvbGFyaXR5IGNvbXBhcmlzb24gKi8KLQotCWlmIChjdXItPnRpbWluZy5y ZWZyZXNoX3JhdGUgPT0gdGd0LT50aW1pbmcucmVmcmVzaF9yYXRlKQotCQlwcl9kZWJ1ZygidGlt aW5nLnJlZnJlc2hfcmF0ZSBpZGVudGljYWwgJWQgJWRcbiIsCi0JCQkJY3VyLT50aW1pbmcucmVm cmVzaF9yYXRlLAotCQkJCXRndC0+dGltaW5nLnJlZnJlc2hfcmF0ZSk7Ci0KLQlpZiAoY3VyLT5w aXhlbF9jbGtfa2h6ICE9IHRndC0+cGl4ZWxfY2xrX2toeikKLQkJcHJfZGVidWcoInBpeGVsX2Ns a19raHogZGlmZmVycyAlZCAlZFxuIiwKLQkJCQljdXItPnBpeGVsX2Nsa19raHosIHRndC0+cGl4 ZWxfY2xrX2toeik7Ci0KLQlpZiAoY3VyLT5kc2lfbW9kZV9mbGFncyAhPSB0Z3QtPmRzaV9tb2Rl X2ZsYWdzKQotCQlwcl9kZWJ1ZygiZmxhZ3MgZGlmZmVycyAlZCAlZFxuIiwKLQkJCQljdXItPmRz aV9tb2RlX2ZsYWdzLCB0Z3QtPmRzaV9tb2RlX2ZsYWdzKTsKLQotCXJldHVybiB0cnVlOwotfQot Ci1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X2RmcHNfdXBkYXRlKHN0cnVjdCBkc2lfZGlzcGxheSAq ZGlzcGxheSwKLQkJCQkgICBzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqZHNpX21vZGUpCi17Ci0J c3RydWN0IGRzaV9tb2RlX2luZm8gKnRpbWluZzsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAq bV9jdHJsLCAqY3RybDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqcGFuZWxfbW9kZTsKLQlz dHJ1Y3QgZHNpX2RmcHNfY2FwYWJpbGl0aWVzIGRmcHNfY2FwczsKLQlpbnQgcmMgPSAwOwotCWlu dCBpID0gMDsKLQotCWlmICghZGlzcGxheSB8fCAhZHNpX21vZGUgfHwgIWRpc3BsYXktPnBhbmVs KSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0JdGltaW5nID0gJmRzaV9tb2RlLT50aW1pbmc7Ci0KLQlkc2lfcGFuZWxfZ2V0X2RmcHNfY2Fw cyhkaXNwbGF5LT5wYW5lbCwgJmRmcHNfY2Fwcyk7Ci0JaWYgKCFkZnBzX2NhcHMuZGZwc19zdXBw b3J0KSB7Ci0JCXByX2VycigiZGZwcyBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJcmV0dXJuIC1FTk9U U1VQUDsKLQl9Ci0KLQlpZiAoZGZwc19jYXBzLnR5cGUgPT0gRFNJX0RGUFNfSU1NRURJQVRFX0NM SykgewotCQlwcl9lcnIoImRmcHMgY2xvY2sgbWV0aG9kIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQly ZXR1cm4gLUVOT1RTVVBQOwotCX0KLQotCS8qIEZvciBzcGxpdCBEU0ksIHVwZGF0ZSB0aGUgY2xv Y2sgbWFzdGVyIGZpcnN0ICovCi0KLQlwcl9kZWJ1ZygiY29uZmlndXJpbmcgc2VhbWxlc3MgZHlu YW1pYyBmcHNcblxuIik7Ci0KLQltX2N0cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNwbGF5LT5jbGtf bWFzdGVyX2lkeF07Ci0JcmMgPSBkc2lfY3RybF9hc3luY190aW1pbmdfdXBkYXRlKG1fY3RybC0+ Y3RybCwgdGltaW5nKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBkZnBz IHVwZGF0ZSBob3N0XyVkLCByYz0lZFxuIiwKLQkJCQlkaXNwbGF5LT5uYW1lLCBpLCByYyk7Ci0J CWdvdG8gZXJyb3I7Ci0JfQotCi0JLyogVXBkYXRlIHRoZSByZXN0IG9mIHRoZSBjb250cm9sbGVy cyAqLwotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3Ry bCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlpZiAoIWN0cmwtPmN0cmwgfHwgKGN0cmwgPT0gbV9j dHJsKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX2N0cmxfYXN5bmNfdGltaW5nX3VwZGF0 ZShjdHJsLT5jdHJsLCB0aW1pbmcpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBmYWls ZWQgdG8gZGZwcyB1cGRhdGUgaG9zdF8lZCwgcmM9JWRcbiIsCi0JCQkJCWRpc3BsYXktPm5hbWUs IGksIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLQlwYW5lbF9tb2RlID0gZGlzcGxh eS0+cGFuZWwtPmN1cl9tb2RlOwotCW1lbWNweShwYW5lbF9tb2RlLCBkc2lfbW9kZSwgc2l6ZW9m KCpwYW5lbF9tb2RlKSk7Ci0JLyoKLQkgKiBkc2lfbW9kZV9mbGFncyBmbGFncyBhcmUgdXNlZCB0 byBjb21tdW5pY2F0ZSB3aXRoIG90aGVyIGRybSBkcml2ZXIKLQkgKiBjb21wb25lbnRzLCBhbmQg YXJlIHRyYW5zaWVudC4gVGhleSBhcmVuJ3QgaW5oZXJlbnRseSBwYXJ0IG9mIHRoZQotCSAqIGRp c3BsYXkgcGFuZWwncyBtb2RlIGFuZCBzaG91bGRuJ3QgYmUgc2F2ZWQgaW50byB0aGUgY2FjaGVk IGN1cnJlbnRseQotCSAqIGFjdGl2ZSBtb2RlLgotCSAqLwotCXBhbmVsX21vZGUtPmRzaV9tb2Rl X2ZsYWdzID0gMDsKLQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9k aXNwbGF5X2RmcHNfY2FsY19mcm9udF9wb3JjaCgKLQkJdTMyIG9sZF9mcHMsCi0JCXUzMiBuZXdf ZnBzLAotCQl1MzIgYV90b3RhbCwKLQkJdTMyIGJfdG90YWwsCi0JCXUzMiBiX2ZwLAotCQl1MzIg KmJfZnBfb3V0KQotewotCXMzMiBiX2ZwX25ldzsKLQlpbnQgYWRkX3BvcmNoZXMsIGRpZmY7Ci0K LQlpZiAoIWJfZnBfb3V0KSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXMiKTsKLQkJcmV0dXJu IC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFhX3RvdGFsIHx8ICFuZXdfZnBzKSB7Ci0JCXByX2Vycigi SW52YWxpZCBwaXhlbCB0b3RhbCBvciBuZXcgZnBzIGluIG1vZGUgcmVxdWVzdFxuIik7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQotCS8qCi0JICogS2VlcCBjbG9jaywgb3RoZXIgcG9yY2hlcyBj b25zdGFudCwgdXNlIG5ldyBmcHMsIGNhbGMgZnJvbnQgcG9yY2gKLQkgKiBuZXdfdnRvdGFsID0g b2xkX3Z0b3RhbCAqIChvbGRfZnBzIC8gbmV3X2ZwcyApCi0JICogbmV3X3ZmcCAtIG9sZF92ZnAg PSBuZXdfdnRvdGFsIC0gb2xkX3Z0b3RhbAotCSAqIG5ld192ZnAgPSBvbGRfdmZwICsgb2xkX3Z0 b3RhbCAqICgob2xkX2ZwcyAtIG5ld19mcHMpLyBuZXdfZnBzKQotCSAqLwotCWRpZmYgPSBhYnMo b2xkX2ZwcyAtIG5ld19mcHMpOwotCWFkZF9wb3JjaGVzID0gbXVsdF9mcmFjKGJfdG90YWwsIGRp ZmYsIG5ld19mcHMpOwotCi0JaWYgKG9sZF9mcHMgPiBuZXdfZnBzKQotCQliX2ZwX25ldyA9IGJf ZnAgKyBhZGRfcG9yY2hlczsKLQllbHNlCi0JCWJfZnBfbmV3ID0gYl9mcCAtIGFkZF9wb3JjaGVz OwotCi0JcHJfZGVidWcoImZwcyAldSBhICV1IGIgJXUgYl9mcCAldSBuZXdfZnAgJWRcbiIsCi0J CQluZXdfZnBzLCBhX3RvdGFsLCBiX3RvdGFsLCBiX2ZwLCBiX2ZwX25ldyk7Ci0KLQlpZiAoYl9m cF9uZXcgPCAwKSB7Ci0JCXByX2VycigiSW52YWxpZCBuZXdfaGZwIGNhbGNsdWF0ZWQlZFxuIiwg Yl9mcF9uZXcpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKioKLQkgKiBUT0RPOiBUbyBk aWZmZXJlbnRpYXRlIGZyb20gY2xvY2sgbWV0aG9kIHdoZW4gY29tbXVuaWNhdGluZyB0byB0aGUK LQkgKiBvdGhlciBjb21wb25lbnRzLCBwZXJoYXBzIHdlIHNob3VsZCBzZXQgY2xrIGhlcmUgdG8g b3JpZ2luYWwgdmFsdWUKLQkgKi8KLQkqYl9mcF9vdXQgPSBiX2ZwX25ldzsKLQotCXJldHVybiAw OwotfQotCi0vKioKLSAqIGRzaV9kaXNwbGF5X2dldF9kZnBzX3RpbWluZygpIC0gR2V0IHRoZSBu ZXcgZGZwcyB2YWx1ZXMuCi0gKiBAZGlzcGxheTogICAgICAgICBEU0kgZGlzcGxheSBoYW5kbGUu Ci0gKiBAYWRqX21vZGU6ICAgICAgICBNb2RlIHZhbHVlIHN0cnVjdHVyZSB0byBiZSBjaGFuZ2Vk LgotICogICAgICAgICAgICAgICAgICAgSXQgY29udGFpbnMgb2xkIHRpbWluZyB2YWx1ZXMgYW5k IGxhdGVzdCBmcHMgdmFsdWUuCi0gKiAgICAgICAgICAgICAgICAgICBOZXcgdGltaW5nIHZhbHVl cyBhcmUgdXBkYXRlZCBiYXNlZCBvbiBuZXcgZnBzLgotICogQGN1cnJfcmVmcmVzaF9yYXRlOiAg Q3VycmVudCBmcHMgcmF0ZS4KLSAqICAgICAgICAgICAgICAgICAgICAgIElmIHplcm8gLCBjdXJy ZW50IGZwcyByYXRlIGlzIHRha2VuIGZyb20KLSAqICAgICAgICAgICAgICAgICAgICAgIGRpc3Bs YXktPnBhbmVsLT5jdXJfbW9kZS4KLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotc3RhdGlj IGludCBkc2lfZGlzcGxheV9nZXRfZGZwc190aW1pbmcoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNw bGF5LAotCQkJc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKmFkal9tb2RlLAotCQkJCXUzMiBjdXJy X3JlZnJlc2hfcmF0ZSkKLXsKLQlzdHJ1Y3QgZHNpX2RmcHNfY2FwYWJpbGl0aWVzIGRmcHNfY2Fw czsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSBwZXJfY3RybF9tb2RlOwotCXN0cnVjdCBkc2lf bW9kZV9pbmZvICp0aW1pbmc7Ci0Jc3RydWN0IGRzaV9jdHJsICptX2N0cmw7Ci0KLQlpbnQgcmMg PSAwOwotCi0JaWYgKCFkaXNwbGF5IHx8ICFhZGpfbW9kZSkgewotCQlwcl9lcnIoIkludmFsaWQg cGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCW1fY3RybCA9IGRpc3BsYXktPmN0 cmxbZGlzcGxheS0+Y2xrX21hc3Rlcl9pZHhdLmN0cmw7Ci0KLQlkc2lfcGFuZWxfZ2V0X2RmcHNf Y2FwcyhkaXNwbGF5LT5wYW5lbCwgJmRmcHNfY2Fwcyk7Ci0JaWYgKCFkZnBzX2NhcHMuZGZwc19z dXBwb3J0KSB7Ci0JCXByX2VycigiZGZwcyBub3Qgc3VwcG9ydGVkIGJ5IHBhbmVsXG4iKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcGVyX2N0cmxfbW9kZSA9ICphZGpfbW9kZTsKLQlhZGp1 c3RfdGltaW5nX2J5X2N0cmxfY291bnQoZGlzcGxheSwgJnBlcl9jdHJsX21vZGUpOwotCi0JaWYg KCFjdXJyX3JlZnJlc2hfcmF0ZSkgewotCQlpZiAoIWRzaV9kaXNwbGF5X2lzX3NlYW1sZXNzX2Rm cHNfcG9zc2libGUoZGlzcGxheSwKLQkJCQkmcGVyX2N0cmxfbW9kZSwgZGZwc19jYXBzLnR5cGUp KSB7Ci0JCQlwcl9lcnIoInNlYW1sZXNzIGR5bmFtaWMgZnBzIG5vdCBzdXBwb3J0ZWQgZm9yIG1v ZGVcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKGRpc3BsYXktPnBhbmVsLT5j dXJfbW9kZSkgewotCQkJY3Vycl9yZWZyZXNoX3JhdGUgPQotCQkJCWRpc3BsYXktPnBhbmVsLT5j dXJfbW9kZS0+dGltaW5nLnJlZnJlc2hfcmF0ZTsKLQkJfSBlbHNlIHsKLQkJCXByX2VycigiY3Vy X21vZGUgaXMgbm90IGluaXRpYWxpemVkXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0J fQotCS8qIFRPRE86IFJlbW92ZSB0aGlzIGRpcmVjdCByZWZlcmVuY2UgdG8gdGhlIGRzaV9jdHJs ICovCi0JdGltaW5nID0gJnBlcl9jdHJsX21vZGUudGltaW5nOwotCi0Jc3dpdGNoIChkZnBzX2Nh cHMudHlwZSkgewotCWNhc2UgRFNJX0RGUFNfSU1NRURJQVRFX1ZGUDoKLQkJcmMgPSBkc2lfZGlz cGxheV9kZnBzX2NhbGNfZnJvbnRfcG9yY2goCi0JCQkJY3Vycl9yZWZyZXNoX3JhdGUsCi0JCQkJ dGltaW5nLT5yZWZyZXNoX3JhdGUsCi0JCQkJRFNJX0hfVE9UQUwodGltaW5nKSwKLQkJCQlEU0lf Vl9UT1RBTCh0aW1pbmcpLAotCQkJCXRpbWluZy0+dl9mcm9udF9wb3JjaCwKLQkJCQkmYWRqX21v ZGUtPnRpbWluZy52X2Zyb250X3BvcmNoKTsKLQkJYnJlYWs7Ci0KLQljYXNlIERTSV9ERlBTX0lN TUVESUFURV9IRlA6Ci0JCXJjID0gZHNpX2Rpc3BsYXlfZGZwc19jYWxjX2Zyb250X3BvcmNoKAot CQkJCWN1cnJfcmVmcmVzaF9yYXRlLAotCQkJCXRpbWluZy0+cmVmcmVzaF9yYXRlLAotCQkJCURT SV9WX1RPVEFMKHRpbWluZyksCi0JCQkJRFNJX0hfVE9UQUwodGltaW5nKSwKLQkJCQl0aW1pbmct PmhfZnJvbnRfcG9yY2gsCi0JCQkJJmFkal9tb2RlLT50aW1pbmcuaF9mcm9udF9wb3JjaCk7Ci0J CWlmICghcmMpCi0JCQlhZGpfbW9kZS0+dGltaW5nLmhfZnJvbnRfcG9yY2ggKj0gZGlzcGxheS0+ Y3RybF9jb3VudDsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlwcl9lcnIoIlVuc3VwcG9ydGVk IERGUFMgbW9kZSAlZFxuIiwgZGZwc19jYXBzLnR5cGUpOwotCQlyYyA9IC1FTk9UU1VQUDsKLQl9 Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBib29sIGRzaV9kaXNwbGF5X3ZhbGlkYXRlX21v ZGVfc2VhbWxlc3Moc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAotCQlzdHJ1Y3QgZHNpX2Rp c3BsYXlfbW9kZSAqYWRqX21vZGUpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghZGlzcGxheSB8 fCAhYWRqX21vZGUpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiBm YWxzZTsKLQl9Ci0KLQkvKiBDdXJyZW50bHkgdGhlIG9ubHkgc2VhbWxlc3MgdHJhbnNpdGlvbiBp cyBkeW5hbWljIGZwcyAqLwotCXJjID0gZHNpX2Rpc3BsYXlfZ2V0X2RmcHNfdGltaW5nKGRpc3Bs YXksIGFkal9tb2RlLCAwKTsKLQlpZiAocmMpIHsKLQkJcHJfZGVidWcoIkR5bmFtaWMgRlBTIG5v dCBzdXBwb3J0ZWQgZm9yIHNlYW1sZXNzXG4iKTsKLQl9IGVsc2UgewotCQlwcl9kZWJ1ZygiTW9k ZSBzd2l0Y2ggaXMgc2VhbWxlc3MgRHluYW1pYyBGUFNcbiIpOwotCQlhZGpfbW9kZS0+ZHNpX21v ZGVfZmxhZ3MgfD0gRFNJX01PREVfRkxBR19ERlBTIHwKLQkJCQlEU0lfTU9ERV9GTEFHX1ZCTEFO S19QUkVfTU9ERVNFVDsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rp c3BsYXlfc2V0X21vZGVfc3ViKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwKLQkJCQkgICAg c3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGUsCi0JCQkJICAgIHUzMiBmbGFncykKLXsKLQlp bnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICpjdHJsOwotCXN0 cnVjdCBkc2lfZGlzcGxheV9tb2RlX3ByaXZfaW5mbyAqcHJpdl9pbmZvOwotCi0JcHJpdl9pbmZv ID0gbW9kZS0+cHJpdl9pbmZvOwotCWlmICghcHJpdl9pbmZvKSB7Ci0JCXByX2VycigiWyVzXSBm YWlsZWQgdG8gZ2V0IHByaXZhdGUgaW5mbyBvZiB0aGUgZGlzcGxheSBtb2RlIiwKLQkJCWRpc3Bs YXktPm5hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF9nZXRf aG9zdF9jZmdfZm9yX21vZGUoZGlzcGxheS0+cGFuZWwsCi0JCQkJCSAgICAgbW9kZSwKLQkJCQkJ ICAgICAmZGlzcGxheS0+Y29uZmlnKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxl ZCB0byBnZXQgaG9zdCBjb25maWcgZm9yIG1vZGUsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxh eS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCW1lbWNweSgmZGlzcGxheS0+Y29u ZmlnLmxhbmVfbWFwLCAmZGlzcGxheS0+bGFuZV9tYXAsCi0JICAgICAgIHNpemVvZihkaXNwbGF5 LT5sYW5lX21hcCkpOwotCi0JaWYgKG1vZGUtPmRzaV9tb2RlX2ZsYWdzICYKLQkJCShEU0lfTU9E RV9GTEFHX0RGUFMgfCBEU0lfTU9ERV9GTEFHX1ZSUikpIHsKLQkJcmMgPSBkc2lfZGlzcGxheV9k ZnBzX3VwZGF0ZShkaXNwbGF5LCBtb2RlKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc11E U0kgZGZwcyB1cGRhdGUgZmFpbGVkLCByYz0lZFxuIiwKLQkJCQkJZGlzcGxheS0+bmFtZSwgcmMp OwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5j dHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlyYyA9IGRz aV9jdHJsX3VwZGF0ZV9ob3N0X2NvbmZpZyhjdHJsLT5jdHJsLCAmZGlzcGxheS0+Y29uZmlnLAot CQkJCW1vZGUtPmRzaV9tb2RlX2ZsYWdzLCBkaXNwbGF5LT5kc2lfY2xrX2hhbmRsZSk7Ci0JCWlm IChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byB1cGRhdGUgY3RybCBjb25maWcsIHJj PSVkXG4iLAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0J CX0KLQl9Ci0KLQlpZiAocHJpdl9pbmZvLT5waHlfdGltaW5nX2xlbikgewotCQlmb3IgKGkgPSAw OyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCQljdHJsID0gJmRpc3BsYXktPmN0 cmxbaV07Ci0JCQkgcmMgPSBkc2lfcGh5X3NldF90aW1pbmdfcGFyYW1zKGN0cmwtPnBoeSwKLQkJ CQlwcml2X2luZm8tPnBoeV90aW1pbmdfdmFsLAotCQkJCXByaXZfaW5mby0+cGh5X3RpbWluZ19s ZW4pOwotCQkJaWYgKHJjKQotCQkJCXByX2VycigiZmFpbGVkIHRvIGFkZCBEU0kgUEhZIHRpbWlu ZyBwYXJhbXMiKTsKLQkJfQotCX0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBf ZHNpX2Rpc3BsYXlfZGV2X2luaXQgLSBpbml0aWFsaXplcyB0aGUgZGlzcGxheSBkZXZpY2UKLSAq IEluaXRpYWxpemF0aW9uIHdpbGwgYWNxdWlyZSByZWZlcmVuY2VzIHRvIHRoZSByZXNvdXJjZXMg cmVxdWlyZWQgZm9yIHRoZQotICogZGlzcGxheSBoYXJkd2FyZSB0byBmdW5jdGlvbi4KLSAqIEBk aXNwbGF5OiAgICAgICAgIEhhbmRsZSB0byB0aGUgZGlzcGxheQotICogUmV0dXJuczogICAgICAg ICAgWmVybyBvbiBzdWNjZXNzCi0gKi8KLXN0YXRpYyBpbnQgX2RzaV9kaXNwbGF5X2Rldl9pbml0 KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFk aXNwbGF5KSB7Ci0JCXByX2VycigiaW52YWxpZCBkaXNwbGF5XG4iKTsKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQotCXJjID0g ZHNpX2Rpc3BsYXlfcGFyc2VfZHQoZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVz XSBmYWlsZWQgdG8gcGFyc2UgZHQsIHJjPSVkXG4iLCBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdv dG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBkc2lfZGlzcGxheV9yZXNfaW5pdChkaXNwbGF5KTsKLQlp ZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBpbml0aWFsaXplIHJlc291cmNlcywg cmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0J fQotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCXJldHVy biByYzsKLX0KLQotLyoqCi0gKiBfZHNpX2Rpc3BsYXlfZGV2X2RlaW5pdCAtIGRlaW5pdGlhbGl6 ZXMgdGhlIGRpc3BsYXkgZGV2aWNlCi0gKiBBbGwgdGhlIHJlc291cmNlcyBhY3F1aXJlZCBkdXJp bmcgZGV2aWNlIGluaXQgd2lsbCBiZSByZWxlYXNlZC4KLSAqIEBkaXNwbGF5OiAgICAgICAgSGFu ZGxlIHRvIHRoZSBkaXNwbGF5Ci0gKiBSZXR1cm5zOiAgICAgICAgIFplcm8gb24gc3VjY2Vzcwot ICovCi1zdGF0aWMgaW50IF9kc2lfZGlzcGxheV9kZXZfZGVpbml0KHN0cnVjdCBkc2lfZGlzcGxh eSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkaXNwbGF5KSB7Ci0JCXByX2Vy cigiaW52YWxpZCBkaXNwbGF5XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhf bG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQotCXJjID0gZHNpX2Rpc3BsYXlfcmVzX2Rl aW5pdChkaXNwbGF5KTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGVpbml0 aWFsaXplIHJlc291cmNlLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsK LQotCW11dGV4X3VubG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQotCXJldHVybiByYzsK LX0KLQotLyoqCi0gKiBkc2lfZGlzcGxheV9iaW5kIC0gYmluZCBkc2kgZGV2aWNlIHdpdGggY29u dHJvbGxpbmcgZGV2aWNlCi0gKiBAZGV2OiAgICAgICAgUG9pbnRlciB0byBiYXNlIG9mIHBsYXRm b3JtIGRldmljZQotICogQG1hc3RlcjogICAgIFBvaW50ZXIgdG8gY29udGFpbmVyIG9mIGRybSBk ZXZpY2UKLSAqIEBkYXRhOiAgICAgICBQb2ludGVyIHRvIHByaXZhdGUgZGF0YQotICogUmV0dXJu czogICAgIFplcm8gb24gc3VjY2VzcwotICovCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X2JpbmQo c3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCi0JCXZvaWQgKmRh dGEpCi17Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKmRpc3BsYXlfY3RybDsKLQlzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtOwotCXN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheTsKLQlzdHJ1Y3Qg ZHNpX2Nsa19pbmZvIGluZm87Ci0Jc3RydWN0IGNsa19jdHJsX2NiIGNsa19jYjsKLQlzdHJ1Y3Qg bXNtX2RybV9wcml2YXRlICpwcml2OwotCXZvaWQgKmhhbmRsZSA9IE5VTEw7Ci0Jc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCWNoYXIgKmNs aWVudDEgPSAiZHNpX2Nsa19jbGllbnQiOwotCWNoYXIgKmNsaWVudDIgPSAibWRwX2V2ZW50X2Ns aWVudCI7Ci0JY2hhciBkc2lfY2xpZW50X25hbWVbRFNJX0NMSUVOVF9OQU1FX1NJWkVdOwotCWlu dCBpLCByYyA9IDA7Ci0KLQlpZiAoIWRldiB8fCAhcGRldiB8fCAhbWFzdGVyKSB7Ci0JCXByX2Vy cigiaW52YWxpZCBwYXJhbShzKSwgZGV2ICVwSywgcGRldiAlcEssIG1hc3RlciAlcEtcbiIsCi0J CQkJZGV2LCBwZGV2LCBtYXN0ZXIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkcm0gPSBk ZXZfZ2V0X2RydmRhdGEobWFzdGVyKTsKLQlkaXNwbGF5ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEo cGRldik7Ci0JaWYgKCFkcm0gfHwgIWRpc3BsYXkpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFt KHMpLCBkcm0gJXBLLCBkaXNwbGF5ICVwS1xuIiwKLQkJCQlkcm0sIGRpc3BsYXkpOwotCQlyZXR1 cm4gLUVJTlZBTDsKLQl9Ci0JcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7Ci0KLQltdXRleF9sb2Nr KCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCi0JcmMgPSBkc2lfZGlzcGxheV9kZWJ1Z2ZzX2lu aXQoZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBkZWJ1Z2ZzIGluaXQgZmFp bGVkLCByYz0lZFxuIiwgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQot CW1lbXNldCgmaW5mbywgMHgwLCBzaXplb2YoaW5mbykpOwotCi0JZm9yIChpID0gMDsgaSA8IGRp c3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQlkaXNwbGF5X2N0cmwgPSAmZGlzcGxheS0+Y3Ry bFtpXTsKLQkJcmMgPSBkc2lfY3RybF9kcnZfaW5pdChkaXNwbGF5X2N0cmwtPmN0cmwsIGRpc3Bs YXktPnJvb3QpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gaW5pdGlh bGl6ZSBjdHJsWyVkXSwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgaSwgcmMp OwotCQkJZ290byBlcnJvcl9jdHJsX2RlaW5pdDsKLQkJfQotCQlkaXNwbGF5X2N0cmwtPmN0cmwt Pmhvcml6X2luZGV4ID0gaTsKLQotCQlyYyA9IGRzaV9waHlfZHJ2X2luaXQoZGlzcGxheV9jdHJs LT5waHkpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBGYWlsZWQgdG8gaW5pdGlhbGl6 ZSBwaHlbJWRdLCByYz0lZFxuIiwKLQkJCQlkaXNwbGF5LT5uYW1lLCBpLCByYyk7Ci0JCQkodm9p ZClkc2lfY3RybF9kcnZfZGVpbml0KGRpc3BsYXlfY3RybC0+Y3RybCk7Ci0JCQlnb3RvIGVycm9y X2N0cmxfZGVpbml0OwotCQl9Ci0KLQkJbWVtY3B5KCZpbmZvLmNfY2xrc1tpXSwgJmRpc3BsYXlf Y3RybC0+Y3RybC0+Y2xrX2luZm8uY29yZV9jbGtzLAotCQkJc2l6ZW9mKHN0cnVjdCBkc2lfY29y ZV9jbGtfaW5mbykpOwotCQltZW1jcHkoJmluZm8ubF9jbGtzW2ldLCAmZGlzcGxheV9jdHJsLT5j dHJsLT5jbGtfaW5mby5saW5rX2Nsa3MsCi0JCQlzaXplb2Yoc3RydWN0IGRzaV9saW5rX2Nsa19p bmZvKSk7Ci0JCWluZm8uY19jbGtzW2ldLnBoYW5kbGUgPSAmcHJpdi0+cGhhbmRsZTsKLQkJaW5m by5idXNfaGFuZGxlW2ldID0KLQkJCWRpc3BsYXlfY3RybC0+Y3RybC0+YXhpX2J1c19pbmZvLmJ1 c19oYW5kbGU7Ci0JCWluZm8uY3RybF9pbmRleFtpXSA9IGRpc3BsYXlfY3RybC0+Y3RybC0+Y2Vs bF9pbmRleDsKLQkJc25wcmludGYoZHNpX2NsaWVudF9uYW1lLCBEU0lfQ0xJRU5UX05BTUVfU0la RSwKLQkJCQkJCSJkc2lfY29yZV9jbGllbnQldSIsIGkpOwotCQlpbmZvLmNfY2xrc1tpXS5kc2lf Y29yZV9jbGllbnQgPSBkcHVfcG93ZXJfY2xpZW50X2NyZWF0ZSgKLQkJCQlpbmZvLmNfY2xrc1tp XS5waGFuZGxlLCBkc2lfY2xpZW50X25hbWUpOwotCQlpZiAoSVNfRVJSX09SX05VTEwoaW5mby5j X2Nsa3NbaV0uZHNpX2NvcmVfY2xpZW50KSkgewotCQkJcHJfZXJyKCJbJXNdIGNsaWVudCBjcmVh dGlvbiBmYWlsZWQgZm9yIGN0cmxbJWRdIiwKLQkJCQkJZHNpX2NsaWVudF9uYW1lLCBpKTsKLQkJ CWdvdG8gZXJyb3JfY3RybF9kZWluaXQ7Ci0JCX0KLQl9Ci0KLQlpbmZvLnByZV9jbGtvZmZfY2Ig PSBkc2lfcHJlX2Nsa29mZl9jYjsKLQlpbmZvLnByZV9jbGtvbl9jYiA9IGRzaV9wcmVfY2xrb25f Y2I7Ci0JaW5mby5wb3N0X2Nsa29mZl9jYiA9IGRzaV9wb3N0X2Nsa29mZl9jYjsKLQlpbmZvLnBv c3RfY2xrb25fY2IgPSBkc2lfcG9zdF9jbGtvbl9jYjsKLQlpbmZvLnByaXZfZGF0YSA9IGRpc3Bs YXk7Ci0JaW5mby5tYXN0ZXJfbmR4ID0gZGlzcGxheS0+Y2xrX21hc3Rlcl9pZHg7Ci0JaW5mby5k c2lfY3RybF9jb3VudCA9IGRpc3BsYXktPmN0cmxfY291bnQ7Ci0Jc25wcmludGYoaW5mby5uYW1l LCBNQVhfU1RSSU5HX0xFTiwKLQkJCSJEU0lfTU5HUi0lcyIsIGRpc3BsYXktPm5hbWUpOwotCi0J ZGlzcGxheS0+Y2xrX21uZ3IgPSBkc2lfZGlzcGxheV9jbGtfbW5ncl9yZWdpc3RlcigmaW5mbyk7 Ci0JaWYgKElTX0VSUl9PUl9OVUxMKGRpc3BsYXktPmNsa19tbmdyKSkgewotCQlyYyA9IFBUUl9F UlIoZGlzcGxheS0+Y2xrX21uZ3IpOwotCQlkaXNwbGF5LT5jbGtfbW5nciA9IE5VTEw7Ci0JCXBy X2VycigiZHNpIGNsb2NrIHJlZ2lzdHJhdGlvbiBmYWlsZWQsIHJjID0gJWRcbiIsIHJjKTsKLQkJ Z290byBlcnJvcl9jdHJsX2RlaW5pdDsKLQl9Ci0KLQloYW5kbGUgPSBkc2lfcmVnaXN0ZXJfY2xr X2hhbmRsZShkaXNwbGF5LT5jbGtfbW5nciwgY2xpZW50MSk7Ci0JaWYgKElTX0VSUl9PUl9OVUxM KGhhbmRsZSkpIHsKLQkJcmMgPSBQVFJfRVJSKGhhbmRsZSk7Ci0JCXByX2VycigiZmFpbGVkIHRv IHJlZ2lzdGVyICVzIGNsaWVudCwgcmMgPSAlZFxuIiwKLQkJICAgICAgIGNsaWVudDEsIHJjKTsK LQkJZ290byBlcnJvcl9jbGtfZGVpbml0OwotCX0gZWxzZSB7Ci0JCWRpc3BsYXktPmRzaV9jbGtf aGFuZGxlID0gaGFuZGxlOwotCX0KLQotCWhhbmRsZSA9IGRzaV9yZWdpc3Rlcl9jbGtfaGFuZGxl KGRpc3BsYXktPmNsa19tbmdyLCBjbGllbnQyKTsKLQlpZiAoSVNfRVJSX09SX05VTEwoaGFuZGxl KSkgewotCQlyYyA9IFBUUl9FUlIoaGFuZGxlKTsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcmVnaXN0 ZXIgJXMgY2xpZW50LCByYyA9ICVkXG4iLAotCQkgICAgICAgY2xpZW50MiwgcmMpOwotCQlnb3Rv IGVycm9yX2Nsa19jbGllbnRfZGVpbml0OwotCX0gZWxzZSB7Ci0JCWRpc3BsYXktPm1kcF9jbGtf aGFuZGxlID0gaGFuZGxlOwotCX0KLQotCWNsa19jYi5wcml2ID0gZGlzcGxheTsKLQljbGtfY2Iu ZHNpX2Nsa19jYiA9IGRzaV9kaXNwbGF5X2Nsa19jdHJsX2NiOwotCi0JZm9yIChpID0gMDsgaSA8 IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQlkaXNwbGF5X2N0cmwgPSAmZGlzcGxheS0+ Y3RybFtpXTsKLQotCQlyYyA9IGRzaV9jdHJsX2Nsa19jYl9yZWdpc3RlcihkaXNwbGF5X2N0cmwt PmN0cmwsICZjbGtfY2IpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8g cmVnaXN0ZXIgY3RybCBjbGtfY2JbJWRdLCByYz0lZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5LT5u YW1lLCBpLCByYyk7Ci0JCQlnb3RvIGVycm9yX2N0cmxfZGVpbml0OwotCQl9Ci0KLQkJcmMgPSBk c2lfcGh5X2Nsa19jYl9yZWdpc3RlcihkaXNwbGF5X2N0cmwtPnBoeSwgJmNsa19jYik7Ci0JCWlm IChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byByZWdpc3RlciBwaHkgY2xrX2NiWyVk XSwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgaSwgcmMpOwotCQkJZ290byBl cnJvcl9jdHJsX2RlaW5pdDsKLQkJfQotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlfbWlwaV9ob3N0 X2luaXQoZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gaW5p dGlhbGl6ZSBtaXBpIGhvc3QsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMp OwotCQlnb3RvIGVycm9yX2N0cmxfZGVpbml0OwotCX0KLQotCXJjID0gZHNpX3BhbmVsX2Rydl9p bml0KGRpc3BsYXktPnBhbmVsLCAmZGlzcGxheS0+aG9zdCk7Ci0JaWYgKHJjKSB7Ci0JCWlmIChy YyAhPSAtRVBST0JFX0RFRkVSKQotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBpbml0aWFsaXpl IHBhbmVsIGRyaXZlciwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwot CQlnb3RvIGVycm9yX2hvc3RfZGVpbml0OwotCX0KLQotCXByX2luZm8oIlN1Y2Nlc3NmdWxseSBi aW5kIGRpc3BsYXkgcGFuZWwgJyVzJ1xuIiwgZGlzcGxheS0+bmFtZSk7Ci0JZGlzcGxheS0+ZHJt X2RldiA9IGRybTsKLQlnb3RvIGVycm9yOwotCi1lcnJvcl9ob3N0X2RlaW5pdDoKLQkodm9pZClk c2lfZGlzcGxheV9taXBpX2hvc3RfZGVpbml0KGRpc3BsYXkpOwotZXJyb3JfY2xrX2NsaWVudF9k ZWluaXQ6Ci0JKHZvaWQpZHNpX2RlcmVnaXN0ZXJfY2xrX2hhbmRsZShkaXNwbGF5LT5kc2lfY2xr X2hhbmRsZSk7Ci1lcnJvcl9jbGtfZGVpbml0OgotCSh2b2lkKWRzaV9kaXNwbGF5X2Nsa19tbmdy X2RlcmVnaXN0ZXIoZGlzcGxheS0+Y2xrX21uZ3IpOwotZXJyb3JfY3RybF9kZWluaXQ6Ci0JZm9y IChpID0gaSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCWRpc3BsYXlfY3RybCA9ICZkaXNwbGF5LT5j dHJsW2ldOwotCQkodm9pZClkc2lfcGh5X2Rydl9kZWluaXQoZGlzcGxheV9jdHJsLT5waHkpOwot CQkodm9pZClkc2lfY3RybF9kcnZfZGVpbml0KGRpc3BsYXlfY3RybC0+Y3RybCk7Ci0JfQotCSh2 b2lkKWRzaV9kaXNwbGF5X2RlYnVnZnNfZGVpbml0KGRpc3BsYXkpOwotZXJyb3I6Ci0JbXV0ZXhf dW5sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCXJldHVybiByYzsKLX0KLQotLyoqCi0g KiBkc2lfZGlzcGxheV91bmJpbmQgLSB1bmJpbmQgZHNpIGZyb20gY29udHJvbGxpbmcgZGV2aWNl Ci0gKiBAZGV2OiAgICAgICAgUG9pbnRlciB0byBiYXNlIG9mIHBsYXRmb3JtIGRldmljZQotICog QG1hc3RlcjogICAgIFBvaW50ZXIgdG8gY29udGFpbmVyIG9mIGRybSBkZXZpY2UKLSAqIEBkYXRh OiAgICAgICBQb2ludGVyIHRvIHByaXZhdGUgZGF0YQotICovCi1zdGF0aWMgdm9pZCBkc2lfZGlz cGxheV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlICptYXN0ZXIs IHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKmRpc3BsYXlfY3RybDsK LQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXk7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCWludCBpLCByYyA9IDA7Ci0KLQlpZiAo IWRldiB8fCAhcGRldikgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW0ocylcbiIpOwotCQlyZXR1 cm47Ci0JfQotCi0JZGlzcGxheSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCWlmICgh ZGlzcGxheSkgewotCQlwcl9lcnIoImludmFsaWQgZGlzcGxheVxuIik7Ci0JCXJldHVybjsKLQl9 Ci0KLQltdXRleF9sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCi0JcmMgPSBkc2lfcGFu ZWxfZHJ2X2RlaW5pdChkaXNwbGF5LT5wYW5lbCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlslc10g ZmFpbGVkIHRvIGRlaW5pdCBwYW5lbCBkcml2ZXIsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxh eS0+bmFtZSwgcmMpOwotCi0JcmMgPSBkc2lfZGlzcGxheV9taXBpX2hvc3RfZGVpbml0KGRpc3Bs YXkpOwotCWlmIChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBkZWluaXQgbWlwaSBob3N0 cywgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLAotCQkgICAgICAgcmMpOwotCi0J Zm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQlkaXNwbGF5X2N0 cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQotCQlyYyA9IGRzaV9waHlfZHJ2X2RlaW5pdChkaXNw bGF5X2N0cmwtPnBoeSk7Ci0JCWlmIChyYykKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGVp bml0IHBoeSVkIGRyaXZlciwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgaSwg cmMpOwotCi0JCXJjID0gZHNpX2N0cmxfZHJ2X2RlaW5pdChkaXNwbGF5X2N0cmwtPmN0cmwpOwot CQlpZiAocmMpCi0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGRlaW5pdCBjdHJsJWQgZHJpdmVy LCByYz0lZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCBpLCByYyk7Ci0JfQotCSh2b2lk KWRzaV9kaXNwbGF5X2RlYnVnZnNfZGVpbml0KGRpc3BsYXkpOwotCi0JbXV0ZXhfdW5sb2NrKCZk aXNwbGF5LT5kaXNwbGF5X2xvY2spOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVu dF9vcHMgZHNpX2Rpc3BsYXlfY29tcF9vcHMgPSB7Ci0JLmJpbmQgPSBkc2lfZGlzcGxheV9iaW5k LAotCS51bmJpbmQgPSBkc2lfZGlzcGxheV91bmJpbmQsCi19OwotCi1zdGF0aWMgc3RydWN0IHBs YXRmb3JtX2RyaXZlciBkc2lfZGlzcGxheV9kcml2ZXIgPSB7Ci0JLnByb2JlID0gZHNpX2Rpc3Bs YXlfZGV2X3Byb2JlLAotCS5yZW1vdmUgPSBkc2lfZGlzcGxheV9kZXZfcmVtb3ZlLAotCS5kcml2 ZXIgPSB7Ci0JCS5uYW1lID0gIm1zbS1kc2ktZGlzcGxheSIsCi0JCS5vZl9tYXRjaF90YWJsZSA9 IGRzaV9kaXNwbGF5X2R0X21hdGNoLAotCX0sCi19OwotCi1pbnQgZHNpX2Rpc3BsYXlfZGV2X3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1 Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXk7Ci0Jc3RhdGljIGJvb2wgZGlzcGxheV9mcm9tX2NtZGxp bmUsIGJvb3RfZGlzcGxheXNfcGFyc2VkOwotCXN0YXRpYyBib29sIGNvbXBfYWRkX3N1Y2Nlc3M7 Ci0Jc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcHJpbWFyeV9ucCwgKnNlY29uZGFyeV9ucDsK LQotCWlmICghcGRldiB8fCAhcGRldi0+ZGV2Lm9mX25vZGUpIHsKLQkJcHJfZXJyKCJwZGV2IG5v dCBmb3VuZFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWRpc3BsYXkgPSBkZXZtX2t6 YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkaXNwbGF5KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFk aXNwbGF5KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWRpc3BsYXktPm5hbWUgPSBvZl9nZXRfcHJv cGVydHkocGRldi0+ZGV2Lm9mX25vZGUsICJsYWJlbCIsIE5VTEwpOwotCi0JaWYgKCFib290X2Rp c3BsYXlzX3BhcnNlZCkgewotCQlib290X2Rpc3BsYXlzW0RTSV9QUklNQVJZXS5ib290X2Rpc3Bf ZW4gPSBmYWxzZTsKLQkJYm9vdF9kaXNwbGF5c1tEU0lfU0VDT05EQVJZXS5ib290X2Rpc3BfZW4g PSBmYWxzZTsKLQkJaWYgKGRzaV9kaXNwbGF5X3BhcnNlX2Jvb3RfZGlzcGxheV9zZWxlY3Rpb24o KSkKLQkJCXByX2RlYnVnKCJEaXNwbGF5IEJvb3QgcGFyYW0gbm90IHZhbGlkL2F2YWlsYWJsZVxu Iik7Ci0KLQkJYm9vdF9kaXNwbGF5c19wYXJzZWQgPSB0cnVlOwotCX0KLQotCS8qIHVzZSBkZWZh dWx0IHRvcG9sb2d5IG9mIGV2ZXJ5IG1vZGUgaWYgbm90IG92ZXJyaWRkZW4gKi8KLQlkaXNwbGF5 LT5jbWRsaW5lX3RvcG9sb2d5ID0gTk9fT1ZFUlJJREU7Ci0JZGlzcGxheS0+Y21kbGluZV90aW1p bmcgPSAwOwotCi0JaWYgKCghZGlzcGxheV9mcm9tX2NtZGxpbmUpICYmCi0JCQkoYm9vdF9kaXNw bGF5c1tEU0lfUFJJTUFSWV0uYm9vdF9kaXNwX2VuKSkgewotCQlkaXNwbGF5LT5pc19hY3RpdmUg PSBkc2lfZGlzcGxheV9uYW1lX2NvbXBhcmUocGRldi0+ZGV2Lm9mX25vZGUsCi0JCQkJCQlkaXNw bGF5LT5uYW1lLCBEU0lfUFJJTUFSWSk7Ci0JCWlmIChkaXNwbGF5LT5pc19hY3RpdmUpIHsKLQkJ CWlmIChjb21wX2FkZF9zdWNjZXNzKSB7Ci0JCQkJKHZvaWQpX2RzaV9kaXNwbGF5X2Rldl9kZWlu aXQobWFpbl9kaXNwbGF5KTsKLQkJCQljb21wb25lbnRfZGVsKCZtYWluX2Rpc3BsYXktPnBkZXYt PmRldiwKLQkJCQkJICAgICAgJmRzaV9kaXNwbGF5X2NvbXBfb3BzKTsKLQkJCQltdXRleF9sb2Nr KCZkc2lfZGlzcGxheV9saXN0X2xvY2spOwotCQkJCWxpc3RfZGVsKCZtYWluX2Rpc3BsYXktPmxp c3QpOwotCQkJCW11dGV4X3VubG9jaygmZHNpX2Rpc3BsYXlfbGlzdF9sb2NrKTsKLQkJCQljb21w X2FkZF9zdWNjZXNzID0gZmFsc2U7Ci0JCQkJZGVmYXVsdF9hY3RpdmVfbm9kZSA9IE5VTEw7Ci0J CQkJcHJfZGVidWcoInJlbW92ZWQgdGhlIGV4aXN0aW5nIGNvbXAgb3BzXG4iKTsKLQkJCX0KLQkJ CS8qCi0JCQkgKiBOZWVkIHRvIGFkZCBjb21wb25lbnQgZm9yCi0JCQkgKiB0aGUgc2Vjb25kYXJ5 IERTSSBkaXNwbGF5Ci0JCQkgKiB3aGVuIG1vcmUgdGhhbiBvbmUgRFNJIGRpc3BsYXkKLQkJCSAq IGlzIHN1cHBvcnRlZC4KLQkJCSAqLwotCQkJcHJfZGVidWcoImNtZGxpbmUgcHJpbWFyeSBkc2k6 ICVzXG4iLAotCQkJCQkJZGlzcGxheS0+bmFtZSk7Ci0JCQlkaXNwbGF5X2Zyb21fY21kbGluZSA9 IHRydWU7Ci0JCQlkc2lfZGlzcGxheV9wYXJzZV9jbWRsaW5lX3RvcG9sb2d5KGRpc3BsYXksCi0J CQkJCURTSV9QUklNQVJZKTsKLQkJCXByaW1hcnlfbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKLQkJ fQotCX0KLQotCWlmIChib290X2Rpc3BsYXlzW0RTSV9TRUNPTkRBUlldLmJvb3RfZGlzcF9lbgot CQkJJiYgIXNlY29uZGFyeV9ucAotCQkJJiYgZHNpX2Rpc3BsYXlfbmFtZV9jb21wYXJlKHBkZXYt PmRldi5vZl9ub2RlLAotCQkJCQkJZGlzcGxheS0+bmFtZSwgRFNJX1NFQ09OREFSWSkpIHsKLQkJ cHJfZGVidWcoImNtZGxpbmUgc2Vjb25kYXJ5IGRzaTogJXNcbiIsCi0JCQkJCWRpc3BsYXktPm5h bWUpOwotCQlzZWNvbmRhcnlfbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKLQkJaWYgKHByaW1hcnlf bnApIHsKLQkJCWlmICh2YWxpZGF0ZV9kc2lfZGlzcGxheV9zZWxlY3Rpb24oKSkgewotCQkJCWRp c3BsYXktPmlzX2FjdGl2ZSA9IHRydWU7Ci0JCQkJZHNpX2Rpc3BsYXlfcGFyc2VfY21kbGluZV90 b3BvbG9neSgKLQkJCQkJCWRpc3BsYXksIERTSV9TRUNPTkRBUlkpOwotCQkJfSBlbHNlIHsKLQkJ CQlib290X2Rpc3BsYXlzW0RTSV9TRUNPTkRBUlldCi0JCQkJCS5ib290X2Rpc3BfZW4gPSBmYWxz ZTsKLQkJCX0KLQkJfQotCX0KLQlkaXNwbGF5LT5kaXNwbGF5X3R5cGUgPSBvZl9nZXRfcHJvcGVy dHkocGRldi0+ZGV2Lm9mX25vZGUsCi0JCQkJCQkicWNvbSxkaXNwbGF5LXR5cGUiLCBOVUxMKTsK LQlpZiAoIWRpc3BsYXktPmRpc3BsYXlfdHlwZSkKLQkJZGlzcGxheS0+ZGlzcGxheV90eXBlID0g InVua25vd24iOwotCi0JbXV0ZXhfaW5pdCgmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQlkaXNw bGF5LT5wZGV2ID0gcGRldjsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkaXNwbGF5KTsK LQltdXRleF9sb2NrKCZkc2lfZGlzcGxheV9saXN0X2xvY2spOwotCWxpc3RfYWRkKCZkaXNwbGF5 LT5saXN0LCAmZHNpX2Rpc3BsYXlfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfZGlzcGxheV9s aXN0X2xvY2spOwotCi0JaWYgKCFkaXNwbGF5X2Zyb21fY21kbGluZSkKLQkJZGlzcGxheS0+aXNf YWN0aXZlID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKHBkZXYtPmRldi5vZl9ub2RlLAotCQkJCQkJ InFjb20sZHNpLWRpc3BsYXktYWN0aXZlIik7Ci0KLQlpZiAoZGlzcGxheS0+aXNfYWN0aXZlKSB7 Ci0JCW1haW5fZGlzcGxheSA9IGRpc3BsYXk7Ci0JCXJjID0gX2RzaV9kaXNwbGF5X2Rldl9pbml0 KGRpc3BsYXkpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZGV2aWNlIGluaXQgZmFpbGVkLCBy Yz0lZFxuIiwgcmMpOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0KLQkJcmMgPSBjb21wb25lbnRfYWRk KCZwZGV2LT5kZXYsICZkc2lfZGlzcGxheV9jb21wX29wcyk7Ci0JCWlmIChyYykKLQkJCXByX2Vy cigiY29tcG9uZW50IGFkZCBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Ci0KLQkJY29tcF9hZGRfc3Vj Y2VzcyA9IHRydWU7Ci0JCXByX2RlYnVnKCJDb21wb25lbnRfYWRkIHN1Y2Nlc3M6ICVzXG4iLCBk aXNwbGF5LT5uYW1lKTsKLQkJaWYgKCFkaXNwbGF5X2Zyb21fY21kbGluZSkKLQkJCWRlZmF1bHRf YWN0aXZlX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKLQl9Ci0JcmV0dXJuIHJjOwotfQotCi1p bnQgZHNpX2Rpc3BsYXlfZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQot ewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5OwotCXN0cnVjdCBk c2lfZGlzcGxheSAqcG9zLCAqdG1wOwotCi0JaWYgKCFwZGV2KSB7Ci0JCXByX2VycigiSW52YWxp ZCBkZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkaXNwbGF5ID0gcGxhdGZv cm1fZ2V0X2RydmRhdGEocGRldik7Ci0KLQkodm9pZClfZHNpX2Rpc3BsYXlfZGV2X2RlaW5pdChk aXNwbGF5KTsKLQotCW11dGV4X2xvY2soJmRzaV9kaXNwbGF5X2xpc3RfbG9jayk7Ci0JbGlzdF9m b3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgdG1wLCAmZHNpX2Rpc3BsYXlfbGlzdCwgbGlzdCkgewot CQlpZiAocG9zID09IGRpc3BsYXkpIHsKLQkJCWxpc3RfZGVsKCZkaXNwbGF5LT5saXN0KTsKLQkJ CWJyZWFrOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmZHNpX2Rpc3BsYXlfbGlzdF9sb2NrKTsK LQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCWRldm1fa2ZyZWUoJnBkZXYt PmRldiwgZGlzcGxheSk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX2Rpc3BsYXlfZ2V0X251 bV9vZl9kaXNwbGF5cyh2b2lkKQotewotCWludCBjb3VudCA9IDA7Ci0Jc3RydWN0IGRzaV9kaXNw bGF5ICpkaXNwbGF5OwotCi0JbXV0ZXhfbG9jaygmZHNpX2Rpc3BsYXlfbGlzdF9sb2NrKTsKLQot CWxpc3RfZm9yX2VhY2hfZW50cnkoZGlzcGxheSwgJmRzaV9kaXNwbGF5X2xpc3QsIGxpc3QpIHsK LQkJY291bnQrKzsKLQl9Ci0KLQltdXRleF91bmxvY2soJmRzaV9kaXNwbGF5X2xpc3RfbG9jayk7 Ci0JcmV0dXJuIGNvdW50OwotfQotCi1pbnQgZHNpX2Rpc3BsYXlfZ2V0X2FjdGl2ZV9kaXNwbGF5 cyh2b2lkICoqZGlzcGxheV9hcnJheSwgdTMyIG1heF9kaXNwbGF5X2NvdW50KQotewotCXN0cnVj dCBkc2lfZGlzcGxheSAqcG9zOwotCWludCBpID0gMDsKLQotCWlmICghZGlzcGxheV9hcnJheSB8 fCAhbWF4X2Rpc3BsYXlfY291bnQpIHsKLQkJaWYgKCFkaXNwbGF5X2FycmF5KQotCQkJcHJfZXJy KCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCW11dGV4X2xvY2soJmRz aV9kaXNwbGF5X2xpc3RfbG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmRzaV9k aXNwbGF5X2xpc3QsIGxpc3QpIHsKLQkJaWYgKGkgPj0gbWF4X2Rpc3BsYXlfY291bnQpIHsKLQkJ CXByX2VycigiY2FwcGluZyBkaXNwbGF5IGNvdW50IHRvICVkXG4iLCBpKTsKLQkJCWJyZWFrOwot CQl9Ci0JCWlmIChwb3MtPmlzX2FjdGl2ZSkKLQkJCWRpc3BsYXlfYXJyYXlbaSsrXSA9IHBvczsK LQl9Ci0KLQltdXRleF91bmxvY2soJmRzaV9kaXNwbGF5X2xpc3RfbG9jayk7Ci0JcmV0dXJuIGk7 Ci19Ci0KLXN0cnVjdCBkc2lfZGlzcGxheSAqZHNpX2Rpc3BsYXlfZ2V0X2Rpc3BsYXlfYnlfbmFt ZShjb25zdCBjaGFyICpuYW1lKQotewotCXN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSA9IE5V TEwsICpwb3M7Ci0KLQltdXRleF9sb2NrKCZkc2lfZGlzcGxheV9saXN0X2xvY2spOwotCi0JbGlz dF9mb3JfZWFjaF9lbnRyeShwb3MsICZkc2lfZGlzcGxheV9saXN0LCBsaXN0KSB7Ci0JCWlmICgh c3RyY21wKG5hbWUsIHBvcy0+bmFtZSkpCi0JCQlkaXNwbGF5ID0gcG9zOwotCX0KLQotCW11dGV4 X3VubG9jaygmZHNpX2Rpc3BsYXlfbGlzdF9sb2NrKTsKLQotCXJldHVybiBkaXNwbGF5OwotfQot Ci12b2lkIGRzaV9kaXNwbGF5X3NldF9hY3RpdmVfc3RhdGUoc3RydWN0IGRzaV9kaXNwbGF5ICpk aXNwbGF5LCBib29sIGlzX2FjdGl2ZSkKLXsKLQltdXRleF9sb2NrKCZkaXNwbGF5LT5kaXNwbGF5 X2xvY2spOwotCWRpc3BsYXktPmlzX2FjdGl2ZSA9IGlzX2FjdGl2ZTsKLQltdXRleF91bmxvY2so JmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci19Ci0KLWludCBkc2lfZGlzcGxheV9kcm1fYnJpZGdl X2luaXQoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAotCQlzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuYykKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfYnJpZGdlICpicmlkZ2U7Ci0Jc3Ry dWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IE5VTEw7Ci0KLQlpZiAoIWRpc3BsYXkgfHwgIWRp c3BsYXktPmRybV9kZXYgfHwgIWVuYykgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW0ocylcbiIp OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkaXNwbGF5LT5kaXNwbGF5 X2xvY2spOwotCXByaXYgPSBkaXNwbGF5LT5kcm1fZGV2LT5kZXZfcHJpdmF0ZTsKLQotCWlmICgh cHJpdikgewotCQlwcl9lcnIoIlByaXZhdGUgZGF0YSBpcyBub3QgcHJlc2VudFxuIik7Ci0JCXJj ID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAoZGlzcGxheS0+YnJpZGdlKSB7 Ci0JCXByX2VycigiZGlzcGxheSBpcyBhbHJlYWR5IGluaXRpYWxpemVcbiIpOwotCQlnb3RvIGVy cm9yOwotCX0KLQotCWJyaWRnZSA9IGRzaV9kcm1fYnJpZGdlX2luaXQoZGlzcGxheSwgZGlzcGxh eS0+ZHJtX2RldiwgZW5jKTsKLQlpZiAoSVNfRVJSX09SX05VTEwoYnJpZGdlKSkgewotCQlyYyA9 IFBUUl9FUlIoYnJpZGdlKTsKLQkJcHJfZXJyKCJbJXNdIGJyaWdlIGluaXQgZmFpbGVkLCAlZFxu IiwgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWRpc3BsYXktPmJy aWRnZSA9IGJyaWRnZTsKLQlwcml2LT5icmlkZ2VzW3ByaXYtPm51bV9icmlkZ2VzKytdID0gJmJy aWRnZS0+YmFzZTsKLQotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xv Y2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9kaXNwbGF5X2RybV9icmlkZ2VfZGVpbml0 KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFk aXNwbGF5KSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZB TDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCi0JZHNpX2Ry bV9icmlkZ2VfY2xlYW51cChkaXNwbGF5LT5icmlkZ2UpOwotCWRpc3BsYXktPmJyaWRnZSA9IE5V TEw7Ci0KLQltdXRleF91bmxvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0JcmV0dXJuIHJj OwotfQotCi1pbnQgZHNpX2Rpc3BsYXlfZ2V0X2luZm8oc3RydWN0IG1zbV9kaXNwbGF5X2luZm8g KmluZm8sIHZvaWQgKmRpc3ApCi17Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5OwotCXN0 cnVjdCBkc2lfcGFuZWxfcGh5X3Byb3BzIHBoeV9wcm9wczsKLQlpbnQgaSwgcmM7Ci0KLQlpZiAo IWluZm8gfHwgIWRpc3ApIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVy biAtRUlOVkFMOwotCX0KLQotCWRpc3BsYXkgPSBkaXNwOwotCWlmICghZGlzcGxheS0+cGFuZWwp IHsKLQkJcHJfZXJyKCJpbnZhbGlkIGRpc3BsYXkgcGFuZWxcbiIpOwotCQlyZXR1cm4gLUVJTlZB TDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCXJjID0gZHNp X3BhbmVsX2dldF9waHlfcHJvcHMoZGlzcGxheS0+cGFuZWwsICZwaHlfcHJvcHMpOwotCWlmIChy YykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGdldCBwYW5lbCBwaHkgcHJvcHMsIHJjPSVk XG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQot CW1lbXNldChpbmZvLCAwLCBzaXplb2Yoc3RydWN0IG1zbV9kaXNwbGF5X2luZm8pKTsKLQlpbmZv LT5pbnRmX3R5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfRFNJOwotCWluZm8tPm51bV9vZl9oX3Rp bGVzID0gZGlzcGxheS0+Y3RybF9jb3VudDsKLQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bnVtX29m X2hfdGlsZXM7IGkrKykKLQkJaW5mby0+aF90aWxlX2luc3RhbmNlW2ldID0gZGlzcGxheS0+Y3Ry bFtpXS5jdHJsLT5jZWxsX2luZGV4OwotCi0JaW5mby0+aXNfY29ubmVjdGVkID0gdHJ1ZTsKLQlp bmZvLT5pc19wcmltYXJ5ID0gdHJ1ZTsKLQlpbmZvLT53aWR0aF9tbSA9IHBoeV9wcm9wcy5wYW5l bF93aWR0aF9tbTsKLQlpbmZvLT5oZWlnaHRfbW0gPSBwaHlfcHJvcHMucGFuZWxfaGVpZ2h0X21t OwotCWluZm8tPm1heF93aWR0aCA9IDE5MjA7Ci0JaW5mby0+bWF4X2hlaWdodCA9IDEwODA7Ci0K LQlzd2l0Y2ggKGRpc3BsYXktPnBhbmVsLT5wYW5lbF9tb2RlKSB7Ci0JY2FzZSBEU0lfT1BfVklE RU9fTU9ERToKLQkJaW5mby0+Y2FwYWJpbGl0aWVzIHw9IE1TTV9ESVNQTEFZX0NBUF9WSURfTU9E RTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfT1BfQ01EX01PREU6Ci0JCWluZm8tPmNhcGFiaWxpdGll cyB8PSBNU01fRElTUExBWV9DQVBfQ01EX01PREU7Ci0JCWluZm8tPmlzX3RlX3VzaW5nX3dhdGNo ZG9nX3RpbWVyID0KLQkJCWRpc3BsYXktPnBhbmVsLT50ZV91c2luZ193YXRjaGRvZ190aW1lcjsK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJfZXJyKCJ1bmtud293biBkc2kgcGFuZWwgbW9kZSAl ZFxuIiwKLQkJCQlkaXNwbGF5LT5wYW5lbC0+cGFuZWxfbW9kZSk7Ci0JCWJyZWFrOwotCX0KLQot ZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCXJldHVybiBy YzsKLX0KLQotaW50IGRzaV9kaXNwbGF5X2dldF9tb2RlX2NvdW50KHN0cnVjdCBkc2lfZGlzcGxh eSAqZGlzcGxheSwKLQkJCXUzMiAqY291bnQpCi17Ci0Jc3RydWN0IGRzaV9kZnBzX2NhcGFiaWxp dGllcyBkZnBzX2NhcHM7Ci0JaW50IG51bV9kZnBzX3JhdGVzLCByYyA9IDA7Ci0KLQlpZiAoIWRp c3BsYXkgfHwgIWRpc3BsYXktPnBhbmVsKSB7Ci0JCXByX2VycigiaW52YWxpZCBkaXNwbGF5OiVk IHBhbmVsOiVkXG4iLCBkaXNwbGF5ICE9IE5VTEwsCi0JCQkJZGlzcGxheSA/IGRpc3BsYXktPnBh bmVsICE9IE5VTEwgOiAwKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygm ZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQotCSpjb3VudCA9IGRpc3BsYXktPnBhbmVsLT5udW1f dGltaW5nX25vZGVzOwotCi0JcmMgPSBkc2lfcGFuZWxfZ2V0X2RmcHNfY2FwcyhkaXNwbGF5LT5w YW5lbCwgJmRmcHNfY2Fwcyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8g Z2V0IGRmcHMgY2FwcyBmcm9tIHBhbmVsXG4iLAotCQkJCWRpc3BsYXktPm5hbWUpOwotCQlnb3Rv IGRvbmU7Ci0JfQotCi0JbnVtX2RmcHNfcmF0ZXMgPSAhZGZwc19jYXBzLmRmcHNfc3VwcG9ydCA/ IDEgOgotCQkJZGZwc19jYXBzLm1heF9yZWZyZXNoX3JhdGUgLQotCQkJZGZwc19jYXBzLm1pbl9y ZWZyZXNoX3JhdGUgKyAxOwotCi0JLyogSW5mbGF0ZSBudW1fb2ZfbW9kZXMgYnkgZnBzIGluIGRm cHMgKi8KLQkqY291bnQgPSBkaXNwbGF5LT5wYW5lbC0+bnVtX3RpbWluZ19ub2RlcyAqIG51bV9k ZnBzX3JhdGVzOwotCi1kb25lOgotCW11dGV4X3VubG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2Nr KTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGRzaV9kaXNwbGF5X3B1dF9tb2RlKHN0cnVjdCBk c2lfZGlzcGxheSAqZGlzcGxheSwKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqbW9kZSkKLXsK LQlkc2lfcGFuZWxfcHV0X21vZGUobW9kZSk7Ci19Ci0KLWludCBkc2lfZGlzcGxheV9nZXRfbW9k ZXMoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAotCQkJICBzdHJ1Y3QgZHNpX2Rpc3BsYXlf bW9kZSAqbW9kZXMpCi17Ci0Jc3RydWN0IGRzaV9kZnBzX2NhcGFiaWxpdGllcyBkZnBzX2NhcHM7 Ci0JdTMyIG51bV9kZnBzX3JhdGVzLCBwYW5lbF9tb2RlX2NvdW50OwotCXUzMiBtb2RlX2lkeCwg YXJyYXlfaWR4ID0gMDsKLQlpbnQgaSwgcmMgPSAwOwotCi0JaWYgKCFkaXNwbGF5IHx8ICFtb2Rl cykgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JbXV0ZXhfbG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQotCXJjID0gZHNpX3Bh bmVsX2dldF9kZnBzX2NhcHMoZGlzcGxheS0+cGFuZWwsICZkZnBzX2NhcHMpOwotCWlmIChyYykg ewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGdldCBkZnBzIGNhcHMgZnJvbSBwYW5lbFxuIiwK LQkJCQlkaXNwbGF5LT5uYW1lKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQludW1fZGZwc19yYXRl cyA9ICFkZnBzX2NhcHMuZGZwc19zdXBwb3J0ID8gMSA6Ci0JCQlkZnBzX2NhcHMubWF4X3JlZnJl c2hfcmF0ZSAtCi0JCQlkZnBzX2NhcHMubWluX3JlZnJlc2hfcmF0ZSArIDE7Ci0KLQlwYW5lbF9t b2RlX2NvdW50ID0gZGlzcGxheS0+cGFuZWwtPm51bV90aW1pbmdfbm9kZXM7Ci0KLQlmb3IgKG1v ZGVfaWR4ID0gMDsgbW9kZV9pZHggPCBwYW5lbF9tb2RlX2NvdW50OyBtb2RlX2lkeCsrKSB7Ci0J CXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlIHBhbmVsX21vZGU7Ci0JCWludCB0b3BvbG9neV9vdmVy cmlkZSA9IE5PX09WRVJSSURFOwotCi0JCWlmIChkaXNwbGF5LT5jbWRsaW5lX3RpbWluZyA9PSBt b2RlX2lkeCkKLQkJCXRvcG9sb2d5X292ZXJyaWRlID0gZGlzcGxheS0+Y21kbGluZV90b3BvbG9n eTsKLQotCQltZW1zZXQoJnBhbmVsX21vZGUsIDAsIHNpemVvZihwYW5lbF9tb2RlKSk7Ci0KLQkJ cmMgPSBkc2lfcGFuZWxfZ2V0X21vZGUoZGlzcGxheS0+cGFuZWwsIG1vZGVfaWR4LAotCQkJCQkJ JnBhbmVsX21vZGUsIHRvcG9sb2d5X292ZXJyaWRlKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIo Ilslc10gZmFpbGVkIHRvIGdldCBtb2RlIGlkeCAlZCBmcm9tIHBhbmVsXG4iLAotCQkJCSAgIGRp c3BsYXktPm5hbWUsIG1vZGVfaWR4KTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQotCQlpZiAoZGlz cGxheS0+Y3RybF9jb3VudCA+IDEpIHsgLyogVE9ETzogcmVtb3ZlIGlmICovCi0JCQlwYW5lbF9t b2RlLnRpbWluZy5oX2FjdGl2ZSAqPSBkaXNwbGF5LT5jdHJsX2NvdW50OwotCQkJcGFuZWxfbW9k ZS50aW1pbmcuaF9mcm9udF9wb3JjaCAqPSBkaXNwbGF5LT5jdHJsX2NvdW50OwotCQkJcGFuZWxf bW9kZS50aW1pbmcuaF9zeW5jX3dpZHRoICo9IGRpc3BsYXktPmN0cmxfY291bnQ7Ci0JCQlwYW5l bF9tb2RlLnRpbWluZy5oX2JhY2tfcG9yY2ggKj0gZGlzcGxheS0+Y3RybF9jb3VudDsKLQkJCXBh bmVsX21vZGUudGltaW5nLmhfc2tldyAqPSBkaXNwbGF5LT5jdHJsX2NvdW50OwotCQkJcGFuZWxf bW9kZS5waXhlbF9jbGtfa2h6ICo9IGRpc3BsYXktPmN0cmxfY291bnQ7Ci0JCX0KLQotCQlmb3Ig KGkgPSAwOyBpIDwgbnVtX2RmcHNfcmF0ZXM7IGkrKykgewotCQkJc3RydWN0IGRzaV9kaXNwbGF5 X21vZGUgKnN1Yl9tb2RlID0gJm1vZGVzW2FycmF5X2lkeF07Ci0JCQl1MzIgY3Vycl9yZWZyZXNo X3JhdGU7Ci0KLQkJCWlmICghc3ViX21vZGUpIHsKLQkJCQlwcl9lcnIoImludmFsaWQgbW9kZSBk YXRhXG4iKTsKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCX0KLQotCQkJbWVtY3B5KHN1Yl9tb2Rl LCAmcGFuZWxfbW9kZSwgc2l6ZW9mKHBhbmVsX21vZGUpKTsKLQotCQkJaWYgKGRmcHNfY2Fwcy5k ZnBzX3N1cHBvcnQpIHsKLQkJCQljdXJyX3JlZnJlc2hfcmF0ZSA9Ci0JCQkJCXN1Yl9tb2RlLT50 aW1pbmcucmVmcmVzaF9yYXRlOwotCQkJCXN1Yl9tb2RlLT50aW1pbmcucmVmcmVzaF9yYXRlID0K LQkJCQkJZGZwc19jYXBzLm1pbl9yZWZyZXNoX3JhdGUgKwotCQkJCQkoaSAlIG51bV9kZnBzX3Jh dGVzKTsKLQotCQkJCWRzaV9kaXNwbGF5X2dldF9kZnBzX3RpbWluZyhkaXNwbGF5LAotCQkJCQlz dWJfbW9kZSwgY3Vycl9yZWZyZXNoX3JhdGUpOwotCi0JCQkJc3ViX21vZGUtPnBpeGVsX2Nsa19r aHogPQotCQkJCQkoRFNJX0hfVE9UQUwoJnN1Yl9tb2RlLT50aW1pbmcpICoKLQkJCQkJRFNJX1Zf VE9UQUwoJnN1Yl9tb2RlLT50aW1pbmcpICoKLQkJCQkJc3ViX21vZGUtPnRpbWluZy5yZWZyZXNo X3JhdGUpIC8gMTAwMDsKLQkJCX0KLQkJCWFycmF5X2lkeCsrOwotCQl9Ci0JfQotCi1lcnJvcjoK LQltdXRleF91bmxvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQot Ci0vKioKLSAqIGRzaV9kaXNwbGF5X3ZhbGlkYXRlX21vZGVfdnJyKCkgLSBWYWxpZGF0ZSBpZiB2 YXJhaWJsZSByZWZyZXNoIGNhc2UuCi0gKiBAZGlzcGxheTogICAgIERTSSBkaXNwbGF5IGhhbmRs ZS4KLSAqIEBjdXJfZHNpX21vZGU6ICAgQ3VycmVudCBEU0kgbW9kZS4KLSAqIEBtb2RlOiAgICAg ICAgTW9kZSB2YWx1ZSBzdHJ1Y3R1cmUgdG8gYmUgdmFsaWRhdGVkLgotICogICAgICAgICAgICAg ICBNU01fTU9ERV9GTEFHX1NFQU1MRVNTX1ZSUiBmbGFnIGlzIHNldCBpZiB0aGVyZQotICogICAg ICAgICAgICAgICBpcyBjaGFuZ2UgaW4gZnBzIGJ1dCB2YWN0aXZlIGFuZCBoYWN0aXZlIGFyZSBz YW1lLgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2Rpc3BsYXlfdmFsaWRh dGVfbW9kZV92cnIoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAotCQkJc3RydWN0IGRzaV9k aXNwbGF5X21vZGUgKmN1cl9kc2lfbW9kZSwKLQkJCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICpt b2RlKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgYWRqX21vZGUs IGN1cl9tb2RlOwotCXN0cnVjdCBkc2lfZGZwc19jYXBhYmlsaXRpZXMgZGZwc19jYXBzOwotCXUz MiBjdXJyX3JlZnJlc2hfcmF0ZTsKLQotCWlmICghZGlzcGxheSB8fCAhbW9kZSkgewotCQlwcl9l cnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFk aXNwbGF5LT5wYW5lbCB8fCAhZGlzcGxheS0+cGFuZWwtPmN1cl9tb2RlKSB7Ci0JCXByX2RlYnVn KCJDdXJyZW50IHBhbmVsIG1vZGUgbm90IHNldFxuIik7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlt dXRleF9sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCi0JYWRqX21vZGUgPSAqbW9kZTsK LQljdXJfbW9kZSA9ICpjdXJfZHNpX21vZGU7Ci0KLQlpZiAoKGN1cl9tb2RlLnRpbWluZy5yZWZy ZXNoX3JhdGUgIT0gYWRqX21vZGUudGltaW5nLnJlZnJlc2hfcmF0ZSkgJiYKLQkJKGN1cl9tb2Rl LnRpbWluZy52X2FjdGl2ZSA9PSBhZGpfbW9kZS50aW1pbmcudl9hY3RpdmUpICYmCi0JCShjdXJf bW9kZS50aW1pbmcuaF9hY3RpdmUgPT0gYWRqX21vZGUudGltaW5nLmhfYWN0aXZlKSkgewotCi0J CWN1cnJfcmVmcmVzaF9yYXRlID0gY3VyX21vZGUudGltaW5nLnJlZnJlc2hfcmF0ZTsKLQkJcmMg PSBkc2lfcGFuZWxfZ2V0X2RmcHNfY2FwcyhkaXNwbGF5LT5wYW5lbCwgJmRmcHNfY2Fwcyk7Ci0J CWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBnZXQgZGZwcyBjYXBzIGZyb20g cGFuZWxcbiIsCi0JCQkJCWRpc3BsYXktPm5hbWUpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCi0J CWN1cl9tb2RlLnRpbWluZy5yZWZyZXNoX3JhdGUgPQotCQkJYWRqX21vZGUudGltaW5nLnJlZnJl c2hfcmF0ZTsKLQotCQlyYyA9IGRzaV9kaXNwbGF5X2dldF9kZnBzX3RpbWluZyhkaXNwbGF5LAot CQkJJmN1cl9tb2RlLCBjdXJyX3JlZnJlc2hfcmF0ZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJy KCJbJXNdIHNlYW1sZXNzIHZyciBub3QgcG9zc2libGUgcmM9JWRcbiIsCi0JCQlkaXNwbGF5LT5u YW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JCXN3aXRjaCAoZGZwc19jYXBzLnR5cGUp IHsKLQkJLyoKLQkJICogSWdub3JlIGFueSByb3VuZCBvZmYgZmFjdG9ycyBpbiBwb3JjaCBjYWxj dWxhdGlvbi4KLQkJICogV29yc2UgY2FzZSBpcyBzZXQgdG8gNS4KLQkJICovCi0JCWNhc2UgRFNJ X0RGUFNfSU1NRURJQVRFX1ZGUDoKLQkJCWlmIChhYnMoRFNJX1ZfVE9UQUwoJmN1cl9tb2RlLnRp bWluZykgLQotCQkJCURTSV9WX1RPVEFMKCZhZGpfbW9kZS50aW1pbmcpKSA+IDUpCi0JCQkJcHJf ZXJyKCJNaXNtYXRjaCB2ZnAgZnBzOiVkIG5ldzolZCBnaXZlbjolZFxuIiwKLQkJCQlhZGpfbW9k ZS50aW1pbmcucmVmcmVzaF9yYXRlLAotCQkJCWN1cl9tb2RlLnRpbWluZy52X2Zyb250X3BvcmNo LAotCQkJCWFkal9tb2RlLnRpbWluZy52X2Zyb250X3BvcmNoKTsKLQkJCWJyZWFrOwotCi0JCWNh c2UgRFNJX0RGUFNfSU1NRURJQVRFX0hGUDoKLQkJCWlmIChhYnMoRFNJX0hfVE9UQUwoJmN1cl9t b2RlLnRpbWluZykgLQotCQkJCURTSV9IX1RPVEFMKCZhZGpfbW9kZS50aW1pbmcpKSA+IDUpCi0J CQkJcHJfZXJyKCJNaXNtYXRjaCBoZnAgZnBzOiVkIG5ldzolZCBnaXZlbjolZFxuIiwKLQkJCQlh ZGpfbW9kZS50aW1pbmcucmVmcmVzaF9yYXRlLAotCQkJCWN1cl9tb2RlLnRpbWluZy5oX2Zyb250 X3BvcmNoLAotCQkJCWFkal9tb2RlLnRpbWluZy5oX2Zyb250X3BvcmNoKTsKLQkJCWJyZWFrOwot Ci0JCWRlZmF1bHQ6Ci0JCQlwcl9lcnIoIlVuc3VwcG9ydGVkIERGUFMgbW9kZSAlZFxuIiwKLQkJ CQlkZnBzX2NhcHMudHlwZSk7Ci0JCQlyYyA9IC1FTk9UU1VQUDsKLQkJfQotCi0JCXByX2RlYnVn KCJNb2RlIHN3aXRjaCBpcyBzZWFtbGVzcyB2YXJpYWJsZSByZWZyZXNoXG4iKTsKLQkJbW9kZS0+ ZHNpX21vZGVfZmxhZ3MgfD0gRFNJX01PREVfRkxBR19WUlI7Ci0JCURQVV9FVlQzMihjdXJyX3Jl ZnJlc2hfcmF0ZSwgYWRqX21vZGUudGltaW5nLnJlZnJlc2hfcmF0ZSwKLQkJCQljdXJfbW9kZS50 aW1pbmcuaF9mcm9udF9wb3JjaCwKLQkJCQlhZGpfbW9kZS50aW1pbmcuaF9mcm9udF9wb3JjaCk7 Ci0JfQotCi1lcnJvcjoKLQltdXRleF91bmxvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0J cmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX2Rpc3BsYXlfdmFsaWRhdGVfbW9kZShzdHJ1Y3QgZHNp X2Rpc3BsYXkgKmRpc3BsYXksCi0JCQkgICAgICBzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqbW9k ZSwKLQkJCSAgICAgIHUzMiBmbGFncykKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVj dCBkc2lfZGlzcGxheV9jdHJsICpjdHJsOwotCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlIGFkal9t b2RlOwotCi0JaWYgKCFkaXNwbGF5IHx8ICFtb2RlKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJh bXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkaXNwbGF5LT5k aXNwbGF5X2xvY2spOwotCi0JYWRqX21vZGUgPSAqbW9kZTsKLQlhZGp1c3RfdGltaW5nX2J5X2N0 cmxfY291bnQoZGlzcGxheSwgJmFkal9tb2RlKTsKLQotCXJjID0gZHNpX3BhbmVsX3ZhbGlkYXRl X21vZGUoZGlzcGxheS0+cGFuZWwsICZhZGpfbW9kZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vycigi WyVzXSBwYW5lbCBtb2RlIHZhbGlkYXRpb24gZmFpbGVkLCByYz0lZFxuIiwKLQkJICAgICAgIGRp c3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwg ZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsK LQkJcmMgPSBkc2lfY3RybF92YWxpZGF0ZV90aW1pbmcoY3RybC0+Y3RybCwgJmFkal9tb2RlLnRp bWluZyk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGN0cmwgbW9kZSB2YWxpZGF0aW9u IGZhaWxlZCwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQkJZ290 byBlcnJvcjsKLQkJfQotCi0JCXJjID0gZHNpX3BoeV92YWxpZGF0ZV9tb2RlKGN0cmwtPnBoeSwg JmFkal9tb2RlLnRpbWluZyk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIHBoeSBtb2Rl IHZhbGlkYXRpb24gZmFpbGVkLCByYz0lZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCBy Yyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi0JaWYgKChmbGFncyAmIERTSV9WQUxJREFU RV9GTEFHX0FMTE9XX0FESlVTVCkgJiYKLQkJCShtb2RlLT5kc2lfbW9kZV9mbGFncyAmIERTSV9N T0RFX0ZMQUdfU0VBTUxFU1MpKSB7Ci0JCXJjID0gZHNpX2Rpc3BsYXlfdmFsaWRhdGVfbW9kZV9z ZWFtbGVzcyhkaXNwbGF5LCBtb2RlKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gc2Vh bWxlc3Mgbm90IHBvc3NpYmxlIHJjPSVkXG4iLAotCQkJCWRpc3BsYXktPm5hbWUsIHJjKTsKLQkJ CWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLWVycm9yOgotCW11dGV4X3VubG9jaygmZGlzcGxheS0+ ZGlzcGxheV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfZGlzcGxheV9zZXRfbW9k ZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCQkgc3RydWN0IGRzaV9kaXNwbGF5X21v ZGUgKm1vZGUsCi0JCQkgdTMyIGZsYWdzKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9k aXNwbGF5X21vZGUgYWRqX21vZGU7Ci0KLQlpZiAoIWRpc3BsYXkgfHwgIW1vZGUgfHwgIWRpc3Bs YXktPnBhbmVsKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCi0JYWRq X21vZGUgPSAqbW9kZTsKLQlhZGp1c3RfdGltaW5nX2J5X2N0cmxfY291bnQoZGlzcGxheSwgJmFk al9tb2RlKTsKLQotCXJjID0gZHNpX2Rpc3BsYXlfdmFsaWRhdGVfbW9kZV9zZXQoZGlzcGxheSwg JmFkal9tb2RlLCBmbGFncyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBtb2RlIGNhbm5v dCBiZSBzZXRcbiIsIGRpc3BsYXktPm5hbWUpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0g ZHNpX2Rpc3BsYXlfc2V0X21vZGVfc3ViKGRpc3BsYXksICZhZGpfbW9kZSwgZmxhZ3MpOwotCWlm IChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHNldCBtb2RlXG4iLCBkaXNwbGF5LT5u YW1lKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAoIWRpc3BsYXktPnBhbmVsLT5jdXJfbW9k ZSkgewotCQlkaXNwbGF5LT5wYW5lbC0+Y3VyX21vZGUgPQotCQkJa3phbGxvYyhzaXplb2Yoc3Ry dWN0IGRzaV9kaXNwbGF5X21vZGUpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFkaXNwbGF5LT5wYW5l bC0+Y3VyX21vZGUpIHsKLQkJCXJjID0gLUVOT01FTTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9 Ci0KLQltZW1jcHkoZGlzcGxheS0+cGFuZWwtPmN1cl9tb2RlLCAmYWRqX21vZGUsIHNpemVvZihh ZGpfbW9kZSkpOwotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2sp OwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9kaXNwbGF5X3NldF90cGdfc3RhdGUoc3RydWN0 IGRzaV9kaXNwbGF5ICpkaXNwbGF5LCBib29sIGVuYWJsZSkKLXsKLQlpbnQgcmMgPSAwOwotCWlu dCBpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICpjdHJsOwotCi0JaWYgKCFkaXNwbGF5KSB7 Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0K LQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAm ZGlzcGxheS0+Y3RybFtpXTsKLQkJcmMgPSBkc2lfY3RybF9zZXRfdHBnX3N0YXRlKGN0cmwtPmN0 cmwsIGVuYWJsZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZXQg dHBnIHN0YXRlIGZvciBob3N0XyVkXG4iLAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUsIGkpOwot CQkJZ290byBlcnJvcjsKLQkJfQotCX0KLQotCWRpc3BsYXktPmlzX3RwZ19lbmFibGVkID0gZW5h YmxlOwotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3By ZV9zd2l0Y2goc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0K LQlyYyA9IGRzaV9kaXNwbGF5X2Nsa19jdHJsKGRpc3BsYXktPmRzaV9jbGtfaGFuZGxlLAotCQkJ RFNJX0NPUkVfQ0xLLCBEU0lfQ0xLX09OKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZh aWxlZCB0byBlbmFibGUgRFNJIGNvcmUgY2xvY2tzLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3Bs YXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2N0 cmxfdXBkYXRlKGRpc3BsYXkpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRv IHVwZGF0ZSBEU0kgY29udHJvbGxlciwgcmM9JWRcbiIsCi0JCQkgICBkaXNwbGF5LT5uYW1lLCBy Yyk7Ci0JCWdvdG8gZXJyb3JfY3RybF9jbGtfb2ZmOwotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlf c2V0X2Nsa19zcmMoZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQg dG8gc2V0IERTSSBsaW5rIGNsb2NrIHNvdXJjZSwgcmM9JWRcbiIsCi0JCQlkaXNwbGF5LT5uYW1l LCByYyk7Ci0JCWdvdG8gZXJyb3JfY3RybF9kZWluaXQ7Ci0JfQotCi0JcmMgPSBkc2lfZGlzcGxh eV9jbGtfY3RybChkaXNwbGF5LT5kc2lfY2xrX2hhbmRsZSwKLQkJCURTSV9MSU5LX0NMSywgRFNJ X0NMS19PTik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZW5hYmxlIERT SSBsaW5rIGNsb2NrcywgcmM9JWRcbiIsCi0JCQkgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdv dG8gZXJyb3JfY3RybF9kZWluaXQ7Ci0JfQotCi0JZ290byBlcnJvcjsKLQotZXJyb3JfY3RybF9k ZWluaXQ6Ci0JKHZvaWQpZHNpX2Rpc3BsYXlfY3RybF9kZWluaXQoZGlzcGxheSk7Ci1lcnJvcl9j dHJsX2Nsa19vZmY6Ci0JKHZvaWQpZHNpX2Rpc3BsYXlfY2xrX2N0cmwoZGlzcGxheS0+ZHNpX2Ns a19oYW5kbGUsCi0JCQlEU0lfQ09SRV9DTEssIERTSV9DTEtfT0ZGKTsKLWVycm9yOgotCXJldHVy biByYzsKLX0KLQotaW50IGRzaV9kaXNwbGF5X3ByZXBhcmUoc3RydWN0IGRzaV9kaXNwbGF5ICpk aXNwbGF5KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGU7 Ci0KLQlpZiAoIWRpc3BsYXkpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQotCWlmICghZGlzcGxheS0+cGFuZWwtPmN1cl9tb2RlKSB7Ci0J CXByX2Vycigibm8gdmFsaWQgbW9kZSBzZXQgZm9yIHRoZSBkaXNwbGF5Iik7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0KLQlt b2RlID0gZGlzcGxheS0+cGFuZWwtPmN1cl9tb2RlOwotCi0JaWYgKG1vZGUtPmRzaV9tb2RlX2Zs YWdzICYgRFNJX01PREVfRkxBR19ETVMpIHsKLQkJLyogdXBkYXRlIGRzaSBjdHJsIGZvciBuZXcg bW9kZSAqLwotCQlyYyA9IGRzaV9kaXNwbGF5X3ByZV9zd2l0Y2goZGlzcGxheSk7Ci0JCWlmIChy YykKLQkJCXByX2VycigiWyVzXSBwYW5lbCBwcmUtcHJlcGFyZS1yZXMtc3dpdGNoIGZhaWxlZCwg cmM9JWRcbiIsCi0JCQkJICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCi0JCWdvdG8gZXJyb3I7Ci0J fQotCi0JcmMgPSBkc2lfcGFuZWxfcHJlX3ByZXBhcmUoZGlzcGxheS0+cGFuZWwpOwotCWlmIChy YykgewotCQlwcl9lcnIoIlslc10gcGFuZWwgcHJlLXByZXBhcmUgZmFpbGVkLCByYz0lZFxuIiwK LQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9 IGRzaV9kaXNwbGF5X2Nsa19jdHJsKGRpc3BsYXktPmRzaV9jbGtfaGFuZGxlLAotCQkJRFNJX0NP UkVfQ0xLLCBEU0lfQ0xLX09OKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0 byBlbmFibGUgRFNJIGNvcmUgY2xvY2tzLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5h bWUsIHJjKTsKLQkJZ290byBlcnJvcl9wYW5lbF9wb3N0X3VucHJlcDsKLQl9Ci0KLQlyYyA9IGRz aV9kaXNwbGF5X3BoeV9zd19yZXNldChkaXNwbGF5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJb JXNdIGZhaWxlZCB0byByZXNldCBwaHksIHJjPSVkXG4iLCBkaXNwbGF5LT5uYW1lLCByYyk7Ci0J CWdvdG8gZXJyb3JfY3RybF9jbGtfb2ZmOwotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlfcGh5X2Vu YWJsZShkaXNwbGF5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBlbmFi bGUgRFNJIFBIWSwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdv dG8gZXJyb3JfY3RybF9jbGtfb2ZmOwotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlfc2V0X2Nsa19z cmMoZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gc2V0IERT SSBsaW5rIGNsb2NrIHNvdXJjZSwgcmM9JWRcbiIsCi0JCQlkaXNwbGF5LT5uYW1lLCByYyk7Ci0J CWdvdG8gZXJyb3JfcGh5X2Rpc2FibGU7Ci0JfQotCi0JcmMgPSBkc2lfZGlzcGxheV9jdHJsX2lu aXQoZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gc2V0dXAg RFNJIGNvbnRyb2xsZXIsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwot CQlnb3RvIGVycm9yX3BoeV9kaXNhYmxlOwotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlfY3RybF9o b3N0X2VuYWJsZShkaXNwbGF5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0 byBlbmFibGUgRFNJIGhvc3QsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMp OwotCQlnb3RvIGVycm9yX2N0cmxfZGVpbml0OwotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlfY2xr X2N0cmwoZGlzcGxheS0+ZHNpX2Nsa19oYW5kbGUsCi0JCQlEU0lfTElOS19DTEssIERTSV9DTEtf T04pOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJsZSBEU0kgbGlu ayBjbG9ja3MsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3Rv IGVycm9yX2hvc3RfZW5naW5lX29mZjsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X3NvZnRfcmVz ZXQoZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgc29mdCByZXNl dCwgcmM9JWRcbiIsIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcl9jdHJsX2xpbmtf b2ZmOwotCX0KLQotCXJjID0gZHNpX3BhbmVsX3ByZXBhcmUoZGlzcGxheS0+cGFuZWwpOwotCWlm IChyYykgewotCQlwcl9lcnIoIlslc10gcGFuZWwgcHJlcGFyZSBmYWlsZWQsIHJjPSVkXG4iLCBk aXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3JfY3RybF9saW5rX29mZjsKLQl9Ci0KLQln b3RvIGVycm9yOwotCi1lcnJvcl9jdHJsX2xpbmtfb2ZmOgotCSh2b2lkKWRzaV9kaXNwbGF5X2Ns a19jdHJsKGRpc3BsYXktPmRzaV9jbGtfaGFuZGxlLAotCQkJRFNJX0xJTktfQ0xLLCBEU0lfQ0xL X09GRik7Ci1lcnJvcl9ob3N0X2VuZ2luZV9vZmY6Ci0JKHZvaWQpZHNpX2Rpc3BsYXlfY3RybF9o b3N0X2Rpc2FibGUoZGlzcGxheSk7Ci1lcnJvcl9jdHJsX2RlaW5pdDoKLQkodm9pZClkc2lfZGlz cGxheV9jdHJsX2RlaW5pdChkaXNwbGF5KTsKLWVycm9yX3BoeV9kaXNhYmxlOgotCSh2b2lkKWRz aV9kaXNwbGF5X3BoeV9kaXNhYmxlKGRpc3BsYXkpOwotZXJyb3JfY3RybF9jbGtfb2ZmOgotCSh2 b2lkKWRzaV9kaXNwbGF5X2Nsa19jdHJsKGRpc3BsYXktPmRzaV9jbGtfaGFuZGxlLAotCQkJRFNJ X0NPUkVfQ0xLLCBEU0lfQ0xLX09GRik7Ci1lcnJvcl9wYW5lbF9wb3N0X3VucHJlcDoKLQkodm9p ZClkc2lfcGFuZWxfcG9zdF91bnByZXBhcmUoZGlzcGxheS0+cGFuZWwpOwotZXJyb3I6Ci0JbXV0 ZXhfdW5sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50 IGRzaV9kaXNwbGF5X3ByZV9raWNrb2ZmKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsK LQlpbnQgcmMgPSAwOwotCi0JLyogY2hlY2sgYW5kIHNldHVwIE1JU1IgKi8KLQlpZiAoZGlzcGxh eS0+bWlzcl9lbmFibGUpCi0JCV9kc2lfZGlzcGxheV9zZXR1cF9taXNyKGRpc3BsYXkpOwotCi0J cmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX2Rpc3BsYXlfZW5hYmxlKHN0cnVjdCBkc2lfZGlzcGxh eSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICpt b2RlOwotCi0JaWYgKCFkaXNwbGF5IHx8ICFkaXNwbGF5LT5wYW5lbCkgewotCQlwcl9lcnIoIklu dmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFkaXNwbGF5 LT5wYW5lbC0+Y3VyX21vZGUpIHsKLQkJcHJfZXJyKCJubyB2YWxpZCBtb2RlIHNldCBmb3IgdGhl IGRpc3BsYXkiKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZGlzcGxh eS0+ZGlzcGxheV9sb2NrKTsKLQotCW1vZGUgPSBkaXNwbGF5LT5wYW5lbC0+Y3VyX21vZGU7Ci0K LQlpZiAobW9kZS0+ZHNpX21vZGVfZmxhZ3MgJiBEU0lfTU9ERV9GTEFHX0RNUykgewotCQlyYyA9 IGRzaV9wYW5lbF9wb3N0X3N3aXRjaChkaXNwbGF5LT5wYW5lbCk7Ci0JCWlmIChyYykgewotCQkJ cHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzd2l0Y2ggRFNJIHBhbmVsIG1vZGUsIHJjPSVkXG4iLAot CQkJCSAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9IGVsc2Ug ewotCQlyYyA9IGRzaV9wYW5lbF9lbmFibGUoZGlzcGxheS0+cGFuZWwpOwotCQlpZiAocmMpIHsK LQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZW5hYmxlIERTSSBwYW5lbCwgcmM9JWRcbiIsCi0J CQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0KLQot CWlmIChtb2RlLT5wcml2X2luZm8tPmRzY19lbmFibGVkKSB7Ci0JCW1vZGUtPnByaXZfaW5mby0+ ZHNjLnBpY193aWR0aCAqPSBkaXNwbGF5LT5jdHJsX2NvdW50OwotCQlyYyA9IGRzaV9wYW5lbF91 cGRhdGVfcHBzKGRpc3BsYXktPnBhbmVsKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10g cGFuZWwgcHBzIGNtZCB1cGRhdGUgZmFpbGVkLCByYz0lZFxuIiwKLQkJCQlkaXNwbGF5LT5uYW1l LCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi0JaWYgKG1vZGUtPmRzaV9tb2RlX2Zs YWdzICYgRFNJX01PREVfRkxBR19ETVMpIHsKLQkJcmMgPSBkc2lfcGFuZWxfc3dpdGNoKGRpc3Bs YXktPnBhbmVsKTsKLQkJaWYgKHJjKQotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzd2l0Y2gg RFNJIHBhbmVsIG1vZGUsIHJjPSVkXG4iLAotCQkJCSAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQot CQlnb3RvIGVycm9yOwotCX0KLQotCWlmIChkaXNwbGF5LT5jb25maWcucGFuZWxfbW9kZSA9PSBE U0lfT1BfVklERU9fTU9ERSkgewotCQlyYyA9IGRzaV9kaXNwbGF5X3ZpZF9lbmdpbmVfZW5hYmxl KGRpc3BsYXkpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXWZhaWxlZCB0byBlbmFibGUg RFNJIHZpZGVvIGVuZ2luZSwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMp OwotCQkJZ290byBlcnJvcl9kaXNhYmxlX3BhbmVsOwotCQl9Ci0JfSBlbHNlIGlmIChkaXNwbGF5 LT5jb25maWcucGFuZWxfbW9kZSA9PSBEU0lfT1BfQ01EX01PREUpIHsKLQkJcmMgPSBkc2lfZGlz cGxheV9jbWRfZW5naW5lX2VuYWJsZShkaXNwbGF5KTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIo Ilslc11mYWlsZWQgdG8gZW5hYmxlIERTSSBjbWQgZW5naW5lLCByYz0lZFxuIiwKLQkJCSAgICAg ICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yX2Rpc2FibGVfcGFuZWw7Ci0JCX0K LQl9IGVsc2UgewotCQlwcl9lcnIoIlslc10gSW52YWxpZCBjb25maWd1cmF0aW9uXG4iLCBkaXNw bGF5LT5uYW1lKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yX2Rpc2FibGVfcGFuZWw7 Ci0JfQotCi0JZ290byBlcnJvcjsKLQotZXJyb3JfZGlzYWJsZV9wYW5lbDoKLQkodm9pZClkc2lf cGFuZWxfZGlzYWJsZShkaXNwbGF5LT5wYW5lbCk7Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJmRp c3BsYXktPmRpc3BsYXlfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX2Rpc3BsYXlf cG9zdF9lbmFibGUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7 Ci0KLQlpZiAoIWRpc3BsYXkpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7 Ci0KLQlyYyA9IGRzaV9wYW5lbF9wb3N0X2VuYWJsZShkaXNwbGF5LT5wYW5lbCk7Ci0JaWYgKHJj KQotCQlwcl9lcnIoIlslc10gcGFuZWwgcG9zdC1lbmFibGUgZmFpbGVkLCByYz0lZFxuIiwKLQkJ ICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQotCS8qIHJlbW92ZSB0aGUgY2xrIHZvdGUgZm9y IENNRCBtb2RlIHBhbmVscyAqLwotCWlmIChkaXNwbGF5LT5jb25maWcucGFuZWxfbW9kZSA9PSBE U0lfT1BfQ01EX01PREUpCi0JCWRzaV9kaXNwbGF5X2Nsa19jdHJsKGRpc3BsYXktPmRzaV9jbGtf aGFuZGxlLAotCQkJRFNJX0FMTF9DTEtTLCBEU0lfQ0xLX09GRik7Ci0KLQltdXRleF91bmxvY2so JmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX2Rpc3Bs YXlfcHJlX2Rpc2FibGUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9 IDA7Ci0KLQlpZiAoIWRpc3BsYXkpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0J CXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9j ayk7Ci0KLQkvKiBlbmFibGUgdGhlIGNsayB2b3RlIGZvciBDTUQgbW9kZSBwYW5lbHMgKi8KLQlp ZiAoZGlzcGxheS0+Y29uZmlnLnBhbmVsX21vZGUgPT0gRFNJX09QX0NNRF9NT0RFKQotCQlkc2lf ZGlzcGxheV9jbGtfY3RybChkaXNwbGF5LT5kc2lfY2xrX2hhbmRsZSwKLQkJCURTSV9BTExfQ0xL UywgRFNJX0NMS19PTik7Ci0KLQlyYyA9IGRzaV9wYW5lbF9wcmVfZGlzYWJsZShkaXNwbGF5LT5w YW5lbCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlslc10gcGFuZWwgcHJlLWRpc2FibGUgZmFpbGVk LCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQotCW11dGV4X3VubG9j aygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfZGlz cGxheV9kaXNhYmxlKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAw OwotCi0JaWYgKCFkaXNwbGF5KSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQly ZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2sp OwotCi0JcmMgPSBkc2lfZGlzcGxheV93YWtlX3VwKGRpc3BsYXkpOwotCWlmIChyYykKLQkJcHJf ZXJyKCJbJXNdIGRpc3BsYXkgd2FrZSB1cCBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAgICAgZGlz cGxheS0+bmFtZSwgcmMpOwotCi0JaWYgKGRpc3BsYXktPmNvbmZpZy5wYW5lbF9tb2RlID09IERT SV9PUF9WSURFT19NT0RFKSB7Ci0JCXJjID0gZHNpX2Rpc3BsYXlfdmlkX2VuZ2luZV9kaXNhYmxl KGRpc3BsYXkpOwotCQlpZiAocmMpCi0JCQlwcl9lcnIoIlslc11mYWlsZWQgdG8gZGlzYWJsZSBE U0kgdmlkIGVuZ2luZSwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwot CX0gZWxzZSBpZiAoZGlzcGxheS0+Y29uZmlnLnBhbmVsX21vZGUgPT0gRFNJX09QX0NNRF9NT0RF KSB7Ci0JCXJjID0gZHNpX2Rpc3BsYXlfY21kX2VuZ2luZV9kaXNhYmxlKGRpc3BsYXkpOwotCQlp ZiAocmMpCi0JCQlwcl9lcnIoIlslc11mYWlsZWQgdG8gZGlzYWJsZSBEU0kgY21kIGVuZ2luZSwg cmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCX0gZWxzZSB7Ci0JCXBy X2VycigiWyVzXSBJbnZhbGlkIGNvbmZpZ3VyYXRpb25cbiIsIGRpc3BsYXktPm5hbWUpOwotCQly YyA9IC1FSU5WQUw7Ci0JfQotCi0JcmMgPSBkc2lfcGFuZWxfZGlzYWJsZShkaXNwbGF5LT5wYW5l bCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGRpc2FibGUgRFNJIHBhbmVs LCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQotCW11dGV4X3VubG9j aygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfZGlz cGxheV91cGRhdGVfcHBzKGNoYXIgKnBwc19jbWQsIHZvaWQgKmRpc3ApCi17Ci0Jc3RydWN0IGRz aV9kaXNwbGF5ICpkaXNwbGF5OwotCi0JaWYgKHBwc19jbWQgPT0gTlVMTCB8fCBkaXNwID09IE5V TEwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtZXRlclxuIik7Ci0JCXJldHVybiAtRUlOVkFM OwotCX0KLQotCWRpc3BsYXkgPSBkaXNwOwotCW11dGV4X2xvY2soJmRpc3BsYXktPmRpc3BsYXlf bG9jayk7Ci0JbWVtY3B5KGRpc3BsYXktPnBhbmVsLT5kc2NfcHBzX2NtZCwgcHBzX2NtZCwgRFNJ X0NNRF9QUFNfU0laRSk7Ci0JbXV0ZXhfdW5sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwot Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBkc2lfZGlzcGxheV91bnByZXBhcmUoc3RydWN0IGRzaV9k aXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRpc3BsYXkpIHsKLQkJ cHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11 dGV4X2xvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X3dh a2VfdXAoZGlzcGxheSk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlslc10gZGlzcGxheSB3YWtlIHVw IGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0KLQlyYyA9 IGRzaV9wYW5lbF91bnByZXBhcmUoZGlzcGxheS0+cGFuZWwpOwotCWlmIChyYykKLQkJcHJfZXJy KCJbJXNdIHBhbmVsIHVucHJlcGFyZSBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxh eS0+bmFtZSwgcmMpOwotCi0JcmMgPSBkc2lfZGlzcGxheV9jdHJsX2hvc3RfZGlzYWJsZShkaXNw bGF5KTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGlzYWJsZSBEU0kgaG9z dCwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0KLQlyYyA9IGRzaV9k aXNwbGF5X2Nsa19jdHJsKGRpc3BsYXktPmRzaV9jbGtfaGFuZGxlLAotCQkJRFNJX0xJTktfQ0xL LCBEU0lfQ0xLX09GRik7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGRpc2Fi bGUgTGluayBjbG9ja3MsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwot Ci0JcmMgPSBkc2lfZGlzcGxheV9jdHJsX2RlaW5pdChkaXNwbGF5KTsKLQlpZiAocmMpCi0JCXBy X2VycigiWyVzXSBmYWlsZWQgdG8gZGVpbml0IGNvbnRyb2xsZXIsIHJjPSVkXG4iLAotCQkgICAg ICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCi0JcmMgPSBkc2lfZGlzcGxheV9waHlfZGlzYWJsZShk aXNwbGF5KTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGlzYWJsZSBEU0kg UEhZLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQotCXJjID0gZHNp X2Rpc3BsYXlfY2xrX2N0cmwoZGlzcGxheS0+ZHNpX2Nsa19oYW5kbGUsCi0JCQlEU0lfQ09SRV9D TEssIERTSV9DTEtfT0ZGKTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGlz YWJsZSBEU0kgY2xvY2tzLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsK LQotCXJjID0gZHNpX3BhbmVsX3Bvc3RfdW5wcmVwYXJlKGRpc3BsYXktPnBhbmVsKTsKLQlpZiAo cmMpCi0JCXByX2VycigiWyVzXSBwYW5lbCBwb3N0LXVucHJlcGFyZSBmYWlsZWQsIHJjPSVkXG4i LAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCi0JbXV0ZXhfdW5sb2NrKCZkaXNwbGF5 LT5kaXNwbGF5X2xvY2spOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBfX2luaXQgZHNp X2Rpc3BsYXlfcmVnaXN0ZXIodm9pZCkKLXsKLQlkc2lfcGh5X2Rydl9yZWdpc3RlcigpOwotCWRz aV9jdHJsX2Rydl9yZWdpc3RlcigpOwotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIo JmRzaV9kaXNwbGF5X2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBkc2lfZGlzcGxh eV91bnJlZ2lzdGVyKHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRzaV9k aXNwbGF5X2RyaXZlcik7Ci0JZHNpX2N0cmxfZHJ2X3VucmVnaXN0ZXIoKTsKLQlkc2lfcGh5X2Ry dl91bnJlZ2lzdGVyKCk7Ci19Ci1tb2R1bGVfcGFyYW1fc3RyaW5nKGRzaV9kaXNwbGF5MCwgZHNp X2Rpc3BsYXlfcHJpbWFyeSwgTUFYX0NNRExJTkVfUEFSQU1fTEVOLAotCQkJCQkJCQkwNjAwKTsK LU1PRFVMRV9QQVJNX0RFU0MoZHNpX2Rpc3BsYXkwLAotCSJtc21fZHJtLmRzaV9kaXNwbGF5MD08 ZGlzcGxheSBub2RlPjo8Y29uZmlnWD4gd2hlcmUgPGRpc3BsYXkgbm9kZT4gaXMgJ3ByaW1hcnkg ZHNpIGRpc3BsYXkgbm9kZSBuYW1lJyBhbmQgPGNvbmZpZ1g+IHdoZXJlIHggcmVwcmVzZW50cyBp bmRleCBpbiB0aGUgdG9wb2xvZ3kgbGlzdCIpOwotbW9kdWxlX3BhcmFtX3N0cmluZyhkc2lfZGlz cGxheTEsIGRzaV9kaXNwbGF5X3NlY29uZGFyeSwgTUFYX0NNRExJTkVfUEFSQU1fTEVOLAotCQkJ CQkJCQkwNjAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZHNpX2Rpc3BsYXkxLAotCSJtc21fZHJtLmRz aV9kaXNwbGF5MT08ZGlzcGxheSBub2RlPjo8Y29uZmlnWD4gd2hlcmUgPGRpc3BsYXkgbm9kZT4g aXMgJ3NlY29uZGFyeSBkc2kgZGlzcGxheSBub2RlIG5hbWUnIGFuZCA8Y29uZmlnWD4gd2hlcmUg eCByZXByZXNlbnRzIGluZGV4IGluIHRoZSB0b3BvbG9neSBsaXN0Iik7Ci1tb2R1bGVfaW5pdChk c2lfZGlzcGxheV9yZWdpc3Rlcik7Ci1tb2R1bGVfZXhpdChkc2lfZGlzcGxheV91bnJlZ2lzdGVy KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Rpc3Bs YXkuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Rpc3BsYXkuaApkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBmOWNjZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kaXNwbGF5LmgKKysrIC9kZXYvbnVsbApAQCAt MSw1NTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE4LCBUaGUgTGludXgg Rm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICog aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz aW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0j aWZuZGVmIF9EU0lfRElTUExBWV9IXwotI2RlZmluZSBfRFNJX0RJU1BMQVlfSF8KLQotI2luY2x1 ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0jaW5jbHVkZSA8 bGludXgvZGVidWdmcy5oPgotI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgotI2luY2x1ZGUg PGRybS9kcm1QLmg+Ci0jaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Ci0KLSNpbmNsdWRlICJtc21f ZHJ2LmgiCi0jaW5jbHVkZSAiZHNpX2RlZnMuaCIKLSNpbmNsdWRlICJkc2lfY3RybC5oIgotI2lu Y2x1ZGUgImRzaV9waHkuaCIKLSNpbmNsdWRlICJkc2lfcGFuZWwuaCIKLQotI2RlZmluZSBNQVhf RFNJX0NUUkxTX1BFUl9ESVNQTEFZICAgICAgICAgICAgIDIKLSNkZWZpbmUgRFNJX0NMSUVOVF9O QU1FX1NJWkUJCTIwCi0jZGVmaW5lIE1BWF9DTURMSU5FX1BBUkFNX0xFTgkgNTEyCi0vKgotICog RFNJIFZhbGlkYXRlIE1vZGUgbW9kaWZpZXJzCi0gKiBARFNJX1ZBTElEQVRFX0ZMQUdfQUxMT1df QURKVVNUOglBbGxvdyBtb2RlIHZhbGlkYXRpb24gdG8gYWxzbyBkbyBmaXh1cAotICovCi0jZGVm aW5lIERTSV9WQUxJREFURV9GTEFHX0FMTE9XX0FESlVTVAkweDEKLQotLyoqCi0gKiBlbnVtIGRz aV9kaXNwbGF5X3NlbGVjdGlvbl90eXBlIC0gZW51bWVyYXRlcyBEU0kgZGlzcGxheSBzZWxlY3Rp b24gdHlwZXMKLSAqIEBEU0lfUFJJTUFSWTogICAgcHJpbWFyeSBEU0kgZGlzcGxheSBzZWxlY3Rl ZCBmcm9tIG1vZHVsZSBwYXJhbWV0ZXIKLSAqIEBEU0lfU0VDT05EQVJZOiAgU2Vjb25kYXJ5IERT SSBkaXNwbGF5IHNlbGVjdGVkIGZyb20gbW9kdWxlIHBhcmFtZXRlcgotICogQE1BWF9EU0lfQUNU SVZFX0RJU1BMQVk6IE1heGltdW0gYWNpdmUgZGlzcGxheXMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQK LSAqLwotZW51bSBkc2lfZGlzcGxheV9zZWxlY3Rpb25fdHlwZSB7Ci0JRFNJX1BSSU1BUlkgPSAw LAotCURTSV9TRUNPTkRBUlksCi0JTUFYX0RTSV9BQ1RJVkVfRElTUExBWSwKLX07Ci0KLS8qKgot ICogZW51bSBkc2lfZGlzcGxheV90eXBlIC0gZW51bWVyYXRlcyBEU0kgZGlzcGxheSB0eXBlcwot ICogQERTSV9ESVNQTEFZX1NJTkdMRTogICAgICAgQSBwYW5lbCBjb25uZWN0ZWQgb24gYSBzaW5n bGUgRFNJIGludGVyZmFjZS4KLSAqIEBEU0lfRElTUExBWV9FWFRfQlJJREdFOiAgIEEgYnJpZGdl IGlzIGNvbm5lY3RlZCBiZXR3ZWVuIHBhbmVsIGFuZCBEU0kgaG9zdC4KLSAqCQkJICAgICAgSXQg dXRpbGl6ZXMgYSBzaW5nbGUgRFNJIGludGVyZmFjZS4KLSAqIEBEU0lfRElTUExBWV9TUExJVDog ICAgICAgIEEgcGFuZWwgdGhhdCB1dGlsaXplcyBtb3JlIHRoYW4gb25lIERTSQotICoJCQkgICAg ICBpbnRlcmZhY2VzLgotICogQERTSV9ESVNQTEFZX1NQTElUX0VYVF9CUklER0U6IEEgYnJpZGdl IGlzIHByZXNlbnQgYmV0d2VlbiBwYW5lbCBhbmQgRFNJCi0gKgkJCQkgIGhvc3QuIEl0IHV0aWxp emVzIG1vcmUgdGhhbiBvbmUgRFNJIGludGVyZmFjZS4KLSAqLwotZW51bSBkc2lfZGlzcGxheV90 eXBlIHsKLQlEU0lfRElTUExBWV9TSU5HTEUgPSAwLAotCURTSV9ESVNQTEFZX0VYVF9CUklER0Us Ci0JRFNJX0RJU1BMQVlfU1BMSVQsCi0JRFNJX0RJU1BMQVlfU1BMSVRfRVhUX0JSSURHRSwKLQlE U0lfRElTUExBWV9NQVgsCi19OwotCi0vKioKLSAqIHN0cnVjdCBkc2lfZGlzcGxheV9jdHJsIC0g ZHNpIGN0cmwvcGh5IGluZm9ybWF0aW9uIGZvciB0aGUgZGlzcGxheQotICogQGN0cmw6ICAgICAg ICAgICBIYW5kbGUgdG8gdGhlIERTSSBjb250cm9sbGVyIGRldmljZS4KLSAqIEBjdHJsX29mX25v ZGU6ICAgcEhhbmRsZSB0byB0aGUgRFNJIGNvbnRyb2xsZXIgZGV2aWNlLgotICogQGRzaV9jdHJs X2lkeDogICBEU0kgY29udHJvbGxlciBpbnN0YW5jZSBpZC4KLSAqIEBwb3dlcl9zdGF0ZTogICAg Q3VycmVudCBwb3dlciBzdGF0ZSBvZiB0aGUgRFNJIGNvbnRyb2xsZXIuCi0gKiBAcGh5OiAgICAg ICAgICAgICAgICAgIEhhbmRsZSB0byB0aGUgRFNJIFBIWSBkZXZpY2UuCi0gKiBAcGh5X29mX25v ZGU6ICAgICAgICAgIHBIYW5kbGUgdG8gdGhlIERTSSBQSFkgZGV2aWNlLgotICogQHBoeV9lbmFi bGVkOiAgICAgICAgICBQSFkgcG93ZXIgc3RhdHVzLgotICovCi1zdHJ1Y3QgZHNpX2Rpc3BsYXlf Y3RybCB7Ci0JLyogY29udHJvbGxlciBpbmZvICovCi0Jc3RydWN0IGRzaV9jdHJsICpjdHJsOwot CXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3RybF9vZl9ub2RlOwotCXUzMiBkc2lfY3RybF9pZHg7Ci0K LQllbnVtIGRzaV9wb3dlcl9zdGF0ZSBwb3dlcl9zdGF0ZTsKLQotCS8qIHBoeSBpbmZvICovCi0J c3RydWN0IG1zbV9kc2lfcGh5ICpwaHk7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpwaHlfb2Zfbm9k ZTsKLQotCWJvb2wgcGh5X2VuYWJsZWQ7Ci19OwotLyoqCi0gKiBzdHJ1Y3QgZHNpX2Rpc3BsYXlf Ym9vdF9wYXJhbSAtIGRlZmluZXMgRFNJIGJvb3QgZGlzcGxheSBzZWxlY3Rpb24KLSAqIEBuYW1l Ok5hbWUgb2YgRFNJIGRpc3BsYXkgc2VsZWN0ZWQgYXMgYSBib290IHBhcmFtLgotICogQGJvb3Rf ZGlzcF9lbjpib29sIHRvIGluZGljYXRlIGR0c2kgYXZhaWxhYmlsaXR5IG9mIGRpc3BsYXkgbm9k ZQotICogQGlzX3ByaW1hcnk6Ym9vbCB0byBpbmRpY2F0ZSB3aGV0aGVyIGN1cnJlbnQgZGlzcGxh eSBpcyBwcmltYXJ5IGRpc3BsYXkKLSAqIEBsZW5ndGg6bGVuZ3RoIG9mIERTSSBkaXNwbGF5Lgot ICogQGNtZGxpbmVfdG9wb2xvZ3k6IERpc3BsYXkgdG9wb2xvZ3kgc2hhcmVkIGZyb20ga2VybmVs IGNvbW1hbmQgbGluZS4KLSAqLwotc3RydWN0IGRzaV9kaXNwbGF5X2Jvb3RfcGFyYW0gewotCWNo YXIgbmFtZVtNQVhfQ01ETElORV9QQVJBTV9MRU5dOwotCWJvb2wgYm9vdF9kaXNwX2VuOwotCWJv b2wgaXNfcHJpbWFyeTsKLQlpbnQgbGVuZ3RoOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsK LQlpbnQgY21kbGluZV90b3BvbG9neTsKLX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9kaXNwbGF5 X2Nsa19pbmZvIC0gZHNpIGRpc3BsYXkgY2xvY2sgc291cmNlIGluZm9ybWF0aW9uCi0gKiBAc3Jj X2Nsa3M6ICAgICAgICAgIFNvdXJjZSBjbG9ja3MgZm9yIERTSSBkaXNwbGF5LgotICogQG11eF9j bGtzOiAgICAgICAgICBNdXggY2xvY2tzIHVzZWQgZm9yIERGUFMuCi0gKiBAc2hhZG93X2Nsa3M6 ICAgICAgIFVzZWQgZm9yIERGUFMuCi0gKi8KLXN0cnVjdCBkc2lfZGlzcGxheV9jbGtfaW5mbyB7 Ci0Jc3RydWN0IGRzaV9jbGtfbGlua19zZXQgc3JjX2Nsa3M7Ci0Jc3RydWN0IGRzaV9jbGtfbGlu a19zZXQgbXV4X2Nsa3M7Ci0Jc3RydWN0IGRzaV9jbGtfbGlua19zZXQgc2hhZG93X2Nsa3M7Ci19 OwotCi0vKioKLSAqIHN0cnVjdCBkc2lfZGlzcGxheSAtIGRzaSBkaXNwbGF5IGluZm9ybWF0aW9u Ci0gKiBAcGRldjogICAgICAgICAgICAgUG9pbnRlciB0byBwbGF0Zm9ybSBkZXZpY2UuCi0gKiBA ZHJtX2RldjogICAgICAgICAgRFJNIGRldmljZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRpc3BsYXku Ci0gKiBAbmFtZTogICAgICAgICAgICAgTmFtZSBvZiB0aGUgZGlzcGxheS4KLSAqIEBkaXNwbGF5 X3R5cGU6ICAgICBEaXNwbGF5IHR5cGUgYXMgZGVmaW5lZCBpbiBkZXZpY2UgdHJlZS4KLSAqIEBs aXN0OiAgICAgICAgICAgICBMaXN0IHBvaW50ZXIuCi0gKiBAaXNfYWN0aXZlOiAgICAgICAgSXMg ZGlzcGxheSBhY3RpdmUuCi0gKiBAZGlzcGxheV9sb2NrOiAgICAgTXV0ZXggZm9yIGRzaV9kaXNw bGF5IGludGVyZmFjZS4KLSAqIEBjdHJsX2NvdW50OiAgICAgICBOdW1iZXIgb2YgRFNJIGludGVy ZmFjZXMgcmVxdWlyZWQgYnkgcGFuZWwuCi0gKiBAY3RybDogICAgICAgICAgICAgQ29udHJvbGxl ciBpbmZvcm1hdGlvbiBmb3IgRFNJIGRpc3BsYXkuCi0gKiBAcGFuZWw6ICAgICAgICAgICAgSGFu ZGxlIHRvIERTSSBwYW5lbC4KLSAqIEBwYW5lbF9vZjogICAgICAgICBwSGFuZGxlIHRvIERTSSBw YW5lbC4KLSAqIEB0eXBlOiAgICAgICAgICAgICBEU0kgZGlzcGxheSB0eXBlLgotICogQGNsa19t YXN0ZXJfaWR4OiAgIFRoZSBtYXN0ZXIgY29udHJvbGxlciBmb3IgY29udHJvbGxpbmcgY2xvY2tz LiBUaGlzIGlzIGFuCi0gKgkJICAgICAgaW5kZXggaW50byB0aGUgY3RybFtNQVhfRFNJX0NUUkxT X1BFUl9ESVNQTEFZXSBhcnJheS4KLSAqIEBjbWRfbWFzdGVyX2lkeDogICBUaGUgbWFzdGVyIGNv bnRyb2xsZXIgZm9yIHNlbmRpbmcgRFNJIGNvbW1hbmRzIHRvIHBhbmVsLgotICogQHZpZGVvX21h c3Rlcl9pZHg6IFRoZSBtYXN0ZXIgY29udHJvbGxlciBmb3IgZW5hYmxpbmcgdmlkZW8gZW5naW5l LgotICogQGNsb2NrX2luZm86ICAgICAgIENsb2NrIHNvdXJjaW5nIGZvciBEU0kgZGlzcGxheS4K LSAqIEBjb25maWc6ICAgICAgICAgICBEU0kgaG9zdCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9u LgotICogQGxhbmVfbWFwOiAgICAgICAgIExhbmUgbWFwcGluZyBiZXR3ZWVuIERTSSBob3N0IGFu ZCBQYW5lbC4KLSAqIEBjbWRsaW5lX3RvcG9sb2d5OiBEaXNwbGF5IHRvcG9sb2d5IHNoYXJlZCBm cm9tIGtlcm5lbCBjb21tYW5kIGxpbmUuCi0gKiBAY21kbGluZV90aW1pbmc6ICAgRGlzcGxheSB0 aW1pbmcgc2hhcmVkIGZyb20ga2VybmVsIGNvbW1hbmQgbGluZS4KLSAqIEBpc190cGdfZW5hYmxl ZDogICBUUEcgc3RhdGUuCi0gKiBAdWxwc19lbmFibGVkOiAgICAgdWxwcyBzdGF0ZS4KLSAqIEBj bGFtcF9lbmFibGVkOiAgICBjbGFtcCBzdGF0ZS4KLSAqIEBwaHlfaWRsZV9wb3dlcl9vZmY6ICAg UEhZIHBvd2VyIHN0YXRlLgotICogQGhvc3Q6ICAgICAgICAgICAgIERSTSBNSVBJIERTSSBIb3N0 LgotICogQGJyaWRnZTogICAgICAgICAgIFBvaW50ZXIgdG8gRFJNIGJyaWRnZSBvYmplY3QuCi0g KiBAY21kX2VuZ2luZV9yZWZjb3VudDogIFJlZmVyZW5jZSBjb3VudCBlbmZvcmNpbmcgc2luZ2xl IGluc3RhbmNlIG9mIGNtZCBlbmcKLSAqIEBjbGtfbW5ncjogICAgICAgICBEU0kgY2xvY2sgbWFu YWdlci4KLSAqIEBkc2lfY2xrX2hhbmRsZTogICBEU0kgY2xvY2sgaGFuZGxlLgotICogQG1kcF9j bGtfaGFuZGxlOiAgIE1EUCBjbG9jayBoYW5kbGUuCi0gKiBAcm9vdDogICAgICAgICAgICAgRGVi dWdmcyByb290IGRpcmVjdG9yeQotICogQG1pc3JfZW5hYmxlICAgICAgIEZyYW1lIE1JU1IgZW5h YmxlL2Rpc2FibGUKLSAqIEBtaXNyX2ZyYW1lX2NvdW50ICBOdW1iZXIgb2YgZnJhbWVzIHRvIGFj Y3VtdWxhdGUgdGhlIE1JU1IgdmFsdWUKLSAqLwotc3RydWN0IGRzaV9kaXNwbGF5IHsKLQlzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2Owot Ci0JY29uc3QgY2hhciAqbmFtZTsKLQljb25zdCBjaGFyICpkaXNwbGF5X3R5cGU7Ci0Jc3RydWN0 IGxpc3RfaGVhZCBsaXN0OwotCWJvb2wgaXNfYWN0aXZlOwotCXN0cnVjdCBtdXRleCBkaXNwbGF5 X2xvY2s7Ci0KLQl1MzIgY3RybF9jb3VudDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCBjdHJs W01BWF9EU0lfQ1RSTFNfUEVSX0RJU1BMQVldOwotCi0JLyogcGFuZWwgaW5mbyAqLwotCXN0cnVj dCBkc2lfcGFuZWwgKnBhbmVsOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFuZWxfb2Y7Ci0KLQll bnVtIGRzaV9kaXNwbGF5X3R5cGUgdHlwZTsKLQl1MzIgY2xrX21hc3Rlcl9pZHg7Ci0JdTMyIGNt ZF9tYXN0ZXJfaWR4OwotCXUzMiB2aWRlb19tYXN0ZXJfaWR4OwotCi0Jc3RydWN0IGRzaV9kaXNw bGF5X2Nsa19pbmZvIGNsb2NrX2luZm87Ci0Jc3RydWN0IGRzaV9ob3N0X2NvbmZpZyBjb25maWc7 Ci0Jc3RydWN0IGRzaV9sYW5lX21hcCBsYW5lX21hcDsKLQlpbnQgY21kbGluZV90b3BvbG9neTsK LQlpbnQgY21kbGluZV90aW1pbmc7Ci0JYm9vbCBpc190cGdfZW5hYmxlZDsKLQlib29sIHVscHNf ZW5hYmxlZDsKLQlib29sIGNsYW1wX2VuYWJsZWQ7Ci0JYm9vbCBwaHlfaWRsZV9wb3dlcl9vZmY7 Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICp0eF9jbWRfYnVmOwotCXUzMiBjbWRfYnVmZmVyX3Np emU7Ci0JdTY0IGNtZF9idWZmZXJfaW92YTsKLQl2b2lkICp2YWRkcjsKLQotCXN0cnVjdCBtaXBp X2RzaV9ob3N0IGhvc3Q7Ci0Jc3RydWN0IGRzaV9icmlkZ2UgICAgKmJyaWRnZTsKLQl1MzIgY21k X2VuZ2luZV9yZWZjb3VudDsKLQotCXZvaWQgKmNsa19tbmdyOwotCXZvaWQgKmRzaV9jbGtfaGFu ZGxlOwotCXZvaWQgKm1kcF9jbGtfaGFuZGxlOwotCi0JLyogREVCVUcgRlMgKi8KLQlzdHJ1Y3Qg ZGVudHJ5ICpyb290OwotCi0JYm9vbCBtaXNyX2VuYWJsZTsKLQl1MzIgbWlzcl9mcmFtZV9jb3Vu dDsKLX07Ci0KLSNpZmRlZiBDT05GSUdfRFJNX01TTV9EU0lfU1RBR0lORwotCi1pbnQgZHNpX2Rp c3BsYXlfZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwotaW50IGRzaV9k aXNwbGF5X2Rldl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7Ci0KLS8qKgot ICogZHNpX2Rpc3BsYXlfZ2V0X251bV9vZl9kaXNwbGF5cygpIC0gcmV0dXJucyBudW1iZXIgb2Yg ZGlzcGxheSBkZXZpY2VzCi0gKgkJCQkgICAgICAgc3VwcG9ydGVkLgotICoKLSAqIFJldHVybjog bnVtYmVyIG9mIGRpc3BsYXlzLgotICovCi1pbnQgZHNpX2Rpc3BsYXlfZ2V0X251bV9vZl9kaXNw bGF5cyh2b2lkKTsKLQotLyoqCi0gKiBkc2lfZGlzcGxheV9nZXRfYWN0aXZlX2Rpc3BsYXlzIC0g cmV0dXJucyBwb2ludGVycyBmb3IgYWN0aXZlIGRpc3BsYXkgZGV2aWNlcwotICogQGRpc3BsYXlf YXJyYXk6IFBvaW50ZXIgdG8gZGlzcGxheSBhcnJheSB0byBiZSBmaWxsZWQKLSAqIEBtYXhfZGlz cGxheV9jb3VudDogU2l6ZSBvZiBkaXNwbGF5X2FycmF5Ci0gKiBAUmV0dXJuczogTnVtYmVyIG9m IGRpc3BsYXkgZW50cmllcyBmaWxsZWQKLSAqLwotaW50IGRzaV9kaXNwbGF5X2dldF9hY3RpdmVf ZGlzcGxheXModm9pZCAqKmRpc3BsYXlfYXJyYXksCi0JCXUzMiBtYXhfZGlzcGxheV9jb3VudCk7 Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfZ2V0X2Jvb3RfZGlzcGxheSgpLSBnZXQgRFNJIGJvb3Qg ZGlzcGxheSBuYW1lCi0gKiBAaW5kZXg6CWluZGV4IG9mIGRpc3BsYXkgc2VsZWN0aW9uCi0gKgot ICogUmV0dXJuOglyZXR1cm5zIHRoZSBkaXNwbGF5IG5vZGUgcG9pbnRlcgotICovCi1zdHJ1Y3Qg ZGV2aWNlX25vZGUgKmRzaV9kaXNwbGF5X2dldF9ib290X2Rpc3BsYXkoaW50IGluZGV4KTsKLQot LyoqCi0gKiBkc2lfZGlzcGxheV9nZXRfZGlzcGxheV9ieV9uYW1lKCktIGZpbmRzIGRpc3BsYXkg YnkgbmFtZQotICogQG5hbWU6CW5hbWUgb2YgdGhlIGRpc3BsYXkuCi0gKgotICogUmV0dXJuOiBo YW5kbGUgdG8gdGhlIGRpc3BsYXkgb3IgZXJyb3IgY29kZS4KLSAqLwotc3RydWN0IGRzaV9kaXNw bGF5ICpkc2lfZGlzcGxheV9nZXRfZGlzcGxheV9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOwot Ci0vKioKLSAqIGRzaV9kaXNwbGF5X3NldF9hY3RpdmVfc3RhdGUoKSAtIHNldHMgdGhlIHN0YXRl IG9mIHRoZSBkaXNwbGF5Ci0gKiBAZGlzcGxheTogICAgICAgIEhhbmRsZSB0byBkaXNwbGF5Lgot ICogQGlzX2FjdGl2ZTogICAgICBzdGF0ZQotICovCi12b2lkIGRzaV9kaXNwbGF5X3NldF9hY3Rp dmVfc3RhdGUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LCBib29sIGlzX2FjdGl2ZSk7Ci0K LS8qKgotICogZHNpX2Rpc3BsYXlfZHJtX2JyaWRnZV9pbml0KCkgLSBpbml0aWFsaXplcyBEUk0g YnJpZGdlIG9iamVjdCBmb3IgRFNJCi0gKiBAZGlzcGxheTogICAgICAgICAgICBIYW5kbGUgdG8g dGhlIGRpc3BsYXkuCi0gKiBAZW5jb2RlcjogICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBlbmNv ZGVyIG9iamVjdCB3aGljaCBpcyBjb25uZWN0ZWQgdG8gdGhlCi0gKgkJCWRpc3BsYXkuCi0gKgot ICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2Rpc3BsYXlfZHJtX2JyaWRnZV9p bml0KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwKLQkJc3RydWN0IGRybV9lbmNvZGVyICpl bmMpOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5X2RybV9icmlkZ2VfZGVpbml0KCkgLSBkZXN0cm95 cyBEUk0gYnJpZGdlIGZvciB0aGUgZGlzcGxheQotICogQGRpc3BsYXk6ICAgICAgICBIYW5kbGUg dG8gdGhlIGRpc3BsYXkuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNp X2Rpc3BsYXlfZHJtX2JyaWRnZV9kZWluaXQoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KTsK LQotLyoqCi0gKiBkc2lfZGlzcGxheV9nZXRfaW5mbygpIC0gcmV0dXJucyB0aGUgZGlzcGxheSBw cm9wZXJ0aWVzCi0gKiBAaW5mbzogICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgc3RydWN0dXJl IHdoZXJlIGluZm8gaXMgc3RvcmVkLgotICogQGRpc3A6ICAgICAgICAgICAgIEhhbmRsZSB0byB0 aGUgZGlzcGxheS4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfZGlz cGxheV9nZXRfaW5mbyhzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyAqaW5mbywgdm9pZCAqZGlzcCk7 Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfZ2V0X21vZGVfY291bnQoKSAtIGdldCBudW1iZXIgb2Yg bW9kZXMgc3VwcG9ydGVkIGJ5IHRoZSBkaXNwbGF5Ci0gKiBAZGlzcGxheTogICAgICAgICAgICBI YW5kbGUgdG8gZGlzcGxheS4KLSAqIEBjb3VudDogICAgICAgICAgICAgIE51bWJlciBvZiBtb2Rl cyBzdXBwb3J0ZWQKLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfZGlz cGxheV9nZXRfbW9kZV9jb3VudChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksIHUzMiAqY291 bnQpOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5X2dldF9tb2RlcygpIC0gZ2V0IG1vZGVzIHN1cHBv cnRlZCBieSBkaXNwbGF5Ci0gKiBAZGlzcGxheTogICAgICAgICAgICBIYW5kbGUgdG8gZGlzcGxh eS4KLSAqIEBtb2RlczsgICAgICAgICAgICAgIFBvaW50ZXIgdG8gYXJyYXkgb2YgbW9kZXMuIE1l bW9yeSBhbGxvY2F0ZWQgc2hvdWxkIGJlCi0gKgkJCWJpZyBlbm91Z2ggdG8gc3RvcmUgKGNvdW50 ICogc3RydWN0IGRzaV9kaXNwbGF5X21vZGUpCi0gKgkJCWVsZW1lbnRzLiBJZiBtb2RlcyBwb2lu dGVyIGlzIE5VTEwsIG51bWJlciBvZiBtb2RlcyB3aWxsCi0gKgkJCWJlIHN0b3JlZCBpbiB0aGUg bWVtb3J5IHBvaW50ZWQgdG8gYnkgY291bnQuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgot ICovCi1pbnQgZHNpX2Rpc3BsYXlfZ2V0X21vZGVzKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxh eSwKLQkJCSAgc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGVzKTsKLQotLyoqCi0gKiBkc2lf ZGlzcGxheV9wdXRfbW9kZSgpIC0gZnJlZSB1cCBtb2RlIGNyZWF0ZWQgZm9yIHRoZSBkaXNwbGF5 Ci0gKiBAZGlzcGxheTogICAgICAgICAgICBIYW5kbGUgdG8gZGlzcGxheS4KLSAqIEBtb2RlOiAg ICAgICAgICAgICAgIERpc3BsYXkgbW9kZSB0byBiZSBmcmVlZCB1cAotICoKLSAqIFJldHVybjog ZXJyb3IgY29kZS4KLSAqLwotdm9pZCBkc2lfZGlzcGxheV9wdXRfbW9kZShzdHJ1Y3QgZHNpX2Rp c3BsYXkgKmRpc3BsYXksCi0Jc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGUpOwotCi0vKioK LSAqIGRzaV9kaXNwbGF5X3ZhbGlkYXRlX21vZGUoKSAtIHZhbGlkYXRlcyBpZiBtb2RlIGlzIHN1 cHBvcnRlZCBieSBkaXNwbGF5Ci0gKiBAZGlzcGxheTogICAgICAgICAgICAgSGFuZGxlIHRvIGRp c3BsYXkuCi0gKiBAbW9kZTogICAgICAgICAgICAgICAgTW9kZSB0byBiZSB2YWxpZGF0ZWQuCi0g KiBAZmxhZ3M6ICAgICAgICAgICAgICAgTW9kaWZpZXIgZmxhZ3MuCi0gKgotICogUmV0dXJuOiAw IGlmIHN1cHBvcnRlZCBvciBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2Rpc3BsYXlfdmFsaWRh dGVfbW9kZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCQkgICAgICBzdHJ1Y3QgZHNp X2Rpc3BsYXlfbW9kZSAqbW9kZSwKLQkJCSAgICAgIHUzMiBmbGFncyk7Ci0KLS8qKgotICogZHNp X2Rpc3BsYXlfdmFsaWRhdGVfbW9kZV92cnIoKSAtIHZhbGlkYXRlcyBtb2RlIGlmIHZhcmlhYmxl IHJlZnJlc2ggY2FzZQotICogQGRpc3BsYXk6ICAgICAgICAgICAgIEhhbmRsZSB0byBkaXNwbGF5 LgotICogQG1vZGU6ICAgICAgICAgICAgICAgIE1vZGUgdG8gYmUgdmFsaWRhdGVkLi4KLSAqCi0g KiBSZXR1cm46IDAgaWYgIGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfZGlzcGxheV92YWxpZGF0 ZV9tb2RlX3ZycihzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCQlzdHJ1Y3QgZHNpX2Rp c3BsYXlfbW9kZSAqY3VyX2RzaV9tb2RlLAotCQkJc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1v ZGUpOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5X3NldF9tb2RlKCkgLSBTZXQgbW9kZSBvbiB0aGUg ZGlzcGxheS4KLSAqIEBkaXNwbGF5OiAgICAgICAgICAgSGFuZGxlIHRvIGRpc3BsYXkuCi0gKiBA bW9kZTogICAgICAgICAgICAgIG1vZGUgdG8gYmUgc2V0LgotICogQGZsYWdzOiAgICAgICAgICAg ICBNb2RpZmllciBmbGFncy4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBk c2lfZGlzcGxheV9zZXRfbW9kZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCQkgc3Ry dWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGUsCi0JCQkgdTMyIGZsYWdzKTsKLQotLyoqCi0gKiBk c2lfZGlzcGxheV9wcmVwYXJlKCkgLSBwcmVwYXJlIGRpc3BsYXkKLSAqIEBkaXNwbGF5OiAgICAg ICAgICBIYW5kbGUgdG8gZGlzcGxheS4KLSAqCi0gKiBQcmVwYXJlIHdpbGwgcGVyZm9ybSBwb3dl ciB1cCBzZXF1ZW5jZXMgZm9yIHRoZSBob3N0IGFuZCBwYW5lbCBoYXJkd2FyZS4KLSAqIFBvd2Vy IGFuZCBjbG9jayByZXNvdXJjZXMgbWlnaHQgYmUgdHVybmVkIG9uIChkZXBlbmRpbmcgb24gdGhl IHBhbmVsIG1vZGUpLgotICogVGhlIHZpZGVvIGVuZ2luZSBpcyBub3QgZW5hYmxlZC4KLSAqCi0g KiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfZGlzcGxheV9wcmVwYXJlKHN0cnVj dCBkc2lfZGlzcGxheSAqZGlzcGxheSk7Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfZW5hYmxlKCkg LSBlbmFibGUgZGlzcGxheQotICogQGRpc3BsYXk6ICAgICAgICAgICAgSGFuZGxlIHRvIGRpc3Bs YXkuCi0gKgotICogRW5hYmxlIHdpbGwgdHVybiBvbiB0aGUgaG9zdCBlbmdpbmUgYW5kIHRoZSBw YW5lbC4gQXQgdGhlIGVuZCBvZiB0aGUgZW5hYmxlCi0gKiBmdW5jdGlvbiwgSG9zdCBhbmQgcGFu ZWwgaGFyZHdhcmUgYXJlIHJlYWR5IHRvIGFjY2VwdCBwaXhlbCBkYXRhIGZyb20KLSAqIHVwc3Ry ZWFtLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9kaXNwbGF5X2Vu YWJsZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5 X3Bvc3RfZW5hYmxlKCkgLSBwZXJmb3JtIHBvc3QgZW5hYmxlIG9wZXJhdGlvbnMuCi0gKiBAZGlz cGxheTogICAgICAgICBIYW5kbGUgdG8gZGlzcGxheS4KLSAqCi0gKiBTb21lIHBhbmVscyBtaWdo dCByZXF1aXJlIHNvbWUgY29tbWFuZHMgdG8gYmUgc2VudCBhZnRlciBwaXhlbCBkYXRhCi0gKiB0 cmFuc21pc3Npb24gaGFzIHN0YXJ0ZWQuIFN1Y2ggY29tbWFuZHMgYXJlIHNlbnQgYXMgcGFydCBv ZiB0aGUgcG9zdF9lbmFibGUKLSAqIGZ1bmN0aW9uLgotICoKLSAqIFJldHVybjogZXJyb3IgY29k ZS4KLSAqLwotaW50IGRzaV9kaXNwbGF5X3Bvc3RfZW5hYmxlKHN0cnVjdCBkc2lfZGlzcGxheSAq ZGlzcGxheSk7Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfcHJlX2Rpc2FibGUoKSAtIHBlcmZvcm0g cHJlIGRpc2FibGUgb3BlcmF0aW9ucy4KLSAqIEBkaXNwbGF5OiAgICAgICAgICBIYW5kbGUgdG8g ZGlzcGxheS4KLSAqCi0gKiBJZiBhIHBhbmVsIHJlcXVpcmVzIGNvbW1hbmRzIHRvIGJlIHNlbnQg YmVmb3JlIHBpeGVsIGRhdGEgdHJhbnNtaXNzaW9uIGlzCi0gKiBzdG9wcGVkLCB0aG9zZSBjYW4g YmUgc2VudCBhcyBwYXJ0IG9mIHByZV9kaXNhYmxlLgotICoKLSAqIFJldHVybjogZXJyb3IgY29k ZS4KLSAqLwotaW50IGRzaV9kaXNwbGF5X3ByZV9kaXNhYmxlKHN0cnVjdCBkc2lfZGlzcGxheSAq ZGlzcGxheSk7Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfZGlzYWJsZSgpIC0gZGlzYWJsZSBwYW5l bCBhbmQgaG9zdCBoYXJkd2FyZS4KLSAqIEBkaXNwbGF5OiAgICAgICAgICAgICBIYW5kbGUgdG8g ZGlzcGxheS4KLSAqCi0gKiBEaXNhYmxlIGhvc3QgYW5kIHBhbmVsIGhhcmR3YXJlIGFuZCBwaXhl bCBkYXRhIHRyYW5zbWlzc2lvbiBjYW4gbm90IGNvbnRpbnVlLgotICoKLSAqIFJldHVybjogZXJy b3IgY29kZS4KLSAqLwotaW50IGRzaV9kaXNwbGF5X2Rpc2FibGUoc3RydWN0IGRzaV9kaXNwbGF5 ICpkaXNwbGF5KTsKLQotLyoqCi0gKiBkc2lfcHJlX2Nsa29mZl9jYigpIC0gQ2FsbGJhY2sgYmVm b3JlIGNsb2NrIGlzIHR1cm5lZCBvZmYKLSAqIEBwcml2OiBwcml2YXRlIGRhdGEgcG9pbnRlci4K LSAqIEBjbGtfdHlwZTogY2xvY2sgd2hpY2ggaXMgYmVpbmcgdHVybmVkIG9uLgotICogQG5ld19z dGF0ZTogbmV4dCBzdGF0ZSBmb3IgdGhlIGNsb2NrLgotICoKLSAqIEByZXR1cm46IGVycm9yIGNv ZGUuCi0gKi8KLWludCBkc2lfcHJlX2Nsa29mZl9jYih2b2lkICpwcml2LCBlbnVtIGRzaV9jbGtf dHlwZSBjbGtfdHlwZSwKLQllbnVtIGRzaV9jbGtfc3RhdGUgbmV3X3N0YXRlKTsKLQotLyoqCi0g KiBkc2lfZGlzcGxheV91cGRhdGVfcHBzKCkgLSB1cGRhdGUgUFBTIGJ1ZmZlci4KLSAqIEBwcHNf Y21kOiAgICAgICAgICAgICBQUFMgYnVmZmVyLgotICogQGRpc3BsYXk6ICAgICAgICAgICAgIEhh bmRsZSB0byBkaXNwbGF5LgotICoKLSAqIENvcGllcyBuZXcgUFBTIGJ1ZmZlciBpbnRvIGRpc3Bs YXkgc3RydWN0dXJlLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9k aXNwbGF5X3VwZGF0ZV9wcHMoY2hhciAqcHBzX2NtZCwgdm9pZCAqZGlzcGxheSk7Ci0KLS8qKgot ICogZHNpX3Bvc3RfY2xrb2ZmX2NiKCkgLSBDYWxsYmFjayBhZnRlciBjbG9jayBpcyB0dXJuZWQg b2ZmCi0gKiBAcHJpdjogcHJpdmF0ZSBkYXRhIHBvaW50ZXIuCi0gKiBAY2xrX3R5cGU6IGNsb2Nr IHdoaWNoIGlzIGJlaW5nIHR1cm5lZCBvbi4KLSAqIEBjdXJyX3N0YXRlOiBjdXJyZW50IHN0YXRl IGZvciB0aGUgY2xvY2suCi0gKgotICogQHJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRz aV9wb3N0X2Nsa29mZl9jYih2b2lkICpwcml2LCBlbnVtIGRzaV9jbGtfdHlwZSBjbGtfdHlwZSwK LQllbnVtIGRzaV9jbGtfc3RhdGUgY3Vycl9zdGF0ZSk7Ci0KLS8qKgotICogZHNpX3Bvc3RfY2xr b25fY2IoKSAtIENhbGxiYWNrIGFmdGVyIGNsb2NrIGlzIHR1cm5lZCBvbgotICogQHByaXY6IHBy aXZhdGUgZGF0YSBwb2ludGVyLgotICogQGNsa190eXBlOiBjbG9jayB3aGljaCBpcyBiZWluZyB0 dXJuZWQgb24uCi0gKiBAY3Vycl9zdGF0ZTogY3VycmVudCBzdGF0ZSBmb3IgdGhlIGNsb2NrLgot ICoKLSAqIEByZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfcG9zdF9jbGtvbl9jYih2 b2lkICpwcml2LCBlbnVtIGRzaV9jbGtfdHlwZSBjbGtfdHlwZSwKLQllbnVtIGRzaV9jbGtfc3Rh dGUgY3Vycl9zdGF0ZSk7Ci0KLQotLyoqCi0gKiBkc2lfcHJlX2Nsa29uX2NiKCkgLSBDYWxsYmFj ayBiZWZvcmUgY2xvY2sgaXMgdHVybmVkIG9uCi0gKiBAcHJpdjogcHJpdmF0ZSBkYXRhIHBvaW50 ZXIuCi0gKiBAY2xrX3R5cGU6IGNsb2NrIHdoaWNoIGlzIGJlaW5nIHR1cm5lZCBvbi4KLSAqIEBu ZXdfc3RhdGU6IG5leHQgc3RhdGUgZm9yIHRoZSBjbG9jay4KLSAqCi0gKiBAcmV0dXJuOiBlcnJv ciBjb2RlLgotICovCi1pbnQgZHNpX3ByZV9jbGtvbl9jYih2b2lkICpwcml2LCBlbnVtIGRzaV9j bGtfdHlwZSBjbGtfdHlwZSwKLQllbnVtIGRzaV9jbGtfc3RhdGUgbmV3X3N0YXRlKTsKLQotLyoq Ci0gKiBkc2lfZGlzcGxheV91bnByZXBhcmUoKSAtIHBvd2VyIG9mZiBkaXNwbGF5IGhhcmR3YXJl LgotICogQGRpc3BsYXk6ICAgICAgICAgICAgSGFuZGxlIHRvIGRpc3BsYXkuCi0gKgotICogSG9z dCBhbmQgcGFuZWwgaGFyZHdhcmUgaXMgdHVybmVkIG9mZi4gUGFuZWwgd2lsbCBiZSBpbiByZXNl dCBzdGF0ZSBhdCB0aGUKLSAqIGVuZCBvZiB0aGUgZnVuY3Rpb24uCi0gKgotICogUmV0dXJuOiBl cnJvciBjb2RlLgotICovCi1pbnQgZHNpX2Rpc3BsYXlfdW5wcmVwYXJlKHN0cnVjdCBkc2lfZGlz cGxheSAqZGlzcGxheSk7Ci0KLWludCBkc2lfZGlzcGxheV9zZXRfdHBnX3N0YXRlKHN0cnVjdCBk c2lfZGlzcGxheSAqZGlzcGxheSwgYm9vbCBlbmFibGUpOwotCi1pbnQgZHNpX2Rpc3BsYXlfY2xv Y2tfZ2F0ZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksIGJvb2wgZW5hYmxlKTsKLWludCBk c2lfZGlzcGFseV9zdGF0aWNfZnJhbWUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LCBib29s IGVuYWJsZSk7Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfZW5hYmxlX2V2ZW50KCkgLSBlbmFibGUg aW50ZXJydXB0IGJhc2VkIGNvbm5lY3RvciBldmVudAotICogQGRpc3BsYXk6ICAgICAgICAgICAg SGFuZGxlIHRvIGRpc3BsYXkuCi0gKiBAZXZlbnRfaWR4OiAgICAgICAgICBFdmVudCBpbmRleC4K LSAqIEBldmVudF9pbmZvOiAgICAgICAgIEV2ZW50IGNhbGxiYWNrIGRlZmluaXRpb24uCi0gKiBA ZW5hYmxlOiAgICAgICAgICAgICBXaGV0aGVyIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBldmVudCBp bnRlcnJ1cHQuCi0gKi8KLXZvaWQgZHNpX2Rpc3BsYXlfZW5hYmxlX2V2ZW50KHN0cnVjdCBkc2lf ZGlzcGxheSAqZGlzcGxheSwKLQkJdWludDMyX3QgZXZlbnRfaWR4LCBzdHJ1Y3QgZHNpX2V2ZW50 X2NiX2luZm8gKmV2ZW50X2luZm8sCi0JCWJvb2wgZW5hYmxlKTsKLQotaW50IGRzaV9kaXNwbGF5 X3NldF9iYWNrbGlnaHQodm9pZCAqZGlzcGxheSwgdTMyIGJsX2x2bCk7Ci0KLS8qKgotICogZHNp X2Rpc3BsYXlfc29mdF9yZXNldCgpIC0gcGVyZm9ybSBhIHNvZnQgcmVzZXQgb24gRFNJIGNvbnRy b2xsZXIKLSAqIEBkaXNwbGF5OiAgICAgICAgIEhhbmRsZSB0byBkaXNwbGF5Ci0gKgotICogVGhl IHZpZGVvLCBjb21tYW5kIGFuZCBjb250cm9sbGVyIGVuZ2luZXMgd2lsbCBiZSBkaXNhYmxlZCBi ZWZvcmUgdGhlCi0gKiByZXNldCBpcyB0cmlnZ2VyZWQuIEFmdGVyLCB0aGUgZW5naW5lcyB3aWxs IGJlIHJlLWVuYWJsZWQgdG8gdGhlIHNhbWUgc3RhdGUKLSAqIGFzIGJlZm9yZSB0aGUgcmVzZXQu Ci0gKgotICogSWYgdGhlIHJlc2V0IGlzIGRvbmUgd2hpbGUgTURQIHRpbWluZyBlbmdpbmUgaXMg dHVybmVkIG9uLCB0aGUgdmlkZW8KLSAqIGVuZ2luZSBzaG91bGQgYmUgcmUtZW5hYmxlZCBvbmx5 IGR1cmluZyB0aGUgdmVydGljYWwgYmxhbmtpbmcgdGltZS4KLSAqCi0gKiBSZXR1cm46IGVycm9y IGNvZGUKLSAqLwotaW50IGRzaV9kaXNwbGF5X3NvZnRfcmVzZXQodm9pZCAqZGlzcGxheSk7Ci0K LS8qKgotICogZHNpX2Rpc3BsYXlfc2V0X3Bvd2VyIC0gdXBkYXRlIHBvd2VyL2RwbXMgc2V0dGlu ZwotICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotICog QHBvd2VyX21vZGU6IE9uZSBvZiB0aGUgZm9sbG93aW5nLAotICogICAgICAgICAgICAgIERQVV9N T0RFX0RQTVNfT04KLSAqICAgICAgICAgICAgICBEUFVfTU9ERV9EUE1TX0xQMQotICogICAgICAg ICAgICAgIERQVV9NT0RFX0RQTVNfTFAyCi0gKiAgICAgICAgICAgICAgRFBVX01PREVfRFBNU19T VEFOREJZCi0gKiAgICAgICAgICAgICAgRFBVX01PREVfRFBNU19TVVNQRU5ECi0gKiAgICAgICAg ICAgICAgRFBVX01PREVfRFBNU19PRkYKLSAqIEBkaXNwbGF5OiBQb2ludGVyIHRvIHByaXZhdGUg ZGlzcGxheSBzdHJ1Y3R1cmUKLSAqIFJldHVybnM6IFplcm8gb24gc3VjY2VzcwotICovCi1pbnQg ZHNpX2Rpc3BsYXlfc2V0X3Bvd2VyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0J CWludCBwb3dlcl9tb2RlLCB2b2lkICpkaXNwbGF5KTsKLQotLyoKLSAqIGRzaV9kaXNwbGF5X3By ZV9raWNrb2ZmIC0gcHJvZ3JhbSBraWNrb2ZmLXRpbWUgZmVhdHVyZXMKLSAqIEBkaXNwbGF5OiBQ b2ludGVyIHRvIHByaXZhdGUgZGlzcGxheSBzdHJ1Y3R1cmUKLSAqIFJldHVybnM6IFplcm8gb24g c3VjY2VzcwotICovCi1pbnQgZHNpX2Rpc3BsYXlfcHJlX2tpY2tvZmYoc3RydWN0IGRzaV9kaXNw bGF5ICpkaXNwbGF5KTsKLQotLyoqCi0gKiBkc2lfZGlzcGxheV9nZXRfZHN0X2Zvcm1hdCgpIC0g Z2V0IGRzdF9mb3JtYXQgZnJvbSBEU0kgZGlzcGxheQotICogQGRpc3BsYXk6ICAgICAgICAgSGFu ZGxlIHRvIGRpc3BsYXkKLSAqCi0gKiBSZXR1cm46IGVudW0gZHNpX3BpeGVsX2Zvcm1hdCB0eXBl Ci0gKi8KLWVudW0gZHNpX3BpeGVsX2Zvcm1hdCBkc2lfZGlzcGxheV9nZXRfZHN0X2Zvcm1hdCh2 b2lkICpkaXNwbGF5KTsKLQotI2Vsc2UKLQotc3RhdGljIGlubGluZSBpbnQgZHNpX2Rpc3BsYXlf Z2V0X251bV9vZl9kaXNwbGF5cyh2b2lkKSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIGlu dCBkc2lfZGlzcGxheV9nZXRfYWN0aXZlX2Rpc3BsYXlzKHZvaWQgKipkaXNwbGF5X2FycmF5LCB1 MzIgbWF4X2Rpc3BsYXlfY291bnQpIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgaW50IGRz aV9kaXNwbGF5X2RybV9icmlkZ2VfaW5pdChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0J CXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jKQotewotCXJldHVybiAtRUlOVkFMOwotfQotc3RhdGlj IGlubGluZSBpbnQgZHNpX2Rpc3BsYXlfZHJtX2JyaWRnZV9kZWluaXQoc3RydWN0IGRzaV9kaXNw bGF5ICpkaXNwbGF5KSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIGludCBkc2lfZGlzcGxh eV9nZXRfaW5mbyhzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyAqaW5mbywgdm9pZCAqZGlzcCkKLXsK LQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfRFNJX0RJU1BMQVlf SF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Rp c3BsYXlfdGVzdC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGlzcGxh eV90ZXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZTI1NzAuLjAwMDAwMDAK LS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGlzcGxheV90ZXN0LmMK KysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAx Ni0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51 eC9zbGFiLmg+Ci0KLSNpbmNsdWRlICJkc2lfZGlzcGxheV90ZXN0LmgiCi0KLXN0YXRpYyB2b2lk IGRzaV9kaXNwbGF5X3Rlc3RfZHVtcF9tb2RlcyhzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqbW9k ZSwgdTMyCi0JCQkJCWNvdW50KQotewotfQotCi1zdGF0aWMgdm9pZCBkc2lfZGlzcGxheV90ZXN0 X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBkc2lfZGlzcGxheV90 ZXN0ICp0ZXN0OwotCXN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheTsKLQlzdHJ1Y3QgZHNpX2Rp c3BsYXlfbW9kZSAqbW9kZXM7Ci0JdTMyIGNvdW50ID0gMDsKLQl1MzIgc2l6ZSA9IDA7Ci0JaW50 IHJjID0gMDsKLQotCXRlc3QgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRzaV9kaXNwbGF5 X3Rlc3QsIHRlc3Rfd29yayk7Ci0KLQlkaXNwbGF5ID0gdGVzdC0+ZGlzcGxheTsKLQlyYyA9IGRz aV9kaXNwbGF5X2dldF9tb2RlX2NvdW50KGRpc3BsYXksICZjb3VudCk7Ci0JaWYgKHJjKSB7Ci0J CXByX2VycigiZmFpbGVkIHRvIGdldCBtb2RlcyBjb3VudCwgcmM9JWRcbiIsIHJjKTsKLQkJZ290 byB0ZXN0X2ZhaWw7Ci0JfQotCi0Jc2l6ZSA9IGNvdW50ICogc2l6ZW9mKCptb2Rlcyk7Ci0JbW9k ZXMgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghbW9kZXMpIHsKLQkJcmMgPSAt RU5PTUVNOwotCQlnb3RvIHRlc3RfZmFpbDsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2dldF9t b2RlcyhkaXNwbGF5LCBtb2Rlcyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIGdl dCBtb2RlcywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byB0ZXN0X2ZhaWxfZnJlZV9tb2RlczsKLQl9 Ci0KLQlkc2lfZGlzcGxheV90ZXN0X2R1bXBfbW9kZXMobW9kZXMsIGNvdW50KTsKLQotCXJjID0g ZHNpX2Rpc3BsYXlfc2V0X21vZGUoZGlzcGxheSwgJm1vZGVzWzBdLCAweDApOwotCWlmIChyYykg ewotCQlwcl9lcnIoImZhaWxlZCB0byBzZXQgbW9kZSwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byB0 ZXN0X2ZhaWxfZnJlZV9tb2RlczsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X3ByZXBhcmUoZGlz cGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHByZXBhcmUgZGlzcGxheSwg cmM9JWRcbiIsIHJjKTsKLQkJZ290byB0ZXN0X2ZhaWxfZnJlZV9tb2RlczsKLQl9Ci0KLQlyYyA9 IGRzaV9kaXNwbGF5X2VuYWJsZShkaXNwbGF5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWls ZWQgdG8gZW5hYmxlIGRpc3BsYXksIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gdGVzdF9mYWlsX3Vu cHJlcF9kaXNwOwotCX0KLQlyZXR1cm47Ci0KLXRlc3RfZmFpbF91bnByZXBfZGlzcDoKLQlpZiAo cmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gdW5wcmVwIGRpc3BsYXksIHJjPSVkXG4iLCByYyk7 Ci0JCWdvdG8gdGVzdF9mYWlsX2ZyZWVfbW9kZXM7Ci0JfQotCi10ZXN0X2ZhaWxfZnJlZV9tb2Rl czoKLQlrZnJlZShtb2Rlcyk7Ci10ZXN0X2ZhaWw6Ci0JcmV0dXJuOwotfQotCi1pbnQgZHNpX2Rp c3BsYXlfdGVzdF9pbml0KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlzdGF0aWMg aW50IGRvbmU7Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfdGVzdCAqdGVzdDsK LQotCWlmIChkb25lKQotCQlyZXR1cm4gcmM7Ci0KLQlkb25lID0gMTsKLQlpZiAoIWRpc3BsYXkp IHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0K LQotCXRlc3QgPSBremFsbG9jKHNpemVvZigqdGVzdCksIEdGUF9LRVJORUwpOwotCWlmICghdGVz dCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl0ZXN0LT5kaXNwbGF5ID0gZGlzcGxheTsKLQlJTklU X1dPUksoJnRlc3QtPnRlc3Rfd29yaywgZHNpX2Rpc3BsYXlfdGVzdF93b3JrKTsKLQotCWRzaV9k aXNwbGF5X3Rlc3Rfd29yaygmdGVzdC0+dGVzdF93b3JrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Rpc3BsYXlfdGVz dC5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGlzcGxheV90ZXN0LmgK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyZjA4NjEuLjAwMDAwMDAKLS0tIGEvZHJp dmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGlzcGxheV90ZXN0LmgKKysrIC9kZXYv bnVsbApAQCAtMSwzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRo ZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot ICovCi0KLSNpZm5kZWYgX0RTSV9ESVNQTEFZX1RFU1RfSF8KLSNkZWZpbmUgX0RTSV9ESVNQTEFZ X1RFU1RfSF8KLQotI2luY2x1ZGUgImRzaV9kaXNwbGF5LmgiCi0jaW5jbHVkZSAiZHNpX2N0cmxf aHcuaCIKLSNpbmNsdWRlICJkc2lfY3RybC5oIgotCi1zdHJ1Y3QgZHNpX2Rpc3BsYXlfdGVzdCB7 Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5OwotCi0Jc3RydWN0IHdvcmtfc3RydWN0IHRl c3Rfd29yazsKLX07Ci0KLWludCBkc2lfZGlzcGxheV90ZXN0X2luaXQoc3RydWN0IGRzaV9kaXNw bGF5ICpkaXNwbGF5KTsKLQotCi0jZW5kaWYgLyogX0RTSV9ESVNQTEFZX1RFU1RfSF8gKi8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2RybS5jIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZHJtLmMKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDJlNzQyYTMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9k c2ktc3RhZ2luZy9kc2lfZHJtLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2ODEgKzAsMCBAQAotLyoK LSAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5 IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K LSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0KLSNkZWZpbmUgcHJfZm10KGZt dCkJImRzaS1kcm06WyVzXSAiIGZtdCwgX19mdW5jX18KLSNpbmNsdWRlIDxkcm0vZHJtX2F0b21p Y19oZWxwZXIuaD4KLSNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgotCi0jaW5jbHVkZSAibXNt X2ttcy5oIgotI2luY2x1ZGUgImRwdV9jb25uZWN0b3IuaCIKLSNpbmNsdWRlICJkc2lfZHJtLmgi Ci0jaW5jbHVkZSAiZHB1X3RyYWNlLmgiCi0KLSNkZWZpbmUgdG9fZHNpX2JyaWRnZSh4KSAgICAg Y29udGFpbmVyX29mKCh4KSwgc3RydWN0IGRzaV9icmlkZ2UsIGJhc2UpCi0jZGVmaW5lIHRvX2Rz aV9zdGF0ZSh4KSAgICAgIGNvbnRhaW5lcl9vZigoeCksIHN0cnVjdCBkc2lfY29ubmVjdG9yX3N0 YXRlLCBiYXNlKQotCi1zdGF0aWMgdm9pZCBjb252ZXJ0X3RvX2RzaV9tb2RlKGNvbnN0IHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICpkcm1fbW9kZSwKLQkJCQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9k ZSAqZHNpX21vZGUpCi17Ci0JbWVtc2V0KGRzaV9tb2RlLCAwLCBzaXplb2YoKmRzaV9tb2RlKSk7 Ci0KLQlkc2lfbW9kZS0+dGltaW5nLmhfYWN0aXZlID0gZHJtX21vZGUtPmhkaXNwbGF5OwotCWRz aV9tb2RlLT50aW1pbmcuaF9iYWNrX3BvcmNoID0gZHJtX21vZGUtPmh0b3RhbCAtIGRybV9tb2Rl LT5oc3luY19lbmQ7Ci0JZHNpX21vZGUtPnRpbWluZy5oX3N5bmNfd2lkdGggPSBkcm1fbW9kZS0+ aHRvdGFsIC0KLQkJCShkcm1fbW9kZS0+aHN5bmNfc3RhcnQgKyBkc2lfbW9kZS0+dGltaW5nLmhf YmFja19wb3JjaCk7Ci0JZHNpX21vZGUtPnRpbWluZy5oX2Zyb250X3BvcmNoID0gZHJtX21vZGUt PmhzeW5jX3N0YXJ0IC0KLQkJCQkJIGRybV9tb2RlLT5oZGlzcGxheTsKLQlkc2lfbW9kZS0+dGlt aW5nLmhfc2tldyA9IGRybV9tb2RlLT5oc2tldzsKLQotCWRzaV9tb2RlLT50aW1pbmcudl9hY3Rp dmUgPSBkcm1fbW9kZS0+dmRpc3BsYXk7Ci0JZHNpX21vZGUtPnRpbWluZy52X2JhY2tfcG9yY2gg PSBkcm1fbW9kZS0+dnRvdGFsIC0gZHJtX21vZGUtPnZzeW5jX2VuZDsKLQlkc2lfbW9kZS0+dGlt aW5nLnZfc3luY193aWR0aCA9IGRybV9tb2RlLT52dG90YWwgLQotCQkoZHJtX21vZGUtPnZzeW5j X3N0YXJ0ICsgZHNpX21vZGUtPnRpbWluZy52X2JhY2tfcG9yY2gpOwotCi0JZHNpX21vZGUtPnRp bWluZy52X2Zyb250X3BvcmNoID0gZHJtX21vZGUtPnZzeW5jX3N0YXJ0IC0KLQkJCQkJIGRybV9t b2RlLT52ZGlzcGxheTsKLQotCWRzaV9tb2RlLT50aW1pbmcucmVmcmVzaF9yYXRlID0gZHJtX21v ZGUtPnZyZWZyZXNoOwotCi0JZHNpX21vZGUtPnBpeGVsX2Nsa19raHogPSBkcm1fbW9kZS0+Y2xv Y2s7Ci0KLQlkc2lfbW9kZS0+cHJpdl9pbmZvID0KLQkJKHN0cnVjdCBkc2lfZGlzcGxheV9tb2Rl X3ByaXZfaW5mbyAqKWRybV9tb2RlLT5wcml2YXRlOwotCi0JaWYgKG1zbV9pc19tb2RlX3NlYW1s ZXNzKGRybV9tb2RlKSkKLQkJZHNpX21vZGUtPmRzaV9tb2RlX2ZsYWdzIHw9IERTSV9NT0RFX0ZM QUdfU0VBTUxFU1M7Ci0JaWYgKG1zbV9pc19tb2RlX2R5bmFtaWNfZnBzKGRybV9tb2RlKSkKLQkJ ZHNpX21vZGUtPmRzaV9tb2RlX2ZsYWdzIHw9IERTSV9NT0RFX0ZMQUdfREZQUzsKLQlpZiAobXNt X25lZWRzX3ZibGFua19wcmVfbW9kZXNldChkcm1fbW9kZSkpCi0JCWRzaV9tb2RlLT5kc2lfbW9k ZV9mbGFncyB8PSBEU0lfTU9ERV9GTEFHX1ZCTEFOS19QUkVfTU9ERVNFVDsKLQlpZiAobXNtX2lz X21vZGVfc2VhbWxlc3NfZG1zKGRybV9tb2RlKSkKLQkJZHNpX21vZGUtPmRzaV9tb2RlX2ZsYWdz IHw9IERTSV9NT0RFX0ZMQUdfRE1TOwotCWlmIChtc21faXNfbW9kZV9zZWFtbGVzc192cnIoZHJt X21vZGUpKQotCQlkc2lfbW9kZS0+ZHNpX21vZGVfZmxhZ3MgfD0gRFNJX01PREVfRkxBR19WUlI7 Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbnZlcnRfdG9fZHJtX21vZGUoY29uc3Qgc3RydWN0IGRzaV9k aXNwbGF5X21vZGUgKmRzaV9tb2RlLAotCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1f bW9kZSkKLXsKLQltZW1zZXQoZHJtX21vZGUsIDAsIHNpemVvZigqZHJtX21vZGUpKTsKLQotCWRy bV9tb2RlLT5oZGlzcGxheSA9IGRzaV9tb2RlLT50aW1pbmcuaF9hY3RpdmU7Ci0JZHJtX21vZGUt PmhzeW5jX3N0YXJ0ID0gZHJtX21vZGUtPmhkaXNwbGF5ICsKLQkJCQlkc2lfbW9kZS0+dGltaW5n LmhfZnJvbnRfcG9yY2g7Ci0JZHJtX21vZGUtPmhzeW5jX2VuZCA9IGRybV9tb2RlLT5oc3luY19z dGFydCArCi0JCQkgICAgICBkc2lfbW9kZS0+dGltaW5nLmhfc3luY193aWR0aDsKLQlkcm1fbW9k ZS0+aHRvdGFsID0gZHJtX21vZGUtPmhzeW5jX2VuZCArIGRzaV9tb2RlLT50aW1pbmcuaF9iYWNr X3BvcmNoOwotCWRybV9tb2RlLT5oc2tldyA9IGRzaV9tb2RlLT50aW1pbmcuaF9za2V3OwotCi0J ZHJtX21vZGUtPnZkaXNwbGF5ID0gZHNpX21vZGUtPnRpbWluZy52X2FjdGl2ZTsKLQlkcm1fbW9k ZS0+dnN5bmNfc3RhcnQgPSBkcm1fbW9kZS0+dmRpc3BsYXkgKwotCQkJCWRzaV9tb2RlLT50aW1p bmcudl9mcm9udF9wb3JjaDsKLQlkcm1fbW9kZS0+dnN5bmNfZW5kID0gZHJtX21vZGUtPnZzeW5j X3N0YXJ0ICsKLQkJCSAgICAgIGRzaV9tb2RlLT50aW1pbmcudl9zeW5jX3dpZHRoOwotCWRybV9t b2RlLT52dG90YWwgPSBkcm1fbW9kZS0+dnN5bmNfZW5kICsgZHNpX21vZGUtPnRpbWluZy52X2Jh Y2tfcG9yY2g7Ci0KLQlkcm1fbW9kZS0+dnJlZnJlc2ggPSBkc2lfbW9kZS0+dGltaW5nLnJlZnJl c2hfcmF0ZTsKLQlkcm1fbW9kZS0+Y2xvY2sgPSBkc2lfbW9kZS0+cGl4ZWxfY2xrX2toejsKLQot CWRybV9tb2RlLT5wcml2YXRlID0gKGludCAqKWRzaV9tb2RlLT5wcml2X2luZm87Ci0KLQlpZiAo ZHNpX21vZGUtPmRzaV9tb2RlX2ZsYWdzICYgRFNJX01PREVfRkxBR19TRUFNTEVTUykKLQkJZHJt X21vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfU0VBTUxFU1M7Ci0JaWYgKGRzaV9tb2RlLT5k c2lfbW9kZV9mbGFncyAmIERTSV9NT0RFX0ZMQUdfREZQUykKLQkJZHJtX21vZGUtPnByaXZhdGVf ZmxhZ3MgfD0gTVNNX01PREVfRkxBR19TRUFNTEVTU19EWU5BTUlDX0ZQUzsKLQlpZiAoZHNpX21v ZGUtPmRzaV9tb2RlX2ZsYWdzICYgRFNJX01PREVfRkxBR19WQkxBTktfUFJFX01PREVTRVQpCi0J CWRybV9tb2RlLT5wcml2YXRlX2ZsYWdzIHw9IE1TTV9NT0RFX0ZMQUdfVkJMQU5LX1BSRV9NT0RF U0VUOwotCWlmIChkc2lfbW9kZS0+ZHNpX21vZGVfZmxhZ3MgJiBEU0lfTU9ERV9GTEFHX0RNUykK LQkJZHJtX21vZGUtPnByaXZhdGVfZmxhZ3MgfD0gTVNNX01PREVfRkxBR19TRUFNTEVTU19ETVM7 Ci0JaWYgKGRzaV9tb2RlLT5kc2lfbW9kZV9mbGFncyAmIERTSV9NT0RFX0ZMQUdfVlJSKQotCQlk cm1fbW9kZS0+cHJpdmF0ZV9mbGFncyB8PSBNU01fTU9ERV9GTEFHX1NFQU1MRVNTX1ZSUjsKLQot CWRybV9tb2RlX3NldF9uYW1lKGRybV9tb2RlKTsKLX0KLQotc3RhdGljIGludCBkc2lfYnJpZGdl X2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQotewotCXN0cnVjdCBkc2lfYnJpZGdl ICpjX2JyaWRnZSA9IHRvX2RzaV9icmlkZ2UoYnJpZGdlKTsKLQotCWlmICghYnJpZGdlKSB7Ci0J CXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlw cl9kZWJ1ZygiWyVkXSBhdHRhY2hlZFxuIiwgY19icmlkZ2UtPmlkKTsKLQotCXJldHVybiAwOwot Ci19Ci0KLXN0YXRpYyB2b2lkIGRzaV9icmlkZ2VfcHJlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRn ZSAqYnJpZGdlKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9icmlkZ2UgKmNfYnJpZGdl ID0gdG9fZHNpX2JyaWRnZShicmlkZ2UpOwotCi0JaWYgKCFicmlkZ2UpIHsKLQkJcHJfZXJyKCJJ bnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBCeSB0aGlzIHBvaW50IG1v ZGUgc2hvdWxkIGhhdmUgYmVlbiB2YWxpZGF0ZWQgdGhyb3VnaCBtb2RlX2ZpeHVwICovCi0JcmMg PSBkc2lfZGlzcGxheV9zZXRfbW9kZShjX2JyaWRnZS0+ZGlzcGxheSwKLQkJCSYoY19icmlkZ2Ut PmRzaV9tb2RlKSwgMHgwKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJWRdIGZhaWxlZCB0byBw ZXJmb3JtIGEgbW9kZSBzZXQsIHJjPSVkXG4iLAotCQkgICAgICAgY19icmlkZ2UtPmlkLCByYyk7 Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoY19icmlkZ2UtPmRzaV9tb2RlLmRzaV9tb2RlX2ZsYWdz ICYKLQkJKERTSV9NT0RFX0ZMQUdfU0VBTUxFU1MgfCBEU0lfTU9ERV9GTEFHX1ZSUikpIHsKLQkJ cHJfZGVidWcoIlslZF0gc2VhbWxlc3MgcHJlLWVuYWJsZVxuIiwgY19icmlkZ2UtPmlkKTsKLQkJ cmV0dXJuOwotCX0KLQotCURQVV9BVFJBQ0VfQkVHSU4oImRzaV9icmlkZ2VfcHJlX2VuYWJsZSIp OwotCXJjID0gZHNpX2Rpc3BsYXlfcHJlcGFyZShjX2JyaWRnZS0+ZGlzcGxheSk7Ci0JaWYgKHJj KSB7Ci0JCXByX2VycigiWyVkXSBEU0kgZGlzcGxheSBwcmVwYXJlIGZhaWxlZCwgcmM9JWRcbiIs Ci0JCSAgICAgICBjX2JyaWRnZS0+aWQsIHJjKTsKLQkJRFBVX0FUUkFDRV9FTkQoImRzaV9icmlk Z2VfcHJlX2VuYWJsZSIpOwotCQlyZXR1cm47Ci0JfQotCi0JRFBVX0FUUkFDRV9CRUdJTigiZHNp X2Rpc3BsYXlfZW5hYmxlIik7Ci0JcmMgPSBkc2lfZGlzcGxheV9lbmFibGUoY19icmlkZ2UtPmRp c3BsYXkpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslZF0gRFNJIGRpc3BsYXkgZW5hYmxlIGZh aWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBjX2JyaWRnZS0+aWQsIHJjKTsKLQkJKHZvaWQpZHNp X2Rpc3BsYXlfdW5wcmVwYXJlKGNfYnJpZGdlLT5kaXNwbGF5KTsKLQl9Ci0JRFBVX0FUUkFDRV9F TkQoImRzaV9kaXNwbGF5X2VuYWJsZSIpOwotCURQVV9BVFJBQ0VfRU5EKCJkc2lfYnJpZGdlX3By ZV9lbmFibGUiKTsKLX0KLQotc3RhdGljIHZvaWQgZHNpX2JyaWRnZV9lbmFibGUoc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfYnJpZGdlICpj X2JyaWRnZSA9IHRvX2RzaV9icmlkZ2UoYnJpZGdlKTsKLQotCWlmICghYnJpZGdlKSB7Ci0JCXBy X2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGNfYnJpZGdl LT5kc2lfbW9kZS5kc2lfbW9kZV9mbGFncyAmCi0JCQkoRFNJX01PREVfRkxBR19TRUFNTEVTUyB8 IERTSV9NT0RFX0ZMQUdfVlJSKSkgewotCQlwcl9kZWJ1ZygiWyVkXSBzZWFtbGVzcyBlbmFibGVc biIsIGNfYnJpZGdlLT5pZCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X3Bv c3RfZW5hYmxlKGNfYnJpZGdlLT5kaXNwbGF5KTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVkXSBE U0kgZGlzcGxheSBwb3N0IGVuYWJsZWQgZmFpbGVkLCByYz0lZFxuIiwKLQkJICAgICAgIGNfYnJp ZGdlLT5pZCwgcmMpOwotfQotCi1zdGF0aWMgdm9pZCBkc2lfYnJpZGdlX2Rpc2FibGUoc3RydWN0 IGRybV9icmlkZ2UgKmJyaWRnZSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfYnJpZGdl ICpjX2JyaWRnZSA9IHRvX2RzaV9icmlkZ2UoYnJpZGdlKTsKLQotCWlmICghYnJpZGdlKSB7Ci0J CXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JcmMgPSBkc2lf ZGlzcGxheV9wcmVfZGlzYWJsZShjX2JyaWRnZS0+ZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXBy X2VycigiWyVkXSBEU0kgZGlzcGxheSBwcmUgZGlzYWJsZSBmYWlsZWQsIHJjPSVkXG4iLAotCQkg ICAgICAgY19icmlkZ2UtPmlkLCByYyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkc2lfYnJpZGdl X3Bvc3RfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQotewotCWludCByYyA9IDA7 Ci0Jc3RydWN0IGRzaV9icmlkZ2UgKmNfYnJpZGdlID0gdG9fZHNpX2JyaWRnZShicmlkZ2UpOwot Ci0JaWYgKCFicmlkZ2UpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVy bjsKLQl9Ci0KLQlEUFVfQVRSQUNFX0JFR0lOKCJkc2lfYnJpZGdlX3Bvc3RfZGlzYWJsZSIpOwot CURQVV9BVFJBQ0VfQkVHSU4oImRzaV9kaXNwbGF5X2Rpc2FibGUiKTsKLQlyYyA9IGRzaV9kaXNw bGF5X2Rpc2FibGUoY19icmlkZ2UtPmRpc3BsYXkpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlsl ZF0gRFNJIGRpc3BsYXkgZGlzYWJsZSBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAgICAgY19icmlk Z2UtPmlkLCByYyk7Ci0JCURQVV9BVFJBQ0VfRU5EKCJkc2lfZGlzcGxheV9kaXNhYmxlIik7Ci0J CXJldHVybjsKLQl9Ci0JRFBVX0FUUkFDRV9FTkQoImRzaV9kaXNwbGF5X2Rpc2FibGUiKTsKLQot CXJjID0gZHNpX2Rpc3BsYXlfdW5wcmVwYXJlKGNfYnJpZGdlLT5kaXNwbGF5KTsKLQlpZiAocmMp IHsKLQkJcHJfZXJyKCJbJWRdIERTSSBkaXNwbGF5IHVucHJlcGFyZSBmYWlsZWQsIHJjPSVkXG4i LAotCQkgICAgICAgY19icmlkZ2UtPmlkLCByYyk7Ci0JCURQVV9BVFJBQ0VfRU5EKCJkc2lfYnJp ZGdlX3Bvc3RfZGlzYWJsZSIpOwotCQlyZXR1cm47Ci0JfQotCURQVV9BVFJBQ0VfRU5EKCJkc2lf YnJpZGdlX3Bvc3RfZGlzYWJsZSIpOwotfQotCi1zdGF0aWMgdm9pZCBkc2lfYnJpZGdlX21vZGVf c2V0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCi0JCQkJc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGUsCi0JCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCi17 Ci0Jc3RydWN0IGRzaV9icmlkZ2UgKmNfYnJpZGdlID0gdG9fZHNpX2JyaWRnZShicmlkZ2UpOwot Ci0JaWYgKCFicmlkZ2UgfHwgIW1vZGUgfHwgIWFkanVzdGVkX21vZGUpIHsKLQkJcHJfZXJyKCJJ bnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQltZW1zZXQoJihjX2JyaWRnZS0+ ZHNpX21vZGUpLCAweDAsIHNpemVvZihzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSkpOwotCWNvbnZl cnRfdG9fZHNpX21vZGUoYWRqdXN0ZWRfbW9kZSwgJihjX2JyaWRnZS0+ZHNpX21vZGUpKTsKLX0K LQotc3RhdGljIGJvb2wgZHNpX2JyaWRnZV9tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fYnJpZGdlICpi cmlkZ2UsCi0JCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKLQkJCQkg IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQotewotCWludCByYyA9IDA7 Ci0Jc3RydWN0IGRzaV9icmlkZ2UgKmNfYnJpZGdlID0gdG9fZHNpX2JyaWRnZShicmlkZ2UpOwot CXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlIGRzaV9tb2RlLCBjdXJfZHNpX21vZGU7Ci0Jc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgY3VyX21vZGU7Ci0KLQlpZiAoIWJyaWRnZSB8fCAhbW9kZSB8fCAh YWRqdXN0ZWRfbW9kZSkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJu IGZhbHNlOwotCX0KLQotCWNvbnZlcnRfdG9fZHNpX21vZGUobW9kZSwgJmRzaV9tb2RlKTsKLQot CXJjID0gZHNpX2Rpc3BsYXlfdmFsaWRhdGVfbW9kZShjX2JyaWRnZS0+ZGlzcGxheSwgJmRzaV9t b2RlLAotCQkJRFNJX1ZBTElEQVRFX0ZMQUdfQUxMT1dfQURKVVNUKTsKLQlpZiAocmMpIHsKLQkJ cHJfZXJyKCJbJWRdIG1vZGUgaXMgbm90IHZhbGlkLCByYz0lZFxuIiwgY19icmlkZ2UtPmlkLCBy Yyk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoYnJpZGdlLT5lbmNvZGVyICYmIGJyaWRn ZS0+ZW5jb2Rlci0+Y3J0YykgewotCi0JCWNvbnZlcnRfdG9fZHNpX21vZGUoJmJyaWRnZS0+ZW5j b2Rlci0+Y3J0Yy0+bW9kZSwKLQkJCQkJCQkmY3VyX2RzaV9tb2RlKTsKLQkJcmMgPSBkc2lfZGlz cGxheV92YWxpZGF0ZV9tb2RlX3ZycihjX2JyaWRnZS0+ZGlzcGxheSwKLQkJCQkJJmN1cl9kc2lf bW9kZSwgJmRzaV9tb2RlKTsKLQkJaWYgKHJjKQotCQkJcHJfZGVidWcoIlslc10gdnJyIG1vZGUg bWlzbWF0Y2ggZmFpbHVyZSByYz0lZFxuIiwKLQkJCQljX2JyaWRnZS0+ZGlzcGxheS0+bmFtZSwg cmMpOwotCi0JCWN1cl9tb2RlID0gYnJpZGdlLT5lbmNvZGVyLT5jcnRjLT5tb2RlOwotCi0JCWlm ICghZHJtX21vZGVfZXF1YWwoJmN1cl9tb2RlLCBhZGp1c3RlZF9tb2RlKSAmJgotCQkJKCEoZHNp X21vZGUuZHNpX21vZGVfZmxhZ3MgJgotCQkJCURTSV9NT0RFX0ZMQUdfVlJSKSkpCi0JCQlkc2lf bW9kZS5kc2lfbW9kZV9mbGFncyB8PSBEU0lfTU9ERV9GTEFHX0RNUzsKLQl9Ci0KLQljb252ZXJ0 X3RvX2RybV9tb2RlKCZkc2lfbW9kZSwgYWRqdXN0ZWRfbW9kZSk7Ci0KLQlyZXR1cm4gdHJ1ZTsK LX0KLQotaW50IGRzaV9jb25uX2dldF9tb2RlX2luZm8oY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKmRybV9tb2RlLAotCXN0cnVjdCBtc21fbW9kZV9pbmZvICptb2RlX2luZm8sCi0JdTMy IG1heF9taXhlcl93aWR0aCkKLXsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSBkc2lfbW9kZTsK LQlzdHJ1Y3QgZHNpX21vZGVfaW5mbyAqdGltaW5nOwotCi0JaWYgKCFkcm1fbW9kZSB8fCAhbW9k ZV9pbmZvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNvbnZlcnRfdG9fZHNpX21vZGUoZHJtX21v ZGUsICZkc2lfbW9kZSk7Ci0KLQlpZiAoIWRzaV9tb2RlLnByaXZfaW5mbykKLQkJcmV0dXJuIC1F SU5WQUw7Ci0KLQltZW1zZXQobW9kZV9pbmZvLCAwLCBzaXplb2YoKm1vZGVfaW5mbykpOwotCi0J dGltaW5nID0gJmRzaV9tb2RlLnRpbWluZzsKLQltb2RlX2luZm8tPmZyYW1lX3JhdGUgPSBkc2lf bW9kZS50aW1pbmcucmVmcmVzaF9yYXRlOwotCW1vZGVfaW5mby0+dnRvdGFsID0gRFNJX1ZfVE9U QUwodGltaW5nKTsKLQltb2RlX2luZm8tPnByZWZpbGxfbGluZXMgPSBkc2lfbW9kZS5wcml2X2lu Zm8tPnBhbmVsX3ByZWZpbGxfbGluZXM7Ci0JbW9kZV9pbmZvLT5qaXR0ZXJfbnVtZXIgPSBkc2lf bW9kZS5wcml2X2luZm8tPnBhbmVsX2ppdHRlcl9udW1lcjsKLQltb2RlX2luZm8tPmppdHRlcl9k ZW5vbSA9IGRzaV9tb2RlLnByaXZfaW5mby0+cGFuZWxfaml0dGVyX2Rlbm9tOwotCi0JbWVtY3B5 KCZtb2RlX2luZm8tPnRvcG9sb2d5LCAmZHNpX21vZGUucHJpdl9pbmZvLT50b3BvbG9neSwKLQkJ CXNpemVvZihzdHJ1Y3QgbXNtX2Rpc3BsYXlfdG9wb2xvZ3kpKTsKLQotCXJldHVybiAwOwotfQot Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3MgZHNpX2JyaWRnZV9vcHMgPSB7 Ci0JLmF0dGFjaCAgICAgICA9IGRzaV9icmlkZ2VfYXR0YWNoLAotCS5tb2RlX2ZpeHVwICAgPSBk c2lfYnJpZGdlX21vZGVfZml4dXAsCi0JLnByZV9lbmFibGUgICA9IGRzaV9icmlkZ2VfcHJlX2Vu YWJsZSwKLQkuZW5hYmxlICAgICAgID0gZHNpX2JyaWRnZV9lbmFibGUsCi0JLmRpc2FibGUgICAg ICA9IGRzaV9icmlkZ2VfZGlzYWJsZSwKLQkucG9zdF9kaXNhYmxlID0gZHNpX2JyaWRnZV9wb3N0 X2Rpc2FibGUsCi0JLm1vZGVfc2V0ICAgICA9IGRzaV9icmlkZ2VfbW9kZV9zZXQsCi19OwotCi1p bnQgZHNpX2Nvbm5fcG9zdF9pbml0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0J CXZvaWQgKmluZm8sCi0JCXZvaWQgKmRpc3BsYXkpCi17Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpk c2lfZGlzcGxheSA9IGRpc3BsYXk7Ci0Jc3RydWN0IGRzaV9wYW5lbCAqcGFuZWw7Ci0KLQlpZiAo IWluZm8gfHwgIWRzaV9kaXNwbGF5KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRwdV9rbXNfaW5m b19hZGRfa2V5c3RyKGluZm8sCi0JCSJkaXNwbGF5IHR5cGUiLCBkc2lfZGlzcGxheS0+ZGlzcGxh eV90eXBlKTsKLQotCXN3aXRjaCAoZHNpX2Rpc3BsYXktPnR5cGUpIHsKLQljYXNlIERTSV9ESVNQ TEFZX1NJTkdMRToKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywgImRpc3BsYXkgY29u ZmlnIiwKLQkJCQkJInNpbmdsZSBkaXNwbGF5Iik7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX0RJU1BM QVlfRVhUX0JSSURHRToKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywgImRpc3BsYXkg Y29uZmlnIiwgImV4dCBicmlkZ2UiKTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfRElTUExBWV9TUExJ VDoKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywgImRpc3BsYXkgY29uZmlnIiwKLQkJ CQkJInNwbGl0IGRpc3BsYXkiKTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfRElTUExBWV9TUExJVF9F WFRfQlJJREdFOgotCQlkcHVfa21zX2luZm9fYWRkX2tleXN0cihpbmZvLCAiZGlzcGxheSBjb25m aWciLAotCQkJCQkic3BsaXQgZXh0IGJyaWRnZSIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlw cl9kZWJ1ZygiaW52YWxpZCBkaXNwbGF5IHR5cGU6JWRcbiIsIGRzaV9kaXNwbGF5LT50eXBlKTsK LQkJYnJlYWs7Ci0JfQotCi0JaWYgKCFkc2lfZGlzcGxheS0+cGFuZWwpIHsKLQkJcHJfZGVidWco ImludmFsaWQgcGFuZWwgZGF0YVxuIik7Ci0JCWdvdG8gZW5kOwotCX0KLQotCXBhbmVsID0gZHNp X2Rpc3BsYXktPnBhbmVsOwotCWRwdV9rbXNfaW5mb19hZGRfa2V5c3RyKGluZm8sICJwYW5lbCBu YW1lIiwgcGFuZWwtPm5hbWUpOwotCi0Jc3dpdGNoIChwYW5lbC0+cGFuZWxfbW9kZSkgewotCWNh c2UgRFNJX09QX1ZJREVPX01PREU6Ci0JCWRwdV9rbXNfaW5mb19hZGRfa2V5c3RyKGluZm8sICJw YW5lbCBtb2RlIiwgInZpZGVvIik7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX09QX0NNRF9NT0RFOgot CQlkcHVfa21zX2luZm9fYWRkX2tleXN0cihpbmZvLCAicGFuZWwgbW9kZSIsICJjb21tYW5kIik7 Ci0JCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJtZHBfdHJhbnNmZXJfdGltZV91cyIs Ci0JCQkJcGFuZWwtPmNtZF9jb25maWcubWRwX3RyYW5zZmVyX3RpbWVfdXMpOwotCQlicmVhazsK LQlkZWZhdWx0OgotCQlwcl9kZWJ1ZygiaW52YWxpZCBwYW5lbCB0eXBlOiVkXG4iLCBwYW5lbC0+ cGFuZWxfbW9kZSk7Ci0JCWJyZWFrOwotCX0KLQlkcHVfa21zX2luZm9fYWRkX2tleXN0cihpbmZv LCAiZGZwcyBzdXBwb3J0IiwKLQkJCXBhbmVsLT5kZnBzX2NhcHMuZGZwc19zdXBwb3J0ID8gInRy dWUiIDogImZhbHNlIik7Ci0KLQlpZiAocGFuZWwtPmRmcHNfY2Fwcy5kZnBzX3N1cHBvcnQpIHsK LQkJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1pbl9mcHMiLAotCQkJcGFuZWwtPmRm cHNfY2Fwcy5taW5fcmVmcmVzaF9yYXRlKTsKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5m bywgIm1heF9mcHMiLAotCQkJcGFuZWwtPmRmcHNfY2Fwcy5tYXhfcmVmcmVzaF9yYXRlKTsKLQl9 Ci0KLQlzd2l0Y2ggKHBhbmVsLT5waHlfcHJvcHMucm90YXRpb24pIHsKLQljYXNlIERTSV9QQU5F TF9ST1RBVEVfTk9ORToKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywgInBhbmVsIG9y aWVudGF0aW9uIiwgIm5vbmUiKTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfUEFORUxfUk9UQVRFX0hf RkxJUDoKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywgInBhbmVsIG9yaWVudGF0aW9u IiwgImhvcnogZmxpcCIpOwotCQlicmVhazsKLQljYXNlIERTSV9QQU5FTF9ST1RBVEVfVl9GTElQ OgotCQlkcHVfa21zX2luZm9fYWRkX2tleXN0cihpbmZvLCAicGFuZWwgb3JpZW50YXRpb24iLCAi dmVydCBmbGlwIik7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX1BBTkVMX1JPVEFURV9IVl9GTElQOgot CQlkcHVfa21zX2luZm9fYWRkX2tleXN0cihpbmZvLCAicGFuZWwgb3JpZW50YXRpb24iLAotCQkJ CQkJCSJob3J6ICYgdmVydCBmbGlwIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByX2RlYnVn KCJpbnZhbGlkIHBhbmVsIHJvdGF0aW9uOiVkXG4iLAotCQkJCQkJcGFuZWwtPnBoeV9wcm9wcy5y b3RhdGlvbik7Ci0JCWJyZWFrOwotCX0KLQotCXN3aXRjaCAocGFuZWwtPmJsX2NvbmZpZy50eXBl KSB7Ci0JY2FzZSBEU0lfQkFDS0xJR0hUX1BXTToKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIo aW5mbywgImJhY2tsaWdodCB0eXBlIiwgInB3bSIpOwotCQlicmVhazsKLQljYXNlIERTSV9CQUNL TElHSFRfV0xFRDoKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywgImJhY2tsaWdodCB0 eXBlIiwgIndsZWQiKTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQkFDS0xJR0hUX0RDUzoKLQkJZHB1 X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywgImJhY2tsaWdodCB0eXBlIiwgImRjcyIpOwotCQli cmVhazsKLQlkZWZhdWx0OgotCQlwcl9kZWJ1ZygiaW52YWxpZCBwYW5lbCBiYWNrbGlnaHQgdHlw ZTolZFxuIiwKLQkJCQkJCXBhbmVsLT5ibF9jb25maWcudHlwZSk7Ci0JCWJyZWFrOwotCX0KLQot ZW5kOgotCXJldHVybiAwOwotfQotCi1lbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIGRzaV9jb25u X2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubiwKLQkJYm9vbCBmb3JjZSwKLQkJdm9p ZCAqZGlzcGxheSkKLXsKLQllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cyA9IGNvbm5l Y3Rvcl9zdGF0dXNfdW5rbm93bjsKLQlzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyBpbmZvOwotCWlu dCByYzsKLQotCWlmICghY29ubiB8fCAhZGlzcGxheSkKLQkJcmV0dXJuIHN0YXR1czsKLQotCS8q IGdldCBkaXNwbGF5IGRzaV9pbmZvICovCi0JbWVtc2V0KCZpbmZvLCAweDAsIHNpemVvZihpbmZv KSk7Ci0JcmMgPSBkc2lfZGlzcGxheV9nZXRfaW5mbygmaW5mbywgZGlzcGxheSk7Ci0JaWYgKHJj KSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIGdldCBkaXNwbGF5IGluZm8sIHJjPSVkXG4iLCByYyk7 Ci0JCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKLQl9Ci0KLQlpZiAoaW5m by5jYXBhYmlsaXRpZXMgJiBNU01fRElTUExBWV9DQVBfSE9UX1BMVUcpCi0JCXN0YXR1cyA9IChp bmZvLmlzX2Nvbm5lY3RlZCA/IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkIDoKLQkJCQkJICAg ICAgY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQpOwotCWVsc2UKLQkJc3RhdHVzID0gY29u bmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Ci0KLQljb25uLT5kaXNwbGF5X2luZm8ud2lkdGhfbW0g PSBpbmZvLndpZHRoX21tOwotCWNvbm4tPmRpc3BsYXlfaW5mby5oZWlnaHRfbW0gPSBpbmZvLmhl aWdodF9tbTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXZvaWQgZHNpX2Nvbm5lY3Rvcl9wdXRf bW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQl2b2lkICpkaXNwbGF5KQot ewotCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fbW9kZTsKLQlzdHJ1Y3QgZHNpX2Rpc3Bs YXlfbW9kZSBkc2lfbW9kZTsKLQotCWlmICghY29ubmVjdG9yIHx8ICFkaXNwbGF5KQotCQlyZXR1 cm47Ci0KLQkgbGlzdF9mb3JfZWFjaF9lbnRyeShkcm1fbW9kZSwgJmNvbm5lY3Rvci0+bW9kZXMs IGhlYWQpIHsKLQkJY29udmVydF90b19kc2lfbW9kZShkcm1fbW9kZSwgJmRzaV9tb2RlKTsKLQkJ ZHNpX2Rpc3BsYXlfcHV0X21vZGUoZGlzcGxheSwgJmRzaV9tb2RlKTsKLQl9Ci19Ci0KLWludCBk c2lfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAot CQl2b2lkICpkaXNwbGF5KQotewotCXUzMiBjb3VudCA9IDA7Ci0JdTMyIHNpemUgPSAwOwotCXN0 cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlcyA9IE5VTEw7Ci0Jc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgZHJtX21vZGU7Ci0JaW50IHJjLCBpOwotCi0JaWYgKGRwdV9jb25uZWN0b3JfZ2V0X3Bh bmVsKGNvbm5lY3RvcikpIHsKLQkJLyoKLQkJICogVE9ETzogSWYgZHJtX3BhbmVsIGlzIGF0dGFj aGVkLCBxdWVyeSBtb2RlcyBmcm9tIHRoZSBwYW5lbC4KLQkJICogVGhpcyBpcyBjb21wbGljYXRl ZCBpbiBzcGxpdCBkc2kgY2FzZXMgYmVjYXVzZSBwYW5lbCBpcyBub3QKLQkJICogYXR0YWNoZWQg dG8gYm90aCBjb25uZWN0b3JzLgotCQkgKi8KLQkJZ290byBlbmQ7Ci0JfQotCXJjID0gZHNpX2Rp c3BsYXlfZ2V0X21vZGVfY291bnQoZGlzcGxheSwgJmNvdW50KTsKLQlpZiAocmMpIHsKLQkJcHJf ZXJyKCJmYWlsZWQgdG8gZ2V0IG51bSBvZiBtb2RlcywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBl cnJvcjsKLQl9Ci0KLQlzaXplID0gY291bnQgKiBzaXplb2YoKm1vZGVzKTsKLQltb2RlcyA9IGt6 YWxsb2Moc2l6ZSwgIEdGUF9LRVJORUwpOwotCWlmICghbW9kZXMpIHsKLQkJY291bnQgPSAwOwot CQlnb3RvIGVuZDsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2dldF9tb2RlcyhkaXNwbGF5LCBt b2Rlcyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIGdldCBtb2RlcywgcmM9JWRc biIsIHJjKTsKLQkJY291bnQgPSAwOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWZvciAoaSA9IDA7 IGkgPCBjb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptOwotCi0JCW1l bXNldCgmZHJtX21vZGUsIDB4MCwgc2l6ZW9mKGRybV9tb2RlKSk7Ci0JCWNvbnZlcnRfdG9fZHJt X21vZGUoJm1vZGVzW2ldLCAmZHJtX21vZGUpOwotCQltID0gZHJtX21vZGVfZHVwbGljYXRlKGNv bm5lY3Rvci0+ZGV2LCAmZHJtX21vZGUpOwotCQlpZiAoIW0pIHsKLQkJCXByX2VycigiZmFpbGVk IHRvIGFkZCBtb2RlICV1eCV1XG4iLAotCQkJICAgICAgIGRybV9tb2RlLmhkaXNwbGF5LAotCQkJ ICAgICAgIGRybV9tb2RlLnZkaXNwbGF5KTsKLQkJCWNvdW50ID0gLUVOT01FTTsKLQkJCWdvdG8g ZXJyb3I7Ci0JCX0KLQkJbS0+d2lkdGhfbW0gPSBjb25uZWN0b3ItPmRpc3BsYXlfaW5mby53aWR0 aF9tbTsKLQkJbS0+aGVpZ2h0X21tID0gY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uaGVpZ2h0X21t OwotCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbSk7Ci0JfQotZXJyb3I6Ci0Ja2Zy ZWUobW9kZXMpOwotZW5kOgotCXByX2RlYnVnKCJNT0RFIENPVU5UID0lZFxuXG4iLCBjb3VudCk7 Ci0JcmV0dXJuIGNvdW50OwotfQotCi1lbnVtIGRybV9tb2RlX3N0YXR1cyBkc2lfY29ubl9tb2Rl X3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCXN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICptb2RlLAotCQl2b2lkICpkaXNwbGF5KQotewotCXN0cnVjdCBkc2lfZGlzcGxh eV9tb2RlIGRzaV9tb2RlOwotCWludCByYzsKLQotCWlmICghY29ubmVjdG9yIHx8ICFtb2RlKSB7 Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gTU9ERV9FUlJPUjsKLQl9 Ci0KLQljb252ZXJ0X3RvX2RzaV9tb2RlKG1vZGUsICZkc2lfbW9kZSk7Ci0KLQlyYyA9IGRzaV9k aXNwbGF5X3ZhbGlkYXRlX21vZGUoZGlzcGxheSwgJmRzaV9tb2RlLAotCQkJRFNJX1ZBTElEQVRF X0ZMQUdfQUxMT1dfQURKVVNUKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJtb2RlIG5vdCBzdXBw b3J0ZWQsIHJjPSVkXG4iLCByYyk7Ci0JCXJldHVybiBNT0RFX0JBRDsKLQl9Ci0KLQlyZXR1cm4g TU9ERV9PSzsKLX0KLQotaW50IGRzaV9jb25uX3ByZV9raWNrb2ZmKHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IsCi0JCXZvaWQgKmRpc3BsYXkpCi17Ci0JaWYgKCFjb25uZWN0b3IgfHwg IWRpc3BsYXkpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlO VkFMOwotCX0KLQotCXJldHVybiBkc2lfZGlzcGxheV9wcmVfa2lja29mZihkaXNwbGF5KTsKLX0K LQotdm9pZCBkc2lfY29ubl9lbmFibGVfZXZlbnQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwKLQkJdWludDMyX3QgZXZlbnRfaWR4LCBib29sIGVuYWJsZSwgdm9pZCAqZGlzcGxheSkK LXsKLQlzdHJ1Y3QgZHNpX2V2ZW50X2NiX2luZm8gZXZlbnRfaW5mbzsKLQotCW1lbXNldCgmZXZl bnRfaW5mbywgMCwgc2l6ZW9mKGV2ZW50X2luZm8pKTsKLQotCWV2ZW50X2luZm8uZXZlbnRfY2Ig PSBkcHVfY29ubmVjdG9yX3RyaWdnZXJfZXZlbnQ7Ci0JZXZlbnRfaW5mby5ldmVudF91c3JfcHRy ID0gY29ubmVjdG9yOwotCi0JZHNpX2Rpc3BsYXlfZW5hYmxlX2V2ZW50KGRpc3BsYXksIGV2ZW50 X2lkeCwgJmV2ZW50X2luZm8sIGVuYWJsZSk7Ci19Ci0KLWludCBkc2lfY29ubl9wb3N0X2tpY2tv ZmYoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXI7Ci0Jc3RydWN0IGRzaV9icmlkZ2UgKmNfYnJpZGdlOwotCXN0cnVjdCBkc2lf ZGlzcGxheV9tb2RlIGFkal9tb2RlOwotCXN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheTsKLQlz dHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqbV9jdHJsLCAqY3RybDsKLQlpbnQgaSwgcmMgPSAwOwot Ci0JaWYgKCFjb25uZWN0b3IgfHwgIWNvbm5lY3Rvci0+c3RhdGUtPmJlc3RfZW5jb2RlcikKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0KLQllbmNvZGVyID0gY29ubmVjdG9yLT5zdGF0ZS0+YmVzdF9lbmNv ZGVyOwotCWNfYnJpZGdlID0gdG9fZHNpX2JyaWRnZShlbmNvZGVyLT5icmlkZ2UpOwotCWFkal9t b2RlID0gY19icmlkZ2UtPmRzaV9tb2RlOwotCWRpc3BsYXkgPSBjX2JyaWRnZS0+ZGlzcGxheTsK LQotCWlmIChhZGpfbW9kZS5kc2lfbW9kZV9mbGFncyAmIERTSV9NT0RFX0ZMQUdfVlJSKSB7Ci0J CW1fY3RybCA9ICZkaXNwbGF5LT5jdHJsW2Rpc3BsYXktPmNsa19tYXN0ZXJfaWR4XTsKLQkJcmMg PSBkc2lfY3RybF90aW1pbmdfZGJfdXBkYXRlKG1fY3RybC0+Y3RybCwgZmFsc2UpOwotCQlpZiAo cmMpIHsKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGZwcyB1cGRhdGUgIHJjPSVkXG4iLAot CQkJCWRpc3BsYXktPm5hbWUsIHJjKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJLyog VXBkYXRlIHRoZSByZXN0IG9mIHRoZSBjb250cm9sbGVycyAqLwotCQlmb3IgKGkgPSAwOyBpIDwg ZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07 Ci0JCQlpZiAoIWN0cmwtPmN0cmwgfHwgKGN0cmwgPT0gbV9jdHJsKSkKLQkJCQljb250aW51ZTsK LQotCQkJcmMgPSBkc2lfY3RybF90aW1pbmdfZGJfdXBkYXRlKGN0cmwtPmN0cmwsIGZhbHNlKTsK LQkJCWlmIChyYykgewotCQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGZwcyB1cGRhdGUgcmM9 JWRcbiIsCi0JCQkJCWRpc3BsYXktPm5hbWUsICByYyk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0J CQl9Ci0JCX0KLQotCQljX2JyaWRnZS0+ZHNpX21vZGUuZHNpX21vZGVfZmxhZ3MgJj0gfkRTSV9N T0RFX0ZMQUdfVlJSOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdHJ1Y3QgZHNpX2JyaWRnZSAq ZHNpX2RybV9icmlkZ2VfaW5pdChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCQkJICAg ICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJICAgICAgIHN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2RlcikKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfYnJpZGdlICpicmlkZ2U7 Ci0KLQlicmlkZ2UgPSBremFsbG9jKHNpemVvZigqYnJpZGdlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYg KCFicmlkZ2UpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWJyaWRn ZS0+ZGlzcGxheSA9IGRpc3BsYXk7Ci0JYnJpZGdlLT5iYXNlLmZ1bmNzID0gJmRzaV9icmlkZ2Vf b3BzOwotCWJyaWRnZS0+YmFzZS5lbmNvZGVyID0gZW5jb2RlcjsKLQotCXJjID0gZHJtX2JyaWRn ZV9hdHRhY2goZW5jb2RlciwgJmJyaWRnZS0+YmFzZSwgTlVMTCk7Ci0JaWYgKHJjKSB7Ci0JCXBy X2VycigiZmFpbGVkIHRvIGF0dGFjaCBicmlkZ2UsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJy b3JfZnJlZV9icmlkZ2U7Ci0JfQotCi0JZW5jb2Rlci0+YnJpZGdlID0gJmJyaWRnZS0+YmFzZTsK LQlyZXR1cm4gYnJpZGdlOwotZXJyb3JfZnJlZV9icmlkZ2U6Ci0Ja2ZyZWUoYnJpZGdlKTsKLWVy cm9yOgotCXJldHVybiBFUlJfUFRSKHJjKTsKLX0KLQotdm9pZCBkc2lfZHJtX2JyaWRnZV9jbGVh bnVwKHN0cnVjdCBkc2lfYnJpZGdlICpicmlkZ2UpCi17Ci0JaWYgKGJyaWRnZSAmJiBicmlkZ2Ut PmJhc2UuZW5jb2RlcikKLQkJYnJpZGdlLT5iYXNlLmVuY29kZXItPmJyaWRnZSA9IE5VTEw7Ci0K LQlrZnJlZShicmlkZ2UpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kt c3RhZ2luZy9kc2lfZHJtLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9k cm0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhkZTMzYy4uMDAwMDAwMAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kcm0uaAorKysgL2Rldi9udWxs CkBAIC0xLDEyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBM aW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK LSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICov Ci0KLSNpZm5kZWYgX0RTSV9EUk1fSF8KLSNkZWZpbmUgX0RTSV9EUk1fSF8KLQotI2luY2x1ZGUg PGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8ZHJtL2RybVAuaD4KLSNpbmNsdWRlIDxkcm0vZHJt X2NydGMuaD4KLSNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Ci0KLSNpbmNsdWRlICJt c21fZHJ2LmgiCi0KLSNpbmNsdWRlICJkc2lfZGlzcGxheS5oIgotCi1zdHJ1Y3QgZHNpX2JyaWRn ZSB7Ci0Jc3RydWN0IGRybV9icmlkZ2UgYmFzZTsKLQl1MzIgaWQ7Ci0KLQlzdHJ1Y3QgZHNpX2Rp c3BsYXkgKmRpc3BsYXk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgZHNpX21vZGU7Ci19Owot Ci0vKioKLSAqIGRzaV9jb25uX3Bvc3RfaW5pdCAtIGNhbGxiYWNrIHRvIHBlcmZvcm0gYWRkaXRp b25hbCBpbml0aWFsaXphdGlvbiBzdGVwcwotICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0g Y29ubmVjdG9yIHN0cnVjdHVyZQotICogQGluZm86IFBvaW50ZXIgdG8gZHB1IGNvbm5lY3RvciBp bmZvIHN0cnVjdHVyZQotICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IGhh bmRsZQotICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0gKi8KLWludCBkc2lfY29ubl9wb3N0 X2luaXQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJdm9pZCAqaW5mbywKLQkJ dm9pZCAqZGlzcGxheSk7Ci0KLS8qKgotICogZHNpX2Nvbm5fZGV0ZWN0IC0gY2FsbGJhY2sgdG8g ZGV0ZXJtaW5lIGlmIGNvbm5lY3RvciBpcyBjb25uZWN0ZWQKLSAqIEBjb25uZWN0b3I6IFBvaW50 ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLSAqIEBmb3JjZTogRm9yY2UgZGV0ZWN0IHNl dHRpbmcgZnJvbSBkcm0gZnJhbWV3b3JrCi0gKiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRl IGRpc3BsYXkgaGFuZGxlCi0gKiBSZXR1cm5zOiBDb25uZWN0b3IgJ2lzIGNvbm5lY3RlZCcgc3Rh dHVzCi0gKi8KLWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgZHNpX2Nvbm5fZGV0ZWN0KHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uLAotCQlib29sIGZvcmNlLAotCQl2b2lkICpkaXNwbGF5KTsK LQotLyoqCi0gKiBkc2lfY29ubmVjdG9yX2dldF9tb2RlcyAtIGNhbGxiYWNrIHRvIGFkZCBkcm0g bW9kZXMgdmlhIGRybV9tb2RlX3Byb2JlZF9hZGQoKQotICogQGNvbm5lY3RvcjogUG9pbnRlciB0 byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0 ZSBkaXNwbGF5IGhhbmRsZQotICogUmV0dXJuczogTnVtYmVyIG9mIG1vZGVzIGFkZGVkCi0gKi8K LWludCBkc2lfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLAotCQl2b2lkICpkaXNwbGF5KTsKLQotLyoqCi0gKiBkc2lfY29ubmVjdG9yX3B1dF9tb2Rl cyAtIGNhbGxiYWNrIHRvIGZyZWUgdXAgZHJtIG1vZGVzIG9mIHRoZSBjb25uZWN0b3IKLSAqIEBj b25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLSAqIEBkaXNwbGF5 OiBQb2ludGVyIHRvIHByaXZhdGUgZGlzcGxheSBoYW5kbGUKLSAqLwotdm9pZCBkc2lfY29ubmVj dG9yX3B1dF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCXZvaWQgKmRp c3BsYXkpOwotCi0vKioKLSAqIGRzaV9jb25uX2dldF9tb2RlX2luZm8gLSByZXRyaWV2ZSBpbmZv cm1hdGlvbiBvbiB0aGUgbW9kZSBzZWxlY3RlZAotICogQGRybV9tb2RlOiBEaXNwbGF5IG1vZGUg c2V0IGZvciB0aGUgZGlzcGxheQotICogQG1vZGVfaW5mbzogT3V0IHBhcmFtZXRlci4gaW5mb3Jt YXRpb24gb2YgdGhlIG1vZGUuCi0gKiBAbWF4X21peGVyX3dpZHRoOiBtYXggd2lkdGggc3VwcG9y dGVkIGJ5IEhXIGxheWVyIG1peGVyCi0gKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLSAqLwot aW50IGRzaV9jb25uX2dldF9tb2RlX2luZm8oY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg KmRybV9tb2RlLAotCXN0cnVjdCBtc21fbW9kZV9pbmZvICptb2RlX2luZm8sIHUzMiBtYXhfbWl4 ZXJfd2lkdGgpOwotCi0vKioKLSAqIGRzaV9jb25uX21vZGVfdmFsaWQgLSBjYWxsYmFjayB0byBk ZXRlcm1pbmUgaWYgc3BlY2lmaWVkIG1vZGUgaXMgdmFsaWQKLSAqIEBjb25uZWN0b3I6IFBvaW50 ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLSAqIEBtb2RlOiBQb2ludGVyIHRvIGRybSBt b2RlIHN0cnVjdHVyZQotICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IGhh bmRsZQotICogUmV0dXJuczogVmFsaWRpdHkgc3RhdHVzIGZvciBzcGVjaWZpZWQgbW9kZQotICov Ci1lbnVtIGRybV9tb2RlX3N0YXR1cyBkc2lfY29ubl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IsCi0JCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAotCQl2 b2lkICpkaXNwbGF5KTsKLQotLyoqCi0gKiBkc2lfY29ubl9lbmFibGVfZXZlbnQgLSBjYWxsYmFj ayB0byBub3RpZnkgRFNJIGRyaXZlciBvZiBldmVudCByZWdpc3RlcmF0aW9uCi0gKiBAY29ubmVj dG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCi0gKiBAZXZlbnRfaWR4OiBD b25uZWN0b3IgZXZlbnQgaW5kZXgKLSAqIEBlbmFibGU6IFdoZXRoZXIgb3Igbm90IHRoZSBldmVu dCBpcyBlbmFibGVkCi0gKiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRlIGRpc3BsYXkgaGFu ZGxlCi0gKi8KLXZvaWQgZHNpX2Nvbm5fZW5hYmxlX2V2ZW50KHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IsCi0JCXVpbnQzMl90IGV2ZW50X2lkeCwgYm9vbCBlbmFibGUsIHZvaWQgKmRp c3BsYXkpOwotCi1zdHJ1Y3QgZHNpX2JyaWRnZSAqZHNpX2RybV9icmlkZ2VfaW5pdChzdHJ1Y3Qg ZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCXN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7Ci0KLXZvaWQgZHNpX2RybV9icmlkZ2VfY2xlYW51cChz dHJ1Y3QgZHNpX2JyaWRnZSAqYnJpZGdlKTsKLQotLyoqCi0gKiBkc2lfZGlzcGxheV9wcmVfa2lj a29mZiAtIHByb2dyYW0ga2lja29mZi10aW1lIGZlYXR1cmVzCi0gKiBAY29ubmVjdG9yOiBQb2lu dGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCi0gKiBAZGlzcGxheTogUG9pbnRlciB0byBw cml2YXRlIGRpc3BsYXkgc3RydWN0dXJlCi0gKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLSAq LwotaW50IGRzaV9jb25uX3ByZV9raWNrb2ZmKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IsCi0JCXZvaWQgKmRpc3BsYXkpOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5X3Bvc3Rfa2lja29m ZiAtIHByb2dyYW0gcG9zdCBraWNrb2ZmLXRpbWUgZmVhdHVyZXMKLSAqIEBjb25uZWN0b3I6IFBv aW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLSAqIFJldHVybnM6IFplcm8gb24gc3Vj Y2VzcwotICovCi1pbnQgZHNpX2Nvbm5fcG9zdF9raWNrb2ZmKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpOwotCi0jZW5kaWYgLyogX0RTSV9EUk1fSF8gKi8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2h3LmggYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2RzaS1zdGFnaW5nL2RzaV9ody5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5 NTBhMDAxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNp X2h3LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChj KSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot ICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCi0gKgotICovCi0KLSNpZm5kZWYgX0RTSV9IV19IXwotI2RlZmluZSBfRFNJX0hX X0hfCi0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2RlZmluZSBEU0lfUjMyKGRzaV9odywgb2Zm KSByZWFkbF9yZWxheGVkKChkc2lfaHcpLT5iYXNlICsgKG9mZikpCi0jZGVmaW5lIERTSV9XMzIo ZHNpX2h3LCBvZmYsIHZhbCkgXAotCWRvIHtcCi0JCXByX2RlYnVnKCJbRFNJXyVkXVslc10gLSBb MHglMDh4XVxuIiwgXAotCQkJKGRzaV9odyktPmluZGV4LCAjb2ZmLCAodWludDMyX3QpKHZhbCkp OyBcCi0JCXdyaXRlbF9yZWxheGVkKCh2YWwpLCAoZHNpX2h3KS0+YmFzZSArIChvZmYpKTsgXAot CX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRFNJX01NU1NfTUlTQ19SMzIoZHNpX2h3LCBvZmYpIFwK LQlyZWFkbF9yZWxheGVkKChkc2lfaHcpLT5tbXNzX21pc2NfYmFzZSArIChvZmYpKQotI2RlZmlu ZSBEU0lfTU1TU19NSVNDX1czMihkc2lfaHcsIG9mZiwgdmFsKSBcCi0JZG8ge1wKLQkJcHJfZGVi dWcoIltEU0lfJWRdWyVzXSAtIFsweCUwOHhdXG4iLCBcCi0JCQkoZHNpX2h3KS0+aW5kZXgsICNv ZmYsIHZhbCk7IFwKLQkJd3JpdGVsX3JlbGF4ZWQoKHZhbCksIChkc2lfaHcpLT5tbXNzX21pc2Nf YmFzZSArIChvZmYpKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRFNJX0RJU1BfQ0NfUjMy KGRzaV9odywgb2ZmKSBcCi0JcmVhZGxfcmVsYXhlZCgoZHNpX2h3KS0+ZGlzcF9jY19iYXNlICsg KG9mZikpCi0jZGVmaW5lIERTSV9ESVNQX0NDX1czMihkc2lfaHcsIG9mZiwgdmFsKSBcCi0JZG8g e1wKLQkJcHJfZGVidWcoIltEU0lfJWRdWyVzXSAtIFsweCUwOHhdXG4iLCBcCi0JCQkoZHNpX2h3 KS0+aW5kZXgsICNvZmYsIHZhbCk7IFwKLQkJd3JpdGVsX3JlbGF4ZWQoKHZhbCksIChkc2lfaHcp LT5kaXNwX2NjX2Jhc2UgKyAob2ZmKSk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIERTSV9S NjQoZHNpX2h3LCBvZmYpIHJlYWRxX3JlbGF4ZWQoKGRzaV9odyktPmJhc2UgKyAob2ZmKSkKLSNk ZWZpbmUgRFNJX1c2NChkc2lfaHcsIG9mZiwgdmFsKSB3cml0ZXFfcmVsYXhlZCgodmFsKSwgKGRz aV9odyktPmJhc2UgKyAob2ZmKSkKLQotI2VuZGlmIC8qIF9EU0lfSFdfSF8gKi8KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BhbmVsLmMgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9wYW5lbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAyZTc3N2Y4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNp LXN0YWdpbmcvZHNpX3BhbmVsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzIxICswLDAgQEAKLS8q Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25s eSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10 KQkibXNtLWRzaS1wYW5lbDpbJXM6JWRdICIgZm10LCBfX2Z1bmNfXywgX19MSU5FX18KLSNpbmNs dWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxs aW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgotI2luY2x1ZGUgPHZpZGVv L21pcGlfZGlzcGxheS5oPgotCi0jaW5jbHVkZSAiZHNpX3BhbmVsLmgiCi0jaW5jbHVkZSAiZHNp X2N0cmxfaHcuaCIKLQotLyoqCi0gKiB0b3BvbG9neSBpcyBjdXJyZW50bHkgZGVmaW5lZCBieSBh IHNldCBvZiBmb2xsb3dpbmcgMyB2YWx1ZXM6Ci0gKiAxLiBudW0gb2YgbGF5ZXIgbWl4ZXJzCi0g KiAyLiBudW0gb2YgY29tcHJlc3Npb24gZW5jb2RlcnMKLSAqIDMuIG51bSBvZiBpbnRlcmZhY2Vz Ci0gKi8KLSNkZWZpbmUgVE9QT0xPR1lfU0VUX0xFTiAzCi0jZGVmaW5lIE1BWF9UT1BPTE9HWSA1 Ci0KLSNkZWZpbmUgRFNJX1BBTkVMX0RFRkFVTFRfTEFCRUwgICJEZWZhdWx0IGRzaSBwYW5lbCIK LQotI2RlZmluZSBERUZBVUxUX01EUF9UUkFOU0ZFUl9USU1FIDE0MDAwCi0KLSNkZWZpbmUgREVG QVVMVF9QQU5FTF9KSVRURVJfTlVNRVJBVE9SCQkyCi0jZGVmaW5lIERFRkFVTFRfUEFORUxfSklU VEVSX0RFTk9NSU5BVE9SCTEKLSNkZWZpbmUgREVGQVVMVF9QQU5FTF9KSVRURVJfQVJSQVlfU0la RQkJMgotI2RlZmluZSBNQVhfUEFORUxfSklUVEVSCQkxMAotI2RlZmluZSBERUZBVUxUX1BBTkVM X1BSRUZJTExfTElORVMJMjUKLQotZW51bSBkc2lfZHNjX3JhdGlvX3R5cGUgewotCURTQ184QlBD XzhCUFAsCi0JRFNDXzEwQlBDXzhCUFAsCi0JRFNDXzEyQlBDXzhCUFAsCi0JRFNDX1JBVElPX1RZ UEVfTUFYCi19OwotCi1zdGF0aWMgdTMyIGRzaV9kc2NfcmNfYnVmX3RocmVzaFtdID0gezB4MGUs IDB4MWMsIDB4MmEsIDB4MzgsIDB4NDYsIDB4NTQsCi0JCTB4NjIsIDB4NjksIDB4NzAsIDB4Nzcs IDB4NzksIDB4N2IsIDB4N2QsIDB4N2V9OwotCi0vKgotICogRFNDIDEuMQotICogUmF0ZSBjb250 cm9sIC0gTWluIFFQIHZhbHVlcyBmb3IgZWFjaCByYXRpbyB0eXBlIGluIGRzaV9kc2NfcmF0aW9f dHlwZQotICovCi1zdGF0aWMgY2hhciBkc2lfZHNjX3JjX3JhbmdlX21pbl9xcF8xXzFbXVsxNV0g PSB7Ci0JezAsIDAsIDEsIDEsIDMsIDMsIDMsIDMsIDMsIDMsIDUsIDUsIDUsIDcsIDEzfSwKLQl7 MCwgNCwgNSwgNSwgNywgNywgNywgNywgNywgNywgOSwgOSwgOSwgMTEsIDE3fSwKLQl7MCwgNCwg OSwgOSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTMsIDEzLCAxMywgMTUsIDIxfSwKLQl9Owot Ci0vKgotICogRFNDIDEuMSBTQ1IKLSAqIFJhdGUgY29udHJvbCAtIE1pbiBRUCB2YWx1ZXMgZm9y IGVhY2ggcmF0aW8gdHlwZSBpbiBkc2lfZHNjX3JhdGlvX3R5cGUKLSAqLwotc3RhdGljIGNoYXIg ZHNpX2RzY19yY19yYW5nZV9taW5fcXBfMV8xX3NjcjFbXVsxNV0gPSB7Ci0JezAsIDAsIDEsIDEs IDMsIDMsIDMsIDMsIDMsIDMsIDUsIDUsIDUsIDksIDEyfSwKLQl7MCwgNCwgNSwgNSwgNywgNywg NywgNywgNywgNywgOSwgOSwgOSwgMTMsIDE2fSwKLQl7MCwgNCwgOSwgOSwgMTEsIDExLCAxMSwg MTEsIDExLCAxMSwgMTMsIDEzLCAxMywgMTcsIDIwfSwKLQl9OwotCi0vKgotICogRFNDIDEuMQot ICogUmF0ZSBjb250cm9sIC0gTWF4IFFQIHZhbHVlcyBmb3IgZWFjaCByYXRpbyB0eXBlIGluIGRz aV9kc2NfcmF0aW9fdHlwZQotICovCi1zdGF0aWMgY2hhciBkc2lfZHNjX3JjX3JhbmdlX21heF9x cF8xXzFbXVsxNV0gPSB7Ci0JezQsIDQsIDUsIDYsIDcsIDcsIDcsIDgsIDksIDEwLCAxMSwgMTIs IDEzLCAxMywgMTV9LAotCXs4LCA4LCA5LCAxMCwgMTEsIDExLCAxMSwgMTIsIDEzLCAxNCwgMTUs IDE2LCAxNywgMTcsIDE5fSwKLQl7MTIsIDEyLCAxMywgMTQsIDE1LCAxNSwgMTUsIDE2LCAxNywg MTgsIDE5LCAyMCwgMjEsIDIxLCAyM30sCi0JfTsKLQotLyoKLSAqIERTQyAxLjEgU0NSCi0gKiBS YXRlIGNvbnRyb2wgLSBNYXggUVAgdmFsdWVzIGZvciBlYWNoIHJhdGlvIHR5cGUgaW4gZHNpX2Rz Y19yYXRpb190eXBlCi0gKi8KLXN0YXRpYyBjaGFyIGRzaV9kc2NfcmNfcmFuZ2VfbWF4X3FwXzFf MV9zY3IxW11bMTVdID0gewotCXs0LCA0LCA1LCA2LCA3LCA3LCA3LCA4LCA5LCAxMCwgMTAsIDEx LCAxMSwgMTIsIDEzfSwKLQl7OCwgOCwgOSwgMTAsIDExLCAxMSwgMTEsIDEyLCAxMywgMTQsIDE0 LCAxNSwgMTUsIDE2LCAxN30sCi0JezEyLCAxMiwgMTMsIDE0LCAxNSwgMTUsIDE1LCAxNiwgMTcs IDE4LCAxOCwgMTksIDE5LCAyMCwgMjF9LAotCX07Ci0KLS8qCi0gKiBEU0MgMS4xIGFuZCBEU0Mg MS4xIFNDUgotICogUmF0ZSBjb250cm9sIC0gYnBnIG9mZnNldCB2YWx1ZXMKLSAqLwotc3RhdGlj IGNoYXIgZHNpX2RzY19yY19yYW5nZV9icGdfb2Zmc2V0W10gPSB7MiwgMCwgMCwgLTIsIC00LCAt NiwgLTgsIC04LAotCQktOCwgLTEwLCAtMTAsIC0xMiwgLTEyLCAtMTIsIC0xMn07Ci0KLWludCBk c2lfZHNjX2NyZWF0ZV9wcHNfYnVmX2NtZChzdHJ1Y3QgbXNtX2Rpc3BsYXlfZHNjX2luZm8gKmRz YywgY2hhciAqYnVmLAotCQkJCWludCBwcHNfaWQpCi17Ci0JY2hhciAqYnA7Ci0JY2hhciBkYXRh OwotCWludCBpLCBicHA7Ci0JY2hhciAqZGJnYnA7Ci0KLQlkYmdicCA9IGJ1ZjsKLQlicCA9IGJ1 ZjsKLQkvKiBGaXJzdCA3IGJ5dGVzIGFyZSBjbWQgaGVhZGVyICovCi0JKmJwKysgPSAweDBBOwot CSpicCsrID0gMTsKLQkqYnArKyA9IDA7Ci0JKmJwKysgPSAwOwotCSpicCsrID0gMTA7Ci0JKmJw KysgPSAwOwotCSpicCsrID0gMTI4OwotCi0JKmJwKysgPSAoZHNjLT52ZXJzaW9uICYgMHhmZik7 CQkvKiBwcHMwICovCi0JKmJwKysgPSAocHBzX2lkICYgMHhmZik7CQkvKiBwcHMxICovCi0JYnAr KzsJCQkJCS8qIHBwczIsIHJlc2VydmVkICovCi0KLQlkYXRhID0gZHNjLT5saW5lX2J1Zl9kZXB0 aCAmIDB4MGY7Ci0JZGF0YSB8PSAoKGRzYy0+YnBjICYgMHhmKSA8PCA0KTsKLQkqYnArKyA9IGRh dGE7CQkJCS8qIHBwczMgKi8KLQotCWJwcCA9IGRzYy0+YnBwOwotCWJwcCA8PD0gNDsJCQkJLyog NCBmcmFjdGlvbiBiaXRzICovCi0JZGF0YSA9IChicHAgPj4gOCk7Ci0JZGF0YSAmPSAweDAzOwkJ CQkvKiB1cHBlciB0d28gYml0cyAqLwotCWRhdGEgfD0gKChkc2MtPmJsb2NrX3ByZWRfZW5hYmxl ICYgMHgxKSA8PCA1KTsKLQlkYXRhIHw9ICgoZHNjLT5jb252ZXJ0X3JnYiAmIDB4MSkgPDwgNCk7 Ci0JZGF0YSB8PSAoKGRzYy0+ZW5hYmxlXzQyMiAmIDB4MSkgPDwgMyk7Ci0JZGF0YSB8PSAoKGRz Yy0+dmJyX2VuYWJsZSAmIDB4MSkgPDwgMik7Ci0JKmJwKysgPSBkYXRhOwkJCQkvKiBwcHM0ICov Ci0JKmJwKysgPSAoYnBwICYgMHhmZik7CQkJLyogcHBzNSAqLwotCi0JKmJwKysgPSAoKGRzYy0+ cGljX2hlaWdodCA+PiA4KSAmIDB4ZmYpOyAvKiBwcHM2ICovCi0JKmJwKysgPSAoZHNjLT5waWNf aGVpZ2h0ICYgMHgwZmYpOwkvKiBwcHM3ICovCi0JKmJwKysgPSAoKGRzYy0+cGljX3dpZHRoID4+ IDgpICYgMHhmZik7CS8qIHBwczggKi8KLQkqYnArKyA9IChkc2MtPnBpY193aWR0aCAmIDB4MGZm KTsJLyogcHBzOSAqLwotCi0JKmJwKysgPSAoKGRzYy0+c2xpY2VfaGVpZ2h0ID4+IDgpICYgMHhm Zik7LyogcHBzMTAgKi8KLQkqYnArKyA9IChkc2MtPnNsaWNlX2hlaWdodCAmIDB4MGZmKTsJLyog cHBzMTEgKi8KLQkqYnArKyA9ICgoZHNjLT5zbGljZV93aWR0aCA+PiA4KSAmIDB4ZmYpOyAvKiBw cHMxMiAqLwotCSpicCsrID0gKGRzYy0+c2xpY2Vfd2lkdGggJiAweDBmZik7CS8qIHBwczEzICov Ci0KLQkqYnArKyA9ICgoZHNjLT5jaHVua19zaXplID4+IDgpICYgMHhmZik7LyogcHBzMTQgKi8K LQkqYnArKyA9IChkc2MtPmNodW5rX3NpemUgJiAweDBmZik7CS8qIHBwczE1ICovCi0KLQkqYnAr KyA9IChkc2MtPmluaXRpYWxfeG1pdF9kZWxheSA+PiA4KSAmIDB4MzsgLyogcHBzMTYsIGJpdCAw LCAxICovCi0JKmJwKysgPSAoZHNjLT5pbml0aWFsX3htaXRfZGVsYXkgJiAweGZmKTsvKiBwcHMx NyAqLwotCi0JKmJwKysgPSAoKGRzYy0+aW5pdGlhbF9kZWNfZGVsYXkgPj4gOCkgJiAweGZmKTsg LyogcHBzMTggKi8KLQkqYnArKyA9IChkc2MtPmluaXRpYWxfZGVjX2RlbGF5ICYgMHhmZik7Lyog cHBzMTkgKi8KLQotCWJwKys7CQkJCQkvKiBwcHMyMCwgcmVzZXJ2ZWQgKi8KLQotCSpicCsrID0g KGRzYy0+aW5pdGlhbF9zY2FsZV92YWx1ZSAmIDB4M2YpOyAvKiBwcHMyMSAqLwotCi0JKmJwKysg PSAoKGRzYy0+c2NhbGVfaW5jcmVtZW50X2ludGVydmFsID4+IDgpICYgMHhmZik7IC8qIHBwczIy ICovCi0JKmJwKysgPSAoZHNjLT5zY2FsZV9pbmNyZW1lbnRfaW50ZXJ2YWwgJiAweGZmKTsgLyog cHBzMjMgKi8KLQotCSpicCsrID0gKChkc2MtPnNjYWxlX2RlY3JlbWVudF9pbnRlcnZhbCA+PiA4 KSAmIDB4Zik7IC8qIHBwczI0ICovCi0JKmJwKysgPSAoZHNjLT5zY2FsZV9kZWNyZW1lbnRfaW50 ZXJ2YWwgJiAweDBmZik7LyogcHBzMjUgKi8KLQotCWJwKys7CQkJCQkvKiBwcHMyNiwgcmVzZXJ2 ZWQgKi8KLQotCSpicCsrID0gKGRzYy0+Zmlyc3RfbGluZV9icGdfb2Zmc2V0ICYgMHgxZik7Lyog cHBzMjcgKi8KLQotCSpicCsrID0gKChkc2MtPm5mbF9icGdfb2Zmc2V0ID4+IDgpICYgMHhmZik7 LyogcHBzMjggKi8KLQkqYnArKyA9IChkc2MtPm5mbF9icGdfb2Zmc2V0ICYgMHgwZmYpOwkvKiBw cHMyOSAqLwotCSpicCsrID0gKChkc2MtPnNsaWNlX2JwZ19vZmZzZXQgPj4gOCkgJiAweGZmKTsv KiBwcHMzMCAqLwotCSpicCsrID0gKGRzYy0+c2xpY2VfYnBnX29mZnNldCAmIDB4MGZmKTsvKiBw cHMzMSAqLwotCi0JKmJwKysgPSAoKGRzYy0+aW5pdGlhbF9vZmZzZXQgPj4gOCkgJiAweGZmKTsv KiBwcHMzMiAqLwotCSpicCsrID0gKGRzYy0+aW5pdGlhbF9vZmZzZXQgJiAweDBmZik7CS8qIHBw czMzICovCi0KLQkqYnArKyA9ICgoZHNjLT5maW5hbF9vZmZzZXQgPj4gOCkgJiAweGZmKTsvKiBw cHMzNCAqLwotCSpicCsrID0gKGRzYy0+ZmluYWxfb2Zmc2V0ICYgMHgwZmYpOwkvKiBwcHMzNSAq LwotCi0JKmJwKysgPSAoZHNjLT5taW5fcXBfZmxhdG5lc3MgJiAweDFmKTsJLyogcHBzMzYgKi8K LQkqYnArKyA9IChkc2MtPm1heF9xcF9mbGF0bmVzcyAmIDB4MWYpOwkvKiBwcHMzNyAqLwotCi0J KmJwKysgPSAoKGRzYy0+cmNfbW9kZWxfc2l6ZSA+PiA4KSAmIDB4ZmYpOy8qIHBwczM4ICovCi0J KmJwKysgPSAoZHNjLT5yY19tb2RlbF9zaXplICYgMHgwZmYpOwkvKiBwcHMzOSAqLwotCi0JKmJw KysgPSAoZHNjLT5lZGdlX2ZhY3RvciAmIDB4MGYpOwkvKiBwcHM0MCAqLwotCi0JKmJwKysgPSAo ZHNjLT5xdWFudF9pbmNyX2xpbWl0MCAmIDB4MWYpOwkvKiBwcHM0MSAqLwotCSpicCsrID0gKGRz Yy0+cXVhbnRfaW5jcl9saW1pdDEgJiAweDFmKTsJLyogcHBzNDIgKi8KLQotCWRhdGEgPSAoKGRz Yy0+dGd0X29mZnNldF9oaSAmIDB4ZikgPDwgNCk7Ci0JZGF0YSB8PSAoZHNjLT50Z3Rfb2Zmc2V0 X2xvICYgMHgwZik7Ci0JKmJwKysgPSBkYXRhOwkJCQkvKiBwcHM0MyAqLwotCi0JZm9yIChpID0g MDsgaSA8IDE0OyBpKyspCi0JCSpicCsrID0gKGRzYy0+YnVmX3RocmVzaFtpXSAmIDB4ZmYpOyAv KiBwcHM0NCAtIHBwczU3ICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgMTU7IGkrKykgewkJLyogcHBz NTggLSBwcHM4NyAqLwotCQlkYXRhID0gKGRzYy0+cmFuZ2VfbWluX3FwW2ldICYgMHgxZik7Ci0J CWRhdGEgPDw9IDM7Ci0JCWRhdGEgfD0gKChkc2MtPnJhbmdlX21heF9xcFtpXSA+PiAyKSAmIDB4 MDcpOwotCQkqYnArKyA9IGRhdGE7Ci0JCWRhdGEgPSAoZHNjLT5yYW5nZV9tYXhfcXBbaV0gJiAw eDAzKTsKLQkJZGF0YSA8PD0gNjsKLQkJZGF0YSB8PSAoZHNjLT5yYW5nZV9icGdfb2Zmc2V0W2ld ICYgMHgzZik7Ci0JCSpicCsrID0gZGF0YTsKLQl9Ci0KLQlyZXR1cm4gMTI4OwotfQotCi1zdGF0 aWMgaW50IGRzaV9wYW5lbF92cmVnX2dldChzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlp bnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCByZWd1bGF0b3IgKnZyZWcgPSBOVUxMOwotCi0J Zm9yIChpID0gMDsgaSA8IHBhbmVsLT5wb3dlcl9pbmZvLmNvdW50OyBpKyspIHsKLQkJdnJlZyA9 IGRldm1fcmVndWxhdG9yX2dldChwYW5lbC0+cGFyZW50LAotCQkJCQkgIHBhbmVsLT5wb3dlcl9p bmZvLnZyZWdzW2ldLnZyZWdfbmFtZSk7Ci0JCXJjID0gUFRSX1JFVCh2cmVnKTsKLQkJaWYgKHJj KSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgJXMgcmVndWxhdG9yXG4iLAotCQkJICAgICAg IHBhbmVsLT5wb3dlcl9pbmZvLnZyZWdzW2ldLnZyZWdfbmFtZSk7Ci0JCQlnb3RvIGVycm9yX3B1 dDsKLQkJfQotCQlwYW5lbC0+cG93ZXJfaW5mby52cmVnc1tpXS52cmVnID0gdnJlZzsKLQl9Ci0K LQlyZXR1cm4gcmM7Ci1lcnJvcl9wdXQ6Ci0JZm9yIChpID0gaSAtIDE7IGkgPj0gMDsgaS0tKSB7 Ci0JCWRldm1fcmVndWxhdG9yX3B1dChwYW5lbC0+cG93ZXJfaW5mby52cmVnc1tpXS52cmVnKTsK LQkJcGFuZWwtPnBvd2VyX2luZm8udnJlZ3NbaV0udnJlZyA9IE5VTEw7Ci0JfQotCXJldHVybiAt RVBST0JFX0RFRkVSOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF92cmVnX3B1dChzdHJ1Y3Qg ZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCi0JZm9yIChpID0g cGFuZWwtPnBvd2VyX2luZm8uY291bnQgLSAxOyBpID49IDA7IGktLSkKLQkJZGV2bV9yZWd1bGF0 b3JfcHV0KHBhbmVsLT5wb3dlcl9pbmZvLnZyZWdzW2ldLnZyZWcpOwotCi0JcmV0dXJuIHJjOwot fQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9ncGlvX3JlcXVlc3Qoc3RydWN0IGRzaV9wYW5lbCAq cGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX3BhbmVsX3Jlc2V0X2NvbmZpZyAq cl9jb25maWcgPSAmcGFuZWwtPnJlc2V0X2NvbmZpZzsKLQotCWlmIChncGlvX2lzX3ZhbGlkKHJf Y29uZmlnLT5yZXNldF9ncGlvKSkgewotCQlyYyA9IGdwaW9fcmVxdWVzdChyX2NvbmZpZy0+cmVz ZXRfZ3BpbywgInJlc2V0X2dwaW8iKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoInJlcXVlc3Qg Zm9yIHJlc2V0X2dwaW8gZmFpbGVkLCByYz0lZFxuIiwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJ fQotCX0KLQotCWlmIChncGlvX2lzX3ZhbGlkKHJfY29uZmlnLT5kaXNwX2VuX2dwaW8pKSB7Ci0J CXJjID0gZ3Bpb19yZXF1ZXN0KHJfY29uZmlnLT5kaXNwX2VuX2dwaW8sICJkaXNwX2VuX2dwaW8i KTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoInJlcXVlc3QgZm9yIGRpc3BfZW5fZ3BpbyBmYWls ZWQsIHJjPSVkXG4iLCByYyk7Ci0JCQlnb3RvIGVycm9yX3JlbGVhc2VfcmVzZXQ7Ci0JCX0KLQl9 Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChwYW5lbC0+YmxfY29uZmlnLmVuX2dwaW8pKSB7Ci0JCXJj ID0gZ3Bpb19yZXF1ZXN0KHBhbmVsLT5ibF9jb25maWcuZW5fZ3BpbywgImJrbHRfZW5fZ3BpbyIp OwotCQlpZiAocmMpIHsKLQkJCXByX2VycigicmVxdWVzdCBmb3IgYmtsdF9lbl9ncGlvIGZhaWxl ZCwgcmM9JWRcbiIsIHJjKTsKLQkJCWdvdG8gZXJyb3JfcmVsZWFzZV9kaXNwX2VuOwotCQl9Ci0J fQotCi0JaWYgKGdwaW9faXNfdmFsaWQocl9jb25maWctPmxjZF9tb2RlX3NlbF9ncGlvKSkgewot CQlyYyA9IGdwaW9fcmVxdWVzdChyX2NvbmZpZy0+bGNkX21vZGVfc2VsX2dwaW8sICJtb2RlX2dw aW8iKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoInJlcXVlc3QgZm9yIG1vZGVfZ3BpbyBmYWls ZWQsIHJjPSVkXG4iLCByYyk7Ci0JCQlnb3RvIGVycm9yX3JlbGVhc2VfbW9kZV9zZWw7Ci0JCX0K LQl9Ci0KLQlnb3RvIGVycm9yOwotZXJyb3JfcmVsZWFzZV9tb2RlX3NlbDoKLQlpZiAoZ3Bpb19p c192YWxpZChwYW5lbC0+YmxfY29uZmlnLmVuX2dwaW8pKQotCQlncGlvX2ZyZWUocGFuZWwtPmJs X2NvbmZpZy5lbl9ncGlvKTsKLWVycm9yX3JlbGVhc2VfZGlzcF9lbjoKLQlpZiAoZ3Bpb19pc192 YWxpZChyX2NvbmZpZy0+ZGlzcF9lbl9ncGlvKSkKLQkJZ3Bpb19mcmVlKHJfY29uZmlnLT5kaXNw X2VuX2dwaW8pOwotZXJyb3JfcmVsZWFzZV9yZXNldDoKLQlpZiAoZ3Bpb19pc192YWxpZChyX2Nv bmZpZy0+cmVzZXRfZ3BpbykpCi0JCWdwaW9fZnJlZShyX2NvbmZpZy0+cmVzZXRfZ3Bpbyk7Ci1l cnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX2dwaW9fcmVsZWFz ZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lf cGFuZWxfcmVzZXRfY29uZmlnICpyX2NvbmZpZyA9ICZwYW5lbC0+cmVzZXRfY29uZmlnOwotCi0J aWYgKGdwaW9faXNfdmFsaWQocl9jb25maWctPnJlc2V0X2dwaW8pKQotCQlncGlvX2ZyZWUocl9j b25maWctPnJlc2V0X2dwaW8pOwotCi0JaWYgKGdwaW9faXNfdmFsaWQocl9jb25maWctPmRpc3Bf ZW5fZ3BpbykpCi0JCWdwaW9fZnJlZShyX2NvbmZpZy0+ZGlzcF9lbl9ncGlvKTsKLQotCWlmIChn cGlvX2lzX3ZhbGlkKHBhbmVsLT5ibF9jb25maWcuZW5fZ3BpbykpCi0JCWdwaW9fZnJlZShwYW5l bC0+YmxfY29uZmlnLmVuX2dwaW8pOwotCi0JaWYgKGdwaW9faXNfdmFsaWQocGFuZWwtPnJlc2V0 X2NvbmZpZy5sY2RfbW9kZV9zZWxfZ3BpbykpCi0JCWdwaW9fZnJlZShwYW5lbC0+cmVzZXRfY29u ZmlnLmxjZF9tb2RlX3NlbF9ncGlvKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBk c2lfcGFuZWxfcmVzZXQoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0gMDsK LQlzdHJ1Y3QgZHNpX3BhbmVsX3Jlc2V0X2NvbmZpZyAqcl9jb25maWcgPSAmcGFuZWwtPnJlc2V0 X2NvbmZpZzsKLQlpbnQgaTsKLQotCWlmIChncGlvX2lzX3ZhbGlkKHBhbmVsLT5yZXNldF9jb25m aWcuZGlzcF9lbl9ncGlvKSkgewotCQlyYyA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChwYW5lbC0+ cmVzZXRfY29uZmlnLmRpc3BfZW5fZ3BpbywgMSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJ1 bmFibGUgdG8gc2V0IGRpciBmb3IgZGlzcCBncGlvIHJjPSVkXG4iLCByYyk7Ci0JCQlnb3RvIGV4 aXQ7Ci0JCX0KLQl9Ci0KLQlpZiAocl9jb25maWctPmNvdW50KSB7Ci0JCXJjID0gZ3Bpb19kaXJl Y3Rpb25fb3V0cHV0KHJfY29uZmlnLT5yZXNldF9ncGlvLAotCQkJcl9jb25maWctPnNlcXVlbmNl WzBdLmxldmVsKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoInVuYWJsZSB0byBzZXQgZGlyIGZv ciByc3QgZ3BpbyByYz0lZFxuIiwgcmMpOwotCQkJZ290byBleGl0OwotCQl9Ci0JfQotCi0JZm9y IChpID0gMDsgaSA8IHJfY29uZmlnLT5jb3VudDsgaSsrKSB7Ci0JCWdwaW9fc2V0X3ZhbHVlKHJf Y29uZmlnLT5yZXNldF9ncGlvLAotCQkJICAgICAgIHJfY29uZmlnLT5zZXF1ZW5jZVtpXS5sZXZl bCk7Ci0KLQotCQlpZiAocl9jb25maWctPnNlcXVlbmNlW2ldLnNsZWVwX21zKQotCQkJdXNsZWVw X3JhbmdlKHJfY29uZmlnLT5zZXF1ZW5jZVtpXS5zbGVlcF9tcyAqIDEwMDAsCi0JCQkJICAgICBy X2NvbmZpZy0+c2VxdWVuY2VbaV0uc2xlZXBfbXMgKiAxMDAwKTsKLQl9Ci0KLQlpZiAoZ3Bpb19p c192YWxpZChwYW5lbC0+YmxfY29uZmlnLmVuX2dwaW8pKSB7Ci0JCXJjID0gZ3Bpb19kaXJlY3Rp b25fb3V0cHV0KHBhbmVsLT5ibF9jb25maWcuZW5fZ3BpbywgMSk7Ci0JCWlmIChyYykKLQkJCXBy X2VycigidW5hYmxlIHRvIHNldCBkaXIgZm9yIGJrbHQgZ3BpbyByYz0lZFxuIiwgcmMpOwotCX0K LQotCWlmIChncGlvX2lzX3ZhbGlkKHBhbmVsLT5yZXNldF9jb25maWcubGNkX21vZGVfc2VsX2dw aW8pKSB7Ci0JCWJvb2wgb3V0ID0gdHJ1ZTsKLQotCQlpZiAoKHBhbmVsLT5yZXNldF9jb25maWcu bW9kZV9zZWxfc3RhdGUgPT0gTU9ERV9TRUxfRFVBTF9QT1JUKQotCQkJCXx8IChwYW5lbC0+cmVz ZXRfY29uZmlnLm1vZGVfc2VsX3N0YXRlCi0JCQkJCT09IE1PREVfR1BJT19MT1cpKQotCQkJb3V0 ID0gZmFsc2U7Ci0JCWVsc2UgaWYgKChwYW5lbC0+cmVzZXRfY29uZmlnLm1vZGVfc2VsX3N0YXRl Ci0JCQkJPT0gTU9ERV9TRUxfU0lOR0xFX1BPUlQpIHx8Ci0JCQkJKHBhbmVsLT5yZXNldF9jb25m aWcubW9kZV9zZWxfc3RhdGUKLQkJCQkgPT0gTU9ERV9HUElPX0hJR0gpKQotCQkJb3V0ID0gdHJ1 ZTsKLQotCQlyYyA9IGdwaW9fZGlyZWN0aW9uX291dHB1dCgKLQkJCXBhbmVsLT5yZXNldF9jb25m aWcubGNkX21vZGVfc2VsX2dwaW8sIG91dCk7Ci0JCWlmIChyYykKLQkJCXByX2VycigidW5hYmxl IHRvIHNldCBkaXIgZm9yIG1vZGUgZ3BpbyByYz0lZFxuIiwgcmMpOwotCX0KLWV4aXQ6Ci0JcmV0 dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9zZXRfcGluY3RybF9zdGF0ZShzdHJ1 Y3QgZHNpX3BhbmVsICpwYW5lbCwgYm9vbCBlbmFibGUpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1 Y3QgcGluY3RybF9zdGF0ZSAqc3RhdGU7Ci0KLQlpZiAoZW5hYmxlKQotCQlzdGF0ZSA9IHBhbmVs LT5waW5jdHJsLmFjdGl2ZTsKLQllbHNlCi0JCXN0YXRlID0gcGFuZWwtPnBpbmN0cmwuc3VzcGVu ZDsKLQotCXJjID0gcGluY3RybF9zZWxlY3Rfc3RhdGUocGFuZWwtPnBpbmN0cmwucGluY3RybCwg c3RhdGUpOwotCWlmIChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZXQgcGluIHN0YXRl LCByYz0lZFxuIiwgcGFuZWwtPm5hbWUsCi0JCSAgICAgICByYyk7Ci0KLQlyZXR1cm4gcmM7Ci19 Ci0KLQotc3RhdGljIGludCBkc2lfcGFuZWxfcG93ZXJfb24oc3RydWN0IGRzaV9wYW5lbCAqcGFu ZWwpCi17Ci0JaW50IHJjID0gMDsKLQotCXJjID0gZHNpX3B3cl9lbmFibGVfcmVndWxhdG9yKCZw YW5lbC0+cG93ZXJfaW5mbywgdHJ1ZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWls ZWQgdG8gZW5hYmxlIHZyZWdzLCByYz0lZFxuIiwgcGFuZWwtPm5hbWUsIHJjKTsKLQkJZ290byBl eGl0OwotCX0KLQotCXJjID0gZHNpX3BhbmVsX3NldF9waW5jdHJsX3N0YXRlKHBhbmVsLCB0cnVl KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZXQgcGluY3RybCwgcmM9 JWRcbiIsIHBhbmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3JfZGlzYWJsZV92cmVnczsKLQl9 Ci0KLQlyYyA9IGRzaV9wYW5lbF9yZXNldChwYW5lbCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vycigi WyVzXSBmYWlsZWQgdG8gcmVzZXQgcGFuZWwsIHJjPSVkXG4iLCBwYW5lbC0+bmFtZSwgcmMpOwot CQlnb3RvIGVycm9yX2Rpc2FibGVfZ3BpbzsKLQl9Ci0KLQlnb3RvIGV4aXQ7Ci0KLWVycm9yX2Rp c2FibGVfZ3BpbzoKLQlpZiAoZ3Bpb19pc192YWxpZChwYW5lbC0+cmVzZXRfY29uZmlnLmRpc3Bf ZW5fZ3BpbykpCi0JCWdwaW9fc2V0X3ZhbHVlKHBhbmVsLT5yZXNldF9jb25maWcuZGlzcF9lbl9n cGlvLCAwKTsKLQotCWlmIChncGlvX2lzX3ZhbGlkKHBhbmVsLT5ibF9jb25maWcuZW5fZ3Bpbykp Ci0JCWdwaW9fc2V0X3ZhbHVlKHBhbmVsLT5ibF9jb25maWcuZW5fZ3BpbywgMCk7Ci0KLQkodm9p ZClkc2lfcGFuZWxfc2V0X3BpbmN0cmxfc3RhdGUocGFuZWwsIGZhbHNlKTsKLQotZXJyb3JfZGlz YWJsZV92cmVnczoKLQkodm9pZClkc2lfcHdyX2VuYWJsZV9yZWd1bGF0b3IoJnBhbmVsLT5wb3dl cl9pbmZvLCBmYWxzZSk7Ci0KLWV4aXQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRz aV9wYW5lbF9wb3dlcl9vZmYoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0g MDsKLQotCWlmIChncGlvX2lzX3ZhbGlkKHBhbmVsLT5yZXNldF9jb25maWcuZGlzcF9lbl9ncGlv KSkKLQkJZ3Bpb19zZXRfdmFsdWUocGFuZWwtPnJlc2V0X2NvbmZpZy5kaXNwX2VuX2dwaW8sIDAp OwotCi0JaWYgKGdwaW9faXNfdmFsaWQocGFuZWwtPnJlc2V0X2NvbmZpZy5yZXNldF9ncGlvKSkK LQkJZ3Bpb19zZXRfdmFsdWUocGFuZWwtPnJlc2V0X2NvbmZpZy5yZXNldF9ncGlvLCAwKTsKLQot CWlmIChncGlvX2lzX3ZhbGlkKHBhbmVsLT5yZXNldF9jb25maWcubGNkX21vZGVfc2VsX2dwaW8p KQotCQlncGlvX3NldF92YWx1ZShwYW5lbC0+cmVzZXRfY29uZmlnLmxjZF9tb2RlX3NlbF9ncGlv LCAwKTsKLQotCXJjID0gZHNpX3BhbmVsX3NldF9waW5jdHJsX3N0YXRlKHBhbmVsLCBmYWxzZSk7 Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgc2V0IHBpbmN0cmwgc3RhdGUsIHJj PSVkXG4iLCBwYW5lbC0+bmFtZSwKLQkJICAgICAgIHJjKTsKLQl9Ci0KLQlyYyA9IGRzaV9wd3Jf ZW5hYmxlX3JlZ3VsYXRvcigmcGFuZWwtPnBvd2VyX2luZm8sIGZhbHNlKTsKLQlpZiAocmMpCi0J CXByX2VycigiWyVzXSBmYWlsZWQgdG8gZW5hYmxlIHZyZWdzLCByYz0lZFxuIiwgcGFuZWwtPm5h bWUsIHJjKTsKLQotCXJldHVybiByYzsKLX0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX3R4X2NtZF9z ZXQoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsCi0JCQkJZW51bSBkc2lfY21kX3NldF90eXBlIHR5 cGUpCi17Ci0JaW50IHJjID0gMCwgaSA9IDA7Ci0Jc3NpemVfdCBsZW47Ci0Jc3RydWN0IGRzaV9j bWRfZGVzYyAqY21kczsKLQl1MzIgY291bnQ7Ci0JZW51bSBkc2lfY21kX3NldF9zdGF0ZSBzdGF0 ZTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqbW9kZTsKLQljb25zdCBzdHJ1Y3QgbWlwaV9k c2lfaG9zdF9vcHMgKm9wcyA9IHBhbmVsLT5ob3N0LT5vcHM7Ci0KLQlpZiAoIXBhbmVsIHx8ICFw YW5lbC0+Y3VyX21vZGUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbW9kZSA9IHBhbmVsLT5jdXJf bW9kZTsKLQotCWNtZHMgPSBtb2RlLT5wcml2X2luZm8tPmNtZF9zZXRzW3R5cGVdLmNtZHM7Ci0J Y291bnQgPSBtb2RlLT5wcml2X2luZm8tPmNtZF9zZXRzW3R5cGVdLmNvdW50OwotCXN0YXRlID0g bW9kZS0+cHJpdl9pbmZvLT5jbWRfc2V0c1t0eXBlXS5zdGF0ZTsKLQotCWlmIChjb3VudCA9PSAw KSB7Ci0JCXByX2RlYnVnKCJbJXNdIE5vIGNvbW1hbmRzIHRvIGJlIHNlbnQgZm9yIHN0YXRlKCVk KVxuIiwKLQkJCSBwYW5lbC0+bmFtZSwgdHlwZSk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZm9y IChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJLyogVE9ETzogIGhhbmRsZSBsYXN0IGNvbW1h bmQgKi8KLQkJaWYgKHN0YXRlID09IERTSV9DTURfU0VUX1NUQVRFX0xQKQotCQkJY21kcy0+bXNn LmZsYWdzIHw9IE1JUElfRFNJX01TR19VU0VfTFBNOwotCi0JCWxlbiA9IG9wcy0+dHJhbnNmZXIo cGFuZWwtPmhvc3QsICZjbWRzLT5tc2cpOwotCQlpZiAobGVuIDwgMCkgewotCQkJcmMgPSBsZW47 Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBzZXQgY21kcyglZCksIHJjPSVkXG4iLCB0eXBlLCByYyk7 Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JCWlmIChjbWRzLT5wb3N0X3dhaXRfbXMpCi0JCQltc2xl ZXAoY21kcy0+cG9zdF93YWl0X21zKTsKLQkJY21kcysrOwotCX0KLWVycm9yOgotCXJldHVybiBy YzsKLX0KLQotc3RhdGljIGludCBkc2lfcGFuZWxfcGluY3RybF9kZWluaXQoc3RydWN0IGRzaV9w YW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQotCWRldm1fcGluY3RybF9wdXQocGFuZWwt PnBpbmN0cmwucGluY3RybCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3Bh bmVsX3BpbmN0cmxfaW5pdChzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQgcmMgPSAw OwotCi0JLyogVE9ETzogIHBpbmN0cmwgaXMgZGVmaW5lZCBpbiBkc2kgZHQgbm9kZSAqLwotCXBh bmVsLT5waW5jdHJsLnBpbmN0cmwgPSBkZXZtX3BpbmN0cmxfZ2V0KHBhbmVsLT5wYXJlbnQpOwot CWlmIChJU19FUlJfT1JfTlVMTChwYW5lbC0+cGluY3RybC5waW5jdHJsKSkgewotCQlyYyA9IFBU Ul9FUlIocGFuZWwtPnBpbmN0cmwucGluY3RybCk7Ci0JCXByX2VycigiZmFpbGVkIHRvIGdldCBw aW5jdHJsLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXBhbmVsLT5waW5j dHJsLmFjdGl2ZSA9IHBpbmN0cmxfbG9va3VwX3N0YXRlKHBhbmVsLT5waW5jdHJsLnBpbmN0cmws Ci0JCQkJCQkgICAgICAgInBhbmVsX2FjdGl2ZSIpOwotCWlmIChJU19FUlJfT1JfTlVMTChwYW5l bC0+cGluY3RybC5hY3RpdmUpKSB7Ci0JCXJjID0gUFRSX0VSUihwYW5lbC0+cGluY3RybC5hY3Rp dmUpOwotCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgcGluY3RybCBhY3RpdmUgc3RhdGUsIHJjPSVk XG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcGFuZWwtPnBpbmN0cmwuc3VzcGVuZCA9 Ci0JCXBpbmN0cmxfbG9va3VwX3N0YXRlKHBhbmVsLT5waW5jdHJsLnBpbmN0cmwsICJwYW5lbF9z dXNwZW5kIik7Ci0KLQlpZiAoSVNfRVJSX09SX05VTEwocGFuZWwtPnBpbmN0cmwuc3VzcGVuZCkp IHsKLQkJcmMgPSBQVFJfRVJSKHBhbmVsLT5waW5jdHJsLnN1c3BlbmQpOwotCQlwcl9lcnIoImZh aWxlZCB0byBnZXQgcGluY3RybCBzdXNwZW5kIHN0YXRlLCByYz0lZFxuIiwgcmMpOwotCQlnb3Rv IGVycm9yOwotCX0KLQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi0jaWZkZWYgQ09ORklHX0xF RFNfVFJJR0dFUlMKLXN0YXRpYyBpbnQgZHNpX3BhbmVsX2xlZF9ibF9yZWdpc3RlcihzdHJ1Y3Qg ZHNpX3BhbmVsICpwYW5lbCwKLQkJCQlzdHJ1Y3QgZHNpX2JhY2tsaWdodF9jb25maWcgKmJsKQot ewotCWludCByYyA9IDA7Ci0KLQlsZWRfdHJpZ2dlcl9yZWdpc3Rlcl9zaW1wbGUoImJrbC10cmln Z2VyIiwgJmJsLT53bGVkKTsKLQotCS8qIExFRCBBUElzIGRvbid0IHRlbGwgdXMgZGlyZWN0bHkg d2hldGhlciBhIGNsYXNkcHV2IGhhcyB5ZXQKLQkgKiBiZWVuIHJlZ2lzdGVyZWQgdG8gc2Vydmlj ZSB0aGlzIHRyaWdnZXIuIFVudGlsIGNsYXNkcHV2IGlzCi0JICogcmVnaXN0ZXJlZCwgY2FsbGlu ZyBsZWRfdHJpZ2dlciBoYXMgbm8gZWZmZWN0LCBhbmQgZG9lc24ndAotCSAqIGZhaWwuIENsYXNk cHV2cyBhcmUgYXNzb2NpYXRlZCB3aXRoIGFueSByZWdpc3RlcmVkIHRyaWdnZXJzCi0JICogd2hl biB0aGV5IGRvIHJlZ2lzdGVyLCBidXQgdGhhdCBpcyB0b28gbGF0ZSBmb3IgRkJDb24uCi0JICog Q2hlY2sgdGhlIGNkZXYgbGlzdCBkaXJlY3RseSBhbmQgZGVmZXIgaWYgYXBwcm9wcmlhdGUuCi0J ICovCi0JaWYgKCFibC0+d2xlZCkgewotCQlwcl9lcnIoIlslc10gYmFja2xpZ2h0IHJlZ2lzdHJh dGlvbiBmYWlsZWRcbiIsIHBhbmVsLT5uYW1lKTsKLQkJcmMgPSAtRUlOVkFMOwotCX0gZWxzZSB7 Ci0JCXJlYWRfbG9jaygmYmwtPndsZWQtPmxlZGRldl9saXN0X2xvY2spOwotCQlpZiAobGlzdF9l bXB0eSgmYmwtPndsZWQtPmxlZF9jZGV2cykpCi0JCQlyYyA9IC1FUFJPQkVfREVGRVI7Ci0JCXJl YWRfdW5sb2NrKCZibC0+d2xlZC0+bGVkZGV2X2xpc3RfbG9jayk7Ci0KLQkJaWYgKHJjKSB7Ci0J CQlwcl9pbmZvKCJbJXNdIGJhY2tsaWdodCAlcyBub3QgcmVhZHksIGRlZmVyIHByb2JlXG4iLAot CQkJCXBhbmVsLT5uYW1lLCBibC0+d2xlZC0+bmFtZSk7Ci0JCQlsZWRfdHJpZ2dlcl91bnJlZ2lz dGVyX3NpbXBsZShibC0+d2xlZCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0jZWxzZQot c3RhdGljIGludCBkc2lfcGFuZWxfbGVkX2JsX3JlZ2lzdGVyKHN0cnVjdCBkc2lfcGFuZWwgKnBh bmVsLAotCQkJCXN0cnVjdCBkc2lfYmFja2xpZ2h0X2NvbmZpZyAqYmwpCi17Ci0JcmV0dXJuIDA7 Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBkc2lfcGFuZWxfdXBkYXRlX2JhY2tsaWdodChzdHJ1 Y3QgZHNpX3BhbmVsICpwYW5lbCwKLQl1MzIgYmxfbHZsKQotewotCWludCByYyA9IDA7Ci0Jc3Ry dWN0IG1pcGlfZHNpX2RldmljZSAqZHNpOwotCi0JaWYgKCFwYW5lbCB8fCAoYmxfbHZsID4gMHhm ZmZmKSkgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0JfQotCi0JZHNpID0gJnBhbmVsLT5taXBpX2RldmljZTsKLQotCW11dGV4X2xvY2soJnBhbmVs LT5wYW5lbF9sb2NrKTsKLQotCXJjID0gbWlwaV9kc2lfZGNzX3NldF9kaXNwbGF5X2JyaWdodG5l c3MoZHNpLCBibF9sdmwpOwotCWlmIChyYyA8IDApCi0JCXByX2VycigiZmFpbGVkIHRvIHVwZGF0 ZSBkY3MgYmFja2xpZ2h0OiVkXG4iLCBibF9sdmwpOwotCi0JbXV0ZXhfdW5sb2NrKCZwYW5lbC0+ cGFuZWxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX3BhbmVsX3NldF9iYWNrbGln aHQoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsIHUzMiBibF9sdmwpCi17Ci0JaW50IHJjID0gMDsK LQlzdHJ1Y3QgZHNpX2JhY2tsaWdodF9jb25maWcgKmJsID0gJnBhbmVsLT5ibF9jb25maWc7Ci0K LQlwcl9kZWJ1ZygiYmFja2xpZ2h0IHR5cGU6JWQgbHZsOiVkXG4iLCBibC0+dHlwZSwgYmxfbHZs KTsKLQlzd2l0Y2ggKGJsLT50eXBlKSB7Ci0JY2FzZSBEU0lfQkFDS0xJR0hUX1dMRUQ6Ci0JCWxl ZF90cmlnZ2VyX2V2ZW50KGJsLT53bGVkLCBibF9sdmwpOwotCQlicmVhazsKLQljYXNlIERTSV9C QUNLTElHSFRfRENTOgotCQlkc2lfcGFuZWxfdXBkYXRlX2JhY2tsaWdodChwYW5lbCwgYmxfbHZs KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJfZXJyKCJCYWNrbGlnaHQgdHlwZSglZCkgbm90 IHN1cHBvcnRlZFxuIiwgYmwtPnR5cGUpOwotCQlyYyA9IC1FTk9UU1VQUDsKLQl9Ci0KLQlyZXR1 cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX2JsX3JlZ2lzdGVyKHN0cnVjdCBkc2lf cGFuZWwgKnBhbmVsKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9iYWNrbGlnaHRfY29u ZmlnICpibCA9ICZwYW5lbC0+YmxfY29uZmlnOwotCi0Jc3dpdGNoIChibC0+dHlwZSkgewotCWNh c2UgRFNJX0JBQ0tMSUdIVF9XTEVEOgotCQlyYyA9IGRzaV9wYW5lbF9sZWRfYmxfcmVnaXN0ZXIo cGFuZWwsIGJsKTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQkFDS0xJR0hUX0RDUzoKLQkJYnJlYWs7 Ci0JZGVmYXVsdDoKLQkJcHJfZXJyKCJCYWNrbGlnaHQgdHlwZSglZCkgbm90IHN1cHBvcnRlZFxu IiwgYmwtPnR5cGUpOwotCQlyYyA9IC1FTk9UU1VQUDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVy cm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGFuZWxfYmxfdW5yZWdpc3Rl cihzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lf YmFja2xpZ2h0X2NvbmZpZyAqYmwgPSAmcGFuZWwtPmJsX2NvbmZpZzsKLQotCXN3aXRjaCAoYmwt PnR5cGUpIHsKLQljYXNlIERTSV9CQUNLTElHSFRfV0xFRDoKLQkJbGVkX3RyaWdnZXJfdW5yZWdp c3Rlcl9zaW1wbGUoYmwtPndsZWQpOwotCQlicmVhazsKLQljYXNlIERTSV9CQUNLTElHSFRfRENT OgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcl9lcnIoIkJhY2tsaWdodCB0eXBlKCVkKSBub3Qg c3VwcG9ydGVkXG4iLCBibC0+dHlwZSk7Ci0JCXJjID0gLUVOT1RTVVBQOwotCQlnb3RvIGVycm9y OwotCX0KLQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotc3RhdGljIGludCBkc2lfcGFuZWxfcGFy c2VfdGltaW5nKHN0cnVjdCBkc2lfbW9kZV9pbmZvICptb2RlLAotCQkJCSAgc3RydWN0IGRldmlj ZV9ub2RlICpvZl9ub2RlKQotewotCWludCByYyA9IDA7Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3Jl YWRfdTMyKG9mX25vZGUsICJxY29tLG1kc3MtZHNpLXBhbmVsLWZyYW1lcmF0ZSIsCi0JCQkJICAm bW9kZS0+cmVmcmVzaF9yYXRlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcmVh ZCBxY29tLG1kc3MtZHNpLXBhbmVsLWZyYW1lcmF0ZSwgcmM9JWRcbiIsCi0JCSAgICAgICByYyk7 Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2Rl LCAicWNvbSxtZHNzLWRzaS1wYW5lbC13aWR0aCIsCi0JCQkJICAmbW9kZS0+aF9hY3RpdmUpOwot CWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIHFjb20sbWRzcy1kc2ktcGFuZWwt d2lkdGgsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBvZl9wcm9w ZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS1oLWZyb250LXBvcmNoIiwKLQkJ CQkgICZtb2RlLT5oX2Zyb250X3BvcmNoKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQg dG8gcmVhZCBxY29tLG1kc3MtZHNpLWgtZnJvbnQtcG9yY2gsIHJjPSVkXG4iLAotCQkgICAgICAg cmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zf bm9kZSwgInFjb20sbWRzcy1kc2ktaC1iYWNrLXBvcmNoIiwKLQkJCQkgICZtb2RlLT5oX2JhY2tf cG9yY2gpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIHFjb20sbWRzcy1k c2ktaC1iYWNrLXBvcmNoLCByYz0lZFxuIiwKLQkJICAgICAgIHJjKTsKLQkJZ290byBlcnJvcjsK LQl9Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJxY29tLG1kc3MtZHNp LWgtcHVsc2Utd2lkdGgiLAotCQkJCSAgJm1vZGUtPmhfc3luY193aWR0aCk7Ci0JaWYgKHJjKSB7 Ci0JCXByX2VycigiZmFpbGVkIHRvIHJlYWQgcWNvbSxtZHNzLWRzaS1oLXB1bHNlLXdpZHRoLCBy Yz0lZFxuIiwKLQkJICAgICAgIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IG9mX3By b3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJxY29tLG1kc3MtZHNpLWgtc3luYy1za2V3IiwKLQkJ CQkgICZtb2RlLT5oX3NrZXcpOwotCWlmIChyYykKLQkJcHJfZXJyKCJxY29tLG1kc3MtZHNpLWgt c3luYy1za2V3IGlzIG5vdCBkZWZpbmVkLCByYz0lZFxuIiwgcmMpOwotCi0JcmMgPSBvZl9wcm9w ZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS1wYW5lbC1oZWlnaHQiLAotCQkJ CSAgJm1vZGUtPnZfYWN0aXZlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcmVh ZCBxY29tLG1kc3MtZHNpLXBhbmVsLWhlaWdodCwgcmM9JWRcbiIsCi0JCSAgICAgICByYyk7Ci0J CWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAi cWNvbSxtZHNzLWRzaS12LWJhY2stcG9yY2giLAotCQkJCSAgJm1vZGUtPnZfYmFja19wb3JjaCk7 Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHJlYWQgcWNvbSxtZHNzLWRzaS12LWJh Y2stcG9yY2gsIHJjPSVkXG4iLAotCQkgICAgICAgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQot CXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktdi1mcm9u dC1wb3JjaCIsCi0JCQkJICAmbW9kZS0+dl9mcm9udF9wb3JjaCk7Ci0JaWYgKHJjKSB7Ci0JCXBy X2VycigiZmFpbGVkIHRvIHJlYWQgcWNvbSxtZHNzLWRzaS12LWJhY2stcG9yY2gsIHJjPSVkXG4i LAotCQkgICAgICAgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gb2ZfcHJvcGVydHlf cmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktdi1wdWxzZS13aWR0aCIsCi0JCQkJICAm bW9kZS0+dl9zeW5jX3dpZHRoKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcmVh ZCBxY29tLG1kc3MtZHNpLXYtcHVsc2Utd2lkdGgsIHJjPSVkXG4iLAotCQkgICAgICAgcmMpOwot CQlnb3RvIGVycm9yOwotCX0KLQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50 IGRzaV9wYW5lbF9wYXJzZV9waXhlbF9mb3JtYXQoc3RydWN0IGRzaV9ob3N0X2NvbW1vbl9jZmcg Kmhvc3QsCi0JCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSwKLQkJCQkJY29uc3QgY2hh ciAqbmFtZSkKLXsKLQlpbnQgcmMgPSAwOwotCXUzMiBicHAgPSAwOwotCWVudW0gZHNpX3BpeGVs X2Zvcm1hdCBmbXQ7Ci0JY29uc3QgY2hhciAqcGFja2luZzsKLQotCXJjID0gb2ZfcHJvcGVydHlf cmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktYnBwIiwgJmJwcCk7Ci0JaWYgKHJjKSB7 Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gcmVhZCBxY29tLG1kc3MtZHNpLWJwcCwgcmM9JWRc biIsCi0JCSAgICAgICBuYW1lLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlzd2l0Y2ggKGJw cCkgewotCWNhc2UgMzoKLQkJZm10ID0gRFNJX1BJWEVMX0ZPUk1BVF9SR0IxMTE7Ci0JCWJyZWFr OwotCWNhc2UgODoKLQkJZm10ID0gRFNJX1BJWEVMX0ZPUk1BVF9SR0IzMzI7Ci0JCWJyZWFrOwot CWNhc2UgMTI6Ci0JCWZtdCA9IERTSV9QSVhFTF9GT1JNQVRfUkdCNDQ0OwotCQlicmVhazsKLQlj YXNlIDE2OgotCQlmbXQgPSBEU0lfUElYRUxfRk9STUFUX1JHQjU2NTsKLQkJYnJlYWs7Ci0JY2Fz ZSAxODoKLQkJZm10ID0gRFNJX1BJWEVMX0ZPUk1BVF9SR0I2NjY7Ci0JCWJyZWFrOwotCWNhc2Ug MjQ6Ci0JZGVmYXVsdDoKLQkJZm10ID0gRFNJX1BJWEVMX0ZPUk1BVF9SR0I4ODg7Ci0JCWJyZWFr OwotCX0KLQotCWlmIChmbXQgPT0gRFNJX1BJWEVMX0ZPUk1BVF9SR0I2NjYpIHsKLQkJcGFja2lu ZyA9IG9mX2dldF9wcm9wZXJ0eShvZl9ub2RlLAotCQkJCQkgICJxY29tLG1kc3MtZHNpLXBpeGVs LXBhY2tpbmciLAotCQkJCQkgIE5VTEwpOwotCQlpZiAocGFja2luZyAmJiAhc3RyY21wKHBhY2tp bmcsICJsb29zZSIpKQotCQkJZm10ID0gRFNJX1BJWEVMX0ZPUk1BVF9SR0I2NjZfTE9PU0U7Ci0J fQotCi0JaG9zdC0+ZHN0X2Zvcm1hdCA9IGZtdDsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBp bnQgZHNpX3BhbmVsX3BhcnNlX2xhbmVfc3RhdGVzKHN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2Zn ICpob3N0LAotCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUsCi0JCQkJICAg ICAgIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JaW50IHJjID0gMDsKLQlib29sIGxhbmVfZW5hYmxl ZDsKLQotCWxhbmVfZW5hYmxlZCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChvZl9ub2RlLAotCQkJ CQkgICAgInFjb20sbWRzcy1kc2ktbGFuZS0wLXN0YXRlIik7Ci0JaG9zdC0+ZGF0YV9sYW5lcyB8 PSAobGFuZV9lbmFibGVkID8gRFNJX0RBVEFfTEFORV8wIDogMCk7Ci0KLQlsYW5lX2VuYWJsZWQg PSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJCQkJICAgICAicWNvbSxtZHNzLWRz aS1sYW5lLTEtc3RhdGUiKTsKLQlob3N0LT5kYXRhX2xhbmVzIHw9IChsYW5lX2VuYWJsZWQgPyBE U0lfREFUQV9MQU5FXzEgOiAwKTsKLQotCWxhbmVfZW5hYmxlZCA9IG9mX3Byb3BlcnR5X3JlYWRf Ym9vbChvZl9ub2RlLAotCQkJCQkgICAgInFjb20sbWRzcy1kc2ktbGFuZS0yLXN0YXRlIik7Ci0J aG9zdC0+ZGF0YV9sYW5lcyB8PSAobGFuZV9lbmFibGVkID8gRFNJX0RBVEFfTEFORV8yIDogMCk7 Ci0KLQlsYW5lX2VuYWJsZWQgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJCQkJ ICAgICAicWNvbSxtZHNzLWRzaS1sYW5lLTMtc3RhdGUiKTsKLQlob3N0LT5kYXRhX2xhbmVzIHw9 IChsYW5lX2VuYWJsZWQgPyBEU0lfREFUQV9MQU5FXzMgOiAwKTsKLQotCWlmIChob3N0LT5kYXRh X2xhbmVzID09IDApIHsKLQkJcHJfZXJyKCJbJXNdIE5vIGRhdGEgbGFuZXMgYXJlIGVuYWJsZWQs IHJjPSVkXG4iLCBuYW1lLCByYyk7Ci0JCXJjID0gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gcmM7 Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX3BhcnNlX2NvbG9yX3N3YXAoc3RydWN0IGRzaV9o b3N0X2NvbW1vbl9jZmcgKmhvc3QsCi0JCQkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpvZl9u b2RlLAotCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JaW50IHJjID0gMDsKLQljb25z dCBjaGFyICpzd2FwX21vZGU7Ci0KLQlzd2FwX21vZGUgPSBvZl9nZXRfcHJvcGVydHkob2Zfbm9k ZSwgInFjb20sbWRzcy1kc2ktY29sb3Itb3JkZXIiLCBOVUxMKTsKLQlpZiAoc3dhcF9tb2RlKSB7 Ci0JCWlmICghc3RyY21wKHN3YXBfbW9kZSwgInJnYl9zd2FwX3JnYiIpKSB7Ci0JCQlob3N0LT5z d2FwX21vZGUgPSBEU0lfQ09MT1JfU1dBUF9SR0I7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcChzd2Fw X21vZGUsICJyZ2Jfc3dhcF9yYmciKSkgewotCQkJaG9zdC0+c3dhcF9tb2RlID0gRFNJX0NPTE9S X1NXQVBfUkJHOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAoc3dhcF9tb2RlLCAicmdiX3N3YXBfYnJn IikpIHsKLQkJCWhvc3QtPnN3YXBfbW9kZSA9IERTSV9DT0xPUl9TV0FQX0JSRzsKLQkJfSBlbHNl IGlmICghc3RyY21wKHN3YXBfbW9kZSwgInJnYl9zd2FwX2dyYiIpKSB7Ci0JCQlob3N0LT5zd2Fw X21vZGUgPSBEU0lfQ09MT1JfU1dBUF9HUkI7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcChzd2FwX21v ZGUsICJyZ2Jfc3dhcF9nYnIiKSkgewotCQkJaG9zdC0+c3dhcF9tb2RlID0gRFNJX0NPTE9SX1NX QVBfR0JSOwotCQl9IGVsc2UgewotCQkJcHJfZXJyKCJbJXNdIFVucmVjb2duaXplZCBjb2xvciBv cmRlci0lc1xuIiwKLQkJCSAgICAgICBuYW1lLCBzd2FwX21vZGUpOwotCQkJcmMgPSAtRUlOVkFM OwotCQl9Ci0JfSBlbHNlIHsKLQkJcHJfZGVidWcoIlslc10gRmFsbGluZyBiYWNrIHRvIGRlZmF1 bHQgY29sb3Igb3JkZXJcbiIsIG5hbWUpOwotCQlob3N0LT5zd2FwX21vZGUgPSBEU0lfQ09MT1Jf U1dBUF9SR0I7Ci0JfQotCi0JLyogYml0IHN3YXAgb24gY29sb3IgY2hhbm5lbCBpcyBub3QgZGVm aW5lZCBpbiBkdCAqLwotCWhvc3QtPmJpdF9zd2FwX3JlZCA9IGZhbHNlOwotCWhvc3QtPmJpdF9z d2FwX2dyZWVuID0gZmFsc2U7Ci0JaG9zdC0+Yml0X3N3YXBfYmx1ZSA9IGZhbHNlOwotCXJldHVy biByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGFuZWxfcGFyc2VfdHJpZ2dlcnMoc3RydWN0IGRz aV9ob3N0X2NvbW1vbl9jZmcgKmhvc3QsCi0JCQkJICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zf bm9kZSwKLQkJCQkgICAgY29uc3QgY2hhciAqbmFtZSkKLXsKLQljb25zdCBjaGFyICp0cmlnOwot CWludCByYyA9IDA7Ci0KLQl0cmlnID0gb2ZfZ2V0X3Byb3BlcnR5KG9mX25vZGUsICJxY29tLG1k c3MtZHNpLW1kcC10cmlnZ2VyIiwgTlVMTCk7Ci0JaWYgKHRyaWcpIHsKLQkJaWYgKCFzdHJjbXAo dHJpZywgIm5vbmUiKSkgewotCQkJaG9zdC0+bWRwX2NtZF90cmlnZ2VyID0gRFNJX1RSSUdHRVJf Tk9ORTsKLQkJfSBlbHNlIGlmICghc3RyY21wKHRyaWcsICJ0cmlnZ2VyX3RlIikpIHsKLQkJCWhv c3QtPm1kcF9jbWRfdHJpZ2dlciA9IERTSV9UUklHR0VSX1RFOwotCQl9IGVsc2UgaWYgKCFzdHJj bXAodHJpZywgInRyaWdnZXJfc3ciKSkgewotCQkJaG9zdC0+bWRwX2NtZF90cmlnZ2VyID0gRFNJ X1RSSUdHRVJfU1c7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcCh0cmlnLCAidHJpZ2dlcl9zd190ZSIp KSB7Ci0JCQlob3N0LT5tZHBfY21kX3RyaWdnZXIgPSBEU0lfVFJJR0dFUl9TV19URTsKLQkJfSBl bHNlIHsKLQkJCXByX2VycigiWyVzXSBVbnJlY29nbml6ZWQgbWRwIHRyaWdnZXIgdHlwZSAoJXMp XG4iLAotCQkJICAgICAgIG5hbWUsIHRyaWcpOwotCQkJcmMgPSAtRUlOVkFMOwotCQl9Ci0KLQl9 IGVsc2UgewotCQlwcl9kZWJ1ZygiWyVzXSBGYWxsaW5nIGJhY2sgdG8gZGVmYXVsdCBNRFAgdHJp Z2dlclxuIiwKLQkJCSBuYW1lKTsKLQkJaG9zdC0+bWRwX2NtZF90cmlnZ2VyID0gRFNJX1RSSUdH RVJfU1c7Ci0JfQotCi0JdHJpZyA9IG9mX2dldF9wcm9wZXJ0eShvZl9ub2RlLCAicWNvbSxtZHNz LWRzaS1kbWEtdHJpZ2dlciIsIE5VTEwpOwotCWlmICh0cmlnKSB7Ci0JCWlmICghc3RyY21wKHRy aWcsICJub25lIikpIHsKLQkJCWhvc3QtPmRtYV9jbWRfdHJpZ2dlciA9IERTSV9UUklHR0VSX05P TkU7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcCh0cmlnLCAidHJpZ2dlcl90ZSIpKSB7Ci0JCQlob3N0 LT5kbWFfY21kX3RyaWdnZXIgPSBEU0lfVFJJR0dFUl9URTsKLQkJfSBlbHNlIGlmICghc3RyY21w KHRyaWcsICJ0cmlnZ2VyX3N3IikpIHsKLQkJCWhvc3QtPmRtYV9jbWRfdHJpZ2dlciA9IERTSV9U UklHR0VSX1NXOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAodHJpZywgInRyaWdnZXJfc3dfc2VvZiIp KSB7Ci0JCQlob3N0LT5kbWFfY21kX3RyaWdnZXIgPSBEU0lfVFJJR0dFUl9TV19TRU9GOwotCQl9 IGVsc2UgaWYgKCFzdHJjbXAodHJpZywgInRyaWdnZXJfc3dfdGUiKSkgewotCQkJaG9zdC0+ZG1h X2NtZF90cmlnZ2VyID0gRFNJX1RSSUdHRVJfU1dfVEU7Ci0JCX0gZWxzZSB7Ci0JCQlwcl9lcnIo Ilslc10gVW5yZWNvZ25pemVkIG1kcCB0cmlnZ2VyIHR5cGUgKCVzKVxuIiwKLQkJCSAgICAgICBu YW1lLCB0cmlnKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJfQotCi0JfSBlbHNlIHsKLQkJcHJfZGVi dWcoIlslc10gRmFsbGluZyBiYWNrIHRvIGRlZmF1bHQgTURQIHRyaWdnZXJcbiIsIG5hbWUpOwot CQlob3N0LT5kbWFfY21kX3RyaWdnZXIgPSBEU0lfVFJJR0dFUl9TVzsKLQl9Ci0KLQlyYyA9IG9m X3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJxY29tLG1kc3MtZHNpLXRlLXBpbi1zZWxlY3Qi LAotCQkJJmhvc3QtPnRlX21vZGUpOwotCWlmIChyYykgewotCQlwcl93YXJuKCJbJXNdIGZhbGxi YWNrIHRvIGRlZmF1bHQgdGUtcGluLXNlbGVjdFxuIiwgbmFtZSk7Ci0JCWhvc3QtPnRlX21vZGUg PSAxOwotCQlyYyA9IDA7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9w YW5lbF9wYXJzZV9taXNjX2hvc3RfY29uZmlnKHN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnICpo b3N0LAotCQkJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlLAotCQkJCQkgICAgY29u c3QgY2hhciAqbmFtZSkKLXsKLQl1MzIgdmFsID0gMDsKLQlpbnQgcmMgPSAwOwotCi0JcmMgPSBv Zl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS10LWNsay1wb3N0Iiwg JnZhbCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2RlYnVnKCJbJXNdIEZhbGxiYWNrIHRvIGRlZmF1bHQg dF9jbGtfcG9zdCB2YWx1ZVxuIiwgbmFtZSk7Ci0JCWhvc3QtPnRfY2xrX3Bvc3QgPSAweDAzOwot CX0gZWxzZSB7Ci0JCWhvc3QtPnRfY2xrX3Bvc3QgPSB2YWw7Ci0JCXByX2RlYnVnKCJbJXNdIHRf Y2xrX3Bvc3QgPSAlZFxuIiwgbmFtZSwgdmFsKTsKLQl9Ci0KLQl2YWwgPSAwOwotCXJjID0gb2Zf cHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktdC1jbGstcHJlIiwgJnZh bCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2RlYnVnKCJbJXNdIEZhbGxiYWNrIHRvIGRlZmF1bHQgdF9j bGtfcHJlIHZhbHVlXG4iLCBuYW1lKTsKLQkJaG9zdC0+dF9jbGtfcHJlID0gMHgyNDsKLQl9IGVs c2UgewotCQlob3N0LT50X2Nsa19wcmUgPSB2YWw7Ci0JCXByX2RlYnVnKCJbJXNdIHRfY2xrX3By ZSA9ICVkXG4iLCBuYW1lLCB2YWwpOwotCX0KLQotCWhvc3QtPmlnbm9yZV9yeF9lb3QgPSBvZl9w cm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJCQkJCSJxY29tLG1kc3MtZHNpLXJ4LWVvdC1p Z25vcmUiKTsKLQotCWhvc3QtPmFwcGVuZF90eF9lb3QgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wo b2Zfbm9kZSwKLQkJCQkJCSJxY29tLG1kc3MtZHNpLXR4LWVvdC1hcHBlbmQiKTsKLQotCXJldHVy biAwOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9ob3N0X2NvbmZpZyhzdHJ1Y3Qg ZHNpX3BhbmVsICpwYW5lbCwKLQkJCQkgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2Rl KQotewotCWludCByYyA9IDA7Ci0KLQlyYyA9IGRzaV9wYW5lbF9wYXJzZV9waXhlbF9mb3JtYXQo JnBhbmVsLT5ob3N0X2NvbmZpZywgb2Zfbm9kZSwKLQkJCQkJICBwYW5lbC0+bmFtZSk7Ci0JaWYg KHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZ2V0IHBpeGVsIGZvcm1hdCwgcmM9JWRc biIsCi0JCXBhbmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBkc2lf cGFuZWxfcGFyc2VfbGFuZV9zdGF0ZXMoJnBhbmVsLT5ob3N0X2NvbmZpZywgb2Zfbm9kZSwKLQkJ CQkJIHBhbmVsLT5uYW1lKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBw YXJzZSBsYW5lIHN0YXRlcywgcmM9JWRcbiIsCi0JCSAgICAgICBwYW5lbC0+bmFtZSwgcmMpOwot CQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gZHNpX3BhbmVsX3BhcnNlX2NvbG9yX3N3YXAoJnBh bmVsLT5ob3N0X2NvbmZpZywgb2Zfbm9kZSwKLQkJCQkJcGFuZWwtPm5hbWUpOwotCWlmIChyYykg ewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHBhcnNlIGNvbG9yIHN3YXAgY29uZmlnLCByYz0l ZFxuIiwKLQkJICAgICAgIHBhbmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0J cmMgPSBkc2lfcGFuZWxfcGFyc2VfdHJpZ2dlcnMoJnBhbmVsLT5ob3N0X2NvbmZpZywgb2Zfbm9k ZSwKLQkJCQkgICAgICBwYW5lbC0+bmFtZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBm YWlsZWQgdG8gcGFyc2UgdHJpZ2dlcnMsIHJjPSVkXG4iLAotCQkgICAgICAgcGFuZWwtPm5hbWUs IHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF9wYXJzZV9taXNjX2hv c3RfY29uZmlnKCZwYW5lbC0+aG9zdF9jb25maWcsIG9mX25vZGUsCi0JCQkJCSAgICAgIHBhbmVs LT5uYW1lKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBwYXJzZSBtaXNj IGhvc3QgY29uZmlnLCByYz0lZFxuIiwKLQkJICAgICAgIHBhbmVsLT5uYW1lLCByYyk7Ci0JCWdv dG8gZXJyb3I7Ci0JfQotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNp X3BhbmVsX3BhcnNlX2RmcHNfY2FwcyhzdHJ1Y3QgZHNpX2RmcHNfY2FwYWJpbGl0aWVzICpkZnBz X2NhcHMsCi0JCQkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUsCi0JCQkJICAgICBj b25zdCBjaGFyICpuYW1lKQotewotCWludCByYyA9IDA7Ci0JYm9vbCBzdXBwb3J0ZWQgPSBmYWxz ZTsKLQljb25zdCBjaGFyICp0eXBlOwotCXUzMiB2YWwgPSAwOwotCi0Jc3VwcG9ydGVkID0gb2Zf cHJvcGVydHlfcmVhZF9ib29sKG9mX25vZGUsCi0JCQkJCSJxY29tLG1kc3MtZHNpLXBhbi1lbmFi bGUtZHluYW1pYy1mcHMiKTsKLQotCWlmICghc3VwcG9ydGVkKSB7Ci0JCXByX2RlYnVnKCJbJXNd IERGUFMgaXMgbm90IHN1cHBvcnRlZFxuIiwgbmFtZSk7Ci0JCWRmcHNfY2Fwcy0+ZGZwc19zdXBw b3J0ID0gZmFsc2U7Ci0JfSBlbHNlIHsKLQotCQl0eXBlID0gb2ZfZ2V0X3Byb3BlcnR5KG9mX25v ZGUsCi0JCQkJICAgICAgICJxY29tLG1kc3MtZHNpLXBhbi1mcHMtdXBkYXRlIiwKLQkJCQkgICAg ICAgTlVMTCk7Ci0JCWlmICghdHlwZSkgewotCQkJcHJfZXJyKCJbJXNdIGRmcHMgdHlwZSBub3Qg ZGVmaW5lZFxuIiwgbmFtZSk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVycm9yOwotCQl9 IGVsc2UgaWYgKCFzdHJjbXAodHlwZSwgImRmcHNfc3VzcGVuZF9yZXN1bWVfbW9kZSIpKSB7Ci0J CQlkZnBzX2NhcHMtPnR5cGUgPSBEU0lfREZQU19TVVNQRU5EX1JFU1VNRTsKLQkJfSBlbHNlIGlm ICghc3RyY21wKHR5cGUsICJkZnBzX2ltbWVkaWF0ZV9jbGtfbW9kZSIpKSB7Ci0JCQlkZnBzX2Nh cHMtPnR5cGUgPSBEU0lfREZQU19JTU1FRElBVEVfQ0xLOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAo dHlwZSwgImRmcHNfaW1tZWRpYXRlX3BvcmNoX21vZGVfaGZwIikpIHsKLQkJCWRmcHNfY2Fwcy0+ dHlwZSA9IERTSV9ERlBTX0lNTUVESUFURV9IRlA7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcCh0eXBl LCAiZGZwc19pbW1lZGlhdGVfcG9yY2hfbW9kZV92ZnAiKSkgewotCQkJZGZwc19jYXBzLT50eXBl ID0gRFNJX0RGUFNfSU1NRURJQVRFX1ZGUDsKLQkJfSBlbHNlIHsKLQkJCXByX2VycigiWyVzXSBk ZnBzIHR5cGUgaXMgbm90IHJlY29nbml6ZWRcbiIsIG5hbWUpOwotCQkJcmMgPSAtRUlOVkFMOwot CQkJZ290byBlcnJvcjsKLQkJfQotCi0JCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9k ZSwKLQkJCQkJICAicWNvbSxtZHNzLWRzaS1taW4tcmVmcmVzaC1yYXRlIiwKLQkJCQkJICAmdmFs KTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gTWluIHJlZnJlc2ggcmF0ZSBpcyBub3Qg ZGVmaW5lZFxuIiwgbmFtZSk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVycm9yOwotCQl9 Ci0JCWRmcHNfY2Fwcy0+bWluX3JlZnJlc2hfcmF0ZSA9IHZhbDsKLQotCQlyYyA9IG9mX3Byb3Bl cnR5X3JlYWRfdTMyKG9mX25vZGUsCi0JCQkJCSAgInFjb20sbWRzcy1kc2ktbWF4LXJlZnJlc2gt cmF0ZSIsCi0JCQkJCSAgJnZhbCk7Ci0JCWlmIChyYykgewotCQkJcHJfZGVidWcoIlslc10gVXNp bmcgZGVmYXVsdCByZWZyZXNoIHJhdGVcbiIsIG5hbWUpOwotCQkJcmMgPSBvZl9wcm9wZXJ0eV9y ZWFkX3UzMihvZl9ub2RlLAotCQkJCQkJInFjb20sbWRzcy1kc2ktcGFuZWwtZnJhbWVyYXRlIiwK LQkJCQkJCSZ2YWwpOwotCQkJaWYgKHJjKSB7Ci0JCQkJcHJfZXJyKCJbJXNdIG1heCByZWZyZXNo IHJhdGUgaXMgbm90IGRlZmluZWRcbiIsCi0JCQkJICAgICAgIG5hbWUpOwotCQkJCXJjID0gLUVJ TlZBTDsKLQkJCQlnb3RvIGVycm9yOwotCQkJfQotCQl9Ci0JCWRmcHNfY2Fwcy0+bWF4X3JlZnJl c2hfcmF0ZSA9IHZhbDsKLQotCQlpZiAoZGZwc19jYXBzLT5taW5fcmVmcmVzaF9yYXRlID4gZGZw c19jYXBzLT5tYXhfcmVmcmVzaF9yYXRlKSB7Ci0JCQlwcl9lcnIoIlslc10gbWluIHJhdGUgPiBt YXggcmF0ZVxuIiwgbmFtZSk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCX0KLQotCQlwcl9kZWJ1Zygi WyVzXSBERlBTIGlzIHN1cHBvcnRlZCAlZC0lZCwgbW9kZSAlZFxuIiwgbmFtZSwKLQkJCQlkZnBz X2NhcHMtPm1pbl9yZWZyZXNoX3JhdGUsCi0JCQkJZGZwc19jYXBzLT5tYXhfcmVmcmVzaF9yYXRl LAotCQkJCWRmcHNfY2Fwcy0+dHlwZSk7Ci0JCWRmcHNfY2Fwcy0+ZGZwc19zdXBwb3J0ID0gdHJ1 ZTsKLQl9Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGFuZWxf cGFyc2VfdmlkZW9faG9zdF9jb25maWcoc3RydWN0IGRzaV92aWRlb19lbmdpbmVfY2ZnICpjZmcs Ci0JCQkJCSAgICAgc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlLAotCQkJCQkgICAgIGNvbnN0 IGNoYXIgKm5hbWUpCi17Ci0JaW50IHJjID0gMDsKLQljb25zdCBjaGFyICp0cmFmZmljX21vZGU7 Ci0JdTMyIHZjX2lkID0gMDsKLQl1MzIgdmFsID0gMDsKLQotCXJjID0gb2ZfcHJvcGVydHlfcmVh ZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktaC1zeW5jLXB1bHNlIiwgJnZhbCk7Ci0JaWYg KHJjKSB7Ci0JCXByX2RlYnVnKCJbJXNdIGZhbGxiYWNrIHRvIGRlZmF1bHQgaC1zeW5jLXB1bHNl XG4iLCBuYW1lKTsKLQkJY2ZnLT5wdWxzZV9tb2RlX2hzYV9oZSA9IGZhbHNlOwotCX0gZWxzZSBp ZiAodmFsID09IDEpIHsKLQkJY2ZnLT5wdWxzZV9tb2RlX2hzYV9oZSA9IHRydWU7Ci0JfSBlbHNl IGlmICh2YWwgPT0gMCkgewotCQljZmctPnB1bHNlX21vZGVfaHNhX2hlID0gZmFsc2U7Ci0JfSBl bHNlIHsKLQkJcHJfZXJyKCJbJXNdIFVucmVjb2duaXplZCB2YWx1ZSBmb3IgbWRzcy1kc2ktaC1z eW5jLXB1bHNlXG4iLAotCQkgICAgICAgbmFtZSk7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBl cnJvcjsKLQl9Ci0KLQljZmctPmhmcF9scDExX2VuID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG9m X25vZGUsCi0JCQkJCQkicWNvbSxtZHNzLWRzaS1oZnAtcG93ZXItbW9kZSIpOwotCi0JY2ZnLT5o YnBfbHAxMV9lbiA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChvZl9ub2RlLAotCQkJCQkJInFjb20s bWRzcy1kc2ktaGJwLXBvd2VyLW1vZGUiKTsKLQotCWNmZy0+aHNhX2xwMTFfZW4gPSBvZl9wcm9w ZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJCQkJCSJxY29tLG1kc3MtZHNpLWhzYS1wb3dlci1t b2RlIik7Ci0KLQljZmctPmxhc3RfbGluZV9pbnRlcmxlYXZlX2VuID0gb2ZfcHJvcGVydHlfcmVh ZF9ib29sKG9mX25vZGUsCi0JCQkJCSJxY29tLG1kc3MtZHNpLWxhc3QtbGluZS1pbnRlcmxlYXZl Iik7Ci0KLQljZmctPmVvZl9ibGxwX2xwMTFfZW4gPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zf bm9kZSwKLQkJCQkJInFjb20sbWRzcy1kc2ktYmxscC1lb2YtcG93ZXItbW9kZSIpOwotCi0JY2Zn LT5ibGxwX2xwMTFfZW4gPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJCQkJInFj b20sbWRzcy1kc2ktYmxscC1wb3dlci1tb2RlIik7Ci0KLQl0cmFmZmljX21vZGUgPSBvZl9nZXRf cHJvcGVydHkob2Zfbm9kZSwKLQkJCQkgICAgICAgInFjb20sbWRzcy1kc2ktdHJhZmZpYy1tb2Rl IiwKLQkJCQkgICAgICAgTlVMTCk7Ci0JaWYgKCF0cmFmZmljX21vZGUpIHsKLQkJcHJfZGVidWco Ilslc10gRmFsbGluZyBiYWNrIHRvIGRlZmF1bHQgdHJhZmZpYyBtb2RlXG4iLCBuYW1lKTsKLQkJ Y2ZnLT50cmFmZmljX21vZGUgPSBEU0lfVklERU9fVFJBRkZJQ19TWU5DX1BVTFNFUzsKLQl9IGVs c2UgaWYgKCFzdHJjbXAodHJhZmZpY19tb2RlLCAibm9uX2J1cnN0X3N5bmNfcHVsc2UiKSkgewot CQljZmctPnRyYWZmaWNfbW9kZSA9IERTSV9WSURFT19UUkFGRklDX1NZTkNfUFVMU0VTOwotCX0g ZWxzZSBpZiAoIXN0cmNtcCh0cmFmZmljX21vZGUsICJub25fYnVyc3Rfc3luY19ldmVudCIpKSB7 Ci0JCWNmZy0+dHJhZmZpY19tb2RlID0gRFNJX1ZJREVPX1RSQUZGSUNfU1lOQ19TVEFSVF9FVkVO VFM7Ci0JfSBlbHNlIGlmICghc3RyY21wKHRyYWZmaWNfbW9kZSwgImJ1cnN0X21vZGUiKSkgewot CQljZmctPnRyYWZmaWNfbW9kZSA9IERTSV9WSURFT19UUkFGRklDX0JVUlNUX01PREU7Ci0JfSBl bHNlIHsKLQkJcHJfZXJyKCJbJXNdIFVucmVjb2duaXplZCB0cmFmZmljIG1vZGUtJXNcbiIsIG5h bWUsCi0JCSAgICAgICB0cmFmZmljX21vZGUpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJy b3I7Ci0JfQotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNz LWRzaS12aXJ0dWFsLWNoYW5uZWwtaWQiLAotCQkJCSAgJnZjX2lkKTsKLQlpZiAocmMpIHsKLQkJ cHJfZGVidWcoIlslc10gRmFsbGJhY2sgdG8gZGVmYXVsdCB2YyBpZFxuIiwgbmFtZSk7Ci0JCWNm Zy0+dmNfaWQgPSAwOwotCX0gZWxzZSB7Ci0JCWNmZy0+dmNfaWQgPSB2Y19pZDsKLQl9Ci0KLWVy cm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGFuZWxfcGFyc2VfY21kX2hv c3RfY29uZmlnKHN0cnVjdCBkc2lfY21kX2VuZ2luZV9jZmcgKmNmZywKLQkJCQkJICAgc3RydWN0 IGRldmljZV9ub2RlICpvZl9ub2RlLAotCQkJCQkgICBjb25zdCBjaGFyICpuYW1lKQotewotCXUz MiB2YWwgPSAwOwotCWludCByYyA9IDA7Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9m X25vZGUsICJxY29tLG1kc3MtZHNpLXdyLW1lbS1zdGFydCIsICZ2YWwpOwotCWlmIChyYykgewot CQlwcl9kZWJ1ZygiWyVzXSBGYWxsYmFjayB0byBkZWZhdWx0IHdyLW1lbS1zdGFydFxuIiwgbmFt ZSk7Ci0JCWNmZy0+d3JfbWVtX3N0YXJ0ID0gMHgyQzsKLQl9IGVsc2UgewotCQljZmctPndyX21l bV9zdGFydCA9IHZhbDsKLQl9Ci0KLQl2YWwgPSAwOwotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91 MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktd3ItbWVtLWNvbnRpbnVlIiwKLQkJCQkgICZ2YWwp OwotCWlmIChyYykgewotCQlwcl9kZWJ1ZygiWyVzXSBGYWxsYmFjayB0byBkZWZhdWx0IHdyLW1l bS1jb250aW51ZVxuIiwgbmFtZSk7Ci0JCWNmZy0+d3JfbWVtX2NvbnRpbnVlID0gMHgzQzsKLQl9 IGVsc2UgewotCQljZmctPndyX21lbV9jb250aW51ZSA9IHZhbDsKLQl9Ci0KLQkvKiBUT0RPOiAg Zml4IGZvbGxvd2luZyAqLwotCWNmZy0+bWF4X2NtZF9wYWNrZXRzX2ludGVybGVhdmUgPSAwOwot Ci0JdmFsID0gMDsKLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJxY29tLG1k c3MtZHNpLXRlLWRjcy1jb21tYW5kIiwKLQkJCQkgICZ2YWwpOwotCWlmIChyYykgewotCQlwcl9k ZWJ1ZygiWyVzXSBmYWxsYmFjayB0byBkZWZhdWx0IHRlLWRjcy1jbWRcbiIsIG5hbWUpOwotCQlj ZmctPmluc2VydF9kY3NfY29tbWFuZCA9IHRydWU7Ci0JfSBlbHNlIGlmICh2YWwgPT0gMSkgewot CQljZmctPmluc2VydF9kY3NfY29tbWFuZCA9IHRydWU7Ci0JfSBlbHNlIGlmICh2YWwgPT0gMCkg ewotCQljZmctPmluc2VydF9kY3NfY29tbWFuZCA9IGZhbHNlOwotCX0gZWxzZSB7Ci0JCXByX2Vy cigiWyVzXSBVbnJlY29nbml6ZWQgdmFsdWUgZm9yIG1kc3MtZHNpLXRlLWRjcy1jb21tYW5kXG4i LAotCQkgICAgICAgbmFtZSk7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0K LQlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1tZHAtdHJhbnNm ZXItdGltZS11cyIsCi0JCQkJJnZhbCkpIHsKLQkJcHJfZGVidWcoIlslc10gRmFsbGJhY2sgdG8g ZGVmYXVsdCB0cmFuc2Zlci10aW1lLXVzXG4iLCBuYW1lKTsKLQkJY2ZnLT5tZHBfdHJhbnNmZXJf dGltZV91cyA9IERFRkFVTFRfTURQX1RSQU5TRkVSX1RJTUU7Ci0JfSBlbHNlIHsKLQkJY2ZnLT5t ZHBfdHJhbnNmZXJfdGltZV91cyA9IHZhbDsKLQl9Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0K LQotc3RhdGljIGludCBkc2lfcGFuZWxfcGFyc2VfcGFuZWxfbW9kZShzdHJ1Y3QgZHNpX3BhbmVs ICpwYW5lbCwKLQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpCi17Ci0JaW50 IHJjID0gMDsKLQllbnVtIGRzaV9vcF9tb2RlIHBhbmVsX21vZGU7Ci0JY29uc3QgY2hhciAqbW9k ZTsKLQotCW1vZGUgPSBvZl9nZXRfcHJvcGVydHkob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktcGFu ZWwtdHlwZSIsIE5VTEwpOwotCWlmICghbW9kZSkgewotCQlwcl9kZWJ1ZygiWyVzXSBGYWxsYmFj ayB0byBkZWZhdWx0IHBhbmVsIG1vZGVcbiIsIHBhbmVsLT5uYW1lKTsKLQkJcGFuZWxfbW9kZSA9 IERTSV9PUF9WSURFT19NT0RFOwotCX0gZWxzZSBpZiAoIXN0cmNtcChtb2RlLCAiZHNpX3ZpZGVv X21vZGUiKSkgewotCQlwYW5lbF9tb2RlID0gRFNJX09QX1ZJREVPX01PREU7Ci0JfSBlbHNlIGlm ICghc3RyY21wKG1vZGUsICJkc2lfY21kX21vZGUiKSkgewotCQlwYW5lbF9tb2RlID0gRFNJX09Q X0NNRF9NT0RFOwotCX0gZWxzZSB7Ci0JCXByX2VycigiWyVzXSBVbnJlY29nbml6ZWQgcGFuZWwg dHlwZS0lc1xuIiwgcGFuZWwtPm5hbWUsIG1vZGUpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8g ZXJyb3I7Ci0JfQotCi0JaWYgKHBhbmVsX21vZGUgPT0gRFNJX09QX1ZJREVPX01PREUpIHsKLQkJ cmMgPSBkc2lfcGFuZWxfcGFyc2VfdmlkZW9faG9zdF9jb25maWcoJnBhbmVsLT52aWRlb19jb25m aWcsCi0JCQkJCQkgICAgICAgb2Zfbm9kZSwKLQkJCQkJCSAgICAgICBwYW5lbC0+bmFtZSk7Ci0J CWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIEZhaWxlZCB0byBwYXJzZSB2aWRlbyBob3N0IGNm ZywgcmM9JWRcbiIsCi0JCQkgICAgICAgcGFuZWwtPm5hbWUsIHJjKTsKLQkJCWdvdG8gZXJyb3I7 Ci0JCX0KLQl9Ci0KLQlpZiAocGFuZWxfbW9kZSA9PSBEU0lfT1BfQ01EX01PREUpIHsKLQkJcmMg PSBkc2lfcGFuZWxfcGFyc2VfY21kX2hvc3RfY29uZmlnKCZwYW5lbC0+Y21kX2NvbmZpZywKLQkJ CQkJCSAgICAgb2Zfbm9kZSwKLQkJCQkJCSAgICAgcGFuZWwtPm5hbWUpOwotCQlpZiAocmMpIHsK LQkJCXByX2VycigiWyVzXSBGYWlsZWQgdG8gcGFyc2UgY21kIGhvc3QgY29uZmlnLCByYz0lZFxu IiwKLQkJCSAgICAgICBwYW5lbC0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0K LQotCXBhbmVsLT5wYW5lbF9tb2RlID0gcGFuZWxfbW9kZTsKLWVycm9yOgotCXJldHVybiByYzsK LX0KLQotc3RhdGljIGludCBkc2lfcGFuZWxfcGFyc2VfcGh5X3Byb3BzKHN0cnVjdCBkc2lfcGFu ZWxfcGh5X3Byb3BzICpwcm9wcywKLQkJCQkgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9k ZSwKLQkJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JaW50IHJjID0gMDsKLQl1MzIgdmFs ID0gMDsKLQljb25zdCBjaGFyICpzdHI7Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9m X25vZGUsCi0JCQkJICAicWNvbSxtZHNzLXBhbi1waHlzaWNhbC13aWR0aC1kaW1lbnNpb24iLAot CQkJCSAgJnZhbCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2RlYnVnKCJbJXNdIFBoeXNpY2FsIHBhbmVs IHdpZHRoIGlzIG5vdCBkZWZpbmVkXG4iLCBuYW1lKTsKLQkJcHJvcHMtPnBhbmVsX3dpZHRoX21t ID0gMDsKLQkJcmMgPSAwOwotCX0gZWxzZSB7Ci0JCXByb3BzLT5wYW5lbF93aWR0aF9tbSA9IHZh bDsKLQl9Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsCi0JCQkJICAicWNv bSxtZHNzLXBhbi1waHlzaWNhbC1oZWlnaHQtZGltZW5zaW9uIiwKLQkJCQkgICZ2YWwpOwotCWlm IChyYykgewotCQlwcl9kZWJ1ZygiWyVzXSBQaHlzaWNhbCBwYW5lbCBoZWlnaHQgaXMgbm90IGRl ZmluZWRcbiIsIG5hbWUpOwotCQlwcm9wcy0+cGFuZWxfaGVpZ2h0X21tID0gMDsKLQkJcmMgPSAw OwotCX0gZWxzZSB7Ci0JCXByb3BzLT5wYW5lbF9oZWlnaHRfbW0gPSB2YWw7Ci0JfQotCi0Jc3Ry ID0gb2ZfZ2V0X3Byb3BlcnR5KG9mX25vZGUsICJxY29tLG1kc3MtZHNpLXBhbmVsLW9yaWVudGF0 aW9uIiwgTlVMTCk7Ci0JaWYgKCFzdHIpIHsKLQkJcHJvcHMtPnJvdGF0aW9uID0gRFNJX1BBTkVM X1JPVEFURV9OT05FOwotCX0gZWxzZSBpZiAoIXN0cmNtcChzdHIsICIxODAiKSkgewotCQlwcm9w cy0+cm90YXRpb24gPSBEU0lfUEFORUxfUk9UQVRFX0hWX0ZMSVA7Ci0JfSBlbHNlIGlmICghc3Ry Y21wKHN0ciwgImhmbGlwIikpIHsKLQkJcHJvcHMtPnJvdGF0aW9uID0gRFNJX1BBTkVMX1JPVEFU RV9IX0ZMSVA7Ci0JfSBlbHNlIGlmICghc3RyY21wKHN0ciwgInZmbGlwIikpIHsKLQkJcHJvcHMt PnJvdGF0aW9uID0gRFNJX1BBTkVMX1JPVEFURV9WX0ZMSVA7Ci0JfSBlbHNlIHsKLQkJcHJfZXJy KCJbJXNdIFVucmVjb2duaXplZCBwYW5lbCByb3RhdGlvbi0lc1xuIiwgbmFtZSwgc3RyKTsKLQkJ cmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOwotCX0KLWVycm9yOgotCXJldHVybiByYzsKLX0K LWNvbnN0IGNoYXIgKmNtZF9zZXRfcHJvcF9tYXBbRFNJX0NNRF9TRVRfTUFYXSA9IHsKLQkicWNv bSxtZHNzLWRzaS1wcmUtb24tY29tbWFuZCIsCi0JInFjb20sbWRzcy1kc2ktb24tY29tbWFuZCIs Ci0JInFjb20sbWRzcy1kc2ktcG9zdC1wYW5lbC1vbi1jb21tYW5kIiwKLQkicWNvbSxtZHNzLWRz aS1wcmUtb2ZmLWNvbW1hbmQiLAotCSJxY29tLG1kc3MtZHNpLW9mZi1jb21tYW5kIiwKLQkicWNv bSxtZHNzLWRzaS1wb3N0LW9mZi1jb21tYW5kIiwKLQkicWNvbSxtZHNzLWRzaS1wcmUtcmVzLXN3 aXRjaCIsCi0JInFjb20sbWRzcy1kc2ktcmVzLXN3aXRjaCIsCi0JInFjb20sbWRzcy1kc2ktcG9z dC1yZXMtc3dpdGNoIiwKLQkicWNvbSxjbWQtdG8tdmlkZW8tbW9kZS1zd2l0Y2gtY29tbWFuZHMi LAotCSJxY29tLGNtZC10by12aWRlby1tb2RlLXBvc3Qtc3dpdGNoLWNvbW1hbmRzIiwKLQkicWNv bSx2aWRlby10by1jbWQtbW9kZS1zd2l0Y2gtY29tbWFuZHMiLAotCSJxY29tLHZpZGVvLXRvLWNt ZC1tb2RlLXBvc3Qtc3dpdGNoLWNvbW1hbmRzIiwKLQkicWNvbSxtZHNzLWRzaS1wYW5lbC1zdGF0 dXMtY29tbWFuZCIsCi0JInFjb20sbWRzcy1kc2ktbHAxLWNvbW1hbmQiLAotCSJxY29tLG1kc3Mt ZHNpLWxwMi1jb21tYW5kIiwKLQkicWNvbSxtZHNzLWRzaS1ub2xwLWNvbW1hbmQiLAotCSJQUFMg bm90IHBhcnNlZCBmcm9tIERUU0ksIGdlbmVyYXRlZCBkeW5hbWljYWxseSIsCi0JInFjb20sbWRz cy1kc2ktdGltaW5nLXN3aXRjaC1jb21tYW5kIiwKLQkicWNvbSxtZHNzLWRzaS1wb3N0LW1vZGUt c3dpdGNoLW9uLWNvbW1hbmQiLAotfTsKLQotY29uc3QgY2hhciAqY21kX3NldF9zdGF0ZV9tYXBb RFNJX0NNRF9TRVRfTUFYXSA9IHsKLQkicWNvbSxtZHNzLWRzaS1wcmUtb24tY29tbWFuZC1zdGF0 ZSIsCi0JInFjb20sbWRzcy1kc2ktb24tY29tbWFuZC1zdGF0ZSIsCi0JInFjb20sbWRzcy1kc2kt cG9zdC1vbi1jb21tYW5kLXN0YXRlIiwKLQkicWNvbSxtZHNzLWRzaS1wcmUtb2ZmLWNvbW1hbmQt c3RhdGUiLAotCSJxY29tLG1kc3MtZHNpLW9mZi1jb21tYW5kLXN0YXRlIiwKLQkicWNvbSxtZHNz LWRzaS1wb3N0LW9mZi1jb21tYW5kLXN0YXRlIiwKLQkicWNvbSxtZHNzLWRzaS1wcmUtcmVzLXN3 aXRjaC1zdGF0ZSIsCi0JInFjb20sbWRzcy1kc2ktcmVzLXN3aXRjaC1zdGF0ZSIsCi0JInFjb20s bWRzcy1kc2ktcG9zdC1yZXMtc3dpdGNoLXN0YXRlIiwKLQkicWNvbSxjbWQtdG8tdmlkZW8tbW9k ZS1zd2l0Y2gtY29tbWFuZHMtc3RhdGUiLAotCSJxY29tLGNtZC10by12aWRlby1tb2RlLXBvc3Qt c3dpdGNoLWNvbW1hbmRzLXN0YXRlIiwKLQkicWNvbSx2aWRlby10by1jbWQtbW9kZS1zd2l0Y2gt Y29tbWFuZHMtc3RhdGUiLAotCSJxY29tLHZpZGVvLXRvLWNtZC1tb2RlLXBvc3Qtc3dpdGNoLWNv bW1hbmRzLXN0YXRlIiwKLQkicWNvbSxtZHNzLWRzaS1wYW5lbC1zdGF0dXMtY29tbWFuZC1zdGF0 ZSIsCi0JInFjb20sbWRzcy1kc2ktbHAxLWNvbW1hbmQtc3RhdGUiLAotCSJxY29tLG1kc3MtZHNp LWxwMi1jb21tYW5kLXN0YXRlIiwKLQkicWNvbSxtZHNzLWRzaS1ub2xwLWNvbW1hbmQtc3RhdGUi LAotCSJQUFMgbm90IHBhcnNlZCBmcm9tIERUU0ksIGdlbmVyYXRlZCBkeW5hbWljYWxseSIsCi0J InFjb20sbWRzcy1kc2ktdGltaW5nLXN3aXRjaC1jb21tYW5kLXN0YXRlIiwKLQkicWNvbSxtZHNz LWRzaS1wb3N0LW1vZGUtc3dpdGNoLW9uLWNvbW1hbmQtc3RhdGUiLAotfTsKLQotc3RhdGljIGlu dCBkc2lfcGFuZWxfZ2V0X2NtZF9wa3RfY291bnQoY29uc3QgY2hhciAqZGF0YSwgdTMyIGxlbmd0 aCwgdTMyICpjbnQpCi17Ci0JY29uc3QgdTMyIGNtZF9zZXRfbWluX3NpemUgPSA3OwotCXUzMiBj b3VudCA9IDA7Ci0JdTMyIHBhY2tldF9sZW5ndGg7Ci0JdTMyIHRtcDsKLQotCXdoaWxlIChsZW5n dGggPj0gY21kX3NldF9taW5fc2l6ZSkgewotCQlwYWNrZXRfbGVuZ3RoID0gY21kX3NldF9taW5f c2l6ZTsKLQkJdG1wID0gKChkYXRhWzVdIDw8IDgpIHwgKGRhdGFbNl0pKTsKLQkJcGFja2V0X2xl bmd0aCArPSB0bXA7Ci0JCWlmIChwYWNrZXRfbGVuZ3RoID4gbGVuZ3RoKSB7Ci0JCQlwcl9lcnIo ImZvcm1hdCBlcnJvclxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlsZW5ndGggLT0g cGFja2V0X2xlbmd0aDsKLQkJZGF0YSArPSBwYWNrZXRfbGVuZ3RoOwotCQljb3VudCsrOwotCX07 Ci0KLQkqY250ID0gY291bnQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVs X2NyZWF0ZV9jbWRfcGFja2V0cyhjb25zdCBjaGFyICpkYXRhLAotCQkJCQl1MzIgbGVuZ3RoLAot CQkJCQl1MzIgY291bnQsCi0JCQkJCXN0cnVjdCBkc2lfY21kX2Rlc2MgKmNtZCkKLXsKLQlpbnQg cmMgPSAwOwotCWludCBpLCBqOwotCXU4ICpwYXlsb2FkOwotCi0JZm9yIChpID0gMDsgaSA8IGNv dW50OyBpKyspIHsKLQkJdTMyIHNpemU7Ci0KLQkJY21kW2ldLm1zZy50eXBlID0gZGF0YVswXTsK LQkJY21kW2ldLmxhc3RfY29tbWFuZCA9IChkYXRhWzFdID09IDEgPyB0cnVlIDogZmFsc2UpOwot CQljbWRbaV0ubXNnLmNoYW5uZWwgPSBkYXRhWzJdOwotCQljbWRbaV0ubXNnLmZsYWdzIHw9IChk YXRhWzNdID09IDEgPyBNSVBJX0RTSV9NU0dfUkVRX0FDSyA6IDApOwotCQljbWRbaV0ubXNnLmN0 cmwgPSAwOwotCQljbWRbaV0ucG9zdF93YWl0X21zID0gZGF0YVs0XTsKLQkJY21kW2ldLm1zZy50 eF9sZW4gPSAoKGRhdGFbNV0gPDwgOCkgfCAoZGF0YVs2XSkpOwotCi0JCXNpemUgPSBjbWRbaV0u bXNnLnR4X2xlbiAqIHNpemVvZih1OCk7Ci0KLQkJcGF5bG9hZCA9IGt6YWxsb2Moc2l6ZSwgR0ZQ X0tFUk5FTCk7Ci0JCWlmICghcGF5bG9hZCkgewotCQkJcmMgPSAtRU5PTUVNOwotCQkJZ290byBl cnJvcl9mcmVlX3BheWxvYWRzOwotCQl9Ci0KLQkJZm9yIChqID0gMDsgaiA8IGNtZFtpXS5tc2cu dHhfbGVuOyBqKyspCi0JCQlwYXlsb2FkW2pdID0gZGF0YVs3ICsgal07Ci0KLQkJY21kW2ldLm1z Zy50eF9idWYgPSBwYXlsb2FkOwotCQlkYXRhICs9ICg3ICsgY21kW2ldLm1zZy50eF9sZW4pOwot CX0KLQotCXJldHVybiByYzsKLWVycm9yX2ZyZWVfcGF5bG9hZHM6Ci0JZm9yIChpID0gaSAtIDE7 IGkgPj0gMDsgaS0tKSB7Ci0JCWNtZC0tOwotCQlrZnJlZShjbWQtPm1zZy50eF9idWYpOwotCX0K LQotCXJldHVybiByYzsKLX0KLQotdm9pZCBkc2lfcGFuZWxfZGVzdHJveV9jbWRfcGFja2V0cyhz dHJ1Y3QgZHNpX3BhbmVsX2NtZF9zZXQgKnNldCkKLXsKLQl1MzIgaSA9IDA7Ci0Jc3RydWN0IGRz aV9jbWRfZGVzYyAqY21kOwotCi0JZm9yIChpID0gMDsgaSA8IHNldC0+Y291bnQ7IGkrKykgewot CQljbWQgPSAmc2V0LT5jbWRzW2ldOwotCQlrZnJlZShjbWQtPm1zZy50eF9idWYpOwotCX0KLQot CWtmcmVlKHNldC0+Y21kcyk7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX2FsbG9jX2NtZF9w YWNrZXRzKHN0cnVjdCBkc2lfcGFuZWxfY21kX3NldCAqY21kLAotCQkJCQl1MzIgcGFja2V0X2Nv dW50KQotewotCXUzMiBzaXplOwotCi0Jc2l6ZSA9IHBhY2tldF9jb3VudCAqIHNpemVvZigqY21k LT5jbWRzKTsKLQljbWQtPmNtZHMgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICgh Y21kLT5jbWRzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNtZC0+Y291bnQgPSBwYWNrZXRfY291 bnQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX3BhcnNlX2NtZF9zZXRz X3N1YihzdHJ1Y3QgZHNpX3BhbmVsX2NtZF9zZXQgKmNtZCwKLQkJCQkJZW51bSBkc2lfY21kX3Nl dF90eXBlIHR5cGUsCi0JCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKLXsKLQlpbnQg cmMgPSAwOwotCXUzMiBsZW5ndGggPSAwOwotCWNvbnN0IGNoYXIgKmRhdGE7Ci0JY29uc3QgY2hh ciAqc3RhdGU7Ci0JdTMyIHBhY2tldF9jb3VudCA9IDA7Ci0KLQlkYXRhID0gb2ZfZ2V0X3Byb3Bl cnR5KG9mX25vZGUsIGNtZF9zZXRfcHJvcF9tYXBbdHlwZV0sICZsZW5ndGgpOwotCWlmICghZGF0 YSkgewotCQlwcl9kZWJ1ZygiJXMgY29tbWFuZHMgbm90IGRlZmluZWRcbiIsIGNtZF9zZXRfcHJv cF9tYXBbdHlwZV0pOwotCQlyYyA9IC1FTk9UU1VQUDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQly YyA9IGRzaV9wYW5lbF9nZXRfY21kX3BrdF9jb3VudChkYXRhLCBsZW5ndGgsICZwYWNrZXRfY291 bnQpOwotCWlmIChyYykgewotCQlwcl9lcnIoImNvbW1hbmRzIGZhaWxlZCwgcmM9JWRcbiIsIHJj KTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JcHJfZGVidWcoIlslc10gcGFja2V0LWNvdW50PSVkLCAl ZFxuIiwgY21kX3NldF9wcm9wX21hcFt0eXBlXSwKLQkJcGFja2V0X2NvdW50LCBsZW5ndGgpOwot Ci0JcmMgPSBkc2lfcGFuZWxfYWxsb2NfY21kX3BhY2tldHMoY21kLCBwYWNrZXRfY291bnQpOwot CWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBhbGxvY2F0ZSBjbWQgcGFja2V0cywgcmM9 JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF9jcmVhdGVf Y21kX3BhY2tldHMoZGF0YSwgbGVuZ3RoLCBwYWNrZXRfY291bnQsCi0JCQkJCSAgY21kLT5jbWRz KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gY3JlYXRlIGNtZCBwYWNrZXRzLCBy Yz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yX2ZyZWVfbWVtOwotCX0KLQotCXN0YXRlID0gb2Zf Z2V0X3Byb3BlcnR5KG9mX25vZGUsIGNtZF9zZXRfc3RhdGVfbWFwW3R5cGVdLCBOVUxMKTsKLQlp ZiAoIXN0YXRlIHx8ICFzdHJjbXAoc3RhdGUsICJkc2lfbHBfbW9kZSIpKSB7Ci0JCWNtZC0+c3Rh dGUgPSBEU0lfQ01EX1NFVF9TVEFURV9MUDsKLQl9IGVsc2UgaWYgKCFzdHJjbXAoc3RhdGUsICJk c2lfaHNfbW9kZSIpKSB7Ci0JCWNtZC0+c3RhdGUgPSBEU0lfQ01EX1NFVF9TVEFURV9IUzsKLQl9 IGVsc2UgewotCQlwcl9lcnIoIlslc10gY29tbWFuZCBzdGF0ZSB1bnJlY29nbml6ZWQtJXNcbiIs Ci0JCSAgICAgICBjbWRfc2V0X3N0YXRlX21hcFt0eXBlXSwgc3RhdGUpOwotCQlnb3RvIGVycm9y X2ZyZWVfbWVtOwotCX0KLQotCXJldHVybiByYzsKLWVycm9yX2ZyZWVfbWVtOgotCWtmcmVlKGNt ZC0+Y21kcyk7Ci0JY21kLT5jbWRzID0gTlVMTDsKLWVycm9yOgotCXJldHVybiByYzsKLQotfQot Ci1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9jbWRfc2V0cygKLQkJc3RydWN0IGRzaV9kaXNw bGF5X21vZGVfcHJpdl9pbmZvICpwcml2X2luZm8sCi0JCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zf bm9kZSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfcGFuZWxfY21kX3NldCAqc2V0Owot CXUzMiBpOwotCi0JaWYgKCFwcml2X2luZm8pIHsKLQkJcHJfZXJyKCJpbnZhbGlkIG1vZGUgcHJp diBpbmZvXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZm9yIChpID0gRFNJX0NNRF9T RVRfUFJFX09OOyBpIDwgRFNJX0NNRF9TRVRfTUFYOyBpKyspIHsKLQkJc2V0ID0gJnByaXZfaW5m by0+Y21kX3NldHNbaV07Ci0JCXNldC0+dHlwZSA9IGk7Ci0JCXNldC0+Y291bnQgPSAwOwotCi0J CWlmIChpID09IERTSV9DTURfU0VUX1BQUykgewotCQkJcmMgPSBkc2lfcGFuZWxfYWxsb2NfY21k X3BhY2tldHMoc2V0LCAxKTsKLQkJCWlmIChyYykKLQkJCQlwcl9lcnIoImZhaWxlZCB0byBhbGxv Y2F0ZSBjbWQgc2V0ICVkLCByYyA9ICVkXG4iLAotCQkJCQlpLCByYyk7Ci0JCQlzZXQtPnN0YXRl ID0gRFNJX0NNRF9TRVRfU1RBVEVfTFA7Ci0JCX0gZWxzZSB7Ci0JCQlyYyA9IGRzaV9wYW5lbF9w YXJzZV9jbWRfc2V0c19zdWIoc2V0LCBpLCBvZl9ub2RlKTsKLQkJCWlmIChyYykKLQkJCQlwcl9k ZWJ1ZygiZmFpbGVkIHRvIHBhcnNlIHNldCAlZFxuIiwgaSk7Ci0JCX0KLQl9Ci0KLQlyYyA9IDA7 Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9yZXNldF9zZXF1 ZW5jZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwKLQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX25v ZGUgKm9mX25vZGUpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQl1MzIgbGVuZ3RoID0gMDsK LQl1MzIgY291bnQgPSAwOwotCXUzMiBzaXplID0gMDsKLQl1MzIgKmFycl8zMiA9IE5VTEw7Ci0J Y29uc3QgdTMyICphcnI7Ci0Jc3RydWN0IGRzaV9yZXNldF9zZXEgKnNlcTsKLQotCWFyciA9IG9m X2dldF9wcm9wZXJ0eShvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS1yZXNldC1zZXF1ZW5jZSIsICZs ZW5ndGgpOwotCWlmICghYXJyKSB7Ci0JCXByX2VycigiWyVzXSBkc2ktcmVzZXQtc2VxdWVuY2Ug bm90IGZvdW5kXG4iLCBwYW5lbC0+bmFtZSk7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJv cjsKLQl9Ci0JaWYgKGxlbmd0aCAmIDB4MSkgewotCQlwcl9lcnIoIlslc10gc3ludGF4IGVycm9y IGZvciBkc2ktcmVzZXQtc2VxdWVuY2VcbiIsCi0JCSAgICAgICBwYW5lbC0+bmFtZSk7Ci0JCXJj ID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlwcl9lcnIoIlJFU0VUIFNFUSBMRU5H VEggPSAlZFxuIiwgbGVuZ3RoKTsKLQlsZW5ndGggPSBsZW5ndGggLyBzaXplb2YodTMyKTsKLQot CXNpemUgPSBsZW5ndGggKiBzaXplb2YodTMyKTsKLQotCWFycl8zMiA9IGt6YWxsb2Moc2l6ZSwg R0ZQX0tFUk5FTCk7Ci0JaWYgKCFhcnJfMzIpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVy cm9yOwotCX0KLQotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkob2Zfbm9kZSwgInFj b20sbWRzcy1kc2ktcmVzZXQtc2VxdWVuY2UiLAotCQkJCQlhcnJfMzIsIGxlbmd0aCk7Ci0JaWYg KHJjKSB7Ci0JCXByX2VycigiWyVzXSBjYW5ub3QgcmVhZCBkc28tcmVzZXQtc2VxaWVuY2VcbiIs IHBhbmVsLT5uYW1lKTsKLQkJZ290byBlcnJvcl9mcmVlX2Fycl8zMjsKLQl9Ci0KLQljb3VudCA9 IGxlbmd0aCAvIDI7Ci0Jc2l6ZSA9IGNvdW50ICogc2l6ZW9mKCpzZXEpOwotCXNlcSA9IGt6YWxs b2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzZXEpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQln b3RvIGVycm9yX2ZyZWVfYXJyXzMyOwotCX0KLQotCXBhbmVsLT5yZXNldF9jb25maWcuc2VxdWVu Y2UgPSBzZXE7Ci0JcGFuZWwtPnJlc2V0X2NvbmZpZy5jb3VudCA9IGNvdW50OwotCi0JZm9yIChp ID0gMDsgaSA8IGxlbmd0aDsgaSArPSAyKSB7Ci0JCXNlcS0+bGV2ZWwgPSBhcnJfMzJbaV07Ci0J CXNlcS0+c2xlZXBfbXMgPSBhcnJfMzJbaSArIDFdOwotCQlzZXErKzsKLQl9Ci0KLQotZXJyb3Jf ZnJlZV9hcnJfMzI6Ci0Ja2ZyZWUoYXJyXzMyKTsKLWVycm9yOgotCXJldHVybiByYzsKLX0KLQot c3RhdGljIGludCBkc2lfcGFuZWxfcGFyc2VfbWlzY19mZWF0dXJlcyhzdHJ1Y3QgZHNpX3BhbmVs ICpwYW5lbCwKLQkJCQkgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKLXsKLQlwYW5l bC0+dWxwc19lbmFibGVkID0KLQkJb2ZfcHJvcGVydHlfcmVhZF9ib29sKG9mX25vZGUsICJxY29t LHVscHMtZW5hYmxlZCIpOwotCi0JaWYgKHBhbmVsLT51bHBzX2VuYWJsZWQpCi0JCXByX2RlYnVn KCJ1bHBzX2VuYWJsZWQ6JWRcbiIsIHBhbmVsLT51bHBzX2VuYWJsZWQpOwotCi0JcGFuZWwtPnRl X3VzaW5nX3dhdGNoZG9nX3RpbWVyID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG9mX25vZGUsCi0J CQkJCSJxY29tLG1kc3MtZHNpLXRlLXVzaW5nLXdkIik7Ci0KLQlwYW5lbC0+c3luY19icm9hZGNh c3RfZW4gPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJCSJxY29tLGNtZC1zeW5j LXdhaXQtYnJvYWRjYXN0Iik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVs X3BhcnNlX2ppdHRlcl9jb25maWcoCi0JCQkJc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGUs Ci0JCQkJc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlKQotewotCWludCByYzsKLQlzdHJ1Y3Qg ZHNpX2Rpc3BsYXlfbW9kZV9wcml2X2luZm8gKnByaXZfaW5mbzsKLQl1MzIgaml0dGVyW0RFRkFV TFRfUEFORUxfSklUVEVSX0FSUkFZX1NJWkVdID0gezAsIDB9OwotCXU2NCBqaXR0ZXJfdmFsID0g MDsKLQotCXByaXZfaW5mbyA9IG1vZGUtPnByaXZfaW5mbzsKLQotCXJjID0gb2ZfcHJvcGVydHlf cmVhZF91MzJfYXJyYXkob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktcGFuZWwtaml0dGVyIiwKLQkJ CQlqaXR0ZXIsIERFRkFVTFRfUEFORUxfSklUVEVSX0FSUkFZX1NJWkUpOwotCWlmIChyYykgewot CQlwcl9kZWJ1ZygicGFuZWwgaml0dGVyIG5vdCBkZWZpbmVkIHJjPSVkXG4iLCByYyk7Ci0JfSBl bHNlIHsKLQkJaml0dGVyX3ZhbCA9IGppdHRlclswXTsKLQkJaml0dGVyX3ZhbCA9IGRpdl91NjQo aml0dGVyX3ZhbCwgaml0dGVyWzFdKTsKLQl9Ci0KLQlpZiAocmMgfHwgIWppdHRlcl92YWwgfHwg KGppdHRlcl92YWwgPiBNQVhfUEFORUxfSklUVEVSKSkgewotCQlwcml2X2luZm8tPnBhbmVsX2pp dHRlcl9udW1lciA9IERFRkFVTFRfUEFORUxfSklUVEVSX05VTUVSQVRPUjsKLQkJcHJpdl9pbmZv LT5wYW5lbF9qaXR0ZXJfZGVub20gPQotCQkJCQlERUZBVUxUX1BBTkVMX0pJVFRFUl9ERU5PTUlO QVRPUjsKLQl9IGVsc2UgewotCQlwcml2X2luZm8tPnBhbmVsX2ppdHRlcl9udW1lciA9IGppdHRl clswXTsKLQkJcHJpdl9pbmZvLT5wYW5lbF9qaXR0ZXJfZGVub20gPSBqaXR0ZXJbMV07Ci0JfQot Ci0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS1wYW5l bC1wcmVmaWxsLWxpbmVzIiwKLQkJCQkgICZwcml2X2luZm8tPnBhbmVsX3ByZWZpbGxfbGluZXMp OwotCWlmIChyYykgewotCQlwcl9kZWJ1ZygicGFuZWwgcHJlZmlsbCBsaW5lcyBhcmUgbm90IGRl ZmluZWQgcmM9JWRcbiIsIHJjKTsKLQkJcHJpdl9pbmZvLT5wYW5lbF9wcmVmaWxsX2xpbmVzID0g REVGQVVMVF9QQU5FTF9QUkVGSUxMX0xJTkVTOwotCX0gZWxzZSBpZiAocHJpdl9pbmZvLT5wYW5l bF9wcmVmaWxsX2xpbmVzID49Ci0JCQkJCURTSV9WX1RPVEFMKCZtb2RlLT50aW1pbmcpKSB7Ci0J CXByX2RlYnVnKCJpbnZhbGlkIHByZWZpbGwgbGluZXMgY29uZmlnPSVkIHNldHRpbmcgdG86JWRc biIsCi0JCXByaXZfaW5mby0+cGFuZWxfcHJlZmlsbF9saW5lcywgREVGQVVMVF9QQU5FTF9QUkVG SUxMX0xJTkVTKTsKLQotCQlwcml2X2luZm8tPnBhbmVsX3ByZWZpbGxfbGluZXMgPSBERUZBVUxU X1BBTkVMX1BSRUZJTExfTElORVM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQg ZHNpX3BhbmVsX3BhcnNlX3Bvd2VyX2NmZyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCi0JCQkJICAg ICBzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwKLQkJCQkgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAq b2Zfbm9kZSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JcmMgPSBkc2lfcHdyX29mX2dldF92cmVnX2Rh dGEob2Zfbm9kZSwKLQkJCQkJICAmcGFuZWwtPnBvd2VyX2luZm8sCi0JCQkJCSAgInFjb20scGFu ZWwtc3VwcGx5LWVudHJpZXMiKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0 byBwYXJzZSB2cmVnc1xuIiwgcGFuZWwtPm5hbWUpOwotCQlnb3RvIGVycm9yOwotCX0KLQotZXJy b3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9ncGlvcyhz dHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwKLQkJCQkgc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2Rl KQotewotCWludCByYyA9IDA7Ci0JY29uc3QgY2hhciAqZGF0YTsKLQotCXBhbmVsLT5yZXNldF9j b25maWcucmVzZXRfZ3BpbyA9IG9mX2dldF9uYW1lZF9ncGlvKG9mX25vZGUsCi0JCQkJCSAgICAg ICJxY29tLHBsYXRmb3JtLXJlc2V0LWdwaW8iLAotCQkJCQkgICAgICAwKTsKLQlpZiAoIWdwaW9f aXNfdmFsaWQocGFuZWwtPnJlc2V0X2NvbmZpZy5yZXNldF9ncGlvKSkgewotCQlwcl9lcnIoIlsl c10gZmFpbGVkIGdldCByZXNldCBncGlvLCByYz0lZFxuIiwgcGFuZWwtPm5hbWUsIHJjKTsKLQkJ cmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXBhbmVsLT5yZXNldF9jb25maWcu ZGlzcF9lbl9ncGlvID0gb2ZfZ2V0X25hbWVkX2dwaW8ob2Zfbm9kZSwKLQkJCQkJCSJxY29tLDV2 LWJvb3N0LWdwaW8iLAotCQkJCQkJMCk7Ci0JaWYgKCFncGlvX2lzX3ZhbGlkKHBhbmVsLT5yZXNl dF9jb25maWcuZGlzcF9lbl9ncGlvKSkgewotCQlwcl9kZWJ1ZygiWyVzXSA1di1ib290LWdwaW8g aXMgbm90IHNldCwgcmM9JWRcbiIsCi0JCQkgcGFuZWwtPm5hbWUsIHJjKTsKLQkJcGFuZWwtPnJl c2V0X2NvbmZpZy5kaXNwX2VuX2dwaW8gPSBvZl9nZXRfbmFtZWRfZ3BpbyhvZl9ub2RlLAotCQkJ CQkJCSJxY29tLHBsYXRmb3JtLWVuLWdwaW8iLAotCQkJCQkJCTApOwotCQlpZiAoIWdwaW9faXNf dmFsaWQocGFuZWwtPnJlc2V0X2NvbmZpZy5kaXNwX2VuX2dwaW8pKSB7Ci0JCQlwcl9kZWJ1Zygi WyVzXSBwbGF0Zm9ybS1lbi1ncGlvIGlzIG5vdCBzZXQsIHJjPSVkXG4iLAotCQkJCSBwYW5lbC0+ bmFtZSwgcmMpOwotCQl9Ci0JfQotCi0JcGFuZWwtPnJlc2V0X2NvbmZpZy5sY2RfbW9kZV9zZWxf Z3BpbyA9IG9mX2dldF9uYW1lZF9ncGlvKG9mX25vZGUsCi0JCSJxY29tLHBhbmVsLW1vZGUtZ3Bp byIsIDApOwotCWlmICghZ3Bpb19pc192YWxpZChwYW5lbC0+cmVzZXRfY29uZmlnLmxjZF9tb2Rl X3NlbF9ncGlvKSkKLQkJcHJfZGVidWcoIiVzOiVkIG1vZGUgZ3BpbyBub3Qgc3BlY2lmaWVkXG4i LCBfX2Z1bmNfXywgX19MSU5FX18pOwotCi0JZGF0YSA9IG9mX2dldF9wcm9wZXJ0eShvZl9ub2Rl LAotCQkicWNvbSxtZHNzLWRzaS1tb2RlLXNlbC1ncGlvLXN0YXRlIiwgTlVMTCk7Ci0JaWYgKGRh dGEpIHsKLQkJaWYgKCFzdHJjbXAoZGF0YSwgInNpbmdsZV9wb3J0IikpCi0JCQlwYW5lbC0+cmVz ZXRfY29uZmlnLm1vZGVfc2VsX3N0YXRlID0KLQkJCQlNT0RFX1NFTF9TSU5HTEVfUE9SVDsKLQkJ ZWxzZSBpZiAoIXN0cmNtcChkYXRhLCAiZHVhbF9wb3J0IikpCi0JCQlwYW5lbC0+cmVzZXRfY29u ZmlnLm1vZGVfc2VsX3N0YXRlID0KLQkJCQlNT0RFX1NFTF9EVUFMX1BPUlQ7Ci0JCWVsc2UgaWYg KCFzdHJjbXAoZGF0YSwgImhpZ2giKSkKLQkJCXBhbmVsLT5yZXNldF9jb25maWcubW9kZV9zZWxf c3RhdGUgPQotCQkJCU1PREVfR1BJT19ISUdIOwotCQllbHNlIGlmICghc3RyY21wKGRhdGEsICJs b3ciKSkKLQkJCXBhbmVsLT5yZXNldF9jb25maWcubW9kZV9zZWxfc3RhdGUgPQotCQkJCU1PREVf R1BJT19MT1c7Ci0JfSBlbHNlIHsKLQkJLyogU2V0IGRlZmF1bHQgbW9kZSBhcyBTUExJVCBtb2Rl ICovCi0JCXBhbmVsLT5yZXNldF9jb25maWcubW9kZV9zZWxfc3RhdGUgPSBNT0RFX1NFTF9EVUFM X1BPUlQ7Ci0JfQotCi0JLyogVE9ETzogIHJlbGVhc2UgbWVtb3J5ICovCi0JcmMgPSBkc2lfcGFu ZWxfcGFyc2VfcmVzZXRfc2VxdWVuY2UocGFuZWwsIG9mX25vZGUpOwotCWlmIChyYykgewotCQlw cl9lcnIoIlslc10gZmFpbGVkIHRvIHBhcnNlIHJlc2V0IHNlcXVlbmNlLCByYz0lZFxuIiwKLQkJ ICAgICAgIHBhbmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi1lcnJvcjoKLQly ZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX3BhcnNlX2JsX3B3bV9jb25maWco c3RydWN0IGRzaV9iYWNrbGlnaHRfY29uZmlnICpjb25maWcsCi0JCQkJCSBzdHJ1Y3QgZGV2aWNl X25vZGUgKm9mX25vZGUpCi17Ci0JaW50IHJjID0gMDsKLQl1MzIgdmFsOwotCi0JcmMgPSBvZl9w cm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxkc2ktYmwtcG1pYy1iYW5rLXNlbGVjdCIs Ci0JCQkJICAmdmFsKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJibC1wbWljLWJhbmstc2VsZWN0 IGlzIG5vdCBkZWZpbmVkLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQljb25m aWctPnB3bV9wbWljX2JhbmsgPSB2YWw7Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9m X25vZGUsICJxY29tLGRzaS1ibC1wbWljLXB3bS1mcmVxdWVuY3kiLAotCQkJCSAgJnZhbCk7Ci0J aWYgKHJjKSB7Ci0JCXByX2VycigiYmwtcG1pYy1iYW5rLXNlbGVjdCBpcyBub3QgZGVmaW5lZCwg cmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JY29uZmlnLT5wd21fcGVyaW9kX3Vz ZWNzID0gdmFsOwotCi0JY29uZmlnLT5wd21fcG1pX2NvbnRyb2wgPSBvZl9wcm9wZXJ0eV9yZWFk X2Jvb2wob2Zfbm9kZSwKLQkJCQkJCSJxY29tLG1kc3MtZHNpLWJsLXB3bS1wbWkiKTsKLQotCWNv bmZpZy0+cHdtX2dwaW8gPSBvZl9nZXRfbmFtZWRfZ3BpbyhvZl9ub2RlLAotCQkJCQkgICAgICJx Y29tLG1kc3MtZHNpLXB3bS1ncGlvIiwKLQkJCQkJICAgICAwKTsKLQlpZiAoIWdwaW9faXNfdmFs aWQoY29uZmlnLT5wd21fZ3BpbykpIHsKLQkJcHJfZXJyKCJwd20gZ3BpbyBpcyBpbnZhbGlkXG4i KTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOwotCX0KLQotZXJyb3I6Ci0JcmV0dXJu IHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9ibF9jb25maWcoc3RydWN0IGRz aV9wYW5lbCAqcGFuZWwsCi0JCQkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpCi17 Ci0JaW50IHJjID0gMDsKLQljb25zdCBjaGFyICpibF90eXBlOwotCXUzMiB2YWwgPSAwOwotCi0J YmxfdHlwZSA9IG9mX2dldF9wcm9wZXJ0eShvZl9ub2RlLAotCQkJCSAgInFjb20sbWRzcy1kc2kt YmwtcG1pYy1jb250cm9sLXR5cGUiLAotCQkJCSAgTlVMTCk7Ci0JaWYgKCFibF90eXBlKSB7Ci0J CXBhbmVsLT5ibF9jb25maWcudHlwZSA9IERTSV9CQUNLTElHSFRfVU5LTk9XTjsKLQl9IGVsc2Ug aWYgKCFzdHJjbXAoYmxfdHlwZSwgImJsX2N0cmxfcHdtIikpIHsKLQkJcGFuZWwtPmJsX2NvbmZp Zy50eXBlID0gRFNJX0JBQ0tMSUdIVF9QV007Ci0JfSBlbHNlIGlmICghc3RyY21wKGJsX3R5cGUs ICJibF9jdHJsX3dsZWQiKSkgewotCQlwYW5lbC0+YmxfY29uZmlnLnR5cGUgPSBEU0lfQkFDS0xJ R0hUX1dMRUQ7Ci0JfSBlbHNlIGlmICghc3RyY21wKGJsX3R5cGUsICJibF9jdHJsX2RjcyIpKSB7 Ci0JCXBhbmVsLT5ibF9jb25maWcudHlwZSA9IERTSV9CQUNLTElHSFRfRENTOwotCX0gZWxzZSB7 Ci0JCXByX2RlYnVnKCJbJXNdIGJsLXBtaWMtY29udHJvbC10eXBlIHVua25vd24tJXNcbiIsCi0J CQkgcGFuZWwtPm5hbWUsIGJsX3R5cGUpOwotCQlwYW5lbC0+YmxfY29uZmlnLnR5cGUgPSBEU0lf QkFDS0xJR0hUX1VOS05PV047Ci0JfQotCi0JcGFuZWwtPmJsX2NvbmZpZy5ibF9zY2FsZSA9IE1B WF9CTF9TQ0FMRV9MRVZFTDsKLQlwYW5lbC0+YmxfY29uZmlnLmJsX3NjYWxlX2FkID0gTUFYX0FE X0JMX1NDQUxFX0xFVkVMOwotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAi cWNvbSxtZHNzLWRzaS1ibC1taW4tbGV2ZWwiLCAmdmFsKTsKLQlpZiAocmMpIHsKLQkJcHJfZGVi dWcoIlslc10gYmwtbWluLWxldmVsIHVuc3BlY2lmaWVkLCBkZWZhdWx0aW5nIHRvIHplcm9cbiIs Ci0JCQkgcGFuZWwtPm5hbWUpOwotCQlwYW5lbC0+YmxfY29uZmlnLmJsX21pbl9sZXZlbCA9IDA7 Ci0JfSBlbHNlIHsKLQkJcGFuZWwtPmJsX2NvbmZpZy5ibF9taW5fbGV2ZWwgPSB2YWw7Ci0JfQot Ci0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS1ibC1t YXgtbGV2ZWwiLCAmdmFsKTsKLQlpZiAocmMpIHsKLQkJcHJfZGVidWcoIlslc10gYmwtbWF4LWxl dmVsIHVuc3BlY2lmaWVkLCBkZWZhdWx0aW5nIHRvIG1heCBsZXZlbFxuIiwKLQkJCSBwYW5lbC0+ bmFtZSk7Ci0JCXBhbmVsLT5ibF9jb25maWcuYmxfbWF4X2xldmVsID0gTUFYX0JMX0xFVkVMOwot CX0gZWxzZSB7Ci0JCXBhbmVsLT5ibF9jb25maWcuYmxfbWF4X2xldmVsID0gdmFsOwotCX0KLQot CXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1icmlnaHRuZXNz LW1heC1sZXZlbCIsCi0JCSZ2YWwpOwotCWlmIChyYykgewotCQlwcl9kZWJ1ZygiWyVzXSBicmln aGVuZXNzLW1heC1sZXZlbCB1bnNwZWNpZmllZCwgZGVmYXVsdGluZyB0byAyNTVcbiIsCi0JCQkg cGFuZWwtPm5hbWUpOwotCQlwYW5lbC0+YmxfY29uZmlnLmJyaWdodG5lc3NfbWF4X2xldmVsID0g MjU1OwotCX0gZWxzZSB7Ci0JCXBhbmVsLT5ibF9jb25maWcuYnJpZ2h0bmVzc19tYXhfbGV2ZWwg PSB2YWw7Ci0JfQotCi0JaWYgKHBhbmVsLT5ibF9jb25maWcudHlwZSA9PSBEU0lfQkFDS0xJR0hU X1BXTSkgewotCQlyYyA9IGRzaV9wYW5lbF9wYXJzZV9ibF9wd21fY29uZmlnKCZwYW5lbC0+Ymxf Y29uZmlnLCBvZl9ub2RlKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRv IHBhcnNlIHB3bSBjb25maWcsIHJjPSVkXG4iLAotCQkJICAgICAgIHBhbmVsLT5uYW1lLCByYyk7 Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi0JcGFuZWwtPmJsX2NvbmZpZy5lbl9ncGlvID0g b2ZfZ2V0X25hbWVkX2dwaW8ob2Zfbm9kZSwKLQkJCQkJICAgICAgInFjb20scGxhdGZvcm0tYmts aWdodC1lbi1ncGlvIiwKLQkJCQkJICAgICAgMCk7Ci0JaWYgKCFncGlvX2lzX3ZhbGlkKHBhbmVs LT5ibF9jb25maWcuZW5fZ3BpbykpIHsKLQkJcHJfZGVidWcoIlslc10gZmFpbGVkIGdldCBia2x0 IGdwaW8sIHJjPSVkXG4iLCBwYW5lbC0+bmFtZSwgcmMpOwotCQlyYyA9IDA7Ci0JCWdvdG8gZXJy b3I7Ci0JfQotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXZvaWQgZHNpX2RzY19wY2xrX3Bh cmFtX2NhbGMoc3RydWN0IG1zbV9kaXNwbGF5X2RzY19pbmZvICpkc2MsIGludCBpbnRmX3dpZHRo KQotewotCWludCBzbGljZV9wZXJfcGt0LCBzbGljZV9wZXJfaW50ZjsKLQlpbnQgYnl0ZXNfaW5f c2xpY2UsIHRvdGFsX2J5dGVzX3Blcl9pbnRmOwotCi0JaWYgKCFkc2MgfHwgIWRzYy0+c2xpY2Vf d2lkdGggfHwgIWRzYy0+c2xpY2VfcGVyX3BrdCB8fAotCSAgICAoaW50Zl93aWR0aCA8IGRzYy0+ c2xpY2Vfd2lkdGgpKSB7Ci0JCXByX2VycigiaW52YWxpZCBpbnB1dCwgaW50Zl93aWR0aD0lZCBz bGljZV93aWR0aD0lZFxuIiwKLQkJCWludGZfd2lkdGgsIGRzYyA/IGRzYy0+c2xpY2Vfd2lkdGgg OiAtMSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzbGljZV9wZXJfcGt0ID0gZHNjLT5zbGljZV9wZXJf cGt0OwotCXNsaWNlX3Blcl9pbnRmID0gRElWX1JPVU5EX1VQKGludGZfd2lkdGgsIGRzYy0+c2xp Y2Vfd2lkdGgpOwotCi0JLyoKLQkgKiBJZiBzbGljZV9wZXJfcGt0IGlzIGdyZWF0ZXIgdGhhbiBz bGljZV9wZXJfaW50ZiB0aGVuIGRlZmF1bHQgdG8gMS4KLQkgKiBUaGlzIGNhbiBoYXBwZW4gZHVy aW5nIHBhcnRpYWwgdXBkYXRlLgotCSAqLwotCWlmIChzbGljZV9wZXJfcGt0ID4gc2xpY2VfcGVy X2ludGYpCi0JCXNsaWNlX3Blcl9wa3QgPSAxOwotCi0JYnl0ZXNfaW5fc2xpY2UgPSBESVZfUk9V TkRfVVAoZHNjLT5zbGljZV93aWR0aCAqIGRzYy0+YnBwLCA4KTsKLQl0b3RhbF9ieXRlc19wZXJf aW50ZiA9IGJ5dGVzX2luX3NsaWNlICogc2xpY2VfcGVyX2ludGY7Ci0KLQlkc2MtPmVvbF9ieXRl X251bSA9IHRvdGFsX2J5dGVzX3Blcl9pbnRmICUgMzsKLQlkc2MtPnBjbGtfcGVyX2xpbmUgPSAg RElWX1JPVU5EX1VQKHRvdGFsX2J5dGVzX3Blcl9pbnRmLCAzKTsKLQlkc2MtPmJ5dGVzX2luX3Ns aWNlID0gYnl0ZXNfaW5fc2xpY2U7Ci0JZHNjLT5ieXRlc19wZXJfcGt0ID0gYnl0ZXNfaW5fc2xp Y2UgKiBzbGljZV9wZXJfcGt0OwotCWRzYy0+cGt0X3Blcl9saW5lID0gc2xpY2VfcGVyX2ludGYg LyBzbGljZV9wZXJfcGt0OwotfQotCi0KLWludCBkc2lfZHNjX3BvcHVsYXRlX3N0YXRpY19wYXJh bShzdHJ1Y3QgbXNtX2Rpc3BsYXlfZHNjX2luZm8gKmRzYykKLXsKLQlpbnQgYnBwLCBicGM7Ci0J aW50IG11eF93b3Jkc19zaXplOwotCWludCBncm91cHNfcGVyX2xpbmUsIGdyb3Vwc190b3RhbDsK LQlpbnQgbWluX3JhdGVfYnVmZmVyX3NpemU7Ci0JaW50IGhyZF9kZWxheTsKLQlpbnQgcHJlX251 bV9leHRyYV9tdXhfYml0cywgbnVtX2V4dHJhX211eF9iaXRzOwotCWludCBzbGljZV9iaXRzOwot CWludCB0YXJnZXRfYnBwX3gxNjsKLQlpbnQgZGF0YTsKLQlpbnQgZmluYWxfdmFsdWUsIGZpbmFs X3NjYWxlOwotCWludCByYXRpb19pbmRleDsKLQotCWRzYy0+dmVyc2lvbiA9IDB4MTE7Ci0JZHNj LT5zY3JfcmV2ID0gMDsKLQlkc2MtPnJjX21vZGVsX3NpemUgPSA4MTkyOwotCWlmIChkc2MtPnZl cnNpb24gPT0gMHgxMSAmJiBkc2MtPnNjcl9yZXYgPT0gMHgxKQotCQlkc2MtPmZpcnN0X2xpbmVf YnBnX29mZnNldCA9IDE1OwotCWVsc2UKLQkJZHNjLT5maXJzdF9saW5lX2JwZ19vZmZzZXQgPSAx MjsKLQotCWRzYy0+ZWRnZV9mYWN0b3IgPSA2OwotCWRzYy0+dGd0X29mZnNldF9oaSA9IDM7Ci0J ZHNjLT50Z3Rfb2Zmc2V0X2xvID0gMzsKLQlkc2MtPmVuYWJsZV80MjIgPSAwOwotCWRzYy0+Y29u dmVydF9yZ2IgPSAxOwotCWRzYy0+dmJyX2VuYWJsZSA9IDA7Ci0KLQlkc2MtPmJ1Zl90aHJlc2gg PSBkc2lfZHNjX3JjX2J1Zl90aHJlc2g7Ci0KLQlicHAgPSBkc2MtPmJwcDsKLQlicGMgPSBkc2Mt PmJwYzsKLQotCWlmIChicGMgPT0gMTIpCi0JCXJhdGlvX2luZGV4ID0gRFNDXzEyQlBDXzhCUFA7 Ci0JZWxzZSBpZiAoYnBjID09IDEwKQotCQlyYXRpb19pbmRleCA9IERTQ18xMEJQQ184QlBQOwot CWVsc2UKLQkJcmF0aW9faW5kZXggPSBEU0NfOEJQQ184QlBQOwotCi0JaWYgKGRzYy0+dmVyc2lv biA9PSAweDExICYmIGRzYy0+c2NyX3JldiA9PSAweDEpIHsKLQkJZHNjLT5yYW5nZV9taW5fcXAg PQotCQkJZHNpX2RzY19yY19yYW5nZV9taW5fcXBfMV8xX3NjcjFbcmF0aW9faW5kZXhdOwotCQlk c2MtPnJhbmdlX21heF9xcCA9Ci0JCQlkc2lfZHNjX3JjX3JhbmdlX21heF9xcF8xXzFfc2NyMVty YXRpb19pbmRleF07Ci0JfSBlbHNlIHsKLQkJZHNjLT5yYW5nZV9taW5fcXAgPSBkc2lfZHNjX3Jj X3JhbmdlX21pbl9xcF8xXzFbcmF0aW9faW5kZXhdOwotCQlkc2MtPnJhbmdlX21heF9xcCA9IGRz aV9kc2NfcmNfcmFuZ2VfbWF4X3FwXzFfMVtyYXRpb19pbmRleF07Ci0JfQotCWRzYy0+cmFuZ2Vf YnBnX29mZnNldCA9IGRzaV9kc2NfcmNfcmFuZ2VfYnBnX29mZnNldDsKLQotCWlmIChicHAgPT0g OCkKLQkJZHNjLT5pbml0aWFsX29mZnNldCA9IDYxNDQ7Ci0JZWxzZQotCQlkc2MtPmluaXRpYWxf b2Zmc2V0ID0gMjA0ODsJLyogYnBwID0gMTIgKi8KLQotCWlmIChicGMgPT0gMTIpCi0JCW11eF93 b3Jkc19zaXplID0gNjQ7Ci0JZWxzZQotCQltdXhfd29yZHNfc2l6ZSA9IDQ4OwkJLyogYnBjID09 IDgvMTAgKi8KLQotCWlmIChicGMgPT0gOCkgewotCQlkc2MtPmxpbmVfYnVmX2RlcHRoID0gOTsK LQkJZHNjLT5pbnB1dF8xMF9iaXRzID0gMDsKLQkJZHNjLT5taW5fcXBfZmxhdG5lc3MgPSAzOwot CQlkc2MtPm1heF9xcF9mbGF0bmVzcyA9IDEyOwotCQlkc2MtPnF1YW50X2luY3JfbGltaXQwID0g MTE7Ci0JCWRzYy0+cXVhbnRfaW5jcl9saW1pdDEgPSAxMTsKLQl9IGVsc2UgaWYgKGJwYyA9PSAx MCkgeyAvKiAxMGJwYyAqLwotCQlkc2MtPmxpbmVfYnVmX2RlcHRoID0gMTE7Ci0JCWRzYy0+aW5w dXRfMTBfYml0cyA9IDE7Ci0JCWRzYy0+bWluX3FwX2ZsYXRuZXNzID0gNzsKLQkJZHNjLT5tYXhf cXBfZmxhdG5lc3MgPSAxNjsKLQkJZHNjLT5xdWFudF9pbmNyX2xpbWl0MCA9IDE1OwotCQlkc2Mt PnF1YW50X2luY3JfbGltaXQxID0gMTU7Ci0JfSBlbHNlIHsgLyogMTIgYnBjICovCi0JCWRzYy0+ bGluZV9idWZfZGVwdGggPSA5OwotCQlkc2MtPmlucHV0XzEwX2JpdHMgPSAwOwotCQlkc2MtPm1p bl9xcF9mbGF0bmVzcyA9IDExOwotCQlkc2MtPm1heF9xcF9mbGF0bmVzcyA9IDIwOwotCQlkc2Mt PnF1YW50X2luY3JfbGltaXQwID0gMTk7Ci0JCWRzYy0+cXVhbnRfaW5jcl9saW1pdDEgPSAxOTsK LQl9Ci0KLQlkc2MtPnNsaWNlX2xhc3RfZ3JvdXBfc2l6ZSA9IDMgLSAoZHNjLT5zbGljZV93aWR0 aCAlIDMpOwotCi0JZHNjLT5kZXRfdGhyZXNoX2ZsYXRuZXNzID0gNyArIDIqKGJwYyAtIDgpOwot Ci0JZHNjLT5pbml0aWFsX3htaXRfZGVsYXkgPSBkc2MtPnJjX21vZGVsX3NpemUgLyAoMiAqIGJw cCk7Ci0KLQlncm91cHNfcGVyX2xpbmUgPSBESVZfUk9VTkRfVVAoZHNjLT5zbGljZV93aWR0aCwg Myk7Ci0KLQlkc2MtPmNodW5rX3NpemUgPSBkc2MtPnNsaWNlX3dpZHRoICogYnBwIC8gODsKLQlp ZiAoKGRzYy0+c2xpY2Vfd2lkdGggKiBicHApICUgOCkKLQkJZHNjLT5jaHVua19zaXplKys7Ci0K LQkvKiByYnMtbWluICovCi0JbWluX3JhdGVfYnVmZmVyX3NpemUgPSAgZHNjLT5yY19tb2RlbF9z aXplIC0gZHNjLT5pbml0aWFsX29mZnNldCArCi0JCQlkc2MtPmluaXRpYWxfeG1pdF9kZWxheSAq IGJwcCArCi0JCQlncm91cHNfcGVyX2xpbmUgKiBkc2MtPmZpcnN0X2xpbmVfYnBnX29mZnNldDsK LQotCWhyZF9kZWxheSA9IERJVl9ST1VORF9VUChtaW5fcmF0ZV9idWZmZXJfc2l6ZSwgYnBwKTsK LQotCWRzYy0+aW5pdGlhbF9kZWNfZGVsYXkgPSBocmRfZGVsYXkgLSBkc2MtPmluaXRpYWxfeG1p dF9kZWxheTsKLQotCWRzYy0+aW5pdGlhbF9zY2FsZV92YWx1ZSA9IDggKiBkc2MtPnJjX21vZGVs X3NpemUgLwotCQkJKGRzYy0+cmNfbW9kZWxfc2l6ZSAtIGRzYy0+aW5pdGlhbF9vZmZzZXQpOwot Ci0Jc2xpY2VfYml0cyA9IDggKiBkc2MtPmNodW5rX3NpemUgKiBkc2MtPnNsaWNlX2hlaWdodDsK LQotCWdyb3Vwc190b3RhbCA9IGdyb3Vwc19wZXJfbGluZSAqIGRzYy0+c2xpY2VfaGVpZ2h0Owot Ci0JZGF0YSA9IGRzYy0+Zmlyc3RfbGluZV9icGdfb2Zmc2V0ICogMjA0ODsKLQotCWRzYy0+bmZs X2JwZ19vZmZzZXQgPSBESVZfUk9VTkRfVVAoZGF0YSwgKGRzYy0+c2xpY2VfaGVpZ2h0IC0gMSkp OwotCi0JcHJlX251bV9leHRyYV9tdXhfYml0cyA9IDMgKiAobXV4X3dvcmRzX3NpemUgKyAoNCAq IGJwYyArIDQpIC0gMik7Ci0KLQludW1fZXh0cmFfbXV4X2JpdHMgPSBwcmVfbnVtX2V4dHJhX211 eF9iaXRzIC0gKG11eF93b3Jkc19zaXplIC0KLQkJKChzbGljZV9iaXRzIC0gcHJlX251bV9leHRy YV9tdXhfYml0cykgJSBtdXhfd29yZHNfc2l6ZSkpOwotCi0JZGF0YSA9IDIwNDggKiAoZHNjLT5y Y19tb2RlbF9zaXplIC0gZHNjLT5pbml0aWFsX29mZnNldAotCQkrIG51bV9leHRyYV9tdXhfYml0 cyk7Ci0JZHNjLT5zbGljZV9icGdfb2Zmc2V0ID0gRElWX1JPVU5EX1VQKGRhdGEsIGdyb3Vwc190 b3RhbCk7Ci0KLQkvKiBicHAgKiAxNiArIDAuNSAqLwotCWRhdGEgPSBicHAgKiAxNjsKLQlkYXRh ICo9IDI7Ci0JZGF0YSsrOwotCWRhdGEgLz0gMjsKLQl0YXJnZXRfYnBwX3gxNiA9IGRhdGE7Ci0K LQlkYXRhID0gKGRzYy0+aW5pdGlhbF94bWl0X2RlbGF5ICogdGFyZ2V0X2JwcF94MTYpIC8gMTY7 Ci0JZmluYWxfdmFsdWUgPSAgZHNjLT5yY19tb2RlbF9zaXplIC0gZGF0YSArIG51bV9leHRyYV9t dXhfYml0czsKLQotCWZpbmFsX3NjYWxlID0gOCAqIGRzYy0+cmNfbW9kZWxfc2l6ZSAvCi0JCShk c2MtPnJjX21vZGVsX3NpemUgLSBmaW5hbF92YWx1ZSk7Ci0KLQlkc2MtPmZpbmFsX29mZnNldCA9 IGZpbmFsX3ZhbHVlOwotCi0JZGF0YSA9IChmaW5hbF9zY2FsZSAtIDkpICogKGRzYy0+bmZsX2Jw Z19vZmZzZXQgKwotCQlkc2MtPnNsaWNlX2JwZ19vZmZzZXQpOwotCWRzYy0+c2NhbGVfaW5jcmVt ZW50X2ludGVydmFsID0gKDIwNDggKiBkc2MtPmZpbmFsX29mZnNldCkgLyBkYXRhOwotCi0JZHNj LT5zY2FsZV9kZWNyZW1lbnRfaW50ZXJ2YWwgPSBncm91cHNfcGVyX2xpbmUgLwotCQkoZHNjLT5p bml0aWFsX3NjYWxlX3ZhbHVlIC0gOCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50 IGRzaV9wYW5lbF9wYXJzZV9waHlfdGltaW5nKHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2Rl LAotCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKLXsKLQljb25zdCBjaGFyICpkYXRh OwotCXUzMiBsZW4sIGk7Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZV9w cml2X2luZm8gKnByaXZfaW5mbzsKLQotCXByaXZfaW5mbyA9IG1vZGUtPnByaXZfaW5mbzsKLQot CWRhdGEgPSBvZl9nZXRfcHJvcGVydHkob2Zfbm9kZSwKLQkJCSJxY29tLG1kc3MtZHNpLXBhbmVs LXBoeS10aW1pbmdzIiwgJmxlbik7Ci0JaWYgKCFkYXRhKSB7Ci0JCXByX2RlYnVnKCJVbmFibGUg dG8gcmVhZCBQaHkgdGltaW5nIHNldHRpbmdzIik7Ci0JfSBlbHNlIHsKLQkJcHJpdl9pbmZvLT5w aHlfdGltaW5nX3ZhbCA9Ci0JCQlremFsbG9jKChzaXplb2YodTMyKSAqIGxlbiksIEdGUF9LRVJO RUwpOwotCQlpZiAoIXByaXZfaW5mby0+cGh5X3RpbWluZ192YWwpCi0JCQlyZXR1cm4gLUVJTlZB TDsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCQlwcml2X2luZm8tPnBoeV90aW1p bmdfdmFsW2ldID0gZGF0YVtpXTsKLQotCQlwcml2X2luZm8tPnBoeV90aW1pbmdfbGVuID0gbGVu OwotCX07Ci0KLQltb2RlLT5waXhlbF9jbGtfa2h6ID0gKERTSV9IX1RPVEFMKCZtb2RlLT50aW1p bmcpICoKLQkJCURTSV9WX1RPVEFMKCZtb2RlLT50aW1pbmcpICoKLQkJCW1vZGUtPnRpbWluZy5y ZWZyZXNoX3JhdGUpIC8gMTAwMDsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3Bh bmVsX3BhcnNlX2RzY19wYXJhbXMoc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGUsCi0JCQkJ c3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlKQotewotCXUzMiBkYXRhOwotCWludCByYyA9IC1F SU5WQUw7Ci0JaW50IGludGZfd2lkdGg7Ci0JY29uc3QgY2hhciAqY29tcHJlc3Npb247Ci0Jc3Ry dWN0IGRzaV9kaXNwbGF5X21vZGVfcHJpdl9pbmZvICpwcml2X2luZm87Ci0KLQlpZiAoIW1vZGUg fHwgIW1vZGUtPnByaXZfaW5mbykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwcml2X2luZm8gPSBt b2RlLT5wcml2X2luZm87Ci0KLQlwcml2X2luZm8tPmRzY19lbmFibGVkID0gZmFsc2U7Ci0JY29t cHJlc3Npb24gPSBvZl9nZXRfcHJvcGVydHkob2Zfbm9kZSwgInFjb20sY29tcHJlc3Npb24tbW9k ZSIsIE5VTEwpOwotCWlmIChjb21wcmVzc2lvbiAmJiAhc3RyY21wKGNvbXByZXNzaW9uLCAiZHNj IikpCi0JCXByaXZfaW5mby0+ZHNjX2VuYWJsZWQgPSB0cnVlOwotCi0JaWYgKCFwcml2X2luZm8t PmRzY19lbmFibGVkKSB7Ci0JCXByX2RlYnVnKCJkc2MgY29tcHJlc3Npb24gaXMgbm90IGVuYWJs ZWQgZm9yIHRoZSBtb2RlIik7Ci0JCXJldHVybiAwOwotCX0KLQotCXJjID0gb2ZfcHJvcGVydHlf cmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2Mtc2xpY2UtaGVpZ2h0IiwgJmRhdGEpOwot CWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBwYXJzZSBxY29tLG1kc3MtZHNjLXNsaWNl LWhlaWdodFxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCXByaXZfaW5mby0+ZHNjLnNsaWNlX2hl aWdodCA9IGRhdGE7Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJxY29t LG1kc3MtZHNjLXNsaWNlLXdpZHRoIiwgJmRhdGEpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZh aWxlZCB0byBwYXJzZSBxY29tLG1kc3MtZHNjLXNsaWNlLXdpZHRoXG4iKTsKLQkJZ290byBlcnJv cjsKLQl9Ci0JcHJpdl9pbmZvLT5kc2Muc2xpY2Vfd2lkdGggPSBkYXRhOwotCi0JaW50Zl93aWR0 aCA9IG1vZGUtPnRpbWluZy5oX2FjdGl2ZTsKLQlpZiAoaW50Zl93aWR0aCAlIHByaXZfaW5mby0+ ZHNjLnNsaWNlX3dpZHRoKSB7Ci0JCXByX2VycigiaW52YWxpZCBzbGljZSB3aWR0aCBmb3IgdGhl IHBhbmVsXG4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlwcml2X2luZm8tPmRzYy5waWNfd2lk dGggPSBtb2RlLT50aW1pbmcuaF9hY3RpdmU7Ci0JcHJpdl9pbmZvLT5kc2MucGljX2hlaWdodCA9 IG1vZGUtPnRpbWluZy52X2FjdGl2ZTsKLQotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zf bm9kZSwgInFjb20sbWRzcy1kc2Mtc2xpY2UtcGVyLXBrdCIsCi0JCQkmZGF0YSk7Ci0JaWYgKHJj KSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIHFjb20sbWRzcy1kc2Mtc2xpY2UtcGVyLXBr dFxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCXByaXZfaW5mby0+ZHNjLnNsaWNlX3Blcl9wa3Qg PSBkYXRhOwotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNz LWRzYy1iaXQtcGVyLWNvbXBvbmVudCIsCi0JCSZkYXRhKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJy KCJmYWlsZWQgdG8gcGFyc2UgcWNvbSxtZHNzLWRzYy1iaXQtcGVyLWNvbXBvbmVudFxuIik7Ci0J CWdvdG8gZXJyb3I7Ci0JfQotCXByaXZfaW5mby0+ZHNjLmJwYyA9IGRhdGE7Ci0KLQlyYyA9IG9m X3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJxY29tLG1kc3MtZHNjLWJpdC1wZXItcGl4ZWwi LAotCQkJJmRhdGEpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBwYXJzZSBxY29t LG1kc3MtZHNjLWJpdC1wZXItcGl4ZWxcbiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQlwcml2X2lu Zm8tPmRzYy5icHAgPSBkYXRhOwotCi0JcHJpdl9pbmZvLT5kc2MuYmxvY2tfcHJlZF9lbmFibGUg PSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJInFjb20sbWRzcy1kc2MtYmxvY2st cHJlZGljdGlvbi1lbmFibGUiKTsKLQotCXByaXZfaW5mby0+ZHNjLmZ1bGxfZnJhbWVfc2xpY2Vz ID0gRElWX1JPVU5EX1VQKGludGZfd2lkdGgsCi0JCXByaXZfaW5mby0+ZHNjLnNsaWNlX3dpZHRo KTsKLQotCWRzaV9kc2NfcG9wdWxhdGVfc3RhdGljX3BhcmFtKCZwcml2X2luZm8tPmRzYyk7Ci0J ZHNpX2RzY19wY2xrX3BhcmFtX2NhbGMoJnByaXZfaW5mby0+ZHNjLCBpbnRmX3dpZHRoKTsKLQot ZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9oZHJf Y29uZmlnKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsLAotCQkJCSAgICAgc3RydWN0IGRldmljZV9u b2RlICpvZl9ub2RlKQotewotCi0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHJtX3BhbmVsX2hkcl9w cm9wZXJ0aWVzICpoZHJfcHJvcDsKLQotCWhkcl9wcm9wID0gJnBhbmVsLT5oZHJfcHJvcHM7Ci0J aGRyX3Byb3AtPmhkcl9lbmFibGVkID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG9mX25vZGUsCi0J CSJxY29tLG1kc3MtZHNpLXBhbmVsLWhkci1lbmFibGVkIik7Ci0KLQlpZiAoaGRyX3Byb3AtPmhk cl9lbmFibGVkKSB7Ci0JCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkob2Zfbm9kZSwK LQkJCQkicWNvbSxtZHNzLWRzaS1wYW5lbC1oZHItY29sb3ItcHJpbWFyaWVzIiwKLQkJCQloZHJf cHJvcC0+ZGlzcGxheV9wcmltYXJpZXMsCi0JCQkJRElTUExBWV9QUklNQVJJRVNfTUFYKTsKLQkJ aWYgKHJjKSB7Ci0JCQlwcl9lcnIoIiVzOiVkLCBVbmFibGUgdG8gcmVhZCBjb2xvciBwcmltYXJp ZXMscmM6JXUiLAotCQkJCQlfX2Z1bmNfXywgX19MSU5FX18sIHJjKTsKLQkJCWhkcl9wcm9wLT5o ZHJfZW5hYmxlZCA9IGZhbHNlOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0KLQkJcmMgPSBvZl9wcm9w ZXJ0eV9yZWFkX3UzMihvZl9ub2RlLAotCQkJInFjb20sbWRzcy1kc2ktcGFuZWwtcGVhay1icmln aHRuZXNzIiwKLQkJCSYoaGRyX3Byb3AtPnBlYWtfYnJpZ2h0bmVzcykpOwotCQlpZiAocmMpIHsK LQkJCXByX2VycigiJXM6JWQsIFVuYWJsZSB0byByZWFkIGhkciBicmlnaHRuZXNzLCByYzoldSIs Ci0JCQkJX19mdW5jX18sIF9fTElORV9fLCByYyk7Ci0JCQloZHJfcHJvcC0+aGRyX2VuYWJsZWQg PSBmYWxzZTsKLQkJCXJldHVybiByYzsKLQkJfQotCi0JCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91 MzIob2Zfbm9kZSwKLQkJCSJxY29tLG1kc3MtZHNpLXBhbmVsLWJsYWNrbmVzcy1sZXZlbCIsCi0J CQkmKGhkcl9wcm9wLT5ibGFja25lc3NfbGV2ZWwpKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIo IiVzOiVkLCBVbmFibGUgdG8gcmVhZCBoZHIgYnJpZ2h0bmVzcywgcmM6JXUiLAotCQkJCV9fZnVu Y19fLCBfX0xJTkVfXywgcmMpOwotCQkJaGRyX3Byb3AtPmhkcl9lbmFibGVkID0gZmFsc2U7Ci0J CQlyZXR1cm4gcmM7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3Bh bmVsX3BhcnNlX3RvcG9sb2d5KAotCQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZV9wcml2X2luZm8g KnByaXZfaW5mbywKLQkJc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlLCBpbnQgdG9wb2xvZ3lf b3ZlcnJpZGUpCi17Ci0Jc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5ICp0b3BvbG9neTsKLQl1 MzIgdG9wX2NvdW50LCB0b3Bfc2VsLCAqYXJyYXkgPSBOVUxMOwotCWludCBpLCBsZW4gPSAwOwot CWludCByYyA9IC1FSU5WQUw7Ci0KLQlsZW4gPSBvZl9wcm9wZXJ0eV9jb3VudF91MzJfZWxlbXMo b2Zfbm9kZSwgInFjb20sZGlzcGxheS10b3BvbG9neSIpOwotCWlmIChsZW4gPD0gMCB8fCBsZW4g JSBUT1BPTE9HWV9TRVRfTEVOIHx8Ci0JCQlsZW4gPiAoVE9QT0xPR1lfU0VUX0xFTiAqIE1BWF9U T1BPTE9HWSkpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHRvcG9sb2d5IGxpc3QgZm9yIHRoZSBwYW5l bCwgcmMgPSAlZFxuIiwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JdG9wX2NvdW50ID0gbGVu IC8gVE9QT0xPR1lfU0VUX0xFTjsKLQotCWFycmF5ID0ga2NhbGxvYyhsZW4sIHNpemVvZih1MzIp LCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFycmF5KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJjID0g b2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkob2Zfbm9kZSwKLQkJCSJxY29tLGRpc3BsYXktdG9w b2xvZ3kiLCBhcnJheSwgbGVuKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJ1bmFibGUgdG8gcmVh ZCB0aGUgZGlzcGxheSB0b3BvbG9naWVzLCByYyA9ICVkXG4iLCByYyk7Ci0JCWdvdG8gcmVhZF9m YWlsOwotCX0KLQotCXRvcG9sb2d5ID0ga2NhbGxvYyh0b3BfY291bnQsIHNpemVvZigqdG9wb2xv Z3kpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRvcG9sb2d5KSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJ Z290byByZWFkX2ZhaWw7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IHRvcF9jb3VudDsgaSsrKSB7 Ci0JCXN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSAqdG9wID0gJnRvcG9sb2d5W2ldOwotCi0J CXRvcC0+bnVtX2xtID0gYXJyYXlbaSAqIFRPUE9MT0dZX1NFVF9MRU5dOwotCQl0b3AtPm51bV9l bmMgPSBhcnJheVtpICogVE9QT0xPR1lfU0VUX0xFTiArIDFdOwotCQl0b3AtPm51bV9pbnRmID0g YXJyYXlbaSAqIFRPUE9MT0dZX1NFVF9MRU4gKyAyXTsKLQl9OwotCi0JaWYgKHRvcG9sb2d5X292 ZXJyaWRlID49IDAgJiYgdG9wb2xvZ3lfb3ZlcnJpZGUgPCB0b3BfY291bnQpIHsKLQkJcHJfZGVi dWcoIm92ZXJyaWRlIHRvcG9sb2d5OiBjZmc6JWQgbG06JWQgY29tcF9lbmM6JWQgaW50ZjolZFxu IiwKLQkJCXRvcG9sb2d5X292ZXJyaWRlLAotCQkJdG9wb2xvZ3lbdG9wb2xvZ3lfb3ZlcnJpZGVd Lm51bV9sbSwKLQkJCXRvcG9sb2d5W3RvcG9sb2d5X292ZXJyaWRlXS5udW1fZW5jLAotCQkJdG9w b2xvZ3lbdG9wb2xvZ3lfb3ZlcnJpZGVdLm51bV9pbnRmKTsKLQkJdG9wX3NlbCA9IHRvcG9sb2d5 X292ZXJyaWRlOwotCQlnb3RvIHBhcnNlX2RvbmU7Ci0JfQotCi0JcmMgPSBvZl9wcm9wZXJ0eV9y ZWFkX3UzMihvZl9ub2RlLAotCQkJInFjb20sZGVmYXVsdC10b3BvbG9neS1pbmRleCIsICZ0b3Bf c2VsKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJubyBkZWZhdWx0IHRvcG9sb2d5IHNlbGVjdGVk LCByYyA9ICVkXG4iLCByYyk7Ci0JCWdvdG8gcGFyc2VfZmFpbDsKLQl9Ci0KLQlpZiAodG9wX3Nl bCA+PSB0b3BfY291bnQpIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlwcl9lcnIoImRlZmF1bHQgdG9w b2xvZ3kgaXMgc3BlY2lmaWVkIGlzIG5vdCB2YWxpZCwgcmMgPSAlZFxuIiwKLQkJCXJjKTsKLQkJ Z290byBwYXJzZV9mYWlsOwotCX0KLQotCXByX2RlYnVnKCJkZWZhdWx0IHRvcG9sb2d5OiBsbTog JWQgY29tcF9lbmM6JWQgaW50ZjogJWRcbiIsCi0JCXRvcG9sb2d5W3RvcF9zZWxdLm51bV9sbSwK LQkJdG9wb2xvZ3lbdG9wX3NlbF0ubnVtX2VuYywKLQkJdG9wb2xvZ3lbdG9wX3NlbF0ubnVtX2lu dGYpOwotCi1wYXJzZV9kb25lOgotCW1lbWNweSgmcHJpdl9pbmZvLT50b3BvbG9neSwgJnRvcG9s b2d5W3RvcF9zZWxdLAotCQlzaXplb2Yoc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5KSk7Ci1w YXJzZV9mYWlsOgotCWtmcmVlKHRvcG9sb2d5KTsKLXJlYWRfZmFpbDoKLQlrZnJlZShhcnJheSk7 Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX3BhcnNlX2Rtc19pbmZv KHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsLAotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkK LXsKLQlpbnQgZG1zX2VuYWJsZWQ7Ci0JY29uc3QgY2hhciAqZGF0YTsKLQotCWlmICghb2Zfbm9k ZSB8fCAhcGFuZWwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCXBhbmVsLT5kbXNfbW9kZSA9IERTSV9ETVNfTU9ERV9ESVNBQkxFRDsK LQlkbXNfZW5hYmxlZCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChvZl9ub2RlLAotCQkicWNvbSxk eW5hbWljLW1vZGUtc3dpdGNoLWVuYWJsZWQiKTsKLQlpZiAoIWRtc19lbmFibGVkKQotCQlyZXR1 cm4gMDsKLQotCWRhdGEgPSBvZl9nZXRfcHJvcGVydHkob2Zfbm9kZSwgInFjb20sZHluYW1pYy1t b2RlLXN3aXRjaC10eXBlIiwgTlVMTCk7Ci0JaWYgKGRhdGEgJiYgIXN0cmNtcChkYXRhLCAiZHlu YW1pYy1yZXNvbHV0aW9uLXN3aXRjaC1pbW1lZGlhdGUiKSkgewotCQlwYW5lbC0+ZG1zX21vZGUg PSBEU0lfRE1TX01PREVfUkVTX1NXSVRDSF9JTU1FRElBVEU7Ci0JfSBlbHNlIHsKLQkJcHJfZXJy KCJbJXNdIHVuc3VwcG9ydGVkIGR5bmFtaWMgc3dpdGNoIG1vZGU6ICVzXG4iLAotCQkJCQkJCXBh bmVsLT5uYW1lLCBkYXRhKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19 OwotCi0vKgotICogVGhlIGxlbmd0aCBvZiBhbGwgdGhlIHZhbGlkIHZhbHVlcyB0byBiZSBjaGVj a2VkIHNob3VsZCBub3QgYmUgZ3JlYXRlcgotICogdGhhbiB0aGUgbGVuZ3RoIG9mIHJldHVybmVk IGRhdGEgZnJvbSByZWFkIGNvbW1hbmQuCi0gKi8KLXN0YXRpYyBib29sCi1kc2lfcGFuZWxfcGFy c2VfZXNkX2NoZWNrX3ZhbGlkX3BhcmFtcyhzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwgdTMyIGNv dW50KQotewotCWludCBpOwotCXN0cnVjdCBkcm1fcGFuZWxfZXNkX2NvbmZpZyAqY29uZmlnID0g JnBhbmVsLT5lc2RfY29uZmlnOwotCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLQkJ aWYgKGNvbmZpZy0+c3RhdHVzX3ZhbGlkX3BhcmFtc1tpXSA+Ci0JCQkJY29uZmlnLT5zdGF0dXNf Y21kc19ybGVuW2ldKSB7Ci0JCQlwcl9kZWJ1ZygiaWdub3JlIHZhbGlkIHBhcmFtc1xuIik7Ci0J CQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJv b2wgZHNpX3BhbmVsX3BhcnNlX2VzZF9zdGF0dXNfbGVuKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAs Ci0JY2hhciAqcHJvcF9rZXksIHUzMiAqKnRhcmdldCwgdTMyIGNtZF9jbnQpCi17Ci0JaW50IHRt cDsKLQotCWlmICghb2ZfZmluZF9wcm9wZXJ0eShucCwgcHJvcF9rZXksICZ0bXApKQotCQlyZXR1 cm4gZmFsc2U7Ci0KLQl0bXAgLz0gc2l6ZW9mKHUzMik7Ci0JaWYgKHRtcCAhPSBjbWRfY250KSB7 Ci0JCXByX2VycigicmVxdWVzdCBwcm9wZXJ0eSglZCkgZG8gbm90IG1hdGNoIGNtZCBjb3VudCgl ZClcbiIsCi0JCQkJdG1wLCBjbWRfY250KTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCSp0YXJn ZXQgPSBrY2FsbG9jKHRtcCwgc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOwotCWlmIChJU19FUlJf T1JfTlVMTCgqdGFyZ2V0KSkgewotCQlwcl9lcnIoIkVycm9yIGFsbG9jYXRpbmcgbWVtb3J5IGZv ciBwcm9wZXJ0eVxuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAob2ZfcHJvcGVydHlf cmVhZF91MzJfYXJyYXkobnAsIHByb3Bfa2V5LCAqdGFyZ2V0LCB0bXApKSB7Ci0JCXByX2Vycigi Y2Fubm90IGdldCB2YWx1ZXMgZnJvbSBkdHNcbiIpOwotCQlrZnJlZSgqdGFyZ2V0KTsKLQkJKnRh cmdldCA9IE5VTEw7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQot c3RhdGljIHZvaWQgZHNpX3BhbmVsX2VzZF9jb25maWdfZGVpbml0KHN0cnVjdCBkcm1fcGFuZWxf ZXNkX2NvbmZpZyAqZXNkX2NvbmZpZykKLXsKLQlrZnJlZShlc2RfY29uZmlnLT5yZXR1cm5fYnVm KTsKLQlrZnJlZShlc2RfY29uZmlnLT5zdGF0dXNfdmFsdWUpOwotCWtmcmVlKGVzZF9jb25maWct PnN0YXR1c192YWxpZF9wYXJhbXMpOwotCWtmcmVlKGVzZF9jb25maWctPnN0YXR1c19jbWRzX3Js ZW4pOwotCWtmcmVlKGVzZF9jb25maWctPnN0YXR1c19jbWQuY21kcyk7Ci19Ci0KLXN0YXRpYyBp bnQgZHNpX3BhbmVsX3BhcnNlX2VzZF9jb25maWcoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsCi0J CQkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpCi17Ci0JaW50IHJjID0gMDsKLQl1 MzIgdG1wOwotCXUzMiBpLCBzdGF0dXNfbGVuLCAqbGVucDsKLQlzdHJ1Y3QgcHJvcGVydHkgKmRh dGE7Ci0JY29uc3QgY2hhciAqc3RyaW5nOwotCXN0cnVjdCBkcm1fcGFuZWxfZXNkX2NvbmZpZyAq ZXNkX2NvbmZpZzsKLQotCWVzZF9jb25maWcgPSAmcGFuZWwtPmVzZF9jb25maWc7Ci0JZXNkX2Nv bmZpZy0+ZXNkX2VuYWJsZWQgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJInFj b20sZXNkLWNoZWNrLWVuYWJsZWQiKTsKLQotCWlmICghZXNkX2NvbmZpZy0+ZXNkX2VuYWJsZWQp Ci0JCXJldHVybiAwOwotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhvZl9ub2RlLAot CQkJInFjb20sbWRzcy1kc2ktcGFuZWwtc3RhdHVzLWNoZWNrLW1vZGUiLCAmc3RyaW5nKTsKLQlp ZiAoIXJjKSB7Ci0JCWlmICghc3RyY21wKHN0cmluZywgImJ0YV9jaGVjayIpKSB7Ci0JCQllc2Rf Y29uZmlnLT5zdGF0dXNfbW9kZSA9IEVTRF9NT0RFX1NXX0JUQTsKLQkJfSBlbHNlIGlmICghc3Ry Y21wKHN0cmluZywgInJlZ19yZWFkIikpIHsKLQkJCWVzZF9jb25maWctPnN0YXR1c19tb2RlID0g RVNEX01PREVfUkVHX1JFQUQ7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcChzdHJpbmcsICJ0ZV9zaWdu YWxfY2hlY2siKSkgewotCQkJaWYgKHBhbmVsLT5wYW5lbF9tb2RlID09IERTSV9PUF9DTURfTU9E RSkgewotCQkJCWVzZF9jb25maWctPnN0YXR1c19tb2RlID0gRVNEX01PREVfUEFORUxfVEU7Ci0J CQl9IGVsc2UgewotCQkJCXByX2VycigiVEUtRVNEIG5vdCB2YWxpZCBmb3IgdmlkZW8gbW9kZVxu Iik7Ci0JCQkJcmMgPSAtRUlOVkFMOwotCQkJCWdvdG8gZXJyb3I7Ci0JCQl9Ci0JCX0gZWxzZSB7 Ci0JCQlwcl9lcnIoIk5vIHZhbGlkIHBhbmVsLXN0YXR1cy1jaGVjay1tb2RlIHN0cmluZ1xuIik7 Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfSBlbHNlIHsKLQkJcHJf ZGVidWcoInN0YXR1cyBjaGVjayBtZXRob2Qgbm90IGRlZmluZWQhXG4iKTsKLQkJcmMgPSAtRUlO VkFMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmICgoZXNkX2NvbmZpZy0+c3RhdHVzX21vZGUg PT0gRVNEX01PREVfU1dfQlRBKSB8fAotCQkoZXNkX2NvbmZpZy0+c3RhdHVzX21vZGUgPT0gRVNE X01PREVfUEFORUxfVEUpKQotCQlyZXR1cm4gMDsKLQotCWRzaV9wYW5lbF9wYXJzZV9jbWRfc2V0 c19zdWIoJmVzZF9jb25maWctPnN0YXR1c19jbWQsCi0JCQkJRFNJX0NNRF9TRVRfUEFORUxfU1RB VFVTLCBvZl9ub2RlKTsKLQlpZiAoIWVzZF9jb25maWctPnN0YXR1c19jbWQuY291bnQpIHsKLQkJ cHJfZXJyKCJwYW5lbCBzdGF0dXMgY29tbWFuZCBwYXJzaW5nIGZhaWxlZFxuIik7Ci0JCXJjID0g LUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAoIWRzaV9wYW5lbF9wYXJzZV9lc2Rf c3RhdHVzX2xlbihvZl9ub2RlLAotCQkicWNvbSxtZHNzLWRzaS1wYW5lbC1zdGF0dXMtcmVhZC1s ZW5ndGgiLAotCQkJJnBhbmVsLT5lc2RfY29uZmlnLnN0YXR1c19jbWRzX3JsZW4sCi0JCQkJZXNk X2NvbmZpZy0+c3RhdHVzX2NtZC5jb3VudCkpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHN0YXR1cyBy ZWFkIGxlbmd0aFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjE7Ci0JfQotCi0J aWYgKGRzaV9wYW5lbF9wYXJzZV9lc2Rfc3RhdHVzX2xlbihvZl9ub2RlLAotCQkicWNvbSxtZHNz LWRzaS1wYW5lbC1zdGF0dXMtdmFsaWQtcGFyYW1zIiwKLQkJCSZwYW5lbC0+ZXNkX2NvbmZpZy5z dGF0dXNfdmFsaWRfcGFyYW1zLAotCQkJCWVzZF9jb25maWctPnN0YXR1c19jbWQuY291bnQpKSB7 Ci0JCWlmICghZHNpX3BhbmVsX3BhcnNlX2VzZF9jaGVja192YWxpZF9wYXJhbXMocGFuZWwsCi0J CQkJCWVzZF9jb25maWctPnN0YXR1c19jbWQuY291bnQpKSB7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0J CQlnb3RvIGVycm9yMjsKLQkJfQotCX0KLQotCXN0YXR1c19sZW4gPSAwOwotCWxlbnAgPSBlc2Rf Y29uZmlnLT5zdGF0dXNfdmFsaWRfcGFyYW1zID86IGVzZF9jb25maWctPnN0YXR1c19jbWRzX3Js ZW47Ci0JZm9yIChpID0gMDsgaSA8IGVzZF9jb25maWctPnN0YXR1c19jbWQuY291bnQ7ICsraSkK LQkJc3RhdHVzX2xlbiArPSBsZW5wW2ldOwotCi0JaWYgKCFzdGF0dXNfbGVuKSB7Ci0JCXJjID0g LUVJTlZBTDsKLQkJZ290byBlcnJvcjI7Ci0JfQotCi0JLyoKLQkgKiBTb21lIHBhbmVsIG1heSBu ZWVkIG11bHRpcGxlIHJlYWQgY29tbWFuZHMgdG8gcHJvcGVybHkKLQkgKiBjaGVjayBwYW5lbCBz dGF0dXMuIERvIGEgc2FuaXR5IGNoZWNrIGZvciBwcm9wZXIgc3RhdHVzCi0JICogdmFsdWUgd2hp Y2ggd2lsbCBiZSBjb21wYXJlZCB3aXRoIHRoZSB2YWx1ZSByZWFkIGJ5IGRzaQotCSAqIGNvbnRy b2xsZXIgZHVyaW5nIEVTRCBjaGVjay4gQWxzbyBjaGVjayBpZiBtdWx0aXBsZSByZWFkCi0JICog Y29tbWFuZHMgYXJlIHRoZXJlIHRoZW4sIHRoZXJlIHNob3VsZCBiZSBjb3JyZXNwb25kaW5nCi0J ICogc3RhdHVzIGNoZWNrIHZhbHVlcyBmb3IgZWFjaCByZWFkIGNvbW1hbmQuCi0JICovCi0JZGF0 YSA9IG9mX2ZpbmRfcHJvcGVydHkob2Zfbm9kZSwKLQkJCSJxY29tLG1kc3MtZHNpLXBhbmVsLXN0 YXR1cy12YWx1ZSIsICZ0bXApOwotCXRtcCAvPSBzaXplb2YodTMyKTsKLQlpZiAoIUlTX0VSUl9P Ul9OVUxMKGRhdGEpICYmIHRtcCAhPSAwICYmICh0bXAgJSBzdGF0dXNfbGVuKSA9PSAwKSB7Ci0J CWVzZF9jb25maWctPmdyb3VwcyA9IHRtcCAvIHN0YXR1c19sZW47Ci0JfSBlbHNlIHsKLQkJcHJf ZXJyKCJlcnJvciBwYXJzZSBwYW5lbC1zdGF0dXMtdmFsdWVcbiIpOwotCQlyYyA9IC1FSU5WQUw7 Ci0JCWdvdG8gZXJyb3IyOwotCX0KLQotCWVzZF9jb25maWctPnN0YXR1c192YWx1ZSA9Ci0JCWt6 YWxsb2Moc2l6ZW9mKHUzMikgKiBzdGF0dXNfbGVuICogZXNkX2NvbmZpZy0+Z3JvdXBzLAotCQkJ R0ZQX0tFUk5FTCk7Ci0JaWYgKCFlc2RfY29uZmlnLT5zdGF0dXNfdmFsdWUpIHsKLQkJcmMgPSAt RU5PTUVNOwotCQlnb3RvIGVycm9yMjsKLQl9Ci0KLQllc2RfY29uZmlnLT5yZXR1cm5fYnVmID0g a2NhbGxvYyhzdGF0dXNfbGVuICogZXNkX2NvbmZpZy0+Z3JvdXBzLAotCQkJc2l6ZW9mKHVuc2ln bmVkIGNoYXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWVzZF9jb25maWctPnJldHVybl9idWYpIHsK LQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yMzsKLQl9Ci0KLQlyYyA9IG9mX3Byb3BlcnR5 X3JlYWRfdTMyX2FycmF5KG9mX25vZGUsCi0JCSJxY29tLG1kc3MtZHNpLXBhbmVsLXN0YXR1cy12 YWx1ZSIsCi0JCWVzZF9jb25maWctPnN0YXR1c192YWx1ZSwgZXNkX2NvbmZpZy0+Z3JvdXBzICog c3RhdHVzX2xlbik7Ci0JaWYgKHJjKSB7Ci0JCXByX2RlYnVnKCJlcnJvciByZWFkaW5nIHBhbmVs IHN0YXR1cyB2YWx1ZXNcbiIpOwotCQltZW1zZXQoZXNkX2NvbmZpZy0+c3RhdHVzX3ZhbHVlLCAw LAotCQkJCWVzZF9jb25maWctPmdyb3VwcyAqIHN0YXR1c19sZW4pOwotCX0KLQotCXJldHVybiAw OwotCi1lcnJvcjM6Ci0Ja2ZyZWUoZXNkX2NvbmZpZy0+c3RhdHVzX3ZhbHVlKTsKLWVycm9yMjoK LQlrZnJlZShlc2RfY29uZmlnLT5zdGF0dXNfdmFsaWRfcGFyYW1zKTsKLQlrZnJlZShlc2RfY29u ZmlnLT5zdGF0dXNfY21kc19ybGVuKTsKLWVycm9yMToKLQlrZnJlZShlc2RfY29uZmlnLT5zdGF0 dXNfY21kLmNtZHMpOwotZXJyb3I6Ci0JcGFuZWwtPmVzZF9jb25maWcuZXNkX2VuYWJsZWQgPSBm YWxzZTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0cnVjdCBkc2lfcGFuZWwgKmRzaV9wYW5lbF9nZXQo c3RydWN0IGRldmljZSAqcGFyZW50LAotCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSwK LQkJCQlpbnQgdG9wb2xvZ3lfb3ZlcnJpZGUpCi17Ci0Jc3RydWN0IGRzaV9wYW5lbCAqcGFuZWw7 Ci0JaW50IHJjID0gMDsKLQotCXBhbmVsID0ga3phbGxvYyhzaXplb2YoKnBhbmVsKSwgR0ZQX0tF Uk5FTCk7Ci0JaWYgKCFwYW5lbCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQlwYW5l bC0+bmFtZSA9IG9mX2dldF9wcm9wZXJ0eShvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS1wYW5lbC1u YW1lIiwKLQkJCQkgICAgICBOVUxMKTsKLQlpZiAoIXBhbmVsLT5uYW1lKQotCQlwYW5lbC0+bmFt ZSA9IERTSV9QQU5FTF9ERUZBVUxUX0xBQkVMOwotCi0JcmMgPSBkc2lfcGFuZWxfcGFyc2VfaG9z dF9jb25maWcocGFuZWwsIG9mX25vZGUpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0 byBwYXJzZSBob3N0IGNvbmZpZ3VyYXRpb24sIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7 Ci0JfQotCi0JcmMgPSBkc2lfcGFuZWxfcGFyc2VfcGFuZWxfbW9kZShwYW5lbCwgb2Zfbm9kZSk7 Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIHBhbmVsIG1vZGUgY29uZmln dXJhdGlvbiwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9w YW5lbF9wYXJzZV9kZnBzX2NhcHMoJnBhbmVsLT5kZnBzX2NhcHMsIG9mX25vZGUsIHBhbmVsLT5u YW1lKTsKLQlpZiAocmMpCi0JCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIGRmcHMgY29uZmlndXJh dGlvbiwgcmM9JWRcbiIsIHJjKTsKLQotCXJjID0gZHNpX3BhbmVsX3BhcnNlX3BoeV9wcm9wcygm cGFuZWwtPnBoeV9wcm9wcywgb2Zfbm9kZSwgcGFuZWwtPm5hbWUpOwotCWlmIChyYykgewotCQlw cl9lcnIoImZhaWxlZCB0byBwYXJzZSBwYW5lbCBwaHlzaWNhbCBkaW1lbnNpb24sIHJjPSVkXG4i LCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBkc2lfcGFuZWxfcGFyc2VfcG93ZXJf Y2ZnKHBhcmVudCwgcGFuZWwsIG9mX25vZGUpOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWlsZWQg dG8gcGFyc2UgcG93ZXIgY29uZmlnLCByYz0lZFxuIiwgcmMpOwotCi0JcmMgPSBkc2lfcGFuZWxf cGFyc2VfZ3Bpb3MocGFuZWwsIG9mX25vZGUpOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWlsZWQg dG8gcGFyc2UgcGFuZWwgZ3Bpb3MsIHJjPSVkXG4iLCByYyk7Ci0KLQlyYyA9IGRzaV9wYW5lbF9w YXJzZV9ibF9jb25maWcocGFuZWwsIG9mX25vZGUpOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWls ZWQgdG8gcGFyc2UgYmFja2xpZ2h0IGNvbmZpZywgcmM9JWRcbiIsIHJjKTsKLQotCi0JcmMgPSBk c2lfcGFuZWxfcGFyc2VfbWlzY19mZWF0dXJlcyhwYW5lbCwgb2Zfbm9kZSk7Ci0JaWYgKHJjKQot CQlwcl9lcnIoImZhaWxlZCB0byBwYXJzZSBtaXNjIGZlYXR1cmVzLCByYz0lZFxuIiwgcmMpOwot Ci0JcmMgPSBkc2lfcGFuZWxfcGFyc2VfaGRyX2NvbmZpZyhwYW5lbCwgb2Zfbm9kZSk7Ci0JaWYg KHJjKQotCQlwcl9lcnIoImZhaWxlZCB0byBwYXJzZSBoZHIgY29uZmlnLCByYz0lZFxuIiwgcmMp OwotCi0JcmMgPSBkc2lfcGFuZWxfZ2V0X21vZGVfY291bnQocGFuZWwsIG9mX25vZGUpOwotCWlm IChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgbW9kZSBjb3VudCwgcmM9JWRcbiIsIHJj KTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF9wYXJzZV9kbXNfaW5mbyhw YW5lbCwgb2Zfbm9kZSk7Ci0JaWYgKHJjKQotCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIGdldCBkbXMg aW5mbywgcmM9JWRcbiIsIHJjKTsKLQotCXJjID0gZHNpX3BhbmVsX3BhcnNlX2VzZF9jb25maWco cGFuZWwsIG9mX25vZGUpOwotCWlmIChyYykgewotCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIHBhcnNl IGVzZCBjb25maWcsIHJjPSVkXG4iLCByYyk7Ci0JfSBlbHNlIHsKLQkJdTggKmVzZF9tb2RlID0g TlVMTDsKLQotCQlpZiAocGFuZWwtPmVzZF9jb25maWcuc3RhdHVzX21vZGUgPT0gRVNEX01PREVf UkVHX1JFQUQpCi0JCQllc2RfbW9kZSA9ICJyZWdpc3Rlcl9yZWFkIjsKLQkJZWxzZSBpZiAocGFu ZWwtPmVzZF9jb25maWcuc3RhdHVzX21vZGUgPT0gRVNEX01PREVfU1dfQlRBKQotCQkJZXNkX21v ZGUgPSAiYnRhX3RyaWdnZXIiOwotCQllbHNlIGlmIChwYW5lbC0+ZXNkX2NvbmZpZy5zdGF0dXNf bW9kZSA9PSAgRVNEX01PREVfUEFORUxfVEUpCi0JCQllc2RfbW9kZSA9ICJ0ZV9jaGVjayI7Ci0K LQkJcHJfaW5mbygiRVNEIGVuYWJsZWQgd2l0aCBtb2RlOiAlc1xuIiwgZXNkX21vZGUpOwotCX0K LQotCXBhbmVsLT5wYW5lbF9vZl9ub2RlID0gb2Zfbm9kZTsKLQlkcm1fcGFuZWxfaW5pdCgmcGFu ZWwtPmRybV9wYW5lbCk7Ci0JbXV0ZXhfaW5pdCgmcGFuZWwtPnBhbmVsX2xvY2spOwotCXBhbmVs LT5wYXJlbnQgPSBwYXJlbnQ7Ci0JcmV0dXJuIHBhbmVsOwotZXJyb3I6Ci0Ja2ZyZWUocGFuZWwp OwotCXJldHVybiBFUlJfUFRSKHJjKTsKLX0KLQotdm9pZCBkc2lfcGFuZWxfcHV0KHN0cnVjdCBk c2lfcGFuZWwgKnBhbmVsKQotewotCS8qIGZyZWUgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgRVNE IGNoZWNrICovCi0JZHNpX3BhbmVsX2VzZF9jb25maWdfZGVpbml0KCZwYW5lbC0+ZXNkX2NvbmZp Zyk7Ci0KLQlrZnJlZShwYW5lbCk7Ci19Ci0KLWludCBkc2lfcGFuZWxfZHJ2X2luaXQoc3RydWN0 IGRzaV9wYW5lbCAqcGFuZWwsCi0JCSAgICAgICBzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCkK LXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldjsKLQotCWlmICgh cGFuZWwgfHwgIWhvc3QpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVy biAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQotCWRl diA9ICZwYW5lbC0+bWlwaV9kZXZpY2U7Ci0KLQlkZXYtPmhvc3QgPSBob3N0OwotCS8qCi0JICog V2UgZG9udCBoYXZlIGRldmljZSBzdHJ1Y3R1cmUgc2luY2UgcGFuZWwgaXMgbm90IGEgZGV2aWNl IG5vZGUuCi0JICogV2hlbiB1c2luZyBkcm0gcGFuZWwgZnJhbWV3b3JrLCB0aGUgZGV2aWNlIGlz IHByb2JlZCB3aGVuIHRoZSBob3N0IGlzCi0JICogY3JlYXRlLgotCSAqLwotCWRldi0+Y2hhbm5l bCA9IDA7Ci0JZGV2LT5sYW5lcyA9IDQ7Ci0KLQlwYW5lbC0+aG9zdCA9IGhvc3Q7Ci0JcmMgPSBk c2lfcGFuZWxfdnJlZ19nZXQocGFuZWwpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFp bGVkIHRvIGdldCBwYW5lbCByZWd1bGF0b3JzLCByYz0lZFxuIiwKLQkJICAgICAgIHBhbmVsLT5u YW1lLCByYyk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF9waW5jdHJsX2lu aXQocGFuZWwpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGluaXQgcGlu Y3RybCwgcmM9JWRcbiIsIHBhbmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3JfdnJlZ19wdXQ7 Ci0JfQotCi0JcmMgPSBkc2lfcGFuZWxfZ3Bpb19yZXF1ZXN0KHBhbmVsKTsKLQlpZiAocmMpIHsK LQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byByZXF1ZXN0IGdwaW9zLCByYz0lZFxuIiwgcGFuZWwt Pm5hbWUsCi0JCSAgICAgICByYyk7Ci0JCWdvdG8gZXJyb3JfcGluY3RybF9kZWluaXQ7Ci0JfQot Ci0JcmMgPSBkc2lfcGFuZWxfYmxfcmVnaXN0ZXIocGFuZWwpOwotCWlmIChyYykgewotCQlpZiAo cmMgIT0gLUVQUk9CRV9ERUZFUikKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gcmVnaXN0ZXIg YmFja2xpZ2h0LCByYz0lZFxuIiwKLQkJCSAgICAgICBwYW5lbC0+bmFtZSwgcmMpOwotCQlnb3Rv IGVycm9yX2dwaW9fcmVsZWFzZTsKLQl9Ci0KLQlnb3RvIGV4aXQ7Ci0KLWVycm9yX2dwaW9fcmVs ZWFzZToKLQkodm9pZClkc2lfcGFuZWxfZ3Bpb19yZWxlYXNlKHBhbmVsKTsKLWVycm9yX3BpbmN0 cmxfZGVpbml0OgotCSh2b2lkKWRzaV9wYW5lbF9waW5jdHJsX2RlaW5pdChwYW5lbCk7Ci1lcnJv cl92cmVnX3B1dDoKLQkodm9pZClkc2lfcGFuZWxfdnJlZ19wdXQocGFuZWwpOwotZXhpdDoKLQlt dXRleF91bmxvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBk c2lfcGFuZWxfZHJ2X2RlaW5pdChzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQgcmMg PSAwOwotCi0JaWYgKCFwYW5lbCkgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwot Ci0JcmMgPSBkc2lfcGFuZWxfYmxfdW5yZWdpc3RlcihwYW5lbCk7Ci0JaWYgKHJjKQotCQlwcl9l cnIoIlslc10gZmFpbGVkIHRvIHVucmVnaXN0ZXIgYmFja2xpZ2h0LCByYz0lZFxuIiwKLQkJICAg ICAgIHBhbmVsLT5uYW1lLCByYyk7Ci0KLQlyYyA9IGRzaV9wYW5lbF9ncGlvX3JlbGVhc2UocGFu ZWwpOwotCWlmIChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byByZWxlYXNlIGdwaW9zLCBy Yz0lZFxuIiwgcGFuZWwtPm5hbWUsCi0JCSAgICAgICByYyk7Ci0KLQlyYyA9IGRzaV9wYW5lbF9w aW5jdHJsX2RlaW5pdChwYW5lbCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRv IGRlaW5pdCBncGlvcywgcmM9JWRcbiIsIHBhbmVsLT5uYW1lLAotCQkgICAgICAgcmMpOwotCi0J cmMgPSBkc2lfcGFuZWxfdnJlZ19wdXQocGFuZWwpOwotCWlmIChyYykKLQkJcHJfZXJyKCJbJXNd IGZhaWxlZCB0byBwdXQgcmVncywgcmM9JWRcbiIsIHBhbmVsLT5uYW1lLCByYyk7Ci0KLQlwYW5l bC0+aG9zdCA9IE5VTEw7Ci0JbWVtc2V0KCZwYW5lbC0+bWlwaV9kZXZpY2UsIDB4MCwgc2l6ZW9m KHBhbmVsLT5taXBpX2RldmljZSkpOwotCi0JbXV0ZXhfdW5sb2NrKCZwYW5lbC0+cGFuZWxfbG9j ayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX3BhbmVsX3ZhbGlkYXRlX21vZGUoc3RydWN0 IGRzaV9wYW5lbCAqcGFuZWwsCi0JCQkgICAgc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGUp Ci17Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBkc2lfcGFuZWxfZ2V0X21vZGVfY291bnQoc3RydWN0 IGRzaV9wYW5lbCAqcGFuZWwsCi0Jc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlKQotewotCWNv bnN0IHUzMiBTSU5HTEVfTU9ERV9TVVBQT1JUID0gMTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnRp bWluZ3NfbnA7Ci0JaW50IGNvdW50LCByYyA9IDA7Ci0KLQlpZiAoIW9mX25vZGUgfHwgIXBhbmVs KSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0KLQlwYW5lbC0+bnVtX3RpbWluZ19ub2RlcyA9IDA7Ci0KLQl0aW1pbmdzX25wID0gb2ZfZ2V0 X2NoaWxkX2J5X25hbWUob2Zfbm9kZSwKLQkJCSJxY29tLG1kc3MtZHNpLWRpc3BsYXktdGltaW5n cyIpOwotCWlmICghdGltaW5nc19ucCkgewotCQlwcl9lcnIoIm5vIGRpc3BsYXkgdGltaW5nIG5v ZGVzIGRlZmluZWRcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0J Y291bnQgPSBvZl9nZXRfY2hpbGRfY291bnQodGltaW5nc19ucCk7Ci0JaWYgKCFjb3VudCB8fCBj b3VudCA+IERTSV9NT0RFX01BWCkgewotCQlwcl9lcnIoImludmFsaWQgY291bnQgb2YgdGltaW5n IG5vZGVzOiAlZFxuIiwgY291bnQpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0J fQotCi0JLyogTm8gbXVsdGlyZXNvbHV0aW9uIHN1cHBvcnQgaXMgYXZhaWxhYmxlIGZvciB2aWRl byBtb2RlIHBhbmVscyAqLwotCWlmIChwYW5lbC0+cGFuZWxfbW9kZSAhPSBEU0lfT1BfQ01EX01P REUpCi0JCWNvdW50ID0gU0lOR0xFX01PREVfU1VQUE9SVDsKLQotCXBhbmVsLT5udW1fdGltaW5n X25vZGVzID0gY291bnQ7Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9wYW5l bF9nZXRfcGh5X3Byb3BzKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsLAotCQkJICAgIHN0cnVjdCBk c2lfcGFuZWxfcGh5X3Byb3BzICpwaHlfcHJvcHMpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICgh cGFuZWwgfHwgIXBoeV9wcm9wcykgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwot Ci0JbWVtY3B5KHBoeV9wcm9wcywgJnBhbmVsLT5waHlfcHJvcHMsIHNpemVvZigqcGh5X3Byb3Bz KSk7Ci0KLQltdXRleF91bmxvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19 Ci0KLWludCBkc2lfcGFuZWxfZ2V0X2RmcHNfY2FwcyhzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwK LQkJCSAgICBzdHJ1Y3QgZHNpX2RmcHNfY2FwYWJpbGl0aWVzICpkZnBzX2NhcHMpCi17Ci0JaW50 IHJjID0gMDsKLQotCWlmICghcGFuZWwgfHwgIWRmcHNfY2FwcykgewotCQlwcl9lcnIoImludmFs aWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGFu ZWwtPnBhbmVsX2xvY2spOwotCi0JbWVtY3B5KGRmcHNfY2FwcywgJnBhbmVsLT5kZnBzX2NhcHMs IHNpemVvZigqZGZwc19jYXBzKSk7Ci0KLQltdXRleF91bmxvY2soJnBhbmVsLT5wYW5lbF9sb2Nr KTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXZvaWQgZHNpX3BhbmVsX3B1dF9tb2RlKHN0cnVjdCBkc2lf ZGlzcGxheV9tb2RlICptb2RlKQotewotCWludCBpOwotCi0JaWYgKCFtb2RlLT5wcml2X2luZm8p Ci0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBEU0lfQ01EX1NFVF9NQVg7IGkrKykKLQkJ ZHNpX3BhbmVsX2Rlc3Ryb3lfY21kX3BhY2tldHMoJm1vZGUtPnByaXZfaW5mby0+Y21kX3NldHNb aV0pOwotCi0Ja2ZyZWUobW9kZS0+cHJpdl9pbmZvKTsKLX0KLQotaW50IGRzaV9wYW5lbF9nZXRf bW9kZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwKLQkJCXUzMiBpbmRleCwgc3RydWN0IGRzaV9k aXNwbGF5X21vZGUgKm1vZGUsCi0JCQlpbnQgdG9wb2xvZ3lfb3ZlcnJpZGUpCi17Ci0Jc3RydWN0 IGRldmljZV9ub2RlICp0aW1pbmdzX25wLCAqY2hpbGRfbnA7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5 X21vZGVfcHJpdl9pbmZvICpwcnZfaW5mbzsKLQl1MzIgY2hpbGRfaWR4ID0gMDsKLQlpbnQgcmMg PSAwLCBudW1fdGltaW5nczsKLQotCWlmICghcGFuZWwgfHwgIW1vZGUpIHsKLQkJcHJfZXJyKCJp bnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2so JnBhbmVsLT5wYW5lbF9sb2NrKTsKLQotCW1vZGUtPnByaXZfaW5mbyA9IGt6YWxsb2Moc2l6ZW9m KCptb2RlLT5wcml2X2luZm8pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1vZGUtPnByaXZfaW5mbykg ewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlwcnZfaW5mbyA9IG1vZGUt PnByaXZfaW5mbzsKLQotCXRpbWluZ3NfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShwYW5lbC0+ cGFuZWxfb2Zfbm9kZSwKLQkJInFjb20sbWRzcy1kc2ktZGlzcGxheS10aW1pbmdzIik7Ci0JaWYg KCF0aW1pbmdzX25wKSB7Ci0JCXByX2Vycigibm8gZGlzcGxheSB0aW1pbmcgbm9kZXMgZGVmaW5l ZFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBwYXJzZV9mYWlsOwotCX0KLQotCW51bV90 aW1pbmdzID0gb2ZfZ2V0X2NoaWxkX2NvdW50KHRpbWluZ3NfbnApOwotCWlmICghbnVtX3RpbWlu Z3MgfHwgbnVtX3RpbWluZ3MgPiBEU0lfTU9ERV9NQVgpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGNv dW50IG9mIHRpbWluZyBub2RlczogJWRcbiIsIG51bV90aW1pbmdzKTsKLQkJcmMgPSAtRUlOVkFM OwotCQlnb3RvIHBhcnNlX2ZhaWw7Ci0JfQotCi0JZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZSh0aW1p bmdzX25wLCBjaGlsZF9ucCkgewotCQlpZiAoaW5kZXggIT0gY2hpbGRfaWR4KyspCi0JCQljb250 aW51ZTsKLQotCQlyYyA9IGRzaV9wYW5lbF9wYXJzZV90aW1pbmcoJm1vZGUtPnRpbWluZywgY2hp bGRfbnApOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIHBhbmVsIHRp bWluZywgcmM9JWRcbiIsIHJjKTsKLQkJCWdvdG8gcGFyc2VfZmFpbDsKLQkJfQotCi0JCXJjID0g ZHNpX3BhbmVsX3BhcnNlX2RzY19wYXJhbXMobW9kZSwgY2hpbGRfbnApOwotCQlpZiAocmMpIHsK LQkJCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIGRzYyBwYXJhbXMsIHJjPSVkXG4iLCByYyk7Ci0J CQlnb3RvIHBhcnNlX2ZhaWw7Ci0JCX0KLQotCQlyYyA9IGRzaV9wYW5lbF9wYXJzZV90b3BvbG9n eShwcnZfaW5mbywgY2hpbGRfbnAsCi0JCQkJdG9wb2xvZ3lfb3ZlcnJpZGUpOwotCQlpZiAocmMp IHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIHBhbmVsIHRvcG9sb2d5LCByYz0lZFxuIiwg cmMpOwotCQkJZ290byBwYXJzZV9mYWlsOwotCQl9Ci0KLQkJcmMgPSBkc2lfcGFuZWxfcGFyc2Vf Y21kX3NldHMocHJ2X2luZm8sIGNoaWxkX25wKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZh aWxlZCB0byBwYXJzZSBjb21tYW5kIHNldHMsIHJjPSVkXG4iLCByYyk7Ci0JCQlnb3RvIHBhcnNl X2ZhaWw7Ci0JCX0KLQotCQlyYyA9IGRzaV9wYW5lbF9wYXJzZV9qaXR0ZXJfY29uZmlnKG1vZGUs IGNoaWxkX25wKTsKLQkJaWYgKHJjKQotCQkJcHJfZXJyKAotCQkJImZhaWxlZCB0byBwYXJzZSBw YW5lbCBqaXR0ZXIgY29uZmlnLCByYz0lZFxuIiwgcmMpOwotCi0JCXJjID0gZHNpX3BhbmVsX3Bh cnNlX3BoeV90aW1pbmcobW9kZSwgY2hpbGRfbnApOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigK LQkJCSJmYWlsZWQgdG8gcGFyc2UgcGFuZWwgcGh5IHRpbWluZ3MsIHJjPSVkXG4iLCByYyk7Ci0J CQlnb3RvIHBhcnNlX2ZhaWw7Ci0JCX0KLQl9Ci0JZ290byBkb25lOwotCi1wYXJzZV9mYWlsOgot CWtmcmVlKG1vZGUtPnByaXZfaW5mbyk7Ci0JbW9kZS0+cHJpdl9pbmZvID0gTlVMTDsKLWRvbmU6 Ci0JbXV0ZXhfdW5sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1p bnQgZHNpX3BhbmVsX2dldF9ob3N0X2NmZ19mb3JfbW9kZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5l bCwKLQkJCQkgICAgc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGUsCi0JCQkJICAgIHN0cnVj dCBkc2lfaG9zdF9jb25maWcgKmNvbmZpZykKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFwYW5l bCB8fCAhbW9kZSB8fCAhY29uZmlnKSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwot CQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7 Ci0KLQljb25maWctPnBhbmVsX21vZGUgPSBwYW5lbC0+cGFuZWxfbW9kZTsKLQltZW1jcHkoJmNv bmZpZy0+Y29tbW9uX2NvbmZpZywgJnBhbmVsLT5ob3N0X2NvbmZpZywKLQkgICAgICAgc2l6ZW9m KGNvbmZpZy0+Y29tbW9uX2NvbmZpZykpOwotCi0JaWYgKHBhbmVsLT5wYW5lbF9tb2RlID09IERT SV9PUF9WSURFT19NT0RFKSB7Ci0JCW1lbWNweSgmY29uZmlnLT51LnZpZGVvX2VuZ2luZSwgJnBh bmVsLT52aWRlb19jb25maWcsCi0JCSAgICAgICBzaXplb2YoY29uZmlnLT51LnZpZGVvX2VuZ2lu ZSkpOwotCX0gZWxzZSB7Ci0JCW1lbWNweSgmY29uZmlnLT51LmNtZF9lbmdpbmUsICZwYW5lbC0+ Y21kX2NvbmZpZywKLQkJICAgICAgIHNpemVvZihjb25maWctPnUuY21kX2VuZ2luZSkpOwotCX0K LQotCW1lbWNweSgmY29uZmlnLT52aWRlb190aW1pbmcsICZtb2RlLT50aW1pbmcsCi0JICAgICAg IHNpemVvZihjb25maWctPnZpZGVvX3RpbWluZykpOwotCWNvbmZpZy0+dmlkZW9fdGltaW5nLmRz Y19lbmFibGVkID0gbW9kZS0+cHJpdl9pbmZvLT5kc2NfZW5hYmxlZDsKLQljb25maWctPnZpZGVv X3RpbWluZy5kc2MgPSAmbW9kZS0+cHJpdl9pbmZvLT5kc2M7Ci0KLQljb25maWctPmVzY19jbGtf cmF0ZV9oeiA9IDE5MjAwMDAwOwotCW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwot CXJldHVybiByYzsKLX0KLQotaW50IGRzaV9wYW5lbF9wcmVfcHJlcGFyZShzdHJ1Y3QgZHNpX3Bh bmVsICpwYW5lbCkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFwYW5lbCkgewotCQlwcl9lcnIo ImludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9j aygmcGFuZWwtPnBhbmVsX2xvY2spOwotCi0JLyogSWYgTFAxMV9JTklUIGlzIHNldCwgcGFuZWwg d2lsbCBiZSBwb3dlcmVkIHVwIGR1cmluZyBwcmVwYXJlKCkgKi8KLQlpZiAocGFuZWwtPmxwMTFf aW5pdCkKLQkJZ290byBlcnJvcjsKLQotCXJjID0gZHNpX3BhbmVsX3Bvd2VyX29uKHBhbmVsKTsK LQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIHBhbmVsIHBvd2VyIG9uIGZhaWxlZCwgcmM9JWRc biIsIHBhbmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi1lcnJvcjoKLQltdXRl eF91bmxvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lf cGFuZWxfdXBkYXRlX3BwcyhzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQgcmMgPSAw OwotCXN0cnVjdCBkc2lfcGFuZWxfY21kX3NldCAqc2V0ID0gTlVMTDsKLQlzdHJ1Y3QgZHNpX2Rp c3BsYXlfbW9kZV9wcml2X2luZm8gKnByaXZfaW5mbyA9IE5VTEw7Ci0KLQlpZiAoIXBhbmVsIHx8 ICFwYW5lbC0+Y3VyX21vZGUpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQot CXByaXZfaW5mbyA9IHBhbmVsLT5jdXJfbW9kZS0+cHJpdl9pbmZvOwotCi0Jc2V0ID0gJnByaXZf aW5mby0+Y21kX3NldHNbRFNJX0NNRF9TRVRfUFBTXTsKLQotCWRzaV9kc2NfY3JlYXRlX3Bwc19i dWZfY21kKCZwcml2X2luZm8tPmRzYywgcGFuZWwtPmRzY19wcHNfY21kLCAwKTsKLQlyYyA9IGRz aV9wYW5lbF9jcmVhdGVfY21kX3BhY2tldHMocGFuZWwtPmRzY19wcHNfY21kLAotCQkJCQkgIERT SV9DTURfUFBTX1NJWkUsIDEsIHNldC0+Y21kcyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFp bGVkIHRvIGNyZWF0ZSBjbWQgcGFja2V0cywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsK LQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF90eF9jbWRfc2V0KHBhbmVsLCBEU0lfQ01EX1NFVF9QUFMp OwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHNlbmQgRFNJX0NNRF9TRVRf UFBTIGNtZHMsIHJjPSVkXG4iLAotCQkJcGFuZWwtPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsK LQl9Ci0KLWVycm9yOgotCW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCXJldHVy biByYzsKLX0KLQotaW50IGRzaV9wYW5lbF9zZXRfbHAxKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVs KQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIXBhbmVsKSB7Ci0JCXByX2VycigiaW52YWxpZCBw YXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwYW5lbC0+ cGFuZWxfbG9jayk7Ci0JcmMgPSBkc2lfcGFuZWxfdHhfY21kX3NldChwYW5lbCwgRFNJX0NNRF9T RVRfTFAxKTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gc2VuZCBEU0lfQ01E X1NFVF9MUDEgY21kLCByYz0lZFxuIiwKLQkJICAgICAgIHBhbmVsLT5uYW1lLCByYyk7Ci0JbXV0 ZXhfdW5sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNp X3BhbmVsX3NldF9scDIoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0gMDsK LQotCWlmICghcGFuZWwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVy biAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyYyA9 IGRzaV9wYW5lbF90eF9jbWRfc2V0KHBhbmVsLCBEU0lfQ01EX1NFVF9MUDIpOwotCWlmIChyYykK LQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZW5kIERTSV9DTURfU0VUX0xQMiBjbWQsIHJjPSVk XG4iLAotCQkgICAgICAgcGFuZWwtPm5hbWUsIHJjKTsKLQltdXRleF91bmxvY2soJnBhbmVsLT5w YW5lbF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfcGFuZWxfc2V0X25vbHAoc3Ry dWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghcGFuZWwpIHsK LQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQot CW11dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyYyA9IGRzaV9wYW5lbF90eF9jbWRf c2V0KHBhbmVsLCBEU0lfQ01EX1NFVF9OT0xQKTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBm YWlsZWQgdG8gc2VuZCBEU0lfQ01EX1NFVF9OT0xQIGNtZCwgcmM9JWRcbiIsCi0JCSAgICAgICBw YW5lbC0+bmFtZSwgcmMpOwotCW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCXJl dHVybiByYzsKLX0KLQotaW50IGRzaV9wYW5lbF9wcmVwYXJlKHN0cnVjdCBkc2lfcGFuZWwgKnBh bmVsKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIXBhbmVsKSB7Ci0JCXByX2VycigiaW52YWxp ZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwYW5l bC0+cGFuZWxfbG9jayk7Ci0KLQlpZiAocGFuZWwtPmxwMTFfaW5pdCkgewotCQlyYyA9IGRzaV9w YW5lbF9wb3dlcl9vbihwYW5lbCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIHBhbmVs IHBvd2VyIG9uIGZhaWxlZCwgcmM9JWRcbiIsCi0JCQkgICAgICAgcGFuZWwtPm5hbWUsIHJjKTsK LQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF90eF9jbWRfc2V0KHBh bmVsLCBEU0lfQ01EX1NFVF9QUkVfT04pOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFp bGVkIHRvIHNlbmQgRFNJX0NNRF9TRVRfUFJFX09OIGNtZHMsIHJjPSVkXG4iLAotCQkgICAgICAg cGFuZWwtPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVycm9yOgotCW11dGV4X3Vu bG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9wYW5l bF9zd2l0Y2goc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQotCWlm ICghcGFuZWwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlO VkFMOwotCX0KLQotCW11dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQotCXJjID0gZHNp X3BhbmVsX3R4X2NtZF9zZXQocGFuZWwsIERTSV9DTURfU0VUX1RJTUlOR19TV0lUQ0gpOwotCWlm IChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZW5kIERTSV9DTURfU0VUX1RJTUlOR19T V0lUQ0ggY21kcywgcmM9JWRcbiIsCi0JCSAgICAgICBwYW5lbC0+bmFtZSwgcmMpOwotCi0JbXV0 ZXhfdW5sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNp X3BhbmVsX3Bvc3Rfc3dpdGNoKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKQotewotCWludCByYyA9 IDA7Ci0KLQlpZiAoIXBhbmVsKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQly ZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0K LQlyYyA9IGRzaV9wYW5lbF90eF9jbWRfc2V0KHBhbmVsLCBEU0lfQ01EX1NFVF9QT1NUX1RJTUlO R19TV0lUQ0gpOwotCWlmIChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZW5kIERTSV9D TURfU0VUX1BPU1RfVElNSU5HX1NXSVRDSCBjbWRzLCByYz0lZFxuIiwKLQkJICAgICAgIHBhbmVs LT5uYW1lLCByYyk7Ci0KLQltdXRleF91bmxvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyZXR1 cm4gcmM7Ci19Ci0KLWludCBkc2lfcGFuZWxfZW5hYmxlKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVs KQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIXBhbmVsKSB7Ci0JCXByX2VycigiSW52YWxpZCBw YXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwYW5lbC0+ cGFuZWxfbG9jayk7Ci0KLQlyYyA9IGRzaV9wYW5lbF90eF9jbWRfc2V0KHBhbmVsLCBEU0lfQ01E X1NFVF9PTik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gc2VuZCBEU0lf Q01EX1NFVF9PTiBjbWRzLCByYz0lZFxuIiwKLQkJICAgICAgIHBhbmVsLT5uYW1lLCByYyk7Ci0J fQotCXBhbmVsLT5wYW5lbF9pbml0aWFsaXplZCA9IHRydWU7Ci0JbXV0ZXhfdW5sb2NrKCZwYW5l bC0+cGFuZWxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX3BhbmVsX3Bvc3RfZW5h YmxlKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIXBh bmVsKSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsK LQl9Ci0KLQltdXRleF9sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0KLQlyYyA9IGRzaV9wYW5l bF90eF9jbWRfc2V0KHBhbmVsLCBEU0lfQ01EX1NFVF9QT1NUX09OKTsKLQlpZiAocmMpIHsKLQkJ cHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZW5kIERTSV9DTURfU0VUX1BPU1RfT04gY21kcywgcmM9 JWRcbiIsCi0JCSAgICAgICBwYW5lbC0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLWVy cm9yOgotCW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCXJldHVybiByYzsKLX0K LQotaW50IGRzaV9wYW5lbF9wcmVfZGlzYWJsZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsK LQlpbnQgcmMgPSAwOwotCi0JaWYgKCFwYW5lbCkgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW1z XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGFuZWwtPnBhbmVs X2xvY2spOwotCi0JcmMgPSBkc2lfcGFuZWxfdHhfY21kX3NldChwYW5lbCwgRFNJX0NNRF9TRVRf UFJFX09GRik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gc2VuZCBEU0lf Q01EX1NFVF9QUkVfT0ZGIGNtZHMsIHJjPSVkXG4iLAotCQkgICAgICAgcGFuZWwtPm5hbWUsIHJj KTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVycm9yOgotCW11dGV4X3VubG9jaygmcGFuZWwtPnBh bmVsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9wYW5lbF9kaXNhYmxlKHN0cnVj dCBkc2lfcGFuZWwgKnBhbmVsKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIXBhbmVsKSB7Ci0J CXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlt dXRleF9sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0KLQlyYyA9IGRzaV9wYW5lbF90eF9jbWRf c2V0KHBhbmVsLCBEU0lfQ01EX1NFVF9PRkYpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10g ZmFpbGVkIHRvIHNlbmQgRFNJX0NNRF9TRVRfT0ZGIGNtZHMsIHJjPSVkXG4iLAotCQkgICAgICAg cGFuZWwtPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JcGFuZWwtPnBhbmVsX2luaXRp YWxpemVkID0gZmFsc2U7Ci0KLWVycm9yOgotCW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVsX2xv Y2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9wYW5lbF91bnByZXBhcmUoc3RydWN0IGRz aV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghcGFuZWwpIHsKLQkJcHJf ZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4 X2xvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQotCXJjID0gZHNpX3BhbmVsX3R4X2NtZF9zZXQo cGFuZWwsIERTSV9DTURfU0VUX1BPU1RfT0ZGKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNd IGZhaWxlZCB0byBzZW5kIERTSV9DTURfU0VUX1BPU1RfT0ZGIGNtZHMsIHJjPSVkXG4iLAotCQkg ICAgICAgcGFuZWwtPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAocGFuZWwt PmxwMTFfaW5pdCkgewotCQlyYyA9IGRzaV9wYW5lbF9wb3dlcl9vZmYocGFuZWwpOwotCQlpZiAo cmMpIHsKLQkJCXByX2VycigiWyVzXSBwYW5lbCBwb3dlcl9PZmYgZmFpbGVkLCByYz0lZFxuIiwK LQkJCSAgICAgICBwYW5lbC0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0KLWVy cm9yOgotCW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCXJldHVybiByYzsKLX0K LQotaW50IGRzaV9wYW5lbF9wb3N0X3VucHJlcGFyZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkK LXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFwYW5lbCkgewotCQlwcl9lcnIoImludmFsaWQgcGFy YW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGFuZWwtPnBh bmVsX2xvY2spOwotCi0JaWYgKCFwYW5lbC0+bHAxMV9pbml0KSB7Ci0JCXJjID0gZHNpX3BhbmVs X3Bvd2VyX29mZihwYW5lbCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIHBhbmVsIHBv d2VyX09mZiBmYWlsZWQsIHJjPSVkXG4iLAotCQkJICAgICAgIHBhbmVsLT5uYW1lLCByYyk7Ci0J CQlnb3RvIGVycm9yOwotCQl9Ci0JfQotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZwYW5lbC0+cGFu ZWxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9kc2ktc3RhZ2luZy9kc2lfcGFuZWwuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdp bmcvZHNpX3BhbmVsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlZjMyMjAuLjAw MDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGFuZWwuaAor KysgL2Rldi9udWxsCkBAIC0xLDI1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2 LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCi0gKgotICovCi0KLSNpZm5kZWYgX0RTSV9QQU5FTF9IXwotI2RlZmluZSBfRFNJX1BBTkVM X0hfCi0KLSNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBl cy5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+ Ci0jaW5jbHVkZSA8bGludXgvbGVkcy5oPgotI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KLSNp bmNsdWRlIDxkcm0vbXNtX2RybS5oPgotCi0jaW5jbHVkZSAiZHNpX2RlZnMuaCIKLSNpbmNsdWRl ICJkc2lfY3RybF9ody5oIgotI2luY2x1ZGUgImRzaV9jbGsuaCIKLSNpbmNsdWRlICJkc2lfcHdy LmgiCi0jaW5jbHVkZSAibXNtX2Rydi5oIgotCi0jZGVmaW5lIE1BWF9CTF9MRVZFTCA0MDk2Ci0j ZGVmaW5lIE1BWF9CTF9TQ0FMRV9MRVZFTCAxMDI0Ci0jZGVmaW5lIE1BWF9BRF9CTF9TQ0FMRV9M RVZFTCA2NTUzNQotI2RlZmluZSBEU0lfQ01EX1BQU19TSVpFIDEzNQotCi0jZGVmaW5lIERTSV9N T0RFX01BWCA1Ci0KLWVudW0gZHNpX3BhbmVsX3JvdGF0aW9uIHsKLQlEU0lfUEFORUxfUk9UQVRF X05PTkUgPSAwLAotCURTSV9QQU5FTF9ST1RBVEVfSFZfRkxJUCwKLQlEU0lfUEFORUxfUk9UQVRF X0hfRkxJUCwKLQlEU0lfUEFORUxfUk9UQVRFX1ZfRkxJUAotfTsKLQotZW51bSBkc2lfYmFja2xp Z2h0X3R5cGUgewotCURTSV9CQUNLTElHSFRfUFdNID0gMCwKLQlEU0lfQkFDS0xJR0hUX1dMRUQs Ci0JRFNJX0JBQ0tMSUdIVF9EQ1MsCi0JRFNJX0JBQ0tMSUdIVF9VTktOT1dOLAotCURTSV9CQUNL TElHSFRfTUFYLAotfTsKLQotZW51bSB7Ci0JTU9ERV9HUElPX05PVF9WQUxJRCA9IDAsCi0JTU9E RV9TRUxfRFVBTF9QT1JULAotCU1PREVfU0VMX1NJTkdMRV9QT1JULAotCU1PREVfR1BJT19ISUdI LAotCU1PREVfR1BJT19MT1csCi19OwotCi1lbnVtIGRzaV9kbXNfbW9kZSB7Ci0JRFNJX0RNU19N T0RFX0RJU0FCTEVEID0gMCwKLQlEU0lfRE1TX01PREVfUkVTX1NXSVRDSF9JTU1FRElBVEUsCi19 OwotCi1zdHJ1Y3QgZHNpX2RmcHNfY2FwYWJpbGl0aWVzIHsKLQlib29sIGRmcHNfc3VwcG9ydDsK LQllbnVtIGRzaV9kZnBzX3R5cGUgdHlwZTsKLQl1MzIgbWluX3JlZnJlc2hfcmF0ZTsKLQl1MzIg bWF4X3JlZnJlc2hfcmF0ZTsKLX07Ci0KLXN0cnVjdCBkc2lfcGluY3RybF9pbmZvIHsKLQlzdHJ1 Y3QgcGluY3RybCAqcGluY3RybDsKLQlzdHJ1Y3QgcGluY3RybF9zdGF0ZSAqYWN0aXZlOwotCXN0 cnVjdCBwaW5jdHJsX3N0YXRlICpzdXNwZW5kOwotfTsKLQotc3RydWN0IGRzaV9wYW5lbF9waHlf cHJvcHMgewotCXUzMiBwYW5lbF93aWR0aF9tbTsKLQl1MzIgcGFuZWxfaGVpZ2h0X21tOwotCWVu dW0gZHNpX3BhbmVsX3JvdGF0aW9uIHJvdGF0aW9uOwotfTsKLQotc3RydWN0IGRzaV9iYWNrbGln aHRfY29uZmlnIHsKLQllbnVtIGRzaV9iYWNrbGlnaHRfdHlwZSB0eXBlOwotCi0JdTMyIGJsX21p bl9sZXZlbDsKLQl1MzIgYmxfbWF4X2xldmVsOwotCXUzMiBicmlnaHRuZXNzX21heF9sZXZlbDsK LQl1MzIgYmxfbGV2ZWw7Ci0JdTMyIGJsX3NjYWxlOwotCXUzMiBibF9zY2FsZV9hZDsKLQotCWlu dCBlbl9ncGlvOwotCS8qIFBXTSBwYXJhbXMgKi8KLQlib29sIHB3bV9wbWlfY29udHJvbDsKLQl1 MzIgcHdtX3BtaWNfYmFuazsKLQl1MzIgcHdtX3BlcmlvZF91c2VjczsKLQlpbnQgcHdtX2dwaW87 Ci0KLQkvKiBXTEVEIHBhcmFtcyAqLwotCXN0cnVjdCBsZWRfdHJpZ2dlciAqd2xlZDsKLQlzdHJ1 Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQ7Ci19OwotCi1zdHJ1Y3QgZHNpX3Jlc2V0X3NlcSB7Ci0J dTMyIGxldmVsOwotCXUzMiBzbGVlcF9tczsKLX07Ci0KLXN0cnVjdCBkc2lfcGFuZWxfcmVzZXRf Y29uZmlnIHsKLQlzdHJ1Y3QgZHNpX3Jlc2V0X3NlcSAqc2VxdWVuY2U7Ci0JdTMyIGNvdW50Owot Ci0JaW50IHJlc2V0X2dwaW87Ci0JaW50IGRpc3BfZW5fZ3BpbzsKLQlpbnQgbGNkX21vZGVfc2Vs X2dwaW87Ci0JdTMyIG1vZGVfc2VsX3N0YXRlOwotfTsKLQotZW51bSBlc2RfY2hlY2tfc3RhdHVz X21vZGUgewotCUVTRF9NT0RFX1JFR19SRUFELAotCUVTRF9NT0RFX1NXX0JUQSwKLQlFU0RfTU9E RV9QQU5FTF9URSwKLQlFU0RfTU9ERV9NQVgKLX07Ci0KLXN0cnVjdCBkcm1fcGFuZWxfZXNkX2Nv bmZpZyB7Ci0JYm9vbCBlc2RfZW5hYmxlZDsKLQotCWVudW0gZXNkX2NoZWNrX3N0YXR1c19tb2Rl IHN0YXR1c19tb2RlOwotCXN0cnVjdCBkc2lfcGFuZWxfY21kX3NldCBzdGF0dXNfY21kOwotCXUz MiAqc3RhdHVzX2NtZHNfcmxlbjsKLQl1MzIgKnN0YXR1c192YWxpZF9wYXJhbXM7Ci0JdTMyICpz dGF0dXNfdmFsdWU7Ci0JdW5zaWduZWQgY2hhciAqcmV0dXJuX2J1ZjsKLQl1MzIgZ3JvdXBzOwot fTsKLQotc3RydWN0IGRzaV9wYW5lbCB7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQlzdHJ1Y3QgZGV2 aWNlX25vZGUgKnBhbmVsX29mX25vZGU7Ci0Jc3RydWN0IG1pcGlfZHNpX2RldmljZSBtaXBpX2Rl dmljZTsKLQotCXN0cnVjdCBtdXRleCBwYW5lbF9sb2NrOwotCXN0cnVjdCBkcm1fcGFuZWwgZHJt X3BhbmVsOwotCXN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0OwotCXN0cnVjdCBkZXZpY2UgKnBh cmVudDsKLQotCXN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnIGhvc3RfY29uZmlnOwotCXN0cnVj dCBkc2lfdmlkZW9fZW5naW5lX2NmZyB2aWRlb19jb25maWc7Ci0Jc3RydWN0IGRzaV9jbWRfZW5n aW5lX2NmZyBjbWRfY29uZmlnOwotCWVudW0gZHNpX29wX21vZGUgcGFuZWxfbW9kZTsKLQotCXN0 cnVjdCBkc2lfZGZwc19jYXBhYmlsaXRpZXMgZGZwc19jYXBzOwotCXN0cnVjdCBkc2lfcGFuZWxf cGh5X3Byb3BzIHBoeV9wcm9wczsKLQotCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICpjdXJfbW9k ZTsKLQl1MzIgbnVtX3RpbWluZ19ub2RlczsKLQotCXN0cnVjdCBkc2lfcmVndWxhdG9yX2luZm8g cG93ZXJfaW5mbzsKLQlzdHJ1Y3QgZHNpX2JhY2tsaWdodF9jb25maWcgYmxfY29uZmlnOwotCXN0 cnVjdCBkc2lfcGFuZWxfcmVzZXRfY29uZmlnIHJlc2V0X2NvbmZpZzsKLQlzdHJ1Y3QgZHNpX3Bp bmN0cmxfaW5mbyBwaW5jdHJsOwotCXN0cnVjdCBkcm1fcGFuZWxfaGRyX3Byb3BlcnRpZXMgaGRy X3Byb3BzOwotCXN0cnVjdCBkcm1fcGFuZWxfZXNkX2NvbmZpZyBlc2RfY29uZmlnOwotCi0JYm9v bCBscDExX2luaXQ7Ci0JYm9vbCB1bHBzX2VuYWJsZWQ7Ci0JYm9vbCBhbGxvd19waHlfcG93ZXJf b2ZmOwotCi0JYm9vbCBwYW5lbF9pbml0aWFsaXplZDsKLQlib29sIHRlX3VzaW5nX3dhdGNoZG9n X3RpbWVyOwotCi0JY2hhciBkc2NfcHBzX2NtZFtEU0lfQ01EX1BQU19TSVpFXTsKLQllbnVtIGRz aV9kbXNfbW9kZSBkbXNfbW9kZTsKLQotCWJvb2wgc3luY19icm9hZGNhc3RfZW47Ci19OwotCi1z dGF0aWMgaW5saW5lIGJvb2wgZHNpX3BhbmVsX3VscHNfZmVhdHVyZV9lbmFibGVkKHN0cnVjdCBk c2lfcGFuZWwgKnBhbmVsKQotewotCXJldHVybiBwYW5lbC0+dWxwc19lbmFibGVkOwotfQotCi1z dGF0aWMgaW5saW5lIGJvb2wgZHNpX3BhbmVsX2luaXRpYWxpemVkKHN0cnVjdCBkc2lfcGFuZWwg KnBhbmVsKQotewotCXJldHVybiBwYW5lbC0+cGFuZWxfaW5pdGlhbGl6ZWQ7Ci19Ci0KLXN0cnVj dCBkc2lfcGFuZWwgKmRzaV9wYW5lbF9nZXQoc3RydWN0IGRldmljZSAqcGFyZW50LAotCQkJCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSwKLQkJCQlpbnQgdG9wb2xvZ3lfb3ZlcnJpZGUpOwot Ci12b2lkIGRzaV9wYW5lbF9wdXQoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpOwotCi1pbnQgZHNp X3BhbmVsX2Rydl9pbml0KHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsLCBzdHJ1Y3QgbWlwaV9kc2lf aG9zdCAqaG9zdCk7Ci0KLWludCBkc2lfcGFuZWxfZHJ2X2RlaW5pdChzdHJ1Y3QgZHNpX3BhbmVs ICpwYW5lbCk7Ci0KLWludCBkc2lfcGFuZWxfZ2V0X21vZGVfY291bnQoc3RydWN0IGRzaV9wYW5l bCAqcGFuZWwsCi0JCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSk7Ci0KLXZvaWQgZHNpX3Bh bmVsX3B1dF9tb2RlKHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlKTsKLQotaW50IGRzaV9w YW5lbF9nZXRfbW9kZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwKLQkJICAgICAgIHUzMiBpbmRl eCwKLQkJICAgICAgIHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlLAotCQkgICAgICAgaW50 IHRvcG9sb2d5X292ZXJyaWRlKTsKLQotaW50IGRzaV9wYW5lbF92YWxpZGF0ZV9tb2RlKHN0cnVj dCBkc2lfcGFuZWwgKnBhbmVsLAotCQkJICAgIHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2Rl KTsKLQotaW50IGRzaV9wYW5lbF9nZXRfaG9zdF9jZmdfZm9yX21vZGUoc3RydWN0IGRzaV9wYW5l bCAqcGFuZWwsCi0JCQkJICAgIHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlLAotCQkJCSAg ICBzdHJ1Y3QgZHNpX2hvc3RfY29uZmlnICpjb25maWcpOwotCi1pbnQgZHNpX3BhbmVsX2dldF9w aHlfcHJvcHMoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsCi0JCQkgICAgc3RydWN0IGRzaV9wYW5l bF9waHlfcHJvcHMgKnBoeV9wcm9wcyk7Ci1pbnQgZHNpX3BhbmVsX2dldF9kZnBzX2NhcHMoc3Ry dWN0IGRzaV9wYW5lbCAqcGFuZWwsCi0JCQkgICAgc3RydWN0IGRzaV9kZnBzX2NhcGFiaWxpdGll cyAqZGZwc19jYXBzKTsKLQotaW50IGRzaV9wYW5lbF9wcmVfcHJlcGFyZShzdHJ1Y3QgZHNpX3Bh bmVsICpwYW5lbCk7Ci0KLWludCBkc2lfcGFuZWxfc2V0X2xwMShzdHJ1Y3QgZHNpX3BhbmVsICpw YW5lbCk7Ci0KLWludCBkc2lfcGFuZWxfc2V0X2xwMihzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCk7 Ci0KLWludCBkc2lfcGFuZWxfc2V0X25vbHAoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpOwotCi1p bnQgZHNpX3BhbmVsX3ByZXBhcmUoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpOwotCi1pbnQgZHNp X3BhbmVsX2VuYWJsZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCk7Ci0KLWludCBkc2lfcGFuZWxf cG9zdF9lbmFibGUoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpOwotCi1pbnQgZHNpX3BhbmVsX3By ZV9kaXNhYmxlKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKTsKLQotaW50IGRzaV9wYW5lbF9kaXNh YmxlKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKTsKLQotaW50IGRzaV9wYW5lbF91bnByZXBhcmUo c3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpOwotCi1pbnQgZHNpX3BhbmVsX3Bvc3RfdW5wcmVwYXJl KHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKTsKLQotaW50IGRzaV9wYW5lbF9zZXRfYmFja2xpZ2h0 KHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsLCB1MzIgYmxfbHZsKTsKLQotaW50IGRzaV9wYW5lbF91 cGRhdGVfcHBzKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKTsKLQotaW50IGRzaV9wYW5lbF9zd2l0 Y2goc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpOwotCi1pbnQgZHNpX3BhbmVsX3Bvc3Rfc3dpdGNo KHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKTsKLQotdm9pZCBkc2lfZHNjX3BjbGtfcGFyYW1fY2Fs YyhzdHJ1Y3QgbXNtX2Rpc3BsYXlfZHNjX2luZm8gKmRzYywgaW50IGludGZfd2lkdGgpOwotCi0j ZW5kaWYgLyogX0RTSV9QQU5FTF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9kc2ktc3RhZ2luZy9kc2lfcGh5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5n L2RzaV9waHkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ2ZDc3Ni4uMDAwMDAw MAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHkuYworKysgL2Rl di9udWxsCkBAIC0xLDkzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgs IFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g Ki8KLQotI2RlZmluZSBwcl9mbXQoZm10KQkibXNtLWRzaS1waHk6WyVzXSAiIGZtdCwgX19mdW5j X18KLQotI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5o PgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgotI2luY2x1ZGUgPGxpbnV4 L2Nsay5oPgotI2lmZGVmIENPTkZJR19DSFJPTUVfQlVTX1NDQUxFCi0jaW5jbHVkZSA8bGludXgv bXNtLWJ1cy5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotCi0jaW5jbHVkZSAi bXNtX2Rydi5oIgotI2luY2x1ZGUgIm1zbV9rbXMuaCIKLSNpbmNsdWRlICJtc21fZ3B1LmgiCi0j aW5jbHVkZSAiZHNpX3BoeS5oIgotI2luY2x1ZGUgImRzaV9waHlfaHcuaCIKLSNpbmNsdWRlICJk c2lfY2xrLmgiCi0jaW5jbHVkZSAiZHNpX3B3ci5oIgotI2luY2x1ZGUgImRzaV9jYXRhbG9nLmgi Ci0KLSNpbmNsdWRlICJkcHVfZGJnLmgiCi0KLSNkZWZpbmUgRFNJX1BIWV9ERUZBVUxUX0xBQkVM ICJNRFNTIFBIWSBDVFJMIgotCi1zdHJ1Y3QgZHNpX3BoeV9saXN0X2l0ZW0gewotCXN0cnVjdCBt c21fZHNpX3BoeSAqcGh5OwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07Ci0KLXN0YXRpYyBM SVNUX0hFQUQoZHNpX3BoeV9saXN0KTsKLXN0YXRpYyBERUZJTkVfTVVURVgoZHNpX3BoeV9saXN0 X2xvY2spOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRzaV92ZXJfc3BlY19pbmZvIGRzaV9waHlf djBfMF9ocG0gPSB7Ci0JLnZlcnNpb24gPSBEU0lfUEhZX1ZFUlNJT05fMF8wX0hQTSwKLQkubGFu ZV9jZmdfY291bnQgPSA0LAotCS5zdHJlbmd0aF9jZmdfY291bnQgPSAyLAotCS5yZWd1bGF0b3Jf Y2ZnX2NvdW50ID0gMSwKLQkudGltaW5nX2NmZ19jb3VudCA9IDgsCi19Owotc3RhdGljIGNvbnN0 IHN0cnVjdCBkc2lfdmVyX3NwZWNfaW5mbyBkc2lfcGh5X3YwXzBfbHBtID0gewotCS52ZXJzaW9u ID0gRFNJX1BIWV9WRVJTSU9OXzBfMF9MUE0sCi0JLmxhbmVfY2ZnX2NvdW50ID0gNCwKLQkuc3Ry ZW5ndGhfY2ZnX2NvdW50ID0gMiwKLQkucmVndWxhdG9yX2NmZ19jb3VudCA9IDEsCi0JLnRpbWlu Z19jZmdfY291bnQgPSA4LAotfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNpX3Zlcl9zcGVjX2lu Zm8gZHNpX3BoeV92MV8wID0gewotCS52ZXJzaW9uID0gRFNJX1BIWV9WRVJTSU9OXzFfMCwKLQku bGFuZV9jZmdfY291bnQgPSA0LAotCS5zdHJlbmd0aF9jZmdfY291bnQgPSAyLAotCS5yZWd1bGF0 b3JfY2ZnX2NvdW50ID0gMSwKLQkudGltaW5nX2NmZ19jb3VudCA9IDgsCi19Owotc3RhdGljIGNv bnN0IHN0cnVjdCBkc2lfdmVyX3NwZWNfaW5mbyBkc2lfcGh5X3YyXzAgPSB7Ci0JLnZlcnNpb24g PSBEU0lfUEhZX1ZFUlNJT05fMl8wLAotCS5sYW5lX2NmZ19jb3VudCA9IDQsCi0JLnN0cmVuZ3Ro X2NmZ19jb3VudCA9IDIsCi0JLnJlZ3VsYXRvcl9jZmdfY291bnQgPSAxLAotCS50aW1pbmdfY2Zn X2NvdW50ID0gOCwKLX07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGRzaV92ZXJfc3BlY19pbmZvIGRz aV9waHlfdjNfMCA9IHsKLQkudmVyc2lvbiA9IERTSV9QSFlfVkVSU0lPTl8zXzAsCi0JLmxhbmVf Y2ZnX2NvdW50ID0gNCwKLQkuc3RyZW5ndGhfY2ZnX2NvdW50ID0gMiwKLQkucmVndWxhdG9yX2Nm Z19jb3VudCA9IDAsCi0JLnRpbWluZ19jZmdfY291bnQgPSAxMiwKLX07Ci0KLXN0YXRpYyBjb25z dCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1zbV9kc2lfcGh5X29mX21hdGNoW10gPSB7Ci0JeyAuY29t cGF0aWJsZSA9ICJxY29tLGRzaS1waHktdjAuMC1ocG0iLAotCSAgLmRhdGEgPSAmZHNpX3BoeV92 MF8wX2hwbSx9LAotCXsgLmNvbXBhdGlibGUgPSAicWNvbSxkc2ktcGh5LXYwLjAtbHBtIiwKLQkg IC5kYXRhID0gJmRzaV9waHlfdjBfMF9scG0sfSwKLQl7IC5jb21wYXRpYmxlID0gInFjb20sZHNp LXBoeS12MS4wIiwKLQkgIC5kYXRhID0gJmRzaV9waHlfdjFfMCx9LAotCXsgLmNvbXBhdGlibGUg PSAicWNvbSxkc2ktcGh5LXYyLjAiLAotCSAgLmRhdGEgPSAmZHNpX3BoeV92Ml8wLH0sCi0JeyAu Y29tcGF0aWJsZSA9ICJxY29tLGRzaS1waHktdjMuMCIsCi0JICAuZGF0YSA9ICZkc2lfcGh5X3Yz XzAsfSwKLQl7fQotfTsKLQotc3RhdGljIGludCBkc2lfcGh5X3JlZ21hcF9pbml0KHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkgICAgICAgc3RydWN0IG1zbV9kc2lfcGh5ICpwaHkp Ci17Ci0JaW50IHJjID0gMDsKLQl2b2lkIF9faW9tZW0gKnB0cjsKLQotCXB0ciA9IG1zbV9pb3Jl bWFwKHBkZXYsICJkc2lfcGh5IiwgcGh5LT5uYW1lKTsKLQlpZiAoSVNfRVJSKHB0cikpIHsKLQkJ cmMgPSBQVFJfRVJSKHB0cik7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlwaHktPmh3LmJhc2UgPSBw dHI7Ci0KLQlwcl9kZWJ1ZygiWyVzXSBtYXAgZHNpX3BoeSByZWdpc3RlcnMgdG8gJXBcbiIsIHBo eS0+bmFtZSwgcGh5LT5ody5iYXNlKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBk c2lfcGh5X3JlZ21hcF9kZWluaXQoc3RydWN0IG1zbV9kc2lfcGh5ICpwaHkpCi17Ci0JcHJfZGVi dWcoIlslc10gdW5tYXAgcmVnaXN0ZXJzXG4iLCBwaHktPm5hbWUpOwotCXJldHVybiAwOwotfQot Ci1zdGF0aWMgaW50IGRzaV9waHlfc3VwcGxpZXNfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2LAotCQkJCSBzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSkKLXsKLQlpbnQgcmMgPSAwOwot CWludCBpID0gMDsKLQlzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvICpyZWdzOwotCXN0cnVjdCBy ZWd1bGF0b3IgKnZyZWcgPSBOVUxMOwotCi0JcmVncyA9ICZwaHktPnB3cl9pbmZvLmRpZ2l0YWw7 Ci0JcmVncy0+dnJlZ3MgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBk c2lfdnJlZyksCi0JCQkJICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyZWdzLT52cmVncykKLQkJZ290 byBlcnJvcjsKLQotCXJlZ3MtPmNvdW50ID0gMTsKLQlzbnByaW50ZihyZWdzLT52cmVncy0+dnJl Z19uYW1lLAotCQkgQVJSQVlfU0laRShyZWdzLT52cmVnc1tpXS52cmVnX25hbWUpLAotCQkgIiVz IiwgImdkc2MiKTsKLQotCXJjID0gZHNpX3B3cl9nZXRfZHRfdnJlZ19kYXRhKCZwZGV2LT5kZXYs Ci0JCQkJCSAgJnBoeS0+cHdyX2luZm8ucGh5X3B3ciwKLQkJCQkJICAicWNvbSxwaHktc3VwcGx5 LWVudHJpZXMiKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IGhvc3QgcG93 ZXIgc3VwcGxpZXMsIHJjID0gJWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcl9kaWdpdGFsOwotCX0K LQotCXJlZ3MgPSAmcGh5LT5wd3JfaW5mby5kaWdpdGFsOwotCWZvciAoaSA9IDA7IGkgPCByZWdz LT5jb3VudDsgaSsrKSB7Ci0JCXZyZWcgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoJnBkZXYtPmRldiwg cmVncy0+dnJlZ3NbaV0udnJlZ19uYW1lKTsKLQkJcmMgPSBQVFJfUkVUKHZyZWcpOwotCQlpZiAo cmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIGdldCAlcyByZWd1bGF0b3JcbiIsCi0JCQkgICAg ICAgcmVncy0+dnJlZ3NbaV0udnJlZ19uYW1lKTsKLQkJCWdvdG8gZXJyb3JfaG9zdF9wd3I7Ci0J CX0KLQkJcmVncy0+dnJlZ3NbaV0udnJlZyA9IHZyZWc7Ci0JfQotCi0JcmVncyA9ICZwaHktPnB3 cl9pbmZvLnBoeV9wd3I7Ci0JZm9yIChpID0gMDsgaSA8IHJlZ3MtPmNvdW50OyBpKyspIHsKLQkJ dnJlZyA9IGRldm1fcmVndWxhdG9yX2dldCgmcGRldi0+ZGV2LCByZWdzLT52cmVnc1tpXS52cmVn X25hbWUpOwotCQlyYyA9IFBUUl9SRVQodnJlZyk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJm YWlsZWQgdG8gZ2V0ICVzIHJlZ3VsYXRvclxuIiwKLQkJCSAgICAgICByZWdzLT52cmVnc1tpXS52 cmVnX25hbWUpOwotCQkJZm9yICgtLWk7IGkgPj0gMDsgaS0tKQotCQkJCWRldm1fcmVndWxhdG9y X3B1dChyZWdzLT52cmVnc1tpXS52cmVnKTsKLQkJCWdvdG8gZXJyb3JfZGlnaXRhbF9wdXQ7Ci0J CX0KLQkJcmVncy0+dnJlZ3NbaV0udnJlZyA9IHZyZWc7Ci0JfQotCi0JcmV0dXJuIHJjOwotCi1l cnJvcl9kaWdpdGFsX3B1dDoKLQlyZWdzID0gJnBoeS0+cHdyX2luZm8uZGlnaXRhbDsKLQlmb3Ig KGkgPSAwOyBpIDwgcmVncy0+Y291bnQ7IGkrKykKLQkJZGV2bV9yZWd1bGF0b3JfcHV0KHJlZ3Mt PnZyZWdzW2ldLnZyZWcpOwotZXJyb3JfaG9zdF9wd3I6Ci0JZGV2bV9rZnJlZSgmcGRldi0+ZGV2 LCBwaHktPnB3cl9pbmZvLnBoeV9wd3IudnJlZ3MpOwotCXBoeS0+cHdyX2luZm8ucGh5X3B3ci52 cmVncyA9IE5VTEw7Ci0JcGh5LT5wd3JfaW5mby5waHlfcHdyLmNvdW50ID0gMDsKLWVycm9yX2Rp Z2l0YWw6Ci0JZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBwaHktPnB3cl9pbmZvLmRpZ2l0YWwudnJl Z3MpOwotCXBoeS0+cHdyX2luZm8uZGlnaXRhbC52cmVncyA9IE5VTEw7Ci0JcGh5LT5wd3JfaW5m by5kaWdpdGFsLmNvdW50ID0gMDsKLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGlu dCBkc2lfcGh5X3N1cHBsaWVzX2RlaW5pdChzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSkKLXsKLQlp bnQgaSA9IDA7Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvICpyZWdz OwotCi0JcmVncyA9ICZwaHktPnB3cl9pbmZvLmRpZ2l0YWw7Ci0JZm9yIChpID0gMDsgaSA8IHJl Z3MtPmNvdW50OyBpKyspIHsKLQkJaWYgKCFyZWdzLT52cmVnc1tpXS52cmVnKQotCQkJcHJfZXJy KCJ2cmVnIGlzIE5VTEwsIHNob3VsZCBub3QgcmVhY2ggaGVyZVxuIik7Ci0JCWVsc2UKLQkJCWRl dm1fcmVndWxhdG9yX3B1dChyZWdzLT52cmVnc1tpXS52cmVnKTsKLQl9Ci0KLQlyZWdzID0gJnBo eS0+cHdyX2luZm8ucGh5X3B3cjsKLQlmb3IgKGkgPSAwOyBpIDwgcmVncy0+Y291bnQ7IGkrKykg ewotCQlpZiAoIXJlZ3MtPnZyZWdzW2ldLnZyZWcpCi0JCQlwcl9lcnIoInZyZWcgaXMgTlVMTCwg c2hvdWxkIG5vdCByZWFjaCBoZXJlXG4iKTsKLQkJZWxzZQotCQkJZGV2bV9yZWd1bGF0b3JfcHV0 KHJlZ3MtPnZyZWdzW2ldLnZyZWcpOwotCX0KLQotCWlmIChwaHktPnB3cl9pbmZvLnBoeV9wd3Iu dnJlZ3MpIHsKLQkJZGV2bV9rZnJlZSgmcGh5LT5wZGV2LT5kZXYsIHBoeS0+cHdyX2luZm8ucGh5 X3B3ci52cmVncyk7Ci0JCXBoeS0+cHdyX2luZm8ucGh5X3B3ci52cmVncyA9IE5VTEw7Ci0JCXBo eS0+cHdyX2luZm8ucGh5X3B3ci5jb3VudCA9IDA7Ci0JfQotCWlmIChwaHktPnB3cl9pbmZvLmRp Z2l0YWwudnJlZ3MpIHsKLQkJZGV2bV9rZnJlZSgmcGh5LT5wZGV2LT5kZXYsIHBoeS0+cHdyX2lu Zm8uZGlnaXRhbC52cmVncyk7Ci0JCXBoeS0+cHdyX2luZm8uZGlnaXRhbC52cmVncyA9IE5VTEw7 Ci0JCXBoeS0+cHdyX2luZm8uZGlnaXRhbC5jb3VudCA9IDA7Ci0JfQotCi0JcmV0dXJuIHJjOwot fQotCi1zdGF0aWMgaW50IGRzaV9waHlfcGFyc2VfZHRfcGVyX2xhbmVfY2ZncyhzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCQkgIHN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3Mg KmNmZywKLQkJCQkJICBjaGFyICpwcm9wZXJ0eSkKLXsKLQlpbnQgcmMgPSAwLCBpID0gMCwgaiA9 IDA7Ci0JY29uc3QgdTggKmRhdGE7Ci0JdTMyIGxlbiA9IDA7Ci0KLQlkYXRhID0gb2ZfZ2V0X3By b3BlcnR5KHBkZXYtPmRldi5vZl9ub2RlLCBwcm9wZXJ0eSwgJmxlbik7Ci0JaWYgKCFkYXRhKSB7 Ci0JCXByX2VycigiVW5hYmxlIHRvIHJlYWQgUGh5ICVzIHNldHRpbmdzXG4iLCBwcm9wZXJ0eSk7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChsZW4gIT0gRFNJX0xBTkVfTUFYICogY2Zn LT5jb3VudF9wZXJfbGFuZSkgewotCQlwcl9lcnIoImluY29ycmVjdCBwaHkgJXMgc2V0dGluZ3Ms IGV4cD0lZCwgYWN0PSVkXG4iLAotCQkgICAgICAgcHJvcGVydHksIChEU0lfTEFORV9NQVggKiBj ZmctPmNvdW50X3Blcl9sYW5lKSwgbGVuKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZm9y IChpID0gRFNJX0xPR0lDQUxfTEFORV8wOyBpIDwgRFNJX0xBTkVfTUFYOyBpKyspIHsKLQkJZm9y IChqID0gMDsgaiA8IGNmZy0+Y291bnRfcGVyX2xhbmU7IGorKykgewotCQkJY2ZnLT5sYW5lW2ld W2pdID0gKmRhdGE7Ci0JCQlkYXRhKys7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0 YXRpYyBpbnQgZHNpX3BoeV9zZXR0aW5nc19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYsCi0JCQkJIHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5KQotewotCWludCByYyA9IDA7Ci0Jc3Ry dWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyAqbGFuZSA9ICZwaHktPmNmZy5sYW5lY2ZnOwotCXN0 cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnN0cmVuZ3RoID0gJnBoeS0+Y2ZnLnN0cmVuZ3Ro OwotCXN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnRpbWluZyA9ICZwaHktPmNmZy50aW1p bmc7Ci0Jc3RydWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyAqcmVncyA9ICZwaHktPmNmZy5yZWd1 bGF0b3JzOwotCi0JbGFuZS0+Y291bnRfcGVyX2xhbmUgPSBwaHktPnZlcl9pbmZvLT5sYW5lX2Nm Z19jb3VudDsKLQlyYyA9IGRzaV9waHlfcGFyc2VfZHRfcGVyX2xhbmVfY2ZncyhwZGV2LCBsYW5l LAotCQkJCQkgICAgInFjb20scGxhdGZvcm0tbGFuZS1jb25maWciKTsKLQlpZiAocmMpIHsKLQkJ cHJfZXJyKCJmYWlsZWQgdG8gcGFyc2UgbGFuZSBjZmdzLCByYz0lZFxuIiwgcmMpOwotCQlnb3Rv IGVycjsKLQl9Ci0KLQlzdHJlbmd0aC0+Y291bnRfcGVyX2xhbmUgPSBwaHktPnZlcl9pbmZvLT5z dHJlbmd0aF9jZmdfY291bnQ7Ci0JcmMgPSBkc2lfcGh5X3BhcnNlX2R0X3Blcl9sYW5lX2NmZ3Mo cGRldiwgc3RyZW5ndGgsCi0JCQkJCSAgICAicWNvbSxwbGF0Zm9ybS1zdHJlbmd0aC1jdHJsIik7 Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIGxhbmUgY2ZncywgcmM9JWRc biIsIHJjKTsKLQkJZ290byBlcnI7Ci0JfQotCi0JcmVncy0+Y291bnRfcGVyX2xhbmUgPSBwaHkt PnZlcl9pbmZvLT5yZWd1bGF0b3JfY2ZnX2NvdW50OwotCWlmIChyZWdzLT5jb3VudF9wZXJfbGFu ZSA+IDApIHsKLQkJcmMgPSBkc2lfcGh5X3BhcnNlX2R0X3Blcl9sYW5lX2NmZ3MocGRldiwgcmVn cywKLQkJCQkJICAgICJxY29tLHBsYXRmb3JtLXJlZ3VsYXRvci1zZXR0aW5ncyIpOwotCQlpZiAo cmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIGxhbmUgY2ZncywgcmM9JWRcbiIsIHJj KTsKLQkJCWdvdG8gZXJyOwotCQl9Ci0JfQotCi0JLyogQWN0dWFsIHRpbWluZyB2YWx1ZXMgYXJl IGRlcGVuZGVudCBvbiBwYW5lbCAqLwotCXRpbWluZy0+Y291bnRfcGVyX2xhbmUgPSBwaHktPnZl cl9pbmZvLT50aW1pbmdfY2ZnX2NvdW50OwotCXJldHVybiAwOwotZXJyOgotCWxhbmUtPmNvdW50 X3Blcl9sYW5lID0gMDsKLQlzdHJlbmd0aC0+Y291bnRfcGVyX2xhbmUgPSAwOwotCXJlZ3MtPmNv dW50X3Blcl9sYW5lID0gMDsKLQl0aW1pbmctPmNvdW50X3Blcl9sYW5lID0gMDsKLQlyZXR1cm4g cmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BoeV9zZXR0aW5nc19kZWluaXQoc3RydWN0IG1zbV9k c2lfcGh5ICpwaHkpCi17Ci0JbWVtc2V0KCZwaHktPmNmZy5sYW5lY2ZnLCAweDAsIHNpemVvZihw aHktPmNmZy5sYW5lY2ZnKSk7Ci0JbWVtc2V0KCZwaHktPmNmZy5zdHJlbmd0aCwgMHgwLCBzaXpl b2YocGh5LT5jZmcuc3RyZW5ndGgpKTsKLQltZW1zZXQoJnBoeS0+Y2ZnLnRpbWluZywgMHgwLCBz aXplb2YocGh5LT5jZmcudGltaW5nKSk7Ci0JbWVtc2V0KCZwaHktPmNmZy5yZWd1bGF0b3JzLCAw eDAsIHNpemVvZihwaHktPmNmZy5yZWd1bGF0b3JzKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRp YyBpbnQgZHNpX3BoeV9kcml2ZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK LXsKLQlzdHJ1Y3QgbXNtX2RzaV9waHkgKmRzaV9waHk7Ci0Jc3RydWN0IGRzaV9waHlfbGlzdF9p dGVtICppdGVtOwotCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKmlkOwotCWNvbnN0IHN0cnVj dCBkc2lfdmVyX3NwZWNfaW5mbyAqdmVyX2luZm87Ci0JaW50IHJjID0gMDsKLQl1MzIgaW5kZXgg PSAwOwotCi0JaWYgKCFwZGV2IHx8ICFwZGV2LT5kZXYub2Zfbm9kZSkgewotCQlwcl9lcnIoInBk ZXYgbm90IGZvdW5kXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWQgPSBvZl9tYXRj aF9ub2RlKG1zbV9kc2lfcGh5X29mX21hdGNoLCBwZGV2LT5kZXYub2Zfbm9kZSk7Ci0JaWYgKCFp ZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQl2ZXJfaW5mbyA9IGlkLT5kYXRhOwotCi0JaXRlbSA9 IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKml0ZW0pLCBHRlBfS0VSTkVMKTsKLQlp ZiAoIWl0ZW0pCi0JCXJldHVybiAtRU5PTUVNOwotCi0KLQlkc2lfcGh5ID0gZGV2bV9remFsbG9j KCZwZGV2LT5kZXYsIHNpemVvZigqZHNpX3BoeSksIEdGUF9LRVJORUwpOwotCWlmICghZHNpX3Bo eSkgewotCQlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIGl0ZW0pOwotCQlyZXR1cm4gLUVOT01FTTsK LQl9Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtPmRldi5vZl9ub2RlLCAiY2Vs bC1pbmRleCIsICZpbmRleCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2RlYnVnKCJjZWxsIGluZGV4IG5v dCBzZXQsIGRlZmF1bHQgdG8gMFxuIik7Ci0JCWluZGV4ID0gMDsKLQl9Ci0KLQlkc2lfcGh5LT5p bmRleCA9IGluZGV4OwotCi0JZHNpX3BoeS0+bmFtZSA9IG9mX2dldF9wcm9wZXJ0eShwZGV2LT5k ZXYub2Zfbm9kZSwgImxhYmVsIiwgTlVMTCk7Ci0JaWYgKCFkc2lfcGh5LT5uYW1lKQotCQlkc2lf cGh5LT5uYW1lID0gRFNJX1BIWV9ERUZBVUxUX0xBQkVMOwotCi0JcHJfZGVidWcoIlByb2Jpbmcg JXMgZGV2aWNlXG4iLCBkc2lfcGh5LT5uYW1lKTsKLQotCXJjID0gZHNpX3BoeV9yZWdtYXBfaW5p dChwZGV2LCBkc2lfcGh5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gcGFyc2Ug cmVnaXN0ZXIgaW5mb3JtYXRpb24sIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0K LQlyYyA9IGRzaV9waHlfc3VwcGxpZXNfaW5pdChwZGV2LCBkc2lfcGh5KTsKLQlpZiAocmMpIHsK LQkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2Ugdm9sdGFnZSBzdXBwbGllcywgcmMgPSAlZFxuIiwg cmMpOwotCQlnb3RvIGZhaWxfcmVnbWFwOwotCX0KLQotCXJjID0gZHNpX2NhdGFsb2dfcGh5X3Nl dHVwKCZkc2lfcGh5LT5odywgdmVyX2luZm8tPnZlcnNpb24sCi0JCQkJICAgZHNpX3BoeS0+aW5k ZXgpOwotCWlmIChyYykgewotCQlwcl9lcnIoIkNhdGFsb2cgZG9lcyBub3Qgc3VwcG9ydCB2ZXJz aW9uICglZClcbiIsCi0JCSAgICAgICB2ZXJfaW5mby0+dmVyc2lvbik7Ci0JCWdvdG8gZmFpbF9z dXBwbGllczsKLQl9Ci0KLQlkc2lfcGh5LT52ZXJfaW5mbyA9IHZlcl9pbmZvOwotCXJjID0gZHNp X3BoeV9zZXR0aW5nc19pbml0KHBkZXYsIGRzaV9waHkpOwotCWlmIChyYykgewotCQlwcl9lcnIo IkZhaWxlZCB0byBwYXJzZSBwaHkgc2V0dGluZywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBmYWls X3N1cHBsaWVzOwotCX0KLQotCWl0ZW0tPnBoeSA9IGRzaV9waHk7Ci0KLQltdXRleF9sb2NrKCZk c2lfcGh5X2xpc3RfbG9jayk7Ci0JbGlzdF9hZGQoJml0ZW0tPmxpc3QsICZkc2lfcGh5X2xpc3Qp OwotCW11dGV4X3VubG9jaygmZHNpX3BoeV9saXN0X2xvY2spOwotCi0JbXV0ZXhfaW5pdCgmZHNp X3BoeS0+cGh5X2xvY2spOwotCS8qKiBUT0RPOiBpbml0aWFsaXplIGRlYnVnZnMgKi8KLQlkc2lf cGh5LT5wZGV2ID0gcGRldjsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkc2lfcGh5KTsK LQlwcl9pbmZvKCJQcm9iZSBzdWNjZXNzZnVsIGZvciAlc1xuIiwgZHNpX3BoeS0+bmFtZSk7Ci0J cmV0dXJuIDA7Ci0KLWZhaWxfc3VwcGxpZXM6Ci0JKHZvaWQpZHNpX3BoeV9zdXBwbGllc19kZWlu aXQoZHNpX3BoeSk7Ci1mYWlsX3JlZ21hcDoKLQkodm9pZClkc2lfcGh5X3JlZ21hcF9kZWluaXQo ZHNpX3BoeSk7Ci1mYWlsOgotCWRldm1fa2ZyZWUoJnBkZXYtPmRldiwgZHNpX3BoeSk7Ci0JZGV2 bV9rZnJlZSgmcGRldi0+ZGV2LCBpdGVtKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQg ZHNpX3BoeV9kcml2ZXJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0J aW50IHJjID0gMDsKLQlzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSA9IHBsYXRmb3JtX2dldF9kcnZk YXRhKHBkZXYpOwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKnRtcDsKLQotCWlmICghcGRldiB8 fCAhcGh5KSB7Ci0JCXByX2VycigiSW52YWxpZCBkZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVJTlZB TDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkc2lfcGh5X2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFj aF9zYWZlKHBvcywgdG1wLCAmZHNpX3BoeV9saXN0KSB7Ci0JCXN0cnVjdCBkc2lfcGh5X2xpc3Rf aXRlbSAqbjsKLQotCQluID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBkc2lfcGh5X2xpc3RfaXRl bSwgbGlzdCk7Ci0JCWlmIChuLT5waHkgPT0gcGh5KSB7Ci0JCQlsaXN0X2RlbCgmbi0+bGlzdCk7 Ci0JCQlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIG4pOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JbXV0 ZXhfdW5sb2NrKCZkc2lfcGh5X2xpc3RfbG9jayk7Ci0KLQltdXRleF9sb2NrKCZwaHktPnBoeV9s b2NrKTsKLQlyYyA9IGRzaV9waHlfc2V0dGluZ3NfZGVpbml0KHBoeSk7Ci0JaWYgKHJjKQotCQlw cl9lcnIoImZhaWxlZCB0byBkZWluaXRpYWxpemUgcGh5IHNldHRpbmdzLCByYz0lZFxuIiwgcmMp OwotCi0JcmMgPSBkc2lfcGh5X3N1cHBsaWVzX2RlaW5pdChwaHkpOwotCWlmIChyYykKLQkJcHJf ZXJyKCJmYWlsZWQgdG8gZGVpbml0aWFsaXplIHZvbHRhZ2Ugc3VwcGxpZXMsIHJjPSVkXG4iLCBy Yyk7Ci0KLQlyYyA9IGRzaV9waHlfcmVnbWFwX2RlaW5pdChwaHkpOwotCWlmIChyYykKLQkJcHJf ZXJyKCJmYWlsZWQgdG8gZGVpbml0aWFsaXplIHJlZ21hcCwgcmM9JWRcbiIsIHJjKTsKLQltdXRl eF91bmxvY2soJnBoeS0+cGh5X2xvY2spOwotCi0JbXV0ZXhfZGVzdHJveSgmcGh5LT5waHlfbG9j ayk7Ci0JZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBwaHkpOwotCi0JcGxhdGZvcm1fc2V0X2RydmRh dGEocGRldiwgTlVMTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgZHNpX3BoeV9wbGF0Zm9ybV9kcml2ZXIgPSB7Ci0JLnByb2JlICAgICAgPSBkc2lf cGh5X2RyaXZlcl9wcm9iZSwKLQkucmVtb3ZlICAgICA9IGRzaV9waHlfZHJpdmVyX3JlbW92ZSwK LQkuZHJpdmVyICAgICA9IHsKLQkJLm5hbWUgICA9ICJkc2lfcGh5IiwKLQkJLm9mX21hdGNoX3Rh YmxlID0gbXNtX2RzaV9waHlfb2ZfbWF0Y2gsCi0JfSwKLX07Ci0KLXN0YXRpYyB2b2lkIGRzaV9w aHlfZW5hYmxlX2h3KHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5KQotewotCWlmIChwaHktPmh3Lm9w cy5yZWd1bGF0b3JfZW5hYmxlKQotCQlwaHktPmh3Lm9wcy5yZWd1bGF0b3JfZW5hYmxlKCZwaHkt Pmh3LCAmcGh5LT5jZmcucmVndWxhdG9ycyk7Ci0KLQlpZiAocGh5LT5ody5vcHMuZW5hYmxlKQot CQlwaHktPmh3Lm9wcy5lbmFibGUoJnBoeS0+aHcsICZwaHktPmNmZyk7Ci19Ci0KLXN0YXRpYyB2 b2lkIGRzaV9waHlfZGlzYWJsZV9odyhzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSkKLXsKLQlpZiAo cGh5LT5ody5vcHMuZGlzYWJsZSkKLQkJcGh5LT5ody5vcHMuZGlzYWJsZSgmcGh5LT5odywgJnBo eS0+Y2ZnKTsKLQotCWlmIChwaHktPmh3Lm9wcy5yZWd1bGF0b3JfZGlzYWJsZSkKLQkJcGh5LT5o dy5vcHMucmVndWxhdG9yX2Rpc2FibGUoJnBoeS0+aHcpOwotfQotCi0vKioKLSAqIGRzaV9waHlf Z2V0KCkgLSBnZXQgYSBkc2kgcGh5IGhhbmRsZSBmcm9tIGRldmljZSBub2RlCi0gKiBAb2Zfbm9k ZTogICAgICAgICAgIGRldmljZSBub2RlIGZvciBkc2kgcGh5IGNvbnRyb2xsZXIKLSAqCi0gKiBH ZXRzIHRoZSBEU0kgUEhZIGhhbmRsZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgb2Zfbm9kZS4gVGhl IHJlZiBjb3VudCBpcwotICogaW5jcmVtZW50ZWQgdG8gb25lIGFsbCBzdWJzZXF1ZW50cyBnZXQg d2lsbCBmYWlsIHVudGlsIHRoZSBvcmlnaW5hbCBjbGllbnQKLSAqIGNhbGxzIGEgcHV0LgotICoK LSAqIFJldHVybjogRFNJIFBIWSBoYW5kbGUgb3IgYW4gZXJyb3IgY29kZS4KLSAqLwotc3RydWN0 IG1zbV9kc2lfcGh5ICpkc2lfcGh5X2dldChzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpCi17 Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqdG1wOwotCXN0cnVjdCBtc21fZHNpX3BoeSAqcGh5 ID0gTlVMTDsKLQotCW11dGV4X2xvY2soJmRzaV9waHlfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9l YWNoX3NhZmUocG9zLCB0bXAsICZkc2lfcGh5X2xpc3QpIHsKLQkJc3RydWN0IGRzaV9waHlfbGlz dF9pdGVtICpuOwotCi0JCW4gPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGRzaV9waHlfbGlzdF9p dGVtLCBsaXN0KTsKLQkJaWYgKG4tPnBoeS0+cGRldi0+ZGV2Lm9mX25vZGUgPT0gb2Zfbm9kZSkg ewotCQkJcGh5ID0gbi0+cGh5OwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZk c2lfcGh5X2xpc3RfbG9jayk7Ci0KLQlpZiAoIXBoeSkgewotCQlwcl9lcnIoIkRldmljZSB3aXRo IG9mIG5vZGUgbm90IGZvdW5kXG4iKTsKLQkJcGh5ID0gRVJSX1BUUigtRVBST0JFX0RFRkVSKTsK LQkJcmV0dXJuIHBoeTsKLQl9Ci0KLQltdXRleF9sb2NrKCZwaHktPnBoeV9sb2NrKTsKLQlpZiAo cGh5LT5yZWZjb3VudCA+IDApIHsKLQkJcHJfZXJyKCJbUEhZXyVkXSBEZXZpY2UgdW5kZXIgdXNl XG4iLCBwaHktPmluZGV4KTsKLQkJcGh5ID0gRVJSX1BUUigtRUlOVkFMKTsKLQl9IGVsc2Ugewot CQlwaHktPnJlZmNvdW50Kys7Ci0JfQotCW11dGV4X3VubG9jaygmcGh5LT5waHlfbG9jayk7Ci0J cmV0dXJuIHBoeTsKLX0KLQotLyoqCi0gKiBkc2lfcGh5X3B1dCgpIC0gcmVsZWFzZSBkc2kgcGh5 IGhhbmRsZQotICogQGRzaV9waHk6ICAgICAgICAgICAgICBEU0kgUEhZIGhhbmRsZS4KLSAqCi0g KiBSZWxlYXNlIHRoZSBEU0kgUEhZIGhhcmR3YXJlLiBEcml2ZXIgd2lsbCBjbGVhbiB1cCBhbGwg cmVzb3VyY2VzIGFuZCBwdXRzCi0gKiBiYWNrIHRoZSBEU0kgUEhZIGludG8gcmVzZXQgc3RhdGUu Ci0gKi8KLXZvaWQgZHNpX3BoeV9wdXQoc3RydWN0IG1zbV9kc2lfcGh5ICpkc2lfcGh5KQotewot CW11dGV4X2xvY2soJmRzaV9waHktPnBoeV9sb2NrKTsKLQotCWlmIChkc2lfcGh5LT5yZWZjb3Vu dCA9PSAwKQotCQlwcl9lcnIoIlVuYmFsYW5jZWQgJXMgY2FsbFxuIiwgX19mdW5jX18pOwotCWVs c2UKLQkJZHNpX3BoeS0+cmVmY291bnQtLTsKLQotCW11dGV4X3VubG9jaygmZHNpX3BoeS0+cGh5 X2xvY2spOwotfQotCi0vKioKLSAqIGRzaV9waHlfZHJ2X2luaXQoKSAtIGluaXRpYWxpemUgZHNp IHBoeSBkcml2ZXIKLSAqIEBkc2lfcGh5OiAgICAgICAgIERTSSBQSFkgaGFuZGxlLgotICoKLSAq IEluaXRpYWxpemVzIERTSSBQSFkgZHJpdmVyLiBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIGRzaV9w aHlfZ2V0KCkuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX3BoeV9k cnZfaW5pdChzdHJ1Y3QgbXNtX2RzaV9waHkgKmRzaV9waHkpCi17Ci0JY2hhciBkYmdfbmFtZVtE U0lfREVCVUdfTkFNRV9MRU5dOwotCi0Jc25wcmludGYoZGJnX25hbWUsIERTSV9ERUJVR19OQU1F X0xFTiwgImRzaSVkX3BoeSIsIGRzaV9waHktPmluZGV4KTsKLQlkcHVfZGJnX3JlZ19yZWdpc3Rl cl9iYXNlKGRiZ19uYW1lLCBkc2lfcGh5LT5ody5iYXNlLAotCQkJCW1zbV9pb21hcF9zaXplKGRz aV9waHktPnBkZXYsICJkc2lfcGh5IikpOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGRzaV9w aHlfZHJ2X2RlaW5pdCgpIC0gZGUtaW5pdGlhbGl6ZSBkc2kgcGh5IGRyaXZlcgotICogQGRzaV9w aHk6ICAgICAgICAgIERTSSBQSFkgaGFuZGxlLgotICoKLSAqIFJlbGVhc2UgYWxsIHJlc291cmNl cyBhY3F1aXJlZCBieSBkc2lfcGh5X2Rydl9pbml0KCkuCi0gKgotICogUmV0dXJuOiBlcnJvciBj b2RlLgotICovCi1pbnQgZHNpX3BoeV9kcnZfZGVpbml0KHN0cnVjdCBtc21fZHNpX3BoeSAqZHNp X3BoeSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotaW50IGRzaV9waHlfY2xrX2NiX3JlZ2lzdGVyKHN0 cnVjdCBtc21fZHNpX3BoeSAqZHNpX3BoeSwKLQlzdHJ1Y3QgY2xrX2N0cmxfY2IgKmNsa19jYikK LXsKLQlpZiAoIWRzaV9waHkgfHwgIWNsa19jYikgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1z XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZHNpX3BoeS0+Y2xrX2NiLnByaXYgPSBj bGtfY2ItPnByaXY7Ci0JZHNpX3BoeS0+Y2xrX2NiLmRzaV9jbGtfY2IgPSBjbGtfY2ItPmRzaV9j bGtfY2I7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZHNpX3BoeV92YWxpZGF0ZV9tb2RlKCkg LSB2YWxpZGF0ZSBhIGRpc3BsYXkgbW9kZQotICogQGRzaV9waHk6ICAgICAgICAgICAgRFNJIFBI WSBoYW5kbGUuCi0gKiBAbW9kZTogICAgICAgICAgICAgICBNb2RlIGluZm9ybWF0aW9uLgotICoK LSAqIFZhbGlkYXRpb24gd2lsbCBmYWlsIGlmIHRoZSBtb2RlIGNhbm5vdCBiZSBzdXBwb3J0ZWQg YnkgdGhlIFBIWSBkcml2ZXIgb3IKLSAqIGhhcmR3YXJlLgotICoKLSAqIFJldHVybjogZXJyb3Ig Y29kZS4KLSAqLwotaW50IGRzaV9waHlfdmFsaWRhdGVfbW9kZShzdHJ1Y3QgbXNtX2RzaV9waHkg KmRzaV9waHksCi0JCQkgIHN0cnVjdCBkc2lfbW9kZV9pbmZvICptb2RlKQotewotCWludCByYyA9 IDA7Ci0KLQlpZiAoIWRzaV9waHkgfHwgIW1vZGUpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFt c1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRzaV9waHktPnBo eV9sb2NrKTsKLQotCXByX2RlYnVnKCJbUEhZXyVkXSBTa2lwcGluZyB2YWxpZGF0aW9uXG4iLCBk c2lfcGh5LT5pbmRleCk7Ci0KLQltdXRleF91bmxvY2soJmRzaV9waHktPnBoeV9sb2NrKTsKLQly ZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogZHNpX3BoeV9zZXRfcG93ZXJfc3RhdGUoKSAtIGVuYWJs ZS9kaXNhYmxlIGRzaSBwaHkgcG93ZXIgc3VwcGxpZXMKLSAqIEBkc2lfcGh5OiAgICAgICAgICAg ICAgIERTSSBQSFkgaGFuZGxlLgotICogQGVuYWJsZTogICAgICAgICAgICAgICAgQm9vbGVhbiBm bGFnIHRvIGVuYWJsZS9kaXNhYmxlLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwot aW50IGRzaV9waHlfc2V0X3Bvd2VyX3N0YXRlKHN0cnVjdCBtc21fZHNpX3BoeSAqZHNpX3BoeSwg Ym9vbCBlbmFibGUpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghZHNpX3BoeSkgewotCQlwcl9l cnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhf bG9jaygmZHNpX3BoeS0+cGh5X2xvY2spOwotCi0JaWYgKGVuYWJsZSA9PSBkc2lfcGh5LT5wb3dl cl9zdGF0ZSkgewotCQlwcl9lcnIoIltQSFlfJWRdIE5vIHN0YXRlIGNoYW5nZVxuIiwgZHNpX3Bo eS0+aW5kZXgpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmIChlbmFibGUpIHsKLQkJcmMgPSBk c2lfcHdyX2VuYWJsZV9yZWd1bGF0b3IoJmRzaV9waHktPnB3cl9pbmZvLmRpZ2l0YWwsIHRydWUp OwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSBkaWdpdGFsIHJlZ3Vs YXRvclxuIik7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJaWYgKGRzaV9waHktPmRzaV9waHlf c3RhdGUgPT0gRFNJX1BIWV9FTkdJTkVfT0ZGKSB7Ci0JCQlyYyA9IGRzaV9wd3JfZW5hYmxlX3Jl Z3VsYXRvcigKLQkJCQkmZHNpX3BoeS0+cHdyX2luZm8ucGh5X3B3ciwgdHJ1ZSk7Ci0JCQlpZiAo cmMpIHsKLQkJCQlwcl9lcnIoImZhaWxlZCB0byBlbmFibGUgcGh5IHBvd2VyXG4iKTsKLQkJCQko dm9pZClkc2lfcHdyX2VuYWJsZV9yZWd1bGF0b3IoCi0JCQkJCSZkc2lfcGh5LT5wd3JfaW5mby5k aWdpdGFsLCBmYWxzZSk7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0J CWlmIChkc2lfcGh5LT5kc2lfcGh5X3N0YXRlID09IERTSV9QSFlfRU5HSU5FX09GRikgewotCQkJ cmMgPSBkc2lfcHdyX2VuYWJsZV9yZWd1bGF0b3IoCi0JCQkJJmRzaV9waHktPnB3cl9pbmZvLnBo eV9wd3IsIGZhbHNlKTsKLQkJCWlmIChyYykgewotCQkJCXByX2VycigiZmFpbGVkIHRvIGVuYWJs ZSBkaWdpdGFsIHJlZ3VsYXRvclxuIik7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJfQotCi0J CXJjID0gZHNpX3B3cl9lbmFibGVfcmVndWxhdG9yKCZkc2lfcGh5LT5wd3JfaW5mby5kaWdpdGFs LAotCQkJCQkgICAgICBmYWxzZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8g ZW5hYmxlIHBoeSBwb3dlclxuIik7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi0JZHNpX3Bo eS0+cG93ZXJfc3RhdGUgPSBlbmFibGU7Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJmRzaV9waHkt PnBoeV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BoeV9lbmFibGVf dWxwcyhzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSwKLQkJc3RydWN0IGRzaV9ob3N0X2NvbmZpZyAq Y29uZmlnLCBib29sIGNsYW1wX2VuYWJsZWQpCi17Ci0JaW50IHJjID0gMDsKLQl1MzIgbGFuZXMg PSAwOwotCXUzMiB1bHBzX2xhbmVzOwotCi0JaWYgKGNvbmZpZy0+cGFuZWxfbW9kZSA9PSBEU0lf T1BfQ01EX01PREUpCi0JCWxhbmVzID0gY29uZmlnLT5jb21tb25fY29uZmlnLmRhdGFfbGFuZXM7 Ci0JbGFuZXMgfD0gRFNJX0NMT0NLX0xBTkU7Ci0KLQkvKgotCSAqIElmIERTSSBjbGFtcHMgYXJl IGVuYWJsZWQsIGl0IG1lYW5zIHRoYXQgdGhlIERTSSBsYW5lcyBhcmUKLQkgKiBhbHJlYWR5IGlu IGlkbGUgc3RhdGUuIENoZWNraW5nIGZvciBsYW5lcyB0byBiZSBpbiBpZGxlIHN0YXRlCi0JICog c2hvdWxkIGJlIHNraXBwZWQgZHVyaW5nIFVMUFMgZW50cnkgcHJvZ3JhbW1pbmcgd2hpbGUgY29t aW5nCi0JICogb3V0IG9mIGlkbGUgc2NyZWVuLgotCSAqLwotCWlmICghY2xhbXBfZW5hYmxlZCkg ewotCQlyYyA9IHBoeS0+aHcub3BzLnVscHNfb3BzLndhaXRfZm9yX2xhbmVfaWRsZSgmcGh5LT5o dywgbGFuZXMpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigibGFuZXMgbm90IGVudGVyaW5nIGlk bGUsIHNraXAgVUxQU1xuIik7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQl9Ci0KLQlwaHktPmh3Lm9w cy51bHBzX29wcy51bHBzX3JlcXVlc3QoJnBoeS0+aHcsICZwaHktPmNmZywgbGFuZXMpOwotCi0J dWxwc19sYW5lcyA9IHBoeS0+aHcub3BzLnVscHNfb3BzLmdldF9sYW5lc19pbl91bHBzKCZwaHkt Pmh3KTsKLQotCWlmICghcGh5LT5ody5vcHMudWxwc19vcHMuaXNfbGFuZXNfaW5fdWxwcyhsYW5l cywgdWxwc19sYW5lcykpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gZW50ZXIgVUxQUywgcmVxdWVz dD0weCV4LCBhY3R1YWw9MHgleFxuIiwKLQkJICAgICAgIGxhbmVzLCB1bHBzX2xhbmVzKTsKLQkJ cmMgPSAtRUlPOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGh5X2Rp c2FibGVfdWxwcyhzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSwKLQkJIHN0cnVjdCBkc2lfaG9zdF9j b25maWcgKmNvbmZpZykKLXsKLQl1MzIgdWxwc19sYW5lcywgbGFuZXMgPSAwOwotCi0JaWYgKGNv bmZpZy0+cGFuZWxfbW9kZSA9PSBEU0lfT1BfQ01EX01PREUpCi0JCWxhbmVzID0gY29uZmlnLT5j b21tb25fY29uZmlnLmRhdGFfbGFuZXM7Ci0JbGFuZXMgfD0gRFNJX0NMT0NLX0xBTkU7Ci0KLQl1 bHBzX2xhbmVzID0gcGh5LT5ody5vcHMudWxwc19vcHMuZ2V0X2xhbmVzX2luX3VscHMoJnBoeS0+ aHcpOwotCi0JaWYgKCFwaHktPmh3Lm9wcy51bHBzX29wcy5pc19sYW5lc19pbl91bHBzKGxhbmVz LCB1bHBzX2xhbmVzKSkgewotCQlwcl9lcnIoIk1pc21hdGNoIGluIFVMUFM6IGxhbmVzOiVkLCB1 bHBzX2xhbmVzOiVkXG4iLAotCQkJCWxhbmVzLCB1bHBzX2xhbmVzKTsKLQkJcmV0dXJuIC1FSU87 Ci0JfQotCi0JcGh5LT5ody5vcHMudWxwc19vcHMudWxwc19leGl0KCZwaHktPmh3LCAmcGh5LT5j ZmcsIGxhbmVzKTsKLQotCXVscHNfbGFuZXMgPSBwaHktPmh3Lm9wcy51bHBzX29wcy5nZXRfbGFu ZXNfaW5fdWxwcygmcGh5LT5odyk7Ci0KLQlpZiAocGh5LT5ody5vcHMudWxwc19vcHMuaXNfbGFu ZXNfaW5fdWxwcyhsYW5lcywgdWxwc19sYW5lcykpIHsKLQkJcHJfZXJyKCJMYW5lcyAoMHgleCkg c3R1Y2sgaW4gVUxQU1xuIiwgdWxwc19sYW5lcyk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXJl dHVybiAwOwotfQotCi0KLWludCBkc2lfcGh5X3NldF91bHBzKHN0cnVjdCBtc21fZHNpX3BoeSAq cGh5LCBzdHJ1Y3QgZHNpX2hvc3RfY29uZmlnICpjb25maWcsCi0JCWJvb2wgZW5hYmxlLCBib29s IGNsYW1wX2VuYWJsZWQpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghcGh5KSB7Ci0JCXByX2Vy cigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIXBo eS0+aHcub3BzLnVscHNfb3BzLnVscHNfcmVxdWVzdCB8fAotCQkJIXBoeS0+aHcub3BzLnVscHNf b3BzLnVscHNfZXhpdCB8fAotCQkJIXBoeS0+aHcub3BzLnVscHNfb3BzLmdldF9sYW5lc19pbl91 bHBzIHx8Ci0JCQkhcGh5LT5ody5vcHMudWxwc19vcHMuaXNfbGFuZXNfaW5fdWxwcyB8fAotCQkJ IXBoeS0+aHcub3BzLnVscHNfb3BzLndhaXRfZm9yX2xhbmVfaWRsZSkgewotCQlwcl9kZWJ1Zygi RFNJIFBIWSBVTFBTIG9wcyBub3QgcHJlc2VudFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCW11 dGV4X2xvY2soJnBoeS0+cGh5X2xvY2spOwotCi0JaWYgKGVuYWJsZSkKLQkJcmMgPSBkc2lfcGh5 X2VuYWJsZV91bHBzKHBoeSwgY29uZmlnLCBjbGFtcF9lbmFibGVkKTsKLQllbHNlCi0JCXJjID0g ZHNpX3BoeV9kaXNhYmxlX3VscHMocGh5LCBjb25maWcpOwotCi0JaWYgKHJjKSB7Ci0JCXByX2Vy cigiW0RTSV9QSFklZF0gVWxwcyBzdGF0ZSBjaGFuZ2UoJWQpIGZhaWxlZCwgcmM9JWRcbiIsCi0J CQlwaHktPmluZGV4LCBlbmFibGUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JcHJfZGVidWco IltEU0lfUEhZJWRdIFVMUFMgc3RhdGUgPSAlZFxuIiwgcGh5LT5pbmRleCwgZW5hYmxlKTsKLQot ZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZwaHktPnBoeV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0K LS8qKgotICogZHNpX3BoeV9lbmFibGUoKSAtIGVuYWJsZSBEU0kgUEhZIGhhcmR3YXJlCi0gKiBA ZHNpX3BoeTogICAgICAgICAgICBEU0kgUEhZIGhhbmRsZS4KLSAqIEBjb25maWc6ICAgICAgICAg ICAgIERTSSBob3N0IGNvbmZpZ3VyYXRpb24uCi0gKiBAcGxsX3NvdXJjZTogICAgICAgICBTb3Vy Y2UgUExMIGZvciBQSFkgY2xvY2suCi0gKiBAc2tpcF92YWxpZGF0aW9uOiAgICBWYWxpZGF0aW9u IHdpbGwgbm90IGJlIHBlcmZvcm1lZCBvbiBwYXJhbWV0ZXJzLgotICoKLSAqIFZhbGlkYXRlcyBh bmQgZW5hYmxlcyBEU0kgUEhZLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50 IGRzaV9waHlfZW5hYmxlKHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5LAotCQkgICBzdHJ1Y3QgZHNp X2hvc3RfY29uZmlnICpjb25maWcsCi0JCSAgIGVudW0gZHNpX3BoeV9wbGxfc291cmNlIHBsbF9z b3VyY2UsCi0JCSAgIGJvb2wgc2tpcF92YWxpZGF0aW9uKQotewotCWludCByYyA9IDA7Ci0KLQlp ZiAoIXBoeSB8fCAhY29uZmlnKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQly ZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwaHktPnBoeV9sb2NrKTsKLQotCWlm ICghc2tpcF92YWxpZGF0aW9uKQotCQlwcl9kZWJ1ZygiW1BIWV8lZF0gVE9ETzogcGVyZm9ybSB2 YWxpZGF0aW9uXG4iLCBwaHktPmluZGV4KTsKLQotCW1lbWNweSgmcGh5LT5tb2RlLCAmY29uZmln LT52aWRlb190aW1pbmcsIHNpemVvZihwaHktPm1vZGUpKTsKLQltZW1jcHkoJnBoeS0+Y2ZnLmxh bmVfbWFwLCAmY29uZmlnLT5sYW5lX21hcCwgc2l6ZW9mKGNvbmZpZy0+bGFuZV9tYXApKTsKLQlw aHktPmRhdGFfbGFuZXMgPSBjb25maWctPmNvbW1vbl9jb25maWcuZGF0YV9sYW5lczsKLQlwaHkt PmRzdF9mb3JtYXQgPSBjb25maWctPmNvbW1vbl9jb25maWcuZHN0X2Zvcm1hdDsKLQlwaHktPmNm Zy5wbGxfc291cmNlID0gcGxsX3NvdXJjZTsKLQotCS8qKgotCSAqIElmIFBIWSB0aW1pbmcgcGFy YW1ldGVycyBhcmUgbm90IHByZXNlbnQgaW4gcGFuZWwgZHRzaSBmaWxlLAotCSAqIHRoZW4gY2Fs Y3VsYXRlIHRoZW0gaW4gdGhlIGRyaXZlcgotCSAqLwotCWlmICghcGh5LT5jZmcuaXNfcGh5X3Rp bWluZ19wcmVzZW50KQotCQlyYyA9IHBoeS0+aHcub3BzLmNhbGN1bGF0ZV90aW1pbmdfcGFyYW1z KCZwaHktPmh3LAotCQkJCQkJICZwaHktPm1vZGUsCi0JCQkJCQkgJmNvbmZpZy0+Y29tbW9uX2Nv bmZpZywKLQkJCQkJCSAmcGh5LT5jZmcudGltaW5nKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJb JXNdIGZhaWxlZCB0byBzZXQgdGltaW5nLCByYz0lZFxuIiwgcGh5LT5uYW1lLCByYyk7Ci0JCWdv dG8gZXJyb3I7Ci0JfQotCi0JZHNpX3BoeV9lbmFibGVfaHcocGh5KTsKLQlwaHktPmRzaV9waHlf c3RhdGUgPSBEU0lfUEhZX0VOR0lORV9PTjsKLQotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZwaHkt PnBoeV9sb2NrKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfcGh5X2Rpc2FibGUo KSAtIGRpc2FibGUgRFNJIFBIWSBoYXJkd2FyZS4KLSAqIEBwaHk6ICAgICAgICBEU0kgUEhZIGhh bmRsZS4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfcGh5X2Rpc2Fi bGUoc3RydWN0IG1zbV9kc2lfcGh5ICpwaHkpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghcGh5 KSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0KLQltdXRleF9sb2NrKCZwaHktPnBoeV9sb2NrKTsKLQlkc2lfcGh5X2Rpc2FibGVfaHcocGh5 KTsKLQlwaHktPmRzaV9waHlfc3RhdGUgPSBEU0lfUEhZX0VOR0lORV9PRkY7Ci0JbXV0ZXhfdW5s b2NrKCZwaHktPnBoeV9sb2NrKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfcGh5 X2lkbGVfY3RybCgpIC0gZW5hYmxlL2Rpc2FibGUgRFNJIFBIWSBkdXJpbmcgaWRsZSBzY3JlZW4K LSAqIEBwaHk6ICAgICAgICAgIERTSSBQSFkgaGFuZGxlCi0gKiBAZW5hYmxlOiAgICAgICBib29s ZWFuIHRvIHNwZWNpZnkgUEhZIGVuYWJsZS9kaXNhYmxlLgotICoKLSAqIFJldHVybjogZXJyb3Ig Y29kZS4KLSAqLwotCi1pbnQgZHNpX3BoeV9pZGxlX2N0cmwoc3RydWN0IG1zbV9kc2lfcGh5ICpw aHksIGJvb2wgZW5hYmxlKQotewotCWlmICghcGh5KSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJh bXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwaHktPnBoeV9s b2NrKTsKLQlpZiAoZW5hYmxlKSB7Ci0JCWlmIChwaHktPmh3Lm9wcy5waHlfaWRsZV9vbikKLQkJ CXBoeS0+aHcub3BzLnBoeV9pZGxlX29uKCZwaHktPmh3LCAmcGh5LT5jZmcpOwotCi0JCWlmIChw aHktPmh3Lm9wcy5yZWd1bGF0b3JfZW5hYmxlKQotCQkJcGh5LT5ody5vcHMucmVndWxhdG9yX2Vu YWJsZSgmcGh5LT5odywKLQkJCQkmcGh5LT5jZmcucmVndWxhdG9ycyk7Ci0JfSBlbHNlIHsKLQkJ aWYgKHBoeS0+aHcub3BzLnBoeV9pZGxlX29mZikKLQkJCXBoeS0+aHcub3BzLnBoeV9pZGxlX29m ZigmcGh5LT5odyk7Ci0JfQotCW11dGV4X3VubG9jaygmcGh5LT5waHlfbG9jayk7Ci0KLQlyZXR1 cm4gMDsKLX0KLQotLyoqCi0gKiBkc2lfcGh5X3NldF90aW1pbmdfcGFyYW1zKCkgLSB0aW1pbmcg cGFyYW1ldGVycyBmb3IgdGhlIHBhbmVsCi0gKiBAcGh5OiAgICAgICAgICBEU0kgUEhZIGhhbmRs ZQotICogQHRpbWluZzogICAgICAgYXJyYXkgaG9sZGluZyB0aW1pbmcgcGFyYW1zLgotICogQHNp emU6ICAgICAgICAgc2l6ZSBvZiB0aGUgYXJyYXkuCi0gKgotICogV2hlbiBQSFkgdGltaW5nIGNh bGN1bGF0b3IgaXMgbm90IGltcGxlbWVudGVkLCB0aGlzIGFycmF5IHdpbGwgYmUgdXNlZCB0bwot ICogcGFzcyBQSFkgdGltaW5nIGluZm9ybWF0aW9uLgotICoKLSAqIFJldHVybjogZXJyb3IgY29k ZS4KLSAqLwotaW50IGRzaV9waHlfc2V0X3RpbWluZ19wYXJhbXMoc3RydWN0IG1zbV9kc2lfcGh5 ICpwaHksCi0JCQkgICAgICB1MzIgKnRpbWluZywgdTMyIHNpemUpCi17Ci0JaW50IHJjID0gMDsK LQotCWlmICghcGh5IHx8ICF0aW1pbmcgfHwgIXNpemUpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBh cmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJnBoeS0+cGh5 X2xvY2spOwotCi0JaWYgKHBoeS0+aHcub3BzLnBoeV90aW1pbmdfdmFsKQotCQlyYyA9IHBoeS0+ aHcub3BzLnBoeV90aW1pbmdfdmFsKCZwaHktPmNmZy50aW1pbmcsIHRpbWluZywgc2l6ZSk7Ci0J aWYgKCFyYykKLQkJcGh5LT5jZmcuaXNfcGh5X3RpbWluZ19wcmVzZW50ID0gdHJ1ZTsKLQltdXRl eF91bmxvY2soJnBoeS0+cGh5X2xvY2spOwotCXJldHVybiByYzsKLX0KLQotdm9pZCBkc2lfcGh5 X2Rydl9yZWdpc3Rlcih2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZHNpX3Bo eV9wbGF0Zm9ybV9kcml2ZXIpOwotfQotCi12b2lkIGRzaV9waHlfZHJ2X3VucmVnaXN0ZXIodm9p ZCkKLXsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZHNpX3BoeV9wbGF0Zm9ybV9kcml2 ZXIpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lf cGh5LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHkuaApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIzMDdlOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzNSAr MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0 aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh bmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2lmbmRlZiBfRFNJ X1BIWV9IXwotI2RlZmluZSBfRFNJX1BIWV9IXwotCi0jaW5jbHVkZSAiZHNpX2RlZnMuaCIKLSNp bmNsdWRlICJkc2lfY2xrLmgiCi0jaW5jbHVkZSAiZHNpX3B3ci5oIgotI2luY2x1ZGUgImRzaV9w aHlfaHcuaCIKLQotc3RydWN0IGRzaV92ZXJfc3BlY19pbmZvIHsKLQllbnVtIGRzaV9waHlfdmVy c2lvbiB2ZXJzaW9uOwotCXUzMiBsYW5lX2NmZ19jb3VudDsKLQl1MzIgc3RyZW5ndGhfY2ZnX2Nv dW50OwotCXUzMiByZWd1bGF0b3JfY2ZnX2NvdW50OwotCXUzMiB0aW1pbmdfY2ZnX2NvdW50Owot fTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX3BoeV9wb3dlcl9pbmZvIC0gZGlnaXRhbCBhbmQgYW5h bG9nIHBvd2VyIHN1cHBsaWVzIGZvciBEU0kgUEhZCi0gKiBAZGlnaXRhbDogICAgICAgRGlnaXRh bCBwb3dlciBzdXBwbHkgZm9yIERTSSBQSFkuCi0gKiBAcGh5X3B3cjogICAgICAgQW5hbG9nIHBv d2VyIHN1cHBsaWVzIGZvciBEU0kgUEhZIHRvIHdvcmsuCi0gKi8KLXN0cnVjdCBkc2lfcGh5X3Bv d2VyX2luZm8gewotCXN0cnVjdCBkc2lfcmVndWxhdG9yX2luZm8gZGlnaXRhbDsKLQlzdHJ1Y3Qg ZHNpX3JlZ3VsYXRvcl9pbmZvIHBoeV9wd3I7Ci19OwotCi0vKioKLSAqIGVudW0gcGh5X2VuZ2lu ZV9zdGF0ZSAtIGRlZmluZSBlbmdpbmUgc3RhdHVzIGZvciBkc2kgcGh5LgotICogQERTSV9QSFlf RU5HSU5FX09GRjogIEVuZ2luZSBpcyB0dXJuZWQgb2ZmLgotICogQERTSV9QSFlfRU5HSU5FX09O OiAgIEVuZ2luZSBpcyB0dXJuZWQgb24uCi0gKiBARFNJX1BIWV9FTkdJTkVfTUFYOiAgTWF4aW11 bSB2YWx1ZS4KLSAqLwotZW51bSBwaHlfZW5naW5lX3N0YXRlIHsKLQlEU0lfUEhZX0VOR0lORV9P RkYgPSAwLAotCURTSV9QSFlfRU5HSU5FX09OLAotCURTSV9QSFlfRU5HSU5FX01BWCwKLX07Ci0K LQotLyoqCi0gKiBzdHJ1Y3QgbXNtX2RzaV9waHkgLSBEU0kgUEhZIG9iamVjdAotICogQHBkZXY6 ICAgICAgICAgICAgICBQb2ludGVyIHRvIHBsYXRmb3JtIGRldmljZS4KLSAqIEBpbmRleDogICAg ICAgICAgICAgSW5zdGFuY2UgaWQuCi0gKiBAbmFtZTogICAgICAgICAgICAgIE5hbWUgb2YgdGhl IFBIWSBpbnN0YW5jZS4KLSAqIEByZWZjb3VudDogICAgICAgICAgUmVmZXJlbmNlIGNvdW50Lgot ICogQHBoeV9sb2NrOiAgICAgICAgICBNdXRleCBmb3IgaGFyZHdhcmUgYW5kIG9iamVjdCBhY2Nl c3MuCi0gKiBAdmVyX2luZm86ICAgICAgICAgIFZlcnNpb24gc3BlY2lmaWMgcGh5IHBhcmFtZXRl cnMuCi0gKiBAaHc6ICAgICAgICAgICAgICAgIERTSSBQSFkgaGFyZHdhcmUgb2JqZWN0LgotICog QHB3cl9pbmZvOiAgICAgICAgICBQb3dlciBpbmZvcm1hdGlvbi4KLSAqIEBjZmc6ICAgICAgICAg ICAgICAgRFNJIHBoeSBjb25maWd1cmF0aW9uLgotICogQGNsa19jYjoJICAgICAgIHN0cnVjdHVy ZSBjb250YWluaW5nIGNhbGwgYmFja3MgZm9yIGNsb2NrIGNvbnRyb2wKLSAqIEBwb3dlcl9zdGF0 ZTogICAgICAgVHJ1ZSBpZiBQSFkgaXMgcG93ZXJlZCBvbi4KLSAqIEBkc2lfcGh5X3N0YXRlOiAg ICAgUEhZIHN0YXRlIGluZm9ybWF0aW9uLgotICogQG1vZGU6ICAgICAgICAgICAgICBDdXJyZW50 IG1vZGUuCi0gKiBAZGF0YV9sYW5lczogICAgICAgIE51bWJlciBvZiBkYXRhIGxhbmVzIHVzZWQu Ci0gKiBAZHN0X2Zvcm1hdDogICAgICAgIERlc3RpbmF0aW9uIGZvcm1hdC4KLSAqLwotc3RydWN0 IG1zbV9kc2lfcGh5IHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCWludCBpbmRl eDsKLQljb25zdCBjaGFyICpuYW1lOwotCXUzMiByZWZjb3VudDsKLQlzdHJ1Y3QgbXV0ZXggcGh5 X2xvY2s7Ci0KLQljb25zdCBzdHJ1Y3QgZHNpX3Zlcl9zcGVjX2luZm8gKnZlcl9pbmZvOwotCXN0 cnVjdCBkc2lfcGh5X2h3IGh3OwotCi0Jc3RydWN0IGRzaV9waHlfcG93ZXJfaW5mbyBwd3JfaW5m bzsKLQotCXN0cnVjdCBkc2lfcGh5X2NmZyBjZmc7Ci0Jc3RydWN0IGNsa19jdHJsX2NiIGNsa19j YjsKLQotCWVudW0gcGh5X2VuZ2luZV9zdGF0ZSBkc2lfcGh5X3N0YXRlOwotCWJvb2wgcG93ZXJf c3RhdGU7Ci0Jc3RydWN0IGRzaV9tb2RlX2luZm8gbW9kZTsKLQllbnVtIGRzaV9kYXRhX2xhbmVz IGRhdGFfbGFuZXM7Ci0JZW51bSBkc2lfcGl4ZWxfZm9ybWF0IGRzdF9mb3JtYXQ7Ci19OwotCi0v KioKLSAqIGRzaV9waHlfZ2V0KCkgLSBnZXQgYSBkc2kgcGh5IGhhbmRsZSBmcm9tIGRldmljZSBu b2RlCi0gKiBAb2Zfbm9kZTogICAgICAgICAgIGRldmljZSBub2RlIGZvciBkc2kgcGh5IGNvbnRy b2xsZXIKLSAqCi0gKiBHZXRzIHRoZSBEU0kgUEhZIGhhbmRsZSBmb3IgdGhlIGNvcnJlc3BvbmRp bmcgb2Zfbm9kZS4gVGhlIHJlZiBjb3VudCBpcwotICogaW5jcmVtZW50ZWQgdG8gb25lIGFsbCBz dWJzZXF1ZW50cyBnZXQgd2lsbCBmYWlsIHVudGlsIHRoZSBvcmlnaW5hbCBjbGllbnQKLSAqIGNh bGxzIGEgcHV0LgotICoKLSAqIFJldHVybjogRFNJIFBIWSBoYW5kbGUgb3IgYW4gZXJyb3IgY29k ZS4KLSAqLwotc3RydWN0IG1zbV9kc2lfcGh5ICpkc2lfcGh5X2dldChzdHJ1Y3QgZGV2aWNlX25v ZGUgKm9mX25vZGUpOwotCi0vKioKLSAqIGRzaV9waHlfcHV0KCkgLSByZWxlYXNlIGRzaSBwaHkg aGFuZGxlCi0gKiBAZHNpX3BoeTogICAgICAgICAgICAgIERTSSBQSFkgaGFuZGxlLgotICoKLSAq IFJlbGVhc2UgdGhlIERTSSBQSFkgaGFyZHdhcmUuIERyaXZlciB3aWxsIGNsZWFuIHVwIGFsbCBy ZXNvdXJjZXMgYW5kIHB1dHMKLSAqIGJhY2sgdGhlIERTSSBQSFkgaW50byByZXNldCBzdGF0ZS4K LSAqLwotdm9pZCBkc2lfcGh5X3B1dChzdHJ1Y3QgbXNtX2RzaV9waHkgKmRzaV9waHkpOwotCi0v KioKLSAqIGRzaV9waHlfZHJ2X2luaXQoKSAtIGluaXRpYWxpemUgZHNpIHBoeSBkcml2ZXIKLSAq IEBkc2lfcGh5OiAgICAgICAgIERTSSBQSFkgaGFuZGxlLgotICoKLSAqIEluaXRpYWxpemVzIERT SSBQSFkgZHJpdmVyLiBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIGRzaV9waHlfZ2V0KCkuCi0gKgot ICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX3BoeV9kcnZfaW5pdChzdHJ1Y3Qg bXNtX2RzaV9waHkgKmRzaV9waHkpOwotCi0vKioKLSAqIGRzaV9waHlfZHJ2X2RlaW5pdCgpIC0g ZGUtaW5pdGlhbGl6ZSBkc2kgcGh5IGRyaXZlcgotICogQGRzaV9waHk6ICAgICAgICAgIERTSSBQ SFkgaGFuZGxlLgotICoKLSAqIFJlbGVhc2UgYWxsIHJlc291cmNlcyBhY3F1aXJlZCBieSBkc2lf cGh5X2Rydl9pbml0KCkuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNp X3BoeV9kcnZfZGVpbml0KHN0cnVjdCBtc21fZHNpX3BoeSAqZHNpX3BoeSk7Ci0KLS8qKgotICog ZHNpX3BoeV92YWxpZGF0ZV9tb2RlKCkgLSB2YWxpZGF0ZSBhIGRpc3BsYXkgbW9kZQotICogQGRz aV9waHk6ICAgICAgICAgICAgRFNJIFBIWSBoYW5kbGUuCi0gKiBAbW9kZTogICAgICAgICAgICAg ICBNb2RlIGluZm9ybWF0aW9uLgotICoKLSAqIFZhbGlkYXRpb24gd2lsbCBmYWlsIGlmIHRoZSBt b2RlIGNhbm5vdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIFBIWSBkcml2ZXIgb3IKLSAqIGhhcmR3YXJl LgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9waHlfdmFsaWRhdGVf bW9kZShzdHJ1Y3QgbXNtX2RzaV9waHkgKmRzaV9waHksCi0JCQkgIHN0cnVjdCBkc2lfbW9kZV9p bmZvICptb2RlKTsKLQotLyoqCi0gKiBkc2lfcGh5X3NldF9wb3dlcl9zdGF0ZSgpIC0gZW5hYmxl L2Rpc2FibGUgZHNpIHBoeSBwb3dlciBzdXBwbGllcwotICogQGRzaV9waHk6ICAgICAgICAgICAg ICAgRFNJIFBIWSBoYW5kbGUuCi0gKiBAZW5hYmxlOiAgICAgICAgICAgICAgICBCb29sZWFuIGZs YWcgdG8gZW5hYmxlL2Rpc2FibGUuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1p bnQgZHNpX3BoeV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IG1zbV9kc2lfcGh5ICpkc2lfcGh5LCBi b29sIGVuYWJsZSk7Ci0KLS8qKgotICogZHNpX3BoeV9lbmFibGUoKSAtIGVuYWJsZSBEU0kgUEhZ IGhhcmR3YXJlCi0gKiBAZHNpX3BoeTogICAgICAgICAgICBEU0kgUEhZIGhhbmRsZS4KLSAqIEBj b25maWc6ICAgICAgICAgICAgIERTSSBob3N0IGNvbmZpZ3VyYXRpb24uCi0gKiBAcGxsX3NvdXJj ZTogICAgICAgICBTb3VyY2UgUExMIGZvciBQSFkgY2xvY2suCi0gKiBAc2tpcF92YWxpZGF0aW9u OiAgICBWYWxpZGF0aW9uIHdpbGwgbm90IGJlIHBlcmZvcm1lZCBvbiBwYXJhbWV0ZXJzLgotICoK LSAqIFZhbGlkYXRlcyBhbmQgZW5hYmxlcyBEU0kgUEhZLgotICoKLSAqIFJldHVybjogZXJyb3Ig Y29kZS4KLSAqLwotaW50IGRzaV9waHlfZW5hYmxlKHN0cnVjdCBtc21fZHNpX3BoeSAqZHNpX3Bo eSwKLQkJICAgc3RydWN0IGRzaV9ob3N0X2NvbmZpZyAqY29uZmlnLAotCQkgICBlbnVtIGRzaV9w aHlfcGxsX3NvdXJjZSBwbGxfc291cmNlLAotCQkgICBib29sIHNraXBfdmFsaWRhdGlvbik7Ci0K LS8qKgotICogZHNpX3BoeV9kaXNhYmxlKCkgLSBkaXNhYmxlIERTSSBQSFkgaGFyZHdhcmUuCi0g KiBAcGh5OiAgICAgICAgRFNJIFBIWSBoYW5kbGUuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2Rl LgotICovCi1pbnQgZHNpX3BoeV9kaXNhYmxlKHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5KTsKLQot LyoqCi0gKiBkc2lfcGh5X3NldF91bHBzKCkgLSBzZXQgdWxwcyBzdGF0ZSBmb3IgRFNJIHBIWQot ICogQHBoeTogICAgICAgICAgRFNJIFBIWSBoYW5kbGUKLSAqIEBjb25maWc6CSAgRFNpIGhvc3Qg Y29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KLSAqIEBlbmFibGU6CSAgRW5hYmxlL0Rpc2FibGUK LSAqIEBjbGFtcF9lbmFibGVkOiBtbXNzX2NsYW1wIGVuYWJsZWQvZGlzYWJsZWQKLSAqCi0gKiBS ZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfcGh5X3NldF91bHBzKHN0cnVjdCBtc21f ZHNpX3BoeSAqcGh5LCAgc3RydWN0IGRzaV9ob3N0X2NvbmZpZyAqY29uZmlnLAotCQlib29sIGVu YWJsZSwgYm9vbCBjbGFtcF9lbmFibGVkKTsKLQotLyoqCi0gKiBkc2lfcGh5X2Nsa19jYl9yZWdp c3RlcigpIC0gUmVnaXN0ZXIgUEhZIGNsb2NrIGNvbnRyb2wgY2FsbGJhY2sKLSAqIEBwaHk6ICAg ICAgICAgIERTSSBQSFkgaGFuZGxlCi0gKiBAY2xrX2NiOgkgIFN0cnVjdHVyZSBjb250YWluaW5n IGNhbGwgYmFjayBmb3IgY2xvY2sgY29udHJvbAotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4K LSAqLwotaW50IGRzaV9waHlfY2xrX2NiX3JlZ2lzdGVyKHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5 LAotCXN0cnVjdCBjbGtfY3RybF9jYiAqY2xrX2NiKTsKLQotLyoqCi0gKiBkc2lfcGh5X2lkbGVf Y3RybCgpIC0gZW5hYmxlL2Rpc2FibGUgRFNJIFBIWSBkdXJpbmcgaWRsZSBzY3JlZW4KLSAqIEBw aHk6ICAgICAgICAgIERTSSBQSFkgaGFuZGxlCi0gKiBAZW5hYmxlOiAgICAgICBib29sZWFuIHRv IHNwZWNpZnkgUEhZIGVuYWJsZS9kaXNhYmxlLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4K LSAqLwotaW50IGRzaV9waHlfaWRsZV9jdHJsKHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5LCBib29s IGVuYWJsZSk7Ci0KLS8qKgotICogZHNpX3BoeV9zZXRfdGltaW5nX3BhcmFtcygpIC0gdGltaW5n IHBhcmFtZXRlcnMgZm9yIHRoZSBwYW5lbAotICogQHBoeTogICAgICAgICAgRFNJIFBIWSBoYW5k bGUKLSAqIEB0aW1pbmc6ICAgICAgIGFycmF5IGhvbGRpbmcgdGltaW5nIHBhcmFtcy4KLSAqIEBz aXplOiAgICAgICAgIHNpemUgb2YgdGhlIGFycmF5LgotICoKLSAqIFdoZW4gUEhZIHRpbWluZyBj YWxjdWxhdG9yIGlzIG5vdCBpbXBsZW1lbnRlZCwgdGhpcyBhcnJheSB3aWxsIGJlIHVzZWQgdG8K LSAqIHBhc3MgUEhZIHRpbWluZyBpbmZvcm1hdGlvbi4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNv ZGUuCi0gKi8KLWludCBkc2lfcGh5X3NldF90aW1pbmdfcGFyYW1zKHN0cnVjdCBtc21fZHNpX3Bo eSAqcGh5LAotCQkJICAgICAgdTMyICp0aW1pbmcsIHUzMiBzaXplKTsKLQotLyoqCi0gKiBkc2lf cGh5X2Rydl9yZWdpc3RlcigpIC0gcmVnaXN0ZXIgcGxhdGZvcm0gZHJpdmVyIGZvciBkc2kgcGh5 Ci0gKi8KLXZvaWQgZHNpX3BoeV9kcnZfcmVnaXN0ZXIodm9pZCk7Ci0KLS8qKgotICogZHNpX3Bo eV9kcnZfdW5yZWdpc3RlcigpIC0gdW5yZWdpc3RlciBwbGF0Zm9ybSBkcml2ZXIKLSAqLwotdm9p ZCBkc2lfcGh5X2Rydl91bnJlZ2lzdGVyKHZvaWQpOwotCi0jZW5kaWYgLyogX0RTSV9QSFlfSF8g Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV9o dy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5X2h3LmgKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MWE0NTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9n cHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5X2h3LmgKKysrIC9kZXYvbnVsbApAQCAtMSwy NjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE4LCBUaGUgTGludXggRm91 bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpZm5kZWYg X0RTSV9QSFlfSFdfSF8KLSNkZWZpbmUgX0RTSV9QSFlfSFdfSF8KLQotI2luY2x1ZGUgImRzaV9k ZWZzLmgiCi0KLSNkZWZpbmUgRFNJX01BWF9TRVRUSU5HUyA4Ci0jZGVmaW5lIERTSV9QSFlfVElN SU5HX1YzX1NJWkUgMTIKLQotLyoqCi0gKiBlbnVtIGRzaV9waHlfdmVyc2lvbiAtIERTSSBQSFkg dmVyc2lvbiBlbnVtZXJhdGlvbgotICogQERTSV9QSFlfVkVSU0lPTl9VTktOT1dOOiAgICBVbmtu b3duIHZlcnNpb24uCi0gKiBARFNJX1BIWV9WRVJTSU9OXzBfMF9IUE06ICAgIDI4bm0tSFBNLgot ICogQERTSV9QSFlfVkVSU0lPTl8wXzBfTFBNOiAgICAyOG5tLUhQTS4KLSAqIEBEU0lfUEhZX1ZF UlNJT05fMV8wOiAgICAgICAgMjBubQotICogQERTSV9QSFlfVkVSU0lPTl8yXzA6ICAgICAgICAx NG5tCi0gKiBARFNJX1BIWV9WRVJTSU9OXzNfMDogICAgICAgIDEwbm0KLSAqIEBEU0lfUEhZX1ZF UlNJT05fTUFYOgotICovCi1lbnVtIGRzaV9waHlfdmVyc2lvbiB7Ci0JRFNJX1BIWV9WRVJTSU9O X1VOS05PV04sCi0JRFNJX1BIWV9WRVJTSU9OXzBfMF9IUE0sIC8qIDI4bm0tSFBNICovCi0JRFNJ X1BIWV9WRVJTSU9OXzBfMF9MUE0sIC8qIDI4bm0tTFBNICovCi0JRFNJX1BIWV9WRVJTSU9OXzFf MCwgLyogMjBubSAqLwotCURTSV9QSFlfVkVSU0lPTl8yXzAsIC8qIDE0bm0gKi8KLQlEU0lfUEhZ X1ZFUlNJT05fM18wLCAvKiAxMG5tICovCi0JRFNJX1BIWV9WRVJTSU9OX01BWAotfTsKLQotLyoq Ci0gKiBlbnVtIGRzaV9waHlfaHdfZmVhdHVyZXMgLSBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgRFNJ IFBIWSBoYXJkd2FyZQotICogQERTSV9QSFlfRFBIWTogICAgICAgIFN1cHBvcnRzIERQSFkKLSAq IEBEU0lfUEhZX0NQSFk6ICAgICAgICBTdXBwb3J0cyBDUEhZCi0gKiBARFNJX1BIWV9NQVhfRkVB VFVSRVM6Ci0gKi8KLWVudW0gZHNpX3BoeV9od19mZWF0dXJlcyB7Ci0JRFNJX1BIWV9EUEhZLAot CURTSV9QSFlfQ1BIWSwKLQlEU0lfUEhZX01BWF9GRUFUVVJFUwotfTsKLQotLyoqCi0gKiBlbnVt IGRzaV9waHlfcGxsX3NvdXJjZSAtIHBsbCBjbG9jayBzb3VyY2UgZm9yIFBIWS4KLSAqIEBEU0lf UExMX1NPVVJDRV9TVEFOREFMT05FOiAgICBDbG9jayBpcyBzb3VyY2VkIGZyb20gbmF0aXZlIFBM TCBhbmQgaXMgbm90Ci0gKgkJCQkgIHNoYXJlZCBieSBvdGhlciBQSFlzLgotICogQERTSV9QTExf U09VUkNFX05BVElWRTogICAgICAgIENsb2NrIGlzIHNvdXJjZWQgZnJvbSBuYXRpdmUgUExMIGFu ZCBpcwotICoJCQkJICBzaGFyZWQgYnkgb3RoZXIgUEhZcy4KLSAqIEBEU0lfUExMX1NPVVJDRV9O T05fTkFUSVZFOiAgICBDbG9jayBpcyBzb3VyY2VkIGZyb20gb3RoZXIgUEhZcy4KLSAqIEBEU0lf UExMX1NPVVJDRV9NQVg6Ci0gKi8KLWVudW0gZHNpX3BoeV9wbGxfc291cmNlIHsKLQlEU0lfUExM X1NPVVJDRV9TVEFOREFMT05FID0gMCwKLQlEU0lfUExMX1NPVVJDRV9OQVRJVkUsCi0JRFNJX1BM TF9TT1VSQ0VfTk9OX05BVElWRSwKLQlEU0lfUExMX1NPVVJDRV9NQVgKLX07Ci0KLS8qKgotICog c3RydWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyAtIEhvbGRzIHJlZ2lzdGVyIHZhbHVlcyBmb3Ig UEhZIHBhcmFtZXRlcnMKLSAqIEBsYW5lOiAgICAgICAgICAgQSBzZXQgb2YgbWF4aW11bSA4IHZh bHVlcyBmb3IgZWFjaCBsYW5lLgotICogQGxhbmVfdjM6ICAgICAgICBBIHNldCBvZiBtYXhpbXVt IDEyIHZhbHVlcyBmb3IgZWFjaCBsYW5lLgotICogQGNvdW50X3Blcl9sYW5lOiBOdW1iZXIgb2Yg dmFsdWVzIHBlciBlYWNoIGxhbmUuCi0gKi8KLXN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3Mg ewotCXU4IGxhbmVbRFNJX0xBTkVfTUFYXVtEU0lfTUFYX1NFVFRJTkdTXTsKLQl1OCBsYW5lX3Yz W0RTSV9QSFlfVElNSU5HX1YzX1NJWkVdOwotCXUzMiBjb3VudF9wZXJfbGFuZTsKLX07Ci0KLS8q KgotICogc3RydWN0IGRzaV9waHlfY2ZnIC0gRFNJIFBIWSBjb25maWd1cmF0aW9uCi0gKiBAbGFu ZWNmZzogICAgICAgICAgTGFuZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLgotICogQHN0cmVuZ3Ro OiAgICAgICAgIFN0cmVuZ3RoIHNldHRpbmdzIGZvciBsYW5lcy4KLSAqIEB0aW1pbmc6ICAgICAg ICAgICBUaW1pbmcgcGFyYW1ldGVycyBmb3IgbGFuZXMuCi0gKiBAaXNfcGh5X3RpbWluZ19wcmVz ZW50OglCb29sZWFuIHdoZXRoZXIgcGh5IHRpbWluZ3MgYXJlIGRlZmluZWQuCi0gKiBAcmVndWxh dG9yczogICAgICAgUmVndWxhdG9yIHNldHRpbmdzIGZvciBsYW5lcy4KLSAqIEBwbGxfc291cmNl OiAgICAgICBQTEwgc291cmNlLgotICogQGxhbmVfbWFwOiAgICAgICAgIERTSSBsb2dpY2FsIHRv IFBIWSBsYW5lIG1hcHBpbmcuCi0gKi8KLXN0cnVjdCBkc2lfcGh5X2NmZyB7Ci0Jc3RydWN0IGRz aV9waHlfcGVyX2xhbmVfY2ZncyBsYW5lY2ZnOwotCXN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2Nm Z3Mgc3RyZW5ndGg7Ci0Jc3RydWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyB0aW1pbmc7Ci0JYm9v bCBpc19waHlfdGltaW5nX3ByZXNlbnQ7Ci0Jc3RydWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyBy ZWd1bGF0b3JzOwotCWVudW0gZHNpX3BoeV9wbGxfc291cmNlIHBsbF9zb3VyY2U7Ci0Jc3RydWN0 IGRzaV9sYW5lX21hcCBsYW5lX21hcDsKLX07Ci0KLXN0cnVjdCBkc2lfcGh5X2h3OwotCi1zdHJ1 Y3QgcGh5X3VscHNfY29uZmlnX29wcyB7Ci0JLyoqCi0JICogd2FpdF9mb3JfbGFuZV9pZGxlKCkg LSB3YWl0IGZvciBEU0kgbGFuZXMgdG8gZ28gdG8gaWRsZSBzdGF0ZQotCSAqIEBwaHk6ICAgICAg ICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgaW5zdGFuY2UuCi0JICogQGxhbmVzOiAg ICAgICAgIE9SZWQgbGlzdCBvZiBsYW5lcyAoZW51bSBkc2lfZGF0YV9sYW5lcykgd2hpY2ggbmVl ZAotCSAqICAgICAgICAgICAgICAgICB0byBiZSBjaGVja2VkIHRvIGJlIGluIGlkbGUgc3RhdGUu Ci0JICovCi0JaW50ICgqd2FpdF9mb3JfbGFuZV9pZGxlKShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5 LCB1MzIgbGFuZXMpOwotCi0JLyoqCi0JICogdWxwc19yZXF1ZXN0KCkgLSByZXF1ZXN0IHVscHMg ZW50cnkgZm9yIHNwZWNpZmllZCBsYW5lcwotCSAqIEBwaHk6ICAgICAgICAgICBQb2ludGVyIHRv IERTSSBQSFkgaGFyZHdhcmUgaW5zdGFuY2UuCi0JICogQGNmZzogICAgICAgICAgIFBlciBsYW5l IGNvbmZpZ3VyYXRpb25zIGZvciB0aW1pbmcsIHN0cmVuZ3RoIGFuZCBsYW5lCi0JICoJICAgICAg ICAgICBjb25maWd1cmF0aW9ucy4KLQkgKiBAbGFuZXM6ICAgICAgICAgT1JlZCBsaXN0IG9mIGxh bmVzIChlbnVtIGRzaV9kYXRhX2xhbmVzKSB3aGljaCBuZWVkCi0JICogICAgICAgICAgICAgICAg IHRvIGVudGVyIFVMUFMuCi0JICoKLQkgKiBDYWxsZXIgc2hvdWxkIGNoZWNrIGlmIGxhbmVzIGFy ZSBpbiBVTFBTIG1vZGUgYnkgY2FsbGluZwotCSAqIGdldF9sYW5lc19pbl91bHBzKCkgb3BlcmF0 aW9uLgotCSAqLwotCXZvaWQgKCp1bHBzX3JlcXVlc3QpKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHks Ci0JCQlzdHJ1Y3QgZHNpX3BoeV9jZmcgKmNmZywgdTMyIGxhbmVzKTsKLQotCS8qKgotCSAqIHVs cHNfZXhpdCgpIC0gZXhpdCBVTFBTIG9uIHNwZWNpZmllZCBsYW5lcwotCSAqIEBwaHk6ICAgICAg ICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgaW5zdGFuY2UuCi0JICogQGNmZzogICAg ICAgICAgIFBlciBsYW5lIGNvbmZpZ3VyYXRpb25zIGZvciB0aW1pbmcsIHN0cmVuZ3RoIGFuZCBs YW5lCi0JICogICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLgotCSAqIEBsYW5lczogICAg ICAgICBPUmVkIGxpc3Qgb2YgbGFuZXMgKGVudW0gZHNpX2RhdGFfbGFuZXMpIHdoaWNoIG5lZWQK LQkgKiAgICAgICAgICAgICAgICAgdG8gZXhpdCBVTFBTLgotCSAqCi0JICogQ2FsbGVyIHNob3Vs ZCBjaGVjayBpZiBsYW5lcyBhcmUgaW4gYWN0aXZlIG1vZGUgYnkgY2FsbGluZwotCSAqIGdldF9s YW5lc19pbl91bHBzKCkgb3BlcmF0aW9uLgotCSAqLwotCXZvaWQgKCp1bHBzX2V4aXQpKHN0cnVj dCBkc2lfcGh5X2h3ICpwaHksCi0JCQlzdHJ1Y3QgZHNpX3BoeV9jZmcgKmNmZywgdTMyIGxhbmVz KTsKLQotCS8qKgotCSAqIGdldF9sYW5lc19pbl91bHBzKCkgLSByZXR1cm5zIHRoZSBsaXN0IG9m IGxhbmVzIGluIFVMUFMgbW9kZQotCSAqIEBwaHk6ICAgICAgICAgICBQb2ludGVyIHRvIERTSSBQ SFkgaGFyZHdhcmUgaW5zdGFuY2UuCi0JICoKLQkgKiBSZXR1cm5zIGFuIE9SZWQgbGlzdCBvZiBs YW5lcyAoZW51bSBkc2lfZGF0YV9sYW5lcykgdGhhdCBhcmUgaW4gVUxQUwotCSAqIHN0YXRlLgot CSAqCi0JICogUmV0dXJuOiBMaXN0IG9mIGxhbmVzIGluIFVMUFMgc3RhdGUuCi0JICovCi0JdTMy ICgqZ2V0X2xhbmVzX2luX3VscHMpKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHkpOwotCi0JLyoqCi0J ICogaXNfbGFuZXNfaW5fdWxwcygpIC0gY2hlY2tzIGlmIHRoZSBnaXZlbiBsYW5lcyBhcmUgaW4g dWxwcwotCSAqIEBsYW5lczogICAgICAgICAgIGxhbmVzIHRvIGJlIGNoZWNrZWQuCi0JICogQHVs cHNfbGFuZXM6CSAgIGxhbmVzIGluIHVscHMgY3VycmVubHkuCi0JICoKLQkgKiBSZXR1cm46IHRy dWUgaWYgYWxsIHRoZSBnaXZlbiBsYW5lcyBhcmUgaW4gdWxwczsgZmFsc2Ugb3RoZXJ3aXNlLgot CSAqLwotCWJvb2wgKCppc19sYW5lc19pbl91bHBzKSh1MzIgdWxwcywgdTMyIHVscHNfbGFuZXMp OwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX3BoeV9od19vcHMgLSBPcGVyYXRpb25zIGZvciBE U0kgUEhZIGhhcmR3YXJlLgotICogQHJlZ3VsYXRvcl9lbmFibGU6ICAgICAgICAgIEVuYWJsZSBQ SFkgcmVndWxhdG9ycy4KLSAqIEByZWd1bGF0b3JfZGlzYWJsZTogICAgICAgICBEaXNhYmxlIFBI WSByZWd1bGF0b3JzLgotICogQGVuYWJsZTogICAgICAgICAgICAgICAgICAgIEVuYWJsZSBQSFku Ci0gKiBAZGlzYWJsZTogICAgICAgICAgICAgICAgICAgRGlzYWJsZSBQSFkuCi0gKiBAY2FsY3Vs YXRlX3RpbWluZ19wYXJhbXM6ICAgQ2FsY3VsYXRlIFBIWSB0aW1pbmcgcGFyYW1zIGZyb20gbW9k ZSBpbmZvcm1hdGlvbgotICovCi1zdHJ1Y3QgZHNpX3BoeV9od19vcHMgewotCS8qKgotCSAqIHJl Z3VsYXRvcl9lbmFibGUoKSAtIGVuYWJsZSByZWd1bGF0b3JzIGZvciBEU0kgUEhZCi0JICogQHBo eTogICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgb2JqZWN0LgotCSAqIEByZWdfY2Zn OiAgUmVndWxhdG9yIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCBEU0kgbGFuZXMuCi0JICovCi0Jdm9p ZCAoKnJlZ3VsYXRvcl9lbmFibGUpKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0JCQkJIHN0cnVj dCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnJlZ19jZmcpOwotCi0JLyoqCi0JICogcmVndWxhdG9y X2Rpc2FibGUoKSAtIGRpc2FibGUgcmVndWxhdG9ycwotCSAqIEBwaHk6ICAgICAgUG9pbnRlciB0 byBEU0kgUEhZIGhhcmR3YXJlIG9iamVjdC4KLQkgKi8KLQl2b2lkICgqcmVndWxhdG9yX2Rpc2Fi bGUpKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHkpOwotCi0JLyoqCi0JICogZW5hYmxlKCkgLSBFbmFi bGUgUEhZIGhhcmR3YXJlCi0JICogQHBoeTogICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdh cmUgb2JqZWN0LgotCSAqIEBjZmc6ICAgICAgUGVyIGxhbmUgY29uZmlndXJhdGlvbnMgZm9yIHRp bWluZywgc3RyZW5ndGggYW5kIGxhbmUKLQkgKgkgICAgICBjb25maWd1cmF0aW9ucy4KLQkgKi8K LQl2b2lkICgqZW5hYmxlKShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LCBzdHJ1Y3QgZHNpX3BoeV9j ZmcgKmNmZyk7Ci0KLQkvKioKLQkgKiBkaXNhYmxlKCkgLSBEaXNhYmxlIFBIWSBoYXJkd2FyZQot CSAqIEBwaHk6ICAgICAgUG9pbnRlciB0byBEU0kgUEhZIGhhcmR3YXJlIG9iamVjdC4KLQkgKiBA Y2ZnOiAgICAgIFBlciBsYW5lIGNvbmZpZ3VyYXRpb25zIGZvciB0aW1pbmcsIHN0cmVuZ3RoIGFu ZCBsYW5lCi0JICoJICAgICAgY29uZmlndXJhdGlvbnMuCi0JICovCi0Jdm9pZCAoKmRpc2FibGUp KHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksIHN0cnVjdCBkc2lfcGh5X2NmZyAqY2ZnKTsKLQotCS8q KgotCSAqIHBoeV9pZGxlX29uKCkgLSBFbmFibGUgUEhZIGhhcmR3YXJlIHdoZW4gZW50ZXJpbmcg aWRsZSBzY3JlZW4KLQkgKiBAcGh5OiAgICAgIFBvaW50ZXIgdG8gRFNJIFBIWSBoYXJkd2FyZSBv YmplY3QuCi0JICogQGNmZzogICAgICBQZXIgbGFuZSBjb25maWd1cmF0aW9ucyBmb3IgdGltaW5n LCBzdHJlbmd0aCBhbmQgbGFuZQotCSAqCSAgICAgIGNvbmZpZ3VyYXRpb25zLgotCSAqLwotCXZv aWQgKCpwaHlfaWRsZV9vbikoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwgc3RydWN0IGRzaV9waHlf Y2ZnICpjZmcpOwotCi0JLyoqCi0JICogcGh5X2lkbGVfb2ZmKCkgLSBEaXNhYmxlIFBIWSBoYXJk d2FyZSB3aGVuIGV4aXRpbmcgaWRsZSBzY3JlZW4KLQkgKiBAcGh5OiAgICAgIFBvaW50ZXIgdG8g RFNJIFBIWSBoYXJkd2FyZSBvYmplY3QuCi0JICovCi0Jdm9pZCAoKnBoeV9pZGxlX29mZikoc3Ry dWN0IGRzaV9waHlfaHcgKnBoeSk7Ci0KLQkvKioKLQkgKiBjYWxjdWxhdGVfdGltaW5nX3BhcmFt cygpIC0gY2FsY3VsYXRlcyB0aW1pbmcgcGFyYW1ldGVycy4KLQkgKiBAcGh5OiAgICAgIFBvaW50 ZXIgdG8gRFNJIFBIWSBoYXJkd2FyZSBvYmplY3QuCi0JICogQG1vZGU6ICAgICBNb2RlIGluZm9y bWF0aW9uIGZvciB3aGljaCB0aW1pbmcgaGFzIHRvIGJlIGNhbGN1bGF0ZWQuCi0JICogQGNvbmZp ZzogICBEU0kgaG9zdCBjb25maWd1cmF0aW9uIGZvciB0aGlzIG1vZGUuCi0JICogQHRpbWluZzog ICBUaW1pbmcgcGFyYW1ldGVycyBmb3IgZWFjaCBsYW5lIHdoaWNoIHdpbGwgYmUgcmV0dXJuZWQu Ci0JICovCi0JaW50ICgqY2FsY3VsYXRlX3RpbWluZ19wYXJhbXMpKHN0cnVjdCBkc2lfcGh5X2h3 ICpwaHksCi0JCQkJICAgICAgIHN0cnVjdCBkc2lfbW9kZV9pbmZvICptb2RlLAotCQkJCSAgICAg ICBzdHJ1Y3QgZHNpX2hvc3RfY29tbW9uX2NmZyAqY29uZmlnLAotCQkJCSAgICAgICBzdHJ1Y3Qg ZHNpX3BoeV9wZXJfbGFuZV9jZmdzICp0aW1pbmcpOwotCi0JLyoqCi0JICogcGh5X3RpbWluZ192 YWwoKSAtIEdldHMgUEhZIHRpbWluZyB2YWx1ZXMuCi0JICogQHRpbWluZ192YWw6IFRpbWluZyBw YXJhbWV0ZXJzIGZvciBlYWNoIGxhbmUgd2hpY2ggd2lsbCBiZSByZXR1cm5lZC4KLQkgKiBAdGlt aW5nOiBBcnJheSBjb250YWluaW5nIFBIWSB0aW1pbmcgdmFsdWVzCi0JICogQHNpemU6IFNpemUg b2YgdGhlIGFycmF5Ci0JICovCi0JaW50ICgqcGh5X3RpbWluZ192YWwpKHN0cnVjdCBkc2lfcGh5 X3Blcl9sYW5lX2NmZ3MgKnRpbWluZ192YWwsCi0JCQkJdTMyICp0aW1pbmcsIHUzMiBzaXplKTsK LQotCXZvaWQgKnRpbWluZ19vcHM7Ci0Jc3RydWN0IHBoeV91bHBzX2NvbmZpZ19vcHMgdWxwc19v cHM7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkc2lfcGh5X2h3IC0gRFNJIHBoeSBoYXJkd2FyZSBv YmplY3Qgc3BlY2lmaWMgdG8gYW4gaW5zdGFuY2UKLSAqIEBiYXNlOiAgICAgICAgICAgICAgICAg IFZBIGZvciB0aGUgRFNJIFBIWSBiYXNlIGFkZHJlc3MuCi0gKiBAbGVuZ3RoOiAgICAgICAgICAg ICAgICBMZW5ndGggb2YgdGhlIERTSSBQSFkgcmVnaXN0ZXIgYmFzZSBtYXAuCi0gKiBAaW5kZXg6 ICAgICAgICAgICAgICAgICBJbnN0YW5jZSBJRCBvZiB0aGUgY29udHJvbGxlci4KLSAqIEB2ZXJz aW9uOiAgICAgICAgICAgICAgIERTSSBQSFkgdmVyc2lvbi4KLSAqIEBmZWF0dXJlX21hcDogICAg ICAgICAgIEZlYXR1cmVzIHN1cHBvcnRlZCBieSBEU0kgUEhZLgotICogQG9wczogICAgICAgICAg ICAgICAgICAgRnVuY3Rpb24gcG9pbnRlciB0byBQSFkgb3BlcmF0aW9ucy4KLSAqLwotc3RydWN0 IGRzaV9waHlfaHcgewotCXZvaWQgX19pb21lbSAqYmFzZTsKLQl1MzIgbGVuZ3RoOwotCXUzMiBp bmRleDsKLQotCWVudW0gZHNpX3BoeV92ZXJzaW9uIHZlcnNpb247Ci0KLQlERUNMQVJFX0JJVE1B UChmZWF0dXJlX21hcCwgRFNJX1BIWV9NQVhfRkVBVFVSRVMpOwotCXN0cnVjdCBkc2lfcGh5X2h3 X29wcyBvcHM7Ci19OwotCi0jZW5kaWYgLyogX0RTSV9QSFlfSFdfSF8gKi8KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV9od192Ml8wLmMgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfaHdfdjJfMC5jCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCBjZDU0NTgxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV9od192Ml8wLmMKKysrIC9kZXYvbnVsbApAQCAtMSwy NTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE4LCBUaGUgTGludXggRm91 bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNkZWZpbmUg cHJfZm10KGZtdCkgImRzaS1waHktaHc6IiBmbXQKLSNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4K LSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgImRzaV9ody5oIgotI2luY2x1ZGUg ImRzaV9waHlfaHcuaCIKLQotI2RlZmluZSBEU0lQSFlfQ01OX1JFVklTSU9OX0lEMCAgICAgICAg ICAgICAgICAgICAweDAwMDAKLSNkZWZpbmUgRFNJUEhZX0NNTl9SRVZJU0lPTl9JRDEgICAgICAg ICAgICAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIERTSVBIWV9DTU5fUkVWSVNJT05fSUQyICAgICAg ICAgICAgICAgICAgIDB4MDAwOAotI2RlZmluZSBEU0lQSFlfQ01OX1JFVklTSU9OX0lEMyAgICAg ICAgICAgICAgICAgICAweDAwMEMKLSNkZWZpbmUgRFNJUEhZX0NNTl9DTEtfQ0ZHMCAgICAgICAg ICAgICAgICAgICAgICAgMHgwMDEwCi0jZGVmaW5lIERTSVBIWV9DTU5fQ0xLX0NGRzEgICAgICAg ICAgICAgICAgICAgICAgIDB4MDAxNAotI2RlZmluZSBEU0lQSFlfQ01OX0dMQkxfVEVTVF9DVFJM ICAgICAgICAgICAgICAgICAweDAwMTgKLSNkZWZpbmUgRFNJUEhZX0NNTl9DVFJMXzAgICAgICAg ICAgICAgICAgICAgICAgICAgMHgwMDFDCi0jZGVmaW5lIERTSVBIWV9DTU5fQ1RSTF8xICAgICAg ICAgICAgICAgICAgICAgICAgIDB4MDAyMAotI2RlZmluZSBEU0lQSFlfQ01OX0NBTF9IV19UUklH R0VSICAgICAgICAgICAgICAgICAweDAwMjQKLSNkZWZpbmUgRFNJUEhZX0NNTl9DQUxfU1dfQ0ZH MCAgICAgICAgICAgICAgICAgICAgMHgwMDI4Ci0jZGVmaW5lIERTSVBIWV9DTU5fQ0FMX1NXX0NG RzEgICAgICAgICAgICAgICAgICAgIDB4MDAyQwotI2RlZmluZSBEU0lQSFlfQ01OX0NBTF9TV19D RkcyICAgICAgICAgICAgICAgICAgICAweDAwMzAKLSNkZWZpbmUgRFNJUEhZX0NNTl9DQUxfSFdf Q0ZHMCAgICAgICAgICAgICAgICAgICAgMHgwMDM0Ci0jZGVmaW5lIERTSVBIWV9DTU5fQ0FMX0hX X0NGRzEgICAgICAgICAgICAgICAgICAgIDB4MDAzOAotI2RlZmluZSBEU0lQSFlfQ01OX0NBTF9I V19DRkcyICAgICAgICAgICAgICAgICAgICAweDAwM0MKLSNkZWZpbmUgRFNJUEhZX0NNTl9DQUxf SFdfQ0ZHMyAgICAgICAgICAgICAgICAgICAgMHgwMDQwCi0jZGVmaW5lIERTSVBIWV9DTU5fQ0FM X0hXX0NGRzQgICAgICAgICAgICAgICAgICAgIDB4MDA0NAotI2RlZmluZSBEU0lQSFlfQ01OX1BM TF9DTlRSTCAgICAgICAgICAgICAgICAgICAgICAweDAwNDgKLSNkZWZpbmUgRFNJUEhZX0NNTl9M RE9fQ05UUkwgICAgICAgICAgICAgICAgICAgICAgMHgwMDRDCi0KLSNkZWZpbmUgRFNJUEhZX0NN Tl9SRUdVTEFUT1JfQ0FMX1NUQVRVUzAgICAgICAgICAgMHgwMDY0Ci0jZGVmaW5lIERTSVBIWV9D TU5fUkVHVUxBVE9SX0NBTF9TVEFUVVMxICAgICAgICAgIDB4MDA2OAotCi0vKiBuID0gMC4uMyBm b3IgZGF0YSBsYW5lcyBhbmQgbiA9IDQgZm9yIGNsb2NrIGxhbmUgKi8KLSNkZWZpbmUgRFNJUEhZ X0RMTlhfQ0ZHMChuKSAgICAgICAgICAgICAgICAgICAgICgweDEwMCArICgobikgKiAweDgwKSkK LSNkZWZpbmUgRFNJUEhZX0RMTlhfQ0ZHMShuKSAgICAgICAgICAgICAgICAgICAgICgweDEwNCAr ICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQ0ZHMihuKSAgICAgICAgICAgICAg ICAgICAgICgweDEwOCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQ0ZHMyhu KSAgICAgICAgICAgICAgICAgICAgICgweDEwQyArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJ UEhZX0RMTlhfVEVTVF9EQVRBUEFUSChuKSAgICAgICAgICAgICgweDExMCArICgobikgKiAweDgw KSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfVEVTVF9TVFIobikgICAgICAgICAgICAgICAgICgweDEx NCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfVElNSU5HX0NUUkxfNChuKSAg ICAgICAgICAgICgweDExOCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfVElN SU5HX0NUUkxfNShuKSAgICAgICAgICAgICgweDExQyArICgobikgKiAweDgwKSkKLSNkZWZpbmUg RFNJUEhZX0RMTlhfVElNSU5HX0NUUkxfNihuKSAgICAgICAgICAgICgweDEyMCArICgobikgKiAw eDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfVElNSU5HX0NUUkxfNyhuKSAgICAgICAgICAgICgw eDEyNCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfVElNSU5HX0NUUkxfOChu KSAgICAgICAgICAgICgweDEyOCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhf VElNSU5HX0NUUkxfOShuKSAgICAgICAgICAgICgweDEyQyArICgobikgKiAweDgwKSkKLSNkZWZp bmUgRFNJUEhZX0RMTlhfVElNSU5HX0NUUkxfMTAobikgICAgICAgICAgICgweDEzMCArICgobikg KiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfVElNSU5HX0NUUkxfMTEobikgICAgICAgICAg ICgweDEzNCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfU1RSRU5HVEhfQ1RS TF8wKG4pICAgICAgICAgICgweDEzOCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RM TlhfU1RSRU5HVEhfQ1RSTF8xKG4pICAgICAgICAgICgweDEzQyArICgobikgKiAweDgwKSkKLSNk ZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9QT0xZKG4pICAgICAgICAgICAgICAgICgweDE0MCArICgo bikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9TRUVEMChuKSAgICAgICAgICAg ICAgICgweDE0NCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9TRUVE MShuKSAgICAgICAgICAgICAgICgweDE0OCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZ X0RMTlhfQklTVF9IRUFEKG4pICAgICAgICAgICAgICAgICgweDE0QyArICgobikgKiAweDgwKSkK LSNkZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9TT1QobikgICAgICAgICAgICAgICAgICgweDE1MCAr ICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9DVFJMMChuKSAgICAgICAg ICAgICAgICgweDE1NCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9D VFJMMShuKSAgICAgICAgICAgICAgICgweDE1OCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJ UEhZX0RMTlhfQklTVF9DVFJMMihuKSAgICAgICAgICAgICAgICgweDE1QyArICgobikgKiAweDgw KSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9DVFJMMyhuKSAgICAgICAgICAgICAgICgweDE2 MCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfVlJFR19DTlRSTChuKSAgICAg ICAgICAgICAgICgweDE2NCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfSFNU WF9TVFJfU1RBVFVTKG4pICAgICAgICAgICgweDE2OCArICgobikgKiAweDgwKSkKLSNkZWZpbmUg RFNJUEhZX0RMTlhfQklTVF9TVEFUVVMwKG4pICAgICAgICAgICAgICgweDE2QyArICgobikgKiAw eDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9TVEFUVVMxKG4pICAgICAgICAgICAgICgw eDE3MCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9TVEFUVVMyKG4p ICAgICAgICAgICAgICgweDE3NCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhf QklTVF9TVEFUVVMzKG4pICAgICAgICAgICAgICgweDE3OCArICgobikgKiAweDgwKSkKLSNkZWZp bmUgRFNJUEhZX0RMTlhfTUlTUl9TVEFUVVMobikgICAgICAgICAgICAgICgweDE3QyArICgobikg KiAweDgwKSkKLQotI2RlZmluZSBEU0lQSFlfUExMX0NMS0JVRkxSX0VOICAgICAgICAgICAgICAg ICAgMHgwNDFDCi0jZGVmaW5lIERTSVBIWV9QTExfUExMX0JBTkRHQVAgICAgICAgICAgICAgICAg ICAweDA1MDgKLQotLyoqCi0gKiByZWd1bGF0b3JfZW5hYmxlKCkgLSBlbmFibGUgcmVndWxhdG9y cyBmb3IgRFNJIFBIWQotICogQHBoeTogICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUg b2JqZWN0LgotICogQHJlZ19jZmc6ICBSZWd1bGF0b3IgY29uZmlndXJhdGlvbiBmb3IgYWxsIERT SSBsYW5lcy4KLSAqLwotdm9pZCBkc2lfcGh5X2h3X3YyXzBfcmVndWxhdG9yX2VuYWJsZShzdHJ1 Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJCSAgICAgIHN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2Nm Z3MgKnJlZ19jZmcpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSBEU0lfTE9HSUNBTF9MQU5FXzA7 IGkgPCBEU0lfTEFORV9NQVg7IGkrKykKLQkJRFNJX1czMihwaHksIERTSVBIWV9ETE5YX1ZSRUdf Q05UUkwoaSksIHJlZ19jZmctPmxhbmVbaV1bMF0pOwotCi0JLyogbWFrZSBzdXJlIGFsbCB2YWx1 ZXMgYXJlIHdyaXR0ZW4gdG8gaGFyZHdhcmUgKi8KLQl3bWIoKTsKLQotCXByX2RlYnVnKCJbRFNJ XyVkXSBQaHkgcmVndWxhdG9ycyBlbmFibGVkXG4iLCBwaHktPmluZGV4KTsKLX0KLQotLyoqCi0g KiByZWd1bGF0b3JfZGlzYWJsZSgpIC0gZGlzYWJsZSByZWd1bGF0b3JzCi0gKiBAcGh5OiAgICAg IFBvaW50ZXIgdG8gRFNJIFBIWSBoYXJkd2FyZSBvYmplY3QuCi0gKi8KLXZvaWQgZHNpX3BoeV9o d192Ml8wX3JlZ3VsYXRvcl9kaXNhYmxlKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHkpCi17Ci0JcHJf ZGVidWcoIltEU0lfJWRdIFBoeSByZWd1bGF0b3JzIGRpc2FibGVkXG4iLCBwaHktPmluZGV4KTsK LX0KLQotLyoqCi0gKiBlbmFibGUoKSAtIEVuYWJsZSBQSFkgaGFyZHdhcmUKLSAqIEBwaHk6ICAg ICAgUG9pbnRlciB0byBEU0kgUEhZIGhhcmR3YXJlIG9iamVjdC4KLSAqIEBjZmc6ICAgICAgUGVy IGxhbmUgY29uZmlndXJhdGlvbnMgZm9yIHRpbWluZywgc3RyZW5ndGggYW5kIGxhbmUKLSAqCSAg ICAgIGNvbmZpZ3VyYXRpb25zLgotICovCi12b2lkIGRzaV9waHlfaHdfdjJfMF9lbmFibGUoc3Ry dWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCSAgICBzdHJ1Y3QgZHNpX3BoeV9jZmcgKmNmZykKLXsK LQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzICp0aW1pbmcgPSAmY2ZnLT50 aW1pbmc7Ci0JdTMyIGRhdGE7Ci0KLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9MRE9fQ05UUkws IDB4MUMpOwotCi0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fR0xCTF9URVNUX0NUUkwsIDB4MSk7 Ci0JZm9yIChpID0gRFNJX0xPR0lDQUxfTEFORV8wOyBpIDwgRFNJX0xBTkVfTUFYOyBpKyspIHsK LQotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RMTlhfQ0ZHMChpKSwgY2ZnLT5sYW5lY2ZnLmxhbmVb aV1bMF0pOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RMTlhfQ0ZHMShpKSwgY2ZnLT5sYW5lY2Zn LmxhbmVbaV1bMV0pOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RMTlhfQ0ZHMihpKSwgY2ZnLT5s YW5lY2ZnLmxhbmVbaV1bMl0pOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RMTlhfQ0ZHMyhpKSwg Y2ZnLT5sYW5lY2ZnLmxhbmVbaV1bM10pOwotCi0JCURTSV9XMzIocGh5LCBEU0lQSFlfRExOWF9U RVNUX1NUUihpKSwgMHg4OCk7Ci0KLQkJRFNJX1czMihwaHksIERTSVBIWV9ETE5YX1RJTUlOR19D VFJMXzQoaSksIHRpbWluZy0+bGFuZVtpXVswXSk7Ci0JCURTSV9XMzIocGh5LCBEU0lQSFlfRExO WF9USU1JTkdfQ1RSTF81KGkpLCB0aW1pbmctPmxhbmVbaV1bMV0pOwotCQlEU0lfVzMyKHBoeSwg RFNJUEhZX0RMTlhfVElNSU5HX0NUUkxfNihpKSwgdGltaW5nLT5sYW5lW2ldWzJdKTsKLQkJRFNJ X1czMihwaHksIERTSVBIWV9ETE5YX1RJTUlOR19DVFJMXzcoaSksIHRpbWluZy0+bGFuZVtpXVsz XSk7Ci0JCURTSV9XMzIocGh5LCBEU0lQSFlfRExOWF9USU1JTkdfQ1RSTF84KGkpLCB0aW1pbmct PmxhbmVbaV1bNF0pOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RMTlhfVElNSU5HX0NUUkxfOShp KSwgdGltaW5nLT5sYW5lW2ldWzVdKTsKLQkJRFNJX1czMihwaHksIERTSVBIWV9ETE5YX1RJTUlO R19DVFJMXzEwKGkpLCB0aW1pbmctPmxhbmVbaV1bNl0pOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZ X0RMTlhfVElNSU5HX0NUUkxfMTEoaSksIHRpbWluZy0+bGFuZVtpXVs3XSk7Ci0KLQkJRFNJX1cz MihwaHksIERTSVBIWV9ETE5YX1NUUkVOR1RIX0NUUkxfMChpKSwKLQkJCWNmZy0+c3RyZW5ndGgu bGFuZVtpXVswXSk7Ci0JCURTSV9XMzIocGh5LCBEU0lQSFlfRExOWF9TVFJFTkdUSF9DVFJMXzEo aSksCi0JCQljZmctPnN0cmVuZ3RoLmxhbmVbaV1bMV0pOwotCX0KLQotCS8qIG1ha2Ugc3VyZSBh bGwgdmFsdWVzIGFyZSB3cml0dGVuIHRvIGhhcmR3YXJlIGJlZm9yZSBlbmFibGluZyBwaHkgKi8K LQl3bWIoKTsKLQotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX0NUUkxfMSwgMHg4MCk7Ci0JdWRl bGF5KDEwMCk7Ci0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fQ1RSTF8xLCAweDAwKTsKLQotCWRh dGEgPSBEU0lfUjMyKHBoeSwgRFNJUEhZX0NNTl9HTEJMX1RFU1RfQ1RSTCk7Ci0KLQlzd2l0Y2gg KGNmZy0+cGxsX3NvdXJjZSkgewotCWNhc2UgRFNJX1BMTF9TT1VSQ0VfU1RBTkRBTE9ORToKLQkJ RFNJX1czMihwaHksIERTSVBIWV9QTExfQ0xLQlVGTFJfRU4sIDB4MDEpOwotCQlkYXRhICY9IH5C SVQoMik7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX1BMTF9TT1VSQ0VfTkFUSVZFOgotCQlEU0lfVzMy KHBoeSwgRFNJUEhZX1BMTF9DTEtCVUZMUl9FTiwgMHgwMyk7Ci0JCWRhdGEgJj0gfkJJVCgyKTsK LQkJYnJlYWs7Ci0JY2FzZSBEU0lfUExMX1NPVVJDRV9OT05fTkFUSVZFOgotCQlEU0lfVzMyKHBo eSwgRFNJUEhZX1BMTF9DTEtCVUZMUl9FTiwgMHgwMCk7Ci0JCWRhdGEgfD0gQklUKDIpOwotCQli cmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NN Tl9HTEJMX1RFU1RfQ1RSTCwgZGF0YSk7Ci0KLQkvKiBFbmFibGUgYmlhcyBjdXJyZW50IGZvciBw bGwxIGR1cmluZyBzcGxpdCBkaXNwbGF5IGNhc2UgKi8KLQlpZiAoY2ZnLT5wbGxfc291cmNlID09 IERTSV9QTExfU09VUkNFX05PTl9OQVRJVkUpCi0JCURTSV9XMzIocGh5LCBEU0lQSFlfUExMX1BM TF9CQU5ER0FQLCAweDMpOwotCi0JcHJfZGVidWcoIltEU0lfJWRdUGh5IGVuYWJsZWQgIiwgcGh5 LT5pbmRleCk7Ci19Ci0KLS8qKgotICogZGlzYWJsZSgpIC0gRGlzYWJsZSBQSFkgaGFyZHdhcmUK LSAqIEBwaHk6ICAgICAgUG9pbnRlciB0byBEU0kgUEhZIGhhcmR3YXJlIG9iamVjdC4KLSAqLwot dm9pZCBkc2lfcGh5X2h3X3YyXzBfZGlzYWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJ ICAgIHN0cnVjdCBkc2lfcGh5X2NmZyAqY2ZnKQotewotCURTSV9XMzIocGh5LCBEU0lQSFlfUExM X0NMS0JVRkxSX0VOLCAwKTsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9HTEJMX1RFU1RfQ1RS TCwgMCk7Ci0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fQ1RSTF8wLCAwKTsKLQlwcl9kZWJ1Zygi W0RTSV8lZF1QaHkgZGlzYWJsZWQgIiwgcGh5LT5pbmRleCk7Ci19Ci0KLS8qKgotICogZHNpX3Bo eV9od192Ml8wX2lkbGVfb24oKSAtIEVuYWJsZSBEU0kgUEhZIGhhcmR3YXJlIGR1cmluZyBpZGxl IHNjcmVlbgotICogQHBoeTogICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgb2JqZWN0 LgotICovCi12b2lkIGRzaV9waHlfaHdfdjJfMF9pZGxlX29uKHN0cnVjdCBkc2lfcGh5X2h3ICpw aHksIHN0cnVjdCBkc2lfcGh5X2NmZyAqY2ZnKQotewotCWludCBpID0gMDsKLQotCWZvciAoaSA9 IERTSV9MT0dJQ0FMX0xBTkVfMDsgaSA8IERTSV9MQU5FX01BWDsgaSsrKSB7Ci0JCURTSV9XMzIo cGh5LCBEU0lQSFlfRExOWF9TVFJFTkdUSF9DVFJMXzAoaSksCi0JCQljZmctPnN0cmVuZ3RoLmxh bmVbaV1bMF0pOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RMTlhfU1RSRU5HVEhfQ1RSTF8xKGkp LAotCQkJY2ZnLT5zdHJlbmd0aC5sYW5lW2ldWzFdKTsKLQl9Ci0Jd21iKCk7IC8qIG1ha2Ugc3Vy ZSB3cml0ZSBoYXBwZW5zICovCi0JcHJfZGVidWcoIltEU0lfJWRdUGh5IGVuYWJsZWQgb3V0IG9m IGlkbGUgc2NyZWVuXG4iLCBwaHktPmluZGV4KTsKLX0KLQotCi0vKioKLSAqIGRzaV9waHlfaHdf djJfMF9pZGxlX29mZigpIC0gRGlzYWJsZSBEU0kgUEhZIGhhcmR3YXJlIGR1cmluZyBpZGxlIHNj cmVlbgotICogQHBoeTogICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgb2JqZWN0Lgot ICovCi12b2lkIGRzaV9waHlfaHdfdjJfMF9pZGxlX29mZihzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5 KQotewotCWludCBpID0gMDsKLQotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX0NUUkxfMCwgMHg3 Zik7Ci0JZm9yIChpID0gRFNJX0xPR0lDQUxfTEFORV8wOyBpIDwgRFNJX0xBTkVfTUFYOyBpKysp Ci0JCURTSV9XMzIocGh5LCBEU0lQSFlfRExOWF9WUkVHX0NOVFJMKGkpLCAweDFjKTsKLQlEU0lf VzMyKHBoeSwgRFNJUEhZX0NNTl9MRE9fQ05UUkwsIDB4MUMpOwotCi0JZm9yIChpID0gRFNJX0xP R0lDQUxfTEFORV8wOyBpIDwgRFNJX0xBTkVfTUFYOyBpKyspCi0JCURTSV9XMzIocGh5LCBEU0lQ SFlfRExOWF9TVFJFTkdUSF9DVFJMXzEoaSksIDB4MCk7Ci0Jd21iKCk7IC8qIG1ha2Ugc3VyZSB3 cml0ZSBoYXBwZW5zICovCi0JcHJfZGVidWcoIltEU0lfJWRdUGh5IGRpc2FibGVkIGR1cmluZyBp ZGxlIHNjcmVlblxuIiwgcGh5LT5pbmRleCk7Ci19Ci0KLWludCBkc2lfcGh5X2h3X3RpbWluZ192 YWxfdjJfMChzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzICp0aW1pbmdfY2ZnLAotCQl1MzIg KnRpbWluZ192YWwsIHUzMiBzaXplKQotewotCWludCBpID0gMCwgaiA9IDA7Ci0KLQlpZiAoc2l6 ZSAhPSAoRFNJX0xBTkVfTUFYICogRFNJX01BWF9TRVRUSU5HUykpIHsKLQkJcHJfZXJyKCJVbmV4 cGVjdGVkIHRpbWluZyBhcnJheSBzaXplICVkXG4iLCBzaXplKTsKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0JfQotCi0JZm9yIChpID0gRFNJX0xPR0lDQUxfTEFORV8wOyBpIDwgRFNJX0xBTkVfTUFYOyBp KyspIHsKLQkJZm9yIChqID0gMDsgaiA8IERTSV9NQVhfU0VUVElOR1M7IGorKykgewotCQkJdGlt aW5nX2NmZy0+bGFuZVtpXVtqXSA9ICp0aW1pbmdfdmFsOwotCQkJdGltaW5nX3ZhbCsrOwotCQl9 Ci0JfQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kt c3RhZ2luZy9kc2lfcGh5X2h3X3YzXzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdp bmcvZHNpX3BoeV9od192M18wLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxZWFl NjguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5 X2h3X3YzXzAuYworKysgL2Rldi9udWxsCkBAIC0xLDQ0NyArMCwwIEBACi0vKgotICogQ29weXJp Z2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAy IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KSAiZHNpLXBoeS1odzoi IGZtdAotI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+ Ci0jaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+Ci0jaW5jbHVkZSAiZHNpX2h3LmgiCi0jaW5jbHVk ZSAiZHNpX3BoeV9ody5oIgotCi0jZGVmaW5lIERTSVBIWV9DTU5fQ0xLX0NGRzAJCQkJCQkweDAx MAotI2RlZmluZSBEU0lQSFlfQ01OX0NMS19DRkcxCQkJCQkJMHgwMTQKLSNkZWZpbmUgRFNJUEhZ X0NNTl9HTEJMX0NUUkwJCQkJCQkweDAxOAotI2RlZmluZSBEU0lQSFlfQ01OX1JCVUZfQ1RSTAkJ CQkJCTB4MDFDCi0jZGVmaW5lIERTSVBIWV9DTU5fVlJFR19DVFJMCQkJCQkJMHgwMjAKLSNkZWZp bmUgRFNJUEhZX0NNTl9DVFJMXzAJCQkJCQkweDAyNAotI2RlZmluZSBEU0lQSFlfQ01OX0NUUkxf MQkJCQkJCTB4MDI4Ci0jZGVmaW5lIERTSVBIWV9DTU5fQ1RSTF8yCQkJCQkJMHgwMkMKLSNkZWZp bmUgRFNJUEhZX0NNTl9MQU5FX0NGRzAJCQkJCQkweDAzMAotI2RlZmluZSBEU0lQSFlfQ01OX0xB TkVfQ0ZHMQkJCQkJCTB4MDM0Ci0jZGVmaW5lIERTSVBIWV9DTU5fUExMX0NOVFJMCQkJCQkJMHgw MzgKLSNkZWZpbmUgRFNJUEhZX0NNTl9MQU5FX0NUUkwwCQkJCQkJMHgwOTgKLSNkZWZpbmUgRFNJ UEhZX0NNTl9MQU5FX0NUUkwxCQkJCQkJMHgwOUMKLSNkZWZpbmUgRFNJUEhZX0NNTl9MQU5FX0NU UkwyCQkJCQkJMHgwQTAKLSNkZWZpbmUgRFNJUEhZX0NNTl9MQU5FX0NUUkwzCQkJCQkJMHgwQTQK LSNkZWZpbmUgRFNJUEhZX0NNTl9MQU5FX0NUUkw0CQkJCQkJMHgwQTgKLSNkZWZpbmUgRFNJUEhZ X0NNTl9USU1JTkdfQ1RSTF8wCQkJCQkweDBBQwotI2RlZmluZSBEU0lQSFlfQ01OX1RJTUlOR19D VFJMXzEJCQkJCTB4MEIwCi0jZGVmaW5lIERTSVBIWV9DTU5fVElNSU5HX0NUUkxfMgkJCQkJMHgw QjQKLSNkZWZpbmUgRFNJUEhZX0NNTl9USU1JTkdfQ1RSTF8zCQkJCQkweDBCOAotI2RlZmluZSBE U0lQSFlfQ01OX1RJTUlOR19DVFJMXzQJCQkJCTB4MEJDCi0jZGVmaW5lIERTSVBIWV9DTU5fVElN SU5HX0NUUkxfNQkJCQkJMHgwQzAKLSNkZWZpbmUgRFNJUEhZX0NNTl9USU1JTkdfQ1RSTF82CQkJ CQkweDBDNAotI2RlZmluZSBEU0lQSFlfQ01OX1RJTUlOR19DVFJMXzcJCQkJCTB4MEM4Ci0jZGVm aW5lIERTSVBIWV9DTU5fVElNSU5HX0NUUkxfOAkJCQkJMHgwQ0MKLSNkZWZpbmUgRFNJUEhZX0NN Tl9USU1JTkdfQ1RSTF85CQkJCQkweDBEMAotI2RlZmluZSBEU0lQSFlfQ01OX1RJTUlOR19DVFJM XzEwCQkJCQkweDBENAotI2RlZmluZSBEU0lQSFlfQ01OX1RJTUlOR19DVFJMXzExCQkJCQkweDBE OAotI2RlZmluZSBEU0lQSFlfQ01OX1BIWV9TVEFUVVMJCQkJCQkweDBFQwotI2RlZmluZSBEU0lQ SFlfQ01OX0xBTkVfU1RBVFVTMAkJCQkJCTB4MEY0Ci0jZGVmaW5lIERTSVBIWV9DTU5fTEFORV9T VEFUVVMxCQkJCQkJMHgwRjgKLQotCi0vKiBuID0gMC4uMyBmb3IgZGF0YSBsYW5lcyBhbmQgbiA9 IDQgZm9yIGNsb2NrIGxhbmUgKi8KLSNkZWZpbmUgRFNJUEhZX0xOWF9DRkcwKG4pICAgICAgICAg ICAgICAgICAgICAgICAgICgweDIwMCArICgweDgwICogKG4pKSkKLSNkZWZpbmUgRFNJUEhZX0xO WF9DRkcxKG4pICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwNCArICgweDgwICogKG4pKSkK LSNkZWZpbmUgRFNJUEhZX0xOWF9DRkcyKG4pICAgICAgICAgICAgICAgICAgICAgICAgICgweDIw OCArICgweDgwICogKG4pKSkKLSNkZWZpbmUgRFNJUEhZX0xOWF9DRkczKG4pICAgICAgICAgICAg ICAgICAgICAgICAgICgweDIwQyArICgweDgwICogKG4pKSkKLSNkZWZpbmUgRFNJUEhZX0xOWF9U RVNUX0RBVEFQQVRIKG4pICAgICAgICAgICAgICAgICgweDIxMCArICgweDgwICogKG4pKSkKLSNk ZWZpbmUgRFNJUEhZX0xOWF9QSU5fU1dBUChuKSAgICAgICAgICAgICAgICAgICAgICgweDIxNCAr ICgweDgwICogKG4pKSkKLSNkZWZpbmUgRFNJUEhZX0xOWF9IU1RYX1NUUl9DVFJMKG4pICAgICAg ICAgICAgICAgICgweDIxOCArICgweDgwICogKG4pKSkKLSNkZWZpbmUgRFNJUEhZX0xOWF9PRkZT RVRfVE9QX0NUUkwobikgICAgICAgICAgICAgICgweDIxQyArICgweDgwICogKG4pKSkKLSNkZWZp bmUgRFNJUEhZX0xOWF9PRkZTRVRfQk9UX0NUUkwobikgICAgICAgICAgICAgICgweDIyMCArICgw eDgwICogKG4pKSkKLSNkZWZpbmUgRFNJUEhZX0xOWF9MUFRYX1NUUl9DVFJMKG4pICAgICAgICAg ICAgICAgICgweDIyNCArICgweDgwICogKG4pKSkKLSNkZWZpbmUgRFNJUEhZX0xOWF9MUFJYX0NU UkwobikgICAgICAgICAgICAgICAgICAgICgweDIyOCArICgweDgwICogKG4pKSkKLSNkZWZpbmUg RFNJUEhZX0xOWF9UWF9EQ1RSTChuKSAgICAgICAgICAgICAgICAgICAgICgweDIyQyArICgweDgw ICogKG4pKSkKLQotc3RhdGljIGlubGluZSBpbnQgZHNpX2NvbnZfcGh5X3RvX2xvZ2ljYWxfbGFu ZSgKLQlzdHJ1Y3QgZHNpX2xhbmVfbWFwICpsYW5lX21hcCwgZW51bSBkc2lfcGh5X2RhdGFfbGFu ZXMgcGh5X2xhbmUpCi17Ci0JaW50IGkgPSAwOwotCi0JaWYgKHBoeV9sYW5lID4gRFNJX1BIWVNJ Q0FMX0xBTkVfMykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlmb3IgKGkgPSBEU0lfTE9HSUNBTF9M QU5FXzA7IGkgPCAoRFNJX0xBTkVfTUFYIC0gMSk7IGkrKykgewotCQlpZiAobGFuZV9tYXAtPmxh bmVfbWFwX3YyW2ldID09IHBoeV9sYW5lKQotCQkJYnJlYWs7Ci0JfQotCXJldHVybiBpOwotfQot Ci1zdGF0aWMgaW5saW5lIGludCBkc2lfY29udl9sb2dpY2FsX3RvX3BoeV9sYW5lKAotCXN0cnVj dCBkc2lfbGFuZV9tYXAgKmxhbmVfbWFwLCBlbnVtIGRzaV9sb2dpY2FsX2xhbmUgbGFuZSkKLXsK LQlpbnQgaSA9IDA7Ci0KLQlpZiAobGFuZSA+IChEU0lfTEFORV9NQVggLSAxKSkKLQkJcmV0dXJu IC1FSU5WQUw7Ci0KLQlmb3IgKGkgPSBEU0lfTE9HSUNBTF9MQU5FXzA7IGkgPCAoRFNJX0xBTkVf TUFYIC0gMSk7IGkrKykgewotCQlpZiAoQklUKGkpID09IGxhbmVfbWFwLT5sYW5lX21hcF92Mlts YW5lXSkKLQkJCWJyZWFrOwotCX0KLQlyZXR1cm4gaTsKLX0KLQotLyoqCi0gKiByZWd1bGF0b3Jf ZW5hYmxlKCkgLSBlbmFibGUgcmVndWxhdG9ycyBmb3IgRFNJIFBIWQotICogQHBoeTogICAgICBQ b2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgb2JqZWN0LgotICogQHJlZ19jZmc6ICBSZWd1bGF0 b3IgY29uZmlndXJhdGlvbiBmb3IgYWxsIERTSSBsYW5lcy4KLSAqLwotdm9pZCBkc2lfcGh5X2h3 X3YzXzBfcmVndWxhdG9yX2VuYWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJCSAgICAg IHN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnJlZ19jZmcpCi17Ci0JcHJfZGVidWcoIltE U0lfJWRdIFBoeSByZWd1bGF0b3JzIGVuYWJsZWRcbiIsIHBoeS0+aW5kZXgpOwotCS8qIE5vdGhp bmcgdG8gYmUgZG9uZSBmb3IgRFNJIFBIWSByZWd1bGF0b3IgZW5hYmxlICovCi19Ci0KLS8qKgot ICogcmVndWxhdG9yX2Rpc2FibGUoKSAtIGRpc2FibGUgcmVndWxhdG9ycwotICogQHBoeTogICAg ICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgb2JqZWN0LgotICovCi12b2lkIGRzaV9waHlf aHdfdjNfMF9yZWd1bGF0b3JfZGlzYWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5KQotewotCXBy X2RlYnVnKCJbRFNJXyVkXSBQaHkgcmVndWxhdG9ycyBkaXNhYmxlZFxuIiwgcGh5LT5pbmRleCk7 Ci0JLyogTm90aGluZyB0byBiZSBkb25lIGZvciBEU0kgUEhZIHJlZ3VsYXRvciBkaXNhYmxlICov Ci19Ci0KLQotc3RhdGljIGludCBkc2lfcGh5X2h3X3YzXzBfaXNfcGxsX29uKHN0cnVjdCBkc2lf cGh5X2h3ICpwaHkpCi17Ci0JdTMyIGRhdGEgPSAwOwotCi0JZGF0YSA9IERTSV9SMzIocGh5LCBE U0lQSFlfQ01OX1BMTF9DTlRSTCk7Ci0JbWIoKTsgLyptYWtlIHN1cmUgcmVhZCBoYXBwZW5lZCAq LwotCXJldHVybiAoZGF0YSAmIEJJVCgwKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzaV9waHlfaHdf djNfMF9jb25maWdfbHBjZHJ4KHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0Jc3RydWN0IGRzaV9w aHlfY2ZnICpjZmcsIGJvb2wgZW5hYmxlKQotewotCWludCBwaHlfbGFuZV8wID0gZHNpX2NvbnZf bG9naWNhbF90b19waHlfbGFuZSgmY2ZnLT5sYW5lX21hcCwKLQkJCURTSV9MT0dJQ0FMX0xBTkVf MCk7Ci0JLyoKLQkgKiBMUFJYIGFuZCBDRFJYIG5lZWQgdG8gZW5hYmxlZCBvbmx5IGZvciBwaHlz aWNhbCBkYXRhIGxhbmUKLQkgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb2dpY2FsIGRhdGEgbGFu ZSAwCi0JICovCi0KLQlpZiAoZW5hYmxlKQotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0xOWF9MUFJY X0NUUkwocGh5X2xhbmVfMCksCi0JCQljZmctPnN0cmVuZ3RoLmxhbmVbcGh5X2xhbmVfMF1bMV0p OwotCWVsc2UKLQkJRFNJX1czMihwaHksIERTSVBIWV9MTlhfTFBSWF9DVFJMKHBoeV9sYW5lXzAp LCAwKTsKLX0KLQotc3RhdGljIHZvaWQgZHNpX3BoeV9od192M18wX2xhbmVfc3dhcF9jb25maWco c3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJc3RydWN0IGRzaV9sYW5lX21hcCAqbGFuZV9tYXAp Ci17Ci0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fTEFORV9DRkcwLAotCQkobGFuZV9tYXAtPmxh bmVfbWFwX3YyW0RTSV9MT0dJQ0FMX0xBTkVfMF0gfAotCQkobGFuZV9tYXAtPmxhbmVfbWFwX3Yy W0RTSV9MT0dJQ0FMX0xBTkVfMV0gPDwgNCkpKTsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9M QU5FX0NGRzEsCi0JCShsYW5lX21hcC0+bGFuZV9tYXBfdjJbRFNJX0xPR0lDQUxfTEFORV8yXSB8 Ci0JCShsYW5lX21hcC0+bGFuZV9tYXBfdjJbRFNJX0xPR0lDQUxfTEFORV8zXSA8PCA0KSkpOwot fQotCi1zdGF0aWMgdm9pZCBkc2lfcGh5X2h3X3YzXzBfbGFuZV9zZXR0aW5ncyhzdHJ1Y3QgZHNp X3BoeV9odyAqcGh5LAotCQkJICAgIHN0cnVjdCBkc2lfcGh5X2NmZyAqY2ZnKQotewotCWludCBp OwotCXU4IHR4X2RjdHJsW10gPSB7MHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMX07Ci0KLQkv KiBTdHJlbmd0aCBjdHJsIHNldHRpbmdzICovCi0JZm9yIChpID0gRFNJX0xPR0lDQUxfTEFORV8w OyBpIDwgRFNJX0xBTkVfTUFYOyBpKyspIHsKLQkJRFNJX1czMihwaHksIERTSVBIWV9MTlhfTFBU WF9TVFJfQ1RSTChpKSwKLQkJCWNmZy0+c3RyZW5ndGgubGFuZVtpXVswXSk7Ci0JCS8qCi0JCSAq IERpc2FibGUgTFBSWCBhbmQgQ0RSWCBmb3IgYWxsIGxhbmVzLiBBbmQgbGF0ZXIgb24sIGl0IHdp bGwKLQkJICogYmUgb25seSBlbmFibGVkIGZvciB0aGUgcGh5c2ljYWwgZGF0YSBsYW5lIGNvcnJl c3BvbmRpbmcKLQkJICogdG8gdGhlIGxvZ2ljYWwgZGF0YSBsYW5lIDAKLQkJICovCi0JCURTSV9X MzIocGh5LCBEU0lQSFlfTE5YX0xQUlhfQ1RSTChpKSwgMCk7Ci0JCURTSV9XMzIocGh5LCBEU0lQ SFlfTE5YX1BJTl9TV0FQKGkpLCAweDApOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0xOWF9IU1RY X1NUUl9DVFJMKGkpLCAweDg4KTsKLQl9Ci0JZHNpX3BoeV9od192M18wX2NvbmZpZ19scGNkcngo cGh5LCBjZmcsIHRydWUpOwotCi0JLyogb3RoZXIgc2V0dGluZ3MgKi8KLQlmb3IgKGkgPSBEU0lf TE9HSUNBTF9MQU5FXzA7IGkgPCBEU0lfTEFORV9NQVg7IGkrKykgewotCQlEU0lfVzMyKHBoeSwg RFNJUEhZX0xOWF9DRkcwKGkpLCBjZmctPmxhbmVjZmcubGFuZVtpXVswXSk7Ci0JCURTSV9XMzIo cGh5LCBEU0lQSFlfTE5YX0NGRzEoaSksIGNmZy0+bGFuZWNmZy5sYW5lW2ldWzFdKTsKLQkJRFNJ X1czMihwaHksIERTSVBIWV9MTlhfQ0ZHMihpKSwgY2ZnLT5sYW5lY2ZnLmxhbmVbaV1bMl0pOwot CQlEU0lfVzMyKHBoeSwgRFNJUEhZX0xOWF9DRkczKGkpLCBjZmctPmxhbmVjZmcubGFuZVtpXVsz XSk7Ci0JCURTSV9XMzIocGh5LCBEU0lQSFlfTE5YX09GRlNFVF9UT1BfQ1RSTChpKSwgMHgwKTsK LQkJRFNJX1czMihwaHksIERTSVBIWV9MTlhfT0ZGU0VUX0JPVF9DVFJMKGkpLCAweDApOwotCQlE U0lfVzMyKHBoeSwgRFNJUEhZX0xOWF9UWF9EQ1RSTChpKSwgdHhfZGN0cmxbaV0pOwotCX0KLQot CS8qIFRvZ2dsZSBCSVQgMCB0byByZWxlYXNlIGZyZWV6ZSBJLzAgKi8KLQlEU0lfVzMyKHBoeSwg RFNJUEhZX0xOWF9UWF9EQ1RSTCgzKSwgMHgwNSk7Ci0JRFNJX1czMihwaHksIERTSVBIWV9MTlhf VFhfRENUUkwoMyksIDB4MDQpOwotfQotCi0vKioKLSAqIGVuYWJsZSgpIC0gRW5hYmxlIFBIWSBo YXJkd2FyZQotICogQHBoeTogICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgb2JqZWN0 LgotICogQGNmZzogICAgICBQZXIgbGFuZSBjb25maWd1cmF0aW9ucyBmb3IgdGltaW5nLCBzdHJl bmd0aCBhbmQgbGFuZQotICoJICAgICAgY29uZmlndXJhdGlvbnMuCi0gKi8KLXZvaWQgZHNpX3Bo eV9od192M18wX2VuYWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJICAgIHN0cnVjdCBk c2lfcGh5X2NmZyAqY2ZnKQotewotCWludCByYyA9IDA7Ci0JdTMyIHN0YXR1czsKLQl1MzIgY29u c3QgZGVsYXlfdXMgPSA1OwotCXUzMiBjb25zdCB0aW1lb3V0X3VzID0gMTAwMDsKLQlzdHJ1Y3Qg ZHNpX3BoeV9wZXJfbGFuZV9jZmdzICp0aW1pbmcgPSAmY2ZnLT50aW1pbmc7Ci0JdTMyIGRhdGE7 Ci0KLQlpZiAoZHNpX3BoeV9od192M18wX2lzX3BsbF9vbihwaHkpKQotCQlwcl93YXJuKCJQTEwg dHVybmVkIG9uIGJlZm9yZSBjb25maWd1cmluZyBQSFlcbiIpOwotCi0JLyogd2FpdCBmb3IgUkVG R0VOIFJFQURZICovCi0JcmMgPSByZWFkbF9wb2xsX3RpbWVvdXRfYXRvbWljKHBoeS0+YmFzZSAr IERTSVBIWV9DTU5fUEhZX1NUQVRVUywKLQkJc3RhdHVzLCAoc3RhdHVzICYgQklUKDApKSwgZGVs YXlfdXMsIHRpbWVvdXRfdXMpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlJlZiBnZW4gbm90IHJl YWR5LiBBYm9ydGluZ1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBkZS1hc3NlcnQgZGlnaXRh bCBhbmQgcGxsIHBvd2VyIGRvd24gKi8KLQlkYXRhID0gQklUKDYpIHwgQklUKDUpOwotCURTSV9X MzIocGh5LCBEU0lQSFlfQ01OX0NUUkxfMCwgZGF0YSk7Ci0KLQkvKiBBc3NlcnQgUExMIGNvcmUg cmVzZXQgKi8KLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9QTExfQ05UUkwsIDB4MDApOwotCi0J LyogdHVybiBvZmYgcmVzeW5jIEZJRk8gKi8KLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9SQlVG X0NUUkwsIDB4MDApOwotCi0JLyogU2VsZWN0IE1TMSBieXRlLWNsayAqLwotCURTSV9XMzIocGh5 LCBEU0lQSFlfQ01OX0dMQkxfQ1RSTCwgMHgxMCk7Ci0KLQkvKiBFbmFibGUgTERPICovCi0JRFNJ X1czMihwaHksIERTSVBIWV9DTU5fVlJFR19DVFJMLCAweDU5KTsKLQotCS8qIENvbmZpZ3VyZSBQ SFkgbGFuZSBzd2FwICovCi0JZHNpX3BoeV9od192M18wX2xhbmVfc3dhcF9jb25maWcocGh5LCAm Y2ZnLT5sYW5lX21hcCk7Ci0KLQkvKiBEU0kgUEhZIHRpbWluZ3MgKi8KLQlEU0lfVzMyKHBoeSwg RFNJUEhZX0NNTl9USU1JTkdfQ1RSTF8wLCB0aW1pbmctPmxhbmVfdjNbMF0pOwotCURTSV9XMzIo cGh5LCBEU0lQSFlfQ01OX1RJTUlOR19DVFJMXzEsIHRpbWluZy0+bGFuZV92M1sxXSk7Ci0JRFNJ X1czMihwaHksIERTSVBIWV9DTU5fVElNSU5HX0NUUkxfMiwgdGltaW5nLT5sYW5lX3YzWzJdKTsK LQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9USU1JTkdfQ1RSTF8zLCB0aW1pbmctPmxhbmVfdjNb M10pOwotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX1RJTUlOR19DVFJMXzQsIHRpbWluZy0+bGFu ZV92M1s0XSk7Ci0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fVElNSU5HX0NUUkxfNSwgdGltaW5n LT5sYW5lX3YzWzVdKTsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9USU1JTkdfQ1RSTF82LCB0 aW1pbmctPmxhbmVfdjNbNl0pOwotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX1RJTUlOR19DVFJM XzcsIHRpbWluZy0+bGFuZV92M1s3XSk7Ci0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fVElNSU5H X0NUUkxfOCwgdGltaW5nLT5sYW5lX3YzWzhdKTsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9U SU1JTkdfQ1RSTF85LCB0aW1pbmctPmxhbmVfdjNbOV0pOwotCURTSV9XMzIocGh5LCBEU0lQSFlf Q01OX1RJTUlOR19DVFJMXzEwLCB0aW1pbmctPmxhbmVfdjNbMTBdKTsKLQlEU0lfVzMyKHBoeSwg RFNJUEhZX0NNTl9USU1JTkdfQ1RSTF8xMSwgdGltaW5nLT5sYW5lX3YzWzExXSk7Ci0KLQkvKiBS ZW1vdmUgcG93ZXIgZG93biBmcm9tIGFsbCBibG9ja3MgKi8KLQlEU0lfVzMyKHBoeSwgRFNJUEhZ X0NNTl9DVFJMXzAsIDB4N2YpOwotCi0JLypwb3dlciB1cCBsYW5lcyAqLwotCWRhdGEgPSBEU0lf UjMyKHBoeSwgRFNJUEhZX0NNTl9DVFJMXzApOwotCS8qIFRPRE86IG9ubHkgcG93ZXIgdXAgbGFu ZXMgdGhhdCBhcmUgdXNlZCAqLwotCWRhdGEgfD0gMHgxRjsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZ X0NNTl9DVFJMXzAsIGRhdGEpOwotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX0xBTkVfQ1RSTDAs IDB4MUYpOwotCi0JLyogU2VsZWN0IGZ1bGwtcmF0ZSBtb2RlICovCi0JRFNJX1czMihwaHksIERT SVBIWV9DTU5fQ1RSTF8yLCAweDQwKTsKLQotCXN3aXRjaCAoY2ZnLT5wbGxfc291cmNlKSB7Ci0J Y2FzZSBEU0lfUExMX1NPVVJDRV9TVEFOREFMT05FOgotCWNhc2UgRFNJX1BMTF9TT1VSQ0VfTkFU SVZFOgotCQlkYXRhID0gMHgwOyAvKiBpbnRlcm5hbCBQTEwgKi8KLQkJYnJlYWs7Ci0JY2FzZSBE U0lfUExMX1NPVVJDRV9OT05fTkFUSVZFOgotCQlkYXRhID0gMHgxOyAvKiBleHRlcm5hbCBQTEwg Ki8KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCURTSV9XMzIocGh5LCBEU0lQ SFlfQ01OX0NMS19DRkcxLCAoZGF0YSA8PCAyKSk7IC8qIHNldCBQTEwgc3JjICovCi0KLQkvKiBE U0kgbGFuZSBzZXR0aW5ncyAqLwotCWRzaV9waHlfaHdfdjNfMF9sYW5lX3NldHRpbmdzKHBoeSwg Y2ZnKTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXVBoeSBlbmFibGVkICIsIHBoeS0+aW5kZXgpOwot fQotCi0vKioKLSAqIGRpc2FibGUoKSAtIERpc2FibGUgUEhZIGhhcmR3YXJlCi0gKiBAcGh5OiAg ICAgIFBvaW50ZXIgdG8gRFNJIFBIWSBoYXJkd2FyZSBvYmplY3QuCi0gKi8KLXZvaWQgZHNpX3Bo eV9od192M18wX2Rpc2FibGUoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCSAgICBzdHJ1Y3Qg ZHNpX3BoeV9jZmcgKmNmZykKLXsKLQl1MzIgZGF0YSA9IDA7Ci0KLQlpZiAoZHNpX3BoeV9od192 M18wX2lzX3BsbF9vbihwaHkpKQotCQlwcl93YXJuKCJUdXJuaW5nIE9GRiBQSFkgd2hpbGUgUExM IGlzIG9uXG4iKTsKLQotCWRzaV9waHlfaHdfdjNfMF9jb25maWdfbHBjZHJ4KHBoeSwgY2ZnLCBm YWxzZSk7Ci0KLQlkYXRhID0gRFNJX1IzMihwaHksIERTSVBIWV9DTU5fQ1RSTF8wKTsKLQkvKiBk aXNhYmxlIGFsbCBsYW5lcyAqLwotCWRhdGEgJj0gfjB4MUY7Ci0JRFNJX1czMihwaHksIERTSVBI WV9DTU5fQ1RSTF8wLCBkYXRhKTsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9MQU5FX0NUUkww LCAwKTsKLQotCS8qIFR1cm4gb2ZmIGFsbCBQSFkgYmxvY2tzICovCi0JRFNJX1czMihwaHksIERT SVBIWV9DTU5fQ1RSTF8wLCAweDAwKTsKLQkvKiBtYWtlIHN1cmUgcGh5IGlzIHR1cm5lZCBvZmYg Ki8KLQl3bWIoKTsKLQlwcl9kZWJ1ZygiW0RTSV8lZF1QaHkgZGlzYWJsZWQgIiwgcGh5LT5pbmRl eCk7Ci19Ci0KLWludCBkc2lfcGh5X2h3X3YzXzBfd2FpdF9mb3JfbGFuZV9pZGxlKAotCQlzdHJ1 Y3QgZHNpX3BoeV9odyAqcGh5LCB1MzIgbGFuZXMpCi17Ci0JaW50IHJjID0gMCwgdmFsID0gMDsK LQl1MzIgc3RvcF9zdGF0ZV9tYXNrID0gMDsKLQl1MzIgY29uc3Qgc2xlZXBfdXMgPSAxMDsKLQl1 MzIgY29uc3QgdGltZW91dF91cyA9IDEwMDsKLQotCXN0b3Bfc3RhdGVfbWFzayA9IEJJVCg0KTsg LyogY2xvY2sgbGFuZSAqLwotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMCkKLQkJc3RvcF9z dGF0ZV9tYXNrIHw9IEJJVCgwKTsKLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzEpCi0JCXN0 b3Bfc3RhdGVfbWFzayB8PSBCSVQoMSk7Ci0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8yKQot CQlzdG9wX3N0YXRlX21hc2sgfD0gQklUKDIpOwotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVf MykKLQkJc3RvcF9zdGF0ZV9tYXNrIHw9IEJJVCgzKTsKLQotCXByX2RlYnVnKCIlczogcG9sbGlu ZyBmb3IgbGFuZXMgdG8gYmUgaW4gc3RvcCBzdGF0ZSwgbWFzaz0weCUwOHhcbiIsCi0JCV9fZnVu Y19fLCBzdG9wX3N0YXRlX21hc2spOwotCXJjID0gcmVhZGxfcG9sbF90aW1lb3V0KHBoeS0+YmFz ZSArIERTSVBIWV9DTU5fTEFORV9TVEFUVVMxLCB2YWwsCi0JCQkodmFsID09IHN0b3Bfc3RhdGVf bWFzayksIHNsZWVwX3VzLCB0aW1lb3V0X3VzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCIlczog bGFuZXMgbm90IGluIHN0b3Agc3RhdGUsIExBTkVfU1RBVFVTPTB4JTA4eFxuIiwKLQkJCV9fZnVu Y19fLCB2YWwpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZHNp X3BoeV9od192M18wX3VscHNfcmVxdWVzdChzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQlzdHJ1 Y3QgZHNpX3BoeV9jZmcgKmNmZywgdTMyIGxhbmVzKQotewotCXUzMiByZWcgPSAwOwotCi0JaWYg KGxhbmVzICYgRFNJX0NMT0NLX0xBTkUpCi0JCXJlZyA9IEJJVCg0KTsKLQlpZiAobGFuZXMgJiBE U0lfREFUQV9MQU5FXzApCi0JCXJlZyB8PSBCSVQoMCk7Ci0JaWYgKGxhbmVzICYgRFNJX0RBVEFf TEFORV8xKQotCQlyZWcgfD0gQklUKDEpOwotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMikK LQkJcmVnIHw9IEJJVCgyKTsKLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzMpCi0JCXJlZyB8 PSBCSVQoMyk7Ci0KLQkvKgotCSAqIFVMUFMgZW50cnkgcmVxdWVzdC4gV2FpdCBmb3Igc2hvcnQg dGltZSB0byBtYWtlIHN1cmUKLQkgKiB0aGF0IHRoZSBsYW5lcyBlbnRlciBVTFBTLiBSZWNvbW1l bmRlZCBhcyBwZXIgSFBHLgotCSAqLwotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX0xBTkVfQ1RS TDEsIHJlZyk7Ci0JdXNsZWVwX3JhbmdlKDEwMCwgMTEwKTsKLQotCS8qIGRpc2FibGUgTFBSWCBh bmQgQ0RSWCAqLwotCWRzaV9waHlfaHdfdjNfMF9jb25maWdfbHBjZHJ4KHBoeSwgY2ZnLCBmYWxz ZSk7Ci0JLyogZGlzYWJsZSBsYW5lIExET3MgKi8KLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9W UkVHX0NUUkwsIDB4MTkpOwotCXByX2RlYnVnKCJbRFNJX1BIWSVkXSBVTFBTIHJlcXVlc3RlZCBm b3IgbGFuZXMgMHgleFxuIiwgcGh5LT5pbmRleCwKLQkJIGxhbmVzKTsKLX0KLQotdm9pZCBkc2lf cGh5X2h3X3YzXzBfdWxwc19leGl0KHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0JCQlzdHJ1Y3Qg ZHNpX3BoeV9jZmcgKmNmZywgdTMyIGxhbmVzKQotewotCXUzMiByZWcgPSAwOwotCi0JaWYgKGxh bmVzICYgRFNJX0NMT0NLX0xBTkUpCi0JCXJlZyA9IEJJVCg0KTsKLQlpZiAobGFuZXMgJiBEU0lf REFUQV9MQU5FXzApCi0JCXJlZyB8PSBCSVQoMCk7Ci0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFO RV8xKQotCQlyZWcgfD0gQklUKDEpOwotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMikKLQkJ cmVnIHw9IEJJVCgyKTsKLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzMpCi0JCXJlZyB8PSBC SVQoMyk7Ci0KLQkvKiBlbmFibGUgbGFuZSBMRE9zICovCi0JRFNJX1czMihwaHksIERTSVBIWV9D TU5fVlJFR19DVFJMLCAweDU5KTsKLQkvKiBlbmFibGUgTFBSWCBhbmQgQ0RSWCAqLwotCWRzaV9w aHlfaHdfdjNfMF9jb25maWdfbHBjZHJ4KHBoeSwgY2ZnLCB0cnVlKTsKLQotCS8qIFVMUFMgZXhp dCByZXF1ZXN0ICovCi0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fTEFORV9DVFJMMiwgcmVnKTsK LQl1c2xlZXBfcmFuZ2UoMTAwMCwgMTAxMCk7Ci0KLQkvKiBDbGVhciBVTFBTIHJlcXVlc3QgZmxh Z3Mgb24gYWxsIGxhbmVzICovCi0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fTEFORV9DVFJMMSwg MCk7Ci0JLyogQ2xlYXIgVUxQUyBleGl0IGZsYWdzIG9uIGFsbCBsYW5lcyAqLwotCURTSV9XMzIo cGh5LCBEU0lQSFlfQ01OX0xBTkVfQ1RSTDIsIDApOwotCi0JLyoKLQkgKiBTb21ldGltZXMgd2hl biBleGl0aW5nIFVMUFMsIGl0IGlzIHBvc3NpYmxlIHRoYXQgc29tZSBEU0kKLQkgKiBsYW5lcyBh cmUgbm90IGluIHRoZSBzdG9wIHN0YXRlIHdoaWNoIGNvdWxkIGxlYWQgdG8gRFNJCi0JICogY29t bWFuZHMgbm90IGdvaW5nIHRocm91Z2guIFRvIGF2b2lkIHRoaXMsIGZvcmNlIHRoZSBsYW5lcwot CSAqIHRvIGJlIGluIHN0b3Agc3RhdGUuCi0JICovCi0JRFNJX1czMihwaHksIERTSVBIWV9DTU5f TEFORV9DVFJMMywgcmVnKTsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9MQU5FX0NUUkwzLCAw KTsKLQl1c2xlZXBfcmFuZ2UoMTAwLCAxMTApOwotfQotCi11MzIgZHNpX3BoeV9od192M18wX2dl dF9sYW5lc19pbl91bHBzKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHkpCi17Ci0JdTMyIGxhbmVzID0g MDsKLQotCWxhbmVzID0gRFNJX1IzMihwaHksIERTSVBIWV9DTU5fTEFORV9TVEFUVVMwKTsKLQlw cl9kZWJ1ZygiW0RTSV9QSFklZF0gbGFuZXMgaW4gdWxwcyA9IDB4JXhcbiIsIHBoeS0+aW5kZXgs IGxhbmVzKTsKLQlyZXR1cm4gbGFuZXM7Ci19Ci0KLWJvb2wgZHNpX3BoeV9od192M18wX2lzX2xh bmVzX2luX3VscHModTMyIGxhbmVzLCB1MzIgdWxwc19sYW5lcykKLXsKLQlpZiAobGFuZXMgJiB1 bHBzX2xhbmVzKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotaW50IGRz aV9waHlfaHdfdGltaW5nX3ZhbF92M18wKHN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnRp bWluZ19jZmcsCi0JCXUzMiAqdGltaW5nX3ZhbCwgdTMyIHNpemUpCi17Ci0JaW50IGkgPSAwOwot Ci0JaWYgKHNpemUgIT0gRFNJX1BIWV9USU1JTkdfVjNfU0laRSkgewotCQlwcl9lcnIoIlVuZXhw ZWN0ZWQgdGltaW5nIGFycmF5IHNpemUgJWRcbiIsIHNpemUpOwotCQlyZXR1cm4gLUVJTlZBTDsK LQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotCQl0aW1pbmdfY2ZnLT5sYW5lX3Yz W2ldID0gdGltaW5nX3ZhbFtpXTsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfY2FsYy5jIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5X3RpbWluZ19jYWxjLmMKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDEzZmU2ZWMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJt L21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5X3RpbWluZ19jYWxjLmMKKysrIC9kZXYvbnVsbApAQCAt MSw2NzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXgg Rm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICog aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz aW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNkZWZp bmUgcHJfZm10KGZtdCkgImRzaS1waHktdGltaW5nOiIgZm10Ci0KLSNpbmNsdWRlICJkc2lfcGh5 X3RpbWluZ19jYWxjLmgiCi0KLXN0YXRpYyBjb25zdCB1MzIgYml0c19wZXJfcGl4ZWxbRFNJX1BJ WEVMX0ZPUk1BVF9NQVhdID0gewotCTE2LCAxOCwgMTgsIDI0LCAzLCA4LCAxMiB9OwotCi1zdGF0 aWMgaW50IGRzaV9waHlfY21uX3ZhbGlkYXRlX2FuZF9zZXQoc3RydWN0IHRpbWluZ19lbnRyeSAq dCwKLQljaGFyIGNvbnN0ICp0X25hbWUpCi17Ci0JaWYgKHQtPnJlYyAmIDB4ZmZmZmZmMDApIHsK LQkJLyogT3V0cHV0IHZhbHVlIGNhbiBvbmx5IGJlIDggYml0cyAqLwotCQlwcl9lcnIoIkluY29y cmVjdCAlcyByZWMgdmFsdWUgLSAlZFxuIiwgdF9uYW1lLCB0LT5yZWMpOwotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci0JdC0+cmVnX3ZhbHVlID0gdC0+cmVjOwotCXJldHVybiAwOwotfQotCi0vKioK LSAqIGNhbGNfY2xrX3ByZXBhcmUgLSBjYWxjdWxhdGVzIHByZXBhcmUgdGltaW5nIHBhcmFtcyBm b3IgY2xrIGxhbmUuCi0gKi8KLXN0YXRpYyBpbnQgY2FsY19jbGtfcHJlcGFyZShzdHJ1Y3QgZHNp X3BoeV9odyAqcGh5LAotCQkJCXN0cnVjdCBwaHlfY2xrX3BhcmFtcyAqY2xrX3BhcmFtcywKLQkJ CSAgICBzdHJ1Y3QgcGh5X3RpbWluZ19kZXNjICpkZXNjLAotCQkJICAgIHMzMiAqYWN0dWFsX2Zy YWMsCi0JCQkgICAgczY0ICphY3R1YWxfaW50ZXJtZWRpYXRlKQotewotCXU2NCBtdWx0aXBsaWVy ID0gQklUKDIwKTsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5ICp0ID0gJmRlc2MtPmNsa19wcmVwYXJl OwotCWludCByYyA9IDA7Ci0JdTY0IGRpdmlkZW5kLCB0ZW1wLCB0ZW1wX211bHRpcGxlOwotCXMz MiBmcmFjID0gMDsKLQlzNjQgaW50ZXJtZWRpYXRlOwotCXM2NCBjbGtfcHJlcF9hY3R1YWw7Ci0K LQlkaXZpZGVuZCA9ICgodC0+cmVjX21heCAtIHQtPnJlY19taW4pICoKLQkJY2xrX3BhcmFtcy0+ Y2xrX3ByZXBfYnVmICogbXVsdGlwbGllcik7Ci0JdGVtcCAgPSByb3VuZHVwKGRpdl9zNjQoZGl2 aWRlbmQsIDEwMCksIG11bHRpcGxpZXIpOwotCXRlbXAgKz0gKHQtPnJlY19taW4gKiBtdWx0aXBs aWVyKTsKLQl0LT5yZWMgPSBkaXZfczY0KHRlbXAsIG11bHRpcGxpZXIpOwotCi0JcmMgPSBkc2lf cGh5X2Ntbl92YWxpZGF0ZV9hbmRfc2V0KHQsICJjbGtfcHJlcGFyZSIpOwotCWlmIChyYykKLQkJ Z290byBlcnJvcjsKLQotCS8qIGNhbGN1bGF0ZSB0aGVvcmV0aWNhbCB2YWx1ZSAqLwotCXRlbXBf bXVsdGlwbGUgPSA4ICogdC0+cmVnX3ZhbHVlICogY2xrX3BhcmFtcy0+dGxweF9udW1lcl9ucwot CQkJICogbXVsdGlwbGllcjsKLQlpbnRlcm1lZGlhdGUgPSBkaXZfczY0KHRlbXBfbXVsdGlwbGUs IGNsa19wYXJhbXMtPmJpdGNsa19tYnBzKTsKLQlkaXZfczY0X3JlbSh0ZW1wX211bHRpcGxlLCBj bGtfcGFyYW1zLT5iaXRjbGtfbWJwcywgJmZyYWMpOwotCWNsa19wcmVwX2FjdHVhbCA9IGRpdl9z NjQoKGludGVybWVkaWF0ZSArIGZyYWMpLCBtdWx0aXBsaWVyKTsKLQotCXByX2RlYnVnKCJDTEtf UFJFUEFSRTptaXBpX21pbj0lZCwgbWlwaV9tYXg9JWQsIHJlY19taW49JWQsIHJlY19tYXg9JWQi LAotCQkgdC0+bWlwaV9taW4sIHQtPm1pcGlfbWF4LCB0LT5yZWNfbWluLCB0LT5yZWNfbWF4KTsK LQlwcl9kZWJ1ZygiIHJlZ192YWx1ZT0lZCwgYWN0dWFsPSVsbGRcbiIsIHQtPnJlZ192YWx1ZSwg Y2xrX3ByZXBfYWN0dWFsKTsKLQotCSphY3R1YWxfZnJhYyA9IGZyYWM7Ci0JKmFjdHVhbF9pbnRl cm1lZGlhdGUgPSBpbnRlcm1lZGlhdGU7Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotLyoq Ci0gKiBjYWxjX2Nsa196ZXJvIC0gY2FsY3VsYXRlcyB6ZXJvIHRpbWluZyBwYXJhbXMgZm9yIGNs ayBsYW5lLgotICovCi1zdGF0aWMgaW50IGNhbGNfY2xrX3plcm8oc3RydWN0IGRzaV9waHlfaHcg KnBoeSwKLQkJCXN0cnVjdCBwaHlfY2xrX3BhcmFtcyAqY2xrX3BhcmFtcywKLQkJCXN0cnVjdCBw aHlfdGltaW5nX2Rlc2MgKmRlc2MsCi0JCQlzMzIgYWN0dWFsX2ZyYWMsIHM2NCBhY3R1YWxfaW50 ZXJtZWRpYXRlKQotewotCXU2NCBjb25zdCBtdWx0aXBsaWVyID0gQklUKDIwKTsKLQlpbnQgcmMg PSAwOwotCXN0cnVjdCB0aW1pbmdfZW50cnkgKnQgPSAmZGVzYy0+Y2xrX3plcm87Ci0JczY0IG1p cGlfbWluLCByZWNfdGVtcDE7Ci0Jc3RydWN0IHBoeV90aW1pbmdfb3BzICpvcHMgPSBwaHktPm9w cy50aW1pbmdfb3BzOwotCi0JbWlwaV9taW4gPSAoKDMwMCAqIG11bHRpcGxpZXIpIC0gKGFjdHVh bF9pbnRlcm1lZGlhdGUgKyBhY3R1YWxfZnJhYykpOwotCXQtPm1pcGlfbWluID0gZGl2X3M2NCht aXBpX21pbiwgbXVsdGlwbGllcik7Ci0KLQlyZWNfdGVtcDEgPSBkaXZfczY0KChtaXBpX21pbiAq IGNsa19wYXJhbXMtPmJpdGNsa19tYnBzKSwKLQkJCSAgICBjbGtfcGFyYW1zLT50bHB4X251bWVy X25zKTsKLQotCWlmIChvcHMtPmNhbGNfY2xrX3plcm8pIHsKLQkJdC0+cmVjX21pbiA9IG9wcy0+ Y2FsY19jbGtfemVybyhyZWNfdGVtcDEsIG11bHRpcGxpZXIpOwotCX0gZWxzZSB7Ci0JCXJjID0g LUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0JdC0+cmVjX21heCA9ICgodC0+cmVjX21pbiA+ IDI1NSkgPyA1MTEgOiAyNTUpOwotCi0JdC0+cmVjID0gRElWX1JPVU5EX1VQKCgoKHQtPnJlY19t YXggLSB0LT5yZWNfbWluKSAqCi0JCWNsa19wYXJhbXMtPmNsa196ZXJvX2J1ZikgKyAodC0+cmVj X21pbiAqIDEwMCkpLCAxMDApOwotCi0JcmMgPSBkc2lfcGh5X2Ntbl92YWxpZGF0ZV9hbmRfc2V0 KHQsICJjbGtfemVybyIpOwotCWlmIChyYykKLQkJZ290byBlcnJvcjsKLQotCi0JcHJfZGVidWco IkNMS19aRVJPOm1pcGlfbWluPSVkLCBtaXBpX21heD0lZCwgcmVjX21pbj0lZCwgcmVjX21heD0l ZCwgcmVnX3ZhbD0lZFxuIiwKLQkJIHQtPm1pcGlfbWluLCB0LT5taXBpX21heCwgdC0+cmVjX21p biwgdC0+cmVjX21heCwKLQkJIHQtPnJlZ192YWx1ZSk7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19 Ci0KLS8qKgotICogY2FsY19jbGtfdHJhaWwgLSBjYWxjdWxhdGVzIHByZXBhcmUgdHJhaWwgcGFy YW1zIGZvciBjbGsgbGFuZS4KLSAqLwotc3RhdGljIGludCBjYWxjX2Nsa190cmFpbChzdHJ1Y3Qg ZHNpX3BoeV9odyAqcGh5LAotCQkJc3RydWN0IHBoeV9jbGtfcGFyYW1zICpjbGtfcGFyYW1zLAot CQkJc3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYywKLQkJCXM2NCAqdGVvdF9jbGtfbGFuZSkK LXsKLQl1NjQgY29uc3QgbXVsdGlwbGllciA9IEJJVCgyMCk7Ci0JaW50IHJjID0gMDsKLQlzdHJ1 Y3QgdGltaW5nX2VudHJ5ICp0ID0gJmRlc2MtPmNsa190cmFpbDsKLQl1NjQgdGVtcF9tdWx0aXBs ZTsKLQlzMzIgZnJhYzsKLQlzNjQgbWlwaV9tYXhfdHIsIHJlY190ZW1wMSwgbWlwaV9tYXg7Ci0J czY0IHRlb3RfY2xrX2xhbmUxOwotCXN0cnVjdCBwaHlfdGltaW5nX29wcyAqb3BzID0gcGh5LT5v cHMudGltaW5nX29wczsKLQotCXRlbXBfbXVsdGlwbGUgPSBkaXZfczY0KAotCQkJKDEyICogbXVs dGlwbGllciAqIGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpLAotCQkJY2xrX3BhcmFtcy0+Yml0 Y2xrX21icHMpOwotCWRpdl9zNjRfcmVtKHRlbXBfbXVsdGlwbGUsIG11bHRpcGxpZXIsICZmcmFj KTsKLQotCW1pcGlfbWF4X3RyID0gKCgxMDUgKiBtdWx0aXBsaWVyKSArCi0JCSAgICAgICAodGVt cF9tdWx0aXBsZSArIGZyYWMpKTsKLQl0ZW90X2Nsa19sYW5lMSA9IGRpdl9zNjQobWlwaV9tYXhf dHIsIG11bHRpcGxpZXIpOwotCi0JbWlwaV9tYXggPSAobWlwaV9tYXhfdHIgLSAoY2xrX3BhcmFt cy0+dHJlb3RfbnMgKiBtdWx0aXBsaWVyKSk7Ci0JdC0+bWlwaV9tYXggPSBkaXZfczY0KG1pcGlf bWF4LCBtdWx0aXBsaWVyKTsKLQotCXRlbXBfbXVsdGlwbGUgPSBkaXZfczY0KAotCQkJKHQtPm1p cGlfbWluICogbXVsdGlwbGllciAqIGNsa19wYXJhbXMtPmJpdGNsa19tYnBzKSwKLQkJCWNsa19w YXJhbXMtPnRscHhfbnVtZXJfbnMpOwotCi0JZGl2X3M2NF9yZW0odGVtcF9tdWx0aXBsZSwgbXVs dGlwbGllciwgJmZyYWMpOwotCWlmIChvcHMtPmNhbGNfY2xrX3RyYWlsX3JlY19taW4pIHsKLQkJ dC0+cmVjX21pbiA9IG9wcy0+Y2FsY19jbGtfdHJhaWxfcmVjX21pbih0ZW1wX211bHRpcGxlLAot CQkJZnJhYywgbXVsdGlwbGllcik7Ci0JfSBlbHNlIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3Rv IGVycm9yOwotCX0KLQotCS8qIHJlY29tbWVuZGVkIG1heCAqLwotCXJlY190ZW1wMSA9IGRpdl9z NjQoKG1pcGlfbWF4ICogY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpLAotCQkJICAgIGNsa19wYXJh bXMtPnRscHhfbnVtZXJfbnMpOwotCWlmIChvcHMtPmNhbGNfY2xrX3RyYWlsX3JlY19tYXgpIHsK LQkJdC0+cmVjX21heCA9IG9wcy0+Y2FsY19jbGtfdHJhaWxfcmVjX21heChyZWNfdGVtcDEsIG11 bHRpcGxpZXIpOwotCX0gZWxzZSB7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9 Ci0KLQl0LT5yZWMgPSBESVZfUk9VTkRfVVAoCi0JCSgoKHQtPnJlY19tYXggLSB0LT5yZWNfbWlu KSAqIGNsa19wYXJhbXMtPmNsa190cmFpbF9idWYpICsKLQkJICh0LT5yZWNfbWluICogMTAwKSks IDEwMCk7Ci0KLQlyYyA9IGRzaV9waHlfY21uX3ZhbGlkYXRlX2FuZF9zZXQodCwgImNsa190cmFp bCIpOwotCWlmIChyYykKLQkJZ290byBlcnJvcjsKLQotCSp0ZW90X2Nsa19sYW5lID0gdGVvdF9j bGtfbGFuZTE7Ci0JcHJfZGVidWcoIkNMS19UUkFJTDptaXBpX21pbj0lZCwgbWlwaV9tYXg9JWQs IHJlY19taW49JWQsIHJlY19tYXg9JWQsIHJlZ192YWw9JWRcbiIsCi0JCSB0LT5taXBpX21pbiwg dC0+bWlwaV9tYXgsIHQtPnJlY19taW4sIHQtPnJlY19tYXgsCi0JCSB0LT5yZWdfdmFsdWUpOwot Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci0KLX0KLQotLyoqCi0gKiBjYWxjX2hzX3ByZXBhcmUgLSBj YWxjdWxhdGVzIHByZXBhcmUgdGltaW5nIHBhcmFtcyBmb3IgZGF0YSBsYW5lcyBpbiBIUy4KLSAq Lwotc3RhdGljIGludCBjYWxjX2hzX3ByZXBhcmUoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJ CXN0cnVjdCBwaHlfY2xrX3BhcmFtcyAqY2xrX3BhcmFtcywKLQkJCXN0cnVjdCBwaHlfdGltaW5n X2Rlc2MgKmRlc2MsCi0JCQl1NjQgKnRlbXBfbXVsKQotewotCXU2NCBtdWx0aXBsaWVyID0gQklU KDIwKTsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCB0aW1pbmdfZW50cnkgKnQgPSAmZGVzYy0+aHNf cHJlcGFyZTsKLQl1NjQgdGVtcF9tdWx0aXBsZSwgZGl2aWRlbmQsIHRlbXA7Ci0JczMyIGZyYWM7 Ci0JczY0IHJlY190ZW1wMSwgcmVjX3RlbXAyLCBtaXBpX21heCwgbWlwaV9taW47Ci0JdTMyIGxv d19jbGtfbXVsdGlwbGllciA9IDA7Ci0KLQlpZiAoY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMgPD0g MTIwKQotCQlsb3dfY2xrX211bHRpcGxpZXIgPSAyOwotCS8qIG1pcGkgbWluICovCi0JdGVtcF9t dWx0aXBsZSA9IGRpdl9zNjQoKDQgKiBtdWx0aXBsaWVyICogY2xrX3BhcmFtcy0+dGxweF9udW1l cl9ucyksCi0JCQkJY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpOwotCWRpdl9zNjRfcmVtKHRlbXBf bXVsdGlwbGUsIG11bHRpcGxpZXIsICZmcmFjKTsKLQltaXBpX21pbiA9ICg0MCAqIG11bHRpcGxp ZXIpICsgKHRlbXBfbXVsdGlwbGUgKyBmcmFjKTsKLQl0LT5taXBpX21pbiA9IGRpdl9zNjQobWlw aV9taW4sIG11bHRpcGxpZXIpOwotCi0JLyogbWlwaV9tYXggKi8KLQl0ZW1wX211bHRpcGxlID0g ZGl2X3M2NCgKLQkJCSg2ICogbXVsdGlwbGllciAqIGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMp LAotCQkJY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpOwotCWRpdl9zNjRfcmVtKHRlbXBfbXVsdGlw bGUsIG11bHRpcGxpZXIsICZmcmFjKTsKLQltaXBpX21heCA9ICg4NSAqIG11bHRpcGxpZXIpICsg dGVtcF9tdWx0aXBsZTsKLQl0LT5taXBpX21heCA9IGRpdl9zNjQobWlwaV9tYXgsIG11bHRpcGxp ZXIpOwotCi0JLyogcmVjb21tZW5kZWQgbWluICovCi0JdGVtcF9tdWx0aXBsZSA9IGRpdl9zNjQo KG1pcGlfbWluICogY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpLAotCQkJCWNsa19wYXJhbXMtPnRs cHhfbnVtZXJfbnMpOwotCXRlbXBfbXVsdGlwbGUgLT0gKGxvd19jbGtfbXVsdGlwbGllciAqIG11 bHRpcGxpZXIpOwotCWRpdl9zNjRfcmVtKHRlbXBfbXVsdGlwbGUsIG11bHRpcGxpZXIsICZmcmFj KTsKLQlyZWNfdGVtcDEgPSByb3VuZHVwKCgodGVtcF9tdWx0aXBsZSArIGZyYWMpIC8gOCksIG11 bHRpcGxpZXIpOwotCXQtPnJlY19taW4gPSBkaXZfczY0KHJlY190ZW1wMSwgbXVsdGlwbGllcik7 Ci0KLQkvKiByZWNvbW1lbmRlZCBtYXggKi8KLQl0ZW1wX211bHRpcGxlID0gZGl2X3M2NCgobWlw aV9tYXggKiBjbGtfcGFyYW1zLT5iaXRjbGtfbWJwcyksCi0JCQkJY2xrX3BhcmFtcy0+dGxweF9u dW1lcl9ucyk7Ci0JdGVtcF9tdWx0aXBsZSAtPSAobG93X2Nsa19tdWx0aXBsaWVyICogbXVsdGlw bGllcik7Ci0JZGl2X3M2NF9yZW0odGVtcF9tdWx0aXBsZSwgbXVsdGlwbGllciwgJmZyYWMpOwot CXJlY190ZW1wMiA9IHJvdW5kZG93bigodGVtcF9tdWx0aXBsZSAvIDgpLCBtdWx0aXBsaWVyKTsK LQl0LT5yZWNfbWF4ID0gZGl2X3M2NChyZWNfdGVtcDIsIG11bHRpcGxpZXIpOwotCi0JLyogcmVn aXN0ZXIgdmFsdWUgKi8KLQlkaXZpZGVuZCA9ICgocmVjX3RlbXAyIC0gcmVjX3RlbXAxKSAqIGNs a19wYXJhbXMtPmhzX3ByZXBfYnVmKTsKLQl0ZW1wID0gcm91bmR1cChkaXZfdTY0KGRpdmlkZW5k LCAxMDApLCBtdWx0aXBsaWVyKTsKLQl0LT5yZWMgPSBkaXZfczY0KCh0ZW1wICsgcmVjX3RlbXAx KSwgbXVsdGlwbGllcik7Ci0KLQlyYyA9IGRzaV9waHlfY21uX3ZhbGlkYXRlX2FuZF9zZXQodCwg ImhzX3ByZXBhcmUiKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyb3I7Ci0KLQl0ZW1wX211bHRpcGxl ID0gZGl2X3M2NCgKLQkJCSg4ICogKHRlbXAgKyByZWNfdGVtcDEpICogY2xrX3BhcmFtcy0+dGxw eF9udW1lcl9ucyksCi0JCQljbGtfcGFyYW1zLT5iaXRjbGtfbWJwcyk7Ci0KLQkqdGVtcF9tdWwg PSB0ZW1wX211bHRpcGxlOwotCXByX2RlYnVnKCJIU19QUkVQOm1pcGlfbWluPSVkLCBtaXBpX21h eD0lZCwgcmVjX21pbj0lZCwgcmVjX21heD0lZCwgcmVnX3ZhbD0lZFxuIiwKLQkJIHQtPm1pcGlf bWluLCB0LT5taXBpX21heCwgdC0+cmVjX21pbiwgdC0+cmVjX21heCwKLQkJIHQtPnJlZ192YWx1 ZSk7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogY2FsY19oc196ZXJvIC0gY2Fs Y3VsYXRlcyB6ZXJvIHRpbWluZyBwYXJhbXMgZm9yIGRhdGEgbGFuZXMgaW4gSFMuCi0gKi8KLXN0 YXRpYyBpbnQgY2FsY19oc196ZXJvKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0JCQlzdHJ1Y3Qg cGh5X2Nsa19wYXJhbXMgKmNsa19wYXJhbXMsCi0JCQlzdHJ1Y3QgcGh5X3RpbWluZ19kZXNjICpk ZXNjLAotCQkJdTY0IHRlbXBfbXVsdGlwbGUpCi17Ci0JdTY0IGNvbnN0IG11bHRpcGxpZXIgPSBC SVQoMjApOwotCWludCByYyA9IDA7Ci0Jc3RydWN0IHRpbWluZ19lbnRyeSAqdCA9ICZkZXNjLT5o c196ZXJvOwotCXM2NCByZWNfdGVtcDEsIG1pcGlfbWluOwotCXN0cnVjdCBwaHlfdGltaW5nX29w cyAqb3BzID0gcGh5LT5vcHMudGltaW5nX29wczsKLQotCW1pcGlfbWluID0gZGl2X3M2NCgoMTAg KiBjbGtfcGFyYW1zLT50bHB4X251bWVyX25zICogbXVsdGlwbGllciksCi0JCQkgICBjbGtfcGFy YW1zLT5iaXRjbGtfbWJwcyk7Ci0JcmVjX3RlbXAxID0gKDE0NSAqIG11bHRpcGxpZXIpICsgbWlw aV9taW4gLSB0ZW1wX211bHRpcGxlOwotCXQtPm1pcGlfbWluID0gZGl2X3M2NChyZWNfdGVtcDEs IG11bHRpcGxpZXIpOwotCi0JLyogcmVjb21tZW5kZWQgbWluICovCi0JcmVjX3RlbXAxID0gZGl2 X3M2NCgocmVjX3RlbXAxICogY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpLAotCQkJICAgIGNsa19w YXJhbXMtPnRscHhfbnVtZXJfbnMpOwotCi0JaWYgKG9wcy0+Y2FsY19oc196ZXJvKSB7Ci0JCXQt PnJlY19taW4gPSBvcHMtPmNhbGNfaHNfemVybyhyZWNfdGVtcDEsIG11bHRpcGxpZXIpOwotCX0g ZWxzZSB7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQl0LT5yZWNfbWF4 ID0gKCh0LT5yZWNfbWluID4gMjU1KSA/IDUxMSA6IDI1NSk7Ci0JdC0+cmVjID0gRElWX1JPVU5E X1VQKAotCQkJKCgodC0+cmVjX21heCAtIHQtPnJlY19taW4pICogY2xrX3BhcmFtcy0+aHNfemVy b19idWYpICsKLQkJCSAodC0+cmVjX21pbiAqIDEwMCkpLAotCQkJMTAwKTsKLQotCXJjID0gZHNp X3BoeV9jbW5fdmFsaWRhdGVfYW5kX3NldCh0LCAiaHNfemVybyIpOwotCWlmIChyYykKLQkJZ290 byBlcnJvcjsKLQotCXByX2RlYnVnKCJIU19aRVJPOm1pcGlfbWluPSVkLCBtaXBpX21heD0lZCwg cmVjX21pbj0lZCwgcmVjX21heD0lZCwgcmVnX3ZhbD0lZFxuIiwKLQkJIHQtPm1pcGlfbWluLCB0 LT5taXBpX21heCwgdC0+cmVjX21pbiwgdC0+cmVjX21heCwKLQkJIHQtPnJlZ192YWx1ZSk7Ci0K LWVycm9yOgotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBjYWxjX2hzX3RyYWlsIC0gY2FsY3Vs YXRlcyB0cmFpbCB0aW1pbmcgcGFyYW1zIGZvciBkYXRhIGxhbmVzIGluIEhTLgotICovCi1zdGF0 aWMgaW50IGNhbGNfaHNfdHJhaWwoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCXN0cnVjdCBw aHlfY2xrX3BhcmFtcyAqY2xrX3BhcmFtcywKLQkJCXN0cnVjdCBwaHlfdGltaW5nX2Rlc2MgKmRl c2MsCi0JCQl1NjQgdGVvdF9jbGtfbGFuZSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCB0aW1p bmdfZW50cnkgKnQgPSAmZGVzYy0+aHNfdHJhaWw7Ci0JczY0IHJlY190ZW1wMTsKLQlzdHJ1Y3Qg cGh5X3RpbWluZ19vcHMgKm9wcyA9IHBoeS0+b3BzLnRpbWluZ19vcHM7Ci0KLQl0LT5taXBpX21p biA9IDYwICsKLQkJCW11bHRfZnJhYyhjbGtfcGFyYW1zLT50bHB4X251bWVyX25zLCA0LAotCQkJ CSAgY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpOwotCi0JdC0+bWlwaV9tYXggPSB0ZW90X2Nsa19s YW5lIC0gY2xrX3BhcmFtcy0+dHJlb3RfbnM7Ci0KLQlpZiAob3BzLT5jYWxjX2hzX3RyYWlsKSB7 Ci0JCW9wcy0+Y2FsY19oc190cmFpbChjbGtfcGFyYW1zLCBkZXNjKTsKLQl9IGVsc2UgewotCQly YyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmVjX3RlbXAxID0gRElWX1JPVU5E X1VQKAotCQkJKCh0LT5yZWNfbWF4IC0gdC0+cmVjX21pbikgKiBjbGtfcGFyYW1zLT5oc190cmFp bF9idWYpLAotCQkJMTAwKTsKLQl0LT5yZWMgPSByZWNfdGVtcDEgKyB0LT5yZWNfbWluOwotCi0J cmMgPSBkc2lfcGh5X2Ntbl92YWxpZGF0ZV9hbmRfc2V0KHQsICJoc190cmFpbCIpOwotCWlmIChy YykKLQkJZ290byBlcnJvcjsKLQotCXByX2RlYnVnKCJIU19UUkFJTDptaXBpX21pbj0lZCwgbWlw aV9tYXg9JWQsIHJlY19taW49JWQsIHJlY19tYXg9JWQsIHJlZ192YWw9JWRcbiIsCi0JCSB0LT5t aXBpX21pbiwgdC0+bWlwaV9tYXgsIHQtPnJlY19taW4sIHQtPnJlY19tYXgsCi0JCSB0LT5yZWdf dmFsdWUpOwotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogY2FsY19oc19ycXN0 IC0gY2FsY3VsYXRlcyBycXN0IHRpbWluZyBwYXJhbXMgZm9yIGRhdGEgbGFuZXMgaW4gSFMuCi0g Ki8KLXN0YXRpYyBpbnQgY2FsY19oc19ycXN0KHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0JCQlz dHJ1Y3QgcGh5X2Nsa19wYXJhbXMgKmNsa19wYXJhbXMsCi0JCQlzdHJ1Y3QgcGh5X3RpbWluZ19k ZXNjICpkZXNjKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IHRpbWluZ19lbnRyeSAqdCA9ICZk ZXNjLT5oc19ycXN0OwotCi0JdC0+cmVjID0gRElWX1JPVU5EX1VQKAotCQkoKHQtPm1pcGlfbWlu ICogY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpIC0KLQkJICg4ICogY2xrX3BhcmFtcy0+dGxweF9u dW1lcl9ucykpLAotCQkoOCAqIGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpKTsKLQotCXJjID0g ZHNpX3BoeV9jbW5fdmFsaWRhdGVfYW5kX3NldCh0LCAiaHNfcnFzdCIpOwotCWlmIChyYykKLQkJ Z290byBlcnJvcjsKLQotCXByX2RlYnVnKCJIU19SUVNUOm1pcGlfbWluPSVkLCBtaXBpX21heD0l ZCwgcmVjX21pbj0lZCwgcmVjX21heD0lZCwgcmVnX3ZhbD0lZFxuIiwKLQkJIHQtPm1pcGlfbWlu LCB0LT5taXBpX21heCwgdC0+cmVjX21pbiwgdC0+cmVjX21heCwKLQkJIHQtPnJlZ192YWx1ZSk7 Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBjYWxjX2hzX2V4aXQgLSBjYWxj dWxhdGVzIGV4aXQgdGltaW5nIHBhcmFtcyBmb3IgZGF0YSBsYW5lcyBpbiBIUy4KLSAqLwotc3Rh dGljIGludCBjYWxjX2hzX2V4aXQoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCXN0cnVjdCBw aHlfY2xrX3BhcmFtcyAqY2xrX3BhcmFtcywKLQkJCXN0cnVjdCBwaHlfdGltaW5nX2Rlc2MgKmRl c2MpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5ICp0ID0gJmRlc2MtPmhz X2V4aXQ7Ci0KLQl0LT5yZWNfbWluID0gKERJVl9ST1VORF9VUCgKLQkJCSh0LT5taXBpX21pbiAq IGNsa19wYXJhbXMtPmJpdGNsa19tYnBzKSwKLQkJCSg4ICogY2xrX3BhcmFtcy0+dGxweF9udW1l cl9ucykpIC0gMSk7Ci0KLQl0LT5yZWMgPSBESVZfUk9VTkRfVVAoCi0JCSgoKHQtPnJlY19tYXgg LSB0LT5yZWNfbWluKSAqIGNsa19wYXJhbXMtPmhzX2V4aXRfYnVmKSArCi0JCSAodC0+cmVjX21p biAqIDEwMCkpLCAxMDApOwotCi0JcmMgPSBkc2lfcGh5X2Ntbl92YWxpZGF0ZV9hbmRfc2V0KHQs ICJoc19leGl0Iik7Ci0JaWYgKHJjKQotCQlnb3RvIGVycm9yOwotCi0KLQlwcl9kZWJ1ZygiSFNf RVhJVDptaXBpX21pbj0lZCwgbWlwaV9tYXg9JWQsIHJlY19taW49JWQsIHJlY19tYXg9JWQsIHJl Z192YWw9JWRcbiIsCi0JCSB0LT5taXBpX21pbiwgdC0+bWlwaV9tYXgsIHQtPnJlY19taW4sIHQt PnJlY19tYXgsCi0JCSB0LT5yZWdfdmFsdWUpOwotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0K LS8qKgotICogY2FsY19oc19ycXN0X2NsayAtIGNhbGN1bGF0ZXMgcnFzdCB0aW1pbmcgcGFyYW1z IGZvciBjbG9jayBsYW5lLi4KLSAqLwotc3RhdGljIGludCBjYWxjX2hzX3Jxc3RfY2xrKHN0cnVj dCBkc2lfcGh5X2h3ICpwaHksCi0JCQlzdHJ1Y3QgcGh5X2Nsa19wYXJhbXMgKmNsa19wYXJhbXMs Ci0JCQlzdHJ1Y3QgcGh5X3RpbWluZ19kZXNjICpkZXNjKQotewotCWludCByYyA9IDA7Ci0Jc3Ry dWN0IHRpbWluZ19lbnRyeSAqdCA9ICZkZXNjLT5oc19ycXN0X2NsazsKLQotCXQtPnJlYyA9IERJ Vl9ST1VORF9VUCgKLQkJKCh0LT5taXBpX21pbiAqIGNsa19wYXJhbXMtPmJpdGNsa19tYnBzKSAt Ci0JCSAoOCAqIGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpKSwKLQkJKDggKiBjbGtfcGFyYW1z LT50bHB4X251bWVyX25zKSk7Ci0KLQlyYyA9IGRzaV9waHlfY21uX3ZhbGlkYXRlX2FuZF9zZXQo dCwgImhzX3Jxc3RfY2xrIik7Ci0JaWYgKHJjKQotCQlnb3RvIGVycm9yOwotCi0JcHJfZGVidWco IkhTX1JRU1RfQ0xLOm1pcGlfbWluPSVkLCBtaXBpX21heD0lZCwgcmVjX21pbj0lZCwgcmVjX21h eD0lZCwgcmVnX3ZhbD0lZFxuIiwKLQkJIHQtPm1pcGlfbWluLCB0LT5taXBpX21heCwgdC0+cmVj X21pbiwgdC0+cmVjX21heCwKLQkJIHQtPnJlZ192YWx1ZSk7Ci0KLWVycm9yOgotCXJldHVybiBy YzsKLX0KLQotLyoqCi0gKiBkc2lfcGh5X2NhbGNfdGltaW5nX3BhcmFtcyAtIGNhbGN1bGF0ZXMg dGltaW5nIHBhcmFtZXRzIGZvciBhIGdpdmVuIGJpdCBjbG9jawotICovCi1zdGF0aWMgaW50IGRz aV9waHlfY21uX2NhbGNfdGltaW5nX3BhcmFtcyhzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCXN0 cnVjdCBwaHlfY2xrX3BhcmFtcyAqY2xrX3BhcmFtcywgc3RydWN0IHBoeV90aW1pbmdfZGVzYyAq ZGVzYykKLXsKLQlpbnQgcmMgPSAwOwotCXMzMiBhY3R1YWxfZnJhYyA9IDA7Ci0JczY0IGFjdHVh bF9pbnRlcm1lZGlhdGUgPSAwOwotCXU2NCB0ZW1wX211bHRpcGxlOwotCXM2NCB0ZW90X2Nsa19s YW5lOwotCi0JcmMgPSBjYWxjX2Nsa19wcmVwYXJlKHBoeSwgY2xrX3BhcmFtcywgZGVzYywgJmFj dHVhbF9mcmFjLAotCQkJICAgICAgJmFjdHVhbF9pbnRlcm1lZGlhdGUpOwotCWlmIChyYykgewot CQlwcl9lcnIoImNsa19wcmVwYXJlIGNhbGN1bGF0aW9ucyBmYWlsZWQsIHJjPSVkXG4iLCByYyk7 Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBjYWxjX2Nsa196ZXJvKHBoeSwgY2xrX3BhcmFt cywgZGVzYywKLQkJYWN0dWFsX2ZyYWMsIGFjdHVhbF9pbnRlcm1lZGlhdGUpOwotCWlmIChyYykg ewotCQlwcl9lcnIoImNsa196ZXJvIGNhbGN1bGF0aW9ucyBmYWlsZWQsIHJjPSVkXG4iLCByYyk7 Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBjYWxjX2Nsa190cmFpbChwaHksIGNsa19wYXJh bXMsIGRlc2MsICZ0ZW90X2Nsa19sYW5lKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJjbGtfdHJh aWwgY2FsY3VsYXRpb25zIGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9 Ci0KLQlyYyA9IGNhbGNfaHNfcHJlcGFyZShwaHksIGNsa19wYXJhbXMsIGRlc2MsICZ0ZW1wX211 bHRpcGxlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJoc19wcmVwYXJlIGNhbGN1bGF0aW9ucyBm YWlsZWQsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBjYWxjX2hz X3plcm8ocGh5LCBjbGtfcGFyYW1zLCBkZXNjLCB0ZW1wX211bHRpcGxlKTsKLQlpZiAocmMpIHsK LQkJcHJfZXJyKCJoc196ZXJvIGNhbGN1bGF0aW9ucyBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Ci0J CWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBjYWxjX2hzX3RyYWlsKHBoeSwgY2xrX3BhcmFtcywg ZGVzYywgdGVvdF9jbGtfbGFuZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiaHNfdHJhaWwgY2Fs Y3VsYXRpb25zIGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQly YyA9IGNhbGNfaHNfcnFzdChwaHksIGNsa19wYXJhbXMsIGRlc2MpOwotCWlmIChyYykgewotCQlw cl9lcnIoImhzX3Jxc3QgY2FsY3VsYXRpb25zIGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKLQkJZ290 byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGNhbGNfaHNfZXhpdChwaHksIGNsa19wYXJhbXMsIGRlc2Mp OwotCWlmIChyYykgewotCQlwcl9lcnIoImhzX2V4aXQgY2FsY3VsYXRpb25zIGZhaWxlZCwgcmM9 JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGNhbGNfaHNfcnFzdF9jbGso cGh5LCBjbGtfcGFyYW1zLCBkZXNjKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJoc19ycXN0X2Ns ayBjYWxjdWxhdGlvbnMgZmFpbGVkLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0K LWVycm9yOgotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBjYWxjdWxhdGVfdGltaW5nX3BhcmFt cygpIC0gY2FsY3VsYXRlcyB0aW1pbmcgcGFyYW1ldGVycy4KLSAqIEBwaHk6ICAgICAgUG9pbnRl ciB0byBEU0kgUEhZIGhhcmR3YXJlIG9iamVjdC4KLSAqIEBtb2RlOiAgICAgTW9kZSBpbmZvcm1h dGlvbiBmb3Igd2hpY2ggdGltaW5nIGhhcyB0byBiZSBjYWxjdWxhdGVkLgotICogQGNvbmZpZzog ICBEU0kgaG9zdCBjb25maWd1cmF0aW9uIGZvciB0aGlzIG1vZGUuCi0gKiBAdGltaW5nOiAgIFRp bWluZyBwYXJhbWV0ZXJzIGZvciBlYWNoIGxhbmUgd2hpY2ggd2lsbCBiZSByZXR1cm5lZC4KLSAq LwotaW50IGRzaV9waHlfaHdfY2FsY3VsYXRlX3RpbWluZ19wYXJhbXMoc3RydWN0IGRzaV9waHlf aHcgKnBoeSwKLQkJCQkJICAgIHN0cnVjdCBkc2lfbW9kZV9pbmZvICptb2RlLAotCQkJCQkgICAg c3RydWN0IGRzaV9ob3N0X2NvbW1vbl9jZmcgKmhvc3QsCi0JCQkJCSAgIHN0cnVjdCBkc2lfcGh5 X3Blcl9sYW5lX2NmZ3MgKnRpbWluZykKLXsKLQkvKiBjb25zdGFudHMgKi8KLQl1MzIgY29uc3Qg ZXNjX2Nsa19taHogPSAxOTI7IC8qIFRPRE86IGVzYyBjbG9jayBpcyBoYXJkY29kZWQgKi8KLQl1 MzIgY29uc3QgZXNjX2Nsa19tbXNzX2NjX3ByZWRpdiA9IDEwOwotCXUzMiBjb25zdCB0bHB4X251 bWVyID0gMTAwMDsKLQl1MzIgY29uc3QgdHJfZW90ID0gMjA7Ci0JdTMyIGNvbnN0IGNsa19wcmVw YXJlX3NwZWNfbWluID0gMzg7Ci0JdTMyIGNvbnN0IGNsa19wcmVwYXJlX3NwZWNfbWF4ID0gOTU7 Ci0JdTMyIGNvbnN0IGNsa190cmFpbF9zcGVjX21pbiA9IDYwOwotCXUzMiBjb25zdCBoc19leGl0 X3NwZWNfbWluID0gMTAwOwotCXUzMiBjb25zdCBoc19leGl0X3JlY29fbWF4ID0gMjU1OwotCXUz MiBjb25zdCBoc19ycXN0X3NwZWNfbWluID0gNTA7Ci0KLQkvKiBsb2NhbCB2YXJzICovCi0JaW50 IHJjID0gMDsKLQl1MzIgaF90b3RhbCwgdl90b3RhbDsKLQl1NjQgaW50ZXJfbnVtOwotCXUzMiBu dW1fb2ZfbGFuZXMgPSAwOwotCXUzMiBicHA7Ci0JdTY0IHgsIHk7Ci0Jc3RydWN0IHBoeV90aW1p bmdfZGVzYyBkZXNjOwotCXN0cnVjdCBwaHlfY2xrX3BhcmFtcyBjbGtfcGFyYW1zID0gezB9Owot CXN0cnVjdCBwaHlfdGltaW5nX29wcyAqb3BzID0gcGh5LT5vcHMudGltaW5nX29wczsKLQotCW1l bXNldCgmZGVzYywgMHgwLCBzaXplb2YoZGVzYykpOwotCWhfdG90YWwgPSBEU0lfSF9UT1RBTCht b2RlKTsKLQl2X3RvdGFsID0gRFNJX1ZfVE9UQUwobW9kZSk7Ci0KLQlicHAgPSBiaXRzX3Blcl9w aXhlbFtob3N0LT5kc3RfZm9ybWF0XTsKLQotCWludGVyX251bSA9IGJwcCAqIG1vZGUtPnJlZnJl c2hfcmF0ZTsKLQotCWlmIChob3N0LT5kYXRhX2xhbmVzICYgRFNJX0RBVEFfTEFORV8wKQotCQlu dW1fb2ZfbGFuZXMrKzsKLQlpZiAoaG9zdC0+ZGF0YV9sYW5lcyAmIERTSV9EQVRBX0xBTkVfMSkK LQkJbnVtX29mX2xhbmVzKys7Ci0JaWYgKGhvc3QtPmRhdGFfbGFuZXMgJiBEU0lfREFUQV9MQU5F XzIpCi0JCW51bV9vZl9sYW5lcysrOwotCWlmIChob3N0LT5kYXRhX2xhbmVzICYgRFNJX0RBVEFf TEFORV8zKQotCQludW1fb2ZfbGFuZXMrKzsKLQotCi0JeCA9IG11bHRfZnJhYyh2X3RvdGFsICog aF90b3RhbCwgaW50ZXJfbnVtLCBudW1fb2ZfbGFuZXMpOwotCXkgPSByb3VuZGRvd24oeCwgMSk7 Ci0KLQljbGtfcGFyYW1zLmJpdGNsa19tYnBzID0gcm91bmRkb3duKG11bHRfZnJhYyh5LCAxLCAx MDAwMDAwKSwgMSk7Ci0JY2xrX3BhcmFtcy5lc2NjbGtfbnVtZXIgPSBlc2NfY2xrX21oejsKLQlj bGtfcGFyYW1zLmVzY2Nsa19kZW5vbSA9IGVzY19jbGtfbW1zc19jY19wcmVkaXY7Ci0JY2xrX3Bh cmFtcy50bHB4X251bWVyX25zID0gdGxweF9udW1lcjsKLQljbGtfcGFyYW1zLnRyZW90X25zID0g dHJfZW90OwotCi0KLQkvKiBTZXR1cCBkZWZhdWx0IHBhcmFtZXRlcnMgKi8KLQlkZXNjLmNsa19w cmVwYXJlLm1pcGlfbWluID0gY2xrX3ByZXBhcmVfc3BlY19taW47Ci0JZGVzYy5jbGtfcHJlcGFy ZS5taXBpX21heCA9IGNsa19wcmVwYXJlX3NwZWNfbWF4OwotCWRlc2MuY2xrX3RyYWlsLm1pcGlf bWluID0gY2xrX3RyYWlsX3NwZWNfbWluOwotCWRlc2MuaHNfZXhpdC5taXBpX21pbiA9IGhzX2V4 aXRfc3BlY19taW47Ci0JZGVzYy5oc19leGl0LnJlY19tYXggPSBoc19leGl0X3JlY29fbWF4Owot CWRlc2MuaHNfcnFzdC5taXBpX21pbiA9IGhzX3Jxc3Rfc3BlY19taW47Ci0JZGVzYy5oc19ycXN0 X2Nsay5taXBpX21pbiA9IGhzX3Jxc3Rfc3BlY19taW47Ci0KLQlpZiAob3BzLT5nZXRfZGVmYXVs dF9waHlfcGFyYW1zKSB7Ci0JCW9wcy0+Z2V0X2RlZmF1bHRfcGh5X3BhcmFtcygmY2xrX3BhcmFt cyk7Ci0JfSBlbHNlIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWRl c2MuY2xrX3ByZXBhcmUucmVjX21pbiA9IERJVl9ST1VORF9VUCgKLQkJCShkZXNjLmNsa19wcmVw YXJlLm1pcGlfbWluICogY2xrX3BhcmFtcy5iaXRjbGtfbWJwcyksCi0JCQkoOCAqIGNsa19wYXJh bXMudGxweF9udW1lcl9ucykKLQkJCSk7Ci0KLQlkZXNjLmNsa19wcmVwYXJlLnJlY19tYXggPSBy b3VuZGRvd24oCi0JCW11bHRfZnJhYygoZGVzYy5jbGtfcHJlcGFyZS5taXBpX21heCAqIGNsa19w YXJhbXMuYml0Y2xrX21icHMpLAotCQkJICAxLCAoOCAqIGNsa19wYXJhbXMudGxweF9udW1lcl9u cykpLAotCQkxKTsKLQotCXByX2RlYnVnKCJCSVQgQ0xPQ0sgPSAlZCwgdGxweF9udW1lcl9ucz0l ZCwgdHJlb3RfbnM9JWRcbiIsCi0JICAgICAgIGNsa19wYXJhbXMuYml0Y2xrX21icHMsIGNsa19w YXJhbXMudGxweF9udW1lcl9ucywKLQkgICAgICAgY2xrX3BhcmFtcy50cmVvdF9ucyk7Ci0JcmMg PSBkc2lfcGh5X2Ntbl9jYWxjX3RpbWluZ19wYXJhbXMocGh5LCAmY2xrX3BhcmFtcywgJmRlc2Mp OwotCWlmIChyYykgewotCQlwcl9lcnIoIlRpbWluZyBjYWxjIGZhaWxlZCwgcmM9JWRcbiIsIHJj KTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAob3BzLT51cGRhdGVfdGltaW5nX3BhcmFtcykg ewotCQlvcHMtPnVwZGF0ZV90aW1pbmdfcGFyYW1zKHRpbWluZywgJmRlc2MpOwotCX0gZWxzZSB7 Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVycm9yOgotCXJldHVybiBy YzsKLX0KLQotaW50IGRzaV9waHlfdGltaW5nX2NhbGNfaW5pdChzdHJ1Y3QgZHNpX3BoeV9odyAq cGh5LAotCQkJZW51bSBkc2lfcGh5X3ZlcnNpb24gdmVyc2lvbikKLXsKLQlzdHJ1Y3QgcGh5X3Rp bWluZ19vcHMgKm9wcyA9IE5VTEw7Ci0KLQlpZiAodmVyc2lvbiA9PSBEU0lfUEhZX1ZFUlNJT05f VU5LTk9XTiB8fAotCSAgICB2ZXJzaW9uID49IERTSV9QSFlfVkVSU0lPTl9NQVggfHwgIXBoeSkg ewotCQlwcl9lcnIoIlVuc3VwcG9ydGVkIHZlcnNpb246ICVkXG4iLCB2ZXJzaW9uKTsKLQkJcmV0 dXJuIC1FTk9UU1VQUDsKLQl9Ci0KLQlvcHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGh5X3Rp bWluZ19vcHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW9wcykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J cGh5LT5vcHMudGltaW5nX29wcyA9IG9wczsKLQotCXN3aXRjaCAodmVyc2lvbikgewotCWNhc2Ug RFNJX1BIWV9WRVJTSU9OXzJfMDoKLQkJb3BzLT5nZXRfZGVmYXVsdF9waHlfcGFyYW1zID0KLQkJ CWRzaV9waHlfaHdfdjJfMF9nZXRfZGVmYXVsdF9waHlfcGFyYW1zOwotCQlvcHMtPmNhbGNfY2xr X3plcm8gPQotCQkJZHNpX3BoeV9od192Ml8wX2NhbGNfY2xrX3plcm87Ci0JCW9wcy0+Y2FsY19j bGtfdHJhaWxfcmVjX21pbiA9Ci0JCQlkc2lfcGh5X2h3X3YyXzBfY2FsY19jbGtfdHJhaWxfcmVj X21pbjsKLQkJb3BzLT5jYWxjX2Nsa190cmFpbF9yZWNfbWF4ID0KLQkJCWRzaV9waHlfaHdfdjJf MF9jYWxjX2Nsa190cmFpbF9yZWNfbWF4OwotCQlvcHMtPmNhbGNfaHNfemVybyA9Ci0JCQlkc2lf cGh5X2h3X3YyXzBfY2FsY19oc196ZXJvOwotCQlvcHMtPmNhbGNfaHNfdHJhaWwgPQotCQkJZHNp X3BoeV9od192Ml8wX2NhbGNfaHNfdHJhaWw7Ci0JCW9wcy0+dXBkYXRlX3RpbWluZ19wYXJhbXMg PQotCQkJZHNpX3BoeV9od192Ml8wX3VwZGF0ZV90aW1pbmdfcGFyYW1zOwotCQlicmVhazsKLQlj YXNlIERTSV9QSFlfVkVSU0lPTl8zXzA6Ci0JCW9wcy0+Z2V0X2RlZmF1bHRfcGh5X3BhcmFtcyA9 Ci0JCQlkc2lfcGh5X2h3X3YzXzBfZ2V0X2RlZmF1bHRfcGh5X3BhcmFtczsKLQkJb3BzLT5jYWxj X2Nsa196ZXJvID0KLQkJCWRzaV9waHlfaHdfdjNfMF9jYWxjX2Nsa196ZXJvOwotCQlvcHMtPmNh bGNfY2xrX3RyYWlsX3JlY19taW4gPQotCQkJZHNpX3BoeV9od192M18wX2NhbGNfY2xrX3RyYWls X3JlY19taW47Ci0JCW9wcy0+Y2FsY19jbGtfdHJhaWxfcmVjX21heCA9Ci0JCQlkc2lfcGh5X2h3 X3YzXzBfY2FsY19jbGtfdHJhaWxfcmVjX21heDsKLQkJb3BzLT5jYWxjX2hzX3plcm8gPQotCQkJ ZHNpX3BoeV9od192M18wX2NhbGNfaHNfemVybzsKLQkJb3BzLT5jYWxjX2hzX3RyYWlsID0KLQkJ CWRzaV9waHlfaHdfdjNfMF9jYWxjX2hzX3RyYWlsOwotCQlvcHMtPnVwZGF0ZV90aW1pbmdfcGFy YW1zID0KLQkJCWRzaV9waHlfaHdfdjNfMF91cGRhdGVfdGltaW5nX3BhcmFtczsKLQkJYnJlYWs7 Ci0JY2FzZSBEU0lfUEhZX1ZFUlNJT05fMF8wX0hQTToKLQljYXNlIERTSV9QSFlfVkVSU0lPTl8w XzBfTFBNOgotCWNhc2UgRFNJX1BIWV9WRVJTSU9OXzFfMDoKLQlkZWZhdWx0OgotCQlrZnJlZShv cHMpOwotCQlyZXR1cm4gLUVOT1RTVVBQOwotCX0KLQotCXJldHVybiAwOwotfQotCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfdGltaW5nX2NhbGMu aCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfY2FsYy5o CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTIyNGZhLi4wMDAwMDAwCi0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfY2FsYy5oCisrKyAv ZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAx OCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K LSAqLwotCi0jaWZuZGVmIF9EU0lfUEhZX1RJTUlOR19DQUxDX0hfCi0jZGVmaW5lIF9EU0lfUEhZ X1RJTUlOR19DQUxDX0hfCi0KLSNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KLSNpbmNsdWRlIDxs aW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4 L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRt YXAuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotCi0jaW5jbHVkZSAiZHNpX2RlZnMuaCIK LSNpbmNsdWRlICJkc2lfcGh5X2h3LmgiCi0jaW5jbHVkZSAiZHNpX2NhdGFsb2cuaCIKLQotLyoq Ci0gKiBzdHJ1Y3QgdGltaW5nX2VudHJ5IC0gQ2FsY3VsYXRlZCB2YWx1ZXMgZm9yIGVhY2ggdGlt aW5nIHBhcmFtZXRlci4KLSAqIEBtaXBpX21pbjoKLSAqIEBtaXBpX21heDoKLSAqIEByZWNfbWlu OgotICogQHJlY19tYXg6Ci0gKiBAcmVjOgotICogQHJlZ192YWx1ZTogICAgICAgVmFsdWUgdG8g YmUgcHJvZ3JhbW1lZCBpbiByZWdpc3Rlci4KLSAqLwotc3RydWN0IHRpbWluZ19lbnRyeSB7Ci0J czMyIG1pcGlfbWluOwotCXMzMiBtaXBpX21heDsKLQlzMzIgcmVjX21pbjsKLQlzMzIgcmVjX21h eDsKLQlzMzIgcmVjOwotCXU4IHJlZ192YWx1ZTsKLX07Ci0KLS8qKgotICogc3RydWN0IHBoeV90 aW1pbmdfZGVzYyAtIFRpbWluZyBwYXJhbWV0ZXJzIGZvciBEU0kgUEhZLgotICovCi1zdHJ1Y3Qg cGh5X3RpbWluZ19kZXNjIHsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5IGNsa19wcmVwYXJlOwotCXN0 cnVjdCB0aW1pbmdfZW50cnkgY2xrX3plcm87Ci0Jc3RydWN0IHRpbWluZ19lbnRyeSBjbGtfdHJh aWw7Ci0Jc3RydWN0IHRpbWluZ19lbnRyeSBoc19wcmVwYXJlOwotCXN0cnVjdCB0aW1pbmdfZW50 cnkgaHNfemVybzsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5IGhzX3RyYWlsOwotCXN0cnVjdCB0aW1p bmdfZW50cnkgaHNfcnFzdDsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5IGhzX3Jxc3RfY2xrOwotCXN0 cnVjdCB0aW1pbmdfZW50cnkgaHNfZXhpdDsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5IHRhX2dvOwot CXN0cnVjdCB0aW1pbmdfZW50cnkgdGFfc3VyZTsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5IHRhX3Nl dDsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5IGNsa19wb3N0OwotCXN0cnVjdCB0aW1pbmdfZW50cnkg Y2xrX3ByZTsKLX07Ci0KLS8qKgotICogc3RydWN0IHBoeV9jbGtfcGFyYW1zIC0gQ2xvY2sgcGFy YW1ldGVycyBmb3IgUEhZIHRpbWluZyBjYWxjdWxhdGlvbnMuCi0gKi8KLXN0cnVjdCBwaHlfY2xr X3BhcmFtcyB7Ci0JdTMyIGJpdGNsa19tYnBzOwotCXUzMiBlc2NjbGtfbnVtZXI7Ci0JdTMyIGVz Y2Nsa19kZW5vbTsKLQl1MzIgdGxweF9udW1lcl9uczsKLQl1MzIgdHJlb3RfbnM7Ci0JdTMyIGNs a19wcmVwX2J1ZjsKLQl1MzIgY2xrX3plcm9fYnVmOwotCXUzMiBjbGtfdHJhaWxfYnVmOwotCXUz MiBoc19wcmVwX2J1ZjsKLQl1MzIgaHNfemVyb19idWY7Ci0JdTMyIGhzX3RyYWlsX2J1ZjsKLQl1 MzIgaHNfcnFzdF9idWY7Ci0JdTMyIGhzX2V4aXRfYnVmOwotfTsKLQotLyoqCi0gKiBWYXJpb3Vz IE9wcyBuZWVkZWQgZm9yIGF1dG8tY2FsY3VsYXRpb24gb2YgRFNJIFBIWSB0aW1pbmcgcGFyYW1l dGVycy4KLSAqLwotc3RydWN0IHBoeV90aW1pbmdfb3BzIHsKLQl2b2lkICgqZ2V0X2RlZmF1bHRf cGh5X3BhcmFtcykoc3RydWN0IHBoeV9jbGtfcGFyYW1zICpwYXJhbXMpOwotCi0JaW50MzJfdCAo KmNhbGNfY2xrX3plcm8pKHM2NCByZWNfdGVtcDEsIHM2NCBtdWx0KTsKLQotCWludDMyX3QgKCpj YWxjX2Nsa190cmFpbF9yZWNfbWluKShzNjQgdGVtcF9tdWwsCi0JCXM2NCBmcmFjLCBzNjQgbXVs dCk7Ci0KLQlpbnQzMl90ICgqY2FsY19jbGtfdHJhaWxfcmVjX21heCkoczY0IHRlbXAxLCBzNjQg bXVsdCk7Ci0KLQlpbnQzMl90ICgqY2FsY19oc196ZXJvKShzNjQgdGVtcDEsIHM2NCBtdWx0KTsK LQotCXZvaWQgKCpjYWxjX2hzX3RyYWlsKShzdHJ1Y3QgcGh5X2Nsa19wYXJhbXMgKmNsa19wYXJh bXMsCi0JCQlzdHJ1Y3QgcGh5X3RpbWluZ19kZXNjICpkZXNjKTsKLQotCXZvaWQgKCp1cGRhdGVf dGltaW5nX3BhcmFtcykoc3RydWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyAqdGltaW5nLAotCQlz dHJ1Y3QgcGh5X3RpbWluZ19kZXNjICpkZXNjKTsKLX07Ci0KLS8qIERTSSBQSFkgdGltaW5nIGZ1 bmN0aW9ucyBmb3IgMTRubSAqLwotdm9pZCBkc2lfcGh5X2h3X3YyXzBfZ2V0X2RlZmF1bHRfcGh5 X3BhcmFtcyhzdHJ1Y3QgcGh5X2Nsa19wYXJhbXMgKnBhcmFtcyk7Ci0KLWludDMyX3QgZHNpX3Bo eV9od192Ml8wX2NhbGNfY2xrX3plcm8oczY0IHJlY190ZW1wMSwgczY0IG11bHQpOwotCi1pbnQz Ml90IGRzaV9waHlfaHdfdjJfMF9jYWxjX2Nsa190cmFpbF9yZWNfbWluKHM2NCB0ZW1wX211bCwK LQkJczY0IGZyYWMsIHM2NCBtdWx0KTsKLQotaW50MzJfdCBkc2lfcGh5X2h3X3YyXzBfY2FsY19j bGtfdHJhaWxfcmVjX21heChzNjQgdGVtcDEsIHM2NCBtdWx0KTsKLQotaW50MzJfdCBkc2lfcGh5 X2h3X3YyXzBfY2FsY19oc196ZXJvKHM2NCB0ZW1wMSwgczY0IG11bHQpOwotCi12b2lkIGRzaV9w aHlfaHdfdjJfMF9jYWxjX2hzX3RyYWlsKHN0cnVjdCBwaHlfY2xrX3BhcmFtcyAqY2xrX3BhcmFt cywKLQkJc3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYyk7Ci0KLXZvaWQgZHNpX3BoeV9od192 Ml8wX3VwZGF0ZV90aW1pbmdfcGFyYW1zKHN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnRp bWluZywKLQkJc3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYyk7Ci0KLS8qIERTSSBQSFkgdGlt aW5nIGZ1bmN0aW9ucyBmb3IgMTBubSAqLwotdm9pZCBkc2lfcGh5X2h3X3YzXzBfZ2V0X2RlZmF1 bHRfcGh5X3BhcmFtcyhzdHJ1Y3QgcGh5X2Nsa19wYXJhbXMgKnBhcmFtcyk7Ci0KLWludDMyX3Qg ZHNpX3BoeV9od192M18wX2NhbGNfY2xrX3plcm8oczY0IHJlY190ZW1wMSwgczY0IG11bHQpOwot Ci1pbnQzMl90IGRzaV9waHlfaHdfdjNfMF9jYWxjX2Nsa190cmFpbF9yZWNfbWluKHM2NCB0ZW1w X211bCwKLQkJczY0IGZyYWMsIHM2NCBtdWx0KTsKLQotaW50MzJfdCBkc2lfcGh5X2h3X3YzXzBf Y2FsY19jbGtfdHJhaWxfcmVjX21heChzNjQgdGVtcDEsIHM2NCBtdWx0KTsKLQotaW50MzJfdCBk c2lfcGh5X2h3X3YzXzBfY2FsY19oc196ZXJvKHM2NCB0ZW1wMSwgczY0IG11bHQpOwotCi12b2lk IGRzaV9waHlfaHdfdjNfMF9jYWxjX2hzX3RyYWlsKHN0cnVjdCBwaHlfY2xrX3BhcmFtcyAqY2xr X3BhcmFtcywKLQkJc3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYyk7Ci0KLXZvaWQgZHNpX3Bo eV9od192M18wX3VwZGF0ZV90aW1pbmdfcGFyYW1zKHN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2Nm Z3MgKnRpbWluZywKLQkJc3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYyk7Ci0KLSNlbmRpZiAv KiBfRFNJX1BIWV9USU1JTkdfQ0FMQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5X3RpbWluZ192Ml8wLmMgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfdGltaW5nX3YyXzAuYwpkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggYTgxMzllMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rz aS1zdGFnaW5nL2RzaV9waHlfdGltaW5nX3YyXzAuYworKysgL2Rldi9udWxsCkBAIC0xLDEyNiAr MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0 aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh bmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2RlZmluZSBwcl9m bXQoZm10KSAiZHNpLXBoeS10aW1pbmc6IiBmbXQKLSNpbmNsdWRlICJkc2lfcGh5X3RpbWluZ19j YWxjLmgiCi0KLXZvaWQgZHNpX3BoeV9od192Ml8wX2dldF9kZWZhdWx0X3BoeV9wYXJhbXMoc3Ry dWN0IHBoeV9jbGtfcGFyYW1zICpwYXJhbXMpCi17Ci0JcGFyYW1zLT5jbGtfcHJlcF9idWYgPSA1 MDsKLQlwYXJhbXMtPmNsa196ZXJvX2J1ZiA9IDI7Ci0JcGFyYW1zLT5jbGtfdHJhaWxfYnVmID0g MzA7Ci0JcGFyYW1zLT5oc19wcmVwX2J1ZiA9IDUwOwotCXBhcmFtcy0+aHNfemVyb19idWYgPSAx MDsKLQlwYXJhbXMtPmhzX3RyYWlsX2J1ZiA9IDMwOwotCXBhcmFtcy0+aHNfcnFzdF9idWYgPSAw OwotCXBhcmFtcy0+aHNfZXhpdF9idWYgPSAxMDsKLX0KLQotaW50MzJfdCBkc2lfcGh5X2h3X3Yy XzBfY2FsY19jbGtfemVybyhzNjQgcmVjX3RlbXAxLCBzNjQgbXVsdCkKLXsKLQlzNjQgcmVjX3Rl bXAyLCByZWNfdGVtcDM7Ci0KLQlyZWNfdGVtcDIgPSAocmVjX3RlbXAxIC0gKDExICogbXVsdCkp OwotCXJlY190ZW1wMyA9IHJvdW5kdXAoZGl2X3M2NChyZWNfdGVtcDIsIDgpLCBtdWx0KTsKLQly ZXR1cm4gKGRpdl9zNjQocmVjX3RlbXAzLCBtdWx0KSAtIDMpOwotfQotCi1pbnQzMl90IGRzaV9w aHlfaHdfdjJfMF9jYWxjX2Nsa190cmFpbF9yZWNfbWluKHM2NCB0ZW1wX211bCwKLQkJczY0IGZy YWMsIHM2NCBtdWx0KQotewotCXM2NCByZWNfdGVtcDEsIHJlY190ZW1wMiwgcmVjX3RlbXAzOwot Ci0JcmVjX3RlbXAxID0gdGVtcF9tdWwgKyBmcmFjICsgKDMgKiBtdWx0KTsKLQlyZWNfdGVtcDIg PSBkaXZfczY0KHJlY190ZW1wMSwgOCk7Ci0JcmVjX3RlbXAzID0gcm91bmR1cChyZWNfdGVtcDIs IG11bHQpOwotCi0JcmV0dXJuIGRpdl9zNjQocmVjX3RlbXAzLCBtdWx0KTsKLX0KLQotaW50MzJf dCBkc2lfcGh5X2h3X3YyXzBfY2FsY19jbGtfdHJhaWxfcmVjX21heChzNjQgdGVtcDEsIHM2NCBt dWx0KQotewotCXM2NCByZWNfdGVtcDIsIHJlY190ZW1wMzsKLQotCXJlY190ZW1wMiA9IHRlbXAx ICsgKDMgKiBtdWx0KTsKLQlyZWNfdGVtcDMgPSByZWNfdGVtcDIgLyA4OwotCXJldHVybiBkaXZf czY0KHJlY190ZW1wMywgbXVsdCk7Ci0KLX0KLQotaW50MzJfdCBkc2lfcGh5X2h3X3YyXzBfY2Fs Y19oc196ZXJvKHM2NCB0ZW1wMSwgczY0IG11bHQpCi17Ci0JczY0IHJlY190ZW1wMiwgcmVjX3Rl bXAzLCByZWNfbWluOwotCi0JcmVjX3RlbXAyID0gdGVtcDEgLSAoMTEgKiBtdWx0KTsKLQlyZWNf dGVtcDMgPSByb3VuZHVwKChyZWNfdGVtcDIgLyA4KSwgbXVsdCk7Ci0JcmVjX21pbiA9IHJlY190 ZW1wMyAtICgzICogbXVsdCk7Ci0JcmV0dXJuIGRpdl9zNjQocmVjX21pbiwgbXVsdCk7Ci19Ci0K LXZvaWQgZHNpX3BoeV9od192Ml8wX2NhbGNfaHNfdHJhaWwoc3RydWN0IHBoeV9jbGtfcGFyYW1z ICpjbGtfcGFyYW1zLAotCQkJc3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYykKLXsKLQlzNjQg cmVjX3RlbXAxOwotCXN0cnVjdCB0aW1pbmdfZW50cnkgKnQgPSAmZGVzYy0+aHNfdHJhaWw7Ci0K LQl0LT5yZWNfbWluID0gRElWX1JPVU5EX1VQKAotCQkoKHQtPm1pcGlfbWluICogY2xrX3BhcmFt cy0+Yml0Y2xrX21icHMpICsKLQkJICgzICogY2xrX3BhcmFtcy0+dGxweF9udW1lcl9ucykpLAot CQkoOCAqIGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpKTsKLQotCXJlY190ZW1wMSA9ICgodC0+ bWlwaV9tYXggKiBjbGtfcGFyYW1zLT5iaXRjbGtfbWJwcykgKwotCQkgICAgICgzICogY2xrX3Bh cmFtcy0+dGxweF9udW1lcl9ucykpOwotCXQtPnJlY19tYXggPSAocmVjX3RlbXAxIC8gKDggKiBj bGtfcGFyYW1zLT50bHB4X251bWVyX25zKSk7Ci19Ci0KLXZvaWQgZHNpX3BoeV9od192Ml8wX3Vw ZGF0ZV90aW1pbmdfcGFyYW1zKAotCXN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnRpbWlu ZywKLQlzdHJ1Y3QgcGh5X3RpbWluZ19kZXNjICpkZXNjKQotewotCWludCBpID0gMDsKLQotCWZv ciAoaSA9IERTSV9MT0dJQ0FMX0xBTkVfMDsgaSA8IERTSV9MQU5FX01BWDsgaSsrKSB7Ci0JCXRp bWluZy0+bGFuZVtpXVswXSA9IGRlc2MtPmhzX2V4aXQucmVnX3ZhbHVlOwotCi0JCWlmIChpID09 IERTSV9MT0dJQ0FMX0NMT0NLX0xBTkUpCi0JCQl0aW1pbmctPmxhbmVbaV1bMV0gPSBkZXNjLT5j bGtfemVyby5yZWdfdmFsdWU7Ci0JCWVsc2UKLQkJCXRpbWluZy0+bGFuZVtpXVsxXSA9IGRlc2Mt PmhzX3plcm8ucmVnX3ZhbHVlOwotCi0JCWlmIChpID09IERTSV9MT0dJQ0FMX0NMT0NLX0xBTkUp Ci0JCQl0aW1pbmctPmxhbmVbaV1bMl0gPSBkZXNjLT5jbGtfcHJlcGFyZS5yZWdfdmFsdWU7Ci0J CWVsc2UKLQkJCXRpbWluZy0+bGFuZVtpXVsyXSA9IGRlc2MtPmhzX3ByZXBhcmUucmVnX3ZhbHVl OwotCi0JCWlmIChpID09IERTSV9MT0dJQ0FMX0NMT0NLX0xBTkUpCi0JCQl0aW1pbmctPmxhbmVb aV1bM10gPSBkZXNjLT5jbGtfdHJhaWwucmVnX3ZhbHVlOwotCQllbHNlCi0JCQl0aW1pbmctPmxh bmVbaV1bM10gPSBkZXNjLT5oc190cmFpbC5yZWdfdmFsdWU7Ci0KLQkJaWYgKGkgPT0gRFNJX0xP R0lDQUxfQ0xPQ0tfTEFORSkKLQkJCXRpbWluZy0+bGFuZVtpXVs0XSA9IGRlc2MtPmhzX3Jxc3Rf Y2xrLnJlZ192YWx1ZTsKLQkJZWxzZQotCQkJdGltaW5nLT5sYW5lW2ldWzRdID0gZGVzYy0+aHNf cnFzdC5yZWdfdmFsdWU7Ci0KLQkJdGltaW5nLT5sYW5lW2ldWzVdID0gMHgzOwotCQl0aW1pbmct PmxhbmVbaV1bNl0gPSAweDQ7Ci0JCXRpbWluZy0+bGFuZVtpXVs3XSA9IDB4QTA7Ci0JCXByX2Rl YnVnKCJbJWRdWyVkICVkICVkICVkICVkXVxuIiwgaSwgdGltaW5nLT5sYW5lW2ldWzBdLAotCQkJ CQkJICAgIHRpbWluZy0+bGFuZVtpXVsxXSwKLQkJCQkJCSAgICB0aW1pbmctPmxhbmVbaV1bMl0s Ci0JCQkJCQkgICAgdGltaW5nLT5sYW5lW2ldWzNdLAotCQkJCQkJICAgIHRpbWluZy0+bGFuZVtp XVs0XSk7Ci0JfQotCXRpbWluZy0+Y291bnRfcGVyX2xhbmUgPSA4OwotfQotCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfdGltaW5nX3YzXzAuYyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfdjNfMC5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDZiM2NkLi4wMDAwMDAwCi0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfdjNfMC5jCisrKyAvZGV2 L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwg VGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq LwotCi0jZGVmaW5lIHByX2ZtdChmbXQpICJkc2ktcGh5LXRpbWluZzoiIGZtdAotI2luY2x1ZGUg ImRzaV9waHlfdGltaW5nX2NhbGMuaCIKLQotdm9pZCBkc2lfcGh5X2h3X3YzXzBfZ2V0X2RlZmF1 bHRfcGh5X3BhcmFtcygKLQkJc3RydWN0IHBoeV9jbGtfcGFyYW1zICpwYXJhbXMpCi17Ci0JcGFy YW1zLT5jbGtfcHJlcF9idWYgPSAwOwotCXBhcmFtcy0+Y2xrX3plcm9fYnVmID0gMDsKLQlwYXJh bXMtPmNsa190cmFpbF9idWYgPSAwOwotCXBhcmFtcy0+aHNfcHJlcF9idWYgPSAwOwotCXBhcmFt cy0+aHNfemVyb19idWYgPSAwOwotCXBhcmFtcy0+aHNfdHJhaWxfYnVmID0gMDsKLQlwYXJhbXMt PmhzX3Jxc3RfYnVmID0gMDsKLQlwYXJhbXMtPmhzX2V4aXRfYnVmID0gMDsKLX0KLQotaW50MzJf dCBkc2lfcGh5X2h3X3YzXzBfY2FsY19jbGtfemVybyhzNjQgcmVjX3RlbXAxLCBzNjQgbXVsdCkK LXsKLQlzNjQgcmVjX3RlbXAyLCByZWNfdGVtcDM7Ci0KLQlyZWNfdGVtcDIgPSAocmVjX3RlbXAx IC0gbXVsdCk7Ci0JcmVjX3RlbXAzID0gcm91bmR1cChkaXZfczY0KHJlY190ZW1wMiwgOCksIG11 bHQpOwotCXJldHVybiAoZGl2X3M2NChyZWNfdGVtcDMsIG11bHQpIC0gMSk7Ci19Ci0KLWludDMy X3QgZHNpX3BoeV9od192M18wX2NhbGNfY2xrX3RyYWlsX3JlY19taW4oczY0IHRlbXBfbXVsLAot CQlzNjQgZnJhYywgczY0IG11bHQpCi17Ci0JczY0IHJlY190ZW1wMSwgcmVjX3RlbXAyLCByZWNf dGVtcDM7Ci0KLQlyZWNfdGVtcDEgPSB0ZW1wX211bCArIGZyYWM7Ci0JcmVjX3RlbXAyID0gZGl2 X3M2NChyZWNfdGVtcDEsIDgpOwotCXJlY190ZW1wMyA9IHJvdW5kdXAocmVjX3RlbXAyLCBtdWx0 KTsKLQlyZXR1cm4gKGRpdl9zNjQocmVjX3RlbXAzLCBtdWx0KSAtIDEpOwotfQotCi1pbnQzMl90 IGRzaV9waHlfaHdfdjNfMF9jYWxjX2Nsa190cmFpbF9yZWNfbWF4KHM2NCB0ZW1wMSwgczY0IG11 bHQpCi17Ci0JczY0IHJlY190ZW1wMjsKLQotCXJlY190ZW1wMiA9IHRlbXAxIC8gODsKLQlyZXR1 cm4gKGRpdl9zNjQocmVjX3RlbXAyLCBtdWx0KSAtIDEpOwotfQotCi1pbnQzMl90IGRzaV9waHlf aHdfdjNfMF9jYWxjX2hzX3plcm8oczY0IHRlbXAxLCBzNjQgbXVsdCkKLXsKLQlzNjQgcmVjX3Rl bXAyLCByZWNfbWluOwotCi0JcmVjX3RlbXAyID0gcm91bmR1cCgodGVtcDEgLyA4KSwgbXVsdCk7 Ci0JcmVjX21pbiA9IHJlY190ZW1wMiAtICgxICogbXVsdCk7Ci0JcmV0dXJuIGRpdl9zNjQocmVj X21pbiwgbXVsdCk7Ci19Ci0KLXZvaWQgZHNpX3BoeV9od192M18wX2NhbGNfaHNfdHJhaWwoc3Ry dWN0IHBoeV9jbGtfcGFyYW1zICpjbGtfcGFyYW1zLAotCQkJc3RydWN0IHBoeV90aW1pbmdfZGVz YyAqZGVzYykKLXsKLQlzNjQgcmVjX3RlbXAxOwotCXN0cnVjdCB0aW1pbmdfZW50cnkgKnQgPSAm ZGVzYy0+aHNfdHJhaWw7Ci0KLQl0LT5yZWNfbWluID0gRElWX1JPVU5EX1VQKAotCQkJKHQtPm1p cGlfbWluICogY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpLAotCQkJKDggKiBjbGtfcGFyYW1zLT50 bHB4X251bWVyX25zKSkgLSAxOwotCi0JcmVjX3RlbXAxID0gKHQtPm1pcGlfbWF4ICogY2xrX3Bh cmFtcy0+Yml0Y2xrX21icHMpOwotCXQtPnJlY19tYXggPQotCQkgKGRpdl9zNjQocmVjX3RlbXAx LCAoOCAqIGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpKSkgLSAxOwotfQotCi12b2lkIGRzaV9w aHlfaHdfdjNfMF91cGRhdGVfdGltaW5nX3BhcmFtcygKLQlzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFu ZV9jZmdzICp0aW1pbmcsCi0Jc3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYykKLXsKLQl0aW1p bmctPmxhbmVfdjNbMF0gPSAweDAwOwotCXRpbWluZy0+bGFuZV92M1sxXSA9IGRlc2MtPmNsa196 ZXJvLnJlZ192YWx1ZTsKLQl0aW1pbmctPmxhbmVfdjNbMl0gPSBkZXNjLT5jbGtfcHJlcGFyZS5y ZWdfdmFsdWU7Ci0JdGltaW5nLT5sYW5lX3YzWzNdID0gZGVzYy0+Y2xrX3RyYWlsLnJlZ192YWx1 ZTsKLQl0aW1pbmctPmxhbmVfdjNbNF0gPSBkZXNjLT5oc19leGl0LnJlZ192YWx1ZTsKLQl0aW1p bmctPmxhbmVfdjNbNV0gPSBkZXNjLT5oc196ZXJvLnJlZ192YWx1ZTsKLQl0aW1pbmctPmxhbmVf djNbNl0gPSBkZXNjLT5oc19wcmVwYXJlLnJlZ192YWx1ZTsKLQl0aW1pbmctPmxhbmVfdjNbN10g PSBkZXNjLT5oc190cmFpbC5yZWdfdmFsdWU7Ci0JdGltaW5nLT5sYW5lX3YzWzhdID0gZGVzYy0+ aHNfcnFzdC5yZWdfdmFsdWU7Ci0JdGltaW5nLT5sYW5lX3YzWzldID0gMHgwMzsKLQl0aW1pbmct PmxhbmVfdjNbMTBdID0gMHgwNDsKLQl0aW1pbmctPmxhbmVfdjNbMTFdID0gMHgwMDsKLQotCXBy X2RlYnVnKCJbJWQgJWQgJWQgJWRdXG4iLCB0aW1pbmctPmxhbmVfdjNbMF0sCi0JCXRpbWluZy0+ bGFuZV92M1sxXSwgdGltaW5nLT5sYW5lX3YzWzJdLCB0aW1pbmctPmxhbmVfdjNbM10pOwotCXBy X2RlYnVnKCJbJWQgJWQgJWQgJWRdXG4iLCB0aW1pbmctPmxhbmVfdjNbNF0sCi0JCXRpbWluZy0+ bGFuZV92M1s1XSwgdGltaW5nLT5sYW5lX3YzWzZdLCB0aW1pbmctPmxhbmVfdjNbN10pOwotCXBy X2RlYnVnKCJbJWQgJWQgJWQgJWRdXG4iLCB0aW1pbmctPmxhbmVfdjNbOF0sCi0JCXRpbWluZy0+ bGFuZV92M1s5XSwgdGltaW5nLT5sYW5lX3YzWzEwXSwgdGltaW5nLT5sYW5lX3YzWzExXSk7Ci0J dGltaW5nLT5jb3VudF9wZXJfbGFuZSA9IDEyOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9wd3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNp LXN0YWdpbmcvZHNpX3B3ci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTJlYjNm Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3B3ci5j CisrKyAvZGV2L251bGwKQEAgLTEsMzY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIw MTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L29mLmg+Ci0jaW5jbHVkZSA8bGludXgv ZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpbmNsdWRlICJkc2lfcHdyLmgi Ci0KLS8qCi0gKiBkc2lfcHdyX3BhcnNlX3N1cHBseV9ub2RlKCkgLSBwYXJzZSBwb3dlciBzdXBw bHkgbm9kZSBmcm9tIHJvb3QgZGV2aWNlIG5vZGUKLSAqLwotc3RhdGljIGludCBkc2lfcHdyX3Bh cnNlX3N1cHBseV9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdCwKLQkJCQkgICAgIHN0cnVj dCBkc2lfcmVndWxhdG9yX2luZm8gKnJlZ3MpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaSA9IDA7 Ci0JdTMyIHRtcCA9IDA7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gTlVMTDsKLQotCWZv cl9lYWNoX2NoaWxkX29mX25vZGUocm9vdCwgbm9kZSkgewotCQljb25zdCBjaGFyICpzdCA9IE5V TEw7Ci0KLQkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhub2RlLCAicWNvbSxzdXBwbHkt bmFtZSIsICZzdCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gcmVhZCBuYW1l LCByYyA9ICVkXG4iLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJc25wcmludGYocmVn cy0+dnJlZ3NbaV0udnJlZ19uYW1lLAotCQkJIEFSUkFZX1NJWkUocmVncy0+dnJlZ3NbaV0udnJl Z19uYW1lKSwKLQkJCSAiJXMiLCBzdCk7Ci0KLQkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihu b2RlLCAicWNvbSxzdXBwbHktbWluLXZvbHRhZ2UiLAotCQkJCQkgICZ0bXApOwotCQlpZiAocmMp IHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHJlYWQgbWluIHZvbHRhZ2UsIHJjID0gJWRcbiIsIHJj KTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQkJcmVncy0+dnJlZ3NbaV0ubWluX3ZvbHRhZ2UgPSB0 bXA7Ci0KLQkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAicWNvbSxzdXBwbHktbWF4 LXZvbHRhZ2UiLAotCQkJCQkgICZ0bXApOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVk IHRvIHJlYWQgbWF4IHZvbHRhZ2UsIHJjID0gJWRcbiIsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0J CX0KLQkJcmVncy0+dnJlZ3NbaV0ubWF4X3ZvbHRhZ2UgPSB0bXA7Ci0KLQkJcmMgPSBvZl9wcm9w ZXJ0eV9yZWFkX3UzMihub2RlLCAicWNvbSxzdXBwbHktZW5hYmxlLWxvYWQiLAotCQkJCQkgICZ0 bXApOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHJlYWQgZW5hYmxlIGxvYWQs IHJjID0gJWRcbiIsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQkJcmVncy0+dnJlZ3NbaV0u ZW5hYmxlX2xvYWQgPSB0bXA7Ci0KLQkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAi cWNvbSxzdXBwbHktZGlzYWJsZS1sb2FkIiwKLQkJCQkJICAmdG1wKTsKLQkJaWYgKHJjKSB7Ci0J CQlwcl9lcnIoImZhaWxlZCB0byByZWFkIGRpc2FibGUgbG9hZCwgcmMgPSAlZFxuIiwgcmMpOwot CQkJZ290byBlcnJvcjsKLQkJfQotCQlyZWdzLT52cmVnc1tpXS5kaXNhYmxlX2xvYWQgPSB0bXA7 Ci0KLQkJLyogT3B0aW9uYWwgdmFsdWVzICovCi0JCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIo bm9kZSwgInFjb20sc3VwcGx5LXByZS1vbi1zbGVlcCIsCi0JCQkJCSAgJnRtcCk7Ci0JCWlmIChy YykgewotCQkJcHJfZGVidWcoInByZS1vbi1zbGVlcCBub3Qgc3BlY2lmaWVkXG4iKTsKLQkJCXJj ID0gMDsKLQkJfSBlbHNlIHsKLQkJCXJlZ3MtPnZyZWdzW2ldLnByZV9vbl9zbGVlcCA9IHRtcDsK LQkJfQotCi0JCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInFjb20sc3VwcGx5LXBy ZS1vZmYtc2xlZXAiLAotCQkJCQkgICZ0bXApOwotCQlpZiAocmMpIHsKLQkJCXByX2RlYnVnKCJw cmUtb2ZmLXNsZWVwIG5vdCBzcGVjaWZpZWRcbiIpOwotCQkJcmMgPSAwOwotCQl9IGVsc2Ugewot CQkJcmVncy0+dnJlZ3NbaV0ucHJlX29mZl9zbGVlcCA9IHRtcDsKLQkJfQotCi0JCXJjID0gb2Zf cHJvcGVydHlfcmVhZF91MzIobm9kZSwgInFjb20sc3VwcGx5LXBvc3Qtb24tc2xlZXAiLAotCQkJ CQkgICZ0bXApOwotCQlpZiAocmMpIHsKLQkJCXByX2RlYnVnKCJwb3N0LW9uLXNsZWVwIG5vdCBz cGVjaWZpZWRcbiIpOwotCQkJcmMgPSAwOwotCQl9IGVsc2UgewotCQkJcmVncy0+dnJlZ3NbaV0u cG9zdF9vbl9zbGVlcCA9IHRtcDsKLQkJfQotCi0JCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIo bm9kZSwgInFjb20sc3VwcGx5LXBvc3Qtb2ZmLXNsZWVwIiwKLQkJCQkJICAmdG1wKTsKLQkJaWYg KHJjKSB7Ci0JCQlwcl9kZWJ1ZygicG9zdC1vZmYtc2xlZXAgbm90IHNwZWNpZmllZFxuIik7Ci0J CQlyYyA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlyZWdzLT52cmVnc1tpXS5wb3N0X29mZl9zbGVlcCA9 IHRtcDsKLQkJfQotCi0JCSsraTsKLQkJcHJfZGVidWcoIlslc10gbWludj0lZCBtYXh2PSVkLCBl bl9sb2FkPSVkLCBkaXNfbG9hZD0lZFxuIiwKLQkJCSByZWdzLT52cmVnc1tpXS52cmVnX25hbWUs Ci0JCQkgcmVncy0+dnJlZ3NbaV0ubWluX3ZvbHRhZ2UsCi0JCQkgcmVncy0+dnJlZ3NbaV0ubWF4 X3ZvbHRhZ2UsCi0JCQkgcmVncy0+dnJlZ3NbaV0uZW5hYmxlX2xvYWQsCi0JCQkgcmVncy0+dnJl Z3NbaV0uZGlzYWJsZV9sb2FkKTsKLQl9Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotLyoq Ci0gKiBkc2lfcHdyX2VuYWJsZV92cmVncygpIC0gZW5hYmxlL2Rpc2FibGUgcmVndWxhdG9ycwot ICovCi1zdGF0aWMgaW50IGRzaV9wd3JfZW5hYmxlX3ZyZWdzKHN0cnVjdCBkc2lfcmVndWxhdG9y X2luZm8gKnJlZ3MsIGJvb2wgZW5hYmxlKQotewotCWludCByYyA9IDAsIGkgPSAwOwotCXN0cnVj dCBkc2lfdnJlZyAqdnJlZzsKLQlpbnQgbnVtX29mX3YgPSAwOwotCi0JaWYgKGVuYWJsZSkgewot CQlmb3IgKGkgPSAwOyBpIDwgcmVncy0+Y291bnQ7IGkrKykgewotCQkJdnJlZyA9ICZyZWdzLT52 cmVnc1tpXTsKLQkJCWlmICh2cmVnLT5wcmVfb25fc2xlZXApCi0JCQkJbXNsZWVwKHZyZWctPnBy ZV9vbl9zbGVlcCk7Ci0KLQkJCXJjID0gcmVndWxhdG9yX3NldF9sb2FkKHZyZWctPnZyZWcsCi0J CQkJCQl2cmVnLT5lbmFibGVfbG9hZCk7Ci0JCQlpZiAocmMgPCAwKSB7Ci0JCQkJcHJfZXJyKCJT ZXR0aW5nIG9wdGltdW0gbW9kZSBmYWlsZWQgZm9yICVzXG4iLAotCQkJCSAgICAgICB2cmVnLT52 cmVnX25hbWUpOwotCQkJCWdvdG8gZXJyb3I7Ci0JCQl9Ci0JCQludW1fb2ZfdiA9IHJlZ3VsYXRv cl9jb3VudF92b2x0YWdlcyh2cmVnLT52cmVnKTsKLQkJCWlmIChudW1fb2ZfdiA+IDApIHsKLQkJ CQlyYyA9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZSh2cmVnLT52cmVnLAotCQkJCQkJCSAgIHZyZWct Pm1pbl92b2x0YWdlLAotCQkJCQkJCSAgIHZyZWctPm1heF92b2x0YWdlKTsKLQkJCQlpZiAocmMp IHsKLQkJCQkJcHJfZXJyKCJTZXQgdm9sdGFnZSglcykgZmFpbCwgcmM9JWRcbiIsCi0JCQkJCQkg dnJlZy0+dnJlZ19uYW1lLCByYyk7Ci0JCQkJCWdvdG8gZXJyb3JfZGlzYWJsZV9vcHRfbW9kZTsK LQkJCQl9Ci0JCQl9Ci0KLQkJCXJjID0gcmVndWxhdG9yX2VuYWJsZSh2cmVnLT52cmVnKTsKLQkJ CWlmIChyYykgewotCQkJCXByX2VycigiZW5hYmxlIGZhaWxlZCBmb3IgJXMsIHJjPSVkXG4iLAot CQkJCSAgICAgICB2cmVnLT52cmVnX25hbWUsIHJjKTsKLQkJCQlnb3RvIGVycm9yX2Rpc2FibGVf dm9sdGFnZTsKLQkJCX0KLQotCQkJaWYgKHZyZWctPnBvc3Rfb25fc2xlZXApCi0JCQkJbXNsZWVw KHZyZWctPnBvc3Rfb25fc2xlZXApOwotCQl9Ci0JfSBlbHNlIHsKLQkJZm9yIChpID0gKHJlZ3Mt PmNvdW50IC0gMSk7IGkgPj0gMDsgaS0tKSB7Ci0JCQlpZiAocmVncy0+dnJlZ3NbaV0ucHJlX29m Zl9zbGVlcCkKLQkJCQltc2xlZXAocmVncy0+dnJlZ3NbaV0ucHJlX29mZl9zbGVlcCk7Ci0KLQkJ CSh2b2lkKXJlZ3VsYXRvcl9zZXRfbG9hZChyZWdzLT52cmVnc1tpXS52cmVnLAotCQkJCQkJcmVn cy0+dnJlZ3NbaV0uZGlzYWJsZV9sb2FkKTsKLQkJCSh2b2lkKXJlZ3VsYXRvcl9kaXNhYmxlKHJl Z3MtPnZyZWdzW2ldLnZyZWcpOwotCi0JCQlpZiAocmVncy0+dnJlZ3NbaV0ucG9zdF9vZmZfc2xl ZXApCi0JCQkJbXNsZWVwKHJlZ3MtPnZyZWdzW2ldLnBvc3Rfb2ZmX3NsZWVwKTsKLQkJfQotCX0K LQotCXJldHVybiAwOwotZXJyb3JfZGlzYWJsZV9vcHRfbW9kZToKLQkodm9pZClyZWd1bGF0b3Jf c2V0X2xvYWQocmVncy0+dnJlZ3NbaV0udnJlZywKLQkJCQkgcmVncy0+dnJlZ3NbaV0uZGlzYWJs ZV9sb2FkKTsKLQotZXJyb3JfZGlzYWJsZV92b2x0YWdlOgotCWlmIChudW1fb2ZfdiA+IDApCi0J CSh2b2lkKXJlZ3VsYXRvcl9zZXRfdm9sdGFnZShyZWdzLT52cmVnc1tpXS52cmVnLAotCQkJCQkg ICAgMCwgcmVncy0+dnJlZ3NbaV0ubWF4X3ZvbHRhZ2UpOwotZXJyb3I6Ci0JZm9yIChpLS07IGkg Pj0gMDsgaS0tKSB7Ci0JCWlmIChyZWdzLT52cmVnc1tpXS5wcmVfb2ZmX3NsZWVwKQotCQkJbXNs ZWVwKHJlZ3MtPnZyZWdzW2ldLnByZV9vZmZfc2xlZXApOwotCi0JCSh2b2lkKXJlZ3VsYXRvcl9z ZXRfbG9hZChyZWdzLT52cmVnc1tpXS52cmVnLAotCQkJCQkgcmVncy0+dnJlZ3NbaV0uZGlzYWJs ZV9sb2FkKTsKLQotCQludW1fb2ZfdiA9IHJlZ3VsYXRvcl9jb3VudF92b2x0YWdlcyhyZWdzLT52 cmVnc1tpXS52cmVnKTsKLQkJaWYgKG51bV9vZl92ID4gMCkKLQkJCSh2b2lkKXJlZ3VsYXRvcl9z ZXRfdm9sdGFnZShyZWdzLT52cmVnc1tpXS52cmVnLAotCQkJCQkgICAgMCwgcmVncy0+dnJlZ3Nb aV0ubWF4X3ZvbHRhZ2UpOwotCi0JCSh2b2lkKXJlZ3VsYXRvcl9kaXNhYmxlKHJlZ3MtPnZyZWdz W2ldLnZyZWcpOwotCi0JCWlmIChyZWdzLT52cmVnc1tpXS5wb3N0X29mZl9zbGVlcCkKLQkJCW1z bGVlcChyZWdzLT52cmVnc1tpXS5wb3N0X29mZl9zbGVlcCk7Ci0JfQotCi0JcmV0dXJuIHJjOwot fQotCi0vKioKLSAqIGRzaV9wd3Jfb2ZfZ2V0X3ZyZWdfZGF0YSAtIFBhcnNlIHJlZ3VsYXRvciBz dXBwbHkgaW5mb3JtYXRpb24KLSAqIEBvZl9ub2RlOiAgICAgICAgRGV2aWNlIG9mIG5vZGUgdG8g cGFyc2UgZm9yIHN1cHBseSBpbmZvcm1hdGlvbi4KLSAqIEByZWdzOiAgICAgICAgICAgUG9pbnRl ciB3aGVyZSByZWd1bGF0b3IgaW5mb3JtYXRpb24gd2lsbCBiZSBjb3BpZWQgdG8uCi0gKiBAc3Vw cGx5X25hbWU6ICAgIE5hbWUgb2YgdGhlIHN1cHBseSBub2RlLgotICoKLSAqIHJldHVybjogZXJy b3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUgb3IgMCBmb3Igc3VjY2Vzcy4KLSAqLwotaW50IGRz aV9wd3Jfb2ZfZ2V0X3ZyZWdfZGF0YShzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUsCi0JCQkJ IHN0cnVjdCBkc2lfcmVndWxhdG9yX2luZm8gKnJlZ3MsCi0JCQkJIGNoYXIgKnN1cHBseV9uYW1l KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpzdXBwbHlfcm9vdF9ub2Rl ID0gTlVMTDsKLQotCWlmICghb2Zfbm9kZSB8fCAhcmVncykgewotCQlwcl9lcnIoIkJhZCBwYXJh bXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZWdzLT5jb3VudCA9IDA7Ci0Jc3Vw cGx5X3Jvb3Rfbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG9mX25vZGUsIHN1cHBseV9uYW1l KTsKLQlpZiAoIXN1cHBseV9yb290X25vZGUpIHsKLQkJc3VwcGx5X3Jvb3Rfbm9kZSA9IG9mX3Bh cnNlX3BoYW5kbGUob2Zfbm9kZSwgc3VwcGx5X25hbWUsIDApOwotCQlpZiAoIXN1cHBseV9yb290 X25vZGUpIHsKLQkJCXByX2RlYnVnKCJObyBzdXBwbHkgZW50cnkgcHJlc2VudCBmb3IgJXNcbiIs Ci0JCQkJCXN1cHBseV9uYW1lKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0JcmVn cy0+Y291bnQgPSBvZl9nZXRfYXZhaWxhYmxlX2NoaWxkX2NvdW50KHN1cHBseV9yb290X25vZGUp OwotCWlmIChyZWdzLT5jb3VudCA9PSAwKSB7Ci0JCXByX2VycigiTm8gdnJlZ3MgZGVmaW5lZCBm b3IgJXNcbiIsIHN1cHBseV9uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmVncy0+ dnJlZ3MgPSBrY2FsbG9jKHJlZ3MtPmNvdW50LCBzaXplb2YoKnJlZ3MtPnZyZWdzKSwgR0ZQX0tF Uk5FTCk7Ci0JaWYgKCFyZWdzLT52cmVncykgewotCQlyZWdzLT5jb3VudCA9IDA7Ci0JCXJldHVy biAtRU5PTUVNOwotCX0KLQotCXJjID0gZHNpX3B3cl9wYXJzZV9zdXBwbHlfbm9kZShzdXBwbHlf cm9vdF9ub2RlLCByZWdzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2Ug c3VwcGx5IG5vZGUgZm9yICVzLCByYyA9ICVkXG4iLAotCQkJc3VwcGx5X25hbWUsIHJjKTsKLQot CQlrZnJlZShyZWdzLT52cmVncyk7Ci0JCXJlZ3MtPnZyZWdzID0gTlVMTDsKLQkJcmVncy0+Y291 bnQgPSAwOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfcHdyX2dldF9kdF92 cmVnX2RhdGEgLSBwYXJzZSByZWd1bGF0b3Igc3VwcGx5IGluZm9ybWF0aW9uCi0gKiBAZGV2OiAg ICAgICAgICAgIERldmljZSB3aG9zZSBvZl9ub2RlIG5lZWRzIHRvIGJlIHBhcnNlZC4KLSAqIEBy ZWdzOiAgICAgICAgICAgUG9pbnRlciB3aGVyZSByZWd1bGF0b3IgaW5mb3JtYXRpb24gd2lsbCBi ZSBjb3BpZWQgdG8uCi0gKiBAc3VwcGx5X25hbWU6ICAgIE5hbWUgb2YgdGhlIHN1cHBseSBub2Rl LgotICoKLSAqIHJldHVybjogZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUgb3IgMCBmb3Ig c3VjY2Vzcy4KLSAqLwotaW50IGRzaV9wd3JfZ2V0X2R0X3ZyZWdfZGF0YShzdHJ1Y3QgZGV2aWNl ICpkZXYsCi0JCQkJIHN0cnVjdCBkc2lfcmVndWxhdG9yX2luZm8gKnJlZ3MsCi0JCQkJIGNoYXIg KnN1cHBseV9uYW1lKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpvZl9u b2RlID0gTlVMTDsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnN1cHBseV9ub2RlID0gTlVMTDsKLQlz dHJ1Y3QgZGV2aWNlX25vZGUgKnN1cHBseV9yb290X25vZGUgPSBOVUxMOwotCi0JaWYgKCFkZXYg fHwgIXJlZ3MpIHsKLQkJcHJfZXJyKCJCYWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0JfQotCi0Jb2Zfbm9kZSA9IGRldi0+b2Zfbm9kZTsKLQlyZWdzLT5jb3VudCA9IDA7Ci0Jc3Vw cGx5X3Jvb3Rfbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG9mX25vZGUsIHN1cHBseV9uYW1l KTsKLQlpZiAoIXN1cHBseV9yb290X25vZGUpIHsKLQkJc3VwcGx5X3Jvb3Rfbm9kZSA9IG9mX3Bh cnNlX3BoYW5kbGUob2Zfbm9kZSwgc3VwcGx5X25hbWUsIDApOwotCQlpZiAoIXN1cHBseV9yb290 X25vZGUpIHsKLQkJCXByX2RlYnVnKCJObyBzdXBwbHkgZW50cnkgcHJlc2VudCBmb3IgJXNcbiIs Ci0JCQkJCXN1cHBseV9uYW1lKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0JZm9y X2VhY2hfY2hpbGRfb2Zfbm9kZShzdXBwbHlfcm9vdF9ub2RlLCBzdXBwbHlfbm9kZSkKLQkJcmVn cy0+Y291bnQrKzsKLQotCWlmIChyZWdzLT5jb3VudCA9PSAwKSB7Ci0JCXByX2VycigiTm8gdnJl Z3MgZGVmaW5lZCBmb3IgJXNcbiIsIHN1cHBseV9uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JcmVncy0+dnJlZ3MgPSBkZXZtX2tjYWxsb2MoZGV2LCByZWdzLT5jb3VudCwgc2l6ZW9m KCpyZWdzLT52cmVncyksCi0JCQkJICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyZWdzLT52cmVncykg ewotCQlyZWdzLT5jb3VudCA9IDA7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJjID0gZHNp X3B3cl9wYXJzZV9zdXBwbHlfbm9kZShzdXBwbHlfcm9vdF9ub2RlLCByZWdzKTsKLQlpZiAocmMp IHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2Ugc3VwcGx5IG5vZGUgZm9yICVzLCByYyA9ICVk XG4iLAotCQkgICAgICAgc3VwcGx5X25hbWUsIHJjKTsKLQkJZGV2bV9rZnJlZShkZXYsIHJlZ3Mt PnZyZWdzKTsKLQkJcmVncy0+dnJlZ3MgPSBOVUxMOwotCQlyZWdzLT5jb3VudCA9IDA7Ci0JfQot Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGRzaV9wd3JfZW5hYmxlX3JlZ3VsYXRvcigpIC0g ZW5hYmxlIGEgc2V0IG9mIHJlZ3VsYXRvcnMKLSAqIEByZWdzOiAgICAgICBQb2ludGVyIHRvIHNl dCBvZiByZWd1bGF0b3JzIHRvIGVuYWJsZSBvciBkaXNhYmxlLgotICogQGVuYWJsZTogICAgIEVu YWJsZS9EaXNhYmxlIHJlZ3VsYXRvcnMuCi0gKgotICogcmV0dXJuOiBlcnJvciBjb2RlIGluIGNh c2Ugb2YgZmFpbHVyZSBvciAwIGZvciBzdWNjZXNzLgotICovCi1pbnQgZHNpX3B3cl9lbmFibGVf cmVndWxhdG9yKHN0cnVjdCBkc2lfcmVndWxhdG9yX2luZm8gKnJlZ3MsIGJvb2wgZW5hYmxlKQot ewotCWludCByYyA9IDA7Ci0KLQlpZiAoZW5hYmxlKSB7Ci0JCWlmIChyZWdzLT5yZWZjb3VudCA9 PSAwKSB7Ci0JCQlyYyA9IGRzaV9wd3JfZW5hYmxlX3ZyZWdzKHJlZ3MsIHRydWUpOwotCQkJaWYg KHJjKQotCQkJCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSByZWd1bGF0b3JzXG4iKTsKLQkJfQot CQlyZWdzLT5yZWZjb3VudCsrOwotCX0gZWxzZSB7Ci0JCWlmIChyZWdzLT5yZWZjb3VudCA9PSAw KSB7Ci0JCQlwcl9lcnIoIlVuYmFsYW5jZWQgcmVndWxhdG9yIG9mZlxuIik7Ci0JCX0gZWxzZSB7 Ci0JCQlyZWdzLT5yZWZjb3VudC0tOwotCQkJaWYgKHJlZ3MtPnJlZmNvdW50ID09IDApIHsKLQkJ CQlyYyA9IGRzaV9wd3JfZW5hYmxlX3ZyZWdzKHJlZ3MsIGZhbHNlKTsKLQkJCQlpZiAocmMpCi0J CQkJCXByX2VycigiZmFpbGVkIHRvIGRpc2FibGUgdnJlZ3NcbiIpOwotCQkJfQotCQl9Ci0JfQot Ci0JcmV0dXJuIHJjOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3Rh Z2luZy9kc2lfcHdyLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9wd3Iu aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVlNWM2Ni4uMDAwMDAwMAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9wd3IuaAorKysgL2Rldi9udWxsCkBA IC0xLDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4 IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICog R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQot I2lmbmRlZiBfRFNJX1BXUl9IXwotI2RlZmluZSBfRFNJX1BXUl9IXwotCi0jaW5jbHVkZSA8bGlu dXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVk ZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4K LQotLyoqCi0gKiBzdHJ1Y3QgZHNpX3ZyZWcgLSByZWd1bGF0b3IgaW5mb3JtYXRpb24gZm9yIERT SSByZWd1bGF0b3JzCi0gKiBAdnJlZzogICAgICAgICAgICBIYW5kbGUgdG8gdGhlIHJlZ3VsYXRv ci4KLSAqIEB2cmVnX25hbWU6ICAgICAgIFJlZ3VsYXRvciBuYW1lLgotICogQG1pbl92b2x0YWdl OiAgICAgTWluaW11bSB2b2x0YWdlIGluIHVWLgotICogQG1heF92b2x0YWdlOiAgICAgTWF4aW11 bSB2b2x0YWdlIGluIHVWLgotICogQGVuYWJsZV9sb2FkOiAgICAgTG9hZCwgaW4gdUEsIHdoZW4g ZW5hYmxlZC4KLSAqIEBkaXNhYmxlX2xvYWQ6ICAgIExvYWQsIGluIHVBLCB3aGVuIGRpc2FibGVk LgotICogQHByZV9vbl9zbGVlcDogICAgU2xlZXAsIGluIG1zLCBiZWZvcmUgZW5hYmxpbmcgdGhl IHJlZ3VsYXRvci4KLSAqIEBwb3N0X29uX3NsZWVwOiAgIFNsZWVwLCBpbiBtcywgYWZ0ZXIgZW5h YmxpbmcgdGhlIHJlZ3VsYXRvci4KLSAqIEBwcmVfb2ZmX3NsZWVwOiAgIFNsZWVwLCBpbiBtcywg YmVmb3JlIGRpc2FibGluZyB0aGUgcmVndWxhdG9yLgotICogQHBvc3Rfb2ZmX3NsZWVwOiAgU2xl ZXAsIGluIG1zLCBhZnRlciBkaXNhYmxpbmcgdGhlIHJlZ3VsYXRvci4KLSAqLwotc3RydWN0IGRz aV92cmVnIHsKLQlzdHJ1Y3QgcmVndWxhdG9yICp2cmVnOwotCWNoYXIgdnJlZ19uYW1lWzMyXTsK LQl1MzIgbWluX3ZvbHRhZ2U7Ci0JdTMyIG1heF92b2x0YWdlOwotCXUzMiBlbmFibGVfbG9hZDsK LQl1MzIgZGlzYWJsZV9sb2FkOwotCXUzMiBwcmVfb25fc2xlZXA7Ci0JdTMyIHBvc3Rfb25fc2xl ZXA7Ci0JdTMyIHByZV9vZmZfc2xlZXA7Ci0JdTMyIHBvc3Rfb2ZmX3NsZWVwOwotfTsKLQotLyoq Ci0gKiBzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvIC0gc2V0IG9mIHZyZWdzIHRoYXQgYXJlIHR1 cm5lZCBvbi9vZmYgdG9nZXRoZXIuCi0gKiBAdnJlZ3M6ICAgICAgIEFycmF5IG9mIGRzaV92cmVn IHN0cnVjdHVyZXMuCi0gKiBAY291bnQ6ICAgICAgIE51bWJlciBvZiB2cmVncy4KLSAqIEByZWZj b3VudDogICAgUmVmZXJlbmNlIGNvdW50aW5nIGZvciBlbmFibGluZy4KLSAqLwotc3RydWN0IGRz aV9yZWd1bGF0b3JfaW5mbyB7Ci0Jc3RydWN0IGRzaV92cmVnICp2cmVnczsKLQl1MzIgY291bnQ7 Ci0JdTMyIHJlZmNvdW50OwotfTsKLQotLyoqCi0gKiBkc2lfcHdyX29mX2dldF92cmVnX2RhdGEg LSBwYXJzZSByZWd1bGF0b3Igc3VwcGx5IGluZm9ybWF0aW9uCi0gKiBAb2Zfbm9kZTogICAgICAg IERldmljZSBvZiBub2RlIHRvIHBhcnNlIGZvciBzdXBwbHkgaW5mb3JtYXRpb24uCi0gKiBAcmVn czogICAgICAgICAgIFBvaW50ZXIgd2hlcmUgcmVndWxhdG9yIGluZm9ybWF0aW9uIHdpbGwgYmUg Y29waWVkIHRvLgotICogQHN1cHBseV9uYW1lOiAgICBOYW1lIG9mIHRoZSBzdXBwbHkgbm9kZS4K LSAqCi0gKiByZXR1cm46IGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlIG9yIDAgZm9yIHN1 Y2Nlc3MuCi0gKi8KLWludCBkc2lfcHdyX29mX2dldF92cmVnX2RhdGEoc3RydWN0IGRldmljZV9u b2RlICpvZl9ub2RlLAotCQkJCSBzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvICpyZWdzLAotCQkJ CSBjaGFyICpzdXBwbHlfbmFtZSk7Ci0KLS8qKgotICogZHNpX3B3cl9nZXRfZHRfdnJlZ19kYXRh IC0gcGFyc2UgcmVndWxhdG9yIHN1cHBseSBpbmZvcm1hdGlvbgotICogQGRldjogICAgICAgICAg ICBEZXZpY2Ugd2hvc2Ugb2Zfbm9kZSBuZWVkcyB0byBiZSBwYXJzZWQuCi0gKiBAcmVnczogICAg ICAgICAgIFBvaW50ZXIgd2hlcmUgcmVndWxhdG9yIGluZm9ybWF0aW9uIHdpbGwgYmUgY29waWVk IHRvLgotICogQHN1cHBseV9uYW1lOiAgICBOYW1lIG9mIHRoZSBzdXBwbHkgbm9kZS4KLSAqCi0g KiByZXR1cm46IGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlIG9yIDAgZm9yIHN1Y2Nlc3Mu Ci0gKi8KLWludCBkc2lfcHdyX2dldF9kdF92cmVnX2RhdGEoc3RydWN0IGRldmljZSAqZGV2LAot CQkJCSBzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvICpyZWdzLAotCQkJCSBjaGFyICpzdXBwbHlf bmFtZSk7Ci0KLS8qKgotICogZHNpX3B3cl9lbmFibGVfcmVndWxhdG9yKCkgLSBlbmFibGUgYSBz ZXQgb2YgcmVndWxhdG9ycwotICogQHJlZ3M6ICAgICAgIFBvaW50ZXIgdG8gc2V0IG9mIHJlZ3Vs YXRvcnMgdG8gZW5hYmxlIG9yIGRpc2FibGUuCi0gKiBAZW5hYmxlOiAgICAgRW5hYmxlL0Rpc2Fi bGUgcmVndWxhdG9ycy4KLSAqCi0gKiByZXR1cm46IGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWls dXJlIG9yIDAgZm9yIHN1Y2Nlc3MuCi0gKi8KLWludCBkc2lfcHdyX2VuYWJsZV9yZWd1bGF0b3Io c3RydWN0IGRzaV9yZWd1bGF0b3JfaW5mbyAqcmVncywgYm9vbCBlbmFibGUpOwotI2VuZGlmIC8q IF9EU0lfUFdSX0hfICovCi0tIApUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4g aXMgYSBtZW1iZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRpb24g Q29sbGFib3JhdGl2ZSBQcm9qZWN0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9mcmVlZHJlbm8K