From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [DPU PATCH 6/6] drm/msm: remove dsi-staging driver Date: Mon, 16 Apr 2018 11:22:21 -0700 Message-ID: <1523902941-2253-7-git-send-email-jsanka@codeaurora.org> References: <1523902941-2253-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: <1523902941-2253-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 List-Id: linux-arm-msm@vger.kernel.org U0RNODQ1IGhhcyBzd2l0Y2hlZCBmcm9tIGRzaS1zdGFnaW5nIHRvIGRzaSBkcml2ZXIuIFJlbW92 aW5nCnN0YWxlIGNvZGUuCgpTaWduZWQtb2ZmLWJ5OiBKZXlrdW1hciBTYW5rYXJhbiA8anNhbmth QGNvZGVhdXJvcmEub3JnPgotLS0KIC4uLi9jb25maWcvYXJtNjQvY2hyb21pdW1vcy1hcm02NC5m bGF2b3VyLmNvbmZpZyAgIHwgICAgMSAtCiAuLi4vYXJtNjQvY2hyb21pdW1vcy1xdWFsY29tbS5m bGF2b3VyLmNvbmZpZyAgICAgICB8ICAgIDEgLQogZHJpdmVycy9ncHUvZHJtL21zbS9LY29uZmln ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEyIC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vTWFr ZWZpbGUgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMSAtCiBkcml2ZXJzL2dwdS9kcm0vbXNt L2RzaS1zdGFnaW5nL2RzaV9jYXRhbG9nLmMgICAgICB8ICAyNDEgLS0KIGRyaXZlcnMvZ3B1L2Ry bS9tc20vZHNpLXN0YWdpbmcvZHNpX2NhdGFsb2cuaCAgICAgIHwgIDIwMSAtCiBkcml2ZXJzL2dw dS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jbGsuaCAgICAgICAgICB8ICAyNzYgLS0KIGRyaXZl cnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Nsa19tYW5hZ2VyLmMgIHwgMTIzNSAtLS0t LS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmwuYyAgICAgICAgIHwg Mjg0NiAtLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9j dHJsLmggICAgICAgICB8ICA2MjMgLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5n L2RzaV9jdHJsX2h3LmggICAgICB8ICA3NTIgLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kc2kt c3RhZ2luZy9kc2lfY3RybF9od18xXzQuYyAgfCAgNDgwIC0tLQogZHJpdmVycy9ncHUvZHJtL21z bS9kc2ktc3RhZ2luZy9kc2lfY3RybF9od18yXzAuYyAgfCAgMjM0IC0tCiBkcml2ZXJzL2dwdS9k cm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsX2h3XzJfMi5jICB8ICAgNDIgLQogZHJpdmVycy9n cHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9od19jbW4uYyAgfCAxMzEyIC0tLS0tLQog ZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9yZWcuaCAgICAgfCAgMTk2 IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2RlZnMuaCAgICAgICAgIHwg IDU3OSAtLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Rpc3BsYXkuYyAg ICAgIHwgNDIyMSAtLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kc2kt c3RhZ2luZy9kc2lfZGlzcGxheS5oICAgICAgfCAgNTU2IC0tLQogZHJpdmVycy9ncHUvZHJtL21z bS9kc2ktc3RhZ2luZy9kc2lfZGlzcGxheV90ZXN0LmMgfCAgMTE0IC0KIGRyaXZlcnMvZ3B1L2Ry bS9tc20vZHNpLXN0YWdpbmcvZHNpX2Rpc3BsYXlfdGVzdC5oIHwgICAzMSAtCiBkcml2ZXJzL2dw dS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kcm0uYyAgICAgICAgICB8ICA2ODggLS0tLQogZHJp dmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZHJtLmggICAgICAgICAgfCAgMTI3IC0K IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2h3LmggICAgICAgICAgIHwgICA0 OCAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9wYW5lbC5jICAgICAgICB8 IDMzMjEgLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2Rz aV9wYW5lbC5oICAgICAgICB8ICAyNTcgLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdp bmcvZHNpX3BoeS5jICAgICAgICAgIHwgIDkzNyAtLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9k c2ktc3RhZ2luZy9kc2lfcGh5LmggICAgICAgICAgfCAgMjM1IC0tCiBkcml2ZXJzL2dwdS9kcm0v bXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfaHcuaCAgICAgICB8ICAyNjAgLS0KIGRyaXZlcnMvZ3B1 L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV9od192Ml8wLmMgIHwgIDI1MiAtLQogZHJpdmVy cy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5X2h3X3YzXzAuYyAgfCAgNDQ3IC0tLQog Li4uL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfdGltaW5nX2NhbGMuYyAgfCAgNjc2 IC0tLS0KIC4uLi9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5X3RpbWluZ19jYWxjLmgg IHwgIDE0NCAtCiAuLi4vZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfdjJf MC5jICB8ICAxMjYgLQogLi4uL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfdGltaW5n X3YzXzAuYyAgfCAgMTA3IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3B3 ci5jICAgICAgICAgIHwgIDM2NSAtLQogZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9k c2lfcHdyLmggICAgICAgICAgfCAgIDkzIC0KIDM3IGZpbGVzIGNoYW5nZWQsIDIyMDU3IGRlbGV0 aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdp bmcvZHNpX2NhdGFsb2cuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20v ZHNpLXN0YWdpbmcvZHNpX2NhdGFsb2cuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Nsay5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY2xrX21hbmFnZXIuYwogZGVsZXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmwuYwogZGVsZXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmwuaAog ZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0 cmxfaHcuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdp bmcvZHNpX2N0cmxfaHdfMV80LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v bXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsX2h3XzJfMC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9od18yXzIuYwogZGVsZXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmxfaHdfY21u LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2Rz aV9jdHJsX3JlZy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2kt c3RhZ2luZy9kc2lfZGVmcy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21z bS9kc2ktc3RhZ2luZy9kc2lfZGlzcGxheS5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGlzcGxheS5oCiBkZWxldGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGlzcGxheV90ZXN0LmMKIGRlbGV0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kaXNwbGF5 X3Rlc3QuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdp bmcvZHNpX2RybS5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2kt c3RhZ2luZy9kc2lfZHJtLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNt L2RzaS1zdGFnaW5nL2RzaV9ody5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L21zbS9kc2ktc3RhZ2luZy9kc2lfcGFuZWwuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BhbmVsLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHkuYwogZGVsZXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeS5oCiBkZWxldGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5X2h3LmgKIGRl bGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlf aHdfdjJfMC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3Rh Z2luZy9kc2lfcGh5X2h3X3YzXzAuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfY2FsYy5jCiBkZWxldGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5X3RpbWluZ19jYWxjLmgK IGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9w aHlfdGltaW5nX3YyXzAuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20v ZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfdjNfMC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcHdyLmMKIGRlbGV0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9wd3IuaAoKZGlmZiAtLWdpdCBh L2Nocm9tZW9zL2NvbmZpZy9hcm02NC9jaHJvbWl1bW9zLWFybTY0LmZsYXZvdXIuY29uZmlnIGIv Y2hyb21lb3MvY29uZmlnL2FybTY0L2Nocm9taXVtb3MtYXJtNjQuZmxhdm91ci5jb25maWcKaW5k ZXggN2IyMGM4Yi4uZGQ2NzY3ZSAxMDA2NDQKLS0tIGEvY2hyb21lb3MvY29uZmlnL2FybTY0L2No cm9taXVtb3MtYXJtNjQuZmxhdm91ci5jb25maWcKKysrIGIvY2hyb21lb3MvY29uZmlnL2FybTY0 L2Nocm9taXVtb3MtYXJtNjQuZmxhdm91ci5jb25maWcKQEAgLTExNyw3ICsxMTcsNiBAQCBDT05G SUdfRFJNX01JUElfRFNJPXkKIENPTkZJR19EUk1fTVNNPXkKIENPTkZJR19EUk1fTVNNX0RQVT15 CiBDT05GSUdfRFJNX01TTV9EU0k9eQotIyBDT05GSUdfRFJNX01TTV9EU0lfU1RBR0lORyBpcyBu b3Qgc2V0CiAjIENPTkZJR19EUk1fTVNNX0hEQ1AgaXMgbm90IHNldAogIyBDT05GSUdfRFJNX01T TV9IRE1JIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9NU01fSERNSV9IRENQIGlzIG5vdCBzZXQK ZGlmZiAtLWdpdCBhL2Nocm9tZW9zL2NvbmZpZy9hcm02NC9jaHJvbWl1bW9zLXF1YWxjb21tLmZs YXZvdXIuY29uZmlnIGIvY2hyb21lb3MvY29uZmlnL2FybTY0L2Nocm9taXVtb3MtcXVhbGNvbW0u Zmxhdm91ci5jb25maWcKaW5kZXggYWFkMjJhNy4uM2IzODY0NiAxMDA2NDQKLS0tIGEvY2hyb21l b3MvY29uZmlnL2FybTY0L2Nocm9taXVtb3MtcXVhbGNvbW0uZmxhdm91ci5jb25maWcKKysrIGIv Y2hyb21lb3MvY29uZmlnL2FybTY0L2Nocm9taXVtb3MtcXVhbGNvbW0uZmxhdm91ci5jb25maWcK QEAgLTMwLDcgKzMwLDYgQEAgQ09ORklHX0RSTV9NSVBJX0RTST15CiBDT05GSUdfRFJNX01TTT15 CiBDT05GSUdfRFJNX01TTV9EUFU9eQogQ09ORklHX0RSTV9NU01fRFNJPXkKLSMgQ09ORklHX0RS TV9NU01fRFNJX1NUQUdJTkcgaXMgbm90IHNldAogIyBDT05GSUdfRFJNX01TTV9IRENQIGlzIG5v dCBzZXQKICMgQ09ORklHX0RSTV9NU01fSERNSSBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk1fTVNN X0hETUlfSERDUCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL0tj b25maWcgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL0tjb25maWcKaW5kZXggNWYzYmRmMC4uODllMWI4 MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9LY29uZmlnCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vS2NvbmZpZwpAQCAtNTgsMTggKzU4LDYgQEAgY29uZmlnIERSTV9NU01fRFNJ CiAJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBuZWVkIGZvciBNSVBJIERTSSBj b25uZWN0b3IKIAkgIHN1cHBvcnQuCiAKLWNvbmZpZyBEUk1fTVNNX0RTSV9TVEFHSU5HCi0JYm9v bCAiRW5hYmxlIG5ldyBEU0kgZHJpdmVyIHN1cHBvcnQgaW4gTVNNIERSTSBkcml2ZXIiCi0JZGVw ZW5kcyBvbiBEUk1fTVNNCi0Jc2VsZWN0IERSTV9QQU5FTAotCXNlbGVjdCBEUk1fTUlQSV9EU0kK LQlkZWZhdWx0IHkKLQloZWxwCi0JICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IG5lZWQgTUlQ SSBEU0kgY29ubmVjdG9yIHN1cHBvcnQgb24gTVNNCi0JICB3aGljaCBjb25mb3JtcyB0byBEUk0u IE1JUEkgc3RhbmRzIGZvciBNb2JpbGUgSW5kdXN0cnkgUHJvY2Vzc29yCi0JICBJbnRlcmZhY2Ug YW5kIERTSSBzdGFuZHMgZm9yIERpc3BsYXkgU2VyaWFsIEludGVyZmFjZSB3aGljaCBwb3dlcnMK LQkgIHRoZSBwcmltYXJ5IGRpc3BsYXkgb2YgeW91ciBtb2JpbGUgZGV2aWNlLgotCiBjb25maWcg RFJNX01TTV9EU0lfUExMCiAJYm9vbCAiRW5hYmxlIERTSSBQTEwgZHJpdmVyIGluIE1TTSBEUk0i CiAJZGVwZW5kcyBvbiBEUk1fTVNNX0RTSSAmJiBDT01NT05fQ0xLCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQpp bmRleCBhOGQ4YWQ5Li5mZWUyODU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL01h a2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKQEAgLTEsNyArMSw2IEBA CiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiBjY2ZsYWdzLXkgOj0gLUlkcml2 ZXJzL2dwdS9kcm0vbXNtCiBjY2ZsYWdzLXkgKz0gLUlkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MQotY2NmbGFncy15ICs9IC1JZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZwogY2Nm bGFncy0kKENPTkZJR19EUk1fTVNNX0RTSSkgKz0gLUlkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaQog CiBtc20teSA6PSBcCkBAIC0xNDQsMjYgKzE0Myw2IEBAIG1zbS0kKENPTkZJR19EUk1fTVNNX0RT SV8yOE5NXzg5NjBfUEhZKSArPSBkc2kvcGh5L2RzaV9waHlfMjhubV84OTYwLm8KIG1zbS0kKENP TkZJR19EUk1fTVNNX0RTSV8xNE5NX1BIWSkgKz0gZHNpL3BoeS9kc2lfcGh5XzE0bm0ubwogbXNt LSQoQ09ORklHX0RSTV9NU01fRFNJXzEwTk1fUEhZKSArPSBkc2kvcGh5L2RzaV9waHlfMTBubS5v CiAKLW1zbS0kKENPTkZJR19EUk1fTVNNX0RTSV9TVEFHSU5HKSArPSBkc2ktc3RhZ2luZy9kc2lf cGh5Lm8gXAotCQkJCWRzaS1zdGFnaW5nL2RzaV9wd3IubyBcCi0JCQkJZHNpLXN0YWdpbmcvZHNp X3BoeS5vIFwKLQkJCQlkc2ktc3RhZ2luZy9kc2lfcGh5X2h3X3YyXzAubyBcCi0JCQkJZHNpLXN0 YWdpbmcvZHNpX3BoeV9od192M18wLm8gXAotCQkJCWRzaS1zdGFnaW5nL2RzaV9waHlfdGltaW5n X2NhbGMubyBcCi0JCQkJZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfdjJfMC5vIFwKLQkJCQlk c2ktc3RhZ2luZy9kc2lfcGh5X3RpbWluZ192M18wLm8gXAotCQkJCWRzaS1zdGFnaW5nL2RzaV9j dHJsX2h3X2Ntbi5vIFwKLQkJCQlkc2ktc3RhZ2luZy9kc2lfY3RybF9od18xXzQubyBcCi0JCQkJ ZHNpLXN0YWdpbmcvZHNpX2N0cmxfaHdfMl8wLm8gXAotCQkJCWRzaS1zdGFnaW5nL2RzaV9jdHJs X2h3XzJfMi5vIFwKLQkJCQlkc2ktc3RhZ2luZy9kc2lfY3RybC5vIFwKLQkJCQlkc2ktc3RhZ2lu Zy9kc2lfY2F0YWxvZy5vIFwKLQkJCQlkc2ktc3RhZ2luZy9kc2lfZHJtLm8gXAotCQkJCWRzaS1z dGFnaW5nL2RzaV9kaXNwbGF5Lm8gXAotCQkJCWRzaS1zdGFnaW5nL2RzaV9wYW5lbC5vIFwKLQkJ CQlkc2ktc3RhZ2luZy9kc2lfY2xrX21hbmFnZXIubyBcCi0JCQkJZHNpLXN0YWdpbmcvZHNpX2Rp c3BsYXlfdGVzdC5vCi0KIG1zbS0kKENPTkZJR19EUk1fTVNNX0RTSV8yOE5NX1BIWSkgKz0gZHNp L3BoeS9kc2lfcGh5XzI4bm0ubwogbXNtLSQoQ09ORklHX0RSTV9NU01fRFNJXzIwTk1fUEhZKSAr PSBkc2kvcGh5L2RzaV9waHlfMjBubS5vCiBtc20tJChDT05GSUdfRFJNX01TTV9EU0lfMjhOTV84 OTYwX1BIWSkgKz0gZHNpL3BoeS9kc2lfcGh5XzI4bm1fODk2MC5vCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jYXRhbG9nLmMgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jYXRhbG9nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDNjYjY1OWEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3Rh Z2luZy9kc2lfY2F0YWxvZy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQxICswLDAgQEAKLS8qCi0g KiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2 ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0g KgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KSAi bXNtLWRzaS1jYXRhbG9nOlslc10gIiBmbXQsIF9fZnVuY19fCi0jaW5jbHVkZSA8bGludXgvZXJy bm8uaD4KLQotI2luY2x1ZGUgImRzaV9jYXRhbG9nLmgiCi0KLS8qKgotICogZHNpX2NhdGFsb2df Y21uX2luaXQoKSAtIGNhdGFsb2cgaW5pdCBmb3IgZHNpIGNvbnRyb2xsZXIgdjEuNAotICovCi1z dGF0aWMgdm9pZCBkc2lfY2F0YWxvZ19jbW5faW5pdChzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmws Ci0JCWVudW0gZHNpX2N0cmxfdmVyc2lvbiB2ZXJzaW9uKQotewotCS8qIGNvbW1vbiBmdW5jdGlv bnMgKi8KLQljdHJsLT5vcHMuaG9zdF9zZXR1cCAgICAgICAgICAgICA9IGRzaV9jdHJsX2h3X2Nt bl9ob3N0X3NldHVwOwotCWN0cmwtPm9wcy52aWRlb19lbmdpbmVfZW4gICAgICAgID0gZHNpX2N0 cmxfaHdfY21uX3ZpZGVvX2VuZ2luZV9lbjsKLQljdHJsLT5vcHMudmlkZW9fZW5naW5lX3NldHVw ICAgICA9IGRzaV9jdHJsX2h3X2Ntbl92aWRlb19lbmdpbmVfc2V0dXA7Ci0JY3RybC0+b3BzLnNl dF92aWRlb190aW1pbmcgICAgICAgPSBkc2lfY3RybF9od19jbW5fc2V0X3ZpZGVvX3RpbWluZzsK LQljdHJsLT5vcHMuc2V0X3RpbWluZ19kYiAgICAgICAgICA9IGRzaV9jdHJsX2h3X2Ntbl9zZXRf dGltaW5nX2RiOwotCWN0cmwtPm9wcy5jbWRfZW5naW5lX3NldHVwICAgICAgID0gZHNpX2N0cmxf aHdfY21uX2NtZF9lbmdpbmVfc2V0dXA7Ci0JY3RybC0+b3BzLnNldHVwX2NtZF9zdHJlYW0gICAg ICAgPSBkc2lfY3RybF9od19jbW5fc2V0dXBfY21kX3N0cmVhbTsKLQljdHJsLT5vcHMuY3RybF9l biAgICAgICAgICAgICAgICA9IGRzaV9jdHJsX2h3X2Ntbl9jdHJsX2VuOwotCWN0cmwtPm9wcy5j bWRfZW5naW5lX2VuICAgICAgICAgID0gZHNpX2N0cmxfaHdfY21uX2NtZF9lbmdpbmVfZW47Ci0J Y3RybC0+b3BzLnBoeV9zd19yZXNldCAgICAgICAgICAgPSBkc2lfY3RybF9od19jbW5fcGh5X3N3 X3Jlc2V0OwotCWN0cmwtPm9wcy5zb2Z0X3Jlc2V0ICAgICAgICAgICAgID0gZHNpX2N0cmxfaHdf Y21uX3NvZnRfcmVzZXQ7Ci0JY3RybC0+b3BzLmtpY2tvZmZfY29tbWFuZCAgICAgICAgPSBkc2lf Y3RybF9od19jbW5fa2lja29mZl9jb21tYW5kOwotCWN0cmwtPm9wcy5raWNrb2ZmX2ZpZm9fY29t bWFuZCAgID0gZHNpX2N0cmxfaHdfY21uX2tpY2tvZmZfZmlmb19jb21tYW5kOwotCWN0cmwtPm9w cy5yZXNldF9jbWRfZmlmbyAgICAgICAgID0gZHNpX2N0cmxfaHdfY21uX3Jlc2V0X2NtZF9maWZv OwotCWN0cmwtPm9wcy50cmlnZ2VyX2NvbW1hbmRfZG1hICAgID0gZHNpX2N0cmxfaHdfY21uX3Ry aWdnZXJfY29tbWFuZF9kbWE7Ci0JY3RybC0+b3BzLmdldF9pbnRlcnJ1cHRfc3RhdHVzICAgPSBk c2lfY3RybF9od19jbW5fZ2V0X2ludGVycnVwdF9zdGF0dXM7Ci0JY3RybC0+b3BzLmdldF9lcnJv cl9zdGF0dXMgICAgICAgPSBkc2lfY3RybF9od19jbW5fZ2V0X2Vycm9yX3N0YXR1czsKLQljdHJs LT5vcHMuY2xlYXJfZXJyb3Jfc3RhdHVzICAgICA9IGRzaV9jdHJsX2h3X2Ntbl9jbGVhcl9lcnJv cl9zdGF0dXM7Ci0JY3RybC0+b3BzLmNsZWFyX2ludGVycnVwdF9zdGF0dXMgPQotCQlkc2lfY3Ry bF9od19jbW5fY2xlYXJfaW50ZXJydXB0X3N0YXR1czsKLQljdHJsLT5vcHMuZW5hYmxlX3N0YXR1 c19pbnRlcnJ1cHRzID0KLQkJZHNpX2N0cmxfaHdfY21uX2VuYWJsZV9zdGF0dXNfaW50ZXJydXB0 czsKLQljdHJsLT5vcHMuZW5hYmxlX2Vycm9yX2ludGVycnVwdHMgPQotCQlkc2lfY3RybF9od19j bW5fZW5hYmxlX2Vycm9yX2ludGVycnVwdHM7Ci0JY3RybC0+b3BzLnZpZGVvX3Rlc3RfcGF0dGVy bl9zZXR1cCA9Ci0JCWRzaV9jdHJsX2h3X2Ntbl92aWRlb190ZXN0X3BhdHRlcm5fc2V0dXA7Ci0J Y3RybC0+b3BzLmNtZF90ZXN0X3BhdHRlcm5fc2V0dXAgPQotCQlkc2lfY3RybF9od19jbW5fY21k X3Rlc3RfcGF0dGVybl9zZXR1cDsKLQljdHJsLT5vcHMudGVzdF9wYXR0ZXJuX2VuYWJsZSAgICA9 IGRzaV9jdHJsX2h3X2Ntbl90ZXN0X3BhdHRlcm5fZW5hYmxlOwotCWN0cmwtPm9wcy50cmlnZ2Vy X2NtZF90ZXN0X3BhdHRlcm4gPQotCQlkc2lfY3RybF9od19jbW5fdHJpZ2dlcl9jbWRfdGVzdF9w YXR0ZXJuOwotCWN0cmwtPm9wcy5jbGVhcl9waHkwX2xuX2VyciA9IGRzaV9jdHJsX2h3X2RsbjBf cGh5X2VycjsKLQljdHJsLT5vcHMucGh5X3Jlc2V0X2NvbmZpZyA9IGRzaV9jdHJsX2h3X2Ntbl9w aHlfcmVzZXRfY29uZmlnOwotCWN0cmwtPm9wcy5zZXR1cF9taXNyID0gZHNpX2N0cmxfaHdfY21u X3NldHVwX21pc3I7Ci0JY3RybC0+b3BzLmNvbGxlY3RfbWlzciA9IGRzaV9jdHJsX2h3X2Ntbl9j b2xsZWN0X21pc3I7Ci0JY3RybC0+b3BzLmRlYnVnX2J1cyA9IGRzaV9jdHJsX2h3X2Ntbl9kZWJ1 Z19idXM7Ci0KLQlzd2l0Y2ggKHZlcnNpb24pIHsKLQljYXNlIERTSV9DVFJMX1ZFUlNJT05fMV80 OgotCQljdHJsLT5vcHMuc2V0dXBfbGFuZV9tYXAgPSBkc2lfY3RybF9od18xNF9zZXR1cF9sYW5l X21hcDsKLQkJY3RybC0+b3BzLnVscHNfb3BzLnVscHNfcmVxdWVzdCA9IGRzaV9jdHJsX2h3XzE0 X3VscHNfcmVxdWVzdDsKLQkJY3RybC0+b3BzLnVscHNfb3BzLnVscHNfZXhpdCA9IGRzaV9jdHJs X2h3XzE0X3VscHNfZXhpdDsKLQkJY3RybC0+b3BzLndhaXRfZm9yX2xhbmVfaWRsZSA9Ci0JCQlk c2lfY3RybF9od18xNF93YWl0X2Zvcl9sYW5lX2lkbGU7Ci0JCWN0cmwtPm9wcy51bHBzX29wcy5n ZXRfbGFuZXNfaW5fdWxwcyA9Ci0JCQlkc2lfY3RybF9od18xNF9nZXRfbGFuZXNfaW5fdWxwczsK LQkJY3RybC0+b3BzLmNsYW1wX2VuYWJsZSA9IGRzaV9jdHJsX2h3XzE0X2NsYW1wX2VuYWJsZTsK LQkJY3RybC0+b3BzLmNsYW1wX2Rpc2FibGUgPSBkc2lfY3RybF9od18xNF9jbGFtcF9kaXNhYmxl OwotCQljdHJsLT5vcHMucmVnX2R1bXBfdG9fYnVmZmVyID0KLQkJCWRzaV9jdHJsX2h3XzE0X3Jl Z19kdW1wX3RvX2J1ZmZlcjsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQ1RSTF9WRVJTSU9OXzJfMDoK LQkJY3RybC0+b3BzLnNldHVwX2xhbmVfbWFwID0gZHNpX2N0cmxfaHdfMjBfc2V0dXBfbGFuZV9t YXA7Ci0JCWN0cmwtPm9wcy53YWl0X2Zvcl9sYW5lX2lkbGUgPQotCQkJZHNpX2N0cmxfaHdfMjBf d2FpdF9mb3JfbGFuZV9pZGxlOwotCQljdHJsLT5vcHMucmVnX2R1bXBfdG9fYnVmZmVyID0KLQkJ CWRzaV9jdHJsX2h3XzIwX3JlZ19kdW1wX3RvX2J1ZmZlcjsKLQkJY3RybC0+b3BzLnVscHNfb3Bz LnVscHNfcmVxdWVzdCA9IE5VTEw7Ci0JCWN0cmwtPm9wcy51bHBzX29wcy51bHBzX2V4aXQgPSBO VUxMOwotCQljdHJsLT5vcHMudWxwc19vcHMuZ2V0X2xhbmVzX2luX3VscHMgPSBOVUxMOwotCQlj dHJsLT5vcHMuY2xhbXBfZW5hYmxlID0gTlVMTDsKLQkJY3RybC0+b3BzLmNsYW1wX2Rpc2FibGUg PSBOVUxMOwotCQlicmVhazsKLQljYXNlIERTSV9DVFJMX1ZFUlNJT05fMl8yOgotCQljdHJsLT5v cHMucGh5X3Jlc2V0X2NvbmZpZyA9IGRzaV9jdHJsX2h3XzIyX3BoeV9yZXNldF9jb25maWc7Ci0J CWN0cmwtPm9wcy5zZXR1cF9sYW5lX21hcCA9IGRzaV9jdHJsX2h3XzIwX3NldHVwX2xhbmVfbWFw OwotCQljdHJsLT5vcHMud2FpdF9mb3JfbGFuZV9pZGxlID0KLQkJCWRzaV9jdHJsX2h3XzIwX3dh aXRfZm9yX2xhbmVfaWRsZTsKLQkJY3RybC0+b3BzLnJlZ19kdW1wX3RvX2J1ZmZlciA9Ci0JCQlk c2lfY3RybF9od18yMF9yZWdfZHVtcF90b19idWZmZXI7Ci0JCWN0cmwtPm9wcy51bHBzX29wcy51 bHBzX3JlcXVlc3QgPSBOVUxMOwotCQljdHJsLT5vcHMudWxwc19vcHMudWxwc19leGl0ID0gTlVM TDsKLQkJY3RybC0+b3BzLnVscHNfb3BzLmdldF9sYW5lc19pbl91bHBzID0gTlVMTDsKLQkJY3Ry bC0+b3BzLmNsYW1wX2VuYWJsZSA9IE5VTEw7Ci0JCWN0cmwtPm9wcy5jbGFtcF9kaXNhYmxlID0g TlVMTDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotfQotCi0vKioKLSAqIGRz aV9jYXRhbG9nX2N0cmxfc2V0dXAoKSAtIHJldHVybiBjYXRhbG9nIGluZm8gZm9yIGRzaSBjb250 cm9sbGVyCi0gKiBAY3RybDogICAgICAgIFBvaW50ZXIgdG8gRFNJIGNvbnRyb2xsZXIgaHcgb2Jq ZWN0LgotICogQHZlcnNpb246ICAgICBEU0kgY29udHJvbGxlciB2ZXJzaW9uLgotICogQGluZGV4 OiAgICAgICBEU0kgY29udHJvbGxlciBpbnN0YW5jZSBJRC4KLSAqIEBwaHlfaXNvbGF0aW9uX2Vu YWJsZWQ6ICAgICAgIERTSSBjb250cm9sbGVyIHdvcmtzIGlzb2xhdGVkIGZyb20gcGh5LgotICoK LSAqIFRoaXMgZnVuY3Rpb24gc2V0dXBzIHRoZSBjYXRhbG9nIGluZm9ybWF0aW9uIGluIHRoZSBk c2lfY3RybF9odyBvYmplY3QuCi0gKgotICogcmV0dXJuOiBlcnJvciBjb2RlIGZvciBmYWlsdXJl IGFuZCAwIGZvciBzdWNjZXNzLgotICovCi1pbnQgZHNpX2NhdGFsb2dfY3RybF9zZXR1cChzdHJ1 Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCSAgIGVudW0gZHNpX2N0cmxfdmVyc2lvbiB2ZXJzaW9u LCB1MzIgaW5kZXgsCi0JCSAgIGJvb2wgcGh5X2lzb2xhdGlvbl9lbmFibGVkKQotewotCWludCBy YyA9IDA7Ci0KLQlpZiAodmVyc2lvbiA9PSBEU0lfQ1RSTF9WRVJTSU9OX1VOS05PV04gfHwKLQkg ICAgdmVyc2lvbiA+PSBEU0lfQ1RSTF9WRVJTSU9OX01BWCkgewotCQlwcl9lcnIoIlVuc3VwcG9y dGVkIHZlcnNpb246ICVkXG4iLCB2ZXJzaW9uKTsKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQl9Ci0K LQljdHJsLT5pbmRleCA9IGluZGV4OwotCXNldF9iaXQoRFNJX0NUUkxfVklERU9fVFBHLCBjdHJs LT5mZWF0dXJlX21hcCk7Ci0Jc2V0X2JpdChEU0lfQ1RSTF9DTURfVFBHLCBjdHJsLT5mZWF0dXJl X21hcCk7Ci0Jc2V0X2JpdChEU0lfQ1RSTF9WQVJJQUJMRV9SRUZSRVNIX1JBVEUsIGN0cmwtPmZl YXR1cmVfbWFwKTsKLQlzZXRfYml0KERTSV9DVFJMX0RZTkFNSUNfUkVGUkVTSCwgY3RybC0+ZmVh dHVyZV9tYXApOwotCXNldF9iaXQoRFNJX0NUUkxfREVTS0VXX0NBTElCLCBjdHJsLT5mZWF0dXJl X21hcCk7Ci0Jc2V0X2JpdChEU0lfQ1RSTF9EUEhZLCBjdHJsLT5mZWF0dXJlX21hcCk7Ci0KLQlz d2l0Y2ggKHZlcnNpb24pIHsKLQljYXNlIERTSV9DVFJMX1ZFUlNJT05fMV80OgotCQlkc2lfY2F0 YWxvZ19jbW5faW5pdChjdHJsLCB2ZXJzaW9uKTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQ1RSTF9W RVJTSU9OXzJfMDoKLQljYXNlIERTSV9DVFJMX1ZFUlNJT05fMl8yOgotCQljdHJsLT5waHlfaXNv bGF0aW9uX2VuYWJsZWQgPSBwaHlfaXNvbGF0aW9uX2VuYWJsZWQ7Ci0JCWRzaV9jYXRhbG9nX2Nt bl9pbml0KGN0cmwsIHZlcnNpb24pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVO T1RTVVBQOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfY2F0YWxvZ19waHlf Ml8wX2luaXQoKSAtIGNhdGFsb2cgaW5pdCBmb3IgRFNJIFBIWSAxNG5tCi0gKi8KLXN0YXRpYyB2 b2lkIGRzaV9jYXRhbG9nX3BoeV8yXzBfaW5pdChzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5KQotewot CXBoeS0+b3BzLnJlZ3VsYXRvcl9lbmFibGUgPSBkc2lfcGh5X2h3X3YyXzBfcmVndWxhdG9yX2Vu YWJsZTsKLQlwaHktPm9wcy5yZWd1bGF0b3JfZGlzYWJsZSA9IGRzaV9waHlfaHdfdjJfMF9yZWd1 bGF0b3JfZGlzYWJsZTsKLQlwaHktPm9wcy5lbmFibGUgPSBkc2lfcGh5X2h3X3YyXzBfZW5hYmxl OwotCXBoeS0+b3BzLmRpc2FibGUgPSBkc2lfcGh5X2h3X3YyXzBfZGlzYWJsZTsKLQlwaHktPm9w cy5jYWxjdWxhdGVfdGltaW5nX3BhcmFtcyA9Ci0JCWRzaV9waHlfaHdfY2FsY3VsYXRlX3RpbWlu Z19wYXJhbXM7Ci0JcGh5LT5vcHMucGh5X2lkbGVfb24gPSBkc2lfcGh5X2h3X3YyXzBfaWRsZV9v bjsKLQlwaHktPm9wcy5waHlfaWRsZV9vZmYgPSBkc2lfcGh5X2h3X3YyXzBfaWRsZV9vZmY7Ci0J cGh5LT5vcHMuY2FsY3VsYXRlX3RpbWluZ19wYXJhbXMgPQotCQlkc2lfcGh5X2h3X2NhbGN1bGF0 ZV90aW1pbmdfcGFyYW1zOwotCXBoeS0+b3BzLnBoeV90aW1pbmdfdmFsID0gZHNpX3BoeV9od190 aW1pbmdfdmFsX3YyXzA7Ci19Ci0KLS8qKgotICogZHNpX2NhdGFsb2dfcGh5XzNfMF9pbml0KCkg LSBjYXRhbG9nIGluaXQgZm9yIERTSSBQSFkgMTBubQotICovCi1zdGF0aWMgdm9pZCBkc2lfY2F0 YWxvZ19waHlfM18wX2luaXQoc3RydWN0IGRzaV9waHlfaHcgKnBoeSkKLXsKLQlwaHktPm9wcy5y ZWd1bGF0b3JfZW5hYmxlID0gZHNpX3BoeV9od192M18wX3JlZ3VsYXRvcl9lbmFibGU7Ci0JcGh5 LT5vcHMucmVndWxhdG9yX2Rpc2FibGUgPSBkc2lfcGh5X2h3X3YzXzBfcmVndWxhdG9yX2Rpc2Fi bGU7Ci0JcGh5LT5vcHMuZW5hYmxlID0gZHNpX3BoeV9od192M18wX2VuYWJsZTsKLQlwaHktPm9w cy5kaXNhYmxlID0gZHNpX3BoeV9od192M18wX2Rpc2FibGU7Ci0JcGh5LT5vcHMuY2FsY3VsYXRl X3RpbWluZ19wYXJhbXMgPQotCQlkc2lfcGh5X2h3X2NhbGN1bGF0ZV90aW1pbmdfcGFyYW1zOwot CXBoeS0+b3BzLnVscHNfb3BzLndhaXRfZm9yX2xhbmVfaWRsZSA9Ci0JCWRzaV9waHlfaHdfdjNf MF93YWl0X2Zvcl9sYW5lX2lkbGU7Ci0JcGh5LT5vcHMudWxwc19vcHMudWxwc19yZXF1ZXN0ID0K LQkJZHNpX3BoeV9od192M18wX3VscHNfcmVxdWVzdDsKLQlwaHktPm9wcy51bHBzX29wcy51bHBz X2V4aXQgPQotCQlkc2lfcGh5X2h3X3YzXzBfdWxwc19leGl0OwotCXBoeS0+b3BzLnVscHNfb3Bz LmdldF9sYW5lc19pbl91bHBzID0KLQkJZHNpX3BoeV9od192M18wX2dldF9sYW5lc19pbl91bHBz OwotCXBoeS0+b3BzLnVscHNfb3BzLmlzX2xhbmVzX2luX3VscHMgPQotCQlkc2lfcGh5X2h3X3Yz XzBfaXNfbGFuZXNfaW5fdWxwczsKLQlwaHktPm9wcy5waHlfdGltaW5nX3ZhbCA9IGRzaV9waHlf aHdfdGltaW5nX3ZhbF92M18wOwotfQotCi0vKioKLSAqIGRzaV9jYXRhbG9nX3BoeV9zZXR1cCgp IC0gcmV0dXJuIGNhdGFsb2cgaW5mbyBmb3IgZHNpIHBoeSBoYXJkd2FyZQotICogQGN0cmw6ICAg ICAgICBQb2ludGVyIHRvIERTSSBQSFkgaHcgb2JqZWN0LgotICogQHZlcnNpb246ICAgICBEU0kg UEhZIHZlcnNpb24uCi0gKiBAaW5kZXg6ICAgICAgIERTSSBQSFkgaW5zdGFuY2UgSUQuCi0gKgot ICogVGhpcyBmdW5jdGlvbiBzZXR1cHMgdGhlIGNhdGFsb2cgaW5mb3JtYXRpb24gaW4gdGhlIGRz aV9waHlfaHcgb2JqZWN0LgotICoKLSAqIHJldHVybjogZXJyb3IgY29kZSBmb3IgZmFpbHVyZSBh bmQgMCBmb3Igc3VjY2Vzcy4KLSAqLwotaW50IGRzaV9jYXRhbG9nX3BoeV9zZXR1cChzdHJ1Y3Qg ZHNpX3BoeV9odyAqcGh5LAotCQkJICBlbnVtIGRzaV9waHlfdmVyc2lvbiB2ZXJzaW9uLAotCQkJ ICB1MzIgaW5kZXgpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICh2ZXJzaW9uID09IERTSV9QSFlf VkVSU0lPTl9VTktOT1dOIHx8Ci0JICAgIHZlcnNpb24gPj0gRFNJX1BIWV9WRVJTSU9OX01BWCkg ewotCQlwcl9lcnIoIlVuc3VwcG9ydGVkIHZlcnNpb246ICVkXG4iLCB2ZXJzaW9uKTsKLQkJcmV0 dXJuIC1FTk9UU1VQUDsKLQl9Ci0KLQlwaHktPmluZGV4ID0gaW5kZXg7Ci0Jc2V0X2JpdChEU0lf UEhZX0RQSFksIHBoeS0+ZmVhdHVyZV9tYXApOwotCi0JZHNpX3BoeV90aW1pbmdfY2FsY19pbml0 KHBoeSwgdmVyc2lvbik7Ci0KLQlzd2l0Y2ggKHZlcnNpb24pIHsKLQljYXNlIERTSV9QSFlfVkVS U0lPTl8yXzA6Ci0JCWRzaV9jYXRhbG9nX3BoeV8yXzBfaW5pdChwaHkpOwotCQlicmVhazsKLQlj YXNlIERTSV9QSFlfVkVSU0lPTl8zXzA6Ci0JCWRzaV9jYXRhbG9nX3BoeV8zXzBfaW5pdChwaHkp OwotCQlicmVhazsKLQljYXNlIERTSV9QSFlfVkVSU0lPTl8wXzBfSFBNOgotCWNhc2UgRFNJX1BI WV9WRVJTSU9OXzBfMF9MUE06Ci0JY2FzZSBEU0lfUEhZX1ZFUlNJT05fMV8wOgotCWRlZmF1bHQ6 Ci0JCXJldHVybiAtRU5PVFNVUFA7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi0KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2NhdGFsb2cuaCBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2NhdGFsb2cuaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMGE0NmFlMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2RzaS1zdGFnaW5nL2RzaV9jYXRhbG9nLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBA QAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0g KiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0jaWZuZGVmIF9EU0lf Q0FUQUxPR19IXwotI2RlZmluZSBfRFNJX0NBVEFMT0dfSF8KLQotI2luY2x1ZGUgImRzaV9jdHJs X2h3LmgiCi0jaW5jbHVkZSAiZHNpX3BoeV9ody5oIgotCi0vKioKLSAqIGRzaV9jYXRhbG9nX2N0 cmxfc2V0dXAoKSAtIHJldHVybiBjYXRhbG9nIGluZm8gZm9yIGRzaSBjb250cm9sbGVyCi0gKiBA Y3RybDogICAgICAgIFBvaW50ZXIgdG8gRFNJIGNvbnRyb2xsZXIgaHcgb2JqZWN0LgotICogQHZl cnNpb246ICAgICBEU0kgY29udHJvbGxlciB2ZXJzaW9uLgotICogQGluZGV4OiAgICAgICBEU0kg Y29udHJvbGxlciBpbnN0YW5jZSBJRC4KLSAqIEBwaHlfaXNvbGF0aW9uX2VuYWJsZWQ6ICAgICAg IERTSSBjb250cm9sbGVyIHdvcmtzIGlzb2xhdGVkIGZyb20gcGh5LgotICoKLSAqIFRoaXMgZnVu Y3Rpb24gc2V0dXBzIHRoZSBjYXRhbG9nIGluZm9ybWF0aW9uIGluIHRoZSBkc2lfY3RybF9odyBv YmplY3QuCi0gKgotICogcmV0dXJuOiBlcnJvciBjb2RlIGZvciBmYWlsdXJlIGFuZCAwIGZvciBz dWNjZXNzLgotICovCi1pbnQgZHNpX2NhdGFsb2dfY3RybF9zZXR1cChzdHJ1Y3QgZHNpX2N0cmxf aHcgKmN0cmwsCi0JCSAgIGVudW0gZHNpX2N0cmxfdmVyc2lvbiB2ZXJzaW9uLCB1MzIgaW5kZXgs Ci0JCSAgIGJvb2wgcGh5X2lzb2xhdGlvbl9lbmFibGVkKTsKLQotLyoqCi0gKiBkc2lfY2F0YWxv Z19waHlfc2V0dXAoKSAtIHJldHVybiBjYXRhbG9nIGluZm8gZm9yIGRzaSBwaHkgaGFyZHdhcmUK LSAqIEBwaHk6ICAgICAgICBQb2ludGVyIHRvIERTSSBQSFkgaHcgb2JqZWN0LgotICogQHZlcnNp b246ICAgICBEU0kgUEhZIHZlcnNpb24uCi0gKiBAaW5kZXg6ICAgICAgIERTSSBQSFkgaW5zdGFu Y2UgSUQuCi0gKgotICogVGhpcyBmdW5jdGlvbiBzZXR1cHMgdGhlIGNhdGFsb2cgaW5mb3JtYXRp b24gaW4gdGhlIGRzaV9waHlfaHcgb2JqZWN0LgotICoKLSAqIHJldHVybjogZXJyb3IgY29kZSBm b3IgZmFpbHVyZSBhbmQgMCBmb3Igc3VjY2Vzcy4KLSAqLwotaW50IGRzaV9jYXRhbG9nX3BoeV9z ZXR1cChzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJICBlbnVtIGRzaV9waHlfdmVyc2lvbiB2 ZXJzaW9uLAotCQkJICB1MzIgaW5kZXgpOwotCi0vKioKLSAqIGRzaV9waHlfdGltaW5nX2NhbGNf aW5pdCgpIC0gaW5pdGlhbGl6ZSBpbmZvIGZvciBEU0kgUEhZIHRpbWluZyBjYWxjdWxhdGlvbnMK LSAqIEBwaHk6ICAgICAgICBQb2ludGVyIHRvIERTSSBQSFkgaHcgb2JqZWN0LgotICogQHZlcnNp b246ICAgICBEU0kgUEhZIHZlcnNpb24uCi0gKgotICogVGhpcyBmdW5jdGlvbiBzZXR1cHMgdGhl IGNhdGFsb2cgaW5mb3JtYXRpb24gaW4gdGhlIGRzaV9waHlfaHcgb2JqZWN0LgotICoKLSAqIHJl dHVybjogZXJyb3IgY29kZSBmb3IgZmFpbHVyZSBhbmQgMCBmb3Igc3VjY2Vzcy4KLSAqLwotaW50 IGRzaV9waHlfdGltaW5nX2NhbGNfaW5pdChzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCWVudW0g ZHNpX3BoeV92ZXJzaW9uIHZlcnNpb24pOwotCi0vKioKLSAqIGRzaV9waHlfaHdfY2FsY3VsYXRl X3RpbWluZ19wYXJhbXMoKSAtIERTSSBQSFkgdGltaW5nIHBhcmFtZXRlciBjYWxjdWxhdGlvbnMK LSAqIEBwaHk6ICAgICAgICBQb2ludGVyIHRvIERTSSBQSFkgaHcgb2JqZWN0LgotICogQG1vZGU6 ICAgICAgIERTSSBtb2RlIGluZm9ybWF0aW9uLgotICogQGhvc3Q6ICAgICAgIERTSSBob3N0IGNv bmZpZ3VyYXRpb24uCi0gKiBAdGltaW5nOiAgICAgRFNJIHBoeSBsYW5lIGNvbmZpZ3VyYXRpb25z LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2V0dXBzIHRoZSBjYXRhbG9nIGluZm9ybWF0aW9uIGlu IHRoZSBkc2lfcGh5X2h3IG9iamVjdC4KLSAqCi0gKiByZXR1cm46IGVycm9yIGNvZGUgZm9yIGZh aWx1cmUgYW5kIDAgZm9yIHN1Y2Nlc3MuCi0gKi8KLWludCBkc2lfcGh5X2h3X2NhbGN1bGF0ZV90 aW1pbmdfcGFyYW1zKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0JCQkJCSAgICBzdHJ1Y3QgZHNp X21vZGVfaW5mbyAqbW9kZSwKLQlzdHJ1Y3QgZHNpX2hvc3RfY29tbW9uX2NmZyAqaG9zdCwKLQlz dHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzICp0aW1pbmcpOwotCi0vKiBEZWZpbml0aW9ucyBm b3IgMTRubSBQSFkgaGFyZHdhcmUgZHJpdmVyICovCi12b2lkIGRzaV9waHlfaHdfdjJfMF9yZWd1 bGF0b3JfZW5hYmxlKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0JCQkJICAgICAgc3RydWN0IGRz aV9waHlfcGVyX2xhbmVfY2ZncyAqY2ZnKTsKLXZvaWQgZHNpX3BoeV9od192Ml8wX3JlZ3VsYXRv cl9kaXNhYmxlKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHkpOwotdm9pZCBkc2lfcGh5X2h3X3YyXzBf ZW5hYmxlKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksIHN0cnVjdCBkc2lfcGh5X2NmZyAqY2ZnKTsK LXZvaWQgZHNpX3BoeV9od192Ml8wX2Rpc2FibGUoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwgc3Ry dWN0IGRzaV9waHlfY2ZnICpjZmcpOwotdm9pZCBkc2lfcGh5X2h3X3YyXzBfaWRsZV9vbihzdHJ1 Y3QgZHNpX3BoeV9odyAqcGh5LCBzdHJ1Y3QgZHNpX3BoeV9jZmcgKmNmZyk7Ci12b2lkIGRzaV9w aHlfaHdfdjJfMF9pZGxlX29mZihzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5KTsKLWludCBkc2lfcGh5 X2h3X3RpbWluZ192YWxfdjJfMChzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzICp0aW1pbmdf Y2ZnLAotCQl1MzIgKnRpbWluZ192YWwsIHUzMiBzaXplKTsKLQotLyogRGVmaW5pdGlvbnMgZm9y IDEwbm0gUEhZIGhhcmR3YXJlIGRyaXZlciAqLwotdm9pZCBkc2lfcGh5X2h3X3YzXzBfcmVndWxh dG9yX2VuYWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJCSAgICAgIHN0cnVjdCBkc2lf cGh5X3Blcl9sYW5lX2NmZ3MgKmNmZyk7Ci12b2lkIGRzaV9waHlfaHdfdjNfMF9yZWd1bGF0b3Jf ZGlzYWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5KTsKLXZvaWQgZHNpX3BoeV9od192M18wX2Vu YWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LCBzdHJ1Y3QgZHNpX3BoeV9jZmcgKmNmZyk7Ci12 b2lkIGRzaV9waHlfaHdfdjNfMF9kaXNhYmxlKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksIHN0cnVj dCBkc2lfcGh5X2NmZyAqY2ZnKTsKLWludCBkc2lfcGh5X2h3X3YzXzBfd2FpdF9mb3JfbGFuZV9p ZGxlKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksIHUzMiBsYW5lcyk7Ci12b2lkIGRzaV9waHlfaHdf djNfMF91bHBzX3JlcXVlc3Qoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJc3RydWN0IGRzaV9w aHlfY2ZnICpjZmcsIHUzMiBsYW5lcyk7Ci12b2lkIGRzaV9waHlfaHdfdjNfMF91bHBzX2V4aXQo c3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCXN0cnVjdCBkc2lfcGh5X2NmZyAqY2ZnLCB1MzIg bGFuZXMpOwotdTMyIGRzaV9waHlfaHdfdjNfMF9nZXRfbGFuZXNfaW5fdWxwcyhzdHJ1Y3QgZHNp X3BoeV9odyAqcGh5KTsKLWJvb2wgZHNpX3BoeV9od192M18wX2lzX2xhbmVzX2luX3VscHModTMy IGxhbmVzLCB1MzIgdWxwc19sYW5lcyk7Ci1pbnQgZHNpX3BoeV9od190aW1pbmdfdmFsX3YzXzAo c3RydWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyAqdGltaW5nX2NmZywKLQkJdTMyICp0aW1pbmdf dmFsLCB1MzIgc2l6ZSk7Ci0KLS8qIERTSSBjb250cm9sbGVyIGNvbW1vbiBvcHMgKi8KLXUzMiBk c2lfY3RybF9od19jbW5fZ2V0X2ludGVycnVwdF9zdGF0dXMoc3RydWN0IGRzaV9jdHJsX2h3ICpj dHJsKTsKLXZvaWQgZHNpX2N0cmxfaHdfY21uX2RlYnVnX2J1cyhzdHJ1Y3QgZHNpX2N0cmxfaHcg KmN0cmwpOwotdm9pZCBkc2lfY3RybF9od19jbW5fY2xlYXJfaW50ZXJydXB0X3N0YXR1cyhzdHJ1 Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIHUzMiBpbnRzKTsKLXZvaWQgZHNpX2N0cmxfaHdfY21uX2Vu YWJsZV9zdGF0dXNfaW50ZXJydXB0cyhzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJCSAg ICAgdTMyIGludHMpOwotCi11NjQgZHNpX2N0cmxfaHdfY21uX2dldF9lcnJvcl9zdGF0dXMoc3Ry dWN0IGRzaV9jdHJsX2h3ICpjdHJsKTsKLXZvaWQgZHNpX2N0cmxfaHdfY21uX2NsZWFyX2Vycm9y X3N0YXR1cyhzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIHU2NCBlcnJvcnMpOwotdm9pZCBkc2lf Y3RybF9od19jbW5fZW5hYmxlX2Vycm9yX2ludGVycnVwdHMoc3RydWN0IGRzaV9jdHJsX2h3ICpj dHJsLAotCQkJCQkgICAgdTY0IGVycm9ycyk7Ci0KLXZvaWQgZHNpX2N0cmxfaHdfY21uX3ZpZGVv X3Rlc3RfcGF0dGVybl9zZXR1cChzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJIGVudW0g ZHNpX3Rlc3RfcGF0dGVybiB0eXBlLAotCQkJCSB1MzIgaW5pdF92YWwpOwotdm9pZCBkc2lfY3Ry bF9od19jbW5fY21kX3Rlc3RfcGF0dGVybl9zZXR1cChzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmws Ci0JCQkgICAgICAgZW51bSBkc2lfdGVzdF9wYXR0ZXJuICB0eXBlLAotCQkJICAgICAgIHUzMiBp bml0X3ZhbCwKLQkJCSAgICAgICB1MzIgc3RyZWFtX2lkKTsKLXZvaWQgZHNpX2N0cmxfaHdfY21u X3Rlc3RfcGF0dGVybl9lbmFibGUoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCBib29sIGVuYWJs ZSk7Ci12b2lkIGRzaV9jdHJsX2h3X2Ntbl90cmlnZ2VyX2NtZF90ZXN0X3BhdHRlcm4oc3RydWN0 IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCSB1MzIgc3RyZWFtX2lkKTsKLQotdm9pZCBkc2lfY3Ry bF9od19jbW5faG9zdF9zZXR1cChzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkgICAgICAg c3RydWN0IGRzaV9ob3N0X2NvbW1vbl9jZmcgKmNvbmZpZyk7Ci12b2lkIGRzaV9jdHJsX2h3X2Nt bl92aWRlb19lbmdpbmVfZW4oc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCBib29sIG9uKTsKLXZv aWQgZHNpX2N0cmxfaHdfY21uX3ZpZGVvX2VuZ2luZV9zZXR1cChzdHJ1Y3QgZHNpX2N0cmxfaHcg KmN0cmwsCi0JCQkJICAgICAgIHN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnICpjb21tb25fY2Zn LAotCQkJCSAgICAgICBzdHJ1Y3QgZHNpX3ZpZGVvX2VuZ2luZV9jZmcgKmNmZyk7Ci12b2lkIGRz aV9jdHJsX2h3X2Ntbl9zZXRfdmlkZW9fdGltaW5nKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwK LQkJCSBzdHJ1Y3QgZHNpX21vZGVfaW5mbyAqbW9kZSk7Ci12b2lkIGRzaV9jdHJsX2h3X2Ntbl9z ZXRfdGltaW5nX2RiKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkgICAgIGJvb2wgZW5h YmxlKTsKLXZvaWQgZHNpX2N0cmxfaHdfY21uX2NtZF9lbmdpbmVfc2V0dXAoc3RydWN0IGRzaV9j dHJsX2h3ICpjdHJsLAotCQkJCSAgICAgc3RydWN0IGRzaV9ob3N0X2NvbW1vbl9jZmcgKmNvbW1v bl9jZmcsCi0JCQkJICAgICBzdHJ1Y3QgZHNpX2NtZF9lbmdpbmVfY2ZnICpjZmcpOwotCi12b2lk IGRzaV9jdHJsX2h3X2Ntbl9jdHJsX2VuKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwgYm9vbCBv bik7Ci12b2lkIGRzaV9jdHJsX2h3X2Ntbl9jbWRfZW5naW5lX2VuKHN0cnVjdCBkc2lfY3RybF9o dyAqY3RybCwgYm9vbCBvbik7Ci0KLXZvaWQgZHNpX2N0cmxfaHdfY21uX3NldHVwX2NtZF9zdHJl YW0oc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCSAgICAgc3RydWN0IGRzaV9tb2RlX2lu Zm8gKm1vZGUsCi0JCQkJICAgICB1MzIgaF9zdHJpZGUsCi0JCQkJICAgICB1MzIgdmNfaWQsCi0J CQkJICAgICBzdHJ1Y3QgZHNpX3JlY3QgKnJvaSk7Ci12b2lkIGRzaV9jdHJsX2h3X2Ntbl9waHlf c3dfcmVzZXQoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsKTsKLXZvaWQgZHNpX2N0cmxfaHdfY21u X3NvZnRfcmVzZXQoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsKTsKLQotdm9pZCBkc2lfY3RybF9o d19jbW5fc2V0dXBfbWlzcihzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQllbnVtIGRzaV9v cF9tb2RlIHBhbmVsX21vZGUsCi0JCQlib29sIGVuYWJsZSwgdTMyIGZyYW1lX2NvdW50KTsKLXUz MiBkc2lfY3RybF9od19jbW5fY29sbGVjdF9taXNyKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwK LQkJCWVudW0gZHNpX29wX21vZGUgcGFuZWxfbW9kZSk7Ci0KLXZvaWQgZHNpX2N0cmxfaHdfY21u X2tpY2tvZmZfY29tbWFuZChzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQlzdHJ1Y3QgZHNp X2N0cmxfY21kX2RtYV9pbmZvICpjbWQsCi0JCQl1MzIgZmxhZ3MpOwotCi12b2lkIGRzaV9jdHJs X2h3X2Ntbl9raWNrb2ZmX2ZpZm9fY29tbWFuZChzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0J CQkgICAgIHN0cnVjdCBkc2lfY3RybF9jbWRfZG1hX2ZpZm9faW5mbyAqY21kLAotCQkJICAgICB1 MzIgZmxhZ3MpOwotdm9pZCBkc2lfY3RybF9od19jbW5fcmVzZXRfY21kX2ZpZm8oc3RydWN0IGRz aV9jdHJsX2h3ICpjdHJsKTsKLXZvaWQgZHNpX2N0cmxfaHdfY21uX3RyaWdnZXJfY29tbWFuZF9k bWEoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsKTsKLXZvaWQgZHNpX2N0cmxfaHdfZGxuMF9waHlf ZXJyKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCk7Ci12b2lkIGRzaV9jdHJsX2h3X2Ntbl9waHlf cmVzZXRfY29uZmlnKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCWJvb2wgZW5hYmxlKTsK LXZvaWQgZHNpX2N0cmxfaHdfMjJfcGh5X3Jlc2V0X2NvbmZpZyhzdHJ1Y3QgZHNpX2N0cmxfaHcg KmN0cmwsCi0JCQlib29sIGVuYWJsZSk7Ci0KLS8qIERlZmluaXRpb25zIHNwZWNpZmljIHRvIDEu NCBEU0kgY29udHJvbGxlciBoYXJkd2FyZSAqLwotaW50IGRzaV9jdHJsX2h3XzE0X3dhaXRfZm9y X2xhbmVfaWRsZShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIHUzMiBsYW5lcyk7Ci12b2lkIGRz aV9jdHJsX2h3XzE0X3NldHVwX2xhbmVfbWFwKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJ ICAgICAgIHN0cnVjdCBkc2lfbGFuZV9tYXAgKmxhbmVfbWFwKTsKLXZvaWQgZHNpX2N0cmxfaHdf MTRfdWxwc19yZXF1ZXN0KHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwgdTMyIGxhbmVzKTsKLXZv aWQgZHNpX2N0cmxfaHdfMTRfdWxwc19leGl0KHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwgdTMy IGxhbmVzKTsKLXUzMiBkc2lfY3RybF9od18xNF9nZXRfbGFuZXNfaW5fdWxwcyhzdHJ1Y3QgZHNp X2N0cmxfaHcgKmN0cmwpOwotCi12b2lkIGRzaV9jdHJsX2h3XzE0X2NsYW1wX2VuYWJsZShzdHJ1 Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJIHUzMiBsYW5lcywKLQkJCQkgYm9vbCBlbmFibGVf dWxwcyk7Ci0KLXZvaWQgZHNpX2N0cmxfaHdfMTRfY2xhbXBfZGlzYWJsZShzdHJ1Y3QgZHNpX2N0 cmxfaHcgKmN0cmwsCi0JCQkJICB1MzIgbGFuZXMsCi0JCQkJICBib29sIGRpc2FibGVfdWxwcyk7 Ci1zc2l6ZV90IGRzaV9jdHJsX2h3XzE0X3JlZ19kdW1wX3RvX2J1ZmZlcihzdHJ1Y3QgZHNpX2N0 cmxfaHcgKmN0cmwsCi0JCQkJCSAgY2hhciAqYnVmLAotCQkJCQkgIHUzMiBzaXplKTsKLQotLyog RGVmaW5pdGlvbnMgc3BlY2lmaWMgdG8gMi4wIERTSSBjb250cm9sbGVyIGhhcmR3YXJlICovCi12 b2lkIGRzaV9jdHJsX2h3XzIwX3NldHVwX2xhbmVfbWFwKHN0cnVjdCBkc2lfY3RybF9odyAqY3Ry bCwKLQkJICAgICAgIHN0cnVjdCBkc2lfbGFuZV9tYXAgKmxhbmVfbWFwKTsKLWludCBkc2lfY3Ry bF9od18yMF93YWl0X2Zvcl9sYW5lX2lkbGUoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCB1MzIg bGFuZXMpOwotc3NpemVfdCBkc2lfY3RybF9od18yMF9yZWdfZHVtcF90b19idWZmZXIoc3RydWN0 IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCQkgIGNoYXIgKmJ1ZiwKLQkJCQkJICB1MzIgc2l6ZSk7 Ci0KLSNlbmRpZiAvKiBfRFNJX0NBVEFMT0dfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Nsay5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kt c3RhZ2luZy9kc2lfY2xrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ZmNhMDQu LjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY2xrLmgK KysrIC9kZXYvbnVsbApAQCAtMSwyNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAx Ni0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgotICoKLSAqLwotCi0jaWZuZGVmIF9EU0lfQ0xLX0hfCi0jZGVmaW5lIF9EU0lfQ0xLX0hf Ci0KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9k ZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5o PgotI2luY2x1ZGUgImRwdV9wb3dlcl9oYW5kbGUuaCIKLQotI2RlZmluZSBNQVhfU1RSSU5HX0xF TiAzMgotI2RlZmluZSBNQVhfRFNJX0NUUkwgMgotCi1lbnVtIGRzaV9jbGtfc3RhdGUgewotCURT SV9DTEtfT0ZGLAotCURTSV9DTEtfT04sCi0JRFNJX0NMS19FQVJMWV9HQVRFLAotfTsKLQotZW51 bSBjbGtfcmVxX2NsaWVudCB7Ci0JRFNJX0NMS19SRVFfTURQX0NMSUVOVCA9IDAsCi0JRFNJX0NM S19SRVFfRFNJX0NMSUVOVCwKLX07Ci0KLWVudW0gZHNpX2xpbmtfY2xrX3R5cGUgewotCURTSV9M SU5LX0VTQ19DTEssCi0JRFNJX0xJTktfQllURV9DTEssCi0JRFNJX0xJTktfUElYX0NMSywKLQlE U0lfTElOS19CWVRFX0lOVEZfQ0xLLAotCURTSV9MSU5LX0NMS19NQVgsCi19OwotCi1lbnVtIGRz aV9jbGtfdHlwZSB7Ci0JRFNJX0NPUkVfQ0xLID0gQklUKDApLAotCURTSV9MSU5LX0NMSyA9IEJJ VCgxKSwKLQlEU0lfQUxMX0NMS1MgPSAoQklUKDApIHwgQklUKDEpKSwKLQlEU0lfQ0xLU19NQVgg PSBCSVQoMiksCi19OwotCi1zdHJ1Y3QgZHNpX2Nsa19jdHJsX2luZm8gewotCWVudW0gZHNpX2Ns a190eXBlIGNsa190eXBlOwotCWVudW0gZHNpX2Nsa19zdGF0ZSBjbGtfc3RhdGU7Ci0JZW51bSBj bGtfcmVxX2NsaWVudCBjbGllbnQ7Ci19OwotCi1zdHJ1Y3QgY2xrX2N0cmxfY2IgewotCXZvaWQg KnByaXY7Ci0JaW50ICgqZHNpX2Nsa19jYikodm9pZCAqcHJpdiwgc3RydWN0IGRzaV9jbGtfY3Ry bF9pbmZvIGNsa19jdHJsX2luZm8pOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX2NvcmVfY2xr X2luZm8gLSBDb3JlIGNsb2NrIGluZm9ybWF0aW9uIGZvciBEU0kgaGFyZHdhcmUKLSAqIEBtZHBf Y29yZV9jbGs6ICAgICAgICBIYW5kbGUgdG8gTURQIGNvcmUgY2xvY2suCi0gKiBAaWZhY2VfY2xr OiAgICAgICAgICAgSGFuZGxlIHRvIE1EUCBpbnRlcmZhY2UgY2xvY2suCi0gKiBAY29yZV9tbXNz X2NsazogICAgICAgSGFuZGxlIHRvIE1NU1MgY29yZSBjbG9jay4KLSAqIEBidXNfY2xrOiAgICAg ICAgICAgICBIYW5kbGUgdG8gYnVzIGNsb2NrLgotICogQG1ub2NfY2xrOiAgICAgICAgICAgIEhh bmRsZSB0byBNTVNTIE5PQyBjbG9jay4KLSAqIEBkc2lfY29yZV9jbGllbnQ6CSBQb2ludGVyIHRv IERQVSBwb3dlciBjbGllbnQKLSAqIEBwaGFuZGxlOiAgICAgICAgICAgICBQb2ludGVyIHRvIERQ VSBwb3dlciBoYW5kbGUKLSAqLwotc3RydWN0IGRzaV9jb3JlX2Nsa19pbmZvIHsKLQlzdHJ1Y3Qg Y2xrICptZHBfY29yZV9jbGs7Ci0Jc3RydWN0IGNsayAqaWZhY2VfY2xrOwotCXN0cnVjdCBjbGsg KmNvcmVfbW1zc19jbGs7Ci0Jc3RydWN0IGNsayAqYnVzX2NsazsKLQlzdHJ1Y3QgY2xrICptbm9j X2NsazsKLQlzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqZHNpX2NvcmVfY2xpZW50OwotCXN0cnVj dCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX2xp bmtfY2xrX2luZm8gLSBMaW5rIGNsb2NrIGluZm9ybWF0aW9uIGZvciBEU0kgaGFyZHdhcmUuCi0g KiBAYnl0ZV9jbGs6ICAgICAgICBIYW5kbGUgdG8gRFNJIGJ5dGUgY2xvY2suCi0gKiBAcGl4ZWxf Y2xrOiAgICAgICBIYW5kbGUgdG8gRFNJIHBpeGVsIGNsb2NrLgotICogQGVzY19jbGs6ICAgICAg ICAgSGFuZGxlIHRvIERTSSBlc2NhcGUgY2xvY2suCi0gKiBAYnl0ZV9pbnRmX2NsazogICBIYW5k bGUgdG8gRFNJIGJ5dGUgaW50Zi4gY2xvY2suCi0gKi8KLXN0cnVjdCBkc2lfbGlua19jbGtfaW5m byB7Ci0Jc3RydWN0IGNsayAqYnl0ZV9jbGs7Ci0Jc3RydWN0IGNsayAqcGl4ZWxfY2xrOwotCXN0 cnVjdCBjbGsgKmVzY19jbGs7Ci0Jc3RydWN0IGNsayAqYnl0ZV9pbnRmX2NsazsKLX07Ci0KLS8q KgotICogc3RydWN0IGxpbmtfY2xrX2ZyZXEgLSBDbG9jayBmcmVxdWVuY3kgaW5mb3JtYXRpb24g Zm9yIExpbmsgY2xvY2tzCi0gKiBAYnl0ZV9jbGtfcmF0ZTogICBGcmVxdWVuY3kgb2YgRFNJIGJ5 dGUgY2xvY2sgaW4gS0h6LgotICogQHBpeGVsX2Nsa19yYXRlOiAgRnJlcXVlbmN5IG9mIERTSSBw aXhlbCBjbG9jayBpbiBLSHouCi0gKiBAZXNjX2Nsa19yYXRlOiAgICBGcmVxdWVuY3kgb2YgRFNJ IGVzY2FwZSBjbG9jayBpbiBLSHouCi0gKi8KLXN0cnVjdCBsaW5rX2Nsa19mcmVxIHsKLQl1MzIg Ynl0ZV9jbGtfcmF0ZTsKLQl1MzIgcGl4X2Nsa19yYXRlOwotCXUzMiBlc2NfY2xrX3JhdGU7Ci19 OwotCi0vKioKLSAqIHR5cGVkZWYgKnByZV9jbG9ja29mZl9jYigpIC0gQ2FsbGJhY2sgYmVmb3Jl IGNsb2NrIGlzIHR1cm5lZCBvZmYKLSAqIEBwcml2OiBwcml2YXRlIGRhdGEgcG9pbnRlci4KLSAq IEBjbGtfdHlwZTogY2xvY2sgd2hpY2ggaXMgYmVpbmcgdHVybmVkIG9mZi4KLSAqIEBuZXdfc3Rh dGU6IG5leHQgc3RhdGUgZm9yIHRoZSBjbG9jay4KLSAqCi0gKiBAcmV0dXJuOiBlcnJvciBjb2Rl LgotICovCi10eXBlZGVmIGludCAoKnByZV9jbG9ja29mZl9jYikodm9pZCAqcHJpdiwKLQkJCSAg ICAgICBlbnVtIGRzaV9jbGtfdHlwZSBjbGtfdHlwZSwKLQkJCSAgICAgICBlbnVtIGRzaV9jbGtf c3RhdGUgbmV3X3N0YXRlKTsKLQotLyoqCi0gKiB0eXBlZGVmICpwb3N0X2Nsb2Nrb2ZmX2NiKCkg LSBDYWxsYmFjayBhZnRlciBjbG9jayBpcyB0dXJuZWQgb2ZmCi0gKiBAcHJpdjogcHJpdmF0ZSBk YXRhIHBvaW50ZXIuCi0gKiBAY2xrX3R5cGU6IGNsb2NrIHdoaWNoIHdhcyB0dXJuZWQgb2ZmLgot ICogQGN1cnJfc3RhdGU6IGN1cnJlbnQgc3RhdGUgZm9yIHRoZSBjbG9jay4KLSAqCi0gKiBAcmV0 dXJuOiBlcnJvciBjb2RlLgotICovCi10eXBlZGVmIGludCAoKnBvc3RfY2xvY2tvZmZfY2IpKHZv aWQgKnByaXYsCi0JCQkJZW51bSBkc2lfY2xrX3R5cGUgY2xrX3R5cGUsCi0JCQkJZW51bSBkc2lf Y2xrX3N0YXRlIGN1cnJfc3RhdGUpOwotCi0vKioKLSAqIHR5cGVkZWYgKnBvc3RfY2xvY2tvbl9j YigpIC0gQ2FsbGJhY2sgYWZ0ZXIgY2xvY2sgaXMgdHVybmVkIG9uCi0gKiBAcHJpdjogcHJpdmF0 ZSBkYXRhIHBvaW50ZXIuCi0gKiBAY2xrX3R5cGU6IGNsb2NrIHdoaWNoIHdhcyB0dXJuZWQgb24u Ci0gKiBAY3Vycl9zdGF0ZTogY3VycmVudCBzdGF0ZSBmb3IgdGhlIGNsb2NrLgotICoKLSAqIEBy ZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLXR5cGVkZWYgaW50ICgqcG9zdF9jbG9ja29uX2NiKSh2 b2lkICpwcml2LAotCQkJICAgICAgIGVudW0gZHNpX2Nsa190eXBlIGNsa190eXBlLAotCQkJICAg ICAgIGVudW0gZHNpX2Nsa19zdGF0ZSBjdXJyX3N0YXRlKTsKLQotLyoqCi0gKiB0eXBlZGVmICpw cmVfY2xvY2tvbl9jYigpIC0gQ2FsbGJhY2sgYmVmb3JlIGNsb2NrIGlzIHR1cm5lZCBvbgotICog QHByaXY6IHByaXZhdGUgZGF0YSBwb2ludGVyLgotICogQGNsa190eXBlOiBjbG9jayB3aGljaCBp cyBiZWluZyB0dXJuZWQgb24uCi0gKiBAbmV3X3N0YXRlOiBuZXh0IHN0YXRlIGZvciB0aGUgY2xv Y2suCi0gKgotICogQHJldHVybjogZXJyb3IgY29kZS4KLSAqLwotdHlwZWRlZiBpbnQgKCpwcmVf Y2xvY2tvbl9jYikodm9pZCAqcHJpdiwKLQkJCSAgICAgIGVudW0gZHNpX2Nsa190eXBlIGNsa190 eXBlLAotCQkJICAgICAgZW51bSBkc2lfY2xrX3N0YXRlIG5ld19zdGF0ZSk7Ci0KLQotLyoqCi0g KiBzdHJ1Y3QgZHNpX2Nsa19pbmZvIC0gY2xvY2sgaW5mb3JtYXRpb24gZm9yIERTSSBoYXJkd2Fy ZS4KLSAqIEBuYW1lOiAgICAgICAgICAgICAgICAgICAgY2xpZW50IG5hbWUuCi0gKiBAY19jbGtz W01BWF9EU0lfQ1RSTF0gICAgIGFycmF5IG9mIGNvcmUgY2xvY2sgY29uZmlndXJhdGlvbnMKLSAq IEBsX2Nsa3NbTUFYX0RTSV9DVFJMXSAgICAgYXJyYXkgb2YgbGluayBjbG9jayBjb25maWd1cmF0 aW9ucwotICogQGJ1c19oYW5kbGVbTUFYX0RTSV9DVFJMXSBhcnJheSBvZiBidXMgaGFuZGxlcwot ICogQGN0cmxfaW5kZXhbTUFYX0RTSV9DVFJMXSBhcnJheSBvZiBEU0kgY29udHJvbGxlciBpbmRl eGVzIG1hcHBlZAotICogICAgICAgICAgICAgICAgICAgICAgICAgICB0byBjb3JlIGFuZCBsaW5r IGNsb2NrIGNvbmZpZ3VyYXRpb25zCi0gKiBAcHJlX2Nsa29mZl9jYiAgICAgICAgICAgIGNhbGxi YWNrIGJlZm9yZSBjbG9jayBpcyB0dXJuZWQgb2ZmCi0gKiBAcG9zdF9jbGtvZmZfY2IgICAgICAg ICAgIGNhbGxiYWNrIGFmdGVyIGNsb2NrIGlzIHR1cm5lZCBvZmYKLSAqIEBwb3N0X2Nsa29uX2Ni ICAgICAgICAgICAgY2FsbGJhY2sgYWZ0ZXIgY2xvY2sgaXMgdHVybmVkIG9uCi0gKiBAcHJlX2Ns a29uX2NiICAgICAgICAgICAgIGNhbGxiYWNrIGJlZm9yZSBjbG9jayBpcyB0dXJuZWQgb24KLSAq IEBwcml2X2RhdGEgICAgICAgICAgICAgICAgcG9pbnRlciB0byBwcml2YXRlIGRhdGEKLSAqIEBt YXN0ZXJfbmR4ICAgICAgICAgICAgICAgbWFzdGVyIERTSSBjb250cm9sbGVyIGluZGV4Ci0gKiBA ZHNpX2N0cmxfY291bnQgICAgICAgICAgIG51bWJlciBvZiBEU0kgY29udHJvbGxlcnMKLSAqLwot c3RydWN0IGRzaV9jbGtfaW5mbyB7Ci0JY2hhciBuYW1lW01BWF9TVFJJTkdfTEVOXTsKLQlzdHJ1 Y3QgZHNpX2NvcmVfY2xrX2luZm8gY19jbGtzW01BWF9EU0lfQ1RSTF07Ci0Jc3RydWN0IGRzaV9s aW5rX2Nsa19pbmZvIGxfY2xrc1tNQVhfRFNJX0NUUkxdOwotCXUzMiBidXNfaGFuZGxlW01BWF9E U0lfQ1RSTF07Ci0JdTMyIGN0cmxfaW5kZXhbTUFYX0RTSV9DVFJMXTsKLQlwcmVfY2xvY2tvZmZf Y2IgcHJlX2Nsa29mZl9jYjsKLQlwb3N0X2Nsb2Nrb2ZmX2NiIHBvc3RfY2xrb2ZmX2NiOwotCXBv c3RfY2xvY2tvbl9jYiBwb3N0X2Nsa29uX2NiOwotCXByZV9jbG9ja29uX2NiIHByZV9jbGtvbl9j YjsKLQl2b2lkICpwcml2X2RhdGE7Ci0JdTMyIG1hc3Rlcl9uZHg7Ci0JdTMyIGRzaV9jdHJsX2Nv dW50OwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCAtIFBhaXIgb2YgY2xv Y2sgaGFuZGxlcyB0byBkZXNjcmliZSBsaW5rIGNsb2NrcwotICogQGJ5dGVfY2xrOiAgICAgSGFu ZGxlIHRvIERTaSBieXRlIGNsb2NrLgotICogQHBpeGVsX2NsazogICAgSGFuZGxlIHRvIERTSSBw aXhlbCBjbG9jay4KLSAqLwotc3RydWN0IGRzaV9jbGtfbGlua19zZXQgewotCXN0cnVjdCBjbGsg KmJ5dGVfY2xrOwotCXN0cnVjdCBjbGsgKnBpeGVsX2NsazsKLX07Ci0KLS8qKgotICogZHNpX2Rp c3BsYXlfY2xrX21ncl9yZWdpc3RlcigpIC0gUmVnaXN0ZXIgRFNJIGNsb2NrIG1hbmFnZXIKLSAq IEBpbmZvOiAgICAgU3RydWN0dXJlIGNvbnRhaW5pbmcgRFNJIGNsb2NrIGluZm9ybWF0aW9uCi0g Ki8KLXZvaWQgKmRzaV9kaXNwbGF5X2Nsa19tbmdyX3JlZ2lzdGVyKHN0cnVjdCBkc2lfY2xrX2lu Zm8gKmluZm8pOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5X2Nsa19tbmdyX2RlcmVnaXN0ZXIoKSAt IERlcmVnaXN0ZXIgRFNJIGNsb2NrIG1hbmFnZXIKLSAqIEBjbGtfbW5ncjogIERTSSBjbG9jayBt YW5hZ2VyIHBvaW50ZXIKLSAqLwotaW50IGRzaV9kaXNwbGF5X2Nsa19tbmdyX2RlcmVnaXN0ZXIo dm9pZCAqY2xrX21uZ3IpOwotCi0vKioKLSAqIGRzaV9yZWdpc3Rlcl9jbGtfaGFuZGxlKCkgLSBS ZWdpc3RlciBjbG9jayBoYW5kbGUgd2l0aCBEU0kgY2xvY2sgbWFuYWdlcgotICogQGNsa19tbmdy OiAgRFNJIGNsb2NrIG1hbmFnZXIgcG9pbnRlcgotICogQGNsaWVudDogICAgIERTSSBjbG9jayBj bGllbnQgcG9pbnRlci4KLSAqLwotdm9pZCAqZHNpX3JlZ2lzdGVyX2Nsa19oYW5kbGUodm9pZCAq Y2xrX21uZ3IsIGNoYXIgKmNsaWVudCk7Ci0KLS8qKgotICogZHNpX2RlcmVnaXN0ZXJfY2xrX2hh bmRsZSgpIC0gRGVyZWdpc3RlciBjbG9jayBoYW5kbGUgZnJvbSBEU0kgY2xvY2sgbWFuYWdlcgot ICogQGNsaWVudDogICAgIERTSSBjbG9jayBjbGllbnQgcG9pbnRlci4KLSAqCi0gKiByZXR1cm46 IGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlIG9yIDAgZm9yIHN1Y2Nlc3MuCi0gKi8KLWlu dCBkc2lfZGVyZWdpc3Rlcl9jbGtfaGFuZGxlKHZvaWQgKmNsaWVudCk7Ci0KLS8qKgotICogZHNp X2Rpc3BsYXlfY2xrX2N0cmwoKSAtIHNldCBmcmVxdWVuY2llcyBmb3IgbGluayBjbGtzCi0gKiBA aGFuZGxlOiAgICAgSGFuZGxlIG9mIGRlc2lyZWQgRFNJIGNsb2NrIGNsaWVudC4KLSAqIEBjbGtf dHlwZTogICBDbG9jayB3aGljaCBpcyBiZWluZyBjb250cm9sbGVkLgotICogQGNsa19zdGF0ZTog IERlc2lyZWQgc3RhdGUgb2YgY2xvY2sKLSAqCi0gKiByZXR1cm46IGVycm9yIGNvZGUgaW4gY2Fz ZSBvZiBmYWlsdXJlIG9yIDAgZm9yIHN1Y2Nlc3MuCi0gKi8KLWludCBkc2lfZGlzcGxheV9jbGtf Y3RybCh2b2lkICpoYW5kbGUsCi0JZW51bSBkc2lfY2xrX3R5cGUgY2xrX3R5cGUsIGVudW0gZHNp X2Nsa19zdGF0ZSBjbGtfc3RhdGUpOwotCi0vKioKLSAqIGRzaV9jbGtfc2V0X2xpbmtfZnJlcXVl bmNpZXMoKSAtIHNldCBmcmVxdWVuY2llcyBmb3IgbGluayBjbGtzCi0gKiBAY2xpZW50OiAgICAg RFNJIGNsb2NrIGNsaWVudCBwb2ludGVyLgotICogQGZyZXE6ICAgICAgIFN0cnVjdHVyZSBjb250 YWluaW5nIGxpbmsgY2xvY2sgZnJlcXVlbmNpZXMuCi0gKiBAaW5kZXg6ICAgICAgSW5kZXggb2Yg dGhlIERTSSBjb250cm9sbGVyLgotICoKLSAqIHJldHVybjogZXJyb3IgY29kZSBpbiBjYXNlIG9m IGZhaWx1cmUgb3IgMCBmb3Igc3VjY2Vzcy4KLSAqLwotaW50IGRzaV9jbGtfc2V0X2xpbmtfZnJl cXVlbmNpZXModm9pZCAqY2xpZW50LCBzdHJ1Y3QgbGlua19jbGtfZnJlcSBmcmVxLAotCQkJCQl1 MzIgaW5kZXgpOwotCi0KLS8qKgotICogZHNpX2Nsa19zZXRfcGl4ZWxfY2xrX3JhdGUoKSAtIHNl dCBmcmVxdWVuY3kgZm9yIHBpeGVsIGNsb2NrCi0gKiBAY2xpZW50OiAgICAgICBEU0kgY2xvY2sg Y2xpZW50IHBvaW50ZXIuCi0gKiBAcGl4ZWxfY2xrOiBQaXhlbCBjbG9jayByYXRlIGluIEh6Lgot ICogQGluZGV4OiAgICAgIEluZGV4IG9mIHRoZSBEU0kgY29udHJvbGxlci4KLSAqIHJldHVybjog ZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUgb3IgMCBmb3Igc3VjY2Vzcy4KLSAqLwotaW50 IGRzaV9jbGtfc2V0X3BpeGVsX2Nsa19yYXRlKHZvaWQgKmNsaWVudCwgdTY0IHBpeGVsX2Nsaywg dTMyIGluZGV4KTsKLQotCi0vKioKLSAqIGRzaV9jbGtfc2V0X2J5dGVfY2xrX3JhdGUoKSAtIHNl dCBmcmVxdWVuY3kgZm9yIGJ5dGUgY2xvY2sKLSAqIEBjbGllbnQ6ICAgICAgIERTSSBjbG9jayBj bGllbnQgcG9pbnRlci4KLSAqIEBieXRlX2NsazogUGl4ZWwgY2xvY2sgcmF0ZSBpbiBIei4KLSAq IEBpbmRleDogICAgICBJbmRleCBvZiB0aGUgRFNJIGNvbnRyb2xsZXIuCi0gKiByZXR1cm46IGVy cm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlIG9yIDAgZm9yIHN1Y2Nlc3MuCi0gKi8KLWludCBk c2lfY2xrX3NldF9ieXRlX2Nsa19yYXRlKHZvaWQgKmNsaWVudCwgdTY0IGJ5dGVfY2xrLCB1MzIg aW5kZXgpOwotCi0vKioKLSAqIGRzaV9jbGtfdXBkYXRlX3BhcmVudCgpIC0gdXBkYXRlIHBhcmVu dCBjbG9ja3MgZm9yIHNwZWNpZmllZCBjbG9jawotICogQHBhcmVudDogICAgICAgbGluayBjbG9j ayBwYWlyIHdoaWNoIGFyZSBzZXQgYXMgcGFyZW50LgotICogQGNoaWxkOiAgICAgICAgbGluayBj bG9jayBwYWlyIHdob3NlIHBhcmVudCBoYXMgdG8gYmUgc2V0LgotICovCi1pbnQgZHNpX2Nsa191 cGRhdGVfcGFyZW50KHN0cnVjdCBkc2lfY2xrX2xpbmtfc2V0ICpwYXJlbnQsCi0JCQkgIHN0cnVj dCBkc2lfY2xrX2xpbmtfc2V0ICpjaGlsZCk7Ci0jZW5kaWYgLyogX0RTSV9DTEtfSF8gKi8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Nsa19tYW5hZ2Vy LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jbGtfbWFuYWdlci5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDdmNzU5Li4wMDAwMDAwCi0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Nsa19tYW5hZ2VyLmMKKysrIC9kZXYvbnVs bApAQCAtMSwxMjM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhl IExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g Ki8KLQotI2luY2x1ZGUgPGxpbnV4L29mLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNp bmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSAiZHNpX2Nsay5oIgotCi0jaWZkZWYgQ09O RklHX1FDT01fQlVTX1NDQUxJTkcKLSNpbmNsdWRlIDxsaW51eC9tc20tYnVzLmg+Ci0jZW5kaWYK LQotc3RydWN0IGRzaV9jb3JlX2Nsa3MgewotCXN0cnVjdCBkc2lfY29yZV9jbGtfaW5mbyBjbGtz OwotCXUzMiBidXNfaGFuZGxlOwotfTsKLQotc3RydWN0IGRzaV9saW5rX2Nsa3MgewotCXN0cnVj dCBkc2lfbGlua19jbGtfaW5mbyBjbGtzOwotCXN0cnVjdCBsaW5rX2Nsa19mcmVxIGZyZXE7Ci19 OwotCi1zdHJ1Y3QgZHNpX2Nsa19tbmdyIHsKLQljaGFyIG5hbWVbTUFYX1NUUklOR19MRU5dOwot CXN0cnVjdCBtdXRleCBjbGtfbXV0ZXg7Ci0Jc3RydWN0IGxpc3RfaGVhZCBjbGllbnRfbGlzdDsK LQotCXUzMiBkc2lfY3RybF9jb3VudDsKLQl1MzIgbWFzdGVyX25keDsKLQlzdHJ1Y3QgZHNpX2Nv cmVfY2xrcyBjb3JlX2Nsa3NbTUFYX0RTSV9DVFJMXTsKLQlzdHJ1Y3QgZHNpX2xpbmtfY2xrcyBs aW5rX2Nsa3NbTUFYX0RTSV9DVFJMXTsKLQl1MzIgY3RybF9pbmRleFtNQVhfRFNJX0NUUkxdOwot CXUzMiBjb3JlX2Nsa19zdGF0ZTsKLQl1MzIgbGlua19jbGtfc3RhdGU7Ci0KLQlwcmVfY2xvY2tv ZmZfY2IgcHJlX2Nsa29mZl9jYjsKLQlwb3N0X2Nsb2Nrb2ZmX2NiIHBvc3RfY2xrb2ZmX2NiOwot CXBvc3RfY2xvY2tvbl9jYiBwb3N0X2Nsa29uX2NiOwotCXByZV9jbG9ja29uX2NiIHByZV9jbGtv bl9jYjsKLQotCXZvaWQgKnByaXZfZGF0YTsKLX07Ci0KLXN0cnVjdCBkc2lfY2xrX2NsaWVudF9p bmZvIHsKLQljaGFyIG5hbWVbTUFYX1NUUklOR19MRU5dOwotCXUzMiBjb3JlX3JlZmNvdW50Owot CXUzMiBsaW5rX3JlZmNvdW50OwotCXUzMiBjb3JlX2Nsa19zdGF0ZTsKLQl1MzIgbGlua19jbGtf c3RhdGU7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBkc2lfY2xrX21uZ3IgKm1u Z3I7Ci19OwotCi1zdGF0aWMgaW50IF9nZXRfY2xrX21uZ3JfaW5kZXgoc3RydWN0IGRzaV9jbGtf bW5nciAqbW5nciwKLQkJCQl1MzIgZHNpX2N0cmxfaW5kZXgsCi0JCQkJdTMyICpjbGtfbW5ncl9p bmRleCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBtbmdyLT5kc2lfY3RybF9jb3Vu dDsgaSsrKSB7Ci0JCWlmIChtbmdyLT5jdHJsX2luZGV4W2ldID09IGRzaV9jdHJsX2luZGV4KSB7 Ci0JCQkqY2xrX21uZ3JfaW5kZXggPSBpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlyZXR1 cm4gLUVJTlZBTDsKLX0KLQotLyoqCi0gKiBkc2lfY2xrX3NldF9saW5rX2ZyZXF1ZW5jaWVzKCkg LSBzZXQgZnJlcXVlbmNpZXMgZm9yIGxpbmsgY2xrcwotICogQGNsa3M6ICAgICAgICAgTGluayBj bG9jayBpbmZvcm1hdGlvbgotICogQHBpeGVsX2NsazogICAgcGl4ZWwgY2xvY2sgZnJlcXVlbmN5 IGluIEtIei4KLSAqIEBieXRlX2NsazogICAgIEJ5dGUgY2xvY2sgZnJlcXVlbmN5IGluIEtIei4K LSAqIEBlc2NfY2xrOiAgICAgIEVzY2FwZSBjbG9jayBmcmVxdWVuY3kgaW4gS0h6LgotICoKLSAq IHJldHVybjogZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUgb3IgMCBmb3Igc3VjY2Vzcy4K LSAqLwotaW50IGRzaV9jbGtfc2V0X2xpbmtfZnJlcXVlbmNpZXModm9pZCAqY2xpZW50LCBzdHJ1 Y3QgbGlua19jbGtfZnJlcSBmcmVxLAotCQkJCXUzMiBpbmRleCkKLXsKLQlpbnQgcmMgPSAwLCBj bGtfbW5ncl9pbmRleCA9IDA7Ci0Jc3RydWN0IGRzaV9jbGtfY2xpZW50X2luZm8gKmMgPSBjbGll bnQ7Ci0Jc3RydWN0IGRzaV9jbGtfbW5nciAqbW5ncjsKLQotCWlmICghY2xpZW50KSB7Ci0JCXBy X2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltbmdy ID0gYy0+bW5ncjsKLQlyYyA9IF9nZXRfY2xrX21uZ3JfaW5kZXgobW5nciwgaW5kZXgsICZjbGtf bW5ncl9pbmRleCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIG1hcCBjb250cm9s IGluZGV4ICVkXG4iLCBpbmRleCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW1lbWNweSgm bW5nci0+bGlua19jbGtzW2Nsa19tbmdyX2luZGV4XS5mcmVxLCAmZnJlcSwKLQkJc2l6ZW9mKHN0 cnVjdCBsaW5rX2Nsa19mcmVxKSk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogZHNpX2Ns a19zZXRfcGl4ZWxfY2xrX3JhdGUoKSAtIHNldCBmcmVxdWVuY3kgZm9yIHBpeGVsIGNsb2NrCi0g KiBAY2xrczogICAgICBEU0kgbGluayBjbG9jayBpbmZvcm1hdGlvbi4KLSAqIEBwaXhlbF9jbGs6 IFBpeGVsIGNsb2NrIHJhdGUgaW4gS0h6LgotICoKLSAqIHJldHVybjogZXJyb3IgY29kZSBpbiBj YXNlIG9mIGZhaWx1cmUgb3IgMCBmb3Igc3VjY2Vzcy4KLSAqLwotaW50IGRzaV9jbGtfc2V0X3Bp eGVsX2Nsa19yYXRlKHZvaWQgKmNsaWVudCwgdTY0IHBpeGVsX2NsaywgdTMyIGluZGV4KQotewot CWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9jbGtfY2xpZW50X2luZm8gKmMgPSBjbGllbnQ7Ci0J c3RydWN0IGRzaV9jbGtfbW5nciAqbW5ncjsKLQotCW1uZ3IgPSBjLT5tbmdyOwotCXJjID0gY2xr X3NldF9yYXRlKG1uZ3ItPmxpbmtfY2xrc1tpbmRleF0uY2xrcy5waXhlbF9jbGssIHBpeGVsX2Ns ayk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoImZhaWxlZCB0byBzZXQgY2xrIHJhdGUgZm9yIHBpeGVs IGNsaywgcmM9JWRcbiIsIHJjKTsKLQllbHNlCi0JCW1uZ3ItPmxpbmtfY2xrc1tpbmRleF0uZnJl cS5waXhfY2xrX3JhdGUgPSBwaXhlbF9jbGs7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICog ZHNpX2Nsa19zZXRfYnl0ZV9jbGtfcmF0ZSgpIC0gc2V0IGZyZXF1ZW5jeSBmb3IgYnl0ZSBjbG9j awotICogQGNsaWVudDogICAgICAgRFNJIGNsb2NrIGNsaWVudCBwb2ludGVyLgotICogQGJ5dGVf Y2xrOiBQaXhlbCBjbG9jayByYXRlIGluIEh6LgotICogQGluZGV4OiAgICAgIEluZGV4IG9mIHRo ZSBEU0kgY29udHJvbGxlci4KLSAqIHJldHVybjogZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1 cmUgb3IgMCBmb3Igc3VjY2Vzcy4KLSAqLwotaW50IGRzaV9jbGtfc2V0X2J5dGVfY2xrX3JhdGUo dm9pZCAqY2xpZW50LCB1NjQgYnl0ZV9jbGssIHUzMiBpbmRleCkKLXsKLQlpbnQgcmMgPSAwOwot CXN0cnVjdCBkc2lfY2xrX2NsaWVudF9pbmZvICpjID0gY2xpZW50OwotCXN0cnVjdCBkc2lfY2xr X21uZ3IgKm1uZ3I7Ci0KLQltbmdyID0gYy0+bW5ncjsKLQlyYyA9IGNsa19zZXRfcmF0ZShtbmdy LT5saW5rX2Nsa3NbaW5kZXhdLmNsa3MuYnl0ZV9jbGssIGJ5dGVfY2xrKTsKLQlpZiAocmMpCi0J CXByX2VycigiZmFpbGVkIHRvIHNldCBjbGsgcmF0ZSBmb3IgYnl0ZSBjbGssIHJjPSVkXG4iLCBy Yyk7Ci0JZWxzZQotCQltbmdyLT5saW5rX2Nsa3NbaW5kZXhdLmZyZXEuYnl0ZV9jbGtfcmF0ZSA9 IGJ5dGVfY2xrOwotCi0JcmV0dXJuIHJjOwotCi19Ci0KLS8qKgotICogZHNpX2Nsa191cGRhdGVf cGFyZW50KCkgLSB1cGRhdGUgcGFyZW50IGNsb2NrcyBmb3Igc3BlY2lmaWVkIGNsb2NrCi0gKiBA cGFyZW50OiAgICAgICBsaW5rIGNsb2NrIHBhaXIgd2hpY2ggYXJlIHNldCBhcyBwYXJlbnQuCi0g KiBAY2hpbGQ6ICAgICAgICBsaW5rIGNsb2NrIHBhaXIgd2hvc2UgcGFyZW50IGhhcyB0byBiZSBz ZXQuCi0gKi8KLWludCBkc2lfY2xrX3VwZGF0ZV9wYXJlbnQoc3RydWN0IGRzaV9jbGtfbGlua19z ZXQgKnBhcmVudCwKLQkJCSAgc3RydWN0IGRzaV9jbGtfbGlua19zZXQgKmNoaWxkKQotewotCWlu dCByYyA9IDA7Ci0KLQlyYyA9IGNsa19zZXRfcGFyZW50KGNoaWxkLT5ieXRlX2NsaywgcGFyZW50 LT5ieXRlX2Nsayk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHNldCBieXRlIGNs ayBwYXJlbnRcbiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gY2xrX3NldF9wYXJlbnQo Y2hpbGQtPnBpeGVsX2NsaywgcGFyZW50LT5waXhlbF9jbGspOwotCWlmIChyYykgewotCQlwcl9l cnIoImZhaWxlZCB0byBzZXQgcGl4ZWwgY2xrIHBhcmVudFxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0J fQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX2NvcmVfY2xrX3N0YXJ0KHN0cnVj dCBkc2lfY29yZV9jbGtzICpjX2Nsa3MpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmIChjX2Nsa3Mt PmNsa3MubWRwX2NvcmVfY2xrKSB7Ci0JCXJjID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNfY2xrcy0+ Y2xrcy5tZHBfY29yZV9jbGspOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIGVu YWJsZSBtZHBfY29yZV9jbGssIHJjPSVkXG4iLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0J fQotCi0JaWYgKGNfY2xrcy0+Y2xrcy5tbm9jX2NsaykgewotCQlyYyA9IGNsa19wcmVwYXJlX2Vu YWJsZShjX2Nsa3MtPmNsa3MubW5vY19jbGspOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFp bGVkIHRvIGVuYWJsZSBtbm9jX2NsaywgcmM9JWRcbiIsIHJjKTsKLQkJCWdvdG8gZXJyb3JfZGlz YWJsZV9jb3JlX2NsazsKLQkJfQotCX0KLQotCWlmIChjX2Nsa3MtPmNsa3MuaWZhY2VfY2xrKSB7 Ci0JCXJjID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNfY2xrcy0+Y2xrcy5pZmFjZV9jbGspOwotCQlp ZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSBpZmFjZV9jbGssIHJjPSVkXG4i LCByYyk7Ci0JCQlnb3RvIGVycm9yX2Rpc2FibGVfbW5vY19jbGs7Ci0JCX0KLQl9Ci0KLQlpZiAo Y19jbGtzLT5jbGtzLmJ1c19jbGspIHsKLQkJcmMgPSBjbGtfcHJlcGFyZV9lbmFibGUoY19jbGtz LT5jbGtzLmJ1c19jbGspOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIGVuYWJs ZSBidXNfY2xrLCByYz0lZFxuIiwgcmMpOwotCQkJZ290byBlcnJvcl9kaXNhYmxlX2lmYWNlX2Ns azsKLQkJfQotCX0KLQotCWlmIChjX2Nsa3MtPmNsa3MuY29yZV9tbXNzX2NsaykgewotCQlyYyA9 IGNsa19wcmVwYXJlX2VuYWJsZShjX2Nsa3MtPmNsa3MuY29yZV9tbXNzX2Nsayk7Ci0JCWlmIChy YykgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gZW5hYmxlIGNvcmVfbW1zc19jbGssIHJjPSVkXG4i LCByYyk7Ci0JCQlnb3RvIGVycm9yX2Rpc2FibGVfYnVzX2NsazsKLQkJfQotCX0KLQotI2lmZGVm IENPTkZJR19RQ09NX0JVU19TQ0FMSU5HCi0JaWYgKGNfY2xrcy0+YnVzX2hhbmRsZSkgewotCQly YyA9IG1zbV9idXNfc2NhbGVfY2xpZW50X3VwZGF0ZV9yZXF1ZXN0KGNfY2xrcy0+YnVzX2hhbmRs ZSwgMSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJidXMgc2NhbGUgY2xpZW50IGVuYWJsZSBm YWlsZWQsIHJjPSVkXG4iLCByYyk7Ci0JCQlnb3RvIGVycm9yX2Rpc2FibGVfbW1zc19jbGs7Ci0J CX0KLQl9Ci0jZW5kaWYKLQlyZXR1cm4gcmM7Ci0KLSNpZmRlZiBDT05GSUdfUUNPTV9CVVNfU0NB TElORwotZXJyb3JfZGlzYWJsZV9tbXNzX2NsazoKLQlpZiAoY19jbGtzLT5jbGtzLmNvcmVfbW1z c19jbGspCi0JCWNsa19kaXNhYmxlX3VucHJlcGFyZShjX2Nsa3MtPmNsa3MuY29yZV9tbXNzX2Ns ayk7Ci0jZW5kaWYKLQotZXJyb3JfZGlzYWJsZV9idXNfY2xrOgotCWlmIChjX2Nsa3MtPmNsa3Mu YnVzX2NsaykKLQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNfY2xrcy0+Y2xrcy5idXNfY2xrKTsK LWVycm9yX2Rpc2FibGVfaWZhY2VfY2xrOgotCWlmIChjX2Nsa3MtPmNsa3MuaWZhY2VfY2xrKQot CQljbGtfZGlzYWJsZV91bnByZXBhcmUoY19jbGtzLT5jbGtzLmlmYWNlX2Nsayk7Ci1lcnJvcl9k aXNhYmxlX21ub2NfY2xrOgotCWlmIChjX2Nsa3MtPmNsa3MubW5vY19jbGspCi0JCWNsa19kaXNh YmxlX3VucHJlcGFyZShjX2Nsa3MtPmNsa3MubW5vY19jbGspOwotZXJyb3JfZGlzYWJsZV9jb3Jl X2NsazoKLQlpZiAoY19jbGtzLT5jbGtzLm1kcF9jb3JlX2NsaykKLQkJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKGNfY2xrcy0+Y2xrcy5tZHBfY29yZV9jbGspOwotZXJyb3I6Ci0JcmV0dXJuIHJjOwot fQotCi1pbnQgZHNpX2NvcmVfY2xrX3N0b3Aoc3RydWN0IGRzaV9jb3JlX2Nsa3MgKmNfY2xrcykK LXsKLQlpbnQgcmMgPSAwOwotCi0jaWZkZWYgQ09ORklHX1FDT01fQlVTX1NDQUxJTkcKLQlpZiAo Y19jbGtzLT5idXNfaGFuZGxlKSB7Ci0JCXJjID0gbXNtX2J1c19zY2FsZV9jbGllbnRfdXBkYXRl X3JlcXVlc3QoY19jbGtzLT5idXNfaGFuZGxlLCAwKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIo ImJ1cyBzY2FsZSBjbGllbnQgZGlzYWJsZSBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Ci0JCQlyZXR1 cm4gcmM7Ci0JCX0KLQl9Ci0jZW5kaWYKLQotCWlmIChjX2Nsa3MtPmNsa3MuY29yZV9tbXNzX2Ns aykKLQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNfY2xrcy0+Y2xrcy5jb3JlX21tc3NfY2xrKTsK LQotCWlmIChjX2Nsa3MtPmNsa3MuYnVzX2NsaykKLQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNf Y2xrcy0+Y2xrcy5idXNfY2xrKTsKLQotCWlmIChjX2Nsa3MtPmNsa3MuaWZhY2VfY2xrKQotCQlj bGtfZGlzYWJsZV91bnByZXBhcmUoY19jbGtzLT5jbGtzLmlmYWNlX2Nsayk7Ci0KLQlpZiAoY19j bGtzLT5jbGtzLm1ub2NfY2xrKQotCQljbGtfZGlzYWJsZV91bnByZXBhcmUoY19jbGtzLT5jbGtz Lm1ub2NfY2xrKTsKLQotCWlmIChjX2Nsa3MtPmNsa3MubWRwX2NvcmVfY2xrKQotCQljbGtfZGlz YWJsZV91bnByZXBhcmUoY19jbGtzLT5jbGtzLm1kcF9jb3JlX2Nsayk7Ci0KLQlyZXR1cm4gcmM7 Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2xpbmtfY2xrX3NldF9yYXRlKHN0cnVjdCBkc2lfbGlua19j bGtzICpsX2Nsa3MpCi17Ci0JaW50IHJjID0gMDsKLQotCXJjID0gY2xrX3NldF9yYXRlKGxfY2xr cy0+Y2xrcy5lc2NfY2xrLCBsX2Nsa3MtPmZyZXEuZXNjX2Nsa19yYXRlKTsKLQlpZiAocmMpIHsK LQkJcHJfZXJyKCJjbGtfc2V0X3JhdGUgZmFpbGVkIGZvciBlc2NfY2xrIHJjID0gJWRcbiIsIHJj KTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGNsa19zZXRfcmF0ZShsX2Nsa3MtPmNsa3Mu Ynl0ZV9jbGssIGxfY2xrcy0+ZnJlcS5ieXRlX2Nsa19yYXRlKTsKLQlpZiAocmMpIHsKLQkJcHJf ZXJyKCJjbGtfc2V0X3JhdGUgZmFpbGVkIGZvciBieXRlX2NsayByYyA9ICVkXG4iLCByYyk7Ci0J CWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBjbGtfc2V0X3JhdGUobF9jbGtzLT5jbGtzLnBpeGVs X2NsaywgbF9jbGtzLT5mcmVxLnBpeF9jbGtfcmF0ZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vycigi Y2xrX3NldF9yYXRlIGZhaWxlZCBmb3IgcGl4ZWxfY2xrIHJjID0gJWRcbiIsIHJjKTsKLQkJZ290 byBlcnJvcjsKLQl9Ci0KLQkvKgotCSAqIElmIGJ5dGVfaW50Zl9jbGsgaXMgcHJlc2VudCwgc2V0 IHJhdGUgZm9yIHRoYXQgdG9vLgotCSAqIEZvciBEUEhZOiBieXRlX2ludGZfY2xrX3JhdGUgPSBi eXRlX2Nsa19yYXRlIC8gMgotCSAqIHRvZG86IHRoaXMgbmVlZHMgdG8gYmUgcmV2aXNpdGVkIHdo ZW4gc3VwcG9ydCBmb3IgQ1BIWSBpcyBhZGRlZAotCSAqLwotCWlmIChsX2Nsa3MtPmNsa3MuYnl0 ZV9pbnRmX2NsaykgewotCQlyYyA9IGNsa19zZXRfcmF0ZShsX2Nsa3MtPmNsa3MuYnl0ZV9pbnRm X2NsaywKLQkJCShsX2Nsa3MtPmZyZXEuYnl0ZV9jbGtfcmF0ZSAvIDIpKTsKLQkJaWYgKHJjKSB7 Ci0JCQlwcl9lcnIoInNldF9yYXRlIGZhaWxlZCBmb3IgYnl0ZV9pbnRmX2NsayByYyA9ICVkXG4i LAotCQkJCXJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci1lcnJvcjoKLQlyZXR1cm4gcmM7 Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2xpbmtfY2xrX3ByZXBhcmUoc3RydWN0IGRzaV9saW5rX2Ns a3MgKmxfY2xrcykKLXsKLQlpbnQgcmMgPSAwOwotCi0JcmMgPSBjbGtfcHJlcGFyZShsX2Nsa3Mt PmNsa3MuZXNjX2Nsayk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIHByZXBhcmUg ZHNpIGVzYyBjbGssIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXNjX2Nsa19lcnI7Ci0JfQotCi0J cmMgPSBjbGtfcHJlcGFyZShsX2Nsa3MtPmNsa3MuYnl0ZV9jbGspOwotCWlmIChyYykgewotCQlw cl9lcnIoIkZhaWxlZCB0byBwcmVwYXJlIGRzaSBieXRlIGNsaywgcmM9JWRcbiIsIHJjKTsKLQkJ Z290byBieXRlX2Nsa19lcnI7Ci0JfQotCi0JcmMgPSBjbGtfcHJlcGFyZShsX2Nsa3MtPmNsa3Mu cGl4ZWxfY2xrKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gcHJlcGFyZSBkc2kg cGl4ZWwgY2xrLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIHBpeGVsX2Nsa19lcnI7Ci0JfQotCi0J aWYgKGxfY2xrcy0+Y2xrcy5ieXRlX2ludGZfY2xrKSB7Ci0JCXJjID0gY2xrX3ByZXBhcmUobF9j bGtzLT5jbGtzLmJ5dGVfaW50Zl9jbGspOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiRmFpbGVk IHRvIHByZXBhcmUgZHNpIGJ5dGUgaW50ZiBjbGssIHJjPSVkXG4iLAotCQkJCXJjKTsKLQkJCWdv dG8gYnl0ZV9pbnRmX2Nsa19lcnI7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmM7Ci0KLWJ5dGVfaW50 Zl9jbGtfZXJyOgotCWNsa191bnByZXBhcmUobF9jbGtzLT5jbGtzLnBpeGVsX2Nsayk7Ci1waXhl bF9jbGtfZXJyOgotCWNsa191bnByZXBhcmUobF9jbGtzLT5jbGtzLmJ5dGVfY2xrKTsKLWJ5dGVf Y2xrX2VycjoKLQljbGtfdW5wcmVwYXJlKGxfY2xrcy0+Y2xrcy5lc2NfY2xrKTsKLWVzY19jbGtf ZXJyOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgZHNpX2xpbmtfY2xrX3VucHJlcGFy ZShzdHJ1Y3QgZHNpX2xpbmtfY2xrcyAqbF9jbGtzKQotewotCWlmIChsX2Nsa3MtPmNsa3MuYnl0 ZV9pbnRmX2NsaykKLQkJY2xrX3VucHJlcGFyZShsX2Nsa3MtPmNsa3MuYnl0ZV9pbnRmX2Nsayk7 Ci0JY2xrX3VucHJlcGFyZShsX2Nsa3MtPmNsa3MucGl4ZWxfY2xrKTsKLQljbGtfdW5wcmVwYXJl KGxfY2xrcy0+Y2xrcy5ieXRlX2Nsayk7Ci0JY2xrX3VucHJlcGFyZShsX2Nsa3MtPmNsa3MuZXNj X2Nsayk7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2xpbmtfY2xrX2VuYWJsZShzdHJ1Y3QgZHNpX2xp bmtfY2xrcyAqbF9jbGtzKQotewotCWludCByYyA9IDA7Ci0KLQlyYyA9IGNsa19lbmFibGUobF9j bGtzLT5jbGtzLmVzY19jbGspOwotCWlmIChyYykgewotCQlwcl9lcnIoIkZhaWxlZCB0byBlbmFi bGUgZHNpIGVzYyBjbGssIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXNjX2Nsa19lcnI7Ci0JfQot Ci0JcmMgPSBjbGtfZW5hYmxlKGxfY2xrcy0+Y2xrcy5ieXRlX2Nsayk7Ci0JaWYgKHJjKSB7Ci0J CXByX2VycigiRmFpbGVkIHRvIGVuYWJsZSBkc2kgYnl0ZSBjbGssIHJjPSVkXG4iLCByYyk7Ci0J CWdvdG8gYnl0ZV9jbGtfZXJyOwotCX0KLQotCXJjID0gY2xrX2VuYWJsZShsX2Nsa3MtPmNsa3Mu cGl4ZWxfY2xrKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gZW5hYmxlIGRzaSBw aXhlbCBjbGssIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gcGl4ZWxfY2xrX2VycjsKLQl9Ci0KLQlp ZiAobF9jbGtzLT5jbGtzLmJ5dGVfaW50Zl9jbGspIHsKLQkJcmMgPSBjbGtfZW5hYmxlKGxfY2xr cy0+Y2xrcy5ieXRlX2ludGZfY2xrKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIkZhaWxlZCB0 byBlbmFibGUgZHNpIGJ5dGUgaW50ZiBjbGssIHJjPSVkXG4iLAotCQkJCXJjKTsKLQkJCWdvdG8g Ynl0ZV9pbnRmX2Nsa19lcnI7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmM7Ci0KLWJ5dGVfaW50Zl9j bGtfZXJyOgotCWNsa19kaXNhYmxlKGxfY2xrcy0+Y2xrcy5waXhlbF9jbGspOwotcGl4ZWxfY2xr X2VycjoKLQljbGtfZGlzYWJsZShsX2Nsa3MtPmNsa3MuYnl0ZV9jbGspOwotYnl0ZV9jbGtfZXJy OgotCWNsa19kaXNhYmxlKGxfY2xrcy0+Y2xrcy5lc2NfY2xrKTsKLWVzY19jbGtfZXJyOgotCXJl dHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgZHNpX2xpbmtfY2xrX2Rpc2FibGUoc3RydWN0IGRz aV9saW5rX2Nsa3MgKmxfY2xrcykKLXsKLQlpZiAobF9jbGtzLT5jbGtzLmJ5dGVfaW50Zl9jbGsp Ci0JCWNsa19kaXNhYmxlKGxfY2xrcy0+Y2xrcy5ieXRlX2ludGZfY2xrKTsKLQljbGtfZGlzYWJs ZShsX2Nsa3MtPmNsa3MuZXNjX2Nsayk7Ci0JY2xrX2Rpc2FibGUobF9jbGtzLT5jbGtzLnBpeGVs X2Nsayk7Ci0JY2xrX2Rpc2FibGUobF9jbGtzLT5jbGtzLmJ5dGVfY2xrKTsKLX0KLQotLyoqCi0g KiBkc2lfbGlua19jbGtfc3RhcnQoKSAtIGVuYWJsZSBkc2kgbGluayBjbG9ja3MKLSAqLwotaW50 IGRzaV9saW5rX2Nsa19zdGFydChzdHJ1Y3QgZHNpX2xpbmtfY2xrcyAqY2xrcykKLXsKLQlpbnQg cmMgPSAwOwotCi0JcmMgPSBkc2lfbGlua19jbGtfc2V0X3JhdGUoY2xrcyk7Ci0JaWYgKHJjKSB7 Ci0JCXByX2VycigiZmFpbGVkIHRvIHNldCBjbGsgcmF0ZXMsIHJjID0gJWRcbiIsIHJjKTsKLQkJ Z290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9saW5rX2Nsa19wcmVwYXJlKGNsa3MpOwotCWlm IChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBwcmVwYXJlIGxpbmsgY2xrcywgcmMgPSAlZFxu IiwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gZHNpX2xpbmtfY2xrX2VuYWJsZShj bGtzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZW5hYmxlIGxpbmsgY2xrcywg cmMgPSAlZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yX3VucHJlcGFyZTsKLQl9Ci0KLQlwcl9kZWJ1 ZygiTGluayBjbG9ja3MgYXJlIGVuYWJsZWRcbiIpOwotCXJldHVybiByYzsKLWVycm9yX3VucHJl cGFyZToKLQlkc2lfbGlua19jbGtfdW5wcmVwYXJlKGNsa3MpOwotZXJyb3I6Ci0JcmV0dXJuIHJj OwotfQotCi0vKioKLSAqIGRzaV9saW5rX2Nsa19zdG9wKCkgLSBTdG9wIERTSSBsaW5rIGNsb2Nr cy4KLSAqLwotaW50IGRzaV9saW5rX2Nsa19zdG9wKHN0cnVjdCBkc2lfbGlua19jbGtzICpjbGtz KQotewotCWRzaV9saW5rX2Nsa19kaXNhYmxlKGNsa3MpOwotCWRzaV9saW5rX2Nsa191bnByZXBh cmUoY2xrcyk7Ci0KLQlwcl9kZWJ1ZygiTGluayBjbG9ja3MgZGlzYWJsZWRcbiIpOwotCi0JcmV0 dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfY29yZV9jbGtfZW5hYmxlKHN0cnVj dCBkc2lfY29yZV9jbGtzICpjbGtzLAotCXUzMiBjdHJsX2NvdW50LCB1MzIgbWFzdGVyX25keCkK LXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfY29yZV9jbGtzICpjbGssICpt X2Nsa3M7Ci0KLQkvKgotCSAqIEluIGNhc2Ugb2Ygc3BsaXQgRFNJIHVzZWNhc2VzLCB0aGUgY2xv Y2sgZm9yIG1hc3RlciBjb250cm9sbGVyIHNob3VsZAotCSAqIGJlIGVuYWJsZWQgYmVmb3JlIHRo ZSBvdGhlciBjb250cm9sbGVyLiBNYXN0ZXIgY29udHJvbGxlciBpbiB0aGUKLQkgKiBjbG9jayBj b250ZXh0IHJlZmVycyB0byB0aGUgY29udHJvbGxlciB0aGF0IHNvdXJjZXMgdGhlIGNsb2NrLgot CSAqLwotCi0JbV9jbGtzID0gJmNsa3NbbWFzdGVyX25keF07Ci0JcmMgPSBkcHVfcG93ZXJfcmVz b3VyY2VfZW5hYmxlKG1fY2xrcy0+Y2xrcy5waGFuZGxlLAotCQkJbV9jbGtzLT5jbGtzLmRzaV9j b3JlX2NsaWVudCwgdHJ1ZSk7Ci0KLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJQb3dlciByZXNvdXJj ZSBlbmFibGUgZmFpbGVkLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJj ID0gZHNpX2NvcmVfY2xrX3N0YXJ0KG1fY2xrcyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFp bGVkIHRvIHR1cm4gb24gbWFzdGVyIGNsb2NrcywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJv cl9kaXNhYmxlX21hc3Rlcl9yZXNvdXJjZTsKLQl9Ci0KLQkvKiBUdXJuIG9uIHJlc3Qgb2YgdGhl IGNvcmUgY2xvY2tzICovCi0JZm9yIChpID0gMDsgaSA8IGN0cmxfY291bnQ7IGkrKykgewotCQlj bGsgPSAmY2xrc1tpXTsKLQkJaWYgKCFjbGsgfHwgKGNsayA9PSBtX2Nsa3MpKQotCQkJY29udGlu dWU7Ci0KLQkJcmMgPSBkcHVfcG93ZXJfcmVzb3VyY2VfZW5hYmxlKGNsay0+Y2xrcy5waGFuZGxl LAotCQkJCWNsay0+Y2xrcy5kc2lfY29yZV9jbGllbnQsIHRydWUpOwotCQlpZiAocmMpIHsKLQkJ CXByX2VycigiUG93ZXIgcmVzb3VyY2UgZW5hYmxlIGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKLQkJ CWdvdG8gZXJyb3JfZGlzYWJsZV9tYXN0ZXI7Ci0JCX0KLQotCQlyYyA9IGRzaV9jb3JlX2Nsa19z dGFydChjbGspOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHR1cm4gb24gY2xv Y2tzLCByYz0lZFxuIiwgcmMpOwotCQkJKHZvaWQpZHB1X3Bvd2VyX3Jlc291cmNlX2VuYWJsZShj bGstPmNsa3MucGhhbmRsZSwKLQkJCQkJY2xrLT5jbGtzLmRzaV9jb3JlX2NsaWVudCwgZmFsc2Up OwotCQkJZ290byBlcnJvcl9kaXNhYmxlX21hc3RlcjsKLQkJfQotCX0KLQlyZXR1cm4gcmM7Ci1l cnJvcl9kaXNhYmxlX21hc3RlcjoKLQkodm9pZClkc2lfY29yZV9jbGtfc3RvcChtX2Nsa3MpOwot Ci1lcnJvcl9kaXNhYmxlX21hc3Rlcl9yZXNvdXJjZToKLQkodm9pZClkcHVfcG93ZXJfcmVzb3Vy Y2VfZW5hYmxlKG1fY2xrcy0+Y2xrcy5waGFuZGxlLAotCQkJCW1fY2xrcy0+Y2xrcy5kc2lfY29y ZV9jbGllbnQsIGZhbHNlKTsKLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBk c2lfZGlzcGxheV9saW5rX2Nsa19lbmFibGUoc3RydWN0IGRzaV9saW5rX2Nsa3MgKmNsa3MsCi0J dTMyIGN0cmxfY291bnQsIHUzMiBtYXN0ZXJfbmR4KQotewotCWludCByYyA9IDA7Ci0JaW50IGk7 Ci0Jc3RydWN0IGRzaV9saW5rX2Nsa3MgKmNsaywgKm1fY2xrczsKLQotCS8qCi0JICogSW4gY2Fz ZSBvZiBzcGxpdCBEU0kgdXNlY2FzZXMsIHRoZSBjbG9jayBmb3IgbWFzdGVyIGNvbnRyb2xsZXIg c2hvdWxkCi0JICogYmUgZW5hYmxlZCBiZWZvcmUgdGhlIG90aGVyIGNvbnRyb2xsZXIuIE1hc3Rl ciBjb250cm9sbGVyIGluIHRoZQotCSAqIGNsb2NrIGNvbnRleHQgcmVmZXJzIHRvIHRoZSBjb250 cm9sbGVyIHRoYXQgc291cmNlcyB0aGUgY2xvY2suCi0JICovCi0KLQltX2Nsa3MgPSAmY2xrc1tt YXN0ZXJfbmR4XTsKLQotCXJjID0gZHNpX2xpbmtfY2xrX3N0YXJ0KG1fY2xrcyk7Ci0JaWYgKHJj KSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHR1cm4gb24gbWFzdGVyIGNsb2NrcywgcmM9JWRcbiIs IHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkvKiBUdXJuIG9uIHJlc3Qgb2YgdGhlIGNvcmUg Y2xvY2tzICovCi0JZm9yIChpID0gMDsgaSA8IGN0cmxfY291bnQ7IGkrKykgewotCQljbGsgPSAm Y2xrc1tpXTsKLQkJaWYgKCFjbGsgfHwgKGNsayA9PSBtX2Nsa3MpKQotCQkJY29udGludWU7Ci0K LQkJcmMgPSBkc2lfbGlua19jbGtfc3RhcnQoY2xrKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIo ImZhaWxlZCB0byB0dXJuIG9uIGNsb2NrcywgcmM9JWRcbiIsIHJjKTsKLQkJCWdvdG8gZXJyb3Jf ZGlzYWJsZV9tYXN0ZXI7Ci0JCX0KLQl9Ci0JcmV0dXJuIHJjOwotZXJyb3JfZGlzYWJsZV9tYXN0 ZXI6Ci0JKHZvaWQpZHNpX2xpbmtfY2xrX3N0b3AobV9jbGtzKTsKLWVycm9yOgotCXJldHVybiBy YzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9jb3JlX2Nsa19kaXNhYmxlKHN0cnVjdCBk c2lfY29yZV9jbGtzICpjbGtzLAotCXUzMiBjdHJsX2NvdW50LCB1MzIgbWFzdGVyX25keCkKLXsK LQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfY29yZV9jbGtzICpjbGssICptX2Ns a3M7Ci0KLQkvKgotCSAqIEluIGNhc2Ugb2Ygc3BsaXQgRFNJIHVzZWNhc2VzLCBjbG9jayBmb3Ig c2xhdmUgRFNJIGNvbnRyb2xsZXJzIHNob3VsZAotCSAqIGJlIGRpc2FibGVkIGZpcnN0IGJlZm9y ZSBkaXNhYmxpbmcgY2xvY2sgZm9yIG1hc3RlciBjb250cm9sbGVyLiBTbGF2ZQotCSAqIGNvbnRy b2xsZXJzIGluIHRoZSBjbG9jayBjb250ZXh0IHJlZmVyIHRvIGNvbnRyb2xsZXIgd2hpY2ggc291 cmNlCi0JICogY2xvY2sgZnJvbSBhbm90aGVyIGNvbnRyb2xsZXIuCi0JICovCi0KLQltX2Nsa3Mg PSAmY2xrc1ttYXN0ZXJfbmR4XTsKLQotCS8qIFR1cm4gb2ZmIG5vbi1tYXN0ZXIgY29yZSBjbG9j a3MgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY3RybF9jb3VudDsgaSsrKSB7Ci0JCWNsayA9ICZjbGtz W2ldOwotCQlpZiAoIWNsayB8fCAoY2xrID09IG1fY2xrcykpCi0JCQljb250aW51ZTsKLQotCQly YyA9IGRzaV9jb3JlX2Nsa19zdG9wKGNsayk7Ci0JCWlmIChyYykgewotCQkJcHJfZGVidWcoImZh aWxlZCB0byB0dXJuIG9mZiBjbG9ja3MsIHJjPSVkXG4iLCByYyk7Ci0JCQlnb3RvIGVycm9yOwot CQl9Ci0KLQkJcmMgPSBkcHVfcG93ZXJfcmVzb3VyY2VfZW5hYmxlKGNsay0+Y2xrcy5waGFuZGxl LAotCQkJCWNsay0+Y2xrcy5kc2lfY29yZV9jbGllbnQsIGZhbHNlKTsKLQkJaWYgKHJjKSB7Ci0J CQlwcl9lcnIoIlBvd2VyIHJlc291cmNlIGRpc2FibGUgZmFpbGVkOiAlZFxuIiwgcmMpOwotCQkJ Z290byBlcnJvcjsKLQkJfQotCX0KLQotCXJjID0gZHNpX2NvcmVfY2xrX3N0b3AobV9jbGtzKTsK LQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gdHVybiBvZmYgbWFzdGVyIGNsb2Nrcywg cmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRwdV9wb3dlcl9yZXNv dXJjZV9lbmFibGUobV9jbGtzLT5jbGtzLnBoYW5kbGUsCi0JCQkJbV9jbGtzLT5jbGtzLmRzaV9j b3JlX2NsaWVudCwgZmFsc2UpOwotCWlmIChyYykKLQkJcHJfZXJyKCJQb3dlciByZXNvdXJjZSBk aXNhYmxlIGZhaWxlZDogJWRcbiIsIHJjKTsKLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3Rh dGljIGludCBkc2lfZGlzcGxheV9saW5rX2Nsa19kaXNhYmxlKHN0cnVjdCBkc2lfbGlua19jbGtz ICpjbGtzLAotCXUzMiBjdHJsX2NvdW50LCB1MzIgbWFzdGVyX25keCkKLXsKLQlpbnQgcmMgPSAw OwotCWludCBpOwotCXN0cnVjdCBkc2lfbGlua19jbGtzICpjbGssICptX2Nsa3M7Ci0KLQkvKgot CSAqIEluIGNhc2Ugb2Ygc3BsaXQgRFNJIHVzZWNhc2VzLCBjbG9jayBmb3Igc2xhdmUgRFNJIGNv bnRyb2xsZXJzIHNob3VsZAotCSAqIGJlIGRpc2FibGVkIGZpcnN0IGJlZm9yZSBkaXNhYmxpbmcg Y2xvY2sgZm9yIG1hc3RlciBjb250cm9sbGVyLiBTbGF2ZQotCSAqIGNvbnRyb2xsZXJzIGluIHRo ZSBjbG9jayBjb250ZXh0IHJlZmVyIHRvIGNvbnRyb2xsZXIgd2hpY2ggc291cmNlCi0JICogY2xv Y2sgZnJvbSBhbm90aGVyIGNvbnRyb2xsZXIuCi0JICovCi0KLQltX2Nsa3MgPSAmY2xrc1ttYXN0 ZXJfbmR4XTsKLQotCS8qIFR1cm4gb2ZmIG5vbi1tYXN0ZXIgbGluayBjbG9ja3MgKi8KLQlmb3Ig KGkgPSAwOyBpIDwgY3RybF9jb3VudDsgaSsrKSB7Ci0JCWNsayA9ICZjbGtzW2ldOwotCQlpZiAo IWNsayB8fCAoY2xrID09IG1fY2xrcykpCi0JCQljb250aW51ZTsKLQotCQlyYyA9IGRzaV9saW5r X2Nsa19zdG9wKGNsayk7Ci0JCWlmIChyYykKLQkJCXByX2VycigiZmFpbGVkIHRvIHR1cm4gb2Zm IGNsb2NrcywgcmM9JWRcbiIsIHJjKTsKLQl9Ci0KLQlyYyA9IGRzaV9saW5rX2Nsa19zdG9wKG1f Y2xrcyk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoImZhaWxlZCB0byB0dXJuIG9mZiBtYXN0ZXIgY2xv Y2tzLCByYz0lZFxuIiwgcmMpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV91 cGRhdGVfY2xrX3N0YXRlKHN0cnVjdCBkc2lfY29yZV9jbGtzICpjX2Nsa3MsIHUzMiBjX3N0YXRl LAotCQkJCXN0cnVjdCBkc2lfbGlua19jbGtzICpsX2Nsa3MsIHUzMiBsX3N0YXRlKQotewotCWlu dCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9jbGtfbW5nciAqbW5ncjsKLQlib29sIGxfY19vbiA9IGZh bHNlOwotCi0JaWYgKGNfY2xrcykgewotCQltbmdyID0KLQkJY29udGFpbmVyX29mKGNfY2xrcywg c3RydWN0IGRzaV9jbGtfbW5nciwgY29yZV9jbGtzWzBdKTsKLQl9IGVsc2UgaWYgKGxfY2xrcykg ewotCQltbmdyID0KLQkJY29udGFpbmVyX29mKGxfY2xrcywgc3RydWN0IGRzaV9jbGtfbW5nciwg bGlua19jbGtzWzBdKTsKLQl9IGVsc2UgewotCQltbmdyID0gTlVMTDsKLQl9Ci0KLQlpZiAoIW1u Z3IpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcHJfZGVidWcoImNfc3RhdGUgPSAlZCwgbF9zdGF0 ZSA9ICVkXG4iLAotCQkgY19jbGtzID8gY19zdGF0ZSA6IC0xLCBsX2Nsa3MgPyBsX3N0YXRlIDog LTEpOwotCS8qCi0JICogQmVsb3cgaXMgdGhlIHNlcXVlbmNlIHRvIHRvZ2dsZSBEU0kgY2xvY2tz OgotCSAqCTEuIEZvciBPTiBzZXF1ZW5jZSwgQ29yZSBjbG9ja3MgYmVmb3JlIGxpbmsgY2xvY2tz Ci0JICoJMi4gRm9yIE9GRiBzZXF1ZW5jZSwgTGluayBjbG9ja3MgYmVmb3JlIGNvcmUgY2xvY2tz LgotCSAqLwotCWlmIChjX2Nsa3MgJiYgKGNfc3RhdGUgPT0gRFNJX0NMS19PTikpIHsKLQkJaWYg KG1uZ3ItPmNvcmVfY2xrX3N0YXRlID09IERTSV9DTEtfT0ZGKSB7Ci0JCQlyYyA9IG1uZ3ItPnBy ZV9jbGtvbl9jYihtbmdyLT5wcml2X2RhdGEsCi0JCQkJCQlEU0lfQ09SRV9DTEssCi0JCQkJCQlE U0lfQ0xLX09OKTsKLQkJCWlmIChyYykgewotCQkJCXByX2VycigiZmFpbGVkIHRvIHR1cm4gb24g TURQIEZTIHJjPSAlZFxuIiwgcmMpOwotCQkJCWdvdG8gZXJyb3I7Ci0JCQl9Ci0JCX0KLQkJcmMg PSBkc2lfZGlzcGxheV9jb3JlX2Nsa19lbmFibGUoY19jbGtzLCBtbmdyLT5kc2lfY3RybF9jb3Vu dCwKLQkJCQltbmdyLT5tYXN0ZXJfbmR4KTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxl ZCB0byB0dXJuIG9uIGNvcmUgY2xrcyByYyA9ICVkXG4iLCByYyk7Ci0JCQlnb3RvIGVycm9yOwot CQl9Ci0KLQkJaWYgKG1uZ3ItPnBvc3RfY2xrb25fY2IpIHsKLQkJCXJjID0gbW5nci0+cG9zdF9j bGtvbl9jYihtbmdyLT5wcml2X2RhdGEsCi0JCQkJCQkgRFNJX0NPUkVfQ0xLLAotCQkJCQkJIERT SV9DTEtfT04pOwotCQkJaWYgKHJjKQotCQkJCXByX2VycigicG9zdCBjbGsgb24gY2IgZmFpbGVk LCByYyA9ICVkXG4iLCByYyk7Ci0JCX0KLQkJbW5nci0+Y29yZV9jbGtfc3RhdGUgPSBEU0lfQ0xL X09OOwotCX0KLQotCWlmIChsX2Nsa3MpIHsKLQkJaWYgKGxfc3RhdGUgPT0gRFNJX0NMS19PTikg ewotCQkJaWYgKG1uZ3ItPnByZV9jbGtvbl9jYikgewotCQkJCXJjID0gbW5nci0+cHJlX2Nsa29u X2NiKG1uZ3ItPnByaXZfZGF0YSwKLQkJCQkJRFNJX0xJTktfQ0xLLCBsX3N0YXRlKTsKLQkJCQlp ZiAocmMpCi0JCQkJCXByX2VycigicHJlIGxpbmsgY2xrIG9uIGNiIGZhaWxlZFxuIik7Ci0JCQl9 Ci0JCQlyYyA9IGRzaV9kaXNwbGF5X2xpbmtfY2xrX2VuYWJsZShsX2Nsa3MsCi0JCQkJCW1uZ3It PmRzaV9jdHJsX2NvdW50LCBtbmdyLT5tYXN0ZXJfbmR4KTsKLQkJCWlmIChyYykgewotCQkJCXBy X2VycigiZmFpbGVkIHRvIHN0YXJ0IGxpbmsgY2xrIHJjPSAlZFxuIiwgcmMpOwotCQkJCWdvdG8g ZXJyb3I7Ci0JCQl9Ci0JCQlpZiAobW5nci0+cG9zdF9jbGtvbl9jYikgewotCQkJCXJjID0gbW5n ci0+cG9zdF9jbGtvbl9jYihtbmdyLT5wcml2X2RhdGEsCi0JCQkJCQkJRFNJX0xJTktfQ0xLLAot CQkJCQkJCWxfc3RhdGUpOwotCQkJCWlmIChyYykKLQkJCQkJcHJfZXJyKCJwb3N0IGxpbmsgY2xr IG9uIGNiIGZhaWxlZFxuIik7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogVHdvIGNv bmRpdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNoZWNrZWQgZm9yIExpbmsKLQkJCSAqIGNsb2NrczoK LQkJCSAqIDEuIExpbmsgY2xvY2tzIG5lZWQgY29yZSBjbG9ja3MgdG8gYmUgb24gd2hlbgotCQkJ ICogICAgdHJhbnNpdGlvbmluZyBmcm9tIEVBUkxZX0dBVEUgdG8gT0ZGIHN0YXRlLgotCQkJICog Mi4gVUxQUyBtb2RlIG1pZ2h0IGhhdmUgdG8gYmUgZW5hYmxlZCBpbiBjYXNlIG9mIE9GRgotCQkJ ICogICAgc3RhdGUuIEZvciBVTFBTLCBMaW5rIGNsb2NrcyBzaG91bGQgYmUgdHVybmVkIE9OCi0J CQkgKiAgICBmaXJzdCBiZWZvcmUgdGhleSBhcmUgdHVybmVkIG9mZiBhZ2Fpbi4KLQkJCSAqCi0J CQkgKiBJZiBMaW5rIGlzIGdvaW5nIGZyb20gRUFSTFlfR0FURSB0byBPRkYgc3RhdGUgQU5ECi0J CQkgKiBDb3JlIGNsb2NrIGlzIGFscmVhZHkgaW4gRUFSTFlfR0FURSBvciBPRkYgc3RhdGUsCi0J CQkgKiB0dXJuIG9uIENvcmUgY2xvY2tzIGFuZCBsaW5rIGNsb2Nrcy4KLQkJCSAqCi0JCQkgKiBV TFBTIHN0YXRlIGlzIG1hbmFnZWQgYXMgcGFydCBvZiB0aGUgcHJlX2Nsa29mZl9jYi4KLQkJCSAq LwotCQkJaWYgKChsX3N0YXRlID09IERTSV9DTEtfT0ZGKSAmJgotCQkJICAgIChtbmdyLT5saW5r X2Nsa19zdGF0ZSA9PQotCQkJICAgIERTSV9DTEtfRUFSTFlfR0FURSkgJiYKLQkJCSAgICAobW5n ci0+Y29yZV9jbGtfc3RhdGUgIT0KLQkJCSAgICBEU0lfQ0xLX09OKSkgewotCQkJCXJjID0gZHNp X2Rpc3BsYXlfY29yZV9jbGtfZW5hYmxlKAotCQkJCQltbmdyLT5jb3JlX2Nsa3MsIG1uZ3ItPmRz aV9jdHJsX2NvdW50LAotCQkJCQltbmdyLT5tYXN0ZXJfbmR4KTsKLQkJCQlpZiAocmMpIHsKLQkJ CQkJcHJfZXJyKCJjb3JlIGNsa3MgZGlkIG5vdCBzdGFydFxuIik7Ci0JCQkJCWdvdG8gZXJyb3I7 Ci0JCQkJfQotCi0JCQkJcmMgPSBkc2lfZGlzcGxheV9saW5rX2Nsa19lbmFibGUobF9jbGtzLAot CQkJCQltbmdyLT5kc2lfY3RybF9jb3VudCwgbW5nci0+bWFzdGVyX25keCk7Ci0JCQkJaWYgKHJj KSB7Ci0JCQkJCXByX2VycigiTGluayBjbGtzIGRpZCBub3Qgc3RhcnRcbiIpOwotCQkJCQlnb3Rv IGVycm9yOwotCQkJCX0KLQkJCQlsX2Nfb24gPSB0cnVlOwotCQkJCXByX2RlYnVnKCJFQ0c6IGNv cmUgYW5kIExpbmtfb25cbiIpOwotCQkJfQotCi0JCQlpZiAobW5nci0+cHJlX2Nsa29mZl9jYikg ewotCQkJCXJjID0gbW5nci0+cHJlX2Nsa29mZl9jYihtbmdyLT5wcml2X2RhdGEsCi0JCQkJCURT SV9MSU5LX0NMSywgbF9zdGF0ZSk7Ci0JCQkJaWYgKHJjKQotCQkJCQlwcl9lcnIoInByZSBsaW5r IGNsayBvZmYgY2IgZmFpbGVkXG4iKTsKLQkJCX0KLQotCQkJcmMgPSBkc2lfZGlzcGxheV9saW5r X2Nsa19kaXNhYmxlKGxfY2xrcywKLQkJCQltbmdyLT5kc2lfY3RybF9jb3VudCwgbW5nci0+bWFz dGVyX25keCk7Ci0JCQlpZiAocmMpIHsKLQkJCQlwcl9lcnIoImZhaWxlZCB0byBzdG9wIGxpbmsg Y2xrLCByYyA9ICVkXG4iLAotCQkJCSAgICAgICByYyk7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0K LQotCQkJaWYgKG1uZ3ItPnBvc3RfY2xrb2ZmX2NiKSB7Ci0JCQkJcmMgPSBtbmdyLT5wb3N0X2Ns a29mZl9jYihtbmdyLT5wcml2X2RhdGEsCi0JCQkJCURTSV9MSU5LX0NMSywgbF9zdGF0ZSk7Ci0J CQkJaWYgKHJjKQotCQkJCQlwcl9lcnIoInBvc3QgbGluayBjbGsgb2ZmIGNiIGZhaWxlZFxuIik7 Ci0JCQl9Ci0JCQkvKgotCQkJICogVGhpcyBjaGVjayBpcyB0byBzYXZlIHVubmVjZXNzYXJ5IGNs b2NrIHN0YXRlCi0JCQkgKiBjaGFuZ2Ugd2hlbiBnb2luZyBmcm9tIEVBUkxZX0dBVEUgdG8gT0ZG LiBJbiB0aGUKLQkJCSAqIGNhc2Ugd2hlcmUgdGhlIHJlcXVlc3QgaGFwcGVucyBmb3IgYm90aCBD b3JlIGFuZCBMaW5rCi0JCQkgKiBjbG9ja3MgaW4gdGhlIHNhbWUgY2FsbCwgY29yZSBjbG9ja3Mg bmVlZCB0byBiZQotCQkJICogdHVybmVkIG9uIGZpcnN0IGJlZm9yZSBPRkYgc3RhdGUgY2FuIGJl IGVudGVyZWQuCi0JCQkgKgotCQkJICogQ29yZSBjbG9ja3MgYXJlIHR1cm5lZCBvbiBoZXJlIGZv ciBMaW5rIGNsb2NrcyB0byBnbwotCQkJICogdG8gT0ZGIHN0YXRlLiBJZiBjb3JlIGNsb2NrIHJl cXVlc3QgaXMgYWxzbyBwcmVzZW50LAotCQkJICogdGhlbiBjb3JlIGNsb2NrcyBjYW4gYmUgdHVy bmVkIG9mZiBDb3JlIGNsb2NrcyBhcmUKLQkJCSAqIHRyYW5zaXRpb25lZCB0byBPRkYgc3RhdGUu Ci0JCQkgKi8KLQkJCWlmIChsX2Nfb24gJiYgKCEoY19jbGtzICYmIChjX3N0YXRlID09IERTSV9D TEtfT0ZGKQotCQkJCQkgJiYgKG1uZ3ItPmNvcmVfY2xrX3N0YXRlID09Ci0JCQkJCSAgICAgRFNJ X0NMS19FQVJMWV9HQVRFKSkpKSB7Ci0JCQkJcmMgPSBkc2lfZGlzcGxheV9jb3JlX2Nsa19kaXNh YmxlKAotCQkJCQltbmdyLT5jb3JlX2Nsa3MsIG1uZ3ItPmRzaV9jdHJsX2NvdW50LAotCQkJCQlt bmdyLT5tYXN0ZXJfbmR4KTsKLQkJCQlpZiAocmMpIHsKLQkJCQkJcHJfZXJyKCJjb3JlIGNsa3Mg ZGlkIG5vdCBzdG9wXG4iKTsKLQkJCQkJZ290byBlcnJvcjsKLQkJCQl9Ci0KLQkJCQlsX2Nfb24g PSBmYWxzZTsKLQkJCQlwcl9kZWJ1ZygiRUNHOiBjb3JlIG9mZlxuIik7Ci0JCQl9IGVsc2UKLQkJ CQlwcl9kZWJ1ZygiRUNHOiBjb3JlIG9mZiBza2lwXG4iKTsKLQkJfQotCi0JCW1uZ3ItPmxpbmtf Y2xrX3N0YXRlID0gbF9zdGF0ZTsKLQl9Ci0KLQlpZiAoY19jbGtzICYmIChjX3N0YXRlICE9IERT SV9DTEtfT04pKSB7Ci0JCS8qCi0JCSAqIFdoZW4gZ29pbmcgdG8gT0ZGIHN0YXRlIGZyb20gRUFS TFkgR0FURSBzdGF0ZSwgQ29yZSBjbG9ja3MKLQkJICogc2hvdWxkIGJlIHR1cm5lZCBvbiBmaXJz dCBzbyB0aGF0IHRoZSBJT3MgY2FuIGJlIGNsYW1wZWQuCi0JCSAqIGxfY19vbiBmbGFnIGlzIHNl dCwgdGhlbiB0aGUgY29yZSBjbG9ja3Mgd2VyZSB0dXJuZWQgYmVmb3JlCi0JCSAqIHRvIHRoZSBM aW5rIGNsb2NrcyBnbyB0byBPRkYgc3RhdGUuIFNvIENvcmUgY2xvY2tzIGFyZQotCQkgKiBhbHJl YWR5IE9OIGFuZCB0aGlzIHN0ZXAgY2FuIGJlIHNraXBwZWQuCi0JCSAqCi0JCSAqIElPcyBhcmUg Y2xhbXBlZCBpbiBwcmVfY2xrb2ZmX2NiIGNhbGxiYWNrLgotCQkgKi8KLQkJaWYgKChjX3N0YXRl ID09IERTSV9DTEtfT0ZGKSAmJgotCQkgICAgKG1uZ3ItPmNvcmVfY2xrX3N0YXRlID09Ci0JCSAg ICBEU0lfQ0xLX0VBUkxZX0dBVEUpICYmICFsX2Nfb24pIHsKLQkJCXJjID0gZHNpX2Rpc3BsYXlf Y29yZV9jbGtfZW5hYmxlKG1uZ3ItPmNvcmVfY2xrcywKLQkJCQltbmdyLT5kc2lfY3RybF9jb3Vu dCwgbW5nci0+bWFzdGVyX25keCk7Ci0JCQlpZiAocmMpIHsKLQkJCQlwcl9lcnIoImNvcmUgY2xr cyBkaWQgbm90IHN0YXJ0XG4iKTsKLQkJCQlnb3RvIGVycm9yOwotCQkJfQotCQkJcHJfZGVidWco IkVDRzogY29yZSBvblxuIik7Ci0JCX0gZWxzZQotCQkJcHJfZGVidWcoIkVDRzogY29yZSBvbiBz a2lwXG4iKTsKLQotCQlpZiAobW5nci0+cHJlX2Nsa29mZl9jYikgewotCQkJcmMgPSBtbmdyLT5w cmVfY2xrb2ZmX2NiKG1uZ3ItPnByaXZfZGF0YSwKLQkJCQkJCSBEU0lfQ09SRV9DTEssCi0JCQkJ CQkgY19zdGF0ZSk7Ci0JCQlpZiAocmMpCi0JCQkJcHJfZXJyKCJwcmUgY29yZSBjbGsgb2ZmIGNi IGZhaWxlZFxuIik7Ci0JCX0KLQotCQlyYyA9IGRzaV9kaXNwbGF5X2NvcmVfY2xrX2Rpc2FibGUo Y19jbGtzLCBtbmdyLT5kc2lfY3RybF9jb3VudCwKLQkJCW1uZ3ItPm1hc3Rlcl9uZHgpOwotCQlp ZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHR1cm4gb2ZmIGNvcmUgY2xrcyByYyA9ICVk XG4iLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJaWYgKGNfc3RhdGUgPT0gRFNJX0NM S19PRkYpIHsKLQkJCWlmIChtbmdyLT5wb3N0X2Nsa29mZl9jYikgewotCQkJCXJjID0gbW5nci0+ cG9zdF9jbGtvZmZfY2IobW5nci0+cHJpdl9kYXRhLAotCQkJCQkJRFNJX0NPUkVfQ0xLLAotCQkJ CQkJRFNJX0NMS19PRkYpOwotCQkJCWlmIChyYykKLQkJCQkJcHJfZXJyKCJwb3N0IGNsa29mZiBj YiBmYWlsLCByYyA9ICVkXG4iLAotCQkJCQkgICAgICAgcmMpOwotCQkJfQotCQl9Ci0JCW1uZ3It PmNvcmVfY2xrX3N0YXRlID0gY19zdGF0ZTsKLQl9Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0K LQotc3RhdGljIGludCBkc2lfcmVjaGVja19jbGtfc3RhdGUoc3RydWN0IGRzaV9jbGtfbW5nciAq bW5ncikKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvcyA9IE5VTEw7Ci0J c3RydWN0IGRzaV9jbGtfY2xpZW50X2luZm8gKmM7Ci0JdTMyIG5ld19jb3JlX2Nsa19zdGF0ZSA9 IERTSV9DTEtfT0ZGOwotCXUzMiBuZXdfbGlua19jbGtfc3RhdGUgPSBEU0lfQ0xLX09GRjsKLQl1 MzIgb2xkX2NfY2xrX3N0YXRlID0gRFNJX0NMS19PRkY7Ci0JdTMyIG9sZF9sX2Nsa19zdGF0ZSA9 IERTSV9DTEtfT0ZGOwotCXN0cnVjdCBkc2lfY29yZV9jbGtzICpjX2Nsa3MgPSBOVUxMOwotCXN0 cnVjdCBkc2lfbGlua19jbGtzICpsX2Nsa3MgPSBOVUxMOwotCi0JLyoKLQkgKiBDb25kaXRpb25z IHRvIG1haW50YWluIERTSSBtYW5hZ2VyIGNsb2NrIHN0YXRlIGJhc2VkIG9uCi0JICoJCWNsb2Nr IHN0YXRlcyBvZiB2YXJpb3VzIGNsaWVudHM6Ci0JICoJMS4gSWYgYW55IGNsaWVudCBoYXMgY2xv Y2sgaW4gT04gc3RhdGUsIERTSSBtYW5hZ2VyIGNsb2NrIHN0YXRlCi0JICoJCXNob3VsZCBiZSBP Ti4KLQkgKgkyLiBJZiBhbnkgY2xpZW50IGlzIGluIEVDRyBzdGF0ZSB3aXRoIHJlc3Qgb2YgdGhl bSB0dXJuZWQgT0ZGLAotCSAqCSAgIGdvIHRvIEVhcmx5IGdhdGUgc3RhdGUuCi0JICoJMy4gSWYg YWxsIGNsaWVudHMgaGF2ZSBjbG9ja3MgYXMgT0ZGLCB0aGVuIGdvIHRvIE9GRiBzdGF0ZS4KLQkg Ki8KLQlsaXN0X2Zvcl9lYWNoKHBvcywgJm1uZ3ItPmNsaWVudF9saXN0KSB7Ci0JCWMgPSBsaXN0 X2VudHJ5KHBvcywgc3RydWN0IGRzaV9jbGtfY2xpZW50X2luZm8sIGxpc3QpOwotCQlpZiAoYy0+ Y29yZV9jbGtfc3RhdGUgPT0gRFNJX0NMS19PTikgewotCQkJbmV3X2NvcmVfY2xrX3N0YXRlID0g RFNJX0NMS19PTjsKLQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKGMtPmNvcmVfY2xrX3N0YXRlID09 IERTSV9DTEtfRUFSTFlfR0FURSkgewotCQkJbmV3X2NvcmVfY2xrX3N0YXRlID0gRFNJX0NMS19F QVJMWV9HQVRFOwotCQl9Ci0JfQotCi0JbGlzdF9mb3JfZWFjaChwb3MsICZtbmdyLT5jbGllbnRf bGlzdCkgewotCQljID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBkc2lfY2xrX2NsaWVudF9pbmZv LCBsaXN0KTsKLQkJaWYgKGMtPmxpbmtfY2xrX3N0YXRlID09IERTSV9DTEtfT04pIHsKLQkJCW5l d19saW5rX2Nsa19zdGF0ZSA9IERTSV9DTEtfT047Ci0JCQlicmVhazsKLQkJfSBlbHNlIGlmIChj LT5saW5rX2Nsa19zdGF0ZSA9PSBEU0lfQ0xLX0VBUkxZX0dBVEUpIHsKLQkJCW5ld19saW5rX2Ns a19zdGF0ZSA9IERTSV9DTEtfRUFSTFlfR0FURTsKLQkJfQotCX0KLQotCWlmIChuZXdfY29yZV9j bGtfc3RhdGUgIT0gbW5nci0+Y29yZV9jbGtfc3RhdGUpCi0JCWNfY2xrcyA9IG1uZ3ItPmNvcmVf Y2xrczsKLQotCWlmIChuZXdfbGlua19jbGtfc3RhdGUgIT0gbW5nci0+bGlua19jbGtfc3RhdGUp Ci0JCWxfY2xrcyA9IG1uZ3ItPmxpbmtfY2xrczsKLQotCW9sZF9jX2Nsa19zdGF0ZSA9IG1uZ3It PmNvcmVfY2xrX3N0YXRlOwotCW9sZF9sX2Nsa19zdGF0ZSA9IG1uZ3ItPmxpbmtfY2xrX3N0YXRl OwotCi0JcHJfZGVidWcoImNfY2xrX3N0YXRlICglZCAtPiAlZClcbiIsCi0JCW9sZF9jX2Nsa19z dGF0ZSwgbmV3X2NvcmVfY2xrX3N0YXRlKTsKLQlwcl9kZWJ1ZygibF9jbGtfc3RhdGUgKCVkIC0+ ICVkKVxuIiwKLQkJb2xkX2xfY2xrX3N0YXRlLCBuZXdfbGlua19jbGtfc3RhdGUpOwotCi0JaWYg KGNfY2xrcyB8fCBsX2Nsa3MpIHsKLQkJcmMgPSBkc2lfdXBkYXRlX2Nsa19zdGF0ZShjX2Nsa3Ms IG5ld19jb3JlX2Nsa19zdGF0ZSwKLQkJCQkJICBsX2Nsa3MsIG5ld19saW5rX2Nsa19zdGF0ZSk7 Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gdXBkYXRlIGNsb2NrIHN0YXRlLCBy YyA9ICVkXG4iLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi1lcnJvcjoKLQlyZXR1 cm4gcmM7Ci19Ci0KLWludCBkc2lfY2xrX3JlcV9zdGF0ZSh2b2lkICpjbGllbnQsIGVudW0gZHNp X2Nsa190eXBlIGNsaywKLQllbnVtIGRzaV9jbGtfc3RhdGUgc3RhdGUpCi17Ci0JaW50IHJjID0g MDsKLQlzdHJ1Y3QgZHNpX2Nsa19jbGllbnRfaW5mbyAqYyA9IGNsaWVudDsKLQlzdHJ1Y3QgZHNp X2Nsa19tbmdyICptbmdyOwotCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwotCi0JaWYgKCFjbGllbnQg fHwgIWNsayB8fCBjbGsgPiAoRFNJX0NPUkVfQ0xLIHwgRFNJX0xJTktfQ0xLKSB8fAotCSAgICBz dGF0ZSA+IERTSV9DTEtfRUFSTFlfR0FURSkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zLCBj bGllbnQgPSAlcEssIGNsayA9IDB4JXgsIHN0YXRlID0gJWRcbiIsCi0JCSAgICAgICBjbGllbnQs IGNsaywgc3RhdGUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltbmdyID0gYy0+bW5ncjsK LQltdXRleF9sb2NrKCZtbmdyLT5jbGtfbXV0ZXgpOwotCi0JcHJfZGVidWcoIlslc10lczogQ0xL PSVkLCBuZXdfc3RhdGU9JWQsIGNvcmU9JWQsIGxpbmtsPSVkXG4iLAotCSAgICAgICBtbmdyLT5u YW1lLCBjLT5uYW1lLCBjbGssIHN0YXRlLCBjLT5jb3JlX2Nsa19zdGF0ZSwKLQkgICAgICAgYy0+ bGlua19jbGtfc3RhdGUpOwotCi0JLyoKLQkgKiBDbG9jayByZWZjb3VudCBoYW5kbGluZyBhcyBi ZWxvdzoKLQkgKglpLiBJbmNyZW1lbnQgcmVmY291bnQgd2hlbmV2ZXIgT04gaXMgY2FsbGVkLgot CSAqCWlpLiBEZWNyZW1lbnQgcmVmY291bnQgd2hlbiB0cmFuc2l0aW9uaW5nIGZyb20gT04gc3Rh dGUgdG8KLQkgKgkJZWl0aGVyIE9GRiBvciBFQVJMWV9HQVRFLgotCSAqCWlpaS4gRG8gbm90IGRl Y3JlbWVudCByZWZjb3VudCB3aGVuIGNoYW5naW5nIGZyb20KLQkgKgkJRUFSTFlfR0FURSB0byBP RkYuCi0JICovCi0JaWYgKHN0YXRlID09IERTSV9DTEtfT04pIHsKLQkJaWYgKGNsayAmIERTSV9D T1JFX0NMSykgewotCQkJYy0+Y29yZV9yZWZjb3VudCsrOwotCQkJaWYgKGMtPmNvcmVfY2xrX3N0 YXRlICE9IERTSV9DTEtfT04pIHsKLQkJCQljLT5jb3JlX2Nsa19zdGF0ZSA9IERTSV9DTEtfT047 Ci0JCQkJY2hhbmdlZCA9IHRydWU7Ci0JCQl9Ci0JCX0KLQkJaWYgKGNsayAmIERTSV9MSU5LX0NM SykgewotCQkJYy0+bGlua19yZWZjb3VudCsrOwotCQkJaWYgKGMtPmxpbmtfY2xrX3N0YXRlICE9 IERTSV9DTEtfT04pIHsKLQkJCQljLT5saW5rX2Nsa19zdGF0ZSA9IERTSV9DTEtfT047Ci0JCQkJ Y2hhbmdlZCA9IHRydWU7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgaWYgKChzdGF0ZSA9PSBEU0lfQ0xL X0VBUkxZX0dBVEUpIHx8Ci0JCSAgIChzdGF0ZSA9PSBEU0lfQ0xLX09GRikpIHsKLQkJaWYgKGNs ayAmIERTSV9DT1JFX0NMSykgewotCQkJaWYgKGMtPmNvcmVfcmVmY291bnQgPT0gMCkgewotCQkJ CWlmICgoYy0+Y29yZV9jbGtfc3RhdGUgPT0KLQkJCQkgICAgRFNJX0NMS19FQVJMWV9HQVRFKSAm JgotCQkJCSAgICAoc3RhdGUgPT0gRFNJX0NMS19PRkYpKSB7Ci0JCQkJCWNoYW5nZWQgPSB0cnVl OwotCQkJCQljLT5jb3JlX2Nsa19zdGF0ZSA9IERTSV9DTEtfT0ZGOwotCQkJCX0gZWxzZSB7Ci0J CQkJCXByX3dhcm4oIkNvcmUgcmVmY291bnQgaXMgemVybyBmb3IgJXMiLAotCQkJCQkJYy0+bmFt ZSk7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQljLT5jb3JlX3JlZmNvdW50LS07Ci0JCQkJaWYg KGMtPmNvcmVfcmVmY291bnQgPT0gMCkgewotCQkJCQljLT5jb3JlX2Nsa19zdGF0ZSA9IHN0YXRl OwotCQkJCQljaGFuZ2VkID0gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKGNsayAmIERT SV9MSU5LX0NMSykgewotCQkJaWYgKGMtPmxpbmtfcmVmY291bnQgPT0gMCkgewotCQkJCWlmICgo Yy0+bGlua19jbGtfc3RhdGUgPT0KLQkJCQkgICAgRFNJX0NMS19FQVJMWV9HQVRFKSAmJgotCQkJ CSAgICAoc3RhdGUgPT0gRFNJX0NMS19PRkYpKSB7Ci0JCQkJCWNoYW5nZWQgPSB0cnVlOwotCQkJ CQljLT5saW5rX2Nsa19zdGF0ZSA9IERTSV9DTEtfT0ZGOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXBy X3dhcm4oIkxpbmsgcmVmY291bnQgaXMgemVybyBmb3IgJXMiLAotCQkJCQkJYy0+bmFtZSk7Ci0J CQkJfQotCQkJfSBlbHNlIHsKLQkJCQljLT5saW5rX3JlZmNvdW50LS07Ci0JCQkJaWYgKGMtPmxp bmtfcmVmY291bnQgPT0gMCkgewotCQkJCQljLT5saW5rX2Nsa19zdGF0ZSA9IHN0YXRlOwotCQkJ CQljaGFuZ2VkID0gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JcHJfZGVidWcoIlslc10l czogY2hhbmdlPSVkLCBDb3JlIChyZWY9JWQsIHN0YXRlPSVkKSwgTGluayAocmVmPSVkLCBzdGF0 ZT0lZClcbiIsCi0JCSBtbmdyLT5uYW1lLCBjLT5uYW1lLCBjaGFuZ2VkLCBjLT5jb3JlX3JlZmNv dW50LAotCQkgYy0+Y29yZV9jbGtfc3RhdGUsIGMtPmxpbmtfcmVmY291bnQsIGMtPmxpbmtfY2xr X3N0YXRlKTsKLQotCWlmIChjaGFuZ2VkKSB7Ci0JCXJjID0gZHNpX3JlY2hlY2tfY2xrX3N0YXRl KG1uZ3IpOwotCQlpZiAocmMpCi0JCQlwcl9lcnIoIkZhaWxlZCB0byBhZGp1c3QgY2xvY2sgc3Rh dGUgcmMgPSAlZFxuIiwgcmMpOwotCX0KLQotCW11dGV4X3VubG9jaygmbW5nci0+Y2xrX211dGV4 KTsKLQlyZXR1cm4gcmM7Ci19Ci0KLURFRklORV9NVVRFWChkc2lfbW5ncl9jbGtfbXV0ZXgpOwot Ci1pbnQgZHNpX2Rpc3BsYXlfY2xrX2N0cmwodm9pZCAqaGFuZGxlLAotCWVudW0gZHNpX2Nsa190 eXBlIGNsa190eXBlLCBlbnVtIGRzaV9jbGtfc3RhdGUgY2xrX3N0YXRlKQotewotCWludCByYyA9 IDA7Ci0KLQlpZiAoIWhhbmRsZSkgewotCQlwcl9lcnIoIiVzOiBJbnZhbGlkIGFyZ1xuIiwgX19m dW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkc2lfbW5ncl9j bGtfbXV0ZXgpOwotCXJjID0gZHNpX2Nsa19yZXFfc3RhdGUoaGFuZGxlLCBjbGtfdHlwZSwgY2xr X3N0YXRlKTsKLQlpZiAocmMpCi0JCXByX2VycigiJXM6IGZhaWxlZCBzZXQgY2xrIHN0YXRlLCBy YyA9ICVkXG4iLCBfX2Z1bmNfXywgcmMpOwotCW11dGV4X3VubG9jaygmZHNpX21uZ3JfY2xrX211 dGV4KTsKLQotCXJldHVybiByYzsKLX0KLQotdm9pZCAqZHNpX3JlZ2lzdGVyX2Nsa19oYW5kbGUo dm9pZCAqY2xrX21uZ3IsIGNoYXIgKmNsaWVudCkKLXsKLQl2b2lkICpoYW5kbGUgPSBOVUxMOwot CXN0cnVjdCBkc2lfY2xrX21uZ3IgKm1uZ3IgPSBjbGtfbW5ncjsKLQlzdHJ1Y3QgZHNpX2Nsa19j bGllbnRfaW5mbyAqYzsKLQotCWlmICghbW5ncikgewotCQlwcl9lcnIoImJhZCBwYXJhbXNcbiIp OwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9Ci0KLQltdXRleF9sb2NrKCZtbmdyLT5j bGtfbXV0ZXgpOwotCi0JYyA9IGt6YWxsb2Moc2l6ZW9mKCpjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYg KCFjKSB7Ci0JCWhhbmRsZSA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQot Ci0Jc3RybGNweShjLT5uYW1lLCBjbGllbnQsIE1BWF9TVFJJTkdfTEVOKTsKLQljLT5tbmdyID0g bW5ncjsKLQotCWxpc3RfYWRkKCZjLT5saXN0LCAmbW5nci0+Y2xpZW50X2xpc3QpOwotCi0JcHJf ZGVidWcoIlslc106IEFkZGVkIG5ldyBjbGllbnQgKCVzKVxuIiwgbW5nci0+bmFtZSwgYy0+bmFt ZSk7Ci0JaGFuZGxlID0gYzsKLWVycm9yOgotCW11dGV4X3VubG9jaygmbW5nci0+Y2xrX211dGV4 KTsKLQlyZXR1cm4gaGFuZGxlOwotfQotCi1pbnQgZHNpX2RlcmVnaXN0ZXJfY2xrX2hhbmRsZSh2 b2lkICpjbGllbnQpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2Nsa19jbGllbnRfaW5m byAqYyA9IGNsaWVudDsKLQlzdHJ1Y3QgZHNpX2Nsa19tbmdyICptbmdyOwotCXN0cnVjdCBsaXN0 X2hlYWQgKnBvcyA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqdG1wID0gTlVMTDsKLQlzdHJ1 Y3QgZHNpX2Nsa19jbGllbnRfaW5mbyAqbm9kZSA9IE5VTEw7Ci0KLQlpZiAoIWNsaWVudCkgewot CQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0J bW5nciA9IGMtPm1uZ3I7Ci0JcHJfZGVidWcoIiVzOiBFTlRFUlxuIiwgbW5nci0+bmFtZSk7Ci0J bXV0ZXhfbG9jaygmbW5nci0+Y2xrX211dGV4KTsKLQljLT5jb3JlX2Nsa19zdGF0ZSA9IERTSV9D TEtfT0ZGOwotCWMtPmxpbmtfY2xrX3N0YXRlID0gRFNJX0NMS19PRkY7Ci0KLQlyYyA9IGRzaV9y ZWNoZWNrX2Nsa19zdGF0ZShtbmdyKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJjbG9jayBzdGF0 ZSByZWNoZWNrIGZhaWxlZCByYyA9ICVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0J bGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdG1wLCAmbW5nci0+Y2xpZW50X2xpc3QpIHsKLQkJbm9k ZSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgZHNpX2Nsa19jbGllbnRfaW5mbywKLQkJCSAgbGlz dCk7Ci0JCWlmIChub2RlID09IGMpIHsKLQkJCWxpc3RfZGVsKCZub2RlLT5saXN0KTsKLQkJCXBy X2RlYnVnKCJSZW1vdmVkIGRldmljZSAoJXMpXG4iLCBub2RlLT5uYW1lKTsKLQkJCWtmcmVlKG5v ZGUpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLWVycm9yOgotCW11dGV4X3VubG9jaygmbW5nci0+ Y2xrX211dGV4KTsKLQlwcl9kZWJ1ZygiJXM6IEVYSVQsIHJjID0gJWRcbiIsIG1uZ3ItPm5hbWUs IHJjKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXZvaWQgKmRzaV9kaXNwbGF5X2Nsa19tbmdyX3JlZ2lz dGVyKHN0cnVjdCBkc2lfY2xrX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IGRzaV9jbGtfbW5nciAq bW5ncjsKLQlpbnQgaSA9IDA7Ci0KLQlpZiAoIWluZm8pIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBh cmFtc1xuIik7Ci0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotCX0KLQotCW1uZ3IgPSBremFs bG9jKHNpemVvZigqbW5nciksIEdGUF9LRVJORUwpOwotCWlmICghbW5ncikgewotCQltbmdyID0g RVJSX1BUUigtRU5PTUVNKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQltdXRleF9pbml0KCZtbmdy LT5jbGtfbXV0ZXgpOwotCW1uZ3ItPmRzaV9jdHJsX2NvdW50ID0gaW5mby0+ZHNpX2N0cmxfY291 bnQ7Ci0JbW5nci0+bWFzdGVyX25keCA9IGluZm8tPm1hc3Rlcl9uZHg7Ci0KLQlpZiAobW5nci0+ ZHNpX2N0cmxfY291bnQgPiBNQVhfRFNJX0NUUkwpIHsKLQkJa2ZyZWUobW5ncik7Ci0JCXJldHVy biBFUlJfUFRSKC1FSU5WQUwpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBtbmdyLT5kc2lfY3Ry bF9jb3VudDsgaSsrKSB7Ci0JCW1lbWNweSgmbW5nci0+Y29yZV9jbGtzW2ldLmNsa3MsICZpbmZv LT5jX2Nsa3NbaV0sCi0JCQlzaXplb2Yoc3RydWN0IGRzaV9jb3JlX2Nsa19pbmZvKSk7Ci0JCW1l bWNweSgmbW5nci0+bGlua19jbGtzW2ldLmNsa3MsICZpbmZvLT5sX2Nsa3NbaV0sCi0JCQlzaXpl b2Yoc3RydWN0IGRzaV9saW5rX2Nsa19pbmZvKSk7Ci0JCW1uZ3ItPmNvcmVfY2xrc1tpXS5idXNf aGFuZGxlID0gaW5mby0+YnVzX2hhbmRsZVtpXTsKLQkJbW5nci0+Y3RybF9pbmRleFtpXSA9IGlu Zm8tPmN0cmxfaW5kZXhbaV07Ci0JfQotCi0JSU5JVF9MSVNUX0hFQUQoJm1uZ3ItPmNsaWVudF9s aXN0KTsKLQltbmdyLT5wcmVfY2xrb25fY2IgPSBpbmZvLT5wcmVfY2xrb25fY2I7Ci0JbW5nci0+ cG9zdF9jbGtvbl9jYiA9IGluZm8tPnBvc3RfY2xrb25fY2I7Ci0JbW5nci0+cHJlX2Nsa29mZl9j YiA9IGluZm8tPnByZV9jbGtvZmZfY2I7Ci0JbW5nci0+cG9zdF9jbGtvZmZfY2IgPSBpbmZvLT5w b3N0X2Nsa29mZl9jYjsKLQltbmdyLT5wcml2X2RhdGEgPSBpbmZvLT5wcml2X2RhdGE7Ci0JbWVt Y3B5KG1uZ3ItPm5hbWUsIGluZm8tPm5hbWUsIE1BWF9TVFJJTkdfTEVOKTsKLQotZXJyb3I6Ci0J cHJfZGVidWcoIkVYSVQsIHJjID0gJWxkXG4iLCBQVFJfRVJSKG1uZ3IpKTsKLQlyZXR1cm4gbW5n cjsKLX0KLQotaW50IGRzaV9kaXNwbGF5X2Nsa19tbmdyX2RlcmVnaXN0ZXIodm9pZCAqY2xrX21u Z3IpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2Nsa19tbmdyICptbmdyID0gY2xrX21u Z3I7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zaXRpb24gPSBOVUxMOwotCXN0cnVjdCBsaXN0X2hl YWQgKnRtcCA9IE5VTEw7Ci0Jc3RydWN0IGRzaV9jbGtfY2xpZW50X2luZm8gKm5vZGUgPSBOVUxM OwotCi0JaWYgKCFtbmdyKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1 cm4gLUVJTlZBTDsKLQl9Ci0KLQlwcl9kZWJ1ZygiJXM6IEVOVEVSXG4iLCBtbmdyLT5uYW1lKTsK LQltdXRleF9sb2NrKCZtbmdyLT5jbGtfbXV0ZXgpOwotCi0JbGlzdF9mb3JfZWFjaF9zYWZlKHBv c2l0aW9uLCB0bXAsICZtbmdyLT5jbGllbnRfbGlzdCkgewotCQlub2RlID0gbGlzdF9lbnRyeShw b3NpdGlvbiwgc3RydWN0IGRzaV9jbGtfY2xpZW50X2luZm8sCi0JCQkgIGxpc3QpOwotCQlsaXN0 X2RlbCgmbm9kZS0+bGlzdCk7Ci0JCXByX2RlYnVnKCJSZW1vdmVkIGRldmljZSAoJXMpXG4iLCBu b2RlLT5uYW1lKTsKLQkJa2ZyZWUobm9kZSk7Ci0JfQotCi0JcmMgPSBkc2lfcmVjaGVja19jbGtf c3RhdGUobW5ncik7Ci0JaWYgKHJjKQotCQlwcl9lcnIoImZhaWxlZCB0byBkaXNhYmxlIGFsbCBj bG9ja3NcbiIpOwotCi0JbXV0ZXhfdW5sb2NrKCZtbmdyLT5jbGtfbXV0ZXgpOwotCXByX2RlYnVn KCIlczogRVhJVCwgcmMgPSAlZFxuIiwgbW5nci0+bmFtZSwgcmMpOwotCWtmcmVlKG1uZ3IpOwot CXJldHVybiByYzsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3Rh Z2luZy9kc2lfY3RybC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3Ry bC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGNmOWNhLi4wMDAwMDAwCi0tLSBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmwuYworKysgL2Rldi9udWxs CkBAIC0xLDI4NDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUg TGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl Ci0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0K LSNkZWZpbmUgcHJfZm10KGZtdCkJImRzaS1jdHJsOlslc10gIiBmbXQsIF9fZnVuY19fCi0KLSNp bmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNs dWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4K LSNpZmRlZiBDT05GSUdfUUNPTV9CVVNfU0NBTElORwotI2luY2x1ZGUgPGxpbnV4L21zbS1idXMu aD4KLSNlbmRpZgotI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgotI2luY2x1ZGUgPHZpZGVvL21p cGlfZGlzcGxheS5oPgotCi0jaW5jbHVkZSAibXNtX2Rydi5oIgotI2luY2x1ZGUgIm1zbV9rbXMu aCIKLSNpbmNsdWRlICJtc21fZ3B1LmgiCi0jaW5jbHVkZSAibXNtX21tdS5oIgotI2luY2x1ZGUg ImRzaV9jdHJsLmgiCi0jaW5jbHVkZSAiZHNpX2N0cmxfaHcuaCIKLSNpbmNsdWRlICJkc2lfY2xr LmgiCi0jaW5jbHVkZSAiZHNpX3B3ci5oIgotI2luY2x1ZGUgImRzaV9jYXRhbG9nLmgiCi0KLSNp bmNsdWRlICJkcHVfZGJnLmgiCi0KLSNkZWZpbmUgRFNJX0NUUkxfREVGQVVMVF9MQUJFTCAiTURT UyBEU0kgQ1RSTCIKLQotI2RlZmluZSBEU0lfQ1RSTF9UWF9UT19NUyAgICAgMjAwCi0KLSNkZWZp bmUgVE9fT05fT0ZGKHgpICgoeCkgPyAiT04iIDogIk9GRiIpCi0KLSNkZWZpbmUgQ0VJTCh4LCB5 KSAgICAgICAgICAgICAgKCgoeCkgKyAoKHkpLTEpKSAvICh5KSkKLS8qKgotICogZW51bSBkc2lf Y3RybF9kcml2ZXJfb3BzIC0gY29udHJvbGxlciBkcml2ZXIgb3BzCi0gKi8KLWVudW0gZHNpX2N0 cmxfZHJpdmVyX29wcyB7Ci0JRFNJX0NUUkxfT1BfUE9XRVJfU1RBVEVfQ0hBTkdFLAotCURTSV9D VFJMX09QX0NNRF9FTkdJTkUsCi0JRFNJX0NUUkxfT1BfVklEX0VOR0lORSwKLQlEU0lfQ1RSTF9P UF9IT1NUX0VOR0lORSwKLQlEU0lfQ1RSTF9PUF9DTURfVFgsCi0JRFNJX0NUUkxfT1BfSE9TVF9J TklULAotCURTSV9DVFJMX09QX1RQRywKLQlEU0lfQ1RSTF9PUF9QSFlfU1dfUkVTRVQsCi0JRFNJ X0NUUkxfT1BfQVNZTkNfVElNSU5HLAotCURTSV9DVFJMX09QX01BWAotfTsKLQotc3RydWN0IGRz aV9jdHJsX2xpc3RfaXRlbSB7Ci0Jc3RydWN0IGRzaV9jdHJsICpjdHJsOwotCXN0cnVjdCBsaXN0 X2hlYWQgbGlzdDsKLX07Ci0KLXN0YXRpYyBMSVNUX0hFQUQoZHNpX2N0cmxfbGlzdCk7Ci1zdGF0 aWMgREVGSU5FX01VVEVYKGRzaV9jdHJsX2xpc3RfbG9jayk7Ci0KLXN0YXRpYyBjb25zdCBlbnVt IGRzaV9jdHJsX3ZlcnNpb24gZHNpX2N0cmxfdjFfNCA9IERTSV9DVFJMX1ZFUlNJT05fMV80Owot c3RhdGljIGNvbnN0IGVudW0gZHNpX2N0cmxfdmVyc2lvbiBkc2lfY3RybF92Ml8wID0gRFNJX0NU UkxfVkVSU0lPTl8yXzA7Ci1zdGF0aWMgY29uc3QgZW51bSBkc2lfY3RybF92ZXJzaW9uIGRzaV9j dHJsX3YyXzIgPSBEU0lfQ1RSTF9WRVJTSU9OXzJfMjsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBv Zl9kZXZpY2VfaWQgbXNtX2RzaV9vZl9tYXRjaFtdID0gewotCXsKLQkJLmNvbXBhdGlibGUgPSAi cWNvbSxkc2ktY3RybC1ody12MS40IiwKLQkJLmRhdGEgPSAmZHNpX2N0cmxfdjFfNCwKLQl9LAot CXsKLQkJLmNvbXBhdGlibGUgPSAicWNvbSxkc2ktY3RybC1ody12Mi4wIiwKLQkJLmRhdGEgPSAm ZHNpX2N0cmxfdjJfMCwKLQl9LAotCXsKLQkJLmNvbXBhdGlibGUgPSAicWNvbSxkc2ktY3RybC1o dy12Mi4yIiwKLQkJLmRhdGEgPSAmZHNpX2N0cmxfdjJfMiwKLQl9LAotCXt9Ci19OwotCi1zdGF0 aWMgc3NpemVfdCBkZWJ1Z2ZzX3N0YXRlX2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJ CQkgICAgICAgY2hhciBfX3VzZXIgKmJ1ZmYsCi0JCQkJICAgICAgIHNpemVfdCBjb3VudCwKLQkJ CQkgICAgICAgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwgPSBm aWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciAqYnVmOwotCXUzMiBsZW4gPSAwOwotCi0JaWYgKCFk c2lfY3RybCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoKnBwb3MpCi0JCXJldHVybiAwOwot Ci0JYnVmID0ga3phbGxvYyhTWl80SywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpCi0JCXJldHVy biAtRU5PTUVNOwotCi0JLyogRHVtcCBjdXJyZW50IHN0YXRlICovCi0JbGVuICs9IHNucHJpbnRm KChidWYgKyBsZW4pLCAoU1pfNEsgLSBsZW4pLCAiQ3VycmVudCBTdGF0ZTpcbiIpOwotCWxlbiAr PSBzbnByaW50ZigoYnVmICsgbGVuKSwgKFNaXzRLIC0gbGVuKSwKLQkJCSJcdENUUkxfRU5HSU5F ID0gJXNcbiIsCi0JCQlUT19PTl9PRkYoZHNpX2N0cmwtPmN1cnJlbnRfc3RhdGUuY29udHJvbGxl cl9zdGF0ZSkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKFNaXzRLIC0gbGVuKSwK LQkJCSJcdFZJREVPX0VOR0lORSA9ICVzXG5cdENPTU1BTkRfRU5HSU5FID0gJXNcbiIsCi0JCQlU T19PTl9PRkYoZHNpX2N0cmwtPmN1cnJlbnRfc3RhdGUudmlkX2VuZ2luZV9zdGF0ZSksCi0JCQlU T19PTl9PRkYoZHNpX2N0cmwtPmN1cnJlbnRfc3RhdGUuY21kX2VuZ2luZV9zdGF0ZSkpOwotCi0J LyogRHVtcCBjbG9jayBpbmZvcm1hdGlvbiAqLwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVu KSwgKFNaXzRLIC0gbGVuKSwgIlxuQ2xvY2sgSW5mbzpcbiIpOwotCWxlbiArPSBzbnByaW50Zigo YnVmICsgbGVuKSwgKFNaXzRLIC0gbGVuKSwKLQkJCSJcdEJZVEVfQ0xLID0gJXUsIFBJWEVMX0NM SyA9ICV1LCBFU0NfQ0xLID0gJXVcbiIsCi0JCQlkc2lfY3RybC0+Y2xrX2ZyZXEuYnl0ZV9jbGtf cmF0ZSwKLQkJCWRzaV9jdHJsLT5jbGtfZnJlcS5waXhfY2xrX3JhdGUsCi0JCQlkc2lfY3RybC0+ Y2xrX2ZyZXEuZXNjX2Nsa19yYXRlKTsKLQotCS8qIFRPRE86IG1ha2Ugc3VyZSB0aGF0IHRoaXMg ZG9lcyBub3QgZXhjZWVkIDRLICovCi0JaWYgKGNvcHlfdG9fdXNlcihidWZmLCBidWYsIGxlbikp IHsKLQkJa2ZyZWUoYnVmKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JKnBwb3MgKz0gbGVu OwotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIHNzaXplX3QgZGVidWdm c19yZWdfZHVtcF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCSAgICAgY2hhciBfX3VzZXIg KmJ1ZmYsCi0JCQkJICAgICBzaXplX3QgY291bnQsCi0JCQkJICAgICBsb2ZmX3QgKnBwb3MpCi17 Ci0Jc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQljaGFy ICpidWY7Ci0JdTMyIGxlbiA9IDA7Ci0Jc3RydWN0IGRzaV9jbGtfY3RybF9pbmZvIGNsa19pbmZv OwotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRzaV9jdHJsKQotCQlyZXR1cm4gLUVOT0RFVjsKLQot CWlmICgqcHBvcykKLQkJcmV0dXJuIDA7Ci0KLQlidWYgPSBremFsbG9jKFNaXzRLLCBHRlBfS0VS TkVMKTsKLQlpZiAoIWJ1ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQljbGtfaW5mby5jbGllbnQg PSBEU0lfQ0xLX1JFUV9EU0lfQ0xJRU5UOwotCWNsa19pbmZvLmNsa190eXBlID0gRFNJX0NPUkVf Q0xLOwotCWNsa19pbmZvLmNsa19zdGF0ZSA9IERTSV9DTEtfT047Ci0KLQlyYyA9IGRzaV9jdHJs LT5jbGtfY2IuZHNpX2Nsa19jYihkc2lfY3RybC0+Y2xrX2NiLnByaXYsIGNsa19pbmZvKTsKLQlp ZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZW5hYmxlIERTSSBjb3JlIGNsb2Nrc1xuIik7 Ci0JCWtmcmVlKGJ1Zik7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlpZiAoZHNpX2N0cmwtPmh3Lm9w cy5yZWdfZHVtcF90b19idWZmZXIpCi0JCWxlbiA9IGRzaV9jdHJsLT5ody5vcHMucmVnX2R1bXBf dG9fYnVmZmVyKCZkc2lfY3RybC0+aHcsCi0JCQkJYnVmLCBTWl80Syk7Ci0KLQljbGtfaW5mby5j bGtfc3RhdGUgPSBEU0lfQ0xLX09GRjsKLQlyYyA9IGRzaV9jdHJsLT5jbGtfY2IuZHNpX2Nsa19j Yihkc2lfY3RybC0+Y2xrX2NiLnByaXYsIGNsa19pbmZvKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJy KCJmYWlsZWQgdG8gZGlzYWJsZSBEU0kgY29yZSBjbG9ja3NcbiIpOwotCQlrZnJlZShidWYpOwot CQlyZXR1cm4gcmM7Ci0JfQotCi0KLQkvKiBUT0RPOiBtYWtlIHN1cmUgdGhhdCB0aGlzIGRvZXMg bm90IGV4Y2VlZCA0SyAqLwotCWlmIChjb3B5X3RvX3VzZXIoYnVmZiwgYnVmLCBsZW4pKSB7Ci0J CWtmcmVlKGJ1Zik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCSpwcG9zICs9IGxlbjsKLQlr ZnJlZShidWYpOwotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9v cGVyYXRpb25zIHN0YXRlX2luZm9fZm9wcyA9IHsKLQkub3BlbiA9IHNpbXBsZV9vcGVuLAotCS5y ZWFkID0gZGVidWdmc19zdGF0ZV9pbmZvX3JlYWQsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0 IGZpbGVfb3BlcmF0aW9ucyByZWdfZHVtcF9mb3BzID0gewotCS5vcGVuID0gc2ltcGxlX29wZW4s Ci0JLnJlYWQgPSBkZWJ1Z2ZzX3JlZ19kdW1wX3JlYWQsCi19OwotCi1zdGF0aWMgaW50IGRzaV9j dHJsX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJCSBzdHJ1Y3Qg ZGVudHJ5ICpwYXJlbnQpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZGVudHJ5ICpkaXIsICpz dGF0ZV9maWxlLCAqcmVnX2R1bXA7Ci0JY2hhciBkYmdfbmFtZVtEU0lfREVCVUdfTkFNRV9MRU5d OwotCi0JZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGRzaV9jdHJsLT5uYW1lLCBwYXJlbnQpOwot CWlmIChJU19FUlJfT1JfTlVMTChkaXIpKSB7Ci0JCXJjID0gUFRSX0VSUihkaXIpOwotCQlwcl9l cnIoIltEU0lfJWRdIGRlYnVnZnMgY3JlYXRlIGRpciBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAg ICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlzdGF0 ZV9maWxlID0gZGVidWdmc19jcmVhdGVfZmlsZSgic3RhdGVfaW5mbyIsCi0JCQkJCSAwNDQ0LAot CQkJCQkgZGlyLAotCQkJCQkgZHNpX2N0cmwsCi0JCQkJCSAmc3RhdGVfaW5mb19mb3BzKTsKLQlp ZiAoSVNfRVJSX09SX05VTEwoc3RhdGVfZmlsZSkpIHsKLQkJcmMgPSBQVFJfRVJSKHN0YXRlX2Zp bGUpOwotCQlwcl9lcnIoIltEU0lfJWRdIHN0YXRlIGZpbGUgZmFpbGVkLCByYz0lZFxuIiwKLQkJ ICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0JCWdvdG8gZXJyb3JfcmVtb3ZlX2Rp cjsKLQl9Ci0KLQlyZWdfZHVtcCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlZ19kdW1wIiwKLQkJ CQkgICAgICAgMDQ0NCwKLQkJCQkgICAgICAgZGlyLAotCQkJCSAgICAgICBkc2lfY3RybCwKLQkJ CQkgICAgICAgJnJlZ19kdW1wX2ZvcHMpOwotCWlmIChJU19FUlJfT1JfTlVMTChyZWdfZHVtcCkp IHsKLQkJcmMgPSBQVFJfRVJSKHJlZ19kdW1wKTsKLQkJcHJfZXJyKCJbRFNJXyVkXSByZWcgZHVt cCBmaWxlIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwg cmMpOwotCQlnb3RvIGVycm9yX3JlbW92ZV9kaXI7Ci0JfQotCi0JZHNpX2N0cmwtPmRlYnVnZnNf cm9vdCA9IGRpcjsKLQotCXNucHJpbnRmKGRiZ19uYW1lLCBEU0lfREVCVUdfTkFNRV9MRU4sICJk c2klZF9jdHJsIiwKLQkJCQkJCWRzaV9jdHJsLT5jZWxsX2luZGV4KTsKLQlkcHVfZGJnX3JlZ19y ZWdpc3Rlcl9iYXNlKGRiZ19uYW1lLCBkc2lfY3RybC0+aHcuYmFzZSwKLQkJCQltc21faW9tYXBf c2l6ZShkc2lfY3RybC0+cGRldiwgImRzaV9jdHJsIikpOwotZXJyb3JfcmVtb3ZlX2RpcjoKLQlk ZWJ1Z2ZzX3JlbW92ZShkaXIpOwotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50 IGRzaV9jdHJsX2RlYnVnZnNfZGVpbml0KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpCi17Ci0J ZGVidWdmc19yZW1vdmUoZHNpX2N0cmwtPmRlYnVnZnNfcm9vdCk7Ci0JcmV0dXJuIDA7Ci19Ci0K LXN0YXRpYyBpbmxpbmUgc3RydWN0IG1zbV9nZW1fYWRkcmVzc19zcGFjZSoKLWRzaV9jdHJsX2dl dF9hc3BhY2Uoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJaW50IGRvbWFpbikKLXsKLQlp ZiAoIWRzaV9jdHJsIHx8ICFkc2lfY3RybC0+ZHJtX2RldikKLQkJcmV0dXJuIE5VTEw7Ci0KLQly ZXR1cm4gbXNtX2dlbV9zbW11X2FkZHJlc3Nfc3BhY2VfZ2V0KGRzaV9jdHJsLT5kcm1fZGV2LCBk b21haW4pOwotfQotCi1zdGF0aWMgaW50IGRzaV9jdHJsX2NoZWNrX3N0YXRlKHN0cnVjdCBkc2lf Y3RybCAqZHNpX2N0cmwsCi0JCQkJZW51bSBkc2lfY3RybF9kcml2ZXJfb3BzIG9wLAotCQkJCXUz MiBvcF9zdGF0ZSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfY3RybF9zdGF0ZV9pbmZv ICpzdGF0ZSA9ICZkc2lfY3RybC0+Y3VycmVudF9zdGF0ZTsKLQotCXN3aXRjaCAob3ApIHsKLQlj YXNlIERTSV9DVFJMX09QX1BPV0VSX1NUQVRFX0NIQU5HRToKLQkJaWYgKHN0YXRlLT5wb3dlcl9z dGF0ZSA9PSBvcF9zdGF0ZSkgewotCQkJcHJfZGVidWcoIlslZF0gTm8gY2hhbmdlIGluIHN0YXRl LCBwd3Jfc3RhdGU9JWRcbiIsCi0JCQkgICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIG9wX3N0 YXRlKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJfSBlbHNlIGlmIChzdGF0ZS0+cG93ZXJfc3RhdGUg PT0gRFNJX0NUUkxfUE9XRVJfVlJFR19PTikgewotCQkJaWYgKHN0YXRlLT52aWRfZW5naW5lX3N0 YXRlID09IERTSV9DVFJMX0VOR0lORV9PTikgewotCQkJCXByX2RlYnVnKCJbJWRdU3RhdGUgZXJy b3I6IG9wPSVkOiAlZFxuIiwKLQkJCQkgICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsCi0JCQkJ ICAgICAgIG9wX3N0YXRlLAotCQkJCSAgICAgICBzdGF0ZS0+dmlkX2VuZ2luZV9zdGF0ZSk7Ci0J CQkJcmMgPSAtRUlOVkFMOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCWNhc2UgRFNJX0NUUkxfT1Bf Q01EX0VOR0lORToKLQkJaWYgKHN0YXRlLT5jbWRfZW5naW5lX3N0YXRlID09IG9wX3N0YXRlKSB7 Ci0JCQlwcl9kZWJ1ZygiWyVkXSBObyBjaGFuZ2UgaW4gc3RhdGUsIGNtZF9zdGF0ZT0lZFxuIiwK LQkJCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwgb3Bfc3RhdGUpOwotCQkJcmMgPSAtRUlO VkFMOwotCQl9IGVsc2UgaWYgKChzdGF0ZS0+cG93ZXJfc3RhdGUgIT0gRFNJX0NUUkxfUE9XRVJf VlJFR19PTikgfHwKLQkJCSAgIChzdGF0ZS0+Y29udHJvbGxlcl9zdGF0ZSAhPSBEU0lfQ1RSTF9F TkdJTkVfT04pKSB7Ci0JCQlwcl9kZWJ1ZygiWyVkXVN0YXRlIGVycm9yOiBvcD0lZDogJWQsICVk XG4iLAotCQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LAotCQkJICAgICAgIG9wLAotCQkJ ICAgICAgIHN0YXRlLT5wb3dlcl9zdGF0ZSwKLQkJCSAgICAgICBzdGF0ZS0+Y29udHJvbGxlcl9z dGF0ZSk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQ1RSTF9P UF9WSURfRU5HSU5FOgotCQlpZiAoc3RhdGUtPnZpZF9lbmdpbmVfc3RhdGUgPT0gb3Bfc3RhdGUp IHsKLQkJCXByX2RlYnVnKCJbJWRdIE5vIGNoYW5nZSBpbiBzdGF0ZSwgY21kX3N0YXRlPSVkXG4i LAotCQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCBvcF9zdGF0ZSk7Ci0JCQlyYyA9IC1F SU5WQUw7Ci0JCX0gZWxzZSBpZiAoKHN0YXRlLT5wb3dlcl9zdGF0ZSAhPSBEU0lfQ1RSTF9QT1dF Ul9WUkVHX09OKSB8fAotCQkJICAgKHN0YXRlLT5jb250cm9sbGVyX3N0YXRlICE9IERTSV9DVFJM X0VOR0lORV9PTikpIHsKLQkJCXByX2RlYnVnKCJbJWRdU3RhdGUgZXJyb3I6IG9wPSVkOiAlZCwg JWRcbiIsCi0JCQkgICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsCi0JCQkgICAgICAgb3AsCi0J CQkgICAgICAgc3RhdGUtPnBvd2VyX3N0YXRlLAotCQkJICAgICAgIHN0YXRlLT5jb250cm9sbGVy X3N0YXRlKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQljYXNlIERTSV9DVFJM X09QX0hPU1RfRU5HSU5FOgotCQlpZiAoc3RhdGUtPmNvbnRyb2xsZXJfc3RhdGUgPT0gb3Bfc3Rh dGUpIHsKLQkJCXByX2RlYnVnKCJbJWRdIE5vIGNoYW5nZSBpbiBzdGF0ZSwgY3RybF9zdGF0ZT0l ZFxuIiwKLQkJCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwgb3Bfc3RhdGUpOwotCQkJcmMg PSAtRUlOVkFMOwotCQl9IGVsc2UgaWYgKHN0YXRlLT5wb3dlcl9zdGF0ZSAhPSBEU0lfQ1RSTF9Q T1dFUl9WUkVHX09OKSB7Ci0JCQlwcl9kZWJ1ZygiWyVkXVN0YXRlIGVycm9yIChsaW5rIGlzIG9m Zik6IG9wPSVkOiwgJWRcbiIsCi0JCQkgICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsCi0JCQkg ICAgICAgb3Bfc3RhdGUsCi0JCQkgICAgICAgc3RhdGUtPnBvd2VyX3N0YXRlKTsKLQkJCXJjID0g LUVJTlZBTDsKLQkJfSBlbHNlIGlmICgob3Bfc3RhdGUgPT0gRFNJX0NUUkxfRU5HSU5FX09GRikg JiYKLQkJCSAgICgoc3RhdGUtPmNtZF9lbmdpbmVfc3RhdGUgIT0gRFNJX0NUUkxfRU5HSU5FX09G RikgfHwKLQkJCSAgICAoc3RhdGUtPnZpZF9lbmdpbmVfc3RhdGUgIT0gRFNJX0NUUkxfRU5HSU5F X09GRikpKSB7Ci0JCQlwcl9kZWJ1ZygiWyVkXVN0YXRlIGVycm9yIChlbmcgb24pOiBvcD0lZDog JWQsICVkXG4iLAotCQkJCSAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsCi0JCQkJICBvcF9zdGF0ZSwK LQkJCQkgIHN0YXRlLT5jbWRfZW5naW5lX3N0YXRlLAotCQkJCSAgc3RhdGUtPnZpZF9lbmdpbmVf c3RhdGUpOwotCQkJcmMgPSAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgRFNJX0NUUkxf T1BfQ01EX1RYOgotCQlpZiAoKHN0YXRlLT5wb3dlcl9zdGF0ZSAhPSBEU0lfQ1RSTF9QT1dFUl9W UkVHX09OKSB8fAotCQkgICAgKHN0YXRlLT5ob3N0X2luaXRpYWxpemVkICE9IHRydWUpIHx8Ci0J CSAgICAoc3RhdGUtPmNtZF9lbmdpbmVfc3RhdGUgIT0gRFNJX0NUUkxfRU5HSU5FX09OKSkgewot CQkJcHJfZGVidWcoIlslZF1TdGF0ZSBlcnJvcjogb3A9JWQ6ICVkLCAlZCwgJWRcbiIsCi0JCQkg ICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsCi0JCQkgICAgICAgb3AsCi0JCQkgICAgICAgc3Rh dGUtPnBvd2VyX3N0YXRlLAotCQkJICAgICAgIHN0YXRlLT5ob3N0X2luaXRpYWxpemVkLAotCQkJ ICAgICAgIHN0YXRlLT5jbWRfZW5naW5lX3N0YXRlKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJfQot CQlicmVhazsKLQljYXNlIERTSV9DVFJMX09QX0hPU1RfSU5JVDoKLQkJaWYgKHN0YXRlLT5ob3N0 X2luaXRpYWxpemVkID09IG9wX3N0YXRlKSB7Ci0JCQlwcl9kZWJ1ZygiWyVkXSBObyBjaGFuZ2Ug aW4gc3RhdGUsIGhvc3RfaW5pdD0lZFxuIiwKLQkJCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRl eCwgb3Bfc3RhdGUpOwotCQkJcmMgPSAtRUlOVkFMOwotCQl9IGVsc2UgaWYgKHN0YXRlLT5wb3dl cl9zdGF0ZSAhPSBEU0lfQ1RSTF9QT1dFUl9WUkVHX09OKSB7Ci0JCQlwcl9kZWJ1ZygiWyVkXVN0 YXRlIGVycm9yOiBvcD0lZDogJWRcbiIsCi0JCQkgICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgs IG9wLCBzdGF0ZS0+cG93ZXJfc3RhdGUpOwotCQkJcmMgPSAtRUlOVkFMOwotCQl9Ci0JCWJyZWFr OwotCWNhc2UgRFNJX0NUUkxfT1BfVFBHOgotCQlpZiAoc3RhdGUtPnRwZ19lbmFibGVkID09IG9w X3N0YXRlKSB7Ci0JCQlwcl9kZWJ1ZygiWyVkXSBObyBjaGFuZ2UgaW4gc3RhdGUsIHRwZ19lbmFi bGVkPSVkXG4iLAotCQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCBvcF9zdGF0ZSk7Ci0J CQlyYyA9IC1FSU5WQUw7Ci0JCX0gZWxzZSBpZiAoKHN0YXRlLT5wb3dlcl9zdGF0ZSAhPSBEU0lf Q1RSTF9QT1dFUl9WUkVHX09OKSB8fAotCQkJICAgKHN0YXRlLT5jb250cm9sbGVyX3N0YXRlICE9 IERTSV9DVFJMX0VOR0lORV9PTikpIHsKLQkJCXByX2RlYnVnKCJbJWRdU3RhdGUgZXJyb3I6IG9w PSVkOiAlZCwgJWRcbiIsCi0JCQkgICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsCi0JCQkgICAg ICAgb3AsCi0JCQkgICAgICAgc3RhdGUtPnBvd2VyX3N0YXRlLAotCQkJICAgICAgIHN0YXRlLT5j b250cm9sbGVyX3N0YXRlKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQljYXNl IERTSV9DVFJMX09QX1BIWV9TV19SRVNFVDoKLQkJaWYgKHN0YXRlLT5wb3dlcl9zdGF0ZSAhPSBE U0lfQ1RSTF9QT1dFUl9WUkVHX09OKSB7Ci0JCQlwcl9kZWJ1ZygiWyVkXVN0YXRlIGVycm9yOiBv cD0lZDogJWRcbiIsCi0JCQkgICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIG9wLCBzdGF0ZS0+ cG93ZXJfc3RhdGUpOwotCQkJcmMgPSAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgRFNJ X0NUUkxfT1BfQVNZTkNfVElNSU5HOgotCQlpZiAoc3RhdGUtPnZpZF9lbmdpbmVfc3RhdGUgIT0g b3Bfc3RhdGUpIHsKLQkJCXByX2VycigiWyVkXSBVbmV4cGVjdGVkIGVuZ2luZSBzdGF0ZSB2aWRf c3RhdGU9JWRcbiIsCi0JCQkgICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIG9wX3N0YXRlKTsK LQkJCXJjID0gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyYyA9IC1FTk9U U1VQUDsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBkc2lf Y3RybF91cGRhdGVfc3RhdGUoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJCQkgIGVudW0g ZHNpX2N0cmxfZHJpdmVyX29wcyBvcCwKLQkJCQkgIHUzMiBvcF9zdGF0ZSkKLXsKLQlzdHJ1Y3Qg ZHNpX2N0cmxfc3RhdGVfaW5mbyAqc3RhdGUgPSAmZHNpX2N0cmwtPmN1cnJlbnRfc3RhdGU7Ci0K LQlzd2l0Y2ggKG9wKSB7Ci0JY2FzZSBEU0lfQ1RSTF9PUF9QT1dFUl9TVEFURV9DSEFOR0U6Ci0J CXN0YXRlLT5wb3dlcl9zdGF0ZSA9IG9wX3N0YXRlOwotCQlicmVhazsKLQljYXNlIERTSV9DVFJM X09QX0NNRF9FTkdJTkU6Ci0JCXN0YXRlLT5jbWRfZW5naW5lX3N0YXRlID0gb3Bfc3RhdGU7Ci0J CWJyZWFrOwotCWNhc2UgRFNJX0NUUkxfT1BfVklEX0VOR0lORToKLQkJc3RhdGUtPnZpZF9lbmdp bmVfc3RhdGUgPSBvcF9zdGF0ZTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQ1RSTF9PUF9IT1NUX0VO R0lORToKLQkJc3RhdGUtPmNvbnRyb2xsZXJfc3RhdGUgPSBvcF9zdGF0ZTsKLQkJYnJlYWs7Ci0J Y2FzZSBEU0lfQ1RSTF9PUF9IT1NUX0lOSVQ6Ci0JCXN0YXRlLT5ob3N0X2luaXRpYWxpemVkID0g KG9wX3N0YXRlID09IDEpID8gdHJ1ZSA6IGZhbHNlOwotCQlicmVhazsKLQljYXNlIERTSV9DVFJM X09QX1RQRzoKLQkJc3RhdGUtPnRwZ19lbmFibGVkID0gKG9wX3N0YXRlID09IDEpID8gdHJ1ZSA6 IGZhbHNlOwotCQlicmVhazsKLQljYXNlIERTSV9DVFJMX09QX0NNRF9UWDoKLQljYXNlIERTSV9D VFJMX09QX1BIWV9TV19SRVNFVDoKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRp YyBpbnQgZHNpX2N0cmxfaW5pdF9yZWdtYXAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwK LQkJCQlzdHJ1Y3QgZHNpX2N0cmwgKmN0cmwpCi17Ci0JaW50IHJjID0gMDsKLQl2b2lkIF9faW9t ZW0gKnB0cjsKLQotCXB0ciA9IG1zbV9pb3JlbWFwKHBkZXYsICJkc2lfY3RybCIsIGN0cmwtPm5h bWUpOwotCWlmIChJU19FUlIocHRyKSkgewotCQlyYyA9IFBUUl9FUlIocHRyKTsKLQkJcmV0dXJu IHJjOwotCX0KLQotCWN0cmwtPmh3LmJhc2UgPSBwdHI7Ci0JcHJfZGVidWcoIlslc10gbWFwIGRz aV9jdHJsIHJlZ2lzdGVycyB0byAlcFxuIiwgY3RybC0+bmFtZSwKLQkJIGN0cmwtPmh3LmJhc2Up OwotCi0Jc3dpdGNoIChjdHJsLT52ZXJzaW9uKSB7Ci0JY2FzZSBEU0lfQ1RSTF9WRVJTSU9OXzFf NDoKLQljYXNlIERTSV9DVFJMX1ZFUlNJT05fMl8wOgotCQlwdHIgPSBtc21faW9yZW1hcChwZGV2 LCAibW1zc19taXNjIiwgY3RybC0+bmFtZSk7Ci0JCWlmIChJU19FUlIocHRyKSkgewotCQkJcHJf ZXJyKCJtbXNzX21pc2MgYmFzZSBhZGRyZXNzIG5vdCBmb3VuZCBmb3IgWyVzXVxuIiwKLQkJCQkJ Y3RybC0+bmFtZSk7Ci0JCQlyYyA9IFBUUl9FUlIocHRyKTsKLQkJCXJldHVybiByYzsKLQkJfQot CQljdHJsLT5ody5tbXNzX21pc2NfYmFzZSA9IHB0cjsKLQkJY3RybC0+aHcuZGlzcF9jY19iYXNl ID0gTlVMTDsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQ1RSTF9WRVJTSU9OXzJfMjoKLQkJcHRyID0g bXNtX2lvcmVtYXAocGRldiwgImRpc3BfY2NfYmFzZSIsIGN0cmwtPm5hbWUpOwotCQlpZiAoSVNf RVJSKHB0cikpIHsKLQkJCXByX2VycigiZGlzcF9jYyBiYXNlIGFkZHJlc3Mgbm90IGZvdW5kIGZv ciBbJXNdXG4iLAotCQkJCQljdHJsLT5uYW1lKTsKLQkJCXJjID0gUFRSX0VSUihwdHIpOwotCQkJ cmV0dXJuIHJjOwotCQl9Ci0JCWN0cmwtPmh3LmRpc3BfY2NfYmFzZSA9IHB0cjsKLQkJY3RybC0+ aHcubW1zc19taXNjX2Jhc2UgPSBOVUxMOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsK LQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2N0cmxfY2xvY2tzX2RlaW5p dChzdHJ1Y3QgZHNpX2N0cmwgKmN0cmwpCi17Ci0Jc3RydWN0IGRzaV9jb3JlX2Nsa19pbmZvICpj b3JlID0gJmN0cmwtPmNsa19pbmZvLmNvcmVfY2xrczsKLQlzdHJ1Y3QgZHNpX2xpbmtfY2xrX2lu Zm8gKmxpbmsgPSAmY3RybC0+Y2xrX2luZm8ubGlua19jbGtzOwotCXN0cnVjdCBkc2lfY2xrX2xp bmtfc2V0ICpyY2cgPSAmY3RybC0+Y2xrX2luZm8ucmNnX2Nsa3M7Ci0KLQlpZiAoY29yZS0+bWRw X2NvcmVfY2xrKQotCQlkZXZtX2Nsa19wdXQoJmN0cmwtPnBkZXYtPmRldiwgY29yZS0+bWRwX2Nv cmVfY2xrKTsKLQlpZiAoY29yZS0+aWZhY2VfY2xrKQotCQlkZXZtX2Nsa19wdXQoJmN0cmwtPnBk ZXYtPmRldiwgY29yZS0+aWZhY2VfY2xrKTsKLQlpZiAoY29yZS0+Y29yZV9tbXNzX2NsaykKLQkJ ZGV2bV9jbGtfcHV0KCZjdHJsLT5wZGV2LT5kZXYsIGNvcmUtPmNvcmVfbW1zc19jbGspOwotCWlm IChjb3JlLT5idXNfY2xrKQotCQlkZXZtX2Nsa19wdXQoJmN0cmwtPnBkZXYtPmRldiwgY29yZS0+ YnVzX2Nsayk7Ci0JaWYgKGNvcmUtPm1ub2NfY2xrKQotCQlkZXZtX2Nsa19wdXQoJmN0cmwtPnBk ZXYtPmRldiwgY29yZS0+bW5vY19jbGspOwotCi0JbWVtc2V0KGNvcmUsIDB4MCwgc2l6ZW9mKCpj b3JlKSk7Ci0KLQlpZiAobGluay0+Ynl0ZV9jbGspCi0JCWRldm1fY2xrX3B1dCgmY3RybC0+cGRl di0+ZGV2LCBsaW5rLT5ieXRlX2Nsayk7Ci0JaWYgKGxpbmstPnBpeGVsX2NsaykKLQkJZGV2bV9j bGtfcHV0KCZjdHJsLT5wZGV2LT5kZXYsIGxpbmstPnBpeGVsX2Nsayk7Ci0JaWYgKGxpbmstPmVz Y19jbGspCi0JCWRldm1fY2xrX3B1dCgmY3RybC0+cGRldi0+ZGV2LCBsaW5rLT5lc2NfY2xrKTsK LQlpZiAobGluay0+Ynl0ZV9pbnRmX2NsaykKLQkJZGV2bV9jbGtfcHV0KCZjdHJsLT5wZGV2LT5k ZXYsIGxpbmstPmJ5dGVfaW50Zl9jbGspOwotCi0JbWVtc2V0KGxpbmssIDB4MCwgc2l6ZW9mKCps aW5rKSk7Ci0KLQlpZiAocmNnLT5ieXRlX2NsaykKLQkJZGV2bV9jbGtfcHV0KCZjdHJsLT5wZGV2 LT5kZXYsIHJjZy0+Ynl0ZV9jbGspOwotCWlmIChyY2ctPnBpeGVsX2NsaykKLQkJZGV2bV9jbGtf cHV0KCZjdHJsLT5wZGV2LT5kZXYsIHJjZy0+cGl4ZWxfY2xrKTsKLQotCW1lbXNldChyY2csIDB4 MCwgc2l6ZW9mKCpyY2cpKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzaV9jdHJs X2Nsb2Nrc19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkJc3RydWN0IGRz aV9jdHJsICpjdHJsKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9jb3JlX2Nsa19pbmZv ICpjb3JlID0gJmN0cmwtPmNsa19pbmZvLmNvcmVfY2xrczsKLQlzdHJ1Y3QgZHNpX2xpbmtfY2xr X2luZm8gKmxpbmsgPSAmY3RybC0+Y2xrX2luZm8ubGlua19jbGtzOwotCXN0cnVjdCBkc2lfY2xr X2xpbmtfc2V0ICpyY2cgPSAmY3RybC0+Y2xrX2luZm8ucmNnX2Nsa3M7Ci0KLQljb3JlLT5tZHBf Y29yZV9jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgIm1kcF9jb3JlX2NsayIpOwotCWlm IChJU19FUlIoY29yZS0+bWRwX2NvcmVfY2xrKSkgewotCQljb3JlLT5tZHBfY29yZV9jbGsgPSBO VUxMOwotCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIGdldCBtZHBfY29yZV9jbGssIHJjPSVkXG4iLCBy Yyk7Ci0JfQotCi0JY29yZS0+aWZhY2VfY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJp ZmFjZV9jbGsiKTsKLQlpZiAoSVNfRVJSKGNvcmUtPmlmYWNlX2NsaykpIHsKLQkJY29yZS0+aWZh Y2VfY2xrID0gTlVMTDsKLQkJcHJfZGVidWcoImZhaWxlZCB0byBnZXQgaWZhY2VfY2xrLCByYz0l ZFxuIiwgcmMpOwotCX0KLQotCWNvcmUtPmNvcmVfbW1zc19jbGsgPSBkZXZtX2Nsa19nZXQoJnBk ZXYtPmRldiwgImNvcmVfbW1zc19jbGsiKTsKLQlpZiAoSVNfRVJSKGNvcmUtPmNvcmVfbW1zc19j bGspKSB7Ci0JCWNvcmUtPmNvcmVfbW1zc19jbGsgPSBOVUxMOwotCQlwcl9kZWJ1ZygiZmFpbGVk IHRvIGdldCBjb3JlX21tc3NfY2xrLCByYz0lZFxuIiwgcmMpOwotCX0KLQotCWNvcmUtPmJ1c19j bGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgImJ1c19jbGsiKTsKLQlpZiAoSVNfRVJSKGNv cmUtPmJ1c19jbGspKSB7Ci0JCWNvcmUtPmJ1c19jbGsgPSBOVUxMOwotCQlwcl9kZWJ1ZygiZmFp bGVkIHRvIGdldCBidXNfY2xrLCByYz0lZFxuIiwgcmMpOwotCX0KLQotCWNvcmUtPm1ub2NfY2xr ID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJtbm9jX2NsayIpOwotCWlmIChJU19FUlIoY29y ZS0+bW5vY19jbGspKSB7Ci0JCWNvcmUtPm1ub2NfY2xrID0gTlVMTDsKLQkJcHJfZGVidWcoImNh bid0IGdldCBtbm9jIGNsb2NrLCByYz0lZFxuIiwgcmMpOwotCX0KLQotCWxpbmstPmJ5dGVfY2xr ID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJieXRlX2NsayIpOwotCWlmIChJU19FUlIobGlu ay0+Ynl0ZV9jbGspKSB7Ci0JCXJjID0gUFRSX0VSUihsaW5rLT5ieXRlX2Nsayk7Ci0JCXByX2Vy cigiZmFpbGVkIHRvIGdldCBieXRlX2NsaywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBmYWlsOwot CX0KLQotCWxpbmstPnBpeGVsX2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAicGl4ZWxf Y2xrIik7Ci0JaWYgKElTX0VSUihsaW5rLT5waXhlbF9jbGspKSB7Ci0JCXJjID0gUFRSX0VSUihs aW5rLT5waXhlbF9jbGspOwotCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgcGl4ZWxfY2xrLCByYz0l ZFxuIiwgcmMpOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JbGluay0+ZXNjX2NsayA9IGRldm1fY2xr X2dldCgmcGRldi0+ZGV2LCAiZXNjX2NsayIpOwotCWlmIChJU19FUlIobGluay0+ZXNjX2Nsaykp IHsKLQkJcmMgPSBQVFJfRVJSKGxpbmstPmVzY19jbGspOwotCQlwcl9lcnIoImZhaWxlZCB0byBn ZXQgZXNjX2NsaywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBmYWlsOwotCX0KLQotCWxpbmstPmJ5 dGVfaW50Zl9jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgImJ5dGVfaW50Zl9jbGsiKTsK LQlpZiAoSVNfRVJSKGxpbmstPmJ5dGVfaW50Zl9jbGspKSB7Ci0JCWxpbmstPmJ5dGVfaW50Zl9j bGsgPSBOVUxMOwotCQlwcl9kZWJ1ZygiY2FuJ3QgZmluZCBieXRlIGludGYgY2xrLCByYz0lZFxu IiwgcmMpOwotCX0KLQotCXJjZy0+Ynl0ZV9jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwg ImJ5dGVfY2xrX3JjZyIpOwotCWlmIChJU19FUlIocmNnLT5ieXRlX2NsaykpIHsKLQkJcmMgPSBQ VFJfRVJSKHJjZy0+Ynl0ZV9jbGspOwotCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgYnl0ZV9jbGtf cmNnLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JcmNnLT5waXhlbF9jbGsg PSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgInBpeGVsX2Nsa19yY2ciKTsKLQlpZiAoSVNfRVJS KHJjZy0+cGl4ZWxfY2xrKSkgewotCQlyYyA9IFBUUl9FUlIocmNnLT5waXhlbF9jbGspOwotCQlw cl9lcnIoImZhaWxlZCB0byBnZXQgcGl4ZWxfY2xrX3JjZywgcmM9JWRcbiIsIHJjKTsKLQkJZ290 byBmYWlsOwotCX0KLQotCXJldHVybiAwOwotZmFpbDoKLQlkc2lfY3RybF9jbG9ja3NfZGVpbml0 KGN0cmwpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfY3RybF9zdXBwbGllc19k ZWluaXQoc3RydWN0IGRzaV9jdHJsICpjdHJsKQotewotCWludCBpID0gMDsKLQlpbnQgcmMgPSAw OwotCXN0cnVjdCBkc2lfcmVndWxhdG9yX2luZm8gKnJlZ3M7Ci0KLQlyZWdzID0gJmN0cmwtPnB3 cl9pbmZvLmRpZ2l0YWw7Ci0JZm9yIChpID0gMDsgaSA8IHJlZ3MtPmNvdW50OyBpKyspIHsKLQkJ aWYgKCFyZWdzLT52cmVnc1tpXS52cmVnKQotCQkJcHJfZXJyKCJ2cmVnIGlzIE5VTEwsIHNob3Vs ZCBub3QgcmVhY2ggaGVyZVxuIik7Ci0JCWVsc2UKLQkJCWRldm1fcmVndWxhdG9yX3B1dChyZWdz LT52cmVnc1tpXS52cmVnKTsKLQl9Ci0KLQlyZWdzID0gJmN0cmwtPnB3cl9pbmZvLmhvc3RfcHdy OwotCWZvciAoaSA9IDA7IGkgPCByZWdzLT5jb3VudDsgaSsrKSB7Ci0JCWlmICghcmVncy0+dnJl Z3NbaV0udnJlZykKLQkJCXByX2VycigidnJlZyBpcyBOVUxMLCBzaG91bGQgbm90IHJlYWNoIGhl cmVcbiIpOwotCQllbHNlCi0JCQlkZXZtX3JlZ3VsYXRvcl9wdXQocmVncy0+dnJlZ3NbaV0udnJl Zyk7Ci0JfQotCi0JaWYgKCFjdHJsLT5wd3JfaW5mby5ob3N0X3B3ci52cmVncykgewotCQlkZXZt X2tmcmVlKCZjdHJsLT5wZGV2LT5kZXYsIGN0cmwtPnB3cl9pbmZvLmhvc3RfcHdyLnZyZWdzKTsK LQkJY3RybC0+cHdyX2luZm8uaG9zdF9wd3IudnJlZ3MgPSBOVUxMOwotCQljdHJsLT5wd3JfaW5m by5ob3N0X3B3ci5jb3VudCA9IDA7Ci0JfQotCi0JaWYgKCFjdHJsLT5wd3JfaW5mby5kaWdpdGFs LnZyZWdzKSB7Ci0JCWRldm1fa2ZyZWUoJmN0cmwtPnBkZXYtPmRldiwgY3RybC0+cHdyX2luZm8u ZGlnaXRhbC52cmVncyk7Ci0JCWN0cmwtPnB3cl9pbmZvLmRpZ2l0YWwudnJlZ3MgPSBOVUxMOwot CQljdHJsLT5wd3JfaW5mby5kaWdpdGFsLmNvdW50ID0gMDsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19 Ci0KLXN0YXRpYyBpbnQgZHNpX2N0cmxfc3VwcGxpZXNfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2LAotCQkJCSAgc3RydWN0IGRzaV9jdHJsICpjdHJsKQotewotCWludCByYyA9IDA7 Ci0JaW50IGkgPSAwOwotCXN0cnVjdCBkc2lfcmVndWxhdG9yX2luZm8gKnJlZ3M7Ci0Jc3RydWN0 IHJlZ3VsYXRvciAqdnJlZyA9IE5VTEw7Ci0KLQlyYyA9IGRzaV9wd3JfZ2V0X2R0X3ZyZWdfZGF0 YSgmcGRldi0+ZGV2LAotCQkJCQkgICZjdHJsLT5wd3JfaW5mby5kaWdpdGFsLAotCQkJCQkgICJx Y29tLGNvcmUtc3VwcGx5LWVudHJpZXMiKTsKLQlpZiAocmMpCi0JCXByX2RlYnVnKCJmYWlsZWQg dG8gZ2V0IGRpZ2l0YWwgc3VwcGx5LCByYyA9ICVkXG4iLCByYyk7Ci0KLQlyYyA9IGRzaV9wd3Jf Z2V0X2R0X3ZyZWdfZGF0YSgmcGRldi0+ZGV2LAotCQkJCQkgICZjdHJsLT5wd3JfaW5mby5ob3N0 X3B3ciwKLQkJCQkJICAicWNvbSxjdHJsLXN1cHBseS1lbnRyaWVzIik7Ci0JaWYgKHJjKSB7Ci0J CXByX2VycigiZmFpbGVkIHRvIGdldCBob3N0IHBvd2VyIHN1cHBsaWVzLCByYyA9ICVkXG4iLCBy Yyk7Ci0JCWdvdG8gZXJyb3JfZGlnaXRhbDsKLQl9Ci0KLQlyZWdzID0gJmN0cmwtPnB3cl9pbmZv LmRpZ2l0YWw7Ci0JZm9yIChpID0gMDsgaSA8IHJlZ3MtPmNvdW50OyBpKyspIHsKLQkJdnJlZyA9 IGRldm1fcmVndWxhdG9yX2dldCgmcGRldi0+ZGV2LCByZWdzLT52cmVnc1tpXS52cmVnX25hbWUp OwotCQlpZiAoSVNfRVJSKHZyZWcpKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgJXMgcmVn dWxhdG9yXG4iLAotCQkJICAgICAgIHJlZ3MtPnZyZWdzW2ldLnZyZWdfbmFtZSk7Ci0JCQlyYyA9 IFBUUl9FUlIodnJlZyk7Ci0JCQlnb3RvIGVycm9yX2hvc3RfcHdyOwotCQl9Ci0JCXJlZ3MtPnZy ZWdzW2ldLnZyZWcgPSB2cmVnOwotCX0KLQotCXJlZ3MgPSAmY3RybC0+cHdyX2luZm8uaG9zdF9w d3I7Ci0JZm9yIChpID0gMDsgaSA8IHJlZ3MtPmNvdW50OyBpKyspIHsKLQkJdnJlZyA9IGRldm1f cmVndWxhdG9yX2dldCgmcGRldi0+ZGV2LCByZWdzLT52cmVnc1tpXS52cmVnX25hbWUpOwotCQlp ZiAoSVNfRVJSKHZyZWcpKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgJXMgcmVndWxhdG9y XG4iLAotCQkJICAgICAgIHJlZ3MtPnZyZWdzW2ldLnZyZWdfbmFtZSk7Ci0JCQlmb3IgKC0taTsg aSA+PSAwOyBpLS0pCi0JCQkJZGV2bV9yZWd1bGF0b3JfcHV0KHJlZ3MtPnZyZWdzW2ldLnZyZWcp OwotCQkJcmMgPSBQVFJfRVJSKHZyZWcpOwotCQkJZ290byBlcnJvcl9kaWdpdGFsX3B1dDsKLQkJ fQotCQlyZWdzLT52cmVnc1tpXS52cmVnID0gdnJlZzsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci0KLWVy cm9yX2RpZ2l0YWxfcHV0OgotCXJlZ3MgPSAmY3RybC0+cHdyX2luZm8uZGlnaXRhbDsKLQlmb3Ig KGkgPSAwOyBpIDwgcmVncy0+Y291bnQ7IGkrKykKLQkJZGV2bV9yZWd1bGF0b3JfcHV0KHJlZ3Mt PnZyZWdzW2ldLnZyZWcpOwotZXJyb3JfaG9zdF9wd3I6Ci0JZGV2bV9rZnJlZSgmcGRldi0+ZGV2 LCBjdHJsLT5wd3JfaW5mby5ob3N0X3B3ci52cmVncyk7Ci0JY3RybC0+cHdyX2luZm8uaG9zdF9w d3IudnJlZ3MgPSBOVUxMOwotCWN0cmwtPnB3cl9pbmZvLmhvc3RfcHdyLmNvdW50ID0gMDsKLWVy cm9yX2RpZ2l0YWw6Ci0JaWYgKGN0cmwtPnB3cl9pbmZvLmRpZ2l0YWwudnJlZ3MpCi0JCWRldm1f a2ZyZWUoJnBkZXYtPmRldiwgY3RybC0+cHdyX2luZm8uZGlnaXRhbC52cmVncyk7Ci0JY3RybC0+ cHdyX2luZm8uZGlnaXRhbC52cmVncyA9IE5VTEw7Ci0JY3RybC0+cHdyX2luZm8uZGlnaXRhbC5j b3VudCA9IDA7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9jdHJsX2F4aV9idXNf Y2xpZW50X2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCQkJc3RydWN0IGRz aV9jdHJsICpjdHJsKQotewotCWludCByYyA9IDA7Ci0jaWZkZWYgQ09ORklHX1FDT01fQlVTX1ND QUxJTkcKLQlzdHJ1Y3QgZHNpX2N0cmxfYnVzX3NjYWxlX2luZm8gKmJ1cyA9ICZjdHJsLT5heGlf YnVzX2luZm87Ci0KLQlidXMtPmJ1c19zY2FsZV90YWJsZSA9IG1zbV9idXNfY2xfZ2V0X3BkYXRh KHBkZXYpOwotCWlmIChJU19FUlJfT1JfTlVMTChidXMtPmJ1c19zY2FsZV90YWJsZSkpIHsKLQkJ cmMgPSBQVFJfRVJSKGJ1cy0+YnVzX3NjYWxlX3RhYmxlKTsKLQkJcHJfZGVidWcoIm1zbV9idXNf Y2xfZ2V0X3BkYXRhKCkgZmFpbGVkLCByYyA9ICVkXG4iLCByYyk7Ci0JCWJ1cy0+YnVzX3NjYWxl X3RhYmxlID0gTlVMTDsKLQkJcmV0dXJuIHJjOwotCX0KLQotCWJ1cy0+YnVzX2hhbmRsZSA9IG1z bV9idXNfc2NhbGVfcmVnaXN0ZXJfY2xpZW50KGJ1cy0+YnVzX3NjYWxlX3RhYmxlKTsKLQlpZiAo IWJ1cy0+YnVzX2hhbmRsZSkgewotCQlyYyA9IC1FSU5WQUw7Ci0JCXByX2VycigiZmFpbGVkIHRv IHJlZ2lzdGVyIGF4aSBidXMgY2xpZW50XG4iKTsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gcmM7Ci19 Ci0KLXN0YXRpYyBpbnQgZHNpX2N0cmxfYXhpX2J1c19jbGllbnRfZGVpbml0KHN0cnVjdCBkc2lf Y3RybCAqY3RybCkKLXsKLSNpZmRlZiBDT05GSUdfUUNPTV9CVVNfU0NBTElORwotCXN0cnVjdCBk c2lfY3RybF9idXNfc2NhbGVfaW5mbyAqYnVzID0gJmN0cmwtPmF4aV9idXNfaW5mbzsKLQotCWlm IChidXMtPmJ1c19oYW5kbGUpIHsKLQkJbXNtX2J1c19zY2FsZV91bnJlZ2lzdGVyX2NsaWVudChi dXMtPmJ1c19oYW5kbGUpOwotCi0JCWJ1cy0+YnVzX2hhbmRsZSA9IDA7Ci0JfQotI2VuZGlmCi0J cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2N0cmxfdmFsaWRhdGVfcGFuZWxfaW5mbyhz dHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJCQlzdHJ1Y3QgZHNpX2hvc3RfY29uZmlnICpj b25maWcpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2hvc3RfY29tbW9uX2NmZyAqaG9z dF9jZmcgPSAmY29uZmlnLT5jb21tb25fY29uZmlnOwotCi0JaWYgKGNvbmZpZy0+cGFuZWxfbW9k ZSA+PSBEU0lfT1BfTU9ERV9NQVgpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIGRzaSBvcGVyYXRpb24g bW9kZSAoJWQpXG4iLCBjb25maWctPnBhbmVsX21vZGUpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdv dG8gZXJyOwotCX0KLQotCWlmICgoaG9zdF9jZmctPmRhdGFfbGFuZXMgJiAoRFNJX0NMT0NLX0xB TkUgLSAxKSkgPT0gMCkgewotCQlwcl9lcnIoIk5vIGRhdGEgbGFuZXMgYXJlIGVuYWJsZWRcbiIp OwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyOwotCX0KLWVycjoKLQlyZXR1cm4gcmM7Ci19 Ci0KLXN0YXRpYyBpbnQgZHNpX2N0cmxfdXBkYXRlX2xpbmtfZnJlcXMoc3RydWN0IGRzaV9jdHJs ICpkc2lfY3RybCwKLQlzdHJ1Y3QgZHNpX2hvc3RfY29uZmlnICpjb25maWcsIHZvaWQgKmNsa19o YW5kbGUpCi17Ci0JaW50IHJjID0gMDsKLQl1MzIgbnVtX29mX2xhbmVzID0gMDsKLQl1MzIgYnBw ID0gMzsKLQl1NjQgaF9wZXJpb2QsIHZfcGVyaW9kLCBiaXRfcmF0ZSwgcGNsa19yYXRlLCBiaXRf cmF0ZV9wZXJfbGFuZSwKLQkgICAgYnl0ZV9jbGtfcmF0ZTsKLQlzdHJ1Y3QgZHNpX2hvc3RfY29t bW9uX2NmZyAqaG9zdF9jZmcgPSAmY29uZmlnLT5jb21tb25fY29uZmlnOwotCXN0cnVjdCBkc2lf bW9kZV9pbmZvICp0aW1pbmcgPSAmY29uZmlnLT52aWRlb190aW1pbmc7Ci0KLQlpZiAoaG9zdF9j ZmctPmRhdGFfbGFuZXMgJiBEU0lfREFUQV9MQU5FXzApCi0JCW51bV9vZl9sYW5lcysrOwotCWlm IChob3N0X2NmZy0+ZGF0YV9sYW5lcyAmIERTSV9EQVRBX0xBTkVfMSkKLQkJbnVtX29mX2xhbmVz Kys7Ci0JaWYgKGhvc3RfY2ZnLT5kYXRhX2xhbmVzICYgRFNJX0RBVEFfTEFORV8yKQotCQludW1f b2ZfbGFuZXMrKzsKLQlpZiAoaG9zdF9jZmctPmRhdGFfbGFuZXMgJiBEU0lfREFUQV9MQU5FXzMp Ci0JCW51bV9vZl9sYW5lcysrOwotCi0JaF9wZXJpb2QgPSBEU0lfSF9UT1RBTF9EU0ModGltaW5n KTsKLQl2X3BlcmlvZCA9IERTSV9WX1RPVEFMKHRpbWluZyk7Ci0KLQliaXRfcmF0ZSA9IGhfcGVy aW9kICogdl9wZXJpb2QgKiB0aW1pbmctPnJlZnJlc2hfcmF0ZSAqIGJwcCAqIDg7Ci0JYml0X3Jh dGVfcGVyX2xhbmUgPSBiaXRfcmF0ZTsKLQlkb19kaXYoYml0X3JhdGVfcGVyX2xhbmUsIG51bV9v Zl9sYW5lcyk7Ci0JcGNsa19yYXRlID0gYml0X3JhdGU7Ci0JZG9fZGl2KHBjbGtfcmF0ZSwgKDgg KiBicHApKTsKLQlieXRlX2Nsa19yYXRlID0gYml0X3JhdGVfcGVyX2xhbmU7Ci0JZG9fZGl2KGJ5 dGVfY2xrX3JhdGUsIDgpOwotCXByX2RlYnVnKCJiaXRfY2xrX3JhdGUgPSAlbGx1LCBiaXRfY2xr X3JhdGVfcGVyX2xhbmUgPSAlbGx1XG4iLAotCQkgYml0X3JhdGUsIGJpdF9yYXRlX3Blcl9sYW5l KTsKLQlwcl9kZWJ1ZygiYnl0ZV9jbGtfcmF0ZSA9ICVsbHUsIHBjbGtfcmF0ZSA9ICVsbHVcbiIs Ci0JCSAgYnl0ZV9jbGtfcmF0ZSwgcGNsa19yYXRlKTsKLQotCWRzaV9jdHJsLT5jbGtfZnJlcS5i eXRlX2Nsa19yYXRlID0gYnl0ZV9jbGtfcmF0ZTsKLQlkc2lfY3RybC0+Y2xrX2ZyZXEucGl4X2Ns a19yYXRlID0gcGNsa19yYXRlOwotCWRzaV9jdHJsLT5jbGtfZnJlcS5lc2NfY2xrX3JhdGUgPSBj b25maWctPmVzY19jbGtfcmF0ZV9oejsKLQotCXJjID0gZHNpX2Nsa19zZXRfbGlua19mcmVxdWVu Y2llcyhjbGtfaGFuZGxlLCBkc2lfY3RybC0+Y2xrX2ZyZXEsCi0JCQkJCWRzaV9jdHJsLT5jZWxs X2luZGV4KTsKLQlpZiAocmMpCi0JCXByX2VycigiRmFpbGVkIHRvIHVwZGF0ZSBsaW5rIGZyZXF1 ZW5jaWVzXG4iKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfY3RybF9lbmFi bGVfc3VwcGxpZXMoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwgYm9vbCBlbmFibGUpCi17Ci0J aW50IHJjID0gMDsKLQotCWlmIChlbmFibGUpIHsKLQkJaWYgKCFkc2lfY3RybC0+Y3VycmVudF9z dGF0ZS5ob3N0X2luaXRpYWxpemVkKSB7Ci0JCQlyYyA9IGRzaV9wd3JfZW5hYmxlX3JlZ3VsYXRv cigKLQkJCQkmZHNpX2N0cmwtPnB3cl9pbmZvLmhvc3RfcHdyLCB0cnVlKTsKLQkJCWlmIChyYykg ewotCQkJCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSBob3N0IHBvd2VyIHJlZ3NcbiIpOwotCQkJ CWdvdG8gZXJyb3I7Ci0JCQl9Ci0JCX0KLQotCQlyYyA9IGRzaV9wd3JfZW5hYmxlX3JlZ3VsYXRv cigmZHNpX2N0cmwtPnB3cl9pbmZvLmRpZ2l0YWwsCi0JCQkJCSAgICAgIHRydWUpOwotCQlpZiAo cmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSBnZHNjLCByYz0lZFxuIiwgcmMpOwot CQkJKHZvaWQpZHNpX3B3cl9lbmFibGVfcmVndWxhdG9yKAotCQkJCQkJJmRzaV9jdHJsLT5wd3Jf aW5mby5ob3N0X3B3ciwKLQkJCQkJCWZhbHNlCi0JCQkJCQkpOwotCQkJZ290byBlcnJvcjsKLQkJ fQotCX0gZWxzZSB7Ci0JCXJjID0gZHNpX3B3cl9lbmFibGVfcmVndWxhdG9yKCZkc2lfY3RybC0+ cHdyX2luZm8uZGlnaXRhbCwKLQkJCQkJICAgICAgZmFsc2UpOwotCQlpZiAocmMpIHsKLQkJCXBy X2VycigiZmFpbGVkIHRvIGRpc2FibGUgZ2RzYywgcmM9JWRcbiIsIHJjKTsKLQkJCWdvdG8gZXJy b3I7Ci0JCX0KLQotCQlpZiAoIWRzaV9jdHJsLT5jdXJyZW50X3N0YXRlLmhvc3RfaW5pdGlhbGl6 ZWQpIHsKLQkJCXJjID0gZHNpX3B3cl9lbmFibGVfcmVndWxhdG9yKAotCQkJCSZkc2lfY3RybC0+ cHdyX2luZm8uaG9zdF9wd3IsIGZhbHNlKTsKLQkJCWlmIChyYykgewotCQkJCXByX2VycigiZmFp bGVkIHRvIGRpc2FibGUgaG9zdCBwb3dlciByZWdzXG4iKTsKLQkJCQlnb3RvIGVycm9yOwotCQkJ fQotCQl9Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9jdHJs X2NvcHlfYW5kX3BhZF9jbWQoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJCQkgICAgIGNv bnN0IHN0cnVjdCBtaXBpX2RzaV9wYWNrZXQgKnBhY2tldCwKLQkJCQkgICAgIHU4ICoqYnVmZmVy LAotCQkJCSAgICAgdTMyICpzaXplKQotewotCWludCByYyA9IDA7Ci0JdTggKmJ1ZiA9IE5VTEw7 Ci0JdTMyIGxlbjsKLQotCWxlbiA9IHBhY2tldC0+c2l6ZTsKLQlsZW4gKz0gMHgzOyBsZW4gJj0g fjB4MDM7IC8qIEFsaWduIHRvIDMyIGJpdHMgKi8KLQotCWJ1ZiA9IGRldm1fa3phbGxvYygmZHNp X2N0cmwtPnBkZXYtPmRldiwgbGVuICogc2l6ZW9mKHU4KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFi dWYpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogTVNNIHNwZWNpZmljIGNvbW1hbmQgZm9ybWF0 IGluIG1lbW9yeSAqLwotCWJ1ZlswXSA9IHBhY2tldC0+aGVhZGVyWzFdOwotCWJ1ZlsxXSA9IHBh Y2tldC0+aGVhZGVyWzJdOwotCWJ1ZlsyXSA9IHBhY2tldC0+aGVhZGVyWzBdOwotCWJ1ZlszXSA9 IEJJVCg3KTsKLQlpZiAocGFja2V0LT5wYXlsb2FkX2xlbmd0aCA+IDApCi0JCWJ1ZlszXSB8PSBC SVQoNik7Ci0KLQkvKiBMb25nIHBhY2tldCAqLwotCWlmIChwYWNrZXQtPnBheWxvYWQgJiYgcGFj a2V0LT5wYXlsb2FkX2xlbmd0aCkKLQkJbWVtY3B5KGJ1ZiArIDQsIHBhY2tldC0+cGF5bG9hZCwg cGFja2V0LT5wYXlsb2FkX2xlbmd0aCk7Ci0KLQkvKiBBcHBlbmQgMHhmZiB0byB0aGUgZW5kICov Ci0JaWYgKHBhY2tldC0+c2l6ZSA8IGxlbikKLQkJbWVtc2V0KGJ1ZiArIHBhY2tldC0+c2l6ZSwg MHhmZiwgbGVuIC0gcGFja2V0LT5zaXplKTsKLQotCSpidWZmZXIgPSBidWY7Ci0JKnNpemUgPSBs ZW47Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzaV9jdHJsX3dhaXRfZm9yX3Zp ZGVvX2RvbmUoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCkKLXsKLQl1MzIgdl90b3RhbCA9IDAs IHZfYmxhbmsgPSAwLCBzbGVlcF9tcyA9IDAsIGZwcyA9IDAsIHJldDsKLQlzdHJ1Y3QgZHNpX21v ZGVfaW5mbyAqdGltaW5nOwotCi0JaWYgKGRzaV9jdHJsLT5ob3N0X2NvbmZpZy5wYW5lbF9tb2Rl ICE9IERTSV9PUF9WSURFT19NT0RFKQotCQlyZXR1cm47Ci0KLQlkc2lfY3RybC0+aHcub3BzLmNs ZWFyX2ludGVycnVwdF9zdGF0dXMoJmRzaV9jdHJsLT5odywKLQkJCQlEU0lfVklERU9fTU9ERV9G UkFNRV9ET05FKTsKLQotCWRzaV9jdHJsX2VuYWJsZV9zdGF0dXNfaW50ZXJydXB0KGRzaV9jdHJs LAotCQkJCURTSV9TSU5UX1ZJREVPX01PREVfRlJBTUVfRE9ORSwgTlVMTCk7Ci0JcmVpbml0X2Nv bXBsZXRpb24oJmRzaV9jdHJsLT5pcnFfaW5mby52aWRfZnJhbWVfZG9uZSk7Ci0JcmV0ID0gd2Fp dF9mb3JfY29tcGxldGlvbl90aW1lb3V0KAotCQkJJmRzaV9jdHJsLT5pcnFfaW5mby52aWRfZnJh bWVfZG9uZSwKLQkJCW1zZWNzX3RvX2ppZmZpZXMoRFNJX0NUUkxfVFhfVE9fTVMpKTsKLQlpZiAo cmV0IDw9IDApCi0JCXByX2RlYnVnKCJ3YWl0IGZvciB2aWRlbyBkb25lIGZhaWxlZFxuIik7Ci0J ZHNpX2N0cmxfZGlzYWJsZV9zdGF0dXNfaW50ZXJydXB0KGRzaV9jdHJsLAotCQkJCURTSV9TSU5U X1ZJREVPX01PREVfRlJBTUVfRE9ORSk7Ci0KLQl0aW1pbmcgPSAmKGRzaV9jdHJsLT5ob3N0X2Nv bmZpZy52aWRlb190aW1pbmcpOwotCXZfdG90YWwgPSB0aW1pbmctPnZfc3luY193aWR0aCArIHRp bWluZy0+dl9iYWNrX3BvcmNoICsKLQkJCXRpbWluZy0+dl9mcm9udF9wb3JjaCArIHRpbWluZy0+ dl9hY3RpdmU7Ci0Jdl9ibGFuayA9IHRpbWluZy0+dl9zeW5jX3dpZHRoICsgdGltaW5nLT52X2Jh Y2tfcG9yY2g7Ci0JZnBzID0gdGltaW5nLT5yZWZyZXNoX3JhdGU7Ci0KLQlzbGVlcF9tcyA9IENF SUwoKHZfYmxhbmsgKiAxMDAwKSwgKHZfdG90YWwgKiBmcHMpKSArIDE7Ci0JdWRlbGF5KHNsZWVw X21zICogMTAwMCk7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX21lc3NhZ2VfdHgoc3RydWN0IGRzaV9j dHJsICpkc2lfY3RybCwKLQkJCSAgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnLAotCQkJ ICB1MzIgZmxhZ3MpCi17Ci0JaW50IHJjID0gMCwgcmV0ID0gMDsKLQlzdHJ1Y3QgbWlwaV9kc2lf cGFja2V0IHBhY2tldDsKLQlzdHJ1Y3QgZHNpX2N0cmxfY21kX2RtYV9maWZvX2luZm8gY21kOwot CXN0cnVjdCBkc2lfY3RybF9jbWRfZG1hX2luZm8gY21kX21lbTsKLQl1MzIgaHdfZmxhZ3MgPSAw OwotCXUzMiBsZW5ndGggPSAwOwotCXU4ICpidWZmZXIgPSBOVUxMOwotCXUzMiBjbnQgPSAwOwot CXU4ICpjbWRidWY7Ci0KLQlyYyA9IG1pcGlfZHNpX2NyZWF0ZV9wYWNrZXQoJnBhY2tldCwgbXNn KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gY3JlYXRlIG1lc3NhZ2UgcGFja2V0 LCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmIChmbGFncyAmIERTSV9D VFJMX0NNRF9GRVRDSF9NRU1PUlkpIHsKLQkJcmMgPSBkc2lfY3RybF9jb3B5X2FuZF9wYWRfY21k KGRzaV9jdHJsLAotCQkJCSZwYWNrZXQsCi0JCQkJJmJ1ZmZlciwKLQkJCQkmbGVuZ3RoKTsKLQot CQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gY29weSBtZXNzYWdlLCByYz0l ZFxuIiwKLQkJCQkJZHNpX2N0cmwtPm5hbWUsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQot CQljbWRfbWVtLm9mZnNldCA9IGRzaV9jdHJsLT5jbWRfYnVmZmVyX2lvdmE7Ci0JCWNtZF9tZW0u bGVuZ3RoID0gbGVuZ3RoOwotCQljbWRfbWVtLmVuX2Jyb2FkY2FzdCA9IChmbGFncyAmIERTSV9D VFJMX0NNRF9CUk9BRENBU1QpID8KLQkJCXRydWUgOiBmYWxzZTsKLQkJY21kX21lbS5pc19tYXN0 ZXIgPSAoZmxhZ3MgJiBEU0lfQ1RSTF9DTURfQlJPQURDQVNUX01BU1RFUikgPwotCQkJdHJ1ZSA6 IGZhbHNlOwotCQljbWRfbWVtLnVzZV9scG0gPSAobXNnLT5mbGFncyAmIE1JUElfRFNJX01TR19V U0VfTFBNKSA/Ci0JCQl0cnVlIDogZmFsc2U7Ci0KLQkJY21kYnVmID0gKHU4ICopKGRzaV9jdHJs LT52YWRkcik7Ci0JCWZvciAoY250ID0gMDsgY250IDwgbGVuZ3RoOyBjbnQrKykKLQkJCWNtZGJ1 ZltjbnRdID0gYnVmZmVyW2NudF07Ci0KLQl9IGVsc2UgaWYgKGZsYWdzICYgRFNJX0NUUkxfQ01E X0ZJRk9fU1RPUkUpIHsKLQkJcmMgPSBkc2lfY3RybF9jb3B5X2FuZF9wYWRfY21kKGRzaV9jdHJs LAotCQkJCQkgICAgICAgJnBhY2tldCwKLQkJCQkJICAgICAgICZidWZmZXIsCi0JCQkJCSAgICAg ICAmbGVuZ3RoKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGNvcHkg bWVzc2FnZSwgcmM9JWRcbiIsCi0JCQkgICAgICAgZHNpX2N0cmwtPm5hbWUsIHJjKTsKLQkJCWdv dG8gZXJyb3I7Ci0JCX0KLQkJY21kLmNvbW1hbmQgPSAgKHUzMiAqKWJ1ZmZlcjsKLQkJY21kLnNp emUgPSBsZW5ndGg7Ci0JCWNtZC5lbl9icm9hZGNhc3QgPSAoZmxhZ3MgJiBEU0lfQ1RSTF9DTURf QlJPQURDQVNUKSA/Ci0JCQkJICAgICB0cnVlIDogZmFsc2U7Ci0JCWNtZC5pc19tYXN0ZXIgPSAo ZmxhZ3MgJiBEU0lfQ1RSTF9DTURfQlJPQURDQVNUX01BU1RFUikgPwotCQkJCSAgdHJ1ZSA6IGZh bHNlOwotCQljbWQudXNlX2xwbSA9IChtc2ctPmZsYWdzICYgTUlQSV9EU0lfTVNHX1VTRV9MUE0p ID8KLQkJCQkgIHRydWUgOiBmYWxzZTsKLQl9Ci0KLQlod19mbGFncyB8PSAoZmxhZ3MgJiBEU0lf Q1RSTF9DTURfREVGRVJfVFJJR0dFUikgPwotCQkJRFNJX0NUUkxfSFdfQ01EX1dBSVRfRk9SX1RS SUdHRVIgOiAwOwotCi0JaWYgKGZsYWdzICYgRFNJX0NUUkxfQ01EX0RFRkVSX1RSSUdHRVIpIHsK LQkJaWYgKGZsYWdzICYgRFNJX0NUUkxfQ01EX0ZFVENIX01FTU9SWSkgewotCQkJZHNpX2N0cmwt Pmh3Lm9wcy5raWNrb2ZmX2NvbW1hbmQoJmRzaV9jdHJsLT5odywKLQkJCQkJCQkmY21kX21lbSwK LQkJCQkJCQlod19mbGFncyk7Ci0JCX0gZWxzZSBpZiAoZmxhZ3MgJiBEU0lfQ1RSTF9DTURfRklG T19TVE9SRSkgewotCQkJZHNpX2N0cmwtPmh3Lm9wcy5raWNrb2ZmX2ZpZm9fY29tbWFuZCgmZHNp X2N0cmwtPmh3LAotCQkJCQkJCSAgICAgICZjbWQsCi0JCQkJCQkJICAgICAgaHdfZmxhZ3MpOwot CQl9Ci0JfQotCi0JaWYgKCEoZmxhZ3MgJiBEU0lfQ1RSTF9DTURfREVGRVJfVFJJR0dFUikpIHsK LQkJZHNpX2N0cmxfd2FpdF9mb3JfdmlkZW9fZG9uZShkc2lfY3RybCk7Ci0JCWRzaV9jdHJsX2Vu YWJsZV9zdGF0dXNfaW50ZXJydXB0KGRzaV9jdHJsLAotCQkJCQlEU0lfU0lOVF9DTURfTU9ERV9E TUFfRE9ORSwgTlVMTCk7Ci0JCXJlaW5pdF9jb21wbGV0aW9uKCZkc2lfY3RybC0+aXJxX2luZm8u Y21kX2RtYV9kb25lKTsKLQotCQlpZiAoZmxhZ3MgJiBEU0lfQ1RSTF9DTURfRkVUQ0hfTUVNT1JZ KSB7Ci0JCQlkc2lfY3RybC0+aHcub3BzLmtpY2tvZmZfY29tbWFuZCgmZHNpX2N0cmwtPmh3LAot CQkJCQkJICAgICAgJmNtZF9tZW0sCi0JCQkJCQkgICAgICBod19mbGFncyk7Ci0JCX0gZWxzZSBp ZiAoZmxhZ3MgJiBEU0lfQ1RSTF9DTURfRklGT19TVE9SRSkgewotCQkJZHNpX2N0cmwtPmh3Lm9w cy5raWNrb2ZmX2ZpZm9fY29tbWFuZCgmZHNpX2N0cmwtPmh3LAotCQkJCQkJCSAgICAgICZjbWQs Ci0JCQkJCQkJICAgICAgaHdfZmxhZ3MpOwotCQl9Ci0KLQkJcmV0ID0gd2FpdF9mb3JfY29tcGxl dGlvbl90aW1lb3V0KAotCQkJCSZkc2lfY3RybC0+aXJxX2luZm8uY21kX2RtYV9kb25lLAotCQkJ CW1zZWNzX3RvX2ppZmZpZXMoRFNJX0NUUkxfVFhfVE9fTVMpKTsKLQotCQlpZiAocmV0ID09IDAp IHsKLQkJCXUzMiBzdGF0dXMgPSAwOwotCQkJdTMyIG1hc2sgPSBEU0lfQ01EX01PREVfRE1BX0RP TkU7Ci0KLQkJCWlmIChzdGF0dXMgJiBtYXNrKSB7Ci0JCQkJc3RhdHVzIHw9IChEU0lfQ01EX01P REVfRE1BX0RPTkUgfAotCQkJCQkJRFNJX0JUQV9ET05FKTsKLQkJCQlkc2lfY3RybC0+aHcub3Bz LmNsZWFyX2ludGVycnVwdF9zdGF0dXMoCi0JCQkJCQkJCSZkc2lfY3RybC0+aHcsCi0JCQkJCQkJ CXN0YXR1cyk7Ci0JCQkJZHNpX2N0cmxfZGlzYWJsZV9zdGF0dXNfaW50ZXJydXB0KGRzaV9jdHJs LAotCQkJCQkJRFNJX1NJTlRfQ01EX01PREVfRE1BX0RPTkUpOwotCQkJCWNvbXBsZXRlX2FsbCgm ZHNpX2N0cmwtPmlycV9pbmZvLmNtZF9kbWFfZG9uZSk7Ci0JCQkJcHJfd2FybigiZG1hX3R4IGRv bmUgYnV0IGlycSBub3QgdHJpZ2dlcmVkXG4iKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmMgPSAtRVRJ TUVET1VUOwotCQkJCWRzaV9jdHJsX2Rpc2FibGVfc3RhdHVzX2ludGVycnVwdChkc2lfY3RybCwK LQkJCQkJCURTSV9TSU5UX0NNRF9NT0RFX0RNQV9ET05FKTsKLQkJCQlwcl9lcnIoIltEU0lfJWRd Q29tbWFuZCB0cmFuc2ZlciBmYWlsZWRcbiIsCi0JCQkJCQlkc2lfY3RybC0+Y2VsbF9pbmRleCk7 Ci0JCQl9Ci0JCX0KLQotCQlkc2lfY3RybC0+aHcub3BzLnJlc2V0X2NtZF9maWZvKCZkc2lfY3Ry bC0+aHcpOwotCX0KLWVycm9yOgotCWlmIChidWZmZXIpCi0JCWRldm1fa2ZyZWUoJmRzaV9jdHJs LT5wZGV2LT5kZXYsIGJ1ZmZlcik7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9z ZXRfbWF4X3JldHVybl9zaXplKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCQkJICAgY29u c3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqcnhfbXNnLAotCQkJCSAgIHUzMiBzaXplKQotewotCWlu dCByYyA9IDA7Ci0JdTggdHhbMl0gPSB7ICh1OCkoc2l6ZSAmIDB4RkYpLCAodTgpKHNpemUgPj4g OCkgfTsKLQlzdHJ1Y3QgbWlwaV9kc2lfbXNnIG1zZyA9IHsKLQkJLmNoYW5uZWwgPSByeF9tc2ct PmNoYW5uZWwsCi0JCS50eXBlID0gTUlQSV9EU0lfU0VUX01BWElNVU1fUkVUVVJOX1BBQ0tFVF9T SVpFLAotCQkudHhfbGVuID0gMiwKLQkJLnR4X2J1ZiA9IHR4LAotCX07Ci0KLQlyYyA9IGRzaV9t ZXNzYWdlX3R4KGRzaV9jdHJsLCAmbXNnLCAweDApOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWls ZWQgdG8gc2VuZCBtYXggcmV0dXJuIHNpemUgcGFja2V0LCByYz0lZFxuIiwgcmMpOwotCi0JcmV0 dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9tZXNzYWdlX3J4KHN0cnVjdCBkc2lfY3RybCAq ZHNpX2N0cmwsCi0JCQkgIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZywKLQkJCSAgdTMy IGZsYWdzKQotewotCWludCByYyA9IDA7Ci0JdTMyIHJkX3BrdF9zaXplOwotCXUzMiB0b3RhbF9y ZWFkX2xlbjsKLQl1MzIgYnl0ZXNfcmVhZCA9IDAsIHRvdF9ieXRlc19yZWFkID0gMDsKLQl1MzIg Y3VycmVudF9yZWFkX2xlbjsKLQlib29sIHNob3J0X3Jlc3AgPSBmYWxzZTsKLQlib29sIHJlYWRf ZG9uZSA9IGZhbHNlOwotCi0JaWYgKG1zZy0+cnhfbGVuIDw9IDIpIHsKLQkJc2hvcnRfcmVzcCA9 IHRydWU7Ci0JCXJkX3BrdF9zaXplID0gbXNnLT5yeF9sZW47Ci0JCXRvdGFsX3JlYWRfbGVuID0g NDsKLQl9IGVsc2UgewotCQlzaG9ydF9yZXNwID0gZmFsc2U7Ci0JCWN1cnJlbnRfcmVhZF9sZW4g PSAxMDsKLQkJaWYgKG1zZy0+cnhfbGVuIDwgY3VycmVudF9yZWFkX2xlbikKLQkJCXJkX3BrdF9z aXplID0gbXNnLT5yeF9sZW47Ci0JCWVsc2UKLQkJCXJkX3BrdF9zaXplID0gY3VycmVudF9yZWFk X2xlbjsKLQotCQl0b3RhbF9yZWFkX2xlbiA9IGN1cnJlbnRfcmVhZF9sZW4gKyA2OwotCX0KLQot CXdoaWxlICghcmVhZF9kb25lKSB7Ci0JCXJjID0gZHNpX3NldF9tYXhfcmV0dXJuX3NpemUoZHNp X2N0cmwsIG1zZywgcmRfcGt0X3NpemUpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiRmFpbGVk IHRvIHNldCBtYXggcmV0dXJuIHBhY2tldCBzaXplLCByYz0lZFxuIiwKLQkJCSAgICAgICByYyk7 Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJcmMgPSBkc2lfbWVzc2FnZV90eChkc2lfY3RybCwg bXNnLCBmbGFncyk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJNZXNzYWdlIHRyYW5zbWlzc2lv biBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQotCQl0b3Rf Ynl0ZXNfcmVhZCArPSBieXRlc19yZWFkOwotCQlpZiAoc2hvcnRfcmVzcCkKLQkJCXJlYWRfZG9u ZSA9IHRydWU7Ci0JCWVsc2UgaWYgKG1zZy0+cnhfbGVuIDw9IHRvdF9ieXRlc19yZWFkKQotCQkJ cmVhZF9kb25lID0gdHJ1ZTsKLQl9Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLQotc3RhdGlj IGludCBkc2lfZW5hYmxlX3VscHMoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCkKLXsKLQlpbnQg cmMgPSAwOwotCXUzMiBsYW5lcyA9IDA7Ci0JdTMyIHVscHNfbGFuZXM7Ci0KLQlpZiAoZHNpX2N0 cmwtPmhvc3RfY29uZmlnLnBhbmVsX21vZGUgPT0gRFNJX09QX0NNRF9NT0RFKQotCQlsYW5lcyA9 IGRzaV9jdHJsLT5ob3N0X2NvbmZpZy5jb21tb25fY29uZmlnLmRhdGFfbGFuZXM7Ci0KLQlyYyA9 IGRzaV9jdHJsLT5ody5vcHMud2FpdF9mb3JfbGFuZV9pZGxlKCZkc2lfY3RybC0+aHcsIGxhbmVz KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJsYW5lcyBub3QgZW50ZXJpbmcgaWRsZSwgc2tpcCBV TFBTXG4iKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCWlmICghZHNpX2N0cmwtPmh3Lm9wcy51bHBz X29wcy51bHBzX3JlcXVlc3QgfHwKLQkJCSFkc2lfY3RybC0+aHcub3BzLnVscHNfb3BzLnVscHNf ZXhpdCkgewotCQlwcl9kZWJ1ZygiRFNJIGNvbnRyb2xsZXIgVUxQUyBvcHMgbm90IHByZXNlbnRc biIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlsYW5lcyB8PSBEU0lfQ0xPQ0tfTEFORTsKLQlkc2lf Y3RybC0+aHcub3BzLnVscHNfb3BzLnVscHNfcmVxdWVzdCgmZHNpX2N0cmwtPmh3LCBsYW5lcyk7 Ci0KLQl1bHBzX2xhbmVzID0gZHNpX2N0cmwtPmh3Lm9wcy51bHBzX29wcy5nZXRfbGFuZXNfaW5f dWxwcygmZHNpX2N0cmwtPmh3KTsKLQotCWlmICgobGFuZXMgJiB1bHBzX2xhbmVzKSAhPSBsYW5l cykgewotCQlwcl9lcnIoIkZhaWxlZCB0byBlbnRlciBVTFBTLCByZXF1ZXN0PTB4JXgsIGFjdHVh bD0weCV4XG4iLAotCQkgICAgICAgbGFuZXMsIHVscHNfbGFuZXMpOwotCQlyYyA9IC1FSU87Ci0J fQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNhYmxlX3VscHMoc3RydWN0 IGRzaV9jdHJsICpkc2lfY3RybCkKLXsKLQlpbnQgcmMgPSAwOwotCXUzMiB1bHBzX2xhbmVzLCBs YW5lcyA9IDA7Ci0KLQlkc2lfY3RybC0+aHcub3BzLmNsZWFyX3BoeTBfbG5fZXJyKCZkc2lfY3Ry bC0+aHcpOwotCi0JaWYgKCFkc2lfY3RybC0+aHcub3BzLnVscHNfb3BzLnVscHNfcmVxdWVzdCB8 fAotCQkJIWRzaV9jdHJsLT5ody5vcHMudWxwc19vcHMudWxwc19leGl0KSB7Ci0JCXByX2RlYnVn KCJEU0kgY29udHJvbGxlciBVTFBTIG9wcyBub3QgcHJlc2VudFxuIik7Ci0JCXJldHVybiAwOwot CX0KLQotCWlmIChkc2lfY3RybC0+aG9zdF9jb25maWcucGFuZWxfbW9kZSA9PSBEU0lfT1BfQ01E X01PREUpCi0JCWxhbmVzID0gZHNpX2N0cmwtPmhvc3RfY29uZmlnLmNvbW1vbl9jb25maWcuZGF0 YV9sYW5lczsKLQotCWxhbmVzIHw9IERTSV9DTE9DS19MQU5FOwotCi0JdWxwc19sYW5lcyA9IGRz aV9jdHJsLT5ody5vcHMudWxwc19vcHMuZ2V0X2xhbmVzX2luX3VscHMoJmRzaV9jdHJsLT5odyk7 Ci0KLQlpZiAoKGxhbmVzICYgdWxwc19sYW5lcykgIT0gbGFuZXMpCi0JCXByX2VycigiTWlzbWF0 Y2ggYmV0d2VlbiBsYW5lcyBpbiBVTFBTXG4iKTsKLQotCWxhbmVzICY9IHVscHNfbGFuZXM7Ci0K LQlkc2lfY3RybC0+aHcub3BzLnVscHNfb3BzLnVscHNfZXhpdCgmZHNpX2N0cmwtPmh3LCBsYW5l cyk7Ci0KLQl1bHBzX2xhbmVzID0gZHNpX2N0cmwtPmh3Lm9wcy51bHBzX29wcy5nZXRfbGFuZXNf aW5fdWxwcygmZHNpX2N0cmwtPmh3KTsKLQlpZiAodWxwc19sYW5lcyAmIGxhbmVzKSB7Ci0JCXBy X2VycigiTGFuZXMgKDB4JXgpIHN0dWNrIGluIFVMUFNcbiIsIHVscHNfbGFuZXMpOwotCQlyYyA9 IC1FSU87Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9jdHJsX2Rydl9z dGF0ZV9pbml0KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpCi17Ci0JaW50IHJjID0gMDsKLQli b29sIHNwbGFzaF9lbmFibGVkID0gZmFsc2U7Ci0Jc3RydWN0IGRzaV9jdHJsX3N0YXRlX2luZm8g KnN0YXRlID0gJmRzaV9jdHJsLT5jdXJyZW50X3N0YXRlOwotCi0JaWYgKCFzcGxhc2hfZW5hYmxl ZCkgewotCQlzdGF0ZS0+cG93ZXJfc3RhdGUgPSBEU0lfQ1RSTF9QT1dFUl9WUkVHX09GRjsKLQkJ c3RhdGUtPmNtZF9lbmdpbmVfc3RhdGUgPSBEU0lfQ1RSTF9FTkdJTkVfT0ZGOwotCQlzdGF0ZS0+ dmlkX2VuZ2luZV9zdGF0ZSA9IERTSV9DVFJMX0VOR0lORV9PRkY7Ci0JfQotCi0JcmV0dXJuIHJj OwotfQotCi1zdGF0aWMgaW50IGRzaV9jdHJsX2J1ZmZlcl9kZWluaXQoc3RydWN0IGRzaV9jdHJs ICpkc2lfY3RybCkKLXsKLQlzdHJ1Y3QgbXNtX2dlbV9hZGRyZXNzX3NwYWNlICphc3BhY2UgPSBO VUxMOwotCi0JaWYgKGRzaV9jdHJsLT50eF9jbWRfYnVmKSB7Ci0JCWFzcGFjZSA9IGRzaV9jdHJs X2dldF9hc3BhY2UoZHNpX2N0cmwsCi0JCQkJTVNNX1NNTVVfRE9NQUlOX1VOU0VDVVJFKTsKLQkJ aWYgKCFhc3BhY2UpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIGdldCBhZGRyZXNzIHNwYWNlXG4i KTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0KLQkJbXNtX2dlbV9wdXRfaW92YShkc2lfY3Ry bC0+dHhfY21kX2J1ZiwgYXNwYWNlKTsKLQotCQltdXRleF9sb2NrKCZkc2lfY3RybC0+ZHJtX2Rl di0+c3RydWN0X211dGV4KTsKLQkJbXNtX2dlbV9mcmVlX29iamVjdChkc2lfY3RybC0+dHhfY21k X2J1Zik7Ci0JCW11dGV4X3VubG9jaygmZHNpX2N0cmwtPmRybV9kZXYtPnN0cnVjdF9tdXRleCk7 Ci0JCWRzaV9jdHJsLT50eF9jbWRfYnVmID0gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQot aW50IGRzaV9jdHJsX2J1ZmZlcl9pbml0KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpCi17Ci0J aW50IHJjID0gMDsKLQl1NjQgaW92YSA9IDA7Ci0Jc3RydWN0IG1zbV9nZW1fYWRkcmVzc19zcGFj ZSAqYXNwYWNlID0gTlVMTDsKLQotCWFzcGFjZSA9IGRzaV9jdHJsX2dldF9hc3BhY2UoZHNpX2N0 cmwsIE1TTV9TTU1VX0RPTUFJTl9VTlNFQ1VSRSk7Ci0JaWYgKCFhc3BhY2UpIHsKLQkJcHJfZXJy KCJmYWlsZWQgdG8gZ2V0IGFkZHJlc3Mgc3BhY2VcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9 Ci0KLQlkc2lfY3RybC0+dHhfY21kX2J1ZiA9IG1zbV9nZW1fbmV3KGRzaV9jdHJsLT5kcm1fZGV2 LAotCQkJCQkgICBTWl80SywKLQkJCQkJICAgTVNNX0JPX1VOQ0FDSEVEKTsKLQotCWlmIChJU19F UlIoZHNpX2N0cmwtPnR4X2NtZF9idWYpKSB7Ci0JCXJjID0gUFRSX0VSUihkc2lfY3RybC0+dHhf Y21kX2J1Zik7Ci0JCXByX2VycigiZmFpbGVkIHRvIGFsbG9jYXRlIGdlbSwgcmM9JWRcbiIsIHJj KTsKLQkJZHNpX2N0cmwtPnR4X2NtZF9idWYgPSBOVUxMOwotCQlnb3RvIGVycm9yOwotCX0KLQot CWRzaV9jdHJsLT5jbWRfYnVmZmVyX3NpemUgPSBTWl80SzsKLQotCXJjID0gbXNtX2dlbV9nZXRf aW92YShkc2lfY3RybC0+dHhfY21kX2J1ZiwgYXNwYWNlLCAmaW92YSk7Ci0JaWYgKHJjKSB7Ci0J CXByX2VycigiZmFpbGVkIHRvIGdldCBpb3ZhLCByYz0lZFxuIiwgcmMpOwotCQkodm9pZClkc2lf Y3RybF9idWZmZXJfZGVpbml0KGRzaV9jdHJsKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAo aW92YSAmIDB4MDcpIHsKLQkJcHJfZXJyKCJUeCBjb21tYW5kIGJ1ZmZlciBpcyBub3QgOCBieXRl IGFsaWduZWRcbiIpOwotCQlyYyA9IC1FTk9UU1VQUDsKLQkJKHZvaWQpZHNpX2N0cmxfYnVmZmVy X2RlaW5pdChkc2lfY3RybCk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIHJj OwotfQotCi1zdGF0aWMgaW50IGRzaV9lbmFibGVfaW9fY2xhbXAoc3RydWN0IGRzaV9jdHJsICpk c2lfY3RybCwKLQkJYm9vbCBlbmFibGUsIGJvb2wgdWxwc19lbmFibGVkKQotewotCXUzMiBsYW5l cyA9IDA7Ci0KLQlpZiAoZHNpX2N0cmwtPmhvc3RfY29uZmlnLnBhbmVsX21vZGUgPT0gRFNJX09Q X0NNRF9NT0RFKQotCQlsYW5lcyA9IGRzaV9jdHJsLT5ob3N0X2NvbmZpZy5jb21tb25fY29uZmln LmRhdGFfbGFuZXM7Ci0KLQlsYW5lcyB8PSBEU0lfQ0xPQ0tfTEFORTsKLQotCWlmIChlbmFibGUp Ci0JCWRzaV9jdHJsLT5ody5vcHMuY2xhbXBfZW5hYmxlKCZkc2lfY3RybC0+aHcsCi0JCQlsYW5l cywgdWxwc19lbmFibGVkKTsKLQllbHNlCi0JCWRzaV9jdHJsLT5ody5vcHMuY2xhbXBfZGlzYWJs ZSgmZHNpX2N0cmwtPmh3LAotCQkJbGFuZXMsIHVscHNfZW5hYmxlZCk7Ci0KLQlyZXR1cm4gMDsK LX0KLQotc3RhdGljIGludCBkc2lfY3RybF9kdHNfcGFyc2Uoc3RydWN0IGRzaV9jdHJsICpkc2lf Y3RybCwKLQkJCQkgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKLXsKLQl1MzIgaW5kZXgg PSAwOwotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRzaV9jdHJsIHx8ICFvZl9ub2RlKSB7Ci0JCXBy X2VycigiaW52YWxpZCBkc2lfY3RybDolZCBvciBvZl9ub2RlOiVkXG4iLAotCQkJCQlkc2lfY3Ry bCAhPSBOVUxMLCBvZl9ub2RlICE9IE5VTEwpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQly YyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJjZWxsLWluZGV4IiwgJmluZGV4KTsK LQlpZiAocmMpIHsKLQkJcHJfZGVidWcoImNlbGwgaW5kZXggbm90IHNldCwgZGVmYXVsdCB0byAw XG4iKTsKLQkJaW5kZXggPSAwOwotCX0KLQotCWRzaV9jdHJsLT5jZWxsX2luZGV4ID0gaW5kZXg7 Ci0JZHNpX2N0cmwtPm5hbWUgPSBvZl9nZXRfcHJvcGVydHkob2Zfbm9kZSwgImxhYmVsIiwgTlVM TCk7Ci0JaWYgKCFkc2lfY3RybC0+bmFtZSkKLQkJZHNpX2N0cmwtPm5hbWUgPSBEU0lfQ1RSTF9E RUZBVUxUX0xBQkVMOwotCi0JZHNpX2N0cmwtPnBoeV9pc29sYXRpb25fZW5hYmxlZCA9IG9mX3By b3BlcnR5X3JlYWRfYm9vbChvZl9ub2RlLAotCQkJCSAgICAicWNvbSxkc2ktcGh5LWlzb2xhdGlv bi1lbmFibGVkIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkc2lfY3RybF9kZXZf cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3QgZHNpX2N0cmwg KmRzaV9jdHJsOwotCXN0cnVjdCBkc2lfY3RybF9saXN0X2l0ZW0gKml0ZW07Ci0JY29uc3Qgc3Ry dWN0IG9mX2RldmljZV9pZCAqaWQ7Ci0JZW51bSBkc2lfY3RybF92ZXJzaW9uIHZlcnNpb247Ci0J aW50IHJjID0gMDsKLQotCWlkID0gb2ZfbWF0Y2hfbm9kZShtc21fZHNpX29mX21hdGNoLCBwZGV2 LT5kZXYub2Zfbm9kZSk7Ci0JaWYgKCFpZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQl2ZXJzaW9u ID0gKihlbnVtIGRzaV9jdHJsX3ZlcnNpb24gKilpZC0+ZGF0YTsKLQotCWl0ZW0gPSBkZXZtX2t6 YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCppdGVtKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpdGVt KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWRzaV9jdHJsID0gZGV2bV9remFsbG9jKCZwZGV2LT5k ZXYsIHNpemVvZigqZHNpX2N0cmwpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRzaV9jdHJsKQotCQly ZXR1cm4gLUVOT01FTTsKLQotCWRzaV9jdHJsLT52ZXJzaW9uID0gdmVyc2lvbjsKLQlkc2lfY3Ry bC0+aXJxX2luZm8uaXJxX251bSA9IC0xOwotCWRzaV9jdHJsLT5pcnFfaW5mby5pcnFfc3RhdF9t YXNrID0gMHgwOwotCi0Jc3Bpbl9sb2NrX2luaXQoJmRzaV9jdHJsLT5pcnFfaW5mby5pcnFfbG9j ayk7Ci0KLQlyYyA9IGRzaV9jdHJsX2R0c19wYXJzZShkc2lfY3RybCwgcGRldi0+ZGV2Lm9mX25v ZGUpOwotCWlmIChyYykgewotCQlwcl9lcnIoImN0cmw6JWQgZHRzIHBhcnNlIGZhaWxlZCwgcmMg PSAlZFxuIiwKLQkJCQkJCWRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0JCWdvdG8gZmFpbDsK LQl9Ci0KLQlyYyA9IGRzaV9jdHJsX2luaXRfcmVnbWFwKHBkZXYsIGRzaV9jdHJsKTsKLQlpZiAo cmMpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gcGFyc2UgcmVnaXN0ZXIgaW5mb3JtYXRpb24sIHJj ID0gJWRcbiIsIHJjKTsKLQkJZ290byBmYWlsOwotCX0KLQotCXJjID0gZHNpX2N0cmxfY2xvY2tz X2luaXQocGRldiwgZHNpX2N0cmwpOwotCWlmIChyYykgewotCQlwcl9lcnIoIkZhaWxlZCB0byBw YXJzZSBjbG9jayBpbmZvcm1hdGlvbiwgcmMgPSAlZFxuIiwgcmMpOwotCQlnb3RvIGZhaWw7Ci0J fQotCi0JcmMgPSBkc2lfY3RybF9zdXBwbGllc19pbml0KHBkZXYsIGRzaV9jdHJsKTsKLQlpZiAo cmMpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gcGFyc2Ugdm9sdGFnZSBzdXBwbGllcywgcmMgPSAl ZFxuIiwgcmMpOwotCQlnb3RvIGZhaWxfY2xrczsKLQl9Ci0KLQlyYyA9IGRzaV9jYXRhbG9nX2N0 cmxfc2V0dXAoJmRzaV9jdHJsLT5odywgZHNpX2N0cmwtPnZlcnNpb24sCi0JCSAgICBkc2lfY3Ry bC0+Y2VsbF9pbmRleCwgZHNpX2N0cmwtPnBoeV9pc29sYXRpb25fZW5hYmxlZCk7Ci0JaWYgKHJj KSB7Ci0JCXByX2VycigiQ2F0YWxvZyBkb2VzIG5vdCBzdXBwb3J0IHZlcnNpb24gKCVkKVxuIiwK LQkJICAgICAgIGRzaV9jdHJsLT52ZXJzaW9uKTsKLQkJZ290byBmYWlsX3N1cHBsaWVzOwotCX0K LQotCXJjID0gZHNpX2N0cmxfYXhpX2J1c19jbGllbnRfaW5pdChwZGV2LCBkc2lfY3RybCk7Ci0J aWYgKHJjKQotCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIGluaXQgYXhpIGJ1cyBjbGllbnQsIHJjID0g JWRcbiIsIHJjKTsKLQotCWl0ZW0tPmN0cmwgPSBkc2lfY3RybDsKLQotCW11dGV4X2xvY2soJmRz aV9jdHJsX2xpc3RfbG9jayk7Ci0JbGlzdF9hZGQoJml0ZW0tPmxpc3QsICZkc2lfY3RybF9saXN0 KTsKLQltdXRleF91bmxvY2soJmRzaV9jdHJsX2xpc3RfbG9jayk7Ci0KLQltdXRleF9pbml0KCZk c2lfY3RybC0+Y3RybF9sb2NrKTsKLQotCWRzaV9jdHJsLT5wZGV2ID0gcGRldjsKLQlwbGF0Zm9y bV9zZXRfZHJ2ZGF0YShwZGV2LCBkc2lfY3RybCk7Ci0JcHJfaW5mbygiUHJvYmUgc3VjY2Vzc2Z1 bCBmb3IgJXNcbiIsIGRzaV9jdHJsLT5uYW1lKTsKLQotCXJldHVybiAwOwotCi1mYWlsX3N1cHBs aWVzOgotCSh2b2lkKWRzaV9jdHJsX3N1cHBsaWVzX2RlaW5pdChkc2lfY3RybCk7Ci1mYWlsX2Ns a3M6Ci0JKHZvaWQpZHNpX2N0cmxfY2xvY2tzX2RlaW5pdChkc2lfY3RybCk7Ci1mYWlsOgotCXJl dHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfY3RybF9kZXZfcmVtb3ZlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2N0cmwgKmRz aV9jdHJsOwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKnRtcDsKLQotCWRzaV9jdHJsID0gcGxh dGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0KLQltdXRleF9sb2NrKCZkc2lfY3RybF9saXN0X2xv Y2spOwotCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJmRzaV9jdHJsX2xpc3QpIHsKLQkJ c3RydWN0IGRzaV9jdHJsX2xpc3RfaXRlbSAqbiA9IGxpc3RfZW50cnkocG9zLAotCQkJCQkJICBz dHJ1Y3QgZHNpX2N0cmxfbGlzdF9pdGVtLAotCQkJCQkJICBsaXN0KTsKLQkJaWYgKG4tPmN0cmwg PT0gZHNpX2N0cmwpIHsKLQkJCWxpc3RfZGVsKCZuLT5saXN0KTsKLQkJCWJyZWFrOwotCQl9Ci0J fQotCW11dGV4X3VubG9jaygmZHNpX2N0cmxfbGlzdF9sb2NrKTsKLQotCW11dGV4X2xvY2soJmRz aV9jdHJsLT5jdHJsX2xvY2spOwotCXJjID0gZHNpX2N0cmxfYXhpX2J1c19jbGllbnRfZGVpbml0 KGRzaV9jdHJsKTsKLQlpZiAocmMpCi0JCXByX2VycigiZmFpbGVkIHRvIGRlaW5pdGlhbGl6ZSBh eGkgYnVzIGNsaWVudCwgcmMgPSAlZFxuIiwgcmMpOwotCi0JcmMgPSBkc2lfY3RybF9zdXBwbGll c19kZWluaXQoZHNpX2N0cmwpOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZGVpbml0 aWFsaXplIHZvbHRhZ2Ugc3VwcGxpZXMsIHJjPSVkXG4iLCByYyk7Ci0KLQlyYyA9IGRzaV9jdHJs X2Nsb2Nrc19kZWluaXQoZHNpX2N0cmwpOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWlsZWQgdG8g ZGVpbml0aWFsaXplIGNsb2NrcywgcmM9JWRcbiIsIHJjKTsKLQotCW11dGV4X3VubG9jaygmZHNp X2N0cmwtPmN0cmxfbG9jayk7Ci0KLQltdXRleF9kZXN0cm95KCZkc2lfY3RybC0+Y3RybF9sb2Nr KTsKLQlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIGRzaV9jdHJsKTsKLQotCXBsYXRmb3JtX3NldF9k cnZkYXRhKHBkZXYsIE5VTEwpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRm b3JtX2RyaXZlciBkc2lfY3RybF9kcml2ZXIgPSB7Ci0JLnByb2JlID0gZHNpX2N0cmxfZGV2X3By b2JlLAotCS5yZW1vdmUgPSBkc2lfY3RybF9kZXZfcmVtb3ZlLAotCS5kcml2ZXIgPSB7Ci0JCS5u YW1lID0gImRybV9kc2lfY3RybCIsCi0JCS5vZl9tYXRjaF90YWJsZSA9IG1zbV9kc2lfb2ZfbWF0 Y2gsCi0JfSwKLX07Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKLQotdm9pZCBkc2lf Y3RybF9kZWJ1Z19kdW1wKHZvaWQpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqdG1wOwot CXN0cnVjdCBkc2lfY3RybCAqY3RybCA9IE5VTEw7Ci0KLQltdXRleF9sb2NrKCZkc2lfY3RybF9s aXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJmRzaV9jdHJsX2xpc3Qp IHsKLQkJc3RydWN0IGRzaV9jdHJsX2xpc3RfaXRlbSAqbjsKLQotCQluID0gbGlzdF9lbnRyeShw b3MsIHN0cnVjdCBkc2lfY3RybF9saXN0X2l0ZW0sIGxpc3QpOwotCQljdHJsID0gbi0+Y3RybDsK LQkJcHJfZXJyKCJkc2kgY3RybDolZFxuIiwgY3RybC0+Y2VsbF9pbmRleCk7Ci0JCWN0cmwtPmh3 Lm9wcy5kZWJ1Z19idXMoJmN0cmwtPmh3KTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfY3RybF9s aXN0X2xvY2spOwotfQotCi0jZW5kaWYKLS8qKgotICogZHNpX2N0cmxfZ2V0KCkgLSBnZXQgYSBk c2lfY3RybCBoYW5kbGUgZnJvbSBhbiBvZl9ub2RlCi0gKiBAb2Zfbm9kZTogICAgb2Zfbm9kZSBv ZiB0aGUgRFNJIGNvbnRyb2xsZXIuCi0gKgotICogR2V0cyB0aGUgRFNJIGNvbnRyb2xsZXIgaGFu ZGxlIGZvciB0aGUgY29ycmVzcG9uZGluZyBvZl9ub2RlLiBUaGUgcmVmIGNvdW50Ci0gKiBpcyBp bmNyZW1lbnRlZCB0byBvbmUgYW5kIGFsbCBzdWJzZXF1ZW50IGdldHMgd2lsbCBmYWlsIHVudGls IHRoZSBvcmlnaW5hbAotICogY2xpZW50cyBjYWxscyBhIHB1dC4KLSAqCi0gKiBSZXR1cm46IERT SSBDb250cm9sbGVyIGhhbmRsZS4KLSAqLwotc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybF9nZXQo c3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywg KnRtcDsKLQlzdHJ1Y3QgZHNpX2N0cmwgKmN0cmwgPSBOVUxMOwotCi0JbXV0ZXhfbG9jaygmZHNp X2N0cmxfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0bXAsICZkc2lfY3Ry bF9saXN0KSB7Ci0JCXN0cnVjdCBkc2lfY3RybF9saXN0X2l0ZW0gKm47Ci0KLQkJbiA9IGxpc3Rf ZW50cnkocG9zLCBzdHJ1Y3QgZHNpX2N0cmxfbGlzdF9pdGVtLCBsaXN0KTsKLQkJaWYgKG4tPmN0 cmwtPnBkZXYtPmRldi5vZl9ub2RlID09IG9mX25vZGUpIHsKLQkJCWN0cmwgPSBuLT5jdHJsOwot CQkJYnJlYWs7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfY3RybF9saXN0X2xvY2spOwot Ci0JaWYgKCFjdHJsKSB7Ci0JCXByX2VycigiRGV2aWNlIHdpdGggb2Ygbm9kZSBub3QgZm91bmRc biIpOwotCQljdHJsID0gRVJSX1BUUigtRVBST0JFX0RFRkVSKTsKLQkJcmV0dXJuIGN0cmw7Ci0J fQotCi0JbXV0ZXhfbG9jaygmY3RybC0+Y3RybF9sb2NrKTsKLQlpZiAoY3RybC0+cmVmY291bnQg PT0gMSkgewotCQlwcl9lcnIoIlslc10gRGV2aWNlIGluIHVzZVxuIiwgY3RybC0+bmFtZSk7Ci0J CWN0cmwgPSBFUlJfUFRSKC1FQlVTWSk7Ci0JfSBlbHNlIHsKLQkJY3RybC0+cmVmY291bnQrKzsK LQl9Ci0JbXV0ZXhfdW5sb2NrKCZjdHJsLT5jdHJsX2xvY2spOwotCXJldHVybiBjdHJsOwotfQot Ci0vKioKLSAqIGRzaV9jdHJsX3B1dCgpIC0gcmVsZWFzZXMgYSBkc2kgY29udHJvbGxlciBoYW5k bGUuCi0gKiBAZHNpX2N0cmw6ICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqCi0gKiBS ZWxlYXNlcyB0aGUgRFNJIGNvbnRyb2xsZXIuIERyaXZlciB3aWxsIGNsZWFuIHVwIGFsbCByZXNv dXJjZXMgYW5kIHB1dHMgYmFjawotICogdGhlIERTSSBjb250cm9sbGVyIGludG8gcmVzZXQgc3Rh dGUuCi0gKi8KLXZvaWQgZHNpX2N0cmxfcHV0KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpCi17 Ci0JbXV0ZXhfbG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0KLQlpZiAoZHNpX2N0cmwtPnJl ZmNvdW50ID09IDApCi0JCXByX2VycigiVW5iYWxhbmNlZCAlcyBjYWxsXG4iLCBfX2Z1bmNfXyk7 Ci0JZWxzZQotCQlkc2lfY3RybC0+cmVmY291bnQtLTsKLQotCW11dGV4X3VubG9jaygmZHNpX2N0 cmwtPmN0cmxfbG9jayk7Ci19Ci0KLS8qKgotICogZHNpX2N0cmxfZHJ2X2luaXQoKSAtIGluaXRp YWxpemUgZHNpIGNvbnRyb2xsZXIgZHJpdmVyLgotICogQGRzaV9jdHJsOiAgICAgIERTSSBjb250 cm9sbGVyIGhhbmRsZS4KLSAqIEBwYXJlbnQ6ICAgICAgICBQYXJlbnQgZGlyZWN0b3J5IGZvciBk ZWJ1ZyBmcy4KLSAqCi0gKiBJbml0aWFsaXplcyBEU0kgY29udHJvbGxlciBkcml2ZXIuIERyaXZl ciBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIKLSAqIGRzaV9jdHJsX2dldCgpIHN1Y2NlZWRz LgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJsX2Rydl9pbml0 KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsIHN0cnVjdCBkZW50cnkgKnBhcmVudCkKLXsKLQlp bnQgcmMgPSAwOwotCi0JaWYgKCFkc2lfY3RybCB8fCAhcGFyZW50KSB7Ci0JCXByX2VycigiSW52 YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZk c2lfY3RybC0+Y3RybF9sb2NrKTsKLQlyYyA9IGRzaV9jdHJsX2Rydl9zdGF0ZV9pbml0KGRzaV9j dHJsKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBkcml2ZXIg c3RhdGUsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBkc2lfY3Ry bF9kZWJ1Z2ZzX2luaXQoZHNpX2N0cmwsIHBhcmVudCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vycigi W0RTSV8lZF0gZmFpbGVkIHRvIGluaXQgZGVidWcgZnMsIHJjPSVkXG4iLAotCQkgICAgICAgZHNp X2N0cmwtPmNlbGxfaW5kZXgsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVycm9yOgotCW11 dGV4X3VubG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi0vKioK LSAqIGRzaV9jdHJsX2Rydl9kZWluaXQoKSAtIGRlLWluaXRpYWxpemVzIGRzaSBjb250cm9sbGVy IGRyaXZlcgotICogQGRzaV9jdHJsOiAgICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqCi0g KiBSZWxlYXNlcyBhbGwgcmVzb3VyY2VzIGFjcXVpcmVkIGJ5IGRzaV9jdHJsX2Rydl9pbml0KCku Ci0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfZHJ2X2RlaW5p dChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRz aV9jdHJsKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZB TDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQotCXJjID0gZHNp X2N0cmxfZGVidWdmc19kZWluaXQoZHNpX2N0cmwpOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWls ZWQgdG8gcmVsZWFzZSBkZWJ1Z2ZzIHJvb3QsIHJjPSVkXG4iLCByYyk7Ci0KLQlyYyA9IGRzaV9j dHJsX2J1ZmZlcl9kZWluaXQoZHNpX2N0cmwpOwotCWlmIChyYykKLQkJcHJfZXJyKCJGYWlsZWQg dG8gZnJlZSBjbWQgYnVmZmVycywgcmM9JWRcbiIsIHJjKTsKLQotCW11dGV4X3VubG9jaygmZHNp X2N0cmwtPmN0cmxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX2N0cmxfY2xrX2Ni X3JlZ2lzdGVyKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0Jc3RydWN0IGNsa19jdHJsX2Ni ICpjbGtfY2IpCi17Ci0JaWYgKCFkc2lfY3RybCB8fCAhY2xrX2NiKSB7Ci0JCXByX2VycigiSW52 YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkc2lfY3RybC0+Y2xr X2NiLnByaXYgPSBjbGtfY2ItPnByaXY7Ci0JZHNpX2N0cmwtPmNsa19jYi5kc2lfY2xrX2NiID0g Y2xrX2NiLT5kc2lfY2xrX2NiOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGRzaV9jdHJsX3Bo eV9zd19yZXNldCgpIC0gcGVyZm9ybSBhIFBIWSBzb2Z0d2FyZSByZXNldAotICogQGRzaV9jdHJs OiAgICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqCi0gKiBQZXJmb3JtcyBhIFBIWSBz b2Z0d2FyZSByZXNldCBvbiB0aGUgRFNJIGNvbnRyb2xsZXIuIFJlc2V0IHNob3VsZCBiZSBkb25l Ci0gKiB3aGVuIHRoZSBjb250cm9sbGVyIHBvd2VyIHN0YXRlIGlzIERTSV9DVFJMX1BPV0VSX0NP UkVfQ0xLX09OIGFuZCB0aGUgUEhZIGlzCi0gKiBub3QgZW5hYmxlZC4KLSAqCi0gKiBUaGlzIGZ1 bmN0aW9uIHdpbGwgZmFpbCBpZiBkcml2ZXIgaXMgaW4gYW55IG90aGVyIHN0YXRlLgotICoKLSAq IFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJsX3BoeV9zd19yZXNldChzdHJ1 Y3QgZHNpX2N0cmwgKmRzaV9jdHJsKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRzaV9jdHJs KSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0KLQltdXRleF9sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQlyYyA9IGRzaV9jdHJsX2No ZWNrX3N0YXRlKGRzaV9jdHJsLCBEU0lfQ1RSTF9PUF9QSFlfU1dfUkVTRVQsIDB4MCk7Ci0JaWYg KHJjKSB7Ci0JCXByX2VycigiW0RTSV8lZF0gQ29udHJvbGxlciBzdGF0ZSBjaGVjayBmYWlsZWQs IHJjPSVkXG4iLAotCQkgICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIHJjKTsKLQkJZ290byBl cnJvcjsKLQl9Ci0KLQlkc2lfY3RybC0+aHcub3BzLnBoeV9zd19yZXNldCgmZHNpX2N0cmwtPmh3 KTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXSBQSFkgc29mdCByZXNldCBkb25lXG4iLCBkc2lfY3Ry bC0+Y2VsbF9pbmRleCk7Ci0JZHNpX2N0cmxfdXBkYXRlX3N0YXRlKGRzaV9jdHJsLCBEU0lfQ1RS TF9PUF9QSFlfU1dfUkVTRVQsIDB4MCk7Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJmRzaV9jdHJs LT5jdHJsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9zZWFtbGVz c190aW1pbmdfdXBkYXRlKCkgLSB1cGRhdGUgb25seSBjb250cm9sbGVyIHRpbWluZwotICogQGRz aV9jdHJsOiAgICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAdGltaW5nOiAgICAg ICAgICAgIE5ldyBEU0kgdGltaW5nIGluZm8KLSAqCi0gKiBVcGRhdGVzIGhvc3QgdGltaW5nIHZh bHVlcyB0byBjb25kdWN0IGEgc2VhbWxlc3MgdHJhbnNpdGlvbiB0byBuZXcgdGltaW5nCi0gKiBG b3IgZXhhbXBsZSwgdG8gdXBkYXRlIHRoZSBwb3JjaCB2YWx1ZXMgaW4gYSBkeW5hbWljIGZwcyBz d2l0Y2guCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfYXN5 bmNfdGltaW5nX3VwZGF0ZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQlzdHJ1Y3QgZHNp X21vZGVfaW5mbyAqdGltaW5nKQotewotCXN0cnVjdCBkc2lfbW9kZV9pbmZvICpob3N0X21vZGU7 Ci0JaW50IHJjID0gMDsKLQotCWlmICghZHNpX2N0cmwgfHwgIXRpbWluZykgewotCQlwcl9lcnIo IkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9j aygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0KLQlyYyA9IGRzaV9jdHJsX2NoZWNrX3N0YXRlKGRz aV9jdHJsLCBEU0lfQ1RSTF9PUF9BU1lOQ19USU1JTkcsCi0JCQlEU0lfQ1RSTF9FTkdJTkVfT04p OwotCWlmIChyYykgewotCQlwcl9lcnIoIltEU0lfJWRdIENvbnRyb2xsZXIgc3RhdGUgY2hlY2sg ZmFpbGVkLCByYz0lZFxuIiwKLQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0J CWdvdG8gZXhpdDsKLQl9Ci0KLQlob3N0X21vZGUgPSAmZHNpX2N0cmwtPmhvc3RfY29uZmlnLnZp ZGVvX3RpbWluZzsKLQltZW1jcHkoaG9zdF9tb2RlLCB0aW1pbmcsIHNpemVvZigqaG9zdF9tb2Rl KSk7Ci0JZHNpX2N0cmwtPmh3Lm9wcy5zZXRfdGltaW5nX2RiKCZkc2lfY3RybC0+aHcsIHRydWUp OwotCWRzaV9jdHJsLT5ody5vcHMuc2V0X3ZpZGVvX3RpbWluZygmZHNpX2N0cmwtPmh3LCBob3N0 X21vZGUpOwotCi1leGl0OgotCW11dGV4X3VubG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0J cmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGRzaV9jdHJsX3RpbWluZ19kYl91cGRhdGUoKSAtIHVw ZGF0ZSBvbmx5IGNvbnRyb2xsZXIgVGltaW5nIERCCi0gKiBAZHNpX2N0cmw6ICAgICAgICAgIERT SSBjb250cm9sbGVyIGhhbmRsZS4KLSAqIEBlbmFibGU6ICAgICAgICAgICAgRW5hYmxlL2Rpc2Fi bGUgVGltaW5nIERCIHJlZ2lzdGVyCi0gKgotICogIFVwZGF0ZSB0aW1pbmcgZGIgcmVnaXN0ZXIg dmFsdWUgZHVyaW5nIGRmcHMgdXNlY2FzZXMKLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0g Ki8KLWludCBkc2lfY3RybF90aW1pbmdfZGJfdXBkYXRlKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0 cmwsCi0JCWJvb2wgZW5hYmxlKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRzaV9jdHJsKSB7 Ci0JCXByX2VycigiSW52YWxpZCBkc2lfY3RybFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0K LQotCW11dGV4X2xvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCi0JcmMgPSBkc2lfY3RybF9j aGVja19zdGF0ZShkc2lfY3RybCwgRFNJX0NUUkxfT1BfQVNZTkNfVElNSU5HLAotCQkJRFNJX0NU UkxfRU5HSU5FX09OKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbRFNJXyVkXSBDb250cm9sbGVy IHN0YXRlIGNoZWNrIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBkc2lfY3RybC0+Y2VsbF9p bmRleCwgcmMpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JLyoKLQkgKiBBZGQgSFcgcmVjb21tZW5k ZWQgZGVsYXkgZm9yIGRmcHMgZmVhdHVyZS4KLQkgKiBXaGVuIHByZWZldGNoIGlzIGVuYWJsZWQs IE1EU1MgSFcgd29ya3Mgb24gMiB2c3luYwotCSAqIGJvdW5kYXJpZXMgaS5lLiBtZHBfdnN5bmMg YW5kIHBhbmVsX3ZzeW5jLgotCSAqIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHdlIGFy ZSBvbmx5IHdhaXRpbmcKLQkgKiBmb3IgbWRwX3ZzeW5jLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0 aGF0IGludGVyZmFjZQotCSAqIGZsdXNoIGlzIGFmdGVyIHBhbmVsX3ZzeW5jLiBTbywgYWRkZWQg dGhlIHJlY29tbWVuZGVkCi0JICogZGVsYXlzIGFmdGVyIGRmcHMgdXBkYXRlLgotCSAqLwotCXVz bGVlcF9yYW5nZSgyMDAwLCAyMDEwKTsKLQotCWRzaV9jdHJsLT5ody5vcHMuc2V0X3RpbWluZ19k YigmZHNpX2N0cmwtPmh3LCBlbmFibGUpOwotCi1leGl0OgotCW11dGV4X3VubG9jaygmZHNpX2N0 cmwtPmN0cmxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX2N0cmxfc2V0dXAoc3Ry dWN0IGRzaV9jdHJsICpkc2lfY3RybCkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkc2lfY3Ry bCkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JbXV0ZXhfbG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0KLQlkc2lfY3RybC0+aHcu b3BzLnNldHVwX2xhbmVfbWFwKCZkc2lfY3RybC0+aHcsCi0JCQkJCSZkc2lfY3RybC0+aG9zdF9j b25maWcubGFuZV9tYXApOwotCi0JZHNpX2N0cmwtPmh3Lm9wcy5ob3N0X3NldHVwKCZkc2lfY3Ry bC0+aHcsCi0JCQkJICAgICZkc2lfY3RybC0+aG9zdF9jb25maWcuY29tbW9uX2NvbmZpZyk7Ci0K LQlpZiAoZHNpX2N0cmwtPmhvc3RfY29uZmlnLnBhbmVsX21vZGUgPT0gRFNJX09QX0NNRF9NT0RF KSB7Ci0JCWRzaV9jdHJsLT5ody5vcHMuY21kX2VuZ2luZV9zZXR1cCgmZHNpX2N0cmwtPmh3LAot CQkJCQkmZHNpX2N0cmwtPmhvc3RfY29uZmlnLmNvbW1vbl9jb25maWcsCi0JCQkJCSZkc2lfY3Ry bC0+aG9zdF9jb25maWcudS5jbWRfZW5naW5lKTsKLQotCQlkc2lfY3RybC0+aHcub3BzLnNldHVw X2NtZF9zdHJlYW0oJmRzaV9jdHJsLT5odywKLQkJCQkmZHNpX2N0cmwtPmhvc3RfY29uZmlnLnZp ZGVvX3RpbWluZywKLQkJCQlkc2lfY3RybC0+aG9zdF9jb25maWcudmlkZW9fdGltaW5nLmhfYWN0 aXZlICogMywKLQkJCQkweDAsCi0JCQkJJmRzaV9jdHJsLT5yb2kpOwotCQlkc2lfY3RybC0+aHcu b3BzLmNtZF9lbmdpbmVfZW4oJmRzaV9jdHJsLT5odywgdHJ1ZSk7Ci0JfSBlbHNlIHsKLQkJZHNp X2N0cmwtPmh3Lm9wcy52aWRlb19lbmdpbmVfc2V0dXAoJmRzaV9jdHJsLT5odywKLQkJCQkJJmRz aV9jdHJsLT5ob3N0X2NvbmZpZy5jb21tb25fY29uZmlnLAotCQkJCQkmZHNpX2N0cmwtPmhvc3Rf Y29uZmlnLnUudmlkZW9fZW5naW5lKTsKLQkJZHNpX2N0cmwtPmh3Lm9wcy5zZXRfdmlkZW9fdGlt aW5nKCZkc2lfY3RybC0+aHcsCi0JCQkJCSAgJmRzaV9jdHJsLT5ob3N0X2NvbmZpZy52aWRlb190 aW1pbmcpOwotCQlkc2lfY3RybC0+aHcub3BzLnZpZGVvX2VuZ2luZV9lbigmZHNpX2N0cmwtPmh3 LCB0cnVlKTsKLQl9Ci0KLQlkc2lfY3RybC0+aHcub3BzLmVuYWJsZV9zdGF0dXNfaW50ZXJydXB0 cygmZHNpX2N0cmwtPmh3LCAweDApOwotCWRzaV9jdHJsLT5ody5vcHMuZW5hYmxlX2Vycm9yX2lu dGVycnVwdHMoJmRzaV9jdHJsLT5odywgMHgwKTsKLQlkc2lfY3RybC0+aHcub3BzLmN0cmxfZW4o JmRzaV9jdHJsLT5odywgdHJ1ZSk7Ci0KLQltdXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xv Y2spOwotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9waHlfcmVzZXRfY29uZmln KCkgLSBNYXNrL3VubWFzayBwcm9wYWdhdGlvbiBvZiBhaGIgcmVzZXQgc2lnbmFsCi0gKgl0byBE U0kgUEhZIGhhcmR3YXJlLgotICogQGRzaV9jdHJsOiAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFu ZGxlLgotICogQGVuYWJsZToJCQlNYXNrL3VubWFzayB0aGUgUEhZIHJlc2V0IHNpZ25hbC4KLSAq Ci0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9waHlfcmVzZXRfY29u ZmlnKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsIGJvb2wgZW5hYmxlKQotewotCWlmICghZHNp X2N0cmwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFM OwotCX0KLQotCWlmIChkc2lfY3RybC0+aHcub3BzLnBoeV9yZXNldF9jb25maWcpCi0JCWRzaV9j dHJsLT5ody5vcHMucGh5X3Jlc2V0X2NvbmZpZygmZHNpX2N0cmwtPmh3LCBlbmFibGUpOwotCi0J cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzaV9jdHJsX2hhbmRsZV9lcnJvcl9zdGF0dXMo c3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJCQl1bnNpZ25lZCBsb25nIGludCBlcnJvcikK LXsKLQlwcl9lcnIoIiVzOiAlbHVcbiIsIF9fZnVuY19fLCBlcnJvcik7Ci0KLQkvKiBEVExOIFBI WSBlcnJvciAqLwotCWlmIChlcnJvciAmIDB4MzAwMGUwMCkKLQkJaWYgKGRzaV9jdHJsLT5ody5v cHMuY2xlYXJfZXJyb3Jfc3RhdHVzKQotCQkJZHNpX2N0cmwtPmh3Lm9wcy5jbGVhcl9lcnJvcl9z dGF0dXMoJmRzaV9jdHJsLT5odywKLQkJCQkJMHgzMDAwZTAwKTsKLQotCS8qIERTSSBGSUZPIE9W RVJGTE9XIGVycm9yICovCi0JaWYgKGVycm9yICYgMHhmMDAwMCkgewotCQlpZiAoZHNpX2N0cmwt Pmh3Lm9wcy5jbGVhcl9lcnJvcl9zdGF0dXMpCi0JCQlkc2lfY3RybC0+aHcub3BzLmNsZWFyX2Vy cm9yX3N0YXR1cygmZHNpX2N0cmwtPmh3LAotCQkJCQkweGYwMDAwKTsKLQl9Ci0KLQkvKiBEU0kg RklGTyBVTkRFUkZMT1cgZXJyb3IgKi8KLQlpZiAoZXJyb3IgJiAweGYwMDAwMCkgewotCQlpZiAo ZHNpX2N0cmwtPmh3Lm9wcy5jbGVhcl9lcnJvcl9zdGF0dXMpCi0JCQlkc2lfY3RybC0+aHcub3Bz LmNsZWFyX2Vycm9yX3N0YXR1cygmZHNpX2N0cmwtPmh3LAotCQkJCQkweGYwMDAwMCk7Ci0JfQot Ci0JLyogRFNJIFBMTCBVTkxPQ0sgZXJyb3IgKi8KLQlpZiAoZXJyb3IgJiBCSVQoOCkpCi0JCWlm IChkc2lfY3RybC0+aHcub3BzLmNsZWFyX2Vycm9yX3N0YXR1cykKLQkJCWRzaV9jdHJsLT5ody5v cHMuY2xlYXJfZXJyb3Jfc3RhdHVzKCZkc2lfY3RybC0+aHcsCi0JCQkJCUJJVCg4KSk7Ci19Ci0K LS8qKgotICogZHNpX2N0cmxfaXNyIC0gaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBmb3IgRFNJ IENUUkwgY29tcG9uZW50Ci0gKiBAaXJxOiBJbmNvbWluZyBJUlEgbnVtYmVyCi0gKiBAcHRyOiBQ b2ludGVyIHRvIHVzZXIgZGF0YSBzdHJ1Y3R1cmUgKHN0cnVjdCBkc2lfY3RybCkKLSAqIFJldHVy bnM6IElSUV9IQU5ETEVEIGlmIG5vIGZ1cnRoZXIgYWN0aW9uIHJlcXVpcmVkCi0gKi8KLXN0YXRp YyBpcnFyZXR1cm5fdCBkc2lfY3RybF9pc3IoaW50IGlycSwgdm9pZCAqcHRyKQotewotCXN0cnVj dCBkc2lfY3RybCAqZHNpX2N0cmw7Ci0Jc3RydWN0IGRzaV9ldmVudF9jYl9pbmZvIGNiX2luZm87 Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1aW50MzJfdCBjZWxsX2luZGV4LCBzdGF0dXMsIGk7 Ci0JdWludDY0X3QgZXJyb3JzOwotCi0JaWYgKCFwdHIpCi0JCXJldHVybiBJUlFfTk9ORTsKLQlk c2lfY3RybCA9IHB0cjsKLQotCS8qIGNsZWFyIHN0YXR1cyBpbnRlcnJ1cHRzICovCi0JaWYgKGRz aV9jdHJsLT5ody5vcHMuZ2V0X2ludGVycnVwdF9zdGF0dXMpCi0JCXN0YXR1cyA9IGRzaV9jdHJs LT5ody5vcHMuZ2V0X2ludGVycnVwdF9zdGF0dXMoJmRzaV9jdHJsLT5odyk7Ci0JZWxzZQotCQlz dGF0dXMgPSAweDA7Ci0KLQlpZiAoZHNpX2N0cmwtPmh3Lm9wcy5jbGVhcl9pbnRlcnJ1cHRfc3Rh dHVzKQotCQlkc2lfY3RybC0+aHcub3BzLmNsZWFyX2ludGVycnVwdF9zdGF0dXMoJmRzaV9jdHJs LT5odywgc3RhdHVzKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkc2lfY3RybC0+aXJxX2luZm8u aXJxX2xvY2ssIGZsYWdzKTsKLQljZWxsX2luZGV4ID0gZHNpX2N0cmwtPmNlbGxfaW5kZXg7Ci0J c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHNpX2N0cmwtPmlycV9pbmZvLmlycV9sb2NrLCBmbGFn cyk7Ci0KLQkvKiBjbGVhciBlcnJvciBpbnRlcnJ1cHRzICovCi0JaWYgKGRzaV9jdHJsLT5ody5v cHMuZ2V0X2Vycm9yX3N0YXR1cykKLQkJZXJyb3JzID0gZHNpX2N0cmwtPmh3Lm9wcy5nZXRfZXJy b3Jfc3RhdHVzKCZkc2lfY3RybC0+aHcpOwotCWVsc2UKLQkJZXJyb3JzID0gMHgwOwotCi0JaWYg KGVycm9ycykgewotCQkvKiBoYW5kbGUgRFNJIGVycm9yIHJlY292ZXJ5ICovCi0JCWRzaV9jdHJs X2hhbmRsZV9lcnJvcl9zdGF0dXMoZHNpX2N0cmwsIGVycm9ycyk7Ci0JCWlmIChkc2lfY3RybC0+ aHcub3BzLmNsZWFyX2Vycm9yX3N0YXR1cykKLQkJCWRzaV9jdHJsLT5ody5vcHMuY2xlYXJfZXJy b3Jfc3RhdHVzKCZkc2lfY3RybC0+aHcsCi0JCQkJCQkJZXJyb3JzKTsKLQl9Ci0KLQlpZiAoc3Rh dHVzICYgRFNJX0NNRF9NT0RFX0RNQV9ET05FKSB7Ci0JCWRzaV9jdHJsX2Rpc2FibGVfc3RhdHVz X2ludGVycnVwdChkc2lfY3RybCwKLQkJCQkJRFNJX1NJTlRfQ01EX01PREVfRE1BX0RPTkUpOwot CQljb21wbGV0ZV9hbGwoJmRzaV9jdHJsLT5pcnFfaW5mby5jbWRfZG1hX2RvbmUpOwotCX0KLQot CWlmIChzdGF0dXMgJiBEU0lfQ01EX0ZSQU1FX0RPTkUpIHsKLQkJZHNpX2N0cmxfZGlzYWJsZV9z dGF0dXNfaW50ZXJydXB0KGRzaV9jdHJsLAotCQkJCQlEU0lfU0lOVF9DTURfRlJBTUVfRE9ORSk7 Ci0JCWNvbXBsZXRlX2FsbCgmZHNpX2N0cmwtPmlycV9pbmZvLmNtZF9mcmFtZV9kb25lKTsKLQl9 Ci0KLQlpZiAoc3RhdHVzICYgRFNJX1ZJREVPX01PREVfRlJBTUVfRE9ORSkgewotCQlkc2lfY3Ry bF9kaXNhYmxlX3N0YXR1c19pbnRlcnJ1cHQoZHNpX2N0cmwsCi0JCQkJCURTSV9TSU5UX1ZJREVP X01PREVfRlJBTUVfRE9ORSk7Ci0JCWNvbXBsZXRlX2FsbCgmZHNpX2N0cmwtPmlycV9pbmZvLnZp ZF9mcmFtZV9kb25lKTsKLQl9Ci0KLQlpZiAoc3RhdHVzICYgRFNJX0JUQV9ET05FKSB7Ci0JCWRz aV9jdHJsX2Rpc2FibGVfc3RhdHVzX2ludGVycnVwdChkc2lfY3RybCwKLQkJCQkJRFNJX1NJTlRf QlRBX0RPTkUpOwotCQljb21wbGV0ZV9hbGwoJmRzaV9jdHJsLT5pcnFfaW5mby5idGFfZG9uZSk7 Ci0JfQotCi0JZm9yIChpID0gMDsgc3RhdHVzICYmIGkgPCBEU0lfU1RBVFVTX0lOVEVSUlVQVF9D T1VOVDsgKytpKSB7Ci0JCWlmIChzdGF0dXMgJiAweDEpIHsKLQkJCXNwaW5fbG9ja19pcnFzYXZl KCZkc2lfY3RybC0+aXJxX2luZm8uaXJxX2xvY2ssIGZsYWdzKTsKLQkJCWNiX2luZm8gPSBkc2lf Y3RybC0+aXJxX2luZm8uaXJxX3N0YXRfY2JbaV07Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3Jl KAotCQkJCQkmZHNpX2N0cmwtPmlycV9pbmZvLmlycV9sb2NrLCBmbGFncyk7Ci0KLQkJCWlmIChj Yl9pbmZvLmV2ZW50X2NiKQotCQkJCSh2b2lkKWNiX2luZm8uZXZlbnRfY2IoY2JfaW5mby5ldmVu dF91c3JfcHRyLAotCQkJCQkJY2JfaW5mby5ldmVudF9pZHgsCi0JCQkJCQljZWxsX2luZGV4LCBp cnEsIDAsIDAsIDApOwotCQl9Ci0JCXN0YXR1cyA+Pj0gMTsKLQl9Ci0KLQlyZXR1cm4gSVJRX0hB TkRMRUQ7Ci19Ci0KLS8qKgotICogX2RzaV9jdHJsX3NldHVwX2lzciAtIHJlZ2lzdGVyIElTUiBo YW5kbGVyCi0gKiBAZHNpX2N0cmw6IFBvaW50ZXIgdG8gYXNzb2NpYXRlZCBkc2lfY3RybCBzdHJ1 Y3R1cmUKLSAqIFJldHVybnM6IFplcm8gb24gc3VjY2VzcwotICovCi1zdGF0aWMgaW50IGRzaV9j dHJsX3NldHVwX2lzcihzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsKQotewotCWludCBpcnFfbnVt LCByYzsKLQotCWlmICghZHNpX2N0cmwpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChkc2lfY3Ry bC0+aXJxX2luZm8uaXJxX251bSAhPSAtMSkKLQkJcmV0dXJuIDA7Ci0KLQlpbml0X2NvbXBsZXRp b24oJmRzaV9jdHJsLT5pcnFfaW5mby5jbWRfZG1hX2RvbmUpOwotCWluaXRfY29tcGxldGlvbigm ZHNpX2N0cmwtPmlycV9pbmZvLnZpZF9mcmFtZV9kb25lKTsKLQlpbml0X2NvbXBsZXRpb24oJmRz aV9jdHJsLT5pcnFfaW5mby5jbWRfZnJhbWVfZG9uZSk7Ci0JaW5pdF9jb21wbGV0aW9uKCZkc2lf Y3RybC0+aXJxX2luZm8uYnRhX2RvbmUpOwotCi0JaXJxX251bSA9IHBsYXRmb3JtX2dldF9pcnEo ZHNpX2N0cmwtPnBkZXYsIDApOwotCWlmIChpcnFfbnVtIDwgMCkgewotCQlwcl9lcnIoIltEU0lf JWRdIEZhaWxlZCB0byBnZXQgSVJRIG51bWJlciwgJWRcbiIsCi0JCQkJZHNpX2N0cmwtPmNlbGxf aW5kZXgsIGlycV9udW0pOwotCQlyYyA9IGlycV9udW07Ci0JfSBlbHNlIHsKLQkJcmMgPSBkZXZt X3JlcXVlc3RfdGhyZWFkZWRfaXJxKCZkc2lfY3RybC0+cGRldi0+ZGV2LCBpcnFfbnVtLAotCQkJ CWRzaV9jdHJsX2lzciwgTlVMTCwgMCwgImRzaV9jdHJsIiwgZHNpX2N0cmwpOwotCQlpZiAocmMp IHsKLQkJCXByX2VycigiW0RTSV8lZF0gRmFpbGVkIHRvIHJlcXVlc3QgSVJRLCAlZFxuIiwKLQkJ CQkJZHNpX2N0cmwtPmNlbGxfaW5kZXgsIHJjKTsKLQkJfSBlbHNlIHsKLQkJCWRzaV9jdHJsLT5p cnFfaW5mby5pcnFfbnVtID0gaXJxX251bTsKLQkJCWRpc2FibGVfaXJxX25vc3luYyhpcnFfbnVt KTsKLQotCQkJcHJfZGVidWcoIltEU0lfJWRdIElSUSAlZCByZWdpc3RlcmVkXG4iLAotCQkJCQlk c2lfY3RybC0+Y2VsbF9pbmRleCwgaXJxX251bSk7Ci0JCX0KLQl9Ci0JcmV0dXJuIHJjOwotfQot Ci0vKioKLSAqIF9kc2lfY3RybF9kZXN0cm95X2lzciAtIHVucmVnaXN0ZXIgSVNSIGhhbmRsZXIK LSAqIEBkc2lfY3RybDogUG9pbnRlciB0byBhc3NvY2lhdGVkIGRzaV9jdHJsIHN0cnVjdHVyZQot ICovCi1zdGF0aWMgdm9pZCBfZHNpX2N0cmxfZGVzdHJveV9pc3Ioc3RydWN0IGRzaV9jdHJsICpk c2lfY3RybCkKLXsKLQlpZiAoIWRzaV9jdHJsIHx8ICFkc2lfY3RybC0+cGRldiB8fCBkc2lfY3Ry bC0+aXJxX2luZm8uaXJxX251bSA8IDApCi0JCXJldHVybjsKLQotCWlmIChkc2lfY3RybC0+aXJx X2luZm8uaXJxX251bSAhPSAtMSkgewotCQlkZXZtX2ZyZWVfaXJxKCZkc2lfY3RybC0+cGRldi0+ ZGV2LAotCQkJCWRzaV9jdHJsLT5pcnFfaW5mby5pcnFfbnVtLCBkc2lfY3RybCk7Ci0JCWRzaV9j dHJsLT5pcnFfaW5mby5pcnFfbnVtID0gLTE7Ci0JfQotfQotCi12b2lkIGRzaV9jdHJsX2VuYWJs ZV9zdGF0dXNfaW50ZXJydXB0KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCXVpbnQzMl90 IGludHJfaWR4LCBzdHJ1Y3QgZHNpX2V2ZW50X2NiX2luZm8gKmV2ZW50X2luZm8pCi17Ci0JdW5z aWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghZHNpX2N0cmwgfHwgZHNpX2N0cmwtPmlycV9pbmZv LmlycV9udW0gPT0gLTEgfHwKLQkJCWludHJfaWR4ID49IERTSV9TVEFUVVNfSU5URVJSVVBUX0NP VU5UKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZHNpX2N0cmwtPmlycV9pbmZv LmlycV9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoZHNpX2N0cmwtPmlycV9pbmZvLmlycV9zdGF0X3Jl ZmNvdW50W2ludHJfaWR4XSA9PSAwKSB7Ci0JCS8qIGVuYWJsZSBpcnEgb24gZmlyc3QgcmVxdWVz dCAqLwotCQlpZiAoZHNpX2N0cmwtPmlycV9pbmZvLmlycV9zdGF0X21hc2sgPT0gMCkKLQkJCWVu YWJsZV9pcnEoZHNpX2N0cmwtPmlycV9pbmZvLmlycV9udW0pOwotCi0JCS8qIHVwZGF0ZSBoYXJk d2FyZSBtYXNrICovCi0JCWRzaV9jdHJsLT5pcnFfaW5mby5pcnFfc3RhdF9tYXNrIHw9IEJJVChp bnRyX2lkeCk7Ci0JCWRzaV9jdHJsLT5ody5vcHMuZW5hYmxlX3N0YXR1c19pbnRlcnJ1cHRzKCZk c2lfY3RybC0+aHcsCi0JCQkJZHNpX2N0cmwtPmlycV9pbmZvLmlycV9zdGF0X21hc2spOwotCX0K LQkrKyhkc2lfY3RybC0+aXJxX2luZm8uaXJxX3N0YXRfcmVmY291bnRbaW50cl9pZHhdKTsKLQot CWlmIChldmVudF9pbmZvKQotCQlkc2lfY3RybC0+aXJxX2luZm8uaXJxX3N0YXRfY2JbaW50cl9p ZHhdID0gKmV2ZW50X2luZm87Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkc2lfY3RybC0+ aXJxX2luZm8uaXJxX2xvY2ssIGZsYWdzKTsKLX0KLQotdm9pZCBkc2lfY3RybF9kaXNhYmxlX3N0 YXR1c19pbnRlcnJ1cHQoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJdWludDMyX3QgaW50 cl9pZHgpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghZHNpX2N0cmwgfHwgZHNp X2N0cmwtPmlycV9pbmZvLmlycV9udW0gPT0gLTEgfHwKLQkJCWludHJfaWR4ID49IERTSV9TVEFU VVNfSU5URVJSVVBUX0NPVU5UKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZHNp X2N0cmwtPmlycV9pbmZvLmlycV9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoZHNpX2N0cmwtPmlycV9p bmZvLmlycV9zdGF0X3JlZmNvdW50W2ludHJfaWR4XSkKLQkJaWYgKC0tKGRzaV9jdHJsLT5pcnFf aW5mby5pcnFfc3RhdF9yZWZjb3VudFtpbnRyX2lkeF0pID09IDApIHsKLQkJCWRzaV9jdHJsLT5p cnFfaW5mby5pcnFfc3RhdF9tYXNrICY9IH5CSVQoaW50cl9pZHgpOwotCQkJZHNpX2N0cmwtPmh3 Lm9wcy5lbmFibGVfc3RhdHVzX2ludGVycnVwdHMoJmRzaV9jdHJsLT5odywKLQkJCQkJZHNpX2N0 cmwtPmlycV9pbmZvLmlycV9zdGF0X21hc2spOwotCi0JCQkvKiBkb24ndCBuZWVkIGlycSBpZiBu byBsaW5lcyBhcmUgZW5hYmxlZCAqLwotCQkJaWYgKGRzaV9jdHJsLT5pcnFfaW5mby5pcnFfc3Rh dF9tYXNrID09IDApCi0JCQkJZGlzYWJsZV9pcnFfbm9zeW5jKGRzaV9jdHJsLT5pcnFfaW5mby5p cnFfbnVtKTsKLQkJfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHNpX2N0cmwtPmlycV9p bmZvLmlycV9sb2NrLCBmbGFncyk7Ci19Ci0KLWludCBkc2lfY3RybF9ob3N0X3RpbWluZ191cGRh dGUoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCkKLXsKLQlpZiAoIWRzaV9jdHJsKSB7Ci0JCXBy X2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAo ZHNpX2N0cmwtPmh3Lm9wcy5ob3N0X3NldHVwKQotCQlkc2lfY3RybC0+aHcub3BzLmhvc3Rfc2V0 dXAoJmRzaV9jdHJsLT5odywKLQkJCQkmZHNpX2N0cmwtPmhvc3RfY29uZmlnLmNvbW1vbl9jb25m aWcpOwotCi0JaWYgKGRzaV9jdHJsLT5ob3N0X2NvbmZpZy5wYW5lbF9tb2RlID09IERTSV9PUF9D TURfTU9ERSkgewotCQlpZiAoZHNpX2N0cmwtPmh3Lm9wcy5jbWRfZW5naW5lX3NldHVwKQotCQkJ ZHNpX2N0cmwtPmh3Lm9wcy5jbWRfZW5naW5lX3NldHVwKCZkc2lfY3RybC0+aHcsCi0JCQkJCSZk c2lfY3RybC0+aG9zdF9jb25maWcuY29tbW9uX2NvbmZpZywKLQkJCQkJJmRzaV9jdHJsLT5ob3N0 X2NvbmZpZy51LmNtZF9lbmdpbmUpOwotCi0JCWlmIChkc2lfY3RybC0+aHcub3BzLnNldHVwX2Nt ZF9zdHJlYW0pCi0JCQlkc2lfY3RybC0+aHcub3BzLnNldHVwX2NtZF9zdHJlYW0oJmRzaV9jdHJs LT5odywKLQkJCQkmZHNpX2N0cmwtPmhvc3RfY29uZmlnLnZpZGVvX3RpbWluZywKLQkJCQlkc2lf Y3RybC0+aG9zdF9jb25maWcudmlkZW9fdGltaW5nLmhfYWN0aXZlICogMywKLQkJCQkweDAsIE5V TEwpOwotCX0gZWxzZSB7Ci0JCXByX2VycigiaW52YWxpZCBwYW5lbCBtb2RlIGZvciByZXNvbHV0 aW9uIHN3aXRjaFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQot Ci0vKioKLSAqIGRzaV9jdHJsX2hvc3RfaW5pdCgpIC0gSW5pdGlhbGl6ZSBEU0kgaG9zdCBoYXJk d2FyZS4KLSAqIEBkc2lfY3RybDogICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqCi0g KiBJbml0aWFsaXplcyBEU0kgY29udHJvbGxlciBoYXJkd2FyZSB3aXRoIGhvc3QgY29uZmlndXJh dGlvbiBwcm92aWRlZCBieQotICogZHNpX2N0cmxfdXBkYXRlX2hvc3RfY29uZmlnKCkuIEluaXRp YWxpemF0aW9uIGNhbiBiZSBwZXJmb3JtZWQgb25seSBkdXJpbmcKLSAqIERTSV9DVFJMX1BPV0VS X0NPUkVfQ0xLX09OIHN0YXRlIGFuZCBhZnRlciB0aGUgUEhZIFNXIHJlc2V0IGhhcyBiZWVuCi0g KiBwZXJmb3JtZWQuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0 cmxfaG9zdF9pbml0KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpCi17Ci0JaW50IHJjID0gMDsK LQotCWlmICghZHNpX2N0cmwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwot CXJjID0gZHNpX2N0cmxfY2hlY2tfc3RhdGUoZHNpX2N0cmwsIERTSV9DVFJMX09QX0hPU1RfSU5J VCwgMHgxKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbRFNJXyVkXSBDb250cm9sbGVyIHN0YXRl IGNoZWNrIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwg cmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWRzaV9jdHJsLT5ody5vcHMuc2V0dXBfbGFuZV9t YXAoJmRzaV9jdHJsLT5odywKLQkJCQkJJmRzaV9jdHJsLT5ob3N0X2NvbmZpZy5sYW5lX21hcCk7 Ci0KLQlkc2lfY3RybC0+aHcub3BzLmhvc3Rfc2V0dXAoJmRzaV9jdHJsLT5odywKLQkJCQkgICAg JmRzaV9jdHJsLT5ob3N0X2NvbmZpZy5jb21tb25fY29uZmlnKTsKLQotCWlmIChkc2lfY3RybC0+ aG9zdF9jb25maWcucGFuZWxfbW9kZSA9PSBEU0lfT1BfQ01EX01PREUpIHsKLQkJZHNpX2N0cmwt Pmh3Lm9wcy5jbWRfZW5naW5lX3NldHVwKCZkc2lfY3RybC0+aHcsCi0JCQkJCSZkc2lfY3RybC0+ aG9zdF9jb25maWcuY29tbW9uX2NvbmZpZywKLQkJCQkJJmRzaV9jdHJsLT5ob3N0X2NvbmZpZy51 LmNtZF9lbmdpbmUpOwotCi0JCWRzaV9jdHJsLT5ody5vcHMuc2V0dXBfY21kX3N0cmVhbSgmZHNp X2N0cmwtPmh3LAotCQkJCSZkc2lfY3RybC0+aG9zdF9jb25maWcudmlkZW9fdGltaW5nLAotCQkJ CWRzaV9jdHJsLT5ob3N0X2NvbmZpZy52aWRlb190aW1pbmcuaF9hY3RpdmUgKiAzLAotCQkJCTB4 MCwKLQkJCQlOVUxMKTsKLQl9IGVsc2UgewotCQlkc2lfY3RybC0+aHcub3BzLnZpZGVvX2VuZ2lu ZV9zZXR1cCgmZHNpX2N0cmwtPmh3LAotCQkJCQkmZHNpX2N0cmwtPmhvc3RfY29uZmlnLmNvbW1v bl9jb25maWcsCi0JCQkJCSZkc2lfY3RybC0+aG9zdF9jb25maWcudS52aWRlb19lbmdpbmUpOwot CQlkc2lfY3RybC0+aHcub3BzLnNldF92aWRlb190aW1pbmcoJmRzaV9jdHJsLT5odywKLQkJCQkJ ICAmZHNpX2N0cmwtPmhvc3RfY29uZmlnLnZpZGVvX3RpbWluZyk7Ci0JfQotCi0JZHNpX2N0cmxf c2V0dXBfaXNyKGRzaV9jdHJsKTsKLQotCWRzaV9jdHJsLT5ody5vcHMuZW5hYmxlX3N0YXR1c19p bnRlcnJ1cHRzKCZkc2lfY3RybC0+aHcsIDB4MCk7Ci0JZHNpX2N0cmwtPmh3Lm9wcy5lbmFibGVf ZXJyb3JfaW50ZXJydXB0cygmZHNpX2N0cmwtPmh3LCAweDApOwotCi0JcHJfZGVidWcoIltEU0lf JWRdSG9zdCBpbml0aWFsaXphdGlvbiBjb21wbGV0ZVxuIiwKLQkJZHNpX2N0cmwtPmNlbGxfaW5k ZXgpOwotCWRzaV9jdHJsX3VwZGF0ZV9zdGF0ZShkc2lfY3RybCwgRFNJX0NUUkxfT1BfSE9TVF9J TklULCAweDEpOwotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsK LQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfY3RybF9zb2Z0X3Jlc2V0KHN0cnVjdCBkc2lfY3Ry bCAqZHNpX2N0cmwpCi17Ci0JaWYgKCFkc2lfY3RybCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlt dXRleF9sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQlkc2lfY3RybC0+aHcub3BzLnNvZnRf cmVzZXQoJmRzaV9jdHJsLT5odyk7Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2Nr KTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXVNvZnQgcmVzZXQgY29tcGxldGVcbiIsIGRzaV9jdHJs LT5jZWxsX2luZGV4KTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9ob3N0X2Rl aW5pdCgpIC0gRGUtSW5pdGlhbGl6ZSBEU0kgaG9zdCBoYXJkd2FyZS4KLSAqIEBkc2lfY3RybDog ICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqCi0gKiBEZS1pbml0aWFsaXplcyBEU0kg Y29udHJvbGxlciBoYXJkd2FyZS4gSXQgY2FuIGJlIHBlcmZvcm1lZCBvbmx5IGR1cmluZwotICog RFNJX0NUUkxfUE9XRVJfQ09SRV9DTEtfT04gc3RhdGUgYWZ0ZXIgTElOSyBjbG9ja3MgaGF2ZSBi ZWVuIHR1cm5lZCBvZmYuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNp X2N0cmxfaG9zdF9kZWluaXQoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCkKLXsKLQlpbnQgcmMg PSAwOwotCi0JaWYgKCFkc2lfY3RybCkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZHNpX2N0cmwtPmN0cmxfbG9j ayk7Ci0KLQlfZHNpX2N0cmxfZGVzdHJveV9pc3IoZHNpX2N0cmwpOwotCi0JcmMgPSBkc2lfY3Ry bF9jaGVja19zdGF0ZShkc2lfY3RybCwgRFNJX0NUUkxfT1BfSE9TVF9JTklULCAweDApOwotCWlm IChyYykgewotCQlwcl9lcnIoIltEU0lfJWRdIENvbnRyb2xsZXIgc3RhdGUgY2hlY2sgZmFpbGVk LCByYz0lZFxuIiwKLQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0JCXByX2Vy cigiZHJpdmVyIHN0YXRlIGNoZWNrIGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJv cjsKLQl9Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gSG9zdCBkZWluaXRpemF0aW9uIGNvbXBsZXRl XG4iLAotCQlkc2lfY3RybC0+Y2VsbF9pbmRleCk7Ci0JZHNpX2N0cmxfdXBkYXRlX3N0YXRlKGRz aV9jdHJsLCBEU0lfQ1RSTF9PUF9IT1NUX0lOSVQsIDB4MCk7Ci1lcnJvcjoKLQltdXRleF91bmxv Y2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lf Y3RybF91cGRhdGVfaG9zdF9jb25maWcoKSAtIHVwZGF0ZSBkc2kgaG9zdCBjb25maWd1cmF0aW9u Ci0gKiBAZHNpX2N0cmw6ICAgICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqIEBjb25m aWc6ICAgICAgICAgICAgRFNJIGhvc3QgY29uZmlndXJhdGlvbi4KLSAqIEBmbGFnczogICAgICAg ICAgICAgZHNpX21vZGVfZmxhZ3MgbW9kaWZ5aW5nIHRoZSBiZWhhdmlvcgotICoKLSAqIFVwZGF0 ZXMgZHJpdmVyIHdpdGggbmV3IEhvc3QgY29uZmlndXJhdGlvbiB0byB1c2UgZm9yIGhvc3QgaW5p dGlhbGl6YXRpb24uCi0gKiBUaGlzIGZ1bmN0aW9uIGNhbGwgd2lsbCBvbmx5IHVwZGF0ZSB0aGUg c29mdHdhcmUgY29udGV4dC4gVGhlIHN0b3JlZAotICogY29uZmlndXJhdGlvbiBpbmZvcm1hdGlv biB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgaG9zdCBpcyBpbml0aWFsaXplZC4KLSAqCi0gKiBSZXR1 cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF91cGRhdGVfaG9zdF9jb25maWcoc3Ry dWN0IGRzaV9jdHJsICpjdHJsLAotCQkJCXN0cnVjdCBkc2lfaG9zdF9jb25maWcgKmNvbmZpZywK LQkJCQlpbnQgZmxhZ3MsIHZvaWQgKmNsa19oYW5kbGUpCi17Ci0JaW50IHJjID0gMDsKLQotCWlm ICghY3RybCB8fCAhY29uZmlnKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQly ZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZjdHJsLT5jdHJsX2xvY2spOwotCi0J cmMgPSBkc2lfY3RybF92YWxpZGF0ZV9wYW5lbF9pbmZvKGN0cmwsIGNvbmZpZyk7Ci0JaWYgKHJj KSB7Ci0JCXByX2VycigicGFuZWwgdmFsaWRhdGlvbiBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Ci0J CWdvdG8gZXJyb3I7Ci0JfQotCi0JaWYgKCEoZmxhZ3MgJiAoRFNJX01PREVfRkxBR19TRUFNTEVT UyB8IERTSV9NT0RFX0ZMQUdfVlJSKSkpIHsKLQkJcmMgPSBkc2lfY3RybF91cGRhdGVfbGlua19m cmVxcyhjdHJsLCBjb25maWcsIGNsa19oYW5kbGUpOwotCQlpZiAocmMpIHsKLQkJCXByX2Vycigi WyVzXSBmYWlsZWQgdG8gdXBkYXRlIGxpbmsgZnJlcXVlbmNpZXMsIHJjPSVkXG4iLAotCQkJICAg ICAgIGN0cmwtPm5hbWUsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLQlwcl9kZWJ1 ZygiW0RTSV8lZF1Ib3N0IGNvbmZpZyB1cGRhdGVkXG4iLCBjdHJsLT5jZWxsX2luZGV4KTsKLQlt ZW1jcHkoJmN0cmwtPmhvc3RfY29uZmlnLCBjb25maWcsIHNpemVvZihjdHJsLT5ob3N0X2NvbmZp ZykpOwotCWN0cmwtPm1vZGVfYm91bmRzLnggPSBjdHJsLT5ob3N0X2NvbmZpZy52aWRlb190aW1p bmcuaF9hY3RpdmUgKgotCQkJY3RybC0+aG9yaXpfaW5kZXg7Ci0JY3RybC0+bW9kZV9ib3VuZHMu eSA9IDA7Ci0JY3RybC0+bW9kZV9ib3VuZHMudyA9IGN0cmwtPmhvc3RfY29uZmlnLnZpZGVvX3Rp bWluZy5oX2FjdGl2ZTsKLQljdHJsLT5tb2RlX2JvdW5kcy5oID0gY3RybC0+aG9zdF9jb25maWcu dmlkZW9fdGltaW5nLnZfYWN0aXZlOwotCW1lbWNweSgmY3RybC0+cm9pLCAmY3RybC0+bW9kZV9i b3VuZHMsIHNpemVvZihjdHJsLT5tb2RlX2JvdW5kcykpOwotCWN0cmwtPnJvaS54ID0gMDsKLWVy cm9yOgotCW11dGV4X3VubG9jaygmY3RybC0+Y3RybF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0K LS8qKgotICogZHNpX2N0cmxfdmFsaWRhdGVfdGltaW5nKCkgLSB2YWxpZGF0ZSBhIHZpZGVvIHRp bWluZyBjb25maWd1cmF0aW9uCi0gKiBAZHNpX2N0cmw6ICAgICAgIERTSSBjb250cm9sbGVyIGhh bmRsZS4KLSAqIEB0aW1pbmc6ICAgICAgICAgUG9pbnRlciB0byB0aW1pbmcgZGF0YS4KLSAqCi0g KiBEcml2ZXIgd2lsbCB2YWxpZGF0ZSBpZiB0aGUgdGltaW5nIGNvbmZpZ3VyYXRpb24gaXMgc3Vw cG9ydGVkIG9uIHRoZQotICogY29udHJvbGxlciBoYXJkd2FyZS4KLSAqCi0gKiBSZXR1cm46IGVy cm9yIGNvZGUgaWYgdGltaW5nIGlzIG5vdCBzdXBwb3J0ZWQuCi0gKi8KLWludCBkc2lfY3RybF92 YWxpZGF0ZV90aW1pbmcoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJCSAgICAgc3RydWN0 IGRzaV9tb2RlX2luZm8gKm1vZGUpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghZHNpX2N0cmwg fHwgIW1vZGUpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlO VkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCW11dGV4X3Vu bG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICog ZHNpX2N0cmxfY21kX3RyYW5zZmVyKCkgLSBUcmFuc2ZlciBjb21tYW5kcyBvbiBEU0kgbGluawot ICogQGRzaV9jdHJsOiAgICAgICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAbXNn OiAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgdG8gdHJhbnNmZXIgb24gRFNJIGxpbmsuCi0gKiBA ZmxhZ3M6ICAgICAgICAgICAgICAgIE1vZGlmaWVycyBmb3IgbWVzc2FnZSB0cmFuc2Zlci4KLSAq Ci0gKiBDb21tYW5kIHRyYW5zZmVyIGNhbiBiZSBkb25lIG9ubHkgd2hlbiBjb21tYW5kIGVuZ2lu ZSBpcyBlbmFibGVkLiBUaGUKLSAqIHRyYW5zZmVyIEFQSSB3aWxsIGJsb2NrIHVudGlsIGVpdGhl ciB0aGUgY29tbWFuZCB0cmFuc2ZlciBmaW5pc2hlcyBvcgotICogdGhlIHRpbWVvdXQgdmFsdWUg aXMgcmVhY2hlZC4gSWYgdGhlIHRyaWdnZXIgaXMgZGVmZXJyZWQsIGl0IHdpbGwgcmV0dXJuCi0g KiB3aXRob3V0IHRyaWdnZXJpbmcgdGhlIHRyYW5zZmVyLiBDb21tYW5kIHBhcmFtZXRlcnMgYXJl IHByb2dyYW1tZWQgdG8KLSAqIGhhcmR3YXJlLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4K LSAqLwotaW50IGRzaV9jdHJsX2NtZF90cmFuc2ZlcihzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJs LAotCQkJICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2csCi0JCQkgIHUzMiBmbGFncykK LXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkc2lfY3RybCB8fCAhbXNnKSB7Ci0JCXByX2Vycigi SW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2Nr KCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQotCXJjID0gZHNpX2N0cmxfY2hlY2tfc3RhdGUoZHNp X2N0cmwsIERTSV9DVFJMX09QX0NNRF9UWCwgMHgwKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJb RFNJXyVkXSBDb250cm9sbGVyIHN0YXRlIGNoZWNrIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAg ICBkc2lfY3RybC0+Y2VsbF9pbmRleCwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmIChm bGFncyAmIERTSV9DVFJMX0NNRF9SRUFEKSB7Ci0JCXJjID0gZHNpX21lc3NhZ2VfcngoZHNpX2N0 cmwsIG1zZywgZmxhZ3MpOwotCQlpZiAocmMpCi0JCQlwcl9lcnIoInJlYWQgbWVzc2FnZSBmYWls ZWQsIHJjPSVkXG4iLCByYyk7Ci0JfSBlbHNlIHsKLQkJcmMgPSBkc2lfbWVzc2FnZV90eChkc2lf Y3RybCwgbXNnLCBmbGFncyk7Ci0JCWlmIChyYykKLQkJCXByX2VycigiY29tbWFuZCBtc2cgdHJh bnNmZXIgZmFpbGVkLCByYyA9ICVkXG4iLCByYyk7Ci0JfQotCi0JZHNpX2N0cmxfdXBkYXRlX3N0 YXRlKGRzaV9jdHJsLCBEU0lfQ1RSTF9PUF9DTURfVFgsIDB4MCk7Ci0KLWVycm9yOgotCW11dGV4 X3VubG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAq IGRzaV9jdHJsX2NtZF90eF90cmlnZ2VyKCkgLSBUcmlnZ2VyIGEgZGVmZXJyZWQgY29tbWFuZC4K LSAqIEBkc2lfY3RybDogICAgICAgICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqIEBm bGFnczogICAgICAgICAgICAgICAgIE1vZGlmaWVycy4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNv ZGUuCi0gKi8KLWludCBkc2lfY3RybF9jbWRfdHhfdHJpZ2dlcihzdHJ1Y3QgZHNpX2N0cmwgKmRz aV9jdHJsLCB1MzIgZmxhZ3MpCi17Ci0JaW50IHJjID0gMCwgcmV0ID0gMDsKLQl1MzIgc3RhdHVz ID0gMDsKLQl1MzIgbWFzayA9IChEU0lfQ01EX01PREVfRE1BX0RPTkUpOwotCi0JaWYgKCFkc2lf Y3RybCkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0JfQotCi0JbXV0ZXhfbG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0KLQlpZiAoIShmbGFn cyAmIERTSV9DVFJMX0NNRF9CUk9BRENBU1RfTUFTVEVSKSkKLQkJZHNpX2N0cmwtPmh3Lm9wcy50 cmlnZ2VyX2NvbW1hbmRfZG1hKCZkc2lfY3RybC0+aHcpOwotCi0JaWYgKChmbGFncyAmIERTSV9D VFJMX0NNRF9CUk9BRENBU1QpICYmCi0JCShmbGFncyAmIERTSV9DVFJMX0NNRF9CUk9BRENBU1Rf TUFTVEVSKSkgewotCQlkc2lfY3RybF9lbmFibGVfc3RhdHVzX2ludGVycnVwdChkc2lfY3RybCwK LQkJCQkJRFNJX1NJTlRfQ01EX01PREVfRE1BX0RPTkUsIE5VTEwpOwotCQlyZWluaXRfY29tcGxl dGlvbigmZHNpX2N0cmwtPmlycV9pbmZvLmNtZF9kbWFfZG9uZSk7Ci0KLQkJLyogdHJpZ2dlciBj b21tYW5kICovCi0JCWRzaV9jdHJsLT5ody5vcHMudHJpZ2dlcl9jb21tYW5kX2RtYSgmZHNpX2N0 cmwtPmh3KTsKLQotCQlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoCi0JCQkJJmRz aV9jdHJsLT5pcnFfaW5mby5jbWRfZG1hX2RvbmUsCi0JCQkJbXNlY3NfdG9famlmZmllcyhEU0lf Q1RSTF9UWF9UT19NUykpOwotCi0JCWlmIChyZXQgPT0gMCkgewotCQkJc3RhdHVzID0gZHNpX2N0 cmwtPmh3Lm9wcy5nZXRfaW50ZXJydXB0X3N0YXR1cygKLQkJCQkJCQkJJmRzaV9jdHJsLT5odyk7 Ci0JCQlpZiAoc3RhdHVzICYgbWFzaykgewotCQkJCXN0YXR1cyB8PSAoRFNJX0NNRF9NT0RFX0RN QV9ET05FIHwKLQkJCQkJCURTSV9CVEFfRE9ORSk7Ci0JCQkJZHNpX2N0cmwtPmh3Lm9wcy5jbGVh cl9pbnRlcnJ1cHRfc3RhdHVzKAotCQkJCQkJCQkmZHNpX2N0cmwtPmh3LAotCQkJCQkJCQlzdGF0 dXMpOwotCQkJCWRzaV9jdHJsX2Rpc2FibGVfc3RhdHVzX2ludGVycnVwdChkc2lfY3RybCwKLQkJ CQkJCURTSV9TSU5UX0NNRF9NT0RFX0RNQV9ET05FKTsKLQkJCQljb21wbGV0ZV9hbGwoJmRzaV9j dHJsLT5pcnFfaW5mby5jbWRfZG1hX2RvbmUpOwotCQkJCXByX3dhcm4oImRtYV90eCBkb25lIGJ1 dCBpcnEgbm90IHRyaWdnZXJlZFxuIik7Ci0JCQl9IGVsc2UgewotCQkJCXJjID0gLUVUSU1FRE9V VDsKLQkJCQlkc2lfY3RybF9kaXNhYmxlX3N0YXR1c19pbnRlcnJ1cHQoZHNpX2N0cmwsCi0JCQkJ CQlEU0lfU0lOVF9DTURfTU9ERV9ETUFfRE9ORSk7Ci0JCQkJcHJfZXJyKCJbRFNJXyVkXUNvbW1h bmQgdHJhbnNmZXIgZmFpbGVkXG4iLAotCQkJCQkJZHNpX2N0cmwtPmNlbGxfaW5kZXgpOwotCQkJ fQotCQl9Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQlyZXR1 cm4gcmM7Ci19Ci0KLS8qKgotICogX2RzaV9jdHJsX2NhY2hlX21pc3IgLSBDYWNoZSBmcmFtZSBN SVNSIHZhbHVlCi0gKiBAZHNpX2N0cmw6IFBvaW50ZXIgdG8gYXNzb2NpYXRlZCBkc2lfY3RybCBz dHJ1Y3R1cmUKLSAqLwotc3RhdGljIHZvaWQgX2RzaV9jdHJsX2NhY2hlX21pc3Ioc3RydWN0IGRz aV9jdHJsICpkc2lfY3RybCkKLXsKLQl1MzIgbWlzcjsKLQotCWlmICghZHNpX2N0cmwgfHwgIWRz aV9jdHJsLT5ody5vcHMuY29sbGVjdF9taXNyKQotCQlyZXR1cm47Ci0KLQltaXNyID0gZHNpX2N0 cmwtPmh3Lm9wcy5jb2xsZWN0X21pc3IoJmRzaV9jdHJsLT5odywKLQkJCQlkc2lfY3RybC0+aG9z dF9jb25maWcucGFuZWxfbW9kZSk7Ci0KLQlpZiAobWlzcikKLQkJZHNpX2N0cmwtPm1pc3JfY2Fj aGUgPSBtaXNyOwotCi0JcHJfZGVidWcoIkRTSV8lZCBtaXNyX2NhY2hlID0gJXhcbiIsIGRzaV9j dHJsLT5jZWxsX2luZGV4LAotCQlkc2lfY3RybC0+bWlzcl9jYWNoZSk7Ci0KLX0KLQotLyoqCi0g KiBkc2lfY3RybF9zZXRfcG93ZXJfc3RhdGUoKSAtIHNldCBwb3dlciBzdGF0ZSBmb3IgZHNpIGNv bnRyb2xsZXIKLSAqIEBkc2lfY3RybDogICAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgot ICogQHN0YXRlOiAgICAgICAgICAgICBQb3dlciBzdGF0ZS4KLSAqCi0gKiBTZXQgcG93ZXIgc3Rh dGUgZm9yIERTSSBjb250cm9sbGVyLiBQb3dlciBzdGF0ZSBjYW4gYmUgY2hhbmdlZCBvbmx5IHdo ZW4KLSAqIENvbnRyb2xsZXIsIFZpZGVvIGFuZCBDb21tYW5kIGVuZ2luZXMgYXJlIHR1cm5lZCBv ZmYuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfc2V0X3Bv d2VyX3N0YXRlKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCQkgICAgIGVudW0gZHNpX3Bv d2VyX3N0YXRlIHN0YXRlKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRzaV9jdHJsIHx8IChz dGF0ZSA+PSBEU0lfQ1RSTF9QT1dFUl9NQVgpKSB7Ci0JCXByX2VycigiSW52YWxpZCBQYXJhbXNc biIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkc2lfY3RybC0+Y3Ry bF9sb2NrKTsKLQotCXJjID0gZHNpX2N0cmxfY2hlY2tfc3RhdGUoZHNpX2N0cmwsIERTSV9DVFJM X09QX1BPV0VSX1NUQVRFX0NIQU5HRSwKLQkJCQkgIHN0YXRlKTsKLQlpZiAocmMpIHsKLQkJcHJf ZXJyKCJbRFNJXyVkXSBDb250cm9sbGVyIHN0YXRlIGNoZWNrIGZhaWxlZCwgcmM9JWRcbiIsCi0J CSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQot CWlmIChzdGF0ZSA9PSBEU0lfQ1RSTF9QT1dFUl9WUkVHX09OKSB7Ci0JCXJjID0gZHNpX2N0cmxf ZW5hYmxlX3N1cHBsaWVzKGRzaV9jdHJsLCB0cnVlKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIo IlslZF1mYWlsZWQgdG8gZW5hYmxlIHZvbHRhZ2Ugc3VwcGxpZXMsIHJjPSVkXG4iLAotCQkJICAg ICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfSBl bHNlIGlmIChzdGF0ZSA9PSBEU0lfQ1RSTF9QT1dFUl9WUkVHX09GRikgewotCQlpZiAoZHNpX2N0 cmwtPm1pc3JfZW5hYmxlKQotCQkJX2RzaV9jdHJsX2NhY2hlX21pc3IoZHNpX2N0cmwpOwotCi0J CXJjID0gZHNpX2N0cmxfZW5hYmxlX3N1cHBsaWVzKGRzaV9jdHJsLCBmYWxzZSk7Ci0JCWlmIChy YykgewotCQkJcHJfZXJyKCJbJWRdZmFpbGVkIHRvIGRpc2FibGUgdnJlZyBzdXBwbGllcywgcmM9 JWRcbiIsCi0JCQkgICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIHJjKTsKLQkJCWdvdG8gZXJy b3I7Ci0JCX0KLQl9Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gUG93ZXIgc3RhdGUgdXBkYXRlZCB0 byAlZFxuIiwgZHNpX2N0cmwtPmNlbGxfaW5kZXgsCi0JCSBzdGF0ZSk7Ci0JZHNpX2N0cmxfdXBk YXRlX3N0YXRlKGRzaV9jdHJsLCBEU0lfQ1RSTF9PUF9QT1dFUl9TVEFURV9DSEFOR0UsIHN0YXRl KTsKLWVycm9yOgotCW11dGV4X3VubG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0JcmV0dXJu IHJjOwotfQotCi0vKioKLSAqIGRzaV9jdHJsX3NldF90cGdfc3RhdGUoKSAtIGVuYWJsZS9kaXNh YmxlIHRlc3QgcGF0dGVybiBvbiB0aGUgY29udHJvbGxlcgotICogQGRzaV9jdHJsOiAgICAgICAg ICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAb246ICAgICAgICAgICAgICAgIGVuYWJsZS9k aXNhYmxlIHRlc3QgcGF0dGVybi4KLSAqCi0gKiBUZXN0IHBhdHRlcm4gY2FuIGJlIGVuYWJsZWQg b25seSBhZnRlciBWaWRlbyBlbmdpbmUgKGZvciB2aWRlbyBtb2RlIHBhbmVscykKLSAqIG9yIGNv bW1hbmQgZW5naW5lIChmb3IgY21kIG1vZGUgcGFuZWxzKSBpcyBlbmFibGVkLgotICoKLSAqIFJl dHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJsX3NldF90cGdfc3RhdGUoc3RydWN0 IGRzaV9jdHJsICpkc2lfY3RybCwgYm9vbCBvbikKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFk c2lfY3RybCkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0KLQlyYyA9IGRz aV9jdHJsX2NoZWNrX3N0YXRlKGRzaV9jdHJsLCBEU0lfQ1RSTF9PUF9UUEcsIG9uKTsKLQlpZiAo cmMpIHsKLQkJcHJfZXJyKCJbRFNJXyVkXSBDb250cm9sbGVyIHN0YXRlIGNoZWNrIGZhaWxlZCwg cmM9JWRcbiIsCi0JCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwgcmMpOwotCQlnb3RvIGVy cm9yOwotCX0KLQotCWlmIChvbikgewotCQlpZiAoZHNpX2N0cmwtPmhvc3RfY29uZmlnLnBhbmVs X21vZGUgPT0gRFNJX09QX1ZJREVPX01PREUpIHsKLQkJCWRzaV9jdHJsLT5ody5vcHMudmlkZW9f dGVzdF9wYXR0ZXJuX3NldHVwKCZkc2lfY3RybC0+aHcsCi0JCQkJCQkJICBEU0lfVEVTVF9QQVRU RVJOX0lOQywKLQkJCQkJCQkgIDB4RkZGRik7Ci0JCX0gZWxzZSB7Ci0JCQlkc2lfY3RybC0+aHcu b3BzLmNtZF90ZXN0X3BhdHRlcm5fc2V0dXAoCi0JCQkJCQkJJmRzaV9jdHJsLT5odywKLQkJCQkJ CQlEU0lfVEVTVF9QQVRURVJOX0lOQywKLQkJCQkJCQkweEZGRkYsCi0JCQkJCQkJMHgwKTsKLQkJ fQotCX0KLQlkc2lfY3RybC0+aHcub3BzLnRlc3RfcGF0dGVybl9lbmFibGUoJmRzaV9jdHJsLT5o dywgb24pOwotCi0JcHJfZGVidWcoIltEU0lfJWRdU2V0IHRlc3QgcGF0dGVybiBzdGF0ZT0lZFxu IiwKLQkJZHNpX2N0cmwtPmNlbGxfaW5kZXgsIG9uKTsKLQlkc2lfY3RybF91cGRhdGVfc3RhdGUo ZHNpX2N0cmwsIERTSV9DVFJMX09QX1RQRywgb24pOwotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZk c2lfY3RybC0+Y3RybF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogZHNpX2N0cmxf c2V0X2hvc3RfZW5naW5lX3N0YXRlKCkgLSBzZXQgaG9zdCBlbmdpbmUgc3RhdGUKLSAqIEBkc2lf Y3RybDogICAgICAgICAgICBEU0kgQ29udHJvbGxlciBoYW5kbGUuCi0gKiBAc3RhdGU6ICAgICAg ICAgICAgICAgRW5naW5lIHN0YXRlLgotICoKLSAqIEhvc3QgZW5naW5lIHN0YXRlIGNhbiBiZSBt b2RpZmllZCBvbmx5IHdoZW4gRFNJIGNvbnRyb2xsZXIgcG93ZXIgc3RhdGUgaXMKLSAqIHNldCB0 byBEU0lfQ1RSTF9QT1dFUl9MSU5LX0NMS19PTiBhbmQgY21kLCB2aWRlbyBlbmdpbmVzIGFyZSBk aXNhYmxlZC4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9z ZXRfaG9zdF9lbmdpbmVfc3RhdGUoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJCQkgICBl bnVtIGRzaV9lbmdpbmVfc3RhdGUgc3RhdGUpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghZHNp X2N0cmwgfHwgKHN0YXRlID49IERTSV9DVFJMX0VOR0lORV9NQVgpKSB7Ci0JCXByX2VycigiSW52 YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZk c2lfY3RybC0+Y3RybF9sb2NrKTsKLQotCXJjID0gZHNpX2N0cmxfY2hlY2tfc3RhdGUoZHNpX2N0 cmwsIERTSV9DVFJMX09QX0hPU1RfRU5HSU5FLCBzdGF0ZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vy cigiW0RTSV8lZF0gQ29udHJvbGxlciBzdGF0ZSBjaGVjayBmYWlsZWQsIHJjPSVkXG4iLAotCQkg ICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlp ZiAoc3RhdGUgPT0gRFNJX0NUUkxfRU5HSU5FX09OKQotCQlkc2lfY3RybC0+aHcub3BzLmN0cmxf ZW4oJmRzaV9jdHJsLT5odywgdHJ1ZSk7Ci0JZWxzZQotCQlkc2lfY3RybC0+aHcub3BzLmN0cmxf ZW4oJmRzaV9jdHJsLT5odywgZmFsc2UpOwotCi0JcHJfZGVidWcoIltEU0lfJWRdIFNldCBob3N0 IGVuZ2luZSBzdGF0ZSA9ICVkXG4iLCBkc2lfY3RybC0+Y2VsbF9pbmRleCwKLQkJIHN0YXRlKTsK LQlkc2lfY3RybF91cGRhdGVfc3RhdGUoZHNpX2N0cmwsIERTSV9DVFJMX09QX0hPU1RfRU5HSU5F LCBzdGF0ZSk7Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwot CXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9zZXRfY21kX2VuZ2luZV9zdGF0ZSgp IC0gc2V0IGNvbW1hbmQgZW5naW5lIHN0YXRlCi0gKiBAZHNpX2N0cmw6ICAgICAgICAgICAgRFNJ IENvbnRyb2xsZXIgaGFuZGxlLgotICogQHN0YXRlOiAgICAgICAgICAgICAgIEVuZ2luZSBzdGF0 ZS4KLSAqCi0gKiBDb21tYW5kIGVuZ2luZSBzdGF0ZSBjYW4gYmUgbW9kaWZpZWQgb25seSB3aGVu IERTSSBjb250cm9sbGVyIHBvd2VyIHN0YXRlIGlzCi0gKiBzZXQgdG8gRFNJX0NUUkxfUE9XRVJf TElOS19DTEtfT04uCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0 cmxfc2V0X2NtZF9lbmdpbmVfc3RhdGUoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJCQkg IGVudW0gZHNpX2VuZ2luZV9zdGF0ZSBzdGF0ZSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFk c2lfY3RybCB8fCAoc3RhdGUgPj0gRFNJX0NUUkxfRU5HSU5FX01BWCkpIHsKLQkJcHJfZXJyKCJJ bnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2so JmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCi0JcmMgPSBkc2lfY3RybF9jaGVja19zdGF0ZShkc2lf Y3RybCwgRFNJX0NUUkxfT1BfQ01EX0VOR0lORSwgc3RhdGUpOwotCWlmIChyYykgewotCQlwcl9l cnIoIltEU0lfJWRdIENvbnRyb2xsZXIgc3RhdGUgY2hlY2sgZmFpbGVkLCByYz0lZFxuIiwKLQkJ ICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0J aWYgKHN0YXRlID09IERTSV9DVFJMX0VOR0lORV9PTikKLQkJZHNpX2N0cmwtPmh3Lm9wcy5jbWRf ZW5naW5lX2VuKCZkc2lfY3RybC0+aHcsIHRydWUpOwotCWVsc2UKLQkJZHNpX2N0cmwtPmh3Lm9w cy5jbWRfZW5naW5lX2VuKCZkc2lfY3RybC0+aHcsIGZhbHNlKTsKLQotCXByX2RlYnVnKCJbRFNJ XyVkXSBTZXQgY21kIGVuZ2luZSBzdGF0ZSA9ICVkXG4iLCBkc2lfY3RybC0+Y2VsbF9pbmRleCwK LQkJIHN0YXRlKTsKLQlkc2lfY3RybF91cGRhdGVfc3RhdGUoZHNpX2N0cmwsIERTSV9DVFJMX09Q X0NNRF9FTkdJTkUsIHN0YXRlKTsKLWVycm9yOgotCW11dGV4X3VubG9jaygmZHNpX2N0cmwtPmN0 cmxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGRzaV9jdHJsX3NldF92aWRfZW5n aW5lX3N0YXRlKCkgLSBzZXQgdmlkZW8gZW5naW5lIHN0YXRlCi0gKiBAZHNpX2N0cmw6ICAgICAg ICAgICAgRFNJIENvbnRyb2xsZXIgaGFuZGxlLgotICogQHN0YXRlOiAgICAgICAgICAgICAgIEVu Z2luZSBzdGF0ZS4KLSAqCi0gKiBWaWRlbyBlbmdpbmUgc3RhdGUgY2FuIGJlIG1vZGlmaWVkIG9u bHkgd2hlbiBEU0kgY29udHJvbGxlciBwb3dlciBzdGF0ZSBpcwotICogc2V0IHRvIERTSV9DVFJM X1BPV0VSX0xJTktfQ0xLX09OLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50 IGRzaV9jdHJsX3NldF92aWRfZW5naW5lX3N0YXRlKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmws Ci0JCQkJICBlbnVtIGRzaV9lbmdpbmVfc3RhdGUgc3RhdGUpCi17Ci0JaW50IHJjID0gMDsKLQli b29sIG9uOwotCi0JaWYgKCFkc2lfY3RybCB8fCAoc3RhdGUgPj0gRFNJX0NUUkxfRU5HSU5FX01B WCkpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwot CX0KLQotCW11dGV4X2xvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCi0JcmMgPSBkc2lfY3Ry bF9jaGVja19zdGF0ZShkc2lfY3RybCwgRFNJX0NUUkxfT1BfVklEX0VOR0lORSwgc3RhdGUpOwot CWlmIChyYykgewotCQlwcl9lcnIoIltEU0lfJWRdIENvbnRyb2xsZXIgc3RhdGUgY2hlY2sgZmFp bGVkLCByYz0lZFxuIiwKLQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0JCWdv dG8gZXJyb3I7Ci0JfQotCi0Jb24gPSAoc3RhdGUgPT0gRFNJX0NUUkxfRU5HSU5FX09OKSA/IHRy dWUgOiBmYWxzZTsKLQlkc2lfY3RybC0+aHcub3BzLnZpZGVvX2VuZ2luZV9lbigmZHNpX2N0cmwt Pmh3LCBvbik7Ci0KLQkvKiBwZXJmb3JtIGEgcmVzZXQgd2hlbiB0dXJuaW5nIG9mZiB2aWRlbyBl bmdpbmUgKi8KLQlpZiAoIW9uKQotCQlkc2lfY3RybC0+aHcub3BzLnNvZnRfcmVzZXQoJmRzaV9j dHJsLT5odyk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gU2V0IHZpZGVvIGVuZ2luZSBzdGF0ZSA9 ICVkXG4iLCBkc2lfY3RybC0+Y2VsbF9pbmRleCwKLQkJIHN0YXRlKTsKLQlkc2lfY3RybF91cGRh dGVfc3RhdGUoZHNpX2N0cmwsIERTSV9DVFJMX09QX1ZJRF9FTkdJTkUsIHN0YXRlKTsKLWVycm9y OgotCW11dGV4X3VubG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQot Ci0vKioKLSAqIGRzaV9jdHJsX3NldF91bHBzKCkgLSBzZXQgVUxQUyBzdGF0ZSBmb3IgRFNJIGxh bmVzLgotICogQGRzaV9jdHJsOgkJRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICogQGVuYWJsZToJ CWVuYWJsZS9kaXNhYmxlIFVMUFMuCi0gKgotICogVUxQUyBjYW4gYmUgZW5hYmxlZC9kaXNhYmxl ZCBhZnRlciBEU0kgaG9zdCBlbmdpbmUgaXMgdHVybmVkIG9uLgotICoKLSAqIFJldHVybjogZXJy b3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJsX3NldF91bHBzKHN0cnVjdCBkc2lfY3RybCAqZHNp X2N0cmwsIGJvb2wgZW5hYmxlKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRzaV9jdHJsKSB7 Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0K LQltdXRleF9sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQotCWlmIChlbmFibGUpCi0JCXJj ID0gZHNpX2VuYWJsZV91bHBzKGRzaV9jdHJsKTsKLQllbHNlCi0JCXJjID0gZHNpX2Rpc2FibGVf dWxwcyhkc2lfY3RybCk7Ci0KLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbRFNJXyVkXSBVbHBzIHN0 YXRlIGNoYW5nZSglZCkgZmFpbGVkLCByYz0lZFxuIiwKLQkJCWRzaV9jdHJsLT5jZWxsX2luZGV4 LCBlbmFibGUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JcHJfZGVidWcoIltEU0lfJWRdIFVM UFMgc3RhdGUgPSAlZFxuIiwgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIGVuYWJsZSk7Ci0KLWVycm9y OgotCW11dGV4X3VubG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQot Ci0vKioKLSAqIGRzaV9jdHJsX3NldF9jbGFtcF9zdGF0ZSgpIC0gc2V0IGNsYW1wIHN0YXRlIGZv ciBEU0kgcGh5Ci0gKiBAZHNpX2N0cmw6ICAgICAgICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRs ZS4KLSAqIEBlbmFibGU6ICAgICAgICAgICAgICAgZW5hYmxlL2Rpc2FibGUgY2xhbXBpbmcuCi0g KgotICogQ2xhbXBzIGNhbiBiZSBlbmFibGVkL2Rpc2FibGVkIHdoaWxlIERTSSBjb250cm9sbGVy IGlzIHN0aWxsIHR1cm5lZCBvbi4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWlu dCBkc2lfY3RybF9zZXRfY2xhbXBfc3RhdGUoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJ Ym9vbCBlbmFibGUsIGJvb2wgdWxwc19lbmFibGVkKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAo IWRzaV9jdHJsKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci0KLQlpZiAoIWRzaV9jdHJsLT5ody5vcHMuY2xhbXBfZW5hYmxlIHx8Ci0JCQkh ZHNpX2N0cmwtPmh3Lm9wcy5jbGFtcF9kaXNhYmxlKSB7Ci0JCXByX2RlYnVnKCJObyBjbGFtcCBj b250cm9sIGZvciBEU0kgY29udHJvbGxlclxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCW11dGV4 X2xvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCi0JcmMgPSBkc2lfZW5hYmxlX2lvX2NsYW1w KGRzaV9jdHJsLCBlbmFibGUsIHVscHNfZW5hYmxlZCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vycigi W0RTSV8lZF0gRmFpbGVkIHRvIGVuYWJsZSBJTyBjbGFtcFxuIiwKLQkJCWRzaV9jdHJsLT5jZWxs X2luZGV4KTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gQ2xhbXAg c3RhdGUgPSAlZFxuIiwgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIGVuYWJsZSk7Ci1lcnJvcjoKLQlt dXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotLyoq Ci0gKiBkc2lfY3RybF9zZXRfY2xvY2tfc291cmNlKCkgLSBzZXQgY2xvY2sgc291cmNlIGZwciBk c2kgbGluayBjbG9ja3MKLSAqIEBkc2lfY3RybDogICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRs ZS4KLSAqIEBzb3VyY2VfY2xrczogICAgIFNvdXJjZSBjbG9ja3MgZm9yIERTSSBsaW5rIGNsb2Nr cy4KLSAqCi0gKiBDbG9jayBzb3VyY2Ugc2hvdWxkIGJlIGNoYW5nZWQgd2hpbGUgbGluayBjbG9j a3MgYXJlIGRpc2FibGVkLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRz aV9jdHJsX3NldF9jbG9ja19zb3VyY2Uoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJCSAg ICAgIHN0cnVjdCBkc2lfY2xrX2xpbmtfc2V0ICpzb3VyY2VfY2xrcykKLXsKLQlpbnQgcmMgPSAw OwotCi0JaWYgKCFkc2lfY3RybCB8fCAhc291cmNlX2Nsa3MpIHsKLQkJcHJfZXJyKCJJbnZhbGlk IHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRzaV9j dHJsLT5jdHJsX2xvY2spOwotCi0JcmMgPSBkc2lfY2xrX3VwZGF0ZV9wYXJlbnQoc291cmNlX2Ns a3MsICZkc2lfY3RybC0+Y2xrX2luZm8ucmNnX2Nsa3MpOwotCWlmIChyYykgewotCQlwcl9lcnIo IltEU0lfJWRdRmFpbGVkIHRvIHVwZGF0ZSBsaW5rIGNsayBwYXJlbnQsIHJjPSVkXG4iLAotCQkg ICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIHJjKTsKLQkJKHZvaWQpZHNpX2Nsa191cGRhdGVf cGFyZW50KCZkc2lfY3RybC0+Y2xrX2luZm8ucGxsX29wX2Nsa3MsCi0JCQkJCSAgICAmZHNpX2N0 cmwtPmNsa19pbmZvLnJjZ19jbGtzKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlkc2lfY3RybC0+ Y2xrX2luZm8ucGxsX29wX2Nsa3MuYnl0ZV9jbGsgPSBzb3VyY2VfY2xrcy0+Ynl0ZV9jbGs7Ci0J ZHNpX2N0cmwtPmNsa19pbmZvLnBsbF9vcF9jbGtzLnBpeGVsX2NsayA9IHNvdXJjZV9jbGtzLT5w aXhlbF9jbGs7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gU291cmNlIGNsb2NrcyBhcmUgdXBkYXRl ZFxuIiwgZHNpX2N0cmwtPmNlbGxfaW5kZXgpOwotCi1lcnJvcjoKLQltdXRleF91bmxvY2soJmRz aV9jdHJsLT5jdHJsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9z ZXR1cF9taXNyKCkgLSBTZXR1cCBmcmFtZSBNSVNSCi0gKiBAZHNpX2N0cmw6ICAgICAgICAgICAg ICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAZW5hYmxlOiAgICAgICAgICAgICAgICBlbmFi bGUvZGlzYWJsZSBNSVNSLgotICogQGZyYW1lX2NvdW50OiAgICAgICAgICAgTnVtYmVyIG9mIGZy YW1lcyB0byBhY2N1bXVsYXRlIE1JU1IuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICov Ci1pbnQgZHNpX2N0cmxfc2V0dXBfbWlzcihzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJ Ym9vbCBlbmFibGUsCi0JCQl1MzIgZnJhbWVfY291bnQpCi17Ci0JaWYgKCFkc2lfY3RybCkgewot CQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0J aWYgKCFkc2lfY3RybC0+aHcub3BzLnNldHVwX21pc3IpCi0JCXJldHVybiAwOwotCi0JbXV0ZXhf bG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0JZHNpX2N0cmwtPm1pc3JfZW5hYmxlID0gZW5h YmxlOwotCWRzaV9jdHJsLT5ody5vcHMuc2V0dXBfbWlzcigmZHNpX2N0cmwtPmh3LAotCQkJZHNp X2N0cmwtPmhvc3RfY29uZmlnLnBhbmVsX21vZGUsCi0JCQllbmFibGUsIGZyYW1lX2NvdW50KTsK LQltdXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCXJldHVybiAwOwotfQotCi0v KioKLSAqIGRzaV9jdHJsX2NvbGxlY3RfbWlzcigpIC0gUmVhZCBmcmFtZSBNSVNSCi0gKiBAZHNp X2N0cmw6ICAgICAgICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKgotICogUmV0dXJu OiBNSVNSIHZhbHVlLgotICovCi11MzIgZHNpX2N0cmxfY29sbGVjdF9taXNyKHN0cnVjdCBkc2lf Y3RybCAqZHNpX2N0cmwpCi17Ci0JdTMyIG1pc3I7Ci0KLQlpZiAoIWRzaV9jdHJsIHx8ICFkc2lf Y3RybC0+aHcub3BzLmNvbGxlY3RfbWlzcikKLQkJcmV0dXJuIDA7Ci0KLQltaXNyID0gZHNpX2N0 cmwtPmh3Lm9wcy5jb2xsZWN0X21pc3IoJmRzaV9jdHJsLT5odywKLQkJCQlkc2lfY3RybC0+aG9z dF9jb25maWcucGFuZWxfbW9kZSk7Ci0JaWYgKCFtaXNyKQotCQltaXNyID0gZHNpX2N0cmwtPm1p c3JfY2FjaGU7Ci0KLQlwcl9kZWJ1ZygiRFNJXyVkIGNhY2hlZCBtaXNyID0gJXgsIGZpbmFsID0g JXhcbiIsCi0JCWRzaV9jdHJsLT5jZWxsX2luZGV4LCBkc2lfY3RybC0+bWlzcl9jYWNoZSwgbWlz cik7Ci0KLQlyZXR1cm4gbWlzcjsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9kcnZfcmVnaXN0ZXIo KSAtIHJlZ2lzdGVyIHBsYXRmb3JtIGRyaXZlciBmb3IgZHNpIGNvbnRyb2xsZXIKLSAqLwotdm9p ZCBkc2lfY3RybF9kcnZfcmVnaXN0ZXIodm9pZCkKLXsKLQlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0 ZXIoJmRzaV9jdHJsX2RyaXZlcik7Ci19Ci0KLS8qKgotICogZHNpX2N0cmxfZHJ2X3VucmVnaXN0 ZXIoKSAtIHVucmVnaXN0ZXIgcGxhdGZvcm0gZHJpdmVyCi0gKi8KLXZvaWQgZHNpX2N0cmxfZHJ2 X3VucmVnaXN0ZXIodm9pZCkKLXsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZHNpX2N0 cmxfZHJpdmVyKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdp bmcvZHNpX2N0cmwuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmwu aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTgyNjM3Mi4uMDAwMDAwMAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsLmgKKysrIC9kZXYvbnVsbApA QCAtMSw2MjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE4LCBUaGUgTGlu dXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQot ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0g KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwot Ci0jaWZuZGVmIF9EU0lfQ1RSTF9IXwotI2RlZmluZSBfRFNJX0NUUkxfSF8KLQotI2luY2x1ZGUg PGxpbnV4L2RlYnVnZnMuaD4KLQotI2luY2x1ZGUgImRzaV9kZWZzLmgiCi0jaW5jbHVkZSAiZHNp X2N0cmxfaHcuaCIKLSNpbmNsdWRlICJkc2lfY2xrLmgiCi0jaW5jbHVkZSAiZHNpX3B3ci5oIgot I2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KLQotLyoKLSAqIERTSSBDb21tYW5kIHRyYW5z ZmVyIG1vZGlmaWVycwotICogQERTSV9DVFJMX0NNRF9SRUFEOiAgICAgICAgICAgICBUaGUgY3Vy cmVudCB0cmFuc2ZlciBpbnZvbHZlcyByZWFkaW5nIGRhdGEuCi0gKiBARFNJX0NUUkxfQ01EX0JS T0FEQ0FTVDogICAgICAgIFRoZSBjdXJyZW50IHRyYW5zZmVyIG5lZWRzIHRvIGJlIGRvbmUgaW4K LSAqCQkJCSAgIGJyb2FkY2FzdCBtb2RlIHRvIG11bHRpcGxlIHNsYXZlcy4KLSAqIEBEU0lfQ1RS TF9DTURfQlJPQURDQVNUX01BU1RFUjogVGhpcyBjb250cm9sbGVyIGlzIHRoZSBtYXN0ZXIgYW5k IHRoZSBzbGF2ZXMKLSAqCQkJCSAgIHN5bmMgdG8gdGhpcyB0cmlnZ2VyLgotICogQERTSV9DVFJM X0NNRF9ERUZFUl9UUklHR0VSOiAgICBEZWZlciB0aGUgY29tbWFuZCB0cmlnZ2VyIHRvIGxhdGVy LgotICogQERTSV9DVFJMX0NNRF9GSUZPX1NUT1JFOiAgICAgICBVc2UgRklGTyBmb3IgY29tbWFu ZCB0cmFuc2ZlciBpbiBwbGFjZSBvZgotICoJCQkJICAgcmVhZGluZyBkYXRhIGZyb20gbWVtb3J5 LgotICogQERTSV9DVFJMX0NNRF9GRVRDSF9NRU1PUlk6ICAgICBGZXRjaCBjb21tYW5kIGZyb20g bWVtb3J5IHRocm91Z2ggQVhJIGJ1cwotICoJCQkJICAgYW5kIHRyYW5zZmVyIGl0LgotICovCi0j ZGVmaW5lIERTSV9DVFJMX0NNRF9SRUFEICAgICAgICAgICAgIDB4MQotI2RlZmluZSBEU0lfQ1RS TF9DTURfQlJPQURDQVNUICAgICAgICAweDIKLSNkZWZpbmUgRFNJX0NUUkxfQ01EX0JST0FEQ0FT VF9NQVNURVIgMHg0Ci0jZGVmaW5lIERTSV9DVFJMX0NNRF9ERUZFUl9UUklHR0VSICAgIDB4OAot I2RlZmluZSBEU0lfQ1RSTF9DTURfRklGT19TVE9SRSAgICAgICAweDEwCi0jZGVmaW5lIERTSV9D VFJMX0NNRF9GRVRDSF9NRU1PUlkgICAgIDB4MjAKLQotLyoqCi0gKiBlbnVtIGRzaV9wb3dlcl9z dGF0ZSAtIGRlZmluZXMgcG93ZXIgc3RhdGVzIGZvciBkc2kgY29udHJvbGxlci4KLSAqIEBEU0lf Q1RSTF9QT1dFUl9WUkVHX09GRjogICAgRGlnaXRhbCBhbmQgYW5hbG9nIHN1cHBsaWVzIGZvciBE U0kgY29udHJvbGxlcgotCQkJCXR1cm5lZCBvZmYKLSAqIEBEU0lfQ1RSTF9QT1dFUl9WUkVHX09O OiAgICAgRGlnaXRhbCBhbmQgYW5hbG9nIHN1cHBsaWVzIGZvciBEU0kgY29udHJvbGxlcgotICog QERTSV9DVFJMX1BPV0VSX01BWDogICAgICAgICBNYXhpbXVtIHZhbHVlLgotICovCi1lbnVtIGRz aV9wb3dlcl9zdGF0ZSB7Ci0JRFNJX0NUUkxfUE9XRVJfVlJFR19PRkYgPSAwLAotCURTSV9DVFJM X1BPV0VSX1ZSRUdfT04sCi0JRFNJX0NUUkxfUE9XRVJfTUFYLAotfTsKLQotLyoqCi0gKiBlbnVt IGRzaV9lbmdpbmVfc3RhdGUgLSBkZWZpbmUgZW5naW5lIHN0YXR1cyBmb3IgZHNpIGNvbnRyb2xs ZXIuCi0gKiBARFNJX0NUUkxfRU5HSU5FX09GRjogIEVuZ2luZSBpcyB0dXJuZWQgb2ZmLgotICog QERTSV9DVFJMX0VOR0lORV9PTjogICBFbmdpbmUgaXMgdHVybmVkIG9uLgotICogQERTSV9DVFJM X0VOR0lORV9NQVg6ICBNYXhpbXVtIHZhbHVlLgotICovCi1lbnVtIGRzaV9lbmdpbmVfc3RhdGUg ewotCURTSV9DVFJMX0VOR0lORV9PRkYgPSAwLAotCURTSV9DVFJMX0VOR0lORV9PTiwKLQlEU0lf Q1RSTF9FTkdJTkVfTUFYLAotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX2N0cmxfcG93ZXJfaW5m byAtIGRpZ2l0YWwgYW5kIGFuYWxvZyBwb3dlciBzdXBwbGllcyBmb3IgZHNpIGhvc3QKLSAqIEBk aWdpdGFsOiAgRGlnaXRhbCBwb3dlciBzdXBwbHkgcmVxdWlyZWQgdG8gdHVybiBvbiBEU0kgY29u dHJvbGxlciBoYXJkd2FyZS4KLSAqIEBob3N0X3B3cjogQW5hbG9nIHBvd2VyIHN1cHBsaWVzIHJl cXVpcmVkIHRvIHR1cm4gb24gRFNJIGNvbnRyb2xsZXIgaGFyZHdhcmUuCi0gKiAgICAgICAgICAg IEV2ZW4gdGhvdWdoIERTSSBjb250cm9sbGVyIGl0IHNlbGYgZG9lcyBub3QgcmVxdWlyZSBhbiBh bmFsb2cKLSAqICAgICAgICAgICAgcG93ZXIgc3VwcGx5LCBzdXBwbGllcyByZXF1aXJlZCBmb3Ig UExMIGNhbiBiZSBkZWZpbmVkIGhlcmUgdG8KLSAqICAgICAgICAgICAgYWxsb3cgcHJvcGVyIGNv bnRyb2wgb3ZlciB0aGVzZSBzdXBwbGllcy4KLSAqLwotc3RydWN0IGRzaV9jdHJsX3Bvd2VyX2lu Zm8gewotCXN0cnVjdCBkc2lfcmVndWxhdG9yX2luZm8gZGlnaXRhbDsKLQlzdHJ1Y3QgZHNpX3Jl Z3VsYXRvcl9pbmZvIGhvc3RfcHdyOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX2N0cmxfY2xr X2luZm8gLSBjbG9jayBpbmZvcm1hdGlvbiBmb3IgRFNJIGNvbnRyb2xsZXIKLSAqIEBjb3JlX2Ns a3M6ICAgICAgICAgIENvcmUgY2xvY2tzIG5lZWRlZCB0byBhY2Nlc3MgRFNJIGNvbnRyb2xsZXIg cmVnaXN0ZXJzLgotICogQGxpbmtfY2xrczogICAgICAgICAgTGluayBjbG9ja3MgcmVxdWlyZWQg dG8gdHJhbnNtaXQgZGF0YSBvdmVyIERTSSBsaW5rLgotICogQHJjZ19jbGtzOiAgICAgICAgICAg Um9vdCBjbG9jayBnZW5lcmF0aW9uIGNsb2NrcyBnZW5lcmF0ZWQgaW4gTU1TU19DQy4gVGhlCi0g KgkJCW91dHB1dCBvZiB0aGUgUExMIGlzIHNldCBhcyBwYXJlbnQgZm9yIHRoZXNlIHJvb3QKLSAq CQkJY2xvY2tzLiBUaGVzZSBjbG9ja3MgYXJlIHNwZWNpZmljIHRvIGNvbnRyb2xsZXIKLSAqCQkJ aW5zdGFuY2UuCi0gKiBAbXV4X2Nsa3M6ICAgICAgICAgICBNdXggY2xvY2tzIHVzZWQgZm9yIER5 bmFtaWMgcmVmcmVzaCBmZWF0dXJlLgotICogQGV4dF9jbGtzOiAgICAgICAgICAgRXh0ZXJuYWwg Ynl0ZS9waXhlbCBjbG9ja3MgZnJvbSB0aGUgTU1TUyBibG9jay4gVGhlc2UKLSAqCQkJY2xvY2tz IGFyZSBzZXQgYXMgcGFyZW50IHRvIHJjZyBjbG9ja3MuCi0gKiBAcGxsX29wX2Nsa3M6ICAgICAg ICBUT0RPOgotICogQHNoYWRvd19jbGtzOiAgICAgICAgVE9ETzoKLSAqLwotc3RydWN0IGRzaV9j dHJsX2Nsa19pbmZvIHsKLQkvKiBDbG9ja3MgcGFyc2VkIGZyb20gRFQgKi8KLQlzdHJ1Y3QgZHNp X2NvcmVfY2xrX2luZm8gY29yZV9jbGtzOwotCXN0cnVjdCBkc2lfbGlua19jbGtfaW5mbyBsaW5r X2Nsa3M7Ci0Jc3RydWN0IGRzaV9jbGtfbGlua19zZXQgcmNnX2Nsa3M7Ci0KLQkvKiBDbG9ja3Mg c2V0IGJ5IERTSSBNYW5hZ2VyICovCi0Jc3RydWN0IGRzaV9jbGtfbGlua19zZXQgbXV4X2Nsa3M7 Ci0Jc3RydWN0IGRzaV9jbGtfbGlua19zZXQgZXh0X2Nsa3M7Ci0Jc3RydWN0IGRzaV9jbGtfbGlu a19zZXQgcGxsX29wX2Nsa3M7Ci0Jc3RydWN0IGRzaV9jbGtfbGlua19zZXQgc2hhZG93X2Nsa3M7 Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkc2lfY3RybF9idXNfc2NhbGVfaW5mbyAtIEJ1cyBzY2Fs ZSBpbmZvIGZvciBtc20tYnVzIGJhbmR3aWR0aCB2b3RpbmcKLSAqIEBidXNfc2NhbGVfdGFibGU6 ICAgICAgICBCdXMgc2NhbGUgdm90aW5nIHVzZWNhc2VzLgotICogQGJ1c19oYW5kbGU6ICAgICAg ICAgICAgIEhhbmRsZSB1c2VkIGZvciB2b3RpbmcgYmFuZHdpZHRoLgotICovCi1zdHJ1Y3QgZHNp X2N0cmxfYnVzX3NjYWxlX2luZm8gewotCXN0cnVjdCBtc21fYnVzX3NjYWxlX3BkYXRhICpidXNf c2NhbGVfdGFibGU7Ci0JdTMyIGJ1c19oYW5kbGU7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkc2lf Y3RybF9zdGF0ZV9pbmZvIC0gY3VycmVudCBkcml2ZXIgc3RhdGUgaW5mb3JtYXRpb24KLSAqIEBw b3dlcl9zdGF0ZTogICAgICAgIFN0YXR1cyBvZiBwb3dlciBzdGF0ZXMgb24gRFNJIGNvbnRyb2xs ZXIuCi0gKiBAY21kX2VuZ2luZV9zdGF0ZTogICBTdGF0dXMgb2YgRFNJIGNvbW1hbmQgZW5naW5l LgotICogQHZpZF9lbmdpbmVfc3RhdGU6ICAgU3RhdHVzIG9mIERTSSB2aWRlbyBlbmdpbmUuCi0g KiBAY29udHJvbGxlcl9zdGF0ZTogICBTdGF0dXMgb2YgRFNJIENvbnRyb2xsZXIgZW5naW5lLgot ICogQGhvc3RfaW5pdGlhbGl6ZWQ6CUJvb2xlYW4gdG8gaW5kaWNhdGUgc3RhdHVzIG9mIERTaSBo b3N0IEluaXRpYWxpemF0aW9uCi0gKiBAdHBnX2VuYWJsZWQ6ICAgICAgICBCb29sZWFuIHRvIGlu ZGljYXRlIHdoZXRoZXIgdHBnIGlzIGVuYWJsZWQuCi0gKi8KLXN0cnVjdCBkc2lfY3RybF9zdGF0 ZV9pbmZvIHsKLQllbnVtIGRzaV9wb3dlcl9zdGF0ZSBwb3dlcl9zdGF0ZTsKLQllbnVtIGRzaV9l bmdpbmVfc3RhdGUgY21kX2VuZ2luZV9zdGF0ZTsKLQllbnVtIGRzaV9lbmdpbmVfc3RhdGUgdmlk X2VuZ2luZV9zdGF0ZTsKLQllbnVtIGRzaV9lbmdpbmVfc3RhdGUgY29udHJvbGxlcl9zdGF0ZTsK LQlib29sIGhvc3RfaW5pdGlhbGl6ZWQ7Ci0JYm9vbCB0cGdfZW5hYmxlZDsKLX07Ci0KLS8qKgot ICogc3RydWN0IGRzaV9jdHJsX2ludGVycnVwdHMgLSBkZWZpbmUgaW50ZXJydXB0IGluZm9ybWF0 aW9uCi0gKiBAaXJxX2xvY2s6ICAgICAgICAgICAgU3BpbmxvY2sgZm9yIElTUiBoYW5kbGVyLgot ICogQGlycV9udW06ICAgICAgICAgICAgIExpbnV4IGludGVycnVwdCBudW1iZXIgYXNzb2NpYXRl ZCB3aXRoIGRldmljZS4KLSAqIEBpcnFfc3RhdF9tYXNrOiAgICAgICBIYXJkd2FyZSBtYXNrIG9m IGN1cnJlbnRseSBlbmFibGVkIGludGVycnVwdHMuCi0gKiBAaXJxX3N0YXRfcmVmY291bnQ6ICAg TnVtYmVyIG9mIHRpbWVzIGVhY2ggaW50ZXJydXB0IGhhcyBiZWVuIHJlcXVlc3RlZC4KLSAqIEBp cnFfc3RhdF9jYjogICAgICAgICBTdGF0dXMgSVJRIGNhbGxiYWNrIGRlZmluaXRpb25zLgotICog QGNtZF9kbWFfZG9uZTogICAgICAgICAgQ29tcGxldGlvbiBzaWduYWwgZm9yIERTSV9DTURfTU9E RV9ETUFfRE9ORSBpbnRlcnJ1cHQKLSAqIEB2aWRfZnJhbWVfZG9uZTogICAgICAgIENvbXBsZXRp b24gc2lnbmFsIGZvciBEU0lfVklERU9fTU9ERV9GUkFNRV9ET05FIGludC4KLSAqIEBjbWRfZnJh bWVfZG9uZTogICAgICAgIENvbXBsZXRpb24gc2lnbmFsIGZvciBEU0lfQ01EX0ZSQU1FX0RPTkUg aW50ZXJydXB0LgotICovCi1zdHJ1Y3QgZHNpX2N0cmxfaW50ZXJydXB0cyB7Ci0Jc3BpbmxvY2tf dCBpcnFfbG9jazsKLQlpbnQgaXJxX251bTsKLQl1aW50MzJfdCBpcnFfc3RhdF9tYXNrOwotCWlu dCBpcnFfc3RhdF9yZWZjb3VudFtEU0lfU1RBVFVTX0lOVEVSUlVQVF9DT1VOVF07Ci0Jc3RydWN0 IGRzaV9ldmVudF9jYl9pbmZvIGlycV9zdGF0X2NiW0RTSV9TVEFUVVNfSU5URVJSVVBUX0NPVU5U XTsKLQotCXN0cnVjdCBjb21wbGV0aW9uIGNtZF9kbWFfZG9uZTsKLQlzdHJ1Y3QgY29tcGxldGlv biB2aWRfZnJhbWVfZG9uZTsKLQlzdHJ1Y3QgY29tcGxldGlvbiBjbWRfZnJhbWVfZG9uZTsKLQlz dHJ1Y3QgY29tcGxldGlvbiBidGFfZG9uZTsKLX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9jdHJs IC0gRFNJIGNvbnRyb2xsZXIgb2JqZWN0Ci0gKiBAcGRldjogICAgICAgICAgICAgICAgUG9pbnRl ciB0byBwbGF0Zm9ybSBkZXZpY2UuCi0gKiBAY2VsbF9pbmRleDogICAgICAgICAgSW5zdGFuY2Ug Y2VsbCBpZC4KLSAqIEBob3Jpel9pbmRleDogICAgICAgICBJbmRleCBpbiBwaHlzaWNhbCBob3Jp em9udGFsIENUUkwgbGF5b3V0LCAwID0gbGVmdG1vc3QKLSAqIEBuYW1lOiAgICAgICAgICAgICAg ICBOYW1lIG9mIHRoZSBjb250cm9sbGVyIGluc3RhbmNlLgotICogQHJlZmNvdW50OiAgICAgICAg ICAgIHJlZiBjb3VudGVyLgotICogQGN0cmxfbG9jazogICAgICAgICAgIE11dGV4IGZvciBoYXJk d2FyZSBhbmQgb2JqZWN0IGFjY2Vzcy4KLSAqIEBkcm1fZGV2OiAgICAgICAgICAgICBQb2ludGVy IHRvIERSTSBkZXZpY2UuCi0gKiBAdmVyc2lvbjogICAgICAgICAgICAgRFNJIGNvbnRyb2xsZXIg dmVyc2lvbi4KLSAqIEBodzogICAgICAgICAgICAgICAgICBEU0kgY29udHJvbGxlciBoYXJkd2Fy ZSBvYmplY3QuCi0gKiBAY3VycmVudF9zdGF0ZTogICAgICAgQ3VycmVudCBkcml2ZXIgYW5kIGhh cmR3YXJlIHN0YXRlLgotICogQGNsa19jYjoJCSBDYWxsYmFjayBmb3IgRFNJIGNsb2NrIGNvbnRy b2wuCi0gKiBAaXJxX2luZm86ICAgICAgICAgICAgSW50ZXJydXB0IGluZm9ybWF0aW9uLgotICog QGNsa19pbmZvOiAgICAgICAgICAgIENsb2NrIGluZm9ybWF0aW9uLgotICogQGNsa19mcmVxOiAg ICAgICAgICAgIERTaSBMaW5rIGNsb2NrIGZyZXF1ZW5jeSBpbmZvcm1hdGlvbi4KLSAqIEBwd3Jf aW5mbzogICAgICAgICAgICBQb3dlciBpbmZvcm1hdGlvbi4KLSAqIEBheGlfYnVzX2luZm86ICAg ICAgICBBWEkgYnVzIGluZm9ybWF0aW9uLgotICogQGhvc3RfY29uZmlnOiAgICAgICAgIEN1cnJl bnQgaG9zdCBjb25maWd1cmF0aW9uLgotICogQG1vZGVfYm91bmRzOiAgICAgICAgIEJvdW5kYXJp ZXMgb2YgdGhlIGRlZmF1bHQgbW9kZSBST0kuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgT3Jp Z2luIGlzIGF0IHRvcCBsZWZ0IG9mIGFsbCBDVFJMcy4KLSAqIEByb2k6ICAgICAgICAgICAgICAg ICBQYXJ0aWFsIHVwZGF0ZSByZWdpb24gb2YgaW50ZXJlc3QuCi0gKiAgICAgICAgICAgICAgICAg ICAgICAgT3JpZ2luIGlzIHRvcCBsZWZ0IG9mIHRoaXMgQ1RSTC4KLSAqIEB0eF9jbWRfYnVmOiAg ICAgICAgICBUeCBjb21tYW5kIGJ1ZmZlci4KLSAqIEBjbWRfYnVmZmVyX2lvdmE6ICAgICBjbWQg YnVmZmVyIG1hcHBlZCBhZGRyZXNzLgotICogQHZhZGRyOgkJIENQVSB2aXJ0dWFsIGFkZHJlc3Mg b2YgY21kIGJ1ZmZlci4KLSAqIEBjbWRfYnVmZmVyX3NpemU6ICAgICBTaXplIG9mIGNvbW1hbmQg YnVmZmVyLgotICogQGRlYnVnZnNfcm9vdDogICAgICAgIFJvb3QgZm9yIGRlYnVnZnMgZW50cmll cy4KLSAqIEBtaXNyX2VuYWJsZTogICAgICAgICBGcmFtZSBNSVNSIGVuYWJsZS9kaXNhYmxlCi0g KiBAbWlzcl9jYWNoZTogICAgICAgICAgQ2FjaGVkIEZyYW1lIE1JU1IgdmFsdWUKLSAqIEBwaHlf aXNvbGF0aW9uX2VuYWJsZWQ6ICAgIEEgYm9vbGVhbiBwcm9wZXJ0eSBhbGxvd3MgdG8gaXNvbGF0 ZSB0aGUgcGh5IGZyb20KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBkc2kgY29udHJvbGxl ciBhbmQgcnVuIG9ubHkgZHNpIGNvbnRyb2xsZXIuCi0gKi8KLXN0cnVjdCBkc2lfY3RybCB7Ci0J c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQl1MzIgY2VsbF9pbmRleDsKLQl1MzIgaG9y aXpfaW5kZXg7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQl1MzIgcmVmY291bnQ7Ci0Jc3RydWN0IG11 dGV4IGN0cmxfbG9jazsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldjsKLQotCWVudW0gZHNp X2N0cmxfdmVyc2lvbiB2ZXJzaW9uOwotCXN0cnVjdCBkc2lfY3RybF9odyBodzsKLQotCS8qIEN1 cnJlbnQgc3RhdGUgKi8KLQlzdHJ1Y3QgZHNpX2N0cmxfc3RhdGVfaW5mbyBjdXJyZW50X3N0YXRl OwotCXN0cnVjdCBjbGtfY3RybF9jYiBjbGtfY2I7Ci0KLQlzdHJ1Y3QgZHNpX2N0cmxfaW50ZXJy dXB0cyBpcnFfaW5mbzsKLQotCS8qIENsb2NrIGFuZCBwb3dlciBzdGF0ZXMgKi8KLQlzdHJ1Y3Qg ZHNpX2N0cmxfY2xrX2luZm8gY2xrX2luZm87Ci0Jc3RydWN0IGxpbmtfY2xrX2ZyZXEgY2xrX2Zy ZXE7Ci0Jc3RydWN0IGRzaV9jdHJsX3Bvd2VyX2luZm8gcHdyX2luZm87Ci0Jc3RydWN0IGRzaV9j dHJsX2J1c19zY2FsZV9pbmZvIGF4aV9idXNfaW5mbzsKLQotCXN0cnVjdCBkc2lfaG9zdF9jb25m aWcgaG9zdF9jb25maWc7Ci0Jc3RydWN0IGRzaV9yZWN0IG1vZGVfYm91bmRzOwotCXN0cnVjdCBk c2lfcmVjdCByb2k7Ci0KLQkvKiBDb21tYW5kIHR4IGFuZCByeCAqLwotCXN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqdHhfY21kX2J1ZjsKLQl1MzIgY21kX2J1ZmZlcl9zaXplOwotCXUzMiBjbWRfYnVm ZmVyX2lvdmE7Ci0Jdm9pZCAqdmFkZHI7Ci0KLQkvKiBEZWJ1ZyBJbmZvcm1hdGlvbiAqLwotCXN0 cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKLQotCS8qIE1JU1IgKi8KLQlib29sIG1pc3JfZW5h YmxlOwotCXUzMiBtaXNyX2NhY2hlOwotCi0JYm9vbCBwaHlfaXNvbGF0aW9uX2VuYWJsZWQ7Ci19 OwotCi0vKioKLSAqIGRzaV9jdHJsX2dldCgpIC0gZ2V0IGEgZHNpX2N0cmwgaGFuZGxlIGZyb20g YW4gb2Zfbm9kZQotICogQG9mX25vZGU6ICAgIG9mX25vZGUgb2YgdGhlIERTSSBjb250cm9sbGVy LgotICoKLSAqIEdldHMgdGhlIERTSSBjb250cm9sbGVyIGhhbmRsZSBmb3IgdGhlIGNvcnJlc3Bv bmRpbmcgb2Zfbm9kZS4gVGhlIHJlZiBjb3VudAotICogaXMgaW5jcmVtZW50ZWQgdG8gb25lIGFu ZCBhbGwgc3Vic2VxdWVudCBnZXRzIHdpbGwgZmFpbCB1bnRpbCB0aGUgb3JpZ2luYWwKLSAqIGNs aWVudHMgY2FsbHMgYSBwdXQuCi0gKgotICogUmV0dXJuOiBEU0kgQ29udHJvbGxlciBoYW5kbGUu Ci0gKi8KLXN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmxfZ2V0KHN0cnVjdCBkZXZpY2Vfbm9kZSAq b2Zfbm9kZSk7Ci0KLS8qKgotICogZHNpX2N0cmxfcHV0KCkgLSByZWxlYXNlcyBhIGRzaSBjb250 cm9sbGVyIGhhbmRsZS4KLSAqIEBkc2lfY3RybDogICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxl LgotICoKLSAqIFJlbGVhc2VzIHRoZSBEU0kgY29udHJvbGxlci4gRHJpdmVyIHdpbGwgY2xlYW4g dXAgYWxsIHJlc291cmNlcyBhbmQgcHV0cyBiYWNrCi0gKiB0aGUgRFNJIGNvbnRyb2xsZXIgaW50 byByZXNldCBzdGF0ZS4KLSAqLwotdm9pZCBkc2lfY3RybF9wdXQoc3RydWN0IGRzaV9jdHJsICpk c2lfY3RybCk7Ci0KLS8qKgotICogZHNpX2N0cmxfZHJ2X2luaXQoKSAtIGluaXRpYWxpemUgZHNp IGNvbnRyb2xsZXIgZHJpdmVyLgotICogQGRzaV9jdHJsOiAgICAgIERTSSBjb250cm9sbGVyIGhh bmRsZS4KLSAqIEBwYXJlbnQ6ICAgICAgICBQYXJlbnQgZGlyZWN0b3J5IGZvciBkZWJ1ZyBmcy4K LSAqCi0gKiBJbml0aWFsaXplcyBEU0kgY29udHJvbGxlciBkcml2ZXIuIERyaXZlciBzaG91bGQg YmUgaW5pdGlhbGl6ZWQgYWZ0ZXIKLSAqIGRzaV9jdHJsX2dldCgpIHN1Y2NlZWRzLgotICoKLSAq IFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJsX2Rydl9pbml0KHN0cnVjdCBk c2lfY3RybCAqZHNpX2N0cmwsIHN0cnVjdCBkZW50cnkgKnBhcmVudCk7Ci0KLS8qKgotICogZHNp X2N0cmxfZHJ2X2RlaW5pdCgpIC0gZGUtaW5pdGlhbGl6ZXMgZHNpIGNvbnRyb2xsZXIgZHJpdmVy Ci0gKiBAZHNpX2N0cmw6ICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICoKLSAqIFJlbGVh c2VzIGFsbCByZXNvdXJjZXMgYWNxdWlyZWQgYnkgZHNpX2N0cmxfZHJ2X2luaXQoKS4KLSAqCi0g KiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9kcnZfZGVpbml0KHN0cnVj dCBkc2lfY3RybCAqZHNpX2N0cmwpOwotCi0vKioKLSAqIGRzaV9jdHJsX3ZhbGlkYXRlX3RpbWlu ZygpIC0gdmFsaWRhdGUgYSB2aWRlbyB0aW1pbmcgY29uZmlndXJhdGlvbgotICogQGRzaV9jdHJs OiAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAdGltaW5nOiAgICAgICAgIFBvaW50 ZXIgdG8gdGltaW5nIGRhdGEuCi0gKgotICogRHJpdmVyIHdpbGwgdmFsaWRhdGUgaWYgdGhlIHRp bWluZyBjb25maWd1cmF0aW9uIGlzIHN1cHBvcnRlZCBvbiB0aGUKLSAqIGNvbnRyb2xsZXIgaGFy ZHdhcmUuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlIGlmIHRpbWluZyBpcyBub3Qgc3VwcG9y dGVkLgotICovCi1pbnQgZHNpX2N0cmxfdmFsaWRhdGVfdGltaW5nKHN0cnVjdCBkc2lfY3RybCAq ZHNpX2N0cmwsCi0JCQkgICAgIHN0cnVjdCBkc2lfbW9kZV9pbmZvICp0aW1pbmcpOwotCi0vKioK LSAqIGRzaV9jdHJsX3VwZGF0ZV9ob3N0X2NvbmZpZygpIC0gdXBkYXRlIGRzaSBob3N0IGNvbmZp Z3VyYXRpb24KLSAqIEBkc2lfY3RybDogICAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgot ICogQGNvbmZpZzogICAgICAgICAgICBEU0kgaG9zdCBjb25maWd1cmF0aW9uLgotICogQGZsYWdz OiAgICAgICAgICAgICBkc2lfbW9kZV9mbGFncyBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yCi0gKiBA Y2xrX2hhbmRsZTogICAgICAgIENsb2NrIGhhbmRsZSBmb3IgRFNJIGNsb2NrcwotICoKLSAqIFVw ZGF0ZXMgZHJpdmVyIHdpdGggbmV3IEhvc3QgY29uZmlndXJhdGlvbiB0byB1c2UgZm9yIGhvc3Qg aW5pdGlhbGl6YXRpb24uCi0gKiBUaGlzIGZ1bmN0aW9uIGNhbGwgd2lsbCBvbmx5IHVwZGF0ZSB0 aGUgc29mdHdhcmUgY29udGV4dC4gVGhlIHN0b3JlZAotICogY29uZmlndXJhdGlvbiBpbmZvcm1h dGlvbiB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgaG9zdCBpcyBpbml0aWFsaXplZC4KLSAqCi0gKiBS ZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF91cGRhdGVfaG9zdF9jb25maWco c3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJCQlzdHJ1Y3QgZHNpX2hvc3RfY29uZmlnICpj b25maWcsCi0JCQkJaW50IGZsYWdzLCB2b2lkICpjbGtfaGFuZGxlKTsKLQotLyoqCi0gKiBkc2lf Y3RybF90aW1pbmdfZGJfdXBkYXRlKCkgLSB1cGRhdGUgb25seSBjb250cm9sbGVyIFRpbWluZyBE QgotICogQGRzaV9jdHJsOiAgICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAZW5h YmxlOiAgICAgICAgICAgIEVuYWJsZS9kaXNhYmxlIFRpbWluZyBEQiByZWdpc3RlcgotICoKLSAq IFVwZGF0ZSB0aW1pbmcgZGIgcmVnaXN0ZXIgdmFsdWUgZHVyaW5nIGRmcHMgdXNlY2FzZXMKLSAq Ci0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF90aW1pbmdfZGJfdXBk YXRlKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCWJvb2wgZW5hYmxlKTsKLQotLyoqCi0g KiBkc2lfY3RybF9hc3luY190aW1pbmdfdXBkYXRlKCkgLSB1cGRhdGUgb25seSBjb250cm9sbGVy IHRpbWluZwotICogQGRzaV9jdHJsOiAgICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0g KiBAdGltaW5nOiAgICAgICAgICAgIE5ldyBEU0kgdGltaW5nIGluZm8KLSAqCi0gKiBVcGRhdGVz IGhvc3QgdGltaW5nIHZhbHVlcyB0byBhc3luY2hyb25vdXNseSB0cmFuc2l0aW9uIHRvIG5ldyB0 aW1pbmcKLSAqIEZvciBleGFtcGxlLCB0byB1cGRhdGUgdGhlIHBvcmNoIHZhbHVlcyBpbiBhIHNl YW1sZXNzL2R5bmFtaWMgZnBzIHN3aXRjaC4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0g Ki8KLWludCBkc2lfY3RybF9hc3luY190aW1pbmdfdXBkYXRlKHN0cnVjdCBkc2lfY3RybCAqZHNp X2N0cmwsCi0JCXN0cnVjdCBkc2lfbW9kZV9pbmZvICp0aW1pbmcpOwotCi0vKioKLSAqIGRzaV9j dHJsX3BoeV9zd19yZXNldCgpIC0gcGVyZm9ybSBhIFBIWSBzb2Z0d2FyZSByZXNldAotICogQGRz aV9jdHJsOiAgICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqCi0gKiBQZXJmb3JtcyBh IFBIWSBzb2Z0d2FyZSByZXNldCBvbiB0aGUgRFNJIGNvbnRyb2xsZXIuIFJlc2V0IHNob3VsZCBi ZSBkb25lCi0gKiB3aGVuIHRoZSBjb250cm9sbGVyIHBvd2VyIHN0YXRlIGlzIERTSV9DVFJMX1BP V0VSX0NPUkVfQ0xLX09OIGFuZCB0aGUgUEhZIGlzCi0gKiBub3QgZW5hYmxlZC4KLSAqCi0gKiBU aGlzIGZ1bmN0aW9uIHdpbGwgZmFpbCBpZiBkcml2ZXIgaXMgaW4gYW55IG90aGVyIHN0YXRlLgot ICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJsX3BoeV9zd19yZXNl dChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsKTsKLQotLyoqCi0gKiBkc2lfY3RybF9waHlfcmVz ZXRfY29uZmlnKCkgLSBNYXNrL3VubWFzayBwcm9wYWdhdGlvbiBvZiBhaGIgcmVzZXQgc2lnbmFs Ci0gKgl0byBEU0kgUEhZIGhhcmR3YXJlLgotICogQGRzaV9jdHJsOiAgICAgICAgRFNJIGNvbnRy b2xsZXIgaGFuZGxlLgotICogQGVuYWJsZToJCQlNYXNrL3VubWFzayB0aGUgUEhZIHJlc2V0IHNp Z25hbC4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9waHlf cmVzZXRfY29uZmlnKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsIGJvb2wgZW5hYmxlKTsKLQot LyoqCi0gKiBkc2lfY3RybF9zb2Z0X3Jlc2V0KCkgLSBwZXJmb3JtIGEgc29mdCByZXNldCBvbiBE U0kgY29udHJvbGxlcgotICogQGRzaV9jdHJsOiAgICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRs ZS4KLSAqCi0gKiBUaGUgdmlkZW8sIGNvbW1hbmQgYW5kIGNvbnRyb2xsZXIgZW5naW5lcyB3aWxs IGJlIGRpc2FibGVkIGJlZm9yZSB0aGUKLSAqIHJlc2V0IGlzIHRyaWdnZXJlZC4gQWZ0ZXIsIHRo ZSBlbmdpbmVzIHdpbGwgYmUgcmUtZW5hYmxlZCB0byB0aGUgc2FtZSBzdGF0ZQotICogYXMgYmVm b3JlIHRoZSByZXNldC4KLSAqCi0gKiBJZiB0aGUgcmVzZXQgaXMgZG9uZSB3aGlsZSBNRFAgdGlt aW5nIGVuZ2luZSBpcyB0dXJuZWQgb24sIHRoZSB2aWRlbwotICogZW5naW5lIHNob3VsZCBiZSBy ZS1lbmFibGVkIG9ubHkgZHVyaW5nIHRoZSB2ZXJ0aWNhbCBibGFua2luZyB0aW1lLgotICoKLSAq IFJldHVybjogZXJyb3IgY29kZQotICovCi1pbnQgZHNpX2N0cmxfc29mdF9yZXNldChzdHJ1Y3Qg ZHNpX2N0cmwgKmRzaV9jdHJsKTsKLQotLyoqCi0gKiBkc2lfY3RybF9ob3N0X3RpbWluZ191cGRh dGUgLSByZWluaXRpYWxpemUgaG9zdCB3aXRoIG5ldyB0aW1pbmcgdmFsdWVzCi0gKiBAZHNpX2N0 cmw6ICAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICoKLSAqIFJlaW5pdGlhbGl6ZSBE U0kgY29udHJvbGxlciBoYXJkd2FyZSB3aXRoIG5ldyBkaXNwbGF5IHRpbWluZyB2YWx1ZXMKLSAq IHdoZW4gcmVzb2x1dGlvbiBpcyBzd2l0Y2hlZCBkeW5hbWljYWxseS4KLSAqCi0gKiBSZXR1cm46 IGVycm9yIGNvZGUKLSAqLwotaW50IGRzaV9jdHJsX2hvc3RfdGltaW5nX3VwZGF0ZShzdHJ1Y3Qg ZHNpX2N0cmwgKmRzaV9jdHJsKTsKLQotLyoqCi0gKiBkc2lfY3RybF9ob3N0X2luaXQoKSAtIElu aXRpYWxpemUgRFNJIGhvc3QgaGFyZHdhcmUuCi0gKiBAZHNpX2N0cmw6ICAgICAgICBEU0kgY29u dHJvbGxlciBoYW5kbGUuCi0gKgotICogSW5pdGlhbGl6ZXMgRFNJIGNvbnRyb2xsZXIgaGFyZHdh cmUgd2l0aCBob3N0IGNvbmZpZ3VyYXRpb24gcHJvdmlkZWQgYnkKLSAqIGRzaV9jdHJsX3VwZGF0 ZV9ob3N0X2NvbmZpZygpLiBJbml0aWFsaXphdGlvbiBjYW4gYmUgcGVyZm9ybWVkIG9ubHkgZHVy aW5nCi0gKiBEU0lfQ1RSTF9QT1dFUl9DT1JFX0NMS19PTiBzdGF0ZSBhbmQgYWZ0ZXIgdGhlIFBI WSBTVyByZXNldCBoYXMgYmVlbgotICogcGVyZm9ybWVkLgotICoKLSAqIFJldHVybjogZXJyb3Ig Y29kZS4KLSAqLwotaW50IGRzaV9jdHJsX2hvc3RfaW5pdChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9j dHJsKTsKLQotLyoqCi0gKiBkc2lfY3RybF9ob3N0X2RlaW5pdCgpIC0gRGUtSW5pdGlhbGl6ZSBE U0kgaG9zdCBoYXJkd2FyZS4KLSAqIEBkc2lfY3RybDogICAgICAgIERTSSBjb250cm9sbGVyIGhh bmRsZS4KLSAqCi0gKiBEZS1pbml0aWFsaXplcyBEU0kgY29udHJvbGxlciBoYXJkd2FyZS4gSXQg Y2FuIGJlIHBlcmZvcm1lZCBvbmx5IGR1cmluZwotICogRFNJX0NUUkxfUE9XRVJfQ09SRV9DTEtf T04gc3RhdGUgYWZ0ZXIgTElOSyBjbG9ja3MgaGF2ZSBiZWVuIHR1cm5lZCBvZmYuCi0gKgotICog UmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfaG9zdF9kZWluaXQoc3RydWN0 IGRzaV9jdHJsICpkc2lfY3RybCk7Ci0KLS8qKgotICogZHNpX2N0cmxfc2V0X3VscHMoKSAtIHNl dCBVTFBTIHN0YXRlIGZvciBEU0kgbGFuZXMuCi0gKiBAZHNpX2N0cmw6CQlEU0kgY29udHJvbGxl ciBoYW5kbGUuCi0gKiBAZW5hYmxlOgkJZW5hYmxlL2Rpc2FibGUgVUxQUy4KLSAqCi0gKiBVTFBT IGNhbiBiZSBlbmFibGVkL2Rpc2FibGVkIGFmdGVyIERTSSBob3N0IGVuZ2luZSBpcyB0dXJuZWQg b24uCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfc2V0X3Vs cHMoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwgYm9vbCBlbmFibGUpOwotCi0vKioKLSAqIGRz aV9jdHJsX3NldHVwKCkgLSBTZXR1cCBEU0kgaG9zdCBoYXJkd2FyZSB3aGlsZSBjb21pbmcgb3V0 IG9mIGlkbGUgc2NyZWVuLgotICogQGRzaV9jdHJsOiAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFu ZGxlLgotICoKLSAqIEluaXRpYWxpemVzIERTSSBjb250cm9sbGVyIGhhcmR3YXJlIHdpdGggaG9z dCBjb25maWd1cmF0aW9uIHByb3ZpZGVkIGJ5Ci0gKiBkc2lfY3RybF91cGRhdGVfaG9zdF9jb25m aWcoKS4gSW5pdGlhbGl6YXRpb24gY2FuIGJlIHBlcmZvcm1lZCBvbmx5IGR1cmluZwotICogRFNJ X0NUUkxfUE9XRVJfQ09SRV9DTEtfT04gc3RhdGUgYW5kIGFmdGVyIHRoZSBQSFkgU1cgcmVzZXQg aGFzIGJlZW4KLSAqIHBlcmZvcm1lZC4KLSAqCi0gKiBBbHNvIHVzZWQgdG8gcHJvZ3JhbSB0aGUg dmlkZW8gbW9kZSB0aW1pbmcgdmFsdWVzLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAq LwotaW50IGRzaV9jdHJsX3NldHVwKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpOwotCi0vKioK LSAqIGRzaV9jdHJsX3NldF90cGdfc3RhdGUoKSAtIGVuYWJsZS9kaXNhYmxlIHRlc3QgcGF0dGVy biBvbiB0aGUgY29udHJvbGxlcgotICogQGRzaV9jdHJsOiAgICAgICAgICBEU0kgY29udHJvbGxl ciBoYW5kbGUuCi0gKiBAb246ICAgICAgICAgICAgICAgIGVuYWJsZS9kaXNhYmxlIHRlc3QgcGF0 dGVybi4KLSAqCi0gKiBUZXN0IHBhdHRlcm4gY2FuIGJlIGVuYWJsZWQgb25seSBhZnRlciBWaWRl byBlbmdpbmUgKGZvciB2aWRlbyBtb2RlIHBhbmVscykKLSAqIG9yIGNvbW1hbmQgZW5naW5lIChm b3IgY21kIG1vZGUgcGFuZWxzKSBpcyBlbmFibGVkLgotICoKLSAqIFJldHVybjogZXJyb3IgY29k ZS4KLSAqLwotaW50IGRzaV9jdHJsX3NldF90cGdfc3RhdGUoc3RydWN0IGRzaV9jdHJsICpkc2lf Y3RybCwgYm9vbCBvbik7Ci0KLS8qKgotICogZHNpX2N0cmxfY21kX3RyYW5zZmVyKCkgLSBUcmFu c2ZlciBjb21tYW5kcyBvbiBEU0kgbGluawotICogQGRzaV9jdHJsOiAgICAgICAgICAgICBEU0kg Y29udHJvbGxlciBoYW5kbGUuCi0gKiBAbXNnOiAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgdG8g dHJhbnNmZXIgb24gRFNJIGxpbmsuCi0gKiBAZmxhZ3M6ICAgICAgICAgICAgICAgIE1vZGlmaWVy cyBmb3IgbWVzc2FnZSB0cmFuc2Zlci4KLSAqCi0gKiBDb21tYW5kIHRyYW5zZmVyIGNhbiBiZSBk b25lIG9ubHkgd2hlbiBjb21tYW5kIGVuZ2luZSBpcyBlbmFibGVkLiBUaGUKLSAqIHRyYW5zZmVy IEFQSSB3aWxsIHVudGlsIGVpdGhlciB0aGUgY29tbWFuZCB0cmFuc2ZlciBmaW5pc2hlcyBvciB0 aGUgdGltZW91dAotICogdmFsdWUgaXMgcmVhY2hlZC4gSWYgdGhlIHRyaWdnZXIgaXMgZGVmZXJy ZWQsIGl0IHdpbGwgcmV0dXJuIHdpdGhvdXQKLSAqIHRyaWdnZXJpbmcgdGhlIHRyYW5zZmVyLiBD b21tYW5kIHBhcmFtZXRlcnMgYXJlIHByb2dyYW1tZWQgdG8gaGFyZHdhcmUuCi0gKgotICogUmV0 dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfY21kX3RyYW5zZmVyKHN0cnVjdCBk c2lfY3RybCAqZHNpX2N0cmwsCi0JCQkgIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZywK LQkJCSAgdTMyIGZsYWdzKTsKLQotLyoqCi0gKiBkc2lfY3RybF9jbWRfdHhfdHJpZ2dlcigpIC0g VHJpZ2dlciBhIGRlZmVycmVkIGNvbW1hbmQuCi0gKiBAZHNpX2N0cmw6ICAgICAgICAgICAgICBE U0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAZmxhZ3M6ICAgICAgICAgICAgICAgICBNb2RpZmll cnMuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfY21kX3R4 X3RyaWdnZXIoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwgdTMyIGZsYWdzKTsKLQotLyoqCi0g KiBkc2lfY3RybF9zZXRfcG93ZXJfc3RhdGUoKSAtIHNldCBwb3dlciBzdGF0ZSBmb3IgZHNpIGNv bnRyb2xsZXIKLSAqIEBkc2lfY3RybDogICAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgot ICogQHN0YXRlOiAgICAgICAgICAgICBQb3dlciBzdGF0ZS4KLSAqCi0gKiBTZXQgcG93ZXIgc3Rh dGUgZm9yIERTSSBjb250cm9sbGVyLiBQb3dlciBzdGF0ZSBjYW4gYmUgY2hhbmdlZCBvbmx5IHdo ZW4KLSAqIENvbnRyb2xsZXIsIFZpZGVvIGFuZCBDb21tYW5kIGVuZ2luZXMgYXJlIHR1cm5lZCBv ZmYuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfc2V0X3Bv d2VyX3N0YXRlKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCQkgICAgIGVudW0gZHNpX3Bv d2VyX3N0YXRlIHN0YXRlKTsKLQotLyoqCi0gKiBkc2lfY3RybF9zZXRfY21kX2VuZ2luZV9zdGF0 ZSgpIC0gc2V0IGNvbW1hbmQgZW5naW5lIHN0YXRlCi0gKiBAZHNpX2N0cmw6ICAgICAgICAgICAg RFNJIENvbnRyb2xsZXIgaGFuZGxlLgotICogQHN0YXRlOiAgICAgICAgICAgICAgIEVuZ2luZSBz dGF0ZS4KLSAqCi0gKiBDb21tYW5kIGVuZ2luZSBzdGF0ZSBjYW4gYmUgbW9kaWZpZWQgb25seSB3 aGVuIERTSSBjb250cm9sbGVyIHBvd2VyIHN0YXRlIGlzCi0gKiBzZXQgdG8gRFNJX0NUUkxfUE9X RVJfTElOS19DTEtfT04uCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNp X2N0cmxfc2V0X2NtZF9lbmdpbmVfc3RhdGUoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJ CQkgIGVudW0gZHNpX2VuZ2luZV9zdGF0ZSBzdGF0ZSk7Ci0KLS8qKgotICogZHNpX2N0cmxfc2V0 X3ZpZF9lbmdpbmVfc3RhdGUoKSAtIHNldCB2aWRlbyBlbmdpbmUgc3RhdGUKLSAqIEBkc2lfY3Ry bDogICAgICAgICAgICBEU0kgQ29udHJvbGxlciBoYW5kbGUuCi0gKiBAc3RhdGU6ICAgICAgICAg ICAgICAgRW5naW5lIHN0YXRlLgotICoKLSAqIFZpZGVvIGVuZ2luZSBzdGF0ZSBjYW4gYmUgbW9k aWZpZWQgb25seSB3aGVuIERTSSBjb250cm9sbGVyIHBvd2VyIHN0YXRlIGlzCi0gKiBzZXQgdG8g RFNJX0NUUkxfUE9XRVJfTElOS19DTEtfT04uCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgot ICovCi1pbnQgZHNpX2N0cmxfc2V0X3ZpZF9lbmdpbmVfc3RhdGUoc3RydWN0IGRzaV9jdHJsICpk c2lfY3RybCwKLQkJCQkgIGVudW0gZHNpX2VuZ2luZV9zdGF0ZSBzdGF0ZSk7Ci0KLS8qKgotICog ZHNpX2N0cmxfc2V0X2hvc3RfZW5naW5lX3N0YXRlKCkgLSBzZXQgaG9zdCBlbmdpbmUgc3RhdGUK LSAqIEBkc2lfY3RybDogICAgICAgICAgICBEU0kgQ29udHJvbGxlciBoYW5kbGUuCi0gKiBAc3Rh dGU6ICAgICAgICAgICAgICAgRW5naW5lIHN0YXRlLgotICoKLSAqIEhvc3QgZW5naW5lIHN0YXRl IGNhbiBiZSBtb2RpZmllZCBvbmx5IHdoZW4gRFNJIGNvbnRyb2xsZXIgcG93ZXIgc3RhdGUgaXMK LSAqIHNldCB0byBEU0lfQ1RSTF9QT1dFUl9MSU5LX0NMS19PTiBhbmQgY21kLCB2aWRlbyBlbmdp bmVzIGFyZSBkaXNhYmxlZC4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBk c2lfY3RybF9zZXRfaG9zdF9lbmdpbmVfc3RhdGUoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwK LQkJCQkgICBlbnVtIGRzaV9lbmdpbmVfc3RhdGUgc3RhdGUpOwotCi0vKioKLSAqIGRzaV9jdHJs X3NldF91bHBzKCkgLSBzZXQgVUxQUyBzdGF0ZSBmb3IgRFNJIGxhbmVzLgotICogQGRzaV9jdHJs OiAgICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqIEBlbmFibGU6ICAgICAgICAgICBl bmFibGUvZGlzYWJsZSBVTFBTLgotICoKLSAqIFVMUFMgY2FuIGJlIGVuYWJsZWQvZGlzYWJsZWQg YWZ0ZXIgRFNJIGhvc3QgZW5naW5lIGlzIHR1cm5lZCBvbi4KLSAqCi0gKiBSZXR1cm46IGVycm9y IGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9zZXRfdWxwcyhzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9j dHJsLCBib29sIGVuYWJsZSk7Ci0KLS8qKgotICogZHNpX2N0cmxfY2xrX2NiX3JlZ2lzdGVyKCkg LSBSZWdpc3RlciBEU0kgY29udHJvbGxlciBjbGsgY29udHJvbCBjYWxsYmFjawotICogQGRzaV9j dHJsOiAgICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqIEBjbGtfX2NiOiAgICAgIFN0 cnVjdHVyZSBjb250YWluaW5nIGNhbGxiYWNrIGZvciBjbG9jayBjb250cm9sLgotICoKLSAqIFJl Z2lzdGVyIGNhbGwgZm9yIERTSSBjbG9jayBjb250cm9sCi0gKgotICogUmV0dXJuOiBlcnJvciBj b2RlLgotICovCi1pbnQgZHNpX2N0cmxfY2xrX2NiX3JlZ2lzdGVyKHN0cnVjdCBkc2lfY3RybCAq ZHNpX2N0cmwsCi0Jc3RydWN0IGNsa19jdHJsX2NiICpjbGtfY2IpOwotCi0vKioKLSAqIGRzaV9j dHJsX3NldF9jbGFtcF9zdGF0ZSgpIC0gc2V0IGNsYW1wIHN0YXRlIGZvciBEU0kgcGh5Ci0gKiBA ZHNpX2N0cmw6ICAgICAgICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqIEBlbmFibGU6 ICAgICAgICAgICAgICAgZW5hYmxlL2Rpc2FibGUgY2xhbXBpbmcuCi0gKiBAdWxwc19lbmFibGVk OiAgICAgICAgIHVscHMgc3RhdGUuCi0gKgotICogQ2xhbXBzIGNhbiBiZSBlbmFibGVkL2Rpc2Fi bGVkIHdoaWxlIERTSSBjb250cm9sbGVyIGlzIHN0aWxsIHR1cm5lZCBvbi4KLSAqCi0gKiBSZXR1 cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9zZXRfY2xhbXBfc3RhdGUoc3RydWN0 IGRzaV9jdHJsICpkc2lfQ3RybCwKLQkJYm9vbCBlbmFibGUsIGJvb2wgdWxwc19lbmFibGVkKTsK LQotLyoqCi0gKiBkc2lfY3RybF9zZXRfY2xvY2tfc291cmNlKCkgLSBzZXQgY2xvY2sgc291cmNl IGZwciBkc2kgbGluayBjbG9ja3MKLSAqIEBkc2lfY3RybDogICAgICAgIERTSSBjb250cm9sbGVy IGhhbmRsZS4KLSAqIEBzb3VyY2VfY2xrczogICAgIFNvdXJjZSBjbG9ja3MgZm9yIERTSSBsaW5r IGNsb2Nrcy4KLSAqCi0gKiBDbG9jayBzb3VyY2Ugc2hvdWxkIGJlIGNoYW5nZWQgd2hpbGUgbGlu ayBjbG9ja3MgYXJlIGRpc2FibGVkLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwot aW50IGRzaV9jdHJsX3NldF9jbG9ja19zb3VyY2Uoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwK LQkJCSAgICAgIHN0cnVjdCBkc2lfY2xrX2xpbmtfc2V0ICpzb3VyY2VfY2xrcyk7Ci0KLS8qKgot ICogZHNpX2N0cmxfZW5hYmxlX3N0YXR1c19pbnRlcnJ1cHQoKSAtIGVuYWJsZSBzdGF0dXMgaW50 ZXJydXB0cwotICogQGRzaV9jdHJsOiAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICog QGludHJfaWR4OiAgICAgICAgSW5kZXggaW50ZXJydXB0IHRvIGRpc2FibGUuCi0gKiBAZXZlbnRf aW5mbzogICAgICBQb2ludGVyIHRvIGV2ZW50IGNhbGxiYWNrIGRlZmluaXRpb24KLSAqLwotdm9p ZCBkc2lfY3RybF9lbmFibGVfc3RhdHVzX2ludGVycnVwdChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9j dHJsLAotCQl1aW50MzJfdCBpbnRyX2lkeCwgc3RydWN0IGRzaV9ldmVudF9jYl9pbmZvICpldmVu dF9pbmZvKTsKLQotLyoqCi0gKiBkc2lfY3RybF9kaXNhYmxlX3N0YXR1c19pbnRlcnJ1cHQoKSAt IGRpc2FibGUgc3RhdHVzIGludGVycnVwdHMKLSAqIEBkc2lfY3RybDogICAgICAgIERTSSBjb250 cm9sbGVyIGhhbmRsZS4KLSAqIEBpbnRyX2lkeDogICAgICAgIEluZGV4IGludGVycnVwdCB0byBk aXNhYmxlLgotICovCi12b2lkIGRzaV9jdHJsX2Rpc2FibGVfc3RhdHVzX2ludGVycnVwdCgKLQkJ c3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwgdWludDMyX3QgaW50cl9pZHgpOwotCi0vKioKLSAq IGRzaV9jdHJsX3NldHVwX21pc3IoKSAtIFNldHVwIGZyYW1lIE1JU1IKLSAqIEBkc2lfY3RybDog ICAgICAgICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqIEBlbmFibGU6ICAgICAgICAg ICAgICAgIGVuYWJsZS9kaXNhYmxlIE1JU1IuCi0gKiBAZnJhbWVfY291bnQ6ICAgICAgICAgICBO dW1iZXIgb2YgZnJhbWVzIHRvIGFjY3VtdWxhdGUgTUlTUi4KLSAqCi0gKiBSZXR1cm46IGVycm9y IGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9zZXR1cF9taXNyKHN0cnVjdCBkc2lfY3RybCAqZHNp X2N0cmwsCi0JCQlib29sIGVuYWJsZSwKLQkJCXUzMiBmcmFtZV9jb3VudCk7Ci0KLS8qKgotICog ZHNpX2N0cmxfY29sbGVjdF9taXNyKCkgLSBSZWFkIGZyYW1lIE1JU1IKLSAqIEBkc2lfY3RybDog ICAgICAgICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqCi0gKiBSZXR1cm46IE1JU1Ig dmFsdWUuCi0gKi8KLXUzMiBkc2lfY3RybF9jb2xsZWN0X21pc3Ioc3RydWN0IGRzaV9jdHJsICpk c2lfY3RybCk7Ci0KLS8qKgotICogZHNpX2N0cmxfZHJ2X3JlZ2lzdGVyKCkgLSByZWdpc3RlciBw bGF0Zm9ybSBkcml2ZXIgZm9yIGRzaSBjb250cm9sbGVyCi0gKi8KLXZvaWQgZHNpX2N0cmxfZHJ2 X3JlZ2lzdGVyKHZvaWQpOwotCi0vKioKLSAqIGRzaV9jdHJsX2Rydl91bnJlZ2lzdGVyKCkgLSB1 bnJlZ2lzdGVyIHBsYXRmb3JtIGRyaXZlcgotICovCi12b2lkIGRzaV9jdHJsX2Rydl91bnJlZ2lz dGVyKHZvaWQpOwotCi0jZW5kaWYgLyogX0RTSV9DVFJMX0hfICovCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsX2h3LmggYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsX2h3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDUzYjIwZjQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3Rh Z2luZy9kc2lfY3RybF9ody5oCisrKyAvZGV2L251bGwKQEAgLTEsNzUyICswLDAgQEAKLS8qCi0g KiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2 ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0g KgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaWZuZGVmIF9EU0lfQ1RSTF9IV19IXwot I2RlZmluZSBfRFNJX0NUUkxfSFdfSF8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2lu Y2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0jaW5jbHVk ZSA8bGludXgvYml0bWFwLmg+Ci0KLSNpbmNsdWRlICJkc2lfZGVmcy5oIgotCi0vKioKLSAqIE1v ZGlmaWVyIGZsYWcgZm9yIGNvbW1hbmQgdHJhbnNtaXNzaW9uLiBJZiB0aGlzIGZsYWcgaXMgc2V0 LCBjb21tYW5kCi0gKiBpbmZvcm1hdGlvbiBpcyBwcm9ncmFtbWVkIHRvIGhhcmR3YXJlIGFuZCB0 cmFuc21pc3Npb24gaXMgbm90IHRyaWdnZXJlZC4KLSAqIENhbGxlciBzaG91bGQgY2FsbCB0aGUg dHJpZ2dlcl9jb21tYW5kX2RtYSgpIHRvIHN0YXJ0IHRoZSB0cmFuc21pc3Npb24uIFRoaXMKLSAq IGZsYWcgaXMgdmFsZWQgZm9yIGtpY2tvZmZfY29tbWFuZCgpIGFuZCBraWNrb2ZmX2ZpZm9fY29t bWFuZCgpIG9wZXJhdGlvbnMuCi0gKi8KLSNkZWZpbmUgRFNJX0NUUkxfSFdfQ01EX1dBSVRfRk9S X1RSSUdHRVIgICAgICAgICAgICAweDEKLQotLyoqCi0gKiBlbnVtIGRzaV9jdHJsX3ZlcnNpb24g LSB2ZXJzaW9uIG9mIHRoZSBkc2kgaG9zdCBjb250cm9sbGVyCi0gKiBARFNJX0NUUkxfVkVSU0lP Tl9VTktOT1dOOiBVbmtub3duIGNvbnRyb2xsZXIgdmVyc2lvbgotICogQERTSV9DVFJMX1ZFUlNJ T05fMV80OiAgICAgRFNJIGhvc3QgdjEuNCBjb250cm9sbGVyCi0gKiBARFNJX0NUUkxfVkVSU0lP Tl8yXzA6ICAgICBEU0kgaG9zdCB2Mi4wIGNvbnRyb2xsZXIKLSAqIEBEU0lfQ1RSTF9WRVJTSU9O X01BWDogICAgIG1heCB2ZXJzaW9uCi0gKi8KLWVudW0gZHNpX2N0cmxfdmVyc2lvbiB7Ci0JRFNJ X0NUUkxfVkVSU0lPTl9VTktOT1dOLAotCURTSV9DVFJMX1ZFUlNJT05fMV80LAotCURTSV9DVFJM X1ZFUlNJT05fMl8wLAotCURTSV9DVFJMX1ZFUlNJT05fMl8yLAotCURTSV9DVFJMX1ZFUlNJT05f TUFYCi19OwotCi0vKioKLSAqIGVudW0gZHNpX2N0cmxfaHdfZmVhdHVyZXMgLSBmZWF0dXJlcyBz dXBwb3J0ZWQgYnkgZHNpIGhvc3QgY29udHJvbGxlcgotICogQERTSV9DVFJMX1ZJREVPX1RQRzog ICAgICAgICAgICAgICBUZXN0IHBhdHRlcm4gc3VwcG9ydCBmb3IgdmlkZW8gbW9kZS4KLSAqIEBE U0lfQ1RSTF9DTURfVFBHOiAgICAgICAgICAgICAgICAgVGVzdCBwYXR0ZXJuIHN1cHBvcnQgZm9y IGNvbW1hbmQgbW9kZS4KLSAqIEBEU0lfQ1RSTF9WQVJJQUJMRV9SRUZSRVNIX1JBVEU6ICAgdmFy aWFibGUgcGFuZWwgdGltaW5nCi0gKiBARFNJX0NUUkxfRFlOQU1JQ19SRUZSRVNIOiAgICAgICAg IHZhcmlhYmxlIHBpeGVsIGNsb2NrIHJhdGUKLSAqIEBEU0lfQ1RSTF9OVUxMX1BBQ0tFVF9JTlNF UlRJT046ICAgTlVMTCBwYWNrZXQgaW5zZXJ0aW9uCi0gKiBARFNJX0NUUkxfREVTS0VXX0NBTElC OiAgICAgICAgICAgIERlc2tldyBjYWxpYnJhdGlvbiBzdXBwb3J0Ci0gKiBARFNJX0NUUkxfRFBI WTogICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXIgc3VwcG9ydCBmb3IgRFBIWQotICogQERT SV9DVFJMX0NQSFk6ICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVyIHN1cHBvcnQgZm9yIENQ SFkKLSAqIEBEU0lfQ1RSTF9NQVhfRkVBVFVSRVM6Ci0gKi8KLWVudW0gZHNpX2N0cmxfaHdfZmVh dHVyZXMgewotCURTSV9DVFJMX1ZJREVPX1RQRywKLQlEU0lfQ1RSTF9DTURfVFBHLAotCURTSV9D VFJMX1ZBUklBQkxFX1JFRlJFU0hfUkFURSwKLQlEU0lfQ1RSTF9EWU5BTUlDX1JFRlJFU0gsCi0J RFNJX0NUUkxfTlVMTF9QQUNLRVRfSU5TRVJUSU9OLAotCURTSV9DVFJMX0RFU0tFV19DQUxJQiwK LQlEU0lfQ1RSTF9EUEhZLAotCURTSV9DVFJMX0NQSFksCi0JRFNJX0NUUkxfTUFYX0ZFQVRVUkVT Ci19OwotCi0vKioKLSAqIGVudW0gZHNpX3Rlc3RfcGF0dGVybiAtIHRlc3QgcGF0dGVybiB0eXBl Ci0gKiBARFNJX1RFU1RfUEFUVEVSTl9GSVhFRDogICAgIFRlc3QgcGF0dGVybiBpcyBmaXhlZCwg YmFzZWQgb24gaW5pdCB2YWx1ZS4KLSAqIEBEU0lfVEVTVF9QQVRURVJOX0lOQzogICAgICAgSW5j cmVtZW50YWwgdGVzdCBwYXR0ZXJuLCBiYXNlIG9uIGluaXQgdmFsdWUuCi0gKiBARFNJX1RFU1Rf UEFUVEVSTl9QT0xZOiAgICAgIFBhdHRlcm4gZ2VuZXJhdGVkIGZyb20gcG9seW5vbWlhbCBhbmQg aW5pdCB2YWwuCi0gKiBARFNJX1RFU1RfUEFUVEVSTl9NQVg6Ci0gKi8KLWVudW0gZHNpX3Rlc3Rf cGF0dGVybiB7Ci0JRFNJX1RFU1RfUEFUVEVSTl9GSVhFRCA9IDAsCi0JRFNJX1RFU1RfUEFUVEVS Tl9JTkMsCi0JRFNJX1RFU1RfUEFUVEVSTl9QT0xZLAotCURTSV9URVNUX1BBVFRFUk5fTUFYCi19 OwotCi0vKioKLSAqIGVudW0gZHNpX3N0YXR1c19pbnRfaW5kZXggLSBpbmRleCBvZiBpbnRlcnJ1 cHRzIGdlbmVyYXRlZCBieSBEU0kgY29udHJvbGxlcgotICogQERTSV9TSU5UX0NNRF9NT0RFX0RN QV9ET05FOiAgICAgICAgQ29tbWFuZCBtb2RlIERNQSBwYWNrZXRzIGFyZSBzZW50IG91dC4KLSAq IEBEU0lfU0lOVF9DTURfU1RSRUFNMF9GUkFNRV9ET05FOiAgIEEgZnJhbWUgb2YgY21kIG1vZGUg c3RyZWFtMCBpcyBzZW50IG91dC4KLSAqIEBEU0lfU0lOVF9DTURfU1RSRUFNMV9GUkFNRV9ET05F OiAgIEEgZnJhbWUgb2YgY21kIG1vZGUgc3RyZWFtMSBpcyBzZW50IG91dC4KLSAqIEBEU0lfU0lO VF9DTURfU1RSRUFNMl9GUkFNRV9ET05FOiAgIEEgZnJhbWUgb2YgY21kIG1vZGUgc3RyZWFtMiBp cyBzZW50IG91dC4KLSAqIEBEU0lfU0lOVF9WSURFT19NT0RFX0ZSQU1FX0RPTkU6ICAgIEEgZnJh bWUgb2YgdmlkZW8gbW9kZSBzdHJlYW0gaXMgc2VudCBvdXQuCi0gKiBARFNJX1NJTlRfQlRBX0RP TkU6ICAgICAgICAgICAgICAgICBBIEJUQSBpcyBjb21wbGV0ZWQuCi0gKiBARFNJX1NJTlRfQ01E X0ZSQU1FX0RPTkU6ICAgICAgICAgICBBIGZyYW1lIG9mIHNlbGVjdGVkIGNtZCBtb2RlIHN0cmVh bSBpcwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VudCBvdXQgYnkg TURQLgotICogQERTSV9TSU5UX0RZTl9SRUZSRVNIX0RPTkU6ICAgICAgICAgVGhlIGR5bmFtaWMg cmVmcmVzaCBvcGVyYXRpb24gY29tcGxldGVkLgotICogQERTSV9TSU5UX0RFU0tFV19ET05FOiAg ICAgICAgICAgICAgVGhlIGRlc2tldyBjYWxpYnJhdGlvbiBvcGVyYXRpb24gZG9uZS4KLSAqIEBE U0lfU0lOVF9EWU5fQkxBTktfRE1BX0RPTkU6ICAgICAgIFRoZSBkeW5hbWljIGJsYW5raW4gRE1B IG9wZXJhdGlvbiBoYXMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bXBsZXRlZC4KLSAqLwotZW51bSBkc2lfc3RhdHVzX2ludF9pbmRleCB7Ci0JRFNJX1NJTlRfQ01E X01PREVfRE1BX0RPTkUgPSAwLAotCURTSV9TSU5UX0NNRF9TVFJFQU0wX0ZSQU1FX0RPTkUgPSAx LAotCURTSV9TSU5UX0NNRF9TVFJFQU0xX0ZSQU1FX0RPTkUgPSAyLAotCURTSV9TSU5UX0NNRF9T VFJFQU0yX0ZSQU1FX0RPTkUgPSAzLAotCURTSV9TSU5UX1ZJREVPX01PREVfRlJBTUVfRE9ORSA9 IDQsCi0JRFNJX1NJTlRfQlRBX0RPTkUgPSA1LAotCURTSV9TSU5UX0NNRF9GUkFNRV9ET05FID0g NiwKLQlEU0lfU0lOVF9EWU5fUkVGUkVTSF9ET05FID0gNywKLQlEU0lfU0lOVF9ERVNLRVdfRE9O RSA9IDgsCi0JRFNJX1NJTlRfRFlOX0JMQU5LX0RNQV9ET05FID0gOSwKLQotCURTSV9TVEFUVVNf SU5URVJSVVBUX0NPVU5UCi19OwotCi0vKioKLSAqIGVudW0gZHNpX3N0YXR1c19pbnRfdHlwZSAt IHN0YXR1cyBpbnRlcnJ1cHRzIGdlbmVyYXRlZCBieSBEU0kgY29udHJvbGxlcgotICogQERTSV9D TURfTU9ERV9ETUFfRE9ORTogICAgICAgIENvbW1hbmQgbW9kZSBETUEgcGFja2V0cyBhcmUgc2Vu dCBvdXQuCi0gKiBARFNJX0NNRF9TVFJFQU0wX0ZSQU1FX0RPTkU6ICAgQSBmcmFtZSBvZiBjb21t YW5kIG1vZGUgc3RyZWFtMCBpcyBzZW50IG91dC4KLSAqIEBEU0lfQ01EX1NUUkVBTTFfRlJBTUVf RE9ORTogICBBIGZyYW1lIG9mIGNvbW1hbmQgbW9kZSBzdHJlYW0xIGlzIHNlbnQgb3V0LgotICog QERTSV9DTURfU1RSRUFNMl9GUkFNRV9ET05FOiAgIEEgZnJhbWUgb2YgY29tbWFuZCBtb2RlIHN0 cmVhbTIgaXMgc2VudCBvdXQuCi0gKiBARFNJX1ZJREVPX01PREVfRlJBTUVfRE9ORTogICAgQSBm cmFtZSBvZiB2aWRlbyBtb2RlIHN0cmVhbSBpcyBzZW50IG91dC4KLSAqIEBEU0lfQlRBX0RPTkU6 ICAgICAgICAgICAgICAgICBBIEJUQSBpcyBjb21wbGV0ZWQuCi0gKiBARFNJX0NNRF9GUkFNRV9E T05FOiAgICAgICAgICAgQSBmcmFtZSBvZiBzZWxlY3RlZCBjb21tYW5kIG1vZGUgc3RyZWFtIGlz Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VudCBvdXQgYnkgTURQLgotICog QERTSV9EWU5fUkVGUkVTSF9ET05FOiAgICAgICAgIFRoZSBkeW5hbWljIHJlZnJlc2ggb3BlcmF0 aW9uIGhhcyBjb21wbGV0ZWQuCi0gKiBARFNJX0RFU0tFV19ET05FOiAgICAgICAgICAgICAgVGhl IGRlc2tldyBjYWxpYnJhdGlvbiBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZAotICogQERTSV9EWU5f QkxBTktfRE1BX0RPTkU6ICAgICAgIFRoZSBkeW5hbWljIGJsYW5raW4gRE1BIG9wZXJhdGlvbiBo YXMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQuCi0gKi8KLWVu dW0gZHNpX3N0YXR1c19pbnRfdHlwZSB7Ci0JRFNJX0NNRF9NT0RFX0RNQV9ET05FID0gQklUKERT SV9TSU5UX0NNRF9NT0RFX0RNQV9ET05FKSwKLQlEU0lfQ01EX1NUUkVBTTBfRlJBTUVfRE9ORSA9 IEJJVChEU0lfU0lOVF9DTURfU1RSRUFNMF9GUkFNRV9ET05FKSwKLQlEU0lfQ01EX1NUUkVBTTFf RlJBTUVfRE9ORSA9IEJJVChEU0lfU0lOVF9DTURfU1RSRUFNMV9GUkFNRV9ET05FKSwKLQlEU0lf Q01EX1NUUkVBTTJfRlJBTUVfRE9ORSA9IEJJVChEU0lfU0lOVF9DTURfU1RSRUFNMl9GUkFNRV9E T05FKSwKLQlEU0lfVklERU9fTU9ERV9GUkFNRV9ET05FID0gQklUKERTSV9TSU5UX1ZJREVPX01P REVfRlJBTUVfRE9ORSksCi0JRFNJX0JUQV9ET05FID0gQklUKERTSV9TSU5UX0JUQV9ET05FKSwK LQlEU0lfQ01EX0ZSQU1FX0RPTkUgPSBCSVQoRFNJX1NJTlRfQ01EX0ZSQU1FX0RPTkUpLAotCURT SV9EWU5fUkVGUkVTSF9ET05FID0gQklUKERTSV9TSU5UX0RZTl9SRUZSRVNIX0RPTkUpLAotCURT SV9ERVNLRVdfRE9ORSA9IEJJVChEU0lfU0lOVF9ERVNLRVdfRE9ORSksCi0JRFNJX0RZTl9CTEFO S19ETUFfRE9ORSA9IEJJVChEU0lfU0lOVF9EWU5fQkxBTktfRE1BX0RPTkUpCi19OwotCi0vKioK LSAqIGVudW0gZHNpX2Vycm9yX2ludF9pbmRleCAtIGluZGV4IG9mIGVycm9yIGludGVycnVwdHMg ZnJvbSBEU0kgY29udHJvbGxlcgotICogQERTSV9FSU5UX1JEQktfU0lOR0xFX0VDQ19FUlI6ICAg ICAgICBTaW5nbGUgYml0IEVDQyBlcnJvciBpbiByZWFkIHBhY2tldC4KLSAqIEBEU0lfRUlOVF9S REJLX01VTFRJX0VDQ19FUlI6ICAgICAgICAgTXVsdGkgYml0IEVDQyBlcnJvciBpbiByZWFkIHBh Y2tldC4KLSAqIEBEU0lfRUlOVF9SREJLX0NSQ19FUlI6ICAgICAgICAgICAgICAgQ1JDIGVycm9y IGluIHJlYWQgcGFja2V0LgotICogQERTSV9FSU5UX1JEQktfSU5DT01QTEVURV9QS1Q6ICAgICAg ICBJbmNvbXBsZXRlIHJlYWQgcGFja2V0LgotICogQERTSV9FSU5UX1BFUklQSF9FUlJPUl9QS1Q6 ICAgICAgICAgICBFcnJvciBwYWNrZXQgcmV0dXJuZWQgZnJvbSBwZXJpcGhlcmFsLAotICogQERT SV9FSU5UX0xQX1JYX1RJTUVPVVQ6ICAgICAgICAgICAgICBMb3cgcG93ZXIgcmV2ZXJzZSB0cmFu c21pc3Npb24gdGltZW91dC4KLSAqIEBEU0lfRUlOVF9IU19UWF9USU1FT1VUOiAgICAgICAgICAg ICAgSGlnaCBzcGVlZCBmd2QgdHJhbnNtaXNzaW9uIHRpbWVvdXQuCi0gKiBARFNJX0VJTlRfQlRB X1RJTUVPVVQ6ICAgICAgICAgICAgICAgIEJUQSB0aW1lb3V0LgotICogQERTSV9FSU5UX1BMTF9V TkxPQ0s6ICAgICAgICAgICAgICAgICBQTEwgaGFzIHVubG9ja2VkLgotICogQERTSV9FSU5UX0RM TjBfRVNDX0VOVFJZX0VSUjogICAgICAgICBJbmNvcnJlY3QgTFAgUnggZXNjYXBlIGVudHJ5Lgot ICogQERTSV9FSU5UX0RMTjBfRVNDX1NZTkNfRVJSOiAgICAgICAgICBMUCBSeCBkYXRhIGlzIG5v dCBieXRlIGFsaWduZWQuCi0gKiBARFNJX0VJTlRfRExOMF9MUF9DT05UUk9MX0VSUjogICAgICAg IEluY29ycmVjdCBMUCBSeCBzdGF0ZSBzZXF1ZW5jZS4KLSAqIEBEU0lfRUlOVF9QRU5ESU5HX0hT X1RYX1RJTUVPVVQ6ICAgICAgUGVuZGluZyBIaWdoLXNwZWVkIHRyYW5zZmVyIHRpbWVvdXQuCi0g KiBARFNJX0VJTlRfSU5URVJMRUFWRV9PUF9DT05URU5USU9OOiAgIEludGVybGVhdmUgb3BlcmF0 aW9uIGNvbnRlbnRpb24uCi0gKiBARFNJX0VJTlRfQ01EX0RNQV9GSUZPX1VOREVSRkxPVzogICAg IENvbW1hbmQgbW9kZSBETUEgRklGTyB1bmRlcmZsb3cuCi0gKiBARFNJX0VJTlRfQ01EX01EUF9G SUZPX1VOREVSRkxPVzogICAgIENvbW1hbmQgTURQIEZJRk8gdW5kZXJmbG93IChmYWlsZWQgdG8K LSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZSBvbmUgY29t cGxldGUgbGluZSBmcm9tIE1EUCkuCi0gKiBARFNJX0VJTlRfRExOMF9IU19GSUZPX09WRVJGTE9X OiAgICAgIEhpZ2ggc3BlZWQgRklGTyBkYXRhIGxhbmUgMCBvdmVyZmxvd3MuCi0gKiBARFNJX0VJ TlRfRExOMV9IU19GSUZPX09WRVJGTE9XOiAgICAgIEhpZ2ggc3BlZWQgRklGTyBkYXRhIGxhbmUg MSBvdmVyZmxvd3MuCi0gKiBARFNJX0VJTlRfRExOMl9IU19GSUZPX09WRVJGTE9XOiAgICAgIEhp Z2ggc3BlZWQgRklGTyBkYXRhIGxhbmUgMiBvdmVyZmxvd3MuCi0gKiBARFNJX0VJTlRfRExOM19I U19GSUZPX09WRVJGTE9XOiAgICAgIEhpZ2ggc3BlZWQgRklGTyBkYXRhIGxhbmUgMyBvdmVyZmxv d3MuCi0gKiBARFNJX0VJTlRfRExOMF9IU19GSUZPX1VOREVSRkxPVzogICAgIEhpZ2ggc3BlZWQg RklGTyBkYXRhIGxhbmUgMCB1bmRlcmZsb3dzLgotICogQERTSV9FSU5UX0RMTjFfSFNfRklGT19V TkRFUkZMT1c6ICAgICBIaWdoIHNwZWVkIEZJRk8gZGF0YSBsYW5lIDEgdW5kZXJmbG93cy4KLSAq IEBEU0lfRUlOVF9ETE4yX0hTX0ZJRk9fVU5ERVJGTE9XOiAgICAgSGlnaCBzcGVlZCBGSUZPIGRh dGEgbGFuZSAyIHVuZGVyZmxvd3MuCi0gKiBARFNJX0VJTlRfRExOM19IU19GSUZPX1VOREVSRkxP VzogICAgIEhpZ2ggc3BlZWQgRklGTyBkYXRhIGxhbmUgMyB1bmRlZmxvd3MuCi0gKiBARFNJX0VJ TlRfRExOMF9MUDBfQ09OVEVOVElPTjogICAgICAgIFBIWSBsZXZlbCBjb250ZW50aW9uIHdoaWxl IGxhbmUgMCBsb3cuCi0gKiBARFNJX0VJTlRfRExOMV9MUDBfQ09OVEVOVElPTjogICAgICAgIFBI WSBsZXZlbCBjb250ZW50aW9uIHdoaWxlIGxhbmUgMSBsb3cuCi0gKiBARFNJX0VJTlRfRExOMl9M UDBfQ09OVEVOVElPTjogICAgICAgIFBIWSBsZXZlbCBjb250ZW50aW9uIHdoaWxlIGxhbmUgMiBs b3cuCi0gKiBARFNJX0VJTlRfRExOM19MUDBfQ09OVEVOVElPTjogICAgICAgIFBIWSBsZXZlbCBj b250ZW50aW9uIHdoaWxlIGxhbmUgMyBsb3cuCi0gKiBARFNJX0VJTlRfRExOMF9MUDFfQ09OVEVO VElPTjogICAgICAgIFBIWSBsZXZlbCBjb250ZW50aW9uIHdoaWxlIGxhbmUgMCBoaWdoLgotICog QERTSV9FSU5UX0RMTjFfTFAxX0NPTlRFTlRJT046ICAgICAgICBQSFkgbGV2ZWwgY29udGVudGlv biB3aGlsZSBsYW5lIDEgaGlnaC4KLSAqIEBEU0lfRUlOVF9ETE4yX0xQMV9DT05URU5USU9OOiAg ICAgICAgUEhZIGxldmVsIGNvbnRlbnRpb24gd2hpbGUgbGFuZSAyIGhpZ2guCi0gKiBARFNJX0VJ TlRfRExOM19MUDFfQ09OVEVOVElPTjogICAgICAgIFBIWSBsZXZlbCBjb250ZW50aW9uIHdoaWxl IGxhbmUgMyBoaWdoLgotICovCi1lbnVtIGRzaV9lcnJvcl9pbnRfaW5kZXggewotCURTSV9FSU5U X1JEQktfU0lOR0xFX0VDQ19FUlIgPSAwLAotCURTSV9FSU5UX1JEQktfTVVMVElfRUNDX0VSUiA9 IDEsCi0JRFNJX0VJTlRfUkRCS19DUkNfRVJSID0gMiwKLQlEU0lfRUlOVF9SREJLX0lOQ09NUExF VEVfUEtUID0gMywKLQlEU0lfRUlOVF9QRVJJUEhfRVJST1JfUEtUID0gNCwKLQlEU0lfRUlOVF9M UF9SWF9USU1FT1VUID0gNSwKLQlEU0lfRUlOVF9IU19UWF9USU1FT1VUID0gNiwKLQlEU0lfRUlO VF9CVEFfVElNRU9VVCA9IDcsCi0JRFNJX0VJTlRfUExMX1VOTE9DSyA9IDgsCi0JRFNJX0VJTlRf RExOMF9FU0NfRU5UUllfRVJSID0gOSwKLQlEU0lfRUlOVF9ETE4wX0VTQ19TWU5DX0VSUiA9IDEw LAotCURTSV9FSU5UX0RMTjBfTFBfQ09OVFJPTF9FUlIgPSAxMSwKLQlEU0lfRUlOVF9QRU5ESU5H X0hTX1RYX1RJTUVPVVQgPSAxMiwKLQlEU0lfRUlOVF9JTlRFUkxFQVZFX09QX0NPTlRFTlRJT04g PSAxMywKLQlEU0lfRUlOVF9DTURfRE1BX0ZJRk9fVU5ERVJGTE9XID0gMTQsCi0JRFNJX0VJTlRf Q01EX01EUF9GSUZPX1VOREVSRkxPVyA9IDE1LAotCURTSV9FSU5UX0RMTjBfSFNfRklGT19PVkVS RkxPVyA9IDE2LAotCURTSV9FSU5UX0RMTjFfSFNfRklGT19PVkVSRkxPVyA9IDE3LAotCURTSV9F SU5UX0RMTjJfSFNfRklGT19PVkVSRkxPVyA9IDE4LAotCURTSV9FSU5UX0RMTjNfSFNfRklGT19P VkVSRkxPVyA9IDE5LAotCURTSV9FSU5UX0RMTjBfSFNfRklGT19VTkRFUkZMT1cgPSAyMCwKLQlE U0lfRUlOVF9ETE4xX0hTX0ZJRk9fVU5ERVJGTE9XID0gMjEsCi0JRFNJX0VJTlRfRExOMl9IU19G SUZPX1VOREVSRkxPVyA9IDIyLAotCURTSV9FSU5UX0RMTjNfSFNfRklGT19VTkRFUkZMT1cgPSAy MywKLQlEU0lfRUlOVF9ETE4wX0xQMF9DT05URU5USU9OID0gMjQsCi0JRFNJX0VJTlRfRExOMV9M UDBfQ09OVEVOVElPTiA9IDI1LAotCURTSV9FSU5UX0RMTjJfTFAwX0NPTlRFTlRJT04gPSAyNiwK LQlEU0lfRUlOVF9ETE4zX0xQMF9DT05URU5USU9OID0gMjcsCi0JRFNJX0VJTlRfRExOMF9MUDFf Q09OVEVOVElPTiA9IDI4LAotCURTSV9FSU5UX0RMTjFfTFAxX0NPTlRFTlRJT04gPSAyOSwKLQlE U0lfRUlOVF9ETE4yX0xQMV9DT05URU5USU9OID0gMzAsCi0JRFNJX0VJTlRfRExOM19MUDFfQ09O VEVOVElPTiA9IDMxLAotCi0JRFNJX0VSUk9SX0lOVEVSUlVQVF9DT1VOVAotfTsKLQotLyoqCi0g KiBlbnVtIGRzaV9lcnJvcl9pbnRfdHlwZSAtIGVycm9yIGludGVycnVwdHMgZ2VuZXJhdGVkIGJ5 IERTSSBjb250cm9sbGVyCi0gKiBARFNJX1JEQktfU0lOR0xFX0VDQ19FUlI6ICAgICAgICBTaW5n bGUgYml0IEVDQyBlcnJvciBpbiByZWFkIHBhY2tldC4KLSAqIEBEU0lfUkRCS19NVUxUSV9FQ0Nf RVJSOiAgICAgICAgIE11bHRpIGJpdCBFQ0MgZXJyb3IgaW4gcmVhZCBwYWNrZXQuCi0gKiBARFNJ X1JEQktfQ1JDX0VSUjogICAgICAgICAgICAgICBDUkMgZXJyb3IgaW4gcmVhZCBwYWNrZXQuCi0g KiBARFNJX1JEQktfSU5DT01QTEVURV9QS1Q6ICAgICAgICBJbmNvbXBsZXRlIHJlYWQgcGFja2V0 LgotICogQERTSV9QRVJJUEhfRVJST1JfUEtUOiAgICAgICAgICAgRXJyb3IgcGFja2V0IHJldHVy bmVkIGZyb20gcGVyaXBoZXJhbCwKLSAqIEBEU0lfTFBfUlhfVElNRU9VVDogICAgICAgICAgICAg IExvdyBwb3dlciByZXZlcnNlIHRyYW5zbWlzc2lvbiB0aW1lb3V0LgotICogQERTSV9IU19UWF9U SU1FT1VUOiAgICAgICAgICAgICAgSGlnaCBzcGVlZCBmb3J3YXJkIHRyYW5zbWlzc2lvbiB0aW1l b3V0LgotICogQERTSV9CVEFfVElNRU9VVDogICAgICAgICAgICAgICAgQlRBIHRpbWVvdXQuCi0g KiBARFNJX1BMTF9VTkxPQ0s6ICAgICAgICAgICAgICAgICBQTEwgaGFzIHVubG9ja2VkLgotICog QERTSV9ETE4wX0VTQ19FTlRSWV9FUlI6ICAgICAgICAgSW5jb3JyZWN0IExQIFJ4IGVzY2FwZSBl bnRyeS4KLSAqIEBEU0lfRExOMF9FU0NfU1lOQ19FUlI6ICAgICAgICAgIExQIFJ4IGRhdGEgaXMg bm90IGJ5dGUgYWxpZ25lZC4KLSAqIEBEU0lfRExOMF9MUF9DT05UUk9MX0VSUjogICAgICAgIElu Y29ycmVjdCBMUCBSeCBzdGF0ZSBzZXF1ZW5jZS4KLSAqIEBEU0lfUEVORElOR19IU19UWF9USU1F T1VUOiAgICAgIFBlbmRpbmcgSGlnaC1zcGVlZCB0cmFuc2ZlciB0aW1lb3V0LgotICogQERTSV9J TlRFUkxFQVZFX09QX0NPTlRFTlRJT046ICAgSW50ZXJsZWF2ZSBvcGVyYXRpb24gY29udGVudGlv bi4KLSAqIEBEU0lfQ01EX0RNQV9GSUZPX1VOREVSRkxPVzogICAgIENvbW1hbmQgbW9kZSBETUEg RklGTyB1bmRlcmZsb3cuCi0gKiBARFNJX0NNRF9NRFBfRklGT19VTkRFUkZMT1c6ICAgICBDb21t YW5kIE1EUCBGSUZPIHVuZGVyZmxvdyAoZmFpbGVkIHRvCi0gKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZWNlaXZlIG9uZSBjb21wbGV0ZSBsaW5lIGZyb20gTURQKS4KLSAqIEBE U0lfRExOMF9IU19GSUZPX09WRVJGTE9XOiAgICAgIEhpZ2ggc3BlZWQgRklGTyBmb3IgZGF0YSBs YW5lIDAgb3ZlcmZsb3dzLgotICogQERTSV9ETE4xX0hTX0ZJRk9fT1ZFUkZMT1c6ICAgICAgSGln aCBzcGVlZCBGSUZPIGZvciBkYXRhIGxhbmUgMSBvdmVyZmxvd3MuCi0gKiBARFNJX0RMTjJfSFNf RklGT19PVkVSRkxPVzogICAgICBIaWdoIHNwZWVkIEZJRk8gZm9yIGRhdGEgbGFuZSAyIG92ZXJm bG93cy4KLSAqIEBEU0lfRExOM19IU19GSUZPX09WRVJGTE9XOiAgICAgIEhpZ2ggc3BlZWQgRklG TyBmb3IgZGF0YSBsYW5lIDMgb3ZlcmZsb3dzLgotICogQERTSV9ETE4wX0hTX0ZJRk9fVU5ERVJG TE9XOiAgICAgSGlnaCBzcGVlZCBGSUZPIGZvciBkYXRhIGxhbmUgMCB1bmRlcmZsb3dzLgotICog QERTSV9ETE4xX0hTX0ZJRk9fVU5ERVJGTE9XOiAgICAgSGlnaCBzcGVlZCBGSUZPIGZvciBkYXRh IGxhbmUgMSB1bmRlcmZsb3dzLgotICogQERTSV9ETE4yX0hTX0ZJRk9fVU5ERVJGTE9XOiAgICAg SGlnaCBzcGVlZCBGSUZPIGZvciBkYXRhIGxhbmUgMiB1bmRlcmZsb3dzLgotICogQERTSV9ETE4z X0hTX0ZJRk9fVU5ERVJGTE9XOiAgICAgSGlnaCBzcGVlZCBGSUZPIGZvciBkYXRhIGxhbmUgMyB1 bmRlZmxvd3MuCi0gKiBARFNJX0RMTjBfTFAwX0NPTlRFTlRJT046ICAgICAgICBQSFkgbGV2ZWwg Y29udGVudGlvbiB3aGlsZSBsYW5lIDAgaXMgbG93LgotICogQERTSV9ETE4xX0xQMF9DT05URU5U SU9OOiAgICAgICAgUEhZIGxldmVsIGNvbnRlbnRpb24gd2hpbGUgbGFuZSAxIGlzIGxvdy4KLSAq IEBEU0lfRExOMl9MUDBfQ09OVEVOVElPTjogICAgICAgIFBIWSBsZXZlbCBjb250ZW50aW9uIHdo aWxlIGxhbmUgMiBpcyBsb3cuCi0gKiBARFNJX0RMTjNfTFAwX0NPTlRFTlRJT046ICAgICAgICBQ SFkgbGV2ZWwgY29udGVudGlvbiB3aGlsZSBsYW5lIDMgaXMgbG93LgotICogQERTSV9ETE4wX0xQ MV9DT05URU5USU9OOiAgICAgICAgUEhZIGxldmVsIGNvbnRlbnRpb24gd2hpbGUgbGFuZSAwIGlz IGhpZ2guCi0gKiBARFNJX0RMTjFfTFAxX0NPTlRFTlRJT046ICAgICAgICBQSFkgbGV2ZWwgY29u dGVudGlvbiB3aGlsZSBsYW5lIDEgaXMgaGlnaC4KLSAqIEBEU0lfRExOMl9MUDFfQ09OVEVOVElP TjogICAgICAgIFBIWSBsZXZlbCBjb250ZW50aW9uIHdoaWxlIGxhbmUgMiBpcyBoaWdoLgotICog QERTSV9ETE4zX0xQMV9DT05URU5USU9OOiAgICAgICAgUEhZIGxldmVsIGNvbnRlbnRpb24gd2hp bGUgbGFuZSAzIGlzIGhpZ2guCi0gKi8KLWVudW0gZHNpX2Vycm9yX2ludF90eXBlIHsKLQlEU0lf UkRCS19TSU5HTEVfRUNDX0VSUiA9IEJJVChEU0lfRUlOVF9SREJLX1NJTkdMRV9FQ0NfRVJSKSwK LQlEU0lfUkRCS19NVUxUSV9FQ0NfRVJSID0gQklUKERTSV9FSU5UX1JEQktfTVVMVElfRUNDX0VS UiksCi0JRFNJX1JEQktfQ1JDX0VSUiA9IEJJVChEU0lfRUlOVF9SREJLX0NSQ19FUlIpLAotCURT SV9SREJLX0lOQ09NUExFVEVfUEtUID0gQklUKERTSV9FSU5UX1JEQktfSU5DT01QTEVURV9QS1Qp LAotCURTSV9QRVJJUEhfRVJST1JfUEtUID0gQklUKERTSV9FSU5UX1BFUklQSF9FUlJPUl9QS1Qp LAotCURTSV9MUF9SWF9USU1FT1VUID0gQklUKERTSV9FSU5UX0xQX1JYX1RJTUVPVVQpLAotCURT SV9IU19UWF9USU1FT1VUID0gQklUKERTSV9FSU5UX0hTX1RYX1RJTUVPVVQpLAotCURTSV9CVEFf VElNRU9VVCA9IEJJVChEU0lfRUlOVF9CVEFfVElNRU9VVCksCi0JRFNJX1BMTF9VTkxPQ0sgPSBC SVQoRFNJX0VJTlRfUExMX1VOTE9DSyksCi0JRFNJX0RMTjBfRVNDX0VOVFJZX0VSUiA9IEJJVChE U0lfRUlOVF9ETE4wX0VTQ19FTlRSWV9FUlIpLAotCURTSV9ETE4wX0VTQ19TWU5DX0VSUiA9IEJJ VChEU0lfRUlOVF9ETE4wX0VTQ19TWU5DX0VSUiksCi0JRFNJX0RMTjBfTFBfQ09OVFJPTF9FUlIg PSBCSVQoRFNJX0VJTlRfRExOMF9MUF9DT05UUk9MX0VSUiksCi0JRFNJX1BFTkRJTkdfSFNfVFhf VElNRU9VVCA9IEJJVChEU0lfRUlOVF9QRU5ESU5HX0hTX1RYX1RJTUVPVVQpLAotCURTSV9JTlRF UkxFQVZFX09QX0NPTlRFTlRJT04gPSBCSVQoRFNJX0VJTlRfSU5URVJMRUFWRV9PUF9DT05URU5U SU9OKSwKLQlEU0lfQ01EX0RNQV9GSUZPX1VOREVSRkxPVyA9IEJJVChEU0lfRUlOVF9DTURfRE1B X0ZJRk9fVU5ERVJGTE9XKSwKLQlEU0lfQ01EX01EUF9GSUZPX1VOREVSRkxPVyA9IEJJVChEU0lf RUlOVF9DTURfTURQX0ZJRk9fVU5ERVJGTE9XKSwKLQlEU0lfRExOMF9IU19GSUZPX09WRVJGTE9X ID0gQklUKERTSV9FSU5UX0RMTjBfSFNfRklGT19PVkVSRkxPVyksCi0JRFNJX0RMTjFfSFNfRklG T19PVkVSRkxPVyA9IEJJVChEU0lfRUlOVF9ETE4xX0hTX0ZJRk9fT1ZFUkZMT1cpLAotCURTSV9E TE4yX0hTX0ZJRk9fT1ZFUkZMT1cgPSBCSVQoRFNJX0VJTlRfRExOMl9IU19GSUZPX09WRVJGTE9X KSwKLQlEU0lfRExOM19IU19GSUZPX09WRVJGTE9XID0gQklUKERTSV9FSU5UX0RMTjNfSFNfRklG T19PVkVSRkxPVyksCi0JRFNJX0RMTjBfSFNfRklGT19VTkRFUkZMT1cgPSBCSVQoRFNJX0VJTlRf RExOMF9IU19GSUZPX1VOREVSRkxPVyksCi0JRFNJX0RMTjFfSFNfRklGT19VTkRFUkZMT1cgPSBC SVQoRFNJX0VJTlRfRExOMV9IU19GSUZPX1VOREVSRkxPVyksCi0JRFNJX0RMTjJfSFNfRklGT19V TkRFUkZMT1cgPSBCSVQoRFNJX0VJTlRfRExOMl9IU19GSUZPX1VOREVSRkxPVyksCi0JRFNJX0RM TjNfSFNfRklGT19VTkRFUkZMT1cgPSBCSVQoRFNJX0VJTlRfRExOM19IU19GSUZPX1VOREVSRkxP VyksCi0JRFNJX0RMTjBfTFAwX0NPTlRFTlRJT04gPSBCSVQoRFNJX0VJTlRfRExOMF9MUDBfQ09O VEVOVElPTiksCi0JRFNJX0RMTjFfTFAwX0NPTlRFTlRJT04gPSBCSVQoRFNJX0VJTlRfRExOMV9M UDBfQ09OVEVOVElPTiksCi0JRFNJX0RMTjJfTFAwX0NPTlRFTlRJT04gPSBCSVQoRFNJX0VJTlRf RExOMl9MUDBfQ09OVEVOVElPTiksCi0JRFNJX0RMTjNfTFAwX0NPTlRFTlRJT04gPSBCSVQoRFNJ X0VJTlRfRExOM19MUDBfQ09OVEVOVElPTiksCi0JRFNJX0RMTjBfTFAxX0NPTlRFTlRJT04gPSBC SVQoRFNJX0VJTlRfRExOMF9MUDFfQ09OVEVOVElPTiksCi0JRFNJX0RMTjFfTFAxX0NPTlRFTlRJ T04gPSBCSVQoRFNJX0VJTlRfRExOMV9MUDFfQ09OVEVOVElPTiksCi0JRFNJX0RMTjJfTFAxX0NP TlRFTlRJT04gPSBCSVQoRFNJX0VJTlRfRExOMl9MUDFfQ09OVEVOVElPTiksCi0JRFNJX0RMTjNf TFAxX0NPTlRFTlRJT04gPSBCSVQoRFNJX0VJTlRfRExOM19MUDFfQ09OVEVOVElPTiksCi19Owot Ci0vKioKLSAqIHN0cnVjdCBkc2lfY3RybF9jbWRfZG1hX2luZm8gLSBjb21tYW5kIGJ1ZmZlciBp bmZvcm1hdGlvbgotICogQG9mZnNldDogICAgICAgIElPTU1VIFZBIGZvciBjb21tYW5kIGJ1ZmZl ciBhZGRyZXNzLgotICogQGxlbmd0aDogICAgICAgIExlbmd0aCBvZiB0aGUgY29tbWFuZCBidWZm ZXIuCi0gKiBAZW5fYnJvYWRjYXN0OiAgRW5hYmxlIGJyb2FkY2FzdCBtb2RlIGlmIHNldCB0byB0 cnVlLgotICogQGlzX21hc3RlcjogICAgIElzIG1hc3RlciBpbiBicm9hZGNhc3QgbW9kZS4KLSAq IEB1c2VfbHBtOiAgICAgICBVc2UgbG93IHBvd2VyIG1vZGUgZm9yIGNvbW1hbmQgdHJhbnNtaXNz aW9uLgotICovCi1zdHJ1Y3QgZHNpX2N0cmxfY21kX2RtYV9pbmZvIHsKLQl1MzIgb2Zmc2V0Owot CXUzMiBsZW5ndGg7Ci0JYm9vbCBlbl9icm9hZGNhc3Q7Ci0JYm9vbCBpc19tYXN0ZXI7Ci0JYm9v bCB1c2VfbHBtOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX2N0cmxfY21kX2RtYV9maWZvX2lu Zm8gLSBjb21tYW5kIHBheWxvYWQgdHAgYmUgc2VudCB1c2luZyBGSUZPCi0gKiBAY29tbWFuZDog ICAgICAgIFZBIGZvciBjb21tYW5kIGJ1ZmZlci4KLSAqIEBzaXplOiAgICAgICAgICAgU2l6ZSBv ZiB0aGUgY29tbWFuZCBidWZmZXIuCi0gKiBAZW5fYnJvYWRjYXN0OiAgIEVuYWJsZSBicm9hZGNh c3QgbW9kZSBpZiBzZXQgdG8gdHJ1ZS4KLSAqIEBpc19tYXN0ZXI6ICAgICAgSXMgbWFzdGVyIGlu IGJyb2FkY2FzdCBtb2RlLgotICogQHVzZV9scG06ICAgICAgICBVc2UgbG93IHBvd2VyIG1vZGUg Zm9yIGNvbW1hbmQgdHJhbnNtaXNzaW9uLgotICovCi1zdHJ1Y3QgZHNpX2N0cmxfY21kX2RtYV9m aWZvX2luZm8gewotCXUzMiAqY29tbWFuZDsKLQl1MzIgc2l6ZTsKLQlib29sIGVuX2Jyb2FkY2Fz dDsKLQlib29sIGlzX21hc3RlcjsKLQlib29sIHVzZV9scG07Ci19OwotCi1zdHJ1Y3QgZHNpX2N0 cmxfaHc7Ci0KLXN0cnVjdCBjdHJsX3VscHNfY29uZmlnX29wcyB7Ci0JLyoqCi0JICogdWxwc19y ZXF1ZXN0KCkgLSByZXF1ZXN0IHVscHMgZW50cnkgZm9yIHNwZWNpZmllZCBsYW5lcwotCSAqIEBj dHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0J ICogQGxhbmVzOiAgICAgICAgIE9SZWQgbGlzdCBvZiBsYW5lcyAoZW51bSBkc2lfZGF0YV9sYW5l cykgd2hpY2ggbmVlZAotCSAqICAgICAgICAgICAgICAgICB0byBlbnRlciBVTFBTLgotCSAqCi0J ICogQ2FsbGVyIHNob3VsZCBjaGVjayBpZiBsYW5lcyBhcmUgaW4gVUxQUyBtb2RlIGJ5IGNhbGxp bmcKLQkgKiBnZXRfbGFuZXNfaW5fdWxwcygpIG9wZXJhdGlvbi4KLQkgKi8KLQl2b2lkICgqdWxw c19yZXF1ZXN0KShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIHUzMiBsYW5lcyk7Ci0KLQkvKioK LQkgKiB1bHBzX2V4aXQoKSAtIGV4aXQgVUxQUyBvbiBzcGVjaWZpZWQgbGFuZXMKLQkgKiBAY3Ry bDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAq IEBsYW5lczogICAgICAgICBPUmVkIGxpc3Qgb2YgbGFuZXMgKGVudW0gZHNpX2RhdGFfbGFuZXMp IHdoaWNoIG5lZWQKLQkgKiAgICAgICAgICAgICAgICAgdG8gZXhpdCBVTFBTLgotCSAqCi0JICog Q2FsbGVyIHNob3VsZCBjaGVjayBpZiBsYW5lcyBhcmUgaW4gYWN0aXZlIG1vZGUgYnkgY2FsbGlu ZwotCSAqIGdldF9sYW5lc19pbl91bHBzKCkgb3BlcmF0aW9uLgotCSAqLwotCXZvaWQgKCp1bHBz X2V4aXQpKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwgdTMyIGxhbmVzKTsKLQotCS8qKgotCSAq IGdldF9sYW5lc19pbl91bHBzKCkgLSByZXR1cm5zIHRoZSBsaXN0IG9mIGxhbmVzIGluIFVMUFMg bW9kZQotCSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3Qg aGFyZHdhcmUuCi0JICoKLQkgKiBSZXR1cm5zIGFuIE9SZWQgbGlzdCBvZiBsYW5lcyAoZW51bSBk c2lfZGF0YV9sYW5lcykgdGhhdCBhcmUgaW4gVUxQUwotCSAqIHN0YXRlLiBJZiAwIGlzIHJldHVy bmVkLCBhbGwgdGhlIGxhbmVzIGFyZSBhY3RpdmUuCi0JICoKLQkgKiBSZXR1cm46IExpc3Qgb2Yg bGFuZXMgaW4gVUxQUyBzdGF0ZS4KLQkgKi8KLQl1MzIgKCpnZXRfbGFuZXNfaW5fdWxwcykoc3Ry dWN0IGRzaV9jdHJsX2h3ICpjdHJsKTsKLX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9jdHJsX2h3 X29wcyAtIG9wZXJhdGlvbnMgc3VwcG9ydGVkIGJ5IGRzaSBob3N0IGhhcmR3YXJlCi0gKi8KLXN0 cnVjdCBkc2lfY3RybF9od19vcHMgewotCi0JLyoqCi0JICogaG9zdF9zZXR1cCgpIC0gU2V0dXAg RFNJIGhvc3QgY29uZmlndXJhdGlvbgotCSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIGNv bnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAY29uZmlnOiAgICAgICAgQ29uZmlndXJhdGlv biBmb3IgRFNJIGhvc3QgY29udHJvbGxlcgotCSAqLwotCXZvaWQgKCpob3N0X3NldHVwKShzdHJ1 Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkgICBzdHJ1Y3QgZHNpX2hvc3RfY29tbW9uX2NmZyAq Y29uZmlnKTsKLQotCS8qKgotCSAqIHZpZGVvX2VuZ2luZV9lbigpIC0gZW5hYmxlIERTSSB2aWRl byBlbmdpbmUKLQkgKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byBjb250cm9sbGVyIGhvc3Qg aGFyZHdhcmUuCi0JICogQG9uOiAgICAgICAgICAgIEVuYWJsZS9kaXNhYmVsIHZpZGVvIGVuZ2lu ZS4KLQkgKi8KLQl2b2lkICgqdmlkZW9fZW5naW5lX2VuKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0 cmwsIGJvb2wgb24pOwotCi0JLyoqCi0JICogdmlkZW9fZW5naW5lX3NldHVwKCkgLSBTZXR1cCBk c2kgaG9zdCBjb250cm9sbGVyIGZvciB2aWRlbyBtb2RlCi0JICogQGN0cmw6ICAgICAgICAgIFBv aW50ZXIgdG8gY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAqIEBjb21tb25fY2ZnOiAgICBD b21tb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgotCSAqIEBjZmc6ICAgICAgICAgICBWaWRl byBtb2RlIGNvbmZpZ3VyYXRpb24uCi0JICoKLQkgKiBTZXQgdXAgRFNJIHZpZGVvIGVuZ2luZSB3 aXRoIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gQ29udHJvbGxlciBhbmQKLQkgKiB2aWRlbyBl bmdpbmUgYXJlIG5vdCBlbmFibGVkIGFzIHBhcnQgb2YgdGhpcyBmdW5jdGlvbi4KLQkgKi8KLQl2 b2lkICgqdmlkZW9fZW5naW5lX3NldHVwKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJ ICAgc3RydWN0IGRzaV9ob3N0X2NvbW1vbl9jZmcgKmNvbW1vbl9jZmcsCi0JCQkJICAgc3RydWN0 IGRzaV92aWRlb19lbmdpbmVfY2ZnICpjZmcpOwotCi0JLyoqCi0JICogc2V0X3ZpZGVvX3RpbWlu ZygpIC0gc2V0IHVwIHRoZSB0aW1pbmcgZm9yIHZpZGVvIGZyYW1lCi0JICogQGN0cmw6ICAgICAg ICAgIFBvaW50ZXIgdG8gY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAqIEBtb2RlOiAgICAg ICAgICBWaWRlbyBtb2RlIGluZm9ybWF0aW9uLgotCSAqCi0JICogU2V0IHVwIHRoZSB2aWRlbyB0 aW1pbmcgcGFyYW1ldGVycyBmb3IgdGhlIERTSSB2aWRlbyBtb2RlIG9wZXJhdGlvbi4KLQkgKi8K LQl2b2lkICgqc2V0X3ZpZGVvX3RpbWluZykoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJ CSBzdHJ1Y3QgZHNpX21vZGVfaW5mbyAqbW9kZSk7Ci0KLQkvKioKLQkgKiBjbWRfZW5naW5lX3Nl dHVwKCkgLSBzZXR1cCBkc2kgaG9zdCBjb250cm9sbGVyIGZvciBjb21tYW5kIG1vZGUKLQkgKiBA Y3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgot CSAqIEBjb21tb25fY2ZnOiAgICBDb21tb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgotCSAq IEBjZmc6ICAgICAgICAgICBDb21tYW5kIG1vZGUgY29uZmlndXJhdGlvbi4KLQkgKgotCSAqIFNl dHVwIERTSSBDTUQgZW5naW5lIHdpdGggYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiBDb250cm9s bGVyIGFuZAotCSAqIGNvbW1hbmQgZW5naW5lIGFyZSBub3QgZW5hYmxlZCBhcyBwYXJ0IG9mIHRo aXMgZnVuY3Rpb24uCi0JICovCi0Jdm9pZCAoKmNtZF9lbmdpbmVfc2V0dXApKHN0cnVjdCBkc2lf Y3RybF9odyAqY3RybCwKLQkJCQkgc3RydWN0IGRzaV9ob3N0X2NvbW1vbl9jZmcgKmNvbW1vbl9j ZmcsCi0JCQkJIHN0cnVjdCBkc2lfY21kX2VuZ2luZV9jZmcgKmNmZyk7Ci0KLQkvKioKLQkgKiBz ZXR1cF9jbWRfc3RyZWFtKCkgLSBzZXQgdXAgcGFyYW1ldGVycyBmb3IgY29tbWFuZCBwaXhlbCBz dHJlYW1zCi0JICogQGN0cmw6ICAgICAgICAgICAgICBQb2ludGVyIHRvIGNvbnRyb2xsZXIgaG9z dCBoYXJkd2FyZS4KLQkgKiBAbW9kZTogICAgICAgICAgICAgIFBvaW50ZXIgdG8gbW9kZSBpbmZv cm1hdGlvbi4KLQkgKiBAaF9zdHJpZGU6ICAgICAgICAgIEhvcml6b250YWwgc3RyaWRlIGluIGJ5 dGVzLgotCSAqIEB2Y19pZDogICAgICAgICAgICAgc3RyZWFtX2lkLgotCSAqCi0JICogU2V0dXAg cGFyYW1ldGVycyBmb3IgY29tbWFuZCBtb2RlIHBpeGVsIHN0cmVhbSBzaXplLgotCSAqLwotCXZv aWQgKCpzZXR1cF9jbWRfc3RyZWFtKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJIHN0 cnVjdCBkc2lfbW9kZV9pbmZvICptb2RlLAotCQkJCSB1MzIgaF9zdHJpZGUsCi0JCQkJIHUzMiB2 Y19pZCwKLQkJCQkgc3RydWN0IGRzaV9yZWN0ICpyb2kpOwotCi0JLyoqCi0JICogY3RybF9lbigp IC0gZW5hYmxlIERTSSBjb250cm9sbGVyIGVuZ2luZQotCSAqIEBjdHJsOiAgICAgICAgICBQb2lu dGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQG9uOiAgICAgICAgICAg IHR1cm4gb24vb2ZmIHRoZSBEU0kgY29udHJvbGxlciBlbmdpbmUuCi0JICovCi0Jdm9pZCAoKmN0 cmxfZW4pKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwgYm9vbCBvbik7Ci0KLQkvKioKLQkgKiBj bWRfZW5naW5lX2VuKCkgLSBlbmFibGUgRFNJIGNvbnRyb2xsZXIgY29tbWFuZCBlbmdpbmUKLQkg KiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJl LgotCSAqIEBvbjogICAgICAgICAgICBUdXJuIG9uL29mZiB0aGUgRFNJIGNvbW1hbmQgZW5naW5l LgotCSAqLwotCXZvaWQgKCpjbWRfZW5naW5lX2VuKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmws IGJvb2wgb24pOwotCi0JLyoqCi0JICogcGh5X3N3X3Jlc2V0KCkgLSBwZXJmb3JtIGEgc29mdCBy ZXNldCBvbiB0aGUgUEhZLgotCSAqIEBjdHJsOiAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJv bGxlciBob3N0IGhhcmR3YXJlLgotCSAqLwotCXZvaWQgKCpwaHlfc3dfcmVzZXQpKHN0cnVjdCBk c2lfY3RybF9odyAqY3RybCk7Ci0KLQkvKioKLQkgKiBkZWJ1Z19idXMoKSAtIGdldCBkc2kgZGVi dWcgYnVzIHN0YXR1cy4KLQkgKiBAY3RybDogICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xs ZXIgaG9zdCBoYXJkd2FyZS4KLQkgKi8KLQl2b2lkICgqZGVidWdfYnVzKShzdHJ1Y3QgZHNpX2N0 cmxfaHcgKmN0cmwpOwotCi0JLyoqCi0JICogc29mdF9yZXNldCgpIC0gcGVyZm9ybSBhIHNvZnQg cmVzZXQgb24gRFNJIGNvbnRyb2xsZXIKLQkgKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0 aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAqCi0JICogVGhlIHZpZGVvLCBjb21tYW5k IGFuZCBjb250cm9sbGVyIGVuZ2luZXMgd2lsbCBiZSBkaXNhYmxlZCBiZWZvcmUgdGhlCi0JICog cmVzZXQgaXMgdHJpZ2dlcmVkLiBBZnRlciwgdGhlIGVuZ2luZXMgd2lsbCBiZSByZS1lbmFibGVk IHRvIHRoZSBzYW1lCi0JICogc3RhdGUgYXMgYmVmb3JlIHRoZSByZXNldC4KLQkgKgotCSAqIElm IHRoZSByZXNldCBpcyBkb25lIHdoaWxlIE1EUCB0aW1pbmcgZW5naW5lIGlzIHR1cm5lZCBvbiwg dGhlIHZpZGVvCi0JICogZW5naW5lIHNob3VsZCBiZSByZS1lbmFibGVkIG9ubHkgZHVyaW5nIHRo ZSB2ZXJ0aWNhbCBibGFua2luZyB0aW1lLgotCSAqLwotCXZvaWQgKCpzb2Z0X3Jlc2V0KShzdHJ1 Y3QgZHNpX2N0cmxfaHcgKmN0cmwpOwotCi0JLyoqCi0JICogc2V0dXBfbGFuZV9tYXAoKSAtIHNl dHVwIG1hcHBpbmcgYmV0d2VlbiBsb2dpY2FsIGFuZCBwaHlzaWNhbCBsYW5lcwotCSAqIEBjdHJs OiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICog QGxhbmVfbWFwOiAgICAgIFN0cnVjdHVyZSBkZWZpbmluZyB0aGUgbWFwcGluZyBiZXR3ZWVuIERT SSBsb2dpY2FsCi0JICogICAgICAgICAgICAgICAgIGxhbmVzIGFuZCBwaHlzaWNhbCBsYW5lcy4K LQkgKi8KLQl2b2lkICgqc2V0dXBfbGFuZV9tYXApKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwK LQkJCSAgICAgICBzdHJ1Y3QgZHNpX2xhbmVfbWFwICpsYW5lX21hcCk7Ci0KLQkvKioKLQkgKiBr aWNrb2ZmX2NvbW1hbmQoKSAtIHRyYW5zbWl0cyBjb21tYW5kcyBzdG9yZWQgaW4gbWVtb3J5Ci0J ICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2Fy ZS4KLQkgKiBAY21kOiAgICAgICAgICAgQ29tbWFuZCBpbmZvcm1hdGlvbi4KLQkgKiBAZmxhZ3M6 ICAgICAgICAgTW9kaWZpZXJzIGZvciBjb21tYW5kIHRyYW5zbWlzc2lvbi4KLQkgKgotCSAqIFRo ZSBjb250cm9sbGVyIGhhcmR3YXJlIGlzIHByb2dyYW1tZWQgd2l0aCBhZGRyZXNzIGFuZCBzaXpl IG9mIHRoZQotCSAqIGNvbW1hbmQgYnVmZmVyLiBUaGUgdHJhbnNtaXNzaW9uIGlzIGtpY2tlZCBv ZmYgaWYKLQkgKiBEU0lfQ1RSTF9IV19DTURfV0FJVF9GT1JfVFJJR0dFUiBmbGFnIGlzIG5vdCBz ZXQuIElmIHRoaXMgZmxhZyBpcwotCSAqIHNldCwgY2FsbGVyIHNob3VsZCBtYWtlIGEgc2VwYXJh dGUgY2FsbCB0byB0cmlnZ2VyX2NvbW1hbmRfZG1hKCkgdG8KLQkgKiB0cmFuc21pdCB0aGUgY29t bWFuZC4KLQkgKi8KLQl2b2lkICgqa2lja29mZl9jb21tYW5kKShzdHJ1Y3QgZHNpX2N0cmxfaHcg KmN0cmwsCi0JCQkJc3RydWN0IGRzaV9jdHJsX2NtZF9kbWFfaW5mbyAqY21kLAotCQkJCXUzMiBm bGFncyk7Ci0KLQkvKioKLQkgKiBraWNrb2ZmX2ZpZm9fY29tbWFuZCgpIC0gdHJhbnNtaXRzIGEg Y29tbWFuZCB1c2luZyBGSUZPIGluIGRzaQotCSAqICAgICAgICAgICAgICAgICAgICAgICAgICBo YXJkd2FyZS4KLQkgKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBo b3N0IGhhcmR3YXJlLgotCSAqIEBjbWQ6ICAgICAgICAgICBDb21tYW5kIGluZm9ybWF0aW9uLgot CSAqIEBmbGFnczogICAgICAgICBNb2RpZmllcnMgZm9yIGNvbW1hbmQgdHJhbnNtaXNzaW9uLgot CSAqCi0JICogVGhlIGNvbnRyb2xsZXIgaGFyZHdhcmUgRklGTyBpcyBwcm9ncmFtbWVkIHdpdGgg Y29tbWFuZCBoZWFkZXIgYW5kCi0JICogcGF5bG9hZC4gVGhlIHRyYW5zbWlzc2lvbiBpcyBraWNr ZWQgb2ZmIGlmCi0JICogRFNJX0NUUkxfSFdfQ01EX1dBSVRfRk9SX1RSSUdHRVIgZmxhZyBpcyBu b3Qgc2V0LiBJZiB0aGlzIGZsYWcgaXMKLQkgKiBzZXQsIGNhbGxlciBzaG91bGQgbWFrZSBhIHNl cGFyYXRlIGNhbGwgdG8gdHJpZ2dlcl9jb21tYW5kX2RtYSgpIHRvCi0JICogdHJhbnNtaXQgdGhl IGNvbW1hbmQuCi0JICovCi0Jdm9pZCAoKmtpY2tvZmZfZmlmb19jb21tYW5kKShzdHJ1Y3QgZHNp X2N0cmxfaHcgKmN0cmwsCi0JCQkJICAgICBzdHJ1Y3QgZHNpX2N0cmxfY21kX2RtYV9maWZvX2lu Zm8gKmNtZCwKLQkJCQkgICAgIHUzMiBmbGFncyk7Ci0KLQl2b2lkICgqcmVzZXRfY21kX2ZpZm8p KHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCk7Ci0JLyoqCi0JICogdHJpZ2dlcl9jb21tYW5kX2Rt YSgpIC0gdHJpZ2dlciB0cmFuc21pc3Npb24gb2YgY29tbWFuZCBidWZmZXIuCi0JICogQGN0cmw6 ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKgot CSAqIFRoaXMgdHJpZ2dlciBjYW4gYmUgb25seSB1c2VkIGlmIHRoZXJlIHdhcyBhIHByaW9yIGNh bGwgdG8KLQkgKiBraWNrb2ZmX2NvbW1hbmQoKSBvZiBraWNrb2ZmX2ZpZm9fY29tbWFuZCgpIHdp dGgKLQkgKiBEU0lfQ1RSTF9IV19DTURfV0FJVF9GT1JfVFJJR0dFUiBmbGFnLgotCSAqLwotCXZv aWQgKCp0cmlnZ2VyX2NvbW1hbmRfZG1hKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwpOwotCi0J LyoqCi0JICogZ2V0X2NtZF9yZWFkX2RhdGEoKSAtIGdldCBkYXRhIHJlYWQgZnJvbSB0aGUgcGVy aXBoZXJhbAotCSAqIEBjdHJsOiAgICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBo b3N0IGhhcmR3YXJlLgotCSAqIEByZF9idWY6ICAgICAgICAgQnVmZmVyIHdoZXJlIGRhdGEgd2ls bCBiZSByZWFkIGludG8uCi0JICogQHRvdGFsX3JlYWRfbGVuOiBOdW1iZXIgb2YgYnl0ZXMgdG8g cmVhZC4KLQkgKi8KLQl1MzIgKCpnZXRfY21kX3JlYWRfZGF0YSkoc3RydWN0IGRzaV9jdHJsX2h3 ICpjdHJsLAotCQkJCSB1OCAqcmRfYnVmLAotCQkJCSB1MzIgdG90YWxfcmVhZF9sZW4pOwotCi0J LyoqCi0JICogd2FpdF9mb3JfbGFuZV9pZGxlKCkgLSB3YWl0IGZvciBEU0kgbGFuZXMgdG8gZ28g dG8gaWRsZSBzdGF0ZQotCSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9s bGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQGxhbmVzOiAgICAgICAgIE9SZWQgbGlzdCBvZiBsYW5l cyAoZW51bSBkc2lfZGF0YV9sYW5lcykgd2hpY2ggbmVlZAotCSAqICAgICAgICAgICAgICAgICB0 byBiZSBjaGVja2VkIHRvIGJlIGluIGlkbGUgc3RhdGUuCi0JICovCi0JaW50ICgqd2FpdF9mb3Jf bGFuZV9pZGxlKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIHUzMiBsYW5lcyk7Ci0KLQlzdHJ1 Y3QgY3RybF91bHBzX2NvbmZpZ19vcHMgdWxwc19vcHM7Ci0KLQkvKioKLQkgKiBjbGFtcF9lbmFi bGUoKSAtIGVuYWJsZSBEU0kgY2xhbXBzCi0JICogQGN0cmw6ICAgICAgICAgUG9pbnRlciB0byB0 aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAqIEBsYW5lczogICAgICAgIE9SZWQgbGlz dCBvZiBsYW5lcyB3aGljaCBuZWVkIHRvIGhhdmUgY2xhbXBzIHJlbGVhc2VkLgotCSAqIEBlbmFi bGVfdWxwczogdWxwcyBzdGF0ZS4KLQkgKi8KLQotCS8qKgotCSAqIGNsYW1wX2VuYWJsZSgpIC0g ZW5hYmxlIERTSSBjbGFtcHMgdG8ga2VlcCBQSFkgZHJpdmluZyBhIHN0YWJsZSBsaW5rCi0JICog QGN0cmw6ICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgot CSAqIEBsYW5lczogICAgICAgIE9SZWQgbGlzdCBvZiBsYW5lcyB3aGljaCBuZWVkIHRvIGhhdmUg Y2xhbXBzIHJlbGVhc2VkLgotCSAqIEBlbmFibGVfdWxwczogVE9ETzo/PwotCSAqLwotCXZvaWQg KCpjbGFtcF9lbmFibGUpKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCSAgICAgdTMyIGxh bmVzLAotCQkJICAgICBib29sIGVuYWJsZV91bHBzKTsKLQotCS8qKgotCSAqIGNsYW1wX2Rpc2Fi bGUoKSAtIGRpc2FibGUgRFNJIGNsYW1wcwotCSAqIEBjdHJsOiAgICAgICAgIFBvaW50ZXIgdG8g dGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAbGFuZXM6ICAgICAgICBPUmVkIGxp c3Qgb2YgbGFuZXMgd2hpY2ggbmVlZCB0byBoYXZlIGNsYW1wcyByZWxlYXNlZC4KLQkgKiBAZGlz YWJsZV91bHBzOiB1bHBzIHN0YXRlLgotCSAqLwotCXZvaWQgKCpjbGFtcF9kaXNhYmxlKShzdHJ1 Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkgICAgICB1MzIgbGFuZXMsCi0JCQkgICAgICBib29s IGRpc2FibGVfdWxwcyk7Ci0KLQkvKioKLQkgKiBwaHlfcmVzZXRfY29uZmlnKCkgLSBEaXNhYmxl L2VuYWJsZSBwcm9wYWdhdGlvbiBvZiAgcmVzZXQgc2lnbmFsCi0JICoJZnJvbSBhaGIgZG9tYWlu IHRvIERTSSBQSFkKLQkgKiBAY3RybDogICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVy IGhvc3QgaGFyZHdhcmUuCi0JICogQGVuYWJsZToJVHJ1ZSB0byBtYXNrIHRoZSByZXNldCBzaWdu YWwsIGZhbHNlIHRvIHVubWFzawotCSAqLwotCXZvaWQgKCpwaHlfcmVzZXRfY29uZmlnKShzdHJ1 Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkgICAgIGJvb2wgZW5hYmxlKTsKLQotCS8qKgotCSAq IGdldF9pbnRlcnJ1cHRfc3RhdHVzKCkgLSByZXR1cm5zIHRoZSBpbnRlcnJ1cHQgc3RhdHVzCi0J ICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2Fy ZS4KLQkgKgotCSAqIFJldHVybnMgdGhlIE9SZWQgbGlzdCBvZiBpbnRlcnJ1cHRzKGVudW0gZHNp X3N0YXR1c19pbnRfdHlwZSkgdGhhdAotCSAqIGFyZSBhY3RpdmUuIFRoaXMgbGlzdCBkb2VzIG5v dCBpbmNsdWRlIGFueSBlcnJvciBpbnRlcnJ1cHRzLiBDYWxsZXIKLQkgKiBzaG91bGQgY2FsbCBn ZXRfZXJyb3Jfc3RhdHVzIGZvciBlcnJvciBpbnRlcnJ1cHRzLgotCSAqCi0JICogUmV0dXJuOiBM aXN0IG9mIGFjdGl2ZSBpbnRlcnJ1cHRzLgotCSAqLwotCXUzMiAoKmdldF9pbnRlcnJ1cHRfc3Rh dHVzKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwpOwotCi0JLyoqCi0JICogY2xlYXJfaW50ZXJy dXB0X3N0YXR1cygpIC0gY2xlYXJzIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cwotCSAqIEBjdHJs OiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICog QGludHM6ICAgICAgICAgIExpc3Qgb2YgaW50ZXJydXB0cyB0byBiZSBjbGVhcmVkLgotCSAqLwot CXZvaWQgKCpjbGVhcl9pbnRlcnJ1cHRfc3RhdHVzKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmws IHUzMiBpbnRzKTsKLQotCS8qKgotCSAqIGVuYWJsZV9zdGF0dXNfaW50ZXJydXB0cygpIC0gZW5h YmxlIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cwotCSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVy IHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQGludHM6ICAgICAgICAgIExp c3Qgb2YgaW50ZXJydXB0cyB0byBiZSBlbmFibGVkLgotCSAqCi0JICogRW5hYmxlcyB0aGUgc3Bl Y2lmaWVkIGludGVycnVwdHMuIFRoaXMgbGlzdCB3aWxsIG92ZXJyaWRlIHRoZQotCSAqIHByZXZp b3VzIGludGVycnVwdHMgZW5hYmxlZCB0aHJvdWdoIHRoaXMgZnVuY3Rpb24uIENhbGxlciBoYXMg dG8KLQkgKiBtYWludGFpbiB0aGUgc3RhdGUgb2YgdGhlIGludGVycnVwdHMgZW5hYmxlZC4gVG8g ZGlzYWJsZSBhbGwKLQkgKiBpbnRlcnJ1cHRzLCBzZXQgaW50cyB0byAwLgotCSAqLwotCXZvaWQg KCplbmFibGVfc3RhdHVzX2ludGVycnVwdHMpKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwgdTMy IGludHMpOwotCi0JLyoqCi0JICogZ2V0X2Vycm9yX3N0YXR1cygpIC0gcmV0dXJucyB0aGUgZXJy b3Igc3RhdHVzCi0JICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIg aG9zdCBoYXJkd2FyZS4KLQkgKgotCSAqIFJldHVybnMgdGhlIE9SZWQgbGlzdCBvZiBlcnJvcnMo ZW51bSBkc2lfZXJyb3JfaW50X3R5cGUpIHRoYXQgYXJlCi0JICogYWN0aXZlLiBUaGlzIGxpc3Qg ZG9lcyBub3QgaW5jbHVkZSBhbnkgc3RhdHVzIGludGVycnVwdHMuIENhbGxlcgotCSAqIHNob3Vs ZCBjYWxsIGdldF9pbnRlcnJ1cHRfc3RhdHVzIGZvciBzdGF0dXMgaW50ZXJydXB0cy4KLQkgKgot CSAqIFJldHVybjogTGlzdCBvZiBhY3RpdmUgZXJyb3IgaW50ZXJydXB0cy4KLQkgKi8KLQl1NjQg KCpnZXRfZXJyb3Jfc3RhdHVzKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwpOwotCi0JLyoqCi0J ICogY2xlYXJfZXJyb3Jfc3RhdHVzKCkgLSBjbGVhcnMgdGhlIHNwZWNpZmllZCBlcnJvcnMKLQkg KiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJl LgotCSAqIEBlcnJvcnM6ICAgICAgICAgIExpc3Qgb2YgZXJyb3JzIHRvIGJlIGNsZWFyZWQuCi0J ICovCi0Jdm9pZCAoKmNsZWFyX2Vycm9yX3N0YXR1cykoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJs LCB1NjQgZXJyb3JzKTsKLQotCS8qKgotCSAqIGVuYWJsZV9lcnJvcl9pbnRlcnJ1cHRzKCkgLSBl bmFibGUgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHRzCi0JICogQGN0cmw6ICAgICAgICAgIFBvaW50 ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAZXJyb3JzOiAgICAgICAg TGlzdCBvZiBlcnJvcnMgdG8gYmUgZW5hYmxlZC4KLQkgKgotCSAqIEVuYWJsZXMgdGhlIHNwZWNp ZmllZCBpbnRlcnJ1cHRzLiBUaGlzIGxpc3Qgd2lsbCBvdmVycmlkZSB0aGUKLQkgKiBwcmV2aW91 cyBpbnRlcnJ1cHRzIGVuYWJsZWQgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uLiBDYWxsZXIgaGFzIHRv Ci0JICogbWFpbnRhaW4gdGhlIHN0YXRlIG9mIHRoZSBpbnRlcnJ1cHRzIGVuYWJsZWQuIFRvIGRp c2FibGUgYWxsCi0JICogaW50ZXJydXB0cywgc2V0IGVycm9ycyB0byAwLgotCSAqLwotCXZvaWQg KCplbmFibGVfZXJyb3JfaW50ZXJydXB0cykoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCB1NjQg ZXJyb3JzKTsKLQotCS8qKgotCSAqIHZpZGVvX3Rlc3RfcGF0dGVybl9zZXR1cCgpIC0gc2V0dXAg dGVzdCBwYXR0ZXJuIGVuZ2luZSBmb3IgdmlkZW8gbW9kZQotCSAqIEBjdHJsOiAgICAgICAgICBQ b2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQHR5cGU6ICAgICAg ICAgIFR5cGUgb2YgdGVzdCBwYXR0ZXJuLgotCSAqIEBpbml0X3ZhbDogICAgICBJbml0aWFsIHZh bHVlIHRvIHVzZSBmb3IgZ2VuZXJhdGluZyB0ZXN0IHBhdHRlcm4uCi0JICovCi0Jdm9pZCAoKnZp ZGVvX3Rlc3RfcGF0dGVybl9zZXR1cCkoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCQkg ZW51bSBkc2lfdGVzdF9wYXR0ZXJuIHR5cGUsCi0JCQkJCSB1MzIgaW5pdF92YWwpOwotCi0JLyoq Ci0JICogY21kX3Rlc3RfcGF0dGVybl9zZXR1cCgpIC0gc2V0dXAgdGVzdCBwYXR0dGVybiBlbmdp bmUgZm9yIGNtZCBtb2RlCi0JICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRy b2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAdHlwZTogICAgICAgICAgVHlwZSBvZiB0ZXN0IHBh dHRlcm4uCi0JICogQGluaXRfdmFsOiAgICAgIEluaXRpYWwgdmFsdWUgdG8gdXNlIGZvciBnZW5l cmF0aW5nIHRlc3QgcGF0dGVybi4KLQkgKiBAc3RyZWFtX2lkOiAgICAgU3RyZWFtIElkIG9uIHdo aWNoIHBhY2tldHMgYXJlIGdlbmVyYXRlZC4KLQkgKi8KLQl2b2lkICgqY21kX3Rlc3RfcGF0dGVy bl9zZXR1cCkoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCSAgICAgICBlbnVtIGRzaV90 ZXN0X3BhdHRlcm4gIHR5cGUsCi0JCQkJICAgICAgIHUzMiBpbml0X3ZhbCwKLQkJCQkgICAgICAg dTMyIHN0cmVhbV9pZCk7Ci0KLQkvKioKLQkgKiB0ZXN0X3BhdHRlcm5fZW5hYmxlKCkgLSBlbmFi bGUgdGVzdCBwYXR0ZXJuIGVuZ2luZQotCSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRo ZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQGVuYWJsZTogICAgICAgIEVuYWJsZS9E aXNhYmxlIHRlc3QgcGF0dGVybiBlbmdpbmUuCi0JICovCi0Jdm9pZCAoKnRlc3RfcGF0dGVybl9l bmFibGUpKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwgYm9vbCBlbmFibGUpOwotCi0JLyoqCi0J ICogY2xlYXJfcGh5MF9sbl9lcnIoKSAtIGNsZWFyIERTSSBQSFkgbGFuZS0wIGVycm9ycwotCSAq IEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUu Ci0JICovCi0Jdm9pZCAoKmNsZWFyX3BoeTBfbG5fZXJyKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0 cmwpOwotCi0JLyoqCi0JICogdHJpZ2dlcl9jbWRfdGVzdF9wYXR0ZXJuKCkgLSB0cmlnZ2VyIGEg Y29tbWFuZCBtb2RlIGZyYW1lIHVwZGF0ZSB3aXRoCi0JICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0ZXN0IHBhdHRlcm4KLQkgKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUg Y29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAqIEBzdHJlYW1faWQ6ICAgICBTdHJlYW0gb24g d2hpY2ggZnJhbWUgdXBkYXRlIGlzIHNlbnQuCi0JICovCi0Jdm9pZCAoKnRyaWdnZXJfY21kX3Rl c3RfcGF0dGVybikoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCQkgdTMyIHN0cmVhbV9p ZCk7Ci0KLQlzc2l6ZV90ICgqcmVnX2R1bXBfdG9fYnVmZmVyKShzdHJ1Y3QgZHNpX2N0cmxfaHcg KmN0cmwsCi0JCQkJICAgICAgY2hhciAqYnVmLAotCQkJCSAgICAgIHUzMiBzaXplKTsKLQotCS8q KgotCSAqIHNldHVwX21pc3IoKSAtIFNldHVwIGZyYW1lIE1JU1IKLQkgKiBAY3RybDogICAgICAg ICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQHBhbmVsX21v ZGU6ICAgQ01EIG9yIFZJREVPIG1vZGUgaW5kaWNhdG9yCi0JICogQGVuYWJsZTogICAgICAgRW5h YmxlL2Rpc2FibGUgTUlTUi4KLQkgKiBAZnJhbWVfY291bnQ6ICBOdW1iZXIgb2YgZnJhbWVzIHRv IGFjY3VtdWxhdGUgTUlTUi4KLQkgKi8KLQl2b2lkICgqc2V0dXBfbWlzcikoc3RydWN0IGRzaV9j dHJsX2h3ICpjdHJsLAotCQkJICAgZW51bSBkc2lfb3BfbW9kZSBwYW5lbF9tb2RlLAotCQkJICAg Ym9vbCBlbmFibGUsIHUzMiBmcmFtZV9jb3VudCk7Ci0KLQkvKioKLQkgKiBjb2xsZWN0X21pc3Io KSAtIFJlYWQgZnJhbWUgTUlTUgotCSAqIEBjdHJsOiAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNv bnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAcGFuZWxfbW9kZTogICBDTUQgb3IgVklERU8g bW9kZSBpbmRpY2F0b3IKLQkgKi8KLQl1MzIgKCpjb2xsZWN0X21pc3IpKHN0cnVjdCBkc2lfY3Ry bF9odyAqY3RybCwKLQkJCSAgICBlbnVtIGRzaV9vcF9tb2RlIHBhbmVsX21vZGUpOwotCi0JLyoq Ci0JICogc2V0X3RpbWluZ19kYigpIC0gZW5hYmxlL2Rpc2FibGUgVGltaW5nIERCIHJlZ2lzdGVy Ci0JICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gY29udHJvbGxlciBob3N0IGhhcmR3YXJl LgotCSAqIEBlbmFibGU6ICAgICAgICBFbmFibGUvRGlzYWJsZSBmbGFnLgotCSAqCi0JICogRW5h YmxlIG9yIERpc2FiZSB0aGUgVGltaW5nIERCIHJlZ2lzdGVyLgotCSAqLwotCXZvaWQgKCpzZXRf dGltaW5nX2RiKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJIGJvb2wgZW5hYmxlKTsK LX07Ci0KLS8qCi0gKiBzdHJ1Y3QgZHNpX2N0cmxfaHcgLSBEU0kgY29udHJvbGxlciBoYXJkd2Fy ZSBvYmplY3Qgc3BlY2lmaWMgdG8gYW4gaW5zdGFuY2UKLSAqIEBiYXNlOiAgICAgICAgICAgICAg ICAgICBWQSBmb3IgdGhlIERTSSBjb250cm9sbGVyIGJhc2UgYWRkcmVzcy4KLSAqIEBsZW5ndGg6 ICAgICAgICAgICAgICAgICBMZW5ndGggb2YgdGhlIERTSSBjb250cm9sbGVyIHJlZ2lzdGVyIG1h cC4KLSAqIEBtbXNzX21pc2NfYmFzZTogICAgICAgICBCYXNlIGFkZHJlc3Mgb2YgbW1zc19taXNj IHJlZ2lzdGVyIG1hcC4KLSAqIEBtbXNzX21pc2NfbGVuZ3RoOiAgICAgICBMZW5ndGggb2YgbW1z c19taXNjIHJlZ2lzdGVyIG1hcC4KLSAqIEBkaXNwX2NjX2Jhc2U6ICAgICAgICAgICBCYXNlIGFk ZHJlc3Mgb2YgZGlzcF9jYyByZWdpc3RlciBtYXAuCi0gKiBAZGlzcF9jY19sZW5ndGg6ICAgICAg ICAgTGVuZ3RoIG9mIGRpc3BfY2MgcmVnaXN0ZXIgbWFwLgotICogQGluZGV4OiAgICAgICAgICAg ICAgICAgIEluc3RhbmNlIElEIG9mIHRoZSBjb250cm9sbGVyLgotICogQGZlYXR1cmVfbWFwOiAg ICAgICAgICAgIEZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGUgRFNJIGNvbnRyb2xsZXIuCi0gKiBA b3BzOiAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gcG9pbnRlcnMgdG8gdGhlIG9wZXJhdGlv bnMgc3VwcG9ydGVkIGJ5IHRoZQotICogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xs ZXIuCi0gKiBAc3VwcG9ydGVkX2ludGVycnVwdHM6ICAgTnVtYmVyIG9mIHN1cHBvcnRlZCBpbnRl cnJ1cHRzLgotICogQHN1cHBvcnRlZF9lcnJvcnM6ICAgICAgIE51bWJlciBvZiBzdXBwb3J0ZWQg ZXJyb3JzLgotICogQHBoeV9pc29sYXRpb25fZW5hYmxlZDogICAgQSBib29sZWFuIHByb3BlcnR5 IGFsbG93cyB0byBpc29sYXRlIHRoZSBwaHkgZnJvbQotICogICAgICAgICAgICAgICAgICAgICAg ICAgIGRzaSBjb250cm9sbGVyIGFuZCBydW4gb25seSBkc2kgY29udHJvbGxlci4KLSAqLwotc3Ry dWN0IGRzaV9jdHJsX2h3IHsKLQl2b2lkIF9faW9tZW0gKmJhc2U7Ci0JdTMyIGxlbmd0aDsKLQl2 b2lkIF9faW9tZW0gKm1tc3NfbWlzY19iYXNlOwotCXUzMiBtbXNzX21pc2NfbGVuZ3RoOwotCXZv aWQgX19pb21lbSAqZGlzcF9jY19iYXNlOwotCXUzMiBkaXNwX2NjX2xlbmd0aDsKLQl1MzIgaW5k ZXg7Ci0KLQkvKiBmZWF0dXJlcyAqLwotCURFQ0xBUkVfQklUTUFQKGZlYXR1cmVfbWFwLCBEU0lf Q1RSTF9NQVhfRkVBVFVSRVMpOwotCXN0cnVjdCBkc2lfY3RybF9od19vcHMgb3BzOwotCi0JLyog Y2FwYWJpbGl0aWVzICovCi0JdTMyIHN1cHBvcnRlZF9pbnRlcnJ1cHRzOwotCXU2NCBzdXBwb3J0 ZWRfZXJyb3JzOwotCi0JYm9vbCBwaHlfaXNvbGF0aW9uX2VuYWJsZWQ7Ci19OwotCi0jZW5kaWYg LyogX0RTSV9DVFJMX0hXX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rz aS1zdGFnaW5nL2RzaV9jdHJsX2h3XzFfNC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3Rh Z2luZy9kc2lfY3RybF9od18xXzQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQy MTA1Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9j dHJsX2h3XzFfNC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDgwICswLDAgQEAKLS8qCi0gKiBDb3B5 cmlnaHQgKGMpIDIwMTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9u IDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KSAiZHNpLWh3 OiIgZm10Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvbGwu aD4KLQotI2luY2x1ZGUgImRzaV9jdHJsX2h3LmgiCi0jaW5jbHVkZSAiZHNpX2N0cmxfcmVnLmgi Ci0jaW5jbHVkZSAiZHNpX2h3LmgiCi0KLSNkZWZpbmUgTU1TU19NSVNDX0NMQU1QX1JFR19PRkYg ICAgICAgICAgIDB4MDAxNAotCi0vKioKLSAqIGRzaV9jdHJsX2h3XzE0X3NldHVwX2xhbmVfbWFw KCkgLSBzZXR1cCBtYXBwaW5nIGJldHdlZW4KLSAqCWxvZ2ljYWwgYW5kIHBoeXNpY2FsIGxhbmVz Ci0gKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3 YXJlLgotICogQGxhbmVfbWFwOiAgICAgIFN0cnVjdHVyZSBkZWZpbmluZyB0aGUgbWFwcGluZyBi ZXR3ZWVuIERTSSBsb2dpY2FsCi0gKiAgICAgICAgICAgICAgICAgbGFuZXMgYW5kIHBoeXNpY2Fs IGxhbmVzLgotICovCi12b2lkIGRzaV9jdHJsX2h3XzE0X3NldHVwX2xhbmVfbWFwKHN0cnVjdCBk c2lfY3RybF9odyAqY3RybCwKLQkJCSAgICAgICBzdHJ1Y3QgZHNpX2xhbmVfbWFwICpsYW5lX21h cCkKLXsKLQlEU0lfVzMyKGN0cmwsIERTSV9MQU5FX1NXQVBfQ1RSTCwgbGFuZV9tYXAtPmxhbmVf bWFwX3YxKTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXSBMYW5lIHN3YXAgc2V0dXAgY29tcGxldGVc biIsIGN0cmwtPmluZGV4KTsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9od18xNF93YWl0X2Zvcl9s YW5lX2lkbGUoKQotICogVGhpcyBmdW5jdGlvbiB3YWl0cyBmb3IgYWxsIHRoZSBhY3RpdmUgRFNJ IGxhbmVzIHRvIGJlIGlkbGUgYnkgcG9sbGluZyBhbGwKLSAqIHRoZSBGSUZPX0VNUFRZIGJpdHMg YW5kIHBvbGxpbmcgaGUgbGFuZSBzdGF0dXMgdG8gZW5zdXJlIHRoYXQgYWxsIHRoZSBsYW5lcwot ICogYXJlIGluIHN0b3Agc3RhdGUuIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBidXMg Y2xvY2tzIHJlcXVpcmVkIHRvCi0gKiBhY2Nlc3MgdGhlIHJlZ2lzdGVycyBhcmUgYWxyZWFkeSB0 dXJuZWQgb24uCi0gKgotICogQGN0cmw6ICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBo b3N0IGhhcmR3YXJlLgotICogQGxhbmVzOiAgICAgT1JlZCBsaXN0IG9mIGxhbmVzIChlbnVtIGRz aV9kYXRhX2xhbmVzKSB3aGljaCBuZWVkCi0gKiAgICAgICAgICAgICB0byBiZSBzdG9wcGVkLgot ICoKLSAqIHJldHVybjogRXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJsX2h3XzE0X3dhaXRf Zm9yX2xhbmVfaWRsZShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIHUzMiBsYW5lcykKLXsKLQlp bnQgcmMgPSAwLCB2YWwgPSAwOwotCXUzMiBzdG9wX3N0YXRlX21hc2sgPSAwLCBmaWZvX2VtcHR5 X21hc2sgPSAwOwotCXUzMiBjb25zdCBzbGVlcF91cyA9IDEwOwotCXUzMiBjb25zdCB0aW1lb3V0 X3VzID0gMTAwOwotCi0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8wKSB7Ci0JCXN0b3Bfc3Rh dGVfbWFzayB8PSBCSVQoMCk7Ci0JCWZpZm9fZW1wdHlfbWFzayB8PSAoQklUKDEyKSB8IEJJVCgx NikpOwotCX0KLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzEpIHsKLQkJc3RvcF9zdGF0ZV9t YXNrIHw9IEJJVCgxKTsKLQkJCWZpZm9fZW1wdHlfbWFzayB8PSBCSVQoMjApOwotCX0KLQlpZiAo bGFuZXMgJiBEU0lfREFUQV9MQU5FXzIpIHsKLQkJc3RvcF9zdGF0ZV9tYXNrIHw9IEJJVCgyKTsK LQkJZmlmb19lbXB0eV9tYXNrIHw9IEJJVCgyNCk7Ci0JfQotCWlmIChsYW5lcyAmIERTSV9EQVRB X0xBTkVfMykgewotCQlzdG9wX3N0YXRlX21hc2sgfD0gQklUKDMpOwotCQlmaWZvX2VtcHR5X21h c2sgfD0gQklUKDI4KTsKLQl9Ci0KLQlwcl9kZWJ1ZygiJXM6IHBvbGxpbmcgZm9yIGZpZm8gZW1w dHksIG1hc2s9MHglMDh4XG4iLCBfX2Z1bmNfXywKLQkJZmlmb19lbXB0eV9tYXNrKTsKLQlyYyA9 IHJlYWRsX3BvbGxfdGltZW91dChjdHJsLT5iYXNlICsgRFNJX0ZJRk9fU1RBVFVTLCB2YWwsCi0J CQkodmFsICYgZmlmb19lbXB0eV9tYXNrKSwgc2xlZXBfdXMsIHRpbWVvdXRfdXMpOwotCWlmIChy YykgewotCQlwcl9lcnIoIiVzOiBmaWZvIG5vdCBlbXB0eSwgRklGT19TVEFUVVM9MHglMDh4XG4i LAotCQkJCV9fZnVuY19fLCB2YWwpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXByX2RlYnVnKCIl czogcG9sbGluZyBmb3IgbGFuZXMgdG8gYmUgaW4gc3RvcCBzdGF0ZSwgbWFzaz0weCUwOHhcbiIs Ci0JCV9fZnVuY19fLCBzdG9wX3N0YXRlX21hc2spOwotCXJjID0gcmVhZGxfcG9sbF90aW1lb3V0 KGN0cmwtPmJhc2UgKyBEU0lfTEFORV9TVEFUVVMsIHZhbCwKLQkJCSh2YWwgJiBzdG9wX3N0YXRl X21hc2spLCBzbGVlcF91cywgdGltZW91dF91cyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiJXM6 IGxhbmVzIG5vdCBpbiBzdG9wIHN0YXRlLCBMQU5FX1NUQVRVUz0weCUwOHhcbiIsCi0JCQlfX2Z1 bmNfXywgdmFsKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVycm9yOgotCXJldHVybiByYzsKLQot fQotCi0vKioKLSAqIHVscHNfcmVxdWVzdCgpIC0gcmVxdWVzdCB1bHBzIGVudHJ5IGZvciBzcGVj aWZpZWQgbGFuZXMKLSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVy IGhvc3QgaGFyZHdhcmUuCi0gKiBAbGFuZXM6ICAgICAgICAgT1JlZCBsaXN0IG9mIGxhbmVzIChl bnVtIGRzaV9kYXRhX2xhbmVzKSB3aGljaCBuZWVkCi0gKiAgICAgICAgICAgICAgICAgdG8gZW50 ZXIgVUxQUy4KLSAqCi0gKiBDYWxsZXIgc2hvdWxkIGNoZWNrIGlmIGxhbmVzIGFyZSBpbiBVTFBT IG1vZGUgYnkgY2FsbGluZwotICogZ2V0X2xhbmVzX2luX3VscHMoKSBvcGVyYXRpb24uCi0gKi8K LXZvaWQgZHNpX2N0cmxfaHdfMTRfdWxwc19yZXF1ZXN0KHN0cnVjdCBkc2lfY3RybF9odyAqY3Ry bCwgdTMyIGxhbmVzKQotewotCXUzMiByZWcgPSAwOwotCi0JaWYgKGxhbmVzICYgRFNJX0NMT0NL X0xBTkUpCi0JCXJlZyA9IEJJVCg0KTsKLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzApCi0J CXJlZyB8PSBCSVQoMCk7Ci0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8xKQotCQlyZWcgfD0g QklUKDEpOwotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMikKLQkJcmVnIHw9IEJJVCgyKTsK LQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzMpCi0JCXJlZyB8PSBCSVQoMyk7Ci0KLQkvKgot CSAqIFVMUFMgZW50cnkgcmVxdWVzdC4gV2FpdCBmb3Igc2hvcnQgdGltZSB0byBtYWtlIHN1cmUK LQkgKiB0aGF0IHRoZSBsYW5lcyBlbnRlciBVTFBTLiBSZWNvbW1lbmRlZCBhcyBwZXIgSFBHLgot CSAqLwotCURTSV9XMzIoY3RybCwgRFNJX0xBTkVfQ1RSTCwgcmVnKTsKLQl1c2xlZXBfcmFuZ2Uo MTAwLCAxMTApOwotCi0JcHJfZGVidWcoIltEU0lfJWRdIFVMUFMgcmVxdWVzdGVkIGZvciBsYW5l cyAweCV4XG4iLCBjdHJsLT5pbmRleCwKLQkJIGxhbmVzKTsKLX0KLQotLyoqCi0gKiB1bHBzX2V4 aXQoKSAtIGV4aXQgVUxQUyBvbiBzcGVjaWZpZWQgbGFuZXMKLSAqIEBjdHJsOiAgICAgICAgICBQ b2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBAbGFuZXM6ICAgICAg ICAgT1JlZCBsaXN0IG9mIGxhbmVzIChlbnVtIGRzaV9kYXRhX2xhbmVzKSB3aGljaCBuZWVkCi0g KiAgICAgICAgICAgICAgICAgdG8gZXhpdCBVTFBTLgotICoKLSAqIENhbGxlciBzaG91bGQgY2hl Y2sgaWYgbGFuZXMgYXJlIGluIGFjdGl2ZSBtb2RlIGJ5IGNhbGxpbmcKLSAqIGdldF9sYW5lc19p bl91bHBzKCkgb3BlcmF0aW9uLgotICovCi12b2lkIGRzaV9jdHJsX2h3XzE0X3VscHNfZXhpdChz dHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIHUzMiBsYW5lcykKLXsKLQl1MzIgcmVnID0gMDsKLQot CWlmIChsYW5lcyAmIERTSV9DTE9DS19MQU5FKQotCQlyZWcgPSBCSVQoMTIpOwotCWlmIChsYW5l cyAmIERTSV9EQVRBX0xBTkVfMCkKLQkJcmVnIHw9IEJJVCg4KTsKLQlpZiAobGFuZXMgJiBEU0lf REFUQV9MQU5FXzEpCi0JCXJlZyB8PSBCSVQoOSk7Ci0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFO RV8yKQotCQlyZWcgfD0gQklUKDEwKTsKLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzMpCi0J CXJlZyB8PSBCSVQoMTEpOwotCi0JLyoKLQkgKiBVTFBTIEV4aXQgUmVxdWVzdAotCSAqIEhhcmR3 YXJlIHJlcXVpcmVtZW50IGlzIHRvIHdhaXQgZm9yIGF0IGxlYXN0IDFtcwotCSAqLwotCURTSV9X MzIoY3RybCwgRFNJX0xBTkVfQ1RSTCwgcmVnKTsKLQl1c2xlZXBfcmFuZ2UoMTAwMCwgMTAxMCk7 Ci0JLyoKLQkgKiBTb21ldGltZXMgd2hlbiBleGl0aW5nIFVMUFMsIGl0IGlzIHBvc3NpYmxlIHRo YXQgc29tZSBEU0kKLQkgKiBsYW5lcyBhcmUgbm90IGluIHRoZSBzdG9wIHN0YXRlIHdoaWNoIGNv dWxkIGxlYWQgdG8gRFNJCi0JICogY29tbWFuZHMgbm90IGdvaW5nIHRocm91Z2guIFRvIGF2b2lk IHRoaXMsIGZvcmNlIHRoZSBsYW5lcwotCSAqIHRvIGJlIGluIHN0b3Agc3RhdGUuCi0JICovCi0J RFNJX1czMihjdHJsLCBEU0lfTEFORV9DVFJMLCByZWcgPDwgOCk7Ci0JRFNJX1czMihjdHJsLCBE U0lfTEFORV9DVFJMLCAweDApOwotCi0JcHJfZGVidWcoIltEU0lfJWRdIFVMUFMgZXhpdCByZXF1 ZXN0IGZvciBsYW5lcz0weCV4XG4iLAotCQkgY3RybC0+aW5kZXgsIGxhbmVzKTsKLX0KLQotLyoq Ci0gKiBnZXRfbGFuZXNfaW5fdWxwcygpIC0gcmV0dXJucyB0aGUgbGlzdCBvZiBsYW5lcyBpbiBV TFBTIG1vZGUKLSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhv c3QgaGFyZHdhcmUuCi0gKgotICogUmV0dXJucyBhbiBPUmVkIGxpc3Qgb2YgbGFuZXMgKGVudW0g ZHNpX2RhdGFfbGFuZXMpIHRoYXQgYXJlIGluIFVMUFMKLSAqIHN0YXRlLiBJZiAwIGlzIHJldHVy bmVkLCBhbGwgdGhlIGxhbmVzIGFyZSBhY3RpdmUuCi0gKgotICogUmV0dXJuOiBMaXN0IG9mIGxh bmVzIGluIFVMUFMgc3RhdGUuCi0gKi8KLXUzMiBkc2lfY3RybF9od18xNF9nZXRfbGFuZXNfaW5f dWxwcyhzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwpCi17Ci0JdTMyIHJlZyA9IDA7Ci0JdTMyIGxh bmVzID0gMDsKLQotCXJlZyA9IERTSV9SMzIoY3RybCwgRFNJX0xBTkVfU1RBVFVTKTsKLQlpZiAo IShyZWcgJiBCSVQoOCkpKQotCQlsYW5lcyB8PSBEU0lfREFUQV9MQU5FXzA7Ci0JaWYgKCEocmVn ICYgQklUKDkpKSkKLQkJbGFuZXMgfD0gRFNJX0RBVEFfTEFORV8xOwotCWlmICghKHJlZyAmIEJJ VCgxMCkpKQotCQlsYW5lcyB8PSBEU0lfREFUQV9MQU5FXzI7Ci0JaWYgKCEocmVnICYgQklUKDEx KSkpCi0JCWxhbmVzIHw9IERTSV9EQVRBX0xBTkVfMzsKLQlpZiAoIShyZWcgJiBCSVQoMTIpKSkK LQkJbGFuZXMgfD0gRFNJX0NMT0NLX0xBTkU7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gbGFuZXMg aW4gdWxwcyA9IDB4JXhcbiIsIGN0cmwtPmluZGV4LCBsYW5lcyk7Ci0JcmV0dXJuIGxhbmVzOwot fQotCi0vKioKLSAqIGNsYW1wX2VuYWJsZSgpIC0gZW5hYmxlIERTSSBjbGFtcHMgdG8ga2VlcCBQ SFkgZHJpdmluZyBhIHN0YWJsZSBsaW5rCi0gKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0 aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQGxhbmVzOiAgICAgICAgIE9SZWQgbGlz dCBvZiBsYW5lcyB3aGljaCBuZWVkIHRvIGJlIGNsYW1wZWQuCi0gKiBAZW5hYmxlX3VscHM6ICAg Qm9vbGVhbiB0byBzcGVjaWZ5IGlmIFVMUFMgaXMgZW5hYmxlZCBpbiBEU0kgY29udHJvbGxlcgot ICovCi12b2lkIGRzaV9jdHJsX2h3XzE0X2NsYW1wX2VuYWJsZShzdHJ1Y3QgZHNpX2N0cmxfaHcg KmN0cmwsCi0JCQkJIHUzMiBsYW5lcywKLQkJCQkgYm9vbCBlbmFibGVfdWxwcykKLXsKLQl1MzIg Y2xhbXBfcmVnID0gMDsKLQl1MzIgYml0X3NoaWZ0ID0gMDsKLQl1MzIgcmVnID0gMDsKLQotCWlm IChjdHJsLT5pbmRleCA9PSAxKQotCQliaXRfc2hpZnQgPSAxNjsKLQotCWlmIChsYW5lcyAmIERT SV9DTE9DS19MQU5FKSB7Ci0JCWNsYW1wX3JlZyB8PSBCSVQoOSk7Ci0JCWlmIChlbmFibGVfdWxw cykKLQkJCWNsYW1wX3JlZyB8PSBCSVQoOCk7Ci0JfQotCi0JaWYgKGxhbmVzICYgRFNJX0RBVEFf TEFORV8wKSB7Ci0JCWNsYW1wX3JlZyB8PSBCSVQoNyk7Ci0JCWlmIChlbmFibGVfdWxwcykKLQkJ CWNsYW1wX3JlZyB8PSBCSVQoNik7Ci0JfQotCi0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8x KSB7Ci0JCWNsYW1wX3JlZyB8PSBCSVQoNSk7Ci0JCWlmIChlbmFibGVfdWxwcykKLQkJCWNsYW1w X3JlZyB8PSBCSVQoNCk7Ci0JfQotCi0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8yKSB7Ci0J CWNsYW1wX3JlZyB8PSBCSVQoMyk7Ci0JCWlmIChlbmFibGVfdWxwcykKLQkJCWNsYW1wX3JlZyB8 PSBCSVQoMik7Ci0JfQotCi0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8zKSB7Ci0JCWNsYW1w X3JlZyB8PSBCSVQoMSk7Ci0JCWlmIChlbmFibGVfdWxwcykKLQkJCWNsYW1wX3JlZyB8PSBCSVQo MCk7Ci0JfQotCi0JcmVnID0gRFNJX01NU1NfTUlTQ19SMzIoY3RybCwgTU1TU19NSVNDX0NMQU1Q X1JFR19PRkYpOwotCXJlZyB8PSAoY2xhbXBfcmVnIDw8IGJpdF9zaGlmdCk7Ci0JRFNJX01NU1Nf TUlTQ19XMzIoY3RybCwgTU1TU19NSVNDX0NMQU1QX1JFR19PRkYsIHJlZyk7Ci0KLQlyZWcgPSBE U0lfTU1TU19NSVNDX1IzMihjdHJsLCBNTVNTX01JU0NfQ0xBTVBfUkVHX09GRik7Ci0JcmVnIHw9 IChCSVQoMTUpIDw8IGJpdF9zaGlmdCk7CS8qIEVuYWJsZSBjbGFtcCAqLwotCURTSV9NTVNTX01J U0NfVzMyKGN0cmwsIE1NU1NfTUlTQ19DTEFNUF9SRUdfT0ZGLCByZWcpOwotCi0JcHJfZGVidWco IltEU0lfJWRdIENsYW1wcyBlbmFibGVkIGZvciBsYW5lcz0weCV4XG4iLCBjdHJsLT5pbmRleCwK LQkJIGxhbmVzKTsKLX0KLQotLyoqCi0gKiBjbGFtcF9kaXNhYmxlKCkgLSBkaXNhYmxlIERTSSBj bGFtcHMKLSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3Qg aGFyZHdhcmUuCi0gKiBAbGFuZXM6ICAgICAgICAgT1JlZCBsaXN0IG9mIGxhbmVzIHdoaWNoIG5l ZWQgdG8gaGF2ZSBjbGFtcHMgcmVsZWFzZWQuCi0gKiBAZGlzYWJsZV91bHBzOiAgIEJvb2xlYW4g dG8gc3BlY2lmeSBpZiBVTFBTIGlzIGVuYWJsZWQgaW4gRFNJIGNvbnRyb2xsZXIKLSAqLwotdm9p ZCBkc2lfY3RybF9od18xNF9jbGFtcF9kaXNhYmxlKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwK LQkJCQkgIHUzMiBsYW5lcywKLQkJCQkgIGJvb2wgZGlzYWJsZV91bHBzKQotewotCXUzMiBjbGFt cF9yZWcgPSAwOwotCXUzMiBiaXRfc2hpZnQgPSAwOwotCXUzMiByZWcgPSAwOwotCi0JaWYgKGN0 cmwtPmluZGV4ID09IDEpCi0JCWJpdF9zaGlmdCA9IDE2OwotCi0JaWYgKGxhbmVzICYgRFNJX0NM T0NLX0xBTkUpIHsKLQkJY2xhbXBfcmVnIHw9IEJJVCg5KTsKLQkJaWYgKGRpc2FibGVfdWxwcykK LQkJCWNsYW1wX3JlZyB8PSBCSVQoOCk7Ci0JfQotCi0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFO RV8wKSB7Ci0JCWNsYW1wX3JlZyB8PSBCSVQoNyk7Ci0JCWlmIChkaXNhYmxlX3VscHMpCi0JCQlj bGFtcF9yZWcgfD0gQklUKDYpOwotCX0KLQotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMSkg ewotCQljbGFtcF9yZWcgfD0gQklUKDUpOwotCQlpZiAoZGlzYWJsZV91bHBzKQotCQkJY2xhbXBf cmVnIHw9IEJJVCg0KTsKLQl9Ci0KLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzIpIHsKLQkJ Y2xhbXBfcmVnIHw9IEJJVCgzKTsKLQkJaWYgKGRpc2FibGVfdWxwcykKLQkJCWNsYW1wX3JlZyB8 PSBCSVQoMik7Ci0JfQotCi0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8zKSB7Ci0JCWNsYW1w X3JlZyB8PSBCSVQoMSk7Ci0JCWlmIChkaXNhYmxlX3VscHMpCi0JCQljbGFtcF9yZWcgfD0gQklU KDApOwotCX0KLQotCWNsYW1wX3JlZyB8PSBCSVQoMTUpOyAvKiBFbmFibGUgY2xhbXAgKi8KLQlj bGFtcF9yZWcgPDw9IGJpdF9zaGlmdDsKLQotCXJlZyA9IERTSV9NTVNTX01JU0NfUjMyKGN0cmws IE1NU1NfTUlTQ19DTEFNUF9SRUdfT0ZGKTsKLQlyZWcgJj0gfihjbGFtcF9yZWcpOwotCURTSV9N TVNTX01JU0NfVzMyKGN0cmwsIE1NU1NfTUlTQ19DTEFNUF9SRUdfT0ZGLCByZWcpOwotCi0JcHJf ZGVidWcoIltEU0lfJWRdIERpc2FibGUgY2xhbXBzIGZvciBsYW5lcz0lZFxuIiwgY3RybC0+aW5k ZXgsIGxhbmVzKTsKLX0KLQotI2RlZmluZSBEVU1QX1JFR19WQUxVRShvZmYpICJcdCUtMzBzOiAw eCUwOHhcbiIsICNvZmYsIERTSV9SMzIoY3RybCwgb2ZmKQotc3NpemVfdCBkc2lfY3RybF9od18x NF9yZWdfZHVtcF90b19idWZmZXIoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCQkgIGNo YXIgKmJ1ZiwKLQkJCQkJICB1MzIgc2l6ZSkKLXsKLQl1MzIgbGVuID0gMDsKLQotCWxlbiArPSBz bnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLCAiQ09ORklHVVJBVElPTiBSRUdTOlxu Iik7Ci0KLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURV TVBfUkVHX1ZBTFVFKERTSV9IV19WRVJTSU9OKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBs ZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ1RSTCkpOwotCWxlbiAr PSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUo RFNJX1NUQVRVUykpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4p LAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0ZJRk9fU1RBVFVTKSk7Ci0JbGVuICs9IHNucHJpbnRm KChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVklERU9f TU9ERV9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiks Ci0JCQlEVU1QX1JFR19WQUxVRShEU0lfVklERU9fTU9ERV9TWU5DX0RBVEFUWVBFKSk7Ci0JbGVu ICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxV RShEU0lfVklERU9fTU9ERV9QSVhFTF9EQVRBVFlQRSkpOwotCWxlbiArPSBzbnByaW50ZigoYnVm ICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1ZJREVPX01PREVf QkxBTktJTkdfREFUQVRZUEUpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXpl IC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9WSURFT19NT0RFX0RBVEFfQ1RSTCkpOwot CWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdf VkFMVUUoRFNJX1ZJREVPX01PREVfQUNUSVZFX0gpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiAr IGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9WSURFT19NT0RFX0FD VElWRV9WKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0J CQlEVU1QX1JFR19WQUxVRShEU0lfVklERU9fTU9ERV9UT1RBTCkpOwotCWxlbiArPSBzbnByaW50 ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1ZJREVP X01PREVfSFNZTkMpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVu KSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9WSURFT19NT0RFX1ZTWU5DKSk7Ci0JbGVuICs9IHNu cHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lf VklERU9fTU9ERV9WU1lOQ19WUE9TKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAo c2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ09NTUFORF9NT0RFX0RNQV9DVFJM KSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1Q X1JFR19WQUxVRShEU0lfQ09NTUFORF9NT0RFX01EUF9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRm KChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ09NTUFO RF9NT0RFX01EUF9EQ1NfQ01EX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiks IChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9ETUFfQ01EX09GRlNFVCkpOwot CWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdf VkFMVUUoRFNJX0RNQV9DTURfTEVOR1RIKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4p LCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfRE1BX0ZJRk9fQ1RSTCkpOwot CWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdf VkFMVUUoRFNJX0RNQV9OVUxMX1BBQ0tFVF9EQVRBKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYg KyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ09NTUFORF9NT0RF X01EUF9TVFJFQU0wX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXpl IC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9DT01NQU5EX01PREVfTURQX1NUUkVBTTBf VE9UQUwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJ CURVTVBfUkVHX1ZBTFVFKERTSV9DT01NQU5EX01PREVfTURQX1NUUkVBTTFfQ1RSTCkpOwotCWxl biArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFM VUUoRFNJX0NPTU1BTkRfTU9ERV9NRFBfU1RSRUFNMV9UT1RBTCkpOwotCWxlbiArPSBzbnByaW50 ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0FDS19F UlJfU1RBVFVTKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiks Ci0JCQlEVU1QX1JFR19WQUxVRShEU0lfUkRCS19EQVRBMCkpOwotCWxlbiArPSBzbnByaW50Zigo YnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1JEQktfREFU QTEpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURV TVBfUkVHX1ZBTFVFKERTSV9SREJLX0RBVEEyKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBs ZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfUkRCS19EQVRBMykpOwot CWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdf VkFMVUUoRFNJX1JEQktfREFUQVRZUEUwKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4p LCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfUkRCS19EQVRBVFlQRTEpKTsK LQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVH X1ZBTFVFKERTSV9UUklHX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChz aXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9FWFRfTVVYKSk7Ci0JbGVuICs9IHNu cHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lf RVhUX01VWF9URV9QVUxTRV9ERVRFQ1RfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsg bGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NNRF9NT0RFX0RNQV9T V19UUklHR0VSKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiks Ci0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ01EX01PREVfTURQX1NXX1RSSUdHRVIpKTsKLQlsZW4g Kz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVF KERTSV9DTURfTU9ERV9CVEFfU1dfVFJJR0dFUikpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsg bGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1JFU0VUX1NXX1RSSUdH RVIpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURV TVBfUkVHX1ZBTFVFKERTSV9MQU5FX1NUQVRVUykpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsg bGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0xBTkVfQ1RSTCkpOwot CWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdf VkFMVUUoRFNJX0xBTkVfU1dBUF9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4p LCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfRExOMF9QSFlfRVJSKSk7Ci0J bGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19W QUxVRShEU0lfTFBfVElNRVJfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwg KHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0hTX1RJTUVSX0NUUkwpKTsKLQls ZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZB TFVFKERTSV9USU1FT1VUX1NUQVRVUykpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwg KHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NMS09VVF9USU1JTkdfQ1RSTCkp OwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9S RUdfVkFMVUUoRFNJX0VPVF9QQUNLRVQpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiks IChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9FT1RfUEFDS0VUX0NUUkwpKTsK LQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVH X1ZBTFVFKERTSV9HRU5FUklDX0VTQ19UWF9UUklHR0VSKSk7Ci0JbGVuICs9IHNucHJpbnRmKChi dWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfRVJSX0lOVF9N QVNLMCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJ RFVNUF9SRUdfVkFMVUUoRFNJX0lOVF9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBs ZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfU09GVF9SRVNFVCkpOwot CWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdf VkFMVUUoRFNJX0NMS19DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6 ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ0xLX1NUQVRVUykpOwotCWxlbiArPSBz bnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJ X1BIWV9TV19SRVNFVCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBs ZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0FYSTJBSEJfQ1RSTCkpOwotCWxlbiArPSBzbnBy aW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NP TU1BTkRfTU9ERV9NRFBfQ1RSTDIpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChz aXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9DT01NQU5EX01PREVfTURQX1NUUkVB TTJfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAot CQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NPTU1BTkRfTU9ERV9NRFBfU1RSRUFNMl9UT1RBTCkpOwot CWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdf VkFMVUUoRFNJX1ZCSUZfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNp emUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0FFU19DVFJMKSk7Ci0JbGVuICs9IHNu cHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lf UkRCS19EQVRBX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0g bGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9URVNUX1BBVFRFUk5fR0VOX0NNRF9ETUFfSU5J VF9WQUwyKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0J CQlEVU1QX1JFR19WQUxVRShEU0lfVFBHX0RNQV9GSUZPX1NUQVRVUykpOwotCWxlbiArPSBzbnBy aW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1RQ R19ETUFfRklGT19XUklURV9UUklHR0VSKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4p LCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfRFNJX1RJTUlOR19GTFVTSCkp OwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9S RUdfVkFMVUUoRFNJX0RTSV9USU1JTkdfREJfTU9ERSkpOwotCWxlbiArPSBzbnByaW50ZigoYnVm ICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1RQR19ETUFfRklG T19SRVNFVCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAot CQkJRFVNUF9SRUdfVkFMVUUoRFNJX1ZFUlNJT04pKTsKLQotCXByX2VycigiTExFTkdUSCA9ICVk XG4iLCBsZW4pOwotCXJldHVybiBsZW47Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsX2h3XzJfMC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k c2ktc3RhZ2luZy9kc2lfY3RybF9od18yXzAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggYmZkNjM3OC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5n L2RzaV9jdHJsX2h3XzJfMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjM0ICswLDAgQEAKLS8qCi0g KiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2 ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0g KgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KSAi ZHNpLWh3OiIgZm10Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9p b3BvbGwuaD4KLQotI2luY2x1ZGUgImRzaV9jdHJsX2h3LmgiCi0jaW5jbHVkZSAiZHNpX2N0cmxf cmVnLmgiCi0jaW5jbHVkZSAiZHNpX2h3LmgiCi0KLXZvaWQgZHNpX2N0cmxfaHdfMjBfc2V0dXBf bGFuZV9tYXAoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkgICAgICAgc3RydWN0IGRzaV9s YW5lX21hcCAqbGFuZV9tYXApCi17Ci0JdTMyIHJlZ192YWx1ZSA9IGxhbmVfbWFwLT5sYW5lX21h cF92MltEU0lfTE9HSUNBTF9MQU5FXzBdIHwKLQkJCShsYW5lX21hcC0+bGFuZV9tYXBfdjJbRFNJ X0xPR0lDQUxfTEFORV8xXSA8PCA0KSB8Ci0JCQkobGFuZV9tYXAtPmxhbmVfbWFwX3YyW0RTSV9M T0dJQ0FMX0xBTkVfMl0gPDwgOCkgfAotCQkJKGxhbmVfbWFwLT5sYW5lX21hcF92MltEU0lfTE9H SUNBTF9MQU5FXzNdIDw8IDEyKTsKLQotCURTSV9XMzIoY3RybCwgRFNJX0xBTkVfU1dBUF9DVFJM LCByZWdfdmFsdWUpOwotCi0JcHJfZGVidWcoIltEU0lfJWRdIExhbmUgc3dhcCBzZXR1cCBjb21w bGV0ZVxuIiwgY3RybC0+aW5kZXgpOwotfQotCi1pbnQgZHNpX2N0cmxfaHdfMjBfd2FpdF9mb3Jf bGFuZV9pZGxlKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJdTMyIGxhbmVzKQotewotCWlu dCByYyA9IDAsIHZhbCA9IDA7Ci0JdTMyIGZpZm9fZW1wdHlfbWFzayA9IDA7Ci0JdTMyIGNvbnN0 IHNsZWVwX3VzID0gMTA7Ci0JdTMyIGNvbnN0IHRpbWVvdXRfdXMgPSAxMDA7Ci0KLQlpZiAobGFu ZXMgJiBEU0lfREFUQV9MQU5FXzApCi0JCWZpZm9fZW1wdHlfbWFzayB8PSAoQklUKDEyKSB8IEJJ VCgxNikpOwotCi0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8xKQotCQlmaWZvX2VtcHR5X21h c2sgfD0gQklUKDIwKTsKLQotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMikKLQkJZmlmb19l bXB0eV9tYXNrIHw9IEJJVCgyNCk7Ci0KLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzMpCi0J CWZpZm9fZW1wdHlfbWFzayB8PSBCSVQoMjgpOwotCi0JcHJfZGVidWcoIiVzOiBwb2xsaW5nIGZv ciBmaWZvIGVtcHR5LCBtYXNrPTB4JTA4eFxuIiwgX19mdW5jX18sCi0JCWZpZm9fZW1wdHlfbWFz ayk7Ci0JcmMgPSByZWFkbF9wb2xsX3RpbWVvdXQoY3RybC0+YmFzZSArIERTSV9GSUZPX1NUQVRV UywgdmFsLAotCQkJKHZhbCAmIGZpZm9fZW1wdHlfbWFzayksIHNsZWVwX3VzLCB0aW1lb3V0X3Vz KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCIlczogZmlmbyBub3QgZW1wdHksIEZJRk9fU1RBVFVT PTB4JTA4eFxuIiwKLQkJCQlfX2Z1bmNfXywgdmFsKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVy cm9yOgotCXJldHVybiByYzsKLX0KLQotI2RlZmluZSBEVU1QX1JFR19WQUxVRShvZmYpICJcdCUt MzBzOiAweCUwOHhcbiIsICNvZmYsIERTSV9SMzIoY3RybCwgb2ZmKQotc3NpemVfdCBkc2lfY3Ry bF9od18yMF9yZWdfZHVtcF90b19idWZmZXIoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJ CQkgIGNoYXIgKmJ1ZiwKLQkJCQkJICB1MzIgc2l6ZSkKLXsKLQl1MzIgbGVuID0gMDsKLQotCWxl biArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLCAiQ09ORklHVVJBVElPTiBS RUdTOlxuIik7Ci0KLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwK LQkJCURVTVBfUkVHX1ZBTFVFKERTSV9IV19WRVJTSU9OKSk7Ci0JbGVuICs9IHNucHJpbnRmKChi dWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ1RSTCkpOwot CWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdf VkFMVUUoRFNJX1NUQVRVUykpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUg LSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0ZJRk9fU1RBVFVTKSk7Ci0JbGVuICs9IHNu cHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lf VklERU9fTU9ERV9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAt IGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVklERU9fTU9ERV9TWU5DX0RBVEFUWVBFKSk7 Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JF R19WQUxVRShEU0lfVklERU9fTU9ERV9QSVhFTF9EQVRBVFlQRSkpOwotCWxlbiArPSBzbnByaW50 ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1ZJREVP X01PREVfQkxBTktJTkdfREFUQVRZUEUpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiks IChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9WSURFT19NT0RFX0RBVEFfQ1RS TCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVN UF9SRUdfVkFMVUUoRFNJX1ZJREVPX01PREVfQUNUSVZFX0gpKTsKLQlsZW4gKz0gc25wcmludGYo KGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9WSURFT19N T0RFX0FDVElWRV9WKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxl biksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVklERU9fTU9ERV9UT1RBTCkpOwotCWxlbiArPSBz bnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJ X1ZJREVPX01PREVfSFNZTkMpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXpl IC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9WSURFT19NT0RFX1ZTWU5DKSk7Ci0JbGVu ICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxV RShEU0lfVklERU9fTU9ERV9WU1lOQ19WUE9TKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBs ZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ09NTUFORF9NT0RFX0RN QV9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0J CQlEVU1QX1JFR19WQUxVRShEU0lfQ09NTUFORF9NT0RFX01EUF9DVFJMKSk7Ci0JbGVuICs9IHNu cHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lf Q09NTUFORF9NT0RFX01EUF9EQ1NfQ01EX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiAr IGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9ETUFfQ01EX09GRlNF VCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVN UF9SRUdfVkFMVUUoRFNJX0RNQV9DTURfTEVOR1RIKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYg KyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfRE1BX0ZJRk9fQ1RS TCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVN UF9SRUdfVkFMVUUoRFNJX0RNQV9OVUxMX1BBQ0tFVF9EQVRBKSk7Ci0JbGVuICs9IHNucHJpbnRm KChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ09NTUFO RF9NT0RFX01EUF9TVFJFQU0wX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiks IChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9DT01NQU5EX01PREVfTURQX1NU UkVBTTBfVE9UQUwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVu KSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9DT01NQU5EX01PREVfTURQX1NUUkVBTTFfQ1RSTCkp OwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9S RUdfVkFMVUUoRFNJX0NPTU1BTkRfTU9ERV9NRFBfU1RSRUFNMV9UT1RBTCkpOwotCWxlbiArPSBz bnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJ X0FDS19FUlJfU1RBVFVTKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAt IGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfUkRCS19EQVRBMCkpOwotCWxlbiArPSBzbnBy aW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1JE QktfREFUQTEpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwK LQkJCURVTVBfUkVHX1ZBTFVFKERTSV9SREJLX0RBVEEyKSk7Ci0JbGVuICs9IHNucHJpbnRmKChi dWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfUkRCS19EQVRB MykpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVN UF9SRUdfVkFMVUUoRFNJX1JEQktfREFUQVRZUEUwKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYg KyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfUkRCS19EQVRBVFlQ RTEpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURV TVBfUkVHX1ZBTFVFKERTSV9UUklHX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxl biksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9FWFRfTVVYKSk7Ci0JbGVu ICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxV RShEU0lfRVhUX01VWF9URV9QVUxTRV9ERVRFQ1RfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50Zigo YnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NNRF9NT0RF X0RNQV9TV19UUklHR0VSKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAt IGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ01EX01PREVfTURQX1NXX1RSSUdHRVIpKTsK LQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVH X1ZBTFVFKERTSV9DTURfTU9ERV9CVEFfU1dfVFJJR0dFUikpOwotCWxlbiArPSBzbnByaW50Zigo YnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1JFU0VUX1NX X1RSSUdHRVIpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwK LQkJCURVTVBfUkVHX1ZBTFVFKERTSV9NSVNSX0NNRF9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRm KChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfTUlTUl9W SURFT19DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiks 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 KERTSV9NSVNSX0NNRF9NRFAwXzMyQklUKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4p LCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfTUlTUl9DTURfTURQMV8zMkJJ VCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVN UF9SRUdfVkFMVUUoRFNJX01JU1JfVklERU9fMzJCSVQpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1 ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9DT01NQU5EX01P REVfTURQX0NUUkwyKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxl biksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ09NTUFORF9NT0RFX01EUF9TVFJFQU0yX0NUUkwp KTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBf UkVHX1ZBTFVFKERTSV9DT01NQU5EX01PREVfTURQX1NUUkVBTTJfVE9UQUwpKTsKLQlsZW4gKz0g c25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERT SV9WQklGX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVu KSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9BRVNfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50Zigo YnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1JEQktfREFU QV9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0J CQlEVU1QX1JFR19WQUxVRShEU0lfVEVTVF9QQVRURVJOX0dFTl9DTURfRE1BX0lOSVRfVkFMMikp OwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9S RUdfVkFMVUUoRFNJX1RQR19ETUFfRklGT19TVEFUVVMpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1 ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9UUEdfRE1BX0ZJ Rk9fV1JJVEVfVFJJR0dFUikpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUg LSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0RTSV9USU1JTkdfRkxVU0gpKTsKLQlsZW4g Kz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVF KERTSV9EU0lfVElNSU5HX0RCX01PREUpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiks IChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9UUEdfRE1BX0ZJRk9fUkVTRVQp KTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBf UkVHX1ZBTFVFKERTSV9WRVJTSU9OKSk7Ci0KLQlwcl9lcnIoIkxMRU5HVEggPSAlZFxuIiwgbGVu KTsKLQlyZXR1cm4gbGVuOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kt c3RhZ2luZy9kc2lfY3RybF9od18yXzIuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdp bmcvZHNpX2N0cmxfaHdfMl8yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMTkx M2YuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3Ry bF9od18yXzIuYworKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln aHQgKGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIg YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KSAiZHNpLWh3OiIg Zm10Ci0KLSNpbmNsdWRlICJkc2lfY3RybF9ody5oIgotI2luY2x1ZGUgImRzaV9jdHJsX3JlZy5o IgotI2luY2x1ZGUgImRzaV9ody5oIgotCi0vKiBFcXVpdmFsZW50IHRvIHJlZ2lzdGVyIERJU1Bf Q0NfTUlTQ19DTUQgKi8KLSNkZWZpbmUgRElTUF9DQ19DTEFNUF9SRUdfT0ZGIDB4MDAKLQotLyoq Ci0gKiBkc2lfY3RybF9od18yMl9waHlfcmVzZXRfY29uZmlnKCkgLSB0byBjb25maWd1cmUgY2xh bXAgY29udHJvbCBkdXJpbmcgdWxwcwotICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhl IGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBlbmFibGU6ICAgICAgYm9vbGVhbiB0byBz cGVjaWZ5IGVuYWJsZS9kaXNhYmxlLgotICovCi12b2lkIGRzaV9jdHJsX2h3XzIyX3BoeV9yZXNl dF9jb25maWcoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQlib29sIGVuYWJsZSkKLXsKLQl1 MzIgcmVnID0gMDsKLQotCXJlZyA9IERTSV9ESVNQX0NDX1IzMihjdHJsLCBESVNQX0NDX0NMQU1Q X1JFR19PRkYpOwotCi0JLyogTWFzay91bm1hc2sgZGlzYWJsZSBQSFkgcmVzZXQgYml0ICovCi0J aWYgKGVuYWJsZSkKLQkJcmVnICY9IH5CSVQoY3RybC0+aW5kZXgpOwotCWVsc2UKLQkJcmVnIHw9 IEJJVChjdHJsLT5pbmRleCk7Ci0JRFNJX0RJU1BfQ0NfVzMyKGN0cmwsIERJU1BfQ0NfQ0xBTVBf UkVHX09GRiwgcmVnKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0 YWdpbmcvZHNpX2N0cmxfaHdfY21uLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5n L2RzaV9jdHJsX2h3X2Ntbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjc4NDJm Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmxf aHdfY21uLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln aHQgKGMpIDIwMTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIg YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KSAiZHNpLWh3OiIg Zm10Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4K LQotI2luY2x1ZGUgImRzaV9jdHJsX2h3LmgiCi0jaW5jbHVkZSAiZHNpX2N0cmxfcmVnLmgiCi0j aW5jbHVkZSAiZHNpX2h3LmgiCi0jaW5jbHVkZSAiZHNpX3BhbmVsLmgiCi0jaW5jbHVkZSAiZHNp X2NhdGFsb2cuaCIKLSNpbmNsdWRlICJkcHVfZGJnLmgiCi0KLSNkZWZpbmUgTU1TU19NSVNDX0NM QU1QX1JFR19PRkYgICAgICAgICAgIDB4MDAxNAotI2RlZmluZSBEU0lfQ1RSTF9EWU5BTUlDX0ZP UkNFX09OICAgICAgICAgKDB4MjNGfEJJVCg4KXxCSVQoOSl8QklUKDExKXxCSVQoMjEpKQotI2Rl ZmluZSBEU0lfQ1RSTF9DTURfTUlTUl9FTkFCTEUgICAgICAgICAgQklUKDI4KQotI2RlZmluZSBE U0lfQ1RSTF9WSURFT19NSVNSX0VOQUJMRSAgICAgICAgQklUKDE2KQotCi0vKiBVbnN1cHBvcnRl ZCBmb3JtYXRzIGRlZmF1bHQgdG8gUkdCODg4ICovCi1zdGF0aWMgY29uc3QgdTggY21kX21vZGVf Zm9ybWF0X21hcFtEU0lfUElYRUxfRk9STUFUX01BWF0gPSB7Ci0JMHg2LCAweDcsIDB4OCwgMHg4 LCAweDAsIDB4MywgMHg0IH07Ci1zdGF0aWMgY29uc3QgdTggdmlkZW9fbW9kZV9mb3JtYXRfbWFw W0RTSV9QSVhFTF9GT1JNQVRfTUFYXSA9IHsKLQkweDAsIDB4MSwgMHgyLCAweDMsIDB4MywgMHgz LCAweDMgfTsKLQotLyoqCi0gKiBkc2lfc2V0dXBfdHJpZ2dlcl9jb250cm9scygpIC0gc2V0dXAg ZHNpIHRyaWdnZXIgY29uZmlndXJhdGlvbnMKLSAqIEBjdHJsOiAgICAgICAgICAgICBQb2ludGVy IHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBAY2ZnOiAgICAgICAgICAgICAg RFNJIGhvc3QgY29uZmlndXJhdGlvbiB0aGF0IGlzIGNvbW1vbiB0byBib3RoIHZpZGVvIGFuZAot ICogICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgbW9kZXMuCi0gKi8KLXN0YXRpYyB2b2lkIGRz aV9zZXR1cF90cmlnZ2VyX2NvbnRyb2xzKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkg ICAgICAgc3RydWN0IGRzaV9ob3N0X2NvbW1vbl9jZmcgKmNmZykKLXsKLQl1MzIgcmVnID0gMDsK LQljb25zdCB1OCB0cmlnZ2VyX21hcFtEU0lfVFJJR0dFUl9NQVhdID0gewotCQkweDAsIDB4Miwg MHgxLCAweDQsIDB4NSwgMHg2IH07Ci0KLQlyZWcgfD0gKGNmZy0+dGVfbW9kZSA9PSBEU0lfVEVf T05fRVhUX1BJTikgPyBCSVQoMzEpIDogMDsKLQlyZWcgfD0gKHRyaWdnZXJfbWFwW2NmZy0+ZG1h X2NtZF90cmlnZ2VyXSAmIDB4Nyk7Ci0JcmVnIHw9ICh0cmlnZ2VyX21hcFtjZmctPm1kcF9jbWRf dHJpZ2dlcl0gJiAweDcpIDw8IDQ7Ci0JRFNJX1czMihjdHJsLCBEU0lfVFJJR19DVFJMLCByZWcp OwotfQotCi0vKioKLSAqIGRzaV9jdHJsX2h3X2Ntbl9ob3N0X3NldHVwKCkgLSBzZXR1cCBkc2kg aG9zdCBjb25maWd1cmF0aW9uCi0gKiBAY3RybDogICAgICAgICAgICAgUG9pbnRlciB0byB0aGUg Y29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQGNmZzogICAgICAgICAgICAgIERTSSBob3N0 IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBjb21tb24gdG8gYm90aCB2aWRlbyBhbmQKLSAqICAgICAg ICAgICAgICAgICAgICBjb21tYW5kIG1vZGVzLgotICovCi12b2lkIGRzaV9jdHJsX2h3X2Ntbl9o b3N0X3NldHVwKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCSAgICAgICBzdHJ1Y3QgZHNp X2hvc3RfY29tbW9uX2NmZyAqY2ZnKQotewotCXUzMiByZWdfdmFsdWUgPSAwOwotCi0JZHNpX3Nl dHVwX3RyaWdnZXJfY29udHJvbHMoY3RybCwgY2ZnKTsKLQotCS8qIFNldHVwIGNsb2NraW5nIHRp bWluZyBjb250cm9scyAqLwotCXJlZ192YWx1ZSA9ICgoY2ZnLT50X2Nsa19wb3N0ICYgMHgzRikg PDwgOCk7Ci0JcmVnX3ZhbHVlIHw9IChjZmctPnRfY2xrX3ByZSAmIDB4M0YpOwotCURTSV9XMzIo Y3RybCwgRFNJX0NMS09VVF9USU1JTkdfQ1RSTCwgcmVnX3ZhbHVlKTsKLQotCS8qIEVPVCBwYWNr ZXQgY29udHJvbCAqLwotCXJlZ192YWx1ZSA9IGNmZy0+YXBwZW5kX3R4X2VvdCA/IDEgOiAwOwot CXJlZ192YWx1ZSB8PSAoY2ZnLT5pZ25vcmVfcnhfZW90ID8gKDEgPDwgNCkgOiAwKTsKLQlEU0lf VzMyKGN0cmwsIERTSV9FT1RfUEFDS0VUX0NUUkwsIHJlZ192YWx1ZSk7Ci0KLQkvKiBUdXJuIG9u IGRzaSBjbG9ja3MgKi8KLQlEU0lfVzMyKGN0cmwsIERTSV9DTEtfQ1RSTCwgMHgyM0YpOwotCi0J LyogU2V0dXAgRFNJIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLQlyZWdfdmFsdWUgPSBEU0lfUjMyKGN0 cmwsIERTSV9DVFJMKTsKLQlyZWdfdmFsdWUgfD0gKGNmZy0+ZW5fY3JjX2NoZWNrID8gQklUKDI0 KSA6IDApOwotCXJlZ192YWx1ZSB8PSAoY2ZnLT5lbl9lY2NfY2hlY2sgPyBCSVQoMjApIDogMCk7 Ci0JcmVnX3ZhbHVlIHw9IEJJVCg4KTsgLyogQ2xvY2sgbGFuZSAqLwotCXJlZ192YWx1ZSB8PSAo KGNmZy0+ZGF0YV9sYW5lcyAmIERTSV9EQVRBX0xBTkVfMykgPyBCSVQoNykgOiAwKTsKLQlyZWdf dmFsdWUgfD0gKChjZmctPmRhdGFfbGFuZXMgJiBEU0lfREFUQV9MQU5FXzIpID8gQklUKDYpIDog MCk7Ci0JcmVnX3ZhbHVlIHw9ICgoY2ZnLT5kYXRhX2xhbmVzICYgRFNJX0RBVEFfTEFORV8xKSA/ IEJJVCg1KSA6IDApOwotCXJlZ192YWx1ZSB8PSAoKGNmZy0+ZGF0YV9sYW5lcyAmIERTSV9EQVRB X0xBTkVfMCkgPyBCSVQoNCkgOiAwKTsKLQotCURTSV9XMzIoY3RybCwgRFNJX0NUUkwsIHJlZ192 YWx1ZSk7Ci0KLQlpZiAoY3RybC0+cGh5X2lzb2xhdGlvbl9lbmFibGVkKQotCQlEU0lfVzMyKGN0 cmwsIERTSV9ERUJVR19DVFJMLCBCSVQoMjgpKTsKLQlwcl9kZWJ1ZygiW0RTSV8lZF1Ib3N0IGNv bmZpZ3VyYXRpb24gY29tcGxldGVcbiIsIGN0cmwtPmluZGV4KTsKLX0KLQotLyoqCi0gKiBwaHlf c3dfcmVzZXQoKSAtIHBlcmZvcm0gYSBzb2Z0IHJlc2V0IG9uIHRoZSBQSFkuCi0gKiBAY3RybDog ICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqLwotdm9p ZCBkc2lfY3RybF9od19jbW5fcGh5X3N3X3Jlc2V0KHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCkK LXsKLQlEU0lfVzMyKGN0cmwsIERTSV9QSFlfU1dfUkVTRVQsIEJJVCgyNCl8QklUKDApKTsKLQl3 bWIoKTsgLyogbWFrZSBzdXJlIHJlc2V0IGlzIGFzc2VydGVkICovCi0JdWRlbGF5KDEwMDApOwot CURTSV9XMzIoY3RybCwgRFNJX1BIWV9TV19SRVNFVCwgMHgwKTsKLQl3bWIoKTsgLyogZW5zdXJl IHJlc2V0IGlzIGNsZWFyZWQgYmVmb3JlIHdhaXRpbmcgKi8KLQl1ZGVsYXkoMTAwKTsKLQotCXBy X2RlYnVnKCJbRFNJXyVkXSBwaHkgc3cgcmVzZXQgZG9uZVxuIiwgY3RybC0+aW5kZXgpOwotfQot Ci0vKioKLSAqIHNvZnRfcmVzZXQoKSAtIHBlcmZvcm0gYSBzb2Z0IHJlc2V0IG9uIERTSSBjb250 cm9sbGVyCi0gKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0 IGhhcmR3YXJlLgotICoKLSAqIFRoZSB2aWRlbywgY29tbWFuZCBhbmQgY29udHJvbGxlciBlbmdp bmVzIHdpbGwgYmUgZGlzYWJsZWQgYmVmb3JlIHRoZQotICogcmVzZXQgaXMgdHJpZ2dlcmVkIGFu ZCByZS1lbmFibGVkIGFmdGVyIHRoZSByZXNldCBpcyBjb21wbGV0ZS4KLSAqCi0gKiBJZiB0aGUg cmVzZXQgaXMgZG9uZSB3aGlsZSBNRFAgdGltaW5nIGVuZ2luZSBpcyB0dXJuZWQgb24sIHRoZSB2 aWRlbwotICogZW5pZ25lIHNob3VsZCBiZSByZS1lbmFibGVkIG9ubHkgZHVyaW5nIHRoZSB2ZXJ0 aWNhbCBibGFua2luZyB0aW1lLgotICovCi12b2lkIGRzaV9jdHJsX2h3X2Ntbl9zb2Z0X3Jlc2V0 KHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCkKLXsKLQl1MzIgcmVnID0gMDsKLQl1MzIgcmVnX2N0 cmwgPSAwOwotCi0JLyogQ2xlYXIgRFNJX0VOLCBWSURFT19NT0RFX0VOLCBDTURfTU9ERV9FTiAq LwotCXJlZ19jdHJsID0gRFNJX1IzMihjdHJsLCBEU0lfQ1RSTCk7Ci0JRFNJX1czMihjdHJsLCBE U0lfQ1RSTCwgcmVnX2N0cmwgJiB+MHg3KTsKLQl3bWIoKTsgLyogd2FpdCBjb250cm9sbGVyIHRv IGJlIGRpc2FibGVkIGJlZm9yZSByZXNldCAqLwotCi0JLyogRm9yY2UgZW5hYmxlIFBDTEssIEJZ VEVDTEssIEFIQk1fSENMSyAqLwotCXJlZyA9IERTSV9SMzIoY3RybCwgRFNJX0NMS19DVFJMKTsK LQlEU0lfVzMyKGN0cmwsIERTSV9DTEtfQ1RSTCwgcmVnIHwgRFNJX0NUUkxfRFlOQU1JQ19GT1JD RV9PTik7Ci0Jd21iKCk7IC8qIHdhaXQgZm9yIGNsb2NrcyB0byBiZSBlbmFibGVkICovCi0KLQkv KiBUcmlnZ2VyIHNvZnQgcmVzZXQgKi8KLQlEU0lfVzMyKGN0cmwsIERTSV9TT0ZUX1JFU0VULCAw eDEpOwotCXdtYigpOyAvKiB3YWl0IGZvciByZXNldCB0byBhc3NlcnQgYmVmb3JlIHdhaXRpbmcg Ki8KLQl1ZGVsYXkoMSk7Ci0JRFNJX1czMihjdHJsLCBEU0lfU09GVF9SRVNFVCwgMHgwKTsKLQl3 bWIoKTsgLyogZW5zdXJlIHJlc2V0IGlzIGNsZWFyZWQgKi8KLQotCS8qIERpc2FibGUgZm9yY2Ug Y2xvY2sgb24gKi8KLQlEU0lfVzMyKGN0cmwsIERTSV9DTEtfQ1RSTCwgcmVnKTsKLQl3bWIoKTsg LyogbWFrZSBzdXJlIGNsb2NrcyBhcmUgcmVzdG9yZWQgKi8KLQotCS8qIFJlLWVuYWJsZSBEU0kg Y29udHJvbGxlciAqLwotCURTSV9XMzIoY3RybCwgRFNJX0NUUkwsIHJlZ19jdHJsKTsKLQl3bWIo KTsgLyogbWFrZSBzdXJlIERTSSBjb250cm9sbGVyIGlzIGVuYWJsZWQgYWdhaW4gKi8KLQlwcl9k ZWJ1ZygiW0RTSV8lZF0gY3RybCBzb2Z0IHJlc2V0IGRvbmVcbiIsIGN0cmwtPmluZGV4KTsKLX0K LQotLyoqCi0gKiBzZXR1cF9taXNyKCkgLSBTZXR1cCBmcmFtZSBNSVNSCi0gKiBAY3RybDoJICBQ b2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBAcGFuZWxfbW9kZTog ICBDTUQgb3IgVklERU8gbW9kZSBpbmRpY2F0b3IKLSAqIEBlbmFibGU6CSAgRW5hYmxlL2Rpc2Fi bGUgTUlTUi4KLSAqIEBmcmFtZV9jb3VudDogIE51bWJlciBvZiBmcmFtZXMgdG8gYWNjdW11bGF0 ZSBNSVNSLgotICovCi12b2lkIGRzaV9jdHJsX2h3X2Ntbl9zZXR1cF9taXNyKHN0cnVjdCBkc2lf Y3RybF9odyAqY3RybCwKLQkJCWVudW0gZHNpX29wX21vZGUgcGFuZWxfbW9kZSwKLQkJCWJvb2wg ZW5hYmxlLAotCQkJdTMyIGZyYW1lX2NvdW50KQotewotCXUzMiBhZGRyOwotCXUzMiBjb25maWcg PSAwOwotCi0JaWYgKHBhbmVsX21vZGUgPT0gRFNJX09QX0NNRF9NT0RFKSB7Ci0JCWFkZHIgPSBE U0lfTUlTUl9DTURfQ1RSTDsKLQkJaWYgKGVuYWJsZSkKLQkJCWNvbmZpZyA9IERTSV9DVFJMX0NN RF9NSVNSX0VOQUJMRTsKLQl9IGVsc2UgewotCQlhZGRyID0gRFNJX01JU1JfVklERU9fQ1RSTDsK LQkJaWYgKGVuYWJsZSkKLQkJCWNvbmZpZyA9IERTSV9DVFJMX1ZJREVPX01JU1JfRU5BQkxFOwot CQlpZiAoZnJhbWVfY291bnQgPiAyNTUpCi0JCQlmcmFtZV9jb3VudCA9IDI1NTsKLQkJY29uZmln IHw9IGZyYW1lX2NvdW50IDw8IDg7Ci0JfQotCi0JcHJfZGVidWcoIltEU0lfJWRdIE1JU1IgY3Ry bDogMHgleFxuIiwgY3RybC0+aW5kZXgsCi0JCQljb25maWcpOwotCURTSV9XMzIoY3RybCwgYWRk ciwgY29uZmlnKTsKLQl3bWIoKTsgLyogbWFrZSBzdXJlIE1JU1IgaXMgY29uZmlndXJlZCAqLwot fQotCi0vKioKLSAqIGNvbGxlY3RfbWlzcigpIC0gUmVhZCBmcmFtZSBNSVNSCi0gKiBAY3RybDoJ ICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBAcGFuZWxfbW9k ZTogICBDTUQgb3IgVklERU8gbW9kZSBpbmRpY2F0b3IKLSAqLwotdTMyIGRzaV9jdHJsX2h3X2Nt bl9jb2xsZWN0X21pc3Ioc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJZW51bSBkc2lfb3Bf bW9kZSBwYW5lbF9tb2RlKQotewotCXUzMiBhZGRyOwotCXUzMiBlbmFibGVkOwotCXUzMiBtaXNy ID0gMDsKLQotCWlmIChwYW5lbF9tb2RlID09IERTSV9PUF9DTURfTU9ERSkgewotCQlhZGRyID0g RFNJX01JU1JfQ01EX01EUDBfMzJCSVQ7Ci0JCWVuYWJsZWQgPSBEU0lfUjMyKGN0cmwsIERTSV9N SVNSX0NNRF9DVFJMKSAmCi0JCQkJRFNJX0NUUkxfQ01EX01JU1JfRU5BQkxFOwotCX0gZWxzZSB7 Ci0JCWFkZHIgPSBEU0lfTUlTUl9WSURFT18zMkJJVDsKLQkJZW5hYmxlZCA9IERTSV9SMzIoY3Ry bCwgRFNJX01JU1JfVklERU9fQ1RSTCkgJgotCQkJCURTSV9DVFJMX1ZJREVPX01JU1JfRU5BQkxF OwotCX0KLQotCWlmIChlbmFibGVkKQotCQltaXNyID0gRFNJX1IzMihjdHJsLCBhZGRyKTsKLQot CXByX2RlYnVnKCJbRFNJXyVkXSBNSVNSIGVuYWJsZWQgJXggdmFsdWU6IDB4JXhcbiIsIGN0cmwt PmluZGV4LAotCQkJZW5hYmxlZCwgbWlzcik7Ci0JcmV0dXJuIG1pc3I7Ci19Ci0KLS8qKgotICog c2V0X3RpbWluZ19kYigpIC0gZW5hYmxlL2Rpc2FibGUgVGltaW5nIERCIHJlZ2lzdGVyCi0gKiBA Y3RybDogICAgICAgICAgUG9pbnRlciB0byBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBA ZW5hYmxlOiAgICAgICAgRW5hYmxlL0Rpc2FibGUgZmxhZy4KLSAqCi0gKiBFbmFibGUgb3IgRGlz YWJlIHRoZSBUaW1pbmcgREIgcmVnaXN0ZXIuCi0gKi8KLXZvaWQgZHNpX2N0cmxfaHdfY21uX3Nl dF90aW1pbmdfZGIoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCSAgICAgYm9vbCBlbmFi bGUpCi17Ci0JaWYgKGVuYWJsZSkKLQkJRFNJX1czMihjdHJsLCBEU0lfRFNJX1RJTUlOR19EQl9N T0RFLCAweDEpOwotCWVsc2UKLQkJRFNJX1czMihjdHJsLCBEU0lfRFNJX1RJTUlOR19EQl9NT0RF LCAweDApOwotCi0Jd21iKCk7IC8qIG1ha2Ugc3VyZSB0aW1pbmcgZGIgcmVnaXN0ZXJzIGFyZSBz ZXQgKi8KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gY3RybCB0aW1pbmcgREIgc2V0OiVkXG4iLCBjdHJs LT5pbmRleCwKLQkJCQllbmFibGUpOwotCURQVV9FVlQzMihjdHJsLT5pbmRleCwgZW5hYmxlKTsK LX0KLQotLyoqCi0gKiBzZXRfdmlkZW9fdGltaW5nKCkgLSBzZXQgdXAgdGhlIHRpbWluZyBmb3Ig dmlkZW8gZnJhbWUKLSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIGNvbnRyb2xsZXIgaG9z dCBoYXJkd2FyZS4KLSAqIEBtb2RlOiAgICAgICAgICBWaWRlbyBtb2RlIGluZm9ybWF0aW9uLgot ICoKLSAqIFNldCB1cCB0aGUgdmlkZW8gdGltaW5nIHBhcmFtZXRlcnMgZm9yIHRoZSBEU0kgdmlk ZW8gbW9kZSBvcGVyYXRpb24uCi0gKi8KLXZvaWQgZHNpX2N0cmxfaHdfY21uX3NldF92aWRlb190 aW1pbmcoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCSAgICAgc3RydWN0IGRzaV9tb2Rl X2luZm8gKm1vZGUpCi17Ci0JdTMyIHJlZyA9IDA7Ci0JdTMyIGhzX3N0YXJ0ID0gMDsKLQl1MzIg aHNfZW5kLCBhY3RpdmVfaF9zdGFydCwgYWN0aXZlX2hfZW5kLCBoX3RvdGFsLCB3aWR0aCA9IDA7 Ci0JdTMyIHZzX3N0YXJ0ID0gMCwgdnNfZW5kID0gMDsKLQl1MzIgdnBvc19zdGFydCA9IDAsIHZw b3NfZW5kLCBhY3RpdmVfdl9zdGFydCwgYWN0aXZlX3ZfZW5kLCB2X3RvdGFsOwotCi0JaWYgKG1v ZGUtPmRzY19lbmFibGVkICYmIG1vZGUtPmRzYykgewotCQl3aWR0aCA9IG1vZGUtPmRzYy0+cGNs a19wZXJfbGluZTsKLQkJcmVnID0gbW9kZS0+ZHNjLT5ieXRlc19wZXJfcGt0IDw8IDE2OwotCQly ZWcgfD0gKDB4MGIgPDwgOCk7ICAgIC8qIGR0eXBlIG9mIGNvbXByZXNzZWQgaW1hZ2UgKi8KLQkJ LyoKLQkJICogcGt0X3Blcl9saW5lOgotCQkgKiAwID09IDEgcGt0Ci0JCSAqIDEgPT0gMiBwa3QK LQkJICogMiA9PSA0IHBrdAotCQkgKiAzIHBrdCBpcyBub3Qgc3VwcG9ydAotCQkgKi8KLQkJaWYg KG1vZGUtPmRzYy0+cGt0X3Blcl9saW5lID09IDQpCi0JCQlyZWcgfD0gKG1vZGUtPmRzYy0+cGt0 X3Blcl9saW5lIC0gMikgPDwgNjsKLQkJZWxzZQotCQkJcmVnIHw9IChtb2RlLT5kc2MtPnBrdF9w ZXJfbGluZSAtIDEpIDw8IDY7Ci0JCXJlZyB8PSBtb2RlLT5kc2MtPmVvbF9ieXRlX251bSA8PCA0 OwotCQlyZWcgfD0gMTsKLQkJRFNJX1czMihjdHJsLCBEU0lfVklERU9fQ09NUFJFU1NJT05fTU9E RV9DVFJMLCByZWcpOwotCX0gZWxzZSB7Ci0JCXdpZHRoID0gbW9kZS0+aF9hY3RpdmU7Ci0JfQot Ci0JaHNfZW5kID0gbW9kZS0+aF9zeW5jX3dpZHRoOwotCWFjdGl2ZV9oX3N0YXJ0ID0gbW9kZS0+ aF9zeW5jX3dpZHRoICsgbW9kZS0+aF9iYWNrX3BvcmNoOwotCWFjdGl2ZV9oX2VuZCA9IGFjdGl2 ZV9oX3N0YXJ0ICsgd2lkdGg7Ci0JaF90b3RhbCA9IChtb2RlLT5oX3N5bmNfd2lkdGggKyBtb2Rl LT5oX2JhY2tfcG9yY2ggKyB3aWR0aCArCi0JCSAgIG1vZGUtPmhfZnJvbnRfcG9yY2gpIC0gMTsK LQotCXZwb3NfZW5kID0gbW9kZS0+dl9zeW5jX3dpZHRoOwotCWFjdGl2ZV92X3N0YXJ0ID0gbW9k ZS0+dl9zeW5jX3dpZHRoICsgbW9kZS0+dl9iYWNrX3BvcmNoOwotCWFjdGl2ZV92X2VuZCA9IGFj dGl2ZV92X3N0YXJ0ICsgbW9kZS0+dl9hY3RpdmU7Ci0Jdl90b3RhbCA9IChtb2RlLT52X3N5bmNf d2lkdGggKyBtb2RlLT52X2JhY2tfcG9yY2ggKyBtb2RlLT52X2FjdGl2ZSArCi0JCSAgIG1vZGUt PnZfZnJvbnRfcG9yY2gpIC0gMTsKLQotCXJlZyA9ICgoYWN0aXZlX2hfZW5kICYgMHhGRkZGKSA8 PCAxNikgfCAoYWN0aXZlX2hfc3RhcnQgJiAweEZGRkYpOwotCURTSV9XMzIoY3RybCwgRFNJX1ZJ REVPX01PREVfQUNUSVZFX0gsIHJlZyk7Ci0KLQlyZWcgPSAoKGFjdGl2ZV92X2VuZCAmIDB4RkZG RikgPDwgMTYpIHwgKGFjdGl2ZV92X3N0YXJ0ICYgMHhGRkZGKTsKLQlEU0lfVzMyKGN0cmwsIERT SV9WSURFT19NT0RFX0FDVElWRV9WLCByZWcpOwotCi0JcmVnID0gKCh2X3RvdGFsICYgMHhGRkZG KSA8PCAxNikgfCAoaF90b3RhbCAmIDB4RkZGRik7Ci0JRFNJX1czMihjdHJsLCBEU0lfVklERU9f TU9ERV9UT1RBTCwgcmVnKTsKLQotCXJlZyA9ICgoaHNfZW5kICYgMHhGRkZGKSA8PCAxNikgfCAo aHNfc3RhcnQgJiAweEZGRkYpOwotCURTSV9XMzIoY3RybCwgRFNJX1ZJREVPX01PREVfSFNZTkMs IHJlZyk7Ci0KLQlyZWcgPSAoKHZzX2VuZCAmIDB4RkZGRikgPDwgMTYpIHwgKHZzX3N0YXJ0ICYg MHhGRkZGKTsKLQlEU0lfVzMyKGN0cmwsIERTSV9WSURFT19NT0RFX1ZTWU5DLCByZWcpOwotCi0J cmVnID0gKCh2cG9zX2VuZCAmIDB4RkZGRikgPDwgMTYpIHwgKHZwb3Nfc3RhcnQgJiAweEZGRkYp OwotCURTSV9XMzIoY3RybCwgRFNJX1ZJREVPX01PREVfVlNZTkNfVlBPUywgcmVnKTsKLQotCS8q IFRPRE86IEhTIFRJTUVSIHZhbHVlPyAqLwotCURTSV9XMzIoY3RybCwgRFNJX0hTX1RJTUVSX0NU UkwsIDB4M0ZEMDgpOwotCURTSV9XMzIoY3RybCwgRFNJX01JU1JfVklERU9fQ1RSTCwgMHgxMDEw MCk7Ci0JRFNJX1czMihjdHJsLCBEU0lfRFNJX1RJTUlOR19GTFVTSCwgMHgxKTsKLQlwcl9kZWJ1 ZygiW0RTSV8lZF0gY3RybCB2aWRlbyBwYXJhbWV0ZXJzIHVwZGF0ZWRcbiIsIGN0cmwtPmluZGV4 KTsKLQlEUFVfRVZUMzIodl90b3RhbCwgaF90b3RhbCk7Ci19Ci0KLS8qKgotICogc2V0dXBfY21k X3N0cmVhbSgpIC0gc2V0IHVwIHBhcmFtZXRlcnMgZm9yIGNvbW1hbmQgcGl4ZWwgc3RyZWFtcwot ICogQGN0cmw6ICAgICAgICAgICAgICBQb2ludGVyIHRvIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2Fy ZS4KLSAqIEBtb2RlOiAgICAgICAgICAgICAgUG9pbnRlciB0byBtb2RlIGluZm9ybWF0aW9uLgot ICogQGhfc3RyaWRlOiAgICAgICAgICBIb3Jpem9udGFsIHN0cmlkZSBpbiBieXRlcy4KLSAqIEB2 Y19pZDogICAgICAgICAgICAgc3RyZWFtX2lkCi0gKgotICogU2V0dXAgcGFyYW1ldGVycyBmb3Ig Y29tbWFuZCBtb2RlIHBpeGVsIHN0cmVhbSBzaXplLgotICovCi12b2lkIGRzaV9jdHJsX2h3X2Nt bl9zZXR1cF9jbWRfc3RyZWFtKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkgICAgIHN0 cnVjdCBkc2lfbW9kZV9pbmZvICptb2RlLAotCQkJCSAgICAgdTMyIGhfc3RyaWRlLAotCQkJCSAg ICAgdTMyIHZjX2lkLAotCQkJCSAgICAgc3RydWN0IGRzaV9yZWN0ICpyb2kpCi17Ci0JdTMyIHdp ZHRoX2ZpbmFsLCBzdHJpZGVfZmluYWw7Ci0JdTMyIGhlaWdodF9maW5hbDsKLQl1MzIgc3RyZWFt X3RvdGFsID0gMCwgc3RyZWFtX2N0cmwgPSAwOwotCXUzMiByZWdfY3RybCA9IDAsIHJlZ19jdHJs MiA9IDA7Ci0KLQlpZiAocm9pICYmICghcm9pLT53IHx8ICFyb2ktPmgpKQotCQlyZXR1cm47Ci0K LQlpZiAobW9kZS0+ZHNjX2VuYWJsZWQgJiYgbW9kZS0+ZHNjKSB7Ci0JCXUzMiByZWcgPSAwOwot CQl1MzIgb2Zmc2V0ID0gMDsKLQkJaW50IHBpY193aWR0aCwgdGhpc19mcmFtZV9zbGljZXMsIGlu dGZfaXBfdzsKLQkJc3RydWN0IG1zbV9kaXNwbGF5X2RzY19pbmZvIGRzYzsKLQotCQltZW1jcHko JmRzYywgbW9kZS0+ZHNjLCBzaXplb2YoZHNjKSk7Ci0JCXBpY193aWR0aCA9IHJvaSA/IHJvaS0+ dyA6IG1vZGUtPmhfYWN0aXZlOwotCQl0aGlzX2ZyYW1lX3NsaWNlcyA9IHBpY193aWR0aCAvIGRz Yy5zbGljZV93aWR0aDsKLQkJaW50Zl9pcF93ID0gdGhpc19mcmFtZV9zbGljZXMgKiBkc2Muc2xp Y2Vfd2lkdGg7Ci0JCWRzaV9kc2NfcGNsa19wYXJhbV9jYWxjKCZkc2MsIGludGZfaXBfdyk7Ci0K LQkJaWYgKHZjX2lkICE9IDApCi0JCQlvZmZzZXQgPSAxNjsKLQkJcmVnX2N0cmwgPSBEU0lfUjMy KGN0cmwsIERTSV9DT01NQU5EX0NPTVBSRVNTSU9OX01PREVfQ1RSTCk7Ci0JCXJlZ19jdHJsMiA9 IERTSV9SMzIoY3RybCwgRFNJX0NPTU1BTkRfQ09NUFJFU1NJT05fTU9ERV9DVFJMMik7Ci0JCXdp ZHRoX2ZpbmFsID0gZHNjLnBjbGtfcGVyX2xpbmU7Ci0JCXN0cmlkZV9maW5hbCA9IGRzYy5ieXRl c19wZXJfcGt0OwotCQloZWlnaHRfZmluYWwgPSByb2kgPyByb2ktPmggOiBtb2RlLT52X2FjdGl2 ZTsKLQotCQlyZWcgPSAweDM5IDw8IDg7Ci0JCS8qCi0JCSAqIHBrdF9wZXJfbGluZToKLQkJICog MCA9PSAxIHBrdAotCQkgKiAxID09IDIgcGt0Ci0JCSAqIDIgPT0gNCBwa3QKLQkJICogMyBwa3Qg aXMgbm90IHN1cHBvcnQKLQkJICovCi0JCWlmIChkc2MucGt0X3Blcl9saW5lID09IDQpCi0JCQly ZWcgfD0gKGRzYy5wa3RfcGVyX2xpbmUgLSAyKSA8PCA2OwotCQllbHNlCi0JCQlyZWcgfD0gKGRz Yy5wa3RfcGVyX2xpbmUgLSAxKSA8PCA2OwotCQlyZWcgfD0gZHNjLmVvbF9ieXRlX251bSA8PCA0 OwotCQlyZWcgfD0gMTsKLQotCQlyZWdfY3RybCAmPSB+KDB4RkZGRiA8PCBvZmZzZXQpOwotCQly ZWdfY3RybCB8PSAocmVnIDw8IG9mZnNldCk7Ci0JCXJlZ19jdHJsMiAmPSB+KDB4RkZGRiA8PCBv ZmZzZXQpOwotCQlyZWdfY3RybDIgfD0gKGRzYy5ieXRlc19pbl9zbGljZSA8PCBvZmZzZXQpOwot Ci0JCXByX2RlYnVnKCJjdHJsICVkIHJlZ19jdHJsIDB4JXggcmVnX2N0cmwyIDB4JXhcbiIsIGN0 cmwtPmluZGV4LAotCQkJCXJlZ19jdHJsLCByZWdfY3RybDIpOwotCX0gZWxzZSBpZiAocm9pKSB7 Ci0JCXdpZHRoX2ZpbmFsID0gcm9pLT53OwotCQlzdHJpZGVfZmluYWwgPSByb2ktPncgKiAzOwot CQloZWlnaHRfZmluYWwgPSByb2ktPmg7Ci0JfSBlbHNlIHsKLQkJd2lkdGhfZmluYWwgPSBtb2Rl LT5oX2FjdGl2ZTsKLQkJc3RyaWRlX2ZpbmFsID0gaF9zdHJpZGU7Ci0JCWhlaWdodF9maW5hbCA9 IG1vZGUtPnZfYWN0aXZlOwotCX0KLQotCXN0cmVhbV9jdHJsID0gKHN0cmlkZV9maW5hbCArIDEp IDw8IDE2OwotCXN0cmVhbV9jdHJsIHw9ICh2Y19pZCAmIDB4MykgPDwgODsKLQlzdHJlYW1fY3Ry bCB8PSAweDM5OyAvKiBwYWNrZXQgZGF0YSB0eXBlICovCi0KLQlEU0lfVzMyKGN0cmwsIERTSV9D T01NQU5EX0NPTVBSRVNTSU9OX01PREVfQ1RSTCwgcmVnX2N0cmwpOwotCURTSV9XMzIoY3RybCwg RFNJX0NPTU1BTkRfQ09NUFJFU1NJT05fTU9ERV9DVFJMMiwgcmVnX2N0cmwyKTsKLQotCURTSV9X MzIoY3RybCwgRFNJX0NPTU1BTkRfTU9ERV9NRFBfU1RSRUFNMF9DVFJMLCBzdHJlYW1fY3RybCk7 Ci0JRFNJX1czMihjdHJsLCBEU0lfQ09NTUFORF9NT0RFX01EUF9TVFJFQU0xX0NUUkwsIHN0cmVh bV9jdHJsKTsKLQotCXN0cmVhbV90b3RhbCA9IChoZWlnaHRfZmluYWwgPDwgMTYpIHwgd2lkdGhf ZmluYWw7Ci0JRFNJX1czMihjdHJsLCBEU0lfQ09NTUFORF9NT0RFX01EUF9TVFJFQU0wX1RPVEFM LCBzdHJlYW1fdG90YWwpOwotCURTSV9XMzIoY3RybCwgRFNJX0NPTU1BTkRfTU9ERV9NRFBfU1RS RUFNMV9UT1RBTCwgc3RyZWFtX3RvdGFsKTsKLQotCXByX2RlYnVnKCJjdHJsICVkIHN0cmVhbV9j dHJsIDB4JXggc3RyZWFtX3RvdGFsIDB4JXhcbiIsIGN0cmwtPmluZGV4LAotCQkJc3RyZWFtX2N0 cmwsIHN0cmVhbV90b3RhbCk7Ci19Ci0KLS8qKgotICogdmlkZW9fZW5naW5lX3NldHVwKCkgLSBT ZXR1cCBkc2kgaG9zdCBjb250cm9sbGVyIGZvciB2aWRlbyBtb2RlCi0gKiBAY3RybDogICAgICAg ICAgUG9pbnRlciB0byBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBAY29tbW9uX2NmZzog ICAgQ29tbW9uIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KLSAqIEBjZmc6ICAgICAgICAgICBW aWRlbyBtb2RlIGNvbmZpZ3VyYXRpb24uCi0gKgotICogU2V0IHVwIERTSSB2aWRlbyBlbmdpbmUg d2l0aCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uIENvbnRyb2xsZXIgYW5kCi0gKiB2aWRlbyBl bmdpbmUgYXJlIG5vdCBlbmFibGVkIGFzIHBhcnQgb2YgdGhpcyBmdW5jdGlvbi4KLSAqLwotdm9p ZCBkc2lfY3RybF9od19jbW5fdmlkZW9fZW5naW5lX3NldHVwKHN0cnVjdCBkc2lfY3RybF9odyAq Y3RybCwKLQkJCQkgICAgICAgc3RydWN0IGRzaV9ob3N0X2NvbW1vbl9jZmcgKmNvbW1vbl9jZmcs Ci0JCQkJICAgICAgIHN0cnVjdCBkc2lfdmlkZW9fZW5naW5lX2NmZyAqY2ZnKQotewotCXUzMiBy ZWcgPSAwOwotCi0JcmVnIHw9IChjZmctPmxhc3RfbGluZV9pbnRlcmxlYXZlX2VuID8gQklUKDMx KSA6IDApOwotCXJlZyB8PSAoY2ZnLT5wdWxzZV9tb2RlX2hzYV9oZSA/IEJJVCgyOCkgOiAwKTsK LQlyZWcgfD0gKGNmZy0+aGZwX2xwMTFfZW4gPyBCSVQoMjQpIDogMCk7Ci0JcmVnIHw9IChjZmct PmhicF9scDExX2VuID8gQklUKDIwKSA6IDApOwotCXJlZyB8PSAoY2ZnLT5oc2FfbHAxMV9lbiA/ IEJJVCgxNikgOiAwKTsKLQlyZWcgfD0gKGNmZy0+ZW9mX2JsbHBfbHAxMV9lbiA/IEJJVCgxNSkg OiAwKTsKLQlyZWcgfD0gKGNmZy0+YmxscF9scDExX2VuID8gQklUKDEyKSA6IDApOwotCXJlZyB8 PSAoY2ZnLT50cmFmZmljX21vZGUgJiAweDMpIDw8IDg7Ci0JcmVnIHw9IChjZmctPnZjX2lkICYg MHgzKTsKLQlyZWcgfD0gKHZpZGVvX21vZGVfZm9ybWF0X21hcFtjb21tb25fY2ZnLT5kc3RfZm9y bWF0XSAmIDB4MykgPDwgNDsKLQlEU0lfVzMyKGN0cmwsIERTSV9WSURFT19NT0RFX0NUUkwsIHJl Zyk7Ci0KLQlyZWcgPSAoY29tbW9uX2NmZy0+c3dhcF9tb2RlICYgMHg3KSA8PCAxMjsKLQlyZWcg fD0gKGNvbW1vbl9jZmctPmJpdF9zd2FwX3JlZCA/IEJJVCgwKSA6IDApOwotCXJlZyB8PSAoY29t bW9uX2NmZy0+Yml0X3N3YXBfZ3JlZW4gPyBCSVQoNCkgOiAwKTsKLQlyZWcgfD0gKGNvbW1vbl9j ZmctPmJpdF9zd2FwX2JsdWUgPyBCSVQoOCkgOiAwKTsKLQlEU0lfVzMyKGN0cmwsIERTSV9WSURF T19NT0RFX0RBVEFfQ1RSTCwgcmVnKTsKLQkvKiBEaXNhYmxlIFRpbWluZyBkb3VibGUgYnVmZmVy aW5nICovCi0JRFNJX1czMihjdHJsLCBEU0lfRFNJX1RJTUlOR19EQl9NT0RFLCAweDApOwotCi0K LQlwcl9kZWJ1ZygiW0RTSV8lZF0gVmlkZW8gZW5naW5lIHNldHVwIGRvbmVcbiIsIGN0cmwtPmlu ZGV4KTsKLX0KLQotdm9pZCBkc2lfY3RybF9od19jbW5fZGVidWdfYnVzKHN0cnVjdCBkc2lfY3Ry bF9odyAqY3RybCkKLXsKLQl1MzIgcmVnID0gMDsKLQotCURTSV9XMzIoY3RybCwgRFNJX0RFQlVH X0JVU19DVEwsIDB4MTgxKTsKLQotCS8qIG1ha2Ugc3VyZSB0aGF0IGRlYnVnIHRlc3QgcG9pbnQg aXMgZW5hYmxlZCAqLwotCXdtYigpOwotCXJlZyA9IERTSV9SMzIoY3RybCwgRFNJX0RFQlVHX0JV U19TVEFUVVMpOwotCi0JcHJfZXJyKCJbRFNJXyVkXSBkZWJ1ZyBidXMgc3RhdHVzOjB4JXhcbiIs IGN0cmwtPmluZGV4LCByZWcpOwotfQotLyoqCi0gKiBjbWRfZW5naW5lX3NldHVwKCkgLSBzZXR1 cCBkc2kgaG9zdCBjb250cm9sbGVyIGZvciBjb21tYW5kIG1vZGUKLSAqIEBjdHJsOiAgICAgICAg ICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBAY29tbW9uX2Nm ZzogICAgQ29tbW9uIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KLSAqIEBjZmc6ICAgICAgICAg ICBDb21tYW5kIG1vZGUgY29uZmlndXJhdGlvbi4KLSAqCi0gKiBTZXR1cCBEU0kgQ01EIGVuZ2lu ZSB3aXRoIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gQ29udHJvbGxlciBhbmQKLSAqIGNvbW1h bmQgZW5naW5lIGFyZSBub3QgZW5hYmxlZCBhcyBwYXJ0IG9mIHRoaXMgZnVuY3Rpb24uCi0gKi8K LXZvaWQgZHNpX2N0cmxfaHdfY21uX2NtZF9lbmdpbmVfc2V0dXAoc3RydWN0IGRzaV9jdHJsX2h3 ICpjdHJsLAotCQkJCSAgICAgc3RydWN0IGRzaV9ob3N0X2NvbW1vbl9jZmcgKmNvbW1vbl9jZmcs Ci0JCQkJICAgICBzdHJ1Y3QgZHNpX2NtZF9lbmdpbmVfY2ZnICpjZmcpCi17Ci0JdTMyIHJlZyA9 IDA7Ci0KLQlyZWcgPSAoY2ZnLT5tYXhfY21kX3BhY2tldHNfaW50ZXJsZWF2ZSAmIDB4RikgPDwg MjA7Ci0JcmVnIHw9IChjb21tb25fY2ZnLT5iaXRfc3dhcF9yZWQgPyBCSVQoNCkgOiAwKTsKLQly ZWcgfD0gKGNvbW1vbl9jZmctPmJpdF9zd2FwX2dyZWVuID8gQklUKDgpIDogMCk7Ci0JcmVnIHw9 IChjb21tb25fY2ZnLT5iaXRfc3dhcF9ibHVlID8gQklUKDEyKSA6IDApOwotCXJlZyB8PSBjbWRf bW9kZV9mb3JtYXRfbWFwW2NvbW1vbl9jZmctPmRzdF9mb3JtYXRdOwotCURTSV9XMzIoY3RybCwg RFNJX0NPTU1BTkRfTU9ERV9NRFBfQ1RSTCwgcmVnKTsKLQotCXJlZyA9IERTSV9SMzIoY3RybCwg RFNJX0NPTU1BTkRfTU9ERV9NRFBfQ1RSTDIpOwotCXJlZyB8PSBCSVQoMTYpOwotCURTSV9XMzIo Y3RybCwgRFNJX0NPTU1BTkRfTU9ERV9NRFBfQ1RSTDIsIHJlZyk7Ci0KLQlyZWcgPSBjZmctPndy X21lbV9zdGFydCAmIDB4RkY7Ci0JcmVnIHw9IChjZmctPndyX21lbV9jb250aW51ZSAmIDB4RkYp IDw8IDg7Ci0JcmVnIHw9IChjZmctPmluc2VydF9kY3NfY29tbWFuZCA/IEJJVCgxNikgOiAwKTsK LQlEU0lfVzMyKGN0cmwsIERTSV9DT01NQU5EX01PREVfTURQX0RDU19DTURfQ1RSTCwgcmVnKTsK LQotCXByX2RlYnVnKCJbRFNJXyVkXSBDbWQgZW5naW5lIHNldHVwIGRvbmVcbiIsIGN0cmwtPmlu ZGV4KTsKLX0KLQotLyoqCi0gKiB2aWRlb19lbmdpbmVfZW4oKSAtIGVuYWJsZSBEU0kgdmlkZW8g ZW5naW5lCi0gKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byBjb250cm9sbGVyIGhvc3QgaGFy ZHdhcmUuCi0gKiBAb246ICAgICAgICAgICAgRW5hYmxlL2Rpc2FiZWwgdmlkZW8gZW5naW5lLgot ICovCi12b2lkIGRzaV9jdHJsX2h3X2Ntbl92aWRlb19lbmdpbmVfZW4oc3RydWN0IGRzaV9jdHJs X2h3ICpjdHJsLCBib29sIG9uKQotewotCXUzMiByZWcgPSAwOwotCi0JLyogU2V0L0NsZWFyIFZJ REVPX01PREVfRU4gYml0ICovCi0JcmVnID0gRFNJX1IzMihjdHJsLCBEU0lfQ1RSTCk7Ci0JaWYg KG9uKQotCQlyZWcgfD0gQklUKDEpOwotCWVsc2UKLQkJcmVnICY9IH5CSVQoMSk7Ci0KLQlEU0lf VzMyKGN0cmwsIERTSV9DVFJMLCByZWcpOwotCi0JcHJfZGVidWcoIltEU0lfJWRdIFZpZGVvIGVu Z2luZSA9ICVkXG4iLCBjdHJsLT5pbmRleCwgb24pOwotfQotCi0vKioKLSAqIGN0cmxfZW4oKSAt IGVuYWJsZSBEU0kgY29udHJvbGxlciBlbmdpbmUKLSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVy IHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBAb246ICAgICAgICAgICAgdHVy biBvbi9vZmYgdGhlIERTSSBjb250cm9sbGVyIGVuZ2luZS4KLSAqLwotdm9pZCBkc2lfY3RybF9o d19jbW5fY3RybF9lbihzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIGJvb2wgb24pCi17Ci0JdTMy IHJlZyA9IDA7Ci0JdTMyIGNsa19jdHJsOwotCi0JY2xrX2N0cmwgPSBEU0lfUjMyKGN0cmwsIERT SV9DTEtfQ1RSTCk7Ci0JRFNJX1czMihjdHJsLCBEU0lfQ0xLX0NUUkwsIGNsa19jdHJsIHwgRFNJ X0NUUkxfRFlOQU1JQ19GT1JDRV9PTik7Ci0Jd21iKCk7IC8qIHdhaXQgZm9yIGNsb2NrcyB0byBl bmFibGUgKi8KLQotCS8qIFNldC9DbGVhciBEU0lfRU4gYml0ICovCi0JcmVnID0gRFNJX1IzMihj dHJsLCBEU0lfQ1RSTCk7Ci0JaWYgKG9uKQotCQlyZWcgfD0gQklUKDApOwotCWVsc2UKLQkJcmVn ICY9IH5CSVQoMCk7Ci0KLQlEU0lfVzMyKGN0cmwsIERTSV9DVFJMLCByZWcpOwotCXdtYigpOyAv KiB3YWl0IGZvciBEU0lfRU4gdXBkYXRlIGJlZm9yZSBkaXNhYmxpbmcgY2xvY2tzICovCi0KLQlE U0lfVzMyKGN0cmwsIERTSV9DTEtfQ1RSTCwgY2xrX2N0cmwpOwotCXdtYigpOyAvKiBtYWtlIHN1 cmUgY2xvY2tzIGFyZSByZXN0b3JlZCAqLwotCi0JcHJfZGVidWcoIltEU0lfJWRdIENvbnRyb2xs ZXIgZW5naW5lID0gJWRcbiIsIGN0cmwtPmluZGV4LCBvbik7Ci19Ci0KLS8qKgotICogY21kX2Vu Z2luZV9lbigpIC0gZW5hYmxlIERTSSBjb250cm9sbGVyIGNvbW1hbmQgZW5naW5lCi0gKiBAY3Ry bDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICog QG9uOiAgICAgICAgICAgIFR1cm4gb24vb2ZmIHRoZSBEU0kgY29tbWFuZCBlbmdpbmUuCi0gKi8K LXZvaWQgZHNpX2N0cmxfaHdfY21uX2NtZF9lbmdpbmVfZW4oc3RydWN0IGRzaV9jdHJsX2h3ICpj dHJsLCBib29sIG9uKQotewotCXUzMiByZWcgPSAwOwotCi0JLyogU2V0L0NsZWFyIENNRF9NT0RF X0VOIGJpdCAqLwotCXJlZyA9IERTSV9SMzIoY3RybCwgRFNJX0NUUkwpOwotCWlmIChvbikKLQkJ cmVnIHw9IEJJVCgyKTsKLQllbHNlCi0JCXJlZyAmPSB+QklUKDIpOwotCi0JRFNJX1czMihjdHJs LCBEU0lfQ1RSTCwgcmVnKTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXSBjb21tYW5kIGVuZ2luZSA9 ICVkXG4iLCBjdHJsLT5pbmRleCwgb24pOwotfQotCi0vKioKLSAqIGtpY2tvZmZfY29tbWFuZCgp IC0gdHJhbnNtaXRzIGNvbW1hbmRzIHN0b3JlZCBpbiBtZW1vcnkKLSAqIEBjdHJsOiAgICAgICAg ICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBAY21kOiAgICAg ICAgICAgQ29tbWFuZCBpbmZvcm1hdGlvbi4KLSAqIEBmbGFnczogICAgICAgICBNb2RpZmllcnMg Zm9yIGNvbW1hbmQgdHJhbnNtaXNzaW9uLgotICoKLSAqIFRoZSBjb250cm9sbGVyIGhhcmR3YXJl IGlzIHByb2dyYW1tZWQgd2l0aCBhZGRyZXNzIGFuZCBzaXplIG9mIHRoZQotICogY29tbWFuZCBi dWZmZXIuIFRoZSB0cmFuc21pc3Npb24gaXMga2lja2VkIG9mZiBpZgotICogRFNJX0NUUkxfSFdf Q01EX1dBSVRfRk9SX1RSSUdHRVIgZmxhZyBpcyBub3Qgc2V0LiBJZiB0aGlzIGZsYWcgaXMKLSAq IHNldCwgY2FsbGVyIHNob3VsZCBtYWtlIGEgc2VwYXJhdGUgY2FsbCB0byB0cmlnZ2VyX2NvbW1h bmRfZG1hKCkgdG8KLSAqIHRyYW5zbWl0IHRoZSBjb21tYW5kLgotICovCi12b2lkIGRzaV9jdHJs X2h3X2Ntbl9raWNrb2ZmX2NvbW1hbmQoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCSAg ICBzdHJ1Y3QgZHNpX2N0cmxfY21kX2RtYV9pbmZvICpjbWQsCi0JCQkJICAgIHUzMiBmbGFncykK LXsKLQl1MzIgcmVnID0gMDsKLQotCS8qU2V0IEJST0FEQ0FTVF9FTiBhbmQgRU1CRURERURfTU9E RSAqLwotCXJlZyA9IERTSV9SMzIoY3RybCwgRFNJX0NPTU1BTkRfTU9ERV9ETUFfQ1RSTCk7Ci0J aWYgKGNtZC0+ZW5fYnJvYWRjYXN0KQotCQlyZWcgfD0gQklUKDMxKTsKLQllbHNlCi0JCXJlZyAm PSB+QklUKDMxKTsKLQotCWlmIChjbWQtPmlzX21hc3RlcikKLQkJcmVnIHw9IEJJVCgzMCk7Ci0J ZWxzZQotCQlyZWcgJj0gfkJJVCgzMCk7Ci0KLQlpZiAoY21kLT51c2VfbHBtKQotCQlyZWcgfD0g QklUKDI2KTsKLQllbHNlCi0JCXJlZyAmPSB+QklUKDI2KTsKLQotCXJlZyB8PSBCSVQoMjgpOwot CURTSV9XMzIoY3RybCwgRFNJX0NPTU1BTkRfTU9ERV9ETUFfQ1RSTCwgcmVnKTsKLQotCURTSV9X MzIoY3RybCwgRFNJX0RNQV9DTURfT0ZGU0VULCBjbWQtPm9mZnNldCk7Ci0JRFNJX1czMihjdHJs LCBEU0lfRE1BX0NNRF9MRU5HVEgsIChjbWQtPmxlbmd0aCAmIDB4RkZGRkZGKSk7Ci0KLQkvKiB3 YWl0IGZvciB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIGtpY2sgb2ZmICovCi0Jd21iKCk7Ci0K LQlpZiAoIShmbGFncyAmIERTSV9DVFJMX0hXX0NNRF9XQUlUX0ZPUl9UUklHR0VSKSkKLQkJRFNJ X1czMihjdHJsLCBEU0lfQ01EX01PREVfRE1BX1NXX1RSSUdHRVIsIDB4MSk7Ci19Ci0KLS8qKgot ICoga2lja29mZl9maWZvX2NvbW1hbmQoKSAtIHRyYW5zbWl0cyBhIGNvbW1hbmQgdXNpbmcgRklG TyBpbiBkc2kKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZS4KLSAqIEBjdHJs OiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBA Y21kOiAgICAgICAgICAgQ29tbWFuZCBpbmZvcm1hdGlvbi4KLSAqIEBmbGFnczogICAgICAgICBN b2RpZmllcnMgZm9yIGNvbW1hbmQgdHJhbnNtaXNzaW9uLgotICoKLSAqIFRoZSBjb250cm9sbGVy IGhhcmR3YXJlIEZJRk8gaXMgcHJvZ3JhbW1lZCB3aXRoIGNvbW1hbmQgaGVhZGVyIGFuZAotICog cGF5bG9hZC4gVGhlIHRyYW5zbWlzc2lvbiBpcyBraWNrZWQgb2ZmIGlmCi0gKiBEU0lfQ1RSTF9I V19DTURfV0FJVF9GT1JfVFJJR0dFUiBmbGFnIGlzIG5vdCBzZXQuIElmIHRoaXMgZmxhZyBpcwot ICogc2V0LCBjYWxsZXIgc2hvdWxkIG1ha2UgYSBzZXBhcmF0ZSBjYWxsIHRvIHRyaWdnZXJfY29t bWFuZF9kbWEoKSB0bwotICogdHJhbnNtaXQgdGhlIGNvbW1hbmQuCi0gKi8KLXZvaWQgZHNpX2N0 cmxfaHdfY21uX2tpY2tvZmZfZmlmb19jb21tYW5kKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwK LQkJCQkJIHN0cnVjdCBkc2lfY3RybF9jbWRfZG1hX2ZpZm9faW5mbyAqY21kLAotCQkJCQkgdTMy IGZsYWdzKQotewotCXUzMiByZWcgPSAwLCBpID0gMDsKLQl1MzIgKnB0ciA9IGNtZC0+Y29tbWFu ZDsKLQkvKgotCSAqIFNldCBDTURfRE1BX1RQR19FTiwgVFBHX0RNQV9GSUZPX01PREUgYW5kCi0J ICogQ01EX0RNQV9QQVRURVJOX1NFTCA9IGN1c3RvbSBwYXR0ZXJuIHN0b3JlZCBpbiBUUEcgRE1B IEZJRk8KLQkgKi8KLQlyZWcgPSAoQklUKDEpIHwgQklUKDIpIHwgKDB4MyA8PCAxNikpOwotCURT SV9XMzIoY3RybCwgRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ1RSTCwgcmVnKTsKLQotCS8qCi0JICog UHJvZ3JhbSB0aGUgRklGTyB3aXRoIGNvbW1hbmQgYnVmZmVyLiBIYXJkd2FyZSByZXF1aXJlcyBh biBleHRyYQotCSAqIERXT1JEIChzZXQgdG8gemVybykgaWYgdGhlIGxlbmd0aCBvZiBjb21tYW5k IGJ1ZmZlciBpcyBvZGQgRFdPUkRTLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBjbWQtPnNpemU7 IGkgKz0gNCkgewotCQlEU0lfVzMyKGN0cmwsIERTSV9URVNUX1BBVFRFUk5fR0VOX0NNRF9ETUFf SU5JVF9WQUwsICpwdHIpOwotCQlwdHIrKzsKLQl9Ci0KLQlpZiAoKGNtZC0+c2l6ZSAvIDQpICYg MHgxKQotCQlEU0lfVzMyKGN0cmwsIERTSV9URVNUX1BBVFRFUk5fR0VOX0NNRF9ETUFfSU5JVF9W QUwsIDApOwotCi0JLypTZXQgQlJPQURDQVNUX0VOIGFuZCBFTUJFRERFRF9NT0RFICovCi0JcmVn ID0gRFNJX1IzMihjdHJsLCBEU0lfQ09NTUFORF9NT0RFX0RNQV9DVFJMKTsKLQlpZiAoY21kLT5l bl9icm9hZGNhc3QpCi0JCXJlZyB8PSBCSVQoMzEpOwotCWVsc2UKLQkJcmVnICY9IH5CSVQoMzEp OwotCi0JaWYgKGNtZC0+aXNfbWFzdGVyKQotCQlyZWcgfD0gQklUKDMwKTsKLQllbHNlCi0JCXJl ZyAmPSB+QklUKDMwKTsKLQotCWlmIChjbWQtPnVzZV9scG0pCi0JCXJlZyB8PSBCSVQoMjYpOwot CWVsc2UKLQkJcmVnICY9IH5CSVQoMjYpOwotCi0JcmVnIHw9IEJJVCgyOCk7Ci0KLQlEU0lfVzMy KGN0cmwsIERTSV9DT01NQU5EX01PREVfRE1BX0NUUkwsIHJlZyk7Ci0KLQlEU0lfVzMyKGN0cmws IERTSV9ETUFfQ01EX0xFTkdUSCwgKGNtZC0+c2l6ZSAmIDB4RkZGRkZGRkYpKTsKLQkvKiBGaW5p c2ggd3JpdGVzIGJlZm9yZSBjb21tYW5kIHRyaWdnZXIgKi8KLQl3bWIoKTsKLQotCWlmICghKGZs YWdzICYgRFNJX0NUUkxfSFdfQ01EX1dBSVRfRk9SX1RSSUdHRVIpKQotCQlEU0lfVzMyKGN0cmws IERTSV9DTURfTU9ERV9ETUFfU1dfVFJJR0dFUiwgMHgxKTsKLQotCXByX2RlYnVnKCJbRFNJXyVk XXNpemU9JWQsIHRyaWdnZXIgPSAlZFxuIiwKLQkJIGN0cmwtPmluZGV4LCBjbWQtPnNpemUsCi0J CSAoZmxhZ3MgJiBEU0lfQ1RSTF9IV19DTURfV0FJVF9GT1JfVFJJR0dFUikgPyBmYWxzZSA6IHRy dWUpOwotfQotCi12b2lkIGRzaV9jdHJsX2h3X2Ntbl9yZXNldF9jbWRfZmlmbyhzdHJ1Y3QgZHNp X2N0cmxfaHcgKmN0cmwpCi17Ci0JLyogZGlzYWJsZSBjbWQgZG1hIHRwZyAqLwotCURTSV9XMzIo Y3RybCwgRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ1RSTCwgMHgwKTsKLQotCURTSV9XMzIoY3RybCwg RFNJX1RQR19ETUFfRklGT19SRVNFVCwgMHgxKTsKLQl1ZGVsYXkoMSk7Ci0JRFNJX1czMihjdHJs LCBEU0lfVFBHX0RNQV9GSUZPX1JFU0VULCAweDApOwotfQotCi0vKioKLSAqIHRyaWdnZXJfY29t bWFuZF9kbWEoKSAtIHRyaWdnZXIgdHJhbnNtaXNzaW9uIG9mIGNvbW1hbmQgYnVmZmVyLgotICog QGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4K LSAqCi0gKiBUaGlzIHRyaWdnZXIgY2FuIGJlIG9ubHkgdXNlZCBpZiB0aGVyZSB3YXMgYSBwcmlv ciBjYWxsIHRvCi0gKiBraWNrb2ZmX2NvbW1hbmQoKSBvZiBraWNrb2ZmX2ZpZm9fY29tbWFuZCgp IHdpdGgKLSAqIERTSV9DVFJMX0hXX0NNRF9XQUlUX0ZPUl9UUklHR0VSIGZsYWcuCi0gKi8KLXZv aWQgZHNpX2N0cmxfaHdfY21uX3RyaWdnZXJfY29tbWFuZF9kbWEoc3RydWN0IGRzaV9jdHJsX2h3 ICpjdHJsKQotewotCURTSV9XMzIoY3RybCwgRFNJX0NNRF9NT0RFX0RNQV9TV19UUklHR0VSLCAw eDEpOwotCXByX2RlYnVnKCJbRFNJXyVkXSBDTUQgRE1BIHRyaWdnZXJlZFxuIiwgY3RybC0+aW5k ZXgpOwotfQotCi0vKioKLSAqIGdldF9jbWRfcmVhZF9kYXRhKCkgLSBnZXQgZGF0YSByZWFkIGZy b20gdGhlIHBlcmlwaGVyYWwKLSAqIEBjdHJsOiAgICAgICAgICAgUG9pbnRlciB0byB0aGUgY29u dHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQHJkX2J1ZjogICAgICAgICBCdWZmZXIgd2hlcmUg ZGF0YSB3aWxsIGJlIHJlYWQgaW50by4KLSAqIEB0b3RhbF9yZWFkX2xlbjogTnVtYmVyIG9mIGJ5 dGVzIHRvIHJlYWQuCi0gKgotICogcmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgcmVhZC4KLSAqLwot dTMyIGRzaV9jdHJsX2h3X2Ntbl9nZXRfY21kX3JlYWRfZGF0YShzdHJ1Y3QgZHNpX2N0cmxfaHcg KmN0cmwsCi0JCQkJICAgICB1OCAqcmRfYnVmLAotCQkJCSAgICAgdTMyIHJlYWRfb2Zmc2V0LAot CQkJCSAgICAgdTMyIHRvdGFsX3JlYWRfbGVuKQotewotCXUzMiAqbHAsICp0ZW1wLCBkYXRhOwot CWludCBpLCBqID0gMCwgY250OwotCXUzMiByZWFkX2NudDsKLQl1MzIgcnhfYnl0ZSA9IDA7Ci0J dTMyIHJlcGVhdGVkX2J5dGVzID0gMDsKLQl1OCByZWdbMTZdID0gezB9OwotCXUzMiBwa3Rfc2l6 ZSA9IDA7Ci0JaW50IGJ1Zl9vZmZzZXQgPSByZWFkX29mZnNldDsKLQotCWxwID0gKHUzMiAqKXJk X2J1ZjsKLQl0ZW1wID0gKHUzMiAqKXJlZzsKLQljbnQgPSAocnhfYnl0ZSArIDMpID4+IDI7Ci0K LQlpZiAoY250ID4gNCkKLQkJY250ID0gNDsKLQotCWlmIChyeF9ieXRlID09IDQpCi0JCXJlYWRf Y250ID0gNDsKLQllbHNlCi0JCXJlYWRfY250ID0gcGt0X3NpemUgKyA2OwotCi0JaWYgKHJlYWRf Y250ID4gMTYpIHsKLQkJaW50IGJ5dGVzX3NoaWZ0ZWQ7Ci0KLQkJYnl0ZXNfc2hpZnRlZCA9IHJl YWRfY250IC0gMTY7Ci0JCXJlcGVhdGVkX2J5dGVzID0gYnVmX29mZnNldCAtIGJ5dGVzX3NoaWZ0 ZWQ7Ci0JfQotCi0JZm9yIChpID0gY250IC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJZGF0YSA9IERT SV9SMzIoY3RybCwgRFNJX1JEQktfREFUQTAgKyBpKjQpOwotCQkqdGVtcCsrID0gbnRvaGwoZGF0 YSk7Ci0JfQotCi0JZm9yIChpID0gcmVwZWF0ZWRfYnl0ZXM7IGkgPCAxNjsgaSsrKQotCQlyZF9i dWZbaisrXSA9IHJlZ1tpXTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXSBSZWFkICVkIGJ5dGVzXG4i LCBjdHJsLT5pbmRleCwgaik7Ci0JcmV0dXJuIGo7Ci19Ci0KLS8qKgotICogZ2V0X2ludGVycnVw dF9zdGF0dXMoKSAtIHJldHVybnMgdGhlIGludGVycnVwdCBzdGF0dXMKLSAqIEBjdHJsOiAgICAg ICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKgotICogUmV0 dXJucyB0aGUgT1JlZCBsaXN0IG9mIGludGVycnVwdHMoZW51bSBkc2lfc3RhdHVzX2ludF90eXBl KSB0aGF0Ci0gKiBhcmUgYWN0aXZlLiBUaGlzIGxpc3QgZG9lcyBub3QgaW5jbHVkZSBhbnkgZXJy b3IgaW50ZXJydXB0cy4gQ2FsbGVyCi0gKiBzaG91bGQgY2FsbCBnZXRfZXJyb3Jfc3RhdHVzIGZv ciBlcnJvciBpbnRlcnJ1cHRzLgotICoKLSAqIFJldHVybjogTGlzdCBvZiBhY3RpdmUgaW50ZXJy dXB0cy4KLSAqLwotdTMyIGRzaV9jdHJsX2h3X2Ntbl9nZXRfaW50ZXJydXB0X3N0YXR1cyhzdHJ1 Y3QgZHNpX2N0cmxfaHcgKmN0cmwpCi17Ci0JdTMyIHJlZyA9IDA7Ci0JdTMyIGludHMgPSAwOwot Ci0JcmVnID0gRFNJX1IzMihjdHJsLCBEU0lfSU5UX0NUUkwpOwotCi0JaWYgKHJlZyAmIEJJVCgw KSkKLQkJaW50cyB8PSBEU0lfQ01EX01PREVfRE1BX0RPTkU7Ci0JaWYgKHJlZyAmIEJJVCg4KSkK LQkJaW50cyB8PSBEU0lfQ01EX0ZSQU1FX0RPTkU7Ci0JaWYgKHJlZyAmIEJJVCgxMCkpCi0JCWlu dHMgfD0gRFNJX0NNRF9TVFJFQU0wX0ZSQU1FX0RPTkU7Ci0JaWYgKHJlZyAmIEJJVCgxMikpCi0J CWludHMgfD0gRFNJX0NNRF9TVFJFQU0xX0ZSQU1FX0RPTkU7Ci0JaWYgKHJlZyAmIEJJVCgxNCkp Ci0JCWludHMgfD0gRFNJX0NNRF9TVFJFQU0yX0ZSQU1FX0RPTkU7Ci0JaWYgKHJlZyAmIEJJVCgx NikpCi0JCWludHMgfD0gRFNJX1ZJREVPX01PREVfRlJBTUVfRE9ORTsKLQlpZiAocmVnICYgQklU KDIwKSkKLQkJaW50cyB8PSBEU0lfQlRBX0RPTkU7Ci0JaWYgKHJlZyAmIEJJVCgyOCkpCi0JCWlu dHMgfD0gRFNJX0RZTl9SRUZSRVNIX0RPTkU7Ci0JaWYgKHJlZyAmIEJJVCgzMCkpCi0JCWludHMg fD0gRFNJX0RFU0tFV19ET05FOwotCi0JcHJfZGVidWcoIltEU0lfJWRdIEludGVycnVwdCBzdGF0 dXMgPSAweCV4LCBJTlRfQ1RSTD0weCV4XG4iLAotCQkgY3RybC0+aW5kZXgsIGludHMsIHJlZyk7 Ci0JcmV0dXJuIGludHM7Ci19Ci0KLS8qKgotICogY2xlYXJfaW50ZXJydXB0X3N0YXR1cygpIC0g Y2xlYXJzIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cwotICogQGN0cmw6ICAgICAgICAgIFBvaW50 ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBpbnRzOiAgICAgICAgICBM aXN0IG9mIGludGVycnVwdHMgdG8gYmUgY2xlYXJlZC4KLSAqLwotdm9pZCBkc2lfY3RybF9od19j bW5fY2xlYXJfaW50ZXJydXB0X3N0YXR1cyhzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIHUzMiBp bnRzKQotewotCXUzMiByZWcgPSAwOwotCi0JcmVnID0gRFNJX1IzMihjdHJsLCBEU0lfSU5UX0NU UkwpOwotCi0JaWYgKGludHMgJiBEU0lfQ01EX01PREVfRE1BX0RPTkUpCi0JCXJlZyB8PSBCSVQo MCk7Ci0JaWYgKGludHMgJiBEU0lfQ01EX0ZSQU1FX0RPTkUpCi0JCXJlZyB8PSBCSVQoOCk7Ci0J aWYgKGludHMgJiBEU0lfQ01EX1NUUkVBTTBfRlJBTUVfRE9ORSkKLQkJcmVnIHw9IEJJVCgxMCk7 Ci0JaWYgKGludHMgJiBEU0lfQ01EX1NUUkVBTTFfRlJBTUVfRE9ORSkKLQkJcmVnIHw9IEJJVCgx Mik7Ci0JaWYgKGludHMgJiBEU0lfQ01EX1NUUkVBTTJfRlJBTUVfRE9ORSkKLQkJcmVnIHw9IEJJ VCgxNCk7Ci0JaWYgKGludHMgJiBEU0lfVklERU9fTU9ERV9GUkFNRV9ET05FKQotCQlyZWcgfD0g QklUKDE2KTsKLQlpZiAoaW50cyAmIERTSV9CVEFfRE9ORSkKLQkJcmVnIHw9IEJJVCgyMCk7Ci0J aWYgKGludHMgJiBEU0lfRFlOX1JFRlJFU0hfRE9ORSkKLQkJcmVnIHw9IEJJVCgyOCk7Ci0JaWYg KGludHMgJiBEU0lfREVTS0VXX0RPTkUpCi0JCXJlZyB8PSBCSVQoMzApOwotCi0JRFNJX1czMihj dHJsLCBEU0lfSU5UX0NUUkwsIHJlZyk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gQ2xlYXIgaW50 ZXJydXB0cywgaW50cyA9IDB4JXgsIElOVF9DVFJMPTB4JXhcbiIsCi0JCSBjdHJsLT5pbmRleCwg aW50cywgcmVnKTsKLX0KLQotLyoqCi0gKiBlbmFibGVfc3RhdHVzX2ludGVycnVwdHMoKSAtIGVu YWJsZSB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMKLSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVy IHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBAaW50czogICAgICAgICAgTGlz dCBvZiBpbnRlcnJ1cHRzIHRvIGJlIGVuYWJsZWQuCi0gKgotICogRW5hYmxlcyB0aGUgc3BlY2lm aWVkIGludGVycnVwdHMuIFRoaXMgbGlzdCB3aWxsIG92ZXJyaWRlIHRoZQotICogcHJldmlvdXMg aW50ZXJydXB0cyBlbmFibGVkIHRocm91Z2ggdGhpcyBmdW5jdGlvbi4gQ2FsbGVyIGhhcyB0bwot ICogbWFpbnRhaW4gdGhlIHN0YXRlIG9mIHRoZSBpbnRlcnJ1cHRzIGVuYWJsZWQuIFRvIGRpc2Fi bGUgYWxsCi0gKiBpbnRlcnJ1cHRzLCBzZXQgaW50cyB0byAwLgotICovCi12b2lkIGRzaV9jdHJs X2h3X2Ntbl9lbmFibGVfc3RhdHVzX2ludGVycnVwdHMoCi0JCXN0cnVjdCBkc2lfY3RybF9odyAq Y3RybCwgdTMyIGludHMpCi17Ci0JdTMyIHJlZyA9IDA7Ci0KLQkvKiBEbyBub3QgY2hhbmdlIHZh bHVlIG9mIERTSV9FUlJPUl9NQVNLIGJpdCAqLwotCXJlZyB8PSAoRFNJX1IzMihjdHJsLCBEU0lf SU5UX0NUUkwpICYgQklUKDI1KSk7Ci0JaWYgKGludHMgJiBEU0lfQ01EX01PREVfRE1BX0RPTkUp Ci0JCXJlZyB8PSBCSVQoMSk7Ci0JaWYgKGludHMgJiBEU0lfQ01EX0ZSQU1FX0RPTkUpCi0JCXJl ZyB8PSBCSVQoOSk7Ci0JaWYgKGludHMgJiBEU0lfQ01EX1NUUkVBTTBfRlJBTUVfRE9ORSkKLQkJ cmVnIHw9IEJJVCgxMSk7Ci0JaWYgKGludHMgJiBEU0lfQ01EX1NUUkVBTTFfRlJBTUVfRE9ORSkK LQkJcmVnIHw9IEJJVCgxMyk7Ci0JaWYgKGludHMgJiBEU0lfQ01EX1NUUkVBTTJfRlJBTUVfRE9O RSkKLQkJcmVnIHw9IEJJVCgxNSk7Ci0JaWYgKGludHMgJiBEU0lfVklERU9fTU9ERV9GUkFNRV9E T05FKQotCQlyZWcgfD0gQklUKDE3KTsKLQlpZiAoaW50cyAmIERTSV9CVEFfRE9ORSkKLQkJcmVn IHw9IEJJVCgyMSk7Ci0JaWYgKGludHMgJiBEU0lfRFlOX1JFRlJFU0hfRE9ORSkKLQkJcmVnIHw9 IEJJVCgyOSk7Ci0JaWYgKGludHMgJiBEU0lfREVTS0VXX0RPTkUpCi0JCXJlZyB8PSBCSVQoMzEp OwotCi0JRFNJX1czMihjdHJsLCBEU0lfSU5UX0NUUkwsIHJlZyk7Ci0KLQlwcl9kZWJ1ZygiW0RT SV8lZF0gRW5hYmxlIGludGVycnVwdHMgMHgleCwgSU5UX0NUUkw9MHgleFxuIiwKLQkJIGN0cmwt PmluZGV4LCBpbnRzLCByZWcpOwotfQotCi0vKioKLSAqIGdldF9lcnJvcl9zdGF0dXMoKSAtIHJl dHVybnMgdGhlIGVycm9yIHN0YXR1cwotICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhl IGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqCi0gKiBSZXR1cm5zIHRoZSBPUmVkIGxpc3Qg b2YgZXJyb3JzKGVudW0gZHNpX2Vycm9yX2ludF90eXBlKSB0aGF0IGFyZQotICogYWN0aXZlLiBU aGlzIGxpc3QgZG9lcyBub3QgaW5jbHVkZSBhbnkgc3RhdHVzIGludGVycnVwdHMuIENhbGxlcgot ICogc2hvdWxkIGNhbGwgZ2V0X2ludGVycnVwdF9zdGF0dXMgZm9yIHN0YXR1cyBpbnRlcnJ1cHRz LgotICoKLSAqIFJldHVybjogTGlzdCBvZiBhY3RpdmUgZXJyb3IgaW50ZXJydXB0cy4KLSAqLwot dTY0IGRzaV9jdHJsX2h3X2Ntbl9nZXRfZXJyb3Jfc3RhdHVzKHN0cnVjdCBkc2lfY3RybF9odyAq Y3RybCkKLXsKLQl1MzIgZGxuMF9waHlfZXJyOwotCXUzMiBmaWZvX3N0YXR1czsKLQl1MzIgYWNr X2Vycm9yOwotCXUzMiB0aW1lb3V0X2Vycm9yczsKLQl1MzIgY2xrX2Vycm9yOwotCXUzMiBkc2lf c3RhdHVzOwotCXU2NCBlcnJvcnMgPSAwOwotCi0JZGxuMF9waHlfZXJyID0gRFNJX1IzMihjdHJs LCBEU0lfRExOMF9QSFlfRVJSKTsKLQlpZiAoZGxuMF9waHlfZXJyICYgQklUKDApKQotCQllcnJv cnMgfD0gRFNJX0RMTjBfRVNDX0VOVFJZX0VSUjsKLQlpZiAoZGxuMF9waHlfZXJyICYgQklUKDQp KQotCQllcnJvcnMgfD0gRFNJX0RMTjBfRVNDX1NZTkNfRVJSOwotCWlmIChkbG4wX3BoeV9lcnIg JiBCSVQoOCkpCi0JCWVycm9ycyB8PSBEU0lfRExOMF9MUF9DT05UUk9MX0VSUjsKLQlpZiAoZGxu MF9waHlfZXJyICYgQklUKDEyKSkKLQkJZXJyb3JzIHw9IERTSV9ETE4wX0xQMF9DT05URU5USU9O OwotCWlmIChkbG4wX3BoeV9lcnIgJiBCSVQoMTYpKQotCQllcnJvcnMgfD0gRFNJX0RMTjBfTFAx X0NPTlRFTlRJT047Ci0KLQlmaWZvX3N0YXR1cyA9IERTSV9SMzIoY3RybCwgRFNJX0ZJRk9fU1RB VFVTKTsKLQlpZiAoZmlmb19zdGF0dXMgJiBCSVQoNykpCi0JCWVycm9ycyB8PSBEU0lfQ01EX01E UF9GSUZPX1VOREVSRkxPVzsKLQlpZiAoZmlmb19zdGF0dXMgJiBCSVQoMTApKQotCQllcnJvcnMg fD0gRFNJX0NNRF9ETUFfRklGT19VTkRFUkZMT1c7Ci0JaWYgKGZpZm9fc3RhdHVzICYgQklUKDE4 KSkKLQkJZXJyb3JzIHw9IERTSV9ETE4wX0hTX0ZJRk9fT1ZFUkZMT1c7Ci0JaWYgKGZpZm9fc3Rh dHVzICYgQklUKDE5KSkKLQkJZXJyb3JzIHw9IERTSV9ETE4wX0hTX0ZJRk9fVU5ERVJGTE9XOwot CWlmIChmaWZvX3N0YXR1cyAmIEJJVCgyMikpCi0JCWVycm9ycyB8PSBEU0lfRExOMV9IU19GSUZP X09WRVJGTE9XOwotCWlmIChmaWZvX3N0YXR1cyAmIEJJVCgyMykpCi0JCWVycm9ycyB8PSBEU0lf RExOMV9IU19GSUZPX1VOREVSRkxPVzsKLQlpZiAoZmlmb19zdGF0dXMgJiBCSVQoMjYpKQotCQll cnJvcnMgfD0gRFNJX0RMTjJfSFNfRklGT19PVkVSRkxPVzsKLQlpZiAoZmlmb19zdGF0dXMgJiBC SVQoMjcpKQotCQllcnJvcnMgfD0gRFNJX0RMTjJfSFNfRklGT19VTkRFUkZMT1c7Ci0JaWYgKGZp Zm9fc3RhdHVzICYgQklUKDMwKSkKLQkJZXJyb3JzIHw9IERTSV9ETE4zX0hTX0ZJRk9fT1ZFUkZM T1c7Ci0JaWYgKGZpZm9fc3RhdHVzICYgQklUKDMxKSkKLQkJZXJyb3JzIHw9IERTSV9ETE4zX0hT X0ZJRk9fVU5ERVJGTE9XOwotCi0JYWNrX2Vycm9yID0gRFNJX1IzMihjdHJsLCBEU0lfQUNLX0VS Ul9TVEFUVVMpOwotCWlmIChhY2tfZXJyb3IgJiBCSVQoMTYpKQotCQllcnJvcnMgfD0gRFNJX1JE QktfU0lOR0xFX0VDQ19FUlI7Ci0JaWYgKGFja19lcnJvciAmIEJJVCgxNykpCi0JCWVycm9ycyB8 PSBEU0lfUkRCS19NVUxUSV9FQ0NfRVJSOwotCWlmIChhY2tfZXJyb3IgJiBCSVQoMjApKQotCQll cnJvcnMgfD0gRFNJX1JEQktfQ1JDX0VSUjsKLQlpZiAoYWNrX2Vycm9yICYgQklUKDIzKSkKLQkJ ZXJyb3JzIHw9IERTSV9SREJLX0lOQ09NUExFVEVfUEtUOwotCWlmIChhY2tfZXJyb3IgJiBCSVQo MjQpKQotCQllcnJvcnMgfD0gRFNJX1BFUklQSF9FUlJPUl9QS1Q7Ci0KLQl0aW1lb3V0X2Vycm9y cyA9IERTSV9SMzIoY3RybCwgRFNJX1RJTUVPVVRfU1RBVFVTKTsKLQlpZiAodGltZW91dF9lcnJv cnMgJiBCSVQoMCkpCi0JCWVycm9ycyB8PSBEU0lfSFNfVFhfVElNRU9VVDsKLQlpZiAodGltZW91 dF9lcnJvcnMgJiBCSVQoNCkpCi0JCWVycm9ycyB8PSBEU0lfTFBfUlhfVElNRU9VVDsKLQlpZiAo dGltZW91dF9lcnJvcnMgJiBCSVQoOCkpCi0JCWVycm9ycyB8PSBEU0lfQlRBX1RJTUVPVVQ7Ci0K LQljbGtfZXJyb3IgPSBEU0lfUjMyKGN0cmwsIERTSV9DTEtfU1RBVFVTKTsKLQlpZiAoY2xrX2Vy cm9yICYgQklUKDE2KSkKLQkJZXJyb3JzIHw9IERTSV9QTExfVU5MT0NLOwotCi0JZHNpX3N0YXR1 cyA9IERTSV9SMzIoY3RybCwgRFNJX1NUQVRVUyk7Ci0JaWYgKGRzaV9zdGF0dXMgJiBCSVQoMzEp KQotCQllcnJvcnMgfD0gRFNJX0lOVEVSTEVBVkVfT1BfQ09OVEVOVElPTjsKLQotCXByX2RlYnVn KCJbRFNJXyVkXSBFcnJvciBzdGF0dXMgPSAweCVsbHgsIHBoeT0weCV4LCBmaWZvPTB4JXgiLAot CQkgY3RybC0+aW5kZXgsIGVycm9ycywgZGxuMF9waHlfZXJyLCBmaWZvX3N0YXR1cyk7Ci0JcHJf ZGVidWcoIltEU0lfJWRdIGFjaz0weCV4LCB0aW1lb3V0PTB4JXgsIGNsaz0weCV4LCBkc2k9MHgl eFxuIiwKLQkJIGN0cmwtPmluZGV4LCBhY2tfZXJyb3IsIHRpbWVvdXRfZXJyb3JzLCBjbGtfZXJy b3IsIGRzaV9zdGF0dXMpOwotCXJldHVybiBlcnJvcnM7Ci19Ci0KLS8qKgotICogY2xlYXJfZXJy b3Jfc3RhdHVzKCkgLSBjbGVhcnMgdGhlIHNwZWNpZmllZCBlcnJvcnMKLSAqIEBjdHJsOiAgICAg ICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBAZXJyb3Jz OiAgICAgICAgICBMaXN0IG9mIGVycm9ycyB0byBiZSBjbGVhcmVkLgotICovCi12b2lkIGRzaV9j dHJsX2h3X2Ntbl9jbGVhcl9lcnJvcl9zdGF0dXMoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCB1 NjQgZXJyb3JzKQotewotCXUzMiBkbG4wX3BoeV9lcnIgPSAwOwotCXUzMiBmaWZvX3N0YXR1cyA9 IDA7Ci0JdTMyIGFja19lcnJvciA9IDA7Ci0JdTMyIHRpbWVvdXRfZXJyb3IgPSAwOwotCXUzMiBj bGtfZXJyb3IgPSAwOwotCXUzMiBkc2lfc3RhdHVzID0gMDsKLQl1MzIgaW50X2N0cmwgPSAwOwot Ci0JaWYgKGVycm9ycyAmIERTSV9SREJLX1NJTkdMRV9FQ0NfRVJSKQotCQlhY2tfZXJyb3IgfD0g QklUKDE2KTsKLQlpZiAoZXJyb3JzICYgRFNJX1JEQktfTVVMVElfRUNDX0VSUikKLQkJYWNrX2Vy cm9yIHw9IEJJVCgxNyk7Ci0JaWYgKGVycm9ycyAmIERTSV9SREJLX0NSQ19FUlIpCi0JCWFja19l cnJvciB8PSBCSVQoMjApOwotCWlmIChlcnJvcnMgJiBEU0lfUkRCS19JTkNPTVBMRVRFX1BLVCkK LQkJYWNrX2Vycm9yIHw9IEJJVCgyMyk7Ci0JaWYgKGVycm9ycyAmIERTSV9QRVJJUEhfRVJST1Jf UEtUKQotCQlhY2tfZXJyb3IgfD0gQklUKDI0KTsKLQotCWlmIChlcnJvcnMgJiBEU0lfTFBfUlhf VElNRU9VVCkKLQkJdGltZW91dF9lcnJvciB8PSBCSVQoNCk7Ci0JaWYgKGVycm9ycyAmIERTSV9I U19UWF9USU1FT1VUKQotCQl0aW1lb3V0X2Vycm9yIHw9IEJJVCgwKTsKLQlpZiAoZXJyb3JzICYg RFNJX0JUQV9USU1FT1VUKQotCQl0aW1lb3V0X2Vycm9yIHw9IEJJVCg4KTsKLQotCWlmIChlcnJv cnMgJiBEU0lfUExMX1VOTE9DSykKLQkJY2xrX2Vycm9yIHw9IEJJVCgxNik7Ci0KLQlpZiAoZXJy b3JzICYgRFNJX0RMTjBfTFAwX0NPTlRFTlRJT04pCi0JCWRsbjBfcGh5X2VyciB8PSBCSVQoMTIp OwotCWlmIChlcnJvcnMgJiBEU0lfRExOMF9MUDFfQ09OVEVOVElPTikKLQkJZGxuMF9waHlfZXJy IHw9IEJJVCgxNik7Ci0JaWYgKGVycm9ycyAmIERTSV9ETE4wX0VTQ19FTlRSWV9FUlIpCi0JCWRs bjBfcGh5X2VyciB8PSBCSVQoMCk7Ci0JaWYgKGVycm9ycyAmIERTSV9ETE4wX0VTQ19TWU5DX0VS UikKLQkJZGxuMF9waHlfZXJyIHw9IEJJVCg0KTsKLQlpZiAoZXJyb3JzICYgRFNJX0RMTjBfTFBf Q09OVFJPTF9FUlIpCi0JCWRsbjBfcGh5X2VyciB8PSBCSVQoOCk7Ci0KLQlpZiAoZXJyb3JzICYg RFNJX0NNRF9ETUFfRklGT19VTkRFUkZMT1cpCi0JCWZpZm9fc3RhdHVzIHw9IEJJVCgxMCk7Ci0J aWYgKGVycm9ycyAmIERTSV9DTURfTURQX0ZJRk9fVU5ERVJGTE9XKQotCQlmaWZvX3N0YXR1cyB8 PSBCSVQoNyk7Ci0JaWYgKGVycm9ycyAmIERTSV9ETE4wX0hTX0ZJRk9fT1ZFUkZMT1cpCi0JCWZp Zm9fc3RhdHVzIHw9IEJJVCgxOCk7Ci0JaWYgKGVycm9ycyAmIERTSV9ETE4xX0hTX0ZJRk9fT1ZF UkZMT1cpCi0JCWZpZm9fc3RhdHVzIHw9IEJJVCgyMik7Ci0JaWYgKGVycm9ycyAmIERTSV9ETE4y X0hTX0ZJRk9fT1ZFUkZMT1cpCi0JCWZpZm9fc3RhdHVzIHw9IEJJVCgyNik7Ci0JaWYgKGVycm9y cyAmIERTSV9ETE4zX0hTX0ZJRk9fT1ZFUkZMT1cpCi0JCWZpZm9fc3RhdHVzIHw9IEJJVCgzMCk7 Ci0JaWYgKGVycm9ycyAmIERTSV9ETE4wX0hTX0ZJRk9fVU5ERVJGTE9XKQotCQlmaWZvX3N0YXR1 cyB8PSBCSVQoMTkpOwotCWlmIChlcnJvcnMgJiBEU0lfRExOMV9IU19GSUZPX1VOREVSRkxPVykK LQkJZmlmb19zdGF0dXMgfD0gQklUKDIzKTsKLQlpZiAoZXJyb3JzICYgRFNJX0RMTjJfSFNfRklG T19VTkRFUkZMT1cpCi0JCWZpZm9fc3RhdHVzIHw9IEJJVCgyNyk7Ci0JaWYgKGVycm9ycyAmIERT SV9ETE4zX0hTX0ZJRk9fVU5ERVJGTE9XKQotCQlmaWZvX3N0YXR1cyB8PSBCSVQoMzEpOwotCi0J aWYgKGVycm9ycyAmIERTSV9JTlRFUkxFQVZFX09QX0NPTlRFTlRJT04pCi0JCWRzaV9zdGF0dXMg fD0gQklUKDMxKTsKLQotCURTSV9XMzIoY3RybCwgRFNJX0RMTjBfUEhZX0VSUiwgZGxuMF9waHlf ZXJyKTsKLQlEU0lfVzMyKGN0cmwsIERTSV9GSUZPX1NUQVRVUywgZmlmb19zdGF0dXMpOwotCURT SV9XMzIoY3RybCwgRFNJX0FDS19FUlJfU1RBVFVTLCBhY2tfZXJyb3IpOwotCURTSV9XMzIoY3Ry bCwgRFNJX1RJTUVPVVRfU1RBVFVTLCB0aW1lb3V0X2Vycm9yKTsKLQlEU0lfVzMyKGN0cmwsIERT SV9DTEtfU1RBVFVTLCBjbGtfZXJyb3IpOwotCURTSV9XMzIoY3RybCwgRFNJX1NUQVRVUywgZHNp X3N0YXR1cyk7Ci0KLQlpbnRfY3RybCA9IERTSV9SMzIoY3RybCwgRFNJX0lOVF9DVFJMKTsKLQlp bnRfY3RybCB8PSBCSVQoMjQpOwotCURTSV9XMzIoY3RybCwgRFNJX0lOVF9DVFJMLCBpbnRfY3Ry bCk7Ci0JcHJfZGVidWcoIltEU0lfJWRdIGNsZWFyIGVycm9ycyA9IDB4JWxseCwgcGh5PTB4JXgs IGZpZm89MHgleCIsCi0JCSBjdHJsLT5pbmRleCwgZXJyb3JzLCBkbG4wX3BoeV9lcnIsIGZpZm9f c3RhdHVzKTsKLQlwcl9kZWJ1ZygiW0RTSV8lZF0gYWNrPTB4JXgsIHRpbWVvdXQ9MHgleCwgY2xr PTB4JXgsIGRzaT0weCV4XG4iLAotCQkgY3RybC0+aW5kZXgsIGFja19lcnJvciwgdGltZW91dF9l cnJvciwgY2xrX2Vycm9yLCBkc2lfc3RhdHVzKTsKLX0KLQotLyoqCi0gKiBlbmFibGVfZXJyb3Jf aW50ZXJydXB0cygpIC0gZW5hYmxlIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cwotICogQGN0cmw6 ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBl cnJvcnM6ICAgICAgICBMaXN0IG9mIGVycm9ycyB0byBiZSBlbmFibGVkLgotICoKLSAqIEVuYWJs ZXMgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHRzLiBUaGlzIGxpc3Qgd2lsbCBvdmVycmlkZSB0aGUK LSAqIHByZXZpb3VzIGludGVycnVwdHMgZW5hYmxlZCB0aHJvdWdoIHRoaXMgZnVuY3Rpb24uIENh bGxlciBoYXMgdG8KLSAqIG1haW50YWluIHRoZSBzdGF0ZSBvZiB0aGUgaW50ZXJydXB0cyBlbmFi bGVkLiBUbyBkaXNhYmxlIGFsbAotICogaW50ZXJydXB0cywgc2V0IGVycm9ycyB0byAwLgotICov Ci12b2lkIGRzaV9jdHJsX2h3X2Ntbl9lbmFibGVfZXJyb3JfaW50ZXJydXB0cyhzdHJ1Y3QgZHNp X2N0cmxfaHcgKmN0cmwsCi0JCQkJCSAgICB1NjQgZXJyb3JzKQotewotCXUzMiBpbnRfY3RybCA9 IDA7Ci0JdTMyIGludF9tYXNrMCA9IDB4N0ZGRjNCRkY7Ci0KLQlpbnRfY3RybCA9IERTSV9SMzIo Y3RybCwgRFNJX0lOVF9DVFJMKTsKLQlpZiAoZXJyb3JzKQotCQlpbnRfY3RybCB8PSBCSVQoMjUp OwotCWVsc2UKLQkJaW50X2N0cmwgJj0gfkJJVCgyNSk7Ci0KLQlpZiAoZXJyb3JzICYgRFNJX1JE QktfU0lOR0xFX0VDQ19FUlIpCi0JCWludF9tYXNrMCAmPSB+QklUKDApOwotCWlmIChlcnJvcnMg JiBEU0lfUkRCS19NVUxUSV9FQ0NfRVJSKQotCQlpbnRfbWFzazAgJj0gfkJJVCgxKTsKLQlpZiAo ZXJyb3JzICYgRFNJX1JEQktfQ1JDX0VSUikKLQkJaW50X21hc2swICY9IH5CSVQoMik7Ci0JaWYg KGVycm9ycyAmIERTSV9SREJLX0lOQ09NUExFVEVfUEtUKQotCQlpbnRfbWFzazAgJj0gfkJJVCgz KTsKLQlpZiAoZXJyb3JzICYgRFNJX1BFUklQSF9FUlJPUl9QS1QpCi0JCWludF9tYXNrMCAmPSB+ QklUKDQpOwotCi0JaWYgKGVycm9ycyAmIERTSV9MUF9SWF9USU1FT1VUKQotCQlpbnRfbWFzazAg Jj0gfkJJVCg1KTsKLQlpZiAoZXJyb3JzICYgRFNJX0hTX1RYX1RJTUVPVVQpCi0JCWludF9tYXNr MCAmPSB+QklUKDYpOwotCWlmIChlcnJvcnMgJiBEU0lfQlRBX1RJTUVPVVQpCi0JCWludF9tYXNr MCAmPSB+QklUKDcpOwotCi0JaWYgKGVycm9ycyAmIERTSV9QTExfVU5MT0NLKQotCQlpbnRfbWFz azAgJj0gfkJJVCgyOCk7Ci0KLQlpZiAoZXJyb3JzICYgRFNJX0RMTjBfTFAwX0NPTlRFTlRJT04p Ci0JCWludF9tYXNrMCAmPSB+QklUKDI0KTsKLQlpZiAoZXJyb3JzICYgRFNJX0RMTjBfTFAxX0NP TlRFTlRJT04pCi0JCWludF9tYXNrMCAmPSB+QklUKDI1KTsKLQlpZiAoZXJyb3JzICYgRFNJX0RM TjBfRVNDX0VOVFJZX0VSUikKLQkJaW50X21hc2swICY9IH5CSVQoMjEpOwotCWlmIChlcnJvcnMg JiBEU0lfRExOMF9FU0NfU1lOQ19FUlIpCi0JCWludF9tYXNrMCAmPSB+QklUKDIyKTsKLQlpZiAo ZXJyb3JzICYgRFNJX0RMTjBfTFBfQ09OVFJPTF9FUlIpCi0JCWludF9tYXNrMCAmPSB+QklUKDIz KTsKLQotCWlmIChlcnJvcnMgJiBEU0lfQ01EX0RNQV9GSUZPX1VOREVSRkxPVykKLQkJaW50X21h c2swICY9IH5CSVQoOSk7Ci0JaWYgKGVycm9ycyAmIERTSV9DTURfTURQX0ZJRk9fVU5ERVJGTE9X KQotCQlpbnRfbWFzazAgJj0gfkJJVCgxMSk7Ci0JaWYgKGVycm9ycyAmIERTSV9ETE4wX0hTX0ZJ Rk9fT1ZFUkZMT1cpCi0JCWludF9tYXNrMCAmPSB+QklUKDE2KTsKLQlpZiAoZXJyb3JzICYgRFNJ X0RMTjFfSFNfRklGT19PVkVSRkxPVykKLQkJaW50X21hc2swICY9IH5CSVQoMTcpOwotCWlmIChl cnJvcnMgJiBEU0lfRExOMl9IU19GSUZPX09WRVJGTE9XKQotCQlpbnRfbWFzazAgJj0gfkJJVCgx OCk7Ci0JaWYgKGVycm9ycyAmIERTSV9ETE4zX0hTX0ZJRk9fT1ZFUkZMT1cpCi0JCWludF9tYXNr MCAmPSB+QklUKDE5KTsKLQlpZiAoZXJyb3JzICYgRFNJX0RMTjBfSFNfRklGT19VTkRFUkZMT1cp Ci0JCWludF9tYXNrMCAmPSB+QklUKDI2KTsKLQlpZiAoZXJyb3JzICYgRFNJX0RMTjFfSFNfRklG T19VTkRFUkZMT1cpCi0JCWludF9tYXNrMCAmPSB+QklUKDI3KTsKLQlpZiAoZXJyb3JzICYgRFNJ X0RMTjJfSFNfRklGT19VTkRFUkZMT1cpCi0JCWludF9tYXNrMCAmPSB+QklUKDI5KTsKLQlpZiAo ZXJyb3JzICYgRFNJX0RMTjNfSFNfRklGT19VTkRFUkZMT1cpCi0JCWludF9tYXNrMCAmPSB+QklU KDMwKTsKLQotCWlmIChlcnJvcnMgJiBEU0lfSU5URVJMRUFWRV9PUF9DT05URU5USU9OKQotCQlp bnRfbWFzazAgJj0gfkJJVCg4KTsKLQotCURTSV9XMzIoY3RybCwgRFNJX0lOVF9DVFJMLCBpbnRf Y3RybCk7Ci0JRFNJX1czMihjdHJsLCBEU0lfRVJSX0lOVF9NQVNLMCwgaW50X21hc2swKTsKLQot CXByX2RlYnVnKCJbRFNJXyVkXSBlbmFibGUgZXJyb3JzID0gMHglbGx4LCBpbnRfbWFzazA9MHgl eFxuIiwKLQkJIGN0cmwtPmluZGV4LCBlcnJvcnMsIGludF9tYXNrMCk7Ci19Ci0KLS8qKgotICog dmlkZW9fdGVzdF9wYXR0ZXJuX3NldHVwKCkgLSBzZXR1cCB0ZXN0IHBhdHRlcm4gZW5naW5lIGZv ciB2aWRlbyBtb2RlCi0gKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxl ciBob3N0IGhhcmR3YXJlLgotICogQHR5cGU6ICAgICAgICAgIFR5cGUgb2YgdGVzdCBwYXR0ZXJu LgotICogQGluaXRfdmFsOiAgICAgIEluaXRpYWwgdmFsdWUgdG8gdXNlIGZvciBnZW5lcmF0aW5n IHRlc3QgcGF0dGVybi4KLSAqLwotdm9pZCBkc2lfY3RybF9od19jbW5fdmlkZW9fdGVzdF9wYXR0 ZXJuX3NldHVwKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkJICAgICBlbnVtIGRzaV90 ZXN0X3BhdHRlcm4gdHlwZSwKLQkJCQkJICAgICB1MzIgaW5pdF92YWwpCi17Ci0JdTMyIHJlZyA9 IDA7Ci0KLQlEU0lfVzMyKGN0cmwsIERTSV9URVNUX1BBVFRFUk5fR0VOX1ZJREVPX0lOSVRfVkFM LCBpbml0X3ZhbCk7Ci0KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIERTSV9URVNUX1BBVFRFUk5f RklYRUQ6Ci0JCXJlZyB8PSAoMHgyIDw8IDQpOwotCQlicmVhazsKLQljYXNlIERTSV9URVNUX1BB VFRFUk5fSU5DOgotCQlyZWcgfD0gKDB4MSA8PCA0KTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfVEVT VF9QQVRURVJOX1BPTFk6Ci0JCURTSV9XMzIoY3RybCwgRFNJX1RFU1RfUEFUVEVSTl9HRU5fVklE RU9fUE9MWSwgMHhGMEYwRik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQot CURTSV9XMzIoY3RybCwgRFNJX1RQR19NQUlOX0NPTlRST0wsIDB4MTAwKTsKLQlEU0lfVzMyKGN0 cmwsIERTSV9UUEdfVklERU9fQ09ORklHLCAweDUpOwotCURTSV9XMzIoY3RybCwgRFNJX1RFU1Rf UEFUVEVSTl9HRU5fQ1RSTCwgcmVnKTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXSBWaWRlbyB0ZXN0 IHBhdHRlcm4gc2V0dXAgZG9uZVxuIiwgY3RybC0+aW5kZXgpOwotfQotCi0vKioKLSAqIGNtZF90 ZXN0X3BhdHRlcm5fc2V0dXAoKSAtIHNldHVwIHRlc3QgcGF0dHRlcm4gZW5naW5lIGZvciBjbWQg bW9kZQotICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBo YXJkd2FyZS4KLSAqIEB0eXBlOiAgICAgICAgICBUeXBlIG9mIHRlc3QgcGF0dGVybi4KLSAqIEBp bml0X3ZhbDogICAgICBJbml0aWFsIHZhbHVlIHRvIHVzZSBmb3IgZ2VuZXJhdGluZyB0ZXN0IHBh dHRlcm4uCi0gKiBAc3RyZWFtX2lkOiAgICAgU3RyZWFtIElkIG9uIHdoaWNoIHBhY2tldHMgYXJl IGdlbmVyYXRlZC4KLSAqLwotdm9pZCBkc2lfY3RybF9od19jbW5fY21kX3Rlc3RfcGF0dGVybl9z ZXR1cChzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJCSAgIGVudW0gZHNpX3Rlc3RfcGF0 dGVybiB0eXBlLAotCQkJCQkgICB1MzIgaW5pdF92YWwsCi0JCQkJCSAgIHUzMiBzdHJlYW1faWQp Ci17Ci0JdTMyIHJlZyA9IDA7Ci0JdTMyIGluaXRfb2Zmc2V0OwotCXUzMiBwb2x5X29mZnNldDsK LQl1MzIgcGF0dGVybl9zZWxfc2hpZnQ7Ci0KLQlzd2l0Y2ggKHN0cmVhbV9pZCkgewotCWNhc2Ug MDoKLQkJaW5pdF9vZmZzZXQgPSBEU0lfVEVTVF9QQVRURVJOX0dFTl9DTURfTURQX0lOSVRfVkFM MDsKLQkJcG9seV9vZmZzZXQgPSBEU0lfVEVTVF9QQVRURVJOX0dFTl9DTURfTURQX1NUUkVBTTBf UE9MWTsKLQkJcGF0dGVybl9zZWxfc2hpZnQgPSA4OwotCQlicmVhazsKLQljYXNlIDE6Ci0JCWlu aXRfb2Zmc2V0ID0gRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX01EUF9JTklUX1ZBTDE7Ci0JCXBv bHlfb2Zmc2V0ID0gRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX01EUF9TVFJFQU0xX1BPTFk7Ci0J CXBhdHRlcm5fc2VsX3NoaWZ0ID0gMTI7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJaW5pdF9vZmZz ZXQgPSBEU0lfVEVTVF9QQVRURVJOX0dFTl9DTURfTURQX0lOSVRfVkFMMjsKLQkJcG9seV9vZmZz ZXQgPSBEU0lfVEVTVF9QQVRURVJOX0dFTl9DTURfTURQX1NUUkVBTTJfUE9MWTsKLQkJcGF0dGVy bl9zZWxfc2hpZnQgPSAyMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLQot CURTSV9XMzIoY3RybCwgaW5pdF9vZmZzZXQsIGluaXRfdmFsKTsKLQotCXN3aXRjaCAodHlwZSkg ewotCWNhc2UgRFNJX1RFU1RfUEFUVEVSTl9GSVhFRDoKLQkJcmVnIHw9ICgweDIgPDwgcGF0dGVy bl9zZWxfc2hpZnQpOwotCQlicmVhazsKLQljYXNlIERTSV9URVNUX1BBVFRFUk5fSU5DOgotCQly ZWcgfD0gKDB4MSA8PCBwYXR0ZXJuX3NlbF9zaGlmdCk7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX1RF U1RfUEFUVEVSTl9QT0xZOgotCQlEU0lfVzMyKGN0cmwsIHBvbHlfb2Zmc2V0LCAweEYwRjBGKTsK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JRFNJX1czMihjdHJsLCBEU0lf VEVTVF9QQVRURVJOX0dFTl9DVFJMLCByZWcpOwotCXByX2RlYnVnKCJbRFNJXyVkXSBDbWQgdGVz dCBwYXR0ZXJuIHNldHVwIGRvbmVcbiIsIGN0cmwtPmluZGV4KTsKLX0KLQotLyoqCi0gKiB0ZXN0 X3BhdHRlcm5fZW5hYmxlKCkgLSBlbmFibGUgdGVzdCBwYXR0ZXJuIGVuZ2luZQotICogQGN0cmw6 ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBl bmFibGU6ICAgICAgICBFbmFibGUvRGlzYWJsZSB0ZXN0IHBhdHRlcm4gZW5naW5lLgotICovCi12 b2lkIGRzaV9jdHJsX2h3X2Ntbl90ZXN0X3BhdHRlcm5fZW5hYmxlKHN0cnVjdCBkc2lfY3RybF9o dyAqY3RybCwKLQkJCQkJYm9vbCBlbmFibGUpCi17Ci0JdTMyIHJlZyA9IERTSV9SMzIoY3RybCwg RFNJX1RFU1RfUEFUVEVSTl9HRU5fQ1RSTCk7Ci0KLQlpZiAoZW5hYmxlKQotCQlyZWcgfD0gQklU KDApOwotCWVsc2UKLQkJcmVnICY9IH5CSVQoMCk7Ci0KLQlEU0lfVzMyKGN0cmwsIERTSV9URVNU X1BBVFRFUk5fR0VOX0NUUkwsIHJlZyk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gVGVzdCBwYXR0 ZXJuIGVuYWJsZT0lZFxuIiwgY3RybC0+aW5kZXgsIGVuYWJsZSk7Ci19Ci0KLS8qKgotICogdHJp Z2dlcl9jbWRfdGVzdF9wYXR0ZXJuKCkgLSB0cmlnZ2VyIGEgY29tbWFuZCBtb2RlIGZyYW1lIHVw ZGF0ZSB3aXRoCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QgcGF0dGVybgot ICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2Fy ZS4KLSAqIEBzdHJlYW1faWQ6ICAgICBTdHJlYW0gb24gd2hpY2ggZnJhbWUgdXBkYXRlIGlzIHNl bnQuCi0gKi8KLXZvaWQgZHNpX2N0cmxfaHdfY21uX3RyaWdnZXJfY21kX3Rlc3RfcGF0dGVybihz dHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJCSAgICAgdTMyIHN0cmVhbV9pZCkKLXsKLQlz d2l0Y2ggKHN0cmVhbV9pZCkgewotCWNhc2UgMDoKLQkJRFNJX1czMihjdHJsLCBEU0lfVEVTVF9Q QVRURVJOX0dFTl9DTURfU1RSRUFNMF9UUklHR0VSLCAweDEpOwotCQlicmVhazsKLQljYXNlIDE6 Ci0JCURTSV9XMzIoY3RybCwgRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX1NUUkVBTTFfVFJJR0dF UiwgMHgxKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlEU0lfVzMyKGN0cmwsIERTSV9URVNUX1BB VFRFUk5fR0VOX0NNRF9TVFJFQU0yX1RSSUdHRVIsIDB4MSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6 Ci0JCWJyZWFrOwotCX0KLQotCXByX2RlYnVnKCJbRFNJXyVkXSBDbWQgVGVzdCBwYXR0ZXJuIHRy aWdnZXJcbiIsIGN0cmwtPmluZGV4KTsKLX0KLQotdm9pZCBkc2lfY3RybF9od19kbG4wX3BoeV9l cnIoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsKQotewotCXUzMiBzdGF0dXMgPSAwOwotCS8qCi0J ICogQ2xlYXIgb3V0IGFueSBwaHkgZXJyb3JzIHByaW9yIHRvIGV4aXRpbmcgVUxQUwotCSAqIFRo aXMgZml4ZXMgY2VydGFpbiBpbnN0YW5jZXMgd2hlcmUgcGh5IGRvZXMgbm90IGV4aXQKLQkgKiBV TFBTIGNsZWFubHkuIEFsc28sIGRvIG5vdCBwcmludCBlcnJvciBkdXJpbmcgc3VjaCBjYXNlcy4K LQkgKi8KLQlzdGF0dXMgPSBEU0lfUjMyKGN0cmwsIERTSV9ETE4wX1BIWV9FUlIpOwotCWlmIChz dGF0dXMgJiAweDAxMTExMSkgewotCQlEU0lfVzMyKGN0cmwsIERTSV9ETE4wX1BIWV9FUlIsIHN0 YXR1cyk7Ci0JCXByX2VycigiJXM6IHBoeV9lcnJfc3RhdHVzID0gJXhcbiIsIF9fZnVuY19fLCBz dGF0dXMpOwotCX0KLX0KLQotdm9pZCBkc2lfY3RybF9od19jbW5fcGh5X3Jlc2V0X2NvbmZpZyhz dHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCWJvb2wgZW5hYmxlKQotewotCXUzMiByZWcgPSAw OwotCi0JcmVnID0gRFNJX01NU1NfTUlTQ19SMzIoY3RybCwgTU1TU19NSVNDX0NMQU1QX1JFR19P RkYpOwotCi0JLyogTWFzay91bm1hc2sgZGlzYWJsZSBQSFkgcmVzZXQgYml0ICovCi0JaWYgKGVu YWJsZSkKLQkJcmVnIHw9IEJJVCgzMCk7Ci0JZWxzZQotCQlyZWcgJj0gfkJJVCgzMCk7Ci0KLQlE U0lfTU1TU19NSVNDX1czMihjdHJsLCBNTVNTX01JU0NfQ0xBTVBfUkVHX09GRiwgcmVnKTsKLX0K LQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9y ZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmxfcmVnLmgKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhNGQ1NzUwLi4wMDAwMDAwCi0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmxfcmVnLmgKKysrIC9kZXYvbnVsbApA QCAtMSwxOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE4LCBUaGUgTGlu dXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQot ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0g KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwot Ci0jaWZuZGVmIF9EU0lfQ1RSTF9SRUdfSF8KLSNkZWZpbmUgX0RTSV9DVFJMX1JFR19IXwotCi0j ZGVmaW5lIERTSV9IV19WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAw KQotI2RlZmluZSBEU0lfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4 MDAwNCkKLSNkZWZpbmUgRFNJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICgweDAwMDgpCi0jZGVmaW5lIERTSV9GSUZPX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoMHgwMDBDKQotI2RlZmluZSBEU0lfVklERU9fTU9ERV9DVFJMICAgICAgICAgICAgICAg ICAgICAgICAgKDB4MDAxMCkKLSNkZWZpbmUgRFNJX1ZJREVPX01PREVfU1lOQ19EQVRBVFlQRSAg ICAgICAgICAgICAgICgweDAwMTQpCi0jZGVmaW5lIERTSV9WSURFT19NT0RFX1BJWEVMX0RBVEFU WVBFICAgICAgICAgICAgICAoMHgwMDE4KQotI2RlZmluZSBEU0lfVklERU9fTU9ERV9CTEFOS0lO R19EQVRBVFlQRSAgICAgICAgICAgKDB4MDAxQykKLSNkZWZpbmUgRFNJX1ZJREVPX01PREVfREFU QV9DVFJMICAgICAgICAgICAgICAgICAgICgweDAwMjApCi0jZGVmaW5lIERTSV9WSURFT19NT0RF X0FDVElWRV9IICAgICAgICAgICAgICAgICAgICAoMHgwMDI0KQotI2RlZmluZSBEU0lfVklERU9f TU9ERV9BQ1RJVkVfViAgICAgICAgICAgICAgICAgICAgKDB4MDAyOCkKLSNkZWZpbmUgRFNJX1ZJ REVPX01PREVfVE9UQUwgICAgICAgICAgICAgICAgICAgICAgICgweDAwMkMpCi0jZGVmaW5lIERT SV9WSURFT19NT0RFX0hTWU5DICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDMwKQotI2RlZmlu ZSBEU0lfVklERU9fTU9ERV9WU1lOQyAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAzNCkKLSNk ZWZpbmUgRFNJX1ZJREVPX01PREVfVlNZTkNfVlBPUyAgICAgICAgICAgICAgICAgICgweDAwMzgp Ci0jZGVmaW5lIERTSV9DT01NQU5EX01PREVfRE1BX0NUUkwgICAgICAgICAgICAgICAgICAoMHgw MDNDKQotI2RlZmluZSBEU0lfQ09NTUFORF9NT0RFX01EUF9DVFJMICAgICAgICAgICAgICAgICAg KDB4MDA0MCkKLSNkZWZpbmUgRFNJX0NPTU1BTkRfTU9ERV9NRFBfRENTX0NNRF9DVFJMICAgICAg ICAgICgweDAwNDQpCi0jZGVmaW5lIERTSV9ETUFfQ01EX09GRlNFVCAgICAgICAgICAgICAgICAg ICAgICAgICAoMHgwMDQ4KQotI2RlZmluZSBEU0lfRE1BX0NNRF9MRU5HVEggICAgICAgICAgICAg ICAgICAgICAgICAgKDB4MDA0QykKLSNkZWZpbmUgRFNJX0RNQV9GSUZPX0NUUkwgICAgICAgICAg ICAgICAgICAgICAgICAgICgweDAwNTApCi0jZGVmaW5lIERTSV9ETUFfTlVMTF9QQUNLRVRfREFU QSAgICAgICAgICAgICAgICAgICAoMHgwMDU0KQotI2RlZmluZSBEU0lfQ09NTUFORF9NT0RFX01E UF9TVFJFQU0wX0NUUkwgICAgICAgICAgKDB4MDA1OCkKLSNkZWZpbmUgRFNJX0NPTU1BTkRfTU9E RV9NRFBfU1RSRUFNMF9UT1RBTCAgICAgICAgICgweDAwNUMpCi0jZGVmaW5lIERTSV9DT01NQU5E X01PREVfTURQX1NUUkVBTTFfQ1RSTCAgICAgICAgICAoMHgwMDYwKQotI2RlZmluZSBEU0lfQ09N TUFORF9NT0RFX01EUF9TVFJFQU0xX1RPVEFMICAgICAgICAgKDB4MDA2NCkKLSNkZWZpbmUgRFNJ X0FDS19FUlJfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwNjgpCi0jZGVmaW5l IERTSV9SREJLX0RBVEEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDZDKQotI2Rl ZmluZSBEU0lfUkRCS19EQVRBMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDA3MCkK LSNkZWZpbmUgRFNJX1JEQktfREFUQTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAw NzQpCi0jZGVmaW5lIERTSV9SREJLX0RBVEEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo MHgwMDc4KQotI2RlZmluZSBEU0lfUkRCS19EQVRBVFlQRTAgICAgICAgICAgICAgICAgICAgICAg ICAgKDB4MDA3QykKLSNkZWZpbmUgRFNJX1JEQktfREFUQVRZUEUxICAgICAgICAgICAgICAgICAg ICAgICAgICgweDAwODApCi0jZGVmaW5lIERTSV9UUklHX0NUUkwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoMHgwMDg0KQotI2RlZmluZSBEU0lfRVhUX01VWCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKDB4MDA4OCkKLSNkZWZpbmUgRFNJX0VYVF9NVVhfVEVfUFVMU0VfREVU RUNUX0NUUkwgICAgICAgICAgICgweDAwOEMpCi0jZGVmaW5lIERTSV9DTURfTU9ERV9ETUFfU1df VFJJR0dFUiAgICAgICAgICAgICAgICAoMHgwMDkwKQotI2RlZmluZSBEU0lfQ01EX01PREVfTURQ X1NXX1RSSUdHRVIgICAgICAgICAgICAgICAgKDB4MDA5NCkKLSNkZWZpbmUgRFNJX0NNRF9NT0RF X0JUQV9TV19UUklHR0VSICAgICAgICAgICAgICAgICgweDAwOTgpCi0jZGVmaW5lIERTSV9SRVNF VF9TV19UUklHR0VSICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDlDKQotI2RlZmluZSBEU0lf TUlTUl9DTURfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDBBMCkKLSNkZWZpbmUg RFNJX01JU1JfVklERU9fQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICgweDAwQTQpCi0jZGVm aW5lIERTSV9MQU5FX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMEE4KQot I2RlZmluZSBEU0lfTEFORV9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDBB QykKLSNkZWZpbmUgRFNJX0xBTkVfU1dBUF9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICgw eDAwQjApCi0jZGVmaW5lIERTSV9ETE4wX1BIWV9FUlIgICAgICAgICAgICAgICAgICAgICAgICAg ICAoMHgwMEI0KQotI2RlZmluZSBEU0lfTFBfVElNRVJfQ1RSTCAgICAgICAgICAgICAgICAgICAg ICAgICAgKDB4MDBCOCkKLSNkZWZpbmUgRFNJX0hTX1RJTUVSX0NUUkwgICAgICAgICAgICAgICAg ICAgICAgICAgICgweDAwQkMpCi0jZGVmaW5lIERTSV9USU1FT1VUX1NUQVRVUyAgICAgICAgICAg ICAgICAgICAgICAgICAoMHgwMEMwKQotI2RlZmluZSBEU0lfQ0xLT1VUX1RJTUlOR19DVFJMICAg ICAgICAgICAgICAgICAgICAgKDB4MDBDNCkKLSNkZWZpbmUgRFNJX0VPVF9QQUNLRVQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICgweDAwQzgpCi0jZGVmaW5lIERTSV9FT1RfUEFDS0VUX0NU UkwgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMENDKQotI2RlZmluZSBEU0lfR0VORVJJQ19F U0NfVFhfVFJJR0dFUiAgICAgICAgICAgICAgICAgKDB4MDBEMCkKLSNkZWZpbmUgRFNJX0NBTV9C SVNUX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwRDQpCi0jZGVmaW5lIERTSV9D QU1fQklTVF9GUkFNRV9TSVpFICAgICAgICAgICAgICAgICAgICAoMHgwMEQ4KQotI2RlZmluZSBE U0lfQ0FNX0JJU1RfQkxPQ0tfU0laRSAgICAgICAgICAgICAgICAgICAgKDB4MDBEQykKLSNkZWZp bmUgRFNJX0NBTV9CSVNUX0ZSQU1FX0NPTkZJRyAgICAgICAgICAgICAgICAgICgweDAwRTApCi0j ZGVmaW5lIERTSV9DQU1fQklTVF9MU0ZSX0NUUkwgICAgICAgICAgICAgICAgICAgICAoMHgwMEU0 KQotI2RlZmluZSBEU0lfQ0FNX0JJU1RfTFNGUl9JTklUICAgICAgICAgICAgICAgICAgICAgKDB4 MDBFOCkKLSNkZWZpbmUgRFNJX0NBTV9CSVNUX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAg ICgweDAwRUMpCi0jZGVmaW5lIERTSV9DQU1fQklTVF9TVEFUVVMgICAgICAgICAgICAgICAgICAg ICAgICAoMHgwMEYwKQotI2RlZmluZSBEU0lfRVJSX0lOVF9NQVNLMCAgICAgICAgICAgICAgICAg ICAgICAgICAgKDB4MDEwQykKLSNkZWZpbmUgRFNJX0lOVF9DVFJMICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgweDAxMTApCi0jZGVmaW5lIERTSV9JT0JJU1RfQ1RSTCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoMHgwMTE0KQotI2RlZmluZSBEU0lfU09GVF9SRVNFVCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKDB4MDExOCkKLSNkZWZpbmUgRFNJX0NMS19DVFJMICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgweDAxMUMpCi0jZGVmaW5lIERTSV9DTEtfU1RBVFVT ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMTIwKQotI2RlZmluZSBEU0lfREVCVUdf QlVTX0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDEyNCkKLSNkZWZpbmUgRFNJX0RF QlVHX0JVU19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICgweDAxMjgpCi0jZGVmaW5lIERT SV9QSFlfU1dfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMTJDKQotI2RlZmlu ZSBEU0lfQVhJMkFIQl9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDEzMCkKLSNk ZWZpbmUgRFNJX01JU1JfQ01EX01EUDBfMzJCSVQgICAgICAgICAgICAgICAgICAgICgweDAxMzQp Ci0jZGVmaW5lIERTSV9NSVNSX0NNRF9NRFAxXzMyQklUICAgICAgICAgICAgICAgICAgICAoMHgw MTM4KQotI2RlZmluZSBEU0lfTUlTUl9DTURfRE1BXzMyQklUICAgICAgICAgICAgICAgICAgICAg KDB4MDEzQykKLSNkZWZpbmUgRFNJX01JU1JfVklERU9fMzJCSVQgICAgICAgICAgICAgICAgICAg ICAgICgweDAxNDApCi0jZGVmaW5lIERTSV9MQU5FX01JU1JfQ1RSTCAgICAgICAgICAgICAgICAg ICAgICAgICAoMHgwMTQ0KQotI2RlZmluZSBEU0lfTEFORTBfTUlTUiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKDB4MDE0OCkKLSNkZWZpbmUgRFNJX0xBTkUxX01JU1IgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICgweDAxNEMpCi0jZGVmaW5lIERTSV9MQU5FMl9NSVNSICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoMHgwMTUwKQotI2RlZmluZSBEU0lfTEFORTNfTUlTUiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDE1NCkKLSNkZWZpbmUgRFNJX1RFU1RfUEFUVEVS Tl9HRU5fQ1RSTCAgICAgICAgICAgICAgICAgICgweDAxNUMpCi0jZGVmaW5lIERTSV9URVNUX1BB VFRFUk5fR0VOX1ZJREVPX1BPTFkgICAgICAgICAgICAoMHgwMTYwKQotI2RlZmluZSBEU0lfVEVT VF9QQVRURVJOX0dFTl9WSURFT19JTklUX1ZBTCAgICAgICAgKDB4MDE2NCkKLSNkZWZpbmUgRFNJ X1RFU1RfUEFUVEVSTl9HRU5fQ01EX01EUF9TVFJFQU0wX1BPTFkgICgweDAxNjgpCi0jZGVmaW5l IERTSV9URVNUX1BBVFRFUk5fR0VOX0NNRF9NRFBfSU5JVF9WQUwwICAgICAoMHgwMTZDKQotI2Rl ZmluZSBEU0lfVEVTVF9QQVRURVJOX0dFTl9DTURfTURQX1NUUkVBTTFfUE9MWSAgKDB4MDE3MCkK LSNkZWZpbmUgRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX01EUF9JTklUX1ZBTDEgICAgICgweDAx NzQpCi0jZGVmaW5lIERTSV9URVNUX1BBVFRFUk5fR0VOX0NNRF9ETUFfUE9MWSAgICAgICAgICAo MHgwMTc4KQotI2RlZmluZSBEU0lfVEVTVF9QQVRURVJOX0dFTl9DTURfRE1BX0lOSVRfVkFMICAg ICAgKDB4MDE3QykKLSNkZWZpbmUgRFNJX1RFU1RfUEFUVEVSTl9HRU5fVklERU9fRU5BQkxFICAg ICAgICAgICgweDAxODApCi0jZGVmaW5lIERTSV9URVNUX1BBVFRFUk5fR0VOX0NNRF9TVFJFQU0w X1RSSUdHRVIgICAoMHgwMTg0KQotI2RlZmluZSBEU0lfVEVTVF9QQVRURVJOX0dFTl9DTURfU1RS RUFNMV9UUklHR0VSICAgKDB4MDE4OCkKLSNkZWZpbmUgRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01E X01EUF9JTklUX1ZBTDIgICAgICgweDAxOEMpCi0jZGVmaW5lIERTSV9URVNUX1BBVFRFUk5fR0VO X0NNRF9NRFBfU1RSRUFNMl9QT0xZICAoMHgwMTkwKQotI2RlZmluZSBEU0lfVEVTVF9QQVRURVJO X0dFTl9DTURfTURQX1NUUkVBTTJfUE9MWSAgKDB4MDE5MCkKLSNkZWZpbmUgRFNJX0NPTU1BTkRf TU9ERV9NRFBfSURMRV9DVFJMICAgICAgICAgICAgICgweDAxOTQpCi0jZGVmaW5lIERTSV9URVNU X1BBVFRFUk5fR0VOX0NNRF9TVFJFQU0yX1RSSUdHRVIgICAoMHgwMTk4KQotI2RlZmluZSBEU0lf VFBHX01BSU5fQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgKDB4MDE5QykKLSNkZWZpbmUg RFNJX1RQR19NQUlOX0NPTlRST0wyICAgICAgICAgICAgICAgICAgICAgICgweDAxQTApCi0jZGVm aW5lIERTSV9UUEdfVklERU9fQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAoMHgwMUE0KQot I2RlZmluZSBEU0lfVFBHX0NPTVBPTkVOVF9MSU1JVFMgICAgICAgICAgICAgICAgICAgKDB4MDFB OCkKLSNkZWZpbmUgRFNJX1RQR19SRUNUQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICgw eDAxQUMpCi0jZGVmaW5lIERTSV9UUEdfQkxBQ0tfV0hJVEVfUEFUVEVSTl9GUkFNRVMgICAgICAg ICAoMHgwMUIwKQotI2RlZmluZSBEU0lfVFBHX1JHQl9NQVBQSU5HICAgICAgICAgICAgICAgICAg ICAgICAgKDB4MDFCNCkKLSNkZWZpbmUgRFNJX0NPTU1BTkRfTU9ERV9NRFBfQ1RSTDIgICAgICAg ICAgICAgICAgICgweDAxQjgpCi0jZGVmaW5lIERTSV9DT01NQU5EX01PREVfTURQX1NUUkVBTTJf Q1RSTCAgICAgICAgICAoMHgwMUJDKQotI2RlZmluZSBEU0lfQ09NTUFORF9NT0RFX01EUF9TVFJF QU0yX1RPVEFMICAgICAgICAgKDB4MDFDMCkKLSNkZWZpbmUgRFNJX01JU1JfQ01EX01EUDJfOEJJ VCAgICAgICAgICAgICAgICAgICAgICgweDAxQzQpCi0jZGVmaW5lIERTSV9NSVNSX0NNRF9NRFAy XzMyQklUICAgICAgICAgICAgICAgICAgICAoMHgwMUM4KQotI2RlZmluZSBEU0lfVkJJRl9DVFJM ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDFDQykKLSNkZWZpbmUgRFNJX0FFU19D VFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAxRDApCi0jZGVmaW5lIERTSV9S REJLX0RBVEFfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMUQ0KQotI2RlZmluZSBE U0lfVEVTVF9QQVRURVJOX0dFTl9DTURfRE1BX0lOSVRfVkFMMiAgICAgKDB4MDFEOCkKLSNkZWZp bmUgRFNJX1RQR19ETUFfRklGT19TVEFUVVMgICAgICAgICAgICAgICAgICAgICgweDAxREMpCi0j ZGVmaW5lIERTSV9UUEdfRE1BX0ZJRk9fV1JJVEVfVFJJR0dFUiAgICAgICAgICAgICAoMHgwMUUw KQotI2RlZmluZSBEU0lfRFNJX1RJTUlOR19GTFVTSCAgICAgICAgICAgICAgICAgICAgICAgKDB4 MDFFNCkKLSNkZWZpbmUgRFNJX0RTSV9USU1JTkdfREJfTU9ERSAgICAgICAgICAgICAgICAgICAg ICgweDAxRTgpCi0jZGVmaW5lIERTSV9UUEdfRE1BX0ZJRk9fUkVTRVQgICAgICAgICAgICAgICAg ICAgICAoMHgwMUVDKQotI2RlZmluZSBEU0lfU0NSQVRDSF9SRUdJU1RFUl8wICAgICAgICAgICAg ICAgICAgICAgKDB4MDFGMCkKLSNkZWZpbmUgRFNJX1ZFUlNJT04gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgweDAxRjQpCi0jZGVmaW5lIERTSV9TQ1JBVENIX1JFR0lTVEVSXzEgICAg ICAgICAgICAgICAgICAgICAoMHgwMUY4KQotI2RlZmluZSBEU0lfU0NSQVRDSF9SRUdJU1RFUl8y ICAgICAgICAgICAgICAgICAgICAgKDB4MDFGQykKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVT SF9DVFJMICAgICAgICAgICAgICAgICAgICgweDAyMDApCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JF RlJFU0hfUElQRV9ERUxBWSAgICAgICAgICAgICAoMHgwMjA0KQotI2RlZmluZSBEU0lfRFlOQU1J Q19SRUZSRVNIX1BJUEVfREVMQVkyICAgICAgICAgICAgKDB4MDIwOCkKLSNkZWZpbmUgRFNJX0RZ TkFNSUNfUkVGUkVTSF9QTExfREVMQVkgICAgICAgICAgICAgICgweDAyMEMpCi0jZGVmaW5lIERT SV9EWU5BTUlDX1JFRlJFU0hfU1RBVFVTICAgICAgICAgICAgICAgICAoMHgwMjEwKQotI2RlZmlu ZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMMCAgICAgICAgICAgICAgKDB4MDIxNCkKLSNk ZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDEgICAgICAgICAgICAgICgweDAyMTgp Ci0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkwyICAgICAgICAgICAgICAoMHgw MjFDKQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMMyAgICAgICAgICAgICAg KDB4MDIyMCkKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDQgICAgICAgICAg ICAgICgweDAyMjQpCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkw1ICAgICAg ICAgICAgICAoMHgwMjI4KQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMNiAg ICAgICAgICAgICAgKDB4MDIyQykKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RS TDcgICAgICAgICAgICAgICgweDAyMzApCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExM X0NUUkw4ICAgICAgICAgICAgICAoMHgwMjM0KQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNI X1BMTF9DVFJMOSAgICAgICAgICAgICAgKDB4MDIzOCkKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVG UkVTSF9QTExfQ1RSTDEwICAgICAgICAgICAgICgweDAyM0MpCi0jZGVmaW5lIERTSV9EWU5BTUlD X1JFRlJFU0hfUExMX0NUUkwxMSAgICAgICAgICAgICAoMHgwMjQwKQotI2RlZmluZSBEU0lfRFlO QU1JQ19SRUZSRVNIX1BMTF9DVFJMMTIgICAgICAgICAgICAgKDB4MDI0NCkKLSNkZWZpbmUgRFNJ X0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDEzICAgICAgICAgICAgICgweDAyNDgpCi0jZGVmaW5l IERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkwxNCAgICAgICAgICAgICAoMHgwMjRDKQotI2Rl ZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMMTUgICAgICAgICAgICAgKDB4MDI1MCkK LSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDE2ICAgICAgICAgICAgICgweDAy NTQpCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkwxNyAgICAgICAgICAgICAo MHgwMjU4KQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMMTggICAgICAgICAg ICAgKDB4MDI1QykKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDE5ICAgICAg ICAgICAgICgweDAyNjApCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkwyMCAg ICAgICAgICAgICAoMHgwMjY0KQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJM MjEgICAgICAgICAgICAgKDB4MDI2OCkKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExf Q1RSTDIyICAgICAgICAgICAgICgweDAyNkMpCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hf UExMX0NUUkwyMyAgICAgICAgICAgICAoMHgwMjcwKQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZS RVNIX1BMTF9DVFJMMjQgICAgICAgICAgICAgKDB4MDI3NCkKLSNkZWZpbmUgRFNJX0RZTkFNSUNf UkVGUkVTSF9QTExfQ1RSTDI1ICAgICAgICAgICAgICgweDAyNzgpCi0jZGVmaW5lIERTSV9EWU5B TUlDX1JFRlJFU0hfUExMX0NUUkwyNiAgICAgICAgICAgICAoMHgwMjdDKQotI2RlZmluZSBEU0lf RFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMMjcgICAgICAgICAgICAgKDB4MDI4MCkKLSNkZWZpbmUg RFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDI4ICAgICAgICAgICAgICgweDAyODQpCi0jZGVm aW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkwyOSAgICAgICAgICAgICAoMHgwMjg4KQot I2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMMzAgICAgICAgICAgICAgKDB4MDI4 QykKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDMxICAgICAgICAgICAgICgw eDAyOTApCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX1VQUEVSX0FERFIgICAgICAg ICAoMHgwMjk0KQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9VUFBFUl9BRERSMiAg ICAgICAgKDB4MDI5OCkKLSNkZWZpbmUgRFNJX1ZJREVPX0NPTVBSRVNTSU9OX01PREVfQ1RSTCAg ICAgICAgICAgICgweDAyQTApCi0jZGVmaW5lIERTSV9WSURFT19DT01QUkVTU0lPTl9NT0RFX0NU UkwyICAgICAgICAgICAoMHgwMkE0KQotI2RlZmluZSBEU0lfQ09NTUFORF9DT01QUkVTU0lPTl9N T0RFX0NUUkwgICAgICAgICAgKDB4MDJBOCkKLSNkZWZpbmUgRFNJX0NPTU1BTkRfQ09NUFJFU1NJ T05fTU9ERV9DVFJMMiAgICAgICAgICgweDAyQUMpCi0jZGVmaW5lIERTSV9DT01NQU5EX0NPTVBS RVNTSU9OX01PREVfQ1RSTDMgICAgICAgICAoMHgwMkIwKQotI2RlZmluZSBEU0lfQ09NTUFORF9N T0RFX05VTExfSU5TRVJUSU9OX0NUUkwgICAgICAgKDB4MDJCNCkKLSNkZWZpbmUgRFNJX1JFQURf QkFDS19ESVNBQkxFX1NUQVRVUyAgICAgICAgICAgICAgICgweDAyQjgpCi0jZGVmaW5lIERTSV9E RVNLRVdfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMkJDKQotI2RlZmluZSBE U0lfREVTS0VXX0RFTEFZX0NUUkwgICAgICAgICAgICAgICAgICAgICAgKDB4MDJDMCkKLSNkZWZp bmUgRFNJX0RFU0tFV19TV19UUklHR0VSICAgICAgICAgICAgICAgICAgICAgICgweDAyQzQpCi0j ZGVmaW5lIERTSV9ERUJVR19DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMkM4 KQotI2RlZmluZSBEU0lfU0VDVVJFX0RJU1BMQVlfU1RBVFVTICAgICAgICAgICAgICAgICAgKDB4 MDJDQykKLSNkZWZpbmUgRFNJX1NFQ1VSRV9ESVNQTEFZX0JMT0NLX0NPTU1BTkRfQ09MT1IgICAg ICgweDAyRDApCi0jZGVmaW5lIERTSV9TRUNVUkVfRElTUExBWV9CTE9DS19WSURFT19DT0xPUiAg ICAgICAoMHgwMkQ0KQotI2RlZmluZSBEU0lfTE9HSUNBTF9MQU5FX1NXQVBfQ1RSTCAgICAgICAg ICAgICAgICAgKDB4MDMxMCkKLQotCi0jZW5kaWYgLyogX0RTSV9DVFJMX1JFR19IXyAqLwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGVmcy5oIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGVmcy5oCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMmM4ZDc2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHNpLXN0YWdpbmcvZHNpX2RlZnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDU3OSArMCwwIEBACi0v KgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9u bHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2lmbmRlZiBfRFNJX0RFRlNfSF8K LSNkZWZpbmUgX0RTSV9ERUZTX0hfCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1 ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KLSNpbmNsdWRlICJtc21fZHJ2LmgiCi0KLSNkZWZpbmUg RFNJX0hfVE9UQUwodCkgKCgodCktPmhfYWN0aXZlKSArICgodCktPmhfYmFja19wb3JjaCkgKyBc Ci0JCQkoKHQpLT5oX3N5bmNfd2lkdGgpICsgKCh0KS0+aF9mcm9udF9wb3JjaCkpCi0KLSNkZWZp bmUgRFNJX1ZfVE9UQUwodCkgKCgodCktPnZfYWN0aXZlKSArICgodCktPnZfYmFja19wb3JjaCkg KyBcCi0JCQkoKHQpLT52X3N5bmNfd2lkdGgpICsgKCh0KS0+dl9mcm9udF9wb3JjaCkpCi0KLSNk ZWZpbmUgRFNJX0hfVE9UQUxfRFNDKHQpIFwKLQkoe1wKLQkJdTY0IHZhbHVlO1wKLQkJaWYgKCh0 KS0+ZHNjX2VuYWJsZWQgJiYgKHQpLT5kc2MpXAotCQkJdmFsdWUgPSAodCktPmRzYy0+cGNsa19w ZXJfbGluZTtcCi0JCWVsc2VcCi0JCQl2YWx1ZSA9ICh0KS0+aF9hY3RpdmU7XAotCQl2YWx1ZSA9 IHZhbHVlICsgKHQpLT5oX2JhY2tfcG9yY2ggKyAodCktPmhfc3luY193aWR0aCArXAotCQkJKHQp LT5oX2Zyb250X3BvcmNoO1wKLQkJdmFsdWU7XAotCX0pCi0KLSNkZWZpbmUgRFNJX0RFQlVHX05B TUVfTEVOCQkzMgotLyoqCi0gKiBlbnVtIGRzaV9waXhlbF9mb3JtYXQgLSBEU0kgcGl4ZWwgZm9y bWF0cwotICogQERTSV9QSVhFTF9GT1JNQVRfUkdCNTY1OgotICogQERTSV9QSVhFTF9GT1JNQVRf UkdCNjY2OgotICogQERTSV9QSVhFTF9GT1JNQVRfUkdCNjY2X0xPT1NFOgotICogQERTSV9QSVhF TF9GT1JNQVRfUkdCODg4OgotICogQERTSV9QSVhFTF9GT1JNQVRfUkdCMTExOgotICogQERTSV9Q SVhFTF9GT1JNQVRfUkdCMzMyOgotICogQERTSV9QSVhFTF9GT1JNQVRfUkdCNDQ0OgotICogQERT SV9QSVhFTF9GT1JNQVRfTUFYOgotICovCi1lbnVtIGRzaV9waXhlbF9mb3JtYXQgewotCURTSV9Q SVhFTF9GT1JNQVRfUkdCNTY1ID0gMCwKLQlEU0lfUElYRUxfRk9STUFUX1JHQjY2NiwKLQlEU0lf UElYRUxfRk9STUFUX1JHQjY2Nl9MT09TRSwKLQlEU0lfUElYRUxfRk9STUFUX1JHQjg4OCwKLQlE U0lfUElYRUxfRk9STUFUX1JHQjExMSwKLQlEU0lfUElYRUxfRk9STUFUX1JHQjMzMiwKLQlEU0lf UElYRUxfRk9STUFUX1JHQjQ0NCwKLQlEU0lfUElYRUxfRk9STUFUX01BWAotfTsKLQotLyoqCi0g KiBlbnVtIGRzaV9vcF9tb2RlIC0gZHNpIG9wZXJhdGlvbiBtb2RlCi0gKiBARFNJX09QX1ZJREVP X01PREU6IERTSSB2aWRlbyBtb2RlIG9wZXJhdGlvbgotICogQERTSV9PUF9DTURfTU9ERTogICBE U0kgQ29tbWFuZCBtb2RlIG9wZXJhdGlvbgotICogQERTSV9PUF9NT0RFX01BWDoKLSAqLwotZW51 bSBkc2lfb3BfbW9kZSB7Ci0JRFNJX09QX1ZJREVPX01PREUgPSAwLAotCURTSV9PUF9DTURfTU9E RSwKLQlEU0lfT1BfTU9ERV9NQVgKLX07Ci0KLS8qKgotICogZW51bSBkc2lfbW9kZV9mbGFncyAt IGZsYWdzIHRvIHNpZ25hbCBvdGhlciBkcm0gY29tcG9uZW50cyB2aWEgcHJpdmF0ZSBmbGFncwot ICogQERTSV9NT0RFX0ZMQUdfU0VBTUxFU1M6CVNlYW1sZXNzIHRyYW5zaXRpb24gcmVxdWVzdGVk IGJ5IHVzZXIKLSAqIEBEU0lfTU9ERV9GTEFHX0RGUFM6CQlTZWFtbGVzcyB0cmFuc2l0aW9uIGlz IER5bmFtaWNGUFMKLSAqIEBEU0lfTU9ERV9GTEFHX1ZCTEFOS19QUkVfTU9ERVNFVDoJVHJhbnNp dGlvbiBuZWVkcyBWQkxBTksgYmVmb3JlIE1vZGVzZXQKLSAqIEBEU0lfTU9ERV9GTEFHX0RNUzog U2VhbWxlc3MgdHJhbnNpdGlvbiBpcyBkeW5hbWljIG1vZGUgc3dpdGNoCi0gKiBARFNJX01PREVf RkxBR19WUlI6IFNlYW1sZXNzIHRyYW5zaXRpb24gaXMgRHluYW1pY0ZQUy4KLSAqICAgICAgICAg ICAgICAgICAgICAgTmV3IHRpbWluZyB2YWx1ZXMgYXJlIHNlbnQgZnJvbSBEQUwuCi0gKi8KLWVu dW0gZHNpX21vZGVfZmxhZ3MgewotCURTSV9NT0RFX0ZMQUdfU0VBTUxFU1MJCQk9IEJJVCgwKSwK LQlEU0lfTU9ERV9GTEFHX0RGUFMJCQk9IEJJVCgxKSwKLQlEU0lfTU9ERV9GTEFHX1ZCTEFOS19Q UkVfTU9ERVNFVAk9IEJJVCgyKSwKLQlEU0lfTU9ERV9GTEFHX0RNUwkJCT0gQklUKDMpLAotCURT SV9NT0RFX0ZMQUdfVlJSCQkJPSBCSVQoNCksCi19OwotCi0vKioKLSAqIGVudW0gZHNpX2xvZ2lj YWxfbGFuZSAtIGRzaSBsb2dpY2FsIGxhbmVzCi0gKiBARFNJX0xPR0lDQUxfTEFORV8wOiAgICAg TG9naWNhbCBsYW5lIDAKLSAqIEBEU0lfTE9HSUNBTF9MQU5FXzE6ICAgICBMb2dpY2FsIGxhbmUg MQotICogQERTSV9MT0dJQ0FMX0xBTkVfMjogICAgIExvZ2ljYWwgbGFuZSAyCi0gKiBARFNJX0xP R0lDQUxfTEFORV8zOiAgICAgTG9naWNhbCBsYW5lIDMKLSAqIEBEU0lfTE9HSUNBTF9DTE9DS19M QU5FOiBDbG9jayBsYW5lCi0gKiBARFNJX0xBTkVfTUFYOiAgICAgICAgICAgTWF4aW11bSBsYW5l cyBzdXBwb3J0ZWQKLSAqLwotZW51bSBkc2lfbG9naWNhbF9sYW5lIHsKLQlEU0lfTE9HSUNBTF9M QU5FXzAgPSAwLAotCURTSV9MT0dJQ0FMX0xBTkVfMSwKLQlEU0lfTE9HSUNBTF9MQU5FXzIsCi0J RFNJX0xPR0lDQUxfTEFORV8zLAotCURTSV9MT0dJQ0FMX0NMT0NLX0xBTkUsCi0JRFNJX0xBTkVf TUFYCi19OwotCi0vKioKLSAqIGVudW0gZHNpX2RhdGFfbGFuZXMgLSBCSVQgbWFwIGZvciBEU0kg ZGF0YSBsYW5lcwotICogVGhpcyBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBhY3RpdmUgRFNJIGRh dGEgbGFuZXMgZm9yCi0gKiB2YXJpb3VzIG9wZXJhdGlvbnMgbGlrZSBEU0kgZGF0YSBsYW5lIGVu YWJsZS9VTFBTL2NsYW1wCi0gKiBjb25maWd1cmF0aW9ucy4KLSAqIEBEU0lfREFUQV9MQU5FXzA6 IEJJVChEU0lfTE9HSUNBTF9MQU5FXzApCi0gKiBARFNJX0RBVEFfTEFORV8xOiBCSVQoRFNJX0xP R0lDQUxfTEFORV8xKQotICogQERTSV9EQVRBX0xBTkVfMjogQklUKERTSV9MT0dJQ0FMX0xBTkVf MikKLSAqIEBEU0lfREFUQV9MQU5FXzM6IEJJVChEU0lfTE9HSUNBTF9MQU5FXzMpCi0gKiBARFNJ X0NMT0NLX0xBTkU6ICBCSVQoRFNJX0xPR0lDQUxfQ0xPQ0tfTEFORSkKLSAqLwotZW51bSBkc2lf ZGF0YV9sYW5lcyB7Ci0JRFNJX0RBVEFfTEFORV8wID0gQklUKERTSV9MT0dJQ0FMX0xBTkVfMCks Ci0JRFNJX0RBVEFfTEFORV8xID0gQklUKERTSV9MT0dJQ0FMX0xBTkVfMSksCi0JRFNJX0RBVEFf TEFORV8yID0gQklUKERTSV9MT0dJQ0FMX0xBTkVfMiksCi0JRFNJX0RBVEFfTEFORV8zID0gQklU KERTSV9MT0dJQ0FMX0xBTkVfMyksCi0JRFNJX0NMT0NLX0xBTkUgID0gQklUKERTSV9MT0dJQ0FM X0NMT0NLX0xBTkUpCi19OwotCi0vKioKLSAqIGVudW0gZHNpX3BoeV9kYXRhX2xhbmVzIC0gZHNp IHBoeXNpY2FsIGxhbmVzCi0gKiB1c2VkIGZvciBEU0kgbG9naWNhbCB0byBwaHlzaWNhbCBsYW5l IG1hcHBpbmcKLSAqIEBEU0lfUEhZU0lDQUxfTEFORV9JTlZBTElEOiBQaHlzaWNhbCBsYW5lIHZh bGlkL2ludmFsaWQKLSAqIEBEU0lfUEhZU0lDQUxfTEFORV8wOiBQaHlzaWNhbCBsYW5lIDAKLSAq IEBEU0lfUEhZU0lDQUxfTEFORV8xOiBQaHlzaWNhbCBsYW5lIDEKLSAqIEBEU0lfUEhZU0lDQUxf TEFORV8yOiBQaHlzaWNhbCBsYW5lIDIKLSAqIEBEU0lfUEhZU0lDQUxfTEFORV8zOiBQaHlzaWNh bCBsYW5lIDMKLSAqLwotZW51bSBkc2lfcGh5X2RhdGFfbGFuZXMgewotCURTSV9QSFlTSUNBTF9M QU5FX0lOVkFMSUQgPSAwLAotCURTSV9QSFlTSUNBTF9MQU5FXzAgPSBCSVQoMCksCi0JRFNJX1BI WVNJQ0FMX0xBTkVfMSA9IEJJVCgxKSwKLQlEU0lfUEhZU0lDQUxfTEFORV8yID0gQklUKDIpLAot CURTSV9QSFlTSUNBTF9MQU5FXzMgID0gQklUKDMpCi19OwotCi1lbnVtIGRzaV9sYW5lX21hcF90 eXBlX3YxIHsKLQlEU0lfTEFORV9NQVBfMDEyMywKLQlEU0lfTEFORV9NQVBfMzAxMiwKLQlEU0lf TEFORV9NQVBfMjMwMSwKLQlEU0lfTEFORV9NQVBfMTIzMCwKLQlEU0lfTEFORV9NQVBfMDMyMSwK LQlEU0lfTEFORV9NQVBfMTAzMiwKLQlEU0lfTEFORV9NQVBfMjEwMywKLQlEU0lfTEFORV9NQVBf MzIxMCwKLX07Ci0KLS8qKgotICogbGFuZV9tYXA6IERTSSBsb2dpY2FsIDwtPiBwaHlzaWNhbCBs YW5lIG1hcHBpbmcKLSAqIGxhbmVfbWFwX3YxOiBMYW5lIG1hcHBpbmcgZm9yIERTSSBjb250cm9s bGVycyA8IHYyLjAKLSAqIGxhbmVfbWFwX3YyOiBMYW5lIG1hcHBpbmcgZm9yIERTSSBjb250cm9s bGVycyA+PSAyLjAKLSAqLwotc3RydWN0IGRzaV9sYW5lX21hcCB7Ci0JZW51bSBkc2lfbGFuZV9t YXBfdHlwZV92MSBsYW5lX21hcF92MTsKLQl1OCBsYW5lX21hcF92MltEU0lfTEFORV9NQVggLSAx XTsKLX07Ci0KLS8qKgotICogZW51bSBkc2lfdHJpZ2dlcl90eXBlIC0gZHNpIHRyaWdnZXIgdHlw ZQotICogQERTSV9UUklHR0VSX05PTkU6ICAgICBObyB0cmlnZ2VyLgotICogQERTSV9UUklHR0VS X1RFOiAgICAgICBURSB0cmlnZ2VyLgotICogQERTSV9UUklHR0VSX1NFT0Y6ICAgICBTdGFydCBv ciBFbmQgb2YgZnJhbWUuCi0gKiBARFNJX1RSSUdHRVJfU1c6ICAgICAgIFNvZnR3YXJlIHRyaWdn ZXIuCi0gKiBARFNJX1RSSUdHRVJfU1dfU0VPRjogIFNvZnR3YXJlIHRyaWdnZXIgYW5kIHN0YXJ0 L2VuZCBvZiBmcmFtZS4KLSAqIEBEU0lfVFJJR0dFUl9TV19URTogICAgU29mdHdhcmUgYW5kIFRF IHRyaWdnZXJzLgotICogQERTSV9UUklHR0VSX01BWDogICAgICBNYXggdHJpZ2dlciB2YWx1ZXMu Ci0gKi8KLWVudW0gZHNpX3RyaWdnZXJfdHlwZSB7Ci0JRFNJX1RSSUdHRVJfTk9ORSA9IDAsCi0J RFNJX1RSSUdHRVJfVEUsCi0JRFNJX1RSSUdHRVJfU0VPRiwKLQlEU0lfVFJJR0dFUl9TVywKLQlE U0lfVFJJR0dFUl9TV19TRU9GLAotCURTSV9UUklHR0VSX1NXX1RFLAotCURTSV9UUklHR0VSX01B WAotfTsKLQotLyoqCi0gKiBlbnVtIGRzaV9jb2xvcl9zd2FwX21vZGUgLSBjb2xvciBzd2FwIG1v ZGUKLSAqIEBEU0lfQ09MT1JfU1dBUF9SR0I6Ci0gKiBARFNJX0NPTE9SX1NXQVBfUkJHOgotICog QERTSV9DT0xPUl9TV0FQX0JHUjoKLSAqIEBEU0lfQ09MT1JfU1dBUF9CUkc6Ci0gKiBARFNJX0NP TE9SX1NXQVBfR1JCOgotICogQERTSV9DT0xPUl9TV0FQX0dCUjoKLSAqLwotZW51bSBkc2lfY29s b3Jfc3dhcF9tb2RlIHsKLQlEU0lfQ09MT1JfU1dBUF9SR0IgPSAwLAotCURTSV9DT0xPUl9TV0FQ X1JCRywKLQlEU0lfQ09MT1JfU1dBUF9CR1IsCi0JRFNJX0NPTE9SX1NXQVBfQlJHLAotCURTSV9D T0xPUl9TV0FQX0dSQiwKLQlEU0lfQ09MT1JfU1dBUF9HQlIKLX07Ci0KLS8qKgotICogZW51bSBk c2lfZGZwc190eXBlIC0gRHluYW1pYyBGUFMgc3VwcG9ydCB0eXBlCi0gKiBARFNJX0RGUFNfTk9O RTogICAgICAgICAgIER5bmFtaWMgRlBTIGlzIG5vdCBzdXBwb3J0ZWQuCi0gKiBARFNJX0RGUFNf U1VTUEVORF9SRVNVTUU6Ci0gKiBARFNJX0RGUFNfSU1NRURJQVRFX0NMSzoKLSAqIEBEU0lfREZQ U19JTU1FRElBVEVfSEZQOgotICogQERTSV9ERlBTX0lNTUVESUFURV9WRlA6Ci0gKiBARFNJX0RQ RlNfTUFYOgotICovCi1lbnVtIGRzaV9kZnBzX3R5cGUgewotCURTSV9ERlBTX05PTkUgPSAwLAot CURTSV9ERlBTX1NVU1BFTkRfUkVTVU1FLAotCURTSV9ERlBTX0lNTUVESUFURV9DTEssCi0JRFNJ X0RGUFNfSU1NRURJQVRFX0hGUCwKLQlEU0lfREZQU19JTU1FRElBVEVfVkZQLAotCURTSV9ERlBT X01BWAotfTsKLQotLyoqCi0gKiBlbnVtIGRzaV9jbWRfc2V0X3R5cGUgIC0gRFNJIGNvbW1hbmQg c2V0IHR5cGUKLSAqIEBEU0lfQ01EX1NFVF9QUkVfT046CSAgICAgICAgICAgICAgICAgICBQYW5l bCBwcmUgb24KLSAqIEBEU0lfQ01EX1NFVF9PTjogICAgICAgICAgICAgICAgICAgICAgICBQYW5l bCBvbgotICogQERTSV9DTURfU0VUX1BPU1RfT046ICAgICAgICAgICAgICAgICAgIFBhbmVsIHBv c3Qgb24KLSAqIEBEU0lfQ01EX1NFVF9QUkVfT0ZGOiAgICAgICAgICAgICAgICAgICBQYW5lbCBw cmUgb2ZmCi0gKiBARFNJX0NNRF9TRVRfT0ZGOiAgICAgICAgICAgICAgICAgICAgICAgUGFuZWwg b2ZmCi0gKiBARFNJX0NNRF9TRVRfUE9TVF9PRkY6ICAgICAgICAgICAgICAgICAgUGFuZWwgcG9z dCBvZmYKLSAqIEBEU0lfQ01EX1NFVF9QUkVfUkVTX1NXSVRDSDogICAgICAgICAgICBQcmUgcmVz b2x1dGlvbiBzd2l0Y2gKLSAqIEBEU0lfQ01EX1NFVF9SRVNfU1dJVENIOiAgICAgICAgICAgICAg ICBSZXNvbHV0aW9uIHN3aXRjaAotICogQERTSV9DTURfU0VUX1BPU1RfUkVTX1NXSVRDSDogICAg ICAgICAgIFBvc3QgcmVzb2x1dGlvbiBzd2l0Y2gKLSAqIEBEU0lfQ01EX1NFVF9DTURfVE9fVklE X1NXSVRDSDogICAgICAgICBDbWQgdG8gdmlkZW8gbW9kZSBzd2l0Y2gKLSAqIEBEU0lfQ01EX1NF VF9QT1NUX0NNRF9UT19WSURfU1dJVENIOiAgICBQb3N0IGNtZCB0byB2aWQgc3dpdGNoCi0gKiBA RFNJX0NNRF9TRVRfVklEX1RPX0NNRF9TV0lUQ0g6ICAgICAgICAgVmlkZW8gdG8gY21kIG1vZGUg c3dpdGNoCi0gKiBARFNJX0NNRF9TRVRfUE9TVF9WSURfVE9fQ01EX1NXSVRDSDogICAgUG9zdCB2 aWQgdG8gY21kIHN3aXRjaAotICogQERTSV9DTURfU0VUX1BBTkVMX1NUQVRVUzogICAgICAgICAg ICAgIFBhbmVsIHN0YXR1cwotICogQERTSV9DTURfU0VUX0xQMTogICAgICAgICAgICAgICAgICAg ICAgIExvdyBwb3dlciBtb2RlIDEKLSAqIEBEU0lfQ01EX1NFVF9MUDI6ICAgICAgICAgICAgICAg ICAgICAgICBMb3cgcG93ZXIgbW9kZSAyCi0gKiBARFNJX0NNRF9TRVRfTk9MUDogICAgICAgICAg ICAgICAgICAgICAgTG93IHBvd2VyIG1vZGUgZGlzYWJsZQotICogQERTSV9DTURfU0VUX1BQUzog ICAgICAgICAgICAgICAgICAgICAgIERTQyBQUFMgY29tbWFuZAotICogQERTSV9DTURfU0VUX1RJ TUlOR19TV0lUQ0g6ICAgICAgICAgICAgIFRpbWluZyBzd2l0Y2gKLSAqIEBEU0lfQ01EX1NFVF9Q T1NUX1RJTUlOR19TV0lUQ0g6ICAgICAgICBQb3N0IHRpbWluZyBzd2l0Y2gKLSAqIEBEU0lfQ01E X1NFVF9NQVgKLSAqLwotZW51bSBkc2lfY21kX3NldF90eXBlIHsKLQlEU0lfQ01EX1NFVF9QUkVf T04gPSAwLAotCURTSV9DTURfU0VUX09OLAotCURTSV9DTURfU0VUX1BPU1RfT04sCi0JRFNJX0NN RF9TRVRfUFJFX09GRiwKLQlEU0lfQ01EX1NFVF9PRkYsCi0JRFNJX0NNRF9TRVRfUE9TVF9PRkYs Ci0JRFNJX0NNRF9TRVRfUFJFX1JFU19TV0lUQ0gsCi0JRFNJX0NNRF9TRVRfUkVTX1NXSVRDSCwK LQlEU0lfQ01EX1NFVF9QT1NUX1JFU19TV0lUQ0gsCi0JRFNJX0NNRF9TRVRfQ01EX1RPX1ZJRF9T V0lUQ0gsCi0JRFNJX0NNRF9TRVRfUE9TVF9DTURfVE9fVklEX1NXSVRDSCwKLQlEU0lfQ01EX1NF VF9WSURfVE9fQ01EX1NXSVRDSCwKLQlEU0lfQ01EX1NFVF9QT1NUX1ZJRF9UT19DTURfU1dJVENI LAotCURTSV9DTURfU0VUX1BBTkVMX1NUQVRVUywKLQlEU0lfQ01EX1NFVF9MUDEsCi0JRFNJX0NN RF9TRVRfTFAyLAotCURTSV9DTURfU0VUX05PTFAsCi0JRFNJX0NNRF9TRVRfUFBTLAotCURTSV9D TURfU0VUX1RJTUlOR19TV0lUQ0gsCi0JRFNJX0NNRF9TRVRfUE9TVF9USU1JTkdfU1dJVENILAot CURTSV9DTURfU0VUX01BWAotfTsKLQotLyoqCi0gKiBlbnVtIGRzaV9jbWRfc2V0X3N0YXRlIC0g Y29tbWFuZCBzZXQgc3RhdGUKLSAqIEBEU0lfQ01EX1NFVF9TVEFURV9MUDogICBkc2kgbG93IHBv d2VyIG1vZGUKLSAqIEBEU0lfQ01EX1NFVF9TVEFURV9IUzogICBkc2kgaGlnaCBzcGVlZCBtb2Rl Ci0gKiBARFNJX0NNRF9TRVRfU1RBVEVfTUFYCi0gKi8KLWVudW0gZHNpX2NtZF9zZXRfc3RhdGUg ewotCURTSV9DTURfU0VUX1NUQVRFX0xQID0gMCwKLQlEU0lfQ01EX1NFVF9TVEFURV9IUywKLQlE U0lfQ01EX1NFVF9TVEFURV9NQVgKLX07Ci0KLS8qKgotICogZW51bSBkc2lfcGh5X3R5cGUgLSBE U0kgcGh5IHR5cGVzCi0gKiBARFNJX1BIWV9UWVBFX0RQSFk6Ci0gKiBARFNJX1BIWV9UWVBFX0NQ SFk6Ci0gKi8KLWVudW0gZHNpX3BoeV90eXBlIHsKLQlEU0lfUEhZX1RZUEVfRFBIWSwKLQlEU0lf UEhZX1RZUEVfQ1BIWQotfTsKLQotLyoqCi0gKiBlbnVtIGRzaV90ZV9tb2RlIC0gZHNpIHRlIHNv dXJjZQotICogQERTSV9URV9PTl9EQVRBX0xJTks6ICAgIFRFIHJlYWQgZnJvbSBEU0kgbGluawot ICogQERTSV9URV9PTl9FWFRfUElOOiAgICAgIFRFIHNpZ25hbCBvbiBhbiBleHRlcm5hbCBHUElP Ci0gKi8KLWVudW0gZHNpX3RlX21vZGUgewotCURTSV9URV9PTl9EQVRBX0xJTksgPSAwLAotCURT SV9URV9PTl9FWFRfUElOLAotfTsKLQotLyoqCi0gKiBlbnVtIGRzaV92aWRlb190cmFmZmljX21v ZGUgLSB2aWRlbyBtb2RlIHBpeGVsIHRyYW5zbWlzc2lvbiB0eXBlCi0gKiBARFNJX1ZJREVPX1RS QUZGSUNfU1lOQ19QVUxTRVM6ICAgICAgIE5vbi1idXJzdCBtb2RlIHdpdGggc3luYyBwdWxzZXMu Ci0gKiBARFNJX1ZJREVPX1RSQUZGSUNfU1lOQ19TVEFSVF9FVkVOVFM6IE5vbi1idXJzdCBtb2Rl IHdpdGggc3luYyBzdGFydCBldmVudHMuCi0gKiBARFNJX1ZJREVPX1RSQUZGSUNfQlVSU1RfTU9E RTogICAgICAgIEJ1cnN0IG1vZGUgdXNpbmcgc3luYyBzdGFydCBldmVudHMuCi0gKi8KLWVudW0g ZHNpX3ZpZGVvX3RyYWZmaWNfbW9kZSB7Ci0JRFNJX1ZJREVPX1RSQUZGSUNfU1lOQ19QVUxTRVMg PSAwLAotCURTSV9WSURFT19UUkFGRklDX1NZTkNfU1RBUlRfRVZFTlRTLAotCURTSV9WSURFT19U UkFGRklDX0JVUlNUX01PREUsCi19OwotCi0vKioKLSAqIHN0cnVjdCBkc2lfY21kX2Rlc2MgLSBk ZXNjcmlwdGlvbiBvZiBhIGRzaSBjb21tYW5kCi0gKiBAbXNnOgkJZHNpIG1pcGkgbXNnIHBhY2tl dAotICogQGxhc3RfY29tbWFuZDogICBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY21kIGlzIHRoZSBs YXN0IG9uZSB0byBzZW5kCi0gKiBAcG9zdF93YWl0X21zOiAgIHBvc3Qgd2FpdCBkdXJhdGlvbgot ICovCi1zdHJ1Y3QgZHNpX2NtZF9kZXNjIHsKLQlzdHJ1Y3QgbWlwaV9kc2lfbXNnIG1zZzsKLQli b29sIGxhc3RfY29tbWFuZDsKLQl1MzIgIHBvc3Rfd2FpdF9tczsKLX07Ci0KLS8qKgotICogc3Ry dWN0IGRzaV9wYW5lbF9jbWRfc2V0IC0gY29tbWFuZCBzZXQgb2YgdGhlIHBhbmVsCi0gKiBAdHlw ZTogICAgICB0eXBlIG9mIHRoZSBjb21tYW5kCi0gKiBAc3RhdGU6ICAgICBzdGF0ZSBvZiB0aGUg Y29tbWFuZAotICogQGNvdW50OiAgICAgbnVtYmVyIG9mIGNtZHMKLSAqIEBjdHJsX2lkeDogIGlu ZGV4IG9mIHRoZSBkc2kgY29udHJvbAotICogQGNtZHM6ICAgICAgYXJyeSBvZiBjbWRzCi0gKi8K LXN0cnVjdCBkc2lfcGFuZWxfY21kX3NldCB7Ci0JZW51bSBkc2lfY21kX3NldF90eXBlIHR5cGU7 Ci0JZW51bSBkc2lfY21kX3NldF9zdGF0ZSBzdGF0ZTsKLQl1MzIgY291bnQ7Ci0JdTMyIGN0cmxf aWR4OwotCXN0cnVjdCBkc2lfY21kX2Rlc2MgKmNtZHM7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBk c2lfbW9kZV9pbmZvIC0gdmlkZW8gbW9kZSBpbmZvcm1hdGlvbiBkc2kgZnJhbWUKLSAqIEBoX2Fj dGl2ZTogICAgICAgICBBY3RpdmUgd2lkdGggb2Ygb25lIGZyYW1lIGluIHBpeGVscy4KLSAqIEBo X2JhY2tfcG9yY2g6ICAgICBIb3Jpem9udGFsIGJhY2sgcG9yY2ggaW4gcGl4ZWxzLgotICogQGhf c3luY193aWR0aDogICAgIEhTWU5DIHdpZHRoIGluIHBpeGVscy4KLSAqIEBoX2Zyb250X3BvcmNo OiAgICBIb3Jpem9udGFsIGZyb24gcG9yY2ggaW4gcGl4ZWxzLgotICogQGhfc2tldzoKLSAqIEBo X3N5bmNfcG9sYXJpdHk6ICBQb2xhcml0eSBvZiBIU1lOQyAoZmFsc2UgaXMgYWN0aXZlIGxvdyku Ci0gKiBAdl9hY3RpdmU6ICAgICAgICAgQWN0aXZlIGhlaWdodCBvZiBvbmUgZnJhbWUgaW4gbGlu ZXMuCi0gKiBAdl9iYWNrX3BvcmNoOiAgICAgVmVydGljYWwgYmFjayBwb3JjaCBpbiBsaW5lcy4K LSAqIEB2X3N5bmNfd2lkdGg6ICAgICBWU1lOQyB3aWR0aCBpbiBsaW5lcy4KLSAqIEB2X2Zyb250 X3BvcmNoOiAgICBWZXJ0aWNhbCBmcm9udCBwb3JjaCBpbiBsaW5lcy4KLSAqIEB2X3N5bmNfcG9s YXJpdHk6ICBQb2xhcml0eSBvZiBWU1lOQyAoZmFsc2UgaXMgYWN0aXZlIGxvdykuCi0gKiBAcmVm cmVzaF9yYXRlOiAgICAgUmVmcmVzaCByYXRlIGluIEh6LgotICogQGRzY19lbmFibGVkOiAgICAg IERTQyBjb21wcmVzc2lvbiBlbmFibGVkLgotICogQGRzYzogICAgICAgICAgICAgIERTQyBjb21w cmVzc2lvbiBjb25maWd1cmF0aW9uLgotICovCi1zdHJ1Y3QgZHNpX21vZGVfaW5mbyB7Ci0JdTMy IGhfYWN0aXZlOwotCXUzMiBoX2JhY2tfcG9yY2g7Ci0JdTMyIGhfc3luY193aWR0aDsKLQl1MzIg aF9mcm9udF9wb3JjaDsKLQl1MzIgaF9za2V3OwotCWJvb2wgaF9zeW5jX3BvbGFyaXR5OwotCi0J dTMyIHZfYWN0aXZlOwotCXUzMiB2X2JhY2tfcG9yY2g7Ci0JdTMyIHZfc3luY193aWR0aDsKLQl1 MzIgdl9mcm9udF9wb3JjaDsKLQlib29sIHZfc3luY19wb2xhcml0eTsKLQotCXUzMiByZWZyZXNo X3JhdGU7Ci0KLQlib29sIGRzY19lbmFibGVkOwotCXN0cnVjdCBtc21fZGlzcGxheV9kc2NfaW5m byAqZHNjOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX2hvc3RfY29tbW9uX2NmZyAtIEhvc3Qg Y29uZmlndXJhdGlvbiBjb21tb24gdG8gdmlkZW8gYW5kIGNtZCBtb2RlCi0gKiBAZHN0X2Zvcm1h dDogICAgICAgICAgRGVzdGluYXRpb24gcGl4ZWwgZm9ybWF0LgotICogQGRhdGFfbGFuZXM6ICAg ICAgICAgIFBoeXNpY2FsIGRhdGEgbGFuZXMgdG8gYmUgZW5hYmxlZC4KLSAqIEBlbl9jcmNfY2hl Y2s6ICAgICAgICBFbmFibGUgQ1JDIGNoZWNrcy4KLSAqIEBlbl9lY2NfY2hlY2s6ICAgICAgICBF bmFibGUgRUNDIGNoZWNrcy4KLSAqIEB0ZV9tb2RlOiAgICAgICAgICAgICBTb3VyY2UgZm9yIFRF IHNpZ25hbGxpbmcuCi0gKiBAbWRwX2NtZF90cmlnZ2VyOiAgICAgTURQIGZyYW1lIHVwZGF0ZSB0 cmlnZ2VyIGZvciBjb21tYW5kIG1vZGUuCi0gKiBAZG1hX2NtZF90cmlnZ2VyOiAgICAgQ29tbWFu ZCBETUEgdHJpZ2dlci4KLSAqIEBjbWRfdHJpZ2dlcl9zdHJlYW06ICBDb21tYW5kIG1vZGUgc3Ry ZWFtIHRvIHRyaWdnZXIuCi0gKiBAc3dhcF9tb2RlOiAgICAgICAgICAgRFNJIGNvbG9yIHN3YXAg bW9kZS4KLSAqIEBiaXRfc3dhcF9yZWFkOiAgICAgICBJcyByZWQgY29sb3IgYml0IHN3YXBwZWQu Ci0gKiBAYml0X3N3YXBfZ3JlZW46ICAgICAgSXMgZ3JlZW4gY29sb3IgYml0IHN3YXBwZWQuCi0g KiBAYml0X3N3YXBfYmx1ZTogICAgICAgSXMgYmx1ZSBjb2xvciBiaXQgc3dhcHBlZC4KLSAqIEB0 X2Nsa19wb3N0OiAgICAgICAgICBOdW1iZXIgb2YgYnl0ZSBjbG9jayBjeWNsZXMgdGhhdCB0aGUg dHJhbnNtaXR0ZXIgc2hhbGwKLSAqICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBzZW5k aW5nIGFmdGVyIGxhc3QgZGF0YSBsYW5lIGhhcyB0cmFuc2l0aW9uZWQKLSAqICAgICAgICAgICAg ICAgICAgICAgICB0byBMUCBtb2RlLgotICogQHRfY2xrX3ByZTogICAgICAgICAgIE51bWJlciBv ZiBieXRlIGNsb2NrIGN5Y2xlcyB0aGF0IHRoZSBoaWdoIHNwcGVkIGNsb2NrCi0gKiAgICAgICAg ICAgICAgICAgICAgICAgc2hhbGwgYmUgZHJpdmVuIHByaW9yIHRvIGRhdGEgbGFuZSB0cmFuc2l0 aW9ucyBmcm9tIExQCi0gKiAgICAgICAgICAgICAgICAgICAgICAgdG8gSFMgbW9kZS4KLSAqIEBp Z25vcmVfcnhfZW90OiAgICAgICBJZ25vcmUgUnggRU9UIHBhY2tldHMgaWYgc2V0IHRvIHRydWUu Ci0gKiBAYXBwZW5kX3R4X2VvdDogICAgICAgQXBwZW5kIEVPVCBwYWNrZXRzIGZvciBmb3J3YXJk IHRyYW5zbWlzc2lvbnMgaWYgc2V0IHRvCi0gKiAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZS4K LSAqLwotc3RydWN0IGRzaV9ob3N0X2NvbW1vbl9jZmcgewotCWVudW0gZHNpX3BpeGVsX2Zvcm1h dCBkc3RfZm9ybWF0OwotCWVudW0gZHNpX2RhdGFfbGFuZXMgZGF0YV9sYW5lczsKLQlib29sIGVu X2NyY19jaGVjazsKLQlib29sIGVuX2VjY19jaGVjazsKLQllbnVtIGRzaV90ZV9tb2RlIHRlX21v ZGU7Ci0JZW51bSBkc2lfdHJpZ2dlcl90eXBlIG1kcF9jbWRfdHJpZ2dlcjsKLQllbnVtIGRzaV90 cmlnZ2VyX3R5cGUgZG1hX2NtZF90cmlnZ2VyOwotCXUzMiBjbWRfdHJpZ2dlcl9zdHJlYW07Ci0J ZW51bSBkc2lfY29sb3Jfc3dhcF9tb2RlIHN3YXBfbW9kZTsKLQlib29sIGJpdF9zd2FwX3JlZDsK LQlib29sIGJpdF9zd2FwX2dyZWVuOwotCWJvb2wgYml0X3N3YXBfYmx1ZTsKLQl1MzIgdF9jbGtf cG9zdDsKLQl1MzIgdF9jbGtfcHJlOwotCWJvb2wgaWdub3JlX3J4X2VvdDsKLQlib29sIGFwcGVu ZF90eF9lb3Q7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkc2lfdmlkZW9fZW5naW5lX2NmZyAtIERT SSB2aWRlbyBlbmdpbmUgY29uZmlndXJhdGlvbgotICogQGxhc3RfbGluZV9pbnRlcmxlYXZlX2Vu OiAgIEFsbG93IGNvbW1hbmQgbW9kZSBvcCBpbnRlcmxlYXZlZCBvbiBsYXN0IGxpbmUgb2YKLSAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlbyBzdHJlYW0uCi0gKiBAcHVsc2VfbW9k ZV9oc2FfaGU6ICAgICAgICAgU2VuZCBIU0EgYW5kIEhFIGZvbGxvd2luZyBWUy9WRSBwYWNrZXQg aWYgc2V0IHRvCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZS4KLSAqIEBoZnBf bHAxMV9lbjogICAgICAgICAgICAgICBFbnRlciBsb3cgcG93ZXIgc3RvcCBtb2RlIChMUC0xMSkg ZHVyaW5nIEhGUC4KLSAqIEBoYnBfbHAxMV9lbjogICAgICAgICAgICAgICBFbnRlciBsb3cgcG93 ZXIgc3RvcCBtb2RlIChMUC0xMSkgZHVyaW5nIEhCUC4KLSAqIEBoc2FfbHAxMV9lbjogICAgICAg ICAgICAgICBFbnRlciBsb3cgcG93ZXIgc3RvcCBtb2RlIChMUC0xMSkgZHVyaW5nIEhTQS4KLSAq IEBlb2ZfYmxscF9scDExX2VuOiAgICAgICAgICBFbnRlciBsb3cgcG93ZXIgc3RvcCBtb2RlIChM UC0xMSkgZHVyaW5nIEJMTFAgb2YKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0 IGxpbmUgb2YgYSBmcmFtZS4KLSAqIEBibGxwX2xwMTFfZW46ICAgICAgICAgICAgICBFbnRlciBs b3cgcG93ZXIgc3RvcCBtb2RlIChMUC0xMSkgZHVyaW5nIEJMTFAuCi0gKiBAdHJhZmZpY19tb2Rl OiAgICAgICAgICAgICAgVHJhZmZpYyBtb2RlIGZvciB2aWRlbyBzdHJlYW0uCi0gKiBAdmNfaWQ6 ICAgICAgICAgICAgICAgICAgICAgVmlydHVhbCBjaGFubmVsIGlkZW50aWZpZXIuCi0gKi8KLXN0 cnVjdCBkc2lfdmlkZW9fZW5naW5lX2NmZyB7Ci0JYm9vbCBsYXN0X2xpbmVfaW50ZXJsZWF2ZV9l bjsKLQlib29sIHB1bHNlX21vZGVfaHNhX2hlOwotCWJvb2wgaGZwX2xwMTFfZW47Ci0JYm9vbCBo YnBfbHAxMV9lbjsKLQlib29sIGhzYV9scDExX2VuOwotCWJvb2wgZW9mX2JsbHBfbHAxMV9lbjsK LQlib29sIGJsbHBfbHAxMV9lbjsKLQllbnVtIGRzaV92aWRlb190cmFmZmljX21vZGUgdHJhZmZp Y19tb2RlOwotCXUzMiB2Y19pZDsKLX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9jbWRfZW5naW5l X2NmZyAtIERTSSBjb21tYW5kIGVuZ2luZSBjb25maWd1cmF0aW9uCi0gKiBAbWF4X2NtZF9wYWNr ZXRzX2ludGVybGVhdmUgICAgIE1heGltdW0gbnVtYmVyIG9mIGNvbW1hbmQgbW9kZSBSR0IgcGFj a2V0cyB0bwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kIHdpdGggaW4g b25lIGhvcml6b250YWwgYmxhbmtpbmcgcGVyaW9kCi0gKiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG9mIHRoZSB2aWRlbyBtb2RlIGZyYW1lLgotICogQHdyX21lbV9zdGFydDogICAg ICAgICAgICAgICAgICBEQ1MgY29tbWFuZCBmb3Igd3JpdGVfbWVtb3J5X3N0YXJ0LgotICogQHdy X21lbV9jb250aW51ZTogICAgICAgICAgICAgICBEQ1MgY29tbWFuZCBmb3Igd3JpdGVfbWVtb3J5 X2NvbnRpbnVlLgotICogQGluc2VydF9kY3NfY29tbWFuZDogICAgICAgICAgICBJbnNlcnQgRENT IGNvbW1hbmQgYXMgZmlyc3QgYnl0ZSBvZiBwYXlsb2FkCi0gKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG9mIHRoZSBwaXhlbCBkYXRhLgotICogQG1kcF90cmFuc2Zlcl90aW1lX3Vz ICAgU3BlY2lmaWVzIHRoZSBtZHAgdHJhbnNmZXIgdGltZSBmb3IgY29tbWFuZCBtb2RlCi0gKiAg ICAgICAgICAgICAgICAgICAgICAgICBwYW5lbHMgaW4gbWljcm9zZWNvbmRzCi0gKi8KLXN0cnVj dCBkc2lfY21kX2VuZ2luZV9jZmcgewotCXUzMiBtYXhfY21kX3BhY2tldHNfaW50ZXJsZWF2ZTsK LQl1MzIgd3JfbWVtX3N0YXJ0OwotCXUzMiB3cl9tZW1fY29udGludWU7Ci0JYm9vbCBpbnNlcnRf ZGNzX2NvbW1hbmQ7Ci0JdTMyIG1kcF90cmFuc2Zlcl90aW1lX3VzOwotfTsKLQotLyoqCi0gKiBz dHJ1Y3QgZHNpX2hvc3RfY29uZmlnIC0gRFNJIGhvc3QgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJz LgotICogQHBhbmVsX21vZGU6ICAgICAgICAgICAgT3BlcmF0aW9uIG1vZGUgZm9yIHBhbmVsICh2 aWRlbyBvciBjbWQgbW9kZSkuCi0gKiBAY29tbW9uX2NvbmZpZzogICAgICAgICBIb3N0IGNvbmZp Z3VyYXRpb24gY29tbW9uIHRvIGJvdGggVmlkZW8gYW5kIENtZCBtb2RlLgotICogQHZpZGVvX2Vu Z2luZTogICAgICAgICAgVmlkZW8gZW5naW5lIGNvbmZpZ3VyYXRpb24gaWYgcGFuZWwgaXMgaW4g dmlkZW8gbW9kZS4KLSAqIEBjbWRfZW5naW5lOiAgICAgICAgICAgIENtZCBlbmdpbmUgY29uZmln dXJhdGlvbiBpZiBwYW5lbCBpcyBpbiBjbWQgbW9kZS4KLSAqIEBlc2NfY2xrX3JhdGVfa2h6OiAg ICAgIEVzYyBjbG9jayBmcmVxdWVuY3kgaW4gSHouCi0gKiBAYml0X2Nsa19yYXRlX2h6OiAgICAg ICBCaXQgY2xvY2sgZnJlcXVlbmN5IGluIEh6LgotICogQHZpZGVvX3RpbWluZzogICAgICAgICAg VmlkZW8gdGltaW5nIGluZm9ybWF0aW9uIG9mIGEgZnJhbWUuCi0gKiBAbGFuZV9tYXA6ICAgICAg ICAgICAgICBNYXBwaW5nIGJldHdlZW4gbG9naWNhbCBhbmQgcGh5c2ljYWwgbGFuZXMuCi0gKi8K LXN0cnVjdCBkc2lfaG9zdF9jb25maWcgewotCWVudW0gZHNpX29wX21vZGUgcGFuZWxfbW9kZTsK LQlzdHJ1Y3QgZHNpX2hvc3RfY29tbW9uX2NmZyBjb21tb25fY29uZmlnOwotCXVuaW9uIHsKLQkJ c3RydWN0IGRzaV92aWRlb19lbmdpbmVfY2ZnIHZpZGVvX2VuZ2luZTsKLQkJc3RydWN0IGRzaV9j bWRfZW5naW5lX2NmZyBjbWRfZW5naW5lOwotCX0gdTsKLQl1NjQgZXNjX2Nsa19yYXRlX2h6Owot CXU2NCBiaXRfY2xrX3JhdGVfaHo7Ci0Jc3RydWN0IGRzaV9tb2RlX2luZm8gdmlkZW9fdGltaW5n OwotCXN0cnVjdCBkc2lfbGFuZV9tYXAgbGFuZV9tYXA7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBk c2lfZGlzcGxheV9tb2RlX3ByaXZfaW5mbyAtIHByaXZhdGUgbW9kZSBpbmZvIHRoYXQgd2lsbCBi ZSBhdHRhY2hlZAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggZWFjaCBkcm0g bW9kZQotICogQGNtZF9zZXRzOgkJICBDb21tYW5kIHNldHMgb2YgdGhlIG1vZGUKLSAqIEBwaHlf dGltaW5nX3ZhbDogICAgICAgUGh5IHRpbWluZyB2YWx1ZXMKLSAqIEBwaHlfdGltaW5nX2xlbjog ICAgICAgUGh5IHRpbWluZyBhcnJheSBsZW5ndGgKLSAqIEBwYW5lbF9qaXR0ZXI6ICAgICAgICAg UGFuZWwgaml0dGVyIGZvciBSU0MgYmFja29mZgotICogQHBhbmVsX3ByZWZpbGxfbGluZXM6ICBQ YW5lbCBwcmVmaWxsIGxpbmVzIGZvciBSU0MKLSAqIEB0b3BvbG9neTogICAgICAgICAgICAgVG9w b2xvZ3kgc2VsZWN0ZWQgZm9yIHRoZSBwYW5lbAotICogQGRzYzogICAgICAgICAgICAgICAgICBE U0MgY29tcHJlc3Npb24gaW5mbwotICogQGRzY19lbmFibGVkOiAgICAgICAgICBEU0MgY29tcHJl c3Npb24gZW5hYmxlZAotICovCi1zdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZV9wcml2X2luZm8gewot CXN0cnVjdCBkc2lfcGFuZWxfY21kX3NldCBjbWRfc2V0c1tEU0lfQ01EX1NFVF9NQVhdOwotCi0J dTMyICpwaHlfdGltaW5nX3ZhbDsKLQl1MzIgcGh5X3RpbWluZ19sZW47Ci0KLQl1MzIgcGFuZWxf aml0dGVyX251bWVyOwotCXUzMiBwYW5lbF9qaXR0ZXJfZGVub207Ci0JdTMyIHBhbmVsX3ByZWZp bGxfbGluZXM7Ci0KLQlzdHJ1Y3QgbXNtX2Rpc3BsYXlfdG9wb2xvZ3kgdG9wb2xvZ3k7Ci0Jc3Ry dWN0IG1zbV9kaXNwbGF5X2RzY19pbmZvIGRzYzsKLQlib29sIGRzY19lbmFibGVkOwotfTsKLQot LyoqCi0gKiBzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAtIHNwZWNpZmllcyBtb2RlIGZvciBkc2kg ZGlzcGxheQotICogQHRpbWluZzogICAgICAgICBUaW1pbmcgcGFyYW1ldGVycyBmb3IgdGhlIHBh bmVsLgotICogQHBpeGVsX2Nsa19raHo6ICBQaXhlbCBjbG9jayBpbiBLaHouCi0gKiBAZHNpX21v ZGVfZmxhZ3M6IEZsYWdzIHRvIHNpZ25hbCBvdGhlciBkcm0gY29tcG9uZW50cyB2aWEgcHJpdmF0 ZSBmbGFncwotICogQHByaXZfaW5mbzogICAgICBNb2RlIHByaXZhdGUgaW5mbwotICovCi1zdHJ1 Y3QgZHNpX2Rpc3BsYXlfbW9kZSB7Ci0Jc3RydWN0IGRzaV9tb2RlX2luZm8gdGltaW5nOwotCXUz MiBwaXhlbF9jbGtfa2h6OwotCXUzMiBkc2lfbW9kZV9mbGFnczsKLQlzdHJ1Y3QgZHNpX2Rpc3Bs YXlfbW9kZV9wcml2X2luZm8gKnByaXZfaW5mbzsKLX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9y ZWN0IC0gZHNpIHJlY3RhbmdsZSByZXByZXNlbnRhdGlvbgotICogTm90ZTogZHB1X3JlY3QgaXMg YWxzbyB1c2luZyB1MTYsIHRoaXMgbXVzdCBiZSBtYWludGFpbmVkIGZvciBtZW1jcHkKLSAqLwot c3RydWN0IGRzaV9yZWN0IHsKLQl1MTYgeDsKLQl1MTYgeTsKLQl1MTYgdzsKLQl1MTYgaDsKLX07 Ci0KLS8qKgotICogZHNpX3JlY3RfaW50ZXJzZWN0IC0gaW50ZXJzZWN0IHR3byByZWN0YW5nbGVz Ci0gKiBAcjE6IGZpcnN0IHJlY3RhbmdsZQotICogQHIyOiBzY2lzc29yIHJlY3RhbmdsZQotICog QHJlc3VsdDogcmVzdWx0IHJlY3RhbmdsZSwgYWxsIDAncyBvbiBubyBpbnRlcnNlY3Rpb24gZm91 bmQKLSAqLwotdm9pZCBkc2lfcmVjdF9pbnRlcnNlY3QoY29uc3Qgc3RydWN0IGRzaV9yZWN0ICpy MSwKLQkJY29uc3Qgc3RydWN0IGRzaV9yZWN0ICpyMiwKLQkJc3RydWN0IGRzaV9yZWN0ICpyZXN1 bHQpOwotCi0vKioKLSAqIGRzaV9yZWN0X2lzX2VxdWFsIC0gY29tcGFyZXMgdHdvIHJlY3RzCi0g KiBAcjE6IHJlY3QgdmFsdWUgdG8gY29tcGFyZQotICogQHIyOiByZWN0IHZhbHVlIHRvIGNvbXBh cmUKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlY3RzIGFyZSBzYW1lCi0gKi8KLXN0YXRp YyBpbmxpbmUgYm9vbCBkc2lfcmVjdF9pc19lcXVhbChzdHJ1Y3QgZHNpX3JlY3QgKnIxLAotCQlz dHJ1Y3QgZHNpX3JlY3QgKnIyKQotewotCXJldHVybiByMS0+eCA9PSByMi0+eCAmJiByMS0+eSA9 PSByMi0+eSAmJiByMS0+dyA9PSByMi0+dyAmJgotCQkJcjEtPmggPT0gcjItPmg7Ci19Ci0KLXN0 cnVjdCBkc2lfZXZlbnRfY2JfaW5mbyB7Ci0JdWludDMyX3QgZXZlbnRfaWR4OwotCXZvaWQgKmV2 ZW50X3Vzcl9wdHI7Ci0KLQlpbnQgKCpldmVudF9jYikodm9pZCAqZXZlbnRfdXNyX3B0ciwKLQkJ dWludDMyX3QgZXZlbnRfaWR4LCB1aW50MzJfdCBpbnN0YW5jZV9pZHgsCi0JCXVpbnQzMl90IGRh dGEwLCB1aW50MzJfdCBkYXRhMSwKLQkJdWludDMyX3QgZGF0YTIsIHVpbnQzMl90IGRhdGEzKTsK LX07Ci0KLSNlbmRpZiAvKiBfRFNJX0RFRlNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHNpLXN0YWdpbmcvZHNpX2Rpc3BsYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MzFiN2Q3ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2Rz aV9kaXNwbGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MjIxICswLDAgQEAKLS8qCi0gKiBDb3B5 cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9u IDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KQkibXNtLWRz aS1kaXNwbGF5Olslc10gIiBmbXQsIF9fZnVuY19fCi0KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+ Ci0jaW5jbHVkZSA8bGludXgvb2YuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLQotI2luY2x1 ZGUgIm1zbV9kcnYuaCIKLSNpbmNsdWRlICJkcHVfY29ubmVjdG9yLmgiCi0jaW5jbHVkZSAibXNt X21tdS5oIgotI2luY2x1ZGUgImRzaV9kaXNwbGF5LmgiCi0jaW5jbHVkZSAiZHNpX3BhbmVsLmgi Ci0jaW5jbHVkZSAiZHNpX2N0cmwuaCIKLSNpbmNsdWRlICJkc2lfY3RybF9ody5oIgotI2luY2x1 ZGUgImRzaV9kcm0uaCIKLSNpbmNsdWRlICJkc2lfY2xrLmgiCi0jaW5jbHVkZSAiZHNpX3B3ci5o IgotI2luY2x1ZGUgImRwdV9kYmcuaCIKLQotI2RlZmluZSB0b19kc2lfZGlzcGxheSh4KSBjb250 YWluZXJfb2YoeCwgc3RydWN0IGRzaV9kaXNwbGF5LCBob3N0KQotI2RlZmluZSBJTlRfQkFTRV8x MCAxMAotI2RlZmluZSBOT19PVkVSUklERSAtMQotCi0jZGVmaW5lIE1JU1JfQlVGRl9TSVpFCTI1 NgotCi1zdGF0aWMgREVGSU5FX01VVEVYKGRzaV9kaXNwbGF5X2xpc3RfbG9jayk7Ci1zdGF0aWMg TElTVF9IRUFEKGRzaV9kaXNwbGF5X2xpc3QpOwotc3RhdGljIGNoYXIgZHNpX2Rpc3BsYXlfcHJp bWFyeVtNQVhfQ01ETElORV9QQVJBTV9MRU5dOwotc3RhdGljIGNoYXIgZHNpX2Rpc3BsYXlfc2Vj b25kYXJ5W01BWF9DTURMSU5FX1BBUkFNX0xFTl07Ci1zdGF0aWMgc3RydWN0IGRzaV9kaXNwbGF5 X2Jvb3RfcGFyYW0gYm9vdF9kaXNwbGF5c1tNQVhfRFNJX0FDVElWRV9ESVNQTEFZXTsKLXN0YXRp YyBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRlZmF1bHRfYWN0aXZlX25vZGU7Ci1zdGF0aWMgY29uc3Qg c3RydWN0IG9mX2RldmljZV9pZCBkc2lfZGlzcGxheV9kdF9tYXRjaFtdID0gewotCXsuY29tcGF0 aWJsZSA9ICJxY29tLGRzaS1kaXNwbGF5In0sCi0Je30KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZHNp X2Rpc3BsYXkgKm1haW5fZGlzcGxheTsKLQotdm9pZCBkc2lfcmVjdF9pbnRlcnNlY3QoY29uc3Qg c3RydWN0IGRzaV9yZWN0ICpyMSwKLQkJY29uc3Qgc3RydWN0IGRzaV9yZWN0ICpyMiwKLQkJc3Ry dWN0IGRzaV9yZWN0ICpyZXN1bHQpCi17Ci0JaW50IGwsIHQsIHIsIGI7Ci0KLQlpZiAoIXIxIHx8 ICFyMiB8fCAhcmVzdWx0KQotCQlyZXR1cm47Ci0KLQlsID0gbWF4KHIxLT54LCByMi0+eCk7Ci0J dCA9IG1heChyMS0+eSwgcjItPnkpOwotCXIgPSBtaW4oKHIxLT54ICsgcjEtPncpLCAocjItPngg KyByMi0+dykpOwotCWIgPSBtaW4oKHIxLT55ICsgcjEtPmgpLCAocjItPnkgKyByMi0+aCkpOwot Ci0JaWYgKHIgPD0gbCB8fCBiIDw9IHQpIHsKLQkJbWVtc2V0KHJlc3VsdCwgMCwgc2l6ZW9mKCpy ZXN1bHQpKTsKLQl9IGVsc2UgewotCQlyZXN1bHQtPnggPSBsOwotCQlyZXN1bHQtPnkgPSB0Owot CQlyZXN1bHQtPncgPSByIC0gbDsKLQkJcmVzdWx0LT5oID0gYiAtIHQ7Ci0JfQotfQotCi1pbnQg ZHNpX2Rpc3BsYXlfc2V0X2JhY2tsaWdodCh2b2lkICpkaXNwbGF5LCB1MzIgYmxfbHZsKQotewot CXN0cnVjdCBkc2lfZGlzcGxheSAqZHNpX2Rpc3BsYXkgPSBkaXNwbGF5OwotCXN0cnVjdCBkc2lf cGFuZWwgKnBhbmVsOwotCXUzMiBibF9zY2FsZSwgYmxfc2NhbGVfYWQ7Ci0JdTY0IGJsX3RlbXA7 Ci0JaW50IHJjID0gMDsKLQotCWlmIChkc2lfZGlzcGxheSA9PSBOVUxMIHx8IGRzaV9kaXNwbGF5 LT5wYW5lbCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXBhbmVsID0gZHNpX2Rpc3Bs YXktPnBhbmVsOwotCi0JaWYgKCFkc2lfcGFuZWxfaW5pdGlhbGl6ZWQocGFuZWwpKQotCQlyZXR1 cm4gLUVJTlZBTDsKLQotCXBhbmVsLT5ibF9jb25maWcuYmxfbGV2ZWwgPSBibF9sdmw7Ci0KLQkv KiBzY2FsZSBiYWNrbGlnaHQgKi8KLQlibF9zY2FsZSA9IHBhbmVsLT5ibF9jb25maWcuYmxfc2Nh bGU7Ci0JYmxfdGVtcCA9IGJsX2x2bCAqIGJsX3NjYWxlIC8gTUFYX0JMX1NDQUxFX0xFVkVMOwot Ci0JYmxfc2NhbGVfYWQgPSBwYW5lbC0+YmxfY29uZmlnLmJsX3NjYWxlX2FkOwotCWJsX3RlbXAg PSAodTMyKWJsX3RlbXAgKiBibF9zY2FsZV9hZCAvIE1BWF9BRF9CTF9TQ0FMRV9MRVZFTDsKLQot CXByX2RlYnVnKCJibF9zY2FsZSA9ICV1LCBibF9zY2FsZV9hZCA9ICV1LCBibF9sdmwgPSAldVxu IiwKLQkJYmxfc2NhbGUsIGJsX3NjYWxlX2FkLCAodTMyKWJsX3RlbXApOwotCi0JcmMgPSBkc2lf ZGlzcGxheV9jbGtfY3RybChkc2lfZGlzcGxheS0+ZHNpX2Nsa19oYW5kbGUsCi0JCQlEU0lfQ09S RV9DTEssIERTSV9DTEtfT04pOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRv IGVuYWJsZSBEU0kgY29yZSBjbG9ja3MsIHJjPSVkXG4iLAotCQkgICAgICAgZHNpX2Rpc3BsYXkt Pm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF9zZXRfYmFj a2xpZ2h0KHBhbmVsLCAodTMyKWJsX3RlbXApOwotCWlmIChyYykKLQkJcHJfZXJyKCJ1bmFibGUg dG8gc2V0IGJhY2tsaWdodFxuIik7Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2Nsa19jdHJsKGRzaV9k aXNwbGF5LT5kc2lfY2xrX2hhbmRsZSwKLQkJCURTSV9DT1JFX0NMSywgRFNJX0NMS19PRkYpOwot CWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGRpc2FibGUgRFNJIGNvcmUgY2xv Y2tzLCByYz0lZFxuIiwKLQkJICAgICAgIGRzaV9kaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8g ZXJyb3I7Ci0JfQotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfZGlzcGxheV9z b2Z0X3Jlc2V0KHZvaWQgKmRpc3BsYXkpCi17Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkc2lfZGlz cGxheTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqY3RybDsKLQlpbnQgcmMgPSAwOwotCWlu dCBpOwotCi0JaWYgKCFkaXNwbGF5KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRzaV9kaXNwbGF5 ID0gZGlzcGxheTsKLQotCWZvciAoaSA9IDAgOyBpIDwgZHNpX2Rpc3BsYXktPmN0cmxfY291bnQ7 IGkrKykgewotCQljdHJsID0gJmRzaV9kaXNwbGF5LT5jdHJsW2ldOwotCQlyYyA9IGRzaV9jdHJs X3NvZnRfcmVzZXQoY3RybC0+Y3RybCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZh aWxlZCB0byBzb2Z0IHJlc2V0IGhvc3RfJWQsIHJjPSVkXG4iLAotCQkJCQlkc2lfZGlzcGxheS0+ bmFtZSwgaSwgcmMpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLWVu dW0gZHNpX3BpeGVsX2Zvcm1hdCBkc2lfZGlzcGxheV9nZXRfZHN0X2Zvcm1hdCh2b2lkICpkaXNw bGF5KQotewotCWVudW0gZHNpX3BpeGVsX2Zvcm1hdCBmb3JtYXQgPSBEU0lfUElYRUxfRk9STUFU X01BWDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRzaV9kaXNwbGF5ID0gKHN0cnVjdCBkc2lfZGlz cGxheSAqKWRpc3BsYXk7Ci0KLQlpZiAoIWRzaV9kaXNwbGF5IHx8ICFkc2lfZGlzcGxheS0+cGFu ZWwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtcyhzKSBkc2lfZGlzcGxheSAlcEssIHBhbmVs ICVwS1xuIiwKLQkJCWRzaV9kaXNwbGF5LAotCQkJKChkc2lfZGlzcGxheSkgPyBkc2lfZGlzcGxh eS0+cGFuZWwgOiBOVUxMKSk7Ci0JCXJldHVybiBmb3JtYXQ7Ci0JfQotCi0JZm9ybWF0ID0gZHNp X2Rpc3BsYXktPnBhbmVsLT5ob3N0X2NvbmZpZy5kc3RfZm9ybWF0OwotCXJldHVybiBmb3JtYXQ7 Ci19Ci0KLXN0YXRpYyB2b2lkIF9kc2lfZGlzcGxheV9zZXR1cF9taXNyKHN0cnVjdCBkc2lfZGlz cGxheSAqZGlzcGxheSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5j dHJsX2NvdW50OyBpKyspIHsKLQkJZHNpX2N0cmxfc2V0dXBfbWlzcihkaXNwbGF5LT5jdHJsW2ld LmN0cmwsCi0JCQkJZGlzcGxheS0+bWlzcl9lbmFibGUsCi0JCQkJZGlzcGxheS0+bWlzcl9mcmFt ZV9jb3VudCk7Ci0JfQotfQotCi1pbnQgZHNpX2Rpc3BsYXlfc2V0X3Bvd2VyKHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IsCi0JCWludCBwb3dlcl9tb2RlLCB2b2lkICpkaXNwKQotewot CXN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSA9IGRpc3A7Ci0JaW50IHJjID0gMDsKLQotCWlm ICghZGlzcGxheSB8fCAhZGlzcGxheS0+cGFuZWwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGRpc3Bs YXkvcGFuZWxcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzd2l0Y2ggKHBvd2VyX21v ZGUpIHsKLQljYXNlIERQVV9NT0RFX0RQTVNfTFAxOgotCQlyYyA9IGRzaV9wYW5lbF9zZXRfbHAx KGRpc3BsYXktPnBhbmVsKTsKLQkJYnJlYWs7Ci0JY2FzZSBEUFVfTU9ERV9EUE1TX0xQMjoKLQkJ cmMgPSBkc2lfcGFuZWxfc2V0X2xwMihkaXNwbGF5LT5wYW5lbCk7Ci0JCWJyZWFrOwotCWRlZmF1 bHQ6Ci0JCXJjID0gZHNpX3BhbmVsX3NldF9ub2xwKGRpc3BsYXktPnBhbmVsKTsKLQkJYnJlYWs7 Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHNzaXplX3QgZGVidWdmc19kdW1wX2luZm9f cmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkgICAgICBjaGFyIF9fdXNlciAqdXNlcl9idWYs Ci0JCQkJICAgICAgc2l6ZV90IHVzZXJfbGVuLAotCQkJCSAgICAgIGxvZmZfdCAqcHBvcykKLXsK LQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hh ciAqYnVmOwotCXUzMiBsZW4gPSAwOwotCWludCBpOwotCi0JaWYgKCFkaXNwbGF5KQotCQlyZXR1 cm4gLUVOT0RFVjsKLQotCWlmICgqcHBvcykKLQkJcmV0dXJuIDA7Ci0KLQlidWYgPSBremFsbG9j KFNaXzRLLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQls ZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCAoU1pfNEsgLSBsZW4pLCAibmFtZSA9ICVzXG4iLCBk aXNwbGF5LT5uYW1lKTsKLQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCAoU1pfNEsgLSBsZW4p LAotCQkJIlx0UmVzb2x1dGlvbiA9ICVkeCVkXG4iLAotCQkJZGlzcGxheS0+Y29uZmlnLnZpZGVv X3RpbWluZy5oX2FjdGl2ZSwKLQkJCWRpc3BsYXktPmNvbmZpZy52aWRlb190aW1pbmcudl9hY3Rp dmUpOwotCi0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQls ZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCAoU1pfNEsgLSBsZW4pLAotCQkJCSJcdENUUkxfJWQ6 XG5cdFx0Y3RybCA9ICVzXG5cdFx0cGh5ID0gJXNcbiIsCi0JCQkJaSwgZGlzcGxheS0+Y3RybFtp XS5jdHJsLT5uYW1lLAotCQkJCWRpc3BsYXktPmN0cmxbaV0ucGh5LT5uYW1lKTsKLQl9Ci0KLQls ZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCAoU1pfNEsgLSBsZW4pLAotCQkJIlx0UGFuZWwgPSAl c1xuIiwgZGlzcGxheS0+cGFuZWwtPm5hbWUpOwotCi0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxl biwgKFNaXzRLIC0gbGVuKSwKLQkJCSJcdENsb2NrIG1hc3RlciA9ICVzXG4iLAotCQkJZGlzcGxh eS0+Y3RybFtkaXNwbGF5LT5jbGtfbWFzdGVyX2lkeF0uY3RybC0+bmFtZSk7Ci0KLQlpZiAoY29w eV90b191c2VyKHVzZXJfYnVmLCBidWYsIGxlbikpIHsKLQkJa2ZyZWUoYnVmKTsKLQkJcmV0dXJu IC1FRkFVTFQ7Ci0JfQotCi0JKnBwb3MgKz0gbGVuOwotCi0Ja2ZyZWUoYnVmKTsKLQlyZXR1cm4g bGVuOwotfQotCi1zdGF0aWMgc3NpemVfdCBkZWJ1Z2ZzX21pc3Jfc2V0dXAoc3RydWN0IGZpbGUg KmZpbGUsCi0JCQkJICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJICBzaXplX3Qg dXNlcl9sZW4sCi0JCQkJICBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpk aXNwbGF5ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgKmJ1ZjsKLQlpbnQgcmMgPSAwOwot CXNpemVfdCBsZW47Ci0JdTMyIGVuYWJsZSwgZnJhbWVfY291bnQ7Ci0KLQlpZiAoIWRpc3BsYXkp Ci0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKCpwcG9zKQotCQlyZXR1cm4gMDsKLQotCWJ1ZiA9 IGt6YWxsb2MoTUlTUl9CVUZGX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghYnVmKQotCQlyZXR1 cm4gLUVOT01FTTsKLQotCS8qIGxlYXZlIHJvb20gZm9yIHRlcm1pbmF0aW9uIGNoYXIgKi8KLQls ZW4gPSBtaW5fdChzaXplX3QsIHVzZXJfbGVuLCBNSVNSX0JVRkZfU0laRSAtIDEpOwotCWlmIChj b3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBsZW4pKSB7Ci0JCXJjID0gLUVJTlZBTDsKLQkJ Z290byBlcnJvcjsKLQl9Ci0KLQlidWZbbGVuXSA9ICdcMCc7IC8qIHRlcm1pbmF0ZSB0aGUgc3Ry aW5nICovCi0KLQlpZiAoc3NjYW5mKGJ1ZiwgIiV1ICV1IiwgJmVuYWJsZSwgJmZyYW1lX2NvdW50 KSAhPSAyKSB7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlkaXNwbGF5 LT5taXNyX2VuYWJsZSA9IGVuYWJsZTsKLQlkaXNwbGF5LT5taXNyX2ZyYW1lX2NvdW50ID0gZnJh bWVfY291bnQ7Ci0KLQltdXRleF9sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCXJjID0g ZHNpX2Rpc3BsYXlfY2xrX2N0cmwoZGlzcGxheS0+ZHNpX2Nsa19oYW5kbGUsCi0JCQlEU0lfQ09S RV9DTEssIERTSV9DTEtfT04pOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRv IGVuYWJsZSBEU0kgY29yZSBjbG9ja3MsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFt ZSwgcmMpOwotCQlnb3RvIHVubG9jazsKLQl9Ci0KLQlfZHNpX2Rpc3BsYXlfc2V0dXBfbWlzcihk aXNwbGF5KTsKLQotCXJjID0gZHNpX2Rpc3BsYXlfY2xrX2N0cmwoZGlzcGxheS0+ZHNpX2Nsa19o YW5kbGUsCi0JCQlEU0lfQ09SRV9DTEssIERTSV9DTEtfT0ZGKTsKLQlpZiAocmMpIHsKLQkJcHJf ZXJyKCJbJXNdIGZhaWxlZCB0byBkaXNhYmxlIERTSSBjb3JlIGNsb2NrcywgcmM9JWRcbiIsCi0J CSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gdW5sb2NrOwotCX0KLQotCXJjID0g dXNlcl9sZW47Ci11bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2sp OwotZXJyb3I6Ci0Ja2ZyZWUoYnVmKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90 IGRlYnVnZnNfbWlzcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCSBjaGFyIF9fdXNlciAq dXNlcl9idWYsCi0JCQkJIHNpemVfdCB1c2VyX2xlbiwKLQkJCQkgbG9mZl90ICpwcG9zKQotewot CXN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQljaGFy ICpidWY7Ci0JdTMyIGxlbiA9IDA7Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2N0cmwgKmRz aV9jdHJsOwotCWludCBpOwotCXUzMiBtaXNyOwotCXNpemVfdCBtYXhfbGVuID0gbWluX3Qoc2l6 ZV90LCB1c2VyX2xlbiwgTUlTUl9CVUZGX1NJWkUpOwotCi0JaWYgKCFkaXNwbGF5KQotCQlyZXR1 cm4gLUVOT0RFVjsKLQotCWlmICgqcHBvcykKLQkJcmV0dXJuIDA7Ci0KLQlidWYgPSBremFsbG9j KG1heF9sZW4sIEdGUF9LRVJORUwpOwotCWlmICghYnVmKQotCQlyZXR1cm4gLUVOT01FTTsKLQot CW11dGV4X2xvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0JcmMgPSBkc2lfZGlzcGxheV9j bGtfY3RybChkaXNwbGF5LT5kc2lfY2xrX2hhbmRsZSwKLQkJCURTSV9DT1JFX0NMSywgRFNJX0NM S19PTik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZW5hYmxlIERTSSBj b3JlIGNsb2NrcywgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdv dG8gZXJyb3I7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkr KykgewotCQlkc2lfY3RybCA9IGRpc3BsYXktPmN0cmxbaV0uY3RybDsKLQkJbWlzciA9IGRzaV9j dHJsX2NvbGxlY3RfbWlzcihkaXNwbGF5LT5jdHJsW2ldLmN0cmwpOwotCi0JCWxlbiArPSBzbnBy aW50ZigoYnVmICsgbGVuKSwgbWF4X2xlbiAtIGxlbiwKLQkJCSJEU0lfJWQgTUlTUjogMHgleFxu IiwgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIG1pc3IpOwotCi0JCWlmIChsZW4gPj0gbWF4X2xlbikK LQkJCWJyZWFrOwotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlfY2xrX2N0cmwoZGlzcGxheS0+ZHNp X2Nsa19oYW5kbGUsCi0JCQlEU0lfQ09SRV9DTEssIERTSV9DTEtfT0ZGKTsKLQlpZiAocmMpIHsK LQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBkaXNhYmxlIERTSSBjb3JlIGNsb2NrcywgcmM9JWRc biIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0J aWYgKGNvcHlfdG9fdXNlcih1c2VyX2J1ZiwgYnVmLCBsZW4pKSB7Ci0JCXJjID0gLUVGQVVMVDsK LQkJZ290byBlcnJvcjsKLQl9Ci0KLQkqcHBvcyArPSBsZW47Ci0KLWVycm9yOgotCW11dGV4X3Vu bG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQlrZnJlZShidWYpOwotCXJldHVybiBsZW47 Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR1bXBfaW5mb19mb3Bz ID0gewotCS5vcGVuID0gc2ltcGxlX29wZW4sCi0JLnJlYWQgPSBkZWJ1Z2ZzX2R1bXBfaW5mb19y ZWFkLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWlzcl9kYXRh X2ZvcHMgPSB7Ci0JLm9wZW4gPSBzaW1wbGVfb3BlbiwKLQkucmVhZCA9IGRlYnVnZnNfbWlzcl9y ZWFkLAotCS53cml0ZSA9IGRlYnVnZnNfbWlzcl9zZXR1cCwKLX07Ci0KLXN0YXRpYyBpbnQgZHNp X2Rpc3BsYXlfZGVidWdmc19pbml0KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlp bnQgcmMgPSAwOwotCXN0cnVjdCBkZW50cnkgKmRpciwgKmR1bXBfZmlsZSwgKm1pc3JfZGF0YTsK LQotCWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihkaXNwbGF5LT5uYW1lLCBOVUxMKTsKLQlpZiAo SVNfRVJSX09SX05VTEwoZGlyKSkgewotCQlyYyA9IFBUUl9FUlIoZGlyKTsKLQkJcHJfZXJyKCJb JXNdIGRlYnVnZnMgY3JlYXRlIGRpciBmYWlsZWQsIHJjID0gJWRcbiIsCi0JCSAgICAgICBkaXNw bGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZHVtcF9maWxlID0gZGVidWdm c19jcmVhdGVfZmlsZSgiZHVtcF9pbmZvIiwKLQkJCQkJMDQwMCwKLQkJCQkJZGlyLAotCQkJCQlk aXNwbGF5LAotCQkJCQkmZHVtcF9pbmZvX2ZvcHMpOwotCWlmIChJU19FUlJfT1JfTlVMTChkdW1w X2ZpbGUpKSB7Ci0JCXJjID0gUFRSX0VSUihkdW1wX2ZpbGUpOwotCQlwcl9lcnIoIlslc10gZGVi dWdmcyBjcmVhdGUgZHVtcCBpbmZvIGZpbGUgZmFpbGVkLCByYz0lZFxuIiwKLQkJICAgICAgIGRp c3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcl9yZW1vdmVfZGlyOwotCX0KLQotCW1pc3Jf ZGF0YSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoIm1pc3JfZGF0YSIsCi0JCQkJCTA2MDAsCi0JCQkJ CWRpciwKLQkJCQkJZGlzcGxheSwKLQkJCQkJJm1pc3JfZGF0YV9mb3BzKTsKLQlpZiAoSVNfRVJS X09SX05VTEwobWlzcl9kYXRhKSkgewotCQlyYyA9IFBUUl9FUlIobWlzcl9kYXRhKTsKLQkJcHJf ZXJyKCJbJXNdIGRlYnVnZnMgY3JlYXRlIG1pc3IgZGF0YWZpbGUgZmFpbGVkLCByYz0lZFxuIiwK LQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcl9yZW1vdmVfZGlyOwot CX0KLQotCWRpc3BsYXktPnJvb3QgPSBkaXI7Ci0JcmV0dXJuIHJjOwotZXJyb3JfcmVtb3ZlX2Rp cjoKLQlkZWJ1Z2ZzX3JlbW92ZShkaXIpOwotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0 aWMgaW50IGRzaV9kaXNwbGF5X2RlYnVnZnNfZGVpbml0KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlz cGxheSkKLXsKLQlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZGlzcGxheS0+cm9vdCk7Ci0KLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYWRqdXN0X3RpbWluZ19ieV9jdHJsX2NvdW50KGNv bnN0IHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwKLQkJCQkJc3RydWN0IGRzaV9kaXNwbGF5 X21vZGUgKm1vZGUpCi17Ci0JaWYgKGRpc3BsYXktPmN0cmxfY291bnQgPiAxKSB7Ci0JCW1vZGUt PnRpbWluZy5oX2FjdGl2ZSAvPSBkaXNwbGF5LT5jdHJsX2NvdW50OwotCQltb2RlLT50aW1pbmcu aF9mcm9udF9wb3JjaCAvPSBkaXNwbGF5LT5jdHJsX2NvdW50OwotCQltb2RlLT50aW1pbmcuaF9z eW5jX3dpZHRoIC89IGRpc3BsYXktPmN0cmxfY291bnQ7Ci0JCW1vZGUtPnRpbWluZy5oX2JhY2tf cG9yY2ggLz0gZGlzcGxheS0+Y3RybF9jb3VudDsKLQkJbW9kZS0+dGltaW5nLmhfc2tldyAvPSBk aXNwbGF5LT5jdHJsX2NvdW50OwotCQltb2RlLT5waXhlbF9jbGtfa2h6IC89IGRpc3BsYXktPmN0 cmxfY291bnQ7Ci0JfQotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X2lzX3VscHNfcmVxX3Zh bGlkKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwKLQkJYm9vbCBlbmFibGUpCi17Ci0JLyog VE9ETzogbWFrZSBjaGVja3MgYmFzZWQgb24gY29udC4gc3BsYXNoICovCi0JaW50IHNwbGFzaF9l bmFibGVkID0gZmFsc2U7Ci0KLQlwcl9kZWJ1ZygiY2hlY2tpbmcgdWxwcyByZXEgdmFsaWRpdHlc biIpOwotCi0JaWYgKCFkc2lfcGFuZWxfdWxwc19mZWF0dXJlX2VuYWJsZWQoZGlzcGxheS0+cGFu ZWwpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQkvKiBUT0RPOiBVTFBTIGR1cmluZyBzdXNwZW5kICov Ci0JaWYgKCFkc2lfcGFuZWxfaW5pdGlhbGl6ZWQoZGlzcGxheS0+cGFuZWwpKQotCQlyZXR1cm4g ZmFsc2U7Ci0KLQlpZiAoZW5hYmxlICYmIGRpc3BsYXktPnVscHNfZW5hYmxlZCkgewotCQlwcl9k ZWJ1ZygiVUxQUyBhbHJlYWR5IGVuYWJsZWRcbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfSBlbHNl IGlmICghZW5hYmxlICYmICFkaXNwbGF5LT51bHBzX2VuYWJsZWQpIHsKLQkJcHJfZGVidWcoIlVM UFMgYWxyZWFkeSBkaXNhYmxlZFxuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKgotCSAq IE5vIG5lZWQgdG8gZW50ZXIgVUxQUyB3aGVuIHRyYW5zaXRpb25pbmcgZnJvbSBzcGxhc2ggc2Ny ZWVuIHRvCi0JICogYm9vdCBhbmltYXRpb24gc2luY2UgaXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUg Y2xvY2tzIHdvdWxkIGJlIHR1cm5lZAotCSAqIHJpZ2h0IGJhY2sgb24uCi0JICovCi0JaWYgKGVu YWJsZSAmJiBzcGxhc2hfZW5hYmxlZCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHRydWU7 Ci19Ci0KLQotLyoqCi0gKiBkc2lfZGlzcGxheV9zZXRfdWxwcygpIC0gc2V0IFVMUFMgc3RhdGUg Zm9yIERTSSBsYW5lcy4KLSAqIEBkc2lfZGlzcGxheTogICAgICAgICBEU0kgZGlzcGxheSBoYW5k bGUuCi0gKiBAZW5hYmxlOiAgICAgICAgICAgZW5hYmxlL2Rpc2FibGUgVUxQUy4KLSAqCi0gKiBV TFBTIGNhbiBiZSBlbmFibGVkL2Rpc2FibGVkIGFmdGVyIERTSSBob3N0IGVuZ2luZSBpcyB0dXJu ZWQgb24uCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1zdGF0aWMgaW50IGRzaV9k aXNwbGF5X3NldF91bHBzKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwgYm9vbCBlbmFibGUp Ci17Ci0JaW50IHJjID0gMDsKLQlpbnQgaSA9IDA7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwg Km1fY3RybCwgKmN0cmw7Ci0KLQotCWlmICghZGlzcGxheSkgewotCQlwcl9lcnIoIkludmFsaWQg cGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFkc2lfZGlzcGxheV9p c191bHBzX3JlcV92YWxpZChkaXNwbGF5LCBlbmFibGUpKSB7Ci0JCXByX2RlYnVnKCIlczogc2tp cHBpbmcgVUxQUyBjb25maWcsIGVuYWJsZT0lZFxuIiwKLQkJCV9fZnVuY19fLCBlbmFibGUpOwot CQlyZXR1cm4gMDsKLQl9Ci0KLQltX2N0cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNwbGF5LT5jbWRf bWFzdGVyX2lkeF07Ci0KLQlyYyA9IGRzaV9jdHJsX3NldF91bHBzKG1fY3RybC0+Y3RybCwgZW5h YmxlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJVbHBzIGNvbnRyb2xsZXIgc3RhdGUgY2hhbmdl KCVkKSBmYWlsZWRcbiIsIGVuYWJsZSk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlyYyA9IGRzaV9w aHlfc2V0X3VscHMobV9jdHJsLT5waHksICZkaXNwbGF5LT5jb25maWcsIGVuYWJsZSwKLQkJCQlk aXNwbGF5LT5jbGFtcF9lbmFibGVkKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJVbHBzIFBIWSBz dGF0ZSBjaGFuZ2UoJWQpIGZhaWxlZFxuIiwgZW5hYmxlKTsKLQkJcmV0dXJuIHJjOwotCX0KLQot CWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZk aXNwbGF5LT5jdHJsW2ldOwotCQlpZiAoIWN0cmwtPmN0cmwgfHwgKGN0cmwgPT0gbV9jdHJsKSkK LQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX2N0cmxfc2V0X3VscHMoY3RybC0+Y3RybCwgZW5h YmxlKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlVscHMgY29udHJvbGxlciBzdGF0ZSBjaGFu Z2UoJWQpIGZhaWxlZFxuIiwKLQkJCQllbmFibGUpOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0KLQkJ cmMgPSBkc2lfcGh5X3NldF91bHBzKGN0cmwtPnBoeSwgJmRpc3BsYXktPmNvbmZpZywgZW5hYmxl LAotCQkJCQlkaXNwbGF5LT5jbGFtcF9lbmFibGVkKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIo IlVscHMgUEhZIHN0YXRlIGNoYW5nZSglZCkgZmFpbGVkXG4iLCBlbmFibGUpOwotCQkJcmV0dXJu IHJjOwotCQl9Ci0KLQl9Ci0JZGlzcGxheS0+dWxwc19lbmFibGVkID0gZW5hYmxlOwotCXJldHVy biAwOwotfQotCi0vKioKLSAqIGRzaV9kaXNwbGF5X3NldF9jbGFtcCgpIC0gc2V0IGNsYW1wIHN0 YXRlIGZvciBEU0kgSU8uCi0gKiBAZHNpX2Rpc3BsYXk6ICAgICAgICAgRFNJIGRpc3BsYXkgaGFu ZGxlLgotICogQGVuYWJsZTogICAgICAgICAgIGVuYWJsZS9kaXNhYmxlIGNsYW1waW5nLgotICoK LSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotc3RhdGljIGludCBkc2lfZGlzcGxheV9zZXRf Y2xhbXAoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LCBib29sIGVuYWJsZSkKLXsKLQlpbnQg cmMgPSAwOwotCWludCBpID0gMDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqbV9jdHJsLCAq Y3RybDsKLQlib29sIHVscHNfZW5hYmxlZCA9IGZhbHNlOwotCi0KLQlpZiAoIWRpc3BsYXkpIHsK LQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQot CW1fY3RybCA9ICZkaXNwbGF5LT5jdHJsW2Rpc3BsYXktPmNtZF9tYXN0ZXJfaWR4XTsKLQl1bHBz X2VuYWJsZWQgPSBkaXNwbGF5LT51bHBzX2VuYWJsZWQ7Ci0KLQlyYyA9IGRzaV9jdHJsX3NldF9j bGFtcF9zdGF0ZShtX2N0cmwtPmN0cmwsIGVuYWJsZSwgdWxwc19lbmFibGVkKTsKLQlpZiAocmMp IHsKLQkJcHJfZXJyKCJEU0kgQ2xhbXAgc3RhdGUgY2hhbmdlKCVkKSBmYWlsZWRcbiIsIGVuYWJs ZSk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+Y3RybF9j b3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJaWYgKCFjdHJsLT5j dHJsIHx8IChjdHJsID09IG1fY3RybCkpCi0JCQljb250aW51ZTsKLQotCQlyYyA9IGRzaV9jdHJs X3NldF9jbGFtcF9zdGF0ZShjdHJsLT5jdHJsLCBlbmFibGUsIHVscHNfZW5hYmxlZCk7Ci0JCWlm IChyYykgewotCQkJcHJfZXJyKCJEU0kgQ2xhbXAgc3RhdGUgY2hhbmdlKCVkKSBmYWlsZWRcbiIs IGVuYWJsZSk7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQl9Ci0JZGlzcGxheS0+Y2xhbXBfZW5hYmxl ZCA9IGVuYWJsZTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBkc2lfZGlzcGxheV9zZXR1cF9j dHJsKCkgLSBzZXR1cCBEU0kgY29udHJvbGxlci4KLSAqIEBkc2lfZGlzcGxheTogICAgICAgICBE U0kgZGlzcGxheSBoYW5kbGUuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1zdGF0 aWMgaW50IGRzaV9kaXNwbGF5X2N0cmxfc2V0dXAoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5 KQotewotCWludCByYyA9IDA7Ci0JaW50IGkgPSAwOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJs ICpjdHJsLCAqbV9jdHJsOwotCi0KLQlpZiAoIWRpc3BsYXkpIHsKLQkJcHJfZXJyKCJJbnZhbGlk IHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW1fY3RybCA9ICZkaXNwbGF5 LT5jdHJsW2Rpc3BsYXktPmNtZF9tYXN0ZXJfaWR4XTsKLQlyYyA9IGRzaV9jdHJsX3NldHVwKG1f Y3RybC0+Y3RybCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiRFNJIGNvbnRyb2xsZXIgc2V0dXAg ZmFpbGVkXG4iKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5 LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlpZiAo IWN0cmwtPmN0cmwgfHwgKGN0cmwgPT0gbV9jdHJsKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0g ZHNpX2N0cmxfc2V0dXAoY3RybC0+Y3RybCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJEU0kg Y29udHJvbGxlciBzZXR1cCBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0JfQotCXJl dHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3BoeV9lbmFibGUoc3RydWN0IGRz aV9kaXNwbGF5ICpkaXNwbGF5KTsKLQotLyoqCi0gKiBkc2lfZGlzcGxheV9waHlfaWRsZV9vbigp IC0gZW5hYmxlIERTSSBQSFkgd2hpbGUgY29taW5nIG91dCBvZiBpZGxlIHNjcmVlbi4KLSAqIEBk c2lfZGlzcGxheTogICAgICAgICBEU0kgZGlzcGxheSBoYW5kbGUuCi0gKiBAZW5hYmxlOiAgICAg ICAgICAgZW5hYmxlL2Rpc2FibGUgRFNJIFBIWS4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUu Ci0gKi8KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfcGh5X2lkbGVfb24oc3RydWN0IGRzaV9kaXNw bGF5ICpkaXNwbGF5LAotCQlib29sIG1tc3NfY2xhbXApCi17Ci0JaW50IHJjID0gMDsKLQlpbnQg aSA9IDA7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKm1fY3RybCwgKmN0cmw7Ci0KLQotCWlm ICghZGlzcGxheSkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCi0JaWYgKG1tc3NfY2xhbXAgJiYgIWRpc3BsYXktPnBoeV9pZGxlX3Bvd2Vy X29mZikgewotCQlkc2lfZGlzcGxheV9waHlfZW5hYmxlKGRpc3BsYXkpOwotCQlyZXR1cm4gMDsK LQl9Ci0KLQltX2N0cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNwbGF5LT5jbWRfbWFzdGVyX2lkeF07 Ci0JcmMgPSBkc2lfcGh5X2lkbGVfY3RybChtX2N0cmwtPnBoeSwgdHJ1ZSk7Ci0JaWYgKHJjKSB7 Ci0JCXByX2VycigiRFNJIGNvbnRyb2xsZXIgc2V0dXAgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIHJj OwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJ Y3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlpZiAoIWN0cmwtPmN0cmwgfHwgKGN0cmwgPT0g bV9jdHJsKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX3BoeV9pZGxlX2N0cmwoY3RybC0+ cGh5LCB0cnVlKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIkRTSSBjb250cm9sbGVyIHNldHVw IGZhaWxlZFxuIik7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQl9Ci0JZGlzcGxheS0+cGh5X2lkbGVf cG93ZXJfb2ZmID0gZmFsc2U7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlf cGh5X2lkbGVfb2ZmKCkgLSBkaXNhYmxlIERTSSBQSFkgd2hpbGUgZ29pbmcgdG8gaWRsZSBzY3Jl ZW4uCi0gKiBAZHNpX2Rpc3BsYXk6ICAgICAgICAgRFNJIGRpc3BsYXkgaGFuZGxlLgotICogQGVu YWJsZTogICAgICAgICAgIGVuYWJsZS9kaXNhYmxlIERTSSBQSFkuCi0gKgotICogUmV0dXJuOiBl cnJvciBjb2RlLgotICovCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3BoeV9pZGxlX29mZihzdHJ1 Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaSA9IDA7Ci0J c3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKm1fY3RybCwgKmN0cmw7Ci0KLQlpZiAoIWRpc3BsYXkp IHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0K LQotCWlmICghZGlzcGxheS0+cGFuZWwtPmFsbG93X3BoeV9wb3dlcl9vZmYpIHsKLQkJcHJfZGVi dWcoInBhbmVsIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmVcbiIpOwotCQlyZXR1cm4gMDsK LQl9Ci0KLQltX2N0cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNwbGF5LT5jbWRfbWFzdGVyX2lkeF07 Ci0KLQlyYyA9IGRzaV9waHlfaWRsZV9jdHJsKG1fY3RybC0+cGh5LCBmYWxzZSk7Ci0JaWYgKHJj KSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZW5hYmxlIGNtZCBlbmdpbmUsIHJjPSVkXG4i LAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JZm9y IChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3Bs YXktPmN0cmxbaV07Ci0JCWlmICghY3RybC0+Y3RybCB8fCAoY3RybCA9PSBtX2N0cmwpKQotCQkJ Y29udGludWU7Ci0KLQkJcmMgPSBkc2lfcGh5X2lkbGVfY3RybChjdHJsLT5waHksIGZhbHNlKTsK LQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIkRTSSBjb250cm9sbGVyIHNldHVwIGZhaWxlZFxuIik7 Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQl9Ci0JZGlzcGxheS0+cGh5X2lkbGVfcG93ZXJfb2ZmID0g dHJ1ZTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBkc2lfZGlzcGxheV9lbmFibGVfZXZlbnQoc3Ry dWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAotCQl1aW50MzJfdCBldmVudF9pZHgsIHN0cnVjdCBk c2lfZXZlbnRfY2JfaW5mbyAqZXZlbnRfaW5mbywKLQkJYm9vbCBlbmFibGUpCi17Ci0JdWludDMy X3QgaXJxX3N0YXR1c19pZHggPSBEU0lfU1RBVFVTX0lOVEVSUlVQVF9DT1VOVDsKLQlpbnQgaTsK LQotCWlmICghZGlzcGxheSkgewotCQlwcl9lcnIoImludmFsaWQgZGlzcGxheVxuIik7Ci0JCXJl dHVybjsKLQl9Ci0KLQlpZiAoZXZlbnRfaW5mbykKLQkJZXZlbnRfaW5mby0+ZXZlbnRfaWR4ID0g ZXZlbnRfaWR4OwotCi0Jc3dpdGNoIChldmVudF9pZHgpIHsKLQljYXNlIERQVV9DT05OX0VWRU5U X1ZJRF9ET05FOgotCQlpcnFfc3RhdHVzX2lkeCA9IERTSV9TSU5UX1ZJREVPX01PREVfRlJBTUVf RE9ORTsKLQkJYnJlYWs7Ci0JY2FzZSBEUFVfQ09OTl9FVkVOVF9DTURfRE9ORToKLQkJaXJxX3N0 YXR1c19pZHggPSBEU0lfU0lOVF9DTURfRlJBTUVfRE9ORTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoK LQkJLyogbm90aGluZyB0byBkbyAqLwotCQlwcl9kZWJ1ZygiWyVzXSB1bmhhbmRsZWQgZXZlbnQg JWRcbiIsIGRpc3BsYXktPm5hbWUsIGV2ZW50X2lkeCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAo ZW5hYmxlKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKyspCi0J CQlkc2lfY3RybF9lbmFibGVfc3RhdHVzX2ludGVycnVwdCgKLQkJCQkJZGlzcGxheS0+Y3RybFtp XS5jdHJsLCBpcnFfc3RhdHVzX2lkeCwKLQkJCQkJZXZlbnRfaW5mbyk7Ci0JfSBlbHNlIHsKLQkJ Zm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykKLQkJCWRzaV9jdHJsX2Rp c2FibGVfc3RhdHVzX2ludGVycnVwdCgKLQkJCQkJZGlzcGxheS0+Y3RybFtpXS5jdHJsLCBpcnFf c3RhdHVzX2lkeCk7Ci0JfQotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X2N0cmxfcG93ZXJf b24oc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0JaW50IGk7 Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKmN0cmw7Ci0KLQkvKiBTZXF1ZW5jZSBkb2VzIG5v dCBtYXR0ZXIgZm9yIHNwbGl0IGRzaSB1c2VjYXNlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBkaXNw bGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlp ZiAoIWN0cmwtPmN0cmwpCi0JCQljb250aW51ZTsKLQotCQlyYyA9IGRzaV9jdHJsX3NldF9wb3dl cl9zdGF0ZShjdHJsLT5jdHJsLAotCQkJCQkgICAgICBEU0lfQ1RSTF9QT1dFUl9WUkVHX09OKTsK LQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gRmFpbGVkIHRvIHNldCBwb3dlciBzdGF0ZSwg cmM9JWRcbiIsCi0JCQkgICAgICAgY3RybC0+Y3RybC0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJv cjsKLQkJfQotCX0KLQotCXJldHVybiByYzsKLWVycm9yOgotCWZvciAoaSA9IGkgLSAxOyBpID49 IDA7IGktLSkgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCWlmICghY3RybC0+Y3Ry bCkKLQkJCWNvbnRpbnVlOwotCQkodm9pZClkc2lfY3RybF9zZXRfcG93ZXJfc3RhdGUoY3RybC0+ Y3RybCwKLQkJCURTSV9DVFJMX1BPV0VSX1ZSRUdfT0ZGKTsKLQl9Ci0JcmV0dXJuIHJjOwotfQot Ci1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X2N0cmxfcG93ZXJfb2ZmKHN0cnVjdCBkc2lfZGlzcGxh eSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfZGlzcGxh eV9jdHJsICpjdHJsOwotCi0JLyogU2VxdWVuY2UgZG9lcyBub3QgbWF0dGVyIGZvciBzcGxpdCBk c2kgdXNlY2FzZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsr KSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJaWYgKCFjdHJsLT5jdHJsKQotCQkJ Y29udGludWU7Ci0KLQkJcmMgPSBkc2lfY3RybF9zZXRfcG93ZXJfc3RhdGUoY3RybC0+Y3RybCwK LQkJCURTSV9DVFJMX1BPV0VSX1ZSRUdfT0ZGKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlsl c10gRmFpbGVkIHRvIHBvd2VyIG9mZiwgcmM9JWRcbiIsCi0JCQkgICAgICAgY3RybC0+Y3RybC0+ bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0KLWVycm9yOgotCXJldHVybiByYzsK LX0KLQotc3RhdGljIHZvaWQgZHNpX2Rpc3BsYXlfcGFyc2VfY21kbGluZV90b3BvbG9neShzdHJ1 Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCQkJCXVuc2lnbmVkIGludCBkaXNwbGF5X3R5cGUp Ci17Ci0JY2hhciAqYm9vdF9zdHIgPSBOVUxMOwotCWNoYXIgKnN0ciA9IE5VTEw7Ci0JdW5zaWdu ZWQgbG9uZyB2YWx1ZTsKLQotCWlmIChkaXNwbGF5X3R5cGUgPj0gTUFYX0RTSV9BQ1RJVkVfRElT UExBWSkgewotCQlwcl9lcnIoImRpc3BsYXlfdHlwZT0lZCBub3Qgc3VwcG9ydGVkXG4iLCBkaXNw bGF5X3R5cGUpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGRpc3BsYXlfdHlwZSA9PSBEU0lfUFJJ TUFSWSkKLQkJYm9vdF9zdHIgPSBkc2lfZGlzcGxheV9wcmltYXJ5OwotCWVsc2UKLQkJYm9vdF9z dHIgPSBkc2lfZGlzcGxheV9zZWNvbmRhcnk7Ci0KLQlzdHIgPSBzdHJuc3RyKGJvb3Rfc3RyLCAi OmNvbmZpZyIsIHN0cmxlbihib290X3N0cikpOwotCWlmICghc3RyKQotCQlyZXR1cm47Ci0KLQlp ZiAoa3N0cnRvbChzdHIgKyBzdHJsZW4oIjpjb25maWciKSwgSU5UX0JBU0VfMTAsCi0JCQkJKHVu c2lnbmVkIGxvbmcgKikmdmFsdWUpKSB7Ci0JCXByX2VycigiaW52YWxpZCBjb25maWcgaW5kZXgg b3ZlcnJpZGU6ICVzXG4iLCBib290X3N0cik7Ci0JCXJldHVybjsKLQl9Ci0JZGlzcGxheS0+Y21k bGluZV90b3BvbG9neSA9IHZhbHVlOwotCi0Jc3RyID0gc3RybnN0cihib290X3N0ciwgIjp0aW1p bmciLCBzdHJsZW4oYm9vdF9zdHIpKTsKLQlpZiAoIXN0cikKLQkJcmV0dXJuOwotCi0JaWYgKGtz dHJ0b2woc3RyICsgc3RybGVuKCI6dGltaW5nIiksIElOVF9CQVNFXzEwLAotCQkJCSh1bnNpZ25l ZCBsb25nICopJnZhbHVlKSkgewotCQlwcl9lcnIoImludmFsaWQgdGltaW5nIGluZGV4IG92ZXJy aWRlOiAlcy4gcmVzZXR0aW5nIGJvdGggdGltaW5nIGFuZCBjb25maWdcbiIsCi0JCQlib290X3N0 cik7Ci0JCWRpc3BsYXktPmNtZGxpbmVfdG9wb2xvZ3kgPSBOT19PVkVSUklERTsKLQkJcmV0dXJu OwotCX0KLQlkaXNwbGF5LT5jbWRsaW5lX3RpbWluZyA9IHZhbHVlOwotfQotCi0vKioKLSAqIGRz aV9kaXNwbGF5X25hbWVfY29tcGFyZSgpLSBjb21wYXJlIHdoZXRoZXIgRFNJIGRpc3BsYXkgbmFt ZSBtYXRjaGVzLgotICogQG5vZGU6CVBvaW50ZXIgdG8gZGV2aWNlIG5vZGUgc3RydWN0dXJlCi0g KiBAZGlzcGxheV9uYW1lOiBOYW1lIG9mIGRpc3BsYXkgdG8gdmFsaWRhdGUKLSAqCi0gKiBSZXR1 cm46CXJldHVybnMgYSBib29sIHNwZWNpZnlpbmcgd2hldGhlciBnaXZlbiBkaXNwbGF5IGlzIGFj dGl2ZQotICovCi1zdGF0aWMgYm9vbCBkc2lfZGlzcGxheV9uYW1lX2NvbXBhcmUoc3RydWN0IGRl dmljZV9ub2RlICpub2RlLAotCQkJY29uc3QgY2hhciAqZGlzcGxheV9uYW1lLCBpbnQgaW5kZXgp Ci17Ci0JaWYgKGluZGV4ID49IE1BWF9EU0lfQUNUSVZFX0RJU1BMQVkpIHsKLQkJcHJfZXJyKCJJ bnZhbGlkIEluZGV4XG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChib290X2Rpc3Bs YXlzW2luZGV4XS5ib290X2Rpc3BfZW4pIHsKLQkJaWYgKCEoc3RyY21wKCZib290X2Rpc3BsYXlz W2luZGV4XS5uYW1lWzBdLCBkaXNwbGF5X25hbWUpKSkgewotCQkJYm9vdF9kaXNwbGF5c1tpbmRl eF0ubm9kZSA9IG5vZGU7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQlyZXR1cm4gZmFsc2U7 Ci19Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfcGFyc2VfYm9vdF9kaXNwbGF5X3NlbGVjdGlvbigp LSBQYXJzZSBEU0kgYm9vdCBkaXNwbGF5IG5hbWUKLSAqCi0gKiBSZXR1cm46CXJldHVybnMgZXJy b3Igc3RhdHVzCi0gKi8KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfcGFyc2VfYm9vdF9kaXNwbGF5 X3NlbGVjdGlvbih2b2lkKQotewotCWNoYXIgKnBvcyA9IE5VTEw7Ci0JY2hhciBkaXNwX2J1ZltN QVhfQ01ETElORV9QQVJBTV9MRU5dID0geydcMCd9OwotCWludCBpLCBqLCBudW1fZGlzcGxheXM7 Ci0KLQlpZiAoc3RybGVuKGRzaV9kaXNwbGF5X3ByaW1hcnkpID09IDApCi0JCXJldHVybiAtRUlO VkFMOwotCi0JaWYgKChzdHJsZW4oZHNpX2Rpc3BsYXlfc2Vjb25kYXJ5KSA+IDApKQotCQludW1f ZGlzcGxheXMgPSBNQVhfRFNJX0FDVElWRV9ESVNQTEFZOwotCWVsc2UgewotCQkvKgotCQkgKiBJ bml0aWFsaXplIHNlY29uZGFyeSBkc2kgdmFyaWFibGVzCi0JCSAqIGZvciB0aGUgc2VuYXJpbyB3 aGVyZSBkc2lfZGlzcGxheTEKLQkJICogaXMgbnVsbCBidXQgZHNpX2Rpc3BsYXkwIGlzIHZhbGlk Ci0JCSAqLwotCi0JCS8qIE1heCBudW1iZXIgb2YgZGlzcGxheXMgd2lsbCBiZSBvbmUtPm9ubHkg UHJpbWFyeSAqLwotCQludW1fZGlzcGxheXMgPSAxOwotCQlib290X2Rpc3BsYXlzW0RTSV9TRUNP TkRBUlldLmlzX3ByaW1hcnkgPSBmYWxzZTsKLQkJYm9vdF9kaXNwbGF5c1tEU0lfU0VDT05EQVJZ XS5uYW1lWzBdID0gJ1wwJzsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2Rpc3BsYXlzOyBp KyspIHsKLQkJYm9vdF9kaXNwbGF5c1tpXS5pc19wcmltYXJ5ID0gZmFsc2U7Ci0JCWlmIChpID09 IERTSV9QUklNQVJZKSB7Ci0JCQlzdHJsY3B5KGRpc3BfYnVmLCAmZHNpX2Rpc3BsYXlfcHJpbWFy eVswXSwKLQkJCQlzaXplb2YoZHNpX2Rpc3BsYXlfcHJpbWFyeSkpOwotCQkJcG9zID0gc3RybnN0 cihkaXNwX2J1ZiwgIjoiLAotCQkJCXNpemVvZihkc2lfZGlzcGxheV9wcmltYXJ5KSk7Ci0JCX0g ZWxzZSB7Ci0JCQlzdHJsY3B5KGRpc3BfYnVmLCAmZHNpX2Rpc3BsYXlfc2Vjb25kYXJ5WzBdLAot CQkJCXNpemVvZihkc2lfZGlzcGxheV9zZWNvbmRhcnkpKTsKLQkJCXBvcyA9IHN0cm5zdHIoZGlz cF9idWYsICI6IiwKLQkJCQlzaXplb2YoZHNpX2Rpc3BsYXlfc2Vjb25kYXJ5KSk7Ci0JCX0KLQkJ LyogVXNlICc6JyBhcyBhIGRlbGltaXRlciB0byByZXRyaWV2ZSB0aGUgZGlzcGxheSBuYW1lICov Ci0JCWlmICghcG9zKSB7Ci0JCQlwcl9kZWJ1ZygiZGlzcGxheSBuYW1lWyVzXWlzIG5vdCB2YWxp ZFxuIiwgZGlzcF9idWYpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlmb3IgKGogPSAwOyAoZGlz cF9idWYgKyBqKSA8IHBvczsgaisrKQotCQkJYm9vdF9kaXNwbGF5c1tpXS5uYW1lW2pdID0gKihk aXNwX2J1ZiArIGopOwotCQlib290X2Rpc3BsYXlzW2ldLm5hbWVbal0gPSAnXDAnOwotCi0JCWlm IChpID09IERTSV9QUklNQVJZKSB7Ci0JCQlib290X2Rpc3BsYXlzW2ldLmlzX3ByaW1hcnkgPSB0 cnVlOwotCQkJLyogQ3VycmVudGx5LCBzZWNvbmRhcnkgRFNJIGRpc3BsYXkgaXMgbm90IHN1cHBv cnRlZCAqLwotCQkJYm9vdF9kaXNwbGF5c1tpXS5ib290X2Rpc3BfZW4gPSB0cnVlOwotCQl9Ci0J fQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIHZhbGlkYXRlX2RzaV9kaXNwbGF5X3NlbGVjdGlv bigpLSB2YWxpZGF0ZSBib290IERTSSBkaXNwbGF5IHNlbGVjdGlvbgotICoKLSAqIFJldHVybjoJ cmV0dXJucyB0cnVlIHdoZW4gYm90aCBkaXNwbGF5cyBoYXZlIHVuaXF1ZSBjb25maWd1cmF0aW9u cwotICovCi1zdGF0aWMgYm9vbCB2YWxpZGF0ZV9kc2lfZGlzcGxheV9zZWxlY3Rpb24odm9pZCkK LXsKLQlpbnQgaSwgajsKLQlpbnQgcmMgPSAwOwotCWludCBwaHlfY291bnQgPSAwOwotCWludCBj dHJsX2NvdW50ID0gMDsKLQlpbnQgaW5kZXggPSAwOwotCWJvb2wgY3RybF9mbGFnc1tNQVhfRFNJ X0FDVElWRV9ESVNQTEFZXSA9IHtmYWxzZSwgZmFsc2V9OwotCWJvb2wgcGh5X2ZsYWdzW01BWF9E U0lfQUNUSVZFX0RJU1BMQVldID0ge2ZhbHNlLCBmYWxzZX07Ci0Jc3RydWN0IGRldmljZV9ub2Rl ICpub2RlLCAqY3RybF9ub2RlLCAqcGh5X25vZGU7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0RT SV9BQ1RJVkVfRElTUExBWTsgaSsrKSB7Ci0JCW5vZGUgPSBib290X2Rpc3BsYXlzW2ldLm5vZGU7 Ci0JCWN0cmxfY291bnQgPSBvZl9jb3VudF9waGFuZGxlX3dpdGhfYXJncyhub2RlLCAicWNvbSxk c2ktY3RybCIsCi0JCQkJCQkJCU5VTEwpOwotCi0JCWZvciAoaiA9IDA7IGogPCBjdHJsX2NvdW50 OyBqKyspIHsKLQkJCWN0cmxfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobm9kZSwgInFjb20sZHNp LWN0cmwiLCBqKTsKLQkJCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoY3RybF9ub2RlLCAiY2Vs bC1pbmRleCIsCi0JCQkJCSZpbmRleCk7Ci0JCQlvZl9ub2RlX3B1dChjdHJsX25vZGUpOwotCQkJ aWYgKHJjKSB7Ci0JCQkJcHJfZXJyKCJjZWxsIGluZGV4IG5vdCBzZXQgZm9yIGN0cmxfbm9kZXNc biIpOwotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJCWlmIChjdHJsX2ZsYWdzW2luZGV4XSkK LQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQljdHJsX2ZsYWdzW2luZGV4XSA9IHRydWU7Ci0JCX0KLQot CQlwaHlfY291bnQgPSBvZl9jb3VudF9waGFuZGxlX3dpdGhfYXJncyhub2RlLCAicWNvbSxkc2kt cGh5IiwKLQkJCQkJCQkJTlVMTCk7Ci0JCWZvciAoaiA9IDA7IGogPCBwaHlfY291bnQ7IGorKykg ewotCQkJcGh5X25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKG5vZGUsICJxY29tLGRzaS1waHkiLCBq KTsKLQkJCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocGh5X25vZGUsICJjZWxsLWluZGV4IiwK LQkJCQkJJmluZGV4KTsKLQkJCW9mX25vZGVfcHV0KHBoeV9ub2RlKTsKLQkJCWlmIChyYykgewot CQkJCXByX2VycigiY2VsbCBpbmRleCBub3Qgc2V0IHBoeV9ub2Rlc1xuIik7Ci0JCQkJcmV0dXJu IGZhbHNlOwotCQkJfQotCQkJaWYgKHBoeV9mbGFnc1tpbmRleF0pCi0JCQkJcmV0dXJuIGZhbHNl OwotCQkJcGh5X2ZsYWdzW2luZGV4XSA9IHRydWU7Ci0JCX0KLQl9Ci0JcmV0dXJuIHRydWU7Ci19 Ci0KLXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHNpX2Rpc3BsYXlfZ2V0X2Jvb3RfZGlzcGxheShpbnQg aW5kZXgpCi17Ci0KLQlwcl9lcnIoImluZGV4ID0gJWRcbiIsIGluZGV4KTsKLQotCWlmIChib290 X2Rpc3BsYXlzW2luZGV4XS5ub2RlKQotCQlyZXR1cm4gYm9vdF9kaXNwbGF5c1tpbmRleF0ubm9k ZTsKLQllbHNlIGlmICgoaW5kZXggPT0gKE1BWF9EU0lfQUNUSVZFX0RJU1BMQVkgLSAxKSkKLQkJ CSYmIChkZWZhdWx0X2FjdGl2ZV9ub2RlKSkKLQkJcmV0dXJuIGRlZmF1bHRfYWN0aXZlX25vZGU7 Ci0JZWxzZQotCQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9waHlf cG93ZXJfb24oc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0J aW50IGk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKmN0cmw7Ci0KLQkvKiBTZXF1ZW5jZSBk b2VzIG5vdCBtYXR0ZXIgZm9yIHNwbGl0IGRzaSB1c2VjYXNlcyAqLwotCWZvciAoaSA9IDA7IGkg PCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ld OwotCQlpZiAoIWN0cmwtPmN0cmwpCi0JCQljb250aW51ZTsKLQotCQlyYyA9IGRzaV9waHlfc2V0 X3Bvd2VyX3N0YXRlKGN0cmwtPnBoeSwgdHJ1ZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJb JXNdIEZhaWxlZCB0byBzZXQgcG93ZXIgc3RhdGUsIHJjPSVkXG4iLAotCQkJICAgICAgIGN0cmwt PnBoeS0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0KLQotCXJldHVybiByYzsK LWVycm9yOgotCWZvciAoaSA9IGkgLSAxOyBpID49IDA7IGktLSkgewotCQljdHJsID0gJmRpc3Bs YXktPmN0cmxbaV07Ci0JCWlmICghY3RybC0+cGh5KQotCQkJY29udGludWU7Ci0JCSh2b2lkKWRz aV9waHlfc2V0X3Bvd2VyX3N0YXRlKGN0cmwtPnBoeSwgZmFsc2UpOwotCX0KLQlyZXR1cm4gcmM7 Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfcGh5X3Bvd2VyX29mZihzdHJ1Y3QgZHNpX2Rp c3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX2Rp c3BsYXlfY3RybCAqY3RybDsKLQotCS8qIFNlcXVlbmNlIGRvZXMgbm90IG1hdHRlciBmb3Igc3Bs aXQgZHNpIHVzZWNhc2VzICovCi0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7 IGkrKykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCWlmICghY3RybC0+cGh5KQot CQkJY29udGludWU7Ci0KLQkJcmMgPSBkc2lfcGh5X3NldF9wb3dlcl9zdGF0ZShjdHJsLT5waHks IGZhbHNlKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gRmFpbGVkIHRvIHBvd2VyIG9m ZiwgcmM9JWRcbiIsCi0JCQkgICAgICAgY3RybC0+Y3RybC0+bmFtZSwgcmMpOwotCQkJZ290byBl cnJvcjsKLQkJfQotCX0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lf ZGlzcGxheV9zZXRfY2xrX3NyYyhzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50 IHJjID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqbV9jdHJsLCAqY3Ry bDsKLQotCS8qCi0JICogSW4gY2FzZSBvZiBzcGxpdCBEU0kgdXNlY2FzZXMsIHRoZSBjbG9jayBm b3IgbWFzdGVyIGNvbnRyb2xsZXIgc2hvdWxkCi0JICogYmUgZW5hYmxlZCBiZWZvcmUgdGhlIG90 aGVyIGNvbnRyb2xsZXIuIE1hc3RlciBjb250cm9sbGVyIGluIHRoZQotCSAqIGNsb2NrIGNvbnRl eHQgcmVmZXJzIHRvIHRoZSBjb250cm9sbGVyIHRoYXQgc291cmNlcyB0aGUgY2xvY2suCi0JICov Ci0JbV9jdHJsID0gJmRpc3BsYXktPmN0cmxbZGlzcGxheS0+Y2xrX21hc3Rlcl9pZHhdOwotCi0J cmMgPSBkc2lfY3RybF9zZXRfY2xvY2tfc291cmNlKG1fY3RybC0+Y3RybCwKLQkJICAgJmRpc3Bs YXktPmNsb2NrX2luZm8uc3JjX2Nsa3MpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFp bGVkIHRvIHNldCBzb3VyY2UgY2xvY2tzIGZvciBtYXN0ZXIsIHJjPSVkXG4iLAotCQkJICAgZGlz cGxheS0+bmFtZSwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JLyogVHVybiBvbiByZXN0IG9m IHRoZSBjb250cm9sbGVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50 OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlpZiAoIWN0cmwtPmN0cmwg fHwgKGN0cmwgPT0gbV9jdHJsKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX2N0cmxfc2V0 X2Nsb2NrX3NvdXJjZShjdHJsLT5jdHJsLAotCQkJICAgJmRpc3BsYXktPmNsb2NrX2luZm8uc3Jj X2Nsa3MpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gc2V0IHNvdXJj ZSBjbG9ja3MsIHJjPSVkXG4iLAotCQkJCSAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJCXJldHVy biByYzsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9w aHlfcmVzZXRfY29uZmlnKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwKLQkJYm9vbCBlbmFi bGUpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAq Y3RybDsKLQotCWZvciAoaSA9IDAgOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0J CWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJcmMgPSBkc2lfY3RybF9waHlfcmVzZXRfY29u ZmlnKGN0cmwtPmN0cmwsIGVuYWJsZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZh aWxlZCB0byAlcyBwaHkgcmVzZXQsIHJjPSVkXG4iLAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUs IGVuYWJsZSA/ICJtYXNrIiA6ICJ1bm1hc2siLCByYyk7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQl9 Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfY3RybF91cGRhdGUoc3Ry dWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0JaW50IGk7Ci0Jc3Ry dWN0IGRzaV9kaXNwbGF5X2N0cmwgKmN0cmw7Ci0KLQlmb3IgKGkgPSAwIDsgaSA8IGRpc3BsYXkt PmN0cmxfY291bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCXJjID0g ZHNpX2N0cmxfaG9zdF90aW1pbmdfdXBkYXRlKGN0cmwtPmN0cmwpOwotCQlpZiAocmMpIHsKLQkJ CXByX2VycigiWyVzXSBmYWlsZWQgdG8gdXBkYXRlIGhvc3RfJWQsIHJjPSVkXG4iLAotCQkJCSAg IGRpc3BsYXktPm5hbWUsIGksIHJjKTsKLQkJCWdvdG8gZXJyb3JfaG9zdF9kZWluaXQ7Ci0JCX0K LQl9Ci0KLQlyZXR1cm4gMDsKLWVycm9yX2hvc3RfZGVpbml0OgotCWZvciAoaSA9IGkgLSAxOyBp ID49IDA7IGktLSkgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCSh2b2lkKWRzaV9j dHJsX2hvc3RfZGVpbml0KGN0cmwtPmN0cmwpOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3Rh dGljIGludCBkc2lfZGlzcGxheV9jdHJsX2luaXQoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5 KQotewotCWludCByYyA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKmN0 cmw7Ci0KLQlmb3IgKGkgPSAwIDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQlj dHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCXJjID0gZHNpX2N0cmxfaG9zdF9pbml0KGN0cmwt PmN0cmwpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gaW5pdCBob3N0 XyVkLCByYz0lZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCBpLCByYyk7Ci0JCQlnb3Rv IGVycm9yX2hvc3RfZGVpbml0OwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci1lcnJvcl9ob3N0X2Rl aW5pdDoKLQlmb3IgKGkgPSBpIC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJY3RybCA9ICZkaXNwbGF5 LT5jdHJsW2ldOwotCQkodm9pZClkc2lfY3RybF9ob3N0X2RlaW5pdChjdHJsLT5jdHJsKTsKLQl9 Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X2N0cmxfZGVpbml0KHN0 cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0 cnVjdCBkc2lfZGlzcGxheV9jdHJsICpjdHJsOwotCi0JZm9yIChpID0gMCA7IGkgPCBkaXNwbGF5 LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlyYyA9 IGRzaV9jdHJsX2hvc3RfZGVpbml0KGN0cmwtPmN0cmwpOwotCQlpZiAocmMpIHsKLQkJCXByX2Vy cigiWyVzXSBmYWlsZWQgdG8gZGVpbml0IGhvc3RfJWQsIHJjPSVkXG4iLAotCQkJICAgICAgIGRp c3BsYXktPm5hbWUsIGksIHJjKTsKLQkJfQotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGlj IGludCBkc2lfZGlzcGxheV9jbWRfZW5naW5lX2VuYWJsZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRp c3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3Ry bCAqbV9jdHJsLCAqY3RybDsKLQotCWlmIChkaXNwbGF5LT5jbWRfZW5naW5lX3JlZmNvdW50ID4g MCkgewotCQlkaXNwbGF5LT5jbWRfZW5naW5lX3JlZmNvdW50Kys7Ci0JCXJldHVybiAwOwotCX0K LQotCW1fY3RybCA9ICZkaXNwbGF5LT5jdHJsW2Rpc3BsYXktPmNtZF9tYXN0ZXJfaWR4XTsKLQot CXJjID0gZHNpX2N0cmxfc2V0X2NtZF9lbmdpbmVfc3RhdGUobV9jdHJsLT5jdHJsLCBEU0lfQ1RS TF9FTkdJTkVfT04pOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJs ZSBjbWQgZW5naW5lLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJ Z290byBlcnJvcjsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsg aSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJaWYgKCFjdHJsLT5jdHJsIHx8 IChjdHJsID09IG1fY3RybCkpCi0JCQljb250aW51ZTsKLQotCQlyYyA9IGRzaV9jdHJsX3NldF9j bWRfZW5naW5lX3N0YXRlKGN0cmwtPmN0cmwsCi0JCQkJCQkgICBEU0lfQ1RSTF9FTkdJTkVfT04p OwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZW5hYmxlIGNtZCBlbmdp bmUsIHJjPSVkXG4iLAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJCWdvdG8gZXJy b3JfZGlzYWJsZV9tYXN0ZXI7Ci0JCX0KLQl9Ci0KLQlkaXNwbGF5LT5jbWRfZW5naW5lX3JlZmNv dW50Kys7Ci0JcmV0dXJuIHJjOwotZXJyb3JfZGlzYWJsZV9tYXN0ZXI6Ci0JKHZvaWQpZHNpX2N0 cmxfc2V0X2NtZF9lbmdpbmVfc3RhdGUobV9jdHJsLT5jdHJsLCBEU0lfQ1RSTF9FTkdJTkVfT0ZG KTsKLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9jbWRf ZW5naW5lX2Rpc2FibGUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9 IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKm1fY3RybCwgKmN0cmw7Ci0K LQlpZiAoZGlzcGxheS0+Y21kX2VuZ2luZV9yZWZjb3VudCA9PSAwKSB7Ci0JCXByX2VycigiWyVz XSBJbnZhbGlkIHJlZmNvdW50XG4iLCBkaXNwbGF5LT5uYW1lKTsKLQkJcmV0dXJuIDA7Ci0JfSBl bHNlIGlmIChkaXNwbGF5LT5jbWRfZW5naW5lX3JlZmNvdW50ID4gMSkgewotCQlkaXNwbGF5LT5j bWRfZW5naW5lX3JlZmNvdW50LS07Ci0JCXJldHVybiAwOwotCX0KLQotCW1fY3RybCA9ICZkaXNw bGF5LT5jdHJsW2Rpc3BsYXktPmNtZF9tYXN0ZXJfaWR4XTsKLQlmb3IgKGkgPSAwOyBpIDwgZGlz cGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJ aWYgKCFjdHJsLT5jdHJsIHx8IChjdHJsID09IG1fY3RybCkpCi0JCQljb250aW51ZTsKLQotCQly YyA9IGRzaV9jdHJsX3NldF9jbWRfZW5naW5lX3N0YXRlKGN0cmwtPmN0cmwsCi0JCQkJCQkgICBE U0lfQ1RSTF9FTkdJTkVfT0ZGKTsKLQkJaWYgKHJjKQotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0 byBlbmFibGUgY21kIGVuZ2luZSwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwg cmMpOwotCX0KLQotCXJjID0gZHNpX2N0cmxfc2V0X2NtZF9lbmdpbmVfc3RhdGUobV9jdHJsLT5j dHJsLCBEU0lfQ1RSTF9FTkdJTkVfT0ZGKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZh aWxlZCB0byBlbmFibGUgY21kIGVuZ2luZSwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5u YW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi1lcnJvcjoKLQlkaXNwbGF5LT5jbWRfZW5n aW5lX3JlZmNvdW50ID0gMDsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3Bs YXlfY3RybF9ob3N0X2VuYWJsZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50 IHJjID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqbV9jdHJsLCAqY3Ry bDsKLQotCW1fY3RybCA9ICZkaXNwbGF5LT5jdHJsW2Rpc3BsYXktPmNtZF9tYXN0ZXJfaWR4XTsK LQotCXJjID0gZHNpX2N0cmxfc2V0X2hvc3RfZW5naW5lX3N0YXRlKG1fY3RybC0+Y3RybCwgRFNJ X0NUUkxfRU5HSU5FX09OKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBl bmFibGUgaG9zdCBlbmdpbmUsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMp OwotCQlnb3RvIGVycm9yOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2Nv dW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlpZiAoIWN0cmwtPmN0 cmwgfHwgKGN0cmwgPT0gbV9jdHJsKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX2N0cmxf c2V0X2hvc3RfZW5naW5lX3N0YXRlKGN0cmwtPmN0cmwsCi0JCQkJCQkgICAgRFNJX0NUUkxfRU5H SU5FX09OKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJsZSBz bCBob3N0IGVuZ2luZSwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwot CQkJZ290byBlcnJvcl9kaXNhYmxlX21hc3RlcjsKLQkJfQotCX0KLQotCXJldHVybiByYzsKLWVy cm9yX2Rpc2FibGVfbWFzdGVyOgotCSh2b2lkKWRzaV9jdHJsX3NldF9ob3N0X2VuZ2luZV9zdGF0 ZShtX2N0cmwtPmN0cmwsIERTSV9DVFJMX0VOR0lORV9PRkYpOwotZXJyb3I6Ci0JcmV0dXJuIHJj OwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X2N0cmxfaG9zdF9kaXNhYmxlKHN0cnVjdCBk c2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBk c2lfZGlzcGxheV9jdHJsICptX2N0cmwsICpjdHJsOwotCi0JbV9jdHJsID0gJmRpc3BsYXktPmN0 cmxbZGlzcGxheS0+Y21kX21hc3Rlcl9pZHhdOwotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5j dHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlpZiAoIWN0 cmwtPmN0cmwgfHwgKGN0cmwgPT0gbV9jdHJsKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNp X2N0cmxfc2V0X2hvc3RfZW5naW5lX3N0YXRlKGN0cmwtPmN0cmwsCi0JCQkJCQkgICAgRFNJX0NU UkxfRU5HSU5FX09GRik7Ci0JCWlmIChyYykKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGlz YWJsZSBob3N0IGVuZ2luZSwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMp OwotCX0KLQotCXJjID0gZHNpX2N0cmxfc2V0X2hvc3RfZW5naW5lX3N0YXRlKG1fY3RybC0+Y3Ry bCwgRFNJX0NUUkxfRU5HSU5FX09GRik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWls ZWQgdG8gZGlzYWJsZSBob3N0IGVuZ2luZSwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5u YW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0K LXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfdmlkX2VuZ2luZV9lbmFibGUoc3RydWN0IGRzaV9kaXNw bGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IGRzaV9kaXNw bGF5X2N0cmwgKm1fY3RybCwgKmN0cmw7Ci0KLQltX2N0cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNw bGF5LT52aWRlb19tYXN0ZXJfaWR4XTsKLQotCXJjID0gZHNpX2N0cmxfc2V0X3ZpZF9lbmdpbmVf c3RhdGUobV9jdHJsLT5jdHJsLCBEU0lfQ1RSTF9FTkdJTkVfT04pOwotCWlmIChyYykgewotCQlw cl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJsZSB2aWQgZW5naW5lLCByYz0lZFxuIiwKLQkJICAg ICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlmb3IgKGkgPSAw OyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3Ry bFtpXTsKLQkJaWYgKCFjdHJsLT5jdHJsIHx8IChjdHJsID09IG1fY3RybCkpCi0JCQljb250aW51 ZTsKLQotCQlyYyA9IGRzaV9jdHJsX3NldF92aWRfZW5naW5lX3N0YXRlKGN0cmwtPmN0cmwsCi0J CQkJCQkgICBEU0lfQ1RSTF9FTkdJTkVfT04pOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVz XSBmYWlsZWQgdG8gZW5hYmxlIHZpZCBlbmdpbmUsIHJjPSVkXG4iLAotCQkJICAgICAgIGRpc3Bs YXktPm5hbWUsIHJjKTsKLQkJCWdvdG8gZXJyb3JfZGlzYWJsZV9tYXN0ZXI7Ci0JCX0KLQl9Ci0K LQlyZXR1cm4gcmM7Ci1lcnJvcl9kaXNhYmxlX21hc3RlcjoKLQkodm9pZClkc2lfY3RybF9zZXRf dmlkX2VuZ2luZV9zdGF0ZShtX2N0cmwtPmN0cmwsIERTSV9DVFJMX0VOR0lORV9PRkYpOwotZXJy b3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3ZpZF9lbmdpbmVf ZGlzYWJsZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlp bnQgaTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqbV9jdHJsLCAqY3RybDsKLQotCW1fY3Ry bCA9ICZkaXNwbGF5LT5jdHJsW2Rpc3BsYXktPnZpZGVvX21hc3Rlcl9pZHhdOwotCi0JZm9yIChp ID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3BsYXkt PmN0cmxbaV07Ci0JCWlmICghY3RybC0+Y3RybCB8fCAoY3RybCA9PSBtX2N0cmwpKQotCQkJY29u dGludWU7Ci0KLQkJcmMgPSBkc2lfY3RybF9zZXRfdmlkX2VuZ2luZV9zdGF0ZShjdHJsLT5jdHJs LAotCQkJCQkJICAgRFNJX0NUUkxfRU5HSU5FX09GRik7Ci0JCWlmIChyYykKLQkJCXByX2Vycigi WyVzXSBmYWlsZWQgdG8gZGlzYWJsZSB2aWQgZW5naW5lLCByYz0lZFxuIiwKLQkJCSAgICAgICBk aXNwbGF5LT5uYW1lLCByYyk7Ci0JfQotCi0JcmMgPSBkc2lfY3RybF9zZXRfdmlkX2VuZ2luZV9z dGF0ZShtX2N0cmwtPmN0cmwsIERTSV9DVFJMX0VOR0lORV9PRkYpOwotCWlmIChyYykKLQkJcHJf ZXJyKCJbJXNdIGZhaWxlZCB0byBkaXNhYmxlIG12aWQgZW5naW5lLCByYz0lZFxuIiwKLQkJICAg ICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBk c2lfZGlzcGxheV9waHlfZW5hYmxlKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlp bnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICptX2N0cmwsICpj dHJsOwotCWVudW0gZHNpX3BoeV9wbGxfc291cmNlIG1fc3JjID0gRFNJX1BMTF9TT1VSQ0VfU1RB TkRBTE9ORTsKLQotCW1fY3RybCA9ICZkaXNwbGF5LT5jdHJsW2Rpc3BsYXktPmNsa19tYXN0ZXJf aWR4XTsKLQlpZiAoZGlzcGxheS0+Y3RybF9jb3VudCA+IDEpCi0JCW1fc3JjID0gRFNJX1BMTF9T T1VSQ0VfTkFUSVZFOwotCi0JcmMgPSBkc2lfcGh5X2VuYWJsZShtX2N0cmwtPnBoeSwKLQkJCSAg ICAmZGlzcGxheS0+Y29uZmlnLAotCQkJICAgIG1fc3JjLAotCQkJICAgIHRydWUpOwotCWlmIChy YykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJsZSBEU0kgUEhZLCByYz0lZFxuIiwK LQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlmb3Ig KGkgPSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxh eS0+Y3RybFtpXTsKLQkJaWYgKCFjdHJsLT5jdHJsIHx8IChjdHJsID09IG1fY3RybCkpCi0JCQlj b250aW51ZTsKLQotCQlyYyA9IGRzaV9waHlfZW5hYmxlKGN0cmwtPnBoeSwKLQkJCQkgICAgJmRp c3BsYXktPmNvbmZpZywKLQkJCQkgICAgRFNJX1BMTF9TT1VSQ0VfTk9OX05BVElWRSwKLQkJCQkg ICAgdHJ1ZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBlbmFibGUg RFNJIFBIWSwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQkJZ290 byBlcnJvcl9kaXNhYmxlX21hc3RlcjsKLQkJfQotCX0KLQotCXJldHVybiByYzsKLQotZXJyb3Jf ZGlzYWJsZV9tYXN0ZXI6Ci0JKHZvaWQpZHNpX3BoeV9kaXNhYmxlKG1fY3RybC0+cGh5KTsKLWVy cm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9waHlfZGlzYWJs ZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsK LQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqbV9jdHJsLCAqY3RybDsKLQotCW1fY3RybCA9ICZk aXNwbGF5LT5jdHJsW2Rpc3BsYXktPmNsa19tYXN0ZXJfaWR4XTsKLQotCWZvciAoaSA9IDA7IGkg PCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ld OwotCQlpZiAoIWN0cmwtPmN0cmwgfHwgKGN0cmwgPT0gbV9jdHJsKSkKLQkJCWNvbnRpbnVlOwot Ci0JCXJjID0gZHNpX3BoeV9kaXNhYmxlKGN0cmwtPnBoeSk7Ci0JCWlmIChyYykKLQkJCXByX2Vy cigiWyVzXSBmYWlsZWQgdG8gZGlzYWJsZSBEU0kgUEhZLCByYz0lZFxuIiwKLQkJCSAgICAgICBk aXNwbGF5LT5uYW1lLCByYyk7Ci0JfQotCi0JcmMgPSBkc2lfcGh5X2Rpc2FibGUobV9jdHJsLT5w aHkpOwotCWlmIChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBkaXNhYmxlIERTSSBQSFks IHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCi0JcmV0dXJuIHJjOwot fQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3dha2VfdXAoc3RydWN0IGRzaV9kaXNwbGF5ICpk aXNwbGF5KQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X2Jyb2Fk Y2FzdF9jbWQoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAotCQkJCSAgICAgY29uc3Qgc3Ry dWN0IG1pcGlfZHNpX21zZyAqbXNnKQotewotCWludCByYyA9IDA7Ci0JdTMyIGZsYWdzLCBtX2Zs YWdzOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICpjdHJsLCAqbV9jdHJsOwotCWludCBpOwot Ci0JbV9mbGFncyA9IChEU0lfQ1RSTF9DTURfQlJPQURDQVNUIHwgRFNJX0NUUkxfQ01EX0JST0FE Q0FTVF9NQVNURVIgfAotCQkgICBEU0lfQ1RSTF9DTURfREVGRVJfVFJJR0dFUiB8IERTSV9DVFJM X0NNRF9GRVRDSF9NRU1PUlkpOwotCWZsYWdzID0gKERTSV9DVFJMX0NNRF9CUk9BRENBU1QgfCBE U0lfQ1RSTF9DTURfREVGRVJfVFJJR0dFUiB8Ci0JCSBEU0lfQ1RSTF9DTURfRkVUQ0hfTUVNT1JZ KTsKLQotCS8qCi0JICogMS4gU2V0dXAgY29tbWFuZHMgaW4gRklGTwotCSAqIDIuIFRyaWdnZXIg Y29tbWFuZHMKLQkgKi8KLQltX2N0cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNwbGF5LT5jbWRfbWFz dGVyX2lkeF07Ci0JcmMgPSBkc2lfY3RybF9jbWRfdHJhbnNmZXIobV9jdHJsLT5jdHJsLCBtc2cs IG1fZmxhZ3MpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gY21kIHRyYW5zZmVyIGZhaWxl ZCBvbiBtYXN0ZXIscmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdv dG8gZXJyb3I7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkr KykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCWlmIChjdHJsID09IG1fY3RybCkK LQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX2N0cmxfY21kX3RyYW5zZmVyKGN0cmwtPmN0cmws IG1zZywgZmxhZ3MpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBjbWQgdHJhbnNmZXIg ZmFpbGVkLCByYz0lZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCQlnb3Rv IGVycm9yOwotCQl9Ci0KLQkJcmMgPSBkc2lfY3RybF9jbWRfdHhfdHJpZ2dlcihjdHJsLT5jdHJs LCBmbGFncyk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGNtZCB0cmlnZ2VyIGZhaWxl ZCwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJv cjsKLQkJfQotCX0KLQotCXJjID0gZHNpX2N0cmxfY21kX3R4X3RyaWdnZXIobV9jdHJsLT5jdHJs LCBtX2ZsYWdzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGNtZCB0cmlnZ2VyIGZhaWxl ZCBmb3IgbWFzdGVyLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJ Z290byBlcnJvcjsKLQl9Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBk c2lfZGlzcGxheV9waHlfc3dfcmVzZXQoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewot CWludCByYyA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKm1fY3RybCwg KmN0cmw7Ci0KLQltX2N0cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNwbGF5LT5jbWRfbWFzdGVyX2lk eF07Ci0KLQlyYyA9IGRzaV9jdHJsX3BoeV9zd19yZXNldChtX2N0cmwtPmN0cmwpOwotCWlmIChy YykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHJlc2V0IHBoeSwgcmM9JWRcbiIsIGRpc3Bs YXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGlz cGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJ aWYgKCFjdHJsLT5jdHJsIHx8IChjdHJsID09IG1fY3RybCkpCi0JCQljb250aW51ZTsKLQotCQly YyA9IGRzaV9jdHJsX3BoeV9zd19yZXNldChjdHJsLT5jdHJsKTsKLQkJaWYgKHJjKSB7Ci0JCQlw cl9lcnIoIlslc10gZmFpbGVkIHRvIHJlc2V0IHBoeSwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlz cGxheS0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0KLQotZXJyb3I6Ci0JcmV0 dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9ob3N0X2F0dGFjaChzdHJ1Y3QgbWlwaV9kc2lf aG9zdCAqaG9zdCwKLQkJCSAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKLXsKLQlyZXR1 cm4gMDsKLX0KLQotc3RhdGljIGludCBkc2lfaG9zdF9kZXRhY2goc3RydWN0IG1pcGlfZHNpX2hv c3QgKmhvc3QsCi0JCQkgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kpCi17Ci0JcmV0dXJu IDA7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGRzaV9ob3N0X3RyYW5zZmVyKHN0cnVjdCBtaXBpX2Rz aV9ob3N0ICpob3N0LAotCQkJCSBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCi17Ci0J c3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5ID0gdG9fZHNpX2Rpc3BsYXkoaG9zdCk7Ci0Jc3Ry dWN0IGRzaV9kaXNwbGF5X2N0cmwgKmRpc3BsYXlfY3RybDsKLQlzdHJ1Y3QgbXNtX2dlbV9hZGRy ZXNzX3NwYWNlICphc3BhY2UgPSBOVUxMOwotCWludCByYyA9IDAsIGNudCA9IDA7Ci0KLQlpZiAo IWhvc3QgfHwgIW1zZykgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJu IDA7Ci0JfQotCi0JcmMgPSBkc2lfZGlzcGxheV9jbGtfY3RybChkaXNwbGF5LT5kc2lfY2xrX2hh bmRsZSwKLQkJCURTSV9BTExfQ0xLUywgRFNJX0NMS19PTik7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vy cigiWyVzXSBmYWlsZWQgdG8gZW5hYmxlIGFsbCBEU0kgY2xvY2tzLCByYz0lZFxuIiwKLQkJICAg ICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9k aXNwbGF5X3dha2VfdXAoZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWls ZWQgdG8gd2FrZSB1cCBkaXNwbGF5LCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUs IHJjKTsKLQkJZ290byBlcnJvcl9kaXNhYmxlX2Nsa3M7Ci0JfQotCi0JcmMgPSBkc2lfZGlzcGxh eV9jbWRfZW5naW5lX2VuYWJsZShkaXNwbGF5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNd IGZhaWxlZCB0byBlbmFibGUgY21kIGVuZ2luZSwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5 LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3JfZGlzYWJsZV9jbGtzOwotCX0KLQotCWlmIChkaXNw bGF5LT50eF9jbWRfYnVmID09IE5VTEwpIHsKLQkJZGlzcGxheS0+dHhfY21kX2J1ZiA9IG1zbV9n ZW1fbmV3KGRpc3BsYXktPmRybV9kZXYsCi0JCQkJU1pfNEssCi0JCQkJTVNNX0JPX1VOQ0FDSEVE KTsKLQotCQlkaXNwbGF5LT5jbWRfYnVmZmVyX3NpemUgPSBTWl80SzsKLQotCQlpZiAoKGRpc3Bs YXktPnR4X2NtZF9idWYpID09IE5VTEwpIHsKLQkJCXByX2VycigidmFsdWUgb2YgZGlzcGxheS0+ dHhfY21kX2J1ZiBpcyBOVUxMIik7Ci0JCQlnb3RvIGVycm9yX2Rpc2FibGVfY21kX2VuZ2luZTsK LQkJfQotCi0JCWFzcGFjZSA9IG1zbV9nZW1fc21tdV9hZGRyZXNzX3NwYWNlX2dldChkaXNwbGF5 LT5kcm1fZGV2LAotCQkJCU1TTV9TTU1VX0RPTUFJTl9VTlNFQ1VSRSk7Ci0JCWlmICghYXNwYWNl KSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgYXNwYWNlXG4iKTsKLQkJCXJjID0gLUVJTlZB TDsKLQkJCWdvdG8gZnJlZV9nZW07Ci0JCX0KLQotCQlyYyA9IG1zbV9nZW1fZ2V0X2lvdmEoZGlz cGxheS0+dHhfY21kX2J1ZiwgYXNwYWNlLAotCQkJCQkmKGRpc3BsYXktPmNtZF9idWZmZXJfaW92 YSkpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIGdldCB0aGUgaW92YSByYyAl ZFxuIiwgcmMpOwotCQkJZ290byBmcmVlX2dlbTsKLQkJfQotCi0JCWRpc3BsYXktPnZhZGRyID0K LQkJCSh2b2lkICopIG1zbV9nZW1fZ2V0X3ZhZGRyKGRpc3BsYXktPnR4X2NtZF9idWYpOwotCi0J CWlmIChJU19FUlJfT1JfTlVMTChkaXNwbGF5LT52YWRkcikpIHsKLQkJCXByX2VycigiZmFpbGVk IHRvIGdldCB2YSByYyAlZFxuIiwgcmMpOwotCQkJcmMgPSAtRUlOVkFMOwotCQkJZ290byBwdXRf aW92YTsKLQkJfQotCi0JCWZvciAoY250ID0gMDsgY250IDwgZGlzcGxheS0+Y3RybF9jb3VudDsg Y250KyspIHsKLQkJCWRpc3BsYXlfY3RybCA9ICZkaXNwbGF5LT5jdHJsW2NudF07Ci0JCQlkaXNw bGF5X2N0cmwtPmN0cmwtPmNtZF9idWZmZXJfc2l6ZSA9IFNaXzRLOwotCQkJZGlzcGxheV9jdHJs LT5jdHJsLT5jbWRfYnVmZmVyX2lvdmEgPQotCQkJCQkJZGlzcGxheS0+Y21kX2J1ZmZlcl9pb3Zh OwotCQkJZGlzcGxheV9jdHJsLT5jdHJsLT52YWRkciA9IGRpc3BsYXktPnZhZGRyOwotCQl9Ci0J fQotCi0JaWYgKGRpc3BsYXktPmN0cmxfY291bnQgPiAxICYmICEobXNnLT5mbGFncyAmIE1JUElf RFNJX01TR19VTklDQVNUKSkgewotCQlyYyA9IGRzaV9kaXNwbGF5X2Jyb2FkY2FzdF9jbWQoZGlz cGxheSwgbXNnKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gY21kIGJyb2FkY2FzdCBm YWlsZWQsIHJjPSVkXG4iLAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJCWdvdG8g ZXJyb3JfZGlzYWJsZV9jbWRfZW5naW5lOwotCQl9Ci0JfSBlbHNlIHsKLQkJaW50IGN0cmxfaWR4 ID0gKG1zZy0+ZmxhZ3MgJiBNSVBJX0RTSV9NU0dfVU5JQ0FTVCkgPwotCQkJCW1zZy0+Y3RybCA6 IDA7Ci0KLQkJcmMgPSBkc2lfY3RybF9jbWRfdHJhbnNmZXIoZGlzcGxheS0+Y3RybFtjdHJsX2lk eF0uY3RybCwgbXNnLAotCQkJCQkgIERTSV9DVFJMX0NNRF9GRVRDSF9NRU1PUlkpOwotCQlpZiAo cmMpIHsKLQkJCXByX2VycigiWyVzXSBjbWQgdHJhbnNmZXIgZmFpbGVkLCByYz0lZFxuIiwKLQkJ CSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yX2Rpc2FibGVfY21kX2Vu Z2luZTsKLQkJfQotCX0KLQotZXJyb3JfZGlzYWJsZV9jbWRfZW5naW5lOgotCSh2b2lkKWRzaV9k aXNwbGF5X2NtZF9lbmdpbmVfZGlzYWJsZShkaXNwbGF5KTsKLWVycm9yX2Rpc2FibGVfY2xrczoK LQlyYyA9IGRzaV9kaXNwbGF5X2Nsa19jdHJsKGRpc3BsYXktPmRzaV9jbGtfaGFuZGxlLAotCQkJ RFNJX0FMTF9DTEtTLCBEU0lfQ0xLX09GRik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBm YWlsZWQgdG8gZGlzYWJsZSBhbGwgRFNJIGNsb2NrcywgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNw bGF5LT5uYW1lLCByYyk7Ci0JfQotCXJldHVybiByYzsKLXB1dF9pb3ZhOgotCW1zbV9nZW1fcHV0 X2lvdmEoZGlzcGxheS0+dHhfY21kX2J1ZiwgYXNwYWNlKTsKLWZyZWVfZ2VtOgotCW11dGV4X2xv Y2soJmRpc3BsYXktPmRybV9kZXYtPnN0cnVjdF9tdXRleCk7Ci0JbXNtX2dlbV9mcmVlX29iamVj dChkaXNwbGF5LT50eF9jbWRfYnVmKTsKLQltdXRleF91bmxvY2soJmRpc3BsYXktPmRybV9kZXYt PnN0cnVjdF9tdXRleCk7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLQotc3RhdGljIHN0cnVj dCBtaXBpX2RzaV9ob3N0X29wcyBkc2lfaG9zdF9vcHMgPSB7Ci0JLmF0dGFjaCA9IGRzaV9ob3N0 X2F0dGFjaCwKLQkuZGV0YWNoID0gZHNpX2hvc3RfZGV0YWNoLAotCS50cmFuc2ZlciA9IGRzaV9o b3N0X3RyYW5zZmVyLAotfTsKLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9taXBpX2hvc3RfaW5p dChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3Qg bWlwaV9kc2lfaG9zdCAqaG9zdCA9ICZkaXNwbGF5LT5ob3N0OwotCi0JaG9zdC0+ZGV2ID0gJmRp c3BsYXktPnBkZXYtPmRldjsKLQlob3N0LT5vcHMgPSAmZHNpX2hvc3Rfb3BzOwotCi0JcmMgPSBt aXBpX2RzaV9ob3N0X3JlZ2lzdGVyKGhvc3QpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10g ZmFpbGVkIHRvIHJlZ2lzdGVyIG1pcGkgZHNpIGhvc3QsIHJjPSVkXG4iLAotCQkgICAgICAgZGlz cGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotZXJyb3I6Ci0JcmV0dXJuIHJj OwotfQotc3RhdGljIGludCBkc2lfZGlzcGxheV9taXBpX2hvc3RfZGVpbml0KHN0cnVjdCBkc2lf ZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBtaXBpX2RzaV9ob3N0 ICpob3N0ID0gJmRpc3BsYXktPmhvc3Q7Ci0KLQltaXBpX2RzaV9ob3N0X3VucmVnaXN0ZXIoaG9z dCk7Ci0KLQlob3N0LT5kZXYgPSBOVUxMOwotCWhvc3QtPm9wcyA9IE5VTEw7Ci0KLQlyZXR1cm4g cmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfY2xvY2tzX2RlaW5pdChzdHJ1Y3QgZHNp X2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2Nsa19saW5r X3NldCAqc3JjID0gJmRpc3BsYXktPmNsb2NrX2luZm8uc3JjX2Nsa3M7Ci0Jc3RydWN0IGRzaV9j bGtfbGlua19zZXQgKm11eCA9ICZkaXNwbGF5LT5jbG9ja19pbmZvLm11eF9jbGtzOwotCXN0cnVj dCBkc2lfY2xrX2xpbmtfc2V0ICpzaGFkb3cgPSAmZGlzcGxheS0+Y2xvY2tfaW5mby5zaGFkb3df Y2xrczsKLQotCWlmIChzcmMtPmJ5dGVfY2xrKSB7Ci0JCWRldm1fY2xrX3B1dCgmZGlzcGxheS0+ cGRldi0+ZGV2LCBzcmMtPmJ5dGVfY2xrKTsKLQkJc3JjLT5ieXRlX2NsayA9IE5VTEw7Ci0JfQot Ci0JaWYgKHNyYy0+cGl4ZWxfY2xrKSB7Ci0JCWRldm1fY2xrX3B1dCgmZGlzcGxheS0+cGRldi0+ ZGV2LCBzcmMtPnBpeGVsX2Nsayk7Ci0JCXNyYy0+cGl4ZWxfY2xrID0gTlVMTDsKLQl9Ci0KLQlp ZiAobXV4LT5ieXRlX2NsaykgewotCQlkZXZtX2Nsa19wdXQoJmRpc3BsYXktPnBkZXYtPmRldiwg bXV4LT5ieXRlX2Nsayk7Ci0JCW11eC0+Ynl0ZV9jbGsgPSBOVUxMOwotCX0KLQotCWlmIChtdXgt PnBpeGVsX2NsaykgewotCQlkZXZtX2Nsa19wdXQoJmRpc3BsYXktPnBkZXYtPmRldiwgbXV4LT5w aXhlbF9jbGspOwotCQltdXgtPnBpeGVsX2NsayA9IE5VTEw7Ci0JfQotCi0JaWYgKHNoYWRvdy0+ Ynl0ZV9jbGspIHsKLQkJZGV2bV9jbGtfcHV0KCZkaXNwbGF5LT5wZGV2LT5kZXYsIHNoYWRvdy0+ Ynl0ZV9jbGspOwotCQlzaGFkb3ctPmJ5dGVfY2xrID0gTlVMTDsKLQl9Ci0KLQlpZiAoc2hhZG93 LT5waXhlbF9jbGspIHsKLQkJZGV2bV9jbGtfcHV0KCZkaXNwbGF5LT5wZGV2LT5kZXYsIHNoYWRv dy0+cGl4ZWxfY2xrKTsKLQkJc2hhZG93LT5waXhlbF9jbGsgPSBOVUxMOwotCX0KLQotCXJldHVy biByYzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9jbG9ja3NfaW5pdChzdHJ1Y3QgZHNp X2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2Nsa19saW5r X3NldCAqc3JjID0gJmRpc3BsYXktPmNsb2NrX2luZm8uc3JjX2Nsa3M7Ci0Jc3RydWN0IGRzaV9j bGtfbGlua19zZXQgKm11eCA9ICZkaXNwbGF5LT5jbG9ja19pbmZvLm11eF9jbGtzOwotCXN0cnVj dCBkc2lfY2xrX2xpbmtfc2V0ICpzaGFkb3cgPSAmZGlzcGxheS0+Y2xvY2tfaW5mby5zaGFkb3df Y2xrczsKLQotCXNyYy0+Ynl0ZV9jbGsgPSBkZXZtX2Nsa19nZXQoJmRpc3BsYXktPnBkZXYtPmRl diwgInNyY19ieXRlX2NsayIpOwotCWlmIChJU19FUlJfT1JfTlVMTChzcmMtPmJ5dGVfY2xrKSkg ewotCQlyYyA9IFBUUl9FUlIoc3JjLT5ieXRlX2Nsayk7Ci0JCXNyYy0+Ynl0ZV9jbGsgPSBOVUxM OwotCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgc3JjX2J5dGVfY2xrLCByYz0lZFxuIiwgcmMpOwot CQlnb3RvIGVycm9yOwotCX0KLQotCXNyYy0+cGl4ZWxfY2xrID0gZGV2bV9jbGtfZ2V0KCZkaXNw bGF5LT5wZGV2LT5kZXYsICJzcmNfcGl4ZWxfY2xrIik7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKHNy Yy0+cGl4ZWxfY2xrKSkgewotCQlyYyA9IFBUUl9FUlIoc3JjLT5waXhlbF9jbGspOwotCQlzcmMt PnBpeGVsX2NsayA9IE5VTEw7Ci0JCXByX2VycigiZmFpbGVkIHRvIGdldCBzcmNfcGl4ZWxfY2xr LCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCW11eC0+Ynl0ZV9jbGsgPSBk ZXZtX2Nsa19nZXQoJmRpc3BsYXktPnBkZXYtPmRldiwgIm11eF9ieXRlX2NsayIpOwotCWlmIChJ U19FUlJfT1JfTlVMTChtdXgtPmJ5dGVfY2xrKSkgewotCQlyYyA9IFBUUl9FUlIobXV4LT5ieXRl X2Nsayk7Ci0JCXByX2RlYnVnKCJmYWlsZWQgdG8gZ2V0IG11eF9ieXRlX2NsaywgcmM9JWRcbiIs IHJjKTsKLQkJbXV4LT5ieXRlX2NsayA9IE5VTEw7Ci0JCS8qCi0JCSAqIFNraXAgZ2V0dGluZyBy ZXN0IG9mIGNsb2NrcyBzaW5jZSBvbmUgZmFpbGVkLiBUaGlzIGlzIGEKLQkJICogbm9uLWNyaXRp Y2FsIGZhaWx1cmUgc2luY2UgdGhlc2UgY2xvY2tzIGFyZSByZXF1aWVkIG9ubHkgZm9yCi0JCSAq IGR5bmFtaWMgcmVmcmVzaCB1c2UgY2FzZXMuCi0JCSAqLwotCQlyYyA9IDA7Ci0JCWdvdG8gZG9u ZTsKLQl9OwotCi0JbXV4LT5waXhlbF9jbGsgPSBkZXZtX2Nsa19nZXQoJmRpc3BsYXktPnBkZXYt PmRldiwgIm11eF9waXhlbF9jbGsiKTsKLQlpZiAoSVNfRVJSX09SX05VTEwobXV4LT5waXhlbF9j bGspKSB7Ci0JCXJjID0gUFRSX0VSUihtdXgtPnBpeGVsX2Nsayk7Ci0JCW11eC0+cGl4ZWxfY2xr ID0gTlVMTDsKLQkJcHJfZGVidWcoImZhaWxlZCB0byBnZXQgbXV4X3BpeGVsX2NsaywgcmM9JWRc biIsIHJjKTsKLQkJLyoKLQkJICogU2tpcCBnZXR0aW5nIHJlc3Qgb2YgY2xvY2tzIHNpbmNlIG9u ZSBmYWlsZWQuIFRoaXMgaXMgYQotCQkgKiBub24tY3JpdGljYWwgZmFpbHVyZSBzaW5jZSB0aGVz ZSBjbG9ja3MgYXJlIHJlcXVpZWQgb25seSBmb3IKLQkJICogZHluYW1pYyByZWZyZXNoIHVzZSBj YXNlcy4KLQkJICovCi0JCXJjID0gMDsKLQkJZ290byBkb25lOwotCX07Ci0KLQlzaGFkb3ctPmJ5 dGVfY2xrID0gZGV2bV9jbGtfZ2V0KCZkaXNwbGF5LT5wZGV2LT5kZXYsICJzaGFkb3dfYnl0ZV9j bGsiKTsKLQlpZiAoSVNfRVJSX09SX05VTEwoc2hhZG93LT5ieXRlX2NsaykpIHsKLQkJcmMgPSBQ VFJfRVJSKHNoYWRvdy0+Ynl0ZV9jbGspOwotCQlzaGFkb3ctPmJ5dGVfY2xrID0gTlVMTDsKLQkJ cHJfZXJyKCJmYWlsZWQgdG8gZ2V0IHNoYWRvd19ieXRlX2NsaywgcmM9JWRcbiIsIHJjKTsKLQkJ LyoKLQkJICogU2tpcCBnZXR0aW5nIHJlc3Qgb2YgY2xvY2tzIHNpbmNlIG9uZSBmYWlsZWQuIFRo aXMgaXMgYQotCQkgKiBub24tY3JpdGljYWwgZmFpbHVyZSBzaW5jZSB0aGVzZSBjbG9ja3MgYXJl IHJlcXVpZWQgb25seSBmb3IKLQkJICogZHluYW1pYyByZWZyZXNoIHVzZSBjYXNlcy4KLQkJICov Ci0JCXJjID0gMDsKLQkJZ290byBkb25lOwotCX07Ci0KLQlzaGFkb3ctPnBpeGVsX2NsayA9IGRl dm1fY2xrX2dldCgmZGlzcGxheS0+cGRldi0+ZGV2LAotCQkJCQkgInNoYWRvd19waXhlbF9jbGsi KTsKLQlpZiAoSVNfRVJSX09SX05VTEwoc2hhZG93LT5waXhlbF9jbGspKSB7Ci0JCXJjID0gUFRS X0VSUihzaGFkb3ctPnBpeGVsX2Nsayk7Ci0JCXNoYWRvdy0+cGl4ZWxfY2xrID0gTlVMTDsKLQkJ cHJfZXJyKCJmYWlsZWQgdG8gZ2V0IHNoYWRvd19waXhlbF9jbGssIHJjPSVkXG4iLCByYyk7Ci0J CS8qCi0JCSAqIFNraXAgZ2V0dGluZyByZXN0IG9mIGNsb2NrcyBzaW5jZSBvbmUgZmFpbGVkLiBU aGlzIGlzIGEKLQkJICogbm9uLWNyaXRpY2FsIGZhaWx1cmUgc2luY2UgdGhlc2UgY2xvY2tzIGFy ZSByZXF1aWVkIG9ubHkgZm9yCi0JCSAqIGR5bmFtaWMgcmVmcmVzaCB1c2UgY2FzZXMuCi0JCSAq LwotCQlyYyA9IDA7Ci0JCWdvdG8gZG9uZTsKLQl9OwotCi1kb25lOgotCXJldHVybiAwOwotZXJy b3I6Ci0JKHZvaWQpZHNpX2Rpc3BsYXlfY2xvY2tzX2RlaW5pdChkaXNwbGF5KTsKLQlyZXR1cm4g cmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfY2xrX2N0cmxfY2Iodm9pZCAqcHJpdiwK LQlzdHJ1Y3QgZHNpX2Nsa19jdHJsX2luZm8gY2xrX3N0YXRlX2luZm8pCi17Ci0JaW50IHJjID0g MDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkgPSBOVUxMOwotCXZvaWQgKmNsa19oYW5k bGUgPSBOVUxMOwotCi0JaWYgKCFwcml2KSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIp OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkaXNwbGF5ID0gcHJpdjsKLQotCWlmIChjbGtf c3RhdGVfaW5mby5jbGllbnQgPT0gRFNJX0NMS19SRVFfTURQX0NMSUVOVCkgewotCQljbGtfaGFu ZGxlID0gZGlzcGxheS0+bWRwX2Nsa19oYW5kbGU7Ci0JfSBlbHNlIGlmIChjbGtfc3RhdGVfaW5m by5jbGllbnQgPT0gRFNJX0NMS19SRVFfRFNJX0NMSUVOVCkgewotCQljbGtfaGFuZGxlID0gZGlz cGxheS0+ZHNpX2Nsa19oYW5kbGU7Ci0JfSBlbHNlIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGNsayBo YW5kbGUsIHJldHVybiBlcnJvclxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qCi0J ICogVE9ETzogV2FpdCBmb3IgQ01EX01EUF9ET05FIGludGVycnVwdCBpZiBNRFAgY2xpZW50IHRy aWVzCi0JICogdG8gdHVybiBvZmYgRFNJIGNsb2Nrcy4KLQkgKi8KLQlyYyA9IGRzaV9kaXNwbGF5 X2Nsa19jdHJsKGNsa19oYW5kbGUsCi0JCWNsa19zdGF0ZV9pbmZvLmNsa190eXBlLCBjbGtfc3Rh dGVfaW5mby5jbGtfc3RhdGUpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRv ICVkIERTSSAlZCBjbG9ja3MsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgY2xr X3N0YXRlX2luZm8uY2xrX3N0YXRlLAotCQkgICAgICAgY2xrX3N0YXRlX2luZm8uY2xrX3R5cGUs IHJjKTsKLQkJcmV0dXJuIHJjOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGRzaV9wcmVfY2xr b2ZmX2NiKHZvaWQgKnByaXYsCi0JCQkgICBlbnVtIGRzaV9jbGtfdHlwZSBjbGssCi0JCQkgICBl bnVtIGRzaV9jbGtfc3RhdGUgbmV3X3N0YXRlKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRz aV9kaXNwbGF5ICpkaXNwbGF5ID0gcHJpdjsKLQotCWlmICgoY2xrICYgRFNJX0xJTktfQ0xLKSAm JiAobmV3X3N0YXRlID09IERTSV9DTEtfT0ZGKSkgewotCQkvKgotCQkgKiBJZiBVTFBTIGZlYXR1 cmUgaXMgZW5hYmxlZCwgZW50ZXIgVUxQUyBmaXJzdC4KLQkJICovCi0JCWlmIChkc2lfcGFuZWxf aW5pdGlhbGl6ZWQoZGlzcGxheS0+cGFuZWwpICYmCi0JCQlkc2lfcGFuZWxfdWxwc19mZWF0dXJl X2VuYWJsZWQoZGlzcGxheS0+cGFuZWwpKSB7Ci0JCQlyYyA9IGRzaV9kaXNwbGF5X3NldF91bHBz KGRpc3BsYXksIHRydWUpOwotCQkJaWYgKHJjKSB7Ci0JCQkJcHJfZXJyKCIlczogZmFpbGVkIGVu YWJsZSB1bHBzLCByYyA9ICVkXG4iLAotCQkJICAgICAgIF9fZnVuY19fLCByYyk7Ci0JCQl9Ci0J CX0KLQl9Ci0KLQlpZiAoKGNsayAmIERTSV9DT1JFX0NMSykgJiYgKG5ld19zdGF0ZSA9PSBEU0lf Q0xLX09GRikpIHsKLQkJLyoKLQkJICogRW5hYmxlIERTSSBjbGFtcHMgb25seSBpZiBlbnRlcmlu ZyBpZGxlIHBvd2VyIGNvbGxhcHNlLgotCQkgKi8KLQkJaWYgKGRzaV9wYW5lbF9pbml0aWFsaXpl ZChkaXNwbGF5LT5wYW5lbCkpIHsKLQkJCWRzaV9kaXNwbGF5X3BoeV9pZGxlX29mZihkaXNwbGF5 KTsKLQkJCXJjID0gZHNpX2Rpc3BsYXlfc2V0X2NsYW1wKGRpc3BsYXksIHRydWUpOwotCQkJaWYg KHJjKQotCQkJCXByX2VycigiJXM6IEZhaWxlZCB0byBlbmFibGUgZHNpIGNsYW1wcy4gcmM9JWRc biIsCi0JCQkJCV9fZnVuY19fLCByYyk7Ci0KLQkJCXJjID0gZHNpX2Rpc3BsYXlfcGh5X3Jlc2V0 X2NvbmZpZyhkaXNwbGF5LCBmYWxzZSk7Ci0JCQlpZiAocmMpCi0JCQkJcHJfZXJyKCIlczogRmFp bGVkIHRvIHJlc2V0IHBoeSwgcmM9JWRcbiIsCi0JCQkJCQlfX2Z1bmNfXywgcmMpOwotCQl9IGVs c2UgewotCQkJLyogTWFrZSBzdXJlIHRoYXQgY29udHJvbGxlciBpcyBub3QgaW4gVUxQUyBzdGF0 ZSB3aGVuCi0JCQkgKiB0aGUgRFNJIGxpbmsgaXMgbm90IGFjdGl2ZS4KLQkJCSAqLwotCQkJcmMg PSBkc2lfZGlzcGxheV9zZXRfdWxwcyhkaXNwbGF5LCBmYWxzZSk7Ci0JCQlpZiAocmMpCi0JCQkJ cHJfZXJyKCIlczogZmFpbGVkIHRvIGRpc2FibGUgdWxwcy4gcmM9JWRcbiIsCi0JCQkJCV9fZnVu Y19fLCByYyk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfcG9zdF9jbGtv bl9jYih2b2lkICpwcml2LAotCQkJICAgZW51bSBkc2lfY2xrX3R5cGUgY2xrLAotCQkJICAgZW51 bSBkc2lfY2xrX3N0YXRlIGN1cnJfc3RhdGUpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNp X2Rpc3BsYXkgKmRpc3BsYXkgPSBwcml2OwotCWJvb2wgbW1zc19jbGFtcCA9IGZhbHNlOwotCi0J aWYgKGNsayAmIERTSV9DT1JFX0NMSykgewotCQltbXNzX2NsYW1wID0gZGlzcGxheS0+Y2xhbXBf ZW5hYmxlZDsKLQkJLyoKLQkJICogY29udHJvbGxlciBzZXR1cCBpcyBuZWVkZWQgaWYgY29taW5n IG91dCBvZiBpZGxlCi0JCSAqIHBvd2VyIGNvbGxhcHNlIHdpdGggY2xhbXBzIGVuYWJsZWQuCi0J CSAqLwotCQlpZiAobW1zc19jbGFtcCkKLQkJCWRzaV9kaXNwbGF5X2N0cmxfc2V0dXAoZGlzcGxh eSk7Ci0KLQkJaWYgKGRpc3BsYXktPnVscHNfZW5hYmxlZCAmJiBtbXNzX2NsYW1wKSB7Ci0JCQkv KgotCQkJICogVUxQUyBFbnRyeSBSZXF1ZXN0LiBUaGlzIGlzIG5lZWRlZCBpZiB0aGUgbGFuZXMg d2VyZQotCQkJICogaW4gVUxQUyBwcmlvciB0byBwb3dlciBjb2xsYXBzZSwgc2luY2UgYWZ0ZXIK LQkJCSAqIHBvd2VyIGNvbGxhcHNlIGFuZCByZXNldCwgdGhlIERTSSBjb250cm9sbGVyIHJlc2V0 cwotCQkJICogYmFjayB0byBpZGxlIHN0YXRlIGFuZCBub3QgVUxQUy4gVGhpcyB1bHBzIGVudHJ5 Ci0JCQkgKiByZXF1ZXN0IHdpbGwgdHJhbnNpdGlvbiB0aGUgc3RhdGUgb2YgdGhlIERTSQotCQkJ ICogY29udHJvbGxlciB0byBVTFBTIHdoaWNoIHdpbGwgbWF0Y2ggdGhlIHN0YXRlIG9mIHRoZQot CQkJICogRFNJIHBoeS4gVGhpcyBuZWVkcyB0byBiZSBkb25lIHByaW9yIHRvIGRpc2FibGluZwot CQkJICogdGhlIERTSSBjbGFtcHMuCi0JCQkgKgotCQkJICogQWxzbywgcmVzZXQgdGhlIHVscHMg ZmxhZyBzbyB0aGF0IHVscHNfY29uZmlnCi0JCQkgKiBmdW5jdGlvbiB3b3VsZCByZWNvbmZpZ3Vy ZSB0aGUgY29udHJvbGxlciBzdGF0ZSB0bwotCQkJICogVUxQUy4KLQkJCSAqLwotCQkJZGlzcGxh eS0+dWxwc19lbmFibGVkID0gZmFsc2U7Ci0JCQlyYyA9IGRzaV9kaXNwbGF5X3NldF91bHBzKGRp c3BsYXksIHRydWUpOwotCQkJaWYgKHJjKSB7Ci0JCQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGVu dGVyIFVMUFMuIHJjPSVkXG4iLAotCQkJCQlfX2Z1bmNfXywgcmMpOwotCQkJCWdvdG8gZXJyb3I7 Ci0JCQl9Ci0JCX0KLQotCQlyYyA9IGRzaV9kaXNwbGF5X3BoeV9yZXNldF9jb25maWcoZGlzcGxh eSwgdHJ1ZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIHJlc2V0IHBo eSwgcmM9JWRcbiIsCi0JCQkJCQlfX2Z1bmNfXywgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQot Ci0JCXJjID0gZHNpX2Rpc3BsYXlfc2V0X2NsYW1wKGRpc3BsYXksIGZhbHNlKTsKLQkJaWYgKHJj KSB7Ci0JCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gZGlzYWJsZSBkc2kgY2xhbXBzLiByYz0lZFxu IiwKLQkJCQlfX2Z1bmNfXywgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCi0JCS8qCi0JCSAq IFBoeSBzZXR1cCBpcyBuZWVkZWQgaWYgY29taW5nIG91dCBvZiBpZGxlCi0JCSAqIHBvd2VyIGNv bGxhcHNlIHdpdGggY2xhbXBzIGVuYWJsZWQuCi0JCSAqLwotCQlpZiAoZGlzcGxheS0+cGh5X2lk bGVfcG93ZXJfb2ZmIHx8IG1tc3NfY2xhbXApCi0JCQlkc2lfZGlzcGxheV9waHlfaWRsZV9vbihk aXNwbGF5LCBtbXNzX2NsYW1wKTsKLQl9Ci0JaWYgKGNsayAmIERTSV9MSU5LX0NMSykgewotCQlp ZiAoZGlzcGxheS0+dWxwc19lbmFibGVkKSB7Ci0JCQlyYyA9IGRzaV9kaXNwbGF5X3NldF91bHBz KGRpc3BsYXksIGZhbHNlKTsKLQkJCWlmIChyYykgewotCQkJCXByX2VycigiJXM6IGZhaWxlZCB0 byBkaXNhYmxlIHVscHMsIHJjPSAlZFxuIiwKLQkJCQkgICAgICAgX19mdW5jX18sIHJjKTsKLQkJ CQlnb3RvIGVycm9yOwotCQkJfQotCQl9Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1p bnQgZHNpX3Bvc3RfY2xrb2ZmX2NiKHZvaWQgKnByaXYsCi0JCQkgICAgZW51bSBkc2lfY2xrX3R5 cGUgY2xrX3R5cGUsCi0JCQkgICAgZW51bSBkc2lfY2xrX3N0YXRlIGN1cnJfc3RhdGUpCi17Ci0J aW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkgPSBwcml2OwotCi0JaWYg KCFkaXNwbGF5KSB7Ci0JCXByX2VycigiJXM6IEludmFsaWQgYXJnXG4iLCBfX2Z1bmNfXyk7Ci0J CXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICgoY2xrX3R5cGUgJiBEU0lfQ09SRV9DTEspICYm Ci0JICAgIChjdXJyX3N0YXRlID09IERTSV9DTEtfT0ZGKSkgewotCi0JCXJjID0gZHNpX2Rpc3Bs YXlfcGh5X3Bvd2VyX29mZihkaXNwbGF5KTsKLQkJaWYgKHJjKQotCQkJcHJfZXJyKCJbJXNdIGZh aWxlZCB0byBwb3dlciBvZmYgUEhZLCByYz0lZFxuIiwKLQkJCQkgICBkaXNwbGF5LT5uYW1lLCBy Yyk7Ci0KLQkJcmMgPSBkc2lfZGlzcGxheV9jdHJsX3Bvd2VyX29mZihkaXNwbGF5KTsKLQkJaWYg KHJjKQotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBwb3dlciBEU0kgdnJlZ3MsIHJjPSVkXG4i LAotCQkJCSAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQl9Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQg ZHNpX3ByZV9jbGtvbl9jYih2b2lkICpwcml2LAotCQkJICBlbnVtIGRzaV9jbGtfdHlwZSBjbGtf dHlwZSwKLQkJCSAgZW51bSBkc2lfY2xrX3N0YXRlIG5ld19zdGF0ZSkKLXsKLQlpbnQgcmMgPSAw OwotCXN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSA9IHByaXY7Ci0KLQlpZiAoIWRpc3BsYXkp IHsKLQkJcHJfZXJyKCIlczogaW52YWxpZCBpbnB1dFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4g LUVJTlZBTDsKLQl9Ci0KLQlpZiAoKGNsa190eXBlICYgRFNJX0NPUkVfQ0xLKSAmJiAobmV3X3N0 YXRlID09IERTSV9DTEtfT04pKSB7Ci0JCS8qCi0JCSAqIEVuYWJsZSBEU0kgY29yZSBwb3dlcgot CQkgKiAxLj4gUEFORUxfUE0gYXJlIGNvbnRyb2xsZWQgYXMgcGFydCBvZgotCQkgKiAgICAgcGFu ZWxfcG93ZXJfY3RybC4gTmVlZGVkIG5vdCBiZSBoYW5kbGVkIGhlcmUuCi0JCSAqIDIuPiBDT1JF X1BNIGFyZSBjb250cm9sbGVkIGJ5IGRzaSBjbGsgbWFuYWdlci4KLQkJICogMy4+IENUUkxfUE0g bmVlZCB0byBiZSBlbmFibGVkL2Rpc2FibGVkCi0JCSAqICAgICBvbmx5IGR1cmluZyB1bmJsYW5r L2JsYW5rLiBUaGVpciBzdGF0ZSBzaG91bGQKLQkJICogICAgIG5vdCBiZSBjaGFuZ2VkIGR1cmlu ZyBzdGF0aWMgc2NyZWVuLgotCQkgKi8KLQotCQlyYyA9IGRzaV9kaXNwbGF5X2N0cmxfcG93ZXJf b24oZGlzcGxheSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBwb3dl ciBvbiBkc2kgY29udHJvbGxlcnMsIHJjPSVkXG4iLAotCQkJCSAgIGRpc3BsYXktPm5hbWUsIHJj KTsKLQkJCXJldHVybiByYzsKLQkJfQotCi0JCXJjID0gZHNpX2Rpc3BsYXlfcGh5X3Bvd2VyX29u KGRpc3BsYXkpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gcG93ZXIg b24gZHNpIHBoeSwgcmMgPSAlZFxuIiwKLQkJCQkgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCQly ZXR1cm4gcmM7Ci0JCX0KLQotCQlwcl9kZWJ1ZygiJXM6IEVuYWJsZSBEU0kgY29yZSBwb3dlclxu IiwgX19mdW5jX18pOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgX19zZXRf bGFuZV9tYXBfdjIodTggKmxhbmVfbWFwX3YyLAotCWVudW0gZHNpX3BoeV9kYXRhX2xhbmVzIGxh bmUwLAotCWVudW0gZHNpX3BoeV9kYXRhX2xhbmVzIGxhbmUxLAotCWVudW0gZHNpX3BoeV9kYXRh X2xhbmVzIGxhbmUyLAotCWVudW0gZHNpX3BoeV9kYXRhX2xhbmVzIGxhbmUzKQotewotCWxhbmVf bWFwX3YyW0RTSV9MT0dJQ0FMX0xBTkVfMF0gPSBsYW5lMDsKLQlsYW5lX21hcF92MltEU0lfTE9H SUNBTF9MQU5FXzFdID0gbGFuZTE7Ci0JbGFuZV9tYXBfdjJbRFNJX0xPR0lDQUxfTEFORV8yXSA9 IGxhbmUyOwotCWxhbmVfbWFwX3YyW0RTSV9MT0dJQ0FMX0xBTkVfM10gPSBsYW5lMzsKLX0KLQot c3RhdGljIGludCBkc2lfZGlzcGxheV9wYXJzZV9sYW5lX21hcChzdHJ1Y3QgZHNpX2Rpc3BsYXkg KmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMCwgaSA9IDA7Ci0JY29uc3QgY2hhciAqZGF0YTsKLQl1 OCB0ZW1wW0RTSV9MQU5FX01BWCAtIDFdOwotCi0JaWYgKCFkaXNwbGF5KSB7Ci0JCXByX2Vycigi aW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBsYW5lLW1h cC12MiBzdXBlcnNlZGVzIGxhbmUtbWFwLXYxIHNldHRpbmcgKi8KLQlyYyA9IG9mX3Byb3BlcnR5 X3JlYWRfdThfYXJyYXkoZGlzcGxheS0+cGRldi0+ZGV2Lm9mX25vZGUsCi0JCSJxY29tLGxhbmUt bWFwLXYyIiwgdGVtcCwgKERTSV9MQU5FX01BWCAtIDEpKTsKLQlpZiAoIXJjKSB7Ci0JCWZvciAo aSA9IERTSV9MT0dJQ0FMX0xBTkVfMDsgaSA8IChEU0lfTEFORV9NQVggLSAxKTsgaSsrKQotCQkJ ZGlzcGxheS0+bGFuZV9tYXAubGFuZV9tYXBfdjJbaV0gPSBCSVQodGVtcFtpXSk7Ci0JCXJldHVy biAwOwotCX0gZWxzZSBpZiAocmMgIT0gRUlOVkFMKSB7Ci0JCXByX2RlYnVnKCJJbmNvcnJlY3Qg bWFwcGluZywgY29uZmlndXJlIGRlZmF1bHRcbiIpOwotCQlnb3RvIHNldF9kZWZhdWx0OwotCX0K LQotCS8qIGxhbmUtbWFwIG9sZGVyIHZlcnNpb24sIGZvciBEU0kgY29udHJvbGxlciB2ZXJzaW9u IDwgMi4wICovCi0JZGF0YSA9IG9mX2dldF9wcm9wZXJ0eShkaXNwbGF5LT5wZGV2LT5kZXYub2Zf bm9kZSwKLQkJInFjb20sbGFuZS1tYXAiLCBOVUxMKTsKLQlpZiAoIWRhdGEpCi0JCWdvdG8gc2V0 X2RlZmF1bHQ7Ci0KLQlpZiAoIXN0cmNtcChkYXRhLCAibGFuZV9tYXBfMzAxMiIpKSB7Ci0JCWRp c3BsYXktPmxhbmVfbWFwLmxhbmVfbWFwX3YxID0gRFNJX0xBTkVfTUFQXzMwMTI7Ci0JCV9fc2V0 X2xhbmVfbWFwX3YyKGRpc3BsYXktPmxhbmVfbWFwLmxhbmVfbWFwX3YyLAotCQkJRFNJX1BIWVNJ Q0FMX0xBTkVfMSwKLQkJCURTSV9QSFlTSUNBTF9MQU5FXzIsCi0JCQlEU0lfUEhZU0lDQUxfTEFO RV8zLAotCQkJRFNJX1BIWVNJQ0FMX0xBTkVfMCk7Ci0JfSBlbHNlIGlmICghc3RyY21wKGRhdGEs ICJsYW5lX21hcF8yMzAxIikpIHsKLQkJZGlzcGxheS0+bGFuZV9tYXAubGFuZV9tYXBfdjEgPSBE U0lfTEFORV9NQVBfMjMwMTsKLQkJX19zZXRfbGFuZV9tYXBfdjIoZGlzcGxheS0+bGFuZV9tYXAu bGFuZV9tYXBfdjIsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8yLAotCQkJRFNJX1BIWVNJQ0FMX0xB TkVfMywKLQkJCURTSV9QSFlTSUNBTF9MQU5FXzAsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8xKTsK LQl9IGVsc2UgaWYgKCFzdHJjbXAoZGF0YSwgImxhbmVfbWFwXzEyMzAiKSkgewotCQlkaXNwbGF5 LT5sYW5lX21hcC5sYW5lX21hcF92MSA9IERTSV9MQU5FX01BUF8xMjMwOwotCQlfX3NldF9sYW5l X21hcF92MihkaXNwbGF5LT5sYW5lX21hcC5sYW5lX21hcF92MiwKLQkJCURTSV9QSFlTSUNBTF9M QU5FXzMsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8wLAotCQkJRFNJX1BIWVNJQ0FMX0xBTkVfMSwK LQkJCURTSV9QSFlTSUNBTF9MQU5FXzIpOwotCX0gZWxzZSBpZiAoIXN0cmNtcChkYXRhLCAibGFu ZV9tYXBfMDMyMSIpKSB7Ci0JCWRpc3BsYXktPmxhbmVfbWFwLmxhbmVfbWFwX3YxID0gRFNJX0xB TkVfTUFQXzAzMjE7Ci0JCV9fc2V0X2xhbmVfbWFwX3YyKGRpc3BsYXktPmxhbmVfbWFwLmxhbmVf bWFwX3YyLAotCQkJRFNJX1BIWVNJQ0FMX0xBTkVfMCwKLQkJCURTSV9QSFlTSUNBTF9MQU5FXzMs Ci0JCQlEU0lfUEhZU0lDQUxfTEFORV8yLAotCQkJRFNJX1BIWVNJQ0FMX0xBTkVfMSk7Ci0JfSBl bHNlIGlmICghc3RyY21wKGRhdGEsICJsYW5lX21hcF8xMDMyIikpIHsKLQkJZGlzcGxheS0+bGFu ZV9tYXAubGFuZV9tYXBfdjEgPSBEU0lfTEFORV9NQVBfMTAzMjsKLQkJX19zZXRfbGFuZV9tYXBf djIoZGlzcGxheS0+bGFuZV9tYXAubGFuZV9tYXBfdjIsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8x LAotCQkJRFNJX1BIWVNJQ0FMX0xBTkVfMCwKLQkJCURTSV9QSFlTSUNBTF9MQU5FXzMsCi0JCQlE U0lfUEhZU0lDQUxfTEFORV8yKTsKLQl9IGVsc2UgaWYgKCFzdHJjbXAoZGF0YSwgImxhbmVfbWFw XzIxMDMiKSkgewotCQlkaXNwbGF5LT5sYW5lX21hcC5sYW5lX21hcF92MSA9IERTSV9MQU5FX01B UF8yMTAzOwotCQlfX3NldF9sYW5lX21hcF92MihkaXNwbGF5LT5sYW5lX21hcC5sYW5lX21hcF92 MiwKLQkJCURTSV9QSFlTSUNBTF9MQU5FXzIsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8xLAotCQkJ RFNJX1BIWVNJQ0FMX0xBTkVfMCwKLQkJCURTSV9QSFlTSUNBTF9MQU5FXzMpOwotCX0gZWxzZSBp ZiAoIXN0cmNtcChkYXRhLCAibGFuZV9tYXBfMzIxMCIpKSB7Ci0JCWRpc3BsYXktPmxhbmVfbWFw LmxhbmVfbWFwX3YxID0gRFNJX0xBTkVfTUFQXzMyMTA7Ci0JCV9fc2V0X2xhbmVfbWFwX3YyKGRp c3BsYXktPmxhbmVfbWFwLmxhbmVfbWFwX3YyLAotCQkJRFNJX1BIWVNJQ0FMX0xBTkVfMywKLQkJ CURTSV9QSFlTSUNBTF9MQU5FXzIsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8xLAotCQkJRFNJX1BI WVNJQ0FMX0xBTkVfMCk7Ci0JfSBlbHNlIHsKLQkJcHJfd2FybigiJXM6IGludmFsaWQgbGFuZSBt YXAgJXMgc3BlY2lmaWVkLiBkZWZhdWx0aW5nIHRvIGxhbmVfbWFwMDEyM1xuIiwKLQkJCV9fZnVu Y19fLCBkYXRhKTsKLQkJZ290byBzZXRfZGVmYXVsdDsKLQl9Ci0JcmV0dXJuIDA7Ci0KLXNldF9k ZWZhdWx0OgotCS8qIGRlZmF1bHQgbGFuZSBtYXBwaW5nICovCi0JX19zZXRfbGFuZV9tYXBfdjIo ZGlzcGxheS0+bGFuZV9tYXAubGFuZV9tYXBfdjIsIERTSV9QSFlTSUNBTF9MQU5FXzAsCi0JCURT SV9QSFlTSUNBTF9MQU5FXzEsIERTSV9QSFlTSUNBTF9MQU5FXzIsIERTSV9QSFlTSUNBTF9MQU5F XzMpOwotCWRpc3BsYXktPmxhbmVfbWFwLmxhbmVfbWFwX3YxID0gRFNJX0xBTkVfTUFQXzAxMjM7 Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfcGFyc2VfZHQoc3RydWN0 IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0JaW50IGk7Ci0JdTMyIHBo eV9jb3VudCA9IDA7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlOwotCi0JLyogUGFyc2Ug Y29udHJvbGxlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0RTSV9DVFJMU19QRVJfRElTUExB WTsgaSsrKSB7Ci0JCW9mX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKGRpc3BsYXktPnBkZXYtPmRl di5vZl9ub2RlLAotCQkJCQkgICAicWNvbSxkc2ktY3RybCIsIGkpOwotCQlpZiAoIW9mX25vZGUp IHsKLQkJCWlmICghaSkgewotCQkJCXByX2VycigiTm8gY29udHJvbGxlcnMgcHJlc2VudFxuIik7 Ci0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCi0JCWRpc3BsYXkt PmN0cmxbaV0uY3RybF9vZl9ub2RlID0gb2Zfbm9kZTsKLQkJZGlzcGxheS0+Y3RybF9jb3VudCsr OwotCX0KLQotCS8qIFBhcnNlIFBoeXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0RTSV9DVFJM U19QRVJfRElTUExBWTsgaSsrKSB7Ci0JCW9mX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKGRpc3Bs YXktPnBkZXYtPmRldi5vZl9ub2RlLAotCQkJCQkgICAicWNvbSxkc2ktcGh5IiwgaSk7Ci0JCWlm ICghb2Zfbm9kZSkgewotCQkJaWYgKCFpKSB7Ci0JCQkJcHJfZXJyKCJObyBQSFkgZGV2aWNlcyBw cmVzZW50XG4iKTsKLQkJCQlyYyA9IC1FTk9ERVY7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJ CWJyZWFrOwotCQl9Ci0KLQkJZGlzcGxheS0+Y3RybFtpXS5waHlfb2Zfbm9kZSA9IG9mX25vZGU7 Ci0JCXBoeV9jb3VudCsrOwotCX0KLQotCWlmIChwaHlfY291bnQgIT0gZGlzcGxheS0+Y3RybF9j b3VudCkgewotCQlwcl9lcnIoIk51bWJlciBvZiBjb250cm9sbGVycyBkb2VzIG5vdCBtYXRjaCBQ SFlzXG4iKTsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIGVycm9yOwotCX0KLQotCW9mX25vZGUg PSBvZl9wYXJzZV9waGFuZGxlKGRpc3BsYXktPnBkZXYtPmRldi5vZl9ub2RlLAotCQkJCSAgICJx Y29tLGRzaS1wYW5lbCIsIDApOwotCWlmICghb2Zfbm9kZSkgewotCQlwcl9lcnIoIk5vIFBhbmVs IGRldmljZSBwcmVzZW50XG4iKTsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIGVycm9yOwotCX0g ZWxzZSB7Ci0JCWRpc3BsYXktPnBhbmVsX29mID0gb2Zfbm9kZTsKLQl9Ci0KLWVycm9yOgotCXJl dHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9yZXNfaW5pdChzdHJ1Y3QgZHNp X2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNp X2Rpc3BsYXlfY3RybCAqY3RybDsKLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2Nv dW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQljdHJsLT5jdHJsID0g ZHNpX2N0cmxfZ2V0KGN0cmwtPmN0cmxfb2Zfbm9kZSk7Ci0JCWlmIChJU19FUlJfT1JfTlVMTChj dHJsLT5jdHJsKSkgewotCQkJcmMgPSBQVFJfRVJSKGN0cmwtPmN0cmwpOwotCQkJcHJfZXJyKCJm YWlsZWQgdG8gZ2V0IGRzaSBjb250cm9sbGVyLCByYz0lZFxuIiwgcmMpOwotCQkJY3RybC0+Y3Ry bCA9IE5VTEw7Ci0JCQlnb3RvIGVycm9yX2N0cmxfcHV0OwotCQl9Ci0KLQkJY3RybC0+cGh5ID0g ZHNpX3BoeV9nZXQoY3RybC0+cGh5X29mX25vZGUpOwotCQlpZiAoSVNfRVJSX09SX05VTEwoY3Ry bC0+cGh5KSkgewotCQkJcmMgPSBQVFJfRVJSKGN0cmwtPnBoeSk7Ci0JCQlwcl9lcnIoImZhaWxl ZCB0byBnZXQgcGh5IGNvbnRyb2xsZXIsIHJjPSVkXG4iLCByYyk7Ci0JCQlkc2lfY3RybF9wdXQo Y3RybC0+Y3RybCk7Ci0JCQljdHJsLT5waHkgPSBOVUxMOwotCQkJZ290byBlcnJvcl9jdHJsX3B1 dDsKLQkJfQotCX0KLQotCWRpc3BsYXktPnBhbmVsID0gZHNpX3BhbmVsX2dldCgmZGlzcGxheS0+ cGRldi0+ZGV2LCBkaXNwbGF5LT5wYW5lbF9vZiwKLQkJCQkJCWRpc3BsYXktPmNtZGxpbmVfdG9w b2xvZ3kpOwotCWlmIChJU19FUlJfT1JfTlVMTChkaXNwbGF5LT5wYW5lbCkpIHsKLQkJcmMgPSBQ VFJfRVJSKGRpc3BsYXktPnBhbmVsKTsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IHBhbmVsLCBy Yz0lZFxuIiwgcmMpOwotCQlkaXNwbGF5LT5wYW5lbCA9IE5VTEw7Ci0JCWdvdG8gZXJyb3JfY3Ry bF9wdXQ7Ci0JfQotCi0JcmMgPSBkc2lfZGlzcGxheV9wYXJzZV9sYW5lX21hcChkaXNwbGF5KTsK LQlpZiAocmMpIHsKLQkJcHJfZXJyKCJMYW5lIG1hcCBub3QgZm91bmQsIHJjPSVkXG4iLCByYyk7 Ci0JCWdvdG8gZXJyb3JfY3RybF9wdXQ7Ci0JfQotCi0JcmMgPSBkc2lfZGlzcGxheV9jbG9ja3Nf aW5pdChkaXNwbGF5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gcGFyc2UgY2xv Y2sgZGF0YSwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcl9jdHJsX3B1dDsKLQl9Ci0KLQly ZXR1cm4gMDsKLWVycm9yX2N0cmxfcHV0OgotCWZvciAoaSA9IGkgLSAxOyBpID49IDA7IGktLSkg ewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCWRzaV9jdHJsX3B1dChjdHJsLT5jdHJs KTsKLQkJZHNpX3BoeV9wdXQoY3RybC0+cGh5KTsKLQl9Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0 aWMgaW50IGRzaV9kaXNwbGF5X3Jlc19kZWluaXQoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5 KQotewotCWludCByYyA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKmN0 cmw7Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2Nsb2Nrc19kZWluaXQoZGlzcGxheSk7Ci0JaWYgKHJj KQotCQlwcl9lcnIoImNsb2NrcyBkZWluaXQgZmFpbGVkLCByYz0lZFxuIiwgcmMpOwotCi0JZm9y IChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3Bs YXktPmN0cmxbaV07Ci0JCWRzaV9waHlfcHV0KGN0cmwtPnBoeSk7Ci0JCWRzaV9jdHJsX3B1dChj dHJsLT5jdHJsKTsKLQl9Ci0KLQlpZiAoZGlzcGxheS0+cGFuZWwpCi0JCWRzaV9wYW5lbF9wdXQo ZGlzcGxheS0+cGFuZWwpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNw bGF5X3ZhbGlkYXRlX21vZGVfc2V0KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwKLQkJCQkJ IHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlLAotCQkJCQkgdTMyIGZsYWdzKQotewotCWlu dCByYyA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKmN0cmw7Ci0KLQkv KgotCSAqIFRvIHNldCBhIG1vZGU6Ci0JICogMS4gQ29udHJvbGxlcnMgc2hvdWxkIGJlIHR1cm5l ZCBvZmYuCi0JICogMi4gTGluayBjbG9ja3Mgc2hvdWxkIGJlIG9mZi4KLQkgKiAzLiBQaHkgc2hv dWxkIGJlIGRpc2FibGVkLgotCSAqLwotCi0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxf Y291bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCWlmICgoY3RybC0+ cG93ZXJfc3RhdGUgPiBEU0lfQ1RSTF9QT1dFUl9WUkVHX09OKSB8fAotCQkgICAgKGN0cmwtPnBo eV9lbmFibGVkKSkgewotCQkJcmMgPSAtRUlOVkFMOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0K LQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgYm9vbCBkc2lfZGlzcGxheV9pc19z ZWFtbGVzc19kZnBzX3Bvc3NpYmxlKAotCQljb25zdCBzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3Bs YXksCi0JCWNvbnN0IHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICp0Z3QsCi0JCWNvbnN0IGVudW0g ZHNpX2RmcHNfdHlwZSBkZnBzX3R5cGUpCi17Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKmN1 cjsKLQotCWlmICghZGlzcGxheSB8fCAhdGd0IHx8ICFkaXNwbGF5LT5wYW5lbCkgewotCQlwcl9l cnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWN1ciA9IGRp c3BsYXktPnBhbmVsLT5jdXJfbW9kZTsKLQotCWlmIChjdXItPnRpbWluZy5oX2FjdGl2ZSAhPSB0 Z3QtPnRpbWluZy5oX2FjdGl2ZSkgewotCQlwcl9kZWJ1ZygidGltaW5nLmhfYWN0aXZlIGRpZmZl cnMgJWQgJWRcbiIsCi0JCQkJY3VyLT50aW1pbmcuaF9hY3RpdmUsIHRndC0+dGltaW5nLmhfYWN0 aXZlKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChjdXItPnRpbWluZy5oX2JhY2tfcG9y Y2ggIT0gdGd0LT50aW1pbmcuaF9iYWNrX3BvcmNoKSB7Ci0JCXByX2RlYnVnKCJ0aW1pbmcuaF9i YWNrX3BvcmNoIGRpZmZlcnMgJWQgJWRcbiIsCi0JCQkJY3VyLT50aW1pbmcuaF9iYWNrX3BvcmNo LAotCQkJCXRndC0+dGltaW5nLmhfYmFja19wb3JjaCk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0K LQlpZiAoY3VyLT50aW1pbmcuaF9zeW5jX3dpZHRoICE9IHRndC0+dGltaW5nLmhfc3luY193aWR0 aCkgewotCQlwcl9kZWJ1ZygidGltaW5nLmhfc3luY193aWR0aCBkaWZmZXJzICVkICVkXG4iLAot CQkJCWN1ci0+dGltaW5nLmhfc3luY193aWR0aCwKLQkJCQl0Z3QtPnRpbWluZy5oX3N5bmNfd2lk dGgpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKGN1ci0+dGltaW5nLmhfZnJvbnRfcG9y Y2ggIT0gdGd0LT50aW1pbmcuaF9mcm9udF9wb3JjaCkgewotCQlwcl9kZWJ1ZygidGltaW5nLmhf ZnJvbnRfcG9yY2ggZGlmZmVycyAlZCAlZFxuIiwKLQkJCQljdXItPnRpbWluZy5oX2Zyb250X3Bv cmNoLAotCQkJCXRndC0+dGltaW5nLmhfZnJvbnRfcG9yY2gpOwotCQlpZiAoZGZwc190eXBlICE9 IERTSV9ERlBTX0lNTUVESUFURV9IRlApCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKGN1 ci0+dGltaW5nLmhfc2tldyAhPSB0Z3QtPnRpbWluZy5oX3NrZXcpIHsKLQkJcHJfZGVidWcoInRp bWluZy5oX3NrZXcgZGlmZmVycyAlZCAlZFxuIiwKLQkJCQljdXItPnRpbWluZy5oX3NrZXcsCi0J CQkJdGd0LT50aW1pbmcuaF9za2V3KTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qIHNraXAg cG9sYXJpdHkgY29tcGFyaXNvbiAqLwotCi0JaWYgKGN1ci0+dGltaW5nLnZfYWN0aXZlICE9IHRn dC0+dGltaW5nLnZfYWN0aXZlKSB7Ci0JCXByX2RlYnVnKCJ0aW1pbmcudl9hY3RpdmUgZGlmZmVy cyAlZCAlZFxuIiwKLQkJCQljdXItPnRpbWluZy52X2FjdGl2ZSwKLQkJCQl0Z3QtPnRpbWluZy52 X2FjdGl2ZSk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoY3VyLT50aW1pbmcudl9iYWNr X3BvcmNoICE9IHRndC0+dGltaW5nLnZfYmFja19wb3JjaCkgewotCQlwcl9kZWJ1ZygidGltaW5n LnZfYmFja19wb3JjaCBkaWZmZXJzICVkICVkXG4iLAotCQkJCWN1ci0+dGltaW5nLnZfYmFja19w b3JjaCwKLQkJCQl0Z3QtPnRpbWluZy52X2JhY2tfcG9yY2gpOwotCQlyZXR1cm4gZmFsc2U7Ci0J fQotCi0JaWYgKGN1ci0+dGltaW5nLnZfc3luY193aWR0aCAhPSB0Z3QtPnRpbWluZy52X3N5bmNf d2lkdGgpIHsKLQkJcHJfZGVidWcoInRpbWluZy52X3N5bmNfd2lkdGggZGlmZmVycyAlZCAlZFxu IiwKLQkJCQljdXItPnRpbWluZy52X3N5bmNfd2lkdGgsCi0JCQkJdGd0LT50aW1pbmcudl9zeW5j X3dpZHRoKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChjdXItPnRpbWluZy52X2Zyb250 X3BvcmNoICE9IHRndC0+dGltaW5nLnZfZnJvbnRfcG9yY2gpIHsKLQkJcHJfZGVidWcoInRpbWlu Zy52X2Zyb250X3BvcmNoIGRpZmZlcnMgJWQgJWRcbiIsCi0JCQkJY3VyLT50aW1pbmcudl9mcm9u dF9wb3JjaCwKLQkJCQl0Z3QtPnRpbWluZy52X2Zyb250X3BvcmNoKTsKLQkJaWYgKGRmcHNfdHlw ZSAhPSBEU0lfREZQU19JTU1FRElBVEVfVkZQKQotCQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8q IHNraXAgcG9sYXJpdHkgY29tcGFyaXNvbiAqLwotCi0JaWYgKGN1ci0+dGltaW5nLnJlZnJlc2hf cmF0ZSA9PSB0Z3QtPnRpbWluZy5yZWZyZXNoX3JhdGUpCi0JCXByX2RlYnVnKCJ0aW1pbmcucmVm cmVzaF9yYXRlIGlkZW50aWNhbCAlZCAlZFxuIiwKLQkJCQljdXItPnRpbWluZy5yZWZyZXNoX3Jh dGUsCi0JCQkJdGd0LT50aW1pbmcucmVmcmVzaF9yYXRlKTsKLQotCWlmIChjdXItPnBpeGVsX2Ns a19raHogIT0gdGd0LT5waXhlbF9jbGtfa2h6KQotCQlwcl9kZWJ1ZygicGl4ZWxfY2xrX2toeiBk aWZmZXJzICVkICVkXG4iLAotCQkJCWN1ci0+cGl4ZWxfY2xrX2toeiwgdGd0LT5waXhlbF9jbGtf a2h6KTsKLQotCWlmIChjdXItPmRzaV9tb2RlX2ZsYWdzICE9IHRndC0+ZHNpX21vZGVfZmxhZ3Mp Ci0JCXByX2RlYnVnKCJmbGFncyBkaWZmZXJzICVkICVkXG4iLAotCQkJCWN1ci0+ZHNpX21vZGVf ZmxhZ3MsIHRndC0+ZHNpX21vZGVfZmxhZ3MpOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRp YyBpbnQgZHNpX2Rpc3BsYXlfZGZwc191cGRhdGUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5 LAotCQkJCSAgIHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICpkc2lfbW9kZSkKLXsKLQlzdHJ1Y3Qg ZHNpX21vZGVfaW5mbyAqdGltaW5nOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICptX2N0cmws ICpjdHJsOwotCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICpwYW5lbF9tb2RlOwotCXN0cnVjdCBk c2lfZGZwc19jYXBhYmlsaXRpZXMgZGZwc19jYXBzOwotCWludCByYyA9IDA7Ci0JaW50IGkgPSAw OwotCi0JaWYgKCFkaXNwbGF5IHx8ICFkc2lfbW9kZSB8fCAhZGlzcGxheS0+cGFuZWwpIHsKLQkJ cHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQl0aW1p bmcgPSAmZHNpX21vZGUtPnRpbWluZzsKLQotCWRzaV9wYW5lbF9nZXRfZGZwc19jYXBzKGRpc3Bs YXktPnBhbmVsLCAmZGZwc19jYXBzKTsKLQlpZiAoIWRmcHNfY2Fwcy5kZnBzX3N1cHBvcnQpIHsK LQkJcHJfZXJyKCJkZnBzIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQlyZXR1cm4gLUVOT1RTVVBQOwot CX0KLQotCWlmIChkZnBzX2NhcHMudHlwZSA9PSBEU0lfREZQU19JTU1FRElBVEVfQ0xLKSB7Ci0J CXByX2VycigiZGZwcyBjbG9jayBtZXRob2Qgbm90IHN1cHBvcnRlZFxuIik7Ci0JCXJldHVybiAt RU5PVFNVUFA7Ci0JfQotCi0JLyogRm9yIHNwbGl0IERTSSwgdXBkYXRlIHRoZSBjbG9jayBtYXN0 ZXIgZmlyc3QgKi8KLQotCXByX2RlYnVnKCJjb25maWd1cmluZyBzZWFtbGVzcyBkeW5hbWljIGZw c1xuXG4iKTsKLQotCW1fY3RybCA9ICZkaXNwbGF5LT5jdHJsW2Rpc3BsYXktPmNsa19tYXN0ZXJf aWR4XTsKLQlyYyA9IGRzaV9jdHJsX2FzeW5jX3RpbWluZ191cGRhdGUobV9jdHJsLT5jdHJsLCB0 aW1pbmcpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGRmcHMgdXBkYXRl IGhvc3RfJWQsIHJjPSVkXG4iLAotCQkJCWRpc3BsYXktPm5hbWUsIGksIHJjKTsKLQkJZ290byBl cnJvcjsKLQl9Ci0KLQkvKiBVcGRhdGUgdGhlIHJlc3Qgb2YgdGhlIGNvbnRyb2xsZXJzICovCi0J Zm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQljdHJsID0gJmRp c3BsYXktPmN0cmxbaV07Ci0JCWlmICghY3RybC0+Y3RybCB8fCAoY3RybCA9PSBtX2N0cmwpKQot CQkJY29udGludWU7Ci0KLQkJcmMgPSBkc2lfY3RybF9hc3luY190aW1pbmdfdXBkYXRlKGN0cmwt PmN0cmwsIHRpbWluZyk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBk ZnBzIHVwZGF0ZSBob3N0XyVkLCByYz0lZFxuIiwKLQkJCQkJZGlzcGxheS0+bmFtZSwgaSwgcmMp OwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0KLQotCXBhbmVsX21vZGUgPSBkaXNwbGF5LT5wYW5l bC0+Y3VyX21vZGU7Ci0JbWVtY3B5KHBhbmVsX21vZGUsIGRzaV9tb2RlLCBzaXplb2YoKnBhbmVs X21vZGUpKTsKLQkvKgotCSAqIGRzaV9tb2RlX2ZsYWdzIGZsYWdzIGFyZSB1c2VkIHRvIGNvbW11 bmljYXRlIHdpdGggb3RoZXIgZHJtIGRyaXZlcgotCSAqIGNvbXBvbmVudHMsIGFuZCBhcmUgdHJh bnNpZW50LiBUaGV5IGFyZW4ndCBpbmhlcmVudGx5IHBhcnQgb2YgdGhlCi0JICogZGlzcGxheSBw YW5lbCdzIG1vZGUgYW5kIHNob3VsZG4ndCBiZSBzYXZlZCBpbnRvIHRoZSBjYWNoZWQgY3VycmVu dGx5Ci0JICogYWN0aXZlIG1vZGUuCi0JICovCi0JcGFuZWxfbW9kZS0+ZHNpX21vZGVfZmxhZ3Mg PSAwOwotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlf ZGZwc19jYWxjX2Zyb250X3BvcmNoKAotCQl1MzIgb2xkX2ZwcywKLQkJdTMyIG5ld19mcHMsCi0J CXUzMiBhX3RvdGFsLAotCQl1MzIgYl90b3RhbCwKLQkJdTMyIGJfZnAsCi0JCXUzMiAqYl9mcF9v dXQpCi17Ci0JczMyIGJfZnBfbmV3OwotCWludCBhZGRfcG9yY2hlcywgZGlmZjsKLQotCWlmICgh Yl9mcF9vdXQpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtcyIpOwotCQlyZXR1cm4gLUVJTlZB TDsKLQl9Ci0KLQlpZiAoIWFfdG90YWwgfHwgIW5ld19mcHMpIHsKLQkJcHJfZXJyKCJJbnZhbGlk IHBpeGVsIHRvdGFsIG9yIG5ldyBmcHMgaW4gbW9kZSByZXF1ZXN0XG4iKTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCi0JLyoKLQkgKiBLZWVwIGNsb2NrLCBvdGhlciBwb3JjaGVzIGNvbnN0YW50 LCB1c2UgbmV3IGZwcywgY2FsYyBmcm9udCBwb3JjaAotCSAqIG5ld192dG90YWwgPSBvbGRfdnRv dGFsICogKG9sZF9mcHMgLyBuZXdfZnBzICkKLQkgKiBuZXdfdmZwIC0gb2xkX3ZmcCA9IG5ld192 dG90YWwgLSBvbGRfdnRvdGFsCi0JICogbmV3X3ZmcCA9IG9sZF92ZnAgKyBvbGRfdnRvdGFsICog KChvbGRfZnBzIC0gbmV3X2ZwcykvIG5ld19mcHMpCi0JICovCi0JZGlmZiA9IGFicyhvbGRfZnBz IC0gbmV3X2Zwcyk7Ci0JYWRkX3BvcmNoZXMgPSBtdWx0X2ZyYWMoYl90b3RhbCwgZGlmZiwgbmV3 X2Zwcyk7Ci0KLQlpZiAob2xkX2ZwcyA+IG5ld19mcHMpCi0JCWJfZnBfbmV3ID0gYl9mcCArIGFk ZF9wb3JjaGVzOwotCWVsc2UKLQkJYl9mcF9uZXcgPSBiX2ZwIC0gYWRkX3BvcmNoZXM7Ci0KLQlw cl9kZWJ1ZygiZnBzICV1IGEgJXUgYiAldSBiX2ZwICV1IG5ld19mcCAlZFxuIiwKLQkJCW5ld19m cHMsIGFfdG90YWwsIGJfdG90YWwsIGJfZnAsIGJfZnBfbmV3KTsKLQotCWlmIChiX2ZwX25ldyA8 IDApIHsKLQkJcHJfZXJyKCJJbnZhbGlkIG5ld19oZnAgY2FsY2x1YXRlZCVkXG4iLCBiX2ZwX25l dyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qKgotCSAqIFRPRE86IFRvIGRpZmZlcmVu dGlhdGUgZnJvbSBjbG9jayBtZXRob2Qgd2hlbiBjb21tdW5pY2F0aW5nIHRvIHRoZQotCSAqIG90 aGVyIGNvbXBvbmVudHMsIHBlcmhhcHMgd2Ugc2hvdWxkIHNldCBjbGsgaGVyZSB0byBvcmlnaW5h bCB2YWx1ZQotCSAqLwotCSpiX2ZwX291dCA9IGJfZnBfbmV3OwotCi0JcmV0dXJuIDA7Ci19Ci0K LS8qKgotICogZHNpX2Rpc3BsYXlfZ2V0X2RmcHNfdGltaW5nKCkgLSBHZXQgdGhlIG5ldyBkZnBz IHZhbHVlcy4KLSAqIEBkaXNwbGF5OiAgICAgICAgIERTSSBkaXNwbGF5IGhhbmRsZS4KLSAqIEBh ZGpfbW9kZTogICAgICAgIE1vZGUgdmFsdWUgc3RydWN0dXJlIHRvIGJlIGNoYW5nZWQuCi0gKiAg ICAgICAgICAgICAgICAgICBJdCBjb250YWlucyBvbGQgdGltaW5nIHZhbHVlcyBhbmQgbGF0ZXN0 IGZwcyB2YWx1ZS4KLSAqICAgICAgICAgICAgICAgICAgIE5ldyB0aW1pbmcgdmFsdWVzIGFyZSB1 cGRhdGVkIGJhc2VkIG9uIG5ldyBmcHMuCi0gKiBAY3Vycl9yZWZyZXNoX3JhdGU6ICBDdXJyZW50 IGZwcyByYXRlLgotICogICAgICAgICAgICAgICAgICAgICAgSWYgemVybyAsIGN1cnJlbnQgZnBz IHJhdGUgaXMgdGFrZW4gZnJvbQotICogICAgICAgICAgICAgICAgICAgICAgZGlzcGxheS0+cGFu ZWwtPmN1cl9tb2RlLgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1zdGF0aWMgaW50IGRz aV9kaXNwbGF5X2dldF9kZnBzX3RpbWluZyhzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0J CQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqYWRqX21vZGUsCi0JCQkJdTMyIGN1cnJfcmVmcmVz aF9yYXRlKQotewotCXN0cnVjdCBkc2lfZGZwc19jYXBhYmlsaXRpZXMgZGZwc19jYXBzOwotCXN0 cnVjdCBkc2lfZGlzcGxheV9tb2RlIHBlcl9jdHJsX21vZGU7Ci0Jc3RydWN0IGRzaV9tb2RlX2lu Zm8gKnRpbWluZzsKLQlzdHJ1Y3QgZHNpX2N0cmwgKm1fY3RybDsKLQotCWludCByYyA9IDA7Ci0K LQlpZiAoIWRpc3BsYXkgfHwgIWFkal9tb2RlKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNc biIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JbV9jdHJsID0gZGlzcGxheS0+Y3RybFtkaXNw bGF5LT5jbGtfbWFzdGVyX2lkeF0uY3RybDsKLQotCWRzaV9wYW5lbF9nZXRfZGZwc19jYXBzKGRp c3BsYXktPnBhbmVsLCAmZGZwc19jYXBzKTsKLQlpZiAoIWRmcHNfY2Fwcy5kZnBzX3N1cHBvcnQp IHsKLQkJcHJfZXJyKCJkZnBzIG5vdCBzdXBwb3J0ZWQgYnkgcGFuZWxcbiIpOwotCQlyZXR1cm4g LUVJTlZBTDsKLQl9Ci0KLQlwZXJfY3RybF9tb2RlID0gKmFkal9tb2RlOwotCWFkanVzdF90aW1p bmdfYnlfY3RybF9jb3VudChkaXNwbGF5LCAmcGVyX2N0cmxfbW9kZSk7Ci0KLQlpZiAoIWN1cnJf cmVmcmVzaF9yYXRlKSB7Ci0JCWlmICghZHNpX2Rpc3BsYXlfaXNfc2VhbWxlc3NfZGZwc19wb3Nz aWJsZShkaXNwbGF5LAotCQkJCSZwZXJfY3RybF9tb2RlLCBkZnBzX2NhcHMudHlwZSkpIHsKLQkJ CXByX2Vycigic2VhbWxlc3MgZHluYW1pYyBmcHMgbm90IHN1cHBvcnRlZCBmb3IgbW9kZVxuIik7 Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlpZiAoZGlzcGxheS0+cGFuZWwtPmN1cl9tb2Rl KSB7Ci0JCQljdXJyX3JlZnJlc2hfcmF0ZSA9Ci0JCQkJZGlzcGxheS0+cGFuZWwtPmN1cl9tb2Rl LT50aW1pbmcucmVmcmVzaF9yYXRlOwotCQl9IGVsc2UgewotCQkJcHJfZXJyKCJjdXJfbW9kZSBp cyBub3QgaW5pdGlhbGl6ZWRcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0JLyog VE9ETzogUmVtb3ZlIHRoaXMgZGlyZWN0IHJlZmVyZW5jZSB0byB0aGUgZHNpX2N0cmwgKi8KLQl0 aW1pbmcgPSAmcGVyX2N0cmxfbW9kZS50aW1pbmc7Ci0KLQlzd2l0Y2ggKGRmcHNfY2Fwcy50eXBl KSB7Ci0JY2FzZSBEU0lfREZQU19JTU1FRElBVEVfVkZQOgotCQlyYyA9IGRzaV9kaXNwbGF5X2Rm cHNfY2FsY19mcm9udF9wb3JjaCgKLQkJCQljdXJyX3JlZnJlc2hfcmF0ZSwKLQkJCQl0aW1pbmct PnJlZnJlc2hfcmF0ZSwKLQkJCQlEU0lfSF9UT1RBTCh0aW1pbmcpLAotCQkJCURTSV9WX1RPVEFM KHRpbWluZyksCi0JCQkJdGltaW5nLT52X2Zyb250X3BvcmNoLAotCQkJCSZhZGpfbW9kZS0+dGlt aW5nLnZfZnJvbnRfcG9yY2gpOwotCQlicmVhazsKLQotCWNhc2UgRFNJX0RGUFNfSU1NRURJQVRF X0hGUDoKLQkJcmMgPSBkc2lfZGlzcGxheV9kZnBzX2NhbGNfZnJvbnRfcG9yY2goCi0JCQkJY3Vy cl9yZWZyZXNoX3JhdGUsCi0JCQkJdGltaW5nLT5yZWZyZXNoX3JhdGUsCi0JCQkJRFNJX1ZfVE9U QUwodGltaW5nKSwKLQkJCQlEU0lfSF9UT1RBTCh0aW1pbmcpLAotCQkJCXRpbWluZy0+aF9mcm9u dF9wb3JjaCwKLQkJCQkmYWRqX21vZGUtPnRpbWluZy5oX2Zyb250X3BvcmNoKTsKLQkJaWYgKCFy YykKLQkJCWFkal9tb2RlLT50aW1pbmcuaF9mcm9udF9wb3JjaCAqPSBkaXNwbGF5LT5jdHJsX2Nv dW50OwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXByX2VycigiVW5zdXBwb3J0ZWQgREZQUyBt b2RlICVkXG4iLCBkZnBzX2NhcHMudHlwZSk7Ci0JCXJjID0gLUVOT1RTVVBQOwotCX0KLQotCXJl dHVybiByYzsKLX0KLQotc3RhdGljIGJvb2wgZHNpX2Rpc3BsYXlfdmFsaWRhdGVfbW9kZV9zZWFt bGVzcyhzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCXN0cnVjdCBkc2lfZGlzcGxheV9t b2RlICphZGpfbW9kZSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkaXNwbGF5IHx8ICFhZGpf bW9kZSkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwot CX0KLQotCS8qIEN1cnJlbnRseSB0aGUgb25seSBzZWFtbGVzcyB0cmFuc2l0aW9uIGlzIGR5bmFt aWMgZnBzICovCi0JcmMgPSBkc2lfZGlzcGxheV9nZXRfZGZwc190aW1pbmcoZGlzcGxheSwgYWRq X21vZGUsIDApOwotCWlmIChyYykgewotCQlwcl9kZWJ1ZygiRHluYW1pYyBGUFMgbm90IHN1cHBv cnRlZCBmb3Igc2VhbWxlc3NcbiIpOwotCX0gZWxzZSB7Ci0JCXByX2RlYnVnKCJNb2RlIHN3aXRj aCBpcyBzZWFtbGVzcyBEeW5hbWljIEZQU1xuIik7Ci0JCWFkal9tb2RlLT5kc2lfbW9kZV9mbGFn cyB8PSBEU0lfTU9ERV9GTEFHX0RGUFMgfAotCQkJCURTSV9NT0RFX0ZMQUdfVkJMQU5LX1BSRV9N T0RFU0VUOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9z ZXRfbW9kZV9zdWIoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAotCQkJCSAgICBzdHJ1Y3Qg ZHNpX2Rpc3BsYXlfbW9kZSAqbW9kZSwKLQkJCQkgICAgdTMyIGZsYWdzKQotewotCWludCByYyA9 IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKmN0cmw7Ci0Jc3RydWN0IGRz aV9kaXNwbGF5X21vZGVfcHJpdl9pbmZvICpwcml2X2luZm87Ci0KLQlwcml2X2luZm8gPSBtb2Rl LT5wcml2X2luZm87Ci0JaWYgKCFwcml2X2luZm8pIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0 byBnZXQgcHJpdmF0ZSBpbmZvIG9mIHRoZSBkaXNwbGF5IG1vZGUiLAotCQkJZGlzcGxheS0+bmFt ZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJjID0gZHNpX3BhbmVsX2dldF9ob3N0X2Nm Z19mb3JfbW9kZShkaXNwbGF5LT5wYW5lbCwKLQkJCQkJICAgICBtb2RlLAotCQkJCQkgICAgICZk aXNwbGF5LT5jb25maWcpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGdl dCBob3N0IGNvbmZpZyBmb3IgbW9kZSwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1l LCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JbWVtY3B5KCZkaXNwbGF5LT5jb25maWcubGFu ZV9tYXAsICZkaXNwbGF5LT5sYW5lX21hcCwKLQkgICAgICAgc2l6ZW9mKGRpc3BsYXktPmxhbmVf bWFwKSk7Ci0KLQlpZiAobW9kZS0+ZHNpX21vZGVfZmxhZ3MgJgotCQkJKERTSV9NT0RFX0ZMQUdf REZQUyB8IERTSV9NT0RFX0ZMQUdfVlJSKSkgewotCQlyYyA9IGRzaV9kaXNwbGF5X2RmcHNfdXBk YXRlKGRpc3BsYXksIG1vZGUpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXURTSSBkZnBz IHVwZGF0ZSBmYWlsZWQsIHJjPSVkXG4iLAotCQkJCQlkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCQln b3RvIGVycm9yOwotCQl9Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291 bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCXJjID0gZHNpX2N0cmxf dXBkYXRlX2hvc3RfY29uZmlnKGN0cmwtPmN0cmwsICZkaXNwbGF5LT5jb25maWcsCi0JCQkJbW9k ZS0+ZHNpX21vZGVfZmxhZ3MsIGRpc3BsYXktPmRzaV9jbGtfaGFuZGxlKTsKLQkJaWYgKHJjKSB7 Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHVwZGF0ZSBjdHJsIGNvbmZpZywgcmM9JWRcbiIs Ci0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0K LQotCWlmIChwcml2X2luZm8tPnBoeV90aW1pbmdfbGVuKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBk aXNwbGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsK LQkJCSByYyA9IGRzaV9waHlfc2V0X3RpbWluZ19wYXJhbXMoY3RybC0+cGh5LAotCQkJCXByaXZf aW5mby0+cGh5X3RpbWluZ192YWwsCi0JCQkJcHJpdl9pbmZvLT5waHlfdGltaW5nX2xlbik7Ci0J CQlpZiAocmMpCi0JCQkJcHJfZXJyKCJmYWlsZWQgdG8gYWRkIERTSSBQSFkgdGltaW5nIHBhcmFt cyIpOwotCQl9Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIF9kc2lfZGlz cGxheV9kZXZfaW5pdCAtIGluaXRpYWxpemVzIHRoZSBkaXNwbGF5IGRldmljZQotICogSW5pdGlh bGl6YXRpb24gd2lsbCBhY3F1aXJlIHJlZmVyZW5jZXMgdG8gdGhlIHJlc291cmNlcyByZXF1aXJl ZCBmb3IgdGhlCi0gKiBkaXNwbGF5IGhhcmR3YXJlIHRvIGZ1bmN0aW9uLgotICogQGRpc3BsYXk6 ICAgICAgICAgSGFuZGxlIHRvIHRoZSBkaXNwbGF5Ci0gKiBSZXR1cm5zOiAgICAgICAgICBaZXJv IG9uIHN1Y2Nlc3MKLSAqLwotc3RhdGljIGludCBfZHNpX2Rpc3BsYXlfZGV2X2luaXQoc3RydWN0 IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRpc3BsYXkp IHsKLQkJcHJfZXJyKCJpbnZhbGlkIGRpc3BsYXlcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0KLQltdXRleF9sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCi0JcmMgPSBkc2lfZGlz cGxheV9wYXJzZV9kdChkaXNwbGF5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxl ZCB0byBwYXJzZSBkdCwgcmM9JWRcbiIsIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJv cjsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X3Jlc19pbml0KGRpc3BsYXkpOwotCWlmIChyYykg ewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGluaXRpYWxpemUgcmVzb3VyY2VzLCByYz0lZFxu IiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci1lcnJv cjoKLQltdXRleF91bmxvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0JcmV0dXJuIHJjOwot fQotCi0vKioKLSAqIF9kc2lfZGlzcGxheV9kZXZfZGVpbml0IC0gZGVpbml0aWFsaXplcyB0aGUg ZGlzcGxheSBkZXZpY2UKLSAqIEFsbCB0aGUgcmVzb3VyY2VzIGFjcXVpcmVkIGR1cmluZyBkZXZp Y2UgaW5pdCB3aWxsIGJlIHJlbGVhc2VkLgotICogQGRpc3BsYXk6ICAgICAgICBIYW5kbGUgdG8g dGhlIGRpc3BsYXkKLSAqIFJldHVybnM6ICAgICAgICAgWmVybyBvbiBzdWNjZXNzCi0gKi8KLXN0 YXRpYyBpbnQgX2RzaV9kaXNwbGF5X2Rldl9kZWluaXQoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNw bGF5KQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRpc3BsYXkpIHsKLQkJcHJfZXJyKCJpbnZh bGlkIGRpc3BsYXlcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZk aXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCi0JcmMgPSBkc2lfZGlzcGxheV9yZXNfZGVpbml0KGRp c3BsYXkpOwotCWlmIChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBkZWluaXRpYWxpemUg cmVzb3VyY2UsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCi0JbXV0 ZXhfdW5sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCi0JcmV0dXJuIHJjOwotfQotCi0v KioKLSAqIGRzaV9kaXNwbGF5X2JpbmQgLSBiaW5kIGRzaSBkZXZpY2Ugd2l0aCBjb250cm9sbGlu ZyBkZXZpY2UKLSAqIEBkZXY6ICAgICAgICBQb2ludGVyIHRvIGJhc2Ugb2YgcGxhdGZvcm0gZGV2 aWNlCi0gKiBAbWFzdGVyOiAgICAgUG9pbnRlciB0byBjb250YWluZXIgb2YgZHJtIGRldmljZQot ICogQGRhdGE6ICAgICAgIFBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhCi0gKiBSZXR1cm5zOiAgICAg WmVybyBvbiBzdWNjZXNzCi0gKi8KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfYmluZChzdHJ1Y3Qg ZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2UgKm1hc3RlciwKLQkJdm9pZCAqZGF0YSkKLXsK LQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqZGlzcGxheV9jdHJsOwotCXN0cnVjdCBkcm1fZGV2 aWNlICpkcm07Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5OwotCXN0cnVjdCBkc2lfY2xr X2luZm8gaW5mbzsKLQlzdHJ1Y3QgY2xrX2N0cmxfY2IgY2xrX2NiOwotCXN0cnVjdCBtc21fZHJt X3ByaXZhdGUgKnByaXY7Ci0Jdm9pZCAqaGFuZGxlID0gTlVMTDsKLQlzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0JY2hhciAqY2xpZW50MSA9 ICJkc2lfY2xrX2NsaWVudCI7Ci0JY2hhciAqY2xpZW50MiA9ICJtZHBfZXZlbnRfY2xpZW50IjsK LQljaGFyIGRzaV9jbGllbnRfbmFtZVtEU0lfQ0xJRU5UX05BTUVfU0laRV07Ci0JaW50IGksIHJj ID0gMDsKLQotCWlmICghZGV2IHx8ICFwZGV2IHx8ICFtYXN0ZXIpIHsKLQkJcHJfZXJyKCJpbnZh bGlkIHBhcmFtKHMpLCBkZXYgJXBLLCBwZGV2ICVwSywgbWFzdGVyICVwS1xuIiwKLQkJCQlkZXYs IHBkZXYsIG1hc3Rlcik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRybSA9IGRldl9nZXRf ZHJ2ZGF0YShtYXN0ZXIpOwotCWRpc3BsYXkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsK LQlpZiAoIWRybSB8fCAhZGlzcGxheSkgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW0ocyksIGRy bSAlcEssIGRpc3BsYXkgJXBLXG4iLAotCQkJCWRybSwgZGlzcGxheSk7Ci0JCXJldHVybiAtRUlO VkFMOwotCX0KLQlwcml2ID0gZHJtLT5kZXZfcHJpdmF0ZTsKLQotCW11dGV4X2xvY2soJmRpc3Bs YXktPmRpc3BsYXlfbG9jayk7Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2RlYnVnZnNfaW5pdChkaXNw bGF5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGRlYnVnZnMgaW5pdCBmYWlsZWQsIHJj PSVkXG4iLCBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JbWVtc2V0 KCZpbmZvLCAweDAsIHNpemVvZihpbmZvKSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+ Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWRpc3BsYXlfY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwot CQlyYyA9IGRzaV9jdHJsX2Rydl9pbml0KGRpc3BsYXlfY3RybC0+Y3RybCwgZGlzcGxheS0+cm9v dCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBpbml0aWFsaXplIGN0 cmxbJWRdLCByYz0lZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCBpLCByYyk7Ci0JCQln b3RvIGVycm9yX2N0cmxfZGVpbml0OwotCQl9Ci0JCWRpc3BsYXlfY3RybC0+Y3RybC0+aG9yaXpf aW5kZXggPSBpOwotCi0JCXJjID0gZHNpX3BoeV9kcnZfaW5pdChkaXNwbGF5X2N0cmwtPnBoeSk7 Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIEZhaWxlZCB0byBpbml0aWFsaXplIHBoeVsl ZF0sIHJjPSVkXG4iLAotCQkJCWRpc3BsYXktPm5hbWUsIGksIHJjKTsKLQkJCSh2b2lkKWRzaV9j dHJsX2Rydl9kZWluaXQoZGlzcGxheV9jdHJsLT5jdHJsKTsKLQkJCWdvdG8gZXJyb3JfY3RybF9k ZWluaXQ7Ci0JCX0KLQotCQltZW1jcHkoJmluZm8uY19jbGtzW2ldLCAmZGlzcGxheV9jdHJsLT5j dHJsLT5jbGtfaW5mby5jb3JlX2Nsa3MsCi0JCQlzaXplb2Yoc3RydWN0IGRzaV9jb3JlX2Nsa19p bmZvKSk7Ci0JCW1lbWNweSgmaW5mby5sX2Nsa3NbaV0sICZkaXNwbGF5X2N0cmwtPmN0cmwtPmNs a19pbmZvLmxpbmtfY2xrcywKLQkJCXNpemVvZihzdHJ1Y3QgZHNpX2xpbmtfY2xrX2luZm8pKTsK LQkJaW5mby5jX2Nsa3NbaV0ucGhhbmRsZSA9ICZwcml2LT5waGFuZGxlOwotCQlpbmZvLmJ1c19o YW5kbGVbaV0gPQotCQkJZGlzcGxheV9jdHJsLT5jdHJsLT5heGlfYnVzX2luZm8uYnVzX2hhbmRs ZTsKLQkJaW5mby5jdHJsX2luZGV4W2ldID0gZGlzcGxheV9jdHJsLT5jdHJsLT5jZWxsX2luZGV4 OwotCQlzbnByaW50Zihkc2lfY2xpZW50X25hbWUsIERTSV9DTElFTlRfTkFNRV9TSVpFLAotCQkJ CQkJImRzaV9jb3JlX2NsaWVudCV1IiwgaSk7Ci0JCWluZm8uY19jbGtzW2ldLmRzaV9jb3JlX2Ns aWVudCA9IGRwdV9wb3dlcl9jbGllbnRfY3JlYXRlKAotCQkJCWluZm8uY19jbGtzW2ldLnBoYW5k bGUsIGRzaV9jbGllbnRfbmFtZSk7Ci0JCWlmIChJU19FUlJfT1JfTlVMTChpbmZvLmNfY2xrc1tp XS5kc2lfY29yZV9jbGllbnQpKSB7Ci0JCQlwcl9lcnIoIlslc10gY2xpZW50IGNyZWF0aW9uIGZh aWxlZCBmb3IgY3RybFslZF0iLAotCQkJCQlkc2lfY2xpZW50X25hbWUsIGkpOwotCQkJZ290byBl cnJvcl9jdHJsX2RlaW5pdDsKLQkJfQotCX0KLQotCWluZm8ucHJlX2Nsa29mZl9jYiA9IGRzaV9w cmVfY2xrb2ZmX2NiOwotCWluZm8ucHJlX2Nsa29uX2NiID0gZHNpX3ByZV9jbGtvbl9jYjsKLQlp bmZvLnBvc3RfY2xrb2ZmX2NiID0gZHNpX3Bvc3RfY2xrb2ZmX2NiOwotCWluZm8ucG9zdF9jbGtv bl9jYiA9IGRzaV9wb3N0X2Nsa29uX2NiOwotCWluZm8ucHJpdl9kYXRhID0gZGlzcGxheTsKLQlp bmZvLm1hc3Rlcl9uZHggPSBkaXNwbGF5LT5jbGtfbWFzdGVyX2lkeDsKLQlpbmZvLmRzaV9jdHJs X2NvdW50ID0gZGlzcGxheS0+Y3RybF9jb3VudDsKLQlzbnByaW50ZihpbmZvLm5hbWUsIE1BWF9T VFJJTkdfTEVOLAotCQkJIkRTSV9NTkdSLSVzIiwgZGlzcGxheS0+bmFtZSk7Ci0KLQlkaXNwbGF5 LT5jbGtfbW5nciA9IGRzaV9kaXNwbGF5X2Nsa19tbmdyX3JlZ2lzdGVyKCZpbmZvKTsKLQlpZiAo SVNfRVJSX09SX05VTEwoZGlzcGxheS0+Y2xrX21uZ3IpKSB7Ci0JCXJjID0gUFRSX0VSUihkaXNw bGF5LT5jbGtfbW5ncik7Ci0JCWRpc3BsYXktPmNsa19tbmdyID0gTlVMTDsKLQkJcHJfZXJyKCJk c2kgY2xvY2sgcmVnaXN0cmF0aW9uIGZhaWxlZCwgcmMgPSAlZFxuIiwgcmMpOwotCQlnb3RvIGVy cm9yX2N0cmxfZGVpbml0OwotCX0KLQotCWhhbmRsZSA9IGRzaV9yZWdpc3Rlcl9jbGtfaGFuZGxl KGRpc3BsYXktPmNsa19tbmdyLCBjbGllbnQxKTsKLQlpZiAoSVNfRVJSX09SX05VTEwoaGFuZGxl KSkgewotCQlyYyA9IFBUUl9FUlIoaGFuZGxlKTsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcmVnaXN0 ZXIgJXMgY2xpZW50LCByYyA9ICVkXG4iLAotCQkgICAgICAgY2xpZW50MSwgcmMpOwotCQlnb3Rv IGVycm9yX2Nsa19kZWluaXQ7Ci0JfSBlbHNlIHsKLQkJZGlzcGxheS0+ZHNpX2Nsa19oYW5kbGUg PSBoYW5kbGU7Ci0JfQotCi0JaGFuZGxlID0gZHNpX3JlZ2lzdGVyX2Nsa19oYW5kbGUoZGlzcGxh eS0+Y2xrX21uZ3IsIGNsaWVudDIpOwotCWlmIChJU19FUlJfT1JfTlVMTChoYW5kbGUpKSB7Ci0J CXJjID0gUFRSX0VSUihoYW5kbGUpOwotCQlwcl9lcnIoImZhaWxlZCB0byByZWdpc3RlciAlcyBj bGllbnQsIHJjID0gJWRcbiIsCi0JCSAgICAgICBjbGllbnQyLCByYyk7Ci0JCWdvdG8gZXJyb3Jf Y2xrX2NsaWVudF9kZWluaXQ7Ci0JfSBlbHNlIHsKLQkJZGlzcGxheS0+bWRwX2Nsa19oYW5kbGUg PSBoYW5kbGU7Ci0JfQotCi0JY2xrX2NiLnByaXYgPSBkaXNwbGF5OwotCWNsa19jYi5kc2lfY2xr X2NiID0gZHNpX2Rpc3BsYXlfY2xrX2N0cmxfY2I7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxh eS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWRpc3BsYXlfY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ld OwotCi0JCXJjID0gZHNpX2N0cmxfY2xrX2NiX3JlZ2lzdGVyKGRpc3BsYXlfY3RybC0+Y3RybCwg JmNsa19jYik7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byByZWdpc3Rl ciBjdHJsIGNsa19jYlslZF0sIHJjPSVkXG4iLAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUsIGks IHJjKTsKLQkJCWdvdG8gZXJyb3JfY3RybF9kZWluaXQ7Ci0JCX0KLQotCQlyYyA9IGRzaV9waHlf Y2xrX2NiX3JlZ2lzdGVyKGRpc3BsYXlfY3RybC0+cGh5LCAmY2xrX2NiKTsKLQkJaWYgKHJjKSB7 Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHJlZ2lzdGVyIHBoeSBjbGtfY2JbJWRdLCByYz0l ZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCBpLCByYyk7Ci0JCQlnb3RvIGVycm9yX2N0 cmxfZGVpbml0OwotCQl9Ci0JfQotCi0JcmMgPSBkc2lfZGlzcGxheV9taXBpX2hvc3RfaW5pdChk aXNwbGF5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBpbml0aWFsaXpl IG1pcGkgaG9zdCwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdv dG8gZXJyb3JfY3RybF9kZWluaXQ7Ci0JfQotCi0JcmMgPSBkc2lfcGFuZWxfZHJ2X2luaXQoZGlz cGxheS0+cGFuZWwsICZkaXNwbGF5LT5ob3N0KTsKLQlpZiAocmMpIHsKLQkJaWYgKHJjICE9IC1F UFJPQkVfREVGRVIpCi0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGluaXRpYWxpemUgcGFuZWwg ZHJpdmVyLCByYz0lZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8g ZXJyb3JfaG9zdF9kZWluaXQ7Ci0JfQotCi0JcHJfaW5mbygiU3VjY2Vzc2Z1bGx5IGJpbmQgZGlz cGxheSBwYW5lbCAnJXMnXG4iLCBkaXNwbGF5LT5uYW1lKTsKLQlkaXNwbGF5LT5kcm1fZGV2ID0g ZHJtOwotCWdvdG8gZXJyb3I7Ci0KLWVycm9yX2hvc3RfZGVpbml0OgotCSh2b2lkKWRzaV9kaXNw bGF5X21pcGlfaG9zdF9kZWluaXQoZGlzcGxheSk7Ci1lcnJvcl9jbGtfY2xpZW50X2RlaW5pdDoK LQkodm9pZClkc2lfZGVyZWdpc3Rlcl9jbGtfaGFuZGxlKGRpc3BsYXktPmRzaV9jbGtfaGFuZGxl KTsKLWVycm9yX2Nsa19kZWluaXQ6Ci0JKHZvaWQpZHNpX2Rpc3BsYXlfY2xrX21uZ3JfZGVyZWdp c3RlcihkaXNwbGF5LT5jbGtfbW5ncik7Ci1lcnJvcl9jdHJsX2RlaW5pdDoKLQlmb3IgKGkgPSBp IC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJZGlzcGxheV9jdHJsID0gJmRpc3BsYXktPmN0cmxbaV07 Ci0JCSh2b2lkKWRzaV9waHlfZHJ2X2RlaW5pdChkaXNwbGF5X2N0cmwtPnBoeSk7Ci0JCSh2b2lk KWRzaV9jdHJsX2Rydl9kZWluaXQoZGlzcGxheV9jdHJsLT5jdHJsKTsKLQl9Ci0JKHZvaWQpZHNp X2Rpc3BsYXlfZGVidWdmc19kZWluaXQoZGlzcGxheSk7Ci1lcnJvcjoKLQltdXRleF91bmxvY2so JmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGRzaV9k aXNwbGF5X3VuYmluZCAtIHVuYmluZCBkc2kgZnJvbSBjb250cm9sbGluZyBkZXZpY2UKLSAqIEBk ZXY6ICAgICAgICBQb2ludGVyIHRvIGJhc2Ugb2YgcGxhdGZvcm0gZGV2aWNlCi0gKiBAbWFzdGVy OiAgICAgUG9pbnRlciB0byBjb250YWluZXIgb2YgZHJtIGRldmljZQotICogQGRhdGE6ICAgICAg IFBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhCi0gKi8KLXN0YXRpYyB2b2lkIGRzaV9kaXNwbGF5X3Vu YmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAq ZGF0YSkKLXsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqZGlzcGxheV9jdHJsOwotCXN0cnVj dCBkc2lfZGlzcGxheSAqZGlzcGxheTsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0g dG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0JaW50IGksIHJjID0gMDsKLQotCWlmICghZGV2IHx8 ICFwZGV2KSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJhbShzKVxuIik7Ci0JCXJldHVybjsKLQl9 Ci0KLQlkaXNwbGF5ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0JaWYgKCFkaXNwbGF5 KSB7Ci0JCXByX2VycigiaW52YWxpZCBkaXNwbGF5XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCW11 dGV4X2xvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0KLQlyYyA9IGRzaV9wYW5lbF9kcnZf ZGVpbml0KGRpc3BsYXktPnBhbmVsKTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBmYWlsZWQg dG8gZGVpbml0IHBhbmVsIGRyaXZlciwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1l LCByYyk7Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X21pcGlfaG9zdF9kZWluaXQoZGlzcGxheSk7Ci0J aWYgKHJjKQotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGRlaW5pdCBtaXBpIGhvc3RzLCByYz0l ZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsCi0JCSAgICAgICByYyk7Ci0KLQlmb3IgKGkg PSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWRpc3BsYXlfY3RybCA9ICZk aXNwbGF5LT5jdHJsW2ldOwotCi0JCXJjID0gZHNpX3BoeV9kcnZfZGVpbml0KGRpc3BsYXlfY3Ry bC0+cGh5KTsKLQkJaWYgKHJjKQotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBkZWluaXQgcGh5 JWQgZHJpdmVyLCByYz0lZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCBpLCByYyk7Ci0K LQkJcmMgPSBkc2lfY3RybF9kcnZfZGVpbml0KGRpc3BsYXlfY3RybC0+Y3RybCk7Ci0JCWlmIChy YykKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGVpbml0IGN0cmwlZCBkcml2ZXIsIHJjPSVk XG4iLAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUsIGksIHJjKTsKLQl9Ci0JKHZvaWQpZHNpX2Rp c3BsYXlfZGVidWdmc19kZWluaXQoZGlzcGxheSk7Ci0KLQltdXRleF91bmxvY2soJmRpc3BsYXkt PmRpc3BsYXlfbG9jayk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBk c2lfZGlzcGxheV9jb21wX29wcyA9IHsKLQkuYmluZCA9IGRzaV9kaXNwbGF5X2JpbmQsCi0JLnVu YmluZCA9IGRzaV9kaXNwbGF5X3VuYmluZCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1f ZHJpdmVyIGRzaV9kaXNwbGF5X2RyaXZlciA9IHsKLQkucHJvYmUgPSBkc2lfZGlzcGxheV9kZXZf cHJvYmUsCi0JLnJlbW92ZSA9IGRzaV9kaXNwbGF5X2Rldl9yZW1vdmUsCi0JLmRyaXZlciA9IHsK LQkJLm5hbWUgPSAibXNtLWRzaS1kaXNwbGF5IiwKLQkJLm9mX21hdGNoX3RhYmxlID0gZHNpX2Rp c3BsYXlfZHRfbWF0Y2gsCi0JfSwKLX07Ci0KLWludCBkc2lfZGlzcGxheV9kZXZfcHJvYmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lf ZGlzcGxheSAqZGlzcGxheTsKLQlzdGF0aWMgYm9vbCBkaXNwbGF5X2Zyb21fY21kbGluZSwgYm9v dF9kaXNwbGF5c19wYXJzZWQ7Ci0Jc3RhdGljIGJvb2wgY29tcF9hZGRfc3VjY2VzczsKLQlzdGF0 aWMgc3RydWN0IGRldmljZV9ub2RlICpwcmltYXJ5X25wLCAqc2Vjb25kYXJ5X25wOwotCi0JaWYg KCFwZGV2IHx8ICFwZGV2LT5kZXYub2Zfbm9kZSkgewotCQlwcl9lcnIoInBkZXYgbm90IGZvdW5k XG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JZGlzcGxheSA9IGRldm1fa3phbGxvYygm cGRldi0+ZGV2LCBzaXplb2YoKmRpc3BsYXkpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRpc3BsYXkp Ci0JCXJldHVybiAtRU5PTUVNOwotCi0JZGlzcGxheS0+bmFtZSA9IG9mX2dldF9wcm9wZXJ0eShw ZGV2LT5kZXYub2Zfbm9kZSwgImxhYmVsIiwgTlVMTCk7Ci0KLQlpZiAoIWJvb3RfZGlzcGxheXNf cGFyc2VkKSB7Ci0JCWJvb3RfZGlzcGxheXNbRFNJX1BSSU1BUlldLmJvb3RfZGlzcF9lbiA9IGZh bHNlOwotCQlib290X2Rpc3BsYXlzW0RTSV9TRUNPTkRBUlldLmJvb3RfZGlzcF9lbiA9IGZhbHNl OwotCQlpZiAoZHNpX2Rpc3BsYXlfcGFyc2VfYm9vdF9kaXNwbGF5X3NlbGVjdGlvbigpKQotCQkJ cHJfZGVidWcoIkRpc3BsYXkgQm9vdCBwYXJhbSBub3QgdmFsaWQvYXZhaWxhYmxlXG4iKTsKLQot CQlib290X2Rpc3BsYXlzX3BhcnNlZCA9IHRydWU7Ci0JfQotCi0JLyogdXNlIGRlZmF1bHQgdG9w b2xvZ3kgb2YgZXZlcnkgbW9kZSBpZiBub3Qgb3ZlcnJpZGRlbiAqLwotCWRpc3BsYXktPmNtZGxp bmVfdG9wb2xvZ3kgPSBOT19PVkVSUklERTsKLQlkaXNwbGF5LT5jbWRsaW5lX3RpbWluZyA9IDA7 Ci0KLQlpZiAoKCFkaXNwbGF5X2Zyb21fY21kbGluZSkgJiYKLQkJCShib290X2Rpc3BsYXlzW0RT SV9QUklNQVJZXS5ib290X2Rpc3BfZW4pKSB7Ci0JCWRpc3BsYXktPmlzX2FjdGl2ZSA9IGRzaV9k aXNwbGF5X25hbWVfY29tcGFyZShwZGV2LT5kZXYub2Zfbm9kZSwKLQkJCQkJCWRpc3BsYXktPm5h bWUsIERTSV9QUklNQVJZKTsKLQkJaWYgKGRpc3BsYXktPmlzX2FjdGl2ZSkgewotCQkJaWYgKGNv bXBfYWRkX3N1Y2Nlc3MpIHsKLQkJCQkodm9pZClfZHNpX2Rpc3BsYXlfZGV2X2RlaW5pdChtYWlu X2Rpc3BsYXkpOwotCQkJCWNvbXBvbmVudF9kZWwoJm1haW5fZGlzcGxheS0+cGRldi0+ZGV2LAot CQkJCQkgICAgICAmZHNpX2Rpc3BsYXlfY29tcF9vcHMpOwotCQkJCW11dGV4X2xvY2soJmRzaV9k aXNwbGF5X2xpc3RfbG9jayk7Ci0JCQkJbGlzdF9kZWwoJm1haW5fZGlzcGxheS0+bGlzdCk7Ci0J CQkJbXV0ZXhfdW5sb2NrKCZkc2lfZGlzcGxheV9saXN0X2xvY2spOwotCQkJCWNvbXBfYWRkX3N1 Y2Nlc3MgPSBmYWxzZTsKLQkJCQlkZWZhdWx0X2FjdGl2ZV9ub2RlID0gTlVMTDsKLQkJCQlwcl9k ZWJ1ZygicmVtb3ZlZCB0aGUgZXhpc3RpbmcgY29tcCBvcHNcbiIpOwotCQkJfQotCQkJLyoKLQkJ CSAqIE5lZWQgdG8gYWRkIGNvbXBvbmVudCBmb3IKLQkJCSAqIHRoZSBzZWNvbmRhcnkgRFNJIGRp c3BsYXkKLQkJCSAqIHdoZW4gbW9yZSB0aGFuIG9uZSBEU0kgZGlzcGxheQotCQkJICogaXMgc3Vw cG9ydGVkLgotCQkJICovCi0JCQlwcl9kZWJ1ZygiY21kbGluZSBwcmltYXJ5IGRzaTogJXNcbiIs Ci0JCQkJCQlkaXNwbGF5LT5uYW1lKTsKLQkJCWRpc3BsYXlfZnJvbV9jbWRsaW5lID0gdHJ1ZTsK LQkJCWRzaV9kaXNwbGF5X3BhcnNlX2NtZGxpbmVfdG9wb2xvZ3koZGlzcGxheSwKLQkJCQkJRFNJ X1BSSU1BUlkpOwotCQkJcHJpbWFyeV9ucCA9IHBkZXYtPmRldi5vZl9ub2RlOwotCQl9Ci0JfQot Ci0JaWYgKGJvb3RfZGlzcGxheXNbRFNJX1NFQ09OREFSWV0uYm9vdF9kaXNwX2VuCi0JCQkmJiAh c2Vjb25kYXJ5X25wCi0JCQkmJiBkc2lfZGlzcGxheV9uYW1lX2NvbXBhcmUocGRldi0+ZGV2Lm9m X25vZGUsCi0JCQkJCQlkaXNwbGF5LT5uYW1lLCBEU0lfU0VDT05EQVJZKSkgewotCQlwcl9kZWJ1 ZygiY21kbGluZSBzZWNvbmRhcnkgZHNpOiAlc1xuIiwKLQkJCQkJZGlzcGxheS0+bmFtZSk7Ci0J CXNlY29uZGFyeV9ucCA9IHBkZXYtPmRldi5vZl9ub2RlOwotCQlpZiAocHJpbWFyeV9ucCkgewot CQkJaWYgKHZhbGlkYXRlX2RzaV9kaXNwbGF5X3NlbGVjdGlvbigpKSB7Ci0JCQkJZGlzcGxheS0+ aXNfYWN0aXZlID0gdHJ1ZTsKLQkJCQlkc2lfZGlzcGxheV9wYXJzZV9jbWRsaW5lX3RvcG9sb2d5 KAotCQkJCQkJZGlzcGxheSwgRFNJX1NFQ09OREFSWSk7Ci0JCQl9IGVsc2UgewotCQkJCWJvb3Rf ZGlzcGxheXNbRFNJX1NFQ09OREFSWV0KLQkJCQkJLmJvb3RfZGlzcF9lbiA9IGZhbHNlOwotCQkJ fQotCQl9Ci0JfQotCWRpc3BsYXktPmRpc3BsYXlfdHlwZSA9IG9mX2dldF9wcm9wZXJ0eShwZGV2 LT5kZXYub2Zfbm9kZSwKLQkJCQkJCSJxY29tLGRpc3BsYXktdHlwZSIsIE5VTEwpOwotCWlmICgh ZGlzcGxheS0+ZGlzcGxheV90eXBlKQotCQlkaXNwbGF5LT5kaXNwbGF5X3R5cGUgPSAidW5rbm93 biI7Ci0KLQltdXRleF9pbml0KCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCWRpc3BsYXktPnBk ZXYgPSBwZGV2OwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRpc3BsYXkpOwotCW11dGV4 X2xvY2soJmRzaV9kaXNwbGF5X2xpc3RfbG9jayk7Ci0JbGlzdF9hZGQoJmRpc3BsYXktPmxpc3Qs ICZkc2lfZGlzcGxheV9saXN0KTsKLQltdXRleF91bmxvY2soJmRzaV9kaXNwbGF5X2xpc3RfbG9j ayk7Ci0KLQlpZiAoIWRpc3BsYXlfZnJvbV9jbWRsaW5lKQotCQlkaXNwbGF5LT5pc19hY3RpdmUg PSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocGRldi0+ZGV2Lm9mX25vZGUsCi0JCQkJCQkicWNvbSxk c2ktZGlzcGxheS1hY3RpdmUiKTsKLQotCWlmIChkaXNwbGF5LT5pc19hY3RpdmUpIHsKLQkJbWFp bl9kaXNwbGF5ID0gZGlzcGxheTsKLQkJcmMgPSBfZHNpX2Rpc3BsYXlfZGV2X2luaXQoZGlzcGxh eSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJkZXZpY2UgaW5pdCBmYWlsZWQsIHJjPSVkXG4i LCByYyk7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQotCQlyYyA9IGNvbXBvbmVudF9hZGQoJnBkZXYt PmRldiwgJmRzaV9kaXNwbGF5X2NvbXBfb3BzKTsKLQkJaWYgKHJjKQotCQkJcHJfZXJyKCJjb21w b25lbnQgYWRkIGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKLQotCQljb21wX2FkZF9zdWNjZXNzID0g dHJ1ZTsKLQkJcHJfZGVidWcoIkNvbXBvbmVudF9hZGQgc3VjY2VzczogJXNcbiIsIGRpc3BsYXkt Pm5hbWUpOwotCQlpZiAoIWRpc3BsYXlfZnJvbV9jbWRsaW5lKQotCQkJZGVmYXVsdF9hY3RpdmVf bm9kZSA9IHBkZXYtPmRldi5vZl9ub2RlOwotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lf ZGlzcGxheV9kZXZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JaW50 IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXk7Ci0Jc3RydWN0IGRzaV9kaXNw bGF5ICpwb3MsICp0bXA7Ci0KLQlpZiAoIXBkZXYpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIGRldmlj ZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRpc3BsYXkgPSBwbGF0Zm9ybV9nZXRf ZHJ2ZGF0YShwZGV2KTsKLQotCSh2b2lkKV9kc2lfZGlzcGxheV9kZXZfZGVpbml0KGRpc3BsYXkp OwotCi0JbXV0ZXhfbG9jaygmZHNpX2Rpc3BsYXlfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNo X2VudHJ5X3NhZmUocG9zLCB0bXAsICZkc2lfZGlzcGxheV9saXN0LCBsaXN0KSB7Ci0JCWlmIChw b3MgPT0gZGlzcGxheSkgewotCQkJbGlzdF9kZWwoJmRpc3BsYXktPmxpc3QpOwotCQkJYnJlYWs7 Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfZGlzcGxheV9saXN0X2xvY2spOwotCi0JcGxh dGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBk aXNwbGF5KTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfZGlzcGxheV9nZXRfbnVtX29mX2Rp c3BsYXlzKHZvaWQpCi17Ci0JaW50IGNvdW50ID0gMDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRp c3BsYXk7Ci0KLQltdXRleF9sb2NrKCZkc2lfZGlzcGxheV9saXN0X2xvY2spOwotCi0JbGlzdF9m b3JfZWFjaF9lbnRyeShkaXNwbGF5LCAmZHNpX2Rpc3BsYXlfbGlzdCwgbGlzdCkgewotCQljb3Vu dCsrOwotCX0KLQotCW11dGV4X3VubG9jaygmZHNpX2Rpc3BsYXlfbGlzdF9sb2NrKTsKLQlyZXR1 cm4gY291bnQ7Ci19Ci0KLWludCBkc2lfZGlzcGxheV9nZXRfYWN0aXZlX2Rpc3BsYXlzKHZvaWQg KipkaXNwbGF5X2FycmF5LCB1MzIgbWF4X2Rpc3BsYXlfY291bnQpCi17Ci0Jc3RydWN0IGRzaV9k aXNwbGF5ICpwb3M7Ci0JaW50IGkgPSAwOwotCi0JaWYgKCFkaXNwbGF5X2FycmF5IHx8ICFtYXhf ZGlzcGxheV9jb3VudCkgewotCQlpZiAoIWRpc3BsYXlfYXJyYXkpCi0JCQlwcl9lcnIoImludmFs aWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZHNpX2Rpc3Bs YXlfbGlzdF9sb2NrKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmZHNpX2Rpc3BsYXlf bGlzdCwgbGlzdCkgewotCQlpZiAoaSA+PSBtYXhfZGlzcGxheV9jb3VudCkgewotCQkJcHJfZXJy KCJjYXBwaW5nIGRpc3BsYXkgY291bnQgdG8gJWRcbiIsIGkpOwotCQkJYnJlYWs7Ci0JCX0KLQkJ aWYgKHBvcy0+aXNfYWN0aXZlKQotCQkJZGlzcGxheV9hcnJheVtpKytdID0gcG9zOwotCX0KLQot CW11dGV4X3VubG9jaygmZHNpX2Rpc3BsYXlfbGlzdF9sb2NrKTsKLQlyZXR1cm4gaTsKLX0KLQot c3RydWN0IGRzaV9kaXNwbGF5ICpkc2lfZGlzcGxheV9nZXRfZGlzcGxheV9ieV9uYW1lKGNvbnN0 IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5ID0gTlVMTCwgKnBv czsKLQotCW11dGV4X2xvY2soJmRzaV9kaXNwbGF5X2xpc3RfbG9jayk7Ci0KLQlsaXN0X2Zvcl9l YWNoX2VudHJ5KHBvcywgJmRzaV9kaXNwbGF5X2xpc3QsIGxpc3QpIHsKLQkJaWYgKCFzdHJjbXAo bmFtZSwgcG9zLT5uYW1lKSkKLQkJCWRpc3BsYXkgPSBwb3M7Ci0JfQotCi0JbXV0ZXhfdW5sb2Nr KCZkc2lfZGlzcGxheV9saXN0X2xvY2spOwotCi0JcmV0dXJuIGRpc3BsYXk7Ci19Ci0KLXZvaWQg ZHNpX2Rpc3BsYXlfc2V0X2FjdGl2ZV9zdGF0ZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXks IGJvb2wgaXNfYWN0aXZlKQotewotCW11dGV4X2xvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7 Ci0JZGlzcGxheS0+aXNfYWN0aXZlID0gaXNfYWN0aXZlOwotCW11dGV4X3VubG9jaygmZGlzcGxh eS0+ZGlzcGxheV9sb2NrKTsKLX0KLQotaW50IGRzaV9kaXNwbGF5X2RybV9icmlkZ2VfaW5pdChz dHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jKQot ewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9icmlkZ2UgKmJyaWRnZTsKLQlzdHJ1Y3QgbXNt X2RybV9wcml2YXRlICpwcml2ID0gTlVMTDsKLQotCWlmICghZGlzcGxheSB8fCAhZGlzcGxheS0+ ZHJtX2RldiB8fCAhZW5jKSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJhbShzKVxuIik7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7 Ci0JcHJpdiA9IGRpc3BsYXktPmRybV9kZXYtPmRldl9wcml2YXRlOwotCi0JaWYgKCFwcml2KSB7 Ci0JCXByX2VycigiUHJpdmF0ZSBkYXRhIGlzIG5vdCBwcmVzZW50XG4iKTsKLQkJcmMgPSAtRUlO VkFMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmIChkaXNwbGF5LT5icmlkZ2UpIHsKLQkJcHJf ZXJyKCJkaXNwbGF5IGlzIGFscmVhZHkgaW5pdGlhbGl6ZVxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0J fQotCi0JYnJpZGdlID0gZHNpX2RybV9icmlkZ2VfaW5pdChkaXNwbGF5LCBkaXNwbGF5LT5kcm1f ZGV2LCBlbmMpOwotCWlmIChJU19FUlJfT1JfTlVMTChicmlkZ2UpKSB7Ci0JCXJjID0gUFRSX0VS UihicmlkZ2UpOwotCQlwcl9lcnIoIlslc10gYnJpZ2UgaW5pdCBmYWlsZWQsICVkXG4iLCBkaXNw bGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZGlzcGxheS0+YnJpZGdlID0g YnJpZGdlOwotCXByaXYtPmJyaWRnZXNbcHJpdi0+bnVtX2JyaWRnZXMrK10gPSAmYnJpZGdlLT5i YXNlOwotCi1lcnJvcjoKLQltdXRleF91bmxvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0J cmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX2Rpc3BsYXlfZHJtX2JyaWRnZV9kZWluaXQoc3RydWN0 IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRpc3BsYXkp IHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0K LQotCW11dGV4X2xvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0KLQlkc2lfZHJtX2JyaWRn ZV9jbGVhbnVwKGRpc3BsYXktPmJyaWRnZSk7Ci0JZGlzcGxheS0+YnJpZGdlID0gTlVMTDsKLQot CW11dGV4X3VubG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0K LWludCBkc2lfZGlzcGxheV9nZXRfaW5mbyhzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyAqaW5mbywg dm9pZCAqZGlzcCkKLXsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXk7Ci0Jc3RydWN0IGRz aV9wYW5lbF9waHlfcHJvcHMgcGh5X3Byb3BzOwotCWludCBpLCByYzsKLQotCWlmICghaW5mbyB8 fCAhZGlzcCkgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JfQotCi0JZGlzcGxheSA9IGRpc3A7Ci0JaWYgKCFkaXNwbGF5LT5wYW5lbCkgewotCQlw cl9lcnIoImludmFsaWQgZGlzcGxheSBwYW5lbFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0K LQotCW11dGV4X2xvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0JcmMgPSBkc2lfcGFuZWxf Z2V0X3BoeV9wcm9wcyhkaXNwbGF5LT5wYW5lbCwgJnBoeV9wcm9wcyk7Ci0JaWYgKHJjKSB7Ci0J CXByX2VycigiWyVzXSBmYWlsZWQgdG8gZ2V0IHBhbmVsIHBoeSBwcm9wcywgcmM9JWRcbiIsCi0J CSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JbWVtc2V0 KGluZm8sIDAsIHNpemVvZihzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbykpOwotCWluZm8tPmludGZf dHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EU0k7Ci0JaW5mby0+bnVtX29mX2hfdGlsZXMgPSBk aXNwbGF5LT5jdHJsX2NvdW50OwotCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5udW1fb2ZfaF90aWxl czsgaSsrKQotCQlpbmZvLT5oX3RpbGVfaW5zdGFuY2VbaV0gPSBkaXNwbGF5LT5jdHJsW2ldLmN0 cmwtPmNlbGxfaW5kZXg7Ci0KLQlpbmZvLT5pc19jb25uZWN0ZWQgPSB0cnVlOwotCWluZm8tPmlz X3ByaW1hcnkgPSB0cnVlOwotCWluZm8tPndpZHRoX21tID0gcGh5X3Byb3BzLnBhbmVsX3dpZHRo X21tOwotCWluZm8tPmhlaWdodF9tbSA9IHBoeV9wcm9wcy5wYW5lbF9oZWlnaHRfbW07Ci0JaW5m by0+bWF4X3dpZHRoID0gMTkyMDsKLQlpbmZvLT5tYXhfaGVpZ2h0ID0gMTA4MDsKLQotCXN3aXRj aCAoZGlzcGxheS0+cGFuZWwtPnBhbmVsX21vZGUpIHsKLQljYXNlIERTSV9PUF9WSURFT19NT0RF OgotCQlpbmZvLT5jYXBhYmlsaXRpZXMgfD0gTVNNX0RJU1BMQVlfQ0FQX1ZJRF9NT0RFOwotCQli cmVhazsKLQljYXNlIERTSV9PUF9DTURfTU9ERToKLQkJaW5mby0+Y2FwYWJpbGl0aWVzIHw9IE1T TV9ESVNQTEFZX0NBUF9DTURfTU9ERTsKLQkJaW5mby0+aXNfdGVfdXNpbmdfd2F0Y2hkb2dfdGlt ZXIgPQotCQkJZGlzcGxheS0+cGFuZWwtPnRlX3VzaW5nX3dhdGNoZG9nX3RpbWVyOwotCQlicmVh azsKLQlkZWZhdWx0OgotCQlwcl9lcnIoInVua253b3duIGRzaSBwYW5lbCBtb2RlICVkXG4iLAot CQkJCWRpc3BsYXktPnBhbmVsLT5wYW5lbF9tb2RlKTsKLQkJYnJlYWs7Ci0JfQotCi1lcnJvcjoK LQltdXRleF91bmxvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQot Ci1pbnQgZHNpX2Rpc3BsYXlfZ2V0X21vZGVfY291bnQoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNw bGF5LAotCQkJdTMyICpjb3VudCkKLXsKLQlzdHJ1Y3QgZHNpX2RmcHNfY2FwYWJpbGl0aWVzIGRm cHNfY2FwczsKLQlpbnQgbnVtX2RmcHNfcmF0ZXMsIHJjID0gMDsKLQotCWlmICghZGlzcGxheSB8 fCAhZGlzcGxheS0+cGFuZWwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGRpc3BsYXk6JWQgcGFuZWw6 JWRcbiIsIGRpc3BsYXkgIT0gTlVMTCwKLQkJCQlkaXNwbGF5ID8gZGlzcGxheS0+cGFuZWwgIT0g TlVMTCA6IDApOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkaXNwbGF5 LT5kaXNwbGF5X2xvY2spOwotCi0JKmNvdW50ID0gZGlzcGxheS0+cGFuZWwtPm51bV90aW1pbmdf bm9kZXM7Ci0KLQlyYyA9IGRzaV9wYW5lbF9nZXRfZGZwc19jYXBzKGRpc3BsYXktPnBhbmVsLCAm ZGZwc19jYXBzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBnZXQgZGZw cyBjYXBzIGZyb20gcGFuZWxcbiIsCi0JCQkJZGlzcGxheS0+bmFtZSk7Ci0JCWdvdG8gZG9uZTsK LQl9Ci0KLQludW1fZGZwc19yYXRlcyA9ICFkZnBzX2NhcHMuZGZwc19zdXBwb3J0ID8gMSA6Ci0J CQlkZnBzX2NhcHMubWF4X3JlZnJlc2hfcmF0ZSAtCi0JCQlkZnBzX2NhcHMubWluX3JlZnJlc2hf cmF0ZSArIDE7Ci0KLQkvKiBJbmZsYXRlIG51bV9vZl9tb2RlcyBieSBmcHMgaW4gZGZwcyAqLwot CSpjb3VudCA9IGRpc3BsYXktPnBhbmVsLT5udW1fdGltaW5nX25vZGVzICogbnVtX2RmcHNfcmF0 ZXM7Ci0KLWRvbmU6Ci0JbXV0ZXhfdW5sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCi0J cmV0dXJuIDA7Ci19Ci0KLXZvaWQgZHNpX2Rpc3BsYXlfcHV0X21vZGUoc3RydWN0IGRzaV9kaXNw bGF5ICpkaXNwbGF5LAotCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlKQotewotCWRzaV9w YW5lbF9wdXRfbW9kZShtb2RlKTsKLX0KLQotaW50IGRzaV9kaXNwbGF5X2dldF9tb2RlcyhzdHJ1 Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCQkgIHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICpt b2RlcykKLXsKLQlzdHJ1Y3QgZHNpX2RmcHNfY2FwYWJpbGl0aWVzIGRmcHNfY2FwczsKLQl1MzIg bnVtX2RmcHNfcmF0ZXMsIHBhbmVsX21vZGVfY291bnQ7Ci0JdTMyIG1vZGVfaWR4LCBhcnJheV9p ZHggPSAwOwotCWludCBpLCByYyA9IDA7Ci0KLQlpZiAoIWRpc3BsYXkgfHwgIW1vZGVzKSB7Ci0J CXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlt dXRleF9sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCi0JcmMgPSBkc2lfcGFuZWxfZ2V0 X2RmcHNfY2FwcyhkaXNwbGF5LT5wYW5lbCwgJmRmcHNfY2Fwcyk7Ci0JaWYgKHJjKSB7Ci0JCXBy X2VycigiWyVzXSBmYWlsZWQgdG8gZ2V0IGRmcHMgY2FwcyBmcm9tIHBhbmVsXG4iLAotCQkJCWRp c3BsYXktPm5hbWUpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCW51bV9kZnBzX3JhdGVzID0gIWRm cHNfY2Fwcy5kZnBzX3N1cHBvcnQgPyAxIDoKLQkJCWRmcHNfY2Fwcy5tYXhfcmVmcmVzaF9yYXRl IC0KLQkJCWRmcHNfY2Fwcy5taW5fcmVmcmVzaF9yYXRlICsgMTsKLQotCXBhbmVsX21vZGVfY291 bnQgPSBkaXNwbGF5LT5wYW5lbC0+bnVtX3RpbWluZ19ub2RlczsKLQotCWZvciAobW9kZV9pZHgg PSAwOyBtb2RlX2lkeCA8IHBhbmVsX21vZGVfY291bnQ7IG1vZGVfaWR4KyspIHsKLQkJc3RydWN0 IGRzaV9kaXNwbGF5X21vZGUgcGFuZWxfbW9kZTsKLQkJaW50IHRvcG9sb2d5X292ZXJyaWRlID0g Tk9fT1ZFUlJJREU7Ci0KLQkJaWYgKGRpc3BsYXktPmNtZGxpbmVfdGltaW5nID09IG1vZGVfaWR4 KQotCQkJdG9wb2xvZ3lfb3ZlcnJpZGUgPSBkaXNwbGF5LT5jbWRsaW5lX3RvcG9sb2d5OwotCi0J CW1lbXNldCgmcGFuZWxfbW9kZSwgMCwgc2l6ZW9mKHBhbmVsX21vZGUpKTsKLQotCQlyYyA9IGRz aV9wYW5lbF9nZXRfbW9kZShkaXNwbGF5LT5wYW5lbCwgbW9kZV9pZHgsCi0JCQkJCQkmcGFuZWxf bW9kZSwgdG9wb2xvZ3lfb3ZlcnJpZGUpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBm YWlsZWQgdG8gZ2V0IG1vZGUgaWR4ICVkIGZyb20gcGFuZWxcbiIsCi0JCQkJICAgZGlzcGxheS0+ bmFtZSwgbW9kZV9pZHgpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCi0JCWlmIChkaXNwbGF5LT5j dHJsX2NvdW50ID4gMSkgeyAvKiBUT0RPOiByZW1vdmUgaWYgKi8KLQkJCXBhbmVsX21vZGUudGlt aW5nLmhfYWN0aXZlICo9IGRpc3BsYXktPmN0cmxfY291bnQ7Ci0JCQlwYW5lbF9tb2RlLnRpbWlu Zy5oX2Zyb250X3BvcmNoICo9IGRpc3BsYXktPmN0cmxfY291bnQ7Ci0JCQlwYW5lbF9tb2RlLnRp bWluZy5oX3N5bmNfd2lkdGggKj0gZGlzcGxheS0+Y3RybF9jb3VudDsKLQkJCXBhbmVsX21vZGUu dGltaW5nLmhfYmFja19wb3JjaCAqPSBkaXNwbGF5LT5jdHJsX2NvdW50OwotCQkJcGFuZWxfbW9k ZS50aW1pbmcuaF9za2V3ICo9IGRpc3BsYXktPmN0cmxfY291bnQ7Ci0JCQlwYW5lbF9tb2RlLnBp eGVsX2Nsa19raHogKj0gZGlzcGxheS0+Y3RybF9jb3VudDsKLQkJfQotCi0JCWZvciAoaSA9IDA7 IGkgPCBudW1fZGZwc19yYXRlczsgaSsrKSB7Ci0JCQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAq c3ViX21vZGUgPSAmbW9kZXNbYXJyYXlfaWR4XTsKLQkJCXUzMiBjdXJyX3JlZnJlc2hfcmF0ZTsK LQotCQkJaWYgKCFzdWJfbW9kZSkgewotCQkJCXByX2VycigiaW52YWxpZCBtb2RlIGRhdGFcbiIp OwotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJfQotCi0JCQltZW1jcHkoc3ViX21vZGUsICZwYW5l bF9tb2RlLCBzaXplb2YocGFuZWxfbW9kZSkpOwotCi0JCQlpZiAoZGZwc19jYXBzLmRmcHNfc3Vw cG9ydCkgewotCQkJCWN1cnJfcmVmcmVzaF9yYXRlID0KLQkJCQkJc3ViX21vZGUtPnRpbWluZy5y ZWZyZXNoX3JhdGU7Ci0JCQkJc3ViX21vZGUtPnRpbWluZy5yZWZyZXNoX3JhdGUgPQotCQkJCQlk ZnBzX2NhcHMubWluX3JlZnJlc2hfcmF0ZSArCi0JCQkJCShpICUgbnVtX2RmcHNfcmF0ZXMpOwot Ci0JCQkJZHNpX2Rpc3BsYXlfZ2V0X2RmcHNfdGltaW5nKGRpc3BsYXksCi0JCQkJCXN1Yl9tb2Rl LCBjdXJyX3JlZnJlc2hfcmF0ZSk7Ci0KLQkJCQlzdWJfbW9kZS0+cGl4ZWxfY2xrX2toeiA9Ci0J CQkJCShEU0lfSF9UT1RBTCgmc3ViX21vZGUtPnRpbWluZykgKgotCQkJCQlEU0lfVl9UT1RBTCgm c3ViX21vZGUtPnRpbWluZykgKgotCQkJCQlzdWJfbW9kZS0+dGltaW5nLnJlZnJlc2hfcmF0ZSkg LyAxMDAwOwotCQkJfQotCQkJYXJyYXlfaWR4Kys7Ci0JCX0KLQl9Ci0KLWVycm9yOgotCW11dGV4 X3VubG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgot ICogZHNpX2Rpc3BsYXlfdmFsaWRhdGVfbW9kZV92cnIoKSAtIFZhbGlkYXRlIGlmIHZhcmFpYmxl IHJlZnJlc2ggY2FzZS4KLSAqIEBkaXNwbGF5OiAgICAgRFNJIGRpc3BsYXkgaGFuZGxlLgotICog QGN1cl9kc2lfbW9kZTogICBDdXJyZW50IERTSSBtb2RlLgotICogQG1vZGU6ICAgICAgICBNb2Rl IHZhbHVlIHN0cnVjdHVyZSB0byBiZSB2YWxpZGF0ZWQuCi0gKiAgICAgICAgICAgICAgIE1TTV9N T0RFX0ZMQUdfU0VBTUxFU1NfVlJSIGZsYWcgaXMgc2V0IGlmIHRoZXJlCi0gKiAgICAgICAgICAg ICAgIGlzIGNoYW5nZSBpbiBmcHMgYnV0IHZhY3RpdmUgYW5kIGhhY3RpdmUgYXJlIHNhbWUuCi0g KiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfZGlzcGxheV92YWxpZGF0ZV9tb2Rl X3ZycihzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCQlzdHJ1Y3QgZHNpX2Rpc3BsYXlf bW9kZSAqY3VyX2RzaV9tb2RlLAotCQkJc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGUpCi17 Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSBhZGpfbW9kZSwgY3VyX21v ZGU7Ci0Jc3RydWN0IGRzaV9kZnBzX2NhcGFiaWxpdGllcyBkZnBzX2NhcHM7Ci0JdTMyIGN1cnJf cmVmcmVzaF9yYXRlOwotCi0JaWYgKCFkaXNwbGF5IHx8ICFtb2RlKSB7Ci0JCXByX2VycigiSW52 YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIWRpc3BsYXkt PnBhbmVsIHx8ICFkaXNwbGF5LT5wYW5lbC0+Y3VyX21vZGUpIHsKLQkJcHJfZGVidWcoIkN1cnJl bnQgcGFuZWwgbW9kZSBub3Qgc2V0XG4iKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCW11dGV4X2xv Y2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0KLQlhZGpfbW9kZSA9ICptb2RlOwotCWN1cl9t b2RlID0gKmN1cl9kc2lfbW9kZTsKLQotCWlmICgoY3VyX21vZGUudGltaW5nLnJlZnJlc2hfcmF0 ZSAhPSBhZGpfbW9kZS50aW1pbmcucmVmcmVzaF9yYXRlKSAmJgotCQkoY3VyX21vZGUudGltaW5n LnZfYWN0aXZlID09IGFkal9tb2RlLnRpbWluZy52X2FjdGl2ZSkgJiYKLQkJKGN1cl9tb2RlLnRp bWluZy5oX2FjdGl2ZSA9PSBhZGpfbW9kZS50aW1pbmcuaF9hY3RpdmUpKSB7Ci0KLQkJY3Vycl9y ZWZyZXNoX3JhdGUgPSBjdXJfbW9kZS50aW1pbmcucmVmcmVzaF9yYXRlOwotCQlyYyA9IGRzaV9w YW5lbF9nZXRfZGZwc19jYXBzKGRpc3BsYXktPnBhbmVsLCAmZGZwc19jYXBzKTsKLQkJaWYgKHJj KSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGdldCBkZnBzIGNhcHMgZnJvbSBwYW5lbFxu IiwKLQkJCQkJZGlzcGxheS0+bmFtZSk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJY3VyX21v ZGUudGltaW5nLnJlZnJlc2hfcmF0ZSA9Ci0JCQlhZGpfbW9kZS50aW1pbmcucmVmcmVzaF9yYXRl OwotCi0JCXJjID0gZHNpX2Rpc3BsYXlfZ2V0X2RmcHNfdGltaW5nKGRpc3BsYXksCi0JCQkmY3Vy X21vZGUsIGN1cnJfcmVmcmVzaF9yYXRlKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10g c2VhbWxlc3MgdnJyIG5vdCBwb3NzaWJsZSByYz0lZFxuIiwKLQkJCWRpc3BsYXktPm5hbWUsIHJj KTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQkJc3dpdGNoIChkZnBzX2NhcHMudHlwZSkgewotCQkv KgotCQkgKiBJZ25vcmUgYW55IHJvdW5kIG9mZiBmYWN0b3JzIGluIHBvcmNoIGNhbGN1bGF0aW9u LgotCQkgKiBXb3JzZSBjYXNlIGlzIHNldCB0byA1LgotCQkgKi8KLQkJY2FzZSBEU0lfREZQU19J TU1FRElBVEVfVkZQOgotCQkJaWYgKGFicyhEU0lfVl9UT1RBTCgmY3VyX21vZGUudGltaW5nKSAt Ci0JCQkJRFNJX1ZfVE9UQUwoJmFkal9tb2RlLnRpbWluZykpID4gNSkKLQkJCQlwcl9lcnIoIk1p c21hdGNoIHZmcCBmcHM6JWQgbmV3OiVkIGdpdmVuOiVkXG4iLAotCQkJCWFkal9tb2RlLnRpbWlu Zy5yZWZyZXNoX3JhdGUsCi0JCQkJY3VyX21vZGUudGltaW5nLnZfZnJvbnRfcG9yY2gsCi0JCQkJ YWRqX21vZGUudGltaW5nLnZfZnJvbnRfcG9yY2gpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBEU0lf REZQU19JTU1FRElBVEVfSEZQOgotCQkJaWYgKGFicyhEU0lfSF9UT1RBTCgmY3VyX21vZGUudGlt aW5nKSAtCi0JCQkJRFNJX0hfVE9UQUwoJmFkal9tb2RlLnRpbWluZykpID4gNSkKLQkJCQlwcl9l cnIoIk1pc21hdGNoIGhmcCBmcHM6JWQgbmV3OiVkIGdpdmVuOiVkXG4iLAotCQkJCWFkal9tb2Rl LnRpbWluZy5yZWZyZXNoX3JhdGUsCi0JCQkJY3VyX21vZGUudGltaW5nLmhfZnJvbnRfcG9yY2gs Ci0JCQkJYWRqX21vZGUudGltaW5nLmhfZnJvbnRfcG9yY2gpOwotCQkJYnJlYWs7Ci0KLQkJZGVm YXVsdDoKLQkJCXByX2VycigiVW5zdXBwb3J0ZWQgREZQUyBtb2RlICVkXG4iLAotCQkJCWRmcHNf Y2Fwcy50eXBlKTsKLQkJCXJjID0gLUVOT1RTVVBQOwotCQl9Ci0KLQkJcHJfZGVidWcoIk1vZGUg c3dpdGNoIGlzIHNlYW1sZXNzIHZhcmlhYmxlIHJlZnJlc2hcbiIpOwotCQltb2RlLT5kc2lfbW9k ZV9mbGFncyB8PSBEU0lfTU9ERV9GTEFHX1ZSUjsKLQkJRFBVX0VWVDMyKGN1cnJfcmVmcmVzaF9y YXRlLCBhZGpfbW9kZS50aW1pbmcucmVmcmVzaF9yYXRlLAotCQkJCWN1cl9tb2RlLnRpbWluZy5o X2Zyb250X3BvcmNoLAotCQkJCWFkal9tb2RlLnRpbWluZy5oX2Zyb250X3BvcmNoKTsKLQl9Ci0K LWVycm9yOgotCW11dGV4X3VubG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQlyZXR1cm4g cmM7Ci19Ci0KLWludCBkc2lfZGlzcGxheV92YWxpZGF0ZV9tb2RlKHN0cnVjdCBkc2lfZGlzcGxh eSAqZGlzcGxheSwKLQkJCSAgICAgIHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlLAotCQkJ ICAgICAgdTMyIGZsYWdzKQotewotCWludCByYyA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IGRzaV9k aXNwbGF5X2N0cmwgKmN0cmw7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgYWRqX21vZGU7Ci0K LQlpZiAoIWRpc3BsYXkgfHwgIW1vZGUpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRpc3BsYXktPmRpc3BsYXlf bG9jayk7Ci0KLQlhZGpfbW9kZSA9ICptb2RlOwotCWFkanVzdF90aW1pbmdfYnlfY3RybF9jb3Vu dChkaXNwbGF5LCAmYWRqX21vZGUpOwotCi0JcmMgPSBkc2lfcGFuZWxfdmFsaWRhdGVfbW9kZShk aXNwbGF5LT5wYW5lbCwgJmFkal9tb2RlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIHBh bmVsIG1vZGUgdmFsaWRhdGlvbiBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+ bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5 LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlyYyA9 IGRzaV9jdHJsX3ZhbGlkYXRlX3RpbWluZyhjdHJsLT5jdHJsLCAmYWRqX21vZGUudGltaW5nKTsK LQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gY3RybCBtb2RlIHZhbGlkYXRpb24gZmFpbGVk LCByYz0lZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVycm9y OwotCQl9Ci0KLQkJcmMgPSBkc2lfcGh5X3ZhbGlkYXRlX21vZGUoY3RybC0+cGh5LCAmYWRqX21v ZGUudGltaW5nKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gcGh5IG1vZGUgdmFsaWRh dGlvbiBmYWlsZWQsIHJjPSVkXG4iLAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJ CWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLQlpZiAoKGZsYWdzICYgRFNJX1ZBTElEQVRFX0ZMQUdf QUxMT1dfQURKVVNUKSAmJgotCQkJKG1vZGUtPmRzaV9tb2RlX2ZsYWdzICYgRFNJX01PREVfRkxB R19TRUFNTEVTUykpIHsKLQkJcmMgPSBkc2lfZGlzcGxheV92YWxpZGF0ZV9tb2RlX3NlYW1sZXNz KGRpc3BsYXksIG1vZGUpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBzZWFtbGVzcyBu b3QgcG9zc2libGUgcmM9JWRcbiIsCi0JCQkJZGlzcGxheS0+bmFtZSwgcmMpOwotCQkJZ290byBl cnJvcjsKLQkJfQotCX0KLQotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZkaXNwbGF5LT5kaXNwbGF5 X2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9kaXNwbGF5X3NldF9tb2RlKHN0cnVj dCBkc2lfZGlzcGxheSAqZGlzcGxheSwKLQkJCSBzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqbW9k ZSwKLQkJCSB1MzIgZmxhZ3MpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlf bW9kZSBhZGpfbW9kZTsKLQotCWlmICghZGlzcGxheSB8fCAhbW9kZSB8fCAhZGlzcGxheS0+cGFu ZWwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwot CX0KLQotCW11dGV4X2xvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0KLQlhZGpfbW9kZSA9 ICptb2RlOwotCWFkanVzdF90aW1pbmdfYnlfY3RybF9jb3VudChkaXNwbGF5LCAmYWRqX21vZGUp OwotCi0JcmMgPSBkc2lfZGlzcGxheV92YWxpZGF0ZV9tb2RlX3NldChkaXNwbGF5LCAmYWRqX21v ZGUsIGZsYWdzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIG1vZGUgY2Fubm90IGJlIHNl dFxuIiwgZGlzcGxheS0+bmFtZSk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBkc2lfZGlz cGxheV9zZXRfbW9kZV9zdWIoZGlzcGxheSwgJmFkal9tb2RlLCBmbGFncyk7Ci0JaWYgKHJjKSB7 Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gc2V0IG1vZGVcbiIsIGRpc3BsYXktPm5hbWUpOwot CQlnb3RvIGVycm9yOwotCX0KLQotCWlmICghZGlzcGxheS0+cGFuZWwtPmN1cl9tb2RlKSB7Ci0J CWRpc3BsYXktPnBhbmVsLT5jdXJfbW9kZSA9Ci0JCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgZHNp X2Rpc3BsYXlfbW9kZSksIEdGUF9LRVJORUwpOwotCQlpZiAoIWRpc3BsYXktPnBhbmVsLT5jdXJf bW9kZSkgewotCQkJcmMgPSAtRU5PTUVNOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0KLQotCW1l bWNweShkaXNwbGF5LT5wYW5lbC0+Y3VyX21vZGUsICZhZGpfbW9kZSwgc2l6ZW9mKGFkal9tb2Rl KSk7Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0JcmV0 dXJuIHJjOwotfQotCi1pbnQgZHNpX2Rpc3BsYXlfc2V0X3RwZ19zdGF0ZShzdHJ1Y3QgZHNpX2Rp c3BsYXkgKmRpc3BsYXksIGJvb2wgZW5hYmxlKQotewotCWludCByYyA9IDA7Ci0JaW50IGk7Ci0J c3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKmN0cmw7Ci0KLQlpZiAoIWRpc3BsYXkpIHsKLQkJcHJf ZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWZvciAo aSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5 LT5jdHJsW2ldOwotCQlyYyA9IGRzaV9jdHJsX3NldF90cGdfc3RhdGUoY3RybC0+Y3RybCwgZW5h YmxlKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHNldCB0cGcgc3Rh dGUgZm9yIGhvc3RfJWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgaSk7Ci0JCQlnb3Rv IGVycm9yOwotCQl9Ci0JfQotCi0JZGlzcGxheS0+aXNfdHBnX2VuYWJsZWQgPSBlbmFibGU7Ci1l cnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfcHJlX3N3aXRj aChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQotCXJjID0g ZHNpX2Rpc3BsYXlfY2xrX2N0cmwoZGlzcGxheS0+ZHNpX2Nsa19oYW5kbGUsCi0JCQlEU0lfQ09S RV9DTEssIERTSV9DTEtfT04pOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRv IGVuYWJsZSBEU0kgY29yZSBjbG9ja3MsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFt ZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlfY3RybF91cGRh dGUoZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gdXBkYXRl IERTSSBjb250cm9sbGVyLCByYz0lZFxuIiwKLQkJCSAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJ Z290byBlcnJvcl9jdHJsX2Nsa19vZmY7Ci0JfQotCi0JcmMgPSBkc2lfZGlzcGxheV9zZXRfY2xr X3NyYyhkaXNwbGF5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZXQg RFNJIGxpbmsgY2xvY2sgc291cmNlLCByYz0lZFxuIiwKLQkJCWRpc3BsYXktPm5hbWUsIHJjKTsK LQkJZ290byBlcnJvcl9jdHJsX2RlaW5pdDsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2Nsa19j dHJsKGRpc3BsYXktPmRzaV9jbGtfaGFuZGxlLAotCQkJRFNJX0xJTktfQ0xLLCBEU0lfQ0xLX09O KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBlbmFibGUgRFNJIGxpbmsg Y2xvY2tzLCByYz0lZFxuIiwKLQkJCSAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJv cl9jdHJsX2RlaW5pdDsKLQl9Ci0KLQlnb3RvIGVycm9yOwotCi1lcnJvcl9jdHJsX2RlaW5pdDoK LQkodm9pZClkc2lfZGlzcGxheV9jdHJsX2RlaW5pdChkaXNwbGF5KTsKLWVycm9yX2N0cmxfY2xr X29mZjoKLQkodm9pZClkc2lfZGlzcGxheV9jbGtfY3RybChkaXNwbGF5LT5kc2lfY2xrX2hhbmRs ZSwKLQkJCURTSV9DT1JFX0NMSywgRFNJX0NMS19PRkYpOwotZXJyb3I6Ci0JcmV0dXJuIHJjOwot fQotCi1pbnQgZHNpX2Rpc3BsYXlfcHJlcGFyZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkp Ci17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqbW9kZTsKLQotCWlm ICghZGlzcGxheSkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCi0JaWYgKCFkaXNwbGF5LT5wYW5lbC0+Y3VyX21vZGUpIHsKLQkJcHJfZXJy KCJubyB2YWxpZCBtb2RlIHNldCBmb3IgdGhlIGRpc3BsYXkiKTsKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0JfQotCi0JbXV0ZXhfbG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQotCW1vZGUgPSBk aXNwbGF5LT5wYW5lbC0+Y3VyX21vZGU7Ci0KLQlpZiAobW9kZS0+ZHNpX21vZGVfZmxhZ3MgJiBE U0lfTU9ERV9GTEFHX0RNUykgewotCQkvKiB1cGRhdGUgZHNpIGN0cmwgZm9yIG5ldyBtb2RlICov Ci0JCXJjID0gZHNpX2Rpc3BsYXlfcHJlX3N3aXRjaChkaXNwbGF5KTsKLQkJaWYgKHJjKQotCQkJ cHJfZXJyKCJbJXNdIHBhbmVsIHByZS1wcmVwYXJlLXJlcy1zd2l0Y2ggZmFpbGVkLCByYz0lZFxu IiwKLQkJCQkgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0KLQkJZ290byBlcnJvcjsKLQl9Ci0KLQly YyA9IGRzaV9wYW5lbF9wcmVfcHJlcGFyZShkaXNwbGF5LT5wYW5lbCk7Ci0JaWYgKHJjKSB7Ci0J CXByX2VycigiWyVzXSBwYW5lbCBwcmUtcHJlcGFyZSBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAg ICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gZHNpX2Rp c3BsYXlfY2xrX2N0cmwoZGlzcGxheS0+ZHNpX2Nsa19oYW5kbGUsCi0JCQlEU0lfQ09SRV9DTEss IERTSV9DTEtfT04pOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJs ZSBEU0kgY29yZSBjbG9ja3MsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMp OwotCQlnb3RvIGVycm9yX3BhbmVsX3Bvc3RfdW5wcmVwOwotCX0KLQotCXJjID0gZHNpX2Rpc3Bs YXlfcGh5X3N3X3Jlc2V0KGRpc3BsYXkpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFp bGVkIHRvIHJlc2V0IHBoeSwgcmM9JWRcbiIsIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBl cnJvcl9jdHJsX2Nsa19vZmY7Ci0JfQotCi0JcmMgPSBkc2lfZGlzcGxheV9waHlfZW5hYmxlKGRp c3BsYXkpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJsZSBEU0kg UEhZLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJv cl9jdHJsX2Nsa19vZmY7Ci0JfQotCi0JcmMgPSBkc2lfZGlzcGxheV9zZXRfY2xrX3NyYyhkaXNw bGF5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZXQgRFNJIGxpbmsg Y2xvY2sgc291cmNlLCByYz0lZFxuIiwKLQkJCWRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBl cnJvcl9waHlfZGlzYWJsZTsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2N0cmxfaW5pdChkaXNw bGF5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZXR1cCBEU0kgY29u dHJvbGxlciwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8g ZXJyb3JfcGh5X2Rpc2FibGU7Ci0JfQotCi0JcmMgPSBkc2lfZGlzcGxheV9jdHJsX2hvc3RfZW5h YmxlKGRpc3BsYXkpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJs ZSBEU0kgaG9zdCwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdv dG8gZXJyb3JfY3RybF9kZWluaXQ7Ci0JfQotCi0JcmMgPSBkc2lfZGlzcGxheV9jbGtfY3RybChk aXNwbGF5LT5kc2lfY2xrX2hhbmRsZSwKLQkJCURTSV9MSU5LX0NMSywgRFNJX0NMS19PTik7Ci0J aWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZW5hYmxlIERTSSBsaW5rIGNsb2Nr cywgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3Jf aG9zdF9lbmdpbmVfb2ZmOwotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlfc29mdF9yZXNldChkaXNw bGF5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCBzb2Z0IHJlc2V0LCByYz0l ZFxuIiwgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yX2N0cmxfbGlua19vZmY7Ci0J fQotCi0JcmMgPSBkc2lfcGFuZWxfcHJlcGFyZShkaXNwbGF5LT5wYW5lbCk7Ci0JaWYgKHJjKSB7 Ci0JCXByX2VycigiWyVzXSBwYW5lbCBwcmVwYXJlIGZhaWxlZCwgcmM9JWRcbiIsIGRpc3BsYXkt Pm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcl9jdHJsX2xpbmtfb2ZmOwotCX0KLQotCWdvdG8gZXJy b3I7Ci0KLWVycm9yX2N0cmxfbGlua19vZmY6Ci0JKHZvaWQpZHNpX2Rpc3BsYXlfY2xrX2N0cmwo ZGlzcGxheS0+ZHNpX2Nsa19oYW5kbGUsCi0JCQlEU0lfTElOS19DTEssIERTSV9DTEtfT0ZGKTsK LWVycm9yX2hvc3RfZW5naW5lX29mZjoKLQkodm9pZClkc2lfZGlzcGxheV9jdHJsX2hvc3RfZGlz YWJsZShkaXNwbGF5KTsKLWVycm9yX2N0cmxfZGVpbml0OgotCSh2b2lkKWRzaV9kaXNwbGF5X2N0 cmxfZGVpbml0KGRpc3BsYXkpOwotZXJyb3JfcGh5X2Rpc2FibGU6Ci0JKHZvaWQpZHNpX2Rpc3Bs YXlfcGh5X2Rpc2FibGUoZGlzcGxheSk7Ci1lcnJvcl9jdHJsX2Nsa19vZmY6Ci0JKHZvaWQpZHNp X2Rpc3BsYXlfY2xrX2N0cmwoZGlzcGxheS0+ZHNpX2Nsa19oYW5kbGUsCi0JCQlEU0lfQ09SRV9D TEssIERTSV9DTEtfT0ZGKTsKLWVycm9yX3BhbmVsX3Bvc3RfdW5wcmVwOgotCSh2b2lkKWRzaV9w YW5lbF9wb3N0X3VucHJlcGFyZShkaXNwbGF5LT5wYW5lbCk7Ci1lcnJvcjoKLQltdXRleF91bmxv Y2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX2Rp c3BsYXlfcHJlX2tpY2tvZmYoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCBy YyA9IDA7Ci0KLQkvKiBjaGVjayBhbmQgc2V0dXAgTUlTUiAqLwotCWlmIChkaXNwbGF5LT5taXNy X2VuYWJsZSkKLQkJX2RzaV9kaXNwbGF5X3NldHVwX21pc3IoZGlzcGxheSk7Ci0KLQlyZXR1cm4g cmM7Ci19Ci0KLWludCBkc2lfZGlzcGxheV9lbmFibGUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNw bGF5KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGU7Ci0K LQlpZiAoIWRpc3BsYXkgfHwgIWRpc3BsYXktPnBhbmVsKSB7Ci0JCXByX2VycigiSW52YWxpZCBw YXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIWRpc3BsYXktPnBhbmVs LT5jdXJfbW9kZSkgewotCQlwcl9lcnIoIm5vIHZhbGlkIG1vZGUgc2V0IGZvciB0aGUgZGlzcGxh eSIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkaXNwbGF5LT5kaXNw bGF5X2xvY2spOwotCi0JbW9kZSA9IGRpc3BsYXktPnBhbmVsLT5jdXJfbW9kZTsKLQotCWlmICht b2RlLT5kc2lfbW9kZV9mbGFncyAmIERTSV9NT0RFX0ZMQUdfRE1TKSB7Ci0JCXJjID0gZHNpX3Bh bmVsX3Bvc3Rfc3dpdGNoKGRpc3BsYXktPnBhbmVsKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIo Ilslc10gZmFpbGVkIHRvIHN3aXRjaCBEU0kgcGFuZWwgbW9kZSwgcmM9JWRcbiIsCi0JCQkJICAg ZGlzcGxheS0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0gZWxzZSB7Ci0JCXJj ID0gZHNpX3BhbmVsX2VuYWJsZShkaXNwbGF5LT5wYW5lbCk7Ci0JCWlmIChyYykgewotCQkJcHJf ZXJyKCJbJXNdIGZhaWxlZCB0byBlbmFibGUgRFNJIHBhbmVsLCByYz0lZFxuIiwKLQkJCSAgICAg ICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi0JaWYgKG1v ZGUtPnByaXZfaW5mby0+ZHNjX2VuYWJsZWQpIHsKLQkJbW9kZS0+cHJpdl9pbmZvLT5kc2MucGlj X3dpZHRoICo9IGRpc3BsYXktPmN0cmxfY291bnQ7Ci0JCXJjID0gZHNpX3BhbmVsX3VwZGF0ZV9w cHMoZGlzcGxheS0+cGFuZWwpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBwYW5lbCBw cHMgY21kIHVwZGF0ZSBmYWlsZWQsIHJjPSVkXG4iLAotCQkJCWRpc3BsYXktPm5hbWUsIHJjKTsK LQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLQlpZiAobW9kZS0+ZHNpX21vZGVfZmxhZ3MgJiBE U0lfTU9ERV9GTEFHX0RNUykgewotCQlyYyA9IGRzaV9wYW5lbF9zd2l0Y2goZGlzcGxheS0+cGFu ZWwpOwotCQlpZiAocmMpCi0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHN3aXRjaCBEU0kgcGFu ZWwgbW9kZSwgcmM9JWRcbiIsCi0JCQkJICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCi0JCWdvdG8g ZXJyb3I7Ci0JfQotCi0JaWYgKGRpc3BsYXktPmNvbmZpZy5wYW5lbF9tb2RlID09IERTSV9PUF9W SURFT19NT0RFKSB7Ci0JCXJjID0gZHNpX2Rpc3BsYXlfdmlkX2VuZ2luZV9lbmFibGUoZGlzcGxh eSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdZmFpbGVkIHRvIGVuYWJsZSBEU0kgdmlk ZW8gZW5naW5lLCByYz0lZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCQln b3RvIGVycm9yX2Rpc2FibGVfcGFuZWw7Ci0JCX0KLQl9IGVsc2UgaWYgKGRpc3BsYXktPmNvbmZp Zy5wYW5lbF9tb2RlID09IERTSV9PUF9DTURfTU9ERSkgewotCQlyYyA9IGRzaV9kaXNwbGF5X2Nt ZF9lbmdpbmVfZW5hYmxlKGRpc3BsYXkpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXWZh aWxlZCB0byBlbmFibGUgRFNJIGNtZCBlbmdpbmUsIHJjPSVkXG4iLAotCQkJICAgICAgIGRpc3Bs YXktPm5hbWUsIHJjKTsKLQkJCWdvdG8gZXJyb3JfZGlzYWJsZV9wYW5lbDsKLQkJfQotCX0gZWxz ZSB7Ci0JCXByX2VycigiWyVzXSBJbnZhbGlkIGNvbmZpZ3VyYXRpb25cbiIsIGRpc3BsYXktPm5h bWUpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3JfZGlzYWJsZV9wYW5lbDsKLQl9Ci0K LQlnb3RvIGVycm9yOwotCi1lcnJvcl9kaXNhYmxlX3BhbmVsOgotCSh2b2lkKWRzaV9wYW5lbF9k aXNhYmxlKGRpc3BsYXktPnBhbmVsKTsKLWVycm9yOgotCW11dGV4X3VubG9jaygmZGlzcGxheS0+ ZGlzcGxheV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfZGlzcGxheV9wb3N0X2Vu YWJsZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQotCWlm ICghZGlzcGxheSkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQotCXJj ID0gZHNpX3BhbmVsX3Bvc3RfZW5hYmxlKGRpc3BsYXktPnBhbmVsKTsKLQlpZiAocmMpCi0JCXBy X2VycigiWyVzXSBwYW5lbCBwb3N0LWVuYWJsZSBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAgICAg ZGlzcGxheS0+bmFtZSwgcmMpOwotCi0JLyogcmVtb3ZlIHRoZSBjbGsgdm90ZSBmb3IgQ01EIG1v ZGUgcGFuZWxzICovCi0JaWYgKGRpc3BsYXktPmNvbmZpZy5wYW5lbF9tb2RlID09IERTSV9PUF9D TURfTU9ERSkKLQkJZHNpX2Rpc3BsYXlfY2xrX2N0cmwoZGlzcGxheS0+ZHNpX2Nsa19oYW5kbGUs Ci0JCQlEU0lfQUxMX0NMS1MsIERTSV9DTEtfT0ZGKTsKLQotCW11dGV4X3VubG9jaygmZGlzcGxh eS0+ZGlzcGxheV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfZGlzcGxheV9wcmVf ZGlzYWJsZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQot CWlmICghZGlzcGxheSkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJu IC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQot CS8qIGVuYWJsZSB0aGUgY2xrIHZvdGUgZm9yIENNRCBtb2RlIHBhbmVscyAqLwotCWlmIChkaXNw bGF5LT5jb25maWcucGFuZWxfbW9kZSA9PSBEU0lfT1BfQ01EX01PREUpCi0JCWRzaV9kaXNwbGF5 X2Nsa19jdHJsKGRpc3BsYXktPmRzaV9jbGtfaGFuZGxlLAotCQkJRFNJX0FMTF9DTEtTLCBEU0lf Q0xLX09OKTsKLQotCXJjID0gZHNpX3BhbmVsX3ByZV9kaXNhYmxlKGRpc3BsYXktPnBhbmVsKTsK LQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBwYW5lbCBwcmUtZGlzYWJsZSBmYWlsZWQsIHJjPSVk XG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCi0JbXV0ZXhfdW5sb2NrKCZkaXNw bGF5LT5kaXNwbGF5X2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9kaXNwbGF5X2Rp c2FibGUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0KLQlp ZiAoIWRpc3BsYXkpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0KLQly YyA9IGRzaV9kaXNwbGF5X3dha2VfdXAoZGlzcGxheSk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlsl c10gZGlzcGxheSB3YWtlIHVwIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5u YW1lLCByYyk7Ci0KLQlpZiAoZGlzcGxheS0+Y29uZmlnLnBhbmVsX21vZGUgPT0gRFNJX09QX1ZJ REVPX01PREUpIHsKLQkJcmMgPSBkc2lfZGlzcGxheV92aWRfZW5naW5lX2Rpc2FibGUoZGlzcGxh eSk7Ci0JCWlmIChyYykKLQkJCXByX2VycigiWyVzXWZhaWxlZCB0byBkaXNhYmxlIERTSSB2aWQg ZW5naW5lLCByYz0lZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JfSBlbHNl IGlmIChkaXNwbGF5LT5jb25maWcucGFuZWxfbW9kZSA9PSBEU0lfT1BfQ01EX01PREUpIHsKLQkJ cmMgPSBkc2lfZGlzcGxheV9jbWRfZW5naW5lX2Rpc2FibGUoZGlzcGxheSk7Ci0JCWlmIChyYykK LQkJCXByX2VycigiWyVzXWZhaWxlZCB0byBkaXNhYmxlIERTSSBjbWQgZW5naW5lLCByYz0lZFxu IiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JfSBlbHNlIHsKLQkJcHJfZXJyKCJb JXNdIEludmFsaWQgY29uZmlndXJhdGlvblxuIiwgZGlzcGxheS0+bmFtZSk7Ci0JCXJjID0gLUVJ TlZBTDsKLQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF9kaXNhYmxlKGRpc3BsYXktPnBhbmVsKTsKLQlp ZiAocmMpCi0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGlzYWJsZSBEU0kgcGFuZWwsIHJjPSVk XG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCi0JbXV0ZXhfdW5sb2NrKCZkaXNw bGF5LT5kaXNwbGF5X2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9kaXNwbGF5X3Vw ZGF0ZV9wcHMoY2hhciAqcHBzX2NtZCwgdm9pZCAqZGlzcCkKLXsKLQlzdHJ1Y3QgZHNpX2Rpc3Bs YXkgKmRpc3BsYXk7Ci0KLQlpZiAocHBzX2NtZCA9PSBOVUxMIHx8IGRpc3AgPT0gTlVMTCkgewot CQlwcl9lcnIoIkludmFsaWQgcGFyYW1ldGVyXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JZGlzcGxheSA9IGRpc3A7Ci0JbXV0ZXhfbG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsK LQltZW1jcHkoZGlzcGxheS0+cGFuZWwtPmRzY19wcHNfY21kLCBwcHNfY21kLCBEU0lfQ01EX1BQ U19TSVpFKTsKLQltdXRleF91bmxvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0KLQlyZXR1 cm4gMDsKLX0KLQotaW50IGRzaV9kaXNwbGF5X3VucHJlcGFyZShzdHJ1Y3QgZHNpX2Rpc3BsYXkg KmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghZGlzcGxheSkgewotCQlwcl9lcnIo IkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9j aygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQotCXJjID0gZHNpX2Rpc3BsYXlfd2FrZV91cChk aXNwbGF5KTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBkaXNwbGF5IHdha2UgdXAgZmFpbGVk LCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQotCXJjID0gZHNpX3Bh bmVsX3VucHJlcGFyZShkaXNwbGF5LT5wYW5lbCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlslc10g cGFuZWwgdW5wcmVwYXJlIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1l LCByYyk7Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2N0cmxfaG9zdF9kaXNhYmxlKGRpc3BsYXkpOwot CWlmIChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBkaXNhYmxlIERTSSBob3N0LCByYz0l ZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQotCXJjID0gZHNpX2Rpc3BsYXlf Y2xrX2N0cmwoZGlzcGxheS0+ZHNpX2Nsa19oYW5kbGUsCi0JCQlEU0lfTElOS19DTEssIERTSV9D TEtfT0ZGKTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGlzYWJsZSBMaW5r IGNsb2NrcywgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0KLQlyYyA9 IGRzaV9kaXNwbGF5X2N0cmxfZGVpbml0KGRpc3BsYXkpOwotCWlmIChyYykKLQkJcHJfZXJyKCJb JXNdIGZhaWxlZCB0byBkZWluaXQgY29udHJvbGxlciwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNw bGF5LT5uYW1lLCByYyk7Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X3BoeV9kaXNhYmxlKGRpc3BsYXkp OwotCWlmIChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBkaXNhYmxlIERTSSBQSFksIHJj PSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCi0JcmMgPSBkc2lfZGlzcGxh eV9jbGtfY3RybChkaXNwbGF5LT5kc2lfY2xrX2hhbmRsZSwKLQkJCURTSV9DT1JFX0NMSywgRFNJ X0NMS19PRkYpOwotCWlmIChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBkaXNhYmxlIERT SSBjbG9ja3MsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCi0JcmMg PSBkc2lfcGFuZWxfcG9zdF91bnByZXBhcmUoZGlzcGxheS0+cGFuZWwpOwotCWlmIChyYykKLQkJ cHJfZXJyKCJbJXNdIHBhbmVsIHBvc3QtdW5wcmVwYXJlIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAg ICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0KLQltdXRleF91bmxvY2soJmRpc3BsYXktPmRpc3Bs YXlfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBkc2lfZGlzcGxh eV9yZWdpc3Rlcih2b2lkKQotewotCWRzaV9waHlfZHJ2X3JlZ2lzdGVyKCk7Ci0JZHNpX2N0cmxf ZHJ2X3JlZ2lzdGVyKCk7Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZHNpX2Rp c3BsYXlfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGRzaV9kaXNwbGF5X3VucmVn aXN0ZXIodm9pZCkKLXsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZHNpX2Rpc3BsYXlf ZHJpdmVyKTsKLQlkc2lfY3RybF9kcnZfdW5yZWdpc3RlcigpOwotCWRzaV9waHlfZHJ2X3VucmVn aXN0ZXIoKTsKLX0KLW1vZHVsZV9wYXJhbV9zdHJpbmcoZHNpX2Rpc3BsYXkwLCBkc2lfZGlzcGxh eV9wcmltYXJ5LCBNQVhfQ01ETElORV9QQVJBTV9MRU4sCi0JCQkJCQkJCTA2MDApOwotTU9EVUxF X1BBUk1fREVTQyhkc2lfZGlzcGxheTAsCi0JIm1zbV9kcm0uZHNpX2Rpc3BsYXkwPTxkaXNwbGF5 IG5vZGU+Ojxjb25maWdYPiB3aGVyZSA8ZGlzcGxheSBub2RlPiBpcyAncHJpbWFyeSBkc2kgZGlz cGxheSBub2RlIG5hbWUnIGFuZCA8Y29uZmlnWD4gd2hlcmUgeCByZXByZXNlbnRzIGluZGV4IGlu IHRoZSB0b3BvbG9neSBsaXN0Iik7Ci1tb2R1bGVfcGFyYW1fc3RyaW5nKGRzaV9kaXNwbGF5MSwg ZHNpX2Rpc3BsYXlfc2Vjb25kYXJ5LCBNQVhfQ01ETElORV9QQVJBTV9MRU4sCi0JCQkJCQkJCTA2 MDApOwotTU9EVUxFX1BBUk1fREVTQyhkc2lfZGlzcGxheTEsCi0JIm1zbV9kcm0uZHNpX2Rpc3Bs YXkxPTxkaXNwbGF5IG5vZGU+Ojxjb25maWdYPiB3aGVyZSA8ZGlzcGxheSBub2RlPiBpcyAnc2Vj b25kYXJ5IGRzaSBkaXNwbGF5IG5vZGUgbmFtZScgYW5kIDxjb25maWdYPiB3aGVyZSB4IHJlcHJl c2VudHMgaW5kZXggaW4gdGhlIHRvcG9sb2d5IGxpc3QiKTsKLW1vZHVsZV9pbml0KGRzaV9kaXNw bGF5X3JlZ2lzdGVyKTsKLW1vZHVsZV9leGl0KGRzaV9kaXNwbGF5X3VucmVnaXN0ZXIpOwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGlzcGxheS5oIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGlzcGxheS5oCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCBhMGY5Y2NmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHNpLXN0YWdpbmcvZHNpX2Rpc3BsYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1NiAr MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0 aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh bmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpZm5kZWYg X0RTSV9ESVNQTEFZX0hfCi0jZGVmaW5lIF9EU0lfRElTUExBWV9IXwotCi0jaW5jbHVkZSA8bGlu dXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9k ZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Ci0jaW5jbHVkZSA8ZHJtL2Ry bVAuaD4KLSNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KLQotI2luY2x1ZGUgIm1zbV9kcnYuaCIK LSNpbmNsdWRlICJkc2lfZGVmcy5oIgotI2luY2x1ZGUgImRzaV9jdHJsLmgiCi0jaW5jbHVkZSAi ZHNpX3BoeS5oIgotI2luY2x1ZGUgImRzaV9wYW5lbC5oIgotCi0jZGVmaW5lIE1BWF9EU0lfQ1RS TFNfUEVSX0RJU1BMQVkgICAgICAgICAgICAgMgotI2RlZmluZSBEU0lfQ0xJRU5UX05BTUVfU0la RQkJMjAKLSNkZWZpbmUgTUFYX0NNRExJTkVfUEFSQU1fTEVOCSA1MTIKLS8qCi0gKiBEU0kgVmFs aWRhdGUgTW9kZSBtb2RpZmllcnMKLSAqIEBEU0lfVkFMSURBVEVfRkxBR19BTExPV19BREpVU1Q6 CUFsbG93IG1vZGUgdmFsaWRhdGlvbiB0byBhbHNvIGRvIGZpeHVwCi0gKi8KLSNkZWZpbmUgRFNJ X1ZBTElEQVRFX0ZMQUdfQUxMT1dfQURKVVNUCTB4MQotCi0vKioKLSAqIGVudW0gZHNpX2Rpc3Bs YXlfc2VsZWN0aW9uX3R5cGUgLSBlbnVtZXJhdGVzIERTSSBkaXNwbGF5IHNlbGVjdGlvbiB0eXBl cwotICogQERTSV9QUklNQVJZOiAgICBwcmltYXJ5IERTSSBkaXNwbGF5IHNlbGVjdGVkIGZyb20g bW9kdWxlIHBhcmFtZXRlcgotICogQERTSV9TRUNPTkRBUlk6ICBTZWNvbmRhcnkgRFNJIGRpc3Bs YXkgc2VsZWN0ZWQgZnJvbSBtb2R1bGUgcGFyYW1ldGVyCi0gKiBATUFYX0RTSV9BQ1RJVkVfRElT UExBWTogTWF4aW11bSBhY2l2ZSBkaXNwbGF5cyB0aGF0IGNhbiBiZSBzZWxlY3RlZAotICovCi1l bnVtIGRzaV9kaXNwbGF5X3NlbGVjdGlvbl90eXBlIHsKLQlEU0lfUFJJTUFSWSA9IDAsCi0JRFNJ X1NFQ09OREFSWSwKLQlNQVhfRFNJX0FDVElWRV9ESVNQTEFZLAotfTsKLQotLyoqCi0gKiBlbnVt IGRzaV9kaXNwbGF5X3R5cGUgLSBlbnVtZXJhdGVzIERTSSBkaXNwbGF5IHR5cGVzCi0gKiBARFNJ X0RJU1BMQVlfU0lOR0xFOiAgICAgICBBIHBhbmVsIGNvbm5lY3RlZCBvbiBhIHNpbmdsZSBEU0kg aW50ZXJmYWNlLgotICogQERTSV9ESVNQTEFZX0VYVF9CUklER0U6ICAgQSBicmlkZ2UgaXMgY29u bmVjdGVkIGJldHdlZW4gcGFuZWwgYW5kIERTSSBob3N0LgotICoJCQkgICAgICBJdCB1dGlsaXpl cyBhIHNpbmdsZSBEU0kgaW50ZXJmYWNlLgotICogQERTSV9ESVNQTEFZX1NQTElUOiAgICAgICAg QSBwYW5lbCB0aGF0IHV0aWxpemVzIG1vcmUgdGhhbiBvbmUgRFNJCi0gKgkJCSAgICAgIGludGVy ZmFjZXMuCi0gKiBARFNJX0RJU1BMQVlfU1BMSVRfRVhUX0JSSURHRTogQSBicmlkZ2UgaXMgcHJl c2VudCBiZXR3ZWVuIHBhbmVsIGFuZCBEU0kKLSAqCQkJCSAgaG9zdC4gSXQgdXRpbGl6ZXMgbW9y ZSB0aGFuIG9uZSBEU0kgaW50ZXJmYWNlLgotICovCi1lbnVtIGRzaV9kaXNwbGF5X3R5cGUgewot CURTSV9ESVNQTEFZX1NJTkdMRSA9IDAsCi0JRFNJX0RJU1BMQVlfRVhUX0JSSURHRSwKLQlEU0lf RElTUExBWV9TUExJVCwKLQlEU0lfRElTUExBWV9TUExJVF9FWFRfQlJJREdFLAotCURTSV9ESVNQ TEFZX01BWCwKLX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgLSBkc2kgY3Ry bC9waHkgaW5mb3JtYXRpb24gZm9yIHRoZSBkaXNwbGF5Ci0gKiBAY3RybDogICAgICAgICAgIEhh bmRsZSB0byB0aGUgRFNJIGNvbnRyb2xsZXIgZGV2aWNlLgotICogQGN0cmxfb2Zfbm9kZTogICBw SGFuZGxlIHRvIHRoZSBEU0kgY29udHJvbGxlciBkZXZpY2UuCi0gKiBAZHNpX2N0cmxfaWR4OiAg IERTSSBjb250cm9sbGVyIGluc3RhbmNlIGlkLgotICogQHBvd2VyX3N0YXRlOiAgICBDdXJyZW50 IHBvd2VyIHN0YXRlIG9mIHRoZSBEU0kgY29udHJvbGxlci4KLSAqIEBwaHk6ICAgICAgICAgICAg ICAgICAgSGFuZGxlIHRvIHRoZSBEU0kgUEhZIGRldmljZS4KLSAqIEBwaHlfb2Zfbm9kZTogICAg ICAgICAgcEhhbmRsZSB0byB0aGUgRFNJIFBIWSBkZXZpY2UuCi0gKiBAcGh5X2VuYWJsZWQ6ICAg ICAgICAgIFBIWSBwb3dlciBzdGF0dXMuCi0gKi8KLXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsIHsK LQkvKiBjb250cm9sbGVyIGluZm8gKi8KLQlzdHJ1Y3QgZHNpX2N0cmwgKmN0cmw7Ci0Jc3RydWN0 IGRldmljZV9ub2RlICpjdHJsX29mX25vZGU7Ci0JdTMyIGRzaV9jdHJsX2lkeDsKLQotCWVudW0g ZHNpX3Bvd2VyX3N0YXRlIHBvd2VyX3N0YXRlOwotCi0JLyogcGh5IGluZm8gKi8KLQlzdHJ1Y3Qg bXNtX2RzaV9waHkgKnBoeTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBoeV9vZl9ub2RlOwotCi0J Ym9vbCBwaHlfZW5hYmxlZDsKLX07Ci0vKioKLSAqIHN0cnVjdCBkc2lfZGlzcGxheV9ib290X3Bh cmFtIC0gZGVmaW5lcyBEU0kgYm9vdCBkaXNwbGF5IHNlbGVjdGlvbgotICogQG5hbWU6TmFtZSBv ZiBEU0kgZGlzcGxheSBzZWxlY3RlZCBhcyBhIGJvb3QgcGFyYW0uCi0gKiBAYm9vdF9kaXNwX2Vu OmJvb2wgdG8gaW5kaWNhdGUgZHRzaSBhdmFpbGFiaWxpdHkgb2YgZGlzcGxheSBub2RlCi0gKiBA aXNfcHJpbWFyeTpib29sIHRvIGluZGljYXRlIHdoZXRoZXIgY3VycmVudCBkaXNwbGF5IGlzIHBy aW1hcnkgZGlzcGxheQotICogQGxlbmd0aDpsZW5ndGggb2YgRFNJIGRpc3BsYXkuCi0gKiBAY21k bGluZV90b3BvbG9neTogRGlzcGxheSB0b3BvbG9neSBzaGFyZWQgZnJvbSBrZXJuZWwgY29tbWFu ZCBsaW5lLgotICovCi1zdHJ1Y3QgZHNpX2Rpc3BsYXlfYm9vdF9wYXJhbSB7Ci0JY2hhciBuYW1l W01BWF9DTURMSU5FX1BBUkFNX0xFTl07Ci0JYm9vbCBib290X2Rpc3BfZW47Ci0JYm9vbCBpc19w cmltYXJ5OwotCWludCBsZW5ndGg7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpub2RlOwotCWludCBj bWRsaW5lX3RvcG9sb2d5OwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX2Rpc3BsYXlfY2xrX2lu Zm8gLSBkc2kgZGlzcGxheSBjbG9jayBzb3VyY2UgaW5mb3JtYXRpb24KLSAqIEBzcmNfY2xrczog ICAgICAgICAgU291cmNlIGNsb2NrcyBmb3IgRFNJIGRpc3BsYXkuCi0gKiBAbXV4X2Nsa3M6ICAg ICAgICAgIE11eCBjbG9ja3MgdXNlZCBmb3IgREZQUy4KLSAqIEBzaGFkb3dfY2xrczogICAgICAg VXNlZCBmb3IgREZQUy4KLSAqLwotc3RydWN0IGRzaV9kaXNwbGF5X2Nsa19pbmZvIHsKLQlzdHJ1 Y3QgZHNpX2Nsa19saW5rX3NldCBzcmNfY2xrczsKLQlzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCBt dXhfY2xrczsKLQlzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCBzaGFkb3dfY2xrczsKLX07Ci0KLS8q KgotICogc3RydWN0IGRzaV9kaXNwbGF5IC0gZHNpIGRpc3BsYXkgaW5mb3JtYXRpb24KLSAqIEBw ZGV2OiAgICAgICAgICAgICBQb2ludGVyIHRvIHBsYXRmb3JtIGRldmljZS4KLSAqIEBkcm1fZGV2 OiAgICAgICAgICBEUk0gZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGlzcGxheS4KLSAqIEBu YW1lOiAgICAgICAgICAgICBOYW1lIG9mIHRoZSBkaXNwbGF5LgotICogQGRpc3BsYXlfdHlwZTog ICAgIERpc3BsYXkgdHlwZSBhcyBkZWZpbmVkIGluIGRldmljZSB0cmVlLgotICogQGxpc3Q6ICAg ICAgICAgICAgIExpc3QgcG9pbnRlci4KLSAqIEBpc19hY3RpdmU6ICAgICAgICBJcyBkaXNwbGF5 IGFjdGl2ZS4KLSAqIEBkaXNwbGF5X2xvY2s6ICAgICBNdXRleCBmb3IgZHNpX2Rpc3BsYXkgaW50 ZXJmYWNlLgotICogQGN0cmxfY291bnQ6ICAgICAgIE51bWJlciBvZiBEU0kgaW50ZXJmYWNlcyBy ZXF1aXJlZCBieSBwYW5lbC4KLSAqIEBjdHJsOiAgICAgICAgICAgICBDb250cm9sbGVyIGluZm9y bWF0aW9uIGZvciBEU0kgZGlzcGxheS4KLSAqIEBwYW5lbDogICAgICAgICAgICBIYW5kbGUgdG8g RFNJIHBhbmVsLgotICogQHBhbmVsX29mOiAgICAgICAgIHBIYW5kbGUgdG8gRFNJIHBhbmVsLgot ICogQHR5cGU6ICAgICAgICAgICAgIERTSSBkaXNwbGF5IHR5cGUuCi0gKiBAY2xrX21hc3Rlcl9p ZHg6ICAgVGhlIG1hc3RlciBjb250cm9sbGVyIGZvciBjb250cm9sbGluZyBjbG9ja3MuIFRoaXMg aXMgYW4KLSAqCQkgICAgICBpbmRleCBpbnRvIHRoZSBjdHJsW01BWF9EU0lfQ1RSTFNfUEVSX0RJ U1BMQVldIGFycmF5LgotICogQGNtZF9tYXN0ZXJfaWR4OiAgIFRoZSBtYXN0ZXIgY29udHJvbGxl ciBmb3Igc2VuZGluZyBEU0kgY29tbWFuZHMgdG8gcGFuZWwuCi0gKiBAdmlkZW9fbWFzdGVyX2lk eDogVGhlIG1hc3RlciBjb250cm9sbGVyIGZvciBlbmFibGluZyB2aWRlbyBlbmdpbmUuCi0gKiBA Y2xvY2tfaW5mbzogICAgICAgQ2xvY2sgc291cmNpbmcgZm9yIERTSSBkaXNwbGF5LgotICogQGNv bmZpZzogICAgICAgICAgIERTSSBob3N0IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCi0gKiBA bGFuZV9tYXA6ICAgICAgICAgTGFuZSBtYXBwaW5nIGJldHdlZW4gRFNJIGhvc3QgYW5kIFBhbmVs LgotICogQGNtZGxpbmVfdG9wb2xvZ3k6IERpc3BsYXkgdG9wb2xvZ3kgc2hhcmVkIGZyb20ga2Vy bmVsIGNvbW1hbmQgbGluZS4KLSAqIEBjbWRsaW5lX3RpbWluZzogICBEaXNwbGF5IHRpbWluZyBz aGFyZWQgZnJvbSBrZXJuZWwgY29tbWFuZCBsaW5lLgotICogQGlzX3RwZ19lbmFibGVkOiAgIFRQ RyBzdGF0ZS4KLSAqIEB1bHBzX2VuYWJsZWQ6ICAgICB1bHBzIHN0YXRlLgotICogQGNsYW1wX2Vu YWJsZWQ6ICAgIGNsYW1wIHN0YXRlLgotICogQHBoeV9pZGxlX3Bvd2VyX29mZjogICBQSFkgcG93 ZXIgc3RhdGUuCi0gKiBAaG9zdDogICAgICAgICAgICAgRFJNIE1JUEkgRFNJIEhvc3QuCi0gKiBA YnJpZGdlOiAgICAgICAgICAgUG9pbnRlciB0byBEUk0gYnJpZGdlIG9iamVjdC4KLSAqIEBjbWRf ZW5naW5lX3JlZmNvdW50OiAgUmVmZXJlbmNlIGNvdW50IGVuZm9yY2luZyBzaW5nbGUgaW5zdGFu Y2Ugb2YgY21kIGVuZwotICogQGNsa19tbmdyOiAgICAgICAgIERTSSBjbG9jayBtYW5hZ2VyLgot ICogQGRzaV9jbGtfaGFuZGxlOiAgIERTSSBjbG9jayBoYW5kbGUuCi0gKiBAbWRwX2Nsa19oYW5k bGU6ICAgTURQIGNsb2NrIGhhbmRsZS4KLSAqIEByb290OiAgICAgICAgICAgICBEZWJ1Z2ZzIHJv b3QgZGlyZWN0b3J5Ci0gKiBAbWlzcl9lbmFibGUgICAgICAgRnJhbWUgTUlTUiBlbmFibGUvZGlz YWJsZQotICogQG1pc3JfZnJhbWVfY291bnQgIE51bWJlciBvZiBmcmFtZXMgdG8gYWNjdW11bGF0 ZSB0aGUgTUlTUiB2YWx1ZQotICovCi1zdHJ1Y3QgZHNpX2Rpc3BsYXkgewotCXN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXY7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXY7Ci0KLQljb25z dCBjaGFyICpuYW1lOwotCWNvbnN0IGNoYXIgKmRpc3BsYXlfdHlwZTsKLQlzdHJ1Y3QgbGlzdF9o ZWFkIGxpc3Q7Ci0JYm9vbCBpc19hY3RpdmU7Ci0Jc3RydWN0IG11dGV4IGRpc3BsYXlfbG9jazsK LQotCXUzMiBjdHJsX2NvdW50OwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsIGN0cmxbTUFYX0RT SV9DVFJMU19QRVJfRElTUExBWV07Ci0KLQkvKiBwYW5lbCBpbmZvICovCi0Jc3RydWN0IGRzaV9w YW5lbCAqcGFuZWw7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpwYW5lbF9vZjsKLQotCWVudW0gZHNp X2Rpc3BsYXlfdHlwZSB0eXBlOwotCXUzMiBjbGtfbWFzdGVyX2lkeDsKLQl1MzIgY21kX21hc3Rl cl9pZHg7Ci0JdTMyIHZpZGVvX21hc3Rlcl9pZHg7Ci0KLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY2xr X2luZm8gY2xvY2tfaW5mbzsKLQlzdHJ1Y3QgZHNpX2hvc3RfY29uZmlnIGNvbmZpZzsKLQlzdHJ1 Y3QgZHNpX2xhbmVfbWFwIGxhbmVfbWFwOwotCWludCBjbWRsaW5lX3RvcG9sb2d5OwotCWludCBj bWRsaW5lX3RpbWluZzsKLQlib29sIGlzX3RwZ19lbmFibGVkOwotCWJvb2wgdWxwc19lbmFibGVk OwotCWJvb2wgY2xhbXBfZW5hYmxlZDsKLQlib29sIHBoeV9pZGxlX3Bvd2VyX29mZjsKLQlzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKnR4X2NtZF9idWY7Ci0JdTMyIGNtZF9idWZmZXJfc2l6ZTsKLQl1 NjQgY21kX2J1ZmZlcl9pb3ZhOwotCXZvaWQgKnZhZGRyOwotCi0Jc3RydWN0IG1pcGlfZHNpX2hv c3QgaG9zdDsKLQlzdHJ1Y3QgZHNpX2JyaWRnZSAgICAqYnJpZGdlOwotCXUzMiBjbWRfZW5naW5l X3JlZmNvdW50OwotCi0Jdm9pZCAqY2xrX21uZ3I7Ci0Jdm9pZCAqZHNpX2Nsa19oYW5kbGU7Ci0J dm9pZCAqbWRwX2Nsa19oYW5kbGU7Ci0KLQkvKiBERUJVRyBGUyAqLwotCXN0cnVjdCBkZW50cnkg KnJvb3Q7Ci0KLQlib29sIG1pc3JfZW5hYmxlOwotCXUzMiBtaXNyX2ZyYW1lX2NvdW50OwotfTsK LQotI2lmZGVmIENPTkZJR19EUk1fTVNNX0RTSV9TVEFHSU5HCi0KLWludCBkc2lfZGlzcGxheV9k ZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7Ci1pbnQgZHNpX2Rpc3BsYXlf ZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKLQotLyoqCi0gKiBkc2lf ZGlzcGxheV9nZXRfbnVtX29mX2Rpc3BsYXlzKCkgLSByZXR1cm5zIG51bWJlciBvZiBkaXNwbGF5 IGRldmljZXMKLSAqCQkJCSAgICAgICBzdXBwb3J0ZWQuCi0gKgotICogUmV0dXJuOiBudW1iZXIg b2YgZGlzcGxheXMuCi0gKi8KLWludCBkc2lfZGlzcGxheV9nZXRfbnVtX29mX2Rpc3BsYXlzKHZv aWQpOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5X2dldF9hY3RpdmVfZGlzcGxheXMgLSByZXR1cm5z IHBvaW50ZXJzIGZvciBhY3RpdmUgZGlzcGxheSBkZXZpY2VzCi0gKiBAZGlzcGxheV9hcnJheTog UG9pbnRlciB0byBkaXNwbGF5IGFycmF5IHRvIGJlIGZpbGxlZAotICogQG1heF9kaXNwbGF5X2Nv dW50OiBTaXplIG9mIGRpc3BsYXlfYXJyYXkKLSAqIEBSZXR1cm5zOiBOdW1iZXIgb2YgZGlzcGxh eSBlbnRyaWVzIGZpbGxlZAotICovCi1pbnQgZHNpX2Rpc3BsYXlfZ2V0X2FjdGl2ZV9kaXNwbGF5 cyh2b2lkICoqZGlzcGxheV9hcnJheSwKLQkJdTMyIG1heF9kaXNwbGF5X2NvdW50KTsKLQotLyoq Ci0gKiBkc2lfZGlzcGxheV9nZXRfYm9vdF9kaXNwbGF5KCktIGdldCBEU0kgYm9vdCBkaXNwbGF5 IG5hbWUKLSAqIEBpbmRleDoJaW5kZXggb2YgZGlzcGxheSBzZWxlY3Rpb24KLSAqCi0gKiBSZXR1 cm46CXJldHVybnMgdGhlIGRpc3BsYXkgbm9kZSBwb2ludGVyCi0gKi8KLXN0cnVjdCBkZXZpY2Vf bm9kZSAqZHNpX2Rpc3BsYXlfZ2V0X2Jvb3RfZGlzcGxheShpbnQgaW5kZXgpOwotCi0vKioKLSAq IGRzaV9kaXNwbGF5X2dldF9kaXNwbGF5X2J5X25hbWUoKS0gZmluZHMgZGlzcGxheSBieSBuYW1l Ci0gKiBAbmFtZToJbmFtZSBvZiB0aGUgZGlzcGxheS4KLSAqCi0gKiBSZXR1cm46IGhhbmRsZSB0 byB0aGUgZGlzcGxheSBvciBlcnJvciBjb2RlLgotICovCi1zdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRz aV9kaXNwbGF5X2dldF9kaXNwbGF5X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSk7Ci0KLS8qKgot ICogZHNpX2Rpc3BsYXlfc2V0X2FjdGl2ZV9zdGF0ZSgpIC0gc2V0cyB0aGUgc3RhdGUgb2YgdGhl IGRpc3BsYXkKLSAqIEBkaXNwbGF5OiAgICAgICAgSGFuZGxlIHRvIGRpc3BsYXkuCi0gKiBAaXNf YWN0aXZlOiAgICAgIHN0YXRlCi0gKi8KLXZvaWQgZHNpX2Rpc3BsYXlfc2V0X2FjdGl2ZV9zdGF0 ZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksIGJvb2wgaXNfYWN0aXZlKTsKLQotLyoqCi0g KiBkc2lfZGlzcGxheV9kcm1fYnJpZGdlX2luaXQoKSAtIGluaXRpYWxpemVzIERSTSBicmlkZ2Ug b2JqZWN0IGZvciBEU0kKLSAqIEBkaXNwbGF5OiAgICAgICAgICAgIEhhbmRsZSB0byB0aGUgZGlz cGxheS4KLSAqIEBlbmNvZGVyOiAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGVuY29kZXIgb2Jq ZWN0IHdoaWNoIGlzIGNvbm5lY3RlZCB0byB0aGUKLSAqCQkJZGlzcGxheS4KLSAqCi0gKiBSZXR1 cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfZGlzcGxheV9kcm1fYnJpZGdlX2luaXQoc3Ry dWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAotCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuYyk7Ci0K LS8qKgotICogZHNpX2Rpc3BsYXlfZHJtX2JyaWRnZV9kZWluaXQoKSAtIGRlc3Ryb3lzIERSTSBi cmlkZ2UgZm9yIHRoZSBkaXNwbGF5Ci0gKiBAZGlzcGxheTogICAgICAgIEhhbmRsZSB0byB0aGUg ZGlzcGxheS4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfZGlzcGxh eV9kcm1fYnJpZGdlX2RlaW5pdChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpOwotCi0vKioK LSAqIGRzaV9kaXNwbGF5X2dldF9pbmZvKCkgLSByZXR1cm5zIHRoZSBkaXNwbGF5IHByb3BlcnRp ZXMKLSAqIEBpbmZvOiAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgd2hlcmUg aW5mbyBpcyBzdG9yZWQuCi0gKiBAZGlzcDogICAgICAgICAgICAgSGFuZGxlIHRvIHRoZSBkaXNw bGF5LgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9kaXNwbGF5X2dl dF9pbmZvKHN0cnVjdCBtc21fZGlzcGxheV9pbmZvICppbmZvLCB2b2lkICpkaXNwKTsKLQotLyoq Ci0gKiBkc2lfZGlzcGxheV9nZXRfbW9kZV9jb3VudCgpIC0gZ2V0IG51bWJlciBvZiBtb2RlcyBz dXBwb3J0ZWQgYnkgdGhlIGRpc3BsYXkKLSAqIEBkaXNwbGF5OiAgICAgICAgICAgIEhhbmRsZSB0 byBkaXNwbGF5LgotICogQGNvdW50OiAgICAgICAgICAgICAgTnVtYmVyIG9mIG1vZGVzIHN1cHBv cnRlZAotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9kaXNwbGF5X2dl dF9tb2RlX2NvdW50KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwgdTMyICpjb3VudCk7Ci0K LS8qKgotICogZHNpX2Rpc3BsYXlfZ2V0X21vZGVzKCkgLSBnZXQgbW9kZXMgc3VwcG9ydGVkIGJ5 IGRpc3BsYXkKLSAqIEBkaXNwbGF5OiAgICAgICAgICAgIEhhbmRsZSB0byBkaXNwbGF5LgotICog QG1vZGVzOyAgICAgICAgICAgICAgUG9pbnRlciB0byBhcnJheSBvZiBtb2Rlcy4gTWVtb3J5IGFs bG9jYXRlZCBzaG91bGQgYmUKLSAqCQkJYmlnIGVub3VnaCB0byBzdG9yZSAoY291bnQgKiBzdHJ1 Y3QgZHNpX2Rpc3BsYXlfbW9kZSkKLSAqCQkJZWxlbWVudHMuIElmIG1vZGVzIHBvaW50ZXIgaXMg TlVMTCwgbnVtYmVyIG9mIG1vZGVzIHdpbGwKLSAqCQkJYmUgc3RvcmVkIGluIHRoZSBtZW1vcnkg cG9pbnRlZCB0byBieSBjb3VudC4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWlu dCBkc2lfZGlzcGxheV9nZXRfbW9kZXMoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAotCQkJ ICBzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqbW9kZXMpOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5 X3B1dF9tb2RlKCkgLSBmcmVlIHVwIG1vZGUgY3JlYXRlZCBmb3IgdGhlIGRpc3BsYXkKLSAqIEBk aXNwbGF5OiAgICAgICAgICAgIEhhbmRsZSB0byBkaXNwbGF5LgotICogQG1vZGU6ICAgICAgICAg ICAgICAgRGlzcGxheSBtb2RlIHRvIGJlIGZyZWVkIHVwCi0gKgotICogUmV0dXJuOiBlcnJvciBj b2RlLgotICovCi12b2lkIGRzaV9kaXNwbGF5X3B1dF9tb2RlKHN0cnVjdCBkc2lfZGlzcGxheSAq ZGlzcGxheSwKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqbW9kZSk7Ci0KLS8qKgotICogZHNp X2Rpc3BsYXlfdmFsaWRhdGVfbW9kZSgpIC0gdmFsaWRhdGVzIGlmIG1vZGUgaXMgc3VwcG9ydGVk IGJ5IGRpc3BsYXkKLSAqIEBkaXNwbGF5OiAgICAgICAgICAgICBIYW5kbGUgdG8gZGlzcGxheS4K LSAqIEBtb2RlOiAgICAgICAgICAgICAgICBNb2RlIHRvIGJlIHZhbGlkYXRlZC4KLSAqIEBmbGFn czogICAgICAgICAgICAgICBNb2RpZmllciBmbGFncy4KLSAqCi0gKiBSZXR1cm46IDAgaWYgc3Vw cG9ydGVkIG9yIGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfZGlzcGxheV92YWxpZGF0ZV9tb2Rl KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwKLQkJCSAgICAgIHN0cnVjdCBkc2lfZGlzcGxh eV9tb2RlICptb2RlLAotCQkJICAgICAgdTMyIGZsYWdzKTsKLQotLyoqCi0gKiBkc2lfZGlzcGxh eV92YWxpZGF0ZV9tb2RlX3ZycigpIC0gdmFsaWRhdGVzIG1vZGUgaWYgdmFyaWFibGUgcmVmcmVz aCBjYXNlCi0gKiBAZGlzcGxheTogICAgICAgICAgICAgSGFuZGxlIHRvIGRpc3BsYXkuCi0gKiBA bW9kZTogICAgICAgICAgICAgICAgTW9kZSB0byBiZSB2YWxpZGF0ZWQuLgotICoKLSAqIFJldHVy bjogMCBpZiAgZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9kaXNwbGF5X3ZhbGlkYXRlX21vZGVf dnJyKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwKLQkJCXN0cnVjdCBkc2lfZGlzcGxheV9t b2RlICpjdXJfZHNpX21vZGUsCi0JCQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqbW9kZSk7Ci0K LS8qKgotICogZHNpX2Rpc3BsYXlfc2V0X21vZGUoKSAtIFNldCBtb2RlIG9uIHRoZSBkaXNwbGF5 LgotICogQGRpc3BsYXk6ICAgICAgICAgICBIYW5kbGUgdG8gZGlzcGxheS4KLSAqIEBtb2RlOiAg ICAgICAgICAgICAgbW9kZSB0byBiZSBzZXQuCi0gKiBAZmxhZ3M6ICAgICAgICAgICAgIE1vZGlm aWVyIGZsYWdzLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9kaXNw bGF5X3NldF9tb2RlKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwKLQkJCSBzdHJ1Y3QgZHNp X2Rpc3BsYXlfbW9kZSAqbW9kZSwKLQkJCSB1MzIgZmxhZ3MpOwotCi0vKioKLSAqIGRzaV9kaXNw bGF5X3ByZXBhcmUoKSAtIHByZXBhcmUgZGlzcGxheQotICogQGRpc3BsYXk6ICAgICAgICAgIEhh bmRsZSB0byBkaXNwbGF5LgotICoKLSAqIFByZXBhcmUgd2lsbCBwZXJmb3JtIHBvd2VyIHVwIHNl cXVlbmNlcyBmb3IgdGhlIGhvc3QgYW5kIHBhbmVsIGhhcmR3YXJlLgotICogUG93ZXIgYW5kIGNs b2NrIHJlc291cmNlcyBtaWdodCBiZSB0dXJuZWQgb24gKGRlcGVuZGluZyBvbiB0aGUgcGFuZWwg bW9kZSkuCi0gKiBUaGUgdmlkZW8gZW5naW5lIGlzIG5vdCBlbmFibGVkLgotICoKLSAqIFJldHVy bjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9kaXNwbGF5X3ByZXBhcmUoc3RydWN0IGRzaV9k aXNwbGF5ICpkaXNwbGF5KTsKLQotLyoqCi0gKiBkc2lfZGlzcGxheV9lbmFibGUoKSAtIGVuYWJs ZSBkaXNwbGF5Ci0gKiBAZGlzcGxheTogICAgICAgICAgICBIYW5kbGUgdG8gZGlzcGxheS4KLSAq Ci0gKiBFbmFibGUgd2lsbCB0dXJuIG9uIHRoZSBob3N0IGVuZ2luZSBhbmQgdGhlIHBhbmVsLiBB dCB0aGUgZW5kIG9mIHRoZSBlbmFibGUKLSAqIGZ1bmN0aW9uLCBIb3N0IGFuZCBwYW5lbCBoYXJk d2FyZSBhcmUgcmVhZHkgdG8gYWNjZXB0IHBpeGVsIGRhdGEgZnJvbQotICogdXBzdHJlYW0uCi0g KgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2Rpc3BsYXlfZW5hYmxlKHN0 cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSk7Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfcG9zdF9l bmFibGUoKSAtIHBlcmZvcm0gcG9zdCBlbmFibGUgb3BlcmF0aW9ucy4KLSAqIEBkaXNwbGF5OiAg ICAgICAgIEhhbmRsZSB0byBkaXNwbGF5LgotICoKLSAqIFNvbWUgcGFuZWxzIG1pZ2h0IHJlcXVp cmUgc29tZSBjb21tYW5kcyB0byBiZSBzZW50IGFmdGVyIHBpeGVsIGRhdGEKLSAqIHRyYW5zbWlz c2lvbiBoYXMgc3RhcnRlZC4gU3VjaCBjb21tYW5kcyBhcmUgc2VudCBhcyBwYXJ0IG9mIHRoZSBw b3N0X2VuYWJsZQotICogZnVuY3Rpb24uCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICov Ci1pbnQgZHNpX2Rpc3BsYXlfcG9zdF9lbmFibGUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5 KTsKLQotLyoqCi0gKiBkc2lfZGlzcGxheV9wcmVfZGlzYWJsZSgpIC0gcGVyZm9ybSBwcmUgZGlz YWJsZSBvcGVyYXRpb25zLgotICogQGRpc3BsYXk6ICAgICAgICAgIEhhbmRsZSB0byBkaXNwbGF5 LgotICoKLSAqIElmIGEgcGFuZWwgcmVxdWlyZXMgY29tbWFuZHMgdG8gYmUgc2VudCBiZWZvcmUg cGl4ZWwgZGF0YSB0cmFuc21pc3Npb24gaXMKLSAqIHN0b3BwZWQsIHRob3NlIGNhbiBiZSBzZW50 IGFzIHBhcnQgb2YgcHJlX2Rpc2FibGUuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICov Ci1pbnQgZHNpX2Rpc3BsYXlfcHJlX2Rpc2FibGUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5 KTsKLQotLyoqCi0gKiBkc2lfZGlzcGxheV9kaXNhYmxlKCkgLSBkaXNhYmxlIHBhbmVsIGFuZCBo b3N0IGhhcmR3YXJlLgotICogQGRpc3BsYXk6ICAgICAgICAgICAgIEhhbmRsZSB0byBkaXNwbGF5 LgotICoKLSAqIERpc2FibGUgaG9zdCBhbmQgcGFuZWwgaGFyZHdhcmUgYW5kIHBpeGVsIGRhdGEg dHJhbnNtaXNzaW9uIGNhbiBub3QgY29udGludWUuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2Rl LgotICovCi1pbnQgZHNpX2Rpc3BsYXlfZGlzYWJsZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3Bs YXkpOwotCi0vKioKLSAqIGRzaV9wcmVfY2xrb2ZmX2NiKCkgLSBDYWxsYmFjayBiZWZvcmUgY2xv Y2sgaXMgdHVybmVkIG9mZgotICogQHByaXY6IHByaXZhdGUgZGF0YSBwb2ludGVyLgotICogQGNs a190eXBlOiBjbG9jayB3aGljaCBpcyBiZWluZyB0dXJuZWQgb24uCi0gKiBAbmV3X3N0YXRlOiBu ZXh0IHN0YXRlIGZvciB0aGUgY2xvY2suCi0gKgotICogQHJldHVybjogZXJyb3IgY29kZS4KLSAq LwotaW50IGRzaV9wcmVfY2xrb2ZmX2NiKHZvaWQgKnByaXYsIGVudW0gZHNpX2Nsa190eXBlIGNs a190eXBlLAotCWVudW0gZHNpX2Nsa19zdGF0ZSBuZXdfc3RhdGUpOwotCi0vKioKLSAqIGRzaV9k aXNwbGF5X3VwZGF0ZV9wcHMoKSAtIHVwZGF0ZSBQUFMgYnVmZmVyLgotICogQHBwc19jbWQ6ICAg ICAgICAgICAgIFBQUyBidWZmZXIuCi0gKiBAZGlzcGxheTogICAgICAgICAgICAgSGFuZGxlIHRv IGRpc3BsYXkuCi0gKgotICogQ29waWVzIG5ldyBQUFMgYnVmZmVyIGludG8gZGlzcGxheSBzdHJ1 Y3R1cmUuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2Rpc3BsYXlf dXBkYXRlX3BwcyhjaGFyICpwcHNfY21kLCB2b2lkICpkaXNwbGF5KTsKLQotLyoqCi0gKiBkc2lf cG9zdF9jbGtvZmZfY2IoKSAtIENhbGxiYWNrIGFmdGVyIGNsb2NrIGlzIHR1cm5lZCBvZmYKLSAq IEBwcml2OiBwcml2YXRlIGRhdGEgcG9pbnRlci4KLSAqIEBjbGtfdHlwZTogY2xvY2sgd2hpY2gg aXMgYmVpbmcgdHVybmVkIG9uLgotICogQGN1cnJfc3RhdGU6IGN1cnJlbnQgc3RhdGUgZm9yIHRo ZSBjbG9jay4KLSAqCi0gKiBAcmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX3Bvc3Rf Y2xrb2ZmX2NiKHZvaWQgKnByaXYsIGVudW0gZHNpX2Nsa190eXBlIGNsa190eXBlLAotCWVudW0g ZHNpX2Nsa19zdGF0ZSBjdXJyX3N0YXRlKTsKLQotLyoqCi0gKiBkc2lfcG9zdF9jbGtvbl9jYigp IC0gQ2FsbGJhY2sgYWZ0ZXIgY2xvY2sgaXMgdHVybmVkIG9uCi0gKiBAcHJpdjogcHJpdmF0ZSBk YXRhIHBvaW50ZXIuCi0gKiBAY2xrX3R5cGU6IGNsb2NrIHdoaWNoIGlzIGJlaW5nIHR1cm5lZCBv bi4KLSAqIEBjdXJyX3N0YXRlOiBjdXJyZW50IHN0YXRlIGZvciB0aGUgY2xvY2suCi0gKgotICog QHJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9wb3N0X2Nsa29uX2NiKHZvaWQgKnBy aXYsIGVudW0gZHNpX2Nsa190eXBlIGNsa190eXBlLAotCWVudW0gZHNpX2Nsa19zdGF0ZSBjdXJy X3N0YXRlKTsKLQotCi0vKioKLSAqIGRzaV9wcmVfY2xrb25fY2IoKSAtIENhbGxiYWNrIGJlZm9y ZSBjbG9jayBpcyB0dXJuZWQgb24KLSAqIEBwcml2OiBwcml2YXRlIGRhdGEgcG9pbnRlci4KLSAq IEBjbGtfdHlwZTogY2xvY2sgd2hpY2ggaXMgYmVpbmcgdHVybmVkIG9uLgotICogQG5ld19zdGF0 ZTogbmV4dCBzdGF0ZSBmb3IgdGhlIGNsb2NrLgotICoKLSAqIEByZXR1cm46IGVycm9yIGNvZGUu Ci0gKi8KLWludCBkc2lfcHJlX2Nsa29uX2NiKHZvaWQgKnByaXYsIGVudW0gZHNpX2Nsa190eXBl IGNsa190eXBlLAotCWVudW0gZHNpX2Nsa19zdGF0ZSBuZXdfc3RhdGUpOwotCi0vKioKLSAqIGRz aV9kaXNwbGF5X3VucHJlcGFyZSgpIC0gcG93ZXIgb2ZmIGRpc3BsYXkgaGFyZHdhcmUuCi0gKiBA ZGlzcGxheTogICAgICAgICAgICBIYW5kbGUgdG8gZGlzcGxheS4KLSAqCi0gKiBIb3N0IGFuZCBw YW5lbCBoYXJkd2FyZSBpcyB0dXJuZWQgb2ZmLiBQYW5lbCB3aWxsIGJlIGluIHJlc2V0IHN0YXRl IGF0IHRoZQotICogZW5kIG9mIHRoZSBmdW5jdGlvbi4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNv ZGUuCi0gKi8KLWludCBkc2lfZGlzcGxheV91bnByZXBhcmUoc3RydWN0IGRzaV9kaXNwbGF5ICpk aXNwbGF5KTsKLQotaW50IGRzaV9kaXNwbGF5X3NldF90cGdfc3RhdGUoc3RydWN0IGRzaV9kaXNw bGF5ICpkaXNwbGF5LCBib29sIGVuYWJsZSk7Ci0KLWludCBkc2lfZGlzcGxheV9jbG9ja19nYXRl KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwgYm9vbCBlbmFibGUpOwotaW50IGRzaV9kaXNw YWx5X3N0YXRpY19mcmFtZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksIGJvb2wgZW5hYmxl KTsKLQotLyoqCi0gKiBkc2lfZGlzcGxheV9lbmFibGVfZXZlbnQoKSAtIGVuYWJsZSBpbnRlcnJ1 cHQgYmFzZWQgY29ubmVjdG9yIGV2ZW50Ci0gKiBAZGlzcGxheTogICAgICAgICAgICBIYW5kbGUg dG8gZGlzcGxheS4KLSAqIEBldmVudF9pZHg6ICAgICAgICAgIEV2ZW50IGluZGV4LgotICogQGV2 ZW50X2luZm86ICAgICAgICAgRXZlbnQgY2FsbGJhY2sgZGVmaW5pdGlvbi4KLSAqIEBlbmFibGU6 ICAgICAgICAgICAgIFdoZXRoZXIgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIGV2ZW50IGludGVycnVw dC4KLSAqLwotdm9pZCBkc2lfZGlzcGxheV9lbmFibGVfZXZlbnQoc3RydWN0IGRzaV9kaXNwbGF5 ICpkaXNwbGF5LAotCQl1aW50MzJfdCBldmVudF9pZHgsIHN0cnVjdCBkc2lfZXZlbnRfY2JfaW5m byAqZXZlbnRfaW5mbywKLQkJYm9vbCBlbmFibGUpOwotCi1pbnQgZHNpX2Rpc3BsYXlfc2V0X2Jh Y2tsaWdodCh2b2lkICpkaXNwbGF5LCB1MzIgYmxfbHZsKTsKLQotLyoqCi0gKiBkc2lfZGlzcGxh eV9zb2Z0X3Jlc2V0KCkgLSBwZXJmb3JtIGEgc29mdCByZXNldCBvbiBEU0kgY29udHJvbGxlcgot ICogQGRpc3BsYXk6ICAgICAgICAgSGFuZGxlIHRvIGRpc3BsYXkKLSAqCi0gKiBUaGUgdmlkZW8s IGNvbW1hbmQgYW5kIGNvbnRyb2xsZXIgZW5naW5lcyB3aWxsIGJlIGRpc2FibGVkIGJlZm9yZSB0 aGUKLSAqIHJlc2V0IGlzIHRyaWdnZXJlZC4gQWZ0ZXIsIHRoZSBlbmdpbmVzIHdpbGwgYmUgcmUt ZW5hYmxlZCB0byB0aGUgc2FtZSBzdGF0ZQotICogYXMgYmVmb3JlIHRoZSByZXNldC4KLSAqCi0g KiBJZiB0aGUgcmVzZXQgaXMgZG9uZSB3aGlsZSBNRFAgdGltaW5nIGVuZ2luZSBpcyB0dXJuZWQg b24sIHRoZSB2aWRlbwotICogZW5naW5lIHNob3VsZCBiZSByZS1lbmFibGVkIG9ubHkgZHVyaW5n IHRoZSB2ZXJ0aWNhbCBibGFua2luZyB0aW1lLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZQot ICovCi1pbnQgZHNpX2Rpc3BsYXlfc29mdF9yZXNldCh2b2lkICpkaXNwbGF5KTsKLQotLyoqCi0g KiBkc2lfZGlzcGxheV9zZXRfcG93ZXIgLSB1cGRhdGUgcG93ZXIvZHBtcyBzZXR0aW5nCi0gKiBA Y29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCi0gKiBAcG93ZXJf bW9kZTogT25lIG9mIHRoZSBmb2xsb3dpbmcsCi0gKiAgICAgICAgICAgICAgRFBVX01PREVfRFBN U19PTgotICogICAgICAgICAgICAgIERQVV9NT0RFX0RQTVNfTFAxCi0gKiAgICAgICAgICAgICAg RFBVX01PREVfRFBNU19MUDIKLSAqICAgICAgICAgICAgICBEUFVfTU9ERV9EUE1TX1NUQU5EQlkK LSAqICAgICAgICAgICAgICBEUFVfTU9ERV9EUE1TX1NVU1BFTkQKLSAqICAgICAgICAgICAgICBE UFVfTU9ERV9EUE1TX09GRgotICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5 IHN0cnVjdHVyZQotICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0gKi8KLWludCBkc2lfZGlz cGxheV9zZXRfcG93ZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJaW50IHBv d2VyX21vZGUsIHZvaWQgKmRpc3BsYXkpOwotCi0vKgotICogZHNpX2Rpc3BsYXlfcHJlX2tpY2tv ZmYgLSBwcm9ncmFtIGtpY2tvZmYtdGltZSBmZWF0dXJlcwotICogQGRpc3BsYXk6IFBvaW50ZXIg dG8gcHJpdmF0ZSBkaXNwbGF5IHN0cnVjdHVyZQotICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNz Ci0gKi8KLWludCBkc2lfZGlzcGxheV9wcmVfa2lja29mZihzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRp c3BsYXkpOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5X2dldF9kc3RfZm9ybWF0KCkgLSBnZXQgZHN0 X2Zvcm1hdCBmcm9tIERTSSBkaXNwbGF5Ci0gKiBAZGlzcGxheTogICAgICAgICBIYW5kbGUgdG8g ZGlzcGxheQotICoKLSAqIFJldHVybjogZW51bSBkc2lfcGl4ZWxfZm9ybWF0IHR5cGUKLSAqLwot ZW51bSBkc2lfcGl4ZWxfZm9ybWF0IGRzaV9kaXNwbGF5X2dldF9kc3RfZm9ybWF0KHZvaWQgKmRp c3BsYXkpOwotCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIGludCBkc2lfZGlzcGxheV9nZXRfbnVt X29mX2Rpc3BsYXlzKHZvaWQpIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgaW50IGRzaV9k aXNwbGF5X2dldF9hY3RpdmVfZGlzcGxheXModm9pZCAqKmRpc3BsYXlfYXJyYXksIHUzMiBtYXhf ZGlzcGxheV9jb3VudCkgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSBpbnQgZHNpX2Rpc3Bs YXlfZHJtX2JyaWRnZV9pbml0KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwKLQkJc3RydWN0 IGRybV9lbmNvZGVyICplbmMpCi17Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci1zdGF0aWMgaW5saW5l IGludCBkc2lfZGlzcGxheV9kcm1fYnJpZGdlX2RlaW5pdChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRp c3BsYXkpIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgaW50IGRzaV9kaXNwbGF5X2dldF9p bmZvKHN0cnVjdCBtc21fZGlzcGxheV9pbmZvICppbmZvLCB2b2lkICpkaXNwKQotewotCXJldHVy biAtRUlOVkFMOwotfQotCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9EU0lfRElTUExBWV9IXyAqLwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGlzcGxheV90 ZXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kaXNwbGF5X3Rlc3Qu YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJlMjU3MC4uMDAwMDAwMAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kaXNwbGF5X3Rlc3QuYworKysgL2Rl di9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgs IFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g KgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIu aD4KLQotI2luY2x1ZGUgImRzaV9kaXNwbGF5X3Rlc3QuaCIKLQotc3RhdGljIHZvaWQgZHNpX2Rp c3BsYXlfdGVzdF9kdW1wX21vZGVzKHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlLCB1MzIK LQkJCQkJY291bnQpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIGRzaV9kaXNwbGF5X3Rlc3Rfd29yayhz dHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X3Rlc3QgKnRl c3Q7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5OwotCXN0cnVjdCBkc2lfZGlzcGxheV9t b2RlICptb2RlczsKLQl1MzIgY291bnQgPSAwOwotCXUzMiBzaXplID0gMDsKLQlpbnQgcmMgPSAw OwotCi0JdGVzdCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZHNpX2Rpc3BsYXlfdGVzdCwg dGVzdF93b3JrKTsKLQotCWRpc3BsYXkgPSB0ZXN0LT5kaXNwbGF5OwotCXJjID0gZHNpX2Rpc3Bs YXlfZ2V0X21vZGVfY291bnQoZGlzcGxheSwgJmNvdW50KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJy KCJmYWlsZWQgdG8gZ2V0IG1vZGVzIGNvdW50LCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIHRlc3Rf ZmFpbDsKLQl9Ci0KLQlzaXplID0gY291bnQgKiBzaXplb2YoKm1vZGVzKTsKLQltb2RlcyA9IGt6 YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtb2RlcykgewotCQlyYyA9IC1FTk9NRU07 Ci0JCWdvdG8gdGVzdF9mYWlsOwotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlfZ2V0X21vZGVzKGRp c3BsYXksIG1vZGVzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IG1vZGVz LCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIHRlc3RfZmFpbF9mcmVlX21vZGVzOwotCX0KLQotCWRz aV9kaXNwbGF5X3Rlc3RfZHVtcF9tb2Rlcyhtb2RlcywgY291bnQpOwotCi0JcmMgPSBkc2lfZGlz cGxheV9zZXRfbW9kZShkaXNwbGF5LCAmbW9kZXNbMF0sIDB4MCk7Ci0JaWYgKHJjKSB7Ci0JCXBy X2VycigiZmFpbGVkIHRvIHNldCBtb2RlLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIHRlc3RfZmFp bF9mcmVlX21vZGVzOwotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlfcHJlcGFyZShkaXNwbGF5KTsK LQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcHJlcGFyZSBkaXNwbGF5LCByYz0lZFxu IiwgcmMpOwotCQlnb3RvIHRlc3RfZmFpbF9mcmVlX21vZGVzOwotCX0KLQotCXJjID0gZHNpX2Rp c3BsYXlfZW5hYmxlKGRpc3BsYXkpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBl bmFibGUgZGlzcGxheSwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byB0ZXN0X2ZhaWxfdW5wcmVwX2Rp c3A7Ci0JfQotCXJldHVybjsKLQotdGVzdF9mYWlsX3VucHJlcF9kaXNwOgotCWlmIChyYykgewot CQlwcl9lcnIoImZhaWxlZCB0byB1bnByZXAgZGlzcGxheSwgcmM9JWRcbiIsIHJjKTsKLQkJZ290 byB0ZXN0X2ZhaWxfZnJlZV9tb2RlczsKLQl9Ci0KLXRlc3RfZmFpbF9mcmVlX21vZGVzOgotCWtm cmVlKG1vZGVzKTsKLXRlc3RfZmFpbDoKLQlyZXR1cm47Ci19Ci0KLWludCBkc2lfZGlzcGxheV90 ZXN0X2luaXQoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCXN0YXRpYyBpbnQgZG9u ZTsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfZGlzcGxheV90ZXN0ICp0ZXN0OwotCi0JaWYg KGRvbmUpCi0JCXJldHVybiByYzsKLQotCWRvbmUgPSAxOwotCWlmICghZGlzcGxheSkgewotCQlw cl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JdGVz dCA9IGt6YWxsb2Moc2l6ZW9mKCp0ZXN0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0ZXN0KQotCQly ZXR1cm4gLUVOT01FTTsKLQotCXRlc3QtPmRpc3BsYXkgPSBkaXNwbGF5OwotCUlOSVRfV09SSygm dGVzdC0+dGVzdF93b3JrLCBkc2lfZGlzcGxheV90ZXN0X3dvcmspOwotCi0JZHNpX2Rpc3BsYXlf dGVzdF93b3JrKCZ0ZXN0LT50ZXN0X3dvcmspOwotCXJldHVybiByYzsKLX0KLQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGlzcGxheV90ZXN0LmggYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kaXNwbGF5X3Rlc3QuaApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJmMDg2MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kaXNwbGF5X3Rlc3QuaAorKysgL2Rldi9udWxsCkBA IC0xLDMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4 IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICog R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQot I2lmbmRlZiBfRFNJX0RJU1BMQVlfVEVTVF9IXwotI2RlZmluZSBfRFNJX0RJU1BMQVlfVEVTVF9I XwotCi0jaW5jbHVkZSAiZHNpX2Rpc3BsYXkuaCIKLSNpbmNsdWRlICJkc2lfY3RybF9ody5oIgot I2luY2x1ZGUgImRzaV9jdHJsLmgiCi0KLXN0cnVjdCBkc2lfZGlzcGxheV90ZXN0IHsKLQlzdHJ1 Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXk7Ci0KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdGVzdF93b3Jr OwotfTsKLQotaW50IGRzaV9kaXNwbGF5X3Rlc3RfaW5pdChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRp c3BsYXkpOwotCi0KLSNlbmRpZiAvKiBfRFNJX0RJU1BMQVlfVEVTVF9IXyAqLwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZHJtLmMgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kcm0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDE3Zjg4MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFn aW5nL2RzaV9kcm0uYworKysgL2Rldi9udWxsCkBAIC0xLDY4OCArMCwwIEBACi0vKgotICogQ29w eXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lv biAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLQotI2RlZmluZSBwcl9mbXQoZm10KQkiZHNp LWRybTpbJXNdICIgZm10LCBfX2Z1bmNfXwotI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBl ci5oPgotI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Ci0KLSNpbmNsdWRlICJtc21fa21zLmgi Ci0jaW5jbHVkZSAiZHB1X2Nvbm5lY3Rvci5oIgotI2luY2x1ZGUgImRzaV9kcm0uaCIKLSNpbmNs dWRlICJkcHVfdHJhY2UuaCIKLQotI2RlZmluZSB0b19kc2lfYnJpZGdlKHgpICAgICBjb250YWlu ZXJfb2YoKHgpLCBzdHJ1Y3QgZHNpX2JyaWRnZSwgYmFzZSkKLSNkZWZpbmUgdG9fZHNpX3N0YXRl KHgpICAgICAgY29udGFpbmVyX29mKCh4KSwgc3RydWN0IGRzaV9jb25uZWN0b3Jfc3RhdGUsIGJh c2UpCi0KLXN0YXRpYyB2b2lkIGNvbnZlcnRfdG9fZHNpX21vZGUoY29uc3Qgc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKmRybV9tb2RlLAotCQkJCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICpkc2lf bW9kZSkKLXsKLQltZW1zZXQoZHNpX21vZGUsIDAsIHNpemVvZigqZHNpX21vZGUpKTsKLQotCWRz aV9tb2RlLT50aW1pbmcuaF9hY3RpdmUgPSBkcm1fbW9kZS0+aGRpc3BsYXk7Ci0JZHNpX21vZGUt PnRpbWluZy5oX2JhY2tfcG9yY2ggPSBkcm1fbW9kZS0+aHRvdGFsIC0gZHJtX21vZGUtPmhzeW5j X2VuZDsKLQlkc2lfbW9kZS0+dGltaW5nLmhfc3luY193aWR0aCA9IGRybV9tb2RlLT5odG90YWwg LQotCQkJKGRybV9tb2RlLT5oc3luY19zdGFydCArIGRzaV9tb2RlLT50aW1pbmcuaF9iYWNrX3Bv cmNoKTsKLQlkc2lfbW9kZS0+dGltaW5nLmhfZnJvbnRfcG9yY2ggPSBkcm1fbW9kZS0+aHN5bmNf c3RhcnQgLQotCQkJCQkgZHJtX21vZGUtPmhkaXNwbGF5OwotCWRzaV9tb2RlLT50aW1pbmcuaF9z a2V3ID0gZHJtX21vZGUtPmhza2V3OwotCi0JZHNpX21vZGUtPnRpbWluZy52X2FjdGl2ZSA9IGRy bV9tb2RlLT52ZGlzcGxheTsKLQlkc2lfbW9kZS0+dGltaW5nLnZfYmFja19wb3JjaCA9IGRybV9t b2RlLT52dG90YWwgLSBkcm1fbW9kZS0+dnN5bmNfZW5kOwotCWRzaV9tb2RlLT50aW1pbmcudl9z eW5jX3dpZHRoID0gZHJtX21vZGUtPnZ0b3RhbCAtCi0JCShkcm1fbW9kZS0+dnN5bmNfc3RhcnQg KyBkc2lfbW9kZS0+dGltaW5nLnZfYmFja19wb3JjaCk7Ci0KLQlkc2lfbW9kZS0+dGltaW5nLnZf ZnJvbnRfcG9yY2ggPSBkcm1fbW9kZS0+dnN5bmNfc3RhcnQgLQotCQkJCQkgZHJtX21vZGUtPnZk aXNwbGF5OwotCi0JZHNpX21vZGUtPnRpbWluZy5yZWZyZXNoX3JhdGUgPSBkcm1fbW9kZS0+dnJl ZnJlc2g7Ci0KLQlkc2lfbW9kZS0+cGl4ZWxfY2xrX2toeiA9IGRybV9tb2RlLT5jbG9jazsKLQot CWRzaV9tb2RlLT5wcml2X2luZm8gPQotCQkoc3RydWN0IGRzaV9kaXNwbGF5X21vZGVfcHJpdl9p bmZvICopZHJtX21vZGUtPnByaXZhdGU7Ci0KLQlpZiAobXNtX2lzX21vZGVfc2VhbWxlc3MoZHJt X21vZGUpKQotCQlkc2lfbW9kZS0+ZHNpX21vZGVfZmxhZ3MgfD0gRFNJX01PREVfRkxBR19TRUFN TEVTUzsKLQlpZiAobXNtX2lzX21vZGVfZHluYW1pY19mcHMoZHJtX21vZGUpKQotCQlkc2lfbW9k ZS0+ZHNpX21vZGVfZmxhZ3MgfD0gRFNJX01PREVfRkxBR19ERlBTOwotCWlmIChtc21fbmVlZHNf dmJsYW5rX3ByZV9tb2Rlc2V0KGRybV9tb2RlKSkKLQkJZHNpX21vZGUtPmRzaV9tb2RlX2ZsYWdz IHw9IERTSV9NT0RFX0ZMQUdfVkJMQU5LX1BSRV9NT0RFU0VUOwotCWlmIChtc21faXNfbW9kZV9z ZWFtbGVzc19kbXMoZHJtX21vZGUpKQotCQlkc2lfbW9kZS0+ZHNpX21vZGVfZmxhZ3MgfD0gRFNJ X01PREVfRkxBR19ETVM7Ci0JaWYgKG1zbV9pc19tb2RlX3NlYW1sZXNzX3Zycihkcm1fbW9kZSkp Ci0JCWRzaV9tb2RlLT5kc2lfbW9kZV9mbGFncyB8PSBEU0lfTU9ERV9GTEFHX1ZSUjsKLX0KLQot c3RhdGljIHZvaWQgY29udmVydF90b19kcm1fbW9kZShjb25zdCBzdHJ1Y3QgZHNpX2Rpc3BsYXlf bW9kZSAqZHNpX21vZGUsCi0JCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9tb2RlKQot ewotCW1lbXNldChkcm1fbW9kZSwgMCwgc2l6ZW9mKCpkcm1fbW9kZSkpOwotCi0JZHJtX21vZGUt PmhkaXNwbGF5ID0gZHNpX21vZGUtPnRpbWluZy5oX2FjdGl2ZTsKLQlkcm1fbW9kZS0+aHN5bmNf c3RhcnQgPSBkcm1fbW9kZS0+aGRpc3BsYXkgKwotCQkJCWRzaV9tb2RlLT50aW1pbmcuaF9mcm9u dF9wb3JjaDsKLQlkcm1fbW9kZS0+aHN5bmNfZW5kID0gZHJtX21vZGUtPmhzeW5jX3N0YXJ0ICsK LQkJCSAgICAgIGRzaV9tb2RlLT50aW1pbmcuaF9zeW5jX3dpZHRoOwotCWRybV9tb2RlLT5odG90 YWwgPSBkcm1fbW9kZS0+aHN5bmNfZW5kICsgZHNpX21vZGUtPnRpbWluZy5oX2JhY2tfcG9yY2g7 Ci0JZHJtX21vZGUtPmhza2V3ID0gZHNpX21vZGUtPnRpbWluZy5oX3NrZXc7Ci0KLQlkcm1fbW9k ZS0+dmRpc3BsYXkgPSBkc2lfbW9kZS0+dGltaW5nLnZfYWN0aXZlOwotCWRybV9tb2RlLT52c3lu Y19zdGFydCA9IGRybV9tb2RlLT52ZGlzcGxheSArCi0JCQkJZHNpX21vZGUtPnRpbWluZy52X2Zy b250X3BvcmNoOwotCWRybV9tb2RlLT52c3luY19lbmQgPSBkcm1fbW9kZS0+dnN5bmNfc3RhcnQg KwotCQkJICAgICAgZHNpX21vZGUtPnRpbWluZy52X3N5bmNfd2lkdGg7Ci0JZHJtX21vZGUtPnZ0 b3RhbCA9IGRybV9tb2RlLT52c3luY19lbmQgKyBkc2lfbW9kZS0+dGltaW5nLnZfYmFja19wb3Jj aDsKLQotCWRybV9tb2RlLT52cmVmcmVzaCA9IGRzaV9tb2RlLT50aW1pbmcucmVmcmVzaF9yYXRl OwotCWRybV9tb2RlLT5jbG9jayA9IGRzaV9tb2RlLT5waXhlbF9jbGtfa2h6OwotCi0JZHJtX21v ZGUtPnByaXZhdGUgPSAoaW50ICopZHNpX21vZGUtPnByaXZfaW5mbzsKLQotCWlmIChkc2lfbW9k ZS0+ZHNpX21vZGVfZmxhZ3MgJiBEU0lfTU9ERV9GTEFHX1NFQU1MRVNTKQotCQlkcm1fbW9kZS0+ ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19TRUFNTEVTUzsKLQlpZiAoZHNpX21vZGUtPmRzaV9tb2Rl X2ZsYWdzICYgRFNJX01PREVfRkxBR19ERlBTKQotCQlkcm1fbW9kZS0+cHJpdmF0ZV9mbGFncyB8 PSBNU01fTU9ERV9GTEFHX1NFQU1MRVNTX0RZTkFNSUNfRlBTOwotCWlmIChkc2lfbW9kZS0+ZHNp X21vZGVfZmxhZ3MgJiBEU0lfTU9ERV9GTEFHX1ZCTEFOS19QUkVfTU9ERVNFVCkKLQkJZHJtX21v ZGUtPnByaXZhdGVfZmxhZ3MgfD0gTVNNX01PREVfRkxBR19WQkxBTktfUFJFX01PREVTRVQ7Ci0J aWYgKGRzaV9tb2RlLT5kc2lfbW9kZV9mbGFncyAmIERTSV9NT0RFX0ZMQUdfRE1TKQotCQlkcm1f bW9kZS0+cHJpdmF0ZV9mbGFncyB8PSBNU01fTU9ERV9GTEFHX1NFQU1MRVNTX0RNUzsKLQlpZiAo ZHNpX21vZGUtPmRzaV9tb2RlX2ZsYWdzICYgRFNJX01PREVfRkxBR19WUlIpCi0JCWRybV9tb2Rl LT5wcml2YXRlX2ZsYWdzIHw9IE1TTV9NT0RFX0ZMQUdfU0VBTUxFU1NfVlJSOwotCi0JZHJtX21v ZGVfc2V0X25hbWUoZHJtX21vZGUpOwotfQotCi1zdGF0aWMgaW50IGRzaV9icmlkZ2VfYXR0YWNo KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCi17Ci0Jc3RydWN0IGRzaV9icmlkZ2UgKmNfYnJp ZGdlID0gdG9fZHNpX2JyaWRnZShicmlkZ2UpOwotCi0JaWYgKCFicmlkZ2UpIHsKLQkJcHJfZXJy KCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXByX2RlYnVn KCJbJWRdIGF0dGFjaGVkXG4iLCBjX2JyaWRnZS0+aWQpOwotCi0JcmV0dXJuIDA7Ci0KLX0KLQot c3RhdGljIHZvaWQgZHNpX2JyaWRnZV9wcmVfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2UpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2JyaWRnZSAqY19icmlkZ2UgPSB0b19k c2lfYnJpZGdlKGJyaWRnZSk7Ci0KLQlpZiAoIWJyaWRnZSkgewotCQlwcl9lcnIoIkludmFsaWQg cGFyYW1zXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIEJ5IHRoaXMgcG9pbnQgbW9kZSBzaG91 bGQgaGF2ZSBiZWVuIHZhbGlkYXRlZCB0aHJvdWdoIG1vZGVfZml4dXAgKi8KLQlyYyA9IGRzaV9k aXNwbGF5X3NldF9tb2RlKGNfYnJpZGdlLT5kaXNwbGF5LAotCQkJJihjX2JyaWRnZS0+ZHNpX21v ZGUpLCAweDApOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslZF0gZmFpbGVkIHRvIHBlcmZvcm0g YSBtb2RlIHNldCwgcmM9JWRcbiIsCi0JCSAgICAgICBjX2JyaWRnZS0+aWQsIHJjKTsKLQkJcmV0 dXJuOwotCX0KLQotCWlmIChjX2JyaWRnZS0+ZHNpX21vZGUuZHNpX21vZGVfZmxhZ3MgJgotCQko RFNJX01PREVfRkxBR19TRUFNTEVTUyB8IERTSV9NT0RFX0ZMQUdfVlJSKSkgewotCQlwcl9kZWJ1 ZygiWyVkXSBzZWFtbGVzcyBwcmUtZW5hYmxlXG4iLCBjX2JyaWRnZS0+aWQpOwotCQlyZXR1cm47 Ci0JfQotCi0JRFBVX0FUUkFDRV9CRUdJTigiZHNpX2JyaWRnZV9wcmVfZW5hYmxlIik7Ci0JcmMg PSBkc2lfZGlzcGxheV9wcmVwYXJlKGNfYnJpZGdlLT5kaXNwbGF5KTsKLQlpZiAocmMpIHsKLQkJ cHJfZXJyKCJbJWRdIERTSSBkaXNwbGF5IHByZXBhcmUgZmFpbGVkLCByYz0lZFxuIiwKLQkJICAg ICAgIGNfYnJpZGdlLT5pZCwgcmMpOwotCQlEUFVfQVRSQUNFX0VORCgiZHNpX2JyaWRnZV9wcmVf ZW5hYmxlIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlEUFVfQVRSQUNFX0JFR0lOKCJkc2lfZGlzcGxh eV9lbmFibGUiKTsKLQlyYyA9IGRzaV9kaXNwbGF5X2VuYWJsZShjX2JyaWRnZS0+ZGlzcGxheSk7 Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVkXSBEU0kgZGlzcGxheSBlbmFibGUgZmFpbGVkLCBy Yz0lZFxuIiwKLQkJICAgICAgIGNfYnJpZGdlLT5pZCwgcmMpOwotCQkodm9pZClkc2lfZGlzcGxh eV91bnByZXBhcmUoY19icmlkZ2UtPmRpc3BsYXkpOwotCX0KLQlEUFVfQVRSQUNFX0VORCgiZHNp X2Rpc3BsYXlfZW5hYmxlIik7Ci0JRFBVX0FUUkFDRV9FTkQoImRzaV9icmlkZ2VfcHJlX2VuYWJs ZSIpOwotfQotCi1zdGF0aWMgdm9pZCBkc2lfYnJpZGdlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRn ZSAqYnJpZGdlKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9icmlkZ2UgKmNfYnJpZGdl ID0gdG9fZHNpX2JyaWRnZShicmlkZ2UpOwotCi0JaWYgKCFicmlkZ2UpIHsKLQkJcHJfZXJyKCJJ bnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoY19icmlkZ2UtPmRzaV9t b2RlLmRzaV9tb2RlX2ZsYWdzICYKLQkJCShEU0lfTU9ERV9GTEFHX1NFQU1MRVNTIHwgRFNJX01P REVfRkxBR19WUlIpKSB7Ci0JCXByX2RlYnVnKCJbJWRdIHNlYW1sZXNzIGVuYWJsZVxuIiwgY19i cmlkZ2UtPmlkKTsKLQkJcmV0dXJuOwotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlfcG9zdF9lbmFi bGUoY19icmlkZ2UtPmRpc3BsYXkpOwotCWlmIChyYykKLQkJcHJfZXJyKCJbJWRdIERTSSBkaXNw bGF5IHBvc3QgZW5hYmxlZCBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAgICAgY19icmlkZ2UtPmlk LCByYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzaV9icmlkZ2VfZGlzYWJsZShzdHJ1Y3QgZHJtX2Jy aWRnZSAqYnJpZGdlKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9icmlkZ2UgKmNfYnJp ZGdlID0gdG9fZHNpX2JyaWRnZShicmlkZ2UpOwotCi0JaWYgKCFicmlkZ2UpIHsKLQkJcHJfZXJy KCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5 X3ByZV9kaXNhYmxlKGNfYnJpZGdlLT5kaXNwbGF5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJb JWRdIERTSSBkaXNwbGF5IHByZSBkaXNhYmxlIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBj X2JyaWRnZS0+aWQsIHJjKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGRzaV9icmlkZ2VfcG9zdF9k aXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1 Y3QgZHNpX2JyaWRnZSAqY19icmlkZ2UgPSB0b19kc2lfYnJpZGdlKGJyaWRnZSk7Ci0KLQlpZiAo IWJyaWRnZSkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuOwotCX0K LQotCURQVV9BVFJBQ0VfQkVHSU4oImRzaV9icmlkZ2VfcG9zdF9kaXNhYmxlIik7Ci0JRFBVX0FU UkFDRV9CRUdJTigiZHNpX2Rpc3BsYXlfZGlzYWJsZSIpOwotCXJjID0gZHNpX2Rpc3BsYXlfZGlz YWJsZShjX2JyaWRnZS0+ZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVkXSBEU0kg ZGlzcGxheSBkaXNhYmxlIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBjX2JyaWRnZS0+aWQs IHJjKTsKLQkJRFBVX0FUUkFDRV9FTkQoImRzaV9kaXNwbGF5X2Rpc2FibGUiKTsKLQkJcmV0dXJu OwotCX0KLQlEUFVfQVRSQUNFX0VORCgiZHNpX2Rpc3BsYXlfZGlzYWJsZSIpOwotCi0JcmMgPSBk c2lfZGlzcGxheV91bnByZXBhcmUoY19icmlkZ2UtPmRpc3BsYXkpOwotCWlmIChyYykgewotCQlw cl9lcnIoIlslZF0gRFNJIGRpc3BsYXkgdW5wcmVwYXJlIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAg ICAgICBjX2JyaWRnZS0+aWQsIHJjKTsKLQkJRFBVX0FUUkFDRV9FTkQoImRzaV9icmlkZ2VfcG9z dF9kaXNhYmxlIik7Ci0JCXJldHVybjsKLQl9Ci0JRFBVX0FUUkFDRV9FTkQoImRzaV9icmlkZ2Vf cG9zdF9kaXNhYmxlIik7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzaV9icmlkZ2VfbW9kZV9zZXQoc3Ry dWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKLQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSwKLQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKLXsKLQlzdHJ1 Y3QgZHNpX2JyaWRnZSAqY19icmlkZ2UgPSB0b19kc2lfYnJpZGdlKGJyaWRnZSk7Ci0KLQlpZiAo IWJyaWRnZSB8fCAhbW9kZSB8fCAhYWRqdXN0ZWRfbW9kZSkgewotCQlwcl9lcnIoIkludmFsaWQg cGFyYW1zXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCW1lbXNldCgmKGNfYnJpZGdlLT5kc2lfbW9k ZSksIDB4MCwgc2l6ZW9mKHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlKSk7Ci0JY29udmVydF90b19k c2lfbW9kZShhZGp1c3RlZF9tb2RlLCAmKGNfYnJpZGdlLT5kc2lfbW9kZSkpOwotfQotCi1zdGF0 aWMgYm9vbCBkc2lfYnJpZGdlX21vZGVfZml4dXAoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwK LQkJCQkgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAotCQkJCSAgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1 Y3QgZHNpX2JyaWRnZSAqY19icmlkZ2UgPSB0b19kc2lfYnJpZGdlKGJyaWRnZSk7Ci0Jc3RydWN0 IGRzaV9kaXNwbGF5X21vZGUgZHNpX21vZGUsIGN1cl9kc2lfbW9kZTsKLQlzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSBjdXJfbW9kZTsKLQotCWlmICghYnJpZGdlIHx8ICFtb2RlIHx8ICFhZGp1c3Rl ZF9tb2RlKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gZmFsc2U7 Ci0JfQotCi0JY29udmVydF90b19kc2lfbW9kZShtb2RlLCAmZHNpX21vZGUpOwotCi0JcmMgPSBk c2lfZGlzcGxheV92YWxpZGF0ZV9tb2RlKGNfYnJpZGdlLT5kaXNwbGF5LCAmZHNpX21vZGUsCi0J CQlEU0lfVkFMSURBVEVfRkxBR19BTExPV19BREpVU1QpOwotCWlmIChyYykgewotCQlwcl9lcnIo IlslZF0gbW9kZSBpcyBub3QgdmFsaWQsIHJjPSVkXG4iLCBjX2JyaWRnZS0+aWQsIHJjKTsKLQkJ cmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChicmlkZ2UtPmVuY29kZXIgJiYgYnJpZGdlLT5lbmNv ZGVyLT5jcnRjKSB7Ci0KLQkJY29udmVydF90b19kc2lfbW9kZSgmYnJpZGdlLT5lbmNvZGVyLT5j cnRjLT5tb2RlLAotCQkJCQkJCSZjdXJfZHNpX21vZGUpOwotCQlyYyA9IGRzaV9kaXNwbGF5X3Zh bGlkYXRlX21vZGVfdnJyKGNfYnJpZGdlLT5kaXNwbGF5LAotCQkJCQkmY3VyX2RzaV9tb2RlLCAm ZHNpX21vZGUpOwotCQlpZiAocmMpCi0JCQlwcl9kZWJ1ZygiWyVzXSB2cnIgbW9kZSBtaXNtYXRj aCBmYWlsdXJlIHJjPSVkXG4iLAotCQkJCWNfYnJpZGdlLT5kaXNwbGF5LT5uYW1lLCByYyk7Ci0K LQkJY3VyX21vZGUgPSBicmlkZ2UtPmVuY29kZXItPmNydGMtPm1vZGU7Ci0KLQkJaWYgKCFkcm1f bW9kZV9lcXVhbCgmY3VyX21vZGUsIGFkanVzdGVkX21vZGUpICYmCi0JCQkoIShkc2lfbW9kZS5k c2lfbW9kZV9mbGFncyAmCi0JCQkJRFNJX01PREVfRkxBR19WUlIpKSkKLQkJCWRzaV9tb2RlLmRz aV9tb2RlX2ZsYWdzIHw9IERTSV9NT0RFX0ZMQUdfRE1TOwotCX0KLQotCWNvbnZlcnRfdG9fZHJt X21vZGUoJmRzaV9tb2RlLCBhZGp1c3RlZF9tb2RlKTsKLQotCXJldHVybiB0cnVlOwotfQotCi1p bnQgZHNpX2Nvbm5fZ2V0X21vZGVfaW5mbyhjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq ZHJtX21vZGUsCi0Jc3RydWN0IG1zbV9tb2RlX2luZm8gKm1vZGVfaW5mbywKLQl1MzIgbWF4X21p eGVyX3dpZHRoKQotewotCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlIGRzaV9tb2RlOwotCXN0cnVj dCBkc2lfbW9kZV9pbmZvICp0aW1pbmc7Ci0KLQlpZiAoIWRybV9tb2RlIHx8ICFtb2RlX2luZm8p Ci0JCXJldHVybiAtRUlOVkFMOwotCi0JY29udmVydF90b19kc2lfbW9kZShkcm1fbW9kZSwgJmRz aV9tb2RlKTsKLQotCWlmICghZHNpX21vZGUucHJpdl9pbmZvKQotCQlyZXR1cm4gLUVJTlZBTDsK LQotCW1lbXNldChtb2RlX2luZm8sIDAsIHNpemVvZigqbW9kZV9pbmZvKSk7Ci0KLQl0aW1pbmcg PSAmZHNpX21vZGUudGltaW5nOwotCW1vZGVfaW5mby0+ZnJhbWVfcmF0ZSA9IGRzaV9tb2RlLnRp bWluZy5yZWZyZXNoX3JhdGU7Ci0JbW9kZV9pbmZvLT52dG90YWwgPSBEU0lfVl9UT1RBTCh0aW1p bmcpOwotCW1vZGVfaW5mby0+cHJlZmlsbF9saW5lcyA9IGRzaV9tb2RlLnByaXZfaW5mby0+cGFu ZWxfcHJlZmlsbF9saW5lczsKLQltb2RlX2luZm8tPmppdHRlcl9udW1lciA9IGRzaV9tb2RlLnBy aXZfaW5mby0+cGFuZWxfaml0dGVyX251bWVyOwotCW1vZGVfaW5mby0+aml0dGVyX2Rlbm9tID0g ZHNpX21vZGUucHJpdl9pbmZvLT5wYW5lbF9qaXR0ZXJfZGVub207Ci0KLQltZW1jcHkoJm1vZGVf aW5mby0+dG9wb2xvZ3ksICZkc2lfbW9kZS5wcml2X2luZm8tPnRvcG9sb2d5LAotCQkJc2l6ZW9m KHN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSkpOwotCi0JbW9kZV9pbmZvLT5jb21wX2luZm8u Y29tcF90eXBlID0gTVNNX0RJU1BMQVlfQ09NUFJFU1NJT05fTk9ORTsKLQlpZiAoZHNpX21vZGUu cHJpdl9pbmZvLT5kc2NfZW5hYmxlZCkgewotCQltb2RlX2luZm8tPmNvbXBfaW5mby5jb21wX3R5 cGUgPSBNU01fRElTUExBWV9DT01QUkVTU0lPTl9EU0M7Ci0JCW1lbWNweSgmbW9kZV9pbmZvLT5j b21wX2luZm8uZHNjX2luZm8sICZkc2lfbW9kZS5wcml2X2luZm8tPmRzYywKLQkJCXNpemVvZihk c2lfbW9kZS5wcml2X2luZm8tPmRzYykpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3MgZHNpX2JyaWRnZV9vcHMgPSB7Ci0JLmF0dGFj aCAgICAgICA9IGRzaV9icmlkZ2VfYXR0YWNoLAotCS5tb2RlX2ZpeHVwICAgPSBkc2lfYnJpZGdl X21vZGVfZml4dXAsCi0JLnByZV9lbmFibGUgICA9IGRzaV9icmlkZ2VfcHJlX2VuYWJsZSwKLQku ZW5hYmxlICAgICAgID0gZHNpX2JyaWRnZV9lbmFibGUsCi0JLmRpc2FibGUgICAgICA9IGRzaV9i cmlkZ2VfZGlzYWJsZSwKLQkucG9zdF9kaXNhYmxlID0gZHNpX2JyaWRnZV9wb3N0X2Rpc2FibGUs Ci0JLm1vZGVfc2V0ICAgICA9IGRzaV9icmlkZ2VfbW9kZV9zZXQsCi19OwotCi1pbnQgZHNpX2Nv bm5fcG9zdF9pbml0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCXZvaWQgKmlu Zm8sCi0JCXZvaWQgKmRpc3BsYXkpCi17Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkc2lfZGlzcGxh eSA9IGRpc3BsYXk7Ci0Jc3RydWN0IGRzaV9wYW5lbCAqcGFuZWw7Ci0KLQlpZiAoIWluZm8gfHwg IWRzaV9kaXNwbGF5KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRwdV9rbXNfaW5mb19hZGRfa2V5 c3RyKGluZm8sCi0JCSJkaXNwbGF5IHR5cGUiLCBkc2lfZGlzcGxheS0+ZGlzcGxheV90eXBlKTsK LQotCXN3aXRjaCAoZHNpX2Rpc3BsYXktPnR5cGUpIHsKLQljYXNlIERTSV9ESVNQTEFZX1NJTkdM RToKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywgImRpc3BsYXkgY29uZmlnIiwKLQkJ CQkJInNpbmdsZSBkaXNwbGF5Iik7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX0RJU1BMQVlfRVhUX0JS SURHRToKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywgImRpc3BsYXkgY29uZmlnIiwg ImV4dCBicmlkZ2UiKTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfRElTUExBWV9TUExJVDoKLQkJZHB1 X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywgImRpc3BsYXkgY29uZmlnIiwKLQkJCQkJInNwbGl0 IGRpc3BsYXkiKTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfRElTUExBWV9TUExJVF9FWFRfQlJJREdF OgotCQlkcHVfa21zX2luZm9fYWRkX2tleXN0cihpbmZvLCAiZGlzcGxheSBjb25maWciLAotCQkJ CQkic3BsaXQgZXh0IGJyaWRnZSIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcl9kZWJ1Zygi aW52YWxpZCBkaXNwbGF5IHR5cGU6JWRcbiIsIGRzaV9kaXNwbGF5LT50eXBlKTsKLQkJYnJlYWs7 Ci0JfQotCi0JaWYgKCFkc2lfZGlzcGxheS0+cGFuZWwpIHsKLQkJcHJfZGVidWcoImludmFsaWQg cGFuZWwgZGF0YVxuIik7Ci0JCWdvdG8gZW5kOwotCX0KLQotCXBhbmVsID0gZHNpX2Rpc3BsYXkt PnBhbmVsOwotCWRwdV9rbXNfaW5mb19hZGRfa2V5c3RyKGluZm8sICJwYW5lbCBuYW1lIiwgcGFu ZWwtPm5hbWUpOwotCi0Jc3dpdGNoIChwYW5lbC0+cGFuZWxfbW9kZSkgewotCWNhc2UgRFNJX09Q X1ZJREVPX01PREU6Ci0JCWRwdV9rbXNfaW5mb19hZGRfa2V5c3RyKGluZm8sICJwYW5lbCBtb2Rl IiwgInZpZGVvIik7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX09QX0NNRF9NT0RFOgotCQlkcHVfa21z X2luZm9fYWRkX2tleXN0cihpbmZvLCAicGFuZWwgbW9kZSIsICJjb21tYW5kIik7Ci0JCWRwdV9r bXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJtZHBfdHJhbnNmZXJfdGltZV91cyIsCi0JCQkJcGFu ZWwtPmNtZF9jb25maWcubWRwX3RyYW5zZmVyX3RpbWVfdXMpOwotCQlicmVhazsKLQlkZWZhdWx0 OgotCQlwcl9kZWJ1ZygiaW52YWxpZCBwYW5lbCB0eXBlOiVkXG4iLCBwYW5lbC0+cGFuZWxfbW9k ZSk7Ci0JCWJyZWFrOwotCX0KLQlkcHVfa21zX2luZm9fYWRkX2tleXN0cihpbmZvLCAiZGZwcyBz dXBwb3J0IiwKLQkJCXBhbmVsLT5kZnBzX2NhcHMuZGZwc19zdXBwb3J0ID8gInRydWUiIDogImZh bHNlIik7Ci0KLQlpZiAocGFuZWwtPmRmcHNfY2Fwcy5kZnBzX3N1cHBvcnQpIHsKLQkJZHB1X2tt c19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1pbl9mcHMiLAotCQkJcGFuZWwtPmRmcHNfY2Fwcy5t aW5fcmVmcmVzaF9yYXRlKTsKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1heF9m cHMiLAotCQkJcGFuZWwtPmRmcHNfY2Fwcy5tYXhfcmVmcmVzaF9yYXRlKTsKLQl9Ci0KLQlzd2l0 Y2ggKHBhbmVsLT5waHlfcHJvcHMucm90YXRpb24pIHsKLQljYXNlIERTSV9QQU5FTF9ST1RBVEVf Tk9ORToKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywgInBhbmVsIG9yaWVudGF0aW9u IiwgIm5vbmUiKTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfUEFORUxfUk9UQVRFX0hfRkxJUDoKLQkJ ZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywgInBhbmVsIG9yaWVudGF0aW9uIiwgImhvcnog ZmxpcCIpOwotCQlicmVhazsKLQljYXNlIERTSV9QQU5FTF9ST1RBVEVfVl9GTElQOgotCQlkcHVf a21zX2luZm9fYWRkX2tleXN0cihpbmZvLCAicGFuZWwgb3JpZW50YXRpb24iLCAidmVydCBmbGlw Iik7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX1BBTkVMX1JPVEFURV9IVl9GTElQOgotCQlkcHVfa21z X2luZm9fYWRkX2tleXN0cihpbmZvLCAicGFuZWwgb3JpZW50YXRpb24iLAotCQkJCQkJCSJob3J6 ICYgdmVydCBmbGlwIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByX2RlYnVnKCJpbnZhbGlk IHBhbmVsIHJvdGF0aW9uOiVkXG4iLAotCQkJCQkJcGFuZWwtPnBoeV9wcm9wcy5yb3RhdGlvbik7 Ci0JCWJyZWFrOwotCX0KLQotCXN3aXRjaCAocGFuZWwtPmJsX2NvbmZpZy50eXBlKSB7Ci0JY2Fz ZSBEU0lfQkFDS0xJR0hUX1BXTToKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywgImJh Y2tsaWdodCB0eXBlIiwgInB3bSIpOwotCQlicmVhazsKLQljYXNlIERTSV9CQUNLTElHSFRfV0xF RDoKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywgImJhY2tsaWdodCB0eXBlIiwgInds ZWQiKTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQkFDS0xJR0hUX0RDUzoKLQkJZHB1X2ttc19pbmZv X2FkZF9rZXlzdHIoaW5mbywgImJhY2tsaWdodCB0eXBlIiwgImRjcyIpOwotCQlicmVhazsKLQlk ZWZhdWx0OgotCQlwcl9kZWJ1ZygiaW52YWxpZCBwYW5lbCBiYWNrbGlnaHQgdHlwZTolZFxuIiwK LQkJCQkJCXBhbmVsLT5ibF9jb25maWcudHlwZSk7Ci0JCWJyZWFrOwotCX0KLQotZW5kOgotCXJl dHVybiAwOwotfQotCi1lbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIGRzaV9jb25uX2RldGVjdChz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubiwKLQkJYm9vbCBmb3JjZSwKLQkJdm9pZCAqZGlzcGxh eSkKLXsKLQllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0 dXNfdW5rbm93bjsKLQlzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyBpbmZvOwotCWludCByYzsKLQot CWlmICghY29ubiB8fCAhZGlzcGxheSkKLQkJcmV0dXJuIHN0YXR1czsKLQotCS8qIGdldCBkaXNw bGF5IGRzaV9pbmZvICovCi0JbWVtc2V0KCZpbmZvLCAweDAsIHNpemVvZihpbmZvKSk7Ci0JcmMg PSBkc2lfZGlzcGxheV9nZXRfaW5mbygmaW5mbywgZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXBy X2VycigiZmFpbGVkIHRvIGdldCBkaXNwbGF5IGluZm8sIHJjPSVkXG4iLCByYyk7Ci0JCXJldHVy biBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKLQl9Ci0KLQlpZiAoaW5mby5jYXBhYmls aXRpZXMgJiBNU01fRElTUExBWV9DQVBfSE9UX1BMVUcpCi0JCXN0YXR1cyA9IChpbmZvLmlzX2Nv bm5lY3RlZCA/IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkIDoKLQkJCQkJICAgICAgY29ubmVj dG9yX3N0YXR1c19kaXNjb25uZWN0ZWQpOwotCWVsc2UKLQkJc3RhdHVzID0gY29ubmVjdG9yX3N0 YXR1c19jb25uZWN0ZWQ7Ci0KLQljb25uLT5kaXNwbGF5X2luZm8ud2lkdGhfbW0gPSBpbmZvLndp ZHRoX21tOwotCWNvbm4tPmRpc3BsYXlfaW5mby5oZWlnaHRfbW0gPSBpbmZvLmhlaWdodF9tbTsK LQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXZvaWQgZHNpX2Nvbm5lY3Rvcl9wdXRfbW9kZXMoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQl2b2lkICpkaXNwbGF5KQotewotCXN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICpkcm1fbW9kZTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSBk c2lfbW9kZTsKLQotCWlmICghY29ubmVjdG9yIHx8ICFkaXNwbGF5KQotCQlyZXR1cm47Ci0KLQkg bGlzdF9mb3JfZWFjaF9lbnRyeShkcm1fbW9kZSwgJmNvbm5lY3Rvci0+bW9kZXMsIGhlYWQpIHsK LQkJY29udmVydF90b19kc2lfbW9kZShkcm1fbW9kZSwgJmRzaV9tb2RlKTsKLQkJZHNpX2Rpc3Bs YXlfcHV0X21vZGUoZGlzcGxheSwgJmRzaV9tb2RlKTsKLQl9Ci19Ci0KLWludCBkc2lfY29ubmVj dG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQl2b2lkICpk aXNwbGF5KQotewotCXUzMiBjb3VudCA9IDA7Ci0JdTMyIHNpemUgPSAwOwotCXN0cnVjdCBkc2lf ZGlzcGxheV9tb2RlICptb2RlcyA9IE5VTEw7Ci0Jc3RydWN0IGRybV9kaXNwbGF5X21vZGUgZHJt X21vZGU7Ci0JaW50IHJjLCBpOwotCi0JaWYgKGRwdV9jb25uZWN0b3JfZ2V0X3BhbmVsKGNvbm5l Y3RvcikpIHsKLQkJLyoKLQkJICogVE9ETzogSWYgZHJtX3BhbmVsIGlzIGF0dGFjaGVkLCBxdWVy eSBtb2RlcyBmcm9tIHRoZSBwYW5lbC4KLQkJICogVGhpcyBpcyBjb21wbGljYXRlZCBpbiBzcGxp dCBkc2kgY2FzZXMgYmVjYXVzZSBwYW5lbCBpcyBub3QKLQkJICogYXR0YWNoZWQgdG8gYm90aCBj b25uZWN0b3JzLgotCQkgKi8KLQkJZ290byBlbmQ7Ci0JfQotCXJjID0gZHNpX2Rpc3BsYXlfZ2V0 X21vZGVfY291bnQoZGlzcGxheSwgJmNvdW50KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWls ZWQgdG8gZ2V0IG51bSBvZiBtb2RlcywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9 Ci0KLQlzaXplID0gY291bnQgKiBzaXplb2YoKm1vZGVzKTsKLQltb2RlcyA9IGt6YWxsb2Moc2l6 ZSwgIEdGUF9LRVJORUwpOwotCWlmICghbW9kZXMpIHsKLQkJY291bnQgPSAwOwotCQlnb3RvIGVu ZDsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2dldF9tb2RlcyhkaXNwbGF5LCBtb2Rlcyk7Ci0J aWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIGdldCBtb2RlcywgcmM9JWRcbiIsIHJjKTsK LQkJY291bnQgPSAwOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBjb3Vu dDsgaSsrKSB7Ci0JCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptOwotCi0JCW1lbXNldCgmZHJt X21vZGUsIDB4MCwgc2l6ZW9mKGRybV9tb2RlKSk7Ci0JCWNvbnZlcnRfdG9fZHJtX21vZGUoJm1v ZGVzW2ldLCAmZHJtX21vZGUpOwotCQltID0gZHJtX21vZGVfZHVwbGljYXRlKGNvbm5lY3Rvci0+ ZGV2LCAmZHJtX21vZGUpOwotCQlpZiAoIW0pIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIGFkZCBt b2RlICV1eCV1XG4iLAotCQkJICAgICAgIGRybV9tb2RlLmhkaXNwbGF5LAotCQkJICAgICAgIGRy bV9tb2RlLnZkaXNwbGF5KTsKLQkJCWNvdW50ID0gLUVOT01FTTsKLQkJCWdvdG8gZXJyb3I7Ci0J CX0KLQkJbS0+d2lkdGhfbW0gPSBjb25uZWN0b3ItPmRpc3BsYXlfaW5mby53aWR0aF9tbTsKLQkJ bS0+aGVpZ2h0X21tID0gY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uaGVpZ2h0X21tOwotCQlkcm1f bW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbSk7Ci0JfQotZXJyb3I6Ci0Ja2ZyZWUobW9kZXMp OwotZW5kOgotCXByX2RlYnVnKCJNT0RFIENPVU5UID0lZFxuXG4iLCBjb3VudCk7Ci0JcmV0dXJu IGNvdW50OwotfQotCi1lbnVtIGRybV9tb2RlX3N0YXR1cyBkc2lfY29ubl9tb2RlX3ZhbGlkKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlLAotCQl2b2lkICpkaXNwbGF5KQotewotCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlIGRz aV9tb2RlOwotCWludCByYzsKLQotCWlmICghY29ubmVjdG9yIHx8ICFtb2RlKSB7Ci0JCXByX2Vy cigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gTU9ERV9FUlJPUjsKLQl9Ci0KLQljb252 ZXJ0X3RvX2RzaV9tb2RlKG1vZGUsICZkc2lfbW9kZSk7Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X3Zh bGlkYXRlX21vZGUoZGlzcGxheSwgJmRzaV9tb2RlLAotCQkJRFNJX1ZBTElEQVRFX0ZMQUdfQUxM T1dfQURKVVNUKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJtb2RlIG5vdCBzdXBwb3J0ZWQsIHJj PSVkXG4iLCByYyk7Ci0JCXJldHVybiBNT0RFX0JBRDsKLQl9Ci0KLQlyZXR1cm4gTU9ERV9PSzsK LX0KLQotaW50IGRzaV9jb25uX3ByZV9raWNrb2ZmKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IsCi0JCXZvaWQgKmRpc3BsYXkpCi17Ci0JaWYgKCFjb25uZWN0b3IgfHwgIWRpc3BsYXkp IHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0K LQotCXJldHVybiBkc2lfZGlzcGxheV9wcmVfa2lja29mZihkaXNwbGF5KTsKLX0KLQotdm9pZCBk c2lfY29ubl9lbmFibGVfZXZlbnQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJ dWludDMyX3QgZXZlbnRfaWR4LCBib29sIGVuYWJsZSwgdm9pZCAqZGlzcGxheSkKLXsKLQlzdHJ1 Y3QgZHNpX2V2ZW50X2NiX2luZm8gZXZlbnRfaW5mbzsKLQotCW1lbXNldCgmZXZlbnRfaW5mbywg MCwgc2l6ZW9mKGV2ZW50X2luZm8pKTsKLQotCWV2ZW50X2luZm8uZXZlbnRfY2IgPSBkcHVfY29u bmVjdG9yX3RyaWdnZXJfZXZlbnQ7Ci0JZXZlbnRfaW5mby5ldmVudF91c3JfcHRyID0gY29ubmVj dG9yOwotCi0JZHNpX2Rpc3BsYXlfZW5hYmxlX2V2ZW50KGRpc3BsYXksIGV2ZW50X2lkeCwgJmV2 ZW50X2luZm8sIGVuYWJsZSk7Ci19Ci0KLWludCBkc2lfY29ubl9wb3N0X2tpY2tvZmYoc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXI7Ci0Jc3RydWN0IGRzaV9icmlkZ2UgKmNfYnJpZGdlOwotCXN0cnVjdCBkc2lfZGlzcGxheV9t b2RlIGFkal9tb2RlOwotCXN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheTsKLQlzdHJ1Y3QgZHNp X2Rpc3BsYXlfY3RybCAqbV9jdHJsLCAqY3RybDsKLQlpbnQgaSwgcmMgPSAwOwotCi0JaWYgKCFj b25uZWN0b3IgfHwgIWNvbm5lY3Rvci0+c3RhdGUtPmJlc3RfZW5jb2RlcikKLQkJcmV0dXJuIC1F SU5WQUw7Ci0KLQllbmNvZGVyID0gY29ubmVjdG9yLT5zdGF0ZS0+YmVzdF9lbmNvZGVyOwotCWNf YnJpZGdlID0gdG9fZHNpX2JyaWRnZShlbmNvZGVyLT5icmlkZ2UpOwotCWFkal9tb2RlID0gY19i cmlkZ2UtPmRzaV9tb2RlOwotCWRpc3BsYXkgPSBjX2JyaWRnZS0+ZGlzcGxheTsKLQotCWlmIChh ZGpfbW9kZS5kc2lfbW9kZV9mbGFncyAmIERTSV9NT0RFX0ZMQUdfVlJSKSB7Ci0JCW1fY3RybCA9 ICZkaXNwbGF5LT5jdHJsW2Rpc3BsYXktPmNsa19tYXN0ZXJfaWR4XTsKLQkJcmMgPSBkc2lfY3Ry bF90aW1pbmdfZGJfdXBkYXRlKG1fY3RybC0+Y3RybCwgZmFsc2UpOwotCQlpZiAocmMpIHsKLQkJ CXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGZwcyB1cGRhdGUgIHJjPSVkXG4iLAotCQkJCWRpc3Bs YXktPm5hbWUsIHJjKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJLyogVXBkYXRlIHRo ZSByZXN0IG9mIHRoZSBjb250cm9sbGVycyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+ Y3RybF9jb3VudDsgaSsrKSB7Ci0JCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCQlpZiAo IWN0cmwtPmN0cmwgfHwgKGN0cmwgPT0gbV9jdHJsKSkKLQkJCQljb250aW51ZTsKLQotCQkJcmMg PSBkc2lfY3RybF90aW1pbmdfZGJfdXBkYXRlKGN0cmwtPmN0cmwsIGZhbHNlKTsKLQkJCWlmIChy YykgewotCQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGZwcyB1cGRhdGUgcmM9JWRcbiIsCi0J CQkJCWRpc3BsYXktPm5hbWUsICByYyk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCX0K LQotCQljX2JyaWRnZS0+ZHNpX21vZGUuZHNpX21vZGVfZmxhZ3MgJj0gfkRTSV9NT0RFX0ZMQUdf VlJSOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdHJ1Y3QgZHNpX2JyaWRnZSAqZHNpX2RybV9i cmlkZ2VfaW5pdChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCQkJICAgICAgIHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJICAgICAgIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cikKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfYnJpZGdlICpicmlkZ2U7Ci0KLQlicmlk Z2UgPSBremFsbG9jKHNpemVvZigqYnJpZGdlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFicmlkZ2Up IHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWJyaWRnZS0+ZGlzcGxh eSA9IGRpc3BsYXk7Ci0JYnJpZGdlLT5iYXNlLmZ1bmNzID0gJmRzaV9icmlkZ2Vfb3BzOwotCWJy aWRnZS0+YmFzZS5lbmNvZGVyID0gZW5jb2RlcjsKLQotCXJjID0gZHJtX2JyaWRnZV9hdHRhY2go ZW5jb2RlciwgJmJyaWRnZS0+YmFzZSwgTlVMTCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFp bGVkIHRvIGF0dGFjaCBicmlkZ2UsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3JfZnJlZV9i cmlkZ2U7Ci0JfQotCi0JZW5jb2Rlci0+YnJpZGdlID0gJmJyaWRnZS0+YmFzZTsKLQlyZXR1cm4g YnJpZGdlOwotZXJyb3JfZnJlZV9icmlkZ2U6Ci0Ja2ZyZWUoYnJpZGdlKTsKLWVycm9yOgotCXJl dHVybiBFUlJfUFRSKHJjKTsKLX0KLQotdm9pZCBkc2lfZHJtX2JyaWRnZV9jbGVhbnVwKHN0cnVj dCBkc2lfYnJpZGdlICpicmlkZ2UpCi17Ci0JaWYgKGJyaWRnZSAmJiBicmlkZ2UtPmJhc2UuZW5j b2RlcikKLQkJYnJpZGdlLT5iYXNlLmVuY29kZXItPmJyaWRnZSA9IE5VTEw7Ci0KLQlrZnJlZShi cmlkZ2UpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9k c2lfZHJtLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kcm0uaApkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhkZTMzYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kcm0uaAorKysgL2Rldi9udWxsCkBAIC0xLDEy NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3Vu ZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g MiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpZm5k ZWYgX0RTSV9EUk1fSF8KLSNkZWZpbmUgX0RTSV9EUk1fSF8KLQotI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+Ci0jaW5jbHVkZSA8ZHJtL2RybVAuaD4KLSNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4K LSNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Ci0KLSNpbmNsdWRlICJtc21fZHJ2Lmgi Ci0KLSNpbmNsdWRlICJkc2lfZGlzcGxheS5oIgotCi1zdHJ1Y3QgZHNpX2JyaWRnZSB7Ci0Jc3Ry dWN0IGRybV9icmlkZ2UgYmFzZTsKLQl1MzIgaWQ7Ci0KLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRp c3BsYXk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgZHNpX21vZGU7Ci19OwotCi0vKioKLSAq IGRzaV9jb25uX3Bvc3RfaW5pdCAtIGNhbGxiYWNrIHRvIHBlcmZvcm0gYWRkaXRpb25hbCBpbml0 aWFsaXphdGlvbiBzdGVwcwotICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9y IHN0cnVjdHVyZQotICogQGluZm86IFBvaW50ZXIgdG8gZHB1IGNvbm5lY3RvciBpbmZvIHN0cnVj dHVyZQotICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IGhhbmRsZQotICog UmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0gKi8KLWludCBkc2lfY29ubl9wb3N0X2luaXQoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJdm9pZCAqaW5mbywKLQkJdm9pZCAqZGlz cGxheSk7Ci0KLS8qKgotICogZHNpX2Nvbm5fZGV0ZWN0IC0gY2FsbGJhY2sgdG8gZGV0ZXJtaW5l IGlmIGNvbm5lY3RvciBpcyBjb25uZWN0ZWQKLSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJt IGNvbm5lY3RvciBzdHJ1Y3R1cmUKLSAqIEBmb3JjZTogRm9yY2UgZGV0ZWN0IHNldHRpbmcgZnJv bSBkcm0gZnJhbWV3b3JrCi0gKiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRlIGRpc3BsYXkg aGFuZGxlCi0gKiBSZXR1cm5zOiBDb25uZWN0b3IgJ2lzIGNvbm5lY3RlZCcgc3RhdHVzCi0gKi8K LWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgZHNpX2Nvbm5fZGV0ZWN0KHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uLAotCQlib29sIGZvcmNlLAotCQl2b2lkICpkaXNwbGF5KTsKLQotLyoqCi0g KiBkc2lfY29ubmVjdG9yX2dldF9tb2RlcyAtIGNhbGxiYWNrIHRvIGFkZCBkcm0gbW9kZXMgdmlh IGRybV9tb2RlX3Byb2JlZF9hZGQoKQotICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29u bmVjdG9yIHN0cnVjdHVyZQotICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5 IGhhbmRsZQotICogUmV0dXJuczogTnVtYmVyIG9mIG1vZGVzIGFkZGVkCi0gKi8KLWludCBkc2lf Y29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQl2 b2lkICpkaXNwbGF5KTsKLQotLyoqCi0gKiBkc2lfY29ubmVjdG9yX3B1dF9tb2RlcyAtIGNhbGxi YWNrIHRvIGZyZWUgdXAgZHJtIG1vZGVzIG9mIHRoZSBjb25uZWN0b3IKLSAqIEBjb25uZWN0b3I6 IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLSAqIEBkaXNwbGF5OiBQb2ludGVy IHRvIHByaXZhdGUgZGlzcGxheSBoYW5kbGUKLSAqLwotdm9pZCBkc2lfY29ubmVjdG9yX3B1dF9t b2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCXZvaWQgKmRpc3BsYXkpOwot Ci0vKioKLSAqIGRzaV9jb25uX2dldF9tb2RlX2luZm8gLSByZXRyaWV2ZSBpbmZvcm1hdGlvbiBv biB0aGUgbW9kZSBzZWxlY3RlZAotICogQGRybV9tb2RlOiBEaXNwbGF5IG1vZGUgc2V0IGZvciB0 aGUgZGlzcGxheQotICogQG1vZGVfaW5mbzogT3V0IHBhcmFtZXRlci4gaW5mb3JtYXRpb24gb2Yg dGhlIG1vZGUuCi0gKiBAbWF4X21peGVyX3dpZHRoOiBtYXggd2lkdGggc3VwcG9ydGVkIGJ5IEhX IGxheWVyIG1peGVyCi0gKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLSAqLwotaW50IGRzaV9j b25uX2dldF9tb2RlX2luZm8oY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9tb2Rl LAotCXN0cnVjdCBtc21fbW9kZV9pbmZvICptb2RlX2luZm8sIHUzMiBtYXhfbWl4ZXJfd2lkdGgp OwotCi0vKioKLSAqIGRzaV9jb25uX21vZGVfdmFsaWQgLSBjYWxsYmFjayB0byBkZXRlcm1pbmUg aWYgc3BlY2lmaWVkIG1vZGUgaXMgdmFsaWQKLSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJt IGNvbm5lY3RvciBzdHJ1Y3R1cmUKLSAqIEBtb2RlOiBQb2ludGVyIHRvIGRybSBtb2RlIHN0cnVj dHVyZQotICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IGhhbmRsZQotICog UmV0dXJuczogVmFsaWRpdHkgc3RhdHVzIGZvciBzcGVjaWZpZWQgbW9kZQotICovCi1lbnVtIGRy bV9tb2RlX3N0YXR1cyBkc2lfY29ubl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IsCi0JCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAotCQl2b2lkICpkaXNw bGF5KTsKLQotLyoqCi0gKiBkc2lfY29ubl9lbmFibGVfZXZlbnQgLSBjYWxsYmFjayB0byBub3Rp ZnkgRFNJIGRyaXZlciBvZiBldmVudCByZWdpc3RlcmF0aW9uCi0gKiBAY29ubmVjdG9yOiBQb2lu dGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCi0gKiBAZXZlbnRfaWR4OiBDb25uZWN0b3Ig ZXZlbnQgaW5kZXgKLSAqIEBlbmFibGU6IFdoZXRoZXIgb3Igbm90IHRoZSBldmVudCBpcyBlbmFi bGVkCi0gKiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRlIGRpc3BsYXkgaGFuZGxlCi0gKi8K LXZvaWQgZHNpX2Nvbm5fZW5hYmxlX2V2ZW50KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IsCi0JCXVpbnQzMl90IGV2ZW50X2lkeCwgYm9vbCBlbmFibGUsIHZvaWQgKmRpc3BsYXkpOwot Ci1zdHJ1Y3QgZHNpX2JyaWRnZSAqZHNpX2RybV9icmlkZ2VfaW5pdChzdHJ1Y3QgZHNpX2Rpc3Bs YXkgKmRpc3BsYXksCi0JCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2Rlcik7Ci0KLXZvaWQgZHNpX2RybV9icmlkZ2VfY2xlYW51cChzdHJ1Y3QgZHNp X2JyaWRnZSAqYnJpZGdlKTsKLQotLyoqCi0gKiBkc2lfZGlzcGxheV9wcmVfa2lja29mZiAtIHBy b2dyYW0ga2lja29mZi10aW1lIGZlYXR1cmVzCi0gKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRy bSBjb25uZWN0b3Igc3RydWN0dXJlCi0gKiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRlIGRp c3BsYXkgc3RydWN0dXJlCi0gKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLSAqLwotaW50IGRz aV9jb25uX3ByZV9raWNrb2ZmKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCXZv aWQgKmRpc3BsYXkpOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5X3Bvc3Rfa2lja29mZiAtIHByb2dy YW0gcG9zdCBraWNrb2ZmLXRpbWUgZmVhdHVyZXMKLSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8g ZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLSAqIFJldHVybnM6IFplcm8gb24gc3VjY2VzcwotICov Ci1pbnQgZHNpX2Nvbm5fcG9zdF9raWNrb2ZmKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IpOwotCi0jZW5kaWYgLyogX0RTSV9EUk1fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2h3LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1z dGFnaW5nL2RzaV9ody5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTBhMDAxLi4w MDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2h3LmgKKysr IC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIw MTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu Ci0gKgotICovCi0KLSNpZm5kZWYgX0RTSV9IV19IXwotI2RlZmluZSBfRFNJX0hXX0hfCi0jaW5j bHVkZSA8bGludXgvaW8uaD4KLQotI2RlZmluZSBEU0lfUjMyKGRzaV9odywgb2ZmKSByZWFkbF9y ZWxheGVkKChkc2lfaHcpLT5iYXNlICsgKG9mZikpCi0jZGVmaW5lIERTSV9XMzIoZHNpX2h3LCBv ZmYsIHZhbCkgXAotCWRvIHtcCi0JCXByX2RlYnVnKCJbRFNJXyVkXVslc10gLSBbMHglMDh4XVxu IiwgXAotCQkJKGRzaV9odyktPmluZGV4LCAjb2ZmLCAodWludDMyX3QpKHZhbCkpOyBcCi0JCXdy aXRlbF9yZWxheGVkKCh2YWwpLCAoZHNpX2h3KS0+YmFzZSArIChvZmYpKTsgXAotCX0gd2hpbGUg KDApCi0KLSNkZWZpbmUgRFNJX01NU1NfTUlTQ19SMzIoZHNpX2h3LCBvZmYpIFwKLQlyZWFkbF9y ZWxheGVkKChkc2lfaHcpLT5tbXNzX21pc2NfYmFzZSArIChvZmYpKQotI2RlZmluZSBEU0lfTU1T U19NSVNDX1czMihkc2lfaHcsIG9mZiwgdmFsKSBcCi0JZG8ge1wKLQkJcHJfZGVidWcoIltEU0lf JWRdWyVzXSAtIFsweCUwOHhdXG4iLCBcCi0JCQkoZHNpX2h3KS0+aW5kZXgsICNvZmYsIHZhbCk7 IFwKLQkJd3JpdGVsX3JlbGF4ZWQoKHZhbCksIChkc2lfaHcpLT5tbXNzX21pc2NfYmFzZSArIChv ZmYpKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRFNJX0RJU1BfQ0NfUjMyKGRzaV9odywg b2ZmKSBcCi0JcmVhZGxfcmVsYXhlZCgoZHNpX2h3KS0+ZGlzcF9jY19iYXNlICsgKG9mZikpCi0j ZGVmaW5lIERTSV9ESVNQX0NDX1czMihkc2lfaHcsIG9mZiwgdmFsKSBcCi0JZG8ge1wKLQkJcHJf ZGVidWcoIltEU0lfJWRdWyVzXSAtIFsweCUwOHhdXG4iLCBcCi0JCQkoZHNpX2h3KS0+aW5kZXgs ICNvZmYsIHZhbCk7IFwKLQkJd3JpdGVsX3JlbGF4ZWQoKHZhbCksIChkc2lfaHcpLT5kaXNwX2Nj X2Jhc2UgKyAob2ZmKSk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIERTSV9SNjQoZHNpX2h3 LCBvZmYpIHJlYWRxX3JlbGF4ZWQoKGRzaV9odyktPmJhc2UgKyAob2ZmKSkKLSNkZWZpbmUgRFNJ X1c2NChkc2lfaHcsIG9mZiwgdmFsKSB3cml0ZXFfcmVsYXhlZCgodmFsKSwgKGRzaV9odyktPmJh c2UgKyAob2ZmKSkKLQotI2VuZGlmIC8qIF9EU0lfSFdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BhbmVsLmMgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2RzaS1zdGFnaW5nL2RzaV9wYW5lbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAyZTc3N2Y4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcv ZHNpX3BhbmVsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzIxICswLDAgQEAKLS8qCi0gKiBDb3B5 cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9u IDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KQkibXNtLWRz aS1wYW5lbDpbJXM6JWRdICIgZm10LCBfX2Z1bmNfXywgX19MSU5FX18KLSNpbmNsdWRlIDxsaW51 eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlv Lmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgotI2luY2x1ZGUgPHZpZGVvL21pcGlfZGlz cGxheS5oPgotCi0jaW5jbHVkZSAiZHNpX3BhbmVsLmgiCi0jaW5jbHVkZSAiZHNpX2N0cmxfaHcu aCIKLQotLyoqCi0gKiB0b3BvbG9neSBpcyBjdXJyZW50bHkgZGVmaW5lZCBieSBhIHNldCBvZiBm b2xsb3dpbmcgMyB2YWx1ZXM6Ci0gKiAxLiBudW0gb2YgbGF5ZXIgbWl4ZXJzCi0gKiAyLiBudW0g b2YgY29tcHJlc3Npb24gZW5jb2RlcnMKLSAqIDMuIG51bSBvZiBpbnRlcmZhY2VzCi0gKi8KLSNk ZWZpbmUgVE9QT0xPR1lfU0VUX0xFTiAzCi0jZGVmaW5lIE1BWF9UT1BPTE9HWSA1Ci0KLSNkZWZp bmUgRFNJX1BBTkVMX0RFRkFVTFRfTEFCRUwgICJEZWZhdWx0IGRzaSBwYW5lbCIKLQotI2RlZmlu ZSBERUZBVUxUX01EUF9UUkFOU0ZFUl9USU1FIDE0MDAwCi0KLSNkZWZpbmUgREVGQVVMVF9QQU5F TF9KSVRURVJfTlVNRVJBVE9SCQkyCi0jZGVmaW5lIERFRkFVTFRfUEFORUxfSklUVEVSX0RFTk9N SU5BVE9SCTEKLSNkZWZpbmUgREVGQVVMVF9QQU5FTF9KSVRURVJfQVJSQVlfU0laRQkJMgotI2Rl ZmluZSBNQVhfUEFORUxfSklUVEVSCQkxMAotI2RlZmluZSBERUZBVUxUX1BBTkVMX1BSRUZJTExf TElORVMJMjUKLQotZW51bSBkc2lfZHNjX3JhdGlvX3R5cGUgewotCURTQ184QlBDXzhCUFAsCi0J RFNDXzEwQlBDXzhCUFAsCi0JRFNDXzEyQlBDXzhCUFAsCi0JRFNDX1JBVElPX1RZUEVfTUFYCi19 OwotCi1zdGF0aWMgdTMyIGRzaV9kc2NfcmNfYnVmX3RocmVzaFtdID0gezB4MGUsIDB4MWMsIDB4 MmEsIDB4MzgsIDB4NDYsIDB4NTQsCi0JCTB4NjIsIDB4NjksIDB4NzAsIDB4NzcsIDB4NzksIDB4 N2IsIDB4N2QsIDB4N2V9OwotCi0vKgotICogRFNDIDEuMQotICogUmF0ZSBjb250cm9sIC0gTWlu IFFQIHZhbHVlcyBmb3IgZWFjaCByYXRpbyB0eXBlIGluIGRzaV9kc2NfcmF0aW9fdHlwZQotICov Ci1zdGF0aWMgY2hhciBkc2lfZHNjX3JjX3JhbmdlX21pbl9xcF8xXzFbXVsxNV0gPSB7Ci0JezAs IDAsIDEsIDEsIDMsIDMsIDMsIDMsIDMsIDMsIDUsIDUsIDUsIDcsIDEzfSwKLQl7MCwgNCwgNSwg NSwgNywgNywgNywgNywgNywgNywgOSwgOSwgOSwgMTEsIDE3fSwKLQl7MCwgNCwgOSwgOSwgMTEs IDExLCAxMSwgMTEsIDExLCAxMSwgMTMsIDEzLCAxMywgMTUsIDIxfSwKLQl9OwotCi0vKgotICog RFNDIDEuMSBTQ1IKLSAqIFJhdGUgY29udHJvbCAtIE1pbiBRUCB2YWx1ZXMgZm9yIGVhY2ggcmF0 aW8gdHlwZSBpbiBkc2lfZHNjX3JhdGlvX3R5cGUKLSAqLwotc3RhdGljIGNoYXIgZHNpX2RzY19y Y19yYW5nZV9taW5fcXBfMV8xX3NjcjFbXVsxNV0gPSB7Ci0JezAsIDAsIDEsIDEsIDMsIDMsIDMs IDMsIDMsIDMsIDUsIDUsIDUsIDksIDEyfSwKLQl7MCwgNCwgNSwgNSwgNywgNywgNywgNywgNywg NywgOSwgOSwgOSwgMTMsIDE2fSwKLQl7MCwgNCwgOSwgOSwgMTEsIDExLCAxMSwgMTEsIDExLCAx MSwgMTMsIDEzLCAxMywgMTcsIDIwfSwKLQl9OwotCi0vKgotICogRFNDIDEuMQotICogUmF0ZSBj b250cm9sIC0gTWF4IFFQIHZhbHVlcyBmb3IgZWFjaCByYXRpbyB0eXBlIGluIGRzaV9kc2NfcmF0 aW9fdHlwZQotICovCi1zdGF0aWMgY2hhciBkc2lfZHNjX3JjX3JhbmdlX21heF9xcF8xXzFbXVsx NV0gPSB7Ci0JezQsIDQsIDUsIDYsIDcsIDcsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxMywg MTV9LAotCXs4LCA4LCA5LCAxMCwgMTEsIDExLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywg MTcsIDE5fSwKLQl7MTIsIDEyLCAxMywgMTQsIDE1LCAxNSwgMTUsIDE2LCAxNywgMTgsIDE5LCAy MCwgMjEsIDIxLCAyM30sCi0JfTsKLQotLyoKLSAqIERTQyAxLjEgU0NSCi0gKiBSYXRlIGNvbnRy b2wgLSBNYXggUVAgdmFsdWVzIGZvciBlYWNoIHJhdGlvIHR5cGUgaW4gZHNpX2RzY19yYXRpb190 eXBlCi0gKi8KLXN0YXRpYyBjaGFyIGRzaV9kc2NfcmNfcmFuZ2VfbWF4X3FwXzFfMV9zY3IxW11b MTVdID0gewotCXs0LCA0LCA1LCA2LCA3LCA3LCA3LCA4LCA5LCAxMCwgMTAsIDExLCAxMSwgMTIs IDEzfSwKLQl7OCwgOCwgOSwgMTAsIDExLCAxMSwgMTEsIDEyLCAxMywgMTQsIDE0LCAxNSwgMTUs IDE2LCAxN30sCi0JezEyLCAxMiwgMTMsIDE0LCAxNSwgMTUsIDE1LCAxNiwgMTcsIDE4LCAxOCwg MTksIDE5LCAyMCwgMjF9LAotCX07Ci0KLS8qCi0gKiBEU0MgMS4xIGFuZCBEU0MgMS4xIFNDUgot ICogUmF0ZSBjb250cm9sIC0gYnBnIG9mZnNldCB2YWx1ZXMKLSAqLwotc3RhdGljIGNoYXIgZHNp X2RzY19yY19yYW5nZV9icGdfb2Zmc2V0W10gPSB7MiwgMCwgMCwgLTIsIC00LCAtNiwgLTgsIC04 LAotCQktOCwgLTEwLCAtMTAsIC0xMiwgLTEyLCAtMTIsIC0xMn07Ci0KLWludCBkc2lfZHNjX2Ny ZWF0ZV9wcHNfYnVmX2NtZChzdHJ1Y3QgbXNtX2Rpc3BsYXlfZHNjX2luZm8gKmRzYywgY2hhciAq YnVmLAotCQkJCWludCBwcHNfaWQpCi17Ci0JY2hhciAqYnA7Ci0JY2hhciBkYXRhOwotCWludCBp LCBicHA7Ci0JY2hhciAqZGJnYnA7Ci0KLQlkYmdicCA9IGJ1ZjsKLQlicCA9IGJ1ZjsKLQkvKiBG aXJzdCA3IGJ5dGVzIGFyZSBjbWQgaGVhZGVyICovCi0JKmJwKysgPSAweDBBOwotCSpicCsrID0g MTsKLQkqYnArKyA9IDA7Ci0JKmJwKysgPSAwOwotCSpicCsrID0gMTA7Ci0JKmJwKysgPSAwOwot CSpicCsrID0gMTI4OwotCi0JKmJwKysgPSAoZHNjLT52ZXJzaW9uICYgMHhmZik7CQkvKiBwcHMw ICovCi0JKmJwKysgPSAocHBzX2lkICYgMHhmZik7CQkvKiBwcHMxICovCi0JYnArKzsJCQkJCS8q IHBwczIsIHJlc2VydmVkICovCi0KLQlkYXRhID0gZHNjLT5saW5lX2J1Zl9kZXB0aCAmIDB4MGY7 Ci0JZGF0YSB8PSAoKGRzYy0+YnBjICYgMHhmKSA8PCA0KTsKLQkqYnArKyA9IGRhdGE7CQkJCS8q IHBwczMgKi8KLQotCWJwcCA9IGRzYy0+YnBwOwotCWJwcCA8PD0gNDsJCQkJLyogNCBmcmFjdGlv biBiaXRzICovCi0JZGF0YSA9IChicHAgPj4gOCk7Ci0JZGF0YSAmPSAweDAzOwkJCQkvKiB1cHBl ciB0d28gYml0cyAqLwotCWRhdGEgfD0gKChkc2MtPmJsb2NrX3ByZWRfZW5hYmxlICYgMHgxKSA8 PCA1KTsKLQlkYXRhIHw9ICgoZHNjLT5jb252ZXJ0X3JnYiAmIDB4MSkgPDwgNCk7Ci0JZGF0YSB8 PSAoKGRzYy0+ZW5hYmxlXzQyMiAmIDB4MSkgPDwgMyk7Ci0JZGF0YSB8PSAoKGRzYy0+dmJyX2Vu YWJsZSAmIDB4MSkgPDwgMik7Ci0JKmJwKysgPSBkYXRhOwkJCQkvKiBwcHM0ICovCi0JKmJwKysg PSAoYnBwICYgMHhmZik7CQkJLyogcHBzNSAqLwotCi0JKmJwKysgPSAoKGRzYy0+cGljX2hlaWdo dCA+PiA4KSAmIDB4ZmYpOyAvKiBwcHM2ICovCi0JKmJwKysgPSAoZHNjLT5waWNfaGVpZ2h0ICYg MHgwZmYpOwkvKiBwcHM3ICovCi0JKmJwKysgPSAoKGRzYy0+cGljX3dpZHRoID4+IDgpICYgMHhm Zik7CS8qIHBwczggKi8KLQkqYnArKyA9IChkc2MtPnBpY193aWR0aCAmIDB4MGZmKTsJLyogcHBz OSAqLwotCi0JKmJwKysgPSAoKGRzYy0+c2xpY2VfaGVpZ2h0ID4+IDgpICYgMHhmZik7LyogcHBz MTAgKi8KLQkqYnArKyA9IChkc2MtPnNsaWNlX2hlaWdodCAmIDB4MGZmKTsJLyogcHBzMTEgKi8K LQkqYnArKyA9ICgoZHNjLT5zbGljZV93aWR0aCA+PiA4KSAmIDB4ZmYpOyAvKiBwcHMxMiAqLwot CSpicCsrID0gKGRzYy0+c2xpY2Vfd2lkdGggJiAweDBmZik7CS8qIHBwczEzICovCi0KLQkqYnAr KyA9ICgoZHNjLT5jaHVua19zaXplID4+IDgpICYgMHhmZik7LyogcHBzMTQgKi8KLQkqYnArKyA9 IChkc2MtPmNodW5rX3NpemUgJiAweDBmZik7CS8qIHBwczE1ICovCi0KLQkqYnArKyA9IChkc2Mt PmluaXRpYWxfeG1pdF9kZWxheSA+PiA4KSAmIDB4MzsgLyogcHBzMTYsIGJpdCAwLCAxICovCi0J KmJwKysgPSAoZHNjLT5pbml0aWFsX3htaXRfZGVsYXkgJiAweGZmKTsvKiBwcHMxNyAqLwotCi0J KmJwKysgPSAoKGRzYy0+aW5pdGlhbF9kZWNfZGVsYXkgPj4gOCkgJiAweGZmKTsgLyogcHBzMTgg Ki8KLQkqYnArKyA9IChkc2MtPmluaXRpYWxfZGVjX2RlbGF5ICYgMHhmZik7LyogcHBzMTkgKi8K LQotCWJwKys7CQkJCQkvKiBwcHMyMCwgcmVzZXJ2ZWQgKi8KLQotCSpicCsrID0gKGRzYy0+aW5p dGlhbF9zY2FsZV92YWx1ZSAmIDB4M2YpOyAvKiBwcHMyMSAqLwotCi0JKmJwKysgPSAoKGRzYy0+ c2NhbGVfaW5jcmVtZW50X2ludGVydmFsID4+IDgpICYgMHhmZik7IC8qIHBwczIyICovCi0JKmJw KysgPSAoZHNjLT5zY2FsZV9pbmNyZW1lbnRfaW50ZXJ2YWwgJiAweGZmKTsgLyogcHBzMjMgKi8K LQotCSpicCsrID0gKChkc2MtPnNjYWxlX2RlY3JlbWVudF9pbnRlcnZhbCA+PiA4KSAmIDB4Zik7 IC8qIHBwczI0ICovCi0JKmJwKysgPSAoZHNjLT5zY2FsZV9kZWNyZW1lbnRfaW50ZXJ2YWwgJiAw eDBmZik7LyogcHBzMjUgKi8KLQotCWJwKys7CQkJCQkvKiBwcHMyNiwgcmVzZXJ2ZWQgKi8KLQot CSpicCsrID0gKGRzYy0+Zmlyc3RfbGluZV9icGdfb2Zmc2V0ICYgMHgxZik7LyogcHBzMjcgKi8K LQotCSpicCsrID0gKChkc2MtPm5mbF9icGdfb2Zmc2V0ID4+IDgpICYgMHhmZik7LyogcHBzMjgg Ki8KLQkqYnArKyA9IChkc2MtPm5mbF9icGdfb2Zmc2V0ICYgMHgwZmYpOwkvKiBwcHMyOSAqLwot CSpicCsrID0gKChkc2MtPnNsaWNlX2JwZ19vZmZzZXQgPj4gOCkgJiAweGZmKTsvKiBwcHMzMCAq LwotCSpicCsrID0gKGRzYy0+c2xpY2VfYnBnX29mZnNldCAmIDB4MGZmKTsvKiBwcHMzMSAqLwot Ci0JKmJwKysgPSAoKGRzYy0+aW5pdGlhbF9vZmZzZXQgPj4gOCkgJiAweGZmKTsvKiBwcHMzMiAq LwotCSpicCsrID0gKGRzYy0+aW5pdGlhbF9vZmZzZXQgJiAweDBmZik7CS8qIHBwczMzICovCi0K LQkqYnArKyA9ICgoZHNjLT5maW5hbF9vZmZzZXQgPj4gOCkgJiAweGZmKTsvKiBwcHMzNCAqLwot CSpicCsrID0gKGRzYy0+ZmluYWxfb2Zmc2V0ICYgMHgwZmYpOwkvKiBwcHMzNSAqLwotCi0JKmJw KysgPSAoZHNjLT5taW5fcXBfZmxhdG5lc3MgJiAweDFmKTsJLyogcHBzMzYgKi8KLQkqYnArKyA9 IChkc2MtPm1heF9xcF9mbGF0bmVzcyAmIDB4MWYpOwkvKiBwcHMzNyAqLwotCi0JKmJwKysgPSAo KGRzYy0+cmNfbW9kZWxfc2l6ZSA+PiA4KSAmIDB4ZmYpOy8qIHBwczM4ICovCi0JKmJwKysgPSAo ZHNjLT5yY19tb2RlbF9zaXplICYgMHgwZmYpOwkvKiBwcHMzOSAqLwotCi0JKmJwKysgPSAoZHNj LT5lZGdlX2ZhY3RvciAmIDB4MGYpOwkvKiBwcHM0MCAqLwotCi0JKmJwKysgPSAoZHNjLT5xdWFu dF9pbmNyX2xpbWl0MCAmIDB4MWYpOwkvKiBwcHM0MSAqLwotCSpicCsrID0gKGRzYy0+cXVhbnRf aW5jcl9saW1pdDEgJiAweDFmKTsJLyogcHBzNDIgKi8KLQotCWRhdGEgPSAoKGRzYy0+dGd0X29m ZnNldF9oaSAmIDB4ZikgPDwgNCk7Ci0JZGF0YSB8PSAoZHNjLT50Z3Rfb2Zmc2V0X2xvICYgMHgw Zik7Ci0JKmJwKysgPSBkYXRhOwkJCQkvKiBwcHM0MyAqLwotCi0JZm9yIChpID0gMDsgaSA8IDE0 OyBpKyspCi0JCSpicCsrID0gKGRzYy0+YnVmX3RocmVzaFtpXSAmIDB4ZmYpOyAvKiBwcHM0NCAt IHBwczU3ICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgMTU7IGkrKykgewkJLyogcHBzNTggLSBwcHM4 NyAqLwotCQlkYXRhID0gKGRzYy0+cmFuZ2VfbWluX3FwW2ldICYgMHgxZik7Ci0JCWRhdGEgPDw9 IDM7Ci0JCWRhdGEgfD0gKChkc2MtPnJhbmdlX21heF9xcFtpXSA+PiAyKSAmIDB4MDcpOwotCQkq YnArKyA9IGRhdGE7Ci0JCWRhdGEgPSAoZHNjLT5yYW5nZV9tYXhfcXBbaV0gJiAweDAzKTsKLQkJ ZGF0YSA8PD0gNjsKLQkJZGF0YSB8PSAoZHNjLT5yYW5nZV9icGdfb2Zmc2V0W2ldICYgMHgzZik7 Ci0JCSpicCsrID0gZGF0YTsKLQl9Ci0KLQlyZXR1cm4gMTI4OwotfQotCi1zdGF0aWMgaW50IGRz aV9wYW5lbF92cmVnX2dldChzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQgcmMgPSAw OwotCWludCBpOwotCXN0cnVjdCByZWd1bGF0b3IgKnZyZWcgPSBOVUxMOwotCi0JZm9yIChpID0g MDsgaSA8IHBhbmVsLT5wb3dlcl9pbmZvLmNvdW50OyBpKyspIHsKLQkJdnJlZyA9IGRldm1fcmVn dWxhdG9yX2dldChwYW5lbC0+cGFyZW50LAotCQkJCQkgIHBhbmVsLT5wb3dlcl9pbmZvLnZyZWdz W2ldLnZyZWdfbmFtZSk7Ci0JCXJjID0gUFRSX1JFVCh2cmVnKTsKLQkJaWYgKHJjKSB7Ci0JCQlw cl9lcnIoImZhaWxlZCB0byBnZXQgJXMgcmVndWxhdG9yXG4iLAotCQkJICAgICAgIHBhbmVsLT5w b3dlcl9pbmZvLnZyZWdzW2ldLnZyZWdfbmFtZSk7Ci0JCQlnb3RvIGVycm9yX3B1dDsKLQkJfQot CQlwYW5lbC0+cG93ZXJfaW5mby52cmVnc1tpXS52cmVnID0gdnJlZzsKLQl9Ci0KLQlyZXR1cm4g cmM7Ci1lcnJvcl9wdXQ6Ci0JZm9yIChpID0gaSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCWRldm1f cmVndWxhdG9yX3B1dChwYW5lbC0+cG93ZXJfaW5mby52cmVnc1tpXS52cmVnKTsKLQkJcGFuZWwt PnBvd2VyX2luZm8udnJlZ3NbaV0udnJlZyA9IE5VTEw7Ci0JfQotCXJldHVybiAtRVBST0JFX0RF RkVSOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF92cmVnX3B1dChzdHJ1Y3QgZHNpX3BhbmVs ICpwYW5lbCkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCi0JZm9yIChpID0gcGFuZWwtPnBv d2VyX2luZm8uY291bnQgLSAxOyBpID49IDA7IGktLSkKLQkJZGV2bV9yZWd1bGF0b3JfcHV0KHBh bmVsLT5wb3dlcl9pbmZvLnZyZWdzW2ldLnZyZWcpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0 aWMgaW50IGRzaV9wYW5lbF9ncGlvX3JlcXVlc3Qoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17 Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX3BhbmVsX3Jlc2V0X2NvbmZpZyAqcl9jb25maWcg PSAmcGFuZWwtPnJlc2V0X2NvbmZpZzsKLQotCWlmIChncGlvX2lzX3ZhbGlkKHJfY29uZmlnLT5y ZXNldF9ncGlvKSkgewotCQlyYyA9IGdwaW9fcmVxdWVzdChyX2NvbmZpZy0+cmVzZXRfZ3Bpbywg InJlc2V0X2dwaW8iKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoInJlcXVlc3QgZm9yIHJlc2V0 X2dwaW8gZmFpbGVkLCByYz0lZFxuIiwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0KLQot CWlmIChncGlvX2lzX3ZhbGlkKHJfY29uZmlnLT5kaXNwX2VuX2dwaW8pKSB7Ci0JCXJjID0gZ3Bp b19yZXF1ZXN0KHJfY29uZmlnLT5kaXNwX2VuX2dwaW8sICJkaXNwX2VuX2dwaW8iKTsKLQkJaWYg KHJjKSB7Ci0JCQlwcl9lcnIoInJlcXVlc3QgZm9yIGRpc3BfZW5fZ3BpbyBmYWlsZWQsIHJjPSVk XG4iLCByYyk7Ci0JCQlnb3RvIGVycm9yX3JlbGVhc2VfcmVzZXQ7Ci0JCX0KLQl9Ci0KLQlpZiAo Z3Bpb19pc192YWxpZChwYW5lbC0+YmxfY29uZmlnLmVuX2dwaW8pKSB7Ci0JCXJjID0gZ3Bpb19y ZXF1ZXN0KHBhbmVsLT5ibF9jb25maWcuZW5fZ3BpbywgImJrbHRfZW5fZ3BpbyIpOwotCQlpZiAo cmMpIHsKLQkJCXByX2VycigicmVxdWVzdCBmb3IgYmtsdF9lbl9ncGlvIGZhaWxlZCwgcmM9JWRc biIsIHJjKTsKLQkJCWdvdG8gZXJyb3JfcmVsZWFzZV9kaXNwX2VuOwotCQl9Ci0JfQotCi0JaWYg KGdwaW9faXNfdmFsaWQocl9jb25maWctPmxjZF9tb2RlX3NlbF9ncGlvKSkgewotCQlyYyA9IGdw aW9fcmVxdWVzdChyX2NvbmZpZy0+bGNkX21vZGVfc2VsX2dwaW8sICJtb2RlX2dwaW8iKTsKLQkJ aWYgKHJjKSB7Ci0JCQlwcl9lcnIoInJlcXVlc3QgZm9yIG1vZGVfZ3BpbyBmYWlsZWQsIHJjPSVk XG4iLCByYyk7Ci0JCQlnb3RvIGVycm9yX3JlbGVhc2VfbW9kZV9zZWw7Ci0JCX0KLQl9Ci0KLQln b3RvIGVycm9yOwotZXJyb3JfcmVsZWFzZV9tb2RlX3NlbDoKLQlpZiAoZ3Bpb19pc192YWxpZChw YW5lbC0+YmxfY29uZmlnLmVuX2dwaW8pKQotCQlncGlvX2ZyZWUocGFuZWwtPmJsX2NvbmZpZy5l bl9ncGlvKTsKLWVycm9yX3JlbGVhc2VfZGlzcF9lbjoKLQlpZiAoZ3Bpb19pc192YWxpZChyX2Nv bmZpZy0+ZGlzcF9lbl9ncGlvKSkKLQkJZ3Bpb19mcmVlKHJfY29uZmlnLT5kaXNwX2VuX2dwaW8p OwotZXJyb3JfcmVsZWFzZV9yZXNldDoKLQlpZiAoZ3Bpb19pc192YWxpZChyX2NvbmZpZy0+cmVz ZXRfZ3BpbykpCi0JCWdwaW9fZnJlZShyX2NvbmZpZy0+cmVzZXRfZ3Bpbyk7Ci1lcnJvcjoKLQly ZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX2dwaW9fcmVsZWFzZShzdHJ1Y3Qg ZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfcGFuZWxfcmVz ZXRfY29uZmlnICpyX2NvbmZpZyA9ICZwYW5lbC0+cmVzZXRfY29uZmlnOwotCi0JaWYgKGdwaW9f aXNfdmFsaWQocl9jb25maWctPnJlc2V0X2dwaW8pKQotCQlncGlvX2ZyZWUocl9jb25maWctPnJl c2V0X2dwaW8pOwotCi0JaWYgKGdwaW9faXNfdmFsaWQocl9jb25maWctPmRpc3BfZW5fZ3Bpbykp Ci0JCWdwaW9fZnJlZShyX2NvbmZpZy0+ZGlzcF9lbl9ncGlvKTsKLQotCWlmIChncGlvX2lzX3Zh bGlkKHBhbmVsLT5ibF9jb25maWcuZW5fZ3BpbykpCi0JCWdwaW9fZnJlZShwYW5lbC0+YmxfY29u ZmlnLmVuX2dwaW8pOwotCi0JaWYgKGdwaW9faXNfdmFsaWQocGFuZWwtPnJlc2V0X2NvbmZpZy5s Y2RfbW9kZV9zZWxfZ3BpbykpCi0JCWdwaW9fZnJlZShwYW5lbC0+cmVzZXRfY29uZmlnLmxjZF9t b2RlX3NlbF9ncGlvKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGFuZWxf cmVzZXQoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3Qg ZHNpX3BhbmVsX3Jlc2V0X2NvbmZpZyAqcl9jb25maWcgPSAmcGFuZWwtPnJlc2V0X2NvbmZpZzsK LQlpbnQgaTsKLQotCWlmIChncGlvX2lzX3ZhbGlkKHBhbmVsLT5yZXNldF9jb25maWcuZGlzcF9l bl9ncGlvKSkgewotCQlyYyA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChwYW5lbC0+cmVzZXRfY29u ZmlnLmRpc3BfZW5fZ3BpbywgMSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJ1bmFibGUgdG8g c2V0IGRpciBmb3IgZGlzcCBncGlvIHJjPSVkXG4iLCByYyk7Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0K LQl9Ci0KLQlpZiAocl9jb25maWctPmNvdW50KSB7Ci0JCXJjID0gZ3Bpb19kaXJlY3Rpb25fb3V0 cHV0KHJfY29uZmlnLT5yZXNldF9ncGlvLAotCQkJcl9jb25maWctPnNlcXVlbmNlWzBdLmxldmVs KTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoInVuYWJsZSB0byBzZXQgZGlyIGZvciByc3QgZ3Bp byByYz0lZFxuIiwgcmMpOwotCQkJZ290byBleGl0OwotCQl9Ci0JfQotCi0JZm9yIChpID0gMDsg aSA8IHJfY29uZmlnLT5jb3VudDsgaSsrKSB7Ci0JCWdwaW9fc2V0X3ZhbHVlKHJfY29uZmlnLT5y ZXNldF9ncGlvLAotCQkJICAgICAgIHJfY29uZmlnLT5zZXF1ZW5jZVtpXS5sZXZlbCk7Ci0KLQot CQlpZiAocl9jb25maWctPnNlcXVlbmNlW2ldLnNsZWVwX21zKQotCQkJdXNsZWVwX3JhbmdlKHJf Y29uZmlnLT5zZXF1ZW5jZVtpXS5zbGVlcF9tcyAqIDEwMDAsCi0JCQkJICAgICByX2NvbmZpZy0+ c2VxdWVuY2VbaV0uc2xlZXBfbXMgKiAxMDAwKTsKLQl9Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChw YW5lbC0+YmxfY29uZmlnLmVuX2dwaW8pKSB7Ci0JCXJjID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0 KHBhbmVsLT5ibF9jb25maWcuZW5fZ3BpbywgMSk7Ci0JCWlmIChyYykKLQkJCXByX2VycigidW5h YmxlIHRvIHNldCBkaXIgZm9yIGJrbHQgZ3BpbyByYz0lZFxuIiwgcmMpOwotCX0KLQotCWlmIChn cGlvX2lzX3ZhbGlkKHBhbmVsLT5yZXNldF9jb25maWcubGNkX21vZGVfc2VsX2dwaW8pKSB7Ci0J CWJvb2wgb3V0ID0gdHJ1ZTsKLQotCQlpZiAoKHBhbmVsLT5yZXNldF9jb25maWcubW9kZV9zZWxf c3RhdGUgPT0gTU9ERV9TRUxfRFVBTF9QT1JUKQotCQkJCXx8IChwYW5lbC0+cmVzZXRfY29uZmln Lm1vZGVfc2VsX3N0YXRlCi0JCQkJCT09IE1PREVfR1BJT19MT1cpKQotCQkJb3V0ID0gZmFsc2U7 Ci0JCWVsc2UgaWYgKChwYW5lbC0+cmVzZXRfY29uZmlnLm1vZGVfc2VsX3N0YXRlCi0JCQkJPT0g TU9ERV9TRUxfU0lOR0xFX1BPUlQpIHx8Ci0JCQkJKHBhbmVsLT5yZXNldF9jb25maWcubW9kZV9z ZWxfc3RhdGUKLQkJCQkgPT0gTU9ERV9HUElPX0hJR0gpKQotCQkJb3V0ID0gdHJ1ZTsKLQotCQly YyA9IGdwaW9fZGlyZWN0aW9uX291dHB1dCgKLQkJCXBhbmVsLT5yZXNldF9jb25maWcubGNkX21v ZGVfc2VsX2dwaW8sIG91dCk7Ci0JCWlmIChyYykKLQkJCXByX2VycigidW5hYmxlIHRvIHNldCBk aXIgZm9yIG1vZGUgZ3BpbyByYz0lZFxuIiwgcmMpOwotCX0KLWV4aXQ6Ci0JcmV0dXJuIHJjOwot fQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9zZXRfcGluY3RybF9zdGF0ZShzdHJ1Y3QgZHNpX3Bh bmVsICpwYW5lbCwgYm9vbCBlbmFibGUpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgcGluY3Ry bF9zdGF0ZSAqc3RhdGU7Ci0KLQlpZiAoZW5hYmxlKQotCQlzdGF0ZSA9IHBhbmVsLT5waW5jdHJs LmFjdGl2ZTsKLQllbHNlCi0JCXN0YXRlID0gcGFuZWwtPnBpbmN0cmwuc3VzcGVuZDsKLQotCXJj ID0gcGluY3RybF9zZWxlY3Rfc3RhdGUocGFuZWwtPnBpbmN0cmwucGluY3RybCwgc3RhdGUpOwot CWlmIChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZXQgcGluIHN0YXRlLCByYz0lZFxu IiwgcGFuZWwtPm5hbWUsCi0JCSAgICAgICByYyk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLQotc3Rh dGljIGludCBkc2lfcGFuZWxfcG93ZXJfb24oc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0J aW50IHJjID0gMDsKLQotCXJjID0gZHNpX3B3cl9lbmFibGVfcmVndWxhdG9yKCZwYW5lbC0+cG93 ZXJfaW5mbywgdHJ1ZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZW5h YmxlIHZyZWdzLCByYz0lZFxuIiwgcGFuZWwtPm5hbWUsIHJjKTsKLQkJZ290byBleGl0OwotCX0K LQotCXJjID0gZHNpX3BhbmVsX3NldF9waW5jdHJsX3N0YXRlKHBhbmVsLCB0cnVlKTsKLQlpZiAo cmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZXQgcGluY3RybCwgcmM9JWRcbiIsIHBh bmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3JfZGlzYWJsZV92cmVnczsKLQl9Ci0KLQlyYyA9 IGRzaV9wYW5lbF9yZXNldChwYW5lbCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWls ZWQgdG8gcmVzZXQgcGFuZWwsIHJjPSVkXG4iLCBwYW5lbC0+bmFtZSwgcmMpOwotCQlnb3RvIGVy cm9yX2Rpc2FibGVfZ3BpbzsKLQl9Ci0KLQlnb3RvIGV4aXQ7Ci0KLWVycm9yX2Rpc2FibGVfZ3Bp bzoKLQlpZiAoZ3Bpb19pc192YWxpZChwYW5lbC0+cmVzZXRfY29uZmlnLmRpc3BfZW5fZ3Bpbykp Ci0JCWdwaW9fc2V0X3ZhbHVlKHBhbmVsLT5yZXNldF9jb25maWcuZGlzcF9lbl9ncGlvLCAwKTsK LQotCWlmIChncGlvX2lzX3ZhbGlkKHBhbmVsLT5ibF9jb25maWcuZW5fZ3BpbykpCi0JCWdwaW9f c2V0X3ZhbHVlKHBhbmVsLT5ibF9jb25maWcuZW5fZ3BpbywgMCk7Ci0KLQkodm9pZClkc2lfcGFu ZWxfc2V0X3BpbmN0cmxfc3RhdGUocGFuZWwsIGZhbHNlKTsKLQotZXJyb3JfZGlzYWJsZV92cmVn czoKLQkodm9pZClkc2lfcHdyX2VuYWJsZV9yZWd1bGF0b3IoJnBhbmVsLT5wb3dlcl9pbmZvLCBm YWxzZSk7Ci0KLWV4aXQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9w b3dlcl9vZmYoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQotCWlm IChncGlvX2lzX3ZhbGlkKHBhbmVsLT5yZXNldF9jb25maWcuZGlzcF9lbl9ncGlvKSkKLQkJZ3Bp b19zZXRfdmFsdWUocGFuZWwtPnJlc2V0X2NvbmZpZy5kaXNwX2VuX2dwaW8sIDApOwotCi0JaWYg KGdwaW9faXNfdmFsaWQocGFuZWwtPnJlc2V0X2NvbmZpZy5yZXNldF9ncGlvKSkKLQkJZ3Bpb19z ZXRfdmFsdWUocGFuZWwtPnJlc2V0X2NvbmZpZy5yZXNldF9ncGlvLCAwKTsKLQotCWlmIChncGlv X2lzX3ZhbGlkKHBhbmVsLT5yZXNldF9jb25maWcubGNkX21vZGVfc2VsX2dwaW8pKQotCQlncGlv X3NldF92YWx1ZShwYW5lbC0+cmVzZXRfY29uZmlnLmxjZF9tb2RlX3NlbF9ncGlvLCAwKTsKLQot CXJjID0gZHNpX3BhbmVsX3NldF9waW5jdHJsX3N0YXRlKHBhbmVsLCBmYWxzZSk7Ci0JaWYgKHJj KSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgc2V0IHBpbmN0cmwgc3RhdGUsIHJjPSVkXG4iLCBw YW5lbC0+bmFtZSwKLQkJICAgICAgIHJjKTsKLQl9Ci0KLQlyYyA9IGRzaV9wd3JfZW5hYmxlX3Jl Z3VsYXRvcigmcGFuZWwtPnBvd2VyX2luZm8sIGZhbHNlKTsKLQlpZiAocmMpCi0JCXByX2Vycigi WyVzXSBmYWlsZWQgdG8gZW5hYmxlIHZyZWdzLCByYz0lZFxuIiwgcGFuZWwtPm5hbWUsIHJjKTsK LQotCXJldHVybiByYzsKLX0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX3R4X2NtZF9zZXQoc3RydWN0 IGRzaV9wYW5lbCAqcGFuZWwsCi0JCQkJZW51bSBkc2lfY21kX3NldF90eXBlIHR5cGUpCi17Ci0J aW50IHJjID0gMCwgaSA9IDA7Ci0Jc3NpemVfdCBsZW47Ci0Jc3RydWN0IGRzaV9jbWRfZGVzYyAq Y21kczsKLQl1MzIgY291bnQ7Ci0JZW51bSBkc2lfY21kX3NldF9zdGF0ZSBzdGF0ZTsKLQlzdHJ1 Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqbW9kZTsKLQljb25zdCBzdHJ1Y3QgbWlwaV9kc2lfaG9zdF9v cHMgKm9wcyA9IHBhbmVsLT5ob3N0LT5vcHM7Ci0KLQlpZiAoIXBhbmVsIHx8ICFwYW5lbC0+Y3Vy X21vZGUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbW9kZSA9IHBhbmVsLT5jdXJfbW9kZTsKLQot CWNtZHMgPSBtb2RlLT5wcml2X2luZm8tPmNtZF9zZXRzW3R5cGVdLmNtZHM7Ci0JY291bnQgPSBt b2RlLT5wcml2X2luZm8tPmNtZF9zZXRzW3R5cGVdLmNvdW50OwotCXN0YXRlID0gbW9kZS0+cHJp dl9pbmZvLT5jbWRfc2V0c1t0eXBlXS5zdGF0ZTsKLQotCWlmIChjb3VudCA9PSAwKSB7Ci0JCXBy X2RlYnVnKCJbJXNdIE5vIGNvbW1hbmRzIHRvIGJlIHNlbnQgZm9yIHN0YXRlKCVkKVxuIiwKLQkJ CSBwYW5lbC0+bmFtZSwgdHlwZSk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZm9yIChpID0gMDsg aSA8IGNvdW50OyBpKyspIHsKLQkJLyogVE9ETzogIGhhbmRsZSBsYXN0IGNvbW1hbmQgKi8KLQkJ aWYgKHN0YXRlID09IERTSV9DTURfU0VUX1NUQVRFX0xQKQotCQkJY21kcy0+bXNnLmZsYWdzIHw9 IE1JUElfRFNJX01TR19VU0VfTFBNOwotCi0JCWxlbiA9IG9wcy0+dHJhbnNmZXIocGFuZWwtPmhv c3QsICZjbWRzLT5tc2cpOwotCQlpZiAobGVuIDwgMCkgewotCQkJcmMgPSBsZW47Ci0JCQlwcl9l cnIoImZhaWxlZCB0byBzZXQgY21kcyglZCksIHJjPSVkXG4iLCB0eXBlLCByYyk7Ci0JCQlnb3Rv IGVycm9yOwotCQl9Ci0JCWlmIChjbWRzLT5wb3N0X3dhaXRfbXMpCi0JCQltc2xlZXAoY21kcy0+ cG9zdF93YWl0X21zKTsKLQkJY21kcysrOwotCX0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQot c3RhdGljIGludCBkc2lfcGFuZWxfcGluY3RybF9kZWluaXQoc3RydWN0IGRzaV9wYW5lbCAqcGFu ZWwpCi17Ci0JaW50IHJjID0gMDsKLQotCWRldm1fcGluY3RybF9wdXQocGFuZWwtPnBpbmN0cmwu cGluY3RybCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX3BpbmN0 cmxfaW5pdChzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQgcmMgPSAwOwotCi0JLyog VE9ETzogIHBpbmN0cmwgaXMgZGVmaW5lZCBpbiBkc2kgZHQgbm9kZSAqLwotCXBhbmVsLT5waW5j dHJsLnBpbmN0cmwgPSBkZXZtX3BpbmN0cmxfZ2V0KHBhbmVsLT5wYXJlbnQpOwotCWlmIChJU19F UlJfT1JfTlVMTChwYW5lbC0+cGluY3RybC5waW5jdHJsKSkgewotCQlyYyA9IFBUUl9FUlIocGFu ZWwtPnBpbmN0cmwucGluY3RybCk7Ci0JCXByX2VycigiZmFpbGVkIHRvIGdldCBwaW5jdHJsLCBy Yz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXBhbmVsLT5waW5jdHJsLmFjdGl2 ZSA9IHBpbmN0cmxfbG9va3VwX3N0YXRlKHBhbmVsLT5waW5jdHJsLnBpbmN0cmwsCi0JCQkJCQkg ICAgICAgInBhbmVsX2FjdGl2ZSIpOwotCWlmIChJU19FUlJfT1JfTlVMTChwYW5lbC0+cGluY3Ry bC5hY3RpdmUpKSB7Ci0JCXJjID0gUFRSX0VSUihwYW5lbC0+cGluY3RybC5hY3RpdmUpOwotCQlw cl9lcnIoImZhaWxlZCB0byBnZXQgcGluY3RybCBhY3RpdmUgc3RhdGUsIHJjPSVkXG4iLCByYyk7 Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcGFuZWwtPnBpbmN0cmwuc3VzcGVuZCA9Ci0JCXBpbmN0 cmxfbG9va3VwX3N0YXRlKHBhbmVsLT5waW5jdHJsLnBpbmN0cmwsICJwYW5lbF9zdXNwZW5kIik7 Ci0KLQlpZiAoSVNfRVJSX09SX05VTEwocGFuZWwtPnBpbmN0cmwuc3VzcGVuZCkpIHsKLQkJcmMg PSBQVFJfRVJSKHBhbmVsLT5waW5jdHJsLnN1c3BlbmQpOwotCQlwcl9lcnIoImZhaWxlZCB0byBn ZXQgcGluY3RybCBzdXNwZW5kIHN0YXRlLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwot CX0KLQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi0jaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dF UlMKLXN0YXRpYyBpbnQgZHNpX3BhbmVsX2xlZF9ibF9yZWdpc3RlcihzdHJ1Y3QgZHNpX3BhbmVs ICpwYW5lbCwKLQkJCQlzdHJ1Y3QgZHNpX2JhY2tsaWdodF9jb25maWcgKmJsKQotewotCWludCBy YyA9IDA7Ci0KLQlsZWRfdHJpZ2dlcl9yZWdpc3Rlcl9zaW1wbGUoImJrbC10cmlnZ2VyIiwgJmJs LT53bGVkKTsKLQotCS8qIExFRCBBUElzIGRvbid0IHRlbGwgdXMgZGlyZWN0bHkgd2hldGhlciBh IGNsYXNkcHV2IGhhcyB5ZXQKLQkgKiBiZWVuIHJlZ2lzdGVyZWQgdG8gc2VydmljZSB0aGlzIHRy aWdnZXIuIFVudGlsIGNsYXNkcHV2IGlzCi0JICogcmVnaXN0ZXJlZCwgY2FsbGluZyBsZWRfdHJp Z2dlciBoYXMgbm8gZWZmZWN0LCBhbmQgZG9lc24ndAotCSAqIGZhaWwuIENsYXNkcHV2cyBhcmUg YXNzb2NpYXRlZCB3aXRoIGFueSByZWdpc3RlcmVkIHRyaWdnZXJzCi0JICogd2hlbiB0aGV5IGRv IHJlZ2lzdGVyLCBidXQgdGhhdCBpcyB0b28gbGF0ZSBmb3IgRkJDb24uCi0JICogQ2hlY2sgdGhl IGNkZXYgbGlzdCBkaXJlY3RseSBhbmQgZGVmZXIgaWYgYXBwcm9wcmlhdGUuCi0JICovCi0JaWYg KCFibC0+d2xlZCkgewotCQlwcl9lcnIoIlslc10gYmFja2xpZ2h0IHJlZ2lzdHJhdGlvbiBmYWls ZWRcbiIsIHBhbmVsLT5uYW1lKTsKLQkJcmMgPSAtRUlOVkFMOwotCX0gZWxzZSB7Ci0JCXJlYWRf bG9jaygmYmwtPndsZWQtPmxlZGRldl9saXN0X2xvY2spOwotCQlpZiAobGlzdF9lbXB0eSgmYmwt PndsZWQtPmxlZF9jZGV2cykpCi0JCQlyYyA9IC1FUFJPQkVfREVGRVI7Ci0JCXJlYWRfdW5sb2Nr KCZibC0+d2xlZC0+bGVkZGV2X2xpc3RfbG9jayk7Ci0KLQkJaWYgKHJjKSB7Ci0JCQlwcl9pbmZv KCJbJXNdIGJhY2tsaWdodCAlcyBub3QgcmVhZHksIGRlZmVyIHByb2JlXG4iLAotCQkJCXBhbmVs LT5uYW1lLCBibC0+d2xlZC0+bmFtZSk7Ci0JCQlsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyX3NpbXBs ZShibC0+d2xlZCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0jZWxzZQotc3RhdGljIGlu dCBkc2lfcGFuZWxfbGVkX2JsX3JlZ2lzdGVyKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsLAotCQkJ CXN0cnVjdCBkc2lfYmFja2xpZ2h0X2NvbmZpZyAqYmwpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5k aWYKLQotc3RhdGljIGludCBkc2lfcGFuZWxfdXBkYXRlX2JhY2tsaWdodChzdHJ1Y3QgZHNpX3Bh bmVsICpwYW5lbCwKLQl1MzIgYmxfbHZsKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IG1pcGlf ZHNpX2RldmljZSAqZHNpOwotCi0JaWYgKCFwYW5lbCB8fCAoYmxfbHZsID4gMHhmZmZmKSkgewot CQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0J ZHNpID0gJnBhbmVsLT5taXBpX2RldmljZTsKLQotCW11dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9s b2NrKTsKLQotCXJjID0gbWlwaV9kc2lfZGNzX3NldF9kaXNwbGF5X2JyaWdodG5lc3MoZHNpLCBi bF9sdmwpOwotCWlmIChyYyA8IDApCi0JCXByX2VycigiZmFpbGVkIHRvIHVwZGF0ZSBkY3MgYmFj a2xpZ2h0OiVkXG4iLCBibF9sdmwpOwotCi0JbXV0ZXhfdW5sb2NrKCZwYW5lbC0+cGFuZWxfbG9j ayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX3BhbmVsX3NldF9iYWNrbGlnaHQoc3RydWN0 IGRzaV9wYW5lbCAqcGFuZWwsIHUzMiBibF9sdmwpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3Qg ZHNpX2JhY2tsaWdodF9jb25maWcgKmJsID0gJnBhbmVsLT5ibF9jb25maWc7Ci0KLQlwcl9kZWJ1 ZygiYmFja2xpZ2h0IHR5cGU6JWQgbHZsOiVkXG4iLCBibC0+dHlwZSwgYmxfbHZsKTsKLQlzd2l0 Y2ggKGJsLT50eXBlKSB7Ci0JY2FzZSBEU0lfQkFDS0xJR0hUX1dMRUQ6Ci0JCWxlZF90cmlnZ2Vy X2V2ZW50KGJsLT53bGVkLCBibF9sdmwpOwotCQlicmVhazsKLQljYXNlIERTSV9CQUNLTElHSFRf RENTOgotCQlkc2lfcGFuZWxfdXBkYXRlX2JhY2tsaWdodChwYW5lbCwgYmxfbHZsKTsKLQkJYnJl YWs7Ci0JZGVmYXVsdDoKLQkJcHJfZXJyKCJCYWNrbGlnaHQgdHlwZSglZCkgbm90IHN1cHBvcnRl ZFxuIiwgYmwtPnR5cGUpOwotCQlyYyA9IC1FTk9UU1VQUDsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19 Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX2JsX3JlZ2lzdGVyKHN0cnVjdCBkc2lfcGFuZWwgKnBh bmVsKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9iYWNrbGlnaHRfY29uZmlnICpibCA9 ICZwYW5lbC0+YmxfY29uZmlnOwotCi0Jc3dpdGNoIChibC0+dHlwZSkgewotCWNhc2UgRFNJX0JB Q0tMSUdIVF9XTEVEOgotCQlyYyA9IGRzaV9wYW5lbF9sZWRfYmxfcmVnaXN0ZXIocGFuZWwsIGJs KTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQkFDS0xJR0hUX0RDUzoKLQkJYnJlYWs7Ci0JZGVmYXVs dDoKLQkJcHJfZXJyKCJCYWNrbGlnaHQgdHlwZSglZCkgbm90IHN1cHBvcnRlZFxuIiwgYmwtPnR5 cGUpOwotCQlyYyA9IC1FTk9UU1VQUDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVycm9yOgotCXJl dHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGFuZWxfYmxfdW5yZWdpc3RlcihzdHJ1Y3Qg ZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfYmFja2xpZ2h0 X2NvbmZpZyAqYmwgPSAmcGFuZWwtPmJsX2NvbmZpZzsKLQotCXN3aXRjaCAoYmwtPnR5cGUpIHsK LQljYXNlIERTSV9CQUNLTElHSFRfV0xFRDoKLQkJbGVkX3RyaWdnZXJfdW5yZWdpc3Rlcl9zaW1w bGUoYmwtPndsZWQpOwotCQlicmVhazsKLQljYXNlIERTSV9CQUNLTElHSFRfRENTOgotCQlicmVh azsKLQlkZWZhdWx0OgotCQlwcl9lcnIoIkJhY2tsaWdodCB0eXBlKCVkKSBub3Qgc3VwcG9ydGVk XG4iLCBibC0+dHlwZSk7Ci0JCXJjID0gLUVOT1RTVVBQOwotCQlnb3RvIGVycm9yOwotCX0KLQot ZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotc3RhdGljIGludCBkc2lfcGFuZWxfcGFyc2VfdGltaW5n KHN0cnVjdCBkc2lfbW9kZV9pbmZvICptb2RlLAotCQkJCSAgc3RydWN0IGRldmljZV9ub2RlICpv Zl9ub2RlKQotewotCWludCByYyA9IDA7Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9m X25vZGUsICJxY29tLG1kc3MtZHNpLXBhbmVsLWZyYW1lcmF0ZSIsCi0JCQkJICAmbW9kZS0+cmVm cmVzaF9yYXRlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcmVhZCBxY29tLG1k c3MtZHNpLXBhbmVsLWZyYW1lcmF0ZSwgcmM9JWRcbiIsCi0JCSAgICAgICByYyk7Ci0JCWdvdG8g ZXJyb3I7Ci0JfQotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxt ZHNzLWRzaS1wYW5lbC13aWR0aCIsCi0JCQkJICAmbW9kZS0+aF9hY3RpdmUpOwotCWlmIChyYykg ewotCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIHFjb20sbWRzcy1kc2ktcGFuZWwtd2lkdGgsIHJj PSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFk X3UzMihvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS1oLWZyb250LXBvcmNoIiwKLQkJCQkgICZtb2Rl LT5oX2Zyb250X3BvcmNoKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcmVhZCBx Y29tLG1kc3MtZHNpLWgtZnJvbnQtcG9yY2gsIHJjPSVkXG4iLAotCQkgICAgICAgcmMpOwotCQln b3RvIGVycm9yOwotCX0KLQotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFj b20sbWRzcy1kc2ktaC1iYWNrLXBvcmNoIiwKLQkJCQkgICZtb2RlLT5oX2JhY2tfcG9yY2gpOwot CWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIHFjb20sbWRzcy1kc2ktaC1iYWNr LXBvcmNoLCByYz0lZFxuIiwKLQkJICAgICAgIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQly YyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJxY29tLG1kc3MtZHNpLWgtcHVsc2Ut d2lkdGgiLAotCQkJCSAgJm1vZGUtPmhfc3luY193aWR0aCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vy cigiZmFpbGVkIHRvIHJlYWQgcWNvbSxtZHNzLWRzaS1oLXB1bHNlLXdpZHRoLCByYz0lZFxuIiwK LQkJICAgICAgIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3Jl YWRfdTMyKG9mX25vZGUsICJxY29tLG1kc3MtZHNpLWgtc3luYy1za2V3IiwKLQkJCQkgICZtb2Rl LT5oX3NrZXcpOwotCWlmIChyYykKLQkJcHJfZXJyKCJxY29tLG1kc3MtZHNpLWgtc3luYy1za2V3 IGlzIG5vdCBkZWZpbmVkLCByYz0lZFxuIiwgcmMpOwotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFk X3UzMihvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS1wYW5lbC1oZWlnaHQiLAotCQkJCSAgJm1vZGUt PnZfYWN0aXZlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcmVhZCBxY29tLG1k c3MtZHNpLXBhbmVsLWhlaWdodCwgcmM9JWRcbiIsCi0JCSAgICAgICByYyk7Ci0JCWdvdG8gZXJy b3I7Ci0JfQotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNz LWRzaS12LWJhY2stcG9yY2giLAotCQkJCSAgJm1vZGUtPnZfYmFja19wb3JjaCk7Ci0JaWYgKHJj KSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHJlYWQgcWNvbSxtZHNzLWRzaS12LWJhY2stcG9yY2gs IHJjPSVkXG4iLAotCQkgICAgICAgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gb2Zf cHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktdi1mcm9udC1wb3JjaCIs Ci0JCQkJICAmbW9kZS0+dl9mcm9udF9wb3JjaCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFp bGVkIHRvIHJlYWQgcWNvbSxtZHNzLWRzaS12LWJhY2stcG9yY2gsIHJjPSVkXG4iLAotCQkgICAg ICAgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIo b2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktdi1wdWxzZS13aWR0aCIsCi0JCQkJICAmbW9kZS0+dl9z eW5jX3dpZHRoKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcmVhZCBxY29tLG1k c3MtZHNpLXYtcHVsc2Utd2lkdGgsIHJjPSVkXG4iLAotCQkgICAgICAgcmMpOwotCQlnb3RvIGVy cm9yOwotCX0KLQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5l bF9wYXJzZV9waXhlbF9mb3JtYXQoc3RydWN0IGRzaV9ob3N0X2NvbW1vbl9jZmcgKmhvc3QsCi0J CQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSwKLQkJCQkJY29uc3QgY2hhciAqbmFtZSkK LXsKLQlpbnQgcmMgPSAwOwotCXUzMiBicHAgPSAwOwotCWVudW0gZHNpX3BpeGVsX2Zvcm1hdCBm bXQ7Ci0JY29uc3QgY2hhciAqcGFja2luZzsKLQotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIo b2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktYnBwIiwgJmJwcCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vy cigiWyVzXSBmYWlsZWQgdG8gcmVhZCBxY29tLG1kc3MtZHNpLWJwcCwgcmM9JWRcbiIsCi0JCSAg ICAgICBuYW1lLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlzd2l0Y2ggKGJwcCkgewotCWNh c2UgMzoKLQkJZm10ID0gRFNJX1BJWEVMX0ZPUk1BVF9SR0IxMTE7Ci0JCWJyZWFrOwotCWNhc2Ug ODoKLQkJZm10ID0gRFNJX1BJWEVMX0ZPUk1BVF9SR0IzMzI7Ci0JCWJyZWFrOwotCWNhc2UgMTI6 Ci0JCWZtdCA9IERTSV9QSVhFTF9GT1JNQVRfUkdCNDQ0OwotCQlicmVhazsKLQljYXNlIDE2Ogot CQlmbXQgPSBEU0lfUElYRUxfRk9STUFUX1JHQjU2NTsKLQkJYnJlYWs7Ci0JY2FzZSAxODoKLQkJ Zm10ID0gRFNJX1BJWEVMX0ZPUk1BVF9SR0I2NjY7Ci0JCWJyZWFrOwotCWNhc2UgMjQ6Ci0JZGVm YXVsdDoKLQkJZm10ID0gRFNJX1BJWEVMX0ZPUk1BVF9SR0I4ODg7Ci0JCWJyZWFrOwotCX0KLQot CWlmIChmbXQgPT0gRFNJX1BJWEVMX0ZPUk1BVF9SR0I2NjYpIHsKLQkJcGFja2luZyA9IG9mX2dl dF9wcm9wZXJ0eShvZl9ub2RlLAotCQkJCQkgICJxY29tLG1kc3MtZHNpLXBpeGVsLXBhY2tpbmci LAotCQkJCQkgIE5VTEwpOwotCQlpZiAocGFja2luZyAmJiAhc3RyY21wKHBhY2tpbmcsICJsb29z ZSIpKQotCQkJZm10ID0gRFNJX1BJWEVMX0ZPUk1BVF9SR0I2NjZfTE9PU0U7Ci0JfQotCi0JaG9z dC0+ZHN0X2Zvcm1hdCA9IGZtdDsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3Bh bmVsX3BhcnNlX2xhbmVfc3RhdGVzKHN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnICpob3N0LAot CQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUsCi0JCQkJICAgICAgIGNvbnN0 IGNoYXIgKm5hbWUpCi17Ci0JaW50IHJjID0gMDsKLQlib29sIGxhbmVfZW5hYmxlZDsKLQotCWxh bmVfZW5hYmxlZCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChvZl9ub2RlLAotCQkJCQkgICAgInFj b20sbWRzcy1kc2ktbGFuZS0wLXN0YXRlIik7Ci0JaG9zdC0+ZGF0YV9sYW5lcyB8PSAobGFuZV9l bmFibGVkID8gRFNJX0RBVEFfTEFORV8wIDogMCk7Ci0KLQlsYW5lX2VuYWJsZWQgPSBvZl9wcm9w ZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJCQkJICAgICAicWNvbSxtZHNzLWRzaS1sYW5lLTEt c3RhdGUiKTsKLQlob3N0LT5kYXRhX2xhbmVzIHw9IChsYW5lX2VuYWJsZWQgPyBEU0lfREFUQV9M QU5FXzEgOiAwKTsKLQotCWxhbmVfZW5hYmxlZCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChvZl9u b2RlLAotCQkJCQkgICAgInFjb20sbWRzcy1kc2ktbGFuZS0yLXN0YXRlIik7Ci0JaG9zdC0+ZGF0 YV9sYW5lcyB8PSAobGFuZV9lbmFibGVkID8gRFNJX0RBVEFfTEFORV8yIDogMCk7Ci0KLQlsYW5l X2VuYWJsZWQgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJCQkJICAgICAicWNv bSxtZHNzLWRzaS1sYW5lLTMtc3RhdGUiKTsKLQlob3N0LT5kYXRhX2xhbmVzIHw9IChsYW5lX2Vu YWJsZWQgPyBEU0lfREFUQV9MQU5FXzMgOiAwKTsKLQotCWlmIChob3N0LT5kYXRhX2xhbmVzID09 IDApIHsKLQkJcHJfZXJyKCJbJXNdIE5vIGRhdGEgbGFuZXMgYXJlIGVuYWJsZWQsIHJjPSVkXG4i LCBuYW1lLCByYyk7Ci0JCXJjID0gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0 YXRpYyBpbnQgZHNpX3BhbmVsX3BhcnNlX2NvbG9yX3N3YXAoc3RydWN0IGRzaV9ob3N0X2NvbW1v bl9jZmcgKmhvc3QsCi0JCQkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlLAotCQkJ CSAgICAgIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JaW50IHJjID0gMDsKLQljb25zdCBjaGFyICpz d2FwX21vZGU7Ci0KLQlzd2FwX21vZGUgPSBvZl9nZXRfcHJvcGVydHkob2Zfbm9kZSwgInFjb20s bWRzcy1kc2ktY29sb3Itb3JkZXIiLCBOVUxMKTsKLQlpZiAoc3dhcF9tb2RlKSB7Ci0JCWlmICgh c3RyY21wKHN3YXBfbW9kZSwgInJnYl9zd2FwX3JnYiIpKSB7Ci0JCQlob3N0LT5zd2FwX21vZGUg PSBEU0lfQ09MT1JfU1dBUF9SR0I7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcChzd2FwX21vZGUsICJy Z2Jfc3dhcF9yYmciKSkgewotCQkJaG9zdC0+c3dhcF9tb2RlID0gRFNJX0NPTE9SX1NXQVBfUkJH OwotCQl9IGVsc2UgaWYgKCFzdHJjbXAoc3dhcF9tb2RlLCAicmdiX3N3YXBfYnJnIikpIHsKLQkJ CWhvc3QtPnN3YXBfbW9kZSA9IERTSV9DT0xPUl9TV0FQX0JSRzsKLQkJfSBlbHNlIGlmICghc3Ry Y21wKHN3YXBfbW9kZSwgInJnYl9zd2FwX2dyYiIpKSB7Ci0JCQlob3N0LT5zd2FwX21vZGUgPSBE U0lfQ09MT1JfU1dBUF9HUkI7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcChzd2FwX21vZGUsICJyZ2Jf c3dhcF9nYnIiKSkgewotCQkJaG9zdC0+c3dhcF9tb2RlID0gRFNJX0NPTE9SX1NXQVBfR0JSOwot CQl9IGVsc2UgewotCQkJcHJfZXJyKCJbJXNdIFVucmVjb2duaXplZCBjb2xvciBvcmRlci0lc1xu IiwKLQkJCSAgICAgICBuYW1lLCBzd2FwX21vZGUpOwotCQkJcmMgPSAtRUlOVkFMOwotCQl9Ci0J fSBlbHNlIHsKLQkJcHJfZGVidWcoIlslc10gRmFsbGluZyBiYWNrIHRvIGRlZmF1bHQgY29sb3Ig b3JkZXJcbiIsIG5hbWUpOwotCQlob3N0LT5zd2FwX21vZGUgPSBEU0lfQ09MT1JfU1dBUF9SR0I7 Ci0JfQotCi0JLyogYml0IHN3YXAgb24gY29sb3IgY2hhbm5lbCBpcyBub3QgZGVmaW5lZCBpbiBk dCAqLwotCWhvc3QtPmJpdF9zd2FwX3JlZCA9IGZhbHNlOwotCWhvc3QtPmJpdF9zd2FwX2dyZWVu ID0gZmFsc2U7Ci0JaG9zdC0+Yml0X3N3YXBfYmx1ZSA9IGZhbHNlOwotCXJldHVybiByYzsKLX0K LQotc3RhdGljIGludCBkc2lfcGFuZWxfcGFyc2VfdHJpZ2dlcnMoc3RydWN0IGRzaV9ob3N0X2Nv bW1vbl9jZmcgKmhvc3QsCi0JCQkJICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSwKLQkJ CQkgICAgY29uc3QgY2hhciAqbmFtZSkKLXsKLQljb25zdCBjaGFyICp0cmlnOwotCWludCByYyA9 IDA7Ci0KLQl0cmlnID0gb2ZfZ2V0X3Byb3BlcnR5KG9mX25vZGUsICJxY29tLG1kc3MtZHNpLW1k cC10cmlnZ2VyIiwgTlVMTCk7Ci0JaWYgKHRyaWcpIHsKLQkJaWYgKCFzdHJjbXAodHJpZywgIm5v bmUiKSkgewotCQkJaG9zdC0+bWRwX2NtZF90cmlnZ2VyID0gRFNJX1RSSUdHRVJfTk9ORTsKLQkJ fSBlbHNlIGlmICghc3RyY21wKHRyaWcsICJ0cmlnZ2VyX3RlIikpIHsKLQkJCWhvc3QtPm1kcF9j bWRfdHJpZ2dlciA9IERTSV9UUklHR0VSX1RFOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAodHJpZywg InRyaWdnZXJfc3ciKSkgewotCQkJaG9zdC0+bWRwX2NtZF90cmlnZ2VyID0gRFNJX1RSSUdHRVJf U1c7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcCh0cmlnLCAidHJpZ2dlcl9zd190ZSIpKSB7Ci0JCQlo b3N0LT5tZHBfY21kX3RyaWdnZXIgPSBEU0lfVFJJR0dFUl9TV19URTsKLQkJfSBlbHNlIHsKLQkJ CXByX2VycigiWyVzXSBVbnJlY29nbml6ZWQgbWRwIHRyaWdnZXIgdHlwZSAoJXMpXG4iLAotCQkJ ICAgICAgIG5hbWUsIHRyaWcpOwotCQkJcmMgPSAtRUlOVkFMOwotCQl9Ci0KLQl9IGVsc2Ugewot CQlwcl9kZWJ1ZygiWyVzXSBGYWxsaW5nIGJhY2sgdG8gZGVmYXVsdCBNRFAgdHJpZ2dlclxuIiwK LQkJCSBuYW1lKTsKLQkJaG9zdC0+bWRwX2NtZF90cmlnZ2VyID0gRFNJX1RSSUdHRVJfU1c7Ci0J fQotCi0JdHJpZyA9IG9mX2dldF9wcm9wZXJ0eShvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS1kbWEt dHJpZ2dlciIsIE5VTEwpOwotCWlmICh0cmlnKSB7Ci0JCWlmICghc3RyY21wKHRyaWcsICJub25l IikpIHsKLQkJCWhvc3QtPmRtYV9jbWRfdHJpZ2dlciA9IERTSV9UUklHR0VSX05PTkU7Ci0JCX0g ZWxzZSBpZiAoIXN0cmNtcCh0cmlnLCAidHJpZ2dlcl90ZSIpKSB7Ci0JCQlob3N0LT5kbWFfY21k X3RyaWdnZXIgPSBEU0lfVFJJR0dFUl9URTsKLQkJfSBlbHNlIGlmICghc3RyY21wKHRyaWcsICJ0 cmlnZ2VyX3N3IikpIHsKLQkJCWhvc3QtPmRtYV9jbWRfdHJpZ2dlciA9IERTSV9UUklHR0VSX1NX OwotCQl9IGVsc2UgaWYgKCFzdHJjbXAodHJpZywgInRyaWdnZXJfc3dfc2VvZiIpKSB7Ci0JCQlo b3N0LT5kbWFfY21kX3RyaWdnZXIgPSBEU0lfVFJJR0dFUl9TV19TRU9GOwotCQl9IGVsc2UgaWYg KCFzdHJjbXAodHJpZywgInRyaWdnZXJfc3dfdGUiKSkgewotCQkJaG9zdC0+ZG1hX2NtZF90cmln Z2VyID0gRFNJX1RSSUdHRVJfU1dfVEU7Ci0JCX0gZWxzZSB7Ci0JCQlwcl9lcnIoIlslc10gVW5y ZWNvZ25pemVkIG1kcCB0cmlnZ2VyIHR5cGUgKCVzKVxuIiwKLQkJCSAgICAgICBuYW1lLCB0cmln KTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJfQotCi0JfSBlbHNlIHsKLQkJcHJfZGVidWcoIlslc10g RmFsbGluZyBiYWNrIHRvIGRlZmF1bHQgTURQIHRyaWdnZXJcbiIsIG5hbWUpOwotCQlob3N0LT5k bWFfY21kX3RyaWdnZXIgPSBEU0lfVFJJR0dFUl9TVzsKLQl9Ci0KLQlyYyA9IG9mX3Byb3BlcnR5 X3JlYWRfdTMyKG9mX25vZGUsICJxY29tLG1kc3MtZHNpLXRlLXBpbi1zZWxlY3QiLAotCQkJJmhv c3QtPnRlX21vZGUpOwotCWlmIChyYykgewotCQlwcl93YXJuKCJbJXNdIGZhbGxiYWNrIHRvIGRl ZmF1bHQgdGUtcGluLXNlbGVjdFxuIiwgbmFtZSk7Ci0JCWhvc3QtPnRlX21vZGUgPSAxOwotCQly YyA9IDA7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJz ZV9taXNjX2hvc3RfY29uZmlnKHN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnICpob3N0LAotCQkJ CQkgICAgc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlLAotCQkJCQkgICAgY29uc3QgY2hhciAq bmFtZSkKLXsKLQl1MzIgdmFsID0gMDsKLQlpbnQgcmMgPSAwOwotCi0JcmMgPSBvZl9wcm9wZXJ0 eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS10LWNsay1wb3N0IiwgJnZhbCk7Ci0J aWYgKHJjKSB7Ci0JCXByX2RlYnVnKCJbJXNdIEZhbGxiYWNrIHRvIGRlZmF1bHQgdF9jbGtfcG9z dCB2YWx1ZVxuIiwgbmFtZSk7Ci0JCWhvc3QtPnRfY2xrX3Bvc3QgPSAweDAzOwotCX0gZWxzZSB7 Ci0JCWhvc3QtPnRfY2xrX3Bvc3QgPSB2YWw7Ci0JCXByX2RlYnVnKCJbJXNdIHRfY2xrX3Bvc3Qg PSAlZFxuIiwgbmFtZSwgdmFsKTsKLQl9Ci0KLQl2YWwgPSAwOwotCXJjID0gb2ZfcHJvcGVydHlf cmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktdC1jbGstcHJlIiwgJnZhbCk7Ci0JaWYg KHJjKSB7Ci0JCXByX2RlYnVnKCJbJXNdIEZhbGxiYWNrIHRvIGRlZmF1bHQgdF9jbGtfcHJlIHZh bHVlXG4iLCBuYW1lKTsKLQkJaG9zdC0+dF9jbGtfcHJlID0gMHgyNDsKLQl9IGVsc2UgewotCQlo b3N0LT50X2Nsa19wcmUgPSB2YWw7Ci0JCXByX2RlYnVnKCJbJXNdIHRfY2xrX3ByZSA9ICVkXG4i LCBuYW1lLCB2YWwpOwotCX0KLQotCWhvc3QtPmlnbm9yZV9yeF9lb3QgPSBvZl9wcm9wZXJ0eV9y ZWFkX2Jvb2wob2Zfbm9kZSwKLQkJCQkJCSJxY29tLG1kc3MtZHNpLXJ4LWVvdC1pZ25vcmUiKTsK LQotCWhvc3QtPmFwcGVuZF90eF9lb3QgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwK LQkJCQkJCSJxY29tLG1kc3MtZHNpLXR4LWVvdC1hcHBlbmQiKTsKLQotCXJldHVybiAwOwotfQot Ci1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9ob3N0X2NvbmZpZyhzdHJ1Y3QgZHNpX3BhbmVs ICpwYW5lbCwKLQkJCQkgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlKQotewotCWlu dCByYyA9IDA7Ci0KLQlyYyA9IGRzaV9wYW5lbF9wYXJzZV9waXhlbF9mb3JtYXQoJnBhbmVsLT5o b3N0X2NvbmZpZywgb2Zfbm9kZSwKLQkJCQkJICBwYW5lbC0+bmFtZSk7Ci0JaWYgKHJjKSB7Ci0J CXByX2VycigiWyVzXSBmYWlsZWQgdG8gZ2V0IHBpeGVsIGZvcm1hdCwgcmM9JWRcbiIsCi0JCXBh bmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBkc2lfcGFuZWxfcGFy c2VfbGFuZV9zdGF0ZXMoJnBhbmVsLT5ob3N0X2NvbmZpZywgb2Zfbm9kZSwKLQkJCQkJIHBhbmVs LT5uYW1lKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBwYXJzZSBsYW5l IHN0YXRlcywgcmM9JWRcbiIsCi0JCSAgICAgICBwYW5lbC0+bmFtZSwgcmMpOwotCQlnb3RvIGVy cm9yOwotCX0KLQotCXJjID0gZHNpX3BhbmVsX3BhcnNlX2NvbG9yX3N3YXAoJnBhbmVsLT5ob3N0 X2NvbmZpZywgb2Zfbm9kZSwKLQkJCQkJcGFuZWwtPm5hbWUpOwotCWlmIChyYykgewotCQlwcl9l cnIoIlslc10gZmFpbGVkIHRvIHBhcnNlIGNvbG9yIHN3YXAgY29uZmlnLCByYz0lZFxuIiwKLQkJ ICAgICAgIHBhbmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBkc2lf cGFuZWxfcGFyc2VfdHJpZ2dlcnMoJnBhbmVsLT5ob3N0X2NvbmZpZywgb2Zfbm9kZSwKLQkJCQkg ICAgICBwYW5lbC0+bmFtZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8g cGFyc2UgdHJpZ2dlcnMsIHJjPSVkXG4iLAotCQkgICAgICAgcGFuZWwtPm5hbWUsIHJjKTsKLQkJ Z290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF9wYXJzZV9taXNjX2hvc3RfY29uZmln KCZwYW5lbC0+aG9zdF9jb25maWcsIG9mX25vZGUsCi0JCQkJCSAgICAgIHBhbmVsLT5uYW1lKTsK LQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBwYXJzZSBtaXNjIGhvc3QgY29u ZmlnLCByYz0lZFxuIiwKLQkJICAgICAgIHBhbmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7 Ci0JfQotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX3Bh cnNlX2RmcHNfY2FwcyhzdHJ1Y3QgZHNpX2RmcHNfY2FwYWJpbGl0aWVzICpkZnBzX2NhcHMsCi0J CQkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUsCi0JCQkJICAgICBjb25zdCBjaGFy ICpuYW1lKQotewotCWludCByYyA9IDA7Ci0JYm9vbCBzdXBwb3J0ZWQgPSBmYWxzZTsKLQljb25z dCBjaGFyICp0eXBlOwotCXUzMiB2YWwgPSAwOwotCi0Jc3VwcG9ydGVkID0gb2ZfcHJvcGVydHlf cmVhZF9ib29sKG9mX25vZGUsCi0JCQkJCSJxY29tLG1kc3MtZHNpLXBhbi1lbmFibGUtZHluYW1p Yy1mcHMiKTsKLQotCWlmICghc3VwcG9ydGVkKSB7Ci0JCXByX2RlYnVnKCJbJXNdIERGUFMgaXMg bm90IHN1cHBvcnRlZFxuIiwgbmFtZSk7Ci0JCWRmcHNfY2Fwcy0+ZGZwc19zdXBwb3J0ID0gZmFs c2U7Ci0JfSBlbHNlIHsKLQotCQl0eXBlID0gb2ZfZ2V0X3Byb3BlcnR5KG9mX25vZGUsCi0JCQkJ ICAgICAgICJxY29tLG1kc3MtZHNpLXBhbi1mcHMtdXBkYXRlIiwKLQkJCQkgICAgICAgTlVMTCk7 Ci0JCWlmICghdHlwZSkgewotCQkJcHJfZXJyKCJbJXNdIGRmcHMgdHlwZSBub3QgZGVmaW5lZFxu IiwgbmFtZSk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVycm9yOwotCQl9IGVsc2UgaWYg KCFzdHJjbXAodHlwZSwgImRmcHNfc3VzcGVuZF9yZXN1bWVfbW9kZSIpKSB7Ci0JCQlkZnBzX2Nh cHMtPnR5cGUgPSBEU0lfREZQU19TVVNQRU5EX1JFU1VNRTsKLQkJfSBlbHNlIGlmICghc3RyY21w KHR5cGUsICJkZnBzX2ltbWVkaWF0ZV9jbGtfbW9kZSIpKSB7Ci0JCQlkZnBzX2NhcHMtPnR5cGUg PSBEU0lfREZQU19JTU1FRElBVEVfQ0xLOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAodHlwZSwgImRm cHNfaW1tZWRpYXRlX3BvcmNoX21vZGVfaGZwIikpIHsKLQkJCWRmcHNfY2Fwcy0+dHlwZSA9IERT SV9ERlBTX0lNTUVESUFURV9IRlA7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcCh0eXBlLCAiZGZwc19p bW1lZGlhdGVfcG9yY2hfbW9kZV92ZnAiKSkgewotCQkJZGZwc19jYXBzLT50eXBlID0gRFNJX0RG UFNfSU1NRURJQVRFX1ZGUDsKLQkJfSBlbHNlIHsKLQkJCXByX2VycigiWyVzXSBkZnBzIHR5cGUg aXMgbm90IHJlY29nbml6ZWRcbiIsIG5hbWUpOwotCQkJcmMgPSAtRUlOVkFMOwotCQkJZ290byBl cnJvcjsKLQkJfQotCi0JCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwKLQkJCQkJ ICAicWNvbSxtZHNzLWRzaS1taW4tcmVmcmVzaC1yYXRlIiwKLQkJCQkJICAmdmFsKTsKLQkJaWYg KHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gTWluIHJlZnJlc2ggcmF0ZSBpcyBub3QgZGVmaW5lZFxu IiwgbmFtZSk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JCWRmcHNf Y2Fwcy0+bWluX3JlZnJlc2hfcmF0ZSA9IHZhbDsKLQotCQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRf dTMyKG9mX25vZGUsCi0JCQkJCSAgInFjb20sbWRzcy1kc2ktbWF4LXJlZnJlc2gtcmF0ZSIsCi0J CQkJCSAgJnZhbCk7Ci0JCWlmIChyYykgewotCQkJcHJfZGVidWcoIlslc10gVXNpbmcgZGVmYXVs dCByZWZyZXNoIHJhdGVcbiIsIG5hbWUpOwotCQkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihv Zl9ub2RlLAotCQkJCQkJInFjb20sbWRzcy1kc2ktcGFuZWwtZnJhbWVyYXRlIiwKLQkJCQkJCSZ2 YWwpOwotCQkJaWYgKHJjKSB7Ci0JCQkJcHJfZXJyKCJbJXNdIG1heCByZWZyZXNoIHJhdGUgaXMg bm90IGRlZmluZWRcbiIsCi0JCQkJICAgICAgIG5hbWUpOwotCQkJCXJjID0gLUVJTlZBTDsKLQkJ CQlnb3RvIGVycm9yOwotCQkJfQotCQl9Ci0JCWRmcHNfY2Fwcy0+bWF4X3JlZnJlc2hfcmF0ZSA9 IHZhbDsKLQotCQlpZiAoZGZwc19jYXBzLT5taW5fcmVmcmVzaF9yYXRlID4gZGZwc19jYXBzLT5t YXhfcmVmcmVzaF9yYXRlKSB7Ci0JCQlwcl9lcnIoIlslc10gbWluIHJhdGUgPiBtYXggcmF0ZVxu IiwgbmFtZSk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCX0KLQotCQlwcl9kZWJ1ZygiWyVzXSBERlBT IGlzIHN1cHBvcnRlZCAlZC0lZCwgbW9kZSAlZFxuIiwgbmFtZSwKLQkJCQlkZnBzX2NhcHMtPm1p bl9yZWZyZXNoX3JhdGUsCi0JCQkJZGZwc19jYXBzLT5tYXhfcmVmcmVzaF9yYXRlLAotCQkJCWRm cHNfY2Fwcy0+dHlwZSk7Ci0JCWRmcHNfY2Fwcy0+ZGZwc19zdXBwb3J0ID0gdHJ1ZTsKLQl9Ci0K LWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGFuZWxfcGFyc2Vfdmlk ZW9faG9zdF9jb25maWcoc3RydWN0IGRzaV92aWRlb19lbmdpbmVfY2ZnICpjZmcsCi0JCQkJCSAg ICAgc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlLAotCQkJCQkgICAgIGNvbnN0IGNoYXIgKm5h bWUpCi17Ci0JaW50IHJjID0gMDsKLQljb25zdCBjaGFyICp0cmFmZmljX21vZGU7Ci0JdTMyIHZj X2lkID0gMDsKLQl1MzIgdmFsID0gMDsKLQotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zf bm9kZSwgInFjb20sbWRzcy1kc2ktaC1zeW5jLXB1bHNlIiwgJnZhbCk7Ci0JaWYgKHJjKSB7Ci0J CXByX2RlYnVnKCJbJXNdIGZhbGxiYWNrIHRvIGRlZmF1bHQgaC1zeW5jLXB1bHNlXG4iLCBuYW1l KTsKLQkJY2ZnLT5wdWxzZV9tb2RlX2hzYV9oZSA9IGZhbHNlOwotCX0gZWxzZSBpZiAodmFsID09 IDEpIHsKLQkJY2ZnLT5wdWxzZV9tb2RlX2hzYV9oZSA9IHRydWU7Ci0JfSBlbHNlIGlmICh2YWwg PT0gMCkgewotCQljZmctPnB1bHNlX21vZGVfaHNhX2hlID0gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJ cHJfZXJyKCJbJXNdIFVucmVjb2duaXplZCB2YWx1ZSBmb3IgbWRzcy1kc2ktaC1zeW5jLXB1bHNl XG4iLAotCQkgICAgICAgbmFtZSk7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9 Ci0KLQljZmctPmhmcF9scDExX2VuID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG9mX25vZGUsCi0J CQkJCQkicWNvbSxtZHNzLWRzaS1oZnAtcG93ZXItbW9kZSIpOwotCi0JY2ZnLT5oYnBfbHAxMV9l biA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChvZl9ub2RlLAotCQkJCQkJInFjb20sbWRzcy1kc2kt aGJwLXBvd2VyLW1vZGUiKTsKLQotCWNmZy0+aHNhX2xwMTFfZW4gPSBvZl9wcm9wZXJ0eV9yZWFk X2Jvb2wob2Zfbm9kZSwKLQkJCQkJCSJxY29tLG1kc3MtZHNpLWhzYS1wb3dlci1tb2RlIik7Ci0K LQljZmctPmxhc3RfbGluZV9pbnRlcmxlYXZlX2VuID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG9m X25vZGUsCi0JCQkJCSJxY29tLG1kc3MtZHNpLWxhc3QtbGluZS1pbnRlcmxlYXZlIik7Ci0KLQlj ZmctPmVvZl9ibGxwX2xwMTFfZW4gPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJ CQkJInFjb20sbWRzcy1kc2ktYmxscC1lb2YtcG93ZXItbW9kZSIpOwotCi0JY2ZnLT5ibGxwX2xw MTFfZW4gPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJCQkJInFjb20sbWRzcy1k c2ktYmxscC1wb3dlci1tb2RlIik7Ci0KLQl0cmFmZmljX21vZGUgPSBvZl9nZXRfcHJvcGVydHko b2Zfbm9kZSwKLQkJCQkgICAgICAgInFjb20sbWRzcy1kc2ktdHJhZmZpYy1tb2RlIiwKLQkJCQkg ICAgICAgTlVMTCk7Ci0JaWYgKCF0cmFmZmljX21vZGUpIHsKLQkJcHJfZGVidWcoIlslc10gRmFs bGluZyBiYWNrIHRvIGRlZmF1bHQgdHJhZmZpYyBtb2RlXG4iLCBuYW1lKTsKLQkJY2ZnLT50cmFm ZmljX21vZGUgPSBEU0lfVklERU9fVFJBRkZJQ19TWU5DX1BVTFNFUzsKLQl9IGVsc2UgaWYgKCFz dHJjbXAodHJhZmZpY19tb2RlLCAibm9uX2J1cnN0X3N5bmNfcHVsc2UiKSkgewotCQljZmctPnRy YWZmaWNfbW9kZSA9IERTSV9WSURFT19UUkFGRklDX1NZTkNfUFVMU0VTOwotCX0gZWxzZSBpZiAo IXN0cmNtcCh0cmFmZmljX21vZGUsICJub25fYnVyc3Rfc3luY19ldmVudCIpKSB7Ci0JCWNmZy0+ dHJhZmZpY19tb2RlID0gRFNJX1ZJREVPX1RSQUZGSUNfU1lOQ19TVEFSVF9FVkVOVFM7Ci0JfSBl bHNlIGlmICghc3RyY21wKHRyYWZmaWNfbW9kZSwgImJ1cnN0X21vZGUiKSkgewotCQljZmctPnRy YWZmaWNfbW9kZSA9IERTSV9WSURFT19UUkFGRklDX0JVUlNUX01PREU7Ci0JfSBlbHNlIHsKLQkJ cHJfZXJyKCJbJXNdIFVucmVjb2duaXplZCB0cmFmZmljIG1vZGUtJXNcbiIsIG5hbWUsCi0JCSAg ICAgICB0cmFmZmljX21vZGUpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQot Ci0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS12aXJ0 dWFsLWNoYW5uZWwtaWQiLAotCQkJCSAgJnZjX2lkKTsKLQlpZiAocmMpIHsKLQkJcHJfZGVidWco Ilslc10gRmFsbGJhY2sgdG8gZGVmYXVsdCB2YyBpZFxuIiwgbmFtZSk7Ci0JCWNmZy0+dmNfaWQg PSAwOwotCX0gZWxzZSB7Ci0JCWNmZy0+dmNfaWQgPSB2Y19pZDsKLQl9Ci0KLWVycm9yOgotCXJl dHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGFuZWxfcGFyc2VfY21kX2hvc3RfY29uZmln KHN0cnVjdCBkc2lfY21kX2VuZ2luZV9jZmcgKmNmZywKLQkJCQkJICAgc3RydWN0IGRldmljZV9u b2RlICpvZl9ub2RlLAotCQkJCQkgICBjb25zdCBjaGFyICpuYW1lKQotewotCXUzMiB2YWwgPSAw OwotCWludCByYyA9IDA7Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJx Y29tLG1kc3MtZHNpLXdyLW1lbS1zdGFydCIsICZ2YWwpOwotCWlmIChyYykgewotCQlwcl9kZWJ1 ZygiWyVzXSBGYWxsYmFjayB0byBkZWZhdWx0IHdyLW1lbS1zdGFydFxuIiwgbmFtZSk7Ci0JCWNm Zy0+d3JfbWVtX3N0YXJ0ID0gMHgyQzsKLQl9IGVsc2UgewotCQljZmctPndyX21lbV9zdGFydCA9 IHZhbDsKLQl9Ci0KLQl2YWwgPSAwOwotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9k ZSwgInFjb20sbWRzcy1kc2ktd3ItbWVtLWNvbnRpbnVlIiwKLQkJCQkgICZ2YWwpOwotCWlmIChy YykgewotCQlwcl9kZWJ1ZygiWyVzXSBGYWxsYmFjayB0byBkZWZhdWx0IHdyLW1lbS1jb250aW51 ZVxuIiwgbmFtZSk7Ci0JCWNmZy0+d3JfbWVtX2NvbnRpbnVlID0gMHgzQzsKLQl9IGVsc2Ugewot CQljZmctPndyX21lbV9jb250aW51ZSA9IHZhbDsKLQl9Ci0KLQkvKiBUT0RPOiAgZml4IGZvbGxv d2luZyAqLwotCWNmZy0+bWF4X2NtZF9wYWNrZXRzX2ludGVybGVhdmUgPSAwOwotCi0JdmFsID0g MDsKLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJxY29tLG1kc3MtZHNpLXRl LWRjcy1jb21tYW5kIiwKLQkJCQkgICZ2YWwpOwotCWlmIChyYykgewotCQlwcl9kZWJ1ZygiWyVz XSBmYWxsYmFjayB0byBkZWZhdWx0IHRlLWRjcy1jbWRcbiIsIG5hbWUpOwotCQljZmctPmluc2Vy dF9kY3NfY29tbWFuZCA9IHRydWU7Ci0JfSBlbHNlIGlmICh2YWwgPT0gMSkgewotCQljZmctPmlu c2VydF9kY3NfY29tbWFuZCA9IHRydWU7Ci0JfSBlbHNlIGlmICh2YWwgPT0gMCkgewotCQljZmct Pmluc2VydF9kY3NfY29tbWFuZCA9IGZhbHNlOwotCX0gZWxzZSB7Ci0JCXByX2VycigiWyVzXSBV bnJlY29nbml6ZWQgdmFsdWUgZm9yIG1kc3MtZHNpLXRlLWRjcy1jb21tYW5kXG4iLAotCQkgICAg ICAgbmFtZSk7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAob2Zf cHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1tZHAtdHJhbnNmZXItdGltZS11 cyIsCi0JCQkJJnZhbCkpIHsKLQkJcHJfZGVidWcoIlslc10gRmFsbGJhY2sgdG8gZGVmYXVsdCB0 cmFuc2Zlci10aW1lLXVzXG4iLCBuYW1lKTsKLQkJY2ZnLT5tZHBfdHJhbnNmZXJfdGltZV91cyA9 IERFRkFVTFRfTURQX1RSQU5TRkVSX1RJTUU7Ci0JfSBlbHNlIHsKLQkJY2ZnLT5tZHBfdHJhbnNm ZXJfdGltZV91cyA9IHZhbDsKLQl9Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGlj IGludCBkc2lfcGFuZWxfcGFyc2VfcGFuZWxfbW9kZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwK LQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpCi17Ci0JaW50IHJjID0gMDsK LQllbnVtIGRzaV9vcF9tb2RlIHBhbmVsX21vZGU7Ci0JY29uc3QgY2hhciAqbW9kZTsKLQotCW1v ZGUgPSBvZl9nZXRfcHJvcGVydHkob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktcGFuZWwtdHlwZSIs IE5VTEwpOwotCWlmICghbW9kZSkgewotCQlwcl9kZWJ1ZygiWyVzXSBGYWxsYmFjayB0byBkZWZh dWx0IHBhbmVsIG1vZGVcbiIsIHBhbmVsLT5uYW1lKTsKLQkJcGFuZWxfbW9kZSA9IERTSV9PUF9W SURFT19NT0RFOwotCX0gZWxzZSBpZiAoIXN0cmNtcChtb2RlLCAiZHNpX3ZpZGVvX21vZGUiKSkg ewotCQlwYW5lbF9tb2RlID0gRFNJX09QX1ZJREVPX01PREU7Ci0JfSBlbHNlIGlmICghc3RyY21w KG1vZGUsICJkc2lfY21kX21vZGUiKSkgewotCQlwYW5lbF9tb2RlID0gRFNJX09QX0NNRF9NT0RF OwotCX0gZWxzZSB7Ci0JCXByX2VycigiWyVzXSBVbnJlY29nbml6ZWQgcGFuZWwgdHlwZS0lc1xu IiwgcGFuZWwtPm5hbWUsIG1vZGUpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0J fQotCi0JaWYgKHBhbmVsX21vZGUgPT0gRFNJX09QX1ZJREVPX01PREUpIHsKLQkJcmMgPSBkc2lf cGFuZWxfcGFyc2VfdmlkZW9faG9zdF9jb25maWcoJnBhbmVsLT52aWRlb19jb25maWcsCi0JCQkJ CQkgICAgICAgb2Zfbm9kZSwKLQkJCQkJCSAgICAgICBwYW5lbC0+bmFtZSk7Ci0JCWlmIChyYykg ewotCQkJcHJfZXJyKCJbJXNdIEZhaWxlZCB0byBwYXJzZSB2aWRlbyBob3N0IGNmZywgcmM9JWRc biIsCi0JCQkgICAgICAgcGFuZWwtPm5hbWUsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9 Ci0KLQlpZiAocGFuZWxfbW9kZSA9PSBEU0lfT1BfQ01EX01PREUpIHsKLQkJcmMgPSBkc2lfcGFu ZWxfcGFyc2VfY21kX2hvc3RfY29uZmlnKCZwYW5lbC0+Y21kX2NvbmZpZywKLQkJCQkJCSAgICAg b2Zfbm9kZSwKLQkJCQkJCSAgICAgcGFuZWwtPm5hbWUpOwotCQlpZiAocmMpIHsKLQkJCXByX2Vy cigiWyVzXSBGYWlsZWQgdG8gcGFyc2UgY21kIGhvc3QgY29uZmlnLCByYz0lZFxuIiwKLQkJCSAg ICAgICBwYW5lbC0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0KLQotCXBhbmVs LT5wYW5lbF9tb2RlID0gcGFuZWxfbW9kZTsKLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3Rh dGljIGludCBkc2lfcGFuZWxfcGFyc2VfcGh5X3Byb3BzKHN0cnVjdCBkc2lfcGFuZWxfcGh5X3By b3BzICpwcm9wcywKLQkJCQkgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSwKLQkJCQkg ICAgIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JaW50IHJjID0gMDsKLQl1MzIgdmFsID0gMDsKLQlj b25zdCBjaGFyICpzdHI7Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsCi0J CQkJICAicWNvbSxtZHNzLXBhbi1waHlzaWNhbC13aWR0aC1kaW1lbnNpb24iLAotCQkJCSAgJnZh bCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2RlYnVnKCJbJXNdIFBoeXNpY2FsIHBhbmVsIHdpZHRoIGlz IG5vdCBkZWZpbmVkXG4iLCBuYW1lKTsKLQkJcHJvcHMtPnBhbmVsX3dpZHRoX21tID0gMDsKLQkJ cmMgPSAwOwotCX0gZWxzZSB7Ci0JCXByb3BzLT5wYW5lbF93aWR0aF9tbSA9IHZhbDsKLQl9Ci0K LQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsCi0JCQkJICAicWNvbSxtZHNzLXBh bi1waHlzaWNhbC1oZWlnaHQtZGltZW5zaW9uIiwKLQkJCQkgICZ2YWwpOwotCWlmIChyYykgewot CQlwcl9kZWJ1ZygiWyVzXSBQaHlzaWNhbCBwYW5lbCBoZWlnaHQgaXMgbm90IGRlZmluZWRcbiIs IG5hbWUpOwotCQlwcm9wcy0+cGFuZWxfaGVpZ2h0X21tID0gMDsKLQkJcmMgPSAwOwotCX0gZWxz ZSB7Ci0JCXByb3BzLT5wYW5lbF9oZWlnaHRfbW0gPSB2YWw7Ci0JfQotCi0Jc3RyID0gb2ZfZ2V0 X3Byb3BlcnR5KG9mX25vZGUsICJxY29tLG1kc3MtZHNpLXBhbmVsLW9yaWVudGF0aW9uIiwgTlVM TCk7Ci0JaWYgKCFzdHIpIHsKLQkJcHJvcHMtPnJvdGF0aW9uID0gRFNJX1BBTkVMX1JPVEFURV9O T05FOwotCX0gZWxzZSBpZiAoIXN0cmNtcChzdHIsICIxODAiKSkgewotCQlwcm9wcy0+cm90YXRp b24gPSBEU0lfUEFORUxfUk9UQVRFX0hWX0ZMSVA7Ci0JfSBlbHNlIGlmICghc3RyY21wKHN0ciwg ImhmbGlwIikpIHsKLQkJcHJvcHMtPnJvdGF0aW9uID0gRFNJX1BBTkVMX1JPVEFURV9IX0ZMSVA7 Ci0JfSBlbHNlIGlmICghc3RyY21wKHN0ciwgInZmbGlwIikpIHsKLQkJcHJvcHMtPnJvdGF0aW9u ID0gRFNJX1BBTkVMX1JPVEFURV9WX0ZMSVA7Ci0JfSBlbHNlIHsKLQkJcHJfZXJyKCJbJXNdIFVu cmVjb2duaXplZCBwYW5lbCByb3RhdGlvbi0lc1xuIiwgbmFtZSwgc3RyKTsKLQkJcmMgPSAtRUlO VkFMOwotCQlnb3RvIGVycm9yOwotCX0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLWNvbnN0IGNo YXIgKmNtZF9zZXRfcHJvcF9tYXBbRFNJX0NNRF9TRVRfTUFYXSA9IHsKLQkicWNvbSxtZHNzLWRz aS1wcmUtb24tY29tbWFuZCIsCi0JInFjb20sbWRzcy1kc2ktb24tY29tbWFuZCIsCi0JInFjb20s bWRzcy1kc2ktcG9zdC1wYW5lbC1vbi1jb21tYW5kIiwKLQkicWNvbSxtZHNzLWRzaS1wcmUtb2Zm LWNvbW1hbmQiLAotCSJxY29tLG1kc3MtZHNpLW9mZi1jb21tYW5kIiwKLQkicWNvbSxtZHNzLWRz aS1wb3N0LW9mZi1jb21tYW5kIiwKLQkicWNvbSxtZHNzLWRzaS1wcmUtcmVzLXN3aXRjaCIsCi0J InFjb20sbWRzcy1kc2ktcmVzLXN3aXRjaCIsCi0JInFjb20sbWRzcy1kc2ktcG9zdC1yZXMtc3dp dGNoIiwKLQkicWNvbSxjbWQtdG8tdmlkZW8tbW9kZS1zd2l0Y2gtY29tbWFuZHMiLAotCSJxY29t LGNtZC10by12aWRlby1tb2RlLXBvc3Qtc3dpdGNoLWNvbW1hbmRzIiwKLQkicWNvbSx2aWRlby10 by1jbWQtbW9kZS1zd2l0Y2gtY29tbWFuZHMiLAotCSJxY29tLHZpZGVvLXRvLWNtZC1tb2RlLXBv c3Qtc3dpdGNoLWNvbW1hbmRzIiwKLQkicWNvbSxtZHNzLWRzaS1wYW5lbC1zdGF0dXMtY29tbWFu ZCIsCi0JInFjb20sbWRzcy1kc2ktbHAxLWNvbW1hbmQiLAotCSJxY29tLG1kc3MtZHNpLWxwMi1j b21tYW5kIiwKLQkicWNvbSxtZHNzLWRzaS1ub2xwLWNvbW1hbmQiLAotCSJQUFMgbm90IHBhcnNl ZCBmcm9tIERUU0ksIGdlbmVyYXRlZCBkeW5hbWljYWxseSIsCi0JInFjb20sbWRzcy1kc2ktdGlt aW5nLXN3aXRjaC1jb21tYW5kIiwKLQkicWNvbSxtZHNzLWRzaS1wb3N0LW1vZGUtc3dpdGNoLW9u LWNvbW1hbmQiLAotfTsKLQotY29uc3QgY2hhciAqY21kX3NldF9zdGF0ZV9tYXBbRFNJX0NNRF9T RVRfTUFYXSA9IHsKLQkicWNvbSxtZHNzLWRzaS1wcmUtb24tY29tbWFuZC1zdGF0ZSIsCi0JInFj b20sbWRzcy1kc2ktb24tY29tbWFuZC1zdGF0ZSIsCi0JInFjb20sbWRzcy1kc2ktcG9zdC1vbi1j b21tYW5kLXN0YXRlIiwKLQkicWNvbSxtZHNzLWRzaS1wcmUtb2ZmLWNvbW1hbmQtc3RhdGUiLAot CSJxY29tLG1kc3MtZHNpLW9mZi1jb21tYW5kLXN0YXRlIiwKLQkicWNvbSxtZHNzLWRzaS1wb3N0 LW9mZi1jb21tYW5kLXN0YXRlIiwKLQkicWNvbSxtZHNzLWRzaS1wcmUtcmVzLXN3aXRjaC1zdGF0 ZSIsCi0JInFjb20sbWRzcy1kc2ktcmVzLXN3aXRjaC1zdGF0ZSIsCi0JInFjb20sbWRzcy1kc2kt cG9zdC1yZXMtc3dpdGNoLXN0YXRlIiwKLQkicWNvbSxjbWQtdG8tdmlkZW8tbW9kZS1zd2l0Y2gt Y29tbWFuZHMtc3RhdGUiLAotCSJxY29tLGNtZC10by12aWRlby1tb2RlLXBvc3Qtc3dpdGNoLWNv bW1hbmRzLXN0YXRlIiwKLQkicWNvbSx2aWRlby10by1jbWQtbW9kZS1zd2l0Y2gtY29tbWFuZHMt c3RhdGUiLAotCSJxY29tLHZpZGVvLXRvLWNtZC1tb2RlLXBvc3Qtc3dpdGNoLWNvbW1hbmRzLXN0 YXRlIiwKLQkicWNvbSxtZHNzLWRzaS1wYW5lbC1zdGF0dXMtY29tbWFuZC1zdGF0ZSIsCi0JInFj b20sbWRzcy1kc2ktbHAxLWNvbW1hbmQtc3RhdGUiLAotCSJxY29tLG1kc3MtZHNpLWxwMi1jb21t YW5kLXN0YXRlIiwKLQkicWNvbSxtZHNzLWRzaS1ub2xwLWNvbW1hbmQtc3RhdGUiLAotCSJQUFMg bm90IHBhcnNlZCBmcm9tIERUU0ksIGdlbmVyYXRlZCBkeW5hbWljYWxseSIsCi0JInFjb20sbWRz cy1kc2ktdGltaW5nLXN3aXRjaC1jb21tYW5kLXN0YXRlIiwKLQkicWNvbSxtZHNzLWRzaS1wb3N0 LW1vZGUtc3dpdGNoLW9uLWNvbW1hbmQtc3RhdGUiLAotfTsKLQotc3RhdGljIGludCBkc2lfcGFu ZWxfZ2V0X2NtZF9wa3RfY291bnQoY29uc3QgY2hhciAqZGF0YSwgdTMyIGxlbmd0aCwgdTMyICpj bnQpCi17Ci0JY29uc3QgdTMyIGNtZF9zZXRfbWluX3NpemUgPSA3OwotCXUzMiBjb3VudCA9IDA7 Ci0JdTMyIHBhY2tldF9sZW5ndGg7Ci0JdTMyIHRtcDsKLQotCXdoaWxlIChsZW5ndGggPj0gY21k X3NldF9taW5fc2l6ZSkgewotCQlwYWNrZXRfbGVuZ3RoID0gY21kX3NldF9taW5fc2l6ZTsKLQkJ dG1wID0gKChkYXRhWzVdIDw8IDgpIHwgKGRhdGFbNl0pKTsKLQkJcGFja2V0X2xlbmd0aCArPSB0 bXA7Ci0JCWlmIChwYWNrZXRfbGVuZ3RoID4gbGVuZ3RoKSB7Ci0JCQlwcl9lcnIoImZvcm1hdCBl cnJvclxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlsZW5ndGggLT0gcGFja2V0X2xl bmd0aDsKLQkJZGF0YSArPSBwYWNrZXRfbGVuZ3RoOwotCQljb3VudCsrOwotCX07Ci0KLQkqY250 ID0gY291bnQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX2NyZWF0ZV9j bWRfcGFja2V0cyhjb25zdCBjaGFyICpkYXRhLAotCQkJCQl1MzIgbGVuZ3RoLAotCQkJCQl1MzIg Y291bnQsCi0JCQkJCXN0cnVjdCBkc2lfY21kX2Rlc2MgKmNtZCkKLXsKLQlpbnQgcmMgPSAwOwot CWludCBpLCBqOwotCXU4ICpwYXlsb2FkOwotCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKysp IHsKLQkJdTMyIHNpemU7Ci0KLQkJY21kW2ldLm1zZy50eXBlID0gZGF0YVswXTsKLQkJY21kW2ld Lmxhc3RfY29tbWFuZCA9IChkYXRhWzFdID09IDEgPyB0cnVlIDogZmFsc2UpOwotCQljbWRbaV0u bXNnLmNoYW5uZWwgPSBkYXRhWzJdOwotCQljbWRbaV0ubXNnLmZsYWdzIHw9IChkYXRhWzNdID09 IDEgPyBNSVBJX0RTSV9NU0dfUkVRX0FDSyA6IDApOwotCQljbWRbaV0ubXNnLmN0cmwgPSAwOwot CQljbWRbaV0ucG9zdF93YWl0X21zID0gZGF0YVs0XTsKLQkJY21kW2ldLm1zZy50eF9sZW4gPSAo KGRhdGFbNV0gPDwgOCkgfCAoZGF0YVs2XSkpOwotCi0JCXNpemUgPSBjbWRbaV0ubXNnLnR4X2xl biAqIHNpemVvZih1OCk7Ci0KLQkJcGF5bG9hZCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7 Ci0JCWlmICghcGF5bG9hZCkgewotCQkJcmMgPSAtRU5PTUVNOwotCQkJZ290byBlcnJvcl9mcmVl X3BheWxvYWRzOwotCQl9Ci0KLQkJZm9yIChqID0gMDsgaiA8IGNtZFtpXS5tc2cudHhfbGVuOyBq KyspCi0JCQlwYXlsb2FkW2pdID0gZGF0YVs3ICsgal07Ci0KLQkJY21kW2ldLm1zZy50eF9idWYg PSBwYXlsb2FkOwotCQlkYXRhICs9ICg3ICsgY21kW2ldLm1zZy50eF9sZW4pOwotCX0KLQotCXJl dHVybiByYzsKLWVycm9yX2ZyZWVfcGF5bG9hZHM6Ci0JZm9yIChpID0gaSAtIDE7IGkgPj0gMDsg aS0tKSB7Ci0JCWNtZC0tOwotCQlrZnJlZShjbWQtPm1zZy50eF9idWYpOwotCX0KLQotCXJldHVy biByYzsKLX0KLQotdm9pZCBkc2lfcGFuZWxfZGVzdHJveV9jbWRfcGFja2V0cyhzdHJ1Y3QgZHNp X3BhbmVsX2NtZF9zZXQgKnNldCkKLXsKLQl1MzIgaSA9IDA7Ci0Jc3RydWN0IGRzaV9jbWRfZGVz YyAqY21kOwotCi0JZm9yIChpID0gMDsgaSA8IHNldC0+Y291bnQ7IGkrKykgewotCQljbWQgPSAm c2V0LT5jbWRzW2ldOwotCQlrZnJlZShjbWQtPm1zZy50eF9idWYpOwotCX0KLQotCWtmcmVlKHNl dC0+Y21kcyk7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX2FsbG9jX2NtZF9wYWNrZXRzKHN0 cnVjdCBkc2lfcGFuZWxfY21kX3NldCAqY21kLAotCQkJCQl1MzIgcGFja2V0X2NvdW50KQotewot CXUzMiBzaXplOwotCi0Jc2l6ZSA9IHBhY2tldF9jb3VudCAqIHNpemVvZigqY21kLT5jbWRzKTsK LQljbWQtPmNtZHMgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghY21kLT5jbWRz KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNtZC0+Y291bnQgPSBwYWNrZXRfY291bnQ7Ci0JcmV0 dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX3BhcnNlX2NtZF9zZXRzX3N1YihzdHJ1 Y3QgZHNpX3BhbmVsX2NtZF9zZXQgKmNtZCwKLQkJCQkJZW51bSBkc2lfY21kX3NldF90eXBlIHR5 cGUsCi0JCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKLXsKLQlpbnQgcmMgPSAwOwot CXUzMiBsZW5ndGggPSAwOwotCWNvbnN0IGNoYXIgKmRhdGE7Ci0JY29uc3QgY2hhciAqc3RhdGU7 Ci0JdTMyIHBhY2tldF9jb3VudCA9IDA7Ci0KLQlkYXRhID0gb2ZfZ2V0X3Byb3BlcnR5KG9mX25v ZGUsIGNtZF9zZXRfcHJvcF9tYXBbdHlwZV0sICZsZW5ndGgpOwotCWlmICghZGF0YSkgewotCQlw cl9kZWJ1ZygiJXMgY29tbWFuZHMgbm90IGRlZmluZWRcbiIsIGNtZF9zZXRfcHJvcF9tYXBbdHlw ZV0pOwotCQlyYyA9IC1FTk9UU1VQUDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9w YW5lbF9nZXRfY21kX3BrdF9jb3VudChkYXRhLCBsZW5ndGgsICZwYWNrZXRfY291bnQpOwotCWlm IChyYykgewotCQlwcl9lcnIoImNvbW1hbmRzIGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKLQkJZ290 byBlcnJvcjsKLQl9Ci0JcHJfZGVidWcoIlslc10gcGFja2V0LWNvdW50PSVkLCAlZFxuIiwgY21k X3NldF9wcm9wX21hcFt0eXBlXSwKLQkJcGFja2V0X2NvdW50LCBsZW5ndGgpOwotCi0JcmMgPSBk c2lfcGFuZWxfYWxsb2NfY21kX3BhY2tldHMoY21kLCBwYWNrZXRfY291bnQpOwotCWlmIChyYykg ewotCQlwcl9lcnIoImZhaWxlZCB0byBhbGxvY2F0ZSBjbWQgcGFja2V0cywgcmM9JWRcbiIsIHJj KTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF9jcmVhdGVfY21kX3BhY2tl dHMoZGF0YSwgbGVuZ3RoLCBwYWNrZXRfY291bnQsCi0JCQkJCSAgY21kLT5jbWRzKTsKLQlpZiAo cmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gY3JlYXRlIGNtZCBwYWNrZXRzLCByYz0lZFxuIiwg cmMpOwotCQlnb3RvIGVycm9yX2ZyZWVfbWVtOwotCX0KLQotCXN0YXRlID0gb2ZfZ2V0X3Byb3Bl cnR5KG9mX25vZGUsIGNtZF9zZXRfc3RhdGVfbWFwW3R5cGVdLCBOVUxMKTsKLQlpZiAoIXN0YXRl IHx8ICFzdHJjbXAoc3RhdGUsICJkc2lfbHBfbW9kZSIpKSB7Ci0JCWNtZC0+c3RhdGUgPSBEU0lf Q01EX1NFVF9TVEFURV9MUDsKLQl9IGVsc2UgaWYgKCFzdHJjbXAoc3RhdGUsICJkc2lfaHNfbW9k ZSIpKSB7Ci0JCWNtZC0+c3RhdGUgPSBEU0lfQ01EX1NFVF9TVEFURV9IUzsKLQl9IGVsc2Ugewot CQlwcl9lcnIoIlslc10gY29tbWFuZCBzdGF0ZSB1bnJlY29nbml6ZWQtJXNcbiIsCi0JCSAgICAg ICBjbWRfc2V0X3N0YXRlX21hcFt0eXBlXSwgc3RhdGUpOwotCQlnb3RvIGVycm9yX2ZyZWVfbWVt OwotCX0KLQotCXJldHVybiByYzsKLWVycm9yX2ZyZWVfbWVtOgotCWtmcmVlKGNtZC0+Y21kcyk7 Ci0JY21kLT5jbWRzID0gTlVMTDsKLWVycm9yOgotCXJldHVybiByYzsKLQotfQotCi1zdGF0aWMg aW50IGRzaV9wYW5lbF9wYXJzZV9jbWRfc2V0cygKLQkJc3RydWN0IGRzaV9kaXNwbGF5X21vZGVf cHJpdl9pbmZvICpwcml2X2luZm8sCi0JCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKLXsK LQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfcGFuZWxfY21kX3NldCAqc2V0OwotCXUzMiBpOwot Ci0JaWYgKCFwcml2X2luZm8pIHsKLQkJcHJfZXJyKCJpbnZhbGlkIG1vZGUgcHJpdiBpbmZvXG4i KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZm9yIChpID0gRFNJX0NNRF9TRVRfUFJFX09O OyBpIDwgRFNJX0NNRF9TRVRfTUFYOyBpKyspIHsKLQkJc2V0ID0gJnByaXZfaW5mby0+Y21kX3Nl dHNbaV07Ci0JCXNldC0+dHlwZSA9IGk7Ci0JCXNldC0+Y291bnQgPSAwOwotCi0JCWlmIChpID09 IERTSV9DTURfU0VUX1BQUykgewotCQkJcmMgPSBkc2lfcGFuZWxfYWxsb2NfY21kX3BhY2tldHMo c2V0LCAxKTsKLQkJCWlmIChyYykKLQkJCQlwcl9lcnIoImZhaWxlZCB0byBhbGxvY2F0ZSBjbWQg c2V0ICVkLCByYyA9ICVkXG4iLAotCQkJCQlpLCByYyk7Ci0JCQlzZXQtPnN0YXRlID0gRFNJX0NN RF9TRVRfU1RBVEVfTFA7Ci0JCX0gZWxzZSB7Ci0JCQlyYyA9IGRzaV9wYW5lbF9wYXJzZV9jbWRf c2V0c19zdWIoc2V0LCBpLCBvZl9ub2RlKTsKLQkJCWlmIChyYykKLQkJCQlwcl9kZWJ1ZygiZmFp bGVkIHRvIHBhcnNlIHNldCAlZFxuIiwgaSk7Ci0JCX0KLQl9Ci0KLQlyYyA9IDA7Ci0JcmV0dXJu IHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9yZXNldF9zZXF1ZW5jZShzdHJ1 Y3QgZHNpX3BhbmVsICpwYW5lbCwKLQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25v ZGUpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQl1MzIgbGVuZ3RoID0gMDsKLQl1MzIgY291 bnQgPSAwOwotCXUzMiBzaXplID0gMDsKLQl1MzIgKmFycl8zMiA9IE5VTEw7Ci0JY29uc3QgdTMy ICphcnI7Ci0Jc3RydWN0IGRzaV9yZXNldF9zZXEgKnNlcTsKLQotCWFyciA9IG9mX2dldF9wcm9w ZXJ0eShvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS1yZXNldC1zZXF1ZW5jZSIsICZsZW5ndGgpOwot CWlmICghYXJyKSB7Ci0JCXByX2VycigiWyVzXSBkc2ktcmVzZXQtc2VxdWVuY2Ugbm90IGZvdW5k XG4iLCBwYW5lbC0+bmFtZSk7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0J aWYgKGxlbmd0aCAmIDB4MSkgewotCQlwcl9lcnIoIlslc10gc3ludGF4IGVycm9yIGZvciBkc2kt cmVzZXQtc2VxdWVuY2VcbiIsCi0JCSAgICAgICBwYW5lbC0+bmFtZSk7Ci0JCXJjID0gLUVJTlZB TDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlwcl9lcnIoIlJFU0VUIFNFUSBMRU5HVEggPSAlZFxu IiwgbGVuZ3RoKTsKLQlsZW5ndGggPSBsZW5ndGggLyBzaXplb2YodTMyKTsKLQotCXNpemUgPSBs ZW5ndGggKiBzaXplb2YodTMyKTsKLQotCWFycl8zMiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5F TCk7Ci0JaWYgKCFhcnJfMzIpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yOwotCX0K LQotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkob2Zfbm9kZSwgInFjb20sbWRzcy1k c2ktcmVzZXQtc2VxdWVuY2UiLAotCQkJCQlhcnJfMzIsIGxlbmd0aCk7Ci0JaWYgKHJjKSB7Ci0J CXByX2VycigiWyVzXSBjYW5ub3QgcmVhZCBkc28tcmVzZXQtc2VxaWVuY2VcbiIsIHBhbmVsLT5u YW1lKTsKLQkJZ290byBlcnJvcl9mcmVlX2Fycl8zMjsKLQl9Ci0KLQljb3VudCA9IGxlbmd0aCAv IDI7Ci0Jc2l6ZSA9IGNvdW50ICogc2l6ZW9mKCpzZXEpOwotCXNlcSA9IGt6YWxsb2Moc2l6ZSwg R0ZQX0tFUk5FTCk7Ci0JaWYgKCFzZXEpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9y X2ZyZWVfYXJyXzMyOwotCX0KLQotCXBhbmVsLT5yZXNldF9jb25maWcuc2VxdWVuY2UgPSBzZXE7 Ci0JcGFuZWwtPnJlc2V0X2NvbmZpZy5jb3VudCA9IGNvdW50OwotCi0JZm9yIChpID0gMDsgaSA8 IGxlbmd0aDsgaSArPSAyKSB7Ci0JCXNlcS0+bGV2ZWwgPSBhcnJfMzJbaV07Ci0JCXNlcS0+c2xl ZXBfbXMgPSBhcnJfMzJbaSArIDFdOwotCQlzZXErKzsKLQl9Ci0KLQotZXJyb3JfZnJlZV9hcnJf MzI6Ci0Ja2ZyZWUoYXJyXzMyKTsKLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGlu dCBkc2lfcGFuZWxfcGFyc2VfbWlzY19mZWF0dXJlcyhzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwK LQkJCQkgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKLXsKLQlwYW5lbC0+dWxwc19l bmFibGVkID0KLQkJb2ZfcHJvcGVydHlfcmVhZF9ib29sKG9mX25vZGUsICJxY29tLHVscHMtZW5h YmxlZCIpOwotCi0JaWYgKHBhbmVsLT51bHBzX2VuYWJsZWQpCi0JCXByX2RlYnVnKCJ1bHBzX2Vu YWJsZWQ6JWRcbiIsIHBhbmVsLT51bHBzX2VuYWJsZWQpOwotCi0JcGFuZWwtPnRlX3VzaW5nX3dh dGNoZG9nX3RpbWVyID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG9mX25vZGUsCi0JCQkJCSJxY29t LG1kc3MtZHNpLXRlLXVzaW5nLXdkIik7Ci0KLQlwYW5lbC0+c3luY19icm9hZGNhc3RfZW4gPSBv Zl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJCSJxY29tLGNtZC1zeW5jLXdhaXQtYnJv YWRjYXN0Iik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX3BhcnNlX2pp dHRlcl9jb25maWcoCi0JCQkJc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGUsCi0JCQkJc3Ry dWN0IGRldmljZV9ub2RlICpvZl9ub2RlKQotewotCWludCByYzsKLQlzdHJ1Y3QgZHNpX2Rpc3Bs YXlfbW9kZV9wcml2X2luZm8gKnByaXZfaW5mbzsKLQl1MzIgaml0dGVyW0RFRkFVTFRfUEFORUxf SklUVEVSX0FSUkFZX1NJWkVdID0gezAsIDB9OwotCXU2NCBqaXR0ZXJfdmFsID0gMDsKLQotCXBy aXZfaW5mbyA9IG1vZGUtPnByaXZfaW5mbzsKLQotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzJf YXJyYXkob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktcGFuZWwtaml0dGVyIiwKLQkJCQlqaXR0ZXIs IERFRkFVTFRfUEFORUxfSklUVEVSX0FSUkFZX1NJWkUpOwotCWlmIChyYykgewotCQlwcl9kZWJ1 ZygicGFuZWwgaml0dGVyIG5vdCBkZWZpbmVkIHJjPSVkXG4iLCByYyk7Ci0JfSBlbHNlIHsKLQkJ aml0dGVyX3ZhbCA9IGppdHRlclswXTsKLQkJaml0dGVyX3ZhbCA9IGRpdl91NjQoaml0dGVyX3Zh bCwgaml0dGVyWzFdKTsKLQl9Ci0KLQlpZiAocmMgfHwgIWppdHRlcl92YWwgfHwgKGppdHRlcl92 YWwgPiBNQVhfUEFORUxfSklUVEVSKSkgewotCQlwcml2X2luZm8tPnBhbmVsX2ppdHRlcl9udW1l ciA9IERFRkFVTFRfUEFORUxfSklUVEVSX05VTUVSQVRPUjsKLQkJcHJpdl9pbmZvLT5wYW5lbF9q aXR0ZXJfZGVub20gPQotCQkJCQlERUZBVUxUX1BBTkVMX0pJVFRFUl9ERU5PTUlOQVRPUjsKLQl9 IGVsc2UgewotCQlwcml2X2luZm8tPnBhbmVsX2ppdHRlcl9udW1lciA9IGppdHRlclswXTsKLQkJ cHJpdl9pbmZvLT5wYW5lbF9qaXR0ZXJfZGVub20gPSBqaXR0ZXJbMV07Ci0JfQotCi0JcmMgPSBv Zl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS1wYW5lbC1wcmVmaWxs LWxpbmVzIiwKLQkJCQkgICZwcml2X2luZm8tPnBhbmVsX3ByZWZpbGxfbGluZXMpOwotCWlmIChy YykgewotCQlwcl9kZWJ1ZygicGFuZWwgcHJlZmlsbCBsaW5lcyBhcmUgbm90IGRlZmluZWQgcmM9 JWRcbiIsIHJjKTsKLQkJcHJpdl9pbmZvLT5wYW5lbF9wcmVmaWxsX2xpbmVzID0gREVGQVVMVF9Q QU5FTF9QUkVGSUxMX0xJTkVTOwotCX0gZWxzZSBpZiAocHJpdl9pbmZvLT5wYW5lbF9wcmVmaWxs X2xpbmVzID49Ci0JCQkJCURTSV9WX1RPVEFMKCZtb2RlLT50aW1pbmcpKSB7Ci0JCXByX2RlYnVn KCJpbnZhbGlkIHByZWZpbGwgbGluZXMgY29uZmlnPSVkIHNldHRpbmcgdG86JWRcbiIsCi0JCXBy aXZfaW5mby0+cGFuZWxfcHJlZmlsbF9saW5lcywgREVGQVVMVF9QQU5FTF9QUkVGSUxMX0xJTkVT KTsKLQotCQlwcml2X2luZm8tPnBhbmVsX3ByZWZpbGxfbGluZXMgPSBERUZBVUxUX1BBTkVMX1BS RUZJTExfTElORVM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVs X3BhcnNlX3Bvd2VyX2NmZyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCi0JCQkJICAgICBzdHJ1Y3Qg ZHNpX3BhbmVsICpwYW5lbCwKLQkJCQkgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkK LXsKLQlpbnQgcmMgPSAwOwotCi0JcmMgPSBkc2lfcHdyX29mX2dldF92cmVnX2RhdGEob2Zfbm9k ZSwKLQkJCQkJICAmcGFuZWwtPnBvd2VyX2luZm8sCi0JCQkJCSAgInFjb20scGFuZWwtc3VwcGx5 LWVudHJpZXMiKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBwYXJzZSB2 cmVnc1xuIiwgcGFuZWwtPm5hbWUpOwotCQlnb3RvIGVycm9yOwotCX0KLQotZXJyb3I6Ci0JcmV0 dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9ncGlvcyhzdHJ1Y3QgZHNp X3BhbmVsICpwYW5lbCwKLQkJCQkgc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlKQotewotCWlu dCByYyA9IDA7Ci0JY29uc3QgY2hhciAqZGF0YTsKLQotCXBhbmVsLT5yZXNldF9jb25maWcucmVz ZXRfZ3BpbyA9IG9mX2dldF9uYW1lZF9ncGlvKG9mX25vZGUsCi0JCQkJCSAgICAgICJxY29tLHBs YXRmb3JtLXJlc2V0LWdwaW8iLAotCQkJCQkgICAgICAwKTsKLQlpZiAoIWdwaW9faXNfdmFsaWQo cGFuZWwtPnJlc2V0X2NvbmZpZy5yZXNldF9ncGlvKSkgewotCQlwcl9lcnIoIlslc10gZmFpbGVk IGdldCByZXNldCBncGlvLCByYz0lZFxuIiwgcGFuZWwtPm5hbWUsIHJjKTsKLQkJcmMgPSAtRUlO VkFMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXBhbmVsLT5yZXNldF9jb25maWcuZGlzcF9lbl9n cGlvID0gb2ZfZ2V0X25hbWVkX2dwaW8ob2Zfbm9kZSwKLQkJCQkJCSJxY29tLDV2LWJvb3N0LWdw aW8iLAotCQkJCQkJMCk7Ci0JaWYgKCFncGlvX2lzX3ZhbGlkKHBhbmVsLT5yZXNldF9jb25maWcu ZGlzcF9lbl9ncGlvKSkgewotCQlwcl9kZWJ1ZygiWyVzXSA1di1ib290LWdwaW8gaXMgbm90IHNl dCwgcmM9JWRcbiIsCi0JCQkgcGFuZWwtPm5hbWUsIHJjKTsKLQkJcGFuZWwtPnJlc2V0X2NvbmZp Zy5kaXNwX2VuX2dwaW8gPSBvZl9nZXRfbmFtZWRfZ3BpbyhvZl9ub2RlLAotCQkJCQkJCSJxY29t LHBsYXRmb3JtLWVuLWdwaW8iLAotCQkJCQkJCTApOwotCQlpZiAoIWdwaW9faXNfdmFsaWQocGFu ZWwtPnJlc2V0X2NvbmZpZy5kaXNwX2VuX2dwaW8pKSB7Ci0JCQlwcl9kZWJ1ZygiWyVzXSBwbGF0 Zm9ybS1lbi1ncGlvIGlzIG5vdCBzZXQsIHJjPSVkXG4iLAotCQkJCSBwYW5lbC0+bmFtZSwgcmMp OwotCQl9Ci0JfQotCi0JcGFuZWwtPnJlc2V0X2NvbmZpZy5sY2RfbW9kZV9zZWxfZ3BpbyA9IG9m X2dldF9uYW1lZF9ncGlvKG9mX25vZGUsCi0JCSJxY29tLHBhbmVsLW1vZGUtZ3BpbyIsIDApOwot CWlmICghZ3Bpb19pc192YWxpZChwYW5lbC0+cmVzZXRfY29uZmlnLmxjZF9tb2RlX3NlbF9ncGlv KSkKLQkJcHJfZGVidWcoIiVzOiVkIG1vZGUgZ3BpbyBub3Qgc3BlY2lmaWVkXG4iLCBfX2Z1bmNf XywgX19MSU5FX18pOwotCi0JZGF0YSA9IG9mX2dldF9wcm9wZXJ0eShvZl9ub2RlLAotCQkicWNv bSxtZHNzLWRzaS1tb2RlLXNlbC1ncGlvLXN0YXRlIiwgTlVMTCk7Ci0JaWYgKGRhdGEpIHsKLQkJ aWYgKCFzdHJjbXAoZGF0YSwgInNpbmdsZV9wb3J0IikpCi0JCQlwYW5lbC0+cmVzZXRfY29uZmln Lm1vZGVfc2VsX3N0YXRlID0KLQkJCQlNT0RFX1NFTF9TSU5HTEVfUE9SVDsKLQkJZWxzZSBpZiAo IXN0cmNtcChkYXRhLCAiZHVhbF9wb3J0IikpCi0JCQlwYW5lbC0+cmVzZXRfY29uZmlnLm1vZGVf c2VsX3N0YXRlID0KLQkJCQlNT0RFX1NFTF9EVUFMX1BPUlQ7Ci0JCWVsc2UgaWYgKCFzdHJjbXAo ZGF0YSwgImhpZ2giKSkKLQkJCXBhbmVsLT5yZXNldF9jb25maWcubW9kZV9zZWxfc3RhdGUgPQot CQkJCU1PREVfR1BJT19ISUdIOwotCQllbHNlIGlmICghc3RyY21wKGRhdGEsICJsb3ciKSkKLQkJ CXBhbmVsLT5yZXNldF9jb25maWcubW9kZV9zZWxfc3RhdGUgPQotCQkJCU1PREVfR1BJT19MT1c7 Ci0JfSBlbHNlIHsKLQkJLyogU2V0IGRlZmF1bHQgbW9kZSBhcyBTUExJVCBtb2RlICovCi0JCXBh bmVsLT5yZXNldF9jb25maWcubW9kZV9zZWxfc3RhdGUgPSBNT0RFX1NFTF9EVUFMX1BPUlQ7Ci0J fQotCi0JLyogVE9ETzogIHJlbGVhc2UgbWVtb3J5ICovCi0JcmMgPSBkc2lfcGFuZWxfcGFyc2Vf cmVzZXRfc2VxdWVuY2UocGFuZWwsIG9mX25vZGUpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlsl c10gZmFpbGVkIHRvIHBhcnNlIHJlc2V0IHNlcXVlbmNlLCByYz0lZFxuIiwKLQkJICAgICAgIHBh bmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi1lcnJvcjoKLQlyZXR1cm4gcmM7 Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX3BhcnNlX2JsX3B3bV9jb25maWcoc3RydWN0IGRz aV9iYWNrbGlnaHRfY29uZmlnICpjb25maWcsCi0JCQkJCSBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9m X25vZGUpCi17Ci0JaW50IHJjID0gMDsKLQl1MzIgdmFsOwotCi0JcmMgPSBvZl9wcm9wZXJ0eV9y ZWFkX3UzMihvZl9ub2RlLCAicWNvbSxkc2ktYmwtcG1pYy1iYW5rLXNlbGVjdCIsCi0JCQkJICAm dmFsKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJibC1wbWljLWJhbmstc2VsZWN0IGlzIG5vdCBk ZWZpbmVkLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQljb25maWctPnB3bV9w bWljX2JhbmsgPSB2YWw7Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJx Y29tLGRzaS1ibC1wbWljLXB3bS1mcmVxdWVuY3kiLAotCQkJCSAgJnZhbCk7Ci0JaWYgKHJjKSB7 Ci0JCXByX2VycigiYmwtcG1pYy1iYW5rLXNlbGVjdCBpcyBub3QgZGVmaW5lZCwgcmM9JWRcbiIs IHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JY29uZmlnLT5wd21fcGVyaW9kX3VzZWNzID0gdmFs OwotCi0JY29uZmlnLT5wd21fcG1pX2NvbnRyb2wgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zf bm9kZSwKLQkJCQkJCSJxY29tLG1kc3MtZHNpLWJsLXB3bS1wbWkiKTsKLQotCWNvbmZpZy0+cHdt X2dwaW8gPSBvZl9nZXRfbmFtZWRfZ3BpbyhvZl9ub2RlLAotCQkJCQkgICAgICJxY29tLG1kc3Mt ZHNpLXB3bS1ncGlvIiwKLQkJCQkJICAgICAwKTsKLQlpZiAoIWdwaW9faXNfdmFsaWQoY29uZmln LT5wd21fZ3BpbykpIHsKLQkJcHJfZXJyKCJwd20gZ3BpbyBpcyBpbnZhbGlkXG4iKTsKLQkJcmMg PSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOwotCX0KLQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQot Ci1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9ibF9jb25maWcoc3RydWN0IGRzaV9wYW5lbCAq cGFuZWwsCi0JCQkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpCi17Ci0JaW50IHJj ID0gMDsKLQljb25zdCBjaGFyICpibF90eXBlOwotCXUzMiB2YWwgPSAwOwotCi0JYmxfdHlwZSA9 IG9mX2dldF9wcm9wZXJ0eShvZl9ub2RlLAotCQkJCSAgInFjb20sbWRzcy1kc2ktYmwtcG1pYy1j b250cm9sLXR5cGUiLAotCQkJCSAgTlVMTCk7Ci0JaWYgKCFibF90eXBlKSB7Ci0JCXBhbmVsLT5i bF9jb25maWcudHlwZSA9IERTSV9CQUNLTElHSFRfVU5LTk9XTjsKLQl9IGVsc2UgaWYgKCFzdHJj bXAoYmxfdHlwZSwgImJsX2N0cmxfcHdtIikpIHsKLQkJcGFuZWwtPmJsX2NvbmZpZy50eXBlID0g RFNJX0JBQ0tMSUdIVF9QV007Ci0JfSBlbHNlIGlmICghc3RyY21wKGJsX3R5cGUsICJibF9jdHJs X3dsZWQiKSkgewotCQlwYW5lbC0+YmxfY29uZmlnLnR5cGUgPSBEU0lfQkFDS0xJR0hUX1dMRUQ7 Ci0JfSBlbHNlIGlmICghc3RyY21wKGJsX3R5cGUsICJibF9jdHJsX2RjcyIpKSB7Ci0JCXBhbmVs LT5ibF9jb25maWcudHlwZSA9IERTSV9CQUNLTElHSFRfRENTOwotCX0gZWxzZSB7Ci0JCXByX2Rl YnVnKCJbJXNdIGJsLXBtaWMtY29udHJvbC10eXBlIHVua25vd24tJXNcbiIsCi0JCQkgcGFuZWwt Pm5hbWUsIGJsX3R5cGUpOwotCQlwYW5lbC0+YmxfY29uZmlnLnR5cGUgPSBEU0lfQkFDS0xJR0hU X1VOS05PV047Ci0JfQotCi0JcGFuZWwtPmJsX2NvbmZpZy5ibF9zY2FsZSA9IE1BWF9CTF9TQ0FM RV9MRVZFTDsKLQlwYW5lbC0+YmxfY29uZmlnLmJsX3NjYWxlX2FkID0gTUFYX0FEX0JMX1NDQUxF X0xFVkVMOwotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNz LWRzaS1ibC1taW4tbGV2ZWwiLCAmdmFsKTsKLQlpZiAocmMpIHsKLQkJcHJfZGVidWcoIlslc10g YmwtbWluLWxldmVsIHVuc3BlY2lmaWVkLCBkZWZhdWx0aW5nIHRvIHplcm9cbiIsCi0JCQkgcGFu ZWwtPm5hbWUpOwotCQlwYW5lbC0+YmxfY29uZmlnLmJsX21pbl9sZXZlbCA9IDA7Ci0JfSBlbHNl IHsKLQkJcGFuZWwtPmJsX2NvbmZpZy5ibF9taW5fbGV2ZWwgPSB2YWw7Ci0JfQotCi0JcmMgPSBv Zl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS1ibC1tYXgtbGV2ZWwi LCAmdmFsKTsKLQlpZiAocmMpIHsKLQkJcHJfZGVidWcoIlslc10gYmwtbWF4LWxldmVsIHVuc3Bl Y2lmaWVkLCBkZWZhdWx0aW5nIHRvIG1heCBsZXZlbFxuIiwKLQkJCSBwYW5lbC0+bmFtZSk7Ci0J CXBhbmVsLT5ibF9jb25maWcuYmxfbWF4X2xldmVsID0gTUFYX0JMX0xFVkVMOwotCX0gZWxzZSB7 Ci0JCXBhbmVsLT5ibF9jb25maWcuYmxfbWF4X2xldmVsID0gdmFsOwotCX0KLQotCXJjID0gb2Zf cHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1icmlnaHRuZXNzLW1heC1sZXZl bCIsCi0JCSZ2YWwpOwotCWlmIChyYykgewotCQlwcl9kZWJ1ZygiWyVzXSBicmlnaGVuZXNzLW1h eC1sZXZlbCB1bnNwZWNpZmllZCwgZGVmYXVsdGluZyB0byAyNTVcbiIsCi0JCQkgcGFuZWwtPm5h bWUpOwotCQlwYW5lbC0+YmxfY29uZmlnLmJyaWdodG5lc3NfbWF4X2xldmVsID0gMjU1OwotCX0g ZWxzZSB7Ci0JCXBhbmVsLT5ibF9jb25maWcuYnJpZ2h0bmVzc19tYXhfbGV2ZWwgPSB2YWw7Ci0J fQotCi0JaWYgKHBhbmVsLT5ibF9jb25maWcudHlwZSA9PSBEU0lfQkFDS0xJR0hUX1BXTSkgewot CQlyYyA9IGRzaV9wYW5lbF9wYXJzZV9ibF9wd21fY29uZmlnKCZwYW5lbC0+YmxfY29uZmlnLCBv Zl9ub2RlKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHBhcnNlIHB3 bSBjb25maWcsIHJjPSVkXG4iLAotCQkJICAgICAgIHBhbmVsLT5uYW1lLCByYyk7Ci0JCQlnb3Rv IGVycm9yOwotCQl9Ci0JfQotCi0JcGFuZWwtPmJsX2NvbmZpZy5lbl9ncGlvID0gb2ZfZ2V0X25h bWVkX2dwaW8ob2Zfbm9kZSwKLQkJCQkJICAgICAgInFjb20scGxhdGZvcm0tYmtsaWdodC1lbi1n cGlvIiwKLQkJCQkJICAgICAgMCk7Ci0JaWYgKCFncGlvX2lzX3ZhbGlkKHBhbmVsLT5ibF9jb25m aWcuZW5fZ3BpbykpIHsKLQkJcHJfZGVidWcoIlslc10gZmFpbGVkIGdldCBia2x0IGdwaW8sIHJj PSVkXG4iLCBwYW5lbC0+bmFtZSwgcmMpOwotCQlyYyA9IDA7Ci0JCWdvdG8gZXJyb3I7Ci0JfQot Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXZvaWQgZHNpX2RzY19wY2xrX3BhcmFtX2NhbGMo c3RydWN0IG1zbV9kaXNwbGF5X2RzY19pbmZvICpkc2MsIGludCBpbnRmX3dpZHRoKQotewotCWlu dCBzbGljZV9wZXJfcGt0LCBzbGljZV9wZXJfaW50ZjsKLQlpbnQgYnl0ZXNfaW5fc2xpY2UsIHRv dGFsX2J5dGVzX3Blcl9pbnRmOwotCi0JaWYgKCFkc2MgfHwgIWRzYy0+c2xpY2Vfd2lkdGggfHwg IWRzYy0+c2xpY2VfcGVyX3BrdCB8fAotCSAgICAoaW50Zl93aWR0aCA8IGRzYy0+c2xpY2Vfd2lk dGgpKSB7Ci0JCXByX2VycigiaW52YWxpZCBpbnB1dCwgaW50Zl93aWR0aD0lZCBzbGljZV93aWR0 aD0lZFxuIiwKLQkJCWludGZfd2lkdGgsIGRzYyA/IGRzYy0+c2xpY2Vfd2lkdGggOiAtMSk7Ci0J CXJldHVybjsKLQl9Ci0KLQlzbGljZV9wZXJfcGt0ID0gZHNjLT5zbGljZV9wZXJfcGt0OwotCXNs aWNlX3Blcl9pbnRmID0gRElWX1JPVU5EX1VQKGludGZfd2lkdGgsIGRzYy0+c2xpY2Vfd2lkdGgp OwotCi0JLyoKLQkgKiBJZiBzbGljZV9wZXJfcGt0IGlzIGdyZWF0ZXIgdGhhbiBzbGljZV9wZXJf aW50ZiB0aGVuIGRlZmF1bHQgdG8gMS4KLQkgKiBUaGlzIGNhbiBoYXBwZW4gZHVyaW5nIHBhcnRp YWwgdXBkYXRlLgotCSAqLwotCWlmIChzbGljZV9wZXJfcGt0ID4gc2xpY2VfcGVyX2ludGYpCi0J CXNsaWNlX3Blcl9wa3QgPSAxOwotCi0JYnl0ZXNfaW5fc2xpY2UgPSBESVZfUk9VTkRfVVAoZHNj LT5zbGljZV93aWR0aCAqIGRzYy0+YnBwLCA4KTsKLQl0b3RhbF9ieXRlc19wZXJfaW50ZiA9IGJ5 dGVzX2luX3NsaWNlICogc2xpY2VfcGVyX2ludGY7Ci0KLQlkc2MtPmVvbF9ieXRlX251bSA9IHRv dGFsX2J5dGVzX3Blcl9pbnRmICUgMzsKLQlkc2MtPnBjbGtfcGVyX2xpbmUgPSAgRElWX1JPVU5E X1VQKHRvdGFsX2J5dGVzX3Blcl9pbnRmLCAzKTsKLQlkc2MtPmJ5dGVzX2luX3NsaWNlID0gYnl0 ZXNfaW5fc2xpY2U7Ci0JZHNjLT5ieXRlc19wZXJfcGt0ID0gYnl0ZXNfaW5fc2xpY2UgKiBzbGlj ZV9wZXJfcGt0OwotCWRzYy0+cGt0X3Blcl9saW5lID0gc2xpY2VfcGVyX2ludGYgLyBzbGljZV9w ZXJfcGt0OwotfQotCi0KLWludCBkc2lfZHNjX3BvcHVsYXRlX3N0YXRpY19wYXJhbShzdHJ1Y3Qg bXNtX2Rpc3BsYXlfZHNjX2luZm8gKmRzYykKLXsKLQlpbnQgYnBwLCBicGM7Ci0JaW50IG11eF93 b3Jkc19zaXplOwotCWludCBncm91cHNfcGVyX2xpbmUsIGdyb3Vwc190b3RhbDsKLQlpbnQgbWlu X3JhdGVfYnVmZmVyX3NpemU7Ci0JaW50IGhyZF9kZWxheTsKLQlpbnQgcHJlX251bV9leHRyYV9t dXhfYml0cywgbnVtX2V4dHJhX211eF9iaXRzOwotCWludCBzbGljZV9iaXRzOwotCWludCB0YXJn ZXRfYnBwX3gxNjsKLQlpbnQgZGF0YTsKLQlpbnQgZmluYWxfdmFsdWUsIGZpbmFsX3NjYWxlOwot CWludCByYXRpb19pbmRleDsKLQotCWRzYy0+dmVyc2lvbiA9IDB4MTE7Ci0JZHNjLT5zY3JfcmV2 ID0gMDsKLQlkc2MtPnJjX21vZGVsX3NpemUgPSA4MTkyOwotCWlmIChkc2MtPnZlcnNpb24gPT0g MHgxMSAmJiBkc2MtPnNjcl9yZXYgPT0gMHgxKQotCQlkc2MtPmZpcnN0X2xpbmVfYnBnX29mZnNl dCA9IDE1OwotCWVsc2UKLQkJZHNjLT5maXJzdF9saW5lX2JwZ19vZmZzZXQgPSAxMjsKLQotCWRz Yy0+ZWRnZV9mYWN0b3IgPSA2OwotCWRzYy0+dGd0X29mZnNldF9oaSA9IDM7Ci0JZHNjLT50Z3Rf b2Zmc2V0X2xvID0gMzsKLQlkc2MtPmVuYWJsZV80MjIgPSAwOwotCWRzYy0+Y29udmVydF9yZ2Ig PSAxOwotCWRzYy0+dmJyX2VuYWJsZSA9IDA7Ci0KLQlkc2MtPmJ1Zl90aHJlc2ggPSBkc2lfZHNj X3JjX2J1Zl90aHJlc2g7Ci0KLQlicHAgPSBkc2MtPmJwcDsKLQlicGMgPSBkc2MtPmJwYzsKLQot CWlmIChicGMgPT0gMTIpCi0JCXJhdGlvX2luZGV4ID0gRFNDXzEyQlBDXzhCUFA7Ci0JZWxzZSBp ZiAoYnBjID09IDEwKQotCQlyYXRpb19pbmRleCA9IERTQ18xMEJQQ184QlBQOwotCWVsc2UKLQkJ cmF0aW9faW5kZXggPSBEU0NfOEJQQ184QlBQOwotCi0JaWYgKGRzYy0+dmVyc2lvbiA9PSAweDEx ICYmIGRzYy0+c2NyX3JldiA9PSAweDEpIHsKLQkJZHNjLT5yYW5nZV9taW5fcXAgPQotCQkJZHNp X2RzY19yY19yYW5nZV9taW5fcXBfMV8xX3NjcjFbcmF0aW9faW5kZXhdOwotCQlkc2MtPnJhbmdl X21heF9xcCA9Ci0JCQlkc2lfZHNjX3JjX3JhbmdlX21heF9xcF8xXzFfc2NyMVtyYXRpb19pbmRl eF07Ci0JfSBlbHNlIHsKLQkJZHNjLT5yYW5nZV9taW5fcXAgPSBkc2lfZHNjX3JjX3JhbmdlX21p bl9xcF8xXzFbcmF0aW9faW5kZXhdOwotCQlkc2MtPnJhbmdlX21heF9xcCA9IGRzaV9kc2NfcmNf cmFuZ2VfbWF4X3FwXzFfMVtyYXRpb19pbmRleF07Ci0JfQotCWRzYy0+cmFuZ2VfYnBnX29mZnNl dCA9IGRzaV9kc2NfcmNfcmFuZ2VfYnBnX29mZnNldDsKLQotCWlmIChicHAgPT0gOCkKLQkJZHNj LT5pbml0aWFsX29mZnNldCA9IDYxNDQ7Ci0JZWxzZQotCQlkc2MtPmluaXRpYWxfb2Zmc2V0ID0g MjA0ODsJLyogYnBwID0gMTIgKi8KLQotCWlmIChicGMgPT0gMTIpCi0JCW11eF93b3Jkc19zaXpl ID0gNjQ7Ci0JZWxzZQotCQltdXhfd29yZHNfc2l6ZSA9IDQ4OwkJLyogYnBjID09IDgvMTAgKi8K LQotCWlmIChicGMgPT0gOCkgewotCQlkc2MtPmxpbmVfYnVmX2RlcHRoID0gOTsKLQkJZHNjLT5p bnB1dF8xMF9iaXRzID0gMDsKLQkJZHNjLT5taW5fcXBfZmxhdG5lc3MgPSAzOwotCQlkc2MtPm1h eF9xcF9mbGF0bmVzcyA9IDEyOwotCQlkc2MtPnF1YW50X2luY3JfbGltaXQwID0gMTE7Ci0JCWRz Yy0+cXVhbnRfaW5jcl9saW1pdDEgPSAxMTsKLQl9IGVsc2UgaWYgKGJwYyA9PSAxMCkgeyAvKiAx MGJwYyAqLwotCQlkc2MtPmxpbmVfYnVmX2RlcHRoID0gMTE7Ci0JCWRzYy0+aW5wdXRfMTBfYml0 cyA9IDE7Ci0JCWRzYy0+bWluX3FwX2ZsYXRuZXNzID0gNzsKLQkJZHNjLT5tYXhfcXBfZmxhdG5l c3MgPSAxNjsKLQkJZHNjLT5xdWFudF9pbmNyX2xpbWl0MCA9IDE1OwotCQlkc2MtPnF1YW50X2lu Y3JfbGltaXQxID0gMTU7Ci0JfSBlbHNlIHsgLyogMTIgYnBjICovCi0JCWRzYy0+bGluZV9idWZf ZGVwdGggPSA5OwotCQlkc2MtPmlucHV0XzEwX2JpdHMgPSAwOwotCQlkc2MtPm1pbl9xcF9mbGF0 bmVzcyA9IDExOwotCQlkc2MtPm1heF9xcF9mbGF0bmVzcyA9IDIwOwotCQlkc2MtPnF1YW50X2lu Y3JfbGltaXQwID0gMTk7Ci0JCWRzYy0+cXVhbnRfaW5jcl9saW1pdDEgPSAxOTsKLQl9Ci0KLQlk c2MtPnNsaWNlX2xhc3RfZ3JvdXBfc2l6ZSA9IDMgLSAoZHNjLT5zbGljZV93aWR0aCAlIDMpOwot Ci0JZHNjLT5kZXRfdGhyZXNoX2ZsYXRuZXNzID0gNyArIDIqKGJwYyAtIDgpOwotCi0JZHNjLT5p bml0aWFsX3htaXRfZGVsYXkgPSBkc2MtPnJjX21vZGVsX3NpemUgLyAoMiAqIGJwcCk7Ci0KLQln cm91cHNfcGVyX2xpbmUgPSBESVZfUk9VTkRfVVAoZHNjLT5zbGljZV93aWR0aCwgMyk7Ci0KLQlk c2MtPmNodW5rX3NpemUgPSBkc2MtPnNsaWNlX3dpZHRoICogYnBwIC8gODsKLQlpZiAoKGRzYy0+ c2xpY2Vfd2lkdGggKiBicHApICUgOCkKLQkJZHNjLT5jaHVua19zaXplKys7Ci0KLQkvKiByYnMt bWluICovCi0JbWluX3JhdGVfYnVmZmVyX3NpemUgPSAgZHNjLT5yY19tb2RlbF9zaXplIC0gZHNj LT5pbml0aWFsX29mZnNldCArCi0JCQlkc2MtPmluaXRpYWxfeG1pdF9kZWxheSAqIGJwcCArCi0J CQlncm91cHNfcGVyX2xpbmUgKiBkc2MtPmZpcnN0X2xpbmVfYnBnX29mZnNldDsKLQotCWhyZF9k ZWxheSA9IERJVl9ST1VORF9VUChtaW5fcmF0ZV9idWZmZXJfc2l6ZSwgYnBwKTsKLQotCWRzYy0+ aW5pdGlhbF9kZWNfZGVsYXkgPSBocmRfZGVsYXkgLSBkc2MtPmluaXRpYWxfeG1pdF9kZWxheTsK LQotCWRzYy0+aW5pdGlhbF9zY2FsZV92YWx1ZSA9IDggKiBkc2MtPnJjX21vZGVsX3NpemUgLwot CQkJKGRzYy0+cmNfbW9kZWxfc2l6ZSAtIGRzYy0+aW5pdGlhbF9vZmZzZXQpOwotCi0Jc2xpY2Vf Yml0cyA9IDggKiBkc2MtPmNodW5rX3NpemUgKiBkc2MtPnNsaWNlX2hlaWdodDsKLQotCWdyb3Vw c190b3RhbCA9IGdyb3Vwc19wZXJfbGluZSAqIGRzYy0+c2xpY2VfaGVpZ2h0OwotCi0JZGF0YSA9 IGRzYy0+Zmlyc3RfbGluZV9icGdfb2Zmc2V0ICogMjA0ODsKLQotCWRzYy0+bmZsX2JwZ19vZmZz ZXQgPSBESVZfUk9VTkRfVVAoZGF0YSwgKGRzYy0+c2xpY2VfaGVpZ2h0IC0gMSkpOwotCi0JcHJl X251bV9leHRyYV9tdXhfYml0cyA9IDMgKiAobXV4X3dvcmRzX3NpemUgKyAoNCAqIGJwYyArIDQp IC0gMik7Ci0KLQludW1fZXh0cmFfbXV4X2JpdHMgPSBwcmVfbnVtX2V4dHJhX211eF9iaXRzIC0g KG11eF93b3Jkc19zaXplIC0KLQkJKChzbGljZV9iaXRzIC0gcHJlX251bV9leHRyYV9tdXhfYml0 cykgJSBtdXhfd29yZHNfc2l6ZSkpOwotCi0JZGF0YSA9IDIwNDggKiAoZHNjLT5yY19tb2RlbF9z aXplIC0gZHNjLT5pbml0aWFsX29mZnNldAotCQkrIG51bV9leHRyYV9tdXhfYml0cyk7Ci0JZHNj LT5zbGljZV9icGdfb2Zmc2V0ID0gRElWX1JPVU5EX1VQKGRhdGEsIGdyb3Vwc190b3RhbCk7Ci0K LQkvKiBicHAgKiAxNiArIDAuNSAqLwotCWRhdGEgPSBicHAgKiAxNjsKLQlkYXRhICo9IDI7Ci0J ZGF0YSsrOwotCWRhdGEgLz0gMjsKLQl0YXJnZXRfYnBwX3gxNiA9IGRhdGE7Ci0KLQlkYXRhID0g KGRzYy0+aW5pdGlhbF94bWl0X2RlbGF5ICogdGFyZ2V0X2JwcF94MTYpIC8gMTY7Ci0JZmluYWxf dmFsdWUgPSAgZHNjLT5yY19tb2RlbF9zaXplIC0gZGF0YSArIG51bV9leHRyYV9tdXhfYml0czsK LQotCWZpbmFsX3NjYWxlID0gOCAqIGRzYy0+cmNfbW9kZWxfc2l6ZSAvCi0JCShkc2MtPnJjX21v ZGVsX3NpemUgLSBmaW5hbF92YWx1ZSk7Ci0KLQlkc2MtPmZpbmFsX29mZnNldCA9IGZpbmFsX3Zh bHVlOwotCi0JZGF0YSA9IChmaW5hbF9zY2FsZSAtIDkpICogKGRzYy0+bmZsX2JwZ19vZmZzZXQg KwotCQlkc2MtPnNsaWNlX2JwZ19vZmZzZXQpOwotCWRzYy0+c2NhbGVfaW5jcmVtZW50X2ludGVy dmFsID0gKDIwNDggKiBkc2MtPmZpbmFsX29mZnNldCkgLyBkYXRhOwotCi0JZHNjLT5zY2FsZV9k ZWNyZW1lbnRfaW50ZXJ2YWwgPSBncm91cHNfcGVyX2xpbmUgLwotCQkoZHNjLT5pbml0aWFsX3Nj YWxlX3ZhbHVlIC0gOCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IGRzaV9wYW5l bF9wYXJzZV9waHlfdGltaW5nKHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlLAotCQkJCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKLXsKLQljb25zdCBjaGFyICpkYXRhOwotCXUzMiBs ZW4sIGk7Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZV9wcml2X2luZm8g KnByaXZfaW5mbzsKLQotCXByaXZfaW5mbyA9IG1vZGUtPnByaXZfaW5mbzsKLQotCWRhdGEgPSBv Zl9nZXRfcHJvcGVydHkob2Zfbm9kZSwKLQkJCSJxY29tLG1kc3MtZHNpLXBhbmVsLXBoeS10aW1p bmdzIiwgJmxlbik7Ci0JaWYgKCFkYXRhKSB7Ci0JCXByX2RlYnVnKCJVbmFibGUgdG8gcmVhZCBQ aHkgdGltaW5nIHNldHRpbmdzIik7Ci0JfSBlbHNlIHsKLQkJcHJpdl9pbmZvLT5waHlfdGltaW5n X3ZhbCA9Ci0JCQlremFsbG9jKChzaXplb2YodTMyKSAqIGxlbiksIEdGUF9LRVJORUwpOwotCQlp ZiAoIXByaXZfaW5mby0+cGh5X3RpbWluZ192YWwpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlm b3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCQlwcml2X2luZm8tPnBoeV90aW1pbmdfdmFsW2ld ID0gZGF0YVtpXTsKLQotCQlwcml2X2luZm8tPnBoeV90aW1pbmdfbGVuID0gbGVuOwotCX07Ci0K LQltb2RlLT5waXhlbF9jbGtfa2h6ID0gKERTSV9IX1RPVEFMKCZtb2RlLT50aW1pbmcpICoKLQkJ CURTSV9WX1RPVEFMKCZtb2RlLT50aW1pbmcpICoKLQkJCW1vZGUtPnRpbWluZy5yZWZyZXNoX3Jh dGUpIC8gMTAwMDsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX3BhcnNl X2RzY19wYXJhbXMoc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGUsCi0JCQkJc3RydWN0IGRl dmljZV9ub2RlICpvZl9ub2RlKQotewotCXUzMiBkYXRhOwotCWludCByYyA9IC1FSU5WQUw7Ci0J aW50IGludGZfd2lkdGg7Ci0JY29uc3QgY2hhciAqY29tcHJlc3Npb247Ci0Jc3RydWN0IGRzaV9k aXNwbGF5X21vZGVfcHJpdl9pbmZvICpwcml2X2luZm87Ci0KLQlpZiAoIW1vZGUgfHwgIW1vZGUt PnByaXZfaW5mbykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwcml2X2luZm8gPSBtb2RlLT5wcml2 X2luZm87Ci0KLQlwcml2X2luZm8tPmRzY19lbmFibGVkID0gZmFsc2U7Ci0JY29tcHJlc3Npb24g PSBvZl9nZXRfcHJvcGVydHkob2Zfbm9kZSwgInFjb20sY29tcHJlc3Npb24tbW9kZSIsIE5VTEwp OwotCWlmIChjb21wcmVzc2lvbiAmJiAhc3RyY21wKGNvbXByZXNzaW9uLCAiZHNjIikpCi0JCXBy aXZfaW5mby0+ZHNjX2VuYWJsZWQgPSB0cnVlOwotCi0JaWYgKCFwcml2X2luZm8tPmRzY19lbmFi bGVkKSB7Ci0JCXByX2RlYnVnKCJkc2MgY29tcHJlc3Npb24gaXMgbm90IGVuYWJsZWQgZm9yIHRo ZSBtb2RlIik7Ci0JCXJldHVybiAwOwotCX0KLQotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIo b2Zfbm9kZSwgInFjb20sbWRzcy1kc2Mtc2xpY2UtaGVpZ2h0IiwgJmRhdGEpOwotCWlmIChyYykg ewotCQlwcl9lcnIoImZhaWxlZCB0byBwYXJzZSBxY29tLG1kc3MtZHNjLXNsaWNlLWhlaWdodFxu Iik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCXByaXZfaW5mby0+ZHNjLnNsaWNlX2hlaWdodCA9IGRh dGE7Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJxY29tLG1kc3MtZHNj LXNsaWNlLXdpZHRoIiwgJmRhdGEpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBw YXJzZSBxY29tLG1kc3MtZHNjLXNsaWNlLXdpZHRoXG4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0J cHJpdl9pbmZvLT5kc2Muc2xpY2Vfd2lkdGggPSBkYXRhOwotCi0JaW50Zl93aWR0aCA9IG1vZGUt PnRpbWluZy5oX2FjdGl2ZTsKLQlpZiAoaW50Zl93aWR0aCAlIHByaXZfaW5mby0+ZHNjLnNsaWNl X3dpZHRoKSB7Ci0JCXByX2VycigiaW52YWxpZCBzbGljZSB3aWR0aCBmb3IgdGhlIHBhbmVsXG4i KTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlwcml2X2luZm8tPmRzYy5waWNfd2lkdGggPSBtb2Rl LT50aW1pbmcuaF9hY3RpdmU7Ci0JcHJpdl9pbmZvLT5kc2MucGljX2hlaWdodCA9IG1vZGUtPnRp bWluZy52X2FjdGl2ZTsKLQotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFj b20sbWRzcy1kc2Mtc2xpY2UtcGVyLXBrdCIsCi0JCQkmZGF0YSk7Ci0JaWYgKHJjKSB7Ci0JCXBy X2VycigiZmFpbGVkIHRvIHBhcnNlIHFjb20sbWRzcy1kc2Mtc2xpY2UtcGVyLXBrdFxuIik7Ci0J CWdvdG8gZXJyb3I7Ci0JfQotCXByaXZfaW5mby0+ZHNjLnNsaWNlX3Blcl9wa3QgPSBkYXRhOwot Ci0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNzLWRzYy1iaXQt cGVyLWNvbXBvbmVudCIsCi0JCSZkYXRhKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQg dG8gcGFyc2UgcWNvbSxtZHNzLWRzYy1iaXQtcGVyLWNvbXBvbmVudFxuIik7Ci0JCWdvdG8gZXJy b3I7Ci0JfQotCXByaXZfaW5mby0+ZHNjLmJwYyA9IGRhdGE7Ci0KLQlyYyA9IG9mX3Byb3BlcnR5 X3JlYWRfdTMyKG9mX25vZGUsICJxY29tLG1kc3MtZHNjLWJpdC1wZXItcGl4ZWwiLAotCQkJJmRh dGEpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBwYXJzZSBxY29tLG1kc3MtZHNj LWJpdC1wZXItcGl4ZWxcbiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQlwcml2X2luZm8tPmRzYy5i cHAgPSBkYXRhOwotCi0JcHJpdl9pbmZvLT5kc2MuYmxvY2tfcHJlZF9lbmFibGUgPSBvZl9wcm9w ZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJInFjb20sbWRzcy1kc2MtYmxvY2stcHJlZGljdGlv bi1lbmFibGUiKTsKLQotCXByaXZfaW5mby0+ZHNjLmZ1bGxfZnJhbWVfc2xpY2VzID0gRElWX1JP VU5EX1VQKGludGZfd2lkdGgsCi0JCXByaXZfaW5mby0+ZHNjLnNsaWNlX3dpZHRoKTsKLQotCWRz aV9kc2NfcG9wdWxhdGVfc3RhdGljX3BhcmFtKCZwcml2X2luZm8tPmRzYyk7Ci0JZHNpX2RzY19w Y2xrX3BhcmFtX2NhbGMoJnByaXZfaW5mby0+ZHNjLCBpbnRmX3dpZHRoKTsKLQotZXJyb3I6Ci0J cmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9oZHJfY29uZmlnKHN0 cnVjdCBkc2lfcGFuZWwgKnBhbmVsLAotCQkJCSAgICAgc3RydWN0IGRldmljZV9ub2RlICpvZl9u b2RlKQotewotCi0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHJtX3BhbmVsX2hkcl9wcm9wZXJ0aWVz ICpoZHJfcHJvcDsKLQotCWhkcl9wcm9wID0gJnBhbmVsLT5oZHJfcHJvcHM7Ci0JaGRyX3Byb3At Pmhkcl9lbmFibGVkID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG9mX25vZGUsCi0JCSJxY29tLG1k c3MtZHNpLXBhbmVsLWhkci1lbmFibGVkIik7Ci0KLQlpZiAoaGRyX3Byb3AtPmhkcl9lbmFibGVk KSB7Ci0JCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkob2Zfbm9kZSwKLQkJCQkicWNv bSxtZHNzLWRzaS1wYW5lbC1oZHItY29sb3ItcHJpbWFyaWVzIiwKLQkJCQloZHJfcHJvcC0+ZGlz cGxheV9wcmltYXJpZXMsCi0JCQkJRElTUExBWV9QUklNQVJJRVNfTUFYKTsKLQkJaWYgKHJjKSB7 Ci0JCQlwcl9lcnIoIiVzOiVkLCBVbmFibGUgdG8gcmVhZCBjb2xvciBwcmltYXJpZXMscmM6JXUi LAotCQkJCQlfX2Z1bmNfXywgX19MSU5FX18sIHJjKTsKLQkJCWhkcl9wcm9wLT5oZHJfZW5hYmxl ZCA9IGZhbHNlOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0KLQkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFk X3UzMihvZl9ub2RlLAotCQkJInFjb20sbWRzcy1kc2ktcGFuZWwtcGVhay1icmlnaHRuZXNzIiwK LQkJCSYoaGRyX3Byb3AtPnBlYWtfYnJpZ2h0bmVzcykpOwotCQlpZiAocmMpIHsKLQkJCXByX2Vy cigiJXM6JWQsIFVuYWJsZSB0byByZWFkIGhkciBicmlnaHRuZXNzLCByYzoldSIsCi0JCQkJX19m dW5jX18sIF9fTElORV9fLCByYyk7Ci0JCQloZHJfcHJvcC0+aGRyX2VuYWJsZWQgPSBmYWxzZTsK LQkJCXJldHVybiByYzsKLQkJfQotCi0JCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9k ZSwKLQkJCSJxY29tLG1kc3MtZHNpLXBhbmVsLWJsYWNrbmVzcy1sZXZlbCIsCi0JCQkmKGhkcl9w cm9wLT5ibGFja25lc3NfbGV2ZWwpKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIiVzOiVkLCBV bmFibGUgdG8gcmVhZCBoZHIgYnJpZ2h0bmVzcywgcmM6JXUiLAotCQkJCV9fZnVuY19fLCBfX0xJ TkVfXywgcmMpOwotCQkJaGRyX3Byb3AtPmhkcl9lbmFibGVkID0gZmFsc2U7Ci0JCQlyZXR1cm4g cmM7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX3BhcnNl X3RvcG9sb2d5KAotCQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZV9wcml2X2luZm8gKnByaXZfaW5m bywKLQkJc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlLCBpbnQgdG9wb2xvZ3lfb3ZlcnJpZGUp Ci17Ci0Jc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5ICp0b3BvbG9neTsKLQl1MzIgdG9wX2Nv dW50LCB0b3Bfc2VsLCAqYXJyYXkgPSBOVUxMOwotCWludCBpLCBsZW4gPSAwOwotCWludCByYyA9 IC1FSU5WQUw7Ci0KLQlsZW4gPSBvZl9wcm9wZXJ0eV9jb3VudF91MzJfZWxlbXMob2Zfbm9kZSwg InFjb20sZGlzcGxheS10b3BvbG9neSIpOwotCWlmIChsZW4gPD0gMCB8fCBsZW4gJSBUT1BPTE9H WV9TRVRfTEVOIHx8Ci0JCQlsZW4gPiAoVE9QT0xPR1lfU0VUX0xFTiAqIE1BWF9UT1BPTE9HWSkp IHsKLQkJcHJfZXJyKCJpbnZhbGlkIHRvcG9sb2d5IGxpc3QgZm9yIHRoZSBwYW5lbCwgcmMgPSAl ZFxuIiwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JdG9wX2NvdW50ID0gbGVuIC8gVE9QT0xP R1lfU0VUX0xFTjsKLQotCWFycmF5ID0ga2NhbGxvYyhsZW4sIHNpemVvZih1MzIpLCBHRlBfS0VS TkVMKTsKLQlpZiAoIWFycmF5KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJjID0gb2ZfcHJvcGVy dHlfcmVhZF91MzJfYXJyYXkob2Zfbm9kZSwKLQkJCSJxY29tLGRpc3BsYXktdG9wb2xvZ3kiLCBh cnJheSwgbGVuKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJ1bmFibGUgdG8gcmVhZCB0aGUgZGlz cGxheSB0b3BvbG9naWVzLCByYyA9ICVkXG4iLCByYyk7Ci0JCWdvdG8gcmVhZF9mYWlsOwotCX0K LQotCXRvcG9sb2d5ID0ga2NhbGxvYyh0b3BfY291bnQsIHNpemVvZigqdG9wb2xvZ3kpLCBHRlBf S0VSTkVMKTsKLQlpZiAoIXRvcG9sb2d5KSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byByZWFk X2ZhaWw7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IHRvcF9jb3VudDsgaSsrKSB7Ci0JCXN0cnVj dCBtc21fZGlzcGxheV90b3BvbG9neSAqdG9wID0gJnRvcG9sb2d5W2ldOwotCi0JCXRvcC0+bnVt X2xtID0gYXJyYXlbaSAqIFRPUE9MT0dZX1NFVF9MRU5dOwotCQl0b3AtPm51bV9lbmMgPSBhcnJh eVtpICogVE9QT0xPR1lfU0VUX0xFTiArIDFdOwotCQl0b3AtPm51bV9pbnRmID0gYXJyYXlbaSAq IFRPUE9MT0dZX1NFVF9MRU4gKyAyXTsKLQl9OwotCi0JaWYgKHRvcG9sb2d5X292ZXJyaWRlID49 IDAgJiYgdG9wb2xvZ3lfb3ZlcnJpZGUgPCB0b3BfY291bnQpIHsKLQkJcHJfZGVidWcoIm92ZXJy aWRlIHRvcG9sb2d5OiBjZmc6JWQgbG06JWQgY29tcF9lbmM6JWQgaW50ZjolZFxuIiwKLQkJCXRv cG9sb2d5X292ZXJyaWRlLAotCQkJdG9wb2xvZ3lbdG9wb2xvZ3lfb3ZlcnJpZGVdLm51bV9sbSwK LQkJCXRvcG9sb2d5W3RvcG9sb2d5X292ZXJyaWRlXS5udW1fZW5jLAotCQkJdG9wb2xvZ3lbdG9w b2xvZ3lfb3ZlcnJpZGVdLm51bV9pbnRmKTsKLQkJdG9wX3NlbCA9IHRvcG9sb2d5X292ZXJyaWRl OwotCQlnb3RvIHBhcnNlX2RvbmU7Ci0JfQotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihv Zl9ub2RlLAotCQkJInFjb20sZGVmYXVsdC10b3BvbG9neS1pbmRleCIsICZ0b3Bfc2VsKTsKLQlp ZiAocmMpIHsKLQkJcHJfZXJyKCJubyBkZWZhdWx0IHRvcG9sb2d5IHNlbGVjdGVkLCByYyA9ICVk XG4iLCByYyk7Ci0JCWdvdG8gcGFyc2VfZmFpbDsKLQl9Ci0KLQlpZiAodG9wX3NlbCA+PSB0b3Bf Y291bnQpIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlwcl9lcnIoImRlZmF1bHQgdG9wb2xvZ3kgaXMg c3BlY2lmaWVkIGlzIG5vdCB2YWxpZCwgcmMgPSAlZFxuIiwKLQkJCXJjKTsKLQkJZ290byBwYXJz ZV9mYWlsOwotCX0KLQotCXByX2RlYnVnKCJkZWZhdWx0IHRvcG9sb2d5OiBsbTogJWQgY29tcF9l bmM6JWQgaW50ZjogJWRcbiIsCi0JCXRvcG9sb2d5W3RvcF9zZWxdLm51bV9sbSwKLQkJdG9wb2xv Z3lbdG9wX3NlbF0ubnVtX2VuYywKLQkJdG9wb2xvZ3lbdG9wX3NlbF0ubnVtX2ludGYpOwotCi1w YXJzZV9kb25lOgotCW1lbWNweSgmcHJpdl9pbmZvLT50b3BvbG9neSwgJnRvcG9sb2d5W3RvcF9z ZWxdLAotCQlzaXplb2Yoc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5KSk7Ci1wYXJzZV9mYWls OgotCWtmcmVlKHRvcG9sb2d5KTsKLXJlYWRfZmFpbDoKLQlrZnJlZShhcnJheSk7Ci0KLQlyZXR1 cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX3BhcnNlX2Rtc19pbmZvKHN0cnVjdCBk c2lfcGFuZWwgKnBhbmVsLAotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKLXsKLQlpbnQg ZG1zX2VuYWJsZWQ7Ci0JY29uc3QgY2hhciAqZGF0YTsKLQotCWlmICghb2Zfbm9kZSB8fCAhcGFu ZWwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwot CX0KLQotCXBhbmVsLT5kbXNfbW9kZSA9IERTSV9ETVNfTU9ERV9ESVNBQkxFRDsKLQlkbXNfZW5h YmxlZCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChvZl9ub2RlLAotCQkicWNvbSxkeW5hbWljLW1v ZGUtc3dpdGNoLWVuYWJsZWQiKTsKLQlpZiAoIWRtc19lbmFibGVkKQotCQlyZXR1cm4gMDsKLQot CWRhdGEgPSBvZl9nZXRfcHJvcGVydHkob2Zfbm9kZSwgInFjb20sZHluYW1pYy1tb2RlLXN3aXRj aC10eXBlIiwgTlVMTCk7Ci0JaWYgKGRhdGEgJiYgIXN0cmNtcChkYXRhLCAiZHluYW1pYy1yZXNv bHV0aW9uLXN3aXRjaC1pbW1lZGlhdGUiKSkgewotCQlwYW5lbC0+ZG1zX21vZGUgPSBEU0lfRE1T X01PREVfUkVTX1NXSVRDSF9JTU1FRElBVEU7Ci0JfSBlbHNlIHsKLQkJcHJfZXJyKCJbJXNdIHVu c3VwcG9ydGVkIGR5bmFtaWMgc3dpdGNoIG1vZGU6ICVzXG4iLAotCQkJCQkJCXBhbmVsLT5uYW1l LCBkYXRhKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19OwotCi0vKgot ICogVGhlIGxlbmd0aCBvZiBhbGwgdGhlIHZhbGlkIHZhbHVlcyB0byBiZSBjaGVja2VkIHNob3Vs ZCBub3QgYmUgZ3JlYXRlcgotICogdGhhbiB0aGUgbGVuZ3RoIG9mIHJldHVybmVkIGRhdGEgZnJv bSByZWFkIGNvbW1hbmQuCi0gKi8KLXN0YXRpYyBib29sCi1kc2lfcGFuZWxfcGFyc2VfZXNkX2No ZWNrX3ZhbGlkX3BhcmFtcyhzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwgdTMyIGNvdW50KQotewot CWludCBpOwotCXN0cnVjdCBkcm1fcGFuZWxfZXNkX2NvbmZpZyAqY29uZmlnID0gJnBhbmVsLT5l c2RfY29uZmlnOwotCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLQkJaWYgKGNvbmZp Zy0+c3RhdHVzX3ZhbGlkX3BhcmFtc1tpXSA+Ci0JCQkJY29uZmlnLT5zdGF0dXNfY21kc19ybGVu W2ldKSB7Ci0JCQlwcl9kZWJ1ZygiaWdub3JlIHZhbGlkIHBhcmFtc1xuIik7Ci0JCQlyZXR1cm4g ZmFsc2U7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgZHNpX3Bh bmVsX3BhcnNlX2VzZF9zdGF0dXNfbGVuKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JY2hhciAq cHJvcF9rZXksIHUzMiAqKnRhcmdldCwgdTMyIGNtZF9jbnQpCi17Ci0JaW50IHRtcDsKLQotCWlm ICghb2ZfZmluZF9wcm9wZXJ0eShucCwgcHJvcF9rZXksICZ0bXApKQotCQlyZXR1cm4gZmFsc2U7 Ci0KLQl0bXAgLz0gc2l6ZW9mKHUzMik7Ci0JaWYgKHRtcCAhPSBjbWRfY250KSB7Ci0JCXByX2Vy cigicmVxdWVzdCBwcm9wZXJ0eSglZCkgZG8gbm90IG1hdGNoIGNtZCBjb3VudCglZClcbiIsCi0J CQkJdG1wLCBjbWRfY250KTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCSp0YXJnZXQgPSBrY2Fs bG9jKHRtcCwgc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOwotCWlmIChJU19FUlJfT1JfTlVMTCgq dGFyZ2V0KSkgewotCQlwcl9lcnIoIkVycm9yIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBwcm9wZXJ0 eVxuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzJf YXJyYXkobnAsIHByb3Bfa2V5LCAqdGFyZ2V0LCB0bXApKSB7Ci0JCXByX2VycigiY2Fubm90IGdl dCB2YWx1ZXMgZnJvbSBkdHNcbiIpOwotCQlrZnJlZSgqdGFyZ2V0KTsKLQkJKnRhcmdldCA9IE5V TEw7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHZv aWQgZHNpX3BhbmVsX2VzZF9jb25maWdfZGVpbml0KHN0cnVjdCBkcm1fcGFuZWxfZXNkX2NvbmZp ZyAqZXNkX2NvbmZpZykKLXsKLQlrZnJlZShlc2RfY29uZmlnLT5yZXR1cm5fYnVmKTsKLQlrZnJl ZShlc2RfY29uZmlnLT5zdGF0dXNfdmFsdWUpOwotCWtmcmVlKGVzZF9jb25maWctPnN0YXR1c192 YWxpZF9wYXJhbXMpOwotCWtmcmVlKGVzZF9jb25maWctPnN0YXR1c19jbWRzX3JsZW4pOwotCWtm cmVlKGVzZF9jb25maWctPnN0YXR1c19jbWQuY21kcyk7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3Bh bmVsX3BhcnNlX2VzZF9jb25maWcoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsCi0JCQkJICAgICBz dHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpCi17Ci0JaW50IHJjID0gMDsKLQl1MzIgdG1wOwot CXUzMiBpLCBzdGF0dXNfbGVuLCAqbGVucDsKLQlzdHJ1Y3QgcHJvcGVydHkgKmRhdGE7Ci0JY29u c3QgY2hhciAqc3RyaW5nOwotCXN0cnVjdCBkcm1fcGFuZWxfZXNkX2NvbmZpZyAqZXNkX2NvbmZp ZzsKLQotCWVzZF9jb25maWcgPSAmcGFuZWwtPmVzZF9jb25maWc7Ci0JZXNkX2NvbmZpZy0+ZXNk X2VuYWJsZWQgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJInFjb20sZXNkLWNo ZWNrLWVuYWJsZWQiKTsKLQotCWlmICghZXNkX2NvbmZpZy0+ZXNkX2VuYWJsZWQpCi0JCXJldHVy biAwOwotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhvZl9ub2RlLAotCQkJInFjb20s bWRzcy1kc2ktcGFuZWwtc3RhdHVzLWNoZWNrLW1vZGUiLCAmc3RyaW5nKTsKLQlpZiAoIXJjKSB7 Ci0JCWlmICghc3RyY21wKHN0cmluZywgImJ0YV9jaGVjayIpKSB7Ci0JCQllc2RfY29uZmlnLT5z dGF0dXNfbW9kZSA9IEVTRF9NT0RFX1NXX0JUQTsKLQkJfSBlbHNlIGlmICghc3RyY21wKHN0cmlu ZywgInJlZ19yZWFkIikpIHsKLQkJCWVzZF9jb25maWctPnN0YXR1c19tb2RlID0gRVNEX01PREVf UkVHX1JFQUQ7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcChzdHJpbmcsICJ0ZV9zaWduYWxfY2hlY2si KSkgewotCQkJaWYgKHBhbmVsLT5wYW5lbF9tb2RlID09IERTSV9PUF9DTURfTU9ERSkgewotCQkJ CWVzZF9jb25maWctPnN0YXR1c19tb2RlID0gRVNEX01PREVfUEFORUxfVEU7Ci0JCQl9IGVsc2Ug ewotCQkJCXByX2VycigiVEUtRVNEIG5vdCB2YWxpZCBmb3IgdmlkZW8gbW9kZVxuIik7Ci0JCQkJ cmMgPSAtRUlOVkFMOwotCQkJCWdvdG8gZXJyb3I7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlwcl9l cnIoIk5vIHZhbGlkIHBhbmVsLXN0YXR1cy1jaGVjay1tb2RlIHN0cmluZ1xuIik7Ci0JCQlyYyA9 IC1FSU5WQUw7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfSBlbHNlIHsKLQkJcHJfZGVidWcoInN0 YXR1cyBjaGVjayBtZXRob2Qgbm90IGRlZmluZWQhXG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQln b3RvIGVycm9yOwotCX0KLQotCWlmICgoZXNkX2NvbmZpZy0+c3RhdHVzX21vZGUgPT0gRVNEX01P REVfU1dfQlRBKSB8fAotCQkoZXNkX2NvbmZpZy0+c3RhdHVzX21vZGUgPT0gRVNEX01PREVfUEFO RUxfVEUpKQotCQlyZXR1cm4gMDsKLQotCWRzaV9wYW5lbF9wYXJzZV9jbWRfc2V0c19zdWIoJmVz ZF9jb25maWctPnN0YXR1c19jbWQsCi0JCQkJRFNJX0NNRF9TRVRfUEFORUxfU1RBVFVTLCBvZl9u b2RlKTsKLQlpZiAoIWVzZF9jb25maWctPnN0YXR1c19jbWQuY291bnQpIHsKLQkJcHJfZXJyKCJw YW5lbCBzdGF0dXMgY29tbWFuZCBwYXJzaW5nIGZhaWxlZFxuIik7Ci0JCXJjID0gLUVJTlZBTDsK LQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAoIWRzaV9wYW5lbF9wYXJzZV9lc2Rfc3RhdHVzX2xl bihvZl9ub2RlLAotCQkicWNvbSxtZHNzLWRzaS1wYW5lbC1zdGF0dXMtcmVhZC1sZW5ndGgiLAot CQkJJnBhbmVsLT5lc2RfY29uZmlnLnN0YXR1c19jbWRzX3JsZW4sCi0JCQkJZXNkX2NvbmZpZy0+ c3RhdHVzX2NtZC5jb3VudCkpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHN0YXR1cyByZWFkIGxlbmd0 aFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjE7Ci0JfQotCi0JaWYgKGRzaV9w YW5lbF9wYXJzZV9lc2Rfc3RhdHVzX2xlbihvZl9ub2RlLAotCQkicWNvbSxtZHNzLWRzaS1wYW5l bC1zdGF0dXMtdmFsaWQtcGFyYW1zIiwKLQkJCSZwYW5lbC0+ZXNkX2NvbmZpZy5zdGF0dXNfdmFs aWRfcGFyYW1zLAotCQkJCWVzZF9jb25maWctPnN0YXR1c19jbWQuY291bnQpKSB7Ci0JCWlmICgh ZHNpX3BhbmVsX3BhcnNlX2VzZF9jaGVja192YWxpZF9wYXJhbXMocGFuZWwsCi0JCQkJCWVzZF9j b25maWctPnN0YXR1c19jbWQuY291bnQpKSB7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVy cm9yMjsKLQkJfQotCX0KLQotCXN0YXR1c19sZW4gPSAwOwotCWxlbnAgPSBlc2RfY29uZmlnLT5z dGF0dXNfdmFsaWRfcGFyYW1zID86IGVzZF9jb25maWctPnN0YXR1c19jbWRzX3JsZW47Ci0JZm9y IChpID0gMDsgaSA8IGVzZF9jb25maWctPnN0YXR1c19jbWQuY291bnQ7ICsraSkKLQkJc3RhdHVz X2xlbiArPSBsZW5wW2ldOwotCi0JaWYgKCFzdGF0dXNfbGVuKSB7Ci0JCXJjID0gLUVJTlZBTDsK LQkJZ290byBlcnJvcjI7Ci0JfQotCi0JLyoKLQkgKiBTb21lIHBhbmVsIG1heSBuZWVkIG11bHRp cGxlIHJlYWQgY29tbWFuZHMgdG8gcHJvcGVybHkKLQkgKiBjaGVjayBwYW5lbCBzdGF0dXMuIERv IGEgc2FuaXR5IGNoZWNrIGZvciBwcm9wZXIgc3RhdHVzCi0JICogdmFsdWUgd2hpY2ggd2lsbCBi ZSBjb21wYXJlZCB3aXRoIHRoZSB2YWx1ZSByZWFkIGJ5IGRzaQotCSAqIGNvbnRyb2xsZXIgZHVy aW5nIEVTRCBjaGVjay4gQWxzbyBjaGVjayBpZiBtdWx0aXBsZSByZWFkCi0JICogY29tbWFuZHMg YXJlIHRoZXJlIHRoZW4sIHRoZXJlIHNob3VsZCBiZSBjb3JyZXNwb25kaW5nCi0JICogc3RhdHVz IGNoZWNrIHZhbHVlcyBmb3IgZWFjaCByZWFkIGNvbW1hbmQuCi0JICovCi0JZGF0YSA9IG9mX2Zp bmRfcHJvcGVydHkob2Zfbm9kZSwKLQkJCSJxY29tLG1kc3MtZHNpLXBhbmVsLXN0YXR1cy12YWx1 ZSIsICZ0bXApOwotCXRtcCAvPSBzaXplb2YodTMyKTsKLQlpZiAoIUlTX0VSUl9PUl9OVUxMKGRh dGEpICYmIHRtcCAhPSAwICYmICh0bXAgJSBzdGF0dXNfbGVuKSA9PSAwKSB7Ci0JCWVzZF9jb25m aWctPmdyb3VwcyA9IHRtcCAvIHN0YXR1c19sZW47Ci0JfSBlbHNlIHsKLQkJcHJfZXJyKCJlcnJv ciBwYXJzZSBwYW5lbC1zdGF0dXMtdmFsdWVcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8g ZXJyb3IyOwotCX0KLQotCWVzZF9jb25maWctPnN0YXR1c192YWx1ZSA9Ci0JCWt6YWxsb2Moc2l6 ZW9mKHUzMikgKiBzdGF0dXNfbGVuICogZXNkX2NvbmZpZy0+Z3JvdXBzLAotCQkJR0ZQX0tFUk5F TCk7Ci0JaWYgKCFlc2RfY29uZmlnLT5zdGF0dXNfdmFsdWUpIHsKLQkJcmMgPSAtRU5PTUVNOwot CQlnb3RvIGVycm9yMjsKLQl9Ci0KLQllc2RfY29uZmlnLT5yZXR1cm5fYnVmID0ga2NhbGxvYyhz dGF0dXNfbGVuICogZXNkX2NvbmZpZy0+Z3JvdXBzLAotCQkJc2l6ZW9mKHVuc2lnbmVkIGNoYXIp LCBHRlBfS0VSTkVMKTsKLQlpZiAoIWVzZF9jb25maWctPnJldHVybl9idWYpIHsKLQkJcmMgPSAt RU5PTUVNOwotCQlnb3RvIGVycm9yMzsKLQl9Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMy X2FycmF5KG9mX25vZGUsCi0JCSJxY29tLG1kc3MtZHNpLXBhbmVsLXN0YXR1cy12YWx1ZSIsCi0J CWVzZF9jb25maWctPnN0YXR1c192YWx1ZSwgZXNkX2NvbmZpZy0+Z3JvdXBzICogc3RhdHVzX2xl bik7Ci0JaWYgKHJjKSB7Ci0JCXByX2RlYnVnKCJlcnJvciByZWFkaW5nIHBhbmVsIHN0YXR1cyB2 YWx1ZXNcbiIpOwotCQltZW1zZXQoZXNkX2NvbmZpZy0+c3RhdHVzX3ZhbHVlLCAwLAotCQkJCWVz ZF9jb25maWctPmdyb3VwcyAqIHN0YXR1c19sZW4pOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJv cjM6Ci0Ja2ZyZWUoZXNkX2NvbmZpZy0+c3RhdHVzX3ZhbHVlKTsKLWVycm9yMjoKLQlrZnJlZShl c2RfY29uZmlnLT5zdGF0dXNfdmFsaWRfcGFyYW1zKTsKLQlrZnJlZShlc2RfY29uZmlnLT5zdGF0 dXNfY21kc19ybGVuKTsKLWVycm9yMToKLQlrZnJlZShlc2RfY29uZmlnLT5zdGF0dXNfY21kLmNt ZHMpOwotZXJyb3I6Ci0JcGFuZWwtPmVzZF9jb25maWcuZXNkX2VuYWJsZWQgPSBmYWxzZTsKLQly ZXR1cm4gcmM7Ci19Ci0KLXN0cnVjdCBkc2lfcGFuZWwgKmRzaV9wYW5lbF9nZXQoc3RydWN0IGRl dmljZSAqcGFyZW50LAotCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSwKLQkJCQlpbnQg dG9wb2xvZ3lfb3ZlcnJpZGUpCi17Ci0Jc3RydWN0IGRzaV9wYW5lbCAqcGFuZWw7Ci0JaW50IHJj ID0gMDsKLQotCXBhbmVsID0ga3phbGxvYyhzaXplb2YoKnBhbmVsKSwgR0ZQX0tFUk5FTCk7Ci0J aWYgKCFwYW5lbCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQlwYW5lbC0+bmFtZSA9 IG9mX2dldF9wcm9wZXJ0eShvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS1wYW5lbC1uYW1lIiwKLQkJ CQkgICAgICBOVUxMKTsKLQlpZiAoIXBhbmVsLT5uYW1lKQotCQlwYW5lbC0+bmFtZSA9IERTSV9Q QU5FTF9ERUZBVUxUX0xBQkVMOwotCi0JcmMgPSBkc2lfcGFuZWxfcGFyc2VfaG9zdF9jb25maWco cGFuZWwsIG9mX25vZGUpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBwYXJzZSBo b3N0IGNvbmZpZ3VyYXRpb24sIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0J cmMgPSBkc2lfcGFuZWxfcGFyc2VfcGFuZWxfbW9kZShwYW5lbCwgb2Zfbm9kZSk7Ci0JaWYgKHJj KSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIHBhbmVsIG1vZGUgY29uZmlndXJhdGlvbiwg cmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF9wYXJz ZV9kZnBzX2NhcHMoJnBhbmVsLT5kZnBzX2NhcHMsIG9mX25vZGUsIHBhbmVsLT5uYW1lKTsKLQlp ZiAocmMpCi0JCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIGRmcHMgY29uZmlndXJhdGlvbiwgcmM9 JWRcbiIsIHJjKTsKLQotCXJjID0gZHNpX3BhbmVsX3BhcnNlX3BoeV9wcm9wcygmcGFuZWwtPnBo eV9wcm9wcywgb2Zfbm9kZSwgcGFuZWwtPm5hbWUpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZh aWxlZCB0byBwYXJzZSBwYW5lbCBwaHlzaWNhbCBkaW1lbnNpb24sIHJjPSVkXG4iLCByYyk7Ci0J CWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBkc2lfcGFuZWxfcGFyc2VfcG93ZXJfY2ZnKHBhcmVu dCwgcGFuZWwsIG9mX25vZGUpOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2Ug cG93ZXIgY29uZmlnLCByYz0lZFxuIiwgcmMpOwotCi0JcmMgPSBkc2lfcGFuZWxfcGFyc2VfZ3Bp b3MocGFuZWwsIG9mX25vZGUpOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2Ug cGFuZWwgZ3Bpb3MsIHJjPSVkXG4iLCByYyk7Ci0KLQlyYyA9IGRzaV9wYW5lbF9wYXJzZV9ibF9j b25maWcocGFuZWwsIG9mX25vZGUpOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcGFy c2UgYmFja2xpZ2h0IGNvbmZpZywgcmM9JWRcbiIsIHJjKTsKLQotCi0JcmMgPSBkc2lfcGFuZWxf cGFyc2VfbWlzY19mZWF0dXJlcyhwYW5lbCwgb2Zfbm9kZSk7Ci0JaWYgKHJjKQotCQlwcl9lcnIo ImZhaWxlZCB0byBwYXJzZSBtaXNjIGZlYXR1cmVzLCByYz0lZFxuIiwgcmMpOwotCi0JcmMgPSBk c2lfcGFuZWxfcGFyc2VfaGRyX2NvbmZpZyhwYW5lbCwgb2Zfbm9kZSk7Ci0JaWYgKHJjKQotCQlw cl9lcnIoImZhaWxlZCB0byBwYXJzZSBoZHIgY29uZmlnLCByYz0lZFxuIiwgcmMpOwotCi0JcmMg PSBkc2lfcGFuZWxfZ2V0X21vZGVfY291bnQocGFuZWwsIG9mX25vZGUpOwotCWlmIChyYykgewot CQlwcl9lcnIoImZhaWxlZCB0byBnZXQgbW9kZSBjb3VudCwgcmM9JWRcbiIsIHJjKTsKLQkJZ290 byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF9wYXJzZV9kbXNfaW5mbyhwYW5lbCwgb2Zf bm9kZSk7Ci0JaWYgKHJjKQotCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIGdldCBkbXMgaW5mbywgcmM9 JWRcbiIsIHJjKTsKLQotCXJjID0gZHNpX3BhbmVsX3BhcnNlX2VzZF9jb25maWcocGFuZWwsIG9m X25vZGUpOwotCWlmIChyYykgewotCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIHBhcnNlIGVzZCBjb25m aWcsIHJjPSVkXG4iLCByYyk7Ci0JfSBlbHNlIHsKLQkJdTggKmVzZF9tb2RlID0gTlVMTDsKLQot CQlpZiAocGFuZWwtPmVzZF9jb25maWcuc3RhdHVzX21vZGUgPT0gRVNEX01PREVfUkVHX1JFQUQp Ci0JCQllc2RfbW9kZSA9ICJyZWdpc3Rlcl9yZWFkIjsKLQkJZWxzZSBpZiAocGFuZWwtPmVzZF9j b25maWcuc3RhdHVzX21vZGUgPT0gRVNEX01PREVfU1dfQlRBKQotCQkJZXNkX21vZGUgPSAiYnRh X3RyaWdnZXIiOwotCQllbHNlIGlmIChwYW5lbC0+ZXNkX2NvbmZpZy5zdGF0dXNfbW9kZSA9PSAg RVNEX01PREVfUEFORUxfVEUpCi0JCQllc2RfbW9kZSA9ICJ0ZV9jaGVjayI7Ci0KLQkJcHJfaW5m bygiRVNEIGVuYWJsZWQgd2l0aCBtb2RlOiAlc1xuIiwgZXNkX21vZGUpOwotCX0KLQotCXBhbmVs LT5wYW5lbF9vZl9ub2RlID0gb2Zfbm9kZTsKLQlkcm1fcGFuZWxfaW5pdCgmcGFuZWwtPmRybV9w YW5lbCk7Ci0JbXV0ZXhfaW5pdCgmcGFuZWwtPnBhbmVsX2xvY2spOwotCXBhbmVsLT5wYXJlbnQg PSBwYXJlbnQ7Ci0JcmV0dXJuIHBhbmVsOwotZXJyb3I6Ci0Ja2ZyZWUocGFuZWwpOwotCXJldHVy biBFUlJfUFRSKHJjKTsKLX0KLQotdm9pZCBkc2lfcGFuZWxfcHV0KHN0cnVjdCBkc2lfcGFuZWwg KnBhbmVsKQotewotCS8qIGZyZWUgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgRVNEIGNoZWNrICov Ci0JZHNpX3BhbmVsX2VzZF9jb25maWdfZGVpbml0KCZwYW5lbC0+ZXNkX2NvbmZpZyk7Ci0KLQlr ZnJlZShwYW5lbCk7Ci19Ci0KLWludCBkc2lfcGFuZWxfZHJ2X2luaXQoc3RydWN0IGRzaV9wYW5l bCAqcGFuZWwsCi0JCSAgICAgICBzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCkKLXsKLQlpbnQg cmMgPSAwOwotCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldjsKLQotCWlmICghcGFuZWwgfHwg IWhvc3QpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFM OwotCX0KLQotCW11dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQotCWRldiA9ICZwYW5l bC0+bWlwaV9kZXZpY2U7Ci0KLQlkZXYtPmhvc3QgPSBob3N0OwotCS8qCi0JICogV2UgZG9udCBo YXZlIGRldmljZSBzdHJ1Y3R1cmUgc2luY2UgcGFuZWwgaXMgbm90IGEgZGV2aWNlIG5vZGUuCi0J ICogV2hlbiB1c2luZyBkcm0gcGFuZWwgZnJhbWV3b3JrLCB0aGUgZGV2aWNlIGlzIHByb2JlZCB3 aGVuIHRoZSBob3N0IGlzCi0JICogY3JlYXRlLgotCSAqLwotCWRldi0+Y2hhbm5lbCA9IDA7Ci0J ZGV2LT5sYW5lcyA9IDQ7Ci0KLQlwYW5lbC0+aG9zdCA9IGhvc3Q7Ci0JcmMgPSBkc2lfcGFuZWxf dnJlZ19nZXQocGFuZWwpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGdl dCBwYW5lbCByZWd1bGF0b3JzLCByYz0lZFxuIiwKLQkJICAgICAgIHBhbmVsLT5uYW1lLCByYyk7 Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF9waW5jdHJsX2luaXQocGFuZWwp OwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGluaXQgcGluY3RybCwgcmM9 JWRcbiIsIHBhbmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3JfdnJlZ19wdXQ7Ci0JfQotCi0J cmMgPSBkc2lfcGFuZWxfZ3Bpb19yZXF1ZXN0KHBhbmVsKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJy KCJbJXNdIGZhaWxlZCB0byByZXF1ZXN0IGdwaW9zLCByYz0lZFxuIiwgcGFuZWwtPm5hbWUsCi0J CSAgICAgICByYyk7Ci0JCWdvdG8gZXJyb3JfcGluY3RybF9kZWluaXQ7Ci0JfQotCi0JcmMgPSBk c2lfcGFuZWxfYmxfcmVnaXN0ZXIocGFuZWwpOwotCWlmIChyYykgewotCQlpZiAocmMgIT0gLUVQ Uk9CRV9ERUZFUikKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gcmVnaXN0ZXIgYmFja2xpZ2h0 LCByYz0lZFxuIiwKLQkJCSAgICAgICBwYW5lbC0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yX2dw aW9fcmVsZWFzZTsKLQl9Ci0KLQlnb3RvIGV4aXQ7Ci0KLWVycm9yX2dwaW9fcmVsZWFzZToKLQko dm9pZClkc2lfcGFuZWxfZ3Bpb19yZWxlYXNlKHBhbmVsKTsKLWVycm9yX3BpbmN0cmxfZGVpbml0 OgotCSh2b2lkKWRzaV9wYW5lbF9waW5jdHJsX2RlaW5pdChwYW5lbCk7Ci1lcnJvcl92cmVnX3B1 dDoKLQkodm9pZClkc2lfcGFuZWxfdnJlZ19wdXQocGFuZWwpOwotZXhpdDoKLQltdXRleF91bmxv Y2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfcGFuZWxf ZHJ2X2RlaW5pdChzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQgcmMgPSAwOwotCi0J aWYgKCFwYW5lbCkgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCi0JcmMgPSBk c2lfcGFuZWxfYmxfdW5yZWdpc3RlcihwYW5lbCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlslc10g ZmFpbGVkIHRvIHVucmVnaXN0ZXIgYmFja2xpZ2h0LCByYz0lZFxuIiwKLQkJICAgICAgIHBhbmVs LT5uYW1lLCByYyk7Ci0KLQlyYyA9IGRzaV9wYW5lbF9ncGlvX3JlbGVhc2UocGFuZWwpOwotCWlm IChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byByZWxlYXNlIGdwaW9zLCByYz0lZFxuIiwg cGFuZWwtPm5hbWUsCi0JCSAgICAgICByYyk7Ci0KLQlyYyA9IGRzaV9wYW5lbF9waW5jdHJsX2Rl aW5pdChwYW5lbCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGRlaW5pdCBn cGlvcywgcmM9JWRcbiIsIHBhbmVsLT5uYW1lLAotCQkgICAgICAgcmMpOwotCi0JcmMgPSBkc2lf cGFuZWxfdnJlZ19wdXQocGFuZWwpOwotCWlmIChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0 byBwdXQgcmVncywgcmM9JWRcbiIsIHBhbmVsLT5uYW1lLCByYyk7Ci0KLQlwYW5lbC0+aG9zdCA9 IE5VTEw7Ci0JbWVtc2V0KCZwYW5lbC0+bWlwaV9kZXZpY2UsIDB4MCwgc2l6ZW9mKHBhbmVsLT5t aXBpX2RldmljZSkpOwotCi0JbXV0ZXhfdW5sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0JcmV0 dXJuIHJjOwotfQotCi1pbnQgZHNpX3BhbmVsX3ZhbGlkYXRlX21vZGUoc3RydWN0IGRzaV9wYW5l bCAqcGFuZWwsCi0JCQkgICAgc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGUpCi17Ci0JcmV0 dXJuIDA7Ci19Ci0KLWludCBkc2lfcGFuZWxfZ2V0X21vZGVfY291bnQoc3RydWN0IGRzaV9wYW5l bCAqcGFuZWwsCi0Jc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlKQotewotCWNvbnN0IHUzMiBT SU5HTEVfTU9ERV9TVVBQT1JUID0gMTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnRpbWluZ3NfbnA7 Ci0JaW50IGNvdW50LCByYyA9IDA7Ci0KLQlpZiAoIW9mX25vZGUgfHwgIXBhbmVsKSB7Ci0JCXBy X2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlwYW5l bC0+bnVtX3RpbWluZ19ub2RlcyA9IDA7Ci0KLQl0aW1pbmdzX25wID0gb2ZfZ2V0X2NoaWxkX2J5 X25hbWUob2Zfbm9kZSwKLQkJCSJxY29tLG1kc3MtZHNpLWRpc3BsYXktdGltaW5ncyIpOwotCWlm ICghdGltaW5nc19ucCkgewotCQlwcl9lcnIoIm5vIGRpc3BsYXkgdGltaW5nIG5vZGVzIGRlZmlu ZWRcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JY291bnQgPSBv Zl9nZXRfY2hpbGRfY291bnQodGltaW5nc19ucCk7Ci0JaWYgKCFjb3VudCB8fCBjb3VudCA+IERT SV9NT0RFX01BWCkgewotCQlwcl9lcnIoImludmFsaWQgY291bnQgb2YgdGltaW5nIG5vZGVzOiAl ZFxuIiwgY291bnQpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JLyog Tm8gbXVsdGlyZXNvbHV0aW9uIHN1cHBvcnQgaXMgYXZhaWxhYmxlIGZvciB2aWRlbyBtb2RlIHBh bmVscyAqLwotCWlmIChwYW5lbC0+cGFuZWxfbW9kZSAhPSBEU0lfT1BfQ01EX01PREUpCi0JCWNv dW50ID0gU0lOR0xFX01PREVfU1VQUE9SVDsKLQotCXBhbmVsLT5udW1fdGltaW5nX25vZGVzID0g Y291bnQ7Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9wYW5lbF9nZXRfcGh5 X3Byb3BzKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsLAotCQkJICAgIHN0cnVjdCBkc2lfcGFuZWxf cGh5X3Byb3BzICpwaHlfcHJvcHMpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghcGFuZWwgfHwg IXBoeV9wcm9wcykgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCi0JbWVtY3B5 KHBoeV9wcm9wcywgJnBhbmVsLT5waHlfcHJvcHMsIHNpemVvZigqcGh5X3Byb3BzKSk7Ci0KLQlt dXRleF91bmxvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBk c2lfcGFuZWxfZ2V0X2RmcHNfY2FwcyhzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwKLQkJCSAgICBz dHJ1Y3QgZHNpX2RmcHNfY2FwYWJpbGl0aWVzICpkZnBzX2NhcHMpCi17Ci0JaW50IHJjID0gMDsK LQotCWlmICghcGFuZWwgfHwgIWRmcHNfY2FwcykgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW1z XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGFuZWwtPnBhbmVs X2xvY2spOwotCi0JbWVtY3B5KGRmcHNfY2FwcywgJnBhbmVsLT5kZnBzX2NhcHMsIHNpemVvZigq ZGZwc19jYXBzKSk7Ci0KLQltdXRleF91bmxvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyZXR1 cm4gcmM7Ci19Ci0KLXZvaWQgZHNpX3BhbmVsX3B1dF9tb2RlKHN0cnVjdCBkc2lfZGlzcGxheV9t b2RlICptb2RlKQotewotCWludCBpOwotCi0JaWYgKCFtb2RlLT5wcml2X2luZm8pCi0JCXJldHVy bjsKLQotCWZvciAoaSA9IDA7IGkgPCBEU0lfQ01EX1NFVF9NQVg7IGkrKykKLQkJZHNpX3BhbmVs X2Rlc3Ryb3lfY21kX3BhY2tldHMoJm1vZGUtPnByaXZfaW5mby0+Y21kX3NldHNbaV0pOwotCi0J a2ZyZWUobW9kZS0+cHJpdl9pbmZvKTsKLX0KLQotaW50IGRzaV9wYW5lbF9nZXRfbW9kZShzdHJ1 Y3QgZHNpX3BhbmVsICpwYW5lbCwKLQkJCXUzMiBpbmRleCwgc3RydWN0IGRzaV9kaXNwbGF5X21v ZGUgKm1vZGUsCi0JCQlpbnQgdG9wb2xvZ3lfb3ZlcnJpZGUpCi17Ci0Jc3RydWN0IGRldmljZV9u b2RlICp0aW1pbmdzX25wLCAqY2hpbGRfbnA7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X21vZGVfcHJp dl9pbmZvICpwcnZfaW5mbzsKLQl1MzIgY2hpbGRfaWR4ID0gMDsKLQlpbnQgcmMgPSAwLCBudW1f dGltaW5nczsKLQotCWlmICghcGFuZWwgfHwgIW1vZGUpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBh cmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJnBhbmVsLT5w YW5lbF9sb2NrKTsKLQotCW1vZGUtPnByaXZfaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCptb2RlLT5w cml2X2luZm8pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1vZGUtPnByaXZfaW5mbykgewotCQlyYyA9 IC1FTk9NRU07Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlwcnZfaW5mbyA9IG1vZGUtPnByaXZfaW5m bzsKLQotCXRpbWluZ3NfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShwYW5lbC0+cGFuZWxfb2Zf bm9kZSwKLQkJInFjb20sbWRzcy1kc2ktZGlzcGxheS10aW1pbmdzIik7Ci0JaWYgKCF0aW1pbmdz X25wKSB7Ci0JCXByX2Vycigibm8gZGlzcGxheSB0aW1pbmcgbm9kZXMgZGVmaW5lZFxuIik7Ci0J CXJjID0gLUVJTlZBTDsKLQkJZ290byBwYXJzZV9mYWlsOwotCX0KLQotCW51bV90aW1pbmdzID0g b2ZfZ2V0X2NoaWxkX2NvdW50KHRpbWluZ3NfbnApOwotCWlmICghbnVtX3RpbWluZ3MgfHwgbnVt X3RpbWluZ3MgPiBEU0lfTU9ERV9NQVgpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGNvdW50IG9mIHRp bWluZyBub2RlczogJWRcbiIsIG51bV90aW1pbmdzKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3Rv IHBhcnNlX2ZhaWw7Ci0JfQotCi0JZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZSh0aW1pbmdzX25wLCBj aGlsZF9ucCkgewotCQlpZiAoaW5kZXggIT0gY2hpbGRfaWR4KyspCi0JCQljb250aW51ZTsKLQot CQlyYyA9IGRzaV9wYW5lbF9wYXJzZV90aW1pbmcoJm1vZGUtPnRpbWluZywgY2hpbGRfbnApOwot CQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIHBhbmVsIHRpbWluZywgcmM9 JWRcbiIsIHJjKTsKLQkJCWdvdG8gcGFyc2VfZmFpbDsKLQkJfQotCi0JCXJjID0gZHNpX3BhbmVs X3BhcnNlX2RzY19wYXJhbXMobW9kZSwgY2hpbGRfbnApOwotCQlpZiAocmMpIHsKLQkJCXByX2Vy cigiZmFpbGVkIHRvIHBhcnNlIGRzYyBwYXJhbXMsIHJjPSVkXG4iLCByYyk7Ci0JCQlnb3RvIHBh cnNlX2ZhaWw7Ci0JCX0KLQotCQlyYyA9IGRzaV9wYW5lbF9wYXJzZV90b3BvbG9neShwcnZfaW5m bywgY2hpbGRfbnAsCi0JCQkJdG9wb2xvZ3lfb3ZlcnJpZGUpOwotCQlpZiAocmMpIHsKLQkJCXBy X2VycigiZmFpbGVkIHRvIHBhcnNlIHBhbmVsIHRvcG9sb2d5LCByYz0lZFxuIiwgcmMpOwotCQkJ Z290byBwYXJzZV9mYWlsOwotCQl9Ci0KLQkJcmMgPSBkc2lfcGFuZWxfcGFyc2VfY21kX3NldHMo cHJ2X2luZm8sIGNoaWxkX25wKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBw YXJzZSBjb21tYW5kIHNldHMsIHJjPSVkXG4iLCByYyk7Ci0JCQlnb3RvIHBhcnNlX2ZhaWw7Ci0J CX0KLQotCQlyYyA9IGRzaV9wYW5lbF9wYXJzZV9qaXR0ZXJfY29uZmlnKG1vZGUsIGNoaWxkX25w KTsKLQkJaWYgKHJjKQotCQkJcHJfZXJyKAotCQkJImZhaWxlZCB0byBwYXJzZSBwYW5lbCBqaXR0 ZXIgY29uZmlnLCByYz0lZFxuIiwgcmMpOwotCi0JCXJjID0gZHNpX3BhbmVsX3BhcnNlX3BoeV90 aW1pbmcobW9kZSwgY2hpbGRfbnApOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigKLQkJCSJmYWls ZWQgdG8gcGFyc2UgcGFuZWwgcGh5IHRpbWluZ3MsIHJjPSVkXG4iLCByYyk7Ci0JCQlnb3RvIHBh cnNlX2ZhaWw7Ci0JCX0KLQl9Ci0JZ290byBkb25lOwotCi1wYXJzZV9mYWlsOgotCWtmcmVlKG1v ZGUtPnByaXZfaW5mbyk7Ci0JbW9kZS0+cHJpdl9pbmZvID0gTlVMTDsKLWRvbmU6Ci0JbXV0ZXhf dW5sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX3Bh bmVsX2dldF9ob3N0X2NmZ19mb3JfbW9kZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwKLQkJCQkg ICAgc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGUsCi0JCQkJICAgIHN0cnVjdCBkc2lfaG9z dF9jb25maWcgKmNvbmZpZykKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFwYW5lbCB8fCAhbW9k ZSB8fCAhY29uZmlnKSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4g LUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0KLQljb25m aWctPnBhbmVsX21vZGUgPSBwYW5lbC0+cGFuZWxfbW9kZTsKLQltZW1jcHkoJmNvbmZpZy0+Y29t bW9uX2NvbmZpZywgJnBhbmVsLT5ob3N0X2NvbmZpZywKLQkgICAgICAgc2l6ZW9mKGNvbmZpZy0+ Y29tbW9uX2NvbmZpZykpOwotCi0JaWYgKHBhbmVsLT5wYW5lbF9tb2RlID09IERTSV9PUF9WSURF T19NT0RFKSB7Ci0JCW1lbWNweSgmY29uZmlnLT51LnZpZGVvX2VuZ2luZSwgJnBhbmVsLT52aWRl b19jb25maWcsCi0JCSAgICAgICBzaXplb2YoY29uZmlnLT51LnZpZGVvX2VuZ2luZSkpOwotCX0g ZWxzZSB7Ci0JCW1lbWNweSgmY29uZmlnLT51LmNtZF9lbmdpbmUsICZwYW5lbC0+Y21kX2NvbmZp ZywKLQkJICAgICAgIHNpemVvZihjb25maWctPnUuY21kX2VuZ2luZSkpOwotCX0KLQotCW1lbWNw eSgmY29uZmlnLT52aWRlb190aW1pbmcsICZtb2RlLT50aW1pbmcsCi0JICAgICAgIHNpemVvZihj b25maWctPnZpZGVvX3RpbWluZykpOwotCWNvbmZpZy0+dmlkZW9fdGltaW5nLmRzY19lbmFibGVk ID0gbW9kZS0+cHJpdl9pbmZvLT5kc2NfZW5hYmxlZDsKLQljb25maWctPnZpZGVvX3RpbWluZy5k c2MgPSAmbW9kZS0+cHJpdl9pbmZvLT5kc2M7Ci0KLQljb25maWctPmVzY19jbGtfcmF0ZV9oeiA9 IDE5MjAwMDAwOwotCW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCXJldHVybiBy YzsKLX0KLQotaW50IGRzaV9wYW5lbF9wcmVfcHJlcGFyZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5l bCkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFwYW5lbCkgewotCQlwcl9lcnIoImludmFsaWQg cGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGFuZWwt PnBhbmVsX2xvY2spOwotCi0JLyogSWYgTFAxMV9JTklUIGlzIHNldCwgcGFuZWwgd2lsbCBiZSBw b3dlcmVkIHVwIGR1cmluZyBwcmVwYXJlKCkgKi8KLQlpZiAocGFuZWwtPmxwMTFfaW5pdCkKLQkJ Z290byBlcnJvcjsKLQotCXJjID0gZHNpX3BhbmVsX3Bvd2VyX29uKHBhbmVsKTsKLQlpZiAocmMp IHsKLQkJcHJfZXJyKCJbJXNdIHBhbmVsIHBvd2VyIG9uIGZhaWxlZCwgcmM9JWRcbiIsIHBhbmVs LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi1lcnJvcjoKLQltdXRleF91bmxvY2so JnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfcGFuZWxfdXBk YXRlX3BwcyhzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVj dCBkc2lfcGFuZWxfY21kX3NldCAqc2V0ID0gTlVMTDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9k ZV9wcml2X2luZm8gKnByaXZfaW5mbyA9IE5VTEw7Ci0KLQlpZiAoIXBhbmVsIHx8ICFwYW5lbC0+ Y3VyX21vZGUpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlO VkFMOwotCX0KLQotCW11dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQotCXByaXZfaW5m byA9IHBhbmVsLT5jdXJfbW9kZS0+cHJpdl9pbmZvOwotCi0Jc2V0ID0gJnByaXZfaW5mby0+Y21k X3NldHNbRFNJX0NNRF9TRVRfUFBTXTsKLQotCWRzaV9kc2NfY3JlYXRlX3Bwc19idWZfY21kKCZw cml2X2luZm8tPmRzYywgcGFuZWwtPmRzY19wcHNfY21kLCAwKTsKLQlyYyA9IGRzaV9wYW5lbF9j cmVhdGVfY21kX3BhY2tldHMocGFuZWwtPmRzY19wcHNfY21kLAotCQkJCQkgIERTSV9DTURfUFBT X1NJWkUsIDEsIHNldC0+Y21kcyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIGNy ZWF0ZSBjbWQgcGFja2V0cywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQly YyA9IGRzaV9wYW5lbF90eF9jbWRfc2V0KHBhbmVsLCBEU0lfQ01EX1NFVF9QUFMpOwotCWlmIChy YykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHNlbmQgRFNJX0NNRF9TRVRfUFBTIGNtZHMs IHJjPSVkXG4iLAotCQkJcGFuZWwtPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVy cm9yOgotCW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCXJldHVybiByYzsKLX0K LQotaW50IGRzaV9wYW5lbF9zZXRfbHAxKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKQotewotCWlu dCByYyA9IDA7Ci0KLQlpZiAoIXBhbmVsKSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIp OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwYW5lbC0+cGFuZWxfbG9j ayk7Ci0JcmMgPSBkc2lfcGFuZWxfdHhfY21kX3NldChwYW5lbCwgRFNJX0NNRF9TRVRfTFAxKTsK LQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gc2VuZCBEU0lfQ01EX1NFVF9MUDEg Y21kLCByYz0lZFxuIiwKLQkJICAgICAgIHBhbmVsLT5uYW1lLCByYyk7Ci0JbXV0ZXhfdW5sb2Nr KCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX3BhbmVsX3Nl dF9scDIoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICgh cGFuZWwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFM OwotCX0KLQotCW11dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyYyA9IGRzaV9wYW5l bF90eF9jbWRfc2V0KHBhbmVsLCBEU0lfQ01EX1NFVF9MUDIpOwotCWlmIChyYykKLQkJcHJfZXJy KCJbJXNdIGZhaWxlZCB0byBzZW5kIERTSV9DTURfU0VUX0xQMiBjbWQsIHJjPSVkXG4iLAotCQkg ICAgICAgcGFuZWwtPm5hbWUsIHJjKTsKLQltdXRleF91bmxvY2soJnBhbmVsLT5wYW5lbF9sb2Nr KTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfcGFuZWxfc2V0X25vbHAoc3RydWN0IGRzaV9w YW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghcGFuZWwpIHsKLQkJcHJfZXJy KCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xv Y2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyYyA9IGRzaV9wYW5lbF90eF9jbWRfc2V0KHBhbmVs LCBEU0lfQ01EX1NFVF9OT0xQKTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8g c2VuZCBEU0lfQ01EX1NFVF9OT0xQIGNtZCwgcmM9JWRcbiIsCi0JCSAgICAgICBwYW5lbC0+bmFt ZSwgcmMpOwotCW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCXJldHVybiByYzsK LX0KLQotaW50IGRzaV9wYW5lbF9wcmVwYXJlKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKQotewot CWludCByYyA9IDA7Ci0KLQlpZiAoIXBhbmVsKSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJhbXNc biIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwYW5lbC0+cGFuZWxf bG9jayk7Ci0KLQlpZiAocGFuZWwtPmxwMTFfaW5pdCkgewotCQlyYyA9IGRzaV9wYW5lbF9wb3dl cl9vbihwYW5lbCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIHBhbmVsIHBvd2VyIG9u IGZhaWxlZCwgcmM9JWRcbiIsCi0JCQkgICAgICAgcGFuZWwtPm5hbWUsIHJjKTsKLQkJCWdvdG8g ZXJyb3I7Ci0JCX0KLQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF90eF9jbWRfc2V0KHBhbmVsLCBEU0lf Q01EX1NFVF9QUkVfT04pOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHNl bmQgRFNJX0NNRF9TRVRfUFJFX09OIGNtZHMsIHJjPSVkXG4iLAotCQkgICAgICAgcGFuZWwtPm5h bWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVycm9yOgotCW11dGV4X3VubG9jaygmcGFu ZWwtPnBhbmVsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9wYW5lbF9zd2l0Y2go c3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghcGFuZWwp IHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0K LQotCW11dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQotCXJjID0gZHNpX3BhbmVsX3R4 X2NtZF9zZXQocGFuZWwsIERTSV9DTURfU0VUX1RJTUlOR19TV0lUQ0gpOwotCWlmIChyYykKLQkJ cHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZW5kIERTSV9DTURfU0VUX1RJTUlOR19TV0lUQ0ggY21k cywgcmM9JWRcbiIsCi0JCSAgICAgICBwYW5lbC0+bmFtZSwgcmMpOwotCi0JbXV0ZXhfdW5sb2Nr KCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX3BhbmVsX3Bv c3Rfc3dpdGNoKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKQotewotCWludCByYyA9IDA7Ci0KLQlp ZiAoIXBhbmVsKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0KLQlyYyA9IGRz aV9wYW5lbF90eF9jbWRfc2V0KHBhbmVsLCBEU0lfQ01EX1NFVF9QT1NUX1RJTUlOR19TV0lUQ0gp OwotCWlmIChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZW5kIERTSV9DTURfU0VUX1BP U1RfVElNSU5HX1NXSVRDSCBjbWRzLCByYz0lZFxuIiwKLQkJICAgICAgIHBhbmVsLT5uYW1lLCBy Yyk7Ci0KLQltdXRleF91bmxvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19 Ci0KLWludCBkc2lfcGFuZWxfZW5hYmxlKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKQotewotCWlu dCByYyA9IDA7Ci0KLQlpZiAoIXBhbmVsKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIp OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwYW5lbC0+cGFuZWxfbG9j ayk7Ci0KLQlyYyA9IGRzaV9wYW5lbF90eF9jbWRfc2V0KHBhbmVsLCBEU0lfQ01EX1NFVF9PTik7 Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gc2VuZCBEU0lfQ01EX1NFVF9P TiBjbWRzLCByYz0lZFxuIiwKLQkJICAgICAgIHBhbmVsLT5uYW1lLCByYyk7Ci0JfQotCXBhbmVs LT5wYW5lbF9pbml0aWFsaXplZCA9IHRydWU7Ci0JbXV0ZXhfdW5sb2NrKCZwYW5lbC0+cGFuZWxf bG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX3BhbmVsX3Bvc3RfZW5hYmxlKHN0cnVj dCBkc2lfcGFuZWwgKnBhbmVsKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIXBhbmVsKSB7Ci0J CXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlt dXRleF9sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0KLQlyYyA9IGRzaV9wYW5lbF90eF9jbWRf c2V0KHBhbmVsLCBEU0lfQ01EX1NFVF9QT1NUX09OKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJb JXNdIGZhaWxlZCB0byBzZW5kIERTSV9DTURfU0VUX1BPU1RfT04gY21kcywgcmM9JWRcbiIsCi0J CSAgICAgICBwYW5lbC0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLWVycm9yOgotCW11 dGV4X3VubG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRz aV9wYW5lbF9wcmVfZGlzYWJsZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQgcmMg PSAwOwotCi0JaWYgKCFwYW5lbCkgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwot Ci0JcmMgPSBkc2lfcGFuZWxfdHhfY21kX3NldChwYW5lbCwgRFNJX0NNRF9TRVRfUFJFX09GRik7 Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gc2VuZCBEU0lfQ01EX1NFVF9Q UkVfT0ZGIGNtZHMsIHJjPSVkXG4iLAotCQkgICAgICAgcGFuZWwtPm5hbWUsIHJjKTsKLQkJZ290 byBlcnJvcjsKLQl9Ci0KLWVycm9yOgotCW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVsX2xvY2sp OwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9wYW5lbF9kaXNhYmxlKHN0cnVjdCBkc2lfcGFu ZWwgKnBhbmVsKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIXBhbmVsKSB7Ci0JCXByX2Vycigi aW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2Nr KCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0KLQlyYyA9IGRzaV9wYW5lbF90eF9jbWRfc2V0KHBhbmVs LCBEU0lfQ01EX1NFVF9PRkYpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRv IHNlbmQgRFNJX0NNRF9TRVRfT0ZGIGNtZHMsIHJjPSVkXG4iLAotCQkgICAgICAgcGFuZWwtPm5h bWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JcGFuZWwtPnBhbmVsX2luaXRpYWxpemVkID0g ZmFsc2U7Ci0KLWVycm9yOgotCW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCXJl dHVybiByYzsKLX0KLQotaW50IGRzaV9wYW5lbF91bnByZXBhcmUoc3RydWN0IGRzaV9wYW5lbCAq cGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghcGFuZWwpIHsKLQkJcHJfZXJyKCJpbnZh bGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJnBh bmVsLT5wYW5lbF9sb2NrKTsKLQotCXJjID0gZHNpX3BhbmVsX3R4X2NtZF9zZXQocGFuZWwsIERT SV9DTURfU0VUX1BPU1RfT0ZGKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0 byBzZW5kIERTSV9DTURfU0VUX1BPU1RfT0ZGIGNtZHMsIHJjPSVkXG4iLAotCQkgICAgICAgcGFu ZWwtPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAocGFuZWwtPmxwMTFfaW5p dCkgewotCQlyYyA9IGRzaV9wYW5lbF9wb3dlcl9vZmYocGFuZWwpOwotCQlpZiAocmMpIHsKLQkJ CXByX2VycigiWyVzXSBwYW5lbCBwb3dlcl9PZmYgZmFpbGVkLCByYz0lZFxuIiwKLQkJCSAgICAg ICBwYW5lbC0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0KLWVycm9yOgotCW11 dGV4X3VubG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRz aV9wYW5lbF9wb3N0X3VucHJlcGFyZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQg cmMgPSAwOwotCi0JaWYgKCFwYW5lbCkgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGFuZWwtPnBhbmVsX2xvY2sp OwotCi0JaWYgKCFwYW5lbC0+bHAxMV9pbml0KSB7Ci0JCXJjID0gZHNpX3BhbmVsX3Bvd2VyX29m ZihwYW5lbCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIHBhbmVsIHBvd2VyX09mZiBm YWlsZWQsIHJjPSVkXG4iLAotCQkJICAgICAgIHBhbmVsLT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVy cm9yOwotCQl9Ci0JfQotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7 Ci0JcmV0dXJuIHJjOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3Rh Z2luZy9kc2lfcGFuZWwuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3Bh bmVsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlZjMyMjAuLjAwMDAwMDAKLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGFuZWwuaAorKysgL2Rldi9u dWxsCkBAIC0xLDI1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRo ZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot ICovCi0KLSNpZm5kZWYgX0RTSV9QQU5FTF9IXwotI2RlZmluZSBfRFNJX1BBTkVMX0hfCi0KLSNp bmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2lu Y2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVk ZSA8bGludXgvbGVkcy5oPgotI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KLSNpbmNsdWRlIDxk cm0vbXNtX2RybS5oPgotCi0jaW5jbHVkZSAiZHNpX2RlZnMuaCIKLSNpbmNsdWRlICJkc2lfY3Ry bF9ody5oIgotI2luY2x1ZGUgImRzaV9jbGsuaCIKLSNpbmNsdWRlICJkc2lfcHdyLmgiCi0jaW5j bHVkZSAibXNtX2Rydi5oIgotCi0jZGVmaW5lIE1BWF9CTF9MRVZFTCA0MDk2Ci0jZGVmaW5lIE1B WF9CTF9TQ0FMRV9MRVZFTCAxMDI0Ci0jZGVmaW5lIE1BWF9BRF9CTF9TQ0FMRV9MRVZFTCA2NTUz NQotI2RlZmluZSBEU0lfQ01EX1BQU19TSVpFIDEzNQotCi0jZGVmaW5lIERTSV9NT0RFX01BWCA1 Ci0KLWVudW0gZHNpX3BhbmVsX3JvdGF0aW9uIHsKLQlEU0lfUEFORUxfUk9UQVRFX05PTkUgPSAw LAotCURTSV9QQU5FTF9ST1RBVEVfSFZfRkxJUCwKLQlEU0lfUEFORUxfUk9UQVRFX0hfRkxJUCwK LQlEU0lfUEFORUxfUk9UQVRFX1ZfRkxJUAotfTsKLQotZW51bSBkc2lfYmFja2xpZ2h0X3R5cGUg ewotCURTSV9CQUNLTElHSFRfUFdNID0gMCwKLQlEU0lfQkFDS0xJR0hUX1dMRUQsCi0JRFNJX0JB Q0tMSUdIVF9EQ1MsCi0JRFNJX0JBQ0tMSUdIVF9VTktOT1dOLAotCURTSV9CQUNLTElHSFRfTUFY LAotfTsKLQotZW51bSB7Ci0JTU9ERV9HUElPX05PVF9WQUxJRCA9IDAsCi0JTU9ERV9TRUxfRFVB TF9QT1JULAotCU1PREVfU0VMX1NJTkdMRV9QT1JULAotCU1PREVfR1BJT19ISUdILAotCU1PREVf R1BJT19MT1csCi19OwotCi1lbnVtIGRzaV9kbXNfbW9kZSB7Ci0JRFNJX0RNU19NT0RFX0RJU0FC TEVEID0gMCwKLQlEU0lfRE1TX01PREVfUkVTX1NXSVRDSF9JTU1FRElBVEUsCi19OwotCi1zdHJ1 Y3QgZHNpX2RmcHNfY2FwYWJpbGl0aWVzIHsKLQlib29sIGRmcHNfc3VwcG9ydDsKLQllbnVtIGRz aV9kZnBzX3R5cGUgdHlwZTsKLQl1MzIgbWluX3JlZnJlc2hfcmF0ZTsKLQl1MzIgbWF4X3JlZnJl c2hfcmF0ZTsKLX07Ci0KLXN0cnVjdCBkc2lfcGluY3RybF9pbmZvIHsKLQlzdHJ1Y3QgcGluY3Ry bCAqcGluY3RybDsKLQlzdHJ1Y3QgcGluY3RybF9zdGF0ZSAqYWN0aXZlOwotCXN0cnVjdCBwaW5j dHJsX3N0YXRlICpzdXNwZW5kOwotfTsKLQotc3RydWN0IGRzaV9wYW5lbF9waHlfcHJvcHMgewot CXUzMiBwYW5lbF93aWR0aF9tbTsKLQl1MzIgcGFuZWxfaGVpZ2h0X21tOwotCWVudW0gZHNpX3Bh bmVsX3JvdGF0aW9uIHJvdGF0aW9uOwotfTsKLQotc3RydWN0IGRzaV9iYWNrbGlnaHRfY29uZmln IHsKLQllbnVtIGRzaV9iYWNrbGlnaHRfdHlwZSB0eXBlOwotCi0JdTMyIGJsX21pbl9sZXZlbDsK LQl1MzIgYmxfbWF4X2xldmVsOwotCXUzMiBicmlnaHRuZXNzX21heF9sZXZlbDsKLQl1MzIgYmxf bGV2ZWw7Ci0JdTMyIGJsX3NjYWxlOwotCXUzMiBibF9zY2FsZV9hZDsKLQotCWludCBlbl9ncGlv OwotCS8qIFBXTSBwYXJhbXMgKi8KLQlib29sIHB3bV9wbWlfY29udHJvbDsKLQl1MzIgcHdtX3Bt aWNfYmFuazsKLQl1MzIgcHdtX3BlcmlvZF91c2VjczsKLQlpbnQgcHdtX2dwaW87Ci0KLQkvKiBX TEVEIHBhcmFtcyAqLwotCXN0cnVjdCBsZWRfdHJpZ2dlciAqd2xlZDsKLQlzdHJ1Y3QgYmFja2xp Z2h0X2RldmljZSAqYmQ7Ci19OwotCi1zdHJ1Y3QgZHNpX3Jlc2V0X3NlcSB7Ci0JdTMyIGxldmVs OwotCXUzMiBzbGVlcF9tczsKLX07Ci0KLXN0cnVjdCBkc2lfcGFuZWxfcmVzZXRfY29uZmlnIHsK LQlzdHJ1Y3QgZHNpX3Jlc2V0X3NlcSAqc2VxdWVuY2U7Ci0JdTMyIGNvdW50OwotCi0JaW50IHJl c2V0X2dwaW87Ci0JaW50IGRpc3BfZW5fZ3BpbzsKLQlpbnQgbGNkX21vZGVfc2VsX2dwaW87Ci0J dTMyIG1vZGVfc2VsX3N0YXRlOwotfTsKLQotZW51bSBlc2RfY2hlY2tfc3RhdHVzX21vZGUgewot CUVTRF9NT0RFX1JFR19SRUFELAotCUVTRF9NT0RFX1NXX0JUQSwKLQlFU0RfTU9ERV9QQU5FTF9U RSwKLQlFU0RfTU9ERV9NQVgKLX07Ci0KLXN0cnVjdCBkcm1fcGFuZWxfZXNkX2NvbmZpZyB7Ci0J Ym9vbCBlc2RfZW5hYmxlZDsKLQotCWVudW0gZXNkX2NoZWNrX3N0YXR1c19tb2RlIHN0YXR1c19t b2RlOwotCXN0cnVjdCBkc2lfcGFuZWxfY21kX3NldCBzdGF0dXNfY21kOwotCXUzMiAqc3RhdHVz X2NtZHNfcmxlbjsKLQl1MzIgKnN0YXR1c192YWxpZF9wYXJhbXM7Ci0JdTMyICpzdGF0dXNfdmFs dWU7Ci0JdW5zaWduZWQgY2hhciAqcmV0dXJuX2J1ZjsKLQl1MzIgZ3JvdXBzOwotfTsKLQotc3Ry dWN0IGRzaV9wYW5lbCB7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUg KnBhbmVsX29mX25vZGU7Ci0Jc3RydWN0IG1pcGlfZHNpX2RldmljZSBtaXBpX2RldmljZTsKLQot CXN0cnVjdCBtdXRleCBwYW5lbF9sb2NrOwotCXN0cnVjdCBkcm1fcGFuZWwgZHJtX3BhbmVsOwot CXN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0OwotCXN0cnVjdCBkZXZpY2UgKnBhcmVudDsKLQot CXN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnIGhvc3RfY29uZmlnOwotCXN0cnVjdCBkc2lfdmlk ZW9fZW5naW5lX2NmZyB2aWRlb19jb25maWc7Ci0Jc3RydWN0IGRzaV9jbWRfZW5naW5lX2NmZyBj bWRfY29uZmlnOwotCWVudW0gZHNpX29wX21vZGUgcGFuZWxfbW9kZTsKLQotCXN0cnVjdCBkc2lf ZGZwc19jYXBhYmlsaXRpZXMgZGZwc19jYXBzOwotCXN0cnVjdCBkc2lfcGFuZWxfcGh5X3Byb3Bz IHBoeV9wcm9wczsKLQotCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICpjdXJfbW9kZTsKLQl1MzIg bnVtX3RpbWluZ19ub2RlczsKLQotCXN0cnVjdCBkc2lfcmVndWxhdG9yX2luZm8gcG93ZXJfaW5m bzsKLQlzdHJ1Y3QgZHNpX2JhY2tsaWdodF9jb25maWcgYmxfY29uZmlnOwotCXN0cnVjdCBkc2lf cGFuZWxfcmVzZXRfY29uZmlnIHJlc2V0X2NvbmZpZzsKLQlzdHJ1Y3QgZHNpX3BpbmN0cmxfaW5m byBwaW5jdHJsOwotCXN0cnVjdCBkcm1fcGFuZWxfaGRyX3Byb3BlcnRpZXMgaGRyX3Byb3BzOwot CXN0cnVjdCBkcm1fcGFuZWxfZXNkX2NvbmZpZyBlc2RfY29uZmlnOwotCi0JYm9vbCBscDExX2lu aXQ7Ci0JYm9vbCB1bHBzX2VuYWJsZWQ7Ci0JYm9vbCBhbGxvd19waHlfcG93ZXJfb2ZmOwotCi0J Ym9vbCBwYW5lbF9pbml0aWFsaXplZDsKLQlib29sIHRlX3VzaW5nX3dhdGNoZG9nX3RpbWVyOwot Ci0JY2hhciBkc2NfcHBzX2NtZFtEU0lfQ01EX1BQU19TSVpFXTsKLQllbnVtIGRzaV9kbXNfbW9k ZSBkbXNfbW9kZTsKLQotCWJvb2wgc3luY19icm9hZGNhc3RfZW47Ci19OwotCi1zdGF0aWMgaW5s aW5lIGJvb2wgZHNpX3BhbmVsX3VscHNfZmVhdHVyZV9lbmFibGVkKHN0cnVjdCBkc2lfcGFuZWwg KnBhbmVsKQotewotCXJldHVybiBwYW5lbC0+dWxwc19lbmFibGVkOwotfQotCi1zdGF0aWMgaW5s aW5lIGJvb2wgZHNpX3BhbmVsX2luaXRpYWxpemVkKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKQot ewotCXJldHVybiBwYW5lbC0+cGFuZWxfaW5pdGlhbGl6ZWQ7Ci19Ci0KLXN0cnVjdCBkc2lfcGFu ZWwgKmRzaV9wYW5lbF9nZXQoc3RydWN0IGRldmljZSAqcGFyZW50LAotCQkJCXN0cnVjdCBkZXZp Y2Vfbm9kZSAqb2Zfbm9kZSwKLQkJCQlpbnQgdG9wb2xvZ3lfb3ZlcnJpZGUpOwotCi12b2lkIGRz aV9wYW5lbF9wdXQoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpOwotCi1pbnQgZHNpX3BhbmVsX2Ry dl9pbml0KHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsLCBzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9z dCk7Ci0KLWludCBkc2lfcGFuZWxfZHJ2X2RlaW5pdChzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCk7 Ci0KLWludCBkc2lfcGFuZWxfZ2V0X21vZGVfY291bnQoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWws Ci0JCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSk7Ci0KLXZvaWQgZHNpX3BhbmVsX3B1dF9t b2RlKHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlKTsKLQotaW50IGRzaV9wYW5lbF9nZXRf bW9kZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwKLQkJICAgICAgIHUzMiBpbmRleCwKLQkJICAg ICAgIHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlLAotCQkgICAgICAgaW50IHRvcG9sb2d5 X292ZXJyaWRlKTsKLQotaW50IGRzaV9wYW5lbF92YWxpZGF0ZV9tb2RlKHN0cnVjdCBkc2lfcGFu ZWwgKnBhbmVsLAotCQkJICAgIHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlKTsKLQotaW50 IGRzaV9wYW5lbF9nZXRfaG9zdF9jZmdfZm9yX21vZGUoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWws Ci0JCQkJICAgIHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlLAotCQkJCSAgICBzdHJ1Y3Qg ZHNpX2hvc3RfY29uZmlnICpjb25maWcpOwotCi1pbnQgZHNpX3BhbmVsX2dldF9waHlfcHJvcHMo c3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsCi0JCQkgICAgc3RydWN0IGRzaV9wYW5lbF9waHlfcHJv cHMgKnBoeV9wcm9wcyk7Ci1pbnQgZHNpX3BhbmVsX2dldF9kZnBzX2NhcHMoc3RydWN0IGRzaV9w YW5lbCAqcGFuZWwsCi0JCQkgICAgc3RydWN0IGRzaV9kZnBzX2NhcGFiaWxpdGllcyAqZGZwc19j YXBzKTsKLQotaW50IGRzaV9wYW5lbF9wcmVfcHJlcGFyZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5l bCk7Ci0KLWludCBkc2lfcGFuZWxfc2V0X2xwMShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCk7Ci0K LWludCBkc2lfcGFuZWxfc2V0X2xwMihzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCk7Ci0KLWludCBk c2lfcGFuZWxfc2V0X25vbHAoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpOwotCi1pbnQgZHNpX3Bh bmVsX3ByZXBhcmUoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpOwotCi1pbnQgZHNpX3BhbmVsX2Vu YWJsZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCk7Ci0KLWludCBkc2lfcGFuZWxfcG9zdF9lbmFi bGUoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpOwotCi1pbnQgZHNpX3BhbmVsX3ByZV9kaXNhYmxl KHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKTsKLQotaW50IGRzaV9wYW5lbF9kaXNhYmxlKHN0cnVj dCBkc2lfcGFuZWwgKnBhbmVsKTsKLQotaW50IGRzaV9wYW5lbF91bnByZXBhcmUoc3RydWN0IGRz aV9wYW5lbCAqcGFuZWwpOwotCi1pbnQgZHNpX3BhbmVsX3Bvc3RfdW5wcmVwYXJlKHN0cnVjdCBk c2lfcGFuZWwgKnBhbmVsKTsKLQotaW50IGRzaV9wYW5lbF9zZXRfYmFja2xpZ2h0KHN0cnVjdCBk c2lfcGFuZWwgKnBhbmVsLCB1MzIgYmxfbHZsKTsKLQotaW50IGRzaV9wYW5lbF91cGRhdGVfcHBz KHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKTsKLQotaW50IGRzaV9wYW5lbF9zd2l0Y2goc3RydWN0 IGRzaV9wYW5lbCAqcGFuZWwpOwotCi1pbnQgZHNpX3BhbmVsX3Bvc3Rfc3dpdGNoKHN0cnVjdCBk c2lfcGFuZWwgKnBhbmVsKTsKLQotdm9pZCBkc2lfZHNjX3BjbGtfcGFyYW1fY2FsYyhzdHJ1Y3Qg bXNtX2Rpc3BsYXlfZHNjX2luZm8gKmRzYywgaW50IGludGZfd2lkdGgpOwotCi0jZW5kaWYgLyog X0RTSV9QQU5FTF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3Rh Z2luZy9kc2lfcGh5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHku YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTcxMmM2MS4uMDAwMDAwMAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHkuYworKysgL2Rldi9udWxsCkBA IC0xLDkzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51 eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0g KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2Rl ZmluZSBwcl9mbXQoZm10KQkibXNtLWRzaS1waHk6WyVzXSAiIGZtdCwgX19mdW5jX18KLQotI2lu Y2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1 ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgot I2lmZGVmIENPTkZJR19RQ09NX0JVU19TQ0FMSU5HCi0jaW5jbHVkZSA8bGludXgvbXNtLWJ1cy5o PgotI2VuZGlmCi0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotCi0jaW5jbHVkZSAibXNtX2Rydi5o IgotI2luY2x1ZGUgIm1zbV9rbXMuaCIKLSNpbmNsdWRlICJtc21fZ3B1LmgiCi0jaW5jbHVkZSAi ZHNpX3BoeS5oIgotI2luY2x1ZGUgImRzaV9waHlfaHcuaCIKLSNpbmNsdWRlICJkc2lfY2xrLmgi Ci0jaW5jbHVkZSAiZHNpX3B3ci5oIgotI2luY2x1ZGUgImRzaV9jYXRhbG9nLmgiCi0KLSNpbmNs dWRlICJkcHVfZGJnLmgiCi0KLSNkZWZpbmUgRFNJX1BIWV9ERUZBVUxUX0xBQkVMICJNRFNTIFBI WSBDVFJMIgotCi1zdHJ1Y3QgZHNpX3BoeV9saXN0X2l0ZW0gewotCXN0cnVjdCBtc21fZHNpX3Bo eSAqcGh5OwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07Ci0KLXN0YXRpYyBMSVNUX0hFQUQo ZHNpX3BoeV9saXN0KTsKLXN0YXRpYyBERUZJTkVfTVVURVgoZHNpX3BoeV9saXN0X2xvY2spOwot Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGRzaV92ZXJfc3BlY19pbmZvIGRzaV9waHlfdjBfMF9ocG0g PSB7Ci0JLnZlcnNpb24gPSBEU0lfUEhZX1ZFUlNJT05fMF8wX0hQTSwKLQkubGFuZV9jZmdfY291 bnQgPSA0LAotCS5zdHJlbmd0aF9jZmdfY291bnQgPSAyLAotCS5yZWd1bGF0b3JfY2ZnX2NvdW50 ID0gMSwKLQkudGltaW5nX2NmZ19jb3VudCA9IDgsCi19Owotc3RhdGljIGNvbnN0IHN0cnVjdCBk c2lfdmVyX3NwZWNfaW5mbyBkc2lfcGh5X3YwXzBfbHBtID0gewotCS52ZXJzaW9uID0gRFNJX1BI WV9WRVJTSU9OXzBfMF9MUE0sCi0JLmxhbmVfY2ZnX2NvdW50ID0gNCwKLQkuc3RyZW5ndGhfY2Zn X2NvdW50ID0gMiwKLQkucmVndWxhdG9yX2NmZ19jb3VudCA9IDEsCi0JLnRpbWluZ19jZmdfY291 bnQgPSA4LAotfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNpX3Zlcl9zcGVjX2luZm8gZHNpX3Bo eV92MV8wID0gewotCS52ZXJzaW9uID0gRFNJX1BIWV9WRVJTSU9OXzFfMCwKLQkubGFuZV9jZmdf Y291bnQgPSA0LAotCS5zdHJlbmd0aF9jZmdfY291bnQgPSAyLAotCS5yZWd1bGF0b3JfY2ZnX2Nv dW50ID0gMSwKLQkudGltaW5nX2NmZ19jb3VudCA9IDgsCi19Owotc3RhdGljIGNvbnN0IHN0cnVj dCBkc2lfdmVyX3NwZWNfaW5mbyBkc2lfcGh5X3YyXzAgPSB7Ci0JLnZlcnNpb24gPSBEU0lfUEhZ X1ZFUlNJT05fMl8wLAotCS5sYW5lX2NmZ19jb3VudCA9IDQsCi0JLnN0cmVuZ3RoX2NmZ19jb3Vu dCA9IDIsCi0JLnJlZ3VsYXRvcl9jZmdfY291bnQgPSAxLAotCS50aW1pbmdfY2ZnX2NvdW50ID0g OCwKLX07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGRzaV92ZXJfc3BlY19pbmZvIGRzaV9waHlfdjNf MCA9IHsKLQkudmVyc2lvbiA9IERTSV9QSFlfVkVSU0lPTl8zXzAsCi0JLmxhbmVfY2ZnX2NvdW50 ID0gNCwKLQkuc3RyZW5ndGhfY2ZnX2NvdW50ID0gMiwKLQkucmVndWxhdG9yX2NmZ19jb3VudCA9 IDAsCi0JLnRpbWluZ19jZmdfY291bnQgPSAxMiwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkIG1zbV9kc2lfcGh5X29mX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9 ICJxY29tLGRzaS1waHktdjAuMC1ocG0iLAotCSAgLmRhdGEgPSAmZHNpX3BoeV92MF8wX2hwbSx9 LAotCXsgLmNvbXBhdGlibGUgPSAicWNvbSxkc2ktcGh5LXYwLjAtbHBtIiwKLQkgIC5kYXRhID0g JmRzaV9waHlfdjBfMF9scG0sfSwKLQl7IC5jb21wYXRpYmxlID0gInFjb20sZHNpLXBoeS12MS4w IiwKLQkgIC5kYXRhID0gJmRzaV9waHlfdjFfMCx9LAotCXsgLmNvbXBhdGlibGUgPSAicWNvbSxk c2ktcGh5LXYyLjAiLAotCSAgLmRhdGEgPSAmZHNpX3BoeV92Ml8wLH0sCi0JeyAuY29tcGF0aWJs ZSA9ICJxY29tLGRzaS1waHktdjMuMCIsCi0JICAuZGF0YSA9ICZkc2lfcGh5X3YzXzAsfSwKLQl7 fQotfTsKLQotc3RhdGljIGludCBkc2lfcGh5X3JlZ21hcF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYsCi0JCQkgICAgICAgc3RydWN0IG1zbV9kc2lfcGh5ICpwaHkpCi17Ci0JaW50 IHJjID0gMDsKLQl2b2lkIF9faW9tZW0gKnB0cjsKLQotCXB0ciA9IG1zbV9pb3JlbWFwKHBkZXYs ICJkc2lfcGh5IiwgcGh5LT5uYW1lKTsKLQlpZiAoSVNfRVJSKHB0cikpIHsKLQkJcmMgPSBQVFJf RVJSKHB0cik7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlwaHktPmh3LmJhc2UgPSBwdHI7Ci0KLQlw cl9kZWJ1ZygiWyVzXSBtYXAgZHNpX3BoeSByZWdpc3RlcnMgdG8gJXBcbiIsIHBoeS0+bmFtZSwg cGh5LT5ody5iYXNlKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGh5X3Jl Z21hcF9kZWluaXQoc3RydWN0IG1zbV9kc2lfcGh5ICpwaHkpCi17Ci0JcHJfZGVidWcoIlslc10g dW5tYXAgcmVnaXN0ZXJzXG4iLCBwaHktPm5hbWUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMg aW50IGRzaV9waHlfc3VwcGxpZXNfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAot CQkJCSBzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpID0g MDsKLQlzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvICpyZWdzOwotCXN0cnVjdCByZWd1bGF0b3Ig KnZyZWcgPSBOVUxMOwotCi0JcmVncyA9ICZwaHktPnB3cl9pbmZvLmRpZ2l0YWw7Ci0JcmVncy0+ dnJlZ3MgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBkc2lfdnJlZyks Ci0JCQkJICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyZWdzLT52cmVncykKLQkJZ290byBlcnJvcjsK LQotCXJlZ3MtPmNvdW50ID0gMTsKLQlzbnByaW50ZihyZWdzLT52cmVncy0+dnJlZ19uYW1lLAot CQkgQVJSQVlfU0laRShyZWdzLT52cmVnc1tpXS52cmVnX25hbWUpLAotCQkgIiVzIiwgImdkc2Mi KTsKLQotCXJjID0gZHNpX3B3cl9nZXRfZHRfdnJlZ19kYXRhKCZwZGV2LT5kZXYsCi0JCQkJCSAg JnBoeS0+cHdyX2luZm8ucGh5X3B3ciwKLQkJCQkJICAicWNvbSxwaHktc3VwcGx5LWVudHJpZXMi KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IGhvc3QgcG93ZXIgc3VwcGxp ZXMsIHJjID0gJWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcl9kaWdpdGFsOwotCX0KLQotCXJlZ3Mg PSAmcGh5LT5wd3JfaW5mby5kaWdpdGFsOwotCWZvciAoaSA9IDA7IGkgPCByZWdzLT5jb3VudDsg aSsrKSB7Ci0JCXZyZWcgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoJnBkZXYtPmRldiwgcmVncy0+dnJl Z3NbaV0udnJlZ19uYW1lKTsKLQkJcmMgPSBQVFJfUkVUKHZyZWcpOwotCQlpZiAocmMpIHsKLQkJ CXByX2VycigiZmFpbGVkIHRvIGdldCAlcyByZWd1bGF0b3JcbiIsCi0JCQkgICAgICAgcmVncy0+ dnJlZ3NbaV0udnJlZ19uYW1lKTsKLQkJCWdvdG8gZXJyb3JfaG9zdF9wd3I7Ci0JCX0KLQkJcmVn cy0+dnJlZ3NbaV0udnJlZyA9IHZyZWc7Ci0JfQotCi0JcmVncyA9ICZwaHktPnB3cl9pbmZvLnBo eV9wd3I7Ci0JZm9yIChpID0gMDsgaSA8IHJlZ3MtPmNvdW50OyBpKyspIHsKLQkJdnJlZyA9IGRl dm1fcmVndWxhdG9yX2dldCgmcGRldi0+ZGV2LCByZWdzLT52cmVnc1tpXS52cmVnX25hbWUpOwot CQlyYyA9IFBUUl9SRVQodnJlZyk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8g Z2V0ICVzIHJlZ3VsYXRvclxuIiwKLQkJCSAgICAgICByZWdzLT52cmVnc1tpXS52cmVnX25hbWUp OwotCQkJZm9yICgtLWk7IGkgPj0gMDsgaS0tKQotCQkJCWRldm1fcmVndWxhdG9yX3B1dChyZWdz LT52cmVnc1tpXS52cmVnKTsKLQkJCWdvdG8gZXJyb3JfZGlnaXRhbF9wdXQ7Ci0JCX0KLQkJcmVn cy0+dnJlZ3NbaV0udnJlZyA9IHZyZWc7Ci0JfQotCi0JcmV0dXJuIHJjOwotCi1lcnJvcl9kaWdp dGFsX3B1dDoKLQlyZWdzID0gJnBoeS0+cHdyX2luZm8uZGlnaXRhbDsKLQlmb3IgKGkgPSAwOyBp IDwgcmVncy0+Y291bnQ7IGkrKykKLQkJZGV2bV9yZWd1bGF0b3JfcHV0KHJlZ3MtPnZyZWdzW2ld LnZyZWcpOwotZXJyb3JfaG9zdF9wd3I6Ci0JZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBwaHktPnB3 cl9pbmZvLnBoeV9wd3IudnJlZ3MpOwotCXBoeS0+cHdyX2luZm8ucGh5X3B3ci52cmVncyA9IE5V TEw7Ci0JcGh5LT5wd3JfaW5mby5waHlfcHdyLmNvdW50ID0gMDsKLWVycm9yX2RpZ2l0YWw6Ci0J ZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBwaHktPnB3cl9pbmZvLmRpZ2l0YWwudnJlZ3MpOwotCXBo eS0+cHdyX2luZm8uZGlnaXRhbC52cmVncyA9IE5VTEw7Ci0JcGh5LT5wd3JfaW5mby5kaWdpdGFs LmNvdW50ID0gMDsKLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGh5 X3N1cHBsaWVzX2RlaW5pdChzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSkKLXsKLQlpbnQgaSA9IDA7 Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvICpyZWdzOwotCi0JcmVn cyA9ICZwaHktPnB3cl9pbmZvLmRpZ2l0YWw7Ci0JZm9yIChpID0gMDsgaSA8IHJlZ3MtPmNvdW50 OyBpKyspIHsKLQkJaWYgKCFyZWdzLT52cmVnc1tpXS52cmVnKQotCQkJcHJfZXJyKCJ2cmVnIGlz IE5VTEwsIHNob3VsZCBub3QgcmVhY2ggaGVyZVxuIik7Ci0JCWVsc2UKLQkJCWRldm1fcmVndWxh dG9yX3B1dChyZWdzLT52cmVnc1tpXS52cmVnKTsKLQl9Ci0KLQlyZWdzID0gJnBoeS0+cHdyX2lu Zm8ucGh5X3B3cjsKLQlmb3IgKGkgPSAwOyBpIDwgcmVncy0+Y291bnQ7IGkrKykgewotCQlpZiAo IXJlZ3MtPnZyZWdzW2ldLnZyZWcpCi0JCQlwcl9lcnIoInZyZWcgaXMgTlVMTCwgc2hvdWxkIG5v dCByZWFjaCBoZXJlXG4iKTsKLQkJZWxzZQotCQkJZGV2bV9yZWd1bGF0b3JfcHV0KHJlZ3MtPnZy ZWdzW2ldLnZyZWcpOwotCX0KLQotCWlmIChwaHktPnB3cl9pbmZvLnBoeV9wd3IudnJlZ3MpIHsK LQkJZGV2bV9rZnJlZSgmcGh5LT5wZGV2LT5kZXYsIHBoeS0+cHdyX2luZm8ucGh5X3B3ci52cmVn cyk7Ci0JCXBoeS0+cHdyX2luZm8ucGh5X3B3ci52cmVncyA9IE5VTEw7Ci0JCXBoeS0+cHdyX2lu Zm8ucGh5X3B3ci5jb3VudCA9IDA7Ci0JfQotCWlmIChwaHktPnB3cl9pbmZvLmRpZ2l0YWwudnJl Z3MpIHsKLQkJZGV2bV9rZnJlZSgmcGh5LT5wZGV2LT5kZXYsIHBoeS0+cHdyX2luZm8uZGlnaXRh bC52cmVncyk7Ci0JCXBoeS0+cHdyX2luZm8uZGlnaXRhbC52cmVncyA9IE5VTEw7Ci0JCXBoeS0+ cHdyX2luZm8uZGlnaXRhbC5jb3VudCA9IDA7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0 aWMgaW50IGRzaV9waHlfcGFyc2VfZHRfcGVyX2xhbmVfY2ZncyhzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2LAotCQkJCQkgIHN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKmNmZywKLQkJ CQkJICBjaGFyICpwcm9wZXJ0eSkKLXsKLQlpbnQgcmMgPSAwLCBpID0gMCwgaiA9IDA7Ci0JY29u c3QgdTggKmRhdGE7Ci0JdTMyIGxlbiA9IDA7Ci0KLQlkYXRhID0gb2ZfZ2V0X3Byb3BlcnR5KHBk ZXYtPmRldi5vZl9ub2RlLCBwcm9wZXJ0eSwgJmxlbik7Ci0JaWYgKCFkYXRhKSB7Ci0JCXByX2Vy cigiVW5hYmxlIHRvIHJlYWQgUGh5ICVzIHNldHRpbmdzXG4iLCBwcm9wZXJ0eSk7Ci0JCXJldHVy biAtRUlOVkFMOwotCX0KLQotCWlmIChsZW4gIT0gRFNJX0xBTkVfTUFYICogY2ZnLT5jb3VudF9w ZXJfbGFuZSkgewotCQlwcl9lcnIoImluY29ycmVjdCBwaHkgJXMgc2V0dGluZ3MsIGV4cD0lZCwg YWN0PSVkXG4iLAotCQkgICAgICAgcHJvcGVydHksIChEU0lfTEFORV9NQVggKiBjZmctPmNvdW50 X3Blcl9sYW5lKSwgbGVuKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZm9yIChpID0gRFNJ X0xPR0lDQUxfTEFORV8wOyBpIDwgRFNJX0xBTkVfTUFYOyBpKyspIHsKLQkJZm9yIChqID0gMDsg aiA8IGNmZy0+Y291bnRfcGVyX2xhbmU7IGorKykgewotCQkJY2ZnLT5sYW5lW2ldW2pdID0gKmRh dGE7Ci0JCQlkYXRhKys7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQg ZHNpX3BoeV9zZXR0aW5nc19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkJ IHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9w aHlfcGVyX2xhbmVfY2ZncyAqbGFuZSA9ICZwaHktPmNmZy5sYW5lY2ZnOwotCXN0cnVjdCBkc2lf cGh5X3Blcl9sYW5lX2NmZ3MgKnN0cmVuZ3RoID0gJnBoeS0+Y2ZnLnN0cmVuZ3RoOwotCXN0cnVj dCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnRpbWluZyA9ICZwaHktPmNmZy50aW1pbmc7Ci0Jc3Ry dWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyAqcmVncyA9ICZwaHktPmNmZy5yZWd1bGF0b3JzOwot Ci0JbGFuZS0+Y291bnRfcGVyX2xhbmUgPSBwaHktPnZlcl9pbmZvLT5sYW5lX2NmZ19jb3VudDsK LQlyYyA9IGRzaV9waHlfcGFyc2VfZHRfcGVyX2xhbmVfY2ZncyhwZGV2LCBsYW5lLAotCQkJCQkg ICAgInFjb20scGxhdGZvcm0tbGFuZS1jb25maWciKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJm YWlsZWQgdG8gcGFyc2UgbGFuZSBjZmdzLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycjsKLQl9 Ci0KLQlzdHJlbmd0aC0+Y291bnRfcGVyX2xhbmUgPSBwaHktPnZlcl9pbmZvLT5zdHJlbmd0aF9j ZmdfY291bnQ7Ci0JcmMgPSBkc2lfcGh5X3BhcnNlX2R0X3Blcl9sYW5lX2NmZ3MocGRldiwgc3Ry ZW5ndGgsCi0JCQkJCSAgICAicWNvbSxwbGF0Zm9ybS1zdHJlbmd0aC1jdHJsIik7Ci0JaWYgKHJj KSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIGxhbmUgY2ZncywgcmM9JWRcbiIsIHJjKTsK LQkJZ290byBlcnI7Ci0JfQotCi0JcmVncy0+Y291bnRfcGVyX2xhbmUgPSBwaHktPnZlcl9pbmZv LT5yZWd1bGF0b3JfY2ZnX2NvdW50OwotCWlmIChyZWdzLT5jb3VudF9wZXJfbGFuZSA+IDApIHsK LQkJcmMgPSBkc2lfcGh5X3BhcnNlX2R0X3Blcl9sYW5lX2NmZ3MocGRldiwgcmVncywKLQkJCQkJ ICAgICJxY29tLHBsYXRmb3JtLXJlZ3VsYXRvci1zZXR0aW5ncyIpOwotCQlpZiAocmMpIHsKLQkJ CXByX2VycigiZmFpbGVkIHRvIHBhcnNlIGxhbmUgY2ZncywgcmM9JWRcbiIsIHJjKTsKLQkJCWdv dG8gZXJyOwotCQl9Ci0JfQotCi0JLyogQWN0dWFsIHRpbWluZyB2YWx1ZXMgYXJlIGRlcGVuZGVu dCBvbiBwYW5lbCAqLwotCXRpbWluZy0+Y291bnRfcGVyX2xhbmUgPSBwaHktPnZlcl9pbmZvLT50 aW1pbmdfY2ZnX2NvdW50OwotCXJldHVybiAwOwotZXJyOgotCWxhbmUtPmNvdW50X3Blcl9sYW5l ID0gMDsKLQlzdHJlbmd0aC0+Y291bnRfcGVyX2xhbmUgPSAwOwotCXJlZ3MtPmNvdW50X3Blcl9s YW5lID0gMDsKLQl0aW1pbmctPmNvdW50X3Blcl9sYW5lID0gMDsKLQlyZXR1cm4gcmM7Ci19Ci0K LXN0YXRpYyBpbnQgZHNpX3BoeV9zZXR0aW5nc19kZWluaXQoc3RydWN0IG1zbV9kc2lfcGh5ICpw aHkpCi17Ci0JbWVtc2V0KCZwaHktPmNmZy5sYW5lY2ZnLCAweDAsIHNpemVvZihwaHktPmNmZy5s YW5lY2ZnKSk7Ci0JbWVtc2V0KCZwaHktPmNmZy5zdHJlbmd0aCwgMHgwLCBzaXplb2YocGh5LT5j Zmcuc3RyZW5ndGgpKTsKLQltZW1zZXQoJnBoeS0+Y2ZnLnRpbWluZywgMHgwLCBzaXplb2YocGh5 LT5jZmcudGltaW5nKSk7Ci0JbWVtc2V0KCZwaHktPmNmZy5yZWd1bGF0b3JzLCAweDAsIHNpemVv ZihwaHktPmNmZy5yZWd1bGF0b3JzKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNp X3BoeV9kcml2ZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1 Y3QgbXNtX2RzaV9waHkgKmRzaV9waHk7Ci0Jc3RydWN0IGRzaV9waHlfbGlzdF9pdGVtICppdGVt OwotCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKmlkOwotCWNvbnN0IHN0cnVjdCBkc2lfdmVy X3NwZWNfaW5mbyAqdmVyX2luZm87Ci0JaW50IHJjID0gMDsKLQl1MzIgaW5kZXggPSAwOwotCi0J aWYgKCFwZGV2IHx8ICFwZGV2LT5kZXYub2Zfbm9kZSkgewotCQlwcl9lcnIoInBkZXYgbm90IGZv dW5kXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWQgPSBvZl9tYXRjaF9ub2RlKG1z bV9kc2lfcGh5X29mX21hdGNoLCBwZGV2LT5kZXYub2Zfbm9kZSk7Ci0JaWYgKCFpZCkKLQkJcmV0 dXJuIC1FTk9ERVY7Ci0KLQl2ZXJfaW5mbyA9IGlkLT5kYXRhOwotCi0JaXRlbSA9IGRldm1fa3ph bGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKml0ZW0pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWl0ZW0p Ci0JCXJldHVybiAtRU5PTUVNOwotCi0KLQlkc2lfcGh5ID0gZGV2bV9remFsbG9jKCZwZGV2LT5k ZXYsIHNpemVvZigqZHNpX3BoeSksIEdGUF9LRVJORUwpOwotCWlmICghZHNpX3BoeSkgewotCQlk ZXZtX2tmcmVlKCZwZGV2LT5kZXYsIGl0ZW0pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQly YyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtPmRldi5vZl9ub2RlLCAiY2VsbC1pbmRleCIs ICZpbmRleCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2RlYnVnKCJjZWxsIGluZGV4IG5vdCBzZXQsIGRl ZmF1bHQgdG8gMFxuIik7Ci0JCWluZGV4ID0gMDsKLQl9Ci0KLQlkc2lfcGh5LT5pbmRleCA9IGlu ZGV4OwotCi0JZHNpX3BoeS0+bmFtZSA9IG9mX2dldF9wcm9wZXJ0eShwZGV2LT5kZXYub2Zfbm9k ZSwgImxhYmVsIiwgTlVMTCk7Ci0JaWYgKCFkc2lfcGh5LT5uYW1lKQotCQlkc2lfcGh5LT5uYW1l ID0gRFNJX1BIWV9ERUZBVUxUX0xBQkVMOwotCi0JcHJfZGVidWcoIlByb2JpbmcgJXMgZGV2aWNl XG4iLCBkc2lfcGh5LT5uYW1lKTsKLQotCXJjID0gZHNpX3BoeV9yZWdtYXBfaW5pdChwZGV2LCBk c2lfcGh5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gcGFyc2UgcmVnaXN0ZXIg aW5mb3JtYXRpb24sIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQlyYyA9IGRz aV9waHlfc3VwcGxpZXNfaW5pdChwZGV2LCBkc2lfcGh5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJy KCJmYWlsZWQgdG8gcGFyc2Ugdm9sdGFnZSBzdXBwbGllcywgcmMgPSAlZFxuIiwgcmMpOwotCQln b3RvIGZhaWxfcmVnbWFwOwotCX0KLQotCXJjID0gZHNpX2NhdGFsb2dfcGh5X3NldHVwKCZkc2lf cGh5LT5odywgdmVyX2luZm8tPnZlcnNpb24sCi0JCQkJICAgZHNpX3BoeS0+aW5kZXgpOwotCWlm IChyYykgewotCQlwcl9lcnIoIkNhdGFsb2cgZG9lcyBub3Qgc3VwcG9ydCB2ZXJzaW9uICglZClc biIsCi0JCSAgICAgICB2ZXJfaW5mby0+dmVyc2lvbik7Ci0JCWdvdG8gZmFpbF9zdXBwbGllczsK LQl9Ci0KLQlkc2lfcGh5LT52ZXJfaW5mbyA9IHZlcl9pbmZvOwotCXJjID0gZHNpX3BoeV9zZXR0 aW5nc19pbml0KHBkZXYsIGRzaV9waHkpOwotCWlmIChyYykgewotCQlwcl9lcnIoIkZhaWxlZCB0 byBwYXJzZSBwaHkgc2V0dGluZywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBmYWlsX3N1cHBsaWVz OwotCX0KLQotCWl0ZW0tPnBoeSA9IGRzaV9waHk7Ci0KLQltdXRleF9sb2NrKCZkc2lfcGh5X2xp c3RfbG9jayk7Ci0JbGlzdF9hZGQoJml0ZW0tPmxpc3QsICZkc2lfcGh5X2xpc3QpOwotCW11dGV4 X3VubG9jaygmZHNpX3BoeV9saXN0X2xvY2spOwotCi0JbXV0ZXhfaW5pdCgmZHNpX3BoeS0+cGh5 X2xvY2spOwotCS8qKiBUT0RPOiBpbml0aWFsaXplIGRlYnVnZnMgKi8KLQlkc2lfcGh5LT5wZGV2 ID0gcGRldjsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkc2lfcGh5KTsKLQlwcl9pbmZv KCJQcm9iZSBzdWNjZXNzZnVsIGZvciAlc1xuIiwgZHNpX3BoeS0+bmFtZSk7Ci0JcmV0dXJuIDA7 Ci0KLWZhaWxfc3VwcGxpZXM6Ci0JKHZvaWQpZHNpX3BoeV9zdXBwbGllc19kZWluaXQoZHNpX3Bo eSk7Ci1mYWlsX3JlZ21hcDoKLQkodm9pZClkc2lfcGh5X3JlZ21hcF9kZWluaXQoZHNpX3BoeSk7 Ci1mYWlsOgotCWRldm1fa2ZyZWUoJnBkZXYtPmRldiwgZHNpX3BoeSk7Ci0JZGV2bV9rZnJlZSgm cGRldi0+ZGV2LCBpdGVtKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BoeV9k cml2ZXJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JaW50IHJjID0g MDsKLQlzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYp OwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKnRtcDsKLQotCWlmICghcGRldiB8fCAhcGh5KSB7 Ci0JCXByX2VycigiSW52YWxpZCBkZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0K LQltdXRleF9sb2NrKCZkc2lfcGh5X2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlKHBv cywgdG1wLCAmZHNpX3BoeV9saXN0KSB7Ci0JCXN0cnVjdCBkc2lfcGh5X2xpc3RfaXRlbSAqbjsK LQotCQluID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBkc2lfcGh5X2xpc3RfaXRlbSwgbGlzdCk7 Ci0JCWlmIChuLT5waHkgPT0gcGh5KSB7Ci0JCQlsaXN0X2RlbCgmbi0+bGlzdCk7Ci0JCQlkZXZt X2tmcmVlKCZwZGV2LT5kZXYsIG4pOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2Nr KCZkc2lfcGh5X2xpc3RfbG9jayk7Ci0KLQltdXRleF9sb2NrKCZwaHktPnBoeV9sb2NrKTsKLQly YyA9IGRzaV9waHlfc2V0dGluZ3NfZGVpbml0KHBoeSk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoImZh aWxlZCB0byBkZWluaXRpYWxpemUgcGh5IHNldHRpbmdzLCByYz0lZFxuIiwgcmMpOwotCi0JcmMg PSBkc2lfcGh5X3N1cHBsaWVzX2RlaW5pdChwaHkpOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWls ZWQgdG8gZGVpbml0aWFsaXplIHZvbHRhZ2Ugc3VwcGxpZXMsIHJjPSVkXG4iLCByYyk7Ci0KLQly YyA9IGRzaV9waHlfcmVnbWFwX2RlaW5pdChwaHkpOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWls ZWQgdG8gZGVpbml0aWFsaXplIHJlZ21hcCwgcmM9JWRcbiIsIHJjKTsKLQltdXRleF91bmxvY2so JnBoeS0+cGh5X2xvY2spOwotCi0JbXV0ZXhfZGVzdHJveSgmcGh5LT5waHlfbG9jayk7Ci0JZGV2 bV9rZnJlZSgmcGRldi0+ZGV2LCBwaHkpOwotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwg TlVMTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIg ZHNpX3BoeV9wbGF0Zm9ybV9kcml2ZXIgPSB7Ci0JLnByb2JlICAgICAgPSBkc2lfcGh5X2RyaXZl cl9wcm9iZSwKLQkucmVtb3ZlICAgICA9IGRzaV9waHlfZHJpdmVyX3JlbW92ZSwKLQkuZHJpdmVy ICAgICA9IHsKLQkJLm5hbWUgICA9ICJkc2lfcGh5IiwKLQkJLm9mX21hdGNoX3RhYmxlID0gbXNt X2RzaV9waHlfb2ZfbWF0Y2gsCi0JfSwKLX07Ci0KLXN0YXRpYyB2b2lkIGRzaV9waHlfZW5hYmxl X2h3KHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5KQotewotCWlmIChwaHktPmh3Lm9wcy5yZWd1bGF0 b3JfZW5hYmxlKQotCQlwaHktPmh3Lm9wcy5yZWd1bGF0b3JfZW5hYmxlKCZwaHktPmh3LCAmcGh5 LT5jZmcucmVndWxhdG9ycyk7Ci0KLQlpZiAocGh5LT5ody5vcHMuZW5hYmxlKQotCQlwaHktPmh3 Lm9wcy5lbmFibGUoJnBoeS0+aHcsICZwaHktPmNmZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzaV9w aHlfZGlzYWJsZV9odyhzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSkKLXsKLQlpZiAocGh5LT5ody5v cHMuZGlzYWJsZSkKLQkJcGh5LT5ody5vcHMuZGlzYWJsZSgmcGh5LT5odywgJnBoeS0+Y2ZnKTsK LQotCWlmIChwaHktPmh3Lm9wcy5yZWd1bGF0b3JfZGlzYWJsZSkKLQkJcGh5LT5ody5vcHMucmVn dWxhdG9yX2Rpc2FibGUoJnBoeS0+aHcpOwotfQotCi0vKioKLSAqIGRzaV9waHlfZ2V0KCkgLSBn ZXQgYSBkc2kgcGh5IGhhbmRsZSBmcm9tIGRldmljZSBub2RlCi0gKiBAb2Zfbm9kZTogICAgICAg ICAgIGRldmljZSBub2RlIGZvciBkc2kgcGh5IGNvbnRyb2xsZXIKLSAqCi0gKiBHZXRzIHRoZSBE U0kgUEhZIGhhbmRsZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgb2Zfbm9kZS4gVGhlIHJlZiBjb3Vu dCBpcwotICogaW5jcmVtZW50ZWQgdG8gb25lIGFsbCBzdWJzZXF1ZW50cyBnZXQgd2lsbCBmYWls IHVudGlsIHRoZSBvcmlnaW5hbCBjbGllbnQKLSAqIGNhbGxzIGEgcHV0LgotICoKLSAqIFJldHVy bjogRFNJIFBIWSBoYW5kbGUgb3IgYW4gZXJyb3IgY29kZS4KLSAqLwotc3RydWN0IG1zbV9kc2lf cGh5ICpkc2lfcGh5X2dldChzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpCi17Ci0Jc3RydWN0 IGxpc3RfaGVhZCAqcG9zLCAqdG1wOwotCXN0cnVjdCBtc21fZHNpX3BoeSAqcGh5ID0gTlVMTDsK LQotCW11dGV4X2xvY2soJmRzaV9waHlfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX3NhZmUo cG9zLCB0bXAsICZkc2lfcGh5X2xpc3QpIHsKLQkJc3RydWN0IGRzaV9waHlfbGlzdF9pdGVtICpu OwotCi0JCW4gPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGRzaV9waHlfbGlzdF9pdGVtLCBsaXN0 KTsKLQkJaWYgKG4tPnBoeS0+cGRldi0+ZGV2Lm9mX25vZGUgPT0gb2Zfbm9kZSkgewotCQkJcGh5 ID0gbi0+cGh5OwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfcGh5X2xp c3RfbG9jayk7Ci0KLQlpZiAoIXBoeSkgewotCQlwcl9lcnIoIkRldmljZSB3aXRoIG9mIG5vZGUg bm90IGZvdW5kXG4iKTsKLQkJcGh5ID0gRVJSX1BUUigtRVBST0JFX0RFRkVSKTsKLQkJcmV0dXJu IHBoeTsKLQl9Ci0KLQltdXRleF9sb2NrKCZwaHktPnBoeV9sb2NrKTsKLQlpZiAocGh5LT5yZWZj b3VudCA+IDApIHsKLQkJcHJfZXJyKCJbUEhZXyVkXSBEZXZpY2UgdW5kZXIgdXNlXG4iLCBwaHkt PmluZGV4KTsKLQkJcGh5ID0gRVJSX1BUUigtRUlOVkFMKTsKLQl9IGVsc2UgewotCQlwaHktPnJl ZmNvdW50Kys7Ci0JfQotCW11dGV4X3VubG9jaygmcGh5LT5waHlfbG9jayk7Ci0JcmV0dXJuIHBo eTsKLX0KLQotLyoqCi0gKiBkc2lfcGh5X3B1dCgpIC0gcmVsZWFzZSBkc2kgcGh5IGhhbmRsZQot ICogQGRzaV9waHk6ICAgICAgICAgICAgICBEU0kgUEhZIGhhbmRsZS4KLSAqCi0gKiBSZWxlYXNl IHRoZSBEU0kgUEhZIGhhcmR3YXJlLiBEcml2ZXIgd2lsbCBjbGVhbiB1cCBhbGwgcmVzb3VyY2Vz IGFuZCBwdXRzCi0gKiBiYWNrIHRoZSBEU0kgUEhZIGludG8gcmVzZXQgc3RhdGUuCi0gKi8KLXZv aWQgZHNpX3BoeV9wdXQoc3RydWN0IG1zbV9kc2lfcGh5ICpkc2lfcGh5KQotewotCW11dGV4X2xv Y2soJmRzaV9waHktPnBoeV9sb2NrKTsKLQotCWlmIChkc2lfcGh5LT5yZWZjb3VudCA9PSAwKQot CQlwcl9lcnIoIlVuYmFsYW5jZWQgJXMgY2FsbFxuIiwgX19mdW5jX18pOwotCWVsc2UKLQkJZHNp X3BoeS0+cmVmY291bnQtLTsKLQotCW11dGV4X3VubG9jaygmZHNpX3BoeS0+cGh5X2xvY2spOwot fQotCi0vKioKLSAqIGRzaV9waHlfZHJ2X2luaXQoKSAtIGluaXRpYWxpemUgZHNpIHBoeSBkcml2 ZXIKLSAqIEBkc2lfcGh5OiAgICAgICAgIERTSSBQSFkgaGFuZGxlLgotICoKLSAqIEluaXRpYWxp emVzIERTSSBQSFkgZHJpdmVyLiBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIGRzaV9waHlfZ2V0KCku Ci0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX3BoeV9kcnZfaW5pdChz dHJ1Y3QgbXNtX2RzaV9waHkgKmRzaV9waHkpCi17Ci0JY2hhciBkYmdfbmFtZVtEU0lfREVCVUdf TkFNRV9MRU5dOwotCi0Jc25wcmludGYoZGJnX25hbWUsIERTSV9ERUJVR19OQU1FX0xFTiwgImRz aSVkX3BoeSIsIGRzaV9waHktPmluZGV4KTsKLQlkcHVfZGJnX3JlZ19yZWdpc3Rlcl9iYXNlKGRi Z19uYW1lLCBkc2lfcGh5LT5ody5iYXNlLAotCQkJCW1zbV9pb21hcF9zaXplKGRzaV9waHktPnBk ZXYsICJkc2lfcGh5IikpOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGRzaV9waHlfZHJ2X2Rl aW5pdCgpIC0gZGUtaW5pdGlhbGl6ZSBkc2kgcGh5IGRyaXZlcgotICogQGRzaV9waHk6ICAgICAg ICAgIERTSSBQSFkgaGFuZGxlLgotICoKLSAqIFJlbGVhc2UgYWxsIHJlc291cmNlcyBhY3F1aXJl ZCBieSBkc2lfcGh5X2Rydl9pbml0KCkuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICov Ci1pbnQgZHNpX3BoeV9kcnZfZGVpbml0KHN0cnVjdCBtc21fZHNpX3BoeSAqZHNpX3BoeSkKLXsK LQlyZXR1cm4gMDsKLX0KLQotaW50IGRzaV9waHlfY2xrX2NiX3JlZ2lzdGVyKHN0cnVjdCBtc21f ZHNpX3BoeSAqZHNpX3BoeSwKLQlzdHJ1Y3QgY2xrX2N0cmxfY2IgKmNsa19jYikKLXsKLQlpZiAo IWRzaV9waHkgfHwgIWNsa19jYikgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZHNpX3BoeS0+Y2xrX2NiLnByaXYgPSBjbGtfY2ItPnBy aXY7Ci0JZHNpX3BoeS0+Y2xrX2NiLmRzaV9jbGtfY2IgPSBjbGtfY2ItPmRzaV9jbGtfY2I7Ci0J cmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZHNpX3BoeV92YWxpZGF0ZV9tb2RlKCkgLSB2YWxpZGF0 ZSBhIGRpc3BsYXkgbW9kZQotICogQGRzaV9waHk6ICAgICAgICAgICAgRFNJIFBIWSBoYW5kbGUu Ci0gKiBAbW9kZTogICAgICAgICAgICAgICBNb2RlIGluZm9ybWF0aW9uLgotICoKLSAqIFZhbGlk YXRpb24gd2lsbCBmYWlsIGlmIHRoZSBtb2RlIGNhbm5vdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIFBI WSBkcml2ZXIgb3IKLSAqIGhhcmR3YXJlLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAq LwotaW50IGRzaV9waHlfdmFsaWRhdGVfbW9kZShzdHJ1Y3QgbXNtX2RzaV9waHkgKmRzaV9waHks Ci0JCQkgIHN0cnVjdCBkc2lfbW9kZV9pbmZvICptb2RlKQotewotCWludCByYyA9IDA7Ci0KLQlp ZiAoIWRzaV9waHkgfHwgIW1vZGUpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0J CXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRzaV9waHktPnBoeV9sb2NrKTsK LQotCXByX2RlYnVnKCJbUEhZXyVkXSBTa2lwcGluZyB2YWxpZGF0aW9uXG4iLCBkc2lfcGh5LT5p bmRleCk7Ci0KLQltdXRleF91bmxvY2soJmRzaV9waHktPnBoeV9sb2NrKTsKLQlyZXR1cm4gcmM7 Ci19Ci0KLS8qKgotICogZHNpX3BoeV9zZXRfcG93ZXJfc3RhdGUoKSAtIGVuYWJsZS9kaXNhYmxl IGRzaSBwaHkgcG93ZXIgc3VwcGxpZXMKLSAqIEBkc2lfcGh5OiAgICAgICAgICAgICAgIERTSSBQ SFkgaGFuZGxlLgotICogQGVuYWJsZTogICAgICAgICAgICAgICAgQm9vbGVhbiBmbGFnIHRvIGVu YWJsZS9kaXNhYmxlLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9w aHlfc2V0X3Bvd2VyX3N0YXRlKHN0cnVjdCBtc21fZHNpX3BoeSAqZHNpX3BoeSwgYm9vbCBlbmFi bGUpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghZHNpX3BoeSkgewotCQlwcl9lcnIoIkludmFs aWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZHNp X3BoeS0+cGh5X2xvY2spOwotCi0JaWYgKGVuYWJsZSA9PSBkc2lfcGh5LT5wb3dlcl9zdGF0ZSkg ewotCQlwcl9lcnIoIltQSFlfJWRdIE5vIHN0YXRlIGNoYW5nZVxuIiwgZHNpX3BoeS0+aW5kZXgp OwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmIChlbmFibGUpIHsKLQkJcmMgPSBkc2lfcHdyX2Vu YWJsZV9yZWd1bGF0b3IoJmRzaV9waHktPnB3cl9pbmZvLmRpZ2l0YWwsIHRydWUpOwotCQlpZiAo cmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSBkaWdpdGFsIHJlZ3VsYXRvclxuIik7 Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJaWYgKGRzaV9waHktPmRzaV9waHlfc3RhdGUgPT0g RFNJX1BIWV9FTkdJTkVfT0ZGKSB7Ci0JCQlyYyA9IGRzaV9wd3JfZW5hYmxlX3JlZ3VsYXRvcigK LQkJCQkmZHNpX3BoeS0+cHdyX2luZm8ucGh5X3B3ciwgdHJ1ZSk7Ci0JCQlpZiAocmMpIHsKLQkJ CQlwcl9lcnIoImZhaWxlZCB0byBlbmFibGUgcGh5IHBvd2VyXG4iKTsKLQkJCQkodm9pZClkc2lf cHdyX2VuYWJsZV9yZWd1bGF0b3IoCi0JCQkJCSZkc2lfcGh5LT5wd3JfaW5mby5kaWdpdGFsLCBm YWxzZSk7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChkc2lf cGh5LT5kc2lfcGh5X3N0YXRlID09IERTSV9QSFlfRU5HSU5FX09GRikgewotCQkJcmMgPSBkc2lf cHdyX2VuYWJsZV9yZWd1bGF0b3IoCi0JCQkJJmRzaV9waHktPnB3cl9pbmZvLnBoeV9wd3IsIGZh bHNlKTsKLQkJCWlmIChyYykgewotCQkJCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSBkaWdpdGFs IHJlZ3VsYXRvclxuIik7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJfQotCi0JCXJjID0gZHNp X3B3cl9lbmFibGVfcmVndWxhdG9yKCZkc2lfcGh5LT5wd3JfaW5mby5kaWdpdGFsLAotCQkJCQkg ICAgICBmYWxzZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gZW5hYmxlIHBo eSBwb3dlclxuIik7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi0JZHNpX3BoeS0+cG93ZXJf c3RhdGUgPSBlbmFibGU7Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJmRzaV9waHktPnBoeV9sb2Nr KTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BoeV9lbmFibGVfdWxwcyhzdHJ1 Y3QgbXNtX2RzaV9waHkgKnBoeSwKLQkJc3RydWN0IGRzaV9ob3N0X2NvbmZpZyAqY29uZmlnLCBi b29sIGNsYW1wX2VuYWJsZWQpCi17Ci0JaW50IHJjID0gMDsKLQl1MzIgbGFuZXMgPSAwOwotCXUz MiB1bHBzX2xhbmVzOwotCi0JaWYgKGNvbmZpZy0+cGFuZWxfbW9kZSA9PSBEU0lfT1BfQ01EX01P REUpCi0JCWxhbmVzID0gY29uZmlnLT5jb21tb25fY29uZmlnLmRhdGFfbGFuZXM7Ci0JbGFuZXMg fD0gRFNJX0NMT0NLX0xBTkU7Ci0KLQkvKgotCSAqIElmIERTSSBjbGFtcHMgYXJlIGVuYWJsZWQs IGl0IG1lYW5zIHRoYXQgdGhlIERTSSBsYW5lcyBhcmUKLQkgKiBhbHJlYWR5IGluIGlkbGUgc3Rh dGUuIENoZWNraW5nIGZvciBsYW5lcyB0byBiZSBpbiBpZGxlIHN0YXRlCi0JICogc2hvdWxkIGJl IHNraXBwZWQgZHVyaW5nIFVMUFMgZW50cnkgcHJvZ3JhbW1pbmcgd2hpbGUgY29taW5nCi0JICog b3V0IG9mIGlkbGUgc2NyZWVuLgotCSAqLwotCWlmICghY2xhbXBfZW5hYmxlZCkgewotCQlyYyA9 IHBoeS0+aHcub3BzLnVscHNfb3BzLndhaXRfZm9yX2xhbmVfaWRsZSgmcGh5LT5odywgbGFuZXMp OwotCQlpZiAocmMpIHsKLQkJCXByX2VycigibGFuZXMgbm90IGVudGVyaW5nIGlkbGUsIHNraXAg VUxQU1xuIik7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQl9Ci0KLQlwaHktPmh3Lm9wcy51bHBzX29w cy51bHBzX3JlcXVlc3QoJnBoeS0+aHcsICZwaHktPmNmZywgbGFuZXMpOwotCi0JdWxwc19sYW5l cyA9IHBoeS0+aHcub3BzLnVscHNfb3BzLmdldF9sYW5lc19pbl91bHBzKCZwaHktPmh3KTsKLQot CWlmICghcGh5LT5ody5vcHMudWxwc19vcHMuaXNfbGFuZXNfaW5fdWxwcyhsYW5lcywgdWxwc19s YW5lcykpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gZW50ZXIgVUxQUywgcmVxdWVzdD0weCV4LCBh Y3R1YWw9MHgleFxuIiwKLQkJICAgICAgIGxhbmVzLCB1bHBzX2xhbmVzKTsKLQkJcmMgPSAtRUlP OwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGh5X2Rpc2FibGVfdWxw cyhzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSwKLQkJIHN0cnVjdCBkc2lfaG9zdF9jb25maWcgKmNv bmZpZykKLXsKLQl1MzIgdWxwc19sYW5lcywgbGFuZXMgPSAwOwotCi0JaWYgKGNvbmZpZy0+cGFu ZWxfbW9kZSA9PSBEU0lfT1BfQ01EX01PREUpCi0JCWxhbmVzID0gY29uZmlnLT5jb21tb25fY29u ZmlnLmRhdGFfbGFuZXM7Ci0JbGFuZXMgfD0gRFNJX0NMT0NLX0xBTkU7Ci0KLQl1bHBzX2xhbmVz ID0gcGh5LT5ody5vcHMudWxwc19vcHMuZ2V0X2xhbmVzX2luX3VscHMoJnBoeS0+aHcpOwotCi0J aWYgKCFwaHktPmh3Lm9wcy51bHBzX29wcy5pc19sYW5lc19pbl91bHBzKGxhbmVzLCB1bHBzX2xh bmVzKSkgewotCQlwcl9lcnIoIk1pc21hdGNoIGluIFVMUFM6IGxhbmVzOiVkLCB1bHBzX2xhbmVz OiVkXG4iLAotCQkJCWxhbmVzLCB1bHBzX2xhbmVzKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0J cGh5LT5ody5vcHMudWxwc19vcHMudWxwc19leGl0KCZwaHktPmh3LCAmcGh5LT5jZmcsIGxhbmVz KTsKLQotCXVscHNfbGFuZXMgPSBwaHktPmh3Lm9wcy51bHBzX29wcy5nZXRfbGFuZXNfaW5fdWxw cygmcGh5LT5odyk7Ci0KLQlpZiAocGh5LT5ody5vcHMudWxwc19vcHMuaXNfbGFuZXNfaW5fdWxw cyhsYW5lcywgdWxwc19sYW5lcykpIHsKLQkJcHJfZXJyKCJMYW5lcyAoMHgleCkgc3R1Y2sgaW4g VUxQU1xuIiwgdWxwc19sYW5lcyk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXJldHVybiAwOwot fQotCi0KLWludCBkc2lfcGh5X3NldF91bHBzKHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5LCBzdHJ1 Y3QgZHNpX2hvc3RfY29uZmlnICpjb25maWcsCi0JCWJvb2wgZW5hYmxlLCBib29sIGNsYW1wX2Vu YWJsZWQpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghcGh5KSB7Ci0JCXByX2VycigiSW52YWxp ZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIXBoeS0+aHcub3Bz LnVscHNfb3BzLnVscHNfcmVxdWVzdCB8fAotCQkJIXBoeS0+aHcub3BzLnVscHNfb3BzLnVscHNf ZXhpdCB8fAotCQkJIXBoeS0+aHcub3BzLnVscHNfb3BzLmdldF9sYW5lc19pbl91bHBzIHx8Ci0J CQkhcGh5LT5ody5vcHMudWxwc19vcHMuaXNfbGFuZXNfaW5fdWxwcyB8fAotCQkJIXBoeS0+aHcu b3BzLnVscHNfb3BzLndhaXRfZm9yX2xhbmVfaWRsZSkgewotCQlwcl9kZWJ1ZygiRFNJIFBIWSBV TFBTIG9wcyBub3QgcHJlc2VudFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCW11dGV4X2xvY2so JnBoeS0+cGh5X2xvY2spOwotCi0JaWYgKGVuYWJsZSkKLQkJcmMgPSBkc2lfcGh5X2VuYWJsZV91 bHBzKHBoeSwgY29uZmlnLCBjbGFtcF9lbmFibGVkKTsKLQllbHNlCi0JCXJjID0gZHNpX3BoeV9k aXNhYmxlX3VscHMocGh5LCBjb25maWcpOwotCi0JaWYgKHJjKSB7Ci0JCXByX2VycigiW0RTSV9Q SFklZF0gVWxwcyBzdGF0ZSBjaGFuZ2UoJWQpIGZhaWxlZCwgcmM9JWRcbiIsCi0JCQlwaHktPmlu ZGV4LCBlbmFibGUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JcHJfZGVidWcoIltEU0lfUEhZ JWRdIFVMUFMgc3RhdGUgPSAlZFxuIiwgcGh5LT5pbmRleCwgZW5hYmxlKTsKLQotZXJyb3I6Ci0J bXV0ZXhfdW5sb2NrKCZwaHktPnBoeV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICog ZHNpX3BoeV9lbmFibGUoKSAtIGVuYWJsZSBEU0kgUEhZIGhhcmR3YXJlCi0gKiBAZHNpX3BoeTog ICAgICAgICAgICBEU0kgUEhZIGhhbmRsZS4KLSAqIEBjb25maWc6ICAgICAgICAgICAgIERTSSBo b3N0IGNvbmZpZ3VyYXRpb24uCi0gKiBAcGxsX3NvdXJjZTogICAgICAgICBTb3VyY2UgUExMIGZv ciBQSFkgY2xvY2suCi0gKiBAc2tpcF92YWxpZGF0aW9uOiAgICBWYWxpZGF0aW9uIHdpbGwgbm90 IGJlIHBlcmZvcm1lZCBvbiBwYXJhbWV0ZXJzLgotICoKLSAqIFZhbGlkYXRlcyBhbmQgZW5hYmxl cyBEU0kgUEhZLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9waHlf ZW5hYmxlKHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5LAotCQkgICBzdHJ1Y3QgZHNpX2hvc3RfY29u ZmlnICpjb25maWcsCi0JCSAgIGVudW0gZHNpX3BoeV9wbGxfc291cmNlIHBsbF9zb3VyY2UsCi0J CSAgIGJvb2wgc2tpcF92YWxpZGF0aW9uKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIXBoeSB8 fCAhY29uZmlnKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwaHktPnBoeV9sb2NrKTsKLQotCWlmICghc2tpcF92 YWxpZGF0aW9uKQotCQlwcl9kZWJ1ZygiW1BIWV8lZF0gVE9ETzogcGVyZm9ybSB2YWxpZGF0aW9u XG4iLCBwaHktPmluZGV4KTsKLQotCW1lbWNweSgmcGh5LT5tb2RlLCAmY29uZmlnLT52aWRlb190 aW1pbmcsIHNpemVvZihwaHktPm1vZGUpKTsKLQltZW1jcHkoJnBoeS0+Y2ZnLmxhbmVfbWFwLCAm Y29uZmlnLT5sYW5lX21hcCwgc2l6ZW9mKGNvbmZpZy0+bGFuZV9tYXApKTsKLQlwaHktPmRhdGFf bGFuZXMgPSBjb25maWctPmNvbW1vbl9jb25maWcuZGF0YV9sYW5lczsKLQlwaHktPmRzdF9mb3Jt YXQgPSBjb25maWctPmNvbW1vbl9jb25maWcuZHN0X2Zvcm1hdDsKLQlwaHktPmNmZy5wbGxfc291 cmNlID0gcGxsX3NvdXJjZTsKLQotCS8qKgotCSAqIElmIFBIWSB0aW1pbmcgcGFyYW1ldGVycyBh cmUgbm90IHByZXNlbnQgaW4gcGFuZWwgZHRzaSBmaWxlLAotCSAqIHRoZW4gY2FsY3VsYXRlIHRo ZW0gaW4gdGhlIGRyaXZlcgotCSAqLwotCWlmICghcGh5LT5jZmcuaXNfcGh5X3RpbWluZ19wcmVz ZW50KQotCQlyYyA9IHBoeS0+aHcub3BzLmNhbGN1bGF0ZV90aW1pbmdfcGFyYW1zKCZwaHktPmh3 LAotCQkJCQkJICZwaHktPm1vZGUsCi0JCQkJCQkgJmNvbmZpZy0+Y29tbW9uX2NvbmZpZywKLQkJ CQkJCSAmcGh5LT5jZmcudGltaW5nKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxl ZCB0byBzZXQgdGltaW5nLCByYz0lZFxuIiwgcGh5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7 Ci0JfQotCi0JZHNpX3BoeV9lbmFibGVfaHcocGh5KTsKLQlwaHktPmRzaV9waHlfc3RhdGUgPSBE U0lfUEhZX0VOR0lORV9PTjsKLQotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZwaHktPnBoeV9sb2Nr KTsKLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfcGh5X2Rpc2FibGUoKSAtIGRpc2Fi bGUgRFNJIFBIWSBoYXJkd2FyZS4KLSAqIEBwaHk6ICAgICAgICBEU0kgUEhZIGhhbmRsZS4KLSAq Ci0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfcGh5X2Rpc2FibGUoc3RydWN0 IG1zbV9kc2lfcGh5ICpwaHkpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghcGh5KSB7Ci0JCXBy X2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRl eF9sb2NrKCZwaHktPnBoeV9sb2NrKTsKLQlkc2lfcGh5X2Rpc2FibGVfaHcocGh5KTsKLQlwaHkt PmRzaV9waHlfc3RhdGUgPSBEU0lfUEhZX0VOR0lORV9PRkY7Ci0JbXV0ZXhfdW5sb2NrKCZwaHkt PnBoeV9sb2NrKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfcGh5X2lkbGVfY3Ry bCgpIC0gZW5hYmxlL2Rpc2FibGUgRFNJIFBIWSBkdXJpbmcgaWRsZSBzY3JlZW4KLSAqIEBwaHk6 ICAgICAgICAgIERTSSBQSFkgaGFuZGxlCi0gKiBAZW5hYmxlOiAgICAgICBib29sZWFuIHRvIHNw ZWNpZnkgUEhZIGVuYWJsZS9kaXNhYmxlLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAq LwotCi1pbnQgZHNpX3BoeV9pZGxlX2N0cmwoc3RydWN0IG1zbV9kc2lfcGh5ICpwaHksIGJvb2wg ZW5hYmxlKQotewotCWlmICghcGh5KSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwot CQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwaHktPnBoeV9sb2NrKTsKLQlp ZiAoZW5hYmxlKSB7Ci0JCWlmIChwaHktPmh3Lm9wcy5waHlfaWRsZV9vbikKLQkJCXBoeS0+aHcu b3BzLnBoeV9pZGxlX29uKCZwaHktPmh3LCAmcGh5LT5jZmcpOwotCi0JCWlmIChwaHktPmh3Lm9w cy5yZWd1bGF0b3JfZW5hYmxlKQotCQkJcGh5LT5ody5vcHMucmVndWxhdG9yX2VuYWJsZSgmcGh5 LT5odywKLQkJCQkmcGh5LT5jZmcucmVndWxhdG9ycyk7Ci0JfSBlbHNlIHsKLQkJaWYgKHBoeS0+ aHcub3BzLnBoeV9pZGxlX29mZikKLQkJCXBoeS0+aHcub3BzLnBoeV9pZGxlX29mZigmcGh5LT5o dyk7Ci0JfQotCW11dGV4X3VubG9jaygmcGh5LT5waHlfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0K LQotLyoqCi0gKiBkc2lfcGh5X3NldF90aW1pbmdfcGFyYW1zKCkgLSB0aW1pbmcgcGFyYW1ldGVy cyBmb3IgdGhlIHBhbmVsCi0gKiBAcGh5OiAgICAgICAgICBEU0kgUEhZIGhhbmRsZQotICogQHRp bWluZzogICAgICAgYXJyYXkgaG9sZGluZyB0aW1pbmcgcGFyYW1zLgotICogQHNpemU6ICAgICAg ICAgc2l6ZSBvZiB0aGUgYXJyYXkuCi0gKgotICogV2hlbiBQSFkgdGltaW5nIGNhbGN1bGF0b3Ig aXMgbm90IGltcGxlbWVudGVkLCB0aGlzIGFycmF5IHdpbGwgYmUgdXNlZCB0bwotICogcGFzcyBQ SFkgdGltaW5nIGluZm9ybWF0aW9uLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwot aW50IGRzaV9waHlfc2V0X3RpbWluZ19wYXJhbXMoc3RydWN0IG1zbV9kc2lfcGh5ICpwaHksCi0J CQkgICAgICB1MzIgKnRpbWluZywgdTMyIHNpemUpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICgh cGh5IHx8ICF0aW1pbmcgfHwgIXNpemUpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJnBoeS0+cGh5X2xvY2spOwot Ci0JaWYgKHBoeS0+aHcub3BzLnBoeV90aW1pbmdfdmFsKQotCQlyYyA9IHBoeS0+aHcub3BzLnBo eV90aW1pbmdfdmFsKCZwaHktPmNmZy50aW1pbmcsIHRpbWluZywgc2l6ZSk7Ci0JaWYgKCFyYykK LQkJcGh5LT5jZmcuaXNfcGh5X3RpbWluZ19wcmVzZW50ID0gdHJ1ZTsKLQltdXRleF91bmxvY2so JnBoeS0+cGh5X2xvY2spOwotCXJldHVybiByYzsKLX0KLQotdm9pZCBkc2lfcGh5X2Rydl9yZWdp c3Rlcih2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZHNpX3BoeV9wbGF0Zm9y bV9kcml2ZXIpOwotfQotCi12b2lkIGRzaV9waHlfZHJ2X3VucmVnaXN0ZXIodm9pZCkKLXsKLQlw bGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZHNpX3BoeV9wbGF0Zm9ybV9kcml2ZXIpOwotfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5LmggYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHkuaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggOTIzMDdlOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2RzaS1zdGFnaW5nL2RzaV9waHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzNSArMCwwIEBACi0v KgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9u bHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2lmbmRlZiBfRFNJX1BIWV9IXwot I2RlZmluZSBfRFNJX1BIWV9IXwotCi0jaW5jbHVkZSAiZHNpX2RlZnMuaCIKLSNpbmNsdWRlICJk c2lfY2xrLmgiCi0jaW5jbHVkZSAiZHNpX3B3ci5oIgotI2luY2x1ZGUgImRzaV9waHlfaHcuaCIK LQotc3RydWN0IGRzaV92ZXJfc3BlY19pbmZvIHsKLQllbnVtIGRzaV9waHlfdmVyc2lvbiB2ZXJz aW9uOwotCXUzMiBsYW5lX2NmZ19jb3VudDsKLQl1MzIgc3RyZW5ndGhfY2ZnX2NvdW50OwotCXUz MiByZWd1bGF0b3JfY2ZnX2NvdW50OwotCXUzMiB0aW1pbmdfY2ZnX2NvdW50OwotfTsKLQotLyoq Ci0gKiBzdHJ1Y3QgZHNpX3BoeV9wb3dlcl9pbmZvIC0gZGlnaXRhbCBhbmQgYW5hbG9nIHBvd2Vy IHN1cHBsaWVzIGZvciBEU0kgUEhZCi0gKiBAZGlnaXRhbDogICAgICAgRGlnaXRhbCBwb3dlciBz dXBwbHkgZm9yIERTSSBQSFkuCi0gKiBAcGh5X3B3cjogICAgICAgQW5hbG9nIHBvd2VyIHN1cHBs aWVzIGZvciBEU0kgUEhZIHRvIHdvcmsuCi0gKi8KLXN0cnVjdCBkc2lfcGh5X3Bvd2VyX2luZm8g ewotCXN0cnVjdCBkc2lfcmVndWxhdG9yX2luZm8gZGlnaXRhbDsKLQlzdHJ1Y3QgZHNpX3JlZ3Vs YXRvcl9pbmZvIHBoeV9wd3I7Ci19OwotCi0vKioKLSAqIGVudW0gcGh5X2VuZ2luZV9zdGF0ZSAt IGRlZmluZSBlbmdpbmUgc3RhdHVzIGZvciBkc2kgcGh5LgotICogQERTSV9QSFlfRU5HSU5FX09G RjogIEVuZ2luZSBpcyB0dXJuZWQgb2ZmLgotICogQERTSV9QSFlfRU5HSU5FX09OOiAgIEVuZ2lu ZSBpcyB0dXJuZWQgb24uCi0gKiBARFNJX1BIWV9FTkdJTkVfTUFYOiAgTWF4aW11bSB2YWx1ZS4K LSAqLwotZW51bSBwaHlfZW5naW5lX3N0YXRlIHsKLQlEU0lfUEhZX0VOR0lORV9PRkYgPSAwLAot CURTSV9QSFlfRU5HSU5FX09OLAotCURTSV9QSFlfRU5HSU5FX01BWCwKLX07Ci0KLQotLyoqCi0g KiBzdHJ1Y3QgbXNtX2RzaV9waHkgLSBEU0kgUEhZIG9iamVjdAotICogQHBkZXY6ICAgICAgICAg ICAgICBQb2ludGVyIHRvIHBsYXRmb3JtIGRldmljZS4KLSAqIEBpbmRleDogICAgICAgICAgICAg SW5zdGFuY2UgaWQuCi0gKiBAbmFtZTogICAgICAgICAgICAgIE5hbWUgb2YgdGhlIFBIWSBpbnN0 YW5jZS4KLSAqIEByZWZjb3VudDogICAgICAgICAgUmVmZXJlbmNlIGNvdW50LgotICogQHBoeV9s b2NrOiAgICAgICAgICBNdXRleCBmb3IgaGFyZHdhcmUgYW5kIG9iamVjdCBhY2Nlc3MuCi0gKiBA dmVyX2luZm86ICAgICAgICAgIFZlcnNpb24gc3BlY2lmaWMgcGh5IHBhcmFtZXRlcnMuCi0gKiBA aHc6ICAgICAgICAgICAgICAgIERTSSBQSFkgaGFyZHdhcmUgb2JqZWN0LgotICogQHB3cl9pbmZv OiAgICAgICAgICBQb3dlciBpbmZvcm1hdGlvbi4KLSAqIEBjZmc6ICAgICAgICAgICAgICAgRFNJ IHBoeSBjb25maWd1cmF0aW9uLgotICogQGNsa19jYjoJICAgICAgIHN0cnVjdHVyZSBjb250YWlu aW5nIGNhbGwgYmFja3MgZm9yIGNsb2NrIGNvbnRyb2wKLSAqIEBwb3dlcl9zdGF0ZTogICAgICAg VHJ1ZSBpZiBQSFkgaXMgcG93ZXJlZCBvbi4KLSAqIEBkc2lfcGh5X3N0YXRlOiAgICAgUEhZIHN0 YXRlIGluZm9ybWF0aW9uLgotICogQG1vZGU6ICAgICAgICAgICAgICBDdXJyZW50IG1vZGUuCi0g KiBAZGF0YV9sYW5lczogICAgICAgIE51bWJlciBvZiBkYXRhIGxhbmVzIHVzZWQuCi0gKiBAZHN0 X2Zvcm1hdDogICAgICAgIERlc3RpbmF0aW9uIGZvcm1hdC4KLSAqLwotc3RydWN0IG1zbV9kc2lf cGh5IHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCWludCBpbmRleDsKLQljb25z dCBjaGFyICpuYW1lOwotCXUzMiByZWZjb3VudDsKLQlzdHJ1Y3QgbXV0ZXggcGh5X2xvY2s7Ci0K LQljb25zdCBzdHJ1Y3QgZHNpX3Zlcl9zcGVjX2luZm8gKnZlcl9pbmZvOwotCXN0cnVjdCBkc2lf cGh5X2h3IGh3OwotCi0Jc3RydWN0IGRzaV9waHlfcG93ZXJfaW5mbyBwd3JfaW5mbzsKLQotCXN0 cnVjdCBkc2lfcGh5X2NmZyBjZmc7Ci0Jc3RydWN0IGNsa19jdHJsX2NiIGNsa19jYjsKLQotCWVu dW0gcGh5X2VuZ2luZV9zdGF0ZSBkc2lfcGh5X3N0YXRlOwotCWJvb2wgcG93ZXJfc3RhdGU7Ci0J c3RydWN0IGRzaV9tb2RlX2luZm8gbW9kZTsKLQllbnVtIGRzaV9kYXRhX2xhbmVzIGRhdGFfbGFu ZXM7Ci0JZW51bSBkc2lfcGl4ZWxfZm9ybWF0IGRzdF9mb3JtYXQ7Ci19OwotCi0vKioKLSAqIGRz aV9waHlfZ2V0KCkgLSBnZXQgYSBkc2kgcGh5IGhhbmRsZSBmcm9tIGRldmljZSBub2RlCi0gKiBA b2Zfbm9kZTogICAgICAgICAgIGRldmljZSBub2RlIGZvciBkc2kgcGh5IGNvbnRyb2xsZXIKLSAq Ci0gKiBHZXRzIHRoZSBEU0kgUEhZIGhhbmRsZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgb2Zfbm9k ZS4gVGhlIHJlZiBjb3VudCBpcwotICogaW5jcmVtZW50ZWQgdG8gb25lIGFsbCBzdWJzZXF1ZW50 cyBnZXQgd2lsbCBmYWlsIHVudGlsIHRoZSBvcmlnaW5hbCBjbGllbnQKLSAqIGNhbGxzIGEgcHV0 LgotICoKLSAqIFJldHVybjogRFNJIFBIWSBoYW5kbGUgb3IgYW4gZXJyb3IgY29kZS4KLSAqLwot c3RydWN0IG1zbV9kc2lfcGh5ICpkc2lfcGh5X2dldChzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25v ZGUpOwotCi0vKioKLSAqIGRzaV9waHlfcHV0KCkgLSByZWxlYXNlIGRzaSBwaHkgaGFuZGxlCi0g KiBAZHNpX3BoeTogICAgICAgICAgICAgIERTSSBQSFkgaGFuZGxlLgotICoKLSAqIFJlbGVhc2Ug dGhlIERTSSBQSFkgaGFyZHdhcmUuIERyaXZlciB3aWxsIGNsZWFuIHVwIGFsbCByZXNvdXJjZXMg YW5kIHB1dHMKLSAqIGJhY2sgdGhlIERTSSBQSFkgaW50byByZXNldCBzdGF0ZS4KLSAqLwotdm9p ZCBkc2lfcGh5X3B1dChzdHJ1Y3QgbXNtX2RzaV9waHkgKmRzaV9waHkpOwotCi0vKioKLSAqIGRz aV9waHlfZHJ2X2luaXQoKSAtIGluaXRpYWxpemUgZHNpIHBoeSBkcml2ZXIKLSAqIEBkc2lfcGh5 OiAgICAgICAgIERTSSBQSFkgaGFuZGxlLgotICoKLSAqIEluaXRpYWxpemVzIERTSSBQSFkgZHJp dmVyLiBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIGRzaV9waHlfZ2V0KCkuCi0gKgotICogUmV0dXJu OiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX3BoeV9kcnZfaW5pdChzdHJ1Y3QgbXNtX2RzaV9w aHkgKmRzaV9waHkpOwotCi0vKioKLSAqIGRzaV9waHlfZHJ2X2RlaW5pdCgpIC0gZGUtaW5pdGlh bGl6ZSBkc2kgcGh5IGRyaXZlcgotICogQGRzaV9waHk6ICAgICAgICAgIERTSSBQSFkgaGFuZGxl LgotICoKLSAqIFJlbGVhc2UgYWxsIHJlc291cmNlcyBhY3F1aXJlZCBieSBkc2lfcGh5X2Rydl9p bml0KCkuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX3BoeV9kcnZf ZGVpbml0KHN0cnVjdCBtc21fZHNpX3BoeSAqZHNpX3BoeSk7Ci0KLS8qKgotICogZHNpX3BoeV92 YWxpZGF0ZV9tb2RlKCkgLSB2YWxpZGF0ZSBhIGRpc3BsYXkgbW9kZQotICogQGRzaV9waHk6ICAg ICAgICAgICAgRFNJIFBIWSBoYW5kbGUuCi0gKiBAbW9kZTogICAgICAgICAgICAgICBNb2RlIGlu Zm9ybWF0aW9uLgotICoKLSAqIFZhbGlkYXRpb24gd2lsbCBmYWlsIGlmIHRoZSBtb2RlIGNhbm5v dCBiZSBzdXBwb3J0ZWQgYnkgdGhlIFBIWSBkcml2ZXIgb3IKLSAqIGhhcmR3YXJlLgotICoKLSAq IFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9waHlfdmFsaWRhdGVfbW9kZShzdHJ1 Y3QgbXNtX2RzaV9waHkgKmRzaV9waHksCi0JCQkgIHN0cnVjdCBkc2lfbW9kZV9pbmZvICptb2Rl KTsKLQotLyoqCi0gKiBkc2lfcGh5X3NldF9wb3dlcl9zdGF0ZSgpIC0gZW5hYmxlL2Rpc2FibGUg ZHNpIHBoeSBwb3dlciBzdXBwbGllcwotICogQGRzaV9waHk6ICAgICAgICAgICAgICAgRFNJIFBI WSBoYW5kbGUuCi0gKiBAZW5hYmxlOiAgICAgICAgICAgICAgICBCb29sZWFuIGZsYWcgdG8gZW5h YmxlL2Rpc2FibGUuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX3Bo eV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IG1zbV9kc2lfcGh5ICpkc2lfcGh5LCBib29sIGVuYWJs ZSk7Ci0KLS8qKgotICogZHNpX3BoeV9lbmFibGUoKSAtIGVuYWJsZSBEU0kgUEhZIGhhcmR3YXJl Ci0gKiBAZHNpX3BoeTogICAgICAgICAgICBEU0kgUEhZIGhhbmRsZS4KLSAqIEBjb25maWc6ICAg ICAgICAgICAgIERTSSBob3N0IGNvbmZpZ3VyYXRpb24uCi0gKiBAcGxsX3NvdXJjZTogICAgICAg ICBTb3VyY2UgUExMIGZvciBQSFkgY2xvY2suCi0gKiBAc2tpcF92YWxpZGF0aW9uOiAgICBWYWxp ZGF0aW9uIHdpbGwgbm90IGJlIHBlcmZvcm1lZCBvbiBwYXJhbWV0ZXJzLgotICoKLSAqIFZhbGlk YXRlcyBhbmQgZW5hYmxlcyBEU0kgUEhZLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAq LwotaW50IGRzaV9waHlfZW5hYmxlKHN0cnVjdCBtc21fZHNpX3BoeSAqZHNpX3BoeSwKLQkJICAg c3RydWN0IGRzaV9ob3N0X2NvbmZpZyAqY29uZmlnLAotCQkgICBlbnVtIGRzaV9waHlfcGxsX3Nv dXJjZSBwbGxfc291cmNlLAotCQkgICBib29sIHNraXBfdmFsaWRhdGlvbik7Ci0KLS8qKgotICog ZHNpX3BoeV9kaXNhYmxlKCkgLSBkaXNhYmxlIERTSSBQSFkgaGFyZHdhcmUuCi0gKiBAcGh5OiAg ICAgICAgRFNJIFBIWSBoYW5kbGUuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1p bnQgZHNpX3BoeV9kaXNhYmxlKHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5KTsKLQotLyoqCi0gKiBk c2lfcGh5X3NldF91bHBzKCkgLSBzZXQgdWxwcyBzdGF0ZSBmb3IgRFNJIHBIWQotICogQHBoeTog ICAgICAgICAgRFNJIFBIWSBoYW5kbGUKLSAqIEBjb25maWc6CSAgRFNpIGhvc3QgY29uZmlndXJh dGlvbiBpbmZvcm1hdGlvbi4KLSAqIEBlbmFibGU6CSAgRW5hYmxlL0Rpc2FibGUKLSAqIEBjbGFt cF9lbmFibGVkOiBtbXNzX2NsYW1wIGVuYWJsZWQvZGlzYWJsZWQKLSAqCi0gKiBSZXR1cm46IGVy cm9yIGNvZGUuCi0gKi8KLWludCBkc2lfcGh5X3NldF91bHBzKHN0cnVjdCBtc21fZHNpX3BoeSAq cGh5LCAgc3RydWN0IGRzaV9ob3N0X2NvbmZpZyAqY29uZmlnLAotCQlib29sIGVuYWJsZSwgYm9v bCBjbGFtcF9lbmFibGVkKTsKLQotLyoqCi0gKiBkc2lfcGh5X2Nsa19jYl9yZWdpc3RlcigpIC0g UmVnaXN0ZXIgUEhZIGNsb2NrIGNvbnRyb2wgY2FsbGJhY2sKLSAqIEBwaHk6ICAgICAgICAgIERT SSBQSFkgaGFuZGxlCi0gKiBAY2xrX2NiOgkgIFN0cnVjdHVyZSBjb250YWluaW5nIGNhbGwgYmFj ayBmb3IgY2xvY2sgY29udHJvbAotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50 IGRzaV9waHlfY2xrX2NiX3JlZ2lzdGVyKHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5LAotCXN0cnVj dCBjbGtfY3RybF9jYiAqY2xrX2NiKTsKLQotLyoqCi0gKiBkc2lfcGh5X2lkbGVfY3RybCgpIC0g ZW5hYmxlL2Rpc2FibGUgRFNJIFBIWSBkdXJpbmcgaWRsZSBzY3JlZW4KLSAqIEBwaHk6ICAgICAg ICAgIERTSSBQSFkgaGFuZGxlCi0gKiBAZW5hYmxlOiAgICAgICBib29sZWFuIHRvIHNwZWNpZnkg UEhZIGVuYWJsZS9kaXNhYmxlLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50 IGRzaV9waHlfaWRsZV9jdHJsKHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5LCBib29sIGVuYWJsZSk7 Ci0KLS8qKgotICogZHNpX3BoeV9zZXRfdGltaW5nX3BhcmFtcygpIC0gdGltaW5nIHBhcmFtZXRl cnMgZm9yIHRoZSBwYW5lbAotICogQHBoeTogICAgICAgICAgRFNJIFBIWSBoYW5kbGUKLSAqIEB0 aW1pbmc6ICAgICAgIGFycmF5IGhvbGRpbmcgdGltaW5nIHBhcmFtcy4KLSAqIEBzaXplOiAgICAg ICAgIHNpemUgb2YgdGhlIGFycmF5LgotICoKLSAqIFdoZW4gUEhZIHRpbWluZyBjYWxjdWxhdG9y IGlzIG5vdCBpbXBsZW1lbnRlZCwgdGhpcyBhcnJheSB3aWxsIGJlIHVzZWQgdG8KLSAqIHBhc3Mg UEhZIHRpbWluZyBpbmZvcm1hdGlvbi4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8K LWludCBkc2lfcGh5X3NldF90aW1pbmdfcGFyYW1zKHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5LAot CQkJICAgICAgdTMyICp0aW1pbmcsIHUzMiBzaXplKTsKLQotLyoqCi0gKiBkc2lfcGh5X2Rydl9y ZWdpc3RlcigpIC0gcmVnaXN0ZXIgcGxhdGZvcm0gZHJpdmVyIGZvciBkc2kgcGh5Ci0gKi8KLXZv aWQgZHNpX3BoeV9kcnZfcmVnaXN0ZXIodm9pZCk7Ci0KLS8qKgotICogZHNpX3BoeV9kcnZfdW5y ZWdpc3RlcigpIC0gdW5yZWdpc3RlciBwbGF0Zm9ybSBkcml2ZXIKLSAqLwotdm9pZCBkc2lfcGh5 X2Rydl91bnJlZ2lzdGVyKHZvaWQpOwotCi0jZW5kaWYgLyogX0RTSV9QSFlfSF8gKi8KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV9ody5oIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5X2h3LmgKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IGI3MWE0NTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21z bS9kc2ktc3RhZ2luZy9kc2lfcGh5X2h3LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNjAgKzAsMCBA QAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0g KiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpZm5kZWYgX0RTSV9QSFlf SFdfSF8KLSNkZWZpbmUgX0RTSV9QSFlfSFdfSF8KLQotI2luY2x1ZGUgImRzaV9kZWZzLmgiCi0K LSNkZWZpbmUgRFNJX01BWF9TRVRUSU5HUyA4Ci0jZGVmaW5lIERTSV9QSFlfVElNSU5HX1YzX1NJ WkUgMTIKLQotLyoqCi0gKiBlbnVtIGRzaV9waHlfdmVyc2lvbiAtIERTSSBQSFkgdmVyc2lvbiBl bnVtZXJhdGlvbgotICogQERTSV9QSFlfVkVSU0lPTl9VTktOT1dOOiAgICBVbmtub3duIHZlcnNp b24uCi0gKiBARFNJX1BIWV9WRVJTSU9OXzBfMF9IUE06ICAgIDI4bm0tSFBNLgotICogQERTSV9Q SFlfVkVSU0lPTl8wXzBfTFBNOiAgICAyOG5tLUhQTS4KLSAqIEBEU0lfUEhZX1ZFUlNJT05fMV8w OiAgICAgICAgMjBubQotICogQERTSV9QSFlfVkVSU0lPTl8yXzA6ICAgICAgICAxNG5tCi0gKiBA RFNJX1BIWV9WRVJTSU9OXzNfMDogICAgICAgIDEwbm0KLSAqIEBEU0lfUEhZX1ZFUlNJT05fTUFY OgotICovCi1lbnVtIGRzaV9waHlfdmVyc2lvbiB7Ci0JRFNJX1BIWV9WRVJTSU9OX1VOS05PV04s Ci0JRFNJX1BIWV9WRVJTSU9OXzBfMF9IUE0sIC8qIDI4bm0tSFBNICovCi0JRFNJX1BIWV9WRVJT SU9OXzBfMF9MUE0sIC8qIDI4bm0tTFBNICovCi0JRFNJX1BIWV9WRVJTSU9OXzFfMCwgLyogMjBu bSAqLwotCURTSV9QSFlfVkVSU0lPTl8yXzAsIC8qIDE0bm0gKi8KLQlEU0lfUEhZX1ZFUlNJT05f M18wLCAvKiAxMG5tICovCi0JRFNJX1BIWV9WRVJTSU9OX01BWAotfTsKLQotLyoqCi0gKiBlbnVt IGRzaV9waHlfaHdfZmVhdHVyZXMgLSBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgRFNJIFBIWSBoYXJk d2FyZQotICogQERTSV9QSFlfRFBIWTogICAgICAgIFN1cHBvcnRzIERQSFkKLSAqIEBEU0lfUEhZ X0NQSFk6ICAgICAgICBTdXBwb3J0cyBDUEhZCi0gKiBARFNJX1BIWV9NQVhfRkVBVFVSRVM6Ci0g Ki8KLWVudW0gZHNpX3BoeV9od19mZWF0dXJlcyB7Ci0JRFNJX1BIWV9EUEhZLAotCURTSV9QSFlf Q1BIWSwKLQlEU0lfUEhZX01BWF9GRUFUVVJFUwotfTsKLQotLyoqCi0gKiBlbnVtIGRzaV9waHlf cGxsX3NvdXJjZSAtIHBsbCBjbG9jayBzb3VyY2UgZm9yIFBIWS4KLSAqIEBEU0lfUExMX1NPVVJD RV9TVEFOREFMT05FOiAgICBDbG9jayBpcyBzb3VyY2VkIGZyb20gbmF0aXZlIFBMTCBhbmQgaXMg bm90Ci0gKgkJCQkgIHNoYXJlZCBieSBvdGhlciBQSFlzLgotICogQERTSV9QTExfU09VUkNFX05B VElWRTogICAgICAgIENsb2NrIGlzIHNvdXJjZWQgZnJvbSBuYXRpdmUgUExMIGFuZCBpcwotICoJ CQkJICBzaGFyZWQgYnkgb3RoZXIgUEhZcy4KLSAqIEBEU0lfUExMX1NPVVJDRV9OT05fTkFUSVZF OiAgICBDbG9jayBpcyBzb3VyY2VkIGZyb20gb3RoZXIgUEhZcy4KLSAqIEBEU0lfUExMX1NPVVJD RV9NQVg6Ci0gKi8KLWVudW0gZHNpX3BoeV9wbGxfc291cmNlIHsKLQlEU0lfUExMX1NPVVJDRV9T VEFOREFMT05FID0gMCwKLQlEU0lfUExMX1NPVVJDRV9OQVRJVkUsCi0JRFNJX1BMTF9TT1VSQ0Vf Tk9OX05BVElWRSwKLQlEU0lfUExMX1NPVVJDRV9NQVgKLX07Ci0KLS8qKgotICogc3RydWN0IGRz aV9waHlfcGVyX2xhbmVfY2ZncyAtIEhvbGRzIHJlZ2lzdGVyIHZhbHVlcyBmb3IgUEhZIHBhcmFt ZXRlcnMKLSAqIEBsYW5lOiAgICAgICAgICAgQSBzZXQgb2YgbWF4aW11bSA4IHZhbHVlcyBmb3Ig ZWFjaCBsYW5lLgotICogQGxhbmVfdjM6ICAgICAgICBBIHNldCBvZiBtYXhpbXVtIDEyIHZhbHVl cyBmb3IgZWFjaCBsYW5lLgotICogQGNvdW50X3Blcl9sYW5lOiBOdW1iZXIgb2YgdmFsdWVzIHBl ciBlYWNoIGxhbmUuCi0gKi8KLXN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgewotCXU4IGxh bmVbRFNJX0xBTkVfTUFYXVtEU0lfTUFYX1NFVFRJTkdTXTsKLQl1OCBsYW5lX3YzW0RTSV9QSFlf VElNSU5HX1YzX1NJWkVdOwotCXUzMiBjb3VudF9wZXJfbGFuZTsKLX07Ci0KLS8qKgotICogc3Ry dWN0IGRzaV9waHlfY2ZnIC0gRFNJIFBIWSBjb25maWd1cmF0aW9uCi0gKiBAbGFuZWNmZzogICAg ICAgICAgTGFuZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLgotICogQHN0cmVuZ3RoOiAgICAgICAg IFN0cmVuZ3RoIHNldHRpbmdzIGZvciBsYW5lcy4KLSAqIEB0aW1pbmc6ICAgICAgICAgICBUaW1p bmcgcGFyYW1ldGVycyBmb3IgbGFuZXMuCi0gKiBAaXNfcGh5X3RpbWluZ19wcmVzZW50OglCb29s ZWFuIHdoZXRoZXIgcGh5IHRpbWluZ3MgYXJlIGRlZmluZWQuCi0gKiBAcmVndWxhdG9yczogICAg ICAgUmVndWxhdG9yIHNldHRpbmdzIGZvciBsYW5lcy4KLSAqIEBwbGxfc291cmNlOiAgICAgICBQ TEwgc291cmNlLgotICogQGxhbmVfbWFwOiAgICAgICAgIERTSSBsb2dpY2FsIHRvIFBIWSBsYW5l IG1hcHBpbmcuCi0gKi8KLXN0cnVjdCBkc2lfcGh5X2NmZyB7Ci0Jc3RydWN0IGRzaV9waHlfcGVy X2xhbmVfY2ZncyBsYW5lY2ZnOwotCXN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3Mgc3RyZW5n dGg7Ci0Jc3RydWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyB0aW1pbmc7Ci0JYm9vbCBpc19waHlf dGltaW5nX3ByZXNlbnQ7Ci0Jc3RydWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyByZWd1bGF0b3Jz OwotCWVudW0gZHNpX3BoeV9wbGxfc291cmNlIHBsbF9zb3VyY2U7Ci0Jc3RydWN0IGRzaV9sYW5l X21hcCBsYW5lX21hcDsKLX07Ci0KLXN0cnVjdCBkc2lfcGh5X2h3OwotCi1zdHJ1Y3QgcGh5X3Vs cHNfY29uZmlnX29wcyB7Ci0JLyoqCi0JICogd2FpdF9mb3JfbGFuZV9pZGxlKCkgLSB3YWl0IGZv ciBEU0kgbGFuZXMgdG8gZ28gdG8gaWRsZSBzdGF0ZQotCSAqIEBwaHk6ICAgICAgICAgICBQb2lu dGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgaW5zdGFuY2UuCi0JICogQGxhbmVzOiAgICAgICAgIE9S ZWQgbGlzdCBvZiBsYW5lcyAoZW51bSBkc2lfZGF0YV9sYW5lcykgd2hpY2ggbmVlZAotCSAqICAg ICAgICAgICAgICAgICB0byBiZSBjaGVja2VkIHRvIGJlIGluIGlkbGUgc3RhdGUuCi0JICovCi0J aW50ICgqd2FpdF9mb3JfbGFuZV9pZGxlKShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LCB1MzIgbGFu ZXMpOwotCi0JLyoqCi0JICogdWxwc19yZXF1ZXN0KCkgLSByZXF1ZXN0IHVscHMgZW50cnkgZm9y IHNwZWNpZmllZCBsYW5lcwotCSAqIEBwaHk6ICAgICAgICAgICBQb2ludGVyIHRvIERTSSBQSFkg aGFyZHdhcmUgaW5zdGFuY2UuCi0JICogQGNmZzogICAgICAgICAgIFBlciBsYW5lIGNvbmZpZ3Vy YXRpb25zIGZvciB0aW1pbmcsIHN0cmVuZ3RoIGFuZCBsYW5lCi0JICoJICAgICAgICAgICBjb25m aWd1cmF0aW9ucy4KLQkgKiBAbGFuZXM6ICAgICAgICAgT1JlZCBsaXN0IG9mIGxhbmVzIChlbnVt IGRzaV9kYXRhX2xhbmVzKSB3aGljaCBuZWVkCi0JICogICAgICAgICAgICAgICAgIHRvIGVudGVy IFVMUFMuCi0JICoKLQkgKiBDYWxsZXIgc2hvdWxkIGNoZWNrIGlmIGxhbmVzIGFyZSBpbiBVTFBT IG1vZGUgYnkgY2FsbGluZwotCSAqIGdldF9sYW5lc19pbl91bHBzKCkgb3BlcmF0aW9uLgotCSAq LwotCXZvaWQgKCp1bHBzX3JlcXVlc3QpKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0JCQlzdHJ1 Y3QgZHNpX3BoeV9jZmcgKmNmZywgdTMyIGxhbmVzKTsKLQotCS8qKgotCSAqIHVscHNfZXhpdCgp IC0gZXhpdCBVTFBTIG9uIHNwZWNpZmllZCBsYW5lcwotCSAqIEBwaHk6ICAgICAgICAgICBQb2lu dGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgaW5zdGFuY2UuCi0JICogQGNmZzogICAgICAgICAgIFBl ciBsYW5lIGNvbmZpZ3VyYXRpb25zIGZvciB0aW1pbmcsIHN0cmVuZ3RoIGFuZCBsYW5lCi0JICog ICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLgotCSAqIEBsYW5lczogICAgICAgICBPUmVk IGxpc3Qgb2YgbGFuZXMgKGVudW0gZHNpX2RhdGFfbGFuZXMpIHdoaWNoIG5lZWQKLQkgKiAgICAg ICAgICAgICAgICAgdG8gZXhpdCBVTFBTLgotCSAqCi0JICogQ2FsbGVyIHNob3VsZCBjaGVjayBp ZiBsYW5lcyBhcmUgaW4gYWN0aXZlIG1vZGUgYnkgY2FsbGluZwotCSAqIGdldF9sYW5lc19pbl91 bHBzKCkgb3BlcmF0aW9uLgotCSAqLwotCXZvaWQgKCp1bHBzX2V4aXQpKHN0cnVjdCBkc2lfcGh5 X2h3ICpwaHksCi0JCQlzdHJ1Y3QgZHNpX3BoeV9jZmcgKmNmZywgdTMyIGxhbmVzKTsKLQotCS8q KgotCSAqIGdldF9sYW5lc19pbl91bHBzKCkgLSByZXR1cm5zIHRoZSBsaXN0IG9mIGxhbmVzIGlu IFVMUFMgbW9kZQotCSAqIEBwaHk6ICAgICAgICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdh cmUgaW5zdGFuY2UuCi0JICoKLQkgKiBSZXR1cm5zIGFuIE9SZWQgbGlzdCBvZiBsYW5lcyAoZW51 bSBkc2lfZGF0YV9sYW5lcykgdGhhdCBhcmUgaW4gVUxQUwotCSAqIHN0YXRlLgotCSAqCi0JICog UmV0dXJuOiBMaXN0IG9mIGxhbmVzIGluIFVMUFMgc3RhdGUuCi0JICovCi0JdTMyICgqZ2V0X2xh bmVzX2luX3VscHMpKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHkpOwotCi0JLyoqCi0JICogaXNfbGFu ZXNfaW5fdWxwcygpIC0gY2hlY2tzIGlmIHRoZSBnaXZlbiBsYW5lcyBhcmUgaW4gdWxwcwotCSAq IEBsYW5lczogICAgICAgICAgIGxhbmVzIHRvIGJlIGNoZWNrZWQuCi0JICogQHVscHNfbGFuZXM6 CSAgIGxhbmVzIGluIHVscHMgY3VycmVubHkuCi0JICoKLQkgKiBSZXR1cm46IHRydWUgaWYgYWxs IHRoZSBnaXZlbiBsYW5lcyBhcmUgaW4gdWxwczsgZmFsc2Ugb3RoZXJ3aXNlLgotCSAqLwotCWJv b2wgKCppc19sYW5lc19pbl91bHBzKSh1MzIgdWxwcywgdTMyIHVscHNfbGFuZXMpOwotfTsKLQot LyoqCi0gKiBzdHJ1Y3QgZHNpX3BoeV9od19vcHMgLSBPcGVyYXRpb25zIGZvciBEU0kgUEhZIGhh cmR3YXJlLgotICogQHJlZ3VsYXRvcl9lbmFibGU6ICAgICAgICAgIEVuYWJsZSBQSFkgcmVndWxh dG9ycy4KLSAqIEByZWd1bGF0b3JfZGlzYWJsZTogICAgICAgICBEaXNhYmxlIFBIWSByZWd1bGF0 b3JzLgotICogQGVuYWJsZTogICAgICAgICAgICAgICAgICAgIEVuYWJsZSBQSFkuCi0gKiBAZGlz YWJsZTogICAgICAgICAgICAgICAgICAgRGlzYWJsZSBQSFkuCi0gKiBAY2FsY3VsYXRlX3RpbWlu Z19wYXJhbXM6ICAgQ2FsY3VsYXRlIFBIWSB0aW1pbmcgcGFyYW1zIGZyb20gbW9kZSBpbmZvcm1h dGlvbgotICovCi1zdHJ1Y3QgZHNpX3BoeV9od19vcHMgewotCS8qKgotCSAqIHJlZ3VsYXRvcl9l bmFibGUoKSAtIGVuYWJsZSByZWd1bGF0b3JzIGZvciBEU0kgUEhZCi0JICogQHBoeTogICAgICBQ b2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgb2JqZWN0LgotCSAqIEByZWdfY2ZnOiAgUmVndWxh dG9yIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCBEU0kgbGFuZXMuCi0JICovCi0Jdm9pZCAoKnJlZ3Vs YXRvcl9lbmFibGUpKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0JCQkJIHN0cnVjdCBkc2lfcGh5 X3Blcl9sYW5lX2NmZ3MgKnJlZ19jZmcpOwotCi0JLyoqCi0JICogcmVndWxhdG9yX2Rpc2FibGUo KSAtIGRpc2FibGUgcmVndWxhdG9ycwotCSAqIEBwaHk6ICAgICAgUG9pbnRlciB0byBEU0kgUEhZ IGhhcmR3YXJlIG9iamVjdC4KLQkgKi8KLQl2b2lkICgqcmVndWxhdG9yX2Rpc2FibGUpKHN0cnVj dCBkc2lfcGh5X2h3ICpwaHkpOwotCi0JLyoqCi0JICogZW5hYmxlKCkgLSBFbmFibGUgUEhZIGhh cmR3YXJlCi0JICogQHBoeTogICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgb2JqZWN0 LgotCSAqIEBjZmc6ICAgICAgUGVyIGxhbmUgY29uZmlndXJhdGlvbnMgZm9yIHRpbWluZywgc3Ry ZW5ndGggYW5kIGxhbmUKLQkgKgkgICAgICBjb25maWd1cmF0aW9ucy4KLQkgKi8KLQl2b2lkICgq ZW5hYmxlKShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LCBzdHJ1Y3QgZHNpX3BoeV9jZmcgKmNmZyk7 Ci0KLQkvKioKLQkgKiBkaXNhYmxlKCkgLSBEaXNhYmxlIFBIWSBoYXJkd2FyZQotCSAqIEBwaHk6 ICAgICAgUG9pbnRlciB0byBEU0kgUEhZIGhhcmR3YXJlIG9iamVjdC4KLQkgKiBAY2ZnOiAgICAg IFBlciBsYW5lIGNvbmZpZ3VyYXRpb25zIGZvciB0aW1pbmcsIHN0cmVuZ3RoIGFuZCBsYW5lCi0J ICoJICAgICAgY29uZmlndXJhdGlvbnMuCi0JICovCi0Jdm9pZCAoKmRpc2FibGUpKHN0cnVjdCBk c2lfcGh5X2h3ICpwaHksIHN0cnVjdCBkc2lfcGh5X2NmZyAqY2ZnKTsKLQotCS8qKgotCSAqIHBo eV9pZGxlX29uKCkgLSBFbmFibGUgUEhZIGhhcmR3YXJlIHdoZW4gZW50ZXJpbmcgaWRsZSBzY3Jl ZW4KLQkgKiBAcGh5OiAgICAgIFBvaW50ZXIgdG8gRFNJIFBIWSBoYXJkd2FyZSBvYmplY3QuCi0J ICogQGNmZzogICAgICBQZXIgbGFuZSBjb25maWd1cmF0aW9ucyBmb3IgdGltaW5nLCBzdHJlbmd0 aCBhbmQgbGFuZQotCSAqCSAgICAgIGNvbmZpZ3VyYXRpb25zLgotCSAqLwotCXZvaWQgKCpwaHlf aWRsZV9vbikoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwgc3RydWN0IGRzaV9waHlfY2ZnICpjZmcp OwotCi0JLyoqCi0JICogcGh5X2lkbGVfb2ZmKCkgLSBEaXNhYmxlIFBIWSBoYXJkd2FyZSB3aGVu IGV4aXRpbmcgaWRsZSBzY3JlZW4KLQkgKiBAcGh5OiAgICAgIFBvaW50ZXIgdG8gRFNJIFBIWSBo YXJkd2FyZSBvYmplY3QuCi0JICovCi0Jdm9pZCAoKnBoeV9pZGxlX29mZikoc3RydWN0IGRzaV9w aHlfaHcgKnBoeSk7Ci0KLQkvKioKLQkgKiBjYWxjdWxhdGVfdGltaW5nX3BhcmFtcygpIC0gY2Fs Y3VsYXRlcyB0aW1pbmcgcGFyYW1ldGVycy4KLQkgKiBAcGh5OiAgICAgIFBvaW50ZXIgdG8gRFNJ IFBIWSBoYXJkd2FyZSBvYmplY3QuCi0JICogQG1vZGU6ICAgICBNb2RlIGluZm9ybWF0aW9uIGZv ciB3aGljaCB0aW1pbmcgaGFzIHRvIGJlIGNhbGN1bGF0ZWQuCi0JICogQGNvbmZpZzogICBEU0kg aG9zdCBjb25maWd1cmF0aW9uIGZvciB0aGlzIG1vZGUuCi0JICogQHRpbWluZzogICBUaW1pbmcg cGFyYW1ldGVycyBmb3IgZWFjaCBsYW5lIHdoaWNoIHdpbGwgYmUgcmV0dXJuZWQuCi0JICovCi0J aW50ICgqY2FsY3VsYXRlX3RpbWluZ19wYXJhbXMpKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0J CQkJICAgICAgIHN0cnVjdCBkc2lfbW9kZV9pbmZvICptb2RlLAotCQkJCSAgICAgICBzdHJ1Y3Qg ZHNpX2hvc3RfY29tbW9uX2NmZyAqY29uZmlnLAotCQkJCSAgICAgICBzdHJ1Y3QgZHNpX3BoeV9w ZXJfbGFuZV9jZmdzICp0aW1pbmcpOwotCi0JLyoqCi0JICogcGh5X3RpbWluZ192YWwoKSAtIEdl dHMgUEhZIHRpbWluZyB2YWx1ZXMuCi0JICogQHRpbWluZ192YWw6IFRpbWluZyBwYXJhbWV0ZXJz IGZvciBlYWNoIGxhbmUgd2hpY2ggd2lsbCBiZSByZXR1cm5lZC4KLQkgKiBAdGltaW5nOiBBcnJh eSBjb250YWluaW5nIFBIWSB0aW1pbmcgdmFsdWVzCi0JICogQHNpemU6IFNpemUgb2YgdGhlIGFy cmF5Ci0JICovCi0JaW50ICgqcGh5X3RpbWluZ192YWwpKHN0cnVjdCBkc2lfcGh5X3Blcl9sYW5l X2NmZ3MgKnRpbWluZ192YWwsCi0JCQkJdTMyICp0aW1pbmcsIHUzMiBzaXplKTsKLQotCXZvaWQg KnRpbWluZ19vcHM7Ci0Jc3RydWN0IHBoeV91bHBzX2NvbmZpZ19vcHMgdWxwc19vcHM7Ci19Owot Ci0vKioKLSAqIHN0cnVjdCBkc2lfcGh5X2h3IC0gRFNJIHBoeSBoYXJkd2FyZSBvYmplY3Qgc3Bl Y2lmaWMgdG8gYW4gaW5zdGFuY2UKLSAqIEBiYXNlOiAgICAgICAgICAgICAgICAgIFZBIGZvciB0 aGUgRFNJIFBIWSBiYXNlIGFkZHJlc3MuCi0gKiBAbGVuZ3RoOiAgICAgICAgICAgICAgICBMZW5n dGggb2YgdGhlIERTSSBQSFkgcmVnaXN0ZXIgYmFzZSBtYXAuCi0gKiBAaW5kZXg6ICAgICAgICAg ICAgICAgICBJbnN0YW5jZSBJRCBvZiB0aGUgY29udHJvbGxlci4KLSAqIEB2ZXJzaW9uOiAgICAg ICAgICAgICAgIERTSSBQSFkgdmVyc2lvbi4KLSAqIEBmZWF0dXJlX21hcDogICAgICAgICAgIEZl YXR1cmVzIHN1cHBvcnRlZCBieSBEU0kgUEhZLgotICogQG9wczogICAgICAgICAgICAgICAgICAg RnVuY3Rpb24gcG9pbnRlciB0byBQSFkgb3BlcmF0aW9ucy4KLSAqLwotc3RydWN0IGRzaV9waHlf aHcgewotCXZvaWQgX19pb21lbSAqYmFzZTsKLQl1MzIgbGVuZ3RoOwotCXUzMiBpbmRleDsKLQot CWVudW0gZHNpX3BoeV92ZXJzaW9uIHZlcnNpb247Ci0KLQlERUNMQVJFX0JJVE1BUChmZWF0dXJl X21hcCwgRFNJX1BIWV9NQVhfRkVBVFVSRVMpOwotCXN0cnVjdCBkc2lfcGh5X2h3X29wcyBvcHM7 Ci19OwotCi0jZW5kaWYgLyogX0RTSV9QSFlfSFdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV9od192Ml8wLmMgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfaHdfdjJfMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCBjZDU0NTgxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNp LXN0YWdpbmcvZHNpX3BoeV9od192Ml8wLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTIgKzAsMCBA QAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0g KiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNkZWZpbmUgcHJfZm10KGZt dCkgImRzaS1waHktaHc6IiBmbXQKLSNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KLSNpbmNsdWRl IDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgImRzaV9ody5oIgotI2luY2x1ZGUgImRzaV9waHlf aHcuaCIKLQotI2RlZmluZSBEU0lQSFlfQ01OX1JFVklTSU9OX0lEMCAgICAgICAgICAgICAgICAg ICAweDAwMDAKLSNkZWZpbmUgRFNJUEhZX0NNTl9SRVZJU0lPTl9JRDEgICAgICAgICAgICAgICAg ICAgMHgwMDA0Ci0jZGVmaW5lIERTSVBIWV9DTU5fUkVWSVNJT05fSUQyICAgICAgICAgICAgICAg ICAgIDB4MDAwOAotI2RlZmluZSBEU0lQSFlfQ01OX1JFVklTSU9OX0lEMyAgICAgICAgICAgICAg ICAgICAweDAwMEMKLSNkZWZpbmUgRFNJUEhZX0NNTl9DTEtfQ0ZHMCAgICAgICAgICAgICAgICAg ICAgICAgMHgwMDEwCi0jZGVmaW5lIERTSVBIWV9DTU5fQ0xLX0NGRzEgICAgICAgICAgICAgICAg ICAgICAgIDB4MDAxNAotI2RlZmluZSBEU0lQSFlfQ01OX0dMQkxfVEVTVF9DVFJMICAgICAgICAg ICAgICAgICAweDAwMTgKLSNkZWZpbmUgRFNJUEhZX0NNTl9DVFJMXzAgICAgICAgICAgICAgICAg ICAgICAgICAgMHgwMDFDCi0jZGVmaW5lIERTSVBIWV9DTU5fQ1RSTF8xICAgICAgICAgICAgICAg ICAgICAgICAgIDB4MDAyMAotI2RlZmluZSBEU0lQSFlfQ01OX0NBTF9IV19UUklHR0VSICAgICAg ICAgICAgICAgICAweDAwMjQKLSNkZWZpbmUgRFNJUEhZX0NNTl9DQUxfU1dfQ0ZHMCAgICAgICAg ICAgICAgICAgICAgMHgwMDI4Ci0jZGVmaW5lIERTSVBIWV9DTU5fQ0FMX1NXX0NGRzEgICAgICAg ICAgICAgICAgICAgIDB4MDAyQwotI2RlZmluZSBEU0lQSFlfQ01OX0NBTF9TV19DRkcyICAgICAg ICAgICAgICAgICAgICAweDAwMzAKLSNkZWZpbmUgRFNJUEhZX0NNTl9DQUxfSFdfQ0ZHMCAgICAg ICAgICAgICAgICAgICAgMHgwMDM0Ci0jZGVmaW5lIERTSVBIWV9DTU5fQ0FMX0hXX0NGRzEgICAg ICAgICAgICAgICAgICAgIDB4MDAzOAotI2RlZmluZSBEU0lQSFlfQ01OX0NBTF9IV19DRkcyICAg ICAgICAgICAgICAgICAgICAweDAwM0MKLSNkZWZpbmUgRFNJUEhZX0NNTl9DQUxfSFdfQ0ZHMyAg ICAgICAgICAgICAgICAgICAgMHgwMDQwCi0jZGVmaW5lIERTSVBIWV9DTU5fQ0FMX0hXX0NGRzQg ICAgICAgICAgICAgICAgICAgIDB4MDA0NAotI2RlZmluZSBEU0lQSFlfQ01OX1BMTF9DTlRSTCAg ICAgICAgICAgICAgICAgICAgICAweDAwNDgKLSNkZWZpbmUgRFNJUEhZX0NNTl9MRE9fQ05UUkwg ICAgICAgICAgICAgICAgICAgICAgMHgwMDRDCi0KLSNkZWZpbmUgRFNJUEhZX0NNTl9SRUdVTEFU T1JfQ0FMX1NUQVRVUzAgICAgICAgICAgMHgwMDY0Ci0jZGVmaW5lIERTSVBIWV9DTU5fUkVHVUxB VE9SX0NBTF9TVEFUVVMxICAgICAgICAgIDB4MDA2OAotCi0vKiBuID0gMC4uMyBmb3IgZGF0YSBs YW5lcyBhbmQgbiA9IDQgZm9yIGNsb2NrIGxhbmUgKi8KLSNkZWZpbmUgRFNJUEhZX0RMTlhfQ0ZH MChuKSAgICAgICAgICAgICAgICAgICAgICgweDEwMCArICgobikgKiAweDgwKSkKLSNkZWZpbmUg RFNJUEhZX0RMTlhfQ0ZHMShuKSAgICAgICAgICAgICAgICAgICAgICgweDEwNCArICgobikgKiAw eDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQ0ZHMihuKSAgICAgICAgICAgICAgICAgICAgICgw eDEwOCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQ0ZHMyhuKSAgICAgICAg ICAgICAgICAgICAgICgweDEwQyArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhf VEVTVF9EQVRBUEFUSChuKSAgICAgICAgICAgICgweDExMCArICgobikgKiAweDgwKSkKLSNkZWZp bmUgRFNJUEhZX0RMTlhfVEVTVF9TVFIobikgICAgICAgICAgICAgICAgICgweDExNCArICgobikg KiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfVElNSU5HX0NUUkxfNChuKSAgICAgICAgICAg ICgweDExOCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfVElNSU5HX0NUUkxf NShuKSAgICAgICAgICAgICgweDExQyArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RM TlhfVElNSU5HX0NUUkxfNihuKSAgICAgICAgICAgICgweDEyMCArICgobikgKiAweDgwKSkKLSNk ZWZpbmUgRFNJUEhZX0RMTlhfVElNSU5HX0NUUkxfNyhuKSAgICAgICAgICAgICgweDEyNCArICgo bikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfVElNSU5HX0NUUkxfOChuKSAgICAgICAg ICAgICgweDEyOCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfVElNSU5HX0NU UkxfOShuKSAgICAgICAgICAgICgweDEyQyArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZ X0RMTlhfVElNSU5HX0NUUkxfMTAobikgICAgICAgICAgICgweDEzMCArICgobikgKiAweDgwKSkK LSNkZWZpbmUgRFNJUEhZX0RMTlhfVElNSU5HX0NUUkxfMTEobikgICAgICAgICAgICgweDEzNCAr ICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfU1RSRU5HVEhfQ1RSTF8wKG4pICAg ICAgICAgICgweDEzOCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfU1RSRU5H VEhfQ1RSTF8xKG4pICAgICAgICAgICgweDEzQyArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJ UEhZX0RMTlhfQklTVF9QT0xZKG4pICAgICAgICAgICAgICAgICgweDE0MCArICgobikgKiAweDgw KSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9TRUVEMChuKSAgICAgICAgICAgICAgICgweDE0 NCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9TRUVEMShuKSAgICAg ICAgICAgICAgICgweDE0OCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQklT VF9IRUFEKG4pICAgICAgICAgICAgICAgICgweDE0QyArICgobikgKiAweDgwKSkKLSNkZWZpbmUg RFNJUEhZX0RMTlhfQklTVF9TT1QobikgICAgICAgICAgICAgICAgICgweDE1MCArICgobikgKiAw eDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9DVFJMMChuKSAgICAgICAgICAgICAgICgw eDE1NCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9DVFJMMShuKSAg ICAgICAgICAgICAgICgweDE1OCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhf QklTVF9DVFJMMihuKSAgICAgICAgICAgICAgICgweDE1QyArICgobikgKiAweDgwKSkKLSNkZWZp bmUgRFNJUEhZX0RMTlhfQklTVF9DVFJMMyhuKSAgICAgICAgICAgICAgICgweDE2MCArICgobikg KiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfVlJFR19DTlRSTChuKSAgICAgICAgICAgICAg ICgweDE2NCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfSFNUWF9TVFJfU1RB VFVTKG4pICAgICAgICAgICgweDE2OCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RM TlhfQklTVF9TVEFUVVMwKG4pICAgICAgICAgICAgICgweDE2QyArICgobikgKiAweDgwKSkKLSNk ZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9TVEFUVVMxKG4pICAgICAgICAgICAgICgweDE3MCArICgo bikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9TVEFUVVMyKG4pICAgICAgICAg ICAgICgweDE3NCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9TVEFU VVMzKG4pICAgICAgICAgICAgICgweDE3OCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZ X0RMTlhfTUlTUl9TVEFUVVMobikgICAgICAgICAgICAgICgweDE3QyArICgobikgKiAweDgwKSkK LQotI2RlZmluZSBEU0lQSFlfUExMX0NMS0JVRkxSX0VOICAgICAgICAgICAgICAgICAgMHgwNDFD Ci0jZGVmaW5lIERTSVBIWV9QTExfUExMX0JBTkRHQVAgICAgICAgICAgICAgICAgICAweDA1MDgK LQotLyoqCi0gKiByZWd1bGF0b3JfZW5hYmxlKCkgLSBlbmFibGUgcmVndWxhdG9ycyBmb3IgRFNJ IFBIWQotICogQHBoeTogICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgb2JqZWN0Lgot ICogQHJlZ19jZmc6ICBSZWd1bGF0b3IgY29uZmlndXJhdGlvbiBmb3IgYWxsIERTSSBsYW5lcy4K LSAqLwotdm9pZCBkc2lfcGh5X2h3X3YyXzBfcmVndWxhdG9yX2VuYWJsZShzdHJ1Y3QgZHNpX3Bo eV9odyAqcGh5LAotCQkJCSAgICAgIHN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnJlZ19j ZmcpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSBEU0lfTE9HSUNBTF9MQU5FXzA7IGkgPCBEU0lf TEFORV9NQVg7IGkrKykKLQkJRFNJX1czMihwaHksIERTSVBIWV9ETE5YX1ZSRUdfQ05UUkwoaSks IHJlZ19jZmctPmxhbmVbaV1bMF0pOwotCi0JLyogbWFrZSBzdXJlIGFsbCB2YWx1ZXMgYXJlIHdy aXR0ZW4gdG8gaGFyZHdhcmUgKi8KLQl3bWIoKTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXSBQaHkg cmVndWxhdG9ycyBlbmFibGVkXG4iLCBwaHktPmluZGV4KTsKLX0KLQotLyoqCi0gKiByZWd1bGF0 b3JfZGlzYWJsZSgpIC0gZGlzYWJsZSByZWd1bGF0b3JzCi0gKiBAcGh5OiAgICAgIFBvaW50ZXIg dG8gRFNJIFBIWSBoYXJkd2FyZSBvYmplY3QuCi0gKi8KLXZvaWQgZHNpX3BoeV9od192Ml8wX3Jl Z3VsYXRvcl9kaXNhYmxlKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHkpCi17Ci0JcHJfZGVidWcoIltE U0lfJWRdIFBoeSByZWd1bGF0b3JzIGRpc2FibGVkXG4iLCBwaHktPmluZGV4KTsKLX0KLQotLyoq Ci0gKiBlbmFibGUoKSAtIEVuYWJsZSBQSFkgaGFyZHdhcmUKLSAqIEBwaHk6ICAgICAgUG9pbnRl ciB0byBEU0kgUEhZIGhhcmR3YXJlIG9iamVjdC4KLSAqIEBjZmc6ICAgICAgUGVyIGxhbmUgY29u ZmlndXJhdGlvbnMgZm9yIHRpbWluZywgc3RyZW5ndGggYW5kIGxhbmUKLSAqCSAgICAgIGNvbmZp Z3VyYXRpb25zLgotICovCi12b2lkIGRzaV9waHlfaHdfdjJfMF9lbmFibGUoc3RydWN0IGRzaV9w aHlfaHcgKnBoeSwKLQkJCSAgICBzdHJ1Y3QgZHNpX3BoeV9jZmcgKmNmZykKLXsKLQlpbnQgaTsK LQlzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzICp0aW1pbmcgPSAmY2ZnLT50aW1pbmc7Ci0J dTMyIGRhdGE7Ci0KLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9MRE9fQ05UUkwsIDB4MUMpOwot Ci0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fR0xCTF9URVNUX0NUUkwsIDB4MSk7Ci0JZm9yIChp ID0gRFNJX0xPR0lDQUxfTEFORV8wOyBpIDwgRFNJX0xBTkVfTUFYOyBpKyspIHsKLQotCQlEU0lf VzMyKHBoeSwgRFNJUEhZX0RMTlhfQ0ZHMChpKSwgY2ZnLT5sYW5lY2ZnLmxhbmVbaV1bMF0pOwot CQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RMTlhfQ0ZHMShpKSwgY2ZnLT5sYW5lY2ZnLmxhbmVbaV1b MV0pOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RMTlhfQ0ZHMihpKSwgY2ZnLT5sYW5lY2ZnLmxh bmVbaV1bMl0pOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RMTlhfQ0ZHMyhpKSwgY2ZnLT5sYW5l Y2ZnLmxhbmVbaV1bM10pOwotCi0JCURTSV9XMzIocGh5LCBEU0lQSFlfRExOWF9URVNUX1NUUihp KSwgMHg4OCk7Ci0KLQkJRFNJX1czMihwaHksIERTSVBIWV9ETE5YX1RJTUlOR19DVFJMXzQoaSks IHRpbWluZy0+bGFuZVtpXVswXSk7Ci0JCURTSV9XMzIocGh5LCBEU0lQSFlfRExOWF9USU1JTkdf Q1RSTF81KGkpLCB0aW1pbmctPmxhbmVbaV1bMV0pOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RM TlhfVElNSU5HX0NUUkxfNihpKSwgdGltaW5nLT5sYW5lW2ldWzJdKTsKLQkJRFNJX1czMihwaHks IERTSVBIWV9ETE5YX1RJTUlOR19DVFJMXzcoaSksIHRpbWluZy0+bGFuZVtpXVszXSk7Ci0JCURT SV9XMzIocGh5LCBEU0lQSFlfRExOWF9USU1JTkdfQ1RSTF84KGkpLCB0aW1pbmctPmxhbmVbaV1b NF0pOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RMTlhfVElNSU5HX0NUUkxfOShpKSwgdGltaW5n LT5sYW5lW2ldWzVdKTsKLQkJRFNJX1czMihwaHksIERTSVBIWV9ETE5YX1RJTUlOR19DVFJMXzEw KGkpLCB0aW1pbmctPmxhbmVbaV1bNl0pOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RMTlhfVElN SU5HX0NUUkxfMTEoaSksIHRpbWluZy0+bGFuZVtpXVs3XSk7Ci0KLQkJRFNJX1czMihwaHksIERT SVBIWV9ETE5YX1NUUkVOR1RIX0NUUkxfMChpKSwKLQkJCWNmZy0+c3RyZW5ndGgubGFuZVtpXVsw XSk7Ci0JCURTSV9XMzIocGh5LCBEU0lQSFlfRExOWF9TVFJFTkdUSF9DVFJMXzEoaSksCi0JCQlj ZmctPnN0cmVuZ3RoLmxhbmVbaV1bMV0pOwotCX0KLQotCS8qIG1ha2Ugc3VyZSBhbGwgdmFsdWVz IGFyZSB3cml0dGVuIHRvIGhhcmR3YXJlIGJlZm9yZSBlbmFibGluZyBwaHkgKi8KLQl3bWIoKTsK LQotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX0NUUkxfMSwgMHg4MCk7Ci0JdWRlbGF5KDEwMCk7 Ci0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fQ1RSTF8xLCAweDAwKTsKLQotCWRhdGEgPSBEU0lf UjMyKHBoeSwgRFNJUEhZX0NNTl9HTEJMX1RFU1RfQ1RSTCk7Ci0KLQlzd2l0Y2ggKGNmZy0+cGxs X3NvdXJjZSkgewotCWNhc2UgRFNJX1BMTF9TT1VSQ0VfU1RBTkRBTE9ORToKLQkJRFNJX1czMihw aHksIERTSVBIWV9QTExfQ0xLQlVGTFJfRU4sIDB4MDEpOwotCQlkYXRhICY9IH5CSVQoMik7Ci0J CWJyZWFrOwotCWNhc2UgRFNJX1BMTF9TT1VSQ0VfTkFUSVZFOgotCQlEU0lfVzMyKHBoeSwgRFNJ UEhZX1BMTF9DTEtCVUZMUl9FTiwgMHgwMyk7Ci0JCWRhdGEgJj0gfkJJVCgyKTsKLQkJYnJlYWs7 Ci0JY2FzZSBEU0lfUExMX1NPVVJDRV9OT05fTkFUSVZFOgotCQlEU0lfVzMyKHBoeSwgRFNJUEhZ X1BMTF9DTEtCVUZMUl9FTiwgMHgwMCk7Ci0JCWRhdGEgfD0gQklUKDIpOwotCQlicmVhazsKLQlk ZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9HTEJMX1RF U1RfQ1RSTCwgZGF0YSk7Ci0KLQkvKiBFbmFibGUgYmlhcyBjdXJyZW50IGZvciBwbGwxIGR1cmlu ZyBzcGxpdCBkaXNwbGF5IGNhc2UgKi8KLQlpZiAoY2ZnLT5wbGxfc291cmNlID09IERTSV9QTExf U09VUkNFX05PTl9OQVRJVkUpCi0JCURTSV9XMzIocGh5LCBEU0lQSFlfUExMX1BMTF9CQU5ER0FQ LCAweDMpOwotCi0JcHJfZGVidWcoIltEU0lfJWRdUGh5IGVuYWJsZWQgIiwgcGh5LT5pbmRleCk7 Ci19Ci0KLS8qKgotICogZGlzYWJsZSgpIC0gRGlzYWJsZSBQSFkgaGFyZHdhcmUKLSAqIEBwaHk6 ICAgICAgUG9pbnRlciB0byBEU0kgUEhZIGhhcmR3YXJlIG9iamVjdC4KLSAqLwotdm9pZCBkc2lf cGh5X2h3X3YyXzBfZGlzYWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJICAgIHN0cnVj dCBkc2lfcGh5X2NmZyAqY2ZnKQotewotCURTSV9XMzIocGh5LCBEU0lQSFlfUExMX0NMS0JVRkxS X0VOLCAwKTsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9HTEJMX1RFU1RfQ1RSTCwgMCk7Ci0J RFNJX1czMihwaHksIERTSVBIWV9DTU5fQ1RSTF8wLCAwKTsKLQlwcl9kZWJ1ZygiW0RTSV8lZF1Q aHkgZGlzYWJsZWQgIiwgcGh5LT5pbmRleCk7Ci19Ci0KLS8qKgotICogZHNpX3BoeV9od192Ml8w X2lkbGVfb24oKSAtIEVuYWJsZSBEU0kgUEhZIGhhcmR3YXJlIGR1cmluZyBpZGxlIHNjcmVlbgot ICogQHBoeTogICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgb2JqZWN0LgotICovCi12 b2lkIGRzaV9waHlfaHdfdjJfMF9pZGxlX29uKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksIHN0cnVj dCBkc2lfcGh5X2NmZyAqY2ZnKQotewotCWludCBpID0gMDsKLQotCWZvciAoaSA9IERTSV9MT0dJ Q0FMX0xBTkVfMDsgaSA8IERTSV9MQU5FX01BWDsgaSsrKSB7Ci0JCURTSV9XMzIocGh5LCBEU0lQ SFlfRExOWF9TVFJFTkdUSF9DVFJMXzAoaSksCi0JCQljZmctPnN0cmVuZ3RoLmxhbmVbaV1bMF0p OwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RMTlhfU1RSRU5HVEhfQ1RSTF8xKGkpLAotCQkJY2Zn LT5zdHJlbmd0aC5sYW5lW2ldWzFdKTsKLQl9Ci0Jd21iKCk7IC8qIG1ha2Ugc3VyZSB3cml0ZSBo YXBwZW5zICovCi0JcHJfZGVidWcoIltEU0lfJWRdUGh5IGVuYWJsZWQgb3V0IG9mIGlkbGUgc2Ny ZWVuXG4iLCBwaHktPmluZGV4KTsKLX0KLQotCi0vKioKLSAqIGRzaV9waHlfaHdfdjJfMF9pZGxl X29mZigpIC0gRGlzYWJsZSBEU0kgUEhZIGhhcmR3YXJlIGR1cmluZyBpZGxlIHNjcmVlbgotICog QHBoeTogICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgb2JqZWN0LgotICovCi12b2lk IGRzaV9waHlfaHdfdjJfMF9pZGxlX29mZihzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5KQotewotCWlu dCBpID0gMDsKLQotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX0NUUkxfMCwgMHg3Zik7Ci0JZm9y IChpID0gRFNJX0xPR0lDQUxfTEFORV8wOyBpIDwgRFNJX0xBTkVfTUFYOyBpKyspCi0JCURTSV9X MzIocGh5LCBEU0lQSFlfRExOWF9WUkVHX0NOVFJMKGkpLCAweDFjKTsKLQlEU0lfVzMyKHBoeSwg RFNJUEhZX0NNTl9MRE9fQ05UUkwsIDB4MUMpOwotCi0JZm9yIChpID0gRFNJX0xPR0lDQUxfTEFO RV8wOyBpIDwgRFNJX0xBTkVfTUFYOyBpKyspCi0JCURTSV9XMzIocGh5LCBEU0lQSFlfRExOWF9T VFJFTkdUSF9DVFJMXzEoaSksIDB4MCk7Ci0Jd21iKCk7IC8qIG1ha2Ugc3VyZSB3cml0ZSBoYXBw ZW5zICovCi0JcHJfZGVidWcoIltEU0lfJWRdUGh5IGRpc2FibGVkIGR1cmluZyBpZGxlIHNjcmVl blxuIiwgcGh5LT5pbmRleCk7Ci19Ci0KLWludCBkc2lfcGh5X2h3X3RpbWluZ192YWxfdjJfMChz dHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzICp0aW1pbmdfY2ZnLAotCQl1MzIgKnRpbWluZ192 YWwsIHUzMiBzaXplKQotewotCWludCBpID0gMCwgaiA9IDA7Ci0KLQlpZiAoc2l6ZSAhPSAoRFNJ X0xBTkVfTUFYICogRFNJX01BWF9TRVRUSU5HUykpIHsKLQkJcHJfZXJyKCJVbmV4cGVjdGVkIHRp bWluZyBhcnJheSBzaXplICVkXG4iLCBzaXplKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0J Zm9yIChpID0gRFNJX0xPR0lDQUxfTEFORV8wOyBpIDwgRFNJX0xBTkVfTUFYOyBpKyspIHsKLQkJ Zm9yIChqID0gMDsgaiA8IERTSV9NQVhfU0VUVElOR1M7IGorKykgewotCQkJdGltaW5nX2NmZy0+ bGFuZVtpXVtqXSA9ICp0aW1pbmdfdmFsOwotCQkJdGltaW5nX3ZhbCsrOwotCQl9Ci0JfQotCXJl dHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9k c2lfcGh5X2h3X3YzXzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3Bo eV9od192M18wLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxZWFlNjguLjAwMDAw MDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5X2h3X3YzXzAu YworKysgL2Rldi9udWxsCkBAIC0xLDQ0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAy MDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK LSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KSAiZHNpLXBoeS1odzoiIGZtdAotI2lu Y2x1ZGUgPGxpbnV4L21hdGg2NC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVk ZSA8bGludXgvaW9wb2xsLmg+Ci0jaW5jbHVkZSAiZHNpX2h3LmgiCi0jaW5jbHVkZSAiZHNpX3Bo eV9ody5oIgotCi0jZGVmaW5lIERTSVBIWV9DTU5fQ0xLX0NGRzAJCQkJCQkweDAxMAotI2RlZmlu ZSBEU0lQSFlfQ01OX0NMS19DRkcxCQkJCQkJMHgwMTQKLSNkZWZpbmUgRFNJUEhZX0NNTl9HTEJM X0NUUkwJCQkJCQkweDAxOAotI2RlZmluZSBEU0lQSFlfQ01OX1JCVUZfQ1RSTAkJCQkJCTB4MDFD Ci0jZGVmaW5lIERTSVBIWV9DTU5fVlJFR19DVFJMCQkJCQkJMHgwMjAKLSNkZWZpbmUgRFNJUEhZ X0NNTl9DVFJMXzAJCQkJCQkweDAyNAotI2RlZmluZSBEU0lQSFlfQ01OX0NUUkxfMQkJCQkJCTB4 MDI4Ci0jZGVmaW5lIERTSVBIWV9DTU5fQ1RSTF8yCQkJCQkJMHgwMkMKLSNkZWZpbmUgRFNJUEhZ X0NNTl9MQU5FX0NGRzAJCQkJCQkweDAzMAotI2RlZmluZSBEU0lQSFlfQ01OX0xBTkVfQ0ZHMQkJ CQkJCTB4MDM0Ci0jZGVmaW5lIERTSVBIWV9DTU5fUExMX0NOVFJMCQkJCQkJMHgwMzgKLSNkZWZp bmUgRFNJUEhZX0NNTl9MQU5FX0NUUkwwCQkJCQkJMHgwOTgKLSNkZWZpbmUgRFNJUEhZX0NNTl9M QU5FX0NUUkwxCQkJCQkJMHgwOUMKLSNkZWZpbmUgRFNJUEhZX0NNTl9MQU5FX0NUUkwyCQkJCQkJ MHgwQTAKLSNkZWZpbmUgRFNJUEhZX0NNTl9MQU5FX0NUUkwzCQkJCQkJMHgwQTQKLSNkZWZpbmUg RFNJUEhZX0NNTl9MQU5FX0NUUkw0CQkJCQkJMHgwQTgKLSNkZWZpbmUgRFNJUEhZX0NNTl9USU1J TkdfQ1RSTF8wCQkJCQkweDBBQwotI2RlZmluZSBEU0lQSFlfQ01OX1RJTUlOR19DVFJMXzEJCQkJ CTB4MEIwCi0jZGVmaW5lIERTSVBIWV9DTU5fVElNSU5HX0NUUkxfMgkJCQkJMHgwQjQKLSNkZWZp bmUgRFNJUEhZX0NNTl9USU1JTkdfQ1RSTF8zCQkJCQkweDBCOAotI2RlZmluZSBEU0lQSFlfQ01O X1RJTUlOR19DVFJMXzQJCQkJCTB4MEJDCi0jZGVmaW5lIERTSVBIWV9DTU5fVElNSU5HX0NUUkxf NQkJCQkJMHgwQzAKLSNkZWZpbmUgRFNJUEhZX0NNTl9USU1JTkdfQ1RSTF82CQkJCQkweDBDNAot I2RlZmluZSBEU0lQSFlfQ01OX1RJTUlOR19DVFJMXzcJCQkJCTB4MEM4Ci0jZGVmaW5lIERTSVBI WV9DTU5fVElNSU5HX0NUUkxfOAkJCQkJMHgwQ0MKLSNkZWZpbmUgRFNJUEhZX0NNTl9USU1JTkdf Q1RSTF85CQkJCQkweDBEMAotI2RlZmluZSBEU0lQSFlfQ01OX1RJTUlOR19DVFJMXzEwCQkJCQkw eDBENAotI2RlZmluZSBEU0lQSFlfQ01OX1RJTUlOR19DVFJMXzExCQkJCQkweDBEOAotI2RlZmlu ZSBEU0lQSFlfQ01OX1BIWV9TVEFUVVMJCQkJCQkweDBFQwotI2RlZmluZSBEU0lQSFlfQ01OX0xB TkVfU1RBVFVTMAkJCQkJCTB4MEY0Ci0jZGVmaW5lIERTSVBIWV9DTU5fTEFORV9TVEFUVVMxCQkJ CQkJMHgwRjgKLQotCi0vKiBuID0gMC4uMyBmb3IgZGF0YSBsYW5lcyBhbmQgbiA9IDQgZm9yIGNs b2NrIGxhbmUgKi8KLSNkZWZpbmUgRFNJUEhZX0xOWF9DRkcwKG4pICAgICAgICAgICAgICAgICAg ICAgICAgICgweDIwMCArICgweDgwICogKG4pKSkKLSNkZWZpbmUgRFNJUEhZX0xOWF9DRkcxKG4p ICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwNCArICgweDgwICogKG4pKSkKLSNkZWZpbmUg RFNJUEhZX0xOWF9DRkcyKG4pICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwOCArICgweDgw ICogKG4pKSkKLSNkZWZpbmUgRFNJUEhZX0xOWF9DRkczKG4pICAgICAgICAgICAgICAgICAgICAg ICAgICgweDIwQyArICgweDgwICogKG4pKSkKLSNkZWZpbmUgRFNJUEhZX0xOWF9URVNUX0RBVEFQ QVRIKG4pICAgICAgICAgICAgICAgICgweDIxMCArICgweDgwICogKG4pKSkKLSNkZWZpbmUgRFNJ UEhZX0xOWF9QSU5fU1dBUChuKSAgICAgICAgICAgICAgICAgICAgICgweDIxNCArICgweDgwICog KG4pKSkKLSNkZWZpbmUgRFNJUEhZX0xOWF9IU1RYX1NUUl9DVFJMKG4pICAgICAgICAgICAgICAg ICgweDIxOCArICgweDgwICogKG4pKSkKLSNkZWZpbmUgRFNJUEhZX0xOWF9PRkZTRVRfVE9QX0NU UkwobikgICAgICAgICAgICAgICgweDIxQyArICgweDgwICogKG4pKSkKLSNkZWZpbmUgRFNJUEhZ X0xOWF9PRkZTRVRfQk9UX0NUUkwobikgICAgICAgICAgICAgICgweDIyMCArICgweDgwICogKG4p KSkKLSNkZWZpbmUgRFNJUEhZX0xOWF9MUFRYX1NUUl9DVFJMKG4pICAgICAgICAgICAgICAgICgw eDIyNCArICgweDgwICogKG4pKSkKLSNkZWZpbmUgRFNJUEhZX0xOWF9MUFJYX0NUUkwobikgICAg ICAgICAgICAgICAgICAgICgweDIyOCArICgweDgwICogKG4pKSkKLSNkZWZpbmUgRFNJUEhZX0xO WF9UWF9EQ1RSTChuKSAgICAgICAgICAgICAgICAgICAgICgweDIyQyArICgweDgwICogKG4pKSkK LQotc3RhdGljIGlubGluZSBpbnQgZHNpX2NvbnZfcGh5X3RvX2xvZ2ljYWxfbGFuZSgKLQlzdHJ1 Y3QgZHNpX2xhbmVfbWFwICpsYW5lX21hcCwgZW51bSBkc2lfcGh5X2RhdGFfbGFuZXMgcGh5X2xh bmUpCi17Ci0JaW50IGkgPSAwOwotCi0JaWYgKHBoeV9sYW5lID4gRFNJX1BIWVNJQ0FMX0xBTkVf MykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlmb3IgKGkgPSBEU0lfTE9HSUNBTF9MQU5FXzA7IGkg PCAoRFNJX0xBTkVfTUFYIC0gMSk7IGkrKykgewotCQlpZiAobGFuZV9tYXAtPmxhbmVfbWFwX3Yy W2ldID09IHBoeV9sYW5lKQotCQkJYnJlYWs7Ci0JfQotCXJldHVybiBpOwotfQotCi1zdGF0aWMg aW5saW5lIGludCBkc2lfY29udl9sb2dpY2FsX3RvX3BoeV9sYW5lKAotCXN0cnVjdCBkc2lfbGFu ZV9tYXAgKmxhbmVfbWFwLCBlbnVtIGRzaV9sb2dpY2FsX2xhbmUgbGFuZSkKLXsKLQlpbnQgaSA9 IDA7Ci0KLQlpZiAobGFuZSA+IChEU0lfTEFORV9NQVggLSAxKSkKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0KLQlmb3IgKGkgPSBEU0lfTE9HSUNBTF9MQU5FXzA7IGkgPCAoRFNJX0xBTkVfTUFYIC0gMSk7 IGkrKykgewotCQlpZiAoQklUKGkpID09IGxhbmVfbWFwLT5sYW5lX21hcF92MltsYW5lXSkKLQkJ CWJyZWFrOwotCX0KLQlyZXR1cm4gaTsKLX0KLQotLyoqCi0gKiByZWd1bGF0b3JfZW5hYmxlKCkg LSBlbmFibGUgcmVndWxhdG9ycyBmb3IgRFNJIFBIWQotICogQHBoeTogICAgICBQb2ludGVyIHRv IERTSSBQSFkgaGFyZHdhcmUgb2JqZWN0LgotICogQHJlZ19jZmc6ICBSZWd1bGF0b3IgY29uZmln dXJhdGlvbiBmb3IgYWxsIERTSSBsYW5lcy4KLSAqLwotdm9pZCBkc2lfcGh5X2h3X3YzXzBfcmVn dWxhdG9yX2VuYWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJCSAgICAgIHN0cnVjdCBk c2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnJlZ19jZmcpCi17Ci0JcHJfZGVidWcoIltEU0lfJWRdIFBo eSByZWd1bGF0b3JzIGVuYWJsZWRcbiIsIHBoeS0+aW5kZXgpOwotCS8qIE5vdGhpbmcgdG8gYmUg ZG9uZSBmb3IgRFNJIFBIWSByZWd1bGF0b3IgZW5hYmxlICovCi19Ci0KLS8qKgotICogcmVndWxh dG9yX2Rpc2FibGUoKSAtIGRpc2FibGUgcmVndWxhdG9ycwotICogQHBoeTogICAgICBQb2ludGVy IHRvIERTSSBQSFkgaGFyZHdhcmUgb2JqZWN0LgotICovCi12b2lkIGRzaV9waHlfaHdfdjNfMF9y ZWd1bGF0b3JfZGlzYWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5KQotewotCXByX2RlYnVnKCJb RFNJXyVkXSBQaHkgcmVndWxhdG9ycyBkaXNhYmxlZFxuIiwgcGh5LT5pbmRleCk7Ci0JLyogTm90 aGluZyB0byBiZSBkb25lIGZvciBEU0kgUEhZIHJlZ3VsYXRvciBkaXNhYmxlICovCi19Ci0KLQot c3RhdGljIGludCBkc2lfcGh5X2h3X3YzXzBfaXNfcGxsX29uKHN0cnVjdCBkc2lfcGh5X2h3ICpw aHkpCi17Ci0JdTMyIGRhdGEgPSAwOwotCi0JZGF0YSA9IERTSV9SMzIocGh5LCBEU0lQSFlfQ01O X1BMTF9DTlRSTCk7Ci0JbWIoKTsgLyptYWtlIHN1cmUgcmVhZCBoYXBwZW5lZCAqLwotCXJldHVy biAoZGF0YSAmIEJJVCgwKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzaV9waHlfaHdfdjNfMF9jb25m aWdfbHBjZHJ4KHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0Jc3RydWN0IGRzaV9waHlfY2ZnICpj ZmcsIGJvb2wgZW5hYmxlKQotewotCWludCBwaHlfbGFuZV8wID0gZHNpX2NvbnZfbG9naWNhbF90 b19waHlfbGFuZSgmY2ZnLT5sYW5lX21hcCwKLQkJCURTSV9MT0dJQ0FMX0xBTkVfMCk7Ci0JLyoK LQkgKiBMUFJYIGFuZCBDRFJYIG5lZWQgdG8gZW5hYmxlZCBvbmx5IGZvciBwaHlzaWNhbCBkYXRh IGxhbmUKLQkgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb2dpY2FsIGRhdGEgbGFuZSAwCi0JICov Ci0KLQlpZiAoZW5hYmxlKQotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0xOWF9MUFJYX0NUUkwocGh5 X2xhbmVfMCksCi0JCQljZmctPnN0cmVuZ3RoLmxhbmVbcGh5X2xhbmVfMF1bMV0pOwotCWVsc2UK LQkJRFNJX1czMihwaHksIERTSVBIWV9MTlhfTFBSWF9DVFJMKHBoeV9sYW5lXzApLCAwKTsKLX0K LQotc3RhdGljIHZvaWQgZHNpX3BoeV9od192M18wX2xhbmVfc3dhcF9jb25maWcoc3RydWN0IGRz aV9waHlfaHcgKnBoeSwKLQkJc3RydWN0IGRzaV9sYW5lX21hcCAqbGFuZV9tYXApCi17Ci0JRFNJ X1czMihwaHksIERTSVBIWV9DTU5fTEFORV9DRkcwLAotCQkobGFuZV9tYXAtPmxhbmVfbWFwX3Yy W0RTSV9MT0dJQ0FMX0xBTkVfMF0gfAotCQkobGFuZV9tYXAtPmxhbmVfbWFwX3YyW0RTSV9MT0dJ Q0FMX0xBTkVfMV0gPDwgNCkpKTsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9MQU5FX0NGRzEs Ci0JCShsYW5lX21hcC0+bGFuZV9tYXBfdjJbRFNJX0xPR0lDQUxfTEFORV8yXSB8Ci0JCShsYW5l X21hcC0+bGFuZV9tYXBfdjJbRFNJX0xPR0lDQUxfTEFORV8zXSA8PCA0KSkpOwotfQotCi1zdGF0 aWMgdm9pZCBkc2lfcGh5X2h3X3YzXzBfbGFuZV9zZXR0aW5ncyhzdHJ1Y3QgZHNpX3BoeV9odyAq cGh5LAotCQkJICAgIHN0cnVjdCBkc2lfcGh5X2NmZyAqY2ZnKQotewotCWludCBpOwotCXU4IHR4 X2RjdHJsW10gPSB7MHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMX07Ci0KLQkvKiBTdHJlbmd0 aCBjdHJsIHNldHRpbmdzICovCi0JZm9yIChpID0gRFNJX0xPR0lDQUxfTEFORV8wOyBpIDwgRFNJ X0xBTkVfTUFYOyBpKyspIHsKLQkJRFNJX1czMihwaHksIERTSVBIWV9MTlhfTFBUWF9TVFJfQ1RS TChpKSwKLQkJCWNmZy0+c3RyZW5ndGgubGFuZVtpXVswXSk7Ci0JCS8qCi0JCSAqIERpc2FibGUg TFBSWCBhbmQgQ0RSWCBmb3IgYWxsIGxhbmVzLiBBbmQgbGF0ZXIgb24sIGl0IHdpbGwKLQkJICog YmUgb25seSBlbmFibGVkIGZvciB0aGUgcGh5c2ljYWwgZGF0YSBsYW5lIGNvcnJlc3BvbmRpbmcK LQkJICogdG8gdGhlIGxvZ2ljYWwgZGF0YSBsYW5lIDAKLQkJICovCi0JCURTSV9XMzIocGh5LCBE U0lQSFlfTE5YX0xQUlhfQ1RSTChpKSwgMCk7Ci0JCURTSV9XMzIocGh5LCBEU0lQSFlfTE5YX1BJ Tl9TV0FQKGkpLCAweDApOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0xOWF9IU1RYX1NUUl9DVFJM KGkpLCAweDg4KTsKLQl9Ci0JZHNpX3BoeV9od192M18wX2NvbmZpZ19scGNkcngocGh5LCBjZmcs IHRydWUpOwotCi0JLyogb3RoZXIgc2V0dGluZ3MgKi8KLQlmb3IgKGkgPSBEU0lfTE9HSUNBTF9M QU5FXzA7IGkgPCBEU0lfTEFORV9NQVg7IGkrKykgewotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0xO WF9DRkcwKGkpLCBjZmctPmxhbmVjZmcubGFuZVtpXVswXSk7Ci0JCURTSV9XMzIocGh5LCBEU0lQ SFlfTE5YX0NGRzEoaSksIGNmZy0+bGFuZWNmZy5sYW5lW2ldWzFdKTsKLQkJRFNJX1czMihwaHks IERTSVBIWV9MTlhfQ0ZHMihpKSwgY2ZnLT5sYW5lY2ZnLmxhbmVbaV1bMl0pOwotCQlEU0lfVzMy KHBoeSwgRFNJUEhZX0xOWF9DRkczKGkpLCBjZmctPmxhbmVjZmcubGFuZVtpXVszXSk7Ci0JCURT SV9XMzIocGh5LCBEU0lQSFlfTE5YX09GRlNFVF9UT1BfQ1RSTChpKSwgMHgwKTsKLQkJRFNJX1cz MihwaHksIERTSVBIWV9MTlhfT0ZGU0VUX0JPVF9DVFJMKGkpLCAweDApOwotCQlEU0lfVzMyKHBo eSwgRFNJUEhZX0xOWF9UWF9EQ1RSTChpKSwgdHhfZGN0cmxbaV0pOwotCX0KLQotCS8qIFRvZ2ds ZSBCSVQgMCB0byByZWxlYXNlIGZyZWV6ZSBJLzAgKi8KLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0xO WF9UWF9EQ1RSTCgzKSwgMHgwNSk7Ci0JRFNJX1czMihwaHksIERTSVBIWV9MTlhfVFhfRENUUkwo MyksIDB4MDQpOwotfQotCi0vKioKLSAqIGVuYWJsZSgpIC0gRW5hYmxlIFBIWSBoYXJkd2FyZQot ICogQHBoeTogICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgb2JqZWN0LgotICogQGNm ZzogICAgICBQZXIgbGFuZSBjb25maWd1cmF0aW9ucyBmb3IgdGltaW5nLCBzdHJlbmd0aCBhbmQg bGFuZQotICoJICAgICAgY29uZmlndXJhdGlvbnMuCi0gKi8KLXZvaWQgZHNpX3BoeV9od192M18w X2VuYWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJICAgIHN0cnVjdCBkc2lfcGh5X2Nm ZyAqY2ZnKQotewotCWludCByYyA9IDA7Ci0JdTMyIHN0YXR1czsKLQl1MzIgY29uc3QgZGVsYXlf dXMgPSA1OwotCXUzMiBjb25zdCB0aW1lb3V0X3VzID0gMTAwMDsKLQlzdHJ1Y3QgZHNpX3BoeV9w ZXJfbGFuZV9jZmdzICp0aW1pbmcgPSAmY2ZnLT50aW1pbmc7Ci0JdTMyIGRhdGE7Ci0KLQlpZiAo ZHNpX3BoeV9od192M18wX2lzX3BsbF9vbihwaHkpKQotCQlwcl93YXJuKCJQTEwgdHVybmVkIG9u IGJlZm9yZSBjb25maWd1cmluZyBQSFlcbiIpOwotCi0JLyogd2FpdCBmb3IgUkVGR0VOIFJFQURZ ICovCi0JcmMgPSByZWFkbF9wb2xsX3RpbWVvdXRfYXRvbWljKHBoeS0+YmFzZSArIERTSVBIWV9D TU5fUEhZX1NUQVRVUywKLQkJc3RhdHVzLCAoc3RhdHVzICYgQklUKDApKSwgZGVsYXlfdXMsIHRp bWVvdXRfdXMpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlJlZiBnZW4gbm90IHJlYWR5LiBBYm9y dGluZ1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBkZS1hc3NlcnQgZGlnaXRhbCBhbmQgcGxs IHBvd2VyIGRvd24gKi8KLQlkYXRhID0gQklUKDYpIHwgQklUKDUpOwotCURTSV9XMzIocGh5LCBE U0lQSFlfQ01OX0NUUkxfMCwgZGF0YSk7Ci0KLQkvKiBBc3NlcnQgUExMIGNvcmUgcmVzZXQgKi8K LQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9QTExfQ05UUkwsIDB4MDApOwotCi0JLyogdHVybiBv ZmYgcmVzeW5jIEZJRk8gKi8KLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9SQlVGX0NUUkwsIDB4 MDApOwotCi0JLyogU2VsZWN0IE1TMSBieXRlLWNsayAqLwotCURTSV9XMzIocGh5LCBEU0lQSFlf Q01OX0dMQkxfQ1RSTCwgMHgxMCk7Ci0KLQkvKiBFbmFibGUgTERPICovCi0JRFNJX1czMihwaHks IERTSVBIWV9DTU5fVlJFR19DVFJMLCAweDU5KTsKLQotCS8qIENvbmZpZ3VyZSBQSFkgbGFuZSBz d2FwICovCi0JZHNpX3BoeV9od192M18wX2xhbmVfc3dhcF9jb25maWcocGh5LCAmY2ZnLT5sYW5l X21hcCk7Ci0KLQkvKiBEU0kgUEhZIHRpbWluZ3MgKi8KLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NN Tl9USU1JTkdfQ1RSTF8wLCB0aW1pbmctPmxhbmVfdjNbMF0pOwotCURTSV9XMzIocGh5LCBEU0lQ SFlfQ01OX1RJTUlOR19DVFJMXzEsIHRpbWluZy0+bGFuZV92M1sxXSk7Ci0JRFNJX1czMihwaHks IERTSVBIWV9DTU5fVElNSU5HX0NUUkxfMiwgdGltaW5nLT5sYW5lX3YzWzJdKTsKLQlEU0lfVzMy KHBoeSwgRFNJUEhZX0NNTl9USU1JTkdfQ1RSTF8zLCB0aW1pbmctPmxhbmVfdjNbM10pOwotCURT SV9XMzIocGh5LCBEU0lQSFlfQ01OX1RJTUlOR19DVFJMXzQsIHRpbWluZy0+bGFuZV92M1s0XSk7 Ci0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fVElNSU5HX0NUUkxfNSwgdGltaW5nLT5sYW5lX3Yz WzVdKTsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9USU1JTkdfQ1RSTF82LCB0aW1pbmctPmxh bmVfdjNbNl0pOwotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX1RJTUlOR19DVFJMXzcsIHRpbWlu Zy0+bGFuZV92M1s3XSk7Ci0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fVElNSU5HX0NUUkxfOCwg dGltaW5nLT5sYW5lX3YzWzhdKTsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9USU1JTkdfQ1RS TF85LCB0aW1pbmctPmxhbmVfdjNbOV0pOwotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX1RJTUlO R19DVFJMXzEwLCB0aW1pbmctPmxhbmVfdjNbMTBdKTsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NN Tl9USU1JTkdfQ1RSTF8xMSwgdGltaW5nLT5sYW5lX3YzWzExXSk7Ci0KLQkvKiBSZW1vdmUgcG93 ZXIgZG93biBmcm9tIGFsbCBibG9ja3MgKi8KLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9DVFJM XzAsIDB4N2YpOwotCi0JLypwb3dlciB1cCBsYW5lcyAqLwotCWRhdGEgPSBEU0lfUjMyKHBoeSwg RFNJUEhZX0NNTl9DVFJMXzApOwotCS8qIFRPRE86IG9ubHkgcG93ZXIgdXAgbGFuZXMgdGhhdCBh cmUgdXNlZCAqLwotCWRhdGEgfD0gMHgxRjsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9DVFJM XzAsIGRhdGEpOwotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX0xBTkVfQ1RSTDAsIDB4MUYpOwot Ci0JLyogU2VsZWN0IGZ1bGwtcmF0ZSBtb2RlICovCi0JRFNJX1czMihwaHksIERTSVBIWV9DTU5f Q1RSTF8yLCAweDQwKTsKLQotCXN3aXRjaCAoY2ZnLT5wbGxfc291cmNlKSB7Ci0JY2FzZSBEU0lf UExMX1NPVVJDRV9TVEFOREFMT05FOgotCWNhc2UgRFNJX1BMTF9TT1VSQ0VfTkFUSVZFOgotCQlk YXRhID0gMHgwOyAvKiBpbnRlcm5hbCBQTEwgKi8KLQkJYnJlYWs7Ci0JY2FzZSBEU0lfUExMX1NP VVJDRV9OT05fTkFUSVZFOgotCQlkYXRhID0gMHgxOyAvKiBleHRlcm5hbCBQTEwgKi8KLQkJYnJl YWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX0NM S19DRkcxLCAoZGF0YSA8PCAyKSk7IC8qIHNldCBQTEwgc3JjICovCi0KLQkvKiBEU0kgbGFuZSBz ZXR0aW5ncyAqLwotCWRzaV9waHlfaHdfdjNfMF9sYW5lX3NldHRpbmdzKHBoeSwgY2ZnKTsKLQot CXByX2RlYnVnKCJbRFNJXyVkXVBoeSBlbmFibGVkICIsIHBoeS0+aW5kZXgpOwotfQotCi0vKioK LSAqIGRpc2FibGUoKSAtIERpc2FibGUgUEhZIGhhcmR3YXJlCi0gKiBAcGh5OiAgICAgIFBvaW50 ZXIgdG8gRFNJIFBIWSBoYXJkd2FyZSBvYmplY3QuCi0gKi8KLXZvaWQgZHNpX3BoeV9od192M18w X2Rpc2FibGUoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCSAgICBzdHJ1Y3QgZHNpX3BoeV9j ZmcgKmNmZykKLXsKLQl1MzIgZGF0YSA9IDA7Ci0KLQlpZiAoZHNpX3BoeV9od192M18wX2lzX3Bs bF9vbihwaHkpKQotCQlwcl93YXJuKCJUdXJuaW5nIE9GRiBQSFkgd2hpbGUgUExMIGlzIG9uXG4i KTsKLQotCWRzaV9waHlfaHdfdjNfMF9jb25maWdfbHBjZHJ4KHBoeSwgY2ZnLCBmYWxzZSk7Ci0K LQlkYXRhID0gRFNJX1IzMihwaHksIERTSVBIWV9DTU5fQ1RSTF8wKTsKLQkvKiBkaXNhYmxlIGFs bCBsYW5lcyAqLwotCWRhdGEgJj0gfjB4MUY7Ci0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fQ1RS TF8wLCBkYXRhKTsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9MQU5FX0NUUkwwLCAwKTsKLQot CS8qIFR1cm4gb2ZmIGFsbCBQSFkgYmxvY2tzICovCi0JRFNJX1czMihwaHksIERTSVBIWV9DTU5f Q1RSTF8wLCAweDAwKTsKLQkvKiBtYWtlIHN1cmUgcGh5IGlzIHR1cm5lZCBvZmYgKi8KLQl3bWIo KTsKLQlwcl9kZWJ1ZygiW0RTSV8lZF1QaHkgZGlzYWJsZWQgIiwgcGh5LT5pbmRleCk7Ci19Ci0K LWludCBkc2lfcGh5X2h3X3YzXzBfd2FpdF9mb3JfbGFuZV9pZGxlKAotCQlzdHJ1Y3QgZHNpX3Bo eV9odyAqcGh5LCB1MzIgbGFuZXMpCi17Ci0JaW50IHJjID0gMCwgdmFsID0gMDsKLQl1MzIgc3Rv cF9zdGF0ZV9tYXNrID0gMDsKLQl1MzIgY29uc3Qgc2xlZXBfdXMgPSAxMDsKLQl1MzIgY29uc3Qg dGltZW91dF91cyA9IDEwMDsKLQotCXN0b3Bfc3RhdGVfbWFzayA9IEJJVCg0KTsgLyogY2xvY2sg bGFuZSAqLwotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMCkKLQkJc3RvcF9zdGF0ZV9tYXNr IHw9IEJJVCgwKTsKLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzEpCi0JCXN0b3Bfc3RhdGVf bWFzayB8PSBCSVQoMSk7Ci0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8yKQotCQlzdG9wX3N0 YXRlX21hc2sgfD0gQklUKDIpOwotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMykKLQkJc3Rv cF9zdGF0ZV9tYXNrIHw9IEJJVCgzKTsKLQotCXByX2RlYnVnKCIlczogcG9sbGluZyBmb3IgbGFu ZXMgdG8gYmUgaW4gc3RvcCBzdGF0ZSwgbWFzaz0weCUwOHhcbiIsCi0JCV9fZnVuY19fLCBzdG9w X3N0YXRlX21hc2spOwotCXJjID0gcmVhZGxfcG9sbF90aW1lb3V0KHBoeS0+YmFzZSArIERTSVBI WV9DTU5fTEFORV9TVEFUVVMxLCB2YWwsCi0JCQkodmFsID09IHN0b3Bfc3RhdGVfbWFzayksIHNs ZWVwX3VzLCB0aW1lb3V0X3VzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCIlczogbGFuZXMgbm90 IGluIHN0b3Agc3RhdGUsIExBTkVfU1RBVFVTPTB4JTA4eFxuIiwKLQkJCV9fZnVuY19fLCB2YWwp OwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZHNpX3BoeV9od192 M18wX3VscHNfcmVxdWVzdChzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQlzdHJ1Y3QgZHNpX3Bo eV9jZmcgKmNmZywgdTMyIGxhbmVzKQotewotCXUzMiByZWcgPSAwOwotCi0JaWYgKGxhbmVzICYg RFNJX0NMT0NLX0xBTkUpCi0JCXJlZyA9IEJJVCg0KTsKLQlpZiAobGFuZXMgJiBEU0lfREFUQV9M QU5FXzApCi0JCXJlZyB8PSBCSVQoMCk7Ci0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8xKQot CQlyZWcgfD0gQklUKDEpOwotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMikKLQkJcmVnIHw9 IEJJVCgyKTsKLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzMpCi0JCXJlZyB8PSBCSVQoMyk7 Ci0KLQkvKgotCSAqIFVMUFMgZW50cnkgcmVxdWVzdC4gV2FpdCBmb3Igc2hvcnQgdGltZSB0byBt YWtlIHN1cmUKLQkgKiB0aGF0IHRoZSBsYW5lcyBlbnRlciBVTFBTLiBSZWNvbW1lbmRlZCBhcyBw ZXIgSFBHLgotCSAqLwotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX0xBTkVfQ1RSTDEsIHJlZyk7 Ci0JdXNsZWVwX3JhbmdlKDEwMCwgMTEwKTsKLQotCS8qIGRpc2FibGUgTFBSWCBhbmQgQ0RSWCAq LwotCWRzaV9waHlfaHdfdjNfMF9jb25maWdfbHBjZHJ4KHBoeSwgY2ZnLCBmYWxzZSk7Ci0JLyog ZGlzYWJsZSBsYW5lIExET3MgKi8KLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9WUkVHX0NUUkws IDB4MTkpOwotCXByX2RlYnVnKCJbRFNJX1BIWSVkXSBVTFBTIHJlcXVlc3RlZCBmb3IgbGFuZXMg MHgleFxuIiwgcGh5LT5pbmRleCwKLQkJIGxhbmVzKTsKLX0KLQotdm9pZCBkc2lfcGh5X2h3X3Yz XzBfdWxwc19leGl0KHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0JCQlzdHJ1Y3QgZHNpX3BoeV9j ZmcgKmNmZywgdTMyIGxhbmVzKQotewotCXUzMiByZWcgPSAwOwotCi0JaWYgKGxhbmVzICYgRFNJ X0NMT0NLX0xBTkUpCi0JCXJlZyA9IEJJVCg0KTsKLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5F XzApCi0JCXJlZyB8PSBCSVQoMCk7Ci0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8xKQotCQly ZWcgfD0gQklUKDEpOwotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMikKLQkJcmVnIHw9IEJJ VCgyKTsKLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzMpCi0JCXJlZyB8PSBCSVQoMyk7Ci0K LQkvKiBlbmFibGUgbGFuZSBMRE9zICovCi0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fVlJFR19D VFJMLCAweDU5KTsKLQkvKiBlbmFibGUgTFBSWCBhbmQgQ0RSWCAqLwotCWRzaV9waHlfaHdfdjNf MF9jb25maWdfbHBjZHJ4KHBoeSwgY2ZnLCB0cnVlKTsKLQotCS8qIFVMUFMgZXhpdCByZXF1ZXN0 ICovCi0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fTEFORV9DVFJMMiwgcmVnKTsKLQl1c2xlZXBf cmFuZ2UoMTAwMCwgMTAxMCk7Ci0KLQkvKiBDbGVhciBVTFBTIHJlcXVlc3QgZmxhZ3Mgb24gYWxs IGxhbmVzICovCi0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fTEFORV9DVFJMMSwgMCk7Ci0JLyog Q2xlYXIgVUxQUyBleGl0IGZsYWdzIG9uIGFsbCBsYW5lcyAqLwotCURTSV9XMzIocGh5LCBEU0lQ SFlfQ01OX0xBTkVfQ1RSTDIsIDApOwotCi0JLyoKLQkgKiBTb21ldGltZXMgd2hlbiBleGl0aW5n IFVMUFMsIGl0IGlzIHBvc3NpYmxlIHRoYXQgc29tZSBEU0kKLQkgKiBsYW5lcyBhcmUgbm90IGlu IHRoZSBzdG9wIHN0YXRlIHdoaWNoIGNvdWxkIGxlYWQgdG8gRFNJCi0JICogY29tbWFuZHMgbm90 IGdvaW5nIHRocm91Z2guIFRvIGF2b2lkIHRoaXMsIGZvcmNlIHRoZSBsYW5lcwotCSAqIHRvIGJl IGluIHN0b3Agc3RhdGUuCi0JICovCi0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fTEFORV9DVFJM MywgcmVnKTsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9MQU5FX0NUUkwzLCAwKTsKLQl1c2xl ZXBfcmFuZ2UoMTAwLCAxMTApOwotfQotCi11MzIgZHNpX3BoeV9od192M18wX2dldF9sYW5lc19p bl91bHBzKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHkpCi17Ci0JdTMyIGxhbmVzID0gMDsKLQotCWxh bmVzID0gRFNJX1IzMihwaHksIERTSVBIWV9DTU5fTEFORV9TVEFUVVMwKTsKLQlwcl9kZWJ1Zygi W0RTSV9QSFklZF0gbGFuZXMgaW4gdWxwcyA9IDB4JXhcbiIsIHBoeS0+aW5kZXgsIGxhbmVzKTsK LQlyZXR1cm4gbGFuZXM7Ci19Ci0KLWJvb2wgZHNpX3BoeV9od192M18wX2lzX2xhbmVzX2luX3Vs cHModTMyIGxhbmVzLCB1MzIgdWxwc19sYW5lcykKLXsKLQlpZiAobGFuZXMgJiB1bHBzX2xhbmVz KQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotaW50IGRzaV9waHlfaHdf dGltaW5nX3ZhbF92M18wKHN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnRpbWluZ19jZmcs Ci0JCXUzMiAqdGltaW5nX3ZhbCwgdTMyIHNpemUpCi17Ci0JaW50IGkgPSAwOwotCi0JaWYgKHNp emUgIT0gRFNJX1BIWV9USU1JTkdfVjNfU0laRSkgewotCQlwcl9lcnIoIlVuZXhwZWN0ZWQgdGlt aW5nIGFycmF5IHNpemUgJWRcbiIsIHNpemUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlm b3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotCQl0aW1pbmdfY2ZnLT5sYW5lX3YzW2ldID0gdGlt aW5nX3ZhbFtpXTsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfY2FsYy5jIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kc2ktc3RhZ2luZy9kc2lfcGh5X3RpbWluZ19jYWxjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDEzZmU2ZWMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kt c3RhZ2luZy9kc2lfcGh5X3RpbWluZ19jYWxjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NzYgKzAs MCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5k Ci0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNkZWZpbmUgcHJfZm10 KGZtdCkgImRzaS1waHktdGltaW5nOiIgZm10Ci0KLSNpbmNsdWRlICJkc2lfcGh5X3RpbWluZ19j YWxjLmgiCi0KLXN0YXRpYyBjb25zdCB1MzIgYml0c19wZXJfcGl4ZWxbRFNJX1BJWEVMX0ZPUk1B VF9NQVhdID0gewotCTE2LCAxOCwgMTgsIDI0LCAzLCA4LCAxMiB9OwotCi1zdGF0aWMgaW50IGRz aV9waHlfY21uX3ZhbGlkYXRlX2FuZF9zZXQoc3RydWN0IHRpbWluZ19lbnRyeSAqdCwKLQljaGFy IGNvbnN0ICp0X25hbWUpCi17Ci0JaWYgKHQtPnJlYyAmIDB4ZmZmZmZmMDApIHsKLQkJLyogT3V0 cHV0IHZhbHVlIGNhbiBvbmx5IGJlIDggYml0cyAqLwotCQlwcl9lcnIoIkluY29ycmVjdCAlcyBy ZWMgdmFsdWUgLSAlZFxuIiwgdF9uYW1lLCB0LT5yZWMpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0JdC0+cmVnX3ZhbHVlID0gdC0+cmVjOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGNhbGNf Y2xrX3ByZXBhcmUgLSBjYWxjdWxhdGVzIHByZXBhcmUgdGltaW5nIHBhcmFtcyBmb3IgY2xrIGxh bmUuCi0gKi8KLXN0YXRpYyBpbnQgY2FsY19jbGtfcHJlcGFyZShzdHJ1Y3QgZHNpX3BoeV9odyAq cGh5LAotCQkJCXN0cnVjdCBwaHlfY2xrX3BhcmFtcyAqY2xrX3BhcmFtcywKLQkJCSAgICBzdHJ1 Y3QgcGh5X3RpbWluZ19kZXNjICpkZXNjLAotCQkJICAgIHMzMiAqYWN0dWFsX2ZyYWMsCi0JCQkg ICAgczY0ICphY3R1YWxfaW50ZXJtZWRpYXRlKQotewotCXU2NCBtdWx0aXBsaWVyID0gQklUKDIw KTsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5ICp0ID0gJmRlc2MtPmNsa19wcmVwYXJlOwotCWludCBy YyA9IDA7Ci0JdTY0IGRpdmlkZW5kLCB0ZW1wLCB0ZW1wX211bHRpcGxlOwotCXMzMiBmcmFjID0g MDsKLQlzNjQgaW50ZXJtZWRpYXRlOwotCXM2NCBjbGtfcHJlcF9hY3R1YWw7Ci0KLQlkaXZpZGVu ZCA9ICgodC0+cmVjX21heCAtIHQtPnJlY19taW4pICoKLQkJY2xrX3BhcmFtcy0+Y2xrX3ByZXBf YnVmICogbXVsdGlwbGllcik7Ci0JdGVtcCAgPSByb3VuZHVwKGRpdl9zNjQoZGl2aWRlbmQsIDEw MCksIG11bHRpcGxpZXIpOwotCXRlbXAgKz0gKHQtPnJlY19taW4gKiBtdWx0aXBsaWVyKTsKLQl0 LT5yZWMgPSBkaXZfczY0KHRlbXAsIG11bHRpcGxpZXIpOwotCi0JcmMgPSBkc2lfcGh5X2Ntbl92 YWxpZGF0ZV9hbmRfc2V0KHQsICJjbGtfcHJlcGFyZSIpOwotCWlmIChyYykKLQkJZ290byBlcnJv cjsKLQotCS8qIGNhbGN1bGF0ZSB0aGVvcmV0aWNhbCB2YWx1ZSAqLwotCXRlbXBfbXVsdGlwbGUg PSA4ICogdC0+cmVnX3ZhbHVlICogY2xrX3BhcmFtcy0+dGxweF9udW1lcl9ucwotCQkJICogbXVs dGlwbGllcjsKLQlpbnRlcm1lZGlhdGUgPSBkaXZfczY0KHRlbXBfbXVsdGlwbGUsIGNsa19wYXJh bXMtPmJpdGNsa19tYnBzKTsKLQlkaXZfczY0X3JlbSh0ZW1wX211bHRpcGxlLCBjbGtfcGFyYW1z LT5iaXRjbGtfbWJwcywgJmZyYWMpOwotCWNsa19wcmVwX2FjdHVhbCA9IGRpdl9zNjQoKGludGVy bWVkaWF0ZSArIGZyYWMpLCBtdWx0aXBsaWVyKTsKLQotCXByX2RlYnVnKCJDTEtfUFJFUEFSRTpt aXBpX21pbj0lZCwgbWlwaV9tYXg9JWQsIHJlY19taW49JWQsIHJlY19tYXg9JWQiLAotCQkgdC0+ bWlwaV9taW4sIHQtPm1pcGlfbWF4LCB0LT5yZWNfbWluLCB0LT5yZWNfbWF4KTsKLQlwcl9kZWJ1 ZygiIHJlZ192YWx1ZT0lZCwgYWN0dWFsPSVsbGRcbiIsIHQtPnJlZ192YWx1ZSwgY2xrX3ByZXBf YWN0dWFsKTsKLQotCSphY3R1YWxfZnJhYyA9IGZyYWM7Ci0JKmFjdHVhbF9pbnRlcm1lZGlhdGUg PSBpbnRlcm1lZGlhdGU7Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBjYWxj X2Nsa196ZXJvIC0gY2FsY3VsYXRlcyB6ZXJvIHRpbWluZyBwYXJhbXMgZm9yIGNsayBsYW5lLgot ICovCi1zdGF0aWMgaW50IGNhbGNfY2xrX3plcm8oc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJ CXN0cnVjdCBwaHlfY2xrX3BhcmFtcyAqY2xrX3BhcmFtcywKLQkJCXN0cnVjdCBwaHlfdGltaW5n X2Rlc2MgKmRlc2MsCi0JCQlzMzIgYWN0dWFsX2ZyYWMsIHM2NCBhY3R1YWxfaW50ZXJtZWRpYXRl KQotewotCXU2NCBjb25zdCBtdWx0aXBsaWVyID0gQklUKDIwKTsKLQlpbnQgcmMgPSAwOwotCXN0 cnVjdCB0aW1pbmdfZW50cnkgKnQgPSAmZGVzYy0+Y2xrX3plcm87Ci0JczY0IG1pcGlfbWluLCBy ZWNfdGVtcDE7Ci0Jc3RydWN0IHBoeV90aW1pbmdfb3BzICpvcHMgPSBwaHktPm9wcy50aW1pbmdf b3BzOwotCi0JbWlwaV9taW4gPSAoKDMwMCAqIG11bHRpcGxpZXIpIC0gKGFjdHVhbF9pbnRlcm1l ZGlhdGUgKyBhY3R1YWxfZnJhYykpOwotCXQtPm1pcGlfbWluID0gZGl2X3M2NChtaXBpX21pbiwg bXVsdGlwbGllcik7Ci0KLQlyZWNfdGVtcDEgPSBkaXZfczY0KChtaXBpX21pbiAqIGNsa19wYXJh bXMtPmJpdGNsa19tYnBzKSwKLQkJCSAgICBjbGtfcGFyYW1zLT50bHB4X251bWVyX25zKTsKLQot CWlmIChvcHMtPmNhbGNfY2xrX3plcm8pIHsKLQkJdC0+cmVjX21pbiA9IG9wcy0+Y2FsY19jbGtf emVybyhyZWNfdGVtcDEsIG11bHRpcGxpZXIpOwotCX0gZWxzZSB7Ci0JCXJjID0gLUVJTlZBTDsK LQkJZ290byBlcnJvcjsKLQl9Ci0JdC0+cmVjX21heCA9ICgodC0+cmVjX21pbiA+IDI1NSkgPyA1 MTEgOiAyNTUpOwotCi0JdC0+cmVjID0gRElWX1JPVU5EX1VQKCgoKHQtPnJlY19tYXggLSB0LT5y ZWNfbWluKSAqCi0JCWNsa19wYXJhbXMtPmNsa196ZXJvX2J1ZikgKyAodC0+cmVjX21pbiAqIDEw MCkpLCAxMDApOwotCi0JcmMgPSBkc2lfcGh5X2Ntbl92YWxpZGF0ZV9hbmRfc2V0KHQsICJjbGtf emVybyIpOwotCWlmIChyYykKLQkJZ290byBlcnJvcjsKLQotCi0JcHJfZGVidWcoIkNMS19aRVJP Om1pcGlfbWluPSVkLCBtaXBpX21heD0lZCwgcmVjX21pbj0lZCwgcmVjX21heD0lZCwgcmVnX3Zh bD0lZFxuIiwKLQkJIHQtPm1pcGlfbWluLCB0LT5taXBpX21heCwgdC0+cmVjX21pbiwgdC0+cmVj X21heCwKLQkJIHQtPnJlZ192YWx1ZSk7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgot ICogY2FsY19jbGtfdHJhaWwgLSBjYWxjdWxhdGVzIHByZXBhcmUgdHJhaWwgcGFyYW1zIGZvciBj bGsgbGFuZS4KLSAqLwotc3RhdGljIGludCBjYWxjX2Nsa190cmFpbChzdHJ1Y3QgZHNpX3BoeV9o dyAqcGh5LAotCQkJc3RydWN0IHBoeV9jbGtfcGFyYW1zICpjbGtfcGFyYW1zLAotCQkJc3RydWN0 IHBoeV90aW1pbmdfZGVzYyAqZGVzYywKLQkJCXM2NCAqdGVvdF9jbGtfbGFuZSkKLXsKLQl1NjQg Y29uc3QgbXVsdGlwbGllciA9IEJJVCgyMCk7Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgdGltaW5n X2VudHJ5ICp0ID0gJmRlc2MtPmNsa190cmFpbDsKLQl1NjQgdGVtcF9tdWx0aXBsZTsKLQlzMzIg ZnJhYzsKLQlzNjQgbWlwaV9tYXhfdHIsIHJlY190ZW1wMSwgbWlwaV9tYXg7Ci0JczY0IHRlb3Rf Y2xrX2xhbmUxOwotCXN0cnVjdCBwaHlfdGltaW5nX29wcyAqb3BzID0gcGh5LT5vcHMudGltaW5n X29wczsKLQotCXRlbXBfbXVsdGlwbGUgPSBkaXZfczY0KAotCQkJKDEyICogbXVsdGlwbGllciAq IGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpLAotCQkJY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMp OwotCWRpdl9zNjRfcmVtKHRlbXBfbXVsdGlwbGUsIG11bHRpcGxpZXIsICZmcmFjKTsKLQotCW1p cGlfbWF4X3RyID0gKCgxMDUgKiBtdWx0aXBsaWVyKSArCi0JCSAgICAgICAodGVtcF9tdWx0aXBs ZSArIGZyYWMpKTsKLQl0ZW90X2Nsa19sYW5lMSA9IGRpdl9zNjQobWlwaV9tYXhfdHIsIG11bHRp cGxpZXIpOwotCi0JbWlwaV9tYXggPSAobWlwaV9tYXhfdHIgLSAoY2xrX3BhcmFtcy0+dHJlb3Rf bnMgKiBtdWx0aXBsaWVyKSk7Ci0JdC0+bWlwaV9tYXggPSBkaXZfczY0KG1pcGlfbWF4LCBtdWx0 aXBsaWVyKTsKLQotCXRlbXBfbXVsdGlwbGUgPSBkaXZfczY0KAotCQkJKHQtPm1pcGlfbWluICog bXVsdGlwbGllciAqIGNsa19wYXJhbXMtPmJpdGNsa19tYnBzKSwKLQkJCWNsa19wYXJhbXMtPnRs cHhfbnVtZXJfbnMpOwotCi0JZGl2X3M2NF9yZW0odGVtcF9tdWx0aXBsZSwgbXVsdGlwbGllciwg JmZyYWMpOwotCWlmIChvcHMtPmNhbGNfY2xrX3RyYWlsX3JlY19taW4pIHsKLQkJdC0+cmVjX21p biA9IG9wcy0+Y2FsY19jbGtfdHJhaWxfcmVjX21pbih0ZW1wX211bHRpcGxlLAotCQkJZnJhYywg bXVsdGlwbGllcik7Ci0JfSBlbHNlIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOwot CX0KLQotCS8qIHJlY29tbWVuZGVkIG1heCAqLwotCXJlY190ZW1wMSA9IGRpdl9zNjQoKG1pcGlf bWF4ICogY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpLAotCQkJICAgIGNsa19wYXJhbXMtPnRscHhf bnVtZXJfbnMpOwotCWlmIChvcHMtPmNhbGNfY2xrX3RyYWlsX3JlY19tYXgpIHsKLQkJdC0+cmVj X21heCA9IG9wcy0+Y2FsY19jbGtfdHJhaWxfcmVjX21heChyZWNfdGVtcDEsIG11bHRpcGxpZXIp OwotCX0gZWxzZSB7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQl0LT5y ZWMgPSBESVZfUk9VTkRfVVAoCi0JCSgoKHQtPnJlY19tYXggLSB0LT5yZWNfbWluKSAqIGNsa19w YXJhbXMtPmNsa190cmFpbF9idWYpICsKLQkJICh0LT5yZWNfbWluICogMTAwKSksIDEwMCk7Ci0K LQlyYyA9IGRzaV9waHlfY21uX3ZhbGlkYXRlX2FuZF9zZXQodCwgImNsa190cmFpbCIpOwotCWlm IChyYykKLQkJZ290byBlcnJvcjsKLQotCSp0ZW90X2Nsa19sYW5lID0gdGVvdF9jbGtfbGFuZTE7 Ci0JcHJfZGVidWcoIkNMS19UUkFJTDptaXBpX21pbj0lZCwgbWlwaV9tYXg9JWQsIHJlY19taW49 JWQsIHJlY19tYXg9JWQsIHJlZ192YWw9JWRcbiIsCi0JCSB0LT5taXBpX21pbiwgdC0+bWlwaV9t YXgsIHQtPnJlY19taW4sIHQtPnJlY19tYXgsCi0JCSB0LT5yZWdfdmFsdWUpOwotCi1lcnJvcjoK LQlyZXR1cm4gcmM7Ci0KLX0KLQotLyoqCi0gKiBjYWxjX2hzX3ByZXBhcmUgLSBjYWxjdWxhdGVz IHByZXBhcmUgdGltaW5nIHBhcmFtcyBmb3IgZGF0YSBsYW5lcyBpbiBIUy4KLSAqLwotc3RhdGlj IGludCBjYWxjX2hzX3ByZXBhcmUoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCXN0cnVjdCBw aHlfY2xrX3BhcmFtcyAqY2xrX3BhcmFtcywKLQkJCXN0cnVjdCBwaHlfdGltaW5nX2Rlc2MgKmRl c2MsCi0JCQl1NjQgKnRlbXBfbXVsKQotewotCXU2NCBtdWx0aXBsaWVyID0gQklUKDIwKTsKLQlp bnQgcmMgPSAwOwotCXN0cnVjdCB0aW1pbmdfZW50cnkgKnQgPSAmZGVzYy0+aHNfcHJlcGFyZTsK LQl1NjQgdGVtcF9tdWx0aXBsZSwgZGl2aWRlbmQsIHRlbXA7Ci0JczMyIGZyYWM7Ci0JczY0IHJl Y190ZW1wMSwgcmVjX3RlbXAyLCBtaXBpX21heCwgbWlwaV9taW47Ci0JdTMyIGxvd19jbGtfbXVs dGlwbGllciA9IDA7Ci0KLQlpZiAoY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMgPD0gMTIwKQotCQls b3dfY2xrX211bHRpcGxpZXIgPSAyOwotCS8qIG1pcGkgbWluICovCi0JdGVtcF9tdWx0aXBsZSA9 IGRpdl9zNjQoKDQgKiBtdWx0aXBsaWVyICogY2xrX3BhcmFtcy0+dGxweF9udW1lcl9ucyksCi0J CQkJY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpOwotCWRpdl9zNjRfcmVtKHRlbXBfbXVsdGlwbGUs IG11bHRpcGxpZXIsICZmcmFjKTsKLQltaXBpX21pbiA9ICg0MCAqIG11bHRpcGxpZXIpICsgKHRl bXBfbXVsdGlwbGUgKyBmcmFjKTsKLQl0LT5taXBpX21pbiA9IGRpdl9zNjQobWlwaV9taW4sIG11 bHRpcGxpZXIpOwotCi0JLyogbWlwaV9tYXggKi8KLQl0ZW1wX211bHRpcGxlID0gZGl2X3M2NCgK LQkJCSg2ICogbXVsdGlwbGllciAqIGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpLAotCQkJY2xr X3BhcmFtcy0+Yml0Y2xrX21icHMpOwotCWRpdl9zNjRfcmVtKHRlbXBfbXVsdGlwbGUsIG11bHRp cGxpZXIsICZmcmFjKTsKLQltaXBpX21heCA9ICg4NSAqIG11bHRpcGxpZXIpICsgdGVtcF9tdWx0 aXBsZTsKLQl0LT5taXBpX21heCA9IGRpdl9zNjQobWlwaV9tYXgsIG11bHRpcGxpZXIpOwotCi0J LyogcmVjb21tZW5kZWQgbWluICovCi0JdGVtcF9tdWx0aXBsZSA9IGRpdl9zNjQoKG1pcGlfbWlu ICogY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpLAotCQkJCWNsa19wYXJhbXMtPnRscHhfbnVtZXJf bnMpOwotCXRlbXBfbXVsdGlwbGUgLT0gKGxvd19jbGtfbXVsdGlwbGllciAqIG11bHRpcGxpZXIp OwotCWRpdl9zNjRfcmVtKHRlbXBfbXVsdGlwbGUsIG11bHRpcGxpZXIsICZmcmFjKTsKLQlyZWNf dGVtcDEgPSByb3VuZHVwKCgodGVtcF9tdWx0aXBsZSArIGZyYWMpIC8gOCksIG11bHRpcGxpZXIp OwotCXQtPnJlY19taW4gPSBkaXZfczY0KHJlY190ZW1wMSwgbXVsdGlwbGllcik7Ci0KLQkvKiBy ZWNvbW1lbmRlZCBtYXggKi8KLQl0ZW1wX211bHRpcGxlID0gZGl2X3M2NCgobWlwaV9tYXggKiBj bGtfcGFyYW1zLT5iaXRjbGtfbWJwcyksCi0JCQkJY2xrX3BhcmFtcy0+dGxweF9udW1lcl9ucyk7 Ci0JdGVtcF9tdWx0aXBsZSAtPSAobG93X2Nsa19tdWx0aXBsaWVyICogbXVsdGlwbGllcik7Ci0J ZGl2X3M2NF9yZW0odGVtcF9tdWx0aXBsZSwgbXVsdGlwbGllciwgJmZyYWMpOwotCXJlY190ZW1w MiA9IHJvdW5kZG93bigodGVtcF9tdWx0aXBsZSAvIDgpLCBtdWx0aXBsaWVyKTsKLQl0LT5yZWNf bWF4ID0gZGl2X3M2NChyZWNfdGVtcDIsIG11bHRpcGxpZXIpOwotCi0JLyogcmVnaXN0ZXIgdmFs dWUgKi8KLQlkaXZpZGVuZCA9ICgocmVjX3RlbXAyIC0gcmVjX3RlbXAxKSAqIGNsa19wYXJhbXMt PmhzX3ByZXBfYnVmKTsKLQl0ZW1wID0gcm91bmR1cChkaXZfdTY0KGRpdmlkZW5kLCAxMDApLCBt dWx0aXBsaWVyKTsKLQl0LT5yZWMgPSBkaXZfczY0KCh0ZW1wICsgcmVjX3RlbXAxKSwgbXVsdGlw bGllcik7Ci0KLQlyYyA9IGRzaV9waHlfY21uX3ZhbGlkYXRlX2FuZF9zZXQodCwgImhzX3ByZXBh cmUiKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyb3I7Ci0KLQl0ZW1wX211bHRpcGxlID0gZGl2X3M2 NCgKLQkJCSg4ICogKHRlbXAgKyByZWNfdGVtcDEpICogY2xrX3BhcmFtcy0+dGxweF9udW1lcl9u cyksCi0JCQljbGtfcGFyYW1zLT5iaXRjbGtfbWJwcyk7Ci0KLQkqdGVtcF9tdWwgPSB0ZW1wX211 bHRpcGxlOwotCXByX2RlYnVnKCJIU19QUkVQOm1pcGlfbWluPSVkLCBtaXBpX21heD0lZCwgcmVj X21pbj0lZCwgcmVjX21heD0lZCwgcmVnX3ZhbD0lZFxuIiwKLQkJIHQtPm1pcGlfbWluLCB0LT5t aXBpX21heCwgdC0+cmVjX21pbiwgdC0+cmVjX21heCwKLQkJIHQtPnJlZ192YWx1ZSk7Ci1lcnJv cjoKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogY2FsY19oc196ZXJvIC0gY2FsY3VsYXRlcyB6 ZXJvIHRpbWluZyBwYXJhbXMgZm9yIGRhdGEgbGFuZXMgaW4gSFMuCi0gKi8KLXN0YXRpYyBpbnQg Y2FsY19oc196ZXJvKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0JCQlzdHJ1Y3QgcGh5X2Nsa19w YXJhbXMgKmNsa19wYXJhbXMsCi0JCQlzdHJ1Y3QgcGh5X3RpbWluZ19kZXNjICpkZXNjLAotCQkJ dTY0IHRlbXBfbXVsdGlwbGUpCi17Ci0JdTY0IGNvbnN0IG11bHRpcGxpZXIgPSBCSVQoMjApOwot CWludCByYyA9IDA7Ci0Jc3RydWN0IHRpbWluZ19lbnRyeSAqdCA9ICZkZXNjLT5oc196ZXJvOwot CXM2NCByZWNfdGVtcDEsIG1pcGlfbWluOwotCXN0cnVjdCBwaHlfdGltaW5nX29wcyAqb3BzID0g cGh5LT5vcHMudGltaW5nX29wczsKLQotCW1pcGlfbWluID0gZGl2X3M2NCgoMTAgKiBjbGtfcGFy YW1zLT50bHB4X251bWVyX25zICogbXVsdGlwbGllciksCi0JCQkgICBjbGtfcGFyYW1zLT5iaXRj bGtfbWJwcyk7Ci0JcmVjX3RlbXAxID0gKDE0NSAqIG11bHRpcGxpZXIpICsgbWlwaV9taW4gLSB0 ZW1wX211bHRpcGxlOwotCXQtPm1pcGlfbWluID0gZGl2X3M2NChyZWNfdGVtcDEsIG11bHRpcGxp ZXIpOwotCi0JLyogcmVjb21tZW5kZWQgbWluICovCi0JcmVjX3RlbXAxID0gZGl2X3M2NCgocmVj X3RlbXAxICogY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpLAotCQkJICAgIGNsa19wYXJhbXMtPnRs cHhfbnVtZXJfbnMpOwotCi0JaWYgKG9wcy0+Y2FsY19oc196ZXJvKSB7Ci0JCXQtPnJlY19taW4g PSBvcHMtPmNhbGNfaHNfemVybyhyZWNfdGVtcDEsIG11bHRpcGxpZXIpOwotCX0gZWxzZSB7Ci0J CXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQl0LT5yZWNfbWF4ID0gKCh0LT5y ZWNfbWluID4gMjU1KSA/IDUxMSA6IDI1NSk7Ci0JdC0+cmVjID0gRElWX1JPVU5EX1VQKAotCQkJ KCgodC0+cmVjX21heCAtIHQtPnJlY19taW4pICogY2xrX3BhcmFtcy0+aHNfemVyb19idWYpICsK LQkJCSAodC0+cmVjX21pbiAqIDEwMCkpLAotCQkJMTAwKTsKLQotCXJjID0gZHNpX3BoeV9jbW5f dmFsaWRhdGVfYW5kX3NldCh0LCAiaHNfemVybyIpOwotCWlmIChyYykKLQkJZ290byBlcnJvcjsK LQotCXByX2RlYnVnKCJIU19aRVJPOm1pcGlfbWluPSVkLCBtaXBpX21heD0lZCwgcmVjX21pbj0l ZCwgcmVjX21heD0lZCwgcmVnX3ZhbD0lZFxuIiwKLQkJIHQtPm1pcGlfbWluLCB0LT5taXBpX21h eCwgdC0+cmVjX21pbiwgdC0+cmVjX21heCwKLQkJIHQtPnJlZ192YWx1ZSk7Ci0KLWVycm9yOgot CXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBjYWxjX2hzX3RyYWlsIC0gY2FsY3VsYXRlcyB0cmFp bCB0aW1pbmcgcGFyYW1zIGZvciBkYXRhIGxhbmVzIGluIEhTLgotICovCi1zdGF0aWMgaW50IGNh bGNfaHNfdHJhaWwoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCXN0cnVjdCBwaHlfY2xrX3Bh cmFtcyAqY2xrX3BhcmFtcywKLQkJCXN0cnVjdCBwaHlfdGltaW5nX2Rlc2MgKmRlc2MsCi0JCQl1 NjQgdGVvdF9jbGtfbGFuZSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCB0aW1pbmdfZW50cnkg KnQgPSAmZGVzYy0+aHNfdHJhaWw7Ci0JczY0IHJlY190ZW1wMTsKLQlzdHJ1Y3QgcGh5X3RpbWlu Z19vcHMgKm9wcyA9IHBoeS0+b3BzLnRpbWluZ19vcHM7Ci0KLQl0LT5taXBpX21pbiA9IDYwICsK LQkJCW11bHRfZnJhYyhjbGtfcGFyYW1zLT50bHB4X251bWVyX25zLCA0LAotCQkJCSAgY2xrX3Bh cmFtcy0+Yml0Y2xrX21icHMpOwotCi0JdC0+bWlwaV9tYXggPSB0ZW90X2Nsa19sYW5lIC0gY2xr X3BhcmFtcy0+dHJlb3RfbnM7Ci0KLQlpZiAob3BzLT5jYWxjX2hzX3RyYWlsKSB7Ci0JCW9wcy0+ Y2FsY19oc190cmFpbChjbGtfcGFyYW1zLCBkZXNjKTsKLQl9IGVsc2UgewotCQlyYyA9IC1FSU5W QUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmVjX3RlbXAxID0gRElWX1JPVU5EX1VQKAotCQkJ KCh0LT5yZWNfbWF4IC0gdC0+cmVjX21pbikgKiBjbGtfcGFyYW1zLT5oc190cmFpbF9idWYpLAot CQkJMTAwKTsKLQl0LT5yZWMgPSByZWNfdGVtcDEgKyB0LT5yZWNfbWluOwotCi0JcmMgPSBkc2lf cGh5X2Ntbl92YWxpZGF0ZV9hbmRfc2V0KHQsICJoc190cmFpbCIpOwotCWlmIChyYykKLQkJZ290 byBlcnJvcjsKLQotCXByX2RlYnVnKCJIU19UUkFJTDptaXBpX21pbj0lZCwgbWlwaV9tYXg9JWQs IHJlY19taW49JWQsIHJlY19tYXg9JWQsIHJlZ192YWw9JWRcbiIsCi0JCSB0LT5taXBpX21pbiwg dC0+bWlwaV9tYXgsIHQtPnJlY19taW4sIHQtPnJlY19tYXgsCi0JCSB0LT5yZWdfdmFsdWUpOwot Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogY2FsY19oc19ycXN0IC0gY2FsY3Vs YXRlcyBycXN0IHRpbWluZyBwYXJhbXMgZm9yIGRhdGEgbGFuZXMgaW4gSFMuCi0gKi8KLXN0YXRp YyBpbnQgY2FsY19oc19ycXN0KHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0JCQlzdHJ1Y3QgcGh5 X2Nsa19wYXJhbXMgKmNsa19wYXJhbXMsCi0JCQlzdHJ1Y3QgcGh5X3RpbWluZ19kZXNjICpkZXNj KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IHRpbWluZ19lbnRyeSAqdCA9ICZkZXNjLT5oc19y cXN0OwotCi0JdC0+cmVjID0gRElWX1JPVU5EX1VQKAotCQkoKHQtPm1pcGlfbWluICogY2xrX3Bh cmFtcy0+Yml0Y2xrX21icHMpIC0KLQkJICg4ICogY2xrX3BhcmFtcy0+dGxweF9udW1lcl9ucykp LAotCQkoOCAqIGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpKTsKLQotCXJjID0gZHNpX3BoeV9j bW5fdmFsaWRhdGVfYW5kX3NldCh0LCAiaHNfcnFzdCIpOwotCWlmIChyYykKLQkJZ290byBlcnJv cjsKLQotCXByX2RlYnVnKCJIU19SUVNUOm1pcGlfbWluPSVkLCBtaXBpX21heD0lZCwgcmVjX21p bj0lZCwgcmVjX21heD0lZCwgcmVnX3ZhbD0lZFxuIiwKLQkJIHQtPm1pcGlfbWluLCB0LT5taXBp X21heCwgdC0+cmVjX21pbiwgdC0+cmVjX21heCwKLQkJIHQtPnJlZ192YWx1ZSk7Ci0KLWVycm9y OgotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBjYWxjX2hzX2V4aXQgLSBjYWxjdWxhdGVzIGV4 aXQgdGltaW5nIHBhcmFtcyBmb3IgZGF0YSBsYW5lcyBpbiBIUy4KLSAqLwotc3RhdGljIGludCBj YWxjX2hzX2V4aXQoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCXN0cnVjdCBwaHlfY2xrX3Bh cmFtcyAqY2xrX3BhcmFtcywKLQkJCXN0cnVjdCBwaHlfdGltaW5nX2Rlc2MgKmRlc2MpCi17Ci0J aW50IHJjID0gMDsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5ICp0ID0gJmRlc2MtPmhzX2V4aXQ7Ci0K LQl0LT5yZWNfbWluID0gKERJVl9ST1VORF9VUCgKLQkJCSh0LT5taXBpX21pbiAqIGNsa19wYXJh bXMtPmJpdGNsa19tYnBzKSwKLQkJCSg4ICogY2xrX3BhcmFtcy0+dGxweF9udW1lcl9ucykpIC0g MSk7Ci0KLQl0LT5yZWMgPSBESVZfUk9VTkRfVVAoCi0JCSgoKHQtPnJlY19tYXggLSB0LT5yZWNf bWluKSAqIGNsa19wYXJhbXMtPmhzX2V4aXRfYnVmKSArCi0JCSAodC0+cmVjX21pbiAqIDEwMCkp LCAxMDApOwotCi0JcmMgPSBkc2lfcGh5X2Ntbl92YWxpZGF0ZV9hbmRfc2V0KHQsICJoc19leGl0 Iik7Ci0JaWYgKHJjKQotCQlnb3RvIGVycm9yOwotCi0KLQlwcl9kZWJ1ZygiSFNfRVhJVDptaXBp X21pbj0lZCwgbWlwaV9tYXg9JWQsIHJlY19taW49JWQsIHJlY19tYXg9JWQsIHJlZ192YWw9JWRc biIsCi0JCSB0LT5taXBpX21pbiwgdC0+bWlwaV9tYXgsIHQtPnJlY19taW4sIHQtPnJlY19tYXgs Ci0JCSB0LT5yZWdfdmFsdWUpOwotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICog Y2FsY19oc19ycXN0X2NsayAtIGNhbGN1bGF0ZXMgcnFzdCB0aW1pbmcgcGFyYW1zIGZvciBjbG9j ayBsYW5lLi4KLSAqLwotc3RhdGljIGludCBjYWxjX2hzX3Jxc3RfY2xrKHN0cnVjdCBkc2lfcGh5 X2h3ICpwaHksCi0JCQlzdHJ1Y3QgcGh5X2Nsa19wYXJhbXMgKmNsa19wYXJhbXMsCi0JCQlzdHJ1 Y3QgcGh5X3RpbWluZ19kZXNjICpkZXNjKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IHRpbWlu Z19lbnRyeSAqdCA9ICZkZXNjLT5oc19ycXN0X2NsazsKLQotCXQtPnJlYyA9IERJVl9ST1VORF9V UCgKLQkJKCh0LT5taXBpX21pbiAqIGNsa19wYXJhbXMtPmJpdGNsa19tYnBzKSAtCi0JCSAoOCAq IGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpKSwKLQkJKDggKiBjbGtfcGFyYW1zLT50bHB4X251 bWVyX25zKSk7Ci0KLQlyYyA9IGRzaV9waHlfY21uX3ZhbGlkYXRlX2FuZF9zZXQodCwgImhzX3Jx c3RfY2xrIik7Ci0JaWYgKHJjKQotCQlnb3RvIGVycm9yOwotCi0JcHJfZGVidWcoIkhTX1JRU1Rf Q0xLOm1pcGlfbWluPSVkLCBtaXBpX21heD0lZCwgcmVjX21pbj0lZCwgcmVjX21heD0lZCwgcmVn X3ZhbD0lZFxuIiwKLQkJIHQtPm1pcGlfbWluLCB0LT5taXBpX21heCwgdC0+cmVjX21pbiwgdC0+ cmVjX21heCwKLQkJIHQtPnJlZ192YWx1ZSk7Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQot LyoqCi0gKiBkc2lfcGh5X2NhbGNfdGltaW5nX3BhcmFtcyAtIGNhbGN1bGF0ZXMgdGltaW5nIHBh cmFtZXRzIGZvciBhIGdpdmVuIGJpdCBjbG9jawotICovCi1zdGF0aWMgaW50IGRzaV9waHlfY21u X2NhbGNfdGltaW5nX3BhcmFtcyhzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCXN0cnVjdCBwaHlf Y2xrX3BhcmFtcyAqY2xrX3BhcmFtcywgc3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYykKLXsK LQlpbnQgcmMgPSAwOwotCXMzMiBhY3R1YWxfZnJhYyA9IDA7Ci0JczY0IGFjdHVhbF9pbnRlcm1l ZGlhdGUgPSAwOwotCXU2NCB0ZW1wX211bHRpcGxlOwotCXM2NCB0ZW90X2Nsa19sYW5lOwotCi0J cmMgPSBjYWxjX2Nsa19wcmVwYXJlKHBoeSwgY2xrX3BhcmFtcywgZGVzYywgJmFjdHVhbF9mcmFj LAotCQkJICAgICAgJmFjdHVhbF9pbnRlcm1lZGlhdGUpOwotCWlmIChyYykgewotCQlwcl9lcnIo ImNsa19wcmVwYXJlIGNhbGN1bGF0aW9ucyBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8g ZXJyb3I7Ci0JfQotCi0JcmMgPSBjYWxjX2Nsa196ZXJvKHBoeSwgY2xrX3BhcmFtcywgZGVzYywK LQkJYWN0dWFsX2ZyYWMsIGFjdHVhbF9pbnRlcm1lZGlhdGUpOwotCWlmIChyYykgewotCQlwcl9l cnIoImNsa196ZXJvIGNhbGN1bGF0aW9ucyBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8g ZXJyb3I7Ci0JfQotCi0JcmMgPSBjYWxjX2Nsa190cmFpbChwaHksIGNsa19wYXJhbXMsIGRlc2Ms ICZ0ZW90X2Nsa19sYW5lKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJjbGtfdHJhaWwgY2FsY3Vs YXRpb25zIGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9 IGNhbGNfaHNfcHJlcGFyZShwaHksIGNsa19wYXJhbXMsIGRlc2MsICZ0ZW1wX211bHRpcGxlKTsK LQlpZiAocmMpIHsKLQkJcHJfZXJyKCJoc19wcmVwYXJlIGNhbGN1bGF0aW9ucyBmYWlsZWQsIHJj PSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBjYWxjX2hzX3plcm8ocGh5 LCBjbGtfcGFyYW1zLCBkZXNjLCB0ZW1wX211bHRpcGxlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJy KCJoc196ZXJvIGNhbGN1bGF0aW9ucyBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJy b3I7Ci0JfQotCi0JcmMgPSBjYWxjX2hzX3RyYWlsKHBoeSwgY2xrX3BhcmFtcywgZGVzYywgdGVv dF9jbGtfbGFuZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiaHNfdHJhaWwgY2FsY3VsYXRpb25z IGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGNhbGNf aHNfcnFzdChwaHksIGNsa19wYXJhbXMsIGRlc2MpOwotCWlmIChyYykgewotCQlwcl9lcnIoImhz X3Jxc3QgY2FsY3VsYXRpb25zIGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsK LQl9Ci0KLQlyYyA9IGNhbGNfaHNfZXhpdChwaHksIGNsa19wYXJhbXMsIGRlc2MpOwotCWlmIChy YykgewotCQlwcl9lcnIoImhzX2V4aXQgY2FsY3VsYXRpb25zIGZhaWxlZCwgcmM9JWRcbiIsIHJj KTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGNhbGNfaHNfcnFzdF9jbGsocGh5LCBjbGtf cGFyYW1zLCBkZXNjKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJoc19ycXN0X2NsayBjYWxjdWxh dGlvbnMgZmFpbGVkLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLWVycm9yOgot CXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBjYWxjdWxhdGVfdGltaW5nX3BhcmFtcygpIC0gY2Fs Y3VsYXRlcyB0aW1pbmcgcGFyYW1ldGVycy4KLSAqIEBwaHk6ICAgICAgUG9pbnRlciB0byBEU0kg UEhZIGhhcmR3YXJlIG9iamVjdC4KLSAqIEBtb2RlOiAgICAgTW9kZSBpbmZvcm1hdGlvbiBmb3Ig d2hpY2ggdGltaW5nIGhhcyB0byBiZSBjYWxjdWxhdGVkLgotICogQGNvbmZpZzogICBEU0kgaG9z dCBjb25maWd1cmF0aW9uIGZvciB0aGlzIG1vZGUuCi0gKiBAdGltaW5nOiAgIFRpbWluZyBwYXJh bWV0ZXJzIGZvciBlYWNoIGxhbmUgd2hpY2ggd2lsbCBiZSByZXR1cm5lZC4KLSAqLwotaW50IGRz aV9waHlfaHdfY2FsY3VsYXRlX3RpbWluZ19wYXJhbXMoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwK LQkJCQkJICAgIHN0cnVjdCBkc2lfbW9kZV9pbmZvICptb2RlLAotCQkJCQkgICAgc3RydWN0IGRz aV9ob3N0X2NvbW1vbl9jZmcgKmhvc3QsCi0JCQkJCSAgIHN0cnVjdCBkc2lfcGh5X3Blcl9sYW5l X2NmZ3MgKnRpbWluZykKLXsKLQkvKiBjb25zdGFudHMgKi8KLQl1MzIgY29uc3QgZXNjX2Nsa19t aHogPSAxOTI7IC8qIFRPRE86IGVzYyBjbG9jayBpcyBoYXJkY29kZWQgKi8KLQl1MzIgY29uc3Qg ZXNjX2Nsa19tbXNzX2NjX3ByZWRpdiA9IDEwOwotCXUzMiBjb25zdCB0bHB4X251bWVyID0gMTAw MDsKLQl1MzIgY29uc3QgdHJfZW90ID0gMjA7Ci0JdTMyIGNvbnN0IGNsa19wcmVwYXJlX3NwZWNf bWluID0gMzg7Ci0JdTMyIGNvbnN0IGNsa19wcmVwYXJlX3NwZWNfbWF4ID0gOTU7Ci0JdTMyIGNv bnN0IGNsa190cmFpbF9zcGVjX21pbiA9IDYwOwotCXUzMiBjb25zdCBoc19leGl0X3NwZWNfbWlu ID0gMTAwOwotCXUzMiBjb25zdCBoc19leGl0X3JlY29fbWF4ID0gMjU1OwotCXUzMiBjb25zdCBo c19ycXN0X3NwZWNfbWluID0gNTA7Ci0KLQkvKiBsb2NhbCB2YXJzICovCi0JaW50IHJjID0gMDsK LQl1MzIgaF90b3RhbCwgdl90b3RhbDsKLQl1NjQgaW50ZXJfbnVtOwotCXUzMiBudW1fb2ZfbGFu ZXMgPSAwOwotCXUzMiBicHA7Ci0JdTY0IHgsIHk7Ci0Jc3RydWN0IHBoeV90aW1pbmdfZGVzYyBk ZXNjOwotCXN0cnVjdCBwaHlfY2xrX3BhcmFtcyBjbGtfcGFyYW1zID0gezB9OwotCXN0cnVjdCBw aHlfdGltaW5nX29wcyAqb3BzID0gcGh5LT5vcHMudGltaW5nX29wczsKLQotCW1lbXNldCgmZGVz YywgMHgwLCBzaXplb2YoZGVzYykpOwotCWhfdG90YWwgPSBEU0lfSF9UT1RBTChtb2RlKTsKLQl2 X3RvdGFsID0gRFNJX1ZfVE9UQUwobW9kZSk7Ci0KLQlicHAgPSBiaXRzX3Blcl9waXhlbFtob3N0 LT5kc3RfZm9ybWF0XTsKLQotCWludGVyX251bSA9IGJwcCAqIG1vZGUtPnJlZnJlc2hfcmF0ZTsK LQotCWlmIChob3N0LT5kYXRhX2xhbmVzICYgRFNJX0RBVEFfTEFORV8wKQotCQludW1fb2ZfbGFu ZXMrKzsKLQlpZiAoaG9zdC0+ZGF0YV9sYW5lcyAmIERTSV9EQVRBX0xBTkVfMSkKLQkJbnVtX29m X2xhbmVzKys7Ci0JaWYgKGhvc3QtPmRhdGFfbGFuZXMgJiBEU0lfREFUQV9MQU5FXzIpCi0JCW51 bV9vZl9sYW5lcysrOwotCWlmIChob3N0LT5kYXRhX2xhbmVzICYgRFNJX0RBVEFfTEFORV8zKQot CQludW1fb2ZfbGFuZXMrKzsKLQotCi0JeCA9IG11bHRfZnJhYyh2X3RvdGFsICogaF90b3RhbCwg aW50ZXJfbnVtLCBudW1fb2ZfbGFuZXMpOwotCXkgPSByb3VuZGRvd24oeCwgMSk7Ci0KLQljbGtf cGFyYW1zLmJpdGNsa19tYnBzID0gcm91bmRkb3duKG11bHRfZnJhYyh5LCAxLCAxMDAwMDAwKSwg MSk7Ci0JY2xrX3BhcmFtcy5lc2NjbGtfbnVtZXIgPSBlc2NfY2xrX21oejsKLQljbGtfcGFyYW1z LmVzY2Nsa19kZW5vbSA9IGVzY19jbGtfbW1zc19jY19wcmVkaXY7Ci0JY2xrX3BhcmFtcy50bHB4 X251bWVyX25zID0gdGxweF9udW1lcjsKLQljbGtfcGFyYW1zLnRyZW90X25zID0gdHJfZW90Owot Ci0KLQkvKiBTZXR1cCBkZWZhdWx0IHBhcmFtZXRlcnMgKi8KLQlkZXNjLmNsa19wcmVwYXJlLm1p cGlfbWluID0gY2xrX3ByZXBhcmVfc3BlY19taW47Ci0JZGVzYy5jbGtfcHJlcGFyZS5taXBpX21h eCA9IGNsa19wcmVwYXJlX3NwZWNfbWF4OwotCWRlc2MuY2xrX3RyYWlsLm1pcGlfbWluID0gY2xr X3RyYWlsX3NwZWNfbWluOwotCWRlc2MuaHNfZXhpdC5taXBpX21pbiA9IGhzX2V4aXRfc3BlY19t aW47Ci0JZGVzYy5oc19leGl0LnJlY19tYXggPSBoc19leGl0X3JlY29fbWF4OwotCWRlc2MuaHNf cnFzdC5taXBpX21pbiA9IGhzX3Jxc3Rfc3BlY19taW47Ci0JZGVzYy5oc19ycXN0X2Nsay5taXBp X21pbiA9IGhzX3Jxc3Rfc3BlY19taW47Ci0KLQlpZiAob3BzLT5nZXRfZGVmYXVsdF9waHlfcGFy YW1zKSB7Ci0JCW9wcy0+Z2V0X2RlZmF1bHRfcGh5X3BhcmFtcygmY2xrX3BhcmFtcyk7Ci0JfSBl bHNlIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWRlc2MuY2xrX3By ZXBhcmUucmVjX21pbiA9IERJVl9ST1VORF9VUCgKLQkJCShkZXNjLmNsa19wcmVwYXJlLm1pcGlf bWluICogY2xrX3BhcmFtcy5iaXRjbGtfbWJwcyksCi0JCQkoOCAqIGNsa19wYXJhbXMudGxweF9u dW1lcl9ucykKLQkJCSk7Ci0KLQlkZXNjLmNsa19wcmVwYXJlLnJlY19tYXggPSByb3VuZGRvd24o Ci0JCW11bHRfZnJhYygoZGVzYy5jbGtfcHJlcGFyZS5taXBpX21heCAqIGNsa19wYXJhbXMuYml0 Y2xrX21icHMpLAotCQkJICAxLCAoOCAqIGNsa19wYXJhbXMudGxweF9udW1lcl9ucykpLAotCQkx KTsKLQotCXByX2RlYnVnKCJCSVQgQ0xPQ0sgPSAlZCwgdGxweF9udW1lcl9ucz0lZCwgdHJlb3Rf bnM9JWRcbiIsCi0JICAgICAgIGNsa19wYXJhbXMuYml0Y2xrX21icHMsIGNsa19wYXJhbXMudGxw eF9udW1lcl9ucywKLQkgICAgICAgY2xrX3BhcmFtcy50cmVvdF9ucyk7Ci0JcmMgPSBkc2lfcGh5 X2Ntbl9jYWxjX3RpbWluZ19wYXJhbXMocGh5LCAmY2xrX3BhcmFtcywgJmRlc2MpOwotCWlmIChy YykgewotCQlwcl9lcnIoIlRpbWluZyBjYWxjIGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKLQkJZ290 byBlcnJvcjsKLQl9Ci0KLQlpZiAob3BzLT51cGRhdGVfdGltaW5nX3BhcmFtcykgewotCQlvcHMt PnVwZGF0ZV90aW1pbmdfcGFyYW1zKHRpbWluZywgJmRlc2MpOwotCX0gZWxzZSB7Ci0JCXJjID0g LUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQot aW50IGRzaV9waHlfdGltaW5nX2NhbGNfaW5pdChzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJ ZW51bSBkc2lfcGh5X3ZlcnNpb24gdmVyc2lvbikKLXsKLQlzdHJ1Y3QgcGh5X3RpbWluZ19vcHMg Km9wcyA9IE5VTEw7Ci0KLQlpZiAodmVyc2lvbiA9PSBEU0lfUEhZX1ZFUlNJT05fVU5LTk9XTiB8 fAotCSAgICB2ZXJzaW9uID49IERTSV9QSFlfVkVSU0lPTl9NQVggfHwgIXBoeSkgewotCQlwcl9l cnIoIlVuc3VwcG9ydGVkIHZlcnNpb246ICVkXG4iLCB2ZXJzaW9uKTsKLQkJcmV0dXJuIC1FTk9U U1VQUDsKLQl9Ci0KLQlvcHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGh5X3RpbWluZ19vcHMp LCBHRlBfS0VSTkVMKTsKLQlpZiAoIW9wcykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcGh5LT5vcHMu dGltaW5nX29wcyA9IG9wczsKLQotCXN3aXRjaCAodmVyc2lvbikgewotCWNhc2UgRFNJX1BIWV9W RVJTSU9OXzJfMDoKLQkJb3BzLT5nZXRfZGVmYXVsdF9waHlfcGFyYW1zID0KLQkJCWRzaV9waHlf aHdfdjJfMF9nZXRfZGVmYXVsdF9waHlfcGFyYW1zOwotCQlvcHMtPmNhbGNfY2xrX3plcm8gPQot CQkJZHNpX3BoeV9od192Ml8wX2NhbGNfY2xrX3plcm87Ci0JCW9wcy0+Y2FsY19jbGtfdHJhaWxf cmVjX21pbiA9Ci0JCQlkc2lfcGh5X2h3X3YyXzBfY2FsY19jbGtfdHJhaWxfcmVjX21pbjsKLQkJ b3BzLT5jYWxjX2Nsa190cmFpbF9yZWNfbWF4ID0KLQkJCWRzaV9waHlfaHdfdjJfMF9jYWxjX2Ns a190cmFpbF9yZWNfbWF4OwotCQlvcHMtPmNhbGNfaHNfemVybyA9Ci0JCQlkc2lfcGh5X2h3X3Yy XzBfY2FsY19oc196ZXJvOwotCQlvcHMtPmNhbGNfaHNfdHJhaWwgPQotCQkJZHNpX3BoeV9od192 Ml8wX2NhbGNfaHNfdHJhaWw7Ci0JCW9wcy0+dXBkYXRlX3RpbWluZ19wYXJhbXMgPQotCQkJZHNp X3BoeV9od192Ml8wX3VwZGF0ZV90aW1pbmdfcGFyYW1zOwotCQlicmVhazsKLQljYXNlIERTSV9Q SFlfVkVSU0lPTl8zXzA6Ci0JCW9wcy0+Z2V0X2RlZmF1bHRfcGh5X3BhcmFtcyA9Ci0JCQlkc2lf cGh5X2h3X3YzXzBfZ2V0X2RlZmF1bHRfcGh5X3BhcmFtczsKLQkJb3BzLT5jYWxjX2Nsa196ZXJv ID0KLQkJCWRzaV9waHlfaHdfdjNfMF9jYWxjX2Nsa196ZXJvOwotCQlvcHMtPmNhbGNfY2xrX3Ry YWlsX3JlY19taW4gPQotCQkJZHNpX3BoeV9od192M18wX2NhbGNfY2xrX3RyYWlsX3JlY19taW47 Ci0JCW9wcy0+Y2FsY19jbGtfdHJhaWxfcmVjX21heCA9Ci0JCQlkc2lfcGh5X2h3X3YzXzBfY2Fs Y19jbGtfdHJhaWxfcmVjX21heDsKLQkJb3BzLT5jYWxjX2hzX3plcm8gPQotCQkJZHNpX3BoeV9o d192M18wX2NhbGNfaHNfemVybzsKLQkJb3BzLT5jYWxjX2hzX3RyYWlsID0KLQkJCWRzaV9waHlf aHdfdjNfMF9jYWxjX2hzX3RyYWlsOwotCQlvcHMtPnVwZGF0ZV90aW1pbmdfcGFyYW1zID0KLQkJ CWRzaV9waHlfaHdfdjNfMF91cGRhdGVfdGltaW5nX3BhcmFtczsKLQkJYnJlYWs7Ci0JY2FzZSBE U0lfUEhZX1ZFUlNJT05fMF8wX0hQTToKLQljYXNlIERTSV9QSFlfVkVSU0lPTl8wXzBfTFBNOgot CWNhc2UgRFNJX1BIWV9WRVJTSU9OXzFfMDoKLQlkZWZhdWx0OgotCQlrZnJlZShvcHMpOwotCQly ZXR1cm4gLUVOT1RTVVBQOwotCX0KLQotCXJldHVybiAwOwotfQotCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfdGltaW5nX2NhbGMuaCBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfY2FsYy5oCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTIyNGZhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfY2FsYy5oCisrKyAvZGV2L251bGwK QEAgLTEsMTQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwgVGhlIExp bnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK LSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQot ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0j aWZuZGVmIF9EU0lfUEhZX1RJTUlOR19DQUxDX0hfCi0jZGVmaW5lIF9EU0lfUEhZX1RJTUlOR19D QUxDX0hfCi0KLSNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJu ZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4K LSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KLSNp bmNsdWRlIDxsaW51eC9lcnJuby5oPgotCi0jaW5jbHVkZSAiZHNpX2RlZnMuaCIKLSNpbmNsdWRl ICJkc2lfcGh5X2h3LmgiCi0jaW5jbHVkZSAiZHNpX2NhdGFsb2cuaCIKLQotLyoqCi0gKiBzdHJ1 Y3QgdGltaW5nX2VudHJ5IC0gQ2FsY3VsYXRlZCB2YWx1ZXMgZm9yIGVhY2ggdGltaW5nIHBhcmFt ZXRlci4KLSAqIEBtaXBpX21pbjoKLSAqIEBtaXBpX21heDoKLSAqIEByZWNfbWluOgotICogQHJl Y19tYXg6Ci0gKiBAcmVjOgotICogQHJlZ192YWx1ZTogICAgICAgVmFsdWUgdG8gYmUgcHJvZ3Jh bW1lZCBpbiByZWdpc3Rlci4KLSAqLwotc3RydWN0IHRpbWluZ19lbnRyeSB7Ci0JczMyIG1pcGlf bWluOwotCXMzMiBtaXBpX21heDsKLQlzMzIgcmVjX21pbjsKLQlzMzIgcmVjX21heDsKLQlzMzIg cmVjOwotCXU4IHJlZ192YWx1ZTsKLX07Ci0KLS8qKgotICogc3RydWN0IHBoeV90aW1pbmdfZGVz YyAtIFRpbWluZyBwYXJhbWV0ZXJzIGZvciBEU0kgUEhZLgotICovCi1zdHJ1Y3QgcGh5X3RpbWlu Z19kZXNjIHsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5IGNsa19wcmVwYXJlOwotCXN0cnVjdCB0aW1p bmdfZW50cnkgY2xrX3plcm87Ci0Jc3RydWN0IHRpbWluZ19lbnRyeSBjbGtfdHJhaWw7Ci0Jc3Ry dWN0IHRpbWluZ19lbnRyeSBoc19wcmVwYXJlOwotCXN0cnVjdCB0aW1pbmdfZW50cnkgaHNfemVy bzsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5IGhzX3RyYWlsOwotCXN0cnVjdCB0aW1pbmdfZW50cnkg aHNfcnFzdDsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5IGhzX3Jxc3RfY2xrOwotCXN0cnVjdCB0aW1p bmdfZW50cnkgaHNfZXhpdDsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5IHRhX2dvOwotCXN0cnVjdCB0 aW1pbmdfZW50cnkgdGFfc3VyZTsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5IHRhX3NldDsKLQlzdHJ1 Y3QgdGltaW5nX2VudHJ5IGNsa19wb3N0OwotCXN0cnVjdCB0aW1pbmdfZW50cnkgY2xrX3ByZTsK LX07Ci0KLS8qKgotICogc3RydWN0IHBoeV9jbGtfcGFyYW1zIC0gQ2xvY2sgcGFyYW1ldGVycyBm b3IgUEhZIHRpbWluZyBjYWxjdWxhdGlvbnMuCi0gKi8KLXN0cnVjdCBwaHlfY2xrX3BhcmFtcyB7 Ci0JdTMyIGJpdGNsa19tYnBzOwotCXUzMiBlc2NjbGtfbnVtZXI7Ci0JdTMyIGVzY2Nsa19kZW5v bTsKLQl1MzIgdGxweF9udW1lcl9uczsKLQl1MzIgdHJlb3RfbnM7Ci0JdTMyIGNsa19wcmVwX2J1 ZjsKLQl1MzIgY2xrX3plcm9fYnVmOwotCXUzMiBjbGtfdHJhaWxfYnVmOwotCXUzMiBoc19wcmVw X2J1ZjsKLQl1MzIgaHNfemVyb19idWY7Ci0JdTMyIGhzX3RyYWlsX2J1ZjsKLQl1MzIgaHNfcnFz dF9idWY7Ci0JdTMyIGhzX2V4aXRfYnVmOwotfTsKLQotLyoqCi0gKiBWYXJpb3VzIE9wcyBuZWVk ZWQgZm9yIGF1dG8tY2FsY3VsYXRpb24gb2YgRFNJIFBIWSB0aW1pbmcgcGFyYW1ldGVycy4KLSAq Lwotc3RydWN0IHBoeV90aW1pbmdfb3BzIHsKLQl2b2lkICgqZ2V0X2RlZmF1bHRfcGh5X3BhcmFt cykoc3RydWN0IHBoeV9jbGtfcGFyYW1zICpwYXJhbXMpOwotCi0JaW50MzJfdCAoKmNhbGNfY2xr X3plcm8pKHM2NCByZWNfdGVtcDEsIHM2NCBtdWx0KTsKLQotCWludDMyX3QgKCpjYWxjX2Nsa190 cmFpbF9yZWNfbWluKShzNjQgdGVtcF9tdWwsCi0JCXM2NCBmcmFjLCBzNjQgbXVsdCk7Ci0KLQlp bnQzMl90ICgqY2FsY19jbGtfdHJhaWxfcmVjX21heCkoczY0IHRlbXAxLCBzNjQgbXVsdCk7Ci0K LQlpbnQzMl90ICgqY2FsY19oc196ZXJvKShzNjQgdGVtcDEsIHM2NCBtdWx0KTsKLQotCXZvaWQg KCpjYWxjX2hzX3RyYWlsKShzdHJ1Y3QgcGh5X2Nsa19wYXJhbXMgKmNsa19wYXJhbXMsCi0JCQlz dHJ1Y3QgcGh5X3RpbWluZ19kZXNjICpkZXNjKTsKLQotCXZvaWQgKCp1cGRhdGVfdGltaW5nX3Bh cmFtcykoc3RydWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyAqdGltaW5nLAotCQlzdHJ1Y3QgcGh5 X3RpbWluZ19kZXNjICpkZXNjKTsKLX07Ci0KLS8qIERTSSBQSFkgdGltaW5nIGZ1bmN0aW9ucyBm b3IgMTRubSAqLwotdm9pZCBkc2lfcGh5X2h3X3YyXzBfZ2V0X2RlZmF1bHRfcGh5X3BhcmFtcyhz dHJ1Y3QgcGh5X2Nsa19wYXJhbXMgKnBhcmFtcyk7Ci0KLWludDMyX3QgZHNpX3BoeV9od192Ml8w X2NhbGNfY2xrX3plcm8oczY0IHJlY190ZW1wMSwgczY0IG11bHQpOwotCi1pbnQzMl90IGRzaV9w aHlfaHdfdjJfMF9jYWxjX2Nsa190cmFpbF9yZWNfbWluKHM2NCB0ZW1wX211bCwKLQkJczY0IGZy YWMsIHM2NCBtdWx0KTsKLQotaW50MzJfdCBkc2lfcGh5X2h3X3YyXzBfY2FsY19jbGtfdHJhaWxf cmVjX21heChzNjQgdGVtcDEsIHM2NCBtdWx0KTsKLQotaW50MzJfdCBkc2lfcGh5X2h3X3YyXzBf Y2FsY19oc196ZXJvKHM2NCB0ZW1wMSwgczY0IG11bHQpOwotCi12b2lkIGRzaV9waHlfaHdfdjJf MF9jYWxjX2hzX3RyYWlsKHN0cnVjdCBwaHlfY2xrX3BhcmFtcyAqY2xrX3BhcmFtcywKLQkJc3Ry dWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYyk7Ci0KLXZvaWQgZHNpX3BoeV9od192Ml8wX3VwZGF0 ZV90aW1pbmdfcGFyYW1zKHN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnRpbWluZywKLQkJ c3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYyk7Ci0KLS8qIERTSSBQSFkgdGltaW5nIGZ1bmN0 aW9ucyBmb3IgMTBubSAqLwotdm9pZCBkc2lfcGh5X2h3X3YzXzBfZ2V0X2RlZmF1bHRfcGh5X3Bh cmFtcyhzdHJ1Y3QgcGh5X2Nsa19wYXJhbXMgKnBhcmFtcyk7Ci0KLWludDMyX3QgZHNpX3BoeV9o d192M18wX2NhbGNfY2xrX3plcm8oczY0IHJlY190ZW1wMSwgczY0IG11bHQpOwotCi1pbnQzMl90 IGRzaV9waHlfaHdfdjNfMF9jYWxjX2Nsa190cmFpbF9yZWNfbWluKHM2NCB0ZW1wX211bCwKLQkJ czY0IGZyYWMsIHM2NCBtdWx0KTsKLQotaW50MzJfdCBkc2lfcGh5X2h3X3YzXzBfY2FsY19jbGtf dHJhaWxfcmVjX21heChzNjQgdGVtcDEsIHM2NCBtdWx0KTsKLQotaW50MzJfdCBkc2lfcGh5X2h3 X3YzXzBfY2FsY19oc196ZXJvKHM2NCB0ZW1wMSwgczY0IG11bHQpOwotCi12b2lkIGRzaV9waHlf aHdfdjNfMF9jYWxjX2hzX3RyYWlsKHN0cnVjdCBwaHlfY2xrX3BhcmFtcyAqY2xrX3BhcmFtcywK LQkJc3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYyk7Ci0KLXZvaWQgZHNpX3BoeV9od192M18w X3VwZGF0ZV90aW1pbmdfcGFyYW1zKHN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnRpbWlu ZywKLQkJc3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYyk7Ci0KLSNlbmRpZiAvKiBfRFNJX1BI WV9USU1JTkdfQ0FMQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kt c3RhZ2luZy9kc2lfcGh5X3RpbWluZ192Ml8wLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1z dGFnaW5nL2RzaV9waHlfdGltaW5nX3YyXzAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggYTgxMzllMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5n L2RzaV9waHlfdGltaW5nX3YyXzAuYworKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0v KgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9u bHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KSAi ZHNpLXBoeS10aW1pbmc6IiBmbXQKLSNpbmNsdWRlICJkc2lfcGh5X3RpbWluZ19jYWxjLmgiCi0K LXZvaWQgZHNpX3BoeV9od192Ml8wX2dldF9kZWZhdWx0X3BoeV9wYXJhbXMoc3RydWN0IHBoeV9j bGtfcGFyYW1zICpwYXJhbXMpCi17Ci0JcGFyYW1zLT5jbGtfcHJlcF9idWYgPSA1MDsKLQlwYXJh bXMtPmNsa196ZXJvX2J1ZiA9IDI7Ci0JcGFyYW1zLT5jbGtfdHJhaWxfYnVmID0gMzA7Ci0JcGFy YW1zLT5oc19wcmVwX2J1ZiA9IDUwOwotCXBhcmFtcy0+aHNfemVyb19idWYgPSAxMDsKLQlwYXJh bXMtPmhzX3RyYWlsX2J1ZiA9IDMwOwotCXBhcmFtcy0+aHNfcnFzdF9idWYgPSAwOwotCXBhcmFt cy0+aHNfZXhpdF9idWYgPSAxMDsKLX0KLQotaW50MzJfdCBkc2lfcGh5X2h3X3YyXzBfY2FsY19j bGtfemVybyhzNjQgcmVjX3RlbXAxLCBzNjQgbXVsdCkKLXsKLQlzNjQgcmVjX3RlbXAyLCByZWNf dGVtcDM7Ci0KLQlyZWNfdGVtcDIgPSAocmVjX3RlbXAxIC0gKDExICogbXVsdCkpOwotCXJlY190 ZW1wMyA9IHJvdW5kdXAoZGl2X3M2NChyZWNfdGVtcDIsIDgpLCBtdWx0KTsKLQlyZXR1cm4gKGRp dl9zNjQocmVjX3RlbXAzLCBtdWx0KSAtIDMpOwotfQotCi1pbnQzMl90IGRzaV9waHlfaHdfdjJf MF9jYWxjX2Nsa190cmFpbF9yZWNfbWluKHM2NCB0ZW1wX211bCwKLQkJczY0IGZyYWMsIHM2NCBt dWx0KQotewotCXM2NCByZWNfdGVtcDEsIHJlY190ZW1wMiwgcmVjX3RlbXAzOwotCi0JcmVjX3Rl bXAxID0gdGVtcF9tdWwgKyBmcmFjICsgKDMgKiBtdWx0KTsKLQlyZWNfdGVtcDIgPSBkaXZfczY0 KHJlY190ZW1wMSwgOCk7Ci0JcmVjX3RlbXAzID0gcm91bmR1cChyZWNfdGVtcDIsIG11bHQpOwot Ci0JcmV0dXJuIGRpdl9zNjQocmVjX3RlbXAzLCBtdWx0KTsKLX0KLQotaW50MzJfdCBkc2lfcGh5 X2h3X3YyXzBfY2FsY19jbGtfdHJhaWxfcmVjX21heChzNjQgdGVtcDEsIHM2NCBtdWx0KQotewot CXM2NCByZWNfdGVtcDIsIHJlY190ZW1wMzsKLQotCXJlY190ZW1wMiA9IHRlbXAxICsgKDMgKiBt dWx0KTsKLQlyZWNfdGVtcDMgPSByZWNfdGVtcDIgLyA4OwotCXJldHVybiBkaXZfczY0KHJlY190 ZW1wMywgbXVsdCk7Ci0KLX0KLQotaW50MzJfdCBkc2lfcGh5X2h3X3YyXzBfY2FsY19oc196ZXJv KHM2NCB0ZW1wMSwgczY0IG11bHQpCi17Ci0JczY0IHJlY190ZW1wMiwgcmVjX3RlbXAzLCByZWNf bWluOwotCi0JcmVjX3RlbXAyID0gdGVtcDEgLSAoMTEgKiBtdWx0KTsKLQlyZWNfdGVtcDMgPSBy b3VuZHVwKChyZWNfdGVtcDIgLyA4KSwgbXVsdCk7Ci0JcmVjX21pbiA9IHJlY190ZW1wMyAtICgz ICogbXVsdCk7Ci0JcmV0dXJuIGRpdl9zNjQocmVjX21pbiwgbXVsdCk7Ci19Ci0KLXZvaWQgZHNp X3BoeV9od192Ml8wX2NhbGNfaHNfdHJhaWwoc3RydWN0IHBoeV9jbGtfcGFyYW1zICpjbGtfcGFy YW1zLAotCQkJc3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYykKLXsKLQlzNjQgcmVjX3RlbXAx OwotCXN0cnVjdCB0aW1pbmdfZW50cnkgKnQgPSAmZGVzYy0+aHNfdHJhaWw7Ci0KLQl0LT5yZWNf bWluID0gRElWX1JPVU5EX1VQKAotCQkoKHQtPm1pcGlfbWluICogY2xrX3BhcmFtcy0+Yml0Y2xr X21icHMpICsKLQkJICgzICogY2xrX3BhcmFtcy0+dGxweF9udW1lcl9ucykpLAotCQkoOCAqIGNs a19wYXJhbXMtPnRscHhfbnVtZXJfbnMpKTsKLQotCXJlY190ZW1wMSA9ICgodC0+bWlwaV9tYXgg KiBjbGtfcGFyYW1zLT5iaXRjbGtfbWJwcykgKwotCQkgICAgICgzICogY2xrX3BhcmFtcy0+dGxw eF9udW1lcl9ucykpOwotCXQtPnJlY19tYXggPSAocmVjX3RlbXAxIC8gKDggKiBjbGtfcGFyYW1z LT50bHB4X251bWVyX25zKSk7Ci19Ci0KLXZvaWQgZHNpX3BoeV9od192Ml8wX3VwZGF0ZV90aW1p bmdfcGFyYW1zKAotCXN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnRpbWluZywKLQlzdHJ1 Y3QgcGh5X3RpbWluZ19kZXNjICpkZXNjKQotewotCWludCBpID0gMDsKLQotCWZvciAoaSA9IERT SV9MT0dJQ0FMX0xBTkVfMDsgaSA8IERTSV9MQU5FX01BWDsgaSsrKSB7Ci0JCXRpbWluZy0+bGFu ZVtpXVswXSA9IGRlc2MtPmhzX2V4aXQucmVnX3ZhbHVlOwotCi0JCWlmIChpID09IERTSV9MT0dJ Q0FMX0NMT0NLX0xBTkUpCi0JCQl0aW1pbmctPmxhbmVbaV1bMV0gPSBkZXNjLT5jbGtfemVyby5y ZWdfdmFsdWU7Ci0JCWVsc2UKLQkJCXRpbWluZy0+bGFuZVtpXVsxXSA9IGRlc2MtPmhzX3plcm8u cmVnX3ZhbHVlOwotCi0JCWlmIChpID09IERTSV9MT0dJQ0FMX0NMT0NLX0xBTkUpCi0JCQl0aW1p bmctPmxhbmVbaV1bMl0gPSBkZXNjLT5jbGtfcHJlcGFyZS5yZWdfdmFsdWU7Ci0JCWVsc2UKLQkJ CXRpbWluZy0+bGFuZVtpXVsyXSA9IGRlc2MtPmhzX3ByZXBhcmUucmVnX3ZhbHVlOwotCi0JCWlm IChpID09IERTSV9MT0dJQ0FMX0NMT0NLX0xBTkUpCi0JCQl0aW1pbmctPmxhbmVbaV1bM10gPSBk ZXNjLT5jbGtfdHJhaWwucmVnX3ZhbHVlOwotCQllbHNlCi0JCQl0aW1pbmctPmxhbmVbaV1bM10g PSBkZXNjLT5oc190cmFpbC5yZWdfdmFsdWU7Ci0KLQkJaWYgKGkgPT0gRFNJX0xPR0lDQUxfQ0xP Q0tfTEFORSkKLQkJCXRpbWluZy0+bGFuZVtpXVs0XSA9IGRlc2MtPmhzX3Jxc3RfY2xrLnJlZ192 YWx1ZTsKLQkJZWxzZQotCQkJdGltaW5nLT5sYW5lW2ldWzRdID0gZGVzYy0+aHNfcnFzdC5yZWdf dmFsdWU7Ci0KLQkJdGltaW5nLT5sYW5lW2ldWzVdID0gMHgzOwotCQl0aW1pbmctPmxhbmVbaV1b Nl0gPSAweDQ7Ci0JCXRpbWluZy0+bGFuZVtpXVs3XSA9IDB4QTA7Ci0JCXByX2RlYnVnKCJbJWRd WyVkICVkICVkICVkICVkXVxuIiwgaSwgdGltaW5nLT5sYW5lW2ldWzBdLAotCQkJCQkJICAgIHRp bWluZy0+bGFuZVtpXVsxXSwKLQkJCQkJCSAgICB0aW1pbmctPmxhbmVbaV1bMl0sCi0JCQkJCQkg ICAgdGltaW5nLT5sYW5lW2ldWzNdLAotCQkJCQkJICAgIHRpbWluZy0+bGFuZVtpXVs0XSk7Ci0J fQotCXRpbWluZy0+Y291bnRfcGVyX2xhbmUgPSA4OwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfdGltaW5nX3YzXzAuYyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfdjNfMC5jCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAxZDZiM2NkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfdjNfMC5jCisrKyAvZGV2L251bGwKQEAg LTEsMTA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4 IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICog R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jZGVm aW5lIHByX2ZtdChmbXQpICJkc2ktcGh5LXRpbWluZzoiIGZtdAotI2luY2x1ZGUgImRzaV9waHlf dGltaW5nX2NhbGMuaCIKLQotdm9pZCBkc2lfcGh5X2h3X3YzXzBfZ2V0X2RlZmF1bHRfcGh5X3Bh cmFtcygKLQkJc3RydWN0IHBoeV9jbGtfcGFyYW1zICpwYXJhbXMpCi17Ci0JcGFyYW1zLT5jbGtf cHJlcF9idWYgPSAwOwotCXBhcmFtcy0+Y2xrX3plcm9fYnVmID0gMDsKLQlwYXJhbXMtPmNsa190 cmFpbF9idWYgPSAwOwotCXBhcmFtcy0+aHNfcHJlcF9idWYgPSAwOwotCXBhcmFtcy0+aHNfemVy b19idWYgPSAwOwotCXBhcmFtcy0+aHNfdHJhaWxfYnVmID0gMDsKLQlwYXJhbXMtPmhzX3Jxc3Rf YnVmID0gMDsKLQlwYXJhbXMtPmhzX2V4aXRfYnVmID0gMDsKLX0KLQotaW50MzJfdCBkc2lfcGh5 X2h3X3YzXzBfY2FsY19jbGtfemVybyhzNjQgcmVjX3RlbXAxLCBzNjQgbXVsdCkKLXsKLQlzNjQg cmVjX3RlbXAyLCByZWNfdGVtcDM7Ci0KLQlyZWNfdGVtcDIgPSAocmVjX3RlbXAxIC0gbXVsdCk7 Ci0JcmVjX3RlbXAzID0gcm91bmR1cChkaXZfczY0KHJlY190ZW1wMiwgOCksIG11bHQpOwotCXJl dHVybiAoZGl2X3M2NChyZWNfdGVtcDMsIG11bHQpIC0gMSk7Ci19Ci0KLWludDMyX3QgZHNpX3Bo eV9od192M18wX2NhbGNfY2xrX3RyYWlsX3JlY19taW4oczY0IHRlbXBfbXVsLAotCQlzNjQgZnJh YywgczY0IG11bHQpCi17Ci0JczY0IHJlY190ZW1wMSwgcmVjX3RlbXAyLCByZWNfdGVtcDM7Ci0K LQlyZWNfdGVtcDEgPSB0ZW1wX211bCArIGZyYWM7Ci0JcmVjX3RlbXAyID0gZGl2X3M2NChyZWNf dGVtcDEsIDgpOwotCXJlY190ZW1wMyA9IHJvdW5kdXAocmVjX3RlbXAyLCBtdWx0KTsKLQlyZXR1 cm4gKGRpdl9zNjQocmVjX3RlbXAzLCBtdWx0KSAtIDEpOwotfQotCi1pbnQzMl90IGRzaV9waHlf aHdfdjNfMF9jYWxjX2Nsa190cmFpbF9yZWNfbWF4KHM2NCB0ZW1wMSwgczY0IG11bHQpCi17Ci0J czY0IHJlY190ZW1wMjsKLQotCXJlY190ZW1wMiA9IHRlbXAxIC8gODsKLQlyZXR1cm4gKGRpdl9z NjQocmVjX3RlbXAyLCBtdWx0KSAtIDEpOwotfQotCi1pbnQzMl90IGRzaV9waHlfaHdfdjNfMF9j YWxjX2hzX3plcm8oczY0IHRlbXAxLCBzNjQgbXVsdCkKLXsKLQlzNjQgcmVjX3RlbXAyLCByZWNf bWluOwotCi0JcmVjX3RlbXAyID0gcm91bmR1cCgodGVtcDEgLyA4KSwgbXVsdCk7Ci0JcmVjX21p biA9IHJlY190ZW1wMiAtICgxICogbXVsdCk7Ci0JcmV0dXJuIGRpdl9zNjQocmVjX21pbiwgbXVs dCk7Ci19Ci0KLXZvaWQgZHNpX3BoeV9od192M18wX2NhbGNfaHNfdHJhaWwoc3RydWN0IHBoeV9j bGtfcGFyYW1zICpjbGtfcGFyYW1zLAotCQkJc3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYykK LXsKLQlzNjQgcmVjX3RlbXAxOwotCXN0cnVjdCB0aW1pbmdfZW50cnkgKnQgPSAmZGVzYy0+aHNf dHJhaWw7Ci0KLQl0LT5yZWNfbWluID0gRElWX1JPVU5EX1VQKAotCQkJKHQtPm1pcGlfbWluICog Y2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpLAotCQkJKDggKiBjbGtfcGFyYW1zLT50bHB4X251bWVy X25zKSkgLSAxOwotCi0JcmVjX3RlbXAxID0gKHQtPm1pcGlfbWF4ICogY2xrX3BhcmFtcy0+Yml0 Y2xrX21icHMpOwotCXQtPnJlY19tYXggPQotCQkgKGRpdl9zNjQocmVjX3RlbXAxLCAoOCAqIGNs a19wYXJhbXMtPnRscHhfbnVtZXJfbnMpKSkgLSAxOwotfQotCi12b2lkIGRzaV9waHlfaHdfdjNf MF91cGRhdGVfdGltaW5nX3BhcmFtcygKLQlzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzICp0 aW1pbmcsCi0Jc3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYykKLXsKLQl0aW1pbmctPmxhbmVf djNbMF0gPSAweDAwOwotCXRpbWluZy0+bGFuZV92M1sxXSA9IGRlc2MtPmNsa196ZXJvLnJlZ192 YWx1ZTsKLQl0aW1pbmctPmxhbmVfdjNbMl0gPSBkZXNjLT5jbGtfcHJlcGFyZS5yZWdfdmFsdWU7 Ci0JdGltaW5nLT5sYW5lX3YzWzNdID0gZGVzYy0+Y2xrX3RyYWlsLnJlZ192YWx1ZTsKLQl0aW1p bmctPmxhbmVfdjNbNF0gPSBkZXNjLT5oc19leGl0LnJlZ192YWx1ZTsKLQl0aW1pbmctPmxhbmVf djNbNV0gPSBkZXNjLT5oc196ZXJvLnJlZ192YWx1ZTsKLQl0aW1pbmctPmxhbmVfdjNbNl0gPSBk ZXNjLT5oc19wcmVwYXJlLnJlZ192YWx1ZTsKLQl0aW1pbmctPmxhbmVfdjNbN10gPSBkZXNjLT5o c190cmFpbC5yZWdfdmFsdWU7Ci0JdGltaW5nLT5sYW5lX3YzWzhdID0gZGVzYy0+aHNfcnFzdC5y ZWdfdmFsdWU7Ci0JdGltaW5nLT5sYW5lX3YzWzldID0gMHgwMzsKLQl0aW1pbmctPmxhbmVfdjNb MTBdID0gMHgwNDsKLQl0aW1pbmctPmxhbmVfdjNbMTFdID0gMHgwMDsKLQotCXByX2RlYnVnKCJb JWQgJWQgJWQgJWRdXG4iLCB0aW1pbmctPmxhbmVfdjNbMF0sCi0JCXRpbWluZy0+bGFuZV92M1sx XSwgdGltaW5nLT5sYW5lX3YzWzJdLCB0aW1pbmctPmxhbmVfdjNbM10pOwotCXByX2RlYnVnKCJb JWQgJWQgJWQgJWRdXG4iLCB0aW1pbmctPmxhbmVfdjNbNF0sCi0JCXRpbWluZy0+bGFuZV92M1s1 XSwgdGltaW5nLT5sYW5lX3YzWzZdLCB0aW1pbmctPmxhbmVfdjNbN10pOwotCXByX2RlYnVnKCJb JWQgJWQgJWQgJWRdXG4iLCB0aW1pbmctPmxhbmVfdjNbOF0sCi0JCXRpbWluZy0+bGFuZV92M1s5 XSwgdGltaW5nLT5sYW5lX3YzWzEwXSwgdGltaW5nLT5sYW5lX3YzWzExXSk7Ci0JdGltaW5nLT5j b3VudF9wZXJfbGFuZSA9IDEyOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2RzaS1zdGFnaW5nL2RzaV9wd3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcv ZHNpX3B3ci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTJlYjNmLi4wMDAwMDAw Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3B3ci5jCisrKyAvZGV2 L251bGwKQEAgLTEsMzY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwg VGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L29mLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4K LSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpbmNsdWRlICJkc2lfcHdyLmgiCi0KLS8qCi0g KiBkc2lfcHdyX3BhcnNlX3N1cHBseV9ub2RlKCkgLSBwYXJzZSBwb3dlciBzdXBwbHkgbm9kZSBm cm9tIHJvb3QgZGV2aWNlIG5vZGUKLSAqLwotc3RhdGljIGludCBkc2lfcHdyX3BhcnNlX3N1cHBs eV9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdCwKLQkJCQkgICAgIHN0cnVjdCBkc2lfcmVn dWxhdG9yX2luZm8gKnJlZ3MpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaSA9IDA7Ci0JdTMyIHRt cCA9IDA7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gTlVMTDsKLQotCWZvcl9lYWNoX2No aWxkX29mX25vZGUocm9vdCwgbm9kZSkgewotCQljb25zdCBjaGFyICpzdCA9IE5VTEw7Ci0KLQkJ cmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhub2RlLCAicWNvbSxzdXBwbHktbmFtZSIsICZz dCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gcmVhZCBuYW1lLCByYyA9ICVk XG4iLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJc25wcmludGYocmVncy0+dnJlZ3Nb aV0udnJlZ19uYW1lLAotCQkJIEFSUkFZX1NJWkUocmVncy0+dnJlZ3NbaV0udnJlZ19uYW1lKSwK LQkJCSAiJXMiLCBzdCk7Ci0KLQkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAicWNv bSxzdXBwbHktbWluLXZvbHRhZ2UiLAotCQkJCQkgICZ0bXApOwotCQlpZiAocmMpIHsKLQkJCXBy X2VycigiZmFpbGVkIHRvIHJlYWQgbWluIHZvbHRhZ2UsIHJjID0gJWRcbiIsIHJjKTsKLQkJCWdv dG8gZXJyb3I7Ci0JCX0KLQkJcmVncy0+dnJlZ3NbaV0ubWluX3ZvbHRhZ2UgPSB0bXA7Ci0KLQkJ cmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAicWNvbSxzdXBwbHktbWF4LXZvbHRhZ2Ui LAotCQkJCQkgICZ0bXApOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHJlYWQg bWF4IHZvbHRhZ2UsIHJjID0gJWRcbiIsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQkJcmVn cy0+dnJlZ3NbaV0ubWF4X3ZvbHRhZ2UgPSB0bXA7Ci0KLQkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFk X3UzMihub2RlLCAicWNvbSxzdXBwbHktZW5hYmxlLWxvYWQiLAotCQkJCQkgICZ0bXApOwotCQlp ZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHJlYWQgZW5hYmxlIGxvYWQsIHJjID0gJWRc biIsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQkJcmVncy0+dnJlZ3NbaV0uZW5hYmxlX2xv YWQgPSB0bXA7Ci0KLQkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAicWNvbSxzdXBw bHktZGlzYWJsZS1sb2FkIiwKLQkJCQkJICAmdG1wKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIo ImZhaWxlZCB0byByZWFkIGRpc2FibGUgbG9hZCwgcmMgPSAlZFxuIiwgcmMpOwotCQkJZ290byBl cnJvcjsKLQkJfQotCQlyZWdzLT52cmVnc1tpXS5kaXNhYmxlX2xvYWQgPSB0bXA7Ci0KLQkJLyog T3B0aW9uYWwgdmFsdWVzICovCi0JCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInFj b20sc3VwcGx5LXByZS1vbi1zbGVlcCIsCi0JCQkJCSAgJnRtcCk7Ci0JCWlmIChyYykgewotCQkJ cHJfZGVidWcoInByZS1vbi1zbGVlcCBub3Qgc3BlY2lmaWVkXG4iKTsKLQkJCXJjID0gMDsKLQkJ fSBlbHNlIHsKLQkJCXJlZ3MtPnZyZWdzW2ldLnByZV9vbl9zbGVlcCA9IHRtcDsKLQkJfQotCi0J CXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInFjb20sc3VwcGx5LXByZS1vZmYtc2xl ZXAiLAotCQkJCQkgICZ0bXApOwotCQlpZiAocmMpIHsKLQkJCXByX2RlYnVnKCJwcmUtb2ZmLXNs ZWVwIG5vdCBzcGVjaWZpZWRcbiIpOwotCQkJcmMgPSAwOwotCQl9IGVsc2UgewotCQkJcmVncy0+ dnJlZ3NbaV0ucHJlX29mZl9zbGVlcCA9IHRtcDsKLQkJfQotCi0JCXJjID0gb2ZfcHJvcGVydHlf cmVhZF91MzIobm9kZSwgInFjb20sc3VwcGx5LXBvc3Qtb24tc2xlZXAiLAotCQkJCQkgICZ0bXAp OwotCQlpZiAocmMpIHsKLQkJCXByX2RlYnVnKCJwb3N0LW9uLXNsZWVwIG5vdCBzcGVjaWZpZWRc biIpOwotCQkJcmMgPSAwOwotCQl9IGVsc2UgewotCQkJcmVncy0+dnJlZ3NbaV0ucG9zdF9vbl9z bGVlcCA9IHRtcDsKLQkJfQotCi0JCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInFj b20sc3VwcGx5LXBvc3Qtb2ZmLXNsZWVwIiwKLQkJCQkJICAmdG1wKTsKLQkJaWYgKHJjKSB7Ci0J CQlwcl9kZWJ1ZygicG9zdC1vZmYtc2xlZXAgbm90IHNwZWNpZmllZFxuIik7Ci0JCQlyYyA9IDA7 Ci0JCX0gZWxzZSB7Ci0JCQlyZWdzLT52cmVnc1tpXS5wb3N0X29mZl9zbGVlcCA9IHRtcDsKLQkJ fQotCi0JCSsraTsKLQkJcHJfZGVidWcoIlslc10gbWludj0lZCBtYXh2PSVkLCBlbl9sb2FkPSVk LCBkaXNfbG9hZD0lZFxuIiwKLQkJCSByZWdzLT52cmVnc1tpXS52cmVnX25hbWUsCi0JCQkgcmVn cy0+dnJlZ3NbaV0ubWluX3ZvbHRhZ2UsCi0JCQkgcmVncy0+dnJlZ3NbaV0ubWF4X3ZvbHRhZ2Us Ci0JCQkgcmVncy0+dnJlZ3NbaV0uZW5hYmxlX2xvYWQsCi0JCQkgcmVncy0+dnJlZ3NbaV0uZGlz YWJsZV9sb2FkKTsKLQl9Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lf cHdyX2VuYWJsZV92cmVncygpIC0gZW5hYmxlL2Rpc2FibGUgcmVndWxhdG9ycwotICovCi1zdGF0 aWMgaW50IGRzaV9wd3JfZW5hYmxlX3ZyZWdzKHN0cnVjdCBkc2lfcmVndWxhdG9yX2luZm8gKnJl Z3MsIGJvb2wgZW5hYmxlKQotewotCWludCByYyA9IDAsIGkgPSAwOwotCXN0cnVjdCBkc2lfdnJl ZyAqdnJlZzsKLQlpbnQgbnVtX29mX3YgPSAwOwotCi0JaWYgKGVuYWJsZSkgewotCQlmb3IgKGkg PSAwOyBpIDwgcmVncy0+Y291bnQ7IGkrKykgewotCQkJdnJlZyA9ICZyZWdzLT52cmVnc1tpXTsK LQkJCWlmICh2cmVnLT5wcmVfb25fc2xlZXApCi0JCQkJbXNsZWVwKHZyZWctPnByZV9vbl9zbGVl cCk7Ci0KLQkJCXJjID0gcmVndWxhdG9yX3NldF9sb2FkKHZyZWctPnZyZWcsCi0JCQkJCQl2cmVn LT5lbmFibGVfbG9hZCk7Ci0JCQlpZiAocmMgPCAwKSB7Ci0JCQkJcHJfZXJyKCJTZXR0aW5nIG9w dGltdW0gbW9kZSBmYWlsZWQgZm9yICVzXG4iLAotCQkJCSAgICAgICB2cmVnLT52cmVnX25hbWUp OwotCQkJCWdvdG8gZXJyb3I7Ci0JCQl9Ci0JCQludW1fb2ZfdiA9IHJlZ3VsYXRvcl9jb3VudF92 b2x0YWdlcyh2cmVnLT52cmVnKTsKLQkJCWlmIChudW1fb2ZfdiA+IDApIHsKLQkJCQlyYyA9IHJl Z3VsYXRvcl9zZXRfdm9sdGFnZSh2cmVnLT52cmVnLAotCQkJCQkJCSAgIHZyZWctPm1pbl92b2x0 YWdlLAotCQkJCQkJCSAgIHZyZWctPm1heF92b2x0YWdlKTsKLQkJCQlpZiAocmMpIHsKLQkJCQkJ cHJfZXJyKCJTZXQgdm9sdGFnZSglcykgZmFpbCwgcmM9JWRcbiIsCi0JCQkJCQkgdnJlZy0+dnJl Z19uYW1lLCByYyk7Ci0JCQkJCWdvdG8gZXJyb3JfZGlzYWJsZV9vcHRfbW9kZTsKLQkJCQl9Ci0J CQl9Ci0KLQkJCXJjID0gcmVndWxhdG9yX2VuYWJsZSh2cmVnLT52cmVnKTsKLQkJCWlmIChyYykg ewotCQkJCXByX2VycigiZW5hYmxlIGZhaWxlZCBmb3IgJXMsIHJjPSVkXG4iLAotCQkJCSAgICAg ICB2cmVnLT52cmVnX25hbWUsIHJjKTsKLQkJCQlnb3RvIGVycm9yX2Rpc2FibGVfdm9sdGFnZTsK LQkJCX0KLQotCQkJaWYgKHZyZWctPnBvc3Rfb25fc2xlZXApCi0JCQkJbXNsZWVwKHZyZWctPnBv c3Rfb25fc2xlZXApOwotCQl9Ci0JfSBlbHNlIHsKLQkJZm9yIChpID0gKHJlZ3MtPmNvdW50IC0g MSk7IGkgPj0gMDsgaS0tKSB7Ci0JCQlpZiAocmVncy0+dnJlZ3NbaV0ucHJlX29mZl9zbGVlcCkK LQkJCQltc2xlZXAocmVncy0+dnJlZ3NbaV0ucHJlX29mZl9zbGVlcCk7Ci0KLQkJCSh2b2lkKXJl Z3VsYXRvcl9zZXRfbG9hZChyZWdzLT52cmVnc1tpXS52cmVnLAotCQkJCQkJcmVncy0+dnJlZ3Nb aV0uZGlzYWJsZV9sb2FkKTsKLQkJCSh2b2lkKXJlZ3VsYXRvcl9kaXNhYmxlKHJlZ3MtPnZyZWdz W2ldLnZyZWcpOwotCi0JCQlpZiAocmVncy0+dnJlZ3NbaV0ucG9zdF9vZmZfc2xlZXApCi0JCQkJ bXNsZWVwKHJlZ3MtPnZyZWdzW2ldLnBvc3Rfb2ZmX3NsZWVwKTsKLQkJfQotCX0KLQotCXJldHVy biAwOwotZXJyb3JfZGlzYWJsZV9vcHRfbW9kZToKLQkodm9pZClyZWd1bGF0b3Jfc2V0X2xvYWQo cmVncy0+dnJlZ3NbaV0udnJlZywKLQkJCQkgcmVncy0+dnJlZ3NbaV0uZGlzYWJsZV9sb2FkKTsK LQotZXJyb3JfZGlzYWJsZV92b2x0YWdlOgotCWlmIChudW1fb2ZfdiA+IDApCi0JCSh2b2lkKXJl Z3VsYXRvcl9zZXRfdm9sdGFnZShyZWdzLT52cmVnc1tpXS52cmVnLAotCQkJCQkgICAgMCwgcmVn cy0+dnJlZ3NbaV0ubWF4X3ZvbHRhZ2UpOwotZXJyb3I6Ci0JZm9yIChpLS07IGkgPj0gMDsgaS0t KSB7Ci0JCWlmIChyZWdzLT52cmVnc1tpXS5wcmVfb2ZmX3NsZWVwKQotCQkJbXNsZWVwKHJlZ3Mt PnZyZWdzW2ldLnByZV9vZmZfc2xlZXApOwotCi0JCSh2b2lkKXJlZ3VsYXRvcl9zZXRfbG9hZChy ZWdzLT52cmVnc1tpXS52cmVnLAotCQkJCQkgcmVncy0+dnJlZ3NbaV0uZGlzYWJsZV9sb2FkKTsK LQotCQludW1fb2ZfdiA9IHJlZ3VsYXRvcl9jb3VudF92b2x0YWdlcyhyZWdzLT52cmVnc1tpXS52 cmVnKTsKLQkJaWYgKG51bV9vZl92ID4gMCkKLQkJCSh2b2lkKXJlZ3VsYXRvcl9zZXRfdm9sdGFn ZShyZWdzLT52cmVnc1tpXS52cmVnLAotCQkJCQkgICAgMCwgcmVncy0+dnJlZ3NbaV0ubWF4X3Zv bHRhZ2UpOwotCi0JCSh2b2lkKXJlZ3VsYXRvcl9kaXNhYmxlKHJlZ3MtPnZyZWdzW2ldLnZyZWcp OwotCi0JCWlmIChyZWdzLT52cmVnc1tpXS5wb3N0X29mZl9zbGVlcCkKLQkJCW1zbGVlcChyZWdz LT52cmVnc1tpXS5wb3N0X29mZl9zbGVlcCk7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi0vKioK LSAqIGRzaV9wd3Jfb2ZfZ2V0X3ZyZWdfZGF0YSAtIFBhcnNlIHJlZ3VsYXRvciBzdXBwbHkgaW5m b3JtYXRpb24KLSAqIEBvZl9ub2RlOiAgICAgICAgRGV2aWNlIG9mIG5vZGUgdG8gcGFyc2UgZm9y IHN1cHBseSBpbmZvcm1hdGlvbi4KLSAqIEByZWdzOiAgICAgICAgICAgUG9pbnRlciB3aGVyZSBy ZWd1bGF0b3IgaW5mb3JtYXRpb24gd2lsbCBiZSBjb3BpZWQgdG8uCi0gKiBAc3VwcGx5X25hbWU6 ICAgIE5hbWUgb2YgdGhlIHN1cHBseSBub2RlLgotICoKLSAqIHJldHVybjogZXJyb3IgY29kZSBp biBjYXNlIG9mIGZhaWx1cmUgb3IgMCBmb3Igc3VjY2Vzcy4KLSAqLwotaW50IGRzaV9wd3Jfb2Zf Z2V0X3ZyZWdfZGF0YShzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUsCi0JCQkJIHN0cnVjdCBk c2lfcmVndWxhdG9yX2luZm8gKnJlZ3MsCi0JCQkJIGNoYXIgKnN1cHBseV9uYW1lKQotewotCWlu dCByYyA9IDA7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpzdXBwbHlfcm9vdF9ub2RlID0gTlVMTDsK LQotCWlmICghb2Zfbm9kZSB8fCAhcmVncykgewotCQlwcl9lcnIoIkJhZCBwYXJhbXNcbiIpOwot CQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZWdzLT5jb3VudCA9IDA7Ci0Jc3VwcGx5X3Jvb3Rf bm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG9mX25vZGUsIHN1cHBseV9uYW1lKTsKLQlpZiAo IXN1cHBseV9yb290X25vZGUpIHsKLQkJc3VwcGx5X3Jvb3Rfbm9kZSA9IG9mX3BhcnNlX3BoYW5k bGUob2Zfbm9kZSwgc3VwcGx5X25hbWUsIDApOwotCQlpZiAoIXN1cHBseV9yb290X25vZGUpIHsK LQkJCXByX2RlYnVnKCJObyBzdXBwbHkgZW50cnkgcHJlc2VudCBmb3IgJXNcbiIsCi0JCQkJCXN1 cHBseV9uYW1lKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0JcmVncy0+Y291bnQg PSBvZl9nZXRfYXZhaWxhYmxlX2NoaWxkX2NvdW50KHN1cHBseV9yb290X25vZGUpOwotCWlmIChy ZWdzLT5jb3VudCA9PSAwKSB7Ci0JCXByX2VycigiTm8gdnJlZ3MgZGVmaW5lZCBmb3IgJXNcbiIs IHN1cHBseV9uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmVncy0+dnJlZ3MgPSBr Y2FsbG9jKHJlZ3MtPmNvdW50LCBzaXplb2YoKnJlZ3MtPnZyZWdzKSwgR0ZQX0tFUk5FTCk7Ci0J aWYgKCFyZWdzLT52cmVncykgewotCQlyZWdzLT5jb3VudCA9IDA7Ci0JCXJldHVybiAtRU5PTUVN OwotCX0KLQotCXJjID0gZHNpX3B3cl9wYXJzZV9zdXBwbHlfbm9kZShzdXBwbHlfcm9vdF9ub2Rl LCByZWdzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2Ugc3VwcGx5IG5v ZGUgZm9yICVzLCByYyA9ICVkXG4iLAotCQkJc3VwcGx5X25hbWUsIHJjKTsKLQotCQlrZnJlZShy ZWdzLT52cmVncyk7Ci0JCXJlZ3MtPnZyZWdzID0gTlVMTDsKLQkJcmVncy0+Y291bnQgPSAwOwot CX0KLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfcHdyX2dldF9kdF92cmVnX2RhdGEg LSBwYXJzZSByZWd1bGF0b3Igc3VwcGx5IGluZm9ybWF0aW9uCi0gKiBAZGV2OiAgICAgICAgICAg IERldmljZSB3aG9zZSBvZl9ub2RlIG5lZWRzIHRvIGJlIHBhcnNlZC4KLSAqIEByZWdzOiAgICAg ICAgICAgUG9pbnRlciB3aGVyZSByZWd1bGF0b3IgaW5mb3JtYXRpb24gd2lsbCBiZSBjb3BpZWQg dG8uCi0gKiBAc3VwcGx5X25hbWU6ICAgIE5hbWUgb2YgdGhlIHN1cHBseSBub2RlLgotICoKLSAq IHJldHVybjogZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUgb3IgMCBmb3Igc3VjY2Vzcy4K LSAqLwotaW50IGRzaV9wd3JfZ2V0X2R0X3ZyZWdfZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0J CQkJIHN0cnVjdCBkc2lfcmVndWxhdG9yX2luZm8gKnJlZ3MsCi0JCQkJIGNoYXIgKnN1cHBseV9u YW1lKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlID0gTlVM TDsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnN1cHBseV9ub2RlID0gTlVMTDsKLQlzdHJ1Y3QgZGV2 aWNlX25vZGUgKnN1cHBseV9yb290X25vZGUgPSBOVUxMOwotCi0JaWYgKCFkZXYgfHwgIXJlZ3Mp IHsKLQkJcHJfZXJyKCJCYWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0J b2Zfbm9kZSA9IGRldi0+b2Zfbm9kZTsKLQlyZWdzLT5jb3VudCA9IDA7Ci0Jc3VwcGx5X3Jvb3Rf bm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG9mX25vZGUsIHN1cHBseV9uYW1lKTsKLQlpZiAo IXN1cHBseV9yb290X25vZGUpIHsKLQkJc3VwcGx5X3Jvb3Rfbm9kZSA9IG9mX3BhcnNlX3BoYW5k bGUob2Zfbm9kZSwgc3VwcGx5X25hbWUsIDApOwotCQlpZiAoIXN1cHBseV9yb290X25vZGUpIHsK LQkJCXByX2RlYnVnKCJObyBzdXBwbHkgZW50cnkgcHJlc2VudCBmb3IgJXNcbiIsCi0JCQkJCXN1 cHBseV9uYW1lKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0JZm9yX2VhY2hfY2hp bGRfb2Zfbm9kZShzdXBwbHlfcm9vdF9ub2RlLCBzdXBwbHlfbm9kZSkKLQkJcmVncy0+Y291bnQr KzsKLQotCWlmIChyZWdzLT5jb3VudCA9PSAwKSB7Ci0JCXByX2VycigiTm8gdnJlZ3MgZGVmaW5l ZCBmb3IgJXNcbiIsIHN1cHBseV9uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmVn cy0+dnJlZ3MgPSBkZXZtX2tjYWxsb2MoZGV2LCByZWdzLT5jb3VudCwgc2l6ZW9mKCpyZWdzLT52 cmVncyksCi0JCQkJICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyZWdzLT52cmVncykgewotCQlyZWdz LT5jb3VudCA9IDA7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJjID0gZHNpX3B3cl9wYXJz ZV9zdXBwbHlfbm9kZShzdXBwbHlfcm9vdF9ub2RlLCByZWdzKTsKLQlpZiAocmMpIHsKLQkJcHJf ZXJyKCJmYWlsZWQgdG8gcGFyc2Ugc3VwcGx5IG5vZGUgZm9yICVzLCByYyA9ICVkXG4iLAotCQkg ICAgICAgc3VwcGx5X25hbWUsIHJjKTsKLQkJZGV2bV9rZnJlZShkZXYsIHJlZ3MtPnZyZWdzKTsK LQkJcmVncy0+dnJlZ3MgPSBOVUxMOwotCQlyZWdzLT5jb3VudCA9IDA7Ci0JfQotCi0JcmV0dXJu IHJjOwotfQotCi0vKioKLSAqIGRzaV9wd3JfZW5hYmxlX3JlZ3VsYXRvcigpIC0gZW5hYmxlIGEg c2V0IG9mIHJlZ3VsYXRvcnMKLSAqIEByZWdzOiAgICAgICBQb2ludGVyIHRvIHNldCBvZiByZWd1 bGF0b3JzIHRvIGVuYWJsZSBvciBkaXNhYmxlLgotICogQGVuYWJsZTogICAgIEVuYWJsZS9EaXNh YmxlIHJlZ3VsYXRvcnMuCi0gKgotICogcmV0dXJuOiBlcnJvciBjb2RlIGluIGNhc2Ugb2YgZmFp bHVyZSBvciAwIGZvciBzdWNjZXNzLgotICovCi1pbnQgZHNpX3B3cl9lbmFibGVfcmVndWxhdG9y KHN0cnVjdCBkc2lfcmVndWxhdG9yX2luZm8gKnJlZ3MsIGJvb2wgZW5hYmxlKQotewotCWludCBy YyA9IDA7Ci0KLQlpZiAoZW5hYmxlKSB7Ci0JCWlmIChyZWdzLT5yZWZjb3VudCA9PSAwKSB7Ci0J CQlyYyA9IGRzaV9wd3JfZW5hYmxlX3ZyZWdzKHJlZ3MsIHRydWUpOwotCQkJaWYgKHJjKQotCQkJ CXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSByZWd1bGF0b3JzXG4iKTsKLQkJfQotCQlyZWdzLT5y ZWZjb3VudCsrOwotCX0gZWxzZSB7Ci0JCWlmIChyZWdzLT5yZWZjb3VudCA9PSAwKSB7Ci0JCQlw cl9lcnIoIlVuYmFsYW5jZWQgcmVndWxhdG9yIG9mZlxuIik7Ci0JCX0gZWxzZSB7Ci0JCQlyZWdz LT5yZWZjb3VudC0tOwotCQkJaWYgKHJlZ3MtPnJlZmNvdW50ID09IDApIHsKLQkJCQlyYyA9IGRz aV9wd3JfZW5hYmxlX3ZyZWdzKHJlZ3MsIGZhbHNlKTsKLQkJCQlpZiAocmMpCi0JCQkJCXByX2Vy cigiZmFpbGVkIHRvIGRpc2FibGUgdnJlZ3NcbiIpOwotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJu IHJjOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lf cHdyLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9wd3IuaApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVlNWM2Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9wd3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDkzICsw LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFu ZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2lmbmRlZiBf RFNJX1BXUl9IXwotI2RlZmluZSBfRFNJX1BXUl9IXwotCi0jaW5jbHVkZSA8bGludXgvZGV2aWNl Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgv dHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KLQotLyoqCi0g KiBzdHJ1Y3QgZHNpX3ZyZWcgLSByZWd1bGF0b3IgaW5mb3JtYXRpb24gZm9yIERTSSByZWd1bGF0 b3JzCi0gKiBAdnJlZzogICAgICAgICAgICBIYW5kbGUgdG8gdGhlIHJlZ3VsYXRvci4KLSAqIEB2 cmVnX25hbWU6ICAgICAgIFJlZ3VsYXRvciBuYW1lLgotICogQG1pbl92b2x0YWdlOiAgICAgTWlu aW11bSB2b2x0YWdlIGluIHVWLgotICogQG1heF92b2x0YWdlOiAgICAgTWF4aW11bSB2b2x0YWdl IGluIHVWLgotICogQGVuYWJsZV9sb2FkOiAgICAgTG9hZCwgaW4gdUEsIHdoZW4gZW5hYmxlZC4K LSAqIEBkaXNhYmxlX2xvYWQ6ICAgIExvYWQsIGluIHVBLCB3aGVuIGRpc2FibGVkLgotICogQHBy ZV9vbl9zbGVlcDogICAgU2xlZXAsIGluIG1zLCBiZWZvcmUgZW5hYmxpbmcgdGhlIHJlZ3VsYXRv ci4KLSAqIEBwb3N0X29uX3NsZWVwOiAgIFNsZWVwLCBpbiBtcywgYWZ0ZXIgZW5hYmxpbmcgdGhl IHJlZ3VsYXRvci4KLSAqIEBwcmVfb2ZmX3NsZWVwOiAgIFNsZWVwLCBpbiBtcywgYmVmb3JlIGRp c2FibGluZyB0aGUgcmVndWxhdG9yLgotICogQHBvc3Rfb2ZmX3NsZWVwOiAgU2xlZXAsIGluIG1z LCBhZnRlciBkaXNhYmxpbmcgdGhlIHJlZ3VsYXRvci4KLSAqLwotc3RydWN0IGRzaV92cmVnIHsK LQlzdHJ1Y3QgcmVndWxhdG9yICp2cmVnOwotCWNoYXIgdnJlZ19uYW1lWzMyXTsKLQl1MzIgbWlu X3ZvbHRhZ2U7Ci0JdTMyIG1heF92b2x0YWdlOwotCXUzMiBlbmFibGVfbG9hZDsKLQl1MzIgZGlz YWJsZV9sb2FkOwotCXUzMiBwcmVfb25fc2xlZXA7Ci0JdTMyIHBvc3Rfb25fc2xlZXA7Ci0JdTMy IHByZV9vZmZfc2xlZXA7Ci0JdTMyIHBvc3Rfb2ZmX3NsZWVwOwotfTsKLQotLyoqCi0gKiBzdHJ1 Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvIC0gc2V0IG9mIHZyZWdzIHRoYXQgYXJlIHR1cm5lZCBvbi9v ZmYgdG9nZXRoZXIuCi0gKiBAdnJlZ3M6ICAgICAgIEFycmF5IG9mIGRzaV92cmVnIHN0cnVjdHVy ZXMuCi0gKiBAY291bnQ6ICAgICAgIE51bWJlciBvZiB2cmVncy4KLSAqIEByZWZjb3VudDogICAg UmVmZXJlbmNlIGNvdW50aW5nIGZvciBlbmFibGluZy4KLSAqLwotc3RydWN0IGRzaV9yZWd1bGF0 b3JfaW5mbyB7Ci0Jc3RydWN0IGRzaV92cmVnICp2cmVnczsKLQl1MzIgY291bnQ7Ci0JdTMyIHJl ZmNvdW50OwotfTsKLQotLyoqCi0gKiBkc2lfcHdyX29mX2dldF92cmVnX2RhdGEgLSBwYXJzZSBy ZWd1bGF0b3Igc3VwcGx5IGluZm9ybWF0aW9uCi0gKiBAb2Zfbm9kZTogICAgICAgIERldmljZSBv ZiBub2RlIHRvIHBhcnNlIGZvciBzdXBwbHkgaW5mb3JtYXRpb24uCi0gKiBAcmVnczogICAgICAg ICAgIFBvaW50ZXIgd2hlcmUgcmVndWxhdG9yIGluZm9ybWF0aW9uIHdpbGwgYmUgY29waWVkIHRv LgotICogQHN1cHBseV9uYW1lOiAgICBOYW1lIG9mIHRoZSBzdXBwbHkgbm9kZS4KLSAqCi0gKiBy ZXR1cm46IGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlIG9yIDAgZm9yIHN1Y2Nlc3MuCi0g Ki8KLWludCBkc2lfcHdyX29mX2dldF92cmVnX2RhdGEoc3RydWN0IGRldmljZV9ub2RlICpvZl9u b2RlLAotCQkJCSBzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvICpyZWdzLAotCQkJCSBjaGFyICpz dXBwbHlfbmFtZSk7Ci0KLS8qKgotICogZHNpX3B3cl9nZXRfZHRfdnJlZ19kYXRhIC0gcGFyc2Ug cmVndWxhdG9yIHN1cHBseSBpbmZvcm1hdGlvbgotICogQGRldjogICAgICAgICAgICBEZXZpY2Ug d2hvc2Ugb2Zfbm9kZSBuZWVkcyB0byBiZSBwYXJzZWQuCi0gKiBAcmVnczogICAgICAgICAgIFBv aW50ZXIgd2hlcmUgcmVndWxhdG9yIGluZm9ybWF0aW9uIHdpbGwgYmUgY29waWVkIHRvLgotICog QHN1cHBseV9uYW1lOiAgICBOYW1lIG9mIHRoZSBzdXBwbHkgbm9kZS4KLSAqCi0gKiByZXR1cm46 IGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlIG9yIDAgZm9yIHN1Y2Nlc3MuCi0gKi8KLWlu dCBkc2lfcHdyX2dldF9kdF92cmVnX2RhdGEoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSBzdHJ1 Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvICpyZWdzLAotCQkJCSBjaGFyICpzdXBwbHlfbmFtZSk7Ci0K LS8qKgotICogZHNpX3B3cl9lbmFibGVfcmVndWxhdG9yKCkgLSBlbmFibGUgYSBzZXQgb2YgcmVn dWxhdG9ycwotICogQHJlZ3M6ICAgICAgIFBvaW50ZXIgdG8gc2V0IG9mIHJlZ3VsYXRvcnMgdG8g ZW5hYmxlIG9yIGRpc2FibGUuCi0gKiBAZW5hYmxlOiAgICAgRW5hYmxlL0Rpc2FibGUgcmVndWxh dG9ycy4KLSAqCi0gKiByZXR1cm46IGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlIG9yIDAg Zm9yIHN1Y2Nlc3MuCi0gKi8KLWludCBkc2lfcHdyX2VuYWJsZV9yZWd1bGF0b3Ioc3RydWN0IGRz aV9yZWd1bGF0b3JfaW5mbyAqcmVncywgYm9vbCBlbmFibGUpOwotI2VuZGlmIC8qIF9EU0lfUFdS X0hfICovCi0tIApUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1i ZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3Jh dGl2ZSBQcm9qZWN0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJl bm8K