Amiga Warp 1260 RTG accelerated wscons and Xorg EXA driver
Carlos Milán Figueredo <[email protected]> Sun, 19 Jul 2026 18:11:09 +0000
| Newsgroups | gmane.os.netbsd.ports.amiga |
|---|---|
| Message-ID | <PH6P220MB9841969C3D35E60749EE53E0D6C9C42@PH6P220MB984196.NAMP220.PROD.OUTLOOK.COM> |
--_003_PH6P220MB9841969C3D35E60749EE53E0D6C9C42PH6P220MB984196_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi everyone,=0A= =0A= I was seeking for long to have the integrated RTG of the Amiga Warp 1260 ac= celerator working in NetBSD, and with the launch of GPT-5.6-Sol I decided t= o give a try with "him" a coding assistant. After few weeks of tweaking, I = have hardware accelerated driver working without a single issue so far. The= features are:=0A= =0A= * Six 16-bit R5G6B5 video modes: 640x480, 800x600, 1024x768, 1280x720, 12= 80x1024, and 1920x1080.=0A= * Hardware rectangle fill/copy acceleration for the wscons console.=0A= * EXA Solid/Copy acceleration for Xorg through the standard wsfb driver.= =0A= =0A= I am attaching the patches against the following commits of `src` [1] and `= xsrc` [2]. You can also find here [3] the repository of the full project an= d a video of a real Amiga working with accelerated graphics on NetBSD here = [4]. The performance is outstanding.=0A= =0A= Since this was coded by AI, I would like to request a review of the code, c= hecking if it is valid, according to the kernel and Xorg best practices; an= d after review and interations, to be pushed to the upstream. So far, my sy= stem is working flawlesly with it, but that doesn't mean that it won't inte= rfere with other components of the OS.=0A= =0A= Thanks!=0A= Carlos=0A= =0A= [1] https://github.com/NetBSD/src/commit/c4432964a2fc5fc62bd8f36699e5798c45= cd569b=0A= [2] https://github.com/NetBSD/xsrc/commit/b8a0c79d92d984f132704159c17dc18ee= 9515e3c=0A= [3] https://github.com/cmilanf/netbsd-amiga-warpgfx=0A= [4] https://youtu.be/iFda9PB3n1w=0A= =0A= Carlos Mil=E1n Figueredo=0A= HispaMSX System Operator=0A= - =A0http://www.hispamsx.org=0A= - =A0telnet://bbs.hispamsx.org=0A= - =A0https://calnus.com= --_003_PH6P220MB9841969C3D35E60749EE53E0D6C9C42PH6P220MB984196_ Content-Type: application/octet-stream; name="netbsd-src-warpgfx.patch" Content-Description: netbsd-src-warpgfx.patch Content-Disposition: attachment; filename="netbsd-src-warpgfx.patch"; size=49301; creation-date="Sun, 19 Jul 2026 17:53:12 GMT"; modification-date="Sun, 19 Jul 2026 17:53:12 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2V4dGVybmFsL21pdC94b3JnL3NlcnZlci9kcml2ZXJzL3hmODYtdmlkZW8t d3NmYi9NYWtlZmlsZSBiL2V4dGVybmFsL21pdC94b3JnL3NlcnZlci9kcml2ZXJzL3hmODYtdmlk ZW8td3NmYi9NYWtlZmlsZQppbmRleCA1YzdhMzMxZjBiZjhiZDkwMDk2Y2MxNWYzMDQ5YzRhMzhi NTVkZTQ0Li4zOTVmOGM2YjU1Y2NjOTgzN2EzNDk3ZDAwNWFjMjRmNDM0YmY4OWRkIDEwMDY0NAot LS0gYS9leHRlcm5hbC9taXQveG9yZy9zZXJ2ZXIvZHJpdmVycy94Zjg2LXZpZGVvLXdzZmIvTWFr ZWZpbGUKKysrIGIvZXh0ZXJuYWwvbWl0L3hvcmcvc2VydmVyL2RyaXZlcnMveGY4Ni12aWRlby13 c2ZiL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogRFJJVkVSPQkJeGY4Ni12aWRlby13c2ZiCiBE UklWRVJfTkFNRT0Jd3NmYl9kcnYKIAotU1JDUz0JCXdzZmJfZHJpdmVyLmMgd3NmYl9jdXJzb3Iu YworU1JDUz0JCXdzZmJfZHJpdmVyLmMgd3NmYl9jdXJzb3IuYyB3c2ZiX2V4YS5jCiBNQU49CQl3 c2ZiLjQKIAogQ1BQRkxBR1MrPQktREhBVkVfQ09ORklHX0ggLUkke1gxMVNSQ0RJUi4ke0RSSVZF Un19Ly4uL2luY2x1ZGUKZGlmZiAtLWdpdCBhL3N5cy9hcmNoL2FtaWdhL2FtaWdhL2NvbmYuYyBi L3N5cy9hcmNoL2FtaWdhL2FtaWdhL2NvbmYuYwppbmRleCBmYzYyYzIzYzdhYmUxM2UzMTcwMTRh ZWU4Y2NmNDEyNGEyZWJjOTQ1Li5jZGI1YTUxNjgwMGEzZmZhYWJkNTYwMjI4YjJiZjAxOGEzOTg4 OWU1IDEwMDY0NAotLS0gYS9zeXMvYXJjaC9hbWlnYS9hbWlnYS9jb25mLmMKKysrIGIvc3lzL2Fy Y2gvYW1pZ2EvYW1pZ2EvY29uZi5jCkBAIC00Niw2ICs0Niw3IEBAIF9fS0VSTkVMX1JDU0lEKDAs ICIkTmV0QlNEOiBjb25mLmMsdiAxLjc2IDIwMjMvMDUvMDggMDg6MjY6MTEgc2tybGwgRXhwICQi KTsKICNpbmNsdWRlICJtbnR2YS5oIgogI2lmbmRlZiBfX3Bvd2VycGNfXwogI2luY2x1ZGUgInp6 OWtfZmIuaCIKKyNpbmNsdWRlICJ3YXJwZ2Z4LmgiCiAjZW5kaWYKICNpbmNsdWRlICJ3c2Rpc3Bs YXkuaCIKIApAQCAtNTgsNiArNTksNyBAQCBfX0tFUk5FTF9SQ1NJRCgwLCAiJE5ldEJTRDogY29u Zi5jLHYgMS43NiAyMDIzLzA1LzA4IDA4OjI2OjExIHNrcmxsIEV4cCAkIik7CiBjb25zX2RlY2wo c2VyKTsKIGNvbnNfZGVjbChtbnR2YSk7CiBjb25zX2RlY2woenpmYl8pOworY29uc19kZWNsKHdh cnBnZngpOwogY29uc19kZWNsKGdyZik7CiBjb25zX2RlY2woYW1pZGlzcGxheWNjXyk7CiBjb25z X2RlY2woaXRlKTsKQEAgLTcyLDYgKzc0LDkgQEAgc3RydWN0CWNvbnNkZXYgY29uc3RhYltdID0g ewogI2lmIE5aWjlLX0ZCID4gMAogCWNvbnNfaW5pdCh6emZiXyksCiAjZW5kaWYKKyNpZiBOV0FS UEdGWCA+IDAKKwljb25zX2luaXQod2FycGdmeCksCisjZW5kaWYKICNpZiAoTldTRElTUExBWSA+ IDApICYmIChOR1JGID4gMCkKIAl7IGRldl9pbml0KGdyZixjbnByb2JlKSwgZGV2X2luaXQoZ3Jm LGNuaW5pdCkgfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3lzL2FyY2gvYW1pZ2EvY29uZi9XU0NP TlMgYi9zeXMvYXJjaC9hbWlnYS9jb25mL1dTQ09OUwppbmRleCA1NzQ3YTY2MTgyYzhlZWYwMjI3 MjQ3MWY2ZmNkMTE0NzQ0YmY3NjM5Li5mYWMxNDZmMmYwYzc1MTU1NzM2OTFkYmFiZTcxOTY0ZjQx NGNkNzg2IDEwMDY0NAotLS0gYS9zeXMvYXJjaC9hbWlnYS9jb25mL1dTQ09OUworKysgYi9zeXMv YXJjaC9hbWlnYS9jb25mL1dTQ09OUwpAQCAtNTQsNiArNTQsMTIgQEAgb3B0aW9ucwkJWlpGQl9D T05TT0xFCQkjIENvbnNvbGUgb24gWlo5MDAwCiAjYXVkaW8qCQlhdCB6emF4PwkJIyBBdWRpbyBv biBaWjkwMDBBWAogI3p6dXNiKgkJYXQgeno5az8JCSMgVVNCIChub3QgaW1wbGVtZW50ZWQgeWV0 KQogCit3YXJwZ2Z4KglhdCB6YnVzPwkJIyBDUy1MYWIgV2FycCBHRlggZnJhbWVidWZmZXIvcmVn aXN0ZXJzCitvcHRpb25zCQlXQVJQR0ZYX0NPTlNPTEUJCSMgQ29uc29sZSBvbiBXYXJwIEdGWAor b3B0aW9ucwkJV0FSUEdGWF9BQ0NFTAkJIyBBY2NlbGVyYXRlIGNvbnNvbGUgY29weS9jbGVhcgor b3B0aW9ucwkJV0FSUEdGWF9NT0RFPTcyMAkjIDQ4MCwgNjAwLCA3MjAsIDc2OCwgMTAyNCwgb3Ig MTA4MAorI29wdGlvbnMJV0FSUEdGWF9ERUJVRwkJIyBEdW1wIHJlZ2lzdGVycyBkdXJpbmcgaW5p dGlhbGl6YXRpb24KKwogIyBQQ0kgZnJhbWVidWZmZXJzCiAjZ2VuZmIqCQlhdCBwY2k/CQkJIyBD eWJlclZpc2lvblBQQy9CbGl6emFyZFZpc2lvblBQQyBvbmx5CiB2b29kb29mYioJYXQgcGNpPwkJ CSMgM0RmeCBWb29kb28gMyBpbiBHLVJFWCAKQEAgLTY4LDQgKzc0LDMgQEAgd3NkaXNwbGF5Kglh dCB3c2VtdWxkaXNwbGF5ZGV2PyBjb25zb2xlID8KIAogcHNldWRvLWRldmljZQl3c2ZvbnQJCQkj IHdzZm9udCg0KSBkeW5hbWljIGZvbnQgbG9hZGluZyBzdXBwb3J0CiBwc2V1ZG8tZGV2aWNlCXdz bXV4CQkJIyBtb3VzZSAmIGtleWJvYXJkIG11bHRpcGxleG9yCi0KZGlmZiAtLWdpdCBhL3N5cy9h cmNoL2FtaWdhL2NvbmYvZmlsZXMuYW1pZ2EgYi9zeXMvYXJjaC9hbWlnYS9jb25mL2ZpbGVzLmFt aWdhCmluZGV4IGZjMzAzNTc4NTJkNjZmNDJlMzQwMjdmZDMwMmU5NmIzNzdmYjgyOTMuLjgzNWRm MmNmODgyMjU0YWZjOWEwMDMxYmVmMzA2N2YzYjExNWQ1MzkgMTAwNjQ0Ci0tLSBhL3N5cy9hcmNo L2FtaWdhL2NvbmYvZmlsZXMuYW1pZ2EKKysrIGIvc3lzL2FyY2gvYW1pZ2EvY29uZi9maWxlcy5h bWlnYQpAQCAtMjMsNiArMjMsOSBAQCBkZWZmbGFnCW9wdF9tbnR2YS5oCQlNTlRWQV9DT05TT0xF CiAKIGRlZmZsYWcgb3B0X3p6OWtfZmIuaAkJWlpGQl9DT05TT0xFCiAKK2RlZmZsYWcgb3B0X3dh cnBnZnguaAkJV0FSUEdGWF9DT05TT0xFIFdBUlBHRlhfQUNDRUwgV0FSUEdGWF9ERUJVRworZGVm cGFyYW0gb3B0X3dhcnBnZnguaAkJV0FSUEdGWF9NT0RFCisKIGRlZmZsYWcJb3B0X2tmb250LmgJ CUtGT05UX0NPTlNfSVNPODg1OV8xCiBkZWZmbGFnCW9wdF9rZm9udC5oCQlLRk9OVF9DT05TX0lT Tzg4NTlfMgogCkBAIC0yMjYsNiArMjI5LDExIEBAIGRldmljZQltbnR2YTogd3NlbXVsZGlzcGxh eWRldiwgcmFzb3BzMTYsIHJhc29wczMyLCB2Y29ucywgdmlkZW9tb2RlCiBhdHRhY2gJbW50dmEg YXQgemJ1cwogZmlsZQlhcmNoL2FtaWdhL2Rldi9tbnR2YS5jCQltbnR2YSBuZWVkcy1mbGFnCiAK KyMgQ1MtTGFiIFdhcnAgR0ZYCitkZXZpY2UJd2FycGdmeDogd3NlbXVsZGlzcGxheWRldiwgcmFz b3BzMTYsIHZjb25zCithdHRhY2gJd2FycGdmeCBhdCB6YnVzCitmaWxlCWFyY2gvYW1pZ2EvZGV2 L3dhcnBnZnguYwl3YXJwZ2Z4IG5lZWRzLWZsYWcKKwogIyBNTlQgWlo5MDAwCiBkZWZpbmUJeno5 a2J1cyB7fQogZGV2aWNlCXp6OWs6IHp6OWtidXMKZGlmZiAtLWdpdCBhL3N5cy9hcmNoL2FtaWdh L2Rldi93YXJwZ2Z4LmMgYi9zeXMvYXJjaC9hbWlnYS9kZXYvd2FycGdmeC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu LjRhM2VlNzNkMTMxZTAyNTNhM2EzNTFmN2FiYjA2NDZiYmQzZTdiYzMKLS0tIC9kZXYvbnVsbAor KysgYi9zeXMvYXJjaC9hbWlnYS9kZXYvd2FycGdmeC5jCkBAIC0wLDAgKzEsMTIwNyBAQAorLyoJ JE5ldEJTRCQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAyMCBUaGUgTmV0QlNEIEZvdW5k YXRpb24sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlz IGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRp b24KKyAqIGJ5IEFsYWluIFJ1bmEuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM SUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVO VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qLQorICogQ29w eXJpZ2h0IChjKSAyMDI2IENhcmxvcyBNaWzDoW4gRmlndWVyZWRvCisgKiB3aXRoIGFzc2lzdGFu Y2UgZnJvbSBPcGVuQUkgZ3B0LTUuNi1zb2wKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMg SVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fS0VSTkVMX1JDU0lE KDAsICIkTmV0QlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lz L2J1cy5oPgorI2luY2x1ZGUgPHN5cy9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzeXMvZXJybm8uaD4K KyNpbmNsdWRlIDxzeXMvc3RkYm9vbC5oPgorI2luY2x1ZGUgPHN5cy9zdGRpbnQuaD4KKyNpbmNs dWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgPGRl di9jb25zLmg+CisjaW5jbHVkZSA8ZGV2L3Jhc29wcy9yYXNvcHMuaD4KKyNpbmNsdWRlIDxkZXYv d3Njb25zL3dzY29uc2lvLmg+CisjaW5jbHVkZSA8ZGV2L3dzY29ucy93c2Rpc3BsYXlfdmNvbnN2 YXIuaD4KKyNpbmNsdWRlIDxkZXYvd3Njb25zL3dzZGlzcGxheXZhci5oPgorI2luY2x1ZGUgPGRl di93c2ZvbnQvd3Nmb250Lmg+CisKKyNpbmNsdWRlIDxhbWlnYS9hbWlnYS9kZXZpY2UuaD4KKyNp bmNsdWRlIDxhbWlnYS9kZXYva2JkdmFyLmg+CisjaW5jbHVkZSA8YW1pZ2EvZGV2L3dhcnBnZnhy ZWcuaD4KKyNpbmNsdWRlIDxhbWlnYS9kZXYvemJ1c3Zhci5oPgorCisjaW5jbHVkZSAib3B0X3dh cnBnZnguaCIKKworI2luY2x1ZGUgImtiZC5oIgorCisjaWZuZGVmIFdBUlBHRlhfTU9ERQorI2Rl ZmluZSBXQVJQR0ZYX01PREUJCVdBUlBHRlhfTU9ERV83MjBQCisjZW5kaWYKKworI2lmIFdBUlBH RlhfTU9ERSAhPSBXQVJQR0ZYX01PREVfNDgwUCAmJiBcCisgICAgV0FSUEdGWF9NT0RFICE9IFdB UlBHRlhfTU9ERV82MDBQICYmIFwKKyAgICBXQVJQR0ZYX01PREUgIT0gV0FSUEdGWF9NT0RFXzcy MFAgJiYgXAorICAgIFdBUlBHRlhfTU9ERSAhPSBXQVJQR0ZYX01PREVfNzY4UCAmJiBcCisgICAg V0FSUEdGWF9NT0RFICE9IFdBUlBHRlhfTU9ERV8xMDI0UCAmJiBcCisgICAgV0FSUEdGWF9NT0RF ICE9IFdBUlBHRlhfTU9ERV8xMDgwUAorI2Vycm9yICJXQVJQR0ZYX01PREUgbXVzdCBiZSA0ODAs IDYwMCwgNzIwLCA3NjgsIDEwMjQsIG9yIDEwODAiCisjZW5kaWYKKworI2RlZmluZSBXQVJQR0ZY X1BBUlRfRkIJCTB4MDEKKyNkZWZpbmUgV0FSUEdGWF9QQVJUX1JFRwkweDAyCisjZGVmaW5lIFdB UlBHRlhfUEFSVFNfQUxMCShXQVJQR0ZYX1BBUlRfRkIgfCBXQVJQR0ZYX1BBUlRfUkVHKQorCisj ZGVmaW5lIFdBUlBHRlhfQ1VSU09SX1JFRF9NQVNLCQkweGY4MDBVCisKKyNkZWZpbmUgV0FSUEdG WF9CTFRfV0FJVF9MT09QUwkJMTAwMDAwMAorCitzdHJ1Y3Qgd2FycGdmeF9wYXJ0IHsKKwlib29s IHZhbGlkOworCXZvaWQgKnBhOworCXZvaWQgKnZhOworCXNpemVfdCBzaXplOworCWludCBzZXJu bzsKK307CisKK3N0cnVjdCB3YXJwZ2Z4X21vZGUgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdV9p bnQgd2lkdGg7CisJdV9pbnQgaGVpZ2h0OworCXVfaW50IGRlcHRoOworCXVfaW50IHN0cmlkZTsK Kwl1aW50MzJfdCBjbG9ja19zZWxlY3Q7CisJdWludDMyX3QgY2xvY2tfY29udHJvbDsKKwl1aW50 MzJfdCBmb3JtYXRfcGl0Y2g7CisJdWludDMyX3QgaF9hY3RpdmU7CisJdWludDMyX3QgaF90aW1p bmdfMTsKKwl1aW50MzJfdCBoX3RpbWluZ18yOworCXVpbnQzMl90IHZfYWN0aXZlOworCXVpbnQz Ml90IHZfdGltaW5nXzE7CisJdWludDMyX3Qgdl90aW1pbmdfMjsKKwl1aW50MzJfdCBodl90b3Rh bDsKK307CisKKyNpZiBXQVJQR0ZYX01PREUgPT0gV0FSUEdGWF9NT0RFXzQ4MFAKK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgd2FycGdmeF9tb2RlIHdhcnBnZnhfY29uc29sZV9tb2RlID0geworCS5uYW1l ID0gIjY0MHg0ODBwNzUiLAorCS53aWR0aCA9IDY0MCwKKwkuaGVpZ2h0ID0gNDgwLAorCS5kZXB0 aCA9IFdBUlBHRlhfREVQVEgsCisJLnN0cmlkZSA9IDY0MCAqIHNpemVvZih1aW50MTZfdCksCisJ LmNsb2NrX3NlbGVjdCA9IFdBUlBHRlhfNDgwUF9DTE9DS19TRUxFQ1QsCisJLmNsb2NrX2NvbnRy b2wgPSBXQVJQR0ZYXzQ4MFBfQ0xPQ0tfQ09OVFJPTCwKKwkuZm9ybWF0X3BpdGNoID0gV0FSUEdG WF80ODBQX0ZPUk1BVF9QSVRDSCwKKwkuaF9hY3RpdmUgPSBXQVJQR0ZYXzQ4MFBfSF9BQ1RJVkUs CisJLmhfdGltaW5nXzEgPSBXQVJQR0ZYXzQ4MFBfSF9USU1JTkdfMSwKKwkuaF90aW1pbmdfMiA9 IFdBUlBHRlhfNDgwUF9IX1RJTUlOR18yLAorCS52X2FjdGl2ZSA9IFdBUlBHRlhfNDgwUF9WX0FD VElWRSwKKwkudl90aW1pbmdfMSA9IFdBUlBHRlhfNDgwUF9WX1RJTUlOR18xLAorCS52X3RpbWlu Z18yID0gV0FSUEdGWF80ODBQX1ZfVElNSU5HXzIsCisJLmh2X3RvdGFsID0gV0FSUEdGWF80ODBQ X0hWX1RPVEFMLAorfTsKKyNlbGlmIFdBUlBHRlhfTU9ERSA9PSBXQVJQR0ZYX01PREVfNjAwUAor c3RhdGljIGNvbnN0IHN0cnVjdCB3YXJwZ2Z4X21vZGUgd2FycGdmeF9jb25zb2xlX21vZGUgPSB7 CisJLm5hbWUgPSAiODAweDYwMHA2MCIsCisJLndpZHRoID0gODAwLAorCS5oZWlnaHQgPSA2MDAs CisJLmRlcHRoID0gV0FSUEdGWF9ERVBUSCwKKwkuc3RyaWRlID0gODAwICogc2l6ZW9mKHVpbnQx Nl90KSwKKwkuY2xvY2tfc2VsZWN0ID0gV0FSUEdGWF82MDBQX0NMT0NLX1NFTEVDVCwKKwkuY2xv Y2tfY29udHJvbCA9IFdBUlBHRlhfNjAwUF9DTE9DS19DT05UUk9MLAorCS5mb3JtYXRfcGl0Y2gg PSBXQVJQR0ZYXzYwMFBfRk9STUFUX1BJVENILAorCS5oX2FjdGl2ZSA9IFdBUlBHRlhfNjAwUF9I X0FDVElWRSwKKwkuaF90aW1pbmdfMSA9IFdBUlBHRlhfNjAwUF9IX1RJTUlOR18xLAorCS5oX3Rp bWluZ18yID0gV0FSUEdGWF82MDBQX0hfVElNSU5HXzIsCisJLnZfYWN0aXZlID0gV0FSUEdGWF82 MDBQX1ZfQUNUSVZFLAorCS52X3RpbWluZ18xID0gV0FSUEdGWF82MDBQX1ZfVElNSU5HXzEsCisJ LnZfdGltaW5nXzIgPSBXQVJQR0ZYXzYwMFBfVl9USU1JTkdfMiwKKwkuaHZfdG90YWwgPSBXQVJQ R0ZYXzYwMFBfSFZfVE9UQUwsCit9OworI2VsaWYgV0FSUEdGWF9NT0RFID09IFdBUlBHRlhfTU9E RV83MjBQCitzdGF0aWMgY29uc3Qgc3RydWN0IHdhcnBnZnhfbW9kZSB3YXJwZ2Z4X2NvbnNvbGVf bW9kZSA9IHsKKwkubmFtZSA9ICIxMjgweDcyMHA2MCIsCisJLndpZHRoID0gMTI4MCwKKwkuaGVp Z2h0ID0gNzIwLAorCS5kZXB0aCA9IFdBUlBHRlhfREVQVEgsCisJLnN0cmlkZSA9IDEyODAgKiBz aXplb2YodWludDE2X3QpLAorCS5jbG9ja19zZWxlY3QgPSBXQVJQR0ZYXzcyMFBfQ0xPQ0tfU0VM RUNULAorCS5jbG9ja19jb250cm9sID0gV0FSUEdGWF83MjBQX0NMT0NLX0NPTlRST0wsCisJLmZv cm1hdF9waXRjaCA9IFdBUlBHRlhfNzIwUF9GT1JNQVRfUElUQ0gsCisJLmhfYWN0aXZlID0gV0FS UEdGWF83MjBQX0hfQUNUSVZFLAorCS5oX3RpbWluZ18xID0gV0FSUEdGWF83MjBQX0hfVElNSU5H XzEsCisJLmhfdGltaW5nXzIgPSBXQVJQR0ZYXzcyMFBfSF9USU1JTkdfMiwKKwkudl9hY3RpdmUg PSBXQVJQR0ZYXzcyMFBfVl9BQ1RJVkUsCisJLnZfdGltaW5nXzEgPSBXQVJQR0ZYXzcyMFBfVl9U SU1JTkdfMSwKKwkudl90aW1pbmdfMiA9IFdBUlBHRlhfNzIwUF9WX1RJTUlOR18yLAorCS5odl90 b3RhbCA9IFdBUlBHRlhfNzIwUF9IVl9UT1RBTCwKK307CisjZWxpZiBXQVJQR0ZYX01PREUgPT0g V0FSUEdGWF9NT0RFXzc2OFAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2FycGdmeF9tb2RlIHdhcnBn ZnhfY29uc29sZV9tb2RlID0geworCS5uYW1lID0gIjEwMjR4NzY4cDYwIiwKKwkud2lkdGggPSAx MDI0LAorCS5oZWlnaHQgPSA3NjgsCisJLmRlcHRoID0gV0FSUEdGWF9ERVBUSCwKKwkuc3RyaWRl ID0gMTAyNCAqIHNpemVvZih1aW50MTZfdCksCisJLmNsb2NrX3NlbGVjdCA9IFdBUlBHRlhfNzY4 UF9DTE9DS19TRUxFQ1QsCisJLmNsb2NrX2NvbnRyb2wgPSBXQVJQR0ZYXzc2OFBfQ0xPQ0tfQ09O VFJPTCwKKwkuZm9ybWF0X3BpdGNoID0gV0FSUEdGWF83NjhQX0ZPUk1BVF9QSVRDSCwKKwkuaF9h Y3RpdmUgPSBXQVJQR0ZYXzc2OFBfSF9BQ1RJVkUsCisJLmhfdGltaW5nXzEgPSBXQVJQR0ZYXzc2 OFBfSF9USU1JTkdfMSwKKwkuaF90aW1pbmdfMiA9IFdBUlBHRlhfNzY4UF9IX1RJTUlOR18yLAor CS52X2FjdGl2ZSA9IFdBUlBHRlhfNzY4UF9WX0FDVElWRSwKKwkudl90aW1pbmdfMSA9IFdBUlBH RlhfNzY4UF9WX1RJTUlOR18xLAorCS52X3RpbWluZ18yID0gV0FSUEdGWF83NjhQX1ZfVElNSU5H XzIsCisJLmh2X3RvdGFsID0gV0FSUEdGWF83NjhQX0hWX1RPVEFMLAorfTsKKyNlbGlmIFdBUlBH RlhfTU9ERSA9PSBXQVJQR0ZYX01PREVfMTAyNFAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2FycGdm eF9tb2RlIHdhcnBnZnhfY29uc29sZV9tb2RlID0geworCS5uYW1lID0gIjEyODB4MTAyNHA2MCIs CisJLndpZHRoID0gMTI4MCwKKwkuaGVpZ2h0ID0gMTAyNCwKKwkuZGVwdGggPSBXQVJQR0ZYX0RF UFRILAorCS5zdHJpZGUgPSAxMjgwICogc2l6ZW9mKHVpbnQxNl90KSwKKwkuY2xvY2tfc2VsZWN0 ID0gV0FSUEdGWF8xMDI0UF9DTE9DS19TRUxFQ1QsCisJLmNsb2NrX2NvbnRyb2wgPSBXQVJQR0ZY XzEwMjRQX0NMT0NLX0NPTlRST0wsCisJLmZvcm1hdF9waXRjaCA9IFdBUlBHRlhfMTAyNFBfRk9S TUFUX1BJVENILAorCS5oX2FjdGl2ZSA9IFdBUlBHRlhfMTAyNFBfSF9BQ1RJVkUsCisJLmhfdGlt aW5nXzEgPSBXQVJQR0ZYXzEwMjRQX0hfVElNSU5HXzEsCisJLmhfdGltaW5nXzIgPSBXQVJQR0ZY XzEwMjRQX0hfVElNSU5HXzIsCisJLnZfYWN0aXZlID0gV0FSUEdGWF8xMDI0UF9WX0FDVElWRSwK Kwkudl90aW1pbmdfMSA9IFdBUlBHRlhfMTAyNFBfVl9USU1JTkdfMSwKKwkudl90aW1pbmdfMiA9 IFdBUlBHRlhfMTAyNFBfVl9USU1JTkdfMiwKKwkuaHZfdG90YWwgPSBXQVJQR0ZYXzEwMjRQX0hW X1RPVEFMLAorfTsKKyNlbHNlIC8qIFdBUlBHRlhfTU9ERSA9PSBXQVJQR0ZYX01PREVfMTA4MFAg Ki8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2FycGdmeF9tb2RlIHdhcnBnZnhfY29uc29sZV9tb2Rl ID0geworCS5uYW1lID0gIjE5MjB4MTA4MHA2MCIsCisJLndpZHRoID0gMTkyMCwKKwkuaGVpZ2h0 ID0gMTA4MCwKKwkuZGVwdGggPSBXQVJQR0ZYX0RFUFRILAorCS5zdHJpZGUgPSAxOTIwICogc2l6 ZW9mKHVpbnQxNl90KSwKKwkuY2xvY2tfc2VsZWN0ID0gV0FSUEdGWF8xMDgwUF9DTE9DS19TRUxF Q1QsCisJLmNsb2NrX2NvbnRyb2wgPSBXQVJQR0ZYXzEwODBQX0NMT0NLX0NPTlRST0wsCisJLmZv cm1hdF9waXRjaCA9IFdBUlBHRlhfMTA4MFBfRk9STUFUX1BJVENILAorCS5oX2FjdGl2ZSA9IFdB UlBHRlhfMTA4MFBfSF9BQ1RJVkUsCisJLmhfdGltaW5nXzEgPSBXQVJQR0ZYXzEwODBQX0hfVElN SU5HXzEsCisJLmhfdGltaW5nXzIgPSBXQVJQR0ZYXzEwODBQX0hfVElNSU5HXzIsCisJLnZfYWN0 aXZlID0gV0FSUEdGWF8xMDgwUF9WX0FDVElWRSwKKwkudl90aW1pbmdfMSA9IFdBUlBHRlhfMTA4 MFBfVl9USU1JTkdfMSwKKwkudl90aW1pbmdfMiA9IFdBUlBHRlhfMTA4MFBfVl9USU1JTkdfMiwK KwkuaHZfdG90YWwgPSBXQVJQR0ZYXzEwODBQX0hWX1RPVEFMLAorfTsKKyNlbmRpZgorCitzdHJ1 Y3Qgd2FycGdmeF9zb2Z0YyB7CisJZGV2aWNlX3Qgc2NfZGV2OworCWNvbnN0IHN0cnVjdCB3YXJw Z2Z4X21vZGUgKnNjX21vZGU7CisKKwlzdHJ1Y3QgYnVzX3NwYWNlX3RhZyBzY19yZWdfYnN0Owor CWJ1c19zcGFjZV90YWdfdCBzY19yZWd0OworCWJ1c19zcGFjZV9oYW5kbGVfdCBzY19yZWdoOwor CXZvbGF0aWxlIHVpbnQzMl90ICpzY19yZWd2YTsKKworCXN0cnVjdCBidXNfc3BhY2VfdGFnIHNj X2ZiX2JzdDsKKwlidXNfc3BhY2VfdGFnX3Qgc2NfZmJ0OworCWJ1c19zcGFjZV9oYW5kbGVfdCBz Y19mYmg7CisJYnVzX2FkZHJfdCBzY19mYnBhOworCXNpemVfdCBzY19mYnNpemU7CisKKwlzdHJ1 Y3QgdmNvbnNfc2NyZWVuIHNjX2NvbnNvbGVfc2NyZWVuOworCXN0cnVjdCB2Y29uc19kYXRhIHNj X3ZkOworCXN0cnVjdCB3c3NjcmVlbl9kZXNjciBzY19kZWZhdWx0c2NyZWVuOworCXN0cnVjdCB3 c3NjcmVlbl9kZXNjciBzY184MHgyNXNjcmVlbjsKKwlzdHJ1Y3Qgd3NzY3JlZW5fbGlzdCBzY19z Y3JlZW5saXN0OworCWNvbnN0IHN0cnVjdCB3c3NjcmVlbl9kZXNjciAqc2Nfc2NyZWVuc1syXTsK KworCXVfaW50IHNjX3dzbW9kZTsKKwl1X2ludCBzY193aWR0aDsKKwl1X2ludCBzY19oZWlnaHQ7 CisJdV9pbnQgc2NfZGVwdGg7CisJdV9pbnQgc2Nfc3RyaWRlOworCWJvb2wgc2NfaXNjb25zb2xl OworCisjaWZkZWYgV0FSUEdGWF9BQ0NFTAorCXN0cnVjdCB3c2Rpc3BsYXlfZW11bG9wcyBzY19z d29wczsKKwlib29sIHNjX2FjY2VsX29rOworCXVpbnQzMl90IHNjX2JsdF9zZXJpYWw7CisjZW5k aWYKK307CisKK3N0YXRpYyBzdHJ1Y3Qgd2FycGdmeF9wYXJ0IHdhcnBnZnhfZmJfcGFydDsKK3N0 YXRpYyBzdHJ1Y3Qgd2FycGdmeF9wYXJ0IHdhcnBnZnhfcmVnX3BhcnQ7CitzdGF0aWMgdWludDhf dCB3YXJwZ2Z4X2Vhcmx5X3BhcnRzOworc3RhdGljIGJvb2wgd2FycGdmeF9leGlzdHM7CisKK3N0 YXRpYyBpbnQgd2FycGdmeF9tYXRjaChkZXZpY2VfdCwgY2ZkYXRhX3QsIHZvaWQgKik7CitzdGF0 aWMgdm9pZCB3YXJwZ2Z4X2F0dGFjaChkZXZpY2VfdCwgZGV2aWNlX3QsIHZvaWQgKik7CitzdGF0 aWMgdm9pZCB3YXJwZ2Z4X2RlZmVycmVkKGRldmljZV90KTsKKworc3RhdGljIHZvaWQgd2FycGdm eF9yZXNldChzdHJ1Y3Qgd2FycGdmeF9zb2Z0YyAqKTsKK3N0YXRpYyBib29sIHdhcnBnZnhfc2V0 X2Nsb2NrKHN0cnVjdCB3YXJwZ2Z4X3NvZnRjICopOworc3RhdGljIHZvaWQgd2FycGdmeF9zZXRf bW9kZShzdHJ1Y3Qgd2FycGdmeF9zb2Z0YyAqKTsKKyNpZmRlZiBXQVJQR0ZYX0RFQlVHCitzdGF0 aWMgdm9pZCB3YXJwZ2Z4X2R1bXBfcmVncyhzdHJ1Y3Qgd2FycGdmeF9zb2Z0YyAqLCBjb25zdCBj aGFyICopOworI2VuZGlmCitzdGF0aWMgdm9pZCB3YXJwZ2Z4X2F0dGFjaF93c2Rpc3BsYXkoc3Ry dWN0IHdhcnBnZnhfc29mdGMgKik7CitzdGF0aWMgdm9pZCB3YXJwZ2Z4X2luaXRfc2NyZWVuKHZv aWQgKiwgc3RydWN0IHZjb25zX3NjcmVlbiAqLCBpbnQsIGxvbmcgKik7CitzdGF0aWMgdm9pZCB3 YXJwZ2Z4X2RvX2N1cnNvcihzdHJ1Y3QgcmFzb3BzX2luZm8gKik7CisKKyNpZmRlZiBXQVJQR0ZY X0FDQ0VMCitzdGF0aWMgYm9vbCB3YXJwZ2Z4X3dhaXRfYmxpdHRlcihzdHJ1Y3Qgd2FycGdmeF9z b2Z0YyAqKTsKK3N0YXRpYyBib29sIHdhcnBnZnhfcmVjdGZpbGwoc3RydWN0IHdhcnBnZnhfc29m dGMgKiwgdWludDE2X3QsIHVpbnQxNl90LAorICAgIHVpbnQxNl90LCB1aW50MTZfdCwgdWludDE2 X3QpOworc3RhdGljIGJvb2wgd2FycGdmeF9iaXRibHQoc3RydWN0IHdhcnBnZnhfc29mdGMgKiwg dWludDE2X3QsIHVpbnQxNl90LAorICAgIHVpbnQxNl90LCB1aW50MTZfdCwgdWludDE2X3QsIHVp bnQxNl90KTsKK3N0YXRpYyBib29sIHdhcnBnZnhfdmFsaWRfcmVjdChzdHJ1Y3Qgd2FycGdmeF9z b2Z0YyAqLCB1aW50MzJfdCwgdWludDMyX3QsCisgICAgdWludDMyX3QsIHVpbnQzMl90KTsKK3N0 YXRpYyB2b2lkIHdhcnBnZnhfc29mdHdhcmVfY29weShzdHJ1Y3Qgd2FycGdmeF9zb2Z0YyAqLCB1 aW50MzJfdCwKKyAgICB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCwgdWlu dDMyX3QpOworc3RhdGljIGludCB3YXJwZ2Z4X3dzZmJfYmxpdChzdHJ1Y3Qgd2FycGdmeF9zb2Z0 YyAqLAorICAgIHN0cnVjdCB3c2Rpc3BsYXlpb19ibGl0ICopOworc3RhdGljIHZvaWQgd2FycGdm eF9lcmFzZXJvd3Modm9pZCAqLCBpbnQsIGludCwgbG9uZyk7CitzdGF0aWMgdm9pZCB3YXJwZ2Z4 X2NvcHlyb3dzKHZvaWQgKiwgaW50LCBpbnQsIGludCk7CitzdGF0aWMgdm9pZCB3YXJwZ2Z4X2Vy YXNlY29scyh2b2lkICosIGludCwgaW50LCBpbnQsIGxvbmcpOworc3RhdGljIHZvaWQgd2FycGdm eF9jb3B5Y29scyh2b2lkICosIGludCwgaW50LCBpbnQsIGludCk7CisjZW5kaWYKKworc3RhdGlj IGludCB3YXJwZ2Z4X2lvY3RsKHZvaWQgKiwgdm9pZCAqLCB1X2xvbmcsIHZvaWQgKiwgaW50LCBz dHJ1Y3QgbHdwICopOworc3RhdGljIHBhZGRyX3Qgd2FycGdmeF9tbWFwKHZvaWQgKiwgdm9pZCAq LCBvZmZfdCwgaW50KTsKK3N0YXRpYyBpbnQgd2FycGdmeF9nZXRfZmJpbmZvKHN0cnVjdCB3YXJw Z2Z4X3NvZnRjICosCisgICAgc3RydWN0IHdzZGlzcGxheWlvX2ZiaW5mbyAqKTsKKwordm9pZCB3 YXJwZ2Z4Y25wcm9iZShzdHJ1Y3QgY29uc2RldiAqKTsKK3ZvaWQgd2FycGdmeGNuaW5pdChzdHJ1 Y3QgY29uc2RldiAqKTsKK3ZvaWQgd2FycGdmeGNucG9sbGMoZGV2X3QsIGludCk7Cit2b2lkIHdh cnBnZnhjbnB1dGMoZGV2X3QsIGludCk7CitpbnQgd2FycGdmeGNuZ2V0YyhkZXZfdCk7CisKK0NG QVRUQUNIX0RFQ0xfTkVXKHdhcnBnZngsIHNpemVvZihzdHJ1Y3Qgd2FycGdmeF9zb2Z0YyksCisg ICAgd2FycGdmeF9tYXRjaCwgd2FycGdmeF9hdHRhY2gsIE5VTEwsIE5VTEwpOworCitzdGF0aWMg c3RydWN0IHdzZGlzcGxheV9hY2Nlc3NvcHMgd2FycGdmeF9hY2Nlc3NvcHMgPSB7CisJLmlvY3Rs ID0gd2FycGdmeF9pb2N0bCwKKwkubW1hcCA9IHdhcnBnZnhfbW1hcCwKK307CisKKy8qIERpcmVj dCB2b2xhdGlsZSBNTUlPIG1hdGNoZXMgdGhlIGFjY2Vzc2VzIG1hZGUgYnkgY3NnZnguY2FyZC4g Ki8KKyNkZWZpbmUgV0FSUEdGWF9SRUFEKHNjLCByZWcpIFwKKwkoKHNjKS0+c2NfcmVndmFbKHJl ZykgLyBzaXplb2YodWludDMyX3QpXSkKKyNkZWZpbmUgV0FSUEdGWF9XUklURShzYywgcmVnLCB2 YWwpIGRvIHsgXAorCShzYyktPnNjX3JlZ3ZhWyhyZWcpIC8gc2l6ZW9mKHVpbnQzMl90KV0gPSAo dWludDMyX3QpKHZhbCk7IFwKK30gd2hpbGUgKDApCisKK3N0YXRpYyBpbnQKK3dhcnBnZnhfbWF0 Y2goZGV2aWNlX3QgcGFyZW50LCBjZmRhdGFfdCBjZiwgdm9pZCAqYXV4KQoreworCXN0cnVjdCB6 YnVzX2FyZ3MgKnphcCA9IGF1eDsKKwl1aW50OF90IHBhcnQ7CisKKwlpZiAoemFwLT5tYW5pZCAh PSBXQVJQR0ZYX01BTklEKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoemFwLT5wcm9kaWQpIHsK KwljYXNlIFdBUlBHRlhfUFJPRElEX0ZCOgorCQlwYXJ0ID0gV0FSUEdGWF9QQVJUX0ZCOworCQli cmVhazsKKwljYXNlIFdBUlBHRlhfUFJPRElEX1JFRzoKKwkJcGFydCA9IFdBUlBHRlhfUEFSVF9S RUc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCWlmIChhbWlnYV9y ZWFsY29uZmlnID09IDApIHsKKwkJd2FycGdmeF9lYXJseV9wYXJ0cyB8PSBwYXJ0OworCQl3YXJw Z2Z4X2V4aXN0cyA9CisJCSAgICAod2FycGdmeF9lYXJseV9wYXJ0cyAmIFdBUlBHRlhfUEFSVFNf QUxMKSA9PQorCQkgICAgV0FSUEdGWF9QQVJUU19BTEw7CisJCXJldHVybiAwOworCX0KKworCXJl dHVybiAxOworfQorCitzdGF0aWMgdm9pZAord2FycGdmeF9hdHRhY2goZGV2aWNlX3QgcGFyZW50 LCBkZXZpY2VfdCBzZWxmLCB2b2lkICphdXgpCit7CisJc3RydWN0IHpidXNfYXJncyAqemFwID0g YXV4OworCXN0cnVjdCB3YXJwZ2Z4X3BhcnQgKnBhcnQ7CisKKwlpZiAoemFwLT5wcm9kaWQgPT0g V0FSUEdGWF9QUk9ESURfRkIpIHsKKwkJcGFydCA9ICZ3YXJwZ2Z4X2ZiX3BhcnQ7CisJCWFwcmlu dF9ub3JtYWwoIjogQ1MtTGFiIFdhcnAgR0ZYIGZyYW1lYnVmZmVyLCAlZCBNQiBhcGVydHVyZVxu IiwKKwkJICAgIHphcC0+c2l6ZSAvICgxMDI0ICogMTAyNCkpOworCX0gZWxzZSB7CisJCXBhcnQg PSAmd2FycGdmeF9yZWdfcGFydDsKKwkJYXByaW50X25vcm1hbCgiOiBDUy1MYWIgV2FycCBHRlgg Y29udHJvbCByZWdpc3RlcnNcbiIpOworCX0KKworCXBhcnQtPnZhbGlkID0gdHJ1ZTsKKwlwYXJ0 LT5wYSA9IHphcC0+cGE7CisJcGFydC0+dmEgPSB6YXAtPnZhOworCXBhcnQtPnNpemUgPSB6YXAt PnNpemU7CisJcGFydC0+c2Vybm8gPSB6YXAtPnNlcm5vOworCisJLyoKKwkgKiBQcm9kdWN0IDEw MSBvd25zIHRoZSB3c2Rpc3BsYXkgaW5zdGFuY2UuICBEZWZlcnJpbmcgaXRzIGNvbXBsZXRpb24K KwkgKiB1bnRpbCB6YnVzIGhhcyBhdHRhY2hlZCBhbGwgY2hpbGRyZW4gbWFrZXMgcHJvZHVjdCBv cmRlcmluZyBpcnJlbGV2YW50LgorCSAqLworCWlmICh6YXAtPnByb2RpZCA9PSBXQVJQR0ZYX1BS T0RJRF9SRUcpCisJCWNvbmZpZ19kZWZlcihzZWxmLCB3YXJwZ2Z4X2RlZmVycmVkKTsKK30KKwor c3RhdGljIHZvaWQKK3dhcnBnZnhfZGVmZXJyZWQoZGV2aWNlX3Qgc2VsZikKK3sKKwlzdHJ1Y3Qg d2FycGdmeF9zb2Z0YyAqc2MgPSBkZXZpY2VfcHJpdmF0ZShzZWxmKTsKKwlzaXplX3QgdmlzaWJs ZV9zaXplOworCisJaWYgKCF3YXJwZ2Z4X2ZiX3BhcnQudmFsaWQgfHwgIXdhcnBnZnhfcmVnX3Bh cnQudmFsaWQpIHsKKwkJYXByaW50X2Vycm9yX2RldihzZWxmLAorCQkgICAgImJvdGggZnJhbWVi dWZmZXIgYW5kIGNvbnRyb2wgZnVuY3Rpb25zIGFyZSByZXF1aXJlZFxuIik7CisJCXJldHVybjsK Kwl9CisKKwlpZiAod2FycGdmeF9yZWdfcGFydC5zaXplIDwgV0FSUEdGWF9SRUdfU0laRSkgewor CQlhcHJpbnRfZXJyb3JfZGV2KHNlbGYsICJjb250cm9sIGFwZXJ0dXJlIGlzIG9ubHkgJXp1IGJ5 dGVzXG4iLAorCQkgICAgd2FycGdmeF9yZWdfcGFydC5zaXplKTsKKwkJcmV0dXJuOworCX0KKwor CXNjLT5zY19kZXYgPSBzZWxmOworCXNjLT5zY19tb2RlID0gJndhcnBnZnhfY29uc29sZV9tb2Rl OworCXNjLT5zY193aWR0aCA9IHNjLT5zY19tb2RlLT53aWR0aDsKKwlzYy0+c2NfaGVpZ2h0ID0g c2MtPnNjX21vZGUtPmhlaWdodDsKKwlzYy0+c2NfZGVwdGggPSBzYy0+c2NfbW9kZS0+ZGVwdGg7 CisJc2MtPnNjX3N0cmlkZSA9IHNjLT5zY19tb2RlLT5zdHJpZGU7CisJdmlzaWJsZV9zaXplID0g c2MtPnNjX3N0cmlkZSAqIHNjLT5zY19oZWlnaHQ7CisKKwlzYy0+c2NfZmJzaXplID0gTUlOKHdh cnBnZnhfZmJfcGFydC5zaXplLAorCSAgICAoc2l6ZV90KVdBUlBHRlhfRkJfVVNBQkxFX1NJWkUp OworCWlmIChzYy0+c2NfZmJzaXplIDwgdmlzaWJsZV9zaXplKSB7CisJCWFwcmludF9lcnJvcl9k ZXYoc2VsZiwKKwkJICAgICJmcmFtZWJ1ZmZlciBpcyB0b28gc21hbGwgZm9yICVzLCAxNiBicHBc biIsCisJCSAgICBzYy0+c2NfbW9kZS0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlzYy0+c2Nf cmVnX2JzdC5iYXNlID0gKGJ1c19hZGRyX3Qpd2FycGdmeF9yZWdfcGFydC52YTsKKwlzYy0+c2Nf cmVnX2JzdC5hYnNtID0gJmFtaWdhX2J1c19zdHJpZGVfMTsKKwlzYy0+c2NfcmVndCA9ICZzYy0+ c2NfcmVnX2JzdDsKKwlpZiAoYnVzX3NwYWNlX21hcChzYy0+c2NfcmVndCwgMCwgV0FSUEdGWF9S RUdfU0laRSwgMCwKKwkgICAgJnNjLT5zY19yZWdoKSkgeworCQlhcHJpbnRfZXJyb3JfZGV2KHNl bGYsICJ1bmFibGUgdG8gbWFwIGNvbnRyb2wgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0dXJuOworCX0K KwlzYy0+c2NfcmVndmEgPSBidXNfc3BhY2VfdmFkZHIoc2MtPnNjX3JlZ3QsIHNjLT5zY19yZWdo KTsKKwlpZiAoc2MtPnNjX3JlZ3ZhID09IE5VTEwpIHsKKwkJYXByaW50X2Vycm9yX2RldihzZWxm LCAiY29udHJvbCByZWdpc3RlcnMgYXJlIG5vdCBsaW5lYXJcbiIpOworCQlyZXR1cm47CisJfQor I2lmZGVmIFdBUlBHRlhfREVCVUcKKwlhcHJpbnRfbm9ybWFsX2RldihzZWxmLCAicmVnaXN0ZXIg YXBlcnR1cmUgcGEgJXAsIHZhIDB4JTA4bHhcbiIsCisJICAgIHdhcnBnZnhfcmVnX3BhcnQucGEs ICh1X2xvbmcpKHVpbnRwdHJfdClzYy0+c2NfcmVndmEpOworCXdhcnBnZnhfZHVtcF9yZWdzKHNj LCAiaW5pdGlhbCIpOworI2VuZGlmCisKKwlzYy0+c2NfZmJfYnN0LmJhc2UgPSAoYnVzX2FkZHJf dCl3YXJwZ2Z4X2ZiX3BhcnQudmE7CisJc2MtPnNjX2ZiX2JzdC5hYnNtID0gJmFtaWdhX2J1c19z dHJpZGVfMTsKKwlzYy0+c2NfZmJ0ID0gJnNjLT5zY19mYl9ic3Q7CisJaWYgKGJ1c19zcGFjZV9t YXAoc2MtPnNjX2ZidCwgMCwgc2MtPnNjX2Zic2l6ZSwKKwkgICAgQlVTX1NQQUNFX01BUF9MSU5F QVIsICZzYy0+c2NfZmJoKSkgeworCQlhcHJpbnRfZXJyb3JfZGV2KHNlbGYsICJ1bmFibGUgdG8g bWFwIGZyYW1lYnVmZmVyXG4iKTsKKwkJcmV0dXJuOworCX0KKwlzYy0+c2NfZmJwYSA9IChidXNf YWRkcl90KXdhcnBnZnhfZmJfcGFydC5wYTsKKworCXdhcnBnZnhfcmVzZXQoc2MpOworI2lmZGVm IFdBUlBHRlhfREVCVUcKKwl3YXJwZ2Z4X2R1bXBfcmVncyhzYywgImFmdGVyIHJlc2V0Iik7Cisj ZW5kaWYKKwlpZiAoIXdhcnBnZnhfc2V0X2Nsb2NrKHNjKSkKKwkJcmV0dXJuOworI2lmZGVmIFdB UlBHRlhfREVCVUcKKwl3YXJwZ2Z4X2R1bXBfcmVncyhzYywgImFmdGVyIGNsb2NrIik7CisjZW5k aWYKKwltZW1zZXQoYnVzX3NwYWNlX3ZhZGRyKHNjLT5zY19mYnQsIHNjLT5zY19mYmgpLCAwLCB2 aXNpYmxlX3NpemUpOworCXdhcnBnZnhfc2V0X21vZGUoc2MpOworI2lmZGVmIFdBUlBHRlhfREVC VUcKKwl3YXJwZ2Z4X2R1bXBfcmVncyhzYywgImFmdGVyIG1vZGUiKTsKKyNlbmRpZgorCisJYXBy aW50X25vcm1hbF9kZXYoc2VsZiwKKwkgICAgIiVzLCAldSBicHAsIHN0cmlkZSAldSwgJXp1IE1C IHVzYWJsZSB2aWRlbyBtZW1vcnlcbiIsCisJICAgIHNjLT5zY19tb2RlLT5uYW1lLCBzYy0+c2Nf ZGVwdGgsIHNjLT5zY19zdHJpZGUsCisJICAgIHNjLT5zY19mYnNpemUgLyAoMTAyNCAqIDEwMjQp KTsKKworI2lmZGVmIFdBUlBHRlhfQUNDRUwKKwlzYy0+c2NfYWNjZWxfb2sgPSB3YXJwZ2Z4X3dh aXRfYmxpdHRlcihzYyk7CisJaWYgKHNjLT5zY19hY2NlbF9vaykKKwkJYXByaW50X25vcm1hbF9k ZXYoc2VsZiwKKwkJICAgICIyRCBjb25zb2xlL3dzZmIgYWNjZWxlcmF0aW9uIGVuYWJsZWRcbiIp OworCWVsc2UKKwkJYXByaW50X2Vycm9yX2RldihzZWxmLAorCQkgICAgIjJEIGVuZ2luZSBpcyBi dXN5OyB1c2luZyBzb2Z0d2FyZSByYXN0ZXIgb3BlcmF0aW9uc1xuIik7CisjZW5kaWYKKworCXdh cnBnZnhfYXR0YWNoX3dzZGlzcGxheShzYyk7Cit9CisKK3N0YXRpYyB2b2lkCit3YXJwZ2Z4X3Jl c2V0KHN0cnVjdCB3YXJwZ2Z4X3NvZnRjICpzYykKK3sKKwl1X2ludCBpOworCisJLyogU2VxdWVu Y2UgdXNlZCBieSBjc2dmeC5jYXJkIGJlZm9yZSBlbmFibGluZyB0aGUgZmlyc3QgbW9kZS4gKi8K KwlXQVJQR0ZYX1dSSVRFKHNjLCBXQVJQR0ZYX1JFR19DT01NQU5EX1JFU0VULCAwKTsKKwlmb3Ig KGkgPSAwOyBpIDwgMHgwYzAwOyBpKyspCisJCVdBUlBHRlhfV1JJVEUoc2MsIFdBUlBHRlhfUkVH X0NPTU1BTkQsIDApOworfQorCitzdGF0aWMgYm9vbAord2FycGdmeF9zZXRfY2xvY2soc3RydWN0 IHdhcnBnZnhfc29mdGMgKnNjKQoreworCWNvbnN0IHN0cnVjdCB3YXJwZ2Z4X21vZGUgKm1vZGUg PSBzYy0+c2NfbW9kZTsKKwl1aW50MzJfdCB2YWx1ZTsKKwl1X2ludCBpOworCisJdmFsdWUgPSBX QVJQR0ZYX1JFQUQoc2MsIFdBUlBHRlhfUkVHX0NMT0NLX0NPTlRST0wpOworCWlmICgodmFsdWUg JiBXQVJQR0ZYX0NMT0NLX1NFTEVDVF9NQVNLKSA9PQorCSAgICBtb2RlLT5jbG9ja19zZWxlY3Qg JiYKKwkgICAgKFdBUlBHRlhfUkVBRChzYywgV0FSUEdGWF9SRUdfQ0xPQ0tfU1RBVFVTKSAmCisJ ICAgIFdBUlBHRlhfQ0xPQ0tfUkVBRFkpICE9IDApCisJCXJldHVybiB0cnVlOworCisJV0FSUEdG WF9XUklURShzYywgV0FSUEdGWF9SRUdfQ0xPQ0tfQ09OVFJPTCwKKwkgICAgbW9kZS0+Y2xvY2tf Y29udHJvbCk7CisJZm9yIChpID0gMDsgaSA8IDEwMDAwMDA7IGkrKykgeworCQlpZiAoKFdBUlBH RlhfUkVBRChzYywgV0FSUEdGWF9SRUdfQ0xPQ0tfU1RBVFVTKSAmCisJCSAgICBXQVJQR0ZYX0NM T0NLX1JFQURZKSAhPSAwKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJYXByaW50X2Vycm9yX2Rl dihzYy0+c2NfZGV2LAorCSAgICAiJXMgcGl4ZWwgY2xvY2sgZGlkIG5vdCBsb2NrOiBzdGF0dXMg JTA4eCBjb250cm9sICUwOHhcbiIsCisJICAgIG1vZGUtPm5hbWUsCisJICAgICh1bnNpZ25lZClX QVJQR0ZYX1JFQUQoc2MsIFdBUlBHRlhfUkVHX0NMT0NLX1NUQVRVUyksCisJICAgICh1bnNpZ25l ZClXQVJQR0ZYX1JFQUQoc2MsIFdBUlBHRlhfUkVHX0NMT0NLX0NPTlRST0wpKTsKKwlyZXR1cm4g ZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkCit3YXJwZ2Z4X3NldF9tb2RlKHN0cnVjdCB3YXJwZ2Z4 X3NvZnRjICpzYykKK3sKKwljb25zdCBzdHJ1Y3Qgd2FycGdmeF9tb2RlICptb2RlID0gc2MtPnNj X21vZGU7CisJdWludDMyX3QgdmFsdWU7CisKKwl2YWx1ZSA9IFdBUlBHRlhfUkVBRChzYywgV0FS UEdGWF9SRUdfU0NBTEVfQ09OVFJPTCk7CisJdmFsdWUgJj0gfjB4MDAwMDAwM2NVOworCVdBUlBH RlhfV1JJVEUoc2MsIFdBUlBHRlhfUkVHX1NDQUxFX0NPTlRST0wsIHZhbHVlKTsKKworCVdBUlBH RlhfV1JJVEUoc2MsIFdBUlBHRlhfUkVHX09VVFBVVF9BVVgsIDApOworCVdBUlBHRlhfV1JJVEUo c2MsIFdBUlBHRlhfUkVHX0ZCX09GRlNFVCwgMCk7CisJV0FSUEdGWF9XUklURShzYywgV0FSUEdG WF9SRUdfRk9STUFUX1BJVENILCBtb2RlLT5mb3JtYXRfcGl0Y2gpOworCVdBUlBHRlhfV1JJVEUo c2MsIFdBUlBHRlhfUkVHX0hfQUNUSVZFLCBtb2RlLT5oX2FjdGl2ZSk7CisJV0FSUEdGWF9XUklU RShzYywgV0FSUEdGWF9SRUdfSF9USU1JTkdfMSwgbW9kZS0+aF90aW1pbmdfMSk7CisJV0FSUEdG WF9XUklURShzYywgV0FSUEdGWF9SRUdfSF9USU1JTkdfMiwgbW9kZS0+aF90aW1pbmdfMik7CisJ V0FSUEdGWF9XUklURShzYywgV0FSUEdGWF9SRUdfVl9BQ1RJVkUsIG1vZGUtPnZfYWN0aXZlKTsK KwlXQVJQR0ZYX1dSSVRFKHNjLCBXQVJQR0ZYX1JFR19WX1RJTUlOR18xLCBtb2RlLT52X3RpbWlu Z18xKTsKKwlXQVJQR0ZYX1dSSVRFKHNjLCBXQVJQR0ZYX1JFR19WX1RJTUlOR18yLCBtb2RlLT52 X3RpbWluZ18yKTsKKwlXQVJQR0ZYX1dSSVRFKHNjLCBXQVJQR0ZYX1JFR19IVl9UT1RBTCwgbW9k ZS0+aHZfdG90YWwpOworCVdBUlBHRlhfV1JJVEUoc2MsIFdBUlBHRlhfUkVHX01PREVfQ09NTUlU LCBXQVJQR0ZYX01PREVfQ09NTUlUKTsKKwlXQVJQR0ZYX1dSSVRFKHNjLCBXQVJQR0ZYX1JFR19N T0RFX0NPTU1JVCwgV0FSUEdGWF9NT0RFX0VOQUJMRSk7CisKKwlidXNfc3BhY2VfYmFycmllcihz Yy0+c2NfcmVndCwgc2MtPnNjX3JlZ2gsIDAsCisJICAgIFdBUlBHRlhfUkVHX1NJWkUsIEJVU19T UEFDRV9CQVJSSUVSX1dSSVRFKTsKK30KKworI2lmZGVmIFdBUlBHRlhfREVCVUcKK3N0YXRpYyB2 b2lkCit3YXJwZ2Z4X2R1bXBfcmVncyhzdHJ1Y3Qgd2FycGdmeF9zb2Z0YyAqc2MsIGNvbnN0IGNo YXIgKndoZXJlKQoreworCXVpbnQzMl90IGJ1czAwLCBidXMwNCwgYnVzMTFjOworCisJYnVzMDAg PSBidXNfc3BhY2VfcmVhZF80KHNjLT5zY19yZWd0LCBzYy0+c2NfcmVnaCwKKwkgICAgV0FSUEdG WF9SRUdfRkJfT0ZGU0VUKTsKKwlidXMwNCA9IGJ1c19zcGFjZV9yZWFkXzQoc2MtPnNjX3JlZ3Qs IHNjLT5zY19yZWdoLAorCSAgICBXQVJQR0ZYX1JFR19GT1JNQVRfUElUQ0gpOworCWJ1czExYyA9 IGJ1c19zcGFjZV9yZWFkXzQoc2MtPnNjX3JlZ3QsIHNjLT5zY19yZWdoLAorCSAgICBXQVJQR0ZY X1JFR19NT0RFX0NPTU1JVCk7CisKKwlhcHJpbnRfbm9ybWFsX2RldihzYy0+c2NfZGV2LAorCSAg ICAiJXM6IGRpcmVjdCAwMDA9JTA4eCAwMDQ9JTA4eCAxMWM9JTA4eDsgIgorCSAgICAiYnVzIDAw MD0lMDh4IDAwND0lMDh4IDExYz0lMDh4XG4iLAorCSAgICB3aGVyZSwKKwkgICAgKHVuc2lnbmVk KVdBUlBHRlhfUkVBRChzYywgV0FSUEdGWF9SRUdfRkJfT0ZGU0VUKSwKKwkgICAgKHVuc2lnbmVk KVdBUlBHRlhfUkVBRChzYywgV0FSUEdGWF9SRUdfRk9STUFUX1BJVENIKSwKKwkgICAgKHVuc2ln bmVkKVdBUlBHRlhfUkVBRChzYywgV0FSUEdGWF9SRUdfTU9ERV9DT01NSVQpLAorCSAgICAodW5z aWduZWQpYnVzMDAsICh1bnNpZ25lZClidXMwNCwgKHVuc2lnbmVkKWJ1czExYyk7CisJYXByaW50 X25vcm1hbF9kZXYoc2MtPnNjX2RldiwKKwkgICAgIiVzOiAwMzA9JTA4eCAxMDA9JTA4eCAxMDQ9 JTA4eCAxMDg9JTA4eFxuIiwgd2hlcmUsCisJICAgICh1bnNpZ25lZClXQVJQR0ZYX1JFQUQoc2Ms IFdBUlBHRlhfUkVHX09VVFBVVF9BVVgpLAorCSAgICAodW5zaWduZWQpV0FSUEdGWF9SRUFEKHNj LCBXQVJQR0ZYX1JFR19IX0FDVElWRSksCisJICAgICh1bnNpZ25lZClXQVJQR0ZYX1JFQUQoc2Ms IFdBUlBHRlhfUkVHX0hfVElNSU5HXzEpLAorCSAgICAodW5zaWduZWQpV0FSUEdGWF9SRUFEKHNj LCBXQVJQR0ZYX1JFR19IX1RJTUlOR18yKSk7CisJYXByaW50X25vcm1hbF9kZXYoc2MtPnNjX2Rl diwKKwkgICAgIiVzOiAxMGM9JTA4eCAxMTA9JTA4eCAxMTQ9JTA4eCAxMTg9JTA4eCAxMjg9JTA4 eFxuIiwKKwkgICAgd2hlcmUsCisJICAgICh1bnNpZ25lZClXQVJQR0ZYX1JFQUQoc2MsIFdBUlBH RlhfUkVHX1ZfQUNUSVZFKSwKKwkgICAgKHVuc2lnbmVkKVdBUlBHRlhfUkVBRChzYywgV0FSUEdG WF9SRUdfVl9USU1JTkdfMSksCisJICAgICh1bnNpZ25lZClXQVJQR0ZYX1JFQUQoc2MsIFdBUlBH RlhfUkVHX1ZfVElNSU5HXzIpLAorCSAgICAodW5zaWduZWQpV0FSUEdGWF9SRUFEKHNjLCBXQVJQ R0ZYX1JFR19IVl9UT1RBTCksCisJICAgICh1bnNpZ25lZClXQVJQR0ZYX1JFQUQoc2MsIFdBUlBH RlhfUkVHX1NDQUxFX0NPTlRST0wpKTsKKwlhcHJpbnRfbm9ybWFsX2RldihzYy0+c2NfZGV2LAor CSAgICAiJXM6IGNsb2NrIDIwMD0lMDh4IDIwND0lMDh4OyBpbnRlcnJ1cHQgMjA4PSUwOHggMjBj PSUwOHhcbiIsCisJICAgIHdoZXJlLAorCSAgICAodW5zaWduZWQpV0FSUEdGWF9SRUFEKHNjLCBX QVJQR0ZYX1JFR19DTE9DS19TVEFUVVMpLAorCSAgICAodW5zaWduZWQpV0FSUEdGWF9SRUFEKHNj LCBXQVJQR0ZYX1JFR19DTE9DS19DT05UUk9MKSwKKwkgICAgKHVuc2lnbmVkKVdBUlBHRlhfUkVB RChzYywgV0FSUEdGWF9SRUdfSU5URVJSVVBUX1NUQVRVUyksCisJICAgICh1bnNpZ25lZClXQVJQ R0ZYX1JFQUQoc2MsIFdBUlBHRlhfUkVHX0lOVEVSUlVQVF9DT05UUk9MKSk7CisJYXByaW50X25v cm1hbF9kZXYoc2MtPnNjX2RldiwKKwkgICAgIiVzOiBibGl0dGVyIHN0YXR1cyAwMjQ9JTA4eFxu Iiwgd2hlcmUsCisJICAgICh1bnNpZ25lZClXQVJQR0ZYX1JFQUQoc2MsIFdBUlBHRlhfUkVHX0JM VF9TVEFUVVMpKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZAord2FycGdmeF9hdHRhY2hfd3Nk aXNwbGF5KHN0cnVjdCB3YXJwZ2Z4X3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgcmFzb3BzX2luZm8g KnJpOworCXN0cnVjdCB3c2VtdWxkaXNwbGF5ZGV2X2F0dGFjaF9hcmdzIHdzX2FhOworCWxvbmcg ZGVmYXR0cjsKKworI2lmZGVmIFdBUlBHRlhfQ09OU09MRQorCXNjLT5zY19pc2NvbnNvbGUgPSB0 cnVlOworI2Vsc2UKKwlzYy0+c2NfaXNjb25zb2xlID0gZmFsc2U7CisjZW5kaWYKKworCXNjLT5z Y19kZWZhdWx0c2NyZWVuID0gKHN0cnVjdCB3c3NjcmVlbl9kZXNjcikgeworCSAgICAiZGVmYXVs dCIsIDAsIDAsIE5VTEwsIDgsIDE2LAorCSAgICBXU1NDUkVFTl9XU0NPTE9SUyB8IFdTU0NSRUVO X0hJTElULCBOVUxMCisJfTsKKwlzYy0+c2NfODB4MjVzY3JlZW4gPSAoc3RydWN0IHdzc2NyZWVu X2Rlc2NyKSB7CisJICAgICI4MHgyNSIsIDgwLCAyNSwgTlVMTCwgOCwgMTYsCisJICAgIFdTU0NS RUVOX1dTQ09MT1JTIHwgV1NTQ1JFRU5fSElMSVQsIE5VTEwKKwl9OworCXNjLT5zY19zY3JlZW5z WzBdID0gJnNjLT5zY19kZWZhdWx0c2NyZWVuOworCXNjLT5zY19zY3JlZW5zWzFdID0gJnNjLT5z Y184MHgyNXNjcmVlbjsKKwlzYy0+c2Nfc2NyZWVubGlzdCA9IChzdHJ1Y3Qgd3NzY3JlZW5fbGlz dCkgeworCSAgICAyLCBzYy0+c2Nfc2NyZWVucworCX07CisJc2MtPnNjX3dzbW9kZSA9IFdTRElT UExBWUlPX01PREVfRU1VTDsKKworCXZjb25zX2luaXQoJnNjLT5zY192ZCwgc2MsICZzYy0+c2Nf ZGVmYXVsdHNjcmVlbiwKKwkgICAgJndhcnBnZnhfYWNjZXNzb3BzKTsKKwlzYy0+c2NfdmQuaW5p dF9zY3JlZW4gPSB3YXJwZ2Z4X2luaXRfc2NyZWVuOworCXJpID0gJnNjLT5zY19jb25zb2xlX3Nj cmVlbi5zY3Jfcmk7CisKKwl2Y29uc19pbml0X3NjcmVlbigmc2MtPnNjX3ZkLCAmc2MtPnNjX2Nv bnNvbGVfc2NyZWVuLCAxLAorCSAgICAmZGVmYXR0cik7CisJc2MtPnNjX2NvbnNvbGVfc2NyZWVu LnNjcl9mbGFncyB8PSBWQ09OU19TQ1JFRU5fSVNfU1RBVElDOworCisJc2MtPnNjX2RlZmF1bHRz Y3JlZW4udGV4dG9wcyA9ICZyaS0+cmlfb3BzOworCXNjLT5zY19kZWZhdWx0c2NyZWVuLmNhcGFi aWxpdGllcyA9IHJpLT5yaV9jYXBzOworCXNjLT5zY19kZWZhdWx0c2NyZWVuLm5yb3dzID0gcmkt PnJpX3Jvd3M7CisJc2MtPnNjX2RlZmF1bHRzY3JlZW4ubmNvbHMgPSByaS0+cmlfY29sczsKKwlz Yy0+c2NfZGVmYXVsdHNjcmVlbi5mb250d2lkdGggPSByaS0+cmlfZm9udC0+Zm9udHdpZHRoOwor CXNjLT5zY19kZWZhdWx0c2NyZWVuLmZvbnRoZWlnaHQgPSByaS0+cmlfZm9udC0+Zm9udGhlaWdo dDsKKwlzYy0+c2NfODB4MjVzY3JlZW4udGV4dG9wcyA9ICZyaS0+cmlfb3BzOworCXNjLT5zY184 MHgyNXNjcmVlbi5jYXBhYmlsaXRpZXMgPSByaS0+cmlfY2FwczsKKworCWlmIChzYy0+c2NfaXNj b25zb2xlKSB7CisJCXZjb25zX3JlZHJhd19zY3JlZW4oJnNjLT5zY19jb25zb2xlX3NjcmVlbik7 CisKKwkJd3NkaXNwbGF5X2NuYXR0YWNoKCZzYy0+c2NfZGVmYXVsdHNjcmVlbiwgcmksIDAsIDAs CisJCSAgICBkZWZhdHRyKTsKKwkJdmNvbnNfcmVwbGF5X21zZ2J1Zigmc2MtPnNjX2NvbnNvbGVf c2NyZWVuKTsKKwl9CisKKwl3c19hYS5jb25zb2xlID0gc2MtPnNjX2lzY29uc29sZTsKKwl3c19h YS5zY3JkYXRhID0gJnNjLT5zY19zY3JlZW5saXN0OworCXdzX2FhLmFjY2Vzc29wcyA9ICZ3YXJw Z2Z4X2FjY2Vzc29wczsKKwl3c19hYS5hY2Nlc3Njb29raWUgPSAmc2MtPnNjX3ZkOworCisJY29u ZmlnX2ZvdW5kKHNjLT5zY19kZXYsICZ3c19hYSwgd3NlbXVsZGlzcGxheWRldnByaW50LCBDRkFS R1NfTk9ORSk7Cit9CisKK3N0YXRpYyB2b2lkCit3YXJwZ2Z4X2luaXRfc2NyZWVuKHZvaWQgKmNv b2tpZSwgc3RydWN0IHZjb25zX3NjcmVlbiAqc2NyLCBpbnQgZXhpc3RpbmcsCisgICAgbG9uZyAq ZGVmYXR0cikKK3sKKwlzdHJ1Y3Qgd2FycGdmeF9zb2Z0YyAqc2MgPSBjb29raWU7CisJc3RydWN0 IHJhc29wc19pbmZvICpyaSA9ICZzY3ItPnNjcl9yaTsKKwlib29sIGZpeGVkX2dlb21ldHJ5Owor CisJc2NyLT5zY3JfZmxhZ3MgfD0gVkNPTlNfTE9BREZPTlQ7CisJd3Nmb250X2luaXQoKTsKKwlm aXhlZF9nZW9tZXRyeSA9IHNjci0+c2NyX3R5cGUgIT0gTlVMTCAmJgorCSAgICBzY3ItPnNjcl90 eXBlICE9ICZzYy0+c2NfZGVmYXVsdHNjcmVlbjsKKworCXJpLT5yaV9iaXRzID0gYnVzX3NwYWNl X3ZhZGRyKHNjLT5zY19mYnQsIHNjLT5zY19mYmgpOworCXJpLT5yaV9kZXB0aCA9IHNjLT5zY19k ZXB0aDsKKwlyaS0+cmlfd2lkdGggPSBzYy0+c2Nfd2lkdGg7CisJcmktPnJpX2hlaWdodCA9IHNj LT5zY19oZWlnaHQ7CisJcmktPnJpX3N0cmlkZSA9IHNjLT5zY19zdHJpZGU7CisJcmktPnJpX2Zs ZyA9IGZpeGVkX2dlb21ldHJ5ID8gUklfQ0VOVEVSIDogMDsKKworCS8qIGNzZ2Z4IFJHQiBmb3Jt YXQgMTAgaXMgYmlnLWVuZGlhbiBSNUc2QjUuICovCisJcmktPnJpX3JudW0gPSA1OworCXJpLT5y aV9nbnVtID0gNjsKKwlyaS0+cmlfYm51bSA9IDU7CisJcmktPnJpX3Jwb3MgPSAxMTsKKwlyaS0+ cmlfZ3BvcyA9IDU7CisJcmktPnJpX2Jwb3MgPSAwOworCisJaWYgKGZpeGVkX2dlb21ldHJ5KSB7 CisJCXJhc29wc19pbml0KHJpLCBzY3ItPnNjcl90eXBlLT5ucm93cywKKwkJICAgIHNjci0+c2Ny X3R5cGUtPm5jb2xzKTsKKwl9IGVsc2UgeworCQlyYXNvcHNfaW5pdChyaSwgMCwgMCk7CisJfQor CXJpLT5yaV9jYXBzID0gV1NTQ1JFRU5fV1NDT0xPUlM7CisJaWYgKCFmaXhlZF9nZW9tZXRyeSkg eworCQlyYXNvcHNfcmVjb25maWcocmksCisJCSAgICByaS0+cmlfaGVpZ2h0IC8gcmktPnJpX2Zv bnQtPmZvbnRoZWlnaHQsCisJCSAgICByaS0+cmlfd2lkdGggLyByaS0+cmlfZm9udC0+Zm9udHdp ZHRoKTsKKwl9CisJcmktPnJpX2h3ID0gc2NyOworCisJcmktPnJpX2RvX2N1cnNvciA9IHdhcnBn ZnhfZG9fY3Vyc29yOworCisjaWZkZWYgV0FSUEdGWF9BQ0NFTAorCXNjLT5zY19zd29wcyA9IHJp LT5yaV9vcHM7CisJcmktPnJpX29wcy5lcmFzZXJvd3MgPSB3YXJwZ2Z4X2VyYXNlcm93czsKKwly aS0+cmlfb3BzLmNvcHlyb3dzID0gd2FycGdmeF9jb3B5cm93czsKKwlyaS0+cmlfb3BzLmVyYXNl Y29scyA9IHdhcnBnZnhfZXJhc2Vjb2xzOworCXJpLT5yaV9vcHMuY29weWNvbHMgPSB3YXJwZ2Z4 X2NvcHljb2xzOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkCit3YXJwZ2Z4X2RvX2N1cnNvcihz dHJ1Y3QgcmFzb3BzX2luZm8gKnJpKQoreworCXN0cnVjdCB2Y29uc19zY3JlZW4gKnNjciA9IHJp LT5yaV9odzsKKwlzdHJ1Y3Qgd2FycGdmeF9zb2Z0YyAqc2MgPSBzY3ItPnNjcl9jb29raWU7CisJ dm9sYXRpbGUgdWludDE2X3QgKmRzdDsKKwlidXNfc2l6ZV90IG9mZnNldCwgc2l6ZTsKKwl1X2lu dCB3aWR0aCwgaGVpZ2h0LCB4LCB5OworCisJd2lkdGggPSByaS0+cmlfZm9udC0+Zm9udHdpZHRo OworCWhlaWdodCA9IHJpLT5yaV9mb250LT5mb250aGVpZ2h0OworCW9mZnNldCA9IChyaS0+cmlf eW9yaWdpbiArIHJpLT5yaV9jcm93ICogaGVpZ2h0KSAqIHJpLT5yaV9zdHJpZGUgKworCSAgICAo cmktPnJpX3hvcmlnaW4gKyByaS0+cmlfY2NvbCAqIHdpZHRoKSAqIHNpemVvZih1aW50MTZfdCk7 CisJc2l6ZSA9IChoZWlnaHQgLSAxKSAqIHJpLT5yaV9zdHJpZGUgKyB3aWR0aCAqIHNpemVvZih1 aW50MTZfdCk7CisJaWYgKG9mZnNldCArIHNpemUgPiBzYy0+c2NfZmJzaXplKQorCQlyZXR1cm47 CisKKwkvKiBUb2dnbGUgb25seSB0aGUgcmVkIGNvbXBvbmVudCwgbGlrZSB0aGUgY29sb3JlZCBB R0Egd3Njb25zIGN1cnNvci4gKi8KKwlmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKwkJ ZHN0ID0gKHZvbGF0aWxlIHVpbnQxNl90ICopKHJpLT5yaV9vcmlnYml0cyArIG9mZnNldCArCisJ CSAgICB5ICogcmktPnJpX3N0cmlkZSk7CisJCWZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKQor CQkJZHN0W3hdIF49IFdBUlBHRlhfQ1VSU09SX1JFRF9NQVNLOworCX0KKworCWJ1c19zcGFjZV9i YXJyaWVyKHNjLT5zY19mYnQsIHNjLT5zY19mYmgsIG9mZnNldCwgc2l6ZSwKKwkgICAgQlVTX1NQ QUNFX0JBUlJJRVJfV1JJVEUpOworfQorCisjaWZkZWYgV0FSUEdGWF9BQ0NFTAorc3RhdGljIGJv b2wKK3dhcnBnZnhfd2FpdF9ibGl0dGVyKHN0cnVjdCB3YXJwZ2Z4X3NvZnRjICpzYykKK3sKKwl1 X2ludCBpOworCisJZm9yIChpID0gMDsgaSA8IFdBUlBHRlhfQkxUX1dBSVRfTE9PUFM7IGkrKykg eworCQlpZiAoKFdBUlBHRlhfUkVBRChzYywgV0FSUEdGWF9SRUdfQkxUX1NUQVRVUykgJgorCQkg ICAgV0FSUEdGWF9CTFRfU1RBVFVTX0JVU1lfTUFTSykgPT0gMCkKKwkJCXJldHVybiB0cnVlOwor CX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wKK3dhcnBnZnhfcmVjdGZpbGwo c3RydWN0IHdhcnBnZnhfc29mdGMgKnNjLCB1aW50MTZfdCB4LCB1aW50MTZfdCB5LAorICAgIHVp bnQxNl90IHdpZHRoLCB1aW50MTZfdCBoZWlnaHQsIHVpbnQxNl90IGNvbG9yKQoreworCXVpbnQz Ml90IGFkZHJlc3MsIHh5LCBzaXplOworCisJaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAp CisJCXJldHVybiB0cnVlOworCWlmICghc2MtPnNjX2FjY2VsX29rIHx8ICF3YXJwZ2Z4X3dhaXRf YmxpdHRlcihzYykpIHsKKwkJc2MtPnNjX2FjY2VsX29rID0gZmFsc2U7CisJCXJldHVybiBmYWxz ZTsKKwl9CisKKwlhZGRyZXNzID0gKHVpbnQzMl90KShzYy0+c2NfZmJwYSArIHkgKiBzYy0+c2Nf c3RyaWRlICsKKwkgICAgeCAqIHNpemVvZih1aW50MTZfdCkpOworCXh5ID0gKCh1aW50MzJfdCl5 IDw8IDE2KSB8IHg7CisJc2l6ZSA9ICgodWludDMyX3QpaGVpZ2h0IDw8IDE2KSB8IHdpZHRoOwor CisJLyogVGhpcyBpcyB0aGUgUkdCRkJfUjVHNkI1IEZpbGxSZWN0IHNlcXVlbmNlIGZyb20gY3Nn ZnguY2FyZC4gKi8KKwlXQVJQR0ZYX1dSSVRFKHNjLCBXQVJQR0ZYX1JFR19CTFRfRFNUX1NUUklE RSwgc2MtPnNjX3N0cmlkZSk7CisJV0FSUEdGWF9XUklURShzYywgV0FSUEdGWF9SRUdfQkxUX0RT VF9BRERSRVNTLCBhZGRyZXNzKTsKKwlXQVJQR0ZYX1dSSVRFKHNjLCBXQVJQR0ZYX1JFR19CTFRf U0laRSwgc2l6ZSk7CisJV0FSUEdGWF9XUklURShzYywgV0FSUEdGWF9SRUdfQkxUX0RTVF9YWSwg eHkpOworCVdBUlBHRlhfV1JJVEUoc2MsIFdBUlBHRlhfUkVHX0JMVF9DT0xPUiwgY29sb3IpOwor CVdBUlBHRlhfV1JJVEUoc2MsIFdBUlBHRlhfUkVHX0JMVF9DT01NQU5ELAorCSAgICBXQVJQR0ZY X0JMVF9DT01NQU5EX0ZJTExfMTYpOworCWJ1c19zcGFjZV9iYXJyaWVyKHNjLT5zY19yZWd0LCBz Yy0+c2NfcmVnaCwKKwkgICAgV0FSUEdGWF9SRUdfQkxUX1NSQ19BRERSRVNTLAorCSAgICBXQVJQ R0ZYX1JFR19PVVRQVVRfQVVYIC0gV0FSUEdGWF9SRUdfQkxUX1NSQ19BRERSRVNTLAorCSAgICBC VVNfU1BBQ0VfQkFSUklFUl9XUklURSk7CisKKwlpZiAoIXdhcnBnZnhfd2FpdF9ibGl0dGVyKHNj KSkgeworCQlzYy0+c2NfYWNjZWxfb2sgPSBmYWxzZTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwly ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wKK3dhcnBnZnhfYml0Ymx0KHN0cnVjdCB3YXJw Z2Z4X3NvZnRjICpzYywgdWludDE2X3Qgc3JjX3gsIHVpbnQxNl90IHNyY195LAorICAgIHVpbnQx Nl90IGRzdF94LCB1aW50MTZfdCBkc3RfeSwgdWludDE2X3Qgd2lkdGgsIHVpbnQxNl90IGhlaWdo dCkKK3sKKwl1aW50MzJfdCBzcmNfYWRkcmVzcywgZHN0X2FkZHJlc3MsIHNyY194eSwgZHN0X3h5 LCBzaXplOworCisJLyogY3NnZnguY2FyZCBzZW5kcyBvbmUtcGl4ZWwtd2lkZSBvcGVyYXRpb25z IHRvIGl0cyBDUFUgZmFsbGJhY2suICovCisJaWYgKHdpZHRoIDw9IDEgfHwgaGVpZ2h0IDw9IDEp CisJCXJldHVybiBmYWxzZTsKKwlpZiAoIXNjLT5zY19hY2NlbF9vayB8fCAhd2FycGdmeF93YWl0 X2JsaXR0ZXIoc2MpKSB7CisJCXNjLT5zY19hY2NlbF9vayA9IGZhbHNlOworCQlyZXR1cm4gZmFs c2U7CisJfQorCisJc3JjX2FkZHJlc3MgPSAodWludDMyX3QpKHNjLT5zY19mYnBhICsgc3JjX3kg KiBzYy0+c2Nfc3RyaWRlICsKKwkgICAgc3JjX3ggKiBzaXplb2YodWludDE2X3QpKTsKKwlkc3Rf YWRkcmVzcyA9ICh1aW50MzJfdCkoc2MtPnNjX2ZicGEgKyBkc3RfeSAqIHNjLT5zY19zdHJpZGUg KworCSAgICBkc3RfeCAqIHNpemVvZih1aW50MTZfdCkpOworCXNyY194eSA9ICgodWludDMyX3Qp c3JjX3kgPDwgMTYpIHwgc3JjX3g7CisJZHN0X3h5ID0gKCh1aW50MzJfdClkc3RfeSA8PCAxNikg fCBkc3RfeDsKKwlzaXplID0gKCh1aW50MzJfdCloZWlnaHQgPDwgMTYpIHwgd2lkdGg7CisKKwkv KiBSR0JGQl9SNUc2QjUgc291cmNlLWNvcHkgbWludGVybSBzZXF1ZW5jZSBmcm9tIGNzZ2Z4LmNh cmQuICovCisJV0FSUEdGWF9XUklURShzYywgV0FSUEdGWF9SRUdfQkxUX1NSQ19BRERSRVNTLCBz cmNfYWRkcmVzcyk7CisJV0FSUEdGWF9XUklURShzYywgV0FSUEdGWF9SRUdfQkxUX0RTVF9BRERS RVNTLCBkc3RfYWRkcmVzcyk7CisJV0FSUEdGWF9XUklURShzYywgV0FSUEdGWF9SRUdfQkxUX1NJ WkUsIHNpemUpOworCVdBUlBHRlhfV1JJVEUoc2MsIFdBUlBHRlhfUkVHX0JMVF9TUkNfWFksIHNy Y194eSk7CisJV0FSUEdGWF9XUklURShzYywgV0FSUEdGWF9SRUdfQkxUX0RTVF9YWSwgZHN0X3h5 KTsKKwlXQVJQR0ZYX1dSSVRFKHNjLCBXQVJQR0ZYX1JFR19CTFRfU1JDX1NUUklERSwgc2MtPnNj X3N0cmlkZSk7CisJV0FSUEdGWF9XUklURShzYywgV0FSUEdGWF9SRUdfQkxUX0RTVF9TVFJJREUs IHNjLT5zY19zdHJpZGUpOworCVdBUlBHRlhfV1JJVEUoc2MsIFdBUlBHRlhfUkVHX0JMVF9DT01N QU5ELAorCSAgICBXQVJQR0ZYX0JMVF9DT01NQU5EX0NPUFlfMTYpOworCWJ1c19zcGFjZV9iYXJy aWVyKHNjLT5zY19yZWd0LCBzYy0+c2NfcmVnaCwKKwkgICAgV0FSUEdGWF9SRUdfQkxUX1NSQ19B RERSRVNTLAorCSAgICBXQVJQR0ZYX1JFR19PVVRQVVRfQVVYIC0gV0FSUEdGWF9SRUdfQkxUX1NS Q19BRERSRVNTLAorCSAgICBCVVNfU1BBQ0VfQkFSUklFUl9XUklURSk7CisKKwlpZiAoIXdhcnBn Znhfd2FpdF9ibGl0dGVyKHNjKSkgeworCQlzYy0+c2NfYWNjZWxfb2sgPSBmYWxzZTsKKwkJcmV0 dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wKK3dhcnBnZnhf dmFsaWRfcmVjdChzdHJ1Y3Qgd2FycGdmeF9zb2Z0YyAqc2MsIHVpbnQzMl90IHgsIHVpbnQzMl90 IHksCisgICAgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCkKK3sKKwl1aW50MzJfdCBm Yl93aWR0aCwgZmJfaGVpZ2h0OworCisJLyogT2ZmLXNjcmVlbiBwaXhtYXBzIGFyZSBleHRyYSBy b3dzIHVzaW5nIHRoZSBzY2Fub3V0IHN0cmlkZS4gKi8KKwlpZiAod2lkdGggPT0gMCB8fCBoZWln aHQgPT0gMCkKKwkJcmV0dXJuIHRydWU7CisJaWYgKHggPiBVSU5UMTZfTUFYIHx8IHkgPiBVSU5U MTZfTUFYIHx8IHdpZHRoID4gVUlOVDE2X01BWCB8fAorCSAgICBoZWlnaHQgPiBVSU5UMTZfTUFY KQorCQlyZXR1cm4gZmFsc2U7CisKKwlmYl93aWR0aCA9IHNjLT5zY19zdHJpZGUgLyBzaXplb2Yo dWludDE2X3QpOworCWZiX2hlaWdodCA9IHNjLT5zY19mYnNpemUgLyBzYy0+c2Nfc3RyaWRlOwor CWlmICh4ID49IGZiX3dpZHRoIHx8IHkgPj0gZmJfaGVpZ2h0KQorCQlyZXR1cm4gZmFsc2U7CisJ aWYgKHdpZHRoID4gZmJfd2lkdGggLSB4IHx8IGhlaWdodCA+IGZiX2hlaWdodCAtIHkpCisJCXJl dHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZAord2FycGdmeF9z b2Z0d2FyZV9jb3B5KHN0cnVjdCB3YXJwZ2Z4X3NvZnRjICpzYywgdWludDMyX3Qgc3JjX3gsCisg ICAgdWludDMyX3Qgc3JjX3ksIHVpbnQzMl90IGRzdF94LCB1aW50MzJfdCBkc3RfeSwgdWludDMy X3Qgd2lkdGgsCisgICAgdWludDMyX3QgaGVpZ2h0KQoreworCXVpbnQ4X3QgKmZiOworCXNpemVf dCBiYXJyaWVyX3NpemUsIGRzdF9vZmZzZXQsIGxlbmd0aCwgc3JjX29mZnNldDsKKwl1aW50MzJf dCByb3c7CisKKwlpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkKKwkJcmV0dXJuOworCisJ ZmIgPSBidXNfc3BhY2VfdmFkZHIoc2MtPnNjX2ZidCwgc2MtPnNjX2ZiaCk7CisJbGVuZ3RoID0g d2lkdGggKiBzaXplb2YodWludDE2X3QpOworCXNyY19vZmZzZXQgPSBzcmNfeSAqIHNjLT5zY19z dHJpZGUgKyBzcmNfeCAqIHNpemVvZih1aW50MTZfdCk7CisJZHN0X29mZnNldCA9IGRzdF95ICog c2MtPnNjX3N0cmlkZSArIGRzdF94ICogc2l6ZW9mKHVpbnQxNl90KTsKKworCWlmIChkc3Rfb2Zm c2V0ID4gc3JjX29mZnNldCkgeworCQlmb3IgKHJvdyA9IGhlaWdodDsgcm93LS0gPiAwOykgewor CQkJbWVtbW92ZShmYiArIGRzdF9vZmZzZXQgKyByb3cgKiBzYy0+c2Nfc3RyaWRlLAorCQkJICAg IGZiICsgc3JjX29mZnNldCArIHJvdyAqIHNjLT5zY19zdHJpZGUsIGxlbmd0aCk7CisJCX0KKwl9 IGVsc2UgeworCQlmb3IgKHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93KyspIHsKKwkJCW1lbW1v dmUoZmIgKyBkc3Rfb2Zmc2V0ICsgcm93ICogc2MtPnNjX3N0cmlkZSwKKwkJCSAgICBmYiArIHNy Y19vZmZzZXQgKyByb3cgKiBzYy0+c2Nfc3RyaWRlLCBsZW5ndGgpOworCQl9CisJfQorCisJYmFy cmllcl9zaXplID0gKGhlaWdodCAtIDEpICogc2MtPnNjX3N0cmlkZSArIGxlbmd0aDsKKwlidXNf c3BhY2VfYmFycmllcihzYy0+c2NfZmJ0LCBzYy0+c2NfZmJoLCBkc3Rfb2Zmc2V0LAorCSAgICBi YXJyaWVyX3NpemUsIEJVU19TUEFDRV9CQVJSSUVSX1dSSVRFKTsKK30KKworc3RhdGljIGludAor d2FycGdmeF93c2ZiX2JsaXQoc3RydWN0IHdhcnBnZnhfc29mdGMgKnNjLCBzdHJ1Y3Qgd3NkaXNw bGF5aW9fYmxpdCAqYmxpdCkKK3sKKwlib29sIGRvbmU7CisKKwlpZiAoc2MtPnNjX3dzbW9kZSA9 PSBXU0RJU1BMQVlJT19NT0RFX0VNVUwpCisJCXJldHVybiBFQlVTWTsKKwlpZiAoIXNjLT5zY19h Y2NlbF9vaykKKwkJcmV0dXJuIEVJTzsKKworCXN3aXRjaCAoYmxpdC0+b3ApIHsKKwljYXNlIFdT RkJfQkxJVF9GSUxMOgorCQlpZiAoIXdhcnBnZnhfdmFsaWRfcmVjdChzYywgYmxpdC0+ZHN0eCwg YmxpdC0+ZHN0eSwKKwkJICAgIGJsaXQtPndpZHRoLCBibGl0LT5oZWlnaHQpKQorCQkJcmV0dXJu IEVJTlZBTDsKKwkJZG9uZSA9IHdhcnBnZnhfcmVjdGZpbGwoc2MsICh1aW50MTZfdClibGl0LT5k c3R4LAorCQkgICAgKHVpbnQxNl90KWJsaXQtPmRzdHksICh1aW50MTZfdClibGl0LT53aWR0aCwK KwkJICAgICh1aW50MTZfdClibGl0LT5oZWlnaHQsICh1aW50MTZfdClibGl0LT5wZW4pOworCQli cmVhazsKKworCWNhc2UgV1NGQl9CTElUX0NPUFk6CisJCWlmICghd2FycGdmeF92YWxpZF9yZWN0 KHNjLCBibGl0LT5zcmN4LCBibGl0LT5zcmN5LAorCQkgICAgYmxpdC0+d2lkdGgsIGJsaXQtPmhl aWdodCkgfHwKKwkJICAgICF3YXJwZ2Z4X3ZhbGlkX3JlY3Qoc2MsIGJsaXQtPmRzdHgsIGJsaXQt PmRzdHksCisJCSAgICBibGl0LT53aWR0aCwgYmxpdC0+aGVpZ2h0KSkKKwkJCXJldHVybiBFSU5W QUw7CisJCWlmIChibGl0LT53aWR0aCA8PSAxIHx8IGJsaXQtPmhlaWdodCA8PSAxKSB7CisJCQl3 YXJwZ2Z4X3NvZnR3YXJlX2NvcHkoc2MsIGJsaXQtPnNyY3gsIGJsaXQtPnNyY3ksCisJCQkgICAg YmxpdC0+ZHN0eCwgYmxpdC0+ZHN0eSwgYmxpdC0+d2lkdGgsCisJCQkgICAgYmxpdC0+aGVpZ2h0 KTsKKwkJCWRvbmUgPSB0cnVlOworCQl9IGVsc2UgeworCQkJZG9uZSA9IHdhcnBnZnhfYml0Ymx0 KHNjLCAodWludDE2X3QpYmxpdC0+c3JjeCwKKwkJCSAgICAodWludDE2X3QpYmxpdC0+c3JjeSwg KHVpbnQxNl90KWJsaXQtPmRzdHgsCisJCQkgICAgKHVpbnQxNl90KWJsaXQtPmRzdHksICh1aW50 MTZfdClibGl0LT53aWR0aCwKKwkJCSAgICAodWludDE2X3QpYmxpdC0+aGVpZ2h0KTsKKwkJfQor CQlicmVhazsKKworCWNhc2UgV1NGQl9CTElUX1RSQU5TOgorCQlyZXR1cm4gRU9QTk9UU1VQUDsK KworCWRlZmF1bHQ6CisJCXJldHVybiBFSU5WQUw7CisJfQorCisJaWYgKCFkb25lKQorCQlyZXR1 cm4gRUlPOworCWJsaXQtPnNlcmlhbCA9ICsrc2MtPnNjX2JsdF9zZXJpYWw7CisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyB2b2lkCit3YXJwZ2Z4X2NvcHlyb3dzKHZvaWQgKmNvb2tpZSwgaW50IHNy Y3JvdywgaW50IGRzdHJvdywgaW50IG5yb3dzKQoreworCXN0cnVjdCByYXNvcHNfaW5mbyAqcmkg PSBjb29raWU7CisJc3RydWN0IHZjb25zX3NjcmVlbiAqc2NyID0gcmktPnJpX2h3OworCXN0cnVj dCB3YXJwZ2Z4X3NvZnRjICpzYyA9IHNjci0+c2NyX2Nvb2tpZTsKKwlpbnQgeCwgc3JjX3ksIGRz dF95LCB3aWR0aCwgaGVpZ2h0OworCisJeCA9IHJpLT5yaV94b3JpZ2luOworCXNyY195ID0gcmkt PnJpX3lvcmlnaW4gKyByaS0+cmlfZm9udC0+Zm9udGhlaWdodCAqIHNyY3JvdzsKKwlkc3RfeSA9 IHJpLT5yaV95b3JpZ2luICsgcmktPnJpX2ZvbnQtPmZvbnRoZWlnaHQgKiBkc3Ryb3c7CisJd2lk dGggPSByaS0+cmlfZW11d2lkdGg7CisJaGVpZ2h0ID0gcmktPnJpX2ZvbnQtPmZvbnRoZWlnaHQg KiBucm93czsKKwlpZiAoc2MtPnNjX3dzbW9kZSA9PSBXU0RJU1BMQVlJT19NT0RFX0VNVUwgJiYK KwkgICAgd2FycGdmeF9iaXRibHQoc2MsIHgsIHNyY195LCB4LCBkc3RfeSwgd2lkdGgsIGhlaWdo dCkpCisJCXJldHVybjsKKworCXNjLT5zY19zd29wcy5jb3B5cm93cyhjb29raWUsIHNyY3Jvdywg ZHN0cm93LCBucm93cyk7Cit9CisKK3N0YXRpYyB2b2lkCit3YXJwZ2Z4X2VyYXNlcm93cyh2b2lk ICpjb29raWUsIGludCByb3csIGludCBucm93cywgbG9uZyBmaWxsYXR0cikKK3sKKwlzdHJ1Y3Qg cmFzb3BzX2luZm8gKnJpID0gY29va2llOworCXN0cnVjdCB2Y29uc19zY3JlZW4gKnNjciA9IHJp LT5yaV9odzsKKwlzdHJ1Y3Qgd2FycGdmeF9zb2Z0YyAqc2MgPSBzY3ItPnNjcl9jb29raWU7CisJ aW50IHgsIHksIHdpZHRoLCBoZWlnaHQsIGZnLCBiZywgdWw7CisJdWludDE2X3QgY29sb3I7CisK Kwl4ID0gcmktPnJpX3hvcmlnaW47CisJeSA9IHJpLT5yaV95b3JpZ2luICsgcmktPnJpX2ZvbnQt PmZvbnRoZWlnaHQgKiByb3c7CisJd2lkdGggPSByaS0+cmlfZW11d2lkdGg7CisJaGVpZ2h0ID0g cmktPnJpX2ZvbnQtPmZvbnRoZWlnaHQgKiBucm93czsKKwlyYXNvcHNfdW5wYWNrX2F0dHIoZmls bGF0dHIsICZmZywgJmJnLCAmdWwpOworCWNvbG9yID0gKHVpbnQxNl90KShyaS0+cmlfZGV2Y21h cFtiZyAmIDB4MGZdICYgMHhmZmZmVSk7CisJaWYgKHNjLT5zY193c21vZGUgPT0gV1NESVNQTEFZ SU9fTU9ERV9FTVVMICYmCisJICAgIHdhcnBnZnhfcmVjdGZpbGwoc2MsIHgsIHksIHdpZHRoLCBo ZWlnaHQsIGNvbG9yKSkKKwkJcmV0dXJuOworCisJc2MtPnNjX3N3b3BzLmVyYXNlcm93cyhjb29r aWUsIHJvdywgbnJvd3MsIGZpbGxhdHRyKTsKK30KKworc3RhdGljIHZvaWQKK3dhcnBnZnhfY29w eWNvbHModm9pZCAqY29va2llLCBpbnQgcm93LCBpbnQgc3JjY29sLCBpbnQgZHN0Y29sLCBpbnQg bmNvbHMpCit7CisJc3RydWN0IHJhc29wc19pbmZvICpyaSA9IGNvb2tpZTsKKwlzdHJ1Y3QgdmNv bnNfc2NyZWVuICpzY3IgPSByaS0+cmlfaHc7CisJc3RydWN0IHdhcnBnZnhfc29mdGMgKnNjID0g c2NyLT5zY3JfY29va2llOworCWludCBzcmNfeCwgZHN0X3gsIHksIHdpZHRoLCBoZWlnaHQ7CisK KwlzcmNfeCA9IHJpLT5yaV94b3JpZ2luICsgcmktPnJpX2ZvbnQtPmZvbnR3aWR0aCAqIHNyY2Nv bDsKKwlkc3RfeCA9IHJpLT5yaV94b3JpZ2luICsgcmktPnJpX2ZvbnQtPmZvbnR3aWR0aCAqIGRz dGNvbDsKKwl5ID0gcmktPnJpX3lvcmlnaW4gKyByaS0+cmlfZm9udC0+Zm9udGhlaWdodCAqIHJv dzsKKwl3aWR0aCA9IHJpLT5yaV9mb250LT5mb250d2lkdGggKiBuY29sczsKKwloZWlnaHQgPSBy aS0+cmlfZm9udC0+Zm9udGhlaWdodDsKKwlpZiAoc2MtPnNjX3dzbW9kZSA9PSBXU0RJU1BMQVlJ T19NT0RFX0VNVUwgJiYKKwkgICAgd2FycGdmeF9iaXRibHQoc2MsIHNyY194LCB5LCBkc3RfeCwg eSwgd2lkdGgsIGhlaWdodCkpCisJCXJldHVybjsKKworCXNjLT5zY19zd29wcy5jb3B5Y29scyhj b29raWUsIHJvdywgc3JjY29sLCBkc3Rjb2wsIG5jb2xzKTsKK30KKworc3RhdGljIHZvaWQKK3dh cnBnZnhfZXJhc2Vjb2xzKHZvaWQgKmNvb2tpZSwgaW50IHJvdywgaW50IHN0YXJ0Y29sLCBpbnQg bmNvbHMsCisgICAgbG9uZyBmaWxsYXR0cikKK3sKKwlzdHJ1Y3QgcmFzb3BzX2luZm8gKnJpID0g Y29va2llOworCXN0cnVjdCB2Y29uc19zY3JlZW4gKnNjciA9IHJpLT5yaV9odzsKKwlzdHJ1Y3Qg d2FycGdmeF9zb2Z0YyAqc2MgPSBzY3ItPnNjcl9jb29raWU7CisJaW50IHgsIHksIHdpZHRoLCBo ZWlnaHQsIGZnLCBiZywgdWw7CisJdWludDE2X3QgY29sb3I7CisKKwl4ID0gcmktPnJpX3hvcmln aW4gKyByaS0+cmlfZm9udC0+Zm9udHdpZHRoICogc3RhcnRjb2w7CisJeSA9IHJpLT5yaV95b3Jp Z2luICsgcmktPnJpX2ZvbnQtPmZvbnRoZWlnaHQgKiByb3c7CisJd2lkdGggPSByaS0+cmlfZm9u dC0+Zm9udHdpZHRoICogbmNvbHM7CisJaGVpZ2h0ID0gcmktPnJpX2ZvbnQtPmZvbnRoZWlnaHQ7 CisJcmFzb3BzX3VucGFja19hdHRyKGZpbGxhdHRyLCAmZmcsICZiZywgJnVsKTsKKwljb2xvciA9 ICh1aW50MTZfdCkocmktPnJpX2RldmNtYXBbYmcgJiAweDBmXSAmIDB4ZmZmZlUpOworCWlmIChz Yy0+c2Nfd3Ntb2RlID09IFdTRElTUExBWUlPX01PREVfRU1VTCAmJgorCSAgICB3YXJwZ2Z4X3Jl Y3RmaWxsKHNjLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjb2xvcikpCisJCXJldHVybjsKKworCXNj LT5zY19zd29wcy5lcmFzZWNvbHMoY29va2llLCByb3csIHN0YXJ0Y29sLCBuY29scywgZmlsbGF0 dHIpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK3dhcnBnZnhfaW9jdGwodm9pZCAqdiwgdm9p ZCAqdnMsIHVfbG9uZyBjbWQsIHZvaWQgKmRhdGEsIGludCBmbGFnLAorICAgIHN0cnVjdCBsd3Ag KmwpCit7CisJc3RydWN0IHZjb25zX2RhdGEgKnZkID0gdjsKKwlzdHJ1Y3Qgd2FycGdmeF9zb2Z0 YyAqc2MgPSB2ZC0+Y29va2llOworCXVfaW50IG5ld19tb2RlOworCisJc3dpdGNoIChjbWQpIHsK KwljYXNlIFdTRElTUExBWUlPX0dUWVBFOgorCQkqKHVfaW50ICopZGF0YSA9IFdTRElTUExBWV9U WVBFX1VOS05PV047CisJCXJldHVybiAwOworCisJY2FzZSBXU0RJU1BMQVlJT19HRVRfRkJJTkZP OgorCQlyZXR1cm4gd2FycGdmeF9nZXRfZmJpbmZvKHNjLAorCQkgICAgKHN0cnVjdCB3c2Rpc3Bs YXlpb19mYmluZm8gKilkYXRhKTsKKworCWNhc2UgV1NESVNQTEFZSU9fR0lORk86CisJCSgoc3Ry dWN0IHdzZGlzcGxheV9mYmluZm8gKilkYXRhKS0+d2lkdGggPSBzYy0+c2Nfd2lkdGg7CisJCSgo c3RydWN0IHdzZGlzcGxheV9mYmluZm8gKilkYXRhKS0+aGVpZ2h0ID0gc2MtPnNjX2hlaWdodDsK KwkJKChzdHJ1Y3Qgd3NkaXNwbGF5X2ZiaW5mbyAqKWRhdGEpLT5kZXB0aCA9IHNjLT5zY19kZXB0 aDsKKwkJKChzdHJ1Y3Qgd3NkaXNwbGF5X2ZiaW5mbyAqKWRhdGEpLT5jbXNpemUgPSAwOworCQly ZXR1cm4gMDsKKworCWNhc2UgV1NESVNQTEFZSU9fTElORUJZVEVTOgorCQkqKHVfaW50ICopZGF0 YSA9IHNjLT5zY19zdHJpZGU7CisJCXJldHVybiAwOworCisjaWZkZWYgV0FSUEdGWF9BQ0NFTAor CWNhc2UgV1NESVNQTEFZSU9fRE9CTElUOgorCQlyZXR1cm4gd2FycGdmeF93c2ZiX2JsaXQoc2Ms CisJCSAgICAoc3RydWN0IHdzZGlzcGxheWlvX2JsaXQgKilkYXRhKTsKKworCWNhc2UgV1NESVNQ TEFZSU9fV0FJVEJMSVQ6CisJCWlmICghc2MtPnNjX2FjY2VsX29rKQorCQkJcmV0dXJuIEVJTzsK KwkJaWYgKCF3YXJwZ2Z4X3dhaXRfYmxpdHRlcihzYykpIHsKKwkJCXNjLT5zY19hY2NlbF9vayA9 IGZhbHNlOworCQkJcmV0dXJuIEVJTzsKKwkJfQorCQkoKHN0cnVjdCB3c2Rpc3BsYXlpb19ibGl0 ICopZGF0YSktPnNlcmlhbCA9CisJCSAgICBzYy0+c2NfYmx0X3NlcmlhbDsKKwkJcmV0dXJuIDA7 CisjZW5kaWYKKworCWNhc2UgV1NESVNQTEFZSU9fR0VUX0JVU0lEOgorCQkoKHN0cnVjdCB3c2Rp c3BsYXlpb19idXNfaWQgKilkYXRhKS0+YnVzX3R5cGUgPQorCQkgICAgV1NESVNQTEFZSU9fQlVT X1NPQzsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFdTRElTUExBWUlPX0dWSURFTzoKKwkJKihpbnQg KilkYXRhID0gV1NESVNQTEFZSU9fVklERU9fT047CisJCXJldHVybiAwOworCisJY2FzZSBXU0RJ U1BMQVlJT19TVklERU86CisJCWlmICgqKGludCAqKWRhdGEgPT0gV1NESVNQTEFZSU9fVklERU9f T04pCisJCQlyZXR1cm4gMDsKKwkJcmV0dXJuIEVQQVNTVEhST1VHSDsKKworCWNhc2UgV1NESVNQ TEFZSU9fR01PREU6CisJCSoodV9pbnQgKilkYXRhID0gc2MtPnNjX3dzbW9kZTsKKwkJcmV0dXJu IDA7CisKKwljYXNlIFdTRElTUExBWUlPX1NNT0RFOgorCQluZXdfbW9kZSA9ICoodV9pbnQgKilk YXRhOworCQlzd2l0Y2ggKG5ld19tb2RlKSB7CisJCWNhc2UgV1NESVNQTEFZSU9fTU9ERV9FTVVM OgorCQljYXNlIFdTRElTUExBWUlPX01PREVfTUFQUEVEOgorCQljYXNlIFdTRElTUExBWUlPX01P REVfRFVNQkZCOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gRUlOVkFMOworCQl9 CisJCXNjLT5zY193c21vZGUgPSBuZXdfbW9kZTsKKwkJaWYgKG5ld19tb2RlID09IFdTRElTUExB WUlPX01PREVfRU1VTCAmJiB2ZC0+YWN0aXZlICE9IE5VTEwpCisJCQl2Y29uc19yZWRyYXdfc2Ny ZWVuKHZkLT5hY3RpdmUpOworCQlyZXR1cm4gMDsKKworCWRlZmF1bHQ6CisJCXJldHVybiBFUEFT U1RIUk9VR0g7CisJfQorfQorCitzdGF0aWMgcGFkZHJfdAord2FycGdmeF9tbWFwKHZvaWQgKnYs IHZvaWQgKnZzLCBvZmZfdCBvZmZzZXQsIGludCBwcm90KQoreworCXN0cnVjdCB2Y29uc19kYXRh ICp2ZCA9IHY7CisJc3RydWN0IHdhcnBnZnhfc29mdGMgKnNjID0gdmQtPmNvb2tpZTsKKworCWlm IChvZmZzZXQgPCAwIHx8IChzaXplX3Qpb2Zmc2V0ID49IHNjLT5zY19mYnNpemUpCisJCXJldHVy biAtMTsKKworCXJldHVybiBidXNfc3BhY2VfbW1hcChzYy0+c2NfZmJ0LCBzYy0+c2NfZmJwYSwg b2Zmc2V0LCBwcm90LAorCSAgICBCVVNfU1BBQ0VfTUFQX0xJTkVBUik7Cit9CisKK3N0YXRpYyBp bnQKK3dhcnBnZnhfZ2V0X2ZiaW5mbyhzdHJ1Y3Qgd2FycGdmeF9zb2Z0YyAqc2MsCisgICAgc3Ry dWN0IHdzZGlzcGxheWlvX2ZiaW5mbyAqZmJpKQoreworCW1lbXNldChmYmksIDAsIHNpemVvZigq ZmJpKSk7CisJZmJpLT5mYmlfZmxhZ3MgPSAwOworCWZiaS0+ZmJpX2Zib2Zmc2V0ID0gMDsKKwkv KiBFeHBvc2UgdGhlIHVzYWJsZSBhcGVydHVyZSBzbyB3c2ZiIEVYQSBjYW4gYWxsb2NhdGUgb2Zm LXNjcmVlbiByb3dzLiAqLworCWZiaS0+ZmJpX2Zic2l6ZSA9IHNjLT5zY19mYnNpemU7CisJZmJp LT5mYmlfd2lkdGggPSBzYy0+c2Nfd2lkdGg7CisJZmJpLT5mYmlfaGVpZ2h0ID0gc2MtPnNjX2hl aWdodDsKKwlmYmktPmZiaV9zdHJpZGUgPSBzYy0+c2Nfc3RyaWRlOworCWZiaS0+ZmJpX2JpdHNw ZXJwaXhlbCA9IHNjLT5zY19kZXB0aDsKKwlmYmktPmZiaV9waXhlbHR5cGUgPSBXU0ZCX1JHQjsK KworCWZiaS0+ZmJpX3N1YnR5cGUuZmJpX3JnYm1hc2tzLmFscGhhX29mZnNldCA9IDA7CisJZmJp LT5mYmlfc3VidHlwZS5mYmlfcmdibWFza3MucmVkX29mZnNldCA9IDExOworCWZiaS0+ZmJpX3N1 YnR5cGUuZmJpX3JnYm1hc2tzLmdyZWVuX29mZnNldCA9IDU7CisJZmJpLT5mYmlfc3VidHlwZS5m YmlfcmdibWFza3MuYmx1ZV9vZmZzZXQgPSAwOworCWZiaS0+ZmJpX3N1YnR5cGUuZmJpX3JnYm1h c2tzLmFscGhhX3NpemUgPSAwOworCWZiaS0+ZmJpX3N1YnR5cGUuZmJpX3JnYm1hc2tzLnJlZF9z aXplID0gNTsKKwlmYmktPmZiaV9zdWJ0eXBlLmZiaV9yZ2JtYXNrcy5ncmVlbl9zaXplID0gNjsK KwlmYmktPmZiaV9zdWJ0eXBlLmZiaV9yZ2JtYXNrcy5ibHVlX3NpemUgPSA1OworCisJcmV0dXJu IDA7Cit9CisKK3ZvaWQKK3dhcnBnZnhjbnByb2JlKHN0cnVjdCBjb25zZGV2ICpjZCkKK3sKKyNp ZmRlZiBXQVJQR0ZYX0NPTlNPTEUKKwljZC0+Y25fcHJpID0gd2FycGdmeF9leGlzdHMgPyBDTl9J TlRFUk5BTCA6IENOX0RFQUQ7CisjZWxzZQorCWNkLT5jbl9wcmkgPSBDTl9ERUFEOworI2VuZGlm CisJY2QtPmNuX2RldiA9IE5PREVWOworfQorCit2b2lkCit3YXJwZ2Z4Y25pbml0KHN0cnVjdCBj b25zZGV2ICpjZCkKK3sKKyNpZiBkZWZpbmVkKFdBUlBHRlhfQ09OU09MRSkgJiYgTktCRCA+IDAK KwlpZiAod2FycGdmeF9leGlzdHMpCisJCWtiZF9jbmF0dGFjaCgpOworI2VuZGlmCit9CisKK3Zv aWQKK3dhcnBnZnhjbnBvbGxjKGRldl90IGRldiwgaW50IG9uKQoreworfQorCit2b2lkCit3YXJw Z2Z4Y25wdXRjKGRldl90IGRldiwgaW50IGNoKQoreworfQorCitpbnQKK3dhcnBnZnhjbmdldGMo ZGV2X3QgZGV2KQoreworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc3lzL2FyY2gvYW1pZ2Ev ZGV2L3dhcnBnZnhyZWcuaCBiL3N5cy9hcmNoL2FtaWdhL2Rldi93YXJwZ2Z4cmVnLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMC4uYTNlYzI4ZWE3ZWQ0ZjU0MDM2YTUxYmM5YjM3ZTEwNTAyZmUwZmM2MgotLS0gL2Rldi9u dWxsCisrKyBiL3N5cy9hcmNoL2FtaWdhL2Rldi93YXJwZ2Z4cmVnLmgKQEAgLTAsMCArMSwxODIg QEAKKy8qCSROZXRCU0QkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDI2IENhcmxvcyBN aWzDoW4gRmlndWVyZWRvCisgKiB3aXRoIGFzc2lzdGFuY2UgZnJvbSBPcGVuQUkgZ3B0LTUuNi1z b2wKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IK KyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJ TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k ZWYgX0FNSUdBX0RFVl9XQVJQR0ZYUkVHX0hfCisjZGVmaW5lIF9BTUlHQV9ERVZfV0FSUEdGWFJF R19IXworCisvKgorICogQ1MtTGFiIFdhcnAgR0ZYIGludGVyZmFjZS4KKyAqCisgKiBUaGVzZSBk ZWZpbml0aW9ucyB3ZXJlIGRlcml2ZWQgZnJvbSB0aGUgcHVibGljIFpvcnJvIGNvbmZpZ3VyYXRp b24KKyAqIGludGVyZmFjZSBhbmQgZnJvbSBvYnNlcnZpbmcgdGhlIHJlZ2lzdGVyIGFjY2Vzc2Vz IG1hZGUgYnkgY3NnZnguY2FyZAorICogMjAuMjUuICBOYW1lcyBmb3IgcmVnaXN0ZXJzIHdob3Nl IGV4YWN0IGhhcmR3YXJlIG5hbWUgaXMgbm90IGtub3duIGFyZQorICogaW50ZW50aW9uYWxseSBk ZXNjcmlwdGl2ZSByYXRoZXIgdGhhbiBhdXRob3JpdGF0aXZlLgorICovCisKKy8qIFpvcnJvIElE cy4gKi8KKyNkZWZpbmUgV0FSUEdGWF9NQU5JRAkJCTB4MTQwMAorI2RlZmluZSBXQVJQR0ZYX1BS T0RJRF9GQgkJMTAwCisjZGVmaW5lIFdBUlBHRlhfUFJPRElEX1JFRwkJMTAxCisjZGVmaW5lIFdB UlBHRlhfUFJPRElEX0ZMQVNICQkxMDIKKworLyogQWRkcmVzcy1zcGFjZSBzaXplcyBhZHZlcnRp c2VkIGJ5IEF1dG9Db25maWcuICovCisjZGVmaW5lIFdBUlBHRlhfRkJfQVBFUlRVUkVfU0laRQkw eDAyMDAwMDAwVQkvKiAzMiBNaUIgKi8KKyNkZWZpbmUgV0FSUEdGWF9GQl9VU0FCTEVfU0laRQkJ MHgwMTgwMDAwMFUJLyogMjQgTWlCICovCisjZGVmaW5lIFdBUlBHRlhfUkVHX1NJWkUJCTB4MDAw MTAwMDBVCS8qIDY0IEtpQiAqLworCisvKiBTdXBwb3J0ZWQgMTYtYml0IGNvbnNvbGUgbW9kZXMg KHZhbHVlcyB1c2VkIGJ5IFdBUlBHRlhfTU9ERSkuICovCisjZGVmaW5lIFdBUlBHRlhfTU9ERV80 ODBQCQk0ODAKKyNkZWZpbmUgV0FSUEdGWF9NT0RFXzYwMFAJCTYwMAorI2RlZmluZSBXQVJQR0ZY X01PREVfNzIwUAkJNzIwCisjZGVmaW5lIFdBUlBHRlhfTU9ERV83NjhQCQk3NjgKKyNkZWZpbmUg V0FSUEdGWF9NT0RFXzEwMjRQCQkxMDI0CisjZGVmaW5lIFdBUlBHRlhfTU9ERV8xMDgwUAkJMTA4 MAorI2RlZmluZSBXQVJQR0ZYX0RFUFRICQkJMTYKKworLyogTWFpbiBkaXNwbGF5LWNvbnRyb2wg cmVnaXN0ZXJzLiAqLworI2RlZmluZSBXQVJQR0ZYX1JFR19GQl9PRkZTRVQJCTB4MDAwMAorI2Rl ZmluZSBXQVJQR0ZYX1JFR19GT1JNQVRfUElUQ0gJMHgwMDA0CisKKy8qIDJEIGVuZ2luZSBkZXNj cmlwdG9yIGFuZCBzdGF0dXMgcmVnaXN0ZXJzLiAqLworI2RlZmluZSBXQVJQR0ZYX1JFR19CTFRf U1JDX0FERFJFU1MJMHgwMDA4CisjZGVmaW5lIFdBUlBHRlhfUkVHX0JMVF9EU1RfQUREUkVTUwkw eDAwMGMKKyNkZWZpbmUgV0FSUEdGWF9SRUdfQkxUX1NSQ19YWQkJMHgwMDEwCisjZGVmaW5lIFdB UlBHRlhfUkVHX0JMVF9EU1RfWFkJCTB4MDAxNAorI2RlZmluZSBXQVJQR0ZYX1JFR19CTFRfU0la RQkJMHgwMDE4CisjZGVmaW5lIFdBUlBHRlhfUkVHX0JMVF9DT0xPUgkJMHgwMDFjCisjZGVmaW5l IFdBUlBHRlhfUkVHX0JMVF9DT01NQU5ECQkweDAwMjAKKyNkZWZpbmUgV0FSUEdGWF9SRUdfQkxU X1NUQVRVUwkJMHgwMDI0CisjZGVmaW5lIFdBUlBHRlhfUkVHX0JMVF9TUkNfU1RSSURFCTB4MDAy OAorI2RlZmluZSBXQVJQR0ZYX1JFR19CTFRfRFNUX1NUUklERQkweDAwMmMKKyNkZWZpbmUgV0FS UEdGWF9CTFRfU1RBVFVTX0JVU1lfTUFTSwkweDAwMDAwMDE5VQorI2RlZmluZSBXQVJQR0ZYX0JM VF9DT01NQU5EX0NPUFlfMTYJMHgwMDAwMDAwNVUKKyNkZWZpbmUgV0FSUEdGWF9CTFRfQ09NTUFO RF9GSUxMXzE2CTB4MDAwMDAwMDZVCisKKyNkZWZpbmUgV0FSUEdGWF9SRUdfT1VUUFVUX0FVWAkJ MHgwMDMwCisKKy8qIERpc3BsYXkgdGltaW5nIGJhbmsuICovCisjZGVmaW5lIFdBUlBHRlhfUkVH X0hfQUNUSVZFCQkweDAxMDAKKyNkZWZpbmUgV0FSUEdGWF9SRUdfSF9USU1JTkdfMQkJMHgwMTA0 CisjZGVmaW5lIFdBUlBHRlhfUkVHX0hfVElNSU5HXzIJCTB4MDEwOAorI2RlZmluZSBXQVJQR0ZY X1JFR19WX0FDVElWRQkJMHgwMTBjCisjZGVmaW5lIFdBUlBHRlhfUkVHX1ZfVElNSU5HXzEJCTB4 MDExMAorI2RlZmluZSBXQVJQR0ZYX1JFR19WX1RJTUlOR18yCQkweDAxMTQKKyNkZWZpbmUgV0FS UEdGWF9SRUdfSFZfVE9UQUwJCTB4MDExOAorI2RlZmluZSBXQVJQR0ZYX1JFR19NT0RFX0NPTU1J VAkJMHgwMTFjCisjZGVmaW5lIFdBUlBHRlhfUkVHX1NDQUxFX0NPTlRST0wJMHgwMTI4CisKKy8q IFBpeGVsLWNsb2NrIHNlbGVjdG9yLCBsb2NrIHN0YXR1cywgYW5kIGludGVycnVwdCBjb250cm9s LiAqLworI2RlZmluZSBXQVJQR0ZYX1JFR19DTE9DS19TVEFUVVMJMHgwMjAwCisjZGVmaW5lIFdB UlBHRlhfUkVHX0NMT0NLX0NPTlRST0wJMHgwMjA0CisjZGVmaW5lIFdBUlBHRlhfUkVHX0lOVEVS UlVQVF9TVEFUVVMJMHgwMjA4CisjZGVmaW5lIFdBUlBHRlhfUkVHX0lOVEVSUlVQVF9DT05UUk9M CTB4MDIwYworI2RlZmluZSBXQVJQR0ZYX0NMT0NLX1NFTEVDVF9NQVNLCTB4MDAwMDAwMDdVCisj ZGVmaW5lIFdBUlBHRlhfQ0xPQ0tfUkVBRFkJCTB4MDAwMDAwMDJVCisjZGVmaW5lIFdBUlBHRlhf NDgwUF9DTE9DS19TRUxFQ1QJMHgwMDAwMDAwMFUKKyNkZWZpbmUgV0FSUEdGWF80ODBQX0NMT0NL X0NPTlRST0wJMHgwMDAwMDAxMFUKKyNkZWZpbmUgV0FSUEdGWF82MDBQX0NMT0NLX1NFTEVDVAkw eDAwMDAwMDAxVQorI2RlZmluZSBXQVJQR0ZYXzYwMFBfQ0xPQ0tfQ09OVFJPTAkweDAwMDAwMDEx VQorI2RlZmluZSBXQVJQR0ZYXzcyMFBfQ0xPQ0tfU0VMRUNUCTB4MDAwMDAwMDNVCisjZGVmaW5l IFdBUlBHRlhfNzIwUF9DTE9DS19DT05UUk9MCTB4MDAwMDAwMTNVCisjZGVmaW5lIFdBUlBHRlhf NzY4UF9DTE9DS19TRUxFQ1QJMHgwMDAwMDAwMlUKKyNkZWZpbmUgV0FSUEdGWF83NjhQX0NMT0NL X0NPTlRST0wJMHgwMDAwMDAxMlUKKyNkZWZpbmUgV0FSUEdGWF8xMDI0UF9DTE9DS19TRUxFQ1QJ MHgwMDAwMDAwNFUKKyNkZWZpbmUgV0FSUEdGWF8xMDI0UF9DTE9DS19DT05UUk9MCTB4MDAwMDAw MTRVCisjZGVmaW5lIFdBUlBHRlhfMTA4MFBfQ0xPQ0tfU0VMRUNUCTB4MDAwMDAwMDVVCisjZGVm aW5lIFdBUlBHRlhfMTA4MFBfQ0xPQ0tfQ09OVFJPTAkweDAwMDAwMDE1VQorCisvKiBPdGhlciBy ZWdpc3RlciBiYW5rcy4gKi8KKyNkZWZpbmUgV0FSUEdGWF9SRUdfUEFMRVRURV9CQVNFCTB4MDgw MAorI2RlZmluZSBXQVJQR0ZYX1JFR19DT01NQU5ECQkweDBjMDAKKyNkZWZpbmUgV0FSUEdGWF9S RUdfQ09NTUFORF9SRVNFVAkweDBjMDQKKworLyogNjQweDQ4MCBhdCBhcHByb3hpbWF0ZWx5IDc1 IEh6LCAxNi1iaXQgYmlnLWVuZGlhbiBSNUc2QjUuICovCisjZGVmaW5lIFdBUlBHRlhfNDgwUF9G T1JNQVRfUElUQ0gJMHgxNDA3ODA1MFUKKyNkZWZpbmUgV0FSUEdGWF80ODBQX0hfQUNUSVZFCQkw eDAwMDAwMjgwVQorI2RlZmluZSBXQVJQR0ZYXzQ4MFBfSF9USU1JTkdfMQkJMHgwMDI4MDM0OFUK KyNkZWZpbmUgV0FSUEdGWF80ODBQX0hfVElNSU5HXzIJCTB4MDAyOTAyZDBVCisjZGVmaW5lIFdB UlBHRlhfNDgwUF9WX0FDVElWRQkJMHgwMDAwMDFlMFUKKyNkZWZpbmUgV0FSUEdGWF80ODBQX1Zf VElNSU5HXzEJCTB4MDAxZTAxZjRVCisjZGVmaW5lIFdBUlBHRlhfNDgwUF9WX1RJTUlOR18yCQkw eDAwMWUxMWU0VQorI2RlZmluZSBXQVJQR0ZYXzQ4MFBfSFZfVE9UQUwJCTB4MDAxZjQzNDhVCisK Ky8qIDgwMHg2MDAsIDE2LWJpdCBiaWctZW5kaWFuIFI1RzZCNSBtb2RlIHZhbHVlcy4gKi8KKyNk ZWZpbmUgV0FSUEdGWF82MDBQX0ZPUk1BVF9QSVRDSAkweDE5MDk2MDY0VQorI2RlZmluZSBXQVJQ R0ZYXzYwMFBfSF9BQ1RJVkUJCTB4MDAwMDAzMjBVCisjZGVmaW5lIFdBUlBHRlhfNjAwUF9IX1RJ TUlOR18xCQkweDAwMzIwNDIwVQorI2RlZmluZSBXQVJQR0ZYXzYwMFBfSF9USU1JTkdfMgkJMHgw MDM0ODNjOFUKKyNkZWZpbmUgV0FSUEdGWF82MDBQX1ZfQUNUSVZFCQkweDAwMDAwMjU4VQorI2Rl ZmluZSBXQVJQR0ZYXzYwMFBfVl9USU1JTkdfMQkJMHgwMDI1ODI3NFUKKyNkZWZpbmUgV0FSUEdG WF82MDBQX1ZfVElNSU5HXzIJCTB4MDAyNTkyNWRVCisjZGVmaW5lIFdBUlBHRlhfNjAwUF9IVl9U T1RBTAkJMHgwMDI3NDQyMFUKKworLyogMTI4MHg3MjAsIDE2LWJpdCBiaWctZW5kaWFuIFI1RzZC NSBtb2RlIHZhbHVlcy4gKi8KKyNkZWZpbmUgV0FSUEdGWF83MjBQX0ZPUk1BVF9QSVRDSAkweDI4 MGI0MGEwVQorI2RlZmluZSBXQVJQR0ZYXzcyMFBfSF9BQ1RJVkUJCTB4MDAwMDA1MDBVCisjZGVm aW5lIFdBUlBHRlhfNzIwUF9IX1RJTUlOR18xCQkweDAwNTAwNjcyVQorI2RlZmluZSBXQVJQR0ZY XzcyMFBfSF9USU1JTkdfMgkJMHgwMDU2ZTU5NlUKKyNkZWZpbmUgV0FSUEdGWF83MjBQX1ZfQUNU SVZFCQkweDAwMDAwMmQwVQorI2RlZmluZSBXQVJQR0ZYXzcyMFBfVl9USU1JTkdfMQkJMHgwMDJk MDJlZVUKKyNkZWZpbmUgV0FSUEdGWF83MjBQX1ZfVElNSU5HXzIJCTB4MDAyZDUyZGFVCisjZGVm aW5lIFdBUlBHRlhfNzIwUF9IVl9UT1RBTAkJMHgwMDJlZTY3MlUKKworLyogMTAyNHg3NjgsIDE2 LWJpdCBiaWctZW5kaWFuIFI1RzZCNSBtb2RlIHZhbHVlcy4gKi8KKyNkZWZpbmUgV0FSUEdGWF83 NjhQX0ZPUk1BVF9QSVRDSAkweDIwMGMwMDgwVQorI2RlZmluZSBXQVJQR0ZYXzc2OFBfSF9BQ1RJ VkUJCTB4MDAwMDA0MDBVCisjZGVmaW5lIFdBUlBHRlhfNzY4UF9IX1RJTUlOR18xCQkweDAwNDAw NTQwVQorI2RlZmluZSBXQVJQR0ZYXzc2OFBfSF9USU1JTkdfMgkJMHgwMDQxODRhMFUKKyNkZWZp bmUgV0FSUEdGWF83NjhQX1ZfQUNUSVZFCQkweDAwMDAwMzAwVQorI2RlZmluZSBXQVJQR0ZYXzc2 OFBfVl9USU1JTkdfMQkJMHgwMDMwMDMyNlUKKyNkZWZpbmUgV0FSUEdGWF83NjhQX1ZfVElNSU5H XzIJCTB4MDAzMDMzMDlVCisjZGVmaW5lIFdBUlBHRlhfNzY4UF9IVl9UT1RBTAkJMHgwMDMyNjU0 MFUKKworLyogMTI4MHgxMDI0LCAxNi1iaXQgYmlnLWVuZGlhbiBSNUc2QjUgbW9kZSB2YWx1ZXMu ICovCisjZGVmaW5lIFdBUlBHRlhfMTAyNFBfRk9STUFUX1BJVENICTB4MjgxMDAwYTBVCisjZGVm aW5lIFdBUlBHRlhfMTAyNFBfSF9BQ1RJVkUJCTB4MDAwMDA1MDBVCisjZGVmaW5lIFdBUlBHRlhf MTAyNFBfSF9USU1JTkdfMQkweDAwNTAwNjk4VQorI2RlZmluZSBXQVJQR0ZYXzEwMjRQX0hfVElN SU5HXzIJMHgwMDUzMDVhMFUKKyNkZWZpbmUgV0FSUEdGWF8xMDI0UF9WX0FDVElWRQkJMHgwMDAw MDQwMFUKKyNkZWZpbmUgV0FSUEdGWF8xMDI0UF9WX1RJTUlOR18xCTB4MDA0MDA0MmFVCisjZGVm aW5lIFdBUlBHRlhfMTAyNFBfVl9USU1JTkdfMgkweDAwNDAxNDA0VQorI2RlZmluZSBXQVJQR0ZY XzEwMjRQX0hWX1RPVEFMCQkweDAwNDJhNjk4VQorCisvKiAxOTIweDEwODBwNjAsIDE2LWJpdCBi aWctZW5kaWFuIFI1RzZCNSBtb2RlIHZhbHVlcy4gKi8KKyNkZWZpbmUgV0FSUEdGWF8xMDgwUF9G T1JNQVRfUElUQ0gJMHgzYzEwZTBmMFUKKyNkZWZpbmUgV0FSUEdGWF8xMDgwUF9IX0FDVElWRQkJ MHgwMDAwMDc4MFUKKyNkZWZpbmUgV0FSUEdGWF8xMDgwUF9IX1RJTUlOR18xCTB4MDA3ODA4OThV CisjZGVmaW5lIFdBUlBHRlhfMTA4MFBfSF9USU1JTkdfMgkweDAwN2Q4ODA0VQorI2RlZmluZSBX QVJQR0ZYXzEwODBQX1ZfQUNUSVZFCQkweDAwMDAwNDM4VQorI2RlZmluZSBXQVJQR0ZYXzEwODBQ X1ZfVElNSU5HXzEJMHgwMDQzODQ2NVUKKyNkZWZpbmUgV0FSUEdGWF8xMDgwUF9WX1RJTUlOR18y CTB4MDA0M2M0NDFVCisjZGVmaW5lIFdBUlBHRlhfMTA4MFBfSFZfVE9UQUwJCTB4MDA0NjU4OThV CisKKy8qIEJpdCA3IHNlbGVjdHMgdGhlIFdhcnAgZnJhbWVidWZmZXIgaW5zdGVhZCBvZiB0aGUg ZXh0ZXJuYWwvbmF0aXZlIGlucHV0LiAqLworI2RlZmluZSBXQVJQR0ZYX01PREVfQ09NTUlUCQkw eDAwMDAwMDhjVQorI2RlZmluZSBXQVJQR0ZYX01PREVfRU5BQkxFCQkweDAwMDAwMDg4VQorCisj ZW5kaWYgLyogX0FNSUdBX0RFVl9XQVJQR0ZYUkVHX0hfICovCmRpZmYgLS1naXQgYS9zeXMvYXJj aC9hbWlnYS9kZXYvemJ1cy5jIGIvc3lzL2FyY2gvYW1pZ2EvZGV2L3pidXMuYwppbmRleCAzMGFm YmFlMGYyMTVmYjQ4MGQ3YTlkZTVjOTk2YTM2MjRhNTBhZWM0Li41M2VlYzFkY2MzZGM5ODM0ZDk2 ZjI0NzdiOWQyMzE1ZmRjZjg3YWRiIDEwMDY0NAotLS0gYS9zeXMvYXJjaC9hbWlnYS9kZXYvemJ1 cy5jCisrKyBiL3N5cy9hcmNoL2FtaWdhL2Rldi96YnVzLmMKQEAgLTE5Myw2ICsxOTMsMTAgQEAg c3RhdGljIGNvbnN0IHN0cnVjdCBhY29uZmRhdGEgYWNvbmZ0YWJbXSA9IHsKIAl7ICJoeXBlcjMr IiwJNTAwMSwJN30sCS8qIEh5cGVyY29tMysgKi8KIAkvKiBNYXRheSBHcnplZ29yeiBLcmFzemV3 c2tpICovCiAJeyAibXBwYiIsCTQ0MzU5LAkxfSwJLyogUHJvbWV0aGV1cyBQQ0kgYnJpZGdlICov CisJLyogQ1MtTGFiICovCisJeyAid2FycGdmeCIsCTUxMjAsCTEwMH0sCS8qIENTLUxhYiBXYXJw IEdGWCBmcmFtZWJ1ZmZlciAqLworCXsgIndhcnBnZngiLAk1MTIwLAkxMDF9LAkvKiBDUy1MYWIg V2FycCBHRlggcmVnaXN0ZXJzICovCisJeyAid2FycHFzcGlmIiwJNTEyMCwJMTAyIH0sCS8qIENT LUxhYiBXYXJwIFFTUEkgRmxhc2ggKi8KIAkvKiBNTlQgKi8KIAl7ICJtbnR2YSIsCTI4MDE0LAkx fSwJLyogTU5UIFZBMjAwMCAqLwogCXsgInp6OWsiLAkyODAxNCwgCTN9LAkvKiBNTlQgWlo5MDAw IFoyICovCkBAIC0yMzMsNyArMjM3LDkgQEAgc3RhdGljIHN0cnVjdCBwcmVjb25mZGF0YSBwcmVj b25mdGFiW10gPSB7CiAJezg1MTIsCTY3LCAwfSwJLyogQ3liZXJ2aXNvbiA2NC8zRCAqLwkJLyog Z3JmNyAqLwogLyoJezI4MDE0LAkxLCAwfSwJLy8gTU5UTU4gVkEyMDAwICovCiAJezI4MDE0LAkz LCAwfSwJLyogTU5UIFpaOTAwMCBaMiAqLwotCXsyODAxNCwJNCwgMH0JLyogTU5UIFpaOTAwMCBa MyAqLworCXsyODAxNCwJNCwgMH0sCS8qIE1OVCBaWjkwMDAgWjMgKi8KKwl7NTEyMCwJMTAwLCAw fSwJLyogQ1MtTGFiIFdhcnAgR0ZYIGZyYW1lYnVmZmVyICovCisJezUxMjAsCTEwMSwgMH0JLyog Q1MtTGFiIFdhcnAgR0ZYIHJlZ2lzdGVycyAqLwogfTsKIHN0YXRpYyBpbnQgbnByZWNvbmZlbnQg PSBzaXplb2YocHJlY29uZnRhYikgLyBzaXplb2Yoc3RydWN0IHByZWNvbmZkYXRhKTsKIAo= --_003_PH6P220MB9841969C3D35E60749EE53E0D6C9C42PH6P220MB984196_ Content-Type: application/octet-stream; name="netbsd-xsrc-warpgfx-wsfb-exa.patch" Content-Description: netbsd-xsrc-warpgfx-wsfb-exa.patch Content-Disposition: attachment; filename="netbsd-xsrc-warpgfx-wsfb-exa.patch"; size=14102; creation-date="Sun, 19 Jul 2026 17:53:17 GMT"; modification-date="Sun, 19 Jul 2026 17:53:17 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2V4dGVybmFsL21pdC94Zjg2LXZpZGVvLXdzZmIvZGlzdC9tYW4vd3NmYi5t YW4gYi9leHRlcm5hbC9taXQveGY4Ni12aWRlby13c2ZiL2Rpc3QvbWFuL3dzZmIubWFuCmluZGV4 IDUwNTc1NzkwNTViYmY1OTAwMmZlNjkyODEyYTViN2FjZDU2YjNlM2UuLmFlMjZhNWIzNjFhZjM2 MjI3ZmYzYjAwZmU5ZjU3OWYyNDA5ZmQ2OWEgMTAwNjQ0Ci0tLSBhL2V4dGVybmFsL21pdC94Zjg2 LXZpZGVvLXdzZmIvZGlzdC9tYW4vd3NmYi5tYW4KKysrIGIvZXh0ZXJuYWwvbWl0L3hmODYtdmlk ZW8td3NmYi9kaXN0L21hbi93c2ZiLm1hbgpAQCAtNDMsNyArNDMsOCBAQCB3c2ZiIFwtIHZpZGVv IGRyaXZlciBmb3Igd3NkaXNwbGF5IGZyYW1lYnVmZmVyIGRldmljZQogLkIgd3NmYgogaXMgYW4g X194c2VydmVybmFtZV9fIGRyaXZlciBmb3IgT3BlbkJTRCBhbmQgTmV0QlNECiB3c2Rpc3BsYXkg ZnJhbWVidWZmZXIgZGV2aWNlcy4KLVRoaXMgaXMgYSBub24tYWNjZWxlcmF0ZWQgZHJpdmVyLiAK K09uIE5ldEJTRCwgc29saWQgZmlsbHMgYW5kIGZyYW1lYnVmZmVyIGNvcGllcyBjYW4gYmUgYWNj ZWxlcmF0ZWQgd2hlbiB0aGUKK3dzZGlzcGxheSBkcml2ZXIgaW1wbGVtZW50cyB0aGUgc3RhbmRh cmQgYmxpdHRlciBpb2N0bHMuCiBUaGUgZm9sbG93aW5nIGZyYW1lYnVmZmVyIGRlcHRocyBhcmUg c3VwcG9ydGVkOiAxLCA4LCAxNiBhbmQgMjQsIGdpdmVuCiB0aGF0IHRoZSB3c2Rpc3BsYXkgZGV2 aWNlIHVuZGVybmVhdGggc3VwcG9ydHMgdGhlbS4KIC5icgpAQCAtODksNiArOTAsMTYgQEAgRGVm YXVsdDogb24gZm9yIGRlcHRocyB3ZXJlIGl0IGlzIHN1cHBvcnRlZCwgb2ZmIG90aGVyd2lzZS4K IC5icgogU2hhZG93RkIgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgb24gbW9ub2Nocm9tZSBk aXNwbGF5cy4KIC5UUAorLkJJICJPcHRpb24gXCpxQWNjZWxcKnEgXCpxIiBib29sZWFuIFwqcQor RW5hYmxlIG9yIGRpc2FibGUgRVhBIHNvbGlkLWZpbGwgYW5kIGZyYW1lYnVmZmVyLWNvcHkgYWNj ZWxlcmF0aW9uLgorQWNjZWxlcmF0aW9uIGN1cnJlbnRseSByZXF1aXJlcyBhIDE2LWJpdCBSR0Ig ZnJhbWVidWZmZXIsIGEgc3VwcG9ydGluZworTmV0QlNEIHdzZGlzcGxheSBkcml2ZXIsIGFuZAor LkIgU2hhZG93RkIKK211c3QgYmUgZGlzYWJsZWQuCitPdGhlciByZW5kZXJpbmcgb3BlcmF0aW9u cywgaW5jbHVkaW5nIENvbXBvc2l0ZSBhbmQgM0QsIHJlbWFpbiBzb2Z0d2FyZQorcmVuZGVyZWQu CitEZWZhdWx0OiBvbiB3aGVuIGF2YWlsYWJsZS4KKy5UUAogLkJJICJPcHRpb24gXCpxUm90YXRl XCpxIFwqcSIgc3RyaW5nIFwqcQogRW5hYmxlIHJvdGF0aW9uIG9mIHRoZSBkaXNwbGF5LiBUaGUg c3VwcG9ydGVkIHZhbHVlcyBhcmUgIkNXIiAoY2xvY2t3aXNlLAogOTAgZGVncmVlcyksICJVRCIg KHVwc2lkZSBkb3duLCAxODAgZGVncmVlcykgYW5kICJDQ1ciIChjb3VudGVyIGNsb2Nrd2lzZSwK ZGlmZiAtLWdpdCBhL2V4dGVybmFsL21pdC94Zjg2LXZpZGVvLXdzZmIvZGlzdC9zcmMvd3NmYi5o IGIvZXh0ZXJuYWwvbWl0L3hmODYtdmlkZW8td3NmYi9kaXN0L3NyYy93c2ZiLmgKaW5kZXggZTNh MzM0NjNiZWEyZTFhYTE2NTVhYTVmOGYxNGJhMWNlNTA4YjFiYi4uMTIyMTZjNDU2MzM0Y2I1ZjA2 YzlmNmI0ODVjNmU2YjAxNDMwOTg0ZCAxMDA2NDQKLS0tIGEvZXh0ZXJuYWwvbWl0L3hmODYtdmlk ZW8td3NmYi9kaXN0L3NyYy93c2ZiLmgKKysrIGIvZXh0ZXJuYWwvbWl0L3hmODYtdmlkZW8td3Nm Yi9kaXN0L3NyYy93c2ZiLmgKQEAgLTM1LDYgKzM1LDEzIEBACiAgKiBBdXRob3JzOiAgQWxhbiBI b3VyaWhhbmUsIDxhbGFuaEBmYWlybGl0ZS5kZW1vbi5jby51az4KICAqCSAgICAgTWljaGVsIETD pG56ZXIsIDxtaWNoZGFlbkBpaWljLmV0aHouY2g+CiAgKi8KKworLyoKKyAqIHdzZGlzcGxheSBF WEEgZXh0ZW5zaW9uczoKKyAqIENvcHlyaWdodCAoYykgMjAyNiBDYXJsb3MgTWlsw6FuIEZpZ3Vl cmVkbworICogd2l0aCBhc3Npc3RhbmNlIGZyb20gT3BlbkFJIGdwdC01LjYtc29sCisgKiBEaXN0 cmlidXRlZCB1bmRlciB0aGUgdHdvLWNsYXVzZSBCU0QgbGljZW5zZSBhYm92ZS4KKyAqLwogIAog I2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CkBAIC02MSw2ICs2OCwx MCBAQAogI2RlZmluZSBIQVZFX1NIQURPV19BRkIKICNlbmRpZgogCisjaWYgZGVmaW5lZChfX05l dEJTRF9fKSAmJiBkZWZpbmVkKFdTRElTUExBWUlPX0RPQkxJVCkKKyNkZWZpbmUgSEFWRV9XU0ZC X0VYQQorI2VuZGlmCisKIC8qIHByaXZhdGUgZGF0YSAqLwogdHlwZWRlZiBzdHJ1Y3QgewogCWlu dAkJCWZkOyAvKiBmaWxlIGRlc2NyaXB0b3Igb2Ygb3BlbiBkZXZpY2UgKi8KQEAgLTc0LDYgKzg1 LDEzIEBAIHR5cGVkZWYgc3RydWN0IHsKIAlCb29sCQkJSFdDdXJzb3I7CiAJQm9vbAkJCXVzZVN3 YXAzMjsKIAlCb29sCQkJdXNlUkdCMTZUb1lVWTI7CisjaWZkZWYgSEFWRV9XU0ZCX0VYQQorCUJv b2wJCQlhY2NlbDsKKwlCb29sCQkJZXhhX2FjdGl2ZTsKKwlQaXhlbAkJCWV4YV9mZzsKKwl1aW50 MzJfdAkJZXhhX3NyY195OworCXN0cnVjdCBfRXhhRHJpdmVyCSpwRXhhOworI2VuZGlmCiAjaWZk ZWYgSEFWRV9TSEFET1dfQUZCCiAJQm9vbAkJCXBsYW5hckFmYjsKICNlbmRpZgpAQCAtOTcsNSAr MTE1LDggQEAgdHlwZWRlZiBzdHJ1Y3QgewogI2RlZmluZSBXU0ZCUFRSKHApICgoV3NmYlB0ciko KHApLT5kcml2ZXJQcml2YXRlKSkKIAogQm9vbCBXc2ZiU2V0dXBDdXJzb3IoU2NyZWVuUHRyKTsK KyNpZmRlZiBIQVZFX1dTRkJfRVhBCitCb29sIFdzZmJFWEFJbml0KFNjcmVlblB0cik7CisjZW5k aWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9leHRlcm5hbC9taXQveGY4Ni12aWRlby13c2ZiL2Rp c3Qvc3JjL3dzZmJfZHJpdmVyLmMgYi9leHRlcm5hbC9taXQveGY4Ni12aWRlby13c2ZiL2Rpc3Qv c3JjL3dzZmJfZHJpdmVyLmMKaW5kZXggZDhiNTlhNmU1ODk3NTY0MjlmY2JhNDFkZDExMmJkZjZl NDE4ZjFjOC4uMjAwMTI3ZTZlYzg0MmJkYTM4MjQ0ODI2ZTZiMWY3ZWZlYWRmYjFmOCAxMDA2NDQK LS0tIGEvZXh0ZXJuYWwvbWl0L3hmODYtdmlkZW8td3NmYi9kaXN0L3NyYy93c2ZiX2RyaXZlci5j CisrKyBiL2V4dGVybmFsL21pdC94Zjg2LXZpZGVvLXdzZmIvZGlzdC9zcmMvd3NmYl9kcml2ZXIu YwpAQCAtMzUsNiArMzUsMTMgQEAKICAqCSAgICAgTWljaGVsIETDpG56ZXIsIDxtaWNoZGFlbkBp aWljLmV0aHouY2g+CiAgKi8KIAorLyoKKyAqIHdzZGlzcGxheSBFWEEgZXh0ZW5zaW9uczoKKyAq IENvcHlyaWdodCAoYykgMjAyNiBDYXJsb3MgTWlsw6FuIEZpZ3VlcmVkbworICogd2l0aCBhc3Np c3RhbmNlIGZyb20gT3BlbkFJIGdwdC01LjYtc29sCisgKiBEaXN0cmlidXRlZCB1bmRlciB0aGUg dHdvLWNsYXVzZSBCU0QgbGljZW5zZSBhYm92ZS4KKyAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdf SAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCkBAIC0xODYsNiArMTkzLDcgQEAgc3RhdGlj IFN5bVRhYlJlYyBXc2ZiQ2hpcHNldHNbXSA9IHsKIC8qIFN1cHBvcnRlZCBvcHRpb25zICovCiB0 eXBlZGVmIGVudW0gewogCU9QVElPTl9TSEFET1dfRkIsCisJT1BUSU9OX0FDQ0VMLAogCU9QVElP Tl9ST1RBVEUsCiAJT1BUSU9OX0hXX0NVUlNPUiwKIAlPUFRJT05fU1dfQ1VSU09SCkBAIC0xOTMs NiArMjAxLDcgQEAgdHlwZWRlZiBlbnVtIHsKIAogc3RhdGljIGNvbnN0IE9wdGlvbkluZm9SZWMg V3NmYk9wdGlvbnNbXSA9IHsKIAl7IE9QVElPTl9TSEFET1dfRkIsICJTaGFkb3dGQiIsIE9QVFZf Qk9PTEVBTiwgezB9LCBGQUxTRX0sCisJeyBPUFRJT05fQUNDRUwsICJBY2NlbCIsIE9QVFZfQk9P TEVBTiwgezF9LCBGQUxTRX0sCiAJeyBPUFRJT05fUk9UQVRFLCAiUm90YXRlIiwgT1BUVl9TVFJJ TkcsIHswfSwgRkFMU0V9LAogCXsgT1BUSU9OX0hXX0NVUlNPUiwgIkhXQ3Vyc29yIiwgT1BUVl9C T09MRUFOLCB7MX0sIEZBTFNFfSwKIAl7IC0xLCBOVUxMLCBPUFRWX05PTkUsIHswfSwgRkFMU0V9 CkBAIC03NTEsNiArNzYwLDExIEBAIFdzZmJQcmVJbml0KFNjcm5JbmZvUHRyIHBTY3JuLCBpbnQg ZmxhZ3MpCiAJCQlyZXR1cm4gRkFMU0U7CiAJfQogCisjaWZkZWYgSEFWRV9XU0ZCX0VYQQorCWZQ dHItPmFjY2VsID0gIWZQdHItPnNoYWRvd0ZCICYmCisJICAgIHhmODZSZXR1cm5PcHRWYWxCb29s KGZQdHItPk9wdGlvbnMsIE9QVElPTl9BQ0NFTCwgVFJVRSk7CisjZW5kaWYKKwogCS8qIFZpc3Vh bCBpbml0ICovCiAJaWYgKCF4Zjg2U2V0RGVmYXVsdFZpc3VhbChwU2NybiwgLTEpKQogCQlyZXR1 cm4gRkFMU0U7CkBAIC0xMTY1LDYgKzExNzksMjEgQEAgV3NmYlNjcmVlbkluaXQoU0NSRUVOX0lO SVRfQVJHU19ERUNMKQogCQlyZXR1cm4gRkFMU0U7CiAJfQogCisjaWZkZWYgSEFWRV9XU0ZCX0VY QQorCWlmIChmUHRyLT5hY2NlbCkgeworCQlpZiAoeGY4NkxvYWRTdWJNb2R1bGUocFNjcm4sICJl eGEiKSA9PSBOVUxMKSB7CisJCQl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfV0FSTklO RywKKwkJCSAgICAiQ2Fubm90IGxvYWQgRVhBOyB1c2luZyBzb2Z0d2FyZSByZW5kZXJpbmdcbiIp OworCQl9IGVsc2UgaWYgKFdzZmJFWEFJbml0KHBTY3JlZW4pKSB7CisJCQl4Zjg2RHJ2TXNnKHBT Y3JuLT5zY3JuSW5kZXgsIFhfSU5GTywKKwkJCSAgICAiVXNpbmcgd3NkaXNwbGF5IEVYQSBmaWxs L2NvcHkgYWNjZWxlcmF0aW9uXG4iKTsKKwkJfSBlbHNlIHsKKwkJCXhmODZEcnZNc2cocFNjcm4t PnNjcm5JbmRleCwgWF9JTkZPLAorCQkJICAgICJObyB3c2Rpc3BsYXkgYmxpdHRlcjsgdXNpbmcg c29mdHdhcmUgcmVuZGVyaW5nXG4iKTsKKwkJfQorCX0KKyNlbmRpZgorCiAjaWZkZWYgWEZyZWVY REdBCiAJaWYgKCFmUHRyLT5yb3RhdGUpCiAJCVdzZmJER0FJbml0KHBTY3JuLCBwU2NyZWVuKTsK QEAgLTEyNzcsNiArMTMwNiw3IEBAIFdzZmJDbG9zZVNjcmVlbihDTE9TRV9TQ1JFRU5fQVJHU19E RUNMKQogCVNjcm5JbmZvUHRyIHBTY3JuID0geGY4NlNjcmVlblRvU2NybihwU2NyZWVuKTsKIAlQ aXhtYXBQdHIgcFBpeG1hcDsKIAlXc2ZiUHRyIGZQdHIgPSBXU0ZCUFRSKHBTY3JuKTsKKwlCb29s IHJldDsKIAogCiAJVFJBQ0VfRU5URVIoIldzZmJDbG9zZVNjcmVlbiIpOwpAQCAtMTMwNiw3ICsx MzM2LDE0IEBAIFdzZmJDbG9zZVNjcmVlbihDTE9TRV9TQ1JFRU5fQVJHU19ERUNMKQogCS8qIFVu d3JhcCBDbG9zZVNjcmVlbi4gKi8KIAlwU2NyZWVuLT5DbG9zZVNjcmVlbiA9IGZQdHItPkNsb3Nl U2NyZWVuOwogCVRSQUNFX0VYSVQoIldzZmJDbG9zZVNjcmVlbiIpOwotCXJldHVybiAoKnBTY3Jl ZW4tPkNsb3NlU2NyZWVuKShDTE9TRV9TQ1JFRU5fQVJHUyk7CisJcmV0ID0gKCpwU2NyZWVuLT5D bG9zZVNjcmVlbikoQ0xPU0VfU0NSRUVOX0FSR1MpOworI2lmZGVmIEhBVkVfV1NGQl9FWEEKKwlp ZiAoZlB0ci0+cEV4YSAhPSBOVUxMKSB7CisJCWZyZWUoZlB0ci0+cEV4YSk7CisJCWZQdHItPnBF eGEgPSBOVUxMOworCX0KKyNlbmRpZgorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkICoK ZGlmZiAtLWdpdCBhL2V4dGVybmFsL21pdC94Zjg2LXZpZGVvLXdzZmIvZGlzdC9zcmMvd3NmYl9l eGEuYyBiL2V4dGVybmFsL21pdC94Zjg2LXZpZGVvLXdzZmIvZGlzdC9zcmMvd3NmYl9leGEuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwLi5kODk5MWYwZTA1MzFmZTkyOTIzYzU3ZjczODk5ZTkwMzU1MjJmMTI5Ci0tLSAv ZGV2L251bGwKKysrIGIvZXh0ZXJuYWwvbWl0L3hmODYtdmlkZW8td3NmYi9kaXN0L3NyYy93c2Zi X2V4YS5jCkBAIC0wLDAgKzEsMjgxIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAyNiBDYXJs b3MgTWlsw6FuIEZpZ3VlcmVkbworICogd2l0aCBhc3Npc3RhbmNlIGZyb20gT3BlbkFJIGdwdC01 LjYtc29sCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNT IE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZF TlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAor ICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj aWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNs dWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgor I2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9p b2N0bC5oPgorCisjaW5jbHVkZSAieG9yZy1zZXJ2ZXIuaCIKKyNpbmNsdWRlICJ4Zjg2LmgiCisj aW5jbHVkZSAid3NmYi5oIgorI2luY2x1ZGUgImV4YS5oIgorCisjaWZkZWYgSEFWRV9XU0ZCX0VY QQorCitzdGF0aWMgQm9vbAorV3NmYkVYQUZ1bGxQbGFuZW1hc2soUGl4bWFwUHRyIHBQaXhtYXAs IFBpeGVsIHBsYW5lbWFzaykKK3sKKwlQaXhlbCBtYXNrOworCisJaWYgKCh1bnNpZ25lZCBpbnQp cFBpeG1hcC0+ZHJhd2FibGUuZGVwdGggPj0gc2l6ZW9mKFBpeGVsKSAqIDgpCisJCW1hc2sgPSB+ KFBpeGVsKTA7CisJZWxzZQorCQltYXNrID0gKChQaXhlbCkxIDw8IHBQaXhtYXAtPmRyYXdhYmxl LmRlcHRoKSAtIDE7CisKKwlyZXR1cm4gKHBsYW5lbWFzayAmIG1hc2spID09IG1hc2s7Cit9CisK K3N0YXRpYyBCb29sCitXc2ZiRVhBUGl4bWFwT2Zmc2V0KFdzZmJQdHIgZlB0ciwgUGl4bWFwUHRy IHBQaXhtYXAsIHVpbnQzMl90ICp5KQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBwaXRjaDsK KworCS8qIFRoZSB3c2Rpc3BsYXkgYmxpdCBBQkkgaGFzIG9uZSBmaXhlZCBwaXRjaCBhbmQgYWJz b2x1dGUgY29vcmRpbmF0ZXMuICovCisJcGl0Y2ggPSBleGFHZXRQaXhtYXBQaXRjaChwUGl4bWFw KTsKKwlvZmZzZXQgPSBleGFHZXRQaXhtYXBPZmZzZXQocFBpeG1hcCk7CisJaWYgKHBpdGNoICE9 IGZQdHItPmZiaS5mYmlfc3RyaWRlIHx8IHBpdGNoID09IDAgfHwKKwkgICAgb2Zmc2V0ID49IGZQ dHItPmZiaS5mYmlfZmJzaXplIHx8IG9mZnNldCAlIHBpdGNoICE9IDAgfHwKKwkgICAgb2Zmc2V0 IC8gcGl0Y2ggPiBVSU5UMzJfTUFYKQorCQlyZXR1cm4gRkFMU0U7CisKKwkqeSA9ICh1aW50MzJf dCkob2Zmc2V0IC8gcGl0Y2gpOworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAorV3Nm YkVYQURpc2FibGUoU2NybkluZm9QdHIgcFNjcm4sIGNvbnN0IGNoYXIgKm9wZXJhdGlvbikKK3sK KwlXc2ZiUHRyIGZQdHIgPSBXU0ZCUFRSKHBTY3JuKTsKKworCWlmIChmUHRyLT5leGFfYWN0aXZl KSB7CisJCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9FUlJPUiwKKwkJICAgICJ3c2Rp c3BsYXkgJXMgYmxpdCBmYWlsZWQ6ICVzOyBkaXNhYmxpbmcgYWNjZWxlcmF0aW9uXG4iLAorCQkg ICAgb3BlcmF0aW9uLCBzdHJlcnJvcihlcnJubykpOworCX0KKwlmUHRyLT5leGFfYWN0aXZlID0g RkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkCitXc2ZiRVhBV2FpdE1hcmtlcihTY3JlZW5QdHIgcFNj cmVlbiwgaW50IG1hcmtlcikKK3sKKwlTY3JuSW5mb1B0ciBwU2NybiA9IHhmODZTY3JlZW5Ub1Nj cm4ocFNjcmVlbik7CisJV3NmYlB0ciBmUHRyID0gV1NGQlBUUihwU2Nybik7CisJc3RydWN0IHdz ZGlzcGxheWlvX2JsaXQgYmxpdDsKKworCWlmICghZlB0ci0+ZXhhX2FjdGl2ZSkKKwkJcmV0dXJu OworCisJbWVtc2V0KCZibGl0LCAwLCBzaXplb2YoYmxpdCkpOworCWJsaXQuc2VyaWFsID0gKHVp bnQzMl90KW1hcmtlcjsKKwlpZiAoaW9jdGwoZlB0ci0+ZmQsIFdTRElTUExBWUlPX1dBSVRCTElU LCAmYmxpdCkgPT0gLTEpCisJCVdzZmJFWEFEaXNhYmxlKHBTY3JuLCAid2FpdCIpOworfQorCitz dGF0aWMgQm9vbAorV3NmYkVYQVByZXBhcmVTb2xpZChQaXhtYXBQdHIgcFBpeG1hcCwgaW50IGFs dSwgUGl4ZWwgcGxhbmVtYXNrLCBQaXhlbCBmZykKK3sKKwlTY3JuSW5mb1B0ciBwU2NybiA9IHhm ODZTY3JlZW5Ub1Njcm4ocFBpeG1hcC0+ZHJhd2FibGUucFNjcmVlbik7CisJV3NmYlB0ciBmUHRy ID0gV1NGQlBUUihwU2Nybik7CisJdWludDMyX3QgeTsKKworCWlmICghZlB0ci0+ZXhhX2FjdGl2 ZSB8fCBwUGl4bWFwLT5kcmF3YWJsZS5iaXRzUGVyUGl4ZWwgIT0gMTYgfHwKKwkgICAgYWx1ICE9 IEdYY29weSB8fCAhV3NmYkVYQUZ1bGxQbGFuZW1hc2socFBpeG1hcCwgcGxhbmVtYXNrKSB8fAor CSAgICAhV3NmYkVYQVBpeG1hcE9mZnNldChmUHRyLCBwUGl4bWFwLCAmeSkpCisJCXJldHVybiBG QUxTRTsKKworCWZQdHItPmV4YV9mZyA9IGZnOworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMg dm9pZAorV3NmYkVYQVNvbGlkKFBpeG1hcFB0ciBwUGl4bWFwLCBpbnQgeDEsIGludCB5MSwgaW50 IHgyLCBpbnQgeTIpCit7CisJU2NybkluZm9QdHIgcFNjcm4gPSB4Zjg2U2NyZWVuVG9TY3JuKHBQ aXhtYXAtPmRyYXdhYmxlLnBTY3JlZW4pOworCVdzZmJQdHIgZlB0ciA9IFdTRkJQVFIocFNjcm4p OworCXN0cnVjdCB3c2Rpc3BsYXlpb19ibGl0IGJsaXQ7CisJdWludDMyX3QgeTsKKworCWlmICgh ZlB0ci0+ZXhhX2FjdGl2ZSkKKwkJcmV0dXJuOworCWlmICghV3NmYkVYQVBpeG1hcE9mZnNldChm UHRyLCBwUGl4bWFwLCAmeSkgfHwgeDEgPCAwIHx8IHkxIDwgMCB8fAorCSAgICB4MiA8PSB4MSB8 fCB5MiA8PSB5MSB8fCAodWludDY0X3QpeTEgKyB5ID4gVUlOVDMyX01BWCkgeworCQllcnJubyA9 IEVJTlZBTDsKKwkJV3NmYkVYQURpc2FibGUocFNjcm4sICJzb2xpZCIpOworCQlyZXR1cm47CisJ fQorCisJbWVtc2V0KCZibGl0LCAwLCBzaXplb2YoYmxpdCkpOworCWJsaXQub3AgPSBXU0ZCX0JM SVRfRklMTDsKKwlibGl0LmRzdHggPSAodWludDMyX3QpeDE7CisJYmxpdC5kc3R5ID0gKHVpbnQz Ml90KXkxICsgeTsKKwlibGl0LndpZHRoID0gKHVpbnQzMl90KSh4MiAtIHgxKTsKKwlibGl0Lmhl aWdodCA9ICh1aW50MzJfdCkoeTIgLSB5MSk7CisJYmxpdC5wZW4gPSAodWludDMyX3QpZlB0ci0+ ZXhhX2ZnOworCWlmIChpb2N0bChmUHRyLT5mZCwgV1NESVNQTEFZSU9fRE9CTElULCAmYmxpdCkg PT0gLTEpCisJCVdzZmJFWEFEaXNhYmxlKHBTY3JuLCAic29saWQiKTsKK30KKworc3RhdGljIHZv aWQKK1dzZmJFWEFEb25lU29saWQoUGl4bWFwUHRyIHBQaXhtYXApCit7CisJKHZvaWQpcFBpeG1h cDsKK30KKworc3RhdGljIEJvb2wKK1dzZmJFWEFQcmVwYXJlQ29weShQaXhtYXBQdHIgcFNyY1Bp eG1hcCwgUGl4bWFwUHRyIHBEc3RQaXhtYXAsIGludCB4ZGlyLAorICAgIGludCB5ZGlyLCBpbnQg YWx1LCBQaXhlbCBwbGFuZW1hc2spCit7CisJU2NybkluZm9QdHIgcFNjcm4gPSB4Zjg2U2NyZWVu VG9TY3JuKHBEc3RQaXhtYXAtPmRyYXdhYmxlLnBTY3JlZW4pOworCVdzZmJQdHIgZlB0ciA9IFdT RkJQVFIocFNjcm4pOworCXVpbnQzMl90IGRzdF95OworCisJKHZvaWQpeGRpcjsKKwkodm9pZCl5 ZGlyOworCisJaWYgKCFmUHRyLT5leGFfYWN0aXZlIHx8CisJICAgIHBTcmNQaXhtYXAtPmRyYXdh YmxlLmJpdHNQZXJQaXhlbCAhPSAxNiB8fAorCSAgICBwRHN0UGl4bWFwLT5kcmF3YWJsZS5iaXRz UGVyUGl4ZWwgIT0gMTYgfHwgYWx1ICE9IEdYY29weSB8fAorCSAgICAhV3NmYkVYQUZ1bGxQbGFu ZW1hc2socERzdFBpeG1hcCwgcGxhbmVtYXNrKSB8fAorCSAgICAhV3NmYkVYQVBpeG1hcE9mZnNl dChmUHRyLCBwU3JjUGl4bWFwLCAmZlB0ci0+ZXhhX3NyY195KSB8fAorCSAgICAhV3NmYkVYQVBp eG1hcE9mZnNldChmUHRyLCBwRHN0UGl4bWFwLCAmZHN0X3kpKQorCQlyZXR1cm4gRkFMU0U7CisK KwlyZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK1dzZmJFWEFDb3B5KFBpeG1hcFB0ciBw RHN0UGl4bWFwLCBpbnQgc3JjX3gsIGludCBzcmNfeSwgaW50IGRzdF94LAorICAgIGludCBkc3Rf eSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworCVNjcm5JbmZvUHRyIHBTY3JuID0geGY4NlNj cmVlblRvU2NybihwRHN0UGl4bWFwLT5kcmF3YWJsZS5wU2NyZWVuKTsKKwlXc2ZiUHRyIGZQdHIg PSBXU0ZCUFRSKHBTY3JuKTsKKwlzdHJ1Y3Qgd3NkaXNwbGF5aW9fYmxpdCBibGl0OworCXVpbnQz Ml90IHk7CisKKwlpZiAoIWZQdHItPmV4YV9hY3RpdmUpCisJCXJldHVybjsKKwlpZiAoIVdzZmJF WEFQaXhtYXBPZmZzZXQoZlB0ciwgcERzdFBpeG1hcCwgJnkpIHx8IHNyY194IDwgMCB8fAorCSAg ICBzcmNfeSA8IDAgfHwgZHN0X3ggPCAwIHx8IGRzdF95IDwgMCB8fCB3aWR0aCA8PSAwIHx8CisJ ICAgIGhlaWdodCA8PSAwIHx8ICh1aW50NjRfdClzcmNfeSArIGZQdHItPmV4YV9zcmNfeSA+IFVJ TlQzMl9NQVggfHwKKwkgICAgKHVpbnQ2NF90KWRzdF95ICsgeSA+IFVJTlQzMl9NQVgpIHsKKwkJ ZXJybm8gPSBFSU5WQUw7CisJCVdzZmJFWEFEaXNhYmxlKHBTY3JuLCAiY29weSIpOworCQlyZXR1 cm47CisJfQorCisJbWVtc2V0KCZibGl0LCAwLCBzaXplb2YoYmxpdCkpOworCWJsaXQub3AgPSBX U0ZCX0JMSVRfQ09QWTsKKwlibGl0LnNyY3ggPSAodWludDMyX3Qpc3JjX3g7CisJYmxpdC5zcmN5 ID0gKHVpbnQzMl90KXNyY195ICsgZlB0ci0+ZXhhX3NyY195OworCWJsaXQuZHN0eCA9ICh1aW50 MzJfdClkc3RfeDsKKwlibGl0LmRzdHkgPSAodWludDMyX3QpZHN0X3kgKyB5OworCWJsaXQud2lk dGggPSAodWludDMyX3Qpd2lkdGg7CisJYmxpdC5oZWlnaHQgPSAodWludDMyX3QpaGVpZ2h0Owor CWlmIChpb2N0bChmUHRyLT5mZCwgV1NESVNQTEFZSU9fRE9CTElULCAmYmxpdCkgPT0gLTEpCisJ CVdzZmJFWEFEaXNhYmxlKHBTY3JuLCAiY29weSIpOworfQorCitzdGF0aWMgdm9pZAorV3NmYkVY QURvbmVDb3B5KFBpeG1hcFB0ciBwRHN0UGl4bWFwKQoreworCSh2b2lkKXBEc3RQaXhtYXA7Cit9 CisKK0Jvb2wKK1dzZmJFWEFJbml0KFNjcmVlblB0ciBwU2NyZWVuKQoreworCVNjcm5JbmZvUHRy IHBTY3JuID0geGY4NlNjcmVlblRvU2NybihwU2NyZWVuKTsKKwlXc2ZiUHRyIGZQdHIgPSBXU0ZC UFRSKHBTY3JuKTsKKwlFeGFEcml2ZXJQdHIgcEV4YTsKKwlzdHJ1Y3Qgd3NkaXNwbGF5aW9fYmxp dCBibGl0OworCXNpemVfdCBtZW1vcnlfc2l6ZSwgdmlzaWJsZV9zaXplOworCisJaWYgKGZQdHIt PmZiaS5mYmlfYml0c3BlcnBpeGVsICE9IDE2IHx8CisJICAgIGZQdHItPmZiaS5mYmlfcGl4ZWx0 eXBlICE9IFdTRkJfUkdCIHx8CisJICAgIGZQdHItPmZiaS5mYmlfc3RyaWRlID09IDAgfHwKKwkg ICAgZlB0ci0+ZmJpLmZiaV9zdHJpZGUgPiBJTlRfTUFYIHx8CisJICAgIGZQdHItPmZiaS5mYmlf d2lkdGggPiBJTlRfTUFYIHx8CisJICAgIGZQdHItPmZiaS5mYmlfZmJzaXplID4gU0laRV9NQVgg fHwKKwkgICAgZlB0ci0+ZmJpLmZiaV9oZWlnaHQgPiBTSVpFX01BWCAvIGZQdHItPmZiaS5mYmlf c3RyaWRlKQorCQlyZXR1cm4gRkFMU0U7CisKKwltZW1zZXQoJmJsaXQsIDAsIHNpemVvZihibGl0 KSk7CisJaWYgKGlvY3RsKGZQdHItPmZkLCBXU0RJU1BMQVlJT19XQUlUQkxJVCwgJmJsaXQpID09 IC0xKQorCQlyZXR1cm4gRkFMU0U7CisKKwltZW1vcnlfc2l6ZSA9IChzaXplX3QpZlB0ci0+ZmJp LmZiaV9mYnNpemU7CisJbWVtb3J5X3NpemUgLT0gbWVtb3J5X3NpemUgJSBmUHRyLT5mYmkuZmJp X3N0cmlkZTsKKwl2aXNpYmxlX3NpemUgPSAoc2l6ZV90KWZQdHItPmZiaS5mYmlfc3RyaWRlICoK KwkgICAgZlB0ci0+ZmJpLmZiaV9oZWlnaHQ7CisJaWYgKG1lbW9yeV9zaXplIDwgdmlzaWJsZV9z aXplIHx8CisJICAgIG1lbW9yeV9zaXplIC8gZlB0ci0+ZmJpLmZiaV9zdHJpZGUgPiBJTlRfTUFY KQorCQlyZXR1cm4gRkFMU0U7CisKKwlwRXhhID0gZXhhRHJpdmVyQWxsb2MoKTsKKwlpZiAocEV4 YSA9PSBOVUxMKQorCQlyZXR1cm4gRkFMU0U7CisKKwlmUHRyLT5wRXhhID0gcEV4YTsKKwlmUHRy LT5leGFfYWN0aXZlID0gVFJVRTsKKworCXBFeGEtPmV4YV9tYWpvciA9IEVYQV9WRVJTSU9OX01B Sk9SOworCXBFeGEtPmV4YV9taW5vciA9IEVYQV9WRVJTSU9OX01JTk9SOworCXBFeGEtPm1lbW9y eUJhc2UgPSBmUHRyLT5mYnN0YXJ0OworCXBFeGEtPm1lbW9yeVNpemUgPSBtZW1vcnlfc2l6ZTsK KwlwRXhhLT5vZmZTY3JlZW5CYXNlID0gdmlzaWJsZV9zaXplOworCXBFeGEtPnBpeG1hcE9mZnNl dEFsaWduID0gKGludClmUHRyLT5mYmkuZmJpX3N0cmlkZTsKKwlwRXhhLT5waXhtYXBQaXRjaEFs aWduID0gKGludClmUHRyLT5mYmkuZmJpX3N0cmlkZTsKKwlwRXhhLT5mbGFncyA9IEVYQV9PRkZT Q1JFRU5fUElYTUFQUyB8IEVYQV9NSVhFRF9QSVhNQVBTOworCXBFeGEtPm1heFggPSAoaW50KWZQ dHItPmZiaS5mYmlfd2lkdGg7CisJcEV4YS0+bWF4WSA9IChpbnQpKG1lbW9yeV9zaXplIC8gZlB0 ci0+ZmJpLmZiaV9zdHJpZGUpOworCisJcEV4YS0+V2FpdE1hcmtlciA9IFdzZmJFWEFXYWl0TWFy a2VyOworCS8qIERPQkxJVCBjb21wbGV0ZXMgc3luY2hyb25vdXNseSwgc28gdGhlc2UgaG9va3Mg bmVlZCBubyBleGFNYXJrU3luYygpLiAqLworCXBFeGEtPlByZXBhcmVTb2xpZCA9IFdzZmJFWEFQ cmVwYXJlU29saWQ7CisJcEV4YS0+U29saWQgPSBXc2ZiRVhBU29saWQ7CisJcEV4YS0+RG9uZVNv bGlkID0gV3NmYkVYQURvbmVTb2xpZDsKKwlwRXhhLT5QcmVwYXJlQ29weSA9IFdzZmJFWEFQcmVw YXJlQ29weTsKKwlwRXhhLT5Db3B5ID0gV3NmYkVYQUNvcHk7CisJcEV4YS0+RG9uZUNvcHkgPSBX c2ZiRVhBRG9uZUNvcHk7CisKKwlpZiAoIWV4YURyaXZlckluaXQocFNjcmVlbiwgcEV4YSkpIHsK KwkJZlB0ci0+ZXhhX2FjdGl2ZSA9IEZBTFNFOworCQlmUHRyLT5wRXhhID0gTlVMTDsKKwkJZnJl ZShwRXhhKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCXJldHVybiBUUlVFOworfQorCisjZW5k aWYgLyogSEFWRV9XU0ZCX0VYQSAqLwo= --_003_PH6P220MB9841969C3D35E60749EE53E0D6C9C42PH6P220MB984196_--