From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH] dma-buf: Replace reservation shared fence array with a compressed radix tree Date: Mon, 14 Nov 2016 08:31:58 +0000 Message-ID: <20161114083158.12135-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: dri-devel@lists.freedesktop.org Cc: Chunming Zhou , Thomas Hellstrom , Flora Cui , David Airlie , intel-gfx@lists.freedesktop.org, Sinclair Yeh , =?UTF-8?q?Michel=20D=C3=A4nzer?= , Sumit Semwal , Ben Skeggs , Russell King , Alex Deucher , Daniel Vetter , =?UTF-8?q?Christian=20K=C3=B6nig?= , Monk Liu , Lucas Stach List-Id: intel-gfx@lists.freedesktop.org VGhlIHByaW1hcnkgb3BlcmF0aW9uIG9uIHRoZSBzaGFyZWQgZmVuY2UgYXJyYXlzIGlzIGluc2Vy dGlvbiBhbmQKcmV0cmlldmFsLiAgUmV0cmlldmFsIGlzIHJlYXNvbmFibHkgZmFzdCwgYXMgd2Ug anVzdCBjb3B5IHRoZSBhcnJheSwgYnV0Cmluc2VydGlvbiBpbnRvIHRoZSBzaGFyZWQgZmVuY2Ug YXJyYXkgaXMgc2xvdyBhcyB3ZSBtdXN0IGl0ZXJhdGUgb3ZlciBhbGwKY3VycmVudCBmZW5jZXMg dG8gZGlzY2FyZCBhbiBvbGRlciBmZW5jZS4gIChOb3RlIGFsc28gdGhhdCBzaW5jZSB0aGUKYXJy YXkgaXMgbm90IGF1dG9wcnVuaW5nLCB3ZSBjYW5ub3QgaG9vayBpbiB0aGUgZmVuY2Ugc2lnbmFs IGNhbGxiYWNrIGR1ZQp0byBsb2NraW5nIGNvbnN0cmFpbnRzLCB0aHVzIGl0IGNhbiBncm93IHZl cnksIHZlcnkgbGFyZ2UuKSAgVGhpcywgY291cGxlZAp3aXRoIHRoZSBhdG9taWNzIHRvIGFjcXVp cmUgYW5kIHJlbGVhc2UgdGhlIHNoYXJlZCBmZW5jZSwgY2F1c2VzIGEgc2V2ZXJlCnBlcmZvcm1h bmNlIGRlZ3JhZGF0aW9uIGFuZCBzY2FsaW5nIGJvdHRsZW5lY2ssIGFzIGZlbHQgYnkgaTkxNS5r byBpbgpjb21taXQgZDA3ZjBlNTliMmM3ICgiZHJtL2k5MTU6IE1vdmUgR0VNIGFjdGl2aXR5IHRy YWNraW5nIGludG8gYSBjb21tb24Kc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCIpLiAgVG8gc3Bl ZWQgdXAgaW5zZXJ0aW9uLCB3ZSB3YW50IGEgZGlyZWN0CnJlcGxhY2VtZW50IG9mIHRoZSBwZXIt Y29udGV4dCBzbG90LiBFbnRlciB0aGUgcmFkaXggdHJlZS4KClRoZSBrZXJuZWwgYWxyZWFkeSBo YXMgYSBjb3VwbGUgb2Ygb3B0aW9ucyBmb3IgaW50ZWdlciByYWRpeCB0cmVlcywgYnV0CmJvdGgg YXJlIG5vdCBzdWl0YWJsZSBmb3IgdXMgZm9yIGEgY291cGxlIG9mIHJlYXNvbnMuICBGaXJzdCB3 ZSBuZWVkIGEKcGVyLXRyZWUgcHJlYWxsb2NhdGlvbiBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBh ZGRpbmcgYSBmZW5jZSBkb2VzIG5vdApmYWlsLiAgQm90aCByYWRpeHRyZWUgYW5kIGlkciBvbmx5 IG9mZmVyIHByZWFsbG9jYXRpb24gdW5kZXIgYSBwcmVlbXB0CmRpc2FibGVkIGNyaXRpY2FsIHNl Y3Rpb24sIHVuc3VpdGFibGUgZm9yIG91ciBleGlzdGluZyB1c2Vycy4gIGlkciBoYXMKYW4gaW50 ZXJuYWwgX19pZHJfcHJlX2dldCB0aGF0IGNvdWxkIGJlIGV4cG9ydGVkIC0gYnV0IGlkciBkb2Vz IG5vdCB5ZXQKc3VwcG9ydCBpbnNlcnRpbmcgZW50cmllcyBhdCBhbiBhcmJpdHJhcnkgbG9jYXRp b24uICBTZWNvbmRseSwgbmVpdGhlcgp0cmVlIHN1cHBvcnRzIGZ1bGwgdTY0IGludGVnZXJzIGFz IHVzZWQgYnkgdGhlIGZlbmNlIGNvbnRleHQgaWRlbnRpZmllcnMKKHRob3VnaCByYWRpeHRyZWUg d291bGQgc3VwcG9ydCB0aGF0IG9uIDY0Yml0IHBsYXRmb3JtcykuICBBbmQgZmluYWxseSwKaWYg d2UgaWdub3JlIHRoZSBBUEkgc2hvcnRjb21pbmdzLCByYWRpeHRyZWUgc3RpbGwgYXBwZWFycyB0 b28gaGlnaCBpbgp0aGUgcHJvZmlsZXMhCgpTbyB3aGF0IGFyZSBvdXIgcmVxdWlyZW1lbnRzIGZv ciB0aGUgc2hhcmVkIGZlbmNlIGFycmF5PwoKCS0gZ3VhcmFudGVlZCBpbnNlcnRpb24KCS0gZmFz dCBpbnNlcnRpb24KCS0gUkNVLXNhZmUsIGZhc3QgdHJhdmVyc2FsCgktIDY0Yml0IGlkZW50aWZp ZXJzCgpUbyBndWFyYW50ZWUgaW5zZXJ0aW9uLCB3ZSBuZWVkIHRvIHByZWFsbG9jYXRlIGVub3Vn aCBzdG9yYWdlIHRvIHNhdGlzZnkKYSBsYXRlciBpbnNlcnRpb24uICBUaGUgcmVzZXJ2YXRpb24g b2JqZWN0IEFQSSByZXF1aXJlcyBldmVyeQphZGRfc2hhcmVkX2ZlbmNlIHRvIHByZWNlZGVkIGJ5 IGEgY2FsbCB0byByZXNlcnZlX3NoYXJlZF9mZW5jZS4gIEZvciBhbgp1bmNvbXByZXNzZWQgcmFk aXggdHJlZSB3ZSB3b3VsZCBuZWVkIHRvIHByZWFsbG9jYXRlIGVub3VnaCBsYXllcnMgdG8gY292 ZXIKdGhlIGZ1bGwgNjRiaXQgaGVpZ2h0LCBidXQgd2l0aCBhIGNvbXByZXNzZWQgcmFkaXggdHJl ZSB3ZSBvbmx5IHJlcXVpcmUgYQptYXhpbXVtIG9mIDIgc3BhcmUgbGF5ZXJzLgoKVGhlIGNvbXBy ZXNzZWQgdHJlZSBhbHNvIG9mZmVycyBhIHVzZWZ1bCBwcm9wZXJ0eSB3cnQgdG8gdGhlIHBhdHRl cm4gb2YKZmVuY2VzIHVzZWQuICBUaGUgZmVuY2UgY29udGV4dHMgYXJlIGFsbG9jYXRlZCBhcyBh IHB1cmUgY3ljbGljIGF0b21pYzY0LAppLmUuIGl0IGlzIHNwYXJzZSBhbmQgZXZlciBpbmNyZW1l bnRpbmcuICBIb3dldmVyLCB0aW1lbGluZXMgdGVuZCB0bwpjbHVzdGVyIChpLmUuIHRoZXkgd2ls bCBhbGxvY2F0ZSBhIGNsdXN0ZXIgb2YgZmVuY2UgY29udGV4dHMgZm9yCnRoZW1zZWx2ZXMgYW5k IHByaW1hcmlseSB1c2UgdGhlc2UpLiAgU28gd2UgbWF5IHNlZSB0aGF0IHdlIGhhdmUgYQptaXh0 dXJlIG9mIGxvdyBmZW5jZSBjb250ZW50cyBhbmQgYSBncm91cCBvZiB2ZXJ5IGhpZ2ggY29udGV4 dHMgKGUuZy4KYSBncm91cCBhdCBpZDwxNiBhbmQgYSBncm91cCBhdCBpZD42NTUzNikuICBUaGUg Y29tcHJlc3NlZCB0cmVlIGF2b2lkcwpoYXZpbmcgdG8gYWxsb2NhdGUgdGhlIGludGVybWVkaWF0 ZSBsYXllcnMgKHJlZHVjaW5nIHRoZSBwb2ludGVyIGRhbmNpbmcKb24gbG9va3VwIGFuZCB0cmF2 ZXJzYWwpIC0gc3RpbGwgbm90IGFzIGRlbnNlIGFzIHRoZSBjdXJyZW50IGNvbXBhY3QKYXJyYXks IGJ1dCB1bmRlciB0eXBpY2FsIGNvbmRpdGlvbnMgYXMgZ29vZCBhcy4gIChIb3dldmVyLCB0aGUg Y3VycmVudAphcnJheSByZXF1aXJlcyBjb250aWd1b3VzIGFsbG9jYXRpb25zIC0gYSBzY2FyY2Ug cmVzb3VyY2UgZm9yIHRoZSBldmVyCmV4cGFuZGluZyBhcnJheSEpICBUaGUgZGVuc2l0eSBjb3Vs ZCBiZSBpbXByb3ZlZCBieSBzd2l0Y2hpbmcgZnJvbSBhCnNpbXBsZSBkYW5nZXJvdXNseSB3cmFw cGluZyBhdG9taWM2NCB0byBhbiBpZGEgZm9yIGZlbmNlIGNvbnRleHQKYWxsb2NhdGlvbi4KClNp Z25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpDYzog U3VtaXQgU2Vtd2FsIDxzdW1pdC5zZW13YWxAbGluYXJvLm9yZz4KQ2M6IEFsZXggRGV1Y2hlciA8 YWxleGFuZGVyLmRldWNoZXJAYW1kLmNvbT4KQ2M6ICJDaHJpc3RpYW4gS8O2bmlnIiA8Y2hyaXN0 aWFuLmtvZW5pZ0BhbWQuY29tPgpDYzogRGF2aWQgQWlybGllIDxhaXJsaWVkQGxpbnV4LmllPgpD YzogTHVjYXMgU3RhY2ggPGwuc3RhY2hAcGVuZ3V0cm9uaXguZGU+CkNjOiBSdXNzZWxsIEtpbmcg PGxpbnV4K2V0bmF2aXZAYXJtbGludXgub3JnLnVrPgpDYzogQ2hyaXN0aWFuIEdtZWluZXIgPGNo cmlzdGlhbi5nbWVpbmVyQGdtYWlsLmNvbT4KQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0 ZXJAaW50ZWwuY29tPgpDYzogSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGxpbnV4LmludGVsLmNv bT4KQ2M6IFJvYiBDbGFyayA8cm9iZGNsYXJrQGdtYWlsLmNvbT4KQ2M6IEJlbiBTa2VnZ3MgPGJz a2VnZ3NAcmVkaGF0LmNvbT4KQ2M6IENodW5taW5nIFpob3UgPERhdmlkMS5aaG91QGFtZC5jb20+ CkNjOiBLZW4gV2FuZyA8UWluZ3FpbmcuV2FuZ0BhbWQuY29tPgpDYzogTW9uayBMaXUgPG1vbmsu bGl1QGFtZC5jb20+CkNjOiBTaW5jbGFpciBZZWggPHN5ZWhAdm13YXJlLmNvbT4KQ2M6IFRob21h cyBIZWxsc3Ryb20gPHRoZWxsc3Ryb21Adm13YXJlLmNvbT4KQ2M6ICJNaWNoZWwgRMOkbnplciIg PG1pY2hlbC5kYWVuemVyQGFtZC5jb20+CkNjOiBGbG9yYSBDdWkgPEZsb3JhLkN1aUBhbWQuY29t PgpDYzogZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwotLS0KIGRyaXZlcnMvZG1hLWJ1 Zi9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTMgKwogZHJpdmVycy9kbWEtYnVm L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2RtYS1idWYv ZG1hLWJ1Zi5jICAgICAgICAgICAgICAgICAgICAgIHwgIDM1ICstCiBkcml2ZXJzL2RtYS1idWYv cmVzZXJ2YXRpb24uYyAgICAgICAgICAgICAgICAgIHwgNjUwICsrKysrKysrKysrKystLS0tLS0t LS0tLS0KIGRyaXZlcnMvZG1hLWJ1Zi90ZXN0LXJlc2VydmF0aW9uLmMgICAgICAgICAgICAgfCAz MDggKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfc3luYy5j ICAgICAgIHwgIDE0ICstCiBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jICAg ICAgICAgIHwgIDE1ICstCiBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dwdS5jICAg ICAgICAgIHwgIDE0ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAg ICAgICAgIHwgIDE3ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYyAgICAgICAgICAg ICAgICAgIHwgIDI5ICstCiBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZlbmNlLmMg ICAgICAgIHwgIDE1ICstCiBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jICAg ICAgICAgIHwgIDIxICstCiBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kZWJ1Z2ZzLmMgICAgICAg ICAgICAgIHwgICA5ICstCiBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zeW5jLmMgICAg ICAgICAgIHwgIDEyICstCiBkcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jICAgICAgICAgICAg ICAgICAgIHwgIDEwICstCiBpbmNsdWRlL2xpbnV4L3Jlc2VydmF0aW9uLmggICAgICAgICAgICAg ICAgICAgIHwgMTU0ICsrKystLQogdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZG1hLWJ1Zi9yZXNl cnZhdGlvbi5zaCB8ICAxMSArCiAxNyBmaWxlcyBjaGFuZ2VkLCA4NTYgaW5zZXJ0aW9ucygrKSwg NDcyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi90ZXN0 LXJlc2VydmF0aW9uLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0 cy9kbWEtYnVmL3Jlc2VydmF0aW9uLnNoCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL0tj b25maWcgYi9kcml2ZXJzL2RtYS1idWYvS2NvbmZpZwppbmRleCBlZDNiNzg1YmFlMzcuLmM3NDQ4 MWM3MTViOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEtYnVmL0tjb25maWcKKysrIGIvZHJpdmVy cy9kbWEtYnVmL0tjb25maWcKQEAgLTMwLDQgKzMwLDE3IEBAIGNvbmZpZyBTV19TWU5DCiAJICBX QVJOSU5HOiBpbXByb3BlciB1c2Ugb2YgdGhpcyBjYW4gcmVzdWx0IGluIGRlYWRsb2NraW5nIGtl cm5lbAogCSAgZHJpdmVycyBmcm9tIHVzZXJzcGFjZS4gSW50ZW5kZWQgZm9yIHRlc3QgYW5kIGRl YnVnIG9ubHkuCiAKK2NvbmZpZyBSRVNFUlZBVElPTl9TRUxGVEVTVAorCXRyaXN0YXRlICJrc2Vs ZnRlc3RzIGZvciByZXNlcnZhdGlvbl9vYmplY3RzIgorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVM CisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gcHJvdmlkZXMgYSBrZXJu ZWwgbW9kdWxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdAorCSAgdGhlIHN0cnVjdCByZXNlcnZh dGlvbl9vYmplY3QgQVBJLiBUaGlzIG9wdGlvbiBpcyBub3QgdXNlZnVsCisJICBmb3IgZGlzdHJp YnV0aW9ucyBvciBnZW5lcmFsIGtlcm5lbHMsIGJ1dCBvbmx5IGZvciBrZXJuZWwKKwkgIGRldmVs b3BlcnMgd29ya2luZyBvbiBkbWEtYnVmLCBkbWEtZmVuY2VzIGFuZCwgb2YgY291cnNlLAorCSAg cmVzZXJ2YXRpb25fb2JqZWN0cy4KKworCSAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUKKwogZW5k bWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlIGIvZHJpdmVycy9kbWEt YnVmL01ha2VmaWxlCmluZGV4IGMzM2JmODg2MzE0Ny4uNDgzMzNhNTkwMDZiIDEwMDY0NAotLS0g YS9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxl CkBAIC0xLDMgKzEsNCBAQAogb2JqLXkgOj0gZG1hLWJ1Zi5vIGRtYS1mZW5jZS5vIGRtYS1mZW5j ZS1hcnJheS5vIHJlc2VydmF0aW9uLm8gc2Vxbm8tZmVuY2Uubwogb2JqLSQoQ09ORklHX1NZTkNf RklMRSkJCSs9IHN5bmNfZmlsZS5vCiBvYmotJChDT05GSUdfU1dfU1lOQykJCSs9IHN3X3N5bmMu byBzeW5jX2RlYnVnLm8KK29iai0kKENPTkZJR19SRVNFUlZBVElPTl9TRUxGVEVTVCkgKz0gdGVz dC1yZXNlcnZhdGlvbi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jIGIv ZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYwppbmRleCBlNzJlNjQ0ODQxMzEuLmJjODdiNDhhMGQz ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYworKysgYi9kcml2ZXJzL2Rt YS1idWYvZG1hLWJ1Zi5jCkBAIC0xMzksMTAgKzEzOSw5IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQg ZG1hX2J1Zl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICpwb2xsKQogewogCXN0 cnVjdCBkbWFfYnVmICpkbWFidWY7CiAJc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdjsK LQlzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0X2xpc3QgKmZvYmo7Ci0Jc3RydWN0IGRtYV9mZW5j ZSAqZmVuY2VfZXhjbDsKKwlzdHJ1Y3QgZG1hX2ZlbmNlICpleGNsOwogCXVuc2lnbmVkIGxvbmcg ZXZlbnRzOwotCXVuc2lnbmVkIHNoYXJlZF9jb3VudCwgc2VxOworCXVuc2lnbmVkIGludCBzZXE7 CiAKIAlkbWFidWYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaWYgKCFkbWFidWYgfHwgIWRtYWJ1 Zi0+cmVzdikKQEAgLTE2MCwyMiArMTU5LDE4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZG1hX2J1 Zl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICpwb2xsKQogCXNlcSA9IHJlYWRf c2VxY291bnRfYmVnaW4oJnJlc3YtPnNlcSk7CiAJcmN1X3JlYWRfbG9jaygpOwogCi0JZm9iaiA9 IHJjdV9kZXJlZmVyZW5jZShyZXN2LT5mZW5jZSk7Ci0JaWYgKGZvYmopCi0JCXNoYXJlZF9jb3Vu dCA9IGZvYmotPnNoYXJlZF9jb3VudDsKLQllbHNlCi0JCXNoYXJlZF9jb3VudCA9IDA7Ci0JZmVu Y2VfZXhjbCA9IHJjdV9kZXJlZmVyZW5jZShyZXN2LT5mZW5jZV9leGNsKTsKKwlleGNsID0gcmN1 X2RlcmVmZXJlbmNlKHJlc3YtPmV4Y2wpOwogCWlmIChyZWFkX3NlcWNvdW50X3JldHJ5KCZyZXN2 LT5zZXEsIHNlcSkpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCWdvdG8gcmV0cnk7CiAJfQog Ci0JaWYgKGZlbmNlX2V4Y2wgJiYgKCEoZXZlbnRzICYgUE9MTE9VVCkgfHwgc2hhcmVkX2NvdW50 ID09IDApKSB7CisJaWYgKGV4Y2wgJiYKKwkgICAgKCEoZXZlbnRzICYgUE9MTE9VVCkgfHwgIXJl c2VydmF0aW9uX29iamVjdF9oYXNfc2hhcmVkKHJlc3YpKSkgewogCQlzdHJ1Y3QgZG1hX2J1Zl9w b2xsX2NiX3QgKmRjYiA9ICZkbWFidWYtPmNiX2V4Y2w7CiAJCXVuc2lnbmVkIGxvbmcgcGV2ZW50 cyA9IFBPTExJTjsKIAotCQlpZiAoc2hhcmVkX2NvdW50ID09IDApCisJCWlmICghcmVzZXJ2YXRp b25fb2JqZWN0X2hhc19zaGFyZWQocmVzdikpCiAJCQlwZXZlbnRzIHw9IFBPTExPVVQ7CiAKIAkJ c3Bpbl9sb2NrX2lycSgmZG1hYnVmLT5wb2xsLmxvY2spOwpAQCAtMTg3LDI4ICsxODIsMjggQEAg c3RhdGljIHVuc2lnbmVkIGludCBkbWFfYnVmX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxf dGFibGUgKnBvbGwpCiAJCXNwaW5fdW5sb2NrX2lycSgmZG1hYnVmLT5wb2xsLmxvY2spOwogCiAJ CWlmIChldmVudHMgJiBwZXZlbnRzKSB7Ci0JCQlpZiAoIWRtYV9mZW5jZV9nZXRfcmN1KGZlbmNl X2V4Y2wpKSB7CisJCQlpZiAoIWRtYV9mZW5jZV9nZXRfcmN1KGV4Y2wpKSB7CiAJCQkJLyogZm9y Y2UgYSByZWNoZWNrICovCiAJCQkJZXZlbnRzICY9IH5wZXZlbnRzOwogCQkJCWRtYV9idWZfcG9s bF9jYihOVUxMLCAmZGNiLT5jYik7Ci0JCQl9IGVsc2UgaWYgKCFkbWFfZmVuY2VfYWRkX2NhbGxi YWNrKGZlbmNlX2V4Y2wsICZkY2ItPmNiLAorCQkJfSBlbHNlIGlmICghZG1hX2ZlbmNlX2FkZF9j YWxsYmFjayhleGNsLCAmZGNiLT5jYiwKIAkJCQkJCQkgICBkbWFfYnVmX3BvbGxfY2IpKSB7CiAJ CQkJZXZlbnRzICY9IH5wZXZlbnRzOwotCQkJCWRtYV9mZW5jZV9wdXQoZmVuY2VfZXhjbCk7CisJ CQkJZG1hX2ZlbmNlX3B1dChleGNsKTsKIAkJCX0gZWxzZSB7CiAJCQkJLyoKIAkJCQkgKiBObyBj YWxsYmFjayBxdWV1ZWQsIHdha2UgdXAgYW55IGFkZGl0aW9uYWwKIAkJCQkgKiB3YWl0ZXJzLgog CQkJCSAqLwotCQkJCWRtYV9mZW5jZV9wdXQoZmVuY2VfZXhjbCk7CisJCQkJZG1hX2ZlbmNlX3B1 dChleGNsKTsKIAkJCQlkbWFfYnVmX3BvbGxfY2IoTlVMTCwgJmRjYi0+Y2IpOwogCQkJfQogCQl9 CiAJfQogCi0JaWYgKChldmVudHMgJiBQT0xMT1VUKSAmJiBzaGFyZWRfY291bnQgPiAwKSB7CisJ aWYgKChldmVudHMgJiBQT0xMT1VUKSAmJiByZXNlcnZhdGlvbl9vYmplY3RfaGFzX3NoYXJlZChy ZXN2KSkgewogCQlzdHJ1Y3QgZG1hX2J1Zl9wb2xsX2NiX3QgKmRjYiA9ICZkbWFidWYtPmNiX3No YXJlZDsKLQkJaW50IGk7CisJCXN0cnVjdCByZXNlcnZhdGlvbl9zaGFyZWRfaXRlciBpdGVyOwog CiAJCS8qIE9ubHkgcXVldWUgYSBuZXcgY2FsbGJhY2sgaWYgbm8gZXZlbnQgaGFzIGZpcmVkIHll dCAqLwogCQlzcGluX2xvY2tfaXJxKCZkbWFidWYtPnBvbGwubG9jayk7CkBAIC0yMjEsOCArMjE2 LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBkbWFfYnVmX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUs IHBvbGxfdGFibGUgKnBvbGwpCiAJCWlmICghKGV2ZW50cyAmIFBPTExPVVQpKQogCQkJZ290byBv dXQ7CiAKLQkJZm9yIChpID0gMDsgaSA8IHNoYXJlZF9jb3VudDsgKytpKSB7Ci0JCQlzdHJ1Y3Qg ZG1hX2ZlbmNlICpmZW5jZSA9IHJjdV9kZXJlZmVyZW5jZShmb2JqLT5zaGFyZWRbaV0pOworCQly ZXNlcnZhdGlvbl9vYmplY3RfZm9yX2VhY2hfc2hhcmVkKHJlc3YsIGl0ZXIpIHsKKwkJCXN0cnVj dCBkbWFfZmVuY2UgKmZlbmNlID0gaXRlci5mZW5jZTsKIAogCQkJaWYgKCFkbWFfZmVuY2VfZ2V0 X3JjdShmZW5jZSkpIHsKIAkJCQkvKgpAQCAtMjQ1LDcgKzI0MCw3IEBAIHN0YXRpYyB1bnNpZ25l ZCBpbnQgZG1hX2J1Zl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICpwb2xsKQog CQl9CiAKIAkJLyogTm8gY2FsbGJhY2sgcXVldWVkLCB3YWtlIHVwIGFueSBhZGRpdGlvbmFsIHdh aXRlcnMuICovCi0JCWlmIChpID09IHNoYXJlZF9jb3VudCkKKwkJaWYgKGV2ZW50cyAmIFBPTExP VVQpCiAJCQlkbWFfYnVmX3BvbGxfY2IoTlVMTCwgJmRjYi0+Y2IpOwogCX0KIApkaWZmIC0tZ2l0 IGEvZHJpdmVycy9kbWEtYnVmL3Jlc2VydmF0aW9uLmMgYi9kcml2ZXJzL2RtYS1idWYvcmVzZXJ2 YXRpb24uYwppbmRleCAzOTM4MTdlODQ5ZWQuLjY1YmY4ODFiNTk3NCAxMDA2NDQKLS0tIGEvZHJp dmVycy9kbWEtYnVmL3Jlc2VydmF0aW9uLmMKKysrIGIvZHJpdmVycy9kbWEtYnVmL3Jlc2VydmF0 aW9uLmMKQEAgLTQ2LDYgKzQ2LDE0IEBACiAgKiB3cml0ZS1zaWRlIHVwZGF0ZXMuCiAgKi8KIAor I2lmIDAKKyNkZWZpbmUgYXNzZXJ0KHgpIEJVR19PTighKHgpKQorI2RlZmluZSBkYmcoeCkgcHJf ZXJyIHgKKyNlbHNlCisjZGVmaW5lIGFzc2VydCh4KSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5l IGRiZyh4KSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKwogREVGSU5FX1dXX0NMQVNTKHJlc2Vy dmF0aW9uX3d3X2NsYXNzKTsKIEVYUE9SVF9TWU1CT0wocmVzZXJ2YXRpb25fd3dfY2xhc3MpOwog CkBAIC01NSwxNDkgKzYzLDI2MiBAQCBFWFBPUlRfU1lNQk9MKHJlc2VydmF0aW9uX3NlcWNvdW50 X2NsYXNzKTsKIGNvbnN0IGNoYXIgcmVzZXJ2YXRpb25fc2VxY291bnRfc3RyaW5nW10gPSAicmVz ZXJ2YXRpb25fc2VxY291bnQiOwogRVhQT1JUX1NZTUJPTChyZXNlcnZhdGlvbl9zZXFjb3VudF9z dHJpbmcpOwogCi0vKioKLSAqIHJlc2VydmF0aW9uX29iamVjdF9yZXNlcnZlX3NoYXJlZCAtIFJl c2VydmUgc3BhY2UgdG8gYWRkIGEgc2hhcmVkCi0gKiBmZW5jZSB0byBhIHJlc2VydmF0aW9uX29i amVjdC4KLSAqIEBvYmo6IHJlc2VydmF0aW9uIG9iamVjdAotICoKLSAqIFNob3VsZCBiZSBjYWxs ZWQgYmVmb3JlIHJlc2VydmF0aW9uX29iamVjdF9hZGRfc2hhcmVkX2ZlbmNlKCkuICBNdXN0Ci0g KiBiZSBjYWxsZWQgd2l0aCBvYmotPmxvY2sgaGVsZC4KLSAqCi0gKiBSRVRVUk5TCi0gKiBaZXJv IGZvciBzdWNjZXNzLCBvciAtZXJybm8KLSAqLwotaW50IHJlc2VydmF0aW9uX29iamVjdF9yZXNl cnZlX3NoYXJlZChzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpvYmopCisjZGVmaW5lIFNISUZU IGlsb2cyKE5TSEFSRUQpCisjZGVmaW5lIE1BU0sgKE5TSEFSRUQgLSAxKQorCit2b2lkIF9fcmVz ZXJ2YXRpb25fc2hhcmVkX2l0ZXJfbmV4dChzdHJ1Y3QgcmVzZXJ2YXRpb25fc2hhcmVkX2l0ZXIg Kml0ZXIpCiB7Ci0Jc3RydWN0IHJlc2VydmF0aW9uX29iamVjdF9saXN0ICpmb2JqLCAqb2xkOwot CXUzMiBtYXg7Ci0KLQlvbGQgPSByZXNlcnZhdGlvbl9vYmplY3RfZ2V0X2xpc3Qob2JqKTsKLQot CWlmIChvbGQgJiYgb2xkLT5zaGFyZWRfbWF4KSB7Ci0JCWlmIChvbGQtPnNoYXJlZF9jb3VudCA8 IG9sZC0+c2hhcmVkX21heCkgewotCQkJLyogcGVyZm9ybSBhbiBpbi1wbGFjZSB1cGRhdGUgKi8K LQkJCWtmcmVlKG9iai0+c3RhZ2VkKTsKLQkJCW9iai0+c3RhZ2VkID0gTlVMTDsKLQkJCXJldHVy biAwOwotCQl9IGVsc2UKLQkJCW1heCA9IG9sZC0+c2hhcmVkX21heCAqIDI7Ci0JfSBlbHNlCi0J CW1heCA9IDQ7Ci0KLQkvKgotCSAqIHJlc2l6ZSBvYmotPnN0YWdlZCBvciBhbGxvY2F0ZSBpZiBp dCBkb2Vzbid0IGV4aXN0LAotCSAqIG5vb3AgaWYgYWxyZWFkeSBjb3JyZWN0IHNpemUKLQkgKi8K LQlmb2JqID0ga3JlYWxsb2Mob2JqLT5zdGFnZWQsIG9mZnNldG9mKHR5cGVvZigqZm9iaiksIHNo YXJlZFttYXhdKSwKLQkJCUdGUF9LRVJORUwpOwotCWlmICghZm9iaikKLQkJcmV0dXJuIC1FTk9N RU07CisJc3RydWN0IHJlc2VydmF0aW9uX3NoYXJlZF9sYXllciAqcCA9IGl0ZXItPnA7CisJaW50 IHBvcywgaDsKIAotCW9iai0+c3RhZ2VkID0gZm9iajsKLQlmb2JqLT5zaGFyZWRfbWF4ID0gbWF4 OwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChyZXNlcnZhdGlvbl9vYmplY3RfcmVzZXJ2 ZV9zaGFyZWQpOworCWRvIHsKKwkJcCA9IHAtPnBhcmVudDsKKwkJaWYgKCFwKSB7CisJCQlpdGVy LT5mZW5jZSA9IE5VTEw7CisJCQlyZXR1cm47CisJCX0KIAotc3RhdGljIHZvaWQKLXJlc2VydmF0 aW9uX29iamVjdF9hZGRfc2hhcmVkX2lucGxhY2Uoc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCAq b2JqLAotCQkJCSAgICAgIHN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3RfbGlzdCAqZm9iaiwKLQkJ CQkgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKLXsKLQl1MzIgaTsKKwkJaCA9IHAtPmhl aWdodCAvIFNISUZUOworCQlwb3MgPSBmbnMocC0+Yml0bWFwLCBpdGVyLT5zdGFja1toXSArIDEp OworCX0gd2hpbGUgKCFwb3MpOwogCi0JZG1hX2ZlbmNlX2dldChmZW5jZSk7CisJaXRlci0+c3Rh Y2tbaF0gPSAtLXBvczsKIAotCXByZWVtcHRfZGlzYWJsZSgpOwotCXdyaXRlX3NlcWNvdW50X2Jl Z2luKCZvYmotPnNlcSk7CisJX19yZXNlcnZhdGlvbl9zaGFyZWRfaXRlcl9maWxsKGl0ZXIsIHAt PnNsb3RbcG9zXSk7Cit9CitFWFBPUlRfU1lNQk9MKF9fcmVzZXJ2YXRpb25fc2hhcmVkX2l0ZXJf bmV4dCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZm9iai0+c2hhcmVkX2NvdW50OyArK2kpIHsKLQkJ c3RydWN0IGRtYV9mZW5jZSAqb2xkX2ZlbmNlOworI2RlZmluZSBwdHJfbWFzayhwdHIpIChfX2Fs aWdub2ZfXygqKHB0cikpIC0gMSkKIAotCQlvbGRfZmVuY2UgPSByY3VfZGVyZWZlcmVuY2VfcHJv dGVjdGVkKGZvYmotPnNoYXJlZFtpXSwKLQkJCQkJCXJlc2VydmF0aW9uX29iamVjdF9oZWxkKG9i aikpOworI2RlZmluZSBwdHJfbWFza19iaXRzKHB0cikgKHsJCQkJCQlcCisJdW5zaWduZWQgbG9u ZyBfX3YgPSAodW5zaWduZWQgbG9uZykocHRyKTsJCQlcCisJKHR5cGVvZihwdHIpKShfX3YgJiB+ cHRyX21hc2socHRyKSk7CQkJCVwKK30pCiAKLQkJaWYgKG9sZF9mZW5jZS0+Y29udGV4dCA9PSBm ZW5jZS0+Y29udGV4dCkgewotCQkJLyogbWVtb3J5IGJhcnJpZXIgaXMgYWRkZWQgYnkgd3JpdGVf c2VxY291bnRfYmVnaW4gKi8KLQkJCVJDVV9JTklUX1BPSU5URVIoZm9iai0+c2hhcmVkW2ldLCBm ZW5jZSk7Ci0JCQl3cml0ZV9zZXFjb3VudF9lbmQoJm9iai0+c2VxKTsKLQkJCXByZWVtcHRfZW5h YmxlKCk7CisjZGVmaW5lIHB0cl9nZXRfYml0cyhwdHIpICh7CQkJCQkJXAorCXVuc2lnbmVkIGxv bmcgX192ID0gKHVuc2lnbmVkIGxvbmcpKHB0cik7CQkJXAorCShfX3YgJiBwdHJfbWFzayhwdHIp KTsJCQkJCQlcCit9KQogCi0JCQlkbWFfZmVuY2VfcHV0KG9sZF9mZW5jZSk7Ci0JCQlyZXR1cm47 Ci0JCX0KKyNkZWZpbmUgcHRyX3NldF9iaXRzKHB0ciwgeCkgKHsJCQkJCQlcCisJdW5zaWduZWQg bG9uZyBfX3YgPSAodW5zaWduZWQgbG9uZykocHRyKTsJCQlcCisJKHR5cGVvZihwdHIpKShfX3Yg fCAoeCkpOwkJCQkJXAorfSkKKworc3RhdGljIHZvaWQgc2hhcmVkX2ZyZWVfbGF5ZXJzKHN0cnVj dCByZXNlcnZhdGlvbl9zaGFyZWRfbGF5ZXIgKnApCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlp ZiAocC0+aGVpZ2h0KSB7CisJCWZvciAoOyAoaSA9IGZmcyhwLT5iaXRtYXApKTsgcC0+Yml0bWFw ICY9IH4wIDw8IGkpCisJCQlzaGFyZWRfZnJlZV9sYXllcnMocC0+c2xvdFtpIC0gMV0pOworCX0g ZWxzZSB7CisJCWZvciAoOyAoaSA9IGZmcyhwLT5iaXRtYXApKTsgcC0+Yml0bWFwICY9IH4wIDw8 IGkpCisJCQlkbWFfZmVuY2VfcHV0KHAtPnNsb3RbaSAtIDFdKTsKIAl9CiAKLQkvKgotCSAqIG1l bW9yeSBiYXJyaWVyIGlzIGFkZGVkIGJ5IHdyaXRlX3NlcWNvdW50X2JlZ2luLAotCSAqIGZvYmot PnNoYXJlZF9jb3VudCBpcyBwcm90ZWN0ZWQgYnkgdGhpcyBsb2NrIHRvbwotCSAqLwotCVJDVV9J TklUX1BPSU5URVIoZm9iai0+c2hhcmVkW2ZvYmotPnNoYXJlZF9jb3VudF0sIGZlbmNlKTsKLQlm b2JqLT5zaGFyZWRfY291bnQrKzsKKwkvKiBEZWZlciB0aGUgZnJlZSB1bnRpbCBhZnRlciBhbnkg Y29uY3VycmVudCByZWFkZXJzIGZpbmlzaC4gKi8KKwlwLT5wYXJlbnQgPSBOVUxMOworCWtmcmVl X3JjdShwLCByY3UpOworfQogCi0Jd3JpdGVfc2VxY291bnRfZW5kKCZvYmotPnNlcSk7Ci0JcHJl ZW1wdF9lbmFibGUoKTsKK3N0YXRpYyB2b2lkIHNoYXJlZF9mcmVlKHN0cnVjdCByZXNlcnZhdGlv bl9zaGFyZWQgKnNoYXJlZCkKK3sKKwlpZiAoIXNoYXJlZC0+dG9wKQorCQlyZXR1cm47CisKKwlz aGFyZWRfZnJlZV9sYXllcnMoc2hhcmVkLT50b3ApOwogfQogCi1zdGF0aWMgdm9pZAotcmVzZXJ2 YXRpb25fb2JqZWN0X2FkZF9zaGFyZWRfcmVwbGFjZShzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0 ICpvYmosCi0JCQkJICAgICAgc3RydWN0IHJlc2VydmF0aW9uX29iamVjdF9saXN0ICpvbGQsCi0J CQkJICAgICAgc3RydWN0IHJlc2VydmF0aW9uX29iamVjdF9saXN0ICpmb2JqLAotCQkJCSAgICAg IHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQordm9pZCByZXNlcnZhdGlvbl9zaGFyZWRfZGVzdHJv eShzdHJ1Y3QgcmVzZXJ2YXRpb25fc2hhcmVkICpzaGFyZWQpCiB7Ci0JdW5zaWduZWQgaTsKLQlz dHJ1Y3QgZG1hX2ZlbmNlICpvbGRfZmVuY2UgPSBOVUxMOworCXN0cnVjdCByZXNlcnZhdGlvbl9z aGFyZWRfbGF5ZXIgKnA7CiAKLQlkbWFfZmVuY2VfZ2V0KGZlbmNlKTsKKwlzaGFyZWRfZnJlZShz aGFyZWQpOwogCi0JaWYgKCFvbGQpIHsKLQkJUkNVX0lOSVRfUE9JTlRFUihmb2JqLT5zaGFyZWRb MF0sIGZlbmNlKTsKLQkJZm9iai0+c2hhcmVkX2NvdW50ID0gMTsKLQkJZ290byBkb25lOworCXdo aWxlIChzaGFyZWQtPmZyZWVkKSB7CisJCXAgPSBwdHJfbWFza19iaXRzKHNoYXJlZC0+ZnJlZWQp OworCQlzaGFyZWQtPmZyZWVkID0gcC0+cGFyZW50OworCQlrZnJlZShwKTsKIAl9Cit9CitFWFBP UlRfU1lNQk9MKHJlc2VydmF0aW9uX3NoYXJlZF9kZXN0cm95KTsKIAotCS8qCi0JICogbm8gbmVl ZCB0byBidW1wIGZlbmNlIHJlZmNvdW50cywgcmN1X3JlYWQgYWNjZXNzCi0JICogcmVxdWlyZXMg dGhlIHVzZSBvZiBrcmVmX2dldF91bmxlc3NfemVybywgYW5kIHRoZQotCSAqIHJlZmVyZW5jZXMg ZnJvbSB0aGUgb2xkIHN0cnVjdCBhcmUgY2FycmllZCBvdmVyIHRvCi0JICogdGhlIG5ldy4KLQkg Ki8KLQlmb2JqLT5zaGFyZWRfY291bnQgPSBvbGQtPnNoYXJlZF9jb3VudDsKK19fbWFsbG9jIHN0 YXRpYyBzdHJ1Y3QgcmVzZXJ2YXRpb25fc2hhcmVkX2xheWVyICoKK3NoYXJlZF9hbGxvY19sYXll cihzdHJ1Y3QgcmVzZXJ2YXRpb25fc2hhcmVkICpzaGFyZWQpCit7CisJc3RydWN0IHJlc2VydmF0 aW9uX3NoYXJlZF9sYXllciAqcDsKKworCXAgPSBwdHJfbWFza19iaXRzKHNoYXJlZC0+ZnJlZWQp OworCXNoYXJlZC0+ZnJlZWQgPSBwLT5wYXJlbnQ7CisKKwlyZXR1cm4gcDsKK30KIAotCWZvciAo aSA9IDA7IGkgPCBvbGQtPnNoYXJlZF9jb3VudDsgKytpKSB7Ci0JCXN0cnVjdCBkbWFfZmVuY2Ug KmNoZWNrOworc3RhdGljIGludCBsYXllcl9pZHgoY29uc3Qgc3RydWN0IHJlc2VydmF0aW9uX3No YXJlZF9sYXllciAqcCwgdTY0IGlkKQoreworCXJldHVybiAoaWQgPj4gcC0+aGVpZ2h0KSAmIE1B U0s7Cit9CiAKLQkJY2hlY2sgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG9sZC0+c2hhcmVk W2ldLAotCQkJCQkJcmVzZXJ2YXRpb25fb2JqZWN0X2hlbGQob2JqKSk7CitzdGF0aWMgdm9pZCAq CitzaGFyZWRfZmVuY2VfcmVwbGFjZShzdHJ1Y3QgcmVzZXJ2YXRpb25fc2hhcmVkICpzaGFyZWQs IHU2NCBpZCwgdm9pZCAqaXRlbSkKK3sKKwlzdHJ1Y3QgcmVzZXJ2YXRpb25fc2hhcmVkX2xheWVy ICpwLCAqY3VyOworCXVuc2lnbmVkIGludCBpZHg7CiAKLQkJaWYgKCFvbGRfZmVuY2UgJiYgY2hl Y2stPmNvbnRleHQgPT0gZmVuY2UtPmNvbnRleHQpIHsKLQkJCW9sZF9mZW5jZSA9IGNoZWNrOwot CQkJUkNVX0lOSVRfUE9JTlRFUihmb2JqLT5zaGFyZWRbaV0sIGZlbmNlKTsKLQkJfSBlbHNlCi0J CQlSQ1VfSU5JVF9QT0lOVEVSKGZvYmotPnNoYXJlZFtpXSwgY2hlY2spOworCWRiZygoIiVzKGlk PSVsbHgpXG4iLCBfX2Z1bmNfXywgaWQpKTsKKworCS8qIEZpcnN0IHNlZSBpZiB0aGlzIGZlbmNl IGlzIGluIHRoZSBzYW1lIGxheWVyIGFzIHRoZSBwcmV2aW91cyBmZW5jZSAqLworCXAgPSBzaGFy ZWQtPmhpbnQ7CisJaWYgKHAgJiYgKGlkID4+IFNISUZUKSA9PSBwLT5wcmVmaXgpIHsKKwkJYXNz ZXJ0KHAtPmhlaWdodCA9PSAwKTsKKwkJZ290byBmb3VuZF9sYXllcjsKIAl9Ci0JaWYgKCFvbGRf ZmVuY2UpIHsKLQkJUkNVX0lOSVRfUE9JTlRFUihmb2JqLT5zaGFyZWRbZm9iai0+c2hhcmVkX2Nv dW50XSwgZmVuY2UpOwotCQlmb2JqLT5zaGFyZWRfY291bnQrKzsKKworCXAgPSBzaGFyZWQtPnRv cDsKKwlpZiAoIXApIHsKKwkJY3VyID0gc2hhcmVkX2FsbG9jX2xheWVyKHNoYXJlZCk7CisJCWN1 ci0+cGFyZW50ID0gTlVMTDsKKwkJc2hhcmVkLT50b3AgPSBjdXI7CisJCWdvdG8gbmV3X2xheWVy OwogCX0KIAotZG9uZToKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQl3cml0ZV9zZXFjb3VudF9iZWdp bigmb2JqLT5zZXEpOwotCS8qCi0JICogUkNVX0lOSVRfUE9JTlRFUiBjYW4gYmUgdXNlZCBoZXJl LAotCSAqIHNlcWNvdW50IHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkgYmFycmllcnMKKwkvKiBObyBz aG9ydGN1dCwgd2UgaGF2ZSB0byBkZXNjZW5kIHRoZSB0cmVlIHRvIGZpbmQgdGhlIHJpZ2h0IGxh eWVyCisJICogY29udGFpbmluZyB0aGlzIGZlbmNlLgorCSAqCisJICogRWFjaCBsYXllciBpbiB0 aGUgdHJlZSBob2xkcyAxNiAoTlNIQVJFRCkgcG9pbnRlcnMsIGVpdGhlciBmZW5jZXMKKwkgKiBv ciBsb3dlciBsYXllcnMuIExlYWYgbm9kZXMgKGhlaWdodCA9IDApIGNvbnRhaW4gdGhlIGZlbmNl cywgYWxsCisJICogb3RoZXIgbm9kZXMgKGhlaWdodCA+IDApIGFyZSBpbnRlcm5hbCBsYXllcnMg dGhhdCBwb2ludCB0byBhIGxvd2VyCisJICogbm9kZS4gRWFjaCBpbnRlcm5hbCBsYXllciBoYXMg YXQgbGVhc3QgMiBkZXNjZW5kZW50cy4KKwkgKgorCSAqIFN0YXJ0aW5nIGF0IHRoZSB0b3AsIHdl IGNoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgcHJlZml4IG1hdGNoZXMuIElmCisJICogaXQgZG9l c24ndCwgd2UgaGF2ZSBnb25lIHBhc3NlZCBvdXIgbGF5ZXIgYW5kIG5lZWQgdG8gaW5zZXJ0IGEg am9pbgorCSAqIGludG8gdGhlIHRyZWUsIGFuZCBhIG5ldyBsZWFmIG5vZGUgYXMgYSBkZXNjZW5k ZW50IGFzIHdlbGwgYXMgdGhlCisJICogb3JpZ2luYWwgbGF5ZXIuCisJICoKKwkgKiBUaGUgbWF0 Y2hpbmcgcHJlZml4IG1lYW5zIHdlIGFyZSBzdGlsbCBmb2xsb3dpbmcgdGhlIHJpZ2h0IGJyYW5j aAorCSAqIG9mIHRoZSB0cmVlLiBJZiBpdCBoYXMgaGVpZ2h0IDAsIHdlIGhhdmUgZm91bmQgb3Vy IGxlYWYgYW5kIGp1c3QKKwkgKiBuZWVkIHRvIHJlcGxhY2UgdGhlIGZlbmNlIHNsb3Qgd2l0aCBv dXJzZWx2ZXMuIElmIHRoZSBoZWlnaHQgaXMKKwkgKiBub3QgemVybywgb3VyIHNsb3QgY29udGFp bnMgdGhlIG5leHQgbGF5ZXIgaW4gdGhlIHRyZWUgKHVubGVzcworCSAqIGl0IGlzIGVtcHR5LCBp biB3aGljaCBjYXNlIHdlIGNhbiBhZGQgb3Vyc2VsdmVzIGFzIGEgbmV3IGxlYWYpLgorCSAqIEFz IGRlc2NlbmQgdGhlIHRyZWUgdGhlIHByZWZpeCBncm93cyAoYW5kIGhlaWdodCBkZWNyZWFzZXMp LgogCSAqLwotCVJDVV9JTklUX1BPSU5URVIob2JqLT5mZW5jZSwgZm9iaik7Ci0Jd3JpdGVfc2Vx Y291bnRfZW5kKCZvYmotPnNlcSk7Ci0JcHJlZW1wdF9lbmFibGUoKTsKKwlkbyB7CisJCWRiZygo ImlkPSVsbHgsIHAtPihwcmVmaXg9JWxseCwgaGVpZ2h0PSVkKSwgZGVsdGE9JWxseCwgaWR4PSV4 XG4iLAorCQkgICAgIGlkLCBwLT5wcmVmaXgsIHAtPmhlaWdodCwKKwkJICAgICBpZCA+PiBwLT5o ZWlnaHQgPj4gU0hJRlQsCisJCSAgICAgbGF5ZXJfaWR4KHAsIGlkKSkpOworCisJCWlmICgoaWQg Pj4gcC0+aGVpZ2h0ID4+IFNISUZUKSAhPSBwLT5wcmVmaXgpIHsKKwkJCS8qIGluc2VydCBhIGpv aW4gYWJvdmUgdGhlIGN1cnJlbnQgbGF5ZXIgKi8KKwkJCWN1ciA9IHNoYXJlZF9hbGxvY19sYXll cihzaGFyZWQpOworCQkJY3VyLT5oZWlnaHQgPSBBTElHTihmbHM2NCgoaWQgPj4gcC0+aGVpZ2h0 ID4+IFNISUZUKSBeIHAtPnByZWZpeCksCisJCQkJCSAgICBTSElGVCkgKyBwLT5oZWlnaHQ7CisJ CQljdXItPnByZWZpeCA9IGlkID4+IGN1ci0+aGVpZ2h0ID4+IFNISUZUOworCisJCQlkYmcoKCJp ZD0lbGx4LCBqb2luIHByZWZpeD0lbGx1LCBoZWlnaHQ9JWRcbiIsCisJCQkgICAgIGlkLCBjdXIt PnByZWZpeCwgY3VyLT5oZWlnaHQpKTsKKworCQkJYXNzZXJ0KChpZCA+PiBjdXItPmhlaWdodCA+ PiBTSElGVCkgPT0gY3VyLT5wcmVmaXgpOworCQkJYXNzZXJ0KGN1ci0+aGVpZ2h0ID4gcC0+aGVp Z2h0KTsKKworCQkJaWYgKHAtPnBhcmVudCkgeworCQkJCWFzc2VydChwLT5wYXJlbnQtPnNsb3Rb bGF5ZXJfaWR4KHAtPnBhcmVudCwgaWQpXSA9PSBwKTsKKwkJCQlhc3NlcnQoY3VyLT5oZWlnaHQg PCBwLT5wYXJlbnQtPmhlaWdodCk7CisJCQkJcC0+cGFyZW50LT5zbG90W2xheWVyX2lkeChwLT5w YXJlbnQsIGlkKV0gPSBjdXI7CisJCQl9IGVsc2UgeworCQkJCXNoYXJlZC0+dG9wID0gY3VyOwor CQkJfQorCQkJY3VyLT5wYXJlbnQgPSBwLT5wYXJlbnQ7CisKKwkJCWlkeCA9IHAtPnByZWZpeCA+ PiAoY3VyLT5oZWlnaHQgLSBwLT5oZWlnaHQgLSBTSElGVCkgJiBNQVNLOworCQkJY3VyLT5zbG90 W2lkeF0gPSBwOworCQkJY3VyLT5iaXRtYXAgfD0gQklUKGlkeCk7CisJCQlwLT5wYXJlbnQgPSBj dXI7CisJCX0gZWxzZSBpZiAoIXAtPmhlaWdodCkgeworCQkJLyogbWF0Y2hpbmcgYmFzZSBsYXll ciAqLworCQkJc2hhcmVkLT5oaW50ID0gcDsKKwkJCWdvdG8gZm91bmRfbGF5ZXI7CisJCX0gZWxz ZSB7CisJCQkvKiBkZXNjZW5kIGludG8gdGhlIG5leHQgbGF5ZXIgKi8KKwkJCWlkeCA9IGxheWVy X2lkeChwLCBpZCk7CisJCQljdXIgPSBwLT5zbG90W2lkeF07CisJCQlpZiAodW5saWtlbHkoIWN1 cikpIHsKKwkJCQljdXIgPSBzaGFyZWRfYWxsb2NfbGF5ZXIoc2hhcmVkKTsKKwkJCQlwLT5zbG90 W2lkeF0gPSBjdXI7CisJCQkJcC0+Yml0bWFwIHw9IEJJVChpZHgpOworCQkJCWN1ci0+cGFyZW50 ID0gcDsKKwkJCQlnb3RvIG5ld19sYXllcjsKKwkJCX0KKwkJfQorCisJCXAgPSBjdXI7CisJfSB3 aGlsZSAoMSk7CisKK2ZvdW5kX2xheWVyOgorCWFzc2VydChwLT5oZWlnaHQgPT0gMCk7CisJaWR4 ID0gaWQgJiBNQVNLOworCWN1ciA9IHAtPnNsb3RbaWR4XTsKKwlwLT5zbG90W2lkeF0gPSBpdGVt OworCXAtPmJpdG1hcCB8PSBCSVQoaWR4KTsKKwlkYmcoKCJpZD0lbGx4LCBmb3VuZCBleGlzdGlu ZyBsYXllciBwcmVmaXg9JWxseCwgaWR4PSV4IFtiaXRtYXA9JXhdXG4iLAorCSAgICAgaWQsIHAt PnByZWZpeCwgaWR4LCBwLT5iaXRtYXApKTsKKwlyZXR1cm4gKHZvaWQgKiljdXI7CisKK25ld19s YXllcjoKKwlhc3NlcnQoY3VyLT5oZWlnaHQgPT0gMCk7CisJYXNzZXJ0KGN1ci0+Yml0bWFwID09 IDApOworCWN1ci0+cHJlZml4ID0gaWQgPj4gU0hJRlQ7CisJY3VyLT5zbG90W2lkICYgTUFTS10g PSBpdGVtOworCWN1ci0+Yml0bWFwID0gQklUKGlkICYgTUFTSyk7CisJc2hhcmVkLT5oaW50ID0g Y3VyOworCWRiZygoImlkPSVsbHgsIG5ldyBsYXllciBwcmVmaXg9JWxseCwgaWR4PSV4IFtiaXRt YXA9JXhdXG4iLAorCSAgICAgaWQsIGN1ci0+cHJlZml4LCAoaW50KShpZCAmIE1BU0spLCBjdXIt PmJpdG1hcCkpOworCXJldHVybiBOVUxMOworfQogCi0JaWYgKG9sZCkKLQkJa2ZyZWVfcmN1KG9s ZCwgcmN1KTsKKy8qKgorICogcmVzZXJ2YXRpb25fb2JqZWN0X3Jlc2VydmVfc2hhcmVkIC0gUmVz ZXJ2ZSBzcGFjZSB0byBhZGQgYSBzaGFyZWQKKyAqIGZlbmNlIHRvIGEgcmVzZXJ2YXRpb25fb2Jq ZWN0LgorICogQG9iajogcmVzZXJ2YXRpb24gb2JqZWN0CisgKgorICogU2hvdWxkIGJlIGNhbGxl ZCBiZWZvcmUgcmVzZXJ2YXRpb25fb2JqZWN0X2FkZF9zaGFyZWRfZmVuY2UoKS4gIE11c3QKKyAq IGJlIGNhbGxlZCB3aXRoIG9iai0+bG9jayBoZWxkLgorICoKKyAqIFJFVFVSTlMKKyAqIFplcm8g Zm9yIHN1Y2Nlc3MsIG9yIC1lcnJubworICovCitpbnQgcmVzZXJ2YXRpb25fb2JqZWN0X3Jlc2Vy dmVfc2hhcmVkKHN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgcmVz ZXJ2YXRpb25fc2hhcmVkICpzaGFyZWQgPSAmb2JqLT5zaGFyZWQ7CisJaW50IGNvdW50OworCisJ cmVzZXJ2YXRpb25fb2JqZWN0X2Fzc2VydF9oZWxkKG9iaik7CisJbWlnaHRfc2xlZXAoKTsKKwor CS8qIFRvIGd1YXJhbnRlZSBiZWluZyBhYmxlIHRvIHJlcGxhY2UgYSBmZW5jZSBpbiB0aGUgcmFk aXh0cmVlLAorCSAqIHdlIG5lZWQgYXQgbW9zdCAyIGxheWVyczogb25lIHRvIGNyZWF0ZSBhIGpv aW4gaW4gdGhlIHRyZWUsCisJICogYW5kIG9uZSB0byBjb250YWluIHRoZSBmZW5jZS4gVHlwaWNh bGx5IHdlIGV4cGVjdCB0byByZXVzZQorCSAqIGEgbGF5ZXIgYW5kIHNvIGF2b2lkIGFueSBpbnNl cnRpb25zLgorCSAqCisJICogV2UgdXNlIHRoZSBsb3cgYml0cyBvZiB0aGUgZnJlZWQgbGlzdCB0 byB0cmFjayBpdHMgbGVuZ3RoCisJICogc2luY2Ugd2Ugb25seSBuZWVkIGEgY291cGxlIG9mIGJp dHMuCisJICovCisJY291bnQgPSBwdHJfZ2V0X2JpdHMoc2hhcmVkLT5mcmVlZCk7CisJd2hpbGUg KGNvdW50KysgPCAyKSB7CisJCXN0cnVjdCByZXNlcnZhdGlvbl9zaGFyZWRfbGF5ZXIgKnA7CiAK LQlpZiAob2xkX2ZlbmNlKQotCQlkbWFfZmVuY2VfcHV0KG9sZF9mZW5jZSk7CisJCXAgPSBremFs bG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOworCQlpZiAodW5saWtlbHkoIXApKQorCQkJcmV0 dXJuIC1FTk9NRU07CisKKwkJcC0+cGFyZW50ID0gc2hhcmVkLT5mcmVlZDsKKwkJc2hhcmVkLT5m cmVlZCA9IHB0cl9zZXRfYml0cyhwLCBjb3VudCk7CisJfQorCisJcmV0dXJuIDA7CiB9CitFWFBP UlRfU1lNQk9MKHJlc2VydmF0aW9uX29iamVjdF9yZXNlcnZlX3NoYXJlZCk7CiAKIC8qKgogICog cmVzZXJ2YXRpb25fb2JqZWN0X2FkZF9zaGFyZWRfZmVuY2UgLSBBZGQgYSBmZW5jZSB0byBhIHNo YXJlZCBzbG90CkBAIC0yMTAsMTYgKzMzMSwyMSBAQCByZXNlcnZhdGlvbl9vYmplY3RfYWRkX3No YXJlZF9yZXBsYWNlKHN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgKm9iaiwKIHZvaWQgcmVzZXJ2 YXRpb25fb2JqZWN0X2FkZF9zaGFyZWRfZmVuY2Uoc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCAq b2JqLAogCQkJCQkgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCiB7Ci0Jc3RydWN0IHJlc2VydmF0 aW9uX29iamVjdF9saXN0ICpvbGQsICpmb2JqID0gb2JqLT5zdGFnZWQ7CisJc3RydWN0IGRtYV9m ZW5jZSAqb2xkX2ZlbmNlOworCisJcmVzZXJ2YXRpb25fb2JqZWN0X2Fzc2VydF9oZWxkKG9iaik7 CisKKwlkbWFfZmVuY2VfZ2V0KGZlbmNlKTsKKworCXByZWVtcHRfZGlzYWJsZSgpOworCXdyaXRl X3NlcWNvdW50X2JlZ2luKCZvYmotPnNlcSk7CisKKwlvbGRfZmVuY2UgPSBzaGFyZWRfZmVuY2Vf cmVwbGFjZSgmb2JqLT5zaGFyZWQsIGZlbmNlLT5jb250ZXh0LCBmZW5jZSk7CiAKLQlvbGQgPSBy ZXNlcnZhdGlvbl9vYmplY3RfZ2V0X2xpc3Qob2JqKTsKLQlvYmotPnN0YWdlZCA9IE5VTEw7CisJ d3JpdGVfc2VxY291bnRfZW5kKCZvYmotPnNlcSk7CisJcHJlZW1wdF9lbmFibGUoKTsKIAotCWlm ICghZm9iaikgewotCQlCVUdfT04ob2xkLT5zaGFyZWRfY291bnQgPj0gb2xkLT5zaGFyZWRfbWF4 KTsKLQkJcmVzZXJ2YXRpb25fb2JqZWN0X2FkZF9zaGFyZWRfaW5wbGFjZShvYmosIG9sZCwgZmVu Y2UpOwotCX0gZWxzZQotCQlyZXNlcnZhdGlvbl9vYmplY3RfYWRkX3NoYXJlZF9yZXBsYWNlKG9i aiwgb2xkLCBmb2JqLCBmZW5jZSk7CisJZG1hX2ZlbmNlX3B1dChvbGRfZmVuY2UpOwogfQogRVhQ T1JUX1NZTUJPTChyZXNlcnZhdGlvbl9vYmplY3RfYWRkX3NoYXJlZF9mZW5jZSk7CiAKQEAgLTIz MywzMyArMzU5LDI3IEBAIEVYUE9SVF9TWU1CT0wocmVzZXJ2YXRpb25fb2JqZWN0X2FkZF9zaGFy ZWRfZmVuY2UpOwogdm9pZCByZXNlcnZhdGlvbl9vYmplY3RfYWRkX2V4Y2xfZmVuY2Uoc3RydWN0 IHJlc2VydmF0aW9uX29iamVjdCAqb2JqLAogCQkJCSAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpm ZW5jZSkKIHsKLQlzdHJ1Y3QgZG1hX2ZlbmNlICpvbGRfZmVuY2UgPSByZXNlcnZhdGlvbl9vYmpl Y3RfZ2V0X2V4Y2wob2JqKTsKLQlzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0X2xpc3QgKm9sZDsK LQl1MzIgaSA9IDA7CisJc3RydWN0IGRtYV9mZW5jZSAqb2xkX2ZlbmNlID0gb2JqLT5leGNsOwor CXN0cnVjdCByZXNlcnZhdGlvbl9zaGFyZWQgb2xkX3NoYXJlZCA9IG9iai0+c2hhcmVkOwogCi0J b2xkID0gcmVzZXJ2YXRpb25fb2JqZWN0X2dldF9saXN0KG9iaik7Ci0JaWYgKG9sZCkKLQkJaSA9 IG9sZC0+c2hhcmVkX2NvdW50OworCXJlc2VydmF0aW9uX29iamVjdF9hc3NlcnRfaGVsZChvYmop OwogCi0JaWYgKGZlbmNlKQotCQlkbWFfZmVuY2VfZ2V0KGZlbmNlKTsKKwlkbWFfZmVuY2VfZ2V0 KGZlbmNlKTsKIAogCXByZWVtcHRfZGlzYWJsZSgpOwogCXdyaXRlX3NlcWNvdW50X2JlZ2luKCZv YmotPnNlcSk7CisKIAkvKiB3cml0ZV9zZXFjb3VudF9iZWdpbiBwcm92aWRlcyB0aGUgbmVjZXNz YXJ5IG1lbW9yeSBiYXJyaWVyICovCi0JUkNVX0lOSVRfUE9JTlRFUihvYmotPmZlbmNlX2V4Y2ws IGZlbmNlKTsKLQlpZiAob2xkKQotCQlvbGQtPnNoYXJlZF9jb3VudCA9IDA7CisJUkNVX0lOSVRf UE9JTlRFUihvYmotPmV4Y2wsIGZlbmNlKTsKKwlyZXNlcnZhdGlvbl9zaGFyZWRfaW5pdCgmb2Jq LT5zaGFyZWQpOworCiAJd3JpdGVfc2VxY291bnRfZW5kKCZvYmotPnNlcSk7CiAJcHJlZW1wdF9l bmFibGUoKTsKIAotCS8qIGlucGxhY2UgdXBkYXRlLCBubyBzaGFyZWQgZmVuY2VzICovCi0Jd2hp bGUgKGktLSkKLQkJZG1hX2ZlbmNlX3B1dChyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG9sZC0+ c2hhcmVkW2ldLAotCQkJCQkJcmVzZXJ2YXRpb25fb2JqZWN0X2hlbGQob2JqKSkpOworCXNoYXJl ZF9mcmVlKCZvbGRfc2hhcmVkKTsKKwlvYmotPnNoYXJlZC5mcmVlZCA9IG9sZF9zaGFyZWQuZnJl ZWQ7CiAKLQlpZiAob2xkX2ZlbmNlKQotCQlkbWFfZmVuY2VfcHV0KG9sZF9mZW5jZSk7CisJZG1h X2ZlbmNlX3B1dChvbGRfZmVuY2UpOwogfQogRVhQT1JUX1NZTUJPTChyZXNlcnZhdGlvbl9vYmpl Y3RfYWRkX2V4Y2xfZmVuY2UpOwogCkBAIC0yODAsNzUgKzQwMCw3NyBAQCBpbnQgcmVzZXJ2YXRp b25fb2JqZWN0X2dldF9mZW5jZXNfcmN1KHN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgKm9iaiwK IAkJCQkgICAgICB1bnNpZ25lZCAqcHNoYXJlZF9jb3VudCwKIAkJCQkgICAgICBzdHJ1Y3QgZG1h X2ZlbmNlICoqKnBzaGFyZWQpCiB7Ci0Jc3RydWN0IGRtYV9mZW5jZSAqKnNoYXJlZCA9IE5VTEw7 Ci0Jc3RydWN0IGRtYV9mZW5jZSAqZmVuY2VfZXhjbDsKLQl1bnNpZ25lZCBpbnQgc2hhcmVkX2Nv dW50OwotCWludCByZXQgPSAxOwotCi0JZG8gewotCQlzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0 X2xpc3QgKmZvYmo7Ci0JCXVuc2lnbmVkIHNlcTsKLQkJdW5zaWduZWQgaW50IGk7CisJc3RydWN0 IGRtYV9mZW5jZSAqKnNoYXJlZCA9IE5VTEwsICpleGNsOworCXVuc2lnbmVkIGludCBzeiA9IDAs IGNvdW50OwogCi0JCXNoYXJlZF9jb3VudCA9IGkgPSAwOworCXJjdV9yZWFkX2xvY2soKTsKKwlm b3IgKDs7KSB7CisJCXN0cnVjdCByZXNlcnZhdGlvbl9zaGFyZWRfaXRlciBpdGVyOworCQl1bnNp Z25lZCBpbnQgc2VxOwogCi0JCXJjdV9yZWFkX2xvY2soKTsKK3Jlc3RhcnQ6CiAJCXNlcSA9IHJl YWRfc2VxY291bnRfYmVnaW4oJm9iai0+c2VxKTsKIAotCQlmZW5jZV9leGNsID0gcmN1X2RlcmVm ZXJlbmNlKG9iai0+ZmVuY2VfZXhjbCk7Ci0JCWlmIChmZW5jZV9leGNsICYmICFkbWFfZmVuY2Vf Z2V0X3JjdShmZW5jZV9leGNsKSkKLQkJCWdvdG8gdW5sb2NrOwotCi0JCWZvYmogPSByY3VfZGVy ZWZlcmVuY2Uob2JqLT5mZW5jZSk7Ci0JCWlmIChmb2JqKSB7Ci0JCQlzdHJ1Y3QgZG1hX2ZlbmNl ICoqbnNoYXJlZDsKLQkJCXNpemVfdCBzeiA9IHNpemVvZigqc2hhcmVkKSAqIGZvYmotPnNoYXJl ZF9tYXg7Ci0KLQkJCW5zaGFyZWQgPSBrcmVhbGxvYyhzaGFyZWQsIHN6LAotCQkJCQkgICBHRlBf Tk9XQUlUIHwgX19HRlBfTk9XQVJOKTsKLQkJCWlmICghbnNoYXJlZCkgewotCQkJCXJjdV9yZWFk X3VubG9jaygpOwotCQkJCW5zaGFyZWQgPSBrcmVhbGxvYyhzaGFyZWQsIHN6LCBHRlBfS0VSTkVM KTsKLQkJCQlpZiAobnNoYXJlZCkgewotCQkJCQlzaGFyZWQgPSBuc2hhcmVkOwotCQkJCQljb250 aW51ZTsKLQkJCQl9CisJCWV4Y2wgPSByY3VfZGVyZWZlcmVuY2Uob2JqLT5leGNsKTsKKwkJaWYg KGV4Y2wgJiYgIWRtYV9mZW5jZV9nZXRfcmN1KGV4Y2wpKQorCQkJY29udGludWU7CisKKwkJY291 bnQgPSAwOworCQlyZXNlcnZhdGlvbl9vYmplY3RfZm9yX2VhY2hfc2hhcmVkKG9iaiwgaXRlcikg eworCQkJaWYgKGRtYV9mZW5jZV9pc19zaWduYWxlZChpdGVyLmZlbmNlKSkKKwkJCQljb250aW51 ZTsKIAotCQkJCXJldCA9IC1FTk9NRU07CisJCQlpZiAoIWRtYV9mZW5jZV9nZXRfcmN1KGl0ZXIu ZmVuY2UpKQogCQkJCWJyZWFrOwotCQkJfQotCQkJc2hhcmVkID0gbnNoYXJlZDsKLQkJCXNoYXJl ZF9jb3VudCA9IGZvYmotPnNoYXJlZF9jb3VudDsKIAotCQkJZm9yIChpID0gMDsgaSA8IHNoYXJl ZF9jb3VudDsgKytpKSB7Ci0JCQkJc2hhcmVkW2ldID0gcmN1X2RlcmVmZXJlbmNlKGZvYmotPnNo YXJlZFtpXSk7Ci0JCQkJaWYgKCFkbWFfZmVuY2VfZ2V0X3JjdShzaGFyZWRbaV0pKQotCQkJCQli cmVhazsKKwkJCWlmIChjb3VudCA9PSBzeikgeworCQkJCXN0cnVjdCBkbWFfZmVuY2UgKipuc2hh cmVkOworCisJCQkJc3ogPSBzeiA/IDIgKiBzeiA6IDQ7CisJCQkJbnNoYXJlZCA9IGtyZWFsbG9j KHNoYXJlZCwKKwkJCQkJCSAgIHN6ICogc2l6ZW9mKCpzaGFyZWQpLAorCQkJCQkJICAgR0ZQX05P V0FJVCB8IF9fR0ZQX05PV0FSTik7CisJCQkJaWYgKCFuc2hhcmVkKSB7CisJCQkJCXJjdV9yZWFk X3VubG9jaygpOworCisJCQkJCWRtYV9mZW5jZV9wdXQoZXhjbCk7CisJCQkJCWRtYV9mZW5jZV9w dXQoaXRlci5mZW5jZSk7CisJCQkJCXdoaWxlIChjb3VudC0tKQorCQkJCQkJZG1hX2ZlbmNlX3B1 dChzaGFyZWRbY291bnRdKTsKKwkJCQkJa2ZyZWUoc2hhcmVkKTsKKworCQkJCQlzaGFyZWQgPSBr bWFsbG9jKHN6LCBHRlBfVEVNUE9SQVJZKTsKKwkJCQkJaWYgKCFuc2hhcmVkKQorCQkJCQkJcmV0 dXJuIC1FTk9NRU07CisKKwkJCQkJcmN1X3JlYWRfbG9jaygpOworCQkJCQlnb3RvIHJlc3RhcnQ7 CisJCQkJfQorCisJCQkJc2hhcmVkID0gbnNoYXJlZDsKIAkJCX0KLQkJfQogCi0JCWlmIChpICE9 IHNoYXJlZF9jb3VudCB8fCByZWFkX3NlcWNvdW50X3JldHJ5KCZvYmotPnNlcSwgc2VxKSkgewot CQkJd2hpbGUgKGktLSkKLQkJCQlkbWFfZmVuY2VfcHV0KHNoYXJlZFtpXSk7Ci0JCQlkbWFfZmVu Y2VfcHV0KGZlbmNlX2V4Y2wpOwotCQkJZ290byB1bmxvY2s7CisJCQlzaGFyZWRbY291bnQrK10g PSBpdGVyLmZlbmNlOwogCQl9CiAKLQkJcmV0ID0gMDsKLXVubG9jazoKLQkJcmN1X3JlYWRfdW5s b2NrKCk7Ci0JfSB3aGlsZSAocmV0KTsKKwkJaWYgKCFyZWFkX3NlcWNvdW50X3JldHJ5KCZvYmot PnNlcSwgc2VxKSkKKwkJCWJyZWFrOwogCi0JaWYgKCFzaGFyZWRfY291bnQpIHsKKwkJd2hpbGUg KGNvdW50LS0pCisJCQlkbWFfZmVuY2VfcHV0KHNoYXJlZFtjb3VudF0pOworCQlkbWFfZmVuY2Vf cHV0KGV4Y2wpOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmICghY291bnQpIHsKIAkJ a2ZyZWUoc2hhcmVkKTsKIAkJc2hhcmVkID0gTlVMTDsKIAl9CiAKLQkqcHNoYXJlZF9jb3VudCA9 IHNoYXJlZF9jb3VudDsKKwkqcHNoYXJlZF9jb3VudCA9IGNvdW50OwogCSpwc2hhcmVkID0gc2hh cmVkOwotCSpwZmVuY2VfZXhjbCA9IGZlbmNlX2V4Y2w7Ci0KLQlyZXR1cm4gcmV0OworCSpwZmVu Y2VfZXhjbCA9IGV4Y2w7CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyZXNlcnZh dGlvbl9vYmplY3RfZ2V0X2ZlbmNlc19yY3UpOwogCkBAIC0zNjYsOTkgKzQ4OCw0NiBAQCBFWFBP UlRfU1lNQk9MX0dQTChyZXNlcnZhdGlvbl9vYmplY3RfZ2V0X2ZlbmNlc19yY3UpOwogICovCiBs b25nIHJlc2VydmF0aW9uX29iamVjdF93YWl0X3RpbWVvdXRfcmN1KHN0cnVjdCByZXNlcnZhdGlv bl9vYmplY3QgKm9iaiwKIAkJCQkJIGJvb2wgd2FpdF9hbGwsIGJvb2wgaW50ciwKLQkJCQkJIHVu c2lnbmVkIGxvbmcgdGltZW91dCkKKwkJCQkJIGxvbmcgdGltZW91dCkKIHsKLQlzdHJ1Y3QgZG1h X2ZlbmNlICpmZW5jZTsKLQl1bnNpZ25lZCBzZXEsIHNoYXJlZF9jb3VudCwgaSA9IDA7Ci0JbG9u ZyByZXQgPSB0aW1lb3V0ID8gdGltZW91dCA6IDE7CisJc3RydWN0IHJlc2VydmF0aW9uX3NoYXJl ZF9pdGVyIGl0ZXI7CisJdW5zaWduZWQgaW50IHNlcTsKIAorCXJjdV9yZWFkX2xvY2soKTsKIHJl dHJ5OgotCWZlbmNlID0gTlVMTDsKLQlzaGFyZWRfY291bnQgPSAwOwogCXNlcSA9IHJlYWRfc2Vx Y291bnRfYmVnaW4oJm9iai0+c2VxKTsKLQlyY3VfcmVhZF9sb2NrKCk7CiAKIAlpZiAod2FpdF9h bGwpIHsKLQkJc3RydWN0IHJlc2VydmF0aW9uX29iamVjdF9saXN0ICpmb2JqID0KLQkJCQkJCXJj dV9kZXJlZmVyZW5jZShvYmotPmZlbmNlKTsKLQotCQlpZiAoZm9iaikKLQkJCXNoYXJlZF9jb3Vu dCA9IGZvYmotPnNoYXJlZF9jb3VudDsKLQotCQlmb3IgKGkgPSAwOyBpIDwgc2hhcmVkX2NvdW50 OyArK2kpIHsKLQkJCXN0cnVjdCBkbWFfZmVuY2UgKmxmZW5jZSA9IHJjdV9kZXJlZmVyZW5jZShm b2JqLT5zaGFyZWRbaV0pOwotCi0JCQlpZiAodGVzdF9iaXQoRE1BX0ZFTkNFX0ZMQUdfU0lHTkFM RURfQklULAotCQkJCSAgICAgJmxmZW5jZS0+ZmxhZ3MpKQotCQkJCWNvbnRpbnVlOwotCi0JCQlp ZiAoIWRtYV9mZW5jZV9nZXRfcmN1KGxmZW5jZSkpCi0JCQkJZ290byB1bmxvY2tfcmV0cnk7Ci0K LQkJCWlmIChkbWFfZmVuY2VfaXNfc2lnbmFsZWQobGZlbmNlKSkgewotCQkJCWRtYV9mZW5jZV9w dXQobGZlbmNlKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJZmVuY2UgPSBsZmVuY2U7Ci0J CQlicmVhazsKLQkJfQorCQlyZXNlcnZhdGlvbl9vYmplY3RfZm9yX2VhY2hfc2hhcmVkKG9iaiwg aXRlcikKKwkJCWlmICghZG1hX2ZlbmNlX2lzX3NpZ25hbGVkKGl0ZXIuZmVuY2UpKQorCQkJCWdv dG8gd2FpdDsKIAl9CiAKLQlpZiAoIXNoYXJlZF9jb3VudCkgewotCQlzdHJ1Y3QgZG1hX2ZlbmNl ICpmZW5jZV9leGNsID0gcmN1X2RlcmVmZXJlbmNlKG9iai0+ZmVuY2VfZXhjbCk7CisJaXRlci5m ZW5jZSA9IHJjdV9kZXJlZmVyZW5jZShvYmotPmV4Y2wpOworCWlmIChpdGVyLmZlbmNlICYmICFk bWFfZmVuY2VfaXNfc2lnbmFsZWQoaXRlci5mZW5jZSkpCisJCWdvdG8gd2FpdDsKIAotCQlpZiAo ZmVuY2VfZXhjbCAmJgotCQkgICAgIXRlc3RfYml0KERNQV9GRU5DRV9GTEFHX1NJR05BTEVEX0JJ VCwKLQkJCSAgICAgICZmZW5jZV9leGNsLT5mbGFncykpIHsKLQkJCWlmICghZG1hX2ZlbmNlX2dl dF9yY3UoZmVuY2VfZXhjbCkpCi0JCQkJZ290byB1bmxvY2tfcmV0cnk7CisJaWYgKHJlYWRfc2Vx Y291bnRfcmV0cnkoJm9iai0+c2VxLCBzZXEpKQorCQlnb3RvIHJldHJ5OwogCi0JCQlpZiAoZG1h X2ZlbmNlX2lzX3NpZ25hbGVkKGZlbmNlX2V4Y2wpKQotCQkJCWRtYV9mZW5jZV9wdXQoZmVuY2Vf ZXhjbCk7Ci0JCQllbHNlCi0JCQkJZmVuY2UgPSBmZW5jZV9leGNsOwotCQl9Ci0JfQorCXJjdV9y ZWFkX3VubG9jaygpOworCXJldHVybiB0aW1lb3V0OwogCit3YWl0OgorCWlmICghZG1hX2ZlbmNl X2dldF9yY3UoaXRlci5mZW5jZSkpCisJCWdvdG8gcmV0cnk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7 Ci0JaWYgKGZlbmNlKSB7Ci0JCWlmIChyZWFkX3NlcWNvdW50X3JldHJ5KCZvYmotPnNlcSwgc2Vx KSkgewotCQkJZG1hX2ZlbmNlX3B1dChmZW5jZSk7Ci0JCQlnb3RvIHJldHJ5OwotCQl9CiAKLQkJ cmV0ID0gZG1hX2ZlbmNlX3dhaXRfdGltZW91dChmZW5jZSwgaW50ciwgcmV0KTsKLQkJZG1hX2Zl bmNlX3B1dChmZW5jZSk7Ci0JCWlmIChyZXQgPiAwICYmIHdhaXRfYWxsICYmIChpICsgMSA8IHNo YXJlZF9jb3VudCkpCi0JCQlnb3RvIHJldHJ5OwotCX0KLQlyZXR1cm4gcmV0OworCXRpbWVvdXQg PSBkbWFfZmVuY2Vfd2FpdF90aW1lb3V0KGl0ZXIuZmVuY2UsIGludHIsIHRpbWVvdXQpOworCWRt YV9mZW5jZV9wdXQoaXRlci5mZW5jZSk7CisJaWYgKHRpbWVvdXQgPCAwKQorCQlyZXR1cm4gdGlt ZW91dDsKIAotdW5sb2NrX3JldHJ5OgotCXJjdV9yZWFkX3VubG9jaygpOworCXJjdV9yZWFkX2xv Y2soKTsKIAlnb3RvIHJldHJ5OwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmVzZXJ2YXRpb25fb2Jq ZWN0X3dhaXRfdGltZW91dF9yY3UpOwogCi0KLXN0YXRpYyBpbmxpbmUgaW50Ci1yZXNlcnZhdGlv bl9vYmplY3RfdGVzdF9zaWduYWxlZF9zaW5nbGUoc3RydWN0IGRtYV9mZW5jZSAqcGFzc2VkX2Zl bmNlKQotewotCXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlLCAqbGZlbmNlID0gcGFzc2VkX2ZlbmNl OwotCWludCByZXQgPSAxOwotCi0JaWYgKCF0ZXN0X2JpdChETUFfRkVOQ0VfRkxBR19TSUdOQUxF RF9CSVQsICZsZmVuY2UtPmZsYWdzKSkgewotCQlmZW5jZSA9IGRtYV9mZW5jZV9nZXRfcmN1KGxm ZW5jZSk7Ci0JCWlmICghZmVuY2UpCi0JCQlyZXR1cm4gLTE7Ci0KLQkJcmV0ID0gISFkbWFfZmVu Y2VfaXNfc2lnbmFsZWQoZmVuY2UpOwotCQlkbWFfZmVuY2VfcHV0KGZlbmNlKTsKLQl9Ci0JcmV0 dXJuIHJldDsKLX0KLQogLyoqCiAgKiByZXNlcnZhdGlvbl9vYmplY3RfdGVzdF9zaWduYWxlZF9y Y3UgLSBUZXN0IGlmIGEgcmVzZXJ2YXRpb24gb2JqZWN0J3MKICAqIGZlbmNlcyBoYXZlIGJlZW4g c2lnbmFsZWQuCkBAIC00NzIsNTIgKzU0MSwyOSBAQCByZXNlcnZhdGlvbl9vYmplY3RfdGVzdF9z aWduYWxlZF9zaW5nbGUoc3RydWN0IGRtYV9mZW5jZSAqcGFzc2VkX2ZlbmNlKQogYm9vbCByZXNl cnZhdGlvbl9vYmplY3RfdGVzdF9zaWduYWxlZF9yY3Uoc3RydWN0IHJlc2VydmF0aW9uX29iamVj dCAqb2JqLAogCQkJCQkgIGJvb2wgdGVzdF9hbGwpCiB7Ci0JdW5zaWduZWQgc2VxLCBzaGFyZWRf Y291bnQ7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgcmVzZXJ2YXRpb25fc2hhcmVkX2l0ZXIgaXRlcjsK Kwlib29sIHJldCA9IGZhbHNlOworCXVuc2lnbmVkIGludCBzZXE7CiAKIAlyY3VfcmVhZF9sb2Nr KCk7CiByZXRyeToKLQlyZXQgPSB0cnVlOwotCXNoYXJlZF9jb3VudCA9IDA7CiAJc2VxID0gcmVh ZF9zZXFjb3VudF9iZWdpbigmb2JqLT5zZXEpOwogCiAJaWYgKHRlc3RfYWxsKSB7Ci0JCXVuc2ln bmVkIGk7Ci0KLQkJc3RydWN0IHJlc2VydmF0aW9uX29iamVjdF9saXN0ICpmb2JqID0KLQkJCQkJ CXJjdV9kZXJlZmVyZW5jZShvYmotPmZlbmNlKTsKLQotCQlpZiAoZm9iaikKLQkJCXNoYXJlZF9j b3VudCA9IGZvYmotPnNoYXJlZF9jb3VudDsKLQotCQlmb3IgKGkgPSAwOyBpIDwgc2hhcmVkX2Nv dW50OyArK2kpIHsKLQkJCXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlID0gcmN1X2RlcmVmZXJlbmNl KGZvYmotPnNoYXJlZFtpXSk7Ci0KLQkJCXJldCA9IHJlc2VydmF0aW9uX29iamVjdF90ZXN0X3Np Z25hbGVkX3NpbmdsZShmZW5jZSk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlnb3RvIHJldHJ5Owot CQkJZWxzZSBpZiAoIXJldCkKLQkJCQlicmVhazsKLQkJfQotCi0JCWlmIChyZWFkX3NlcWNvdW50 X3JldHJ5KCZvYmotPnNlcSwgc2VxKSkKLQkJCWdvdG8gcmV0cnk7CisJCXJlc2VydmF0aW9uX29i amVjdF9mb3JfZWFjaF9zaGFyZWQob2JqLCBpdGVyKQorCQkJaWYgKCFkbWFfZmVuY2VfaXNfc2ln bmFsZWQoaXRlci5mZW5jZSkpCisJCQkJZ290byBidXN5OwogCX0KIAotCWlmICghc2hhcmVkX2Nv dW50KSB7Ci0JCXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlX2V4Y2wgPSByY3VfZGVyZWZlcmVuY2Uo b2JqLT5mZW5jZV9leGNsKTsKKwlpdGVyLmZlbmNlID0gcmN1X2RlcmVmZXJlbmNlKG9iai0+ZXhj bCk7CisJaWYgKGl0ZXIuZmVuY2UgJiYgIWRtYV9mZW5jZV9pc19zaWduYWxlZChpdGVyLmZlbmNl KSkKKwkJZ290byBidXN5OwogCi0JCWlmIChmZW5jZV9leGNsKSB7Ci0JCQlyZXQgPSByZXNlcnZh dGlvbl9vYmplY3RfdGVzdF9zaWduYWxlZF9zaW5nbGUoCi0JCQkJCQkJCWZlbmNlX2V4Y2wpOwot CQkJaWYgKHJldCA8IDApCi0JCQkJZ290byByZXRyeTsKLQotCQkJaWYgKHJlYWRfc2VxY291bnRf cmV0cnkoJm9iai0+c2VxLCBzZXEpKQotCQkJCWdvdG8gcmV0cnk7Ci0JCX0KLQl9CisJaWYgKHJl YWRfc2VxY291bnRfcmV0cnkoJm9iai0+c2VxLCBzZXEpKQorCQlnb3RvIHJldHJ5OwogCisJcmV0 ID0gdHJ1ZTsKK2J1c3k6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi90ZXN0LXJlc2VydmF0aW9uLmMgYi9kcml2ZXJzL2Rt YS1idWYvdGVzdC1yZXNlcnZhdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uYmQwNzE4NmM5NDU3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEtYnVm L3Rlc3QtcmVzZXJ2YXRpb24uYwpAQCAtMCwwICsxLDMwOCBAQAorLyoKKyAqIFRlc3QgY2FzZXMg Zm9yIHN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QKKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQp IEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9kbWEtZmVuY2UuaD4K KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5j bHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXJ2YXRpb24uaD4KKwor I2RlZmluZSBTSElGVCAoaWxvZzIoTlNIQVJFRCkpCisjZGVmaW5lIE5GRU5DRVMgNDA5NgorCitz dGF0aWMgY29uc3QgY2hhciAqZmFrZV9nZXRfZHJpdmVyX25hbWUoc3RydWN0IGRtYV9mZW5jZSAq ZmVuY2UpCit7CisJcmV0dXJuICJ0ZXN0LXJlc2VydmF0aW9uIjsKK30KKworc3RhdGljIGNvbnN0 IGNoYXIgKmZha2VfZ2V0X3RpbWVsaW5lX25hbWUoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCit7 CisJcmV0dXJuICJ0ZXN0IjsKK30KKworc3RhdGljIGJvb2wgZmFrZV9lbmFibGVfc2lnbmFsaW5n KHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQoreworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMg dm9pZCBmYWtlX3JlbGVhc2Uoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCit7CisJV0FSTigxLCAi aW52YWxpZCBmZW5jZSB1bnJlZlxuIik7Cit9CisKK2NvbnN0IHN0cnVjdCBkbWFfZmVuY2Vfb3Bz IGZha2VfZmVuY2Vfb3BzID0geworCS5nZXRfZHJpdmVyX25hbWUgPSBmYWtlX2dldF9kcml2ZXJf bmFtZSwKKwkuZ2V0X3RpbWVsaW5lX25hbWUgPSBmYWtlX2dldF90aW1lbGluZV9uYW1lLAorCS5l bmFibGVfc2lnbmFsaW5nID0gZmFrZV9lbmFibGVfc2lnbmFsaW5nLAorCS53YWl0ID0gZG1hX2Zl bmNlX2RlZmF1bHRfd2FpdCwKKwkucmVsZWFzZSA9IGZha2VfcmVsZWFzZSwKK307CisKK3N0YXRp YyBpbnQgdmFsaWRhdGVfbGF5ZXIoc3RydWN0IHJlc2VydmF0aW9uX3NoYXJlZF9sYXllciAqcGFy ZW50LAorCQkJICBzdHJ1Y3QgcmVzZXJ2YXRpb25fc2hhcmVkX2xheWVyICpwLAorCQkJICBpbnQg aWR4KQoreworCWludCByZXQ7CisJaW50IG47CisKKwlpZiAocGFyZW50ICYmIHAtPmhlaWdodCA+ PSBwYXJlbnQtPmhlaWdodCkgeworCQlwcl9lcnIoImNoaWxkIGxheWVyIChwcmVmaXg9JWxseCkg aGFzIGdyZWF0ZXIgaGVpZ2h0IFslZF0gdGhhbiBwYXJlbnQgWyVkXSAocHJlZml4PSVsbHgpXG4i LAorCQkgICAgICAgcC0+cHJlZml4LCBwLT5oZWlnaHQsIHBhcmVudC0+aGVpZ2h0LCBwYXJlbnQt PnByZWZpeCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChwYXJlbnQgJiYgKHAtPnBy ZWZpeCA+PiBwYXJlbnQtPmhlaWdodCkgIT0gKHBhcmVudC0+cHJlZml4ID4+IHAtPmhlaWdodCkp IHsKKwkJcHJfZXJyKCJjaGlsZCBsYXllciAocHJlZml4PSVsbHgsIGhlaWdodD0lZCkgZG9lcyBu b3QgZml0IGluIHBhcmVudCAocHJlZml4ICVsbHgsIGhlaWdodCAlZClcbiIsCisJCSAgICAgICBw LT5wcmVmaXgsIHAtPmhlaWdodCwKKwkJICAgICAgIHBhcmVudC0+cHJlZml4LCBwYXJlbnQtPmhl aWdodCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChwYXJlbnQgJiYgKChwLT5wcmVm aXggPj4gKHBhcmVudC0+aGVpZ2h0IC0gcC0+aGVpZ2h0IC0gU0hJRlQpKSAmIChOU0hBUkVEIC0g MSkpICE9IGlkeCkgeworCQlwcl9lcnIoImNoaWxkIGxheWVyIChwcmVmaXg9JWxseCwgaGVpZ2h0 PSVkKSBpbiBwb3NpdGlvbiAlZCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCAlZCBvZiBwYXJlbnQg KHByZWZpeD0lbGx4LCBoZWlnaHQ9JWQpXG4iLAorCisKKwkJICAgICAgIHAtPnByZWZpeCwgcC0+ aGVpZ2h0LAorCQkgICAgICAgaWR4LCAoaW50KSgocC0+cHJlZml4ID4+IChwYXJlbnQtPmhlaWdo dCAtIHAtPmhlaWdodCAtIFNISUZUKSAmIChOU0hBUkVEIC0gMSkpICE9IGlkeCksCisJCSAgICAg ICBwYXJlbnQtPnByZWZpeCwgcGFyZW50LT5oZWlnaHQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwlmb3IgKG4gPSAwOyBuIDwgTlNIQVJFRDsgbisrKSB7CisJCWJvb2wgaGFzX2JpdCA9IHAt PmJpdG1hcCAmIEJJVChuKTsKKwkJYm9vbCBoYXNfY2hpbGQgPSBwLT5zbG90W25dOworCisJCWlm IChoYXNfYml0IF4gaGFzX2NoaWxkKSB7CisJCQlwcl9lcnIoImxheWVyIChwcmVmaXg9JWxseCwg aGVpZ2h0PSVkKSBpbmNvbnNpc3RlbnQgYml0bWFwIHBvc2l0aW9uICVkLCBoYXNfY2hpbGQ9JWQs IGhhc19iaXQ9JWRuIiwKKwkJCSAgICAgICBwLT5wcmVmaXgsIHAtPmhlaWdodCwgbiwgaGFzX2Jp dCwgaGFzX2NoaWxkKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKCFwLT5zbG90 W25dIHx8ICFwLT5oZWlnaHQpCisJCQljb250aW51ZTsKKworCQlyZXQgPSB2YWxpZGF0ZV9sYXll cihwLCBwLT5zbG90W25dLCBuKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmFsaWRhdGVfdHJlZShzdHJ1Y3QgcmVzZXJ2YXRp b25fb2JqZWN0ICpyZXN2KQoreworCWlmICghcmVzdi0+c2hhcmVkLnRvcCkKKwkJcmV0dXJuIDA7 CisKKwlyZXR1cm4gdmFsaWRhdGVfbGF5ZXIoTlVMTCwgcmVzdi0+c2hhcmVkLnRvcCwgMCk7Cit9 CisKK2VudW0gZGlyZWN0aW9uIHsKKwlmb3J3YXJkLAorCWJhY2t3YXJkLAorCXJhbmRvbSwKK307 CisKK3N0YXRpYyBjb25zdCBjaGFyICpkaXJlY3Rpb25fc3RyaW5nKGVudW0gZGlyZWN0aW9uIGRp cikKK3sKKwlzd2l0Y2ggKGRpcikgeworCWNhc2UgZm9yd2FyZDogcmV0dXJuICJmb3J3YXJkIjsK KwljYXNlIGJhY2t3YXJkOiByZXR1cm4gImJhY2t3YXJkIjsKKwljYXNlIHJhbmRvbTogcmV0dXJu ICJyYW5kb20iOworCWRlZmF1bHQ6IHJldHVybiAidW5rbm93biEiOworCX0KK30KKworc3RhdGlj IGludCB0ZXN0X2ZlbmNlcyh1NjQgc3RyaWRlLCBlbnVtIGRpcmVjdGlvbiBkaXIpCit7CisJREVG SU5FX1NQSU5MT0NLKGxvY2spOworCXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlczsKKwlzdHJ1Y3Qg cmVzZXJ2YXRpb25fb2JqZWN0IHJlc3Y7CisJc3RydWN0IHJlc2VydmF0aW9uX3NoYXJlZF9pdGVy IGl0ZXI7CisJc3RydWN0IGRtYV9mZW5jZSAqKnNoYXJlZCwgKmV4Y2w7CisJdW5zaWduZWQgaW50 IG5zaGFyZWQsIG47CisJaW50ICpvcmRlcjsKKwl1NjQgY29udGV4dDsKKwlpbnQgcmV0ID0gLUVJ TlZBTDsKKworCWZlbmNlcyA9IGttYWxsb2NfYXJyYXkoTkZFTkNFUywgc2l6ZW9mKCpmZW5jZXMp LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZlbmNlcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlvcmRl ciA9IGttYWxsb2NfYXJyYXkoTkZFTkNFUywgc2l6ZW9mKCpvcmRlciksIEdGUF9LRVJORUwpOwor CWlmICghb3JkZXIpIHsKKwkJa2ZyZWUoZmVuY2VzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQor CisJcHJfaW5mbygiVGVzdGluZyAlZCBmZW5jZXMgd2l0aCBjb250ZXh0IHN0cmlkZSAlbGx1LCAl c1xuIiwKKwkJTkZFTkNFUywgc3RyaWRlLCBkaXJlY3Rpb25fc3RyaW5nKGRpcikpOworCisJcmVz ZXJ2YXRpb25fb2JqZWN0X2luaXQoJnJlc3YpOworCisJY29udGV4dCA9IDE7CisJZm9yIChuID0g MDsgbiA8IE5GRU5DRVM7IG4rKykgeworCQlkbWFfZmVuY2VfaW5pdCgmZmVuY2VzW25dLCAmZmFr ZV9mZW5jZV9vcHMsICZsb2NrLAorCQkJICAgICAgIGNvbnRleHQsIG4pOworCQlvcmRlcltuXSA9 IGRpciA9PSBiYWNrd2FyZCA/IE5GRU5DRVMgLSBuIC0gMSA6IG47CisJCWNvbnRleHQgKz0gc3Ry aWRlOworCX0KKworCWlmIChkaXIgPT0gcmFuZG9tKSB7CisJCWZvciAobiA9IE5GRU5DRVMtMTsg biA+IDE7IG4tLSkgeworCQkJaW50IHIgPSBnZXRfcmFuZG9tX2ludCgpICUgKG4gKyAxKTsKKwkJ CWlmIChyICE9IG4pIHsKKwkJCQlpbnQgdG1wID0gb3JkZXJbbl07CisJCQkJb3JkZXJbbl0gPSBv cmRlcltyXTsKKwkJCQlvcmRlcltyXSA9IHRtcDsKKwkJCX0KKwkJfQorCX0KKworCXd3X211dGV4 X2xvY2soJnJlc3YubG9jaywgTlVMTCk7CisJZm9yIChuID0gMDsgbiA8IE5GRU5DRVM7IG4rKykg eworCQlpZiAocmVzZXJ2YXRpb25fb2JqZWN0X3Jlc2VydmVfc2hhcmVkKCZyZXN2KSA9PSAwKQor CQkJcmVzZXJ2YXRpb25fb2JqZWN0X2FkZF9zaGFyZWRfZmVuY2UoJnJlc3YsCisJCQkJCQkJICAg ICZmZW5jZXNbb3JkZXJbbl1dKTsKKwl9CisJd3dfbXV0ZXhfdW5sb2NrKCZyZXN2LmxvY2spOwor CWtmcmVlKG9yZGVyKTsKKworCWlmICh2YWxpZGF0ZV90cmVlKCZyZXN2KSkgeworCQlwcl9lcnIo InJlc2VydmF0aW9uIG9iamVjdCBoYXMgYW4gaW52YWxpZCB0cmVlIVxuIik7CisJCWdvdG8gb3V0 OworCX0KKworCWlmICghcmVzZXJ2YXRpb25fb2JqZWN0X2hhc19zaGFyZWQoJnJlc3YpKSB7CisJ CXByX2VycigicmVzZXJ2YXRpb24gb2JqZWN0IGhhcyBubyBzaGFyZWQgZmVuY2VzIVxuIik7CisJ CWdvdG8gb3V0OworCX0KKworCW4gPSAwOworCXJlc2VydmF0aW9uX29iamVjdF9mb3JfZWFjaF9z aGFyZWQoJnJlc3YsIGl0ZXIpIHsKKwkJaWYgKGl0ZXIuZmVuY2UgIT0gJmZlbmNlc1tuXSkgewor CQkJcHJfZXJyKCJmZW5jZVslZF0gaXRlciBvdXQgb2Ygb3JkZXI6IGZvdW5kICVsbHggWyVkXSwg ZXhwZWN0ZWQgJWxseFxuIiwKKwkJCSAgICAgICBuLAorCQkJICAgICAgIGl0ZXIuZmVuY2UtPmNv bnRleHQsCisJCQkgICAgICAgaXRlci5mZW5jZS0+c2Vxbm8sCisJCQkgICAgICAgZmVuY2VzW25d LmNvbnRleHQpOworCQkJZ290byBvdXQ7CisJCX0KKwkJbisrOworCX0KKwlpZiAobiAhPSBORkVO Q0VTKSB7CisJCXByX2VycigiaXRlcmF0ZWQgb3ZlciAlZCBzaGFyZWQgZmVuY2VzLCBleHBlY3Rl ZCAlZFxuIiwgbnNoYXJlZCwgTkZFTkNFUyk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChyZXNl cnZhdGlvbl9vYmplY3RfZ2V0X2ZlbmNlc19yY3UoJnJlc3YsICZleGNsLAorCQkJCQkgICAgICAm bnNoYXJlZCwgJnNoYXJlZCkpIHsKKwkJcHJfZXJyKCJyZXNlcnZhdGlvbl9vYmplY3RfZ2V0X2Zl bmNlc19yY3UgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGV4Y2wpIHsKKwkJ cHJfZXJyKCJyZXNlcnZhdGlvbl9vYmplY3RfZ2V0X2ZlbmNlc19yY3UgcmVwb3J0ZWQgYW4gZXhj bHVzaXZlIGZlbmNlXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG5zaGFyZWQgIT0gTkZF TkNFUykgeworCQlwcl9lcnIoInJlc2VydmF0aW9uX29iamVjdF9nZXRfZmVuY2VzX3JjdSByZXBv cnRlZCAlZCBzaGFyZWQgZmVuY2VzLCBleHBlY3RlZCAlZFxuIiwgbnNoYXJlZCwgTkZFTkNFUyk7 CisJCWdvdG8gb3V0OworCX0KKworCWZvciAobiA9IDA7IG4gPCBORkVOQ0VTOyBuKyspIHsKKwkJ aWYgKHNoYXJlZFtuXSAhPSAmZmVuY2VzW25dKSB7CisJCQlwcl9lcnIoImZlbmNlWyVkXSBpdGVy IG91dCBvZiBvcmRlcjogZm91bmQgJWxseCBbJWRdLCBleHBlY3RlZCAlbGx4XG4iLAorCQkJICAg ICAgIG4sCisJCQkgICAgICAgc2hhcmVkW25dLT5jb250ZXh0LAorCQkJICAgICAgIHNoYXJlZFtu XS0+c2Vxbm8sCisJCQkgICAgICAgZmVuY2VzW25dLmNvbnRleHQpOworCQkJZ290byBvdXQ7CisJ CX0KKwkJZG1hX2ZlbmNlX3B1dChzaGFyZWRbbl0pOworCX0KKwlrZnJlZShzaGFyZWQpOworCisJ aWYgKCFyZXNlcnZhdGlvbl9vYmplY3RfdGVzdF9zaWduYWxlZF9yY3UoJnJlc3YsIGZhbHNlKSkg eworCQlwcl9lcnIoInJlc2VydmF0aW9uIG9iamVjdCBub3Qgc2lnbmFsZWQgW2V4Y2x1c2l2ZV1c biIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocmVzZXJ2YXRpb25fb2JqZWN0X3Rlc3Rfc2ln bmFsZWRfcmN1KCZyZXN2LCB0cnVlKSkgeworCQlwcl9lcnIoInJlc2VydmF0aW9uIG9iamVjdCB3 YXMgc2lnbmFsZWQgW2FsbF1cbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvL3Jlc2VydmF0aW9u X29iamVjdF93YWl0X3RpbWVvdXRfcmN1KCZyZXN2LCB0cnVlLCBmYWxzZSwgMCk7CisKKwlyZXNl cnZhdGlvbl9vYmplY3RfYWRkX2V4Y2xfZmVuY2UoJnJlc3YsIE5VTEwpOworCisJZm9yIChuID0g MDsgbiA8IE5GRU5DRVM7IG4rKykgeworCQlpZiAoYXRvbWljX3JlYWQoJmZlbmNlc1tuXS5yZWZj b3VudC5yZWZjb3VudCkgPiAxKSB7CisJCQlwcl9lcnIoImZlbmNlWyVkXSBsZWFrZWQsIHJlZmNv dW50IG5vdyAlZFxuIiwKKwkJCSAgICAgICBuLCBhdG9taWNfcmVhZCgmZmVuY2VzW25dLnJlZmNv dW50LnJlZmNvdW50KSk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChyZXNlcnZhdGlv bl9vYmplY3RfaGFzX3NoYXJlZCgmcmVzdikpIHsKKwkJcHJfZXJyKCJyZXNlcnZhdGlvbiBvYmpl Y3QgZGlkIG5vdCBkaXNjYXJkIHNoYXJlZCBmZW5jZXMhXG4iKTsKKwkJZ290byBvdXQ7CisJfQor CisJaWYgKCFyZXNlcnZhdGlvbl9vYmplY3RfdGVzdF9zaWduYWxlZF9yY3UoJnJlc3YsIGZhbHNl KSkgeworCQlwcl9lcnIoImVtcHR5IHJlc2VydmF0aW9uIG9iamVjdCBub3Qgc2lnbmFsZWQgW2V4 Y2x1c2l2ZV1cbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIXJlc2VydmF0aW9uX29iamVj dF90ZXN0X3NpZ25hbGVkX3JjdSgmcmVzdiwgdHJ1ZSkpIHsKKwkJcHJfZXJyKCJlbXB0eSByZXNl cnZhdGlvbiBvYmplY3Qgbm90IHNpZ25hbGVkIFthbGxdXG4iKTsKKwkJZ290byBvdXQ7CisJfQor CisJcmVzZXJ2YXRpb25fb2JqZWN0X2ZpbmkoJnJlc3YpOworCisJcmV0ID0gMDsKK291dDoKKwlr ZnJlZShmZW5jZXMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHRlc3Rf cmVzZXJ2YXRpb25faW5pdCh2b2lkKQoreworCWNvbnN0IHU2NCBtYXhfc3RyaWRlID0gfjB1bGwg LyBORkVOQ0VTOworCWludCBzdHJpZGVzW10gPSB7IE5TSEFSRUQtMSwgTlNIQVJFRCwgTlNIQVJF RCsxIH07CisJaW50IHJldCwgbjsKKworCXByX2luZm8oIlRlc3RpbmcgcmVzZXJ2YXRpb24gb2Jq ZWN0c1xuIik7CisKKwlmb3IgKG4gPSAwOyBuIDwgQVJSQVlfU0laRShzdHJpZGVzKTsgbisrKSB7 CisJCXU2NCBzdHJpZGU7CisKKwkJZm9yIChzdHJpZGUgPSAxOyBzdHJpZGUgPCBtYXhfc3RyaWRl OyBzdHJpZGUgKj0gc3RyaWRlc1tuXSkgeworCQkJZW51bSBkaXJlY3Rpb24gZGlyOworCisJCQlm b3IgKGRpciA9IGZvcndhcmQ7IGRpciA8PSByYW5kb207IGRpcisrKSB7CisJCQkJcmV0ID0gdGVz dF9mZW5jZXMoc3RyaWRlLCBkaXIpOworCQkJCWlmIChyZXQpCisJCQkJCXJldHVybiByZXQ7CisJ CQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHRlc3Rf cmVzZXJ2YXRpb25fY2xlYW51cCh2b2lkKQoreworfQorCittb2R1bGVfaW5pdCh0ZXN0X3Jlc2Vy dmF0aW9uX2luaXQpOworbW9kdWxlX2V4aXQodGVzdF9yZXNlcnZhdGlvbl9jbGVhbnVwKTsKKwor TU9EVUxFX0FVVEhPUigiSW50ZWwgQ29ycG9yYXRpb24iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwi KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9zeW5jLmMg Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfc3luYy5jCmluZGV4IGVkODE0ZTZk MDIwNy4uYTY2MGQzNmMwMzkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfc3luYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9z eW5jLmMKQEAgLTE3OCwxMCArMTc4LDkgQEAgaW50IGFtZGdwdV9zeW5jX3Jlc3Yoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYsCiAJCSAgICAgc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVz diwKIAkJICAgICB2b2lkICpvd25lcikKIHsKLQlzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0X2xp c3QgKmZsaXN0OworCXN0cnVjdCByZXNlcnZhdGlvbl9zaGFyZWRfaXRlciBpdGVyOwogCXN0cnVj dCBkbWFfZmVuY2UgKmY7CiAJdm9pZCAqZmVuY2Vfb3duZXI7Ci0JdW5zaWduZWQgaTsKIAlpbnQg ciA9IDA7CiAKIAlpZiAocmVzdiA9PSBOVUxMKQpAQCAtMTkwLDE0ICsxODksMTEgQEAgaW50IGFt ZGdwdV9zeW5jX3Jlc3Yoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCiAJLyogYWx3YXlzIHN5 bmMgdG8gdGhlIGV4Y2x1c2l2ZSBmZW5jZSAqLwogCWYgPSByZXNlcnZhdGlvbl9vYmplY3RfZ2V0 X2V4Y2wocmVzdik7CiAJciA9IGFtZGdwdV9zeW5jX2ZlbmNlKGFkZXYsIHN5bmMsIGYpOworCWlm IChyKQorCQlyZXR1cm4gcmV0OwogCi0JZmxpc3QgPSByZXNlcnZhdGlvbl9vYmplY3RfZ2V0X2xp c3QocmVzdik7Ci0JaWYgKCFmbGlzdCB8fCByKQotCQlyZXR1cm4gcjsKLQotCWZvciAoaSA9IDA7 IGkgPCBmbGlzdC0+c2hhcmVkX2NvdW50OyArK2kpIHsKLQkJZiA9IHJjdV9kZXJlZmVyZW5jZV9w cm90ZWN0ZWQoZmxpc3QtPnNoYXJlZFtpXSwKLQkJCQkJICAgICAgcmVzZXJ2YXRpb25fb2JqZWN0 X2hlbGQocmVzdikpOworCXJlc2VydmF0aW9uX29iamVjdF9mb3JfZWFjaF9zaGFyZWQocmVzdiwg aXRlcikgeworCQlmID0gaXRlci5mZW5jZTsKIAkJaWYgKGFtZGdwdV9zeW5jX3NhbWVfZGV2KGFk ZXYsIGYpKSB7CiAJCQkvKiBWTSB1cGRhdGVzIGFyZSBvbmx5IGludGVyZXN0aW5nCiAJCQkgKiBm b3Igb3RoZXIgVk0gdXBkYXRlcyBhbmQgbW92ZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZp dl9nZW0uYwppbmRleCA3ZDA2NmE5MWQ3NzguLjU0NzNiMWI4YmI4MCAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0v ZXRuYXZpdi9ldG5hdml2X2dlbS5jCkBAIC00ODEsNyArNDgxLDcgQEAgc3RhdGljIHZvaWQgZXRu YXZpdl9nZW1fZGVzY3JpYmUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBzZXFf ZmlsZSAqbSkKIHsKIAlzdHJ1Y3QgZXRuYXZpdl9nZW1fb2JqZWN0ICpldG5hdml2X29iaiA9IHRv X2V0bmF2aXZfYm8ob2JqKTsKIAlzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpyb2JqID0gZXRu YXZpdl9vYmotPnJlc3Y7Ci0Jc3RydWN0IHJlc2VydmF0aW9uX29iamVjdF9saXN0ICpmb2JqOwor CXN0cnVjdCByZXNlcnZhdGlvbl9zaGFyZWRfaXRlciBpdGVyOwogCXN0cnVjdCBkbWFfZmVuY2Ug KmZlbmNlOwogCXVuc2lnbmVkIGxvbmcgb2ZmID0gZHJtX3ZtYV9ub2RlX3N0YXJ0KCZvYmotPnZt YV9ub2RlKTsKIApAQCAtNDkxLDE3ICs0OTEsMTAgQEAgc3RhdGljIHZvaWQgZXRuYXZpdl9nZW1f ZGVzY3JpYmUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBzZXFfZmlsZSAqbSkK IAkJCW9mZiwgZXRuYXZpdl9vYmotPnZhZGRyLCBvYmotPnNpemUpOwogCiAJcmN1X3JlYWRfbG9j aygpOwotCWZvYmogPSByY3VfZGVyZWZlcmVuY2Uocm9iai0+ZmVuY2UpOwotCWlmIChmb2JqKSB7 Ci0JCXVuc2lnbmVkIGludCBpLCBzaGFyZWRfY291bnQgPSBmb2JqLT5zaGFyZWRfY291bnQ7CisJ cmVzZXJ2YXRpb25fb2JqZWN0X2Zvcl9lYWNoX3NoYXJlZChyb2JqLCBpdGVyKQorCQlldG5hdml2 X2dlbV9kZXNjcmliZV9mZW5jZShpdGVyLmZlbmNlLCAiU2hhcmVkIiwgbSk7CiAKLQkJZm9yIChp ID0gMDsgaSA8IHNoYXJlZF9jb3VudDsgaSsrKSB7Ci0JCQlmZW5jZSA9IHJjdV9kZXJlZmVyZW5j ZShmb2JqLT5zaGFyZWRbaV0pOwotCQkJZXRuYXZpdl9nZW1fZGVzY3JpYmVfZmVuY2UoZmVuY2Us ICJTaGFyZWQiLCBtKTsKLQkJfQotCX0KLQotCWZlbmNlID0gcmN1X2RlcmVmZXJlbmNlKHJvYmot PmZlbmNlX2V4Y2wpOworCWZlbmNlID0gcmN1X2RlcmVmZXJlbmNlKHJvYmotPmV4Y2wpOwogCWlm IChmZW5jZSkKIAkJZXRuYXZpdl9nZW1fZGVzY3JpYmVfZmVuY2UoZmVuY2UsICJFeGNsdXNpdmUi LCBtKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9l dG5hdml2L2V0bmF2aXZfZ3B1LmMgYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dw dS5jCmluZGV4IGQyMjExODI1ZTVjOC4uN2ZjZGY5ZGM4NmY4IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dwdS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5h dml2L2V0bmF2aXZfZ3B1LmMKQEAgLTEwMjAsOSArMTAyMCw5IEBAIGludCBldG5hdml2X2dwdV9m ZW5jZV9zeW5jX29iaihzdHJ1Y3QgZXRuYXZpdl9nZW1fb2JqZWN0ICpldG5hdml2X29iaiwKIAl1 bnNpZ25lZCBpbnQgY29udGV4dCwgYm9vbCBleGNsdXNpdmUpCiB7CiAJc3RydWN0IHJlc2VydmF0 aW9uX29iamVjdCAqcm9iaiA9IGV0bmF2aXZfb2JqLT5yZXN2OwotCXN0cnVjdCByZXNlcnZhdGlv bl9vYmplY3RfbGlzdCAqZm9iajsKKwlzdHJ1Y3QgcmVzZXJ2YXRpb25fc2hhcmVkX2l0ZXIgaXRl cjsKIAlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKLQlpbnQgaSwgcmV0OworCWludCByZXQ7CiAK IAlpZiAoIWV4Y2x1c2l2ZSkgewogCQlyZXQgPSByZXNlcnZhdGlvbl9vYmplY3RfcmVzZXJ2ZV9z aGFyZWQocm9iaik7CkBAIC0xMDM0LDggKzEwMzQsNyBAQCBpbnQgZXRuYXZpdl9ncHVfZmVuY2Vf c3luY19vYmooc3RydWN0IGV0bmF2aXZfZ2VtX29iamVjdCAqZXRuYXZpdl9vYmosCiAJICogSWYg d2UgaGF2ZSBhbnkgc2hhcmVkIGZlbmNlcywgdGhlbiB0aGUgZXhjbHVzaXZlIGZlbmNlCiAJICog c2hvdWxkIGJlIGlnbm9yZWQgYXMgaXQgd2lsbCBhbHJlYWR5IGhhdmUgYmVlbiBzaWduYWxsZWQu CiAJICovCi0JZm9iaiA9IHJlc2VydmF0aW9uX29iamVjdF9nZXRfbGlzdChyb2JqKTsKLQlpZiAo IWZvYmogfHwgZm9iai0+c2hhcmVkX2NvdW50ID09IDApIHsKKwlpZiAoIXJlc2VydmF0aW9uX29i amVjdF9oYXNfc2hhcmVkKHJvYmopKSB7CiAJCS8qIFdhaXQgb24gYW55IGV4aXN0aW5nIGV4Y2x1 c2l2ZSBmZW5jZSB3aGljaCBpc24ndCBvdXIgb3duICovCiAJCWZlbmNlID0gcmVzZXJ2YXRpb25f b2JqZWN0X2dldF9leGNsKHJvYmopOwogCQlpZiAoZmVuY2UgJiYgZmVuY2UtPmNvbnRleHQgIT0g Y29udGV4dCkgewpAQCAtMTA0NSwxMiArMTA0NCwxMSBAQCBpbnQgZXRuYXZpdl9ncHVfZmVuY2Vf c3luY19vYmooc3RydWN0IGV0bmF2aXZfZ2VtX29iamVjdCAqZXRuYXZpdl9vYmosCiAJCX0KIAl9 CiAKLQlpZiAoIWV4Y2x1c2l2ZSB8fCAhZm9iaikKKwlpZiAoIWV4Y2x1c2l2ZSkKIAkJcmV0dXJu IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZm9iai0+c2hhcmVkX2NvdW50OyBpKyspIHsKLQkJZmVu Y2UgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGZvYmotPnNoYXJlZFtpXSwKLQkJCQkJCXJl c2VydmF0aW9uX29iamVjdF9oZWxkKHJvYmopKTsKKwlyZXNlcnZhdGlvbl9vYmplY3RfZm9yX2Vh Y2hfc2hhcmVkKHJlc3YsIGl0ZXIpIHsKKwkJZmVuY2UgPSBpdGVyLmZlbmNlOwogCQlpZiAoZmVu Y2UtPmNvbnRleHQgIT0gY29udGV4dCkgewogCQkJcmV0ID0gZG1hX2ZlbmNlX3dhaXQoZmVuY2Us IHRydWUpOwogCQkJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IGVkNDQ2NWQy MmRkZS4uZDU4YTYzOTBmMjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTM3MDAsNyAr MzcwMCw3IEBAIGk5MTVfZ2VtX2J1c3lfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9p ZCAqZGF0YSwKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2J1c3kgKmFyZ3MgPSBkYXRhOwogCXN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Ci0Jc3RydWN0IHJlc2VydmF0aW9uX29iamVj dF9saXN0ICpsaXN0OworCXN0cnVjdCByZXNlcnZhdGlvbl9zaGFyZWRfaXRlciBpdGVyOwogCXVu c2lnbmVkIGludCBzZXE7CiAJaW50IGVycjsKIApAQCAtMzczMCwyMCArMzczMCwxMSBAQCBpOTE1 X2dlbV9idXN5X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJc2Vx ID0gcmF3X3JlYWRfc2VxY291bnQoJm9iai0+cmVzdi0+c2VxKTsKIAogCS8qIFRyYW5zbGF0ZSB0 aGUgZXhjbHVzaXZlIGZlbmNlIHRvIHRoZSBSRUFEICphbmQqIFdSSVRFIGVuZ2luZSAqLwotCWFy Z3MtPmJ1c3kgPSBidXN5X2NoZWNrX3dyaXRlcihyY3VfZGVyZWZlcmVuY2Uob2JqLT5yZXN2LT5m ZW5jZV9leGNsKSk7CisJYXJncy0+YnVzeSA9IGJ1c3lfY2hlY2tfd3JpdGVyKHJjdV9kZXJlZmVy ZW5jZShvYmotPnJlc3YtPmV4Y2wpKTsKIAogCS8qIFRyYW5zbGF0ZSBzaGFyZWQgZmVuY2VzIHRv IFJFQUQgc2V0IG9mIGVuZ2luZXMgKi8KLQlsaXN0ID0gcmN1X2RlcmVmZXJlbmNlKG9iai0+cmVz di0+ZmVuY2UpOwotCWlmIChsaXN0KSB7Ci0JCXVuc2lnbmVkIGludCBzaGFyZWRfY291bnQgPSBs aXN0LT5zaGFyZWRfY291bnQsIGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IHNoYXJlZF9jb3VudDsg KytpKSB7Ci0JCQlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSA9Ci0JCQkJcmN1X2RlcmVmZXJlbmNl KGxpc3QtPnNoYXJlZFtpXSk7Ci0KLQkJCWFyZ3MtPmJ1c3kgfD0gYnVzeV9jaGVja19yZWFkZXIo ZmVuY2UpOwotCQl9Ci0JfQorCXJlc2VydmF0aW9uX29iamVjdF9mb3JfZWFjaF9zaGFyZWQob2Jq LT5yZXN2LCBpdGVyKQorCQlhcmdzLT5idXN5IHw9IGJ1c3lfY2hlY2tfcmVhZGVyKGl0ZXIuZmVu Y2UpOwogCiAJaWYgKGFyZ3MtPmJ1c3kgJiYgcmVhZF9zZXFjb3VudF9yZXRyeSgmb2JqLT5yZXN2 LT5zZXEsIHNlcSkpCiAJCWdvdG8gcmV0cnk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bXNtL21zbV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jCmluZGV4IDU3ZGI3 ZGJiYjYxOC4uZWVlZTI5OTY4ZDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21z bV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYwpAQCAtNTIwLDkgKzUy MCw5IEBAIGludCBtc21fZ2VtX3N5bmNfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq LAogCQlzdHJ1Y3QgbXNtX2ZlbmNlX2NvbnRleHQgKmZjdHgsIGJvb2wgZXhjbHVzaXZlKQogewog CXN0cnVjdCBtc21fZ2VtX29iamVjdCAqbXNtX29iaiA9IHRvX21zbV9ibyhvYmopOwotCXN0cnVj dCByZXNlcnZhdGlvbl9vYmplY3RfbGlzdCAqZm9iajsKKwlzdHJ1Y3QgcmVzZXJ2YXRpb25fc2hh cmVkX2l0ZXIgaXRlcjsKIAlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKLQlpbnQgaSwgcmV0Owor CWludCByZXQ7CiAKIAlpZiAoIWV4Y2x1c2l2ZSkgewogCQkvKiBOT1RFOiBfcmVzZXJ2ZV9zaGFy ZWQoKSBtdXN0IGhhcHBlbiBiZWZvcmUgX2FkZF9zaGFyZWRfZmVuY2UoKSwKQEAgLTUzNSw4ICs1 MzUsNyBAQCBpbnQgbXNtX2dlbV9zeW5jX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i aiwKIAkJCXJldHVybiByZXQ7CiAJfQogCi0JZm9iaiA9IHJlc2VydmF0aW9uX29iamVjdF9nZXRf bGlzdChtc21fb2JqLT5yZXN2KTsKLQlpZiAoIWZvYmogfHwgKGZvYmotPnNoYXJlZF9jb3VudCA9 PSAwKSkgeworCWlmICghcmVzZXJ2YXRpb25fb2JqZWN0X2hhc19zaGFyZWQobXNtX29iai0+cmVz dikpIHsKIAkJZmVuY2UgPSByZXNlcnZhdGlvbl9vYmplY3RfZ2V0X2V4Y2wobXNtX29iai0+cmVz dik7CiAJCS8qIGRvbid0IG5lZWQgdG8gd2FpdCBvbiBvdXIgb3duIGZlbmNlcywgc2luY2Ugcmlu ZyBpcyBmaWZvICovCiAJCWlmIChmZW5jZSAmJiAoZmVuY2UtPmNvbnRleHQgIT0gZmN0eC0+Y29u dGV4dCkpIHsKQEAgLTU0NiwxMiArNTQ1LDExIEBAIGludCBtc21fZ2VtX3N5bmNfb2JqZWN0KHN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAogCQl9CiAJfQogCi0JaWYgKCFleGNsdXNpdmUgfHwg IWZvYmopCisJaWYgKCFleGNsdXNpdmUpCiAJCXJldHVybiAwOwogCi0JZm9yIChpID0gMDsgaSA8 IGZvYmotPnNoYXJlZF9jb3VudDsgaSsrKSB7Ci0JCWZlbmNlID0gcmN1X2RlcmVmZXJlbmNlX3By b3RlY3RlZChmb2JqLT5zaGFyZWRbaV0sCi0JCQkJCQlyZXNlcnZhdGlvbl9vYmplY3RfaGVsZCht c21fb2JqLT5yZXN2KSk7CisJcmVzZXJ2YXRpb25fb2JqZWN0X2Zvcl9lYWNoX3NoYXJlZChtc21f b2JqLT5yZXN2LCBpdGVyKSB7CisJCWZlbmNlID0gaXRlci5mZW5jZTsKIAkJaWYgKGZlbmNlLT5j b250ZXh0ICE9IGZjdHgtPmNvbnRleHQpIHsKIAkJCXJldCA9IGRtYV9mZW5jZV93YWl0KGZlbmNl LCB0cnVlKTsKIAkJCWlmIChyZXQpCkBAIC02MzAsNyArNjI4LDcgQEAgdm9pZCBtc21fZ2VtX2Rl c2NyaWJlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7 CiAJc3RydWN0IG1zbV9nZW1fb2JqZWN0ICptc21fb2JqID0gdG9fbXNtX2JvKG9iaik7CiAJc3Ry dWN0IHJlc2VydmF0aW9uX29iamVjdCAqcm9iaiA9IG1zbV9vYmotPnJlc3Y7Ci0Jc3RydWN0IHJl c2VydmF0aW9uX29iamVjdF9saXN0ICpmb2JqOworCXN0cnVjdCByZXNlcnZhdGlvbl9zaGFyZWRf aXRlciBpdGVyOwogCXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlOwogCXVpbnQ2NF90IG9mZiA9IGRy bV92bWFfbm9kZV9zdGFydCgmb2JqLT52bWFfbm9kZSk7CiAJY29uc3QgY2hhciAqbWFkdjsKQEAg LTY1NiwxNyArNjU0LDEwIEBAIHZvaWQgbXNtX2dlbV9kZXNjcmliZShzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKm9iaiwgc3RydWN0IHNlcV9maWxlICptKQogCQkJb2ZmLCBtc21fb2JqLT52YWRkciwg b2JqLT5zaXplLCBtYWR2KTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlmb2JqID0gcmN1X2RlcmVm ZXJlbmNlKHJvYmotPmZlbmNlKTsKLQlpZiAoZm9iaikgewotCQl1bnNpZ25lZCBpbnQgaSwgc2hh cmVkX2NvdW50ID0gZm9iai0+c2hhcmVkX2NvdW50OwotCi0JCWZvciAoaSA9IDA7IGkgPCBzaGFy ZWRfY291bnQ7IGkrKykgewotCQkJZmVuY2UgPSByY3VfZGVyZWZlcmVuY2UoZm9iai0+c2hhcmVk W2ldKTsKLQkJCWRlc2NyaWJlX2ZlbmNlKGZlbmNlLCAiU2hhcmVkIiwgbSk7Ci0JCX0KLQl9CisJ cmVzZXJ2YXRpb25fb2JqZWN0X2Zvcl9lYWNoX3NoYXJlZChmb2JqLCBpdGVyKQorCQlkZXNjcmli ZV9mZW5jZShpdGVyLmZlbmNlLCAiU2hhcmVkIiwgbSk7CiAKLQlmZW5jZSA9IHJjdV9kZXJlZmVy ZW5jZShyb2JqLT5mZW5jZV9leGNsKTsKKwlmZW5jZSA9IHJjdV9kZXJlZmVyZW5jZShyb2JqLT5l eGNsKTsKIAlpZiAoZmVuY2UpCiAJCWRlc2NyaWJlX2ZlbmNlKGZlbmNlLCAiRXhjbHVzaXZlIiwg bSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91 dmVhdS9ub3V2ZWF1X2ZlbmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Zl bmNlLmMKaW5kZXggZjJmMzQ4ZjAxNjBjLi5jNWIwOTY3ZjVmNmUgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmVuY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v bm91dmVhdS9ub3V2ZWF1X2ZlbmNlLmMKQEAgLTM5MywyMSArMzkzLDE5IEBAIG5vdXZlYXVfZmVu Y2Vfc3luYyhzdHJ1Y3Qgbm91dmVhdV9ibyAqbnZibywgc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAq Y2hhbiwgYm9vbCBlCiAJc3RydWN0IG5vdXZlYXVfZmVuY2VfY2hhbiAqZmN0eCA9IGNoYW4tPmZl bmNlOwogCXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlOwogCXN0cnVjdCByZXNlcnZhdGlvbl9vYmpl Y3QgKnJlc3YgPSBudmJvLT5iby5yZXN2OwotCXN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3RfbGlz dCAqZm9iajsKKwlzdHJ1Y3QgcmVzZXJ2YXRpb25fc2hhcmVkX2l0ZXIgaXRlcjsKIAlzdHJ1Y3Qg bm91dmVhdV9mZW5jZSAqZjsKLQlpbnQgcmV0ID0gMCwgaTsKKwlpbnQgcmV0ID0gMDsKIAogCWlm ICghZXhjbHVzaXZlKSB7CiAJCXJldCA9IHJlc2VydmF0aW9uX29iamVjdF9yZXNlcnZlX3NoYXJl ZChyZXN2KTsKLQogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlmb2JqID0gcmVz ZXJ2YXRpb25fb2JqZWN0X2dldF9saXN0KHJlc3YpOwogCWZlbmNlID0gcmVzZXJ2YXRpb25fb2Jq ZWN0X2dldF9leGNsKHJlc3YpOwogCi0JaWYgKGZlbmNlICYmICghZXhjbHVzaXZlIHx8ICFmb2Jq IHx8ICFmb2JqLT5zaGFyZWRfY291bnQpKSB7CisJaWYgKGZlbmNlICYmICghZXhjbHVzaXZlIHx8 ICFyZXNlcnZhdGlvbl9vYmplY3RfaGFzX3NoYXJlZChyZXN2KSkpIHsKIAkJc3RydWN0IG5vdXZl YXVfY2hhbm5lbCAqcHJldiA9IE5VTEw7CiAJCWJvb2wgbXVzdF93YWl0ID0gdHJ1ZTsKIApAQCAt NDI2LDE1ICs0MjQsMTQgQEAgbm91dmVhdV9mZW5jZV9zeW5jKHN0cnVjdCBub3V2ZWF1X2JvICpu dmJvLCBzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLCBib29sIGUKIAkJcmV0dXJuIHJldDsK IAl9CiAKLQlpZiAoIWV4Y2x1c2l2ZSB8fCAhZm9iaikKKwlpZiAoIWV4Y2x1c2l2ZSkKIAkJcmV0 dXJuIHJldDsKIAotCWZvciAoaSA9IDA7IGkgPCBmb2JqLT5zaGFyZWRfY291bnQgJiYgIXJldDsg KytpKSB7CisJcmVzZXJ2YXRpb25fb2JqZWN0X2Zvcl9lYWNoX3NoYXJlZChyZXN2LCBpdGVyKSB7 CiAJCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKnByZXYgPSBOVUxMOwogCQlib29sIG11c3Rfd2Fp dCA9IHRydWU7CiAKLQkJZmVuY2UgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGZvYmotPnNo YXJlZFtpXSwKLQkJCQkJCXJlc2VydmF0aW9uX29iamVjdF9oZWxkKHJlc3YpKTsKKwkJZmVuY2Ug PSBpdGVyLmZlbmNlOwogCiAJCWYgPSBub3V2ZWF1X2xvY2FsX2ZlbmNlKGZlbmNlLCBjaGFuLT5k cm0pOwogCQlpZiAoZikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91 dmVhdV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKaW5kZXgg MjAxYjUyYjc1MGRkLi5kZWFkOTYzMGU0NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9u b3V2ZWF1L25vdXZlYXVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVh dV9nZW0uYwpAQCAtMTE4LDE5ICsxMTgsMjIgQEAgbm91dmVhdV9nZW1fb2JqZWN0X3VubWFwKHN0 cnVjdCBub3V2ZWF1X2JvICpudmJvLCBzdHJ1Y3QgbnZrbV92bWEgKnZtYSkKIHsKIAljb25zdCBi b29sIG1hcHBlZCA9IG52Ym8tPmJvLm1lbS5tZW1fdHlwZSAhPSBUVE1fUExfU1lTVEVNOwogCXN0 cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgKnJlc3YgPSBudmJvLT5iby5yZXN2OwotCXN0cnVjdCBy ZXNlcnZhdGlvbl9vYmplY3RfbGlzdCAqZm9iajsKKwlzdHJ1Y3QgcmVzZXJ2YXRpb25fc2hhcmVk X2l0ZXIgaXRlcjsKIAlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSA9IE5VTEw7CiAKLQlmb2JqID0g cmVzZXJ2YXRpb25fb2JqZWN0X2dldF9saXN0KHJlc3YpOwotCiAJbGlzdF9kZWwoJnZtYS0+aGVh ZCk7CiAKLQlpZiAoZm9iaiAmJiBmb2JqLT5zaGFyZWRfY291bnQgPiAxKQotCQl0dG1fYm9fd2Fp dCgmbnZiby0+Ym8sIGZhbHNlLCBmYWxzZSk7Ci0JZWxzZSBpZiAoZm9iaiAmJiBmb2JqLT5zaGFy ZWRfY291bnQgPT0gMSkKLQkJZmVuY2UgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGZvYmot PnNoYXJlZFswXSwKLQkJCQkJCXJlc2VydmF0aW9uX29iamVjdF9oZWxkKHJlc3YpKTsKLQllbHNl CisJcmVzZXJ2YXRpb25fb2JqZWN0X2Zvcl9lYWNoX3NoYXJlZChyZXN2LCBpdGVyKSB7CisJCWlm IChmZW5jZSkgeworCQkJdHRtX2JvX3dhaXQoJm52Ym8tPmJvLCBmYWxzZSwgZmFsc2UpOworCQkJ ZmVuY2UgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKworCQlmZW5jZSA9IGl0ZXIuZmVuY2U7CisJ fQorCisJaWYgKCFmZW5jZSkKIAkJZmVuY2UgPSByZXNlcnZhdGlvbl9vYmplY3RfZ2V0X2V4Y2wo bnZiby0+Ym8ucmVzdik7CiAKIAlpZiAoZmVuY2UgJiYgbWFwcGVkKSB7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcXhsL3F4 bF9kZWJ1Z2ZzLmMKaW5kZXggNjkxMWI4YzQ0NDkyLi5kZjAwYjc3YWM1NDYgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX2RlYnVnZnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v cXhsL3F4bF9kZWJ1Z2ZzLmMKQEAgLTU4LDEyICs1OCwxMyBAQCBxeGxfZGVidWdmc19idWZmZXJz X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQogCXN0cnVjdCBxeGxfYm8gKmJv OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShibywgJnFkZXYtPmdlbS5vYmplY3RzLCBsaXN0KSB7 Ci0JCXN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3RfbGlzdCAqZm9iajsKLQkJaW50IHJlbDsKKwkJ c3RydWN0IHJlc2VydmF0aW9uX3NoYXJlZF9pdGVyIGl0ZXI7CisJCXVuc2lnbmVkIGxvbmcgcmVs OwogCisJCXJlbCA9IDA7CiAJCXJjdV9yZWFkX2xvY2soKTsKLQkJZm9iaiA9IHJjdV9kZXJlZmVy ZW5jZShiby0+dGJvLnJlc3YtPmZlbmNlKTsKLQkJcmVsID0gZm9iaiA/IGZvYmotPnNoYXJlZF9j b3VudCA6IDA7CisJCXJlc2VydmF0aW9uX29iamVjdF9mb3JfZWFjaF9zaGFyZWQoYm8tPnRiby5y ZXN2LCBpdGVyKQorCQkJcmVsKys7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCiAJCXNlcV9wcmlu dGYobSwgInNpemUgJWxkLCBwYyAlZCwgbnVtIHJlbGVhc2VzICVkXG4iLApkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3luYy5jIGIvZHJpdmVycy9ncHUvZHJtL3Jh ZGVvbi9yYWRlb25fc3luYy5jCmluZGV4IGJlNWQ3YTM4ZDNhYS4uNzJiNTZlZDA5ZGY0IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zeW5jLmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3luYy5jCkBAIC05MSwxMCArOTEsOSBAQCBpbnQgcmFk ZW9uX3N5bmNfcmVzdihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIAkJICAgICBzdHJ1Y3Qg cmVzZXJ2YXRpb25fb2JqZWN0ICpyZXN2LAogCQkgICAgIGJvb2wgc2hhcmVkKQogewotCXN0cnVj dCByZXNlcnZhdGlvbl9vYmplY3RfbGlzdCAqZmxpc3Q7CisJc3RydWN0IHJlc2VydmF0aW9uX3No YXJlZF9pdGVyIGl0ZXI7CiAJc3RydWN0IGRtYV9mZW5jZSAqZjsKIAlzdHJ1Y3QgcmFkZW9uX2Zl bmNlICpmZW5jZTsKLQl1bnNpZ25lZCBpOwogCWludCByID0gMDsKIAogCS8qIGFsd2F5cyBzeW5j IHRvIHRoZSBleGNsdXNpdmUgZmVuY2UgKi8KQEAgLTEwNSwxNCArMTA0LDExIEBAIGludCByYWRl b25fc3luY19yZXN2KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCWVsc2UgaWYgKGYpCiAJ CXIgPSBkbWFfZmVuY2Vfd2FpdChmLCB0cnVlKTsKIAotCWZsaXN0ID0gcmVzZXJ2YXRpb25fb2Jq ZWN0X2dldF9saXN0KHJlc3YpOwotCWlmIChzaGFyZWQgfHwgIWZsaXN0IHx8IHIpCisJaWYgKHNo YXJlZCB8fCAhcmVzZXJ2YXRpb25fb2JqZWN0X2hhc19zaGFyZWQocmVzdikgfHwgcikKIAkJcmV0 dXJuIHI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZmxpc3QtPnNoYXJlZF9jb3VudDsgKytpKSB7Ci0J CWYgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGZsaXN0LT5zaGFyZWRbaV0sCi0JCQkJCSAg ICAgIHJlc2VydmF0aW9uX29iamVjdF9oZWxkKHJlc3YpKTsKLQkJZmVuY2UgPSB0b19yYWRlb25f ZmVuY2UoZik7CisJcmVzZXZhdGlvbl9vYmplY3RfZm9yX2VhY2hfc2hhcmVkKHJlc3YsIGl0ZXIp IHsKKwkJZmVuY2UgPSB0b19yYWRlb25fZmVuY2UoaXRlci5mZW5jZSk7CiAJCWlmIChmZW5jZSAm JiBmZW5jZS0+cmRldiA9PSByZGV2KQogCQkJcmFkZW9uX3N5bmNfZmVuY2Uoc3luYywgZmVuY2Up OwogCQllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jIGIvZHJp dmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYwppbmRleCBkNTA2MzYxOGVmYTcuLjU4NDRjNGFhNmUx YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYworKysgYi9kcml2ZXJz L2dwdS9kcm0vdHRtL3R0bV9iby5jCkBAIC00MjUsMTkgKzQyNSwxNSBAQCBzdGF0aWMgdm9pZCB0 dG1fYm9fY2xlYW51cF9tZW10eXBlX3VzZShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKQog CiBzdGF0aWMgdm9pZCB0dG1fYm9fZmx1c2hfYWxsX2ZlbmNlcyhzdHJ1Y3QgdHRtX2J1ZmZlcl9v YmplY3QgKmJvKQogewotCXN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3RfbGlzdCAqZm9iajsKKwlz dHJ1Y3QgcmVzZXJ2YXRpb25fc2hhcmVkX2l0ZXIgaXRlcjsKIAlzdHJ1Y3QgZG1hX2ZlbmNlICpm ZW5jZTsKLQlpbnQgaTsKIAotCWZvYmogPSByZXNlcnZhdGlvbl9vYmplY3RfZ2V0X2xpc3QoYm8t PnJlc3YpOwogCWZlbmNlID0gcmVzZXJ2YXRpb25fb2JqZWN0X2dldF9leGNsKGJvLT5yZXN2KTsK IAlpZiAoZmVuY2UgJiYgIWZlbmNlLT5vcHMtPnNpZ25hbGVkKQogCQlkbWFfZmVuY2VfZW5hYmxl X3N3X3NpZ25hbGluZyhmZW5jZSk7CiAKLQlmb3IgKGkgPSAwOyBmb2JqICYmIGkgPCBmb2JqLT5z aGFyZWRfY291bnQ7ICsraSkgewotCQlmZW5jZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQo Zm9iai0+c2hhcmVkW2ldLAotCQkJCQlyZXNlcnZhdGlvbl9vYmplY3RfaGVsZChiby0+cmVzdikp OwotCisJcmVzZXJ2YXRpb25fb2JqZWN0X2Zvcl9lYWNoX3NoYXJlZChiby0+cmVzdiwgaXRlcikg eworCQlmZW5jZSA9IGl0ZXIuZmVuY2U7CiAJCWlmICghZmVuY2UtPm9wcy0+c2lnbmFsZWQpCiAJ CQlkbWFfZmVuY2VfZW5hYmxlX3N3X3NpZ25hbGluZyhmZW5jZSk7CiAJfQpkaWZmIC0tZ2l0IGEv aW5jbHVkZS9saW51eC9yZXNlcnZhdGlvbi5oIGIvaW5jbHVkZS9saW51eC9yZXNlcnZhdGlvbi5o CmluZGV4IDJlMzEzY2NhMDhmMC4uM2U5M2IwZDdkYWNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xp bnV4L3Jlc2VydmF0aW9uLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZXNlcnZhdGlvbi5oCkBAIC00 OSwzNCArNDksNDcgQEAgZXh0ZXJuIHN0cnVjdCB3d19jbGFzcyByZXNlcnZhdGlvbl93d19jbGFz czsKIGV4dGVybiBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcmVzZXJ2YXRpb25fc2VxY291bnRfY2xh c3M7CiBleHRlcm4gY29uc3QgY2hhciByZXNlcnZhdGlvbl9zZXFjb3VudF9zdHJpbmdbXTsKIAot LyoqCi0gKiBzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0X2xpc3QgLSBhIGxpc3Qgb2Ygc2hhcmVk IGZlbmNlcwotICogQHJjdTogZm9yIGludGVybmFsIHVzZQotICogQHNoYXJlZF9jb3VudDogdGFi bGUgb2Ygc2hhcmVkIGZlbmNlcwotICogQHNoYXJlZF9tYXg6IGZvciBncm93aW5nIHNoYXJlZCBm ZW5jZSB0YWJsZQotICogQHNoYXJlZDogc2hhcmVkIGZlbmNlIHRhYmxlCi0gKi8KLXN0cnVjdCBy ZXNlcnZhdGlvbl9vYmplY3RfbGlzdCB7Ci0Jc3RydWN0IHJjdV9oZWFkIHJjdTsKLQl1MzIgc2hh cmVkX2NvdW50LCBzaGFyZWRfbWF4OwotCXN0cnVjdCBkbWFfZmVuY2UgX19yY3UgKnNoYXJlZFtd Oworc3RydWN0IHJlc2VydmF0aW9uX3NoYXJlZF9sYXllcjsKKworI2RlZmluZSBOU0hBUkVEIDE2 CisKK3N0cnVjdCByZXNlcnZhdGlvbl9zaGFyZWRfbGF5ZXIgeworCXVuaW9uIHsKKwkJdTY0IHBy ZWZpeDsKKwkJc3RydWN0IHJjdV9oZWFkIHJjdTsKKwl9OworCXVuc2lnbmVkIGludCBoZWlnaHQ7 CisJdW5zaWduZWQgaW50IGJpdG1hcDsKKwl2b2lkICpzbG90W05TSEFSRURdOworCXN0cnVjdCBy ZXNlcnZhdGlvbl9zaGFyZWRfbGF5ZXIgKnBhcmVudDsKK307CisKK3N0cnVjdCByZXNlcnZhdGlv bl9zaGFyZWQgeworCXN0cnVjdCByZXNlcnZhdGlvbl9zaGFyZWRfbGF5ZXIgKmhpbnQ7CisJc3Ry dWN0IHJlc2VydmF0aW9uX3NoYXJlZF9sYXllciAqdG9wOworCXN0cnVjdCByZXNlcnZhdGlvbl9z aGFyZWRfbGF5ZXIgKmZyZWVkOwogfTsKIAorc3RhdGljIGlubGluZSB2b2lkIHJlc2VydmF0aW9u X3NoYXJlZF9pbml0KHN0cnVjdCByZXNlcnZhdGlvbl9zaGFyZWQgKnNoYXJlZCkKK3sKKwltZW1z ZXQoc2hhcmVkLCAwLCBzaXplb2YoKnNoYXJlZCkpOworfQorCit2b2lkIHJlc2VydmF0aW9uX3No YXJlZF9kZXN0cm95KHN0cnVjdCByZXNlcnZhdGlvbl9zaGFyZWQgKnNoYXJlZCk7CisKIC8qKgog ICogc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCAtIGEgcmVzZXJ2YXRpb24gb2JqZWN0IG1hbmFn ZXMgZmVuY2VzIGZvciBhIGJ1ZmZlcgogICogQGxvY2s6IHVwZGF0ZSBzaWRlIGxvY2sKICAqIEBz ZXE6IHNlcXVlbmNlIGNvdW50IGZvciBtYW5hZ2luZyBSQ1UgcmVhZC1zaWRlIHN5bmNocm9uaXph dGlvbgotICogQGZlbmNlX2V4Y2w6IHRoZSBleGNsdXNpdmUgZmVuY2UsIGlmIHRoZXJlIGlzIG9u ZSBjdXJyZW50bHkKLSAqIEBmZW5jZTogbGlzdCBvZiBjdXJyZW50IHNoYXJlZCBmZW5jZXMKLSAq IEBzdGFnZWQ6IHN0YWdlZCBjb3B5IG9mIHNoYXJlZCBmZW5jZXMgZm9yIFJDVSB1cGRhdGVzCisg KiBAZXhjbDogdGhlIGV4Y2x1c2l2ZSBmZW5jZSwgaWYgdGhlcmUgaXMgb25lIGN1cnJlbnRseQor ICogQHNoYXJlZDogbGlzdCBvZiBjdXJyZW50IHNoYXJlZCBmZW5jZXMKICAqLwogc3RydWN0IHJl c2VydmF0aW9uX29iamVjdCB7CiAJc3RydWN0IHd3X211dGV4IGxvY2s7CiAJc2VxY291bnRfdCBz ZXE7CiAKLQlzdHJ1Y3QgZG1hX2ZlbmNlIF9fcmN1ICpmZW5jZV9leGNsOwotCXN0cnVjdCByZXNl cnZhdGlvbl9vYmplY3RfbGlzdCBfX3JjdSAqZmVuY2U7Ci0Jc3RydWN0IHJlc2VydmF0aW9uX29i amVjdF9saXN0ICpzdGFnZWQ7CisJc3RydWN0IGRtYV9mZW5jZSBfX3JjdSAqZXhjbDsKKwlzdHJ1 Y3QgcmVzZXJ2YXRpb25fc2hhcmVkIHNoYXJlZDsKIH07CiAKICNkZWZpbmUgcmVzZXJ2YXRpb25f b2JqZWN0X2hlbGQob2JqKSBsb2NrZGVwX2lzX2hlbGQoJihvYmopLT5sb2NrLmJhc2UpCkBAIC05 Myw5ICsxMDYsOCBAQCByZXNlcnZhdGlvbl9vYmplY3RfaW5pdChzdHJ1Y3QgcmVzZXJ2YXRpb25f b2JqZWN0ICpvYmopCiAJd3dfbXV0ZXhfaW5pdCgmb2JqLT5sb2NrLCAmcmVzZXJ2YXRpb25fd3df Y2xhc3MpOwogCiAJX19zZXFjb3VudF9pbml0KCZvYmotPnNlcSwgcmVzZXJ2YXRpb25fc2VxY291 bnRfc3RyaW5nLCAmcmVzZXJ2YXRpb25fc2VxY291bnRfY2xhc3MpOwotCVJDVV9JTklUX1BPSU5U RVIob2JqLT5mZW5jZSwgTlVMTCk7Ci0JUkNVX0lOSVRfUE9JTlRFUihvYmotPmZlbmNlX2V4Y2ws IE5VTEwpOwotCW9iai0+c3RhZ2VkID0gTlVMTDsKKwlSQ1VfSU5JVF9QT0lOVEVSKG9iai0+ZXhj bCwgTlVMTCk7CisJcmVzZXJ2YXRpb25fc2hhcmVkX2luaXQoJm9iai0+c2hhcmVkKTsKIH0KIAog LyoqCkBAIC0xMDUsNDYgKzExNywxOCBAQCByZXNlcnZhdGlvbl9vYmplY3RfaW5pdChzdHJ1Y3Qg cmVzZXJ2YXRpb25fb2JqZWN0ICpvYmopCiBzdGF0aWMgaW5saW5lIHZvaWQKIHJlc2VydmF0aW9u X29iamVjdF9maW5pKHN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgKm9iaikKIHsKLQlpbnQgaTsK LQlzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0X2xpc3QgKmZvYmo7Ci0Jc3RydWN0IGRtYV9mZW5j ZSAqZXhjbDsKLQogCS8qCiAJICogVGhpcyBvYmplY3Qgc2hvdWxkIGJlIGRlYWQgYW5kIGFsbCBy ZWZlcmVuY2VzIG11c3QgaGF2ZQogCSAqIGJlZW4gcmVsZWFzZWQgdG8gaXQsIHNvIG5vIG5lZWQg dG8gYmUgcHJvdGVjdGVkIHdpdGggcmN1LgogCSAqLwotCWV4Y2wgPSByY3VfZGVyZWZlcmVuY2Vf cHJvdGVjdGVkKG9iai0+ZmVuY2VfZXhjbCwgMSk7Ci0JaWYgKGV4Y2wpCi0JCWRtYV9mZW5jZV9w dXQoZXhjbCk7Ci0KLQlmb2JqID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChvYmotPmZlbmNl LCAxKTsKLQlpZiAoZm9iaikgewotCQlmb3IgKGkgPSAwOyBpIDwgZm9iai0+c2hhcmVkX2NvdW50 OyArK2kpCi0JCQlkbWFfZmVuY2VfcHV0KHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZm9iai0+ c2hhcmVkW2ldLCAxKSk7CisJZG1hX2ZlbmNlX3B1dChyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVk KG9iai0+ZXhjbCwgMSkpOwogCi0JCWtmcmVlKGZvYmopOwotCX0KLQlrZnJlZShvYmotPnN0YWdl ZCk7CisJcmVzZXJ2YXRpb25fc2hhcmVkX2Rlc3Ryb3koJm9iai0+c2hhcmVkKTsKIAogCXd3X211 dGV4X2Rlc3Ryb3koJm9iai0+bG9jayk7CiB9CiAKIC8qKgotICogcmVzZXJ2YXRpb25fb2JqZWN0 X2dldF9saXN0IC0gZ2V0IHRoZSByZXNlcnZhdGlvbiBvYmplY3QncwotICogc2hhcmVkIGZlbmNl IGxpc3QsIHdpdGggdXBkYXRlLXNpZGUgbG9jayBoZWxkCi0gKiBAb2JqOiB0aGUgcmVzZXJ2YXRp b24gb2JqZWN0Ci0gKgotICogUmV0dXJucyB0aGUgc2hhcmVkIGZlbmNlIGxpc3QuICBEb2VzIE5P VCB0YWtlIHJlZmVyZW5jZXMgdG8KLSAqIHRoZSBmZW5jZS4gIFRoZSBvYmotPmxvY2sgbXVzdCBi ZSBoZWxkLgotICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3RfbGlz dCAqCi1yZXNlcnZhdGlvbl9vYmplY3RfZ2V0X2xpc3Qoc3RydWN0IHJlc2VydmF0aW9uX29iamVj dCAqb2JqKQotewotCXJldHVybiByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG9iai0+ZmVuY2Us Ci0JCQkJCSByZXNlcnZhdGlvbl9vYmplY3RfaGVsZChvYmopKTsKLX0KLQotLyoqCiAgKiByZXNl cnZhdGlvbl9vYmplY3RfZ2V0X2V4Y2wgLSBnZXQgdGhlIHJlc2VydmF0aW9uIG9iamVjdCdzCiAg KiBleGNsdXNpdmUgZmVuY2UsIHdpdGggdXBkYXRlLXNpZGUgbG9jayBoZWxkCiAgKiBAb2JqOiB0 aGUgcmVzZXJ2YXRpb24gb2JqZWN0CkBAIC0xNTgsNyArMTQyLDcgQEAgcmVzZXJ2YXRpb25fb2Jq ZWN0X2dldF9saXN0KHN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgKm9iaikKIHN0YXRpYyBpbmxp bmUgc3RydWN0IGRtYV9mZW5jZSAqCiByZXNlcnZhdGlvbl9vYmplY3RfZ2V0X2V4Y2woc3RydWN0 IHJlc2VydmF0aW9uX29iamVjdCAqb2JqKQogewotCXJldHVybiByY3VfZGVyZWZlcmVuY2VfcHJv dGVjdGVkKG9iai0+ZmVuY2VfZXhjbCwKKwlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3Rl ZChvYmotPmV4Y2wsCiAJCQkJCSByZXNlcnZhdGlvbl9vYmplY3RfaGVsZChvYmopKTsKIH0KIApA QCAtMTgxLDcgKzE2NSw3IEBAIHJlc2VydmF0aW9uX29iamVjdF9nZXRfZXhjbF9yY3Uoc3RydWN0 IHJlc2VydmF0aW9uX29iamVjdCAqb2JqKQogcmV0cnk6CiAJc2VxID0gcmVhZF9zZXFjb3VudF9i ZWdpbigmb2JqLT5zZXEpOwogCXJjdV9yZWFkX2xvY2soKTsKLQlmZW5jZSA9IHJjdV9kZXJlZmVy ZW5jZShvYmotPmZlbmNlX2V4Y2wpOworCWZlbmNlID0gcmN1X2RlcmVmZXJlbmNlKG9iai0+ZXhj bCk7CiAJaWYgKHJlYWRfc2VxY291bnRfcmV0cnkoJm9iai0+c2VxLCBzZXEpKSB7CiAJCXJjdV9y ZWFkX3VubG9jaygpOwogCQlnb3RvIHJldHJ5OwpAQCAtMTkxLDYgKzE3NSwxMiBAQCByZXNlcnZh dGlvbl9vYmplY3RfZ2V0X2V4Y2xfcmN1KHN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgKm9iaikK IAlyZXR1cm4gZmVuY2U7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbAorcmVzZXJ2YXRpb25fb2Jq ZWN0X2hhc19zaGFyZWQoc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCAqb2JqKQoreworCXJldHVy biBSRUFEX09OQ0Uob2JqLT5zaGFyZWQudG9wKTsKK30KKwogaW50IHJlc2VydmF0aW9uX29iamVj dF9yZXNlcnZlX3NoYXJlZChzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpvYmopOwogdm9pZCBy ZXNlcnZhdGlvbl9vYmplY3RfYWRkX3NoYXJlZF9mZW5jZShzdHJ1Y3QgcmVzZXJ2YXRpb25fb2Jq ZWN0ICpvYmosCiAJCQkJCSBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSk7CkBAIC0yMDUsOSArMTk1 LDY3IEBAIGludCByZXNlcnZhdGlvbl9vYmplY3RfZ2V0X2ZlbmNlc19yY3Uoc3RydWN0IHJlc2Vy dmF0aW9uX29iamVjdCAqb2JqLAogCiBsb25nIHJlc2VydmF0aW9uX29iamVjdF93YWl0X3RpbWVv dXRfcmN1KHN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgKm9iaiwKIAkJCQkJIGJvb2wgd2FpdF9h bGwsIGJvb2wgaW50ciwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgdGltZW91dCk7CisJCQkJCSBsb25n IHRpbWVvdXQpOwogCiBib29sIHJlc2VydmF0aW9uX29iamVjdF90ZXN0X3NpZ25hbGVkX3JjdShz dHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpvYmosCiAJCQkJCSAgYm9vbCB0ZXN0X2FsbCk7CiAK K3N0cnVjdCByZXNlcnZhdGlvbl9zaGFyZWRfaXRlciB7CisJc3RydWN0IGRtYV9mZW5jZSAqZmVu Y2U7CisJc3RydWN0IHJlc2VydmF0aW9uX3NoYXJlZF9sYXllciAqcDsKKwl1OCBzdGFja1sxNl07 Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQKK19fcmVzZXJ2YXRpb25fc2hhcmVkX2l0ZXJfZmls bChzdHJ1Y3QgcmVzZXJ2YXRpb25fc2hhcmVkX2l0ZXIgKml0ZXIsCisJCQkgICAgICAgc3RydWN0 IHJlc2VydmF0aW9uX3NoYXJlZF9sYXllciAqcCkKK3sKKwlpbnQgaDsKKworCWRvIHsKKwkJaW50 IHBvcyA9IGZmcyhwLT5iaXRtYXApIC0gMTsKKworCQloID0gcC0+aGVpZ2h0IC8gaWxvZzIoTlNI QVJFRCk7CisJCWl0ZXItPnN0YWNrW2hdID0gcG9zOworCisJCWl0ZXItPnAgPSBwOworCQlwID0g cC0+c2xvdFtwb3NdOworCX0gd2hpbGUgKGgpOworCisJaXRlci0+ZmVuY2UgPSAodm9pZCAqKXA7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcmVzZXJ2YXRpb25fc2hhcmVkX2l0ZXJfaW5pdChz dHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpvYmosCisJCQkgICAgIHN0cnVjdCByZXNlcnZhdGlv bl9zaGFyZWRfaXRlciAqaXRlcikKK3sKKwlpZiAob2JqLT5zaGFyZWQudG9wKQorCQlfX3Jlc2Vy dmF0aW9uX3NoYXJlZF9pdGVyX2ZpbGwoaXRlciwgb2JqLT5zaGFyZWQudG9wKTsKKwllbHNlCisJ CWl0ZXItPmZlbmNlID0gTlVMTDsKK30KKworI2RlZmluZSBmbnMoeCwgYml0KSAoZmZzKCh4KSAm ICh+KHR5cGVvZih4KSkwIDw8IChiaXQpKSkpCisKK3ZvaWQgX19yZXNlcnZhdGlvbl9zaGFyZWRf aXRlcl9uZXh0KHN0cnVjdCByZXNlcnZhdGlvbl9zaGFyZWRfaXRlciAqaXRlcik7CisKK3N0YXRp YyBpbmxpbmUgdm9pZAorcmVzZXJ2YXRpb25fc2hhcmVkX2l0ZXJfbmV4dChzdHJ1Y3QgcmVzZXJ2 YXRpb25fc2hhcmVkX2l0ZXIgKml0ZXIpCit7CisJaW50IHBvczsKKworCXBvcyA9IGZucyhpdGVy LT5wLT5iaXRtYXAsIGl0ZXItPnN0YWNrWzBdICsgMSk7CisJaWYgKGxpa2VseShwb3MpKSB7CisJ CWl0ZXItPnN0YWNrWzBdID0gLS1wb3M7CisJCWl0ZXItPmZlbmNlID0gaXRlci0+cC0+c2xvdFtw b3NdOworCX0gZWxzZSB7CisJCV9fcmVzZXJ2YXRpb25fc2hhcmVkX2l0ZXJfbmV4dChpdGVyKTsK Kwl9Cit9CisKKyNkZWZpbmUgcmVzZXJ2YXRpb25fb2JqZWN0X2Zvcl9lYWNoX3NoYXJlZChvYmos IF9faSkJCQlcCisJZm9yIChyZXNlcnZhdGlvbl9zaGFyZWRfaXRlcl9pbml0KG9iaiwgJihfX2kp KTsJCQlcCisJICAgICBfX2kuZmVuY2U7CQkJCQkJCVwKKwkgICAgIHJlc2VydmF0aW9uX3NoYXJl ZF9pdGVyX25leHQoJihfX2kpKSkKKwogI2VuZGlmIC8qIF9MSU5VWF9SRVNFUlZBVElPTl9IICov CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kbWEtYnVmL3Jlc2VydmF0aW9u LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZG1hLWJ1Zi9yZXNlcnZhdGlvbi5zaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjE3YmRlYTgzMWVhZgotLS0gL2Rl di9udWxsCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RtYS1idWYvcmVzZXJ2YXRpb24u c2gKQEAgLTAsMCArMSwxMSBAQAorIyEvYmluL3NoCisjIFJ1bnMgQVBJIHRlc3RzIGZvciByZXNl cnZhdGlvbl9vYmplY3QgdXNpbmcgdGVzdC1yZXNlcnZhdGlvbiBrZXJuZWwgbW9kdWxlCisKK2lm IC9zYmluL21vZHByb2JlIC1xIHRlc3QtcmVzZXJ2YXRpb247IHRoZW4KKyAgICAgICAvc2Jpbi9t b2Rwcm9iZSAtcSAtciB0ZXN0LXJlc2VydmF0aW9uCisgICAgICAgZWNobyAiZG1hLWJ1Zi9yZXNl cnZhdGlvbjogb2siCitlbHNlCisgICAgICAgZWNobyAiZG1hLWJ1Zi9yZXNlcnZhdGlvbjogW0ZB SUxdIgorICAgICAgIGV4aXQgMQorZmkKKwotLSAKMi4xMC4yCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVs LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK