From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=fail (p=none dis=none) header.from=gmail.com Received: from [10.157.41.19] (unknown [105.199.60.18]) by passt.top (Postfix) with ESMTP id A67BC5A0265 for ; Fri, 16 Oct 2026 22:45:25 +0200 (CEST) X-FEAS-Client-IP: 10.157.41.19 Received: by Ammars-Air.localdomain (Postfix, from userid 501) id 43E1B1564D2C; Fri, 16 Oct 2026 23:45:13 +0300 (EEST) From: aerosouund To: passt-dev@passt.top Subject: [PATCH v2 0/7] Add vhost-net kernel support to pasta Date: Fri, 16 Oct 2026 23:45:01 +0300 Message-Id: <20261016204501.32901-1-aerosound161@gmail.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Message-ID-Hash: AXEUGS5SEZ3NKTOY57G6YFJTKOSW6QFA X-Message-ID-Hash: AXEUGS5SEZ3NKTOY57G6YFJTKOSW6QFA X-MailFrom: ammaryasser@Ammars-Air.localdomain X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Ammar Yasser , =?UTF-8?q?Eugenio=20P=C3=A9rez?= X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: RnJvbTogQW1tYXIgWWFzc2VyIDxhZXJvc291bmQxNjFAZ21haWwuY29tPg0KDQpUaGlzIHdvcmsg aXMgYmFzZWQgb24gdGhlIG9yaWdpbmFsIHYyIFJGQyBieSBFdWdlbmlvIFBlcmV6Og0KDQpMaW5r Og0KaHR0cHM6Ly9hcmNoaXZlcy5wYXNzdC50b3AvcGFzc3QtZGV2LzIwMjUwNzA5MTc0NzQ4LjM1 MTQ2OTMtMS1lcGVyZXptYUByZWRoYXQuY29tLw0KDQpJdCBpcyB0aGUgZmlyc3QgZmluaXNoZWQg cGF0Y2ggc2VyaWVzIGZvciB2aG9zdC1rZXJuZWwgc3VwcG9ydCBhZnRlciBhDQp0aGlyZCBSRkMg d2FzIHN1Ym1pdHRlZDoNCg0KTGluazoNCmh0dHBzOi8vYXJjaGl2ZXMucGFzc3QudG9wL3Bhc3N0 LWRldi8yMDI2MDgwMjEzMjE1NS44NzA3OTYtMS1hZXJvc291bmQxNjFAZ21haWwuY29tLw0KDQp2 aG9zdC1uZXQgaXMgYSBrZXJuZWwgZGV2aWNlIHRoYXQgYWxsb3dzIHJlYWRpbmcgYW5kIHdyaXRp bmcgcGFja2V0cyB0byBhDQp0YXAgZGV2aWNlIHVzaW5nIHZpcnRxdWV1ZXMgaW5zdGVhZCBvZiBy ZWFkKDIpLCB3cml0ZSgyKSwgYW5kIHRoZWlyDQp2ZWN0b3JlZCBjb3VudGVycGFydHMuIEZyYW1l cyBhcmUgaGFuZGVkIG92ZXIgdGhyb3VnaCBhIHNoYXJlZCBkZXNjcmlwdG9yDQpyaW5nLCBzbyBz ZXZlcmFsIG9mIHRoZW0gY2FuIGJlIHBhc3NlZCB0byB0aGUga2VybmVsIGF0IG9uY2UgcmF0aGVy IHRoYW4NCmlzc3VpbmcgYSBzeXNjYWxsIHBlciBmcmFtZS4NCg0KVGhlIGNoYW5nZXMgcmVsaWFi bHkgeWllbGQgYSByb3VnaGx5IDJ4IHNwZWVkdXAgb24gdGhlIFRYIHBhdGggKGNvbnRhaW5lcg0K dG8gaG9zdCkuDQoNCk51bWJlcnMgd2VyZSBvYnRhaW5lZCB0aHJvdWdoIGlwZXJmMyB3aXRoIHRo ZSBmb2xsb3dpbmcgbWV0aG9kb2xvZ3kgYW5kDQpyZXN1bHRzOg0KDQpQYXN0YSBjb21tYW5kOg0K Li9wYXN0YSAtZiAtLXJ1bmFzIDA6MCAtLW1hcC1ndWVzdC1hZGRyIDE5Mi4xNjguMC41DQotLXZo b3N0LWtlcm5lbCBvbiAtLWNvbmZpZy1uZXQgMjcyOTc4NQ0KDQpIb3N0Og0KaXBlcmYzIC1zMUoN Cg0KQ29udGFpbmVyOg0KaXBlcmYzIC1jIDE5Mi4xNjguMC41IC10IDEwIC1QNCAtbCAxTSAtdyAz Mk0gLWkxDQoNCldpdGggLS12aG9zdC1rZXJuZWwgb246DQoNCltTVU1dICAgMC4wMC0xMC4wMCAg c2VjICAxLjM2IEdCeXRlcyAgMS4xNyBHYml0cy9zZWMgIDM2NDMgc2VuZGVyDQpbU1VNXSAgIDAu MDAtMTAuMDAgIHNlYyAgMS4xNiBHQnl0ZXMgICA5OTkgTWJpdHMvc2VjICAgICAgICByZWNlaXZl cg0KDQpXaXRoIC0tdmhvc3Qta2VybmVsIG9mZjoNCg0KW1NVTV0gICAwLjAwLTEwLjAwICBzZWMg ICA3MDAgTUJ5dGVzICAgNTg3IE1iaXRzL3NlYyAgMzU1NiBzZW5kZXINCltTVU1dICAgMC4wMC0x MC4xMCAgc2VjICAgNDk1IE1CeXRlcyAgIDQxMSBNYml0cy9zZWMgICAgICAgIHJlY2VpdmVyDQoN CnYyOg0KLSByZW1vdmVkIGFsbCB1c2Ugb2YgZXBvbGxfY3RsIGluIHZob3N0X3NldHVwX2V2ZW50 ZmRzIGluIGZhdm9yIG9mIGVwb2xsX2FkZA0KLSBwcmV2ZW50IGFsbCBmdW5jdGlvbnMgdGhhdCBy ZWdpc3RlciBtZW1vcnkgcmVnaW9ucyBpbnRvIHRoZSB2aG9zdF9tZW1vcnkNCiAgb2JqZWN0IGZy b20gb3ZlcmZsb3dpbmcNCi0gcmVtb3ZlIHRoZSB1bmlvbnMgd2l0aCBmbGV4aWJsZSBhcnJheSBt ZW1iZXJzIGluIHZyaW5nX2F2YWlsX3Bhc3RhIGFuZA0KICB2cmluZ191c2VkX3Bhc3RhIGluIGZh dm9yIG9mIGhhcmRjb2RpbmcgdGhlIHJpbmcgYXJyYXkgdG8gaGF2ZSBWSE9TVF9OREVTQ1MNCiAg ZW50cmllcyB0byBhdm9pZCBoYXZpbmcgdG8gaWdub3JlIFdwZWRhbnRpYw0KLSByZW1vdmUgdGhl ICYmIG9wZXJhdG9yIHdpdGggVENQX0NVUlJfSURYIHdoZW4gY29tcHV0aW5nIG5vX2NzdW0NCi0g bWFrZSBkZXNjX2lkIGluIHR4X3JlYXAgYSB1aW50MzJfdA0KLSBkb24ndCBtYWtlIHZob3N0LWtl cm5lbCBhIHJlcXVpcmVkIGFyZ3VtZW50DQoNCkFtbWFyIFlhc3NlciAoNyk6DQogIHRhcDogTW92 ZSB0aGUgdGFwX2hkciBmaWxlIHRvIGEgc2VwYXJhdGUgZmlsZQ0KICBjb25mOiBBZGQgY29udGV4 dCBmaWVsZHMsIGVwb2xsIHR5cGVzIGFuZCAtLXZob3N0LWtlcm5lbCBmbGFnIHRvIHBhc3RhDQog IHZpcnRpbzogQWRkIHRoZSBwYXN0YSB2aG9zdC1uZXQgaW50ZXJmYWNlIGFuZCBpbXBsZW1lbnRh dGlvbg0KICB0YXA6IEltcGxlbWVudCB0aGUgcGFzdGEgdmhvc3QtbmV0IGZyb20tZ3Vlc3QgcGF0 aA0KICB0YXAsIHRjcCwgdWRwOiBQcmVwYXJlIHRoZSB0by1ndWVzdCBwYXRoIGZvciB2aG9zdC1u ZXQNCiAgdGFwOiBJbXBsZW1lbnQgdGhlIHBhc3RhIHZob3N0LW5ldCB0by1ndWVzdCBwYXRoDQog IHRhcC90Y3A6IFJlcGxhY2UgdGNwX3BheWxvYWRfdXNlZCB3aXRoIGEgcmluZyBidWZmZXIgc3R5 bGUgaW5kZXgNCg0KIE1ha2VmaWxlICAgICB8ICAgMiArLQ0KIGNvbmYuYyAgICAgICB8ICAxOSAr KysNCiBlcG9sbF90eXBlLmggfCAgIDQgKw0KIHBhc3N0LmMgICAgICB8ICAgOSArKw0KIHBhc3N0 LmggICAgICB8ICA3OSArKysrKysrKysrLQ0KIHRhcC5jICAgICAgICB8IDM2OCArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0NCiB0YXAuaCAgICAgICAg fCAgNDcgKystLS0tLQ0KIHRhcF9oZHIuaCAgICB8ICAyMyArKysrDQogdGNwX2J1Zi5jICAgIHwg MTQ5ICsrKysrKysrKysrKysrKystLS0tLQ0KIHRjcF9idWYuaCAgICB8ICAgNCArDQogdWRwLmMg ICAgICAgIHwgIDQ3ICsrKysrLS0NCiB1ZHAuaCAgICAgICAgfCAgIDMgKw0KIHV0aWwuYyAgICAg ICB8ICAxOCArKysNCiB1dGlsLmggICAgICAgfCAgIDIgKw0KIHZob3N0LmMgICAgICB8IDI5NSAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KIHZob3N0LmggICAgICB8 ICA5MSArKysrKysrKysrKysrDQogMTYgZmlsZXMgY2hhbmdlZCwgMTAzNiBpbnNlcnRpb25zKCsp LCAxMjQgZGVsZXRpb25zKC0pDQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRhcF9oZHIuaA0KIGNyZWF0 ZSBtb2RlIDEwMDY0NCB2aG9zdC5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IHZob3N0LmgNCg0KLS0N CjIuMzkuNSAoQXBwbGUgR2l0LTE1NCkNCg0KRnJvbSAzYjY0YjZhZDAyOWMxYjZkZGU2YThkZTM2 ZmMwYTAzNTE4NDY3M2ZlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJvbTogQW1tYXIgWWFz c2VyIDxhZXJvc291bmQxNjFAZ21haWwuY29tPg0KRGF0ZTogU3VuLCAyIEF1ZyAyMDI2IDEyOjQz OjEzICswMDAwDQpTdWJqZWN0OiBbUEFUQ0ggdjIgMS83XSB0YXA6IE1vdmUgdGhlIHRhcF9oZHIg ZmlsZSB0byBhIHNlcGFyYXRlIGZpbGUNClRvOiBwYXNzdC1kZXZAcGFzc3QudG9wDQpDYzogPT9V VEYtOD9xP0V1Z2VuaW89MjBQPUMzPUE5cmV6Pz0gPGVwZXJlem1hQHJlZGhhdC5jb20+DQoNCkl0 IHdhcyBkZWZpbmVkIGluIHRhcC5oLCBwdXQgaXQgb24gaXRzIG93biBzbyB0aGF0IGZ1dHVyZSBj YWxsZXJzIHdvbid0DQpuZWVkIHRvIGRlcGVuZCBvbiBhbGwgZGVmaW5pdGlvbnMgaW4gdGFwLmgu DQpBbHNvIHR1cm4gaXQgaW50byBhIHVuaW9uIG9mIGEgdm5ldF9sZW4gYW5kIHZpcnRpb19uZXRf bXJnX3J4YnVmDQpiZWNhdXNlIGZvciB2aG9zdCBhY2NlbGVyYXRpb24gdGhlIGZyYW1lcyB3aWxs IGhhdmUgdGhpcyB2aXJ0aW8gbmV0DQpoZWFkZXIgcHJlcGVuZGVkIHRvIHRoZW0uDQoNClNpZ25l ZC1vZmYtYnk6IEFtbWFyIFlhc3NlciA8YWVyb3NvdW5kMTYxQGdtYWlsLmNvbT4NCi0tLQ0KIHRh cC5oICAgICB8ICA5ICstLS0tLS0tLQ0KIHRhcF9oZHIuaCB8IDIzICsrKysrKysrKysrKysrKysr KysrKysrDQogMiBmaWxlcyBjaGFuZ2VkLCAyNCBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygt KQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCB0YXBfaGRyLmgNCg0KZGlmZiAtLWdpdCBhL3RhcC5oIGIv dGFwLmgNCmluZGV4IGIzMzU5MzMuLjE2MjU5NzUgMTAwNjQ0DQotLS0gYS90YXAuaA0KKysrIGIv dGFwLmgNCkBAIC0xMCw2ICsxMCw3IEBADQogI2luY2x1ZGUgPHN0ZGludC5oPg0KDQogI2luY2x1 ZGUgInBhc3N0LmgiDQorI2luY2x1ZGUgInRhcF9oZHIuaCINCg0KIC8qKiBMMl9NQVhfTEVOX1BB U1RBIC0gTWF4aW11bSBmcmFtZSBsZW5ndGggZm9yIHBhc3RhIG1vZGUgKHdpdGggTDIgaGVhZGVy KQ0KICAqDQpAQCAtMzgsMTQgKzM5LDYgQEANCg0KIHN0cnVjdCB1ZHBoZHI7DQoNCi0vKioNCi0g KiBzdHJ1Y3QgdGFwX2hkciAtIHRhcCBiYWNrZW5kIHNwZWNpZmljIGhlYWRlcnMNCi0gKiBAdm5l dF9sZW46CUZyYW1lIGxlbmd0aCAoZm9yIHFlbXUgc29ja2V0IHRyYW5zcG9ydCkNCi0gKi8NCi1z dHJ1Y3QgdGFwX2hkciB7DQotCXVpbnQzMl90IHZuZXRfbGVuOw0KLX0gX19hdHRyaWJ1dGVfXygo cGFja2VkKSk7DQotDQogLyoqDQogICogdGFwX2hkcl9pb3YoKSAtIHN0cnVjdCBpb3ZlYyBmb3Ig YSB0YXAgaGVhZGVyDQogICogQGM6CQlFeGVjdXRpb24gY29udGV4dA0KZGlmZiAtLWdpdCBhL3Rh cF9oZHIuaCBiL3RhcF9oZHIuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAu LjQxNTZmNDQNCi0tLSAvZGV2L251bGwNCisrKyBiL3RhcF9oZHIuaA0KQEAgLTAsMCArMSwyMyBA QA0KKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyDQorICogQ29w eXJpZ2h0IChjKSAyMDIxIFJlZCBIYXQgR21iSA0KKyAqIEF1dGhvcjogRGF2aWQgR2lic29uIDxk YXZpZEBnaWJzb24uZHJvcGJlYXIuaWQuYXU+DQorICovDQorDQorI2lmbmRlZiBUQVBfSERSX0gN CisjZGVmaW5lIFRBUF9IRFJfSA0KKw0KKyNpbmNsdWRlIDxzdGRpbnQuaD4NCisjaW5jbHVkZSA8 bGludXgvdmlydGlvX25ldC5oPg0KKw0KKy8qKg0KKyAqIHN0cnVjdCB0YXBfaGRyIC0gdGFwIGJh Y2tlbmQgc3BlY2lmaWMgaGVhZGVycw0KKyAqIEB2bmV0X2xlbjoJRnJhbWUgbGVuZ3RoIChmb3Ig cWVtdSBzb2NrZXQgdHJhbnNwb3J0KQ0KKyAqLw0KK3N0cnVjdCB0YXBfaGRyIHsNCisJdW5pb24g ew0KKwkJdWludDMyX3Qgdm5ldF9sZW47DQorCQlzdHJ1Y3QgdmlydGlvX25ldF9oZHJfbXJnX3J4 YnVmIGhkcjsNCisJfTsNCit9Ow0KKw0KKyNlbmRpZiAvKiBUQVBfSERSX0ggKi8NCi0tDQoyLjM5 LjUgKEFwcGxlIEdpdC0xNTQpDQoNCg0KRnJvbSA0YTQ4NTA5NzM0YzU3MjA2MmExM2U5NTZlNTk0 M2Y2YWU2NzgxODAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJvbTogQW1tYXIgWWFzc2Vy IDxhZXJvc291bmQxNjFAZ21haWwuY29tPg0KRGF0ZTogVGh1LCAzIFNlcCAyMDI2IDIwOjU3OjU3 ICswMDAwDQpTdWJqZWN0OiBbUEFUQ0ggdjIgMi83XSBjb25mOiBBZGQgY29udGV4dCBmaWVsZHMs IGVwb2xsIHR5cGVzIGFuZA0KIC0tdmhvc3Qta2VybmVsIGZsYWcgdG8gcGFzdGENCk1JTUUtVmVy c2lvbjogMS4wDQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgNCkNvbnRl bnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQNClRvOiBwYXNzdC1kZXZAcGFzc3QudG9wDQpDYzog PT9VVEYtOD9xP0V1Z2VuaW89MjBQPUMzPUE5cmV6Pz0gPGVwZXJlem1hQHJlZGhhdC5jb20+DQoN Ci0tdmhvc3Qta2VybmVsIGNvbnRyb2xzIHdoZXRoZXIgdG8gdXNlIHZob3N0LW5ldCBhY2NlbGVy YXRpb24gZm9yIHBhc3RhLg0KSXQgdGFrZXMgb25lIG9mIHRocmVlIG1vZGVzOiAib24iIHJlcXVp cmVzIGFjY2VsZXJhdGlvbiBhbmQgZmFpbHMgaWYgaXQNCmlzbid0IGF2YWlsYWJsZSwgIm9mZiIg bmV2ZXIgdXNlcyBpdCwgYW5kICJhdXRvIiB1c2VzIGl0IGlmIGl0J3MNCmF2YWlsYWJsZSBhbmQg ZmFsbHMgYmFjayB0byBwbGFpbiB0YXAgb3BlcmF0aW9uIG90aGVyd2lzZS4gImF1dG8iIGlzIHRo ZQ0KZGVmYXVsdCwgc28gYW4gdW5tb2RpZmllZCBpbnZvY2F0aW9uIHBpY2tzIHVwIGFjY2VsZXJh dGlvbiB3aGVyZXZlciB0aGUNCmtlcm5lbCBvZmZlcnMgaXQsIGFuZCBiZWhhdmVzIGFzIGJlZm9y ZSB3aGVyZSBpdCBkb2Vzbid0Lg0KDQpFUE9MTF9UWVBFX1ZIT1NUX0NBTEwgbWVhbnMgdGhlIGtl cm5lbCB3YW50cyB0byBub3RpZnkgdXMgYWJvdXQgZGF0YSBpdA0KaGFzIHdyaXR0ZW4uIEVQT0xM X1RZUEVfVkhPU1RfRVJST1IgbWVhbnMgdGhlIGtlcm5lbCBlbmNvdW50ZXJlZCBhbg0KaW50ZXJu YWwgZXJyb3Igb24gdmhvc3QgYW5kIHdhbnRzIHRvIHRlbGwgdXMgc29tZXRoaW5nIHdlbnQgd3Jv bmcuDQoNCkNvbGxlY3QgdGhlIHZob3N0IHN0YXRlIGluIGEgc2luZ2xlIHN0cnVjdCB2aG9zdF9j dHggd2l0aCB0aGUgZm9sbG93aW5nDQpmaWVsZHM6DQoNCiAgLSBtb2RlOiAgICAgd2hpY2ggb2Yg dGhlIHRocmVlIG1vZGVzIGFib3ZlIHdhcyByZXF1ZXN0ZWQNCiAgLSBmZDogICAgICAgZmlsZSBk ZXNjcmlwdG9yIGZvciAvZGV2L3Zob3N0LW5ldCwgd2hpY2ggZG91YmxlcyBhcyBvdXINCiAgICAg ICAgICAgICAgaW5kaWNhdGlvbiB0aGF0IHNldHVwIHN1Y2NlZWRlZA0KICAtIGZlYXR1cmVzOiB2 aXJ0aW8gZmVhdHVyZSBiaXRzIG5lZ290aWF0ZWQgd2l0aCB2aG9zdC1uZXQNCiAgLSB2cVtdOiAg ICAga2ljaywgY2FsbCBhbmQgZXJyIGV2ZW50ZmRzIGZvciBib3RoIHF1ZXVlcw0KDQpNb2RpZnkg dGFwX2hkcl9pb3YgdG8gY3JlYXRlIGFuIGlvdiB3aXRoIHRoZSBzaXplIG9mIGENCnZpcnRpb19u ZXRfbXJnX3J4YnVmIGlmIHZob3N0IGluaXRpYWxpemF0aW9uIGhhcyBiZWVuIHN1Y2Nlc3NmdWwg KHdlIGFyZQ0KaW4gbW9kZSAnb24nIG9yICdhdXRvJyBhbmQgd2UgZGlkbid0IG5lZWQgdGhlIHRh cCBmYWxsYmFjaykNCg0KTW92ZSB0aGUgTDJfTUFYX0xFTl9YWCBjb25zdGFudHMgZnJvbSB0YXAu aCB0byBwYXNzdC5oIHRvIGF2b2lkIHRoZQ0KY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuIGJv dGggZmlsZXMuIFZIT1NUX0RFU0NfQllURVMgaXMgZGVmaW5lZCBhcw0KdGhlIG1heGltdW0gbDIg ZnJhbWUgc2l6ZSArIHRoZSBzaXplIG9mIHRoZSB2aXJ0aW8gbmV0IGhlYWRlciwgaWYgdGhlDQps ZW5ndGggY29uc3RhbnQgcmVtYWlucyBpbiB0YXAuaCBwYXNzdC5oIHdvdWxkIG5lZWQgdG8gaW5j bHVkZSBpdCwgYnV0DQp0YXAuaCBuZWVkcyB0byBpbmNsdWRlIHBhc3N0LmggdG8gZ2V0IHRoZSBk ZWZpbml0aW9uIG9mIGBzdHJ1Y3QgY3R4YC4NCk1vdmluZyB0aGUgbGVuZ3RoIGNvbnN0YW50cyB0 byBwYXNzdC5oIG1ha2VzIGl0IGZyZWUgb2YgZGVwZW5kZW5jeSBvbg0KdGFwLmgNCg0KU2lnbmVk LW9mZi1ieTogRXVnZW5pbyBQw6lyZXogPGVwZXJlem1hQHJlZGhhdC5jb20+DQpTaWduZWQtb2Zm LWJ5OiBBbW1hciBZYXNzZXIgPGFlcm9zb3VuZDE2MUBnbWFpbC5jb20+DQotLS0NCiBjb25mLmMg ICAgICAgfCAxOSArKysrKysrKysrKysrDQogZXBvbGxfdHlwZS5oIHwgIDQgKysrDQogcGFzc3Qu YyAgICAgIHwgIDMgKysNCiBwYXNzdC5oICAgICAgfCA3OSArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tDQogdGFwLmggICAgICAgIHwgMzYgKysrKysr LS0tLS0tLS0tLS0tLS0tLS0tDQogNSBmaWxlcyBjaGFuZ2VkLCAxMTIgaW5zZXJ0aW9ucygrKSwg MjkgZGVsZXRpb25zKC0pDQoNCmRpZmYgLS1naXQgYS9jb25mLmMgYi9jb25mLmMNCmluZGV4IDE0 OWE0YzcuLmZlNTc4ZmMgMTAwNjQ0DQotLS0gYS9jb25mLmMNCisrKyBiL2NvbmYuYw0KQEAgLTcz Niw2ICs3MzYsOSBAQCBwYXN0YV9vcHRzOg0KIAkJIiAgICBkZWZhdWx0OiBhdXRvXG4iDQogCQki ICAtLWhvc3QtbG8tdG8tbnMtbG8JVHJhbnNsYXRlIGhvc3QtbG9vcGJhY2sgZm9yd2FyZHMgdG9c biINCiAJCSIJCQluYW1lc3BhY2UgbG9vcGJhY2tcbiINCisJCSIgIC0tdmhvc3Qta2VybmVsWz1N T0RFXQlVc2Ugdmhvc3Qta2VybmVsIGFjY2VsZXJhdGlvblxuIg0KKwkJIiAgICBNT0RFIGlzIFwi b25cIiwgXCJvZmZcIiBvciBcImF1dG9cIlxuIg0KKwkJIiAgICBkZWZhdWx0OiBhdXRvXG4iDQog CQkiICAtLXVzZXJucyBOU1BBVEggCVRhcmdldCB1c2VyIG5hbWVzcGFjZSB0byBqb2luXG4iDQog CQkiICAtLW5ldG5zIFBBVEh8TkFNRQlUYXJnZXQgbmV0d29yayBuYW1lc3BhY2UgdG8gam9pblxu Ig0KIAkJIiAgLS1uZXRucy1vbmx5CQlEb24ndCBqb2luIGV4aXN0aW5nIHVzZXIgbmFtZXNwYWNl XG4iDQpAQCAtNzY3LDYgKzc3MCw3IEBAIGVudW0gcGFzc3RfbW9kZXMgY29uZl9tb2RlKGludCBh cmdjLCBjaGFyICphcmd2W10pDQogCWludCB2aG9zdF91c2VyID0gMDsNCiAJY29uc3Qgc3RydWN0 IG9wdGlvbiBvcHR2dVtdID0gew0KIAkJeyJ2aG9zdC11c2VyIiwJbm9fYXJndW1lbnQsCQkmdmhv c3RfdXNlciwJMSB9LA0KKwkJeyJ2aG9zdC1rZXJuZWwiLCBvcHRpb25hbF9hcmd1bWVudCwJTlVM TCwJCTAgfSwNCiAJCXsgMCB9LA0KIAl9Ow0KIAljaGFyIGFyZ3YwW1BBVEhfTUFYXSwgKmJhc2Vh cmcwOw0KQEAgLTEzMTcsNiArMTMyMSw3IEBAIHZvaWQgY29uZihzdHJ1Y3QgY3R4ICpjLCBpbnQg YXJnYywgY2hhciAqKmFyZ3YpDQogCQl7ImNvbmYtcGF0aCIsCXJlcXVpcmVkX2FyZ3VtZW50LAlO VUxMLAkJJ2MnIH0sDQogCQl7ImNocm9vdC1mYWxsYmFjayIsIG5vX2FyZ3VtZW50LAlOVUxMLCAJ CTMyIH0sDQogCQl7Im5vLXBpZG5zIiwJbm9fYXJndW1lbnQsCQlOVUxMLAkJMzMgfSwNCisJCXsi dmhvc3Qta2VybmVsIiwgb3B0aW9uYWxfYXJndW1lbnQsCU5VTEwsCQkzNCB9LA0KIAkJeyAwIH0s DQogCX07DQogCWNvbnN0IGNoYXIgKm9wdHN0cmluZyA9ICIrZHFmZWw6aHM6YzpGOkk6cDpQOm06 YTpuOk06ZzppOm86RDpTOkg6NDYxdDp1OlQ6VToiOw0KQEAgLTE1NjYsNiArMTU3MSwyMCBAQCB2 b2lkIGNvbmYoc3RydWN0IGN0eCAqYywgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAkJCQlkaWUo Ii0tbm8tcGlkbnMgaXMgZm9yIHBhc3RhIG1vZGUgb25seSIpOw0KDQogCQkJYy0+bm9fcGlkbnMg PSB0cnVlOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSAzNDoNCisJCQlpZiAoYy0+bW9kZSAhPSBNT0RF X1BBU1RBKQ0KKwkJCQlkaWUoIi0tdmhvc3Qta2VybmVsIGlzIGZvciBwYXN0YSBtb2RlIG9ubHki KTsNCisNCisJCQlpZiAoIW9wdGFyZyB8fCAhc3RyY21wKG9wdGFyZywgImF1dG8iKSkNCisJCQkJ Yy0+dmhvc3QubW9kZSA9IFZIT1NUX01PREVfQVVUTzsNCisJCQllbHNlIGlmICghc3RyY21wKG9w dGFyZywgIm9uIikpDQorCQkJCWMtPnZob3N0Lm1vZGUgPSBWSE9TVF9NT0RFX09OOw0KKwkJCWVs c2UgaWYgKCFzdHJjbXAob3B0YXJnLCAib2ZmIikpDQorCQkJCWMtPnZob3N0Lm1vZGUgPSBWSE9T VF9NT0RFX09GRjsNCisJCQllbHNlDQorCQkJCWRpZSgiSW52YWxpZCB2aG9zdC1rZXJuZWwgbW9k ZTogJXMiLCBvcHRhcmcpOw0KKw0KIAkJCWJyZWFrOw0KIAkJY2FzZSAnZCc6DQogCQkJYy0+ZGVi dWcgPSAxOw0KZGlmZiAtLWdpdCBhL2Vwb2xsX3R5cGUuaCBiL2Vwb2xsX3R5cGUuaA0KaW5kZXgg MDYxMzI1YS4uZTMyMDZkMSAxMDA2NDQNCi0tLSBhL2Vwb2xsX3R5cGUuaA0KKysrIGIvZXBvbGxf dHlwZS5oDQpAQCAtNTAsNiArNTAsMTAgQEAgZW51bSBlcG9sbF90eXBlIHsNCiAJRVBPTExfVFlQ RV9DT05GX0xJU1RFTiwNCiAJLyogQ29uZmlndXJhdGlvbiBzb2NrZXQgKi8NCiAJRVBPTExfVFlQ RV9DT05GLA0KKwkvKiB2aG9zdC1rZXJuZWwgY2FsbCBzb2NrZXQgKi8NCisJRVBPTExfVFlQRV9W SE9TVF9DQUxMLA0KKwkvKiB2aG9zdC1rZXJuZWwgZXJyb3Igc29ja2V0ICovDQorCUVQT0xMX1RZ UEVfVkhPU1RfRVJST1IsDQoNCiAJRVBPTExfTlVNX1RZUEVTLA0KIH07DQpkaWZmIC0tZ2l0IGEv cGFzc3QuYyBiL3Bhc3N0LmMNCmluZGV4IDUwNTQ1NTEuLjYwMDIyMzEgMTAwNjQ0DQotLS0gYS9w YXNzdC5jDQorKysgYi9wYXNzdC5jDQpAQCAtNjUsNiArNjUsNyBAQCBjaGFyIHBrdF9idWZbUEtU X0JVRl9CWVRFU10JX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoUEFHRV9TSVpFKSkpOw0KIHN0cnVj dCBjdHggcGFzc3RfY3R4ID0gew0KIAkucGlkZmlsZV9mZAkJPSAtMSwNCiAJLmZkX3RhcAkJCT0g LTEsDQorCS52aG9zdAkJCT0geyAuZmQgPSAtMSB9LA0KIAkuZmRfdGFwX2xpc3RlbgkJPSAtMSwN CiAJLmZkX2NvbnRyb2xfbGlzdGVuCT0gLTEsDQogCS5mZF9yZXBhaXJfbGlzdGVuCT0gLTEsDQpA QCAtOTIsNiArOTMsOCBAQCBjaGFyICplcG9sbF90eXBlX3N0cltdID0gew0KIAlbRVBPTExfVFlQ RV9OTF9ORUlHSF0JCT0gIm5ldGxpbmsgbmVpZ2hib3VyIG5vdGlmaWVyIHNvY2tldCIsDQogCVtF UE9MTF9UWVBFX0NPTkZfTElTVEVOXQk9ICJjb25maWd1cmF0aW9uIGxpc3RlbmluZyBzb2NrZXQi LA0KIAlbRVBPTExfVFlQRV9DT05GXQkJPSAiY29uZmlndXJhdGlvbiBzb2NrZXQiLA0KKwlbRVBP TExfVFlQRV9WSE9TVF9DQUxMXQkJPSAidmhvc3Qta2VybmVsIGNhbGwgc29ja2V0IiwNCisJW0VQ T0xMX1RZUEVfVkhPU1RfRVJST1JdCT0gInZob3N0LWtlcm5lbCBlcnJvciBzb2NrZXQiLA0KIH07 DQogc3RhdGljX2Fzc2VydChBUlJBWV9TSVpFKGVwb2xsX3R5cGVfc3RyKSA9PSBFUE9MTF9OVU1f VFlQRVMsDQogCSAgICAgICJlcG9sbF90eXBlX3N0cltdIGRvZXNuJ3QgbWF0Y2ggZW51bSBlcG9s bF90eXBlIik7DQpkaWZmIC0tZ2l0IGEvcGFzc3QuaCBiL3Bhc3N0LmgNCmluZGV4IGFmZDhlOWYu LmJlNjgwMDIgMTAwNjQ0DQotLS0gYS9wYXNzdC5oDQorKysgYi9wYXNzdC5oDQpAQCAtMTMsOCAr MTMsMTEgQEAgdW5pb24gZXBvbGxfcmVmOw0KDQogI2luY2x1ZGUgPHN0ZGJvb2wuaD4NCiAjaW5j bHVkZSA8YXNzZXJ0Lmg+DQorI2luY2x1ZGUgPGxpbWl0cy5oPg0KICNpbmNsdWRlIDxzeXMvZXBv bGwuaD4NCg0KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9fbmV0Lmg+DQorDQogI2luY2x1ZGUgInBp Zi5oIg0KICNpbmNsdWRlICJwYWNrZXQuaCINCiAjaW5jbHVkZSAic2lwaGFzaC5oIg0KQEAgLTM1 LDggKzM4LDQzIEBAIHVuaW9uIGVwb2xsX3JlZjsNCiAjZGVmaW5lIE1BQ19PVVJfTEFBCVwNCiAJ KCh1aW50OF90IFtFVEhfQUxFTl0pezB4OWEsIDB4NTUsIDB4OWEsIDB4NTUsIDB4OWEsIDB4NTV9 KQ0KDQotLyogTGFyZ2UgZW5vdWdoIGZvciB+MTI4IG1heGltdW0gc2l6ZSBmcmFtZXMgKi8NCi0j ZGVmaW5lIFBLVF9CVUZfQllURVMJCSg4VUwgPDwgMjApDQorDQorLyoqIEwyX01BWF9MRU5fUEFT VEEgLSBNYXhpbXVtIGZyYW1lIGxlbmd0aCBmb3IgcGFzdGEgbW9kZSAod2l0aCBMMiBoZWFkZXIp DQorICoNCisgKiBUaGUga2VybmVsIHR1bnRhcCBkZXZpY2UgaW1wb3NlcyBhIG1heGltdW0gZnJh bWUgc2l6ZSBvZiA2NTUzNSBpbmNsdWRpbmcNCisgKiAnaGFyZF9oZWFkZXJfbGVuJyAoMTQgYnl0 ZXMgZm9yIEwyIEV0aGVybmV0IGluIHRoZSBjYXNlIG9mICJ0YXAiIG1vZGUpLg0KKyAqLw0KKyNk ZWZpbmUgTDJfTUFYX0xFTl9QQVNUQQlVU0hSVF9NQVgNCisNCisvKiogTDJfTUFYX0xFTl9QQVNT VCAtIE1heGltdW0gZnJhbWUgbGVuZ3RoIGZvciBwYXNzdCBtb2RlICh3aXRoIEwyIGhlYWRlcikN CisgKg0KKyAqIFRoZSBvbmx5IHN0cnVjdHVyYWwgbGltaXQgdGhlIFFFTVUgc29ja2V0IHByb3Rv Y29sIGltcG9zZXMgb24gZnJhbWVzIGlzDQorICogKDJeMzItMSkgYnl0ZXMsIGJ1dCB0aGF0IHdv dWxkIGJlIGx1ZGljcm91c2x5IGxvbmcgaW4gcHJhY3RpY2UuICBGb3Igbm93LA0KKyAqIGxpbWl0 IGl0IHNvbWV3aGF0IGFyYml0cmFyaWx5IHRvIDY1NTM1IGJ5dGVzLiAgRklYTUU6IFdvcmsgb3V0 IGFuIGFwcHJvcHJpYXRlDQorICogbGltaXQgd2l0aCBtb3JlIHByZWNpc2lvbi4NCisgKi8NCisj ZGVmaW5lIEwyX01BWF9MRU5fUEFTU1QJVVNIUlRfTUFYDQorDQorLyoqIEwyX01BWF9MRU5fVlUg LSBNYXhpbXVtIGZyYW1lIGxlbmd0aCBmb3Igdmhvc3QtdXNlciBtb2RlICh3aXRoIEwyIGhlYWRl cikNCisgKg0KKyAqIHZob3N0LXVzZXIgYWxsb3dzIG11bHRpcGxlIGJ1ZmZlcnMgcGVyIGZyYW1l LCBlYWNoIG9mIHdoaWNoIGNhbiBiZSBxdWl0ZQ0KKyAqIGxhcmdlLCBzbyB0aGUgaW5oZXJlbnQg ZnJhbWUgc2l6ZSBsaW1pdCBpcyByYXRoZXIgbGFyZ2UuICBNdWNoIGxhcmdlciB0aGFuIGlzDQor ICogYWN0dWFsbHkgdXNlZnVsIGZvciBJUC4gIEZvciBub3cgbGltaXQgYXJiaXRyYXJpbHkgdG8g NjU1MzUgYnl0ZXMuIEZJWE1FOg0KKyAqIFdvcmsgb3V0IGFuIGFwcHJvcHJpYXRlIGxpbWl0IHdp dGggbW9yZSBwcmVjaXNpb24uDQorICovDQorI2RlZmluZSBMMl9NQVhfTEVOX1ZVCQlVU0hSVF9N QVgNCisNCisvKiBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gZWFjaCB2aG9zdC1uZXQgdmlydHF1 ZXVlICovDQorI2RlZmluZSBWSE9TVF9OREVTQ1MJCTEyOA0KKw0KKy8qIEJ5dGVzIG9mIHBrdF9i dWYgYmFja2luZyBvbmUgZnJvbS1ndWVzdCBkZXNjcmlwdG9yOiBhIG1heGltdW0gc2l6ZSBmcmFt ZQ0KKyAqIHBsdXMgdGhlIHZpcnRpby1uZXQgaGVhZGVyIHRoZSBrZXJuZWwgd3JpdGVzIGluIGZy b250IG9mIGl0DQorICovDQorI2RlZmluZSBWSE9TVF9ERVNDX0JZVEVTCShMMl9NQVhfTEVOX1BB U1RBICsJCQlcDQorCQkJCSBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfaGRyX21yZ19yeGJ1Zikp DQorDQorLyogT25lIG1heGltdW0gc2l6ZSBmcmFtZSBwZXIgdmhvc3QtbmV0IGRlc2NyaXB0b3Ig Ki8NCisjZGVmaW5lIFBLVF9CVUZfQllURVMJCShWSE9TVF9OREVTQ1MgKiBWSE9TVF9ERVNDX0JZ VEVTKQ0KDQogZXh0ZXJuIGNoYXIgcGt0X2J1ZgkJW1BLVF9CVUZfQllURVNdOw0KDQpAQCAtMTU2 LDYgKzE5NCw0MCBAQCBzdHJ1Y3QgaXA2X2N0eCB7DQoNCiAjaW5jbHVkZSA8bmV0aW5ldC9pZl9l dGhlci5oPg0KDQorLyoqDQorICogZW51bSB2aG9zdF9tb2RlIC0gV2hldGhlciB0byB1c2Ugdmhv c3Qta2VybmVsIGFjY2VsZXJhdGlvbg0KKyAqIEBWSE9TVF9NT0RFX0FVVE86CVVzZSBpdCBpZiBp dCdzIGF2YWlsYWJsZSwgZmFsbCBiYWNrIHRvIHBsYWluIHRhcCBpZiBub3QNCisgKiBAVkhPU1Rf TU9ERV9PTjoJUmVxdWlyZSBpdCwgZmFpbCBpZiBpdCdzIG5vdCBhdmFpbGFibGUNCisgKiBAVkhP U1RfTU9ERV9PRkY6CU5ldmVyIHVzZSBpdA0KKyAqLw0KK2VudW0gdmhvc3RfbW9kZSB7DQorCVZI T1NUX01PREVfQVVUTyA9IDAsDQorCVZIT1NUX01PREVfT04sDQorCVZIT1NUX01PREVfT0ZGLA0K K307DQorDQorLyoqDQorICogc3RydWN0IHZob3N0X2N0eCAtIEV4ZWN1dGlvbiBjb250ZXh0IGZv ciB2aG9zdC1rZXJuZWwgYWNjZWxlcmF0aW9uDQorICogQG1vZGU6CVdoZXRoZXIgdG8gdXNlIGFj Y2VsZXJhdGlvbiBhdCBhbGwsIHNlZSBlbnVtIHZob3N0X21vZGUNCisgKiBAZmQ6CQlGaWxlIGRl c2NyaXB0b3IgZm9yIC9kZXYvdmhvc3QtbmV0LCAtMSBpZiBub3Qgc2V0IHVwDQorICogQGZlYXR1 cmVzOgl2aXJ0aW8gZmVhdHVyZSBiaXRzIG5lZ290aWF0ZWQgd2l0aCB2aG9zdC1uZXQNCisgKiBA dnE6CQlQZXItdmlydHF1ZXVlIGV2ZW50ZmRzIChbMF0gaXMgZnJvbS1ndWVzdCwgWzFdIGlzIHRv LWd1ZXN0KQ0KKyAqIEB2cS5raWNrX2ZkOglXcml0dGVuIGJ5IHVzLCB0byB0ZWxsIHRoZSBrZXJu ZWwgd2UgcXVldWVkIHNvbWV0aGluZw0KKyAqIEB2cS5jYWxsX2ZkOglXcml0dGVuIGJ5IHRoZSBr ZXJuZWwsIHRvIHRlbGwgdXMgaXQgcXVldWVkIHNvbWV0aGluZw0KKyAqIEB2cS5lcnJfZmQ6CVdy aXR0ZW4gYnkgdGhlIGtlcm5lbCBvbiBhbiBpbnRlcm5hbCB2aG9zdCBlcnJvcg0KKyAqLw0KK3N0 cnVjdCB2aG9zdF9jdHggew0KKwllbnVtIHZob3N0X21vZGUgbW9kZTsNCisJaW50IGZkOw0KKwl1 aW50NjRfdCBmZWF0dXJlczsNCisNCisJc3RydWN0IHsNCisJCWludCBraWNrX2ZkOw0KKwkJaW50 IGNhbGxfZmQ7DQorCQlpbnQgZXJyX2ZkOw0KKwl9IHZxWzJdOw0KK307DQorDQogLyoqDQogICog c3RydWN0IGN0eCAtIEV4ZWN1dGlvbiBjb250ZXh0DQogICogQG1vZGU6CQlPcGVyYXRpb24gbW9k ZSwgcWVtdS9VTklYIGRvbWFpbiBzb2NrZXQgb3IgbmFtZXNwYWNlL3RhcA0KQEAgLTE4NSw2ICsy NTcsNyBAQCBzdHJ1Y3QgaXA2X2N0eCB7DQogICogQG91cl90YXBfbWFjOglQYXN0YS9wYXNzdCdz IE1BQyBvbiB0aGUgdGFwIGxpbmsNCiAgKiBAZ3Vlc3RfbWFjOgkJTUFDIGFkZHJlc3Mgb2YgZ3Vl c3Qgb3IgbmFtZXNwYWNlLCBzZWVuIG9yIGNvbmZpZ3VyZWQNCiAgKiBAaGFzaF9zZWNyZXQ6CTEy OC1iaXQgc2VjcmV0IGZvciBzaXBoYXNoIGZ1bmN0aW9ucw0KKyAqIEB2aG9zdDoJCXZob3N0LWtl cm5lbCBhY2NlbGVyYXRpb24gY29udGV4dCwgcGFzdGEgbW9kZSBvbmx5DQogICogQGlmaTQ6CQlU ZW1wbGF0ZSBpbnRlcmZhY2UgZm9yIElQdjQsIC0xOiBub25lLCAwOiBJUHY0IGRpc2FibGVkDQog ICogQGlwNDoJCUlQdjQgY29uZmlndXJhdGlvbg0KICAqIEBkbnNfc2VhcmNoOgkJRE5TIHNlYXJj aCBsaXN0DQpAQCAtMjY1LDYgKzMzOCw4IEBAIHN0cnVjdCBjdHggew0KDQogCXVpbnQ2NF90IGhh c2hfc2VjcmV0WzJdOw0KDQorCXN0cnVjdCB2aG9zdF9jdHggdmhvc3Q7DQorDQogCWludCBpZmk0 Ow0KIAlzdHJ1Y3QgaXA0X2N0eCBpcDQ7DQoNCmRpZmYgLS1naXQgYS90YXAuaCBiL3RhcC5oDQpp bmRleCAxNjI1OTc1Li5mOGMzMGUyIDEwMDY0NA0KLS0tIGEvdGFwLmgNCisrKyBiL3RhcC5oDQpA QCAtMTIsMzEgKzEyLDYgQEANCiAjaW5jbHVkZSAicGFzc3QuaCINCiAjaW5jbHVkZSAidGFwX2hk ci5oIg0KDQotLyoqIEwyX01BWF9MRU5fUEFTVEEgLSBNYXhpbXVtIGZyYW1lIGxlbmd0aCBmb3Ig cGFzdGEgbW9kZSAod2l0aCBMMiBoZWFkZXIpDQotICoNCi0gKiBUaGUga2VybmVsIHR1bnRhcCBk ZXZpY2UgaW1wb3NlcyBhIG1heGltdW0gZnJhbWUgc2l6ZSBvZiA2NTUzNSBpbmNsdWRpbmcNCi0g KiAnaGFyZF9oZWFkZXJfbGVuJyAoMTQgYnl0ZXMgZm9yIEwyIEV0aGVybmV0IGluIHRoZSBjYXNl IG9mICJ0YXAiIG1vZGUpLg0KLSAqLw0KLSNkZWZpbmUgTDJfTUFYX0xFTl9QQVNUQQlVU0hSVF9N QVgNCi0NCi0vKiogTDJfTUFYX0xFTl9QQVNTVCAtIE1heGltdW0gZnJhbWUgbGVuZ3RoIGZvciBw YXNzdCBtb2RlICh3aXRoIEwyIGhlYWRlcikNCi0gKg0KLSAqIFRoZSBvbmx5IHN0cnVjdHVyYWwg bGltaXQgdGhlIFFFTVUgc29ja2V0IHByb3RvY29sIGltcG9zZXMgb24gZnJhbWVzIGlzDQotICog KDJeMzItMSkgYnl0ZXMsIGJ1dCB0aGF0IHdvdWxkIGJlIGx1ZGljcm91c2x5IGxvbmcgaW4gcHJh Y3RpY2UuICBGb3Igbm93LA0KLSAqIGxpbWl0IGl0IHNvbWV3aGF0IGFyYml0cmFyaWx5IHRvIDY1 NTM1IGJ5dGVzLiAgRklYTUU6IFdvcmsgb3V0IGFuIGFwcHJvcHJpYXRlDQotICogbGltaXQgd2l0 aCBtb3JlIHByZWNpc2lvbi4NCi0gKi8NCi0jZGVmaW5lIEwyX01BWF9MRU5fUEFTU1QJVVNIUlRf TUFYDQotDQotLyoqIEwyX01BWF9MRU5fVlUgLSBNYXhpbXVtIGZyYW1lIGxlbmd0aCBmb3Igdmhv c3QtdXNlciBtb2RlICh3aXRoIEwyIGhlYWRlcikNCi0gKg0KLSAqIHZob3N0LXVzZXIgYWxsb3dz IG11bHRpcGxlIGJ1ZmZlcnMgcGVyIGZyYW1lLCBlYWNoIG9mIHdoaWNoIGNhbiBiZSBxdWl0ZQ0K LSAqIGxhcmdlLCBzbyB0aGUgaW5oZXJlbnQgZnJhbWUgc2l6ZSBsaW1pdCBpcyByYXRoZXIgbGFy Z2UuICBNdWNoIGxhcmdlciB0aGFuIGlzDQotICogYWN0dWFsbHkgdXNlZnVsIGZvciBJUC4gIEZv ciBub3cgbGltaXQgYXJiaXRyYXJpbHkgdG8gNjU1MzUgYnl0ZXMuIEZJWE1FOg0KLSAqIFdvcmsg b3V0IGFuIGFwcHJvcHJpYXRlIGxpbWl0IHdpdGggbW9yZSBwcmVjaXNpb24uDQotICovDQotI2Rl ZmluZSBMMl9NQVhfTEVOX1ZVCQlVU0hSVF9NQVgNCi0NCiBzdHJ1Y3QgdWRwaGRyOw0KDQogLyoq DQpAQCAtNTAsMTAgKzI1LDE3IEBAIHN0cnVjdCB1ZHBoZHI7DQogc3RhdGljIGlubGluZSBzdHJ1 Y3QgaW92ZWMgdGFwX2hkcl9pb3YoY29uc3Qgc3RydWN0IGN0eCAqYywNCiAJCQkJICAgICAgIHN0 cnVjdCB0YXBfaGRyICp0aGRyKQ0KIHsNCi0JcmV0dXJuIChzdHJ1Y3QgaW92ZWMpew0KKwlzdHJ1 Y3QgaW92ZWMgcmV0ID0gew0KIAkJLmlvdl9iYXNlID0gdGhkciwNCi0JCS5pb3ZfbGVuID0gYy0+ bW9kZSA9PSBNT0RFX1BBU1NUID8gc2l6ZW9mKCp0aGRyKSA6IDAsDQogCX07DQorDQorCWlmIChj LT52aG9zdC5mZCAhPSAtMSkgew0KKwkJcmV0Lmlvdl9sZW4gPSBzaXplb2Yoc3RydWN0IHZpcnRp b19uZXRfaGRyX21yZ19yeGJ1Zik7DQorCX0gZWxzZSB7DQorCQlyZXQuaW92X2xlbiA9IGMtPm1v ZGUgPT0gTU9ERV9QQVNTVCA/IHNpemVvZih0aGRyLT52bmV0X2xlbikgOiAwOw0KKwl9DQorDQor CXJldHVybiByZXQ7DQogfQ0KDQogLyoqDQotLQ0KMi4zOS41IChBcHBsZSBHaXQtMTU0KQ0KDQoN CkZyb20gY2Q4YjUwZTdmZmFmNzIzMmZhZjAzYjI4YmY2MTY4MmRiOTIzNzgxNCBNb24gU2VwIDE3 IDAwOjAwOjAwIDIwMDENCkZyb206IEFtbWFyIFlhc3NlciA8YWVyb3NvdW5kMTYxQGdtYWlsLmNv bT4NCkRhdGU6IFRodSwgMyBTZXAgMjAyNiAyMjowMTozOSArMDAwMA0KU3ViamVjdDogW1BBVENI IHYyIDMvN10gdmlydGlvOiBBZGQgdGhlIHBhc3RhIHZob3N0LW5ldCBpbnRlcmZhY2UgYW5kDQog aW1wbGVtZW50YXRpb24NCk1JTUUtVmVyc2lvbjogMS4wDQpDb250ZW50LVR5cGU6IHRleHQvcGxh aW47IGNoYXJzZXQ9VVRGLTgNCkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQNClRvOiBw YXNzdC1kZXZAcGFzc3QudG9wDQpDYzogPT9VVEYtOD9xP0V1Z2VuaW89MjBQPUMzPUE5cmV6Pz0g PGVwZXJlem1hQHJlZGhhdC5jb20+DQoNCkFkZCB2aG9zdC5jIGFuZCB2aG9zdC5oIHdoaWNoIGRl ZmluZSB0aGUgYXBpIGFuZCBpbXBsZW1lbnRhdGlvbiBmb3INCnBhc3RhIHZob3N0IGFjY2VsZXJh dGlvbg0KDQotIHZxX3N0YXRlL3Zob3N0X3ZxX3N0YXRlW106IG91ciBvd24gdmlldyBvZiBlYWNo IHZpcnRxdWV1ZSwgd2hpY2ggdGhlDQogIGtlcm5lbCBkb2Vzbid0IHRyYWNrIGZvciB1czogZGVz Y3JpcHRvcnMgcmVhZHkgdG8gaGFuZCBiYWNrLCBob3cgZmFyDQogIHdlJ3ZlIHJlYWQgdGhlIHVz ZWQgcmluZywgYW5kIHRoZSBuZXh0IGRlc2NyaXB0b3IgdG8gYWxsb2NhdGUNCi0gdnJpbmdfZGVz YywgdnJpbmdfYXZhaWxfYWxsLCB2cmluZ191c2VkX2FsbCwgdmhvc3RfbWVtb3J5OiB0aGUgcmlu Z3MNCiAgYW5kIHRoZSByZWdpb24gdGFibGUgc2hhcmVkIHdpdGggdGhlIGtlcm5lbA0KLSB2aG9z dF9zZXR1cF9uZXQ6IG9wZW4gL2Rldi92aG9zdC1uZXQgYW5kIG5lZ290aWF0ZSBWSVJUSU9fRl9W RVJTSU9OXzENCiAgYW5kIFZIT1NUX05FVF9GX1ZJUlRJT19ORVRfSERSLiBGYWlsdXJlIGlzIGZh dGFsIG9ubHkgaWYNCiAgLS12aG9zdC1rZXJuZWwgaXMgc2V0IHRvICdvbicuDQotIHZob3N0X3Nl dHVwX2V2ZW50ZmRzOiBjcmVhdGUsIHJlZ2lzdGVyIGFuZCB3YXRjaCB0aGUgY2FsbCwga2ljayBh bmQNCiAgZXJyb3IgZXZlbnRmZHMgZm9yIG9uZSBxdWV1ZQ0KLSB2aG9zdF9zZXR1cF9tZW1vcnlf dGFibGU6IHJlZ2lzdGVyIHRoZSBidWZmZXJzIHRoZSBrZXJuZWwgbWF5IHRvdWNoLg0KICBwYXN0 YSBoYXMgbm8gZ3Vlc3QsIHNvIGVhY2ggcmVnaW9uIG1hcHMgZ3Vlc3RfcGh5c19hZGRyIG9udG8g dGhlDQogIGlkZW50aWNhbCB1c2Vyc3BhY2VfYWRkciwgbWFraW5nIEdQQSB0cmFuc2xhdGlvbiBh biBpZGVudGl0eSBtYXBwaW5nLg0KICBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlICpfcmVnaXN0ZXJf bWVtb3J5X3JlZ2lvbnMgZnVuY3Rpb25zIGNyZWF0ZWQgcGVyDQogIHByb3RvY29sIGFuZCBmb3Ig Z2VuZXJhbCBwdXJwb3NlIGJ1ZmZlcnMuDQotIHZob3N0X3NldF92cmluZzogcHVibGlzaCBhIHZy aW5nJ3MgYWRkcmVzc2VzLCBiaW5kIHRoZSB0YXAgZmQgYXMgaXRzDQogIGJhY2tlbmQgYW5kIGxh eSBvdXQgaXRzIGRlc2NyaXB0b3JzDQotIHZob3N0X3J4X2Rlc2NyaXB0b3JfaGFuZG9mZiwgdmhv c3Rfa2ljazogaGFuZCBjb25zdW1lZCBkZXNjcmlwdG9ycyBiYWNrDQogIGFuZCBub3RpZnkgdGhl IGtlcm5lbCB1bmxlc3MgaXQgc2F5cyBpdCdzIGFscmVhZHkgcG9sbGluZw0KDQpTaWduZWQtb2Zm LWJ5OiBFdWdlbmlvIFDDqXJleiA8ZXBlcmV6bWFAcmVkaGF0LmNvbT4NClNpZ25lZC1vZmYtYnk6 IEFtbWFyIFlhc3NlciA8YWVyb3NvdW5kMTYxQGdtYWlsLmNvbT4NCi0tLQ0KIE1ha2VmaWxlICB8 ICAgMiArLQ0KIHRjcF9idWYuYyB8ICAyMiArKystDQogdGNwX2J1Zi5oIHwgICA0ICsNCiB1ZHAu YyAgICAgfCAgMjAgKysrKw0KIHVkcC5oICAgICB8ICAgMyArDQogdXRpbC5jICAgIHwgIDE4ICsr KysNCiB1dGlsLmggICAgfCAgIDIgKw0KIHZob3N0LmMgICB8IDI5NSArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCiB2aG9zdC5oICAgfCAgOTEg KysrKysrKysrKysrKysrKysNCiA5IGZpbGVzIGNoYW5nZWQsIDQ1NSBpbnNlcnRpb25zKCspLCAy IGRlbGV0aW9ucygtKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCB2aG9zdC5jDQogY3JlYXRlIG1vZGUg MTAwNjQ0IHZob3N0LmgNCg0KZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUNCmluZGV4 IGY2Yzg3YjEuLjZmMTFlNGIgMTAwNjQ0DQotLS0gYS9NYWtlZmlsZQ0KKysrIGIvTWFrZWZpbGUN CkBAIC0zOCw3ICszOCw3IEBAIFBBU1NUX1NSQ1MgPSBhcmNoLmMgYXJwLmMgYml0bWFwLmMgY2hl Y2tzdW0uYyBjb25mLmMgZGhjcC5jIGRoY3B2Ni5jIFwNCiAJaXNvbGF0aW9uLmMgbGluZXJlYWQu YyBsb2cuYyBtbGQuYyBuZHAuYyBuZXRsaW5rLmMgbWlncmF0ZS5jIHBhY2tldC5jIFwNCiAJcGFy c2UuYyBwYXNzdC5jIHBhc3RhLmMgcGNhcC5jIHBpZi5jIHJlcGFpci5jIHNlcmlhbGlzZS5jIHRh cC5jIHRjcC5jIFwNCiAJdGNwX2J1Zi5jIHRjcF9zcGxpY2UuYyB0Y3BfdnUuYyB1ZHAuYyB1ZHBf Zmxvdy5jIHVkcF92dS5jIHV0aWwuYyBcDQotCXZob3N0X3VzZXIuYyB2aXJ0aW8uYyB2dV9jb21t b24uYw0KKwl2aG9zdC5jIHZob3N0X3VzZXIuYyB2aXJ0aW8uYyB2dV9jb21tb24uYw0KIFBBU1NU X1JFUEFJUl9TUkNTID0gcGFzc3QtcmVwYWlyLmMNCiBQRVNUT19TUkNTID0gcGVzdG8uYyBiaXRt YXAuYyBmd2RfcnVsZS5jIGluYW55LmMgaXAuYyBsaW5lcmVhZC5jIHBhcnNlLmMgXA0KIAlzZXJp YWxpc2UuYw0KZGlmZiAtLWdpdCBhL3RjcF9idWYuYyBiL3RjcF9idWYuYw0KaW5kZXggNzJjNDU0 MS4uZGQ4MDM4NCAxMDA2NDQNCi0tLSBhL3RjcF9idWYuYw0KKysrIGIvdGNwX2J1Zi5jDQpAQCAt MzEsMTIgKzMxLDE0IEBADQogI2luY2x1ZGUgImluYW55LmgiDQogI2luY2x1ZGUgInRjcF9jb25u LmgiDQogI2luY2x1ZGUgInRjcF9pbnRlcm5hbC5oIg0KLSNpbmNsdWRlICJ0Y3BfYnVmLmgiDQor I2luY2x1ZGUgInZob3N0LmgiDQoNCiAjZGVmaW5lIFRDUF9GUkFNRVNfTUVNCQkJMTI4DQogI2Rl ZmluZSBUQ1BfRlJBTUVTCQkJCQkJCSAgIFwNCiAJKGMtPm1vZGUgPT0gTU9ERV9QQVNUQSA/IDEg OiBUQ1BfRlJBTUVTX01FTSkNCg0KKyNkZWZpbmUgVENQX05SRUdJT05TIDUNCisNCiAvKiBTdGF0 aWMgYnVmZmVycyAqLw0KDQogLyogRXRoZXJuZXQgaGVhZGVyIGZvciBJUHY0IGFuZCBJUHY2IGZy YW1lcyAqLw0KQEAgLTc1LDYgKzc3LDI0IEBAIHZvaWQgdGNwX3VwZGF0ZV9sMl9idWYoY29uc3Qg dW5zaWduZWQgY2hhciAqZXRoX2QpDQogCQlldGhfdXBkYXRlX21hYygmdGNwX2V0aF9oZHJbaV0s IGV0aF9kLCBOVUxMKTsNCiB9DQoNCisvKioNCisgKiB0Y3BfcmVnaXN0ZXJfbWVtb3J5X3JlZ2lv bigpIC0gUmVnaXN0ZXIgdGhlIFRDUCBzcGVjaWZpYyBidWZmZXJzIGludG8gYSBtZW1vcnkNCisg KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvIGl0IGNhbiBiZSBzaGFy ZWQgd2l0aCB0aGUga2VybmVsLg0KKyAqIEB2aG9zdF9tZW06IFRoZSBtZW1vcnkgc3RydWN0IHRv IHJlZ2lzdGVyIHJlZ2lvbnMgaW50bw0KKyAqIEBsYXN0X2lkeDogIFRoZSBsYXN0IGluZGV4IGF0 IHdoaWNoIG1lbW9yeSByZWdpb24gaGFzIGJlZW4gcGxhY2VkDQorICovDQordm9pZCB0Y3BfcmVn aXN0ZXJfbWVtb3J5X3JlZ2lvbnModW5pb24gdmhvc3RfbWVtb3J5X3UgKnZob3N0X21lbSwgc2l6 ZV90ICpsYXN0X2lkeCkgew0KKwlpZiAoKCpsYXN0X2lkeCArIFRDUF9OUkVHSU9OUykgPiBOX1ZI T1NUX1JFR0lPTlMpDQorCQlkaWUoInRjcDogbWVtb3J5IHJlZ2lvbiBvdmVyZmxvdy4gbWF4aW11 bSBpcyAlZCwgZ290ICV6dSIsDQorCQkgICAgTl9WSE9TVF9SRUdJT05TLCAqbGFzdF9pZHggKyBU Q1BfTlJFR0lPTlMpOw0KKw0KKyAgIAl2aG9zdF9tZW0tPm1lbS5yZWdpb25zWygqbGFzdF9pZHgp KytdID0gVkhPU1RfTUVNT1JZX1JFR0lPTih0Y3BfcGF5bG9hZF90YXBfaGRyKTsNCisJdmhvc3Rf bWVtLT5tZW0ucmVnaW9uc1soKmxhc3RfaWR4KSsrXSA9IFZIT1NUX01FTU9SWV9SRUdJT04odGNw NF9wYXlsb2FkX2lwKTsNCisJdmhvc3RfbWVtLT5tZW0ucmVnaW9uc1soKmxhc3RfaWR4KSsrXSA9 IFZIT1NUX01FTU9SWV9SRUdJT04odGNwNl9wYXlsb2FkX2lwKTsNCisJdmhvc3RfbWVtLT5tZW0u cmVnaW9uc1soKmxhc3RfaWR4KSsrXSA9IFZIT1NUX01FTU9SWV9SRUdJT04odGNwX3BheWxvYWQp Ow0KKwl2aG9zdF9tZW0tPm1lbS5yZWdpb25zWygqbGFzdF9pZHgpKytdID0gVkhPU1RfTUVNT1JZ X1JFR0lPTih0Y3BfZXRoX2hkcik7DQorfQ0KKw0KIC8qKg0KICAqIHRjcF9zb2NrX2lvdl9pbml0 KCkgLSBJbml0aWFsaXNlIHNjYXR0ZXItZ2F0aGVyIEwyIGJ1ZmZlcnMgZm9yIElQdjQgc29ja2V0 cw0KICAqIEBjOgkJRXhlY3V0aW9uIGNvbnRleHQNCmRpZmYgLS1naXQgYS90Y3BfYnVmLmggYi90 Y3BfYnVmLmgNCmluZGV4IDVkMzFjZWEuLjVlMzQxZWQgMTAwNjQ0DQotLS0gYS90Y3BfYnVmLmgN CisrKyBiL3RjcF9idWYuaA0KQEAgLTYsMTEgKzYsMTUgQEANCiAjaWZuZGVmIFRDUF9CVUZfSA0K ICNkZWZpbmUgVENQX0JVRl9IDQoNCit1bmlvbiB2aG9zdF9tZW1vcnlfdTsNCitzdHJ1Y3QgdGNw X3RhcF9jb25uOw0KKw0KIHZvaWQgdGNwX3NvY2tfaW92X2luaXQoY29uc3Qgc3RydWN0IGN0eCAq Yyk7DQogdm9pZCB0Y3BfcGF5bG9hZF9mbHVzaChjb25zdCBzdHJ1Y3QgY3R4ICpjLCBjb25zdCBz dHJ1Y3QgdGltZXNwZWMgKm5vdyk7DQogaW50IHRjcF9idWZfZGF0YV9mcm9tX3NvY2soY29uc3Qg c3RydWN0IGN0eCAqYywgc3RydWN0IHRjcF90YXBfY29ubiAqY29ubiwNCiAJCQkgICB1aW50MzJf dCBhbHJlYWR5X3NlbnQsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqbm93KTsNCiBpbnQgdGNwX2J1 Zl9zZW5kX2ZsYWcoY29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IHRjcF90YXBfY29ubiAqY29u biwgaW50IGZsYWdzLA0KIAkJICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpub3cpOw0KK3Zv aWQgdGNwX3JlZ2lzdGVyX21lbW9yeV9yZWdpb25zKHVuaW9uIHZob3N0X21lbW9yeV91ICp2aG9z dF9tZW0sIHNpemVfdCAqbGFzdF9pZHgpOw0KDQogI2VuZGlmICAvKlRDUF9CVUZfSCAqLw0KZGlm ZiAtLWdpdCBhL3VkcC5jIGIvdWRwLmMNCmluZGV4IDUwNWU1NTQuLmE0MzU1YTEgMTAwNjQ0DQot LS0gYS91ZHAuYw0KKysrIGIvdWRwLmMNCkBAIC0xMTgsNiArMTE4LDcgQEANCiAjaW5jbHVkZSAi dWRwX2ludGVybmFsLmgiDQogI2luY2x1ZGUgInVkcF92dS5oIg0KICNpbmNsdWRlICJlcG9sbF9j dGwuaCINCisjaW5jbHVkZSAidmhvc3QuaCINCg0KICNkZWZpbmUgVURQX01BWF9GUkFNRVMJCTMy ICAvKiBtYXggIyBvZiBmcmFtZXMgdG8gcmVjZWl2ZSBhdCBvbmNlICovDQoNCkBAIC0xMjgsNiAr MTI5LDggQEANCiAjZGVmaW5lIFVEUF9USU1FT1VUX0RFRkFVTFQJCTMwCS8qIHMgKi8NCiAjZGVm aW5lIFVEUF9USU1FT1VUX1NUUkVBTV9ERUZBVUxUCTEyMAkvKiBzICovDQoNCisjZGVmaW5lIFVE UF9OUkVHSU9OUyA1DQorDQogLyogTWF4aW11bSBVRFAgZGF0YSB0byBiZSByZXR1cm5lZCBpbiBJ Q01QIG1lc3NhZ2VzICovDQogI2RlZmluZSBJQ01QNF9NQVhfRExFTiA4DQogI2RlZmluZSBJQ01Q Nl9NQVhfRExFTiAoSVBWNl9NSU5fTVRVCQkJXA0KQEAgLTQ0OCw2ICs0NTEsMjMgQEAgc3RhdGlj IHZvaWQgdWRwX3NlbmRfdGFwX2ljbXA0KGNvbnN0IHN0cnVjdCBjdHggKmMsDQogCXRhcF9pY21w NF9zZW5kKGMsIHNhZGRyLCBlYWRkciwgJm1zZywgdGFwX29tYWMsIG1zZ2xlbik7DQogfQ0KDQor LyoqDQorICogdWRwX3JlZ2lzdGVyX21lbW9yeV9yZWdpb24oKSAtIFJlZ2lzdGVyIHRoZSBVRFAg c3BlY2lmaWMgYnVmZmVycyBpbnRvIGEgbWVtb3J5DQorICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBzbyBpdCBjYW4gYmUgc2hhcmVkIHdpdGggdGhlIGtlcm5lbC4NCisg KiBAdmhvc3RfbWVtOiBUaGUgbWVtb3J5IHN0cnVjdCB0byByZWdpc3RlciByZWdpb25zIGludG8N CisgKiBAbGFzdF9pZHg6ICBUaGUgbGFzdCBpbmRleCBhdCB3aGljaCBtZW1vcnkgcmVnaW9uIGhh cyBiZWVuIHBsYWNlZA0KKyAqLw0KK3ZvaWQgdWRwX3JlZ2lzdGVyX21lbW9yeV9yZWdpb25zKHVu aW9uIHZob3N0X21lbW9yeV91ICp2aG9zdF9tZW0sIHNpemVfdCAqbGFzdF9pZHgpIHsNCisJaWYg KCgqbGFzdF9pZHggKyBVRFBfTlJFR0lPTlMpID4gTl9WSE9TVF9SRUdJT05TKQ0KKwkJZGllKCJ1 ZHA6IG1lbW9yeSByZWdpb24gb3ZlcmZsb3cuIG1heGltdW0gaXMgJWQsIGdvdCAlenUiLA0KKwkJ ICAgIE5fVkhPU1RfUkVHSU9OUywgKmxhc3RfaWR4ICsgVURQX05SRUdJT05TKTsNCisNCisgICAJ dmhvc3RfbWVtLT5tZW0ucmVnaW9uc1soKmxhc3RfaWR4KSsrXSA9IFZIT1NUX01FTU9SWV9SRUdJ T04odWRwX3BheWxvYWQpOw0KKwl2aG9zdF9tZW0tPm1lbS5yZWdpb25zWygqbGFzdF9pZHgpKytd ID0gVkhPU1RfTUVNT1JZX1JFR0lPTih1ZHBfZXRoX2hkcik7DQorCXZob3N0X21lbS0+bWVtLnJl Z2lvbnNbKCpsYXN0X2lkeCkrK10gPSBWSE9TVF9NRU1PUllfUkVHSU9OKHVkcF9pb3ZfcmVjdik7 DQorCXZob3N0X21lbS0+bWVtLnJlZ2lvbnNbKCpsYXN0X2lkeCkrK10gPSBWSE9TVF9NRU1PUllf UkVHSU9OKHVkcF9taF9yZWN2KTsNCisJdmhvc3RfbWVtLT5tZW0ucmVnaW9uc1soKmxhc3RfaWR4 KSsrXSA9IFZIT1NUX01FTU9SWV9SRUdJT04odWRwX21ldGEpOw0KK30NCg0KIC8qKg0KICAqIHVk cF9zZW5kX3RhcF9pY21wNigpIC0gQ29uc3RydWN0IGFuZCBzZW5kIElDTVB2NiB0byBsb2NhbCBw ZWVyDQpkaWZmIC0tZ2l0IGEvdWRwLmggYi91ZHAuaA0KaW5kZXggYjUwMjgzZS4uZWJmMWE0ZSAx MDA2NDQNCi0tLSBhL3VkcC5oDQorKysgYi91ZHAuaA0KQEAgLTExLDYgKzExLDggQEANCg0KICNp bmNsdWRlICJmd2QuaCINCg0KK3VuaW9uIHZob3N0X21lbW9yeV91Ow0KKw0KIHZvaWQgdWRwX2xp c3Rlbl9zb2NrX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0eCAqYywgdW5pb24gZXBvbGxfcmVmIHJl ZiwNCiAJCQkgICAgIHVpbnQzMl90IGV2ZW50cywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpub3cp Ow0KIHZvaWQgdWRwX3NvY2tfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3R4ICpjLCB1bmlvbiBlcG9s bF9yZWYgcmVmLA0KQEAgLTIxLDYgKzIzLDcgQEAgaW50IHVkcF90YXBfaGFuZGxlcihjb25zdCBz dHJ1Y3QgY3R4ICpjLCB1aW50OF90IHBpZiwNCiAJCSAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMg Km5vdyk7DQogaW50IHVkcF9pbml0KHN0cnVjdCBjdHggKmMpOw0KIHZvaWQgdWRwX3VwZGF0ZV9s Ml9idWYoY29uc3QgdW5zaWduZWQgY2hhciAqZXRoX2QpOw0KK3ZvaWQgdWRwX3JlZ2lzdGVyX21l bW9yeV9yZWdpb25zKHVuaW9uIHZob3N0X21lbW9yeV91ICp2aG9zdF9tZW0sIHNpemVfdCAqbGFz dF9pZHgpOw0KDQogLyoqDQogICogc3RydWN0IHVkcF9jdHggLSBFeGVjdXRpb24gY29udGV4dCBm b3IgVURQDQpkaWZmIC0tZ2l0IGEvdXRpbC5jIGIvdXRpbC5jDQppbmRleCBmZjFmMTlmLi5jYWZl MGVjIDEwMDY0NA0KLS0tIGEvdXRpbC5jDQorKysgYi91dGlsLmMNCkBAIC0zMywxMCArMzMsMTMg QEANCiAjaW5jbHVkZSAibG9nLmgiDQogI2luY2x1ZGUgInBjYXAuaCINCiAjaW5jbHVkZSAic2Vy aWFsaXNlLmgiDQorI2luY2x1ZGUgInZob3N0LmgiDQogI2lmZGVmIEhBU19HRVRSQU5ET00NCiAj aW5jbHVkZSA8c3lzL3JhbmRvbS5oPg0KICNlbmRpZg0KDQorI2RlZmluZSBHRU5FUkFMX05SRUdJ T05TIDINCisNCiAvKiBaZXJvLWZpbGxlZCBidWZmZXIgdG8gcGFkIDgwMi4zIGZyYW1lcywgdXAg dG8gNjAgKEVUSF9aTEVOKSBieXRlcyAqLw0KIHVpbnQ4X3QgZXRoX3BhZFtFVEhfWkxFTl0gPSB7 IDAgfTsNCg0KQEAgLTQ1Myw2ICs0NTYsMjEgQEAgaW50IG9wZW5faW5fbnMoY29uc3Qgc3RydWN0 IGN0eCAqYywgY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzKQ0KIAlyZXR1cm4gYXJnLmZkOw0K IH0NCg0KKy8qKg0KKyAqIGdlbmVyYWxfcmVnaXN0ZXJfbWVtb3J5X3JlZ2lvbigpIC0gUmVnaXN0 ZXIgdGhlIGdlbmVyYWwgKG5vbiBwcm90b2NvbCBzcGVjaWZpYykgYnVmZmVycw0KKyAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50byBhIG1lbW9yeSBzdHJ1Y3Qgc28gaXQg Y2FuIGJlIHNoYXJlZCB3aXRoIHRoZSBrZXJuZWwuDQorICogQHZob3N0X21lbTogVGhlIG1lbW9y eSBzdHJ1Y3QgdG8gcmVnaXN0ZXIgcmVnaW9ucyBpbnRvDQorICogQGxhc3RfaWR4OiAgVGhlIGxh c3QgaW5kZXggYXQgd2hpY2ggbWVtb3J5IHJlZ2lvbiBoYXMgYmVlbiBwbGFjZWQNCisgKi8NCit2 b2lkIGdlbmVyYWxfcmVnaXN0ZXJfbWVtb3J5X3JlZ2lvbnModW5pb24gdmhvc3RfbWVtb3J5X3Ug KnZob3N0X21lbSwgc2l6ZV90ICpsYXN0X2lkeCkgew0KKwlpZiAoKCpsYXN0X2lkeCArIEdFTkVS QUxfTlJFR0lPTlMpID4gTl9WSE9TVF9SRUdJT05TKQ0KKwkJZGllKCJnZW5lcmFsOiBtZW1vcnkg cmVnaW9uIG92ZXJmbG93LiBtYXhpbXVtIGlzICVkLCBnb3QgJXp1IiwNCisJCSAgICBOX1ZIT1NU X1JFR0lPTlMsICpsYXN0X2lkeCArIEdFTkVSQUxfTlJFR0lPTlMpOw0KKw0KKyAgIAl2aG9zdF9t ZW0tPm1lbS5yZWdpb25zWygqbGFzdF9pZHgpKytdID0gVkhPU1RfTUVNT1JZX1JFR0lPTihwa3Rf YnVmKTsNCisJdmhvc3RfbWVtLT5tZW0ucmVnaW9uc1soKmxhc3RfaWR4KSsrXSA9IFZIT1NUX01F TU9SWV9SRUdJT04oZXRoX3BhZCk7DQorfQ0KKw0KIC8qKg0KICAqIHBpZGZpbGVfd3JpdGUoKSAt IFdyaXRlIFBJRCB0byBmaWxlLCBpZiByZXF1ZXN0ZWQgdG8gZG8gc28sIGFuZCBjbG9zZSBpdA0K ICAqIEBmZDoJCU9wZW4gUElEIGZpbGUgZGVzY3JpcHRvciwgY2xvc2VkIG9uIGV4aXQsIC0xIHRv IHNraXAgd3JpdGluZyBpdA0KZGlmZiAtLWdpdCBhL3V0aWwuaCBiL3V0aWwuaA0KaW5kZXggZWMy ZDlhYy4uMTFmNjg3NyAxMDA2NDQNCi0tLSBhL3V0aWwuaA0KKysrIGIvdXRpbC5oDQpAQCAtMTQ1 LDYgKzE0NSw3IEBAIGludCBkb19jbG9uZShpbnQgKCpmbikodm9pZCAqKSwgY2hhciAqc3RhY2tf YXJlYSwgc2l6ZV90IHN0YWNrX3NpemUsIGludCBmbGFncywNCg0KIHN0cnVjdCBjdHg7DQogdW5p b24gc29ja2FkZHJfaW5hbnk7DQordW5pb24gdmhvc3RfbWVtb3J5X3U7DQoNCiBpbnQgc29ja19s NChjb25zdCBzdHJ1Y3QgY3R4ICpjLCBlbnVtIGVwb2xsX3R5cGUgdHlwZSwNCiAJICAgIGNvbnN0 IHVuaW9uIHNvY2thZGRyX2luYW55ICpzYSwgY29uc3QgY2hhciAqaWZuYW1lKTsNCkBAIC0xNzAs NiArMTcxLDcgQEAgaW50IHdyaXRlX3JlbWFpbmRlcihpbnQgZmQsIGNvbnN0IHN0cnVjdCBpb3Zl YyAqaW92LCBzaXplX3QgaW92Y250LA0KIGludCByZWFkX3JlbWFpbmRlcihpbnQgZmQsIGNvbnN0 IHN0cnVjdCBpb3ZlYyAqaW92LCBzaXplX3QgY250LCBzaXplX3Qgc2tpcCk7DQogYm9vbCBzbnBy aW50Zl9jaGVjayhjaGFyICpzdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4u Lik7DQogbG9uZyBjbGFtcGVkX3NjYWxlKGxvbmcgeCwgbG9uZyB5LCBsb25nIGxvLCBsb25nIGhp LCBsb25nIGYpOw0KK3ZvaWQgZ2VuZXJhbF9yZWdpc3Rlcl9tZW1vcnlfcmVnaW9ucyh1bmlvbiB2 aG9zdF9tZW1vcnlfdSAqdmhvc3RfbWVtLCBzaXplX3QgKmxhc3RfaWR4KTsNCg0KIC8qKg0KICAq IGFmX25hbWUoKSAtIFJldHVybiBuYW1lIG9mIGFuIGFkZHJlc3MgZmFtaWx5DQpkaWZmIC0tZ2l0 IGEvdmhvc3QuYyBiL3Zob3N0LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw Li5hNjljNGI1DQotLS0gL2Rldi9udWxsDQorKysgYi92aG9zdC5jDQpAQCAtMCwwICsxLDI5NSBA QA0KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyDQorLyogQ29w eXJpZ2h0IFJlZCBIYXQNCisgKiBBdXRob3I6IEFtbWFyIFlhc3NlciA8YWVyb3NvdW5kMTYxQGdt YWlsLmNvbT4NCisgKg0KKyAqIHZob3N0LmMgLSB2aG9zdC1uZXQgKHZob3N0LWtlcm5lbCkgYWNj ZWxlcmF0aW9uIGZvciBwYXN0YSBtb2RlDQorICovDQorDQorI2luY2x1ZGUgPGVycm5vLmg+DQor I2luY2x1ZGUgPGZjbnRsLmg+DQorI2luY2x1ZGUgPGludHR5cGVzLmg+DQorI2luY2x1ZGUgPHN0 ZGludC5oPg0KKyNpbmNsdWRlIDxzdHJpbmcuaD4NCisjaW5jbHVkZSA8dW5pc3RkLmg+DQorI2lu Y2x1ZGUgPHN5cy9ldmVudGZkLmg+DQorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPg0KKw0KKyNpbmNs dWRlICJ1dGlsLmgiDQorI2luY2x1ZGUgInBhc3N0LmgiDQorI2luY2x1ZGUgInZob3N0LmgiDQor I2luY2x1ZGUgImVwb2xsX2N0bC5oIg0KKyNpbmNsdWRlICJ1ZHAuaCINCisjaW5jbHVkZSAidGNw X2J1Zi5oIg0KKw0KK3N0cnVjdCB2cV9zdGF0ZSB2aG9zdF92cV9zdGF0ZVsyXTsNCisNCitzdHJ1 Y3QgdnJpbmdfZGVzY19wYXN0YSB2cmluZ19kZXNjWzJdW1ZIT1NUX05ERVNDU10NCisJCQkJX19h dHRyaWJ1dGVfXygoYWxpZ25lZChQQUdFX1NJWkUpKSk7DQorDQorc3RydWN0IHZyaW5nX2F2YWls X3Bhc3RhIHZyaW5nX2F2YWlsX2FsbFsyXQ0KKwkJCQlfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKFBB R0VfU0laRSkpKTsNCitzdHJ1Y3QgdnJpbmdfdXNlZF9wYXN0YSB2cmluZ191c2VkX2FsbFsyXQ0K KwkJCQlfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKFBBR0VfU0laRSkpKTsNCisNCit1bmlvbiB2aG9z dF9tZW1vcnlfdSB2aG9zdF9tZW1vcnkgPSB7DQorCS5tZW0gPSB7DQorCQkubnJlZ2lvbnMgPSBO X1ZIT1NUX1JFR0lPTlMsDQorCX0sDQorfTsNCisNCisvKioNCisgKiB2aG9zdF9zZXR1cF9uZXQo KSAtIE9wZW4gYW5kIG5lZ290aWF0ZSBmZWF0dXJlcyBvbiAvZGV2L3Zob3N0LW5ldA0KKyAqIEBj OgkJRXhlY3V0aW9uIGNvbnRleHQ7IGMtPnZob3N0LmZkIGFuZCBjLT52aG9zdC5mZWF0dXJlcyBh cmUgc2V0DQorICoJCW9uIHN1Y2Nlc3MsIGFuZCBsZWZ0IHVudG91Y2hlZCBvbiBmYWlsdXJlDQor ICoNCisgKiBGYWlsdXJlIGhlcmUgbWVhbnMgdmhvc3QtbmV0IGlzbid0IHVzYWJsZSwgbm90IHRo YXQgcGFzdGEgY2FuJ3QgcnVuOiB0aGUNCisgKiBjYWxsZXIgZmFsbHMgYmFjayB0byBwbGFpbiB0 YXAgb3BlcmF0aW9uIHVubGVzcyBhY2NlbGVyYXRpb24gd2FzIHJlcXVpcmVkLg0KKyAqIFRoYXQn cyB3aHkgbm90aGluZyBpbiBoZXJlIGlzIGZhdGFsLg0KKyAqDQorICogUmV0dXJuOiAwIG9uIHN1 Y2Nlc3MsIC0xIGlmIHZob3N0LW5ldCBpcyB1bmF2YWlsYWJsZSBvciB1bnVzYWJsZQ0KKyAqLw0K K2ludCB2aG9zdF9zZXR1cF9uZXQoc3RydWN0IGN0eCAqYykNCit7DQorCWNvbnN0IHVpbnQ2NF90 IHJlcV9mZWF0dXJlcyA9ICgxVUxMIDw8IFZJUlRJT19GX1ZFUlNJT05fMSkgfA0KKwkJCQkgICAg ICAoMVVMTCA8PCBWSE9TVF9ORVRfRl9WSVJUSU9fTkVUX0hEUik7DQorCXVpbnQ2NF90IGZlYXR1 cmVzOw0KKwlpbnQgdmhvc3RfZmQ7DQorDQorCXZob3N0X2ZkID0gb3BlbigiL2Rldi92aG9zdC1u ZXQiLCBPX1JEV1IgfCBPX05PTkJMT0NLIHwgT19DTE9FWEVDKTsNCisJaWYgKHZob3N0X2ZkIDwg MCkgew0KKwkJZGVidWdfcGVycm9yKCJDb3VsZG4ndCBvcGVuIC9kZXYvdmhvc3QtbmV0Iik7DQor CQlyZXR1cm4gLTE7DQorCX0NCisNCisJaWYgKGlvY3RsKHZob3N0X2ZkLCBWSE9TVF9TRVRfT1dO RVIsIE5VTEwpIDwgMCkgew0KKwkJZGVidWdfcGVycm9yKCJWSE9TVF9TRVRfT1dORVIgaW9jdGwg ZmFpbGVkIik7DQorCQlnb3RvIGNsb3NlX2ZkOw0KKwl9DQorDQorCWlmIChpb2N0bCh2aG9zdF9m ZCwgVkhPU1RfR0VUX0ZFQVRVUkVTLCAmZmVhdHVyZXMpIDwgMCkgew0KKwkJZGVidWdfcGVycm9y KCJWSE9TVF9HRVRfRkVBVFVSRVMgaW9jdGwgZmFpbGVkIik7DQorCQlnb3RvIGNsb3NlX2ZkOw0K Kwl9DQorDQorCWlmICgoZmVhdHVyZXMgJiByZXFfZmVhdHVyZXMpICE9IHJlcV9mZWF0dXJlcykg ew0KKwkJZGVidWcoInZob3N0LW5ldCBpcyBtaXNzaW5nIGZlYXR1cmVzOiAweCUwMTYiIFBSSXg2 NCwNCisJCSAgICAgIHJlcV9mZWF0dXJlcyAmIH5mZWF0dXJlcyk7DQorCQlnb3RvIGNsb3NlX2Zk Ow0KKwl9DQorDQorCWZlYXR1cmVzID0gcmVxX2ZlYXR1cmVzOw0KKwlpZiAoaW9jdGwodmhvc3Rf ZmQsIFZIT1NUX1NFVF9GRUFUVVJFUywgJmZlYXR1cmVzKSA8IDApIHsNCisJCWRlYnVnX3BlcnJv cigiVkhPU1RfU0VUX0ZFQVRVUkVTIGlvY3RsIGZhaWxlZCIpOw0KKwkJZ290byBjbG9zZV9mZDsN CisJfQ0KKw0KKwljLT52aG9zdC5mZWF0dXJlcyA9IGZlYXR1cmVzOw0KKwljLT52aG9zdC5mZCA9 IHZob3N0X2ZkOw0KKw0KKwlyZXR1cm4gMDsNCisNCitjbG9zZV9mZDoNCisJY2xvc2Uodmhvc3Rf ZmQpOw0KKw0KKwlyZXR1cm4gLTE7DQorfQ0KKw0KKy8qKg0KKyAqIHZob3N0X3NldHVwX2V2ZW50 ZmRzKCkgLSBTZXQgdXAgb25lIHF1ZXVlJ3MgZXZlbnRmZHMgYW5kIHJpbmcgc2l6ZQ0KKyAqIEBj OgkJRXhlY3V0aW9uIGNvbnRleHQ7IGMtPnZob3N0LmZkIG11c3QgYWxyZWFkeSBiZSBzZXQNCisg KiBAcXVldWVfaWR4OglJbmRleCBvZiB0aGUgcXVldWUgKHZyaW5nKSB0byBjb25maWd1cmUNCisg Kg0KKyAqLw0KK3ZvaWQgdmhvc3Rfc2V0dXBfZXZlbnRmZHMoc3RydWN0IGN0eCAqYywgaW50IHF1 ZXVlX2lkeCkNCit7DQorCXN0cnVjdCB2aG9zdF92cmluZ19maWxlIHZyaW5nX2ZpbGUgPSB7IC5p bmRleCA9IHF1ZXVlX2lkeCB9Ow0KKwlzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGUgc3RhdGUgPSB7 IC5pbmRleCA9IHF1ZXVlX2lkeCB9Ow0KKwl1bmlvbiBlcG9sbF9yZWYgcmVmID0geyAwIH07DQor CWludCB2aG9zdF9mZCA9IGMtPnZob3N0LmZkOw0KKwlpbnQgcmM7DQorDQorCXN0YXRlLm51bSA9 IFZIT1NUX05ERVNDUzsNCisJcmVmLnF1ZXVlID0gcXVldWVfaWR4Ow0KKw0KKwl2cmluZ19maWxl LmZkID0gZXZlbnRmZCgwLCBFRkRfTk9OQkxPQ0sgfCBFRkRfQ0xPRVhFQyk7DQorCWlmICh2cmlu Z19maWxlLmZkIDwgMCkNCisJCWRpZV9wZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgdmhvc3QgY2Fs bCBldmVudGZkLCBxdWV1ZSAlZCIsDQorCQkJICAgcXVldWVfaWR4KTsNCisJcmVmLmZkID0gdnJp bmdfZmlsZS5mZDsNCisNCisJcmMgPSBpb2N0bCh2aG9zdF9mZCwgVkhPU1RfU0VUX1ZSSU5HX0NB TEwsICZ2cmluZ19maWxlKTsNCisJaWYgKHJjIDwgMCkNCisJCWRpZV9wZXJyb3IoIlZIT1NUX1NF VF9WUklOR19DQUxMIGlvY3RsIGZhaWxlZCwgcXVldWUgJWQiLA0KKwkJCSAgIHF1ZXVlX2lkeCk7 DQorDQorCXJlZi50eXBlID0gRVBPTExfVFlQRV9WSE9TVF9DQUxMOw0KKwlyYyA9IGVwb2xsX2Fk ZChjLT5lcG9sbGZkLCBFUE9MTElOLCByZWYpOw0KKwlpZiAocmMgPCAwKQ0KKwkJZGllX3BlcnJv cigiRmFpbGVkIHRvIHdhdGNoIHZob3N0IGNhbGwgZXZlbnRmZCwgcXVldWUgJWQiLA0KKwkJCSAg IHF1ZXVlX2lkeCk7DQorCWMtPnZob3N0LnZxW3F1ZXVlX2lkeF0uY2FsbF9mZCA9IHZyaW5nX2Zp bGUuZmQ7DQorDQorCXZyaW5nX2ZpbGUuZmQgPSBldmVudGZkKDAsIEVGRF9OT05CTE9DSyB8IEVG RF9DTE9FWEVDKTsNCisJaWYgKHZyaW5nX2ZpbGUuZmQgPCAwKQ0KKwkJZGllX3BlcnJvcigiRmFp bGVkIHRvIGNyZWF0ZSB2aG9zdCBlcnJvciBldmVudGZkLCBxdWV1ZSAlZCIsDQorCQkJICAgcXVl dWVfaWR4KTsNCisNCisJcmMgPSBpb2N0bCh2aG9zdF9mZCwgVkhPU1RfU0VUX1ZSSU5HX0VSUiwg JnZyaW5nX2ZpbGUpOw0KKwlpZiAocmMgPCAwKQ0KKwkJZGllX3BlcnJvcigiVkhPU1RfU0VUX1ZS SU5HX0VSUiBpb2N0bCBmYWlsZWQsIHF1ZXVlICVkIiwNCisJCQkgICBxdWV1ZV9pZHgpOw0KKw0K KwlyZWYudHlwZSA9IEVQT0xMX1RZUEVfVkhPU1RfRVJST1I7DQorCXJlZi5mZCA9IHZyaW5nX2Zp bGUuZmQ7DQorCXJjID0gZXBvbGxfYWRkKGMtPmVwb2xsZmQsIEVQT0xMSU4sIHJlZik7DQorCWlm IChyYyA8IDApDQorCQlkaWVfcGVycm9yKCJGYWlsZWQgdG8gd2F0Y2ggdmhvc3QgZXJyb3IgZXZl bnRmZCwgcXVldWUgJWQiLA0KKwkJCSAgIHF1ZXVlX2lkeCk7DQorCWMtPnZob3N0LnZxW3F1ZXVl X2lkeF0uZXJyX2ZkID0gdnJpbmdfZmlsZS5mZDsNCisNCisJcmMgPSBpb2N0bCh2aG9zdF9mZCwg VkhPU1RfU0VUX1ZSSU5HX05VTSwgJnN0YXRlKTsNCisJaWYgKHJjIDwgMCkNCisJCWRpZV9wZXJy b3IoIlZIT1NUX1NFVF9WUklOR19OVU0gaW9jdGwgZmFpbGVkLCBxdWV1ZSAlZCIsDQorCQkJICAg cXVldWVfaWR4KTsNCisNCisJdnJpbmdfZmlsZS5mZCA9IGV2ZW50ZmQoMCwgRUZEX05PTkJMT0NL IHwgRUZEX0NMT0VYRUMpOw0KKwlpZiAodnJpbmdfZmlsZS5mZCA8IDApDQorCQlkaWVfcGVycm9y KCJGYWlsZWQgdG8gY3JlYXRlIHZob3N0IGtpY2sgZXZlbnRmZCwgcXVldWUgJWQiLA0KKwkJCSAg IHF1ZXVlX2lkeCk7DQorDQorCXJjID0gaW9jdGwodmhvc3RfZmQsIFZIT1NUX1NFVF9WUklOR19L SUNLLCAmdnJpbmdfZmlsZSk7DQorCWlmIChyYyA8IDApDQorCQlkaWVfcGVycm9yKCJWSE9TVF9T RVRfVlJJTkdfS0lDSyBpb2N0bCBmYWlsZWQsIHF1ZXVlICVkIiwNCisJCQkgICBxdWV1ZV9pZHgp Ow0KKw0KKwljLT52aG9zdC52cVtxdWV1ZV9pZHhdLmtpY2tfZmQgPSB2cmluZ19maWxlLmZkOw0K Kw0KKwl2aG9zdF92cV9zdGF0ZVtxdWV1ZV9pZHhdLm51bV9mcmVlID0gVkhPU1RfTkRFU0NTOw0K K30NCisNCisvKioNCisgKiB2aG9zdF9zZXR1cF9tZW1vcnlfdGFibGUoKSAtIFJlZ2lzdGVyIHRo ZSBHUEEvSFZBIHRyYW5zbGF0aW9uIHRhYmxlDQorICogQGM6CQlFeGVjdXRpb24gY29udGV4dDsg Yy0+dmhvc3QuZmQgbXVzdCBhbHJlYWR5IGJlIHNldA0KKyAqDQorICogdmhvc3QtbmV0IHJlYWRz IHRoZSBhZGRyZXNzZXMgd2UgcHV0IGluIGRlc2NyaXB0b3JzIGFzIGd1ZXN0IHBoeXNpY2FsDQor ICogYWRkcmVzc2VzLCBhbmQgdHJhbnNsYXRlcyB0aGVtIHRocm91Z2ggdGhpcyB0YWJsZSBiZWZv cmUgdG91Y2hpbmcgdGhlDQorICogbWVtb3J5IHRoZXkgcmVmZXIgdG8uIHBhc3RhIGhhcyBubyBn dWVzdCBhbmQgbm8gc2Vjb25kIGFkZHJlc3Mgc3BhY2U6DQorICogdGhlIGFkZHJlc3NlcyB3ZSBw dXQgdGhlcmUgYXJlIG91ciBvd24gdmlydHVhbCBhZGRyZXNzZXMuIEV2ZXJ5IHJlZ2lvbg0KKyAq IGJlbG93IHRoZXJlZm9yZSBzZXRzIGd1ZXN0X3BoeXNfYWRkciBlcXVhbCB0byB1c2Vyc3BhY2Vf YWRkciwgc28gdGhhdA0KKyAqIEdQQSA9PSBIVkEgYW5kIHRoZSB0cmFuc2xhdGlvbiBpcyBhbiBp ZGVudGl0eSBtYXBwaW5nLg0KKyAqDQorICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVy cm9yIHdpdGggZXJybm8gc2V0DQorICovDQoraW50IHZob3N0X3NldHVwX21lbW9yeV90YWJsZShz dHJ1Y3QgY3R4ICpjKSB7DQorCXNpemVfdCByZWdpb25faWR4ID0gMDsNCisNCisJLyogZ2VuZXJh bCBwdXJwb3NlIGJ1ZmZlcnMgKi8NCisJZ2VuZXJhbF9yZWdpc3Rlcl9tZW1vcnlfcmVnaW9ucygm dmhvc3RfbWVtb3J5LCAmcmVnaW9uX2lkeCk7DQorDQorCS8qIHRjcCBzcGVjaWZpYyBidWZmZXJz ICovDQorCXRjcF9yZWdpc3Rlcl9tZW1vcnlfcmVnaW9ucygmdmhvc3RfbWVtb3J5LCAmcmVnaW9u X2lkeCk7DQorDQorCS8qIHVkcCBzcGVjaWZpYyBidWZmZXJzICovDQorCXVkcF9yZWdpc3Rlcl9t ZW1vcnlfcmVnaW9ucygmdmhvc3RfbWVtb3J5LCAmcmVnaW9uX2lkeCk7DQorDQorCXZob3N0X21l bW9yeS5tZW0ubnJlZ2lvbnMgPSByZWdpb25faWR4Ow0KKw0KKwlyZXR1cm4gaW9jdGwoYy0+dmhv c3QuZmQsIFZIT1NUX1NFVF9NRU1fVEFCTEUsICZ2aG9zdF9tZW1vcnkubWVtKTsNCit9DQorDQor LyoqDQorICogdmhvc3Rfc2V0X3ZyaW5nKCkgLSBSZWdpc3RlciBhIHZyaW5nJ3MgYWRkcmVzc2Vz IGFuZCBiaW5kIGl0cyBiYWNrZW5kDQorICogQGM6CQlFeGVjdXRpb24gY29udGV4dDsgYy0+dmhv c3QuZmQgbXVzdCBhbHJlYWR5IGJlIHNldA0KKyAqIEBxdWV1ZV9pZHg6CUluZGV4IG9mIHRoZSBx dWV1ZSAodnJpbmcpIHRvIGNvbmZpZ3VyZQ0KKyAqIEB0YXBfZmQ6CVRhcCBmZCB0byBiaW5kIGFz IHRoaXMgcXVldWUncyBiYWNrZW5kDQorICovDQordm9pZCB2aG9zdF9zZXRfdnJpbmcoc3RydWN0 IGN0eCAqYywgaW50IHF1ZXVlX2lkeCwgaW50IHRhcF9mZCkNCit7DQorCWludCB2aG9zdF9mZCA9 IGMtPnZob3N0LmZkOw0KKwlzdHJ1Y3Qgdmhvc3RfdnJpbmdfYWRkciBhZGRyID0gew0KKwkJLmlu ZGV4ID0gcXVldWVfaWR4LA0KKwkJLmRlc2NfdXNlcl9hZGRyID0gKHVuc2lnbmVkIGxvbmcpdnJp bmdfZGVzY1txdWV1ZV9pZHhdLA0KKwkJLmF2YWlsX3VzZXJfYWRkciA9ICh1bnNpZ25lZCBsb25n KSZ2cmluZ19hdmFpbF9hbGxbcXVldWVfaWR4XSwNCisJCS51c2VkX3VzZXJfYWRkciA9ICh1bnNp Z25lZCBsb25nKSZ2cmluZ191c2VkX2FsbFtxdWV1ZV9pZHhdLA0KKwkJLmxvZ19ndWVzdF9hZGRy ID0gKHVuc2lnbmVkIGxvbmcpJnZyaW5nX3VzZWRfYWxsW3F1ZXVlX2lkeF0sDQorCX07DQorCXN0 cnVjdCB2aG9zdF92cmluZ19maWxlIGZpbGUgPSB7DQorCQkuaW5kZXggPSBxdWV1ZV9pZHgsDQor CQkuZmQgPSB0YXBfZmQsDQorCX07DQorCXVuc2lnbmVkIGludCBpOw0KKwlpbnQgcmM7DQorDQor CXJjID0gaW9jdGwodmhvc3RfZmQsIFZIT1NUX1NFVF9WUklOR19BRERSLCAmYWRkcik7DQorCWlm IChyYyA8IDApDQorCQlkaWVfcGVycm9yKCJWSE9TVF9TRVRfVlJJTkdfQUREUiBpb2N0bCBmYWls ZWQsIHF1ZXVlICVkIiwNCisJCQkgICBxdWV1ZV9pZHgpOw0KKw0KKwlpZiAocXVldWVfaWR4ID09 IFZIT1NUX0FWQUlMX1FfSURYKSB7DQorCQlmb3IgKGkgPSAwOyBpIDwgVkhPU1RfTkRFU0NTOyAr K2kpIHsNCisJCQl2cmluZ19kZXNjW1ZIT1NUX0FWQUlMX1FfSURYXVtpXS5hZGRyID0NCisJCQkJ KHVpbnRwdHJfdClwa3RfYnVmICsgaSAqIFZIT1NUX0RFU0NfQllURVM7DQorCQkJdnJpbmdfZGVz Y1tWSE9TVF9BVkFJTF9RX0lEWF1baV0ubGVuID0gVkhPU1RfREVTQ19CWVRFUzsNCisJCQl2cmlu Z19kZXNjW1ZIT1NUX0FWQUlMX1FfSURYXVtpXS5mbGFncyA9DQorCQkJCVZSSU5HX0RFU0NfRl9X UklURTsNCisJCX0NCisNCisJCWZvciAoaSA9IDA7IGkgPCBWSE9TVF9OREVTQ1M7ICsraSkNCisJ CQl2cmluZ19hdmFpbF9hbGxbVkhPU1RfQVZBSUxfUV9JRFhdLnJpbmdbaV0gPQ0KKwkJCQlodG9s ZTE2KGkpOw0KKw0KKwkJdmhvc3RfcnhfZGVzY3JpcHRvcl9oYW5kb2ZmKGMpOw0KKwl9DQorDQor CWlmIChxdWV1ZV9pZHggPT0gVkhPU1RfVVNFRF9RX0lEWCkgew0KKwkJZm9yIChpID0gMDsgaSA8 IChWSE9TVF9OREVTQ1MgLSAxKTsgKytpKQ0KKwkJCXZyaW5nX2Rlc2NbVkhPU1RfVVNFRF9RX0lE WF1baV0ubmV4dCA9IGkgKyAxOw0KKwl9DQorDQorCXJjID0gaW9jdGwodmhvc3RfZmQsIFZIT1NU X05FVF9TRVRfQkFDS0VORCwgJmZpbGUpOw0KKwlpZiAocmMgPCAwKQ0KKwkJZGllX3BlcnJvcigi VkhPU1RfTkVUX1NFVF9CQUNLRU5EIGlvY3RsIGZhaWxlZCwgcXVldWUgJWQiLA0KKwkJCSAgIHF1 ZXVlX2lkeCk7DQorfQ0KKw0KKy8qKg0KKyAqIHZob3N0X3J4X2Rlc2NyaXB0b3JfaGFuZG9mZigp IC0gQW5ub3VuY2UgZnJlZWQgZnJvbS1ndWVzdCBkZXNjcmlwdG9ycw0KKyAqIEBjOgkJRXhlY3V0 aW9uIGNvbnRleHQNCisgKg0KKyAqIEJ1bXBzIGF2YWlsLmlkeCBieSB0aGUgbnVtYmVyIG9mIGRl c2NyaXB0b3JzIGFjY3VtdWxhdGVkIGluDQorICogdmhvc3RfdnFfc3RhdGVbVkhPU1RfQVZBSUxf UV9JRFhdLm51bV9mcmVlIChmcm9tIHByaW9yDQorICogY29uc3VtZV9vbmVfcnhfZGVzY3JpcHRv cigpIGNhbGxzKSwNCisgKiB0aGVuIHJlc2V0cyB0aGUgY291bnRlciB0byB6ZXJvLiBUaGUga2Vy bmVsIHdpbGwgc2VlIHRoZSBuZXcNCisgKiBhdmFpbC5pZHggYW5kIGNvbnN1bWUgdGhlIGZyZXNo bHktYXZhaWxhYmxlIGRlc2NyaXB0b3JzLg0KKyAqLw0KK3ZvaWQgdmhvc3RfcnhfZGVzY3JpcHRv cl9oYW5kb2ZmKHN0cnVjdCBjdHggKmMpDQorew0KKwlzbXBfd21iKCk7DQorDQorCWlmICghdmhv c3RfdnFfc3RhdGVbVkhPU1RfQVZBSUxfUV9JRFhdLm51bV9mcmVlKQ0KKwkJcmV0dXJuOw0KKw0K Kwl2cmluZ19hdmFpbF9hbGxbVkhPU1RfQVZBSUxfUV9JRFhdLmlkeCArPQ0KKwkJdmhvc3RfdnFf c3RhdGVbVkhPU1RfQVZBSUxfUV9JRFhdLm51bV9mcmVlOw0KKwl2aG9zdF92cV9zdGF0ZVtWSE9T VF9BVkFJTF9RX0lEWF0ubnVtX2ZyZWUgPSAwOw0KKwl2aG9zdF9raWNrKCZ2cmluZ191c2VkX2Fs bFtWSE9TVF9BVkFJTF9RX0lEWF0sDQorCQkgICBjLT52aG9zdC52cVtWSE9TVF9BVkFJTF9RX0lE WF0ua2lja19mZCk7DQorfQ0KKw0KKy8qKg0KKyAqIHZob3N0X2tpY2soKSAtIE5vdGlmeSB0aGUg a2VybmVsIHRoYXQgbmV3IGRlc2NyaXB0b3JzIGFyZSBhdmFpbGFibGUNCisgKiBAdXNlZDoJVXNl ZCByaW5nIG9mIHRoZSBxdWV1ZSB3ZSdyZSBhbm5vdW5jaW5nIG9uLCBjaGVja2VkIHRvIHNlZQ0K KyAqCQl3aGV0aGVyIHRoZSBrZXJuZWwncyB2aXJ0aW8gdGhyZWFkIGlzIGFscmVhZHkgcmVhZGlu Zw0KKyAqCQlkZXNjcmlwdG9ycyBhbmQgZG9lc24ndCB3YW50IHRvIGJlIG5vdGlmaWVkDQorICog QGtpY2tfZmQ6CUtpY2sgZXZlbnRmZCBvZiB0aGF0IHNhbWUgcXVldWUNCisgKi8NCit2b2lkIHZo b3N0X2tpY2soc3RydWN0IHZyaW5nX3VzZWRfcGFzdGEgKnVzZWQsIGludCBraWNrX2ZkKQ0KK3sN CisJLyogRW5zdXJlIHRoYXQgdGhlIHJlYWQgb2YgdXNlZC0+ZmxhZ3MgZG9lc24ndCBnZXQgcmVv cmRlcmVkIHRvIGJlDQorCSAqIGFib3ZlIHRoZSBhdmFpbC5pZHggdXBkYXRlDQorCSAqLw0KKwlz bXBfbWIoKTsNCisNCisJaWYgKCEodXNlZC0+ZmxhZ3MgJiBWUklOR19VU0VEX0ZfTk9fTk9USUZZ KSkNCisJCWV2ZW50ZmRfd3JpdGUoa2lja19mZCwgMSk7DQorfQ0KZGlmZiAtLWdpdCBhL3Zob3N0 LmggYi92aG9zdC5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uYmQ1NTVm OQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvdmhvc3QuaA0KQEAgLTAsMCArMSw5MSBAQA0KKy8qIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyDQorICogQ29weXJpZ2h0IFJl ZCBIYXQNCisgKiBBdXRob3I6IEFtbWFyIFlhc3NlciA8YWVyb3NvdW5kMTYxQGdtYWlsLmNvbT4N CisgKg0KKyAqIHZob3N0LmggLSB2aG9zdC1uZXQgKHZob3N0LWtlcm5lbCkgYWNjZWxlcmF0aW9u IGZvciBwYXN0YSBtb2RlDQorICovDQorDQorI2lmbmRlZiBWSE9TVF9IDQorI2RlZmluZSBWSE9T VF9IDQorDQorI2luY2x1ZGUgPGFzc2VydC5oPg0KKyNpbmNsdWRlIDxzdGRkZWYuaD4NCisjaW5j bHVkZSA8c3RkaW50Lmg+DQorDQorI2luY2x1ZGUgPGxpbnV4L3Zob3N0Lmg+DQorI2luY2x1ZGUg PGxpbnV4L3Zob3N0X3R5cGVzLmg+DQorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4N CisjaW5jbHVkZSA8bGludXgvdmlydGlvX25ldC5oPg0KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9f cmluZy5oPg0KKw0KKyNpbmNsdWRlICJwYXNzdC5oIg0KKw0KKyNkZWZpbmUgVkhPU1RfQVZBSUxf UV9JRFggMA0KKyNkZWZpbmUgVkhPU1RfVVNFRF9RX0lEWCAxDQorDQorLyoqDQorICogc3RydWN0 IHZxX3N0YXRlIC0gUGVyLXZpcnRxdWV1ZSBsb2NhbCBkZXNjcmlwdG9yIHRyYWNraW5nDQorICog QG51bV9mcmVlOgkJTnVtYmVyIG9mIGRlc2NyaXB0b3JzIHJlYWR5IHRvIGJlIGFubm91bmNlZCB0 byB0aGUNCisgKgkJCWtlcm5lbCB2aWEgdmhvc3RfcnhfZGVzY3JpcHRvcl9oYW5kb2ZmKCkNCisg KiBAbGFzdF91c2VkX2lkeDoJTnVtYmVyIG9mIHVzZWQtcmluZyBlbnRyaWVzIGNvbnN1bWVkIHNv IGZhcjsNCisgKgkJCWxhZ2dpbmcgcmVhZCBjdXJzb3IgdnMuIHZyaW5nX3VzZWQtPmlkeCAodGhl DQorICoJCQlrZXJuZWwncyB3cml0ZSBjdXJzb3IpDQorICovDQorZXh0ZXJuIHN0cnVjdCB2cV9z dGF0ZSB7DQorCXVpbnQxNl90IG51bV9mcmVlOw0KKwl1aW50MTZfdCBsYXN0X3VzZWRfaWR4Ow0K Kwl1aW50MTZfdCBuZXh0X2ZyZWU7DQorfSB2aG9zdF92cV9zdGF0ZVsyXTsNCisNCitzdHJ1Y3Qg dnJpbmdfZGVzY19wYXN0YSB7DQorCV9fdmlydGlvNjQgYWRkcjsNCisJX192aXJ0aW8zMiBsZW47 DQorCV9fdmlydGlvMTYgZmxhZ3M7DQorCV9fdmlydGlvMTYgbmV4dDsNCit9Ow0KKw0KK2V4dGVy biBzdHJ1Y3QgdnJpbmdfZGVzY19wYXN0YSB2cmluZ19kZXNjWzJdW1ZIT1NUX05ERVNDU107DQor DQorc3RydWN0IHZyaW5nX2F2YWlsX3Bhc3RhIHsNCisJX192aXJ0aW8xNiBmbGFnczsNCisJX192 aXJ0aW8xNiBpZHg7DQorCV9fdmlydGlvMTYgcmluZ1tWSE9TVF9OREVTQ1NdOw0KK307DQorc3Rh dGljX2Fzc2VydChzaXplb2Yoc3RydWN0IHZyaW5nX2F2YWlsX3Bhc3RhKSA9PQ0KKwkgICAgICBv ZmZzZXRvZihzdHJ1Y3QgdnJpbmdfYXZhaWwsIHJpbmdbVkhPU1RfTkRFU0NTXSksDQorCSAgICAg ICJ2cmluZ19hdmFpbF9wYXN0YSBkb2Vzbid0IG1hdGNoIHRoZSBrZXJuZWwgYXZhaWwgcmluZyBs YXlvdXQiKTsNCitleHRlcm4gc3RydWN0IHZyaW5nX2F2YWlsX3Bhc3RhIHZyaW5nX2F2YWlsX2Fs bFsyXTsNCisNCitzdHJ1Y3QgdnJpbmdfdXNlZF9wYXN0YSB7DQorCV9fdmlydGlvMTYgZmxhZ3M7 DQorCV9fdmlydGlvMTYgaWR4Ow0KKwl2cmluZ191c2VkX2VsZW1fdCByaW5nW1ZIT1NUX05ERVND U107DQorfTsNCitzdGF0aWNfYXNzZXJ0KHNpemVvZihzdHJ1Y3QgdnJpbmdfdXNlZF9wYXN0YSkg PT0NCisJICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZyaW5nX3VzZWQsIHJpbmdbVkhPU1RfTkRFU0NT XSksDQorCSAgICAgICJ2cmluZ191c2VkX3Bhc3RhIGRvZXNuJ3QgbWF0Y2ggdGhlIGtlcm5lbCB1 c2VkIHJpbmcgbGF5b3V0Iik7DQorZXh0ZXJuIHN0cnVjdCB2cmluZ191c2VkX3Bhc3RhIHZyaW5n X3VzZWRfYWxsWzJdOw0KKw0KKyNkZWZpbmUgTl9WSE9TVF9SRUdJT05TIDEyDQordW5pb24gdmhv c3RfbWVtb3J5X3Ugew0KKwlzdHJ1Y3Qgdmhvc3RfbWVtb3J5IG1lbTsNCisJY2hhciBidWZbb2Zm c2V0b2Yoc3RydWN0IHZob3N0X21lbW9yeSwgcmVnaW9uc1tOX1ZIT1NUX1JFR0lPTlNdKV07DQor fTsNCitleHRlcm4gdW5pb24gdmhvc3RfbWVtb3J5X3Ugdmhvc3RfbWVtb3J5Ow0KKw0KKyNkZWZp bmUgVkhPU1RfTUVNT1JZX1JFR0lPTl9QVFIoYWRkciwgc2l6ZSkgXA0KKyAgICAoc3RydWN0IHZo b3N0X21lbW9yeV9yZWdpb24pIHsgXA0KKyAgICAgICAgLmd1ZXN0X3BoeXNfYWRkciA9ICh1aW50 cHRyX3QpYWRkciwgXA0KKyAgICAgICAgLm1lbW9yeV9zaXplID0gc2l6ZSwgXA0KKyAgICAgICAg LnVzZXJzcGFjZV9hZGRyICA9ICh1aW50cHRyX3QpYWRkciwgXA0KKyAgICB9DQorI2RlZmluZSBW SE9TVF9NRU1PUllfUkVHSU9OKGJ1ZikgVkhPU1RfTUVNT1JZX1JFR0lPTl9QVFIoJmJ1Ziwgc2l6 ZW9mKGJ1ZikpDQorDQordm9pZCB2aG9zdF9zZXRfdnJpbmcoc3RydWN0IGN0eCAqYywgaW50IHF1 ZXVlX2lkeCwgaW50IHRhcF9mZCk7DQoraW50IHZob3N0X3NldHVwX21lbW9yeV90YWJsZShzdHJ1 Y3QgY3R4ICpjKTsNCitpbnQgdmhvc3Rfc2V0dXBfbmV0KHN0cnVjdCBjdHggKmMpOw0KK3ZvaWQg dmhvc3Rfc2V0dXBfZXZlbnRmZHMoc3RydWN0IGN0eCAqYywgaW50IHF1ZXVlX2lkeCk7DQordm9p ZCB2aG9zdF9yeF9kZXNjcmlwdG9yX2hhbmRvZmYoc3RydWN0IGN0eCAqYyk7DQordm9pZCB2aG9z dF9raWNrKHN0cnVjdCB2cmluZ191c2VkX3Bhc3RhICp1c2VkLCBpbnQga2lja19mZCk7DQorDQor I2VuZGlmIC8qIFZIT1NUX0ggKi8NCi0tDQoyLjM5LjUgKEFwcGxlIEdpdC0xNTQpDQoNCg0KRnJv bSAzZmYwOTBkMThjMzNlOWE1YzEzMWI4ZmZhNTgxYTI3MmEwMGZjMDUwIE1vbiBTZXAgMTcgMDA6 MDA6MDAgMjAwMQ0KRnJvbTogQW1tYXIgWWFzc2VyIDxhZXJvc291bmQxNjFAZ21haWwuY29tPg0K RGF0ZTogRnJpLCA0IFNlcCAyMDI2IDEzOjAxOjI1ICswMDAwDQpTdWJqZWN0OiBbUEFUQ0ggdjIg NC83XSB0YXA6IEltcGxlbWVudCB0aGUgcGFzdGEgdmhvc3QtbmV0IGZyb20tZ3Vlc3QgcGF0aA0K TUlNRS1WZXJzaW9uOiAxLjANCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYt OA0KQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdA0KVG86IHBhc3N0LWRldkBwYXNzdC50 b3ANCkNjOiA9P1VURi04P3E/RXVnZW5pbz0yMFA9QzM9QTlyZXo/PSA8ZXBlcmV6bWFAcmVkaGF0 LmNvbT4NCg0KQWRkIHRhcF92aG9zdF9pbnB1dCgpLCBjYWxsZWQgd2hlbiB0aGUga2VybmVsIHNp Z25hbHMgb24gYSBjYWxsIGV2ZW50ZmQNCnRoYXQgaXQgaGFzIHdyaXR0ZW4gZ3Vlc3QgZnJhbWVz IGludG8gdGhlIGZyb20tZ3Vlc3QgcXVldWUuIEl0IGNvbnN1bWVzDQpkZXNjcmlwdG9ycyB3aXRo IGNvbnN1bWVfb25lX3J4X2Rlc2NyaXB0b3IoKSwgc2tpcHMgdGhlIHZpcnRpb19uZXQgaGVhZGVy DQpvbiBlYWNoLCBidWlsZHMgYW4gaW92X3RhaWwgZnJvbSB3aGF0J3MgbGVmdCBhbmQgcXVldWVz IGl0IGZvcg0KcHJvY2Vzc2luZywgdGhlbiB0ZWxscyB0aGUga2VybmVsIHRoZSBkZXNjcmlwdG9y cyBhcmUgZnJlZSB0byByZXVzZS4NCg0KY29uc3VtZV9vbmVfcnhfZGVzY3JpcHRvcigpIHBvcHMg b25lIGVudHJ5IGZyb20gdGhlIHVzZWQgcmluZywgYWR2YW5jZXMNCm91ciByZWFkIGN1cnNvciBh bmQgdGhlIGNvdW50IG9mIGRlc2NyaXB0b3JzIGF3YWl0aW5nIGhhbmRvZmYsIGFuZA0KcmV0dXJu cyBhIHBvaW50ZXIgdG8gdGhhdCBkZXNjcmlwdG9yJ3MgZGF0YS4NCg0KQm9vdHN0cmFwIHZob3N0 IGluIHRhcF9zb2NrX3R1bl9pbml0KCkuIElmIHNldHVwIGZhaWxzIHdlIGxlYXZlDQpjLT52aG9z dC5mZCBhdCAtMSBhbmQgY2Fycnkgb24gdW5hY2NlbGVyYXRlZC4NCg0KV2l0aCB2aG9zdC1uZXQg cnVubmluZyB0aGUga2VybmVsIHJlYWRzIHRoZSB0YXAgZmQgaXRzZWxmLCBzbyBkb24ndCBhZGQN CnRoYXQgZmQgdG8gb3VyIGVwb2xsIHNldCBhdCBhbGw6IHRhcF9oYW5kbGVyX3Bhc3RhKCkgd291 bGQgb3RoZXJ3aXNlIGJlDQp3b2tlbiBmb3IgZGF0YSBpdCBtdXN0IG5vdCByZWFkLg0KDQpTaWdu ZWQtb2ZmLWJ5OiBFdWdlbmlvIFDDqXJleiA8ZXBlcmV6bWFAcmVkaGF0LmNvbT4NClNpZ25lZC1v ZmYtYnk6IEFtbWFyIFlhc3NlciA8YWVyb3NvdW5kMTYxQGdtYWlsLmNvbT4NCi0tLQ0KIHBhc3N0 LmMgfCAgIDYgKysrDQogdGFwLmMgICB8IDExMiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrLQ0KIHRhcC5oICAgfCAgIDIgKw0KIDMgZmlsZXMg Y2hhbmdlZCwgMTE5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkNCg0KZGlmZiAtLWdpdCBh L3Bhc3N0LmMgYi9wYXNzdC5jDQppbmRleCA2MDAyMjMxLi4zNzJiNzQzIDEwMDY0NA0KLS0tIGEv cGFzc3QuYw0KKysrIGIvcGFzc3QuYw0KQEAgLTMwNSw2ICszMDUsMTIgQEAgc3RhdGljIHZvaWQg cGFzc3Rfd29ya2VyKHZvaWQgKm9wYXF1ZSwgaW50IG5mZHMsIHN0cnVjdCBlcG9sbF9ldmVudCAq ZXZlbnRzKQ0KIAkJY2FzZSBFUE9MTF9UWVBFX0NPTkY6DQogCQkJY29uZl9oYW5kbGVyKGMsIGV2 ZW50bWFzayk7DQogCQkJYnJlYWs7DQorCQljYXNlIEVQT0xMX1RZUEVfVkhPU1RfQ0FMTDoNCisJ CQl0YXBfdmhvc3RfaW5wdXQoYywgcmVmLCAmbm93KTsNCisJCQlicmVhazsNCisJCWNhc2UgRVBP TExfVFlQRV9WSE9TVF9FUlJPUjoNCisJCQlkaWUoIkVycm9yIG9uIHZob3N0LWtlcm5lbCBzb2Nr ZXQiKTsNCisJCQlicmVhazsNCiAJCWRlZmF1bHQ6DQogCQkJLyogQ2FuJ3QgaGFwcGVuICovDQog CQkJYXNzZXJ0KDApOw0KZGlmZiAtLWdpdCBhL3RhcC5jIGIvdGFwLmMNCmluZGV4IGRmYTY2Yzcu LmE1ZmRlZTggMTAwNjQ0DQotLS0gYS90YXAuYw0KKysrIGIvdGFwLmMNCkBAIC0zOCw2ICszOCw3 IEBADQogI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+DQogI2luY2x1ZGUgPG5ldGluZXQvaXBfaWNt cC5oPg0KICNpbmNsdWRlIDxuZXRpbmV0L2lmX2V0aGVyLmg+DQorI2luY2x1ZGUgPHN5cy9ldmVu dGZkLmg+DQoNCiAjaW5jbHVkZSA8bGludXgvaWZfdHVuLmg+DQogI2luY2x1ZGUgPGxpbnV4L2lj bXB2Ni5oPg0KQEAgLTYxLDYgKzYyLDcgQEANCiAjaW5jbHVkZSAidmhvc3RfdXNlci5oIg0KICNp bmNsdWRlICJ2dV9jb21tb24uaCINCiAjaW5jbHVkZSAiZXBvbGxfY3RsLmgiDQorI2luY2x1ZGUg InZob3N0LmgiDQoNCiAvKiBNYXhpbXVtIGFsbG93ZWQgZnJhbWUgbGVuZ3RocyAoaW5jbHVkaW5n IEwyIGhlYWRlcikgKi8NCg0KQEAgLTE0NDYsNyArMTQ0OCwxMSBAQCBzdGF0aWMgdm9pZCB0YXBf c3RhcnRfY29ubmVjdGlvbihjb25zdCBzdHJ1Y3QgY3R4ICpjKQ0KIAkJYnJlYWs7DQogCX0NCg0K LQllcG9sbF9hZGQoYy0+ZXBvbGxmZCwgRVBPTExJTiB8IEVQT0xMUkRIVVAsIHJlZik7DQorCS8q IFdpdGggdmhvc3QtbmV0IHJ1bm5pbmcsIHRoZSBrZXJuZWwgcmVhZHMgdGhlIHRhcCBmZCBmb3Ig dXMgYW5kDQorCSAqIG5vdGlmaWVzIHVzIG9uIHRoZSBjYWxsIGV2ZW50ZmQsIHNvIHdlIG11c3Ru J3Qgd2F0Y2ggaXQgb3Vyc2VsdmVzDQorCSAqLw0KKwlpZiAoYy0+dmhvc3QuZmQgPT0gLTEpDQor CQllcG9sbF9hZGQoYy0+ZXBvbGxmZCwgRVBPTExJTiB8IEVQT0xMUkRIVVAsIHJlZik7DQoNCiAJ aWYgKCF0YXBfaXNfcmVhZHkoYykpDQogCQlyZXR1cm47DQpAQCAtMTUxNCw2ICsxNTIwLDg5IEBA IHZvaWQgdGFwX2xpc3Rlbl9oYW5kbGVyKHN0cnVjdCBjdHggKmMsIHVpbnQzMl90IGV2ZW50cykN CiAJdGFwX3N0YXJ0X2Nvbm5lY3Rpb24oYyk7DQogfQ0KDQorLyoqDQorICogY29uc3VtZV9vbmVf cnhfZGVzY3JpcHRvcigpIC0gQ29uc3VtZSBvbmUgdXNlZCBmcm9tLWd1ZXN0IGRlc2NyaXB0b3IN CisgKiBAbGVuOglTZXQgdG8gdGhlIGxlbmd0aCBvZiBkYXRhIHdyaXR0ZW4gYnkgdGhlIGtlcm5l bA0KKyAqDQorICogUG9wcyBhIHNpbmdsZSBlbnRyeSBmcm9tIHRoZSB1c2VkIHJpbmcsIGFkdmFu Y2luZyBvdXIgcmVhZCBjdXJzb3IgYW5kIHRoZQ0KKyAqIGNvdW50IG9mIGRlc2NyaXB0b3JzIGF3 YWl0aW5nIHJlZmlsbCBhbm5vdW5jZW1lbnQuDQorICoNCisgKiBOT1RFOiBUaGlzIGZ1bmN0aW9u IGFzc3VtZXMgdGhlIGtlcm5lbCBpcyBnb2luZyB0byBwb3N0IHNpbmdsZSBkZXNjcmlwdG9ycw0K KyAqIGFsd2F5cywgTm8gY2hhaW5zLiBJZiB0aGF0IGNoYW5nZXMsIHdlIHdvdWxkIG5lZWQgdG8g aW5jcmVtZW50IG51bV9mcmVlDQorICogYXMgd2UgYWR2ZXJ0aXNlIGJhY2sgdG8gdGhlIGtlcm5l bCB0aGUgZnJlZSBkZXNjcmlwdG9ycyBieSB0aGUgbGVuZ3RoIG9mIHRoZSBjaGFpbi4NCisgKg0K KyAqIFJldHVybjogcG9pbnRlciB0byB0aGUgcGFja2V0IGJ1ZmZlciwgb3IgTlVMTCBpZiBubyBk YXRhIGlzIGF2YWlsYWJsZQ0KKyAqLw0KK3N0YXRpYyB2b2lkICpjb25zdW1lX29uZV9yeF9kZXNj cmlwdG9yKHNpemVfdCAqbGVuKQ0KK3sNCisJc3RydWN0IHZyaW5nX3VzZWRfcGFzdGEgKnVzZWQg PSAmdnJpbmdfdXNlZF9hbGxbVkhPU1RfQVZBSUxfUV9JRFhdOw0KKwl1aW50MTZfdCB1c2VkX2lk eCwgbGFzdF91c2VkOw0KKwl1aW50MzJfdCBpOw0KKw0KKwl1c2VkX2lkeCA9IGxlMTZ0b2godXNl ZC0+aWR4KTsNCisNCisJc21wX3JtYigpOw0KKw0KKwkvKiBJZiB0aGUga2VybmVsJ3MgdXNlZCBp bmRleCBtYXRjaGVzIG91cnMsIHdlJ3ZlIGNvbnN1bWVkIGV2ZXJ5dGhpbmcNCisJICogaXQgaGFz IHBvc3RlZA0KKwkgKi8NCisJaWYgKHVzZWRfaWR4ID09IHZob3N0X3ZxX3N0YXRlW1ZIT1NUX0FW QUlMX1FfSURYXS5sYXN0X3VzZWRfaWR4KSB7DQorCQkqbGVuID0gMDsNCisJCXJldHVybiBOVUxM Ow0KKwl9DQorDQorCWxhc3RfdXNlZCA9IHZob3N0X3ZxX3N0YXRlW1ZIT1NUX0FWQUlMX1FfSURY XS5sYXN0X3VzZWRfaWR4ICUgVkhPU1RfTkRFU0NTOw0KKwlpID0gbGUzMnRvaCh1c2VkLT5yaW5n W2xhc3RfdXNlZF0uaWQpOw0KKwkqbGVuID0gbGUzMnRvaCh1c2VkLT5yaW5nW2xhc3RfdXNlZF0u bGVuKTsNCisNCisJaWYgKGkgIT0gbGFzdF91c2VkKQ0KKwkJZGllKCJ2aG9zdDogaWQgJXUgYXQg dXNlZCBwb3NpdGlvbiAldSIsIGksIGxhc3RfdXNlZCk7DQorDQorCS8qIFRoZSBrZXJuZWwgaGFz IHF1ZXVlZCBmb3IgdXMgc29tZXRoaW5nIHdlIGNhbm5vdCByZWNlaXZlICovDQorCWlmICgqbGVu ID4gVkhPU1RfREVTQ19CWVRFUykNCisJCWRpZSgidmhvc3Q6IGlkICV1IGxlbiAlenUgPiAlenUi LCBpLCAqbGVuLA0KKwkJICAgIChzaXplX3QpVkhPU1RfREVTQ19CWVRFUyk7DQorDQorCXZob3N0 X3ZxX3N0YXRlW1ZIT1NUX0FWQUlMX1FfSURYXS5sYXN0X3VzZWRfaWR4Kys7DQorCXZob3N0X3Zx X3N0YXRlW1ZIT1NUX0FWQUlMX1FfSURYXS5udW1fZnJlZSsrOw0KKw0KKwlyZXR1cm4gcGt0X2J1 ZiArIGkgKiBWSE9TVF9ERVNDX0JZVEVTOw0KK30NCisNCisvKioNCisgKiB0YXBfdmhvc3RfaW5w dXQoKSAtIEhhbmRsZSBmcmFtZXMgdGhlIGtlcm5lbCB3cm90ZSB0byB0aGUgZnJvbS1ndWVzdCBx dWV1ZQ0KKyAqIEBjOgkJRXhlY3V0aW9uIGNvbnRleHQNCisgKiBAcmVmOgllcG9sbCByZWZlcmVu Y2UNCisgKiBAbm93OglDdXJyZW50IHRpbWVzdGFtcA0KKyAqLw0KK3ZvaWQgdGFwX3Zob3N0X2lu cHV0KHN0cnVjdCBjdHggKmMsIHVuaW9uIGVwb2xsX3JlZiByZWYsDQorCQkgICAgIGNvbnN0IHN0 cnVjdCB0aW1lc3BlYyAqbm93KQ0KK3sNCisJc3RydWN0IHZpcnRpb19uZXRfaGRyX21yZ19yeGJ1 ZiAqaGRyOw0KKwlzdHJ1Y3QgaW92X3RhaWwgZGF0YTsNCisJc2l6ZV90IGxlbjsNCisNCisJZXZl bnRmZF9yZWFkKHJlZi5mZCwgKGV2ZW50ZmRfdFtdKXsgMCB9KTsNCisNCisJdGFwX2ZsdXNoX3Bv b2xzKCk7DQorDQorCXdoaWxlICgoaGRyID0gY29uc3VtZV9vbmVfcnhfZGVzY3JpcHRvcigmbGVu KSkpIHsNCisJCS8qIGEgdmFsaWQgcmVjZWl2ZSBpcyBvbmUgd2hlcmUgdGhlcmUgaXMgYSB2aXJ0 aW8gbmV0IGhlYWRlciBmb2xsb3dlZCBieSBhdGxlYXN0IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSBi eXRlcyAqLw0KKwkJaWYgKGxlbiA8IChzaXplb2YoKmhkcikgKyBzaXplb2Yoc3RydWN0IGV0aGhk cikpKSB7DQorCQkJd2Fybigidmhvc3Q6IGludmFsaWQgbGVuICVsdSIsIGxlbik7DQorCQkJY29u dGludWU7DQorCQl9DQorDQorCQkvKiBTa2lwIG92ZXIgdGhlIHZuZXQgaGVhZGVyLCBhZGQgdGhl IHBhY2tldCB3aXRob3V0IGl0ICovDQorCQlkYXRhID0gSU9WX1RBSUxfRlJPTV9CVUYoKHZvaWQg KikoaGRyICsgMSksDQorCQkJCQkgbGVuIC0gc2l6ZW9mKCpoZHIpLCAwKTsNCisJCXRhcF9hZGRf cGFja2V0KGMsICZkYXRhLCBub3cpOw0KKwl9DQorDQorCXRhcF9oYW5kbGVyKGMsIG5vdyk7DQor CXZob3N0X3J4X2Rlc2NyaXB0b3JfaGFuZG9mZihjKTsNCit9DQorDQogLyoqDQogICogdGFwX25z X3R1bigpIC0gR2V0IHR1bnRhcCBmZCBpbiBuYW1lc3BhY2UNCiAgKiBAYzoJCUV4ZWN1dGlvbiBj b250ZXh0DQpAQCAtMTU1NSwxMiArMTY0NCwzMyBAQCBzdGF0aWMgaW50IHRhcF9uc190dW4odm9p ZCAqYXJnKQ0KICAqLw0KIHN0YXRpYyB2b2lkIHRhcF9zb2NrX3R1bl9pbml0KHN0cnVjdCBjdHgg KmMpDQogew0KKwlpbnQgaTsNCisNCiAJaWYgKCFjLT5zcGxpY2Vfb25seSkgew0KIAkJTlNfQ0FM TCh0YXBfbnNfdHVuLCBjKTsNCiAJCWlmIChjLT5mZF90YXAgPT0gLTEpDQogCQkJZGllKCJGYWls ZWQgdG8gc2V0IHVwIHRhcCBkZXZpY2UgaW4gbmFtZXNwYWNlIik7DQogCX0NCg0KKwkvKiBOb3Ro aW5nIGVsc2UgaGVyZSBydW5zIGlmIHRoaXMgZmFpbHM6IGMtPnZob3N0LmZkIHN0YXlzIC0xIGFu ZCB3ZQ0KKwkgKiBjYXJyeSBvbiByZWFkaW5nIHRoZSB0YXAgZmQgb3Vyc2VsdmVzLCB1bmxlc3Mg YWNjZWxlcmF0aW9uIHdhcw0KKwkgKiBleHBsaWNpdGx5IGFza2VkIGZvcg0KKwkgKi8NCisJaWYg KGMtPnZob3N0Lm1vZGUgIT0gVkhPU1RfTU9ERV9PRkYgJiYgdmhvc3Rfc2V0dXBfbmV0KGMpIDwg MCAmJg0KKwkgICAgYy0+dmhvc3QubW9kZSA9PSBWSE9TVF9NT0RFX09OKQ0KKwkJZGllKCJ2aG9z dC1uZXQgaXMgbm90IGF2YWlsYWJsZSIpOw0KKw0KKwlpZiAoYy0+dmhvc3QuZmQgIT0gLTEpIHsN CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGMtPnZob3N0LnZxKTsgaSsrKQ0KKwkJCXZo b3N0X3NldHVwX2V2ZW50ZmRzKGMsIGkpOw0KKw0KKwkJaWYgKHZob3N0X3NldHVwX21lbW9yeV90 YWJsZShjKSA8IDApDQorCQkJZGllX3BlcnJvcigiVkhPU1RfU0VUX01FTV9UQUJMRSBpb2N0bCBm YWlsZWQiKTsNCisNCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGMtPnZob3N0LnZxKTsg aSsrKQ0KKwkJCXZob3N0X3NldF92cmluZyhjLCBpLCBjLT5mZF90YXApOw0KKwl9DQorDQogCXBh c3RhX25zX2NvbmYoYyk7DQoNCiAJaWYgKCFjLT5zcGxpY2Vfb25seSkNCmRpZmYgLS1naXQgYS90 YXAuaCBiL3RhcC5oDQppbmRleCBmOGMzMGUyLi4wZjFmN2EzIDEwMDY0NA0KLS0tIGEvdGFwLmgN CisrKyBiL3RhcC5oDQpAQCAtNDgsNiArNDgsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFwX2hk cl91cGRhdGUoc3RydWN0IHRhcF9oZHIgKnRoZHIsIHNpemVfdCBsMmxlbikNCiAJdGhkci0+dm5l dF9sZW4gPSBodG9ubChsMmxlbik7DQogfQ0KDQordm9pZCB0YXBfdmhvc3RfaW5wdXQoc3RydWN0 IGN0eCAqYywgdW5pb24gZXBvbGxfcmVmIHJlZiwNCisJCSAgICAgY29uc3Qgc3RydWN0IHRpbWVz cGVjICpub3cpOw0KIHVuc2lnbmVkIGxvbmcgdGFwX2wyX21heF9sZW4oY29uc3Qgc3RydWN0IGN0 eCAqYyk7DQogdm9pZCAqdGFwX3B1c2hfbDJoKGNvbnN0IHN0cnVjdCBjdHggKmMsIHZvaWQgKmJ1 ZiwNCiAJCSAgIGNvbnN0IHZvaWQgKnNyY19tYWMsIHVpbnQxNl90IHByb3RvKTsNCi0tDQoyLjM5 LjUgKEFwcGxlIEdpdC0xNTQpDQoNCg0KRnJvbSBkYTdlZTM3NGVjN2Q3NmRkYTk3MWZhZmZlYmI1 OWE3MGNiOWRmZjdjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJvbTogQW1tYXIgWWFzc2Vy IDxhZXJvc291bmQxNjFAZ21haWwuY29tPg0KRGF0ZTogRnJpLCA0IFNlcCAyMDI2IDEzOjMzOjMx ICswMDAwDQpTdWJqZWN0OiBbUEFUQ0ggdjIgNS83XSB0YXAsIHRjcCwgdWRwOiBQcmVwYXJlIHRo ZSB0by1ndWVzdCBwYXRoIGZvciB2aG9zdC1uZXQNCk1JTUUtVmVyc2lvbjogMS4wDQpDb250ZW50 LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgNCkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rp bmc6IDhiaXQNClRvOiBwYXNzdC1kZXZAcGFzc3QudG9wDQpDYzogPT9VVEYtOD9xP0V1Z2VuaW89 MjBQPUMzPUE5cmV6Pz0gPGVwZXJlem1hQHJlZGhhdC5jb20+DQoNCkZyYW1lcyBzZW50IHRocm91 Z2ggdmhvc3QtbmV0IGNhcnJ5IGEgdmlydGlvLW5ldCBoZWFkZXIgd2hlcmUgcGFzdGEncw0KdGFw IGhlYWRlciB3b3VsZCBvdGhlcndpc2UgZ28sIHRoaXMgbmVjZXNzaXRhdGVzIHRoZSBmb2xsb3dp bmcgdHdvDQpjaGFuZ2VzOg0KDQotIHVkcF90YXBfcHJlcGFyZSgpIGhhcyBiZWVuIG1vZGlmaWVk IHRvIHRha2UgYSBjb250ZXh0IHBhcmFtZXRlciBzbyBpdA0KICBjYW4gY2hlY2sgaWYgdmhvc3Qg aXMgc2V0IHVwLiBPbmx5IGlmIGl0IGlzbid0IHNob3VsZCB0YXBfaGRyX3VwZGF0ZQ0KICBiZSBj YWxsZWQgYmVjYXVzZSB0aGlzIG1lYW5zIHRoYXQgdGhlIGFjdGl2ZSB1bmlvbiB2YXJpYW50IGlz IHZuZXRfbGVuDQogIG5vIHRoZSB2aXJ0aW8gbmV0IGhlYWRlcg0KLSB0YXBfbDJfb2Zmc2V0KCkg YSBuZXcgaGVscGVyLCBoYXMgYmVlbiBpbnRyb2R1Y2VkIHdoaWNoIHRlbGxzDQogIHBjYXBfbXVs dGlwbGUoKSBob3cgbWFueSBieXRlcyBwcmVjZWRlIHRoZSBMMiBmcmFtZSwgd2hpY2ggbm93IHZh cmllcw0KICB3aXRoIHZob3N0IGFzIHdlbGwgYXMgd2l0aCB0aGUgbW9kZQ0KDQp0YXBfc2VuZF9z aW5nbGUoKSBjYWxscyB0YXBfc2VuZF9mcmFtZXNfcGFzc3QoKSBhbmQNCnRhcF9zZW5kX2ZyYW1l c19wYXN0YSgpIGRpcmVjdGx5IHJhdGhlciB0aGFuIGdvaW5nIHRocm91Z2gNCnRhcF9zZW5kX2Zy YW1lcygpLiBJdHMgY2FsbGVycyAtIEFSUCwgVENQIHJlc2V0cywgYW5kIERIQ1AsIERIQ1B2Niwg TkRQDQphbmQgSUNNUCB2aWEgdGFwX3VkcCpfc2VuZCgpL3RhcF9pY21wKl9zZW5kKCkgLSBidWls ZCB0aGVpciBmcmFtZSBpbiBhDQpidWZmZXIgb24gdGhlIHN0YWNrLCBub3QgaW4gdGhlIGJ1ZmZl cnMgcmVnaXN0ZXJlZCB3aXRoIHZob3N0LW5ldC4gVGhlDQprZXJuZWwgY2FuIG9ubHkgcmVhZCBm cm9tIHJlZ2lzdGVyZWQgbWVtb3J5LCBzbyB0aGVzZSBwcm90b2NvbHMgY2FuDQpuZXZlciB0YWtl IHRoZSB2aG9zdCBwYXRoIGFuZCBzaG91bGRuJ3QgYmUgdGVzdGVkIGZvciBpdCBvbiBldmVyeSBm cmFtZS4NCg0KU2lnbmVkLW9mZi1ieTogRXVnZW5pbyBQw6lyZXogPGVwZXJlem1hQHJlZGhhdC5j b20+DQpTaWduZWQtb2ZmLWJ5OiBBbW1hciBZYXNzZXIgPGFlcm9zb3VuZDE2MUBnbWFpbC5jb20+ DQotLS0NCiB0YXAuYyAgICAgfCAxMTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLS0tLS0tLS0tDQogdGNwX2J1Zi5jIHwgIDEyICsrKystLQ0KIHVkcC5jICAg ICB8ICAyNyArKysrKysrKystLS0tDQogMyBmaWxlcyBjaGFuZ2VkLCA5OSBpbnNlcnRpb25zKCsp LCA1MiBkZWxldGlvbnMoLSkNCg0KZGlmZiAtLWdpdCBhL3RhcC5jIGIvdGFwLmMNCmluZGV4IGE1 ZmRlZTguLmZkNTAwZjEgMTAwNjQ0DQotLS0gYS90YXAuYw0KKysrIGIvdGFwLmMNCkBAIC0xMjMs NDUgKzEyMyw2IEBAIHVuc2lnbmVkIGxvbmcgdGFwX2wyX21heF9sZW4oY29uc3Qgc3RydWN0IGN0 eCAqYykNCiAJcmV0dXJuIDA7IC8qIFVucmVhY2hhYmxlLCBmb3IgY3BwY2hlY2sncyBzYWtlICov DQogfQ0KDQotLyoqDQotICogdGFwX3NlbmRfc2luZ2xlKCkgLSBTZW5kIGEgc2luZ2xlIGZyYW1l DQotICogQGM6CQlFeGVjdXRpb24gY29udGV4dA0KLSAqIEBkYXRhOglQYWNrZXQgYnVmZmVyDQot ICogQGwybGVuOglUb3RhbCBMMiBwYWNrZXQgbGVuZ3RoDQotICovDQotdm9pZCB0YXBfc2VuZF9z aW5nbGUoY29uc3Qgc3RydWN0IGN0eCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGwybGVu KQ0KLXsNCi0JdWludDhfdCBwYWRkZWRbRVRIX1pMRU5dID0geyAwIH07DQotCXN0cnVjdCBpb3Zl YyBpb3ZbMl07DQotCXNpemVfdCBpb3ZjbnQgPSAwOw0KLQl1aW50MzJfdCB2bmV0X2xlbjsNCi0N Ci0JaWYgKGwybGVuIDwgRVRIX1pMRU4pIHsNCi0JCW1lbWNweShwYWRkZWQsIGRhdGEsIGwybGVu KTsNCi0JCWRhdGEgPSBwYWRkZWQ7DQotCQlsMmxlbiA9IEVUSF9aTEVOOw0KLQl9DQotDQotCXZu ZXRfbGVuID0gaHRvbmwobDJsZW4pOw0KLQ0KLQlzd2l0Y2ggKGMtPm1vZGUpIHsNCi0JY2FzZSBN T0RFX1BBU1NUOg0KLQkJaW92W2lvdmNudF0gPSBJT1ZfT0ZfTFZBTFVFKHZuZXRfbGVuKTsNCi0J CWlvdmNudCsrOw0KLQkJLyogZmFsbCB0aHJvdWdoICovDQotCWNhc2UgTU9ERV9QQVNUQToNCi0J CWlvdltpb3ZjbnRdLmlvdl9iYXNlID0gKHZvaWQgKilkYXRhOw0KLQkJaW92W2lvdmNudF0uaW92 X2xlbiA9IGwybGVuOw0KLQkJaW92Y250Kys7DQotDQotCQl0YXBfc2VuZF9mcmFtZXMoYywgaW92 LCBpb3ZjbnQsIDEpOw0KLQkJYnJlYWs7DQotCWNhc2UgTU9ERV9WVToNCi0JCXZ1X3NlbmRfc2lu Z2xlKGMsIGRhdGEsIGwybGVuKTsNCi0JCWJyZWFrOw0KLQl9DQotfQ0KLQ0KIC8qKg0KICAqIHRh cF9wdXNoX2wyaCgpIC0gQnVpbGQgYW4gTDIgaGVhZGVyIGZvciBhbiBpbmJvdW5kIHBhY2tldA0K ICAqIEBjOgkJRXhlY3V0aW9uIGNvbnRleHQNCkBAIC00OTcsNiArNDU4LDc2IEBAIHN0YXRpYyBz aXplX3QgdGFwX3NlbmRfZnJhbWVzX3Bhc3N0KGNvbnN0IHN0cnVjdCBjdHggKmMsDQogCXJldHVy biBpIC8gYnVmc19wZXJfZnJhbWU7DQogfQ0KDQorLyoqDQorICogdGFwX2wyX29mZnNldCgpIC0g QmFja2VuZCBzcGVjaWZpYyBoZWFkZXIgc2l6ZSBwcmVjZWRpbmcgZWFjaCBMMiBmcmFtZQ0KKyAq IEBjOgkJRXhlY3V0aW9uIGNvbnRleHQNCisgKg0KKyAqIFJldHVybjogb2Zmc2V0IG9mIHRoZSBM MiBmcmFtZSB3aXRoaW4gZWFjaCBmcmFtZSdzIGZpcnN0IGJ1ZmZlcg0KKyAqLw0KK3N0YXRpYyBz aXplX3QgdGFwX2wyX29mZnNldChjb25zdCBzdHJ1Y3QgY3R4ICpjKQ0KK3sNCisJaWYgKGMtPm1v ZGUgPT0gTU9ERV9QQVNTVCkNCisJCXJldHVybiBzaXplb2YodWludDMyX3QpOwkvKiB2bmV0X2xl biAqLw0KKw0KKwlpZiAoYy0+dmhvc3QuZmQgIT0gLTEpDQorCQlyZXR1cm4gVk5FVF9ITEVOOw0K Kw0KKwlyZXR1cm4gMDsNCit9DQorDQorLyoqDQorICogdGFwX3NlbmRfc2luZ2xlKCkgLSBTZW5k IGEgc2luZ2xlIGZyYW1lDQorICogQGM6CQlFeGVjdXRpb24gY29udGV4dA0KKyAqIEBkYXRhOglQ YWNrZXQgYnVmZmVyDQorICogQGwybGVuOglUb3RhbCBMMiBwYWNrZXQgbGVuZ3RoDQorICovDQor dm9pZCB0YXBfc2VuZF9zaW5nbGUoY29uc3Qgc3RydWN0IGN0eCAqYywgY29uc3Qgdm9pZCAqZGF0 YSwgc2l6ZV90IGwybGVuKQ0KK3sNCisJdWludDhfdCBwYWRkZWRbRVRIX1pMRU5dID0geyAwIH07 DQorCXN0cnVjdCBpb3ZlYyBpb3ZbMl07DQorCXVpbnQzMl90IHZuZXRfbGVuOw0KKwlzaXplX3Qg aW92Y250ID0gMDsNCisJc2l6ZV90IG0gPSAwOw0KKw0KKwlpZiAobDJsZW4gPCBFVEhfWkxFTikg ew0KKwkJbWVtY3B5KHBhZGRlZCwgZGF0YSwgbDJsZW4pOw0KKwkJZGF0YSA9IHBhZGRlZDsNCisJ CWwybGVuID0gRVRIX1pMRU47DQorCX0NCisNCisJdm5ldF9sZW4gPSBodG9ubChsMmxlbik7DQor DQorCXN3aXRjaCAoYy0+bW9kZSkgew0KKwljYXNlIE1PREVfUEFTU1Q6DQorCQkvKiBjcmVhdGUg YW4gaW92IGZvciB0aGUgbGVuZ3RoICovDQorCQlpb3ZbaW92Y250XSA9IElPVl9PRl9MVkFMVUUo dm5ldF9sZW4pOw0KKwkJaW92Y250Kys7DQorCQkvKiBjcmVhdGUgdGhlIGRhdGEgaW92ICovDQor CQlpb3ZbaW92Y250XS5pb3ZfYmFzZSA9ICh2b2lkICopZGF0YTsNCisJCWlvdltpb3ZjbnRdLmlv dl9sZW4gPSBsMmxlbjsNCisJCWlvdmNudCsrOw0KKw0KKwkJbSA9IHRhcF9zZW5kX2ZyYW1lc19w YXNzdChjLCBpb3YsIGlvdmNudCwgMSk7DQorCQlicmVhazsNCisJY2FzZSBNT0RFX1BBU1RBOg0K KwkJLyogZG9uJ3QgY3JlYXRlIGEgbGVuZ3RoIGlvdiBpbiB0aGUgY2FzZSBvZiBwYXN0YSAqLw0K KwkJaW92W2lvdmNudF0uaW92X2Jhc2UgPSAodm9pZCAqKWRhdGE7DQorCQlpb3ZbaW92Y250XS5p b3ZfbGVuID0gbDJsZW47DQorCQlpb3ZjbnQrKzsNCisNCisJCW0gPSB0YXBfc2VuZF9mcmFtZXNf cGFzdGEoYywgaW92LCBpb3ZjbnQsIDEpOw0KKwkJYnJlYWs7DQorCWNhc2UgTU9ERV9WVToNCisJ CXZ1X3NlbmRfc2luZ2xlKGMsIGRhdGEsIGwybGVuKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwlp ZiAoIW0pDQorCQlkZWJ1ZygidGFwOiBmYWlsZWQgdG8gc2VuZCBhIHNpbmdsZSBmcmFtZSIpOw0K Kw0KKwlwY2FwX211bHRpcGxlKGlvdiwgaW92Y250LCBtLCB0YXBfbDJfb2Zmc2V0KGMpKTsNCit9 DQorDQogLyoqDQogICogdGFwX3NlbmRfZnJhbWVzKCkgLSBTZW5kIG91dCBtdWx0aXBsZSBwcmVw YXJlZCBmcmFtZXMNCiAgKiBAYzoJCQlFeGVjdXRpb24gY29udGV4dA0KQEAgLTUzNyw4ICs1Njgs NyBAQCBzaXplX3QgdGFwX3NlbmRfZnJhbWVzKGNvbnN0IHN0cnVjdCBjdHggKmMsIGNvbnN0IHN0 cnVjdCBpb3ZlYyAqaW92LA0KIAkJZGVidWcoInRhcDogZmFpbGVkIHRvIHNlbmQgJXp1IGZyYW1l cyBvZiAlenUiLA0KIAkJICAgICAgbmZyYW1lcyAtIG0sIG5mcmFtZXMpOw0KDQotCXBjYXBfbXVs dGlwbGUoaW92LCBidWZzX3Blcl9mcmFtZSwgbSwNCi0JCSAgICAgIGMtPm1vZGUgPT0gTU9ERV9Q QVNTVCA/IHNpemVvZih1aW50MzJfdCkgOiAwKTsNCisJcGNhcF9tdWx0aXBsZShpb3YsIGJ1ZnNf cGVyX2ZyYW1lLCBtLCB0YXBfbDJfb2Zmc2V0KGMpKTsNCg0KIAlyZXR1cm4gbTsNCiB9DQpkaWZm IC0tZ2l0IGEvdGNwX2J1Zi5jIGIvdGNwX2J1Zi5jDQppbmRleCBkZDgwMzg0Li40OTNjNWM5IDEw MDY0NA0KLS0tIGEvdGNwX2J1Zi5jDQorKysgYi90Y3BfYnVmLmMNCkBAIC0yMSw2ICsyMSw3IEBA DQogI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4NCg0KICNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPg0K KyNpbmNsdWRlIDxsaW51eC92aXJ0aW9fbmV0Lmg+DQoNCiAjaW5jbHVkZSAidXRpbC5oIg0KICNp bmNsdWRlICJpcC5oIg0KQEAgLTQ0LDcgKzQ1LDcgQEANCiAvKiBFdGhlcm5ldCBoZWFkZXIgZm9y IElQdjQgYW5kIElQdjYgZnJhbWVzICovDQogc3RhdGljIHN0cnVjdCBldGhoZHIJCXRjcF9ldGhf aGRyW1RDUF9GUkFNRVNfTUVNXTsNCg0KLXN0YXRpYyBzdHJ1Y3QgdGFwX2hkcgkJdGNwX3BheWxv YWRfdGFwX2hkcltUQ1BfRlJBTUVTX01FTV07DQorc3RhdGljIHN0cnVjdCB2aXJ0aW9fbmV0X2hk cl9tcmdfcnhidWYgdGNwX3BheWxvYWRfdGFwX2hkcltUQ1BfRlJBTUVTX01FTV07DQoNCiAvKiBJ UCBoZWFkZXJzIGZvciBJUHY0IGFuZCBJUHY2ICovDQogc3RhdGljIHN0cnVjdCBpcGhkcgkJdGNw NF9wYXlsb2FkX2lwW1RDUF9GUkFNRVNfTUVNXTsNCkBAIC0xMTMsNyArMTE0LDcgQEAgdm9pZCB0 Y3Bfc29ja19pb3ZfaW5pdChjb25zdCBzdHJ1Y3QgY3R4ICpjKQ0KIAlmb3IgKGkgPSAwOyBpIDwg VENQX0ZSQU1FU19NRU07IGkrKykgew0KIAkJc3RydWN0IGlvdmVjICppb3YgPSB0Y3BfbDJfaW92 W2ldOw0KDQotCQlpb3ZbVENQX0lPVl9UQVBdID0gdGFwX2hkcl9pb3YoYywgJnRjcF9wYXlsb2Fk X3RhcF9oZHJbaV0pOw0KKwkJaW92W1RDUF9JT1ZfVEFQXSA9IHRhcF9oZHJfaW92KGMsIChzdHJ1 Y3QgdGFwX2hkciAqKSZ0Y3BfcGF5bG9hZF90YXBfaGRyW2ldKTsNCiAJCWlvdltUQ1BfSU9WX0VU SF0uaW92X2xlbiA9IHNpemVvZihzdHJ1Y3QgZXRoaGRyKTsNCiAJCWlvdltUQ1BfSU9WX1BBWUxP QURdLmlvdl9iYXNlID0gJnRjcF9wYXlsb2FkW2ldOw0KIAkJaW92W1RDUF9JT1ZfRVRIX1BBRF0u aW92X2Jhc2UgPSBldGhfcGFkOw0KQEAgLTIxNiw3ICsyMTcsMTIgQEAgc3RhdGljIHZvaWQgdGNw X2wyX2J1Zl9maWxsX2hlYWRlcnMoY29uc3Qgc3RydWN0IGN0eCAqYywNCg0KIAlsMmxlbiA9IHRj cF9maWxsX2hlYWRlcnMoYywgY29ubiwgZWgsIGlwNGgsIGlwNmgsIHRoLCAmdGFpbCwNCiAJCQkJ IGlvdl90YWlsX3NpemUoJnRhaWwpLCBjc3VtX2ZsYWdzLCBzZXEpOw0KLQl0YXBfaGRyX3VwZGF0 ZSh0YXBoLCBsMmxlbik7DQorDQorCS8qIFdpdGggdmhvc3QtbmV0IHRoaXMgYnVmZmVyIGhvbGRz IGEgdmlydGlvLW5ldCBoZWFkZXIsIHdoaWNoIGEgdGFwDQorCSAqIG9uZSBtdXN0IG5vdCBiZSB3 cml0dGVuIG92ZXINCisJICovDQorCWlmIChjLT52aG9zdC5mZCA9PSAtMSkNCisJCXRhcF9oZHJf dXBkYXRlKHRhcGgsIGwybGVuKTsNCiB9DQoNCiAvKioNCmRpZmYgLS1naXQgYS91ZHAuYyBiL3Vk cC5jDQppbmRleCBhNDM1NWExLi5hZmUxYzdmIDEwMDY0NA0KLS0tIGEvdWRwLmMNCisrKyBiL3Vk cC5jDQpAQCAtMTAzLDYgKzEwMyw3IEBADQogI2luY2x1ZGUgPHRpbWUuaD4NCiAjaW5jbHVkZSA8 YXJwYS9pbmV0Lmg+DQogI2luY2x1ZGUgPGxpbnV4L2VycnF1ZXVlLmg+DQorI2luY2x1ZGUgPGxp bnV4L3ZpcnRpb19uZXQuaD4NCg0KICNpbmNsdWRlICJjaGVja3N1bS5oIg0KICNpbmNsdWRlICJ1 dGlsLmgiDQpAQCAtMTQ5LDEyICsxNTAsMTYgQEAgc3RhdGljIHN0cnVjdCBldGhoZHIgdWRwX2V0 aF9oZHJbVURQX01BWF9GUkFNRVNdOw0KICAqIHN0cnVjdCB1ZHBfbWV0YV90IC0gUHJlLWNvb2tl ZCBoZWFkZXJzIGZvciBVRFAgcGFja2V0cw0KICAqIEBpcDZoOglQcmUtZmlsbGVkIElQdjYgaGVh ZGVyIChleGNlcHQgZm9yIHBheWxvYWRfbGVuIGFuZCBhZGRyZXNzZXMpDQogICogQGlwNGg6CVBy ZS1maWxsZWQgSVB2NCBoZWFkZXIgKGV4Y2VwdCBmb3IgdG90X2xlbiBhbmQgc2FkZHIpDQotICog QHRhcGg6CVRhcCBiYWNrZW5kIHNwZWNpZmljIGhlYWRlcg0KKyAqIEB2bmV0X2hkcjoJdmlydGlv LW5ldCBoZWFkZXIsIHVzZWQgd2hlbiBzZW5kaW5nIHRocm91Z2ggdmhvc3QtbmV0DQorICogQHRh cGg6CVRhcCBiYWNrZW5kIHNwZWNpZmljIGhlYWRlciwgdXNlZCBvdGhlcndpc2UNCiAgKi8NCiBz dGF0aWMgc3RydWN0IHVkcF9tZXRhX3Qgew0KIAlzdHJ1Y3QgaXB2NmhkciBpcDZoOw0KIAlzdHJ1 Y3QgaXBoZHIgaXA0aDsNCi0Jc3RydWN0IHRhcF9oZHIgdGFwaDsNCisJdW5pb24gew0KKwkJc3Ry dWN0IHZpcnRpb19uZXRfaGRyX21yZ19yeGJ1ZiB2bmV0X2hkcjsNCisJCXN0cnVjdCB0YXBfaGRy IHRhcGg7DQorCX07DQogfQ0KICNpZmRlZiBfX0FWWDJfXw0KIF9fYXR0cmlidXRlX18gKChhbGln bmVkKDMyKSkpDQpAQCAtMzU2LDEzICszNjEsMTUgQEAgc3RhdGljIHZvaWQgdWRwX3RhcF9wYWQo c3RydWN0IGlvdmVjICppb3YpDQoNCiAvKioNCiAgKiB1ZHBfdGFwX3ByZXBhcmUoKSAtIENvbnZl cnQgb25lIGRhdGFncmFtIGludG8gYSB0YXAgZnJhbWUNCisgKiBAYzogICAgICBFeGVjdXRpb24g Y29udGV4dA0KICAqIEBtbWg6CVJlY2VpdmluZyBtbXNnaGRyIGFycmF5DQogICogQGlkeDoJSW5k ZXggb2YgdGhlIGRhdGFncmFtIHRvIHByZXBhcmUNCiAgKiBAdGFwX29tYWM6CU1BQyBhZGRyZXNz IG9mIHJlbW90ZSBlbmRwb2ludCBhcyBzZWVuIGZyb20gdGhlIGd1ZXN0DQogICogQHRvc2lkZToJ Rmxvd3NpZGUgZm9yIGRlc3RpbmF0aW9uIHNpZGUNCiAgKiBAbm9fdWRwX2NzdW06IERvIG5vdCBz ZXQgVURQIGNoZWNrc3VtDQogICovDQotc3RhdGljIHZvaWQgdWRwX3RhcF9wcmVwYXJlKGNvbnN0 IHN0cnVjdCBtbXNnaGRyICptbWgsDQorc3RhdGljIHZvaWQgdWRwX3RhcF9wcmVwYXJlKGNvbnN0 IHN0cnVjdCBjdHggKmMsDQorCQkJCWNvbnN0IHN0cnVjdCBtbXNnaGRyICptbWgsDQogCQkJICAg IHVuc2lnbmVkIGludCBpZHgsDQogCQkJICAgIGNvbnN0IHVpbnQ4X3QgKnRhcF9vbWFjLA0KIAkJ CSAgICBjb25zdCBzdHJ1Y3QgZmxvd3NpZGUgKnRvc2lkZSwNCkBAIC0zODQsOCArMzkxLDEwIEBA IHN0YXRpYyB2b2lkIHVkcF90YXBfcHJlcGFyZShjb25zdCBzdHJ1Y3QgbW1zZ2hkciAqbW1oLA0K IAkJdWRwX3VwZGF0ZV9oZHI2KCZibS0+aXA2aCwgdWgsICZwYXlsb2FkLCB0b3NpZGUsDQogCQkJ ICAgICAgICBtbWhbaWR4XS5tc2dfbGVuLCBub191ZHBfY3N1bSk7DQoNCi0JCWwybGVuID0gTUFY KGw0bGVuICsgc2l6ZW9mKGJtLT5pcDZoKSArIEVUSF9ITEVOLCBFVEhfWkxFTik7DQotCQl0YXBf aGRyX3VwZGF0ZSgmYm0tPnRhcGgsIGwybGVuKTsNCisJCWlmIChjLT5tb2RlID09IE1PREVfUEFT U1QpIHsNCisJCQlsMmxlbiA9IE1BWChsNGxlbiArIHNpemVvZihibS0+aXA2aCkgKyBFVEhfSExF TiwgRVRIX1pMRU4pOw0KKwkJCXRhcF9oZHJfdXBkYXRlKCZibS0+dGFwaCwgbDJsZW4pOw0KKwkJ fQ0KDQogCQllaC0+aF9wcm90byA9IGh0b25zX2NvbnN0YW50KEVUSF9QX0lQVjYpOw0KIAkJKCp0 YXBfaW92KVtVRFBfSU9WX0lQXSA9IElPVl9PRl9MVkFMVUUoYm0tPmlwNmgpOw0KQEAgLTM5Myw4 ICs0MDIsMTAgQEAgc3RhdGljIHZvaWQgdWRwX3RhcF9wcmVwYXJlKGNvbnN0IHN0cnVjdCBtbXNn aGRyICptbWgsDQogCQl1ZHBfdXBkYXRlX2hkcjQoJmJtLT5pcDRoLCB1aCwgJnBheWxvYWQsIHRv c2lkZSwNCiAJCQkgICAgICAgIG1taFtpZHhdLm1zZ19sZW4sIG5vX3VkcF9jc3VtKTsNCg0KLQkJ bDJsZW4gPSBNQVgobDRsZW4gKyBzaXplb2YoYm0tPmlwNGgpICsgRVRIX0hMRU4sIEVUSF9aTEVO KTsNCi0JCXRhcF9oZHJfdXBkYXRlKCZibS0+dGFwaCwgbDJsZW4pOw0KKwkJaWYgKGMtPm1vZGUg PT0gTU9ERV9QQVNTVCkgew0KKwkJCWwybGVuID0gTUFYKGw0bGVuICsgc2l6ZW9mKGJtLT5pcDRo KSArIEVUSF9ITEVOLCBFVEhfWkxFTik7DQorCQkJdGFwX2hkcl91cGRhdGUoJmJtLT50YXBoLCBs Mmxlbik7DQorCQl9DQoNCiAJCWVoLT5oX3Byb3RvID0gaHRvbnNfY29uc3RhbnQoRVRIX1BfSVAp Ow0KIAkJKCp0YXBfaW92KVtVRFBfSU9WX0lQXSA9IElPVl9PRl9MVkFMVUUoYm0tPmlwNGgpOw0K QEAgLTg2Nyw3ICs4NzgsNyBAQCBzdGF0aWMgdm9pZCB1ZHBfYnVmX3NvY2tfdG9fdGFwKGNvbnN0 IHN0cnVjdCBjdHggKmMsIGludCBzLCBpbnQgbiwNCiAJCWZ3ZF9uZWlnaF9tYWNfZ2V0KGMsICZ0 b3NpZGUtPm9hZGRyLCBvbWFjKTsNCg0KIAlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQ0KLQkJdWRw X3RhcF9wcmVwYXJlKHVkcF9taF9yZWN2LCBpLCBvbWFjLCB0b3NpZGUsIGZhbHNlKTsNCisJCXVk cF90YXBfcHJlcGFyZShjLCB1ZHBfbWhfcmVjdiwgaSwgb21hYywgdG9zaWRlLCBmYWxzZSk7DQoN CiAJdGFwX3NlbmRfZnJhbWVzKGMsICZ1ZHBfbDJfaW92WzBdWzBdLCBVRFBfTlVNX0lPVlMsIG4p Ow0KIH0NCi0tDQoyLjM5LjUgKEFwcGxlIEdpdC0xNTQpDQoNCg0KRnJvbSBkNjE2NzI0Mzg2ZGYz OGM0NzRkMzA0NTA4ZGE2NGQxYmU0MTZiNWNkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJv bTogQW1tYXIgWWFzc2VyIDxhZXJvc291bmQxNjFAZ21haWwuY29tPg0KRGF0ZTogRnJpLCA0IFNl cCAyMDI2IDEzOjQ3OjA5ICswMDAwDQpTdWJqZWN0OiBbUEFUQ0ggdjIgNi83XSB0YXA6IEltcGxl bWVudCB0aGUgcGFzdGEgdmhvc3QtbmV0IHRvLWd1ZXN0IHBhdGgNCk1JTUUtVmVyc2lvbjogMS4w DQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgNCkNvbnRlbnQtVHJhbnNm ZXItRW5jb2Rpbmc6IDhiaXQNClRvOiBwYXNzdC1kZXZAcGFzc3QudG9wDQpDYzogPT9VVEYtOD9x P0V1Z2VuaW89MjBQPUMzPUE5cmV6Pz0gPGVwZXJlem1hQHJlZGhhdC5jb20+DQoNCkFkZCBhIHZo b3N0IGFyZ3VtZW50IHRvIHRhcF9zZW5kX2ZyYW1lc19wYXN0YSgpLiBDYWxsZXJzIHBhc3MgaXQg dG8gc2F5DQp3aGV0aGVyIHRoaXMgc2VuZCBzaG91bGQgZ28gdGhyb3VnaCB2aG9zdC1uZXQsIGFu ZCB3aGVuIGl0IGRvZXMgc2VuZGluZw0KZ29lcyB0aHJvdWdoIHRhcF9zZW5kX2ZyYW1lc192aG9z dCgpLCB3aGljaCB0YWtlcyBhIGRlc2NyaXB0b3IgZnJvbSB0aGUNCnF1ZXVlIHNoYXJlZCB3aXRo IHRoZSBrZXJuZWwgZm9yIGVhY2ggaW92IGFuZCBwb2ludHMgaXQgYXQgdGhhdCBpb3Yncw0KYmFz ZSBhZGRyZXNzLCBjaGFpbmluZyB0aGUgYnVmc19wZXJfZnJhbWUgZGVzY3JpcHRvcnMgb2YgYSBm cmFtZQ0KdG9nZXRoZXIgc28gdGhlIGd1ZXN0IHJlY2VpdmVzIGl0IGluIG9uZSBnby4NCg0KdHhf cmVhcCgpIHJlY2xhaW1zIHRoZSBkZXNjcmlwdG9ycyB0aGUga2VybmVsIGhhcyBmaW5pc2hlZCB3 aXRoLCB3YWxraW5nDQplYWNoIHVzZWQgY2hhaW4gdG8gaXRzIGVuZCBzbyB0aGF0IGV2ZXJ5IGRl c2NyaXB0b3IgaW4gaXQgaXMgY291bnRlZCBhcw0KZnJlZSBhZ2Fpbi4NCg0KU2lnbmVkLW9mZi1i eTogRXVnZW5pbyBQw6lyZXogPGVwZXJlem1hQHJlZGhhdC5jb20+DQpTaWduZWQtb2ZmLWJ5OiBB bW1hciBZYXNzZXIgPGFlcm9zb3VuZDE2MUBnbWFpbC5jb20+DQotLS0NCiB0YXAuYyB8IDE1MCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t DQogMSBmaWxlIGNoYW5nZWQsIDE0NyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQ0KDQpk aWZmIC0tZ2l0IGEvdGFwLmMgYi90YXAuYw0KaW5kZXggZmQ1MDBmMS4uYmMyNzAwZiAxMDA2NDQN Ci0tLSBhL3RhcC5jDQorKysgYi90YXAuYw0KQEAgLTM1OSwxMiArMzU5LDE1MSBAQCB2b2lkIHRh cF9pY21wNl9zZW5kKGNvbnN0IHN0cnVjdCBjdHggKmMsDQogCXRhcF9zZW5kX3NpbmdsZShjLCBi dWYsIGw0bGVuICsgKChjaGFyICopaWNtcDZoIC0gYnVmKSk7DQogfQ0KDQorLyoqDQorICogdHhf cmVhcCgpIC0gUmVjbGFpbSB0aGUgZGVzY3JpcHRvcnMgdGhlIGtlcm5lbCBoYXMgYWxyZWFkeSBw cm9jZXNzZWQNCisgKi8NCitzdGF0aWMgdm9pZCB0eF9yZWFwKHZvaWQpDQorew0KKwlzdHJ1Y3Qg dnJpbmdfdXNlZF9wYXN0YSAqdXNlZCA9ICZ2cmluZ191c2VkX2FsbFtWSE9TVF9VU0VEX1FfSURY XTsNCisJdWludDE2X3QgdXNlZF9pZHggPSBsZTE2dG9oKHVzZWQtPmlkeCk7DQorDQorCXNtcF9y bWIoKTsNCisNCisJLyogaW5jcmVtZW50IGxhc3RfdXNlZF9pZHggdW50aWwgaXQgcmVhY2hlcyB0 aGUga2VybmVsJ3MgdXNlZCBpbmRleCAqLw0KKwl3aGlsZSAodmhvc3RfdnFfc3RhdGVbVkhPU1Rf VVNFRF9RX0lEWF0ubGFzdF91c2VkX2lkeCAhPSB1c2VkX2lkeCkgew0KKwkJdWludDE2X3QgbGFz dF91c2VkOw0KKwkJdWludDMyX3QgZGVzY19pZDsNCisNCisJCWxhc3RfdXNlZCA9IHZob3N0X3Zx X3N0YXRlW1ZIT1NUX1VTRURfUV9JRFhdLmxhc3RfdXNlZF9pZHggJSBWSE9TVF9OREVTQ1M7DQor CQlkZXNjX2lkID0gbGUzMnRvaCh1c2VkLT5yaW5nW2xhc3RfdXNlZF0uaWQpOw0KKw0KKwkJZm9y ICg7Oykgew0KKwkJCS8qIGtlZXAgZ29pbmcgdW50aWwgd2UgZmluZCBhIGRlc2NyaXB0b3Igd2l0 aG91dCB0aGUNCisJCQkgKiBuZXh0IGZsYWcNCisJCQkgKi8NCisJCQl2aG9zdF92cV9zdGF0ZVtW SE9TVF9VU0VEX1FfSURYXS5udW1fZnJlZSsrOw0KKwkJCWlmICghKGxlMTZ0b2godnJpbmdfZGVz Y1tWSE9TVF9VU0VEX1FfSURYXVtkZXNjX2lkXS5mbGFncykgJg0KKwkJCSAgICAgIFZSSU5HX0RF U0NfRl9ORVhUKSkNCisJCQkJYnJlYWs7DQorDQorCQkJLyogdGhpcyBkZXNjcmlwdG9yIHdhc24n dCB0aGUgbGFzdCwgc2V0IGRlc2NfaWQgdG8gdGhlDQorCQkJICogbmV4dCBvbmUgYW5kIGtlZXAg Z29pbmcNCisJCQkgKi8NCisJCQlkZXNjX2lkID0gbGUzMnRvaCh2cmluZ19kZXNjW1ZIT1NUX1VT RURfUV9JRFhdW2Rlc2NfaWRdLm5leHQpOw0KKwkJfQ0KKw0KKwkJdmhvc3RfdnFfc3RhdGVbVkhP U1RfVVNFRF9RX0lEWF0ubGFzdF91c2VkX2lkeCsrOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIHRh cF9zZW5kX2ZyYW1lc192aG9zdCgpIC0gU2VuZCBtdWx0aXBsZSBmcmFtZXMgdG8gdGhlIHBhc3Rh IHRhcA0KKyAqIEBjOgkJCUV4ZWN1dGlvbiBjb250ZXh0DQorICogQGlvdjoJCUFycmF5IG9mIGJ1 ZmZlcnMNCisgKiBAYnVmc19wZXJfZnJhbWU6CU51bWJlciBvZiBidWZmZXJzIChpb3ZlYyBlbnRy aWVzKSBwZXIgZnJhbWUNCisgKiBAbmZyYW1lczoJCU51bWJlciBvZiBmcmFtZXMgdG8gc2VuZA0K KyAqDQorICogQGlvdiBtdXN0IGhhdmUgdG90YWwgbGVuZ3RoIEBidWZzX3Blcl9mcmFtZSAqIEBu ZnJhbWVzLCB3aXRoIGVhY2ggc2V0IG9mDQorICogQGJ1ZnNfcGVyX2ZyYW1lIGNvbnRpZ3VvdXMg YnVmZmVycyByZXByZXNlbnRpbmcgYSBzaW5nbGUgZnJhbWUuDQorICoNCisgKiBSZXR1cm46IG51 bWJlciBvZiBmcmFtZXMgc3VjY2Vzc2Z1bGx5IHNlbnQNCisgKi8NCitzdGF0aWMgc2l6ZV90IHRh cF9zZW5kX2ZyYW1lc192aG9zdChjb25zdCBzdHJ1Y3QgY3R4ICpjLA0KKwkJCQkgICAgY29uc3Qg c3RydWN0IGlvdmVjICppb3YsDQorCQkJCSAgICBzaXplX3QgYnVmc19wZXJfZnJhbWUsIHNpemVf dCBuZnJhbWVzKQ0KK3sNCisJc3RydWN0IHZyaW5nX2F2YWlsX3Bhc3RhICphdmFpbCA9DQorCQkm dnJpbmdfYXZhaWxfYWxsW1ZIT1NUX1VTRURfUV9JRFhdOw0KKwlzaXplX3QgcHJvY2Vzc2VkX2Zy YW1lcyA9IDA7DQorCXNpemVfdCBpOw0KKw0KKwkvKiByZWNsYWltIGRlc2NyaXB0b3JzIGlmIHdl IGRvbid0IGhhdmUgZW5vdWdoIGF2YWlsYWJsZSBidWZmZXJzIHRvDQorCSAqIHBlcmZvcm0gdGhp cyBzZW5kDQorCSAqLw0KKwlpZiAodmhvc3RfdnFfc3RhdGVbVkhPU1RfVVNFRF9RX0lEWF0ubnVt X2ZyZWUgPCBidWZzX3Blcl9mcmFtZSAqIG5mcmFtZXMpDQorCQl0eF9yZWFwKCk7DQorDQorCWZv ciAoaSA9IDA7IGkgPCBuZnJhbWVzOyBpKyspIHsNCisJCXVpbnQxNl90IGhlYWQ7DQorCQlzaXpl X3QgajsNCisNCisJCS8qIGl0J3MgbGlrZWx5IHRoYXQgdHhfcmVhcCByZXR1cm5lZCB0byB1cyBs ZXNzIHRoYW4NCisJCSAqIGJ1ZnNfcGVyX2ZyYW1lIGRlc2NzDQorCQkgKi8NCisJCWlmICh2aG9z dF92cV9zdGF0ZVtWSE9TVF9VU0VEX1FfSURYXS5udW1fZnJlZSA8IGJ1ZnNfcGVyX2ZyYW1lKQ0K KwkJCWJyZWFrOw0KKw0KKwkJLyogc2V0IHRoZSBpbmRleCBvZiB0aGUgYXZhaWwgcmluZyBpbiB0 aGUgdHggcXVldWUgdG8gYmUgb3VyDQorCQkgKiBsYXN0X3VzZWRfaWR4DQorCQkgKi8NCisJCWhl YWQgPSB2aG9zdF92cV9zdGF0ZVtWSE9TVF9VU0VEX1FfSURYXS5uZXh0X2ZyZWUgJSBWSE9TVF9O REVTQ1M7DQorCQlhdmFpbC0+cmluZ1soYXZhaWwtPmlkeCArIGkpICUgVkhPU1RfTkRFU0NTXSA9 IGh0b2xlMTYoaGVhZCk7DQorDQorCQkvKiB3ZSB3aWxsIGJlIGNvbnN1bWluZyBidWZzX3Blcl9m cmFtZSBkZXNjcmlwdG9ycyBmb3IgZXZlcnkNCisJCSAqIGZyYW1lLCBkZWNyZW1lbnQgdGhlIGxv Y2FsIG51bV9mcmVlDQorCQkgKi8NCisJCXZob3N0X3ZxX3N0YXRlW1ZIT1NUX1VTRURfUV9JRFhd Lm51bV9mcmVlIC09IGJ1ZnNfcGVyX2ZyYW1lOw0KKw0KKwkJZm9yIChqID0gMDsgaiA8IGJ1ZnNf cGVyX2ZyYW1lOyArK2opIHsNCisJCQl1aW50MTZfdCBuZXh0ID0NCisJCQkJdmhvc3RfdnFfc3Rh dGVbVkhPU1RfVVNFRF9RX0lEWF0ubmV4dF9mcmVlICUNCisJCQkJVkhPU1RfTkRFU0NTOw0KKwkJ CS8qIGdldCB0aGUgbGFzdF91c2VkX2lkeCBkZXNjcmlwdG9yICovDQorCQkJc3RydWN0IHZyaW5n X2Rlc2NfcGFzdGEgKmRlc2MgPQ0KKwkJCQkmdnJpbmdfZGVzY1tWSE9TVF9VU0VEX1FfSURYXVtu ZXh0XTsNCisJCQljb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdl9pOw0KKw0KKwkJCS8qIHRoZSBpb3Yg dmFyaWFibGUgY29udGFpbnMgdGhlIGlvdmVjcyBmb3IgYWxsIGZyYW1lcw0KKwkJCSAqIHdlIHdp bGwgc2VuZC4gYWNjZXNzIGEgc2luZ2xlIGZyYWdtZW50IG9mIGEgZnJhbWUNCisJCQkgKiAoZWFj aCBmcmFnbWVudCBpcyBvbmUgb2YgdGNwX2lvdl9wYXJ0cykgZGVub3RlZCBieQ0KKwkJCSAqIGlv diBhdCBpbmRleCBpIChpbmRleCBvZiB0aGUgZnJhbWUgYmVpbmcgcHJvY2Vzc2VkKQ0KKwkJCSAq ICogYnVmc19wZXJfZnJhbWUgcGx1cyBqICh0aGUgaW5kZXggb2YgdGhlIGZyYWdtZW50DQorCQkJ ICogYmVpbmcgcHJvY2Vzc2VkKQ0KKwkJCSAqLw0KKwkJCWlvdl9pID0gJmlvdltpICogYnVmc19w ZXJfZnJhbWUgKyBqXTsNCisNCisJCQkvKiBzZXQgdGhhdCBkZXNjcmlwdG9yJ3MgYWRkcmVzcyB0 byB0aGUgYmFzZSBvZiB0aGUgaW92DQorCQkJICogYW5kIHNldCB0aGUgVlJJTkdfREVTQ19GX05F WFQgZmxhZyBvbiB0aGUgZGVzY3JpcHRvcg0KKwkJCSAqIGlmIGl0cyBub3QgdGhlIGxhc3QgZnJh bWUgZnJhZ21lbnQsIHNvIHRoYXQgdGhlDQorCQkJICogZ3Vlc3Qgd291bGQgcmVjaWV2ZSB0aGUg ZW50aXJlIGZyYW1lIGluIG9uZSBnby4NCisJCQkgKi8NCisJCQlkZXNjLT5hZGRyID0gKHVpbnQ2 NF90KWlvdl9pLT5pb3ZfYmFzZTsNCisJCQlkZXNjLT5sZW4gPSBpb3ZfaS0+aW92X2xlbjsNCisJ CQlkZXNjLT5mbGFncyA9IChqID09IGJ1ZnNfcGVyX2ZyYW1lIC0gMSkgPw0KKwkJCQkgICAgICAw IDogaHRvbGUxNihWUklOR19ERVNDX0ZfTkVYVCk7DQorDQorCQkJdmhvc3RfdnFfc3RhdGVbVkhP U1RfVVNFRF9RX0lEWF0ubmV4dF9mcmVlKys7DQorCQl9DQorDQorCQlwcm9jZXNzZWRfZnJhbWVz Kys7DQorCX0NCisNCisJLyogd2UgZGlkbid0IHByb2Nlc3MgYW55IGZyYW1lcywgbm8gbmVlZCB0 byBub3RpZnkgdGhlIGtlcm5lbCAqLw0KKwlpZiAoIXByb2Nlc3NlZF9mcmFtZXMpDQorCQlyZXR1 cm4gMDsNCisNCisJc21wX3dtYigpOw0KKw0KKwkvKiB3ZSB3aWxsIGhhdmUgdXNlZCBuZnJhbWVz IGRlc2NyaXB0b3IgY2hhaW5zICovDQorCWF2YWlsLT5pZHggPSBodG9sZTE2KGxlMTZ0b2goYXZh aWwtPmlkeCkgKyBwcm9jZXNzZWRfZnJhbWVzKTsNCisNCisJdmhvc3Rfa2ljaygmdnJpbmdfdXNl ZF9hbGxbVkhPU1RfVVNFRF9RX0lEWF0sDQorCQkgICBjLT52aG9zdC52cVtWSE9TVF9VU0VEX1Ff SURYXS5raWNrX2ZkKTsNCisNCisJLyogd2FpdCB1bnRpbCB0aGUga2VybmVsIGZpbmlzaGVzIHBy b2Nlc3NpbmcgdGhpcyBzZW5kICovDQorCXdoaWxlIChhdmFpbC0+aWR4ICE9IHZyaW5nX3VzZWRf YWxsWzFdLnVzZWQuaWR4KQ0KKwkJOw0KKw0KKwlyZXR1cm4gcHJvY2Vzc2VkX2ZyYW1lczsNCit9 DQorDQogLyoqDQogICogdGFwX3NlbmRfZnJhbWVzX3Bhc3RhKCkgLSBTZW5kIG11bHRpcGxlIGZy YW1lcyB0byB0aGUgcGFzdGEgdGFwDQogICogQGM6CQkJRXhlY3V0aW9uIGNvbnRleHQNCiAgKiBA aW92OgkJQXJyYXkgb2YgYnVmZmVycw0KICAqIEBidWZzX3Blcl9mcmFtZToJTnVtYmVyIG9mIGJ1 ZmZlcnMgKGlvdmVjIGVudHJpZXMpIHBlciBmcmFtZQ0KICAqIEBuZnJhbWVzOgkJTnVtYmVyIG9m IGZyYW1lcyB0byBzZW5kDQorICogQHZob3N0OgkJU2VuZCB0aHJvdWdoIHZob3N0LW5ldCByYXRo ZXIgdGhhbiB3cml0aW5nIHRvIHRoZSB0YXANCiAgKg0KICAqIEBpb3YgbXVzdCBoYXZlIHRvdGFs IGxlbmd0aCBAYnVmc19wZXJfZnJhbWUgKiBAbmZyYW1lcywgd2l0aCBlYWNoIHNldCBvZg0KICAq IEBidWZzX3Blcl9mcmFtZSBjb250aWd1b3VzIGJ1ZmZlcnMgcmVwcmVzZW50aW5nIGEgc2luZ2xl IGZyYW1lLg0KQEAgLTM3NSwxMSArNTE0LDE1IEBAIHZvaWQgdGFwX2ljbXA2X3NlbmQoY29uc3Qg c3RydWN0IGN0eCAqYywNCiAgKi8NCiBzdGF0aWMgc2l6ZV90IHRhcF9zZW5kX2ZyYW1lc19wYXN0 YShjb25zdCBzdHJ1Y3QgY3R4ICpjLA0KIAkJCQkgICAgY29uc3Qgc3RydWN0IGlvdmVjICppb3Ys DQotCQkJCSAgICBzaXplX3QgYnVmc19wZXJfZnJhbWUsIHNpemVfdCBuZnJhbWVzKQ0KKwkJCQkg ICAgc2l6ZV90IGJ1ZnNfcGVyX2ZyYW1lLCBzaXplX3QgbmZyYW1lcywNCisJCQkJICAgIGJvb2wg dmhvc3QpDQogew0KIAlzaXplX3QgbmJ1ZnMgPSBidWZzX3Blcl9mcmFtZSAqIG5mcmFtZXM7DQog CXNpemVfdCBpOw0KDQorCWlmICh2aG9zdCkNCisJCXJldHVybiB0YXBfc2VuZF9mcmFtZXNfdmhv c3QoYywgaW92LCBidWZzX3Blcl9mcmFtZSwgbmZyYW1lcyk7DQorDQogCWZvciAoaSA9IDA7IGkg PCBuYnVmczsgaSArPSBidWZzX3Blcl9mcmFtZSkgew0KIAkJc3NpemVfdCByYyA9IHdyaXRldihj LT5mZF90YXAsIGlvdiArIGksIGJ1ZnNfcGVyX2ZyYW1lKTsNCiAJCXNpemVfdCBmcmFtZWxlbiA9 IGlvdl9zaXplKGlvdiArIGksIGJ1ZnNfcGVyX2ZyYW1lKTsNCkBAIC01MTUsNyArNjU4LDcgQEAg dm9pZCB0YXBfc2VuZF9zaW5nbGUoY29uc3Qgc3RydWN0IGN0eCAqYywgY29uc3Qgdm9pZCAqZGF0 YSwgc2l6ZV90IGwybGVuKQ0KIAkJaW92W2lvdmNudF0uaW92X2xlbiA9IGwybGVuOw0KIAkJaW92 Y250Kys7DQoNCi0JCW0gPSB0YXBfc2VuZF9mcmFtZXNfcGFzdGEoYywgaW92LCBpb3ZjbnQsIDEp Ow0KKwkJbSA9IHRhcF9zZW5kX2ZyYW1lc19wYXN0YShjLCBpb3YsIGlvdmNudCwgMSwgZmFsc2Up Ow0KIAkJYnJlYWs7DQogCWNhc2UgTU9ERV9WVToNCiAJCXZ1X3NlbmRfc2luZ2xlKGMsIGRhdGEs IGwybGVuKTsNCkBAIC01NTMsNyArNjk2LDggQEAgc2l6ZV90IHRhcF9zZW5kX2ZyYW1lcyhjb25z dCBzdHJ1Y3QgY3R4ICpjLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwNCg0KIAlzd2l0Y2ggKGMt Pm1vZGUpIHsNCiAJY2FzZSBNT0RFX1BBU1RBOg0KLQkJbSA9IHRhcF9zZW5kX2ZyYW1lc19wYXN0 YShjLCBpb3YsIGJ1ZnNfcGVyX2ZyYW1lLCBuZnJhbWVzKTsNCisJCW0gPSB0YXBfc2VuZF9mcmFt ZXNfcGFzdGEoYywgaW92LCBidWZzX3Blcl9mcmFtZSwgbmZyYW1lcywNCisJCQkJCSAgYy0+dmhv c3QuZmQgIT0gLTEpOw0KIAkJYnJlYWs7DQogCWNhc2UgTU9ERV9QQVNTVDoNCiAJCW0gPSB0YXBf c2VuZF9mcmFtZXNfcGFzc3QoYywgaW92LCBidWZzX3Blcl9mcmFtZSwgbmZyYW1lcyk7DQotLQ0K Mi4zOS41IChBcHBsZSBHaXQtMTU0KQ0KDQoNCkZyb20gNWJlMDc5ZWY5ODY2YTI2YmU5YzU3ZjFj MDY1OTdhZTYxZDBhNWQzNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDENCkZyb206IEFtbWFyIFlh c3NlciA8YWVyb3NvdW5kMTYxQGdtYWlsLmNvbT4NCkRhdGU6IEZyaSwgNCBTZXAgMjAyNiAxNDow MjoyNyArMDAwMA0KU3ViamVjdDogW1BBVENIIHYyIDcvN10gdGFwL3RjcDogUmVwbGFjZSB0Y3Bf cGF5bG9hZF91c2VkIHdpdGggYSByaW5nIGJ1ZmZlcg0KIHN0eWxlIGluZGV4DQpNSU1FLVZlcnNp b246IDEuMA0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04DQpDb250ZW50 LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0DQpUbzogcGFzc3QtZGV2QHBhc3N0LnRvcA0KQ2M6ID0/ VVRGLTg/cT9FdWdlbmlvPTIwUD1DMz1BOXJlej89IDxlcGVyZXptYUByZWRoYXQuY29tPg0KDQpC ZWNhdXNlIHBhc3RhIHJlc2V0cyB0Y3BfcGF5bG9hZF91c2VkIHRvIDAgYWZ0ZXIgZXZlcnkgdGNw IGZsdXNoIHRoaXMNCm1lYW5zIHRoYXQgcGFzdGEgd2lsbCB2ZXJ5IHF1aWNrbHkgb3ZlcnJpZGUg ZGF0YSBpbiB0aGUgdGNwIGJ1ZmZlcnMNCmFmdGVyIHNlbmRpbmcuIFRoaXMgaXMgbm90IGEgcHJv YmxlbSB3aGVuIHVzaW5nIHdyaXRldiBiZWNhdXNlIHRoZSBkYXRhDQp3aWxsIGhhdmUgYmVlbiBj b3BpZWQgZWxzZXdoZXJlIGJ5IHRoZSBrZXJuZWwsIGJ1dCB0aGlzIGlzIGEgcHJvYmxlbSBmb3IN CnZob3N0IHdoZXJlIHRoZSBrZXJuZWwgdGhyZWFkIG1heSBub3QgaGF2ZSBmaW5pc2hlZCBwcm9j ZXNzaW5nIHRoaXMNCmRhdGEuIFRoaXMgaXMgd2h5IGEgc3luY2hyb25vdXMgc2VuZCB3YXMgcmVx dWlyZWQgaW4gdmhvc3QsIHdoaWNoDQpvYnZpb3VzbHkgYWZmZWN0cyBwZXJmb3JtYW5jZS4NCg0K UmVwbGFjZSB0Y3BfcGF5bG9hZF91c2VkIHdpdGggYSBzdHJ1Y3QgdGNwX3BheWxvYWRfaWR4IGhv bGRpbmcgdGhlIGxhc3QNCmluZGV4IHdlIHdyb3RlIHRvIGFuZCBhIGNvdW50ZXIgdGhhdCBnZXRz IHVwZGF0ZWQgd2hlbiB3ZSBmbHVzaCBwYWNrZXRzLA0KZnJvbSB3aGVyZSB3ZSBsYXN0IGZsdXNo ZWQgdXAgdG8gdGhhdCBpbmRleC4gQm90aCBhcmUgZ3JvdyBvbmx5IGFuZA0KYWNjZXNzIGdldHMg bW9kZGVkIGJ5IFRDUF9GUkFNRVNfTUVNLg0KDQpSZXdyaXRlIGZ1bmN0aW9ucyBpbiB0Y3BfYnVm LmMgdG8gdXNlIHRoYXQgaW5kZXggYW5kIGhhbmRsZSB0aGUNCndyYXBhcm91bmQgY2FzZSAoc2Vu ZGluZyBhIGJhdGNoIHRoYXQgc3RhcnRlZCBuZWFyIHRoZSBlbmQgb2YgdGhlDQpidWZmZXJzIGFu ZCBjb250aW51ZWQgdG8gYmUgYXQgdGhlIHN0YXJ0KSBpbiB0Y3BfcGF5bG9hZF9mbHVzaCgpLg0K DQpXaXRoIHRoZSBidWZmZXJzIG5vIGxvbmdlciByZXVzZWQgZnJvbSB1bmRlciB0aGUga2VybmVs LCBkcm9wIHRoZQ0Kc3luY2hyb25vdXMgd2FpdCBmcm9tIHRhcF9zZW5kX2ZyYW1lc192aG9zdCgp IGFuZCByZWNsYWltIGRlc2NyaXB0b3JzDQp1bnRpbCB0aGVyZSBhcmUgZW5vdWdoIGZvciB0aGUg c2VuZCBpbnN0ZWFkLg0KDQpTaWduZWQtb2ZmLWJ5OiBFdWdlbmlvIFDDqXJleiA8ZXBlcmV6bWFA cmVkaGF0LmNvbT4NClNpZ25lZC1vZmYtYnk6IEFtbWFyIFlhc3NlciA8YWVyb3NvdW5kMTYxQGdt YWlsLmNvbT4NCi0tLQ0KIHRhcC5jICAgICB8ICAgNiArLS0NCiB0Y3BfYnVmLmMgfCAxMTUgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tDQogMiBm aWxlcyBjaGFuZ2VkLCA4NiBpbnNlcnRpb25zKCspLCAzNSBkZWxldGlvbnMoLSkNCg0KZGlmZiAt LWdpdCBhL3RhcC5jIGIvdGFwLmMNCmluZGV4IGJjMjcwMGYuLjA0NTY1ODkgMTAwNjQ0DQotLS0g YS90YXAuYw0KKysrIGIvdGFwLmMNCkBAIC00OTAsMTAgKzQ5MCw2IEBAIHN0YXRpYyBzaXplX3Qg dGFwX3NlbmRfZnJhbWVzX3Zob3N0KGNvbnN0IHN0cnVjdCBjdHggKmMsDQogCXZob3N0X2tpY2so JnZyaW5nX3VzZWRfYWxsW1ZIT1NUX1VTRURfUV9JRFhdLA0KIAkJICAgYy0+dmhvc3QudnFbVkhP U1RfVVNFRF9RX0lEWF0ua2lja19mZCk7DQoNCi0JLyogd2FpdCB1bnRpbCB0aGUga2VybmVsIGZp bmlzaGVzIHByb2Nlc3NpbmcgdGhpcyBzZW5kICovDQotCXdoaWxlIChhdmFpbC0+aWR4ICE9IHZy aW5nX3VzZWRfYWxsWzFdLnVzZWQuaWR4KQ0KLQkJOw0KLQ0KIAlyZXR1cm4gcHJvY2Vzc2VkX2Zy YW1lczsNCiB9DQoNCkBAIC01MjEsNyArNTE3LDcgQEAgc3RhdGljIHNpemVfdCB0YXBfc2VuZF9m cmFtZXNfcGFzdGEoY29uc3Qgc3RydWN0IGN0eCAqYywNCiAJc2l6ZV90IGk7DQoNCiAJaWYgKHZo b3N0KQ0KLQkJcmV0dXJuIHRhcF9zZW5kX2ZyYW1lc192aG9zdChjLCBpb3YsIGJ1ZnNfcGVyX2Zy YW1lLCBuZnJhbWVzKTsNCisJIAlyZXR1cm4gdGFwX3NlbmRfZnJhbWVzX3Zob3N0KGMsIGlvdiwg YnVmc19wZXJfZnJhbWUsIG5mcmFtZXMpOw0KDQogCWZvciAoaSA9IDA7IGkgPCBuYnVmczsgaSAr PSBidWZzX3Blcl9mcmFtZSkgew0KIAkJc3NpemVfdCByYyA9IHdyaXRldihjLT5mZF90YXAsIGlv diArIGksIGJ1ZnNfcGVyX2ZyYW1lKTsNCmRpZmYgLS1naXQgYS90Y3BfYnVmLmMgYi90Y3BfYnVm LmMNCmluZGV4IDQ5M2M1YzkuLjQyNTQxMGYgMTAwNjQ0DQotLS0gYS90Y3BfYnVmLmMNCisrKyBi L3RjcF9idWYuYw0KQEAgLTU5LDcgKzU5LDIyIEBAIHN0YXRpY19hc3NlcnQoTVNTNiA8PSBzaXpl b2YodGNwX3BheWxvYWRbMF0uZGF0YSksICJNU1M2IGlzIGdyZWF0ZXIgdGhhbiA2NTUxNiIpDQoN CiAvKiBSZWZlcmVuY2VzIHRyYWNraW5nIHRoZSBvd25lciBjb25uZWN0aW9uIG9mIGZyYW1lcyBp biB0aGUgdGFwIG91dHF1ZXVlICovDQogc3RhdGljIHN0cnVjdCB0Y3BfdGFwX2Nvbm4gKnRjcF9m cmFtZV9jb25uc1tUQ1BfRlJBTUVTX01FTV07DQotc3RhdGljIHVuc2lnbmVkIGludCB0Y3BfcGF5 bG9hZF91c2VkOw0KKw0KKy8qKg0KKyAqIHN0cnVjdCB0Y3BfcGF5bG9hZF9pZHggLSBHcm93LW9u bHkgY3Vyc29ycyBpbnRvIHRoZSBUQ1AgZnJhbWUgYnVmZmVycw0KKyAqIEB0Y3BfYnVmX2lkeDoJ VGhlIGxhc3QgaW5kZXggd2Ugd3JvdGUgZGF0YSB0byBpbiB0aGUgdGNwIGJ1ZmZlcnMNCisgKiBA cHJvY2Vzc2VkOgkJTGFzdCBpbmRleCB3ZSBwdXNoZWQgdG8gdGhlIHVuZGVybHlpbmcgY29ubmVj dGlvbg0KKyAqLw0KK3N0YXRpYyBzdHJ1Y3QgdGNwX3BheWxvYWRfaWR4IHsNCisJdW5zaWduZWQg aW50IHRjcF9idWZfaWR4Ow0KKwl1bnNpZ25lZCBpbnQgcHJvY2Vzc2VkOw0KK30gdGNwX2lkeDsN CisNCisvKiBsYXRlc3QgaW5kZXggd2Ugd3JvdGUgdG8gaW50byB0aGUgdGNwIGJ1ZmZlcnMgKi8N CisjZGVmaW5lIFRDUF9DVVJSX0lEWAkodGNwX2lkeC50Y3BfYnVmX2lkeCAlIFRDUF9GUkFNRVNf TUVNKQ0KKw0KKy8qIGN1cnJlbnQgYW1vdW50IG9mIGZyYW1lcyBxdWV1ZWQgaW4gdGNwIGJ1ZmZl cnMgYnV0IG5vdCBzZW50ICovDQorI2RlZmluZSBUQ1BfRlJBTUVfQ09VTlQJKHRjcF9pZHgudGNw X2J1Zl9pZHggLSB0Y3BfaWR4LnByb2Nlc3NlZCkNCg0KIC8qIHJlY3Ztc2coKS9zZW5kbXNnKCkg ZGF0YSBmb3IgdGFwICovDQogc3RhdGljIHN0cnVjdCBpb3ZlYwlpb3Zfc29jawkJW1RDUF9GUkFN RVNfTUVNICsgRElTQ0FSRF9JT1ZfTlVNXTsNCkBAIC0xNTgsMTUgKzE3Myw0NiBAQCBzdGF0aWMg dm9pZCB0Y3BfcmV2ZXJ0X3NlcShjb25zdCBzdHJ1Y3QgY3R4ICpjLCBzdHJ1Y3QgdGNwX3RhcF9j b25uICoqY29ubnMsDQogICovDQogdm9pZCB0Y3BfcGF5bG9hZF9mbHVzaChjb25zdCBzdHJ1Y3Qg Y3R4ICpjLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKm5vdykNCiB7DQotCXNpemVfdCBtOw0KKwl1 bnNpZ25lZCBpbnQgdG90YWwgPSBUQ1BfRlJBTUVfQ09VTlQ7DQorCXVuc2lnbmVkIGludCBzdGFy dCA9IHRjcF9pZHgucHJvY2Vzc2VkICUgVENQX0ZSQU1FU19NRU07DQorCXVuc2lnbmVkIGludCBm aXJzdF9iYXRjaF9zaXplLCBzZW50Ow0KDQotCW0gPSB0YXBfc2VuZF9mcmFtZXMoYywgJnRjcF9s Ml9pb3ZbMF1bMF0sIFRDUF9OVU1fSU9WUywNCi0JCQkgICAgdGNwX3BheWxvYWRfdXNlZCk7DQot CWlmIChtICE9IHRjcF9wYXlsb2FkX3VzZWQpIHsNCi0JCXRjcF9yZXZlcnRfc2VxKGMsICZ0Y3Bf ZnJhbWVfY29ubnNbbV0sICZ0Y3BfbDJfaW92W21dLA0KLQkJCSAgICAgICB0Y3BfcGF5bG9hZF91 c2VkIC0gbSwgbm93KTsNCisJaWYgKCF0b3RhbCkNCisJCXJldHVybjsNCisNCisJLyogV2hhdCBp cyBzbWFsbGVyID8gYWxsIHdlIHdoYXQgd2Ugd2FudCB0byBzZW5kID8gb3IgMTI4IC0gdGhlIGlu ZGV4DQorCSAqIGluZGljYXRpbmcgdGhlIHN0YXJ0IG9mIHdoZXJlIHdlIHdyb3RlIHRoaXMgYmF0 Y2ggPw0KKwkgKi8NCisJZmlyc3RfYmF0Y2hfc2l6ZSA9IE1JTih0b3RhbCwgVENQX0ZSQU1FU19N RU0gLSBzdGFydCk7DQorDQorCXNlbnQgPSB0YXBfc2VuZF9mcmFtZXMoYywgJnRjcF9sMl9pb3Zb c3RhcnRdWzBdLCBUQ1BfTlVNX0lPVlMsDQorCQkJICAgICAgIGZpcnN0X2JhdGNoX3NpemUpOw0K KwlpZiAoc2VudCA8IGZpcnN0X2JhdGNoX3NpemUpIHsNCisJCXRjcF9yZXZlcnRfc2VxKGMsICZ0 Y3BfZnJhbWVfY29ubnNbc3RhcnQgKyBzZW50XSwNCisJCQkgICAgICAgJnRjcF9sMl9pb3Zbc3Rh cnQgKyBzZW50XSwNCisJCQkgICAgICAgZmlyc3RfYmF0Y2hfc2l6ZSAtIHNlbnQsIG5vdyk7DQor CQlnb3RvIG91dDsNCiAJfQ0KLQl0Y3BfcGF5bG9hZF91c2VkID0gMDsNCisNCisJLyogVGhlcmUg d2FzIG1vcmUgZGF0YSB0byBzZW5kIHRoYW4gZnJvbSB0Y3BfaWR4LnByb2Nlc3NlZCB1cCB0byAx MjguDQorCSAqIHRoZSByZXN0IG9mIHRoZSBiYXRjaCBpcyBnb2luZyB0byBiZSBhdCBpbmRleCAw IHVwIHRvdGFsIC0NCisJICogZmlyc3RfYmF0Y2hfc2l6ZS4NCisJICovDQorCWlmICh0b3RhbCA+ IGZpcnN0X2JhdGNoX3NpemUpIHsNCisJCXVuc2lnbmVkIGludCBzZWNvbmRfYmF0Y2hfc2l6ZSA9 IHRvdGFsIC0gZmlyc3RfYmF0Y2hfc2l6ZTsNCisJCXNpemVfdCBtMjsNCisNCisJCW0yID0gdGFw X3NlbmRfZnJhbWVzKGMsICZ0Y3BfbDJfaW92WzBdWzBdLCBUQ1BfTlVNX0lPVlMsDQorCQkJCSAg ICAgc2Vjb25kX2JhdGNoX3NpemUpOw0KKwkJc2VudCArPSBtMjsNCisNCisJCWlmIChtMiA8IHNl Y29uZF9iYXRjaF9zaXplKQ0KKwkJCXRjcF9yZXZlcnRfc2VxKGMsICZ0Y3BfZnJhbWVfY29ubnNb bTJdLCAmdGNwX2wyX2lvdlttMl0sDQorCQkJCSAgICAgICBzZWNvbmRfYmF0Y2hfc2l6ZSAtIG0y LCBub3cpOw0KKwl9DQorDQorb3V0Og0KKwl0Y3BfaWR4LnByb2Nlc3NlZCArPSBzZW50Ow0KIH0N Cg0KIC8qKg0KQEAgLTI0NCwxMyArMjkwLDEzIEBAIGludCB0Y3BfYnVmX3NlbmRfZmxhZyhjb25z dCBzdHJ1Y3QgY3R4ICpjLCBzdHJ1Y3QgdGNwX3RhcF9jb25uICpjb25uLCBpbnQgZmxhZ3MsDQog CXVpbnQzMl90IHNlcTsNCiAJaW50IHJldDsNCg0KLQlpb3YgPSB0Y3BfbDJfaW92W3RjcF9wYXls b2FkX3VzZWRdOw0KKwlpb3YgPSB0Y3BfbDJfaW92W1RDUF9DVVJSX0lEWF07DQogCWlmIChDT05O X1Y0KGNvbm4pKQ0KLQkJaW92W1RDUF9JT1ZfSVBdID0gSU9WX09GX0xWQUxVRSh0Y3A0X3BheWxv YWRfaXBbdGNwX3BheWxvYWRfdXNlZF0pOw0KKwkJaW92W1RDUF9JT1ZfSVBdID0gSU9WX09GX0xW QUxVRSh0Y3A0X3BheWxvYWRfaXBbVENQX0NVUlJfSURYXSk7DQogCWVsc2UNCi0JCWlvdltUQ1Bf SU9WX0lQXSA9IElPVl9PRl9MVkFMVUUodGNwNl9wYXlsb2FkX2lwW3RjcF9wYXlsb2FkX3VzZWRd KTsNCisJCWlvdltUQ1BfSU9WX0lQXSA9IElPVl9PRl9MVkFMVUUodGNwNl9wYXlsb2FkX2lwW1RD UF9DVVJSX0lEWF0pOw0KDQotCWlvdltUQ1BfSU9WX0VUSF0gPSBJT1ZfT0ZfTFZBTFVFKHRjcF9l dGhfaGRyW3RjcF9wYXlsb2FkX3VzZWRdKTsNCisJaW92W1RDUF9JT1ZfRVRIXSA9IElPVl9PRl9M VkFMVUUodGNwX2V0aF9oZHJbVENQX0NVUlJfSURYXSk7DQogCXBheWxvYWQgPSBpb3ZbVENQX0lP Vl9QQVlMT0FEXS5pb3ZfYmFzZTsNCiAJc2VxID0gY29ubi0+c2VxX3RvX3RhcDsNCiAJcmV0ID0g dGNwX3ByZXBhcmVfZmxhZ3MoYywgY29ubiwgZmxhZ3MsICZwYXlsb2FkLT50aCwNCkBAIC0yNTks NyArMzA1LDggQEAgaW50IHRjcF9idWZfc2VuZF9mbGFnKGNvbnN0IHN0cnVjdCBjdHggKmMsIHN0 cnVjdCB0Y3BfdGFwX2Nvbm4gKmNvbm4sIGludCBmbGFncywNCiAJaWYgKHJldCA8PSAwKQ0KIAkJ cmV0dXJuIHJldDsNCg0KLQl0Y3BfZnJhbWVfY29ubnNbdGNwX3BheWxvYWRfdXNlZCsrXSA9IGNv bm47DQorCXRjcF9pZHgudGNwX2J1Zl9pZHgrKzsNCisJdGNwX2ZyYW1lX2Nvbm5zW1RDUF9DVVJS X0lEWF0gPSBjb25uOw0KIAlsNGxlbiA9IG9wdGxlbiArIHNpemVvZihzdHJ1Y3QgdGNwaGRyKTsN CiAJaW92W1RDUF9JT1ZfUEFZTE9BRF0uaW92X2xlbiA9IGw0bGVuOw0KDQpAQCAtMjcxLDggKzMx OCw5IEBAIGludCB0Y3BfYnVmX3NlbmRfZmxhZyhjb25zdCBzdHJ1Y3QgY3R4ICpjLCBzdHJ1Y3Qg dGNwX3RhcF9jb25uICpjb25uLCBpbnQgZmxhZ3MsDQogCXRjcF9sMl9idWZfcGFkKGlvdik7DQoN CiAJaWYgKGZsYWdzICYgRFVQX0FDSykgew0KLQkJc3RydWN0IGlvdmVjICpkdXBfaW92ID0gdGNw X2wyX2lvdlt0Y3BfcGF5bG9hZF91c2VkXTsNCi0JCXRjcF9mcmFtZV9jb25uc1t0Y3BfcGF5bG9h ZF91c2VkKytdID0gY29ubjsNCisJCXN0cnVjdCBpb3ZlYyAqZHVwX2lvdiA9IHRjcF9sMl9pb3Zb VENQX0NVUlJfSURYXTsNCisJCXRjcF9mcmFtZV9jb25uc1tUQ1BfQ1VSUl9JRFhdID0gY29ubjsN CisJCXRjcF9pZHgudGNwX2J1Zl9pZHgrKzsNCg0KIAkJbWVtY3B5KGR1cF9pb3ZbVENQX0lPVl9U QVBdLmlvdl9iYXNlLCBpb3ZbVENQX0lPVl9UQVBdLmlvdl9iYXNlLA0KIAkJICAgICAgIGlvdltU Q1BfSU9WX1RBUF0uaW92X2xlbik7DQpAQCAtMjg0LDcgKzMzMiw3IEBAIGludCB0Y3BfYnVmX3Nl bmRfZmxhZyhjb25zdCBzdHJ1Y3QgY3R4ICpjLCBzdHJ1Y3QgdGNwX3RhcF9jb25uICpjb25uLCBp bnQgZmxhZ3MsDQogCQlkdXBfaW92W1RDUF9JT1ZfRVRIX1BBRF0uaW92X2xlbiA9IGlvdltUQ1Bf SU9WX0VUSF9QQURdLmlvdl9sZW47DQogCX0NCg0KLQlpZiAodGNwX3BheWxvYWRfdXNlZCA+IFRD UF9GUkFNRVNfTUVNIC0gMikNCisJaWYgKFRDUF9GUkFNRV9DT1VOVCA+IFRDUF9GUkFNRVNfTUVN IC0gMikNCiAJCXRjcF9wYXlsb2FkX2ZsdXNoKGMsIG5vdyk7DQoNCiAJcmV0dXJuIDA7DQpAQCAt MzA5LDIxICszNTcsMjkgQEAgc3RhdGljIHZvaWQgdGNwX2RhdGFfdG9fdGFwKGNvbnN0IHN0cnVj dCBjdHggKmMsIHN0cnVjdCB0Y3BfdGFwX2Nvbm4gKmNvbm4sDQogCXN0cnVjdCBpb3ZlYyAqaW92 Ow0KDQogCWNvbm4tPnNlcV90b190YXAgPSBzZXEgKyBkbGVuOw0KLQl0Y3BfZnJhbWVfY29ubnNb dGNwX3BheWxvYWRfdXNlZF0gPSBjb25uOw0KLQlpb3YgPSB0Y3BfbDJfaW92W3RjcF9wYXlsb2Fk X3VzZWRdOw0KKwl0Y3BfZnJhbWVfY29ubnNbVENQX0NVUlJfSURYXSA9IGNvbm47DQorCWlvdiA9 IHRjcF9sMl9pb3ZbVENQX0NVUlJfSURYXTsNCiAJaWYgKENPTk5fVjQoY29ubikpIHsNCiAJCWlm IChub19jc3VtKSB7DQotCQkJc3RydWN0IGlvdmVjICppb3ZfcHJldiA9IHRjcF9sMl9pb3ZbdGNw X3BheWxvYWRfdXNlZCAtIDFdOw0KKwkJCS8qIFRDUF9DVVJSX0lEWCBtYXkgYmUgemVybyBpZiB0 aGUgdW5kZXJseWluZw0KKwkJCSAqIHRjcF9pZHgudGNwX2J1Zl9pZHggaXMgYSBtdWx0aXBsZSBv ZiAxMjgsIG1pbnVzIG9uZQ0KKwkJCSAqIHdpbGwgeWllbGQgYW4gaW52YWxpZCBpbmRleC4gVGhl IHByZXZpb3VzIGluZGV4IHRvIDANCisJCQkgKiBpcyAxMjcuDQorCQkJICovDQorCQkJdW5zaWdu ZWQgaW50IHByZXZfaWR4ID0gKFRDUF9DVVJSX0lEWCArDQorCQkJCQkJIFRDUF9GUkFNRVNfTUVN IC0gMSkgJQ0KKwkJCQkJCVRDUF9GUkFNRVNfTUVNOw0KKwkJCXN0cnVjdCBpb3ZlYyAqaW92X3By ZXYgPSB0Y3BfbDJfaW92W3ByZXZfaWR4XTsNCiAJCQljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9 IGlvdl9wcmV2W1RDUF9JT1ZfSVBdLmlvdl9iYXNlOw0KDQogCQkJLyogb3ZlcndyaXRlIElQNF9D U1VNIGZsYWcgYXMgd2Ugc2V0IHRoZSBjaGVja3N1bSAqLw0KIAkJCWNoZWNrID0gaXBoLT5jaGVj azsNCiAJCX0NCi0JCWlvdltUQ1BfSU9WX0lQXSA9IElPVl9PRl9MVkFMVUUodGNwNF9wYXlsb2Fk X2lwW3RjcF9wYXlsb2FkX3VzZWRdKTsNCisJCWlvdltUQ1BfSU9WX0lQXSA9IElPVl9PRl9MVkFM VUUodGNwNF9wYXlsb2FkX2lwW1RDUF9DVVJSX0lEWF0pOw0KIAl9IGVsc2UgaWYgKENPTk5fVjYo Y29ubikpIHsNCi0JCWlvdltUQ1BfSU9WX0lQXSA9IElPVl9PRl9MVkFMVUUodGNwNl9wYXlsb2Fk X2lwW3RjcF9wYXlsb2FkX3VzZWRdKTsNCisJCWlvdltUQ1BfSU9WX0lQXSA9IElPVl9PRl9MVkFM VUUodGNwNl9wYXlsb2FkX2lwW1RDUF9DVVJSX0lEWF0pOw0KIAl9DQotCWlvdltUQ1BfSU9WX0VU SF0uaW92X2Jhc2UgPSAmdGNwX2V0aF9oZHJbdGNwX3BheWxvYWRfdXNlZF07DQorCWlvdltUQ1Bf SU9WX0VUSF0uaW92X2Jhc2UgPSAmdGNwX2V0aF9oZHJbVENQX0NVUlJfSURYXTsNCiAJcGF5bG9h ZCA9IGlvdltUQ1BfSU9WX1BBWUxPQURdLmlvdl9iYXNlOw0KIAlwYXlsb2FkLT50aC50aF9vZmYg PSBzaXplb2Yoc3RydWN0IHRjcGhkcikgLyA0Ow0KIAlwYXlsb2FkLT50aC50aF94MiA9IDA7DQpA QCAtMzM1LDcgKzM5MSw4IEBAIHN0YXRpYyB2b2lkIHRjcF9kYXRhX3RvX3RhcChjb25zdCBzdHJ1 Y3QgY3R4ICpjLCBzdHJ1Y3QgdGNwX3RhcF9jb25uICpjb25uLA0KDQogCXRjcF9sMl9idWZfcGFk KGlvdik7DQoNCi0JaWYgKCsrdGNwX3BheWxvYWRfdXNlZCA+IFRDUF9GUkFNRVNfTUVNIC0gMSkN CisJdGNwX2lkeC50Y3BfYnVmX2lkeCsrOw0KKwlpZiAoVENQX0ZSQU1FX0NPVU5UID4gVENQX0ZS QU1FU19NRU0gLSAxKQ0KIAkJdGNwX3BheWxvYWRfZmx1c2goYywgbm93KTsNCiB9DQoNCkBAIC0z NzUsMTUgKzQzMiwxMyBAQCBpbnQgdGNwX2J1Zl9kYXRhX2Zyb21fc29jayhjb25zdCBzdHJ1Y3Qg Y3R4ICpjLCBzdHJ1Y3QgdGNwX3RhcF9jb25uICpjb25uLA0KIAkJcmV0dXJuIC0xOw0KIAl9DQoN Ci0JaWYgKHRjcF9wYXlsb2FkX3VzZWQgKyBmaWxsX2J1ZnMgPiBUQ1BfRlJBTUVTX01FTSkgew0K KwlpZiAoVENQX0ZSQU1FX0NPVU5UICsgKHVuc2lnbmVkIGludClmaWxsX2J1ZnMgPiBUQ1BfRlJB TUVTX01FTSkNCiAJCXRjcF9wYXlsb2FkX2ZsdXNoKGMsIG5vdyk7DQoNCi0JCS8qIFNpbGVuY2Ug Q292ZXJpdHkgQ1dFLTEyNSBmYWxzZSBwb3NpdGl2ZSAqLw0KLQkJdGNwX3BheWxvYWRfdXNlZCA9 IDA7DQotCX0NCi0NCiAJZm9yIChpID0gMCwgaW92ID0gaW92X3NvY2sgKyBESVNDQVJEX0lPVl9O VU07IGkgPCBmaWxsX2J1ZnM7IGkrKywgaW92KyspIHsNCi0JCWlvdi0+aW92X2Jhc2UgPSAmdGNw X3BheWxvYWRbdGNwX3BheWxvYWRfdXNlZCArIGldLmRhdGE7DQorCQl1bnNpZ25lZCBpbnQgaWR4 ID0gKFRDUF9DVVJSX0lEWCArIGkpICUgVENQX0ZSQU1FU19NRU07DQorDQorCQlpb3YtPmlvdl9i YXNlID0gJnRjcF9wYXlsb2FkW2lkeF0uZGF0YTsNCiAJCWlvdi0+aW92X2xlbiA9IG1zczsNCiAJ fQ0KIAlpZiAoaW92X3JlbSkNCkBAIC00NTcsNyArNTEyLDcgQEAgaW50IHRjcF9idWZfZGF0YV9m cm9tX3NvY2soY29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IHRjcF90YXBfY29ubiAqY29ubiwN CiAJZGxlbiA9IG1zczsNCiAJc2VxID0gY29ubi0+c2VxX3RvX3RhcDsNCiAJZm9yIChpID0gMDsg aSA8IHNlbmRfYnVmczsgaSsrKSB7DQotCQlpbnQgbm9fY3N1bSA9IGkgJiYgaSAhPSBzZW5kX2J1 ZnMgLSAxICYmIHRjcF9wYXlsb2FkX3VzZWQ7DQorCQlpbnQgbm9fY3N1bSA9IGkgJiYgaSAhPSBz ZW5kX2J1ZnMgLSAxOw0KIAkJYm9vbCBwdXNoID0gZmFsc2U7DQoNCiAJCWlmIChpID09IHNlbmRf YnVmcyAtIDEpIHsNCi0tDQoyLjM5LjUgKEFwcGxlIEdpdC0xNTQpDQo=