From mboxrd@z Thu Jan 1 00:00:00 1970 From: Subject: [PATCH 10/26] drm/amd/display: move clk_mgr files to right place Date: Mon, 27 May 2019 15:50:49 -0400 Message-ID: <1558986665-12964-11-git-send-email-sunpeng.li@amd.com> References: <1558986665-12964-1-git-send-email-sunpeng.li@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1558986665-12964-1-git-send-email-sunpeng.li-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Eric Yang RnJvbTogRXJpYyBZYW5nIDxFcmljLllhbmcyQGFtZC5jb20+CgpbV2h5XQpCZXR0ZXIgb3JnYW5p emF0aW9uCgpbSG93XQpNb3ZlIGNsa19tZ3IgZmlsZXMgdW5kZXIgZGMvY2xrX21ncgoKU2lnbmVk LW9mZi1ieTogRXJpYyBZYW5nIDxFcmljLllhbmcyQGFtZC5jb20+ClJldmlld2VkLWJ5OiBZb25n cWlhbmcgU3VuIDx5b25ncWlhbmcuc3VuQGFtZC5jb20+CkFja2VkLWJ5OiBMZW8gTGkgPHN1bnBl bmcubGlAYW1kLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvTWFrZWZpbGUg ICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvTWFr ZWZpbGUgICAgICAgICAgICB8ICAgMiArLQogZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2Rj L2Nsa19tZ3IvTWFrZWZpbGUgICAgfCAgNzUgKysrKwogZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNw bGF5L2RjL2Nsa19tZ3IvY2xrX21nci5jICAgfCAxMTMgKysrKysKIC4uLi9hbWQvZGlzcGxheS9k Yy9jbGtfbWdyL2RjZTEwMC9kY2VfY2xrX21nci5jICAgIHwgNDcxICsrKysrKysrKysrKysrKysr KysrKwogLi4uL2FtZC9kaXNwbGF5L2RjL2Nsa19tZ3IvZGNlMTAwL2RjZV9jbGtfbWdyLmggICAg fCAgODEgKysrKwogLi4uL2FtZC9kaXNwbGF5L2RjL2Nsa19tZ3IvZGNlMTEwL2RjZTExMF9jbGtf bWdyLmMgfCAyNzYgKysrKysrKysrKysrCiAuLi4vYW1kL2Rpc3BsYXkvZGMvY2xrX21nci9kY2Ux MTAvZGNlMTEwX2Nsa19tZ3IuaCB8ICA0NCArKwogLi4uL2FtZC9kaXNwbGF5L2RjL2Nsa19tZ3Iv ZGNlMTEyL2RjZTExMl9jbGtfbWdyLmMgfCAyMzkgKysrKysrKysrKysKIC4uLi9hbWQvZGlzcGxh eS9kYy9jbGtfbWdyL2RjZTExMi9kY2UxMTJfY2xrX21nci5oIHwgIDM5ICsrCiAuLi4vYW1kL2Rp c3BsYXkvZGMvY2xrX21nci9kY2UxMjAvZGNlMTIwX2Nsa19tZ3IuYyB8IDE0NSArKysrKysrCiAu Li4vYW1kL2Rpc3BsYXkvZGMvY2xrX21nci9kY2UxMjAvZGNlMTIwX2Nsa19tZ3IuaCB8ICAzNCAr KwogLi4uL2RybS9hbWQvZGlzcGxheS9kYy9jbGtfbWdyL2RjbjEwL3J2MV9jbGtfbWdyLmMgfCAy ODUgKysrKysrKysrKysrKwogLi4uL2RybS9hbWQvZGlzcGxheS9kYy9jbGtfbWdyL2RjbjEwL3J2 MV9jbGtfbWdyLmggfCAgMzEgKysKIC4uLi9hbWQvZGlzcGxheS9kYy9jbGtfbWdyL2RjbjEwL3J2 MV9jbGtfbWdyX2Nsay5jIHwgIDc5ICsrKysKIC4uLi9hbWQvZGlzcGxheS9kYy9jbGtfbWdyL2Rj bjEwL3J2MV9jbGtfbWdyX2Nsay5oIHwgIDI5ICsrCiAuLi4vZGMvY2xrX21nci9kY24xMC9ydjFf Y2xrX21ncl92Ymlvc19zbXUuYyAgICAgICB8IDEyNCArKysrKysKIC4uLi9kYy9jbGtfbWdyL2Rj bjEwL3J2MV9jbGtfbWdyX3ZiaW9zX3NtdS5oICAgICAgIHwgIDMyICsrCiAuLi4vZHJtL2FtZC9k aXNwbGF5L2RjL2Nsa19tZ3IvZGNuMTAvcnYyX2Nsa19tZ3IuYyB8ICA0MyArKwogLi4uL2RybS9h bWQvZGlzcGxheS9kYy9jbGtfbWdyL2RjbjEwL3J2Ml9jbGtfbWdyLmggfCAgMzIgKysKIGRyaXZl cnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2UvTWFrZWZpbGUgICAgICAgIHwgICAyICstCiAu Li4vZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2UvZGNlMTEwX2Nsa19tZ3IuYyAgICB8IDI3NiAt LS0tLS0tLS0tLS0KIC4uLi9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjZS9kY2UxMTBfY2xrX21n ci5oICAgIHwgIDQ0IC0tCiAuLi4vZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2UvZGNlMTEyX2Ns a19tZ3IuYyAgICB8IDIzOSAtLS0tLS0tLS0tLQogLi4uL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMv ZGNlL2RjZTExMl9jbGtfbWdyLmggICAgfCAgMzkgLS0KIC4uLi9ncHUvZHJtL2FtZC9kaXNwbGF5 L2RjL2RjZS9kY2UxMjBfY2xrX21nci5jICAgIHwgMTQ1IC0tLS0tLS0KIC4uLi9ncHUvZHJtL2Ft ZC9kaXNwbGF5L2RjL2RjZS9kY2UxMjBfY2xrX21nci5oICAgIHwgIDM0IC0tCiBkcml2ZXJzL2dw dS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNlL2RjZV9jbGtfbWdyLmMgICB8IDQ2MiAtLS0tLS0tLS0t LS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjZS9kY2VfY2xrX21n ci5oICAgfCAgODEgLS0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjbjEwL01h a2VmaWxlICAgICAgfCAgIDEgLQogZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjbjEw L2Nsa19tZ3IuYyAgICAgfCAxMTIgLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9k Yy9kY24xMC9ydjFfY2xrX21nci5jIHwgMjg1IC0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2Ry bS9hbWQvZGlzcGxheS9kYy9kY24xMC9ydjFfY2xrX21nci5oIHwgIDMxIC0tCiAuLi4vZ3B1L2Ry bS9hbWQvZGlzcGxheS9kYy9kY24xMC9ydjFfY2xrX21ncl9jbGsuYyB8ICA3OSAtLS0tCiAuLi4v Z3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY24xMC9ydjFfY2xrX21ncl9jbGsuaCB8ICAyOSAtLQog Li4uL2FtZC9kaXNwbGF5L2RjL2RjbjEwL3J2MV9jbGtfbWdyX3ZiaW9zX3NtdS5jICAgfCAxMjQg LS0tLS0tCiAuLi4vYW1kL2Rpc3BsYXkvZGMvZGNuMTAvcnYxX2Nsa19tZ3JfdmJpb3Nfc211Lmgg ICB8ICAzMiAtLQogZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjbjEwL3J2Ml9jbGtf bWdyLmMgfCAgNDMgLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY24xMC9ydjJf Y2xrX21nci5oIHwgIDMyIC0tCiAzOSBmaWxlcyBjaGFuZ2VkLCAyMTc1IGluc2VydGlvbnMoKyks IDIwOTAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2Ft ZC9kaXNwbGF5L2RjL2Nsa19tZ3IvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY2xrX21nci9jbGtfbWdyLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY2xrX21nci9kY2UxMDAvZGNlX2Ns a19tZ3IuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9k Yy9jbGtfbWdyL2RjZTEwMC9kY2VfY2xrX21nci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Nsa19tZ3IvZGNlMTEwL2RjZTExMF9jbGtfbWdyLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY2xrX21n ci9kY2UxMTAvZGNlMTEwX2Nsa19tZ3IuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9hbWQvZGlzcGxheS9kYy9jbGtfbWdyL2RjZTExMi9kY2UxMTJfY2xrX21nci5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Nsa19tZ3IvZGNl MTEyL2RjZTExMl9jbGtfbWdyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v YW1kL2Rpc3BsYXkvZGMvY2xrX21nci9kY2UxMjAvZGNlMTIwX2Nsa19tZ3IuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9jbGtfbWdyL2RjZTEyMC9k Y2UxMjBfY2xrX21nci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9k aXNwbGF5L2RjL2Nsa19tZ3IvZGNuMTAvcnYxX2Nsa19tZ3IuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9jbGtfbWdyL2RjbjEwL3J2MV9jbGtfbWdy LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY2xr X21nci9kY24xMC9ydjFfY2xrX21ncl9jbGsuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9hbWQvZGlzcGxheS9kYy9jbGtfbWdyL2RjbjEwL3J2MV9jbGtfbWdyX2Nsay5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Nsa19tZ3Iv ZGNuMTAvcnYxX2Nsa19tZ3JfdmJpb3Nfc211LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY2xrX21nci9kY24xMC9ydjFfY2xrX21ncl92Ymlvc19z bXUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9j bGtfbWdyL2RjbjEwL3J2Ml9jbGtfbWdyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vYW1kL2Rpc3BsYXkvZGMvY2xrX21nci9kY24xMC9ydjJfY2xrX21nci5oCiBkZWxldGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjZS9kY2UxMTBfY2xr X21nci5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2Rj L2RjZS9kY2UxMTBfY2xrX21nci5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2FtZC9kaXNwbGF5L2RjL2RjZS9kY2UxMTJfY2xrX21nci5jCiBkZWxldGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjZS9kY2UxMTJfY2xrX21nci5oCiBkZWxl dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjZS9kY2UxMjBf Y2xrX21nci5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5 L2RjL2RjZS9kY2UxMjBfY2xrX21nci5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2FtZC9kaXNwbGF5L2RjL2RjZS9kY2VfY2xrX21nci5jCiBkZWxldGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjZS9kY2VfY2xrX21nci5oCiBkZWxldGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjbjEwL2Nsa19tZ3Iu YwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY24x MC9ydjFfY2xrX21nci5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9k aXNwbGF5L2RjL2RjbjEwL3J2MV9jbGtfbWdyLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNuMTAvcnYxX2Nsa19tZ3JfY2xrLmMKIGRlbGV0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNuMTAvcnYxX2Nsa19t Z3JfY2xrLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkv ZGMvZGNuMTAvcnYxX2Nsa19tZ3JfdmJpb3Nfc211LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNuMTAvcnYxX2Nsa19tZ3JfdmJpb3Nfc211LmgK IGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNuMTAv cnYyX2Nsa19tZ3IuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlz cGxheS9kYy9kY24xMC9ydjJfY2xrX21nci5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2FtZC9kaXNwbGF5L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L01ha2Vm aWxlCmluZGV4IGNmZGUxNTYuLjQ5NmNlZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvZGlzcGxheS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvTWFr ZWZpbGUKQEAgLTI4LDYgKzI4LDcgQEAgQU1EREFMUEFUSCA9ICQoUkVMQVRJVkVfQU1EX0RJU1BM QVlfUEFUSCkKIAogc3ViZGlyLWNjZmxhZ3MteSArPSAtSSQoRlVMTF9BTURfRElTUExBWV9QQVRI KS9kYy9pbmMvCiBzdWJkaXItY2NmbGFncy15ICs9IC1JJChGVUxMX0FNRF9ESVNQTEFZX1BBVEgp L2RjL2luYy9odworc3ViZGlyLWNjZmxhZ3MteSArPSAtSSQoRlVMTF9BTURfRElTUExBWV9QQVRI KS9kYy9jbGtfbWdyCiBzdWJkaXItY2NmbGFncy15ICs9IC1JJChGVUxMX0FNRF9ESVNQTEFZX1BB VEgpL21vZHVsZXMvaW5jCiBzdWJkaXItY2NmbGFncy15ICs9IC1JJChGVUxMX0FNRF9ESVNQTEFZ X1BBVEgpL21vZHVsZXMvZnJlZXN5bmMKIHN1YmRpci1jY2ZsYWdzLXkgKz0gLUkkKEZVTExfQU1E X0RJU1BMQVlfUEFUSCkvbW9kdWxlcy9jb2xvcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2FtZC9kaXNwbGF5L2RjL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2Rj L01ha2VmaWxlCmluZGV4IGI4ZGRiNGEuLjZkYTRlNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvZGlzcGxheS9kYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rp c3BsYXkvZGMvTWFrZWZpbGUKQEAgLTIzLDcgKzIzLDcgQEAKICMgTWFrZWZpbGUgZm9yIERpc3Bs YXkgQ29yZSAoZGMpIGNvbXBvbmVudC4KICMKIAotRENfTElCUyA9IGJhc2ljcyBiaW9zIGNhbGNz IGRjZSBncGlvIGlycSB2aXJ0dWFsCitEQ19MSUJTID0gYmFzaWNzIGJpb3MgY2FsY3MgY2xrX21n ciBkY2UgZ3BpbyBpcnEgdmlydHVhbAogCiBpZmRlZiBDT05GSUdfRFJNX0FNRF9EQ19EQ04xXzAK IERDX0xJQlMgKz0gZGNuMTAgZG1sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rp c3BsYXkvZGMvY2xrX21nci9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9k Yy9jbGtfbWdyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1 MGUyYjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMv Y2xrX21nci9NYWtlZmlsZQpAQCAtMCwwICsxLDc1IEBACisjCisjIENvcHlyaWdodCAyMDE3IEFk dmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh bnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyMgY29weSBv ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi U29mdHdhcmUiKSwKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyMgYW5k L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlCisjIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisjIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorIworIyBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisjIFRI RSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJ TSwgREFNQUdFUyBPUgorIyBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyMgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisjIE9USEVSIERF QUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyMKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSAnY2xrX21n cicgc3ViLWNvbXBvbmVudCBvZiBEQUwuCisjIEl0IHByb3ZpZGVzIHRoZSBjb250cm9sIGFuZCBz dGF0dXMgb2YgSFcgQ0xLX01HUiBwaW5zLgorCitDTEtfTUdSID0gY2xrX21nci5vCisKK0FNRF9E QUxfQ0xLX01HUiA9ICQoYWRkcHJlZml4ICQoQU1EREFMUEFUSCkvZGMvY2xrX21nci8sJChDTEtf TUdSKSkKKworQU1EX0RJU1BMQVlfRklMRVMgKz0gJChBTURfREFMX0NMS19NR1IpCisKKworIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIworIyBEQ0UgMTAwIGFuZCBEQ0U4eAorIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIworQ0xLX01HUl9EQ0UxMDAgPSBkY2VfY2xrX21nci5vCisKK0FNRF9EQUxfQ0xLX01H Ul9EQ0UxMDAgPSAkKGFkZHByZWZpeCAkKEFNRERBTFBBVEgpL2RjL2Nsa19tZ3IvZGNlMTAwLywk KENMS19NR1JfRENFMTAwKSkKKworQU1EX0RJU1BMQVlfRklMRVMgKz0gJChBTURfREFMX0NMS19N R1JfRENFMTAwKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERDRSAxMDAgYW5kIERDRTh4 CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitDTEtfTUdSX0RDRTExMCA9IGRjZTExMF9jbGtfbWdy Lm8KKworQU1EX0RBTF9DTEtfTUdSX0RDRTExMCA9ICQoYWRkcHJlZml4ICQoQU1EREFMUEFUSCkv ZGMvY2xrX21nci9kY2UxMTAvLCQoQ0xLX01HUl9EQ0UxMTApKQorCitBTURfRElTUExBWV9GSUxF UyArPSAkKEFNRF9EQUxfQ0xLX01HUl9EQ0UxMTApCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisj IERDRSAxMTIKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0NMS19NR1JfRENFMTEyID0gZGNlMTEy X2Nsa19tZ3IubworCitBTURfREFMX0NMS19NR1JfRENFMTEyID0gJChhZGRwcmVmaXggJChBTURE QUxQQVRIKS9kYy9jbGtfbWdyL2RjZTExMi8sJChDTEtfTUdSX0RDRTExMikpCisKK0FNRF9ESVNQ TEFZX0ZJTEVTICs9ICQoQU1EX0RBTF9DTEtfTUdSX0RDRTExMikKKyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKKyMgRENFIDEyMAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQ0xLX01HUl9EQ0UxMjAg PSBkY2UxMjBfY2xrX21nci5vCisKK0FNRF9EQUxfQ0xLX01HUl9EQ0UxMjAgPSAkKGFkZHByZWZp eCAkKEFNRERBTFBBVEgpL2RjL2Nsa19tZ3IvZGNlMTIwLywkKENMS19NR1JfRENFMTIwKSkKKwor QU1EX0RJU1BMQVlfRklMRVMgKz0gJChBTURfREFMX0NMS19NR1JfRENFMTIwKQoraWZkZWYgQ09O RklHX0RSTV9BTURfRENfRENOMV8wCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERDTjEwCisj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCitDTEtfTUdSX0RDTjEwID0gcnYxX2Nsa19tZ3IubyBydjFf Y2xrX21ncl92Ymlvc19zbXUubyBydjJfY2xrX21nci5vCisKK0FNRF9EQUxfQ0xLX01HUl9EQ04x MCA9ICQoYWRkcHJlZml4ICQoQU1EREFMUEFUSCkvZGMvY2xrX21nci9kY24xMC8sJChDTEtfTUdS X0RDTjEwKSkKKworQU1EX0RJU1BMQVlfRklMRVMgKz0gJChBTURfREFMX0NMS19NR1JfRENOMTAp CitlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Nsa19t Z3IvY2xrX21nci5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Nsa19tZ3IvY2xr X21nci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMjQ2MTQKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY2xrX21nci9jbGtf bWdyLmMKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMi0xNiBBZHZhbmNl ZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICog YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgor ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S CisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogQU1E CisgKgorICovCisKKyNpbmNsdWRlICJkYWxfYXNpY19pZC5oIgorI2luY2x1ZGUgImRjX3R5cGVz LmgiCisjaW5jbHVkZSAiZGNjZy5oIgorI2luY2x1ZGUgImNsa19tZ3JfaW50ZXJuYWwuaCIKKwor I2luY2x1ZGUgImRjZTEwMC9kY2VfY2xrX21nci5oIgorI2luY2x1ZGUgImRjZTExMC9kY2UxMTBf Y2xrX21nci5oIgorI2luY2x1ZGUgImRjZTExMi9kY2UxMTJfY2xrX21nci5oIgorI2luY2x1ZGUg ImRjZTEyMC9kY2UxMjBfY2xrX21nci5oIgorI2luY2x1ZGUgImRjbjEwL3J2MV9jbGtfbWdyLmgi CisjaW5jbHVkZSAiZGNuMTAvcnYyX2Nsa19tZ3IuaCIKKworc3RydWN0IGNsa19tZ3IgKmRjX2Ns a19tZ3JfY3JlYXRlKHN0cnVjdCBkY19jb250ZXh0ICpjdHgsIHN0cnVjdCBwcF9zbXVfZnVuY3Mg KnBwX3NtdSwgc3RydWN0IGRjY2cgKmRjY2cpCit7CisJc3RydWN0IGh3X2FzaWNfaWQgYXNpY19p ZCA9IGN0eC0+YXNpY19pZDsKKworCXN0cnVjdCBjbGtfbWdyX2ludGVybmFsICpjbGtfbWdyID0g a3phbGxvYyhzaXplb2YoKmNsa19tZ3IpLCBHRlBfS0VSTkVMKTsKKworCWlmIChjbGtfbWdyID09 IE5VTEwpIHsKKwkJQlJFQUtfVE9fREVCVUdHRVIoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJ c3dpdGNoIChhc2ljX2lkLmNoaXBfZmFtaWx5KSB7CisJY2FzZSBGQU1JTFlfQ0k6CisJY2FzZSBG QU1JTFlfS1Y6CisJCWRjZV9jbGtfbWdyX2NvbnN0cnVjdChjdHgsIGNsa19tZ3IpOworCQlicmVh azsKKwljYXNlIEZBTUlMWV9DWjoKKwkJZGNlMTEwX2Nsa19tZ3JfY29uc3RydWN0KGN0eCwgY2xr X21ncik7CisJCWJyZWFrOworCWNhc2UgRkFNSUxZX1ZJOgorCQlpZiAoQVNJQ19SRVZfSVNfVE9O R0FfUChhc2ljX2lkLmh3X2ludGVybmFsX3JldikgfHwKKwkJCQlBU0lDX1JFVl9JU19GSUpJX1Ao YXNpY19pZC5od19pbnRlcm5hbF9yZXYpKSB7CisJCQlkY2VfY2xrX21ncl9jb25zdHJ1Y3QoY3R4 LCBjbGtfbWdyKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChBU0lDX1JFVl9JU19QT0xBUklTMTBf UChhc2ljX2lkLmh3X2ludGVybmFsX3JldikgfHwKKwkJCQlBU0lDX1JFVl9JU19QT0xBUklTMTFf TShhc2ljX2lkLmh3X2ludGVybmFsX3JldikgfHwKKwkJCQlBU0lDX1JFVl9JU19QT0xBUklTMTJf Vihhc2ljX2lkLmh3X2ludGVybmFsX3JldikpIHsKKwkJCWRjZTExMl9jbGtfbWdyX2NvbnN0cnVj dChjdHgsIGNsa19tZ3IpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKEFTSUNfUkVWX0lTX1ZFR0FN KGFzaWNfaWQuaHdfaW50ZXJuYWxfcmV2KSkgeworCQkJZGNlMTEyX2Nsa19tZ3JfY29uc3RydWN0 KGN0eCwgY2xrX21ncik7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIEZBTUlMWV9B SToKKwkJaWYgKEFTSUNSRVZfSVNfVkVHQTIwX1AoYXNpY19pZC5od19pbnRlcm5hbF9yZXYpKQor CQkJZGNlMTIxX2Nsa19tZ3JfY29uc3RydWN0KGN0eCwgY2xrX21ncik7CisJCWVsc2UKKwkJCWRj ZTEyMF9jbGtfbWdyX2NvbnN0cnVjdChjdHgsIGNsa19tZ3IpOworCQlicmVhazsKKworI2lmIGRl ZmluZWQoQ09ORklHX0RSTV9BTURfRENfRENOMV8wKQorCWNhc2UgRkFNSUxZX1JWOgorCisjaWYg ZGVmaW5lZChDT05GSUdfRFJNX0FNRF9EQ19EQ04xXzAxKQorCQlpZiAoQVNJQ1JFVl9JU19SQVZF TjIoYXNpY19pZC5od19pbnRlcm5hbF9yZXYpKSB7CisJCQlydjJfY2xrX21ncl9jb25zdHJ1Y3Qo Y3R4LCBjbGtfbWdyLCBwcF9zbXUpOworCQkJYnJlYWs7CisJCX0KKyNlbmRpZgkvKiBEQ04xXzAx ICovCisKKwkJaWYgKEFTSUNSRVZfSVNfUkFWRU4oYXNpY19pZC5od19pbnRlcm5hbF9yZXYpIHx8 CisJCQkJQVNJQ1JFVl9JU19QSUNBU1NPKGFzaWNfaWQuaHdfaW50ZXJuYWxfcmV2KSkgeworCQkJ cnYxX2Nsa19tZ3JfY29uc3RydWN0KGN0eCwgY2xrX21nciwgcHBfc211KTsKKwkJCWJyZWFrOwor CQl9CisJCWJyZWFrOworI2VuZGlmCS8qIEZhbWlseSBSViAqLworCisJZGVmYXVsdDoKKwkJQVNT RVJUKDApOyAvKiBVbmtub3duIEFzaWMgKi8KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuICZjbGtf bWdyLT5iYXNlOworfQorCit2b2lkIGRjX2Rlc3Ryb3lfY2xrX21ncihzdHJ1Y3QgY2xrX21nciAq Y2xrX21ncl9iYXNlKQoreworCXN0cnVjdCBjbGtfbWdyX2ludGVybmFsICpjbGtfbWdyID0gVE9f Q0xLX01HUl9JTlRFUk5BTChjbGtfbWdyX2Jhc2UpOworCisJa2ZyZWUoY2xrX21ncik7Cit9CisK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9jbGtfbWdyL2RjZTEw MC9kY2VfY2xrX21nci5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Nsa19tZ3Iv ZGNlMTAwL2RjZV9jbGtfbWdyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u ODE0NDUwZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9k Yy9jbGtfbWdyL2RjZTEwMC9kY2VfY2xrX21nci5jCkBAIC0wLDAgKzEsNDcxIEBACisvKgorICog Q29weXJpZ2h0IDIwMTItMTYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgor ICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5p c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgor ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug c2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykg T1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhF UiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRX QVJFLgorICoKKyAqIEF1dGhvcnM6IEFNRAorICoKKyAqLworCisKKyNpbmNsdWRlICJkY2NnLmgi CisjaW5jbHVkZSAiY2xrX21ncl9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImRjZV9jbGtfbWdyLmgi CisjaW5jbHVkZSAiZGNlMTEwL2RjZTExMF9jbGtfbWdyLmgiCisjaW5jbHVkZSAiZGNlMTEyL2Rj ZTExMl9jbGtfbWdyLmgiCisjaW5jbHVkZSAicmVnX2hlbHBlci5oIgorI2luY2x1ZGUgImRtY3Uu aCIKKyNpbmNsdWRlICJjb3JlX3R5cGVzLmgiCisjaW5jbHVkZSAiZGFsX2FzaWNfaWQuaCIKKwor LyoKKyAqIEN1cnJlbnRseSB0aGUgcmVnaXN0ZXIgc2hpZnRzIGFuZCBtYXNrcyBpbiB0aGlzIGZp bGUgYXJlIHVzZWQgZm9yIGRjZTEwMCBhbmQgZGNlODAKKyAqIHdoaWNoIGhhcyBpZGVudGljYWwg ZGVmaW5pdGlvbnMuCisgKiBUT0RPOiByZW1vdmUgdGhpcyB3aGVuIERQUkVGQ0xLX0NOVEwgYW5k IGRwcmVmIERFTlRJU1RfRElTUENMS19DTlRMCisgKiBpcyBtb3ZlZCB0byBkY2NnLCB3aGVyZSBp dCBiZWxvbmdzCisgKi8KKyNpbmNsdWRlICJkY2UvZGNlXzhfMF9kLmgiCisjaW5jbHVkZSAiZGNl L2RjZV84XzBfc2hfbWFzay5oIgorCisjZGVmaW5lIFJFRyhyZWcpIFwKKwkoY2xrX21nci0+cmVn cy0+cmVnKQorCisjdW5kZWYgRk4KKyNkZWZpbmUgRk4ocmVnX25hbWUsIGZpZWxkX25hbWUpIFwK KwljbGtfbWdyLT5jbGtfbWdyX3NoaWZ0LT5maWVsZF9uYW1lLCBjbGtfbWdyLT5jbGtfbWdyX21h c2stPmZpZWxkX25hbWUKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfbWdyX3JlZ2lzdGVycyBk aXNwX2Nsa19yZWdzID0geworCQlDTEtfQ09NTU9OX1JFR19MSVNUX0RDRV9CQVNFKCkKK307CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX21ncl9zaGlmdCBkaXNwX2Nsa19zaGlmdCA9IHsKKwkJ Q0xLX0NPTU1PTl9NQVNLX1NIX0xJU1RfRENFX0NPTU1PTl9CQVNFKF9fU0hJRlQpCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IGNsa19tZ3JfbWFzayBkaXNwX2Nsa19tYXNrID0geworCQlDTEtf Q09NTU9OX01BU0tfU0hfTElTVF9EQ0VfQ09NTU9OX0JBU0UoX01BU0spCit9OworCisKKy8qIE1h eCBjbG9jayB2YWx1ZXMgZm9yIGVhY2ggc3RhdGUgaW5kZXhlZCBieSAiZW51bSBjbG9ja3Nfc3Rh dGUiOiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzdGF0ZV9kZXBlbmRlbnRfY2xvY2tzIGRjZTgw X21heF9jbGtzX2J5X3N0YXRlW10gPSB7CisvKiBDbG9ja3NTdGF0ZUludmFsaWQgLSBzaG91bGQg bm90IGJlIHVzZWQgKi8KK3sgLmRpc3BsYXlfY2xrX2toeiA9IDAsIC5waXhlbF9jbGtfa2h6ID0g MCB9LAorLyogQ2xvY2tzU3RhdGVVbHRyYUxvdyAtIG5vdCBleHBlY3RlZCB0byBiZSB1c2VkIGZv ciBEQ0UgOC4wICovCit7IC5kaXNwbGF5X2Nsa19raHogPSAwLCAucGl4ZWxfY2xrX2toeiA9IDAg fSwKKy8qIENsb2Nrc1N0YXRlTG93ICovCit7IC5kaXNwbGF5X2Nsa19raHogPSAzNTIwMDAsIC5w aXhlbF9jbGtfa2h6ID0gMzMwMDAwfSwKKy8qIENsb2Nrc1N0YXRlTm9taW5hbCAqLworeyAuZGlz cGxheV9jbGtfa2h6ID0gNjAwMDAwLCAucGl4ZWxfY2xrX2toeiA9IDQwMDAwMCB9LAorLyogQ2xv Y2tzU3RhdGVQZXJmb3JtYW5jZSAqLworeyAuZGlzcGxheV9jbGtfa2h6ID0gNjAwMDAwLCAucGl4 ZWxfY2xrX2toeiA9IDQwMDAwMCB9IH07CisKK2ludCBkZW50aXN0X2dldF9kaXZpZGVyX2Zyb21f ZGlkKGludCBkaWQpCit7CisJaWYgKGRpZCA8IERFTlRJU1RfQkFTRV9ESURfMSkKKwkJZGlkID0g REVOVElTVF9CQVNFX0RJRF8xOworCWlmIChkaWQgPiBERU5USVNUX01BWF9ESUQpCisJCWRpZCA9 IERFTlRJU1RfTUFYX0RJRDsKKworCWlmIChkaWQgPCBERU5USVNUX0JBU0VfRElEXzIpIHsKKwkJ cmV0dXJuIERFTlRJU1RfRElWSURFUl9SQU5HRV8xX1NUQVJUICsgREVOVElTVF9ESVZJREVSX1JB TkdFXzFfU1RFUAorCQkJCQkJCSogKGRpZCAtIERFTlRJU1RfQkFTRV9ESURfMSk7CisJfSBlbHNl IGlmIChkaWQgPCBERU5USVNUX0JBU0VfRElEXzMpIHsKKwkJcmV0dXJuIERFTlRJU1RfRElWSURF Ul9SQU5HRV8yX1NUQVJUICsgREVOVElTVF9ESVZJREVSX1JBTkdFXzJfU1RFUAorCQkJCQkJCSog KGRpZCAtIERFTlRJU1RfQkFTRV9ESURfMik7CisJfSBlbHNlIGlmIChkaWQgPCBERU5USVNUX0JB U0VfRElEXzQpIHsKKwkJcmV0dXJuIERFTlRJU1RfRElWSURFUl9SQU5HRV8zX1NUQVJUICsgREVO VElTVF9ESVZJREVSX1JBTkdFXzNfU1RFUAorCQkJCQkJCSogKGRpZCAtIERFTlRJU1RfQkFTRV9E SURfMyk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIERFTlRJU1RfRElWSURFUl9SQU5HRV80X1NUQVJU ICsgREVOVElTVF9ESVZJREVSX1JBTkdFXzRfU1RFUAorCQkJCQkJCSogKGRpZCAtIERFTlRJU1Rf QkFTRV9ESURfNCk7CisJfQorfQorCisvKiBTVyB3aWxsIGFkanVzdCBEUCBSRUYgQ2xvY2sgYXZl cmFnZSB2YWx1ZSBmb3IgYWxsIHB1cnBvc2VzCisgKiAoRFAgRFRPIC8gRFAgQXVkaW8gRFRPIGFu ZCBEUCBHVEMpCisgaWYgY2xvY2sgaXMgc3ByZWFkIGZvciBhbGwgY2FzZXM6CisgLWlmIFNTIGVu YWJsZWQgb24gRFAgUmVmIGNsb2NrIGFuZCBIVyBkZS1zcHJlYWRpbmcgZW5hYmxlZCB3aXRoIFNX CisgY2FsY3VsYXRpb25zIGZvciBEU19JTkNSL0RTX01PRFVMTyAodGhpcyBpcyBwbGFubmVkIHRv IGJlIGRlZmF1bHQgY2FzZSkKKyAtaWYgU1MgZW5hYmxlZCBvbiBEUCBSZWYgY2xvY2sgYW5kIEhX IGRlLXNwcmVhZGluZyBlbmFibGVkIHdpdGggSFcKKyBjYWxjdWxhdGlvbnMgKG5vdCBwbGFubmVk IHRvIGJlIHVzZWQsIGJ1dCBhdmVyYWdlIGNsb2NrIHNob3VsZCBzdGlsbAorIGJlIHZhbGlkKQor IC1pZiBTUyBlbmFibGVkIG9uIERQIFJlZiBjbG9jayBhbmQgSFcgZGUtc3ByZWFkaW5nIGRpc2Fi bGVkCisgKHNob3VsZCBub3QgYmUgY2FzZSB3aXRoIENJSykgdGhlbiBTVyBzaG91bGQgcHJvZ3Jh bSBhbGwgcmF0ZXMKKyBnZW5lcmF0ZWQgYWNjb3JkaW5nIHRvIGF2ZXJhZ2UgdmFsdWUgKGNhc2Ug YXMgd2l0aCBwcmV2aW91cyBBU0lDcykKKyAgKi8KKworaW50IGRjZV9hZGp1c3RfZHBfcmVmX2Zy ZXFfZm9yX3NzKHN0cnVjdCBjbGtfbWdyX2ludGVybmFsICpjbGtfbWdyX2RjZSwgaW50IGRwX3Jl Zl9jbGtfa2h6KQoreworCWlmIChjbGtfbWdyX2RjZS0+c3Nfb25fZHByZWZjbGsgJiYgY2xrX21n cl9kY2UtPmRwcmVmY2xrX3NzX2RpdmlkZXIgIT0gMCkgeworCQlzdHJ1Y3QgZml4ZWQzMV8zMiBz c19wZXJjZW50YWdlID0gZGNfZml4cHRfZGl2X2ludCgKKwkJCQlkY19maXhwdF9mcm9tX2ZyYWN0 aW9uKGNsa19tZ3JfZGNlLT5kcHJlZmNsa19zc19wZXJjZW50YWdlLAorCQkJCQkJCWNsa19tZ3Jf ZGNlLT5kcHJlZmNsa19zc19kaXZpZGVyKSwgMjAwKTsKKwkJc3RydWN0IGZpeGVkMzFfMzIgYWRq X2RwX3JlZl9jbGtfa2h6OworCisJCXNzX3BlcmNlbnRhZ2UgPSBkY19maXhwdF9zdWIoZGNfZml4 cHRfb25lLCBzc19wZXJjZW50YWdlKTsKKwkJYWRqX2RwX3JlZl9jbGtfa2h6ID0gZGNfZml4cHRf bXVsX2ludChzc19wZXJjZW50YWdlLCBkcF9yZWZfY2xrX2toeik7CisJCWRwX3JlZl9jbGtfa2h6 ID0gZGNfZml4cHRfZmxvb3IoYWRqX2RwX3JlZl9jbGtfa2h6KTsKKwl9CisJcmV0dXJuIGRwX3Jl Zl9jbGtfa2h6OworfQorCitpbnQgZGNlX2dldF9kcF9yZWZfZnJlcV9raHooc3RydWN0IGNsa19t Z3IgKmNsa19tZ3JfYmFzZSkKK3sKKwlzdHJ1Y3QgY2xrX21ncl9pbnRlcm5hbCAqY2xrX21nciA9 IFRPX0NMS19NR1JfSU5URVJOQUwoY2xrX21ncl9iYXNlKTsKKwlpbnQgZHByZWZjbGtfd2Rpdmlk ZXI7CisJaW50IGRwcmVmY2xrX3NyY19zZWw7CisJaW50IGRwX3JlZl9jbGtfa2h6ID0gNjAwMDAw OworCWludCB0YXJnZXRfZGl2OworCisJLyogQVNTRVJUIERQIFJlZmVyZW5jZSBDbG9jayBzb3Vy Y2UgaXMgZnJvbSBERlMqLworCVJFR19HRVQoRFBSRUZDTEtfQ05UTCwgRFBSRUZDTEtfU1JDX1NF TCwgJmRwcmVmY2xrX3NyY19zZWwpOworCUFTU0VSVChkcHJlZmNsa19zcmNfc2VsID09IDApOwor CisJLyogUmVhZCB0aGUgbW1ERU5USVNUX0RJU1BDTEtfQ05UTCB0byBnZXQgdGhlIGN1cnJlbnRs eQorCSAqIHByb2dyYW1tZWQgRElEIERFTlRJU1RfRFBSRUZDTEtfV0RJVklERVIqLworCVJFR19H RVQoREVOVElTVF9ESVNQQ0xLX0NOVEwsIERFTlRJU1RfRFBSRUZDTEtfV0RJVklERVIsICZkcHJl ZmNsa193ZGl2aWRlcik7CisKKwkvKiBDb252ZXJ0IERFTlRJU1RfRFBSRUZDTEtfV0RJVklERVJ0 byBhY3R1YWwgZGl2aWRlciovCisJdGFyZ2V0X2RpdiA9IGRlbnRpc3RfZ2V0X2RpdmlkZXJfZnJv bV9kaWQoZHByZWZjbGtfd2RpdmlkZXIpOworCisJLyogQ2FsY3VsYXRlIHRoZSBjdXJyZW50IERG UyBjbG9jaywgaW4ga0h6LiovCisJZHBfcmVmX2Nsa19raHogPSAoREVOVElTVF9ESVZJREVSX1JB TkdFX1NDQUxFX0ZBQ1RPUgorCQkqIGNsa19tZ3ItPmRlbnRpc3RfdmNvX2ZyZXFfa2h6KSAvIHRh cmdldF9kaXY7CisKKwlyZXR1cm4gZGNlX2FkanVzdF9kcF9yZWZfZnJlcV9mb3Jfc3MoY2xrX21n ciwgZHBfcmVmX2Nsa19raHopOworfQorCitpbnQgZGNlMTJfZ2V0X2RwX3JlZl9mcmVxX2toeihz dHJ1Y3QgY2xrX21nciAqY2xrX21ncl9iYXNlKQoreworCXN0cnVjdCBjbGtfbWdyX2ludGVybmFs ICpjbGtfbWdyX2RjZSA9IFRPX0NMS19NR1JfSU5URVJOQUwoY2xrX21ncl9iYXNlKTsKKworCXJl dHVybiBkY2VfYWRqdXN0X2RwX3JlZl9mcmVxX2Zvcl9zcyhjbGtfbWdyX2RjZSwgY2xrX21ncl9i YXNlLT5kcHJlZmNsa19raHopOworfQorCisvKiB1bml0OiBpbl9raHogYmVmb3JlIG1vZGUgc2V0 LCBnZXQgcGl4ZWwgY2xvY2sgZnJvbSBjb250ZXh0LiBBU0lDIHJlZ2lzdGVyCisgKiBtYXkgbm90 IGJlIHByb2dyYW1tZWQgeWV0CisgKi8KK3VpbnQzMl90IGRjZV9nZXRfbWF4X3BpeGVsX2Nsb2Nr X2Zvcl9hbGxfcGF0aHMoc3RydWN0IGRjX3N0YXRlICpjb250ZXh0KQoreworCXVpbnQzMl90IG1h eF9waXhfY2xrID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfUElQRVM7IGkr KykgeworCQlzdHJ1Y3QgcGlwZV9jdHggKnBpcGVfY3R4ID0gJmNvbnRleHQtPnJlc19jdHgucGlw ZV9jdHhbaV07CisKKwkJaWYgKHBpcGVfY3R4LT5zdHJlYW0gPT0gTlVMTCkKKwkJCWNvbnRpbnVl OworCisJCS8qIGRvIG5vdCBjaGVjayB1bmRlciBsYXkgKi8KKwkJaWYgKHBpcGVfY3R4LT50b3Bf cGlwZSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwaXBlX2N0eC0+c3RyZWFtX3Jlcy5waXhfY2xr X3BhcmFtcy5yZXF1ZXN0ZWRfcGl4X2Nsa18xMDBoeiAvIDEwID4gbWF4X3BpeF9jbGspCisJCQlt YXhfcGl4X2NsayA9IHBpcGVfY3R4LT5zdHJlYW1fcmVzLnBpeF9jbGtfcGFyYW1zLnJlcXVlc3Rl ZF9waXhfY2xrXzEwMGh6IC8gMTA7CisKKwkJLyogcmFpc2UgY2xvY2sgc3RhdGUgZm9yIEhCUjMv MiBpZiByZXF1aXJlZC4gQ29uZmlybWVkIHdpdGggSFcgRENFL0RQQ1MKKwkJICogbG9naWMgZm9y IEhCUjMgc3RpbGwgbmVlZHMgTm9taW5hbCAoMC44Vikgb24gVkREQyByYWlsCisJCSAqLworCQlp ZiAoZGNfaXNfZHBfc2lnbmFsKHBpcGVfY3R4LT5zdHJlYW0tPnNpZ25hbCkgJiYKKwkJCQlwaXBl X2N0eC0+c3RyZWFtX3Jlcy5waXhfY2xrX3BhcmFtcy5yZXF1ZXN0ZWRfc3ltX2NsayA+IG1heF9w aXhfY2xrKQorCQkJbWF4X3BpeF9jbGsgPSBwaXBlX2N0eC0+c3RyZWFtX3Jlcy5waXhfY2xrX3Bh cmFtcy5yZXF1ZXN0ZWRfc3ltX2NsazsKKwl9CisKKwlyZXR1cm4gbWF4X3BpeF9jbGs7Cit9CisK K2VudW0gZG1fcHBfY2xvY2tzX3N0YXRlIGRjZV9nZXRfcmVxdWlyZWRfY2xvY2tzX3N0YXRlKAor CXN0cnVjdCBjbGtfbWdyICpjbGtfbWdyX2Jhc2UsCisJc3RydWN0IGRjX3N0YXRlICpjb250ZXh0 KQoreworCXN0cnVjdCBjbGtfbWdyX2ludGVybmFsICpjbGtfbWdyX2RjZSA9IFRPX0NMS19NR1Jf SU5URVJOQUwoY2xrX21ncl9iYXNlKTsKKwlpbnQgaTsKKwllbnVtIGRtX3BwX2Nsb2Nrc19zdGF0 ZSBsb3dfcmVxX2NsazsKKwlpbnQgbWF4X3BpeF9jbGsgPSBkY2VfZ2V0X21heF9waXhlbF9jbG9j a19mb3JfYWxsX3BhdGhzKGNvbnRleHQpOworCisJLyogSXRlcmF0ZSBmcm9tIGhpZ2hlc3Qgc3Vw cG9ydGVkIHRvIGxvd2VzdCB2YWxpZCBzdGF0ZSwgYW5kIHVwZGF0ZQorCSAqIGxvd2VzdCBSZXF1 aXJlZFN0YXRlIHdpdGggdGhlIGxvd2VzdCBzdGF0ZSB0aGF0IHNhdGlzZmllcworCSAqIGFsbCBy ZXF1aXJlZCBjbG9ja3MKKwkgKi8KKwlmb3IgKGkgPSBjbGtfbWdyX2RjZS0+bWF4X2Nsa3Nfc3Rh dGU7IGkgPj0gRE1fUFBfQ0xPQ0tTX1NUQVRFX1VMVFJBX0xPVzsgaS0tKQorCQlpZiAoY29udGV4 dC0+YndfY3R4LmJ3LmRjZS5kaXNwY2xrX2toeiA+CisJCQkJY2xrX21ncl9kY2UtPm1heF9jbGtz X2J5X3N0YXRlW2ldLmRpc3BsYXlfY2xrX2toegorCQkJfHwgbWF4X3BpeF9jbGsgPgorCQkJCWNs a19tZ3JfZGNlLT5tYXhfY2xrc19ieV9zdGF0ZVtpXS5waXhlbF9jbGtfa2h6KQorCQkJYnJlYWs7 CisKKwlsb3dfcmVxX2NsayA9IGkgKyAxOworCWlmIChsb3dfcmVxX2NsayA+IGNsa19tZ3JfZGNl LT5tYXhfY2xrc19zdGF0ZSkgeworCQkvKiBzZXQgbWF4IGNsb2NrIHN0YXRlIGZvciBoaWdoIHBo eWNsb2NrLCBpbnZhbGlkIG9uIGV4Y2VlZGluZyBkaXNwbGF5IGNsb2NrICovCisJCWlmIChjbGtf bWdyX2RjZS0+bWF4X2Nsa3NfYnlfc3RhdGVbY2xrX21ncl9kY2UtPm1heF9jbGtzX3N0YXRlXS5k aXNwbGF5X2Nsa19raHoKKwkJCQk8IGNvbnRleHQtPmJ3X2N0eC5idy5kY2UuZGlzcGNsa19raHop CisJCQlsb3dfcmVxX2NsayA9IERNX1BQX0NMT0NLU19TVEFURV9JTlZBTElEOworCQllbHNlCisJ CQlsb3dfcmVxX2NsayA9IGNsa19tZ3JfZGNlLT5tYXhfY2xrc19zdGF0ZTsKKwl9CisKKwlyZXR1 cm4gbG93X3JlcV9jbGs7Cit9CisKKworLyogVE9ETzogcmVtb3ZlIHVzZSB0aGUgdHdvIGJyb2tl biBkb3duIGZ1bmN0aW9ucyAqLworaW50IGRjZV9zZXRfY2xvY2soCisJc3RydWN0IGNsa19tZ3Ig KmNsa19tZ3JfYmFzZSwKKwlpbnQgcmVxdWVzdGVkX2Nsa19raHopCit7CisJc3RydWN0IGNsa19t Z3JfaW50ZXJuYWwgKmNsa19tZ3JfZGNlID0gVE9fQ0xLX01HUl9JTlRFUk5BTChjbGtfbWdyX2Jh c2UpOworCXN0cnVjdCBicF9waXhlbF9jbG9ja19wYXJhbWV0ZXJzIHB4bF9jbGtfcGFyYW1zID0g eyAwIH07CisJc3RydWN0IGRjX2Jpb3MgKmJwID0gY2xrX21ncl9iYXNlLT5jdHgtPmRjX2Jpb3M7 CisJaW50IGFjdHVhbF9jbG9jayA9IHJlcXVlc3RlZF9jbGtfa2h6OworCXN0cnVjdCBkbWN1ICpk bWN1ID0gY2xrX21ncl9kY2UtPmJhc2UuY3R4LT5kYy0+cmVzX3Bvb2wtPmRtY3U7CisKKwkvKiBN YWtlIHN1cmUgcmVxdWVzdGVkIGNsb2NrIGlzbid0IGxvd2VyIHRoYW4gbWluaW11bSB0aHJlc2hv bGQqLworCWlmIChyZXF1ZXN0ZWRfY2xrX2toeiA+IDApCisJCXJlcXVlc3RlZF9jbGtfa2h6ID0g bWF4KHJlcXVlc3RlZF9jbGtfa2h6LAorCQkJCWNsa19tZ3JfZGNlLT5kZW50aXN0X3Zjb19mcmVx X2toeiAvIDY0KTsKKworCS8qIFByZXBhcmUgdG8gcHJvZ3JhbSBkaXNwbGF5IGNsb2NrKi8KKwlw eGxfY2xrX3BhcmFtcy50YXJnZXRfcGl4ZWxfY2xvY2tfMTAwaHogPSByZXF1ZXN0ZWRfY2xrX2to eiAqIDEwOworCXB4bF9jbGtfcGFyYW1zLnBsbF9pZCA9IENMT0NLX1NPVVJDRV9JRF9ERlM7CisK KwlpZiAoY2xrX21ncl9kY2UtPmRmc19ieXBhc3NfYWN0aXZlKQorCQlweGxfY2xrX3BhcmFtcy5m bGFncy5TRVRfRElTUENMS19ERlNfQllQQVNTID0gdHJ1ZTsKKworCWJwLT5mdW5jcy0+cHJvZ3Jh bV9kaXNwbGF5X2VuZ2luZV9wbGwoYnAsICZweGxfY2xrX3BhcmFtcyk7CisKKwlpZiAoY2xrX21n cl9kY2UtPmRmc19ieXBhc3NfYWN0aXZlKSB7CisJCS8qIENhY2hlIHRoZSBmaXhlZCBkaXNwbGF5 IGNsb2NrKi8KKwkJY2xrX21ncl9kY2UtPmRmc19ieXBhc3NfZGlzcF9jbGsgPQorCQkJcHhsX2Ns a19wYXJhbXMuZGZzX2J5cGFzc19kaXNwbGF5X2Nsb2NrOworCQlhY3R1YWxfY2xvY2sgPSBweGxf Y2xrX3BhcmFtcy5kZnNfYnlwYXNzX2Rpc3BsYXlfY2xvY2s7CisJfQorCisJLyogZnJvbSBwb3dl ciBkb3duLCB3ZSBuZWVkIG1hcmsgdGhlIGNsb2NrIHN0YXRlIGFzIENsb2Nrc1N0YXRlTm9taW5h bAorCSAqIGZyb20gSFdSZXNldCwgc28gd2hlbiByZXN1bWUgd2Ugd2lsbCBjYWxsIHBwbGliIHZv bHRhZ2UgcmVndWxhdG9yLiovCisJaWYgKHJlcXVlc3RlZF9jbGtfa2h6ID09IDApCisJCWNsa19t Z3JfZGNlLT5jdXJfbWluX2Nsa3Nfc3RhdGUgPSBETV9QUF9DTE9DS1NfU1RBVEVfTk9NSU5BTDsK KworCWlmIChkbWN1ICYmIGRtY3UtPmZ1bmNzLT5pc19kbWN1X2luaXRpYWxpemVkKGRtY3UpKQor CQlkbWN1LT5mdW5jcy0+c2V0X3Bzcl93YWl0X2xvb3AoZG1jdSwgYWN0dWFsX2Nsb2NrIC8gMTAw MCAvIDcpOworCisJcmV0dXJuIGFjdHVhbF9jbG9jazsKK30KKworCitzdGF0aWMgdm9pZCBkY2Vf Y2xvY2tfcmVhZF9pbnRlZ3JhdGVkX2luZm8oc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19t Z3JfZGNlKQoreworCXN0cnVjdCBkY19kZWJ1Z19vcHRpb25zICpkZWJ1ZyA9ICZjbGtfbWdyX2Rj ZS0+YmFzZS5jdHgtPmRjLT5kZWJ1ZzsKKwlzdHJ1Y3QgZGNfYmlvcyAqYnAgPSBjbGtfbWdyX2Rj ZS0+YmFzZS5jdHgtPmRjX2Jpb3M7CisJc3RydWN0IGludGVncmF0ZWRfaW5mbyBpbmZvID0geyB7 IHsgMCB9IH0gfTsKKwlzdHJ1Y3QgZGNfZmlybXdhcmVfaW5mbyBmd19pbmZvID0geyB7IDAgfSB9 OworCWludCBpOworCisJaWYgKGJwLT5pbnRlZ3JhdGVkX2luZm8pCisJCWluZm8gPSAqYnAtPmlu dGVncmF0ZWRfaW5mbzsKKworCWNsa19tZ3JfZGNlLT5kZW50aXN0X3Zjb19mcmVxX2toeiA9IGlu Zm8uZGVudGlzdF92Y29fZnJlcTsKKwlpZiAoY2xrX21ncl9kY2UtPmRlbnRpc3RfdmNvX2ZyZXFf a2h6ID09IDApIHsKKwkJYnAtPmZ1bmNzLT5nZXRfZmlybXdhcmVfaW5mbyhicCwgJmZ3X2luZm8p OworCQljbGtfbWdyX2RjZS0+ZGVudGlzdF92Y29fZnJlcV9raHogPQorCQkJZndfaW5mby5zbXVf Z3B1X3BsbF9vdXRwdXRfZnJlcTsKKwkJaWYgKGNsa19tZ3JfZGNlLT5kZW50aXN0X3Zjb19mcmVx X2toeiA9PSAwKQorCQkJY2xrX21ncl9kY2UtPmRlbnRpc3RfdmNvX2ZyZXFfa2h6ID0gMzYwMDAw MDsKKwl9CisKKwkvKnVwZGF0ZSB0aGUgbWF4aW11bSBkaXNwbGF5IGNsb2NrIGZvciBlYWNoIHBv d2VyIHN0YXRlKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNQkVSX09GX0RJU1BfQ0xLX1ZPTFRBR0U7 ICsraSkgeworCQllbnVtIGRtX3BwX2Nsb2Nrc19zdGF0ZSBjbGtfc3RhdGUgPSBETV9QUF9DTE9D S1NfU1RBVEVfSU5WQUxJRDsKKworCQlzd2l0Y2ggKGkpIHsKKwkJY2FzZSAwOgorCQkJY2xrX3N0 YXRlID0gRE1fUFBfQ0xPQ0tTX1NUQVRFX1VMVFJBX0xPVzsKKwkJCWJyZWFrOworCisJCWNhc2Ug MToKKwkJCWNsa19zdGF0ZSA9IERNX1BQX0NMT0NLU19TVEFURV9MT1c7CisJCQlicmVhazsKKwor CQljYXNlIDI6CisJCQljbGtfc3RhdGUgPSBETV9QUF9DTE9DS1NfU1RBVEVfTk9NSU5BTDsKKwkJ CWJyZWFrOworCisJCWNhc2UgMzoKKwkJCWNsa19zdGF0ZSA9IERNX1BQX0NMT0NLU19TVEFURV9Q RVJGT1JNQU5DRTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQljbGtfc3RhdGUgPSBETV9Q UF9DTE9DS1NfU1RBVEVfSU5WQUxJRDsKKwkJCWJyZWFrOworCQl9CisKKwkJLypEbyBub3QgYWxs b3cgYmFkIFZCSU9TL1NCSU9TIHRvIG92ZXJyaWRlIHdpdGggaW52YWxpZCB2YWx1ZXMsCisJCSAq IGNoZWNrIGZvciA+IDEwME1IeiovCisJCWlmIChpbmZvLmRpc3BfY2xrX3ZvbHRhZ2VbaV0ubWF4 X3N1cHBvcnRlZF9jbGsgPj0gMTAwMDAwKQorCQkJY2xrX21ncl9kY2UtPm1heF9jbGtzX2J5X3N0 YXRlW2Nsa19zdGF0ZV0uZGlzcGxheV9jbGtfa2h6ID0KKwkJCQlpbmZvLmRpc3BfY2xrX3ZvbHRh Z2VbaV0ubWF4X3N1cHBvcnRlZF9jbGs7CisJfQorCisJaWYgKCFkZWJ1Zy0+ZGlzYWJsZV9kZnNf YnlwYXNzICYmIGJwLT5pbnRlZ3JhdGVkX2luZm8pCisJCWlmIChicC0+aW50ZWdyYXRlZF9pbmZv LT5ncHVfY2FwX2luZm8gJiBERlNfQllQQVNTX0VOQUJMRSkKKwkJCWNsa19tZ3JfZGNlLT5kZnNf YnlwYXNzX2VuYWJsZWQgPSB0cnVlOworfQorCit2b2lkIGRjZV9jbG9ja19yZWFkX3NzX2luZm8o c3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3JfZGNlKQoreworCXN0cnVjdCBkY19iaW9z ICpicCA9IGNsa19tZ3JfZGNlLT5iYXNlLmN0eC0+ZGNfYmlvczsKKwlpbnQgc3NfaW5mb19udW0g PSBicC0+ZnVuY3MtPmdldF9zc19lbnRyeV9udW1iZXIoCisJCQlicCwgQVNfU0lHTkFMX1RZUEVf R1BVX1BMTCk7CisKKwlpZiAoc3NfaW5mb19udW0pIHsKKwkJc3RydWN0IHNwcmVhZF9zcGVjdHJ1 bV9pbmZvIGluZm8gPSB7IHsgMCB9IH07CisJCWVudW0gYnBfcmVzdWx0IHJlc3VsdCA9IGJwLT5m dW5jcy0+Z2V0X3NwcmVhZF9zcGVjdHJ1bV9pbmZvKAorCQkJCWJwLCBBU19TSUdOQUxfVFlQRV9H UFVfUExMLCAwLCAmaW5mbyk7CisKKwkJLyogQmFzZWQgb24gVkJJT1MsIFZCSU9TIHdpbGwga2Vl cCBlbnRyeSBmb3IgR1BVIFBMTCBTUworCQkgKiBldmVuIGlmIFNTIG5vdCBlbmFibGVkIGFuZCBp biB0aGF0IGNhc2UKKwkJICogU1NJbmZvLnNwcmVhZFNwZWN0cnVtUGVyY2VudGFnZSAhPTAgd291 bGQgYmUgc2lnbgorCQkgKiB0aGF0IFNTIGlzIGVuYWJsZWQKKwkJICovCisJCWlmIChyZXN1bHQg PT0gQlBfUkVTVUxUX09LICYmCisJCQkJaW5mby5zcHJlYWRfc3BlY3RydW1fcGVyY2VudGFnZSAh PSAwKSB7CisJCQljbGtfbWdyX2RjZS0+c3Nfb25fZHByZWZjbGsgPSB0cnVlOworCQkJY2xrX21n cl9kY2UtPmRwcmVmY2xrX3NzX2RpdmlkZXIgPSBpbmZvLnNwcmVhZF9wZXJjZW50YWdlX2Rpdmlk ZXI7CisKKwkJCWlmIChpbmZvLnR5cGUuQ0VOVEVSX01PREUgPT0gMCkgeworCQkJCS8qIFRPRE86 IEN1cnJlbnRseSBmb3IgRFAgUmVmZXJlbmNlIGNsb2NrIHdlCisJCQkJICogbmVlZCBvbmx5IFNT IHBlcmNlbnRhZ2UgZm9yCisJCQkJICogZG93bnNwcmVhZCAqLworCQkJCWNsa19tZ3JfZGNlLT5k cHJlZmNsa19zc19wZXJjZW50YWdlID0KKwkJCQkJCWluZm8uc3ByZWFkX3NwZWN0cnVtX3BlcmNl bnRhZ2U7CisJCQl9CisKKwkJCXJldHVybjsKKwkJfQorCisJCXJlc3VsdCA9IGJwLT5mdW5jcy0+ Z2V0X3NwcmVhZF9zcGVjdHJ1bV9pbmZvKAorCQkJCWJwLCBBU19TSUdOQUxfVFlQRV9ESVNQTEFZ X1BPUlQsIDAsICZpbmZvKTsKKworCQkvKiBCYXNlZCBvbiBWQklPUywgVkJJT1Mgd2lsbCBrZWVw IGVudHJ5IGZvciBEUFJFRkNMSyBTUworCQkgKiBldmVuIGlmIFNTIG5vdCBlbmFibGVkIGFuZCBp biB0aGF0IGNhc2UKKwkJICogU1NJbmZvLnNwcmVhZFNwZWN0cnVtUGVyY2VudGFnZSAhPTAgd291 bGQgYmUgc2lnbgorCQkgKiB0aGF0IFNTIGlzIGVuYWJsZWQKKwkJICovCisJCWlmIChyZXN1bHQg PT0gQlBfUkVTVUxUX09LICYmCisJCQkJaW5mby5zcHJlYWRfc3BlY3RydW1fcGVyY2VudGFnZSAh PSAwKSB7CisJCQljbGtfbWdyX2RjZS0+c3Nfb25fZHByZWZjbGsgPSB0cnVlOworCQkJY2xrX21n cl9kY2UtPmRwcmVmY2xrX3NzX2RpdmlkZXIgPSBpbmZvLnNwcmVhZF9wZXJjZW50YWdlX2Rpdmlk ZXI7CisKKwkJCWlmIChpbmZvLnR5cGUuQ0VOVEVSX01PREUgPT0gMCkgeworCQkJCS8qIEN1cnJl bnRseSBmb3IgRFAgUmVmZXJlbmNlIGNsb2NrIHdlCisJCQkJICogbmVlZCBvbmx5IFNTIHBlcmNl bnRhZ2UgZm9yCisJCQkJICogZG93bnNwcmVhZCAqLworCQkJCWNsa19tZ3JfZGNlLT5kcHJlZmNs a19zc19wZXJjZW50YWdlID0KKwkJCQkJCWluZm8uc3ByZWFkX3NwZWN0cnVtX3BlcmNlbnRhZ2U7 CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRjZV9wcGxpYl9hcHBseV9kaXNwbGF5 X3JlcXVpcmVtZW50cygKKwlzdHJ1Y3QgZGMgKmRjLAorCXN0cnVjdCBkY19zdGF0ZSAqY29udGV4 dCkKK3sKKwlzdHJ1Y3QgZG1fcHBfZGlzcGxheV9jb25maWd1cmF0aW9uICpwcF9kaXNwbGF5X2Nm ZyA9ICZjb250ZXh0LT5wcF9kaXNwbGF5X2NmZzsKKworCXBwX2Rpc3BsYXlfY2ZnLT5hdmFpbF9t Y2xrX3N3aXRjaF90aW1lX3VzID0gZGNlMTEwX2dldF9taW5fdmJsYW5rX3RpbWVfdXMoY29udGV4 dCk7CisKKwlkY2UxMTBfZmlsbF9kaXNwbGF5X2NvbmZpZ3MoY29udGV4dCwgcHBfZGlzcGxheV9j ZmcpOworCisJaWYgKG1lbWNtcCgmZGMtPmN1cnJlbnRfc3RhdGUtPnBwX2Rpc3BsYXlfY2ZnLCBw cF9kaXNwbGF5X2NmZywgc2l6ZW9mKCpwcF9kaXNwbGF5X2NmZykpICE9ICAwKQorCQlkbV9wcF9h cHBseV9kaXNwbGF5X3JlcXVpcmVtZW50cyhkYy0+Y3R4LCBwcF9kaXNwbGF5X2NmZyk7Cit9CisK K3N0YXRpYyB2b2lkIGRjZV91cGRhdGVfY2xvY2tzKHN0cnVjdCBjbGtfbWdyICpjbGtfbWdyX2Jh c2UsCisJCQlzdHJ1Y3QgZGNfc3RhdGUgKmNvbnRleHQsCisJCQlib29sIHNhZmVfdG9fbG93ZXIp Cit7CisJc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3JfZGNlID0gVE9fQ0xLX01HUl9J TlRFUk5BTChjbGtfbWdyX2Jhc2UpOworCXN0cnVjdCBkbV9wcF9wb3dlcl9sZXZlbF9jaGFuZ2Vf cmVxdWVzdCBsZXZlbF9jaGFuZ2VfcmVxOworCWludCBwYXRjaGVkX2Rpc3BfY2xrID0gY29udGV4 dC0+YndfY3R4LmJ3LmRjZS5kaXNwY2xrX2toejsKKworCS8qVE9ETzogVy9BIGZvciBkYWwzIGxp bnV4LCBpbnZlc3RpZ2F0ZSB3aHkgdGhpcyB3b3JrcyAqLworCWlmICghY2xrX21ncl9kY2UtPmRm c19ieXBhc3NfYWN0aXZlKQorCQlwYXRjaGVkX2Rpc3BfY2xrID0gcGF0Y2hlZF9kaXNwX2NsayAq IDExNSAvIDEwMDsKKworCWxldmVsX2NoYW5nZV9yZXEucG93ZXJfbGV2ZWwgPSBkY2VfZ2V0X3Jl cXVpcmVkX2Nsb2Nrc19zdGF0ZShjbGtfbWdyX2Jhc2UsIGNvbnRleHQpOworCS8qIGdldCBtYXgg Y2xvY2sgc3RhdGUgZnJvbSBQUExJQiAqLworCWlmICgobGV2ZWxfY2hhbmdlX3JlcS5wb3dlcl9s ZXZlbCA8IGNsa19tZ3JfZGNlLT5jdXJfbWluX2Nsa3Nfc3RhdGUgJiYgc2FmZV90b19sb3dlcikK KwkJCXx8IGxldmVsX2NoYW5nZV9yZXEucG93ZXJfbGV2ZWwgPiBjbGtfbWdyX2RjZS0+Y3VyX21p bl9jbGtzX3N0YXRlKSB7CisJCWlmIChkbV9wcF9hcHBseV9wb3dlcl9sZXZlbF9jaGFuZ2VfcmVx dWVzdChjbGtfbWdyX2Jhc2UtPmN0eCwgJmxldmVsX2NoYW5nZV9yZXEpKQorCQkJY2xrX21ncl9k Y2UtPmN1cl9taW5fY2xrc19zdGF0ZSA9IGxldmVsX2NoYW5nZV9yZXEucG93ZXJfbGV2ZWw7CisJ fQorCisJaWYgKHNob3VsZF9zZXRfY2xvY2soc2FmZV90b19sb3dlciwgcGF0Y2hlZF9kaXNwX2Ns aywgY2xrX21ncl9iYXNlLT5jbGtzLmRpc3BjbGtfa2h6KSkgeworCQlwYXRjaGVkX2Rpc3BfY2xr ID0gZGNlX3NldF9jbG9jayhjbGtfbWdyX2Jhc2UsIHBhdGNoZWRfZGlzcF9jbGspOworCQljbGtf bWdyX2Jhc2UtPmNsa3MuZGlzcGNsa19raHogPSBwYXRjaGVkX2Rpc3BfY2xrOworCX0KKwlkY2Vf cHBsaWJfYXBwbHlfZGlzcGxheV9yZXF1aXJlbWVudHMoY2xrX21ncl9iYXNlLT5jdHgtPmRjLCBj b250ZXh0KTsKK30KKworCisKKworCisKKworCitzdGF0aWMgc3RydWN0IGNsa19tZ3JfZnVuY3Mg ZGNlX2Z1bmNzID0geworCS5nZXRfZHBfcmVmX2Nsa19mcmVxdWVuY3kgPSBkY2VfZ2V0X2RwX3Jl Zl9mcmVxX2toeiwKKwkudXBkYXRlX2Nsb2NrcyA9IGRjZV91cGRhdGVfY2xvY2tzCit9OworCit2 b2lkIGRjZV9jbGtfbWdyX2NvbnN0cnVjdCgKKwkJc3RydWN0IGRjX2NvbnRleHQgKmN0eCwKKwkJ c3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3IpCit7CisJc3RydWN0IGNsa19tZ3IgKmJh c2UgPSAmY2xrX21nci0+YmFzZTsKKwlzdHJ1Y3QgZG1fcHBfc3RhdGljX2Nsb2NrX2luZm8gc3Rh dGljX2Nsa19pbmZvID0gezB9OworCisJbWVtY3B5KGNsa19tZ3ItPm1heF9jbGtzX2J5X3N0YXRl LAorCQlkY2U4MF9tYXhfY2xrc19ieV9zdGF0ZSwKKwkJc2l6ZW9mKGRjZTgwX21heF9jbGtzX2J5 X3N0YXRlKSk7CisKKwliYXNlLT5jdHggPSBjdHg7CisJYmFzZS0+ZnVuY3MgPSAmZGNlX2Z1bmNz OworCisJY2xrX21nci0+cmVncyA9ICZkaXNwX2Nsa19yZWdzOworCWNsa19tZ3ItPmNsa19tZ3Jf c2hpZnQgPSAmZGlzcF9jbGtfc2hpZnQ7CisJY2xrX21nci0+Y2xrX21ncl9tYXNrID0gJmRpc3Bf Y2xrX21hc2s7CisJY2xrX21nci0+ZGZzX2J5cGFzc19kaXNwX2NsayA9IDA7CisKKwljbGtfbWdy LT5kcHJlZmNsa19zc19wZXJjZW50YWdlID0gMDsKKwljbGtfbWdyLT5kcHJlZmNsa19zc19kaXZp ZGVyID0gMTAwMDsKKwljbGtfbWdyLT5zc19vbl9kcHJlZmNsayA9IGZhbHNlOworCisJaWYgKGRt X3BwX2dldF9zdGF0aWNfY2xvY2tzKGN0eCwgJnN0YXRpY19jbGtfaW5mbykpCisJCWNsa19tZ3It Pm1heF9jbGtzX3N0YXRlID0gc3RhdGljX2Nsa19pbmZvLm1heF9jbG9ja3Nfc3RhdGU7CisJZWxz ZQorCQljbGtfbWdyLT5tYXhfY2xrc19zdGF0ZSA9IERNX1BQX0NMT0NLU19TVEFURV9OT01JTkFM OworCWNsa19tZ3ItPmN1cl9taW5fY2xrc19zdGF0ZSA9IERNX1BQX0NMT0NLU19TVEFURV9JTlZB TElEOworCisJZGNlX2Nsb2NrX3JlYWRfaW50ZWdyYXRlZF9pbmZvKGNsa19tZ3IpOworCWRjZV9j bG9ja19yZWFkX3NzX2luZm8oY2xrX21ncik7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvZGlzcGxheS9kYy9jbGtfbWdyL2RjZTEwMC9kY2VfY2xrX21nci5oIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Nsa19tZ3IvZGNlMTAwL2RjZV9jbGtfbWdyLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiYzdhYgotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9jbGtfbWdyL2RjZTEwMC9kY2VfY2xr X21nci5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMi0xNiBBZHZhbmNl ZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICog YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgor ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S CisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogQU1E CisgKgorICovCisKKworI2lmbmRlZiBfRENFX0NMS19NR1JfSF8KKyNkZWZpbmUgX0RDRV9DTEtf TUdSX0hfCisKKyNpbmNsdWRlICJkYy5oIgorCisvKiBTdGFydGluZyBESUQgZm9yIGVhY2ggcmFu Z2UgKi8KK2VudW0gZGVudGlzdF9iYXNlX2RpdmlkZXJfaWQgeworCURFTlRJU1RfQkFTRV9ESURf MSA9IDB4MDgsCisJREVOVElTVF9CQVNFX0RJRF8yID0gMHg0MCwKKwlERU5USVNUX0JBU0VfRElE XzMgPSAweDYwLAorCURFTlRJU1RfQkFTRV9ESURfNCA9IDB4N2UsCisJREVOVElTVF9NQVhfRElE ID0gMHg3ZgorfTsKKworLyogU3RhcnRpbmcgcG9pbnQgYW5kIHN0ZXAgc2l6ZSBmb3IgZWFjaCBk aXZpZGVyIHJhbmdlLiovCitlbnVtIGRlbnRpc3RfZGl2aWRlcl9yYW5nZSB7CisJREVOVElTVF9E SVZJREVSX1JBTkdFXzFfU1RBUlQgPSA4LCAgIC8qIDIuMDAgICovCisJREVOVElTVF9ESVZJREVS X1JBTkdFXzFfU1RFUCAgPSAxLCAgIC8qIDAuMjUgICovCisJREVOVElTVF9ESVZJREVSX1JBTkdF XzJfU1RBUlQgPSA2NCwgIC8qIDE2LjAwICovCisJREVOVElTVF9ESVZJREVSX1JBTkdFXzJfU1RF UCAgPSAyLCAgIC8qIDAuNTAgICovCisJREVOVElTVF9ESVZJREVSX1JBTkdFXzNfU1RBUlQgPSAx MjgsIC8qIDMyLjAwICovCisJREVOVElTVF9ESVZJREVSX1JBTkdFXzNfU1RFUCAgPSA0LCAgIC8q IDEuMDAgICovCisJREVOVElTVF9ESVZJREVSX1JBTkdFXzRfU1RBUlQgPSAyNDgsIC8qIDYyLjAw ICovCisJREVOVElTVF9ESVZJREVSX1JBTkdFXzRfU1RFUCAgPSAyNjQsIC8qIDY2LjAwICovCisJ REVOVElTVF9ESVZJREVSX1JBTkdFX1NDQUxFX0ZBQ1RPUiA9IDQKK307CisKKy8qIGZ1bmN0aW9u cyBzaGFyZWQgYnkgb3RoZXIgZGNlIGNsayBtZ3JzICovCitpbnQgZGNlX2FkanVzdF9kcF9yZWZf ZnJlcV9mb3Jfc3Moc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3JfZGNlLCBpbnQgZHBf cmVmX2Nsa19raHopOworaW50IGRjZV9nZXRfZHBfcmVmX2ZyZXFfa2h6KHN0cnVjdCBjbGtfbWdy ICpjbGtfbWdyX2Jhc2UpOworZW51bSBkbV9wcF9jbG9ja3Nfc3RhdGUgZGNlX2dldF9yZXF1aXJl ZF9jbG9ja3Nfc3RhdGUoCisJc3RydWN0IGNsa19tZ3IgKmNsa19tZ3JfYmFzZSwKKwlzdHJ1Y3Qg ZGNfc3RhdGUgKmNvbnRleHQpOworCit1aW50MzJfdCBkY2VfZ2V0X21heF9waXhlbF9jbG9ja19m b3JfYWxsX3BhdGhzKHN0cnVjdCBkY19zdGF0ZSAqY29udGV4dCk7CisKKwordm9pZCBkY2VfY2xr X21ncl9jb25zdHJ1Y3QoCisJCXN0cnVjdCBkY19jb250ZXh0ICpjdHgsCisJCXN0cnVjdCBjbGtf bWdyX2ludGVybmFsICpjbGtfbWdyX2RjZSk7CisKK3ZvaWQgZGNlX2Nsb2NrX3JlYWRfc3NfaW5m byhzdHJ1Y3QgY2xrX21ncl9pbnRlcm5hbCAqZGNjZ19kY2UpOworCitpbnQgZGNlMTJfZ2V0X2Rw X3JlZl9mcmVxX2toeihzdHJ1Y3QgY2xrX21nciAqZGNjZyk7CisKK2ludCBkY2Vfc2V0X2Nsb2Nr KAorCXN0cnVjdCBjbGtfbWdyICpjbGtfbWdyX2Jhc2UsCisJaW50IHJlcXVlc3RlZF9jbGtfa2h6 KTsKKworCit2b2lkIGRjZV9jbGtfbWdyX2Rlc3Ryb3koc3RydWN0IGNsa19tZ3IgKipjbGtfbWdy KTsKKworaW50IGRlbnRpc3RfZ2V0X2RpdmlkZXJfZnJvbV9kaWQoaW50IGRpZCk7CisKKyNlbmRp ZiAvKiBfRENFX0NMS19NR1JfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv ZGlzcGxheS9kYy9jbGtfbWdyL2RjZTExMC9kY2UxMTBfY2xrX21nci5jIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9kaXNwbGF5L2RjL2Nsa19tZ3IvZGNlMTEwL2RjZTExMF9jbGtfbWdyLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFhOTJjMQotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9jbGtfbWdyL2RjZTExMC9kY2UxMTBfY2xr X21nci5jCkBAIC0wLDAgKzEsMjc2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTItMTYgQWR2YW5j ZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAq IGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoK KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBT SEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBG T1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IEFN RAorICoKKyAqLworCisjaW5jbHVkZSAiY29yZV90eXBlcy5oIgorI2luY2x1ZGUgImNsa19tZ3Jf aW50ZXJuYWwuaCIKKworI2luY2x1ZGUgImRjZS9kY2VfMTFfMF9kLmgiCisjaW5jbHVkZSAiZGNl L2RjZV8xMV8wX3NoX21hc2suaCIKKyNpbmNsdWRlICJkY2UxMTBfY2xrX21nci5oIgorI2luY2x1 ZGUgIi4uL2Nsa19tZ3IvZGNlMTAwL2RjZV9jbGtfbWdyLmgiCisKKy8qIHNldCByZWdpc3RlciBv ZmZzZXQgKi8KKyNkZWZpbmUgU1IocmVnX25hbWUpXAorCS5yZWdfbmFtZSA9IG1tICMjIHJlZ19u YW1lCisKKy8qIHNldCByZWdpc3RlciBvZmZzZXQgd2l0aCBpbnN0YW5jZSAqLworI2RlZmluZSBT UkkocmVnX25hbWUsIGJsb2NrLCBpZClcCisJLnJlZ19uYW1lID0gbW0gIyMgYmxvY2sgIyMgaWQg IyMgXyAjIyByZWdfbmFtZQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19tZ3JfcmVnaXN0ZXJz IGRpc3BfY2xrX3JlZ3MgPSB7CisJCUNMS19DT01NT05fUkVHX0xJU1RfRENFX0JBU0UoKQorfTsK Kworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfbWdyX3NoaWZ0IGRpc3BfY2xrX3NoaWZ0ID0gewor CQlDTEtfQ09NTU9OX01BU0tfU0hfTElTVF9EQ0VfQ09NTU9OX0JBU0UoX19TSElGVCkKK307CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX21ncl9tYXNrIGRpc3BfY2xrX21hc2sgPSB7CisJCUNM S19DT01NT05fTUFTS19TSF9MSVNUX0RDRV9DT01NT05fQkFTRShfTUFTSykKK307CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3Qgc3RhdGVfZGVwZW5kZW50X2Nsb2NrcyBkY2UxMTBfbWF4X2Nsa3NfYnlf c3RhdGVbXSA9IHsKKy8qQ2xvY2tzU3RhdGVJbnZhbGlkIC0gc2hvdWxkIG5vdCBiZSB1c2VkKi8K K3sgLmRpc3BsYXlfY2xrX2toeiA9IDAsIC5waXhlbF9jbGtfa2h6ID0gMCB9LAorLypDbG9ja3NT dGF0ZVVsdHJhTG93IC0gY3VycmVudGx5IGJ5IEhXIGRlc2lnbiB0ZWFtIG5vdCBzdXBwb3NlZCB0 byBiZSB1c2VkKi8KK3sgLmRpc3BsYXlfY2xrX2toeiA9IDM1MjAwMCwgLnBpeGVsX2Nsa19raHog PSAzMzAwMDAgfSwKKy8qQ2xvY2tzU3RhdGVMb3cqLworeyAuZGlzcGxheV9jbGtfa2h6ID0gMzUy MDAwLCAucGl4ZWxfY2xrX2toeiA9IDMzMDAwMCB9LAorLypDbG9ja3NTdGF0ZU5vbWluYWwqLwor eyAuZGlzcGxheV9jbGtfa2h6ID0gNDY3MDAwLCAucGl4ZWxfY2xrX2toeiA9IDQwMDAwMCB9LAor LypDbG9ja3NTdGF0ZVBlcmZvcm1hbmNlKi8KK3sgLmRpc3BsYXlfY2xrX2toeiA9IDY0MzAwMCwg LnBpeGVsX2Nsa19raHogPSA0MDAwMDAgfSB9OworCitzdGF0aWMgaW50IGRldGVybWluZV9zY2xr X2Zyb21fYm91bmRpbmdfYm94KAorCQljb25zdCBzdHJ1Y3QgZGMgKmRjLAorCQlpbnQgcmVxdWly ZWRfc2NsaykKK3sKKwlpbnQgaTsKKworCS8qCisJICogU29tZSBhc2ljcyBkbyBub3QgZ2l2ZSB1 cyBzY2xrIGxldmVscywgc28gd2UganVzdCByZXBvcnQgdGhlIGFjdHVhbAorCSAqIHJlcXVpcmVk IHNjbGsKKwkgKi8KKwlpZiAoZGMtPnNjbGtfbHZscy5udW1fbGV2ZWxzID09IDApCisJCXJldHVy biByZXF1aXJlZF9zY2xrOworCisJZm9yIChpID0gMDsgaSA8IGRjLT5zY2xrX2x2bHMubnVtX2xl dmVsczsgaSsrKSB7CisJCWlmIChkYy0+c2Nsa19sdmxzLmNsb2Nrc19pbl9raHpbaV0gPj0gcmVx dWlyZWRfc2NsaykKKwkJCXJldHVybiBkYy0+c2Nsa19sdmxzLmNsb2Nrc19pbl9raHpbaV07CisJ fQorCS8qCisJICogZXZlbiBtYXhpbXVtIGxldmVsIGNvdWxkIG5vdCBzYXRpc2Z5IHJlcXVpcmVt ZW50LCB0aGlzCisJICogaXMgdW5leHBlY3RlZCBhdCB0aGlzIHN0YWdlLCBzaG91bGQgaGF2ZSBi ZWVuIGNhdWdodCBhdAorCSAqIHZhbGlkYXRpb24gdGltZQorCSAqLworCUFTU0VSVCgwKTsKKwly ZXR1cm4gZGMtPnNjbGtfbHZscy5jbG9ja3NfaW5fa2h6W2RjLT5zY2xrX2x2bHMubnVtX2xldmVs cyAtIDFdOworfQorCit1aW50MzJfdCBkY2UxMTBfZ2V0X21pbl92YmxhbmtfdGltZV91cyhjb25z dCBzdHJ1Y3QgZGNfc3RhdGUgKmNvbnRleHQpCit7CisJdWludDhfdCBqOworCXVpbnQzMl90IG1p bl92ZXJ0aWNhbF9ibGFua190aW1lID0gLTE7CisKKwlmb3IgKGogPSAwOyBqIDwgY29udGV4dC0+ c3RyZWFtX2NvdW50OyBqKyspIHsKKwkJc3RydWN0IGRjX3N0cmVhbV9zdGF0ZSAqc3RyZWFtID0g Y29udGV4dC0+c3RyZWFtc1tqXTsKKwkJdWludDMyX3QgdmVydGljYWxfYmxhbmtfaW5fcGl4ZWxz ID0gMDsKKwkJdWludDMyX3QgdmVydGljYWxfYmxhbmtfdGltZSA9IDA7CisKKwkJdmVydGljYWxf YmxhbmtfaW5fcGl4ZWxzID0gc3RyZWFtLT50aW1pbmcuaF90b3RhbCAqCisJCQkoc3RyZWFtLT50 aW1pbmcudl90b3RhbAorCQkJIC0gc3RyZWFtLT50aW1pbmcudl9hZGRyZXNzYWJsZSk7CisKKwkJ dmVydGljYWxfYmxhbmtfdGltZSA9IHZlcnRpY2FsX2JsYW5rX2luX3BpeGVscworCQkJKiAxMDAw MCAvIHN0cmVhbS0+dGltaW5nLnBpeF9jbGtfMTAwaHo7CisKKwkJaWYgKG1pbl92ZXJ0aWNhbF9i bGFua190aW1lID4gdmVydGljYWxfYmxhbmtfdGltZSkKKwkJCW1pbl92ZXJ0aWNhbF9ibGFua190 aW1lID0gdmVydGljYWxfYmxhbmtfdGltZTsKKwl9CisKKwlyZXR1cm4gbWluX3ZlcnRpY2FsX2Js YW5rX3RpbWU7Cit9CisKK3ZvaWQgZGNlMTEwX2ZpbGxfZGlzcGxheV9jb25maWdzKAorCWNvbnN0 IHN0cnVjdCBkY19zdGF0ZSAqY29udGV4dCwKKwlzdHJ1Y3QgZG1fcHBfZGlzcGxheV9jb25maWd1 cmF0aW9uICpwcF9kaXNwbGF5X2NmZykKK3sKKwlpbnQgajsKKwlpbnQgbnVtX2NmZ3MgPSAwOwor CisJZm9yIChqID0gMDsgaiA8IGNvbnRleHQtPnN0cmVhbV9jb3VudDsgaisrKSB7CisJCWludCBr OworCisJCWNvbnN0IHN0cnVjdCBkY19zdHJlYW1fc3RhdGUgKnN0cmVhbSA9IGNvbnRleHQtPnN0 cmVhbXNbal07CisJCXN0cnVjdCBkbV9wcF9zaW5nbGVfZGlzcF9jb25maWcgKmNmZyA9CisJCQkm cHBfZGlzcGxheV9jZmctPmRpc3BfY29uZmlnc1tudW1fY2Znc107CisJCWNvbnN0IHN0cnVjdCBw aXBlX2N0eCAqcGlwZV9jdHggPSBOVUxMOworCisJCWZvciAoayA9IDA7IGsgPCBNQVhfUElQRVM7 IGsrKykKKwkJCWlmIChzdHJlYW0gPT0gY29udGV4dC0+cmVzX2N0eC5waXBlX2N0eFtrXS5zdHJl YW0pIHsKKwkJCQlwaXBlX2N0eCA9ICZjb250ZXh0LT5yZXNfY3R4LnBpcGVfY3R4W2tdOworCQkJ CWJyZWFrOworCQkJfQorCisJCUFTU0VSVChwaXBlX2N0eCAhPSBOVUxMKTsKKworCQkvKiBvbmx5 IG5vdGlmeSBhY3RpdmUgc3RyZWFtICovCisJCWlmIChzdHJlYW0tPmRwbXNfb2ZmKQorCQkJY29u dGludWU7CisKKwkJbnVtX2NmZ3MrKzsKKwkJY2ZnLT5zaWduYWwgPSBwaXBlX2N0eC0+c3RyZWFt LT5zaWduYWw7CisJCWNmZy0+cGlwZV9pZHggPSBwaXBlX2N0eC0+c3RyZWFtX3Jlcy50Zy0+aW5z dDsKKwkJY2ZnLT5zcmNfaGVpZ2h0ID0gc3RyZWFtLT5zcmMuaGVpZ2h0OworCQljZmctPnNyY193 aWR0aCA9IHN0cmVhbS0+c3JjLndpZHRoOworCQljZmctPmRkaV9jaGFubmVsX21hcHBpbmcgPQor CQkJc3RyZWFtLT5saW5rLT5kZGlfY2hhbm5lbF9tYXBwaW5nLnJhdzsKKwkJY2ZnLT50cmFuc21p dHRlciA9CisJCQlzdHJlYW0tPmxpbmstPmxpbmtfZW5jLT50cmFuc21pdHRlcjsKKwkJY2ZnLT5s aW5rX3NldHRpbmdzLmxhbmVfY291bnQgPQorCQkJc3RyZWFtLT5saW5rLT5jdXJfbGlua19zZXR0 aW5ncy5sYW5lX2NvdW50OworCQljZmctPmxpbmtfc2V0dGluZ3MubGlua19yYXRlID0KKwkJCXN0 cmVhbS0+bGluay0+Y3VyX2xpbmtfc2V0dGluZ3MubGlua19yYXRlOworCQljZmctPmxpbmtfc2V0 dGluZ3MubGlua19zcHJlYWQgPQorCQkJc3RyZWFtLT5saW5rLT5jdXJfbGlua19zZXR0aW5ncy5s aW5rX3NwcmVhZDsKKwkJY2ZnLT5zeW1fY2xvY2sgPSBzdHJlYW0tPnBoeV9waXhfY2xrOworCQkv KiBSb3VuZCB2X3JlZnJlc2gqLworCQljZmctPnZfcmVmcmVzaCA9IHN0cmVhbS0+dGltaW5nLnBp eF9jbGtfMTAwaHogKiAxMDA7CisJCWNmZy0+dl9yZWZyZXNoIC89IHN0cmVhbS0+dGltaW5nLmhf dG90YWw7CisJCWNmZy0+dl9yZWZyZXNoID0gKGNmZy0+dl9yZWZyZXNoICsgc3RyZWFtLT50aW1p bmcudl90b3RhbCAvIDIpCisJCQkJCQkJLyBzdHJlYW0tPnRpbWluZy52X3RvdGFsOworCX0KKwor CXBwX2Rpc3BsYXlfY2ZnLT5kaXNwbGF5X2NvdW50ID0gbnVtX2NmZ3M7Cit9CisKK3ZvaWQgZGNl MTFfcHBsaWJfYXBwbHlfZGlzcGxheV9yZXF1aXJlbWVudHMoCisJc3RydWN0IGRjICpkYywKKwlz dHJ1Y3QgZGNfc3RhdGUgKmNvbnRleHQpCit7CisJc3RydWN0IGRtX3BwX2Rpc3BsYXlfY29uZmln dXJhdGlvbiAqcHBfZGlzcGxheV9jZmcgPSAmY29udGV4dC0+cHBfZGlzcGxheV9jZmc7CisKKwlw cF9kaXNwbGF5X2NmZy0+YWxsX2Rpc3BsYXlzX2luX3N5bmMgPQorCQljb250ZXh0LT5id19jdHgu YncuZGNlLmFsbF9kaXNwbGF5c19pbl9zeW5jOworCXBwX2Rpc3BsYXlfY2ZnLT5uYl9wc3RhdGVf c3dpdGNoX2Rpc2FibGUgPQorCQkJY29udGV4dC0+YndfY3R4LmJ3LmRjZS5uYnBfc3RhdGVfY2hh bmdlX2VuYWJsZSA9PSBmYWxzZTsKKwlwcF9kaXNwbGF5X2NmZy0+Y3B1X2NjNl9kaXNhYmxlID0K KwkJCWNvbnRleHQtPmJ3X2N0eC5idy5kY2UuY3B1Y19zdGF0ZV9jaGFuZ2VfZW5hYmxlID09IGZh bHNlOworCXBwX2Rpc3BsYXlfY2ZnLT5jcHVfcHN0YXRlX2Rpc2FibGUgPQorCQkJY29udGV4dC0+ YndfY3R4LmJ3LmRjZS5jcHVwX3N0YXRlX2NoYW5nZV9lbmFibGUgPT0gZmFsc2U7CisJcHBfZGlz cGxheV9jZmctPmNwdV9wc3RhdGVfc2VwYXJhdGlvbl90aW1lID0KKwkJCWNvbnRleHQtPmJ3X2N0 eC5idy5kY2UuYmxhY2tvdXRfcmVjb3ZlcnlfdGltZV91czsKKworCXBwX2Rpc3BsYXlfY2ZnLT5t aW5fbWVtb3J5X2Nsb2NrX2toeiA9IGNvbnRleHQtPmJ3X2N0eC5idy5kY2UueWNsa19raHoKKwkJ LyBNRU1PUllfVFlQRV9NVUxUSVBMSUVSX0NaOworCisJcHBfZGlzcGxheV9jZmctPm1pbl9lbmdp bmVfY2xvY2tfa2h6ID0gZGV0ZXJtaW5lX3NjbGtfZnJvbV9ib3VuZGluZ19ib3goCisJCQlkYywK KwkJCWNvbnRleHQtPmJ3X2N0eC5idy5kY2Uuc2Nsa19raHopOworCisJLyoKKwkgKiBBcyB3b3Jr YXJvdW5kIGZvciA+NHg0SyBsaWdodHVwIHNldCBkY2ZjbG9jayB0byBtaW5fZW5naW5lX2Nsb2Nr IHZhbHVlLgorCSAqIFRoaXMgaXMgbm90IHJlcXVpcmVkIGZvciBsZXNzIHRoYW4gNSBkaXNwbGF5 cywKKwkgKiB0aHVzIGRvbid0IHJlcXVlc3QgZGVjZmNsayBpbiBkYyB0byBhdm9pZCBpbXBhY3QK KwkgKiBvbiBwb3dlciBzYXZpbmcuCisJICoKKwkgKi8KKwlwcF9kaXNwbGF5X2NmZy0+bWluX2Rj ZmNsb2NrX2toeiA9IChjb250ZXh0LT5zdHJlYW1fY291bnQgPiA0KSA/CisJCQlwcF9kaXNwbGF5 X2NmZy0+bWluX2VuZ2luZV9jbG9ja19raHogOiAwOworCisJcHBfZGlzcGxheV9jZmctPm1pbl9l bmdpbmVfY2xvY2tfZGVlcF9zbGVlcF9raHoKKwkJCT0gY29udGV4dC0+YndfY3R4LmJ3LmRjZS5z Y2xrX2RlZXBfc2xlZXBfa2h6OworCisJcHBfZGlzcGxheV9jZmctPmF2YWlsX21jbGtfc3dpdGNo X3RpbWVfdXMgPQorCQkJCQkJZGNlMTEwX2dldF9taW5fdmJsYW5rX3RpbWVfdXMoY29udGV4dCk7 CisJLyogVE9ETzogZGNlMTEuMiovCisJcHBfZGlzcGxheV9jZmctPmF2YWlsX21jbGtfc3dpdGNo X3RpbWVfaW5fZGlzcF9hY3RpdmVfdXMgPSAwOworCisJcHBfZGlzcGxheV9jZmctPmRpc3BfY2xr X2toeiA9IGRjLT5jbGtfbWdyLT5jbGtzLmRpc3BjbGtfa2h6OworCisJZGNlMTEwX2ZpbGxfZGlz cGxheV9jb25maWdzKGNvbnRleHQsIHBwX2Rpc3BsYXlfY2ZnKTsKKworCS8qIFRPRE86IGlzIHRo aXMgc3RpbGwgYXBwbGljYWJsZT8qLworCWlmIChwcF9kaXNwbGF5X2NmZy0+ZGlzcGxheV9jb3Vu dCA9PSAxKSB7CisJCWNvbnN0IHN0cnVjdCBkY19jcnRjX3RpbWluZyAqdGltaW5nID0KKwkJCSZj b250ZXh0LT5zdHJlYW1zWzBdLT50aW1pbmc7CisKKwkJcHBfZGlzcGxheV9jZmctPmNydGNfaW5k ZXggPQorCQkJcHBfZGlzcGxheV9jZmctPmRpc3BfY29uZmlnc1swXS5waXBlX2lkeDsKKwkJcHBf ZGlzcGxheV9jZmctPmxpbmVfdGltZV9pbl91cyA9IHRpbWluZy0+aF90b3RhbCAqIDEwMDAwIC8g dGltaW5nLT5waXhfY2xrXzEwMGh6OworCX0KKworCWlmIChtZW1jbXAoJmRjLT5jdXJyZW50X3N0 YXRlLT5wcF9kaXNwbGF5X2NmZywgcHBfZGlzcGxheV9jZmcsIHNpemVvZigqcHBfZGlzcGxheV9j ZmcpKSAhPSAgMCkKKwkJZG1fcHBfYXBwbHlfZGlzcGxheV9yZXF1aXJlbWVudHMoZGMtPmN0eCwg cHBfZGlzcGxheV9jZmcpOworfQorCitzdGF0aWMgdm9pZCBkY2UxMV91cGRhdGVfY2xvY2tzKHN0 cnVjdCBjbGtfbWdyICpjbGtfbWdyX2Jhc2UsCisJCQlzdHJ1Y3QgZGNfc3RhdGUgKmNvbnRleHQs CisJCQlib29sIHNhZmVfdG9fbG93ZXIpCit7CisJc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNs a19tZ3JfZGNlID0gVE9fQ0xLX01HUl9JTlRFUk5BTChjbGtfbWdyX2Jhc2UpOworCXN0cnVjdCBk bV9wcF9wb3dlcl9sZXZlbF9jaGFuZ2VfcmVxdWVzdCBsZXZlbF9jaGFuZ2VfcmVxOworCWludCBw YXRjaGVkX2Rpc3BfY2xrID0gY29udGV4dC0+YndfY3R4LmJ3LmRjZS5kaXNwY2xrX2toejsKKwor CS8qVE9ETzogVy9BIGZvciBkYWwzIGxpbnV4LCBpbnZlc3RpZ2F0ZSB3aHkgdGhpcyB3b3JrcyAq LworCWlmICghY2xrX21ncl9kY2UtPmRmc19ieXBhc3NfYWN0aXZlKQorCQlwYXRjaGVkX2Rpc3Bf Y2xrID0gcGF0Y2hlZF9kaXNwX2NsayAqIDExNSAvIDEwMDsKKworCWxldmVsX2NoYW5nZV9yZXEu cG93ZXJfbGV2ZWwgPSBkY2VfZ2V0X3JlcXVpcmVkX2Nsb2Nrc19zdGF0ZShjbGtfbWdyX2Jhc2Us IGNvbnRleHQpOworCS8qIGdldCBtYXggY2xvY2sgc3RhdGUgZnJvbSBQUExJQiAqLworCWlmICgo bGV2ZWxfY2hhbmdlX3JlcS5wb3dlcl9sZXZlbCA8IGNsa19tZ3JfZGNlLT5jdXJfbWluX2Nsa3Nf c3RhdGUgJiYgc2FmZV90b19sb3dlcikKKwkJCXx8IGxldmVsX2NoYW5nZV9yZXEucG93ZXJfbGV2 ZWwgPiBjbGtfbWdyX2RjZS0+Y3VyX21pbl9jbGtzX3N0YXRlKSB7CisJCWlmIChkbV9wcF9hcHBs eV9wb3dlcl9sZXZlbF9jaGFuZ2VfcmVxdWVzdChjbGtfbWdyX2Jhc2UtPmN0eCwgJmxldmVsX2No YW5nZV9yZXEpKQorCQkJY2xrX21ncl9kY2UtPmN1cl9taW5fY2xrc19zdGF0ZSA9IGxldmVsX2No YW5nZV9yZXEucG93ZXJfbGV2ZWw7CisJfQorCisJaWYgKHNob3VsZF9zZXRfY2xvY2soc2FmZV90 b19sb3dlciwgcGF0Y2hlZF9kaXNwX2NsaywgY2xrX21ncl9iYXNlLT5jbGtzLmRpc3BjbGtfa2h6 KSkgeworCQljb250ZXh0LT5id19jdHguYncuZGNlLmRpc3BjbGtfa2h6ID0gZGNlX3NldF9jbG9j ayhjbGtfbWdyX2Jhc2UsIHBhdGNoZWRfZGlzcF9jbGspOworCQljbGtfbWdyX2Jhc2UtPmNsa3Mu ZGlzcGNsa19raHogPSBwYXRjaGVkX2Rpc3BfY2xrOworCX0KKwlkY2UxMV9wcGxpYl9hcHBseV9k aXNwbGF5X3JlcXVpcmVtZW50cyhjbGtfbWdyX2Jhc2UtPmN0eC0+ZGMsIGNvbnRleHQpOworfQor CitzdGF0aWMgc3RydWN0IGNsa19tZ3JfZnVuY3MgZGNlMTEwX2Z1bmNzID0geworCS5nZXRfZHBf cmVmX2Nsa19mcmVxdWVuY3kgPSBkY2VfZ2V0X2RwX3JlZl9mcmVxX2toeiwKKwkudXBkYXRlX2Ns b2NrcyA9IGRjZTExX3VwZGF0ZV9jbG9ja3MKK307CisKK3ZvaWQgZGNlMTEwX2Nsa19tZ3JfY29u c3RydWN0KAorCQlzdHJ1Y3QgZGNfY29udGV4dCAqY3R4LAorCQlzdHJ1Y3QgY2xrX21ncl9pbnRl cm5hbCAqY2xrX21ncikKK3sKKwltZW1jcHkoY2xrX21nci0+bWF4X2Nsa3NfYnlfc3RhdGUsCisJ CWRjZTExMF9tYXhfY2xrc19ieV9zdGF0ZSwKKwkJc2l6ZW9mKGRjZTExMF9tYXhfY2xrc19ieV9z dGF0ZSkpOworCisJZGNlX2Nsa19tZ3JfY29uc3RydWN0KGN0eCwgY2xrX21ncik7CisKKwljbGtf bWdyLT5yZWdzID0gJmRpc3BfY2xrX3JlZ3M7CisJY2xrX21nci0+Y2xrX21ncl9zaGlmdCA9ICZk aXNwX2Nsa19zaGlmdDsKKwljbGtfbWdyLT5jbGtfbWdyX21hc2sgPSAmZGlzcF9jbGtfbWFzazsK KwljbGtfbWdyLT5iYXNlLmZ1bmNzID0gJmRjZTExMF9mdW5jczsKKworfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Nsa19tZ3IvZGNlMTEwL2RjZTExMF9jbGtf bWdyLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY2xrX21nci9kY2UxMTAvZGNl MTEwX2Nsa19tZ3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGViMmVh Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Nsa19t Z3IvZGNlMTEwL2RjZTExMF9jbGtfbWdyLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHly aWdodCAyMDEyLTE2IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxs IGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFV VEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNP RlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K KyAqCisgKiBBdXRob3JzOiBBTUQKKyAqCisgKi8KKworI2lmbmRlZiBEQUxfRENfRENFX0RDRTEx MF9DTEtfTUdSX0hfCisjZGVmaW5lIERBTF9EQ19EQ0VfRENFMTEwX0NMS19NR1JfSF8KKwordm9p ZCBkY2UxMTBfY2xrX21ncl9jb25zdHJ1Y3QoCisJCXN0cnVjdCBkY19jb250ZXh0ICpjdHgsCisJ CXN0cnVjdCBjbGtfbWdyX2ludGVybmFsICpjbGtfbWdyKTsKKwordm9pZCBkY2UxMTBfZmlsbF9k aXNwbGF5X2NvbmZpZ3MoCisJY29uc3Qgc3RydWN0IGRjX3N0YXRlICpjb250ZXh0LAorCXN0cnVj dCBkbV9wcF9kaXNwbGF5X2NvbmZpZ3VyYXRpb24gKnBwX2Rpc3BsYXlfY2ZnKTsKKworLyogZnVu Y3Rpb25zIHNoYXJlZCB3aXRoIG90aGVyIGNsayBtZ3IqLwordm9pZCBkY2UxMV9wcGxpYl9hcHBs eV9kaXNwbGF5X3JlcXVpcmVtZW50cygKKwlzdHJ1Y3QgZGMgKmRjLAorCXN0cnVjdCBkY19zdGF0 ZSAqY29udGV4dCk7CisKK3VpbnQzMl90IGRjZTExMF9nZXRfbWluX3ZibGFua190aW1lX3VzKGNv bnN0IHN0cnVjdCBkY19zdGF0ZSAqY29udGV4dCk7CisKKyNlbmRpZiAvKiBEQUxfRENfRENFX0RD RTExMF9DTEtfTUdSX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3Bs YXkvZGMvY2xrX21nci9kY2UxMTIvZGNlMTEyX2Nsa19tZ3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvZGlzcGxheS9kYy9jbGtfbWdyL2RjZTExMi9kY2UxMTJfY2xrX21nci5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ODM5MmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY2xrX21nci9kY2UxMTIvZGNlMTEyX2Nsa19tZ3Iu YwpAQCAtMCwwICsxLDIzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyLTE2IEFkdmFuY2VkIE1p Y3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBt b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29y IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwK KyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAq IE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBBTUQKKyAq CisgKi8KKworI2luY2x1ZGUgImNvcmVfdHlwZXMuaCIKKyNpbmNsdWRlICJjbGtfbWdyX2ludGVy bmFsLmgiCisKKyNpbmNsdWRlICJkY2UvZGNlXzExXzJfZC5oIgorI2luY2x1ZGUgImRjZS9kY2Vf MTFfMl9zaF9tYXNrLmgiCisjaW5jbHVkZSAiZGNlMTAwL2RjZV9jbGtfbWdyLmgiCisjaW5jbHVk ZSAiZGNlMTEwL2RjZTExMF9jbGtfbWdyLmgiCisjaW5jbHVkZSAiZGNlMTEyX2Nsa19tZ3IuaCIK KyNpbmNsdWRlICJkYWxfYXNpY19pZC5oIgorCisvKiBzZXQgcmVnaXN0ZXIgb2Zmc2V0ICovCisj ZGVmaW5lIFNSKHJlZ19uYW1lKVwKKwkucmVnX25hbWUgPSBtbSAjIyByZWdfbmFtZQorCisvKiBz ZXQgcmVnaXN0ZXIgb2Zmc2V0IHdpdGggaW5zdGFuY2UgKi8KKyNkZWZpbmUgU1JJKHJlZ19uYW1l LCBibG9jaywgaWQpXAorCS5yZWdfbmFtZSA9IG1tICMjIGJsb2NrICMjIGlkICMjIF8gIyMgcmVn X25hbWUKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfbWdyX3JlZ2lzdGVycyBkaXNwX2Nsa19y ZWdzID0geworCQlDTEtfQ09NTU9OX1JFR19MSVNUX0RDRV9CQVNFKCkKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgY2xrX21ncl9zaGlmdCBkaXNwX2Nsa19zaGlmdCA9IHsKKwkJQ0xLX0NPTU1P Tl9NQVNLX1NIX0xJU1RfRENFX0NPTU1PTl9CQVNFKF9fU0hJRlQpCit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IGNsa19tZ3JfbWFzayBkaXNwX2Nsa19tYXNrID0geworCQlDTEtfQ09NTU9OX01B U0tfU0hfTElTVF9EQ0VfQ09NTU9OX0JBU0UoX01BU0spCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IHN0YXRlX2RlcGVuZGVudF9jbG9ja3MgZGNlMTEyX21heF9jbGtzX2J5X3N0YXRlW10gPSB7 CisvKkNsb2Nrc1N0YXRlSW52YWxpZCAtIHNob3VsZCBub3QgYmUgdXNlZCovCit7IC5kaXNwbGF5 X2Nsa19raHogPSAwLCAucGl4ZWxfY2xrX2toeiA9IDAgfSwKKy8qQ2xvY2tzU3RhdGVVbHRyYUxv dyAtIGN1cnJlbnRseSBieSBIVyBkZXNpZ24gdGVhbSBub3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCov Cit7IC5kaXNwbGF5X2Nsa19raHogPSAzODkxODksIC5waXhlbF9jbGtfa2h6ID0gMzQ2NjcyIH0s CisvKkNsb2Nrc1N0YXRlTG93Ki8KK3sgLmRpc3BsYXlfY2xrX2toeiA9IDQ1OTAwMCwgLnBpeGVs X2Nsa19raHogPSA0MDAwMDAgfSwKKy8qQ2xvY2tzU3RhdGVOb21pbmFsKi8KK3sgLmRpc3BsYXlf Y2xrX2toeiA9IDY2NzAwMCwgLnBpeGVsX2Nsa19raHogPSA2MDAwMDAgfSwKKy8qQ2xvY2tzU3Rh dGVQZXJmb3JtYW5jZSovCit7IC5kaXNwbGF5X2Nsa19raHogPSAxMTMyMDAwLCAucGl4ZWxfY2xr X2toeiA9IDYwMDAwMCB9IH07CisKKworLy9UT0RPOiByZW1vdmUgdXNlIHRoZSB0d28gYnJva2Vu IGRvd24gZnVuY3Rpb25zCitpbnQgZGNlMTEyX3NldF9jbG9jayhzdHJ1Y3QgY2xrX21nciAqY2xr X21ncl9iYXNlLCBpbnQgcmVxdWVzdGVkX2Nsa19raHopCit7CisJc3RydWN0IGNsa19tZ3JfaW50 ZXJuYWwgKmNsa19tZ3JfZGNlID0gVE9fQ0xLX01HUl9JTlRFUk5BTChjbGtfbWdyX2Jhc2UpOwor CXN0cnVjdCBicF9zZXRfZGNlX2Nsb2NrX3BhcmFtZXRlcnMgZGNlX2Nsa19wYXJhbXM7CisJc3Ry dWN0IGRjX2Jpb3MgKmJwID0gY2xrX21ncl9iYXNlLT5jdHgtPmRjX2Jpb3M7CisJc3RydWN0IGRj ICpjb3JlX2RjID0gY2xrX21ncl9iYXNlLT5jdHgtPmRjOworCXN0cnVjdCBkbWN1ICpkbWN1ID0g Y29yZV9kYy0+cmVzX3Bvb2wtPmRtY3U7CisJaW50IGFjdHVhbF9jbG9jayA9IHJlcXVlc3RlZF9j bGtfa2h6OworCS8qIFByZXBhcmUgdG8gcHJvZ3JhbSBkaXNwbGF5IGNsb2NrKi8KKwltZW1zZXQo JmRjZV9jbGtfcGFyYW1zLCAwLCBzaXplb2YoZGNlX2Nsa19wYXJhbXMpKTsKKworCS8qIE1ha2Ug c3VyZSByZXF1ZXN0ZWQgY2xvY2sgaXNuJ3QgbG93ZXIgdGhhbiBtaW5pbXVtIHRocmVzaG9sZCov CisJaWYgKHJlcXVlc3RlZF9jbGtfa2h6ID4gMCkKKwkJcmVxdWVzdGVkX2Nsa19raHogPSBtYXgo cmVxdWVzdGVkX2Nsa19raHosCisJCQkJY2xrX21ncl9kY2UtPmRlbnRpc3RfdmNvX2ZyZXFfa2h6 IC8gNjIpOworCisJZGNlX2Nsa19wYXJhbXMudGFyZ2V0X2Nsb2NrX2ZyZXF1ZW5jeSA9IHJlcXVl c3RlZF9jbGtfa2h6OworCWRjZV9jbGtfcGFyYW1zLnBsbF9pZCA9IENMT0NLX1NPVVJDRV9JRF9E RlM7CisJZGNlX2Nsa19wYXJhbXMuY2xvY2tfdHlwZSA9IERDRUNMT0NLX1RZUEVfRElTUExBWV9D TE9DSzsKKworCWJwLT5mdW5jcy0+c2V0X2RjZV9jbG9jayhicCwgJmRjZV9jbGtfcGFyYW1zKTsK KwlhY3R1YWxfY2xvY2sgPSBkY2VfY2xrX3BhcmFtcy50YXJnZXRfY2xvY2tfZnJlcXVlbmN5Owor CisJLyoKKwkgKiBmcm9tIHBvd2VyIGRvd24sIHdlIG5lZWQgbWFyayB0aGUgY2xvY2sgc3RhdGUg YXMgQ2xvY2tzU3RhdGVOb21pbmFsCisJICogZnJvbSBIV1Jlc2V0LCBzbyB3aGVuIHJlc3VtZSB3 ZSB3aWxsIGNhbGwgcHBsaWIgdm9sdGFnZSByZWd1bGF0b3IuCisJICovCisJaWYgKHJlcXVlc3Rl ZF9jbGtfa2h6ID09IDApCisJCWNsa19tZ3JfZGNlLT5jdXJfbWluX2Nsa3Nfc3RhdGUgPSBETV9Q UF9DTE9DS1NfU1RBVEVfTk9NSU5BTDsKKworCS8qUHJvZ3JhbSBEUCByZWYgQ2xvY2sqLworCS8q VkJJT1Mgd2lsbCBkZXRlcm1pbmUgRFBSRUZDTEsgZnJlcXVlbmN5LCBzbyB3ZSBkb24ndCBzZXQg aXQqLworCWRjZV9jbGtfcGFyYW1zLnRhcmdldF9jbG9ja19mcmVxdWVuY3kgPSAwOworCWRjZV9j bGtfcGFyYW1zLmNsb2NrX3R5cGUgPSBEQ0VDTE9DS19UWVBFX0RQUkVGQ0xLOworCWlmICghQVNJ Q1JFVl9JU19WRUdBMjBfUChjbGtfbWdyX2Jhc2UtPmN0eC0+YXNpY19pZC5od19pbnRlcm5hbF9y ZXYpKQorCQlkY2VfY2xrX3BhcmFtcy5mbGFncy5VU0VfR0VOTE9DS19BU19TT1VSQ0VfRk9SX0RQ UkVGQ0xLID0KKwkJCShkY2VfY2xrX3BhcmFtcy5wbGxfaWQgPT0KKwkJCQkJQ0xPQ0tfU09VUkNF X0NPTUJPX0RJU1BMQVlfUExMMCk7CisJZWxzZQorCQlkY2VfY2xrX3BhcmFtcy5mbGFncy5VU0Vf R0VOTE9DS19BU19TT1VSQ0VfRk9SX0RQUkVGQ0xLID0gZmFsc2U7CisKKwlicC0+ZnVuY3MtPnNl dF9kY2VfY2xvY2soYnAsICZkY2VfY2xrX3BhcmFtcyk7CisKKwlpZiAoIUlTX0ZQR0FfTUFYSU1V U19EQyhjb3JlX2RjLT5jdHgtPmRjZV9lbnZpcm9ubWVudCkpIHsKKwkJaWYgKGRtY3UgJiYgZG1j dS0+ZnVuY3MtPmlzX2RtY3VfaW5pdGlhbGl6ZWQoZG1jdSkpIHsKKwkJCWlmIChjbGtfbWdyX2Rj ZS0+ZGZzX2J5cGFzc19kaXNwX2NsayAhPSBhY3R1YWxfY2xvY2spCisJCQkJZG1jdS0+ZnVuY3Mt PnNldF9wc3Jfd2FpdF9sb29wKGRtY3UsCisJCQkJCQlhY3R1YWxfY2xvY2sgLyAxMDAwIC8gNyk7 CisJCX0KKwl9CisKKwljbGtfbWdyX2RjZS0+ZGZzX2J5cGFzc19kaXNwX2NsayA9IGFjdHVhbF9j bG9jazsKKwlyZXR1cm4gYWN0dWFsX2Nsb2NrOworfQorCitpbnQgZGNlMTEyX3NldF9kaXNwY2xr KHN0cnVjdCBjbGtfbWdyX2ludGVybmFsICpjbGtfbWdyLCBpbnQgcmVxdWVzdGVkX2Nsa19raHop Cit7CisJc3RydWN0IGJwX3NldF9kY2VfY2xvY2tfcGFyYW1ldGVycyBkY2VfY2xrX3BhcmFtczsK KwlzdHJ1Y3QgZGNfYmlvcyAqYnAgPSBjbGtfbWdyLT5iYXNlLmN0eC0+ZGNfYmlvczsKKwlzdHJ1 Y3QgZGMgKmNvcmVfZGMgPSBjbGtfbWdyLT5iYXNlLmN0eC0+ZGM7CisJc3RydWN0IGRtY3UgKmRt Y3UgPSBjb3JlX2RjLT5yZXNfcG9vbC0+ZG1jdTsKKwlpbnQgYWN0dWFsX2Nsb2NrID0gcmVxdWVz dGVkX2Nsa19raHo7CisJLyogUHJlcGFyZSB0byBwcm9ncmFtIGRpc3BsYXkgY2xvY2sqLworCW1l bXNldCgmZGNlX2Nsa19wYXJhbXMsIDAsIHNpemVvZihkY2VfY2xrX3BhcmFtcykpOworCisJLyog TWFrZSBzdXJlIHJlcXVlc3RlZCBjbG9jayBpc24ndCBsb3dlciB0aGFuIG1pbmltdW0gdGhyZXNo b2xkKi8KKwlpZiAocmVxdWVzdGVkX2Nsa19raHogPiAwKQorCQlyZXF1ZXN0ZWRfY2xrX2toeiA9 IG1heChyZXF1ZXN0ZWRfY2xrX2toeiwKKwkJCQljbGtfbWdyLT5kZW50aXN0X3Zjb19mcmVxX2to eiAvIDYyKTsKKworCWRjZV9jbGtfcGFyYW1zLnRhcmdldF9jbG9ja19mcmVxdWVuY3kgPSByZXF1 ZXN0ZWRfY2xrX2toejsKKwlkY2VfY2xrX3BhcmFtcy5wbGxfaWQgPSBDTE9DS19TT1VSQ0VfSURf REZTOworCWRjZV9jbGtfcGFyYW1zLmNsb2NrX3R5cGUgPSBEQ0VDTE9DS19UWVBFX0RJU1BMQVlf Q0xPQ0s7CisKKwlicC0+ZnVuY3MtPnNldF9kY2VfY2xvY2soYnAsICZkY2VfY2xrX3BhcmFtcyk7 CisJYWN0dWFsX2Nsb2NrID0gZGNlX2Nsa19wYXJhbXMudGFyZ2V0X2Nsb2NrX2ZyZXF1ZW5jeTsK KworCS8qCisJICogZnJvbSBwb3dlciBkb3duLCB3ZSBuZWVkIG1hcmsgdGhlIGNsb2NrIHN0YXRl IGFzIENsb2Nrc1N0YXRlTm9taW5hbAorCSAqIGZyb20gSFdSZXNldCwgc28gd2hlbiByZXN1bWUg d2Ugd2lsbCBjYWxsIHBwbGliIHZvbHRhZ2UgcmVndWxhdG9yLgorCSAqLworCWlmIChyZXF1ZXN0 ZWRfY2xrX2toeiA9PSAwKQorCQljbGtfbWdyLT5jdXJfbWluX2Nsa3Nfc3RhdGUgPSBETV9QUF9D TE9DS1NfU1RBVEVfTk9NSU5BTDsKKworCisJaWYgKCFJU19GUEdBX01BWElNVVNfREMoY29yZV9k Yy0+Y3R4LT5kY2VfZW52aXJvbm1lbnQpKSB7CisJCWlmIChkbWN1ICYmIGRtY3UtPmZ1bmNzLT5p c19kbWN1X2luaXRpYWxpemVkKGRtY3UpKSB7CisJCQlpZiAoY2xrX21nci0+ZGZzX2J5cGFzc19k aXNwX2NsayAhPSBhY3R1YWxfY2xvY2spCisJCQkJZG1jdS0+ZnVuY3MtPnNldF9wc3Jfd2FpdF9s b29wKGRtY3UsCisJCQkJCQlhY3R1YWxfY2xvY2sgLyAxMDAwIC8gNyk7CisJCX0KKwl9CisKKwlj bGtfbWdyLT5kZnNfYnlwYXNzX2Rpc3BfY2xrID0gYWN0dWFsX2Nsb2NrOworCXJldHVybiBhY3R1 YWxfY2xvY2s7CisKK30KKworaW50IGRjZTExMl9zZXRfZHByZWZjbGsoc3RydWN0IGNsa19tZ3Jf aW50ZXJuYWwgKmNsa19tZ3IpCit7CisJc3RydWN0IGJwX3NldF9kY2VfY2xvY2tfcGFyYW1ldGVy cyBkY2VfY2xrX3BhcmFtczsKKwlzdHJ1Y3QgZGNfYmlvcyAqYnAgPSBjbGtfbWdyLT5iYXNlLmN0 eC0+ZGNfYmlvczsKKworCW1lbXNldCgmZGNlX2Nsa19wYXJhbXMsIDAsIHNpemVvZihkY2VfY2xr X3BhcmFtcykpOworCisJLypQcm9ncmFtIERQIHJlZiBDbG9jayovCisJLypWQklPUyB3aWxsIGRl dGVybWluZSBEUFJFRkNMSyBmcmVxdWVuY3ksIHNvIHdlIGRvbid0IHNldCBpdCovCisJZGNlX2Ns a19wYXJhbXMudGFyZ2V0X2Nsb2NrX2ZyZXF1ZW5jeSA9IDA7CisJZGNlX2Nsa19wYXJhbXMucGxs X2lkID0gQ0xPQ0tfU09VUkNFX0lEX0RGUzsKKwlkY2VfY2xrX3BhcmFtcy5jbG9ja190eXBlID0g RENFQ0xPQ0tfVFlQRV9EUFJFRkNMSzsKKwlpZiAoIUFTSUNSRVZfSVNfVkVHQTIwX1AoY2xrX21n ci0+YmFzZS5jdHgtPmFzaWNfaWQuaHdfaW50ZXJuYWxfcmV2KSkKKwkJZGNlX2Nsa19wYXJhbXMu ZmxhZ3MuVVNFX0dFTkxPQ0tfQVNfU09VUkNFX0ZPUl9EUFJFRkNMSyA9CisJCQkoZGNlX2Nsa19w YXJhbXMucGxsX2lkID09CisJCQkJCUNMT0NLX1NPVVJDRV9DT01CT19ESVNQTEFZX1BMTDApOwor CWVsc2UKKwkJZGNlX2Nsa19wYXJhbXMuZmxhZ3MuVVNFX0dFTkxPQ0tfQVNfU09VUkNFX0ZPUl9E UFJFRkNMSyA9IGZhbHNlOworCisJYnAtPmZ1bmNzLT5zZXRfZGNlX2Nsb2NrKGJwLCAmZGNlX2Ns a19wYXJhbXMpOworCisJLyogUmV0dXJucyB0aGUgZHBfcmVmY2xrIHRoYXQgd2FzIHNldCAqLwor CXJldHVybiBkY2VfY2xrX3BhcmFtcy50YXJnZXRfY2xvY2tfZnJlcXVlbmN5OworfQorCitzdGF0 aWMgdm9pZCBkY2UxMTJfdXBkYXRlX2Nsb2NrcyhzdHJ1Y3QgY2xrX21nciAqY2xrX21ncl9iYXNl LAorCQkJc3RydWN0IGRjX3N0YXRlICpjb250ZXh0LAorCQkJYm9vbCBzYWZlX3RvX2xvd2VyKQor eworCXN0cnVjdCBjbGtfbWdyX2ludGVybmFsICpjbGtfbWdyX2RjZSA9IFRPX0NMS19NR1JfSU5U RVJOQUwoY2xrX21ncl9iYXNlKTsKKwlzdHJ1Y3QgZG1fcHBfcG93ZXJfbGV2ZWxfY2hhbmdlX3Jl cXVlc3QgbGV2ZWxfY2hhbmdlX3JlcTsKKwlpbnQgcGF0Y2hlZF9kaXNwX2NsayA9IGNvbnRleHQt PmJ3X2N0eC5idy5kY2UuZGlzcGNsa19raHo7CisKKwkvKlRPRE86IFcvQSBmb3IgZGFsMyBsaW51 eCwgaW52ZXN0aWdhdGUgd2h5IHRoaXMgd29ya3MgKi8KKwlpZiAoIWNsa19tZ3JfZGNlLT5kZnNf YnlwYXNzX2FjdGl2ZSkKKwkJcGF0Y2hlZF9kaXNwX2NsayA9IHBhdGNoZWRfZGlzcF9jbGsgKiAx MTUgLyAxMDA7CisKKwlsZXZlbF9jaGFuZ2VfcmVxLnBvd2VyX2xldmVsID0gZGNlX2dldF9yZXF1 aXJlZF9jbG9ja3Nfc3RhdGUoY2xrX21ncl9iYXNlLCBjb250ZXh0KTsKKwkvKiBnZXQgbWF4IGNs b2NrIHN0YXRlIGZyb20gUFBMSUIgKi8KKwlpZiAoKGxldmVsX2NoYW5nZV9yZXEucG93ZXJfbGV2 ZWwgPCBjbGtfbWdyX2RjZS0+Y3VyX21pbl9jbGtzX3N0YXRlICYmIHNhZmVfdG9fbG93ZXIpCisJ CQl8fCBsZXZlbF9jaGFuZ2VfcmVxLnBvd2VyX2xldmVsID4gY2xrX21ncl9kY2UtPmN1cl9taW5f Y2xrc19zdGF0ZSkgeworCQlpZiAoZG1fcHBfYXBwbHlfcG93ZXJfbGV2ZWxfY2hhbmdlX3JlcXVl c3QoY2xrX21ncl9iYXNlLT5jdHgsICZsZXZlbF9jaGFuZ2VfcmVxKSkKKwkJCWNsa19tZ3JfZGNl LT5jdXJfbWluX2Nsa3Nfc3RhdGUgPSBsZXZlbF9jaGFuZ2VfcmVxLnBvd2VyX2xldmVsOworCX0K KworCWlmIChzaG91bGRfc2V0X2Nsb2NrKHNhZmVfdG9fbG93ZXIsIHBhdGNoZWRfZGlzcF9jbGss IGNsa19tZ3JfYmFzZS0+Y2xrcy5kaXNwY2xrX2toeikpIHsKKwkJcGF0Y2hlZF9kaXNwX2NsayA9 IGRjZTExMl9zZXRfY2xvY2soY2xrX21ncl9iYXNlLCBwYXRjaGVkX2Rpc3BfY2xrKTsKKwkJY2xr X21ncl9iYXNlLT5jbGtzLmRpc3BjbGtfa2h6ID0gcGF0Y2hlZF9kaXNwX2NsazsKKwl9CisJZGNl MTFfcHBsaWJfYXBwbHlfZGlzcGxheV9yZXF1aXJlbWVudHMoY2xrX21ncl9iYXNlLT5jdHgtPmRj LCBjb250ZXh0KTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfbWdyX2Z1bmNzIGRjZTExMl9mdW5j cyA9IHsKKwkuZ2V0X2RwX3JlZl9jbGtfZnJlcXVlbmN5ID0gZGNlX2dldF9kcF9yZWZfZnJlcV9r aHosCisJLnVwZGF0ZV9jbG9ja3MgPSBkY2UxMTJfdXBkYXRlX2Nsb2NrcworfTsKKwordm9pZCBk Y2UxMTJfY2xrX21ncl9jb25zdHJ1Y3QoCisJCXN0cnVjdCBkY19jb250ZXh0ICpjdHgsCisJCXN0 cnVjdCBjbGtfbWdyX2ludGVybmFsICpjbGtfbWdyKQoreworCW1lbWNweShjbGtfbWdyLT5tYXhf Y2xrc19ieV9zdGF0ZSwKKwkJZGNlMTEyX21heF9jbGtzX2J5X3N0YXRlLAorCQlzaXplb2YoZGNl MTEyX21heF9jbGtzX2J5X3N0YXRlKSk7CisKKwlkY2VfY2xrX21ncl9jb25zdHJ1Y3QoY3R4LCBj bGtfbWdyKTsKKworCWNsa19tZ3ItPnJlZ3MgPSAmZGlzcF9jbGtfcmVnczsKKwljbGtfbWdyLT5j bGtfbWdyX3NoaWZ0ID0gJmRpc3BfY2xrX3NoaWZ0OworCWNsa19tZ3ItPmNsa19tZ3JfbWFzayA9 ICZkaXNwX2Nsa19tYXNrOworCWNsa19tZ3ItPmJhc2UuZnVuY3MgPSAmZGNlMTEyX2Z1bmNzOwor fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Nsa19tZ3IvZGNl MTEyL2RjZTExMl9jbGtfbWdyLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY2xr X21nci9kY2UxMTIvZGNlMTEyX2Nsa19tZ3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5kZmIwNmRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9k aXNwbGF5L2RjL2Nsa19tZ3IvZGNlMTEyL2RjZTExMl9jbGtfbWdyLmgKQEAgLTAsMCArMSwzOSBA QAorLyoKKyAqIENvcHlyaWdodCAyMDEyLTE2IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4K KyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgor ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQg SE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElO IFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBBTUQKKyAqCisgKi8KKworI2lmbmRlZiBE QUxfRENfRENFX0RDRTExMl9DTEtfTUdSX0hfCisjZGVmaW5lIERBTF9EQ19EQ0VfRENFMTEyX0NM S19NR1JfSF8KKworCit2b2lkIGRjZTExMl9jbGtfbWdyX2NvbnN0cnVjdCgKKwkJc3RydWN0IGRj X2NvbnRleHQgKmN0eCwKKwkJc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3IpOworCisv KiBmdW5jdGlvbnMgc2hhcmVkIHdpdGggb3RoZXIgY2xrIG1nciAqLworaW50IGRjZTExMl9zZXRf Y2xvY2soc3RydWN0IGNsa19tZ3IgKmNsa19tZ3JfYmFzZSwgaW50IHJlcXVlc3RlZF9jbGtfa2h6 KTsKK2ludCBkY2UxMTJfc2V0X2Rpc3BjbGsoc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19t Z3IsIGludCByZXF1ZXN0ZWRfY2xrX2toeik7CitpbnQgZGNlMTEyX3NldF9kcHJlZmNsayhzdHJ1 Y3QgY2xrX21ncl9pbnRlcm5hbCAqY2xrX21ncik7CisKKyNlbmRpZiAvKiBEQUxfRENfRENFX0RD RTExMl9DTEtfTUdSX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3Bs YXkvZGMvY2xrX21nci9kY2UxMjAvZGNlMTIwX2Nsa19tZ3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvZGlzcGxheS9kYy9jbGtfbWdyL2RjZTEyMC9kY2UxMjBfY2xrX21nci5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZjJlMjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY2xrX21nci9kY2UxMjAvZGNlMTIwX2Nsa19tZ3Iu YwpAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyLTE2IEFkdmFuY2VkIE1p Y3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBt b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29y IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwK KyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAq IE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBBTUQKKyAq CisgKi8KKworI2luY2x1ZGUgImNvcmVfdHlwZXMuaCIKKyNpbmNsdWRlICJjbGtfbWdyX2ludGVy bmFsLmgiCisKKyNpbmNsdWRlICJkY2UxMTIvZGNlMTEyX2Nsa19tZ3IuaCIKKyNpbmNsdWRlICJk Y2UxMTAvZGNlMTEwX2Nsa19tZ3IuaCIKKyNpbmNsdWRlICJkY2UxMjBfY2xrX21nci5oIgorI2lu Y2x1ZGUgImRjZTEwMC9kY2VfY2xrX21nci5oIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0YXRl X2RlcGVuZGVudF9jbG9ja3MgZGNlMTIwX21heF9jbGtzX2J5X3N0YXRlW10gPSB7CisvKkNsb2Nr c1N0YXRlSW52YWxpZCAtIHNob3VsZCBub3QgYmUgdXNlZCovCit7IC5kaXNwbGF5X2Nsa19raHog PSAwLCAucGl4ZWxfY2xrX2toeiA9IDAgfSwKKy8qQ2xvY2tzU3RhdGVVbHRyYUxvdyAtIGN1cnJl bnRseSBieSBIVyBkZXNpZ24gdGVhbSBub3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCovCit7IC5kaXNw bGF5X2Nsa19raHogPSAwLCAucGl4ZWxfY2xrX2toeiA9IDAgfSwKKy8qQ2xvY2tzU3RhdGVMb3cq LworeyAuZGlzcGxheV9jbGtfa2h6ID0gNDYwMDAwLCAucGl4ZWxfY2xrX2toeiA9IDQwMDAwMCB9 LAorLypDbG9ja3NTdGF0ZU5vbWluYWwqLworeyAuZGlzcGxheV9jbGtfa2h6ID0gNjcwMDAwLCAu cGl4ZWxfY2xrX2toeiA9IDYwMDAwMCB9LAorLypDbG9ja3NTdGF0ZVBlcmZvcm1hbmNlKi8KK3sg LmRpc3BsYXlfY2xrX2toeiA9IDExMzMwMDAsIC5waXhlbF9jbGtfa2h6ID0gNjAwMDAwIH0gfTsK KworLyoqCisgKiBkY2UxMjFfY2xvY2tfcGF0Y2hfeGdtaV9zc19pbmZvKCkgLSBTYXZlIFhHTUkg c3ByZWFkIHNwZWN0cnVtIGluZm8KKyAqIEBjbGtfbWdyOiBjbG9jayBtYW5hZ2VyIGJhc2Ugc3Ry dWN0dXJlCisgKgorICogUmVhZHMgZnJvbSBWQklPUyB0aGUgWEdNSSBzcHJlYWQgc3BlY3RydW0g aW5mbyBhbmQgc2F2ZXMgaXQgd2l0aGluCisgKiB0aGUgZGNlIGNsb2NrIG1hbmFnZXIuIFRoaXMg b3BlcmF0aW9uIHdpbGwgb3ZlcndyaXRlIHRoZSBleGlzdGluZyBkcHJlZmNsaworICogU1MgdmFs dWVzIGlmIHRoZSB2QklPUyBxdWVyeSBzdWNjZWVkcy4gT3RoZXJ3aXNlLCBpdCBkb2VzIG5vdGhp bmcuIEl0IGFsc28KKyAqIHNldHMgdGhlIC0+eGdtaV9lbmFibGVkIGZsYWcuCisgKi8KK3ZvaWQg ZGNlMTIxX2Nsb2NrX3BhdGNoX3hnbWlfc3NfaW5mbyhzdHJ1Y3QgY2xrX21nciAqY2xrX21ncl9i YXNlKQoreworCXN0cnVjdCBjbGtfbWdyX2ludGVybmFsICpjbGtfbWdyX2RjZSA9IFRPX0NMS19N R1JfSU5URVJOQUwoY2xrX21ncl9iYXNlKTsKKwllbnVtIGJwX3Jlc3VsdCByZXN1bHQ7CisJc3Ry dWN0IHNwcmVhZF9zcGVjdHJ1bV9pbmZvIGluZm8gPSB7IHsgMCB9IH07CisJc3RydWN0IGRjX2Jp b3MgKmJwID0gY2xrX21ncl9kY2UtPmJhc2UuY3R4LT5kY19iaW9zOworCisJY2xrX21ncl9kY2Ut PnhnbWlfZW5hYmxlZCA9IGZhbHNlOworCisJcmVzdWx0ID0gYnAtPmZ1bmNzLT5nZXRfc3ByZWFk X3NwZWN0cnVtX2luZm8oYnAsIEFTX1NJR05BTF9UWVBFX1hHTUksCisJCQkJCQkgICAgIDAsICZp bmZvKTsKKwlpZiAocmVzdWx0ID09IEJQX1JFU1VMVF9PSyAmJiBpbmZvLnNwcmVhZF9zcGVjdHJ1 bV9wZXJjZW50YWdlICE9IDApIHsKKwkJY2xrX21ncl9kY2UtPnhnbWlfZW5hYmxlZCA9IHRydWU7 CisJCWNsa19tZ3JfZGNlLT5zc19vbl9kcHJlZmNsayA9IHRydWU7CisJCWNsa19tZ3JfZGNlLT5k cHJlZmNsa19zc19kaXZpZGVyID0KKwkJCQlpbmZvLnNwcmVhZF9wZXJjZW50YWdlX2RpdmlkZXI7 CisKKwkJaWYgKGluZm8udHlwZS5DRU5URVJfTU9ERSA9PSAwKSB7CisJCQkvKgorCQkJICogQ3Vy cmVudGx5IGZvciBEUCBSZWZlcmVuY2UgY2xvY2sgd2UKKwkJCSAqIG5lZWQgb25seSBTUyBwZXJj ZW50YWdlIGZvcgorCQkJICogZG93bnNwcmVhZAorCQkJICovCisJCQljbGtfbWdyX2RjZS0+ZHBy ZWZjbGtfc3NfcGVyY2VudGFnZSA9CisJCQkJCWluZm8uc3ByZWFkX3NwZWN0cnVtX3BlcmNlbnRh Z2U7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRjZTEyX3VwZGF0ZV9jbG9ja3Moc3RydWN0 IGNsa19tZ3IgKmNsa19tZ3JfYmFzZSwKKwkJCXN0cnVjdCBkY19zdGF0ZSAqY29udGV4dCwKKwkJ CWJvb2wgc2FmZV90b19sb3dlcikKK3sKKwlzdHJ1Y3QgY2xrX21ncl9pbnRlcm5hbCAqY2xrX21n cl9kY2UgPSBUT19DTEtfTUdSX0lOVEVSTkFMKGNsa19tZ3JfYmFzZSk7CisJc3RydWN0IGRtX3Bw X2Nsb2NrX2Zvcl92b2x0YWdlX3JlcSBjbG9ja192b2x0YWdlX3JlcSA9IHswfTsKKwlpbnQgbWF4 X3BpeF9jbGsgPSBkY2VfZ2V0X21heF9waXhlbF9jbG9ja19mb3JfYWxsX3BhdGhzKGNvbnRleHQp OworCWludCBwYXRjaGVkX2Rpc3BfY2xrID0gY29udGV4dC0+YndfY3R4LmJ3LmRjZS5kaXNwY2xr X2toejsKKworCS8qVE9ETzogVy9BIGZvciBkYWwzIGxpbnV4LCBpbnZlc3RpZ2F0ZSB3aHkgdGhp cyB3b3JrcyAqLworCWlmICghY2xrX21ncl9kY2UtPmRmc19ieXBhc3NfYWN0aXZlKQorCQlwYXRj aGVkX2Rpc3BfY2xrID0gcGF0Y2hlZF9kaXNwX2NsayAqIDExNSAvIDEwMDsKKworCWlmIChzaG91 bGRfc2V0X2Nsb2NrKHNhZmVfdG9fbG93ZXIsIHBhdGNoZWRfZGlzcF9jbGssIGNsa19tZ3JfYmFz ZS0+Y2xrcy5kaXNwY2xrX2toeikpIHsKKwkJY2xvY2tfdm9sdGFnZV9yZXEuY2xrX3R5cGUgPSBE TV9QUF9DTE9DS19UWVBFX0RJU1BMQVlfQ0xLOworCQkvKgorCQkgKiBXaGVuIHhHTUkgaXMgZW5h YmxlZCwgdGhlIGRpc3BsYXkgY2xrIG5lZWRzIHRvIGJlIGFkanVzdGVkCisJCSAqIHdpdGggdGhl IFdBRkwgbGluaydzIFNTIHBlcmNlbnRhZ2UuCisJCSAqLworCQlpZiAoY2xrX21ncl9kY2UtPnhn bWlfZW5hYmxlZCkKKwkJCXBhdGNoZWRfZGlzcF9jbGsgPSBkY2VfYWRqdXN0X2RwX3JlZl9mcmVx X2Zvcl9zcygKKwkJCQkJY2xrX21ncl9kY2UsIHBhdGNoZWRfZGlzcF9jbGspOworCQljbG9ja192 b2x0YWdlX3JlcS5jbG9ja3NfaW5fa2h6ID0gcGF0Y2hlZF9kaXNwX2NsazsKKwkJY2xrX21ncl9i YXNlLT5jbGtzLmRpc3BjbGtfa2h6ID0gZGNlMTEyX3NldF9jbG9jayhjbGtfbWdyX2Jhc2UsIHBh dGNoZWRfZGlzcF9jbGspOworCisJCWRtX3BwX2FwcGx5X2Nsb2NrX2Zvcl92b2x0YWdlX3JlcXVl c3QoY2xrX21ncl9iYXNlLT5jdHgsICZjbG9ja192b2x0YWdlX3JlcSk7CisJfQorCisJaWYgKHNo b3VsZF9zZXRfY2xvY2soc2FmZV90b19sb3dlciwgbWF4X3BpeF9jbGssIGNsa19tZ3JfYmFzZS0+ Y2xrcy5waHljbGtfa2h6KSkgeworCQljbG9ja192b2x0YWdlX3JlcS5jbGtfdHlwZSA9IERNX1BQ X0NMT0NLX1RZUEVfRElTUExBWVBIWUNMSzsKKwkJY2xvY2tfdm9sdGFnZV9yZXEuY2xvY2tzX2lu X2toeiA9IG1heF9waXhfY2xrOworCQljbGtfbWdyX2Jhc2UtPmNsa3MucGh5Y2xrX2toeiA9IG1h eF9waXhfY2xrOworCisJCWRtX3BwX2FwcGx5X2Nsb2NrX2Zvcl92b2x0YWdlX3JlcXVlc3QoY2xr X21ncl9iYXNlLT5jdHgsICZjbG9ja192b2x0YWdlX3JlcSk7CisJfQorCWRjZTExX3BwbGliX2Fw cGx5X2Rpc3BsYXlfcmVxdWlyZW1lbnRzKGNsa19tZ3JfYmFzZS0+Y3R4LT5kYywgY29udGV4dCk7 Cit9CisKKworc3RhdGljIHN0cnVjdCBjbGtfbWdyX2Z1bmNzIGRjZTEyMF9mdW5jcyA9IHsKKwku Z2V0X2RwX3JlZl9jbGtfZnJlcXVlbmN5ID0gZGNlMTJfZ2V0X2RwX3JlZl9mcmVxX2toeiwKKwku dXBkYXRlX2Nsb2NrcyA9IGRjZTEyX3VwZGF0ZV9jbG9ja3MKK307CisKK3ZvaWQgZGNlMTIwX2Ns a19tZ3JfY29uc3RydWN0KHN0cnVjdCBkY19jb250ZXh0ICpjdHgsIHN0cnVjdCBjbGtfbWdyX2lu dGVybmFsICpjbGtfbWdyKQoreworCW1lbWNweShjbGtfbWdyLT5tYXhfY2xrc19ieV9zdGF0ZSwK KwkJZGNlMTIwX21heF9jbGtzX2J5X3N0YXRlLAorCQlzaXplb2YoZGNlMTIwX21heF9jbGtzX2J5 X3N0YXRlKSk7CisKKwlkY2VfY2xrX21ncl9jb25zdHJ1Y3QoY3R4LCBjbGtfbWdyKTsKKworCWNs a19tZ3ItPmJhc2UuZHByZWZjbGtfa2h6ID0gNjAwMDAwOworCWNsa19tZ3ItPmJhc2UuZnVuY3Mg PSAmZGNlMTIwX2Z1bmNzOworfQorCit2b2lkIGRjZTEyMV9jbGtfbWdyX2NvbnN0cnVjdChzdHJ1 Y3QgZGNfY29udGV4dCAqY3R4LCBzdHJ1Y3QgY2xrX21ncl9pbnRlcm5hbCAqY2xrX21ncikKK3sK KwlkY2UxMjBfY2xrX21ncl9jb25zdHJ1Y3QoY3R4LCBjbGtfbWdyKTsKKwljbGtfbWdyLT5iYXNl LmRwcmVmY2xrX2toeiA9IDYyNTAwMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2FtZC9kaXNwbGF5L2RjL2Nsa19tZ3IvZGNlMTIwL2RjZTEyMF9jbGtfbWdyLmggYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY2xrX21nci9kY2UxMjAvZGNlMTIwX2Nsa19tZ3IuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTJkNmZjCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Nsa19tZ3IvZGNlMTIwL2RjZTEy MF9jbGtfbWdyLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyLTE2IEFk dmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAor ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGlu CisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4K KyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZF TlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5H IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3Jz OiBBTUQKKyAqCisgKi8KKworI2lmbmRlZiBEQUxfRENfRENFX0RDRTEyMF9DTEtfTUdSX0hfCisj ZGVmaW5lIERBTF9EQ19EQ0VfRENFMTIwX0NMS19NR1JfSF8KKwordm9pZCBkY2UxMjBfY2xrX21n cl9jb25zdHJ1Y3Qoc3RydWN0IGRjX2NvbnRleHQgKmN0eCwgc3RydWN0IGNsa19tZ3JfaW50ZXJu YWwgKmNsa19tZ3IpOwordm9pZCBkY2UxMjFfY2xrX21ncl9jb25zdHJ1Y3Qoc3RydWN0IGRjX2Nv bnRleHQgKmN0eCwgc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3IpOworCisKKworI2Vu ZGlmIC8qIERBTF9EQ19EQ0VfRENFMTIwX0NMS19NR1JfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9jbGtfbWdyL2RjbjEwL3J2MV9jbGtfbWdyLmMgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY2xrX21nci9kY24xMC9ydjFfY2xrX21nci5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZjk1M2MKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY2xrX21nci9kY24xMC9ydjFf Y2xrX21nci5jCkBAIC0wLDAgKzEsMjg1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTggQWR2YW5j ZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAq IGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoK KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBT SEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBG T1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IEFN RAorICoKKyAqLworCisjaW5jbHVkZSAiY29yZV90eXBlcy5oIgorI2luY2x1ZGUgImNsa19tZ3Jf aW50ZXJuYWwuaCIKKyNpbmNsdWRlICJydjFfY2xrX21nci5oIgorI2luY2x1ZGUgImRjZTEwMC9k Y2VfY2xrX21nci5oIgorI2luY2x1ZGUgImRjZTExMi9kY2UxMTJfY2xrX21nci5oIgorI2luY2x1 ZGUgInJ2MV9jbGtfbWdyX3ZiaW9zX3NtdS5oIgorI2luY2x1ZGUgInJ2MV9jbGtfbWdyX2Nsay5o IgorCitzdGF0aWMgaW50IHJ2MV9kZXRlcm1pbmVfZHBwY2xrX3RocmVzaG9sZChzdHJ1Y3QgY2xr X21ncl9pbnRlcm5hbCAqY2xrX21nciwgc3RydWN0IGRjX2Nsb2NrcyAqbmV3X2Nsb2NrcykKK3sK Kwlib29sIHJlcXVlc3RfZHBwX2RpdiA9IG5ld19jbG9ja3MtPmRpc3BjbGtfa2h6ID4gbmV3X2Ns b2Nrcy0+ZHBwY2xrX2toejsKKwlib29sIGRpc3BjbGtfaW5jcmVhc2UgPSBuZXdfY2xvY2tzLT5k aXNwY2xrX2toeiA+IGNsa19tZ3ItPmJhc2UuY2xrcy5kaXNwY2xrX2toejsKKwlpbnQgZGlzcF9j bGtfdGhyZXNob2xkID0gbmV3X2Nsb2Nrcy0+bWF4X3N1cHBvcnRlZF9kcHBjbGtfa2h6OworCWJv b2wgY3VyX2RwcF9kaXYgPSBjbGtfbWdyLT5iYXNlLmNsa3MuZGlzcGNsa19raHogPiBjbGtfbWdy LT5iYXNlLmNsa3MuZHBwY2xrX2toejsKKworCS8qIGluY3JlYXNlIGNsb2NrLCBsb29raW5nIGZv ciBkaXYgaXMgMCBmb3IgY3VycmVudCwgcmVxdWVzdCBkaXYgaXMgMSovCisJaWYgKGRpc3BjbGtf aW5jcmVhc2UpIHsKKwkJLyogYWxyZWFkeSBkaXZpZGVkIGJ5IDIsIG5vIG5lZWQgdG8gcmVhY2gg dGFyZ2V0IGNsayB3aXRoIDIgc3RlcHMqLworCQlpZiAoY3VyX2RwcF9kaXYpCisJCQlyZXR1cm4g bmV3X2Nsb2Nrcy0+ZGlzcGNsa19raHo7CisKKwkJLyogcmVxdWVzdCBkaXNwIGNsayBpcyBsb3dl ciB0aGFuIG1heGltdW0gc3VwcG9ydGVkIGRwcCBjbGssCisJCSAqIG5vIG5lZWQgdG8gcmVhY2gg dGFyZ2V0IGNsayB3aXRoIHR3byBzdGVwcy4KKwkJICovCisJCWlmIChuZXdfY2xvY2tzLT5kaXNw Y2xrX2toeiA8PSBkaXNwX2Nsa190aHJlc2hvbGQpCisJCQlyZXR1cm4gbmV3X2Nsb2Nrcy0+ZGlz cGNsa19raHo7CisKKwkJLyogdGFyZ2V0IGRwcCBjbGsgbm90IHJlcXVlc3QgZGl2aWRlZCBieSAy LCBzdGlsbCB3aXRoaW4gdGhyZXNob2xkICovCisJCWlmICghcmVxdWVzdF9kcHBfZGl2KQorCQkJ cmV0dXJuIG5ld19jbG9ja3MtPmRpc3BjbGtfa2h6OworCisJfSBlbHNlIHsKKwkJLyogZGVjcmVh c2UgY2xvY2ssIGxvb2tpbmcgZm9yIGN1cnJlbnQgZHBwY2xrIGRpdmlkZWQgYnkgMiwKKwkJICog cmVxdWVzdCBkcHBjbGsgbm90IGRpdmlkZWQgYnkgMi4KKwkJICovCisKKwkJLyogY3VycmVudCBk cHAgY2xrIG5vdCBkaXZpZGVkIGJ5IDIsIG5vIG5lZWQgdG8gcmFtcCovCisJCWlmICghY3VyX2Rw cF9kaXYpCisJCQlyZXR1cm4gbmV3X2Nsb2Nrcy0+ZGlzcGNsa19raHo7CisKKwkJLyogY3VycmVu dCBkaXNwIGNsayBpcyBsb3dlciB0aGFuIGN1cnJlbnQgbWF4aW11bSBkcHAgY2xrLAorCQkgKiBu byBuZWVkIHRvIHJhbXAKKwkJICovCisJCWlmIChjbGtfbWdyLT5iYXNlLmNsa3MuZGlzcGNsa19r aHogPD0gZGlzcF9jbGtfdGhyZXNob2xkKQorCQkJcmV0dXJuIG5ld19jbG9ja3MtPmRpc3BjbGtf a2h6OworCisJCS8qIHJlcXVlc3QgZHBwIGNsayBuZWVkIHRvIGJlIGRpdmlkZWQgYnkgMiAqLwor CQlpZiAocmVxdWVzdF9kcHBfZGl2KQorCQkJcmV0dXJuIG5ld19jbG9ja3MtPmRpc3BjbGtfa2h6 OworCX0KKworCXJldHVybiBkaXNwX2Nsa190aHJlc2hvbGQ7Cit9CisKK3N0YXRpYyB2b2lkIHJh bXBfdXBfZGlzcGNsa193aXRoX2RwcChzdHJ1Y3QgY2xrX21ncl9pbnRlcm5hbCAqY2xrX21nciwg c3RydWN0IGRjICpkYywgc3RydWN0IGRjX2Nsb2NrcyAqbmV3X2Nsb2NrcykKK3sKKwlpbnQgaTsK KwlpbnQgZGlzcGNsa190b19kcHBfdGhyZXNob2xkID0gcnYxX2RldGVybWluZV9kcHBjbGtfdGhy ZXNob2xkKGNsa19tZ3IsIG5ld19jbG9ja3MpOworCWJvb2wgcmVxdWVzdF9kcHBfZGl2ID0gbmV3 X2Nsb2Nrcy0+ZGlzcGNsa19raHogPiBuZXdfY2xvY2tzLT5kcHBjbGtfa2h6OworCisJLyogc2V0 IGRpc3AgY2xrIHRvIGRwcCBjbGsgdGhyZXNob2xkICovCisKKwljbGtfbWdyLT5mdW5jcy0+c2V0 X2Rpc3BjbGsoY2xrX21nciwgZGlzcGNsa190b19kcHBfdGhyZXNob2xkKTsKKwljbGtfbWdyLT5m dW5jcy0+c2V0X2RwcmVmY2xrKGNsa19tZ3IpOworCisKKwkvKiB1cGRhdGUgcmVxdWVzdCBkcHAg Y2xrIGRpdmlzaW9uIG9wdGlvbiAqLworCWZvciAoaSA9IDA7IGkgPCBkYy0+cmVzX3Bvb2wtPnBp cGVfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgcGlwZV9jdHggKnBpcGVfY3R4ID0gJmRjLT5jdXJy ZW50X3N0YXRlLT5yZXNfY3R4LnBpcGVfY3R4W2ldOworCisJCWlmICghcGlwZV9jdHgtPnBsYW5l X3N0YXRlKQorCQkJY29udGludWU7CisKKwkJcGlwZV9jdHgtPnBsYW5lX3Jlcy5kcHAtPmZ1bmNz LT5kcHBfZHBwY2xrX2NvbnRyb2woCisJCQkJcGlwZV9jdHgtPnBsYW5lX3Jlcy5kcHAsCisJCQkJ cmVxdWVzdF9kcHBfZGl2LAorCQkJCXRydWUpOworCX0KKworCS8qIElmIHRhcmdldCBjbGsgbm90 IHNhbWUgYXMgZHBwY2xrIHRocmVzaG9sZCwgc2V0IHRvIHRhcmdldCBjbG9jayAqLworCWlmIChk aXNwY2xrX3RvX2RwcF90aHJlc2hvbGQgIT0gbmV3X2Nsb2Nrcy0+ZGlzcGNsa19raHopIHsKKwkJ Y2xrX21nci0+ZnVuY3MtPnNldF9kaXNwY2xrKGNsa19tZ3IsIG5ld19jbG9ja3MtPmRpc3BjbGtf a2h6KTsKKwkJY2xrX21nci0+ZnVuY3MtPnNldF9kcHJlZmNsayhjbGtfbWdyKTsKKwl9CisKKwor CWNsa19tZ3ItPmJhc2UuY2xrcy5kaXNwY2xrX2toeiA9IG5ld19jbG9ja3MtPmRpc3BjbGtfa2h6 OworCWNsa19tZ3ItPmJhc2UuY2xrcy5kcHBjbGtfa2h6ID0gbmV3X2Nsb2Nrcy0+ZHBwY2xrX2to ejsKKwljbGtfbWdyLT5iYXNlLmNsa3MubWF4X3N1cHBvcnRlZF9kcHBjbGtfa2h6ID0gbmV3X2Ns b2Nrcy0+bWF4X3N1cHBvcnRlZF9kcHBjbGtfa2h6OworfQorCitzdGF0aWMgaW50IGdldF9hY3Rp dmVfZGlzcGxheV9jbnQoCisJCXN0cnVjdCBkYyAqZGMsCisJCXN0cnVjdCBkY19zdGF0ZSAqY29u dGV4dCkKK3sKKwlpbnQgaSwgZGlzcGxheV9jb3VudDsKKworCWRpc3BsYXlfY291bnQgPSAwOwor CWZvciAoaSA9IDA7IGkgPCBjb250ZXh0LT5zdHJlYW1fY291bnQ7IGkrKykgeworCQljb25zdCBz dHJ1Y3QgZGNfc3RyZWFtX3N0YXRlICpzdHJlYW0gPSBjb250ZXh0LT5zdHJlYW1zW2ldOworCisJ CS8qCisJCSAqIE9ubHkgbm90aWZ5IGFjdGl2ZSBzdHJlYW0gb3IgdmlydHVhbCBzdHJlYW0uCisJ CSAqIE5lZWQgdG8gbm90aWZ5IHZpcnR1YWwgc3RyZWFtIHRvIHdvcmsgYXJvdW5kCisJCSAqIGhl YWRsZXNzIGNhc2UuIEhQRCBkb2VzIG5vdCBmaXJlIHdoZW4gc3lzdGVtIGlzIGluCisJCSAqIFMw aTIuCisJCSAqLworCQlpZiAoIXN0cmVhbS0+ZHBtc19vZmYgfHwgc3RyZWFtLT5zaWduYWwgPT0g U0lHTkFMX1RZUEVfVklSVFVBTCkKKwkJCWRpc3BsYXlfY291bnQrKzsKKwl9CisKKwlyZXR1cm4g ZGlzcGxheV9jb3VudDsKK30KKworc3RhdGljIHZvaWQgcnYxX3VwZGF0ZV9jbG9ja3Moc3RydWN0 IGNsa19tZ3IgKmNsa19tZ3JfYmFzZSwKKwkJCXN0cnVjdCBkY19zdGF0ZSAqY29udGV4dCwKKwkJ CWJvb2wgc2FmZV90b19sb3dlcikKK3sKKwlzdHJ1Y3QgY2xrX21ncl9pbnRlcm5hbCAqY2xrX21n ciA9IFRPX0NMS19NR1JfSU5URVJOQUwoY2xrX21ncl9iYXNlKTsKKwlzdHJ1Y3QgZGMgKmRjID0g Y2xrX21ncl9iYXNlLT5jdHgtPmRjOworCXN0cnVjdCBkY19kZWJ1Z19vcHRpb25zICpkZWJ1ZyA9 ICZkYy0+ZGVidWc7CisJc3RydWN0IGRjX2Nsb2NrcyAqbmV3X2Nsb2NrcyA9ICZjb250ZXh0LT5i d19jdHguYncuZGNuLmNsazsKKwlzdHJ1Y3QgcHBfc211X2Z1bmNzX3J2ICpwcF9zbXUgPSBOVUxM OworCWJvb2wgc2VuZF9yZXF1ZXN0X3RvX2luY3JlYXNlID0gZmFsc2U7CisJYm9vbCBzZW5kX3Jl cXVlc3RfdG9fbG93ZXIgPSBmYWxzZTsKKwlpbnQgZGlzcGxheV9jb3VudDsKKworCWJvb2wgZW50 ZXJfZGlzcGxheV9vZmYgPSBmYWxzZTsKKworCUFTU0VSVChjbGtfbWdyLT5wcF9zbXUpOworCisJ cHBfc211ID0gJmNsa19tZ3ItPnBwX3NtdS0+cnZfZnVuY3M7CisKKwlkaXNwbGF5X2NvdW50ID0g Z2V0X2FjdGl2ZV9kaXNwbGF5X2NudChkYywgY29udGV4dCk7CisKKwlpZiAoZGlzcGxheV9jb3Vu dCA9PSAwKQorCQllbnRlcl9kaXNwbGF5X29mZiA9IHRydWU7CisKKwlpZiAoZW50ZXJfZGlzcGxh eV9vZmYgPT0gc2FmZV90b19sb3dlcikgeworCQkvKgorCQkgKiBOb3RpZnkgU01VIGFjdGl2ZSBk aXNwbGF5cworCQkgKiBpZiBmdW5jdGlvbiBwb2ludGVyIG5vdCBzZXQgdXAsIHRoaXMgbWVzc2Fn ZSBpcworCQkgKiBzZW50IGFzIHBhcnQgb2YgcHBsaWJfYXBwbHlfZGlzcGxheV9yZXF1aXJlbWVu dHMuCisJCSAqLworCQlpZiAocHBfc211LT5zZXRfZGlzcGxheV9jb3VudCkKKwkJCXBwX3NtdS0+ c2V0X2Rpc3BsYXlfY291bnQoJnBwX3NtdS0+cHBfc211LCBkaXNwbGF5X2NvdW50KTsKKwl9CisK KwlpZiAobmV3X2Nsb2Nrcy0+ZGlzcGNsa19raHogPiBjbGtfbWdyX2Jhc2UtPmNsa3MuZGlzcGNs a19raHoKKwkJCXx8IG5ld19jbG9ja3MtPnBoeWNsa19raHogPiBjbGtfbWdyX2Jhc2UtPmNsa3Mu cGh5Y2xrX2toegorCQkJfHwgbmV3X2Nsb2Nrcy0+ZmNsa19raHogPiBjbGtfbWdyX2Jhc2UtPmNs a3MuZmNsa19raHoKKwkJCXx8IG5ld19jbG9ja3MtPmRjZmNsa19raHogPiBjbGtfbWdyX2Jhc2Ut PmNsa3MuZGNmY2xrX2toeikKKwkJc2VuZF9yZXF1ZXN0X3RvX2luY3JlYXNlID0gdHJ1ZTsKKwor CWlmIChzaG91bGRfc2V0X2Nsb2NrKHNhZmVfdG9fbG93ZXIsIG5ld19jbG9ja3MtPnBoeWNsa19r aHosIGNsa19tZ3JfYmFzZS0+Y2xrcy5waHljbGtfa2h6KSkgeworCQljbGtfbWdyX2Jhc2UtPmNs a3MucGh5Y2xrX2toeiA9IG5ld19jbG9ja3MtPnBoeWNsa19raHo7CisJCXNlbmRfcmVxdWVzdF90 b19sb3dlciA9IHRydWU7CisJfQorCisJLy8gRiBDbG9jaworCWlmIChkZWJ1Zy0+Zm9yY2VfZmNs a19raHogIT0gMCkKKwkJbmV3X2Nsb2Nrcy0+ZmNsa19raHogPSBkZWJ1Zy0+Zm9yY2VfZmNsa19r aHo7CisKKwlpZiAoc2hvdWxkX3NldF9jbG9jayhzYWZlX3RvX2xvd2VyLCBuZXdfY2xvY2tzLT5m Y2xrX2toeiwgY2xrX21ncl9iYXNlLT5jbGtzLmZjbGtfa2h6KSkgeworCQljbGtfbWdyX2Jhc2Ut PmNsa3MuZmNsa19raHogPSBuZXdfY2xvY2tzLT5mY2xrX2toejsKKwkJc2VuZF9yZXF1ZXN0X3Rv X2xvd2VyID0gdHJ1ZTsKKwl9CisKKwkvL0RDRiBDbG9jaworCWlmIChzaG91bGRfc2V0X2Nsb2Nr KHNhZmVfdG9fbG93ZXIsIG5ld19jbG9ja3MtPmRjZmNsa19raHosIGNsa19tZ3JfYmFzZS0+Y2xr cy5kY2ZjbGtfa2h6KSkgeworCQljbGtfbWdyX2Jhc2UtPmNsa3MuZGNmY2xrX2toeiA9IG5ld19j bG9ja3MtPmRjZmNsa19raHo7CisJCXNlbmRfcmVxdWVzdF90b19sb3dlciA9IHRydWU7CisJfQor CisJaWYgKHNob3VsZF9zZXRfY2xvY2soc2FmZV90b19sb3dlciwKKwkJCW5ld19jbG9ja3MtPmRj ZmNsa19kZWVwX3NsZWVwX2toeiwgY2xrX21ncl9iYXNlLT5jbGtzLmRjZmNsa19kZWVwX3NsZWVw X2toeikpIHsKKwkJY2xrX21ncl9iYXNlLT5jbGtzLmRjZmNsa19kZWVwX3NsZWVwX2toeiA9IG5l d19jbG9ja3MtPmRjZmNsa19kZWVwX3NsZWVwX2toejsKKwkJc2VuZF9yZXF1ZXN0X3RvX2xvd2Vy ID0gdHJ1ZTsKKwl9CisKKwkvKiBtYWtlIHN1cmUgZGNmIGNsayBpcyBiZWZvcmUgZHBwIGNsayB0 bworCSAqIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCB2b2x0YWdlIHRvIHJ1biBkcHAgY2xrCisJ ICovCisJaWYgKHNlbmRfcmVxdWVzdF90b19pbmNyZWFzZSkgeworCQkvKnVzZSBkY2ZjbGsgdG8g cmVxdWVzdCB2b2x0YWdlKi8KKwkJaWYgKHBwX3NtdS0+c2V0X2hhcmRfbWluX2ZjbGtfYnlfZnJl cSAmJgorCQkJCXBwX3NtdS0+c2V0X2hhcmRfbWluX2RjZmNsa19ieV9mcmVxICYmCisJCQkJcHBf c211LT5zZXRfbWluX2RlZXBfc2xlZXBfZGNmY2xrKSB7CisJCQlwcF9zbXUtPnNldF9oYXJkX21p bl9mY2xrX2J5X2ZyZXEoJnBwX3NtdS0+cHBfc211LCBuZXdfY2xvY2tzLT5mY2xrX2toeiAvIDEw MDApOworCQkJcHBfc211LT5zZXRfaGFyZF9taW5fZGNmY2xrX2J5X2ZyZXEoJnBwX3NtdS0+cHBf c211LCBuZXdfY2xvY2tzLT5kY2ZjbGtfa2h6IC8gMTAwMCk7CisJCQlwcF9zbXUtPnNldF9taW5f ZGVlcF9zbGVlcF9kY2ZjbGsoJnBwX3NtdS0+cHBfc211LCAobmV3X2Nsb2Nrcy0+ZGNmY2xrX2Rl ZXBfc2xlZXBfa2h6ICsgOTk5KSAvIDEwMDApOworCQl9CisJfQorCisJLyogZGNuMSBkcHBjbGsg aXMgdGllZCB0byBkaXNwY2xrICovCisJLyogcHJvZ3JhbSBkaXNwY2xrIG9uID0gYXMgYSB3L2Eg Zm9yIHNsZWVwIHJlc3VtZSBjbG9jayByYW1waW5nIGlzc3VlcyAqLworCWlmIChzaG91bGRfc2V0 X2Nsb2NrKHNhZmVfdG9fbG93ZXIsIG5ld19jbG9ja3MtPmRpc3BjbGtfa2h6LCBjbGtfbWdyX2Jh c2UtPmNsa3MuZGlzcGNsa19raHopCisJCQl8fCBuZXdfY2xvY2tzLT5kaXNwY2xrX2toeiA9PSBj bGtfbWdyX2Jhc2UtPmNsa3MuZGlzcGNsa19raHopIHsKKwkJcmFtcF91cF9kaXNwY2xrX3dpdGhf ZHBwKGNsa19tZ3IsIGRjLCBuZXdfY2xvY2tzKTsKKwkJY2xrX21ncl9iYXNlLT5jbGtzLmRpc3Bj bGtfa2h6ID0gbmV3X2Nsb2Nrcy0+ZGlzcGNsa19raHo7CisJCXNlbmRfcmVxdWVzdF90b19sb3dl ciA9IHRydWU7CisJfQorCisJaWYgKCFzZW5kX3JlcXVlc3RfdG9faW5jcmVhc2UgJiYgc2VuZF9y ZXF1ZXN0X3RvX2xvd2VyKSB7CisJCS8qdXNlIGRjZmNsayB0byByZXF1ZXN0IHZvbHRhZ2UqLwor CQlpZiAocHBfc211LT5zZXRfaGFyZF9taW5fZmNsa19ieV9mcmVxICYmCisJCQkJcHBfc211LT5z ZXRfaGFyZF9taW5fZGNmY2xrX2J5X2ZyZXEgJiYKKwkJCQlwcF9zbXUtPnNldF9taW5fZGVlcF9z bGVlcF9kY2ZjbGspIHsKKwkJCXBwX3NtdS0+c2V0X2hhcmRfbWluX2ZjbGtfYnlfZnJlcSgmcHBf c211LT5wcF9zbXUsIG5ld19jbG9ja3MtPmZjbGtfa2h6IC8gMTAwMCk7CisJCQlwcF9zbXUtPnNl dF9oYXJkX21pbl9kY2ZjbGtfYnlfZnJlcSgmcHBfc211LT5wcF9zbXUsIG5ld19jbG9ja3MtPmRj ZmNsa19raHogLyAxMDAwKTsKKwkJCXBwX3NtdS0+c2V0X21pbl9kZWVwX3NsZWVwX2RjZmNsaygm cHBfc211LT5wcF9zbXUsIChuZXdfY2xvY2tzLT5kY2ZjbGtfZGVlcF9zbGVlcF9raHogKyA5OTkp IC8gMTAwMCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX21ncl9mdW5jcyBydjFf Y2xrX2Z1bmNzID0geworCS5nZXRfZHBfcmVmX2Nsa19mcmVxdWVuY3kgPSBkY2UxMl9nZXRfZHBf cmVmX2ZyZXFfa2h6LAorCS51cGRhdGVfY2xvY2tzID0gcnYxX3VwZGF0ZV9jbG9ja3MsCit9Owor CitzdGF0aWMgc3RydWN0IGNsa19tZ3JfaW50ZXJuYWxfZnVuY3MgcnYxX2Nsa19pbnRlcm5hbF9m dW5jcyA9IHsKKwkuc2V0X2Rpc3BjbGsgPSBydjFfdmJpb3Nfc211X3NldF9kaXNwY2xrLAorCS5z ZXRfZHByZWZjbGsgPSBkY2UxMTJfc2V0X2RwcmVmY2xrCit9OworCit2b2lkIHJ2MV9jbGtfbWdy X2NvbnN0cnVjdChzdHJ1Y3QgZGNfY29udGV4dCAqY3R4LCBzdHJ1Y3QgY2xrX21ncl9pbnRlcm5h bCAqY2xrX21nciwgc3RydWN0IHBwX3NtdV9mdW5jcyAqcHBfc211KQoreworCXN0cnVjdCBkY19k ZWJ1Z19vcHRpb25zICpkZWJ1ZyA9ICZjdHgtPmRjLT5kZWJ1ZzsKKwlzdHJ1Y3QgZGNfYmlvcyAq YnAgPSBjdHgtPmRjX2Jpb3M7CisJc3RydWN0IGRjX2Zpcm13YXJlX2luZm8gZndfaW5mbyA9IHsg eyAwIH0gfTsKKworCWNsa19tZ3ItPmJhc2UuY3R4ID0gY3R4OworCWNsa19tZ3ItPnBwX3NtdSA9 IHBwX3NtdTsKKwljbGtfbWdyLT5iYXNlLmZ1bmNzID0gJnJ2MV9jbGtfZnVuY3M7CisJY2xrX21n ci0+ZnVuY3MgPSAmcnYxX2Nsa19pbnRlcm5hbF9mdW5jczsKKworCWNsa19tZ3ItPmRmc19ieXBh c3NfZGlzcF9jbGsgPSAwOworCisJY2xrX21nci0+ZHByZWZjbGtfc3NfcGVyY2VudGFnZSA9IDA7 CisJY2xrX21nci0+ZHByZWZjbGtfc3NfZGl2aWRlciA9IDEwMDA7CisJY2xrX21nci0+c3Nfb25f ZHByZWZjbGsgPSBmYWxzZTsKKwljbGtfbWdyLT5iYXNlLmRwcmVmY2xrX2toeiA9IDYwMDAwMDsK KworCWlmIChicC0+aW50ZWdyYXRlZF9pbmZvKQorCQljbGtfbWdyLT5kZW50aXN0X3Zjb19mcmVx X2toeiA9IGJwLT5pbnRlZ3JhdGVkX2luZm8tPmRlbnRpc3RfdmNvX2ZyZXE7CisJaWYgKGNsa19t Z3ItPmRlbnRpc3RfdmNvX2ZyZXFfa2h6ID09IDApIHsKKwkJYnAtPmZ1bmNzLT5nZXRfZmlybXdh cmVfaW5mbyhicCwgJmZ3X2luZm8pOworCQljbGtfbWdyLT5kZW50aXN0X3Zjb19mcmVxX2toeiA9 IGZ3X2luZm8uc211X2dwdV9wbGxfb3V0cHV0X2ZyZXE7CisJCWlmIChjbGtfbWdyLT5kZW50aXN0 X3Zjb19mcmVxX2toeiA9PSAwKQorCQkJY2xrX21nci0+ZGVudGlzdF92Y29fZnJlcV9raHogPSAz NjAwMDAwOworCX0KKworCWlmICghZGVidWctPmRpc2FibGVfZGZzX2J5cGFzcyAmJiBicC0+aW50 ZWdyYXRlZF9pbmZvKQorCQlpZiAoYnAtPmludGVncmF0ZWRfaW5mby0+Z3B1X2NhcF9pbmZvICYg REZTX0JZUEFTU19FTkFCTEUpCisJCQljbGtfbWdyLT5kZnNfYnlwYXNzX2VuYWJsZWQgPSB0cnVl OworCisJZGNlX2Nsb2NrX3JlYWRfc3NfaW5mbyhjbGtfbWdyKTsKK30KKworCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY2xrX21nci9kY24xMC9ydjFfY2xrX21n ci5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Nsa19tZ3IvZGNuMTAvcnYxX2Ns a19tZ3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODA3NDc4Ci0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Nsa19tZ3IvZGNu MTAvcnYxX2Nsa19tZ3IuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTgg QWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBj b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0 cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us CisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQg aW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJl LgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBF VkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJ QUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJ TkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhv cnM6IEFNRAorICoKKyAqLworCisjaWZuZGVmIF9fUlYxX0NMS19NR1JfSF9fCisjZGVmaW5lIF9f UlYxX0NMS19NR1JfSF9fCisKK3ZvaWQgcnYxX2Nsa19tZ3JfY29uc3RydWN0KHN0cnVjdCBkY19j b250ZXh0ICpjdHgsIHN0cnVjdCBjbGtfbWdyX2ludGVybmFsICpjbGtfbWdyLCBzdHJ1Y3QgcHBf c211X2Z1bmNzICpwcF9zbXUpOworCisjZW5kaWYgLy9fX0RDTjEwX0NMS19NR1JfSF9fCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY2xrX21nci9kY24xMC9ydjFf Y2xrX21ncl9jbGsuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9jbGtfbWdyL2Rj bjEwL3J2MV9jbGtfbWdyX2Nsay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjYxZGQxMjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkv ZGMvY2xrX21nci9kY24xMC9ydjFfY2xrX21ncl9jbGsuYwpAQCAtMCwwICsxLDc5IEBACisvKgor ICogQ29weXJpZ2h0IDIwMTItMTYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAq IFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVy c29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQg ZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUg U29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv bgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRp c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3 YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1 cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cisg KgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIo UykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBP VEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNP RlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IEFNRAorICoKKyAqLworCisjaW5jbHVkZSAicmVnX2hl bHBlci5oIgorI2luY2x1ZGUgImNsa19tZ3JfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJydjFfY2xr X21ncl9jbGsuaCIKKworI2luY2x1ZGUgImlwL0Rpc2NvdmVyeS9od2lkLmgiCisjaW5jbHVkZSAi aXAvRGlzY292ZXJ5L3YxL2lwX29mZnNldF8xLmgiCisjaW5jbHVkZSAiaXAvQ0xLL2Nsa18xMF8w X2RlZmF1bHQuaCIKKyNpbmNsdWRlICJpcC9DTEsvY2xrXzEwXzBfb2Zmc2V0LmgiCisjaW5jbHVk ZSAiaXAvQ0xLL2Nsa18xMF8wX3JlZy5oIgorI2luY2x1ZGUgImlwL0NMSy9jbGtfMTBfMF9zaF9t YXNrLmgiCisKKyNpbmNsdWRlICJkY2UxMDAvZGNlX2Nsa19tZ3IuaCIKKworI2RlZmluZSBDTEtf QkFTRV9JTk5FUihpbnN0KSBcCisJQ0xLX0JBU0VfX0lOU1QgIyMgaW5zdCAjIyBfU0VHMAorCisK KyNkZWZpbmUgQ0xLX1JFRyhyZWdfbmFtZSwgYmxvY2ssIGluc3QpXAorCUNMS19CQVNFKG1tICMj IGJsb2NrICMjIF8gIyMgaW5zdCAjIyBfICMjIHJlZ19uYW1lICMjIF9CQVNFX0lEWCkgKyBcCisJ CQkJCW1tICMjIGJsb2NrICMjIF8gIyMgaW5zdCAjIyBfICMjIHJlZ19uYW1lCisKKyNkZWZpbmUg UkVHKHJlZ19uYW1lKSBcCisJQ0xLX1JFRyhyZWdfbmFtZSwgQ0xLMCwgMCkKKworCisvKiBPbmx5 IHVzZWQgYnkgdGVzdGluZyBmcmFtZXdvcmsqLwordm9pZCBydjFfZHVtcF9jbGtfcmVnaXN0ZXJz KHN0cnVjdCBjbGtfc3RhdGVfcmVnaXN0ZXJzICpyZWdzLCBzdHJ1Y3QgY2xrX2J5cGFzcyAqYnlw YXNzLCBzdHJ1Y3QgY2xrX21nciAqY2xrX21ncl9iYXNlKQoreworCXN0cnVjdCBjbGtfbWdyX2lu dGVybmFsICpjbGtfbWdyID0gVE9fQ0xLX01HUl9JTlRFUk5BTChjbGtfbWdyX2Jhc2UpOworCisJ CXJlZ3MtPkNMSzBfQ0xLOF9DVVJSRU5UX0NOVCA9IFJFR19SRUFEKENMSzBfQ0xLOF9DVVJSRU5U X0NOVCkgLyAxMDsgLy9kY2YgY2xrCisKKwkJYnlwYXNzLT5kY2ZjbGtfYnlwYXNzID0gUkVHX1JF QUQoQ0xLMF9DTEs4X0JZUEFTU19DTlRMKSAmIDB4MDAwNzsKKwkJaWYgKGJ5cGFzcy0+ZGNmY2xr X2J5cGFzcyA8IDAgfHwgYnlwYXNzLT5kY2ZjbGtfYnlwYXNzID4gNCkKKwkJCWJ5cGFzcy0+ZGNm Y2xrX2J5cGFzcyA9IDA7CisKKworCQlyZWdzLT5DTEswX0NMSzhfRFNfQ05UTCA9IFJFR19SRUFE KENMSzBfQ0xLOF9EU19DTlRMKSAvIDEwOwkvL2RjZiBkZWVwIHNsZWVwIGRpdmlkZXIKKworCQly ZWdzLT5DTEswX0NMSzhfQUxMT1dfRFMgPSBSRUdfUkVBRChDTEswX0NMSzhfQUxMT1dfRFMpOyAv L2RjZiBkZWVwIHNsZWVwIGFsbG93CisKKwkJcmVncy0+Q0xLMF9DTEsxMF9DVVJSRU5UX0NOVCA9 IFJFR19SRUFEKENMSzBfQ0xLMTBfQ1VSUkVOVF9DTlQpIC8gMTA7IC8vZHByZWYgY2xrCisKKwkJ YnlwYXNzLT5kaXNwY2xrX3B5cGFzcyA9IFJFR19SRUFEKENMSzBfQ0xLMTBfQllQQVNTX0NOVEwp ICYgMHgwMDA3OworCQlpZiAoYnlwYXNzLT5kaXNwY2xrX3B5cGFzcyA8IDAgfHwgYnlwYXNzLT5k aXNwY2xrX3B5cGFzcyA+IDQpCisJCQlieXBhc3MtPmRpc3BjbGtfcHlwYXNzID0gMDsKKworCQly ZWdzLT5DTEswX0NMSzExX0NVUlJFTlRfQ05UID0gUkVHX1JFQUQoQ0xLMF9DTEsxMV9DVVJSRU5U X0NOVCkgLyAxMDsgLy9kaXNwIGNsaworCisJCWJ5cGFzcy0+ZHByZWZjbGtfYnlwYXNzID0gUkVH X1JFQUQoQ0xLMF9DTEsxMV9CWVBBU1NfQ05UTCkgJiAweDAwMDc7CisJCWlmIChieXBhc3MtPmRw cmVmY2xrX2J5cGFzcyA8IDAgfHwgYnlwYXNzLT5kcHJlZmNsa19ieXBhc3MgPiA0KQorCQkJYnlw YXNzLT5kcHJlZmNsa19ieXBhc3MgPSAwOworCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2Rpc3BsYXkvZGMvY2xrX21nci9kY24xMC9ydjFfY2xrX21ncl9jbGsuaCBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9jbGtfbWdyL2RjbjEwL3J2MV9jbGtfbWdyX2Nsay5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OGUzNDUKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY2xrX21nci9kY24xMC9ydjFf Y2xrX21ncl9jbGsuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTggQWR2 YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisg KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4K KyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJM RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcg RlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT RSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6 IEFNRAorICoKKyAqLworCisjaWZuZGVmIERBTF9EQ19EQ04xMF9SVjFfQ0xLX01HUl9DTEtfSF8K KyNkZWZpbmUgREFMX0RDX0RDTjEwX1JWMV9DTEtfTUdSX0NMS19IXworCisjZW5kaWYgLyogREFM X0RDX0RDTjEwX1JWMV9DTEtfTUdSX0NMS19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9kaXNwbGF5L2RjL2Nsa19tZ3IvZGNuMTAvcnYxX2Nsa19tZ3JfdmJpb3Nfc211LmMg Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY2xrX21nci9kY24xMC9ydjFfY2xrX21n cl92Ymlvc19zbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTYwODcw Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Nsa19t Z3IvZGNuMTAvcnYxX2Nsa19tZ3JfdmJpb3Nfc211LmMKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisg KiBDb3B5cmlnaHQgMjAxMi0xNiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICog UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz b24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk b2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBT b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9u CisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlz dHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdh cmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVy bmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAq CisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihT KSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9U SEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09G VFdBUkUuCisgKgorICogQXV0aG9yczogQU1ECisgKgorICovCisKKyNpbmNsdWRlICJjb3JlX3R5 cGVzLmgiCisjaW5jbHVkZSAiY2xrX21ncl9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInJlZ19oZWxw ZXIuaCIKKworI2RlZmluZSBNQVhfSU5TVEFOQ0UJNQorI2RlZmluZSBNQVhfU0VHTUVOVAkJNQor CitzdHJ1Y3QgSVBfQkFTRV9JTlNUQU5DRSB7CisJdW5zaWduZWQgaW50IHNlZ21lbnRbTUFYX1NF R01FTlRdOworfTsKKworc3RydWN0IElQX0JBU0UgeworCXN0cnVjdCBJUF9CQVNFX0lOU1RBTkNF IGluc3RhbmNlW01BWF9JTlNUQU5DRV07Cit9OworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgSVBf QkFTRSBNUDFfQkFTRSAgPSB7IHsgeyB7IDB4MDAwMTYwMDAsIDAsIDAsIDAsIDAgfSB9LAorCQkJ CQkJCQkJCQkgeyB7IDAsIDAsIDAsIDAsIDAgfSB9LAorCQkJCQkJCQkJCQkgeyB7IDAsIDAsIDAs IDAsIDAgfSB9LAorCQkJCQkJCQkJCQkgeyB7IDAsIDAsIDAsIDAsIDAgfSB9LAorCQkJCQkJCQkJ CQkgeyB7IDAsIDAsIDAsIDAsIDAgfSB9IH0gfTsKKworI2RlZmluZSBtbU1QMV9TTU5fQzJQTVNH XzkxICAgICAgICAgICAgMHgyOUIKKyNkZWZpbmUgbW1NUDFfU01OX0MyUE1TR184MyAgICAgICAg ICAgIDB4MjkzCisjZGVmaW5lIG1tTVAxX1NNTl9DMlBNU0dfNjcgICAgICAgICAgICAweDI4Mwor I2RlZmluZSBtbU1QMV9TTU5fQzJQTVNHXzkxX0JBU0VfSURYICAgMAorI2RlZmluZSBtbU1QMV9T TU5fQzJQTVNHXzgzX0JBU0VfSURYICAgMAorI2RlZmluZSBtbU1QMV9TTU5fQzJQTVNHXzY3X0JB U0VfSURYICAgMAorCisjZGVmaW5lIE1QMV9TTU5fQzJQTVNHXzkxX19DT05URU5UX01BU0sgICAg ICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmZMCisjZGVmaW5lIE1QMV9TTU5fQzJQTVNHXzgzX19D T05URU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmZMCisjZGVmaW5lIE1QMV9T TU5fQzJQTVNHXzY3X19DT05URU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmZM CisjZGVmaW5lIE1QMV9TTU5fQzJQTVNHXzkxX19DT05URU5UX19TSElGVCAgICAgICAgICAgICAg ICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgTVAxX1NNTl9DMlBNU0dfODNfX0NPTlRFTlRfX1NISUZU ICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBNUDFfU01OX0MyUE1TR182N19f Q09OVEVOVF9fU0hJRlQgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKyNkZWZpbmUgUkVH KHJlZ19uYW1lKSBcCisJKE1QMV9CQVNFLmluc3RhbmNlWzBdLnNlZ21lbnRbbW0gIyMgcmVnX25h bWUgIyMgX0JBU0VfSURYXSArIG1tICMjIHJlZ19uYW1lKQorCisjZGVmaW5lIEZOKHJlZ19uYW1l LCBmaWVsZCkgXAorCUZEKHJlZ19uYW1lIyNfXyMjZmllbGQpCisKKyNkZWZpbmUgVkJJT1NTTUNf TVNHX1NldERpc3BjbGtGcmVxICAgICAgICAgICAweDQKKyNkZWZpbmUgVkJJT1NTTUNfTVNHX1Nl dERwcmVmY2xrRnJlcSAgICAgICAgICAweDUKKworaW50IHJ2MV92Ymlvc19zbXVfc2V0X2Rpc3Bj bGsoc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3IsIGludCByZXF1ZXN0ZWRfZGlzcGNs a19raHopCit7CisKKwlpbnQgYWN0dWFsX2Rpc3BjbGtfc2V0X2toeiA9IC0xOworCXN0cnVjdCBk YyAqY29yZV9kYyA9IGNsa19tZ3ItPmJhc2UuY3R4LT5kYzsKKwlzdHJ1Y3QgZG1jdSAqZG1jdSA9 IGNvcmVfZGMtPnJlc19wb29sLT5kbWN1OworCisJLyogRmlyc3QgY2xlYXIgcmVzcG9uc2UgcmVn aXN0ZXIgKi8KKwkvL2RtX3dyaXRlX3JlZyhjdHgsIG1tTVAxX1NNTl9DMlBNU0dfOTEsIDApOwor CVJFR19XUklURShNUDFfU01OX0MyUE1TR185MSwgMCk7CisKKwkvKiBTZXQgdGhlIHBhcmFtZXRl ciByZWdpc3RlciBmb3IgdGhlIFNNVSBtZXNzYWdlLCB1bml0IGlzIE1oeiAqLworCS8vZG1fd3Jp dGVfcmVnKGN0eCwgbW1NUDFfU01OX0MyUE1TR184MywgcmVxdWVzdGVkX2Rpc3BjbGtfa2h6IC8g MTAwMCk7CisJUkVHX1dSSVRFKE1QMV9TTU5fQzJQTVNHXzgzLCByZXF1ZXN0ZWRfZGlzcGNsa19r aHogLyAxMDAwKTsKKworCS8qIFRyaWdnZXIgdGhlIG1lc3NhZ2UgdHJhbnNhY3Rpb24gYnkgd3Jp dGluZyB0aGUgbWVzc2FnZSBJRCAqLworCS8vZG1fd3JpdGVfcmVnKGN0eCwgbW1NUDFfU01OX0My UE1TR182NywgVkJJT1NTTUNfTVNHX1NldERpc3BjbGtGcmVxKTsKKwlSRUdfV1JJVEUoTVAxX1NN Tl9DMlBNU0dfNjcsIFZCSU9TU01DX01TR19TZXREaXNwY2xrRnJlcSk7CisKKwlSRUdfV0FJVChN UDFfU01OX0MyUE1TR185MSwgQ09OVEVOVCwgMSwgMTAsIDIwMDAwMCk7CisKKwkvKiBBY3R1YWwg ZGlzcGNsayBzZXQgaXMgcmV0dXJuZWQgaW4gdGhlIHBhcmFtZXRlciByZWdpc3RlciAqLworCWFj dHVhbF9kaXNwY2xrX3NldF9raHogPSBSRUdfUkVBRChNUDFfU01OX0MyUE1TR184MykgKiAxMDAw OworCisJaWYgKCFJU19GUEdBX01BWElNVVNfREMoY29yZV9kYy0+Y3R4LT5kY2VfZW52aXJvbm1l bnQpKSB7CisJCWlmIChkbWN1ICYmIGRtY3UtPmZ1bmNzLT5pc19kbWN1X2luaXRpYWxpemVkKGRt Y3UpKSB7CisJCQlpZiAoY2xrX21nci0+ZGZzX2J5cGFzc19kaXNwX2NsayAhPSBhY3R1YWxfZGlz cGNsa19zZXRfa2h6KQorCQkJCWRtY3UtPmZ1bmNzLT5zZXRfcHNyX3dhaXRfbG9vcChkbWN1LAor CQkJCQkJYWN0dWFsX2Rpc3BjbGtfc2V0X2toeiAvIDEwMDAgLyA3KTsKKwkJfQorCX0KKworCXJl dHVybiBhY3R1YWxfZGlzcGNsa19zZXRfa2h6OworfQorCitpbnQgcnYxX3ZiaW9zX3NtdV9zZXRf ZHByZWZjbGsoc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3IpCit7CisJaW50IGFjdHVh bF9kcHJlZmNsa19zZXRfa2h6ID0gLTE7CisKKwlSRUdfV1JJVEUoTVAxX1NNTl9DMlBNU0dfOTEs IDApOworCisJLyogU2V0IHRoZSBwYXJhbWV0ZXIgcmVnaXN0ZXIgZm9yIHRoZSBTTVUgbWVzc2Fn ZSAqLworCVJFR19XUklURShNUDFfU01OX0MyUE1TR184MywgY2xrX21nci0+YmFzZS5kcHJlZmNs a19raHogLyAxMDAwKTsKKworCS8qIFRyaWdnZXIgdGhlIG1lc3NhZ2UgdHJhbnNhY3Rpb24gYnkg d3JpdGluZyB0aGUgbWVzc2FnZSBJRCAqLworCVJFR19XUklURShNUDFfU01OX0MyUE1TR182Nywg VkJJT1NTTUNfTVNHX1NldERwcmVmY2xrRnJlcSk7CisKKwkvKiBXYWl0IGZvciBTTVUgcmVzcG9u c2UgKi8KKwlSRUdfV0FJVChNUDFfU01OX0MyUE1TR185MSwgQ09OVEVOVCwgMSwgMTAsIDIwMDAw MCk7CisKKwlhY3R1YWxfZHByZWZjbGtfc2V0X2toeiA9IFJFR19SRUFEKE1QMV9TTU5fQzJQTVNH XzgzKSAqIDEwMDA7CisKKwlyZXR1cm4gYWN0dWFsX2RwcmVmY2xrX3NldF9raHo7Cit9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY2xrX21nci9kY24xMC9ydjFf Y2xrX21ncl92Ymlvc19zbXUuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9jbGtf bWdyL2RjbjEwL3J2MV9jbGtfbWdyX3ZiaW9zX3NtdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjA4M2NiMzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2Rpc3BsYXkvZGMvY2xrX21nci9kY24xMC9ydjFfY2xrX21ncl92Ymlvc19zbXUuaApAQCAt MCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTggQWR2YW5jZWQgTWljcm8gRGV2aWNl cywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENP UFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVB TElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IEFNRAorICoKKyAqLworCisj aWZuZGVmIERBTF9EQ19EQ04xMF9SVjFfQ0xLX01HUl9WQklPU19TTVVfSF8KKyNkZWZpbmUgREFM X0RDX0RDTjEwX1JWMV9DTEtfTUdSX1ZCSU9TX1NNVV9IXworCitpbnQgcnYxX3ZiaW9zX3NtdV9z ZXRfZGlzcGNsayhzdHJ1Y3QgY2xrX21ncl9pbnRlcm5hbCAqY2xrX21nciwgaW50IHJlcXVlc3Rl ZF9kaXNwY2xrX2toeik7CitpbnQgcnYxX3ZiaW9zX3NtdV9zZXRfZHByZWZjbGsoc3RydWN0IGNs a19tZ3JfaW50ZXJuYWwgKmNsa19tZ3IpOworCisjZW5kaWYgLyogREFMX0RDX0RDTjEwX1JWMV9D TEtfTUdSX1ZCSU9TX1NNVV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9k aXNwbGF5L2RjL2Nsa19tZ3IvZGNuMTAvcnYyX2Nsa19tZ3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvZGlzcGxheS9kYy9jbGtfbWdyL2RjbjEwL3J2Ml9jbGtfbWdyLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uYjliYTZkYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvZGlzcGxheS9kYy9jbGtfbWdyL2RjbjEwL3J2Ml9jbGtfbWdyLmMKQEAgLTAs MCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4IEFkdmFuY2VkIE1pY3JvIERldmljZXMs IEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn ZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRv IGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRo b3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVz IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1 YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUg SVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVT UyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZ UklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJ TkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBBTUQKKyAqCisgKi8KKworI2lu Y2x1ZGUgImNvcmVfdHlwZXMuaCIKKyNpbmNsdWRlICJjbGtfbWdyX2ludGVybmFsLmgiCisjaW5j bHVkZSAicnYxX2Nsa19tZ3IuaCIKKyNpbmNsdWRlICJydjJfY2xrX21nci5oIgorI2luY2x1ZGUg ImRjZTExMi9kY2UxMTJfY2xrX21nci5oIgorCitzdGF0aWMgc3RydWN0IGNsa19tZ3JfaW50ZXJu YWxfZnVuY3MgcnYyX2Nsa19pbnRlcm5hbF9mdW5jcyA9IHsKKwkuc2V0X2Rpc3BjbGsgPSBkY2Ux MTJfc2V0X2Rpc3BjbGssCisJLnNldF9kcHJlZmNsayA9IGRjZTExMl9zZXRfZHByZWZjbGsKK307 CisKK3ZvaWQgcnYyX2Nsa19tZ3JfY29uc3RydWN0KHN0cnVjdCBkY19jb250ZXh0ICpjdHgsIHN0 cnVjdCBjbGtfbWdyX2ludGVybmFsICpjbGtfbWdyLCBzdHJ1Y3QgcHBfc211X2Z1bmNzICpwcF9z bXUpCisKK3sKKwlydjFfY2xrX21ncl9jb25zdHJ1Y3QoY3R4LCBjbGtfbWdyLCBwcF9zbXUpOwor CisJY2xrX21nci0+ZnVuY3MgPSAmcnYyX2Nsa19pbnRlcm5hbF9mdW5jczsKK30KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9jbGtfbWdyL2RjbjEwL3J2Ml9jbGtf bWdyLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY2xrX21nci9kY24xMC9ydjJf Y2xrX21nci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMWYyNmMKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY2xrX21nci9k Y24xMC9ydjJfY2xrX21nci5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAx OCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAq IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJl c3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRv IHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5z ZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBz dWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRl ZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdh cmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5P IEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJ U0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0 aG9yczogQU1ECisgKgorICovCisKKyNpZm5kZWYgX19SVjJfQ0xLX01HUl9IX18KKyNkZWZpbmUg X19SVjJfQ0xLX01HUl9IX18KKwordm9pZCBydjJfY2xrX21ncl9jb25zdHJ1Y3Qoc3RydWN0IGRj X2NvbnRleHQgKmN0eCwgc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3IsIHN0cnVjdCBw cF9zbXVfZnVuY3MgKnBwX3NtdSk7CisKKworI2VuZGlmIC8vX19EQ04xMF9DTEtfTUdSX0hfXwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjZS9NYWtlZmlsZSBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2UvTWFrZWZpbGUKaW5kZXggNmU0NDdh Yi4uZmRmM2Q4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Rj ZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNlL01ha2Vm aWxlCkBAIC0yOCw3ICsyOCw3IEBACiAKIERDRSA9IGRjZV9hdWRpby5vIGRjZV9zdHJlYW1fZW5j b2Rlci5vIGRjZV9saW5rX2VuY29kZXIubyBkY2VfaHdzZXEubyBcCiBkY2VfbWVtX2lucHV0Lm8g ZGNlX2Nsb2NrX3NvdXJjZS5vIGRjZV9zY2xfZmlsdGVycy5vIGRjZV90cmFuc2Zvcm0ubyBcCi1k Y2VfY2xrX21nci5vIGRjZTExMF9jbGtfbWdyLm8gZGNlMTEyX2Nsa19tZ3IubyBkY2UxMjBfY2xr X21nci5vIGRjZV9vcHAubyBkY2VfZG1jdS5vIGRjZV9hYm0ubyBkY2VfaXBwLm8gZGNlX2F1eC5v IFwKK2RjZV9vcHAubyBkY2VfZG1jdS5vIGRjZV9hYm0ubyBkY2VfaXBwLm8gZGNlX2F1eC5vIFwK IGRjZV9pMmMubyBkY2VfaTJjX2h3Lm8gZGNlX2kyY19zdy5vCiAKIEFNRF9EQUxfRENFID0gJChh ZGRwcmVmaXggJChBTUREQUxQQVRIKS9kYy9kY2UvLCQoRENFKSkKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2UvZGNlMTEwX2Nsa19tZ3IuYyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2UvZGNlMTEwX2Nsa19tZ3IuYwpkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggZGJjMDJkYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2Rpc3BsYXkvZGMvZGNlL2RjZTExMF9jbGtfbWdyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwy NzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEyLTE2IEFkdmFuY2VkIE1pY3JvIERldmlj ZXMsIEluYy4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0g KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQ UkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBD T1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUgotICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0gKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKLSAqIE9USEVSIERF QUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBdXRob3JzOiBBTUQKLSAqCi0gKi8KLQot I2luY2x1ZGUgImNvcmVfdHlwZXMuaCIKLSNpbmNsdWRlICJjbGtfbWdyX2ludGVybmFsLmgiCi0K LSNpbmNsdWRlICJkY2UvZGNlXzExXzBfZC5oIgotI2luY2x1ZGUgImRjZS9kY2VfMTFfMF9zaF9t YXNrLmgiCi0jaW5jbHVkZSAiZGNlX2Nsa19tZ3IuaCIKLSNpbmNsdWRlICJkY2UxMTBfY2xrX21n ci5oIgotCi0vKiBzZXQgcmVnaXN0ZXIgb2Zmc2V0ICovCi0jZGVmaW5lIFNSKHJlZ19uYW1lKVwK LQkucmVnX25hbWUgPSBtbSAjIyByZWdfbmFtZQotCi0vKiBzZXQgcmVnaXN0ZXIgb2Zmc2V0IHdp dGggaW5zdGFuY2UgKi8KLSNkZWZpbmUgU1JJKHJlZ19uYW1lLCBibG9jaywgaWQpXAotCS5yZWdf bmFtZSA9IG1tICMjIGJsb2NrICMjIGlkICMjIF8gIyMgcmVnX25hbWUKLQotc3RhdGljIGNvbnN0 IHN0cnVjdCBjbGtfbWdyX3JlZ2lzdGVycyBkaXNwX2Nsa19yZWdzID0gewotCQlDTEtfQ09NTU9O X1JFR19MSVNUX0RDRV9CQVNFKCkKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX21ncl9z aGlmdCBkaXNwX2Nsa19zaGlmdCA9IHsKLQkJQ0xLX0NPTU1PTl9NQVNLX1NIX0xJU1RfRENFX0NP TU1PTl9CQVNFKF9fU0hJRlQpCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa19tZ3JfbWFz ayBkaXNwX2Nsa19tYXNrID0gewotCQlDTEtfQ09NTU9OX01BU0tfU0hfTElTVF9EQ0VfQ09NTU9O X0JBU0UoX01BU0spCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHN0YXRlX2RlcGVuZGVudF9j bG9ja3MgZGNlMTEwX21heF9jbGtzX2J5X3N0YXRlW10gPSB7Ci0vKkNsb2Nrc1N0YXRlSW52YWxp ZCAtIHNob3VsZCBub3QgYmUgdXNlZCovCi17IC5kaXNwbGF5X2Nsa19raHogPSAwLCAucGl4ZWxf Y2xrX2toeiA9IDAgfSwKLS8qQ2xvY2tzU3RhdGVVbHRyYUxvdyAtIGN1cnJlbnRseSBieSBIVyBk ZXNpZ24gdGVhbSBub3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCovCi17IC5kaXNwbGF5X2Nsa19raHog PSAzNTIwMDAsIC5waXhlbF9jbGtfa2h6ID0gMzMwMDAwIH0sCi0vKkNsb2Nrc1N0YXRlTG93Ki8K LXsgLmRpc3BsYXlfY2xrX2toeiA9IDM1MjAwMCwgLnBpeGVsX2Nsa19raHogPSAzMzAwMDAgfSwK LS8qQ2xvY2tzU3RhdGVOb21pbmFsKi8KLXsgLmRpc3BsYXlfY2xrX2toeiA9IDQ2NzAwMCwgLnBp eGVsX2Nsa19raHogPSA0MDAwMDAgfSwKLS8qQ2xvY2tzU3RhdGVQZXJmb3JtYW5jZSovCi17IC5k aXNwbGF5X2Nsa19raHogPSA2NDMwMDAsIC5waXhlbF9jbGtfa2h6ID0gNDAwMDAwIH0gfTsKLQot c3RhdGljIGludCBkZXRlcm1pbmVfc2Nsa19mcm9tX2JvdW5kaW5nX2JveCgKLQkJY29uc3Qgc3Ry dWN0IGRjICpkYywKLQkJaW50IHJlcXVpcmVkX3NjbGspCi17Ci0JaW50IGk7Ci0KLQkvKgotCSAq IFNvbWUgYXNpY3MgZG8gbm90IGdpdmUgdXMgc2NsayBsZXZlbHMsIHNvIHdlIGp1c3QgcmVwb3J0 IHRoZSBhY3R1YWwKLQkgKiByZXF1aXJlZCBzY2xrCi0JICovCi0JaWYgKGRjLT5zY2xrX2x2bHMu bnVtX2xldmVscyA9PSAwKQotCQlyZXR1cm4gcmVxdWlyZWRfc2NsazsKLQotCWZvciAoaSA9IDA7 IGkgPCBkYy0+c2Nsa19sdmxzLm51bV9sZXZlbHM7IGkrKykgewotCQlpZiAoZGMtPnNjbGtfbHZs cy5jbG9ja3NfaW5fa2h6W2ldID49IHJlcXVpcmVkX3NjbGspCi0JCQlyZXR1cm4gZGMtPnNjbGtf bHZscy5jbG9ja3NfaW5fa2h6W2ldOwotCX0KLQkvKgotCSAqIGV2ZW4gbWF4aW11bSBsZXZlbCBj b3VsZCBub3Qgc2F0aXNmeSByZXF1aXJlbWVudCwgdGhpcwotCSAqIGlzIHVuZXhwZWN0ZWQgYXQg dGhpcyBzdGFnZSwgc2hvdWxkIGhhdmUgYmVlbiBjYXVnaHQgYXQKLQkgKiB2YWxpZGF0aW9uIHRp bWUKLQkgKi8KLQlBU1NFUlQoMCk7Ci0JcmV0dXJuIGRjLT5zY2xrX2x2bHMuY2xvY2tzX2luX2to eltkYy0+c2Nsa19sdmxzLm51bV9sZXZlbHMgLSAxXTsKLX0KLQotdWludDMyX3QgZGNlMTEwX2dl dF9taW5fdmJsYW5rX3RpbWVfdXMoY29uc3Qgc3RydWN0IGRjX3N0YXRlICpjb250ZXh0KQotewot CXVpbnQ4X3QgajsKLQl1aW50MzJfdCBtaW5fdmVydGljYWxfYmxhbmtfdGltZSA9IC0xOwotCi0J Zm9yIChqID0gMDsgaiA8IGNvbnRleHQtPnN0cmVhbV9jb3VudDsgaisrKSB7Ci0JCXN0cnVjdCBk Y19zdHJlYW1fc3RhdGUgKnN0cmVhbSA9IGNvbnRleHQtPnN0cmVhbXNbal07Ci0JCXVpbnQzMl90 IHZlcnRpY2FsX2JsYW5rX2luX3BpeGVscyA9IDA7Ci0JCXVpbnQzMl90IHZlcnRpY2FsX2JsYW5r X3RpbWUgPSAwOwotCi0JCXZlcnRpY2FsX2JsYW5rX2luX3BpeGVscyA9IHN0cmVhbS0+dGltaW5n LmhfdG90YWwgKgotCQkJKHN0cmVhbS0+dGltaW5nLnZfdG90YWwKLQkJCSAtIHN0cmVhbS0+dGlt aW5nLnZfYWRkcmVzc2FibGUpOwotCi0JCXZlcnRpY2FsX2JsYW5rX3RpbWUgPSB2ZXJ0aWNhbF9i bGFua19pbl9waXhlbHMKLQkJCSogMTAwMDAgLyBzdHJlYW0tPnRpbWluZy5waXhfY2xrXzEwMGh6 OwotCi0JCWlmIChtaW5fdmVydGljYWxfYmxhbmtfdGltZSA+IHZlcnRpY2FsX2JsYW5rX3RpbWUp Ci0JCQltaW5fdmVydGljYWxfYmxhbmtfdGltZSA9IHZlcnRpY2FsX2JsYW5rX3RpbWU7Ci0JfQot Ci0JcmV0dXJuIG1pbl92ZXJ0aWNhbF9ibGFua190aW1lOwotfQotCi12b2lkIGRjZTExMF9maWxs X2Rpc3BsYXlfY29uZmlncygKLQljb25zdCBzdHJ1Y3QgZGNfc3RhdGUgKmNvbnRleHQsCi0Jc3Ry dWN0IGRtX3BwX2Rpc3BsYXlfY29uZmlndXJhdGlvbiAqcHBfZGlzcGxheV9jZmcpCi17Ci0JaW50 IGo7Ci0JaW50IG51bV9jZmdzID0gMDsKLQotCWZvciAoaiA9IDA7IGogPCBjb250ZXh0LT5zdHJl YW1fY291bnQ7IGorKykgewotCQlpbnQgazsKLQotCQljb25zdCBzdHJ1Y3QgZGNfc3RyZWFtX3N0 YXRlICpzdHJlYW0gPSBjb250ZXh0LT5zdHJlYW1zW2pdOwotCQlzdHJ1Y3QgZG1fcHBfc2luZ2xl X2Rpc3BfY29uZmlnICpjZmcgPQotCQkJJnBwX2Rpc3BsYXlfY2ZnLT5kaXNwX2NvbmZpZ3NbbnVt X2NmZ3NdOwotCQljb25zdCBzdHJ1Y3QgcGlwZV9jdHggKnBpcGVfY3R4ID0gTlVMTDsKLQotCQlm b3IgKGsgPSAwOyBrIDwgTUFYX1BJUEVTOyBrKyspCi0JCQlpZiAoc3RyZWFtID09IGNvbnRleHQt PnJlc19jdHgucGlwZV9jdHhba10uc3RyZWFtKSB7Ci0JCQkJcGlwZV9jdHggPSAmY29udGV4dC0+ cmVzX2N0eC5waXBlX2N0eFtrXTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQlBU1NFUlQocGlwZV9j dHggIT0gTlVMTCk7Ci0KLQkJLyogb25seSBub3RpZnkgYWN0aXZlIHN0cmVhbSAqLwotCQlpZiAo c3RyZWFtLT5kcG1zX29mZikKLQkJCWNvbnRpbnVlOwotCi0JCW51bV9jZmdzKys7Ci0JCWNmZy0+ c2lnbmFsID0gcGlwZV9jdHgtPnN0cmVhbS0+c2lnbmFsOwotCQljZmctPnBpcGVfaWR4ID0gcGlw ZV9jdHgtPnN0cmVhbV9yZXMudGctPmluc3Q7Ci0JCWNmZy0+c3JjX2hlaWdodCA9IHN0cmVhbS0+ c3JjLmhlaWdodDsKLQkJY2ZnLT5zcmNfd2lkdGggPSBzdHJlYW0tPnNyYy53aWR0aDsKLQkJY2Zn LT5kZGlfY2hhbm5lbF9tYXBwaW5nID0KLQkJCXN0cmVhbS0+bGluay0+ZGRpX2NoYW5uZWxfbWFw cGluZy5yYXc7Ci0JCWNmZy0+dHJhbnNtaXR0ZXIgPQotCQkJc3RyZWFtLT5saW5rLT5saW5rX2Vu Yy0+dHJhbnNtaXR0ZXI7Ci0JCWNmZy0+bGlua19zZXR0aW5ncy5sYW5lX2NvdW50ID0KLQkJCXN0 cmVhbS0+bGluay0+Y3VyX2xpbmtfc2V0dGluZ3MubGFuZV9jb3VudDsKLQkJY2ZnLT5saW5rX3Nl dHRpbmdzLmxpbmtfcmF0ZSA9Ci0JCQlzdHJlYW0tPmxpbmstPmN1cl9saW5rX3NldHRpbmdzLmxp bmtfcmF0ZTsKLQkJY2ZnLT5saW5rX3NldHRpbmdzLmxpbmtfc3ByZWFkID0KLQkJCXN0cmVhbS0+ bGluay0+Y3VyX2xpbmtfc2V0dGluZ3MubGlua19zcHJlYWQ7Ci0JCWNmZy0+c3ltX2Nsb2NrID0g c3RyZWFtLT5waHlfcGl4X2NsazsKLQkJLyogUm91bmQgdl9yZWZyZXNoKi8KLQkJY2ZnLT52X3Jl ZnJlc2ggPSBzdHJlYW0tPnRpbWluZy5waXhfY2xrXzEwMGh6ICogMTAwOwotCQljZmctPnZfcmVm cmVzaCAvPSBzdHJlYW0tPnRpbWluZy5oX3RvdGFsOwotCQljZmctPnZfcmVmcmVzaCA9IChjZmct PnZfcmVmcmVzaCArIHN0cmVhbS0+dGltaW5nLnZfdG90YWwgLyAyKQotCQkJCQkJCS8gc3RyZWFt LT50aW1pbmcudl90b3RhbDsKLQl9Ci0KLQlwcF9kaXNwbGF5X2NmZy0+ZGlzcGxheV9jb3VudCA9 IG51bV9jZmdzOwotfQotCi12b2lkIGRjZTExX3BwbGliX2FwcGx5X2Rpc3BsYXlfcmVxdWlyZW1l bnRzKAotCXN0cnVjdCBkYyAqZGMsCi0Jc3RydWN0IGRjX3N0YXRlICpjb250ZXh0KQotewotCXN0 cnVjdCBkbV9wcF9kaXNwbGF5X2NvbmZpZ3VyYXRpb24gKnBwX2Rpc3BsYXlfY2ZnID0gJmNvbnRl eHQtPnBwX2Rpc3BsYXlfY2ZnOwotCi0JcHBfZGlzcGxheV9jZmctPmFsbF9kaXNwbGF5c19pbl9z eW5jID0KLQkJY29udGV4dC0+YndfY3R4LmJ3LmRjZS5hbGxfZGlzcGxheXNfaW5fc3luYzsKLQlw cF9kaXNwbGF5X2NmZy0+bmJfcHN0YXRlX3N3aXRjaF9kaXNhYmxlID0KLQkJCWNvbnRleHQtPmJ3 X2N0eC5idy5kY2UubmJwX3N0YXRlX2NoYW5nZV9lbmFibGUgPT0gZmFsc2U7Ci0JcHBfZGlzcGxh eV9jZmctPmNwdV9jYzZfZGlzYWJsZSA9Ci0JCQljb250ZXh0LT5id19jdHguYncuZGNlLmNwdWNf c3RhdGVfY2hhbmdlX2VuYWJsZSA9PSBmYWxzZTsKLQlwcF9kaXNwbGF5X2NmZy0+Y3B1X3BzdGF0 ZV9kaXNhYmxlID0KLQkJCWNvbnRleHQtPmJ3X2N0eC5idy5kY2UuY3B1cF9zdGF0ZV9jaGFuZ2Vf ZW5hYmxlID09IGZhbHNlOwotCXBwX2Rpc3BsYXlfY2ZnLT5jcHVfcHN0YXRlX3NlcGFyYXRpb25f dGltZSA9Ci0JCQljb250ZXh0LT5id19jdHguYncuZGNlLmJsYWNrb3V0X3JlY292ZXJ5X3RpbWVf dXM7Ci0KLQlwcF9kaXNwbGF5X2NmZy0+bWluX21lbW9yeV9jbG9ja19raHogPSBjb250ZXh0LT5i d19jdHguYncuZGNlLnljbGtfa2h6Ci0JCS8gTUVNT1JZX1RZUEVfTVVMVElQTElFUl9DWjsKLQot CXBwX2Rpc3BsYXlfY2ZnLT5taW5fZW5naW5lX2Nsb2NrX2toeiA9IGRldGVybWluZV9zY2xrX2Zy b21fYm91bmRpbmdfYm94KAotCQkJZGMsCi0JCQljb250ZXh0LT5id19jdHguYncuZGNlLnNjbGtf a2h6KTsKLQotCS8qCi0JICogQXMgd29ya2Fyb3VuZCBmb3IgPjR4NEsgbGlnaHR1cCBzZXQgZGNm Y2xvY2sgdG8gbWluX2VuZ2luZV9jbG9jayB2YWx1ZS4KLQkgKiBUaGlzIGlzIG5vdCByZXF1aXJl ZCBmb3IgbGVzcyB0aGFuIDUgZGlzcGxheXMsCi0JICogdGh1cyBkb24ndCByZXF1ZXN0IGRlY2Zj bGsgaW4gZGMgdG8gYXZvaWQgaW1wYWN0Ci0JICogb24gcG93ZXIgc2F2aW5nLgotCSAqCi0JICov Ci0JcHBfZGlzcGxheV9jZmctPm1pbl9kY2ZjbG9ja19raHogPSAoY29udGV4dC0+c3RyZWFtX2Nv dW50ID4gNCkgPwotCQkJcHBfZGlzcGxheV9jZmctPm1pbl9lbmdpbmVfY2xvY2tfa2h6IDogMDsK LQotCXBwX2Rpc3BsYXlfY2ZnLT5taW5fZW5naW5lX2Nsb2NrX2RlZXBfc2xlZXBfa2h6Ci0JCQk9 IGNvbnRleHQtPmJ3X2N0eC5idy5kY2Uuc2Nsa19kZWVwX3NsZWVwX2toejsKLQotCXBwX2Rpc3Bs YXlfY2ZnLT5hdmFpbF9tY2xrX3N3aXRjaF90aW1lX3VzID0KLQkJCQkJCWRjZTExMF9nZXRfbWlu X3ZibGFua190aW1lX3VzKGNvbnRleHQpOwotCS8qIFRPRE86IGRjZTExLjIqLwotCXBwX2Rpc3Bs YXlfY2ZnLT5hdmFpbF9tY2xrX3N3aXRjaF90aW1lX2luX2Rpc3BfYWN0aXZlX3VzID0gMDsKLQot CXBwX2Rpc3BsYXlfY2ZnLT5kaXNwX2Nsa19raHogPSBkYy0+Y2xrX21nci0+Y2xrcy5kaXNwY2xr X2toejsKLQotCWRjZTExMF9maWxsX2Rpc3BsYXlfY29uZmlncyhjb250ZXh0LCBwcF9kaXNwbGF5 X2NmZyk7Ci0KLQkvKiBUT0RPOiBpcyB0aGlzIHN0aWxsIGFwcGxpY2FibGU/Ki8KLQlpZiAocHBf ZGlzcGxheV9jZmctPmRpc3BsYXlfY291bnQgPT0gMSkgewotCQljb25zdCBzdHJ1Y3QgZGNfY3J0 Y190aW1pbmcgKnRpbWluZyA9Ci0JCQkmY29udGV4dC0+c3RyZWFtc1swXS0+dGltaW5nOwotCi0J CXBwX2Rpc3BsYXlfY2ZnLT5jcnRjX2luZGV4ID0KLQkJCXBwX2Rpc3BsYXlfY2ZnLT5kaXNwX2Nv bmZpZ3NbMF0ucGlwZV9pZHg7Ci0JCXBwX2Rpc3BsYXlfY2ZnLT5saW5lX3RpbWVfaW5fdXMgPSB0 aW1pbmctPmhfdG90YWwgKiAxMDAwMCAvIHRpbWluZy0+cGl4X2Nsa18xMDBoejsKLQl9Ci0KLQlp ZiAobWVtY21wKCZkYy0+Y3VycmVudF9zdGF0ZS0+cHBfZGlzcGxheV9jZmcsIHBwX2Rpc3BsYXlf Y2ZnLCBzaXplb2YoKnBwX2Rpc3BsYXlfY2ZnKSkgIT0gIDApCi0JCWRtX3BwX2FwcGx5X2Rpc3Bs YXlfcmVxdWlyZW1lbnRzKGRjLT5jdHgsIHBwX2Rpc3BsYXlfY2ZnKTsKLX0KLQotc3RhdGljIHZv aWQgZGNlMTFfdXBkYXRlX2Nsb2NrcyhzdHJ1Y3QgY2xrX21nciAqY2xrX21ncl9iYXNlLAotCQkJ c3RydWN0IGRjX3N0YXRlICpjb250ZXh0LAotCQkJYm9vbCBzYWZlX3RvX2xvd2VyKQotewotCXN0 cnVjdCBjbGtfbWdyX2ludGVybmFsICpjbGtfbWdyX2RjZSA9IFRPX0NMS19NR1JfSU5URVJOQUwo Y2xrX21ncl9iYXNlKTsKLQlzdHJ1Y3QgZG1fcHBfcG93ZXJfbGV2ZWxfY2hhbmdlX3JlcXVlc3Qg bGV2ZWxfY2hhbmdlX3JlcTsKLQlpbnQgcGF0Y2hlZF9kaXNwX2NsayA9IGNvbnRleHQtPmJ3X2N0 eC5idy5kY2UuZGlzcGNsa19raHo7Ci0KLQkvKlRPRE86IFcvQSBmb3IgZGFsMyBsaW51eCwgaW52 ZXN0aWdhdGUgd2h5IHRoaXMgd29ya3MgKi8KLQlpZiAoIWNsa19tZ3JfZGNlLT5kZnNfYnlwYXNz X2FjdGl2ZSkKLQkJcGF0Y2hlZF9kaXNwX2NsayA9IHBhdGNoZWRfZGlzcF9jbGsgKiAxMTUgLyAx MDA7Ci0KLQlsZXZlbF9jaGFuZ2VfcmVxLnBvd2VyX2xldmVsID0gZGNlX2dldF9yZXF1aXJlZF9j bG9ja3Nfc3RhdGUoY2xrX21ncl9iYXNlLCBjb250ZXh0KTsKLQkvKiBnZXQgbWF4IGNsb2NrIHN0 YXRlIGZyb20gUFBMSUIgKi8KLQlpZiAoKGxldmVsX2NoYW5nZV9yZXEucG93ZXJfbGV2ZWwgPCBj bGtfbWdyX2RjZS0+Y3VyX21pbl9jbGtzX3N0YXRlICYmIHNhZmVfdG9fbG93ZXIpCi0JCQl8fCBs ZXZlbF9jaGFuZ2VfcmVxLnBvd2VyX2xldmVsID4gY2xrX21ncl9kY2UtPmN1cl9taW5fY2xrc19z dGF0ZSkgewotCQlpZiAoZG1fcHBfYXBwbHlfcG93ZXJfbGV2ZWxfY2hhbmdlX3JlcXVlc3QoY2xr X21ncl9iYXNlLT5jdHgsICZsZXZlbF9jaGFuZ2VfcmVxKSkKLQkJCWNsa19tZ3JfZGNlLT5jdXJf bWluX2Nsa3Nfc3RhdGUgPSBsZXZlbF9jaGFuZ2VfcmVxLnBvd2VyX2xldmVsOwotCX0KLQotCWlm IChzaG91bGRfc2V0X2Nsb2NrKHNhZmVfdG9fbG93ZXIsIHBhdGNoZWRfZGlzcF9jbGssIGNsa19t Z3JfYmFzZS0+Y2xrcy5kaXNwY2xrX2toeikpIHsKLQkJY29udGV4dC0+YndfY3R4LmJ3LmRjZS5k aXNwY2xrX2toeiA9IGRjZV9zZXRfY2xvY2soY2xrX21ncl9iYXNlLCBwYXRjaGVkX2Rpc3BfY2xr KTsKLQkJY2xrX21ncl9iYXNlLT5jbGtzLmRpc3BjbGtfa2h6ID0gcGF0Y2hlZF9kaXNwX2NsazsK LQl9Ci0JZGNlMTFfcHBsaWJfYXBwbHlfZGlzcGxheV9yZXF1aXJlbWVudHMoY2xrX21ncl9iYXNl LT5jdHgtPmRjLCBjb250ZXh0KTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGtfbWdyX2Z1bmNzIGRj ZTExMF9mdW5jcyA9IHsKLQkuZ2V0X2RwX3JlZl9jbGtfZnJlcXVlbmN5ID0gZGNlX2dldF9kcF9y ZWZfZnJlcV9raHosCi0JLnVwZGF0ZV9jbG9ja3MgPSBkY2UxMV91cGRhdGVfY2xvY2tzCi19Owot Ci12b2lkIGRjZTExMF9jbGtfbWdyX2NvbnN0cnVjdCgKLQkJc3RydWN0IGRjX2NvbnRleHQgKmN0 eCwKLQkJc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3IpCi17Ci0JbWVtY3B5KGNsa19t Z3ItPm1heF9jbGtzX2J5X3N0YXRlLAotCQlkY2UxMTBfbWF4X2Nsa3NfYnlfc3RhdGUsCi0JCXNp emVvZihkY2UxMTBfbWF4X2Nsa3NfYnlfc3RhdGUpKTsKLQotCWRjZV9jbGtfbWdyX2NvbnN0cnVj dChjdHgsIGNsa19tZ3IpOwotCi0JY2xrX21nci0+cmVncyA9ICZkaXNwX2Nsa19yZWdzOwotCWNs a19tZ3ItPmNsa19tZ3Jfc2hpZnQgPSAmZGlzcF9jbGtfc2hpZnQ7Ci0JY2xrX21nci0+Y2xrX21n cl9tYXNrID0gJmRpc3BfY2xrX21hc2s7Ci0JY2xrX21nci0+YmFzZS5mdW5jcyA9ICZkY2UxMTBf ZnVuY3M7Ci0KLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9k Y2UvZGNlMTEwX2Nsa19tZ3IuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2Uv ZGNlMTEwX2Nsa19tZ3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBlYjJlYS4u MDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNlL2RjZTExMF9j bGtfbWdyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0 IDIwMTItMTYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgotICoKLSAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv biBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0 aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJp Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBk byBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUg aW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl IFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK LSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9S KFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCi0gKiBPVEhFUiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwK LSAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUgotICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoK LSAqIEF1dGhvcnM6IEFNRAotICoKLSAqLwotCi0jaWZuZGVmIERBTF9EQ19EQ0VfRENFMTEwX0NM S19NR1JfSF8KLSNkZWZpbmUgREFMX0RDX0RDRV9EQ0UxMTBfQ0xLX01HUl9IXwotCi12b2lkIGRj ZTExMF9jbGtfbWdyX2NvbnN0cnVjdCgKLQkJc3RydWN0IGRjX2NvbnRleHQgKmN0eCwKLQkJc3Ry dWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3IpOwotCi12b2lkIGRjZTExMF9maWxsX2Rpc3Bs YXlfY29uZmlncygKLQljb25zdCBzdHJ1Y3QgZGNfc3RhdGUgKmNvbnRleHQsCi0Jc3RydWN0IGRt X3BwX2Rpc3BsYXlfY29uZmlndXJhdGlvbiAqcHBfZGlzcGxheV9jZmcpOwotCi0vKiBmdW5jdGlv bnMgc2hhcmVkIHdpdGggb3RoZXIgY2xrIG1nciovCi12b2lkIGRjZTExX3BwbGliX2FwcGx5X2Rp c3BsYXlfcmVxdWlyZW1lbnRzKAotCXN0cnVjdCBkYyAqZGMsCi0Jc3RydWN0IGRjX3N0YXRlICpj b250ZXh0KTsKLQotdWludDMyX3QgZGNlMTEwX2dldF9taW5fdmJsYW5rX3RpbWVfdXMoY29uc3Qg c3RydWN0IGRjX3N0YXRlICpjb250ZXh0KTsKLQotI2VuZGlmIC8qIERBTF9EQ19EQ0VfRENFMTEw X0NMS19NR1JfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9k Yy9kY2UvZGNlMTEyX2Nsa19tZ3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9k Y2UvZGNlMTEyX2Nsa19tZ3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk1ZDk2 OS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNlL2RjZTEx Ml9jbGtfbWdyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzkgKzAsMCBAQAotLyoKLSAqIENvcHly aWdodCAyMDEyLTE2IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KLSAqCi0gKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxs IGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFV VEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgotICogT1RIRVIgTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsCi0gKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNP RlRXQVJFIE9SIFRIRSBVU0UgT1IKLSAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K LSAqCi0gKiBBdXRob3JzOiBBTUQKLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvcmVfdHlwZXMuaCIK LSNpbmNsdWRlICJjbGtfbWdyX2ludGVybmFsLmgiCi0KLSNpbmNsdWRlICJkY2UvZGNlXzExXzJf ZC5oIgotI2luY2x1ZGUgImRjZS9kY2VfMTFfMl9zaF9tYXNrLmgiCi0jaW5jbHVkZSAiZGNlX2Ns a19tZ3IuaCIKLSNpbmNsdWRlICJkY2UxMTBfY2xrX21nci5oIgotI2luY2x1ZGUgImRjZTExMl9j bGtfbWdyLmgiCi0jaW5jbHVkZSAiZGFsX2FzaWNfaWQuaCIKLQotLyogc2V0IHJlZ2lzdGVyIG9m ZnNldCAqLwotI2RlZmluZSBTUihyZWdfbmFtZSlcCi0JLnJlZ19uYW1lID0gbW0gIyMgcmVnX25h bWUKLQotLyogc2V0IHJlZ2lzdGVyIG9mZnNldCB3aXRoIGluc3RhbmNlICovCi0jZGVmaW5lIFNS SShyZWdfbmFtZSwgYmxvY2ssIGlkKVwKLQkucmVnX25hbWUgPSBtbSAjIyBibG9jayAjIyBpZCAj IyBfICMjIHJlZ19uYW1lCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX21ncl9yZWdpc3RlcnMg ZGlzcF9jbGtfcmVncyA9IHsKLQkJQ0xLX0NPTU1PTl9SRUdfTElTVF9EQ0VfQkFTRSgpCi19Owot Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa19tZ3Jfc2hpZnQgZGlzcF9jbGtfc2hpZnQgPSB7Ci0J CUNMS19DT01NT05fTUFTS19TSF9MSVNUX0RDRV9DT01NT05fQkFTRShfX1NISUZUKQotfTsKLQot c3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfbWdyX21hc2sgZGlzcF9jbGtfbWFzayA9IHsKLQkJQ0xL X0NPTU1PTl9NQVNLX1NIX0xJU1RfRENFX0NPTU1PTl9CQVNFKF9NQVNLKQotfTsKLQotc3RhdGlj IGNvbnN0IHN0cnVjdCBzdGF0ZV9kZXBlbmRlbnRfY2xvY2tzIGRjZTExMl9tYXhfY2xrc19ieV9z dGF0ZVtdID0gewotLypDbG9ja3NTdGF0ZUludmFsaWQgLSBzaG91bGQgbm90IGJlIHVzZWQqLwot eyAuZGlzcGxheV9jbGtfa2h6ID0gMCwgLnBpeGVsX2Nsa19raHogPSAwIH0sCi0vKkNsb2Nrc1N0 YXRlVWx0cmFMb3cgLSBjdXJyZW50bHkgYnkgSFcgZGVzaWduIHRlYW0gbm90IHN1cHBvc2VkIHRv IGJlIHVzZWQqLwoteyAuZGlzcGxheV9jbGtfa2h6ID0gMzg5MTg5LCAucGl4ZWxfY2xrX2toeiA9 IDM0NjY3MiB9LAotLypDbG9ja3NTdGF0ZUxvdyovCi17IC5kaXNwbGF5X2Nsa19raHogPSA0NTkw MDAsIC5waXhlbF9jbGtfa2h6ID0gNDAwMDAwIH0sCi0vKkNsb2Nrc1N0YXRlTm9taW5hbCovCi17 IC5kaXNwbGF5X2Nsa19raHogPSA2NjcwMDAsIC5waXhlbF9jbGtfa2h6ID0gNjAwMDAwIH0sCi0v KkNsb2Nrc1N0YXRlUGVyZm9ybWFuY2UqLwoteyAuZGlzcGxheV9jbGtfa2h6ID0gMTEzMjAwMCwg LnBpeGVsX2Nsa19raHogPSA2MDAwMDAgfSB9OwotCi0KLS8vVE9ETzogcmVtb3ZlIHVzZSB0aGUg dHdvIGJyb2tlbiBkb3duIGZ1bmN0aW9ucwotaW50IGRjZTExMl9zZXRfY2xvY2soc3RydWN0IGNs a19tZ3IgKmNsa19tZ3JfYmFzZSwgaW50IHJlcXVlc3RlZF9jbGtfa2h6KQotewotCXN0cnVjdCBj bGtfbWdyX2ludGVybmFsICpjbGtfbWdyX2RjZSA9IFRPX0NMS19NR1JfSU5URVJOQUwoY2xrX21n cl9iYXNlKTsKLQlzdHJ1Y3QgYnBfc2V0X2RjZV9jbG9ja19wYXJhbWV0ZXJzIGRjZV9jbGtfcGFy YW1zOwotCXN0cnVjdCBkY19iaW9zICpicCA9IGNsa19tZ3JfYmFzZS0+Y3R4LT5kY19iaW9zOwot CXN0cnVjdCBkYyAqY29yZV9kYyA9IGNsa19tZ3JfYmFzZS0+Y3R4LT5kYzsKLQlzdHJ1Y3QgZG1j dSAqZG1jdSA9IGNvcmVfZGMtPnJlc19wb29sLT5kbWN1OwotCWludCBhY3R1YWxfY2xvY2sgPSBy ZXF1ZXN0ZWRfY2xrX2toejsKLQkvKiBQcmVwYXJlIHRvIHByb2dyYW0gZGlzcGxheSBjbG9jayov Ci0JbWVtc2V0KCZkY2VfY2xrX3BhcmFtcywgMCwgc2l6ZW9mKGRjZV9jbGtfcGFyYW1zKSk7Ci0K LQkvKiBNYWtlIHN1cmUgcmVxdWVzdGVkIGNsb2NrIGlzbid0IGxvd2VyIHRoYW4gbWluaW11bSB0 aHJlc2hvbGQqLwotCWlmIChyZXF1ZXN0ZWRfY2xrX2toeiA+IDApCi0JCXJlcXVlc3RlZF9jbGtf a2h6ID0gbWF4KHJlcXVlc3RlZF9jbGtfa2h6LAotCQkJCWNsa19tZ3JfZGNlLT5kZW50aXN0X3Zj b19mcmVxX2toeiAvIDYyKTsKLQotCWRjZV9jbGtfcGFyYW1zLnRhcmdldF9jbG9ja19mcmVxdWVu Y3kgPSByZXF1ZXN0ZWRfY2xrX2toejsKLQlkY2VfY2xrX3BhcmFtcy5wbGxfaWQgPSBDTE9DS19T T1VSQ0VfSURfREZTOwotCWRjZV9jbGtfcGFyYW1zLmNsb2NrX3R5cGUgPSBEQ0VDTE9DS19UWVBF X0RJU1BMQVlfQ0xPQ0s7Ci0KLQlicC0+ZnVuY3MtPnNldF9kY2VfY2xvY2soYnAsICZkY2VfY2xr X3BhcmFtcyk7Ci0JYWN0dWFsX2Nsb2NrID0gZGNlX2Nsa19wYXJhbXMudGFyZ2V0X2Nsb2NrX2Zy ZXF1ZW5jeTsKLQotCS8qCi0JICogZnJvbSBwb3dlciBkb3duLCB3ZSBuZWVkIG1hcmsgdGhlIGNs b2NrIHN0YXRlIGFzIENsb2Nrc1N0YXRlTm9taW5hbAotCSAqIGZyb20gSFdSZXNldCwgc28gd2hl biByZXN1bWUgd2Ugd2lsbCBjYWxsIHBwbGliIHZvbHRhZ2UgcmVndWxhdG9yLgotCSAqLwotCWlm IChyZXF1ZXN0ZWRfY2xrX2toeiA9PSAwKQotCQljbGtfbWdyX2RjZS0+Y3VyX21pbl9jbGtzX3N0 YXRlID0gRE1fUFBfQ0xPQ0tTX1NUQVRFX05PTUlOQUw7Ci0KLQkvKlByb2dyYW0gRFAgcmVmIENs b2NrKi8KLQkvKlZCSU9TIHdpbGwgZGV0ZXJtaW5lIERQUkVGQ0xLIGZyZXF1ZW5jeSwgc28gd2Ug ZG9uJ3Qgc2V0IGl0Ki8KLQlkY2VfY2xrX3BhcmFtcy50YXJnZXRfY2xvY2tfZnJlcXVlbmN5ID0g MDsKLQlkY2VfY2xrX3BhcmFtcy5jbG9ja190eXBlID0gRENFQ0xPQ0tfVFlQRV9EUFJFRkNMSzsK LQlpZiAoIUFTSUNSRVZfSVNfVkVHQTIwX1AoY2xrX21ncl9iYXNlLT5jdHgtPmFzaWNfaWQuaHdf aW50ZXJuYWxfcmV2KSkKLQkJZGNlX2Nsa19wYXJhbXMuZmxhZ3MuVVNFX0dFTkxPQ0tfQVNfU09V UkNFX0ZPUl9EUFJFRkNMSyA9Ci0JCQkoZGNlX2Nsa19wYXJhbXMucGxsX2lkID09Ci0JCQkJCUNM T0NLX1NPVVJDRV9DT01CT19ESVNQTEFZX1BMTDApOwotCWVsc2UKLQkJZGNlX2Nsa19wYXJhbXMu ZmxhZ3MuVVNFX0dFTkxPQ0tfQVNfU09VUkNFX0ZPUl9EUFJFRkNMSyA9IGZhbHNlOwotCi0JYnAt PmZ1bmNzLT5zZXRfZGNlX2Nsb2NrKGJwLCAmZGNlX2Nsa19wYXJhbXMpOwotCi0JaWYgKCFJU19G UEdBX01BWElNVVNfREMoY29yZV9kYy0+Y3R4LT5kY2VfZW52aXJvbm1lbnQpKSB7Ci0JCWlmIChk bWN1ICYmIGRtY3UtPmZ1bmNzLT5pc19kbWN1X2luaXRpYWxpemVkKGRtY3UpKSB7Ci0JCQlpZiAo Y2xrX21ncl9kY2UtPmRmc19ieXBhc3NfZGlzcF9jbGsgIT0gYWN0dWFsX2Nsb2NrKQotCQkJCWRt Y3UtPmZ1bmNzLT5zZXRfcHNyX3dhaXRfbG9vcChkbWN1LAotCQkJCQkJYWN0dWFsX2Nsb2NrIC8g MTAwMCAvIDcpOwotCQl9Ci0JfQotCi0JY2xrX21ncl9kY2UtPmRmc19ieXBhc3NfZGlzcF9jbGsg PSBhY3R1YWxfY2xvY2s7Ci0JcmV0dXJuIGFjdHVhbF9jbG9jazsKLX0KLQotaW50IGRjZTExMl9z ZXRfZGlzcGNsayhzdHJ1Y3QgY2xrX21ncl9pbnRlcm5hbCAqY2xrX21nciwgaW50IHJlcXVlc3Rl ZF9jbGtfa2h6KQotewotCXN0cnVjdCBicF9zZXRfZGNlX2Nsb2NrX3BhcmFtZXRlcnMgZGNlX2Ns a19wYXJhbXM7Ci0Jc3RydWN0IGRjX2Jpb3MgKmJwID0gY2xrX21nci0+YmFzZS5jdHgtPmRjX2Jp b3M7Ci0Jc3RydWN0IGRjICpjb3JlX2RjID0gY2xrX21nci0+YmFzZS5jdHgtPmRjOwotCXN0cnVj dCBkbWN1ICpkbWN1ID0gY29yZV9kYy0+cmVzX3Bvb2wtPmRtY3U7Ci0JaW50IGFjdHVhbF9jbG9j ayA9IHJlcXVlc3RlZF9jbGtfa2h6OwotCS8qIFByZXBhcmUgdG8gcHJvZ3JhbSBkaXNwbGF5IGNs b2NrKi8KLQltZW1zZXQoJmRjZV9jbGtfcGFyYW1zLCAwLCBzaXplb2YoZGNlX2Nsa19wYXJhbXMp KTsKLQotCS8qIE1ha2Ugc3VyZSByZXF1ZXN0ZWQgY2xvY2sgaXNuJ3QgbG93ZXIgdGhhbiBtaW5p bXVtIHRocmVzaG9sZCovCi0JaWYgKHJlcXVlc3RlZF9jbGtfa2h6ID4gMCkKLQkJcmVxdWVzdGVk X2Nsa19raHogPSBtYXgocmVxdWVzdGVkX2Nsa19raHosCi0JCQkJY2xrX21nci0+ZGVudGlzdF92 Y29fZnJlcV9raHogLyA2Mik7Ci0KLQlkY2VfY2xrX3BhcmFtcy50YXJnZXRfY2xvY2tfZnJlcXVl bmN5ID0gcmVxdWVzdGVkX2Nsa19raHo7Ci0JZGNlX2Nsa19wYXJhbXMucGxsX2lkID0gQ0xPQ0tf U09VUkNFX0lEX0RGUzsKLQlkY2VfY2xrX3BhcmFtcy5jbG9ja190eXBlID0gRENFQ0xPQ0tfVFlQ RV9ESVNQTEFZX0NMT0NLOwotCi0JYnAtPmZ1bmNzLT5zZXRfZGNlX2Nsb2NrKGJwLCAmZGNlX2Ns a19wYXJhbXMpOwotCWFjdHVhbF9jbG9jayA9IGRjZV9jbGtfcGFyYW1zLnRhcmdldF9jbG9ja19m cmVxdWVuY3k7Ci0KLQkvKgotCSAqIGZyb20gcG93ZXIgZG93biwgd2UgbmVlZCBtYXJrIHRoZSBj bG9jayBzdGF0ZSBhcyBDbG9ja3NTdGF0ZU5vbWluYWwKLQkgKiBmcm9tIEhXUmVzZXQsIHNvIHdo ZW4gcmVzdW1lIHdlIHdpbGwgY2FsbCBwcGxpYiB2b2x0YWdlIHJlZ3VsYXRvci4KLQkgKi8KLQlp ZiAocmVxdWVzdGVkX2Nsa19raHogPT0gMCkKLQkJY2xrX21nci0+Y3VyX21pbl9jbGtzX3N0YXRl ID0gRE1fUFBfQ0xPQ0tTX1NUQVRFX05PTUlOQUw7Ci0KLQotCWlmICghSVNfRlBHQV9NQVhJTVVT X0RDKGNvcmVfZGMtPmN0eC0+ZGNlX2Vudmlyb25tZW50KSkgewotCQlpZiAoZG1jdSAmJiBkbWN1 LT5mdW5jcy0+aXNfZG1jdV9pbml0aWFsaXplZChkbWN1KSkgewotCQkJaWYgKGNsa19tZ3ItPmRm c19ieXBhc3NfZGlzcF9jbGsgIT0gYWN0dWFsX2Nsb2NrKQotCQkJCWRtY3UtPmZ1bmNzLT5zZXRf cHNyX3dhaXRfbG9vcChkbWN1LAotCQkJCQkJYWN0dWFsX2Nsb2NrIC8gMTAwMCAvIDcpOwotCQl9 Ci0JfQotCi0JY2xrX21nci0+ZGZzX2J5cGFzc19kaXNwX2NsayA9IGFjdHVhbF9jbG9jazsKLQly ZXR1cm4gYWN0dWFsX2Nsb2NrOwotCi19Ci0KLWludCBkY2UxMTJfc2V0X2RwcmVmY2xrKHN0cnVj dCBjbGtfbWdyX2ludGVybmFsICpjbGtfbWdyKQotewotCXN0cnVjdCBicF9zZXRfZGNlX2Nsb2Nr X3BhcmFtZXRlcnMgZGNlX2Nsa19wYXJhbXM7Ci0Jc3RydWN0IGRjX2Jpb3MgKmJwID0gY2xrX21n ci0+YmFzZS5jdHgtPmRjX2Jpb3M7Ci0KLQltZW1zZXQoJmRjZV9jbGtfcGFyYW1zLCAwLCBzaXpl b2YoZGNlX2Nsa19wYXJhbXMpKTsKLQotCS8qUHJvZ3JhbSBEUCByZWYgQ2xvY2sqLwotCS8qVkJJ T1Mgd2lsbCBkZXRlcm1pbmUgRFBSRUZDTEsgZnJlcXVlbmN5LCBzbyB3ZSBkb24ndCBzZXQgaXQq LwotCWRjZV9jbGtfcGFyYW1zLnRhcmdldF9jbG9ja19mcmVxdWVuY3kgPSAwOwotCWRjZV9jbGtf cGFyYW1zLnBsbF9pZCA9IENMT0NLX1NPVVJDRV9JRF9ERlM7Ci0JZGNlX2Nsa19wYXJhbXMuY2xv Y2tfdHlwZSA9IERDRUNMT0NLX1RZUEVfRFBSRUZDTEs7Ci0JaWYgKCFBU0lDUkVWX0lTX1ZFR0Ey MF9QKGNsa19tZ3ItPmJhc2UuY3R4LT5hc2ljX2lkLmh3X2ludGVybmFsX3JldikpCi0JCWRjZV9j bGtfcGFyYW1zLmZsYWdzLlVTRV9HRU5MT0NLX0FTX1NPVVJDRV9GT1JfRFBSRUZDTEsgPQotCQkJ KGRjZV9jbGtfcGFyYW1zLnBsbF9pZCA9PQotCQkJCQlDTE9DS19TT1VSQ0VfQ09NQk9fRElTUExB WV9QTEwwKTsKLQllbHNlCi0JCWRjZV9jbGtfcGFyYW1zLmZsYWdzLlVTRV9HRU5MT0NLX0FTX1NP VVJDRV9GT1JfRFBSRUZDTEsgPSBmYWxzZTsKLQotCWJwLT5mdW5jcy0+c2V0X2RjZV9jbG9jayhi cCwgJmRjZV9jbGtfcGFyYW1zKTsKLQotCS8qIFJldHVybnMgdGhlIGRwX3JlZmNsayB0aGF0IHdh cyBzZXQgKi8KLQlyZXR1cm4gZGNlX2Nsa19wYXJhbXMudGFyZ2V0X2Nsb2NrX2ZyZXF1ZW5jeTsK LX0KLQotc3RhdGljIHZvaWQgZGNlMTEyX3VwZGF0ZV9jbG9ja3Moc3RydWN0IGNsa19tZ3IgKmNs a19tZ3JfYmFzZSwKLQkJCXN0cnVjdCBkY19zdGF0ZSAqY29udGV4dCwKLQkJCWJvb2wgc2FmZV90 b19sb3dlcikKLXsKLQlzdHJ1Y3QgY2xrX21ncl9pbnRlcm5hbCAqY2xrX21ncl9kY2UgPSBUT19D TEtfTUdSX0lOVEVSTkFMKGNsa19tZ3JfYmFzZSk7Ci0Jc3RydWN0IGRtX3BwX3Bvd2VyX2xldmVs X2NoYW5nZV9yZXF1ZXN0IGxldmVsX2NoYW5nZV9yZXE7Ci0JaW50IHBhdGNoZWRfZGlzcF9jbGsg PSBjb250ZXh0LT5id19jdHguYncuZGNlLmRpc3BjbGtfa2h6OwotCi0JLypUT0RPOiBXL0EgZm9y IGRhbDMgbGludXgsIGludmVzdGlnYXRlIHdoeSB0aGlzIHdvcmtzICovCi0JaWYgKCFjbGtfbWdy X2RjZS0+ZGZzX2J5cGFzc19hY3RpdmUpCi0JCXBhdGNoZWRfZGlzcF9jbGsgPSBwYXRjaGVkX2Rp c3BfY2xrICogMTE1IC8gMTAwOwotCi0JbGV2ZWxfY2hhbmdlX3JlcS5wb3dlcl9sZXZlbCA9IGRj ZV9nZXRfcmVxdWlyZWRfY2xvY2tzX3N0YXRlKGNsa19tZ3JfYmFzZSwgY29udGV4dCk7Ci0JLyog Z2V0IG1heCBjbG9jayBzdGF0ZSBmcm9tIFBQTElCICovCi0JaWYgKChsZXZlbF9jaGFuZ2VfcmVx LnBvd2VyX2xldmVsIDwgY2xrX21ncl9kY2UtPmN1cl9taW5fY2xrc19zdGF0ZSAmJiBzYWZlX3Rv X2xvd2VyKQotCQkJfHwgbGV2ZWxfY2hhbmdlX3JlcS5wb3dlcl9sZXZlbCA+IGNsa19tZ3JfZGNl LT5jdXJfbWluX2Nsa3Nfc3RhdGUpIHsKLQkJaWYgKGRtX3BwX2FwcGx5X3Bvd2VyX2xldmVsX2No YW5nZV9yZXF1ZXN0KGNsa19tZ3JfYmFzZS0+Y3R4LCAmbGV2ZWxfY2hhbmdlX3JlcSkpCi0JCQlj bGtfbWdyX2RjZS0+Y3VyX21pbl9jbGtzX3N0YXRlID0gbGV2ZWxfY2hhbmdlX3JlcS5wb3dlcl9s ZXZlbDsKLQl9Ci0KLQlpZiAoc2hvdWxkX3NldF9jbG9jayhzYWZlX3RvX2xvd2VyLCBwYXRjaGVk X2Rpc3BfY2xrLCBjbGtfbWdyX2Jhc2UtPmNsa3MuZGlzcGNsa19raHopKSB7Ci0JCXBhdGNoZWRf ZGlzcF9jbGsgPSBkY2UxMTJfc2V0X2Nsb2NrKGNsa19tZ3JfYmFzZSwgcGF0Y2hlZF9kaXNwX2Ns ayk7Ci0JCWNsa19tZ3JfYmFzZS0+Y2xrcy5kaXNwY2xrX2toeiA9IHBhdGNoZWRfZGlzcF9jbGs7 Ci0JfQotCWRjZTExX3BwbGliX2FwcGx5X2Rpc3BsYXlfcmVxdWlyZW1lbnRzKGNsa19tZ3JfYmFz ZS0+Y3R4LT5kYywgY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX21ncl9mdW5jcyBk Y2UxMTJfZnVuY3MgPSB7Ci0JLmdldF9kcF9yZWZfY2xrX2ZyZXF1ZW5jeSA9IGRjZV9nZXRfZHBf cmVmX2ZyZXFfa2h6LAotCS51cGRhdGVfY2xvY2tzID0gZGNlMTEyX3VwZGF0ZV9jbG9ja3MKLX07 Ci0KLXZvaWQgZGNlMTEyX2Nsa19tZ3JfY29uc3RydWN0KAotCQlzdHJ1Y3QgZGNfY29udGV4dCAq Y3R4LAotCQlzdHJ1Y3QgY2xrX21ncl9pbnRlcm5hbCAqY2xrX21ncikKLXsKLQltZW1jcHkoY2xr X21nci0+bWF4X2Nsa3NfYnlfc3RhdGUsCi0JCWRjZTExMl9tYXhfY2xrc19ieV9zdGF0ZSwKLQkJ c2l6ZW9mKGRjZTExMl9tYXhfY2xrc19ieV9zdGF0ZSkpOwotCi0JZGNlX2Nsa19tZ3JfY29uc3Ry dWN0KGN0eCwgY2xrX21ncik7Ci0KLQljbGtfbWdyLT5yZWdzID0gJmRpc3BfY2xrX3JlZ3M7Ci0J Y2xrX21nci0+Y2xrX21ncl9zaGlmdCA9ICZkaXNwX2Nsa19zaGlmdDsKLQljbGtfbWdyLT5jbGtf bWdyX21hc2sgPSAmZGlzcF9jbGtfbWFzazsKLQljbGtfbWdyLT5iYXNlLmZ1bmNzID0gJmRjZTEx Ml9mdW5jczsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9k Y2UvZGNlMTEyX2Nsa19tZ3IuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2Uv ZGNlMTEyX2Nsa19tZ3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZiMDZkYi4u MDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNlL2RjZTExMl9j bGtfbWdyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0 IDIwMTItMTYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgotICoKLSAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv biBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0 aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJp Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBk byBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUg aW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl IFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK LSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9S KFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCi0gKiBPVEhFUiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwK LSAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUgotICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoK LSAqIEF1dGhvcnM6IEFNRAotICoKLSAqLwotCi0jaWZuZGVmIERBTF9EQ19EQ0VfRENFMTEyX0NM S19NR1JfSF8KLSNkZWZpbmUgREFMX0RDX0RDRV9EQ0UxMTJfQ0xLX01HUl9IXwotCi0KLXZvaWQg ZGNlMTEyX2Nsa19tZ3JfY29uc3RydWN0KAotCQlzdHJ1Y3QgZGNfY29udGV4dCAqY3R4LAotCQlz dHJ1Y3QgY2xrX21ncl9pbnRlcm5hbCAqY2xrX21ncik7Ci0KLS8qIGZ1bmN0aW9ucyBzaGFyZWQg d2l0aCBvdGhlciBjbGsgbWdyICovCi1pbnQgZGNlMTEyX3NldF9jbG9jayhzdHJ1Y3QgY2xrX21n ciAqY2xrX21ncl9iYXNlLCBpbnQgcmVxdWVzdGVkX2Nsa19raHopOwotaW50IGRjZTExMl9zZXRf ZGlzcGNsayhzdHJ1Y3QgY2xrX21ncl9pbnRlcm5hbCAqY2xrX21nciwgaW50IHJlcXVlc3RlZF9j bGtfa2h6KTsKLWludCBkY2UxMTJfc2V0X2RwcmVmY2xrKHN0cnVjdCBjbGtfbWdyX2ludGVybmFs ICpjbGtfbWdyKTsKLQotI2VuZGlmIC8qIERBTF9EQ19EQ0VfRENFMTEyX0NMS19NR1JfSF8gKi8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2UvZGNlMTIwX2Ns a19tZ3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2UvZGNlMTIwX2Nsa19t Z3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA5M2M0ZmMuLjAwMDAwMDAKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjZS9kY2UxMjBfY2xrX21nci5jCisr KyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMi0xNiBB ZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkg Z3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNv cHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0 aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwK LSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVy c29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBp bgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUu Ci0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVW RU5UIFNIQUxMCi0gKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKLSAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhF UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAotICogQVJJU0lO RyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SCi0gKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9y czogQU1ECi0gKgotICovCi0KLSNpbmNsdWRlICJjb3JlX3R5cGVzLmgiCi0jaW5jbHVkZSAiY2xr X21ncl9pbnRlcm5hbC5oIgotCi0jaW5jbHVkZSAiZGNlX2Nsa19tZ3IuaCIKLSNpbmNsdWRlICJk Y2UxMTJfY2xrX21nci5oIgotI2luY2x1ZGUgImRjZTExMF9jbGtfbWdyLmgiCi0jaW5jbHVkZSAi ZGNlMTIwX2Nsa19tZ3IuaCIKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzdGF0ZV9kZXBlbmRlbnRf Y2xvY2tzIGRjZTEyMF9tYXhfY2xrc19ieV9zdGF0ZVtdID0gewotLypDbG9ja3NTdGF0ZUludmFs aWQgLSBzaG91bGQgbm90IGJlIHVzZWQqLwoteyAuZGlzcGxheV9jbGtfa2h6ID0gMCwgLnBpeGVs X2Nsa19raHogPSAwIH0sCi0vKkNsb2Nrc1N0YXRlVWx0cmFMb3cgLSBjdXJyZW50bHkgYnkgSFcg ZGVzaWduIHRlYW0gbm90IHN1cHBvc2VkIHRvIGJlIHVzZWQqLwoteyAuZGlzcGxheV9jbGtfa2h6 ID0gMCwgLnBpeGVsX2Nsa19raHogPSAwIH0sCi0vKkNsb2Nrc1N0YXRlTG93Ki8KLXsgLmRpc3Bs YXlfY2xrX2toeiA9IDQ2MDAwMCwgLnBpeGVsX2Nsa19raHogPSA0MDAwMDAgfSwKLS8qQ2xvY2tz U3RhdGVOb21pbmFsKi8KLXsgLmRpc3BsYXlfY2xrX2toeiA9IDY3MDAwMCwgLnBpeGVsX2Nsa19r aHogPSA2MDAwMDAgfSwKLS8qQ2xvY2tzU3RhdGVQZXJmb3JtYW5jZSovCi17IC5kaXNwbGF5X2Ns a19raHogPSAxMTMzMDAwLCAucGl4ZWxfY2xrX2toeiA9IDYwMDAwMCB9IH07Ci0KLS8qKgotICog ZGNlMTIxX2Nsb2NrX3BhdGNoX3hnbWlfc3NfaW5mbygpIC0gU2F2ZSBYR01JIHNwcmVhZCBzcGVj dHJ1bSBpbmZvCi0gKiBAY2xrX21ncjogY2xvY2sgbWFuYWdlciBiYXNlIHN0cnVjdHVyZQotICoK LSAqIFJlYWRzIGZyb20gVkJJT1MgdGhlIFhHTUkgc3ByZWFkIHNwZWN0cnVtIGluZm8gYW5kIHNh dmVzIGl0IHdpdGhpbgotICogdGhlIGRjZSBjbG9jayBtYW5hZ2VyLiBUaGlzIG9wZXJhdGlvbiB3 aWxsIG92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgZHByZWZjbGsKLSAqIFNTIHZhbHVlcyBpZiB0aGUg dkJJT1MgcXVlcnkgc3VjY2VlZHMuIE90aGVyd2lzZSwgaXQgZG9lcyBub3RoaW5nLiBJdCBhbHNv Ci0gKiBzZXRzIHRoZSAtPnhnbWlfZW5hYmxlZCBmbGFnLgotICovCi12b2lkIGRjZTEyMV9jbG9j a19wYXRjaF94Z21pX3NzX2luZm8oc3RydWN0IGNsa19tZ3IgKmNsa19tZ3JfYmFzZSkKLXsKLQlz dHJ1Y3QgY2xrX21ncl9pbnRlcm5hbCAqY2xrX21ncl9kY2UgPSBUT19DTEtfTUdSX0lOVEVSTkFM KGNsa19tZ3JfYmFzZSk7Ci0JZW51bSBicF9yZXN1bHQgcmVzdWx0OwotCXN0cnVjdCBzcHJlYWRf c3BlY3RydW1faW5mbyBpbmZvID0geyB7IDAgfSB9OwotCXN0cnVjdCBkY19iaW9zICpicCA9IGNs a19tZ3JfZGNlLT5iYXNlLmN0eC0+ZGNfYmlvczsKLQotCWNsa19tZ3JfZGNlLT54Z21pX2VuYWJs ZWQgPSBmYWxzZTsKLQotCXJlc3VsdCA9IGJwLT5mdW5jcy0+Z2V0X3NwcmVhZF9zcGVjdHJ1bV9p bmZvKGJwLCBBU19TSUdOQUxfVFlQRV9YR01JLAotCQkJCQkJICAgICAwLCAmaW5mbyk7Ci0JaWYg KHJlc3VsdCA9PSBCUF9SRVNVTFRfT0sgJiYgaW5mby5zcHJlYWRfc3BlY3RydW1fcGVyY2VudGFn ZSAhPSAwKSB7Ci0JCWNsa19tZ3JfZGNlLT54Z21pX2VuYWJsZWQgPSB0cnVlOwotCQljbGtfbWdy X2RjZS0+c3Nfb25fZHByZWZjbGsgPSB0cnVlOwotCQljbGtfbWdyX2RjZS0+ZHByZWZjbGtfc3Nf ZGl2aWRlciA9Ci0JCQkJaW5mby5zcHJlYWRfcGVyY2VudGFnZV9kaXZpZGVyOwotCi0JCWlmIChp bmZvLnR5cGUuQ0VOVEVSX01PREUgPT0gMCkgewotCQkJLyoKLQkJCSAqIEN1cnJlbnRseSBmb3Ig RFAgUmVmZXJlbmNlIGNsb2NrIHdlCi0JCQkgKiBuZWVkIG9ubHkgU1MgcGVyY2VudGFnZSBmb3IK LQkJCSAqIGRvd25zcHJlYWQKLQkJCSAqLwotCQkJY2xrX21ncl9kY2UtPmRwcmVmY2xrX3NzX3Bl cmNlbnRhZ2UgPQotCQkJCQlpbmZvLnNwcmVhZF9zcGVjdHJ1bV9wZXJjZW50YWdlOwotCQl9Ci0J fQotfQotCi1zdGF0aWMgdm9pZCBkY2UxMl91cGRhdGVfY2xvY2tzKHN0cnVjdCBjbGtfbWdyICpj bGtfbWdyX2Jhc2UsCi0JCQlzdHJ1Y3QgZGNfc3RhdGUgKmNvbnRleHQsCi0JCQlib29sIHNhZmVf dG9fbG93ZXIpCi17Ci0Jc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3JfZGNlID0gVE9f Q0xLX01HUl9JTlRFUk5BTChjbGtfbWdyX2Jhc2UpOwotCXN0cnVjdCBkbV9wcF9jbG9ja19mb3Jf dm9sdGFnZV9yZXEgY2xvY2tfdm9sdGFnZV9yZXEgPSB7MH07Ci0JaW50IG1heF9waXhfY2xrID0g ZGNlX2dldF9tYXhfcGl4ZWxfY2xvY2tfZm9yX2FsbF9wYXRocyhjb250ZXh0KTsKLQlpbnQgcGF0 Y2hlZF9kaXNwX2NsayA9IGNvbnRleHQtPmJ3X2N0eC5idy5kY2UuZGlzcGNsa19raHo7Ci0KLQkv KlRPRE86IFcvQSBmb3IgZGFsMyBsaW51eCwgaW52ZXN0aWdhdGUgd2h5IHRoaXMgd29ya3MgKi8K LQlpZiAoIWNsa19tZ3JfZGNlLT5kZnNfYnlwYXNzX2FjdGl2ZSkKLQkJcGF0Y2hlZF9kaXNwX2Ns ayA9IHBhdGNoZWRfZGlzcF9jbGsgKiAxMTUgLyAxMDA7Ci0KLQlpZiAoc2hvdWxkX3NldF9jbG9j ayhzYWZlX3RvX2xvd2VyLCBwYXRjaGVkX2Rpc3BfY2xrLCBjbGtfbWdyX2Jhc2UtPmNsa3MuZGlz cGNsa19raHopKSB7Ci0JCWNsb2NrX3ZvbHRhZ2VfcmVxLmNsa190eXBlID0gRE1fUFBfQ0xPQ0tf VFlQRV9ESVNQTEFZX0NMSzsKLQkJLyoKLQkJICogV2hlbiB4R01JIGlzIGVuYWJsZWQsIHRoZSBk aXNwbGF5IGNsayBuZWVkcyB0byBiZSBhZGp1c3RlZAotCQkgKiB3aXRoIHRoZSBXQUZMIGxpbmsn cyBTUyBwZXJjZW50YWdlLgotCQkgKi8KLQkJaWYgKGNsa19tZ3JfZGNlLT54Z21pX2VuYWJsZWQp Ci0JCQlwYXRjaGVkX2Rpc3BfY2xrID0gZGNlX2FkanVzdF9kcF9yZWZfZnJlcV9mb3Jfc3MoCi0J CQkJCWNsa19tZ3JfZGNlLCBwYXRjaGVkX2Rpc3BfY2xrKTsKLQkJY2xvY2tfdm9sdGFnZV9yZXEu Y2xvY2tzX2luX2toeiA9IHBhdGNoZWRfZGlzcF9jbGs7Ci0JCWNsa19tZ3JfYmFzZS0+Y2xrcy5k aXNwY2xrX2toeiA9IGRjZTExMl9zZXRfY2xvY2soY2xrX21ncl9iYXNlLCBwYXRjaGVkX2Rpc3Bf Y2xrKTsKLQotCQlkbV9wcF9hcHBseV9jbG9ja19mb3Jfdm9sdGFnZV9yZXF1ZXN0KGNsa19tZ3Jf YmFzZS0+Y3R4LCAmY2xvY2tfdm9sdGFnZV9yZXEpOwotCX0KLQotCWlmIChzaG91bGRfc2V0X2Ns b2NrKHNhZmVfdG9fbG93ZXIsIG1heF9waXhfY2xrLCBjbGtfbWdyX2Jhc2UtPmNsa3MucGh5Y2xr X2toeikpIHsKLQkJY2xvY2tfdm9sdGFnZV9yZXEuY2xrX3R5cGUgPSBETV9QUF9DTE9DS19UWVBF X0RJU1BMQVlQSFlDTEs7Ci0JCWNsb2NrX3ZvbHRhZ2VfcmVxLmNsb2Nrc19pbl9raHogPSBtYXhf cGl4X2NsazsKLQkJY2xrX21ncl9iYXNlLT5jbGtzLnBoeWNsa19raHogPSBtYXhfcGl4X2NsazsK LQotCQlkbV9wcF9hcHBseV9jbG9ja19mb3Jfdm9sdGFnZV9yZXF1ZXN0KGNsa19tZ3JfYmFzZS0+ Y3R4LCAmY2xvY2tfdm9sdGFnZV9yZXEpOwotCX0KLQlkY2UxMV9wcGxpYl9hcHBseV9kaXNwbGF5 X3JlcXVpcmVtZW50cyhjbGtfbWdyX2Jhc2UtPmN0eC0+ZGMsIGNvbnRleHQpOwotfQotCi0KLXN0 YXRpYyBzdHJ1Y3QgY2xrX21ncl9mdW5jcyBkY2UxMjBfZnVuY3MgPSB7Ci0JLmdldF9kcF9yZWZf Y2xrX2ZyZXF1ZW5jeSA9IGRjZTEyX2dldF9kcF9yZWZfZnJlcV9raHosCi0JLnVwZGF0ZV9jbG9j a3MgPSBkY2UxMl91cGRhdGVfY2xvY2tzCi19OwotCi12b2lkIGRjZTEyMF9jbGtfbWdyX2NvbnN0 cnVjdChzdHJ1Y3QgZGNfY29udGV4dCAqY3R4LCBzdHJ1Y3QgY2xrX21ncl9pbnRlcm5hbCAqY2xr X21ncikKLXsKLQltZW1jcHkoY2xrX21nci0+bWF4X2Nsa3NfYnlfc3RhdGUsCi0JCWRjZTEyMF9t YXhfY2xrc19ieV9zdGF0ZSwKLQkJc2l6ZW9mKGRjZTEyMF9tYXhfY2xrc19ieV9zdGF0ZSkpOwot Ci0JZGNlX2Nsa19tZ3JfY29uc3RydWN0KGN0eCwgY2xrX21ncik7Ci0KLQljbGtfbWdyLT5iYXNl LmRwcmVmY2xrX2toeiA9IDYwMDAwMDsKLQljbGtfbWdyLT5iYXNlLmZ1bmNzID0gJmRjZTEyMF9m dW5jczsKLX0KLQotdm9pZCBkY2UxMjFfY2xrX21ncl9jb25zdHJ1Y3Qoc3RydWN0IGRjX2NvbnRl eHQgKmN0eCwgc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3IpCi17Ci0JZGNlMTIwX2Ns a19tZ3JfY29uc3RydWN0KGN0eCwgY2xrX21ncik7Ci0JY2xrX21nci0+YmFzZS5kcHJlZmNsa19r aHogPSA2MjUwMDA7Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxh eS9kYy9kY2UvZGNlMTIwX2Nsa19tZ3IuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9k Yy9kY2UvZGNlMTIwX2Nsa19tZ3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEy ZDZmYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNlL2Rj ZTEyMF9jbGtfbWdyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29w eXJpZ2h0IDIwMTItMTYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgotICoKLSAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hh bGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1Ig QVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCi0gKiBPVEhFUiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwKLSAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUgotICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJF LgotICoKLSAqIEF1dGhvcnM6IEFNRAotICoKLSAqLwotCi0jaWZuZGVmIERBTF9EQ19EQ0VfRENF MTIwX0NMS19NR1JfSF8KLSNkZWZpbmUgREFMX0RDX0RDRV9EQ0UxMjBfQ0xLX01HUl9IXwotCi12 b2lkIGRjZTEyMF9jbGtfbWdyX2NvbnN0cnVjdChzdHJ1Y3QgZGNfY29udGV4dCAqY3R4LCBzdHJ1 Y3QgY2xrX21ncl9pbnRlcm5hbCAqY2xrX21ncik7Ci12b2lkIGRjZTEyMV9jbGtfbWdyX2NvbnN0 cnVjdChzdHJ1Y3QgZGNfY29udGV4dCAqY3R4LCBzdHJ1Y3QgY2xrX21ncl9pbnRlcm5hbCAqY2xr X21ncik7Ci0KLQotCi0jZW5kaWYgLyogREFMX0RDX0RDRV9EQ0UxMjBfQ0xLX01HUl9IXyAqLwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjZS9kY2VfY2xrX21n ci5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjZS9kY2VfY2xrX21nci5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzBlNGM1Li4wMDAwMDAwCi0tLSBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2UvZGNlX2Nsa19tZ3IuYworKysgL2Rldi9udWxs CkBAIC0xLDQ2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTItMTYgQWR2YW5jZWQgTWlj cm8gRGV2aWNlcywgSW5jLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1v ZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Ig c2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAot ICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SCi0gKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKLSAqIEFSSVNJTkcgRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgotICog T1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6IEFNRAotICoK LSAqLwotI2luY2x1ZGUgImRjY2cuaCIKLSNpbmNsdWRlICJjbGtfbWdyX2ludGVybmFsLmgiCi0j aW5jbHVkZSAiZGNlX2Nsa19tZ3IuaCIKLSNpbmNsdWRlICJkY2UxMTBfY2xrX21nci5oIgotI2lu Y2x1ZGUgImRjZTExMl9jbGtfbWdyLmgiCi0jaW5jbHVkZSAicmVnX2hlbHBlci5oIgotI2luY2x1 ZGUgImRtY3UuaCIKLSNpbmNsdWRlICJjb3JlX3R5cGVzLmgiCi0jaW5jbHVkZSAiZGFsX2FzaWNf aWQuaCIKLQotLyoKLSAqIEN1cnJlbnRseSB0aGUgcmVnaXN0ZXIgc2hpZnRzIGFuZCBtYXNrcyBp biB0aGlzIGZpbGUgYXJlIHVzZWQgZm9yIGRjZTEwMCBhbmQgZGNlODAKLSAqIHdoaWNoIGhhcyBp ZGVudGljYWwgZGVmaW5pdGlvbnMuCi0gKiBUT0RPOiByZW1vdmUgdGhpcyB3aGVuIERQUkVGQ0xL X0NOVEwgYW5kIGRwcmVmIERFTlRJU1RfRElTUENMS19DTlRMCi0gKiBpcyBtb3ZlZCB0byBkY2Nn LCB3aGVyZSBpdCBiZWxvbmdzCi0gKi8KLSNpbmNsdWRlICJkY2UvZGNlXzhfMF9kLmgiCi0jaW5j bHVkZSAiZGNlL2RjZV84XzBfc2hfbWFzay5oIgotCi0jZGVmaW5lIFJFRyhyZWcpIFwKLQkoY2xr X21nci0+cmVncy0+cmVnKQotCi0jdW5kZWYgRk4KLSNkZWZpbmUgRk4ocmVnX25hbWUsIGZpZWxk X25hbWUpIFwKLQljbGtfbWdyLT5jbGtfbWdyX3NoaWZ0LT5maWVsZF9uYW1lLCBjbGtfbWdyLT5j bGtfbWdyX21hc2stPmZpZWxkX25hbWUKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfbWdyX3Jl Z2lzdGVycyBkaXNwX2Nsa19yZWdzID0gewotCQlDTEtfQ09NTU9OX1JFR19MSVNUX0RDRV9CQVNF KCkKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX21ncl9zaGlmdCBkaXNwX2Nsa19zaGlm dCA9IHsKLQkJQ0xLX0NPTU1PTl9NQVNLX1NIX0xJU1RfRENFX0NPTU1PTl9CQVNFKF9fU0hJRlQp Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa19tZ3JfbWFzayBkaXNwX2Nsa19tYXNrID0g ewotCQlDTEtfQ09NTU9OX01BU0tfU0hfTElTVF9EQ0VfQ09NTU9OX0JBU0UoX01BU0spCi19Owot Ci0KLS8qIE1heCBjbG9jayB2YWx1ZXMgZm9yIGVhY2ggc3RhdGUgaW5kZXhlZCBieSAiZW51bSBj bG9ja3Nfc3RhdGUiOiAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBzdGF0ZV9kZXBlbmRlbnRfY2xv Y2tzIGRjZTgwX21heF9jbGtzX2J5X3N0YXRlW10gPSB7Ci0vKiBDbG9ja3NTdGF0ZUludmFsaWQg LSBzaG91bGQgbm90IGJlIHVzZWQgKi8KLXsgLmRpc3BsYXlfY2xrX2toeiA9IDAsIC5waXhlbF9j bGtfa2h6ID0gMCB9LAotLyogQ2xvY2tzU3RhdGVVbHRyYUxvdyAtIG5vdCBleHBlY3RlZCB0byBi ZSB1c2VkIGZvciBEQ0UgOC4wICovCi17IC5kaXNwbGF5X2Nsa19raHogPSAwLCAucGl4ZWxfY2xr X2toeiA9IDAgfSwKLS8qIENsb2Nrc1N0YXRlTG93ICovCi17IC5kaXNwbGF5X2Nsa19raHogPSAz NTIwMDAsIC5waXhlbF9jbGtfa2h6ID0gMzMwMDAwfSwKLS8qIENsb2Nrc1N0YXRlTm9taW5hbCAq LwoteyAuZGlzcGxheV9jbGtfa2h6ID0gNjAwMDAwLCAucGl4ZWxfY2xrX2toeiA9IDQwMDAwMCB9 LAotLyogQ2xvY2tzU3RhdGVQZXJmb3JtYW5jZSAqLwoteyAuZGlzcGxheV9jbGtfa2h6ID0gNjAw MDAwLCAucGl4ZWxfY2xrX2toeiA9IDQwMDAwMCB9IH07Ci0KLWludCBkZW50aXN0X2dldF9kaXZp ZGVyX2Zyb21fZGlkKGludCBkaWQpCi17Ci0JaWYgKGRpZCA8IERFTlRJU1RfQkFTRV9ESURfMSkK LQkJZGlkID0gREVOVElTVF9CQVNFX0RJRF8xOwotCWlmIChkaWQgPiBERU5USVNUX01BWF9ESUQp Ci0JCWRpZCA9IERFTlRJU1RfTUFYX0RJRDsKLQotCWlmIChkaWQgPCBERU5USVNUX0JBU0VfRElE XzIpIHsKLQkJcmV0dXJuIERFTlRJU1RfRElWSURFUl9SQU5HRV8xX1NUQVJUICsgREVOVElTVF9E SVZJREVSX1JBTkdFXzFfU1RFUAotCQkJCQkJCSogKGRpZCAtIERFTlRJU1RfQkFTRV9ESURfMSk7 Ci0JfSBlbHNlIGlmIChkaWQgPCBERU5USVNUX0JBU0VfRElEXzMpIHsKLQkJcmV0dXJuIERFTlRJ U1RfRElWSURFUl9SQU5HRV8yX1NUQVJUICsgREVOVElTVF9ESVZJREVSX1JBTkdFXzJfU1RFUAot CQkJCQkJCSogKGRpZCAtIERFTlRJU1RfQkFTRV9ESURfMik7Ci0JfSBlbHNlIGlmIChkaWQgPCBE RU5USVNUX0JBU0VfRElEXzQpIHsKLQkJcmV0dXJuIERFTlRJU1RfRElWSURFUl9SQU5HRV8zX1NU QVJUICsgREVOVElTVF9ESVZJREVSX1JBTkdFXzNfU1RFUAotCQkJCQkJCSogKGRpZCAtIERFTlRJ U1RfQkFTRV9ESURfMyk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIERFTlRJU1RfRElWSURFUl9SQU5H RV80X1NUQVJUICsgREVOVElTVF9ESVZJREVSX1JBTkdFXzRfU1RFUAotCQkJCQkJCSogKGRpZCAt IERFTlRJU1RfQkFTRV9ESURfNCk7Ci0JfQotfQotCi0vKiBTVyB3aWxsIGFkanVzdCBEUCBSRUYg Q2xvY2sgYXZlcmFnZSB2YWx1ZSBmb3IgYWxsIHB1cnBvc2VzCi0gKiAoRFAgRFRPIC8gRFAgQXVk aW8gRFRPIGFuZCBEUCBHVEMpCi0gaWYgY2xvY2sgaXMgc3ByZWFkIGZvciBhbGwgY2FzZXM6Ci0g LWlmIFNTIGVuYWJsZWQgb24gRFAgUmVmIGNsb2NrIGFuZCBIVyBkZS1zcHJlYWRpbmcgZW5hYmxl ZCB3aXRoIFNXCi0gY2FsY3VsYXRpb25zIGZvciBEU19JTkNSL0RTX01PRFVMTyAodGhpcyBpcyBw bGFubmVkIHRvIGJlIGRlZmF1bHQgY2FzZSkKLSAtaWYgU1MgZW5hYmxlZCBvbiBEUCBSZWYgY2xv Y2sgYW5kIEhXIGRlLXNwcmVhZGluZyBlbmFibGVkIHdpdGggSFcKLSBjYWxjdWxhdGlvbnMgKG5v dCBwbGFubmVkIHRvIGJlIHVzZWQsIGJ1dCBhdmVyYWdlIGNsb2NrIHNob3VsZCBzdGlsbAotIGJl IHZhbGlkKQotIC1pZiBTUyBlbmFibGVkIG9uIERQIFJlZiBjbG9jayBhbmQgSFcgZGUtc3ByZWFk aW5nIGRpc2FibGVkCi0gKHNob3VsZCBub3QgYmUgY2FzZSB3aXRoIENJSykgdGhlbiBTVyBzaG91 bGQgcHJvZ3JhbSBhbGwgcmF0ZXMKLSBnZW5lcmF0ZWQgYWNjb3JkaW5nIHRvIGF2ZXJhZ2UgdmFs dWUgKGNhc2UgYXMgd2l0aCBwcmV2aW91cyBBU0lDcykKLSAgKi8KLQotaW50IGRjZV9hZGp1c3Rf ZHBfcmVmX2ZyZXFfZm9yX3NzKHN0cnVjdCBjbGtfbWdyX2ludGVybmFsICpjbGtfbWdyX2RjZSwg aW50IGRwX3JlZl9jbGtfa2h6KQotewotCWlmIChjbGtfbWdyX2RjZS0+c3Nfb25fZHByZWZjbGsg JiYgY2xrX21ncl9kY2UtPmRwcmVmY2xrX3NzX2RpdmlkZXIgIT0gMCkgewotCQlzdHJ1Y3QgZml4 ZWQzMV8zMiBzc19wZXJjZW50YWdlID0gZGNfZml4cHRfZGl2X2ludCgKLQkJCQlkY19maXhwdF9m cm9tX2ZyYWN0aW9uKGNsa19tZ3JfZGNlLT5kcHJlZmNsa19zc19wZXJjZW50YWdlLAotCQkJCQkJ CWNsa19tZ3JfZGNlLT5kcHJlZmNsa19zc19kaXZpZGVyKSwgMjAwKTsKLQkJc3RydWN0IGZpeGVk MzFfMzIgYWRqX2RwX3JlZl9jbGtfa2h6OwotCi0JCXNzX3BlcmNlbnRhZ2UgPSBkY19maXhwdF9z dWIoZGNfZml4cHRfb25lLCBzc19wZXJjZW50YWdlKTsKLQkJYWRqX2RwX3JlZl9jbGtfa2h6ID0g ZGNfZml4cHRfbXVsX2ludChzc19wZXJjZW50YWdlLCBkcF9yZWZfY2xrX2toeik7Ci0JCWRwX3Jl Zl9jbGtfa2h6ID0gZGNfZml4cHRfZmxvb3IoYWRqX2RwX3JlZl9jbGtfa2h6KTsKLQl9Ci0JcmV0 dXJuIGRwX3JlZl9jbGtfa2h6OwotfQotCi1pbnQgZGNlX2dldF9kcF9yZWZfZnJlcV9raHooc3Ry dWN0IGNsa19tZ3IgKmNsa19tZ3JfYmFzZSkKLXsKLQlzdHJ1Y3QgY2xrX21ncl9pbnRlcm5hbCAq Y2xrX21nciA9IFRPX0NMS19NR1JfSU5URVJOQUwoY2xrX21ncl9iYXNlKTsKLQlpbnQgZHByZWZj bGtfd2RpdmlkZXI7Ci0JaW50IGRwcmVmY2xrX3NyY19zZWw7Ci0JaW50IGRwX3JlZl9jbGtfa2h6 ID0gNjAwMDAwOwotCWludCB0YXJnZXRfZGl2OwotCi0JLyogQVNTRVJUIERQIFJlZmVyZW5jZSBD bG9jayBzb3VyY2UgaXMgZnJvbSBERlMqLwotCVJFR19HRVQoRFBSRUZDTEtfQ05UTCwgRFBSRUZD TEtfU1JDX1NFTCwgJmRwcmVmY2xrX3NyY19zZWwpOwotCUFTU0VSVChkcHJlZmNsa19zcmNfc2Vs ID09IDApOwotCi0JLyogUmVhZCB0aGUgbW1ERU5USVNUX0RJU1BDTEtfQ05UTCB0byBnZXQgdGhl IGN1cnJlbnRseQotCSAqIHByb2dyYW1tZWQgRElEIERFTlRJU1RfRFBSRUZDTEtfV0RJVklERVIq LwotCVJFR19HRVQoREVOVElTVF9ESVNQQ0xLX0NOVEwsIERFTlRJU1RfRFBSRUZDTEtfV0RJVklE RVIsICZkcHJlZmNsa193ZGl2aWRlcik7Ci0KLQkvKiBDb252ZXJ0IERFTlRJU1RfRFBSRUZDTEtf V0RJVklERVJ0byBhY3R1YWwgZGl2aWRlciovCi0JdGFyZ2V0X2RpdiA9IGRlbnRpc3RfZ2V0X2Rp dmlkZXJfZnJvbV9kaWQoZHByZWZjbGtfd2RpdmlkZXIpOwotCi0JLyogQ2FsY3VsYXRlIHRoZSBj dXJyZW50IERGUyBjbG9jaywgaW4ga0h6LiovCi0JZHBfcmVmX2Nsa19raHogPSAoREVOVElTVF9E SVZJREVSX1JBTkdFX1NDQUxFX0ZBQ1RPUgotCQkqIGNsa19tZ3ItPmRlbnRpc3RfdmNvX2ZyZXFf a2h6KSAvIHRhcmdldF9kaXY7Ci0KLQlyZXR1cm4gZGNlX2FkanVzdF9kcF9yZWZfZnJlcV9mb3Jf c3MoY2xrX21nciwgZHBfcmVmX2Nsa19raHopOwotfQotCi1pbnQgZGNlMTJfZ2V0X2RwX3JlZl9m cmVxX2toeihzdHJ1Y3QgY2xrX21nciAqY2xrX21ncl9iYXNlKQotewotCXN0cnVjdCBjbGtfbWdy X2ludGVybmFsICpjbGtfbWdyX2RjZSA9IFRPX0NMS19NR1JfSU5URVJOQUwoY2xrX21ncl9iYXNl KTsKLQotCXJldHVybiBkY2VfYWRqdXN0X2RwX3JlZl9mcmVxX2Zvcl9zcyhjbGtfbWdyX2RjZSwg Y2xrX21ncl9iYXNlLT5kcHJlZmNsa19raHopOwotfQotCi0vKiB1bml0OiBpbl9raHogYmVmb3Jl IG1vZGUgc2V0LCBnZXQgcGl4ZWwgY2xvY2sgZnJvbSBjb250ZXh0LiBBU0lDIHJlZ2lzdGVyCi0g KiBtYXkgbm90IGJlIHByb2dyYW1tZWQgeWV0Ci0gKi8KLXVpbnQzMl90IGRjZV9nZXRfbWF4X3Bp eGVsX2Nsb2NrX2Zvcl9hbGxfcGF0aHMoc3RydWN0IGRjX3N0YXRlICpjb250ZXh0KQotewotCXVp bnQzMl90IG1heF9waXhfY2xrID0gMDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhf UElQRVM7IGkrKykgewotCQlzdHJ1Y3QgcGlwZV9jdHggKnBpcGVfY3R4ID0gJmNvbnRleHQtPnJl c19jdHgucGlwZV9jdHhbaV07Ci0KLQkJaWYgKHBpcGVfY3R4LT5zdHJlYW0gPT0gTlVMTCkKLQkJ CWNvbnRpbnVlOwotCi0JCS8qIGRvIG5vdCBjaGVjayB1bmRlciBsYXkgKi8KLQkJaWYgKHBpcGVf Y3R4LT50b3BfcGlwZSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChwaXBlX2N0eC0+c3RyZWFtX3Jl cy5waXhfY2xrX3BhcmFtcy5yZXF1ZXN0ZWRfcGl4X2Nsa18xMDBoeiAvIDEwID4gbWF4X3BpeF9j bGspCi0JCQltYXhfcGl4X2NsayA9IHBpcGVfY3R4LT5zdHJlYW1fcmVzLnBpeF9jbGtfcGFyYW1z LnJlcXVlc3RlZF9waXhfY2xrXzEwMGh6IC8gMTA7Ci0KLQkJLyogcmFpc2UgY2xvY2sgc3RhdGUg Zm9yIEhCUjMvMiBpZiByZXF1aXJlZC4gQ29uZmlybWVkIHdpdGggSFcgRENFL0RQQ1MKLQkJICog bG9naWMgZm9yIEhCUjMgc3RpbGwgbmVlZHMgTm9taW5hbCAoMC44Vikgb24gVkREQyByYWlsCi0J CSAqLwotCQlpZiAoZGNfaXNfZHBfc2lnbmFsKHBpcGVfY3R4LT5zdHJlYW0tPnNpZ25hbCkgJiYK LQkJCQlwaXBlX2N0eC0+c3RyZWFtX3Jlcy5waXhfY2xrX3BhcmFtcy5yZXF1ZXN0ZWRfc3ltX2Ns ayA+IG1heF9waXhfY2xrKQotCQkJbWF4X3BpeF9jbGsgPSBwaXBlX2N0eC0+c3RyZWFtX3Jlcy5w aXhfY2xrX3BhcmFtcy5yZXF1ZXN0ZWRfc3ltX2NsazsKLQl9Ci0KLQlyZXR1cm4gbWF4X3BpeF9j bGs7Ci19Ci0KLWVudW0gZG1fcHBfY2xvY2tzX3N0YXRlIGRjZV9nZXRfcmVxdWlyZWRfY2xvY2tz X3N0YXRlKAotCXN0cnVjdCBjbGtfbWdyICpjbGtfbWdyX2Jhc2UsCi0Jc3RydWN0IGRjX3N0YXRl ICpjb250ZXh0KQotewotCXN0cnVjdCBjbGtfbWdyX2ludGVybmFsICpjbGtfbWdyX2RjZSA9IFRP X0NMS19NR1JfSU5URVJOQUwoY2xrX21ncl9iYXNlKTsKLQlpbnQgaTsKLQllbnVtIGRtX3BwX2Ns b2Nrc19zdGF0ZSBsb3dfcmVxX2NsazsKLQlpbnQgbWF4X3BpeF9jbGsgPSBkY2VfZ2V0X21heF9w aXhlbF9jbG9ja19mb3JfYWxsX3BhdGhzKGNvbnRleHQpOwotCi0JLyogSXRlcmF0ZSBmcm9tIGhp Z2hlc3Qgc3VwcG9ydGVkIHRvIGxvd2VzdCB2YWxpZCBzdGF0ZSwgYW5kIHVwZGF0ZQotCSAqIGxv d2VzdCBSZXF1aXJlZFN0YXRlIHdpdGggdGhlIGxvd2VzdCBzdGF0ZSB0aGF0IHNhdGlzZmllcwot CSAqIGFsbCByZXF1aXJlZCBjbG9ja3MKLQkgKi8KLQlmb3IgKGkgPSBjbGtfbWdyX2RjZS0+bWF4 X2Nsa3Nfc3RhdGU7IGkgPj0gRE1fUFBfQ0xPQ0tTX1NUQVRFX1VMVFJBX0xPVzsgaS0tKQotCQlp ZiAoY29udGV4dC0+YndfY3R4LmJ3LmRjZS5kaXNwY2xrX2toeiA+Ci0JCQkJY2xrX21ncl9kY2Ut Pm1heF9jbGtzX2J5X3N0YXRlW2ldLmRpc3BsYXlfY2xrX2toegotCQkJfHwgbWF4X3BpeF9jbGsg PgotCQkJCWNsa19tZ3JfZGNlLT5tYXhfY2xrc19ieV9zdGF0ZVtpXS5waXhlbF9jbGtfa2h6KQot CQkJYnJlYWs7Ci0KLQlsb3dfcmVxX2NsayA9IGkgKyAxOwotCWlmIChsb3dfcmVxX2NsayA+IGNs a19tZ3JfZGNlLT5tYXhfY2xrc19zdGF0ZSkgewotCQkvKiBzZXQgbWF4IGNsb2NrIHN0YXRlIGZv ciBoaWdoIHBoeWNsb2NrLCBpbnZhbGlkIG9uIGV4Y2VlZGluZyBkaXNwbGF5IGNsb2NrICovCi0J CWlmIChjbGtfbWdyX2RjZS0+bWF4X2Nsa3NfYnlfc3RhdGVbY2xrX21ncl9kY2UtPm1heF9jbGtz X3N0YXRlXS5kaXNwbGF5X2Nsa19raHoKLQkJCQk8IGNvbnRleHQtPmJ3X2N0eC5idy5kY2UuZGlz cGNsa19raHopCi0JCQlsb3dfcmVxX2NsayA9IERNX1BQX0NMT0NLU19TVEFURV9JTlZBTElEOwot CQllbHNlCi0JCQlsb3dfcmVxX2NsayA9IGNsa19tZ3JfZGNlLT5tYXhfY2xrc19zdGF0ZTsKLQl9 Ci0KLQlyZXR1cm4gbG93X3JlcV9jbGs7Ci19Ci0KLQotLyogVE9ETzogcmVtb3ZlIHVzZSB0aGUg dHdvIGJyb2tlbiBkb3duIGZ1bmN0aW9ucyAqLwotaW50IGRjZV9zZXRfY2xvY2soCi0Jc3RydWN0 IGNsa19tZ3IgKmNsa19tZ3JfYmFzZSwKLQlpbnQgcmVxdWVzdGVkX2Nsa19raHopCi17Ci0Jc3Ry dWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3JfZGNlID0gVE9fQ0xLX01HUl9JTlRFUk5BTChj bGtfbWdyX2Jhc2UpOwotCXN0cnVjdCBicF9waXhlbF9jbG9ja19wYXJhbWV0ZXJzIHB4bF9jbGtf cGFyYW1zID0geyAwIH07Ci0Jc3RydWN0IGRjX2Jpb3MgKmJwID0gY2xrX21ncl9iYXNlLT5jdHgt PmRjX2Jpb3M7Ci0JaW50IGFjdHVhbF9jbG9jayA9IHJlcXVlc3RlZF9jbGtfa2h6OwotCXN0cnVj dCBkbWN1ICpkbWN1ID0gY2xrX21ncl9kY2UtPmJhc2UuY3R4LT5kYy0+cmVzX3Bvb2wtPmRtY3U7 Ci0KLQkvKiBNYWtlIHN1cmUgcmVxdWVzdGVkIGNsb2NrIGlzbid0IGxvd2VyIHRoYW4gbWluaW11 bSB0aHJlc2hvbGQqLwotCWlmIChyZXF1ZXN0ZWRfY2xrX2toeiA+IDApCi0JCXJlcXVlc3RlZF9j bGtfa2h6ID0gbWF4KHJlcXVlc3RlZF9jbGtfa2h6LAotCQkJCWNsa19tZ3JfZGNlLT5kZW50aXN0 X3Zjb19mcmVxX2toeiAvIDY0KTsKLQotCS8qIFByZXBhcmUgdG8gcHJvZ3JhbSBkaXNwbGF5IGNs b2NrKi8KLQlweGxfY2xrX3BhcmFtcy50YXJnZXRfcGl4ZWxfY2xvY2tfMTAwaHogPSByZXF1ZXN0 ZWRfY2xrX2toeiAqIDEwOwotCXB4bF9jbGtfcGFyYW1zLnBsbF9pZCA9IENMT0NLX1NPVVJDRV9J RF9ERlM7Ci0KLQlpZiAoY2xrX21ncl9kY2UtPmRmc19ieXBhc3NfYWN0aXZlKQotCQlweGxfY2xr X3BhcmFtcy5mbGFncy5TRVRfRElTUENMS19ERlNfQllQQVNTID0gdHJ1ZTsKLQotCWJwLT5mdW5j cy0+cHJvZ3JhbV9kaXNwbGF5X2VuZ2luZV9wbGwoYnAsICZweGxfY2xrX3BhcmFtcyk7Ci0KLQlp ZiAoY2xrX21ncl9kY2UtPmRmc19ieXBhc3NfYWN0aXZlKSB7Ci0JCS8qIENhY2hlIHRoZSBmaXhl ZCBkaXNwbGF5IGNsb2NrKi8KLQkJY2xrX21ncl9kY2UtPmRmc19ieXBhc3NfZGlzcF9jbGsgPQot CQkJcHhsX2Nsa19wYXJhbXMuZGZzX2J5cGFzc19kaXNwbGF5X2Nsb2NrOwotCQlhY3R1YWxfY2xv Y2sgPSBweGxfY2xrX3BhcmFtcy5kZnNfYnlwYXNzX2Rpc3BsYXlfY2xvY2s7Ci0JfQotCi0JLyog ZnJvbSBwb3dlciBkb3duLCB3ZSBuZWVkIG1hcmsgdGhlIGNsb2NrIHN0YXRlIGFzIENsb2Nrc1N0 YXRlTm9taW5hbAotCSAqIGZyb20gSFdSZXNldCwgc28gd2hlbiByZXN1bWUgd2Ugd2lsbCBjYWxs IHBwbGliIHZvbHRhZ2UgcmVndWxhdG9yLiovCi0JaWYgKHJlcXVlc3RlZF9jbGtfa2h6ID09IDAp Ci0JCWNsa19tZ3JfZGNlLT5jdXJfbWluX2Nsa3Nfc3RhdGUgPSBETV9QUF9DTE9DS1NfU1RBVEVf Tk9NSU5BTDsKLQotCWlmIChkbWN1ICYmIGRtY3UtPmZ1bmNzLT5pc19kbWN1X2luaXRpYWxpemVk KGRtY3UpKQotCQlkbWN1LT5mdW5jcy0+c2V0X3Bzcl93YWl0X2xvb3AoZG1jdSwgYWN0dWFsX2Ns b2NrIC8gMTAwMCAvIDcpOwotCi0JcmV0dXJuIGFjdHVhbF9jbG9jazsKLX0KLQotCi1zdGF0aWMg dm9pZCBkY2VfY2xvY2tfcmVhZF9pbnRlZ3JhdGVkX2luZm8oc3RydWN0IGNsa19tZ3JfaW50ZXJu YWwgKmNsa19tZ3JfZGNlKQotewotCXN0cnVjdCBkY19kZWJ1Z19vcHRpb25zICpkZWJ1ZyA9ICZj bGtfbWdyX2RjZS0+YmFzZS5jdHgtPmRjLT5kZWJ1ZzsKLQlzdHJ1Y3QgZGNfYmlvcyAqYnAgPSBj bGtfbWdyX2RjZS0+YmFzZS5jdHgtPmRjX2Jpb3M7Ci0Jc3RydWN0IGludGVncmF0ZWRfaW5mbyBp bmZvID0geyB7IHsgMCB9IH0gfTsKLQlzdHJ1Y3QgZGNfZmlybXdhcmVfaW5mbyBmd19pbmZvID0g eyB7IDAgfSB9OwotCWludCBpOwotCi0JaWYgKGJwLT5pbnRlZ3JhdGVkX2luZm8pCi0JCWluZm8g PSAqYnAtPmludGVncmF0ZWRfaW5mbzsKLQotCWNsa19tZ3JfZGNlLT5kZW50aXN0X3Zjb19mcmVx X2toeiA9IGluZm8uZGVudGlzdF92Y29fZnJlcTsKLQlpZiAoY2xrX21ncl9kY2UtPmRlbnRpc3Rf dmNvX2ZyZXFfa2h6ID09IDApIHsKLQkJYnAtPmZ1bmNzLT5nZXRfZmlybXdhcmVfaW5mbyhicCwg JmZ3X2luZm8pOwotCQljbGtfbWdyX2RjZS0+ZGVudGlzdF92Y29fZnJlcV9raHogPQotCQkJZndf aW5mby5zbXVfZ3B1X3BsbF9vdXRwdXRfZnJlcTsKLQkJaWYgKGNsa19tZ3JfZGNlLT5kZW50aXN0 X3Zjb19mcmVxX2toeiA9PSAwKQotCQkJY2xrX21ncl9kY2UtPmRlbnRpc3RfdmNvX2ZyZXFfa2h6 ID0gMzYwMDAwMDsKLQl9Ci0KLQkvKnVwZGF0ZSB0aGUgbWF4aW11bSBkaXNwbGF5IGNsb2NrIGZv ciBlYWNoIHBvd2VyIHN0YXRlKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlVNQkVSX09GX0RJU1BfQ0xL X1ZPTFRBR0U7ICsraSkgewotCQllbnVtIGRtX3BwX2Nsb2Nrc19zdGF0ZSBjbGtfc3RhdGUgPSBE TV9QUF9DTE9DS1NfU1RBVEVfSU5WQUxJRDsKLQotCQlzd2l0Y2ggKGkpIHsKLQkJY2FzZSAwOgot CQkJY2xrX3N0YXRlID0gRE1fUFBfQ0xPQ0tTX1NUQVRFX1VMVFJBX0xPVzsKLQkJCWJyZWFrOwot Ci0JCWNhc2UgMToKLQkJCWNsa19zdGF0ZSA9IERNX1BQX0NMT0NLU19TVEFURV9MT1c7Ci0JCQli cmVhazsKLQotCQljYXNlIDI6Ci0JCQljbGtfc3RhdGUgPSBETV9QUF9DTE9DS1NfU1RBVEVfTk9N SU5BTDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgMzoKLQkJCWNsa19zdGF0ZSA9IERNX1BQX0NMT0NL U19TVEFURV9QRVJGT1JNQU5DRTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQljbGtfc3Rh dGUgPSBETV9QUF9DTE9DS1NfU1RBVEVfSU5WQUxJRDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLypE byBub3QgYWxsb3cgYmFkIFZCSU9TL1NCSU9TIHRvIG92ZXJyaWRlIHdpdGggaW52YWxpZCB2YWx1 ZXMsCi0JCSAqIGNoZWNrIGZvciA+IDEwME1IeiovCi0JCWlmIChpbmZvLmRpc3BfY2xrX3ZvbHRh Z2VbaV0ubWF4X3N1cHBvcnRlZF9jbGsgPj0gMTAwMDAwKQotCQkJY2xrX21ncl9kY2UtPm1heF9j bGtzX2J5X3N0YXRlW2Nsa19zdGF0ZV0uZGlzcGxheV9jbGtfa2h6ID0KLQkJCQlpbmZvLmRpc3Bf Y2xrX3ZvbHRhZ2VbaV0ubWF4X3N1cHBvcnRlZF9jbGs7Ci0JfQotCi0JaWYgKCFkZWJ1Zy0+ZGlz YWJsZV9kZnNfYnlwYXNzICYmIGJwLT5pbnRlZ3JhdGVkX2luZm8pCi0JCWlmIChicC0+aW50ZWdy YXRlZF9pbmZvLT5ncHVfY2FwX2luZm8gJiBERlNfQllQQVNTX0VOQUJMRSkKLQkJCWNsa19tZ3Jf ZGNlLT5kZnNfYnlwYXNzX2VuYWJsZWQgPSB0cnVlOwotfQotCi12b2lkIGRjZV9jbG9ja19yZWFk X3NzX2luZm8oc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3JfZGNlKQotewotCXN0cnVj dCBkY19iaW9zICpicCA9IGNsa19tZ3JfZGNlLT5iYXNlLmN0eC0+ZGNfYmlvczsKLQlpbnQgc3Nf aW5mb19udW0gPSBicC0+ZnVuY3MtPmdldF9zc19lbnRyeV9udW1iZXIoCi0JCQlicCwgQVNfU0lH TkFMX1RZUEVfR1BVX1BMTCk7Ci0KLQlpZiAoc3NfaW5mb19udW0pIHsKLQkJc3RydWN0IHNwcmVh ZF9zcGVjdHJ1bV9pbmZvIGluZm8gPSB7IHsgMCB9IH07Ci0JCWVudW0gYnBfcmVzdWx0IHJlc3Vs dCA9IGJwLT5mdW5jcy0+Z2V0X3NwcmVhZF9zcGVjdHJ1bV9pbmZvKAotCQkJCWJwLCBBU19TSUdO QUxfVFlQRV9HUFVfUExMLCAwLCAmaW5mbyk7Ci0KLQkJLyogQmFzZWQgb24gVkJJT1MsIFZCSU9T IHdpbGwga2VlcCBlbnRyeSBmb3IgR1BVIFBMTCBTUwotCQkgKiBldmVuIGlmIFNTIG5vdCBlbmFi bGVkIGFuZCBpbiB0aGF0IGNhc2UKLQkJICogU1NJbmZvLnNwcmVhZFNwZWN0cnVtUGVyY2VudGFn ZSAhPTAgd291bGQgYmUgc2lnbgotCQkgKiB0aGF0IFNTIGlzIGVuYWJsZWQKLQkJICovCi0JCWlm IChyZXN1bHQgPT0gQlBfUkVTVUxUX09LICYmCi0JCQkJaW5mby5zcHJlYWRfc3BlY3RydW1fcGVy Y2VudGFnZSAhPSAwKSB7Ci0JCQljbGtfbWdyX2RjZS0+c3Nfb25fZHByZWZjbGsgPSB0cnVlOwot CQkJY2xrX21ncl9kY2UtPmRwcmVmY2xrX3NzX2RpdmlkZXIgPSBpbmZvLnNwcmVhZF9wZXJjZW50 YWdlX2RpdmlkZXI7Ci0KLQkJCWlmIChpbmZvLnR5cGUuQ0VOVEVSX01PREUgPT0gMCkgewotCQkJ CS8qIFRPRE86IEN1cnJlbnRseSBmb3IgRFAgUmVmZXJlbmNlIGNsb2NrIHdlCi0JCQkJICogbmVl ZCBvbmx5IFNTIHBlcmNlbnRhZ2UgZm9yCi0JCQkJICogZG93bnNwcmVhZCAqLwotCQkJCWNsa19t Z3JfZGNlLT5kcHJlZmNsa19zc19wZXJjZW50YWdlID0KLQkJCQkJCWluZm8uc3ByZWFkX3NwZWN0 cnVtX3BlcmNlbnRhZ2U7Ci0JCQl9Ci0KLQkJCXJldHVybjsKLQkJfQotCi0JCXJlc3VsdCA9IGJw LT5mdW5jcy0+Z2V0X3NwcmVhZF9zcGVjdHJ1bV9pbmZvKAotCQkJCWJwLCBBU19TSUdOQUxfVFlQ RV9ESVNQTEFZX1BPUlQsIDAsICZpbmZvKTsKLQotCQkvKiBCYXNlZCBvbiBWQklPUywgVkJJT1Mg d2lsbCBrZWVwIGVudHJ5IGZvciBEUFJFRkNMSyBTUwotCQkgKiBldmVuIGlmIFNTIG5vdCBlbmFi bGVkIGFuZCBpbiB0aGF0IGNhc2UKLQkJICogU1NJbmZvLnNwcmVhZFNwZWN0cnVtUGVyY2VudGFn ZSAhPTAgd291bGQgYmUgc2lnbgotCQkgKiB0aGF0IFNTIGlzIGVuYWJsZWQKLQkJICovCi0JCWlm IChyZXN1bHQgPT0gQlBfUkVTVUxUX09LICYmCi0JCQkJaW5mby5zcHJlYWRfc3BlY3RydW1fcGVy Y2VudGFnZSAhPSAwKSB7Ci0JCQljbGtfbWdyX2RjZS0+c3Nfb25fZHByZWZjbGsgPSB0cnVlOwot CQkJY2xrX21ncl9kY2UtPmRwcmVmY2xrX3NzX2RpdmlkZXIgPSBpbmZvLnNwcmVhZF9wZXJjZW50 YWdlX2RpdmlkZXI7Ci0KLQkJCWlmIChpbmZvLnR5cGUuQ0VOVEVSX01PREUgPT0gMCkgewotCQkJ CS8qIEN1cnJlbnRseSBmb3IgRFAgUmVmZXJlbmNlIGNsb2NrIHdlCi0JCQkJICogbmVlZCBvbmx5 IFNTIHBlcmNlbnRhZ2UgZm9yCi0JCQkJICogZG93bnNwcmVhZCAqLwotCQkJCWNsa19tZ3JfZGNl LT5kcHJlZmNsa19zc19wZXJjZW50YWdlID0KLQkJCQkJCWluZm8uc3ByZWFkX3NwZWN0cnVtX3Bl cmNlbnRhZ2U7Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGRjZV9wcGxpYl9hcHBs eV9kaXNwbGF5X3JlcXVpcmVtZW50cygKLQlzdHJ1Y3QgZGMgKmRjLAotCXN0cnVjdCBkY19zdGF0 ZSAqY29udGV4dCkKLXsKLQlzdHJ1Y3QgZG1fcHBfZGlzcGxheV9jb25maWd1cmF0aW9uICpwcF9k aXNwbGF5X2NmZyA9ICZjb250ZXh0LT5wcF9kaXNwbGF5X2NmZzsKLQotCXBwX2Rpc3BsYXlfY2Zn LT5hdmFpbF9tY2xrX3N3aXRjaF90aW1lX3VzID0gZGNlMTEwX2dldF9taW5fdmJsYW5rX3RpbWVf dXMoY29udGV4dCk7Ci0KLQlkY2UxMTBfZmlsbF9kaXNwbGF5X2NvbmZpZ3MoY29udGV4dCwgcHBf ZGlzcGxheV9jZmcpOwotCi0JaWYgKG1lbWNtcCgmZGMtPmN1cnJlbnRfc3RhdGUtPnBwX2Rpc3Bs YXlfY2ZnLCBwcF9kaXNwbGF5X2NmZywgc2l6ZW9mKCpwcF9kaXNwbGF5X2NmZykpICE9ICAwKQot CQlkbV9wcF9hcHBseV9kaXNwbGF5X3JlcXVpcmVtZW50cyhkYy0+Y3R4LCBwcF9kaXNwbGF5X2Nm Zyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRjZV91cGRhdGVfY2xvY2tzKHN0cnVjdCBjbGtfbWdyICpj bGtfbWdyX2Jhc2UsCi0JCQlzdHJ1Y3QgZGNfc3RhdGUgKmNvbnRleHQsCi0JCQlib29sIHNhZmVf dG9fbG93ZXIpCi17Ci0Jc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3JfZGNlID0gVE9f Q0xLX01HUl9JTlRFUk5BTChjbGtfbWdyX2Jhc2UpOwotCXN0cnVjdCBkbV9wcF9wb3dlcl9sZXZl bF9jaGFuZ2VfcmVxdWVzdCBsZXZlbF9jaGFuZ2VfcmVxOwotCWludCBwYXRjaGVkX2Rpc3BfY2xr ID0gY29udGV4dC0+YndfY3R4LmJ3LmRjZS5kaXNwY2xrX2toejsKLQotCS8qVE9ETzogVy9BIGZv ciBkYWwzIGxpbnV4LCBpbnZlc3RpZ2F0ZSB3aHkgdGhpcyB3b3JrcyAqLwotCWlmICghY2xrX21n cl9kY2UtPmRmc19ieXBhc3NfYWN0aXZlKQotCQlwYXRjaGVkX2Rpc3BfY2xrID0gcGF0Y2hlZF9k aXNwX2NsayAqIDExNSAvIDEwMDsKLQotCWxldmVsX2NoYW5nZV9yZXEucG93ZXJfbGV2ZWwgPSBk Y2VfZ2V0X3JlcXVpcmVkX2Nsb2Nrc19zdGF0ZShjbGtfbWdyX2Jhc2UsIGNvbnRleHQpOwotCS8q IGdldCBtYXggY2xvY2sgc3RhdGUgZnJvbSBQUExJQiAqLwotCWlmICgobGV2ZWxfY2hhbmdlX3Jl cS5wb3dlcl9sZXZlbCA8IGNsa19tZ3JfZGNlLT5jdXJfbWluX2Nsa3Nfc3RhdGUgJiYgc2FmZV90 b19sb3dlcikKLQkJCXx8IGxldmVsX2NoYW5nZV9yZXEucG93ZXJfbGV2ZWwgPiBjbGtfbWdyX2Rj ZS0+Y3VyX21pbl9jbGtzX3N0YXRlKSB7Ci0JCWlmIChkbV9wcF9hcHBseV9wb3dlcl9sZXZlbF9j aGFuZ2VfcmVxdWVzdChjbGtfbWdyX2Jhc2UtPmN0eCwgJmxldmVsX2NoYW5nZV9yZXEpKQotCQkJ Y2xrX21ncl9kY2UtPmN1cl9taW5fY2xrc19zdGF0ZSA9IGxldmVsX2NoYW5nZV9yZXEucG93ZXJf bGV2ZWw7Ci0JfQotCi0JaWYgKHNob3VsZF9zZXRfY2xvY2soc2FmZV90b19sb3dlciwgcGF0Y2hl ZF9kaXNwX2NsaywgY2xrX21ncl9iYXNlLT5jbGtzLmRpc3BjbGtfa2h6KSkgewotCQlwYXRjaGVk X2Rpc3BfY2xrID0gZGNlX3NldF9jbG9jayhjbGtfbWdyX2Jhc2UsIHBhdGNoZWRfZGlzcF9jbGsp OwotCQljbGtfbWdyX2Jhc2UtPmNsa3MuZGlzcGNsa19raHogPSBwYXRjaGVkX2Rpc3BfY2xrOwot CX0KLQlkY2VfcHBsaWJfYXBwbHlfZGlzcGxheV9yZXF1aXJlbWVudHMoY2xrX21ncl9iYXNlLT5j dHgtPmRjLCBjb250ZXh0KTsKLX0KLQotCi1zdGF0aWMgc3RydWN0IGNsa19tZ3JfZnVuY3MgZGNl X2Z1bmNzID0gewotCS5nZXRfZHBfcmVmX2Nsa19mcmVxdWVuY3kgPSBkY2VfZ2V0X2RwX3JlZl9m cmVxX2toeiwKLQkudXBkYXRlX2Nsb2NrcyA9IGRjZV91cGRhdGVfY2xvY2tzCi19OwotCi12b2lk IGRjZV9jbGtfbWdyX2NvbnN0cnVjdCgKLQkJc3RydWN0IGRjX2NvbnRleHQgKmN0eCwKLQkJc3Ry dWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3IpCi17Ci0Jc3RydWN0IGNsa19tZ3IgKmJhc2Ug PSAmY2xrX21nci0+YmFzZTsKLQlzdHJ1Y3QgZG1fcHBfc3RhdGljX2Nsb2NrX2luZm8gc3RhdGlj X2Nsa19pbmZvID0gezB9OwotCi0JbWVtY3B5KGNsa19tZ3ItPm1heF9jbGtzX2J5X3N0YXRlLAot CQlkY2U4MF9tYXhfY2xrc19ieV9zdGF0ZSwKLQkJc2l6ZW9mKGRjZTgwX21heF9jbGtzX2J5X3N0 YXRlKSk7Ci0KLQliYXNlLT5jdHggPSBjdHg7Ci0JYmFzZS0+ZnVuY3MgPSAmZGNlX2Z1bmNzOwot Ci0JY2xrX21nci0+cmVncyA9ICZkaXNwX2Nsa19yZWdzOwotCWNsa19tZ3ItPmNsa19tZ3Jfc2hp ZnQgPSAmZGlzcF9jbGtfc2hpZnQ7Ci0JY2xrX21nci0+Y2xrX21ncl9tYXNrID0gJmRpc3BfY2xr X21hc2s7Ci0JY2xrX21nci0+ZGZzX2J5cGFzc19kaXNwX2NsayA9IDA7Ci0KLQljbGtfbWdyLT5k cHJlZmNsa19zc19wZXJjZW50YWdlID0gMDsKLQljbGtfbWdyLT5kcHJlZmNsa19zc19kaXZpZGVy ID0gMTAwMDsKLQljbGtfbWdyLT5zc19vbl9kcHJlZmNsayA9IGZhbHNlOwotCi0JaWYgKGRtX3Bw X2dldF9zdGF0aWNfY2xvY2tzKGN0eCwgJnN0YXRpY19jbGtfaW5mbykpCi0JCWNsa19tZ3ItPm1h eF9jbGtzX3N0YXRlID0gc3RhdGljX2Nsa19pbmZvLm1heF9jbG9ja3Nfc3RhdGU7Ci0JZWxzZQot CQljbGtfbWdyLT5tYXhfY2xrc19zdGF0ZSA9IERNX1BQX0NMT0NLU19TVEFURV9OT01JTkFMOwot CWNsa19tZ3ItPmN1cl9taW5fY2xrc19zdGF0ZSA9IERNX1BQX0NMT0NLU19TVEFURV9JTlZBTElE OwotCi0JZGNlX2Nsb2NrX3JlYWRfaW50ZWdyYXRlZF9pbmZvKGNsa19tZ3IpOwotCWRjZV9jbG9j a19yZWFkX3NzX2luZm8oY2xrX21ncik7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2Rpc3BsYXkvZGMvZGNlL2RjZV9jbGtfbWdyLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rp c3BsYXkvZGMvZGNlL2RjZV9jbGtfbWdyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IGYzYmM3YWIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Rj ZS9kY2VfY2xrX21nci5oCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoKLSAqIENv cHlyaWdodCAyMDEyLTE2IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KLSAqCi0gKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNo YWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9S IEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgotICogT1RIRVIg TElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsCi0gKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKLSAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FS RS4KLSAqCi0gKiBBdXRob3JzOiBBTUQKLSAqCi0gKi8KLQotCi0jaWZuZGVmIF9EQ0VfQ0xLX01H Ul9IXwotI2RlZmluZSBfRENFX0NMS19NR1JfSF8KLQotI2luY2x1ZGUgImRjLmgiCi0KLS8qIFN0 YXJ0aW5nIERJRCBmb3IgZWFjaCByYW5nZSAqLwotZW51bSBkZW50aXN0X2Jhc2VfZGl2aWRlcl9p ZCB7Ci0JREVOVElTVF9CQVNFX0RJRF8xID0gMHgwOCwKLQlERU5USVNUX0JBU0VfRElEXzIgPSAw eDQwLAotCURFTlRJU1RfQkFTRV9ESURfMyA9IDB4NjAsCi0JREVOVElTVF9CQVNFX0RJRF80ID0g MHg3ZSwKLQlERU5USVNUX01BWF9ESUQgPSAweDdmCi19OwotCi0vKiBTdGFydGluZyBwb2ludCBh bmQgc3RlcCBzaXplIGZvciBlYWNoIGRpdmlkZXIgcmFuZ2UuKi8KLWVudW0gZGVudGlzdF9kaXZp ZGVyX3JhbmdlIHsKLQlERU5USVNUX0RJVklERVJfUkFOR0VfMV9TVEFSVCA9IDgsICAgLyogMi4w MCAgKi8KLQlERU5USVNUX0RJVklERVJfUkFOR0VfMV9TVEVQICA9IDEsICAgLyogMC4yNSAgKi8K LQlERU5USVNUX0RJVklERVJfUkFOR0VfMl9TVEFSVCA9IDY0LCAgLyogMTYuMDAgKi8KLQlERU5U SVNUX0RJVklERVJfUkFOR0VfMl9TVEVQICA9IDIsICAgLyogMC41MCAgKi8KLQlERU5USVNUX0RJ VklERVJfUkFOR0VfM19TVEFSVCA9IDEyOCwgLyogMzIuMDAgKi8KLQlERU5USVNUX0RJVklERVJf UkFOR0VfM19TVEVQICA9IDQsICAgLyogMS4wMCAgKi8KLQlERU5USVNUX0RJVklERVJfUkFOR0Vf NF9TVEFSVCA9IDI0OCwgLyogNjIuMDAgKi8KLQlERU5USVNUX0RJVklERVJfUkFOR0VfNF9TVEVQ ICA9IDI2NCwgLyogNjYuMDAgKi8KLQlERU5USVNUX0RJVklERVJfUkFOR0VfU0NBTEVfRkFDVE9S ID0gNAotfTsKLQotLyogZnVuY3Rpb25zIHNoYXJlZCBieSBvdGhlciBkY2UgY2xrIG1ncnMgKi8K LWludCBkY2VfYWRqdXN0X2RwX3JlZl9mcmVxX2Zvcl9zcyhzdHJ1Y3QgY2xrX21ncl9pbnRlcm5h bCAqY2xrX21ncl9kY2UsIGludCBkcF9yZWZfY2xrX2toeik7Ci1pbnQgZGNlX2dldF9kcF9yZWZf ZnJlcV9raHooc3RydWN0IGNsa19tZ3IgKmNsa19tZ3JfYmFzZSk7Ci1lbnVtIGRtX3BwX2Nsb2Nr c19zdGF0ZSBkY2VfZ2V0X3JlcXVpcmVkX2Nsb2Nrc19zdGF0ZSgKLQlzdHJ1Y3QgY2xrX21nciAq Y2xrX21ncl9iYXNlLAotCXN0cnVjdCBkY19zdGF0ZSAqY29udGV4dCk7Ci0KLXVpbnQzMl90IGRj ZV9nZXRfbWF4X3BpeGVsX2Nsb2NrX2Zvcl9hbGxfcGF0aHMoc3RydWN0IGRjX3N0YXRlICpjb250 ZXh0KTsKLQotCi12b2lkIGRjZV9jbGtfbWdyX2NvbnN0cnVjdCgKLQkJc3RydWN0IGRjX2NvbnRl eHQgKmN0eCwKLQkJc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3JfZGNlKTsKLQotdm9p ZCBkY2VfY2xvY2tfcmVhZF9zc19pbmZvKHN0cnVjdCBjbGtfbWdyX2ludGVybmFsICpkY2NnX2Rj ZSk7Ci0KLWludCBkY2UxMl9nZXRfZHBfcmVmX2ZyZXFfa2h6KHN0cnVjdCBjbGtfbWdyICpkY2Nn KTsKLQotaW50IGRjZV9zZXRfY2xvY2soCi0Jc3RydWN0IGNsa19tZ3IgKmNsa19tZ3JfYmFzZSwK LQlpbnQgcmVxdWVzdGVkX2Nsa19raHopOwotCi0KLXZvaWQgZGNlX2Nsa19tZ3JfZGVzdHJveShz dHJ1Y3QgY2xrX21nciAqKmNsa19tZ3IpOwotCi1pbnQgZGVudGlzdF9nZXRfZGl2aWRlcl9mcm9t X2RpZChpbnQgZGlkKTsKLQotI2VuZGlmIC8qIF9EQ0VfQ0xLX01HUl9IXyAqLwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjbjEwL01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjbjEwL01ha2VmaWxlCmluZGV4IDNjMTIxY2UuLjAz MmY4NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY24xMC9N YWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNuMTAvTWFrZWZp bGUKQEAgLTI1LDcgKzI1LDYgQEAKIERDTjEwID0gZGNuMTBfcmVzb3VyY2UubyBkY24xMF9pcHAu byBkY24xMF9od19zZXF1ZW5jZXIubyBkY24xMF9od19zZXF1ZW5jZXJfZGVidWcubyBcCiAJCWRj bjEwX2RwcC5vIGRjbjEwX29wcC5vIGRjbjEwX29wdGMubyBcCiAJCWRjbjEwX2h1YnAubyBkY24x MF9tcGMubyBcCi0JCWNsa19tZ3IubyBydjFfY2xrX21nci5vIHJ2MV9jbGtfbWdyX3ZiaW9zX3Nt dS5vIHJ2Ml9jbGtfbWdyLm9cCiAJCWRjbjEwX2RwcF9kc2NsLm8gZGNuMTBfZHBwX2NtLm8gZGNu MTBfY21fY29tbW9uLm8gXAogCQlkY24xMF9odWJidWIubyBkY24xMF9zdHJlYW1fZW5jb2Rlci5v IGRjbjEwX2xpbmtfZW5jb2Rlci5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv ZGlzcGxheS9kYy9kY24xMC9jbGtfbWdyLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkv ZGMvZGNuMTAvY2xrX21nci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTZiZDcx Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY24xMC9jbGtf bWdyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAy MDEyLTE2IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KLSAqCi0gKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBl cm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGlu Y2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBT b2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0g KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihT KSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgotICogT1RIRVIgTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0g KiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IKLSAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0g KiBBdXRob3JzOiBBTUQKLSAqCi0gKi8KLQotI2luY2x1ZGUgImRhbF9hc2ljX2lkLmgiCi0jaW5j bHVkZSAiZGNfdHlwZXMuaCIKLSNpbmNsdWRlICJkY2NnLmgiCi0jaW5jbHVkZSAiY2xrX21ncl9p bnRlcm5hbC5oIgotCi0jaW5jbHVkZSAiZGNlL2RjZV9jbGtfbWdyLmgiCi0jaW5jbHVkZSAiZGNl L2RjZTExMF9jbGtfbWdyLmgiCi0jaW5jbHVkZSAiZGNlL2RjZTExMl9jbGtfbWdyLmgiCi0jaW5j bHVkZSAiZGNlL2RjZTEyMF9jbGtfbWdyLmgiCi0jaW5jbHVkZSAicnYxX2Nsa19tZ3IuaCIKLSNp bmNsdWRlICJydjJfY2xrX21nci5oIgotCi1zdHJ1Y3QgY2xrX21nciAqZGNfY2xrX21ncl9jcmVh dGUoc3RydWN0IGRjX2NvbnRleHQgKmN0eCwgc3RydWN0IHBwX3NtdV9mdW5jcyAqcHBfc211LCBz dHJ1Y3QgZGNjZyAqZGNjZykKLXsKLQlzdHJ1Y3QgaHdfYXNpY19pZCBhc2ljX2lkID0gY3R4LT5h c2ljX2lkOwotCi0Jc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3IgPSBremFsbG9jKHNp emVvZigqY2xrX21nciksIEdGUF9LRVJORUwpOwotCi0JaWYgKGNsa19tZ3IgPT0gTlVMTCkgewot CQlCUkVBS19UT19ERUJVR0dFUigpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlzd2l0Y2ggKGFz aWNfaWQuY2hpcF9mYW1pbHkpIHsKLQljYXNlIEZBTUlMWV9DSToKLQljYXNlIEZBTUlMWV9LVjoK LQkJZGNlX2Nsa19tZ3JfY29uc3RydWN0KGN0eCwgY2xrX21ncik7Ci0JCWJyZWFrOwotCWNhc2Ug RkFNSUxZX0NaOgotCQlkY2UxMTBfY2xrX21ncl9jb25zdHJ1Y3QoY3R4LCBjbGtfbWdyKTsKLQkJ YnJlYWs7Ci0JY2FzZSBGQU1JTFlfVkk6Ci0JCWlmIChBU0lDX1JFVl9JU19UT05HQV9QKGFzaWNf aWQuaHdfaW50ZXJuYWxfcmV2KSB8fAotCQkJCUFTSUNfUkVWX0lTX0ZJSklfUChhc2ljX2lkLmh3 X2ludGVybmFsX3JldikpIHsKLQkJCWRjZV9jbGtfbWdyX2NvbnN0cnVjdChjdHgsIGNsa19tZ3Ip OwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKEFTSUNfUkVWX0lTX1BPTEFSSVMxMF9QKGFzaWNfaWQu aHdfaW50ZXJuYWxfcmV2KSB8fAotCQkJCUFTSUNfUkVWX0lTX1BPTEFSSVMxMV9NKGFzaWNfaWQu aHdfaW50ZXJuYWxfcmV2KSB8fAotCQkJCUFTSUNfUkVWX0lTX1BPTEFSSVMxMl9WKGFzaWNfaWQu aHdfaW50ZXJuYWxfcmV2KSkgewotCQkJZGNlMTEyX2Nsa19tZ3JfY29uc3RydWN0KGN0eCwgY2xr X21ncik7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoQVNJQ19SRVZfSVNfVkVHQU0oYXNpY19pZC5o d19pbnRlcm5hbF9yZXYpKSB7Ci0JCQlkY2UxMTJfY2xrX21ncl9jb25zdHJ1Y3QoY3R4LCBjbGtf bWdyKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgRkFNSUxZX0FJOgotCQlpZiAo QVNJQ1JFVl9JU19WRUdBMjBfUChhc2ljX2lkLmh3X2ludGVybmFsX3JldikpCi0JCQlkY2UxMjFf Y2xrX21ncl9jb25zdHJ1Y3QoY3R4LCBjbGtfbWdyKTsKLQkJZWxzZQotCQkJZGNlMTIwX2Nsa19t Z3JfY29uc3RydWN0KGN0eCwgY2xrX21ncik7Ci0JCWJyZWFrOwotCi0jaWYgZGVmaW5lZChDT05G SUdfRFJNX0FNRF9EQ19EQ04xXzApCi0JY2FzZSBGQU1JTFlfUlY6Ci0KLSNpZiBkZWZpbmVkKENP TkZJR19EUk1fQU1EX0RDX0RDTjFfMDEpCi0JCWlmIChBU0lDUkVWX0lTX1JBVkVOMihhc2ljX2lk Lmh3X2ludGVybmFsX3JldikpIHsKLQkJCXJ2Ml9jbGtfbWdyX2NvbnN0cnVjdChjdHgsIGNsa19t Z3IsIHBwX3NtdSk7Ci0JCQlicmVhazsKLQkJfQotI2VuZGlmCS8qIERDTjFfMDEgKi8KLQotCQlp ZiAoQVNJQ1JFVl9JU19SQVZFTihhc2ljX2lkLmh3X2ludGVybmFsX3JldikgfHwKLQkJCQlBU0lD UkVWX0lTX1BJQ0FTU08oYXNpY19pZC5od19pbnRlcm5hbF9yZXYpKSB7Ci0JCQlydjFfY2xrX21n cl9jb25zdHJ1Y3QoY3R4LCBjbGtfbWdyLCBwcF9zbXUpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJl YWs7Ci0jZW5kaWYJLyogRmFtaWx5IFJWICovCi0KLQlkZWZhdWx0OgotCQlBU1NFUlQoMCk7IC8q IFVua25vd24gQXNpYyAqLwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gJmNsa19tZ3ItPmJhc2U7 Ci19Ci0KLXZvaWQgZGNfZGVzdHJveV9jbGtfbWdyKHN0cnVjdCBjbGtfbWdyICpjbGtfbWdyX2Jh c2UpCi17Ci0Jc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3IgPSBUT19DTEtfTUdSX0lO VEVSTkFMKGNsa19tZ3JfYmFzZSk7Ci0KLQlrZnJlZShjbGtfbWdyKTsKLX0KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY24xMC9ydjFfY2xrX21nci5jIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjbjEwL3J2MV9jbGtfbWdyLmMKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMjU2YTIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9kaXNwbGF5L2RjL2RjbjEwL3J2MV9jbGtfbWdyLmMKKysrIC9kZXYvbnVsbApAQCAt MSwyODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IEFkdmFuY2VkIE1pY3JvIERldmlj ZXMsIEluYy4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0g KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQ UkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBD T1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUgotICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0gKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKLSAqIE9USEVSIERF QUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBdXRob3JzOiBBTUQKLSAqCi0gKi8KLQot I2luY2x1ZGUgImNvcmVfdHlwZXMuaCIKLSNpbmNsdWRlICJjbGtfbWdyX2ludGVybmFsLmgiCi0j aW5jbHVkZSAicnYxX2Nsa19tZ3IuaCIKLSNpbmNsdWRlICJkY2UvZGNlX2Nsa19tZ3IuaCIKLSNp bmNsdWRlICJkY2UvZGNlMTEyX2Nsa19tZ3IuaCIKLSNpbmNsdWRlICJydjFfY2xrX21ncl92Ymlv c19zbXUuaCIKLSNpbmNsdWRlICJydjFfY2xrX21ncl9jbGsuaCIKLQotc3RhdGljIGludCBydjFf ZGV0ZXJtaW5lX2RwcGNsa190aHJlc2hvbGQoc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19t Z3IsIHN0cnVjdCBkY19jbG9ja3MgKm5ld19jbG9ja3MpCi17Ci0JYm9vbCByZXF1ZXN0X2RwcF9k aXYgPSBuZXdfY2xvY2tzLT5kaXNwY2xrX2toeiA+IG5ld19jbG9ja3MtPmRwcGNsa19raHo7Ci0J Ym9vbCBkaXNwY2xrX2luY3JlYXNlID0gbmV3X2Nsb2Nrcy0+ZGlzcGNsa19raHogPiBjbGtfbWdy LT5iYXNlLmNsa3MuZGlzcGNsa19raHo7Ci0JaW50IGRpc3BfY2xrX3RocmVzaG9sZCA9IG5ld19j bG9ja3MtPm1heF9zdXBwb3J0ZWRfZHBwY2xrX2toejsKLQlib29sIGN1cl9kcHBfZGl2ID0gY2xr X21nci0+YmFzZS5jbGtzLmRpc3BjbGtfa2h6ID4gY2xrX21nci0+YmFzZS5jbGtzLmRwcGNsa19r aHo7Ci0KLQkvKiBpbmNyZWFzZSBjbG9jaywgbG9va2luZyBmb3IgZGl2IGlzIDAgZm9yIGN1cnJl bnQsIHJlcXVlc3QgZGl2IGlzIDEqLwotCWlmIChkaXNwY2xrX2luY3JlYXNlKSB7Ci0JCS8qIGFs cmVhZHkgZGl2aWRlZCBieSAyLCBubyBuZWVkIHRvIHJlYWNoIHRhcmdldCBjbGsgd2l0aCAyIHN0 ZXBzKi8KLQkJaWYgKGN1cl9kcHBfZGl2KQotCQkJcmV0dXJuIG5ld19jbG9ja3MtPmRpc3BjbGtf a2h6OwotCi0JCS8qIHJlcXVlc3QgZGlzcCBjbGsgaXMgbG93ZXIgdGhhbiBtYXhpbXVtIHN1cHBv cnRlZCBkcHAgY2xrLAotCQkgKiBubyBuZWVkIHRvIHJlYWNoIHRhcmdldCBjbGsgd2l0aCB0d28g c3RlcHMuCi0JCSAqLwotCQlpZiAobmV3X2Nsb2Nrcy0+ZGlzcGNsa19raHogPD0gZGlzcF9jbGtf dGhyZXNob2xkKQotCQkJcmV0dXJuIG5ld19jbG9ja3MtPmRpc3BjbGtfa2h6OwotCi0JCS8qIHRh cmdldCBkcHAgY2xrIG5vdCByZXF1ZXN0IGRpdmlkZWQgYnkgMiwgc3RpbGwgd2l0aGluIHRocmVz aG9sZCAqLwotCQlpZiAoIXJlcXVlc3RfZHBwX2RpdikKLQkJCXJldHVybiBuZXdfY2xvY2tzLT5k aXNwY2xrX2toejsKLQotCX0gZWxzZSB7Ci0JCS8qIGRlY3JlYXNlIGNsb2NrLCBsb29raW5nIGZv ciBjdXJyZW50IGRwcGNsayBkaXZpZGVkIGJ5IDIsCi0JCSAqIHJlcXVlc3QgZHBwY2xrIG5vdCBk aXZpZGVkIGJ5IDIuCi0JCSAqLwotCi0JCS8qIGN1cnJlbnQgZHBwIGNsayBub3QgZGl2aWRlZCBi eSAyLCBubyBuZWVkIHRvIHJhbXAqLwotCQlpZiAoIWN1cl9kcHBfZGl2KQotCQkJcmV0dXJuIG5l d19jbG9ja3MtPmRpc3BjbGtfa2h6OwotCi0JCS8qIGN1cnJlbnQgZGlzcCBjbGsgaXMgbG93ZXIg dGhhbiBjdXJyZW50IG1heGltdW0gZHBwIGNsaywKLQkJICogbm8gbmVlZCB0byByYW1wCi0JCSAq LwotCQlpZiAoY2xrX21nci0+YmFzZS5jbGtzLmRpc3BjbGtfa2h6IDw9IGRpc3BfY2xrX3RocmVz aG9sZCkKLQkJCXJldHVybiBuZXdfY2xvY2tzLT5kaXNwY2xrX2toejsKLQotCQkvKiByZXF1ZXN0 IGRwcCBjbGsgbmVlZCB0byBiZSBkaXZpZGVkIGJ5IDIgKi8KLQkJaWYgKHJlcXVlc3RfZHBwX2Rp dikKLQkJCXJldHVybiBuZXdfY2xvY2tzLT5kaXNwY2xrX2toejsKLQl9Ci0KLQlyZXR1cm4gZGlz cF9jbGtfdGhyZXNob2xkOwotfQotCi1zdGF0aWMgdm9pZCByYW1wX3VwX2Rpc3BjbGtfd2l0aF9k cHAoc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3IsIHN0cnVjdCBkYyAqZGMsIHN0cnVj dCBkY19jbG9ja3MgKm5ld19jbG9ja3MpCi17Ci0JaW50IGk7Ci0JaW50IGRpc3BjbGtfdG9fZHBw X3RocmVzaG9sZCA9IHJ2MV9kZXRlcm1pbmVfZHBwY2xrX3RocmVzaG9sZChjbGtfbWdyLCBuZXdf Y2xvY2tzKTsKLQlib29sIHJlcXVlc3RfZHBwX2RpdiA9IG5ld19jbG9ja3MtPmRpc3BjbGtfa2h6 ID4gbmV3X2Nsb2Nrcy0+ZHBwY2xrX2toejsKLQotCS8qIHNldCBkaXNwIGNsayB0byBkcHAgY2xr IHRocmVzaG9sZCAqLwotCi0JY2xrX21nci0+ZnVuY3MtPnNldF9kaXNwY2xrKGNsa19tZ3IsIGRp c3BjbGtfdG9fZHBwX3RocmVzaG9sZCk7Ci0JY2xrX21nci0+ZnVuY3MtPnNldF9kcHJlZmNsayhj bGtfbWdyKTsKLQotCi0JLyogdXBkYXRlIHJlcXVlc3QgZHBwIGNsayBkaXZpc2lvbiBvcHRpb24g Ki8KLQlmb3IgKGkgPSAwOyBpIDwgZGMtPnJlc19wb29sLT5waXBlX2NvdW50OyBpKyspIHsKLQkJ c3RydWN0IHBpcGVfY3R4ICpwaXBlX2N0eCA9ICZkYy0+Y3VycmVudF9zdGF0ZS0+cmVzX2N0eC5w aXBlX2N0eFtpXTsKLQotCQlpZiAoIXBpcGVfY3R4LT5wbGFuZV9zdGF0ZSkKLQkJCWNvbnRpbnVl OwotCi0JCXBpcGVfY3R4LT5wbGFuZV9yZXMuZHBwLT5mdW5jcy0+ZHBwX2RwcGNsa19jb250cm9s KAotCQkJCXBpcGVfY3R4LT5wbGFuZV9yZXMuZHBwLAotCQkJCXJlcXVlc3RfZHBwX2RpdiwKLQkJ CQl0cnVlKTsKLQl9Ci0KLQkvKiBJZiB0YXJnZXQgY2xrIG5vdCBzYW1lIGFzIGRwcGNsayB0aHJl c2hvbGQsIHNldCB0byB0YXJnZXQgY2xvY2sgKi8KLQlpZiAoZGlzcGNsa190b19kcHBfdGhyZXNo b2xkICE9IG5ld19jbG9ja3MtPmRpc3BjbGtfa2h6KSB7Ci0JCWNsa19tZ3ItPmZ1bmNzLT5zZXRf ZGlzcGNsayhjbGtfbWdyLCBuZXdfY2xvY2tzLT5kaXNwY2xrX2toeik7Ci0JCWNsa19tZ3ItPmZ1 bmNzLT5zZXRfZHByZWZjbGsoY2xrX21ncik7Ci0JfQotCi0KLQljbGtfbWdyLT5iYXNlLmNsa3Mu ZGlzcGNsa19raHogPSBuZXdfY2xvY2tzLT5kaXNwY2xrX2toejsKLQljbGtfbWdyLT5iYXNlLmNs a3MuZHBwY2xrX2toeiA9IG5ld19jbG9ja3MtPmRwcGNsa19raHo7Ci0JY2xrX21nci0+YmFzZS5j bGtzLm1heF9zdXBwb3J0ZWRfZHBwY2xrX2toeiA9IG5ld19jbG9ja3MtPm1heF9zdXBwb3J0ZWRf ZHBwY2xrX2toejsKLX0KLQotc3RhdGljIGludCBnZXRfYWN0aXZlX2Rpc3BsYXlfY250KAotCQlz dHJ1Y3QgZGMgKmRjLAotCQlzdHJ1Y3QgZGNfc3RhdGUgKmNvbnRleHQpCi17Ci0JaW50IGksIGRp c3BsYXlfY291bnQ7Ci0KLQlkaXNwbGF5X2NvdW50ID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgY29u dGV4dC0+c3RyZWFtX2NvdW50OyBpKyspIHsKLQkJY29uc3Qgc3RydWN0IGRjX3N0cmVhbV9zdGF0 ZSAqc3RyZWFtID0gY29udGV4dC0+c3RyZWFtc1tpXTsKLQotCQkvKgotCQkgKiBPbmx5IG5vdGlm eSBhY3RpdmUgc3RyZWFtIG9yIHZpcnR1YWwgc3RyZWFtLgotCQkgKiBOZWVkIHRvIG5vdGlmeSB2 aXJ0dWFsIHN0cmVhbSB0byB3b3JrIGFyb3VuZAotCQkgKiBoZWFkbGVzcyBjYXNlLiBIUEQgZG9l cyBub3QgZmlyZSB3aGVuIHN5c3RlbSBpcyBpbgotCQkgKiBTMGkyLgotCQkgKi8KLQkJaWYgKCFz dHJlYW0tPmRwbXNfb2ZmIHx8IHN0cmVhbS0+c2lnbmFsID09IFNJR05BTF9UWVBFX1ZJUlRVQUwp Ci0JCQlkaXNwbGF5X2NvdW50Kys7Ci0JfQotCi0JcmV0dXJuIGRpc3BsYXlfY291bnQ7Ci19Ci0K LXN0YXRpYyB2b2lkIHJ2MV91cGRhdGVfY2xvY2tzKHN0cnVjdCBjbGtfbWdyICpjbGtfbWdyX2Jh c2UsCi0JCQlzdHJ1Y3QgZGNfc3RhdGUgKmNvbnRleHQsCi0JCQlib29sIHNhZmVfdG9fbG93ZXIp Ci17Ci0Jc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3IgPSBUT19DTEtfTUdSX0lOVEVS TkFMKGNsa19tZ3JfYmFzZSk7Ci0Jc3RydWN0IGRjICpkYyA9IGNsa19tZ3JfYmFzZS0+Y3R4LT5k YzsKLQlzdHJ1Y3QgZGNfZGVidWdfb3B0aW9ucyAqZGVidWcgPSAmZGMtPmRlYnVnOwotCXN0cnVj dCBkY19jbG9ja3MgKm5ld19jbG9ja3MgPSAmY29udGV4dC0+YndfY3R4LmJ3LmRjbi5jbGs7Ci0J c3RydWN0IHBwX3NtdV9mdW5jc19ydiAqcHBfc211ID0gTlVMTDsKLQlib29sIHNlbmRfcmVxdWVz dF90b19pbmNyZWFzZSA9IGZhbHNlOwotCWJvb2wgc2VuZF9yZXF1ZXN0X3RvX2xvd2VyID0gZmFs c2U7Ci0JaW50IGRpc3BsYXlfY291bnQ7Ci0KLQlib29sIGVudGVyX2Rpc3BsYXlfb2ZmID0gZmFs c2U7Ci0KLQlBU1NFUlQoY2xrX21nci0+cHBfc211KTsKLQotCXBwX3NtdSA9ICZjbGtfbWdyLT5w cF9zbXUtPnJ2X2Z1bmNzOwotCi0JZGlzcGxheV9jb3VudCA9IGdldF9hY3RpdmVfZGlzcGxheV9j bnQoZGMsIGNvbnRleHQpOwotCi0JaWYgKGRpc3BsYXlfY291bnQgPT0gMCkKLQkJZW50ZXJfZGlz cGxheV9vZmYgPSB0cnVlOwotCi0JaWYgKGVudGVyX2Rpc3BsYXlfb2ZmID09IHNhZmVfdG9fbG93 ZXIpIHsKLQkJLyoKLQkJICogTm90aWZ5IFNNVSBhY3RpdmUgZGlzcGxheXMKLQkJICogaWYgZnVu Y3Rpb24gcG9pbnRlciBub3Qgc2V0IHVwLCB0aGlzIG1lc3NhZ2UgaXMKLQkJICogc2VudCBhcyBw YXJ0IG9mIHBwbGliX2FwcGx5X2Rpc3BsYXlfcmVxdWlyZW1lbnRzLgotCQkgKi8KLQkJaWYgKHBw X3NtdS0+c2V0X2Rpc3BsYXlfY291bnQpCi0JCQlwcF9zbXUtPnNldF9kaXNwbGF5X2NvdW50KCZw cF9zbXUtPnBwX3NtdSwgZGlzcGxheV9jb3VudCk7Ci0JfQotCi0JaWYgKG5ld19jbG9ja3MtPmRp c3BjbGtfa2h6ID4gY2xrX21ncl9iYXNlLT5jbGtzLmRpc3BjbGtfa2h6Ci0JCQl8fCBuZXdfY2xv Y2tzLT5waHljbGtfa2h6ID4gY2xrX21ncl9iYXNlLT5jbGtzLnBoeWNsa19raHoKLQkJCXx8IG5l d19jbG9ja3MtPmZjbGtfa2h6ID4gY2xrX21ncl9iYXNlLT5jbGtzLmZjbGtfa2h6Ci0JCQl8fCBu ZXdfY2xvY2tzLT5kY2ZjbGtfa2h6ID4gY2xrX21ncl9iYXNlLT5jbGtzLmRjZmNsa19raHopCi0J CXNlbmRfcmVxdWVzdF90b19pbmNyZWFzZSA9IHRydWU7Ci0KLQlpZiAoc2hvdWxkX3NldF9jbG9j ayhzYWZlX3RvX2xvd2VyLCBuZXdfY2xvY2tzLT5waHljbGtfa2h6LCBjbGtfbWdyX2Jhc2UtPmNs a3MucGh5Y2xrX2toeikpIHsKLQkJY2xrX21ncl9iYXNlLT5jbGtzLnBoeWNsa19raHogPSBuZXdf Y2xvY2tzLT5waHljbGtfa2h6OwotCQlzZW5kX3JlcXVlc3RfdG9fbG93ZXIgPSB0cnVlOwotCX0K LQotCS8vIEYgQ2xvY2sKLQlpZiAoZGVidWctPmZvcmNlX2ZjbGtfa2h6ICE9IDApCi0JCW5ld19j bG9ja3MtPmZjbGtfa2h6ID0gZGVidWctPmZvcmNlX2ZjbGtfa2h6OwotCi0JaWYgKHNob3VsZF9z ZXRfY2xvY2soc2FmZV90b19sb3dlciwgbmV3X2Nsb2Nrcy0+ZmNsa19raHosIGNsa19tZ3JfYmFz ZS0+Y2xrcy5mY2xrX2toeikpIHsKLQkJY2xrX21ncl9iYXNlLT5jbGtzLmZjbGtfa2h6ID0gbmV3 X2Nsb2Nrcy0+ZmNsa19raHo7Ci0JCXNlbmRfcmVxdWVzdF90b19sb3dlciA9IHRydWU7Ci0JfQot Ci0JLy9EQ0YgQ2xvY2sKLQlpZiAoc2hvdWxkX3NldF9jbG9jayhzYWZlX3RvX2xvd2VyLCBuZXdf Y2xvY2tzLT5kY2ZjbGtfa2h6LCBjbGtfbWdyX2Jhc2UtPmNsa3MuZGNmY2xrX2toeikpIHsKLQkJ Y2xrX21ncl9iYXNlLT5jbGtzLmRjZmNsa19raHogPSBuZXdfY2xvY2tzLT5kY2ZjbGtfa2h6Owot CQlzZW5kX3JlcXVlc3RfdG9fbG93ZXIgPSB0cnVlOwotCX0KLQotCWlmIChzaG91bGRfc2V0X2Ns b2NrKHNhZmVfdG9fbG93ZXIsCi0JCQluZXdfY2xvY2tzLT5kY2ZjbGtfZGVlcF9zbGVlcF9raHos IGNsa19tZ3JfYmFzZS0+Y2xrcy5kY2ZjbGtfZGVlcF9zbGVlcF9raHopKSB7Ci0JCWNsa19tZ3Jf YmFzZS0+Y2xrcy5kY2ZjbGtfZGVlcF9zbGVlcF9raHogPSBuZXdfY2xvY2tzLT5kY2ZjbGtfZGVl cF9zbGVlcF9raHo7Ci0JCXNlbmRfcmVxdWVzdF90b19sb3dlciA9IHRydWU7Ci0JfQotCi0JLyog bWFrZSBzdXJlIGRjZiBjbGsgaXMgYmVmb3JlIGRwcCBjbGsgdG8KLQkgKiBtYWtlIHN1cmUgd2Ug aGF2ZSBlbm91Z2ggdm9sdGFnZSB0byBydW4gZHBwIGNsawotCSAqLwotCWlmIChzZW5kX3JlcXVl c3RfdG9faW5jcmVhc2UpIHsKLQkJLyp1c2UgZGNmY2xrIHRvIHJlcXVlc3Qgdm9sdGFnZSovCi0J CWlmIChwcF9zbXUtPnNldF9oYXJkX21pbl9mY2xrX2J5X2ZyZXEgJiYKLQkJCQlwcF9zbXUtPnNl dF9oYXJkX21pbl9kY2ZjbGtfYnlfZnJlcSAmJgotCQkJCXBwX3NtdS0+c2V0X21pbl9kZWVwX3Ns ZWVwX2RjZmNsaykgewotCQkJcHBfc211LT5zZXRfaGFyZF9taW5fZmNsa19ieV9mcmVxKCZwcF9z bXUtPnBwX3NtdSwgbmV3X2Nsb2Nrcy0+ZmNsa19raHogLyAxMDAwKTsKLQkJCXBwX3NtdS0+c2V0 X2hhcmRfbWluX2RjZmNsa19ieV9mcmVxKCZwcF9zbXUtPnBwX3NtdSwgbmV3X2Nsb2Nrcy0+ZGNm Y2xrX2toeiAvIDEwMDApOwotCQkJcHBfc211LT5zZXRfbWluX2RlZXBfc2xlZXBfZGNmY2xrKCZw cF9zbXUtPnBwX3NtdSwgKG5ld19jbG9ja3MtPmRjZmNsa19kZWVwX3NsZWVwX2toeiArIDk5OSkg LyAxMDAwKTsKLQkJfQotCX0KLQotCS8qIGRjbjEgZHBwY2xrIGlzIHRpZWQgdG8gZGlzcGNsayAq LwotCS8qIHByb2dyYW0gZGlzcGNsayBvbiA9IGFzIGEgdy9hIGZvciBzbGVlcCByZXN1bWUgY2xv Y2sgcmFtcGluZyBpc3N1ZXMgKi8KLQlpZiAoc2hvdWxkX3NldF9jbG9jayhzYWZlX3RvX2xvd2Vy LCBuZXdfY2xvY2tzLT5kaXNwY2xrX2toeiwgY2xrX21ncl9iYXNlLT5jbGtzLmRpc3BjbGtfa2h6 KQotCQkJfHwgbmV3X2Nsb2Nrcy0+ZGlzcGNsa19raHogPT0gY2xrX21ncl9iYXNlLT5jbGtzLmRp c3BjbGtfa2h6KSB7Ci0JCXJhbXBfdXBfZGlzcGNsa193aXRoX2RwcChjbGtfbWdyLCBkYywgbmV3 X2Nsb2Nrcyk7Ci0JCWNsa19tZ3JfYmFzZS0+Y2xrcy5kaXNwY2xrX2toeiA9IG5ld19jbG9ja3Mt PmRpc3BjbGtfa2h6OwotCQlzZW5kX3JlcXVlc3RfdG9fbG93ZXIgPSB0cnVlOwotCX0KLQotCWlm ICghc2VuZF9yZXF1ZXN0X3RvX2luY3JlYXNlICYmIHNlbmRfcmVxdWVzdF90b19sb3dlcikgewot CQkvKnVzZSBkY2ZjbGsgdG8gcmVxdWVzdCB2b2x0YWdlKi8KLQkJaWYgKHBwX3NtdS0+c2V0X2hh cmRfbWluX2ZjbGtfYnlfZnJlcSAmJgotCQkJCXBwX3NtdS0+c2V0X2hhcmRfbWluX2RjZmNsa19i eV9mcmVxICYmCi0JCQkJcHBfc211LT5zZXRfbWluX2RlZXBfc2xlZXBfZGNmY2xrKSB7Ci0JCQlw cF9zbXUtPnNldF9oYXJkX21pbl9mY2xrX2J5X2ZyZXEoJnBwX3NtdS0+cHBfc211LCBuZXdfY2xv Y2tzLT5mY2xrX2toeiAvIDEwMDApOwotCQkJcHBfc211LT5zZXRfaGFyZF9taW5fZGNmY2xrX2J5 X2ZyZXEoJnBwX3NtdS0+cHBfc211LCBuZXdfY2xvY2tzLT5kY2ZjbGtfa2h6IC8gMTAwMCk7Ci0J CQlwcF9zbXUtPnNldF9taW5fZGVlcF9zbGVlcF9kY2ZjbGsoJnBwX3NtdS0+cHBfc211LCAobmV3 X2Nsb2Nrcy0+ZGNmY2xrX2RlZXBfc2xlZXBfa2h6ICsgOTk5KSAvIDEwMDApOwotCQl9Ci0JfQot fQotCi1zdGF0aWMgc3RydWN0IGNsa19tZ3JfZnVuY3MgcnYxX2Nsa19mdW5jcyA9IHsKLQkuZ2V0 X2RwX3JlZl9jbGtfZnJlcXVlbmN5ID0gZGNlMTJfZ2V0X2RwX3JlZl9mcmVxX2toeiwKLQkudXBk YXRlX2Nsb2NrcyA9IHJ2MV91cGRhdGVfY2xvY2tzLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtf bWdyX2ludGVybmFsX2Z1bmNzIHJ2MV9jbGtfaW50ZXJuYWxfZnVuY3MgPSB7Ci0JLnNldF9kaXNw Y2xrID0gcnYxX3ZiaW9zX3NtdV9zZXRfZGlzcGNsaywKLQkuc2V0X2RwcmVmY2xrID0gZGNlMTEy X3NldF9kcHJlZmNsawotfTsKLQotdm9pZCBydjFfY2xrX21ncl9jb25zdHJ1Y3Qoc3RydWN0IGRj X2NvbnRleHQgKmN0eCwgc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNsa19tZ3IsIHN0cnVjdCBw cF9zbXVfZnVuY3MgKnBwX3NtdSkKLXsKLQlzdHJ1Y3QgZGNfZGVidWdfb3B0aW9ucyAqZGVidWcg PSAmY3R4LT5kYy0+ZGVidWc7Ci0Jc3RydWN0IGRjX2Jpb3MgKmJwID0gY3R4LT5kY19iaW9zOwot CXN0cnVjdCBkY19maXJtd2FyZV9pbmZvIGZ3X2luZm8gPSB7IHsgMCB9IH07Ci0KLQljbGtfbWdy LT5iYXNlLmN0eCA9IGN0eDsKLQljbGtfbWdyLT5wcF9zbXUgPSBwcF9zbXU7Ci0JY2xrX21nci0+ YmFzZS5mdW5jcyA9ICZydjFfY2xrX2Z1bmNzOwotCWNsa19tZ3ItPmZ1bmNzID0gJnJ2MV9jbGtf aW50ZXJuYWxfZnVuY3M7Ci0KLQljbGtfbWdyLT5kZnNfYnlwYXNzX2Rpc3BfY2xrID0gMDsKLQot CWNsa19tZ3ItPmRwcmVmY2xrX3NzX3BlcmNlbnRhZ2UgPSAwOwotCWNsa19tZ3ItPmRwcmVmY2xr X3NzX2RpdmlkZXIgPSAxMDAwOwotCWNsa19tZ3ItPnNzX29uX2RwcmVmY2xrID0gZmFsc2U7Ci0J Y2xrX21nci0+YmFzZS5kcHJlZmNsa19raHogPSA2MDAwMDA7Ci0KLQlpZiAoYnAtPmludGVncmF0 ZWRfaW5mbykKLQkJY2xrX21nci0+ZGVudGlzdF92Y29fZnJlcV9raHogPSBicC0+aW50ZWdyYXRl ZF9pbmZvLT5kZW50aXN0X3Zjb19mcmVxOwotCWlmIChjbGtfbWdyLT5kZW50aXN0X3Zjb19mcmVx X2toeiA9PSAwKSB7Ci0JCWJwLT5mdW5jcy0+Z2V0X2Zpcm13YXJlX2luZm8oYnAsICZmd19pbmZv KTsKLQkJY2xrX21nci0+ZGVudGlzdF92Y29fZnJlcV9raHogPSBmd19pbmZvLnNtdV9ncHVfcGxs X291dHB1dF9mcmVxOwotCQlpZiAoY2xrX21nci0+ZGVudGlzdF92Y29fZnJlcV9raHogPT0gMCkK LQkJCWNsa19tZ3ItPmRlbnRpc3RfdmNvX2ZyZXFfa2h6ID0gMzYwMDAwMDsKLQl9Ci0KLQlpZiAo IWRlYnVnLT5kaXNhYmxlX2Rmc19ieXBhc3MgJiYgYnAtPmludGVncmF0ZWRfaW5mbykKLQkJaWYg KGJwLT5pbnRlZ3JhdGVkX2luZm8tPmdwdV9jYXBfaW5mbyAmIERGU19CWVBBU1NfRU5BQkxFKQot CQkJY2xrX21nci0+ZGZzX2J5cGFzc19lbmFibGVkID0gdHJ1ZTsKLQotCWRjZV9jbG9ja19yZWFk X3NzX2luZm8oY2xrX21ncik7Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9kaXNwbGF5L2RjL2RjbjEwL3J2MV9jbGtfbWdyLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rp c3BsYXkvZGMvZGNuMTAvcnYxX2Nsa19tZ3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDgwNzQ3OC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMv ZGNuMTAvcnYxX2Nsa19tZ3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qCi0g KiBDb3B5cmlnaHQgMjAxOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCi0gKgotICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0g KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0g KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBz aGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ TkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBP UiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKLSAqIE9USEVS IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLAotICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCi0gKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdB UkUuCi0gKgotICogQXV0aG9yczogQU1ECi0gKgotICovCi0KLSNpZm5kZWYgX19SVjFfQ0xLX01H Ul9IX18KLSNkZWZpbmUgX19SVjFfQ0xLX01HUl9IX18KLQotdm9pZCBydjFfY2xrX21ncl9jb25z dHJ1Y3Qoc3RydWN0IGRjX2NvbnRleHQgKmN0eCwgc3RydWN0IGNsa19tZ3JfaW50ZXJuYWwgKmNs a19tZ3IsIHN0cnVjdCBwcF9zbXVfZnVuY3MgKnBwX3NtdSk7Ci0KLSNlbmRpZiAvL19fRENOMTBf Q0xLX01HUl9IX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9k Y24xMC9ydjFfY2xrX21ncl9jbGsuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9k Y24xMC9ydjFfY2xrX21ncl9jbGsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk5 YWYyMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNuMTAv cnYxX2Nsa19tZ3JfY2xrLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKgotICog Q29weXJpZ2h0IDIwMTItMTYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgotICoKLSAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgot ICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5p c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgot ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug c2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykg T1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCi0gKiBPVEhF UiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwKLSAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgotICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRX QVJFLgotICoKLSAqIEF1dGhvcnM6IEFNRAotICoKLSAqLwotCi0jaW5jbHVkZSAicmVnX2hlbHBl ci5oIgotI2luY2x1ZGUgImNsa19tZ3JfaW50ZXJuYWwuaCIKLSNpbmNsdWRlICJydjFfY2xrX21n cl9jbGsuaCIKLQotI2luY2x1ZGUgImlwL0Rpc2NvdmVyeS9od2lkLmgiCi0jaW5jbHVkZSAiaXAv RGlzY292ZXJ5L3YxL2lwX29mZnNldF8xLmgiCi0jaW5jbHVkZSAiaXAvQ0xLL2Nsa18xMF8wX2Rl ZmF1bHQuaCIKLSNpbmNsdWRlICJpcC9DTEsvY2xrXzEwXzBfb2Zmc2V0LmgiCi0jaW5jbHVkZSAi aXAvQ0xLL2Nsa18xMF8wX3JlZy5oIgotI2luY2x1ZGUgImlwL0NMSy9jbGtfMTBfMF9zaF9tYXNr LmgiCi0KLSNpbmNsdWRlICJkY2UvZGNlX2Nsa19tZ3IuaCIKLQotI2RlZmluZSBDTEtfQkFTRV9J Tk5FUihpbnN0KSBcCi0JQ0xLX0JBU0VfX0lOU1QgIyMgaW5zdCAjIyBfU0VHMAotCi0KLSNkZWZp bmUgQ0xLX1JFRyhyZWdfbmFtZSwgYmxvY2ssIGluc3QpXAotCUNMS19CQVNFKG1tICMjIGJsb2Nr ICMjIF8gIyMgaW5zdCAjIyBfICMjIHJlZ19uYW1lICMjIF9CQVNFX0lEWCkgKyBcCi0JCQkJCW1t ICMjIGJsb2NrICMjIF8gIyMgaW5zdCAjIyBfICMjIHJlZ19uYW1lCi0KLSNkZWZpbmUgUkVHKHJl Z19uYW1lKSBcCi0JQ0xLX1JFRyhyZWdfbmFtZSwgQ0xLMCwgMCkKLQotCi0vKiBPbmx5IHVzZWQg YnkgdGVzdGluZyBmcmFtZXdvcmsqLwotdm9pZCBydjFfZHVtcF9jbGtfcmVnaXN0ZXJzKHN0cnVj dCBjbGtfc3RhdGVfcmVnaXN0ZXJzICpyZWdzLCBzdHJ1Y3QgY2xrX2J5cGFzcyAqYnlwYXNzLCBz dHJ1Y3QgY2xrX21nciAqY2xrX21ncl9iYXNlKQotewotCXN0cnVjdCBjbGtfbWdyX2ludGVybmFs ICpjbGtfbWdyID0gVE9fQ0xLX01HUl9JTlRFUk5BTChjbGtfbWdyX2Jhc2UpOwotCi0JCXJlZ3Mt PkNMSzBfQ0xLOF9DVVJSRU5UX0NOVCA9IFJFR19SRUFEKENMSzBfQ0xLOF9DVVJSRU5UX0NOVCkg LyAxMDsgLy9kY2YgY2xrCi0KLQkJYnlwYXNzLT5kY2ZjbGtfYnlwYXNzID0gUkVHX1JFQUQoQ0xL MF9DTEs4X0JZUEFTU19DTlRMKSAmIDB4MDAwNzsKLQkJaWYgKGJ5cGFzcy0+ZGNmY2xrX2J5cGFz cyA8IDAgfHwgYnlwYXNzLT5kY2ZjbGtfYnlwYXNzID4gNCkKLQkJCWJ5cGFzcy0+ZGNmY2xrX2J5 cGFzcyA9IDA7Ci0KLQotCQlyZWdzLT5DTEswX0NMSzhfRFNfQ05UTCA9IFJFR19SRUFEKENMSzBf Q0xLOF9EU19DTlRMKSAvIDEwOwkvL2RjZiBkZWVwIHNsZWVwIGRpdmlkZXIKLQotCQlyZWdzLT5D TEswX0NMSzhfQUxMT1dfRFMgPSBSRUdfUkVBRChDTEswX0NMSzhfQUxMT1dfRFMpOyAvL2RjZiBk ZWVwIHNsZWVwIGFsbG93Ci0KLQkJcmVncy0+Q0xLMF9DTEsxMF9DVVJSRU5UX0NOVCA9IFJFR19S RUFEKENMSzBfQ0xLMTBfQ1VSUkVOVF9DTlQpIC8gMTA7IC8vZHByZWYgY2xrCi0KLQkJYnlwYXNz LT5kaXNwY2xrX3B5cGFzcyA9IFJFR19SRUFEKENMSzBfQ0xLMTBfQllQQVNTX0NOVEwpICYgMHgw MDA3OwotCQlpZiAoYnlwYXNzLT5kaXNwY2xrX3B5cGFzcyA8IDAgfHwgYnlwYXNzLT5kaXNwY2xr X3B5cGFzcyA+IDQpCi0JCQlieXBhc3MtPmRpc3BjbGtfcHlwYXNzID0gMDsKLQotCQlyZWdzLT5D TEswX0NMSzExX0NVUlJFTlRfQ05UID0gUkVHX1JFQUQoQ0xLMF9DTEsxMV9DVVJSRU5UX0NOVCkg LyAxMDsgLy9kaXNwIGNsawotCi0JCWJ5cGFzcy0+ZHByZWZjbGtfYnlwYXNzID0gUkVHX1JFQUQo Q0xLMF9DTEsxMV9CWVBBU1NfQ05UTCkgJiAweDAwMDc7Ci0JCWlmIChieXBhc3MtPmRwcmVmY2xr X2J5cGFzcyA8IDAgfHwgYnlwYXNzLT5kcHJlZmNsa19ieXBhc3MgPiA0KQotCQkJYnlwYXNzLT5k cHJlZmNsa19ieXBhc3MgPSAwOwotCi19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1k L2Rpc3BsYXkvZGMvZGNuMTAvcnYxX2Nsa19tZ3JfY2xrLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2Rpc3BsYXkvZGMvZGNuMTAvcnYxX2Nsa19tZ3JfY2xrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGI2OGUzNDUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNw bGF5L2RjL2RjbjEwL3J2MV9jbGtfbWdyX2Nsay5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAs MCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4K LSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgot ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBDT1BZUklHSFQg SE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UgotICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsCi0gKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKLSAqIE9USEVSIERFQUxJTkdTIElO IFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBdXRob3JzOiBBTUQKLSAqCi0gKi8KLQotI2lmbmRlZiBE QUxfRENfRENOMTBfUlYxX0NMS19NR1JfQ0xLX0hfCi0jZGVmaW5lIERBTF9EQ19EQ04xMF9SVjFf Q0xLX01HUl9DTEtfSF8KLQotI2VuZGlmIC8qIERBTF9EQ19EQ04xMF9SVjFfQ0xLX01HUl9DTEtf SF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY24xMC9y djFfY2xrX21ncl92Ymlvc19zbXUuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9k Y24xMC9ydjFfY2xrX21ncl92Ymlvc19zbXUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMTk2MDg3MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMv ZGNuMTAvcnYxX2Nsa19tZ3JfdmJpb3Nfc211LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAs MCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEyLTE2IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIElu Yy4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBh c3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0 d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k aXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBP UgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBDT1BZUklH SFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF UyBPUgotICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgVE9SVCBPUiBPVEhFUldJU0UsCi0gKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKLSAqIE9USEVSIERFQUxJTkdT IElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBdXRob3JzOiBBTUQKLSAqCi0gKi8KLQotI2luY2x1 ZGUgImNvcmVfdHlwZXMuaCIKLSNpbmNsdWRlICJjbGtfbWdyX2ludGVybmFsLmgiCi0jaW5jbHVk ZSAicmVnX2hlbHBlci5oIgotCi0jZGVmaW5lIE1BWF9JTlNUQU5DRQk1Ci0jZGVmaW5lIE1BWF9T RUdNRU5UCQk1Ci0KLXN0cnVjdCBJUF9CQVNFX0lOU1RBTkNFIHsKLQl1bnNpZ25lZCBpbnQgc2Vn bWVudFtNQVhfU0VHTUVOVF07Ci19OwotCi1zdHJ1Y3QgSVBfQkFTRSB7Ci0Jc3RydWN0IElQX0JB U0VfSU5TVEFOQ0UgaW5zdGFuY2VbTUFYX0lOU1RBTkNFXTsKLX07Ci0KLQotc3RhdGljIGNvbnN0 IHN0cnVjdCBJUF9CQVNFIE1QMV9CQVNFICA9IHsgeyB7IHsgMHgwMDAxNjAwMCwgMCwgMCwgMCwg MCB9IH0sCi0JCQkJCQkJCQkJCSB7IHsgMCwgMCwgMCwgMCwgMCB9IH0sCi0JCQkJCQkJCQkJCSB7 IHsgMCwgMCwgMCwgMCwgMCB9IH0sCi0JCQkJCQkJCQkJCSB7IHsgMCwgMCwgMCwgMCwgMCB9IH0s Ci0JCQkJCQkJCQkJCSB7IHsgMCwgMCwgMCwgMCwgMCB9IH0gfSB9OwotCi0jZGVmaW5lIG1tTVAx X1NNTl9DMlBNU0dfOTEgICAgICAgICAgICAweDI5QgotI2RlZmluZSBtbU1QMV9TTU5fQzJQTVNH XzgzICAgICAgICAgICAgMHgyOTMKLSNkZWZpbmUgbW1NUDFfU01OX0MyUE1TR182NyAgICAgICAg ICAgIDB4MjgzCi0jZGVmaW5lIG1tTVAxX1NNTl9DMlBNU0dfOTFfQkFTRV9JRFggICAwCi0jZGVm aW5lIG1tTVAxX1NNTl9DMlBNU0dfODNfQkFTRV9JRFggICAwCi0jZGVmaW5lIG1tTVAxX1NNTl9D MlBNU0dfNjdfQkFTRV9JRFggICAwCi0KLSNkZWZpbmUgTVAxX1NNTl9DMlBNU0dfOTFfX0NPTlRF TlRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZkwKLSNkZWZpbmUgTVAxX1NNTl9D MlBNU0dfODNfX0NPTlRFTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZkwKLSNk ZWZpbmUgTVAxX1NNTl9DMlBNU0dfNjdfX0NPTlRFTlRfTUFTSyAgICAgICAgICAgICAgICAgICAg MHhmZmZmZmZmZkwKLSNkZWZpbmUgTVAxX1NNTl9DMlBNU0dfOTFfX0NPTlRFTlRfX1NISUZUICAg ICAgICAgICAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBNUDFfU01OX0MyUE1TR184M19fQ09O VEVOVF9fU0hJRlQgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIE1QMV9TTU5f QzJQTVNHXzY3X19DT05URU5UX19TSElGVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKLQot I2RlZmluZSBSRUcocmVnX25hbWUpIFwKLQkoTVAxX0JBU0UuaW5zdGFuY2VbMF0uc2VnbWVudFtt bSAjIyByZWdfbmFtZSAjIyBfQkFTRV9JRFhdICsgbW0gIyMgcmVnX25hbWUpCi0KLSNkZWZpbmUg Rk4ocmVnX25hbWUsIGZpZWxkKSBcCi0JRkQocmVnX25hbWUjI19fIyNmaWVsZCkKLQotI2RlZmlu ZSBWQklPU1NNQ19NU0dfU2V0RGlzcGNsa0ZyZXEgICAgICAgICAgIDB4NAotI2RlZmluZSBWQklP U1NNQ19NU0dfU2V0RHByZWZjbGtGcmVxICAgICAgICAgIDB4NQotCi1pbnQgcnYxX3ZiaW9zX3Nt dV9zZXRfZGlzcGNsayhzdHJ1Y3QgY2xrX21ncl9pbnRlcm5hbCAqY2xrX21nciwgaW50IHJlcXVl c3RlZF9kaXNwY2xrX2toeikKLXsKLQotCWludCBhY3R1YWxfZGlzcGNsa19zZXRfa2h6ID0gLTE7 Ci0Jc3RydWN0IGRjICpjb3JlX2RjID0gY2xrX21nci0+YmFzZS5jdHgtPmRjOwotCXN0cnVjdCBk bWN1ICpkbWN1ID0gY29yZV9kYy0+cmVzX3Bvb2wtPmRtY3U7Ci0KLQkvKiBGaXJzdCBjbGVhciBy ZXNwb25zZSByZWdpc3RlciAqLwotCS8vZG1fd3JpdGVfcmVnKGN0eCwgbW1NUDFfU01OX0MyUE1T R185MSwgMCk7Ci0JUkVHX1dSSVRFKE1QMV9TTU5fQzJQTVNHXzkxLCAwKTsKLQotCS8qIFNldCB0 aGUgcGFyYW1ldGVyIHJlZ2lzdGVyIGZvciB0aGUgU01VIG1lc3NhZ2UsIHVuaXQgaXMgTWh6ICov Ci0JLy9kbV93cml0ZV9yZWcoY3R4LCBtbU1QMV9TTU5fQzJQTVNHXzgzLCByZXF1ZXN0ZWRfZGlz cGNsa19raHogLyAxMDAwKTsKLQlSRUdfV1JJVEUoTVAxX1NNTl9DMlBNU0dfODMsIHJlcXVlc3Rl ZF9kaXNwY2xrX2toeiAvIDEwMDApOwotCi0JLyogVHJpZ2dlciB0aGUgbWVzc2FnZSB0cmFuc2Fj dGlvbiBieSB3cml0aW5nIHRoZSBtZXNzYWdlIElEICovCi0JLy9kbV93cml0ZV9yZWcoY3R4LCBt bU1QMV9TTU5fQzJQTVNHXzY3LCBWQklPU1NNQ19NU0dfU2V0RGlzcGNsa0ZyZXEpOwotCVJFR19X UklURShNUDFfU01OX0MyUE1TR182NywgVkJJT1NTTUNfTVNHX1NldERpc3BjbGtGcmVxKTsKLQot CVJFR19XQUlUKE1QMV9TTU5fQzJQTVNHXzkxLCBDT05URU5ULCAxLCAxMCwgMjAwMDAwKTsKLQot CS8qIEFjdHVhbCBkaXNwY2xrIHNldCBpcyByZXR1cm5lZCBpbiB0aGUgcGFyYW1ldGVyIHJlZ2lz dGVyICovCi0JYWN0dWFsX2Rpc3BjbGtfc2V0X2toeiA9IFJFR19SRUFEKE1QMV9TTU5fQzJQTVNH XzgzKSAqIDEwMDA7Ci0KLQlpZiAoIUlTX0ZQR0FfTUFYSU1VU19EQyhjb3JlX2RjLT5jdHgtPmRj ZV9lbnZpcm9ubWVudCkpIHsKLQkJaWYgKGRtY3UgJiYgZG1jdS0+ZnVuY3MtPmlzX2RtY3VfaW5p dGlhbGl6ZWQoZG1jdSkpIHsKLQkJCWlmIChjbGtfbWdyLT5kZnNfYnlwYXNzX2Rpc3BfY2xrICE9 IGFjdHVhbF9kaXNwY2xrX3NldF9raHopCi0JCQkJZG1jdS0+ZnVuY3MtPnNldF9wc3Jfd2FpdF9s b29wKGRtY3UsCi0JCQkJCQlhY3R1YWxfZGlzcGNsa19zZXRfa2h6IC8gMTAwMCAvIDcpOwotCQl9 Ci0JfQotCi0JcmV0dXJuIGFjdHVhbF9kaXNwY2xrX3NldF9raHo7Ci19Ci0KLWludCBydjFfdmJp b3Nfc211X3NldF9kcHJlZmNsayhzdHJ1Y3QgY2xrX21ncl9pbnRlcm5hbCAqY2xrX21ncikKLXsK LQlpbnQgYWN0dWFsX2RwcmVmY2xrX3NldF9raHogPSAtMTsKLQotCVJFR19XUklURShNUDFfU01O X0MyUE1TR185MSwgMCk7Ci0KLQkvKiBTZXQgdGhlIHBhcmFtZXRlciByZWdpc3RlciBmb3IgdGhl IFNNVSBtZXNzYWdlICovCi0JUkVHX1dSSVRFKE1QMV9TTU5fQzJQTVNHXzgzLCBjbGtfbWdyLT5i YXNlLmRwcmVmY2xrX2toeiAvIDEwMDApOwotCi0JLyogVHJpZ2dlciB0aGUgbWVzc2FnZSB0cmFu c2FjdGlvbiBieSB3cml0aW5nIHRoZSBtZXNzYWdlIElEICovCi0JUkVHX1dSSVRFKE1QMV9TTU5f QzJQTVNHXzY3LCBWQklPU1NNQ19NU0dfU2V0RHByZWZjbGtGcmVxKTsKLQotCS8qIFdhaXQgZm9y IFNNVSByZXNwb25zZSAqLwotCVJFR19XQUlUKE1QMV9TTU5fQzJQTVNHXzkxLCBDT05URU5ULCAx LCAxMCwgMjAwMDAwKTsKLQotCWFjdHVhbF9kcHJlZmNsa19zZXRfa2h6ID0gUkVHX1JFQUQoTVAx X1NNTl9DMlBNU0dfODMpICogMTAwMDsKLQotCXJldHVybiBhY3R1YWxfZHByZWZjbGtfc2V0X2to ejsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY24xMC9y djFfY2xrX21ncl92Ymlvc19zbXUuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9k Y24xMC9ydjFfY2xrX21ncl92Ymlvc19zbXUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDgzY2IzMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMv ZGNuMTAvcnYxX2Nsa19tZ3JfdmJpb3Nfc211LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCww IEBACi0vKgotICogQ29weXJpZ2h0IDIwMTggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgot ICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh bnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBp biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGlt aXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhl IFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0g KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIENPUFlSSUdIVCBI T0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S Ci0gKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwKLSAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgotICogT1RIRVIgREVBTElOR1MgSU4g VEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6IEFNRAotICoKLSAqLwotCi0jaWZuZGVmIERB TF9EQ19EQ04xMF9SVjFfQ0xLX01HUl9WQklPU19TTVVfSF8KLSNkZWZpbmUgREFMX0RDX0RDTjEw X1JWMV9DTEtfTUdSX1ZCSU9TX1NNVV9IXwotCi1pbnQgcnYxX3ZiaW9zX3NtdV9zZXRfZGlzcGNs ayhzdHJ1Y3QgY2xrX21ncl9pbnRlcm5hbCAqY2xrX21nciwgaW50IHJlcXVlc3RlZF9kaXNwY2xr X2toeik7Ci1pbnQgcnYxX3ZiaW9zX3NtdV9zZXRfZHByZWZjbGsoc3RydWN0IGNsa19tZ3JfaW50 ZXJuYWwgKmNsa19tZ3IpOwotCi0jZW5kaWYgLyogREFMX0RDX0RDTjEwX1JWMV9DTEtfTUdSX1ZC SU9TX1NNVV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2Rj L2RjbjEwL3J2Ml9jbGtfbWdyLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNu MTAvcnYyX2Nsa19tZ3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJlYjJmNy4u MDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNuMTAvcnYyX2Ns a19tZ3IuYworKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg MjAxOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCi0gKgotICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK LSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNs dWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29m dHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKLSAqIE9USEVSIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAotICog QVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SCi0gKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICog QXV0aG9yczogQU1ECi0gKgotICovCi0KLSNpbmNsdWRlICJjb3JlX3R5cGVzLmgiCi0jaW5jbHVk ZSAiY2xrX21ncl9pbnRlcm5hbC5oIgotI2luY2x1ZGUgInJ2MV9jbGtfbWdyLmgiCi0jaW5jbHVk ZSAicnYyX2Nsa19tZ3IuaCIKLSNpbmNsdWRlICJkY2UvZGNlMTEyX2Nsa19tZ3IuaCIKLQotc3Rh dGljIHN0cnVjdCBjbGtfbWdyX2ludGVybmFsX2Z1bmNzIHJ2Ml9jbGtfaW50ZXJuYWxfZnVuY3Mg PSB7Ci0JLnNldF9kaXNwY2xrID0gZGNlMTEyX3NldF9kaXNwY2xrLAotCS5zZXRfZHByZWZjbGsg PSBkY2UxMTJfc2V0X2RwcmVmY2xrCi19OwotCi12b2lkIHJ2Ml9jbGtfbWdyX2NvbnN0cnVjdChz dHJ1Y3QgZGNfY29udGV4dCAqY3R4LCBzdHJ1Y3QgY2xrX21ncl9pbnRlcm5hbCAqY2xrX21nciwg c3RydWN0IHBwX3NtdV9mdW5jcyAqcHBfc211KQotCi17Ci0JcnYxX2Nsa19tZ3JfY29uc3RydWN0 KGN0eCwgY2xrX21nciwgcHBfc211KTsKLQotCWNsa19tZ3ItPmZ1bmNzID0gJnJ2Ml9jbGtfaW50 ZXJuYWxfZnVuY3M7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkv ZGMvZGNuMTAvcnYyX2Nsa19tZ3IuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9k Y24xMC9ydjJfY2xrX21nci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzFmMjZj Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY24xMC9ydjJf Y2xrX21nci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo dCAyMDE4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KLSAqCi0gKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBl cm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGlu Y2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBT b2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0g KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihT KSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgotICogT1RIRVIgTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0g KiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IKLSAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0g KiBBdXRob3JzOiBBTUQKLSAqCi0gKi8KLQotI2lmbmRlZiBfX1JWMl9DTEtfTUdSX0hfXwotI2Rl ZmluZSBfX1JWMl9DTEtfTUdSX0hfXwotCi12b2lkIHJ2Ml9jbGtfbWdyX2NvbnN0cnVjdChzdHJ1 Y3QgZGNfY29udGV4dCAqY3R4LCBzdHJ1Y3QgY2xrX21ncl9pbnRlcm5hbCAqY2xrX21nciwgc3Ry dWN0IHBwX3NtdV9mdW5jcyAqcHBfc211KTsKLQotCi0jZW5kaWYgLy9fX0RDTjEwX0NMS19NR1Jf SF9fCi0tIAoyLjcuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4